ZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy8ubWlzc2luZy1jb3B5cmlnaHQgYi9lMmZzcHJvZ3MvLm1pc3NpbmctY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvLm1pc3NpbmctY29weXJpZ2h0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2ZpbmQgLiAtdHlwZSBmIFwhIC1uYW1lIFwqfiBcISAtZXhlYyBncmVwIC1xIEJlZ2luLUhlYWRlciBce1x9IFw7IC1wcmludCBcCisJfCBncmVwIC12IF4uL2J1aWxkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvLnJlbGVhc2UtY2hlY2tsaXN0IGIvZTJmc3Byb2dzLy5yZWxlYXNlLWNoZWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQyNjVjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzLy5yZWxlYXNlLWNoZWNrbGlzdApAQCAtMCwwICsxLDE5IEBACisxKSAgRG8gIm1ha2UgZGVwZW5kIiBpZiBuZWNlc3NhcnkKKworMikgICJtYWtlIGNoZWNrIiEhIQorCiszKSAgVXNlICJnaXQgbG9nIiB0byBhc3NlbWJsZSByZWxlYXNlIG5vdGVzLgorCis0KSAgUnVuICIoY2QgcG87IG1ha2UgZTJmc3Byb2dzLnBvdC11cGRhdGUpIiB0byB1cGRhdGUgdGhlIHRyYW5zbGF0aW9uIHRlbXBsYXRlLgorCis1KSAgVXBkYXRlIGZpbGVzIHdoaWNoIGNvbnRhaW4gdmVyc2lvbiBpbmZvcm1hdGlvbgorCXZlcnNpb24uaAorCVJFQURNRQorCVJFTEVBU0UtTk9URVMKKwllMmZzcHJvZ3MubHNtCisJZG9jL2xpYmV4dDJmcy50ZXhpbmZvICh0aHJlZSBwbGFjZXMpCisKKzYpICBNYWtlIHNvdXJjZSBkaXN0cmlidXRpb24KKworNykgIEFkanVzdCBzaXplcyBpbiBlMmZzcHJvZ3MtVkVSLmxzbTsgcmVidWlsZCBzb3VyY2UgZmlsZXM7IHJlYnVpbGQgUlBNIGZpbGVzCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9BQk9VVC1OTFMgYi9lMmZzcHJvZ3MvQUJPVVQtTkxTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjhmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvQUJPVVQtTkxTCkBAIC0wLDAgKzEsNDM1IEBACitOb3RlcyBvbiB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIEZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKK2lzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAordG9nZXRoZXIsIHNvIHRoYXQgd2lsbCBncmFkdWFsbHkgYmVjb21lIGFibGUgdG8gc3BlYWsgbWFueSBsYW5ndWFnZXMuCitBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKworICAgSWYgeW91IGZvdW5kIHRoaXMgYEFCT1VULU5MUycgZmlsZSBpbnNpZGUgYSBkaXN0cmlidXRpb24sIHlvdSBtYXkKK2Fzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCituZWVkIHRvIGluc3RhbGwgR05VIGBnZXR0ZXh0JyBwcmlvciB0byBjb25maWd1cmluZywgaW5zdGFsbGluZyBvciB1c2luZwordGhpcyBwYWNrYWdlIHdpdGggbWVzc2FnZXMgdHJhbnNsYXRlZC4KKworICAgSW5zdGFsbGVycyB3aWxsIGZpbmQgaGVyZSBzb21lIHVzZWZ1bCBoaW50cy4gIFRoZXNlIG5vdGVzIGFsc28KK2V4cGxhaW4gaG93IHVzZXJzIHNob3VsZCBwcm9jZWVkIGZvciBnZXR0aW5nIHRoZSBwcm9ncmFtcyB0byB1c2UgdGhlCithdmFpbGFibGUgdHJhbnNsYXRpb25zLiAgVGhleSB0ZWxsIGhvdyBwZW9wbGUgd2FudGluZyB0byBjb250cmlidXRlIGFuZAord29yayBhdCB0cmFuc2xhdGlvbnMgc2hvdWxkIGNvbnRhY3QgdGhlIGFwcHJvcHJpYXRlIHRlYW0uCisKKyAgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MgaW4gdGhlIGBpbnRsLycgZGlyZWN0b3J5IG9yIGJ1Z3Mgd2hpY2ggbWF5IGJlCityZWxhdGVkIHRvIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3Ugc2hvdWxkIHRlbGwgYWJvdXQgdGhlIHZlcnNpb24gb2YKK2BnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2BpbnRsL1ZFUlNJT04nIGZpbGUsIGluIGludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzLgorCitRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CitzaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCitwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQordGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKK21hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCitJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKK29mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAordmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKK3RvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCit5b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQoraW5jbHVkZWQgYGxpYmludGwnLgorCitJTlNUQUxMIE1hdHRlcnMKKz09PT09PT09PT09PT09PQorCisgICBTb21lIHBhY2thZ2VzIGFyZSAibG9jYWxpemFibGUiIHdoZW4gcHJvcGVybHkgaW5zdGFsbGVkOyB0aGUKK3Byb2dyYW1zIHRoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuCitNb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgord2F5cyB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisKKyAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgorbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Citwcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBHTlUgYGdldHRleHQnIG93bgorbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworcGFja2FnZSwgdXN1YWxseSBpbiB0aGUgYGludGwvJyBzdWJkaXJlY3RvcnksIHNvIHByaW9yIGluc3RhbGxhdGlvbiBvZgordGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQKK2JlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKKworICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisKK3dpbGwgcmVzcGVjdGl2ZWx5IGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCitpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorCisgICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgorY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitwcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAord2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IGJlIG5vdCB3aGF0IGlzIGRlc2lyYWJsZS4gIFlvdQorc2hvdWxkIHVzZSB0aGUgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSS5lLgoraWYgdGhlIGZpbGUgYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMKK3BhY2thZ2UgaXMgbW9yZSByZWNlbnQsIHlvdSBzaG91bGQgdXNlCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKworICAgVGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCB0ZXN0IGZvciB0aGUgYGNhdGdldHMnIGZ1bmN0aW9uCithbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKK2V4dGVuc2lvbnMgb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4KKworICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgaGF2ZSB1c3VhbGx5IG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKK0xMIGdpdmVzIGFuIElTTyA2MzkgdHdvLWxldHRlciBjb2RlIGlkZW50aWZ5aW5nIHRoZSBsYW5ndWFnZS4gIFVubGVzcwordHJhbnNsYXRpb25zIGhhdmUgYmVlbiBmb3JiaWRkZW4gYXQgYGNvbmZpZ3VyZScgdGltZSBieSB1c2luZyB0aGUKK2AtLWRpc2FibGUtbmxzJyBzd2l0Y2gsIGFsbCBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGFyZSBpbnN0YWxsZWQKK3RvZ2V0aGVyIHdpdGggdGhlIHBhY2thZ2UuICBIb3dldmVyLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYExJTkdVQVMnCittYXkgYmUgc2V0LCBwcmlvciB0byBjb25maWd1cmF0aW9uLCB0byBsaW1pdCB0aGUgaW5zdGFsbGVkIHNldC4KK2BMSU5HVUFTJyBzaG91bGQgdGhlbiBjb250YWluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdHdvLWxldHRlcgorY29kZXMsIHN0YXRpbmcgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBhbGxvd2VkLgorCitVc2luZyBUaGlzIFBhY2thZ2UKKz09PT09PT09PT09PT09PT09PQorCisgICBBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorYExMX0NDJyBjb21iaW5hdGlvbi4gIEhlcmUgYExMJyBpcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZSwKK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCitzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbiBhbmQgbGl2ZSBpbiBHZXJtYW55LiAgQXQgdGhlIHNoZWxsCitwcm9tcHQsIG1lcmVseSBleGVjdXRlIGBzZXRlbnYgTEFORyBkZV9ERScgKGluIGBjc2gnKSwKK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCitUaGlzIGNhbiBiZSBkb25lIGZyb20geW91ciBgLmxvZ2luJyBvciBgLnByb2ZpbGUnIGZpbGUsIG9uY2UgYW5kIGZvcgorYWxsLgorCisgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorQnV0IGluIGZhY3QsIHNvbWUgbGFuZ3VhZ2VzIGhhdmUgZGlhbGVjdHMgaW4gZGlmZmVyZW50IGNvdW50cmllcy4gIEZvcgorZXhhbXBsZSwgYGRlX0FUJyBpcyB1c2VkIGZvciBBdXN0cmlhLCBhbmQgYHB0X0JSJyBmb3IgQnJhemlsLiAgVGhlCitjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKworICAgVGhlIGxvY2FsZSBuYW1pbmcgY29udmVudGlvbiBvZiBgTExfQ0MnLCB3aXRoIGBMTCcgZGVub3RpbmcgdGhlCitsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorb24gR05VIGxpYmMuICBPbiBvdGhlciBzeXN0ZW1zLCBzb21lIHZhcmlhdGlvbnMgb2YgdGhpcyBzY2hlbWUgYXJlCit1c2VkLCBzdWNoIGFzIGBMTCcgb3IgYExMX0NDLkVOQ09ESU5HJy4gIFlvdSBjYW4gZ2V0IHRoZSBsaXN0IG9mCitsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKK2Bsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KKworICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCitFbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQordW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCitUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCitgTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKK2ZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKK3N5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKK3JlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorCisgICBJbiB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IG5vdCBpbiB0aGUgYExBTkcnCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYExMX0NDJyBjb21iaW5hdGlvbnMgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGBMTCcKK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50Cit0byBgZGVfREUnIChHZXJtYW4gYXMgc3Bva2VuIGluIEdlcm1hbnkpLCBhbmQgYHB0JyB0byBgcHRfUFQnCisoUG9ydHVndWVzZSBhcyBzcG9rZW4gaW4gUG9ydHVnYWwpIGluIHRoaXMgY29udGV4dC4KKworVHJhbnNsYXRpbmcgVGVhbXMKKz09PT09PT09PT09PT09PT09CisKKyAgIEZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCitwZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCithYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgorRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKK3RlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCitgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorYXJlYS4KKworICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKK3Nob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKK2AtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCittZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKKworICAgICBzdWJzY3JpYmUKKworICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCityYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoreW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gcmVhY2ggdGhlCitjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCisKKyAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCit0aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGwgYXJlIHByYWlzZWQgbW9yZSB0aGFuCitwcm9ncmFtbWluZyBza2lsbCwgaGVyZS4KKworQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT0KKworICAgTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworbWF0cml4IHNob3dzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBhcyBvZiBBdWd1c3QKKzIwMDIuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCitQTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCit0cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KKworICAgICBSZWFkeSBQTyBmaWxlcyAgICBiZSBiZyBjYSBjcyBkYSBkZSBlbCBlbiBlbyBlcyBldCBmaSBmcgorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIGEycHMgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdICAgIFtdIHwKKyAgICAgYXAtdXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSB8CisgICAgIGJmZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgYmludXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBiaXNvbiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAorICAgICBjbGlzcGxvdyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZGFya3N0YXQgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICBbXSB8CisgICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgZXJyb3IgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBmZXRjaG1haWwgICAgICAgfCAgICAgICBbXSAoKSBbXSBbXSAgICAgICAgICBbXSAgICAgICAoKSB8CisgICAgIGZpbGV1dGlscyAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZmluZHV0aWxzICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgW10gW10gW10gICAgW10gfAorICAgICBmbGV4ICAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdhcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ2F3ayAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnY2FsICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdjYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ2V0dGV4dCAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBnbnVwZyAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIGdwcm9mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgIHwgICAgICAgICAgICAgKCkgKCkgICAgKCkgICAgKCkgICAgICAgKCkgfAorICAgICBncmVwICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSB8CisgICAgIGdyZXRsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3RodW1iICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgICAgICAgKCkgICAgICAgKCkgfAorICAgICBoZWxsbyAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSBbXSBbXSB8CisgICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgaW5kZW50ICAgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgW10gICAgW10gfAorICAgICBqcGlsb3QgICAgICAgICAgfCAgICAgICAgICAoKSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGp3aG9pcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAga2JkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBsZCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdIFtdIHwKKyAgICAgbGliaWNvbnYgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGxpbHlwb25kICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgbGluZ290ZWFjaCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBsaW5nb3RlYWNoX2xlc3NvbnN8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICgpICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgIHwgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgICAgICAgICAgICBbXSB8CisgICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgbWFuLWRiICAgICAgICAgIHwgICAgICAgW10gKCkgKCkgW10gICAgICAgICAgKCkgICAgICAgKCkgfAorICAgICBteXNlY3JldGRpYXJ5ICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG5hbm8gICAgICAgICAgICB8ICAgICAgIFtdICgpIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgbmFub18xXzAgICAgICAgIHwgICAgICAgW10gKCkgW10gW10gICAgICAgICAgW10gICAgICAgW10gfAorICAgICBvcGNvZGVzICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHBhcnRlZCAgICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgcHR4ICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgW10gW10gW10gW10gW10gfAorICAgICBweXRob24gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdIFtdICAgIFtdIFtdICAgICAgIFtdIHwKKyAgICAgc2VkICAgICAgICAgICAgIHwgICAgICAgW10gW10gW10gW10gW10gICAgW10gW10gW10gW10gW10gfAorICAgICBzaC11dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIFtdICAgIFtdIHwKKyAgICAgc2tldGNoICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgICAgKCkgfAorICAgICBzb3VuZHRyYWNrZXIgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB0ZXhpbmZvICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSB8CisgICAgIHRleHR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgdXRpbC1saW51eCAgICAgIHwgICAgICAgICAgW10gW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB2b3JiaXMtdG9vbHMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gfAorICAgICB3Z2V0ICAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSB8CisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW8gZXMgZXQgZmkgZnIKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgIDIgMTkgMTAgMzAgNDQgIDkgIDEgMTIgNDQgMTcgIDYgNTMKKyAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGdsIGhlIGhyIGh1IGlkIGl0IGphIGtvIGx2IG5iIG5sIG5uCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgW10gICAgfAorICAgICBhcC11dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisgICAgIGNsaXNwbG93ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgfAorICAgICBkYXJrc3RhdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICB8IFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBlcnJvciAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZmlsZXV0aWxzICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICBbXSAgICB8CisgICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICB8CisgICAgIGdudXBnICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgfCAgICAgICAgICBbXSAgICAoKSAgICAgICAgICAgICAoKSAgICB8CisgICAgIGdyZXAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGh1bWIgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwKKyAgICAgaWQtdXRpbHMgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBpbmRlbnQgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisgICAgIGpwaWxvdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICgpICAgIHwKKyAgICAgandob2lzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxkICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmdvdGVhY2hfbGVzc29uc3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICB8CisgICAgIG00ICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgIHwgW10gW10gW10gICAgICAgICAgW10gW10gICAgICAgW10gICAgfAorICAgICBtYW4tZGIgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgICAgICAgICB8CisgICAgIG15c2VjcmV0ZGlhcnkgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorICAgICBuYW5vXzFfMCAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICBbXSB8CisgICAgIG9wY29kZXMgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBwdHggICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisgICAgIHB5dGhvbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSBbXSBbXSAgICAgICBbXSAgICB8CisgICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgfAorICAgICBza2V0Y2ggICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdGV4dHV0aWxzICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgfAorICAgICB1dGlsLWxpbnV4ICAgICAgfCAgICAgICAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHZvcmJpcy10b29scyAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdnZXQgICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICBnbCBoZSBociBodSBpZCBpdCBqYSBrbyBsdiBuYiBubCBubgorICAgICAgICAgICAgICAgICAgICAgICAyMyAgOSAxMiAxOSAxNiAxMyAyNiAgOSAgMSAgNyAxOSAgMworICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgbm8gcGwgcHQgcHRfQlIgcnUgc2sgc2wgc3YgdHIgdWsgemhfQ04gemhfVFcKKyAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgfCAoKSAoKSAoKSAgW10gICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8IDEwCisgICAgIGFwLXV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgIHwgIDAKKyAgICAgYmFzaCAgICAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBiZmQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA1CisgICAgIGJpbnV0aWxzICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgYmlzb24gICAgICAgICAgIHwgICAgICAgICAgIFtdICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAxMgorICAgICBjbGlzcCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY2xpc3Bsb3cgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBjcGlvICAgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDEyCisgICAgIGRhcmtzdGF0ICAgICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAoKSAgICAoKSAgIHwgIDIKKyAgICAgZGlmZnV0aWxzICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgICAgW10gW10gICAgICAgICAgIFtdICAgfCAxNworICAgICBlbnNjcmlwdCAgICAgICAgfCAgICAgICAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA4CisgICAgIGVycm9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgIHwgIDcKKyAgICAgZmV0Y2htYWlsICAgICAgIHwgICAgKCkgICAgICgpICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgNgorICAgICBmaWxldXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgW10gICAgW10gICB8IDE0CisgICAgIGZpbmR1dGlscyAgICAgICB8ICAgIFtdICAgICBbXSAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMjEKKyAgICAgZmxleCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgOQorICAgICBnYXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICAzCisgICAgIGdhd2sgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgZ2NhbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNAorICAgICBnY2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdldHRleHQgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICBbXSAgIHwgMTMKKyAgICAgZ251cGcgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAxNAorICAgICBncHJvZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdwc2RyaXZlICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgZ3JlcCAgICAgICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgfCAyMAorICAgICBncmV0bCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGd0aHVtYiAgICAgICAgICB8ICAgICAgICAgICAoKSAgICgpICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgaGVsbG8gICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgICAgfCAyOAorICAgICBpZC11dGlscyAgICAgICAgfCAgICAgICAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8ICA5CisgICAgIGluZGVudCAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTQKKyAgICAganBpbG90ICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgKCkgW10gICAgICAgICAgIFtdICAgfCAgNQorICAgICBqd2hvaXMgICAgICAgICAgfCAgICAgICAgICAgW10gICAoKSAgICAgICAoKSBbXSAgICAgICAgICAgW10gICB8ICA3CisgICAgIGtiZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNAorICAgICBsaWJjICAgICAgICAgICAgfCBbXSBbXSAgICAgW10gICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDE4CisgICAgIGxpYmljb252ICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgbGlmZWxpbmVzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBsaWx5cG9uZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGxpbmdvdGVhY2ggICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGluZ290ZWFjaF9sZXNzb25zfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICB8ICAwCisgICAgIGx5bnggICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTMKKyAgICAgbTQgICAgICAgICAgICAgIHwgICAgW10gICAgIFtdICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworICAgICBtYWtlICAgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDE1CisgICAgIG1hbi1kYiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgbXlzZWNyZXRkaWFyeSAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgNworICAgICBuYW5vICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSAgICAgICAgICAgICB8IDEzCisgICAgIG5hbm9fMV8wICAgICAgICB8ICAgIFtdICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgICAgIHwgMTQKKyAgICAgb3Bjb2RlcyAgICAgICAgIHwgICAgICAgICAgIFtdICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfCAgOAorICAgICBwYXJ0ZWQgICAgICAgICAgfCAgICAgICBbXSAgW10gICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8IDEyCisgICAgIHB0eCAgICAgICAgICAgICB8IFtdIFtdIFtdICBbXSAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgcHl0aG9uICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICByZWNvZGUgICAgICAgICAgfCAgICBbXSAgICAgW10gICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICB8IDE1CisgICAgIHNlZCAgICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMjQKKyAgICAgc2gtdXRpbHMgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfCAgOQorICAgICBzaGFydXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgW10gICB8IDE0CisgICAgIHNrZXRjaCAgICAgICAgICB8ICAgICAgICAgICBbXSAgICgpICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgc291bmR0cmFja2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHRhciAgICAgICAgICAgICB8IFtdIFtdICAgICBbXSAgICAgIFtdIFtdIFtdIFtdICAgICAgICAgICAgICAgIHwgMTkKKyAgICAgdGV4aW5mbyAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMAorICAgICB0ZXh0dXRpbHMgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgW10gICB8IDE0CisgICAgIHV0aWwtbGludXggICAgICB8ICAgICAgICAgICBbXSAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgdm9yYmlzLXRvb2xzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAgMworICAgICB3YXN0ZXNlZGdlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIHdkaWZmICAgICAgICAgICB8ICAgICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgd2dldCAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgW10gW10gW10gW10gW10gW10gICAgICAgIFtdICAgfCAyNAorICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgMzcgdGVhbXMgICAgICAgIG5vIHBsIHB0IHB0X0JSIHJ1IHNrIHNsIHN2IHRyIHVrIHpoX0NOIHpoX1RXCisgICAgICAgNjggZG9tYWlucyAgICAgICA0IDE1ICAyICAyOCAgIDI4IDEyIDEwIDQ5IDQzICA0ICAgMSAgICAgOSAgICA2MDkKKworICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgordmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKK3VzZWQgZm9yIGltcGxlbWVudGluZyByZWdpb25hbCB2YXJpYW50cyBvZiBsYW5ndWFnZXMsIG9yIGxhbmd1YWdlCitkaWFsZWN0cy4KKworICAgRm9yIGEgUE8gZmlsZSBpbiB0aGUgbWF0cml4IGFib3ZlIHRvIGJlIGVmZmVjdGl2ZSwgdGhlIHBhY2thZ2UgdG8KK3doaWNoIGl0IGFwcGxpZXMgc2hvdWxkIGFsc28gaGF2ZSBiZWVuIGludGVybmF0aW9uYWxpemVkIGFuZAorZGlzdHJpYnV0ZWQgYXMgc3VjaCBieSBpdHMgbWFpbnRhaW5lci4gIFRoZXJlIG1pZ2h0IGJlIGFuIG9ic2VydmFibGUKK2xhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCitkaXN0cmlidXRpb24uCisKKyAgIElmIEF1Z3VzdCAyMDAyIHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0CitgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC9tYXRyaXguaHRtbCcuCisKK1VzaW5nIGBnZXR0ZXh0JyBpbiBuZXcgcGFja2FnZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCitpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCitwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCitpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKworICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQordG8gdXNlIG9mIGBnZXR0ZXh0JyB0aGUgb25seSB0aGluZyBtaXNzaW5nIGFyZSB0aGUgdHJhbnNsYXRpb25zLiAgVGhlCitGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKK2RldmVsb3BlZCBpbnNpZGUgdGhlIEdOVSBwcm9qZWN0LiAgVGhlcmVmb3JlIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBhYm92ZQorYXBwbGllcyBhbHNvIGZvciBldmVyeSBvdGhlciBGcmVlIFNvZnR3YXJlIFByb2plY3QuICBDb250YWN0CitgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bwordGhlIHRyYW5zbGF0aW9uIHRlYW1zLgorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvQW5kcm9pZC5tayBiL2UyZnNwcm9ncy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvQW5kcm9pZC5tawpAQCAtMCwwICsxIEBACitpbmNsdWRlICQoY2FsbCBhbGwtc3ViZGlyLW1ha2VmaWxlcykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9DT1BZSU5HIGIvZTJmc3Byb2dzL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxMjI3YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9DT1BZSU5HCkBAIC0wLDAgKzEsODQ5IEBACitUaGlzIHBhY2thZ2UsIHRoZSBFWFQyIGZpbGVzeXN0ZW0gdXRpbGl0aWVzLCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIKK3RoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxpYi9leHQyZnMKK2FuZCBsaWIvZTJwIGxpYnJhcmllcywgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIHRoZSBsaWIvdXVpZCBsaWJyYXJ5IHdoaWNoIGlzIG1hZGUKK2F2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlIGFuZCB0aGUgbGliL2V0IGFuZCBsaWIvc3MKK2xpYnJhcmllcyB3aGljaCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW4gTUlULXN0eWxlIGxpY2Vuc2UuICBQbGVhc2UKK3NlZSBsaWIvdXVpZC9DT1BZSU5HIGZvciBtb3JlIGRldGFpbHMgZm9yIHRoZSBsaWNlbnNlIGZvciB0aGUgZmlsZXMKK2NvbXByaXNpbmcgdGhlIGxpYnV1aWQgbGlicmFyeSwgYW5kIHRoZSBzb3VyY2UgZmlsZSBoZWFkZXJzIG9mIHRoZQorbGliZXQgYW5kIGxpYnNzIGxpYnJhcmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIG1vc3QgcmVjZW50IG9mZmljaWFsbHkgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LiAgSWYgeW91IG5lZWQgdG8gbWFrZSBhIGRpc3RyaWJ1dGlvbiwKK3RoYXQncyB0aGUgb25lIHlvdSBzaG91bGQgdXNlLiAgSWYgdGhlcmUgaXMgc29tZSByZWFzb24gd2h5IHlvdSdkIGxpa2UKK2EgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IGlzIHN0aWxsIGluIEFMUEhBIHRlc3RpbmcgKGkuZS4sIGVpdGhlcgordXNpbmcgdGhlICJXSVAiIHRlc3QgZGlzdHJpYnV0aW9ucyBvciBvbmUgZnJvbSB0aGUgaGcgb3IgZ2l0CityZXBvc2l0b3J5IGZyb20gdGhlIGRldmVsb3BtZW50IGJyYW5jaCwgcGxlYXNlIGNvbnRhY3QgbWUKKyh0eXRzb0BtaXQuZWR1KSBiZWZvcmUgeW91IHNoaXAuICBUaGUgcmVsZWFzZSBzY2hlZHVsZXMgZm9yIHRoaXMKK3BhY2thZ2UgYXJlIGZsZXhpYmxlLCBpZiB5b3UgZ2l2ZSBtZSBlbm91Z2ggbGVhZCB0aW1lLgorCisKKwkJCQkJVGhlb2RvcmUgVHMnbworCQkJCQkyMy1KdW5lLTIwMDcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAJCSAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL0NsZWFuU3BlYy5tayBiL2UyZnNwcm9ncy9DbGVhblNwZWMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkNGNlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9DbGVhblNwZWMubWsKQEAgLTAsMCArMSw1MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBJZiB5b3UgZG9uJ3QgbmVlZCB0byBkbyBhIGZ1bGwgY2xlYW4gYnVpbGQgYnV0IHdvdWxkIGxpa2UgdG8gdG91Y2gKKyMgYSBmaWxlIG9yIGRlbGV0ZSBzb21lIGludGVybWVkaWF0ZSBmaWxlcywgYWRkIGEgY2xlYW4gc3RlcCB0byB0aGUgZW5kCisjIG9mIHRoZSBsaXN0LiAgVGhlc2Ugc3RlcHMgd2lsbCBvbmx5IGJlIHJ1biBvbmNlLCBpZiB0aGV5IGhhdmVuJ3QgYmVlbgorIyBydW4gYmVmb3JlLgorIworIyBFLmcuOgorIyAgICAgJChjYWxsIGFkZC1jbGVhbi1zdGVwLCB0b3VjaCAtYyBleHRlcm5hbC9zcWxpdGUvc3FsaXRlMy5oKQorIyAgICAgJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvb2JqL1NUQVRJQ19MSUJSQVJJRVMvbGliel9pbnRlcm1lZGlhdGVzKQorIworIyBBbHdheXMgdXNlICJ0b3VjaCAtYyIgYW5kICJybSAtZiIgb3IgInJtIC1yZiIgdG8gZ3JhY2VmdWxseSBkZWFsIHdpdGgKKyMgZmlsZXMgdGhhdCBhcmUgbWlzc2luZyBvciBoYXZlIGJlZW4gbW92ZWQuCisjCisjIFVzZSAkKFBST0RVQ1RfT1VUKSB0byBnZXQgdG8gdGhlICJvdXQvdGFyZ2V0L3Byb2R1Y3QvYmxhaC8iIGRpcmVjdG9yeS4KKyMgVXNlICQoT1VUX0RJUikgdG8gcmVmZXIgdG8gdGhlICJvdXQiIGRpcmVjdG9yeS4KKyMKKyMgSWYgeW91IG5lZWQgdG8gcmUtZG8gc29tZXRoaW5nIHRoYXQncyBhbHJlYWR5IG1lbnRpb25lZCwganVzdCBjb3B5CisjIHRoZSBjb21tYW5kIGFuZCBhZGQgaXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gIEUuZy4sIGlmIGEgY2hhbmdlCisjIHRoYXQgeW91IG1hZGUgbGFzdCB3ZWVrIHJlcXVpcmVkIHRvdWNoaW5nIGEgZmlsZSBhbmQgYSBjaGFuZ2UgeW91CisjIG1hZGUgdG9kYXkgcmVxdWlyZXMgdG91Y2hpbmcgdGhlIHNhbWUgZmlsZSwganVzdCBjb3B5IHRoZSBvbGQKKyMgdG91Y2ggc3RlcCBhbmQgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBORVdFUiBDTEVBTiBTVEVQUyBNVVNUIEJFIEFUIFRIRSBFTkQgT0YgVEhFIExJU1QKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyMgRm9yIGV4YW1wbGU6CisjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9BUFBTL0FuZHJvaWRUZXN0c19pbnRlcm1lZGlhdGVzKQorIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoT1VUX0RJUikvdGFyZ2V0L2NvbW1vbi9vYmovSkFWQV9MSUJSQVJJRVMvY29yZV9pbnRlcm1lZGlhdGVzKQorIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgZmluZCAkKE9VVF9ESVIpIC10eXBlIGYgLW5hbWUgIklHVGFsa1Nlc3Npb24qIiAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLWYpCisjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvZGF0YS8qKQorCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBORVdFUiBDTEVBTiBTVEVQUyBNVVNUIEJFIEFUIFRIRSBFTkQgT0YgVEhFIExJU1QKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TSEFSRURfTElCUkFSSUVTL2xpYmV4dDJfdXVpZF9pbnRlcm1lZGlhdGVzKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL0lOU1RBTEwgYi9lMmZzcHJvZ3MvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWFmZDJmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL0lOU1RBTEwKQEAgLTAsMCArMSw2OSBAQAorCVRvIGluc3RhbGwgdGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSBtYW5hZ2VtZW50IHByb2dyYW1zLAoranVzdCBmb2xsb3cgdGhlIHN0ZXBzOgorCisxKSBDaGFuZ2UgZGlyZWN0b3J5IGludG8gdGhlIHRvcCBvZiB0aGUgZTJmc3Byb2dzIHNvdXJjZSB0cmVlCisKKzIpIENyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSBhbmQgY2QgaW50byBpdDoKKworCW1rZGlyIGJ1aWxkOyBjZCBidWlsZAorCiszKSAgUnVuIHRoZSBjb25maWd1cmUgc2NyaXB0CisKKwkuLi9jb25maWd1cmUKKworCUlmIHlvdSB3aXNoIHRvIHR1cm4gb24gRUxGIHNoYXJlZCBsaWJyYXJpZXMsIGFkZCB0aGUgb3B0aW9uCistLWVuYWJsZS1lbGYtc2hsaWJzLiAgSWYgeW91IHdpc2ggdG8gYnVpbGQgcHJvZmlsaW5nIGxpYnJhcmllcywgYWRkCit0aGUgb3B0aW9uIC0tZW5hYmxlLXByb2ZpbGUuCisKKwlOb3RlIHRoYXQgaWYgeW91IGFyZSBidWlsZGluZyBvbiBhbiBvbGRlciBzeXN0ZW0gKGkuZS4sIGEgMi40CitrZXJuZWwgYW5kL29yIGdsaWJjIDIuMiksIHRoZSB1c2Ugb2YgdGhyZWFkIGxvY2FsIHN0b3JhZ2Ugd2lsbCBwcm9iYWJseQorY2F1c2UgcHJvZ3JhbXMgdGhhdCB1c2UgdGhlIHV1aWQgbGlicmFyeSB0byBjb3JlIGR1bXAuICBUbyBkaXNhYmxlCit0aHJlYWQgbG9jYWwgc3RvcmFnZSwgdXNlIHRoZSBjb25maWd1cmUgb3B0aW9uIC0tZGlzYWJsZS10bHMuCisKKzQpICBDb21waWxlIHRoZSBwcm9ncmFtcworCisJbWFrZQorCis1KSAgIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgaW5zdGFsbGF0aW9uIGJ1aWx0IGNvcnJlY3RseToKKworCW1ha2UgY2hlY2sKKworNikgIEluc3RhbGwgdGhlIHByb2dyYW1zCisKKwlSdW4gYG1ha2UgaW5zdGFsbCcKKworNykgIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmllcworCisJWW91IGNhbiBydW4gYG1ha2UgaW5zdGFsbC1saWJzJyB0byBpbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzIGFuZAorbGlicmFyaWVzLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGluc3RhbGxhdGlvbiBpcyBub3QgbmVlZGVkIGZvciB0aGUKK3Byb2dyYW1zIHRvIHdvcmsuICBJdCBpcyBvbmx5IG5lZWRlZCBpZiB5b3UgZXhwZWN0IHRvIGRldmVsb3Agb3RoZXIKK3Byb2dyYW1zIHVzaW5nIHRoZSBsaWJyYXJpZXMgb3IgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBvdGhlciBwcm9ncmFtCit1c2luZyB0aGVzZSBsaWJyYXJpZXMgKGxpa2UgdGhlIDQuNEJTRCBkdW1wIGFuZCByZXN0b3JlIHBvcnQpLgorCis4KSAgUmVtb3ZlIGFueSBwcmUtZm9ybWF0dGVkIG1hbiBwYWdlcy4gIAorCisJU29tZSBkaXN0cmlidXRpb25zIHdpbGwgaGF2ZSBwcmUtZm9ybWF0dGVkIG1hbnVhbCBwYWdlcyB3aGljaAord2lsbCBhbHdheXMgYmUgZGlzcGxheWVkIGluIHByZWZlcmVuY2UgdG8gbmV3ZXIgbWFuIHBhZ2VzIGluIC91c3IvbWFuLgorSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IG1heSBuZWVkIHRvIG1hbnVhbGx5IHJlbW92ZSB0aGVtIGluIG9yZGVyIHRvCitzZWUgdGhlIGNvcnJlY3QgbWFudWFsIHBhZ2VzLiAgVGhlIHNoZWxsIHNjcmlwdCBpbgoraW5zdGFsbC11dGlscy9yZW1vdmVfcHJlZm9ybWF0X21hbnBhZ2VzIG1heSBiZSBoZWxwZnVsIGluIGRvaW5nIHNvLgorCis5KSAgTWFrZSBzdXJlIHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGlzIGNvcnJlY3QuCisKKwlTb21lIGRpc3RyaWJ1dGlvbnMgaW5zdGFsbCBhbiAvZXRjL2ZzdGFiIHdoaWNoIGlzIG1pc3NpbmcgdGhlCitmaWZ0aCBhbmQgc2l4dGggZmllbGQgb2YgZmlsZXN5c3RlbSBlbnRyeSwgd2hpY2ggYXJlIHRoZSBkdW1wCitmcmVxdWVuY3ksIGFuZCB0aGUgZnNjayBwYXNzIG51bWJlciwgcmVzcGVjdGl2ZWx5LiAgVGhlIHByb2JsZW0gd2l0aAordGhpcyBpcyB0aGF0IHRoZSBnZXRtbnRlbnQoKSBsaWJyYXJ5IHJvdXRpbmUgaW50ZXJwcmV0cyB0aG9zZSBtaXNzaW5nCitmaWVsZHMgYXMgIjAiLCBhbmQgYSBwYXNzIG51bWJlciBvZiAwIGlzIGRvY3VtZW50ZWQgYXMgbWVhbmluZyB0aGF0Citmc2NrIHNob3VsZCBub3QgY2hlY2sgdGhhdCBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0uICBJZiB5b3VyIGVudHJpZXMgaW4KK3lvdXIgL2V0Yy9mc3RhYiBmaWxlIGxvb2sgbGlrcyB0aGlzOgorCisvZGV2L2hkYTQgICAgICAgLyAgICAgICAgZXh0MiAgICAgICAgZGVmYXVsdHMKKworeW91IHNob3VsZCBhZGQgIjEgMSIgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIHNvIHRoYXQgdGhleSBsb29rIGxpa2UgdGhpczoKKworL2Rldi9oZGE0ICAgICAgIC8gICAgICAgIGV4dDIgICAgICAgIGRlZmF1bHRzCTEJMQorCisJVGhlcmUgaXMgYSBzY3JpcHQgaW4gaW5zdGFsbC11dGlscy9jb252ZnN0YWIgKGRvbmF0ZWQgYnkKK01pY2hhZWwgV2VsbGVyKSB0aGF0IG1heSBoZWxwIHlvdSBjb3JyZWN0IHlvdXIgL2V0Yy9mc3RhYiBmaWxlLgorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvSU5TVEFMTC5lbGZiaW4gYi9lMmZzcHJvZ3MvSU5TVEFMTC5lbGZiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NGFhMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9JTlNUQUxMLmVsZmJpbgpAQCAtMCwwICsxLDUzIEBACitOT1RFOiBUaGlzIGlzIHRoZSBFTEYgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbi4gIElmIHlvdSBoYXZlCithIERMTCBzeXN0ZW0sIHBsZWFzZSBjb21waWxlIGUyZnNwcm9ncyBmcm9tIHNvdXJjZXMgeW91cnNlbGYuICAoSW4KK2ZhY3QsIGluIGdlbmVyYWwgeW91J3JlIGJldHRlciBvZmYgY29tcGlsaW5nIGUyZnNwcm9ncyBmcm9tIHNvdXJjZXMKK2luc3RlYWQgb2YgdXNpbmcgcHJlY29tcGlsZWQgYmluYXJpZXMuKSAgCisKK0Fsc28gcGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBiaW5hcmllcyBhc3N1bWUgdGhlIHVzZSBvZiB0aGUgR05VIExpYmMuCitJZiB5b3UncmUgc3RpbGwgdXNpbmcgbGliYzUsIHlvdSdsbCBuZWVkIGJ1aWxkIGUyZnNwcm9ncyBmcm9tIHNvdXJjZS4KKworCVRvIGluc3RhbGwgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24gb2YgdGhlIHNlY29uZCBleHRlbmRlZCBmaWxlCitzeXN0ZW0gbWFuYWdlbWVudCBwcm9ncmFtcywganVzdCBmb2xsb3cgdGhlIHN0ZXBzOgorCisxKSBJbnN0YWxsIHRoaXMgdGFyIGZpbGUgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJZ3VuemlwIDwgZTJmc3Byb2dzLTEuMTMtZWxmYmluLnRhci5neiB8IChjZCAvOyB0YXIgU3h2cGYgLSApCisKKzIpIFJ1biBsZGNvbmZpZyB0byB1cGRhdGUgdGhlIHNoYXJlZCBsaWJyYXJ5IHBvaW50ZXJzLgorCisgICAgICAgIEFzIHJvb3QsIHR5cGUgL3NiaW4vbGRjb25maWcuIFRoaXMgd2lsbCB1cGRhdGUgdGhlIGxpbmtzIHRvCit0aGUgc2hhcmVkIGxpYnJhcmllcyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uLiBZb3UgY2FuIHRoZW4gcmVtb3ZlCit0aGUgb2xkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJpZXMgZnJvbSAvbGliLiAgCisKKzMpIFJlbW92ZSBhbnkgcHJlLWZvcm1hdHRlZCBtYW4gcGFnZXMuICAKKworCVNvbWUgZGlzdHJpYnV0aW9ucyB3aWxsIGhhdmUgcHJlLWZvcm1hdHRlZCBtYW51YWwgcGFnZXMgd2hpY2gKK3dpbGwgYWx3YXlzIGJlIGRpc3BsYXllZCBpbiBwcmVmZXJlbmNlIHRvIG5ld2VyIG1hbiBwYWdlcyBpbiAvdXNyL21hbi4KK0lmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBtYXkgbmVlZCB0byBtYW51YWxseSByZW1vdmUgdGhlbSBpbiBvcmRlciB0bworc2VlIHRoZSBjb3JyZWN0IG1hbnVhbCBwYWdlcy4gIFRoZSBzaGVsbCBzY3JpcHQgaW4KK2luc3RhbGwtdXRpbHMvcmVtb3ZlX3ByZWZvcm1hdF9tYW5wYWdlcyBtYXkgYmUgaGVscGZ1bCBpbiBkb2luZyBzby4KKworNCkgTWFrZSBzdXJlIHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGlzIGNvcnJlY3QuCisKKwlTb21lIGRpc3RyaWJ1dGlvbnMgaW5zdGFsbCBhbiAvZXRjL2ZzdGFiIHdoaWNoIGlzIG1pc3NpbmcgdGhlCitmaWZ0aCBhbmQgc2l4dGggZmllbGQgb2YgZmlsZXN5c3RlbSBlbnRyeSwgd2hpY2ggYXJlIHRoZSBkdW1wCitmcmVxdWVuY3ksIGFuZCB0aGUgZnNjayBwYXNzIG51bWJlciwgcmVzcGVjdGl2ZWx5LiAgVGhlIHByb2JsZW0gd2l0aAordGhpcyBpcyB0aGF0IHRoZSBnZXRtbnRlbnQoKSBsaWJyYXJ5IHJvdXRpbmUgaW50ZXJwcmV0cyB0aG9zZSBtaXNzaW5nCitmaWVsZHMgYXMgIjAiLCBhbmQgYSBwYXNzIG51bWJlciBvZiAwIGlzIGRvY3VtZW50ZWQgYXMgbWVhbmluZyB0aGF0Citmc2NrIHNob3VsZCBub3QgY2hlY2sgdGhhdCBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0uICBJZiB5b3VyIGVudHJpZXMgaW4KK3lvdXIgL2V0Yy9mc3RhYiBmaWxlIGxvb2sgbGlrcyB0aGlzOgorCisvZGV2L2hkYTQgICAgICAgLyAgICAgICAgZXh0MiAgICAgICAgZGVmYXVsdHMKKworeW91IHNob3VsZCBhZGQgIjEgMSIgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIHNvIHRoYXQgdGhleSBsb29rIGxpa2UgdGhpczoKKworL2Rldi9oZGE0ICAgICAgIC8gICAgICAgIGV4dDIgICAgICAgIGRlZmF1bHRzCTEJMQorCisJVGhlcmUgaXMgYSBzY3JpcHQgaW4gaW5zdGFsbC11dGlscy9jb252ZnN0YWIgKGRvbmF0ZWQgYnkKK01pY2hhZWwgV2VsbGVyKSB0aGF0IG1heSBoZWxwIHlvdSBjb3JyZWN0IHlvdXIgL2V0Yy9mc3RhYiBmaWxlLgorCis1KSBDbGVhbnVwIGZpbGVzIGZyb20gdGhlIGluc3RhbGxhdGlvbi4KKworCVdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGUgaW5zdGFsbGF0aW9uLCB5b3Ugd2lsbCBwcm9iYWJseSB3YW50Cit0byByZW1vdmUgL0lOU1RBTEwgKHRoaXMgZmlsZSksIC9SRUFETUUsIGFuZCAvaW5zdGFsbC11dGlscyBmcm9tIHlvdXIKK3Jvb3QgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvTUNPTkZJRy5pbiBiL2UyZnNwcm9ncy9NQ09ORklHLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1N2IzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvTUNPTkZJRy5pbgpAQCAtMCwwICsxLDI4MCBAQAorIyBCZWdpbm5pbmcgb2YgZmlsZSBNQ09ORklHCisKK2FsbDo6CisKK2NoZWNrOjoKKworU0hFTEwgPSAvYmluL3NoCisKK0NPTVBSRVNTX0VYVCA9IGd6IGJ6MiBieiBaCisKK3ByZWZpeCA9IEBwcmVmaXhACityb290X3ByZWZpeCA9IEByb290X3ByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorcm9vdF9iaW5kaXIgPSBAcm9vdF9iaW5kaXJACityb290X3NiaW5kaXIgPSBAcm9vdF9zYmluZGlyQAorcm9vdF9saWJkaXIgPSBAcm9vdF9saWJkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2JpbmRpciA9IEBiaW5kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitsaWJkaXIgPSBAbGliZGlyQAorZGF0YWRpcj0gQGRhdGFkaXJACitsb2NhbGVkaXIgPSAkKGRhdGFkaXIpL2xvY2FsZQorcm9vdF9zeXNjb25mZGlyPSBAcm9vdF9zeXNjb25mZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCittYW41ZGlyID0gJChtYW5kaXIpL21hbjUKK21hbjhkaXIgPSAkKG1hbmRpcikvbWFuOAoraW5mb2RpciA9IEBpbmZvZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorCitAU0VUX01BS0VACisKK0BpZkdOVW1ha2VAIFYgPQorQGlmR05VbWFrZUAgaWZlcSAoJChzdHJpcCAkKFYpKSwpCitAaWZHTlVtYWtlQCAjICBFID0gQGVjaG8KK0BpZkdOVW1ha2VAICMgIEVTID0gZWNobworQGlmR05VbWFrZUAgIyAgUSA9IEAKK0BpZkdOVW1ha2VAICAgIEUgPSBARUAKK0BpZkdOVW1ha2VAICAgIEVTID0gQEVTQAorQGlmR05VbWFrZUAgICAgUSA9IEBRQAorQGlmR05VbWFrZUAgZWxzZQorQGlmR05VbWFrZUAgICAgRSA9IEBcIworQGlmR05VbWFrZUAgICAgRVMgPSBcIworQGlmR05VbWFrZUAgICAgUSA9CitAaWZHTlVtYWtlQCBlbmRpZgorCitAaWZOb3RHTlVtYWtlQCBFID0gQEVACitAaWZOb3RHTlVtYWtlQCBFUyA9IEBFU0AKK0BpZk5vdEdOVW1ha2VAIFEgPSBAUUAKKworQGlmR05VbWFrZUAgQ0hFQ0s9c3BhcnNlCitAaWZHTlVtYWtlQCBDSEVDS19PUFRTPS1Xc3BhcnNlLWFsbCAtV25vLXRyYW5zcGFyZW50LXVuaW9uIC1Xbm8tcmV0dXJuLXZvaWQgLVduby11bmRlZiAtV25vLW5vbi1wb2ludGVyLW51bGwKK0BpZkdOVW1ha2VAIGlmZXEgKCIkKEMpIiwgIjIiKQorQGlmR05VbWFrZUAgICBDSEVDS19DTUQ9JChDSEVDSykgJChDSEVDS19PUFRTKSAtV2JpdHdpc2UgLURfX0NIRUNLX0VORElBTl9fCitAaWZHTlVtYWtlQCBlbHNlCitAaWZHTlVtYWtlQCAgIGlmZXEgKCIkKEMpIiwgIjEiKQorQGlmR05VbWFrZUAgICAgIENIRUNLX0NNRD0kKENIRUNLKSAkKENIRUNLX09QVFMpCitAaWZHTlVtYWtlQCAgICBlbHNlCitAaWZHTlVtYWtlQCAgICAgQ0hFQ0tfQ01EPUB0cnVlCitAaWZHTlVtYWtlQCAgIGVuZGlmCitAaWZHTlVtYWtlQCBlbmRpZgorCitAaWZOb3RHTlVtYWtlQCBDSEVDS19DTUQ9QHRydWUKKworQ0MgPSBAQ0NACitCVUlMRF9DQyA9IEBCVUlMRF9DQ0AKK0NGTEFHUyA9IEBDRkxBR1NACitDUFBGTEFHUyA9IEBJTkNMVURFU0AKK0FMTF9DRkxBR1MgPSAkKENQUEZMQUdTKSAkKENGTEFHUykKK0xERkxBR1MgPSBATERGTEFHU0AKK0FMTF9MREZMQUdTID0gJChMREZMQUdTKSBATERGTEFHX0RZTkFNSUNACitMREZMQUdTX1NUQVRJQyA9ICQoTERGTEFHUykgQExERkxBR19TVEFUSUNACitCVUlMRF9DRkxBR1MgPSBAQlVJTERfQ0ZMQUdTQAorQlVJTERfTERGTEFHUyA9IEBCVUlMRF9MREZMQUdTQAorUkRZTkFNSUMgPSBAUkRZTkFNSUNACitMSU5LX0JVSUxEX0ZMQUdTID0gQExJTktfQlVJTERfRkxBR1NACitMSU5LX0lOU1RBTExfRkxBR1MgPSBATElOS19JTlNUQUxMX0ZMQUdTQAorUk0gPSBAUk1ACitMTiA9IEBMTkAKK0xOX1MgPSBATE5fU0AKK01WID0gQE1WQAorQ1AgPSBAQ1BACitDSE1PRCA9IEBDSE1PREAKK0FSID0gQEFSQAorQVdLID0gQEFXS0AKK1NFRCA9IEBTRURACitQRVJMID0gQFBFUkxACitSQU5MSUIgPSBAUkFOTElCQAorU1RSSVAgPSBAU1RSSVBACitMRCA9ICQoUFVSRSkgQENDQAorQVJVUEQgPSAkKEFSKSByCitBUkdFTiA9ICQoQVIpIHJjCitMRENPTkZJRyA9IEBMRENPTkZJR0AKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACisKKyMKKyMgTGlicmFyeSBkZWZpbml0aW9ucworIworTElCID0gJCh0b3BfYnVpbGRkaXIpL2xpYgorTElCU1MgPSAkKExJQikvbGlic3NATElCX0VYVEAgQFBSSVZBVEVfTElCU19DTVRAIEBETE9QRU5fTElCQAorTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQExJQl9FWFRAIEBQUklWQVRFX0xJQlNfQ01UQCBAU0VNX0lOSVRfTElCQAorTElCRTJQID0gJChMSUIpL2xpYmUycEBMSUJfRVhUQAorTElCRVhUMkZTID0gJChMSUIpL2xpYmV4dDJmc0BMSUJfRVhUQAorTElCVVVJRCA9IEBMSUJVVUlEQCBAU09DS0VUX0xJQkAKK0xJQlFVT1RBID0gQFNUQVRJQ19MSUJRVU9UQUAKK0xJQkJMS0lEID0gQExJQkJMS0lEQCBAUFJJVkFURV9MSUJTX0NNVEAgJChMSUJVVUlEKQorTElCSU5UTCA9IEBMSUJJTlRMQAorREVQTElCU1MgPSAkKExJQikvbGlic3NATElCX0VYVEAKK0RFUExJQkNPTV9FUlIgPSAkKExJQikvbGliY29tX2VyckBMSUJfRVhUQAorREVQTElCVVVJRCA9IEBERVBMSUJVVUlEQAorREVQTElCUVVPVEEgPSBAREVQU1RBVElDX0xJQlFVT1RBQAorREVQTElCQkxLSUQgPSBAREVQTElCQkxLSURAIEBQUklWQVRFX0xJQlNfQ01UQCAkKERFUExJQlVVSUQpCisKK1NUQVRJQ19MSUJTUyA9ICQoTElCKS9saWJzc0BTVEFUSUNfTElCX0VYVEAgQERMT1BFTl9MSUJACitTVEFUSUNfTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQFNUQVRJQ19MSUJfRVhUQCBAU0VNX0lOSVRfTElCQAorU1RBVElDX0xJQkUyUCA9ICQoTElCKS9saWJlMnBAU1RBVElDX0xJQl9FWFRACitTVEFUSUNfTElCRVhUMkZTID0gJChMSUIpL2xpYmV4dDJmc0BTVEFUSUNfTElCX0VYVEAKK1NUQVRJQ19MSUJVVUlEID0gQFNUQVRJQ19MSUJVVUlEQCBAU09DS0VUX0xJQkAKK1NUQVRJQ19MSUJRVU9UQSA9IEBTVEFUSUNfTElCUVVPVEFACitTVEFUSUNfTElCQkxLSUQgPSBAU1RBVElDX0xJQkJMS0lEQCAkKFNUQVRJQ19MSUJVVUlEKQorREVQU1RBVElDX0xJQlNTID0gJChMSUIpL2xpYnNzQFNUQVRJQ19MSUJfRVhUQAorREVQU1RBVElDX0xJQkNPTV9FUlIgPSAkKExJQikvbGliY29tX2VyckBTVEFUSUNfTElCX0VYVEAKK0RFUFNUQVRJQ19MSUJVVUlEID0gQERFUFNUQVRJQ19MSUJVVUlEQAorREVQU1RBVElDX0xJQlFVT1RBID0gQERFUFNUQVRJQ19MSUJRVU9UQUAKK0RFUFNUQVRJQ19MSUJCTEtJRCA9IEBERVBTVEFUSUNfTElCQkxLSURAICQoREVQU1RBVElDX0xJQlVVSUQpCisKK1BST0ZJTEVEX0xJQlNTID0gJChMSUIpL2xpYnNzQFBST0ZJTEVEX0xJQl9FWFRAIEBETE9QRU5fTElCQAorUFJPRklMRURfTElCQ09NX0VSUiA9ICQoTElCKS9saWJjb21fZXJyQFBST0ZJTEVEX0xJQl9FWFRAIEBTRU1fSU5JVF9MSUJACitQUk9GSUxFRF9MSUJFMlAgPSAkKExJQikvbGliZTJwQFBST0ZJTEVEX0xJQl9FWFRACitQUk9GSUxFRF9MSUJFWFQyRlMgPSAkKExJQikvbGliZXh0MmZzQFBST0ZJTEVEX0xJQl9FWFRACitQUk9GSUxFRF9MSUJVVUlEID0gQFBST0ZJTEVEX0xJQlVVSURAIEBTT0NLRVRfTElCQAorUFJPRklMRURfTElCUVVPVEEgPSBAUFJPRklMRURfTElCUVVPVEFACitQUk9GSUxFRF9MSUJCTEtJRCA9IEBQUk9GSUxFRF9MSUJCTEtJREAgJChQUk9GSUxFRF9MSUJVVUlEKQorREVQUFJPRklMRURfTElCU1MgPSAkKExJQikvbGlic3NAUFJPRklMRURfTElCX0VYVEAKK0RFUFBST0ZJTEVEX0xJQkNPTV9FUlIgPSAkKExJQikvbGliY29tX2VyckBQUk9GSUxFRF9MSUJfRVhUQAorREVQUFJPRklMRURfTElCVVVJRCA9IEBQUk9GSUxFRF9MSUJVVUlEQAorREVQUFJPRklMRURfTElCUVVPVEEgPSBAUFJPRklMRURfTElCUVVPVEFACitERVBQUk9GSUxFRF9MSUJCTEtJRCA9IEBQUk9GSUxFRF9MSUJCTEtJREAgJChERVBQUk9GSUxFRF9MSUJVVUlEKQorCisjCisjIEEgZmFzdCBzdWJzdGl0dXRpb24gY29tbWFuZCBmb3IgZml4aW5nIHVwIG1hbiBwYWdlcywgc2hlbGwgc2NyaXB0cywgZXRjLgorIworU1VCU1RfQ09ORj0kKHRvcF9idWlsZGRpcikvdXRpbC9zdWJzdC5jb25mCitTVUJTVElUVVRFPSAkKHRvcF9idWlsZGRpcikvdXRpbC9zdWJzdCAtZiAkKFNVQlNUX0NPTkYpCitTVUJTVElUVVRFX1VQVElNRT0gJCh0b3BfYnVpbGRkaXIpL3V0aWwvc3Vic3QgLXQgLWYgJChTVUJTVF9DT05GKQorREVQX1NVQlNUSVRVVEU9ICQodG9wX2J1aWxkZGlyKS91dGlsL3N1YnN0ICQoU1VCU1RfQ09ORikKKworJCh0b3BfYnVpbGRkaXIpL3V0aWwvc3Vic3Q6CisJY2QgJCh0b3BfYnVpbGRkaXIpL3V0aWwgOyAkKE1BS0UpIHN1YnN0CisKKyMKKyMgU2NyaXB0IGZvciBpbnN0YWxsaW5nIHN5bWxpbmtzIChmb3Igc2hhcmVkIGxpYnJhcmllcykKKyMKKyQodG9wX2J1aWxkZGlyKS91dGlsL2luc3RhbGwtc3ltbGluazogJCh0b3Bfc3JjZGlyKS91dGlsL2luc3RhbGwtc3ltbGluay5pbiBcCisJCQkgICAgICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPXV0aWwvaW5zdGFsbC1zeW1saW5rIC4vY29uZmlnLnN0YXR1cworCWNobW9kICt4ICQodG9wX2J1aWxkZGlyKS91dGlsL2luc3RhbGwtc3ltbGluaworCiskKHRvcF9idWlsZGRpcikvdXRpbC9zeW1saW5rczoKKwljZCAkKHRvcF9idWlsZGRpcikvdXRpbCA7ICQoTUFLRSkgc3ltbGlua3MKKworSU5TVEFMTF9TWU1MSU5LID0gL2Jpbi9zaCAkKHRvcF9idWlsZGRpcikvdXRpbC9pbnN0YWxsLXN5bWxpbmsgXAorCQkJQFNZTUxJTktfUkVMQVRJVkVAIFwKKwkJCS0tc3ltbGlua3M9JCh0b3BfYnVpbGRkaXIpL3V0aWwvc3ltbGlua3MKK0RFUF9JTlNUQUxMX1NZTUxJTksgPSAkKHRvcF9idWlsZGRpcikvdXRpbC9pbnN0YWxsLXN5bWxpbmsgXAorCQkJJCh0b3BfYnVpbGRkaXIpL3V0aWwvc3ltbGlua3MKKworIworIyBXYXJuaW5nIGZsYWdzCisjCisjIFJ1biBtYWtlIGdjYy13YWxsIHRvIGRvIGEgYnVpbGQgd2l0aCB3YXJuaW5nIG1lc3NhZ2VzLgorIworIworV0ZMQUdTPQkJLXN0ZD1jOTkgLURfWE9QRU5fU09VUkNFPTYwMCAtRF9HTlVfU09VUkNFIFwKKwkJCS1wZWRhbnRpYyAkKFdGTEFHU19FWFRSQSkgXAorCQkJLVdhbGwgLVcgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCBcCisJCQktV2Nhc3QtcXVhbCAtV2Nhc3QtYWxpZ24gLVduby12YXJpYWRpYy1tYWNyb3MgXAorCQkJLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcCisJCQktV2Zvcm1hdC1zZWN1cml0eSAgLVdmb3JtYXQtbm9ubGl0ZXJhbCBcCisJCQktV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtTzIgLVdzdHJpY3QtYWxpYXNpbmcgXAorCQkJLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZSAtRE5PX0lOTElORV9GVU5DUyAtV3NoYWRvdyBcCisJCQktVUVOQUJMRV9OTFMKKworZ2NjLXdhbGwtbmV3OgorCShtYWtlIENGTEFHUz0iQENGTEFHU0AgJChXRkxBR1MpIiA+IC9kZXYvbnVsbCkgMj4mMSB8IHNlZCAtZiAkKHRvcF9zcmNkaXIpL3V0aWwvZ2NjLXdhbGwtY2xlYW51cCAKKworZ2NjLXdhbGw6CisJbWFrZSBjbGVhbiA+IC9kZXYvbnVsbAorCW1ha2UgZ2NjLXdhbGwtbmV3CisKKyMKKyMgSW5zdGFsbGF0aW9uIHVzZXIgYW5kIGdyb3VwcworIworQklOR1JQPQkJYmluCitCSU5PV049CQliaW4KK0JJTk1PREU9CTU1NQorSU5DR1JQPQkJYmluCitJTkNPV049CQliaW4KK0lOQ01PREU9CTQ0NAorTElCT1dOPQkJYmluCitMSUJHUlA9CQliaW4KK0xJQk1PREU9CTQ0NAorTUFOR1JQPQkJYmluCitNQU5PV049CQliaW4KK01BTk1PREU9CTQ0NAorCisjCisjIEF1dG9jb25mIG1hZ2ljLi4uCisjCisKK0RFUF9MSUJfTUFLRUZJTEVTID0gJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUubGlicmFyeSBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuZWxmLWxpYiAgXAorCSQodG9wX3NyY2RpcikvbGliL01ha2VmaWxlLmJzZC1saWIgJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuZGFyd2luLWxpYiBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuc29sYXJpcy1saWIgJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUuY2hlY2tlciBcCisJJCh0b3Bfc3JjZGlyKS9saWIvTWFrZWZpbGUucHJvZmlsZQorCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUKKwljZCAkKHRvcF9idWlsZGRpcik7IC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKworJCh0b3BfYnVpbGRkaXIpL01DT05GSUc6ICQodG9wX3NyY2RpcikvTUNPTkZJRy5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPU1DT05GSUcgLi9jb25maWcuc3RhdHVzCisKKyQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmg6ICQodG9wX3NyY2RpcikvbGliL2NvbmZpZy5oLmluIFwKKwkJCSAgICAgICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL2NvbmZpZy5oIC4vY29uZmlnLnN0YXR1cworCiskKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmg6ICQoREVQX1NVQlNUSVRVVEUpICQodG9wX3NyY2RpcikvbGliL2RpcnBhdGhzLmguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEUpICQodG9wX3NyY2RpcikvbGliL2RpcnBhdGhzLmguaW4gJEAKKworJCh0b3BfYnVpbGRkaXIpL2xpYi9zdWJzdGl0dXRlX3NoOiAkKHRvcF9zcmNkaXIpL2xpYi9zdWJzdGl0dXRlX3NoLmluIFwKKwkJJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvc3Vic3RpdHV0ZV9zaCAuL2NvbmZpZy5zdGF0dXMKKworJCh0b3BfYnVpbGRkaXIpL3V0aWwvc3Vic3QuY29uZjogJCh0b3Bfc3JjZGlyKS91dGlsL3N1YnN0LmNvbmYuaW4gXAorCQkkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPXV0aWwvc3Vic3QuY29uZiAuL2NvbmZpZy5zdGF0dXMKKworTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvTUNPTkZJRyBcCisJCSQoREVQX01BS0VGSUxFKSAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPSQobXlfZGlyKS9NYWtlZmlsZSAuL2NvbmZpZy5zdGF0dXMKKworQE1BSU5UQUlORVJfQ01UQCQodG9wX3NyY2RpcikvY29uZmlndXJlOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorQE1BSU5UQUlORVJfQ01UQAljZCAkKHRvcF9zcmNkaXIpICYmIGF1dG9oZWFkZXIgJiYgYXV0b2NvbmYKKworIworIyBNYWtlIGRlcGVuZCBtYWdpYy4uLgorIworCisuZGVwZW5kOiBNYWtlZmlsZSAkKFNSQ1MpICQodG9wX3NyY2RpcikvZGVwZml4LnNlZCAkKHRvcF9zcmNkaXIpL3dvcmR3cmFwLnBsCisJaWYgdGVzdCAtbiAiJChTUkNTKSIgOyB0aGVuIFwKKwkJJChDQykgLU0gJChBTExfQ0ZMQUdTKSAkKFNSQ1MpIHwgXAorCQkJJChTRUQpIC1mICQodG9wX3NyY2RpcikvZGVwZml4LnNlZCBcCisJCQkgICAgLWUgJ3M7ICQoc3JjZGlyKS87ICQkKHNyY2RpcikvO2cnIFwKKwkJCSAgICAtZSAnczsgJCh0b3Bfc3JjZGlyKS87ICQkKHRvcF9zcmNkaXIpLztnJyBcCisJCQkgICAgLWUgJ3M7ICQodG9wX2J1aWxkZGlyKS87ICQkKHRvcF9idWlsZGRpcikvO2cnIFwKKwkJCSAgICAtZSAnczsgXC4vOyA7ZycgXAorCQkJICAgIC1lICcvXiMvZCcgXAorCQkJICAgIC1lICcvXiAqXFwkJC9kJyB8IFwKKwkJCSQoUEVSTCkgJCh0b3Bfc3JjZGlyKS93b3Jkd3JhcC5wbCA+IC5kZXBlbmQ7IFwKKwllbHNlIDo7IGZpCisKK2RlcGVuZDo6IC5kZXBlbmQKKwlpZiB0ZXN0IC1uICIkKFNSQ1MpIiA7IHRoZW4gXAorCQlzZWQgLWUgJy9eIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKy8sJCRkJyBcCisJCQk8ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiB8IGNhdCAtIC5kZXBlbmQgXAorCQkJPiAkKHNyY2RpcikvTWFrZWZpbGUuaW4ubmV3OyBcCisJaWYgY21wIC1zICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuaW4ubmV3IDsgdGhlbiBcCisJCSQoUk0pICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5uZXcgOyBcCisJZWxzZSBcCisJCSQoTVYpICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkOyBcCisJCSQoTVYpICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5uZXcgJChzcmNkaXIpL01ha2VmaWxlLmluOyBcCisJZmkgOyBlbHNlIDo7IGZpCisKKyMgRW5kIG9mIGZpbGUgTUNPTkZJRwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL01PRFVMRV9MSUNFTlNFX0dQTCBiL2UyZnNwcm9ncy9NT0RVTEVfTElDRU5TRV9HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9NT0RVTEVfTElDRU5TRV9HUEwKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI3ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTQ4IEBACitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLgorbXlfZGlyID0gLgorSU5TVEFMTCA9IEBJTlNUQUxMQAorCitATUNPTkZJR0AKKworJSA6ICUuc2gKKworQFJFU0laRVJfQ01UQFJFU0laRV9ESVI9IHJlc2l6ZQorQERFQlVHRlNfQ01UQERFQlVHRlNfRElSPSBkZWJ1Z2ZzCitAVVVJRF9DTVRAVVVJRF9MSUJfU1VCRElSPSBsaWIvdXVpZAorQEJMS0lEX0NNVEBCTEtJRF9MSUJfU1VCRElSPSBsaWIvYmxraWQKK1FVT1RBX0xJQl9TVUJESVI9IGxpYi9xdW90YQorCitMSUJfU1VCRElSUz1saWIvZXQgbGliL3NzIGxpYi9lMnAgJChVVUlEX0xJQl9TVUJESVIpIGxpYi9leHQyZnMgJChCTEtJRF9MSUJfU1VCRElSKSAkKFFVT1RBX0xJQl9TVUJESVIpIGludGwKK1BST0dfU1VCRElSUz1lMmZzY2sgJChERUJVR0ZTX0RJUikgbWlzYyAkKFJFU0laRV9ESVIpIHRlc3RzL3Byb2dzIHBvCitTVUJESVJTPXV0aWwgJChMSUJfU1VCRElSUykgJChQUk9HX1NVQkRJUlMpIHRlc3RzCisKK1NVQlM9IHV0aWwvc3Vic3QuY29uZiBsaWIvY29uZmlnLmggbGliL2RpcnBhdGhzLmggXAorCWxpYi9leHQyZnMvZXh0Ml90eXBlcy5oIGxpYi9ibGtpZC9ibGtpZF90eXBlcy5oIGxpYi91dWlkL3V1aWRfdHlwZXMuaAorCitUQVI9dGFyCisKK2FsbDo6IHN1YnMKKwkkKE1BS0UpIGxpYnMKKwkkKE1BS0UpIHByb2dzCisJJChNQUtFKSBkb2NzCisKK3N1YnM6ICQoREVQX1NVQlNUSVRVVEUpCisJQGZvciBpIGluICQoU1VCUykgOyBkbyBpZiB0ZXN0IC1kIGBkaXJuYW1lICQkaWAgOyBcCisJCXRoZW4gJChNQUtFKSAkJGkgfHwgZXhpdCAkJD8gOyBmaSA7IGRvbmUKKwlAKGlmIHRlc3QgLWQgbGliL2V0IDsgdGhlbiBjZCBsaWIvZXQgJiYgJChNQUtFKSBjb21waWxlX2V0OyBmaSkKKwlAKGlmIHRlc3QgLWQgbGliL2V4dDJmcyA7IHRoZW4gY2QgbGliL2V4dDJmcyAmJiAkKE1BS0UpIGV4dDJfZXJyLmg7IGZpKQorCitwcm9nczogYWxsLXByb2dzLXJlY3Vyc2l2ZQorbGliczogYWxsLWxpYnMtcmVjdXJzaXZlCithbGwtcHJvZ3MtcmVjdXJzaXZlIGFsbC1saWJzLXJlY3Vyc2l2ZTogc3VicworCitlMmZzcHJvZ3Muc3BlYzogJChERVBfU1VCU1RJVFVURSkgZTJmc3Byb2dzLnNwZWMuaW4KKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0uL2UyZnNwcm9ncy5zcGVjIC4vY29uZmlnLnN0YXR1cworCitycG06IGUyZnNwcm9ncy5zcGVjCisJc2ggY29udHJpYi9idWlsZC1ycG0KKworZG9jczoKKwktQHRlc3QgLWQgZG9jICYmIGNkIGRvYyAmJiAkKE1BS0UpIGxpYmV4dDJmcy5pbmZvCisKK2luc3RhbGwtZG9jLWxpYnM6CisJLUB0ZXN0IC1kIGRvYyAmJiBjZCBkb2MgJiYgJChNQUtFKSBpbnN0YWxsLWRvYy1saWJzCisKK3VuaW5zdGFsbC1kb2MtbGliczoKKwktQHRlc3QgLWQgZG9jICYmIGNkIGRvYyAmJiAkKE1BS0UpIHVuaW5zdGFsbC1kb2MtbGlicworCitjbGVhbi1kb2M6CisJLUB0ZXN0IC1kIGRvYyAmJiBjZCBkb2MgJiYgJChNQUtFKSBjbGVhbgorCitkaXN0Y2xlYW4tZG9jOgorCS10ZXN0IC1kIGRvYyAmJiBjZCBkb2MgJiYgJChNQUtFKSBkaXN0Y2xlYW4KKworaW5zdGFsbDogc3VicyBhbGwtbGlicy1yZWN1cnNpdmUgaW5zdGFsbC1wcm9ncy1yZWN1cnNpdmUgXAorICBpbnN0YWxsLXNobGlicy1saWJzLXJlY3Vyc2l2ZSBpbnN0YWxsLWRvYy1saWJzCisJaWYgdGVzdCAhIC1kIGUyZnNjayAmJiB0ZXN0ICEgLWQgZGVidWdmcyAmJiB0ZXN0ICEgLWQgbWlzYyAmJiB0ZXN0ICEgLWQgZXh0MmVkIDsgdGhlbiAkKE1BS0UpIGluc3RhbGwtbGlicyA7IGZpCisKK2luc3RhbGwtc3RyaXA6IHN1YnMgYWxsLWxpYnMtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAtcHJvZ3MtcmVjdXJzaXZlIFwKKyAgaW5zdGFsbC1zaGxpYnMtc3RyaXAtbGlicy1yZWN1cnNpdmUgaW5zdGFsbC1kb2MtbGlicworCit1bmluc3RhbGw6IHVuaW5zdGFsbC1wcm9ncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXNobGlicy1saWJzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtZG9jLWxpYnMKKworaW5zdGFsbC1saWJzOiBpbnN0YWxsLWxpYnMtcmVjdXJzaXZlCisKK3VuaW5zdGFsbC1saWJzOiB1bmluc3RhbGwtbGlicy1yZWN1cnNpdmUKKworY2hlY2stcmVjdXJzaXZlOiBhbGwKKworVEFHUyBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkZXBlbmQtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBcCisgIG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSByZWFsY2xlYW4tcmVjdXJzaXZlOgorCUBmb3Igc3ViZGlyIGluICQoU1VCRElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWQgJCRzdWJkaXIgOyB0aGVuIFwKKwkgICAgdGFyZ2V0PWBlY2hvICRAfCQoU0VEKSAncy8tcmVjdXJzaXZlLy8nYDsgXAorCSAgICBlY2hvIG1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpcjsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkJHRhcmdldCkgfHwgZXhpdCAxOyBcCisJICBmaSA7IFwKKwlkb25lCisKK2FsbC1wcm9ncy1yZWN1cnNpdmUgaW5zdGFsbC1wcm9ncy1yZWN1cnNpdmUgaW5zdGFsbC1zdHJpcC1wcm9ncy1yZWN1cnNpdmUgXAorICB1bmluc3RhbGwtcHJvZ3MtcmVjdXJzaXZlOiBhbGwtbGlicy1yZWN1cnNpdmUKKwlAZm9yIHN1YmRpciBpbiAkKFBST0dfU1VCRElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWQgJCRzdWJkaXIgOyB0aGVuIFwKKwkgICAgdGFyZ2V0PWBlY2hvICRAfCQoU0VEKSAncy8tcHJvZ3MtcmVjdXJzaXZlLy8nYDsgXAorCSAgICBlY2hvIG1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpcjsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkJHRhcmdldCkgfHwgZXhpdCAxOyBcCisJICBmaSA7IFwKKwlkb25lCisKK2FsbC1saWJzLXJlY3Vyc2l2ZSBpbnN0YWxsLWxpYnMtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAtbGlicy1yZWN1cnNpdmUgXAorICB1bmluc3RhbGwtbGlicy1yZWN1cnNpdmUgaW5zdGFsbC1zaGxpYnMtbGlicy1yZWN1cnNpdmUgXAorICBpbnN0YWxsLXNobGlicy1zdHJpcC1saWJzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtc2hsaWJzLWxpYnMtcmVjdXJzaXZlOgorCUBmb3Igc3ViZGlyIGluICQoTElCX1NVQkRJUlMpOyBkbyBcCisJICBpZiB0ZXN0IC1kICQkc3ViZGlyIDsgdGhlbiBcCisJICAgIHRhcmdldD1gZWNobyAkQHwkKFNFRCkgJ3MvLWxpYnMtcmVjdXJzaXZlLy8nYDsgXAorCSAgICBlY2hvIG1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpcjsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkJHRhcmdldCkgfHwgZXhpdCAxOyBcCisJICBmaSA7IFwKKwlkb25lCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4tbG9jYWwKKworY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1sb2NhbCBjbGVhbi1kb2MKKwkkKFJNKSAtZiAkKFNVQlMpIAorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1kb2MgZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCSQoUk0pIC1yZiBhdXRvbTR0ZS5jYWNoZSBlMmZzcHJvZ3Muc3BlYyBleHQyZWQvTWFrZWZpbGUgcG8vc3RhbXAtcG8KKwkkKE1BS0UpIGRpc3RjbGVhbi1sb2NhbCAKKworcmVhbGNsZWFuOiByZWFsY2xlYW4tcmVjdXJzaXZlIHJlYWxjbGVhbi1sb2NhbAorCitkZXBlbmQ6OiBkZXBlbmQtcmVjdXJzaXZlCisKK2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oOiAkKERFUF9TVUJTVElUVVRFKSBhc21fdHlwZXMuaCBcCisJCSQoc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPS4vbGliL2V4dDJmcy9leHQyX3R5cGVzLmggLi9jb25maWcuc3RhdHVzCisKK2xpYi9ibGtpZC9ibGtpZF90eXBlcy5oOiAkKERFUF9TVUJTVElUVVRFKSBhc21fdHlwZXMuaCBcCisJCSQoc3JjZGlyKS9saWIvYmxraWQvYmxraWRfdHlwZXMuaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPS4vbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmggLi9jb25maWcuc3RhdHVzCisKK2xpYi91dWlkL3V1aWRfdHlwZXMuaDogJChERVBfU1VCU1RJVFVURSkgYXNtX3R5cGVzLmggXAorCQkkKHNyY2RpcikvbGliL3V1aWQvdXVpZF90eXBlcy5oLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9Li9saWIvdXVpZC91dWlkX3R5cGVzLmggLi9jb25maWcuc3RhdHVzCisKK21vc3RseWNsZWFuLWxvY2FsOgorCSQoUk0pIC1mIFwjKiAqfiAqLm9yaWcgY29yZSBNQUtFTE9HIAorCitjbGVhbi1sb2NhbDogbW9zdGx5Y2xlYW4tbG9jYWwKKworZGlzdGNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbAorCSQoUk0pIC1mICQoU1VCUykgJChTVUJTVF9DT05GKSBcCisJCWNvbmZpZy5zdGF0dXMgY29uZmlnLmxvZyBjb25maWcuY2FjaGUgTUNPTkZJRyBNYWtlZmlsZSBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworcmVhbGNsZWFuLWxvY2FsOiBkaXN0Y2xlYW4tbG9jYWwKKwkkKFJNKSAtZiBjb25maWd1cmUKKworY2hlY2s6OglhbGwgY2hlY2stcmVjdXJzaXZlCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9OT1RJQ0UgYi9lMmZzcHJvZ3MvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTIyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvTk9USUNFCkBAIC0wLDAgKzEsODQ5IEBACitUaGlzIHBhY2thZ2UsIHRoZSBFWFQyIGZpbGVzeXN0ZW0gdXRpbGl0aWVzLCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIKK3RoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxpYi9leHQyZnMKK2FuZCBsaWIvZTJwIGxpYnJhcmllcywgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIHRoZSBsaWIvdXVpZCBsaWJyYXJ5IHdoaWNoIGlzIG1hZGUKK2F2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlIGFuZCB0aGUgbGliL2V0IGFuZCBsaWIvc3MKK2xpYnJhcmllcyB3aGljaCBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW4gTUlULXN0eWxlIGxpY2Vuc2UuICBQbGVhc2UKK3NlZSBsaWIvdXVpZC9DT1BZSU5HIGZvciBtb3JlIGRldGFpbHMgZm9yIHRoZSBsaWNlbnNlIGZvciB0aGUgZmlsZXMKK2NvbXByaXNpbmcgdGhlIGxpYnV1aWQgbGlicmFyeSwgYW5kIHRoZSBzb3VyY2UgZmlsZSBoZWFkZXJzIG9mIHRoZQorbGliZXQgYW5kIGxpYnNzIGxpYnJhcmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIG1vc3QgcmVjZW50IG9mZmljaWFsbHkgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LiAgSWYgeW91IG5lZWQgdG8gbWFrZSBhIGRpc3RyaWJ1dGlvbiwKK3RoYXQncyB0aGUgb25lIHlvdSBzaG91bGQgdXNlLiAgSWYgdGhlcmUgaXMgc29tZSByZWFzb24gd2h5IHlvdSdkIGxpa2UKK2EgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IGlzIHN0aWxsIGluIEFMUEhBIHRlc3RpbmcgKGkuZS4sIGVpdGhlcgordXNpbmcgdGhlICJXSVAiIHRlc3QgZGlzdHJpYnV0aW9ucyBvciBvbmUgZnJvbSB0aGUgaGcgb3IgZ2l0CityZXBvc2l0b3J5IGZyb20gdGhlIGRldmVsb3BtZW50IGJyYW5jaCwgcGxlYXNlIGNvbnRhY3QgbWUKKyh0eXRzb0BtaXQuZWR1KSBiZWZvcmUgeW91IHNoaXAuICBUaGUgcmVsZWFzZSBzY2hlZHVsZXMgZm9yIHRoaXMKK3BhY2thZ2UgYXJlIGZsZXhpYmxlLCBpZiB5b3UgZ2l2ZSBtZSBlbm91Z2ggbGVhZCB0aW1lLgorCisKKwkJCQkJVGhlb2RvcmUgVHMnbworCQkJCQkyMy1KdW5lLTIwMDcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAJCSAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL1JFQURNRSBiL2UyZnNwcm9ncy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2NDVhNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorCVRoaXMgaXMgdGhlIG5ldyB2ZXJzaW9uICgxLjQyLjkpIG9mIHRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZQorc3lzdGVtIG1hbmFnZW1lbnQgcHJvZ3JhbXMuCisKKwlGcm9tIHRpbWUgdG8gdGltZSwgSSByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiBlMmZzcHJvZ3MsIHRvIGZpeAorYnVncyBhbmQgdG8gbWFrZSB0aGUgdXRpbGl0aWVzIG1vcmUgcm9idXN0LiAgWW91IGNhbiBhbHdheXMgZmluZAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0IHRoZSB0aGUgZTJmc3Byb2dzIHdlYiBwYWdlLAord2hpY2ggaXM6CisKKwlodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCisJVGhlIElOU1RBTEwgZmlsZSBoYXMgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nCitlMmZzcHJvZ3MuICBQcm92aXNpb25zIGZvciBidWlsZGluZyBSZWQgSGF0IFJQTXMgYW5kIERlYmlhbiBkcGtnIGZpbGVzCithcmUgc3VwcGxpZWQgYXMgd2VsbC4KKworCUluIGNhc2Ugb2YgYnVncyBpbiB0aGVzZSBwcm9ncmFtcywgcGxlYXNlIGNvbnRhY3QgVGVkIFRzJ28gYXQKK3R5dHNvQG1pdC5lZHUgb3IgdHl0c29AYWx1bS5taXQuZWR1LiAgU2VlIHRoZSBlMmZzY2sgbWFuIHBhZ2UgZm9yCitzdWdnZXN0aW9ucyBvZiB3aGF0IHNvcnQgb2YgaW5mb3JtYXRpb24gdG8gaW5jbHVkZSB3aGVuIHN1Ym1pdHRpbmcgYnVnCityZXBvcnRzIGZvciB0aGVzZSBwcm9ncmFtcy4KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL1JFQURNRS5zdWJzZXQgYi9lMmZzcHJvZ3MvUkVBRE1FLnN1YnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVkNGIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL1JFQURNRS5zdWJzZXQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyBkaXN0cmlidXRpb24gY29udGFpbnMgYSBzdWJzZXQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlOyBpdAorY29udGFpbnMgdGhlIGJhc2UgbGlicmFyaWVzIChzcywgZXQsIHV1aWQsIGJsa2lkKSB3aGljaCBtYXkgYmUgdXNlZCBieQorb3RoZXIgbm9uLWV4dDItcmVsYXRlZCBhcHBsaWNhdGlvbnMuCisKK1RoaXMgbWF5IGJlIHVzZWZ1bCBmb3Igbm9uLUxpbnV4IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgbmVlZCB0aGVzZQorbGlicmFyaWVzIGZvciBHTk9NRSwgYnV0IHdobyBkbyBub3QgbmVlZCB0aGUgZXh0Mi9leHQzIGZpbGVzeXN0ZW0KK3V0aWxpdGllcy4KKworVGhlIGZ1bGwgZTJmc3Byb2dzIGRpc3RyaWJ1dGlvbnMgY2FuIGJlIGZvdW5kIGF0IHRoZSBlMmZzcHJvZ3Mgd2ViCitwYWdlLCB3aGljaCBpczoKKworCWh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0CisKK0luIGNhc2Ugb2YgYnVncyBpbiB0aGVzZSBsaWJyYXJpZXMsIHBsZWFzZSBjb250YWN0IFRlZCBUcydvIGF0Cit0eXRzb0BtaXQuZWR1IG9yIHR5dHNvQGFsdW0ubWl0LmVkdS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9SRUFETUUudmVyc2lvbiBiL2UyZnNwcm9ncy9SRUFETUUudmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFjNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL1JFQURNRS52ZXJzaW9uCkBAIC0wLDAgKzEsMyBAQAorVVJMOiBodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL3R5dHNvL2UyZnNwcm9ncy92MS40Mi45L2UyZnNwcm9ncy0xLjQyLjkudGFyLmd6CitWZXJzaW9uOiAxLjQyLjkKK0J1Z0NvbXBvbmVudDogOTUyMjEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9SRUxFQVNFLU5PVEVTIGIvZTJmc3Byb2dzL1JFTEVBU0UtTk9URVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkYjFiMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9SRUxFQVNFLU5PVEVTCkBAIC0wLDAgKzEsNzQ4NyBAQAorRTJmc3Byb2dzIDEuNDIuOSAoRGVjZW1iZXIgMjgsIDIwMTMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWtlMmZzIHdpbGwgZGV0ZWN0IGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gYSBsb29wCittb3VudGVkIGZpbGUgYW5kIGNvbXBsYWluIHdpdGhvdXQgdGhlIC1GRiBvcHRpb24uICBBbHNvIGZpeGVkIG1rZTJmcworc28gaXQgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBhIGZpbGUgc3lzdGVtIG9uIGEgbW91bnRlZCBkZXZpY2Ugd2l0aAordHdvIC1GIG9wdGlvbnMsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlLCBpbnN0ZWFkIG9mIHRocmVlIC1GCitvcHRpb25zLgorCitGaXhlZCBhIGxhcmdlIG51bWJlciBvZiBidWdzIGluIHJlc2l6ZTJmcywgZTJmc2NrLCBkZWJ1Z2ZzLCBhbmQKK2xpYmV4dDJmcyB0byBjb3JyZWN0bHkgaGFuZGxlIGJpZ2FsbG9jIGFuZCA2NC1iaXQgZmlsZSBzeXN0ZW1zLiAgVGhlcmUKK3dlcmUgbWFueSBjb3JuZXIgY2FzZXMgdGhhdCBoYWQgbm90IGJlZW4gbm90aWNlZCBpbiBwcmV2aW91cyB1c2VzIG9mCit0aGVzZSBmaWxlIHN5c3RlbXMsIHNpbmNlIHRoZXkgYXJlIG5vdCBhcyBjb21tb24uICBTb21lIG9mIHRoZSBidWdzCitjb3VsZCBjYXVzZSBmaWxlIHN5c3RlbSBjb3JydXB0aW9uIG9yIGRhdGEgbG9zcywgc28gdXNlcnMgb2YgNjQtYml0IG9yCitiaWdhbGxvYyBmaWxlIHN5c3RlbXMgYXJlIHN0cm9uZ2x5IHVyZ2VkIHRvIHVwZ3JhZGUgdG8gZTJmc3Byb2dzCisxLjQyLjkuCisKK1RoZSB0dW5lMmZzIHByb2dyYW0gd2lsbCBub3cgbm90IGFsbG93IGNoYW5naW5nIHRoZSB1dWlkIG9uIGEgbW91bnRlZAorZmlsZSBzeXN0ZW0gd2hpY2ggaGFzIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBlbmFibGVkLiAgVGhpcyBhdm9pZHMgYQorbmFzdHkgcmFjZSB3aGVyZSB0aGUga2VybmVsIGFuZCB0dW5lMmZzIGFyZSBib3RoIHJldHJ5aW5nIHJld3JpdGUgdGhlCitncm91cCBkZXNjcmlwdG9ycyBhdCB0aGUgc2FtZSB0aW1lLCB3aXRoIGRpZmZlcmVudCBpZGVhcyBhYm91dCB3aGF0Cit0aGUgVVVJRCBzaG91bGQgYmUuCisKK1doZW4gZTJmc2NrIGlzIHJlaGFzaGluZyBhbiBleHRlbnQtbWFwcGVkIGRpcmVjdG9yeSwgaXQncyBwb3NzaWJsZQorKGFsdGhvdWdoIHZlcnkgcmFyZSkgdGhhdCBhbiBleHRlbnQgYmxvY2sgd2lsbCBuZWVkIHRvIGJlIGFsbG9jYXRlZDsKK2ZpeCBlMmZzY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrIGdldHMgbWFya2VkIGFzIHVzZWQuCisKK01rZTJmcyB3aWxsIG5vdyBwcm9wZXJseSBzZXQgdGhlIExBUkdFX0ZJTEUgZmVhdHVyZSB3aGVuIGNyZWF0aW5nIGEKK2pvdXJuYWwgPj0gMkdCIC0tLSB3aGljaCBjYW4gaGFwcGVuIHdoZW4gdXNpbmcgNjRrIGJsb2NrIHNpemUuCisKK0ZpeGVkIGRlYnVnZnMgc28gdGhhdCBpdHMgZnJlZWkgY29tbWFuZCB3aWxsIGNvcnJlY3RseSBoYW5kbGUgYSByZXF1ZXN0Cit0byBmcmVlIGEgcmFuZ2Ugb2YgY29uc2VjdXRpdmUgaW5vZGVzLgorCitGaXhlZCAyZnNjayBzbyBpdCB3aWxsIG5vdCBlcnJvbmVvdXNseSBjb21wbGFpbiB0aGF0IGFuIGV4dGVybmFsIGpvdXJuYWwKK2lzIGludmFsaWQgaWYgaXQgaXMgZXhhY3RseSAyKiozMiBibG9ja3MuCisKK0ZpeGVkIGUyZnNjayBzbyBpdCB3b24ndCB0cnkgY2hlY2tpbmcgZm9yLCBhbmQgYWRkaW5nLCBhIG1pc3NpbmcKK2xvc3QrZm91bmQgZGlyZWN0b3J5IHdoZW4gcnVubmluZyBpbiByZWFkLW9ubHkgbW9kZS4KKworRml4ZWQgZTJpbWFnZSB0byBhdm9pZCBzb21lIGJ1ZmZlciBvdmVycnVucyB3aGljaCB3b3VsZCBjYXVzZSBpdCB0byB3aGVuCitjcmVhdGluZyBhICJzdGFuZGFyZCAobm9uLXJhdywgbm9uLXFjb3cyKSBpbWFnZSBmaWxlLiAgU3RhbmRhcmQKK2UyaW1hZ2UgZmlsZXMgYXJlIGFjdHVhbGx5IHZlcnkgcmFyZWx5IHVzZWQsIHNvIHdlIGRpZG4ndCBub3RpY2Ugd2hlbgordGhlIGNoYW5nZXMgdG8gZW5hYmxlIHRoZSBxY293MiBmb3JtYXQgYnJva2UgdGhpcyBlMmltYWdlIG1vZGUuCisKK0ZpeGVkIG1rZTJmcyBzbyB0aGF0IHRoZSBleHRlbmRlZCBvcHRpb24gIi1FIHJlc2l6ZT1OTk4iIHdpbGwgbm90IHR1cm4KK29uIHRoZSByZXNpemVfaW5vZGUgZmVhdHVyZSB3aGVuIHRoZSBtZXRhX2JnIGZlYXR1cmUgaXMgc2V0LCBzaW5jZQordGhlc2UgdHdvIGZlYXR1cmVzIGNhbiBub3QgYmUgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisKK0ZpeGVkIHR1bmUyZnMgc28gdGhhdCB3aGVuIGl0IGRpc2FibGVzIHRoZSBxdW90YSBmZWF0dXJlLCBpdCB1cGRhdGVzIGFsbAorb2YgdGhlIGJhY2t1cCBzdXBlcmJsb2Nrcy4KKworRml4ZWQgZHVtcGUyZnMgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhYm9ydCB3aGVuIHJ1biB1c2luZyBhbiBpbWFnZSBmaWxlCit3aGVuIHRyeWluZyB0byBwcmludCB0aGUgam91cm5hbCBpbmZvcm1hdGlvbiAod2hpY2ggaXMgbm90IHByZXNlbnQgaW4KK2FuIGUyaW1hZ2UgY3JlYXRlZCBpbWFnZSBmaWxlKS4KKworRml4ZWQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpbiBlMnJlZWZyYWcuCisoQWRkcmVzc2VzLURlYmlhbi1CdWc6ICM3MTgyMDUpCisKK0VuaGFuY2UgZGVidWdmcyBzbyB0aGF0IHdoZW4gY29weWluZyBhIHNwYXJzZSBmaWxlIGZyb20gYSBuYXRpdmUgZmlsZQorc3lzdGVtIGludG8gdGhlIGZpbGUgc3lzdGVtIGltYWdlIHVzaW5nIHRoZSAid3JpdGUiIGNvbW1hbmQsIGl0IHdpbGwKK2NyZWF0ZSBhIHNwYXJzZSBmaWxlIGludG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUgc3lzdGVtLgorCitFbmhhbmNlZCBkZWJ1Z2ZzIHNvIGl0IGNhbiBzdXBwb3J0IGEgY29tbWFuZCBsaW5lIHdoaWNoIGlzIHVwIHRvIDhrCitsb25nLgorCitFMmltYWdlIHdpbGwgcmVmdXNlICh1bmxlc3MgdGhlIC1mIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG8gZm9yY2UgdGhlCitpc3N1ZSkgdG8gY3JlYXRlIGEgcmF3IG9yIHFjb3cgaW1hZ2UgdXNpbmcgYSBtb3VudGVkIGZpbGUgc3lzdGVtLAordW5sZXNzIHRoZSAtZiBvcHRpb24gaXMgc3BlY2lmaWVkIHRvIGZvcmNlIHRoZSBpc3N1ZS4KKworRTJpbWFnZSBoYXMgYmVlbiBvcHRpbWl6ZWQgZm9yIHVzaW5nIGl0IHRvIGVmZmljaWVudGx5IGNvcHkgYSBmaWxlCitzeXN0ZW0gYnkgb25seSBjb3B5aW5nIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLCBieSB1c2luZyB0aGUgb3B0aW9ucyAtcmEuCitOZXcgb3B0aW9ucyAoLW8gYW5kIC1PKSBoYXZlIGJlZW4gYWRkZWQgc28gdGhhdCBhIHNvdXJjZSBhbmQKK2Rlc3RpbmF0aW9uIG9mZnNldCBjYW4gYmUgZ2l2ZW4uICBUaGUgLXAgb3B0aW9uIHdpbGwgcHJpbnQgcHJvZ3Jlc3MKK2luZm9ybWF0aW9uIHNvIHRoZSB1c2VyIHdpbGwga25vdyBob3cgZmFyIGFsb25nIHRoZSBjb3B5IGlzIGdvaW5nLgorQW5kIGZpbmFsbHksIHRoZSBuZXcgb3B0aW9uIC1jIGlzIHVzZWZ1bCBmb3IgdXBkYXRpbmcgYSBmaWxlIHN5c3RlbSBvbgorYW4gU1NELCBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSB3cml0ZXMuICBFMmltYWdlIGNhbiBhbHNvIHNoaWZ0IGEgZmlsZQorc3lzdGVtIGltYWdlIGJ5IGRvaW5nIGFuIGluIHBsYWNlIG1vdmUuCisKK0ZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAxLjQyLjggd2hpY2ggd291bGQgY2F1c2UgZTJmc2NrIHRvCitlcnJvbmVvdXNseSByZXBvcnQgdW5pbml0aWFsaXplZCBleHRlbnRzIHBhc3QgdGhlIEVPRiAoYXMgZGV0ZXJtaW5lZCBieQoraV9zaXplKSB0byBiZSBpbnZhbGlkLgorCitGaXhlZCByZXNpemUyZnMgc28gdW5kZXIgYSBjb3JuZXIgY2FzZSB3aGVuIGFuIGlub2RlIGhhcyBhIGNvbXBsZXgKK2V4dGVudCB0cmVlLCBpdCB3aWxsIG5vdCBjb3JydXB0IGFuIGludGVyaW9yIG5vZGUgaW4gdGhlIGV4dGVudCB0cmVlLgorCitGaXhlZCByZXNpemUyZnMgd2hpY2ggd291bGQgc29tZXRpbWVzIGNvcnJ1cHQgYSBmaWxlIHN5c3RlbSB3aGVuCitzaHJpbmtpbmcgYSBmaWxlIHN5c3RlbSB0byBhIG1pbmltdW0gc2l6ZSB1c2luZyByZXNpemUyZnMgLU0uCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2NjA3OTMpCisKK0ZpeGVkIHJlc2l6ZTJmcyBzbyB0aGF0IGl0IHdpbGwgcmVsb2NhdGUgaW5vZGUgdGFibGUgYmxvY2tzIGlmIHRoaXMKK2JlY29tZXMgbmVjZXNzYXJ5IHdoZW4gc2hyaW5raW5nIHRoZSBmaWxlIHN5c3RlbS4KKworRml4ZWQgcmVzaXplMmZzIGFuZCBlMmZzY2sgc28gdGhleSB3aWxsIG5vdCBjcmFzaCB3aGVuIGhpdCBhIGZhaWx1cmUKK3doaWxlIG9wZXJhdGluZyBvbiBhIGZpbGUgc3lzdGVtIHdpdGggdGhlIE1NUCBmZWF0dXJlIGVuYWJsZWQuCisKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgd2hpY2ggY2F1c2VkIGl0IGNyZWF0ZSBhbiBpbnZhbGlkIGlub2RlIHdoZW4KK3RyeWluZyB0byB3cml0ZSBhIHplcm8tbGVuZ3RoIGZpbGUuCisKK0UyZnNjayB3aWxsIG5vIGxvbmdlciBjcmFzaCBpZiBpdCB0cmllcyB0byBkZWxldGUgYW4gaW52YWxpZAorZXh0ZW50LW1hcHBlZCBzeW1saW5rLgorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgY3Jhc2ggaWYgaXQgY29tZXMgYWNyb3NzIGFuIGRpcmVjdG9yeSB3aGljaCBpcworbGFyZ2VyIHRoYW4gMkdCICh3aGljaCBpcyBub3QgYWxsb3dlZCBpbiB2YWxpZCBmaWxlIHN5c3RlbXMpLgorCitGaXhlZCBkZWJ1Z2ZzJ3MgaGVscCB0ZXh0cyB0byBmdWxseSBkb2N1bWVudCBhbGwgb3B0aW9ucyBhbmQgb3RoZXJ3aXNlCitiZSBtb3JlIGhlbHBmdWwuCisKK1VwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNTg2MjE4LAorIzY2OTczMCwgIzY5ODA3NikKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIElzc3VlcyAoIzY5ODg3OSwgIzcyMTM2NSkKKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggc3BhcnNlLCBnY2MgLVdhbGwgYW5kIGNsYW5nIG5pdHMuCisKK1VwZGF0ZSBjb25maWcue2d1ZXNzLHN1Yn0gdG8gdGhlIGxhdGVzdCB2ZXJzaW9uCisKK0ZpeGVkIHZhcmlvdXMgbWVtb3J5IGFuZCBmaWxlIGRlc2NyaXB0b3IgbGVha3Mgb24gdmFyaW91cyBlcnJvciBwYXRocywKK2FzIHdlbGwgYXMgc29tZSBtaXNzaW5nIGVycm9yIHJldHVybiBjaGVja3MsIHdoaWNoIHdlcmUgZm91bmQgdXNpbmcKK0NvdmVyaXR5LgorCitSdW4gc3BhcnNlIGFnYWluc3Qgc291cmNlIGZpbGVzIHdoZW4gYnVpbGRpbmcgZTJmc3Byb2dzIHdpdGggJ21ha2UKK0M9MScuICBJZiBpbnN0ZWFkIEM9MiwgaXQgY29uZmlndXJlcyBiYXNpYyBleHQyIHR5cGVzIGZvciBiaXR3aXNlCitjaGVja2luZyB3aXRoIHNwYXJzZSwgd2hpY2ggY2FuIGhlbHAgZmluZCB0aGUgKG1hbnkgbWFueSkgc3BvdHMgd2hlcmUKK2NvbnZlcnNpb24gZXJyb3JzIGFyZSAocG9zc2libHkpIGhhcHBlbmluZy4KKworQWxsb3cgdGhlIHJlZ3Jlc3Npb24gdGVzdCB0byBiZSBydW4gaW4gY2hyb290ZWQgZW52aXJvbm1lbnRzIHdoZXJlCisvZXRjL210YWIgbWlnaHQgYmUgbWlzc2luZy4KKworVGhlIGV4dDJmc19wdW5jaCgpIGZ1bmN0aW9uLCB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiAxLjQyLCB3YXMgYnJva2VuCitpbiBtYW55IHdheXMsIGJ1dCB0aGlzIHdhcyBuZXZlciBub3RpY2VkIHNpbmNlIGl0IHdhc24ndCB1c2VkIGZvcgorYW55dGhpbmcgc2lnbmlmaWNhbnQuICBTb21lIG9mIHRoZSBidWdzIGluY2x1ZGUgZmFpbGluZyB3aGVuIHRyeWluZyB0bworcHVuY2ggYSBjb21wbGV0ZWx5IHNwYXJzZSBmaWxlLCBmYWlsaW5nIHdoZW4gcHVuY2hpbmcgYW4gZXh0ZW50LW1hcHBlZAoraW5vZGUgd2hlbiB0aGUgc3RhcnRpbmcgYmxvY2sgd2FzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlub2RlLCBhbmQKK25vdCBiZWluZyBhYmxlIHRvIHB1bmNoIGEgc2luZ2xlIGJsb2NrICh3aGVyZSBzdGFydF9ibGsgPT0gZW5kX2Jsb2NrKS4KK0l0IGFsc28gZGlkbid0IGhhbmRsZSBiZWluZyBwYXNzZWQgYW4gaW52YWxpZCwgdG9vLWxhcmdlIGVuZGluZyBibG9jaworbnVtYmVyLCBhbmQgZGlkbid0IGhhbmRsZSBwcm9wZXJseSB0ZXJtaW5hdGUgYXQgdGhlIHJpZ2h0IHBsYWNlIHdoZW4KK29wZXJhdGluZyBvbiBhbiBpbmRpcmVjdC1tYXBwZWQgaW5vZGUuCisKK0ZpeGVkIHNvbWUgbWlub3IgdHlwbydzIGluIHRoZSBlcnJvciBjYXRhbG9nIGZvciBsaWJleHQyZnMuCisKK0ZpeGVkIGV4dDJmc19maWxlX3NldF9zaXplMigpIHNvIHRoYXQgaWYgaXQgdHJ1bmNhdGVzIGFuIGlub2RlIGJ5CitzZXR0aW5nIHRoZSBmaWxlIHNpemUsIHRvIHplcm8gdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIHRvIHRoZSBlbmQgb2YgdGhlCitmaWxlLCBzbyB0aGF0IGlmIGFuIGV4dDQgRlVTRSBkcml2ZXIgdHJpZXMgdG8gZXh0ZW5kZWQgdGhlIGZpbGUsIHRoYXQKK3dlIGRvbid0IGF2b2lkIHN0YWxlIGRhdGEgZnJvbSBiZWluZyByZXR1cm5lZC4KKworRml4ZWQgZXh0MmZzX2JtYXAoKSB0byBkaXNhbGxvdyBjbGllbnRzIGZyb20gdHJ5aW5nIHRvIG1hcCBvciBzZXQKK2xvZ2ljYWwgYmxvY2tzIHdoaWNoIGFyZSBsYXJnZXIgdGhhbiB3aGF0IGFuIGV4dGVudC1tYXBwZWQgb3IgaW5kaXJlY3QKK2Jsb2NrLW1hcHBlZCBpbm9kZSBjYW4gYWxsb3cuCisKK0lmIGRlYnVnZnMgKG9yIHNvbWUgdXNlcnNwYWNlIHByb2dyYW0gdXNpbmcgbGliZXh0MmZzKSBjcmVhdGVzIGEgZmlsZQord2hpY2ggaXMgbGFyZ2VyIHRoYW4gMkdCLCBtYWtlIHN1cmUgdGhlIGxhcmdlX2ZpbGUgZmVhdHVyZSBmbGFnIGdldHMKK3NldC4KKworRml4IGEgYnVnIGluIGV4dDJmc19saW5rKCkgd2hlcmUgaWYgdGhlcmUgaXMgbXVsdGlwbGUgZW1wdHkgc2xvdHMgaW4gdGhlCitkaXJlY3Rvcnkgd2hpY2ggYXJlIGxhcmdlIGVub3VnaCwgdGhlIGRpcmVjdG9yeSBlbnRyeSBjb3VsZCBnZXQKK2luc2VydGVkIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBkaXJlY3RvcnkuCisKK0lmIHF1b3RhIHN1cHBvcnQgaXMgZGlzYWJsZWQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgbWFrZSBzdXJlIHRoYXQKK2FsbCB0cmFjZXMgb2YgdGhlIHF1b3RhIHN1cHBvcnQgaXMgcmVtb3ZlZCBmcm9tIHVzYWdlIG1lc3NhZ2VzLCBtYW4KK3BhZ2VzLCBhbmQgdHVuZTJmcyBtdXN0IG5vdCBiZSBhYmxlIHRvIGVuYWJsZSB0aGUgcXVvdGEgZmlsZSBzeXN0ZW0KK2ZlYXR1cmUuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICMxMDEwNzA5KQorCitUaGUgZXh0MmZzX2ZpbGVfd3JpdGUoKSBub3cgdXBkYXRlcyBpX3NpemUgb24gYSBzdWNjZXNzZnVsIHdyaXRlLAoraW5zdGVhZCBvZiBvbmx5IHVwZGF0aW5nIGlfc2l6ZSB3ZW4gdGhlIGZpbGUgaXMgY2xvc2VkIHZpYQorZXh0MmZzX2ZpbGVfY2xvc2UoKS4KKworQWRkZWQgYSBzaGVsbCBzY3JpcHQsIHBvcHVsYXRlLWV4dGZzLnNoIHdoaWNoIHVzZXMgZGVidWdmcyB0byBwb3B1bGF0ZQorYW4gZXh0Mi8zLzQgZmlsZSBzeXN0ZW0gaW1hZ2UgZnJvbSBhIGdpdmVuIGRpcmVjdG9yeS4gIEl0IGlzIHNpbWlsYXIKK3RvIHRoZSBnZW5leHQyZnMgcHJvZ3JhbSwgYnV0IGl0IHN1cHBvcnRzIGV4dDMgYW5kIGV4dDQgZmlsZSBzeXN0ZW0uCisKK0FkZCBjaGFuZ2VzIHRvIHRoZSBsaWJleHQyZnMgbGlicmFyeSB0byBzdXBwb3J0IGJsb2NrIGdyb3VwCitkZXNjcmlwdG9ycyBsYXJnZXIgdGhhbiA2NCBieXRlcyAoZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5KS4KKworRml4ZWQgYW4gb2ZmLWJ5LW9uZSBidWcgaW4gZXh0MmZzX2ZpbGVfc2V0X3NpemUyKCkgc28gdGhhdCBpdCB3aWxsIG5vdAorbGVhdmUgYW4gZXh0cmEgYmxvY2sgaW4gdGhlIGZpbGUgd2hlbiB0cnVuY2F0aW5nIHRoZSBmaWxlIGRvd24gdG8KK3NpemUuCisKK1RoZSBodG1sIHZlcnNpb24gaW5mbyBwYWdlcyBhcmUgbm93IGJ1aWx0IHVzaW5nIG1ha2VpbmZvIC0taHRtbAoraW5zdGVhZCBvZiB0aGUgdW5tYWludGFpbmVkIGFuZCBub3ctb2Jzb2xldGUgdGV4aTJodG1sIHByb2dyYW0uCisKKworRTJmc3Byb2dzIDEuNDIuOCAoSnVuZSAyMCwgMjAxMykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FzIGEgcGFydCBvZiBta2UyZnMncyBvcHRpb24gcGFyc2luZyBjbGVhbnVwLCB0aGUgdXNlIG9mIHRoZSAtUiBvcHRpb24KK3dpbGwgZ2l2ZSBhIHdhcm5pbmcgdGhhdCBpdCBpcyBkZXByZWF0ZWQgKGl0IGhhcyBiZWVuIHNvIGRvY3VtZW50ZWQKK3NpbmNlIDIwMDUpIGFuZCAtRSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorCitNa2UyZnMgd2lsbCBub3QgZ2l2ZSB3YXJuaW5ncyBhYm91dCB0aGUgYmlnYWxsb2MgYW5kIHF1b3RhIG9wdGlvbnMgaW4KK3F1aWV0IG1vZGUuCisKK0lmIGFuIGludmFsaWQgam91cm5hbCBzaXplIGlzIGdpdmVuIHRvIG1rZTJmcywgaXQgd2lsbCBub3cgY29tcGxhaW4KK2FuZCBleGl0IHNvb25lci4KKworRGVidWdmcyB3YXMgZXJyb25lb3VzbHkgZ2l2aW5nIHNwdXJpb3VzIGVycm9yIG1lc3NhZ2VzIGZvciBjZXJ0YWluCitleHRlbnRfaW5vZGUgc3ViY29tbWFuZHMgd2hpY2ggdGFrZSBhcmd1bWVudHMgKHNwbGl0X25vZGUsCityZXBsYWNlX25vZGUsIGFuZCBpbnNlcnRfbm9kZSkuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCitGaXggdGhlIHBhcnNpbmcgb2YgdGhlICdzJyAoc2VjdG9ycykgaW4gcGFyc2VfbnVtX2Jsb2NrczIsIHdoaWNoIGFtb25nCitvdGhlciBwcm9ncmFtcyBpcyB1c2VkIGJ5IG1rZTJmcy4KKworQ2hhbmdlIG1rZTJmcyBzbyB0aGF0IGl0IGRvZXMgbm90IHNldCB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gdGhlIHJlYWwKK3VpZC9naWQgb2YgdGhlIG1rZTJmcyBwcm9jZXNzLiAgQWRkIHRoZSBleHRlbmRlZCBvcHRpb24gcm9vdF9vd25lciB0bworb3ZlcnJpZGUgdGhpcyBiZWhhdmlvci4KKworRml4IHJlc2l6ZTJmcyB3aGVuIHNocmlua2luZyBmaWxlIHN5c3RlbXMgdG8gbWFrZSBzdXJlIHRoYXQgYml0bWFwCitibG9ja3MgYXJlbid0IGxlZnQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzaHJ1bmtlbiBmaWxlIHN5c3RlbS4KK1RoaXMgY291bGQgaGFwcGVuIHdpdGggZmxleF9iZyBmaWxlIHN5c3RlbXMgdGhhdCB3ZXJlIGdyb3duIHVzaW5nCit0aGUgb2xkIG9ubGluZSByZXNpemluZyBhbGdvcml0aG0uCisKK0UyZnNjayB3aWxsIG5vdyBkZXRlY3QgYW5kIHJlcGFpciBjb3JydXB0ZWQgZXh0ZW50IHRyZWVzIHdoaWNoIGNvbnRhaW4KK2ludmFsaWQgZXh0ZW50cyBhdCB0aGUgZW5kIG9mIHRoZSBleHRlbnQgdHJlZSBsZWFmIGJsb2NrLgorCitFMmZzY2sgd2lsbCBub3cgbG9uZ2VyIGNvbXBsYWluIGFib3V0IHplcm8gbGVuZ3RoIGV4dGVuZGVkIGF0dHJpYnV0ZQordmFsdWVzLgorCitGaXggYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gZTJmc3Byb2dzIHYxLjQyIHdoaWNoIGNhdXNlZCBlMmltYWdlIC1zCit0byBjcmFzaC4KKworQWRkIHNhZmV0eSBjaGVjayBzbyB0dW5lMmZzIHdpbGwgbm90IGF0dGVtcHQgdG8gc2V0IHRoZSBpbm9kZSBzaXplIHRvCitiZSBsYXJnZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS4KKworRml4IGUyZnNjayBzbyBpdCBjYW4gY2hlY2sgYSByZWFkLW9ubHkgcm9vdCBmaWxlIHN5c3RlbSB3aXRoIGFuCitleHRlcm5hbCBqb3VybmFsLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNzA3MDMwCisKK0ZpeCBvZmYtbGluZSByZXNpemluZyBvZiBmaWxlIHN5c3RlbXMgd2l0aCBmbGV4X2JnICYmICFyZXNpemVfaW5vZGUKKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzY5Njc0NikKKworRml4IGUyaW1hZ2Ugd2l0aCBsYXJnZSAoPiAzMi1iaXQpIGZpbGUgc3lzdGVtcyAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNzAzMDY3KQorCitFbmhhbmNlIGNoYXR0ciB0byBhbGxvdyBjbGVhcmluZyB0aGUgZXh0ZW50IGZsYWcgaWYgdGhlIGtlcm5lbCBhbGxvd3MKK21pZ3JhdGluZyBleHRlbnQgYmFzZWQgZmlsZXMgdG8gdXNlIGluZGlyZWN0IGJsb2Nrcy4KKworVXBkYXRlIEdlcm1hbiB0cmFuc2xhdGlvbi4KKworVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM3MTI0MjksCisjNzEyNDMwLCAjNzA3NjA5KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgSXNzdWVzIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNzA4MzA3KQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2Ugc2VjdXJlX2dldGVudigpIGluIHByZWZlcmVuY2UgdG8gX19zZWN1cmVfZ2V0ZW52KCkuCisKK09wdGltaXplIENQVSB1dGlsaXphdGlvbiBvZiBleHQyZnNfYmdfaGFzX3N1cGVyKCkuCisKK0ZpeCBleHQyZnNfbGxzZWVrKCkgb24gMzItYml0IGkzODYgc3lzdGVtcyB0byB3b3JrIGNvcnJlY3RseSB3aGVuCitTRUVLX0NVUiBpcyB1c2VkIHdpdGggbGFyZ2UgZmlsZXMuCisKK1RoZSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkgZnVuY3Rpb24gd2lsbCBubyBsb25nZXIgdXNlCitmcy0+cmVhZF9pbm9kZSgpIGlmIHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCBtb3JlIHRoYW4gdGhlIGJhc2UgMTI4CitieXRlIGlub2RlIHN0cnVjdHVyZSBhbmQgdGhlIGlub2RlIHNpemUgaXMgZ3JlYXRlciB0aGFuIDEyOCBieXRlcy4KKworRml4IGJ1aWxkIGZhaWx1cmUgd2l0aCAtLWVuYWJsZS1qYmQtZGVidWcuCisKK0NsZWFuIHVwIGZpbHRlcmluZyBvZiBvdXRwdXRzIGZvciB0aGUgcmVncmVzc2lvbiB0ZXN0cyBieSB1c2luZyBhCitjb21tb24gc2VkIHNjcmlwdC4KKworRml4IGdjYyAtV2FsbCBhbmQgY2xhbmcgbml0cy4KKworCitFMmZzcHJvZ3MgMS40Mi43IChKYW51YXJ5IDIxLCAyMDEzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkIHdhcm5pbmdzIHRvIG1rZTJmcywgcmVzaXplMmZzLCBhbmQgdHVuZTJmcyB0aGF0IHRoZSBiaWdhbGxvYyBhbmQKK3F1b3RhIGZlYXR1cmVzIGFyZSBzdGlsbCB1bmRlciBkZXZlbG9wbWVudC4gIEZvciBtb3JlIGluZm9ybWF0aW9uCitwbGVhc2Ugc2VlOgorICAgICogaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MKKyAgICAqIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhCisKK0FkZCBzb21lIG5ldyBvcHRpb25zIHRvIGZpbGVmcmFnIGZyb20gTHVzdHJlJ3MgcGF0Y2hlcyB0byBlMmZzcHJvZ3M6CisgICAgKiBhZGQgLWsgb3B0aW9uIHRvIHByaW50IGV4dGVudHMgaW4ga0Itc2l6ZWQgdW5pdHMgKGxpa2UgZGYgLWspCisgICAgKiBhZGQgLWIge2Jsb2Nrc2l6ZX0gdG8gcHJpbnQgZXh0ZW50cyBpbiBibG9ja3NpemUgdW5pdHMKKyAgICAqIGFkZCAtZSBvcHRpb24gdG8gcHJpbnQgZXh0ZW50IGZvcm1hdCwgZXZlbiB3aGVuIEZJQk1BUCBpcyB1c2VkCisgICAgKiBhZGQgLVggb3B0aW9uIHRvIHByaW50IGV4dGVudHMgaW4gaGV4YWRlY2ltYWwgZm9ybWF0CisKK0ZpeCByZXNpemUyZnMgc28gdGhhdCBpdCBjYW4gaGFuZGxlIG9mZi1saW5lIHJlc2l6ZXMgb2YgZmlsZSBzeXN0ZW1zCit3aXRoIHRoZSBmbGV4X2JnIGZlYXR1cmUgYnV0IHdpdGhvdXQgYSByZXNpemVfaW5vZGUgKG9yIGlmIHdlIHJ1biBvdXQKK29mIHJlc2VydmVkIGdkdCBibG9ja3MpLiAgVGhpcyBhbHNvIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSBpZiB0aGUgdXNlcgorY3JlYXRlcyBhIGZpbGVzeXN0ZW0gd2l0aCBhIHJlc3RyaWN0ZWQgbnVtYmVyIG9mIHJlc2VydmVkIGdkdCBibG9ja3MsCithbiBvZmYtbGluZSByZXNpemUgd2hpY2ggZ3Jvd3MgdGhlIGZpbGUgc3lzdGVtIGNvdWxkIHBvdGVudGlhbGx5CityZXN1bHQgaW4gZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4KKworRml4IGEgcmVzaXplMmZzIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBjb3JydXB0IGJpZ2FsbG9jIGZpbGUKK3N5c3RlbXMgd2hlbiBkb2luZyBhbiBvZmYtbGluZSByZXNpemUuCisKK0Z1cnRoZXIgb3B0aW1pemUgcmVzaXplMmZzIHNvIGl0IGRvZXNuJ3QgdXNlIHF1aXRlIGFzIG11Y2ggQ1BVIHdoZW4KK3Jlc2l6aW5nIHZlcnkgbGFyZ2UgZmlsZSBzeXN0ZW1zLiAKKworRml4ZWQgMzItYml0IG92ZXJmbG93IGJ1Z3Mgd2hpY2ggY291bGQgY2F1c2UgcmVzaXplMmZzIHRvIGZhaWwgYW5kCitwb3NzaWJseSBjb3JydXB0IHRoZSBmaWxlIHN5c3RlbSB3aGlsZSByZXNpemluZyA2NC1iaXQgZmlsZSBzeXN0ZW1zLgorCitGaXggYSBidWcgaW4gbWtlMmZzIHdoZXJlIHBhcnNpbmcgIi1FIHJlc2l6ZT1OTk4iIHdpbGwgcmVzdWx0IGluIGEKK21rZTJmcyBjcmFzaCBkdWUgdG8gYSBkaXZpZGUtYnktemVybyBpZiB0aGUgNjRiaXQgZmlsZSBzeXN0ZW0gZmVhdHVyZQoraXMgZW5hYmxlZC4KKworQWRkIGJldHRlciBlcnJvciBjaGVja2luZyB0byBta2UyZnMgdG8gY2hlY2sgZm9yIGludmFsaWQgcGFyYW1ldGVycword2hlbiBjcmVhdGluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbS4KKworV2hlbiBjcmVhdGluZyBiaWdhbGxvYyBmaWxlc3lzdGVtcywgdGhlIC1nIG9wdGlvbiB0byBta2UyZnMgd2lsbCBub3cKK3NwZWNpZnkgdGhlIG51bWJlciBvZiBjbHVzdGVycyBwZXIgYmxvY2sgZ3JvdXAuCisKK0FkZCB0byBkZWJ1Z2ZzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGNvcnJ1cHQgYSBzcGVjaWZpYyBmaWxlIHN5c3RlbQorYmxvY2sgdmlhIHRoZSAiemFwX2Jsb2NrIiBjb21tYW5kLgorCitBZGQgdG8gZGVidWdmcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBwcmludCBvdXQgYSBoZXggZHVtcCBvZiBhIGJsb2NrIGluCit0aGUgZmlsZSBzeXN0ZW0gdmlhIHRoZSAiYmxvY2tfZHVtcCIgY29tbWFuZC4KKworQWRkIHRvIGRlYnVnZnMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gbWFuaXB1bGF0ZSB0aGUgZXh0ZW50IHRyZWUKK2RpcmVjdGx5IHZpYSB0aGUgImV4dGVudF9vcGVuIiBjb21tYW5kLgorCitGaXhlZCBkZWJ1Z2ZzJ3MgbWtub2QgY29tbWFuZCBzbyB0aGF0IGl0IHVwZGF0ZXMgdGhlIGJsb2NrIGdyb3VwCitzdGF0aXN0aWNzLgorCitGaXggZTJmc2NrIHNvIGl0IGNhbiBkZXRlY3QgYW5kIGZpeCBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGludGVyaW9yCitub2RlcyBvZiBhbiBpbm9kZSdzIGV4dGVudCB0cmVlLgorCitGaXggYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gZmFpbHVyZSBpbiBlMmZzY2sncyBlcnJvciBwYXRoIGlmCit0aGUgY2FsbCB0byBleHQyZnNfb3BlbjIoKSBmYWlscy4KKworRml4IGUyZnNjayBpZiBpdHMgbG9nZ2luZyBmdW5jdGlvbiBpcyBlbmFibGVkIGluIGUyZnNjay5jb25mLCBhbmQgdGhlCityZXN1bHRpbmcgZmlsZSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgaXMgbG9uZ2VyIHRoYW4gMTAwIGJ5dGVzLCB0aGF0IGl0Citwcm9wZXJseSBoYW5kbGVzIHRoaXMgc2l0dWF0aW9uIGluc3RlYWQgb2YgY3Jhc2hpbmcuCisKK0UyZnNjayB3aWxsIG5vdyByZXBvcnQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBpdCBhdHRlbXB0ZWQgdG8KK2FsbG9jYXRlIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0IGZhaWxzLCB0byBtYWtlIGl0IGVhc2llciB0bwordHJhY2sgZG93biB0aGUgcHJvYmxlbS4KKworRml4IG1rZTJmcydzIGhhbmRsaW5nIG9mIHRoZSBtbXBfdXBkYXRlX2ludGVydmFsIG9wdGlvbi4gIChBZGRyZXNzZXMKK0x1c3RyZSBCdWc6IExVLTE4ODgpCisKK0UyaW1hZ2UgY2FuIG5vdyBpbmNsdWRlIGFsbCBkYXRhIGJsb2NrcyBpbiB0aGUgZTJpbWFnZSBvdXRwdXQgZmlsZQord2hlbiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIC1hIG9wdGlvbi4KKworSWYgZTJmc3Byb2dzIGlzIGNvbXBpbGVkIHdpdGhvdXQgLS1lbmFibGUtcXVvdGEsIG1ha2Ugc3VyZSB0aGF0Cit0dW5lMmZzIGNhbiBub3QgdHVybiBvbiB0aGUgZmVhdHVyZSBmb3IgbmV3LXN0eWxlIHF1b3RhIHN1cHBvcnQsIHNpbmNlCithZnRlcndhcmRzLCBub25lIG9mIHRoZSBlMmZzcHJvZ3MgdG9vbHMgd2lsbCBiZSB3aWxsaW5nIHRvIHRvdWNoIHRoYXQKK2ZpbGUgc3lzdGVtLgorCitPcHRpbWl6ZSBlMmZzY2sncyBzbyB0aGF0IGl0IHVzZXMgbXVjaCBsZXNzIENQVSBmb3IgbGFyZ2UgZmlsZQorc3lzdGVtcy4gIFRoaXMgY2FuIHJlc3VsdCBpbiBzaWduaWZpY2FudCBzcGVlZHVwcywgZXNwZWNpYWxseSBvbgorQ1BVLWNvbnN0cmFpbmVkIHN5c3RlbXMuICBUaGlzIHdhcyBwcmltYXJpbHkgZG9uZSBieSBvcHRpbWl6aW5nCitsaWJleHQyZnMncyBiaXRtYXAgZnVuY3Rpb25zLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOiAjNzUzNDgxMykKKworRml4IGRlYnVnZnMncyBodHJlZSBjb21tYW5kIHNvIHRoYXQgYWxsIGl0cyBtZXNzYWdlcyBhcmUgc2VudCB0aHJvdWdoCit0aGUgcGFnZXIuCisKK0ZpeGVkIGRlYnVnZnMncyAiZHVtcF9maWxlIiBhbmQgImNhdCIgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5CitvbiBmaWxlIHN5c3RlbXMgd2hvc2UgYmxvY2sgc2l6ZSBpcyBncmVhdGVyIHRoYW4gOGsuCisKK0ZpeCBlMmZyZWVmcmFnIHNvIGl0IHdvcmtzIG9uIDY0LWJpdCBmaWxlIHN5c3RlbXMsIGFuZCBzbyBpdCB1c2VzIG11Y2gKK2xlc3MgbWVtb3J5LiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOiA3MjY5OTQ4KQorCitVcGRhdGUgdGhlIHNwZF9yZWFkZGlyLmMgZmlsZSBpbiB0aGUgY29udHJpYiBkaXJlY3RvcnkgdG8gaW5jbHVkZSBzb21lCithZGRpdGlvbnMgd2hpY2ggd2VyZSBtYWRlIGluIDIwMDggdGhhdCBkaWRuJ3QgZ2V0IGZvbGRlZCBpbnRvIHRoZQordmVyc2lvbiB3aGljaCB3ZSBjaGVja2VkIGludG8gdGhlIGUyZnNwcm9ncyBzb3VyY2UgdHJlZS4gIFRoZXNlCitlbmhhbmNlbWVudHMgaW5jbHVkZSB0aHJlYWQgc2FmZXR5LCBzdXBwb3J0IGZvciByZWFkZGlyNjRfcigpLCBhbmQKK3NhZmVfZ2V0ZW52KCkgc3VwcG9ydCBpbiBjYXNlIHNwZF9yZWFkZGlyLnNvIGlzIHVzZWQgZm9yIHNldHVpZCBiaW5hcmllcy4KKworVXBkYXRlIEN6ZWNoLCBEdXRjaCwgRnJlbmNoLCBHZXJtYW4sIFBvbGlzaCwgU3dlZWRpc2gsIGFuZCBWaWV0bmFtZXNlCit0cmFuc2xhdGlvbnMKKworQWRkIGEgY29tbWFuZCB0byBkZWJ1Z2ZzIHRvIGNyZWF0ZSBzeW1saW5rcy4KKworRG9jdW1lbnQgdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaW4gdGhlIG1rZTJmcyBtYW4gcGFnZS4gIChBZGRyZXNzZXMKK0RlYmlhbiBCdWc6ICM2Njk3MzApCisKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGdjYyAtV2FsbCBuaXRzLgorCitGaXggYSBzcGVsbGluZyB0eXBvIGluIHRoZSBsaWJleHQyZnMgdGV4aW5mbyBkb2N1bWVudGF0aW9uLgorCitDaGFuZ2UgdGhlIG91dHB1dCBmcm9tICJtYWtlIGNoZWNrIiBzbyB0aGF0IHRvb2xzIHN1Y2ggYXMgZW1hY3MncyAiTS14Citjb21waWxlIiBkb2VzIG5vdCBtaXN0YWtlIHRoZSBvdXRwdXQgYXMgY29udGFpbmluZyBhIGNvbXBpbGVyIGVycm9yLgorCitFeHBvcnQgdHdvIG5ldyBmdW5jdGlvbnMgZnJvbSBsaWJleHQyZnM6IGV4dDJmc19leHRlbnRfbm9kZV9zcGxpdCgpCithbmQgZXh0MmZzX2V4dGVudF9nb3RvMigpLgorCitUaGUgZXh0MmZzX2V4dGVudHNfZml4X3BhcmVudHMoKSB3YXMgZml4ZWQgc28gaXQgZG9lcyBub3QgbW9kaWZ5IHRoZQorbG9jYXRpb24gb2YgdGhlIGV4dGVudCBoYW5kbGUgaWYgaXRzIGN1cnJlbnQgbG9jYXRpb24gaXMgYXQgYW4KK2ludGVyaW9yIG5vZGUsIHJhdGhlciB0aGFuIGEgbGVhZiBub2RlIG9mIGFuIGlub2RlJ3MgZXh0ZW50IHRyZWUuCisKK0FkZCBhIHJlZ3Jlc3Npb24gdGVzdCB0byBhc3N1cmUgdGhhdCBlMmZzY2sgY2FuIGNvcnJlY3RseSBmaXggYW4KK2luY29uc2lzdGVudCBpbnRlcmlvciBub2RlIGluIGFuIGlub2RlJ3MgZXh0ZW50IHRyZWUuCisKK1RoZSBleHQyZnNfe21hcmssdW5tYXJrLHRlc3R9X2Jsb2NrX2JpdG1hcF9yYW5nZTIoKSBmdW5jdGlvbnMgbm93Citjb3JyZWN0bHkgc3VwcG9ydCBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgd2hpY2ggdXNlIHN0b3JlIGJsb2NrIHVzYWdlCitpbmZvcm1hdGlvbiBpbiB1bml0cyBvZiBjbHVzdGVycy4KKworRml4ZWQgdGhlIGhlbHAgdGV4dCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBmb3IgLS1lbmFibGUtcXVvdGEuCisKK1RoZSBtNjhrLXNwZWNpZmljIGJpdG9wcyBjb2RlIGhhcyBiZWVuIHJlbW92ZWQgc2luY2UgdGhleSB3ZXJlCitpbmNvcnJlY3RseSB0cmVhdGluZyBiaXQgbnVtYmVycyB3aXRoIHRoZSBoaWdoIGJpdCBzZXQgYXMgc2lnbmVkCitpbnRlZ2Vycy4gIEZ1cnRoZXJtb3JlLCBtb2Rlcm4gY29tcGlsZXJzIGRvIGEgZ29vZCBlbm91Z2ggam9iCitvcHRpbWl6aW5nIHRoZSBnZW5lcmljIGNvZGUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIHRoZSBtNjhrCitzcGVjaWZpYyBhc20gc3RhdGVtZW50cy4KKworRml4ZWQgaG93IHdlIGxpbmsgdGhlIHRlc3QgcHJvZ3JhbXMgc28gdGhleSBhbHdheXMgdXNlIHRoZSBzdGF0aWMKK2xpYnJhcmllcywgc28gdGhhdCB3ZSB0ZXN0IHVzaW5nIHRoZSBsaWJyYXJpZXMgd2hpY2ggd2UgaGF2ZSBqdXN0CitidWlsdC4KKworVXBkYXRlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB0byB0aGUgbGF0ZXN0IHZlcnNpb25zIGZyb20gdGhlIEdOVQorcHJvamVjdC4KKworRml4ZWQgdGhlIGNvbV9lcnIudGV4aW5mbyBmaWxlIHNvIHRoYXQgaXQgY2FuIHByb2R1Y2UgYSB2YWxpZAorcG9zdHNjcmlwdC9wZGYgcHJpbnRlZCBvdXRwdXQuCisKK0FkZCBhIHJlZ3Jlc3Npb24gdGVzdCB3aGljaCBjaGVja3MgZGVidWdmcydzIGFiaWxpdHkgdG8gY3JlYXRlCitzeW1saW5rcywgbmFtZWQgRklGTydzLCBhbmQgZGV2aWNlIG5vZGVzLgorCitBZGQgYSBmdW5jdGlvbiBleHQyZnNfc3ltbGluaygpLCB3aGljaCBjcmVhdGVzIHN5bWxpbmtzIHRvIHRoZQorbGliZXh0MmZzIGxpYnJhcnkuCisKK0FkZCBkZWJ1Z2dpbmcgY29kZSBzbyB3ZSBjYW4gdGVzdCBvbGQga2VybmVsIGludGVyZmFjZXMgZm9yIG9ubGluZQorcmVzaXplIHRvIHJlc2l6ZTJmcy4gIFRoaXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcgaXMga2V5ZWQKK29mZiBvZiB0aGUgUkVTSVpFMkZTX0tFUk5FTF9WRVJTSU9OLCB3aGljaCBpcyBkZXNpZ25lZCB0byBhbGxvdyB1cyB0bwordGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUga2VybmVsJ3Mgb2xkZXIgcmVzaXplIGlvY3RscyB3aXRob3V0CituZWVkaW5nIHRvIGluc3RhbGwgYW4gb2xkIHZlcnNpb24gb2YgcmVzaXplMmZzLCBhbmQgdG8gYWxzbyB0ZXN0IGEKK21vZGVybiByZXNpemUyZnMncyBhYmlsaXR5IHRvIHdvcmsgd2l0aCBvbGRlciBrZXJuZWxzIHdpdGhvdXQgaGF2aW5nCit0byBpbnN0YWxsIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4KKworCitFMmZzcHJvZ3MgMS40Mi42IChTZXB0ZW1iZXIgMjEsIDIwMTIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gbWtlMmZzIGNyZWF0ZXMgZmlsZSBzeXN0ZW1zIHdpdGggbGF6eSBpdGFibGUgaW5pdGlhbGl6YXRpb24sIHRoZQorcHJvZ3Jlc3MgdXBkYXRlcyBmb3Igd3JpdGluZyB0aGUgaW5vZGUgdGFibGUgaGFwcGVucyBzbyBxdWlja2x5IHRoYXQKK29uIGEgc2VyaWFsIGNvbnNvbGUsIHRoZSB0aW1lIHRvIHdyaXRlIHRoZSBwcm9ncmVzcyB1cGRhdGVzIGNhbiBiZSB0aGUKK2JvdHRsZW5lY2suICBTbyBta2UyZnMgd2lsbCBub3cgb25seSB1cGRhdGUgaXRzIHByb2dyZXNzIGluZGljYXRvcnMKK29uY2UgYSBzZWNvbmQuCisKK1Jlc2l6ZTJmcyB3aWxsIHNraXAgaW5pdGlhbGl6aW5nIHRoZSBpbm9kZSB0YWJsZXMgaWYgdGhlIGtlcm5lbAorc3VwcG9ydHMgbGF6eV9pdGFibGVfaW5pdCwgd2hpY2ggc3BlZWRzIHVwIGdyb3dpbmcgb2ZmLWxpbmUgZ3Jvd3RoIG9mCit1bmluaXRfYmcgZmlsZSBzeXN0ZW1zIHNpZ25pZmljYW50bHkuICBSZXNpemUyZnMgd2lsbCBub3cgYWxzbworY29ycmVjdGx5IHNldCB0aGUgaXRhYmxlX3VudXNlZCBmaWVsZCBpbiB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciB0bworc3BlZWQgdXAgdGhlIGZpcnN0IGUyZnNjayBhZnRlciB0aGUgZmlsZSBzeXN0ZW0gaXMgZ3Jvd24uCisKK1Jlc2l6ZTJmcyBoYXMgYmVlbiBmaXhlZCBzbyB0aGF0IG9uLWxpbmUgcmVzaXppbmcgb2YgbWV0YV9iZyBmaWxlCitzeXN0ZW1zIHdvcmsgY29ycmVjdGx5LiAgVGhpcyBpcyBuZWVkZWQgdG8gZ3JvdyBmaWxlIHN5c3RlbSB3aGljaCBhcmUKK2xhcmdlciB0aGFuIDE2VC4KKworUmVzaXplMmZzIHdpbGwgbm93IGNvcnJlY3RseSBoYW5kbGUgcmVzaXppbmcgZmlsZSBzeXN0ZW1zIHRvIDE2VEIgb24KKzMyLWJpdCBmaWxlIHN5c3RlbXMgd2hlbiAiMTZUQiIgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKK0ZpeCBta2UyZnMgc28gdGhhdCBpdCB3aWxsIGJlIGNhcmVmdWwgdG8gc2V0IHRoZSByZXNlcnZlZCBibG9ja3MgcmF0aW8KK2xhcmdlciB0aGFuIDUwJTsgdGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgc21hbGwgZmlsZSBzeXN0ZW1zIGFuZAord2hlbiB0aGUgbGFzdCBibG9jayBncm91cCBpcyBkcm9wcGVkIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCBlbm91Z2gKK2Jsb2NrcyB0byBzdXBwb3J0IHRoZSBtZXRhZGF0YSBibG9ja3MgaW4gdGhlIGxhc3QgYmxvY2sgZ3JvdXAuCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2UgaW4gZGVidWdmcydzIGhlbHAgbWVzc2FnZS4KKworRml4ZWQgYSBwb3RlbnRpYWwgc2VnIGZhdWx0IGluIGUyZnNjayB3aGVuIHRoZXJlIGlzIGFuIEkvTyBlcnJvciB3aGlsZQorcmVhZGluZyB0aGUgc3VwZXJibG9jay4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIElzc3VlcyAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzY3NzQ5NykKKworVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzM1NTkyMTApCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXJlbGF0aXZlLXN5bWxpbmsgd2FzIGJyb2tlbiBzbyB0aGF0IGl0CituZWVkZWQgdG8gYmUgLS1lbmFibGUtc3ltbGluay1yZWxhdGl2ZS1zeW1saW5rcy4gIFdlIHdpbGwgc3VwcG9ydCBib3RoCitmb3IgYXQgbGVhc3QgdHdvIHllYXJzLCBidXQgdGhlbiB0aGUgd29ybmcgY29uZmlndXJlIG9wdGlvbiB3aWxsIGJlCityZW1vdmVkLgorCitGaXhlZCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAxLjQyLjUgc28gdGhlIGxpbmsgb3JkZXIgZm9yCitlMmZzcHJvZ3MnIGxpYnJhcmllcyB3aWxsIGJlIGNvcnJlY3QgZm9yIGJvdGggc3RhdGljIGFuZCBzaGFyZWQKK2xpbmtpbmcuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzM1NTQzNDUpCisKK0FkZCBzdXBwb3J0IGZvciBlMmZzcHJvZ3MgdG8gYmUgY29tcGlsZWQgdXNpbmcgY2xhbmcvTExWTS4KKworRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIG9uIG5vbi1MaW51eCBzeXN0ZW1zOiBhdm9pZCBjb21waWxlIGZhaWx1cmVzCitvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSBtYWxsb2MuaAorCitGaXggZl9tbXAgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIHNvIHRoYXQgZGVidWdmcyBnZXRzIGtpbGxlZCBpZiB0aGUKK3Rlc3QgaXMgaW50ZXJydXB0ZWQuCisKKworCitFMmZzcHJvZ3MgMS40Mi41IChKdWx5IDI5LCAyMDEyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBidWcgd2l0aCBta2UyZnMgd2hlcmUgaWYgdGhlcmUgaXMgb25seSA4IGlub2RlcyBwZXIgYmxvY2sKK2dyb3VwLCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG51bWJlciBvZiB1bmluaXRpYWxpemVkIGlub2RlcyBpbiB0aGUKK2ZpcnN0IGJsb2NrIGdyb3VwIHdvdWxkIGdvIG5lZ2F0aXZlLiAgVGhpcyByZXN1bHRlZCBpbiAibWtlMmZzIC1OIDI1NgorLXQgZXh0NCAvdG1wL2Zvby5pbWcgMjU2bSIgdHJ5aW5nIHRvIHdyaXRlIHNvIG1hbnkgYmxvY2tzIHRoYXQgL3RtcAord291bGQgcnVuIG91dCBvZiBzcGFjZS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMzUyODg5MikKKworRml4ZWQgYSBidWcgaW4gaG93IGUyZnNjayB3b3VsZCB1bmlxdWlmeSBkaXJlY3RvcnkgZW50cnkgbmFtZXMuCisoQWRkcmVzc2VzU291cmNlZm9yZ2UgQnVnOiAjMzU0MDU0NSkKKworUHJldmlvdXNseSwgZTJmc2NrIHdvdWxkIG9ubHkgYWxsb3cgYSBtb3VudGVkIGZpbGUgc3lzdGVtIHRvIGJlCitjaGVja2VkIGlmIGl0IHdhcyB0aGUgcm9vdCBmaWxlIHN5c3RlbSBhbmQgaXQgd2FzIG1vdW50ZWQgcmVhZC1vbmx5LgorTm93IGl0IHdpbGwgYWxsb3cgYW55IGZpbGUgc3lzdGVtIG1vdW50ZWQgcmVhZC1vbmx5IHRvIGJlIGNoZWNrZWQgaWYKK3RoZSAtZiBvcHRpb24gaXMgc3BlY2lmaWVkLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gdGVzdCBob3cgZTJmc2NrCitoYW5kbGVzIGNoZWNraW5nIGZpbGUgc3lzdGVtcyB3aGljaCBhcmUgbW91bnRlZCB3aXRob3V0IGhhdmluZyB0byB0ZXN0CitvbiB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKworRml4ZWQgYSBwcm9ibGVtIGlmIGUyZnNjayB3aGVyZSBpZiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBpcyBtb3VudGVkCityZWFkLW9ubHksIGUyZnNjayB3b3VsZCBub3QgY2xlYXIgYW4gZXJyb3IgaW5kaWNhdGlvbiBpbiB0aGUgam91cm5hbAorc3VwZXJibG9jay4gIENvbWJpbmVkIHdpdGggYSBrZXJuZWwgYnVnLCB0aGlzIHdvdWxkIGNhdXNlIHRoZSBlMmZzY2sKK3RvIGNoZWNrIHRoZSBmaWxlIHN5c3RlbSBhZnRlciBldmVyeSBzaW5nbGUgYm9vdC4KKworVGhlIGU0ZGVmcmFnIHByb2dyYW0gY2FuIG5vdyBoYW5kbGUgZGV2aWNlIHN5bWxpbmtzLCBzdWNoIGFzCisvZGV2L21hcHBlci90ZXN0dmctdGVzdGx2LCBpbnN0ZWFkIG9mIGluc2lzdGluZyBvbiBhIGxlc3MKK2h1bWFuLWZyaWVuZGx5IG5hbWUgc3VjaCBhcyAvZGV2L2RtLTIuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6CisjNzA3MjA5KQorCitGaXhlZCBmaWxlZnJhZyBzbyBpdCB3aWxsIG5vdCBjcmFzaCB3aXRoIGEgc2VnZmF1bHQgb24gZmlsZXMgZnJvbSBhCit2aXJ0dWFsIGZpbGUgc3lzdGVtIHN1Y2ggYXMgL3Byb2MuICAoZS5nLiwgImZpbGVmcmFnCisvcHJvYy9wYXJ0aXRpb25zIikKKworRml4ZWQgZmlsZWZyYWcgc28gdGhhdCBpdCBjb3JyZWN0bHkgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGV4dGVudHMuCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICM4NDA4NDgpCisKK0ZpeGVkIGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gbG9nc2F2ZSB3aGljaCBjb3VsZCBjYXVzZSBpdCB0byBoYW5nLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNjgyNTkyKQorCitGaXhlZCBlMmZzY2sgc28gdGhhdCB0aGUgZmlsZSBzeXN0ZW0gaXMgbWFya2VkIGFzIGNvbnRhaW5pbmcgYW4gZXJyb3IKK2lmIHRoZSB1c2VyIGNob29zZXMgbm90IHRvIGZpeCB0aGUgcXVvdGEgdXNhZ2UgaW5mb3JtYXRpb24uCisKK0ZpeGVkIHR1bmUyZnMgc28gdGhhdCBpdCBjb3JyZWN0bHkgcmVtb3ZlcyB0aGUgcXVvdGEgZmVhdHVyZSB3aGVuIHRoZQorbGFzdCBxdW90YSBpbm9kZSBpcyByZW1vdmVkLgorCitGaXggdHVuZTJmcyBzbyB0aGF0IGFmdGVyIHJlbW92aW5nIGEgcXVvdGEgaW5vZGUsIHRoZSBibG9jayBiaXRtYXAgaXMKK3VwZGF0ZWQ7IG90aGVyd2lzZSwgZTJmc2NrIHdvdWxkIGNvbXBsYWluIGFmdGVyIHJ1bm5pbmcgJ3R1bmUyZnMgLU8KK15xdW90YSA8ZGV2PicuCisKK0ZpeCB0dW5lMmZzIHNvIHRoYXQgd2hlbiBjb252ZXJ0aW5nIGEgZmlsZSBzeXN0ZW0gZnJvbSB1c2luZyBsZWdhY3kKK3F1b3RhIGZpbGVzIHRvIHRoZSBuZXcgcXVvdGEgZmlsZSBzeXN0ZW0gZmVhdHVyZSB3aXRoIGhpZGRlbiBxdW90YQorZmlsZXMsIHRoZSBhY2NvdW50aW5nIGZvciB0aGVzZSBmaWxlcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBzbyB0aGF0CitlMmZzY2sgZG9lc24ndCBjb21wbGFpbi4KKworSW1wcm92ZWQgZTJmc2NrJ3MgdmVyYm9zZSByZXBvcnRpbmcgc3RhdGlzdGljcywgYW5kIGFsbG93IHRoZSBtb3JlCit2ZXJib3NlIHJlcG9ydGluZyB0byBiZSBlbmFibGVkIHZpYSAvZXRjL2UyZnNjay5jb25mLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgSXNzdWVzIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNjc4Mzk1KQorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzY4MDExNCkKKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCBwb3J0YWJpbGl0eSBwcm9ibGVtcyBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiwgSHVyZCBhbmQKK0ZyZWVCc2QpIGNhdXNlZCBieSB0aGUgYXR0ZW1wdGVkIGluY2x1c2lvbiBvZiA8c3lzL3F1b3RhLmg+LgorCitNYWtlIHN1cmUgdGhhdCBzaGFyZWQgbGlicmFyaWVzIGxpbmsgd2l0aCB0aGUgc2hhcmVkIGxpYnJhcmllcyBidWlsdAoraW4gdGhlIGJ1aWxkIHRyZWUsIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBwcm92aWRlZCBsaWJyYXJpZXMuCitQcmV2aW91c2x5LCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIHdlcmUgbGlua2VkIHdpdGggdGhlIHN5c3RlbQorbGlicmFyaWVzIGlmIHByZXNlbnQsIGFuZCBwb3NzaWJseSB1c2luZyBzdGF0aWMgYXJjaGl2ZXMgaW5zdGVhZCBvZgorc2hhcmVkIGxpYnJhcmllcy4gIFRoaXMgd2FzIGFsc28gcHJvYmxlbWF0aWMgc2luY2UgaWYgbGliZXh0MmZzLnNvIGlzCitsaW5rZWQgd2l0aCBhIHN0YXRpYyBsaWJjb21fZXJyLmEgZnJvbSBzeXN0ZW0sIHRoZSBidWlsZCBzeXN0ZW0gd291bGQKK2F0dGVtcHQgdG8gbGluayB3aXRob3V0IC1scHRocmVhZC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzM1NDI1NzIpCisKKworRTJmc3Byb2dzIDEuNDIuNCAoSnVuZSAxMiwgMjAxMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIG1vcmUgNjQtYml0IGJsb2NrIG51bWJlciBidWdzICh3aGljaCBjb3VsZCBlbmQgdXAgY29ycnVwdGluZworZmlsZSBzeXN0ZW1zISkgaW4gZTJmc2NrLCBkZWJ1Z2ZzLCBhbmQgbGliZXh0MmZzLgorCitGaXhlZCBlMmZzY2sncyBoYW5kbGluZyBvZiB0aGUgam91cm5hbCdzIHNfZXJybm8gZmllbGQuICBFMmZzY2sgd2FzCitub3QgcHJvcGVybHkgcHJvcGFnYXRpbmcgdGhlIGpvdXJuYWwncyBzX2Vycm5vIGZpZWxkIHRvIHRoZSBzdXBlcmJsb2NrCitmaWVsZDsgaXQgd2FzIG5vdCBjaGVja2luZyB0aGlzIGZpZWxkIGlmIHRoZSBqb3VybmFsIGhhZCBhbHJlYWR5IGJlZW4KK3JlcGxheWVkLCBhbmQgaWYgdGhlIGpvdXJuYWwgKndhcyogYmVpbmcgcmVwbGF5ZWQsIHRoZSAiZXJyb3IgYml0Igord2Fzbid0IGdldHRpbmcgZmx1c2hlZCBvdXQgdG8gZGlzay4KKworRml4ZWQgYSBmYWxzZSBwb3NpdGl2ZSBjb21wbGFpbnQgYnkgZTJmc2NrIGlmIGFsbCBvZiB0aGUgZXh0ZW50cyBpbgordGhlIGxhc3QgZXh0ZW50IHRyZWUgYmxvY2sgYXJlIHVuaW5pdGFsaXplZCBhbmQgbG9jYXRlZCBhZnRlciB0aGUgZW5kCitvZiB0aGUgZmlsZSBhcyBkZWZpbmVkIGJ5IGlfc2l6ZS4KKworVGhlIGR1bXBlMmZzIHdpbGwgbm93IGRpc3BsYXkgdGhlIGpvdXJuYWwncyBzX2Vycm5vIGZpZWxkIGlmIGl0IGlzCitub24temVybywgYW5kIGl0IHdpbGwgYWxzbyBkaXNwbGF5IHRoZSBqb3VybmFsJ3MgNjQtYml0IGZlYXR1cmUgZmxhZworaWYgcHJlc2VudC4KKworRml4IGUyZnNjayBzbyB0aGF0IGl0IGFsd2F5cyBvcGVucyB0aGUgZGV2aWNlIGZpbGUgaW4gZXhjbHVzaXZlIG1vZGUKK3doZW4gaXQgbWlnaHQgbmVlZCB0byBtb2RpZnkgdGhlIGZpbGUgc3lzdGVtLCBhbmQgbmV2ZXIgaWYgdGhlIC1uCitvcHRpb24gaXMgc3BlY2lmaWVkLiAgKFByZXZpb3VzbHksIHRoZXJlIHdlcmUgYSBmZXcgY29ybmVyIGNhc2VzIHdoZXJlCitpdCBtaWdodCBnZXQgdGhpbmdzIHdyb25nIGluIGVpdGhlciBkaXJlY3Rpb24uKQorCitFMmZzY2sgbm93IGNvcnJlY3RseSB0cnVuY2F0ZXMgb3IgZGVhbGxvY2F0ZXMgZXh0ZW50LW1hcHBlZCBpbm9kZXMgb24KK3RoZSBvcnBoYW4gbGlzdC4gIFRoZSByb290IGNhdXNlIHdhcyBhIGJ1ZyBpbiBsaWJleHQyZnMncyBibG9jaworaXRlcmF0b3Igd2hpY2ggY291bGQgZW5kIHVwIHNraXBwaW5nIGFuIGV4dGVudCB3aGVuIHRoZSBsYXN0IGJsb2NrIGluCithbiBleHRlbnQgaXMgcmVtb3ZlZCwgY2F1c2luZyB0aGUgY3VycmVudCBleHRlbnQgdG8gYmUgcmVtb3ZlZCBmcm9tCit0aGUgZXh0ZW50IHRyZWUuCisKK0UyZnNjayBub3cgY29ycmVjdGx5IHNldHMgdGhlIGdsb2JhbCBmcmVlIGJsb2NrIGFuZCBpbm9kZSBjb3VudHMgd2hlbgordHJ1bmNhdGluZyBvciByZW1vdmluZyBpbm9kZXMgb24gdGhlIG9ycGhhbiBsaXN0IGluIHByZWVuIG1vZGUuCitQcmV2aW91c2x5LCBpdCB3b3VsZCBsZWF2ZSB0aGVzZSB2YWx1ZXMgd291bGQgYmUgc2V0IGluY29ycmVjdGx5LAord2hpY2ggaXMgbGFyZ2VseSBhIGNvc21ldGljIGlzc3VlIHNpbmNlIHRoZSBrZXJuZWwgbm8gbG9uZ2VyIHBheXMKK2F0dGVudGlvbiB0byB0aG9zZSBmaWVsZHMsIGJ1dCBpdCBjYW4gY2F1c2Ugc3B1cmlvdXMgY29tcGxhaW50cyBpbgorc3Vic2VxdWVudCBlMmZzY2sgcnVucy4KKworRml4IGlfYmxvY2tzIGFjY291bnRpbmcgd2hlbiB0aGUgbGliZXh0MmZzIGxpYnJhcnkgbmVlZHMgdG8gYWRkIG9yCityZW1vdmUgYW4gZXh0ZW50IHRyZWUgYmxvY2sgIG9uIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcy4KKworVGhlIGxzYXR0ciBhbmQgY2hhdHRyIHByb2dyYW1zIG5vdyBzdXBwb3J0IHRoZSBOb19DT1cgZmxhZyBmb3IgdGhlCitiZW5lZml0IG9mIGJ0cmZzLgorCitEZWJ1Z2ZzIG5vdyBpbnRlcnByZXRzIGRhdGUgc3RyaW5ncyBvZiB0aGUgZm9ybSBAZGRkIGFzIGRkZCBzZWNvbmRzCithZnRlciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBlcG9jaC4gIFRoaXMgaXMgaGFuZHkgd2hlbiBzZXR0aW5nIGFuIGlub2RlCitudW1iZXIgaW50byB0aGUgZF90aW1lIGZpZWxkIHdoZW4gZGVidWdnaW5nIG9ycGhhbiBsaXN0IGhhbmRsaW5nLgorCitGaXggYSBwcmVjZWRlbmNlIGJ1ZyB3aXRoIGJ1aWx0LWluIHF1b3RhIHN1cHBvcnQgd2hpY2ggbWlnaHQgcmVzdWx0IGluCitlMmZzY2sgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgcXVvdGEgaW5vZGUgZmllbGQgZXZlbiBpZiB0aGUgYnVpbHQtaW4KK3F1b3RhIGZlYXR1cmUgZmxhZyBpcyBub3Qgc2V0LiAgRm9ydHVuYXRlbHksIGluIHByYWN0aWNlIHRoYXQKK3N1cGVyYmxvY2sgZmllbGQgc2hvdWxkIGJlIHplcm8gZm9yIG5vbi1idWlsdC1pbiBxdW90YSBmaWxlIHN5c3RlbXMsCitzbyBpdCdzIHVubGlrZWx5IHRoaXMgYnVnIHdvdWxkIGhhdmUgY2F1c2VkIHByb2JsZW1zLgorCitVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzY3NDQ1MywKKyM2NzQ2OTQpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgY2FuIG5vdyBydW4gdGhlIGludGVncmF0aW9uIHRlc3RzIGluIHRoZQordGVzdHMgZGlyZWN0b3J5IGluIHBhcmFsbGVsLCB2aWEgIm1ha2UgLWpOIGNoZWNrIi4KKworQWRkIG5ldyB0ZXN0LCBmX3plcm9fZXh0ZW50X2xlbmd0aCB3aGljaCB0ZXN0cyBlMmZzY2sncyBoYW5kbGluZyBvZgordGhlIGNhc2Ugd2hlcmUgYWxsIG9mIHRoZSBleHRlbnRzIGluIHRoZSBsYXN0IGV4dGVudCB0cmVlIGJsb2NrIGFyZQordW5pbml0aWFsaXplZCBleHRlbnRzIGFmdGVyIGlfc2l6ZS4KKworQWRkIGEgbmV3IHRlc3QsIGZfam5sX2Vycm5vLCB3aGljaCBjaGVja3MgaGFuZGxpbmcgb2YgYW4gZXJyb3IKK2luZGljYXRpb24gc2V0IGluIHRoZSBqb3VybmFsIHN1cGVyYmxvY2suCisKK0ZpeCB0aGUgdGVzdCBmX2pubF82NGJpdCBzbyB0aGF0IGl0IHByb3Blcmx5IGNoZWNrcyBlMmZzY2sncyBoYW5kbGluZworb2YgYSA2NC1iaXQgam91cm5hbC4KKworQWRkIHR3byB0ZXN0cywgZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUgYW5kIGZfb3JwaGFuX2V4dGVudF9pbm9kZSB3aGljaAordGVzdHMgZTJmc2NrJ3MgaGFuZGxpbmcgb2Ygb3JwaGFuIGlub2RlcyBpbiBwcmVlbiBtb2RlLCBhbmQgdHJ1bmNhdGlvbgorb2YgZXh0ZW50IGlub2RlcyBvbiB0aGUgb3JwaGFuIGxpc3QuCisKK0ZpeGVkIG1vcmUgT1MgWCBwb3J0YWJpbGl0eSBpc3N1ZXMuCisKKworRTJmc3Byb2dzIDEuNDIuMyAoTWF5IDE0LCAyMDEyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggYSBidWcgaW4gdGhlIFVuaXggSS9PIG1hbmFnZXIgd2hpY2ggY291bGQgY2F1c2UgY29ycnVwdGlvbiBvZiBmaWxlCitzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDE2VEIgd2hlbiBlMmZzcHJvZ3MgaXMgY29tcGlsZWQgaW4gMzItYml0IG1vZGUKKyhpLmUuLCB3aGVuIHVuc2lnbmVkIGxvbmcgaXMgMzItYml0cykuICBBbHNvIGZpeCBhIGJ1ZyB3aGljaCBjYXVzZWQKK2R1bXBlMmZzIHRvIGluY29ycmVjdGx5IGRpc3BsYXkgYmxvY2sgbnVtYmVycyA+IDMyLWJpdHMuCisKK0ltcHJvdmUgdGhlIHN1cHBvcnQgZm9yIGludGVncmF0ZWQgcXVvdGEgZmlsZXMgKHdoZXJlIHF1b3RhIGlzIGEgZmlyc3QKK2NsYXNzIHN1cHBvcnRlZCBmZWF0dXJlIHVzaW5nIGhpZGRlbiBmaWxlcyBpbiB0aGUgZXh0NCBmaWxlIHN5c3RlbSkuCitQcmV2aW91c2x5IHRoZSBxdW90YSBmaWxlIHdhcyBnZXR0aW5nIHJld3JpdHRlbiBldmVuIHdoZW4gaXQgd2FzIG5vdAorbmVjZXNzYXJ5LCBhbmQgZTJmc2NrIHdvdWxkIGVycm9uZW91c2x5IHRyeSB0byBoaWRlIHF1b3RhIGZpbGVzIHdoaWNoCit3ZXJlIGFscmVhZHkgaGlkZGVuLgorCitRdWlldCBjb21wbGFpbnRzIGluIGUyZnNjayB3aGVuIHRoZSB0b3RhbCBmcmVlIGJsb2NrcyBvciBpbm9kZXMgYXJlCitpbmNvcnJlY3QgaW4gdGhlIHN1cGVyYmxvY2sgYWZ0ZXIgYW4gc3lzdGVtIGNyYXNoLCBzaW5jZSB3ZSBkb24ndAordXBkYXRlIG5vciBkZXBlbmQgb24gdGhlIHN1cGVyYmxvY2sgc3VtbWFyaWVzIGF0IGVhY2ggY29tbWl0IGJvdW5kYXJ5LgorCitGaXhlZCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAxLjQyLjIgd2hpY2ggd291bGQgY2F1c2UgYXBwbGljYXRpb25zCitvdXRzaWRlIG9mIGUyZnNwcm9ncyB3aGljaCBkaWQgbm90IHBhc3MgdGhlIEVYVDJfRkxBR182NEJJVCAoYW5kIHNvCit3b3VsZCB3ZXJlIHN0aWxsIHVzaW5nIHRoZSBsZWdhY3kgMzItYml0IGJpdG1hcHMpIHRvIGNyYXNoLiAgVGhpcyB3YXMKK2R1ZSB0byBtaXNzaW5nIDMyLWJpdCBjb21wYXQgY29kZSBpbiBzaWRlIHRoZSBmdW5jdGlvbgorZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JtYXAoKS4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYToKKyM4MDg0MjEpCisgICAgCitGaXggYSBidWcgd2hpY2ggd291bGQgY2F1c2UgbWtlMmZzIHRvIGZhaWwgY3JlYXRpbmcgdGhlIGpvdXJuYWwgaWYKKy9ldGMvbXRhYiBhbmQgL3Byb2MvbW91bnRzIGFyZSBtaXNzaW5nLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMzUwOTM5OCkKKyAgICAKK1VwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMuCisKK1VwZGF0ZSBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgR2VybWFuLCBQb2xpc2gsIFN3ZWVkaXNoLCBhbmQgVmlldG5hbWVzZQordHJhbnNsYXRpb25zCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBpc3N1ZXMuCisKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlIHRoZSBub25zZW5zaWNhbGx5IHdyb25nIHR5cGVzIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgdGhlCitpbmxpbmUgZnVuY3Rpb24gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19ibG9ja19iaXRtYXAyKCkuICBUaGlzIHdhcworY2F1c2VkIGJ5IGEgY3V0IGFuZCBwYXN0ZSBlcnJvcjsgZm9ydHVuYXRlbHkgbm8gY29kZSBpbiBlMmZzcHJvZ3MgdXNlZAordGhpcyBpbmxpbmUgZnVuY3Rpb24sIGFuZCB0aGVyZSBhcmUgYW55IHVzZXJzIG9mIHRoaXMgZnVuY3Rpb25zCitvdXRzaWRlIG9mIGUyZnNwcm9ncy4KKworQWRkIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2hpY2ggaGF2ZSB2YWxsb2MoKSwgYnV0IHdoaWNoIGRvIGhhdmUKK3Bvc2l4X21lbWFsaWduKCkgbm9yIG1lbWFsaWduKCkgKHN1Y2ggYXMgTWFjT1MgMTAuNSkuCisKK1JlZmFjdG9yIGFuZCBjbGVhbiB1cCB0aGUgYWxsb2NhdGlvbiBvZiBhbGlnbmVkIGJ1ZmZlcnMgZm9yIERpcmVjdCBJL08KK3N1cHBvcnQuICBQcmV2aW91c2x5IHNvbWUgYWxsb2NhdGlvbnMgd2VyZSByZXF1ZXN0aW5nIGEgZ3JlYXRlcgorYWxpZ25tZW50IGZhY3RvciB0aGF0IHdoYXQgd2FzIHN0cmljdGx5IG5lY2Vzc2FyeS4gIEFsc28gb3B0aW1pemUKK3JlYWRpbmcgYW5kIHdyaXRpbmcgYml0bWFwcyB1c2luZyBEaXJlY3QgSS9PIHdoZW4gdGhlIHNpemUgb2YgdGhlCitiaXRtYXAgZGlkIG5vdCBmdWxseSBjb3ZlciB0aGUgZmlsZSBzeXN0ZW0gYmxvY2tzaXplLgorCitSZXNlcnZlIHRoZSBjb2RlcG9pbnRzIGZvciB0aGUgSU5DT01QQVQgZmVhdHVyZXMgTEFSR0VEQVRBIGFuZAorSU5MSU5FREFUQS4KKworSW1wcm92ZWQgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBieSBhZGRpbmcgc29tZSBuZXcgaW50ZWdyYXRpb24KK3Rlc3RzIChmX2pubF8zMmJpdCwgZl9qbmxfNjRiaXQpIHdoaWNoIGRldGVjdCBicmVha2FnZSBvZiB0aGUgb24tZGlzaworamJkMiBmb3JtYXQsIGFzIHdlbGwgYXMgZl9lb2ZibG9ja3Mgd2hpY2ggdGVzdHMgdGhlIG5ldyBoYW5kbGluZyBvZgordW5pbml0aWFsaXplZCBhbmQgaW5pdGlhbGl6ZWQgYmxvY2tzIGJleW9uZCBpX3NpemUuICBBbHNvIGFkZCBhIG5ldwordW5pdCB0ZXN0IHdoaWNoIHZlcmlmaWVzIDMyLWJpdCBiaXRtYXBzIHN1cHBvcnQgYW5kIHRoZSBuZXcKK2ZpbmRfZmlyc3RfemVybyBwcmltaXRpdmVzLgorCitBZGQgYSBmZXcgZGVwZW5kZW5jaWVzIHRvIGZpeCBwYXJhbGxlbCAobWFrZSAtaikgYnVpbGRzLgorCitSZW1vdmVkIGJhc2gnaXNtcyB3aGljaCB3ZXJlIGJyZWFraW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgb24KK3N5c3RlbXMgd2hlcmUgL2Jpbi9zaCBpcyBub3QgYmFzaC4KKworVGhlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBoYXZlIGJlZW4gdXBkYXRlZCB0byB0aGUgMjAxMi0wMi0xMAordmVyc2lvbi4KKyAgICAKK0ZpeCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gY2F1c2VkIGJ5IGFzc3VtaW5nIHRoZSBwcmVzZW50IG9mIG1udGVudC5oCittZWFucyB0aGF0IHNldG1udGVudCgpIGV4aXN0cy4gIEluc3RlYWQsIGV4cGxpY2l0bHkgdGVzdCBmb3IgdGhpcyBpbgordGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisKK0lmIHRoZSBzeXMvc2lnbmFsLmggaGVhZGVyIGZpbGUgZG9lcyBub3QgZXhpc3QsIGRvbid0IHRyeSB0byBpbmNsdWRlCitpdCwgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLgorCitBZGQgc3VwcG9ydCBmb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGdldHB3dWlkX3IoKQorICAgIAorVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHN1cHBvcnRzIGEgbmV3IG9wdGlvbiwKKy0tZW5hYmxlLXJlbGF0aXZlLXN5bWxpbmtzLCB3aGljaCB3aWxsIGluc3RhbGwgcmVsYXRpdmUgc3ltbGlua3MgZm9yCit0aGUgRUxGIHNoYXJlZCBsaWJyYXJ5IGZpbGVzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMzNTIwNzY3KS4KKyAgICAKK1doZW4gYnVpbGRpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMgbWFrZSBzdXJlIHRoZSBMREZMQUdTIHZhcmlhYmxlIGlzCitwYXNzZWQgdG8gdGhlIGxpbmtlci4gIEZpeGluZyB0aGlzIGFsbG93cywgZm9yIGV4YW1wbGUsIGUyZnNwcm9ncyB0bworYmUgYnVpbHQgaW4gMzItYml0IG1vZGUgb24gTWFjIE9TIFggTGlvbiAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzoKKyMzNTE3MjcyKQorICAgIAorRml4IGdjYyAtV2FsbCBuaXRwaWNrcworCisKK0UyZnNwcm9ncyAxLjQyLjIgKE1hcmNoIDI3LCAyMDEyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSByZXNpemUyZnMgcHJvZ3JhbSB1c2VzIG11Y2ggbGVzcyBDUFUgYW5kIGlzIG11Y2ggZmFzdGVyIGZvciB2ZXJ5CitsYXJnZSBmaWxlIHN5c3RlbXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2NjMyMzcpCisKK1RoZSBzZXRpIGFuZCBmcmVlaSBjb21tYW5kcyBpbiBkZWJ1Z2ZzIGNhbiBub3cgdGFrZSBhbiBvcHRpb25hbCBsZW5ndGgKK2FyZ3VtZW50IHRvIHNldCBhbmQgY2xlYXIgYSBjb250aWd1b3VzIHJhbmdlIG9mIGlub2Rlcy4KKworRTJmc2NrIHdpbGwgbm93IG1ha2UgZXhwbGljaXQgY2hlY2tzIGZvciB0aGUgRU9GQkxPQ0tTX0ZMLCBzaW5jZSB3ZQorcGxhbiB0byByZW1vdmUgc3VwcG9ydCBmb3IgaXQgZnJvbSB0aGUga2VybmVsIGZpbGUgc3lzdGVtIGRyaXZlci4gIEl0CityZWFsbHkgd2Fzbid0IHZlcnkgdXNlZnVsIGFuZCB3YXMgY2F1c2luZyBtb3JlIHByb2JsZW1zIHRoYW4gaXQKK3NvbHZlcy4gIFNpbmNlIGUyZnNjayB3aWxsIGNvbXBsYWluIGlmIGlub2RlcyB0aGF0IHNob3VsZCBoYXZlCitFT0ZCTE9DS1NfRkwgZG8gbm90IGhhdmUgdGhlIGZsYWcgc2V0LCB3ZSBhcmUgZ29pbmcgdG8gcmVtb3ZlIHRoaXMKK2NoZWNrIGZyb20gZTJmc3Byb2dzIGZpcnN0LCBhbmQgdGhlbiBvbmx5IHJlbW92ZSB0aGUgZmxhZyBmcm9tIHRoZQora2VybmVsIG11Y2ggbGF0ZXIuCisKK1RoZSBta2UyZnMgcHJvZ3JhbSBjYW4gbm93IHVzZSBkaXJlY3QgSS9PIHZpYSAibWtlMmZzIC1EIi4gIFRoaXMgd2lsbAorc2xvdyBkb3duIHRoZSBta2UyZnMsIGJ1dCBpdCBtYWtlcyBpdCBtb3JlIHBvbGl0ZSBvbiBhIGxvYWRlZCBzZXJ2ZXIKK2J5IGxpbWl0aW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgZ2V0cyBkaXJ0aWVkIGJ5IG1rZTJmcyB3aGVuIGl0CitpcyB1c2luZyBidWZmZXJlZCBJL08uCisKK0UyZnNjayB3YXMgbmVlZGxlc3NseSBjbG9zaW5nIGFuZCByZS1vcGVuaW5nIHRoZSBmaWxlIHN5c3RlbSBhcyBhIHNpZGUKK2VmZmVjdCBvZiBhZGRpbmcgTXVsdGlwbGUgTW91bnQgUHJvdGVjdGlvbiAoTU1QKS4gIFRoaXMgaXNuJ3QKK25lY2Vzc2FyeSBmb3Igbm9uLU1NUCBmaWxlIHN5c3RlbXMsIHNvIGRyb3AgaXQuCisKK1ByaW50IGVycm9ycyByZXR1cm5lZCBieSBleHQyZnNfb3BlbjIoKSBhbmQgZXh0MmZzX2NoZWNrX2Rlc2MoKSBzbyB3ZQorY2FuIG1vcmUgZWFzaWx5IGRpYWdub3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGNhdXNlZCBieQoraW5zdWZmaWNpZW50IG1lbW9yeS4gIEUyZnNjayB3aWxsIG5vdyBhYm9ydCBpZiB0aGVyZSBhcmUgbWVtb3J5CithbGxvY2F0aW9uIGZhaWx1cmVzIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGlzIGluaXRpYWxseSBvcGVuZWQgYW5kCitkdXJpbmcgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOgorIzYyMDgxODMpCisKK0lmIHRoZXJlIGFyZSBpbmNvcnJlY3QgYmxvY2sgZ3JvdXAgY2hlY2tzLCBlMmZzY2sgd2lsbCBub3cgcmVwb3J0IHRoZQoraW5jb3JyZWN0IGFuZCBjb3JyZWN0ZWQgY2hlY2tzdW0gdmFsdWVzLgorCitUaGUgZTJmc2NrIHByb2dhbSBjYW4gbm93IHdyaXRlIGxvZyBmaWxlcyBjb250YWluaW5nIHRoZSBkZXRhaWxzIG9mCit0aGUgcHJvYmxlbXMgdGhhdCB3ZXJlIGZvdW5kIGFuZCBmaXhlZCBkaXJlY3RseSwgdmlhIGNvbmZpZ3VyYXRpb24KK3BhcmFtZXRlcnMgaW4gL2V0Yy9lMmZzY2suY29uZi4KKworQWRkZWQgdGhlIGFiaWxpdHkgdG8gbGltaXQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyByZXBvcnRlZCBieSBlMmZzY2sKK2ZvciBhIGdpdmVuIHByb2JsZW0gdHlwZS4gIFRoaXMgYXZvaWRzIGEgcG90ZW50aWFsIGJvdHRsZW5lY2sgaWYgdGhlcmUKK2lzIGEgc2VyaWFsIGNvbnNvbGUgd2hpY2ggY2FuIGNhdXNlIGEgYm9vdCBzZXF1ZW5jZSB0byB0YWtlIGEgbG9uZwordGltZSBpZiBlMmZzY2sgbmVlZHMgdG8gcmVwb3J0IG1hbnksIG1hbnkgZmlsZSBzeXN0ZW0gZXJyb3JzLgorCitUaGUgZHVtcGUyZnMsIGRlYnVnZnMsIGFuZCB0dW5lMmZzIG5vdyB1c2UgcmJ0cmVlIGJpdG1hcHMsIHdoaWNoIGNhdXNlCit0aGVtIHRvIHVzZSBtdWNoIGxlc3MgbWVtb3J5IGZvciBsYXJnZSBmaWxlIHN5c3RlbXMuCisKK1RoZSBkdW1wZTJmcyBwcm9ncmFtIHdpbGwgbm93IHByaW50IHRoZSBleHBlY3RlZCBibG9jayBncm91cCBjaGVja3N1bQoraWYgaXQgaXMgaW5jb3JyZWN0LiAgVGhpcyBoZWxwcyB0byBkaWFnbm9zZSBwcm9ibGVtcyBjYXVzZWQgYnkKK2luY29ycmVjdCBibG9jayBncm91cCBjaGVja3N1bXMuCisKK0UyZnNjayBub3cgY2hlY2tzIGZvciBleHRlbnRzIHdpdGggYSB6ZXJvIGxlbmd0aCwgc2luY2UgdGhlIGtlcm5lbAord2lsbCBvb3BzIGlmIGl0IGNvbWVzIGFjY3Jvc3Mgc3VjaCBhIGNvcnJ1cHRlZCBkYXRhIHN0cnVjdHVyZS4gIChTZWUKK2h0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI4NTkpCisKK0UyZnNjayBoYXMgYSBudW1iZXIgb2YgYnVncyByZWxhdGluZyB0byBkaXNjYXJkIHRoYXQgaGF2ZSBiZWVuIGZpeGVkLgorKDEpIEZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGUyZnNjayB0byBkaXNjYXJkIHBvcnRpb25zIG9mIHRoZQoraW5vZGUgdGFibGUgd2hpY2ggd2VyZSBhY3R1YWxseSBpbiB1c2UuICAoMikgRTJmc2NrIHdpbGwgbm93IGF2b2lkCit1c2luZyBkaXNjYXJkIGlmIHRoZSBibG9jayBkZXZpY2UgZG9lc24ndCB6ZXJvIGRhdGEgb24gZGlzY2FyZCwgc2luY2UKK290aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zIGlmIHRoZSBmaWxlIHN5c3RlbSBnZXRzIGNvcnJ1cHRlZAoraW4gdGhlIGZ1dHVyZS4gICgzKSBFMmZzY2sgd2lsbCBub3cgYXZvaWQgdXNpbmcgZGlzY2FyZCB3aGVuIGl0IGlzIHJ1bgoraW4gcmVhZC1vbmx5IG1vZGUuICAoNCkgRml4ZWQgYSBidWcgd2hpY2ggY2F1c2VkIGUyZnNjayB0byBub3QgaXNzdWUKK2Rpc2NhcmRzIGluIHRoZSBsYXN0IGJsb2NrIGdyb3VwLgorCitFMmZzY2sncyBDUFUgdXRpbGl6YXRpb24gaW4gcGFzcyA1IGhhcyBiZWVuIG9wdGltaXplZCwgd2hpY2ggd2lsbAorc3BlZWQgdXAgZTJmc2NrIHNsaWdodGx5LgorCitFMmltYWdlIHdpbGwgbm93IHNraXAgY29weWluZyB1bmluaXRpYWxpemVkIGJpdG1hcCBhbmQgaW5vZGUgdGFibGUKK2Jsb2Nrcy4KKworRml4ZWQgbWtlMmZzIC1TIHNvIGl0IGRvZXMgbm90IGNvcnJ1cHQgdGhlIGZpcnN0IGJsb2NrIGdyb3VwJ3MKK2luZm9ybWF0aW9uLgorCitFMmZzY2sgd2lsbCBub3cgY2hlY2sgdGhlIG5ldyBzeXNmcyBpbnRlcmZhY2UgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZQordXNpbmcgdGhlIGJhdHRlcnkgb3IgQUMgbWFpbnMuICAoQWRkcmVzc2VzIFNvdXJjZUZvcmdlIEJ1ZzogIzM0MzkyNzcpCisKK1VwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2NjU0MjcpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBpc3N1ZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2NjU4ODUpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHZhcmlvdXMgcG9ydGFiaWxpdHkgaXNzdWVzIGZvciBub24tTGludXggc3lzdGVtcywgcGFydGljdWxhcmx5CitNYWNPUyBYLCBhcyB3ZWxsIGFzIExpbnV4IHN5c3RlbXMgcnVubmluZyB3aXRoIHRoZSBqdXN0LXJlbGVhc2VkIGdsaWJjCisyLjE1LgorCitGaXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gZXh0MmZzX2Nsb3NlKCkgaWYgdGhlIGZpbGUgc3lzdGVtIHdpdGgKK3VuaW5pdF9iZyBpcyBvcGVuZWQgcmVhZC9vbmx5IHdpdGggYSBiYWNrdXAgc3VwZXJibG9jay4gIChBZGRyZXNzZXMKK1NvdXJjZUZvcmdlIEJ1ZzogIzM0NDQzNTEpCisKK0ZpeGVkIGFuIGludmFsaWQgcmV0dXJuIGluIGEgbm9uLXZvaWQgZnVuY3Rpb24gaW4gdGhlIHF1b3RhIGNvZGUuCisoQWRkcmVzc2VzIFNvdXJjZUZvcmdlIEJ1ZzogIzM0Njg0MjMpCisKK0ZpeGVkIHRoZSBkZWJpYW4gcnVsZXMgZmlsZSBzbyB0aGF0IHRoZSBjYWxscyB0byBkcGtnLWJ1aWxkZmxhZ3Mgd29ya3MKK3doZW4gdGhlIHNoZWxsIGlzIGRhc2guCisKK1RoZSBkZWJpYW4gcGFja2FnZSBidWlsZCBub3cgdXNlcyBWPTEgc28gdGhhdCB0aGVyZSBpcyBtb3JlCitpbmZvcm1hdGlvbiBhYm91dCBwb3RlbnRpYWwgYnVpbGQgZmFpbHVyZXMgaW4gZGViaWFuIGJ1aWxkZCBsb2dzLgorCitJZiB0aGUgdW5pbml0IGZsYWdzIGdldCBjbGVhcmVkIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzCitleHQyZnNfbmV3X2lub2RlKCkgb3IgZXh0MmZzX25ld19ibG9jazIoKSwgd2Ugbm93IG1ha2Ugc3VyZSB0aGUKK3N1cGVyYmxvY2sgaXMgbWFya2VkIGRpcnR5IGFuZCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bSBpcwordXBkYXRlZCBpZiBuZWNlc3NhcnkuCisKK1RoZSBkZWJpYW4gcnVsZXMgZmlsZSB3aWxsIG5vdyB0cnkgdG8gbG9hZCBkZWJpYW4vcnVsZXMuY3VzdG9tIG9mIGl0CitleGlzdHMuICBUaGlzIGZsaWUgY2FuIHNraXAgdmFyaW91cyBidWlsZHMgZm9yIHNwZWVkIHJlYXNvbnMgaWYgdGhlcmUKK2lzIG5vIG5lZWQgZm9yIHRoZSBlMmZzY2stc3RhdGljIG9yIHVkZWIgcGFja2FnZXMuICBBdmFpbGFibGUKK2N1c3RvbWl6YXRpb25zIGluIHRoZSBydWxlcyBmaWxlIGluY2x1ZGVzIFNLSVBfU1RBVElDPXllcywKK1NLSVBfQkY9eWVzLCBhbmQgU0tJUF9ESUVUTElCQz15ZXMuCisKK0luIGFkZGl0aW9uLCBpZiB0aGUgZmlsZSBtaXNjL21rZTJmcy5jb25mLmN1c3RvbS5pbiBleGlzdHMgaW4gdGhlCitzb3VyY2UgdHJlZSwgaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIG1pc2MuY29uZiBmaWxlIGluCit0aGUgdXBzdHJlYW0gc291cmNlcy4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciBEZWJpYW4tZGVyaXZlZCBzeXN0ZW1zCit0byBkaXN0cmlidXRlIGEgY3VzdG9tIG1rZTJmcy5jb25mIGZpbGUgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQKK21lcmdlIGlzc3VlcyBpZiBmdXR1cmUgdmVyc2lvbnMgb2YgZTJmc3Byb2dzIG1ha2VzIGNoYW5nZXMgaW4gdGhlCit1cHN0cmVhbSBkZWZhdWx0IHZlcnNpb24gb2YgbWtlMmZzLmNvbmYuCisKKworRTJmc3Byb2dzIDEuNDIuMSAoRmVicnVhcnkgMTcsIDIwMTIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbWtlMmZzIGFuZCBlMmZzY2sgbm93IHVzZSBzaWduaWZpY2FudGx5IGxlc3MgbWVtb3J5IHdoZW4gY3JlYXRpbmcKK29yIGNoZWNraW5nIHZlcnkgbGFyZ2UgZmlsZSBzeXN0ZW1zLiAgVGhpcyB3YXMgZW5hYmxlZCBieSBhZGRpbmcKK2V4dGVudC1iYXNlZCBiaXRtYXBzIHdoaWNoIGFyZSBzdG9yZWQgdXNpbmcgYSByZWQtYmxvY2sgdHJlZSwgc2luY2UKK2Jsb2NrIGFuZCBpbm9kZSBhbGxvY2F0aW9ucyB0ZW5kIHRvIGJlIGNvbnRpZ3VvdXMuCisKK1RoZSBjb21tYW5kIG1rZTJmcyAtUyBpcyB1c2VkIGFzIGEgbGFzdCBkaXRjaCByZWNvdmVyeSBjb21tYW5kIHRvCit3cml0ZSBuZXcgc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGJ1dCBfbm90XyB0byBkZXN0cm95Cit0aGUgaW5vZGUgdGFibGUgaW4gaG9wZXMgb2YgcmVjb3ZlcmluZyBmcm9tIGEgYmFkbHkgY29ycnVwdGVkIGZpbGUKK3N5c3RlbS4gIFNvIGlmIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBpcyBlbmFibGVkLCBta2UyZnMgLVMgd2lsbCBub3cKK3NldCB0aGUgdW51c2VkIGlub2RlcyBjb3VudCBmaWVsZCB0byB6ZXJvLiAgT3RoZXJ3aXNlLCBlMmZzY2sgLWZ5CithZnRlciB1c2luZyBta2UyZnMgLVMgd291bGQgbGVhdmUgdGhlIGZpbGUgc3lzdGVtIGNvbXBsZXRlbHkgZW1wdHkuCisKK1NpbmNlIG1rZTJmcyByZWNvZ25pemVzIG1rZTNmcyBpbiBhcmd2WzBdIHRvIG1lYW4gIm1rZnMuZXh0MyIsIGFsc28KK2hvbm9yICJta2U0ZnMiIHRvIHdvcmsgdGhlIHNhbWUgYXMgIm1rZTJmcy5leHQ0Iiwgc2luY2UgUkhFTDUgaGFzCitpbnN0YWxsZWQgYW4gbWtlMmZzIGJpbmFyeSB1c2luZyB0aGF0IG5hbWUuCisKK1RoZSB1c2FnZSBhbmQgaGVscCBtZXNzYWdlcyBmb3IgdGhlIC1HLCAtdCBhbmQgLVQgb3B0aW9ucyBpbiBta2UyZnMKK2hhdmUgYmVlbiBmaXhlZC4KKworSWYgZTJmc2NrIG5lZWRzIHRvIHVzZSB0aGUgYmFja3VwIGdyb3VwIGRlc2NyaXB0b3JzLCB0aGUKK2V4dDJmc19vcGVuMigpIGZ1bmN0aW9uIGNsZWFycyB0aGUgVU5JTklUIGJpdHMgdG8gZW5zdXJlIGFsbCBvZiB0aGUKK2lub2RlcyBpbiB0aGUgZmlsZSBzeXN0ZW1zIGdldCBzY2FubmVkLiAgSG93ZXZlciwgdGhlIGNvZGUgd2hpY2ggcmVzZXQKK3RoZSBVTklOSVQgZmxhZ3MgZGlkIG5vdCBhbHNvIHJlY2FsY3VsYXRlIHRoZSBjaGVja3N1bSwgd2hpY2ggcHJvZHVjZWQKK21hbnkgc3B1cmlvdXMgKGFuZCBzY2FyeSkgZTJmc2NrIG1lc3NhZ2VzLiAgVGhpcyBoYXMgYmVlbiBmaXhlZCBieQorcmVzZXR0aW5nIGNoZWtzdW1zIHdoZW4gdGhlIFVOSU5JVCBiaXRzIGFyZSBjbGVhcmVkLgorCitSZWxheCBhIGNoZWNrIGluIGUyZnNjayB3aGljaCByZXF1aXJlZCB0aGF0IHRoZSBibG9jayBiaXRtYXAgdG8gYmUKK2luaXRpYWxpemVkIHdoZW4gdGhlIGlub2RlIGJpdG1hcCBpcyBpbiB1c2UuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8KK2V2ZW50dWFsbHkgZWxpbWluYXRlIGNvZGUgZnJvbSB0aGUga2VybmVsIHdoaWNoIGZvcmNpYmx5IGluaXRpYWxpemVkCit0aGUgYmxvY2sgYml0bWFwIHdoZW4gdGhlIGlub2RlIGJpdG1hcCBpcyBmaXJzdCB1c2VkLCByZXF1aXJpbmcgYW4KK2V4dHJhIGpvdXJuYWwgY3JlZGl0IGFuZCBkaXNrIHdyaXRlLiAgKEFkZHJlc3NlcyBHb29nbGUgQnVnOiAjNTk0NDQ0MCkKKyAgICAKK01ha2Ugc3VyZSByZGVidWdmcyAod2hpY2ggbWF5IGJlIGluc3RhbGxlZCBzZXR1aWQgb3Igc2V0Z2lkIGRpc2spIGRvZXMKK25vdCBob25vciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgZXVpZCAhPSB1aWQgb3IgZWdpZCAhPSBnaWQuCisKK0RlYnVnZnMncyBuY2hlY2sgY29tbWFuZCBoYXMgYmVlbiBvcHRpbWl6ZWQgYW5kIG5vdyBpcyBtdWNoIG1vcmUKK3JvYnVzdCB3aXRoIGZhY2VkIHdpdGggY29ycnVwdGVkIGZpbGUgc3lzdGVtcy4gIFRoZSBuY2hlY2sgY29tbWFuZAorYWxzbyBub3cgaGFzIGEgLWMgb3B0aW9uIHdoaWNoIHdpbGwgdmVyaWZ5IHRoZSBmaWxlIHR5cGUgaW5mb3JtYXRpb24KK2luIHRoZSBkaXJlY3RvcnkgZW50cnkgdG8gc2VlIGlmIG1hdGNoZXMgdGhlIGlub2RlJ3MgbW9kZSBiaXRzLiAgVGhpcworaXMgZXh0cmVtZWx5IHVzZWZ1bCB3aGVuIHRyeWluZyB0byB1c2UgZGVidWdzZnMgdG8gZGV0ZXJtaW5lIHdoaWNoCitwYXJ0cyBvZiB0aGUgZmlsZSBzeXN0ZW0gbWV0YWRhdGEgY2FuIGJlIHRydXN0ZWQuCisKK0UyaW1hZ2Ugd2lsbCB0cnkgdG8gdXNlIGZ0cnVuY2F0ZTY0KCkgdG8gc2V0IHRoZSBpX3NpemUgZm9yIHJhdworaW1hZ2VzLCBpbnN0ZWFkIG9mIHdyaXRpbmcgYSBzaW5nbGUgbnVsbCBieXRlLiAgVGhpcyBhdm9pZCBhbGxvY2F0aW5nCithbiBleHRyYSBibG9jayB0byB0aGUgcmF3IGltYWdlLCBmb3IgdGhvc2UgZmlsZSBzeXN0ZW1zIGFuZC9vcgorb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoaXMuICAoTGludXggZG9lcy4pICBJbiBhZGRpdGlvbiwgZml4CithIGxvZ2ljIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgZmlsZSB0byBub3QgYmUgcHJvcGVybHkgZXh0ZW5kZWQgaWYgdGhlCitzaXplIG9mIHRoZSBsYXN0IGhvbGUgd2FzIGV4YWN0bHkgYW4gbXVsdGlwbGUgb2YgYSBtZWdhYnl0ZS4KKworRml4ZWQgYSBidWcgaW4gcmVzaXplMmZzIHdoZXJlIGZvciAxayBhbmQgMmsgZmlsZSBzeXN0ZW1zLCB3aGVyZQorc19maXJzdF9kYXRhX2Jsb2NrIGlzIG5vbi16ZXJvLCB0aGlzIHdhc24ndCB0YWtlbiBpbnRvIGFjY291bnQgd2hlbgorY2FsY3VsYXRlIHRoZSBtaW5pbXVtIGZpbGUgc3lzdGVtIHNpemUgZm9yIHVzZSB3aXRoIHRoZSAtTSBvcHRpb24uCisKK0ZpeGVkIHRoZSBiYWRibG9ja3MgcHJvZ3JhbSB0byBob25vciB0aGUgLXMgZmxhZyB3aGVuIGluIHJlYWQtb25seSAtdAorbW9kZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNjQ2NjI5KQorCitVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIFBvbGlzaCwgYW5kIFN3ZWVkaXNoIHRyYW5zbGF0aW9uIGZyb20gdGhlCitUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBQYWNrYWdpbmcgaXNzdWVzIHNvIHRoYXQgZHBrZy1idWlsZGZsYWdzIGlzIHVzZWQKK2lmIHByZXNlbnQsIHdoaWNoIGFsbG93cyBlMmZzcHJvZ3MgdG8gYmUgYnVpbHQgd2l0aCBzZWN1cml0eSBoYXJkZW5pbmcKK2ZsYWdzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzY1NDQ1NykKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGEgYnVnIGluIGV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoKSB3aGVuIHVzZWQgZm9yIDMyLWJpdCBiaXRtYXBzLgorVGhpcyB3YXMgb25seSBhbiBpc3N1ZSBmb3IgcHJvZ3JhbXMgY29tcGlsZWQgYWdhaW5zdCBlMmZzcHJvZ3MgMS40MQordGhhdCBtYW5pcHVsYXRlIGJpdG1hcHMgZGlyZWN0bHkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1Z3M6CisjMzQ1MTQ4NikKKworVGhlIGxpYmV4dDJmcyBsaWJyYXJ5IG5vdyB1c2VzIHN5c2NvbmYoKSB0byBmZXRjaCB0aGUgcGFnZSBzaXplLCBpbnN0ZWFkCitvZiB0aGUgZGVwcmVjYXRlZCBnZXRwYWdlc2l6ZSgpLgorCitUaGUgZXh0MmZzX2dldF9wYXRobmFtZSgpIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcGFydGlhbCBwYXRoIGlmIGFuIGEKK2RpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcyBub3QgYSBkaXJlY3RvcnksIGRpc3BsYXlpbmcgaXQgYXMgYW4gaW5vZGUKK251bWJlciBpbiBhbmdsZSBicmFja2V0cyBpbnN0ZWFkIG9mIGdpdmluZyB1cCBhbmQgZGlzcGxheWluZyBhbiBlcnJvci4KK1RoaXMgaXMgbXVjaCBtb3JlIGhlbHBmdWwgd2hlbiBhIHVzZXIgaXMgdHJ5aW5nIHRvIGRlYnVnIGEgY29ycnVwdGVkCitmaWxlIHN5c3RlbS4KKworQ29kZXBvaW50cyBmb3IgdGhlIFJPX0NPTVBBVF9SRVBMSUNBIGZlYXR1cmUgaGFzIGJlZW4gcmVzZXJ2ZWQuCisKK0FkZGVkIGEgbmV3IGxpYnJhcnkgZnVuY3Rpb24sIGV4dDJmc19maWxlX2dldF9pbm9kZV9udW0oKSwgZm9yIHVzZSBieQorZnVzZTJmcy4KKworRml4ZWQgYSBidWcgaW4gZXh0MmZzX2ZpbGVfc2V0X3NpemUyKCkgc28gdGhhdCB3aGVuIGl0IGlzIHRydW5jYXRpbmcgYQorZmlsZSwgaXQgYWN0dWFsbHkgd29ya3MuCisKK1RoZSBibG9jayBpdGVyYXRvciBub3cgcHJvcGVybHkgaG9ub3JzIHRoZSBCTE9DS19BQk9SVCBmbGFnIGZvcgorZXh0ZW50LWJhc2VkIGZsYWdzLiAgUHJldmlvdXNseSwgaXQgZGlkbid0LCB3aGljaCBnZW5lcmFsbHkgbWFkZSBjb2RlCitiZSBsZXNzIGVmZmljaWVudCwgYnV0IGl0IGNvdWxkIGNhdXNlIGJ1Z3MgaW4gZXh0MmZzX2xpbmsoKSwgZm9yCitleGFtcGxlLCBieSBjYXVzaW5nIGl0IHRvIGluc2VydCBtdWx0aXBsZSBkaXJlY3RvcnkgZW50cmllcy4KKworRml4ZWQgYW4gKGhhcm1sZXNzIG90aGVyIHRoYW4gY2F1c2luZyBhIGNvbXBpbGVyIHdhcm5pbmcpIHVzZSBvZiBhbgordW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBlMmZzY2sncyBNTVAgY29kZS4KKworCitFMmZzcHJvZ3MgMS40MiAoTm92ZW1iZXIgMjksIDIwMTEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBvZiBlMmZzcHJvZ3MgaGFzIHN1cHBvcnQgZm9yIGZpbGUgc3lzdGVtcyA+IDE2VEIuICBPbmxpbmUKK3Jlc2l6ZSByZXF1aXJlcyBrZXJuZWwgc3VwcG9ydCB3aGljaCB3aWxsIGhvcGVmdWxseSBiZSBpbiBMaW51eAordmVyc2lvbiAzLjIuICBPZmZsaW5lIHN1cHBvcnQgaXMgbm90IHlldCBhdmFpbGFibGUgZm9yID4gMTZUQiBmaWxlCitzeXN0ZW1zLCBidXQgd2lsbCBiZSBjb21pbmcuCisKK1RoaXMgcmVsZWFzZSBvZiBlMmZzcHJvZ3MgaGFzIHN1cHBvcnQgZm9yIGNsdXN0ZXJlZCBhbGxvY2F0aW9uLiAgVGhpcworcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGJsb2NrIChub3cgY2x1c3RlcikgYml0bWFwcyBieSBhbGxvY2F0aW5nIGFuZAorZGVhbGxvY2F0aW5nIHNwYWNlIGluIGNvbnRpZ3VvdXMgcG93ZXItb2YtMiBjb2xsZWN0aW9ucyBvZiBibG9ja3MsCit3aGljaCBhcmUgY2FsbGVkIGNsdXN0ZXJlZC4gIFRoaXMgaXMgYSBmaWxlIHN5c3RlbSBsZXZlbCBmZWF0dXJlLAorY2FsbGVkICdiaWdhbGxvYycsIHdoaWNoIG11c3QgYmUgZW5hYmxlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcworaW5pdGlhbGx5IGZvcm1hdHRlZC4gIEl0IGlzIG5vdCBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIG9sZGVyCitrZXJuZWxzLgorCitBZGRlZCBzdXBwb3J0IGZvciB0aGUgTXVsdGktTW91bnQgUHJvdGVjdGlvbiAoTU1QKSBmZWF0dXJlLgorCitFMmZzY2sgbW9yZSBlZmZpY2llbnRseSB1c2VzIHNjcmF0Y2ggZmlsZXMgZm9yIHJlYWxseSBiaWcgZmlsZQorc3lzdGVtcy4gIChUaGlzIGlzIGEgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSB0dXJuZWQgb24gZXhwbGljaXRseTsgc2VlCitbc2NyYXRjaF9maWxlc10gaW4gdGhlIGUyZnNjay5jb25mIG1hbiBwYWdlLikKKworRml4IGEgYnVnIGluIGUyZnNjayB3aGVyZSBpZiB0aGUgZnJlZSBibG9ja3MgYW5kIGlub2RlcyBjb3VudHMgYXJlCitpbmNvcnJlY3QsIGUyZnNjayB3b3VsZCBmaXggdGhlbSB3aXRob3V0IHByaW50aW5nIGFuIGVycm9yIG1lc3NhZ2UuCitUaGlzIHdvdWxkIGNhdXNlIGEgIioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqIiBtZXNzYWdlIHdpdGhvdXQKK2FueSBleHBsYW5hdGlvbiBvZiB3aGF0IHdhcyBmaXhlZC4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIGF0dGVtcHQgdG8gY2xvbmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGluCitwYXNzMWIgaGFuZGxpbmcgaWYgdGhlIGZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5kZWQKK2F0dHJpYnV0ZXMuCisKK0UyZnNjayB3aWxsIGJlIG1vcmUgY2FyZWZ1bCBhY2NpZGVudGFsbHkgYXNraW5nIHRoZSB1c2VyIHRvIGNvbnRpbnVlCitpZiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCwgc28gdGhhdCBhbiBlc2NhcGUgc2VxdWVuY2Ugd29uJ3QgY2F1c2UKK2EgZmFsc2UgcG9zaXRpdmUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM2MTk4NTkpCisKK0UyZnNjayBub3cgdXNlcyBsZXNzIGNwdSB0aW1lIGluIHBhc3MgNSB3aGVuIGxhcmdlIHBvcnRpb25zIG9mIHRoZQorYml0bWFwcyBhcmUgdW5pbml0aWFsaXplZC4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIHNlZ2F1bHQgd2hlbiBhIGNvcnJ1cHRlZCBmaWxlIHN5c3RlbSBoYXMgYSBiYWQKK2V4dGVudCwgYW5kIHJlbW92aW5nIGl0IGxlYWRzIHRvIGEgYmxvY2sgbmVlZGluZyB0byBiZSBkZWFsbG9jYXRlZC4KKyhBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnOiAjMjk3MTgwMCkKKworRTJmc2NrIHdpbGwgY2F0Y2ggdGVybWluYXRpb24gc2lnbmFscyAoc2VnZmF1bHRzLCBidXMgZXJyb3JzLCBzaWdmcGUpCithbmQgcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgcG90ZW50aWFsCitwcm9ibGVtcy4KKworRTJmc2NrIHdpbGwgY2hlY2sgdG8gc2VlIGlmIHRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW5zYW5lLCBhbmQgd2lsbAorc2tpcCB0cnlpbmcgdG8gdXNlIGlmIGl0IGNlcnRhaW4gZmllbGRzIHdoaWNoIHNob3VsZCBiZSB6ZXJvIGxvb2sKK25vbi16ZXJvLiAgVGhpcyBpcyB0byBhdm9pZCBhIGNvcnJ1cHRlZCBiYWQgYmxvY2sgaW5vZGUgY2F1c2luZyBlMmZzY2sKK3RvIGdldCBjb25mdXNlZCBhbmQgZG8gbW9yZSBoYXJtIHRoYW4gZ29vZC4KKworSWYgZTJmc2NrIG1vZGlmaWVzIGNlcnRhaW4gc3VwZXJibG9jayBmaWVsZHMgd2hpY2ggdGhlIGtlcm5lbCBkb2Vzbid0Citsb29rIGF0LCBpdCB3aWxsIG5vdyBtYXJrIHRoZSBzdXBlcmJsb2NrIGFzIGRpcnR5IHdpdGhvdXQgbWFya2luZyB0aGUKK2ZpbGUgc3lzdGVtIGFzIGNoYW5nZWQuICBUaGlzIGF2b2lkcyBzaWduYWxsaW5nIHRoZSBpbml0IHNjcmlwdHMgdGhhdAorYSByZWJvb3QgaXMgbmVjZXNzYXJ5LCBzaW5jZSB0aGUga2VybmVsIGlzbid0IGdvaW5nIHRvIGxvb2sgYXQgdGhvc2UKK2ZpZWxkcywgc28gaXQgd29uJ3QgY2FyZSBpZiB0aGV5IGhhdmUgYmVlbiBjaGFuZ2VkLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgbGliZXh0MmZzIGxpYnJhcnkgKGluIHRoZSBiaW5hcnkgc2VhcmNoIHJvdXRpbmUgb2YKK3RoZSBpY291bnQgYWJzdHJhY3Rpb24pIHRoYXQgY291bGQgKHZlcnksIHZlcnkgcmFyZWx5KSBjYXVzZSBlMmZzY2sgdG8KK2RpZSBpbiB0aGUgbWlkZGxlIG9mIHBhc3MgMSBvciBwYXNzIDIgcHJvY2Vzc2luZy4KKworRTJmc2NrIHdpbGwgbm90IHRyeSB0byBkbyBhIGRpc2NhcmQgb3BlcmF0aW9uIGlmIHRoZSAtbiBvcHRpb24gd2FzCitzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworRTJmc2NrIG5vdyBzdXBwb3J0cyBhbiBleHRlbmRlZCAiZGlzY2FyZCIgb3B0aW9uIHdoaWNoIHdpbGwgY2F1c2UKK2UyZnNjayB0byBhdHRlbXB0IGRpc2NhcmQgYWxsIHVudXNlZCBibG9ja3MgYWZ0ZXIgYSBmdWxsLCBzdWNjZXNzZnVsCitmaWxlIHN5c3RlbSBjaGVjay4KKworRTJmc2NrIHdpbGwgY2hlY2sgZm9yIHRoZSBiYWQgYmxvY2sgaW5vZGUgdG8gbWFrZSBzdXJlIGl0IGxvb2tzIHNhbmUKK2JlZm9yZSB0cnVzdGluZyBpdCwgdG8gYXZvaWQgY2F1c2luZyBtb3JlIGhhcm0gdGhhbiBnb29kIHRvIHRoZSBmaWxlCitzeXN0ZW0uCisKK0UyZnNjayBub3cgcmV0dXJucyBhZGRpdGlvbmFsIHN0YXR1cyBiaXRzIGluIGl0cyBleGl0IGNvZGUgaWYgaXQKK2Fib3J0cyBlYXJseSBpbiB0aGUgZTJmc2NrIHJ1bi4KKworRTJmc2NrIG5vdyBjb3JyZWN0bHkgY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBmaWxlIHNpemUgaW4gdGhlIGNhc2Ugb2YKK3RoZSBodWdlX2ZpbGUgZmlsZSBzeXN0ZW0gZmVhdHVyZSBlbmFibGVkIHdpdGhvdXQgZXh0ZW50cy4KKworVGhlIG1rZTJmcyBhbmQgZTJmc2NrIHByb2dyYW1zIG5vdyB0cmllcyB0byB1c2UgdGhlIHB1bmNoIGhvbGUgY29tbWFuZAorYXMgYSAiZGlzY2FyZCIgd2hlbiBvcGVyYXRpbmcgb24gbm9ybWFsIGZpbGVzLgorCitUaGUgZTJpbWFnZSBwcm9ncmFtIG5vdyBzdXBwb3J0cyB0aGUgcWNvdzIgZm9ybWF0LCB3aGljaCBpcyBhIG1vcmUKK2VmZmljaWVudCB3YXkgb2YgY2FwdHVyaW5nIGZpbGUgc3lzdGVtIGR1bXBzLgorCitNa2UyZnMgbm93IHN1cHBvcnRzIHRoZSBbZGV2aWNlc10gc3RhbnphIGluIG1rZTJmcy5jb25mIHdoaWNoIGFsbG93cworcGVyLWRldmljZSBkZWZhdWx0cyB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworTWtlMmZzIG5vdyBzdXBwb3J0cyB0aGUgcmVzZXJ2ZWRfcmF0aW8gcmVsYXRpb24gaW4gdGhlIFtkZWZhdWx0c10gYW5kCitbZnNfdHlwZXNdIHNlY3Rpb24gaW4gbWtlMmZzLmNvbmYuCisKK01rZTJmcyBub3cgY3JlYXRlcyBleHRlbnQtbWFwcGVkIGRpcmVjdG9yaWVzIGZvciB0aGUgcm9vdCBhbmQKK2xvc3QrZm91bmQgZGlyZWN0b3JpZXMuCisKK01rZTJmcyB3aWxsIHNraXAgemVybydpbmcgdGhlIGpvdXJuYWwgaWYgdGhlIGV4dGVuZGVkIG9wdGlvbgorImxhenlfam91cm5hbF9pbml0IiBpcyBzcGVjaWZpZWQuICBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUsIGJ1dCBpdAorZG9lcyBhZGQgYSBzbWFsbCBhbW91bnQgb2YgcmlzayBpZiB0aGUgc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZQoram91cm5hbCBpcyBvdmVyd3JpdHRlbiBlbnRpcmVseSBvbmNlLiAgSXQgaXMgZXBzZWNpYWxseSB1c2VmdWwgZm9yCit0ZXN0aW5nLgorCitNa2UyZnMgd2lsbCBub3cgY3JlYXRlIGZpbGUgc3lzdGVtcyB0aGF0IGVuYWJsZSB1c2VyIG5hbWVzcGFjZQorZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgd2l0aCB0aW1lLSBhbmQgbW91bnQgY291bnQtYmFzZWQgZmlsZQorc3lzdGVtIGNoZWNrcyBkaXNhYmxlZC4KKworTWtlMmZzIHdpbGwgbm90IHNldCBhIHN0cmlkZSBvciBzdHJpcCBzaXplIG9mIG9uZSBibG9jayBiYXNlZCBvbiBibG9jaworZGV2aWNlIGF0dHJpYnV0ZXMgb2J0YWluZWQgZnJvbSBzeXNmcy4KKworTWtlMmZzIG5vdyBkaXNwbGF5cyBhIHByb2dyZXNzIHJlcG9ydCBkdXJpbmcgdGhlIGRpc2NhcmQgcHJvY2Vzcy4KKworTWtlMmZzIG5vdyBoYW5kbGVzIGV4dHJlbWUgZmlsZSBzeXN0ZW0gcGFyYW1ldGVycyBjb3JyZWN0bHkgd2hpY2gKK3ByZXZpb3VzbHkgY2F1c2VkIHRoZSBpbm9kZXMgcGVyIGdyb3VwIHRvIGRyb3AgYmVsb3cgOCwgbGVhZGluZyB0byBhCitzZWdmYXVsdC4gIChUaGUgaW5vZGVzIHBlciBncm91cCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCwgYnV0IHRoZSBjb2RlCitkaWRuJ3QgY29ycmVjdGx5IGRlYWwgd2l0aCBhbiBpbm9kZXMgcGVyIGdyb3VwIGNvdW50IGxlc3MgdGhhbiA4LikKKworTWtlMmZzIGFuZCB0dW5lMmZzIHByZXZpb3VzbHkgd291bGQgZ2l2ZSBhbiBlcnJvciBpZiB0aGUgdXNlciB0cmllZAorc2V0dGluZyB0aGUgc3RyaWRlIGFuZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVycyB0byB6ZXJvOyBidXQgdGhpcyBpcworbmVjZXNzYXJ5IHRvIGRpc2FibGUgdGhlIHN0cmlkZSBhbmQgc3RyaXBlLXdpZHRoIHNldHRpbmdzLiAgU28gYWxsb3cKK3NldHRpbmcgdGhlc2Ugc3VwZXJibG9jayBmaWVsZHMgdG8gemVyby4gIChBZGRyZXNzZXMgR29vZ2xlIEJ1ZzoKKyM0OTg4NTU3KQorCitNa2UyZnMgbm93IGdpdmVzIGEgd2FybmluZyBpZiB0aGUgYXV0by1kZXRlY3RlZCBibG9jayBzaXplIGV4Y2VlZHMgdGhlCitzeXN0ZW0ncyBwYWdlIHNpemUuCisKK0lmIHRoZSBlbmFibGVfcGVyaW9kaWNfZnNjayBvcHRpb24gaXMgZmFsc2UgaW4gL2V0Yy9ta2UyZnMuY29uZiAod2hpY2gKK2lzIHRoZSBkZWZhdWx0KSwgbWtlMmZzIHdpbGwgbm93IHNldCB0aGUgc19tYXhfbW50X2NvdW50IHN1cGVyYmxvY2sKK2ZpZWxkIHRvIC0xLCBpbnN0ZWFkIG9mIDAuICBLZXJuZWxzIG9sZGVyIHRoZW4gMy4wIHdpbGwgcHJpbnQgYQorc3B1cmlvdXMgbWVzc2FnZSBvbiBlYWNoIG1vdW50IHRoZW4gdGhleSBzZWUgYSBzX21heF9tbnRfY291bnQgc2V0IHRvCiswLCB3aGljaCB3aWxsIGFubm95IHVzZXJzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNjMyNjM3KQorICAgIAorVGhlIGRlZmF1bHQgbWtlMmZzLmNvbmYgbm93IGhhcyBlbnRyaWVzIGZvciAiYmlnIiBhbmQgImh1Z2UiLCB3aGljaAorYXJlIG5lZWRlZCBmb3IgdmVyeSBiaWcgZmlsZSBzeXN0ZW1zLgorCitUaGUgcmVzaXplMmZzIHByb2dyYW0gbm93IGhhcyBzdXBwb3J0IGZvciBhIG5ldyBvbmxpbmUgcmVzaXplIGlvY3RsCit0aGF0IGNhbiBzdXBwb3J0IGZpbGUgc3lzdGVtcyA+IDE2VEIsIG9uY2UgaXQgYXJyaXZlcyBpbiB2My54IGtlcm5lbHMuCisKK0ZpeGVkIGJ1ZyB3aGljaCBjYXVzZWQgcmVzaXplMmZzIHRvIGZhaWwgd2hlbiBzaHJpbmtpbmcgYW4gZW1wdHkgZmlsZQorc3lzdGVtIGRvd24gdG8gaXRzIG1pbmltYWwgc2l6ZS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnICMzNDA0MDUxKQorCitGaXhlZCB0dW5lMmZzJ3MgbW91bnQgb3B0aW9ucyBwYXJzaW5nLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNjQxNjY3KQorCitBbGxvdyB0dW5lMmZzIHRvIHJlbW92ZSBleHRlcm5hbCBqb3VybmFscyBpZiB0aGUgZGV2aWNlIGNhbiBub3QgYmUKK2ZvdW5kLgorCitEZWJ1Z2ZzJ3MgaWNoZWNrIHdpbGwgbm93IGNvcnJlY3RseSBmaW5kIGlub2RlcyB3aGljaCB1c2UgdGhlCitzZWFyY2hlZC1mb3IgYmxvY2sgYXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrLgorCitEZWJ1Z2ZzIG5vdyBoYXMgYSBuZXcgInB1bmNoIiBjb21tYW5kIHdoaWNoIHJlbW92ZSBibG9ja3MgZnJvbSB0aGUKK21pZGRsZSBvZiBhbiBpbm9kZS4KKworRGVidWdmcyBub3cgaGFzIGEgbmV3ICJlMmZyZWVmcmFnIiBjb21tYW5kIHdoaWNoIGFuYWx5emVzIHRoZSBmcmVlCitzcGFjZSBmcmFnbWVudGF0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSwgdXNpbmcgdGhlIHNhbWUgY29kZSBhcyB0aGUKK2UyZnJlZWZyYWcgcHJvZ3JhbS4KKworRGVidWdmcyBub3cgaGFzIGEgImZpbGVmcmFnIiBjb21tYW5kIHdoaWNoIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0CithIGZpbGUncyBmcmFnbWVudGF0aW9uLgorCitBZGQgc3VwcG9ydCB0byBidWlsZCBhIG1ldGFkYXRhLW9ubHksIHJlYWQtb25seSwgc3RyaXBwZWQtZG93biB2ZXJzaW9uCitvZiBkZWJ1Z2ZzIGNhbGxlZCByZGVidWdmcy4KKworRml4ZWQgYSBwb3RlbnRpYWwgc3RhY2sgb3ZlcnJ1biBidWcgaW4gZGVidWdmcy4KKworVGhlIGJhZGJsb2NrcyBwcm9ncmFtIG5vdyBjb3JyZWN0bHkgcmVjb3ZlcnMgZnJvbSBJL08gZXJyb3JzIHdoZW4KK2RpcmVjdCBJL08gaXMgYmVpbmcgdXNlZC4gIFRoZSBiYWRibG9ja3MgY29tbWFuZCBub3cgYWxzbyBzdXBwb3J0cyBhCistQiBvcHRpb24gd2hpY2ggZm9yY2VzIHRoZSB1c2Ugb2YgYnVmZmVyZWQgSS9PLCBhbmQgdGhlIC12IG9wdGlvbiB3aWxsCitwcm92aWRlIGEgbW9yZSBkZXRhaWxlZCBicmVha2Rvd24gb2YgcmVhZCwgd3JpdGUsIGFuZCBmYWlsZWQKK2NvbXBhcmlzb24gZXJyb3JzLgorCitBZGRlZCBlNGRlZnJhZyB0b29sIHdoaWNoIHVzZXMgdGhlIEVYVDRfSU9DX01PVkVfRVhUIGlvY3RsLgorCitBZGRlZCBzdXBwb3J0IGZvciBqb3VybmFscyBsYXJnZXIgdGhhbiAyR0IuCisKK1N1cHBvcnQgdXNpbmcgYm90aCBoYXJkIGxpbmtzIGFuZCBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgZTJmc3Byb2dzLgorCitBZGQgb3ZlcmZsb3cgY2hlY2tpbmcgdG8gdHVuZTJmcyAtaSdzIGZzY2sgaW50ZXJ2YWwsIHdoaWNoIG11c3QgZml0IGluCithIDMyLWJpdCBmaWVsZC4KKworVGhlIGRlYnVnZnMgY29tbWFuZCBub3cgaGFzIGEgbmV3ICdibG9ja3MnIGNvbW1hbmQgd2hpY2ggcHJpbnRzIG91dAorZGF0YSBibG9ja3Mgb2YgYSBwYXJ0aWN1bGFyIGlub2RlIGluIGEgZm9ybWF0IHdoaWNoIGlzIHVzZWZ1bCBmb3IKK3NjcmlwdGluZy4KKworRmlsZWZyYWcgd2lsbCByZXBvcnQgMCBleHRlbnRzIGNvcnJlY3RseSBpbiB2ZXJib3NlIG1vZGUuICAoQWRkcmVzc2VzCitSZWRIYXQgQnVnemlsbGE6ICM2NTMyMzQpCisKK0ZpbGVmcmFnIGhhcyBiZWVuIGZpeGVkIHNvIGl0cyAtdiByZXBvcnQgcHJpbnRzIHRoZSBjb3JyZWN0IGV4cGVjdGVkCitibG9jayBudW1iZXIgKHByZXZpb3VzbHkgdGhlcmUgaGFkIGJlZW4gYW4gb2ZmLWJ5LW9uZSBlcnJvcikuICBJbgorYWRkaXRpb24sIGl0IHdpbGwgbm93IGRpc3BsYXkgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGV4dGVudHMgd2hlbiAtdgoraXMgbm90IHNwZWNpZmllZC4gIFRoaXMgbWFrZXMgaXQgY29uc2lzdGVudCB3aXRoIHRoZSBudW1iZXIgb2YgZXh0ZW50cworcHJpbnRlZCB3aGVuIHRoZSAtdiBvcHRpb24gd2FzIHNwZWNpZmllZC4gIEluIGFkZGl0aW9uLCB0aGUgbnVtYmVyIG9mCitjb250aWd1b3VzIGV4dGVudHMgaXMgZmFyIG1vcmUgaW50ZXJlc3RpbmcvdXNlZnVsIHRoYW4gdGhlIG51bWJlciBvZgorcGh5c2ljYWwgZXh0ZW50cyBmb3IgdmVyeSBsYXJnZSBmaWxlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM2MzE0OTgsICM2NDQ3OTIpCisgICAgCitMb2dzYXZlJ3MgdXNhZ2UgbWVzc2FnZSBoYXMgYmVlbiBmaXhlZC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM2MTk3ODgpCisKK0F2b2lkIGFuIGluZmluaXRlIGxvb3AgaW4gZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlKCkgaWYgdGhlcmUgYXJlCitzeW1saW5rIGxvb3BzIGluIC9kZXYgY2F1c2VkIGJ5IGEgYnVnZ3kgdWRldi4KKworQWRkZWQgYSB1c2VmdWwgImZhbGxvY2F0ZSIgcHJvZ3JhbSB0byB0aGUgY29udHJpYiBkaXJlY3RvcnkuCisKK0ZpeGVkIGFuIEFCSSBjb21wYXRpYmlsaXR5IHByb2JsZW0gaW4gbGliZXh0MmZzIHdoaWNoIGJyb2tlIHRoZSBkdW1wCitwcm9ncmFtLiAgQWxzbyBhZGRlZCBiYWNrIHNvbWUgbWFjcm9zIHdoaWNoIGR1bXAgbmVlZGVkIHNvIGl0IGNvdWxkCitjb21waWxlIGFnYWluc3QgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGV4dDJfZnMuaCAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNjM2NDE4KQorCitGaXhlZCBwYXJzaW5nIG9mIE1OVE9QVF8gb3B0aW9ucyBmb3IgdHVuZTJmcyBhbmQgZGVidWdmcyAoQWRkcmVzc2VzCitEZWJpYW4gQnVnOiAjNjQxNjY3KQorCitBZGRlZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IGZvciBsaWJjb21fZXJyIGVycm9yIHRhYmxlIHN0cmluZ3MuCisKK0ZpeGVkIHZhcmlvdXMgc3BlbGxpbmcgbWlzdGFrZXMgZm91bmQgaW4gdmFyaW91cyBvdXRwdXQgc3RyaW5ncyBmb3VuZAorYnkgSTE4TiB0cmFuc2xhdG9ycy4KKworVXBkYXRlIHRyYW5zbGF0aW9uczogRnJlbmNoLCBDaGluZXNlLCBHZXJtYW55LCBJbmRvbmVzaWFuLCBTd2VkaXNoLAorVmlldG5hbWVzZSwgUG9saXNoLCBEdXRjaCwgQ3plY2guICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNTIwOTg1LAorIzYyMDY1OSkKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gUGFja2FnaW5nIGlzc3Vlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6CisjNjE0NjYyLCAjNjMyMTY5LCAjNjQxODM4LCAjNjI3NTM1LCAjNjI5MzU1KQorCitVcGRhdGVkL2NsYXJpZmllZCBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNjM5NDExLAorIzY0MjE5MywgIzYzNDg4MykKKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworSW5pdGlhbCBzdXBwb3J0IGZvciBxdW90YSBhcyBhbiBpbnRlZ3JhdGVkIGZlYXR1cmUsIHdoZXJlIHRoZSBxdW90YQorZmlsZXMgYXJlIGhpZGRlbiBzeXN0ZW0gZmlsZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBtYWludGFpbmVkIGJ5CitlMmZzY2sgaXMgcHJlc2VudCwgYWx0aG91Z2ggZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEl0IG11c3QgYmUgZW5hYmxlZAorYnkgdXNpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtcXVvdGEuCisKK1Jlc2VydmVkIHRoZSBvbi1kaXNrIGZpZWxkcyBmb3IgdGhlIG1ldGFkYXRhIGNoZWNrc3VtIGFuZCBzbmFwc2hvdAorZmVhdHVyZXMsIHdoaWNoIGFyZSBjdXJyZW50bHkgaW4gZGV2ZWxvcG1lbnQuCisKK1RoZSBleHQyZnMgbGlicmFyeSBub3cgaGFzIHRoZSBuZXcgZnVuY3Rpb25zIGV4dDJmc19wdW5jaCgpLAorZXh0MmZzX2dldF9tZW16ZXJvKCkgYW5kIGV4dDJmc19maWxlX2dldF9pbm9kZSgpLgorCitUaGUgZXh0MmZzIGxpYnJhcnkgbm93IGhhcyBzdXBwb3J0IGZvciBjYWxjdWxhdGluZyB0aGUgY3JjMzJjIGNoZWNrc3VtCisodmlhIHRoZSBuZXcgZnVuY3Rpb25zIGV4dDJmc19jcmMzMmNfYmUgYW5kIGV4dDJmc19jcmMzMmNfbGUpLgorCitUaGUgSS9PIG1hbmFnZXIgbm93IHN1cHBvcnRzIHRoZSBkaXNjYXJkIG9wZXJhdGlvbi4KKworUmVzZXJ2ZWQgZmlsZSBzeXN0ZW0gY29kZSBwb2ludHMgZm9yIG5ldyAxc3QgY2xhc3MgcXVvdGEgZmVhdHVyZS4KKworU2hvcnRlbmVkIHRoZSBjb21waWxhdGlvbiBsaW5lcyBieSBtb3ZpbmcgdGhlIGF1dG9jb25mIGRlZmluZXMgdG8KK2EgY29uZmlnLmggaGVhZGVyIGZpbGUuCisKK0ZpeGVkIGEgcG90ZW50aWFsIGZyZWUgb2YgYW4gdW5pdGlhbGl6ZWQgcG9pbnRlciBpbgorZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZSgpLgorCitGaXhlZCBtaXNjZWxsYW5lb3VzIGdjYyAtV2FsbCBhbmQgY292ZXJpdHkgd2FybmluZ3MuCisKK0ZpeGVkIHBvcnRhYmlsaXR5IGlzc3VlcyBmb3IgTWFjIE9TIFgsIEh1cmQsIGFuZCBGcmVlQlNELgorCitGaXhlZCBhIGJ1aWxkIGZhaWx1cmUgd2hlbiBPTUlUX0NPTV9FUlIgaXMgZGVmaW5lZC4KKworSW1wcm92ZWQgZXJyb3IgY2hlY2tpbmcgYW5kIGZpeGVkIG1lbW9yeSBsZWFrcyBjYXVzZWQgYnkgZXJyb3IgcmV0dXJuCitwYXRocy4KKworQWRkIGV4dDJmc19mbHVzaDIoKSBhbmQgZXh0MmZzX2Nsb3NlMigpIHdoaWNoIHRha2VzIGEgZmxhZyB0byBhbGxvdwordGhlIGZzeW5jKCkgdG8gYmUgc2tpcHBlZC4KKworQWRkZWQgYSB0ZXN0IGZvciBleHRlbnQtbWFwcGVkIGpvdXJuYWxzIGJ5IG1rZTJmcyBhbmQgdHVuZTJmcy4KKworQWRkZWQgYSB0ZXN0IGZvciBjcmVhdGluZyBhIGxhcmdlIChvdmVyIDRHQikgam91cm5hbCB1c2luZyBta2UyZnMuCisKK0FkZGVkIGEgdGVzdCB0byBtYWtlIHN1cmUgdGhlIGlub2RlIHNpemUgcmVtYWlucyBjb25zdGFudC4KKworVGhlIHJlZ3Jlc3Npb24gdGVzdCBzY3JpcHQgbm93IHByaW50cyB0aGUgbGlzdCBvZiB3aGljaCB0ZXN0cyBmYWlsZWQuCisKK1RoZSByZWdyZXNzaW9uIHRlc3Qgc3lzdGVtIG5vdyB1c2VzIC90bXAgZm9yIGl0cyBzY3JhdGNoIGZpbGVzLCB3aGljaAoraXMgb2Z0ZW4gYSB0bXBmcyBtb3VudGVkIGZpbGUgc3lzdGVtIGFuZCBoZW5jZSBtdWNoIGZhc3Rlci4KKworVGhlIGlfZTJpbWFnZSB0ZXN0IHdhcyBmaXhlZCBzbyBpdCB3b3JrcyB3aXRoIHZhbGdyaW5kLgorCitUZXN0cyB0aGF0IHJlbHkgb24gZGVidWdmcyBhcmUgbm93IHNraXBwZWQgaWYgZGVidWdmcyB3YXNuJ3QgYnVpbHQuCisKK0ZpeGVkIHRoZSBkZXBlbmRlbmNpZXMgZm9yICJtYWtlIGNoZWNrIiBzbyBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzCithcmUgYnVpbHQgYmVmb3JlIHJ1bm5pbmcgdGhlIGdyZXNzaW9uIHRlc3RzLgorCitBIGxpbmsgdG8gY29tX2Vyci5oIGlzIGluc3RhbGxlZCBpbiAkKGluY2x1ZGVkaXIpIGR1cmluZyBhICJtYWtlIGluc3RhbGwiLgorCitUaGUgcG8vKi5nbW8gZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVidWlsdCBpZiB0aGV5IGFyZSBtaXNzaW5nIG9yCitvdXQgb2YgZGF0ZS4gIFRoaXMgaGVscHMgb3V0IERlYmlhbiBwYWNrYWdpbmcuCisKK0FsbG93IGV4dDJmc19nZXRfbWVtYWxpZ24oKSB0byBjb21waWxlIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlCitwb3NpeF9tZW1hbGlnbigpLgorCitGaXhlZCBhIG5hbWVzcGFjZSBsZWFrIGluIGxpYmV4dDJmcyAodGRiX251bGwpLgorCisKK0UyZnNwcm9ncyAxLjQxLjE0IChEZWNlbWJlciAyMiwgMjAxMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IHNwdXJpb3VzIGNvbXBsYWludCBpbiBta2UyZnMgd2hlcmUgaXQgd291bGQgY29tcGxhaW4gaWYgdGhlIGZpbGUKK3N5c3RlbSB0eXBlICJkZWZhdWx0IiBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZi4KKworVGhlIHJlc2l6ZTJmcyBwcm9ncmFtIHdpbGwgbm8gbG9uZ2VyIGNsZWFyIHRoZSByZXNpemVfaW5vZGUgZmVhdHVyZQord2hlbiB0aGUgbnVtYmVyIHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIHJlYWNoZXMgemVyby4gIFRoaXMKK2FsbG93cyBmb3Igc3Vic2VxdWVudCBzaHJpbmtzIG9mIHRoZSBmaWxlIHN5c3RlbSB0byB3b3JrIGNsZWFubHkgZm9yCitmbGV4X2JnIGZpbGUgc3lzdGVtcy4KKworVGhlIHJlc2l6ZTJmcyBwcm9ncmFtIG5vdyBoYW5kbGVzIGRldmljZXMgd2hpY2ggYXJlIGV4YWN0bHkgMTZUOworcHJldmlvdXNseSBpdCB3b3VsZCBnaXZlIGFuIGVycm9yIHNheWluZyB0aGF0IHRoZSBmaWxlIHN5c3RlbSB3YXMgdG9vCitiaWcuCisKK0UyZnNjayAoYW5kIHRoZSBsaWJleHQyZnMgbGlicmFyeSkgd2lsbCBub3QgdXNlIHRoZSBleHRlbmRlZCByZWNfbGVuCitlbmNvZGluZyBmb3IgZmlsZSBzeXN0ZW1zIHdob3NlIGJsb2NrIHNpemUgaXMgbGVzcyB0aGFuIDY0aywgZm9yCitjb25zaXN0ZW5jeSB3aXRoIHRoZSBrZXJuZWwuCisKK1Byb2dyYW1taW5nIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitFMmZzcHJvZ3MgMS40MS4xMyB3b3VsZCBub3QgY29tcGlsZSBvbiBiaWctZW5kaWFuIHN5c3RlbXMuICBUaGlzIGhhcworYmVlbiBmaXhlZC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMzEzODExNSkKKworVGhlIGV4dDJmc19ibG9ja19pdGVyYXRvcjIoKSBmdW5jdGlvbiBwYXNzZWQgYW4gaW5jb3JyZWN0IHJlZl9vZmZzZXQKK3RvIGl0cyBjYWxsYmFjayBmdW5jdGlvbiBpbiB0aGUgY2FzZSBvZiBzcGFyc2UgZmlsZXMuICAoQWRkcmVzc2VzCitTb3VyY2Vmb3JnZSBCdWc6ICMzMDgxMDg3KQorICAgIAorRml4IHNvbWUgdHlwZS1wdW5uaW5nIHdhcm5pbmdzIGdlbmVyYXRlZCBieSBuZXdlciB2ZXJzaW9ucyBvZiBnY2MuCisKKworRTJmc3Byb2dzIDEuNDEuMTMgKERlY2VtYmVyIDEzLCAyMDEwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFMmZzY2sgbm93IHN1cHBvcnRzIHRoZSBleHRlbmRlZCBvcHRpb24gIi1FIGpvdXJuYWxfb25seSIsIHdoaWNoCitjYXVzZXMgaXQgdG8gb25seSBkbyBhIGpvdXJuYWwgcmVwbGF5LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHNjcmlwdHMKK3RoYXQgd2FudCB0byBmaXJzdCByZXBsYXkgdGhlIGpvdXJuYWwgYW5kIHRoZW4gY2hlY2sgdG8gc2VlIGlmIGl0Citjb250YWlucyBlcnJvcnMuCisKK0UyZnNjayB3aWxsIG5vdyBzdXBwb3J0IFVVSUQ9IGFuZCBMQUJFTD0gc3BlY2lmaWVycyBmb3IgdGhlIC1qIG9wdGlvbgorKHdoaWNoIHNwZWNpZmllcyB3aGVyZSB0byBmaW5kIHRoZSBleHRlcm5hbCBqb3VybmFsKS4gIChBZGRyZXNzZXMKK0RlYmlhbiBCdWcgIzU1OTMxNSkKKworRTJmc2NrIG5vdyBoYXMgc3VwcG9ydCBmb3IgdGhlIHByb2JsZW1zLzxwcm9ibGVtIGNvZGU+L2ZvcmNlX25vCitjb25maWd1cmF0aW9uIG9wdGlvbiBpbiBlMmZzY2suY29uZiwgd2hpY2ggZm9yY2VzIGEgcHJvYmxlbSB0byBub3QgYmUKK2ZpeGVkLgorCitEdW1wZTJmcyB3aWxsIG5vdyBhdm9pZCBwcmludGluZyBsYXJnZSBuZWdhdGl2ZSBvZmZzZXRzIGZvciB0aGUgYml0bWFwCitibG9ja3MgYW5kIGluc3RlYWQgcHJpbnQgYSBtZXNzYWdlIHdoaWNoIGlzIGEgYml0IG1vcmUgaGVscGZ1bCBmb3IKK2ZsZXhfYmcgZmlsZSBzeXN0ZW1zLgorCitNa2UyZnMgd2lsbCBub3cgY2hlY2sgdGhlIGZpbGUgc3lzdGVtIHR5cGUgKHNwZWNpZmllZCB3aXRoIHRoZSAtdAorb3B0aW9uKSB0byBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiB0aGUgbWtlMmZzLmNvbmYgZmlsZTsgaWYgaXQgaXMKK25vdCwgaXQgd2lsbCBwcmludCBhbiBlcnJvciBhbmQgYWJvcnQuICBJZiB0aGUgdXNhZ2UgdHlwZSAoc3BlY2lmaWVkCit3aXRoIHRoZSAtVCBvcHRpb24pIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mLCBta2UyZnMgd2lsbCBwcmludCBhCit3YXJuaW5nIGJ1dCB3aWxsIGNvbnRpbnVlLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM1OTQ2MDkpCisKK0NsYXJpZmllZCBlcnJvciBtZXNzYWdlIGZyb20gcmVzaXplMmZzIGNsYXJpZnlpbmcgdGhhdCBvbi1saW5lCitzaHJpbmtpbmcgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzU5OTc4NikKKyAgICAKK0ZpeCBhbiBlMmZzY2sgYnVnIHRoYXQgY291bGQgY2F1c2UgYSBQUk9HUkFNTUlORyBCVUcgZXJyb3IgdG8gYmUKK2Rpc3BsYXllZC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNTU1NDU2KQorCitFMmZzY2sgd2lsbCBvcGVuIHRoZSBleHRlcm5hbCBqb3VybmFsIGluIGV4Y2x1c2l2ZSBtb2RlLCB0byBwcmV2ZW50Cit0aGUgam91cm5hbCBmcm9tIGdldHRpbmcgdHJ1bmNhdGVkIHdoaWxlIGl0IGlzIGluIHVzZSBkdWUgdG8gYSB1c2VyCithY2NpZGVudGFsbHkgdHJ5aW5nIHRvIHJ1biBlMmZzY2sgb24gYSBzbmFwc2hvdHRlZCBmaWxlIHN5c3RlbSB2b2x1bWUuCisoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzU4NzUzMSkKKworRml4IGEgYnVnIGluIGUyZnNjayBzbyBpdCBoYXMgdGhlIGNvcnJlY3QgdGVzdCBmb3IgdGhlIEVPRkJMT0NLU19GTAorZmxhZy4KKworVGhlIHR1bmUyZnMgcHJvZ3JhbSBjYW4gbm93IHNldCB0aGUgdW5pbml0X2JnIGZlYXR1cmUgd2l0aG91dAorcmVxdWlyaW5nIGFuIGZzY2suCisKK1RoZSB0dW5lMmZzLCBkdW1wZTJmcywgYW5kIGRlYnVnZnMgcHJvZ3JhbXMgbm93IHN1cHBvcnQgdGhlIG5ldyBleHQ0CitkZWZhdWx0IG1vdW50IG9wdGlvbnMgc2V0dGluZ3Mgd2hpY2ggd2VyZSBhZGRlZCBpbiAyLjYuMzUuCisKK1RoZSBlMmZzY2sgYW5kIGR1bXBlMmZzIHByb2dyYW1zIG5vdyBzdXBwb3J0IHRoZSBuZXcgZXh0NCBzdXBlcmJsb2NrCitmaWVsZHMgd2hpY2ggdHJhY2sgd2hlcmUgYW5kIHdoZW4gdGhlIGZpcnN0IGFuZCBtb3N0IHJlY2VudCBmaWxlCitzeXN0ZW0gZXJyb3JzIG9jY3VycmVkLiAgVGhlc2UgZmllbGRzIGFyZSBkaXNwbGF5ZWQgYnkgZHVtcGUyZnMgYW5kCitjbGVhcmVkIGJ5IGUyZnNjay4gIFRoZXNlIG5ldyBzdXBlcmJsb2NrIGZpZWxkcyB3ZXJlIGFkZGVkIGluIDIuNi4zNi4KKworRGVidWdmcyBub3cgdXNlcyBhIG1vcmUgY29uY2ljc2UgZm9ybWF0IGZvciBsaXN0aW5nIGV4dGVudHMgaW4gaXRzCitzdGF0IGNvbW1hbmQuICBUaGlzIGZvcm1hdCBhbHNvIGluY2x1ZGVzIHRoZSBpbnRlcmlvciBleHRlbnQgdHJlZQorYmxvY2tzLCB3aGljaCBwcmV2aW91c2x5IHdhcyBtaXNzaW5nIGZyb20gc3RhdCdzIG91dHB1dCBmb3IKK2V4dGVudC1iYXNlZCBmaWxlcy4KKworRGVidWdmcyBoYXMgYSBuZXcgb3B0aW9uLCAtRCwgd2hpY2ggd2lsbCByZXF1ZXN0IERpcmVjdCBJL08gYWNjZXNzIG9mCit0aGUgZmlsZSBzeXN0ZW0uCisKK01rZTJmcyB3aWxsIHNraXAgaW5pdGlhbGl6aW5nIHRoZSBpbm9kZSB0YWJsZSBpZiBhIGRldmljZSBzdXBwb3J0cworZGlzY2FyZCBhbmQgdGhlIGRpc2NhcmQgb3BlcmF0aW9uIHdpbGwgcmVzdWx0IGluIHplcm8nZWQgYmxvY2tzLgorCitCYWRibG9ja3Mgd2lsbCBub3cgY29ycmVjdGx5IGJhY2tzcGFjZSBvdmVyIFVURi04IGNoYXJhY3RlcnMgd2hlbgorZGlzcGxheWluZyBpdHMgcHJvZ3Jlc3MgYmFyLiAgKEFkZHJlc3NlcyBHZW50b28gQnVnICMzMDk5MDk7IEFkZHJlc3NlcworRGViaWFuIEJ1Z3MgIzU4Mzc4MiBhbmQgIzU4NzgzNCkKKworRTJmcmVlZnJhZyB3aWxsIG5vdyBkaXNwbGF5IHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZSBleHRlbnRzLgorCitSZXNpemUyZnMgLVAgbm8gbG9uZ2VyIHJlcXVpcmVzIGEgZnJlc2hseSBjaGVja2VkIGZpbGVzeXN0ZW0gYmVmb3JlCitwcmludGluZyB0aGUgbWluaW11bSByZXNpemUgc2l6ZS4KKworRml4ZWQgYSBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gZXJyb3IgaW4gYSBiaW5hcnkgdHJlZSBzZWFyY2ggcm91dGluZQordGhhdCBjYW4gbGVhZCB0byBzZWcgZmF1bHQgaW4gZTJmc2NrIGFuZCByZXNpemUyZnMuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGVyZSBpZiBib3RoIHRoZSBvcmlnaW5hbCBhbmQgYmFja3VwIHN1cGVyYmxvY2sKK2FyZSBpbnZhbGlkIGluIHNvbWUgd2F5LCBlMmZzY2sgd2lsbCBmYWlsIGdvaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsCitzdXBlcmJsb2NrIGJlY2F1c2UgaXQgZGlkbid0IGNsb3NlIHRoZSBiYWNrdXAgc3VwZXJibG9jayBmaXJzdCwgYW5kCit0aGUgZXhjbHVzaXZlIG9wZW4gcHJldmVudGVkIHRoZSBmaWxlIHN5c3RlbSBmcm9tIGJlaW5nIHJlb3BlbmVkLgorCitGaXhlZCBhIGJpZyBpbiBlMmZyZWVmcmFnIHdoaWNoIGNhdXNlZCBnZXRvcHQgcGFyc2luZyB0byBmYWlsIG9uCithcmNoaXRlY3R1cmVzIHdpdGggdW5zaWduZWQgY2hhcnMuICAoQWRkcmVzc2VzIEdlbnRvbyBCdWc6ICMyOTkzODYpCisKK0NsYXJpZmllZCBhbiBta2UyZnMgZXJyb3IgbWVzc2FnZSBzbyBhIG1pc3NlZCBjb21tb24gaW4gYW4gLUUgb3B0aW9uCisoaS5lLiwgbWtlMmZzIC10IGV4dDQgLUUgc3RyaWRlPTEyOCBzdHJpcGUtd2lkdGg9NTEyIC9kZXYvc2RhMSIpCityZXN1bHRzIGluIGEgbW9yZSB1bmRlcnN0YW5kYWJsZSBleHBsYW5hdGlvbiB0byB0aGUgdXNlci4KKworTWtlMmZzIG5vdyBkaXNwbGF5cyB0aGUgY29ycmVjdCB2YWxpZCBpbm9kZSByYXRpbyByYW5nZSB3aGVuCitjb21wbGFpbmluZyBhYm91dCBhbiBpbnZhbGlkIGlub2RlIHJhdGlvIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKworTWtlMmZzIG5vdyB1bmRlcnN0YW5kcyB0aGUgZXh0ZW5kZWQgb3B0aW9uICJkaXNjYXJkIiBhbmQgIm5vZGlzY2FyZCIsCithbmQgdGhlIG9sZGVyIG9wdGlvbiAtSyBpcyBkZXByZWNhdGVkLiAgVGhlIGRlZmF1bHQgb2Ygd2hldGhlcgorZGlzY2FyZHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBjYW4gYmUgY29udHJvbGVkIGJ5IHRoZSBta2UyZnMuY29uZgorZmlsZS4KKworTWtlMmZzJ3MgaGFuZGxpbmcgb2YgbG9naWNhbCBhbmQgcGh5c2ljYWwgc2VjdG9yIHNpemVzIGhhcyBiZWVuCitpbXByb3ZlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIFNTRCdzIHdpdGggOGsgYW5kCisxNmsgcGh5c2ljYWwgc2VjdG9ycyBhcnJpdmluZyBzb29uLiAgTWtlMmZzIHdpbGwgbm8gbG9uZ2VyIGZvcmNlIGJsb2NrCitzaXplIHRvIGJlIHRoZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSwgc2luY2UgdGhlcmUgd2lsbCBiZSBkZXZpY2VzIHdoZXJlCit0aGUgcGh5c2ljYWwgc2VjdG9yIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIHN5c3RlbSdzIHBhZ2Ugc2l6ZSwgYW5kCitoZW5jZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW1hbCBzdXBwb3J0ZWQgYmxvY2sgc2l6ZS4gIEluIGFkZGl0aW9uLCBpZgordGhlIG1pbmltYWwgYW5kIG9wdGltYWwgaW8gc2l6ZSBhcmUgbm90IGV4cG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGFuZAordGhlIHBoeXNpY2FsIHNlY3RvciBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBibG9jayBzaXplLCB0aGUgcGh5c2ljYWwKK3NlY3RvciBzaXplIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlIFJhaWQgSS9PIG9wdGltaXphdGlvbiBoaW50cyBpbiB0aGUKK3N1cGVyYmxvY2suCisKK0UyZnNjayB3aWxsIG5vdyBkaXNwbGF5IGEgYmV0dGVyLCBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKK3VzZXIgZW50ZXJzIGEgdHlwbydlZCBkZXZpY2UgbmFtZSwgaW5zdGVhZCBvZiBibGF0aGVyaW5nIG9uIGFib3V0CithbHRlcm5hdGUgc3VwZXJibG9ja3MuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIFBhY2thZ2luZyBJc3N1ZXMKKworVXBkYXRlZC9jbGFyaWZpZWQgbWFuIHBhZ2VzIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1ODAyMzYsICM1OTQwMDQsCisjNTg5MzQ1LCAjNTkxMDgzOyBBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzUwNTcxOSkKKworVXBkYXRlIHRoZSBDaGluZXNlLCBDaHplY2gsIER1dGNoLCBGcmVuY2gsIEdlcm1hbnksIEluZG9uZXNpYW4sCitQb2xpc2gsIFN3ZWRpc2gsIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggYSBkZXBlbmRlbmN5IGRlZmluaXRpb24gZm9yIHRoZSBzdGF0aWMgYW5kIHByb2ZpbGVkIGJsa2lkCitsaWJyYXJpZXMgd2hpY2ggY291bGQgY2F1c2UgY29tcGlsZSBmYWlsdXJlcyBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNjA0NjI5KQorICAgIAorQWRkIHN1cHBvcnQgZm9yIERpcmVjdCBJL08gaW4gdGhlIFVuaXggSS9PIGFjY2VzcyBsYXllci4KKworRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgVW5peCBJL08gbGF5ZXIgd2hlbiBjaGFuZ2luZyBibG9jayBzaXplcy4KKworRml4ZWQgbWlub3IgbWVtb3J5IGxlYWtzIGluIG1rZTJmcy4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gdGhlIGV4dDJmcyBsaWJyYXJ5LCBleHQyZnNfZ2V0X21lbWFsaWduKCkuCisKK1RoZSB0c3Rfc3VwZXJfc2l6ZSB0ZXN0IHByb2dyYW0gd2lsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHN1cGVyYmxvY2sKK2ZpZWxkcyBhcmUgY29ycmVjdGx5IGFsaWduZWQgYW5kIHdpbGwgcHJpbnQgdGhlbSBvdXQgc28gdGhleSBjYW4gYmUKK21hbnVhbGx5IGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLgorCitGaXhlZCBzb21lIG1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb3IgdGVzdCBwcm9ncmFtcyBpbiBsaWIvZXh0MmZzLgorCitSZXNlcnZlZCB0aGUgZmVhdHVyZSBmbGFncyBhbmQgc3VwZXJibG9jayBmaWVsZHMgbmVlZGVkIGZvciB0aGUgTmV4dDMKK3NuYXBzaG90IGZlYXR1cmUuCisKK1Jlc2VydmVkIHRoZSBmZWF0dXJlIGZsYWdzIGZvciBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRElSREFUQSBhbmQKK0VYVDRfSU5DT01QQVRfRUFfSU5PREUuCisKKworRTJmc3Byb2dzIDEuNDEuMTIgKE1heSAxNywgMjAxMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01rZTJmcyBub3cgZ2l2ZXMgYSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4dGVybmFsIGpvdXJuYWwKK2RldmljZSBpcyBub3QgZm91bmQuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnICM1NzI5MzUpCisKK1Jlc2l6ZTJmcyAtUCB3aWxsIG5vdyByZWZ1c2UgdG8gcHJpbnQgYSBtaW5pbXVtIHNpemUgaWYgdGhlIGZpbGUKK3N5c3RlbSBpcyBub3QgY2xlYW4uICBQcmV2aW91c2x5IGl0IHdvdWxkIGdvIGFoZWFkIGFuZCBwcmludCBhIG1pbmltdW0KK3NpemUgYW55d2F5LCB3aGljaCBtaWdodCBub3QgYmUgY29ycmVjdCwgbGVhZGluZyB0byB1c2VyIGNvbmZ1c2lvbi4KKworRTJmc2NrIG5vdyB0ZXN0cyBmb3IgZXh0ZW50cyB0aGF0IGJlZ2luIGF0IHBoeXNpY2FsIGJsb2NrIDAgYW5kCityZWplY3RzIHRoZW0gYXMgaW52YWxpZC4gIChBZGRyZXNzZXMgR29vZ2xlIEJ1ZzogIzI1NzM4MDYpCisgICAgCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY2F1c2UgaXQgdG8gY3Jhc2ggd2hlbiB0cnlpbmcgdG8KK3JlbW92ZSBhbiBpbnZhbGlkIGV4dGVudCBhbmQgdGhlIGJsb2NrIGJpdG1hcHMgaGFkbid0IHlldCBiZWVuIGxvYWRlZC4KKyhBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnOiAjMjk3MTgwMCkKKyAgICAKK0UyZnNjayBub3cgd2lsbCBjb21wbGV0ZWx5IHNraXAgdGltZS1iYXNlZCBjaGVja3MgaWYgdGhlIHN5c3RlbSBjbG9jaworbG9va3MgaW5zYW5lIG9yIHRoZSBvcHRpb24gYnJva2VuX3N5c3RlbV9jbG9jayBpcyBzZXQgaW4KKy9ldGMvZTJmc2NrLmNvbmYuCisKK0UyZnNjayB3b3VsZCBwcmV2aW91c2x5IHJlcG9ydCBhbiBpX2Jsb2NrcyBjb3JydXB0aW9uIGZvciBhIDRUIGZpbGUKK2NyZWF0ZWQgdXNpbmcgcG9zaXhfZmFsbG9jYXRlOyB0aGlzIGJ1ZyBoYXMgYmVlbiBmaXhlZC4KKworRTJmc2NrIHdpbGwgbm93IGNvcnJlY3RseSBtYXJrIGEgc3BhcnNlIGpvdXJuYWwgYXMgaW52YWxpZCBhbmQgd2lsbAorZGVsZXRlIGFuZCByZWNyZWF0ZSB0aGUgam91cm5hbCB0byBhZGRyZXNzIHRoZSBwcm9ibGVtLgorCitFMmZzY2sgd291bGQgcHJldmlvdXNseSBpbmNvcnJlY3RseSBhc2sgdGhlIHVzZXIgd2hldGhlciBzaGUgd291bGQKK2xpa2UgdG8gYWJvcnQgdGhlIGZpbGUgc3lzdGVtIGNoZWNrIGFmdGVyIGZpbmRpbmcgYSBwcm9ibGVtIC0tLSBhbmQKK3RoZW4gYWJvcnQgcmVnYXJkbGVzcyBvZiB0aGUgdXNlcidzIGFuc3dlci4gIFRoaXMgaXMgYW5ub3lpbmcsIGFuZAoraGFzIGJlZW4gZml4ZWQuCisKK0UyZnNjayBjYW4gbm93IGNvbnRpbnVlIGV2ZW4gaWYgaXQgZmFpbHMgdG8gcmVjcmVhdGUgdGhlIHJlc2l6ZQoraW5vZGU7IHByZXZpb3VzbHkgaXQgd291bGQganVzdCBhYm9ydCB0aGUgZmlsZSBzeXN0ZW0gY2hlY2sKK2FsdG9nZXRoZXIuCisKK0UyZnNjayBjb3VsZCBwb3RlbnRpYWxseSByZW1vdmUgZGlyZWN0b3J5IGVudHJpZXMgZm9yIGlub2RlcyBmb3VuZCBpbgordGhlIHVudXNlZCByZWdpb24gb2YgdGhlIGlub2RlIHRhYmxlOyB0aGlzIHdvdWxkIGdlbmVyYWxseSBoYXBwZW4gb24KK2V4dDQgZmlsZSBzeXN0ZW1zIHRoYXQgZG8gbm90IHVzZSBqb3VybmFsaW5nLiAgVGhpcyBidWcgaGFzIGJlZW4gZml4ZWQKK2J5IG5vdCBjbGVhcmluZyB0aGVzZSBkaXJlY3RvcnkgZW50cmllcyBvbmNlIGl0IGhhcyBiZWVuIGVzdGFibGlzaGVkCit0aGF0IGJnX3VudXNlZF9pbm9kZXMgbWF5IG5vdCBiZSB0cnVzdHdvcnRoeTsgb25jZSBwYXNzICMyIGhhcyBiZWVuCitjb21wbGV0ZWQsIGUyZnNjayB3aWxsIHJlc3RhcnQgdGhlIGZpbGUgc3lzdGVtIGNoZWNrIGZyb20gdGhlCitiZWdpbm5pbmcsIGFuZCB0aGVuIGl0IHdpbGwgYmUgc2FmZSB0byBkZWxldGUgYW55IGRpcmVjdG9yeSBlbnRyaWVzCitwb2ludGluZyB0byBpbm9kZXMgdGhhdCBhcHBlYXIgdG8gYmUgZGVsZXRlZC4gIChBZGRyZXNzZXMgR29vZ2xlIEJ1ZzoKKyMyNjQyMTY1KQorICAgIAorRTJmc2NrIHdpbGwgbm90IHRyeSB0byBzZXQgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyBpZiB0aGUgdXNlcgorY2FuY2VscyB0aGUgZnNjayB3aXRoIGEgY29udHJvbC1DLiAgSXQncyBhIGJhZCBpZGVhIHRvIHNldCB0aGUKK2NoZWNrc3VtcyBpZiBlMmZzY2sgaGFzbid0IGJlZW4gY29tcGxldGVkLCBhbmQgaXQgb2Z0ZW4gcmVzdWx0cyBhbiB0aGUKK2Vycm9yIG1lc3NhZ2UsICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCB3aGlsZSBzZXR0aW5nIGJsb2NrIGdyb3VwCitjaGVja3N1bSBpbmZvIi4gIChBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzU4MjAzNSkKKworVGhlIG1rZTJmcyBwcm9ncmFtIG5vdyBxdWVyaWVzIHRoZSBrZXJuZWwgZm9yIHRoZSBwaHlzaWNhbCBhcyB3ZWxsIGFzCit0aGUgbG9naWNhbCBzZWN0b3Igc2l6ZSwgYW5kIHdpbGwgbm90IGFsbG93IGEgYmxvY2tzaXplIGJlbG93IHRoZQorbG9naWNhbCwgYW5kIHdpbGwgc3Ryb25nbHkgZW5jb3VyYWdlIGEgYmxvY2tzaXplIGF0IGxlYXN0IGFzIGJpZyBhcwordGhlIHBoeXNpY2FsIGJsb2Nrc2l6ZS4gIFRoaXMgaXMgbmVlZGVkIGZvciA0ayBzZWN0b3IgZHJpdmVzIHRoYXQKK2VtdWxhdGUgNTEyIGJ5dGUgc2VjdG9yIHNpemVzLgorCitNa2UyZnMgd2lsbCBub3cgYWxsb3cgYSBmbGV4X2JnIHNpemUgb2YgMS4gIFRoaXMgaXMgdW51c3VhbCwgYW5kCityYXJlbHkgbmVlZGVkLCBidXQgaXQgaXMgYSBsZWdhbCB2YWx1ZS4KKworRTJmc2NrIHdpbGwgY2hlY2sgZm9yIGNhc2VzIHdoZXJlIHRoZSBFT0ZCTE9DS1NfRkwgaXMgc2V0IHdoZW4gaXQgaXMKK25vdCBuZWVkZWQsIGFuZCBvZmZlciB0byBjbGVhciBpdDsgdGhpcyBpcyBhIHNpZ24gb2YgYSBrZXJuZWwgYnVnLCBidXQKK21vcmUgaW1wb3J0YW50bHksIHNvbWUgcmVsZWFzZWQga2VybmVscyBtYXkgY3Jhc2ggd2hlbiB0aGlzIHNpdHVhdGlvbgoraXMgZW5jb3VudGVyZWQgb24gZXh0NCBmaWxlIHN5c3RlbXMuICAoQWRkcmVzc2VzIEdvb2dsZSBCdWc6ICMyNjA0MjI0KQorICAgIAorRTJmc2NrIHdpbGwgdXNlIHRoZSBFT0ZCTE9DS1NfRkwgZmxhZyBleGNsdXNpdmVseSB0byBjaGVjayB3aGV0aGVyCitpX3NpemUgaXMgY29ycmVjdC4gIChLZXJuZWxzIHN0YXJ0aW5nIHdpdGggMi42LjM0IHdpbGwgc2V0CitFT0ZCTE9DS1NfRkwuKQorCitUaGUgY29tX2VyciBsaWJyYXJ5IHdpbGwgbm93IG9ubHkgb3V0cHV0IF5NIChhIENSIGNoYXJhY3Rlcikgd2hlbiB0aGUKK3R0eSBpcyBpbiByYXcgbW9kZS4KKworVXBkYXRlIHRoZSBDemVjaCwgQ2hpbmVzZSwgRHV0Y2gsIEZyZW5jaCwgR2VybWFueSwgSW5kb25lc2lhbiwgUG9saXNoLAorYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNTcxMjQ3LCAjNTYzNDg3KQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgbm93IHVzZXMgaXRzIG93biBta2UyZnMuY29uZiBmaWxlLCBzbyB0aGF0Citkb3duc3RyZWFtIGRpc3RyaWJ1dGlvbnMgd2FudCBjaGFuZ2UgdGhlIG1rZTJmcy5jb25mIGZpbGUgd2hpY2ggaXMKK2Rpc3RyaWJ1dGVkIGluIHRoZSBSUE0gb3IgZHBrZyBmaWxlLCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHNjcmV3aW5nCit1cCB0aGUgcmVncmVzc2lvbiB0ZXN0IHJlc3VsdHMuCisKK0Fsd2F5cyBidWlsZCBuYW1laS5vIHNvIHRoYXQgYnVpbGRpbmcgd2l0aCBjb25maWd1cmUgLS1kaXNhYmxlLWRlYnVnZnMKK3dvcmtzIGNvcnJlY3RseS4gIExvbmctdGVybSwgaWYgd2UgY2FyZSBhYm91dCByZWR1Y2VkIGUyZnNwcm9ncworYnVpbGRzLCB3ZSBuZWVkIGEgbW9yZSBnZW5lcmFsIHNvbHV0aW9uIGZvciBkZWNpZGluZyB3aGF0IC5vIGZpbGVzIGFyZQorbmVlZGVkIGZvciBhIHBhcnRpY3VsYXIgYnVpbGQuICBHaXZlbiB0aGF0IGluc3RhbGwgZmxvcHBpZXMgYXJlIGdvaW5nCisoZ29uZT8pIHRoZSB3YXkgdGhlIGRvZG8gYmlyZCwgd2UgcHJvYmFibHkgZG9uJ3QgY2FyZSwgdGhvdWdoLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyOTExNDMzKQorCitBZGQgY29uZmlndXJlIG9wdGlvbnMgLS1lbmFibGUtc3ltbGluay1idWlsZCBhbmQKKy0tZW5hYmxlLXN5bWxpbmstaW5zdGFsbCwgd2hpY2ggYWxsb3cgZTJmc3Byb2dzIGJlIGJ1aWx0IHVzaW5nCitzeW1saW5rcyBpbnN0YWQgb2YgaGFyZCBsaW5rcywgYW5kIHRvIGJlIGluc3RhbGxlZCB1c2luZyBzeW1saW5rcworaW5zdGVhZCBvZiBoYXJkIGxpbmtzLCByZXNwZWN0aXZlbHkuICBJdCBpcyB1c2VmdWwgd2hlbiB0aGUgZmlsZQorc3lzdGVtIHdoZXJlIHRoZSBidWlsZCBpcyB0YWtpbmcgcGxhY2UsIG9yIHRoZSBmaWxlIHN5c3RlbSB3aGVyZQorZTJmc3Byb2dzIGlzIGluc3RhbGxlZCwgY2FuJ3QgaGFuZGxlIGhhcmQgbGlua3MgZm9yIHNvbWUgcmVhc29uLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxNDM2Mjk0KQorCitGaXhlZCBjb21waWxlIHdhcm5pbmcgaW4gbWtlMmZzLmMuCisKKyAgICAKK0UyZnNwcm9ncyAxLjQxLjExIChNYXJjaCAxNCwgMjAxMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIGdpdmUgYSBmYXRhbCBlcnJvciBhbmQgYWJvcnQgaWYgdGhlIHBoeXNpY2FsCitkZXZpY2UgaGFzIGJlZW4gcmVzaXplZCBiZXlvbmQgMioqMzIgYmxvY2tzLiAgKEFkZHJlc3NlcyBMYXVuY2hwYWQKK0J1ZzogIzUyMTY0OCkKKworRGVidWdmcyBoYXMgYSBidWcgZml4ZWQgc28gdGhhdCAibG9nZHVtcCAtYiA8YmxrPiIgbm93IHByb3Blcmx5IHNob3dzCit0aGUgYWxsb2NhdGlvbiBzdGF0dXMgb2YgdGhlIGJsb2NrIDxibGs+LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzU2NDA4NCkKKyAgICAKK0UyZnNjayBub3cgcHJpbnRzIGEgbXVjaCBtb3JlIGVtcGhhdGljIGFuZCBob3BlZnVsbHkgc2NhcnkgbWVzc2FnZQord2hlbiBhIGZpbGUgc3lzdGVtIGlzIGRldGVjdGVkIGFzIG1vdW50ZWQgd2hpbGUgZG9pbmcgYSByZWFkL3dyaXRlCitjaGVjayBvZiB0aGUgZmlsZXN5c3RlbS4gIEhvcGVmdWxseSB0aGlzIHdpbGwgZGlzc3VhZGUgdXNlcnMgZnJvbQordGhpbmtpbmcsICJzdXJlbHkgdGhhdCBtZXNzYWdlIGRvZXNuJ3QgYXBwbHkgdG8gKm1lKiIgOi0oCisKK0UyZnNjayAtbiB3aWxsIG5vdyBhbHdheXMgb3BlbiB0aGUgZmlsZSBzeXN0ZW0gcmVhZC1vbmx5LiAgV2Ugbm93CitkaXNhbGxvdyBjZXJ0YWluIGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMgd2hpY2ggcHJldmlvdXNseSB3ZXJlIG1hbnVhbAorZXhjZXB0aW9uczsgdGhpcyBpcyBiYWQgYmVjYXVzZSBpdCBjYXVzZXMgdXNlcnMgdG8gdGhpbmsgdGhleSBhcmUKK3NtYXJ0ZXIgdGhhbiB0aGV5IHJlYWxseSBhcmUuICBTbyAiLW4gLWMiLCAiLW4gLWwiLCAiLW4gLUwiLCBhbmQgIi1uCistRCIgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuICAoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6ICM1Mzc0ODMpCisgICAgCitJbiBlMmZzcHJvZ3MgMS40MS4xMCwgbWtlMmZzIHdvdWxkIGFzayBmb3IgY29uZmlybWF0aW9uIHRvIHByb2NlZWQgaWYKK2l0IGRldGVjdGVkIGEgYmFkbHkgYWxpZ25lZCBwYXJ0aXRpb24uICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJyb2tlIHNvbWUKK2Rpc3RyaWJ1dGlvbiBpbnN0YWxsYXRpb24gc2NyaXB0cywgc28gaXQgbm93IGp1c3QgcHJpbnRzIHRoZSB3YXJuaW5nCittZXNzYWdlIGFuZCBwcm9jZWVkcy4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWc6ICM1NjkwMjEuIEFkZHJlc3NlcworTGF1bmNocGFkIEJ1ZzogIzUzMDA3MSkKKyAgICAKK01rZTJmcyB3b3VsZCB0YWtlIGEgbG9uZyB0aW1lIHRvIGNyZWF0ZSB2ZXJ5IGxhcmdlIGpvdXJuYWwgZmlsZXMgZm9yCitleHQ0LiAgVGhpcyB3YXMgY2F1c2VkIGJ5IGEgYnVnIGluIGV4dDJmc19ibG9ja19pdGVyYXRlMigpLCB3aGljaCBpcworbm93IGZpeGVkLgorCitFMmZzY2sgbm93IHVuZGVyc3RhbmRzIHRoZSBFT0ZCTE9DS1NfRkwgZmxhZyB3aGljaCB3aWxsIGJlIHVzZWQgaW4KKzIuNi4zNCBrZXJuZWxzIHRvIG1ha2UgZTJmc2NrIG5vdCBjb21wbGFpbiBhYm91dCBibG9ja3MgZGVsaWJlcmF0ZWx5CitmYWxsb2NhdGVkKCkgYmV5b25kIGFuIGlub2RlJ3MgaV9zaXplLgorCitFMmZzcHJvZ3MgMS40MS4xMCBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbiAoaW4gY29tbWl0IGI3MWUwMTgpIHdoZXJlCitlMmZzY2sgLWZEIGNhbiBjb3JydXB0IG5vbi1pbmRleGVkIGRpcmVjdG9yaWVzIHdoZW4gYXJlIGV4aXN0cyBvbmUgb3IKK21vcmUgZmlsZSBuYW1lcyB3aGljaCBhbHBoYWJldGljYWxseSBzb3J0IGJlZm9yZSAiLiIuICBUaGlzIGNhbiBoYXBwZW4KK3dpdGggZXh0MiBmaWxlc3lzdGVtcyBvciBmb3Igc21hbGwgZGlyZWN0b3JpZXMgKHRha2UgbGVzcyB0aGFuIGEgbG9jaykKK3doaWNoIGNvbnRhaW4gZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIHNwYWNlIG9yIHNvbWUgb3RoZXIKK3B1bmN0dWF0aW9uIG1hcmsuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1NzM5MjMsIEFkZHJlc3NlcyBMYXVuY2hwYWQKK0J1ZzogIzUyNTExNCkKKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgbmV3IHRlc3QsIGZfcmVoYXNoX2Rpciwgd2hpY2ggY2hlY2tzIHRvIG1ha2Ugc3VyZSBlMmZzY2sgLUQgd29ya3MKK2NvcnJlY3RseS4KKworVGhlIGxpYmNvbV9lcnIgZnVuY3Rpb24gbm93IGhhcyBzdXBwb3J0IGZvciBIZWltZGFsJ3MgY29tX3JpZ2h0X3IKK2Z1bmN0aW9uKCkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzI5NjM4NjUsIEFkZHJlc3NlcyBEZWJpYW4KK0J1ZzogIzU1ODkxMCkKKworCitFMmZzcHJvZ3MgMS40MS4xMCAoRmVicnVhcnkgNywgMjAxMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggcmVzaXplMmZzIGJ1ZyB3aGljaCBjYXVzZXMgaXQgdG8gYWNjZXNzIGludmFsaWQgbWVtb3J5LgorCitBZGQgbGlic3Mgc3VwcG9ydCBmb3IgbGlicmVhZGxpbmUuc28uNi4KKyAgICAKK0ZpeCBlMmZzY2sncyBjaGVjayBmb3IgZXh0ZW50LW1hcHBlZCBkaXJlY3Rvcnkgd2l0aCBhbiBpbmNvcnJlY3QgZmlsZQordHlwZS4KKworQWRkIG5ldyBlMmZzY2suY29uZiBjb25maWd1cmF0aW9uIG9wdGlvbiwgZGVmYXVsdC9icm9rZW5fc3lzdGVtX2Nsb2NrCit0byBzdXBwb3J0IHN5c3RlbXMgd2l0aCBicm9rZW4gQ01PUyBoYXJkd2FyZSBjbG9ja3MuICBBbHNvLCBzaW5jZSB0b28KK21hbnkgZGlzdHJpYnV0aW9ucyBzZWVtIHRvIGhhdmUgYnJva2VuIHZpcnR1YWxpemF0aW9uIHNjcmlwdHMgbm93LAorZTJmc2NrIHdpbGwgYnkgZGVmYXVsdCBhY2NlcHQgZGF0ZXMgd2hpY2ggYXJlIG9mZiBieSB1cCB0byAyNCBob3VycyBieQorZGVmYXVsdC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM1NTk3NzYsICM1NTc2MzYpCisKK0ZpeCBhIGJ1ZyB3aGVyZSBta2UyZnMgbWF5IG5vdCB1c2UgdGhlIGJlc3QgcGxhY2VtZW50IG9mIHRoZSBpbm9kZQordGFibGUgd2hlbiB0aGVyZSBpcyBvbmx5IHJvb20gZm9yIGEgc2luZ2xlIGJsb2NrIGdyb3VwIGluIHRoZSBsYXN0CitmbGV4X2JnLgorCitFMmZzY2sgaXMgbm93IHNtYXJ0ZXIgd2hlbiBpdCBuZWVkcyB0byBhbGxvY2F0ZSBibG9ja3MgaW4gdGhlIGNvdXJzZQorb2YgZml4aW5nIGZpbGUgc3lzdGVtIHByb2JsZW1zLiAgVGhpcyByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygc3B1cmlvdXMKK2RpZmZlcmVuY2VzIGZvdW5kIGluIHBhc3MgIzUuCisKK0UyZnNjayB3aWxsIG5vIGxvbmdlciByZWhhc2ggZGlyZWN0b3JpZXMgd2hpY2ggZml0IGluIGEgc2luZ2xlCitkaXJlY3RvcnkgYmxvY2suCisKK0UyZnNjayBub3cgY29ycmVjdGx5IGhhbmRsZXMgaG9sZXMgaW4gZXh0ZW50LW1hcHBlZCBkaXJlY3RvcmllcyAoaS5lLiwKK3NwYXJzZSBkaXJlY3RvcmllcyB3aGljaCB1c2UgZXh0ZW50cykuCisKK0ZpeCBiaWctZW5kaWFuIHByb2JsZW1zIHdpdGggZXh0MmZzX2JtYXAoKSBhbmQgZXh0MmZzX2JtYXAyKCkuCisKK0ZpeCBhIGJ1ZyBpbiBmaWxlZnJhZyB3aGVyZSBvbiBwbGF0Zm9ybXMgd2hpY2ggY2FuIGFsbG93IGZpbGUgc3lzdGVtcword2l0aCA4ayBibG9ja3MsIHRoYXQgaXQgZG9lc24ndCBjb3JlIGR1bXAgd2hlbiBpdCBzZWVzIGEgZmlsZSBzeXN0ZW0KK3dpdGggOGsgYmxvY2sgc2l6ZXMuICAoVGhhbmtzIHRvIE1pa3VsYXMgUGF0b2NrYSBmb3IgcG9pbnRpbmcgdGhpcworb3V0LikKKworRTJmc2NrIHdpbGwgY29ycmVjdGx5IGZpeCBkaXJlY3RvcmllcyB0aGF0IGFyZSBoYXZlIGFuIGluYWNjdXJhdGUKK2lfc2l6ZSBhcyB3ZWxsIGFzIG90aGVyIHByb2JsZW1zIGluIGEgc2luZ2xlIHBhc3MsIGluc3RlYWQgb2YKK3JlcXVpcmluZyB0d28gZTJmc2NrIHJ1bnMgYmVmb3JlIHRoZSBmaWxlIHN5c3RlbSBpcyBmdWxseSBmaXhlZC4KKworRml4IGUyZnNjayBzbyBpdCB3aWxsIGNvcnJlY3RseSBmaW5kIGFuZCBkZXRlY3QgZHVwbGljYXRlIGRpcmVjdG9yeQorZW50cmllcyBmb3Igbm9uLWluZGV4ZWQgZGlyZWN0b3JpZXMuICAoIEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMjg2MjU1MSkKKyAgICAKK01rZTJmcyB3aWxsIHVzZSBCTEtESVNDQVJEIHRvIHByZS1kaXNjYXJkIGFsbCBibG9ja3Mgb24gYW4gU1NEIG9yCit0aGlubHktcHJvdmlzaW9uZWQgc3RvcmFnZSBkZXZpY2UuICBUaGlzIGNhbiBiZSBkaXNhYmxlZCB1c2luZyB0aGUgLUsKK29wdGlvbi4KKworRW5oYW5jZSBsaWJleHQyZnMgc28gaXQgd29ya3MgYXJvdW5kIGJ1ZyBpbiBMaW51eCB2ZXJzaW9uIDIuNi4xOQorYW5kIGVhcmxpZXIgd2hlcmUgdGhlIC9wcm9jL3N3YXBzIGZpbGUgd2FzIG1pc3NpbmcgdGhlIGhlYWRlciBvbgordGhlIGZpcnN0IGxpbmUuCisKK0ZpeCBidWcgaW4gTGludXggdmVyc2lvbiAyLjYuMTkgYW5kIGVhcmxpZXIgd2hlcmUgdGhlIC9wcm9jL3N3YXBzIGZpbGUKK3dhcyBtaXNzaW5nIHRoZSBoZWFkZXIgb24gdGhlIGZpcnN0IGxpbmUuCisKK0ZpeCBzb21lIGJpZy1lbmRpYW4gYnVncyBpbiBlMmZzY2sgYW5kIGxpYmV4dDJmcy4KKworRml4IHJlc2l6ZTJmcyBzbyBpdCB3b3JrcyBjb3JyZWN0bHkgb24gZmlsZSBzeXN0ZW1zIHdpdGggZXh0ZXJuYWwKK2pvdXJuYWxzIGluc3RlYWQgb2YgZmFpbGluZyBlYXJseSB3aXRoIHRoZSBlcnJvciAiSWxsZWdhbCBpbm9kZQorbnVtYmVyIi4KKworRml4IGxpYnNzIHNvIHRoYXQgaXQgZG9lcyBub3Qgc2VnIGZhdWx0IHdoZW4gdXNpbmcgYSByZWFkbGluZSBsaWJyYXJ5Cit3aGljaCBkb2VzIG5vdCBzdXBwbHkgYSByZWFkbGluZV9zaHV0ZG93bigpIGZ1bmN0aW9uLgorCitVcGRhdGVkIGR1bXBlMmZzJ3MgdXNhZ2UgbWVzc2FnZSBzbyBpdCBjb3JyZWN0bHkgZ2l2ZXMgdGhlIHJpZ2h0Cithcmd1bWVudHMgc3VtbWFyeSBmb3IgIi1vIHN1cGVyYmxvY2s9PG51bT4iIGFuZCAiLW8gYmxvY2tzaXplPTxudW0+Ii4KKyhBZGRyZXNzZXMgTGF1bmNocGFkIEJ1ZzogIzQ0ODA5OSkKKyAgIAorVGVhY2ggbGliZXh0MmZzIHRvIGlnbm9yZSB0aGUgaGlnaCAzMiBiaXRzIG9mIHRoZSBpX2Jsb2NrcyBmaWVsZAord2hlbiBodWdlX2ZpbGUgZmlsZSBzeXN0ZW0gZmVhdHVyZSBpcyBzZXQsIGJ1dCB0aGUgaW5vZGUgZG9lcyBub3QKK2hhdmUgdGhlIEhVR0VfRklMRV9GTCBmbGFnIHNldC4KKworRml4IGUyZnNjaydzIGhhbmRsaW5nIG9mIDY0LWJpdCBpX2Jsb2NrcyBmaWVsZHMuCisKK0UyZnNjayB3aWxsIG5vdyBwcmludCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayIsICJJbGxlZ2FsCitkb3VibGUtaW5kaXJlY3QgYmxvY2siLCBldGMuLCBpbnN0ZWFkIG9mICJJbGxlZ2FsIGJsb2NrICMtMSIgb3IKKyJJbGxlZ2FsIGJsb2NrICMtMiIsIGV0Yy4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciB1c2VycyB0bwordW5kZXJzdGFuZCB3aGF0IGhhcyBnb25lIHdyb25nLiAgKEFkZHJlc3NlcyBTb3VyY2VGb3JnZSBCdWc6ICMyODcxNzgyKQorCitNa2UyZnMgbm93IHdpbGwgb2J0YWluIGdldCBkZXZpY2UgdG9wb2xvZ3kgaW5mb3JtYXRpb24gZnJvbSBibGtpZCBhbmQKK3VzZSBpdCB0byBwb3B1bGF0ZSB0aGUgc3VwZXJibG9jayBzdHJpZGUgYW5kIHN0cmlwZSBzaXplcy4gIEl0IHdpbGwKK2Fsc28gd2FybiBpZiB0aGUgYmxvY2sgZGV2aWNlIGlzIG1pc2FsaWduZWQKKworRml4IGZpbGUgZGVzY3JpcHRvciBsZWFrcyBpbiBmc2NrIGFuZCBkZWJ1Z2ZzLiAgKEFkZHJlc3NlcyBOb3ZlbGwgQnVnOgorIyM1MjQ1MjYpCisKK0ZpeCB0aGUgbGliZXh0MmZzIGxpYnJhcnkgY29kZSB0byByb3VuZCB1cCB0aGUgYml0bWFwIHNpemUgdG8gYSA0LWJ5dGUKK2JvdW5kYXJ5LCB0byBwcmV2ZW50IHNwdXJpb3VzIHNlZyBmYXVsdHMgY2F1c2VkIGJ5IHRoZSB4ODYKK2FyY2hpdGVjdHVyZS4gIFRoaXMgZG9lc24ndCBhZmZlY3QgTGludXggc3lzdGVtcywgYnV0IHdhcyBhIG1ham9yCitwcm9ibGVtIG9uIGEgbnVtYmVyIG9mICpCU0Qgc3lzdGVtcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzIzMjg3MDgpCisKK0ZpeCByZXNpemUyZnMncyBtaW5pbXVtIHNpemUgcmVxdWlyZWQgZm9yIGEgZmlsZSBzeXN0ZW0gc28gaXQgZG9lc24ndAorZmFpbCB3aGVuICJyZXNpemUyZnMgLU0iIGlzIHJ1bi4gIChBZGRyZXNzZXMgUmVkSGF0IEJ1Z3ppbGxhOiAjNTE5MTMxKQorICAgIAorRHVtcGUyZnMgbm93IHByaW50cyBzdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUKK2pvdXJuYWwuCisgICAgCitBdm9pZCBwcmludGluZyBzY2FyeSBlcnJvciBtZXNzYWdlcyB3aGVuIGUyZnNjayBzdGFydHMgcnVubmluZworcHJvYmxlbXMgb24gbG93LW1lbW9yeSBzeXN0ZW1zLCBhcyBpdCB0ZW5kcyB0byBwYW5pYyBhbmQgbWlzbGVhZCB0aGUKK3VzZXIuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1MDk1MjkpCisKK0ZpeCBibGtpZCdzIG1vZHVsZXMuZGVwIHBhcnNlciBzbyBpdCBoYW5kbGVzIGNvbXByZXNzZWQgKC5rby5neikKK21vZHVsZXMgZmlsZXMuICAoQWRkcmVzcyBSZWQgSGF0IEJ1ZzogIzUxODU3MikKKyAgICAKK0ZpeCB0dW5lMmZzIHNvIGl0IGNhbiBhZGQgYSBqb3VybmFsIHdoZW4gYW4gZXh0ZW50LWVuYWJsZWQgZmlsZSBzeXN0ZW0KK2lzIG1vdW50ZWQuICAoQWRkcmVzc2VzIExhdW5jaHBhZCBidWc6ICM0MTY2NDgpCisKK1VwZGF0ZSBDemVjaCwgSW5kb25lc2lhbiwgUG9saXNoIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucyAoZnJvbSB0aGUKK1RyYW5zbGF0aW9uIFByb2plY3QpLgorICAgIAorVXBkYXRlL2NsYXJpZnkgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyODIyMTg2KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNTQwMTExKQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29uZmlndXJlIHNjcmlwdCBzdXBwb3J0cyB0aGUgLS13aXRoLWNjLCAtLXdpdGgtY2NvcHRzLCBhbmQKKy0td2l0aC1sZG9wdHMgb3B0aW9ucy4gIEluc3RlYWQsIHRoZSBtb3JlIHN0YW5kYXJkIHVzZSBvZiBDQz0sCitDQ0ZMQUdTPSwgYW5kIExERkxBR1M9IGluIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lIGlzIHVzZWQgaW5zdGVhZC4KK0Fsc28sIC0td2l0aC1sZCwgd2hpY2ggbmV2ZXIgd29ya2VkLCB3YXMgYWxzbyByZW1vdmVkLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyODQzMjQ4KQorCitUaGUgaW4tdHJlZSBoZWFkZXIgZmlsZXMgYXJlIG9ubHkgdXNlZCBpZiB0aGUgaW4tdHJlZSB1dWlkIG9yIGJsa2lkCitsaWJyYXJpZXMgYXJlIHVzZWQuICBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtLXByb3ZpZGVkIHV1aWQgb3IgYmxraWQKK2hlYWRlciBmaWxlcyBpZiB1c2luZyB0aGUgc3lzdGVtLXByb3ZpZGVkIGxpYnJhcmllcy4KKworRml4IHNvbWUgYnVpbGQgZmFpbHVyZXMgY2F1c2VkIGJ5IC0tZGlzYWJsZS0qIGNvbmZpZ3VyZSBvcHRpb25zLgorCitXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBhdXRvY29uZiAyLjY0LgorCisKK0UyZnNwcm9ncyAxLjQxLjkgKEF1Z3VzdCAyMiwgMjAwOSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGEgYnVnIGluIGUyZnNjayByb3V0aW5lcyBmb3IgcmVhbGxvY2F0aW5nIGFuIGlub2RlIHRhYmxlIHdoaWNoCitjb3VsZCBjYXVzZSBpdCB0byBsb29wIGZvcmV2ZXIgb24gYW4gZXh0NCBmaWxlc3lzdGVtIHdpdGggdGhlIEZMRVhfQkcKK2ZpbGVzeXN0ZW0gZmVhdHVyZSB3aXRoIGEgcmVsYXRpdmVseSByYXJlIChhbmQgc3BlY2lmaWMpIGZpbGVzeXN0ZW0KK2NvcnJ1cHRpb24uICBUaGlzIGZpeCBjYXVzZXMgZTJmc2NrIHRvIHRyeSB0byBmaW5kIHNwYWNlIGZvciBhIG5ldworcG9ydGlvbiBvZiB0aGUgaW5vZGUgdGFibGUgaW4gdGhlIGNvbnRhaW5pbmcgZmxleF9iZywgYW5kIGlmIHRoYXQKK2ZhaWxzLCB0aGUgbmV3IHBvcnRpb24gb2YgdGhlIGlub2RlIHRhYmxlIHdpbGwgYmUgYWxsb2NhdGVkIGluIGFueQorZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGZpbGVzeXN0ZW0uCisKK01ha2UgZTJmc2NrIGxlc3MgYW5ub3lpbmcgYnkgb25seSBhc2tpbmcgZm9yIHBlcm1pc3Npb24gdG8gcmVsb2NhdGUgYQorYmxvY2sgZ3JvdXAncyBpbm9kZSB0YWJsZSBvbmNlLCBpbnN0ZWFkIG9mIGZvciBldmVyeSBvdmVybGFwcGluZworYmxvY2suICBTaW1pbGFybHksIG9ubHkgYXNrIG9uY2UgdG8gcmVjb21wdXRlIHRoZSBibG9jayBncm91cAorY2hlY2tzdW1zLCBpbnN0ZWFkIG9mIG9uY2UgZm9yIGVhY2ggY29ycnVwdGVkIGJsb2NrIGdyb3VwJ3MgY2hlY2tzdW0uCisKK0ZpeCBmaWxlZnJhZyB0byBhdm9pZCBwcmludCB0aGUgZXh0ZW50IGhlYWRlciBpZiB0aGUgRklFTUFQIGlvY3RsIGlzCitub3QgcHJlc2VudCwgYW5kIGl0IG5lZWRzIHRvIGZhbGwgYmFjayB0byB1c2luZyB0aGUgRklCTUFQIGlvY3RsLgorCitGaXggZmlsZWZyYWcgdG8gY29ycmVjdGx5IHByaW50IHRoZSBudW1iZXIgb2YgZXh0ZW50cyBmb3IgemVyby1sZW5ndGgKK2ZpbGVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNTQwMzc2KQorCitGaWxlZnJhZyBub3cgaGFzIGEgLUIgb3B0aW9uIHdoaWNoIGZvcmNlcyB0aGUgdXNlIG9mIHRoZSBGSUJNQVAgaW9jdGwKK3RvIG1vcmUgZWFzaWx5IGRlYnVnIHRoZSBGSUJNQVAgY29kZS4KKworRml4ZWQgZmlsZWZyYWcgZm9yIG5vbi1leHRlbnQgYmFzZWQgZmlsZXMuCisKK0FkZCBhIG5ldyBwcm9ncmFtLCBlMmZyZWVmcmFnLCB3aGljaCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2ZyZWUgc3BhY2UgZnJhZ21lbnRhdGlvbiBpbiBhbiBleHQyLzMvNCBmaWxlc3lzdGVtLgorCitGaXggaW5vZGUgcmVzaXppbmcgdmlhIHR1bmUyZnMgLUkgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgaW4gdGhlCitmYWNlIG9mIG5vbi1lbXB0eSBiYWQgYmxvY2tzIGlub2RlcywgYW5kIGlmIHRoZSBmaWxlc3lzdGVtIHdhcworZm9ybWF0dGVkIHVzaW5nIHRoZSAibWtlMmZzIC1FIHN0cmlkZT1OIiBvcHRpb24gZm9yIFJBSUQgYXJyYXlzLgorCitGaXggcmVncmVzc2lvbiBpbiBleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkgY2F1c2VkIGUyZnNjayAtZkQgdG8gZmFpbAorYW5kIGNvcnJ1cHQgbGFyZ2UgZGlyZWN0b3JpZXMgaWYgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBzaHJpbmsgYnkgbW9yZQordGhhbiBvbmUgYmxvY2suICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1Mzc1MTApCisgICAgCitGaXggZTJmc2NrJ3MgYnVnZ3lfaW5pdF9zY3JpdHBzPTEgc28gdGhhdCB0aGUgaWYgdGhlIGxhc3Qgd3JpdGUgYW5kL29yCitsYXN0IG1vdW50IHRpbWVzIGFyZSBpbiB0aGUgZnV0dXJlLCB0aGV5IGFyZSBjb3JyZWN0ZWQgZXZlbiBpZgorYnVnZ3lfaW5pdF9zY3JpcHRzIGlzIHNldC4gIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHJlc2l6ZTJmcword2lsbCByZWZ1c2UgdG8gcmVzaXplIHRoZSBmaWxlc3lzdGVtLCBldmVuIGFmdGVyIHJ1bm5pbmcgImUyZnNjayAtZiIuCisoQWRkcmVzc2VzIExhdW5jaHBhZCBidWc6ICMzNzM0MDkpCisKK0UyZnNjayB3aWxsIG5vdyBwcmludCBtdWNoIGZ1bGxlciBpbmZvcm1hdGlvbiB3aGVuIHRoZSBsYXN0IG1vdW50IHRpbWUKK29yIGxhc3Qgd3JpdHRlbiB0aW1lIGlzIGluIHRoZSBmdXR1cmUsIHNpbmNlIG1vc3QgcGVvcGxlIGNhbid0IHNlZW0gdG8KK2JlbGlldmUgdGhlaXIgZGlzdHJpYnV0aW9uIGhhcyBidWdneSBpbml0IHNjcmlwdHMsIG9yIHRoZXkgaGF2ZSBhCitmYWlsZWQgQ01PUy9SVFMgY2xvY2sgYmF0dGVyeS4KKworRW5oYW5jZSBkdW1wZTJmcyB0byBkdW1wIHRoZSBleHRlbnQgaW5mb3JtYXRpb24gdmlhIHRoZSAnc3RhdCcKK2NvbW1hbmQsIGFuZCBtb3JlIGRldGFpbGVkIGV4dGVudCBpbmZvcm1hdGlvbiB2aWEgdGhlIG5ldyBjb21tYW5kCisnZHVtcF9leHRlbnRzJy4KKyAgICAKK1VwZGF0ZSBGcmVuY2gsIFBvbGlzaCwgQ3plY2gsIGFuZCBTd2VlZGlzaCB0cmFuc2xhdGlvbiBmcm9tIHRoZQorVHJhbnNsYXRpb24gUHJvamVjdC4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLgorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCBtaXNjZWxsYW5lb3VzIGdjYyAtV2FsbCB3YXJuaW5ncy4KKworRml4ZWQgbWVtb3J5IGxlYWsgaW4gZXJyb3IgcGF0aCBpbiBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoKQorCitGaXhlZCBub24tTGludXggYnVpbGQgb2YgdGhlIGludGwgZGlyZWN0b3J5IGJ5IGFkZGluZyBzdXBwb3J0IGZvciB0aGUKK0UvUS9WIG1hY3Jvcy4KKworVGhlIGJpdG1hcCByZWFkL3dyaXRlIGZ1bmN0aW9ucyBub3cgdHJlYXQgdW5pbml0aWFsaXplZCBiaXRtYXBzIGFzCit1bmFsbG9jYXRlZDsgdGhpcyBmaXhlcyBhIG51bWJlciBvZiBwcm9ibGVtcyBpbiBhbGwgZTJmc3Byb2dzIGZvciBleHQ0CitmaWxlc3lzdGVtcyB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBhbGxvY2F0ZSBuZXcgYmxvY2tzIG9yIGlub2RlcywgYW5kCit0aGVyZSBhcmVuJ3QgYW55IGZyZWUgYmxvY2tzIG9yIGlub2RlcyBpbiB0aGUgYWxyZWFkeS11c2VkIGJsb2NrCitncm91cHMuCisKK0ltcHJvdmUgZXh0MmZzX2V4dGVudF9zZXRfYm1hcCgpIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBleHRlbnRzIHdoaWNoCitnZXQgaW5zZXJ0ZWQgaW50byB0aGUgZXh0ZW50IHRyZWUgd2hlbiB0aGV5IGFyZSBub3QgbmVlZGVkLgorICAgIAorCitFMmZzcHJvZ3MgMS40MS44IChKdWx5IDExLCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IHJlc2l6ZTJmcydzIG9ubGluZSByZXNpemluZywgZml4aW5nIGEgcmVncmVzc2lvbiB3aGljaCBpbgorZTJmcHNyb2dzIDEuNDEuNy4gICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1MzU0NTIpCisKK0ZpeCBwb3RlbnRpYWwgZmlsZXN5c3RlbSBjb3JydXB0aW9ucyBjYXVzZWQgYnkgdXNpbmcgcmVzaXplMmZzIHRvCitzaHJpbmtpbmcgZXh0NCBmaWxlc3lzdGVtcyB3aXRoIGV4dGVudHMgZW5hYmxlZC4gIChBZGRyZXNzZXMgUmVkIEhhdAorQnVnOiAjNTEwMzc5KQorCitPcHRpbWl6ZSB1dWlkX2dlbmVyYXRlKCkgdG8gYXZvaWQgcnVubmluZyB1dWlkZCBpZiBpdCBpcyBub3Qgc2V0dWlkIG9yCitzZXRnaWQgYW5kIHRoZSBjdXJyZW50bHkgcnVubmluZyBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KK3RoZSB1dWlkZCB3b3JrIGRpcmVjdG9yeS4KKworQWRkIHNhZmV0eSBjaGVja3MgKGZvciBub24tTGludXggc3lzdGVtcykgc28gdGhhdCB1dWlkZCBpc24ndCBydW4gd2l0aAorZmlsZSBkZXNjcmlwdG9ycyAwLCAxLCBhbmQgMiBjbG9zZWQ7IGFuZCBpZiB0aGV5IGFyZSBjbG9zZWQsIHV1aWRkCit3aWxsIGJlIGNhcmVmdWwgbm90IHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIGl0cyB1bml4IGRvbWFpbgorc29ja2V0IHdoZW4gaXQgZGV0YWNoZXMgaXRzZWxmIGZyb20gdGhlIGNvbnRyb2xsaW5nIHR0eS4gIEFsc28gYWRkCitzYWZldHkgY2hlY2tzIHNvIHRoYXQgaWYgdGhlIHVuaXggZG9tYWluIHNvY2tldCBiZXR3ZWVuIHRoZSB1dWlkCitsaWJyYXJ5IGFuZCB1dWlkZCBwcm9ncmFtIGlzIGNsb3NlZCBmb3IgYW55IHJlYXNvbiwgYm90aCB0aGUgbGlicmFyeQorYW5kIHRoZSB1dWlkZCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluc3RlYWQgb2YgbG9vcGluZworaW4gYW4gaW5maW5pdGUgbG9vcC4KKworVGhlIGUyY3JvbmNoZWNrIHNjcmlwdCwgd2hpY2ggY3JlYXRlcyBhbiBMVk0gc25hcHNob3QgYW5kIHRoZW4gY2hlY2tzCit0aGUgZXh0My80IGZpbGVzeXN0ZW0gdmlhIHRoZSBMVk0gc25hcHNob3QsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZQorY29udHJpYiBkaXJlY3RvcnkuCisKK0ZpeCBmaWxlZnJhZyBwcm9ncmFtIGZvciBmaWxlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIDE0NCBleHRlbnRzLgorCitVcGRhdGUgRnJlbmNoLCBQb2xpc2gsIEN6ZWNoLCBJbmRvbnNpYW4sIGFuZCBTd2VlZGlzaCB0cmFuc2xhdGlvbiBmcm9tCit0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICM1MzU1MzApCisKK1VwZGF0ZS9jbGFyaWZ5IG1hbiBwYWdlcy4KKworUHJvZ3JhbW1lcidzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXV1aWQuCisKK0Rvbid0IGJ1aWxkIHV1aWRnZW4gaWYgY29uZmlndXJlZCB3aXRoIC0tZGlzYWJsZS11dWlkLgorCitBZGQgdGhlIG5ldyBsaWJyYXJ5IGZ1bmN0aW9uIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcF9yYW5nZSgpLCBhbmQKK29wdGltaXplZCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoKSwgd2hpY2ggd2lsbCBiZSBuZWVkZWQgZm9yCitmdXR1cmUgb3B0aW1pemF0aW9ucyBmb3IgZTJmc2NrLgorCitGaXggbWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciBsaWJjb21fZXJyIHNvIHRoYXQgdGhlIE1ha2VmaWxlcyB3b3JrCit3ZWxsIG9uIG5vbi1HTlUgbWFrZSBwcm9ncmFtLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBQYXRjaGVzOiAjMjgxMzgwOSkKKworRW5oYW5jZSB0aGUgYnVpbGQgc3lzdGVtIHNvIHRoYXQgdGhlIGZ1bGwgc2V0IG9mIGNvbW1hbmRzIGV4ZWN1dGVkIGJ5Cit0aGUgTWFrZWZpbGVzIGFyZSBkaXNwbGF5ZWQsIGluc3RlYWQgb2YgdGhlIExpbnV4IGtlcm5lbCBzdW1tYXJ5CitvdXRwdXQsIGlmIHRoZSBidWlsZCB3YXMgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMsIG9yCitpZiBHTlUgbWFrZSBpcyBpbiB1c2UgYW5kIHRoZSBWIHZhcmlhYmxlIGlzIG5vbi1udWxsLCBpLmUuLCB2aWEgIm1ha2UKK1Y9MSIuCisKKworRTJmc3Byb2dzIDEuNDEuNyAoSnVuZSAyOSwgMjAwOSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIGJ1ZyBpbiBsaWJleHQyZnMgd2hpY2ggY2FuIGNhdXNlIGUyZnNjayBhbmQgcmVzaXplMmZzIHRvIHdyaXRlCit1bmluaXRhbGl6ZWQgZGF0YSBpbnRvIHRoZSBwb3J0aW9uIG9mIHRoZSBpbm9kZSBiZXlvbmQgdGhlIGZpcnN0IDEyOAorYnl0ZXMgd2hlbiBvcGVyYXRpbmcgb24gaW5vZGVzIG1hcHBlZCB2aWEgZXh0ZW50czsgcG90ZW50aWFsbHkKK2NvcnJ1cHRpbmcgZmlsZXN5c3RlbXMuCisKK0ZpeCBtZW1vcnkgbGVha3MgaW4gZTJmc3Byb2dzLCBpbmNsdWRpbmcgYSB2ZXJ5IGxhcmdlIG1lbW9yeSBsZWFrCit3aGljaCBjYW4gY2F1c2UgZTJmc2NrIHRvIHJ1biBvdXQgb2YgbWVtb3J5IHdoZW4gY2hlY2tpbmcgdmVyeSBsYXJnZQorZmlsZXN5c3RlbXMgdXNpbmcgZXh0ZW50cy4KKworVGhlIGxvZ3NhdmUgcHJvZ3JhbSB3aWxsIG5vdyBmaWx0ZXIgb3V0IHRoZSBeQSBhbmQgXkIgY2hhcmFjdGVycyB3aGVuCit3cml0aW5nIHRvIHRoZSBjb25zb2xlLgorCitIYXJkZW4gZXh0MmZzX3ZhbGlkYXRlX2VudHJ5KCkgc28gdGhhdCBsc2RlbCB3aWxsIG5vdCByZWFkIGJleW9uZCB0aGUKK2VuZCBvZiB0aGUgYmxvY2sgZXZlbiBpZiB0aGUgZGlyZWN0b3J5IGJsb2NrIGlzIGNvcnJ1cHRlZC4KKworRml4IGRlYnVnZnMgZnJvbSBjb3JlIGR1bXBpbmcgaWYgdGhlIGxvZ2R1bXAgY29tbWFuZCBmYWlscyB0byBvcGVuIHRoZQorb3V0cHV0IGZpbGUuCisKK0VuaGFuY2UgYmFkYmxvY2tzIHRvIHByaW50IHRoZSBjdXJyZW50bHkgdGVzdGVkIGJsb2NrIG51bWJlciB3aGVuCitpbnRlcnJ1cHRlZCB3aXRoIF5DLgorCitGaXggbHNhdHRyIHRvIGV4aXQgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cyB3aGVuIGl0IGVuY291bnRlcnMgZXJyb3JzLgorKEFkZHJlc3NlcyBSZWRIYXQgQnVnemlsbGEgIzQ4OTg0MSkKKworRml4IGUyZnNwcm9ncyB0byB1c2UgdGhlIHNhbWUgZW5jb2RpbmcgZm9yIHJlY19sZW4gaW4gNjRrIChhbmQgbGFyZ2VyKQorZmlsZXN5c3RlbXMgYXMgdGhlIGtlcm5lbCB3aGVuIGVuY29kaW5nIHJlY19sZW4gPj0gNjRrLiAgRm9yIDY0aworZmlsZXN5c3RlbXMgKGN1cnJlbnRseSBhbGwgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgZTJmc3Byb2dzLCB0aGlzIGlzCitvbmx5IGEgbWlub3IgY29ybmVyIGNhc2UpLgorCitSZXNpemUyZnMgd2lsbCBub3cgdXBkYXRlIHRoZSBqb3VybmFsIGJhY2t1cCBmaWxlZHMgaW4gdGhlIHN1cDBlcmJsb2NrCitpZiB0aGUgam91cm5hbCBpcyBtb3ZlZDsgdGhpcyBhdm9pZHMgYW4gdW5uZWNlc3NhcnkgZnVsbCBmc2NrIGFmdGVyCityZXNpemluZyB0aGUgZmlsZXN5c3RlbS4gIChBZGRyZXNzZXMgUmVkSGF0IEJ1Z3ppbGxhOiAjNTA1MzM5KQorICAgIAorRml4IGxpYmV4dDJmcyB0byBwcm9wZXJseSBpbml0aWFsaXplIGlfZXh0cmFfc2l6ZSB3aGVuIGNyZWF0aW5nIHRoZQoram91cm5hbCBhbmQgcmVzaXplIGlub2Rlcy4KKworQ2hhbmdlIGJhZGJsb2NrcyB0byBhbGxvdyBibG9jayBzaXplcyBsYXJnZXIgdGhhbiA0ay4KKworRml4IGZpbGVmcmFnIHByb2dhbSBzbyBpdCBjb3JyZWN0bHkgY2hlY2tzIGZvciBlcnJvcnMgZnJvbSB0aGUgZmllbWFwIGlvY3RsLgorCitVcGRhdGUgQ2hpbmVzZSBhbmQgQ3plY2ggdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworQ2xlYW4gdXAgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzUzMTM4NSBhbmQgIzUyMzA2MykKKworCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgLS1kaXNhYmxlLWxpYnV1aWQgb3B0aW9uIHRvIGNvbmZpZ3VyZSB3aGljaCB1c2VzIGFuIGluLXN5c3RlbQoraW5zdGFsbGVkIHZlcnNpb24gb2YgbGlidXVpZDsgdGhlIHByaXZhdGUgdmVyc2lvbiBpcyBlbmFibGVkIGJ5CitkZWZhdWx0LgorCitBZGQgLS12YWxncmluZC1sZWFrY2hlY2sgb3B0aW9uIHRvIHRoZSB0ZXN0X3NjcmlwdCBwcm9ncmFtIHdoaWNoIHJ1bnMKK3ZhbGdyaW5kIHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgdG8gZmluZCBtZW1vcnkgbGVha3MuCisKKworRTJmc3Byb2dzIDEuNDEuNiAoTWF5IDMwLCAyMDA5KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggYSBjcml0aWNhbCByZWdyZXNzaW9uIGluIGUyZnNjayBpbnRyb2R1Y2VkIHZlcnNpb24gMS40MS41IHdoaWNoCitjYW4gdW5kbyB1cGRhdGVzIHRvIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycyBhZnRlciBhIGpvdXJuYWwgcmVwbGF5LgorCitJZiBlMmZzY2sgcmVjZWl2ZXMgYW4gSS9PIGVycm9yIHdoaWxlIHJlcGxheWluZyB0aGUgam91cm5hbCwgcHJvbXB0Cit0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBpZ25vcmUgdGhlIGVycm9yIG9yIG5vdDsgaWYgZTJmc2NrIGlzCitydW4gaW4gcHJlZW4gbW9kZSwgZm9yY2UgZnNjayB0byBhYm9ydCB0aGUgcHJlZW4gcGFzcy4KKworRml4IGEgYnVnIHdoaWNoIHdvdWxkIGNhdXNlIGUyZnNjayB0byBjb3JlIGR1bXAgaWYgdGhlIGZpbGVzeXN0ZW0KK2NvbnRhaW5zIGEgY29ycnVwdCBleHRlbnQgaGVhZGVyLCBhbmQgdGhlIHVzZXIgZGVjbGluZXMgdG8gY2xlYXIgdGhlCitpbm9kZS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMjc5MTc5NCkKKyAgICAKK0ZpeCBlMmZzY2sgdG8gcmVzdGFydCBvbmx5IG9uY2UgaW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgYmxvY2sgZ3JvdXBzCit3aGljaCBpbm9kZXMgaW4gdXNlIHRoYXQgYXJlIGluIHRoZSB1bmluaXRpYWxpemVkIHBhcnQgb2YgdGhlIGJsb2NrCitncm91cCdzIGlub2RlIHRhYmxlLgorCitUbyByZWR1Y2UgdXNlciBjb25mdXNpb24sIGlmIHRoZSAvZXRjL210YWIgZmlsZSBpcyBtaXNzaW5nCitleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQgYW5kIGV4dDJmc19jaGVja19pZl9tb3VudGVkIHdpbGwgcmV0dXJuIGEKK25ldywgZXhwbGljaXQgZXJyb3IgY29kZSB0byBpbmRpY2F0ZSB0aGlzIGNhc2UuICBUaGlzIHdpbGwgY2F1c2UKK2UyZnNjayB0byBnaXZlIGEgY2xlYXJlciBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgaXMgdXNpbmcgYnVnZ3kKK3Jlc2N1ZSBDRCdzIHRoYXQgZG9uJ3QgcHJvcGVybHkgc2V0IHVwIC9ldGMvbXRhYi4gIChBZGRyZXNzZXMgRGViaWFuCitCdWc6ICM1Mjc4NTkpCisgICAgCitGaXggZTJmc2NrIHNvIHRoYXQgaWYgdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgYXJlIGNvcnJ1cHRlZCwgYnV0Cit0aGUgYmFja3VwIHN1cGVyYmxvY2sgaXMgZW50aXJlbHkgaW52YWxpZCwgdG8gZ28gYmFjayB0byB1c2luZyAoYW5kCitmaXhpbmcpIHRoZSBwcmlhcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGdpdmluZyB1cAorb24gdGhlIGZpbGVzeXN0ZW0uICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1MTY4MjApCisgICAgCitDaGFuZ2UgZTJmc2NrIHRvIG5vdCBhYm9ydCBhIHByZWVuIHBhc3MgaWYgYW4gaW5vZGUgaXMgZm91bmQgdG8gaGF2ZQoraV9maWxlX2FjbF9oaSBub24temVyby4gIEV4dDMgZmlsZXN5c3RlbXMgZG9uJ3QgY2FyZSwgYW5kIG5ld2VyCitrZXJuZWxzIChwb3N0IDIuNi4yOSkgd2lsbCBpZ25vcmUgdGhpcyBmaWVsZC4gIFNvIGxldCdzIGZpeCBpdAorYXV0b21hdGljYWxseSBkdXJpbmcgdGhlIHByZWVuIHBhc3MgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSB1c2VyIHRvIGZpeAordGhpcyB1cCBtYW51YWxseS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUyNjUyNCkKKyAgICAKK0FkZCByZXNvdXJjZSB0cmFja2luZyBmb3IgZTJmc2NrIHBhc3NlcyAxYiB0aHJvdWdoIDFkLgorCitTcGVlZCB1cCBlMmZzY2sgYnkgZWxpbWluYXRpbmcgdW5uZWNlc3Nhcnkgam91cm5hbCBjaGVja3MgaWYgdGhlCitmaWxlc3lzdGVtIGlzIGFscmVhZHkgbW91bnRlZCBhbmQgZG9lc24ndCBuZWVkIHJlY292ZXJ5IChzaW5jZSB0aGUKK2tlcm5lbCB3b3VsZCBoYXZlIHJ1biB0aGUgam91cm5hbCB3aGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkLikKK0Fsc28gc3BlZWQgdXAgZTJmc2NrIGJ5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IKK3VwZGF0ZXMgaW4gZXh0MmZzX2Nsb3NlKCkuCisKK0FkZCBzdXBwb3J0IHRvIGNoYXR0ciB0byBtaWdyYXRlIGlub2RlcyBmcm9tIHVzaW5nIGRpcmVjdC9pbmRpcmVjdAorYmxvY2tzIHRvIGV4dGVudHMuCisKK0F2b2lkIGNvcnJ1cHRpbmcgdGhlIGZpbGVzeXN0ZW0gaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBzaHJpbmsgYQorZmlsZXN5c3RlbSB1c2luZyByZXNpemUyZnMgc21hbGxlciB0aGFuIHBvc2libGUgYnkgbWFraW5nCitleHQyZnNfc2V0X2JtYXAoKSBtb3JlIGNhcmVmdWwgbm90IHRvIGRlbGV0ZSB0aGUgb2xkIGJsb2NrIHVudGlsIHRoZQorbmV3IGJsb2NrIGNhbiBiZSBpbnNlcnRlZC4gIEluIGFkZGl0aW9uLCBmaXggYSBidWcgaW4gaG93IHRoZSBtaW5pbXVtCitzaXplIG9mIHRoZSBmaWxlc3lzdGVtIChwbHVzIGEgc2FmZXR5IG1hcmdpbikgaXMgY2FsY3VsYXRlZCwgYW5kCittb2RpZnkgcmVzaXplMmZzIHRvIHJlZnVzZSB0byBzaHJpbmsgdGhlIGZpbGVzeXN0ZW0gYmVsb3cgdGhhdCBtaW5pbXVtCitzaXplIHdpdGhvdXQgdGhlIGZvcmNlIGZsYWcuCisKK1RlYWNoIGJsa2lkIHRvIHRyeSB0byBmaWd1cmUgb3V0IERNIGRldmljZSBuYW1lcyB1c2luZyB0YWtlIGFkdmFudGFnZQorb2YgaW5mb3JtYXRpb24gaW4gc3lzZnMgd2hlbiBydW5uaW5nIG9uIGtlcm5lbHMgKDIuNi4yOSBhbmQgbGF0ZXIpCit3aGljaCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gL3N5cy9ibG9jay9kbS08Tj4vZG0vbmFtZTsgdGhpcyBpcworbXVjaCBmYXN0ZXIgdGhhbiBzY2FubmluZyBmb3IgdGhlIGRldm5jaWUgbnVtYmVyIGluIC9kZXYvbWFwcGVyLgorCitGaXggYmxraWQgdG8gcHJlZmVyIC9kZXYvbWFwcGVyLzxuYW1lPiBkZXZpY2UgbmFtZXMgaW5zdGFkIG9mIHRoZQorcHJpdmF0ZSAvZGV2L2RtLVggbmFtZXMuCisKK0FkZCBhbiAtYSBvcHRpb24gdG8gZGVidWdmcydzIGNsb3NlX2ZpbGVzeXMgY29tbWFuZCB3aGljaCB3cml0ZXMgYW55CitjaGFuZ2VzIHRvIHRoZSBzdXBlcmJsb2NrIG9yIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIHRvIGFsbCBvZiB0aGUKK2JhY2t1cCBzdXBlcmJsb2NrIGxvY2F0aW9ucy4KKyAgICAKK0FkZCBzdXBwb3J0IHRvIHRoZSBmaWxlZnJhZyBwcm9ncmFtIHRvIHVzZSB0aGUgRklFTUFQIGlvY3RsLgorCitVcGRhdGUgQ2hpbmVzZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitDbGVhbiB1cCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYTogIzUwMjk3MSBhbmQKK0xhdW5jaHBhZCBCdWc6ICMzODE4NTQpCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjNTA2MDY0KQorCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCB0ZXN0IGNvZGUgdG8gbWFrZSBzdXJlIGUyZnNjaydzIHByb2JsZW0uYyBkb2Vzbid0IGhhdmUgdHdvIHByb2JsZW0KK2NvZGVzIGFzc2lnbmVkIHRvIGR1cGxpY2F0ZSB2YWx1ZXMuCisKK0F2b2lkIHVzaW5nIGEgaGFyZC1jb2RlZCBwYXRoIGZvciAvYmluL3JtIGluIGJsb2NrJ3MgdGVzdF9wcm9iZS5pbi4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMjc4MDIwNSkKKworQ2xlYW4gdXAgZTJmc2NrIGJ5IHJlbW92aW5nICNpZmRlZiBSRVNPVVJDRV9UUkFDSyBieSBhZGRpbmcgYW4gZW1wdHkKK2Z1bmN0aW9uIGRlY2xhcmF0aW9uIGZvciBpbml0X3Jlc291cmNlX3RyYWNrKCkgYW5kCitwcmludF9yZXNvdXJjZV90cmFjaygpIHdoZW4gUkVTT1VSQ0VfVFJBQ0sgaXMgbm90IGRlZmluZWQuCisKK1RoZSB0ZXN0IGNvZGUgd2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgdHN0X2NzdW0gcHJvZ2FtIGhhcyBiZWVuCittb3ZlZCBmcm9tIGZyb20gdHN0X2NzdW0uYyBpbnRvIGNzdW0uYyB1bmRlciBhbiAjaWZkZWYgREVCVUcgdG8gdG8KK2F2b2lkIGNvbXBpbGUgcHJvYmxlbXMgY2F1c2VkIGJ5IG5vdCBoYXZpbmcgYSBwcm90b3R5cGUgZm9yCitleHQyZnNfZ3JvdXBfZGVzY19jc3VtKCkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZyAjMjQ4NDMzMSkKKworVXBkYXRlIHRoZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZmlsZSB0byB0aGUgbGF0ZXN0IGZyb20gdGhlCitGU0YsIHRvIGFsbG93IGUyZnNwcm9ncyB0byBidWlsZCBvbiB0aGUgYXZyMzIgcGxhdGZvcm0uICAoQWRkcmVzc2VzCitEZWJpYW4gQnVnOiAjNTI4MzMwKQorCitBZGQgYSBuZXcgZnVuY3Rpb24sIGV4dDJmc19leHRlbnRfb3BlbjIoKSwgd2hpY2ggYmVoYXZlcyBsaWtlCitwZXh0MmZzX2V4dGVudF9vcGVuKCksIGJ1dCB1c2VzIHRoZSB1c2VyLXN1cHBsaWVkIGlub2RlIHN0cnVjdHVyZQord2hlbiBvcGVuaW5nIGFuIGV4dGVudCBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlIGlub2RlIGZyb20gZGlzay4KKworCitFMmZzcHJvZ3MgMS40MS41IChBcHJpbCAyMywgMjAwOSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXggYSBudW1iZXIgb2YgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGJ1Z3MgaW4gcmVzaXplMmZzIHdoZW4gZ3Jvd2luZworb3Igc2hyaW5raW5nIGV4dDQgZmlsZXN5c3RlbXMgb2ZmLWxpbmUgKGkuZS4sIHdoZW4gdGhlIGV4dDQgZmlsZXN5c3RlbQoraXMgbm90IG1vdW50ZWQpLgorCitEZWJ1Z2ZzIGNhbiBub3cgc2V0IGlfZmlsZV9hY2xfaGlnaCB2aWEgdGhlIHNldF9pbm9kZXNfZmllbGQgY29tbWFuZCwKK2FuZCBwcmludCBhIDY0LWJpdCBmaWxlIGFjbC4gIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgZmlsZXN5c3RlbQorY29ycnVwdGlvbnMgd2hlcmUgdGhlIGhpZ2ggYml0cyBvZiBpX2ZpbGVfYWNsX2hpZ2ggYXJlIHNldC4gIEUyZnNjaword2lsbCBkZXRlY3QgYW5kIGZpeCBub24temVybyBpX2ZpbGVfYWNsX2hpZ2ggb24gMzItYml0IGZpbGVzeXN0ZW1zCitzaW5jZSBzb21lIExpbnV4IGtlcm5lbCB2ZXJzaW9ucyBwYXkgYXR0ZW50aW9uIHRvIHRoaXMgZmllbGQgZXZlbiB3aGVuCit0aGV5IHNob3VsZG4ndC4KKworU3BlZWQgdXAgZTJmc2NrIHdoZW4gY2hlY2tpbmcgY2xlYW4gZmlsZXN5c3RlbXMgYnkgYXZvaWRpbmcKK3VubmVjZXNzYXJ5IGJsb2NrIHJlYWRzLCBhbmQgY29hbGVzY2luZyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcgorYmxvY2tzIHNvIHRoZXkgYXJlIHJlYWQgdXNpbmcgYSBzaW5nbGUgcmVhZCBvcGVyYXRpb24uCisKK1RoZSBsaWJ1dWlkIGxpYnJhcnkgd2lsbCBub3cgY2xvc2UgYWxsIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIHJ1bm5pbmcKK3V1aWRkLiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiB0aGUgY2FsbGluZyBwcm9ncmFtIGhhcyBvcGVuIHNvY2tldHMKK3doaWNoIHRoZW4gbmV2ZXIgZ2V0IGNsb3NlZCBiZWNhdXNlIHV1aWRkIGlzIGEgbG9uZy1ydW5uaW5nIGhlbHBlcgorZGFlb21uLiAgKEFkZHJlc3NlcyBMYXVuY2hwYWQgYnVnOiAjMzA1MDU3KQorCitJbiBvcmRlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBmdWxsIGZpbGVzeXN0ZW0gY2hlY2tzIGJ5IGUyZnNjayBhZnRlcgorYW4gb24tbGluZSByZXNpemUsIGUyZnNjayB3aWxsIGlnbm9yZSB0aGUgTkVFRFNfUkVDT1ZFUlkgZmxhZyBzZXQgb24KK3RoZSBiYWNrdXAgc3VwZXJibG9ja3MuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICM0NzE5MjUpCisKK01rZTJmcyB3aWxsIGF2b2lkIHRyeWluZyB0byBjcmVhdGUgdGhlIGpvdXJuYWwgd2hlbiBydW4gaW4KK3N1cGVyYmxvY2stb25seSBtb2RlIChta2UyZnMgLVMpLCBzaW5jZSB0aGUgbGVmdC1vdmVyIGpvdXJuYWwgaW4gdGhlCitpbm9kZSB0YWJsZSB3aWxsIGNhdXNlIG1rZTJmcyB0byBmYWlsLgorCitGaXggYSBidWcgaW4gbGliZXh0MmZzIGZ1bmN0aW9ucyB0aGF0IGNoZWNrIHRvIHNlZSBpZiBhIHBhcnRpY3VsYXIKK2RldmljZSBvciBmaWxlc3lzdGVtIGltYWdlIGlzIG1vdW50ZWQsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZXNlCitmdW5jdGlvbnMgdG8gcmVwb3J0IHRoYXQgYSBmaWxlIGlkZW50aWNhbCB0byB0aGUgKHJlbGF0aXZlKSBwYXRobmFtZQordXNlZCBieSBhIHBzZXVkby1maWxlc3lzdGVtIHdhcyBtb3VudGVkIHdoZW4gaW4gZmFjdCBpdCB3YXMgbm90LgorCitVcGRhdGUgQ3plY2ggdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworQWRkIENoaW5lc2UgKHNpbXBsaWZpZWQpIHRyYW5zbGF0aW9uIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKK0ZpeCBzdXBwb3J0IGZvciBleHRlcm5hbCBqb3VybmFscyAod2hpY2ggd2FzIGJyb2tlbiBpbiBlMmZzcHJvZ3MKKzEuNDEuNCkuCisKK0ZpeCBhIHJlZ3Jlc3Npb24gaW4gZGVidWdmcyB3aGVyZSB0aGUgInN0YXQiIGNvbW1hbmQgd2hlbiBubworZmlsZXN5c3RlbSB3YXMgb3BlbiB3b3VsZCBjYXVzZSBkZWJ1Z2ZzIHRvIGNyYXNoIHdpdGggYSBzZWdtZW50YXRpb24KK3Zpb2xhdGlvbi4KKworU3RhcnRpbmcgaW4gdGhlIDIuNi4yOSBsaW51eCBrZXJuZWwsIHRoZSBleHQ0IGZpbGVzeXN0ZW0gZHJpdmVyIGNhbiBiZQordXNlZCB0byBzdXBwb3J0IGZpbGVzeXN0ZW1zIHdpdGhvdXQgYSBqb3VybmFsLiAgVXBkYXRlIHRoZSBibGtpZAorbGlicmFyeSBzbyBpdCB1bmRlcnN0YW5kcyB0aGlzLgorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIHJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBibGtpZCBjYWNoZQorcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgZGlzayBpZiBwYXJ0aXRpb25zIGFyZSBmb3VuZCwgc2luY2UgcHJlc3VhbWJseQordGhlIGRldmljZSBwcmV2aW91c2x5IGhhZCBubyBwYXJ0aXRpb24gdGFibGUsIGJ1dCBoYXMgbm93IHRyYW5zaXRpb25lZAordG8gdXNpbmcgYSBwYXJ0aXRpb24gdGFibGUuCisKK0FkZCBhIGNoZWNrIHRvIG1rZTJmcyBhbmQgdHVuZTJmcyB0aGF0IHRoZSBhcmd1bWVudCB0byB0aGUgLW0gb3B0aW9uCisod2hpY2ggc3BlY2lmaWVzIHRoZSByZXNlcnZlZCByYXRpbykgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUxNzAxNSkKKworQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIHRoZSBudW1iZXIga2lsb2J5dGVzIHdyaXR0ZW4gdG8gdGhlCitmaWxlc3lzdGVtIHZpYSB0aGUgc3VwZXJibG9jayBmaWVsZCBzX2tieXRlc193cml0dGVuLiAgSXQgd2lsbCBiZQordXBkYXRlZCBieSB0aGUga2VybmVsIGFzIHdlbGwgYXMgYnkgZTJmc3Byb2dzIHByb2dyYW1zIHdoaWNoIHdyaXRlIHRvCit0aGUgZmlsZXN5c3RlbS4gIFRoaXMgaXMgdXNlZnVsIGZvciB0cmFja2luZyB0aGUgd2VhciB0byBmaWxlc3lzdGVtcworb24gU29saWQgU3N0YXRlIERyaXZlcy4KKworRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgaW4gdGhlIGxpYmV4dDJmcyBpbmZvIGZpbGUgYW5kIG1ha2VpbmZvCit2ZXJzaW9uIDQuMTIuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICM0ODE2MjApCisKK1VwZGF0ZS9jbGFyaWZ5IG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUxNTY5MywgIzM2NTYxOSkKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM1MDYyNzkpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBIdXJkIGNvbXBpbGF0aW9uIHByb2JsZW0gaW4gZTJmc2NrIGFuZCB0dW5lMmZzIChBZGRyZXNzZXMgRGViaWFuCitCdWc6ICM1MjE2MDIpCisKK0ZpeCB2YXJpb3VzIGdjYyBjb21waWxhdGlvbiB3YXJuaW5ncyBhbmQgb3RoZXIgcHJvZ3JhbW1pbmcgY2xlYW51cHMuCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICM0ODY5OTcpCisKK0FkZCBzdXBwb3J0IGZvciBidWlsZGluZyB0aGUgYmxraWQgY29tbWFuZCBzdGF0aWNhbGx5LgorCitBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHRoZSBidWlsdC1pbiBibGtpZCBsaWJyYXJ5IGluIGZhdm9yIG9mIGEKK3N5c3RlbS1pbnN0YWxsZWQgYmxraWQgaW1wbGVtZW50YXRpb24gdmlhIHRoZSBjb25maWd1cmUgb3B0aW9uCistLWRpc2FibGUtbGliYmxraWQuCisKKworRTJmc3Byb2dzIDEuNDEuNCAoSmFudWFyeSAyNywgMjAwOSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIHNvbWV0aW1lcyBjYXVzZSBibGtpZCB0byByZXR1cm4gYW4gZXhpdCB2YWx1ZQorb2YgemVybyBmb3IgYSBub24tZXhpc3RlbnQgZGV2aWNlIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzUwMjU0MSkKKworQmxraWQgd2lsbCBub3cgcmVjb2duaXplIGV4dDMgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIHRoZSB0ZXN0X2ZzIGZsYWcKK3NldCBhcyBleHQzIGZpbGVzeXN0ZW1zLgorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIG5vdyByZWNvZ25pemUgYnRyZnMgZmlsZXN5c3RlbXMgYW5kIHN3YXAKK2RldmljZXMgY3VycmVudGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSBzdXNwZW5kLgorCitUdW5lMmZzIG5vdyB1cGRhdGVzIHRoZSBibG9jayBncm91cCBjaGVja3N1bXMgd2hlbiBjaGFuZ2luZyB0aGUgVVVJRAordG8gYXZvaWQgY2F1c2luZyBlMmZzY2sgdG8gY29tcGxhaW4gdm9jaWZlcm91c2x5IGF0IHRoZSBuZXh0IHJlYm9vdC4KKworVHVuZTJmcydzIGlub2RlIHNpemUgcmVzaXppbmcgYWxnb3JpdGhtcyBoYXZlIGJlZW4gZml4ZWQgc28gaXQgaXMgbm90Cit2YXN0bHkgaW5lZmZpY2llbnQgZm9yIG1vZGVyYXRlLXRvLWxhcmdlIGZpbGVzeXN0ZW1zLCBkdWUgdG8gc29tZQorTyhuKioyKSBhbmQgTyhuKm0pIGFsZ29yaXRobXMgdGhhdCBkaWRuJ3Qgc2NhbGUgd2VsbCBhdCBhbGwuCisKK0ZpeCB0dW5lMmZzJ3MgaW5vZGUgcmVzaXppbmcgYWxnb3JpdGhtIHNvIGl0IHdpbGwgbm90IGNvcnJ1cHQKK2ZpbGVzeXN0ZW1zIGxhaWQgb3V0IGZvciBSQUlEIGZpbGVzeXN0ZW1zOyBpbiBhZGRpdGlvbiwgdHVuZTJmcyB3aWxsCityZWZ1c2UgdG8gY2hhbmdlIHRoZSBpbm9kZSBzaXplIGZvciBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgdGhlIGZsZXhfYmcKK2ZlYXR1cmUgZW5hYmxlZC4gIChUaGlzIGlzIGEgbGltaXRhdGlvbiBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorb2YgdHVuZTJmcyAtSS4pCisKK0UyZnNwcm9ncyAxLjQxIGJyb2tlIGRlYnVnZnMncyBsb2dkdW1wIGNvbW1hbmQgZm9yIG5vcm1hbCBleHQzLzQKK2ZpbGVzeXN0ZW1zIHdpdGggMzItYml0IGJsb2NrIG51bWJlcnMsIHdoZW4gdGhlIGhlYWRlcnMgZm9yIDY0LWJpdAorYmxvY2sgbnVtYmVycyB3YXMgYWRkZWQuICBUaGlzIHJlZ3Jlc3Npb24gaGFzIGJlZW4gZml4ZWQuCisKK0RlYnVnZnMncyBuY2hlY2sgY29tbWFuZCBoYXMgYmVlbiBmaXhlZCB0byBhdm9pZCBwcmludGluZyBnYXJiYWdlCitjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgZmlsZSBuYW1lcy4KKworRml4IHJlc2l6ZTJmcyBmb3IgZXh0NCBmaWxlc3lzdGVtcy4gIFNvbWUgYmxvY2tzIHRoYXQgdGhhdCBuZWVkIG1vdmluZword2hlbiBzaHJpbmtpbmcgZmlsZXN5c3RlbXMgd2l0aCB1bmluaXRfYmcgZmVhdHVyZSB3b3VsZCBub3QgYmUgbW92ZWQuCitJbiBhZGRpdGlvbiwgYmxvY2tzIGFuZCBpbm9kZSB0YWJsZSBibG9ja3Mgd2VyZSBub3QgYmVpbmcgY29ycmVjdGx5CitmcmVlZCB3aGVuIHNocmlua2luZyBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnIGZlYWJsZSwgd2hpY2ggY2F1c2VkCityZXNpemUyZnMgLU0gdG8gZmFpbC4gIEZpbmFsbHksIHdoZW4gYmxvY2tzIGFyZSBtb3ZlZCwgbWFrZSBzdXJlIHRoZQordW5pbml0aWFsaXplZCBmbGFnIGluIGV4dGVudHMgaXMgcHJlc2VydmVkLgorCitGaXggYnVnIHdoaWNoIGNhdXNlZCBkdW1wZTJmcyB0byBhYm9ydCB3aXRoIGFuIGVycm9yIGlmIHJ1biBvbiBhCitmaWxlc3lzdGVtIHRoYXQgY29udGFpbmVkIGFuIGV4dGVybmFsIGpvdXJuYWwuCisKK1NvbWUgZGlzdHJpYnV0aW9ucyB1c2VkICJta2UzZnMiIGFzIGFuIGFsaWFzIGZvciAibWtmcy5leHQzIjsgY2hlY2sKK2ZvciB0aGlzIGluIGFyZ3ZbMF0gdG8gcHJvdmlkZSBiZXR0ZXIgbGVnYWN5IHN1cHBvcnQgZm9yIHRoZXNlCitkaXN0cmlidXRpb25zLiAgVGhpcyBpcyBhIHByYWN0aWNlIHRoYXQgc2hvdWxkIE5PVCBiZSBjb250aW51ZWQsCitob3dldmVyLgorCitNa2UyZnMgbm93IGhhcyBhIG5ldyBvcHRpb24gLVUsIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZQorVVVJRCB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV3IGZpbGVzeXN0ZW0uCisKK01rZTJmcyB3aWxsIHRyZWF0IGRldmljZXMgdGhhdCBhcmUgZXhhY3RseSAxNlRCIGFzIGlmIHRoZXkgd2VyZSAxNlRCCittaW51cyBvbmUgYmxvY2suICBUaGlzIGFsbG93cyB1c2VycyB3aG8gaGF2ZSByZWFkIHRoYXQgZXh0MyBzdXBwb3J0cwordXAgdG8gMTZUQiBmaWxlc3lzdGVtcyBhbmQgd2hvIGNyZWF0ZSBhIDE2VEIgTFZNIHRvIG5vdCBnZXQgY29uZnVzZWQsCitzaW5jZSB0aGUgdHJ1ZSBsaW1pdCBpcyByZWFsbHkgMTZUQiBtaW51cyBvbmUgYmxvY2suCisKK0UyZnNjayB3aWxsIG5vIGxvbmdlciBhYm9ydCBhbiBmc2NrIHJ1biBpZiBibG9jayBncm91cCBoYXMgYW4gZXJyYW50CitJTk9ERV9VTklOSVQgZmxhZy4KKworRTJmc2NrIG5vdyBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZnJhZ21lbnRlZCBkaXJlY3RvcmllcyBhbmQgZnJhZ21lbnRlZAorZmlsZXMgaW4gdmVyYm9zZSBtb2RlIHN0YXRpc3RpY3MgYW5kIGluIHRoZSBmcmFnY2hlY2sgcmVwb3J0LgorCitGaXggYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNhc3VlZCBpdCBkb3VibGUgY291bnQgbm9uLWNvbnRpZ3VvdXMKK2V4dGVudC1iYXNlZCBpbm9kZXMuCisKK0UyZnNjayB3aWxsIGxlYXZlIHNvbWUgc2xhY2sgc3BhY2Ugd2hlbiByZXBhY2tpbmcgZGlyZWN0b3JpZXMgdG8gYWxsb3cKK3Jvb20gZm9yIGEgZmV3IGRpcmVjdG9yeSBlbnRyaWVzIHRvIGJlIGFkZGVkIHdpdGhvdXQgY2F1c2luZyBsZWFmCitub2RlcyB0byBiZSBzcGxpdCByaWdodCBhd2F5LgorCitGaXggYSBidWcgd2hpY2ggY2F1c2VkIGUyZnNjayB0byBjcmFzaCB3aGVuIGl0IGNvbWVzIGFjcm9zcyBhCitjb3JydXB0ZWQgaW50ZXJpb3Igbm9kZSBpbiBhbiBleHRlbnQgdHJlZSB3aXRoIHRoZSBlcnJvciBtZXNzYWdlOgorIkVycm9yMTogQ29ycnVwdCBleHRlbnQgaGVhZGVyIG9uIGlub2RlIFhYWFhYWCIKKworRTJmc2NrIHByb2JsZW0gZGVzY3JpcHRpb25zIGludm9sdmluZyB0aGUgam91cm5hbCBhcmUgbm8gbG9uZ2VyCityZWZlcnJlZCB0byBhcyAiZXh0MyIgcHJvYmxlbXMsIHNpbmNlIGV4dDQgZmlsZXN5c3RlbXMgYWxzbyBoYXZlCitqb3VybmFscy4KKworRml4IGEgbG9uZy1zdGFuZGluZyBidWcgaW4gZTJmc2NrIHdoaWNoIHdvdWxkIGNhdXNlIGl0IHRvIGNyYXNoIHdoZW4KK3JlcGx5aW5nIGpvdXJuYWxzIGZvciBmaWxlc3lzdGVtcyB3aXRoIGJsb2NrIHNpemVzIGdyZWF0ZXIgdGhhbiA4ay4KKworVXBkYXRlIENhdGFsYW4gdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNTAzMDU3LCAjNTAyMzIzLCAjNTExMjA3KQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggYnVpbGQgb2YgZTJmc2NrLnByb2ZpbGVkLCBhbmQgYWRkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHByb2ZpbGVkCitiaW5hcmllcyBpbiB0aGUgbWlzYyBkaXJlY3RvcnkgaWYgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXByb2ZpbGUuCisKK1RoZSBleHQyZnNfb3BlbigpIGZ1bmN0aW9uIG5vdyBwZXJmb3JtcyBtb3JlIHNhbml0eSBjaGVja3Mgb24gdGhlCitzdXBlcmJsb2NrIHRvIGF2b2lkIHBvdGVudGlhbCBkaXZpZGUgYnkgemVybyBlcnJvcnMgYnkgb3RoZXIgcGFydHMgb2YKK2xpYnJhcnkuCisKK1RoZSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkgZnVuY3Rpb24gbm93IGhhcyBhIHNhZmV0eSBjaGVjayB0byBhdm9pZAorYSBzZWdtZW50YXRpb24gZmF1bHQgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW1zLgorCitUaGUgZXh0MmZzX25ld19pbm9kZSgpIGZ1bmN0aW9uIG5vdyBoYXMgYSBzYW5pdHkgY2hlY2sgc28gdGhhdCBpZiB0aGUKK3NfZmlyc3RfaW5vZGUgZmllbGQgaW4gdGhlIHN1cGVyYmxvY2sgaXMgaW5zYW5lLCBpdCB3aWxsIHJldHVybgorRVhUMl9FVF9JTk9ERV9BTExPQ19GQUlMIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGludmFsaWQgaW5vZGUgbnVtYmVyLgorCitUbyBhdm9pZCBzZWdtZW50YXRpb24gZmF1bHRzLCBleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMoKSBhbmQKK2V4dDJmc19pbm9kZV9hbGxvY19zdGF0cygpIG5vdyB2YWxpZGF0ZXMgdGhlIHBhc3NlZCBpbm9kZSBvciBibG9jaworbnVtYmVyIHRvIGF2b2lkIG92ZXJydW5uaW5nIGFuIGFycmF5IGJvdW5kYXJ5LgorCitWYXJpb3VzIHNpZ25lZC91bnNpZ25lZCBlcnJvcnMgZm9yIHZhcmlhYmxlcyBjb250YWluaW5nIGJsb2NrIG51bWJlcnMKK2hhdmUgYmVlbiBmaXhlZC4KKworQWNjb21vZGF0aW9ucyBmb3IgZ2NjJ3Mgc3R1cGlkaXR5IGluIG5vdCByZWFsaXppbmcgdGhhdCBjb25zdGFudAorc3RyaW5ncyB0aGF0IGRvIG5vdCBjb250YWluIGEgJyUnIGNoYXJhY3RlciBhcmUgc2FmZSB0byB1c2UgaW4gZm9ybWF0CitzdHJpbmdzIGhhdmUgYmVlbiBtYWRlIHNvIHRoYXQgZGlzdHJpYnV0aW9ucyB0aGF0IHdhbnQgdG8gY29tcGlsZQorZTJmc3Byb2dzIHdpdGggLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkgaGF2ZSBhbiBlYXNpZXIgdGltZSBkb2luZyBzby4KKworQWRkZWQgYSBuZXcgNjQtYml0IGdldHNpemUgaW50ZXJmYWNlLCBleHQyZnNfZ2V0X2RldmljZV9zaXplMigpLgorCitBZGRlZCB0aGUgdXRpbGl0eSBtYWtlLXNwYXJzZS5jIHRvIHRoZSBjb250cmliIGRpcmVjdG9yeS4KKworVGhlIGV4dDJmc19ibG9ja19pdGVyYXRlMigpIGZ1bmN0aW9uIG5vdyByZWZsZWN0cyBlcnJvcnMgZnJvbQorZXh0MmZzX2V4dGVudF9zZXRfYm1hcCgpIHRvIHRoZSBjYWxsZXIsIGlmIHRoZSBjYWxsYmFjayB0cmllcyB0bworY2hhbmdlIGEgYmxvY2sgb24gYW4gZXh0ZW50LWJhc2VkIGZpbGUsIGFuZCBleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkKK2ZhaWxzIGZvciBzb21lIHJlYXNvbiAoZm9yIGV4YW1wbGUsIHRoZXJlIGlzbid0IGVub3VnaCBkaXNrIHNwYWNlIHRvCitzcGxpdCBhIG5vZGUgYW5kIGV4cGFuZCB0aGUgZXh0ZW50IHRyZWUuCisKK1RoZSBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoKSBmdW5jdGlvbiB3aWxsIHByZXNlcnZlIHRoZSB1bmluaXQgZmxhZyBpbgorZXh0ZW50cyB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtb2RpZmllcyBhIGJsb2NrIGluIGFuIGV4dGVudC1iYXNlZAorZmlsZS4KKworRTJmc2NrIHdpbGwgbm93IGZsYWcgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIGFuIGluc2FuZSBzX2ZpcnN0X2lubyBmaWVsZAoraW4gdGhlaXIgc3VwZXJibG9jaywgYW5kIGF0dGVtcHQgdG8gdXNlIGEgYmFja3VwIHN1cGVyYmxvY2sgdG8gcmVwYWlyCit0aGUgZmlsZXN5c3RlbS4KKworCitFMmZzcHJvZ3MgMS40MS4zIChPY3RvYmVyIDEyLCAyMDA4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRTJmc2NrIGhhcyBiZWVuIGZpeGVkIHNvIGl0IHByaW50cyB0aGUgY29ycmVjdCBpbm9kZSBudW1iZXIgZm9yCit1aW5pdF9iZyByZWxhdGVkIHByb2JsZW1zLgorCitFMmZzY2sgd2lsbCBub3cgb2ZmZXIgdG8gY2xlYXIgdGhlIHRlc3RfZnMgZmxhZyBpZiB0aGUgZXh0NCBmaWxlc3lzdGVtCitpcyBhdmFpbGFibGUgb24gbGludXguICBUaGlzIGNhbiBiZSBkaXNhYmxlZCB2aWEgYSBjb25maWd1cmF0aW9uCitvcHRpb24gaW4gL2V0Yy9lMmZzY2suY29uZi4KKworRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gbGliYmxraWQgd2hlbiBjaGVja2luZyB0byBzZWUgaWYgYW4gZXh0NAorb3IgZXh0NGRldiBtb2R1bGUgZXhpc3RzLgorCitGaXggYSBidWcgaW4gZTJmc2NrIHdoZXJlIGluIHByZWVuIG1vZGUsIGlmIHRoZXJlIGFyZSBkaXNrIEkvTyBlcnJvcnMKK3doaWxlIHRyeWluZyB0byBjbG9zZSBhIGZpbGVzeXN0ZW0gY2FuIGxlYWQgdG8gaW5maW5pdGUgbG9vcHMuCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGEgIzQ2NTY3OSkKKyAgICAKK0ZpeCBhIGJ1ZyBpbiByZXNpemUyZnMgd2hlcmUgcGFzc2luZyBpbiBhIGJvZ3VzIG5ldyBzaXplIG9mIDAgYmxvY2tzCit3aWxsIGNhdXNlIHJlc2l6ZTJmcyB0byBkcm9wIGludG8gYW4gaW5maW5pdGUgbG9vcC4gIChBZGRyZXNzZXMgUmVkCitIYXQgQnVnemlsbGE6ICM0NjU5ODQpCisgICAgCitBZGQgYSBjaGVjayBpbiB0aGUgVW5peCBJL08gZnVuY3Rpb25zIGluIGxpYmV4dDJmcyBzbyB0aGF0IHdoZW4gYQorZGV2aWNlIGlzIG9wZW5lZCByZWFkL3dyaXRlLCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGRldmljZSBpcworcmVhZC1vbmx5IHVzaW5nIHRoZSBCTEtST0dFVCBpb2N0bC4KKworRml4IGRlYnVnZnMncyBuY2hlY2sgY29tbWFuZCBzbyB0aGF0IGl0IHByaW50cyBhbGwgb2YgdGhlIG5hbWVzIG9mCitoYXJkbGlua3MgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorCitGaXggYSBidWcgaW4gbGliYmxraWQgc28gaXQgY29ycmVjdGx5IGRldGVjdHMgd2hldGhlciB0aGUgZXh0NCBhbmQKK2V4dDRkZXYgZmlsZXN5c3RlbXMgYXJlIGF2YWlsYWJsZSwgc28gdGhhdCB0aGUgZXh0NGRldi0+ZXh0NAorZmFsbGJhY2sgY29kZSB3b3JrcyBjb3JyZWN0bHkuCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBhIHBhcmFsbGVsIGJ1aWxkIHByb2JsZW0gYnkgbWFraW5nIHN1cmUgdXRpbC9zdWJzdCBpcyBidWlsdCBiZWZvcmUKK3RyeWluZyB0byBidWlsZCB0aGUgbGliL2V0IGRpcmVjdG9yeS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzIxNDMyODEpCisKK1VwZGF0ZWQgIm1ha2UgZGVwZW5kIiBpbmZvcm1hdGlvbiBmb3IgY3JjMTYubworICAgIAorCitFMmZzcHJvZ3MgMS40MS4yIChPY3RvYmVyIDIsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBlMmZzY2sncyBhdXRvbWF0aWMgYmxvY2tzaXplIGRldGVjdGlvbi4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCitmcm9tIGUyZnNwcm9ncyAxLjQwLjcgd2hpY2ggY2F1c2VkIGUyZnNjayB0byBmYWlsIGlmIHRoZSB1c2VyCitzcGVjaWZpZXMgYSBibG9jayBudW1iZXIgdXNpbmcgdGhlIC1iIG9wdGlvbiBpZiB0aGUgYmxvY2tzaXplIG9wdGlvbgoraXNuJ3QgYWxzbyBzcGVjaWZpZWQgdXNpbmcgLUIuICBVbmZvcnR1bmF0ZWx5LCB1c2VycyB2ZXJ5IGNvbW1vbmx5CitpbnZva2UgZTJmc2NrIHVzaW5nICJlMmZzY2sgLWIgMzI3NjggL2Rldi9oZFhYWCIgdG8gdXNlIHRoZSBiYWNrdXAKK3N1cGVyYmxvY2s7IGluIGZhY2sgZTJmc2NrIHdpbGwgb2Z0ZW4gc3VnZ2VzdCB0aGlzIGtpbmQgb2YgY29tbWFuZAorbGluZS4gIE9vcHMuCisKK0VuaGFuY2UgdGhlIGRlYnVnZnMncyAibmNoZWNrIiBjb21tYW5kIHNvIGl0IHdpbGwgcHJpbnQgYWxsIG9mIHRoZQorcGF0aG5hbWVzIGZvciB0aGUgc3BlY2lmaWVkIGlub2Rlcy4gIChQcmV2aW91c2x5LCBpbiBzb21lIGNhc2VzIG5jaGVjaworbWlnaHQgbm90IHByaW50IGEgcGF0aG5hbWUgZm9yIGFuIGlub2RlIGF0IGFsbCBpZiBzb21lIG9mIHRoZSBvdGhlcgoraW5vZGVzIGhhZCBtdWx0aXBsZSBoYXJkIGxpbmtzLikKKworRW5oYW5jZSBkZWJ1Z2ZzJ3MgImhhc2giIGNvbW1hbmQgc28gdGhlIGhhc2ggc2VlZCBjYW4gYmUgc3BlY2lmaWVkIHZpYQorYSBjb21tYW5kLWxpbmUgb3B0aW9uLiAgSW4gYWRkaXRpb24sIGFsbG93IHRoZSBoYXNoIGFsZ29yaXRobSB0byBiZQorc3BlY2lmaWVkIGJ5IG5hbWUgaW5zdGVhZCBvZiBqdXN0IGJ5IG51bWJlci4KKworRml4IGUyZnNjayBzbyB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBwcmludCB0aGUgdHJhbnNsYXRpb24gZmlsZSdzCitoZWFkZXIgd2hlbiBhc2tpbmcgdGhlIHVzZXIgYSBjdXN0b20gcXVlc3Rpb24gc28gdGhlcmUgaXMgbm8gcHJvbXB0CitkZWZpbmVkIGZvciBhIHBhcnRpY3VsYXIgcHJvYmxlbSByZWNvcmQuICBGb3IgZXhhbXBsZSwgdGhlIHF1ZXN0aW9uCisiUnVuIGpvdXJuYWwgYW55d2F5IiB3aWxsIGdldCB0aGUgUE8gaGVhZGVyIHRhY2tlZCBvbiBiZWNhdXNlIGUyZnNjaworZXJyb25lb3VzbHkgcGFzc2VkIHRoZSBudWxsIHN0cmluZyB0byBfKCkuICAoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6CisjMjQ2ODkyKQorCitFbmhhbmNlIGJhZGJsb2NrcyBzbyB0aGF0IGl0IGNhbiB0ZXN0IGEgbm9ybWFsIGZpbGUgd2hpY2ggaXMgZ3JlYXRlcgordGhhbiAyR0IuCisKK0VuaGFuY2UgdGhlIGJhZGJsb2NrcyBjb21tYW5kIHNvIHRoYXQgaXQgZGlzcGxheXMgdGhlIHRpbWUgYW5kCitwZXJjZW50YWdlIGNvbXBsZXRlIHdoZW4gaW4gdmVyYm9zZSBtb2RlLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzQyOTczOSkKKworRml4IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIGEgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBkZWJ1Z2ZzJ3MKK25jaGVjayBmdW5jdGlvbi4KKworRml4IGEgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHByb2JsZW0gaWYgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscworaW4gcmVzaXplMmZzLgorCitGaXggdGhlIHVzYWdlIG1lc3NhZ2UgZm9yIGRlYnVnZnMncyBsb2dkdW1wIGNvbW1hbmQgdG8gYmUgY29uc2lzdGVudAord2l0aCBpdHMgbWFuIG1hbnBhZ2UuCisKK1VwZGF0ZSBQb2xpc2gsIEZyZW5jaCwgVmlldG5hbWVzZSwgRHV0Y2gsIEluZG9uZXNpYW4sIEdlcm1hbiwgQ3plY2gsCithbmQgU3dlZWRpc2ggdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmaWxlIEkvTyBmdW5jdGlvbnMgdG8gdGhlIGxpYmV4dDJmcy50ZXhpbmZvCitmaWxlLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDg0ODc3KQorICAgIAorVXBkYXRlIGFuZCBjbGFyaWZpZWQgdmFyaW91cyBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWcKKyMyNzUyNzI7IEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQ5ODEwMCwgIzQ5ODEwMSwgIzQ5ODEwMiwgIzQ5ODEwMykKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0OTc2MTkpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBhIHBvdGVudGlhbCBmaWxlIGRlc2NyaXB0b3IgbGVhY2sgaW4gbGliY29tX2VyciBieSBzZXR0aW5nIHRoZQorY2xvc2Utb24tZXhlYyBmbGFnIGZvciBhIGZkIHVzZWQgZm9yIGRlYnVnZ2luZy4gIChBZGRyZXNzZXMgUmVkIEhhdAorQnVnemlsbGEgIzQ2NDY4OSkKKworRml4IGEgcG90ZW50aWFsIHJhY2UgaW4gbGliY29tX2VyciBieSB1c2luZyBzZW1fcG9zdC9zZW1faW5pdC4gIFN1U0UKK2hhcyBiZWVuIGNhcnJ5aW5nIGEgcGF0Y2ggZm9yIGEgbG9uZyB0aW1lIHRvIHByZXZlbnQgYSBsYXJnZWx5Cit0aGVvcmV0aWNhbCByYWNlIGNvbmRpdGlvbiBpZiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uIGFkZHMgYW5kCityZW1vdmVzIGVycm9yIHRhYmxlcyBpbiBtdWx0aXBsZSB0aHJlYWRzLiAgVW5mb3J0dW5hdGVseSBTdVNFJ3MKK2FwcHJvYWNoIGJyZWFrcyBjb21wYXRpYmlsaXR5IGJ5IGZvcmNpbmcgYXBwbGljYXRpb25zIHRvIGxpbmsgYW5kCitjb21waWxlIHdpdGggdGhlIC1wdGhyZWFkIG9wdGlvbjsgdXNpbmcgcHRocmVhZCBtdXRleGVzIGhhcworaGlzdG9yaWNhbGx5IGJlZW4gcHJvYmxlbWF0aWMuICBXZSBmaXggdGhpcyBieSB1c2luZyBzZW1fcG9zdC9zZW1faW5pdAoraW5zdGVhZC4KKworRml4IGUyZnNwcm9ncy1saWJzIGJ1aWxkIGZhaWx1cmUgZHVlIHRvICdzdWJzJyB0YXJnZXQuICAoQWRkcmVzc2VzCitTb3VyY2Vmb3JnZSBCdWc6ICMyMDg3NTAyKQorCitBdm9pZCBsaW5raW5nIGUyaW5pdHJkX2hlbHBlciwgZGVidWdmcywgYmxraWQsIGFuZCBmc2NrIHdpdGggdW5uZWVkZWQKK2xpYnJhcmllcyB3aGVuIHVzaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzLgorCitGaXggRUxGIHNoYXJlZCBsaWJyYXJ5IHdoZW4gYnVpbGRpbmcgb24gc3lzdGVtcyB0aGF0IGRvbid0IGFscmVhZHkKK2hhdmUgdGhlIGUyZnNwcm9ncyBzaGFyZWQgbGlicmFyaWVzIGFscmVhZHkgaW5zdGFsbGVkLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgQnVnOiAjMjA4ODUzNykKKworRml4IHRoZSBwa2ctY29uZmlnIGZpbGVzIHNvIHRoZXkgd29yayBjb3JyZWN0bHkgd2hlbiBsaW5raW5nIHdpdGgKK3N0YXRpYyBsaWJyYXJpZXMgYW5kIGZpeCB0aGUgaW5jbHVkZSBkaXJlY3Rvcnkgc28gcHJvZ3JhbXMgZG9uJ3QgaGF2ZQordG8gdXNlICNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+LCBidXQgY2FuIHVzZSAjaW5jbHVkZSA8ZXh0MmZzLmg+CitpbnN0ZWFkLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyMDg5NTM3KQorICAgIAorTWFrZSBzdXJlIGV4dDJmc19zd2FiNjQoKSBpcyBjb21waWxlZCBmb3IgYWxsIHBsYXRmb3JtcywgYW5kIG5vdCBqdXN0Citmb3IgeDg2LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDk3NTE1KQorICAgIAorUmVtb3ZlIHRoZSB1bnVzZWQgZXh0MmZzX2ZpbmRfe2ZpcnN0LGV4dH1fYml0X3NldCgpIGZ1bmN0aW9ucyBmb3IgYWxsCitub24teDg2IHBsYXRmb3Jtcy4gIChUaGV5IGhhZCBiZWVuIHJlbW92ZWQgZm9yIHg4NiBlYXJsaWVyLikKKworRml4IGRpZXQgbGliYyBjb21waWxhdGlvbiBzdXBwb3J0LCB3aGljaCBoYWQgYml0cm90dGVkIGR1ZSB0byBsYWNrIG9mCitUTEMuICBGaXhpbmcgdGhpcyBpbXByb3ZlcyBnZW5lcmFsIHBvcnRhYmlsaXR5LgorCitXaGVuIGluc3RhbGxpbmcgdGhlIGxpbmsgbGlicmFyeSB3aGVuIHVzaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzLAorYXZvaWQgdXNpbmcgYWJzb2x1dGUgcGF0aG5hbWVzIGlmIHRoZSBsaW5rIGxpYnJhcnkgYW5kIHRoZSBzaGFyZWQKK2xpYnJhcnkgYXJlIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitCdWc6ICMxNzgyOTEzKQorCitGaXggZ2VuLXRhcmJhbGwgc28gaXQgd2lsbCB3b3JrIGV2ZW4gaWYgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgaGFzCitiZWVuIHJlbmFtZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gImUyZnNwcm9ncyIuICBBbHNvIG1ha2UKK2dlbi10YXJiYWxsIHByaW50IHRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgdGFyLmd6IGZpbGUuCisKKworRTJmc3Byb2dzIDEuNDEuMSAoU2VwdGVtYmVyIDEsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWFueSBwZW9wbGUgYXJlIGZvcmdldHRpbmcgdG8gdXBkYXRlIHRoZWlyIG1rZTJmcy5jb25mIGZpbGUsIGFuZCB0aGlzCitjYXVzZXMgZXh0MywgZXh0NCwgYW5kIGV4dDRkZXYgZmlsZXN5c3RlbXMgd29uJ3QgZ2V0IGNyZWF0ZWQgd2l0aCB0aGUKK3Byb3BlciBmZWF0dXJlcyBlbmFibGVkLiAgV2UgYWRkcmVzcyB0aGlzIGluIHR3byB3YXlzLiAgRmlyc3QsIG1rZTJmcword2lsbCBpc3N1ZSBhIHdhcm5pbmcgaWYgdGhlcmUgaXMgbm90IGRlZmluaXRpb24gZm9yIGFuIGV4dDMsIGV4dDQsIG9yCitleHQ0ZGV2IGZpbGVzeXN0ZW0gYW5kIHRoZSB1c2VyIGlzIHRyeWluZyB0byBjcmVhdGUgc3VjaCBhIGZpbGVzeXN0ZW0KK3R5cGUuICBTZWNvbmRseSwgd2hlbiBpbnN0YWxsaW5nIGZyb20gYSBzb3VyY2UgYnVpbGQsICJtYWtlIGluc3RhbGwiCit3aWxsIHByb3ZpZGUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlIGhhbmRsaW5nIGZvciAvZXRjL21rZTJmcy5jb25mLgorSWYgaXQgZXhpc3RzLCBhbmQgZG9lcyBub3QgbWVudGlvbiBleHQ0ZGV2LCBpdCB3aWxsIGJlIG1vdmVkIGFzaWRlIHRvCisvZXRjL21rZTJmcy5jb25mLmUyZnBzcm9ncy1vbGQgYW5kIHRoZSBuZXcgL2V0Yy9ta2UyZnMuY29uZiBmaWxlIHdpbGwKK2JlIGluc3RhbGxlZC4gIElmIHRoZSBleGlzdGluZyAvZXRjL21rZTJmcy5jb25mIGZpbGUgZG9lcyBtZW50aW9uCitleHQ0ZGV2LCB0aGVuICJtYWtlIGluc3RhbGwiIHdpbGwgaW5zdGFsbCBvZmZpY2lhbCBta2UyZnMuY29uZiBmaWxlIGFzCisvZXRjL21rZTJmcy5jb25mLmUyZnNwcm9ncy1uZXcgYW5kIGlzc3VlIGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0Cit0aGV5IHNob3VsZCBsb29rIHRvIHNlZSBpZiBhbnkgY2hhbmdlcyBuZWVkIHRvIGJlIG1lcmdlZC4KKworVGhlIG1rZTJmcyBwcm9ncmFtIHdpbGwgbm93IGNyZWF0ZSB0aGUgam91cm5hbCBpbiB0aGUgbWlkZGxlIG9mIHRoZQorZmlsZXN5c3RlbSwgc2luY2UgdGhpcyBtaW5pbWl6ZXMgc2VlayB0aW1lcyBvbiBhdmVyYWdlIGZvciBmc3luYy1oZWF2eQord29ya2xvYWRzLiAgSW4gYWRkaXRpb24sIG1rZTJmcyB3aWxsIG5vdyBjcmVhdGUgam91cm5hbHMgdXNpbmcgZXh0ZW50cworZm9yIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGVtLiAgVGhpcyByZXN1bHRzIGluIGEgbW9yZSBlZmZpY2llbnQKK2VuY29kaW5nIGZvciB0aGUgam91cm5hbCBzaW5jZSBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciB1c2luZworaW5kaXJlY3QgYmxvY2tzLgorCitUaGUgbWtlMmZzIHByb2dyYW0gd2lsbCBhdm9pZCBhbGxvY2F0aW5nIGFuIGV4dHJhIGJsb2NrIHRvIHRoZQoram91cm5hbC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTQ4Mzc5MSkKKworTWtlMmZzIHdpbGwgY29ycmVjdGx5IGVuZm9yY2UgdGhlIHByb2hpYml0aW9uIGFnYWluc3QgZmVhdHVyZXMKKyhzcGVjaWZpY2FsbHkgcmVhZC1vbmx5IGZlYXR1cmVzKSBpbiByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zLiAgKFRoYW5rcwordG8gQmVubm8gU2NodWxlbmJlcmcgZm9yIG5vdGljaW5nIHRoaXMgcHJvYmxlbS4pCisKK01rZTJmcyBwcmV2aW91c2x5IHdvdWxkIG9jY2FzaW9uYWx5IGNyZWF0ZSBzb21lIHNsaWdodGx5IG5vbi1vcHRpbWFsbHkKK3BsYWNlZCBpbm9kZSB0YWJsZXM7IHRoaXMgYnVnIGhhcyBiZWVuIGZpeGVkLgorCitUaGUgbWtlMmZzIGFuZCB0dW5lMmZzIHByb2dyYW1zIG5vdyBwcmludCB0aGUgY29ycmVjdCB1c2FnZSBtZXNzYWdlCitkZXNjcmliaW5nIHRoZSBtYXhpbXVtIGpvdXJuYWwgc2l6ZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ5MTYyMCkKKworQWRkIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdXNlZCBpbiBiLXRyZWUKK2RpcmVjdG9yaWVzIGluIHR1bmUyZnMgKGZyb20gYSBjb21tYW5kLWxpbmUgb3B0aW9uKSBvciBta2UyZnMgKHZpYQorbWtlMmZzLmNvbmYpLiAgSW4gYWRkaXRpb24sIGNoYW5nZSB0aGUgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0bworaGFsZl9tZDQsIHNpbmNlIGl0IGlzIGZhc3RlciBhbmQgYmV0dGVyLgorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIG5vdyByZWNvZ25pemUgTWFjT1MgaGZzeCBmaWxlc3lzdGVtcywgYW5kCitjb3JyZWN0bHkgZXh0cmFjdCB0aGUgbGFiZWwgYW5kIHV1aWQgZm9yIGhmcywgaGZzeCwgYW5kIGhmc3BsdXMKK2ZpbGVzeXN0ZW1zLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBGZWF0dXJlIFJlcXVlc3RzOiAjMjA2MDI5MikKKworVGhlIGJsa2lkIGxpYnJhcnkgaGFzIGltcHJvdmVkIGRldGVjdGlvbiBvZiBKRlMgYW5kIEhQRlMgZmlsZXN5c3RlbXMuCisoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6ICMyNTUyNTUpCisKK1RoZSBibGtpZCBsaWJyYXJ5IGlzIG5vdyBtdWNoIG1vcmUgZWZmaWNpZW50bHkgaGFuZGxpbmcgZGV2aWNlbWFwcGVyCitkZXZpY2VzLCBtYWlubHkgYnkgbm8gbG9uZ2VyIHVzaW5nIHRoZSBkZXZpY2VtYXBwZXIgbGlicmFyeS4gIFRoaXMgY2FuCitzcGVlZCB1cCBhY2Nlc3MgZm9yIHN5c3RlbXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBkZXZpY2UgbWFwcGVyCitkZXZpY2VzLgorCitCbGtpZCBoYWQgYSBudW1iZXIgb2YgY2FjaGUgdmFsaWRhdGlvbiBidWdzIGluIGxpYmJsa2lkIHRoYXQgaGF2ZSBiZWVuCitmaXhlZC4gICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0OTMyMTYpCisKK1Jlc2l6ZTJmcyB3aWxsIG5vdyBwcm9wZXJseSBjbG9zZSBvdXQgdGhlICJ1cGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorcHJvZ3Jlc3MgYmFyIHNvIHRoZXJlIGlzIGEgbmV3bGluZSBwcmludGVkIGJlZm9yZSBwcmludGluZyB0aGUgZmluYWwKKyJyZXNpemUgaXMgc3VjY2Vzc2Z1bCIgbWVzc2FnZS4KKworUmVzaXplMmZzIHdpbGwgbm93IGNvcnJlY3RseSBoYW5kbGUgZmlsZXN5c3RlbXMgd2l0aCBleHRlbnRzIGFuZC9vCit1bmluaXRpYWxpemVkIGJsb2NrIGdyb3VwcyBjb3JyZWN0bHkgd2hlbiBmaWxlL2RpcmVjdG9yeSBibG9ja3MgbmVlZAordG8gcmVsb2NhdGVkIChpLmUuLCB3aGVuIHNocmlua2luZyBhIGZpbGVzeXN0ZW0gb3IgaWYgdGhlIHJlc2l6ZV9pbm9kZQoraXMgbm90IHByZXNlbnQpLiAgVG8gc3VwcG9ydCB0aGlzLCB0aGUgZXh0MmZzIGxpYnJhcnkgbm93IHN1cHBvcnRzCitpbml0aWFsaXppbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMgdGhhdCBhcmUgbm90IHlldCBpbml0aWFsaXplZCB3aGVuCithbGxvY2F0aW5nIHRoZW0gdXNpbmcgZXh0MmZzX25ld19ibG9jaygpIGFuZCBleHQyZnNfbmV3X2lub2RlKCkuICBJbgorYWRkaXRpb24sIGUyZnNfYmxvY2tfaXRlcmF0ZTIoKSBjYW4gbm93IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2F0aW9uCitvZiBpbnRlcmlvciBub2RlcyBvZiBhbiBleHRlbnQgdHJlZSwgYW5kIGV4dDJmc19leHRlbnRfc2V0X2JtYXAoKSBoYXMKK2JlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGNyZWF0aW5nIHVubmVjZXNzYXJ5IG5ldyBleHRlbnRzIHdoZW4gdXBkYXRpbmcKK3RoZSBsb2NhdGlvbiBvZiBibG9ja3MgaW4gdGhlIGV4dGVudCB0cmVlLiAgVGhpcyB3aWxsIGFsc28gaGVscCBvdXQKK2UyZnNjaydzIHJlY292ZXJ5IG9mIG9ic2N1cmVseSBjb3JydXB0ZWQgZmlsZXN5c3RlbXMgd2l0aCBleHRlbnRzLAord2hlbiBibG9ja3MgYXJlIGNsYWltZWQgYnkgbXVsdGlwbGUgaW5vZGVzLgorCitBZGQgc3VwcG9ydCBmb3Igb24tbGluZSByZXNpemluZyBleHQ0IGZpbGVzeXN0ZW0gd2l0aCB0aGUgZmxleF9iZworZmlsZXN5c3RlbSBmZWF0dXJlLiAgVGhlIG1ldGhvZCBmb3IgZG9pbmcgc28gaXMgbm90IG9wdGltYWwsIGJ1dCB0byBkbworYSBiZXR0ZXIgam9iIHdpbGwgcmVxdWlyZSBrZXJuZWwgc3VwcG9ydC4KKworRTJmc3Byb2dzIDEuNDEuMCBpbnRyZHVjZWQgYSBidWcgaW4gbGliZXh0MmZzIHdoaWNoIGNhc3VlZCBlMmltYWdlIGFuZAorZGVidWdmcyBwcm9ncmFtcyB0byBub3QgYmUgYWJsZSB0byByZWFkIGUyaW1hZ2UgZmlsZXM7IHRoZSBzaWduZWQKK3ZzLiB1bnNpZ25lZCBidWcgaW4gdGhlIGNvZGUgd2hpY2ggcmVhZCBiaXRtYXBzIGZyb20gdGhlIGUyaW1hZ2UgaGFzCitiZWVuIGZpeGVkLiAgIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ5NTgzMCkKKworUmVzaXplMmZzIGlzIG5vdyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIGRpcmVjdG9yeSBpbi11c2UgY291bnRzIHdoZW4KK3Nocmlua2luZyBmaWxlc3lzdGVtcyBhbmQgZGlyZWN0b3J5IGlub2RlcyBuZWVkZWQgdG8gYmUgbW92ZWQgZnJvbSBvbmUKK2Jsb2NrIGdyb3VwIHRvIGFub3RoZXIuICBUaGlzIGJ1ZyBoYXMgYmVlbiBhcm91bmQgc2luY2UgZTJmc3Byb2dzCisxLjI2LCBhbmQgaXMgbGFyZ2VseSBoYXJtbGVzcywgYnV0IGRvZXMgY2F1c2UgYSBmaWxlc3lzdGVtIGNvcnJ1cHRpb24KK3doaWNoIHdpbGwgYmUgZmxhZ2dlZCBieSBlMmZzY2sgYWZ0ZXIgdGhlIGZpbGVzeXN0ZW0gaGFzIGJlZW4gc2hydW5rLgorIAorRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIGlzc3VlIHNwdXJpb3VzIGNvbXBsYWludHMgYWJvdXQgdGhlIGlub2RlIHNpemUKK2NhdXNlZCBieSB2ZXJ5IGxhcmdlIGV4dGVudC1iYXNlZCBmaWxlcywgYW5kIGJ5IGJsb2NrcyByZWFsbG9jYXRlZAordXNpbmcgZmFsbG9jYXRlKCkgd2l0aCB0aGUgRkFMTE9DX0ZMX0tFRVBfU0laRSBvcHRpb24uICAoQWRkcmVzc2VzCitLZXJuZWwgQnVnemlsbGE6ICMxMTM0MSkKKworTWtlMmZzIHdpbGwgbm93IHNldCB0aGUgY3JlYXRpb24gdGltZXN0YW1wIG9uIHRoZSBsb3N0K2ZvdW5kIGRpcmVjdG9yeQorYW5kIHRoZSByb290IGRpcmVjdG9yeS4gIChNb3JlIGdlbmVyYWxseSwgYWxsIG5ldyBpbm9kZXMgY3JlYXRlZCB1c2luZwordGhlIGV4dDJmcyBsaWJyYXJ5IHdpbGwgY29ycmVjdGx5IHNldCB0aGUgY3JlYXRpb24gdGltZXN0YW1wLikKKworRTJmc2NrIG5vdyBjb3JyZWN0bHkgY2FsY3VsYXRlcyBpbmQvZGluZC90aW5kIHN0YXRpc3RpY3MgaW4gdGhlCitwcmVzZW5jZSBvZiBleHRlbnQtYmFzZWQgZmlsZXMuICBJbiBhZGRpdGlvbiwgImUyZnNjayAtdiIgd2lsbCByZXBvcnQKK3N0YXRpc3RpY3Mgb2YgdGhlIGRlcHRoIG9mIGV4dGVudCB0cmVlcyBpbiB0aGUgZmlsZXN5c3RlbS4gIEUyZnNjayBjYW4KK2Fsc28gZ2l2ZSBhbiBpbm9kZSBmcmFnbWVudGF0aW9uIHJlcG9ydCB1c2luZyAiZTJmc2NrIC1FIGZyYWdjaGVjayIKK3doaWNoIGNhbiBiZSB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgdGhlIGtlcm5lbCBibG9jayBhbGxvY2F0aW9uCityb3V0aW5lcy4KKworRml4IHN1cHBvcnQgZm9yIGVtcHR5IGRpcmVjdG9yeSBibG9ja3MgaW4gZXh0NCBmaWxlc3lzdGVtcyB3aXRoIDY0aworYmxvY2tzaXplIGZpbGVzeXN0ZW1zLgorCitFMmZzY2sgd2lsbCBub3cgcHJpbnQgdGhlIGRlcHRoIG9mIGNvcnJ1cHQgaHRyZWUgZGlyZWN0b3JpZXMuCisKK0RlYnVnZnMncyBodHJlZSBjb21tYW5kIG5vdyBjb3JyZWN0bHkgdW5kZXJzdGFuZHMgZXh0ZW50LWJhc2VkCitkaXJlY3Rvcmllcy4gIEl0IHdpbGwgYWxzbyBwcmludCBvdXQgdGhlIG1pbm9yIGhhc2ggYXMgd2VsbCBhcyB0aGUKK21ham9yIGhhc2guCisKK0RlYnVnZnMgaGFzIGEgbmV3IGNvbW1hbmQgd2hpY2ggd2lsbCBwcmludCB0aGUgc3VwcG9ydGVkIGZlYXR1cmVzIG9mCitlMmZzcHJvZ3MsIHRvIGVuYWJsZSBzY3JpcHRzIHRvIGtub3cgd2hldGhlciB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YKK2UyZnNwcm9ncyBjYW4gc3VwcG9ydCBhIHNwZWNpZmljIGZlYXR1cmUuCisKK0RlYnVnZnMgd2lsbCBub3cgd3JpdGUgZmlsZXMgdXNpbmcgZXh0ZW50cyBmb3IgZmlsZXN5c3RlbXMgdGhhdAorc3VwcG9ydCB0aGVtLgorCitUaGUgZXJyb3IgbWVzc2FnZSBwcmludGVkIGJ5ICJ0dW5lMmZzIC1JIiBpZiB0aGUgaW5vZGUgc2l6ZSB3YXMgdG9vCitzbWFsbCB3YXMgcmF0aGVyIGNvbmZ1c2luZywgc28gaXQgaGFzIGJlZW4gaW1wcm92ZWQuICBBbHNvLCB3ZSB3b24ndAordHJ5IHRvIGNyZWF0ZSBhbiB1bmRvIGxvZyB1bnRpbCB3ZSBrbm93IHRoYXQgY29tbWFuZC1saW5lLXNwZWNpZmllZAorcGFyYW1ldGVycyBzdWNoIGFzICJ0dW5lMmZzIC1JIDxpbm9kZSBzaXplPiIgYXJlIHZhbGlkLgorCitHaXZlbiBzb21lIGZpbGVzeXN0ZW1zIGZvdW5kICJpbiB0aGUgd2lsZCIgdGhhdCBoYWQgbm9uLXplcm8gYmxvY2sKK2dyb3VwIGNoZWNrc3VtcyBldmVuIHRob3VnaCB0aGUgdW5pbml0X2JnL2dkdF9zdW0gZmVhdHVyZSB3YXMgbm90CitlbmFibGVkLCBlMmZzY2sgd291bGQgaXNzdWUgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZXMuICBUZWFjaAorZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoKSB0byBpZ25vcmUgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtCitlbnRpcmVseSBpZiB0aGUgZmVhdHVyZSBmbGFnIGlzIG5vdCBzZXQuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNDkwNjM3KQorCitUaGUgYmxraWQgcHJvZ3JhbSB3aWxsIG5vdyBwcmludCBvdXQgYSB1c2VyLWZyaWVuZGx5IGxpc3Rpbmcgb2YgYWxsIG9mCit0aGUgYmxvY2sgZGV2aWNlcyBpbiB0aGUgc3lzdGVtIGFuZCB3aGF0IHRoZXkgY29udGFpbiB3aGVuIGdpdmVuIHRoZQorLUwgb3B0aW9uLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDkwNTI3KQorCitUaGUgZmlsZWZyYWcgcHJvZ3JhbSBub3cgaGFzIGEgbW9yZSBhY2N1cmF0ZSBjYWxjdWxhdGlvbiBmb3IgdGhlCitudW1iZXIgb2YgaWRlYWwgZXh0ZW50cy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ1ODMwNikKKworVGhlIHRlc3QgSS9PIG1hbmFnZXIgaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0cyBvdmVyaGVhZCBpcworb25seSBpbmN1cnJlZCB3aGVuIGl0IHdvdWxkIGJlIGVuYWJsZWQgdmlhIHRoZSBURVNUX0lPX0ZMQUdTIG9yCitURVNUX0lPX0JMT0NLIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworVHlwb2dyYXBoaWNhbCBlcnJvcnMgaW4gdmFyaW91cyBwcm9ncmFtIHN0cmluZ3MgYW5kIHVzYWdlIG1lc3NhZ2VzCitoYXZlIGJlZW4gZml4ZWQ7IG1vc3Qgb2YgdGhlc2Ugd2VyZSBwb2ludGVkIG91dCBieSB0aGUgZTJmc3Byb2dzCittZXNzYWdlIGNhdGFsb2cgdHJhbnNsYXRvcnMuICAoVGhhbmtzLCB0cmFuc2xhdG9ycyEpCisKK1VwZGF0ZSBhbmQgY2xhcmlmaWVkIHZhcmlvdXMgbWFuIHBhZ2VzLCBhcyB3ZWxsIGFzIHNvbWUgdHlwb2dyYXBoaWNhbAorZXJyb3JzIGluIHRoZSBsaWJleHQyZnMgdGV4aW5mbyBmaWxlLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK0FkZCBJbmRvbmVzaWFuIGFuZCB1cGRhdGUgRnJlbmNoLCBQb2xpc2gsIER1dGNoLCBHZXJtYW4sIFN3ZWVkaXNoLAorQ3plY2gsIGFuZCBWaWV0bmFtZXNlIFRyYW5zbGF0aW9ucy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICMzMTM2OTcsCisjNDAxMDkyKQorCitQcm9ncmFtbWVyJ3MgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggcG9ydGFiaWxpdHkgcHJvYmxlbSB3aXRoIHRoZSBiYWRibG9ja3MgZ3JvdXA7IGZvciBzeXN0ZW1zIHRoYXQKK2Rvbid0IGhhdmUgbmFub3NsZWVwKCksIHRyeSB1c2luZyB1c2xlZXAoKSBpbnN0ZWFkLgorCitUaGUgIm1ha2UgY2hlY2siIHRhcmdldCBpbiB0aGUgZTJmc2NrIGRpcmVjdG9yeSBub3cgc2V0cworTERfTElCUkFSWV9QQVRIIGJlZm9yZSBydW5uaW5nIHRoZSB2YXJpb3VzIGUyZnNjayBpbnRlcm5hbCBsaWJyYXJ5CityZWdyZXNzaW9uIHRlc3RzLgorCitUaGUgY3JjMzIgcmVncmVzc2lvbiB0ZXN0IGluIHRoZSBlMmZzY2sgbGlicmFyeSBpcyBub3cgcG9ydGFibGUgdG8KK2dyZWF0ZXIgdmFyaWVudHkgb2YgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgYmlnLWVuZGlhbiBzeXN0ZW1zIGFuZAord2hlbiBjcm9zcy1idWlsZGluZyBlMmZzcHJvZ3MgZm9yIGVtYmVkZGVkIHN5c3RlbXMuICAoQWRkcmVzc2VzCitTb3VyY2Vmb3JnZSBCdWc6ICMyMDE5Mjg3KQorCitUaGUgZXh0MmZzX2V4dGVudF9zZXRfYm1hcCgpIGhhZCBzb21lIGJ1Z3Mgd2hlbiBzZXR0aW5nIHRoZSBmaXJzdAorYmxvY2sgaW4gYSBmaWxlLCBvciB3aGVuIHJlcGxhY2luZyBhIHNpbmdsZSBibG9jayBleHRlbnQuICBUaG9zZSBjYXNlcworZm9ydHVuYXRlbHkgd2VyZSBjYW1lIHVwIHJlbGF0aXZlbHkgcmFyZWx5IHdoZW4gZTJmc2NrIHdhcyBjaGVja2luZworZmlsZXMsIGJ1dCBjYXVzZWQgc29tZSBwcm9ibGVtcyB3aGVuIHJlc2l6ZTJmcyB3YXMgc2hyaW5raW5nCitleHRlbnQtYmFzZWQgZmlsZXMuCisKK0ZpeCBhIHBvdGVudGlhbCBjb3JlLWR1bXBpbmcgYnVnIGluIGxpYmUycCdzIGl0ZXJhdGVfb25fZGlyKCkKK2Z1bmN0aW9uLgorCitWYXJpb3VzIGV4dDJmcyBsaWJyYXJ5IGZ1bmN0aW9ucyAtLS0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKCksCitleHQyZnNfaW5pdGlhbGl6ZSgpIGFuZCBleHQyZnNfZXh0ZW50X29wZW4oKSAtLS0gbm93IGNvcnJlY3RseSBmcmVlCithbGxvY2F0ZWQgbWVtb3J5IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBpbiBhbGwgb2YgdGhlaXIgZXJyb3IgcmV0dXJuCitwYXRocy4KKworRXh0MmVkIHdhcyBmYWlsaW5nIHRvIGJ1aWxkIGJlY2F1c2UgbWFzaXggc3VwcG9ydCBoYWQgYmVlbiByZW1vdmVkIGluCit0aGUgcmVzdCBvZiBlMmZzcHJvZ3MsIHNvIGV4dDJlZCBubyBsb25nZXIgaGFzIG1hc2l4IHN1cHBvcnQsIGVpdGhlci4KKworVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHJlc3BlY3RzIHRoZSBMREZMQUdTIGVudmlyb25tZW50IHZhcmlhYmxlIGlmCitpdCBpcyBzZXQgd2hlbiBjb25maWd1cmUgaXMgY2FsbGVkLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBGZWF0dXJlCitSZXF1ZXN0OiAjMTkzNzI4NykKKworTGlidXVpZCBpcyBub3cgbW9yZSBwb3J0YWJsZSB0byB0aGUgV2luZG93cyBwbGF0Zm9ybS4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEZlYXR1cmUgUmVxdWVzdDogIzE5MzcyODcpCisKK1RoZSBjb25maWd1cmUgc2NyaXB0IG5vdyB1c2VzIEFDX01TR197UkVTVUxULFdBUk4sRVJST1J9IGluc3RlYWQgb2YKK2JhcmUgZWNobyBjb21tYW5kcyBzbyB0aGF0IGNvbmZpZ3VyZSBmbGFncyBzdWNoIGFzIC0tcXVpZXQgd29yaworY29ycmVjdGx5LiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBQYXRjaGVzOiAjMjA1ODc5NCkKKworQSBmZXcgdXNlcyBvZiBzcHJpbnRmIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGV4dDJmcyBsaWJyYXJ5IHRvCittYWtlIGxpZmUgZWFzaWVyIGZvciBib290bG9hZGVycyB3aXRoIGEgbGltaXRlZCBsaWJjIGVudmlyb25tZW50LgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMyMDQ5MTIwKQorCitUaGUgZXh0MmZzX3JlYWRfaW5vZGUoKSBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBpbm9kZSBudW1iZXIgcGFzc2VkCit0byBpdCBlYXJsaWVyLCB0byBhdm9pZCBkb2luZyBzb21lIG5lZWRsZXNzIHdvcmsgd2hlbiBpdCB3b3VsZCBmYWlsCithbnl3YXkuCisKK1RoZSBleHQyZnNfb3BlbigpIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhlIGJsb2Nrc2l6ZSBwYXJhbWV0ZXIKK3Bhc3NlZCB0byBpdCBlYXJsaWVyLCB0byBhdm9pZCBkb2luZyBzb21lIG5lZWRsZXNzIHdvcmsgd2hlbiBpdCB3b3VsZAorZmFpbCBhbnl3YXkuCisKK0Rpc2FibGUgYSB2ZXJ5IGFubm95aW5nIGF1dG9tYXRpYyAiJS5zaCAtPiAlIiBHTlUgbWFrZSBydWxlIGluIHRoZQordG9wLWxldmVsIE1ha2VmaWxlLiAgVGhhdCBhdXRvbWF0aWMgcnVsZSBpcyB1c2VkIHRvIGJldHRlciBzdXBwb3J0CitTQ0NTLCBidXQgaXQgY2F1c2VkIHByb2JsZW1zIGZvciBhIHBhcnRpY3VsYXIgbmljaGUgZGlzdHJpYnV0aW9uIHdoaWNoCitsaWtlcyB0byB1c2UgY29uZmlndXJlLnNoIGZpbGVzIHRvIHN0b3JlIHRoZSBjb25maWd1cmUgb3B0aW9ucyB1c2VkIHRvCitidWlsZCBhIHBhY2thZ2UuICBVbmZvcnR1bnRhZWx5IEdOVSBtYWtlIHdpbGwgdXNlIHRoZSBjb25maWd1cmUuc2ggdG8KK3JlcGxhY2UgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHJlc3VsdGluZyBpbiBhIHNlbGYtaW5mbGljdGVkIGZvcmsgYm9tYgorbGVhZGluZyB0byBhbiBvdXQtb2YtbWVtb3J5IGNyYXNoLgorCitUbyBzdXBwb3J0IG9sZCBHTlUgQyBjb21waWxlcnMgZG9uJ3QgdXNlIEM5OS9DKysgY29tbWVudHMsIGJ1dCBvbmx5CitLJlIgc3R5bGUgY29tbWVudHMsIGFuZCBkb24ndCB0cnkgdG8gdXNlIF9fYnVpbHRpbl9leHBlY3QgaWYgX19HTlVDX18KK2lzIGxlc3MgdGhhbiAzLiAgKF9fYnVpbHRpbl9leHBlY3QgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGdjYyB2ZXJzaW9ucworMi45NiBhbmQgdXAsIGFuZCBpdCdzIHRyaWNreSB0byBjaGVjayBmb3IgZ2NjIDIuOTUgdnMgZ2NjIDIuOTY7IHNpbmNlCit0aGlzIGlzIGFuIG9wdGltaXphdGlvbiwgd2Ugb25seSB0cnkgdG8gdXNlIF9fYnVpbHRpbl9leHBlY3QgZm9yIGdjYyAzCithbmQgdXAuKQorCitJbiBlMmZzY2sncyBjcmMgcm91dGluZXMsIG1ha2Ugc3VyZSB3ZSB1c2UgV09SRFNfQklHRU5ESUFOIGluc3RlYWQgb2YKK19fTElUVExFX0VORElBTiwgd2hpY2ggYXJlIG9ubHkgZGVmaW5lZCBieSBnbGliYydzIGhlYWRlciBmaWxlcyBhbmQKK2hlbmNlIGlzbid0IHBvcnRhYmxlLgorCitGb3IgdGhlIGNvbnZlbmllbmNlIGZvciBzb21lIGRpc3RyaWJ1dGlvbnMgdGhhdCBuZWVkIGEgc3RhdGljIHR1bmUyZnMsCit0aGUgTWFrZWZpbGUgZm9yIG1pc2MvIG5vdyBoYXMgYSB0dW5lMmZzLnN0YXRpYyB0YXJnZXQuCisKK1RoZSBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoKSBmdW5jdGlvbiBub3cgc3VwcG9ydHMgQkxPQ0tfRkxBR19BUFBFTkQKK2ZvciBleHRlbnQtYmFzZWQgZmlsZXMKKworVGhlIGV4dDJmc19ibWFwKCkgZnVuY3Rpb24gbm93IHN1cHBvcnRzIEJNQVBfQUxMT0MgZm9yIGV4dGVudC1iYXNlZAorZmlsZXMuCisKK0FsbCBzb3VyY2UgZmlsZXMgbm8gbG9uZ2VyIGhhdmUgYW55IHRyYWlsaW5nIHdoaXRlIHNwYWNlLgorCitUaGUgaW9fY2hhbm5lbF9yZWFkX2JsazY0KCkgYW5kIGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoKSBmdW5jdGlvbnMgYXJlCitub3cgZnVuY3Rpb25zIGluc3RlYWQgb2YgQyBwcmVwcm9jZXNzb3IgbWFjcm9zIHRvIHByb3ZpZGUgYmV0dGVyCitmb3J3YXJkIGNvbXBhdGliaWxpdHkuCisKK1RoZSBlMmZwc3JvZ3MgdHJhbnNsYXRpb24gdGVtcGxhdGUgbm93IGV4cGFuZHMgdGhlIEB4IGFiYnJldmF0aW9uLgorCitWYXJpb3VzIG5hbWVzcGFjZSBsZWFja2FnZXMgaW4gbGliYmxraWQsIGxpYmUycCwgYW5kIGxpYmV4dDJmcyBoYXZlCitiZWVuIGZpeGVkLgorCitGaXggYSBwYXJhbGxlbCBidWlsZCBwcm9ibGVtIGluIGUyZnNwcm9ncy4KKworRTJmc3Byb2dzIGlzIG5vdyBtb3JlIHBvcnRhYmxlIHRvIFNvbGFyaXMuCisgICogYmxraWQgbm8gbG9uZ2VyIGFzc3VtZXMgdGhhdCB0aGUgVElPQ0dTSVpFIGFuZCBUSU9DR1dJTlNaIGlvY3RsJ3MKKyAgICBhcmUgYWx3YXlzIHByZXNlbnQuCisgICogU2NyaXB0cyBkbyBub3QgYXNzdW1lIHRoYXQgL2Jpbi90cnVlIGlzIGFsd2F5cyBpbiAvYmluCisgICogRG9uJ3QgdXNlIF9fRlVOQ1RJT05fXyBzaW5jZSBTb2xhcmlzJ3MgQzk5IGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAgKiBGbHVzaCBzdGRpbyBoYW5kbGVzIGJlZm9yZSBjYWxsaW5nIHNldGJ1ZigpLCBzaW5jZSBTb2xhcmlzIHdpbGwKKyAgICBkaXNjYXJkIGFueSBwZW5kaW5nIG91dHB1dCB0byB0aGUgc3RyZWFtLgorICAqIERlZmluZSBfWE9QRU5fU09VUkNFIHRvIDYwMCBzaW5jZSBTb2xhcmlzJ3MgaGVhZGVyIGZpbGVzIGFyZSB2ZXJ5CisgICAgcGlja3kgYWJvdXQgd2hpY2ggQyBjb21waWxlciBjYW4gYmV1c2VkIGZvciBTVVN2MyBjb25mb3JtYW5jZS4KKyAgICBVc2Ugb2YgQzk5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggU1VTdjIgKF9YT1BFTl9TT1VSQ0U9NTAwKSwKKyAgICBhbmQgQzg5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggU1VTdjMgKF9YT1BFTl9TT1VSQ0U9NjAwKS4KKyAgICBTaW5jZSB3ZSBuZWVkIHNvbWUgU1VTdjMgZnVuY3Rpb25zLCBjb25zaXN0ZW50bHkgdXNlIFNVU3YzIHNvCisgICAgdGhhdCBlMmZzcHJvZ3Mgd2lsbCBidWlsZCBvbiBTb2xhcmlzIHVzaW5nIGM5OS4KKyAgKiBTb2xhcmlzIEM5OSBkb2VzIG5vdCBzdXBwb3J0IHZhcmFyZ3MgQyBwcmVwcm9jZXNzb3IgbWFjcm9zCisgICogU29sYXJpcyBoZWFkZXIgZmlsZXMgcG9sbHV0ZSB0aGUgQyBuYW1lc3BhY2UgaWYgaW4vbmV0aW5ldC5oCisgICAgaXMgaW5jbHVkZWQsIHdoaWNoIGNvbmZsaWN0cyB3aXRoIGUyZnNwcm9ncycgdXNlIG9mIHRoZSBrbWVtX2NhY2hlX3QKKyAgICB0eXBlZGVmLgorICAqIFNvbGFyaXMgc2hpcHMgd2l0aCBhIHBhdGhldGljYWxseSBhbmNpZW50IHNoZWxsIGluIC9iaW4vc2ggc28gd2UKKyAgICBhdm9pZCB0aGUgdXNlIG9mIHZhcmlvdXMgbW9yZSBhdmFuY2VkIHNoZWxsIGNvbnN0cnVjdHMgc3VjaCBhcyAkKCkuCisKK1RoZSAibWFrZSBycG0iIGNvbW1hbmQgd2lsbCBub3cgdGFrZSBzb21lIGV4dHJhIGNvbmZpZ3VyZSBvcHRpb3NuIGZyb20KK3RoZSBidWlsZCBlbnZpcm9ubWVudCB3aXRob3V0IG5lZWRpbmcgdG8gcGF0Y2ggdGhlIHNvdXJjZSB0cmVlLgorCitUaGUgZXh0MmZzX2FkZF9kaXJfYmxvY2soKSBmdW5jdGlvbiB3aWxsIG5vdyBncm93IHRoZSBkYmxpc3QgbW9yZQorYWdncmVzc2l2ZWx5IGFzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCBjb3B5aW5nIHRoZSBhcnJheSB0b28gb2Z0ZW4uCisKK1RoZSBlMmZzY2tfd3JpdGVfYml0bWFwcygpIHdpbGwgd3JpdGUgdGhlIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzCit0b2dldGhlciBpbnN0ZWFkIG9mIGluIHR3byBwYXNzZXMuCisKKworRTJmc3Byb2dzIDEuNDEgKEp1bHkgMTAsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkIHN1cHBvcnQgZm9yIGV4dDQgZmlsZXN5c3RlbSBmZWF0dXJlcywgaW4gcGFydGljdWxhciBleHRlbnRzLAordW5pbml0X2JnLCBmbGV4X2JnLCBodWdlX2ZpbGUsIGFuZCBkaXJfbmxpbmsgZmVhdHVyZXMuICBBbHNvIGFkZAorc3VwcG9ydCBmb3IgY2hlY2tpbmcgam91cm5hbCBjaGVja3N1bXMuICBEZWJ1Z2ZzIHdpbGwgcHJpbnQgbmV3CitzdXBlcmJsb2NrIGFuZCBpbm9kZSBmaWVsZHMgdGhhdCB3ZXJlIGRlZmluZWQgZm9yIGV4dDQuICBGb3IgZXhhbXBsZSwKK3RoZSBuYW5vc2Vjb25kIGFuZCBpX3ZlcnNpb24gZmllbGRzIG9mIGFuIGlub2RlLCBhbmQgdGhlCitzX21pbl9leHRyYV9pc2l6ZSBhbmQgc193YW50ZWRfZXh0cmFfaXNpemUgZmllbGRzIGZyb20gdGhlIHN1cGVyYmxvY2suCitOb3RlOiBSZXNpemUyZnMgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgY29tYmluYXRpb24gb2YgZmxleF9iZworYW5kICFyZXNpemVfaW5vZGUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzODg0NTIsICM0MjU0NzcpCisKK1R1bmUyZnMgY2FuIHN1cHBvcnQgbWlncmF0aW5nIGEgZmlsZXN5c3RlbSBmcm9tIHVzaW5nIDEyOCBieXRlIGlub2RlcwordG8gMjU2IGJ5dGUgaW5vZGVzLCBzbyBpdCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZ1bGwgZmVhdHVyZXMgb2YKK2V4dDQuCisKK0FkZCBzdXBwb3J0IGZvciAidW5kbyIgc3VwcG9ydC4gIEUyZnNjayBhbmQgbWtlMmZzIGNhbiBvcHRpb25hbGx5CityZWNvcmQgYW4gdW5kbyBsb2cgd2hpY2ggY2FuIHJlcGxheWVkIGJ5IHRoZSBwcm9ncmFtIGUydW5kby4KKworRTJmc2NrIGNvdWxkIGRhbWFnZSBhIGZpbGVzeXN0ZW0gYnkgdHJ5aW5nIHRvIHJlbG9jYXRlIGlub2RlIHRhYmxlcworZHVlIHRvIGNvcnJ1cHRlZCBibG9jayBncm91cCBkZXNjcmlwdG9ycywgd2hlcmUgdGhlIGF0dGVtcHRlZCBpbm9kZQordGFibGUgcmVsb2NhdGlvbiB3b3VsZCBkbyBmYXIgbW9yZSBoYXJtIHRoYW4gZ29vZC4gIEUyZnNjayBoYXMgYmVlbgorZml4ZWQgdG8gZGV0ZWN0IHRoaXMgdGhlc2Ugc29ydHMgb2YgY29ycnVwdGVkIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzCittdWNoIGVhcmxpZXIgaW4gZTJmc2NrIHByb2Nlc3NpbmcsIHNvIGl0IGNhbiB0cnkgdG8gdXNlIHRoZSBiYWNrdXAKK3N1cGVyYmxvY2sgYW5kIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIGZpcnN0LiAgVGhpcyBzaG91bGQgYmUgYSBtdWNoCitiZXR0ZXIgc3RyYXRlZ3kgZm9yIHJlY292ZXJpbmcgdGhlc2UgdHlwZXMgb2YgY29ycnVwdGVkIGZpbGVzeXN0ZW1zLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODQwMjkxKQorCitFMmZzY2sgd2lsbCBkaXNwbGF5IGEgbW9yZSB1bmRlcnN0YW5kYWJsZSBtZXNzYWdlIHdoZW4gdGhlIGxhc3QgY2hlY2sKK2ZpZWxkIGluIHRoZSBzdXBlcmJsb2NrIGlzIGluIHRoZSBmdXR1cmUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNDQ2MDA1KS4KKworRTJmc2NrIG5vdyBwZXJmb3JtcyBtb3JlIGV4dGVuc2l2ZSBhbmQgY2FyZWZ1bCBjaGVja3Mgb2YgZXh0ZW5kZWQKK2F0dHJpYnV0ZXMgc3RvcmVkIGluIHRoZSBpbm9kZS4KKworRW5oYW5jZSBta2UyZnMgdG8gcHJpbnQgYSBtb3JlIGV4cGxhbmF0b3J5IGVycm9yIG1lc3NhZ2Ugd2hlbgorZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSgpIHJldHVybnMgRUZCSUcuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6CisjNDg4NjYzKQorCitGaXggbWtlMmZzIHRvIHVzZSBhIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZiA0ayB3aGVuIGZvcm1hdHRpbmcgYW4KK2V4dGVybmFsIGpvdXJuYWwgZGV2aWNlLiAgVGhpcyBpcyBkb25lIGJ5IHVzaW5nIGEgZml4ZWQgZmlsZXN5c3RlbQordHlwZSBsaXN0IHRoYXQgY29uc2lzdHMgb25seSBvZiB0aGUgc2luZ2xlIGZpbGVzeXN0ZW0gdHlwZSAiam91cm5hbCIKK3doZW4gbG9va2luZyB1cCBjb25maWd1cmF0aW9uIGtleXMgaW4gL2V0Yy9ta2UyZnMuY29uZi4gIChBZGRyZXNzZXMKK0RlYmlhbiBCdWc6ICM0ODg2NjMpCisKK1NwZWVkIHVwIGhvdyBta2UyZnMgd3JpdGVzIHRoZSBqb3VybmFsIGRhdGEgYmxvY2tzIGJ5IHdyaXRpbmcgdGhlIGRpc2sKK2Jsb2NrcyBpbiBsYXJnZXIgY2h1bmtzLgorCitGaXggYmxraWQgaGFuZGxpbmcgb2Ygc3RhbGUgZGV2aWNlcy4gIEZpeCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBhCitjb3JlIGR1bXAgd2hpbGUgZ2FyYmFnZSBjb2xsZWN0aW5nIHRoZSBibGtpZCBjYWNoZSwgYW5kIGFzc3VyZSB0aGF0CitibGtpZF9maW5kX2Rldl93aXRoX3RhZygpIG5ldmVyIHJldHVybnMgYSBub24tZXhpc3RlbnQgZGV2aWNlLiAgQWxzbywKK2lmIGEgZmlsZXN5c3RlbSBpcyBmb3VuZCBhdCBhIG5ldyAvZGV2IGxvY2F0aW9uLCBlbGltaW5hdGUgYW55CitkdXBsaWNhdGUgc3RhbGUgZW50cmllcyB3aGljaCBjYW4gbm90IGJlIHZlcmlmaWVkLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQ4Nzc1OCwgIzQ4Nzc4MykKKyAgICAKK0FkZCBtb3JlIHBhcmFub2lkIGNoZWNrcyBmb3IgTFZNIHZvbHVtZXMgYW5kIHN3YXAgcGFydGl0aW9ucyBpbgorYmxraWQncyBwcm9iZSBmdW5jdGlvbiwgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGZhbHNlIHBvc2l0aXZlcy4KKworVGhlIG1rZTJmcyBwcm9ncmFtIG5vdyBoYXMgYSBtdWNoIG1vcmUgc29waGlzdGljYXRlZCBzeXN0ZW0gZm9yCitjb250cm9sbGluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgb2YgYSBuZXdseSBjcmVhdGVkIGZpbGVzeXN0ZW0KK2Jhc2VkIG9uIGEgc3BsaXQgZmlsZXN5c3RlbSBhbmQgdXNhZ2UgdHlwZSBzeXN0ZW0uICBUaGUgLXQgb3B0aW9uIHRvCitta2UyZnMgd2FzIGEgZGVwcmVjYXRlZCBhbGlhcyB0byAtYzsgaXQgbm93IHNwZWNpZmllcyBhIGZpbGVzeXN0ZW0KK3R5cGUgKGV4dDIsIGV4dDMsIGV4dDQsIGV0Yy4pLCB3aGlsZSB0aGUgLVQgb3B0aW9uIGNhbiBub3cgYmUgYSBjb21tYQorc2VwYXJhdGVkIHVzYWdlIGxpc3QuICBUaGUgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uIGFuZCB0eXBlCitpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGV4dHJhY3QgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCisvZXRjL21rZTJmcy5jb25mIGZpbGUuCisKK1RoZSBta2UyZnMgcHJvZ3JhbSB3aWxsIG5vIGxvbmdlciBjb21wbGFpbiBhbmQgcmVxdWVzdCB0aGUgLWYgb3B0aW9uCit3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBhIGZpbGVzeXN0ZW0gd2l0aCBncmVhdGVyIHRoYW4gMioqMzEKK2Jsb2Nrcy4KKworV2hlbiBjcmVhdGluZyBhIGZpbGVzeXN0ZW0gZm9yIHRoZSBHTlUgSHVyZCB1c2UgYSBmcy10eXBlIG9mIEh1cmQgYW5kCithZGp1c3QgdGhlIG1rZTJmcy5jb25mIGZpbGUgc28gZmlsZXN5c3RlbXMgZm9yIHRoZSBIdXJkIGFyZSBjcmVhdGVkCit3aXRoIGEgYmxvY2tzaXplIG9mIDQwOTYgYW5kIGlub2RlIHNpemUgb2YgMTI4LCB3aGljaCBpcyBhbGwgaXQga25vd3MKK2hvdyB0byBoYW5kbGUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0NzE5NzcpCisgICAgCitNa2UyZnMgd2lsbCBhbHdheXMgbWFrZSBzdXJlIHRoYXQgbG9zdCtmb3VuZCBhbHdheXMgaGFzIGF0IGxlYXN0IDIKK2Jsb2NrcywgZXZlbiBmb3IgZmlsZXN5c3RlbXMgd2l0aCB2ZXJ5IGxhcmdlIGJsb2Nrc2l6ZXMgKGkuZS4sIDY0a2IpLgorCitSZXNpemUyZnMgd2lsbCBub3cgcHJpbnQgdGhlIG1pbmltdW0gbmVlZGVkIGZpbGVzeXN0ZW0gc2l6ZSBpZiBnaXZlbgordGhlIC1QIG9wdGlvbiwgYW5kIHdpbGwgcmVzaXplIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZQorc2l6ZSBpZiBnaXZlbiB0aGUgLU0gb3B0aW9uLgorCitGaXggcmVzaXplMmZzIHRvIGNsZWFuIHVwIHRoZSByZXNpemVfaW5vZGUgaWYgYWxsIG9mIHRoZSByZXNlcnZlZCBnZHQKK2Jsb2NrcyBhcmUgY29uc3VtZWQgZHVyaW5nIGFuIG9mZi1saW5lIHJlc2l6ZS4KKworVGhlICJscyIgY29tbWFuZCBpbiBkZWJ1Z2ZzIG5vdyBzdXBwb3J0cyB0aGUgLXAgb3B0aW9uLCB3aGljaCBjYXVzZXMKK2l0IHRvIHF1b3RlIHRoZSBmaWxlbmFtZXMgc28gdGhhdCBzcGFjZXMgb3IgdGFicyBpbiBkaXJlY3RvcnkgZW50cmllcworYXJlIGVhc2lseSB2aXNpYmxlLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOiAjMTQ5NDgwOyBBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEZlYXR1cmUgUmVxdWVzdDogIzEyMDE2NjcpCisKK0ZpeCBhIHBvdGVudGlhbCBvZmYtYnktb25lIGJ1ZmZlciBvdmVmbG93IGluIHRoZSBmc19kZXZpY2VfbmFtZSBpbiBhbgorZTJpbWFnZSBmaWxlLgorCitUaGUgY2hhdHRyIHByb2dyYW0gd2lsbCByZXR1cm4gYSBub24temVybyBleGl0IGNvZGUgaW4gY2FzZSBvZgorZmFpbHVyZXMsIGFuZCBlcnJvciBtZXNzYWdlcyBjYW4gYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSAtZiBvcHRpb24uCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICMxODA1OTYpCisKK0ZpeCBhIGJ1ZyBpbiBiYWRibG9ja3Mgd2hpY2ggY2F1c2VkIGl0IHRvIG92ZXJydW4gYW4gYXJyYXkgYW5kIGxpa2VseQorY3Jhc2ggaWYgbW9yZSB0aGFuIDggdGVzdCBwYXR0ZXJucyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZSAtdCBvcHRpb24uCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0ODcyOTgpCisgICAgCitBZGQgc3VwcG9ydCB0byBiYWRibG9ja3MgdG8gbGltaXQgaG93IHF1aWNrbHkgaXQgcmVhZHMgZnJvbSB0aGUgZGlzaworZHJpdmUgKHNvIGl0IGNhbiBiZSB1c2VkIGZvciBiYWNrZ3JvdW5kIHNjcnViYmluZyksIGFuZCBzbyBpdCB3aWxsCithYm9ydCBhZnRlciBmaW5kaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIGVycm9ycy4KKworUmVtb3ZlIHN1cHBvcnQgZm9yIHRoZSBsZWdhY3kgYmlnLWVuZGlhbiBmaWxlc3lzdGVtIGZvcm1hdCB3aGljaCBvbmx5CitleGlzdGVkIG9uIGV4dHJlbWVseSBsb25nLWRlYWQgUG93ZXJQQyBrZXJuZWxzIGFsbW9zdCBhIGRlY2FkZSBhZ28uCisKK1JlbW92ZSBNQVNJWCBzdXBwb3J0IGZyb20gZTJmc3Byb2dzLgorCitBZGQgSS9PIHN0YXRpc3RpY3MgcmVwb3J0aW5nIHRvIGUyZnNjay4KKworVXBkYXRlIFZpZXRuYW1lc2UsIFBvbGlzaCwgRnJlbmNoLCBTcGFuaXNoLCBHZXJtYW4sIENhdGFsYW4sIER1dGNoLAorQ3plY2ggdHJhbnNsYXRpb25zLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDg3NDQzLCAjNDg3Njc1LCAjNDkwMDAzKQorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICMzOTMzMTMsICM0ODc4NDksICM0NDA5ODMsICM0NDA5ODEpCisKK1Byb2dyYW1tZXIncyBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZhY3RvciBvdXQgYml0bWFwIGNvZGUgaW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyA2NC1iaXQgbmV3LXN0eWxlCitiaXRtYXBzLgorCitGaXggZ2NjIC1XYWxsIHdhcm5pbmdzCisKK0ZpeCB0aGUgcGtnLWNvbmZpZyBmaWxlcyBzbyB0aGF0IHByaXZhdGUgbGlicmFyZXMgYXJlIHNwZWNpZmllZCBpbgorIkxpYnMucHJpdmF0ZToiLgorCitGaXggdGhlIGxpYmV4dDJmcy50ZXhpbmZvIG1hbnVhbCBzbyBpdCBidWlsZHMgd2l0aCBtb2Rlcm4gdmVyc2lvbnMgb2YKK3RleGluZm8uCisKK1NpbGVuY2UgdGhlIG1ha2VmaWxlIGZyb20gc2hvd2luZyB0aGUgYXdrIGNvbW1hbmQgdXNlZCB0byBidWlsZCB0aGUKKworQ2xlYW4gdXAgdGhlIGJhZGJsb2NrcyBncm91cCBzbyB0byBtYWtlIGl0IG1vcmUgcG9ydGFibGUgYW5kIHJvYnVzdC4KKworQXZvaWQgdXNpbmcgcHJlZGljdGFibGUgZmlsZW5hbWVzIGluIC90bXAgaW4gYmxraWQncyByZWdyZXNzaW9uIHRlc3QKK3N1aXRlLiAgQWxzbyByZW1vdmUgYmFzaGlzbSdzIGluIHRoZSByZWdyZXNzaW9uIHRlc3Qgc2NyaXB0LgorCitJZiB0aGUgY29uZmlndXJlIHNjcmlwdCBpcyBnaXZlbiAtLXdpdGgtZGlldC1saWJjLCBkb24ndCB1c2UgdGhyZWFkCitsb2NhbCBzdG9yYWdlLCBzaW5jZSBkaWV0IGxpYmMgZG9lc24ndCBzdXBwb3J0IFRMUy4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEJ1ZzogIzIwMDA2NTQpCisgICAgCitGaXggdGhlIGJsa2lkIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSB0byB0b2xlcmF0ZSBvbGRlciB2ZXJzaW9ucyBvZgorbWtzd2FwIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgLVUgb3B0aW9uLgorCitBIGZldyBsaWJyYXJ5IHJvdXRpbmVzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gc3VwcG9ydCA2NC1iaXQgYmxvY2sKK251bWJlcnM7IGluIHBhcnRpY3VsYXIsIHRoZSBJL08gbWFuYWdlciBmdW5jdGlvbnMsIHRoZSB0ZXN0X2lvLAoraW5vZGVfaW8sIGFuZCB1bml4X2lvIG1hbmFnZXJzIGhhdmUgYWxsIGJlIGNvbnZlcnRlZCB0byBzdXBwb3J0IDY0LWJpdAorb3BlcmF0aW9uLgorCitEZWJ1Z2ZzIGNhbiBub3cgYmUgZXh0ZW5kZWQgZm9yIHVzZSBieSB0ZXN0IHByb2dyYW1zLiAgU2VlCitsaWIvZXh0MmZzL2V4dGVudHMuYyBmb3IgYW4gZXhhbXBsZSBmb3IgaG93IGl0IGNhbiBiZSB1c2VkLiAgVGhlIHRlc3QKK3Byb2dyYW0gbGlua3MgYWdhaW5zdCB0aGUgZGVidWdmcyBvYmplY3QgZmlsZXMsIGFuZCBwcm92aWRlcworYWRkaXRpb25hbCBjb21tYW5kcyBieSBkZWZpbmluZyBhbiBhdXhpbGlhcnkgbGlic3MgY29tbWFuZCB0YWJsZS4KKworVGhlIGxhenlfYmcgZmlsZXN5c3RlbSBmZWF0dXJlLCB3aGljaCB3YXMgb25seSB1c2VkIGJ5IGRldmVsb3BlcidzCit0ZXN0aW5nLCBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGl0IGhhcyBiZWVuIGxhcmdlbHkgc3VwcGxhbnRlZCBieQordW5pbml0X2JnLiAgVGhpcyBhbHNvIHNpbXBsaWZpZXMgdGhlIGNvZGUuCisKKworRTJmc3Byb2dzIDEuNDAuMTEgKEp1bmUgMTcsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWtlMmZzLCB0dW5lMmZzLCBhbmQgcmVzaXplMmZzIG5vdyB1c2UgZmxvYXRpbmcgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZQorcGVyY2VudGFnZSBvZiByZXNlcnZlZCBibG9ja3MuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0NTI2MzkpCisKK1VwZGF0ZWQgU3BhbmlzaCBhbmQgQ2F0YWxhbiB0cmFuc2xhdGlvbnMuCisKK0ZpeGVkIHZhcmlvdXMgRGViaWFuIHBhY2thZ2luZyBpc3N1ZXMgLS0tIHNlZSBkZWJpYW4vY2hhbmdlbG9nIGZvcgorZGV0YWlscy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3M6ICM0ODM5NjIsICM0ODMwMjMpCisKK0FkZCBkZXRlY3Rpb24gZm9yIFpGUyB2b2x1bWVzIHRvIHRoZSBsaWJibGtpZCBsaWJyYXJ5LgorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ4NjQ2MykKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXggbWFyZ2luYWwgQyBjb2RlIGluIHByb2JlX2x2bTIoKSBmdW5jdGlvbiB0byB0aGUgYmxraWQgbGlicmFyeSBtb3JlCitwb3J0YWJsZSBmb3Igb2xkZXIgY29tcGlsZXJzLgorCitGaXggYnVpbGQgcHJvYmxlbXMgb24gTWFjT1MgWC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTk3MjQ3MykKKworRml4IGV4dDJmc19zd2FwezE2LDMyLDY0fSBmdW5jdGlvbnMgc28gdGhleSBjYW4gYmUgdXNlZCBieSBleHRlcm5hbAorYXBwbGljYXRpb25zIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0ODQ4NzkpCisgICAgCisKK0UyZnNwcm9ncyAxLjQwLjEwIChNYXkgMjEsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldmFsaWRhdGUgYSBibGtpZCBjYWNoZSBlbnRyeSwgaWYgdGhlCitkZXZpY2UncyBtdGltZSBpcyBuZXdlciB0aGFuIHRoZSBsYXN0IHRpbWUgdGhlIGNhY2hlZCBlbnRyeSB3YXMKK3ZhbGlkYXRlZCwgZm9yY2UgYSByZXZhbGlkYXRpb24uCisKK0ZpeCBhIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gYnVnIGluIGUyZnNjayBpbiB0aGUgam91cm5hbCByZXBsYXkuCitUaGUgY2hhbmNlcyBvZiB0aGlzIGlzIGhhcHBlbmluZyBpcyBleHRyZW1lbHkgcmVtb3RlLCBlc3BlY2lhbGx5IHRoZQorZGVmYXVsdCBkYXRhPW9yZGVyZWQgb3IgZGF0YT13cml0ZWJhY2sgbW9kZXMuICBIb3dldmVyLCBpZiBhIGJsb2NrCit3aGljaCBoYXMgYmVlbiBqb3VybmFsbGVkIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdCBmb3VyIGJ5dGVzIDB4YzAzYjM5OTgsCit3aGVuIGUyZnNjayByZXBsYXlzIHRoZSBqb3VybmFsLCB0aG9zZSBmb3VyIGJ5dGVzIHdpbGwgYmUgcmVwbGFjZWQKK3dpdGggemVybydzLiAgRm9ydHVuYXRlbHksIGl0IGlzIGhpZ2hseSwgaGlnaGx5IHVubGlrZWx5IGZvciBlMmZzY2sKK21ldGFkYXRhIHRvIGJlZ2luIHdpdGggdGhvc2UgZmF0YWwgNCBieXRlIHNlcXVlbmNlLCBhbmQgdW5sZXNzCitkYXRhPW9yZGVyZWQgbW9kZSBpcyBpbiB1c2UsIGRhdGEgYmxvY2tzIGFyZSBuZXZlciBqb3VybmFsZWQuCisKK1VwZGF0ZWQgR2VybWFuLCBEdXRjaCwgU3dlZWRpc2gsIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK1JlbW92ZSBkZWZhdWx0IHNpemVzIG9mIHR5cGVzIHdoZW4gY3Jvc3MgY29tcGlsaW5nLCBzaW5jZSBhdXRvY29uZgorMi41MCBjYW4gZmlndXJlIHRoaXMgb3V0IGF1dG9tYXRpY2FsbHkgbm93LgorCisKK0UyZnNwcm9ncyAxLjQwLjkgKEFwcmlsIDI3LCAyMDA4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N1U0UncyBzZWN1cml0eSB0ZWFtIGF1ZGl0ZWQgdXVpZGQgYW5kIGNhbWUgdXAgd2l0aCBhIGZldyBtaW5vcgoraXNzdWVzLiAgTm9uZSBvZiB0aGVtIGFyZSBzZXJpb3VzIGdpdmVuIHRoYXQgdXVpZGQgcnVucyBzZXR1aWQgYXMgYQordW5wcml2aWxlZ2VkIHVzZXIgd2hpY2ggaGFzIG5vIHNwZWNpYWwgYWNjZXNzIG90aGVyIHRoYW4gbGlidXVpZAorZGlyZWN0b3J5LCBidXQgaXQncyBnb29kIHRvIGdldCB0aGVtIGZpeGVkLgorCitPbmUgYWRkaXRpb25hbCBmaXggaW4gZXh0MmZzX3N3YXBfaW5vZGVfZnVsbCgpIG5lZWRlZCBmb3IgcmVzaXplMmZzIHRvCit3b3JrIGNvcnJlY3RseSB3aXRoIGluLWlub2RlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisKK1VwZGF0ZWQgR2VybWFuLCBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgUG9saXNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UKK3RyYW5zbGF0aW9ucy4KKworRGVidWdmcyB3aWxsIGF2b2lkIHVzaW5nIGEgcGFnZXIgaWYgdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBub3QgYSB0dHkuCisKK0ZpeCBkZWJ1Z2ZzIGFuZCB0dW5lMmZzIHRvIGNvcnJlY3RseSBoYW5kbGUgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIHdoZW4KK3BhcnNpbmcgYSB0aW1lIHN0cmluZy4KKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMsIHR5cG9zLCBhbmQgb3RoZXJ3aXNlIGNsYXJpZmllZCBtYW4gcGFnZXMuCisKK0ZpeCBmc2NrIGNvbXBsZXRpb24gYmFycyB3aGVuIG11bHRpcGxlIGZpbGVzeXN0ZW1zIHdlcmUgYmVpbmcgY2hlY2tlZAoraW4gcGFyYWxsZWwuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0MzI4NjUsIEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOgorIzIwMzMyMywgQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE5MjYwMjMpCisKK0ZpeCBmc2NrIHNvIHRoYXQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gaXMgc2VudCBiYWNrIGNvcnJlY3RseSB3aGVuCittdWx0aXBsZSBmaWxlc3lzdGVtcyBhcmUgYmVpbmcgY2hlY2sgYW5kIHRoZSBvdXRwdXQgb2YgZnNjayBpcyBiZWluZworcmVkaXJlY3RlZCB0byBhIGZpbGUgZGVzY3JpcHRvci4gIEFsc28sIGluY2x1ZGUgdGhlIGRldmljZSBuYW1lICh3L28KK3NwYWNlcykgaW4gdGhlIHByb2dyZXNzIGluZm9ybWF0aW9uIHNlbnQgYmFjayB2aWEgYSBmaWxlIGRlc2NyaXB0b3IuCisoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6ICMyMDMzMjMsIEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6CisjMTkyNjAyMykKKworVGVhY2ggZnNjayB0byB0cmVhdCAiZXh0NCIgYW5kICJleHQ0ZGV2IiBhcyBleHQqIGZpbGVzeXN0ZW1zLgorCitJZiBsb2dzYXZlIHJlY2VpdmVzIGEgU0lHVEVSTSBvciBTSUdJTlQgc2lnbmFsLCBpdCB3aWxsIG5vdyBwYXNzIHRoYXQKK3NpZ25hbCB0byBpdHMgY2hpbGQgcHJvY2Vzcy4KKworRml4IG1rZTJmcydzIGNyZWF0aW9uIG9mIGFyZSByZXNpemUgaW5vZGUgd2hlbiB0aGVyZSBpcyBhIG5vbi1zdGFuZGFyZAorc19maXJzdF9kYXRhX2Jsb2NrIHNldHRpbmcuCisKK0ZpeCBidWcgaW4gYmxraWQgd2hlbiBydW4gYnkgYW4gdW5wcml2aWxlZ2VkIHVzZXI7IG1vc3QgZGV2aWNlcyB3ZXJlCitub3QgcmVwb3J0ZWQgY29ycmVjdGx5LiAgOUFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjMjIwMjc1KQorCitNa2UyZnMgd2lsbCBub3QgYWxsb3cgdGhlIGxvZ2ljYWxseSBpbmNvcmVjdCBjb21iaW5hdGlvbiBvZgorcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnLCB3aGljaCBoYWQgcHJldmlvdXNseSBjYXVzZWQgbWtlMmZzIHRvIGNyZWF0ZQorYSBjb3JydXB0IGZpbGV5c3RlbS4KKworRml4IGZzY2sgaW4gR2VybWFuIGxvY2FsZXMgc28gdGhhdCBhICdqJyBtZWFucyB5ZXMuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE5NDc2ODMpCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuCisKK1VwZGF0ZSB2YWxncmluZCBvcHRpb25zIGluIHRlc3Rfc2NyaXB0IHRvIHdvcmsgd2l0aCB2YWxncmluZCAzLjIuMworCitVcGRhdGUgdGV4aW5mby50ZXggdG8gYSBtdWNoIG5ld2VyIHZlcnNpb24gZnJvbSB0aGUgRlNGLgorCitSZW1vdmUgYmFzaGlzbSBmb3IgY29uZmlndXJlIHNjcmlwdCBhbmQgZnJvbSB0aGUgbGliL3NzIE1ha2VmaWxlLgorQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogMTkyMTk2OQorCitGaXggc29tZSBzaWxlbnRseSBicm9rZW4gdGVzdHM6IG1fbm9fb3B0LCBtX21ldGFfYmcsIGFuZCBtX3JhaWRfb3B0LgorCitGaXggYnVpbGQgc3lzdGVtIHNvIHRoYXQgaWYgdGV4aW5mbyBpcyBub3QgaW5zdGFsbGVkLCBpdCB3b24ndCBwcmludCBhCisoaGFybWxlc3MpIGVycm9yIG1lc3NhZ2UuCisKKworRTJmc3Byb2dzIDEuNDAuOCAoTWFyY2ggMTMsIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgZTJpbWFnZSAtSSBzbyBpdCB3b3JrcyBvbiBpbWFnZSBmaWxlcyB3aGljaCBhcmUgbGFyZ2VyIHRoYW4gMkdCLgorCitGaXhlZCBlMmZzY2sncyBoYW5kbGluZyBvZiBkaXJlY3RvcnkgaW5vZGVzIHdpdGggYSBjb3JydXB0IHNpemUgZmllbGQuICBJZgordGhlIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBibG9ja3MgZm91bmQgaW4gdGhlIGlub2RlLCBkb24ndAordHJ5IHRvIGFsbG9jYXRlIGV4dHJhIGVtcHR5IGJsb2NrcyBhdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkgdG8gbWFrZQordXAgdGhlIGRpZmZlcmVuY2U7IHRoZXJlJ3Mgbm8gcG9pbnQgdG8gZG9pbmcgdGhhdC4gIEluIGFkZGl0aW9uLCBpZgordGhlIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgYSBibG9ja3NpemUsIGFsd2F5cyBmaXggaXQuCisKK0UyZnNjayBoYW5kbGVkIGEgcGFzcyAyICJzaG91bGQgbmV2ZXIgaGFwcGVuIGVycm9yIiBieSBub3QgZ2l2aW5nCitlbm91Z2ggaW5mb3JtYXRpb24gYW5kIHRoZW4gY29yZSBkdW1waW5nLiAgVW5mb3J0dW5hdGVseSwgaXQgd2FzIGFsbAordG9vIGVhc3kgdG8gdHJpZ2dlciB0aGUgInNob3VsZCBuZXZlciBoYXBwZW4iIHNpdHVhdGlvbiBpZiBhCitkaXJlY3RvcnkncyBpbm9kZSBzaXplIHdhcyBub3QgY29ycmVjdC4gIFRoaXMgaGFzIGJlZW4gZml4ZWQsIGJ1dAorZTJmc2NrIGhhcyBhbHNvIGJlZW4gdGF1Z2h0IGhvdyB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gbW9yZQorZ3JhY2VmdWxseSwgYnkgc2ltcGx5IHJlbW92aW5nIHRoZSBpbm9kZSBoYXNoIHRyZWUgaW5mb3JtYXRpb24sIHNvCit0aGF0IGl0IGNhbiBiZSByZWJ1aWx0IGFnYWluIGFmdGVyIGUyZnNjaydzIHBhc3MgMy4gIChBZGRyZXNzZXMKK0xhdW5jaHBhZCBCdWc6ICMxMjkzOTUpCisKK1Jlc2l6ZTJmcyBoYWQgYSBidWcgcmVzaXppbmcgbGFyZ2UgaW5vZGVzIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcwordGhhdCB3YXMgZml4ZWQgaW4gMS40MC42OyB1bmZvcnR1bmF0ZWx5LCBpdCB0dXJuZWQgb3V0IGl0IHdhc24ndCBmaXhlZAorY29tcGxldGVseSBvbiBiaWctZW5kaWFuIHN5c3RlbXMgc3VjaCBhcyBQb3dlclBDLiAgVGhlIGJ1ZyBzaG91bGQgYmUKK2NvbXBsZXRlbHkgZml4ZWQgbm93LiAgWWF5IGZvciByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLiAgKEFkZHJlc3NlcyBSZWQKK0hhdCBCdWd6aWxsYTogIzQzNDg5MykKKyAgICAKK1VwZGF0ZWQgR2VybWFuLCBDemVjaCwgRHV0Y2gsIFBvbGlzaCwgU3dlZWRpc2gsIGFuZCBWaWV0bmFtZXNlCit0cmFuc2xhdGlvbnMuICBNYW55IHRoYW5rcyB0byBQaGlsaXBwIFRob21hcyBmcm9tIE5vdmVsbCBmb3Igc3RlcHBpbmcKK3VwIHRvIGJlY29tZSB0aGUgbmV3IEdlcm1hbiB0cmFuc2xhdGlvbiBtYWludGFpbmVyISAgKEFkZHJlc3NlcyBEZWJpYW4KK0J1Z3M6ICMzMDI1MTIsICMzNzAyNDcsICM0MDEwOTIsICM0MTI4ODIpLgorCitXaGVuIGUyZnNjayBpcyBjbGVhcmluZyBhIGNvcnJ1cHQgaW5vZGUncyBIVFJFRSBkaXJlY3RvcnkgaW5mb3JtYXRpb24sCittYWtlIGl0IGNsZWFyIHRoYXQgaXQgaXMganVzdCBjbGVhcmluZyB0aGUgSFRSRUUgaW5mb3JtYXRpb24sIG5vdCB0aGUKK2VudGlyZSBpbm9kZS4KKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMsIHR5cG9zLCBhbmQgb3RoZXJ3aXNlIGNsYXJpZmllZCBtYW4gcGFnZXMuICAKKworUHJvZ3JhbW1lcidzIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIG5ldyBmdW5jdGlvbnMsIGV4dDJmc19kYmxpc3RfZ2V0X2xhc3QoKSBhbmQKK2V4dDJmc19kYmxpc3RfZHJvcF9sYXN0KCksIHdoaWNoIGFsbG93cyB0aGUgY2FsbGVyIHRvIGV4YW1pbmUgdGhlIGxhc3QKK2RpcmVjdG9yeSBibG9jayBlbnRyeSBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIHRvIGRyb3AgaWYgaXQgbmVjZXNzYXJ5LgorCitGaXhlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gaW4gbGliYmxraWQgd2l0aCBESkdQUC4KKworRml4IGFuIG9idmlvdXMgdHlwbyBpbiBhbiAiaW50ZXJuYWwgZXJyb3IiIG1lc3NhZ2UgaW4gZTJmc2NrLiAgVGhhbmtzCit0byBQaGlsaXBwIFRob21hcyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKK0lmIHRoZSBpbmZvIGZpbGVzIGFyZSBub3QgYnVpbHQsIGNoYW5nZSAibWFrZSBpbnN0YWxsIiBzbyBpdCBkb2Vzbid0CitmYWlsIHdpdGggYW4gZXJyb3IgY29kZS4KKworCitFMmZzcHJvZ3MgMS40MC43IChGZWJydWFyeSAyOCwgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZW1vdmUgc3VwcG9ydCBmb3IgY2xlYXJpbmcgdGhlIFNQQVJTRV9TVVBFUiBmZWF0dXJlIGZyb20gdHVuZTJmcywgYW5kCitkZXByZWNpYXRlIHRoZSAtcyBvcHRpb24sIHNpbmNlIGl0IGNhbiByZXN1bHQgaW4gZmlsZXN5c3RlbXMgd2hpY2gKK2UyZnNjayBjYW4ndCBmaXggZWFzaWx5LiAgVGhlcmUgYXJlIHZlcnkgZ29vZCByZWFzb25zIGZvciB3YW50aW5nIHRvCitkaXNhYmxlIHNwYXJzZV9zdXBlcjsgdXNlcnMgd2hvIHdhbnRzIHRvIHR1cm4gb2ZmIHNwYXJzZV9zdXBlciBjYW4gdXNlCitkZWJ1Z2ZzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODQwMjg2KQorICAgIAorQWRkIG1pc3Npbmcgb3B0aW9ucyB0byBta2UyZnMncyB1c2FnZSBtZXNzYWdlLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZQorQnVnOiAjMTc1MTM5MykKKyAgICAKK0ZpeCBidWcgaW4gcmVzaXplMmZzIHdoZW4gbGFyZ2UgKGdyZWF0ZXIgdGhhbiAxMjggYnl0ZSkgaW5vZGVzIGFyZQorbW92ZWQgd2hlbiBhIGZpbGVzeXN0ZW0gaXMgc2hydW5rOyBpdCB3YXMgb25seSBtb3ZpbmcgdGhlIGZpcnN0IDEyOAorYnl0ZXMsIHNvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgd2VyZSBub3QgZ2V0dGluZyBtb3ZlZC4gIChBZGRyZXNzZXMgUmVkCitIYXQgQnVnemlsbGE6ICM0MzQ4OTMpCisKK0UyZnNjayBub3cgcHJpbnRzIGFuIGV4cGxpY2l0IG1lc3NhZ2Ugd2hlbiB0aGUgYmFkIGJsb2NrIGlub2RlIGlzCit1cGRhdGVkLCB0byBhdm9pZCBjb25mdXNpb24gYWJvdXQgd2h5IHRoZSBmaWxlc3lzdGVtIHdhcyBtb2RpZmllZC4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjNzU2NDYwKQorICAgIAorQWxsb3cgbWtlMmZzIGFuZCB0dW5lMmZzIG1hbmlwdWxhdGUgdGhlIGxhcmdlX2ZpbGUgZmVhdHVyZS4KK1ByZXZpb3VzbHkgd2UganVzdCBsZXQgdGhlIGtlcm5lbCBhbmQgZTJmc2NrIGRvIHRoaXMgYXV0b21hdGljYWxseSwKK2J1dCBlMmZzY2sgd2lsbCBubyBsb25nZXIgYXV0b21hdGljYWxseSBjbGVhciB0aGUgbGFyZ2VfZmlsZSBmZWF0dXJlLgorSXQgc3RpbGwgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSB0byB3b3JyeSBhYm91dCB0aGlzIGZlYXR1cmUgZmxhZworZXhwbGljaXRseSwgYnV0IHNvbWUgdXNlcnMgc2VlbSB0byBjYXJlLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOgorIzI1ODM4MSkKKyAgICAKK1N1cHByZXNzIG1lc3NhZ2UgYWJvdXQgYW4gb2xkLXN0eWxlIGZzdGFiIGlmIHRoZSBmc3RhYiBmaWxlIGlzIGVtcHR5LgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDY4MTc2KQorICAgIAorRml4IChyZWFsbHkgbWlub3IpIGJ1ZyBpbiBkZWJ1Z2ZzJ3MgZmluZF9mcmVlX2Jsb2NrIHNvIGl0IGF2b2lkcworcmVwb3J0aW5nIGEgZnJlZSBibG9jayBtb3JlIHRoYW4gb25jZSBpZiB0aGVyZSBhcmUgdG9vIGZldyBmcmVlIGJsb2NrcworaW4gdGhlIGZpbGVzeXN0ZW0uICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzEwOTYzMTUpCisgICAgCitDaGFuZ2UgZTJmc2NrIHRvIG5vIGxvbmdlciBjbGVhciB0aGUgTEFSR0VfRklMRVMgZmVhdHVyZSBmbGFnCithdXRvbWF0aWNhbGx5LCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlID4gMkdCIGZpbGVzIGluIHRoZSBmaWxlc3lzdGVtLgorSXQncyBiZWVuIGFsbW9zdCBhIGRlY2FkZSBzaW5jZSB0aGVyZSBoYXZlIGJlZW4ga2VybmVscyB0aGF0IGRvbid0CitzdXBwb3J0IHRoaXMgZmxhZywgYW5kIGUyZnNjayBjbGVhcnMgaXQgcXVpZXRseSB3aXRob3V0IHRlbGxpbmcgdGhlCit1c2VyIHdoeSB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIAorRml4IGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBsaWJibGtpZCB0byBzZWcgZmF1bHQgaWYgYSBkZXZpY2UgbWFwcGVyCit2b2x1bWUgZGlzYXBwZWFycyB3aGlsZSBpdCBpcyBiZWluZyBwcm9iZWQuICAoQWRkcmVzc2VzIFJlZEhhdAorQnVnemlsbGE6ICM0MzM4NTcpCisgICAgCitJbmhhbmNlIGUyZnNjaydzIHJlcG9ydGluZyBvZiB1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIGZlYXR1cmUgZmxhZ3MuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEZlYXR1cmUgUmVxdWVzdDogIzExNzU4MDgpCisgICAgCitGaXggb3B0aW9uIHN5bnRheCBpbiBkdW1wZTJmcyBmb3IgZXhwbGljaXQgc3VwZXJibG9jayBhbmQgYmxvY2tzaXplCitwYXJhbWV0ZXJzLiAgV2hhdCB3YXMgY3VycmVudGx5IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlIGhhcyBiZWVuCiticm9rZW4gZm9yIHNvbWUgdGltZSwgZHVlIHRvIGdldG9wdCgpIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuICBUaGUKK29wdGlvbiBzeXRheCBoYXMgYmVlbiBjaGFuZ2VkIHRvIG9uZSB3aGljaCBpcyBjYW4gYmUgbW9yZSBwb3J0YWJsZQorc3VwcG9ydGVkIGFuZCB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGZvcm1hdCBmb3IgZXh0ZW5kZWQgb3B0aW9ucworaW4gbWtlMmZzIGFuZCB0dW5lMmZzLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODMwOTk0KQorICAgIAorQWRkIHN1cHBvcnQgdG8gdHVuZTJmcyB0byBjbGVhciB0aGUgcmVzaXplX2lub2RlIGZlYXR1cmUuICBUaGlzCityZXF1aXJlcyBhbiBmc2NrIGFmdGVyd2FyZHMuICAoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6ICMxNjc4MTYpCisKK1RlYWNoIGJsa2lkIHRvIGRldGVjdCBMVk0yIHBoeXNpY2FsIHZvbHVtZXMuICAoQWRkcmVzc2VzIFJlZCBIYXQKK0J1Z3ppbGxhOiAjNDA5MzIxKQorCitBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyBSQUlEIHN0cmlkZSBhbmQgc3RyaXBlLXdpZHRoIHZpYSBta2UyZnMgYW5kCit0dW5lMmZzLiAgVGVhY2ggZHVtcGUyZnMgdG8gcHJpbnQgdGhlIFJBSUQgcGFyYW1ldGVycy4KKworQWRkIHN1cHBvcnQgZm9yIHNldHRpbmcgbmV3IHN1cGVyYmxvY2sgZmllbGRzIHRvIGRlYnVnZnMncworc2V0X3N1cGVyX3ZhbHVlLgorCitBZGQgc3VwcG9ydCBmb3IgcHJpbnRpbmcgIm1vc3RseS1wcmludGFibGUiIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4KK0RlYnVnZnMuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgLU0gb3B0aW9uIHRvIGZzY2ssIHdoaWNoIGNhdXNlcyBpdCB0byBpZ25vcmUKK21vdW50ZWQgZmlsZXN5c3RlbS4KKworRml4IHV1aWRkIHNvIHRoYXQgaXQgY3JlYXRlcyB0aGUgcGlkIGZpbGUgd2l0aCB0aGUgY29ycmVjdCBwaWQgbnVtYmVyLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODkzMjQ0KQorCitGaXggdmFyaW91cyBnY2MgLVdhbGwgd2FybmluZ3MuCisKK1VwZGF0ZSBDemVjaCwgRHV0Y2gsIFBvbGlzaCwgU3dlZWRpc2gsIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucworCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4gIAorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBQYXRjaDogIzEzOTkzMjUpCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0NjY5MjkpCisKK0FkZCBuZXcgZmxhZyBFWFQyX0ZMQUdfTk9ORlJFRV9PTl9FUlJPUiBleHQyZnNfb3BlbjIoKSB3aGljaCByZXR1cm5zIGEKK3BhcnRpYWxseSBmaWxsZWQtaW4gZmlsZXN5c3RlbSBvYmplY3Qgb24gYW4gZXJyb3IsIHNvIHRoYXQgZTJmc2NrIGNhbgorcHJpbnQgbW9yZSBpbnRlbGxpZ2VudCBlcnJvciBtZXNzYWdlcy4KKyAgICAKK0FkZCBhIG5ldyBmdW5jdGlvbiBlMnBfZWRpdF9mZWF0dXJlMigpIHdoaWNoIGFsbG93cyB0aGUgY2FsbGVyIHRvCitzcGVjaWZ5IHdoaWNoIGZlYXR1cmUgZmxhZ3MgYXJlIE9LIHRvIHNldCBvciBjbGVhciwgYW5kIHdoaWNoIHJldHVybnMKK21vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgZmVhdHVyZSBmbGFncyB3aGljaCBhcmUgbm90IGFsbG93ZWQgdG8KK2JlIHNldC9jbGVhcmVkLgorICAgIAorU2V0IHRoZSBDIGxvY2FsZSBpbiB0aGUgdGVzdF9zY3JpcHQgZHJpdmVyIHNpbmNlIGl0IHVzZXMgW0EtWmEtel0uCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4OTA1MjYpCisKK1VzZSBmY250bCBsb2NraW5nIGluc3RlYWQgb2YgbG9ja2YgaW4gbGlidXVpZCBzaW5jZSBDeWd3aW4gZG9lc24ndAorc3VwcG9ydCBsb2NrZigpLgorCitDaGFuZ2UgY29uZmlndXJlLmluIHRvIGF2b2lkIHVzaW5nIHRoZSAnZGMnIGNvbW1hbmQgdW5sZXNzIGl0IGlzCithYnNvbHV0ZWx5IG5lZWRlZC4gKGkuZS4sIHdoZW4gdXNpbmcgcGFyc2luZyBhIFdJUC1zdHlsZSB2ZXJzaW9uCitudW1iZXIpICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4OTMwMjQpCisKK0FkZCBwb3J0YWJpbGl0eSBjaGVja3MgdG8gc3VwcG9ydCBjb21waWxhdGlvbiB1bmRlciBESkdQUC4KKworVXBkYXRlIHRvIHRoZSBsYXRlc3Qgc2FtYmEgdGRiIGNvZGUgYmVmb3JlIHRoZSBMR1BMdjMgY2hhbmdlLCB3aGljaAorZml4ZXMgYSByZWFsbG9jKCkgbGVhayBvbiBmYWlsdXJlLgorCitGaXggbWVtb3J5IGxlYWsgaW4gZXh0MmZzX2FsbG9jX2Jsb2NrKCkuCisKK0ZpeCBtYWtlZmlsZSBkZXBlbmRlbmN5IGlzc3VlcyBmb3IgdmFyaW91cyBpbnN0YWxsIHRhcmdldHMuCisoQWRkcmVzc2VzLVNvdXJjZWZvcmdlLVBhdGNoZXM6ICMxOTAzNDg0LCAjMTkwMzQ2NiwgIzE5MDM0NTYpCisgICAgCitJbXByb3ZlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIHJfbW92ZV9pdGFibGUgYW5kIHJfcmVzaXplX2lub2RlIHRlc3RzLgorCisKK0UyZnNwcm9ncyAxLjQwLjYgKEZlYnJ1YXJ5IDksIDIwMDgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nIGxhYmVscyBmb3IgVURGIGZpbGVzeXN0ZW1zIGluIHRoZSBibGtpZAorbGlicmFyeS4KKworRml4IGJ1ZyBpbiB0aGUgYmxraWQgbGlicmFyeSB3aGVyZSBjYWNoZWQgZmlsZXN5c3RlbXMgd2FzIG5vdCBiZWluZworZmx1c2hlZCB3aGVuIG9wZW5pbmcgVVNCIGRldmljZXMgcmV0dXJuZWQgdGhlIGVycm9yIEVOT01FRElVTS4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQ2Mzc4NykKKworQWRkZWQgbG9naWMgdG8gdGhlIGJsa2lkIGxpYnJhcnkgdG8gYXV0b21hdGljYWxseSBjaG9vc2Ugd2hldGhlciBhCitmaWxlc3lzdGVtIHNob3VsZCBiZSBtb3VudGVkIGFzIGV4dDQgb3IgZXh0NGRldiwgYXMgYXBwcm9wcmlhdGUuCisKK0FsbG93IHR1bmUyZnMgdG8gc2V0IGFuZCBjbGVhciB0aGUgdGVzdF9mcyBmbGFnIG9uIGV4dDQgZmlsZXN5c3RlbXMuCisKK0ZpeCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2F1c2VkIGl0IHRvIGNvcmUgZHVtcCBpZiBlMmZzcHJvZ3MgaGFkIGJlZW4KK2NvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1qYmQtZGVidWcuCisKK0RvY3VtZW50IHRoZSBCTEtJRF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHRoZSBsaWJibGtpZCBtYW4gcGFnZQorCitQcm9ncmFtbWVyJ3MgTm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0ZSBlMmZzcHJvZ3MgdHJhbnNsYXRpb24gdGVtcGxhdGUgYW5kIFZpZXRuYW1lc2UgYW5kIEN6ZWNoIHRyYW5zbGF0aW9ucworCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzOiAjNDM2MDU4KQorCitEb24ndCB0cnkgdG8gY3JlYXRlICRERVNURElSL2V0Yy9pbml0LmQgYXMgcGFydCBvZiBtYWtlIGluc3RhbGwgYXMgd2UKK2Rvbid0IGluc3RhbGwgdGhlIGluaXQuZCBzY3JpcHQgKGFuZCBpdCdzIG5vdCB0aGUgcmVjb21tZW5kZWQgd2F5IHRvCitzdGFydCB1dWlkZCBhbnl3YXkpLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODg1MDg1KQorCitVc2UgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdG8gZml4IGEgdGhlb3JldGljYWwgcmFjZSBjb25kaXRpb24gaWYgdHdvCit0aHJlYWRzIHRyeSB0byBmb3JtYXQgYW4gdW5rbm93biBlcnJvciBjb2RlIGF0IHRoZSBzYW1lIHRpbWUgaW4gdGhlCitjb21fZXJyIGxpYnJhcnkuCisKKworRTJmc3Byb2dzIDEuNDAuNSAoSmFudWFyeSAyNywgMjAwOCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIHBvdGVudGlhbCBvdmVyZmxvdyBiaWcgaW4gZTJpbWFnZSBpZiB0aGUgZGV2aWNlIG5hbWUgaXMgdG9vCitsb25nLgorCitNa2UyZnMgd2lsbCBub3cgY3JlYXRlIG5ldyBmaWxlc3lzdGVtcyB3aXRoIDI1NiBieXRlIGlub2RlcyBhbmQgdGhlCitleHRfYXR0ciBmZWF0dXJlIGZsYWcgYnkgZGVmYXVsdC4gIFRoaXMgYWxsb3dzIGZvciBtdWNoIGJldHRlciBmdXR1cmUKK2NvbXBhdGliaXR5IHdpdGggZXh0NCBhbmQgc3BlZWRzIHVwIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZXZlbiBvbiBleHQzCitmaWxlc3lzdGVtcy4KKworVGVhY2ggZTJmc2NrIHRvIGlnbm9yZSBjZXJ0YWluICJzYWZlIiBmaWxlc3lzdGVtIGZlYXR1cmVzIHdoaWNoIGFyZQorc2V0IGF1dG9tYXRpY2FsbHkgYnkgdGhlIGtlcm5lbC4gIEhhdmluZyB0aGUga2VybmVsIHNldCBmZWF0dXJlcworYXV0b21hZ2ljYWxseSBiZWhpbmQgdGhlIHVzZXIncyBiYWNrIGlzIGEgYmFkIGlkZWEsIGFuZCB3ZSBzaG91bGQgdHJ5Cit0byBicmVhayB0aGUga2VybmVsIG9mIHRoaXMgaGFiaXQsIGVzcGVjaWFsbHkgZm9yIHRoZSBuZXdlciBleHQ0CitmZWF0dXJlIGZsYWdzLiAgQnV0IGZvciBub3csIHdlIHdpbGwgdHJ5IHRvIGF2b2lkIG5lZWRsZXNzIGZ1bGwgY2hlY2tzCit3aGljaCBjYW4gYW5ub3kgdXNlcnMgd2hvIGFyZSBkb2luZyBmcmVzaCBpbnN0YWxscy4KKworQWRkIHN1cHBvcnQgaW4gdHVuZTJmcyBhbmQgbWtlMmZzIGZvciBtYWtpbmcgYSBmaWxlc3lzdGVtIGFzIGJlaW5nICJvawordG8gYmUgdXNlZCB3aXRoIHRlc3Qga2VybmVsIGNvZGUiLiAgVGhpcyB3aWxsIGJlIG5lZWRlZCBmb3IgdXNpbmcgdGVzdAorZmlsZXN5c3RlbXMgd2l0aCB0aGUgbGF0ZXN0IGV4dDQga2VybmVsIGNvZGUuCisKK0NoYW5nZSBlMmZzY2sgLWZEIHNvIHRoYXQgaXQgc29ydHMgbm9uLWh0cmVlIGRpcmVjdG9yaWVzIGJ5IGlub2RlCitudW1iZXJzIGluc3RlYWQgb2YgYnkgbmFtZSwgc2luY2UgdGhhdCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2VzIG11Y2gKK21vcmUgc2lnbmlmaWNhbnRseS4gIChBZGRyZXNzZXMtU291cmNlZm9yZ2UtRmVhdHVyZS1SZXF1ZXN0OiAjNTMyNDM5KQorCitJZiBlMmltYWdlIGZpbGxzIHRoZSBkaXNrLCBmaXggaXQgc28gaXQgZXhpdHMgcmlnaHQgYXdheSBpbnN0ZWFkIG9mCitzcGV3aW5nIGxhcmdlIG51bWJlcnMgb2YgZXJyb3IgbWVzc2FnZXMuCisoQWRkcmVzc2VzLVNvdXJjZWZvcmdlLUZlYXR1cmUtUmVxdWVzdDogIzYwNjUwOCkKKworSWYgZnRydW5jYXRlNjQoKSBpcyBub3QgYXZhaWxhYmxlIGZvciByZXNpemUyZnMsIGxldCBpdCB1c2UgZnRydWNhdGUoKQoraW5zdGVhZCwgYnV0IGhhdmUgaXQgY2hlY2sgdG8gc2VlIGlmIHRoZSBzaXplIHdvdWxkIGdldCB0cnVuY2F0ZWQsIGFuZAorc2tpcCBjYWxsaW5nIGZ0cnVuY2F0ZSBpbiB0aGF0IGNhc2UuCisKK0FkZCBzdXBwb3J0IGZvciBkZXRlY3RpbmcgSEZTKyBmaWxlc3lzdGVtcyBpbiB0aGUgYmxraWQgbGlicmFyeS4KKworQWRkIHN1cHBydCBpbiB0aGUgYmxraWQgbGlicmFyeSBmb3IgZXh0NC9leHQ0ZGV2IGZpbGVzeXN0ZW1zLgorCitGaXggYSBidWcgaW4gYmxraWQgd2hlcmUgaXQgY291bGQgZGllIG9uIGEgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uCit3aGVuIHByZXNlbnRlZCB3aXRoIGEgY29ycnVwdCByZWlzZXJmcyBpbWFnZS4KKworRml4IGJsa2lkJ3MgaGFuZGxpbmcgb2YgbnRmcyBVVUlEJ3Mgc28gdGhhdCBsZWFkaW5nIHplcm9zIGFyZSBwcmludGVkCitzdWNoIHRoYXQgVVVJRCBzdHJpbmcgaXMgYSBmaXhlZCBsZW5ndGguCisKK0FkZCBzYW1wbGUgcHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgdXVpZCBsaWJyYXJ5IHRvIHRoZSBjb250cmliCitkaXJlY3RvcnkuICAoQWRkcmVzc2VzLVNvdXJjZWZvcmdlLVBhdGNoZXM6ICM3Nzg4MTcpCisKK0ZpeCBkZWJ1Z2ZzJ3MgJ2xzZGVsJyBjb21tYW5kIHNvIGl0IHVzZXMgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyIHNvIGl0Cit3aWxsIHdvcmsgd2l0aCBsYXJnZSBmaWxlcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgRmVhdHVyZSBSZXF1ZXN0OgorIzEyNTc1MDAgYW5kIFNvdXJjZWZvcmdlIFN1cHBvcnQgUmVxdWVzdDogIzEyNTM1MTEpCisgICAgCitBbGxvdyB0aGUgZGVidWdmcyAndW5kZWwnIGNvbW1hbmQgdG8gdW5kZWxldGUgYW4gaW5vZGUgd2l0aG91dCBsaW5raW5nCitpdCB0byBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSwgc2luY2UgdGhpcyBtaWdodCByZXF1aXJlCithbGxvY2F0aW5nIGJsb2NrcyB0aGF0IGNvdWxkIG92ZXJ3cml0ZSBzb21lIHlldC10by1iZS1yZWNvdmVyZWQKK2RlbGV0ZWQgZmlsZXMuICAoQWRkcmVzc2VzLVNvdXJjZWZvcmdlLUZlYXR1cmUtUmVxdWVzdDogIzk2NzE0MSkKKworVXBkYXRlIFN3ZWRpc2ggdHJhbnNsYXRpb25zIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKK1Byb2dyYW1tZXIncyBOb3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGNvbmZpZ3VyZSBoYW5kbGluZyBvZiAtLXNiaW5kaXIgKHdoaWNoIHNob3VsZCByYXJlbHkgYmUgdXNlZCwgYnV0Citzb21lb25lIGRpZCBjb21wbGFpbiwgc28gbGV0J3MgZml4IGl0KS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzQ5ODM4MSkKKworVXBkYXRlZCBlMmZzcHJvZ3Muc3BlYyBmaWxlIHRvIGluY2x1ZGUgYSBuZXcgdXVpZGQgcGFja2FnZQorCitVc2UgcGtnLWNvbmZpZyB0byBkZXRlcm1pbmUgd2hlcmUgdG8gZmluZCB0aGUgZGV2bWFwcGVyIGxpYnJhcnkgc28gd2UKK2NhbiBmaW5kIG91dCB3aGVyZSBpdCBpcyBsb2NhdGVkIG9uIGRpZmZlcmVudCBkaXN0cmlidXRpb25zLgorCitGaXggTWFrZWZpbGUgcmFjZSBzbyB0aGF0ICJtYWtlIC1qMyBkaXN0Y2xlYW4iIHdvcmtzIGNvcnJlY3RseQorCitGaXggcG9ydGFiaWxpdHkgcHJvYmxlbXMgb24gbm9uLUxpbnV4L25vbi1IdXJkL25vbi1NYXNpeCBzeXN0ZW1zLAorZXNwZWNpYWxseSBvbiBNYWNPUyBYIHN5c3RlbXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1Z3M6ICMxODYxNjMzLAorIzE4MTkwMzQsICMxODYzODE5KQorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQ1OTQwMywgIzQ1OTQ3NSwgIzQ1OTYxNCkKKworUmVtb3ZlIHRoZSAtLWVuYWJsZS1keW5hbWljLXN0YXRpYyBjb25maWd1cmUgb3B0aW9uLCBhbmQgYnVpbGQgZTJmc2NrCitkeW5hbWljYWxseSBieSBkZWZhdWx0LiAgSWYgdGhlIHVzZXIgd2FudHMgZTJmc2NrLnN0YXRpYywgaGUvc2hlIHdpbGwKK25lZWQgdG8gYnVpbGQgaXQgdmlhICJtYWtlIC1DIGUyZnNjayBlMmZzY2suc3RhdGljIgorCitGaXggdmFyaW91cyBidWlsZCB3YXJuaW5ncyBkdWUgdG8gbWlzc2luZyBwcm90b3R5cGVzLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBQYXRjaDogIzE4NjE2NjMsICMxODYxNjU5KQorCisKK0UyZnNwcm9ncyAxLjQwLjQgKERlY2VtYmVyIDMxLCAyMDA3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ltcHJvdmUgdGltZS1iYXNlZCBVVUlEIGdlbmVyYXRpb24uICBBIG5ldyBkYWVtb24gdXVpZGQsIGlzIHN0YXJ0ZWQKK2F1dG9tYXRpY2FsbHkgYnkgbGlidXVpZCBpZiBuZWNlc3NhcnkuICBUaGlzIGRhZW1vbiBpcyBzZXR1aWQgdG8gYWxsb3cKK3VwZGF0ZXMgdG8gL3Zhci9saWIvbGlidXVpZCwgc28gdGhlIGNsb2NrIHNlcXVlbmNlIG51bWJlciBjYW4gYmUKK3N0b3JlZCBhbmQgc28gaWYgdGhlIGNsb2NrIGlzIHNldCBiYWNrd2FyZHMsIGl0IGNhbiBiZSBkZXRlY3RlZC4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTUyOTY3MiwgQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGE6CisjMjMzNDcxKQorCitGaWx0ZXIgb3V0IHRoZSBORUVEU19SRUNPVkVSWSBmZWF0dXJlIGZsYWcgd2hlbiB3cml0aW5nIG91dCB0aGUgYmFja3VwCitzdXBlcmJsb2Nrcy4gIFRoaXMgYXZvaWRzIGUyZnNjayBmcm9tIGNvbmNsdWRpbmcgdGhhdCBhIGZ1bGwKK2ZpbGVzeXN0ZW0gY2hlY2sgaXMgcmVxdWlyZWQgYmVmb3JlIGJhY2tpbmcgdXAgdGhlIHN1cGVyYmxvY2sgZHVlIHRvCitjaGFuZ2VzIGluIHRoZSBmZWF0dXJlIGZsYWdzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDU0OTI2KQorCitGaXggZnNjayB0byBvbmx5IHRyZWF0IHRoZSAnIycgY2hhcmFjdGVyIGFzIGEgY29tbWVudCBhdCB0aGUgYmVnaW5uaW5nCitvZiB0aGUgbGluZSBpbiAvZXRjL2ZzdGFiLiAgT3RoZXJ3aXNlIGZzdGFicyBmb3IgdGhlIGZ1c2UgZmlsZXN5c3RlbQord2lsbCBjYXVzZSBmc2NrIHRvIGlzc3VlIGFuIGJvZ3VzIHdhcm5pbmcgbWVzc2FnZS4KKyhBZGRyZXNzZXMgR2VudG9vIGJ1ZzogIzE5NTQwNSwgQWRkcmVzc2VzIFNvdXJjZWZvcmdlIGJ1ZzogIzE4MjYxNDcpCisKK0Zvcm1hdCBjb250cm9sIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlcnMgd2l0aCB0aGUgaGlnaCBlaWdodGggYml0IHNldAord2hlbiBwcmludGluZyB0aGUgY29udGVudHMgb2YgdGhlIGJsa2lkIGNhY2hlLCB0byBwcmV2ZW50IGZpbGVzeXN0ZW1zCit3aXRoIGdhcmJhZ2UgbGFiZWxzIGZyb20gc2VuZGluZyBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZSB1c2VyJ3Mgc2NyZWVuCit0aGF0IG1pZ2h0LCBmb3IgZXhhbXBsZSBwbGFjZSBpdCBpbiBncmFwaGljcyBtb2RlLiAgKEFkZHJlc3NlcyBVYnVudHUKK0J1ZzogIzc4MDg3KQorCitGaXggc2lnbi1leHRlbnNpb24gcHJvYmxlbSBvbiA2NC1iaXQgc3lzdGVtcyBpbiBpbiB0aGUgY29tX2VycgorbGlicmFyeS4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOiAjMTgwOTY1OCkKKworQXZvaWQgZGl2aXNpb24gYnkgemVybyBlcnJvciB3aGVuIHByb2JpbmcgYW4gaW52YWxpZCBGQVQgZmlsZXN5c3RlbSBpbgordGhlIGJsa2lkIGxpYnJhcnkuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4MzE2MjcpCisKK1VwZGF0ZSBEdXRjaCwgUG9saXNoLCBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgVHJhbnNsYXRpb24KK1Byb2plY3QuICBSZW1vdmUgdGhlIFJ3YW5kYW4gdHJhbnNsYXRpb24gdXBvbiBhZHZpY2Ugb2YgdGhlCitUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitQcm9ncmFtbWVyJ3MgTm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCB0aGUgbGlic3MgIm1ha2UgY2hlY2siIHJlZ3Jlc3Npb24gdGVzdCBzbyB0aGF0IGl0IHdvcmtzIGlmIHRoZQorY3VycmVudCBkaXJlY3RvcnkgaXMgbm90IGluIHRoZSB1c2VyJ3MgcGF0aCBvciBpZiB0aGUgbGlic3Mgc2hhcmVkCitsaWJyYXJ5IGlzIG5vdCBpbnN0YWxsZWQuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE4NDg5NzQpCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQ0NDg4MywgIzQ0MTg3MikKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzQzNzcyMCwgIzQ1MTE3MiwgIzQ1ODAxNykKKworRml4IGJ1aWxkIGZhaWx1cmUgb24gbm9uLUxpbnV4L25vbi1IdXJkL25vbi1NYXNpeCBzeXN0ZW1zLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxODU5Nzc4KQorCitGaXggSHVyZCBwb3J0YWJpbGl0eSBpc3N1ZXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0Mzc3MjApCisKKworRTJmc3Byb2dzIDEuNDAuMyAoRGVjZW1iZXIgNSwgMjAwNykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHdoZXJlIGFuIHVudHJ1c3RlZCBmaWxlc3lzdGVtCitjYW4gYmUgY29ycnVwdGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhIHByb2dyYW0gdXNpbmcgbGliZXh0MmZzIHdpbGwKK2FsbG9jYXRlIGEgYnVmZmVyIHdoaWNoIGlzIGZhciB0b28gc21hbGwuICBUaGlzIGNhbiBsZWFkIHRvIGVpdGhlciBhCitjcmFzaCBvciBwb3RlbnRpYWxseSBhIGhlYXAtYmFzZWQgYnVmZmVyIG92ZXJmbG93IGNyYXNoLiAgTm8ga25vd24KK2V4cGxvaXRzIGV4aXN0LCBidXQgbWFpbiBjb25jZXJuIGlzIHdoZXJlIGFuIHVudHJ1c3RlZCB1c2VyIHdobworcG9zc2Vzc2VzIHByaXZpbGVnZWQgYWNjZXNzIGluIGEgZ3Vlc3QgWGVuIGVudmlyb25tZW50IGNvdWxkIGNvcnJ1cHQgYQorZmlsZXN5c3RlbSB3aGljaCBpcyB0aGVuIGFjY2Vzc2VkIGJ5IHRoZSBweWdydWIgcHJvZ3JhbSwgcnVubmluZyBhcworcm9vdCBpbiB0aGUgZG9tMCBob3N0IGVudmlyb25tZW50LCB0aHVzIGFsbG93aW5nIHRoZSB1bnRydXN0ZWQgdXNlciB0bworZ2FpbiBwcml2aWxlZ2VkIGFjY2VzcyBpbiB0aGUgaG9zdCBPUy4gIFRoYW5rcyB0byB0aGUgTWNBZmVlIEFWRVJUCitSZXNlYXJjaCBncm91cCBmb3IgcmVwb3J0aW5nIHRoaXMgaXNzdWUuICAoQWRkcmVzc2VzIENWRS0yMDA3LTU0OTcuKQorCitGaXggaHVlcmlzdGljcyBpbiBibGtpZCB3aGljaCBjb3VsZCBjYXVzZSBhIGRpc2sgd2l0aG91dCBwYXJ0aXRpb25zIHRvCitiZSBpbmNvcnJlY3RseSBza2lwcGVkIHdoZW4gYSBsb29wYmFjayBkZXZpY2UgaXMgcHJlc2VudC4gIChBZGRyZXNzZXMKK1JlZCBIYXQgQnVnemlsbGEgIzQwMDMyMS4pCisKK0ZpeCBlMmltYWdlIHNvIHRoYXQgaW4gcmF3IG1vZGUgaXQgZG9lcyBub3QgY3JlYXRlIGFuIGltYWdlIGZpbGUgd2hpY2gKK2lzIG9uZSBieXRlIHRvbyBsYXJnZS4KKworQ2hhbmdlIG1rZTJmcydzIHVzYWdlIG1lc3NhZ2Ugc28gaXQgcmVjb21tZW5kcyB0aGUgcHJlZmVycmVkIC1FIG9wdGlvbgoraW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCAtUiBvcHRpb24uCisKK0VuaGFuY2UgdGhlIGJsa2lkIGxpYnJhcnkgc28gaXQgd2lsbCByZWNvZ25pemUgc3F1YXNoZnMgZmlsZXN5c3RlbXMuCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGEgIzMwNTE1MS4pCisKK0VuaGFuY2UgZTJmc2NrIHNvIGl0IHdpbGwgZm9yY2UgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyB0byBiZSBiYWNrZWQgdXAKK2lmIHRoZSBmaWxlc3lzdGVtIGlzIGNvbnNpc3RlbnQgYW5kIGtleSBjb25zdGFudHMgaGF2ZSBiZWVuIGNoYW5nZWQKKyhpLmUuLCBieSBhbiBvbi1saW5lIHJlc2l6ZSkgb3IgYnkgZTJmc2NrIGluIHRoZSBjb3Vyc2Ugb2YgaXRzCitvcGVyYXRpb25zLgorCitFbmhhbmNlIGJsa2lkJ3MgZGV0ZWN0aW9uIG9mIEZBVCBmaWxlc3lzdGVtczsgc28gdGhhdCBVU0IgZGlza3Mgd2l0aAorb25seSBhIHNpbmdsZSBib290YWJsZSBwYXJ0aXRpb24gd2lsbCBub3QgZ2V0IG1pc3NlZC4KKworRTJmc2NrIHdpbGwgbm8gbG9uZ2VyIG1hcmsgYSBmaWxlc3lzdGVtIGFzIGludmFsaWQgaWYgaXQgaGFzIHRpbWUKK2Vycm9ycyAoaS5lLiwgaWYgc3VwZXJibG9jayBtb3VudCB0aW1lIG9yIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUKK2Z1dHVyZSkgYW5kIHRoZSB1c2VyIHJlZnVzZXMgdG8gZml4IHRoZSBwcm9ibGVtLgorCitUaGUgVWJ1bnR1IGluaXQgc2NyaXB0cyBkb24ndCBwcm9wZXJseSBzZXQgdGhlIHN5c3RlbSB0aW1lIGNvcnJlY3RseQorZnJvbSBoYXJkd2FyZSBjbG9jayBpZiB0aGUgaGFyZHdhcmUgY2xvY2sgaXMgY29uZmlndXJlZCB0byB0aWNrIGxvY2FsCit0aW1lIGluc3RlYWQgb2YgR01UIHRpbWUuICBXb3JrIGFyb3VuZCB0aGlzIGFzIGJlc3QgYXMgd2UgY2FuIGJ5Citwcm92aWRpbmcgYW4gb3B0aW9uLCBidWdneV9pbml0X3NjcmlwdHMsIGluIC9ldGMvZTJmc2NrLmNvbmYgd2hpY2ggY2FuCitiZSBzZXQgb24gVWJ1bnR1IHN5c3RlbXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzQ0MTA5MywgYW5kIFVidW50dQorQnVnICMxMzEyMDEuKQorCitGaXggZnNjayB0byBpZ25vcmUgL2V0Yy9mc3RhYiBlbnRyaWVzIGZvciBiaW5kIG1vdW50cy4gIChBZGRyZXNzZXMgUmVkCitIYXQgQnVnemlsbGEgIzE1MTUzMy4pCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBpZiB0aGUgc3VwZXJibG9jayBpcyBjb3JydXB0LCBidXQgc3RpbGwgbG9va3MKK3ZhZ3VlbHkgbGlrZSBhbiBleHQyLzMvNCBzdXBlcmJsb2NrLCB0aGF0IGl0IGF1dG9tYXRpY2FsbHkgdHJpZXMgdG8KK2ZhbGwgYmFjayB0byB0aGUgYmFja3VwIHN1cGVyYmxvY2ssIGluc3RlYWQgb2YgZmFpbGluZyB3aXRoIGEgaGFyZAorZXJyb3IuCisKK01ha2UgdGhlIGUyZnNwcm9ncyBwcm9ncmFtIG1vcmUgcm9idXN0IHNvIHRoYXQgdGhleSB3aWxsIG5vdCBjcmFzaAord2hlbiBvcGVuaW5nIGEgY29ycnVwdCBmaWxlc3lzdGVtIHdoZXJlIHNfaW5vZGVfc2l6ZSBpcyB6ZXJvLgorCitDaGFuZ2UgZTJmc2NrIHNvIGl0IHVzZXMgc3NjYW5mKCkgaW5zdGVhZCBvZiBhdG9pKCkgc28gaXQgbm9uLW51bWVyaWMKK2FyZ3VtZW50cyBhcmUgZGV0ZWN0ZWQgYXMgc3VjaCBhbmQgdGhlIHBhcnNlIGVycm9yIGlzIHJlcG9ydGVkIHRvIHRoZQordXNlci4gICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzQzNTM4MS4pCisKK0NoYW5nZSBlMmZzY2sgc28gaXQgd2lsbCBub3QgY29tcGxhaW4gaWYgYSBmaWxlIGhhcyBibG9ja3MgcmVhbGxvY2F0ZWQKK3VwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIGEgc3lzdGVtJ3MgcGFnZSBzaXplLgorCitGaXggYnVnIGluIGV4dDJmc19jaGVja19kZXNjKCkgd2hpY2ggd2lsbCBjYXVzZSBlMmZzY2sgdG8gY29tcGxhaW4KK2Fib3V0ICh2YWxpZCkgZmlsZXN5c3RlbXMgd2hlcmUgdGhlIGlub2RlIHRhYmxlIGV4dGVuZHMgdG8gdGhlIGxhc3QKK2Jsb2NrIG9mIHRoZSBibG9jayBncm91cC4gIChBZGRyZXNzZXMgUmVkIEhhdCBCdWd6aWxsYSAjMjE0NzY1LikKKworRml4IGEgYnVnIGluIGV4dDJmc19pbml0aWFsaXplKCkgd2hpY2ggY2F1c2VzIG1rZTJmcyB0byBmYWlsIHdoaWxlCithbGxvY2F0aW5nIGlub2RlIHRhYmxlcyBmb3Igc29tZSByZWxhdGl2ZWx5IHJhcmUgb2RkIGRpc2sgc2l6ZXMuCisoQWRkcmVzc2VzIFJlZCBIYXQgQnVnemlsbGEgIzI0MTc2Ny4pCisKK0FkZCBDYXRhbGFuIHRyYW5zbGF0aW9uIGFuZCB1cGRhdGUgRHV0Y2ggYW5kIFN3ZWRpc2ggdHJhbnNsYXRpb25zCitmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorCitGaXggYmlnLWVuZGlhbiBieXRlLXN3YXBwaW5nIGJ1ZyBpbiBleHQyZnNfc3dhcF9pbm9kZV9mdWxsKCkuICBXZQorc3RpbGwgaGFkIGFuIGlzc3VlIHdoZW4gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvCitieXRlLXN3YXAgZmFzdCBzeW1saW5rcyB0aGF0IGNvbnRhaW5lZCBleHRlbmRlZCBhdHRyaWJ1dGVzLgorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKyhBZGRyZXNzZXMgU291cmNlRm9yZ2UgQnVnICMxODIxMzMzLikKKworCitQcm9ncmFtbWVyJ3MgTm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBta2UyZnMgdGVzdHMgdG8gYXZvaWQgbmVlZGluZyBhbnkgc2lnbmlmaWNhbnQgXk0gKENSKSBjaGFyYWN0ZXJzCisKK0FkZCAibWFrZSBjaGVjayIgdG8gdGhlIFJQTSBzcGVjIGZpbGUKKworRml4ICJtYWtlIGluc3RhbGwiIGFuZCAnbWFrZSB1bnN0YWxsIiBpbiBtaXNjL01ha2VmaWxlLmluIHNvIHRoYXQgaXQKK3dvcmtzIGNvcnJlY3RseSB3aGVuIHRoZSBwcmVmaXggaXMgbm90IHRoZSByb290IGRpcmVjdG9yeS4KKworRml4IHRoZSByZXNpemUyZnMgdGVzdHMsIHJfbW92ZV9pdGFibGUgYW5kIHJfcmVzaXplX2lub2RlLCBzbyB0aGV5CitjbGVuYSB1cCBhZnRlciB0aGVtc2VsdmVzIGJ5IGRlbGV0aW5nIHRoZSB0ZXN0LmltZyB0ZW1wb3JhcnkgZmlsZQorYWZ0ZXIgY29tcGxldGluZyB0aGUgdGVzdC4KKworRml4ZWQgYSBjb3JuZXIgY2FzZSBidWcgZXh0MmZzX3VubGluaygpIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSB0aGUKK2ZpcnN0IGRpcmVjdG9yeSBlbnRyeSBpbiBhIGRpcmVjdG9yeSBibG9jayBhbmQgdGhlIGxhc3QgZGlyZWN0b3J5CitlbnRyeSBpbiB0aGUgcHJldmlvdXMgZGlyZWN0b3J5IGJsb2NrIGlzIG5vdCBpbiB1c2UuICBGb3J0dW5hdGVseQorZXh0MmZzX3VubGluaygpIGlzIG9ubHkgdXNlZCBieSBkZWJ1Z2ZzIGFuZCBlMmZzY2ssIGFuZCBpbiBlMmZzY2sgaW4KK3BsYWNlcyB3aGVyZSBpdCBpcyBleHRyZW1lbHkgdW5saWtlbHkgdG8gcnVuIGludG8gdGhpcyBjb3JuZXIgY2FzZS4KKworRml4IG1pc3NpbmcgZGVwZW5kZW5jeSB3aGljaCB3b3VsZCBjdWFzZSBwYXJhbGxlbCBidWlsZHMgdG8gZmFpbC4KKyhBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnICMxODQyMzMxLikKKworRml4IGEgYnVpbGQgZXJyb3Igb24gbmV3ZXIgZ2NjIGNhdXNlZCBieSBsaWIvZXh0MmZzL2lzbW91bnRlZC5jCitjYWxsaW5nIG9wZW4oT19DUkVBVEUpIHdpdGggYSBtaXNzaW5nIG1vZGUgcGFyYW1ldGVyLgorCitGaXggdGhlIHRlc3Rfc3MuYyBpbiBsaWIvc3Mgc28gaXQgY2FuIGJlIHVzZWQgYXMgYW4gZXhhbXBsZQorYXBwbGljYXRpb24gcHJvZ3JhbSBmb3IgdGhlIGxpYnJhcnkgYXMgd2VsbCBhcyBhIHJlZ3Jlc3Npb24gdGVzdAorc3VpdGUuCisKK0ZpeCBleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlKCkgc28gdGhhdCBlcnJvciBjb2RlcyBhbmQgYWJvcnQgY29kZXMKK2FyZSBwcm9wZXJseSBwYXNzZWQgYmFjayB1cCB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrLgorCitFMmZzcHJvZ3MgMS40MC4yIChKdWx5IDEyLCAyMDA3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSByZWNlbnQgY2hhbmdlIHRvIGUyZnNja19hZGRfZGlyX2luZm8oKSB0byB1c2UgdGRiIGZpbGVzIHRvIGNoZWNrCitmaWxlc3lzdGVtcyB3aXRoIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgZmlsZXN5c3RlbXMgaGFkIGEgdHlwbyB3aGljaAorY2F1c2VkIHVzIHRvIHJlc2l6ZSB0aGUgd3JvbmcgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIHdvdWxkIGNhdXNlIGEKK2FycmF5IG92ZXJydW4gbGVhZGluZyB0byBtYWxsb2MgcG9pbnRlciBjb3JydXB0aW9ucyBhbmQgc2VnZmF1bHRzLgorU2luY2Ugd2Ugbm9ybWFsbHkgY2FuIHZlcnkgYWNjdXJhdGVseSBwcmVkaWN0IGhvdyBiaWcgdGhlIHRoZSBkaXJpbmZvCithcnJheSBuZWVkcyB0byBiZSwgdGhpcyBidWcgb25seSBnb3QgdHJpZ2dlcmVkIG9uIHZlcnkgYmFkbHkgY29ycnVwdGVkCitmaWxlc3lzdGVtcy4KKworRml4IGEgYnVnIGluIGUyZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gaW5jb3JyZWN0bHkgc2FsdmFuZ2UKK2RpcmVjdG9yaWVzIHdoZW4gdGhlIGxhc3QgZW50cnkncyByZWNfbGVuIGlzIGJvZ3VzbHkgdG9vIGJpZy4gIFRoaXMKK3Jlc3VsdGVkIGluIGEgbm9uc2Vuc2UgZmlsZXN5c3RlbSBjb3JydXB0aW9uIHRvIGJlIHJlcG9ydGVkLCBhbmQKK3JlcXVpcmVkIGEgc2Vjb25kIHJ1biBvZiBlMmZzY2sgdG8gZnVsbHkgZml4IHVwIHRoZSBkaXJlY3RvcnkuCisKK1VwZGF0ZSB0dW5lMmZzIG1hbiBwYWdlIHRvIGluY2x1ZGUgbW9yZSBkaXNjdXNzaW9uIG9mIHJlc2VydmVkIGJsb2NrcworKEFkZHJlc3NlcyBMYXVuY2hwYWQgYnVnICM0NzgxNykKKworVXBkYXRlIFR1cmtpc2gsIFBvbGlzaCwgRHV0Y2gsIGFuZCBWaWV0bmFtZXNlIFBPIGZpbGVzIGZyb20gdGhlCitUcmFuc2xhdGlvbiBQcm9qZWN0CisgICAgCisKK0UyZnNwcm9ncyAxLjQwLjEgKEp1bHkgNywgMjAwNykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBsaWJibGtpZCB0byBsb29wIGZvcmV2ZXIuICBXaGVuIHJldmFsaWRhdGluZworYSBwYXJ0aXRpb24gd2hlcmUgdGhlcmUgaXMgb2Jzb2xldGUgaW5mb3JtYXRpb24gaW4gL2V0Yy9ibGtpZC50YWIsIHdlCitlbmQgdXAgZnJlZWluZyBhIHRoZSB0eXBlIHRhZyB3aXRob3V0IGNsZWFyaW5nIGRldi0+YmlkX3R5cGUsIGNhdXNpbmcKK2Jsa2lkX3ZlcmlmeSgpIHRvIGxvb3AgZm9yZXZlci4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQzMjA1MikKKyAgICAKK1RoZSBUdXJraXNoIHRyYW5zbGF0aW9uIGhhcyBhIGJ1ZyBpbiBpdCB3aGVyZSBpdCBoYXMgdGhlIHRyYW5zbGF0aW9uCitvZiAiRUBlICclRG4nIGluICVwICglaSkiIHRvICJFQEUiLiAgVGhpcyBjYXVzZXMgQEUgdG8gYmUgZXhwYW5kZWQgYXQKK0BFLCByZWN1cnNpdmVseSwgZm9yZXZlciwgdW50aWwgdGhlIHN0YWNrIGZpbGxzIHVwIGFuZCBlMmZzY2sgY29yZQorZHVtcHMuICBXZSBmaXggdGhpcyBieSBtYWtpbmcgZTJmc2NrIHN0b3AgQC1leHBhbnNpb25zIGFmdGVyIGEKK3JlY3Vyc2l2ZSBkZXB0aCBvZiAxMCwgd2hpY2ggaXMgZmFyIG1vcmUgdGhhbiB3ZSBuZWVkLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWc6ICMxNjQ2MDgxKQorICAgIAorQ29tcGlsZSB0aGUgZGVmYXVsdCBta2UyZnMuY29uZiBpbnRvIG1rZTJmcyBwcm9ncmFtLiAgUGVvcGxlIGFyZQorZ2V0dGluZyBzdXJwcmlzZWQgYnkgbWtlMmZzIGNyZWF0aW5nIGZpbGVzeXN0ZW1zIHdpdGggZGlmZmVyZW50CitkZWZhdWx0cyB0aGFuIGVhcmxpZXIgdmVyc2lvbnMgb2YgbWtlMmZzIGlmIG1rZTJmcy5jb25mIGlzIG5vdAorcHJlc2VudC4gIFNvIHdlIG5vdyBjcmVhdGUgYSBidWlsdCBpbiB2ZXJzaW9uIG9mIG1rZTJmcy5jb25mIGZpbGUKK3doaWNoIGlzIHVzZWQgYnkgbWtlMmZzIGlmIHRoZSAvZXRjL21rZTJmcy5jb25mIGlzIG5vdCBwcmVzZW50LgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZUJ1ZzogIzE3NDU4MTgpCisKK0ltcHJvdmUgdGhlIGNvbmZpZy9wYXJzZV90eXBlcy5zaCBoZWxwZXIgc2NyaXB0LiAgRml4IGEgcG90ZW50aWFsCitzZWN1cml0eSBwcm9ibGVtIGlmIGUyZnNwcm9ncyBpcyBidWlsdCBhcyByb290IChhcyBHZW50b28gZG9lcyEpLiAgSW4KK2FkZGl0aW9uIGZpeCB0aGUgc2NyaXB0IGFuZCBob3cgaXQgaXMgY2FsbGVkIGZyb20gdGhlIGNvbmZpZ3VyZSBzY3JpcHQKK3NvIHRoYXQgaXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgd2hlbiBjcm9zcy1jb21waWxpbmcuICAoRml4ZXMgR2VudG9vCitidWc6ICMxNDY5MDMpCisgICAgCitVcGRhdGUgVmlldG5hbWVzZSwgRnJlbmNoLCBhbmQgRHV0Y2ggUE8gZmlsZXMgZnJvbSB0aGUgVHJhbnNsYXRpb24KK1Byb2plY3QuICBBbHNvIGNyZWF0ZWQgYSBuZXcgZTJmc3Byb2dzLnBvdCBmaWxlIGZvciB0cmFuc2xhdG9yLgorICAgIAorRml4IGJvZ3VzIHN0cmlwIHBlcm1pc3Npb24gZXJyb3JzIHdoZW4gYnVpbGRpbmcgdW5kZXIgRGViaWFuLiAgV2hlbgorYnVpbGRpbmcgdGhlIGUyZnNwcm9ncyBkcGtnJ3MsIHRoZSBkaF9zdHJpcCBjb21tYW5kIGVtaXRzIGEgbGFyZ2UKK251bWJlciBvZiBlcnJvciBtZXNzYWdlcyBjYXVzZWQgYnkgdGhlIHBlcm1pc3Npb25zIG5vdCBiZWluZyByaWdodC4KK1NvIHJ1biBkaF9maXhwZXJtcyBiZWZvcmUgcnVubmluZyBkaF9zdHJpcC4KKworUHJvZ3JhbW1lcidzIE5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgbmV3IGZ1bmN0aW9uOiBwcm9maWxlX3NldF9kZWZhdWx0KCkuICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHZhbHVlCitvZiB0aGUgcHNldWRvIGZpbGUgIjxkZWZhdWx0PiIuICBJZiB0aGUgZmlsZSAiPGRlZmF1bHQ+IiBoYWQKK3ByZXZpb3VzbHkgYmVlbiBwYXNzZWQgdG8gcHJvZmlsZV9pbml0KCksIHRoZW4gZGVmX3N0cmluZyBwYXJhbWV0ZXIKK3dpbGwgYmUgcGFyc2VkIGFuZCB1c2VkIGFzIHRoZSBwcm9maWxlIGluZm9ybWF0aW9uIGZvciB0aGUgIjxkZWZhdWx0PiIKK2ZpbGUuCisgICAgCitGaXggbWtfY21kcydzIGVycm9yIHJlcG9ydGluZyBzbyB0aGF0IGl0IGlzIHVuYW1iaWd1b3VzIHRoYXQgaXQgaXMgdGhlCitta19jbWRzIHNjcmlwdCB3aGljaCBpcyBnZW5lcmF0aW5nIHRoZSBlcnJvci4gIChPYnZpYXRlcyBHZW50b28gcGF0Y2g6CitlMmZzcHJvZ3MtMS4zMi1ta19jbWRzLWNvc21ldGljLnBhdGNoKQorICAgIAorRml4IHRoZSB0ZXN0IHN1aXRlIHRvIHVzZSBMQ19BTEwgaW5zdGVhZCBvZiBMQU5HLiAgTENfQUxMIGlzIHRoZSAiaGlnaAorcHJpb3JpdHkiIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgb3ZlcnJpZGVzIGFsbCBvdGhlcnMsIHdoZXJlIGFzCitMQU5HIGlzIHRoZSBsb3dlc3QgcHJpb3J0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIElmIExDX0FMTCBpcyBzZXQsIGl0Citkb2Vzbid0IG1hdHRlciB3aGV0aGVyIExBTkcsIExBTkdVQUdFLCBMQ19DT0xMQVRFLCBMQ19NRVNTQUdFUywgYW5kCit0aGUgYWxsIHRoZSByZXN0IGFyZSBzZXQuICBUaGlzIHdpbGwgYXNzdXJlIHRoYXQgdGhlIGxvY2FsZSB3aGVuCitydW5uaW5nIHRoZSB0ZXN0IHN1aXRlcyBpcyB0aGUgIkMiIGxvY2FsZS4gIChPYnZpYXRlcyBHZW50b28gcGF0Y2g6CitlMmZzcHJvZ3MtMS4zOC10ZXN0cy1sb2NhbGUucGF0Y2gpCisgICAgCisKK0UyZnNwcm9ncyAxLjQwIChKdW5lIDI5LCAyMDA3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBkaXZpZGUgYnkgemVybyBlcnJvciBpbiBibGtpZCdzIE5URlMgcHJvYmluZyBsb2dpYy4KKworQWRkIG5ldyBibGtpZCAtZyBvcHRpb24gd2hpY2ggY2F1c2VzIHRoZSBibGtpZCBjYWNoZSB0byBiZSBnYXJiYWdlCitjb2xsZWN0ZWQuCisKK0ZpeCBhIGJ1ZyBpbiBsaWJibGtpZCB3aGljaCBjb3VsZCBjYXVzZSB0aGUgaW50ZXJuYWwgZmllbGQgYmlkX3R5cGUgdG8KK2JlY29tZSBjb3JydXB0ZWQuICBGb3J0dW5hdGVseSBiaWRfdHlwZSBpc24ndCB1c2VkIG11Y2gsIGFuZCBiaWRfbGFiZWwKK2FuZCBiaWRfdXVpZCBpcyBvbmx5IHVzZWQgYnkgZGVidWdnaW5nIGNvZGUsIHNvIHRoZSBpbXBhY3Qgb2YgdGhpcyBidWcKK3dhcyB2ZXJ5IG1pbm9yLgorCitNa2UyZnMgd2lsbCBub3cgc3RvcmUgdGhlIFJBSUQgc3RyaWRlIHZhbHVlIHdoZW4gYSBmaWxlc3lzdGVtIGlzCitjcmVhdGVkIHdpdGggYSByZXF1ZXN0ZWQgUkFJRCBzdHJpZGUsIGFuZCB0aGVuIHVzZSBpdCBhdXRvbWF0aWNhbGx5IGluCityZXNpemUyZnMuCisKK01rZTJmcyBoYXMgYSBzYW5pdHkgY2hlY2sgYWRkZWQgdG8gbWFrZSBzdXJlIChpbm9kZV9zaXplICogbnVtX2lub2RlcykKK2lzbid0IHRvbyBiaWcuICBJbiBzb21lIGNhc2VzIEx1c3RyZSB1c2VycyBoYXZlIHRyaWVkIHNwZWNpZnlpbmcgYW4KK2lub2RlIHNpemUgb2YgNDA5NiBieXRlcywgd2hpbGUga2VlcGluZyBhbiBpbm9kZSByYXRpbyBvZiBvbmUgaW5vZGUKK3BlciA0MDk2IGJ5dGVzLiAgCisKK0ltcHJvdmUgc2FuaXR5IGNoZWNrIGluIGUyZnNjaydzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJhY2t1cAorc3VwZXJibG9jaywgc28gdGhhdCBpdCB3b24ndCBhY2NpZGVudGFsbHkgZmluZCBhIHN1cGVyYmxvY2sgdGhhdCB3YXMKK2xvY2F0ZWQgaW4gdGhlIGpvdXJuYWwsIGFuZCB0aGVuIGxhdGVyIHJlamVjdCBpdCBhcyBiZWluZyBub3QgYSB2YWxpZAorYmFja3VwIHN1cGVyYmxvY2suCisKK0ZpeCBlMmZzY2sgZ2V0X3NpemUgbG9naWMgc28gdGhhdCBpdCB3aWxsIHdvcmsgd2l0aCB0aGUgTGludXggZmxvcHB5Citkcml2ZXIuICBUaGUgTGludXggZmxvcHB5IGRyaXZlciBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb3RoZXIKK2Jsb2NrIGRldmljZSBkcml2ZXJzLCBpbiB0aGF0IGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gb3BlbmVkIHdpdGgKK09fRVhDTCwgaXQgZGlzYWxsb3dzIGFub3RoZXIgb3BlbigpLCBldmVuIGlmIHRoZSBzZWNvbmQgb3BlbigpIGRvZXMKK25vdCBoYXZlIHRoZSBPX0VYQ0wgZmxhZy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQxMDU2OSkKKworRml4IGVycm9yIGNoZWNraW5nIG9mIGJhZGJsb2NrJ3MgbGFzdC1ibG9jayBhbmQgc3RhcnQtYmxvY2sgYXJndW1lbnRzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDE2NDc3KQorCitGaXggZTJmc2NrIHNvIHRoYXQgaXQgZG9lc24ndCBvdmVyd3JpdGUgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyB3aGVuCityZWNvdmVyaW5nIGEgam91cm5hbCB1bnRpbCB0aGUgbWFzdGVyIHN1cGVyYmxvY2sgaGFzIGJlZW4gY29uZmlybWVkIGFzCitiZWluZyBzYW5lLgorCitDaGFuZ2UgdGhlIGJsa2lkIGxpYnJhcnkgdG8gYmUgbXVjaCBtb3JlIHBhcmFub2lkIGFib3V0IGNvbmNsdWRpbmcKK3RoYXQgYSBwYXJ0aXRpb24gY29udGFpbnMgYW4gTlRGUyBmaWxlc3lzdGVtLCBhbmQgZmV0Y2ggdGhlIFVVSUQgYW5kCitMQUJFTCBpbmZvcm1hdGlvbiBmcm9tIE5URlMgZmlsZXN5c3RlbXMuICAoQWRkcmVzc2VzIExhdW5jaHBhZCBCdWc6CisjMTEwMTM4KQorCitGYWN0b3Igb3V0IHRoZSBjb2RlIHdoaWNoIHNldHMgdGhlIGRlZmF1bHQgam91cm5hbCBzaXplIGFuZCBtb3ZlIGl0CitpbnRvIGxpYmV4dDJmcy4KKworRW5oYW5jZSBlMmZzY2sgc28gaXQgd2lsbCByZWNyZWF0ZSB0aGUgZXh0MyBqb3VybmFsIGlmIHRoZSBvcmlnaW5hbAoram91cm5hbCBpbm9kZSB3YXMgY2xlYXJlZCB0byBkdWUgaXQgYmVpbmcgY29ycnVwdCBhZnRlciBmaW5pc2hpbmcgdGhlCitmaWxlc3lzdGVtIGNoZWNrLgorCitGaXggZTJmc2NrIHNvIHRoYXQgaXQgdXBkYXRlcyB0aGUgam91cm5hbCBpbm9kZSBpZiBpdCBpcyBjb3JydXB0ZWQgYW5kCit0aGUgYmFja3VwIGpvdXJuYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3VwZXJibG9jayB3YXMgc3VjY2Vzc2Z1bGx5Cit1c2VkIHRvIHJlY292ZXIgdGhlIGZpbGVzeXN0ZW0uCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBpdCBjaGVja3MgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlIGpvdXJuYWwgaW5vZGUKK2ZvciB2YWxpZGl0eS4gIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgY2hlY2tlZCB0aGUgZGlyZWN0IGJsb2NrcyB0bworbWFrZSBzdXJlIHRoZSBqb3VybmFsIGlub2RlIHdhcyBzYW5lLiAgVW5mb3J0dW5hdGVseSwgaWYgc29tZSBvciBhbGwKK29mIHRoZSBpbmRpcmVjdCBvciBkb3VibHkgaW5kaXJlY3QgYmxvY2tzIHdlcmUgY29ycnVwdGVkLCB0aGlzIHdvdWxkCitub3QgYmUgY2F1Z2h0LgorCitBZGQgc3VwcG9ydCBpbiBibGtpZCB0byBkZXRlY3QgTFVLUyBlbmNyeXB0ZWQgcGFydGl0aW9ucy4KKworQWRkIGV4dHJhIHNhbml0eSBjaGVja3MgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCitzaXplIGlzIHplcm8gYnV0IHRoZSBvZmZzZXQgaXMgdmVyeSBsYXJnZS4KKworRml4IGJ5dGUtc3dhcHBpbmcgaXNzdWVzIGZvciBsYXJnZSBpbm9kZXMgaW4gZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCithbmQgZXh0MmZzX2dldF9uZXh0X2lub2RlX2Z1bGwoKS4KKworQ2xhcmlmeSB0aGUgY29weXJpZ2h0IGxpY2Vuc2VzIHVzZWQgYnkgdGhlIHZhcmlvdXMgbGlicmFyaWVzIGluCit0aGUgdG9wLWxldmVsIENPUFlJTkcgIGZpbGUgKFJlZCBIYXQgQnVnemlsbGE6IDE2NjA1OCkKKworTWFrZSBta2UyZnMncyBkZWZhdWx0cyB3aGVuIC9ldGMvbWtlMmZzLmNvbmYgZG9lc24ndCBleGlzdCBtb3JlIHNhbmUuCisKK0ZpeCBta2UyZnMgYW5kIGRlYnVnZnMgdG8gc3VwcG9ydCBsYXJnZSAoPiAxNiBiaXQpIHVpZCdzIGFuZCBnaWQncy4KKworUmVtb3ZlIGNoZWNrIGluIGUyZnNjayB3aGljaCByZXF1aXJlcyBFQSdzIGluIGlub2RlcyB0byBiZSBzb3J0ZWQ7Cit0aGV5IGRvbid0IG5lZWQgdG8gYmUgc29ydGVkLCBhbmQgZTJmc2NrIHdhcyBwcmV2aW91c2x5IHdyb25nbHkKK2NsZWFyaW5nIHVuc29ydGVkIEVBJ3Mgc3RvcmVkIGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUuCisKK0FsbG93IG1rZTJmcyBvciB0dW5lMmZzIHRvIGNyZWF0ZSBhIHN1YnN0YW50aWFsbHkgbGFyZ2VyIGpvdXJuYWwgKHVwCit0byAxMCwyNDAsMDAwIGJsb2NrcykuCisKK0ZpeCBNRCBzdXBlcmJsb2NrIGRldGVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBVVUlEIGlzCityZXBvcnRlZCBmcm9tIHRoZSBNRCBzdXBlcmJsb2NrLgorCitGaXggYSBzaWduZWQgdnMuIHVuc2lnbmVkIGJ1ZyBpbiBkZWJ1Z2ZzLgorCitFbmhhbmNlIGRlYnVnZnMncyBkYXRlIHBhcnNlciBzbyB0aGF0IGl0IGFjY2VwdHMgaW50ZWdlciB2YWx1ZXMuCisKK0ZpeCBlMmZzY2sncyBwYXNzMWMgYWNjb3VudGluZyBzbyBpdCBkb2Vzbid0IHRlcm1pbmF0ZSB0b28gZWFybHkgaWYgYQorZmlsZSB3aXRoIG11bHRpcGx5IGNsYWltZWQgYmxvY2tzIGlzIGhhcmQgbGlua2VkLiBvciBub3QgYXQgYWxsIGlmIHRoZQorcm9vdCBkaXJlY3RvcnkgY29udGFpbnMgc2hhcmVkIGJsb2NrcworCitFbmhhbmNlIGRlYnVnZnMgc28gaXQgY2FuIG1vZGlmeSB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgdXNpbmcgdGhlCitjb21tYW5kIHNldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yLgorCitJbXByb3ZlIGUyZnNjaydzIHJlcG9ydGluZyBvZiBJL08gZXJyb3JzIHNvIGl0J3MgY2xlYXJlciB3aGF0IGl0IHdhcwordHJ5aW5nIHRvIGRvIHdoZW4gYW4gZXJyb3IgaGFwcGVucworCitGaXggYSBidWcgaW4gaW4gaG93IGUyZnNwcm9ncyBieXRlIHN3YXBzIGlub2RlcyBjb250YWluaW5nIGZhc3QKK3N5bWxpbmtzIHRoYXQgaGF2ZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiAgKEFkZHJlc3NlcyBSZWQgSGF0IEJ1Z3ppbGxhOgorIzIzMjY2MyBhbmQgTFRDIEJ1Z3ppbGxhOiAjMjc2MzQpCisKK0ZpeCBwb3RlbnRpYWwgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSgpIGluIGFuCitlcnJvciBjYXNlLgorCitBZGQgbGlicmVhZGxpbmUuc28uNSBzdXBwb3J0IHRvIGxpYnNzLgorCitJbXBvdmUgYmFkYmxvY2tzIC1uLy13IGV4Y2x1c2l2ZSB1c2FnZSBtZXNzYWdlLgorCitGaXggZHVtcF91bnVzZWQgc2VnZmF1bHQgaW4gZGVidWdmcyB3aGVuIGEgZmlsZXN5c3RlbSBpcyBub3Qgb3BlbgorCitGaXggbWVtb3J5IGxlYWsgaW4gYmxraWQgbGlicmFyeS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQxMzY2MSkKKworQWxsb3cgdGhlIGRlYnVnZnMgbGNkIGNvbW1hbmQgdG8gd29yayB3L28gYSBmaWxlc3lzdGVtIGJlaW5nIG9wZW4uCisoQWRkcmVzc2VzIExUQyBCdWd6aWxsYSAjMjc1MTMpCisKK0ZpeCBlMmZzY2sgdG8gY2xlYXIgaV9zaXplIGZvciBzcGVjaWFsIGRldmljZXMgd2l0aCBhIGJvZ3VzIGlfYmxvY2tzCitmaWVsZCBvbiB0aGUgZmlyc3QgcGFzcy4KKworRml4IGUyZnNjayB0byBzZXQgdGhlIGZpbGUgdHlwZSBvZiB0aGUgJy4uJyBlbnRyeSB3aGVuIGNvbm5lY3RpbmcKK2EgZGlyZWN0b3J5IHRvIGxvc3QrZm91bmQuICAoQWRkcmVzc2VzIEx1c3RyZSBCdWc6ICMxMTY0NSkKKworRW5oYW5jZSBlMmZzY2sgdG8gcmVjb3ZlciBkaXJlY3RvcmllcyB3aG9zZSBtb2RlcyBmaWVsZCB3ZXJlIGNvcnJ1cHRlZAordG8gbG9vayBsaWtlIHNwZWNpYWwgZmlsZXMuICBUaGlzIGlzIHByb2JhYmx5IG9ubHkgdXNlZnVsIGluCithcnRpZmljaWFsIHRlc3QgY2FzZXMsIGJ1dCBpdCB3aWxsIGJlIHVzZWZ1bCBpZiB3ZSBldmVyIGRvIHRoZSAiaW5vZGVzCitpbiBkaXJlY3RvcnkiIGlkZWEgZm9yIGV4dDQuCisKK0FsbG93IGRlYnVnZnMgdG8gZHVtcCAoYW5kIHJkdW1wKSA+IDJHQiBmaWxlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyM0MTI2MTQpCisKK0ZpeCByZXNpemUyZnMgcGFyc2luZyBvZiBzaXplIHBhcmFtZXRlciAoaW4gc2VjdG9yIHVuaXRzKS4gIFRoaXMgd2FzCithY3R1YWxseSBhIGJ1ZyBpbiBsaWJlMnAncyBwYXJzZV9udW1fYmxvY2tzKCkgZnVuY3Rpb24uICBXaGVuIGhhbmRsaW5nCit0aGUgJ3MnIHN1ZmZpeCwgaXQgd2FzIGlnbm9yaW5nIHRoZSBibG9ja3NpemUgaW5mb3JtYXRpb24gcGFzc2VkIGluCitmcm9tIHRoZSBjYWxsZXIgYW5kIGFsd2F5cyBpbnRlcnByZXRpbmcgdGhlIG51bWJlciBpbiB0ZXJtcyBvZiBhIDFrCitibG9ja3NpemUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0MDgyOTgpCisKK1RoZXJlIHdhcyBhIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiBlcnJvciB3aGljaCBjb3VsZCBjYXVzZSBlMmZzY2sgdG8KK2xvb3AgZm9yZXZlciBvbiByZWFsbHkgYmlnIGZpbGVzeXN0ZW1zIHdpdGggYSBsYXJnZSBpbm9kZSBjb3VudC4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzQxMTgzOCkKKworRml4IG1lbW9yeSBsZWFrIGluIGV4dDJmc193cml0ZV9uZXdfaW5vZGUoKQorCitBZGQgc3VwcG9ydCBmb3IgdXNpbmcgYSBzY3JhdGNoIGZpbGVzIGRpcmVjdG9yeSB0byByZWR1Y2UgZTJmc2NrJ3MKK21lbW9yeSB1dGlsaXphdGlvbiBvbiByZWFsbHkgYmlnIGZpbGVzeXN0ZW1zLiAgVGhpcyB1c2VzIHRoZSBUREIKK2xpYnJhcnkuICBTZWUgdGhlIFtzY3JhdGNoX2ZpbGVzXSBzZWN0aW9uIG9mIHRoZSBlMmZzY2suY29uZiBtYW4gcGFnZQorZm9yIG1vcmUgZGV0YWlscy4KKworRml4ZWQgdHlwZS1wdW5uaW5nIGJ1ZyB3aGljaCBjYXVzZWQgZHVtcGUyZnMgdG8gY3Jhc2ggb24gdGhlIEFybQorcGxhdGZvcm0gKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzk3MDQ0KQorCitBZGQgZXhwbGFuYXRvcnkgbWVzc2FnZSB0byBiYWRibG9ja3MgdGhhdCAtbiBhbmQgLXcgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQorKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzcxODY5KQorCitBbGxvdyBkZWJ1Z2ZzIGFuZCBkdW1wZTJmcyB0byBzdXBwb3J0IGZzIGZlYXR1cmVzIHVuZGVyIGRldmVsb3BtZW50LgorCitBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBmbGFnIEVYVDJfRkxBR19TT0ZUU1VQUF9GRUFUVVJFUyBmbGFnIHRvCitleHQyZnNfb3BlbigpICwgd2hpY2ggYWxsb3dzIGFwcGxpY2F0aW9uIHRvIG9wZW4gZmlsZXN5c3RlcyB3aXRoIGZlYXR1cmVzCit3aGljaCBhcmUgY3VycmVudGx5IG9ubHkgcGFydGlhbGx5IHN1cHBvcnRlZCBieSBlMmZzcHJvZ3MuCisKK0FsbG93IHVuaXhfaW8gdG8gc3VwcG9ydCBvZmZzZXRzIGdyZWF0ZXIgdGhhbiAyRyAoQWRkcmVzc2VzCitTb3VyY2VGb3JnZSBCdWc6ICMxNTQ3OTIyKQorCitGaXhlZCBvdmVyZmxvdyBhbmQgc2lnbmVkL3Vuc2lnbmVkIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgbnVtYmVyIG9mCitibG9ja3Mgb3IgaW5vZGVzIGV4Y2VlZGluZyAyKiozMSBvciBiZWluZyBjbG9zZSB0byAyKiozMi0xLgorCitBZGQgc3VwcG9ydCBmb3IgdW5zaWduZWQgZGlyZWN0b3J5IGhhc2ggY2FsY3VsYXRpb25zIHdpdGggaGludHMgaW4gdGhlCitzdXBlcmJsb2NrIHRvIGZpeCBjcm9zcy1hcmNoaXRlY3R1cmFsIHBvcnRhYmlsaXR5IGZvciBodHJlZQorZGlyZWN0b3JpZXMgd2l0aCBmaWxlbmFtZXMgd2hlcmUgdGhlIGhpZ2ggOHRoIGJpdCBpcyBzZXQuICAoQWRkcmVzc2VzCitEZWJpYW46ICMzODk3NzIpCisKK0ZpeCByZXNpemUyZnMgc28gdGhhdCBpdCBnaXZlcyB1c2VyLWludGVsbGlnaWJsZSBlcnJvciBtZXNzYWdlcyBpZiB0aGUKK2ZpbGVzeXN0ZW0gb3IgdGhlIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9uLWxpbmUgcmVzaXppbmcuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzODA1NDgpCisKK1JlcXVpcmUgbWtlMmZzIC1GIC1GIGZvciByZWFsbHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbnMsIHNpbmNlIC1GIGlzCituZWVkZWQgZm9yIGxlc3MgZGFuZ2Vyb3VzIG9wZXJhdGlvbnMgc3VjaCBhcyBjcmVhdGluZyBmaWxlc3lzdGVtcworaW1hZ2VzIGluIHJlZ3VsYXIgZmlsZXMsIG9yIGNyZWF0aW5nIGZpbGVzeXN0ZW1zIG9uIHdob2xlIGJsb2NrCitkZXZpY2VzLiAgVGhlc2UgcmVsYXRpdmVseSBpbm5vY3VvdXMgdXNhZ2VzIHNob3VsZCBOT1QgYmUgY29uZnVzZWQKK3dpdGggcnVubmluZyBta2UyZnMgb24gYW4gYXBwYXJlbnRseS1tb3VudGVkIG9yIGluLXVzZSBmaWxlc3lzdGVtLgorCitBbGxvdyB0aGUgZGVmYXVsdCBpbm9kZSBzaXplIHRvIGJlIHNwZWNpZmllZCBpbnRvIHRoZSBta2UyZnMuY29uZgorZmlsZS4KKworTWFrZSB0aGUgc21hbGxlc3QgZGVmYXVsdCBqb3VybmFsIHNpemUgaXMgYmlnIGVub3VnaCBzbyB0aGF0IG9uLWxpbmUKK3Jlc2l6aW5nIHNob3VsZCBhbHdheXMgd29yay4KKworRml4IHNpbGx5IHNwZWxsaW5nIGVycm9yIGluIGUyZnNjay4gIChBZGRyZXNzZXMgU291cmNlRm9yZ2UgYnVnOgorIzE1MzEzNzIpCisKK0ZpeCBkZWJ1Z2ZzIGNvcmVkdW1wIHdoZW4gbHNkZWwgaXMgcnVuIHdpdGhvdXQgYW4gb3BlbiBmaWxlc3lzdGVtCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzNzgzMzUpCisKK0ZpeCBkZWJ1Z2ZzIGRpc3BsYXkgYnVnIHVzIHRoYXQgYnl0ZXMgdGhhdCBoYXZlIHRoZSBoaWdoIGJpdCBzZXQgYXJlCitkaXNwbGF5ZWQgYXMgImVjIiBpbnN0ZWFkIG9mICJmZmZmZmZlYyIuCisKK0FkZCBzdXBwb3J0IGluIGxzYXR0ciBzbyBpdCB3aWxsIGRpc3BsYXkgdGhlIEVYVDRfRVhURU5UU19GTCBmbGFnLgorCitEZXZpY2UgbWFwcGVyIHNjYW5uaW5nIHdhc24ndCB3b3JraW5nIGluIHRoZSBibGtpZCBsaWJyYXJ5IGJlY2F1c2UgdGhlCitwYXRobmFtZXMgaGFkIGFuIGV4dHJhICIvZGV2IiB3aGVuIHRoZXkgd2VyZSBiZWluZyBwcm9iZWQuCisKK0FkZCBHRlMvR0ZTMiBzdXBwb3J0IHRvIHRoZSBibGtpZCBsaWJyYXJ5LgorCitGaXggYmxraWQgc3VwcG9ydCBvZiBlbXB0eSBGQVQgZmlsZXN5c3RlbSBsYWJlbHMuCisKK0F2b2lkIHJlY3Vyc2luZyBmb3JldmVyIChvciBmb3IgYSBsb25nIHRpbWUpIHdoZW4gdGhlIGJsa2lkIGxpYnJhcnkKK3NlYXJjaGVzIGZvciBhIGRldmljZSBhbmQgdGhlcmUgYXJlIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIGluIC9kZXYuCisKK0F2b2lkIHVuYWxpZ25lZCBoYWxmd29yZCBhY2Nlc3MgaW4gYmxraWQgd2hlbiBhY2Nlc3NpbmcgRkFUCitzdXBlcmJsb2NrcywgYXMgdGhpcyB3aWxsIGNhdXNlIFNwYXJjL1NvbGFyaXMgc3lzdGVtcyB0byB0aHJvdyBhCitTSUdCVVMgZXJyb3IuCisKK1RoZSBsYXRlc3QgZGV2bWFwcGVyIGxpYnJhcmllcyByZXF1aXJlcyBwdGhyZWFkcywgYWRkIC1scHRocmVhZHMgdG8KK3RoZSBzdGF0aWMgbGluayBsaWJyYXJpZXMgZm9yIGUyZnNjay5zdGF0aWMgaWYgZGV2bWFwcGVyIGlzIGVuYWJsZWQuCisoQWRkcmVzc2VzIERlYmlhbiBidWc6ICMzODg3MTgpCisKK0ltcHJvdmUgdGhlIChub24taW5zdGFsbGVkLCBmb3IgZXhwZXJ0cyBvbmx5KSBmaW5kc3VwZXIgcHJvZ3JhbSBieQorcHJpbnRpbmcgdGhlIHV1aWQgYW5kIGxhYmVsIGZyb20gdGhlIHN1cGVyYmxvY2tzLCBhcyB3ZWxsIGFzIHRoZQorc3RhcnRpbmcgYW5kIGVuZGluZyBvZmZzZXRzIG9mIHRoZSBmaWxlc3lzdGVtIGdpdmVuIHRoZSBpbmZvcm1hdGlvbiBpbgordGhlIHN1cGVyYmxvY2suICBPbWl0IGJ5IGRlZmF1bHQgcHJpbnRpbmcgc3VwZXJibG9ja3MgdGhhdCBhcmUgbGlrZWx5Citmb3VuZCBpbiBsb2NhdGVkIGluIGFuIGV4dDMgam91cm5hbCB1bmxlc3MgYW4gZXhwbGljaXQgLWogb3B0aW9uIGlzCitnaXZlbi4KKworVXBkYXRlZCBTcGFuaXNoLCBGcmVuY2ggYW5kIER1dGNoIHRyYW5zbGF0aW9ucyBhbmQgYWRkZWQgQ2F0YWxhbgordHJhbnNsYXRpb24uICAoQWRkcmVzc2VzIERlYmlhbiBidWc6ICM0MTE1NjIpCisKK1VzZSBGcmVlQlNEJ3MgRElPQ0dNRURJQVNJWkUgYW5kIERJT0NHRElORk8gaW9jdGxzIGlmIGF2YWlsYWJsZSB3aGVuCitkZXRlcm1pbmluZyBhIHBhcnRpdGlvbidzIHNpemUsIHNpbmNlIGJpbmFyeSBzZWFyY2hpbmcgdG8gZGV0ZXJtaW5lCit0aGUgZGV2aWNlIGRvZXNuJ3Qgd29yayBvbiBGcmVlQlNELgorCitEb2N1bWVudGF0aW9uIGFib3V0IFVVSUQncyBpcyBhdmFpbGFibGUgaW4gZW5vdWdoIHBsYWNlcywgYW5kIGl0J3MKK2F3a3dhcmQgdG8gZGVhbCB3aXRoIGRlYmlhbi1sZWdhbCdzIGluc2FuaXRpZXMuICBTbyBJJ20gY2F2aW5nIGluIHRoZQorIm1vcmUtbHVuYXRpYy10aGFuLVJNUyIgd2luZyBvZiBEZWJpYW4gYnkgcmVtb3ZpbmcgUkZDLTQxMjIgc28gd2UKK2Rvbid0IGhhdmUgZG8gdGhlIGRmc2cgdGFyYmFsbC4gIEFsc28gcmVtb3ZlIHRoZSBydWxlIHRoYXQgb25seSB0cmllZAordG8gaW5zdGFsbCBSRkMtNDEyMiBvbiBVYnVudHUsIHNpbmNlIFVidW50dSBzZWVtcyB0byB3YW50IHRvIGZldGNoCitlMmZzcHJvZ3MgZXhjbHVzaXZlbHkgZnJvbSBEZWJpYW4uICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICM0MDcxMDcpCisKK0ZpeCB0aGUgaW5mby1kaXIgbGluZSBzbyB0aGF0IHRoZSBtZW51IG5hbWUgZG9lcyBub3QgY29udGFpbiBhIC5pbmZvCitwcmVmaXguICBGaXJzdCBvZiBhbGwsIGl0J3MgdWdseSwgc2Vjb25kbHksIGl0IGNhdXNlcyB0aGUgaW5zdGFsbC1pbmZvCitjb21tYW5kIHRvIGZhaWwgdG8gcmVtb3ZlIHRoZSBjb21fZXJyIGluZm8gZmlsZSBmcm9tIHRoZQorL3Vzci9zaGFyZS9pbmZvL2RpciBmaWxlIHdoZW4gdGhlIGNvbWVyci1kZXYgcGFja2FnZSBpcyByZW1vdmVkIGFuZAorcHVyZ2VkLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjNDAxNzExKQorCitGaXhlZCBzcGVsbGluZyBtaXN0YWtlcywgdHlwb3MsIGFuZCBvdGhlcndpc2UgY2xhcmlmaWVkIG1hbiBwYWdlcy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzM2OTc2MSwgIzM3MzAwNCwgIzM3OTY5NSkKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVncyAjMzg5NTU0LCAjMzkwNjY0LCAjNDEzMjA4LCAjNDE5NjA1LAorIzQwODM1MiwgIzQxNTU2MCwgIzM5OTE1NSkKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0UyZnNjayBub3cgc3VwcG9ydHMgdGhlICVJdCBleHBhbnNpb24gd2hlbiBwcmludGluZyBhIHByb2JsZW0gcmVwb3J0LgorSXQgd2lsbCBwcmludCB0aGUgdHlwZSBvZiB0aGUgaW5vZGUgaW4gdGhlIHByb2JsZW0gY29udGV4dC4KKworRml4IG1pc2MvTWFrZWZpbGUuaW4gc28gdGhhdCBpdCBidWlsZHMgZXZlbiBpZiBlMmZzY2sgaGFzbid0IGJlZW4gYnVpbHQgeWV0CisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzE1NjU1NjEpCisKK1JlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGFuZCBvdGhlciBsaW50L2djYyAtV2FsbCBjbGVhbnVwcworCitBZGQgY2hlY2sgdG8gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSgpIHNvIGl0IHdpbGwgcmV0dXJuIEVGQklHIGZvciBmb3IKK2ZpbGVzeXN0ZW1zIGNvbnRhaW5lZCBpbiByZWd1bGFyIGZpbGVzIHdoZXJlIHRoZSBmaWxlc3lzdGVtIGltYWdlIHNpemUKK2lzIHJldHVybmVkIGJ5IHN0YXQ2NCgpLgorCitTZXQgbG9jYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIEMgc28gbWtfY21kcyBhbmQgY29tcGlsZV9ldCBhbHdheXMKK3dvcmsuICAoQWRkcmVzc2VzIFNvdXJjZUZvcmdlIEJ1ZzogIzE1MzIxNzcpCisKK0FkZGVkIHRoZSA2NC1iaXQgYnl0ZSBzd2FwcGluZyBmdW5jdGlvbiBleHQyZnNfc3dhYjY0KCkuCisKK0FkZGVkIHR3byBuZXcgaGVscGVyIGZ1bmN0aW9ucyB0byBwcmV2ZW50IDIqKjMxLzIqKjMyLTEgb3ZlcmZsb3cKK3Byb2JsZW1zOiBleHQyZnNfZGl2X2NlaWwoKSBhbmQgZTJwX3BlcmNlbnQoKS4KKworQ3JlYXRlIG5ldyBleHQyZnMgbGlicmFyeSBpbmxpbmUgZnVuY3Rpb25zIGV4dDJmc19ncm91cF9maXJzdF9ibG9jaygpCithbmQgZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2soKSBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIGFuZAorZW5kaW5nIGJsb2NrcyBpbiBhIGJsb2NrIGdyb3VwLgorCitDcmVhdGUgdGhlIGdlbmVyYXRlZCBmaWxlcyByZWFkLW9ubHkgdG8gcmVtaW5kIGRldmVsb3BlcnMgbm90IHRvIGVkaXQgdGhlbS4KKworQWRkIHN1cHBvcnQgZm9yIGF1dG9jb25mIDIuNjAgKHdpdGggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZGVyCit2ZXJzaW9ucyBvZiBhdXRvY29uZikuCisKK0FkZGVkIGFuICJtYWtlIHJwbSIgdGFyZ2V0IHRvIHRvcC1sZXZlbCBNYWtlZmlsZQorCitBZGRlZCB2YXJpb3VzIEZyZWVCU0QgcG9ydGFiaWxpdHkgZml4ZXMuCisKK0V4Y2x1ZGUgbWVyY3VyaWFsIGZpbGVzIGZyb20gdGhlIFJQTSBidWlsZCB0cmVlIHRvIHNwZWVkIHVwIGNvcHkvYnVpbGQuCisKK1VzZSByb290X3N5c2NvbmZkaXIgdG8gZGVmaW5lIHRoZSBsb2NhdGlvbnMgb2YgbWtlMmZzLmNvbmYgYW5kCitlMmZzY2suY29uZiBpbnN0ZWFkIG9mIHVzaW5nIGEgaGFyZC1jb2RlZCAvZXRjIHBhdGhuYW1lLgorCitQcmV2ZW50IGUyZnNjay5oIGFuZCBleHQyX2V4dF9hdHRyLmggZnJvbSBnZXR0aW5nIGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLgorCitGaXhlZCAibWFrZSBjbGVhbiIgaW4gYmxraWQncyBNYWtlZmlsZS5pbiBmaWxlIGZyb20gcmVtb3ZpbmcgdHN0XyouYyBmaWxlcy4KKworSWYgZGlmZiAtdSBpcyBzdXBwb3J0ZWQsIHVzZSBpdCB0byByZXBvcnQgdGVzdCBmYWlsdXJlcy4KKworVXBkYXRlcy9pbXByb3ZlbWVudHMgdG8gUlBNIHNwZWMgZmlsZQorCitBZGQgb24tZGlzayBmb3JtYXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgbmV3IGZlYXR1cmVzOgorRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0sCitFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOSywgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklULAorRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRQorCitBZGQgYSBuZXcgbWFrZSB0YXJnZXQgImNoZWNrZWQtZmFpbGVkIiBpbiB0aGUgdGVzdHMgZGlyZWN0b3J5IHdoaWNoCityZXJ1bnMgYW55IGZhaWxlZCB0ZXN0cworCitVcGRhdGUgZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEudHh0IHdpdGggcmZjNDEyMi50eHQKKworRml4IG1pc2NlbGxhbmVvdXMgYnVncyByZXBvcnRlZCBieSBDb3Zlcml0eTogRGVhZCBjb2RlLCBwb3RlbnRpYWwgbnVsCitwb2ludGVyIGRlcmVmZXJlbmNlcywgbWVtb3J5IGxlYWtzLCBldGMuICBOb25lIHdlcmUgc2VjdXJpdHktY3JpdGljaWFsCitwcm9ibGVtcy4KKworRml4IHVwIHVzYWdlIGFuZCBkZWNyZW1lbnQgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIHRlc3RfaWNvdW50IHByb2dyYW0KKworQWRkIGRlYnVnZ2luZyBjb2RlIHRvIHRoZSBjb21fZXJyIGxpYnJhcnk7IGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorQ09NRVJSX0RFQlVHIGlzIHNldCB0byAxLCBwcmludCBvdXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFzIGVycm9yIHRhYmxlcworYXJlIGFkZGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIGNvbV9lcnIgbGlicmFyeS4gIElmIHRoZQorQ09NRVJSX0RFQlVHX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IChhbmQgdGhlIHByb2Nlc3MgaXMgbm90CitzZXR1aWQpIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgbWF5IGJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlLgorCitDaGFuZ2UgYWxsIG9mIHRoZSBlMmZzcHJvZ3MgcHJvZ3JhbXMgdG8gdXNlIHRoZSBuZXdlciBhZGRfZXJyb3JfdGFibGUoKQorYW5kIHJlbW92ZV9lcnJvcl90YWJsZSgpIGludGVyZmFjZXMgaW5zdGVhZCBvZiB0aGUgbXVjaCBvbGRlcgoraW5pdGlhbGl6ZV8qX2Vycm9yX3RhYmxlKCkgZnVuY3Rpb24uCisKK0FkZCBUREIgc3VwcG9ydCBpbnRvIHRoZSBleHQyZnMgbGlicmFyeS4gIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUgYQorZ3VhcmFudGVlZCBsaWJyYXJ5IHdlIGNhbiBjb3VudCBvbiBhbHdheXMgYmVpbmcgcHJlc2VudCBzbyB3ZSBjYW4KK3N0b3JlIGRhdGEgaW4gYW4gb24tZGlzayBkYXRhYmFzZS4KKworQWRkIHN1cHBvcnQgZm9yIHVzaW5nIFREQiB0byBzdG9yZSB0aGUgaWNvdW50IGRhdGEsIHNvIHdlIGRvbid0IHJ1biBvdXQKK29mIG1lbW9yeSB3aGVuIGNoZWNraW5nIHJlYWxseSBsYXJnZSBmaWxlc3lzdGVtcy4KKworQ2hhbmdlIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgc28gdGhhdCBpdCBza2lwcyBlbXB0eSB0ZXN0IGRpcmVjdG9yaWVzLgorCitEZWZpbmUgdGhlIGxfaV9pdmVyc2lvbiBmaWVsZCBpbiBleHQyX2lub2RlLiAgVGhlIGxfaV92ZXJzaW9uIGZpZWxkIGlzCitub3cgZGVmaW5lZCBmcm9tIHRoZSBvbGQgbF9pX3Jlc2VydmVkMSBmaWVsZCBpbiB0aGUgZXh0MiBpbm9kZS4gIFRoaXMKK2ZpZWxkIHdpbGwgYmUgdXNlZCB0byBzdG9yZSBoaWdoIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBpbm9kZSB2ZXJzaW9uCitudW1iZXIuCisKK0FkZCBNYWtlZmlsZSBwcm9kdWN0aW9uIHJ1bGUgZm9yIGUyZnNwcm9ncy5zcGVjIGluIGNhc2UgaXQgZ2V0cworZGVsZXRlZC4KKworQWRkIG5ldyBmdW5jdGlvbiBwcm9maWxlX2dldF91aW50KCkgdG8gYWxsb3cgZm9yIGEgY2xlYW4gd2F5IHRvIGZldGNoCit1bnNpZ25lZCBpbnRlZ2VycyBmcm9tIHRoZSBjb250ZXh0LgorCitBZGQgdGVzdCB0byBtYWtlIHN1cmUgdGhlIGV4dDIgc3VwZXJibG9jayBzdHJ1Y3R1cmUgaXMgMTAyNCBieXRlcy4KKworRml4IHR5cG8gaW4gbmFtZSBvZiBmX2R1cDQgcmVncmVzc2lvbiB0ZXN0CisKK0FkZCBuZXcgZnVuY3Rpb24gYmxraWRfZ2NfY2FjaGUoKSB3aGljaCBwZXJmb3JtcyBhIGdhcmJhZ2UgY29sbGVjdGlvbgorcGFzcyBvbiB0aGUgL2V0Yy9ibGtpZC50YWIgZmlsZS4KKworVGhlIGV4dDJmc19vcGVuKCkgZnVuY3Rpb24gbm93IHNldHMgRVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZLiAgSW4KK2dlbmVyYWwsIG9ubHkgZTJmc2NrIChhZnRlciB0aGUgZmlsZXN5c3RlbSBpcyBjbGVhbiksIHR1bmUyZnMsIGFuZAorcmVzaXplMmZzIHNob3VsZCBjaGFuZ2UgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyBieSBkZWZhdWx0LiAgTW9zdAorY2FsbGVycyBvZiBleHQyZnNfb3BlbigpIHNob3VsZCBub3QgYmUgdG91Y2hpbmcgYW55IHN1cGVyYmxvY2sgZmllbGRzCit3aGljaCByZXF1aXJlIHRoZSBiYWNrdXBzIHRvIGJlIHRvdWNoZWQuCisKK0FkZCBuZXcgZnVuY3Rpb24gdG8gbGliZXh0MmZzLCBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoKSwgd2hpY2gKK3JldHVybnMgdGhlIGRlZmF1bHQgam91cm5hbCBzaXplLgorCisKK0UyZnNwcm9ncyAxLjM5IChNYXkgMjksIDIwMDYpIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4IDMyLWJpdCBjbGVhbmxpbmVzcyBpbiBlMmZzcHJvZ3Mgc28gdGhhdCB3ZSBjYW4gc3VwcG9ydCBmaWxlc3lzdGVtcworYmV0d2VlbiAyKiozMSBhbmQgMioqMzIgYmxvY2tzLgorCitDaGFuZ2UgbWtlMmZzIHRvIHVzZSAvZXRjL21rZTJmcy5jb25mIGFzIGEgY29uZmlndXJhdGlvbiBmaWxlIHRvCitjb25maWd1cmUgdGhlIGZpbGVzeXN0ZW0gZmVhdHVyZXMsIGJsb2Nrc2l6ZSwgYW5kIGlub2RlX3JhdGlvIGZvcgorZGlmZmVyZW50IGZpbGVzeXN0ZW0gdHlwZXMuCisKK01rZTJmcyB3aWxsIG5vdyBjcmVhdGUgZmlsZXN5c3RlbXMgaGFzaCB0cmVlcyBhbmQgb24tbGluZSByZXNpemluZworZW5hYmxlZCBieSBkZWZhdWx0LCBiYXNlZCBvbiB0aGUgbmV3IC9ldGMvbWtlMmZzLmNvbmYgZmlsZS4KKworVGhlIGUyZnNwcm9ncyB0b29scyAocmVzaXplMmZzLCBlMmZzY2ssIG1rZTJmcykgd2lsbCBvcGVuIHRoZQorZmlsZXN5c3RlbSBkZXZpY2Ugbm9kZSBpbiBleGNsdXNpdmUgbW9kZSB0byBwcmV2ZW50IGFjY2lkZW50cyBieQorc3lzdGVtIGFkbWluaXN0cmF0b3JzLiAgSW4gdGhlIGNhc2Ugb2YgcmVzaXplMmZzIGFuZCBta2UyZnMsIGl0IHdpbGwKK29ubHkgdXNlIGV4Y2x1c2l2ZSBtb2RlIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBtb3VudGVkLgorCitGaXhlZCBhIGJ1ZyBpbiBta2UyZnMgd2hpY2ggY2F1c2VkIGl0IHRvIHRvIGZhaWwgd2hlbiBjcmVhdGluZyB0aGUKK3Jlc2l6ZSBpbm9kZSBmb3IgbGFyZ2UgZmlsZXN5c3RlbXMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzM0NjU4MCkKKworV2hlbiBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGUgUkFJRCBmaWxlc3lzdGVtcyB3aXRoIHRoZSBzdHJpZGUKK3BhcmFtZXRlciwgbWtlMmZzIHdpbGwgbm93IHBsYWNlIGVhY2ggcG9ydGlvbiBvZiB0aGUgZ3JvdXAncyBpbm9kZQordGFibGUgcmlnaHQgdXAgYWZ0ZXIgdGhlIHN1cGVyYmxvY2sgKGlmIHByZXNlbnQpIGluIG9yZGVyIHRvIG1pbmltaXplCitmcmFnbWVudGF0aW9uIG9mIHRoZSBmcmVlc3BhY2UuCisKK1NwZWVkIHVwIG1rZTJmcyBhbmQgZTJmc2NrIGJ5IHdyaXRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMgbW9yZQorZWZmaWNpZW50bHkgYnkgd3JpdGluZyB0aGUgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMgaW4gb25lIHBhc3MsIHRodXMKK3JlZHVjaW5nIHRoZSBudW1iZXIgb2YgZGlzayBzZWVrcyByZXF1aXJlZC4KKworQWRkIHN1cHBvcnQgZm9yIG9uLWxpbmUgcmVzaXppbmcgdG8gcmVzaXplMmZzLgorCitGaXggYmxraWQgbGlicmFyeSBzbyB0aGF0IGxvZ2ljIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIGRldmljZSdzCitjYWNoZWQgaW5mb3JtYXRpb24gaW4gL2V0Yy9ibGtpZC50YWIgbmVlZHMgdG8gYmUgdmVyaWZpZWQgb3Igbm90Citkb2Vzbid0IGdldCBjb25mdXNlZCBieSBhIHN5c3RlbSBjbG9jayB3aGljaCBpcyBpbnNhbmUgKGZvciBleGFtcGxlLAoraWYgdGhlIGJhdHRlcnkgaXMgZGVhZCBvbiBhIE1hY2ludG9zaCBydW5uaW5nIFBQQyBMaW51eC4gIChBZGRyZXNzZXMKK1JlZCBIYXQgQnVnOiAjMTgyMTg4KQorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIG5vdyBzdG9yZSB0aGUgVVVJRCBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbCB1c2VkCitieSBleHQzIGZpbGVzeXN0ZW1zLCBzbyB0aGF0IGluIHRoZSBmdXR1cmUsIHRoZSB1c2Vyc3BhY2UgbW91bnQgYmluYXJ5CitjYW4gdXNlIHRoaXMgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWwgYW5kIHBhc3MKK3RoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGtlcm5lbC4KKworRTJmc2NrIHdpbGwgbm93IGNvbnN1bHQgYSBjb25maWd1cmF0aW9uIGZpbGUsIC9ldGMvZTJmc2NrLmNvbmYgdG8KK2NvbnRyb2wgaG93IHZhcmlvdXMgb3B0aW9ucyBzaG91bGQgYmUgaGFuZGxlZC4gIFNlZSB0aGUgZTJmc2NrLmNvbmYKK21hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuICAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMTUwMjk1KQorCitFMmZzY2sgbm93IHByaW50cyBhbiBleHBsYW5hdG9yeSBtZXNzYWdlIHdoZW4gZGVsYXlpbmcgYSBmaWxlc3lzdGVtCitjaGVjayB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBvbiBiYXR0ZXJ5LiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOgorIzM1MDMwNikKKworRTJmc2NrIHdpbGwgZGV0ZWN0IGlmIHRoZSBzdXBlcmJsb2NrJ3MgbGFzdCBtb3VudCBmaWVsZCBvciBsYXN0IHdyaXRlCitmaWVsZCBpcyBpbiB0aGUgZnV0dXJlLCBhbmQgb2ZmZXIgdG8gZml4IGlmIHNvLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnCisjMzI3NTgwKSBUaGVzZSBwcm9ibGVtcyB3aWxsIGJlIGZpeGVkIGF1dG9tYXRpY2FsbHkgaW4gcHJlZW4gbW9kZQorc2luY2UgRGViaWFuJ3MgYm9vdCBzZXF1ZW5jZSBib2d1c2x5IGRvZXNuJ3Qgc2V0IHRoZSB0aW1lIGNvcnJlY3RseQordW50aWwgcG90ZW50aWFsbHkgdmVyeSBsYXRlIGluIHRoZSBib290dXAgcHJvY2VzcywgYW5kIHRoaXMgY2FuIGNhdXNlCitmYWxzZSBwb3NpdGl2ZXMgd2hpY2ggd2lsbCBjYXVzZSB1c2Vycycgc3lzdGVtcyB0byBmYWlsIHRvIGJvb3QuCisoQWRkcmVzc2VzIERlYmlhbiBCdWdzICMzNDM2NjIgYW5kICMzNDM2NDUpCisKK0UyZnNjayBub3cgY2hlY2tzIHRvIHNlZSBpZiB0aGUgc3VwZXJibG9jayBoaW50IGZvciB0aGUgbG9jYXRpb24gb2YKK3RoZSBleHRlcm5hbCBqb3VybmFsIGlzIGluY29ycmVjdCwgYW5kIGlmIHNvLCBvZmZlciB0byB1cGRhdGUgaXQuCisoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzNTU2NDQpCisKK0ZpeCBlMmZzY2sgZnJvbSBzZWdmYXVsdGluZyBvbiBkaXNjb25uZWN0ZWQgaW5vZGVzIHRoYXQgY29udGFpbiBvbmUgb3IKK21vcmUgZXh0ZW5kZWQgYXR0cmlidXRlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzMxNjczNiwgIzMxODQ2MykKKworRTJmc2NrIHdpbGwgc3RvcCBhbmQgcHJpbnQgYSB3YXJuaW5nIGlmIHRoZSB1c2VyIHRyaWVzIHJ1bm5pbmcgYQorcmVhZC93cml0ZSBiYWRibG9ja3MgdGVzdCBvbiBhIHJlYWQtb25seSBtb3VudGVkIHJvb3QgZmlsZXN5c3RlbS4KKworRml4IGEgbWVtb3J5IGxlYWsgaW4gZTJmc2NrJ3MgZXJyb3IgcGF0aHMuICAoVGhhbmtzIHRvIE1pY2hhZWwKK0MuIFRob21wc29uIGZvciBwb2ludGluZyB0aGVzZSBvdXQ7IHRoZXkgd2VyZSBvcmlnaW5hbGx5IGZvdW5kIHVzaW5nCitDb3Zlcml0eS4pCisKK1doZW4gcmVzaXppbmcgYSBmaWxlIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtLCByZXNpemUyZnMgd2lsbCBleHBhbmQgb3IKK3RydW5jYXRlIGEgZmlsZSBhcyBuZWNlc3NhcnkuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMyNzE2MDcpCisKK1Jlc2l6ZTJmcyB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUgUkFJRCBzdHJpZGUgcGFyYW1ldGVyIHRoYXQKK2hhZCBiZWVuIHVzZWQgdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtLCBhbmQgdXNlIHRoYXQgZm9yIG5ld2x5IGNyZWF0ZWQKK2Jsb2NrIGdyb3Vwcy4gICBUaGUgUkFJRCBzdHJpZGUgcGFyYW1ldGVyIG1heSBhbHNvIGJlIG1hbnVhbGx5IHNwZWNpZmllZAorb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgbmV3IC1TIG9wdGlvbiB0byByZXNpemUyZnMuCisKK0ZpeCBta2UyZnMgc28gdGhhdCBpdCBjb3JyZWN0bHkgY3JlYXRlcyBleHRlcm5hbCBqb3VybmFscyBvbgorYmlnLWVuZGlhbiBtYWNoaW5lcyAoc3VjaCBhcyBhIFMvMzkwKS4gIAorCitGaXggYSBidWcgaW4gdGhlIGUycCBsaWJyYXJ5IHdoaWNoIGNvdWxkIGNhdXNlIGR1bXBlMmZzIHRvIChyYXJlbHkpCitmYWlsIHRvIHByaW50IG91dCB0aGUgam91cm5hbCBvciBoYXNoIHNlZWQgVVVJRC4gIChUaGFua3MgdG8gR3VpbGxhdW1lCitDaGFtYnJhdWQgZm9yIHBvaW50aW5nIHRoaXMgb3V0LikKKworRHVtcGUyZnMgd2lsbCBub3cgcHJpbnQgdGhlIHNpemUgb2YgdGhlIGpvdXJuYWwgKGlmIHByZXNlbnQpLgorCitGaXggZGVidWdmcydzIHNldF9pbm9kZV9maWVsZCBjb21tYW5kIHNvIGl0IGNhbiBwcm9wZXJseSBzZXQgdGhlIGZyYWcsCitmc2l6ZSwgdWlkX2hpZ2gsIGdpZF9oaWdoLCBhbmQgYXV0aG9yIGZpZWxkcyBpbiB0aGUgaW5vZGUgaW5zdGVhZCBvZgorc2lsZW50bHkgZmFpbGluZywgYW5kIHNvIHRoYXQgc2V0dGluZyB0aGUgaV9zaXplIGFjdHVhbGx5IHNldHMgaV9zaXplCitjb3JyZWN0bHkuCisKK0FkZCBhIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsIHNldF9jdXJyZW50X3RpbWUsIHdoaWNoIHNldHMgZnMtPm5vdyBzbwordGhhdCByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzIGNhbiByZXBlYXRlZGx5IG1vZGlmeSB0aGUgZmlsZXN5c3RlbSdzCitsYXN0X3dyaXRlIGZpZWxkcy4KKworRml4IGEgYnVnIGluIGRlYnVnZnMncyBpY2hlY2sgd2hpY2ggd291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHRoZSBvd25lcgorb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrLgorCitGaXggdGhlIGRlYnVnZnMgY29tbWFuZHMgaHRyZWVfZHVtcCwgZHhfaGFzaCwgYW5kIGxpc3RfZGlyIHNvIHRoZXkgcHJpbnQgYQorcHJpbnQgYSB1c2FnZSBtZXNzYWdlIHdoZW4gYW4gaWxsZWdhbCBvcHRpb24gY2hhcmFjdGVyIGlzIGdpdmVuLgorCitGaXggZGVidWdmcydzIGR1bXBfdW5zdWVkIGNvbW1hbmQgb24gZmlsZXN5c3RlbXMgd2l0aCBhIDY0ayBibG9ja3NpemUKK3NvIGl0IHdvbid0IGNvcmUgZHVtcC4gIChBZGRyZXNzZXMgU291cmNlRm9yZ2UgYnVnICMxNDI0MzExKQorCitGaXggbWtsb3N0K2ZvdW5kIHNvIHRoYXQgaXQgY3JlYXRlcyBhIGZ1bGwtc2l6ZWQgZGlyZWN0b3J5IG9uCitmaWxlc3lzdGVtcyB3aXRoIGxhcmdlciBibG9jayBzaXplcy4KKworRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gYmxraWQgbGlicmFyeS4KKworRml4IGEgZGlzcGxheSBidWcgaW4gImJhZGJsb2NrcyAtc3YiIHNvIHRoYXQgdGhlIGRvbmUgbWVzc2FnZSBwcm9wZXJseQorY2xlYXJzIHRoZSBibG9jayBudW1iZXIgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZworIzMyMjIzMSkKKworQWxsb3cgZnJhY3Rpb25hbCBwZXJjZW50YWdlcyB0byB0aGUgLW0gb3B0aW9uIGluIG1rZTJmcyBhbmQgdHVuZTJmcworKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjODAyMDUpCisKK1VzZSBmc3RhdC9mc3RhdDY0IGluIGdldHNpemUuYyBpZiB0aGUgdGhlIHRhcmdldCBpcyBhIHJlZ3VsYXIgZmlsZSwKK2luc3RlYWQgb2YgYXR0ZW1wdGluZyB0byBkbyBhIGJpbmFyeSBzZWFyY2guICBGaXggc29tZSBmZCBsZWFrcyBpbgorZXJyb3IgY2FzZXMuCisKK0FkZCBzdXBwb3J0IGZvciBkZXZpY2UgbWFwcGVyIGxpYnJhcnkgdG8gdGhlIGJsa2lkIGxpYnJhcnkgdG8gZW5zdXJlCit0aGF0IHRoZSAiYmVzdCIgKGkuZS4sIGxlYWYpIGRldmljZSBpcyBwcm9iZWQgYnkgdGhlIGJsa2lkIGxpYnJhcnkuCisKK0ZpeCB0aGUgYmxraWQgbGlicmFyeSBzbyB0aGF0IGl0IG5vdGljZXMgd2hlbiBhbiBleHQyIGZpbGVzeXN0ZW0gaXMKK3VwZ3JhZGVkIHRvIGV4dDMuCisKK0ltcHJvdmUgdGhlIGJsa2lkJ3MgbGlicmFyeSBWRkFUL0ZBVCBkZXRlY3Rpb247IGl0IG5vdyB1bmRlcnN0YW5kcworbGFiZWxzIHN0b3JlZCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIGFuZCBpcyBtb3JlIHBhcmFub2lkIGFib3V0CitjaGVja2luZyB0aGUgRkFUIHN1cGVyYmxvY2sgdmFsdWVzLgorCitGaXhlZCBhIGZkIGxlYWsgaW4gdGhlIHV1aWQgbGlicmFyeSB3aGljaCB3YXMgY2F1c2luZyBwcm9ibGVtcyBmb3IgdGhlCitMVk0gdG9vbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMzNDU4MzIpCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgcmVpc2VyNCBhbmQgc29mdHdhcmUgc3VzcGVuZCBwYXJ0aXRpb25zIHRvIHRoZQorYmxraWQgbGlicmFyeS4gIEFsc28gYWRkIHN1cHBvcnQgZm9yIGV4dHJhY3QgdGhlIGxhYmVsIGZyb20gaXNvOTY2MAorZmlsZXN5c3RlbXMuCisKK0ZpeCBhIGNvbXBpbGVfZXQgYnVnIHdoaWNoIG1pc2NvdW50IHRoZSBudW1iZXIgb2YgZXJyb3IgbWVzc2FnZXMgaWYKK2NvbnRpbnVhdGlvbnMgYXJlIHVzZWQgaW4gdGhlIC5ldCBmaWxlLgorCitBZGQgZXh0cmEgc2FuaXR5IGNoZWNrcyB0byBwcm90ZWN0IHVzZXJzIGZyb20gdW51c3VhbCBjaXJ1Y21zdGFuY2VzCit3aGVyZSAvZXRjL210YWIgbWF5IG5vdCBiZSBzYW5lLCBieSBjaGVja2luZyB0byBzZWUgaWYgdGhlIGRldmljZSBpcworcmVwb3J0ZWQgYnVzeSAod29ya3Mgb24gTGludXggMi42KSBrZXJuZWxzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnCisjMzE5MDAyKQorCitVcGRhdGVkIEZyZW5jaCwgRHV0Y2gsIFBvbGlzaCwgYW5kIFN3ZWRpc2ggdHJhbnNsYXRpb25zLiAgKEFkZHJlc3NlcyBEZWJpYW4KK0J1ZzogIzM0MzE0OSwgIzM0MTkxMSwgIzMwMDg3MSwgIzMxNjYwNCwgIzMxNjc4MiwgIzMzMDc4OSkKKworRml4IHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiBlMmZzY2sgd2hlbiBmaW5pc2hpbmcgdXAgdGhlIHVzZSBvZiB0aGUKK2UyZnNjayBjb250ZXh0IHN0cnVjdHVyZS4KKworRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMsIHR5cG9zLCBhbmQgb3RoZXJ3aXNlIGNsYXJpZmllZCBtYW4gcGFnZXMgYW5kCitkb2N1bWVudGF0aW9uLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzMyOTg1OSwgIzMyMjE4OCwgIzMxNjgxMSwKKyMzMTI1MTUsICMzNTEyNjgsICMzNTc5NTEsICMzNDcyOTUsICMzMTYwNDAsICMzNjgzOTIsICMzNjgzOTMsICMzNjgzOTQsCisjMzY4MTc5KQorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzICMzMTc4NjIsICMzMjAzODksICMyOTA0MjksICMzMTA5NTAsCisjMzEwNDI4LCAjMzMwNzM3LCAjMzMwNzM2LCAjMzI5MDc0LCAjMzU2MjkzLCAjMzYwMDQ2LCAjMzY2MDE3LCAjMzY0NTE2LAorIzM2MjU0NCwgIzM2Mjk3MCkKKworCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgdG8gbGF0ZXN0IHZlcnNpb24gKDIwMDYtMDItMjMpIGZyb20KK0ZTRi4KKworRml4IGFzbV90eXBlcy5oIHR5cGUgY29uZmxpY3RzIG9uIEFNRCA2NCBwbGF0Zm9ybXMuICAoQWRkcmVzc2VzIERlYmlhbgorQnVnczogIzM2MDY2MSwgIzM2MDMxNykKKworRml4ZWQgdGhlIE1ha2VmaWxlIHNvIHRoYXQgdGhleSB3b3JrIGNvcnJlY3RseSBvbiBuZXdlciB2ZXJzaW9ucyBvZgorR05VIG1ha2UgKGkuZS4sIDMuODEpLgorCitBZGQgdmFsZ3JpbmQgc3VwcG9ydCB0byB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlcywgYW5kIGVsaW1pbmF0ZQorZmFsc2UgcG9zaXRpdmVzIGZyb20gdmFsZ3JpbmQuCisKK0FkZCBhIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBmb3IgdGhlIGJsa2lkIGxpYnJhcnkuCisKK0ZpeCBhIGZlbmNlcG9zdCBlcnJvciBpbiByZXNpemUyZnMgY2F1Z2h0IGJ5IHZhbGdyaW5kLiAgCisKK0ZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBtaXNzaW5nIG1lbWNweSBwcm90b3R5cGVzLgorCitXZSBubyBsb25nZXIgaGF2ZSB0aGUgc3BhcmMgYXNzZW1ibHkgY29kZSBpbiB0aGUgaGVhZGVyIGZpbGUgYW55IG1vcmUsCitzbyB3ZSBzaG91bGRuJ3Qgc2V0IF9FWFQyX0hBVkVfSEFTX0JJVE9QU18gZm9yIHRoZSBzcGFyYy4gIFRoaXMgd291bGQKK2JyZWFrIGNvbXBpbGVzIG9uIHRoZSBzcGFyYyBhcmNoaXRlY3R1cmVzIHdoZW4gdXNpbmcgZ2NjLgorCitJbiB0aGUgbGliZXh0MmZzIGxpYnJhcnksIGFkZCB0aGUgbmV3IGZpZWxkIGZzLT5ub3cgd2hpY2ggaWYgbm9uLXplcm8KK2lzIHVzZWQgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIHRpbWUgd2hlbiBzZXR0aW5nIHZhcmlvdXMgZmlsZXN5c3RlbQorZmllbGRzIChsYXN0IG1vZGlmaWVkIHRpbWUsIGxhc3Qgd3JpdGUgdGltZSwgZXRjLikKKworRml4IGdjYyA0LjAxIGNvbXBsYWludHMgYnkgYWRkaW5nIGEgbWlzc2luZyAjaW5jbHVkZSA8c3RyaW5nLmg+IHRvCitleHQyZnMuaCB3aGljaCBpcyBuZWVkZWQgc2luY2UgdGhlIGlubGluZSBmdW5jdGlvbnMgdXNlIG1lbWNweSgpLgorKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBCdWcgIzEyNTEwNjIpCisKK1VzZSBCVUlMRF9DRkxBR1MgYW5kIEJVSUxEX0xERkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MgYW5kIExERkxBR1MgaW4KK3RoZSBidWlsZCBzeXN0ZW0gd2hlbiBidWlsZGluZyBmaWxlcyBpbiB0aGUgdXRpbCBkaXJlY3Rvcnkgd2hpY2ggYXJlCituZWVkZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiAgVGhpcyBhdm9pZHMgcG90ZW50aWFsIHByb2JsZW1zIHdoZW4KK2Nyb3NzLWNvbXBpbGluZyBhbmQgc29tZSBvZiB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgaW4gQ0ZMQUdTIG9yIExERkxBR1MKK2FyZSBub3QgcmVjb2duaXplZCBhcyB2YWxpZCBieSB0aGUgaG9zdCBjb21waWxlci4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIEJ1ZyAjMTI2MTU0NykKKworQ2xlYW4gdXAgdGhlIGJsa2lkIGxpYnJhcnkgYnkgbWFraW5nIHRoZSBzdXBlcmJsb2NrIGFuZCBnZW5lcmljIGkvbworZnVuY3Rpb25zIHRvIGJlIG1vcmUgZ2VuZXJpYy4gIENsZWFuIHVwIGludGVyZmFjZSB0byB0aGUgcHJvYmUKK2Z1bmN0aW9uLCBhbmQgZml4IG1lbW9yeSBsZWFrLiAgRmluYWxsbHksIHJlbW92ZSBhbiB1bm5lZWRlZCByZWZlcmVuY2UKK3RvIHByb2JlLmggaW4gdGhlIGxpYi9ibGtpZC9yZXNvbHZlLmMKKworQWRkIGFuIGV4dDJmc19yZWFkX2JiX0ZJTEUgcmVncmVzc2lvbiB0ZXN0IHRvIGNvbmZpcm0gcHJvcGVyIGRldGVjdGlvbgorb2YgaW52YWxpZCBibG9jayAjJ3MuCisKK1RoZSB4ODYgYXNtIGNvbnN0cmFpbnRzIGZvciBleHQyZnNfe3NldC9jbGVhcn1fYml0IGhhdmUgYmVlbiBmaXhlZCB0bworaW5kaWNhdGUgdGhhdCB0aGUgdGhlIGZ1bmN0aW9uIHJlYWQvd3JpdGVzIHRoZSBtZW1vcnkgbG9jYXRpb24uCisKK0ZpeCB2YXJpb3VzIGdjYyAtV2FsbCBjb21wbGFpbnRzLgorCitBZGQgYSBkZXBlbmRlbmN5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJkaXJlY3RvcmllcyBhcmUgY3JlYXRlZAorYmVmb3JlIGNyZWF0aW5nIGFsbCBvZiB0aGUgb2JqZWN0IGZpbGVzLCBpbiBvcmRlciB0byBhZGRyZXNzIHBhcmFsbGVsCitidWlsZCBwcm9ibGVtIGluIHRoZSBsaWJyYXJ5IE1ha2VmaWxlcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgQnVnOgorIzEyNjE1NTMpCisKK0FkZCAkKExERkxBR1MpIHRvIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2hlbiBnZW5lcmF0aW5nIGFuIEVMRiBvcgorU29sYXJpcyBzaGFyZWQgbGlicmFyeSwgdG8gYWxsb3cgY3Jvc3MtY29tcGlsZSBhbmQgb3RoZXIgYnVpbGRzIHRoYXQKK21pZ2h0IG5lZWQgdG8gc3BlY2lmeSAtTCBwYXRocyB0byBuZWVkZWQgbGlicmFyaWVzLiAgKEFkZHJlc3NlcworU291cmNlZm9yZ2UgQnVnICMxMjYxNTQ5KQorCitBZGQgYSBuZXcgZmVhdHVyZSwgRVhUMl9GRUFUVVJFX0NPTVBBVF9MQVpZX0JHLCB3aGljaCBpcyBpbml0aWFsbHkKK2ludGVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgSXQgYWxsb3dzIGFuIGV4dDIvZXh0MyBkZXZlbG9wZXIgdG8KK2NyZWF0ZSB2ZXJ5IGxhcmdlIGZpbGVzeXN0ZW1zIHVzaW5nIHNwYXJzZSBmaWxlcyB3aGVyZSBtb3N0IG9mIHRoZQorYmxvY2sgZ3JvdXBzIGFyZSBub3QgaW5pdGlhbGl6ZWQgYW5kIHNvIGRvIG5vdCByZXF1aXJlIG11Y2ggZGlzaworc3BhY2UuICBFdmVudHVhbGx5IGl0IGNvdWxkIGJlIHVzZWQgYXMgYSB3YXkgb2Ygc3BlZWRpbmcgdXAgbWtlMmZzIGFuZAorZTJmc2NrIGZvciBsYXJnZSBmaWxlc3lzdGVtLCBidXQgdGhhdCB3b3VsZCBiZSBiZXN0IGRvbmUgYnkgYWRkaW5nIGFuCitST19DT01QQVQgZXh0ZW5zaW9uIHRvIHRoZSBmaWxlc3lzdGVtIHRvIGFsbG93IHRoZSBpbm9kZSB0YWJsZSB0byBiZQorbGF6aWx5IGluaXRpYWxpemVkIG9uIGEgcGVyLWJsb2NrIGJhc2lzLCBpbnN0ZWFkIG9mIGJlaW5nIGVudGlyZWx5Citpbml0aWFsaXplZCBvciBlbnRpcmVseSB1bnVzZWQgb24gYSBwZXItYmxvY2tncm91cCBiYXNpcy4KKworRml4IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIGUyZnNwcm9ncyB3aWxsIGJldHRlciBjb21waWxlIG9uIExpbnV4CisyLjAuMzUgc3lzdGVtcy4KKworTWFrZSB0ZXN0IHNjcmlwdHMgbW9yZSByb2J1c3QgYWdhaW5zdCBsb2NhbGUtcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworRml4IHR5cGUgd2FybmluZyBwcm9ibGVtIHdpdGggc2l6ZW9mKCkgaW4gZXh0MmZzX29wZW4yKCkuCisKK0ZpeCB0eXBlIHdhcm5pbmcgcHJvYmxlbSB3aXRoIHRpbWVfdCBpbiBkZWJ1Z2ZzLgorCisKK0UyZnNwcm9ncyAxLjM4IChKdW5lIDMwLCAyMDA1KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBibGtpZCdzIHRlc3QgcHJvZ3JhbXMgKGJ1aWx0IHdpdGggIm1ha2UgY2hlY2siKSBjb21waWxlIGNvcnJlY3RseQorZXZlbiB3aXRob3V0ICJjb25maWd1cmUgLS1lbmFibGUtYmxraWQtZGVidWciLgorCitGaXggaWE2NCBjb3JlIGR1bXAgYnVnIGNhdXNlZCBieSBlMmZzcHJvZ3MgcnVubmluZyBhZm91bCBvZiBDOTkgc3RyaWN0Cit0eXBlIGFsaWFzaW5nIHJ1bGVzIG9uIG5ld2VyIGdjYyBjb21waWxlcnMuICAoQWRkcmVzc2VzIFJlZCBIYXQKK0J1Z3ppbGxhICMjMTYxMTgzLikKKworRml4IGNvbV9lcnIgbGlicmFyeSB0byBtYWtlIGl0IG1vcmUgY29tcGF0aWJsZSB3aXRoIHJlY2VudCBjaGFuZ2VzCittYWRlIHRvIHRoZSBjb21fZXJyIGxpYnJhcnkgaW4gTUlUIEtlcmJlcm9zIFY1IHZlcnNpb24gMS40LgorKEFkZHJlc3NlcyBTb3VyY2Vmcm9nZSBCdWcgIzExNTAxNDYpCisKK0dlbmVyYWwgY2xlYW51cCBvZiBtZXNzYWdlcyBwcmludGVkIGJ5IGUyZnNwcm9ncyBwcm9ncmFtcyBmb3IgZ3JhbW1hciwKK2NvbnNpc3RlbmN5LCBhbmQgdG8gbWFrZSBsaWZlIGVhc2llciBmb3IgdHJhbnNsYXRvcnMuICBGaXhlZCBhIGZldworc3RyaW5ncyBjb250YWluaW5nIEVuZ2xpc2ggdGhhdCBoYWQgbm90IGJlZW4gbWFya2VkIGFzIG5lZWRpbmcKK3RyYW5zbGF0aW9ucy4gIFJlbW92ZWQgc3RyaW5ncyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQsIHRvCittYWtlIGxpZmUgZWFzaWVyIGZvciB0cmFuc2xhdG9ycy4KKworTWtlMmZzIGFuZCBiYWRibG9ja3Mgd2lsbCB0YWtlIGFkdmFudGFnZSBvZiBhIGZlYXR1cmUgaW4gTGludXggMi42IHRvCit0ZXN0IHRvIHNlZSBpZiBhIGRldmljZSBhcHBlYXJzIHRvIGJlIGluIHVzZSBpbnN0ZWFkIG9mIGp1c3QgcmVseWluZworb24gL3Byb2MvbW91bnRzIGFuZCAvZXRjL210YWIuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzMwODU5NCkuCisKK0ZpeCBwb3J0YWJpbGl0eSBwcm9ibGVtIGluIHRoZSBmaWxlZnJhZyBwcm9ncmFtIGFmZmVjdGluZyBwbGF0Zm9ybXMKK3doZXJlIHRoZSBzaXplIG9mIGFuIGludGVnZXIgaXMgc21hbGxlciB0aGFuIHRoZSBzaXplIG9mIGEgbG9uZy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMzA5NjU1KQorCitNa2UyZnMgd2lsbCBub3cgdXNlIGEgbGFyZ2VyIGpvdXJuYWwgYnkgZGVmYXVsdCBmb3IgZmlsZXN5c3RlbXMKK2dyZWF0ZXIgdGhhbiA0R0IuICAoMTI4IE1CIGluc3RlYWQgb2YgMzJNQikuCisKK01rZTJmcyB3aWxsIHJlZnVzZSB0byBjcmVhdGUgZmlsZXN5c3RlbXMgZ3JlYXRlciB0aGFuIDIqKjMxLTEgYmxvY2tzLAordW5sZXNzIGZvcmNlZC4gIFRoaXMgaXMgdG8gYXZvaWQgc2lnbmVkIHZzLiB1bnNpZ25lZCBrZXJuZWwgYnVncyBpbgorYmxvY2sgbnVtYmVycyB0aGF0IHN0aWxsIG5lZWQgdG8gYmUgZml4ZWQuCisKK1RoZSBibGtpZCBwcm9ncmFtIGhhcyBhIG5ldyBvcHRpb24gd2hpY2ggd2lsbCBtb3JlIGVmZmljaWVudGx5IHNlYXJjaAorZm9yIGRldmljZSB3aGVuIGl0IGlzIGtub3duIChvciBleHBlY3RlZCkgdGhhdCBvbmx5IG9uZSBtYXRjaGluZworZGV2aWNlIHdpbGwgYmUgZm91bmQgaW4gdGhlIHN5c3RlbSwgc3VjaCBhcyB3aGVuIGRvaW5nIGEgbG9va3VwIGJ5CitVVUlELgorCitEZWJpYW4ncyBlMmZzcHJvZ3Mtc3BlY2lmaWMgaW5pdHJkIGZyYWdtZW50IHdpbGwgYXZvaWQgaW5jbHVkaW5nCit1bm5lY2Vzc2FyeSBsaWJyYXJpZXMgaW50byB0aGUgaW5pdHJkIHJhbWRpc2sgYnkgdW5zZXR0aW5nIExEX1BSRUxPQUQKK2FuZCBMRF9MSUJSQVJZX1BBVEgsIGFuZCBmaWx0ZXJpbmcgb3V0IGxpYnJhcmllcyBmb3VuZCBpbgorL2V0Yy9sZC5zby5wcmVsb2FkLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnOiAjMzA0MDAzKQorCitGaXhlZCBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSBpbiB0aGUgYmxraWQgcHJvZ3JhbXMgZm9yCithcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBjaGFyIHR5cGUgaXMgdW5zaWduZWQuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitCdWc6ICMxMTgwNTg1KQorCitGaXggYSBidWcgaW4gZmlsZWZyYWcgc28gdGhhdCBpdCBkb2Vzbid0IGZhbHNlbHkgY291bnQgYW4gZXh0cmEKK2Rpc2NvbnRpbnVpdHkgd2hlbiB0aGUgZmlyc3QgYmxvY2sgZm91bmQgaXMgYW4gaW5kaXJlY3QgYmxvY2suCisoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzMwNzYwNykuCisKK0ZpeCBibGtpZCdzIHJlY29nbml0aW9uIG9mIGNyYW1mcyBmaWxlc3lzdGVtcywgYW5kIGVuaGFuY2UgaXQgdG8gYmUKK2FibGUgdG8gaGFuZGxlIGNyYW1mcyBsYWJlbHMuCisKK0ZpeCBkZWJ1Z2ZzJ3Mgc3RhdCBjb21tYW5kIHRvIG5vdCBjb3JlIGR1bXAgd2hlbiBhIGZpbGVzeXN0ZW0gaXMgbm90CitvcGVuLgorCitGaXggZTJmc2NrJ3MgaGFuZGxpbmcgb2YgZXJyb3IgY29uZGl0aW9ucyBjYXVzZWQgYnkgdGhlIHJlc2l6ZSBpbm9kZQorY2xhaW1pbmcgYmxvY2tzIHRoYXQgYXJlIGFsc28gdXNlZCBieSBvdGhlciBpbm9kZXMsIGEgZmlsZXN5c3RlbQorY29ycnVwdGlvbiB3aGljaCB3YXMgY29tbW9ubHkgY2F1c2VkIGJ5IGEgYnVnIGluIEZlZG9yYSBDb3JlIDMncworcmVzaXplMmZzIHByb2dyYW0uCisKK0ZpeGVkIGJ1ZyBpbiBmaWxlZnJhZyB3aGljaCBjYXVzZWQgaXQgdG8gZmFpbCBvbiBub24tZXh0Mi8zCitmaWxlc3lzdGVtcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzMwMzUwOSkKKworSWYgdGhlIHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGluZGljYXRlcyB0aGF0IHRoZSBzeXN0ZW0gY2xvY2sgbWF5Citub3QgYmUgYWNjdXJhdGUsIHRoZW4gZTJmc2NrIHdpbGwgb21pdCBjaGVja2luZyBpbm9kZXMnIGRlbGV0aW9uIHRpbWUKK2ZpZWxkIGZvciBpbmRpY2F0aW9ucyBvZiBhIHBvdGVudGlhbCBjb3JydXB0ZWQgb3JwaGFuZWQgaW5vZGUgbGlzdC4KKyhQcmV2aW91c2x5IGUyZnNjayBvbmx5IG9tbWl0ZWQgdGhlc2UgTE9XX0RUSU1FIGNoZWNrcyB3aGVuIHRoZQorc3VwZXJibG9jaydzIGxhc3Qgd3JpdGUgdGltZSBsb29rZWQgaW5zYW5lLikKKworRml4ZWQgYSBJQTY0IGNvcmUgZHVtcCBidWcgaW4gdGhlIGUycCBsaWJyYXJ5IHdoaWNoIGFmZmVjdGVkIGR1bXBlMmZzLgorKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMzMDIyMDApCisKK01ha2UgdGhlIGJsa2lkIGxpYnJhcnkgbW9yZSBwYXJhbm9pZCBhYm91dCBiZWluZyBydW4gZnJvbSBzZXRnaWQKK3Byb2dyYW1zLCBhbmQgdG8gdXNlIF9fc2VjdXJlX2dldGVudigpIGZyb20gbGliYyBpZiBpdCBpcyBhdmFpbGFibGUuCisKK0ZpeGVkIHNwZWxsaW5nIG1pc3Rha2VzLCB0eXBvcywgYW5kIG90aGVyd2lzZSBjbGFyaWZpZWQgbWFuIHBhZ2VzLgorKEFkZHJlc3NlcyBEZWJpYW4gQnVnczogIzMwNDU5MSwgIzMwNDU5MiwgIzMwNDU5NCwgIzMwNDU5NywgIzMwNDU5MworYW5kIFNvdXJjZWZvcmdlIEJ1ZzogIzExODk4MDMpCisKK1VwZGF0ZWQgYW5kIGZpeGVkIHRyYW5zbGF0aW9ucy4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAtLS0gc2VlIGRlYmlhbi9jaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4dDJmc19zZXRfYml0KCksIGV4dDJmc19jbGVhcl9iaXQoKSwgYW5kIGV4dDJmc190ZXN0X2JpdCggaGF2ZSBiZWVuCitjaGFuZ2VkIHRvIHRha2UgYW4gdW5zaWduZWQgaW50IGZvciB0aGUgYml0IG51bWJlci4gIE5lZ2F0aXZlIGJpdAorbnVtYmVycyB3ZXJlIG5ldmVyIGFsbG93ZWQgKGFuZCBkaWRuJ3QgbWFrZSBhbnkgc2Vuc2UpLCBzbyB0aGlzIHNob3VsZAorYmUgYSBzYWZlIGNoYW5nZS4gIFRoaXMgaXMgbmVlZGVkIHRvIGFsbG93IHNhZmUgdXNlIG9mIGJsb2NrIG51bWJlcnMKK2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyKiozMS4KKworVGhlIGNvbXBpbGVfZXQgcHJvZ3JhbSB3aWxsIGF2b2lkIHJlY3JlYXRpbmcgZ2VuZXJhdGVkIGZvb19lcnIuYyBhbmQKK2Zvb19lcnIuaCBmaWxlcyBpZiBubyBjaGFuZ2VzIGFyZSBuZWNlc3NhcnkuICBUaGUgY29tcGlsZV9ldCBwcm9ncmFtCit3aWxsIGFsc28gYXRvbWljYWxseSByZXBsYWNlIHRoZXNlIGZpbGVzIHRvIGF2b2lkIGEgcG90ZW50aWFsIHBhcmFsbGVsCitidWlsZCByYWNlIHByb2JsZW0gb24gU01QIHN5c3RlbXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzoKKyMxMTU3OTMzKQorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiB0byB0aGUgYmxraWQgbGlicmFyeSwgYmxraWRfcHJvYmVfYWxsX25ldygpLAord2hpY2ggb25seSBwcm9iZXMgbmV3bHkgYWRkZWQgZGlzayBkZXZpY2VzLCBhbmQgY2hhbmdlCitibGtpZF9maW5kX2Rldl93aXRoX3RhZygpIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHNvIHRoYXQgd2hlbiBhCityZXF1ZXN0ZWQgdGFnIGlzIG5vdCBmb3VuZCwgZGV2aWNlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBub3QgY2hlY2tlZAorYXJlIHNlYXJjaGVkIGJlZm9yZSBzZWFyY2hpbmcgYWxsIGRldmljZXMgaW4gdGhlIHN5c3RlbS4KKworQWRkZWQgbmV3IGZ1bmN0aW9ucyB0byB0aGUgYmxraWQgbGlicmFyeSwgYmxraWRfZGV2X3NldF9zZWFyY2goKSBhbmQKK2Jsa2lkX2Rldl9oYXNfdGFnKCkuCisKK0UyZnNjaydzIHByb2JsZW0gc3RyaW5ncyBjYW4gbm93IHVzZSBAbSBhbmQgQG4gYXMgYWJicmV2YXRpb25zIGZvcgorIm11bHRpcGx5LWNsYWltZWQiIGFuZCAiaW52YWxpZCIsIHJlc3BlY3RpdmVseS4KKworVGhlIGUyZnNwcm9nLnBvdCBmaWxlIG5vdyBoYXMgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZSBALWV4cGFuc2lvbgorYW5kICUtZXhwYW5zaW9uIHdvcmtzLCBhbmQgc3RyaW5ncyBpbiBlMmZzY2svcHJvYmxlbS5jIHdoaWNoIGNvbnRhaW4gQAorY2hhcmFjdGVycyBub3cgaGF2ZSBjb21tZW50cyBpbiBlMmZzcHJvZ3MucG90IHdpdGggdGhlIEAtZXhwYW5zaW9uIHRvCittYWtlIGxpZmUgZWFzaWVyIGZvciB0cmFuc2xhdG9ycy4KKworRml4ZWQgbWlzc2luZyByZXR1cm4gdmFsdWVzIGluIHRoZSBleHQyZnMgbGlicmFyeSB3aGljaCBjb3VsZCBjYXVzZSBpdAordG8gcmV0dXJuIHJhbmRvbSBnYXJiYWdlIGluIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucy4KKworQWxsb3cgdGhlIGN1cnJlbnQgdGltZSB0byBiZSBvdmVycmlkZW4gdmlhIHRoZSBFMkZTQ0tfVElNRSBlbnZpcm9ubWVudAordmFyaWFibGUgZm9yIHVzZSBpbiByZWdyZXNzaW9uIHRlc3RzLgorCitUaGUgdGVzdCBzY3JwaXQgZHJpdmVyIHByb2dyYW0gbm93IGV4aXRzIHdpdGggYSBub24temVybyBzdGF0dXMgaWYKK3RoZXJlIGFueSBvZiBpdHMgdGVzdCB0aGF0IGl0IHJhbiBmYWlsZWQuCisKK0ZpeGVkIHByb2JsZW1zIHdpdGggcGFyYWJ1aWxkcyBvbiBTTVAgc3lzdGVtcy4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UKK0J1ZzogIzExNTc5MzMpCisKK0ZpeGVkICJtYWtlIGNoZWNrIiBzbyB0aGF0IGl0IGNvbXBpbGVzIGNvcnJlY3RseSBldmVuIHdoZW4gZTJmc3Byb2dzJworaGVhZGVyIGZpbGVzIGhhdmUgbm90IGJlIGluc3RhbGxlZCBpbiB0aGUgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMuCisoQWRkcmVzc2VzIFNvdXJjZWZvcmdlIEJ1ZzogIzExODA1NzIpCisKK0ZpeGVkIGdjYyAtV2FsbCBuaXRzLgorCisKK0UyZnNwcm9ncyAxLjM3IChNYXJjaCAyMSwgMjAwNSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkIHN1cHBvcnQgZm9yIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiBFeHRlbmRlZCBBdHRyaWJ1dGVzIHN0b3JlZCBpbgoraW5vZGVzIHRvIGUyZnNjay4KKworQWRkIHN1cHBvcnQgZm9yIGR1bXBpbmcgdGhlIGNvbnRlbnRzIG9mIGxhcmdlIGlub2RlcyB0byBkZWJ1Z2ZzLAoraW5jbHVkaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHN0b3JlZCBpbiBpbm9kZXMuCisKK0ZpeCBta2UyZnMsIGUyZnNjaywgZGVidWdmcywgYW5kIHRoZSBleHQyZnNfbWtkaXIgZnVuY3Rpb24gc28gdGhhdAord2hlbiB3ZSBjcmVhdGUgYSBuZXcgaW5vZGUgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIGV4dHJhIGluZm9ybWF0aW9uIGluCit0aGUgaW5vZGUgKGFueSBleHRyYSBmaWVsZHMgaW4gYSBsYXJnZSBpbm9kZSBhbmQgYW55IGVhLWluLWlub2RlCitpbmZvcm1hdGlvbikgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiAgVGhpcyBjYW4gdGFrZSBwbGFjZSB3aGVuCitta2UyZnMgY3JlYXRlcyB0aGUgcm9vdCBhbmQgbG9zdCtmb3VuZCBkaXJlY3RvcnksIHdoZW4gZTJmc2NrIGNyZWF0ZXMKK2EgbmV3IHJvb3QgaW5vZGUgb3IgYSBuZXcgbG9zdCtmb3VuZCBkaXJlY3RvcnksIGFuZCB3aGVuIHRoZSB1c2VyIHVzZXMKK3RoZSBkZWJ1Z2ZzIHdyaXRlLCBta25vZCwgb3IgbWtkaXIgY29tbWFuZHMuICBPdGhlcndpc2UsIHRoZSBuZXdseQorY3JlYXRlIGlub2RlIGNvdWxkIGluaGVyaXQgZ2FyYmFnZSAob3Igb2xkIEVBIGluZm9ybWF0aW9uKSBmcm9tIGEKK3ByZXZpb3VzbHkgZGVsZXRlZCBpbm9kZS4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHNvIGl0IHdvdWxkIG5vdGljZSBpZiBhIGZpbGUgd2l0aCBhbiBleHRlbmRlZAorYXR0cmlidXRlIGJsb2NrIHdhcyBleGFjdGx5IDIqKjMyIGJsb2Nrcywgc3VjaCB0aGF0IGlfYmxvY2tzIHdyYXBwZWQKK3RvIHplcm8uCisKK0FkZGVkIHN1cHBvcnQgdG8gZmlsZWZyYWcgdG8gZGV0ZWN0IGZpbGVzIHdoaWNoIGFyZSB1c2luZyB0aGUgbmV3CitleHBlcmltZW50YWwgZmlsZSBleHRlbnRzIGZvcm1hdCwgYW5kIHVzZSB0aGUgbm9uLWV4dDIgYWxnb3JpdGhtIGluCit0aGF0IGNhc2UuICBGaXhlZCBhIGJ1ZyB0byBhdm9pZCByZXBvcnRpbmcgYSBmYWxzZSBkaXNjb250aW51aXR5IGlmCit0aGVyZSBpcyBvbmUgb3IgbW9yZSB1bmFsbG9jYXRlZCBibG9ja3MgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUuCisKK0R1cGxpY2F0ZWQgYSBjaGVjayBmb3Igbm90aWNpbmcgd2hldGhlciBvciBub3QgdGhlIG51bWJlciBvZiBibG9ja3MKKyhnaXZlbiBhIGNlcnRhaW4gYmxvY2tzaXplKSBpcyBncmVhdGVyIHRoYW4gMioqMzIgd2hlbiB0aGUKK0JMS0dFVFNJWkU2NCBpb2N0bCBpcyBub3QgYXZhaWxhYmxlIHRvIGV4dDJmc19nZXRfZGV2aWNlX3NpemUoKS4gIFRoaXMKK2FsbG93cyBta2UyZnMgdG8gYXV0b21hdGljYWxseSB1c2UgYSBsYXJnZXIgYmxvY2tzaXplIHdoZW4gY3JlYXRpbmcgYQorZmlsZXN5c3RlbSBvbiBhIHZlcnkgbGFyZ2UgZGV2aWNlIHdoZW4gcnVuIG9uIHN5c3RlbXMgdGhhdCBkbyBub3QKK3N1cHBvcnQgQkxLR0VUU0laRTY0LgorCitGaXggdGhlIEkxOE4gYnVpbGQgd2hpY2ggd2FzIGJyb2tlbiBpbiBlMmZzcHJvZ3MgMS4zNiBiZWNhdXNlIHRoZQorYnVpbGQgc3lzdGVtIGhhZCBiZWVuIHN3aXRjaGVkIHRvIHRyZWF0IHRoZSAuZ21vIGZpbGVzIGFzIHNoaXBwZWQKK2ZpbGVzIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBzeXN0ZW1zIHRoYXQgaGF2ZSBvbGRlciBHTlUKK0kxOE4gdG9vbHMgaW5zdGFsbGVkKSwgYnV0IHRoZSBnZW5fdGFyYmFsbC5pbiBzY3JpcHQgd2FzIHN0aWxsCityZW1vdmluZyB0aGUgLmdtbyBmaWxlcyBmcm9tIHRoZSBvZmZpY2lhbCBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIC0tLSBzZWUgZGViaWFuL2NoYW5nZWxvZyBmb3IKK2RldGFpbHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWdzICMjMjk2NzY5LCAjMjk5MzQxKQorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGUycCBsaWJyYXJ5IHdoaWNoIGNvbnZlcnQgYmV0d2VlbiBhIHN0cmluZworYW5kIG9zX3R5cGU6IGUycF9vczJzdHJpbmcoKSBhbmQgZTJwX3N0cmluZzJvcygpLCBhbmQgdXNlZCB0aGVtIHRvCittYWtlIHRoZSBnZW5lcmF0ZWQgYmluYXJpZXMgbW9yZSBjb21wYWN0LgorCitGaXhlZCBhIGNvbXBpbGUtdGltZSBlcnJvciBvbiBEYXJ3aW4gc3lzdGVtcy4KKworQ2xlYW5lZCB1cCB0aGUgbGliL2V4dDJmcyBNYWtlZmlsZSBzbGlnaHRseS4KKworCitFMmZzcHJvZ3MgMS4zNiAoRmVicnVhcnkgNCwgMjAwNSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbGwgb2YgdGhlIHBhdGNoZXMgdGhhdCB3ZXJlIGFwcGxpZWQgdG8gRmVkb3JlIENvcmUgMydzCitlMmZzcHJvZ3MtMS4zNS0xMS4yIGhhdmUgYmVlbiBpbnRlZ3JhdGVkLCBhbHRob3VnaCBzb21ldGltZXMgd2l0aCBhCitsb3Qgb2YgYnVnIGZpeGVzIGZpcnN0LiAgVXNlcnMgb2YgRmVkb3JhIENvcmUgMyBhcmUgc3Ryb25nbHkKK2VuY291cmFnZWQgdG8gdXBncmFkZSB0byBlMmZzcHJvZ3MgMS4zNiBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitBZGQgc3VwcG9ydCBmb3IgZmlsZXN5c3RlbSB3aXRoIHRoZSBvbmxpbmUgcmVzaXppbmcgdmlhIHJlc2l6ZSBpbm9kZQorZmVhdHVyZS4gIEZpeGVkIG51bWVyb3VzIGJ1Z3MgZnJvbSB0aGUgRmVkb3JhIHBhdGNoZXMuICBUaGUgRmVkb3JhCitwYXRjaGVzIGFsc28gZGlkbid0IGJvdGhlciB0byBkbyBhbnkgY29uc2lzdGVuY3kgY2hlY2tpbmcgb24gdGhlCityZXNpemUgaW5vZGUsIG9yIGFkZCBhbnkgdGVzdHMgdG8gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gIFRoZSAiLVIKK3Jlc2l6ZT00ZyIgb3B0aW9uIHRvIG1rZTJmcyB3YXMgYSBuby1vcCBpbiB0aGUgRmVkb3JhIHBhdGNoZXMsIGRlc3BpdGUKK2JlaW5nIGxpc3RlZCBpbiBta2UyZnMncyB1c2FnZSBtZXNzYWdlLiAgQWxsIG9mIHRoZXNlIHNob3J0Y29taW5ncworaGF2ZSBiZWVuIGNvcnJlY3RlZC4KKworRTJmc2NrIGNhbiBhbHNvIGFsc28gZml4IGZpbGVzeXN0ZW1zIHRyYXNoZWQgYnkgRmVkb3JhJ3MgcmVzaXplMmZzCitwcm9ncmFtLiAgSW4gb3JkZXIgdG8gZG8gdGhpcywgdGhlIHVzZXIgbXVzdCBydW4gdGhlIGNvbW1hbmRzOgorCisJZGVidWdmcyAtdyAvZGV2L2hkWFhYIC1SICJmZWF0dXJlcyBecmVzaXplX2lub2RlIgorICAgICAgICBlMmZzY2sgLWYgL2Rldi9oZFhYWAorCitPcHRpb25hbGx5LCB0aGUgZXh0MnByZXBhcmUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZS1lbmFibGUgb25saW5lCityZXNpemluZyBhZnRlciB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBmaXhlZC4KKworVGhlIGZzY2sgcHJvZ3JhbSB3aWxsIG5vdyBhY2NlcHQgYW4gb3B0aW9uYWwgZmlsZWRlc2NyaXB0b3IgYXJndW1lbnQKK3RvIHRoZSAtQyBvcHRpb24uICAoVGhlIEZlZG9yYSB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2ggd291bGQgc29tZXRpbWVzCitjYXVzZSBmc2NrIHRvIGlnbm9yZSBhIHBhcmFtZXRlciBvbiBmc2NrJ3MgY29tbWFuZCBsaW5lIGluIHNvbWUgcmFyZQorY2FzZXMsIHNpZ2guKQorCitNYWtlIHN1cmUgZTJmc3Byb2dzIGRvZXNuJ3Qgd3JpdGUgZ2FyYmFnZSBpbnRvIHRoZSByZXNlcnZlZCBwb3J0aW9uIG9mCitsYXJnZSBpbm9kZXMuCisKK01ha2Ugc3VyZSByZXNpemUyZnMgcmVsZWFzZXMgdGhlIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhlIG9sZCBpbm9kZQordGFibGUgYmxvY2tzIHdoZW4gbW92aW5nIHRoZSBpbm9kZSB0YWJsZS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzoKKyMyOTA4OTQpCisKK1NraXAgdGhlIHJfcmVzaXplX2lub2RlIHRlc3QgaWYgcmVzaXplMmZzIGlzIG5vdCBjb21waWxlZCAoZHVlIHRvCitjb25maWd1cmUgLS1kaXNhYmxlLXJlc2l6ZXIpCisKK0UyZnNjayBub3cgY2hlY2tzIHRoZSBzdW1tYXJ5IGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbiwgYW5kCitpZiBhbnkgb2YgdGhlIGluZm9ybWF0aW9uIGlzIG9idmlvdXNseSB3cm9uZywgaXQgd2lsbCBmb3JjZSBhIGZ1bGwKK2ZpbGVzeXN0ZW0gY2hlY2suICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzI5MTU3MSkKKworRml4IGUyZnNjayB0byBub3QgY29tcGxhaW4gd2hlbiB0aGUgcmVzaXplX2lub2RlIGZlYXR1cmUgaXMgZW5hYmxlZCwKK3NfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyBpcyB6ZXJvLCBhbmQgdGhlcmUgaXMgbm8gRElORCBibG9jayBhbGxvY2F0ZWQgaW4KK3RoZSByZXNpemUgaW5vZGUuCisKK0ZpeCBlMmZzY2sgdG8gbm90ZSBkZWxldGUgc3ltbGlua3MgdGhhdCBjb250YWluIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQorYWZ0ZXIgdGhlIGV4dF9hdHRyIGZlYXR1cmUgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLiAgKEFkZHJlc3NlcyBSZWQgSGF0CitCdWd6aWxsYSAjMTQ2Mjg0KS4KKworQWRkIG5ldyB1dGlsaXR5IHByb2dyYW0sIGNvcHlfc3BhcnNlLmMsIHdoaWNoIGlzIHZlcnkgdXNlZnVsCitmb3IgZGVhbGluZyB3aXRoIGxhcmdlIHNwYXJzZSBmaWxlcyAoc3VjaCBhcyBlMmltYWdlIGZpbGVzKS4KKworQWRkIHN1cHBvcnQgZm9yIGpubF9ibG9ja3NbXSBmb3IgZGVidWdmcydzIHNldF9zdXBlcl92YWx1ZS4KKworRml4IGZpbGVmcmFnIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IHdpdGggc3BhcnNlIGZpbGVzLgorCitGaWxlZnJhZyAtdiB3aWxsIHByaW50IGZpcnN0IGFuZCBsYXN0IGJsb2Nrcy4KKworQWRkIGludGVycHJldGF0aW9uIG9mIE9TIENyZWF0b3IgdmFsdWVzIGZvciBGcmVlQlNEIGFuZCBMaXRlcyBpbiBta2UyZnMKK2FuZCBkdW1wZTJmcy4KKworQWRkIG1rZTJmcyBzdXBwb3J0IHNvIHRoYXQgaXQgY2FuIHN1cHBvcnQgZmlsZXN5c3RlbXMgbGFyZ2VyIHRoYW4gNFRCCithdXRvbWF0aWNhbGx5LCBieSByZXRyeWluZyB3aXRoIGEgNGsgYmxvY2tzaXplIGlmIHRoZSBkZXZpY2Ugc2l6ZSBpcwordG9vIGJpZyB0byBiZSBleHByZXNzZWQgdXNpbmcgYSAxayBibG9ja3NpemUuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitidWcgIzExMDY2MzEpCisKK0NoYW5nZSBibGtpZCB0byB0ZXN0IGZvciBOVEZTIGZpcnN0IGJlY2F1c2UgV2luZG93cyBzb21ldGltZXMgZG9lc24ndAorY2xlYXIgZW5vdWdoIG9mIHRoZSBwYXJpdGlvbiB0byBjb25mdXNlIHRoZSBwcm9iaW5nIHJvdXRpbmVzIGludG8KK3RoaW5raW5nIHRoZSBvbGQgZmlsZXN5c3RlbSB0eXBlIGlzIHN0aWxsIHZhbGlkLiAgKEFkZHJlc3NlcyBEZWJpYW4KK0J1ZyAjMjkxOTkwKQorCitBZGQgc3VwcG9ydCBmb3Igc3dhcCBwYXJ0aXRpb24gbGFiZWwgYW5kIHV1aWQncyBpbiB0aGUgYmxraWQgbGlicmFyeS4KKworQWRkIHN1cHBvcnQgdG8gdGhlIGJsa2lkIGxpYnJhcnkgdG8gcmVjb2duaXplIE9yYWNsZSBBU00gdm9sdW1lcy4KKworTWFrZSBibGtpZCAtdCBkaXNwbGF5IGFsbCBkZXZpY2VzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSwKK25vdCBqdXN0IHRoZSBmaXJzdCBvbmUsIGFuZCB3b3JrIG1vcmUgY29uc2lzdGVudGx5IHdoZW4gdGhlIGJsa2lkCitjYWNoZSBmaWxlIGlzIG5vdCBhdmFpbGFibGUgb3Igc2V0IHRvIC9kZXYvbnVsbC4gIChBZGRyZXNzZXMgRGViaWFuCitCdWcgIzI5MDUzMCBhbmQgIzI5MjQyNSkKKworQmFkYmxvY2tzIHdpbGwgbm93IGNvcnJlY3RseSBkaXNwbGF5IGJsb2NrIG51bWJlcnMgZ3JlYXRlciB0aGFuCis5OTksOTk5LDk5OSBpbiBpdHMgcHJvZ3Jlc3MgZGlzcGxheS4KKworVGhlIHR1bmUyZnMgcHJvZ3JhbSB3aWxsIG5vdCBhbGxvdyB0aGUgdXNlciBmcm9tIHNldHRpbmcgYSByaWRpY3Vsb3VzCitudW1iZXIgb2YgcmVzZXJ2ZWQgYmxvY2tzIHdoaWNoIHdvdWxkIGNhdXNlIGUyZnNjayB0byBhc3N1bWUgdGhlCitzdXBlcmJsb2NrIHdhcyBjb3JydXB0LiAgRTJmc2NrJ3Mgc3RhbmRhcmRzIGZvciB3aGF0IGlzIGEgcmlkaWN1bG91cworbnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrIGhhcyBhbHNvIGJlZW4gcmVsYXhlZCB0byA1MCUgb2YgdGhlIGJsb2NrcyBpbgordGhlIGZpbGVzeXN0ZW0uCisKK1RoZSBibGtpZCBsaWJyYXJ5IHdpbGwgcmV0dXJuIHZmYXQgaW4gcHJlZmVyZW5jZSB0byBtc2RvcywgYW5kIGV4dDMgaW4KK3ByZWZlcmVuY2UgdG8gZXh0MiAoaWYgdGhlIGpvdXJuYWxsaW5nIGZsYWcgaXMgc2V0KSBzbyB0aGF0IG1vdW50IHdpbGwKK2RvIHRoZSByaWdodCB0aGluZy4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMjg3NDU1KQorICAKK01rZTJmcyB3aWxsIG5vdyB1c2UgdGhlIC1FIG9wdGlvbiBmb3IgZXh0ZW5kZWQgb3B0aW9uczsgdGhlIG9sZCAtUgorKHJhaWQgb3B0aW9ucykgb3B0aW9uIGlzIHN0aWxsIGFjY2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KK0ZpeCBhIGRvdWJsZS1mcmVlIHByb2JsZW0gaW4gcmVzaXplMmZzLiAgKFJlZCBIYXQgQnVnemlsbGEgIzEzMjcwNykKKworTWtlMmZzIHdpbGwgbm93IGFjY2VwdCBhIHNpemUgaW4gbWVnYWJ5dGVzLCBnaWdhYnl0ZXMsIGFuZCBvdGhlciB1bml0cworKHZpYSAiMzJtIiBvciAiNGciIG9uIHRoZSBjb21tYW5kIGxpbmUpIGlmIHRoZSB1c2VyIGZpbmRzIHRoaXMgbW9yZQorY29udmVuaWVudCB0aGFuIHNwZWNpZnlpbmcgYSBibG9jayBjb3VudC4KKworRml4IGFuIG9ic2N1cmUsIGhhcmQtdG8gZmluZCBidWcgaW4gImUyZnNjayAtUyIgY2F1c2VkIGJ5IGFuIGlub2RlCitjYWNoZSBjb25oZXJlbmN5IHByb2JsZW0uCisKK0RlYnVnZnMgbm93IHN1cHBvcnRzIGEgbmV3IGNvbW1hbmQsIHNldF9pbm9kZV9maWVsZCwgd2hpY2ggYWxsb3dzIGEKK3VzZXIgdG8gbWFudWFsbHkgc2V0IGEgc3BlY2lmaWMgaW5vZGUgZmllbGQgbW9yZSBjb252ZW5pZW50bHksIGFzIHdlbGwKK2FzIHNldCBlbnRyaWVzIGluIHRoZSBpbmRpcmVjdCBibG9jayBtYXAuCisKK0RlYnVnZnMncyBzZXRfc3VwZXJfdmFsdWUgY29tbWFuZCBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IHRoZSB1c2VyCitjYW4gc2V0IG1vc3Qgc3VwZXJibG9jayBmaWVsZHMsIGluY2x1ZGluZyB0aGUgZGF0ZS90aW1lIGZpZWxkcyBhbmQKK3NvbWUgb2YgdGhlIG1vcmUgbmV3c2x5IGFkZGVkIHN1cGVyYmxvY2sgZmllbGRzLgorCitFMmZzcHJvZ3MgcHJvZ3JhbXMgbm93IGFjY2VwdCBhbiBvZmZzZXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBmaWxlCitzcGVjaWZpZXJzLCB2aWEgdGhlIHN5bnRheDogIi90bXAvdGVzdC5pbWc/b2Zmc2V0PTEwMjQiLgorCitFMmZzcHJvZ3MgcHJvZ3JhbXMgd2lsbCBub3cgYWNjZXB0IGJsb2Nrc2l6ZXMgdXAgdG8gNjU1MzY7IGtlcm5lbAorc3VwcG9ydCBvbiB0aGUgeDg2IGRvZXNuJ3QgZXhpc3QgZm9yIG5vdywgYnV0IGl0IGNhbiBiZSB1c2VmdWwgb24KK290aGVyIGFyY2hpdGVjdHVyZXMgd2l0aCBwYWdlIHNpemVzIGdyZWF0ZXIgdGhhbiA0ay4gIFRoZXJlIGFyZSAyLjYKK2tlcm5lbCBwYXRjaGVzIG91dCB0aGVyZSB3aGljaCBlbmFibGUgdGhpcywgYnV0IHRoZXkgYXJlIG9mIHRoaXMKK3dyaXRpbmcgc3RpbGwgZXhwZXJpbWVudGFsLgorCitUaGUgZTJpbWFnZSBjb21tYW5kIG5vdyB0YWtlcyB0aGUgLXMgb3B0aW9uIHdoaWNoIHdpbGwgc2NyYW1ibGUKK2RpcmVjdG9yeSBlbnRyaWVzIGZvciByYXcgaW1hZ2UgZmlsZXMuCisKK0ZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIHRoZSBmaWxlZnJhZyBwcm9ncmFtLgorCitNYWtlIHN1cmUgZTJmc2NrIGRvZXNuJ3QgY3Jhc2ggd2hlbiAvcHJvYy9hY3BpL2FjX2FkYXB0ZXIgaXMgbm90CitwcmVzZW50LgorCitGaXggYnVnIGluIGRlYnVnZnMgd2hlcmUga2lsbF9maWxlIHdvdWxkIGxlYWQgdG8gZXJyb3JzIHdoZW4gZGVsZXRpbmcKK2RldmljZXMgYW5kIHN5bWxpbmtzLiAgKFNvdXJjZWZvcmdlIEJ1Z3MgIzk1NDc0MSBhbmQgIzk1NzI0NCkKKworRml4IGJ1ZyBpbiB0aGUgYmxraWQgbGlicmFyeSB3aGVuIGRldGVjdGluZyB0aGUgb2NmczEgZmlsZXN5c3RlbSAKKworUmVtb3ZlIG9ic29sZXRlIEVWTVMgMS54IGFuZCBhLm91dCBETEwgc3VwcG9ydC4KKworRTJmc2NrIHdpbGwgYXR0ZW1wdCB0byByZWNvdmVyIGZyb20gYSBqb3VybmFsIGNvbnRhaW5pbmcgaWxsZWdhbCBibG9ja3MuCisKK0ZpeGVkIHR3byBwb3RlbnRpYWwgb3JkZXJpbmcgY29uc3RyYWludCBwcm9ibGVtcyBpbiBlMmZzY2sgd2hpY2ggbWlnaHQKK2NhdXNlIHRoZSBmaWxlc3lzdGVtIHRvIGJlIGNvcnJ1cHRlZCBpZiBlMmZzY2sgaXMgaW50ZXJydXB0ZWQgZHVyaW5nIGEKKyhleHRyZW1lbHkgbmFycm93KSByYWNlIHdpbmRvdy4gIFRoYW5rcyB0byBKdW5mZW5nIFlhbmcgZnJvbSB0aGUKK1N0YW5mb3JkIE1ldGFjb21waWxhdGlvbiBncm91cCBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKK0ZpeGVkIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgaXQgd291bGQgbm90IGFjY3VyYXRlbHkgZGV0ZWN0IHdoZXRoZXIgb3IKK25vdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYWRhcHRvciBpZiB0aGUgQUNQSSBkZXZpY2UgcmVwcmVzZW50aW5nCit0aGUgQUMgYWRhcHRlciBkaWRuJ3QgY29ycmVzcG9uZCB0byB0aGUgd2hhdCB3YXMgdXNlZCBvbiBJQk0KK1RoaW5rcGFkcy4KKworQ2hhbmdlIGUyZnNjayB0byBhY2NlcHQgZGlyZWN0b3JpZXMgZ3JlYXRlciB0aGFuIDMyTUIuCisKK0ZpeCBlMmZzY2sgc28gdGhhdCBhIGNoZWNraW50ZXJ2YWwgb2YgemVybyBkaXNhYmxlcyBhIHRpbWUtYmFzZWQgY2hlY2sKK29mIHRoZSBmaWxlc3lzdGVtLgorCitEZWJ1Z2ZzIHdpbGwgY2hlY2sgdGhlIERFQlVHRlNfUEFHRVIgZW52aXJvbWVudCB2YXJpYWJsZSBpbiBwcmVmZXJlbmNlCit0byB0aGUgUEFHRVIgZW52aXJvbm1lbnQgdmFyaWFibGUuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzIzOTU0NykKKworVHVuZTJmcyB3aWxsIG5vdCBtYXJrIHJld3JpdGUgdGhlIHN1cGVyYmxvY2sgaWYgdGhlIGZlYXR1cmUgYml0bWFza3MgCithcmUgbm90IG1vZGlmaWVkLgorCitUaGUgZGVidWdmcyBwcm9ncmFtIHdpbGwgc2V0IHRoZSBmaWxldHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNyZWF0aW5nIGEKK2xpbmsuCisKK0FkZCBkZWJ1Z2ZzIC1kIG9wdGlvbiB0byB1c2UgYSBzZXBhcmF0ZSBzb3VyY2Ugb2YgZGF0YSBibG9ja3Mgd2hlbgorcmVhZGluZyBmcm9tIGFuIGUyaW1hZ2UgZmlsZS4KKworQWRkIGUyaW1hZ2UgLUkgb3B0aW9uIHdoaWNoIGFsbG93cyB0aGUgZTJpbWFnZSBtZXRhZGF0YSB0byBiZQoraW5zdGFsbGVkIGludG8gYSBmaWxlc3lzdGVtLgorCitGaXhlZCBidWcgaW4gdGhlIGJhZGJsb2NrcyBwcm9ncmFtIHdoaWNoIGNhdXNlZCAiZG9uZSIgdG8gYWx3YXlzCithcHBlYXIgaW4gZW5nbGlzaCBldmVuIHdoZW4gYSB0cmFuc2xhdGlvbiB3YXMgYXZhaWxhYmxlLiAgKEFkZHJlc3NlcworRGViaWFuIEJ1ZyAjMjUyODM2KQorCitUaGUgYmxraWQgcHJvZ3JhbSBoYXMgYSBuZXcgb3B0aW9uIC1vIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgZm9ybWF0CitvZiB0aGUgYmxraWQgcHJvZ3JhbTsgdGhpcyBpcyBtYWtlcyBibGtpZCBtb3JlIGNvbnZlbmllbnQgdG8gdXNlIGluCitzaGVsbCBzY3JpcHRzLgorCitGaXggYSBtaW5vciBidWcgaW4gdXVpZCBsaWJyYXJ5LCB3aGljaCB3YXMgbm90IHVzaW5nIHRoZSBmdWxsIDE0IGJpdHMKK29mIGNsb2NrIHNlcXVlbmNlIHdoZW4gZ2VuZXJhdGluZyBVVUlEJ3MuCisKK0ZpeCBhIFk4Ljg4ODhLIHByb2JsZW0gaW4gdGhlIHV1aWQgbGlicmFyeS4KKworTG9nc2F2ZSBub3cgY3JlYXRlcyBhIG5ldyBzZXNzaW9uIGlkIGZvciBpdHNlbGYgdG8gYXZvaWQgZ2V0dGluZwora2lsbGVkIGJ5IGluaXQgd2hhbiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gaW5pdCBsZXZlbHMuCisKK0NoYW5nZSB0aGUgbGljZW5zaW5nIG9mIHRoZSBVVUlEIGxpYnJhcnkgdG8gYmUgdGhlIDMtY2xhdXNlIEJTRC1zdHlsZQorbGljZW5zZTsgdGhpcyBhbGxvd3MgQXBwbGUgdG8gdXNlIHRoZSB1dWlkIGxpYnJhcnkgaW4gRGFyd2luLgorCitBZGQgb2NmcyBhbmQgb2NmczIgcHJvYmUgc3VwcG9ydCBpbnRvIHRoZSBibGtpZCBsaWJyYXJ5LgorCitGaXggYSBtZW1vcnkgYW5kIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIHRoZSBibGtpZCBsaWJyYXJ5LgorCitUaGUgYmxraWQgbGlicmFyeSB3aWxsIHJldmFsaWRhdGUgdGhlIGRldmljZSBpZiB0aGUgc3lzdGVtIHRpbWUgaXMKK2VhcmxpZXIgdGhhbiBsYXN0IHZlcmlmaWNhdGlvbiB0aW1lIG9mIHRoZSBkZXZpY2UsIHNpbmNlIHRoYXQKK2luZGljYXRlcyB0aGF0IHRoZSBzeXN0ZW0gdGltZSBpcyBwcm9iYWJseSBub3R0cnVzdHdvcnRoeS4KKworVGhlIGJsa2lkIGxpYnJhcnkgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgYmxraWQudGFiCitmaWxlIGJ5IHRoZSBCTEtJRF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBpdCBpcyBhdmFpbGFibGUuCisKK0NoYW5nZSB0aGUgZ2V0c2l6ZSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBCTEtHRVRTSVpFNjQgaW9jdGwgb24gTGludXggMi42LgorCitBZGQgdmFyaW91cyBwb3J0YWJpbGl0eSBmaXhlcyBmb3IgbGFtZSBuZXcgdmVyc2lvbnMgb2YgZ2xpYmMsIERhcndpbgorYW5kIEdOVS9LRnJlZUJTRCwgYXMgd2VsbCBhcyByZW1vdmluZyBYU0k6aXNtJ3MuICAoQWRkcmVzc2VzIERlYmlhbgorQnVncyAjMjM5OTM0LCAjMjY0NjMwLCAjMjY5MDQ0LCAjMjU1NTg5LCAjMjg5MTMzKQorCitBZGQgc3VwcG9ydCBmb3IgV2luZG93cyA5eC9OVCB1bmRlciBDeWd3aW4uCisKK1VwZGF0ZWQgYW5kIGNsYXJpZmllZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1Z3MgIzIzNjM4MywKKwkjMjQxOTQwLCAjMjM4NzQxLCAjMjQyOTk1LCAjMjU2NjY5LCAjMjY4MTQ4LCAjMjU2NzYwLCAjMjczNjc5KQorCitVcGRhdGVkIGFuZCBmaXhlZCB0cmFuc2xhdGlvbnMuICAgKEFkZHJlc3NlcyBEZWJpYW4gYnVncyAjMjQ0MTA1LCAjMjYyODM2KQorCitVcGRhdGUgdGhlIHJwbSBzcGVjIGZpbGVzIHNvIHRoYXQgaXQgd29ya3MgYmV0dGVyIHdpdGggRmVkb3JhIGNvcmUgMgorYW5kIFJIOS4KKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAoc2VlIGRlYmlhbi9jaGFuZ2Vsb2cpLiAgSW4KK3BhcnRpY3VsYXIsIGZpeGVkIHRoZSBEZWJpYW4gaW5pdHJkIHNjcmlwdHMuICAoIzI0MTE4MywgIzI0ODA1MCwKKyMyNTM1OTUsICMyNDc3NzUpCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4ZWQgdmFyaW91cyBnY2MgLVdhbGwgd2FybmluZ3MuCisKK1RoZSB1dWlkIGxpYnJhcnkgbm93IGhhcyBuZXcgZnVuY3Rpb25zIHV1aWRfdW5wYXJzZV91cHBlcigpIGFuZAordXVpZF91bnBhcnNlX2xvd2VyKCkgd2hpY2ggZm9yY2VzIHRoZSBjYXNlIG9mIHRoZSBoZXggZGlnaXRzIHRvIGJlCit1cHBlciBjYXNlLCBvciBsb3dlciBjYXNlLgorCitUaGUgYnVpbGQgcHJvY2VzcyBoYXMgYmVlbiBzcGVlZGVkIHVwIGJ5IGVuaGFuY2luZyB0aGUgc3Vic3QgcHJvZ3JhbQordG8gdXBkYXRlIHRoZSBtb2R0aW1lIG9uIHRoZSBnZW5lcmF0ZWQgZmlsZXMgZXZlbiB3aGVuIHRoZSBnZW5lcmF0ZWQKK2ZpbGUgaGFzbid0IGNoYW5nZWQuCisKK1RoZSB1dWlkIGxpYnJhcnkgbm93IHVzZXMgQzk5IHN0ZGludC5oIHR5cGVzIGluc3RlYWQgb2YgY3VzdG9tIHR5cGVzLgorCitVcGRhdGVkIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiB3aXRoIG5ld2VyIHZlcnNpb25zIGZyb20gdGhlIEZTRi4KKworUmVtb3ZlZCBvdXQgb2YgZGF0ZSAuY3ZzaWdub3JlIGZpbGVzIGZyb20gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBleHQyZnNfdW5saW5rKCkgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgYm90aCB0aGUgbmFtZSBhbmQKK2lub2RlIG51bWJlciBhcmUgdW5zcGVjaWZpZWQsIHRvIGF2b2lkIGRvaW5nIHNvbWV0aGluZyBzdXJwcmlzaW5nCisoc3VjaCBhcyB1bmNvbmRpdGlvbmFsbHkgZGVsZXRpbmcgdGhlIGZpcnN0IGRpcmVjdG9yeSBlbnRyeSkuCitEaXJlY3RvcnkgZW50cmllcyBhcmUgbm93IGRlbGV0ZWQgYnkgY29hbGVzY2luZyB0aGVtIHdpdGggdGhlIHByZXZpb3VzCitkaXJlY3RvcnkgZW50cnkgaWYgcG9zc2libGUsIHRvIGF2b2lkIGRpcmVjdG9yeSBmcmFnbWVudGF0aW9uLiAgVGhpcworaXMgbm90IGFuIGlzc3VlIHdpdGggdGhlIGUyZnNwcm9ncyBzdWl0ZSwgYnV0IG1heSBiZSBhIHByb2JsZW0gZm9yCitzb21lIG9mIHRoZSB1c2VycyBvZiBsaWJleHQyZnMsIHN1Y2ggYXMgZTJ0b29scy4KKworQWRkIHN1cHBvcnQgZm9yIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgZm9ybSAiMS4zNi1yYzEiLgorCitGaXggYnVpbGQgb2YgbWtlMmZzLnN0YXRpYy4KKworQWRkIGJhc2ljIGV4dDJmcyBsaWJyYXJ5IHN1cHBvcnQgZm9yIGxhcmdlIChFQSBpbiBpbm9kZSkgaW5vZGVzLgorCitUaGUgdGVzdF9pbyBtZWNoYW5pc20gY2FuIG5vdyBhYm9ydCBhZnRlciBuIHJlYWRzIG9yIHdyaXRlcyB0byBhCitwYXJ0aWN1bGFyIGJsb2NrLiAgVGhlIGJsb2NrIGlzIHNwZWNpZmllZCBieSBURVNUX0lPX0JMT0NLIGVudmlyb25tZW50Cit2YXJpYWJsZSwgYW5kIHRoZSByZWFkL3dyaXRlIGNvdW50IGJ5IHRoZSBURVNUX0lPX1JFQURfQUJPUlQgYW5kCitURVNUX0lPX1dSSVRFX0FCT1JUIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZSBibG9jayBkYXRhIGlzIG5vdyBvbmx5CitkdW1wZWQgaWYgdGhlIDB4MTAgYml0IGlzIHNldCBpbiBURVNUX0lPX0ZMQUdTLgorCitVVUlEX0RFRklORSgpIGluIHRoZSB1dWlkIGxpYnJhcnkgbm93IGNyZWF0ZXMgYSBzdGF0aWMgdmFyaWFibGUsIHdpdGgKK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKSBpZiB3ZSBhcmUgdXNpbmcgR0NDLCBzbyB0aGF0IFVVSURfREVGSU5FIGNhbgorYmUgdXNlZCBpbiBoZWFkZXIgZmlsZXMuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgaW5zdGFsbC1zdHJpcCBhbmQgaW5zdGFsbC1zaGxpYnMtc3RyaXAgdGFyZ2V0cywgYXMKK3N1Z2dlc3RlZCBieSB0aGUgR05VIGNvZGluZyBndWllbGluZXMuICAibWFrZSBpbnN0YWxsIiBubyBsb25nZXIKK3N0cmlwcyB0aGUgYmluYXJpZXMgd2hpY2ggYXJlIGluc3RhbGxlZC4KKworUmVtb3ZlIHN1cHBvcnQgZm9yIHRoZSAtLWVuYWJsZS1vbGQtYml0b3BzIGNvbmZpZ3VyZSBvcHRpb24gd2hpY2ggd2FzCitvbmx5IGZvciB2ZXJ5IG9sZCBzcGFyYyBzeXN0ZW1zLgorCitSZW1vdmUgc3VwcG9ydCBmb3IgLS1lbmFibGUtY2xlYXItaHRyZWU7IHRoaXMgd2FzIG9ubHkgbmVlZGVkIGR1cmluZwordGhlIGVhcmx5IGRldmVsb3BtZW50IG9mIHRoZSBodHJlZSBwYXRjaC4KKworVXNlIExpbnV4LWtlcm5lbC1zdHlsZSBtYWtlZmlsZSBvdXRwdXQgc28gaXQgaXMgZWFzaWVyIHRvIHNlZSBjb21waWxlcgord2FybmluZ3MuCisKK1VwZGF0ZSBnZXR0ZXh0IGZpbGVzIHRvIHZlcnNpb24gMC4xNC4xLgorCitVcGRhdGUgdG8gdXNlIGF1dG9jb25mIDIuNXguCisKK0ltcHJvdmVkIHN1cHBvcnQgZm9yIGNvbXBpbGluZyBlMmZzcHJvZ3MgdW5kZXIgZGlldGxpYmMuCisKK01ha2UgZTJmc3Byb2dzIHBvcnRhYmxlIHRvIFNvbGFyaXMgYW5kIEZyZWVCU0Qgc3lzdGVtcy4KKworQWRkIGJsa2lkX3ZlcmlmeSgpLCBibGtpZF9nZXRfbGlicmFyeV92ZXJzaW9uKCksIGFuZAorYmxraWRfcGFyc2VfdmVyc2lvbl9zdHJpbmcoKSBmdW5jdGlvbnMgdG8gdGhlIGJsa2lkIGxpYnJhcnkuCisKK0FkZCBwa2ctY29uZmlnIGZpbGVzIGZvciBlMmZzcHJvZ3MncyBsaWJyYXJpZXMuCisKK0ZpeCAibWFrZSB1bmluc3RhbGwiIHRvIHNvIHRoYXQgaXQgcmVtb3ZlcyBldmVyeXRoaW5nIHRoYXQgaXMgaW5zdGFsbGVkLgorCitBZGQgYSBjb25maWd1cmUgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB3aGljaCBlbmFibGVzIHRoZQorbWFrZWZpbGUgcnVsZXMgdG8gcmVidWlsZCB0aGUgY29uZmlndXJlIHNjcmlwdCBmcm9tIGNvbmZpZ3VyZS5pbiwgYW5kCit0byByZXVidWlsZCB0aGUgLmdtbyBmaWxlcyBpbiBwbyBkaXJlY3RvcnkuCisKK0Ryb3AgdGhlIHNwYXJjIGFzc2VtYmx5IGJpdHdpc2Ugb3BlcmF0aW9uczsgaXQncyBsZXNzIGVmZmljaWVudAordGhhbiB0aGUgR0NDIDMuNCBjb21waWxlIGNvZGUgYW5kIHRyaWdnZXJzIGNvbXBpbGVyIHdhcm5pbmdzIG9uCitzcGFyYzY0LiAgVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZSBmb3IgaGlzIGFuYWx5c2lzIGFuZCBzdWdnZXN0aW9ucy4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMjMyMzI2KQorCisKK0UyZnNwcm9ncyAxLjM1IChGZWJydWFyeSAyOCwgMjAwNCkgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0UyZnNjayBoYXMgYSBuZXcgLWsgb3B0aW9uLCB3aGljaCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAtYyBvcHRpb25zLAorcHJlc2VydmVzIHRoZSBleGlzdGluZyBiYWRibG9ja3MgbGlzdC4KKworQ2xlYW5lZCB1cCBlMmZzY2sncyBwcmVlbi1tb2RlIG1lc3NhZ2VzIGR1cmluZyB0aGUgcGFzc2VzIDFiLCAxYywgYW5kIDFkLgorCitFMmZzcHJvZ3Mgd2lsbCBub3cgZGVhbCBjb3JyZWN0bHkgd2l0aCBzeW1saW5rcyB0aGF0IGNvbnRhaW4KK2V4dGVuZGVkIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiwgd2hpY2ggY2FuIGJlIGNyZWF0ZWQgdXNpbmcgU0UgTGludXguCisoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzIzMjMyOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1JlbW92ZSBhIGRvdWJsZSBsb25nanVtcCBpbnRvIGFuIGludmFsaWQgc3RhY2sgZnJhbWUgYnVnIGluIGUyZnNjay4KKyhUaGlzIHdhcyBkdXJpbmcgYW4gYWJvcnQgc2VxdWVuY2UsIHdoaWNoIG5vcm1hbGx5IHdvcmtlZCBvbiBMaW51eCBhbmQKK2NhdXNlZCBhIGNvcmUgZHVtcCBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4pCisKK0ZpeCBOTFMgYnVnIGluIGUyZnNjaywgYnkgYXZvaWRpbmcgdHJ5aW5nIHRvIGV4cGFuZCBhbiBlbXB0eSBzdHJpbmcKKyh0aGUgTkxTIGxpYnJhcnkgd2lsbCByZXBsYWNlICIiIHdpdGggdGhlIC5wbyBoZWFkZXIgaW5mb3JtYXRpb24pLgorIAorRml4IGEgYnVnIGluIG1rZTJmcyB3aGljaCBjYXVzZWQgLVQgbGFyZ2VmaWxlIG9yIC1UIGxhcmdlZmlsZTQgdG8gY29yZQorZHVtcCBkdWUgdG8gYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMyMDcwODIpCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gaW5jb3JyZWN0bHkgZml4IGEgZmlsZXN5c3RlbQord2hlbiByZWNvbm5lY3RpbmcgYSBkaXJlY3RvcnkgcmVxdWlyZXMgY3JlYXRpbmcgYSBsb3N0K2ZvdW5kCitkaXJlY3RvcnkuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzIxOTY0MCkuCisKK0ZpeGVkIGEgYnVnIHdoZXJlIGUyZnNjayB3b3VsZCBib21iIG91dCBpZiBhIGpvdXJuYWwgbmVlZGVkIHRvIGJlCityZXBsYXllZCB3aGVuIHVzaW5nIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrLgorIAorRTJmc2NrIHdpbGwgZ2l2ZSBhbiBleHRyYSBncmFjZSBwZXJpb2QgYmVmb3JlIGFjdHVhbGx5IGZvcmNpbmcgYSBjaGVjaworaWYgdGhlIGxhcHRvcCBpcyBydW5uaW5nIG9uIGJhdHRlcnkuICBUaGUgbmV4dCB0aW1lIGZzY2sgcnVucyB3aGlsZQordGhlIHN5c3RlbSBpcyBvbiB0aGUgQUMgbWFpbnMsIG9yIGFmdGVyIHRoZSBncmFjZSBwZXJpb2QgaXMgZXhjZWVkZWQsCit0aGUgZmlsZXN5c3RlbSB3aWxsIGJlIGNoZWNrZWQuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzIwNTE3NykKKworRTJmc2NrIHdpbGwgaW5mb3JtIHRoZSB1c2VyIHdoZW4gdGhlcmUgYXJlIDUgb3IgZmV3ZXIgbW91bnRzIGJlZm9yZSBhCitmaWxlc3lzdGVtIGNoZWNrIHdpbGwgYmUgZm9yY2VkLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxNTcxOTQpCisKK0ZpeCBlMmZzY2sncyBoYW5kbGluZyBvZiBjb3JydXB0ZWQgaW5kaXJlY3QgYmxvY2tzIGluIHRoZSBiYWQgYmxvY2suCitXZSBub3cgY29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhbiBvdmVybGFwIGJldHdlZW4gYQorYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBvciBhIHN1cGVyYmxvY2sgYW5kIGEgYmFkIGJsb2NrIGluZGlyZWN0IGJsb2NrLgorSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGluZGlyZWN0IGJsb2NrIGlzIGNvcnJ1cHRlZCwgd2Ugbm93IHN1Z2dlc3QKKyJlMmZzY2sgLWMiLgorCitGaXggYnl0ZSBzd2FwIGJ1Z3MgaW4gZTJmc2NrIHRoYXQgY2F1c2VkIHRoZSBqb3VybmFsIGJhY2t1cCBsb2NhdGlvbiAKK2luIHRoZSBzdXBlcmJsb2NrIGFuZCBzeW1saW5rcyBjcmVhdGVkIGJ5IFNFIExpbnV4IHRvIGJlIGNsZWFyZWQKK2J5IGUyZnNjayBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMyMjg3MjMpCisKK0UyZnNjayAtYyBub3cgcmVwbGFjZXMgdGhlIGN1cnJlbnQgbGlzdCBvZiBiYWQgYmxvY2tzIHdpdGggdGhlIG9uZXMKK2ZvdW5kIGJ5IGJhZGJsb2Nrcy4KKworRml4IGJ1Z3MgaW4gZTJmc2NrIGFuZCB0dW5lMmZzIHdoaWNoIGNvdWxkIGNhdXNlIGEgY29yZSBkdW1wIGlmIGEKK25vbi1leGlzdGVudCBMQUJFTCBvciBVVUlEIHNwZWNpZmllciBpcyB0byBlMmZzY2sgb3IgdHVuZTJmcy4KKworRml4IGEgcG90ZW50aWFsIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY2F1c2UgaXQgdG8gY29yZSBkdW1wIHdoZW4KK3RyeWluZyB0byBwcmludCB0aGUgbG9jYXRpb24gb2YgdGhlIGJhY2t1cCBzdXBlcmJsb2NrLgorCitQcm90ZWN0IGFnYWluc3QgYSBwb3RlbnRpYWwgY29yZSBkdW1wIGluIGUyZnNjayB3aGVuIHByaW50aW5nIGEKK21lc3NhZ2UgYWJvdXQgYmFja3VwIHN1cGVyYmxvY2tzLgorCitBZGQgc3VwcG9ydCBmb3IgYmFja2luZyB1cCB0aGUgam91cm5hbCBpbm9kZSBsb2NhdGlvbiBpbiB0aGUKK3N1cGVyYmxvY2suICBFMmZzY2sgd2lsbCBhdXRvbWF0aWNhbGx5IHNhdmUgdGhlIGpvdXJuYWwgaW5mb3JtYXRpb24gaW4KK3RoZSBzdXBlcmJsb2NrIGlmIGl0IGlzIG5vdCB0aGVyZSBhbHJlYWR5LCBhbmQgd2lsbCB1c2UgaXQgaWYgdGhlCitqb3VybmFsIGlub2RlIGFwcGVhcnMgdG8gYmUgY29ycnVwdGVkLiAgZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlKCkKK3dpbGwgYWxzbyBzYXZlIHRoZSBiYWNrdXAgaW5mb3JtYXRpb24sIHNvIHRoYXQgbmV3IGZpbGVzeXN0ZW1zIGNyZWF0ZWQKK2J5IG1rZTJmcyBhbmQgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIGpvdXJuYWxzIGFkZGVkIHZpYSB0dW5lMmZzIHdpbGwKK2Fsc28gaGF2ZSBqb3VybmFsIGxvY2F0aW9uIHdyaXR0ZW4gdG8gdGhlIHN1cGVyYmxvY2sgYXMgd2VsbC4KK0RlYnVnZnMncyBsb2dkdW1wIGNvbW1hbmQgaGFzIGJlZW4gZW5oYW5jZWQgc28gdGhhdCBpdCBjYW4gdXNlIHRoZQoram91cm5hbCBpbmZvcm1hdGlvbiBpbiB0aGUgc3VwZXJibG9jay4KKworRTJmc2NrIHdpbGwgbm93IHVwZGF0ZSBhbGwgc3VwZXJibG9ja3Mgd2hlbiBtb3ZpbmcgdGhlIGpvdXJuYWwgaW5vZGUuCisgIAorU2hyaW5rIHRoZSBzaXplIG9mIHRoZSBlMmZzY2sgZXhlY3V0YWJsZSBieSBtb3Zpbmcgc29tZSBpbml0aWFsaXplZAordmFyaWFibGVzIHRvIHRoZSBCU1Mgc2VnbWVudC4KKworRTJmc2NrIHdpbGwgYXZvaWQgcHJpbnRpbmcgdGhlIF5BIGFuZCBeQiBjaGFyYWN0ZXJzIHdoaWNoIGJyYWNrZXQgdGhlCitwcm9ncmVzcyBiYXIgd2hlbiBzdGRvdXQgYW5kIHN0ZGluIGFyZSBhIHR0eSBkZXZpY2UgaW5zdGVhZCBvZiBhIHBpcGUKK3RvIGFub3RoZXIgcHJvZ3JhbS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMjA0MTM3KQorCitEZWJ1Z2ZzJ3MgbWtkaXIgY29tbWFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhwYW5kIHRoZSBkaXJlY3RvcnkgaWYKK25lY2Vzc2FyeS4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZzogIzIxNzg5MikKKyAKK0ZpeGVkIGEgYnVnIGluIGRlYnVnZnMgc28gdGhhdCBjb3B5aW5nIGEgZmlsZSBmcm9tIC9kZXYvbnVsbCB1c2VzIHRoZQorY29ycmVjdCBtb2RlIGJpdHMuICAoQWRkcmVzc2VzIERlYmlhbiBCdWc6ICMyMTc0NTYpCisgCitJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIERFQlVGU19QQUdFUiBhbmQgUEFHRVIgYXJlIG5vdCBzZXQsCitkZWJ1Z2ZzIG5vdyBzZWFyY2hlcyBmb3IgdGhlIGFwcHJvcHJpYXRlIHBhZ2VyIHRvIHVzZSwgYmVnaW5uaW5nIHdpdGgKKy91c3IvYmluL3BhZ2VyLCBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gJ21vcmUnIGFuZCAnbGVzcycuCisoQWRkcmVzc2VzIERlYmlhbiBidWcgIzIyMTk3NykKKworRGVidWdmcyB3aWxsIG5vdyBzdXBwb3J0IDIuNiBkZXZpY2UgbnVtYmVycyB3aGVyZSB0aGUgbWFqb3Igb3IgbWlub3IKK251bWJlciBtYXkgYmUgbGFyZ2VyIHRoYW4gMjU1LiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBidWcgIzg2NTI4OSkKKyAKK0ZpeCBkZWJ1Z2dpbmcgcHJpbnRmIGluIHJlc2l6ZTJmcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMjcxNjA1KQorCitDaGF0dHIgbm93IHN0b3BzIHByb2Nlc3Npbmcgb3B0aW9ucyB3aGVuIGl0IHNlZXMgJy0tJy4gIChBZGRyZXNzZXMKK0RlYmlhbiBidWcgIzIyNTE4OCkKKworRml4IHJlZ3Jlc3Npb24gdGVzdHMgc28gdGhleSB3b3JrIGNvcnJlY3RseSB3aGVuIGUyZnNwcm9ncyBpcyBjb21waWxlZAord2l0aCBjb25maWd1cmUgLS1kaXNhYmxlLWh0cmVlLgorCitGaXggYnVnIGluIHV1aWQgbGlicmFyeSB3aGVuIHRoZXJlIGlzIG5vIG5ldHdvcmsgY2FyZCBhbmQgdGhlIGxpYnJhcnkKK2lzIGdlbmVyYXRpbmcgYSB0aW1lLWJhc2VkIHV1aWQuICBUaGUgcmFuZG9tIE1BQyBhZGRyZXNzIHdhcyBub3QKK2NvcnJlY3RseSBnZW5lcmF0ZWQgdG8gYmUgYSBtdWx0aWNhc3QgYWRkcmVzcy4KKyAKK0FkZCBjb21waWxlX2V0IGV4dGVuc2lvbnMgZnJvbSBIZWltZGFsbCB0aGF0IHdlcmUgbWlzc2VkIHRoZSBmaXJzdCB0aW1lCithcm91bmQuCisKK0ZpeCBidWcgaW4gYmFkYmxvY2tzIHdoZW4gdXNpbmcgT19ESVJFQ1Q7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3dlJ3JlIHJlYWRpbmcgZnJvbSBhbiBvZmZzZXQgd2hpY2ggaXMgcGFnZSBhbGlnbmVkLiAgRm9yIHJlYWQtb25seSBhbmQKK3JlYWQtd3JpdGUgdGVzdHMsIHdlIHRyeSB0byByZWNvdmVyIGFmdGVyIGFuIGVycm9yIHNvIHRoYXQgd2UgY2FuCitjb250aW51ZSByZWFkaW5nIG9uIHBhZ2UtYWxpZ25lZCBib3VuZGFyaWVzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnCisjMjAzNzEzKQorICAKK0JhZGJsb2NrcyBub3cgY2hlY2tzIDY0IGJsb2NrcyBhdCBhIHRpbWUgaW5zdGVhZCBvZiAxNi4gIChBZGRyZXNzZXMKK0RlYmlhbiBidWcgIzIzMjI0MCkKKyAKK1VwZGF0ZWQgYW5kIGNsYXJpZmllZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZworIzIwNjg0NSwgIzIyMjYwNiwgIzIxNDkyMCwgIzIzMjQwNikKKworVXBkYXRlZCBhbmQgZml4ZWQgdHJhbnNsYXRpb25zLiAgIChBZGRyZXNzZXMgRGViaWFuIGJ1Z3MgIzIwMDA4NiwgIzIxNDYzMykKKworRml4ZWQgdmFyaW91cyBEZWJpYW4gcGFja2FnaW5nIGlzc3VlcyAoc2VlIGRlYmlhbi9jaGFuZ2Vsb2cpLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCBhIGJ1aWxkIHByb2JsZW0gc28gdGhhdCBlMmZzcHJvZ3Mgd291bGQgY29tcGlsZSB3aXRoIHRoZQorLS1lbmFibGUtcHJvZmlsZSBvcHRpb24gdG8gY29uZmlndXJlIHNlbGVjdGVkLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZQorYnVnICM4MTE0MDgpCisgCitGaXhlZCBDKysgcHJvYmxlbXMgd2l0aCB0aGUgZXh0MmZzLmggaGVhZGVyLiAgKEFkZHJlc3NlcyBSZWQgSGF0CitCdWd6aWxsYSBCdWcgIzExMjQ0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NlbnRyYWxpemUgY29kZSB3aGljaCBjYWxjdWxhdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3VwZXJibG9jaworYW5kIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIHNvIHRoYXQgaXQgaXMgaW4gYSBzaW5nbGUgbGlicmFyeSByb3V0aW5lLgorCitBZGRlZCB0d28gbmV3IGZ1bmN0aW9ucywgZXh0MmZzX2ZpbGVfb3BlbjIoKSBhbmQKK2V4dDJmc19pbm9kZV9pb19pbnRlcm4yKCkgd2hpY2ggdGFrZSBhIHBvaW50ZXIgdG8gYW4gaW5vZGUgc3RydWN0dXJlLgorCitGaXggY29tcGlsZV9ldCB0byBvdXRwdXQgdGhlIGNvcnJlY3QgcHJvdG90eXBlIGZvcgoraW5pdGlhbGl6ZV94eHhfZXJyX3RhYmxlX3IoKSBpbiB0aGUgaGVhZGVyIGZpbGUuICAoQWRkcmVzc2VzIERlYmlhbgorYnVnICMyMDQzMzIpCisKK0luIHRoZSBsaWIvZXQgbWFrZWZpbGUsIG1ha2Ugc3VyZSBjb21fZXJyLmluZm8gaXMgZGVsZXRlZCBvbiAibWFrZSBjbGVhbiIuCisgIAorRml4IDY0LWJpdCB3YXJuaW5ncyBpbiBlMmZzcHJvZ3MgcGFzczFiIGJ5IHVzaW5nIGludHR5cGVzLmggaWYKK3ByZXNlbnQuICBUaGlzIGlzIGZvciB3aGVuIHdlIHRyeSBzdHVmZmluZyBhbiBpbnQgaW50byB2b2lkICogcG9pbnRlci4KKworRml4IHR5cGUtcHVubmluZyB3aGljaCBjYW4gY2F1c2UgZ2NjIDMueCB0byBtaXNjb21waWxlIGNvZGUgYnkgZ2V0dGluZworY29uZnVzZWQgYWJvdXQgcG9pbnRlciBhbGlhc2luZy4gIGV4dDJmc19nZXRtZW0oKSwgZXh0MmZzX2ZyZWVfbWVtKCksCithbmQgZXh0MmZzX3Jlc2l6ZV9tZW0oKSBhbGwgbm93IHRha2UgYSAndm9pZCAqJyBpbnN0ZWFkIG9mIGEgJ3ZvaWQKKyoqJy4gIFRoZSBFVk1TIGNvZGUgdXNlcyBhbiB1Z2x5IHVuaW9uIGFwcHJvYWNoIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8KK21vZGlmeSB0aGUgRVZNUyBpbnRlcmZhY2VzLiAKKworTWFrZSBzdXJlIGFsbCBNYWtlZmlsZXMgdXNlICQoTUFLRSkgcmF0aGVyIHRoYW4gaGFyZGNvZGVkICJtYWtlIiwgdG8KK2FpZCBidWlsZCBwcm9jZXNzIG9uIHN5c3RlbXMgY2FuIHVzZSBpbnZva2UgR05VIG1ha2UgYXMgImdtYWtlIi4KKworQWRkZWQgcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBta2UyZnMuCisKK0ZpeGVkIGdjYyAtV2FsbCBuaXRwaWNrcy4KKworRml4ZWQgdmFyaW91cyBjb21waWxlciB3YXJuaW5ncy4KKworQWRkIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBGcmVlQlNEIGFuZCBmb3IgdXNpbmcgZnNjdGwgdW5kZXIgRGFyd2luIHRvCitzdXBwb3J0IGV4dDIgaW9jdGwncy4KKworCitFMmZzcHJvZ3MgMS4zNCAoSnVseSAyNSwgMjAwMykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiBFMmZzcHJvZ3MgMS4zMCB3aGljaCBjYXVzZWQgZnNjayB0byBzcGluIGluCithIHRpZ2h0IGxvb3Agd2hpbGUgd2FpdGluZyBmb3IgYSBjaGlsZCBmc2NrIHRvIGV4aXQgaW4gc29tZSBjYXNlcy4KK1RoaXMgYnVybnMgQ1BVIHRpbWVzIHdoaWNoIHNsb3dzIGRvd24gdGhlIGxvdy1sZXZlbCBmaWxlc3lzdGVtIGNoZWNrLgorCitBZGRlZCBjb2RlIHRvIG1rZTJmcyB0byBhc3N1cmUgdGhhdCB0aGUgZGVmYXVsdCBibG9jayBzaXplIGZvciBhCitmaWxlc3lzdGVtIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgc2VjdG9yIHNpemUgb2YgdGhlIGRldmljZSwgaWYgaXQKK2NhbiBiZSBkZXRlcm1pbmVkLgorCitDaGFuZ2VkIG1rZTJmcyBhbmQgcmVzaXplMmZzIHRvIHJvdW5kIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBmaWxlc3lzdGVtCit0byBiZSBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBWTSBwYWdlc2l6ZSBpbiBvcmRlciB0byBhdm9pZCBhIExpbnV4CitrZXJuZWwgYnVnIGludHJvZHVjZWQgd2hlbiB0aGUgc3RvcmFnZSBvZiB0aGUgYnVmZmVyIGNhY2hlIHdhcyBtb3ZlZAoraW50byB0aGUgcGFnZSBjYWNoZS4KKworTWtlMmZzIHdpbGwgd2FybiB0aGUgdXNlciB3aGVuIGNyZWF0aW5nIGEgZmlsZXN5c3RlbSB3aXRoIGpvdXJuYWxpbmcKK2FuZCBhIGJsb2Nrc2l6ZSBncmVhdGVyIHRoYW4gNDA5Ni4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTkzNzczKQorCitGaXhlZCBhIGJ1ZyBpbiByZXNpemUyZnMgd2hpY2ggY2F1c2VkIGl0IHRvIGZhaWwgb24gZmlsZXN5c3RlbXMgd2l0aCBhCitub24tZW1wdHkgYmFkIGJsb2NrIGxpc3QuICBSZXNpemUyZnMgbm93IGRpc2NhcmRzIGFueSBibG9ja3Mgb24gdGhlCitiYWRibG9jayBsaXN0IHdoaWNoIGFyZSBubyBsb25nZXIgcGFydCBvZiB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgcmVzdWx0CitvZiBhIGZpbGVzeXN0ZW0gc2hyaW5rLiAgKE5vdGU6IHRoaXMgbWVhbnMgdGhhdCBzaHJpbmtpbmcgYW5kIHRoZW4KK2VubGFyZ2luZyBhIGZpbGVzeXN0ZW0gaXMgbm8gbG9uZ2VyIGEgcmV2ZXJzaWJsZSBvcGVyYXRpb247CitpbmZvcm1hdGlvbiBhYm91dCBiYWQgYmxvY2tzIGluIHRoZSBwYXJ0IG9mIHRoZSBmaWxlc3lzdGVtIHdoaWNoIGlzIHRvCitiZSBjaG9wcGVkIG9mZiB3aWxsIGJlIGxvc3QuKQorCitDaGFuZ2VkIHJlc2l6ZTJmcyBzbyB0aGUgdXNlciBjYW4gdXNlIHByZWZpeGVzIHRvIHNwZWNpZnkgdGhlIHVuaXRzIG9mCit0aGUgbmV3IGZpbGVzeXN0ZW0gc2l6ZSAoc2VjdG9ycywga2lsb2J5dGVzLCBtZWdhYnl0ZXMsIG9yIGdpZ2FieXRlcyksCithbmQgdG8gbWFrZSB0aGUgZXJyb3IgYW5kIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgZXhwbGljaXRseSBkaXNwbGF5Cit0aGUgYmxvY2tzaXplIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0sIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyhBZGRyZXNzZXMgRGViaWFuIGJ1ZzogIzE4OTgxNCkKKworQWRkZWQgYSBuZXcgZGVidWdmcyBjb21tYW5kLCBkdW1wX3VudXNlZCwgd2hpY2ggZHVtcHMgdGhlIGNvbnRlbnRzIG9mCithbGwgdW51c2VkIGJsb2NrcyB0byBzdGRvdXQuICAoVXNlZnVsIGFzIGFuIGVtZXJnZW5jeSB0cnktdG8tZmluZAorZGVsZXRlZCBkYXRhIGNvbW1hbmQuKQorCitBZGRlZCBhIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsIGltYXAsIHdoaWNoIHByaW50cyB0aGUgbG9jYXRpb24gb2YgYQorc3BlY2lmaWVkIGlub2RlIGluIHRoZSBpbm9kZSB0YWJsZS4KKworRml4ZWQgYSBidWcgaW4gdGhlIGJhZGJsb2NrcyBwcm9ncmFtIHdoaWNoIGNhdXNlZCBpdCB0byB1c2Ugb25lIGJpdCBvZgorcmFuZG9tbmVzcyBpbiBpdHMgbm9uLWRlc3RydWN0aXZlIHJlYWQvd3JpdGUgdGVzdCwgaW5zdGVhZCBvZiB1c2luZyBhCitmdWxsIDggYml0cyBvZiByYW5kb21uZXNzLgorCitBZGRlZCBhIG5ldyBvcHRpb24gKC10KSB0byBiYWRibG9ja3MsIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBjb250cm9sCit0aGUgdGVzdCBwYXR0ZXJuKHMpIHVzZWQgd2hlbiBjaGVja2luZyBhIGRpc2suCisKK1RoZSBibGtpZCBwcm9iZSBmdW5jdGlvbiBub3cgbW9yZSBjb3JyZWN0bHkgZGV0ZWN0cyBVREYgZmlsZXN5c3RlbXMuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSBibGtpZCBsaWJyYXJ5IHdoaWNoIGNhdXNlZCBpdCB0byBub3QgdXBkYXRlIGl0cworY2FjaGUgaWYgYSBmaWxlc3lzdGVtIGNoYW5nZXMgZnJvbSBoYXZpbmcgYSBsYWJlbCB0byBub3QgaGF2aW5nIGEKK2xhYmVsLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgYmxraWQgbGlicmFyeSB3aWhjaCBjb3VsZCBhdm9pZCBhbiBpbmZpbml0ZSBsb29wCitpbiBibGtpZF9maW5kX2Rldl93aXRoX3RhZygpIGlmIC9wcm9jIGlzIG5vdCBtb3VudGVkIGFuZCB0aGVyZSB0aGUKKy9ldGMvYmxraWQudGFiIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLgorCitGaXhlZCB0aGUgYmFkYmxvY2tzIHByb2dyYW0gc28gdGhhdCB0aGUgZGVzdHJ1Y3RpdmUgcmVhZC93cml0ZSB0ZXN0Citob25vcnMgdGhlIC1jIG9wdGlvbiwgYW5kIHRvIHVzZSBPX0RJUkVDVCB3aGVuIHBvc3NpYmxlIHRvIGF2b2lkCit0aHJhc2hpbmcgdGhlIHN5c3RlbSBibG9jayBidWZmZXIgY2FjaGUuCisKK0ZpeGVkIHZhcmlvdXMgTkxTIGlzc3Vlcy4KKyAtIEFkZGVkIEN6ZWNoIGFuZCBTd2VkaXNoIHRyYW5zbGF0aW9ucworIC0gUmVtb3ZlZCB0ZXN0aW5nIE5ZQyB0cmFuc2xhdGlvbgorIC0gRml4ZWQgTkxTIHN1cHBvcnQgZm9yIG1lc3NhZ2UgYWJicmV2YXRpb25zIGluIGUyZnNjaworIC0gUmVtb3ZlIGRlLXV0Zi5wbywgc2luY2Ugd2Ugc2hvdWxkbid0IGhhdmUgdHdvIHZlcnNpb25zIHVzaW5nIGRpZmZlcmVudAorCWNoYXJzZXQgZW5jb2RpbmdzLgorIC0gVXNlZCBuZ2V0dGV4dCgpIChhYmJyZWl2YXRlZCB3aXRoIHRoZSBtYWNybyBQXyhzdHIxLCBzdHIyLCBuKSkgdG8gCisJc2ltcGxpZnkgdGhlIHN0YXRpc3RpY3MgcmVwb3J0aW5nIGluIGUyZnNjay4KKworQ2hhbmdlZCBjb25maWd1cmUuaW4gc28gdGhhdCBpdHMgZGVmYXVsdHMgZm9yICpCU0Qgc3lzdGVtcyBubyBsb25nZXIKK2J1aWxkIGFuIGZzY2sgd3JhcHBlciwgYW5kIG5vdCB0byBpbnN0YWxsIGluIC91c3IvbG9jYWwgYnkgZGVmYXVsdC4KKworRml4ZWQgc29tZSBtaW5vciBzcGVsbGluZyBlcnJvcnMvdHlwbydzIGluIGUyZnNjayBhbmQgdGhlIGNvbmZpZ3VyZQorc2NyaXB0LgorCitGaXhlZCB2YXJpb3VzIERlYmlhbiBwYWNrYWdpbmcgaXNzdWVzIChzZWUgZGViaWFuL2NoYW5nZWxvZykuIAorCitVcGRhdGVkIGFuZCBjbGFyaWZpZWQgbWFuIHBhZ2VzLiAgKEFkZHJlc3NlcyBEZWJpYW4gQnVnICMxOTU2MTYpCisKK1Byb2dyYW1tZXIncyBub3RlczogCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeCBnY2MgLVdhbGwgbml0cGlja3MuCisKK1VwZGF0ZWQgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IGUyZnNwcm9ncyB0byAwLjExLjUsIGFuZCBlbmFibGUKK05MUyBzdXBwb3J0IGJ5IGRlZmF1bHQuICAoQWRkZWQgcGFydGlhbCB3b3JrYXJvdW5kIGZvciBnZXR0ZXh0L0RhcndpbgoraW5jb21wYXRpYmlsaXR5IHByb2JsZW1zLikKKworQWRkZWQgZnVsbCBNSVQgS1JCNSBhbmQgSGltZGFsbCBjb21wYWliaWxpdHkgc3VwcG9ydCB0byB0aGUgY29tX2VycgorbGlicmFyeSBhbmQgdGhlIGNvbXBpbGVfZXQgcHJvZ3JhbS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTkxOTAwKQorCitBZGRlZCB0aGUgYmxraWRfa25vd25fZnN0eXBlKCkgZnVuY3Rpb24gdG8gdGhlIGJsa2lkIGxpYnJhcnksIHdoaWNoCityZXR1cm5zIHRydWUgaWYgaXQgaXMgcGFzc2VkIGEgZmlsZXN5c3RlbSB0eXBlIHdoaWNoIGlzIHJlY29nbml6ZWQgYnkKK3RoZSBibGtpZCBwcm9iaW5nIGZ1bmN0aW9ucy4KKworSW1wcm92ZWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBibGtpZCBsaWJyYXJ5LgorCitBZGRlZCB0aGUgZXh0MmZzX2dldF9kZXZpY2Vfc2VjdHNpemUoKSBmdW5jdGlvbiB0aGUgdGhlIGV4dDJmcyBsaWJyYXJ5LCB3aGljaAorcmV0dXJucyB0aGUgaGFyZHdhcmUgc2VjdG9yIHNpemUgb2YgYSBkZXZpY2UsIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworQWRkZWQgYSBkZXBlbmRlbmN5IGluIHRoZSBibGtpZCBsaWJyYXJ5J3MgLnNvIGZpbGUgdG8gdGhlIHV1aWQKK2xpYnJhcnksIHNpbmNlIHRoZSBmb3JtZXIgdXNlcyB0aGUgbGF0dGVyLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnCisjMTk0MDk0KQorCitBZGRlZCAtLXdpdGgtZGlldC1saWJjIGFuZCAtLWRpc2FibGUtZXZtcyB0byB0aGUgY29uZmlndXJlIHNjcmlwdC4KKworRml4ZWQgYSBtaW5vciBtZW1vcnkgbGVhayBpbiB0aGUgYmFkYmxvY2tzIHByb2dyYW0uCisKK0ZpeGVkIGEgcG9ydGFiaWxpdHkgcHJvYmxlbSBpbiB0dW5lMmZzIC0tLSBub3QgYWxsIHN5c3RlbXMgaGF2ZSBzdHJwdGltZSgpLgorCitGaXhlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gaW4gZGVidWdmcyB3aXRoIHRoZSB1c2Ugb2YgZ2V0b3B0KCkgbW9yZQordGhhbiBvbmNlLiAgT2xkLXN0eWxlIEJTRCwgbmV3LXN0eWxlIEJTRCwgYW5kIExpbnV4IEMgbGlicmFyaWVzIGFsbCBkbwordGhpbmdzIGRpZmZlcmVudGx5LgorCitBZGQgc3VwcG9ydCBXaW5kb3dzIHN1cHBvcnQgdG8gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSgpLgorCitBZGRlZCAobm9ybWFsbHkgZGlzYWJsZWQpIGRlYnVnZ2luZyBjb2RlIHRvIHRoZSBVbml4IEkvTyBtYW5hZ2VyIHdoaWNoCitjYXVzZXMgaXQgdG8gZGlzYWJsZSBhbGwgdXNlcnNwYWNlIGNhY2hpbmcgaWYgdGhlIE5PX0lPX0NBQ0hFIGlzCitkZWZpbmVkLgorCitDaGFuZ2VkIHRoZSB0ZXN0IEkvTyBtYW5hZ2VyIHNvIGl0IGNhbiBhbHdheXMgYmUgbGlua2VkIGludG8gZTJmc2NrLAorbWtlMmZzLCBhbmQgdHVuZTJmcyBpZiBlbmFibGVkIHZpYSAtLWVuYWJsZS10ZXN0LWlvLWRlYnVnIHRvIHRoZQorY29uZmlndXJlIHNjcmlwdC4gIFRoZSB0ZXN0IEkvTyBtYW5hZ2VyIHdpbGwgb25seSBwcmludCBhbnkgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBpZiB0aGUgVEVTVF9JT19GTEFHUyBvciBURVNUX0lPX0JMT0NLIGVudmlyb25tZW50Cit2YXJpYWJsZXMgYXJlIHNldCwgd2hpY2ggc3BlY2lmaWVzIHdoaWNoIEkvTyBvcGVyYXRpb25zIGFyZSBsb2dnZWQgYW5kCithIGJsb2NrIG51bWJlciB0byB3YXRjaCwgcmVzcGVjdGl2ZWx5LiAgVGhlIGxvZyBtZXNzYWdlcyBhcmUgc2VudCB0bworc3RkZXJyIGJ5IGRlZmF1bHQsIHVubGVzcyBhIGZpbGVuYW1lIGlzIHNwZWNpZmllZCB2aWEgdGhlCitURVNUX0lPX0xPR0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKworRTJmc3Byb2dzIDEuMzMgKEFwcmlsIDIxLCAyMDAzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGRlZCBhIG5ldyB1dGlsaXR5IHByb2dyYW0sIGxvZ3NhdmUsIHdoaWNoIGNhcHR1cmVzIHRoZSBvdXRwdXQgb2YgYQorY29tbWFuZCBpbiBhIGxvZyBmaWxlLCBldmVuIGlmIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBoYXNuJ3QgYmVlbgorbW91bnRlZCB5ZXQgKGluIHdoaWNoIGNhc2UgdGhlIGl0IHNhdmVzIHRoZSBvdXRwdXQgaW4gbWVtb3J5IHVudGlsIGl0CitjYW4gd3JpdGUgb3V0IHRoZSBsb2dmaWxlKS4gIFRoaXMgaXMgdXNlZnVsIGZvciBjYXB0dXJpbmcgdGhlCitvdXRwdXQgb2YgZnNjayBkdXJpbmcgdGhlIGJvb3Qgc2VxdWVuY2UuCisKK0ZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMgdGhhdCB3ZXJlIGNhdXNpbmcgcHJvYmxlbXMgdW5kZXIKK3RoZSBDeWd3aW4zMiBlbnZpcm9ubWVudC4KKworTWtlMmZzIG5vdyBpbnRlcnByZXRzIGEgbmVnYXRpdmUgbnVtYmVyIHRvIHRoZSAtYiBvcHRpb24gYXMgYSBtaW5pbXVtCitibG9jayBzaXplLgorCitGaXhlZCBhIGJ1ZyBpbiBta2UyZnMgd2hpY2ggd2FzIGluY29ycmVjdGx5IGNoZWNraW5nIHRoZSBhcmd1bWVudCB0bwordGhlIC1nIG9wdGlvbiBpZiB0aGUgZGVmYXVsdCBibG9jayBzaXplIHdhcyB1c2VkLiAgKEFkZHJlc3NlcyBEZWJpYW4KK2J1ZyAjMTg4MzE5KQorCitGc2NrIG5vdyBleHBsaWNpdGx5IGlnbm9yZXMgdG1wZnMgYW5kIGRldnB0cywgYW5kIGl0IHdpbGwgY29tcGxhaW4gaWYKK2l0IGNhbiBub3QgZmluZCBmaWxlc3lzdGVtIGNoZWNrZXJzIGZvciBqZnMsIHJlc2VpcmZzLCBhbmQgeGZzLgorCitFMmZzY2sgbm93IHVwZGF0ZXMgdGhlIGdsb2JhbCBmcmVlIGJsb2NrIGFuZCBpbm9kZSBjb3VudGVycyBmcm9tIHRoZQorYmxvY2sgZ3JvdXAgc3BlY2lmaWMgY291bnRlcnMgcXVpZXRseS4gIFRoaXMgaXMgbmVlZGVkIGZvciBhbgorZXhwZXJpbWVudGFsIHBhdGNoIHdoaWNoIGVsaW1pbmF0ZXMgbG9ja2luZyB0aGUgZW50aXJlIGZpbGVzeXN0ZW0gd2hlbgorYWxsb2NhdGluZyBibG9ja3Mgb3IgaW5vZGVzOyBpZiB0aGUgZmlsZXN5c3RlbSBpcyBub3QgdW5tb3VudGVkCitjbGVhbmx5LCB0aGUgZ2xvYmFsIGNvdW50cyBtYXkgbm90IGJlIGFjY3VyYXRlLgorCitJbXBvcnRlZCBidWcgZml4ZXMgdG8gdGhlIEVWTVMgcGx1Z2luIGZyb20gdGhlIEVWTVMgMi4wIHRyZWUuICAoRVZNUworMi4wIGlzIG5vdCB5ZXQgc3VwcG9ydGVkOyB0aGlzIG9ubHkgcHVsbGVkIGluIHRoZSBidWcgZml4ZXM6IGZpeGVkCitwb3NzaWJsZSBoYW5ncyBjYXVzZWQgYnkgYnVncyBpbiBjYWxsaW5nIHdhaXRwaWQsIGFuZCBub3Qgc2V0dGluZyB0aGUKK3BpcGUgdG8gbm9uLWJsb2NraW5nIG1vZGU7IGFsc28gZml4ZWQgYSBmaWxlIGRlc2NyaXB0b3IgbGVhazsgbWFkZQorc3VyZSBhbGwgZnVuY3Rpb25zIGNhbGwgbG9nIGVudHJ5L2V4aXQgZnVuY3Rpb25zLikKKworQmFkYmxvY2tzIG5vdyBmbHVzaGVzIGl0cyBvdXRwdXQgZmlsZSBhcyBiYWQgYmxvY2tzIGFyZSBkaXNjb3ZlcmVkLgorCitUaGUgdXVpZCBsaWJyYXJ5IGlzIG5vdyBtb3JlIHBhcmFub2lkIGFib3V0IGFzc3VtaW5nIHRoZSBjb3JyZWN0bmVzcworb2YgdGhlIC9kZXYvcmFuZG9tIGRldmljZTsgaXQgbWl4ZXMgaW4gYSBzdHJlYW0gb2YgYnl0ZXMgZnJvbQorcmFuZG9tL3NyYW5kb20sIGp1c3QgaW4gY2FzZS4KKworVXBkYXRlIERlYmlhbiBmaWxlcyB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgSSBhbSBub3cgdGhlIERlYmlhbgorbWFpbnRhaW5lciBvZiBlMmZzcHJvZ3MuICBPdGhlciB2YXJpb3VzIERlYmlhbi1zcGVjaWZpYyBwYWNrYWdpbmcKK2NsZWFudXBzLgorCitNb3ZlIHRoZSBzb3VyY2UgdGFyYmFsbCBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBmcm9tIHRoZSB0b3AtbGV2ZWwKK21ha2VmaWxlIHRvIHRoZSB1dGlsL2dlbi10YXJiYWxsIHNjcmlwdC4gIAorCitVcGRhdGVkIHRoZSBUdXJraXNoIC5wbyB0cmFuc2xhdGlvbiBmaWxlLgorCitBZGRlZCBIZWltZGFsIGFuZCBNSVQga3JiNSBleHRlbnNpb25zIHRvIHRoZSBjb21fZXJyIGxpYnJhcnkgdG8gbWFrZQoraXQgbW9yZSBjb21wYXRpYmxlIHdpdGggY29tX2VyciBsaWJyYXJpZXMgZnJvbSB0aG9zZSBkaXN0cmlidXRpb25zLgorCitDaGFuZ2VkIGR1bXBlMmZzIHRvIGFsd2F5cyBkaXNwbGF5IHRoZSBzdXBlcmJsb2NrIGZpZWxkcyByZWxhdGluZyB0bwordGhlIGpvdXJuYWxsaW5nIGFuZC9vciBkaXJlY3RvcnkgaW5kZXhpbmcgZmVhdHVyZSBldmVuIGlmIHRob3NlCitmZWF0dXJlcyBhcmUgbm90IGVuYWJsZWQuCisKK1VwZGF0ZWQgYW5kIGNsYXJpZnkgY29weXJpZ2h0IHN0YXRlbWVudCB2aXMtYS12aXMgYWxwaGEgcmVsZWFzZXMgb2YKK2UyZnNwcm9ncy4KKworVGhlIHNzIGxpYnJhcnkgd2lsbCBub3cgdHJ5IHRvIGR5bmFtaWNhbGx5IGxpbmsgdG8gdGhlIHJlYWRsaW5lCitsaWJyYXJ5IGFuZCB1c2UgaXQgaWYgaXQgaXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiAgVGhpcyBtZWFucyB0aGF0Cit0aGUgZGVidWdmcyBwcm9ncmFtIG5vdyBoYXMgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGZlYXR1cmVzLiAgVGhlCitTU19SRUFETElORV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQgdG8gZmluZCBhIHJlYWRsaW5lIG9yCityZWFkbGluZS1jb21wYXRpYmxlIGxpYnJhcnkuCisKK0UyZnNjayBub3cgZmluZHMgbW9zdCBkdXBsaWNhdGUgZmlsZW5hbWVzIChhbGwgd2hlbiByZWJ1aWxkaW5nIGFsbAorZGlyZWN0b3JpZXMgdmlhIHRoZSAtRCBvcHRpb24pIGFuZCBvZmZlcnMgdG8gZGVsZXRlIG9yIHJlbmFtZQorZHVwbGljYXRlIGZpbGVuYW1lcy9kaXJlY3RvcnkgZW50cmllcy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTc2ODE0KS4KKworRml4IGJ1ZyBpbiBlMmltYWdlLiAgV2hlbiB3cml0aW5nIG91dCBhIHJhdyBpbWFnZSBmaWxlLCBpbmNsdWRlIGRhdGEKK2Jsb2NrcyBmcm9tIHN5bWxpbmtzIHRoYXQgZG8gbm90IHN0b3JlIHRoZSBzeW1saW5rIHdpdGhpbiB0aGUgaW5vZGUuCisKK0ZpeCBidWcgaW4gcmVzaXplMmZzIHdoaWNoIGluY29ycmVjdGx5IG1vdmVkIHRoZSBibG9jayBhbmQgaW5vZGUKK2JpdG1hcHMgZm9yIHNwYXJzZSBzdXBlcmJsb2NrIGZpbGVzeXN0ZW1zIGFuZCBpbmNvcnJlY3RseSBtYXJrZWQKK2Jsb2NrcyBhcyBpbiB1c2UuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzE3NDc2NikKKyAKK0FkZGVkIGEgbmV3IHNoYXJlZCBsaWJyYXJ5LCB0aGUgYmxraWQgbGlicmFyeSwgd2hpY2ggZWZmaWNpZW50bHkKK2FsbG93cyBmc2NrLCBta2UyZnMsIGUyZnNjaywgYW5kIHR1bmUyZnMgdG8gYmUgYWJsZSB0byBsb29rIHVwIExBQkVMCithbmQgVVVJRCBmaWxlc3lzdGVtIHNwZWNpZmllcnMgd2l0aG91dCBuZWVkaW5nIHRvIHNlYXJjaCBhbGwgb2YgdGhlCitkZXZpY2VzIGluIHRoZSBzeXN0ZW0uICBJbnN0ZWFkLCB0aGUgZGV2aWNlIGlzIGxvb2tlZCB1cCBpbiBhIGNhY2hlCitmaWxlLCBhbmQgdGhlbiB2ZXJpZmllZCB0byBtYWtlIHN1cmUgdGhlIGJsa2lkIGNhY2hlIGlzIGNvcnJlY3QuCisKK1R1bmUyZnMgYW5kIGUybGFiZWwgd2lsbCBhY2NlcHQgTEFCRUw9eHh4IGFuZCBVSUQ9eXl5IHNwZWNpZmllcnMgZm9yCit0aGUgZGV2aWNlIG5hbWUsIHVzaW5nIHRoZSBibGtpZCBsaWJyYXJ5LiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVncworIzE2NjA0OCwgIzE3OTY3MSkKKworRnNjayBub3cgc3VwcG9ydHMgYmFja3NsYXNoIGVzY2FwZXMgaW4gL2V0Yy9mc3RhYiBzbyB0aGF0IFwwNDAgY2FuIGJlCit1c2VkIGZvciBzcGFjZXMgaW4gZGV2aWNlIGxhYmVscy4KKworUmVtb3ZlZCAzMi1iaXQgbGltaXRhdGlvbnMgZm9yIGRlYnVnZnMncyBkdW1wIGNvbW1hbmQuCisKK0lmIHRoZSB1c2VyIHNwZWNpZmllcyBhIGxhcmdlIG51bWJlciBvZiBpbm9kZXMsIE1rZTJmcyB3aWxsCithdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwZXIgZ3JvdXAgdG8gZmluZCBhIHZhbGlkCitzZXQgb2YgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLgorCitBZGQgd29ya2Fyb3VuZCB0byBkZXRlY3QgYnJva2VuIE1EIGRldmljZXMgd2hlcmUgd2hlbiBzb21lIG9mIHRoZQordW5kZXJseWluZyBkZXZpY2VzIGFyZSBtYXJrZWQgcmVhZC1vbmx5LCB3cml0ZXMgdG8gdGhlIE1EIGRldmljZSBhcmUKK3NpbGVudGx5IGRyb3BwZWQuICBFMmZzY2sgd2lsbCBkZXRlY3QgaWYgdGhlcmUgaXMgYW4gYXR0ZW1wdCB0byBydW4KK3RoZSBqb3VybmFsIHR3aWNlLCBhbmQgYWJvcnQgd2l0aCBhbiBlcnJvciBpZiB0aGlzIGlzIHRoZSBjYXNlLgorKEFkZHJlc3NlcyBJQk0gQnVnemlsbGEgYnVnICMxMjI2KQorCitFMmZzY2sgd2lsbCBwcmludCBhbiBlcnJvciBpZiBtb3JlIHRoYW4gb25lIG9mIHRoZSAtcC8tYSwgLW4gb3IgLXkKK29wdGlvbnMgYXJlIHNwZWNpZmllZC4KKworRTJmc2NrIHdpbGwgZml4IEhUUkVFIGNvcnJ1cHRpb25zIGluIHByZWVuIG1vZGUsIHdpdGhvdXQgc3RvcHBpbmcgdGhlCitib290IHByb2Nlc3MuICBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSAyLjQgZXh0MiBmaWxlc3lzdGVtCithY2NpZGVudGFsbHkgaGFkIHRoZSBJTkRFWF9GTCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjb2RlIHJlbW92ZWQuCisKK01rZTJmcyBubyBsb25nZXIgY3JlYXRlcyBmaWxlc3lzdGVtcyB3aXRoIHRoZSBkaXJfaW5kZXggZmxhZyBzZXQgYnkKK2RlZmF1bHQ7IHRoZSB1c2VyIGhhcyB0byBzcGVjaWZpY2FsbHkgcmVxdWVzdCBpdC4KKworVXBkYXRlIGFuZCBjbGFyaWZpZWQgdmFyaW91cyBtYW4gcGFnZXMuIChBZGRyZXNzZXMgRGViaWFuIGJ1Z3MKKyMxNzM2MTIsICMxNzUyMzMsICMxNzUxMTMsIGFuZCAjMTcwNDk3LCAjMTg1OTQ1LCAjMTg4MzE4KQorCitDcmVhdGVkIG1hbiBwYWdlIGZvciB0aGUgbWtfY21kcyBwcm9ncmFtIChmcm9tIHRoZSBsaWJzcyBsaWJyYXJ5KS4KKworUHJvZ3JhbW1lcidzIG5vdGVzOiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IHZhcmlvdXMgZ2NjIC1XYWxsIG5pdHMuCisKK0ZpeGVkIGEgbG90IG9mIHBvcnRhYmlsaXR5IHByb2JsZW1zIHRoYXQgY2F1c2VkIGUyZnNwcm9ncyBub3QgdG8gYnVpbGQKK3N1Y2Nlc3NmdWxseSB1bmRlciBTb2xhcmlzIGFuZCBBcHBsZS9EYXJ3aW4uCisKK0ZpeGVkIGEgTWFrZWZpbGUgZGVwZW5kZW5jeSB0byBhbGxvdyBidWlsZGluZyBlMmZzcHJvZ3MgdXNpbmcgcGFyYWxsZWwKK21ha2Ugam9icy4KKworQ2hhbmdlcyB0byBjcmVhdGUgYSBzdWJzZXQgZGlzdHJpYnV0aW9uIHdoaWNoIGNvbnNpc3RzIG9ubHkgb2YgdGhlCitldCwgc3MsIHV1aWQsIGFuZCBibGtpZCBsaWJyYXJpZXMuICBUaGUgY29uZmlndXJlIHNjcmlwdCBhbmQgdG9wLWxldmVsCittYWtlZmlsZSB3ZXJlIGNoYW5nZWQgdG8gc3VwcG9ydCB3b3JraW5nIHdpdGggYSBzdWJzZXQgZGlzdHJpYnV0aW9uLgorCitSZW1vdmVkIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSIG1lbnRpb24gb2Ygc2luY2UgaXQncyBub3QKK2FjdHVhbGx5IHVzZWQsIGFuZCBtaWdodCBwZW9wbGUgd2hvIGFyZSBsb29raW5nIGZvcgorRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgsIHdoaWNoIGlzIGluIHVzZS4KKworVXBkYXRlZCBkZWJpYW4gZmlsZXMgdG8gZml4IGEgbnVtYmVyIG9mIExpbnRpYW4gd2FybmluZ3MuCisKK1VwZGF0ZWQgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHdpdGggbmV3ZXIgdmVyc2lvbnMgZnJvbSB0aGUgRlNGLgorCitSZW1vdmVkIHVubmVjZXNzYXJ5IGxpYnJhcmllcyBmcm9tIGJlaW5nIGxpbmtlZCBpbnRvIHRoZSBmc2NrLCBsc2F0dHIsIAorY2hhdHRyLCBhbmQgYmxraWQgZXhlY3V0YWJsZXMuCisKK0UyZnNwcm9ncyAxLjMyIChOb212ZW1iZXIgOSwgMjAwMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBidWcgaW4gdGhlIFVuaXggSS9PIHJvdXRpbmVzIHdoaWNoIGNhdXNlZCBuZWVkbGVzcyB3cml0ZWJhY2tzCitvZiBjbGVhbiBibG9ja3MgZnJvbSB0aGUgdW5peF9pbyBjYWNoZSAodGhleSB3ZXJlIGVycm9uZW91c2x5IG1hcmtlZAorYXMgYmVpbmcgZGlydHksIHNvIHRoZXkgd2VyZSBnZXR0aW5nIHdyaXR0ZW4gYmFjayB0byBkaXNrIGJlZm9yZQorZ2V0dGluZyBldmljdGVkIGZyb20gdGhlIGRpc2sgY2FjaGUpLiAgVGhpcyB3YXMgaGFybWxlc3MsIGJ1dCBpdAorc2lnbmlmaWNhbnRseSBzbG93ZWQgZG93biBlMmZzY2suCisKK01hZGUgc29tZSBvdGhlciBtaW5vciBvcHRpbWl6YXRpb25zIHRvIHRoZSBVbml4IEkvTyByb3V0aW5lcyB0byBzYXZlIGEKK3NtYWxsIGFtb3VudCBvZiBDUFUgdGltZS4KKworVXBkYXRlZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmaWxlcy4KKworCitFMmZzcHJvZ3MgMS4zMSAoTm9tdmVtYmVyIDgsIDIwMDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZSBFVk1TIGV4dDJmc2ltIHBsdWdpbiB3aXRoIEVWTVMgMS4yLiAgKFdlIHN0aWxsIHN1cHBvcnQKK2NvbXBpbGluZyB0aGUgZnNpbSBwbHVnaW4gd2l0aCBFVk1TIDEuMCBhbmQgMS4xLikgIEFkZCBiZXR0ZXIgZXJyb3IKK2hhbmRsaW5nIGZvciBjaGlsZCBwcm9jZXNzIHRoYXQgZGllIHVuZXhwZWN0bHkuICBBZGQgYSBoYWNrIHRvIGZvcmNlCitta2ZzIHRvIGNyZWF0ZSBmaWxlc3lzdGVtcyB0aGF0IHdvbid0IGNhdXNlIHByb2JsZW1zIHdpdGggaGFyZHdhcmUKK3RoYXQgaGFzIDJrIG9yIDRrIG1pbmltdW0gYmxvY2tzaXplIHJlcXVpcmVtZW50cy4gIFJlYWQgZnJvbSBjaGlsZAorcHJvY2Vzc2VzIGluIG5vbi1ibG9ja2luZyBtb2RlLCBzbyB0aGF0IHRoZSBHVUkgY29udGludWVzIHRvIHVwZGF0ZS4KKworRml4IGUyZnNjayBzbyB0aGF0IGl0IHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGV4aXQgY29kZSB3aGVuIHRoZSByb290CitmaWxlc3lzdGVtIGhhcyBiZWVuIGNoYW5nZWQsIHNvIHRoYXQgc3lzdGVtJ3MgcmMgc2NyaXB0cyB3aWxsIGJlIHRvbGQgdGhhdCAKK3RoZSBzeXN0ZW0gbmVlZHMgdG8gYmUgcmVib290ZWQuCisKK0ZpeCBhIGJ1ZyBpbiBleHQyZnNfZmx1c2gvZXh0MmZzX2Nsb3NlOyB3aGVuIHRoZSBNQVNURVJfU0JfT05MWSBmbGFnCit3YXMgc2V0LCBzb21lIG9mIHRoZSBkZXNjcmlwdG9yIGJsb2NrcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbgorb3V0IHdlcmUgZ2V0dGluZyBza2lwcGVkLgorCitDaGFuZ2VkIGUyZnNjayB0byBmb3JjZSBvdXQgY2hhbmdlcyB0byB0aGUgYmFja3VwIGNvcGllcyBvZiB0aGUKK3N1cGVyYmxvY2sgYW5kIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIHdoZW4gaW1wb3J0YW50IGNoYW5nZXMgYXJlIG1hZGUKK3RvIHRob3NlIGRhdGEgc3RydWN0dXJlcy4KKworRml4IGEgYnVnIHdoZXJlIGUyZnNjayBjb3VsZCBlcnJvbmVvdXNseSBtYXJrIGEgZmlsZXN5c3RlbSBhcyBiZWluZworY2xlYW4gaWYgYSBjaGVjayBvZiBkaXJ0eSBmaWxlc3lzdGVtIGlzIGludGVycnVwdGVkIHdpdGggYSBeQy4gIChCdWcKK2ludHJvZHVjZWQgaW4gZTJmc3Byb2dzIDEuMjguKQorCitJZiBqb3VybmFsIGRlYnVnaW5nIGlzIGVuYWJsZWQgdXNpbmcgLS1lbmFibGUtamJkLWRlYnVnLCB0aGUgZGVidWdnaW5nCitsZXZlbCBpcyBub3cgc2V0IHZpYSB0aGUgRTJGU0NLX0pCRF9ERUJVRyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworSWYgYnl0ZXN3YXBwaW5nIHN1cHBvcnQgaXMgZGlzYWJsZWQgdXNpbmcgY29uZmlndXJlIC0tZGlzYWJsZS1zd2FwZnMsCitza2lwIHRoZSB0ZXN0cyB3aGljaCBkZXBlbmQgb24gYnl0ZS1zd2FwcGluZywgc28gdGhhdCAibWFrZSBjaGVjayIKK3dvbid0IGJvbWIgb3V0LgorCitMc2hhdHRyIHdpbGwgbm93IGRpc3BsYXkgdGhlIGluZGV4ZWQgZGlyZWN0b3J5IGZsYWcuICBBbHNvLCBzb21lIG9mCit0aGUgbW9yZSBlc290ZXJpYyBjb21wcmVzc2lvbiBmbGFncyBhcmUgc3VwcmVzc2VkIHVubGVzcyBjb21wcmVzc2lvbgorc3VwcG9ydCBoYXMgYmVlbiBlbmFibGVkLgorCitVcGRhdGUgbWFuIHBhZ2VzLgorCisKK0UyZnNwcm9ncyAxLjMwIChPY3RvYmVyIDMxLCAyMDAyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gcmVzaXppbmcgYSBmaWxlc3lzdGVtLCBhbmQgaW5vZGVzIG5lZWQgdG8gbW92ZWQsIHJlc2l6ZTJmcyB3aWxsCit1cGRhdGUgdGhlIGlub2RlJ3MgY3RpbWUgZmllbGQsIGFuZCB0aGUgbXRpbWUgZmllbGQgb2YgdGhlIGNvbnRhaW5pbmcKK2RpcmVjdG9yaWVzLCBzbyB0aGF0IGluY3JlbWVudGFsIGJhY2t1cHMgdXNpbmcgZHVtcC9yZXN0b3JlIHdpbGwgd29yaworY29ycmVjdGx5LgorCitJbiBvcmRlciB0byBhdm9pZCBzcHVyaW91cyBlcnJvcnMsIGUyZnNjayB3aWwgY2hlY2sgdGhlIGxhc3QKK3N1cGVyYmxvY2sgd3JpdGUgdGltZSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgY2FuIHNhZmVseSB1c2UKK3RoZSBMT1dfRFRJTUUgY2hlY2tzIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgaW5vZGVzIG9uIHRoZSBvcnBoYW4KK2lub2RlIGxpbmtlZCBsaXN0IHRoYXQgaGFkIHNvbWVob3cgZ290dGVuIGRpc2Nvbm5lY3RlZC4gIChBZGRyZXNzZXMKK1NvdXJjZWZvcmdlIGJ1ZyAjNjIwOTgwKQorCitQYXJ0aXRpb24gaW4gL3Byb2MvcGFydGl0aW9ucyB0aGF0IGJlaW5nIHdpdGggdGhlIHN0cmluZyAibHZtIiBhcmUKK2NvbnNpZGVyZWQgcmVhbCBwYXJ0aXRpb25zIGV2ZW4gaWYgdGhleSBkbyBub3QgZW5kIHdpdGggYSBudW1iZXIuCisKK0ZpeGVkIGEgYnVnIGluIHRoZSB0aGUgdXVpZCBnZW5lcmF0aW9uIGZ1bmN0aW9uLCB3aGVyZSBpZiAvZGV2L3VyYW5kb20KK2lzIG5vdCBwcmVzZW50LCBidXQgL2Rldi9yYW5kb20gaXMsIGFuZCB0aGVyZSBpc24ndCBzdWZmaWNpZW50CitlbnRyb3B5LCB0aGUgZ2V0X3JhbmRvbV9ieXRlIGZ1bmN0aW9uIGNvdWxkIHNwaW4gYSBsb29wIGZvcmV2ZXIuCisKK0UyZnNjaywgbWtlMmZzLCBldGMuIHdpbGwgbm93IHJlbGlhYmx5IG5vdGljZSB3aGVuIGltYWdlIGZpbGVzIGFyZQorbW91bnRlZCB1c2luZyB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLiAgKEFkZHJlc3NlcyBTb3VyY2Vmb3JnZSBidWcKKyM2MTkxMTkpCisKK1doZW4gZmx1c2hpbmcgYnVmZmVycyAoYXMgaXMgZG9uZSBieSBiYWRibG9ja3MsIGZvciBleGFtcGxlKSBjaGVjayB0bworc2VlIGlmIHRoZSBCTEtGTFNCVUYgaW9jdGwgc3VjY2VlZHMsIGFuZCBpZiBzbywgYXZvaWQgdXNpbmcgdGhlCitGREZMVVNIIGlvY3RsIHdoaWNoIGNhdXNlcyB0aGUgTUQgZGV2aWNlIGRyaXZlciB3aGljaCBjYXVzZXMgY29uZnVzaW5nCitzeXNsb2cgbWVzc2FnZXMgYWJvdXQgb2JzZWxldGUgaW9jdGwgbWVzc2FnZXMuICAoQWRkcmVzc2VzIFNvdXJjZWZvcmdlCitidWcgIzU0NTgzMikuCisKK0RlYnVnZnMncyB3cml0ZSBjb21tYW5kIG5vdyBjaGVja3MgdG8gc2VlIGlmIHRoZSBkZXN0aW5hdGlvbiBmaWxlbmFtZQorZXhpc3RzIGJlZm9yZSBjcmVhdGluZyBpdC4gIChBZGRyZXNzZXMgU291cmNlZm9yZ2UgYnVnICM0NzgxOTUuKQorCitXaGVuIGluc3RhbGxpbmcgbWFuIHBhZ2VzLCBzZWFyY2ggZm9yIGNvbXByZXNzZWQgbWFuIHBhZ2VzIHVzaW5nIGFsbAorY29tbW9ubHkgdXNlZCBjb21wcmVzc2lvbiBleHRlbnNpb25zIChpLmUuLCAuWiwgLmd6LCAuYnoyLCBldGMuKQorCitGaXhlZCBhIGJ1ZyBpbiBmc2NrIHdoZXJlIG11bHRpcGxlIGZpbGVzeXN0ZW1zIHNwZWNpZmllZCBvbiB0aGUKK2NvbW1hbmQgd2VyZSBub3QgYmVpbmcgY2hlY2tlZCBpbiBwYXJhbGxlbCBkdWUgdG8gYSBsb2dpYyBidWcKK2ludHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUgRlNDS19NQVhfSU5TVCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworV2UgaGF2ZSBhZGRlZCBhIG5ldyBzdXBlcmJsb2NrIGZpZWxkLCBzX21rZnNfdGltZSwgd2hpY2ggaW5kaWNhdGVzCit3aGVuIGEgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZC4gIEl0IGlzIHNldCB2aWEgbWtlMmZzLCBhbmQgcHJpbnRlZCBvdXQKK2J5IGR1bXBlMmZzLCBidXQgaXMgbm90IGFjdHVhbGx5IHRvdWNoZWQgYnkgdGhlIGtlcm5lbC4KKworRHVtcGUyZnMgaGFzIGJlZW4gbWFkZSBtb3JlIHJvYnVzdCBieSBub3QgYWJvcnRpbmcgaWYgdGhlcmUgaXMgYW4KK2Vycm9yIHJlYWRpbmcgdGhlIGJsb2NrL2lub2RlIGJpdG1hcHM7IGluc3RlYWQgaXQgd2lsbCBzdGlsbCBwcmludCBvdXQKK3RoZSBsb2NhdGlvbiBvZiB0aGUgYmxvY2svaW5vZGUgYml0bWFwcyBhbmQgaW5vZGUgdGFibGUuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgYW4gYWx0ZXJuYXRpdmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBsYXlvdXQgd2hpY2gKK2FsbG93cyBmb3Igb24tbGluZSByZXNpemluZyB3aXRob3V0IG5lZWRpbmcgdG8gcHJlcGFyZSB0aGUgZmlsZXN5c3RlbQoraW4gYWR2YW5jZS4gIChUaGlzIGlzIHRoZSBpbmNvbWF0IGZlYXR1cmUgZmxhZyBtZXRhX2JnLikKKworQWRkIHN1cHBvcnQgZm9yIHN0b3JpbmcgZGVmYXVsdCBtb3VudCBvcHRpb25zIGluIHRoZSBzdXBlcmJsb2NrLCBzbwordGhhdCB0aGUgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB3aXRoIHNwZWNpZmljIG1vdW50IG9wdGlvbnMgd2l0aG91dAorbmVlZGluZyB0byBzcGVjaWZ5IHRoZW0gb24gdGhlIG1vdW50IGNvbW1hbmQgbGluZSBvciBpbiB0aGUgL2V0Yy9mc3RhYgorZmlsZS4KKworQWRkIHN1cHBvcnQgZm9yIGEgbmV3IGlub2RlIGZsYWcsIHdoaWNoIGlzIHRvIGJlIHVzZWQgZm9yIGluZGljYXRpbmcKK3RoZSB0b3Agb2YgZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGZvciB0aGUgT3Jsb3YgYmxvY2sgYWxsb2NhdG9yLgorCitGaXggZTJmc2NrIHNvIHRoYXQgaWYgaXQgY3JlYXRlcyB0aGUgbG9zdCtmb3VuZCBkaXJlY3RvcnksIGl0IGRvZXMgc28KK3dpdGggdGhlIG1vcmUgYXBwb3JwcmlhdGUgcGVybWlzc2lvbnMgb2YgMDcwMC4gIEFsc28gY2hhbmdlCitta2xvc3QrZm91bmQgc28gdGhhdCBpdCBhbHNvIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSAwNzAwLgorCitGaXhlZCBmb3JtYXQgYnVnIGluIGUyZnNjayBpZiBOTFMgaXMgaW4gdXNlLgorICAKK0FkZCBhIEdlcm1hbiB0cmFuc2xhdGlvbiBmb3IgZTJmc3Byb2dzJ3MgTkxTIHN1cHBvcnQuCisKK0ZpeGVkIGUyZnNjayBzbyB0aGF0IGl0IG1vcmUgaGFuZGxlcyBCQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUgZXZlbiBhdAordGhlIGJlZ2lubmluZyBvZiB0aGUgaW5vZGUgdGFibGUuICBUaGlzIHdvbid0IG1hdHRlciBtdWNoLCBzaW5jZSBpZgordGhlcmUgaXMgYSBiYWQgYmxvY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5vZGUgdGFibGUsIHRoZSByb290CitkaXJlY3Rvcnkgd29uJ3QgYmUgYXZhaWxhYmxlLiAgQnV0IGF0IGxlYXN0IGUyZnNjayB3b24ndCBjcmFzaCBpbiB0aGlzCitjYXNlLgorCitGaXhlZCBlbmRpYW4gcHJvYmxlbXMgaW4gdGhlIGh0cmVlIGNvZGUgZm9yIGUyZnNjayBhbmQgZGVidWdmcy4KKyAgCitXaGVuIGJ5dGUtc3dhcHBpbmcgYSBmaWxlc3lzdGVtIG9uIGEgUFBDIGFyY2hpdGVjdHVyZSwgYnl0ZS1zd2FwIHRoZQorYml0bWFwcyBzaW5jZSB0aGUgaGlzdG9yaWNhbCBiaWctZW5kaWFuIGV4dDIgdmFyaWFudCBoYWQgYnl0ZS1zd2FwcGVkCitiaXRtYXBzLCBhbmQgdGhlIGV4dDJmcyBsaWJyYXJ5IGFzc3VtZXMgdGhpcy4gIFRoaXMgZml4ZXMgdGhlCityZWdyZXNzaW9uIHRlc3Qgc3VpdGUgb24gUFBDIG1hY2hpbmVzLgorCitGaXggZTJpbWFnZSBzbyB0aGF0IGl0IGhhbmRsZXMgYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlCithcHByb3ByaWF0ZWx5LgorCitFMmZzY2sgbm93IHVzZXMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgYWxnb3JpdGhtIHRvIHNhbHZhZ2UgY29ycnVwdGVkCitkaXJlY3RvcmllcyB0aGF0IHJlY292ZXJzIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIGNvcnJ1cHRlZCBkaXJlY3RvcnkKK2Jsb2NrLgorCitFMmZzY2sgbm93IHBlcmZvcm1zIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIG9uIGluZGV4ZWQgKEhUUkVFKQorZGlyZWN0b3JpZXMuCisKK0ZpeCBidWcgd2hlcmUgZWZzY2sgbWlnaHQgZ2V0IGNvbmZ1c2VkIGFib3V0IHdoZXRoZXIgYSBjb21wbGV0ZWx5CitlbXB0eSBkaXJlY3RvcnkgYmxvY2sgaXMgYW4gZW1wdHkgbGVhZiBibG9jayBvciBhbiBpbnRlcmlvciBodHJlZQorbm9kZS4gIFRoaXMgY291bGQgY2F1c2UgZTJmc2NrIHRvIGdldCBjb25mdXNlZCBpbnRvIHRoaW5rIHRoYXQgYSB2YWxpZAoraW5kZXhlZCBkaXJlY3Rvcnkgd2FzIGNvcnJ1cHRlZC4KKworRTJmc2NrIG5vIGxvbmdlciBjcmVhdGVzIGFuIGVtcHR5IGRpcmVjdG9yeSBlbnRyeSBhdCB0aGUgZW5kIG9mIGEKK2RpcmVjdG9yeSBibG9jayB3aGVuIG9wdGltaXppbmcgYSBkaXJlY3RvcnkuICBUaGlzIHdvdWxkIGNhdXNlIHNvbWUKK2VhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIGR4ZGlyIGtlcm5lbCBjb2RlIHRvIGNvcnJ1cHQgdGhlIGRpcmVjdG9yeQord2hlbiBhdHRlbXB0aW5nIHRvIHNwbGl0IGEgbm9kZSBjb250YWluaW5nIGFuIGVtcHR5IGRpcmVjdG9yeSBlbnRyeS4KKworRTJmc2NrIGNvdWxkIHNvbWV0aW1lcyBpbiByYXJlIGNpcmN1bXN0YW5jZXMgbGVhdmUgdGhlIGluZGV4ZWQgZmxhZworc2V0IGFmdGVyIGEgc21hbGwgZGlyZWN0b3J5IHdhcyBvcHRpbWl6ZWQgYnkgY29tcHJlc3NpbmcgaXQgaW5zdGVhZCBvZgoraW5kZXhpbmcgaXQuICAoVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHJlYWwgbGlmZSwgc2luY2UKK2RpcmVjdG9yaWVzIHRoYXQgc21hbGwgd291bGRuJ3QgaGF2ZSBiZWVuIGluZGV4ZWQsIGJ1dCBiZXR0ZXIgc2FmZQordGhhbiBzb3JyeS4pCisKK0UyZnNjayBub3cgb25seSB1cGRhdGVzIHRoZSBtYXN0ZXIgc3VwZXJibG9jayBpbiBhbGwgY2FzZXMuICBUaGlzCitzbGlnaHRseSBzaG9ydGVucyBpdHMgcnVuIHRpbWUuCisKK0V4dDJlZCBjYW4gZGVhbCB3aXRoIGRpcmVjdG9yeSBlbnRyaWVzIG9mIGxlbmd0aCAwOyBwcmV2aW91c2x5IGl0Cit3b3VsZCBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KKworRnNjayBub3cgaGFzIHN1cHBvcnQgZm9yIHJlaXNlcmZzIHZvbHVtZXMgd2hlbiBwYXJzaW5nIExBQkVMPSBhbmQgVVVJRD0KK3NwZWNpZmllcnMuICAoU291cmNlZm9yZ2UgcGF0Y2ggIzYxMzQ0NykKKworQmFkYmxvY2tzIHdpbGwgbm93IHdvcmsgY29ycmVjdGx5IG9uIHJlYWQtb25seSBkZXZpY2VzIHN1Y2ggYXMKK0NELVJPTSdzLiAgKFNvdXJjZWZvcmdlIHBhdGNoICM2MDA0NTEpCisKK1VwZGF0ZWQgYW5kIGNsYXJpZmllZCBtYW4gcGFnZXMuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzE2NzEwOCkKKworCitFMmZzcHJvZ3MgMS4yOSAoU2VwdGVtYmVyIDI0LCAyMDAyKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNvdWxkIGNvcnJ1cHQgYSBkaXJlY3Rvcnkgd2hlbiBvcHRpbWl6aW5nCitpdCAodmlhIHRoZSAtRCBvcHRpb24pIG9yIHJlYnVpbGlkaW5nIHRoZSBoYXNoIHRyZWUgaW5kZXggd2l0aCBhIDEgaW4KKzUxMiBwcm9iYWJpbGl0eSwgZHVlIHRvIGEgZmVuY2UgcG9zdCBlcnJvci4KKworRml4ZWQgYSBidWcgaW4gdGhlIExWTSBzdXBwb3J0IGNvZGUgd2hpY2ggY2F1c2VkIExBQkVMPSd4eHgnIG5vdCB0bword29yayBjb3JyZWN0bHkuCisKK01rZTJmcyBub3cgZW5hYmxlcyB0aGUgZGlyZWN0b3J5IGluZGV4aW5nIGZsYWcgYnkgZGVmYXVsdC4gIChTaW5jZQordGhpcyBpcyBhIGNvbXBhdGlibGUgZmVhdHVyZSBmbGFnLCBpdCdzIHNhZmUgdG8gZG8gc28uKQorCitUdW5lMmZzIHdpbGwgc3VwcG9ydCBzZXR0aW5nIHRoZSBkaXJlY3RvcnkgaW5kZXhpbmcgZmVhdHVyZSBmbGFnLiAgSXQKK3dpbGwgYXV0b21hdGljYWxseSBzZXQgdXAgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gYW5kIGhhc2ggc2VlZAorZmllbGRzIGluIHRoZSBzdXBlcmJsb2NrLgorCitJZiB0aGUgYm9uZS1oZWFkZWQgdXNlciBlbnRlcnMgdGhlIHJvb3QgZmlsZXN5c3RlbSB0d2ljZSBpbgorL2V0Yy9mc3RhYiwgdGhlIC1SIG9wdGlvbiB3aGljaCBza2lwcyB0aGUgcm9vdCBmaWxlc3lzdGVtIHdpbGwgc2tpcAorYWxsIG9mIHRoZW0uICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzE1OTQyMykuICBOb3RlISAgVGhpcyBpcyBub3QgYQorcHJlY2VkZW50IGZvciBkZWFsaW5nIGludGVsbGlnZW50bHkgd2l0aCBhbnkgb3RoZXIga2luZCBvZiBkb3VibGVkCitlbnRyeSBpbiAvZXRjL2ZzdGFiIQorCisKK1Byb2dyYW1tZXIncyBub3RlczogCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlbW92ZWQgcGVycm9yIGRlY2xhcmF0aW9uIGluIGxpYi9ldC9pbnRlcm5hbC5oLiAgQWxsIG1vZGVybiBzeXN0ZW1zCitjYW4gYmUgZXhwZWN0ZWQgdG8gZGVmaW5lIHBlcnJvcigpIHRoZXNlIGRheXMuICBCZXNpZGVzLCB0aGUgbGliL2V0Citjb2RlIHdhc24ndCB1c2luZyBwZXJyb3IgYXQgYWxsIGFueXdheS4gIDotKQorCisKK0UyZnNwcm9ncyAxLjI4IChBdWd1c3QgMzEsIDIwMDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgdGhlIEhhc2hlZC1UcmVlIERpcmVjdG9yeSBJbmRleGluZyB0byBlMmZzY2suICBTdXBwb3J0Citmb3Igc2V0dGluZyB0aGUgaHRyZWUgZmxhZyBpcyBub3QgaW5jbHVkZWQgeWV0LCBhbHRob3VnaCBpdCBjYW4gYmUKK21hbnVhbGx5IHR1cm5lZCBvbiB2aWEgdGhlIGRlYnVnZnMgcHJvZ3JhbS4KKworQ2xhcmlmaWVkIGUyZnNjayBlcnJvciBtZXNzYWdlIHdoaWNoIGlzIHByaW50ZWQgd2hlbiBpdCBjYW5ub3QgZmluZAorc3VmZmljaWVudCBjb250aWd1b3VzIGJsb2NrIHdoZW4gcmVsY2F0aW5nIGZpbGVzeXN0ZW0gbWV0YWRhdGEuCisKK0FkZGVkIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIGFuIEVWTVMgcGx1Z2luIG1vZHVsZSBmb3IgZXh0Mi8zLiAgVGhpcworbW9kdWxlIGlzIHN1YnN0YW50aWFsbHkgdGhlIHNhbWUgYXMgdGhlIEVWTVMgbW9kdWxlIHNoaXBwaW5nIHdpdGggRVZNUworMS4xLCB3aXRoIG9uZSBvciB0d28gYnVnZml4ZXMuICBFMmZzcHJvZ3MgY2FuIGFsc28gYnVpbGQgdGhpcyBwbHVnaW4KK2ZvciB1c2Ugd2l0aCBFVk1TIDEuMCAod2hpY2ggZGlkIG5vdCBpbmNsdWRlIHRoZSBleHQyIHBsdWdpbiBtb2R1bGUpLAoraWYgdGhlIGNvbmZpZ3VyZSAtLWVuYWJsZS1vbGQtZXZtcyBmbGFnIGlzIGdpdmVuLgorCitGc2NrIHdpbGwgc2VhcmNoIHRocm91Z2ggRVZNUyB2b2x1bWVzIHdoZW4gdHJ5aW5nIHRvIHJlc29sdmUKK2ZpbGVzeXN0ZW0gc3BlY2lmaWNhdGlvbnMgc3VjaCBhcyBMQUJFTD14eHggb3IgVVVJRD14eHguCisgIAorQWRkZWQgYSBuZXcgdXRpbGl0eSBwcm9ncmFtLCAvc2Jpbi9maW5kZnMsIHdoaWNoIHdpbGwgcmV0dXJuCitmaWxlc3lzdGVtIHNwZWNpZmljYXRpb25zIHN1Y2ggYXMgTEFCRUw9eHh4IG9yIFVVSUQ9eHh4LCBhbmQgcHJpbnRzCit0aGUgZGV2aWNlIG5hbWUuCisKK1VwZGF0ZSBhbmQgY2xhcmlmaWVkIHZhcmlvdXMgbWFuIHBhZ2VzLiAoYWRkcmVzc2VzIERlYmlhbiBCdWcgIzE0NTA0NCwKKyMxNDY0MzcsICMxMzEzNTAsICMxNTE5OTAsICMxNDQ2MjEsICMxNDE5MzgpCisKK0lmIHRoZXJlIGFyZSBubyBmaWxlc3lzdGVtcyBzcGVjaWZpZWQgb24gZnNjaydzIGNvbW1hbmQgbGluZSwgZnNjayBub3cKK3RyZWF0IHRoYXQgYXMgaWYgdGhlIC1BcyBvcHRpb25zIHdlcmUgZ2l2ZW4uICBQcmV2aW91c2x5IGl0IHdvdWxkCitzaW1wbHkgZG8gbm90aGluZy4gIChBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTUzMTAyKQorCitNa2UyZnMgbm8gbG9uZ2VyIHRyZWF0cyBhIGZhaWx1cmUgdG8gYmUgYWJsZSB0byBjbGVhciB0aGUgTUQgc2lnbmF0dXJlCithdCB0aGUgZW5kIG9mIHRoZSBmaWxlc3lzdGVtIGFzIGEgZmF0YWwgZXJyb3IuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcKKyMxNTUwMDcpCisKK1RoZSBlMnAgbGlicmFyeSBmdW5jdGlvbnMgKHdoaWNoIGFyZSB1c2VkIGJ5IGxzYXR0ciBhbmQgY2hhdHRyKSBub3cKK2RvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5CitiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgdGhlIGV4dDIgaW9jdGxzLiAgU29tZSBkZXZpY2UgZHJpdmVycwordW5mb3J0dW5hdGVseSByZXNwb25kIHRvIHRoZSBleHQyIGlvY3RsJ3Mgd2l0aCB1bmtub3duIGJlaGF2aW91ci4KKyhBZGRyZXNzZXMgRGViaWFuIEJ1ZyAjMTUyMDI5KS4KKworVGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGluZyBoYXMgYmVlbiB1cGRhdGVkIHRvIGNvcnJlc3BvbmQgd2l0aAordGhlIGxhdGVzdCBWMiBiZXN0Yml0cyBBQ0wgY29kZS4KKworRml4ZWQgYnVnIGluIGUyZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gbm90IGNsZWFyIHRoZSBkdGltZSBmaWVsZCB3aGVuCitwcm9jZXNzaW5nIHRydW5jYXRlZCBpbm9kZXMgb24gdGhlIG9ycGhhbiBsaXN0LiAgVGhpcyBjb3VsZCBjYXVzZSBkYXRhCitsb3NzKCEpIGlmIGEgZmlsZXN5c3RlbSBpcyByZWJvb3RlZCBiZWZvcmUgYSB0cnVuY2F0ZSBoYXMgYmVlbgorY29tbWl0dGVkLgorCitFMmZzY2sgbm93IHVzZXMgcmVkL2JsYWNrIHRyZWVzIGluIHBhc3MxYiwgd2hpY2ggcmVtb3ZlcyBzb21lIE8obioqMikKK2FsZ29yaXRobXMuICBUaGlzIG1ha2VzIGUyZnNjayBtdWNoIGZhc3RlciBpbiB0aGUgY2FzZSBvZiBzZXZlcmVseQorY29ycnVwdGVkIGZpbGVzeXN0ZW1zIHdoZXJlIGEgbGFyZ2UgbnVtYmVyIG9mIGJsb2NrcyBhcmUgY2xhaW1lZCBieSBhCitsYXJnZSBudW1iZXIgb2YgaW5vZGVzLiAgKFRoYW5rcyB0byB0aGUgMi41IElERSBkZXZpY2UgZHJpdmVyIGZvcgoraW5zcGlyaW5nIHRoaXMgd29yay4pCisKK1Jlc2l6ZTJmcyBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHNwZWQgdXAgd2hlbiBzaHJpbmtpbmcgYW5kIGV4cGFuZGluZworYSBmaWxlc3lzdGVtIGJ5IGEgdmVyeSBzbWFsbCBudW1iZXIgb2YgYmxvY2tzIChmb3IgZXhhbXBsZSwgd2hlbiBFVk1TCitpcyBjb252ZXJ0aW5nIGEgcGFydGl0aW9uIHRvIGJlIGFuIEVWTVMgbGVnYWN5IHZvbHVtZSkuCisKK0FkZGVkIGEgbmV3IG9wdGlvbiB0byBlMmZzY2ssIC1ELCB3aGljaCB3aWxsIG9wdGltaXplIG9yIGNvbXByZXNzIGFsbAorb2YgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSBmaWxlc3lzdGVtLgorCitFMmZzY2sgbm93IGNhdGNoZXMgU0lHSU5UIGFuZCBTSUdURVJNIHRvIG1ha2Ugc3VyZSBpdCB3aWxsIGNhbgorcHJvcGVybHkgY2xlYW4gdXAgYW5kIG9ubHkgZXhpdCBhdCBzYWZlIHBvaW50cy4gIEZzY2sgd2lsbCBwYXNzCitTSUdJTlQvU0lHVEVSTSB0byBpdHMgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgd2FpdCB1bnRpbCB0aGV5IGhhdmUgYWxsCitleGl0ZWQgYmVmb3JlIGl0IGV4aXRzLgorCitUaGUgdXVpZCBwYXJzaW5nIGNvZGUgaW4gdGhlIHV1aWQgbGlicmFyeSBub3cgcHJvcGVybHkgY29tcGxhaW5zIHdoZW4KK2FuIGlsbGVnYWxseSBmb3JtYXRlZCB1dWlkIGlzIHByZXNlbnRlZCB0byBpdC4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZworIzE1Mjg5MSkKKworUmVzdHJpY3QgdXNlIG9mIHRoZSAyLjQgc2V0cmxpbWl0IEFCSSBmKmNrdXAgdG8ga2VybmVscyBiZXR3ZWVuIDIuNC4xMAorYW5kIDIuNC4xNywgc2luY2UgdGhlIHdvcmthcm91bmQgY2FuIGNhdXNlIHByb2JsZW1zIHdoZW4gdXNpbmcgYSAyLjQKK2tlcm5lbCB3aXRoIGFuIG9sZCB2ZXJzaW9uIG9mIGdsaWJjIGJ1aWx0IHdpdGggdGhlIDIuMiBoZWFkZXJzLgorCitGaXhlZCBhIGJ1ZyBpbiBta2UyZnMgd2hlcmUgaXQgd2Fzbid0IHByb3Blcmx5IGNsZWFyaW5nIHRoZSBpbml0aWFsCitzdXBlcmJsb2NrIHVzZWQgYnkgb3RoZXIgZmlsZXN5c3RlbXMuICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzE0NzI1Ni4pCisKK0FkZGVkIHN1cHBvcnQgZm9yIHRoZSBzeW5jaHJvbm91cyBkaXJlY3RvcnkgZmVhdHVyZSB3cml0dGVuIGJ5IEFuZHJldworTW9ydG9uLgorCitUaGUgZGVidWdmcyBwcm9ncmFtIGNhbiBkZWxldGUgZGlyZWN0b3JpZXMgdXNpbmcgdGhlIHJtZGlyIGNvbW1hbmQuCisKK0FkZCBzdXBwb3J0IGZvciA4ayBhbmQgMTZrIGZpbGVzeXN0ZW1zIChmb3Igc3lzdGVtcyB3aXRoIHBhZ2Ugc2l6ZXMKK3RoYXQgYXJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gOGsgb3IgMTZrLCByZXNwZWN0aXZlbHkpLiAgTm90ZSB0aGF0Cit0aGVzZSBmaWxlc3lzdGVtcyBjYW4gbm90IGJlIG1vdW50ZWQgb24geDg2IHN5c3RlbXMsIG9yIG90aGVyIHN5c3RlbXMKK3dpdGggb25seSA0ayBwYWdlIHNpemVzLCBkdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIGN1cnJlbnQgTGludXggVk0KK2NvZGUuCisKK1Jlc2l6ZTJmcyByZXF1aXJlcyB0aGF0IHRoZSBmaWxlc3lzdGVtIHN0YXRlIGJlIHZhbGlkIGFuZCBoYXZlIG5vCitlcnJvcnM7IG90aGVyd2lzZSwgZTJmc2NrIC1mIG11c3QgYmUgcnVuIGZpcnN0LiAgKFByZXZpb3VzbHkgaXQgc2ltcGx5CityZXF1aXJlZCB0aGF0IHRoZSBsYXN0IGZzY2sgdGltZSBiZSBncmVhdGVyIHRoYW4gdGhlIGxhc3QgbW91bnQgdGltZS4pCisKK0NvbmZpZ3VyZSBub3cgZGVmYXVsdHMgdGhlIG1hbiBwYWdlcyBkaXJlY3RvcnkgdG8gL3Vzci9zaGFyZS9tYW4gb24KK0xpbnV4IHN5c3RlbXMuCisKK0UyZnNjayBub3cgb2ZmZXJzIHRvIHRydW5jYXRlIGlub2RlcyB3aGljaCBjb250YWluIHRvbyBtYW55IGJsb2NrcyAoc28KK3RoYXQgaV9ibG9ja3Mgd291bGQgb3ZlcmZsb3cuICBBbHNvIGZpeGVkIGhhbmRsaW5nIG9mIGxhcmdlIHNwYXJzZQorZmlsZXMuCisKK0UyZnNjayBub3cgbW9yZSBjb21wbGV0ZWx5IGNoZWNrcyBmb3Igc3ltbGluayB2YWxpZGl0eSwgaW5jbHVkaW5nCityZXF1aXJpbmcgTlVMTCB0ZXJtaW5hdGlvbiBhbmQgbGVuZ3RoIGNoZWNrcy4KKworRTJmc2NrIHdpbGwgb2ZmZXIgdG8gdHJ5IGZvcmNpbmcgYSBkaXNrIHdyaXRlIHRvIHJlbWFwIGEgYmFkIGJsb2NrCithZnRlciBmaW5kaW5nIGEgcmVhZCBlcnJvciB3aGVuIHJlYWRpbmcgYSBmaWxlc3lzdGVtIG1ldGFkYXRhIGJsb2NrLgorCitGaXhlZCBhIGJ1ZyBpbiBkZWJ1Z2ZzIHdoaWNoIGNhdXNlZCB0aGUgLWIgYW5kIC1zIG9wdGlvbnMgdG8gY3Jhc2gKK2RlYnVnZnMsIGFzIHdlbGwgYXMgYnJlYWtpbmcgdGhlIHRlc3RiLCBzZXRiLCBhbmQgY2xlYXJiIGZ1bmN0aW9ucy4KKworQWRkZWQgYSBibWFwIGNvbW1hbmQgdG8gZGVidWdmcyB3aGljaCBjYWxjdWxhdGVzIHRoZSBsb2dpY2FsIHRvCitwaHlzaWNhbCBibG9jayBtYXBwaW5nIGZvciBhIHBhcnRpY3VsYXIgaW5vZGUuCisKK0ZpeGVkIGEgYnVnIGluIGNvZGUgd2hpY2ggY2hlY2tlZCB0byBzZWUgaWYgYSBkZXZpY2Ugd2FzIG1vdW50ZWQgd2hpY2gKK3NvbWV0aW1lcyAocmFyZWx5KSBmYWlsZWQgaW4gdGhlIGNhc2Ugb2YgYSBwbGFpbiBmaWxlLgorCitGaXhlZCBhIGJ1ZyBpbiByZXNpemUyZnMgd2hlcmUgd2hlbiBpdCByZXBvcnRlZCBhbiBlcnJvciwgaXQgd291bGQKK3ByaW50IGEgbWVzc2FnZSBlcnJvbmVvdXNseSBpbmRpY2F0aW5nIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaGFkIGJlZW4KK3Jlc2l6ZWQgYmVmb3JlIGl0IGFib3J0ZWQuCisKK1doZW4gcmVzaXppbmcgYSBwbGFpbiBmaWxlIHdoaWNoIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUsCityZXNpemUyZnMgd2lsbCBhdHRlbXB0IHRvIGV4dGVuZGVkIHRoZSBmaWxlIHNvIHRoYXQgcHJvZ3JhbXMgbGlrZQorZTJmc2NrIHdpbGwgbm90IGNvbXBsYWluIHRoYXQgdGhlIGZpbGUgaXMgdG9vIHNtYWxsLgorCitSZXNpemUyZnMgd2lsbCBwcmludCB0aGUgYWN0dWFsIG5ldyBzaXplIG9mIHRoZSBmaWxlc3lzdGVtIHdoZW4gaXQgaXMKK2ZpbmlzaGVkIHJlc2l6aW5nLgorCitGaXhlZCBhIGJ1ZyBpbiBkZWJ1Z2ZzIHdoZXJlICJscyAtbCIgd291bGQgcmVwb3J0IGluY29ycmVjdGwgZmlsZSB0eXBlCitpbmZvcm1hdGlvbiBvbiBiaWctZW5kaWFuIHN5c3RlbXMuCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlZCBjb2xsaXNpb25zIHdpdGggQysrIHJlc2VydmVkIHdvcmRzLgorCitBZGRlZCBwb3J0YWJpbGl0eSBmaXhlcyBmb3IgYnVpbGRpbmcgZTJmc3Byb2dzIG9uIHRoZSBIVVJEIGFuZCBBSVguCisKK0FkZGVkIHRoZSBleHQyZWQgcHJvZ3JhbSBmb3IgY3JlYXRpb24gb2YgdGVzdCBjYXNlcy4gIChleHQyZWQgaGFzIG1hbnkKK2xpbWl0YXRpb25zIGFuZCBidWdzIHdoaWNoIG1ha2UgaXQgdW5zdWl0YWJsZSBmb3IgcHJvZHVjdGlvbiB1c2UuKQorCitUaGUgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMiBhbmQgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jayBub3cgdGFrZSBhIG5ldworZmxhZywgRVhUMl9ESVJCTE9DS19WMl9TVFJVQ1QsIHdoaWNoIHdpbGwgd2lsbCByZXZlcnNlIHdoZW4gdGhlCituYW1lX2xlbiBmaWVsZCBpcyBieXRlIHN3YW1wcGVkIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMsIHNpbmNlIGluIHRoZQorVjIgc3RydWN0dXJlLCBuYW1lX2xlbiBpcyBhIGNoYXIgZmllbGQgd2hpY2ggaXMgZG9lc24ndCBuZWVkIHRvIGJlCitieXRlIHN3YXBwZWQgLS0tIGV4Y2VwdCBpZiBhbiBvbGQtc3R5bGUga2VybmVsIGhhZCBieXRlLXN3YXBwZWQgdGhlCituYW1lX2xlbiBmaWVsZCBhcyBwYXJ0IG9mIHRoZSBWMSBzdHJ1Y3R1cmUuCisgIAorCitFMmZzcHJvZ3MgMS4yNyAoTWFyY2ggOCwgMjAwMikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgd2FybmluZyBtZXNzYWdlcyBmb3IgbWtlMmZzIG5vdyBnbyB0byBzdGFuZGFyZCBlcnJvci4KKworRml4ZWQgdG8gbWFrZSBzdXJlICJtYWtlIGNoZWNrIiBydW5zIGFsbCBvZiB0aGUgdGVzdCBwcm9ncmFtcyB3aXRoCitMRF9MSUJSQVJZX1BBVEggc2V0LCBzbyB0aGF0IHdlIHRlc3QgdGhlIGxpYnJhcmllcyBpbiB0aGUgYnVpbGQgdHJlZS4KKworVGhlIG1rZTJmcyBwcm9ncmFtIGNoZWNrcyB0aGUgYm9vdCBzZWN0b3IgZm9yIHRoZSBCU0QgZGlzayBsYWJlbCwgYW5kCithdm9pZHMgZXJhc2luZyBpdCBpZiBpdCBpcyB0aGVyZS4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNhdXNlZCBpdCB0byBjb3JlIGR1bXAgaWYgdGhlIGpvdXJuYWwKK2lub2RlIHdhcyBtaXNzaW5nIHdoZW4gaXQgd2FzIHN1cHBvc2VkIHRvIGJlIHRoZXJlLgorCitFMmZzY2sgbm93IHByaW50cyByYW5nZXMgaW4gcGFzcyA1IHdoZW4gcHJpbnRpbmcgZGVsdGFzIGZvciB0aGUgYmxvY2sKK2FuZCBpbm9kZSBiaXRtYXBzLgorCitEZWJ1Z2ZzJ3MgImxzIC1sIiBjb21tYW5kIG5vdyB3aWxsIHByaW50IG91dCB0aGUgZmlsZSB0eXBlIGluZm9ybWF0aW9uCitpbiB0aGUgZGlyZWN0b3J5IGVudHJ5LgorCitDcmVhdGUgbWFuIHBhZ2VzIGFuZCBoYXJkIGxpbmtzIGZvciBmc2NrLmV4dDMgYW5kIG1rZnMuZXh0My4gIElmCitta2UyZnMgaXMgaW52b2tlZCBhcyBta2ZzLmV4dDMsIGNyZWF0ZSB0aGUgZmlsZXN5c3RlbSB3aXRoIGEgam91cm5hbC4KKworRGVidWdmcyBjYW4gbm93IGV4YW1pbmUgdGhlIGV4cGVyaW1lbnRhbCBkaXJlY3RvcnkgaW5kZXhpbmcKK2luZm9ybWF0aW9uLgorCitGaXhlZCBidWcgaW4gZGVidWdmcyB3aGljaCBjYXVzZWQgaXQgdG8gY29yZSBkdW1wIGlmIG1vZGlmeV9pbm9kZSBpcworY2FsbGVkIHdpdGhvdXQgYW4gb3BlbiBmaWxlc3lzdGVtLgorCitUaGUgZGVidWdmcyBsc2RlbCBjb21tYW5kIG5vdyBydW5zIGl0cyBvdXRwdXQgdGhyb3VnaCBhIHBhZ2VyIGZpcnN0LgorCitXaGVuIGluc3RhbGxpbmcgbWFudWFsIHBhZ2VzLCByZW1vdmUgdGhlIGNvbXByZXNzZWQgbWFudWFsIHBhZ2VzIGZpcnN0LgorCitTeW5jaHJvbml6ZWQgd2l0aCBEZWJpYW4ncyBwYWNrYWdpbmcgaW5mb3JtYXRpb24gZm9yIGUyZnNwcm9ncy0xLjI2LTEuCisKK0ZpeCB0aGUgMi40IHJlc291cmNlIGxpbWl0YXRpb24gd29ya2Fyb3VuZCBpbnRyb2R1Y2VkIGluIDEuMjYgd2hpY2gKK2FjdHVhbGx5IGJyb2tlIHRoaW5ncyBvbiBtaXBzMzIsIHNwYXJjMzIsIGFuZCBBbHBoYSBwbGF0Zm9ybXMuCisKK1VwZGF0ZWQgdGhlIEkxOE4gY29kZSBzbyB0aGF0IGNhbGxzIHRvIHNldGxvY2F0ZShMQ19DVFlQRSwgMCkgYXJlIG1hZGUKKyh3aGljaCBpcyByZXF1aXJlZCBieSB0aGUgbmV3ZXIgbGliaW50bCBsaWJyYXJpZXMpLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHZhcmlvdXMgZ2NjIC1XYWxsIGNvbXBsYWludHMuCisKK0ZpeGVkIGEgZmV3IG1lbW9yeSBsZWFrcyBpbiB0aGUgZTJmc2NrIGpvdXJuYWxpbmcgY29kZSwgYW5kIGluIHRoZQoraXNtb3VudGVkIGNvZGUgY2hlY2tpbmcgZm9yIGEgc3dhcCBkZXZpY2UuCisKK0FkZCBuZXcgaW5vZGUgSS9PIGFic3RyYWN0aW9uIGludGVyZmFjZSB3aGljaCBleHBvcnRzIGFuIGlub2RlIGFzCithbiBJL08gb2JqZWN0LgorICAKK0V4cG9ydGVkIGV4dDJfZmlsZV9mbHVzaCBhcyBhIHB1YmxpYyBpbnRlcmZhY2UuCisgIAorSW4gZXh0Ml9maWxlX3dyaXRlLCB3ZSBub3cgbWFyayB0aGUgYnVmZmVyIHZvaWQgKiBhcmd1bWVudCBhcyBhIGNvbnN0LCBzaW5jZSBleHQyX2ZpbGVfd3JpdGUgZG9lc24ndCBtb2RpZnkgdGhlIGJ1ZmZlci4KKworTG90cyBvZiBzbWFsbCByYW5kb20gcG9ydGFiaWxpdHkgZml4ZXMgdG8gbWFrZSBlMmZzcHJvZ3MgYnVpbGQgdW5kZXIKK0FJWCAtLS0gZXZlbiB3aXRob3V0IHRoZSA1TCBjb21wYXRpYmlsaXR5IHRvb2xraXQsIGFuZCBldmVuIHVzaW5nIHRoZQordWJlci1jcmlwcGxlZCBBSVggbmF0aXZlIEMgY29tcGlsZXIuCisKKworRTJmc3Byb2dzIDEuMjYgKEZlYnJ1YXJ5IDMsIDIwMDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRHVtcGUyZnMgd2lsbCBrZWVwIGdvaW5nIG5vdyBpZiB0aGUgYmFkIGJsb2NrIGlub2RlIGNhbid0IGJlIHJlYWQuCisoUHJldmlvdXNseSBpdCBzdG9wcGVkIHdpdGggYSBmYXRhbCBlcnJvci4pCisKK0UyZnNjayB3aWxsIG5vdyBnaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHJ1biB0aGUgam91cm5hbCBldmVuIGlmIHRoZQorcmVjb3ZlcnkgZmxhZyBpcyBub3Qgc2V0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaWYgZTJmc2NrIGlzCit1c2luZyBhIGJhY2t1cCBzdXBlcmJsb2NrLCBzaW5jZSB0aGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyB3aWxsIG5ldmVyIGJlCitzZXQgaW4gdGhlIGJhY2t1cCBzdXBlcmJsb2NrIGNvcGllcy4KKworRTJmc2NrIG5vdyBhdXRvbWF0aWNhbGx5IGZpbmRzIHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycworZXZlbiB3aGVuIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgaXMgY29tcGxldGVseSBkZXN0cm95ZWQgZm9yIDJrIGFuZCA0aworZmlsZXN5c3RlbXMuICAoUHJldmlvdXNseSBpdCBqdXN0IGd1ZXNzZWQvYXNzdW1lZCB0aGF0IHdlIHdlcmUgZGVhbGluZword2l0aCBhIDFrIGZpbGVzeXN0ZW0gaW4gdGhhdCBjYXNlLCBhbmQgdXNlcnMgaGFkIHRvIG1hbnVhbGx5IHNwZWNpZnkKK3RoZSBiYWNrdXAgc3VwZXJibG9jayBudW1iZXIuKQorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hlcmUgaXQgZGVyZWZlcmVuY2VzIGEgbnVsbCBwb2ludGVyIHdoZW4gdGhlcmUKK2lzIGEgcHJvYmxlbSBvcGVuaW5nIGEgZmlsZXN5c3RlbSBpbiBwcmVlbiBtb2RlLgorCitFMmZzY2sgbm93IGhhbmRsZXMgZXh0ZXJuYWwgam91cm5hbHMgY29ycmVjdGx5OyBwcmV2aW91c2x5IGl0IHRyYXNoZWQKK3RoZSBleHRlcm5hbCBqb3VybmFsIGRldmljZSBpZiB0aGUgam91cm5hbCBuZWVkZWQgdG8gYmUgcmVwbGF5ZWQuCisKK1dvcmsgYXJvdW5kIHVsaW1pdCBpbmNvbXBhdGliaWxpdHkgcHJvYmxlbSBjYXVzZWQgYnkgcmVjZW50IDIuNAora2VybmVsczsgdGhlIHVuaXggSU8gbW9kdWxlIHdpbGwgYXV0b21hdGljYWxseSB0cnkgdG8gc2V0IGFueSByZXNvdXJjZQorbGltaXRzIHRvIGJlIGluZmluaXRlIG9uIHN0YXJ0dXAuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGVyZSBpdCB3YXNuJ3QgYWxsb2NhdGluZyBhIG5ldyBibG9jayBvciBpbm9kZQorYml0bWFwIGlmIGl0IHdhc24ndCBwcmVzZW50IGFuZCB0aGUgYmxvY2tzaXplIHdhcyAyayBvciA0ay4KKyAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzExNjk3NSkKKworRTJmc2NrIHdpbGwgY2hlY2sgYW5kIGZpeCBib3RjaGVkIGV4dDMgVjEgdG8gVjIgc3VwZXJibG9jayB1cGRhdGVzIGJ5CitjbGVhcmluZyB0aGUgbmV3IFYyIGZpZWxkcyBpZiB0aGV5IGRvIG5vdCBtYWtlIHNlbnNlIG9yIGlmIHRoZSBleHQzCitzdXBlcmJsb2NrIGlzIHZlcnNpb24gMSBzdXBlcmJsb2NrLgorCitFMmZzY2sgd2lsbCBhdXRvbWF0aWNhbGx5IHJlbG9jYXRlIHRoZSBleHQzIGpvdXJuYWwgZnJvbSBhIHZpc2libGUKK2ZpbGUgKGkuZS4sIC8uam91cm5hbCkgdG8gYW4gaGlkZGVuIGlub2RlIGlmIHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuCitvcGVuZWQgcmVhZC93cml0ZS4gIFRoaXMgYWxsb3dzIHRoZSB1c2VycyB0byBhZGQgYSBqb3VybmFsIHdoaWxlIHRoZQorZmlsZXN5c3RlbSBpcyBtb3VudGVkLCBidXQgdGhlIG5leHQgdGltZSB0aGUgc3lzdGVtIGlzIHJlYm9vdGVkLCB0aGUKK2pvdXJuYWwgZmlsZSB3aWxsIGRpc2FwcGVhci4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggYmFja3VwcywKK3N0dXBpZCBvcGVyYXRvcnMgd2l0aCBzdXBlcnVzZXIgYml0cywgZXRjLgorCitGaXggYSBidWcgaW4gZnNjayB3aGVyZSBpdCB3b3VsZCBub3Qgc3VwcG9ydCBhIGZpbGVzeXN0ZW0gdHlwZSBvZgorImF1dG8iIGlmIHRoZSBkZXZpY2Ugd2FzIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBMQUJFTD14eHggb3IgVVVJRD14eHguCisKK0ZzY2sgbm93IHN1cHBvcnRzIGZzdGFiIGVudHJpZXMgb2YgdGhlIGZvcm0gImV4dDMsZXh0MiIuICBJdCB3aWxsIGFsc28KK2F1dG9tYXRpY2FsbHkgaWRlbnRpZnkgcmVpc2VyZnMgZmlsZXN5c3RlbXMuCisKK1RoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIHNwYXduZWQgYnkgZnNjayBjYW4gbm93IGJlIGxpbWl0ZWQgdXNpbmcgdGhlCitGU0NLX01BWF9JTlNUIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitGc2NrIG5vdyBzZWFyY2hzIHRoZSBMVk0gcHJvYyBoaWVyYXJjaHkgdG8gZmluZCBsb2dpY2FsIHZvbHVtZXMgd2hpY2gKK3Nob3VsZCBiZSBzZWFyY2hlZCBmb3IgIFVVSUQgYW5kIGxhYmVsIGluZm9ybWF0aW9uLgorCitXb3JrIGFyb3VuZCBhIGJ1ZyBpbiAyLjQuMTArIGtlcm5lbHMgYnkgdHJ5aW5nIHRvIHVuc2V0IHRoZSBmaWxlc2l6ZQorbGltaXQgaWYgYXQgYWxsIHBvc3NpYmxlLCB3aGVuIG9wZW5pbmcgYSBibG9jayBkZXZpY2UuICAoVGhlIGZpbGVzaXplCitsaW1pdCBzaG91bGRuJ3QgYmUgYXBwbGllZCBhZ2FpbnN0IHdyaXRlcyB0byBhIGJsb2NrIGRldmljZS4pCisKK0luIG1rZTJmcyBhbmQgZTJmc2NrLCBzcGVjaWZ5aW5nIHRoZSAtYyBvcHRpb24gdHdpY2Ugd2lsbCBub3cgZG8KK2EgcmVhZC93cml0ZSB0ZXN0IG9uIHRoZSBkaXNrLiAgVXBkYXRlIHRoZSBtYW4gcGFnZXMgdG8gZW5jb3VyYWdlCit1c2luZyB0aGUgLWMgb3B0aW9uLCBhbmQgdG8gZGlzY291cmFnaW5nIHJ1bm5pbmcgYmFkYmxvY2tzIHNlcGFyYXRlbHksCitzaW5jZSB1c2VycyB0ZW5kIHRvIGZvcmdldCB0byBzZXQgdGhlIGJsb2Nrc2l6ZSB3aGVuIHJ1bm5pbmcgCitiYWRibG9ja3MuCisKK01rZTJmcyBub3cgYXV0b21hdGljYWxseSBjbGVhcnMgdGhlIGltbXV0YWJsZSBhdHRyaWJ1dGUgb24gYQorcHJlLWV4aXN0aW5nIC5qb3VybmFsIGZpbGUgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBmYWlsZWQgYXR0ZW1wdCB0bworYWRkIGEgam91cm5hbCB0byBhbiBhbHJlYWR5eS1tb3VudGVkIGZpbGVzeXN0ZW0uCisKK0ZpeGVkIG1rZTJmcydzIGV4aXQgY29kZXMgdG8gY29uc2lzdGVudGx5IGluZGljYXRlIHdoZW4gdGhlIG1rZTJmcworb3BlcmF0aW9uIGZhaWxlZC4KKworTWtlMmZzIG5vdyBjcmVhdGVzIHRoZSBsb3N0K2ZvdW5kIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb25zIG9mIDA3MDAsCitzbyB0aGF0IGZpbGVzIHRoYXQgaGFkIHByZXZpb3VzbHkgbGl2ZWQgaW4gcHJvdGVjdGVkIGRpcmVjdG9yeSBhcmUKK3NhZmUgaWYgdGhleSBnZXQgZHJvcHBlZCBpbiBsb3N0K2ZvdW5kIGFuZCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IKK2RvZXNuJ3QgZGVhbCB3aXRoIGltbWVkaWF0ZWx5LiAgKEFkZHJlc3NlcyBEZWJpYW4gI2J1ZyAxMTg0NDMpCisKK01rZTJmcyBhbmQgZTJmc2NrIChhbmQgYWxsIHByb2dyYW1zIHRoYXQgdXNlIHRoZQorZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQgZnVuY3Rpb24pIHdpbGwgbm93IHByb3Blcmx5IGlkZW50aWZ5IHRoYXQgYQorZGV2aWNlIGlzIG1vdW50ZWQsIGV2ZW4gaW4gY2FzZXMgd2hlcmUgZGV2ZnMgaGFzIGNvbmZ1c2VkIHRoaW5ncyB3aXRoCittdWx0aXBsZSBkZXZpY2VzIG5hbWVzIHdpdGggdGhlIHNhbWUgaWRlbnRpdHksIG9yIGlmIGEgZGltLXdpdHRlZAorc3lzdGVtIGFkbWluaXN0cmF0b3IgaGFzIGRvbmUgc29tZXRoaW5nIHN0dXBpZCBsaWtlIGNyZWF0aW5nIGRldmljZQorZmlsZSBhbGlhc2VzIGluIHRoZWlyIGhvbWUgZGlyZWN0b3J5LiAgQWxzbyBub3cgY2hlY2tzIGZvciBzd2FwIGRldmljZXMKK2J5IHVzaW5nIC9wcm9jL3N3YXBzLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMDY2MjIpCisKK0FkZGVkIGEgbmV3IG9wdGlvbiAoLVQpIHRvIHR1bmUyZnMgd2hpY2ggc2V0cyB0aGUgdGltZSBhIGZpbGVzeXN0ZW0KK3dhcyBsYXN0IGNoZWNrZWQuCisKK1NwZWVkIHVwIGUyaW1hZ2Ugd2hlbiBjcmVhdGluZyBzcGFyc2UgcmF3IGltYWdlIGZpbGVzIGJ5IG9wdGltaXppbmcKK2F3YXkgZXhjZXNzIGxzZWVrKCkgc3lzdGVtIGNhbGxzLgorCitGaXggc3VwcG9ydCBvZiBsYXJnZSAoPiAyR0IpIGZpbGVzIHdoZW4gdXNlZCBhcyBhIGZpbGVzeXN0ZW0gaW4KK21rZTJmcywgdHVuZTJmcywgZGVidWdmcywgYW5kIGZpbmRzdXBlci4KKworRGVidWdmcydzIHN0YXQgYW5kIGljaGVjayBjb21tYW5kcyBub3cgcHJvcGVybHkgZGVhbHMgd2l0aCBsYXJnZSAoPgorMkdCKSBmaWxlcy4KKworRGVidWdmcydzIHNldF9zdXBlcl92YWx1ZSBjb21tYW5kIG5vdyBwcmludHMgb3V0IHRoZSBsaXN0IG9mIHZhbGlkCitzdXBlcmJsb2NrIGZpZWxkcyB3aGljaCBjYW4gYmUgc2V0IHVzaW5nIHRoZSBjb21tYW5kLgorCitEZWJ1Z2ZzJ3Mgcm0gYW5kIGtpbGxfZmlsZSBjb21tYW5kIG5vdyB1cGRhdGVzIHRoZSBzdXBlcmJsb2NrIGZyZWUgYmxvY2sKK2FuZCBpbm9kZSBjb3VudHMsIHRodXMga2VlcGluZyB0aGUgZmlsZXN5c3RlbSBjb25zaXN0ZW50LgorCitEZWJ1Z2ZzJ3MgbHNkZWwgY29tbWFuZCBub3cgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggYWxsb3dzCit0aGUgdXNlciB0byBvbmx5IHNlZSB0aGUgbW9zdCByZWNlbnRseSBkZWxldGVkIGZpbGVzLgorCitBIG5ldyBjb21tYW5kICh1bmRlbCkgd2FzIGFkZGVkIHRvIGRlYnVnZnMgd2hpY2ggYXV0b21hdGVzCit1bmRlbGV0aW5nIGEgZGVsZXRlZCBpbm9kZSBhbmQgbGlua2luZyBpdCBiYWNrIHRvIGEgZGlyZWN0b3J5LgorCitEZWJ1Z2ZzJ3MgbHMgY29tbWFuZCBub3cgdGFrZXMgYSBuZXcgb3B0aW9uLCAtZCwgd2hpY2ggbGlzdHMgCitkZWxldGVkIGRpcmVjdG9yeSBlbnRyaWVzLgorCitEZWJ1Z2ZzJ3MgdGVzdGIsIGZyZWViLCBzZXRiLCBhbmQgZmluZF9mcmVlX2Jsb2NrIGNvbW1hbmRzIG5vdyB0YWtlIGFuCitvcHRpb25hbCBjb3VudCBhcmd1bWVudC4KKworQWRkIHN1cHBvcnQgZm9yIGEgbmV3IGV4dDIgZmlsZSBhdHRyaWJ1dGUsIEVYVDJfTk9UQUlMX0ZMLCB3aGljaCB3aWxsCitiZSB1c2VkIHRvIHNpZ25hbCB0aGF0IGEgcGFydGljdWxhciBpbm9kZSBzaG91bGQgbm90IGJlIGVsaWdpYmxlIGZvcgordGFpbC1tZXJnaW5nIC0tLSB0aGlzIGlzIG5lZWRlZCBmb3IgcHJvZ3JhbXMgbGlrZSBMSUxPLgorCitUaGUgZmluZHN1cGVyIChhbiB1bnJlbGVhc2VkLCB1bmluc3RhbGxlZCB1dGlsaXR5IHByb2dyYW0pIGhhcyBiZWVuCitpbXByb3ZlZCB0byBhZGQgZXh0cmEgdmFsaWRpdHkgY2hlY2tzIGFuZCB0byBhZGQgYSBwcm9ncmVzcyBtZXRlci4KKyhJdCBpcyBzdGlsbCBhbiB1bnN1cHBvcnRlZCBwcm9ncmFtOyB0aGUgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgd2F5IHRvCityZWNvdmVyIGZyb20gYSB0cmFzaGVkIHBhcnRpdGlvbiB0YWJsZSBpcyB0byB1c2UgZ3BhcnQ7IGZpbmRzdXBlciBpcworZm9yIHdpemFyZHMgb25seS4gIDotKQorCitEZWJ1Z2ZzIHdhcyBmaXhlZCB0byBjb21waWxlIHdpdGggImNvbmZpZ3VyZSAtLWRpc2FibGUtc3dhcGZzIi4KKworQ2xlYW5lZCB1cCB2YXJpb3VzIG1hbnVhbCBwYWdlcy4gICAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzExOTYyNCwgIzEyMDE3MSkKKworQWRkZWQgbmV3IHRyYW5zbGF0aW9uIGZpbGUgZm9yIFR1cmtpc2guCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGdlbmVyYWwgZ2NjIC1XYWxsIGNvbXBsYWludHMuCisKK0UyZnNwcm9ncyAobW9zdGx5KSB3b3JrcyB3aXRoIHRoZSBkaWV0bGliYy4KKworVGhlIHByb2dyYW1taW5nIHRleGluZm8gZmlsZSBoYXMgYmVlbiBleHBhbmRlZCB0byBpbmNsdWRlIGRlc2NyaXB0aW9uCitvZiBhZGRpdGlvbmFsIGxpYmV4dDJmcyBmdW5jdGlvbnMuICAoU3RpbGwgbm90IGNvbXBlbHRlbHkgZG9uZSwgYnV0IGEKK2xvdCBvZiB0aGUgbW9yZSBpbXBvcnRhbnQgZnVuY3Rpb25zIGhhdmUgYmVlbiBkb2N1bWVudGVkLikKKworQWRkZWQgYSB1bWFzayBzdHJ1Y3R1cmUgdG8gc3RydWN0X2V4dDJfZmlsc3lzLCB3aGljaCBjdXJyZW50bHkgb25seQorbW9kaWZpZXMgdGhlIGJlaGF2aW91ciBvZiBleHQyZnNfbWtkaXIoKSwgYnV0IGlmIHdlIGFkZCBhbnkgZmlsZQorY3JlYXRpb24gZnVuY3Rpb25zIHRvIGxpYmV4dDJmcywgd2Ugc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRoZXkgcmVzcGVjdAordGhlIHVtYXNrIHNldHRpbmcuCisKK1RoZSBidWlsZC1ycG0gc2NyaXB0IHdhcyBmaXhlZCB0byBiZSBhIGJpdCBtb3JlIHNhZmUuCisKK1RoZSB0ZXN0cycgTWFrZWZpbGUgbm93IGhhcyBhIHdheSBvZiBhdXRvbWF0aW5nIHRlc3QgY2FzZSBjcmVhdGlvbiAKK2ZvciBlMmZzY2ssIHVzaW5nICJtYWtlIHRlc3RuZXciLgorCitDcmVhdGVkIGEgbmV3IGZ1bmN0aW9uLCBleHQyZnNfZGlyX2l0ZXJhdGUyIHdoaWNoIHBhc3NlcyBtb3JlCitpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKGlkZW50aWNhbCB0byB0aGUgb25lIHVzZWQgYnkKK2V4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUpLiAgVGhlIGRpcmVjdG9yeSBpdGVyYXRvciBmdW5jdGlvbnMgdGFrZSBhCituZXcgZmxhZywgRElSRU5UX0ZMQUdfSU5DTFVERV9SRU1PVkVELCB3aGljaCB3aWxsIHJldHVybiBkZWxldGVkCitkaXJlY3RvcnkgZW50cmllcy4gIElmIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgZGVsZXRlZCwgdGhlIGNhbGxiYWNrCitmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBlbnRyeSBwYXJhZW10ZXIgc2V0IHRvCitESVJFTlRfREVMRVRFRF9GSUxFLgorICAKK0FkZGVkIG5ldyBmdW5jdGlvbnMsIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0cyBhbmQKK2V4dDJmc19ibG9ja19hbGxvY19zdGF0cywgd2hpY2ggdGFrZXMgdXBkYXRlcyBibG9jay9pbm9kZSBhbGxvY2F0aW9uCitzdGF0aXN0aWNzIGluIHRoZSBiaXRtYXBzLCBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kIHN1cGVyYmxvY2sKK3doZW4gaW5vZGVzIG9yIGJsb2NrcyBhcmUgYWxsb2NhdGVkIG9yIGRlYWxsb2NhdGVkLgorCisKK0UyZnNwcm9ncyAxLjI1IChTZXB0ZW1iZXIgMjAsIDIwMDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHByaW1hcmlseSBhIGJ1Zy1maXggcmVsZWFzZTsgbm8gbmV3IGZlYXR1cmVzIHdlcmUgYWRkZWQsIGJ1dAordGhlcmUgYXJlIGEgbnVtYmVyIG9mIGVtYmFyYXNzaW5nIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMgYXBwbGllZC4KKworRml4IGEgYnVnIG1rZTJmcyB3aGljaCBjYXVzZXMgc3RhY2sgZ2FyYmFnZSB0byBiZSB3cml0dGVuIHRvIGRpc2sgd2hlbgoremFwcGluZyBkaXNrIHNlY3RvcnMuICAoVGhpcyBidWcgY291bGQgY2F1c2UgbWtlMmZzIHRvIGNvcmUgZHVtcCBmb3IKK3NvbWUga2VybmVscywgSSBzdXNwZWN0IHdpdGggc2VjdXJpdHkgZW5oYW5jZW1lbnQgcGF0Y2hlcy4pCisKK1JlbW92ZSB1bm5lZWRlZCAjaW5jbHVkZSBvZiA8bGludXgvY29uZmlnLmg+IHdoaWNoIHdhcyBicmVha2luZworYnVpbGRpbmcgZTJmc3Byb2dzIG9uIHRoZSBIdXJkLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMTI0MTQuKQorCitVcGRhdGVkIHR1bmUyZnMgbWFuIHBhZ2UgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IGFkZGluZyBvciByZW1vdmluZyBhCitqb3VybmFsIGRvZXNuJ3QgcmVxdWlyZSBydW5uaW5nIGUyZnNjay4KKworUmVtb3ZlIHVzZSBvZiBBQ19SRVFVSVJFIGZyb20gYXV0b2NvbmYgd2hpY2ggaGFkIGJlZW4gdXNlZCB0byBwcmV2ZW50CitBQ19DQU5PTklDQUxfSE9TVCBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZTsgdW5mb3J0dW5hdGVseSB0aGlzIGNhdXNlcworcmVjZW50IGF1dG9jb25mIHRvIGJvbWIgb3V0IHNpbmNlIHRoZXkgZG9uJ3QgYWxsb3cgQUNfUkVRVUlSRSB0byBiZQordXNlZCBvdXRzaWRlIG9mIGF1dG9jb25mIG1hY3Jvcy4gIEZvcnR1bmF0ZWx5LCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUKK25lY2Vzc2FyeSBhbnkgbW9yZSwgYW55d2F5LgorCitFMmZzY2sgd2lsbCBub3cgbm90IGZhbGwgYmFjayB0byBhbiBhbHRlcm5hdGUgc3VwZXJibG9jayBpZiB0aGUgdXNlcgorc3BlY2lmaWVzIHRoZSBzdXBlcmJsb2NrIGxvY2F0aW9uIGV4cGxpY2l0bHkgb24gdGhlIGNvbW1hbmQtbGluZS4KK1RoaXMgYWxsb3dzIGVhc2llciByZWNvdmVyeSBmcm9tIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBwcmltYXJ5CitzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cHMgYXJlIHNsaWdodGx5IGNvcnJ1cHRlZCwgYnV0IHRoZSBiYWNrdXAKK3N1cGVyYmxvY2tzIGFyZSBjb21wbGV0ZWx5IGJyb2tlbi4gIAorCitGaXggcHJvYmxlbSB3aGljaCBjYXVzZWQgY29tcGlsZV9ldCBhbmQgbWtfY21kcyB0byBibG93IHVwIGlmCitlMmZzcHJvZ3Mgd2FzIGluIGEgZGlyZWN0b3J5IHdpdGggYSBwYXRobmFtZSB0aGF0IGNvbnRhaW5lZCBzcGFjZXMuCisKK1dlIGFyZSBub3cgbW9yZSBwYXJhbm9pZCBhYm91dCBjaGVja2luZyB0aGUgZW50cnkgaW4gL2V0Yy9tdGFiIHRvIG1ha2UKK3N1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhbGx5IG1vdW50ZWQsIHNpbmNlIHNvbWUgYnJva2VuIGRpc3RyaWJ1dGlvbnMKKyhyZWFkOiBTbGFja3dhcmUpIGRvbid0IGluaXRpYWxpemUgL2V0Yy9tdGFiIGJlZm9yZSBjaGVja2luZyBub24tcm9vdAorZmlsZXN5c3RlbXMuICAoU2xhY2t3YXJlIGFsc28gZG9lc24ndCBjaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtCitzZXBhcmF0ZWx5LCBhbmQgcmVib290IGlmIHRoZSByb290IGZpbGVzeXN0ZW0gaGFkIGNoYW5nZXMgYXBwbGllZCB0bworaXQsIHdoaWNoIGlzIGRhbmdlcm91cyBhbmQgYnJva2VuLCBidXQgdGhlcmUncyBub3RoaW5nIEkgY2FuIGRvIGFib3V0Cit0aGF0LikKKworTWFrZSBVVUlEIGxpYnJhcnkgQysrIGZyaWVuZGx5IGJ5IGFkZGluZyBhcHByb3ByaWF0ZSBleHRlcm4gIkMiCitkZWNsYXJhdGlvbnMgYW5kIHVzaW5nIGNvbnN0IGluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisKK0ZpeCB1cCB0aGUgY29tX2VyciB0ZXhpbmZvIGZpbGUgc28gdGhhdCBpdCBjYW4gcHJvZHVjdCBhIHZhbGlkIGluZm8KK2ZpbGUgKHByZXZpb3VzbHksIGl0IGNvdWxkIG9ubHkgYmUgdXNlZCB0byBnZW5lcmF0ZSBwYXBlcgorZG9jdW1lbnRhdGlvbiB1c2luZyB0ZXhpbmZvLnRleCkuCisKKworRTJmc3Byb2dzIDEuMjRhIChTZXB0ZW1iZXIgMiwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBicm93bi1wYXBlciBidWcgaW4gbWtlMmZzIHdoaWNoIGNhdXNlZCBpdCB0byBzZWdmYXVsdCB3aGVuCitwcmludGluZyB0aGUgdmVyc2lvbiBzdHJpbmcuCisKKworRTJmc3Byb2dzIDEuMjQgKEF1Z3VzdCAzMCwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JldmVydCB0aGUgQkxLR0VUU0laRTY0IHN1cHBvcnQsIHNpbmNlIGZvciBzb21lIGRpc3RyaWJ1dGlvbnMsIHRoaXMKK2lvY3RsIGhhcyBiZWVuIHVzZWQgYnkgYW4gdW5vZmZpY2lhbCBrZXJuZWwgcGF0Y2ggdG8gdXBkYXRlIHRoZSBsYXN0CitzZWN0b3Igb24gdGhlIGRpc2ssIGFuZCB0aGlzIHdhcyBjYXVzaW5nIGRpc2sgY29ycnVwdGlvbiBwcm9ibGVtcyBhcyBhCityZXN1bHQuCisKK01rZTJmcyBpcyBub3cgbW9yZSBjYXJlZnVsIGFib3V0IHphcHBpbmcgc3dhcCBzcGFjZSBzaWduYXR1cmVzIGFuZAorb3RoZXIgZmlsZXN5c3RlbS9yYWlkIHN1cGVyYmxvY2sgbWFnaWMgdmFsdWVzIHNvIHRoYXQgcHJvZ3JhbXMgbGlrZQorbW91bnQgd2hvIHRyeSB0byB1c2UgaHVlcmlzdGljcyB0byBkZXRlcm1pbmUgdGhlIGZpbGVzeXN0ZW0gdHlwZSBvZiBhCitwYXJ0aXRpb24gYXJlIGxlc3MgbGlrZWx5IHRvIGJlIGNvbmZ1c2VkLgorCitFMmZzY2sgd2lsbCBubyBsb25nZXIgY29tcGxhaW4gaWYgdGhlIHRoZSBtb2RlIG9mIEVYVDJfUkVTSVpFX0lOTyBpcyBhCityZWd1bGFyIGZpbGUgKHNpbmNlIEFuZHJlYXMgRGlsZ2VyJ3Mgb24tbGluZSByZXNpemluZyB0b29scyB3aWxsIHNldAoraXRzIG1vZGUgYml0cykuCisKK0ZpeGVkIHNvbWUgbWlub3IgdGV4aW5mbywgbWFuIHBhZ2VzIG5pdHMgZm9yIHNwZWxsaW5nIGVycm9ycywKK3RleGluZm8gd2FybmluZ3MsIGV0Yy4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTEwNjIxLikKKworRTJmc3Byb2dzIHByb2dyYW0gbm8gbG9uZ2VyIHByaW50IHRoZSBmaWxlc3lzdGVtIHZlcnNpb24gbnVtYmVyCisoaS5lLiAwLjViKSwgc2luY2UgaXQgb25seSBjb25mdXNlcyBwZW9wbGUgYW5kIGRvZXNuJ3Qgc2VydmUgYW55IHJlYWwKK3B1cnBvc2UuCisKK0UyZnNjayB3aWxsIG9uY2UgYWdhaW4gY29tcGlsZSB1bmRlciBsaWJjNSwgc2luY2UgaXQgd2lsbCBzdXBwbHkgaXRzCitvd24gdmVyc2lvbiBvZiBzdHJubGVuIGlmIG5lY2Vzc3NhcnkuCisKK21rZTJmcyBhbmQgdHVuZTJmcyB3aWxsIGFsbG93IHRoZSB1c2Ugb2YgVVVJRD0gb3IgTEFCRUw9IHNwZWNpZmllcnMKK3doZW4gc3BlY2lmeWluZyB0aGUgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UuICB0dW5lMmZzIHdpbGwgYWxzbyBzZWFyY2gKK2RldmljZXMgbG9va2luZyBmb3IgdGhlIGV4dGVybmxhIGpvdXJuYWwgZGViaWNlIHdoZW4gcmVtb3ZpbmcuICAKKworRTJmc3Byb2dzIDEuMjMgKEF1Z3VzdCAxNSwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKEVBKTsgZTJmc2NrIHdpbGwKK2NvcnJlY3RseSBoYW5kbGUgYSBmaWxlc3lzdGVtIHdpdGggRUEncyBhbmQgY2hlY2sgdGhlIEVBIGJsb2NrcyBmb3IKK2NvcnJ1cHRpb25zLgorCitFMmZzY2sncyBzeW1saW5rIHNhbml0eSBjaGVja2luZyBoYXMgYmVlbiBjbGVhbmVkIHVwLiAgSXQgbm93IGNoZWNrcwordGhlIGlfc2l6ZSB2YWx1ZSBvZiBmYXN0IHN5bWxpbmtzLCBhbmQgY2hlY2tzIGZvciBpbW11dGFibGUgZmxhZ3MKK2JlaW5nIHNldCBvZiBzeW1saW5rcywgZXRjLgorCitFMmZzY2sgbm93IG9mZmVycyB0byBjbGVhciBpbm9kZXMgd2hpY2ggYXJlIHNwZWNpYWwgZmlsZXMgdGhhdCBoYXZlIGEKK25vbi16ZXJvIGlfYmxvY2tzIG9yIGlfc2l6ZSBmaWVsZC4gIChUaGUgaV9zaXplIGZpZWxkIGNoZWNrIHdhcyBpbiB0aGUKK3ByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGNvZGUsIGJ1dCBkdWUgdG8gYSBidWcgaXQgZGlkbid0IG9mZmVyIHRvCitjbGVhciB0aGUgaW5vZGUgdW5sZXNzIGlfc2l6ZSBhbmQgaV9zaXplX2hpZ2ggd2VyZSBib3RoIG5vbi16ZXJvLikKKworRTJpbWFnZSBjYW4gbm93IGNyZWF0ZSAicmF3IiBpbWFnZSBmaWxlcywgd2hpY2ggb25seSBjb250YWluIHRoZQorZmlsZXN5c3RlbSBtZXRhZGF0YSBwbGFjZWQgaW4gYSBzcGFyZSBmaWxlIHNvIHRoYXQgZTJmc2NrLCBkdW1wZTJmcywKK2RlYnVnZnMsIGV0Yy4sIGNhbiBiZSBydW4gZGlyZWN0bHkgb24gdGhlIHJhdyBpbWFnZSBmaWxlLgorCitBZGQgc3VwcG9ydCBmb3IgdGhlIDY0LWJpdCBibG9jayBkZXZpY2UgcGF0Y2hlcy4KKworRml4ZWQgYnVncyBpbiBjcmVhdGluZyBleHRlcm5hbCBqb3VybmFscyB3aXRoIGEgMWsgYmxvY2tzaXplLgorCitBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBleHRlcm5hbCBqb3VybmFscyAoc28gbG9uZyBhcyB0aGUgZXh0ZXJuYWwKK2pvdXJuYWwgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBmaWxlc3lzdGVtKSBpbiBlMmZzY2suCisKK1JlbW92ZSByZXF1aXJlbWVudCBmb3IgbmVlZGluZyB0byBydW4gZnNjayBvbiBhIGZpbGVzeXN0ZW0gYWZ0ZXIKK3JlbW92aW5nIGEgam91cm5hbCAoZWl0aGVyIGludGVybmFsIG9yIGV4dGVybmFsKS4KKworVGhlIG1hbiBwYWdlcyBub3cgZG9jdW1lbnQgaG93IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGV4dGVybmFsIGpvdXJuYWxzLgorCitTcGVlZCB1cCB0aGUgY2hlY2sgb2YgYW4gZXh0MyBmaWxlc3lzdGVtcyBieSBhdm9pZGluZyBhIG5lZWRsZXNzIGZsdXNoCitvZiBhbGwgb2YgdGhlIHN1cGVyYmxvY2sgYW5kIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLgorCitTcGVlZCB1cCBjcmVhdGluZyBhbiBpbnRlcm5hbCBqb3VybmFsIHVzaW5nIHR1bmUyZnMgaW4gdGhlIGNhc2Ugd2hlcmUKK3RoZSBmaWxlc3lzdGVtIGhhcyBhIGxvdCBibG9ja3MgYWxyZWFkeSBhbGxvY2F0ZWQuCisKK1R1bmUyZnMgaGFzIGJlZW4gZml4ZWQgdG8gbWFrZSBzdXJlIHRoYXQgb25seSBlcnJvciBtZXNzYWdlcyBnbyB0bworc3RkZXJyLCBhbmQgbm9ybWFsIG1lc3NhZ2UgZ28gdG8gc3Rkb3V0LiAoQWRkcmVzc2VzIERlYmlhbiBidWcgIzEwODU1NSkKKworRml4ZWQgYSBtaW5vciBidWcgaW4gbWtlMmZzOyBpZiAtTyBub25lIGlzIHBhc3NlZCB0byBta2UyZnMsIGl0IHdpbGwKK25vdyBub3Qgc2V0IHRoZSBzcGFyc2Vfc3VwZXIgZmVhdHVyZS4gIChBZGRyZXNzZXMgRGViaWFuIGJ1ZyAjMTA4MTY1KQorCitBZGQgc3VwcG9ydCBpbiBmc2NrIGZvciB0aGUgZmlsZXN5c3RlbSB0eXBlICJhdXRvIi4KKworRnNjayAtQSB3aWxsIG5vdCB0cnkgdG8gaW50ZXJwcmV0IGRldmljZSBuYW1lcyBmb3IgZmlsZXN5c3RlbXMgd2hpY2gKK2hhdmUgYSBwYXNzIG51bWJlciBpcyAwLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMDY2OTYpLgorCitGc2NrIHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSBpZiBub3cgdmFsaWQgZmlsZXN5c3RlbXMgYXJlIHBhc3NlZCB0bworaXQuICAoQWRkcmVzc2VzIERlYmlhbiBCdWcgIzEwNzQ1OC4pCisKK0UyZnNjayBub3cgZ2l2ZXMgYW4gZXhwbGljaXQgd2FybmluZyBpZiB0aGVyZSBmaWxlc3lzdGVtIHN0aWxsIGhhcworZXJyb3JzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bi4gKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMDQ1MDIpCisKK0UyZnNjayB3aWxsIHNldCB0aGUgRVhUMl9FUlJPUl9GUyBmbGFnIGlmIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sKK3JlZmxlY3RzIGFuIGVycm9yLiAgRTJmc2NrIHdpbGwgYWxzbyBub3QgcnVuIHRoZSBvcnBoYW4gbGlzdCBpZiB0aGUKK2ZpbGVzeXN0ZW0gY29udGFpbnMgZXJyb3JzLCBzaW5jZSB0aGUgb3JwaGFuIGxpc3QgbWlnaHQgYmUgY29ycnVwdGVkLgorCitFMmZzY2sgbm93IHByaW50cyB0aGUgbnVtYmVyIG9mIGxhcmdlIGZpbGVzIHdoZW4gZ2l2ZW4gdGhlIC12IG9wdGlvbi4KKworRml4ZWQgbWlub3IgbWVtb3J5IGxlYWtzIGluIGUyZnNjay4KKworU29tZSBtaW5vciBtYW4gcGFnZXMgdXBkYXRlcy4gKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMzMDgzMywgIzEwODE3NCkKKworCitFMmZzcHJvZ3MgMS4yMiAoSnVuZSAyMiwgMjAwMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sncyBoYW5kbGluZyBvZiBvcnBoYW4gaW5vZGVzIHdoaWNoIGFyZSBzcGVjaWFsCitmaWxlcyAoaS5lLiwgYmxvY2svY2hhcmFjdGVyIGRldmljZSBmaWxlcywgbmFtZWQgRklGTydzLCBldGMuKS4KKworRml4ZWQgYSBidWcgYWNjaWRlbnRhbGx5IGludHJvZHVjZWQgaW4gZTJmc3Byb2dzIDEuMjEgd2hpY2ggY2F1c2VkCit0dW5lMmZzIHRvIGZhaWwgYXQgYWRkaW5nIGEgam91cm5hbCB0byBhIG1vdW50ZWQgZmlsZXN5c3RlbS4KKworRml4ZWQgYSBmZXcgYmlnLWVuZGlhbiBidWdzIGluIGUyZnNwcm9ncworCSogVGhlIGRpcmVjdG9yeSBibG9jayBmdW5jdGlvbnMgd2VyZSBhY2NpZGVudGFsbHkgcmVwb3J0aW5nCisJCXNvbWUgZGlyZWN0b3JpZXMgYXMgY29ycnVwdGVkIHdoZW4gdGhleSB3ZXJlbid0LgorCSogSWYgZTJmc3Byb2dzIGlzIGNvbXBpbGVkIC0tZGlzYWJsZS1zd2FwZnMsIHRoZSBDIGxhbmd1YWdlIAorCQllcXVpdmFsZW50cyB3ZXJlbid0IGJlaW5nIGluY2x1ZGVkIGZvciBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KKwkJKEZpeGVzIERlYmlhbiBidWcgIzEwMTY4NikuCisKK0ZpeGVkIGEgSHVyZCBjb21waWxhdGlvbiBwcm9ibGVtLiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICMxMDEzNjEpCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNlIHBsYXRmb3JtIGluZGVwZW5kZW50IG1ldGhvZCBvZiBkZWZpbmluZyB0aGUgQkxLRkxTQlVGIGFuZCBGREZMVVNICitpb2N0bHMsIGFuZCBhbGxvdyB0aGVtIHRvIGJlIGRlZmluZWQgZm9yIG5vbi1pMzg2IHBsYXRmb3Jtcy4KKworVGhlIHV1aWQuaCBoZWFkZXIgZmlsZSBpcyBub3cgcHJvdGVjdGVkIGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucy4KKworRTJmc3Byb2dzIGlzIG5vdyBiZWluZyBkZXZlbG9wZWQgdXNpbmcgQml0S2VlcGVyLiAgQ2hhbmdlZCB0aGUgdGVzdAorc2NyaXB0cyB0byBkZWFsIHdpdGggQksncyBzdHJpcHBpbmcgQ1IgY2hhcmFjZ3RlcnMgZnJvbSB0ZXh0IGZpbGVzLAorYW5kIGNoYW5nZWQgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZS5pbiB0byBhdm9pZCBpbmNsdWRpbmcgQml0S2VlcGVyCitmaWxlcyB3aGVuIGdlbmVyYXRpbmcgdGhlIHNvdXJjZSB0YXJiYWxsLgorCisKK0UyZnNwcm9ncyAxLjIxIChKdW5lIDE1LCAyMDAxKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZGVkIG5ldyBjb25maWd1cmUgZmxhZ3Mgd2hpY2ggYWxsb3cgYSBzdWJzZXQgZTJmc3Byb2dzIHRvIGJlIGJ1aWx0OwordGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3IgYm9vdCBmbG9vcGllcywgc2luY2UgdGhlIHJlc3VsdGluZyBzaGFyZWQKK2xpYnJhcmllcyBhbmQgcHJvZ3JhbXMgYXJlIHNsaW1tZWQgZG93biBieSByZW1vdmluZyBmZWF0dXJlcyB0aGF0CithcmVuJ3QgbmVjZXNzYXJ5IGZvciBhIGJvb3QgZmxvcHB5LiAgVGhlIG5ldyBmbGFncyB0aGF0IHdlcmUgYWRkZWQKK2FyZTogLS1kaXNhYmxlLXN3YXBmcywgd2hpY2ggcmVtb3ZlcyBzdXBwb3J0IGZvciBieXRlIHN3YXBwaW5nIG9sZAorbGVnYWN5IFBQQy82OGsgZmlsZXN5c3RlbXMsIC0tZGlzYWJsZS1kZWJ1Z2ZzLCB3aGljaCByZW1vdmVzIHN1cHBvcnQKK2ZvciBkZWJ1Z2ZzIGZyb20gdGhlIGxpYmV4dDJmcyBsaWJyYXJ5LCAtLWRpc2FibGUtaW1hZ2VyLCB3aGljaAorcmVtb3ZlcyBzdXBwb3J0IGZvciB0aGUgZTJpbWFnZSBwcm9ncmFtLCBhbmQgLS1kaXNhYmxlLXJlc2l6ZXIsIHdoaWNoCityZW1vdmVzIHN1cHBvcnQgZm9yIHJlc2l6ZTJmcy4KKworRTJmc2NrIG5vdyBwcmludHMgdGhlIG51bWJlciBvZiBtb3VudHMgb3IgZGF5cyBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0CitjaGVjayB3aGVuIGUyZnNjayBpcyBmb3JjZWQgdG8gY2hlY2sgYW4gb3RoZXJ3aXNlIGNsZWFuIGZpbGVzeXN0ZW0uCisKK1R1bmUyZnMgbm93IHByaW50cyBhbiBpbmZvcm1hdGl2ZSBtZXNzYWdlIGFib3V0IGhvdyBvZnRlbiBhIGZpbGVzeXN0ZW0KK3dpbGwgYmUgY2hlY2tlZCB3aGVuIGFkZGluZyBhIGpvdXJuYWwgdG8gdGhlIGZpbGVzeXN0ZW0sIHRvIHJlbWluZCB0aGUKK3VzZXIgdGhhdCBoZS9zaGUgbWF5IHdhbnQgdG8gYWRqdXN0IHRob3NlIHBhcmFtZXRlcnMgdXNpbmcgdHVuZTJmcworLWMvLWkuCisKK1dvcmtlZCBhcm91bmQgaHVyZCBicmFpbi1kYW1hZ2Ugd2hpY2ggY2F1c2VzIGUyZnNjayB0byBzb21ldGltZXMKK2JlbGlldmUgYSBmaWxlc3lzdGVtIGlzIHRoZSByb290IGZpbGVzeXN0ZW0gYmFzZWQgb24gZGV2aWNlIG51bWJlcnMKKyhzaW5jZSBIdXJkIGRvZXNuJ3QgaGF2ZSBkZXZfdCdzLCB3aGljaCBpcyBhcmd1YWJseSBhIFBPU0lYLjEKK3Zpb2xhdGlvbikuCisKK0ZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS4yMCB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIGFib3J0IHdpdGggYW4KK2Vycm9uZW91cyBlcnJvciB3aXRoIHRoZSAtRiBvcHRpb24gd2FzIHNwZWNpZmllZC4KKworRml4ZWQgYSBleHQzIHJlY292ZXJ5IGJ1ZyBpbiB0aGUgcmV2b2tlIGhhbmRsaW5nOyBzeW5jaHJvbml6ZWQgd2l0aAorZXh0MyAwLjdhLgorCitGaXhlZCB0d28gYnVncyBpbiBlMmZzY2sncyBoYW5kbGluZyBvZiBkdXAgYmxvY2sgaGFuZGxpbmcsIGRlYWxpbmcKK3dpdGggcmVsYXRpdmVseSB1bmNvbW1vbiBlZGdlIGNhc2VzOiBhIGRpcmVjdG9yeSB3aXRoIGFuIGluZGlyZWN0CitibG9jayB3aGljaCBpcyBjbGFpbWVkIGJ5IGFub3RoZXIgZmlsZSwgYW5kIHdoZW4gdGhlIGxhc3QgaW5vZGUgaW4gdGhlCitmaWxlc3lzdGVtIGhhcyBibG9ja3MgY2xhaW1lZCBieSBhbm90aGVyIGZpbGUuCisKK0UyZnNjayBub3cgY2hlY2tzIHRvIHNlZSBpZiB0aGUgaV9zaXplIGZpZWxkIG9mIGEgZmFzdCBzeW1saW5rIGlzIHRvbworYmlnLCBhbmQgb2ZmZXJzIHRvIGNsZWFyIHRoZSBzeW1saW5rIGlmIHNvLgorCitFMmZzY2sgbm93IGNoZWNrcyB0byBzZWUgaWYgaV9zaXplX2hpZ2ggb2Ygc3BlY2lhbCBmaWxlcyBpcyBub24temVybywKK2FuZCBvZmZlcnMgdG8gY2xlYXIgaV9zaXplX2hpZ2guCisKK0ZpeCBlMmZzY2sncyBoYW5kbGluZyBvZiBpbmNvbXBhdGlibGUgam91cm5hbCBmbGFncyBzbyB0aGF0IHRoZSB1c2VyCitoYXMgY2hhbmNlIHRvIGFib3J0LCBhbmQgdGhlbiBoYXMgdGhlIG9wdGlvbiB0byBjbGVhciBvdXQgdGhlIGpvdXJuYWwKK2VudGlyZWx5LiAgKEFkZHJlc3NlcyBEZWJpYW4gYnVnICM5ODUyNy4pCisKK0ZpeGVkIGEgYnVnIGluIGZzY2sgd2hpY2ggY291bGQgY2F1c2UgaXQgdG8gY29yZSBkdW1wIGlmIGEgbWl4IG9mCitzdGFuZGFyZCBhbmQgbm9uLXN0YW5kYXJkIGRldmljZSBuYW1lcyBhcmUgdXNlZCBpbiAvZXRjL2ZzdGFiLgorKERlYmlhbiBidWcgIzEwMDU1OSkKKworRml4ZWQgYSBidWcgaW4gZGVidWdmcyB3aGljaCBjYXVzZWQgcmVhZCBlcnJvcnMgd2hlbiBjb3B5aW5nIGEgZmlsZSB0bworbm90IGJlIG5vdGljZWQuCisKK1RoZSBkZWJ1Z2ZzIHNldF9zdXBlcl92YWx1ZSBjb21tYW5kIGNhbiBub3cgbW9kaWZ5IHRoZSBzX2xhc3RjaGVjayBmaWVsZC4KKworRml4ZWQgYSBidWcgaW4gbHNhdHRyIGFuZCBjaGF0dHIgd2hpY2ggd2FzIGFjY2lkZW50YWxseSBpbnRyb2R1Y2VkIGluCisxLjIwIHRvIHN1cHBvcnQgPiAyR0IgZmlsZXM7IGJvdGggbHNhdHRyIGFuZCBjaGF0dHIgd2Fzbid0IHJlYWRpbmcKK2RpcmVjdG9yaWVzIGNvcnJlY3RseSBiZWNhdXNlIHRoZSBjaGFuZ2UgbW9kaWZpZWQgdGhlIGxheW91dCBvZiBzdHJ1Y3QKK2RpcmVudCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbGliZTJwIHNoYXJlZCBsaWJyYXJ5LgorCitDbGVhbmVkIHVwIHRoZSBta2UyZnMgbWFudWFsIHBhZ2UgYW5kIGluY2x1ZGVkIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkKK2l0J3MgZ29vZCB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGhlIGZpbGVzeXN0ZW0gZXZlbiB3aGVuIGpvdXJuYWxpbmcgaXMKK2VuYWJsZWQuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworRml4IGdlbmVyYWwgZ2NjIC1XYWxsIGNvbXBsYWludHMuCisKK1RoZSB0eXBlcyBuZWVkZWQgYnkgdGhlIGV4dDIgaGVhZGVyIGZpbGVzIGFyZSBub3cgcHJvdmlkZWQgYnkKK2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oLCBpbnN0ZWFkIG9mIGluY2x1ZGUvYXNtL3R5cGVzLmguCisKK0ludGVnZXJzIGFyZSBub3cgcHJlZmVycmVkIHRvIGxvbmdzIHdoZW4gdHJ5aW5nIHRvIGZpbmQgYSAzMi1iaXQgdHlwZQoraW4gZXh0Ml90eXBlcy5oLiAgQWxzbywgaWYgbGludXgvdHlwZXMuaCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsCitkb24ndCB0cnkgdG8gcmVkZWZpbmUgdGhlIHR5cGVzLgorCitGaXhlZCBtYWtlIGRlcGVuZCBzY3JpcHQgc28gdGhhdCBpdCBhdXRvbWF0aWNhbGx5IGNvcnJlY3RzIHRoZQorcGF0aG5hbWUgY2xlYW51cHMgcGVyZm9ybWVkIGJ5IG1ha2UgLU0sIHNvIEkgZG9uJ3QgaGF2ZSB0byBmaXggdGhlbSB1cAorYnkgaGFuZC4KKworRml4ZWQgdGhlIGRfbG9hZGR1bXAgdGVzdCBjYXNlIHRvIGJlIG1vcmUgcm9idXN0LCBhbmQgbm90IGRlcGVuZCBvbgorYmFzaCdpc21zLgorCitSZW1vdmVkIGRlYnVnZnMncyBkZXBlbmRlbmNlIG9uIHByZWFkKCksIHdoaWNoIHdhcyBhY2NpZGVudGFsbHkKK2ludHJ1ZGNlZCBpbiBlMmZzcHJvZ3MgMS4yMAorCitGaXhlZCBhIHBlcmZvcm1hbmNlIGJ1ZyBpbiB0aGUgbGliZXh0MmZzJ3MgaWNvdW50IHJvdXRpbmU7IHRoZSBzaXplCitlc3RpbWF0ZSBvZiB0aGUgaWNvdW50IGFycmF5IHdhcyBpbmNvcnJlY3RseSBiZWluZyBjYWxjdWxhdGVkLgorCitSZW1vdmVkIHVzZSBvZiB0aGUgYmFkYmxvY2tzIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGluIHRoZSBlMmZzcHJvZ3MKK3Byb2dyYW1zLgorCitBZGRlZCBwYXJhbm9pYSBjb2RlIHdoaWNoIHByb3RlY3RzIGFnYWluc3Qgc3RyYW5nZSBjYXNlcyB3aGVyZSAvZXRjCitpc24ndCBvbiB0aGUgcm9vdCBmaWxlc3lzdGVtLCBvciBpZiAvZXRjL210YWIgZG9lc24ndCBleGlzdC4KKworVGhlIGhlYWRlciBmaWxlIGV4dDJfdHlwZXMuaCBpcyBub3cgaW5zdGFsbGVkLgorCitBdXRvY29uZiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGVuIHdlIGFyZSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLAoraW5zdGVhZCBvZiBkb2luZyBydW4tdGltZSB0ZXN0cywgdG8gc2F2ZSBhIGZldyBieXRlcyBvZiBjb2RlLgorCitUaGUgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAgYW5kIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAKK2Z1bmN0aW9ucyBhcmUgbm8gbG9uZ2VyIGlubGluZSBmdW5jdGlvbnMsIHdoaWNoIHNhdmVzIHNwYWNlIGFuZAorZG9lc24ndCByZWFsbHkgY29zdCBhbnkgcmVhbCBwZXJmb3JtYW5jZS4KKworVGhlIGV4dDJmcyBsaWJyYXJ5IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRoZSBlMnAgbGlicmFyeS4gIChXaGF0IG5lZWQKK3RoZXJlIHdhcyBvZiBpdCAtLS0gbmFtZWx5LCBmc2V0ZmxhZ3MsIHdhcyBjb2RlZCBpbi1saW5lKS4KKworRml4ZWQgdGhlIG1ha2VmaWxlIHNvIHRoYXQgbGliL2V4dDJmcy9leHQyX3R5cGVzLmggaXMgZ2VuZXJhdGVkIGV2ZW4KK3doZW4gdGhlIHVzZXIgaXMgc3R1cGlkIGFuZCB0cmllcyBjb21waWxpbmcgdGhlIHBhY2thZ2UgdXNpbmcgIm1ha2UKK2luc3RhbGwiIGFzIHJvb3QuCisKK01pc2NlbGxhbmVvdXMgY29kZSBjbGVhbnVwczoKKwkqIEFkZGVkIG1pc3NpbmcgZmlsZXMgZnJvbSBNYWtlZmlsZS5pbidzIFNSQ1MgZmlsZSwgc28gdGhhdCAKKwkJdGhlaXIgZGVwZW5kZW5jaWVzIHdvdWxkIGJlIHByb3Blcmx5IGNhbGN1bGF0ZWQuCisJKiBSZW1vdmVkIHJlZHVuZGFudCBjb2RlCisJKiBGaXhlZCBjb21tZW50cyBpbiBjb2RlCisJKiBSZW1vdmVkIG5vLWxvbmdlciB1bm5lZWRlZCBhcmdzdXNlZCAjcHJhZ21hLgorCisKK0UyZnNwcm9ncyAxLjIwIChNYXkgMjAsIDIwMDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgc3VwcG9ydCBmb3IgcmVwbGF5aW5nIHRoZSBleHQzIGpvdXJuYWwgcHVyZWx5IGluIHVzZXIgbW9kZSwKK2luY2x1ZGluZyBoYW5kbGluZyB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIFVzZWQgY29kZSBjb250cmlidXRlZCBieQorQW5kcmVhcyBEaWxnZXIsIHdpdGggYnVnIGZpeGVzIGFuZCB0aGUgb3JwaGFuZWQgaW5vZGUgaGFuZGxpbmcgZG9uZQorYnkgVGhlb2RvcmUgVHMnby4KKworVGhlIG1rZTJmcyBhbmQgdHVuZTJmcyBwcm9ncmFtcyBjYW4gY3JlYXRlIG9yIG1vZGlmeSBhIGZpbGVzeXN0ZW0gdG8KK2luY2x1ZGUgYW4gZXh0MyBqb3VybmFsLiAgVHVuZTJmcyBhbHNvIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSBhbiBleHQzCitqb3VybmFsIGZyb20gYSBmaWxlc3lzdGVtLgorCitFMmZzY2sgd2lsbCBub3cgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBsaW5rZWQgbGlzdCBvZiBvcnBoYW4KK2lub2RlcyBpbiB0aGUgc3VwZXJibG9jaywgYW5kIGNsZWFyIHRob3NlIGlub2RlcyBiZWZvcmUgc3RhcnRpbmcgdGhlCityZXN0IG9mIHRoZSBmaWxlc3lzdGVtIGNoZWNrIChidXQgYWZ0ZXIgdGhlIGpvdXJuYWwgcGxheWJhY2spLgorCitFMmZzY2sgbm93IHZhbGlkYXRlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHBhc3NlZCB0byB0aGUgLUMgb3B0aW9uLAord2hpY2ggc2F2ZXMgYWdhaW5zdCB0aGUgY29tcGxldGlvbiBiYXIgZ2V0dGluZyB3cml0dGVuIHRvIGFuCit1bmV4cGVjdGVkIGxvY2F0aW9uLCBzdWNoIGFzIHRoZSBkaXNrIGJlaW5nIGNoZWNrZWQuICAoRGViaWFuCitidWcvd2lzaGxpc3QgIzU1MjIwKQorCitFMmZzY2sgd2lsbCBub3cgYnVtcCB0aGUgZmlsZXN5c3RlbSByZXZpc2lvbiBudW1iZXIgZnJvbSB6ZXJvIHRvIG9uZQoraWYgYW55IG9mIHRoZSBjb21wYXRpYmlsaXR5IGJpdHMgYXJlIHNldC4KKworRml4ZWQgYSBidWcgd2hlcmUgYSBiYWRseSBjb3JydXB0ZWQgZGlyZWN0b3J5IG9uIGEgYmlnIGVuZGlhbiBzeXN0ZW0KK2NvdWxkIGNhdXNlIGUyZnNjayB0byBkaWUgd2l0aCBhIGJ1cyBlcnJvci4gIFRoZQorZXh0MmZzX3JlYWRfZGlyX2Jsb2NrKCkgYW5kIGV4dDJmc19wcm9jZXNzX2Rpcl9ibG9jaygpIGZ1bmN0aW9ucyBpbgordGhlIGV4dDIgbGlicmFyeSBub3cgZG9lcyBhbGlnbm1lbnQgc2FuaXR5IGNoZWNrcyBvbiB0aGUgcmVjX2xlbiBmaWVsZAorb2YgdGhlIGRpcmVjdG9yeSBlbnRyeSBiZWZvcmUgdXNpbmcgaXQuCisKK1RoZSBleHQyIGxpYnJhcnkgaGFzIGJlZW4gZW5oYW5jZWQgdG8gbWFrZSB0dW5lMmZzIHNhZmUgdG8gcnVuIG9uCittb3VudGVkIGZpbGVzeXN0ZW1zLiAgKFVzZXJzIGNvdWxkIHVzdWFsbHkgZ2V0IGF3YXkgd2l0aCB1c2luZyB0dW5lMmZzCitvbiBtb3VudGVkIGZpbGVzeXN0ZW1zIGJlZm9yZSwgYnV0IHdpdGggdGhlIGFkdmVudCBvZiBleHQzIGFuZAoram91cm5hbGluZywgaXQgYmVjYW1lIGltcG9ydGFudCB0byBtYWtlIHR1bmUyZnMgd2FzICpyZWFsbHkqIHNhZmUgZm9yCit1c2UgZXZlbiB3aGVuIHRoZSBmaWxlc3lzdGVtIGJlaW5nIG1vZGlmaWVkIGlzIG1vdW50ZWQuKSAgRTJsYWJlbCBpcworbm93IGltcGxlbWVudGVkIGJ5IHR1bmUyZnMgdXNpbmcgYW4gYXJndlswXSBkaXNwYXRjaCwgc28gdGhhdCBlMmxhYmVsCitpcyBhbHNvIG5vdyBzYWZlIGZvciB1c2Ugb24gbW91bnRlZCBmaWxlc3lzdGVtcy4KKworQWRkZWQgYSBuZXcgcHJvZ3JhbSwgZTJpbWFnZSwgd2hpY2ggY3JlYXRlcyBhIGJhY2t1cCBvZiBjcml0aWNhbCBleHQyCitmaWxlc3lzdGVtIGRhdGEgc3RydWN0dXJlcy4gIFRoZSBnZW5lcmF0ZWQgaW1hZ2UgZmlsZSBjYW4gYmUgZXhhbWluZWQKK3VzaW5nIGR1bXBlMmZzIGFuZCBkZWJ1Z2ZzLiAgSW4gdGhlIGZ1dHVyZSwgZTJmc2NrIHdpbGwgYmUgYWJsZSB0byB1c2UKK3RoZSBpbWFnZSBmaWxlIHRvIGhlbHAgcmVjb3ZlciB2ZXJ5IGJhZGx5IGRhbWFnZWQgZmlsZXN5c3RlbXMuCisKK0ZpeGVkIGEgbnVtYmVyIG9mIExGUyBidWdzIGluIGUyZnNjazsgdmVyeSwgdmVyeSBsYXJnZSAoPiAyKio0MikgZmlsZXMKK25vIGxvbmdlciBjYXVzZSBlMmZzY2sgdG8gYm9tYiBvdXQuICBBbHNvIHRyZWF0IGZpbGVzID4gMkdCIGFzIGJlaW5nCitsYXJnZSBmaWxlIHdoZW4gZGVjaWRpbmcgd2hldGhlciBvciBub3QgdGhlIGZpbGVzeXN0ZW0gaGFzIGxhcmdlIGZpbGVzLgorCitGaXhlZCBsc2F0dHIgYW5kIGNoYXR0ciBzbyB0aGF0IHRoZXkgd29yayBjb3JyZWN0bHkgb24gbGFyZ2UgZmlsZXMuCisoRml4ZXMgRGViaWFuIGJ1ZyAjNzI2OTAuKQorCitSZW1vdmVkIGxpbWl0YXRpb24gaW4gZ2V0X2RldmljZV9zaXplKCkgd2hpY2ggaW1wb3NlZCBhIG9uZSB0ZXJyYWJ5dGUKK2ZpbGVzeXN0ZW0gbGltaXRhdGlvbi4gIChNb3N0IDIuMiBrZXJuZWxzIHN0aWxsIGhhdmUgYSBzaWduZWQgaW50Citwcm9ibGVtIHdoaWNoIGNhdXNlIDEgVEIgYmxvY2sgZGV2aWNlIGxpbWl0YXRpb24uICBGb3J0dW5hdGVseSwgdGhlCitrZXJuZWwgcGF0Y2hlcyB0byBmaXggdGhpcyBhcmUgbXVjaCBlYXNpZXIgdGhhbiBmaXhpbmcgdGhlIDJUQgorbGltaXRhdGlvbiBpbiB0aGUga2VybmVsLiAgOi0pCisKK0EgbWF4X21vdW50X2NvdW50IG9mIHplcm8gaXMgbm93IHRyZWF0ZWQgYXMgaWYgbm8gbW91bnQgY291bnQgd2VyZQorc2V0LiAgKFByZXZpb3VzbHksIG5vIG1vdW50IGNvdW50IHdhcyBpbmRpY2F0ZWQgYnkgdXNpbmcgLTEsIGFuZCBhCittb3VudCBjb3VudCBvZiB6ZXJvIGNhdXNlZCBlMmZzY2sgdG8gYWx3YXlzIGJlIHJ1bi4pCisKK01rZTJmcyBzdXBwb3J0cyB0d28gbmV3IGZpbGVzeXN0ZW0gdHlwZXMgbGFyZ2VmaWxlIGFuZCBsYXJnZWZpbGU0LgorCitNa2UyZnMgbm93IGFkZHMgc29tZSByYW5kb21uZXNzIGluIHNfbWF4X21vdW50X2NvdW50IHNvIHRoYXQgbXVsdGlwbGUKK2ZpbGVzeXN0ZW1zIHdvbid0IGJlIGFsbCBjaGVja2VkIGF0IHRoZSBzYW1lIHRpbWUgdW5kZXIgbm9ybWFsCitvcGVyYXRpb25zLgorCitGaXhlZCBidWcgaW4gdGhlIHByb2dyZXNzIGJhciBwcmludGluZyBjb2RlIHdoaWNoIGNvdWxkIGNhdXNlIGUyZnNjawordG8gY29yZSBkdW1wIG9uIGFuIGlsbGVnYWwgZmlsZXN5c3RlbS4KKworRml4ZWQgYnVnIGluIGZzY2sgd2hpY2ggY291bGQgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBlMmZzY2sKK3RvIGJlIHByaW50aW5nIGEgcHJvZ3Jlc3MgYmFyLiAgKERlYmlhbiBidWcgIzY1MjY3KQorCitGc2NrIHVzaW5nIGEgVVVJRCBvciBhIExBQkVMIHNwZWNpZmllciB3aWxsIHdvcmsgZXZlbiBpZiBkZXZmcyBpcworY29tcGlsZWQgaW50byB0aGUga2VybmVsIGFuZCBub3QgbW91bnRlZC4gIElmIHRoZSBwYXRobmFtZXMgaW4KKy9wcm9jL3BhcnRpdGlvbnMgYXJlIGluY29ycmVjdCwgZnNjayB3aWxsIHNlYXJjaCAvZGV2IGZvciB0aGUgY29ycmVjdAorZGV2aWNlICh1c2luZyB0aGUgbmV3IGV4dDJmc19maW5kX2Jsb2NrX2RldmljZSBsaWJyYXJ5IGZ1bmN0aW9uKS4KK0ZzY2sgbm93IGFsc28gY2hlY2tzIHRoZSBSQUlEIGRldmljZXMgZmlyc3Qgc28gdGhhdCB0aGV5IGFyZSBwcm9wZXJseQorZm91bmQgd2hlbiB0aGV5IGFyZSBpbiB1c2UuICBTdXBwb3J0IGhhcyBhbHNvIGJlZW4gYWRkZWQgdG8gc3VwcG9ydAorYWRkaXRpb25hbCBJREUgZGlza3MgYW5kIHRoZSBEQUMgOTYwIGRldmljZSBuYW1lcy4gIChEZWJpYW4gYnVnICM5NDE1OSkKKworRml4ZWQgYSBidWcgaW4gZnNjayB3aGljaCBjYXVzZWQgaXQgbm90IGRlYWwgcHJvcGVybHkgd2l0aCAxNgorYnl0ZSBsb25nIGZpbGVzeXN0ZW0gbGFiZWxzLgorCitGc2NrJ3MgLXQgb3B0aW9uIGhhcyBiZWVuIG1hZGUgYSBsb3QgbW9yZSBmbGV4aWJsZS4gIFRoZSBzZW1hbnRpY3MgZm9yCit3aGF0IGhhcHBlbnMgaWYgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB0byBmc2NrIGhhcyBiZWVuIHJlZ3VsYXJpemVkLAorYW5kIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBmaWx0ZXIgd2hhdCBmaWxlc3lzdGVtcyB3aWxsIGdldCBjaGVja2VkCitiYXNlZCB3aGF0IGlzIGluIHRoZSBmaWxlc3lzdGVtJ3MgZnN0YWIgZW50cnkncyBvcHRpb24gZmllbGQuICAoRGViaWFuCitidWcgIzg5NDgzLikKKworVGhlIGR1bXBlMmZzIHByb2dyYW0gY2FuIG5vdyBwcmludCBvdXQgdGhlIGdyb3VwIGRlc2NyaXB0aW9uCitpbmZvcm1hdGlvbiBpbiBoZXgsIGFuZCBhbHNvIHByaW50cyB0aGUgbG9jYXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgYW5kCitibG9jayBncm91cCBkZXNjcmlwdG9yIGZvciB0aG9zZSBibG9jayBncm91cHMgdGhhdCBoYXZlIHRoZW0uCisKK01rZTJmcyBub3cgY2xlYXJzIHRoZSBleHQyIHN1cGVyYmxvY2sgYmVmb3JlIGl0IHN0YXJ0cyBjcmVhdGluZyBhCitmaWxlc3lzdGVtLCBzbyB0aGF0IHRoZSBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpcyBvbmx5IHdyaXR0ZW4gaWYgdGhlCitmaWxlc3lzdGVtIGNyZWF0aW9uIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4KKworVGhlIGRlYnVnZnMgcHJvZ3JhbSdzIHN0YXQgY29tbWFuZCBub3cgcHJldHR5LXByaW50cyB0aGUgYmxvY2tzIHVzZWQKK2J5IGFuIGlub2RlIHNvIHRoYXQgaXQncyBtb3JlIGNvbXBhY3QgYW5kIGluZm9ybWF0aXZlLgorCitUaGUgZGVidWdmcyBzdGF0cyBjb21tYW5kIG5vdyB1c2VzIHRoZSBzYW1lIGxpYmUycCBjb2RlICh3aGljaCBpcyB1c2VkCitieSBkdW1wZTJmcykgdG8gcHJpbnQgdGhlIHN1cGVyYmxvY2sgaGVhZGVyIGluZm9ybWF0aW9uLiAgVGhpcyBpcyBtb3JlCitjb21wbGV0ZSwgYW5kIGl0IGF2b2lkcyBhIGJpdCBvZiBjb2RlIGR1cGxpY2F0aW9uLgorCitBZGRlZCBhIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsIHNldF9zdXBlcl92YWx1ZSAoc3N2KSB3aGljaCBhbGxvd3MgdGhlCit1c2VyIHRvIHNldCBhcmJpdHJhcnkgc3VwZXJibG9jayBmaWVsZHMuCisKK0RlYnVnZnMgd2FzIGV4dGVuZGVkIHRvIHN1cHBvcnQgaW5vZGUgbnVtYmVycyBpbiBoZXggKGJ5IHByZWZpeGluZwordGhlbSB3aXRoIDB4KSwgYW5kIHNvIHRoYXQgbW9kaWZ5X2lub2RlIGNhbiBzZXQgdGhlIGlub2RlIGdlbmVyYXRpb24KK251bWJlci4gIEFsc28sIHRoZXJlIGlzIG5vdyBhIG5ldyBmdW5jdGlvbiBjb21tYW5kIGNhbGxlZCBsb2dkdW1wCit3aGljaCB3aWxsIGR1bXAgYW4gZXh0MyBqb3VybmFsLgorCitGaXhlZCBhIGJ1ZyBpbiBkZWJ1Z2ZzIHNvIHRoYXQgcXVpdHRpbmcgb3V0IG9mIHRoZSBwYWdlciBkb2Vzbid0IGtpbGwKK2RlYnVnZnMuCisKK0RlYnVnZnMncyBkdW1wIGNvbW1hbmQgbm93IHN0b3BzIGltbWVkaWF0ZWx5IHVwb24gcmVwb3J0aW5nIGEgZGlzaworcmVhZCBlcnJvci4gIChGaXhlZCBhIGJ1ZyBpbiBleHQyZnNfZmlsZV9yZWFkIGxpYnJhcnkgcm91dGluZSB3aGljaAorY2F1c2VkIGRlYnVnZnMgbm90IHRvIHN0b3AuKSAgKERlYmlhbiBidWcgIzc5MTYzKQorCitPbiBzeXN0ZW1zIHdpdGggL3Byb2MvbW91bnRzIChtYWlubHkgTGludXggc3lzdGVtcyksIC9wcm9jL21vdW50cyBpcworY2hlY2tlZCBiZWZvcmUgL2V0Yy9tdGFiIGlzIHVzZWQsIHNpbmNlIC9wcm9jL21vdW50cyBpcyBtb3JlIGxpa2VseSB0bworYmUgYWNjdXJhdGUuCisKK0FkZGVkIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBTb2xhcmlzIGFuZCBMaW51eC9pYTY0LgorCitWYXJpb3VzIG1hbnVhbCBwYWdlcyB3ZXJlIGNsYXJpZmllZCBhbmQgY2xlYW5lZCB1cC4gIChGaXhlZCBkZWJpYW4KK2J1Z3MgIzYzNDQyLCAjNjc0NDYsIGFuZCAjODcyMTYpCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZTJmc2NrIG1lc3NhZ2UgcHJpbnRlciBub3cgc3VwcG9ydHMgJUl1IGFuZCAlSWcsIHdoaWNoIHdpbGwgcHJpbnQKK291dCB0aGUgaW5vZGUncyB1c2VyIGFuZCBncm91cCBvd25lcnMsIHJlc3BlY3RpdmVseS4KKworRTJmc3Byb2dzIG5vdyBpbmNsdWRlcyBpdHMgb3duIHZlcnNpb24gb2YgaW5jbHVkZS9saW51eC9leHQyX2ZzLmgsIHNvCit0aGF0IG5vIGxvbmdlciBkZXBlbmRlbnQgb24gdGhlIHN5c3RlbSBoYXZpbmcgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZgordGhlIGtlcm5lbCBoZWFkZXIgZmlsZXMuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIHRvIGxpYmV4dDIsIGV4dDJmc19maW5kX2Jsb2NrX2RldmljZSgpLCB3aGljaAorc2VhcmNoZXMgdGhlIHN5c3RlbSAoaS5lLiwgL2RldiwgL2RldmZzLCAvZGV2aWNlcykgZm9yIGEgcGF0aG5hbWUgdG8gYQorZGV2aWNlIGdpdmVuIGl0cyBkZXZpY2UgbnVtYmVyLgorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiB0byBsaWJleHQyLCBleHQyZnNfc3luY19kZXZpY2UsIHdoaWNoIGNlbnRyYWxpemVzCithbGwgb2YgdGhlIHBsYWNlcyB3aGljaCBtaWdodCB0cnkgdG8gdXNlIHRoZSBCTEtGTFNCVUYgb3IgRkRGTFVTSAoraW9jdGxzIChhbmQgdXN1YWxseSBmYWlsaW5nIHRvIGRlZmluZSB0aGVtIHNpbmNlIHRoZSBzeXN0ZW0gaGVhZGVyCitmaWxlcyBkb24ndCB1c3VhbGx5IGRvIHRoaXMgZm9yIHVzLCBhbmQgd2UncmUgdHJ5aW5nIHRvIGF2b2lkIHVzYWdlIG9mCitrZXJuZWwgaW5jbHVkZSBmaWxlcyBub3cpLgorCitBZGRlZCBuZXcgdXRpbGl0eSBwcm9ncmFtcyBpbiB0ZXN0cy9wcm9nczogcmFuZG9tX2V4ZXJjaXNlIGFuZAoraG9sZF9pbm9kZS4gIFRoZXkgYXJlbid0IGJ1aWx0IGJ5IGRlZmF1bHQ7IHRoZXkncmUgdXNlZnVsIGZvcgorZXhlcmNpc2luZyBleHQzIGZpbGVzeXN0ZW0gY29kZS4KKworQWRkZWQgYSBuZXcgZXh0MiBmaWxlc3lzdGVtIGZsYWcsIEVYVDJfRkxBR19TVVBFUl9PTkxZLCB3aGljaCBjYXVzZXMKK3RoZSBmaWxlc3lzdGVtIGNsb3NlIGZ1bmN0aW9ucyB0byBvbmx5IHVwZGF0ZSB0aGUgc3VwZXJibG9jaywgYW5kIHRvCitub3QgdG91Y2ggdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLiAgTmVlZGVkIGJ5IHR1bmUyZnMgd2hlbgorbW9kaWZ5aW5nIGEgbW91bnRlZCBmaWxlc3lzdGVtLgorCitHb3QgcmlkIG9mIHN0cnVjdCBleHQyZnNfc2IgYW5kIHJlcGxhY2VkIGl0IHdpdGggdGhlIHN0YW5kYXJkIHN0cnVjdAorZXh0Ml9zdXBlcl9ibG9jayBmcm9tIGluY2x1ZGUvbGludXgvZXh0Ml9mcy5oLiAgTm90ZTogdGhpcyBtYXkgYnJlYWsKK3NvdXJjZSAoYnV0IG5vdCBiaW5hcnkpIGNvbXBhdGliaWxpdHkgb2Ygc29tZSB1c2VycyBvZiB0aGUgZXh0MgorbGlicmFyeS4gIFRob3NlIGFwcGxpY2F0aW9ucyBzaG91bGQganVzdCBzaW1wbHkgZG8gYSBnbG9iYWwgc2VhcmNoIGFuZAorcmVwbGFjZSBvZiBzdHJ1Y3QgZXh0MmZzX3NiIHdpdGggc3RydWN0IGV4dDJfc3VwZXJfYmxvY2ssIGFuZCBpbmNsdWRlCit0aGUgbmV3IGhlYWRlciBmaWxlIDxleHQyZnMvZXh0Ml9mcy5oPiB3aGljaCBkZWZpbmVzIGl0LgorCitUaGUgaW5vX3QgdHlwZSBoYXMgYmVlbiByZW5hbWVkIGV4dDJfaW5vX3QgdG8gcHJvdGVjdCBhcHBsaWNhdGlvbnMKK3RoYXQgYXR0ZW1wdCB0byBjb21waWxlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQsIHNpbmNlIHRoaXMKK2luZXhwbGljYWJseSBjaGFuZ2VzIGlub190KCE/KS4gIFNvIHdlIHVzZSBleHQyX2lub190IHRvIGF2b2lkIGFuCit1bmV4cGVjdGVkIEFCSSBjaGFuZ2UuCisKK1RoZSBNYWtlZmlsZXMgaGF2ZSBiZWVuIHJld29ya2VkIHNvIHRoYXQgIm1ha2UgY2hlY2siIGNhbiBiZSBydW4gZnJvbQordGhlIHRvcC1sZXZlbCBNYWtlZmlsZS4KKworRml4IGdlbmVyYWwgZ2NjIC1XYWxsIGNvbXBsYWludHMgYW5kIHJlbW92ZWQgZGVhZCBjb2RlLgorCitSZW1vdmUgdXNlIG9mIE5PQVJHUywgYmVjYXVzZSB3ZSBhc3N1bWUgZXZlcnlvbmUgZG9lcyBBTlNJIEMgdGhlc2UKK2RheXMuCisKK0FkZGVkIGJ1aWxkLXJwbSBzY3JpcHQgZnJvbSBzY3QuCisKK05ldyBmdW5jdGlvbnMgZXh0MmZzX2ltYWdlX3tpbm9kZSxzdXBlcixiaXRtYXB9X3tyZWFkLHdyaXRlfSBhZGRlZCAKK3RvIHN1cHBvcnQgZTJpbWFnZS4KKworTmV3IGZ1bmN0aW9uIGV4dDJmc19mbHVzaF9pY2FjaGUgd2hpY2ggbXVzdCBiZSBjYWxsZWQgaWYgdGhlCithcHBsaWNhdGlvbiBwcm9ncmFtIG1vZGlmaWVzIHRoZSBpbm9kZSB0YWJsZSBibG9ja3Mgd2l0aG91dCBnb2luZwordGhyb3VnaCBleHQyZnNfd3JpdGVfaW5vZGUoKSBpbnRlcmZhY2UuCisKK05ldyBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoKSBmdW5jdGlvbiwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1vdW50Citwb2ludCBvZiBhIGRldmljZSBpZiBtb3VudGVkLgorCitUaGUgaW9fY2hhbm5lbCBhYnN0cmFjdGlvbiBub3cgaGFzIGFuIG9wdGlvbmFsIGludGVyZmFjZSwKK2lvX2NoYW5uZWxfd3JpdGVfcmFuZ2UsIHdoaWNoIGFsbG93cyBzcGVjaWZpYyBieXRlIHJhbmdlcyB0byBiZQord3JpdHRlbi4gIAorCitUaGUgdW5peF9pbyBJTyBjaGFubmVsIG5vdyBzdXBwb3J0cyB3cml0ZS10aHJvdWdoIGNhY2hpbmcsIHNvIHRoYXQKK2pvdXJuYWwgY3JlYXRpb24gaXMgbW9yZSBlZmZpY2llbnQuCisKK0FkZGVkIHg4NiBhc3NlbWJseSBsYW5ndWFnZSByb3V0aW5lcyB0byBzdXBwb3J0IGJ5dGUgc3dhcHBpbmcsIHRvCityZWR1Y2UgZXhlY3V0YWJsZSBzaXplLgorCitGaXhlZCBidWcgaW4gdGhlIHV0aWxpdHkgcHJvZ3JhbSBzdWJzdCBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8KK3JlcGxhY2UgYSBzdWJzdGl0dXRpb24gdmFyaWFibGUgd2l0aCBhIHplcm8tbGVuZ3RoIHN0cmluZy4KKworRml4ZWQgbnVtYmVyaW5nIGUyZnNjayBwYXNzMSBwcm9ibGVtIG51bWJlcnM7IGFuIGV4dHJhIHplcm8gaGFkCitzbGlwcGVkIGludG8gc29tZSBvZiB0aGUgcHJvYmxlbSBudW1iZXIuCisKK0UyZnNwcm9ncyAxLjE5IChKdWx5IDEzLCAyMDAwKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgdGhlIHJlc2l6ZTJmcyBwcm9ncmFtIHNpbmNlIHRoZSB0aW1lb3V0IGJlZm9yZSBpdCBjb3VsZAorYmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBoYXMgZmluYWxseSBleHBpcmVkLgorCitBZGQgZXhwZXJpbWVudGFsIHN1cHBvcnQgbmVlZGVkIGZvciB0aGUgZXh0MiBjb21wcmVzc2lvbiBwYXRjaGVzLgorVGhpcyByZXF1aXJlcyBjb21waWxpbmcgZTJmc3Byb2dzIHdpdGggdGhlIC0tZW5hYmxlLWNvbXByZXNzaW9uIGZsYWcKK3RvIHRoZSBjb25maWd1cmUgc2NyaXB0LgorCitBZGRlZCBleHQzIGpvdXJuYWxsaW5nIHN1cHBvcnQuICBFMmZzY2sgd2lsbCBydW4gdGhlIGpvdXJuYWwgKGlmCituZWNlc3NhcnkpIGJ5IHRlbXBvcmFyaWx5IG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtLiAgL3NiaW4vZnNjay5leHQzIGlzCitpbnN0YWxsZWQgYXMgYSBzeW1saW5rIHRvIGUyZnNjay4gIEZzY2sgaGFzIGJlZW4gdGF1Z2h0IGFib3V0IGV4dDMsCithbmQgdHJlYXRzIGl0IHRoZSBzYW1lIGFzIGV4dDIgaW4gdGVybXMgb2YgdGhlIHByb2dyZXNzIGJhciBsb2dpYy4KK0R1bXBlMmZzIHdpbGwgZGlzcGxheSB0aGUgc3VwZXJibG9jayBqb3VybmFsaW5nIGluZm9ybWF0aW9uIGlmIHRoZQorZmlsZXN5c3RlbSBoYXMgYSBqb3VybmFsLiAgVGhlIGV4dDIgbGlicmFyeSB3aWxsIG5vdyBwZXJtaXQgb3BlbmluZyBhbgorZXh0MyBmaWxlc3lzdGVtIHdpdGggdGhlIHJlY292ZXJ5IGZsYWcgc2V0LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yCitvbi1saW5lIGR1bXAncyB0byB3b3JrIGNvcnJlY3RseSwgYnV0IHRoZXJlIG1heSBiZSBpc3N1ZXMgd2l0aCB0aGlzCit3b3JraW5nIHdlbGwgc2luY2UgZXh0MyBpcyBtdWNoIGxlc3MgYWdyZXNzaXZlIGFib3V0IHN5bmNpbmcgYmxvY2tzIHRvCit0aGUgZmlsZXN5c3RlbSwgc2luY2UgdGhleSdyZSBzYWZlIG9uIHRoZSBqb3VybmFsLgorCitUdW5lMmZzIGFuZCBlMmZzY2sgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYWxsb3cgdGhlIG1vdW50X2NvdW50IGNoZWNrIHRvCitiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG1heF9tb3VudF9jb3VudCB0byAtMS4gIChUaGlzIHdhcyBhbHJlYWR5CitzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbC4pCisKK0NyZWF0ZSBhIHN5bWJvbGljIGxpbmsgZm9yIGZzY2suZXh0Mywgc2luY2UgdGhlIGUyZnNwcm9ncyB1dGlsaXRpZXMKK2FyZSB1c2VkIGZvciBleHQzIGFzIHdlbGwuCisKK0FkZGVkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgZm9yIGUyZnNwcm9nczsgbXVzdCBiZSBlbmFibGVkCitieSBwYXNzaW5nIC0tZW5hYmxlLW5scyB0byBjb25maWd1cmUuCisKK0Fsd2F5cyB1c2UgdGhlIHByb3ZpZGVkIGV4dDJmcyBoZWFkZXIgZmlsZXMgdG8gaW5zdWxhdGUgb3Vyc2VsdmVzIGZyb20KK2tlcm5lbCB2ZXJzaW9uIGNoYW5nZXMuICBXaGljaCBpbmNsdWRlIGZpbGVzIGFyZSB1c2VkIGJ5IGUyZnNwcm9ncworaGF2ZSBhbHNvIGJlZW4gY2xlYW5lZCB1cCB0byBpbXByb3ZlIHBvcnRhYmlsaXR5LgorCitMaW1pdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgZTJmc2NrIHVwZGF0ZXMgdGhlIHByb2dyZXNzIGJhciBzbyB0aGF0CitwZW9wbGUgd2hvIGFyZSBib290aW5nIHVzaW5nIGEgOTYwMCBiYXVkIGNvbnNvbGUgZG9uJ3QgZ2V0IHN3YW1wcGVkIGJ5Cit0b28gbWFueSB1cGRhdGVzLgorCitJbXByb3ZlZCB0aGUgbG9vcCBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIGUyc2NrJ3MgcGFzcyAjMyBzbyB0aGF0IGl0IGlzCittdWNoLCBtdWNoIGZhc3RlciBmb3IgbGFyZ2UgZmlsZXN5c3RlbXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZgorZGlyZWN0b3JpZXMuCisKK1RoZSBtZW1vcnkgZm9vdHByaW50IGZvciBlMmZzY2sgaXMgbm93IHNsaWdodGx5IHNtYWxsZXIgdGhhbiBiZWZvcmUuCisKK0UyZnNjayBub3cgY2hlY2tzIGlmIHNwZWNpYWwgZGV2aWNlcyBoYXZlIGEgbm9uLXplcm8gc2l6ZSwgYW5kIG9mZmVycwordG8gY2xlYXIgdGhlIHNpemUgZmllbGQgaWYgaXQgZmluZHMgc3VjaCBhbiBpbm9kZS4gIAorCitFMmZzY2sgbm93IGNoZWNrcyBpZiBzcGVjaWFsIGRldmljZXMgaGF2ZSB0aGUgYXBwZW5kLW9ubHkgZmxhZyBzZXQsCithbmQgb2ZmZXJzIHRvIGNsZWFyIHRoZSBpbm9kZS4KKworRTJmc2NrIG5vdyBwcm9wZXJseSBoYW5kbGVzIHNvbWUgInNob3VsZCBuZXZlciBmYWlsIiBjYXNlcyBkdXJpbmcgYQorYml0bWFwIGNvcHkgaW4gcGFzczUuCisKK0UyZnNjayBub3cgcHJvcGVybHkgcHJpbnRzIGNvbnRyb2wgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXMgXkEgLi4gXlouCisKK0UyZnNjayBub3cgY2FsY3VsYXRlcyB0aGUgY29ycmVjdCBsb2NhdGlvbiBvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2sgaW4KK3RoZSBjYXNlIG9mIGZpbGVzeXN0ZW0gYmxvY2tzaXplcyA+IDFrLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sncyBjYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGlub2Rlc19wZXJfYmxvY2sKK3doaWNoIG5vcm1hbGx5IGRpZG4ndCBjYXVzZSBwcm9ibGVtcyB1bmRlciBtb3N0IGZpbGVzeXN0ZW0gcGFyYW1ldGVycywKK2J1dCBjb3VsZCBjYXVzZSBhIHZhbGlkIHN1cGVyYmxvY2sgdG8gYmUgcmVqZWN0ZWQgaW4gZXh0cmVtZSBjYXNlcy4KK090aGVyIGNoZWNrcyBmb3IgdmFsaWRhdGluZyBzdXBlcmJsb2NrIHZhbHVlcyB3ZXJlIG1hZGUgbW9yZQorc3RyaW5nZW50LgorCitBZGRlZCBub24tZGVzdHJ1Y3RpdmUgd3JpdGUgdGVzdGluZyB0byB0aGUgYmFkYmxvY2tzIHByb2dyYW0sIGNvdXJ0ZXN5CitvZiBEYXZpZCBCZWF0dGllLiAgVGhlIGJhZGJsb2NrcyBhbHNvIG5vdyBoYXMgYW4gb3B0aW9uIHRvIGlucHV0IHRoZQorY3VycmVudCBzZXQgb2YgYmFkIGJsb2Nrcywgc28gdGhhdCBrbm93biBiYWQgYmxvY2tzIGFyZSBza2lwcGVkIHRvCitzcGVlZCB1cCB0aGUgYmFkYmxvY2tzIHRlc3QuICBUaGVyZSBpcyBhbHNvIGEgcGVyc2lzdGVudCByZXNjYW4KK2ZlYXR1cmUgd2hpY2ggY2F1c2VzIGJhZGJsb2NrcyB0byBydW4gdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBzb21lCitudW1iZXIgb2YgcGFzc2VzIHdpdGhvdXQgZGlzY292ZXJpbmcgYW55IG5ldyBiYWQgYmxvY2tzLgorCitCYWRibG9ja3Mgbm93IGNoZWNrcyB0byBzZWUgaWYgdGhlIGRldmljZSBpcyBtb3VudGVkIGFuZCByZWZ1c2VzIHRvIGRvCit0aGUgdGVzdHMgaW52b2x2aW5nIHdyaXRpbmcgdG8gdGhlIGRldmljZSBpZiBpdCBpcyBtb3VudGVkLiAgQWxzbywKK2JhZGJsb2NrcyBub3cgYWxsb3dzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGNoZWNrZWQgdG8gYmUKK2RlZmF1bHRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLgorCitGaXhlZCBhIGJ1ZyBpbiBmc2NrIHdoaWNoIGRpZG4ndCBhbGxvdyBub24tcm9vdCB1c2VycyB0byBiZSBhYmxlIHRvCitjaGVjayBmaWxlc3lzdGVtcyBpZiB0aGVyZSB3ZXJlIGFueSBMQUJFTD0gb3IgVVVJRD0gZW50cmllcyBpbgorL2V0Yy9mc3RhYi4KKworVGhlIEh1cmQgZG9lc24ndCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmaWxlc3lzdGVtIGZlYXR1cmUuICBUaGUgbWtlMmZzCitwcm9ncmFtIG5vdyBtYWtlcyBzdXJlIHRoYXQgZm9yIHRoZSBIdXJkLCB0aGUgZmlsZXN0eXBlIGZlYXR1cmUgaXMKK3R1cm5lZCBvZmYuICBFMmZzY2sgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlIGZpbGV0eXBlIGZlYXR1cmUgaXMKK3R1cm5lZCBvbiBmb3IgSHVyZCBmaWxlc3lzdGVtcywgYW5kIG9mZmVyIHRvIHR1cm4gb2ZmIHRoZSBmZWF0dXJlLgorCitNa2UyZnMgbm93IGhhcyBhIHNhZmV0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIG51bWJlciBvZiBibG9ja3MgZG8gbm90CitleGNlZWQgMzIgYml0cyBldmVuIG9uIGEgNjQgYml0IHBsYXRmb3JtLgorCitSZWFsbHkgZml4ZWQgYSBidWcgaW4gZnNjayB0byBhbGxvdyAiZnNjayAtQXMiIHRvIHJ1biBpbnRlcmFjdGl2ZQorZnNjaydzLiAgKEZvciB0aG9zZSBwZW9wbGUgd2hvIGxpa2UgdG8gZG8gaW50ZXJhY3RpdmUgZnNjaydzIGluIHRoZQorL2V0Yy9yYyBzY3JpcHRzIT8hKQorCitEZWJ1Z2ZzIGhhcyBhIGZldyBuZXcgZmVhdHVyZXM6IHRoZSByZHVtcCBjb21tYW5kLCB3aGljaCB3aWxsIGRvIGEKK3JlY3Vyc2l2ZSBkdW1wIG9mIGEgZGlyZWN0b3J5IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnRzLCBhbmQgdGhlIGxjZAorY29tbWFuZCB3aGljaCBkb2VzIGEgbG9jYWwgY2hkaXIgKG11Y2ggbGlrZSB0aGUgZnRwIGNvbW1hbmQgb2YgdGhlCitzYW1lIG5hbWUpLiAgSW4gYWRkaXRpb24sIHRoZSBkZWJ1Z2ZzIHByb2dyYW0gYW5kIHRoZSBvcGVuX2ZpbGVzeXN0ZW0KK2NvbW1hbmQgbm93IHRha2VzIHRocmVlIG5ldyBvcHRpb25zOiAtYiBhbmQgLXMsIHdoaWNoIGFsbG93cyB0aGUKK2Jsb2Nrc2l6ZSBhbmQgc3VwZXJibG9jayBsb2NhdGlvbiB0byBiZSBzcGVjaWZpZWQsIGFuZCB0aGUgLWMgb3B0aW9uCit3aGljaCBpcyB1c2VkIGluIGNhdGFzdHJvcGhpYyBzaXR1YXRpb25zIHdoZXJlIHRoZSBibG9jayBncm91cAorZGVzY3JpcHRvcnMgYXJlIGNvcnJ1cHQuICBJZiB0aGUgLWMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZGVidWdmcyB3aWxsCitza2lwIHRyeWluZyB0byByZWFkIGluIHRoZSBibG9jayBhbmQgaW5vZGUgYml0bWFwcy4KKworRGVidWZzJ3MgbHNkZWwgY29tbWFuZCB3YXMgZml4ZWQgdG8gaGFuZGxlIGJhZCBibG9ja3MgaW4gdGhlIGlub2RlCit0YWJsZS4KKworQSBZMksgYnVnIGluIGRlYnVnZnMncyAibHMgLWwiIGhhbmRsaW5nIHdhcyBmaXhlZCBieSBzd2l0Y2hpbmcgdG8gdXNlCis0IGRpZ2l0IHllYXJzLgorCitHZW5lcmFsIGltcHJvdmVtZW50cyBpbiBlcnJvciBtZXNzYWdlcworCisgIC0gTWtlMmZzIHByaW50cyBhIHNhbmUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgcGFydGl0aW9uIHNpemUgaXMgemVybworCSh1c3VhbGx5IGJlY2F1c2UgdGhlIHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGJ5IHRoZQorCWtlcm5lbCBkdWUgdG8gdGhlIHBhcnRpdGlvbiBiZWluZyBidXN5KSwgaW5zdGVhZCBvZiAiaW52YWxpZAorCWFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgaW5pdGlhbGl6aW5nIHN1cGVyYmxvY2siLgorCisgIC0gRnNjayBub3cgcHJpbnRzIG1vcmUgc2VsZi1leHBsYW5hdG9yeSBtZXNzYWdlIGlmIGFuIGludmFsaWQgVVVJRD0KKwlvciBMQUJFTD0gc3BlY2lmaWNhdGlvbiBpcyBwYXNzZWQgdG8gaXQuCisKK1VVSUQgbGlicmFyeSBjaGFuZ2VkIHRvIHVzZSB0aGUgTEdQTC4KKworRml4ZWQgYSBidWcgaW4gdGhlIFVVSUQgbGlicmFyeSB3aGVyZSB2ZXJ5IHJhcGlkIGNhbGxzIHRvIHRoZQordGltZS1iYXNlZCBVVUlEIGdlbmVyYXRvciBjb3VsZCBjYXVzZSBkdXBsaWNhdGUgVVVJRCdzIHRvIGJlIHJldHVybmVkLgorVGhpcyB3YXMgbm90IGEgcHJvYmxlbSBmb3IgZTJmc3Byb2dzLCBidXQgaXQgY291bGQgYmUgYSBwcm9ibGVtIGZvcgorb3RoZXIgdXNlcnMgb2YgdGhlIGxpYnJhcnkuCisKK01ha2UgdGhlIFVVSUQgbGlicmFyeSBtb3JlIHJvYnVzdCBpbiB0aGUgZmFjZSBvZiBtaXNzaW5nIG9yIGFuCitpbXByb3BlciAvZGV2L3VyYW5kb20gb3IgL2Rldi9yYW5kb20gZmlsZXMuCisKK0FkZGVkIHNvbWUgcmFuZG9tIHBvcnRhYmlsaXR5IGZpeGVzIGZvciBTb2xhcmlzLgorCitTb21lIG1pbm9yIG1hbiBwYWdlIHVwZGF0ZXMuCisKK0ZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIHNzIGxpYnJhcnkuCisKKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBub3cgdHJ5IHRvIHVzZSBsc2VlazY0IGFuZCBvcGVuNjQgZnJvbSB0aGUgTEZTIGlmIHBvc3NpYmxlLgorCitUaGUgM3JkIHBhcmFtZXRlciBpbiBlMnAncyBwcmludF9mbGFncyBpcyBub3cgYSBmbGFncyB3b3JkLCBpbnN0ZWFkIG9mCithIGJvb2xlYW4gb3B0aW9uLgorCitUaGUgbWFyayBhbmQgdW5tYXJrIGJpdG1hcCBmdW5jdGlvbnMgbm93IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUgb2YKK3RoZSBiaXQgdGhhdCB3YXMgYmVpbmcgY2hhbmdlZCwgd2hpY2ggaXMgdXNlZnVsIGZvciBzb21lIHNwZWVkCitvcHRpbWl6YXRpb25zLgorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoYXZlIGJlZW4gYWRkZWQgdG8gZW5oYW5jZSB0aGUgYmFkYmxvY2tzIGxpc3QKK2hhbmRsaW5nIGluIGxpYmV4dDJmczogZXh0MmZzX3dyaXRlX2JiX0ZJTEUsIGV4dDJmc19yZWFkX2JiX0ZJTEUyLCBhbmQKK2V4dDJmc19iYWRibG9ja3NfZXF1YWwuCisKK1RoZSBleHQyIGhlYWRlciBmaWxlcyBub3cgaGF2ZSB0aGUgbGF0ZXN0IGpvdXJuYWxsaW5nIGZpZWxkcyB0byB0aGUKK3N1cGVyYmxvY2suCisKK1RoZSBleHQyZnNfbWtkaXIgZnVuY3Rpb24gaW4gbGliZXh0MmZzIG5vdyBwcm9wZXJseSBiYWNrcyBvdXQgb2YgZXJyb3IKK2NvbmRpdGlvbnMgcm9idXN0bHkuCisKK0NsZWFuZWQgdXAgbWFrZWZpbGVzOgorICAtIHRvIGNsZWFubHkgIGNvbXBpbGUgd2l0aCB0aGUgLWogZmxhZy4KKyAgLSBzbyBkaXN0Y2xlYW4gcmVtb3ZlcyBhbGwgZ2VuZXJhdGVkIGZpbGVzLgorICAtIHNvIGluIGNhc2Ugb2YgYW4gZXJyb3Igd2hpbGUgaW5zdGFsbGluZyBoZWFkZXIgZmlsZXMsIHRoZSBtYWtlIGFib3J0cy4KKworRml4IHRlc3Rfc2NyaXB0IHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IHdoZW4gY29tcGlsaW5nIGluIHRoZQorc291cmNlIGRpcmVjdG9yeS4KKworVGhlIHJhbmRvbSBVVUlEIGdlbmVyYXRpb24gcm91dGluZSBoYXMgYmVlbiBtYWRlIHNsaWdodGx5IGJldHRlciBpbgordGhlIGNhc2Ugd2hlcmUgL2Rldi9yYW5kb20gZG9lc24ndCBleGlzdC4gIChVc2Ugb2YgcmFuZG9tbHktYmFzZWQgVVVJRAoraXMgc3RpbGwgbm90IHJlY29tbWVuZGVkIGlmIC9kZXYvcmFuZG9tIGRvZXNuJ3QgZXhpc3QsIGhvd2V2ZXI7IGl0J3MKK2JldHRlciB0byB1c2UgdGhlIHRpbWUvZXRoZXJuZXQgTUFDIGFkZHJlc3MgVVVJRCBpbiB0aGlzIGNhc2UuKQorCitDbGVhbiB1cCB0aGUgYnVpbGQgcHJvY2VzcyBzbyBpdCdzIG1vcmUgZnJpZW5kbHkgaW4gY2FzZSBvZiBtaXNzaW5nCitkaXJlY3Rvcmllcy4KKworVGhlIGV4dDJmcyBoZWFkZXIgZmlsZSBjYW4gbm93IGJlICNpbmNsdWRlJ2QgaW50byBDKysgcHJvZ3JhbXMuCisKK1RoZSBlMnAuaCBoZWFkZXIgZmlsZSBpcyBub3cgaW5zdGFsbGVkLgorCitBZGRlZCB3b3JrYXJvdW5kIHRvIGEgZ2F3ayAzLjAuNSBidWcgaW4gbGliL3NzL21rX2NtZHMuCisKKworCitFMmZzcHJvZ3MgMS4xOCAoTm92ZW1iZXIgMTAsIDE5OTkpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCBhIGNvcmUgZHVtcGluZyBidWcgaW4gZTJmc2NrIGlmIGFuIGltYWdpYyBpbm9kZSBpcyBwcmVzZW50IG9yCisobW9yZSByYXJlbHkpIGlmIHRoZSBmaWxlc3lzdGVtIGlzIGJhZGx5IGNvcnJ1cHRlZCBlbm91Z2ggdGhhdCBlMmZzY2sKK2hhcyB0byByZXN0YXJ0IHBhc3MgMSBwcm9jZXNzaW5nLiAgRTJmc2NrIG5vdyBjbG9zZXMgdGhlIGZpbGVzeXN0ZW0KK2JlZm9yZSBmcmVlaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGl0cyBkYXRhIHN0cnVjdHVyZXMsIHNvIGluIHRoZSBjYXNlCitvZiBmdXR1cmUgbWVtb3J5IGZhdWx0cywgYXQgbGVhc3QgdGhlIGZpeGVkIGZpbGVzeXN0ZW0gd2lsbCBiZSBmdWxseQord3JpdHRlbiBvdXQuCisKK0lmIGEgZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaW1hZ2ljIGlub2RlcywgYW5kIGUyZnNjayBkaXNjb3ZlcnMgYW4KK2ltYWdpYyBpbm9kZSwgaXQgd2lsbCBvZmZlciB0byBjbGVhciB0aGUgaW1hZ2ljIGZsYWcuCisKK0UyZnNjayB3aWxsIG5vdyBvZmZlciB0byBjbGVhciB0aGUgaW1tdXRhYmxlIGZsYWcgb24gc3BlY2lhbCBmaWxlcworKGRldmljZS9zb2NrZXQvZmlmb3MpIHdoZW4gcnVubmluZyBpdCBpbiBub24tcHJlZW4gbW9kZS4KKworRTJmc2NrIHdpbGwgbm93IHNldCB0aGUgZmlsZXR5cGUgd2hlbiBjcmVhdGluZyAvbG9zdCtmb3VuZCwgYW5kIHdoZW4KK2Nvbm5lY3RlZCBvcnBoYW5lZCBpbm9kZXMgdG8gL2xvc3QrZm91bmQuCisKK0RlYnVnZnMncyBuY2hlY2sgYW5kIGljaGVjayBjb21tYW5kcyBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGVyZQorYXJlIGJhZCBibG9ja3MgaW4gdGhlIGlub2RlIHRhYmxlIHdpdGhvdXQgYm9tYmluZyBvdXQuCisKK1RoZSBiYWRibG9ja3MgbGlzdCBwcm9jZXNzaW5nIGNvZGUgaGFzIGJlZW4gbWFkZSBtb3JlIGVmZmljaWVudGx5IGZvcgorYXBwZW5kaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIChvcmRlcmVkKSBiYWRibG9ja3MgdG8gdGhlIGJhZGJsb2NrcyBsaXN0LgorCitTb21lIG1pbm9yIG1hbiBwYWdlIHVwZGF0ZXMuCisKK0ZzY2sgbm93IGFsbG93cyBpbnRlcmFjdGl2ZSBlMmZzY2sncyB3aGVuIHVzaW5nIGZzY2sgLUFzIChub3QgYSBjb21tb24KK21vZGUsIGJ1dCBzb21lIHBlb3BsZSBsaWtlIHRvIGRvIHRoaXMgaW4gYm9vdCBzY3JpcHRzIGZvciBzaWxseSByZWFzb25zKS4KKworUHJvZ3JhbW1lcidzIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW50ZXJuYWwgZTJmc2NrIHByb2JsZW0gY29kZSBmb3IgUFJfMl9TUExJVF9ET1Qgd2FzIGZpeGVkIHRvIG1lZXQKK3dpdGggdGhlIHByb2JsZW0gY29kZSBjb252ZW50aW9uLgorCitUaGUgYmFkYmxvY2tzIGxpc3QgcmVncmVzc2lvbiB0ZXN0IHByb2dyYW0gaGFzIGJlZW4gdXBkYXRlZCB0byB3b3JrCit3aXRoIHByZXZpb3VzbHkgbWFkZSBBUEkgbmFtZSBjaGFuZ2VzLgorCitUaGUgZXh0MmZzX2ZyZWUoKSBjb21tYW5kIG5vdyB1c2VzIHRoZSBuZXcgYmFkYmxvY2tzIEFQSSB0byBhdm9pZAordXNpbmcgdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIuCisKK0FkZGVkIG5ldyByZWdyZXNzaW9uIHRlc3QgY2FzZXM7IHRoZSBydW5fZTJmc2NrIHRlc3Qgc2NyaXB0IG5vdworc3VwcG9ydHMgdGhlIGFiaWxpdHkgZm9yIGEgdGVzdCBjYXNlIHRvIHJ1biBhIHByZXByYXRvcnkgY29tbWFuZAorYmVmb3JlIHJ1bm5pbmcgZTJmc2NrLgorCitFMmZzcHJvZ3MgMS4xNyAoT2N0b2JlciAyNiwgMTk5OSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBuYXN0eSB0eXBvIGluIGZzY2sgd2hpY2ggY2F1c2VkIHBhcmFsbGVsaXplZCBmc2NrJ3MgdG8gZ28gaW50byBhbgoraW5maW5pdGUgbG9vcC4KKworRml4ZWQgYSBidWcgaW4gZnNjayB3aGVyZSBpdCB1c2VkIHN0cm5jbXAgdG8gY29tcGFyZSBhIGJpbmFyeSBVVUlELAordGh1cyBwb3RlbnRpYWxseSBjYXVzaW5nIHByb2JsZW1zIGlmIGEgYmluYXJ5IFVVSUQgY29udGFpbmVkIGEgTlVMTAorY2hhcmFjdGVyLgorCitFMmZzY2sgbm93IHVzZXMgc3RyaWN0ZXIgY2hlY2tzIGZvciBkaXJlY3RvcnkgZW50cmllcyBpbiBwYXNzIDI6Cit6ZXJvLWxlbmd0aCBmaWxlbmFtZXMgYXJlIG5vdCBhbGxvd2VkOyBuZWl0aGVyIGFyZSA4IGJ5dGUgbG9uZworZGlyZWN0b3J5IGVudHJpZXMuCisKK1RoZSBkZWJ1Z2ZzICJkaXJ0eSIgY29tbWFuZCBub3cgY2xlYXJzIHRoZSBmaWxlc3lzdGVtIHZhbGlkIGJpdC4KKyhQcmV2aW91c2x5IHRoaXMganVzdCBzZXQgdGhlIGRpcnR5LWFzLWluLW5lZWRzLXdyaXRpbmctb3V0LXRvLWRpc2sKK2JpdCBpbiB0aGUgaW4tY29yZSBzdXBlcmJsb2NrIGltYWdlLiAgVGhlIG5ldyBmdW5jdGlvbmFsaXR5IGlzIG1vcmUKK3doYXQgdGhlIHVzZXIgZXhwZWN0cywgYW5kIGlzIG1vcmUgdXNlZnVsLikKKworQWRkZWQgYSBkZWJ1Z2dpbmcgaG9vayB0byB0ZXN0IHBhcmFsbGVsIGZzY2s7IGlmIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgRlNDS19GT1JDRV9BTExfUEFSQUxMRUwsIHRoZW4gZmlsZXN5c3RlbXMgb24gdGhlIHNhbWUgZHJpdmUKK3dpbGwgYmUgY2hlY2tlZCBpbiBwYXJhbGxlbCB3aGVuIHRoZXkgbm9ybWFsbHkgd291bGQgbm90IGJlLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIHNvbWUgI2lmZGVmJ3MgZm9yIGNvbXBpbGF0aW9uIHVuZGVyIHRoZSBIdXJkIE9TLgorCitGaXhlZCBtaW5vciBXMksgY29tcGF0aWJpbGl0eSBwcm9ibGVtcy4KKworRml4ZWQgc29tZSBtaXNjZWxsYW5lb3VzIEdDQyB3YXJuaW5ncy4KKworCitFMmZzcHJvZ3MgMS4xNiAoT2N0b2JlciAyMiwgMTk5OSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIHJhY2UgY29uZGl0aW9uIGJ1ZyBpbiBmc2NrOyB3aGVuIHByaW50aW5nIGEgcHJvZ3Jlc3MgYmFyLCBpZgorY2hlY2tpbmcgbXVsdGlwbGUgZmlsZXN5c3RlbXMgaW4gcGFyYWxsZWwsIGl0IHdhcyBwb3NzaWJsZSBmb3IgZnNjayB0bworc2VuZCBlMmZzY2sgYSBTSUdVU1IxIHNpZ25hbCBiZWZvcmUgZTJmc2NrIGhhZCBpbnN0YWxsZWQgaXRzIHNpZ25hbAoraGFuZGxlciwgd2hpY2ggd291bGQgY2F1c2UgaXQgdG8gdGVybWluYXRlIHdpdGggYSBzaWduYWwgMTAuCisKK0UyZnNjayBub3cgcHJvcGVybHkgaGFuZGxlcyBmaWxlc3lzdGVtcyB0aGF0IGhhdmUgdGhlCitJTkNPTVBBVF9GSUxFVFlQRSBmZWF0dXJlIHR1cm5lZCBvbi4gIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYQorZmlsZXN5c3RlbSBpbnRvIHVzaW5nIG9yIG5vdCB1c2luZyBGSUxFVFlQRSBmZWF0dXJlLgorCitFMmZzY2sgbm93IHByb3Blcmx5IGhhbmRsZXMgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIHRoZSBJTUFHSUMgZmVhdHVyZQordHVybmVkIG9uICh0aGlzIGlzIHVzZWQgb24gTGludXggQUZTIHNlcnZlcnMpLgorCitUaGUgbWtlMmZzIHByb2dyYW0gbm93IGNyZWF0ZXMgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIHRoZSBmaWxldHlwZSBhbmQKK3NwYXJzZV9zdXBlcmJsb2NrIGZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdW5sZXNzIGl0IGlzIHJ1biBvbiBhCitwcmUtMi4yIGtlcm5lbC4gIFRoZXNlIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGEgcHJlLTIuMiBrZXJuZWwsCitzbyB0aGVyZSBpcyBub3cgYSBuZXcgZmxhZyAtTyB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB3aXRoCit3aGljaCBmZWF0dXJlcyBzaGUgd291bGQgbGlrZSB0byBjcmVhdGUgdGhlIGZpbGVzeXN0ZW07ICJta2UyZnMgLU8KK25vbmUiIHdpbGwgY3JlYXRlIGEgZmlsZXN5c3RzZW0gY29tcGF0aWJsZSB3aXRoIDIuMCBrZXJuZWxzLgorCitUaGUgdHVuZTJmcyBwcm9ncmFtIG5vdyBoYXMgYSAtTyBvcHRpb24gd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNldAorYW5kIHJlc2V0ICJzYWZlIiBmaWxlc3lzdGVtIGZlYXR1cmVzLiAgQ3VycmVudGx5LCB0aGUgb25seSBvbmVzIHdoaWNoCithbGxvd3MgdG8gYmUgbW9kaWZpZWQgYXJlIHRoZSBmaWxldHlwZSBhbmQgc3BhcnNlX3N1cGVyYmxvY2sgZmVhdHVyZXMuCitOb3RlIHNldHRpbmcgb3IgY2xlYXJpbmcgZWl0aGVyIGZlYXR1cmUgd2lsbCByZXF1aXJlIHJ1bm5pbmcgZTJmc2NrIG9uCit0aGUgZmlsZXN5c3RlbSBhZnRlcndhcmRzLiAgKG4uYi4gQ2xlYXJpbmcgdGhlIHNwYXJzZV9zdXBlcmJsb2NrIGZlYXR1cmUKK3JlcXVpcmVzIHRoYXQgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGVzeXN0ZW0gZm9yIHRoZQorZXh0cmEgc3VwZXJibG9ja3Mgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGJ5IGUyZnNjay4pCisKK0RlYnVnZnMgY2FuIG5vdyBzZXQgYW5kIHByaW50IGZpbGVzeXN0ZW0gZmVhdHVyZXMgaW4gdGhlIHN1cGVyYmxvY2sKK3VzaW5nIHRoZSAiZmVhdHVyZXMiIGNvbW1hbmQuICBEdW1wZTJmcyB3aWxsIHByaW50IG91dCB0aGUgY29tcGxldGUKK3NldCBvZiBmZWF0dXJlcyB3aGVuIGxpc3RpbmcgdGhlIHN1cGVyYmxvY2suCisKK0R1bXBlMmZzIGhhcyBuZXcgb3B0aW9ucyAtZiAoZm9yY2UpIGFuZCAtaCAoaGVhZGVyLW9ubHkpLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY2F1c2UgdGhlIFBST0dSQU1NSU5HIEVSUk9SL2JvbmVoZWFkCittZXNzYWdlIHRvIGNvbWUgdXAuICBUaGlzIGNvdWxkIGhhcHBlbiB3aGVuIGRlY3JlbWVudGluZyBvcgoraW5jcmVtZW50aW5nIGEgbGluayBjb3VudCBjb3VsZCByZXN1bHQgaW4gYW4gb3ZlcmZsb3cuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGVyZSB0aGUgYmxvY2sgY291bnQgb24gdGhlIGxvc3QrZm91bmQKK2RpcmVjdG9yeSB3b3VsZCBub3QgYmUgcHJvcGVybHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgZGlyZWN0b3J5IHdhcworZXhwYW5kZWQgdG8gdGhlIHBvaW50IHdoZXJlIGFuIGluZGlyZWN0IGJsb2NrIG5lZWRlZCB0byBiZSBhbGxvY2F0ZWQuCisKK0UyZnNjayBub3cgbWFrZXMgc29tZSBhZGRpdGlvbmFsIHNhbml0eSBjaGVja3Mgb24gdGhlIHN1cGVyYmxvY2sgdG8KK2F2b2lkIGNyYXNoaW5nIG9yIGdpdmluZyBhIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGlmIHNvbWUgb2YgdGhlCit2YWx1ZXMgaW4gdGhlIHN1cGVyYmxvY2sgYXJlIHVucmVzb25hYmxlIChidXQgdGhlIHN1cGVyYmxvY2sgb3RoZXJ3aXNlCitsb29rcyB2YWxpZCkuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGVyZSBhIHZlcnkgYmFkbHkgY29ycnVwdGVkIGZpbGVzeXN0ZW0gbWlnaHQKK3JlcXVpcmUgdHdvIHBhc3NlcyB0byBjb21wbGV0ZWx5IGZpeCB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgaGFwcGVuZWQgaWYKK2FuIGlub2RlIGNsYWltZWQgYmxvY2tzIHRoYXQgd2FzIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEKKyh0eXBpY2FsbHksIHdoZW4gZ2FyYmFnZSB3YXMgd3JpdHRlbiBpbnRvIGFuIGlub2RlIHRhYmxlIG9yIGluZGlyZWN0CitibG9jaywgc2luY2UgdGhpcyBraW5kIG9mIGZpbGVzeXN0ZW0gY29ycnVwdGlvbiBub3JtYWxseSBkb2Vzbid0CitoYXBwZW4gb3RoZXJ3aXNlKS4KKworT24gdGhlIEFscGhhLCBnbGliYyBkZWNsYXJlcyBzdF9mbGFncyBhbHRob3VnaCBpdCBpc24ndCBhY3R1YWxseSB1c2VkOwordGhlIGNvbmZpZ3VyZSBzY3JpcHQgd2FzIGltcHJvdmVkIHRvIGRldGVjdCB0aGlzIGNhc2Ugc28gdGhhdAorZTJmc3Byb2dzIGNhbiBhdm9pZCB1c2luZyB0aGUgbm9uLWZ1bmN0aW9uYWwgc3RhdCBmaWVsZC4KKworVGhlIG1hbnVhbCBwYWdlcyB3ZXJlIHVwZGF0ZWQgdG8gdXNlIGEgbW9yZSBjb25zaXN0ZW50IGZvcm1hdHRpbmcKK3N0eWxlIGNvbnNpc3RlbnQgd2l0aCBzdGFuZGFyZCBVbml4IG1hbiBwYWdlcy4gIE1rZTJmcydzIG1hbiBwYWdlCithZGRlZCBkb2N1bWVudGF0aW9uIGZvciBhIGZldyBwcmV2aW91c2x5IHVuZG9jdW1lbnRlZCBvcHRpb25zLgorCitGaXhlZCBtaW5vciBkaXNwbGF5IGJ1Z3MgaW4gdHVuZTJmcyBhbmQgbWtlMmZzLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ltcHJvdmVkIHBvcnRhYmlsaXR5IG9mIGUyZnNwcm9ncyB0byBub24tVW5peCBzeXN0ZW1zIChpbiBwYXJ0aWN1bGFyLCBOVCkuCisKK0FkZGVkIGZlYXR1cmVzIHRvIHBhcnNlIGFuZCBwcmludCBmZWF0dXJlIHN0cmluZ3MgaW50byB0aGUgZTJwIGxpYnJhcnkuICAKKyhlMnBfZmVhdHVyZTJzdHJpbmcsIGUycF9zdHJpbmcyZmVhdHVyZSwgZTJwX2VkaXRfZmVhdHVyZSkuCisKK2V4dDJmc19ta2RpcigpIGFuZCBleHQyZnNfbmV3X2Rpcl9ibG9jaygpIG5vdyBjcmVhdGVzIGRpcmVjdG9yaWVzCit3aG9zZSBkaXJlY3RvcnkgZW50cmllcyBjb250YWluIHByb3BlciBmaWxldHlwZSBpbmZvcm1hdGlvbiBpZiB0aGUKK2ZpbGVzeXN0ZW0gc3VwcG9ydHMgaXQuCisKK2V4dDJmc19saW5rKCkgbm93IHVzZXMgdGhlIGxvdyAzIGJpdHMgb2YgaXRzIGZsYWdzIHBhcmFtZXRlciB0byBwYXNzCit0aGUgZGlyZWN0b3J5IGVudHJ5IGZpbGV0eXBlIGluZm9ybWF0aW9uLiAgVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUKK2RpcmVjdG9yeSBlbnRyeSBmaWxldHlwZSBpbmZvcm1hdGlvbiBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdC4KKworRml4ZWQgYSBidWcgaW4gZXh0MmZzX2V4cGFuZF9kaXIoKSB3aGVyZSB0aGUgYmxvY2sgY291bnQgaW4gYQorZGlyZWN0b3J5J3MgaW5vZGUgd291bGQgbm90IGJlIHByb3Blcmx5IGluY3JlbWVudGVkIHdoZW4gdGhlIGRpcmVjdG9yeQord2FzIGV4cGFuZGVkIHRvIHRoZSBwb2ludCB3aGVyZSBhbiBpbmRpcmVjdCBibG9jayBuZWVkZWQgdG8gYmUKK2FsbG9jYXRlZC4KKworCitFMmZzcHJvZ3MgMS4xNSAoSnVseSAxOCwgMTk5OSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZGQgY29uZmlndXJhdGlvbiBjaGVja3Mgc28gdGhhdCBlMmZzcHJvZ3Mgd2lsbCBjb21waWxlIGNsZWFubHkgb24KK0xpbnV4IDIuMyBrZXJuZWxzIHRoYXQgaGF2ZSByZW5hbWVkIGlfdmVyc2lvbiB0byBpX2dlbmVyYXRpb24uCisKK0UyZnNjayBub3cgcHJpbnRzIGEgcHJvZ3Jlc3MvY29tcGxldGlvbiBiYXIgKGFuZCBub3QganVzdCBhIHNpbXBsZQorc3Bpbm5lcikgaWYgdGhlIC1DMCBvcHRpb24gaXMgcmVxdWVzdGVkIG9yIGlmIGl0IHJlY2VpdmVzIGEgU0lHVVNSMQorc2lnbmFsLiAgRnNjayB3aWxsIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHRoZSAocG90ZW50aWFsbHkgbXVsaXBsZSkKK2UyZnNjayBwcm9jZXNzZXMgdG8gcHJpbnQgY29tcGxldGlvbiBiYXJzIGlmIGl0IGlzIGdpdmVuIGEgLUMgb3B0aW9uLAord2l0aCB0aGUgcmlnaHQgdGhpbmcgaGFwcGVuaW5nIGlmIG11bHRpcGxlIGZpbGVzeXN0ZW1zIGFyZSBiZWluZworY2hlY2tlZCBpbiBwYXJhbGxlbC4KKworTWtlMmZzIG5vdyBoYXMgYmV0dGVyIGF1dG9tYXRpYyBodWVyaXN0aWNzIHRvIGRldGVybWluZSB0aGUgZmlsZXN5c3RlbQorcGFyYW1ldGVycyB0byBiZSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgZmlsZXN5c3RlbS4gIEFkZGVkIGEgbmV3IG9wdGlvbgorLVQgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgaG93IHRoZSBmaWxlc3lzdGVtIGlzIHRvIGJlIHVzZWQsCit3aGljaCBoZWxwcyBta2UyZnMgZG8gYSBiZXR0ZXIgam9iIHNlbGVjdGluZyB0aGUgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLgorCitNa2UyZnMgbm93IGNyZWF0ZXMgcmV2aXNpb24gMSBmaWxlc3lzdGVtcyBieSBkZWZhdWx0LCBhbmQgd2l0aCB0aGUKK3NwYXJzZSBzdXBlcmJsb2NrIGZlYXR1cmUgZW5hYmxlZC4gIFRoZSBzcGFyc2Ugc3VwZXJibG9jayBmZWF0dXJlIGlzCitub3QgdW5kZXJzdG9vZCBieSBMaW51eCAyLjAga2VybmVscywgc28gdGhleSB3aWxsIG9ubHkgYWxsb3cgcmVhZC1vbmx5Cittb3VudHMgb2YgZmlsZXN5c3RlbXMgd2l0aCB0aGlzIHNwYXJzZSBzdXBlcmJsb2Nrcy4KKworRml4IGJ1ZyB3aGVyZSBpZiAvZGV2L251bGwgY291bGRuJ3QgYmUgb3BlbmVkIChzaG91bGQgbmV2ZXIgaGFwcGVuKSwKK2UyZnNjayB3b3VsZCBoYW5nIGluIGEgdGlnaHQgbG9vcC4KKworTWFrZSBlMmZzY2sgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIC9sb3N0K2ZvdW5kIGlzbid0IGEgZGlyZWN0b3J5LgorCitFMmZzY2sgbm93IHVzZXMgbWFsbGluZm8gaWYgaXQgZXhpc3RzIHRvIGdldCBhY2N1cmF0ZSBzdGF0aXN0aWNzIGFib3V0CitpdHMgbWVtb3J5IHVzYWdlLgorCitGaXggYnVnIGluIGUyZnNjayB3aGVyZSBpdCB3b3VsZG4ndCBjaGVjayB0byBzZWUgaWYgYSBkaXNjb25uZWN0ZWQKK2lub2RlIGhhZCBhbnkgcHJvYmxlbXMgYmVmb3JlIGNvbm5lY3RpbmcgaXQgdG8gL2xvc3QrZm91bmQuCisKK0FkZCBjaGVjayB0byBlMmZzY2sgc28gaXQgbWFrZXMgc3VyZSB0aGF0IHRvdGFsIG51bWJlciBvZiBpbm9kZXMgaW4KK3RoZSBmaWxlc3lzdGVtIGlzIGEgc2FuZSBudW1iZXIuCisKK0ZpeCBmZW5jZXBvc3QgZXJyb3Igd2hlbiBjbGVhcmluZyBhbiB0aGUgZW5kIG9mIHRoZSBibG9jayBiaXRtYXAgd2hpY2gKK2NhdXNlZCB0aGUgbGFzdCBibG9jayBpbiB0aGUgYml0bWFwIG5vdCB0byBnZXQgY2xlYXJlZC4KKworQ2xlYW5lZCB1cCBhIG51bWJlciBvZiBtZXNzYWdlcyBpbiBlMmZzY2s6CisJKiBUaGUgbWVzc2FnZSAiR3JvdXAncyAjJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvci4uLiIKKwkJd2FzIGZpeGVkIHNvIHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVyIHdvdWxkIGJlIGRpc3BsYXllZC4KKwkqIEFkZGVkIG1pc3Npbmcgc3BhY2UgaW4gdGhlICJkaXNrIHdyaXRlLXByb3RlY3RlZCIgZXJyb3IgbWVzc3NhZ2UKKwkqIENsZWFuZWQgdXAgdGhlIGVycm9yIG1lc3NhZ2UgcHJpbnRlZCB3aGVuIGEgbm9uLWludGVyYWN0aXZlCisJCWUyZnNjayBuZWVkcyB0byBhYm9ydCBhIGNoZWNrIGJlY2F1c2UgdGhlIGZpbGVzeXN0ZW0KKwkJYXBwZWFycyB0byBiZSBtb3VudGVkLgorCitBZGRlZCBhIG5ldyBjb21tYW5kLWxpbmUgdXRpbGl0eSwgdXVpZGdlbiwgd2hpY2ggd2lsbCBjcmVhdGUgYW5kIHByaW50CithIFVVSUQuCisKK01ha2UgZGVidWdmcydzIGljaGVjayBjb21tYW5kIG1vcmUgcm9idXN0IGJ5IGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBhbgoraW5vZGUgaGFzIHZhbGlkIGJsb2NrcyBiZWZvcmUgaW50ZXJhcnRpbmcgb3ZlciB0aGUgaW5vZGUncyBibG9ja3MuCisKK1VVSUQgZ2VuZXJhdGlvbiBub3cgdXNlcyBhIHJhbmRvbS1iYXNlZCBzY2hlbWUgd2hlbmV2ZXIgcG9zc2libGUgdG8KK3ByZXZlbnQgcG90ZW50aWFsIHByaXZhY3kgcHJvYmxlbXMuCisKK01hbiBwYWdlcyBmb3IgYWxsIG9mIHRoZSBVVUlEIGZ1bmN0aW9ucyBpbiB0aGUgbGlyYmFyeSB3ZXJlIGFkZGVkLgorCitGaXhlZCBidWcgaW4gZnNjayBzbyBpdCB3b24ndCBjb3JlZHVtcCBpZiBhIGZpbGVzeXN0ZW0gbm90IGluCisvZXRjL2ZzdGFiIGlzIGdpdmVuIHRvIGl0LgorCitGc2NrIG5vdyB1bmRlcnN0YW5kcyB0aGUgVVVJRD14eHh4IGFuZCBMQUJFTD15eXl5IGZvcm1zIGluIC9ldGMvZnN0YWIKK3RoYXQgbW9zdCBvZiB0aGUgb3RoZXIgbW91bnQgdXRpbGl0aWVzIHVuZGVyc3RhbmRzLgorCitNa2UyZnMgd2lsbCBtYWtlIGEgZmlsZXN5c3RlbSBldmVuIGlmIGl0IGFwcGVhcnMgbW91bnRlZCBpZiB0aGUgZm9yY2UKK29wdGlvbiBpcyBnaXZlbi4KKworRHVtcGUyZnMgaGFzIG5ldyBjb21tYW5kLWxpbmUgb3B0aW9ucyB3aGljaCBhbGxvdyBhIGZpbGVzeXN0ZW0gZXhwZXJ0Cit0byBzcGVjaWZ5IHRoZSBzdXBlcmJsb2NrIGFuZCBibG9ja3NpemUgd2hlbiBvcGVuaW5nIGEgZmlsZXN5c3RlbS4KK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCB3aGVuIGV4YW1pbmluZyB0aGUgcmVtYWlucyBvZiBhIHRvYXN0ZWQKK2ZpbGVzeXN0ZW0uCisKK1RoZSBiYWRibG9ja3MgcHJvZ3JhbSBoYXMgYmVlbiB1cGRhdGVkIHRvIGRpc3BsYXkgY29ycmVjdGx5IG9uIGRpc2tzCit3aXRoIGxhcmdlIGJsb2NrIG51bWJlcnMuCisKK1RoZSBiYWRibG9ja3MgcHJvZ3JhbSBubyBsb25nZXIgZ2l2ZXMgc3B1cmlvdXMgZXJyb3JzIHdoZW4gZXJyb3JzCitvY2N1ciBvbiBub24tYmxvY2sgYm91bmRhcmllcywgd2hpY2ggaXMgY29tbW9uIGlmIHRoZSBibG9ja3NpemUgaXMKK2xhcmdlciB0aGFuIDFrLgorCitNa2UyZnMgd2lsbCBzeW5jIHRoZSBkaXNrIGRldmljZSBldmVyeSBNS0UyRlNfU1lOQyBibG9jayBncm91cHMgaWYgdGhlCitNS0UyRlNfU1lOQyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgVk0KK2J1ZyBpbiB0aGUgMi4wIGtlcm5lbC4gIEkndmUgaGVhcmQgYSByZXBvcnQgdGhhdCBhIFJBSUQgdXNlciB3YXMgYWJsZQordG8gdHJpZ2dlciBpdCBldmVuIHVzaW5nIGEgMi4yIGtlcm5lbCwgYnV0IGhvcGVmdWxseSBpdCB3aWxsIG5vdCBiZQorbmVlZGVkIGZvciBtb3N0IExpbnV4IDIuMiB1c2Vycy4KKworRml4ZWQgbWlzY2VsbGFuZW91cyBkb2N1bWVudGF0aW9uIGFuZCBtYW4gcGFnZXMuCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2xlYW5lZCB1cCBmdW5jdGlvbnMgc3VjaCBhcyBwYXNzMV9nZXRfYmxvY2tzLCBwYXNzMV9yZWFkX2lub2RlIHdoaWNoCitpbiBlMmZzY2sncyBwYXNzMS5jIHJlYWxseSBzaG91bGQgaGF2ZSBiZWVuIHN0YXRpYy4KKworVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdXVpZF9jb21wYXJlKCkgZnVuY3Rpb24gd2FzIGNoYW5nZWQgdG8gbWFrZSBpdAorbWF0Y2ggd2l0aCB0aGUgY29udmV0aW9ucyB1c2VkIGJ5IHN0cmNtcCwgbWVtY21wLCBhbmQgUGF1bCBMZWFjaCdzCitVVUlEIHNhbXBsZSBkb2N1bWVudC4KKworVGhlICJtYWtlIGRlcGVuZCIgcHJvY2VzcyBoYXMgbm93IGJlZW4gbWFkZSBtb3JlIGF1dG9tYXRlZDsgaXQgbm93CithdXRvbWF0aWNhbGx5IHdvcmQtd3JhcHMgdGhlIGRlcGVuZGVuY2llcywgYW5kIG9ubHkgcmVwbGFjZXMgc291cmNlCitNYWtlZmlsZS5pbiBpZiB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZSBpbiB0aGUgZGVwZW5kZW5jaWVzLiAgQWxzbywgYQordG9wLWxldmVsICJtYWtlIGRlcGVuZCIgbm93IHJlY3Vyc2VzIHRocm91Z2ggYWxsIHRoZSBzdWJkaXJlY3RvcmllcworYXV0b21hdGljYWxseS4KKworVGhlIE1ha2VmaWxlIGluIC4uLi91dGlsIGhhcyBiZWVuIGNoYW5nZWQgc28gdGhhdCBzdWJzdCBpcyBidWlsdCB1c2luZwordGhlIG5hdGl2ZSBDIGNvbXBpbGVyIGR1cmluZyBhIGNyb3NzLWNvbXBpbGF0aW9uLCBzaW5jZSB0aGUgc3Vic3QKK3Byb2dyYW0gaXMgb25seSB1c2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gIEFsc28gYWRkIGFuIGV4cGxpY2l0CitydWxlIHRvIGJ1aWxkIHV0aWwvc3Vic3QgYnkgY2QnaW5nIHRvIHRoZSBjb3JyZWN0IGRpcmVjdG9yeSBhbmQKK3J1bm5pbmcgTWFrZWZpbGUuCisKK1RoZSBtYW4gZGlyZWN0b3JpZXMgYXJlIGRlZmluZWQgaW4gdGVybXMgbWFuZGlyLCBzbyB0aGF0IHRoZSBjb25maWd1cmUKK3NjcmlwdCBjYW4gb3ZlcnJpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYW51YWwgcGFnZXMuCisKK1RoZSBjb25maWcgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVjb2duaXplIG5ldyBtYWNoaW5lIHR5cGVzIGZvcgorYm90aCB0aGUgaTM4NiBhbmQgYWxwaGEgZmFtaWxpZXMuCisKK0ZzY2sgaGFzIGJlZW4gbW9kaWZpZWQgc28gdGhhdCBpdCB3aWxsIGFjY3VyYXRlbHkgY3JlYXRlIGFuCitmc2NrX2luc3RhbmNlIGV2ZW4gd2hlbiB0aGUgbm9leGVjdXRlIGZsYWcgaXMgc2V0LiAgVGhpcyBhbGxvd3MgZm9yCithY2N1cmF0ZSBkZWJ1Z2dpbmcgb2YgdGhlIGZzY2sgcGFzcyBzdHJ1Y3R1cmUuICBBbHNvLCB3aGVuIHRoZSB2ZXJib3NlCitmbGFnIGlzIGdpdmVuIHR3aWNlLCBmc2NrIHdpbGwgcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdoZW4KK2ZzY2sgaXMgd2FpdGluZyBmb3Igam9icyB0byBmaW5pc2guCisKKworRTJmc3Byb2dzIDEuMTQgKEphbnVhcnkgOSwgMTk5OSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCB0aGUgZnN0YWIgcGFyc2luZyBjb2RlIHNvIHRoYXQgaXQgY2FuIGhhbmRsZSBibGFuayBsaW5lcyBhbmQKK2NvbW1lbnQgY2hhcmFjdGVycy4gIEFsc28sIG1pc3NpbmcgcGFzcyBudW1iZXJzIG5lZWQgdG8gYmUgdHJlYXRlZCBhcworemVyby4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoZXJlIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyAod2hlbiBlMmZzY2sKK25lZWRzIHRvIHJlc3RhcnQgcHJvY2Vzc2luZyBhZnRlciBmaXhpbmcgYW4gZWdyZWdpb3VzIGluY29uc2lzdGVuY3kpCitpdCB3b3VsZCB0cnkgdG8gYWNjZXNzIGFscmVhZHkgZnJlZWQgbWVtb3J5LgorCitFMmZzY2sgbm93IHByaW50cyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gZGlyZWN0b3J5IGVudHJpZXMgYW5kCitwYXRobmFtZXMgdXNpbmcgJ14nIGFuZCAnTS0nIG5vdGF0aW9uLgorCitGaXhlZCBjaGF0dHIgc28gdGhhdCBpdCB3aWxsIGlnbm9yZSBzeW1ib2xpYyBsaW5rcyB3aGVuIGRvaW5nCityZWN1cnNpdmUgZGVzY2VudCB0cmF2ZXJzYWxzLiAgRm9yIGJvdGggY2hhdHRyIGFuZCBsc2F0dHIsIG5vIGxvbmdlcgorcHJpbnQgdGhlIHZlcnNpb24gc3RyaW5nIHVubGVzcyB0aGUgLVYgb3B0aW9uIGlzIGdpdmVuLgorCitBbGxvdyB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gZGlyZWN0bHkgc3BlY2lmeSB0aGUgbnVtYmVyIG9mCitpbm9kZXMgZGVzaXJlZCBpbiB0aGUgZmlsZXN5c3RlbSwgZm9yIHNvbWUgc3BlY2lhbCBjYXNlcyB3aGVyZSB0aGlzIGlzCituZWNlc3NhcnkuCisKK0ZpeCBwb3J0YWJpbGl0eSBwcm9ibGVtcyBzbyB0aGF0IGUyZnNwcm9ncyBjYW4gYmUgY29tcGlsZWQgdW5kZXIgTGludXgKKzEuMiBzeXN0ZW1zIGFuZCBTb2xhcmlzIHN5c3RlbXMuCisKK1VwZGF0ZSB0aGUgY29uZmlnLmd1ZXNzIGZpbGUgd2l0aCBhIG1vcmUgcmVjZW50IHZlcnNpb24gdGhhdCB3aWxsCitpZGVudGlmeSBuZXdlciBMaW51eCBwbGF0Zm9ybXMuCisKK1Byb2dyYW1tZXIncyBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4dDJmc19yZWFkX2lub2RlIGFuZCBleHQyZnNfd3JpdGVfaW5vZGUgd2lsbCBub3cgcmV0dXJuIGFuIGVycm9yIGlmCithbiBpbm9kZSBudW1iZXIgb2YgemVybyBpcyBwYXNzZWQgdG8gdGhlbS4KKworRTJmc3Byb2dzIDEuMTMgKERlY2VtYmVyIDE1LCAxOTk4KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBhIGJ1ZyBpbiBkZWJ1Z2ZzIHdoZXJlIGFuIGVycm9yIG1lc3NhZ2VzIHdlcmVuJ3QgZ2V0dGluZyBwcmludGVkCit3aGVuIHRoZSBleHQyIGxpYnJhcnkgcm91dGluZXMgdG8gcmVhZCBpbm9kZXMgcmV0dXJuZWQgZXJyb3JzIGluIHRoZQorc3RhdCwgY21yaSBhbmQgcm0gY29tbWFuZHMuCisKK0ZpeGVkIGEgYnVnIGluIG1rZTJmcyBzbyB0aGF0IGlmIGEgcmlkaWN1bG91cyBpbm9kZSByYXRpbyBwYXJhbWV0ZXIgaXMKK3Byb3ZpZGVkLCBpdCB3b24ndCBjcmVhdGUgYW4gaW5vZGUgdGFibGUgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtCitudW1iZXIgb2YgaW5vZGVzIHJlcXVpcmVkIGZvciBhIHByb3BlciBleHQyIGZpbGVzeXN0ZW0uCisKK0ZzY2sgbm93IHBhcnNlcyB0aGUgL2V0Yy9mc3RhYiBmaWxlIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nCitnZXRtbnRlbnQoKSksIHNvIHRoYXQgaXQgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBtaXNzaW5nIHBhc3MgbnVtYmVyCitmaWVsZCBhbmQgcGFzcyBudW1iZXIgZmllbGQgb2YgemVyby4gIFRoaXMgY2F1c2VkIHByb2JsZW1zIGZvcgorZGlza2xlc3Mgd29ya3N0YXRpb25zIHdoZXJlIGFsbCBvZiB0aGUgZmlsZXN5c3RlbXMgaW4gL2V0Yy9mc3RhYiBoYXZlCithbiBleHBsaWNpdCBwYXNzIG51bWJlciBvZiB6ZXJvLCBhbmQgZnNjayBjb3VsZCBub3QgZGlzdGluZ3Vpc2ggdGhpcworZnJvbSBhIC9ldGMvZnN0YWIgZmlsZSB3aXRoIG1pc3NpbmcgcGFzcyBudW1iZXJzLgorCitFMmZzY2sgd2lsbCBjcmVhdGUgYSAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgaWYgdGhlcmUgaXNuJ3Qgb25lIGluIHRoZQorZmlsZXN5c3RlbSwgc2luY2UgaXQncyBzYWZlciB0byBjcmVhdGUgdGhlIGxvc3QrZm91bmQgZGlyZWN0b3J5IGJlZm9yZQoraXQncyBuZWVkZWQuCisKK0ZpeGVkIGUyZnNjayBzbyB0aGF0IGl0IHdvdWxkIGRldGVjdCBib2d1cyBpbW11dGFibGUgaW5vZGVzIHdoaWNoCitoYXBwZW4gdG8gYmUgc29ja2V0cyBhbmQgRklGTyBmaWxlcywgYW5kIG9mZmVyIHRvIGNsZWFyIHRoZW0uCisKK0lmIGEgZmlsZXN5c3RlbSBoYXMgbXVsdGlwbGUgcmVhc29ucyB3aHkgaXQgbmVlZHMgdG8gYmUgY2hlY2tlZCwgYW5kCitvbmUgb2YgdGhlIHJlYXNvbnMgaXMgdGhhdCBpdCBpcyB1bmNsZWFubHkgbW91bnRlZCwgZTJmc2NrIHdpbGwgcHJpbnQKK3RoYXQgYXMgdGhlIHJlYXNvbiB3aHkgdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgY2hlY2tlZC4KKworQ2xlYW5lZCB1cCB0aGUgb3V0cHV0IHJvdXRpbmVzIG9mIG1rZTJmcyBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcmZsb3cKK2FuIDgwIGNvbHVtbiBkaXNwbGF5IHdoZW4gZm9ybWF0aW5nIHJlYWxseSBiaWcgZmlsZXN5c3RlbXMuCisKK0FkZGVkIGEgc2FuaXR5IGNoZWNrIHRvIGUyZnNjayB0byBtYWtlIHN1cmUgdGhhdCBmaWxlIGRlc2NyaXB0b3JzIDAsCisxLCAyIGFyZSBvcGVuIGJlZm9yZSBvcGVuaW5nIHRoZSBoYXJkIGRpc2suICBUaGlzIGF2b2lkcyBhIHByb2JsZW0KK3doZXJlIGEgYnJva2VuIHByb2dyYW0gbWlnaHQgZXhlYyBlMmZzY2sgd2l0aCB0aG9zZSBmaWxlIGRlc2NyaXB0b3JzCitjbG9zZWQsIHdoaWNoIHdvdWxkIGNhdXNlIGRpc2FzdHJvdXMgcmVzdWx0cyBpZiB0aGUga2VybmVsIHJldHVybnMgYQorZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgYmxvY2sgZGV2aWNlIHdoaWNoIGlzIGFsc28gdXNlZCBieSBGSUxFICoKK3N0ZG91dC4KKworRml4ZWQgdXAgdGhlIGUyZnNjayBwcm9ncmVzcyByZXBvcnRpbmcgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIHZhbHVlcworcmVsaWFibHkgcmVhY2ggMTAwJSBhdCB0aGUgY29tcGxldGlvbiBvZiBhbGwgb2YgdGhlIGUyZnNjayBwYXNzZXMuCisKK0ZpeGVkIG1pbm9yIGRvY3VtZW50YXRpb24gYnVncyBpbiBtYW4gcGFnZXMgYW5kIHVzYWdlIG1lc3NhZ2VzLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIGEgbnVtYmVyIG9mIGxpbnQgd2FybmluZ3MgaW4gdGhlIGV4dDJmcyBsaWJyYXJ5IGFuZCBwb3RlbnRpYWwKK3BvcnRhYmlsaXR5IHByb2JsZW1zIGZyb20gb3RoZXIgT1MncyBoZWFkZXIgZmlsZXMgdGhhdCBtaWdodCBkZWZpbmUKK0NQUCBtYWNyb3MgZm9yIG5hbWVzIGxpa2UgIm1heCIgYW5kICJtaW4iLgorCitleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkKCkgaGFzIGJlZW4gbWFkZSBtb3JlIGVmZmljaWVudCB3aGVuIGl0IG5lZWRzCit0byBncm93IHRoZSBiYWQgYmxvY2tzIGxpc3QuCisKK0ZpeGVkIGEgYnVnIGluIGUyZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gZGVyZWZlcmVuY2UgYSBmcmVlZCBwb2ludGVyCitqdXN0IGJlZm9yZSBleGl0aW5nLgorCitGaXhlZCB0aGUgc3Vic3RpdGlvbiBwcm9jZXNzIGZvciBnZW5lcmF0aW5nIHRoZSBta19jbWRzIGFuZCBjb21waWxlX2V0CitzY3JpcHRzIHNvIHRoYXQgdGhleSB3aWxsIHdvcmsgb3V0c2lkZSBvZiB0aGUgYnVpbGQgdHJlZS4KKworQWRkIHNhbml0eSBjaGVjayB0byBlMmZzY2sgc28gdGhhdCBpZiBhbiBpbnRlcm5hbCByb3V0aW5lCisoZXh0MmZzX2dldF9kaXJfaW5mbykgcmV0dXJucyBOVUxMLCBhdm9pZCBkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyCithbmQgY2F1c2luZyBhIGNvcmUgZHVtcC4gIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0Li4uCisKK0UyZnNwcm9ncyAxLjEyIChKdWx5IDksIDE5OTgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0UyZnNwcm9ncyBub3cgd29ya3Mgd2l0aCBnbGliYyAoYXQgbGVhc3Qgd2l0aCB0aGUgdmVyc2lvbiBzaGlwcGVkIHd0aWgKK1JlZEhhdCA1LjApLiAgVGhlIGV4dDJmc19sbHNlZWsoKSBmdW5jdGlvbiBzaG91bGQgbm93IHdvcmsgZXZlbiB3aXRoCitpMzg2IEVMRiBzaGFyZWQgbGlicmFyaWVzIGFuZCBpZiBsbHNlZWsoKSBpcyBub3QgcHJlc2VudC4gIFdlIGFsc28KK2V4cGxpY2l0bHkgZG8gYSBjb25maWd1cmUgdGVzdCB0byBzZWUgaWYgKGEpIGxsc2VlayBpcyBpbiBsaWJjLCBhbmQKKyhiKSBpZiBsbHNlZWsgaXMgZGVjbGFyZWQgaW4gdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuICAoU2VlIHN0YW5kYXJkCitjb21wbGFpbnRzIGFib3V0IGxpYmMgZGV2ZWxvcGVycyBkb24ndCB1bmRlcnN0YW5kIHRoZSBjb25jZXB0IG9mCitjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgbGliYy4pCisKK1RoZSBleHQyZnMgbGlicmFyeSBub3cgd3JpdGVzIG91dCB0aGUgYmxvY2sgZ3JvdXAgbnVtYmVyIGluIGVhY2ggb2YKK3RoZSBzdXBlcmJsb2NrIGNvcGllcy4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGF1dG9tYXRpY2FsbHkKK2RldGVybWluZSB0aGUgc3RhcnRpbmcgYmxvY2sgZ3JvdXAgb2YgdGhlIGZpbGVzeXN0ZW0gd2hlbiB0aGUgYmxvY2sKK2dyb3VwIGluZm9ybWF0aW9uIGlzIHRyYXNoZWQuCisKK0FkZGVkIHN1cHBvcnQgZm9yIHRoZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUgZmVhdHVyZSwKK3doaWNoIG1lYW5zIHRoYXQgZTJmc3Byb2dzIHdpbGwgaWdub3JlIHRoZSBoaWdoIDggYml0cyBvZiB0aGUKK2RpcmVjdG9yeSBlbnRyeSdzIG5hbWVfbGVuIGZpZWxkLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciBvdGhlcgorcHVycG9zZXMuCisKK0FkZGVkIHN1cHBvcnQgZm9yIHRoZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUgZmVhdHVyZS4KK0UyZnNwcm9ncyB3aWxsIG5vdyBzdXBwb3J0IGZpbGVzeXN0ZW1zIHdpdGggNjQtYml0IHNpemVkIGZpbGVzLgorCitBZGRlZCBzdXBwb3J0IGZvciB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmVhdHVyZS4KKworQWRkZWQgbmV3IHByb2dyYW0gImUybGFiZWwiLCBjb250cmlidXRlZCBieSBBbmRyaWVzIEJyb3V3ZXIuICBFMmxhYmVsCitwcm92aWRlcyBhbiBlYXN5LXRvLXVzZSBpbnRlcmZhY2UgdG8gbW9kaWZ5IHRoZSBmaWxlc3lzdGVtIGxhYmVsLgorCitGaXhlZCBidWcgc28gdGhhdCBsc2F0dHIgLXYgd29ya3MgaW5zdGVhZCBvZiBwcm9kdWNpbmcgYSBjb3JlIGR1bXAuCisKK0ZpeGVkIGEgbWlub3IgYnVnIGluIG1rZTJmcyBzbyB0aGF0IGFsbCBncm91cHMgd2l0aCBiYWQgc3VwZXJibG9jaworYmFja3VwIGJsb2NrcyBhcmUgcHJpbnRlZCAobm90IGp1c3QgdGhlIGZpcnN0IG9uZSkuCisKK01rZTJmcyB3aWxsIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBkZXZpY2UsIGFuZCBpZiB0aGUgdXNlciBzcGVjaWZpZXMgYQorZmlsZXN5c3RlbSBzaXplIGxhcmdlciB0aGFuIHRoZSBhcHBhcmVudCBzaXplIG9mIHRoZSBkZXZpY2UgaXQgd2lsbAorcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIGFzayBpZiB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkLgorCitFMmZzY2sgaGFzIGEgbmV3IG9wdGlvbiAtQywgd2hpY2ggc2VuZHMgY29tcGxldGlvbiBpbmZvcm1hdGlvbiB0byB0aGUKK3NwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuICBGb3IgdGhlIG1vc3QgcGFydCwgdGhpcyBpcyBpbnRlbmRlZCBmb3IKK3Byb2dyYW1zIHRvIHVzZSwgYWx0aG91Z2ggLUMgMCB3aWxsIHByaW50IGEgc3Bpbm5pbmcgY2hhcmFjdGVyIHRvIHRoZQorc3Rkb3V0IGRldmljZSwgd2hpY2ggbWF5IGJlIHVzZWZ1bCBmb3IgdXNlcnMgd2hvIHdhbnQgdG8gc2VlIHNvbWV0aGluZworaGFwcGVuaW5nIHdoaWxlIGUyZnNjayBnb2VzIGFib3V0IGl0cyBidXNpbmVzcy4KKworRml4ZWQgYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNvdWxkIGNhdXNlIGEgY29yZSBkdW1wIHdoZW4gaXQgbmVlZHMgdG8KK2V4cGFuZCB0aGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5LCBhbmQgc29tZXRpbWVzIHRoZSBiaXRtYXBzIGhhdmVuJ3QKK2JlZW4gbWVyZ2VkIGluLiAgQWxzbyBmaXhlZCBhIHJlbGF0ZWQgYnVnIHdoZXJlIGV4dDJmc193cml0ZV9kaXJfYmxvY2sKK3dhcyB1c2VkIHRvIHdyaXRlIG91dCBhIG5vbi1kaXJlY3RvcnkgYmxvY2suICAoV2hpY2ggd291bGQgYmUgYmFkIG9uIGEKK25vbi1JbnRlbCBwbGF0Zm9ybSB3aXRoIGJ5dGUgc3dhcHBpbmcgZ29pbmcgb24uKQorCitGaXhlZCBidWcgaW4gZTJmc2NrIHdoZXJlIGl0IHdvdWxkIHByaW50IGEgInByb2dyYW1taW5nIGVycm9yIiBtZXNzYWdlCitpbnN0ZWFkIG9mIGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVyZSBhIGJhZCBibG9jayB3YXMgaW4gdXNlZCB3aGVuCit0aGUgYmFkIGJsb2NrIHdhcyBpbiBhIG5vbi1wcmltYXJ5IHN1cGVyYmxvY2sgb3IgYmxvY2sgZ3JvdXAKK2Rlc2NyaXB0b3IuICBBbHNvIGZpeGVkIGEgcmVsYXRlZCBidWcgd2hlbiBzcGFyc2Ugc3VwZXJibG9ja3MgYXJlIGluCit1c2UgYW5kIHRoZXJlIGlzIGEgYmFkIGJsb2NrIHdoZXJlIGEgc3VwZXJibG9jayBvciBibG9jayBncm91cAorZGVzY3JpcHRvciB3b3VsZCBoYXZlIGJlZW4gaW4gYSBncm91cCB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhCitzdXBlcmJsb2NrLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgKHJlYWxseSBpbiBsaWJleHQyZnMncyBkYmxpc3QgZnVuY3Rpb24pIHdoZXJlIGlmCit0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciB0YWJsZSBpcyBjb3JydXB0LCBpdCB3YXMgcG9zc2libGUgdG8gdHJ5IHRvCithbGxvY2F0ZSBhIGh1Z2UgYXJyYXksIGZhaWwsIGFuZCB0aGVuIGFib3J0IGUyZnNjay4KK2V4dDJmc19nZXRfbnVtX2RpcnMoKSBub3cgc2FuaXR5IGNoZWNrcyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciwKK2FuZCBzdWJzaXR1dGVzIHJlYXNvbmFibGUgdmFsdWVzIGlmIHRoZSBkZXNjcmlwdG9ycyBhcmUgb2J2aW91c2x5IGJvZ3VzLgorCitJZiBlMmZzY2sgZmluZHMgYSBkZXZpY2UgZmlsZSB3aGljaCBoYXMgdGhlIGltbXV0YWJsZSBmbGFnIHNldCBhbmQgdGhlCitpX2Jsb2NrcyBiZXlvbmQgdGhlIG5vcm1hbCBkZXZpY2UgbnVtYmVyIGFyZSBub24temVybywgZTJmc2NrIHdpbGwKK29mZmVyIHRvIHJlbW92ZSBpdCwgc2luY2UgaXQncyBwcm9iYWJseSBjYXVzZWQgYnkgZ2FyYmFnZSBpbiB0aGUgaW5vZGUKK3RhYmxlLgorCitXaGVuIG9wZW5pbmcgYSBmaWxlc3lzdGVtLCBlMmZzY2sgc3BlY2lhbGx5IGNoZWNrcyBmb3IgdGhlIEVST0ZTIGVycm9yCitjb2RlLCBhbmQgcHJpbnRzIGEgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSB0byB0aGUgdXNlciB3aGljaCBpcyBtb3JlCit1c2VyIGZyaWVuZGx5LgorCitJZiB0aGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyB0b28gaGlnaCwgY2hhbmdlIHRoZSBlMmZzY2sgdG8gcHJpbnQKK3RoYXQgdGhpcyBpcyBlaXRoZXIgYmVjYXVzZSBlMmZzY2sgaXMgb3V0IG9mIGRhdGUsIG9yIGJlY2F1c2UgdGhlCitzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuICAKKworRTJmc2NrIG5vdyBjaGVja3MgZm9yIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBkdXBsaWNhdGUgJy4nIGFuZCAnLi4nCitlbnRyaWVzLCBhbmQgZml4ZXMgdGhpcyBjb3JydXB0aW9uLgorCitFMmZzY2sgbm8gbG9uZ2VyIGZvcmNlcyBhIHN5bmMgb2YgdGhlIGZpbGVzeXN0ZW0gKHdpdGggYXR0ZW5kYW50IHNsZWVwCitjYWxscykgYXQgYWxsIHRpbWVzLiAgVGhlIGV4dDJmc19mbHVzaCgpIGZ1bmN0aW9uIG5vdyBwZXJmb3JtcyBhIHN5bmMKK29ubHkgaWYgaXQgbmVlZGVkIHRvIHdyaXRlIGRhdGEgYmxvY2tzIHRvIGRpc2suCisKK0ZpeGVkIGEgbWlub3IgYnVnIGluIGUyZnNjaydzIHBhc3MxYidzIGZpbGUgY2xvbmluZyBmdW5jdGlvbiwgd2hlcmUKK2NlcnRhaW4gZXJyb3JzIHdvdWxkIG5vdCBiZSBwcm9wZXJseSByZXBvcnRlZC4KKworVXBkYXRlZCBhbmQgZXhwYW5kZWQgYSBmZXcgcG9pbnRzIGluIHRoZSBtYW4gcGFnZXMgd2hpY2ggdXNlcnMKK2NvbXBsYWluZWQgd2hlcmVuJ3QgZXhwbGljaXQgZW5vdWdoLgorCitBZGRlZCBzcGVjaWFsIGNhc2UgYnl0ZS1zd2FwcGluZyBjb2RlIGlmIGNvbXBpbGluZyBvbiB0aGUgUG93ZXJQQywgdG8KK2FjY29tb2RhdGUgdGhlIHN0cmFuZ2UgYmlnLWVuZGlhbiB2YXJpYW50IG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gdGhhdAord2FzIHByZXZpb3VzbHkgdXNlZCBvbiB0aGUgUG93ZXJQQyBwb3J0LgorCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVtb3ZlZCBDKysga2V5d29yZHMgZnJvbSB0aGUgZXh0MmZzIGxpYnJhcmllcyBzbyB0aGF0IGl0IGNvdWxkIGJlCitjb21waWxlZCB3aXRoIEMrKy4KKworRTJmc2NrJ3MgaW50ZXJuYWwgb3JnYW5pemF0aW9uIGhhcyBub3cgYmVlbiBtYXNzaXZlbHkgcmVvcmdhbml6ZWQgc28KK3RoYXQgcGFzcyouYyBkb24ndCBoYXZlIGFueSBwcmludGYgc3RhdGVtZW50cy4gIEluc3RlYWQsIGFsbCBwcm9ibGVtcworYXJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIGZpeF9wcm9ibGVtKCkgYWJzdHJhY3Rpb24gaW50ZXJmYWNlLiAgRTJmc2NrCitoYXMgYWxzbyBiZWVuIHJldmFtcGVkIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCBhcyBhIGxpYnJhcnkgZnJvbSBhCithcHBsaWNhdGlvbi4KKworQWRkZWQgbmV3IGZpbGVpbyBwcmltaXRpdmVzIGluIGxpYmV4dDJmcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworZmlsZXMgb24gYW4gdW5tb3VudGVkIGV4dDIgZmlsZXN5c3RlbS4gIFRoaXMgaW50ZXJmYWNlIGlzIG5vdyB1c2VkIGJ5CitkZWJ1Z2ZzLgorCitBZGRlZCBhIG5ldyBsaWJleHQyZnMgZnVuY3Rpb24gZm9yIG1hcHBpbmcgbG9naWNhbCBibG9jayBudW1iZXJzIG9mCithIGZpbGUgdG8gYSBwaHlzaWNhbCBibG9jayBudW1iZXIuCisKK0FkZGVkIGEgbmV3IGxpYmV4dDJmcyBmdW5jdGlvbiwgZXh0MmZzX2FsbG9jX2Jsb2NrKCksIHdoaWNoIGFsbG9jYXRlcworYSBibG9jaywgemVyb3MgaXQsIGFuZCB1cGRhdGVzIHRoZSBmaWxlc3lzdGVtIGFjY291bnRpbmcgcmVjb3JkcworYXBwcm9wcmlhdGVseS4KKworQWRkZWQgYSBuZXcgbGliZXh0MmZzIGZ1bmN0aW9uLCBleHQyZnNfc2V0X2JpdG1hcF9wYWRkaW5nKCksIHdoaWNoCitzZXRzIHRoZSBwYWRkaW5nIG9mIHRoZSBiaXRtYXAgdG8gYmUgYWxsIG9uZSdzLiAgVXNlZCBieSBlMmZzY2sgcGFzcyA1LgorCitUaGUgbGliZXh0MmZzIGZ1bmN0aW9ucyBub3cgdXNlIGEgc2V0IG9mIG1lbW9yeSBhbGxvY2F0aW9uIHdyYXBwZXIKK2Z1bmN0aW9uczogZXh0MmZzX2dldF9tZW0sIGV4dDJmc19mcmVlX21lbSwgYW5kIGV4dDJmc19yZXNpemVfbWVtLAoraW5zdGVhZCBvZiBtYWxsb2MsIGZyZWUsIGFuZCByZXNpemUuICBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3IgdXMgdG8KK2JlIHBvcnRlZCB0byBzdHJhbmdlIGVudmlyb25tZW50cyB3aGVyZSBtYWxsb2MsIGV0LiBhbC4gYXJlbid0CituZWNlc3NhcmlseSBhdmFpbGFibGUuCisKK0NoYW5nZSB0aGUgbGliZXh0MmZzIGZ1Y250aW9uIHRvIHJldHVybiBleHQyLXNwZWNpZmljIGVycm9yIGNvZGVzCisoRVhUMl9ESVJfRVhJU1RTIGFuZCBFWFQyX0RCX05PVF9GT1VORCwgZm9yIGV4YW1wbGUpIGluc3RlYWQgb2YgdXNpbmcKK2FuZCBkZXBlbmRpbmcgb24gdGhlIGV4aXN0ZW5jZSBvZiBzeXN0ZW0gZXJyb3IgY29kZXMgKHN1Y2ggYXMgRUVYSVNUCithbmQgRU5PRU5UKS4KKworUmVuYW1lZCBpby5oIHRvIGV4dDJfaW8uaCB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBvdGhlciBPUydzIGhlYWRlcgorZmlsZXMuCisKK0FkZCBwcm90ZWN0aW9uIGFnYWluc3QgZXh0Ml9pby5oIGFuZCBleHQyZnMuaCBiZWluZyBpbmNsdWRlZCBtdWx0aXBsZQordGltZXMuCisKK1RoZSB0eXBlcyB1c2VkIGZvciBtZW1vcnkgbGVuZ3RocywgZXRjLiBoYXZlIGJlZW4gbWFkZSBtb3JlIHBvcnRhYmxlLgorSW4gZ2VuZXJsYSwgdGhlIGNvZGUgaGFzIGJlZW4gbWFkZSAxNi1iaXQgc2FmZS4gIEFkZGVkIE1hcmsKK0hhYmVyc2FjaydzIGNvbnRyaWJ1dGVkIERPUyBkaXNrIGkvbyByb3V0aW5lcy4KKworTWlzY2VsbGFuZW91cyBwb3J0YWJpbGl0eSBmaXhlcywgaW5jbHVkaW5nIG5vdCBkZXBlbmRpbmcgb24gY2hhcidzCitiZWluZyBzaWduZWQuCisKK1RoZSBpb19jaGFubmVsIHN0cnVjdHVyZSBoYXMgYSBuZXcgZWxlbWVudCwgYXBwX2RhdGEsIHdoaWNoIGlzCitpbml0aWFsaXplZCBieSB0aGUgZXh0MmZzIHJvdXRpbmVzIHRvIGNvbnRhaW4gYSBjb3B5IG9mIHRoZSBmaWxlc3lzdGVtCitoYW5kbGUuCisKK2V4dDJmc19jaGVja19kaXJlY3RvcnkoKSdzIGNhbGxiYWNrIGZ1bmN0aW9uIG1heSBub3cgcmV0dXJuIHRoZSBlcnJvcgorRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEIGlmIGl0IHdpc2hlcyBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KCkgdG8KK3JlYWxseSBkbyB0aGUgY2hlY2tpbmcsIGRlc3BpdGUgdGhlIHByZXNlbmNlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKworCitFMmZzcHJvc2cgMS4xMSAoSnVuZSAxNywgMTk5NykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBlMmZzY2sgdG8gZGV0ZWN0IChwcmV2aW91c2x5IGlnbm9yZWQpIGNvbmZsaWN0cyBiZXR3ZWVuIHRoZQorc3VwZXJibG9jayBvciBibG9jayBncm91cCBkZXNjcmlwdG9ycyBhbmQgYmxvY2sgYml0bWFwcywgaW5vZGUKK2JpdG1hcHMsIGFuZCBpbm9kZSB0YWJsZXMuCisKK0ZpeGVkIGJ1ZyBpbiBlMmZzY2sgc28gdGhhdCB3aGVuIHRoZSBtZXNzYWdlIHByaW50ZWQgb3V0IHdoZW4gYSBibG9jaworb3IgaW5vZGUgYml0bWFwIGNvbmZsaWN0cyB3aXRoIG90aGVyIGRhdGEsIGl0IGhhcyB0aGUgY29ycmVjdCBncm91cAorbnVtYmVyLgorCitGaXhlZCBidWcgaW4gZTJmc2NrIGFuZCBta2UyZnMgd2hlcmUgdGhlIGJsb2Nrc2l6ZSB3YXNuJ3QgYmVpbmcgcGFzc2VkCit0byBiYWRibG9ja3MuICBUaGlzIG1lYW50IHRoYXQgbm90IGFsbCBvZiB0aGUgZmlsZXN5c3RlbSB3YXMgYmVpbmcKK3Rlc3RlZCBmb3IgYmFkIGJsb2NrcyEgCisKK0ZpeGVkIGFuIGFycmF5IGJvdW5kYXJ5IG92ZXJydW4gY2FzZSB3aGljaCBjcm9wcGVkIHVwIGluCitleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdCB3aGVuIGEgdXNlciB0cmllZCBydW5uaW5nICJta2UyZnMgLWMgCistYiA0MDk2Ii4KKworQWRqdXN0ZWQgdGhlIG51bWJlciBvZiBjb2x1bW5zIHByaW50ZWQgYnkgbWtlMmZzIHdoZW4gZGlzcGxheWluZyB0aGUKK3N1cGVyYmxvY2sgYmFja3VwcyB0byBhdm9pZCBydW5uaW5nIG92ZXIgODAgY29sdW1ucyB3aGVuIG1ha2luZyBhCityZWFsbHkgYmlnIGZpbGVzeXN0ZW0uCisKK0ZpeGVkIHVwIHRoZSBtYW4gcGFnZXMgZm9yIGUyZnNjaywgZGVidWdmcywgYmFkYmxvY2tzLCBjaGF0dHIsCitkdW1wZTJmcywgZnNjaywgbWtlMmZzLCBhbmQgdHVuZTJmcyAodHlwb3MgYW5kIG90aGVyIG1pbm9yIGdyYW1tYXIKK2ZpeGVzKSwgdGhhbmtzIHRvIHNvbWUgc3VnZ2VzdGlvbnMgZnJvbSBCaWxsIEhhd2VzICh3aGF3ZXNAc3Rhci5uZXQpLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpeGVkIGluc3RhbGwgcnVsZSBpbiBsaWIvc3Mgc28gdGhhdCBzc19lcnIuaCBpcyBhY3R1YWxseSBnZXR0aW5nCitpbnN0YWxsZWQuCisKK0ZpeGVkIGJ1ZyBpbiBleHQyZnNfY29weV9iaXRtYXA7IHRoZSBkZXN0aW5hdGlvbiBiaXRtYXAgd2Fzbid0IGdldHRpbmcKK2Jhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIuCisKK0ZpeGVkIGJ1ZyBpbiBleHQyZnNfaW5vZGVfc2Nhbl9nb3RvX2Jsb2NrZ3JvdXA7IGl0IGhhZCBub3QgYmVlbgorc2V0dGluZyB0aGUgY3VycmVudCBpbm9kZSBudW1iZXIgKHdoaWNoIG1lYW50IHRoaXMgZnVuY3Rpb24gd2Fzbid0Cit3b3JraW5nIGF0IGFsbCkuCisKK0ZpeGVkIGJ1ZyBpbiBleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwOyBpdCBoYWQgbm90IGJlIHplcm9pbmcgYWxsCitibG9ja3MgaW4gdGhlIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdG1hcC4KKworQ2hhbmdlZCB0aGUgaW5pdGlhbCBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCBieSBleHQyZnNfaW5pdF9kYmxpc3QoKQordG8gYmUgbW9yZSByZWFsaXN0aWMuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19hbGxvY2F0ZV9ncm91cF90YWJsZSwgd2hpY2ggc2V0cyB1cCB0aGUKK2dyb3VwIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gKGFuZCBhbGxvY2F0ZXMgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMsCithbmQgaW5vZGUgdGFibGVzIGZvciBhIHBhcnRpY3VsYXIgZ3JvdXApLiAgVGhlIGZ1bmN0aW9uIHdhcyBjcmVhdGVkIGJ5CitmYWN0b3Jpbmcgb3V0IGNvZGUgZm9ybSBleHQyZnNfYWxsb2NhdGVfdGFibGVzKCkuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19tb3ZlX2Jsb2NrcyB3aGljaCB0YWtlcyBhIGJpdG1hcCBvZiB0aGUKK2Jsb2NrcyB0byBiZSBtb3ZlZCwgYW5kIG1vdmVzIHRoZW0gdG8gYW5vdGhlciBsb2NhdGlvbiBvbiB0aGUKK2JvYXJkYm9hcmQuCisKK01ha2UgdGhlIHVuaXhfaW8gY2hhbm5lbCdzIGlvX2NoYW5uZWxfZmx1c2ggaW1wbGVtZW50YXRpb24gY2FsbHMgc3luYygpCit0byB0byBmbHVzaCB0aGUga2VybmVsIGJ1ZmZlcnMgdG8gZGlzay4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gZXh0MmZzX2RibGlzdF9jb3VudCByZXR1cm5zIHRoZSBudW1iZXIgb2YKK2RpcmVjdG9yeSBibG9ja3MgaW4gZGJsaXN0LgorCisKK0UyZnNwcm9ncyAxLjEwIChBcHJpbCAyNCwgMTk5NykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWtlMmZzIG9uY2UgYWdhaW4gZGVmYXVsdHMgdG8gY3JlYXRpbmcgcmV2aXNpb24gIzAgZmlsZXN5c3RlbXMsIHNpbmNlCitwZW9wbGUgd2VyZSBjb21wbGFpbmluZyBhYm91dCBicmVha2luZyBjb21wYXRpYmlsaXR5IHdpdGggMS4yIGtlcm5lbHMuCitXYXJuaW5nIG1lc3NhZ2VzIHdlcmUgYWRkZWQgdG8gdGhlIG1rZTJmcyBhbmQgdHVuZTJmcyBtYW4gcGFnZXMgdGhhdAordGhlIHNwYXJzZSBzdXBlcmJsb2NrIG9wdGlvbiBpc24ndCBzdXBwb3J0ZWQgYnkgbW9zdCBrZXJuZWxzIHlldCAoMS4yCithbmQgMi4wIGJvdGggZG9uJ3Qgc3VwcG9ydCBwYXJzZSBzdXBlcmJsb2Nrcy4pCisKK0FkZGVkIG5ldyBmbGFnIHRvIG1rZTJmcywgLVIgPHJhaWQgb3B0aW9ucz4sIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0bwordGVsbCBta2UyZnMgYWJvdXQgdGhlIFJBSUQgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbS4gIEN1cnJlbnRseQordGhlIG9ubHkgc3VwcG9ydGVkIHJhaWQgb3B0aW9uIGlzICJzdHJpZGUiIHdoaWNoIHNwZWNpZmllcyB0aGUgd2lkdGgKK29mIHRoZSBSQUlEIHN0cmlwZS4KKworRml4ZWQgYnVnIGluIGUyZnNjayB3aGVyZSBwYXNzMWIgd291bGQgYm9tYiBvdXQgaWYgdGhlcmUgd2VyZSBhbnkKK2Jsb2NrcyBtYXJrZWQgYmFkIGluIHRoZSBpbm9kZSB0YWJsZS4KKworRml4ZWQgcmFyZSBidWcgaW4gbWtlMmZzIHdoZXJlIGlmIHRoZSB1c2VyIGhhZCBhIHZlcnkgdW5sdWNreSBudW1iZXIKK29mIGJsb2NrcyBpbiBhIGZpbGVzeXN0ZW0gKHByb2JhYmlsaXR5IGxlc3MgdGhhbiAuMDAyKSB0aGUgcmVzdWx0aW5nCitmaWxlc3lzdGVtIHdvdWxkIGJlIGNvcnJ1cHQgaW4gdGhlIGxhc3QgYmxvY2sgZ3JvdXAuCisKK0ZpeGVkIGJ1ZyB3aGVyZSBpZiBlMmZzY2sgdHJpZWQgdG8gYWxsb2NhdGUgYSBibG9jayB0byBmaXggYQorZmlsZXN5c3RlbSBjb3JydXB0aW9uIHByb2JsZW0gYW5kIHRoZSBmaWxlc3lzdGVtIGhhZCBubyBmcmVlIGJsb2NrcywKK2V4dDJmc19uZXdfYmxvY2soKSB3b3VsZCBsb29wIGZvcmV2ZXIuCisKK1RoZSBjb25maWd1cmUgc2NyaXB0IG5vdyBjaGVja3MgZXhwbGljaXRseSB0byBzZWUgaWYgIi1zdGF0aWMiIHdvcmtzLAorc2luY2UgdGhhdCBjYW4ndCBiZSBhc3N1bWVkIHRvIGJlIHRydWUgLS0tIFJlZEhhdCBkb2Vzbid0IGluc3RhbGwKK2xpYmMtc3RhdGljIGJ5IGRlZmF1bHQuCisKK0ZpeGVkIGJ1ZyBpbiBsaWJleHQyJ3MgYmxvY2sgaXRlcmF0b3IgZnVuY3Rpb25zIHdoZXJlIHVuZGVyIHNvbWUKK2Npcm1jdXN0YW5jZXMsIGZpbGUgd2l0aCBob2xlcyB3b3VsZCBjYXVzZSB0aGUgYmNvdW50IHBhcmFtZXRlciB0byB0aGUKK2NhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGluY29ycmVjdC4gIFRoaXMgYnVnIGRpZG4ndCBhZmZlY3QgYW55IG9mCitlMmZzcHJvZ3MgcHJvZ3JhbXMsIGJ1dCBpdCB3YXMgZGlzY292ZXJlZCBieSBQYXVsIE1hY2tlcnJhcywgdGhlCithdXRob3Igb2YgdGhlIFBQQyBib290IGxvYWRlci4KKworUmVtb3ZlZCB1c2Ugb2Ygc3RhdGljIHZhcmlhYmxlcyB0byBzdG9yZSB0aGUgaW5vZGUgY2FjaGUgaW4gbGliZXh0MmZzLgorVGhpcyBjYXVzZWQgcHJvYmxlbXMgaWYgbW9yZSB0aGFuIG9uZSBmaWxlc3lzdGVtIHdhcyBhY2Nlc3NlZCB2aWEKK2xpYmV4dDJmcyAoc3RhdGljIHZhcmlhYmxlcyBpbiBsaWJyYXJpZXMgYXJlIGdlbmVyYWxseSBhIGJhZCBpZGVhKS4KK0FnYWluLCB0aGlzIGRpZG4ndCBhZmZlY3QgZTJmc3Byb2dzIHByb2dyYW1zLCBidXQgaXQgd2FzIGRpc2NvdmVyZWQgYnkKK1BhdWwgTWFja2VycmFzLgorCitGaXhlZCBtaW5vciBidWdzIGFuZCB2ZXJzaW9uIGNvZGUgZHJpZnQgdG8gYXNzdXJlIHRoYXQgZTJmc3Byb2dzIDEuMTAKK3dpbGwgY29tcGlsZSBjbGVhbmx5IHdpdGggMS4yLjEzIGtlcm5lbHMgKGV2ZW4gd2l0aCBhLm91dCBzaGFyZWQKK2xpYnJhcmllcyEpCisKK1Byb2dyYW1tZXIncyBub3RlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkZWQgbmV3IGZ1bmN0aW9ucyB0byBkdXBsaWNhdGUgYW4gZXh0MiBmaWxlc3lzdGVtIGhhbmRsZSwgYW5kIGl0cworYXNzb2NpYXRlZCBzdWJzdHJ1Y3R1cmUuICBOZXcgZnVuY3Rpb25zOiBleHQyZnNfZHVwX2hhbmRsZSgpLAorZXh0MmZzX2NvcHlfZGJsaXN0KCksIGV4dDJmc19iYWRibG9ja3NfY29weSgpLCBleHQyZnNfY29weV9iaXRtYXAoKS4KK090aGVyIHN0cnVjdHVyZXMsIHN1Y2ggYXMgdGhlIGlvX2NoYW5uZWwgYW5kIHRoZSBpbm9kZV9jYWNoZSwgbm93IGhhdmUKK2EgcmVmIGNvdW50IHNvIHRoYXQgdGhleSBvbmx5IGdldCBmcmVlZCB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciB1c2VkCitieSBhbnkgZmlsZXN5c3RlbSBoYW5kbGUuICAoVGhlc2UgZnVuY3Rpb25zIHdlcmUgYWRkZWQgYXMgcGFydCBvZiB0aGUKK2RldmVsb3BtZW50IGVmZm9ydCBmb3IgYW4gZXh0MiByZXNpemVyKS4KKworRTJmc3Byb2dzIDEuMDkgKEFwcmlsIDE0LCAxOTk3KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlZCBidWcgaW4gbWtlMmZzIChyZWFsbHkgaW4gbGliL2V4dDJmcy9pbml0aWFsaXplLmMpIHdoaWNoIHdhcworYWNjaWRlbnRhbGx5IGludHJvZHVjZWQgaW4gdGhlIDEuMDggcmVsZWFzZS4gIFRoZSBvdmVyaGVhZCBjYWxjdWxhdGlvbgord2FzIGFjY2lkZW50YWxseSByZW1vdmVkLCB3aGljaCBjYXVzZWQgZXh0MmZzX2luaXRpYWxpemUoKSB0byBub3QKK25vdGljZSB3aGVuIHRoZSBmaWxlc3lzdGVtIHNpemUgbmVlZGVkIHRvIGJlIGFkanVzdGVkIGRvd24gYmVjYXVzZQordGhlcmUgd2Fzbid0IGVub3VnaCBzcGFjZSBpbiB0aGUgbGFzdCBibG9jayBncm91cC4KKworRml4ZWQgYnVnIGluIHZlcnNpb24gcGFyc2luZyBsaWJyYXJ5IHJvdXRpbmU7IGl0IHdhcyBhbHdheXMgcGFyc2luZwordGhlIGxpYnJhcnkgdmVyc2lvbiBzdHJpbmcsIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBhc3NlZC1pbiBzdHJpbmcuCisKK0NsYXJpZmllZCBjaGF0dHIgbWFuIHBhZ2UuCisKK0UyZnNwcm9ncyAxLjA4IChBcHJpbCAxMCwgMTk5NykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRTJmc2NrIDEuMDcgd2FzIHZlcnkgc2xvdyB3aGVuIGNoZWNraW5nIHZlcnkgbGFyZ2UgZmlsZXN5c3RlbXMgd2l0aCBhCitsb3Qgb2YgZmlsZXMgdGhhdCBoYWQgaGFyZCBsaW5rcyAoaS5lLiwgbmV3cyBzcG9vbHMpLiAgVGhpcyB3YXMgZml4ZWQKK2J5IHNlcmlvdXNseSByZXZhbXBpbmcgdGhlIGljb3VudCBhYnN0cmFjdGlvbi4gIEFkZGVkIGEgZm9ybWFsIHRlc3QKK3N1aXRlIGZvciB0aGUgaWNvdW50IGFic3RyYWN0aW9uLgorCitEZWJ1Z2ZzIG5vdyBoYXMgYSAiLWwiIG9wdGlvbiB0byB0aGUgImxzIiBjb21tYW5kLCB3aGljaCBsaXN0cyB0aGUKK2lub2RlIG51bWJlciwgcGVybWlzc2lvbnMsIG93bmVyLCBncm91cCwgc2l6ZSwgYW5kIG5hbWUgb2YgdGhlIGZpbGVzCitpbiB0aGUgZGlyZWN0b3J5LgorCitGaXggYSBidWcgaW4gZTJmc2NrIHdoZXJlIHdoZW4gYSBkaXJlY3RvcnkgaGFkIGl0cyBibG9ja3MgbW92ZWQgdG8KK2Fub3RoZXIgbG9jYXRpb24gZHVyaW5nIHRoZSBwYXNzIDFiIHByb2Nlc3NpbmcsIHRoZSBkaXJlY3RvcnkgYmxvY2sKK2xpc3Qgd2Fzbid0IHVwZGF0ZWQsIHNvIHBhc3MgMiB3b3VsZG4ndCBjaGVjayAoYW5kIGNvcnJlY3QpIHRoZQorY29ycmVjdCBkaXJlY3RvcnkgYmxvY2suCisKK0UyZnNjayB3aWxsIG5vdyB0cmVhdCBpbm9kZXMgd2hpY2ggY29udGFpbiBibG9ja3Mgd2hpY2ggYXJlIGNsYWltZWQgYnkKK3RoZSBmaWxlc3lzdGVtIG1ldGFkYXRhIGJ5IHRyZWF0aW5nIHRoZW0gYXMgbXVsdGlwbHkgY2xhaW1lZCBibG9ja3MuCitUaGlzIHdheSwgdGhlIGRhdGEgaW4gdGhvc2UgYmxvY2tzIGNhbiBiZSBjb3BpZWQgdG8gYSBuZXcgYmxvY2sgZHVyaW5nCit0aGUgcGFzcyAxYi0tMWQgcHJvY2Vzc2luZy4KKworRTJmc2NrIHdpbGwgYXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc3VwZXJibG9jayBudW1iZXIgYW5kCitkaXNwbGF5IGl0IGluIHRoZSBkaWFnbm9zdGljIGFuZCB3YXJuaW5nIG1lc3NhZ2VzIGlmIHBvc3NpYmxlLgorCitBZGQgc3VwcG9ydCBmb3IgYSBuZXcgKGluY29tcGF0aWJsZSkgZmVhdHVyZSwgInNwYXJzZV9zdXBlciIuICBUaGlzCitmZWF0dXJlIHJlZHVjZXMgdGhlIG51bWJlciBvZiBibG9ja3Mgd2hpY2ggY29udGFpbiBjb3BpZXMgb2YgYmFja3VwCitzdXBlcmJsb2NrcyBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMuICAoSXQgaXMgb25seSBhbiBpbmNvbXBhdGlibGUKK2ZlYXR1cmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBleHQyX2ZyZWVfYmxvY2tzLikgIG1rZTJmcyBhbmQgdHVuZTJmcyBub3cKK3N1cHBvcnQgYSBuZXcgLXMgb3B0aW9uOyBlMmZzY2sgd2lsbCByZWNvZ25pemUgZmlsZXN5c3RlbXMgYnVpbHQgd2l0aAordGhpcyBmZWF0dXJlIHR1cm5lZCBvbi4KKworRTJmc2NrIG5vdyBjaGVja3MgdGhlIGxpYnJhcnkgdG8gbWFrZSBzdXJlIGlzIHRoZSBjb3JyZWN0IHZlcnNpb24sCit1c2luZyBuZXcgbGlicmFyeSBmdW5jdGlvbnMuICAoVGhpcyBoZWxwcyB0byBkaWFnbm9zZSBpbmNvcnJlY3RseQoraW5zdGFsbGVkIGUyZnNwcm9ncyBkaXN0cmlidXRpb25zLikKKworRHVtcGUyZnMgbm93IHByaW50cyBtb3JlIGluZm9ybWF0aW9uOyBpdHMgbm93IHByaW50cyB0aGUgdGhlCitmaWxlc3lzdGVtIHJldmlzaW9uIG51bWJlciwgdGhlIGZpbGVzeXN0ZW0gc3BhcnNlX3N1cGVyIGZlYXR1cmUgKGlmCitwcmVzZW50KSwgdGhlIGJsb2NrIHJhbmdlcyBmb3IgZWFjaCBibG9jayBncm91cCwgYW5kIHRoZSBvZmZzZXQgZnJvbQordGhlIGJlZ2lubmluZyBvZiB0aGUgYmxvY2sgZ3JvdXAuCisKK01rZTJmcyBub3cgZGlzdHJpYnV0ZXMgdGhlIGlub2RlIGFuZCBibG9jayBiaXRtYXAgYmxvayBzbyB0aGF0IHRoZQord29uJ3QgYmUgY29uY2VudHJhdGVkIGluIG9uZSBvciB0d28gZGlza3MgaW4gUkFJRC9zdHJpcGluZyBzZXR1cHMuCitBbHNvLCBpZiB0aGUgdXNlciBjaG9vc2VzIGEgMmsgb3IgNGsgYmxvY2sgZ3JvdXAsIG1rZTJmcyB3aWxsIHRyeSB0bworY2hvb3NlIHRoZSBsYXJnZXN0IGJsb2NrcyBwZXIgZ3JvdXAgdGhhdCBiZSBjaG9zZW4uICAoRm9yIDJrIGJsb2NrcywKK3lvdSBjYW4gaGF2ZSB1cCB0byAxNjM4NCBibG9ja3MvZ3JvdXA7IGZvciA0ayBibG9ja3MsIHlvdSBjYW4gaGF2ZSB1cAordG8gMzI3NjggYmxvY2tzL2dyb3VwLikgIFByZXZpb3VzbHkgbWtlMmZzIHdvdWxkIG5vdCBhbGxvdworc3BlY2lmaWNhdGlvbiBvZiBtb3JlIHRoYW4gODE5MiBibG9ja3MgcGVyIGdyb3VwLCBldmVuIGlmIHlvdSB3ZXJlCit1c2luZyBhIDJrIG9yIDRrIGJsb2NrIGdyb3VwLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19jcmVhdGVfaWNvdW50MigpIHdoaWNoIHRha2VzIGEgImhpbnQiCithcmd1bWVudC4gIFRoaXMgaGludCBhcmd1bWVudCBwcmVzZXRzIHRoZSBpY291bnQgYXJyYXkgd2l0aCB0aGUgbGlzdAorb2YgaW5vZGVzIHdoaWNoIGFjdHVhbGx5IG5lZWQgdG8gYmUgaW4gdGhlIGljb3VudCBhcnJheS4gIFRoaXMgcmVhbGx5CitoZWxwcyB0byBzcGVlZCB1cCBlMmZzY2suCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19pY291bnRfdmFsaWRhdGUoKSB3aGljaCBjaGVja3MgdGhlIHJlcAoraW52YXJpYW50IGZvciB0aGUgaWNvdW50IHN0cnVjdHVyZS4gIFRoaXMgaXMgdXNlZCBtb3N0bHkgZm9yIHRlc3RpbmcuCisKK1RoZSBlcnJvciBtZXNhc2FnZSBnaXZlbiB3aGVuIGEgYmFkIGlub2RlIG51bWJlciBpcyBwYXNzZWQgdG8KK3Rlc3RfZ2VuZXJpY19iaXRtYXAgdG8gcmVmbGVjdCBFWFQyRlNfVEVTVF9FUlJPUiAoaW5zdGVhZCBvZgorRVhUMkZTX1VOTUFSS19FUlJPUikuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19zZXRfZGlyX2Jsb2NrIHdoaWNoIHNldHMgdGhlIGJsb2NrIG9mIGEKK2RibGlzdCBlbnRyeSwgZ2l2ZW4gdGhlIGRpcmVjdG9yeSBpbm9kZSBhbmQgYmxvY2tjbnQuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIGV4dDJmc19nZXRfbGlicmFyeV92ZXJzaW9uKCkgd2hpY2ggcmV0dXJucyB0aGUKK2N1cnJlbnQgbGlicmFyeSB2ZXJzaW9uLCBhbmQgZXh0MmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKCkgd2hpY2gKK3JldHVybnMgYSB2ZXJzaW9uIG51bWJlciBiYXNlZCBvbiBhIGUyZnNwcm9ncyB2ZXJzaW9uIHN0cmluZy4KKworVGhlIGljb3VudCBmdW5jdGlvbnMgd2lsbCByZXR1cm4gRUlOVkFMIGlmIHRoZSBwYXNzZWQgaW4gaW5vZGUgbnVtYmVyCitpcyBvdXQgb2YgYm91bmRzLgorCitFMmZzcHJvZ3MgMS4wNyAoTWFyY2ggOSwgMTk5NykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFMmZzY2sgaXMgbm93IHVzZXMgbXVjaCBsZXNzIG1lbW9yeSB3aGVuIGNoZWNraW5nIHJlYWxseSBsYXJnZQorZmlsZXN5c3RlbXMgKG9yIHJhdGhlciwgZmlsZXN5c3RlbXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBpbm9kZXMpLgorUHJldmlvdXNseSBhIGZpbGVzeXN0ZW0gd2l0aCAxIG1pbGxpb24gaW5vZGVzIHJlcXVpcmVkIDQgbWVnYWJ5dGVzIG9mCittZW1vcnkgdG8gc3RvcmUgaW5vZGUgY291bnQgc3RhdGlzdGljczsgdGhhdCBzdG9yYWdlIHJlcXVpcmVtZW50IGhhcworbm93IGJlZW4gcmVkdWNlZCB0byByb3VnaGx5IGhhbGYgYSBtZWdhYnl0ZS4KKworRTJmc2NrIGNhbiBub3cgcHJvcGVybHkgZGVhbCB3aXRoIGJhZCBibG9ja3MgYXBwZWFyaW5nIGluc2lkZSB0aGUKK2lub2RlIHRhYmxlLiAgSW5zdGVhZCBvZiB0cnlpbmcgdG8gcmVsb2NhdGUgdGhlIGlub2RlIHRhYmxlICh3aGljaAorb2Z0ZW4gZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2Fzbid0IGVub3VnaCBzcGFjZSksIHRoZSBpbm9kZXMgaW4gdGhlIGJhZAorYmxvY2sgYXJlIG1hcmtlZCBhcyBpbiB1c2UuCisKK0UyZnNjayB3aWxsIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIHVzZSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIGlmIHRoZQorcHJpbWFyeSBzdXBlcmJsb2NrcyBoYXZlIGEgYmFkIG1hZ2ljIG51bWJlciBvciBoYXZlIG1pc3NpbmcgbWV0YS1kYXRhCitibG9ja3MgKG9yIG1ldGEtZGF0YSBibG9ja3Mgd2hpY2ggYXJlIG91dCBvZiByYW5nZSkuCisKK0UyZnNjaydzIHBhc3MgMyBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50OyBtb3N0IG5vdGljZWFibGUgb24KK2ZpbGVzeXN0ZW1zIHdpdGggYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBkaXJlY3Rvcmllcy4KKworQ29tcGxldGVseSByZXZhbXBlZCBlMmZzY2sncyBzeXN0ZW0gb2YgcHJpbnRpbmcgcHJvYmxlbSByZXBvcnRzLiAgSXQKK2lzIG5vdyB0YWJsZSBkcml2ZW4sIHRvIG1ha2UgdGhlbSBtb3JlIGVhc2lseSBjdXN0b21pemVhYmxlIGFuZAorZXh0ZW5kYWJsZS4gIEVycm9yIG1lc3NhZ2VzIHdoaWNoIGNhbiBiZSBwcmludGVkIG91dCBkdXJpbmcgcHJlZW4gbW9kZQorYXJlIG5vdyBvbmUgbGluZSBsb25nLgorCitGaXhlZCBlMmZzY2sncyBmaWxlc3lzdGVtIHN3YXBwaW5nIGNvZGUgc28gdGhhdCBpdCB3b24ndCB0cnkgdG8gc3dhcAorZmFzdCBzeW1ib2xpYyBsaW5rcyBvciBkZWxldGVkIGZpbGVzLgorCitGaXhlZCBlMmZzY2sgY29yZSBkdW1waW5nIHdoZW4gZml4aW5nIGEgZmlsZXN5c3RlbSB3aGljaCBoYXMgbm8KK2RpcmVjdG9yaWVzIChub3QgZXZlbiBhIHJvb3QgZGlyZWN0b3J5KS4KKworQWRkZWQgYSBjaGVjayB0byBlMmZzY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxlbmd0aCBvZiBldmVyeQorZGlyZWN0b3J5IGVudHJ5IGlzIGEgbXVsdGlwbGUgb2YgNCAoc2luY2UgdGhlIGtlcm5lbCBjb21wbGFpbnMgaWYgaXQKK2lzbid0KS4KKworQWRkZWQgYSBjaGVjayB0byBlMmZzY2sgdG8gbWFrZSBzdXJlIHRoYXQgYSBkaXJlY3RvcnkgZW50cnkgaXNuJ3QgYQorbGluayB0byB0aGUgcm9vdCBkaXJlY3RvcnksIHNpbmNlIHRoYXQgaXNuJ3QgYWxsb3dlZC4KKworQWRkZWQgYSBjaGVjayB0byBlMmZzayB0byBub3cgbWFrZSBzdXJlIHRoZSAnLicgYW5kICcuLicgZGlyZWN0b3J5CitlbnRyaWVzIGFyZSBudWxsIHRlcm1pbmF0ZWQsIHNpbmNlIHRoZSAyLjAga2VybmVsIHJlcXVpcmVzIGl0LgorCitBZGRlZCBjaGVjayB0byB3cml0ZV9iaXRtYXBzKCkgdG8gbWFrZSBzdXJlIHRoZSBzdXBlcmJsb2NrIGRvZXNuJ3QgZ2V0Cit0cmFzaGVkIGlmIHRoZSBpbm9kZSBvciBibG9jayBiaXRtYXAgaXMgbWFya2VkIGFzIGJlaW5nIGJsb2NrIHplcm8uCisKK0FkZGVkIGNoZWNraW5nIG9mIHRoZSBuZXcgZmVhdHVyZSBzZXQgZmllbGRzIGluIHRoZSBzdXBlcmJsb2NrLCB0bworYXZvaWQgZGVhbGluZyB3aXRoIG5ldyBmaWxlc3lzdGVtIGZlYXR1cmVzIHRoYXQgdGhpcyBwYWNrYWdlIHdhc24ndAorc2V0IHVwIHRvIGhhbmRsZS4KKworRml4ZWQgYSBmZW5jZXBvc3QgZXJyb3IgaW4gZXh0MmZzX25ld19ibG9jaygpIHdoaWNoIHdvdWxkIG9jY2FzaW9uYWxseQordHJ5IHRvIGFsbG9jYXRlIGEgYmxvY2sgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlc3lzdGVtLgorCitXaGVuIHRoZSBVVUlEIGxpYnJhcnkgcGlja3MgYSByYW5kb20gSUVFRSA4MDIgYWRkcmVzcyAoYmVjYXVzZSBpdAorY2FuJ3QgZmluZCBvbmUgZnJvbSBhIG5ldHdvcmsgY2FyZCksIGl0IHNldHMgdGhlIG11bHRpY2FzdCBiaXQsIHRvCithdm9pZCBjb25mbGljdGluZyB3aXRoIGEgbGVnaXRpbWF0ZSBJRUVFIDgwMiBhZGRyZXNzLgorCitNa2UyZnMgbm93IHNldHMgdGhlIHJvb3QgZGlyZWN0b3J5J3Mgb3duZXIgdG8gYmUgdGhlIHJlYWwgdWlkIG9mIHRoZQordXNlciBydW5uaW5nIG1rZTJmcy4gIElmIHRoZSByZWFsIHVpZCBpcyBub24temVybywgaXQgYWxzbyBzZXRzCit0aGUgZ3JvdXAgb3duZXJzaGlwIG9mIHRoZSByb290IGRpcmVjdG9yeSB0byBiZSB0aGUgcmVhbCBncm91cC1pZCBvZgordGhlIHVzZXIgcnVubmluZyBta2UyZnMuCisKK01rZTJmcyBub3cgaGFzIG1vcmUgaW50ZWxsaWdlbnQgZXJyb3IgY2hlY2tpbmcgd2hlbiBpdCBpcyBnaXZlbiBhCitub24tZXhpc3RlbnQgZGV2aWNlLgorCitXaGVuIGJhZGJsb2NrcyBpcyBnaXZlbiB0aGUgLXZ2IG9wdGlvbiwgaXQgbm93IHVwZGF0ZXMgdGhlIGJsb2NrIHRoYXQKK2l0IGlzIGN1cnJlbnRseSB0ZXN0aW5nIG9uIGV2ZXJ5IGJsb2NrLgorCitGaXhlZCBhIGJ1ZyBpbiBmc2NrIHdoZXJlIGl0IHdvdWxkbid0IG1vZGlmeSB0aGUgUEFUSCBlbnZpcm5vbWVudAorY3VycmVudGx5IGNvcnJlY3RseSBpZiBQQVRIIHdhc24ndCBhbHJlYWR5IHNldC4KKworU2hhcmVkIGxpYnJhcmllcyBub3cgYnVpbHQgd2l0aCBkZXBlbmRlbmNpZXMuICBUaGlzIGFsbG93cyB0aGUgc2hhcmVkCitsaWJyYXJ5IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCBkbG9wZW4oKTsgaXQgYWxzbyBtYWtlcyB0aGUgdHJhbnNpdGlvbgordG8gbGliYyA2IGVhc2llciwgc2luY2UgbGQuc28gY2FuIHRlbGwgd2hpY2ggbGliYyBhIHBhcnRpY3VsYXIgc2hhcmVkCitsaWJyYXJ5IGV4cGVjdHMgdG8gdXNlLgorCitQcm9ncmFtbWVyJ3Mgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZGVkIG5ldyBhYnN0cmFjdGlvbiAoZGVmaW5lZCBpbiBkYmxpc3QuYykgZm9yIG1haW50YWluaW5nIGEgbGlzdCBvZgorYmxvY2tzIHdoaWNoIGJlbG9uZ3MgdG8gZGlyZWN0b3JpZXMuICBUaGlzIGlzIHVzZWQgaW4gZTJmc2NrIGFuZCBvdGhlcgorcHJvZ3JhbXMgd2hpY2ggbmVlZCB0byBpdGVyYXRlIG92ZXIgYWxsIGRpcmVjdG9yaWVzLgorCitBZGRlZCBuZXcgZnVuY3Rpb25zIHdoaWNoIHRlc3QgdG8gc2VlIGlmIGEgY29udGlndW91cyByYW5nZSBvZiBibG9ja3MKKyhvciBpbm9kZXMpIGFyZSBhdmFpbGFibGUuICAoZXh0MmZzXypfYml0bWFwX3JhbmdlKS4KKworQWRkZWQgbmV3IGZ1bmN0aW9uIChleHQyX2lub2RlX2hhc192YWxpZF9ibG9ja3MpIHdoaWNoIHJldHVybnMgdHJ1ZSBpZgorYW4gaW5vZGUgaGFzIHZhbGlkIGJsb2Nrcy4gIChtb3ZlZCBmcm9tIGUyZnNjayBjb2RlKS4KKworQWRkZWQgbmV3IGZ1bmN0aW9uIChleHQyZnNfYWxsb2NhdGVfdGFibGVzKSB3aGljaCBhbGxvY2F0ZXMgdGhlCittZXRhLWRhdGEgYmxvY2tzIGFzIHBhcnQgb2YgaW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbS4gIChtb3ZlZCBmcm9tCitta2UyZnMgY29kZSkuCisKK0FkZGVkIGEgbmV3IEkvTyBtYW5hZ2VyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgSXQgd2lsbCBlaXRoZXIgYWxsb3cgYQorcHJvZ3JhbSB0byBpbnRlcmNlcHQgSS9PIHJlcXVlc3RzLCBvciBwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8KK3RyYWNlIHRoZSBhY3Rpdml0eSBvZiBhIHByb2dyYW0gdXNpbmcgdGhlIEkvTyBtYW5hZ2VyLgorCitUaGUgYmFkYmxvY2tzX2xpc3QgZnVuY3Rpb25zIG5vdyBzdG9yZSB0aGUgYmFkIGJsb2NrcyBpbiBhIHNvcnRlZAorb3JkZXIsIGFuZCB1c2UgYSBiaW5hcnkgc2VhcmNoIHRvIHNwZWVkIHVwIGJhZGJsb2Nrc19saXN0X3Rlc3QuCisKK1RoZSBpbm9kZSBzY2FuIGZ1bmN0aW9uIGV4dDJmc19nZXRfbmV4dF9pbm9kZSgpIG1heSBub3cgcmV0dXJuIGEgc29mdAorZXJyb3IgcmV0dXJuczogTUlTU0lOR19JTk9ERV9UQUJMRSBhbmQgQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFIGluCit0aG9zZSBjYXNlcyB3aGVyZSBwYXJ0IG9mIGFuIGlub2RlIHRhYmxlIGlzIG1pc3Npbmcgb3IgdGhlcmUgaXMgYSBiYWQKK2Jsb2NrIGluIHRoZSBpbm9kZSB0YWJsZS4gIAorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiAoZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKSB3aGljaCBhZGRzIG5ldyBhcmd1bWVudHMgdG8KK3RoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZXR1cm4gYSBwb2ludGVyIChibG9jayBhbmQgb2Zmc2V0KSB0byB0aGUKK3JlZmVyZW5jZSBvZiB0aGUgYmxvY2suCisKK0FkZGVkIG5ldyBmdW5jdGlvbiAoZXh0MmZzX2lub2RlX3NjYW5fZ290b19ibG9ja2dyb3VwKSB3aGljaCBhbGxvd3MgYW4KK2FwcGxpY2F0aW9uIHRvIGp1bXAgdG8gYSBwYXJ0aWN1bGFyIGJsb2NrIGdyb3VwIHdoaWxlIGRvaW5nIGFuIGlub2RlCitzY2FuLgorCitUaGUgYmFkYmxvY2tzIGxpc3QgZnVuY3Rpb25zIHdlcmUgcmVuYW1lZCBmcm9tIGJhZGJsb2Nrc18qIHRvCitleHQyZnNfYmFkYmxvY2tzXyouICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZQorZm9yIG5vdywgYnV0IHByb2dyYW1zIHNob3VsZCBiZSBtb2RpZmllZCB0byB1c2UgdGhlIG5ldyBpbnRlcmZhY2UuCisKK1NvbWUgb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIHdlcmUgcmVvcmdhbml6ZWQgaW50byBzZXBhcmF0ZSBmaWxlcyB0bworcmVkdWNlIHRoZSBzaXplIG9mIHNvbWUgcHJvZ3JhbXMgd2hpY2ggc3RhdGljYWxseSBsaW5rIGFnYWluc3QgdGhlCitleHQyIGxpYnJhcnkuCisKK1B1dCBpbiBzb21lIG1pc2NlbGxhbmVvdXMgZml4ZXMgZm9yIHRoZSBBbHBoYSBwbGF0Zm9ybS4KKworCitFMmZzcHJvZ3MgMS4wNiAoT2N0b2JlciA3LCAxOTk2KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZWQgc2VyaW91cyBidWcgaW4gZTJmc2NrOiBpZiB0aGUgYmxvY2sgZGVzY3JpcHRvcnMgYXJlIGJhZCwgZG9uJ3QKK3NtYXNoIHRoZSBiYWNrdXAgY29waWVzIGluIGV4dDJmc19jbG9zZSgpLiAgKFRoZSBwcm9ibGVtIHdhcyB0aGF0IHdoZW4KK2UyZnNjayAtcCBkaXNjb3ZlcmVkIHRoZSBwcm9ibGVtLCB3aGlsZSBpdCB3YXMgY2xvc2luZyB0aGUgZmlsZXN5c3RlbQorYW5kIGV4aXRpbmcsIGl0IHdhcyBhbHNvIGJsb3dpbmcgYXdheSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIG9uIHRoZQorZGlzaywgd2hpY2ggd2FzIGxlc3MgdGhhbiBmcmllbmRseS4pICBXZSBub3cgbWFrZSBpdCB0aGUgY2FzZSB0aGF0IHdlCitvbmx5IHdyaXRlIG91dCB0aGUgYmFja3VwIHN1cGVyYmxvY2sgYW5kIHRoZSBiYWNrIGJsb2NrIGRlc2NyaXB0b3JzIGlmCit0aGUgZmlsZXN5c3RlbSBpcyBjb21wbGV0ZWx5IGZyZWUgZnJvbSBwcm9ibGVtcy4KKworRml4ZWQgYSBidWcgaW4gYmxvY2tfaW50ZXJhdGUgaW4gdGhlIGxpYi9leHQyZnMgbGlicmFyeSB3aGljaCBjYXVzZWQKK2UyZnNjayB0byBmYWlsIG9uIEdOVSBIdXJkLWNyZWF0ZWQgZmlsZXN5c3RlbXMuCisKK0FkZCBzdXBwb3J0IGZvciBMaW51eC9GVCdzIGJvb3Rsb2FkZXIsIHdoaWNoIGFjdHVhbGx5IHVzZXMKK0VYVDJfQk9PVF9MT0FERVIsIGFuZCBzZXRzIGl0cyBtb2RlIGJpdHMgd2hpY2ggY2F1c2VkIGUyZnNjayB0byB3YW50Cit0byBjbGVhciB0aGUgaW5vZGUuCisKK0FkZCBzdXBwb3J0IGZvciB0aGUgIkEiIChubyBhdGltZSB1cGRhdGUpIGF0dHJpYnV0ZS4gIChOb3RlOiB0aGlzCithdHRyaWJ1dGUgaXMgbm90IHlldCBpbiBwcm9kdWN0aW9uIGtlcm5lbHMuKQorCitUaGUgdGVzdCBzdWl0ZSBpcyBub3QgYXV0b21hdGljYWxseSBydW4gd2hlbiBkb2luZyBhICJtYWtlIGFsbCIgZnJvbQordGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkuICBVc2VycyBzaG91bGQgbWFudWFsbHkgcnVuICJtYWtlIGNoZWNrIiBpZgordGhleSB3aXNoIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZS4KKworVXBvbiBhIHByZWVuaGFsdCgpLCBtYWtlIHRoZSBwcmludGVkIG1lc3NhZ2UgbW9yZSBleHBsaWNpdCB0aGF0CitydW5uaW5nIGUyZnNjayAiTUFOQVVMTFkiIG1lYW5zIHdpdGhvdXQgdGhlIC1wIG9yIC1hIG9wdGlvbnMuCisKK0luIGUyZnNjaywgaWYgYSBkaXNjb25uZWN0ZWQgaW5vZGUgaXMgemVyby1sZW5ndGgsIG9mZmVyIHRvIGNsZWFyIGl0CitpbnN0ZWFkIG9mIG9mZmVyaW5nIHRvIGNvbm5lY3QgaXQgdG8gbG9zdCtmb3VuZC4KKworSW4gZTJmc2NrLCBpZiBhIGZpbGVzeXN0ZW0gd2FzIGp1c3QgdW5tb3VudGVkIHVuY2xlYW5seSwgYW5kIG5lZWRzCitlMmZzY2sgdG8gYmUgcnVuIG92ZXIgaXQsIGNoYW5nZSBlMmZzY2sgdG8gZXhwbGljaXRseSBkaXNwbGF5IHRoaXMKK2ZhY3QuCisKK0ZvciBkdW1wZTJmcyBhbmQgZTJmc2NrLCBjYXVzZSB0aGUgLVYgb3B0aW9uIHRvIHByaW50IG91dCB3aGljaAordmVyc2lvbiBvZiB0aGUgZXh0MmZzIGxpYnJhcnkgaXMgYWN0dWFsbHkgZ2V0dGluZyB1c2VkLiAgKFRoaXMgd2lsbAoraGVscCBkZXRlY3QgbWlzbWF0Y2hlcyBvZiB1c2luZyBhIDEuMDYgdXRpbGl0eSB3aXRoIGEgMS4wNSBsaWJyYXJ5LAorZXRjLikKKworUHJvZ3JhbW1lcnMnIG5vdGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFWFQyX1NXQVBfQllURVMgd2FzIGNoYW5nZWQgdG8gRVhUMl9GTEFHX1NXQVBfQllURVMsIHdoaWNoIGJldHRlciBmaXRzCit0aGUgbmFtaW5nIGNvbnZlbnRpb24uCisKK0luIGV4dDJmc19pbml0aWFsaXplKCksIG1ha2Ugc3VyZSB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBpbm9kZSBiaXRtYXAKK2lzIGNvcnJlY3RseSBpbml0aWFsaXplLgorCitGaXhlZCBtaW5vciB0eXBlIHR5cG8gaW4gZXh0MmZzX2FsbG9jYXRlX2dlbmVyaWNfYml0bWFwKCk7CisKK0UyZnNwcm9ncyAxLjA1IChTZXB0ZW1iZXIgNywgMTk5NikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWRkIHN1cHBvcnQgZm9yIG5ldyBmaWVsZHMgaW4gdGhlIGV4dDIgc3VwZXJibG9jayAtLS0gdm9sdW1lIG5hbWUsCit2b2x1bWUgVVVJRCwgYW5kIGxhc3QgbW91bnRlZCBmaWVsZC4gIER1bXBlMmZzIGRpc3BsYXlzIHRoZXNlIGZpZWxkcywKK3R1bmUyZnMgYW5kIG1rZTJmcyBhbGxvd3MgeW91IHRvIHNldCB0aGVtLiAgRTJmc2NrIHdpbGwgYXV0b21hdGljYWxseQorZ2VuZXJhdGUgYSBVVUlEIGZvciB0aG9zZSB2b2x1bWVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVtLiAgCisKK1B1dCBpbiBzdXBwb3J0IGZvciBlMmZzY2sgdG8gcmVjb2duaXplIEhVUkQgc3BlY2lmaWMgZXh0MiBmZWF0dXJlcyAtLS0KK21vc3Qgbm90YWJseSwgdGhlIHRyYW5zbGF0b3IgYmxvY2suICBUaGUgZTJmc3Byb2dzIHRvb2xzIHdpbGwgbm93IHVzZQordGhlIGNyZWF0b3Jfb3MgZmllbGQgaW4gdGhlIHN1cGVyYmxvY2sgdG8gY29ycmVjdGx5IGhhbmRsZSBkaWZmZXJlbnQKK09TLXNwZWNpZmljIHZhcmlhbnRzIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCisKK0UyZnNjayBub3cgZml4ZXMgaW5vZGVzIHdoaWNoIGhhdmUgYSB0aGUgZGVsZXRpb24gdGltZSBzZXQsIGJ1dCB3aGljaAoraGF2ZSBhIG5vbi16ZXJvIGlfbGlua19jb3VudCBmaWVsZCBieSBvZmZlcmluZyB0byBjbGVhciB0aGUgZGVsZXRpb24KK3RpbWUuICBQcmV2aW91c2x5IGUyZnNjayBhc3N1bWVkIHRoYXQgdGhlIGlub2RlIHdhcyBkZWxldGVkIChwZXIgMC4zYworZXh0MiBrZXJuZWwgYmVoYXZpb3IpIGFuZCBvZmZlcmVkIHRvIHVubGluayB0aGUgZmlsZS4KKworSWYgZTJmc2NrIHNldHMgdGhlIGNsZWFuIGJpdCwgYnV0IG5vdGhpbmcgZWxzZSwgc2V0IHRoZSBleGl0IGNvZGUKK0ZTQ0tfTk9OREVTVFJVQ1QuICBBZnRlciBhbGwsIGUyZnNjayBkaWQgZml4IGEgZmlsZXN5c3RlbSBlcnJvciAtLS0gaXQKK3NldCB0aGUgZmlsZXN5c3RlbSB2YWxpZCBiaXQgd2hlbiBpdCB3YXMgcHJldmlvdXNseSBjbGVhcmVkLiAgOi0pIFRoaXMKK3dhcyBuZWVkZWQgdG8gbWFrZSB0aGUgSFVSRCBmc2NrIGRyaXZlciBoYXBweS4KKworSWYgdGhlICB1c2VyICByZWZ1c2VzIHRvIGF0dGFjaCBhbiAgdW5hdHRhY2hlZCAgaW5vZGUsIGUyZnNjayAgd2lsbCBubworbG9uZ2VyIHNldCB0aGUgaW5vZGUncyBsaW5rIGNvdW50LiAgT3RoZXJ3aXNlLCB0aGUgIGlub2RlIHdvdWxkIGVuZCB1cAorZ2V0dGluZyBtYXJrZWQgYXMgdW51c2VkLCB3aGljaCBtaWdodCBjYXVzZSBsb3NzIG9mIGRhdGEgbGF0ZXIuCisKK01ha2UgdGhlIG1lc3NhZ2UgaXNzdWVkIGJ5IGUyZnNjayB3aGVuIHRoZSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQgbGVzcworY29uZnVzaW5nIGZvciB1c2Vycy4gIEl0IG5vdyBtZW50aW9ucyB0aGF0IGFub3RoZXIgcmVhc29uIGZvciB0aGUKKyJjb3JydXB0IHN1cGVyYmxvY2siIG1lc3NhZ2UgbWlnaHQgYmUgdGhhdCB0aGUgcGFydGl0aW9uIG1pZ2h0IG5vdCBiZQorYW4gZXh0MiBmaWxlc3lzdGVtIGF0IGFsbCAoaXQgbWlnaHQgc3dhcCwgbXNkb3MgZmlsZXN5c3RlbSwgdWZzLCBldGMuKQorCitNYWtlIHRoZSBsaWJleHQyIGxpYnJhcnkgbW9yZSByb2J1ZXN0IHNvIHRoYXQgZTJmc2NrIHdvbid0IGNvcmVkdW1wIG9uCithbiBpbGxlZ2FsIHN1cGVyYmxvY2sgd2hlcmUgdGhlIGJsb2Nrc2l6ZSBpcyB6ZXJvLiAgKGZfY3Jhc2hkaXNrIGlzCit0aGUgdGVzdCBjYXNlKS4KKworQnkgZGVmYXVsdCwgY3JlYXRlIGZpbGVzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IGNoZWNraW50ZXJ2YWwgaXMgNgorbW9udGhzICgxODAgZGF5cykuICBMaW51eCBzZXJ2ZXJzIGNhbiBiZSByb2J1c3QgZW5vdWdoIHRoYXQgMjAgcmVib290cworY2FuIGJlIGEgbG9uZywgbG9uZyB0aW1lLgorCitBZGRlZCBjb25maWd1cmUgZmxhZyAtLWVuYWJsZS1vbGQtYml0b3BzLCB3aGljaCBmb3JjZXMgdGhlIGJpdG9wcyB0bwordXNlIHRoZSBvbGQgKG5hdGl2ZSkgYml0bWFzayBvcGVyYXRpb25zLiAgQnkgZGVmYXVsdCBvbiB0aGUgc3BhcmMKK3BsYXRmb3JtLCB0aGUgc3RhbmRhcmQgZXh0MiBiaXQgb3JkZXJpbmcgaXMgbm93IHVzZWQuCisKK0FkZGVkIGEgbmV3IGZlYXR1cmUgdG8gZTJmc2NrIHRvIGJ5dGUtc3dhcCBmaWxlc3lzdGVtczsgdGhpcyBjYW4gYmUKK3VzZWQgdG8gY29udmVydCBvbGQgbTY4ayBmaWxlc3lzdGVtcyB0byB1c2UgdGhlIHN0YW5kYXJkIGJ5dGUtb3JkZXIKK3N0b3JhZ2UgZm9yIHRoZSBzdXBlcmJsb2NrLCBpbm9kZXMsIGFuZCBkaXJlY3RvcnkgYmxvY2tzLiAgVGhpcworZnVuY3Rpb24gaXMgaW52b2tlZCBieSB1c2luZyB0aGUgJy1zJyBvcHRpb24gdG8gZTJmc2NrLgorCitEZWJ1Z2ZzJ3MgImR1bXAiIGNvbW1hbmQgaGFzIGJlZW4gZW5oYW5jZWQgc28gdGhhdCBpdCB3cml0ZXMgb3V0IHRoZQorZXhhY3Qgc2l6ZSBvZiB0aGUgZmlsZSBzbyB0aGF0IHRoZSBudWxscyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFyZQorZWxpbWluYXRlZC4gIFRoZSBjb21tYW5kIGFsc28gYWNjZXB0IGEgbmV3ICItcCIgb3B0aW9uIHdoaWNoIHdpbGwKK2F0dGVtcHQgcHJlc2VydmUgdG8gcHJlc2VydmUgdGhlIG93bmVybnNoaXAsIHBlcm1pc3Npb25zLCBhbmQKK2ZpbGUgbW9kaWZpY2F0aW9uL2FjY2VzcyB0aW1lcy4KKworRGVidWdmcyBoYXMgdHdvIG5ldyBvcHRpb25zLCAtZiBhbmQgLVIuICBUaGUgLVIgb3B0aW9uIGFsbG93cyB0aGUgdXNlcgordG8gZXhlY3V0ZSBhIHNpbmdsZSBkZWJ1Z2ZzIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIC1mCitvcHRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgYSAiY29tbWFuZCBmaWxlIiBjb250YWluaW5nIGRlYnVnZnMKK2NvbW1hbmRzIHdoaWNoIHdpbGwgZ2V0IGV4ZWN1dGVkLgorCitEdW1wZTJmcyBub3cgcHJldHR5IHByaW50cyB0aGUgY2hlY2sgaW50ZXJ2YWwsIGluc3RlYWQgb2YganVzdAorcHJpbnRpbmcgdGhlIGNoZWNrIGludGVydmFsIGFzIGEgbnVtYmVyIG9mIHNlY29uZHMuCisKK0ZpeCBidWdzIGluIGRlYnVnZnM6IHRoZSBwYXJhbXMgY29tbWFuZCB3aGVuIG5vIGZpbGVzeXN0ZW0gaXMgb3BlbmVkCitubyBsb25nZXIgY2F1c2VzIGEgY29yZSBkdW1wLiAgSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVubGluayBhIGZpbGUKK3doZW4gYSBwYXRoYW1lIGNvbnRhaW5pbmcgYSAnLycgaXMgc3BlY2lmaWVkLgorCitUdW5lMmZzIGhhcyBhIG5ldyAtQyBvcHRpb24gd2hpY2ggc2V0cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQorZmlsZXN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLgorCitGaXggdGhlIGNoYXR0ciAnLXYnIG9wdGlvbiBzbyB0aGF0IGl0IGFjdHVhbGx5IHdvcmtzLiAgQ2hhdHRyIHdhcworYmVpbmcgYnVnZ3kgYWJvdXQgdGhlIC12IG9wdGlvbiBwYXJzaW5nLgorCitQcm9ncmFtbWVycycgbm90ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXJlY3RvcnkgbGliL3V1aWQgY29udGFpbnMgYSBzZXQgb2YgbGlicmFyeSByb3V0aW5lcyB0byBnZW5lcmF0ZQorRENFIGNvbXBhdGlibGUgVVVJRHMuICAKKworRXh0ZW5kZWQgZXh0MmZzX25hbWVpKCkgdG8gaGFuZGxlIHN5bWJvbGljIGxpbmtzLiAgQWRkZWQgbmV3IGZ1bmN0aW9uCitleHQyZnNfbmFtaV9mb2xsb3coKSB3aGljaCB3aWxsIGZvbGxvdyBsYXN0IHN5bWJvbGljIGxpbmsgaW4gdGhlIGNhc2UKK3doZXJlIHRoZSBwYXRobmFtZSBwb2ludHMgdG8gYSBzeW0gbGluay4KKworVGhlIGV4dDJmc19ibG9ja19pdGVyYXRlIGZ1bmN0aW9uIHdpbGwgbm93IHJldHVybiB0aGUgSFVSRCB0cmFuc2xhdG9yCitibG9jaywgaWYgcHJlc2VudC4gIFRoZSBuZXcgZmxhZyBCTE9DS19GTEFHX0RBVEFfT05MWSB3aWxsIGNhdXNlIHRoZQoraXRlcmF0b3IgdG8gcmV0dXJuIGRhdGEgYmxvY2tzIG9ubHkuICBUaGUgZXh0MmZzLmggZmlsZSBub3cgZGVmaW5lcworY29uc3RhbnRzIEJMT0NLX0NPVU5UX0lORCwgQkxPQ0tfQ09VTlRfRElORCwgQkxPQ0tfQ09VTlRfVElORCwgYW5kCitCTE9DS19DT1VOVF9UUkFOU0xBVE9SLCB3aGljaCBhcmUgdGhlIG1hZ2ljIHZhbHVlcyBwYXNzZWQgaW4gdGhlIGJsb2NrCitjb3VudCBmaWVsZCBvZiB0aGUgaXRlcmF0b3IgY2FsbGJhY2sgZnVuY3Rpb24uCisKK1RoZSB0ZXN0IHNjcmlwdCBkcml2ZXIgbm93IHRha2VzIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCwgd2hpY2ggaXMKK3RoZSB0ZXN0IGNhc2UgdG8gYmUgcnVuLiAgVGhpcyBhbGxvd3MgeW91IHRvIHJ1biBhIHRlc3QgY2FzZSB3aXRob3V0CituZWVkaW5nIHRvIHJ1biB0aGUgZW50aXJlIHRlc3Qgc3VpdGUuCisKK09uIExpbnV4IEVMRiBzeXN0ZW1zLCBpbnN0YWxsIHRoZSAuc28gZmlsZXMgaW4gdGhlIGNvcnJlY3QgcGxhY2VzCisoL3Vzci9saWIpLiAgVGhlIC5zbyBmaWxlcyBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCisuYSBmaWxlcy4KKworRml4ZWQgbWlzY2VsbGFuZW91cyBIVVJEIGNvbXBpbGF0aW9uIGlzc3VlcyB3aXRoIGhlYWRlciBmaWxlIGJlaW5nCitpbmNsdWRlZCBpbiB0aGUgcmlnaHQgb3JkZXIuCisKK0ZpeGVkIGRlYnVnZnMgc28gdGhhdCBpdCByZXNldHMgb3B0aW5kIHRvIHplcm8sIG5vdCBvbmUsIHNpbmNlIHNldHRpbmcKK29wdGluZCB0byB6ZXJvIGlzIG1vcmUgY29ycmVjdC4KKworCitFMmZzcHJvZ3MgMS4wNCAoTWF5IDE2LCAxOTk2KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRmlyc3QgIm9mZmljaWFsIiAoMS4wMyB3YXMgYSBsaW1pdGVkIHJlbGVhc2Ugb25seSkgdG8gc3VwcG9ydCBidWlsZGluZworZTJmc3Byb2dzIHVuZGVyIExpbnV4IDIuMCBrZXJuZWxzIChhcyB3ZWxsIGFzIGxhdGUgbW9kZWwgMS4zIGFuZCAxLjk5CitrZXJuZWxzKS4KKworVGhpcyBwYWNrYWdlIGluY2x1ZGVzIGEgUlBNIHNwZWNzIGZpbGUsIHRoYXQgaXQgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZQorUmVkSGF0IFBhY2thZ2UgTWFuYWdlci4KKworRTJmc2NrIG5vdyBwcmludHMgYSBoaW50IHRoYXQgaWYgdGhlcmUgYXJlIGxvdHMgb2YgaW5jb3JyZWN0bHkgbG9jYXRlZAoraW5vZGUgYml0bWFwcywgYmxvY2sgYml0bWFwcywgYW5kIGlub2RlIHRhYmxlIGJsb2NrcywgdGhlIHVzZXIgbWlnaHQKK3dhbnQgdG8gdHJ5IHVzaW5nIGUyZnNjayAtYiA4MTkzIGZpcnN0LCB0byBzZWUgaWYgdGhhdCBmYXJlcyBhbnkKK2JldHRlci4KKworRm9yIGV4dDIgZmlsZXN5c3RlbSB3cml0dGVuIHdpdGggdGhlIGh1cmQsIGRlYnVnZnMgd2lsbCBub3cgcHJpbnQgb3V0Cit0aGUgdHJhbnNsYXRvciBmaWVsZCB3aGVuIHByaW50aW5nIGFuIGlub2RlIHN0cnVjdHVyZS4KKworTG90cyBvZiBtaXNjZWxsYW5lb3VzIGxpbmtpbmcvaW5zdGFsbGF0aW9uIGNsZWFudXBzOgorCisgIExpYnJhcmllcyBhcmUgbm93IGxpbmtlZCB1c2luZyBhIHJlbGF0aXZlIHBhdGhuYW1lLCBpbnN0ZWFkIG9mCisgIHJlbHlpbmcgb24gLUwgd29ya2luZyBjb3JyZWN0LiAgSXQgZG9lc24ndCwgaW4gbWFueSBjYXNlcywgaW5jbHVkaW5nCisgIGN1cnJlbnQgdmVyc2lvbnMgb2YgR05VIGxkLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIGJ1aWxkIHRyZWUgaXMKKyAgbGlua2luZyB3aXRoIHRoZSByaWdodCBsaWJyYXJpZXMsIGluc3RlYWQgb2YgdGhlIG9uZXMgaW5zdGFsbGVkIGluCisgIC91c3IvbGliLgorCisgIEhlYWRlciBmaWxlcywgbWFuIHBhZ2VzLCBhbmQgdGhlIGV0L3NzIHNoZWxsIHNjcmlwdHMgYXJlIG5vdworICBnZW5lcmF0ZWQgdXNpbmcgYSBjdXN0b20gc3Vic3RpdHV0aW9uIHNjcmlwdCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uCisgIHRoZSBjb25maWd1cmUgc2NyaXB0LiAgVGhpcyBwcmV2ZW50cyBuZWVkbGVzcyByZWNvbXBpbGF0aW9uIG9mCisgIGZpbGVzOyBpbiBhZGRpdGlvbiwgdGhlIGN1c3RvbSBzdWJzdGl0dXRpb24gc2NyaXB0IGlzIG11Y2ggZmFzdGVyLgorCisgIGUyZnNjayBtYXkgbm93IGJlIGxpbmtlZCBkeW5hbWljYWxseSwgYnkgdXNpbmcgdGhlCisgIC0tZW5hYmxlLWR5bmFtaWMtZTJmc2NrIGZsYWcgdG8gY29uZmlndXJlLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQsCisgIHNpbmNlIGl0IGluY3JlYXNlcyBlMmZzY2sncyBkZXBlbmRlbmNlIG9uIG90aGVyIGZpbGVzLCBidXQgc29tZQorICBwZW9wbGUgbmVlZCB0byBzYXZlIGRpc2sgc3BhY2UsIGFuZCBvdGhlciBjcml0aWNhbCBwcm9ncmFtcyBvbiB0aGVpcgorICBzeXN0ZW1zIHdlcmUgYmVpbmcgbGlua2VkIGR5bmFtaWNhbGx5IGFueXdheS4KKworICBQcm9ncmFtcyBzdWNoIGFzIGZzY2sgd2hpY2ggZGlkbid0IG5lZWQgdG8gYmUgbGlua2VkIGFnYWluc3QKKyAgbGliZXh0MmZzIChvciBta2UyZnMgd2hpY2ggZGlkbid0IG5lZWQgdG8gYmUgbGlua2VkIGFnYWluc3QgbGliZTJwKQorICBvbmx5IGxpbmsgYWdhaW5zdCBsaWJyYXJpZXMgdGhleSBhY3R1YWxseSBuZWVkLiAgT3RoZXJ3aXNlLCB0aG9zZQorICBwcm9ncmFtcyB3b3VsZCByZXF1aXJlIHRoZSBwcmVzZW5zZSBvZiBsaWJyYXJpZXMgdGhhdCBvdGhlcndpc2UKKyAgY291bGQgYmUgcmVtb3ZlZCBmcm9tIGEgcmVzY3VzZSBkaXNrZXR0ZS4KKworICBUaGUgc3MgaW5jbHVkZSBmaWxlcyBhcmUgbm93IGluc3RhbGxlZCBjb3JyZWN0bHkgc28gdGhleSBjYW4KKyAgYWN0dWFsbHkgYmUgdXNlZCBieSBhbm90aGVyIHBhY2thZ2UuCisKKyAgSWYgdGhlIHByb2ZpbGluZyBsaWJyYXJpZXMgYXJlIGJ1aWx0LCB0aGV5IGFyZSBub3cgaW5zdGFsbGVkIG9uIGEKKyAgIm1ha2UgaW5zdGFsbC1saWJzIi4KKworCitFMmZzcHJvZ3MgMS4wMyAoTWFyY2ggMjcsIDE5OTYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NoYW5nZSB0aGUgbTY4ayBiaXQgbnVtYmVyaW5nIGZvciBiaXRtYXNrcyB0byBtYXRjaCB0aGUgYml0IG51bWJlcmluZwordXNlZCBieSBhbGwgb3RoZXIgZXh0MiBpbXBsZW1lbnRhdGlvbnMuICAoVGhpcyBjaGFuZ2Ugd2FzIHJlcXVlc3RlZCBieQordGhlIG02OGsga2VybmVsIGRldmVsb3BtZW50IHRlYW0uKQorCitTdXBwb3J0IChpbi1kZXZlbG9wbWVudCkgZmlsZXN5c3RlbSBmb3JtYXQgcmV2aXNpb24gd2hpY2ggc3VwcG9ydHMKKyhhbW9uZyBvdGhlciB0aGluZ3MpIGR5bmFtaWNhbGx5IHNpemVkIGlub2Rlcy4KKworRml4ZWQgYSBidWcgaW4gdGhlIGV4dDIgbGlicmFyeSBzbyB0aGF0IGFuIGludGVsbGlnZW50IGVycm9yIGlzCityZXR1cm5lZCBpZiBta2UyZnMgaXMgcnVuIHdpdGggYSByaWRpY3Vsb3VzbHkgc21hbGwgbnVtYmVyIG9mIGJsb2NrcworZm9yIGEgcGFydGl0aW9uLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgZXh0MiBsaWJyYXJ5IHdoaWNoIHJlcXVpcmVkIHRoYXQgdGhlIGRldmljZSBiZQorb3BlbmFibGUgaW4gcmVhZC93cml0ZSBtb2RlIGluIG9yZGVyIHRvIGRldGVybWluZSBpdHMgc2l6ZS4gIFRoaXMKK2NhdXNlZCBlMmZzY2sgLW4gdG8gcmVxdWlyZSByZWFkL3dyaXRlIGFjY2VzcyB3aGVuIGl0IHdhcyBub3QKK3ByZXZpb3VzbHkgbmVjZXNzYXJ5LgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2FzdWVkIGl0IHRvIG9jY2FzaW9uYWxseSBmYWlsIHRoZSB0ZXN0CitzdWl0ZSBkZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgbGlicmFyeSBpdCB3YXMKK3VzaW5nLgorCitGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgc28gdGhhdCBpdCBub3cgaGFsdHMgd2l0aCBhIGZhdGFsIGVycm9yIHdoZW4KK2NlcnRhaW4gc3VwZXJibG9jayBjb25zaXN0ZW5jeSBjaGVja3MgZmFpbC4gIFByZXZpb3VzbHkgaXQgY29udGludWVkCitydW5uaW5nIGUyZnNjaywgd2l0aCBzb21lIHBvdGVudGlhbCBjb25mdXNpbmcvZGFtYWdpbmcgY29uc2VxdWVuY2VzLgorCitBZGRlZCBuZXcgZmxhZyB0byBmc2NrIHdoaWNoIGFsbG93cyB0aGUgcm9vdCB0byBiZSBjaGVja2VkIGluIHBhcmFsbGVsCit3aXRoIG90aGVyIGZpbGVzeXRlbXMuICBUaGlzIGlzIG5vdCB0aGUgc2FmZXN0IHRoaW5nIGluIHRoZSB3b3JsZCB0bworZG8sIGJ1dCBzb21lIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyByZWFsbHkgd2FudGVkIGl0LgorCitGaXhlZCAtV2FsbCBmbGFtZXMgaW4gbGliL3NzLgorCisKK0UyZnNwcm9ncyAxLjAyIChKYW51YXJ5IDE2LCAxOTk2KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeCB0byBhbGxvdyBlMmZzcHJvZ3MgdG8gYmUgY29tcGlsZWQgb24gcmVjZW50IDEuMyAocGw0NSspIGtlcm5lbHMuCisKK0NoYW5nZSBlMmZzY2sgdG8gcHJpbnQgc3RhdGlzdGljcyBvZiBob3cgbWFueSBub24tY29udGlndW91cyBmaWxlcyBhcmUKK29uIHRoZSBzeXN0ZW0uICBOb3RlIHRoYXQgYSBmaWxlIHdoaWNoIGlzIGxhcmdlciB0aGFuIDhrIGJsb2NrcywgaXQgaXMKK2d1YXJhbnRlZWQgdG8gYmUgbm9uLWNvbnRpZ3VvdXMuCisKK0luIG1rZTJmcywgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgYSB1c2VyIHRyaWVzIHRvIGZvcm1hdCBhIHdob2xlCitkaXNrICgvZGV2L2hkYSB2ZXJzdXMgL2Rldi9oZGExKS4gIElmIGEgdXNlciByZWFsbHkgd2FudHMgdG8gZm9ybWF0IGEKK3dob2xlIGRpc2ssIHRoZSAtRiAoZm9yY2UpIG9wdGlvbiBmb3JjZXMgbWtlMmZzIHRvIGZvcm1hdCBhIHdob2xlIGRpc2sKK2FzIGEgZmlsZXN5dGVtLgorCitGaXggYSBidWcgaW4gZnNjayB3aGVyZSBpbiBzb21lIGNhc2VzIGl0IG1pZ2h0IHN0YXJ0IGNoZWNraW5nCitwYXJ0aXRpb25zIGluIHRoZSBuZXh0IHBhc3MgYmVmb3JlIGl0IGZpbmlzaGVzIGNoZWNraW5nIHBhcnRpdGlvbnMgaW4KK3RoZSBjdXJyZW50IHBhc3MuICBUaGlzIHN0aWxsIHdvbid0IGNhdXNlIHR3byBwYXJ0aXRpb25zIG9uIHRoZSBzYW1lCitkaXNrIHdpbGwgYmUgY2hlY2tlZCwgc28gaXQncyByYXJlbHkgYSBwcm9ibGVtIGluIHJlYWwgbGlmZS4KKworUGF0Y2ggbHNhdHRyIHNvIHRoYXQgaXQgd29uJ3QgaGFuZyB3aGVuIGNoZWNraW5nIGEgbmFtZWQgcGlwZS4KKworTWlub3IgY29tcGlsYXRpb24gZml4ZXM6CisJKiBGaXggdGhlIG9yZGVyIG9mIGxpYnJhcmllcyB0aGF0IHdlcmUgbGlua2VkIGluIGRlYnVnZnMuCisJKiBBbGxvdyB0aGUgc291cmNlcyB0byBiZSBjb21waWxlZCB3aXRoIC1hbnNpIHR1cm5lZCBvbi4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9TSExJQlMgYi9lMmZzcHJvZ3MvU0hMSUJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmY2JiYzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvU0hMSUJTCkBAIC0wLDAgKzEsMzUgQEAKK0xpYnJhcnk6bGliY29tX2Vyci5vCitEZXNjcmlwdGlvbjogQ29tbW9uIGVycm9yIGNvZGUgbGlicmFyeQorTWFpbnRhaW5lcjogVGhlb2RvcmUgVHMnbworRW1haWw6IHR5dHNvQG1pdC5lZHUKK1N0YXJ0OiAweDY2ODAwMDAwCitFbmQ6ICAgMHg2Njg3ZmZmZgorCitMaWJyYXJ5OmxpYnNzLm8KK0Rlc2NyaXB0aW9uOiBHZW5lcmljIFN1YnN5c3RlbSBsaWJyYXJ5IChTaW1wbGUgdHR5IFVJKQorTWFpbnRhaW5lcjogVGhlb2RvcmUgVHMnbworRW1haWw6IHR5dHNvQG1pdC5lZHUKK1N0YXJ0OiAweDY2ODgwMDAwCitFbmQ6ICAgMHg2NjhmZmZmZgorCitMaWJyYXJ5OmxpYmV4dDJmcy5zbworRGVzY3JpcHRpb246IFRoZSBleHQyZnMgKHJhdyBpbnRlcmZhY2UpIGxpYnJhcnkKK01haW50YWluZXI6IFRoZW9kb3JlIFRzJ28KK0VtYWlsOiB0eXRzb0BtaXQuZWR1CitTdGFydDogMHg2NjkwMDAwMAorRW5kOiAgIDB4NjY5N2ZmZmYKKworTGlicmFyeTpsaWJlMnAuc28KK0Rlc2NyaXB0aW9uOiBUaGUgZTJwIChleHQyZnMncyBwcm9ncmFtbWVycykgbGlicmFyeQorTWFpbnRhaW5lcjogVGhlb2RvcmUgVHMnbworRW1haWw6IHR5dHNvQG1pdC5lZHUKK1N0YXJ0OiAweDY2OTgwMDAwCitFbmQ6ICAgMHg2NjlmZmZmZgorCitMaWJyYXJ5OmxpYnV1aWQuc28KK0Rlc2NyaXB0aW9uOiBEQ0UgVW5pdmVyc2FsbHkgVW5pcXVlIElEIChVVUlEKSBsaWJyYXJ5CitNYWludGFpbmVyOiBUaGVvZG9yZSBUcydvCitFbWFpbDogdHl0c29AbWl0LmVkdQorU3RhcnQ6IDB4Njc5MDAwMDAKK0VuZDogICAweDY3OWZmZmZmCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9TVUJNSVRUSU5HLVBBVENIRVMgYi9lMmZzcHJvZ3MvU1VCTUlUVElORy1QQVRDSEVTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvU1VCTUlUVElORy1QQVRDSEVTCkBAIC0wLDAgKzEsMzkgQEAKKworTGlrZSB0aGUgTGludXgga2VybmVsLCBzdWJtaXR0ZWQgZTJmc3Byb2dzIHBhdGNoZXMgbm93IHJlcXVpcmUgdGhlCitmb2xsb3dpbmcgInNpZ24tb2ZmIiBwcm9jZWR1cmU6CisKK1RoZSBzaWduLW9mZiBpcyBhIHNpbXBsZSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUKK3BhdGNoLCB3aGljaCBjZXJ0aWZpZXMgdGhhdCB5b3Ugd3JvdGUgaXQgb3Igb3RoZXJ3aXNlIGhhdmUgdGhlIHJpZ2h0IHRvCitwYXNzIGl0IG9uIGFzIGEgb3Blbi1zb3VyY2UgcGF0Y2guICBUaGUgcnVsZXMgYXJlIHByZXR0eSBzaW1wbGU6IGlmIHlvdQorY2FuIGNlcnRpZnkgdGhlIGJlbG93OgorCisgICAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKKworICAgICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgIGl0LgorCisJKGQpIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKwkgICAgYXJlIHB1YmxpYyBhbmQgdGhhdCBhIHJlY29yZCBvZiB0aGUgY29udHJpYnV0aW9uIChpbmNsdWRpbmcgYWxsCisJICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKwkgICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorCSAgICB0aGlzIHByb2plY3Qgb3IgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UocykgaW52b2x2ZWQuCisKK3RoZW4geW91IGp1c3QgYWRkIGEgbGluZSBzYXlpbmcKKworCVNpZ25lZC1vZmYtYnk6IFJhbmRvbSBKIERldmVsb3BlciA8cmFuZG9tQGRldmVsb3Blci5leGFtcGxlLm9yZz4KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL1RPRE8gYi9lMmZzcHJvZ3MvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMxZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL1RPRE8KQEAgLTAsMCArMSwyNzcgQEAKK05lZWQgdG8gcHJvY2VzcyB0aGUgYmFkIGJsb2NrIGlub2RlICpiZWZvcmUqIGRvaW5nIHRoZSBpbm9kZSBzY2FuLgorCitBbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3QgYmxvY2sgb2YgdGhlIGlub2RlIHRhYmxlIGlzIG5vdCBvbiB0aGUKK2JhZCBibG9jayBzY2FuLCBhbmQgZml4IHRoYXQuICBXZSBuZWVkIHRvIGNoZWNrIGZvciBhbiBpbmFjY3VyYXRlCitibG9ja3MsIGFuZCBmaXggdGhlbSBiZWZvcmUgd2Ugc3RhcnQgZG9pbmcgYW55dGhpbmcgZWxzZSB3aXRoIHRoZQorZmlsZXN5c3RlbSEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVc2VyIHJlcXVlc3Q6CisKK0JUVzogQ291bGQgeW91IHBsZWFzZSBhZGQgc29tZSBzb3J0IG9mIGRlbGV0ZWQgYW5kIHBvc3NpYmx5IGNvcnJ1cHRlZCBmaWxlCisgICAgIGFuZCBpbm9kZSBsaXN0IHRvIGUyZnNjayByZXBvcnQuIFRoZXJlIHNob3VsZCBiZSBmaWxlbmFtZXMgZGVsZXRlZAorICAgICBmcm9tIGRpcmVjdG9yeSBpbm9kZXMsIGZpbGVzIHdpdGggZHVwbGljYXRlIGJsb2NrcyBlLnQuYy4KKyAgICAgSXQncyBwcmV0dHkgYW5ub3lpbmcgdG8gZmlsdGVyIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBlMmZzY2sgb3V0cHV0CisgICAgIGJ5IGhhbmQgOi0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBhICJhbnN3ZXIgWWVzIGFsd2F5cyB0byB0aGlzIGNsYXNzIG9mIHF1ZXN0aW9uIiByZXNwb25zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHQyZnNfZmx1c2goKSBzaG91bGQgcmV0dXJuIGEgZGlmZmVyZW50IGVycm9yIG1lc3NhZ2UgZm9yIHByaW1hcnkKK3ZlcnN1cyBiYWNrdXAgc3VwZXJibG9jayBmbHVzaGluZywgc28gdGhhdCBta2UyZnMgY2FuIHByaW50IGFuCithcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RhdGU6IE1vbiwgMDggTWFyIDE5OTkgMjE6NDY6MTQgKzAxMDAKK0Zyb206IFNlcmdpbyBQb2xpbmkgPHMucG9saW5pQG1jbGluay5pdD4KKworCitJJ20gcmVhZGluZyB0aGUgc29yY2UgY29kZSBvZiBlMmZzY2sgMS4xNC4KK0luIHBhc3MyLmMsIGxpbmVzIDM1Mi0zNTcsIEkgcmVhZDoKKworaWYgKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgPiBFWFQyX05BTUVfTEVOKSB7CisgICAgICAgIGlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRklMRU5BTUVfTE9ORywgJmNkLT5wY3R4KSkgeworICAgICAgICAgICAgICAgIGRpcmVudC0+bmFtZV9sZW4gPSBFWFQyX05BTUVfTEVOOworICAgICAgICAgICAgICAgIGRpcl9tb2RpZmllZCsrOworICAgICAgICB9Cit9CisKK0kgdGhpbmsgdGhhdCBJJ2xsIG5ldmVyIHNlZSBhbnkgbWVzc2FnZXMgYWJvdXQgdG9vIGxvbmcgZmlsZW5hbWVzLAorYmVjYXVzZSAid2hhdGV2ZXIgJiAweEZGIiBjYW4gbmV2ZXIgYmUgIj4gMHhGRiIuCitBbSBJIHdyb25nPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIGNobW9kIGNvbW1hbmQgdG8gZGVidWdmcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGU6IFR1ZSwgMTggSmFuIDIwMDAgMTc6NTQ6NTMgLTA4MDAgKFBTVCkKK0Zyb206IEFsYW4gQmxhbmNoYXJkIDxhbGFuQGFicmF4YXMudG8+CitUbzogdHl0c29ATUlULkVEVQorU3ViamVjdDogREVCVUdGUyAtIHRoYW5rcyBhbmQgYSBmZWF0dXJlIGlkZWEKK0NvbnRlbnQtVHlwZTogVEVYVC9QTEFJTjsgY2hhcnNldD1VUy1BU0NJSQorCitUaGVvZG9yZToKKworRmlyc3QsIGxldCBtZSB0aGFuayB5b3UgZm9yIHdyaXRpbmcgZGVidWdmcy4gUmVjZW50bHksIG15IExpbnV4IGJveAorKFJIIDYuMCwgNDAwIE1IeiBQSUlJLCBvbiBhIERTTCBsaW5lKSB3YXMgaGFja2VkIGludG8uICBUaGUgaW50cnVkZXIgZGlkCithbiAicm0gLVJmIiBvbiBhIDM0IEdCIGRyaXZlIHdpdGggYWJvdXQgNUdCIG9mIGRhdGEgb24gaXQuICBJIHdhcyBhYmxlIHRvCityZXN0b3JlIGVzc2VudGlhbGx5IHRoZSBlbnRpcmUgdGhpbmcgd2l0aCBkZWJ1Z2ZzIGFuZCBhIGJpdCBvZiBDIGNvZGUgYW5kIFBlcmwuCitBY3R1YWxseSwgSSBjb3VsZCBoYXZlIGRvbmUgdGhlIGVudGlyZSB0aGluZyB3aXRoIGRlYnVnZnMgYW5kIFBlcmwsIGJ1dCBJCit0aG91Z2h0IGl0IHdvdWxkIGJlIHRvbyBzbG93LgorCitEdXJpbmcgdGhpcyBleGVyY2lzZSwgSSBub3RpY2VkIHRoYXQgb25lIHNtYWxsIGZlYXR1cmUgd2FzIGxhY2tpbmcgdGhhdCB3b3VsZAoraGF2ZSBtYWRlIG15IGpvYiBhIGJpdCBlYXNpZXIuICBUaGUgbGVuZ3RoIG9mIGEgZGVsZXRlZCBkaXJlY3RvcnkgaXMKK3JlcG9ydGVkIGFzIDAsIGhlbmNlIGRlYnVnZnMgd29uJ3QgZHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSB0byBhCitmaWxlIHVzaW5nIHRoZSAiZHVtcCIgY29tbWFuZC4gIFRoZSBvbmx5IHRoaW5nIHRoYXQgc2F2ZWQgbWUgd2FzIHRoYXQgdGhlCitsaXN0IG9mIGRpc2sgYmxvY2tzIGlzIG5vdCB6ZXJvZWQgb3V0LiAgSSB3YXMgYWJsZSB0byBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGUKK2RpcmVjdG9yaWVzIGJ5IHVzaW5nIGRlYnVnZnMgdG8gZ2V0IHRoZSByZWxldmFudCBibG9jayBudW1iZXJzLCB0aGVuCit1c2luZyBkZCB0byBnZXQgdGhlIGFjdHVhbCBkYXRhLgorCitJZiBkZWJ1Z2ZzIGhhZCBhIGZlYXR1cmUgd2hlcmUgaXQgaWdub3JlZCB0aGUgc2l6ZSBvZiBhIGRpcmVjdG9yeSByZXBvcnRlZCBieQordGhlIGlub2RlIGFuZCBpbnN0ZWFkIGp1c3QgZHVtcGVkIGFsbCB0aGUgYmxvY2tzLCBpdCB3b3VsZCBoYXZlIGZhY2lsaXRlZAordGhpbmdzIGEgYml0LiBUaGlzIHNlZW1zIGxpa2UgYSB2ZXJ5IGVhc3kgZmVhdHVyZSB0byBhZGQuCisKK0FnYWluLCB0aGFua3MgZm9yIHdyaXRpbmcgZGVidWdmcyAoYW5kIGFsbCB0aGUgb3RoZXIgTGludXggc3R1ZmYgeW91J3ZlIHdyaXR0ZW4hKS4KKworQ2hlZXJzLAorQWxhbiBCbGFuY2hhcmQKK2FsYW5AYWJyYXhhcy50bworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZTogRnJpLCAyMSBKYW4gMjAwMCAxNDowNzoxMiAtMDgwMAorRnJvbTogIkguIFBldGVyIEFudmluIiA8aHBhQHd3dy50cmFuc21ldGEuY29tPgorU3ViamVjdDogbWtmcyAtY2MgYW5kIGZzY2sgLWMKKworYikgQW4gb3B0aW9uIHRvIG1rZnMgdG8gemVybyB0aGUgcGFydGl0aW9uLiAgWWVzLCBpdCBjYW4gYmUgZG9uZSB3aXRoCitkZCwgYnV0IGl0IHdvdWxkIGJlIGEgbmljZXIgd2F5IG9mIGRvaW5nIGl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIHN1cHBvcnQgZm9yIGluIGV4dDJmc19ibG9ja19pdGVyYXRlKCkgZm9yIGEgcmV0dXJuaW5nIHRoZQorY29tcHJlc3NlZCBmbGFnIGJsb2NrcyB0byBibG9ja19pdGVyYXRlLiAgQ2hhbmdlIGRlZmF1bHQgdG8gbm90IHJldHVybgorRVhUMl9DT01QUkVTU0VEX0JMS0FERFIuICBDaGFuZ2UgZTJmc2NrIHRvIHBhc3MgdGhpcyBmbGFnIGluLgorCisoVGhlIG9sZCBjb21wcmVzc2lvbiBwYXRjaGVzIGRpZCB0aGlzIGJ5IGRlZmF1bHQgYWxsIHRoZSB0aW1lLCB3aGljaAoraXMgYmFkLCBzaW5jZSBpdCBtZWFudCBlMmZzY2sgbmV2ZXIgc2F3IHRoZSBFWFQyX0NPTVBSRVNTRURfQkxLQUREUgorZmxhZ3dvcmQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFMmZzY2sgc2hvdWxkIG9mZmVyIHRvIGNsZWFyIGFsbCB0aGUgYmxvY2tzIGluIGFuIGluZGlyZWN0IGJsb2NrLCBub3QKK3RoZSBlbnRpcmUgaW5vZGUsIHNvIHRoZXJlJ3MgYmV0dGVyIHJlY292ZXJ5IGZvciB3aGVuIGFuIGluZGlyZWN0CitibG9jayBnZXRzIHRyYXNoZWQuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tOiBZYW5uIERpcnNvbiAtIExPR0FUSVFVRSA8WWFubi5EaXJzb25ARnJhbmNlLlN1bi5DT00+CitEYXRlOiBUaHUsIDIgTWFyIDIwMDAgMTM6NTI6MTMgKzAxMDAgKE1FVCkKKworRHVyaW5nIG15IGV4cGVyaW1lbnRzIG9uIHRoZSBicm9rZW4gc3lzdGVtLCBJIG5vdGljZWQgdGhlIGZvbGxvd2luZyBpbgordGhlIGJhZGJsb2NrcyBwcm9ncmFtICh3aGljaCBJJ20gYXdhcmUgaXMgbm90IGRlc2lnbmVkIGZvciBJREUgZHJpdmVzKQorLSBJJ2QgcHJvYmFibHkgaGF2ZSBhbHJlYWR5IGZpeGVkIHRoZW0gaWYgbXkgaG9tZSBzeXN0ZW0gd2FzIHVwIDooCisKKyogdGhlIHN5bnRheCBzdW1tYXJ5IGRvY3VtZW50cyAybmQgYXJnIGFzIGJsb2Nrc19jb3VudCwgd2hpY2ggc2hvdWxkCitwcm9iYWJseSByZWFkIHNvbWV0aGluZyBsaWtlIGVuZF9jb3VudC4KKworKiB0ZXN0aW5nIHBhc3QgZW5kIG9mIGRldmljZSBpcyBub3QgZGV0ZWN0ZWQsIGFuZCBsaXN0cyB0aG9zZSBibG9ja3MKK2FzIGJhZCwgd2hlcmVhcyB0aGV5IHNpbXBseSBkbyBub3QgZXhpc3QuCisKKworSSB0aGluayBJJ2xsIHByb2JhYmx5IGFkZCBhICJtYXggY291bnQiIG9wdGlvbiB0byBmaW5kc3VwZXIoOCksIHNvCit0aGF0IEkgZG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgdGhlIHdob2xlIGRpc2sgdG8gYmUgc2Nhbm5lZCB3aGVuIHRoZQorc3lzdGVtIGhhZCB0byBiZSBsYXVuY2hlZCB3aXRoICJpbml0PS9iaW4vc2giLCBpbiB3aGljaCBjYXNlIEN0cmwtW0NaXQorYW5kIGZyaWVuZHMgYXBwZWFyIHRvIGJlIGFic29sdXRlbHkgaWdub3JlZC4KKworCitTb21ld2hhdCB1bnJlbGF0ZWQsIEkganVzdCBub3RpY2VkIHRoZQoraHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9leHQyLmh0bWwgY291bGQgYmUgdXBkYXRlZDoKKworLSBjb3VsZCBtZW50aW9uIFNHSSB4ZnMgKGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvIC0gdGhleSBqdXN0CisgIHJlbGVhc2UgMC4wMyBzbmFwc2hvdCkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXR1cm4tUGF0aDogPHR5dHNvQE1JVC5FRFU+CitEYXRlOiBUaHUsIDEwIEZlYiAyMDAwIDEzOjIwOjE0IC0wNTAwCitGcm9tOiAiVGhlb2RvcmUgWS4gVHMnbyIgPHR5dHNvQE1JVC5FRFU+CitUbzogUi5FLldvbGZmQEJpdFdpemFyZC5ubAorSW4tUmVwbHktVG86IFJvZ2llciBXb2xmZidzIG1lc3NhZ2Ugb2YgVGh1LCAxMCBGZWIgMjAwMCAwODo0NjozMCArMDEwMCAoTUVUKSwKKwk8MjAwMDAyMTAwNzQ2LklBQTI0NTczQGNhdmUuYml0d2l6YXJkLm5sPgorU3ViamVjdDogUmU6IGUyZnNjayByZXF1ZXN0IGZvciBlbmhhbmNlbWVudC4KK1Bob25lOiAoNzgxKSAzOTEtMzQ2NAorCisgICBEYXRlOiBUaHUsIDEwIEZlYiAyMDAwIDA4OjQ2OjMwICswMTAwIChNRVQpCisgICBGcm9tOiBSLkUuV29sZmZAQml0V2l6YXJkLm5sIChSb2dpZXIgV29sZmYpCisKKyAgIExhdGVseSwgd2hpbGUgdHJ5aW5nIHRvIHJlY292ZXIgYSBicm9rZW4gZGlzaywgbXkgc3lzdGVtIGZyb3plICh0d2ljZSwKKyAgIHVudGlsIEkgdHJpZWQgc29tZXRoaW5nIGVsc2UpIHdoaWxlIGNvcHlpbmcgdGhlIGRpc2suCisKKyAgIFNvIEkgaGFkIGEgZmlsZSBvZiBhYm91dCA1ME1iIHRoYXQgd2FzIGdyb3dpbmcgZnJhbnRpY2FsbHkgYXQgdGhlCisgICBtb21lbnQgb2YgdGhlIGNyYXNoLgorCisgICBlMmZzY2ssIHRoZW4gZmluZHMgYW4gaW5kaXJlY3QgYmxvY2sgdGhhdCBpcyBjb21wbGV0ZWx5IGJvZ3VzLiBJdAorICAgc3RhcnRzIGJ5IGFza2luZyBtZSBpZiBpdCdzIG9rIHRvIGNsZWFyIGEgZmV3IG9mIHRoZSByZWZlcmVuY2VkCisgICBibG9ja3MuIEkgc2F5IHllcy4gVGhlbiBpdCBjb21lcyB0byB0aGUgY29uY2x1c2lvbjogCisKKyAgICAgIHRvbyBtYW55IGludmFsaWQgYmxvY2tzLiBDbGVhciBpbm9kZT8KKworICAgYW5kIHRoZW4gSSBnZXQgdGhlIG9wdGlvbiB0byBkZWxldGUgdGhlIHdob2xlIGZpbGUuIE5vdCB0byB0cnVuY2F0ZQorICAgdGhlIGZpbGUgdG8gYSAid29ya2luZyIgc2l6ZS4KKworCisgICBJJ2QgTVVDSCByYXRoZXIgaGF2ZSBlMmZzY2sgc2F5IHNvbWV0aGluZyBsaWtlOgorCisgICAgICBpbm9kZSAxMjM0IHJlZmVyZW5jZXMgYW4gaW52YWxpZCBibG9jayAxMzQzNDU0NTQuIEhtbS4KKyAgICAgIGlub2RlIDEyMzQgcmVmZXJlbmNlcyA1Njcgb3V0IG9mIDUwMTc2IGludmFsaWQgYmxvY2tzLCAKKwkJCSAgYWxsIG5lYXIgdGhlIGVuZC4gVHJ1bmNhdGUgZmlsZSB0byA0OTE1MiBibG9ja3M/CisKKyAgIEhlcmUgeW91IGNhbiBzZWUgdGhhdCBvZiB0aGUgMTAyNCBibG9ja3MgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLAorICAgb25seSA1Njcgd2VyZSBkZXRlY3RlZCBhcyBpbnZhbGlkLiBIb3dldmVyIG5vdyA0OE1iIG9mIHRoZSBmaWxlIHdpbGwKKyAgIGJlIHJlY292ZXJlZCwgaW5zdGVhZCBvZiB0aHJvd24gYXdheS4KKworVGhhdCdzIGEgZ29vZCBwb2ludC4gIEFjdHVhbGx5LCB0aGUgcmlnaHQgdGhpbmcgaXMgZm9yIGUyZnNjayB0byBvZmZlcgordG8gY2xlYXIgYWxsIG9mIHRoZSBiYWQgYmxvY2tzIGluIGEgcGFydGljdWxhciBpbmRpcmVjdCBibG9jay4gIEkgZG9uJ3QKK2tub3cgaG93IGhhcmQgaXQgd291bGQgYmUgdG8gZG8gdGhhdCwgYnV0IEknbGwgcHV0IGl0IG9uIG15IGUyZnNwcm9ncworVE9ETyBsaXN0LgorCisJCQkJCQkJLSBUZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGcm9tIGUyZnNwcm9ncyBEZWJpYW4gVE9ETyBmaWxlIGFzIG9mIDEuMTAtMTMuCisKKyogTWF5YmUgbWFrZSAtZGJnIHBhY2thZ2VzLiBMb29rIGF0IGhvdyBvdGhlcnMgZG8gaXQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgLS1sYmEgb3B0aW9uIHRvIGRlYmlhbiBpY2hlY2sgY29tbWFuZCwgYW5kIGhhdmUgd2F5cyBvZiBtYWtpbmcgaXQKK2Vhc2llciB0byB0cmFuc2xhdGUgTEJBIHRvIGZpbGVzeXN0ZW0gYmxvY2sgbnVtYmVycy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworTGlzdCBvZiBwcm9qZWN0cyBmb3IgZTJmc3Byb2dzOgorCisKKzEpIE1ha2UgZGVidWdmcydzICJuY2hlY2sgPGlub2RlPiIgY29tbWFuZCBsaXN0IGFsbCBvZiB0aGUgcGF0aG5hbWVzCit0byBhbiBpbm9kZSwgbm90IGp1c3Qgb25seSB0aGUgZmlyc3QgbGluayB0byB0aGUgaW5vZGUgd2hpY2ggaXMgZm91bmQuCisoQSBnb29kICJpbnRybyB0byBsaWJleHQyZnMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBwcm9qZWN0KQorCisJRGlmZmljdWx0eTogTG93CQlQcmlvcml0eTogTG93CisKKzIpIFVzZSBhIGNvZGUgY292ZXJhZ2UgdG9vbCBzdWNoIGFzIFJhdGlvbmFsJ3MgUHVyZUNvdmVyYWdlIHRvIHNlZQord2hhdCBraW5kIG9mIGNvZGUgY292ZXJhZ2Ugd2UgaGF2ZSBmb3IgZTJmc2NrLCBhbmQgdHJ5IHRvIGFkZCB0ZXN0CitjYXNlcyB0byBpbmNyZWFzZSB0aGUgY29kZSBjb3ZlcmFnZSBmb3IgZTJmc2NrLgorCisJRGlmZmljdWx0eTogTWVkaXVtCVByaW9ydHk6IExvdworCiszKSBVc2UgYSBjb2RlIGNvdmVyYWdlIHRvb2wgc3VjaCBhcyBSYXRpb25hbCdzIFB1cmVDb3ZlcmFnZSB0byBzZWUKK3doYXQga2luZCBvZiBjb2RlIGNvdmVyYWdlIHdlIGhhdmUgZm9yIHJlc2l6ZTJmcywgYW5kIHRyeSB0byBhZGQgdGVzdAorY2FzZXMgdG8gaW5jcmVhc2UgdGhlIGNvZGUgY292ZXJhZ2UgZm9yIHJlc2l6ZTJmcy4KKworCURpZmZpY3VsdHk6IE1lZGl1bQlQcmlvcnR5OiBNZWRpdW0KKworNCkgQ3JlYXRlIGEgbmV3IEkvTyBtYW5hZ2VyIChpLmUuLCB0ZXN0X2lvLmMsIHVuaXhfaW8uYywgZXQuYWwuKSB3aGljaAorbGF5ZXJzIG9uIHRvcCBvZiBhbiBleGlzdGluZyBJL08gbWFuYWdlciB3aGljaCBwcm92aWRlcyBjb3B5LW9uLXdyaXRlCitmdW5jdGlvbmFsaXR5LiAgVGhpcyBDT1cgSS9PIG1hbmFnZXIgdGFrZXMgd2lsbCB0YWtlIHR3byBvcGVuIEkvTworbWFuYWdlcnMsIGNhbGwgdGhlbSAiYmFzZSIgYW5kICJjaGFuZ2VkIi4gIFRoZSAiYmFzZSIgSS9PIG1hbmFnZXIgaXMKK29wZW5lZCByZWFkL29ubHksIHNvIGFueSBjaGFuZ2VzIGFyZSB3cml0dGVuIGluc3RlYWQgdG8gdGhlICJjaGFuZ2VkIgorSS9PIG1hbmFnZXIsIGluIGEgY29tcGFjdCwgbm9uLXNwYXJzZSBmb3JtYXQgY29udGFpbmluZyB0aGUgaW50ZW5kZWQKK21vZGlmaWNhdGlvbiB0byB0aGUgImJhc2UiIGZpbGVzeXN0ZW0uICAKKworVGhpcyB3aWxsIGFsbG93IHJlc2l6ZTJmcyB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbmdlcyBuZWVkIHRvIG1hZGUgdG8KK2V4dGVuZCBhIGZpbGVzeXN0ZW0sIG9yIGV4cGFuZCB0aGUgc2l6ZSBvZiBpbm9kZXMgaW4gdGhlIGlub2RlIHRhYmxlLAorYW5kIHRoZSBjaGFuZ2VzIGNhbiBiZSBwdXNoZWQgdGhlIGZpbGVzeXN0ZW0gaW4gb25lIGZlbGwgc3dvb3AuICAoSWYKK3RoZSBzeXN0ZW0gY3Jhc2hlczsgdGhlIHByb2dyYW0gd2hpY2ggcnVucyB0aGUgImNoYW5nZWQiIGZpbGUgY2FuIGJlCityZS1ydW4sIG11Y2ggbGlrZSBhIGpvdXJuYWwgcmVwbGF5LiAgTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBDT1cKK2ZpbGUgd2lsbCBjb250YWluIHRoZSBmaWxlc3lzdGVtIFVVSUQgaW4gYSB0aGUgQ09XIHN1cGVyYmxvY2ssIGFuZCB0aGUKK0NPVyBmaWxlIHdpbGwgYmUgc3RvcmVkIGluIHNvbWUgcGxhY2Ugc3VjaCBhcyAvdmFyL3N0YXRlL2UyZnNwcm9ncywKK3dpdGggYW4gaW5pdC5kIGZpbGUgdG8gYXV0b21hdGUgdGhlIHJlcGxheSBzbyB3ZSBjYW4gcmVjb3ZlciBjbGVhbmx5Citmcm9tIGEgY3Jhc2ggZHVyaW5nIHRoZSByZXNpemUyZnMgcHJvY2Vzcy4pCisKKwlEaWZmaWN1bHR5OiBNZWRpdW0JUHJpb3JpdHk6IE1lZGl1bQorCis1KSBDcmVhdGUgYSBuZXcgSS9PIG1hbmFnZXIgKGkuZS4sIHRlc3RfaW8uYywgdW5peF9pby5jLCBldC5hbC4pIHdoaWNoCitsYXllcnMgb24gdG9wIG9mIGFuIGV4aXN0aW5nIEkvTyBtYW5hZ2VyIHdoaWNoIHByb3ZpZGVzIGFuICJ1bmRvIgorZnVuY3Rpb25hbGl0eS4gIFRoaXMgdW5kbyBJL08gbWFuYWdlciB0YWtlcyB3aWxsIHRha2UgdHdvIG9wZW4gSS9PCittYW5hZ2VycywgY2FsbCB0aGVtICJiYXNlIiBhbmQgInVuZG8iLiAgVGhlICJiYXNlIiBJL08gbWFuYWdlciBpcyBiZQorb3BlbmVkIHJlYWQvd3JpdGUsIGFuZCB3aGVuIGFueSB3cml0ZXMgYXJlIHNlbnQgdG8gdGhlIEkvTyBtYW5hZ2VyLAordGhlIEkvTyBtYW5hZ2VyIHdpbGwgY2hlY2sgdGhlICJ1bmRvIiBJL08gbWFuYWdlciwgdXNpbmcgYSBmaWxlIGZvcm1hdAoraWRlbnRpY2FsIHRvIHRoZSBvbmUgZm91bmQgaW4gKDUpIGFib3ZlLiAgCisKK1RoaXMgaXMgdXNlZnVsIGZvciBhbGxvd2luZyBlMmZzY2sgdG8gY3JlYXRlIGFuICJ1bmRvIiBmaWxlLCB3aGljaAord291bGQgbWFrZSB0aGluZ3MgbGlrZSAiZTJmc2NrIC15IiBtdWNoIHNhZmVyLgorCisJRGlmZmljdWx0eTogTG93IChvbmNlIDUgaXMgZG9uZSkgIFByaW9yaXR5OiBMb3cKKworNikgTW9kaWZ5IHJlc2l6ZTJmcyBzbyB0aGF0IGl0IGNhbiByZWxvY2F0ZSBhbmQgcmVvcmdhbml6ZSB0aGUKK2ZpbGVzeXN0ZW0gaW4gdGhlIGZvbGxvd2luZyB3YXlzOiAoMSkgaW5jcmVhc2UgdGhlIGlub2RlIHNpemUsIHNvIHRoYXQKK2FuIGV4aXN0aW5nIGZpbGVzeXN0ZW0gY2FuIHVzZSB0aGUgRUEtaW4taW5vZGUga2VybmVsIHBhdGNoLCAoMikKK3Jlc2VydmUgYmxvY2tzIGluIHRoZSByZXNpemUgaW5vZGUgdG8gYWxsb3cgZm9yIG9uLWxpbmUgcmVzaXppbmcuICBVc2UKK3RoZSBDT1cgSS9PIG1hbmFnZXIgZGVzY3JpYmVkIGluICg1KSBpbiBvcmRlciB0byBwcm92aWRlIHJvYnVzdG5lc3MgaW4KK2Nhc2Ugb2YgYSBjcmFzaCBkdXJpbmcgdGhlIHJlc2l6ZS9yZW9yZ2FuaXphdGlvbiBvcGVyYXRpb24uICAKKworCURpZmZpY3VsdHk6IEhpZ2gJUHJpb3JpdHk6IE1lZGl1bQorCis3KSBSZXZpZXcgdGhlIEVBLWluLWlub2RlIHBhdGNoZXMgdG8gZTJmc2NrIGZvciBjb3JyZWN0bmVzcy9jb2RlCitjbGVhbmxpbmVzcy4gIChJIHdpbGwgcHJvYmFibHkgaGF2ZSB0byBkbyB0aGlzIG15c2VsZiAtLSBUZWQpCisKKwlEaWZmaWN1bHR5OiBIaWdoCVByaW9ydHk6IE1lZGl1bQorCis4KSBBZGQgc3VwcG9ydCBmb3IgZXh0ZW50IG1hcHMgdG8gZTJmc3Byb2dzLiAgSSBuZWVkIHRvIHJldmlldyB0aGUKK2V4dGVudCBtYXBzIGZpcnN0L2luIHBhcmFsbGVsLiAKKworCURpZmZpY3VsdHk6IEhpZ2gJUHJpb3JpdHk6IE1lZGl1bQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSByZXNpemUgaW5vZGUgb3ZlcmxhcHMgd2l0aCB0aGUKK2JhZCBibG9ja3MgaW5vZGUuCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9hY2xvY2FsLm00IGIvZTJmc3Byb2dzL2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkNDY1MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMjc3NyBAQAorIyBjb2Rlc2V0Lm00IHNlcmlhbCBBTTEgKGdldHRleHQtMC4xMC40MCkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVRdLCBhbV9jdl9sYW5naW5mb19jb2Rlc2V0LAorICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcywKKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisgICAgXSkKKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKyAgZmkKK10pCisjIGdldHRleHQubTQgc2VyaWFsIDI4IChnZXR0ZXh0LTAuMTMpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK2RubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQorZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KK2RubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCitkbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgorZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKK2RubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgorZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0CitkbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgorZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorZG5sICAgIHRoZSB2YWx1ZSBgJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgorZG5sCitkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CitkbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAorZG5sICAgIGFuZCB1c2VkLgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQorZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKK2RubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKK2RubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQorZG5sIG1haW50YWluZXJzLgorZG5sCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAorWworICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCisgIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorXSldKV0pXSldKQorICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAorICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKQorICBkZWZpbmUoZ3RfaW5jbHVkZWRfaW50bCwgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sIFtub10sIFt5ZXNdKSkKKyAgZGVmaW5lKGd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeCwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorCisgIEFDX1JFUVVJUkUoW0FNX1BPX1NVQkRJUlNdKWRubAorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQUNfUkVRVUlSRShbQU1fSU5UTF9TVUJESVJdKWRubAorICBdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisgIGRubCAgICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgIGRubCAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorICBkbmwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgbmVlZCB0byBjb250YWluIHRoZSBzYW1lIHNoZWxsIGNvZGUKKyAgZG5sIGFnYWluLCBvdXRzaWRlIGFueSAnaWYnLiBUaGVyZSBhcmUgdHdvIHNvbHV0aW9uczoKKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisgIGRubCAtIENvbnRyb2wgdGhlIGV4cGFuc2lvbnMgaW4gbW9yZSBkZXRhaWwgdXNpbmcgQUNfUFJPVklERV9JRkVMU0UuCisgIGRubCBTaW5jZSBBQ19QUk9WSURFX0lGRUxTRSBpcyBvbmx5IGluIGF1dG9jb25mID49IDIuNTIgYW5kIG5vdAorICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKyAgXSkKKworICBkbmwgU2V0IFVTRV9OTFMuCisgIEFNX05MUworCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgXSkKKyAgTElCSU5UTD0KKyAgTFRMSUJJTlRMPQorICBQT1NVQj0KKworICBkbmwgSWYgd2UgdXNlIE5MUyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkXSkKKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisgICAgICAgIFsgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlXSwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD0kd2l0aHZhbCwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKyAgICAgIEFDX01TR19SRVNVTFQoJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQpCisKKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgXSkKKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorCisgICAgICAgIGRubCBBZGQgYSB2ZXJzaW9uIG51bWJlciB0byB0aGUgY2FjaGUgbWFjcm9zLgorICAgICAgICBkZWZpbmUoW2d0X2FwaV92ZXJzaW9uXSwgaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAzLCBpZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCAyLCAxKSkpCisgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJjXSkKKyAgICAgICAgZGVmaW5lKFtndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bF0sIFtndF9jdl9mdW5jX2dudWdldHRleHRdZ3RfYXBpX3ZlcnNpb25bX2xpYmludGxdKQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjLAorICAgICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorXWlmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwKK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorI2VuZGlmCitjaGFuZ2VxdW90ZSgsKWRubAordHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKK2NoYW5nZXF1b3RlKFssXSlkbmwKK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzO10sCisgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzLAorICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8pXSkKKworICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgICAgICAgICAgQU1fSUNPTlZfTElOSworICAgICAgICAgIF0pCisgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKKyAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCisgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKyAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQorICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCisgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKKyAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCisgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCisgICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCisgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KK11pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCitbI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgorI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKyNlbmRpZgorY2hhbmdlcXVvdGUoLClkbmwKK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CitjaGFuZ2VxdW90ZShbLF0pZG5sCitdLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzICgpO10sCisgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMsCisgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vKQorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgIT0geWVzICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KK11pZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sCitbI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgorI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKyNlbmRpZgorY2hhbmdlcXVvdGUoLClkbmwKK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CitjaGFuZ2VxdW90ZShbLF0pZG5sCitdLCBbXSlbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzICgpO10sCisgICAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkTFRMSUJJQ09OViIKKyAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorICAgICAgICBmaQorCisgICAgICAgIGRubCBJZiBhbiBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkIEdOVSBnZXR0ZXh0KCkgaXMgZm91bmQsCisgICAgICAgIGRubCB1c2UgaXQuICBCdXQgaWYgdGhpcyBtYWNybyBpcyB1c2VkIGluIEdOVSBnZXR0ZXh0LCBhbmQgR05VCisgICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCisgICAgICAgIGRubCBsaWJpbnRsLiAgKENmLiB0aGUgaW5zdGFsbCBydWxlIGluIGludGwvTWFrZWZpbGUuaW4uKQorICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiID0gInllcyIgXAorICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIiBcCisgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCisgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgUmVzZXQgdGhlIHZhbHVlcyBzZXQgYnkgc2VhcmNoaW5nIGZvciBsaWJpbnRsLgorICAgICAgICAgIExJQklOVEw9CisgICAgICAgICAgTFRMSUJJTlRMPQorICAgICAgICAgIElOQ0lOVEw9CisgICAgICAgIGZpCisKKyAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgZG5sIEdOVSBnZXR0ZXh0IGlzIG5vdCBmb3VuZCBpbiB0aGUgQyBsaWJyYXJ5LgorICAgICAgICAgIGRubCBGYWxsIGJhY2sgb24gaW5jbHVkZWQgR05VIGdldHRleHQgbGlicmFyeS4KKyAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcworICAgICAgICBmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB1c2VkIHRvIGdlbmVyYXRlIEdOVSBOTFMgbGlicmFyeS4KKyAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgICAgIExJQklOVEw9ImlmZWxzZShbJDNdLFtdLFwke3RvcF9idWlsZGRpcn0vaW50bCxbJDNdKS9saWJpbnRsLltdZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4W11hICRMSUJJQ09OViIKKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViIKKyAgICAgICAgTElCUz1gZWNobyAiICRMSUJTICIgfCBzZWQgLWUgJ3MvIC1saW50bCAvIC8nIC1lICdzL14gLy8nIC1lICdzLyAkLy8nYAorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisgICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KKyAgICAgICAgQ0FUT0JKRVhUPS5nbW8KKyAgICAgIGZpCisgICAgXSkKKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUgbGFuZ3VhZ2UKKyAgIGlzIHJlcXVlc3RlZC5dKQorICAgIGVsc2UKKyAgICAgIFVTRV9OTFM9bm8KKyAgICBmaQorICBmaQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9OTFNdKQorICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKyAgICAgIGVsc2UKKyAgICAgICAgZ3Rfc291cmNlPSJsaWJjIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBndF9zb3VyY2U9ImluY2x1ZGVkIGludGwgZGlyZWN0b3J5IgorICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVChbJGd0X3NvdXJjZV0pCisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaW50bF0pCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKyAgICAgICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSU5UTF0pCisgICAgICBmaQorCisgICAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgcGFja2FnZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKEhBVkVfRENHRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisgICAgZmkKKworICAgIGRubCBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKyAgZmkKKworICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgZG5sIElmIHRoaXMgaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCB3ZSBoYXZlIHRvIHNldCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMCisgICAgZG5sIHRvICd5ZXMnIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGVzdHN1aXRlIHJlcXVpcmVzIGl0LgorICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgIGZpCisKKyAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KKyAgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorICAgIG5sc19jdl9oZWFkZXJfaW50bD0KKyAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBEQVRBRElSTkFNRT1zaGFyZQorICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIEdFTkNBVD1nZW5jYXQKKyAgICBBQ19TVUJTVChHRU5DQVQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisgICAgZmkKKyAgICBBQ19TVUJTVChJTlRMT0JKUykKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKyAgXSkKKworICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICBJTlRMTElCUz0iJExJQklOVEwiCisgIEFDX1NVQlNUKElOVExMSUJTKQorCisgIGRubCBNYWtlIGFsbCBkb2N1bWVudGVkIHZhcmlhYmxlcyBrbm93biB0byBhdXRvY29uZi4KKyAgQUNfU1VCU1QoTElCSU5UTCkKKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorICBBQ19TVUJTVChQT1NVQikKK10pCisKKworZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIGludGwgc3ViZGlyZWN0b3J5LAorZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCitkbmwgICAgICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTCwgQlVJTERfSU5DTFVERURfTElCSU5UTC4KK0FDX0RFRlVOKFtBTV9JTlRMX1NVQkRJUl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0lTQ19QT1NJWF0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ19DT05TVF0pZG5sCisgIEFDX1JFUVVJUkUoW2JoX0NfU0lHTkVEXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKWRubAorICBBQ19SRVFVSVJFKFtBQ19UWVBFX09GRl9UXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX0xPTkdfTE9OR10pZG5sCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfTE9OR0RPVUJMRV0pZG5sCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pZG5sCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0lOVF9UXSlkbmwKKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorICBBQ19SRVFVSVJFKFtndF9UWVBFX0lOVE1BWF9UXSkKKyAgQUNfUkVRVUlSRShbZ3RfUFJJTlRGX1BPU0lYXSkKKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorICBBQ19SRVFVSVJFKFtBQ19GVU5DX01NQVBdKWRubAorICBBQ19SRVFVSVJFKFtqbV9HTElCQzIxXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfSU5URElWMF0pZG5sCisgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorICBBQ19SRVFVSVJFKFtnbF9YU0laRV0pZG5sCisKKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorICAgIFtBQ19ERUZJTkUoW3B0cmRpZmZfdF0sIFtsb25nXSwKKyAgICAgICBbRGVmaW5lIGFzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisgICAgXSkKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbYXJnei5oIGxpbWl0cy5oIGxvY2FsZS5oIG5sX3R5cGVzLmggbWFsbG9jLmggc3RkZGVmLmggXAorc3RkbGliLmggc3RyaW5nLmggdW5pc3RkLmggc3lzL3BhcmFtLmhdKQorICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKK21lbXBjcHkgbXVubWFwIHB1dGVudiBzZXRlbnYgc2V0bG9jYWxlIHNucHJpbnRmIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBcCitzdHJ0b3VsIHRzZWFyY2ggd2NzbGVuIF9fYXJnel9jb3VudCBfX2FyZ3pfc3RyaW5naWZ5IF9fYXJnel9uZXh0IFwKK19fZnNldGxvY2tpbmddKQorCisgIGRubCBVc2UgdGhlIF9zbnByaW50ZiBmdW5jdGlvbiBvbmx5IGlmIGl0IGlzIGRlY2xhcmVkIChiZWNhdXNlIG9uIE5ldEJTRCBpdAorICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisgIGd0X0NIRUNLX0RFQ0woX3NucHJpbnRmLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKyAgZ3RfQ0hFQ0tfREVDTChfc253cHJpbnRmLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKworICBkbmwgVXNlIHRoZSAqX3VubG9ja2VkIGZ1bmN0aW9ucyBvbmx5IGlmIHRoZXkgYXJlIGRlY2xhcmVkLgorICBkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVmaW5lZCB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGluIFNvbGFyaXMKKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorICBkbmwgb24gU29sYXJpcyAyLjUuMSB0byBydW4gb24gU29sYXJpcyAyLjYpLgorICBkbmwgRG9uJ3QgdXNlIEFDX0NIRUNLX0RFQ0xTIGJlY2F1c2UgaXQgaXNuJ3Qgc3VwcG9ydGVkIGluIGF1dG9jb25mLTIuMTMuCisgIGd0X0NIRUNLX0RFQ0woZmVvZl91bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisgIGd0X0NIRUNLX0RFQ0woZmdldHNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorICBndF9DSEVDS19ERUNMKGdldGNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorCisgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisgICAgKnllcykgSEFWRV9QT1NJWF9QUklOVEY9MSA7OworICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKyAgZXNhYworICBBQ19TVUJTVChbSEFWRV9QT1NJWF9QUklOVEZdKQorICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0FTUFJJTlRGPTEKKyAgZWxzZQorICAgIEhBVkVfQVNQUklOVEY9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9BU1BSSU5URl0pCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorICAgIEhBVkVfU05QUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9TTlBSSU5URj0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1NOUFJJTlRGXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dQUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9XUFJJTlRGPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfV1BSSU5URl0pCisKKyAgQU1fSUNPTlYKKyAgQU1fTEFOR0lORk9fQ09ERVNFVAorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKyAgICBBTV9MQ19NRVNTQUdFUworICBmaQorCisgIGRubCBpbnRsL3BsdXJhbC5jIGlzIGdlbmVyYXRlZCBmcm9tIGludGwvcGx1cmFsLnkuIEl0IHJlcXVpcmVzIGJpc29uLAorICBkbmwgYmVjYXVzZSBwbHVyYWwueSB1c2VzIGJpc29uIHNwZWNpZmljIGZlYXR1cmVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdAorICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKyAgZG5sIGNvbXBpbGUuCisgIGRubCBiaXNvbiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG1haW50YWluZXIgKHdobyB0b3VjaGVzIHBsdXJhbC55KS4gQnV0IGluCisgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKyAgZG5sIHRoZSBydWxlIGluIGdlbmVyYWwgTWFrZWZpbGUuIE5vdywgc29tZSBwZW9wbGUgY2FyZWxlc3NseSB0b3VjaCB0aGUKKyAgZG5sIGZpbGVzIG9yIGhhdmUgYSBicm9rZW4gIm1ha2UiIHByb2dyYW0sIGhlbmNlIHRoZSBwbHVyYWwuYyBydWxlIHdpbGwKKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisgIGRubCBwcmVzZW50IG9yIHRvbyBvbGQuCisgIEFDX0NIRUNLX1BST0dTKFtJTlRMQklTT05dLCBbYmlzb25dKQorICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorICAgIGFjX3ZlcmNfZmFpbD15ZXMKKyAgZWxzZQorICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgIEFDX01TR19DSEVDS0lORyhbdmVyc2lvbiBvZiBiaXNvbl0pCitjaGFuZ2VxdW90ZSg8PCw+PilkbmwKKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRhY19wcm9nX3ZlcnNpb25dKQorICBmaQorICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KKyAgICBJTlRMQklTT049OgorICBmaQorXSkKKworCitkbmwgZ3RfQ0hFQ0tfREVDTChGVU5DLCBJTkNMVURFUykKK2RubCBDaGVjayB3aGV0aGVyIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQuCitBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICQxIGlzIGRlY2xhcmVkXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxLAorICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisjaWZuZGVmICQxCisgIGNoYXIgKnAgPSAoY2hhciAqKSAkMTsKKyNlbmRpZgorXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxPXllcywgYWNfY3ZfaGF2ZV9kZWNsXyQxPW5vKV0pCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF8kMSA9IHllczsgdGhlbgorICAgIGd0X3ZhbHVlPTEKKyAgZWxzZQorICAgIGd0X3ZhbHVlPTAKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX0RFQ0xfXXRyYW5zbGl0KCQxLCBbYS16XSwgW0EtWl0pLCBbJGd0X3ZhbHVlXSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGAkMScsIGFuZCB0byAwIGlmIHlvdSBkb24ndC5dKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQorIyBnbGliYzIxLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4xLjMsIGdldHRleHQtMC4xMC40MCkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisjIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbam1fR0xJQkMyMV0sCisgIFsKKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisJWworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKwldLAorCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChHTElCQzIxKQorICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisgIF0KKykKKyMgaWNvbnYubTQgc2VyaWFsIEFNNCAoZ2V0dGV4dC0wLjExLjMpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpY29udl0pCitdKQorCitBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCitbCisgIGRubCBTb21lIHN5c3RlbXMgaGF2ZSBpY29udiBpbiBsaWJjLCBzb21lIGhhdmUgaXQgaW4gbGliaWNvbnYgKE9TRi8xIGFuZAorICBkbmwgdGhvc2Ugd2l0aCB0aGUgc3RhbmRhbG9uZSBwb3J0YWJsZSBHTlUgbGliaWNvbnYgaW5zdGFsbGVkKS4KKworICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKworICBkbmwgQWRkICRJTkNJQ09OViB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuIFRoZSBmaXJzdAorICBkbmwgQUNfVFJZX0xJTksgd2lsbCB0aGVuIGZhaWwsIHRoZSBzZWNvbmQgQUNfVFJZX0xJTksgd2lsbCBzdWNjZWVkLgorICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lDT05WXSkKKworICBBQ19DQUNIRV9DSEVDSyhmb3IgaWNvbnYsIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKyAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCisgICAgYW1fY3ZfbGliX2ljb252PW5vCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPl0sCisgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAorICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD5dLAorICAgICAgICBbaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKyAgICAgICAgYW1fY3ZfbGliX2ljb252PXllcworICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgZmkKKyAgXSkKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfSUNPTlYsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24uXSkKKyAgZmkKKyAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaWNvbnZdKQorICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCisgIGVsc2UKKyAgICBkbmwgSWYgJExJQklDT05WIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQgJElOQ0lDT05WCisgICAgZG5sIGVpdGhlci4KKyAgICBDUFBGTEFHUz0iJGFtX3NhdmVfQ1BQRkxBR1MiCisgICAgTElCSUNPTlY9CisgICAgTFRMSUJJQ09OVj0KKyAgZmkKKyAgQUNfU1VCU1QoTElCSUNPTlYpCisgIEFDX1NVQlNUKExUTElCSUNPTlYpCitdKQorCitBQ19ERUZVTihbQU1fSUNPTlZdLAorWworICBBTV9JQ09OVl9MSU5LCisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGRlY2xhcmF0aW9uXSkKKyAgICBBQ19DQUNIRV9WQUwoYW1fY3ZfcHJvdG9faWNvbnYsIFsKKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgorZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKK3NpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKKyNlbHNlCitzaXplX3QgaWNvbnYoKTsKKyNlbmRpZgorXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKKyAgICAgIGFtX2N2X3Byb3RvX2ljb252PSJleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IGNkLCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOyJdKQorICAgIGFtX2N2X3Byb3RvX2ljb252PWBlY2hvICJbJF1hbV9jdl9wcm90b19pY29udiIgfCB0ciAtcyAnICcgfCBzZWQgLWUgJ3MvKCAvKC8nYAorICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQorICAgICAgICAgfVskXWFtX2N2X3Byb3RvX2ljb252KQorICAgIEFDX0RFRklORV9VTlFVT1RFRChJQ09OVl9DT05TVCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEsCisgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisgIGZpCitdKQorIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2d0X0lOVERJVjBdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKyAgICBbCisgICAgICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworc3RhdGljIHZvaWQKKyNpZmRlZiBfX2NwbHVzcGx1cworc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisjZWxzZQorc2lnZnBlX2hhbmRsZXIgKHNpZykgaW50IHNpZzsKKyNlbmRpZgoreworICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworfQorCitpbnQgeCA9IDE7CitpbnQgeSA9IDA7CitpbnQgejsKK2ludCBuYW47CisKK2ludCBtYWluICgpCit7CisgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisjZW5kaWYKKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKyNlbmRpZgorCisgIHogPSB4IC8geTsKKyAgbmFuID0geSAvIHk7CisgIGV4aXQgKDEpOworfQorXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKyAgICAgICAgWworICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIF0pCisgICAgXSkKKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorICAgICp5ZXMpIHZhbHVlPTE7OworICAgICopIHZhbHVlPTA7OworICBlc2FjCisgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorXSkKKyMgaW50bWF4Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBoYXMgdGhlICdpbnRtYXhfdCcgdHlwZSwgYnV0IGRvbid0IGF0dGVtcHQgdG8KK2RubCBmaW5kIGEgcmVwbGFjZW1lbnQgaWYgaXQgaXMgbGFja2luZy4KKworQUNfREVGVU4oW2d0X1RZUEVfSU5UTUFYX1RdLAorWworICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbnRtYXhfdCwgZ3RfY3ZfY19pbnRtYXhfdCwKKyAgICBbQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN0ZGRlZi5oPiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKK10sIFtpbnRtYXhfdCB4ID0gLTE7XSwgZ3RfY3ZfY19pbnRtYXhfdD15ZXMsIGd0X2N2X2NfaW50bWF4X3Q9bm8pXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfY19pbnRtYXhfdCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0lOVE1BWF9ULCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+Ll0pCisgIGZpCitdKQorIyBpbnR0eXBlcy5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisjIDxzeXMvdHlwZXMuaD4uCisKK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oLAorICBbCisgICAgQUNfVFJZX0NPTVBJTEUoCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKyAgICAgIFtdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKQorICBdKQorICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0gsIDEsCisgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+Ll0pCisgIGZpCitdKQorIyBpbnR0eXBlc19oLm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTIpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsCisjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorCitBQ19ERUZVTihbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKyAgW0FDX1RSWV9DT01QSUxFKAorICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAorICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCisgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisgIGZpCitdKQorIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKyMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCisKK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorWworICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pCisgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKyAgICAgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4sCisgICAgICBbCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpZmRlZiBQUklkMzIKK2NoYXIgKnAgPSBQUklkMzI7CisjZW5kaWYKK10sIFtdLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcykKKyAgICAgIF0pCisgIGZpCisgIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorICBmaQorXSkKKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisKKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisKK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorCitBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKyAgWworICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorICBdCispCisjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKworIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorCitBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICBmaQorXSkKKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KK2RubCB3aXRoIGxpYnRvb2wubTQuCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKK10pCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCitbQUNfQVJHX1dJVEgoZ251LWxkLAorWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCit0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitlbHNlCisgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX0xJQl9QUk9HX0xEX0dOVQorXSkKKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKK2RubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKyAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorICBdKQorICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisgIHVuZGVmaW5lKFtOYW1lXSkKKyAgdW5kZWZpbmUoW05BTUVdKQorXSkKKworZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCitkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCitkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorCisgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisgIF0pCisgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisgICAgSEFWRV9MSUJbXU5BTUU9eWVzCisgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQorICBlbHNlCisgICAgSEFWRV9MSUJbXU5BTUU9bm8KKyAgICBkbmwgSWYgJExJQltdTkFNRSBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkCisgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJbXU5BTUU9CisgICAgTFRMSUJbXU5BTUU9CisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorICB1bmRlZmluZShbTmFtZV0pCisgIHVuZGVmaW5lKFtOQU1FXSkKK10pCisKK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CitkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKK2RubCBoYXJkY29kZV9kaXJlY3QsIGhhcmRjb2RlX21pbnVzX0wuCitBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKyAgICAuIC4vY29uZnRlc3Quc2gKKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgXSkKKyAgd2w9IiRhY2xfY3Zfd2wiCisgIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCisgIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCitdKQorCitkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCitkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCitkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorWworICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCitbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWIkMS1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorICAgICAgZmkKKyAgICBmaQorXSkKKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKyAgTElCW11OQU1FPQorICBMVExJQltdTkFNRT0KKyAgSU5DW11OQU1FPQorICBycGF0aGRpcnM9CisgIGx0cnBhdGhkaXJzPQorICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisgIG5hbWVzX25leHRfcm91bmQ9JyQxICQyJworICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisgICAgbmFtZXNfbmV4dF9yb3VuZD0KKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworICAgICAgICBkbmwgb3IgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbGwuCisgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kdmFsdWUiCisgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKyAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBsaWIkbmFtZSBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kICRMREZMQUdTCisgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorICAgICAgICAgIGZvdW5kX2Rpcj0KKyAgICAgICAgICBmb3VuZF9sYT0KKyAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorICAgICAgICAgICAgICAqL2xpYiB8ICovbGliLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKyAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgIGRubCBOb3RlOiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgbGliZGlyPSIkYWxsZGlycyIKKyAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorICAgIGRvbmUKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCitBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKK1sKKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJFskMV07IGRvCisgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKK10pCisjIGxpYi1wcmVmaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCitkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CitkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCitbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKworZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorWworICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAorWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorICAgICAgZmkKKyAgICBmaQorXSkKKyAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgIGhhdmVpdD0KKyAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKyAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKyAgICAgIGhhdmVpdD0KKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAorZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCitkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKK1sKKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisgIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZWxzZQorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisgIGZpCisgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworICBlbHNlCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGZpCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKK2RubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCitkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorWworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICAkMQorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCitdKQorIyBsb25nZG91YmxlLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuCitkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisKK0FDX0RFRlVOKFtndF9UWVBFX0xPTkdET1VCTEVdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgZG91YmxlXSwgZ3RfY3ZfY19sb25nX2RvdWJsZSwKKyAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcworICAgICBlbHNlCisgICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgICAgICAgLyogVGhlIFN0YXJkZW50IFZpc3RyYSBrbm93cyBzaXplb2YobG9uZyBkb3VibGUpLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBpdC4gICovCisgICAgICAgICBsb25nIGRvdWJsZSBmb28gPSAwLjA7CisgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisgICAgICAgICBpbnQgYXJyYXkgWzIqKHNpemVvZihsb25nIGRvdWJsZSkgPj0gc2l6ZW9mKGRvdWJsZSkpIC0gMV07CisgICAgICAgICBdLCAsCisgICAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcywgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubykKKyAgICAgZmldKQorICBpZiB0ZXN0ICRndF9jdl9jX2xvbmdfZG91YmxlID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS5dKQorICBmaQorXSkKKyMgbG9uZ2xvbmcubTQgc2VyaWFsIDQKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIEhBVkVfTE9OR19MT05HIGlmICdsb25nIGxvbmcnIHdvcmtzLgorCitBQ19ERUZVTihbam1fQUNfVFlQRV9MT05HX0xPTkddLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfbG9uZ19sb25nLAorICBbQUNfVFJZX0xJTksoW2xvbmcgbG9uZyBsbCA9IDFMTDsgaW50IGkgPSA2MztdLAorICAgIFtsb25nIGxvbmcgbGxtYXggPSAobG9uZyBsb25nKSAtMTsKKyAgICAgcmV0dXJuIGxsIDw8IGkgfCBsbCA+PiBpIHwgbGxtYXggLyBsbCB8IGxsbWF4ICUgbGw7XSwKKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz15ZXMsCisgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9bm8pXSkKKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0xPTkcsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbG9uZyBsb25nJyB0eXBlLl0pCisgIGZpCitdKQorIyBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCitkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKworQUNfREVGVU4oW0FNX05MU10sCitbCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKyAgQUNfQVJHX0VOQUJMRShubHMsCisgICAgWyAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKyAgQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKyAgQUNfU1VCU1QoVVNFX05MUykKK10pCisKK0FDX0RFRlVOKFtBTV9NS0lOU1RBTExESVJTXSwKK1sKKyAgZG5sIElmIHRoZSBBQ19DT05GSUdfQVVYX0RJUiBtYWNybyBmb3IgYXV0b2NvbmYgaXMgdXNlZCB3ZSBwb3NzaWJseQorICBkbmwgZmluZCB0aGUgbWtpbnN0YWxsZGlycyBzY3JpcHQgaW4gYW5vdGhlciBzdWJkaXIgYnV0ICQodG9wX3NyY2RpcikuCisgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorICBNS0lOU1RBTExESVJTPQorICBpZiB0ZXN0IC1uICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKyAgICAgIC8qKSBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworICAgICAgKikgTUtJTlNUQUxMRElSUz0iXCQodG9wX2J1aWxkZGlyKS8kYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIiA7OworICAgIGVzYWMKKyAgZmkKKyAgaWYgdGVzdCAteiAiJE1LSU5TVEFMTERJUlMiOyB0aGVuCisgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKyAgZmkKKyAgQUNfU1VCU1QoTUtJTlNUQUxMRElSUykKK10pCisjIHBvLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTQpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCitBQ19ERUZVTihbQU1fUE9fU1VCRElSU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorICBBQ19SRVFVSVJFKFtBTV9NS0lOU1RBTExESVJTXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKworICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dmbXQgaW4gdGhlIFBBVEguCisgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIG1zZ2ZtdC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKyAgICA6KQorICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorICBybSAtZiBtZXNzYWdlcy5wbworCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR01FUkdFLCBtc2dtZXJnZSwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMV0sIDopCisKKyAgZG5sIFRoaXMgY291bGQgZ28gYXdheSBzb21lIGRheTsgdGhlIFBBVEhfUFJPR19XSVRIX1RFU1QgYWxyZWFkeSBkb2VzIGl0LgorICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgbXNnZm10LgorICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCisgICAgZG5sIElmIGl0IGlzIG5vIEdOVSBtc2dmbXQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKyAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgorICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgKGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorICAgICAgOiA7CisgICAgZWxzZQorICAgICAgR01TR0ZNVD1gZWNobyAiJEdNU0dGTVQiIHwgc2VkIC1lICdzLF4uKi8sLCdgCisgICAgICBBQ19NU0dfUkVTVUxUKAorICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKKyAgICAgIEdNU0dGTVQ9IjoiCisgICAgZmkKKyAgZmkKKworICBkbmwgVGhpcyBjb3VsZCBnbyBhd2F5IHNvbWUgZGF5OyB0aGUgUEFUSF9QUk9HX1dJVEhfVEVTVCBhbHJlYWR5IGRvZXMgaXQuCisgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KKyAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKyAgICBkbmwgSWYgaXQgaXMgbm8gR05VIHhnZXR0ZXh0IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKyAgICBpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgKGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICA6IDsKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKAorICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQorICAgICAgWEdFVFRFWFQ9IjoiCisgICAgZmkKKyAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorICAgIHJtIC1mIG1lc3NhZ2VzLnBvCisgIGZpCisKKyAgQUNfT1VUUFVUX0NPTU1BTkRTKFsKKyAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisgICAgICBlc2FjCisgICAgICAjIFBPIGRpcmVjdG9yaWVzIGhhdmUgYSBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbi5pbi4KKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbiAqL01ha2VmaWxlLmluKQorICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKyAgICAgICAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorICAgICAgICAgICMgcGFyYW1ldGVycy4KKyAgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAorICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKyAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBQT0ZJTEVTPQorICAgICAgICAgIFVQREFURVBPRklMRVM9CisgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorICAgICAgICAgIEdNT0ZJTEVTPQorICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgICAgICAgZG9uZQorICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgSU5TVF9MSU5HVUFTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgQ0FUQUxPR1M9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lXSwKKyAgIFsjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKyAgICAjIGZyb20gYXV0b21ha2UuCisgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorICAgXSkKK10pCisKK2RubCBQb3N0cHJvY2Vzc2VzIGEgTWFrZWZpbGUgaW4gYSBkaXJlY3RvcnkgY29udGFpbmluZyBQTyBmaWxlcy4KK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCitbCisgICMgV2hlbiB0aGlzIGNvZGUgaXMgcnVuLCBpbiBjb25maWcuc3RhdHVzLCB0d28gdmFyaWFibGVzIGhhdmUgYWxyZWFkeSBiZWVuCisgICMgc2V0OgorICAjIC0gT0JTT0xFVEVfQUxMX0xJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIExJTkdVQVMgc2V0IGluIGNvbmZpZ3VyZS5pbiwKKyAgIyAtIExJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSU5HVUFTIGF0IGNvbmZpZ3VyZQorICAjICAgdGltZS4KKworY2hhbmdlcXVvdGUoLClkbmwKKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgZXNhYworCisgICMgRmluZCBhIHdheSB0byBlY2hvIHN0cmluZ3Mgd2l0aG91dCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLgorICBpZiB0ZXN0ICJYYChlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAgIGd0X2VjaG89J2VjaG8nCisgIGVsc2UKKyAgICBpZiB0ZXN0ICJYYChwcmludGYgJyVzXG4nICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisgICAgZWxzZQorICAgICAgZWNob19mdW5jICgpIHsKKyAgICAgICAgY2F0IDw8RU9UCiskKgorRU9UCisgICAgICB9CisgICAgICBndF9lY2hvPSdlY2hvX2Z1bmMnCisgICAgZmkKKyAgZmkKKworICAjIEEgc2VkIHNjcmlwdCB0aGF0IGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBWQVJJQUJMRSBmcm9tIGEgTWFrZWZpbGUuCisgIHNlZF94X3ZhcmlhYmxlPScKKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KK3gKK3MvUC9QLworeAordGEKKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorL15bCSBdKlZBUklBQkxFWwkgXSo9L3sKKyAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKyAgYmEKK30KK2JkCis6YQorIyBIZXJlIHdlIGFyZSBwcm9jZXNzaW5nIGEgbGluZSBmcm9tIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCitzLyMuKiQvIC8KKyMgU2VlIGlmIHRoZSBsaW5lIGVuZHMgaW4gYSBiYWNrc2xhc2guCit0YgorOmIKK3MvXFwkLy8KKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KK3AKK3RjCisjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKyMgcmVhY2hlZC4gQ2xlYXIgdGhlIGhvbGQgc3BhY2UuCitzL14uKiQvLworeAorYmQKKzpjCisjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorIyBuZXh0IGxpbmUuIFB1dCBhIG5vbmVtcHR5IHN0cmluZyBpbnRvIHRoZSBob2xkIHNwYWNlIHRvIGluZGljYXRlIHRoaXMuCitzL14uKiQvUC8KK3gKKzpkCisnCitjaGFuZ2VxdW90ZShbLF0pZG5sCisKKyAgIyBTZXQgUE9URklMRVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBQT1RGSUxFUy4KKyAgc2VkX3hfUE9URklMRVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AiCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKyAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgIGVsc2UKKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisgICAgc2VkX3hfTElOR1VBUz0iYCRndF9lY2hvIFwiJHNlZF94X3ZhcmlhYmxlXCIgfCBzZWQgLWUgJy9eICojL2QnIC1lICdzL1ZBUklBQkxFL0xJTkdVQVMvZydgIgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisgICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCisgICMgQ29tcHV0ZSBRTUZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQorICAjIENvbXB1dGUgTVNHRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisgICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQorICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgIGVzYWMKKyAgUE9GSUxFUz0KKyAgVVBEQVRFUE9GSUxFUz0KKyAgRFVNTVlQT0ZJTEVTPQorICBHTU9GSUxFUz0KKyAgUFJPUEVSVElFU0ZJTEVTPQorICBDTEFTU0ZJTEVTPQorICBRTUZJTEVTPQorICBNU0dGSUxFUz0KKyAgUkVTT1VSQ0VTRExMRklMRVM9CisgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisgICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKKyAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCisgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJ2AKKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorICBkb25lCisgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorICBJTlNUX0xJTkdVQVM9CisgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgdXNlaXQ9bm8KKyAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICBlbHNlCisgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgIGZpCisgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgZXNhYworICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQorICBDQVRBTE9HUz0KKyAgSkFWQUNBVEFMT0dTPQorICBRVENBVEFMT0dTPQorICBUQ0xDQVRBTE9HUz0KKyAgQ1NIQVJQQ0FUQUxPR1M9CisgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKyAgICAgIFFUQ0FUQUxPR1M9IiRRVENBVEFMT0dTICRsYW5nLnFtIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJ2AKKyAgICAgIENTSEFSUENBVEFMT0dTPSIkQ1NIQVJQQ0FUQUxPR1MgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKKyAgICBkb25lCisgIGZpCisKKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKwlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CitFT0YKKyAgICBkb25lCisgIGZpCisgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTMuMSkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCitkbmwgcG9zaXRpb25zLgorCitBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXgsCisgICAgWworICAgICAgQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfV0sIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PXllcywgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9bm8sCisgICAgICBbCisgICAgICAgIEFDX0VHUkVQX0NQUChub3Rwb3NpeCwgWworI2lmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19NSU5HVzMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fCisgIG5vdHBvc2l4CisjZW5kaWYKKyAgICAgICAgXSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIG5vIiwKKyAgICAgICAgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyIpCisgICAgICBdKQorICAgIF0pCisgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisgICAgKnllcykKKyAgICAgIEFDX0RFRklORShIQVZFX1BPU0lYX1BSSU5URiwgMSwKKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLl0pCisgICAgICA7OworICBlc2FjCitdKQorIyBwcm9ndGVzdC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEyKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisKKyMgU2VhcmNoIHBhdGggZm9yIGEgcHJvZ3JhbSB3aGljaCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuCisKK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKK2RubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKK0FDX0RFRlVOKFtBTV9QQVRIX1BST0dfV0lUSF9URVNUXSwKK1sKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQorQUNfQ0FDSEVfVkFMKGFjX2N2X3BhdGhfJDEsCitbY2FzZSAiWyRdJDEiIGluCisgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGlmIFskM107IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCitkbmwgSWYgbm8gNHRoIGFyZyBpcyBnaXZlbiwgbGVhdmUgdGhlIGNhY2hlIHZhcmlhYmxlIHVuc2V0LAorZG5sIHNvIEFDX1BBVEhfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCitpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorXSlkbmwKKyAgICA7OworZXNhY10pZG5sCiskMT0iJGFjX2N2X3BhdGhfJDEiCitpZiB0ZXN0IGlmZWxzZShbJDRdLCAsIFstbiAiWyRdJDEiXSwgWyJbJF0kMSIgIT0gIiQ0Il0pOyB0aGVuCisgIEFDX01TR19SRVNVTFQoWyRdJDEpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorQUNfU1VCU1QoJDEpZG5sCitdKQorIyBzaWduZWQubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMC40MCkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbYmhfQ19TSUdORURdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25lZF0sIGJoX2N2X2Nfc2lnbmVkLAorICAgW0FDX1RSWV9DT01QSUxFKCwgW3NpZ25lZCBjaGFyIHg7XSwgYmhfY3ZfY19zaWduZWQ9eWVzLCBiaF9jdl9jX3NpZ25lZD1ubyldKQorICBpZiB0ZXN0ICRiaF9jdl9jX3NpZ25lZCA9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FKHNpZ25lZCwgLAorICAgICAgICAgICAgICBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBDIGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGtleXdvcmQuXSkKKyAgZmkKK10pCisjIHNpemVfbWF4Lm00IHNlcmlhbCAyCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtnbF9TSVpFX01BWF0sCitbCisgIEFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCisgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgU0laRV9NQVhdKQorICByZXN1bHQ9CisgIEFDX0VHUkVQX0NQUChbRm91bmQgaXRdLCBbCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgU0laRV9NQVgKK0ZvdW5kIGl0CisjZW5kaWYKK10sIHJlc3VsdD15ZXMpCisgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisgICAgZG5sIERlZmluZSBpdCBvdXJzZWx2ZXMuIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHR5cGUgJ3NpemVfdCcgaXMgbm90IHdpZGVyCisgICAgZG5sIHRoYW4gdGhlIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnLgorICAgIGRubCBUaGUgX0FDX0NPTVBVVEVfSU5UIG1hY3JvIHdvcmtzIHVwIHRvIExPTkdfTUFYLCBzaW5jZSBpdCB1c2VzICdleHByJywKKyAgICBkbmwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byB3b3JrIGZyb20gTE9OR19NSU4gdG8gTE9OR19NQVguCisgICAgX0FDX0NPTVBVVEVfSU5UKFt+KHNpemVfdCkwIC8gMTBdLCByZXNfaGksCisgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorICAgIF9BQ19DT01QVVRFX0lOVChbfihzaXplX3QpMCAlIDEwXSwgcmVzX2xvLAorICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKyAgICBfQUNfQ09NUFVURV9JTlQoW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLCBmaXRzX2luX3VpbnQsCisgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorICAgIGlmIHRlc3QgIiRmaXRzX2luX3VpbnQiID0gMTsgdGhlbgorICAgICAgZG5sIEV2ZW4gdGhvdWdoIFNJWkVfTUFYIGZpdHMgaW4gYW4gdW5zaWduZWQgaW50LCBpdCBtdXN0IGJlIG9mIHR5cGUKKyAgICAgIGRubCAndW5zaWduZWQgbG9uZycgaWYgdGhlIHR5cGUgJ3NpemVfdCcgaXMgdGhlIHNhbWUgYXMgJ3Vuc2lnbmVkIGxvbmcnLgorICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIGZvbzsKKyAgICAgICAgXSwgW10sIGZpdHNfaW5fdWludD0wKQorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJHJlc3VsdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRmaXRzX2luX3VpbnQiID0gMTsgdGhlbgorICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0PSIkcmVzX2hpJHJlc19sbyJVTAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBkbmwgU2hvdWxkbid0IGhhcHBlbiwgYnV0IHdobyBrbm93cy4uLgorICAgICAgcmVzdWx0PSd+KHNpemVfdCkwJworICAgIGZpCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyRyZXN1bHRdKQorICBpZiB0ZXN0ICIkcmVzdWx0IiAhPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1NJWkVfTUFYXSwgWyRyZXN1bHRdLAorICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisgIGZpCitdKQorIyBzdGRpbnRfaC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEyKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKworIyBEZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggaWYgPHN0ZGludC5oPiBleGlzdHMsCisjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorCitBQ19ERUZVTihbam1fQUNfSEVBREVSX1NURElOVF9IXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQuaF0sIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCwKKyAgW0FDX1RSWV9DT01QSUxFKAorICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+XSwKKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisgICAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPW5vKV0pCisgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKyAgICAgIFtEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisgIGZpCitdKQorIyB1aW50bWF4X3QubTQgc2VyaWFsIDcgKGdldHRleHQtMC4xMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCitkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKK0FDX1BSRVJFUSgyLjEzKQorCisjIERlZmluZSB1aW50bWF4X3QgdG8gJ3Vuc2lnbmVkIGxvbmcnIG9yICd1bnNpZ25lZCBsb25nIGxvbmcnCisjIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uCisKK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCitbCisgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICAgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS5dKQorICBlbHNlCisgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3VpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorICBmaQorXSkKKyMgdWxvbmdsb25nLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORyBpZiAndW5zaWduZWQgbG9uZyBsb25nJyB3b3Jrcy4KKworQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMVVMTDsgaW50IGkgPSA2MztdLAorICAgIFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7CisgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPW5vKV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Vuc2lnbmVkIGxvbmcgbG9uZycgdHlwZS5dKQorICBmaQorXSkKKyMgd2NoYXJfdC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDxzdGRkZWYuaD4gaGFzIHRoZSAnd2NoYXJfdCcgdHlwZS4KK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKworQUNfREVGVU4oW2d0X1RZUEVfV0NIQVJfVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7XSwgLAorICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9XQ0hBUl9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2NoYXJfdCcgdHlwZS5dKQorICBmaQorXSkKKyMgd2ludF90Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCitkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDx3Y2hhci5oPiBoYXMgdGhlICd3aW50X3QnIHR5cGUuCitkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisKK0FDX0RFRlVOKFtndF9UWVBFX1dJTlRfVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2ludF90XSwgZ3RfY3ZfY193aW50X3QsCisgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8d2NoYXIuaD4KKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisgICAgICAgZ3RfY3ZfY193aW50X3Q9eWVzLCBndF9jdl9jX3dpbnRfdD1ubyldKQorICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorICBmaQorXSkKKyMgeHNpemUubTQgc2VyaWFsIDIKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK0FDX0RFRlVOKFtnbF9YU0laRV0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c2l6ZS5oLgorICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisgIEFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCitdKQorCisjIGZyb20gaHR0cDovL2F1dG9jb25mLWFyY2hpdmUuY3J5cC50by9heF90bHMuaHRtbAorIworIyBUaGlzIHdhcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0CisjIG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUKKyMgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcKKyMgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2Ugd2hlbiB1c2luZyBvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzLCBldmVuIHRob3VnaAorIyBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0CisjIGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKyMKKyMgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGFwcGxpZXMgdG8gdmVyc2lvbnMgb2YgdGhlCisjIEF1dG9jb25mIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBNYWNybyBBcmNoaXZlLiBXaGVuIHlvdSBtYWtlCisjIGFuZCBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkKKyMgZXh0ZW5kIHRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyIG1vZGlmaWVkCisjIHZlcnNpb24gYXMgd2VsbC4KKyMKK0FDX0RFRlVOKFtBWF9UTFNdLCBbCisgIEFDX01TR19DSEVDS0lORyhmb3IgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgY2xhc3MpCisgIEFDX0NBQ0hFX1ZBTChhY19jdl90bHMsIFsKKyAgICBheF90bHNfa2V5d29yZHM9Il9fdGhyZWFkIF9fZGVjbHNwZWModGhyZWFkKSBub25lIgorICAgIGZvciBheF90bHNfa2V5d29yZCBpbiAkYXhfdGxzX2tleXdvcmRzOyBkbworICAgICAgIGNhc2UgJGF4X3Rsc19rZXl3b3JkIGluCisgICAgICAgICAgbm9uZSkgYWNfY3ZfdGxzPW5vbmUgOyBicmVhayA7OworICAgICAgICAgICopCisgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoCisgICAgICAgICAgICAgICAgWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgICAgICAgICAgZm9vKHZvaWQpIHsKKyAgICAgICAgICAgICAgICAgc3RhdGljIF0gJGF4X3Rsc19rZXl3b3JkIFsgaW50IGJhcjsKKyAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICAgICBbYWNfY3ZfdGxzPSRheF90bHNfa2V5d29yZCA7IGJyZWFrXSwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfdGxzPW5vbmUKKyAgICAgICAgICAgICApCisgICAgICAgICAgZXNhYworICAgIGRvbmUKK10pCisKKyAgaWYgdGVzdCAiJGFjX2N2X3RscyIgIT0gIm5vbmUiOyB0aGVuCisgICAgZG5sIEFDX0RFRklORShbVExTXSwgW10sIFtJZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYSBUTFMgc3RvcmFnZSBjbGFzcyBkZWZpbmUgaXQgdG8gdGhhdCBoZXJlXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1RMU10sICRhY19jdl90bHMsIFtJZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYSBUTFMgc3RvcmFnZSBjbGFzcyBkZWZpbmUgaXQgdG8gdGhhdCBoZXJlXSkKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdGxzKQorXSkKKworIyBFeGNlcnB0ZWQgZnJvbSBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcKKyMKKyMgQ29weXJpZ2h0IMOCwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJRyhfUEFUSCk/JF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3BhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSlkbmwKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKyAgICAgICAgQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgICAgICBfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb25dKQorICAgICAgICBpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICAgICAgICAgIFBLR19DT05GSUc9IiIKKyAgICAgICAgZmkKKyAgICAgICAgICAgICAgIAorZmlbXWRubAorXSkjIFBLR19QUk9HX1BLR19DT05GSUcKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICAgaHR0cDovL3d3dy5ub25nbnUub3JnL2F1dG9jb25mLWFyY2hpdmUvY2hlY2tfZ251X21ha2UuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBDSEVDS19HTlVfTUFLRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBHTlUgdmVyc2lvbiBvZiBtYWtlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyMgICBtYWtlZmlsZSB2YXJpYWJsZSBgaWZHTlVtYWtlJyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgb3RoZXJ3aXNlIGl0CisjICAgaXMgc2V0IHRvICIjIi4gVGhpcyBpcyB1c2VmdWwgZm9yIGluY2x1ZGluZyBhIHNwZWNpYWwgZmVhdHVyZXMgaW4gYQorIyAgIE1ha2VmaWxlLCB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSBvdGhlciB2ZXJzaW9ucyBvZiBtYWtlLiBUaGUKKyMgICB2YXJpYWJsZSBfY3ZfZ251X21ha2VfY29tbWFuZCBpcyBzZXQgdG8gdGhlIGNvbW1hbmQgdG8gaW52b2tlIEdOVSBtYWtlCisjICAgaWYgaXQgZXhpc3RzLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyMKKyMgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKKyMKKyMgICBNYWtlZmlsZS5pbiBtaWdodCBjb250YWluOgorIworIyAgICAgICAjIEEgZmFpbHNhZmUgd2F5IG9mIHB1dHRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgaW50byBhIG1ha2VmaWxlCisjICAgICAgICQoREVQRU5EKToKKyMgICAgICAgICAgICAgICAkKENDKSAtTU0gJChzcmNkaXIpLyouYyA+ICQoREVQRU5EKQorIworIyAgICAgICBAaWZHTlVtYWtlQCBpZmVxICgkKERFUEVORCksJCh3aWxkY2FyZCAkKERFUEVORCkpKQorIyAgICAgICBAaWZHTlVtYWtlQCBpbmNsdWRlICQoREVQRU5EKQorIyAgICAgICBAaWZHTlVtYWtlQCBlbmRpZgorIworIyAgIFRoZW4gY29uZmlndXJlLmluIHdvdWxkIG5vcm1hbGx5IGNvbnRhaW46CisjCisjICAgICAgIENIRUNLX0dOVV9NQUtFKCkKKyMgICAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorIworIyAgIFRoZW4gcGVyaGFwcyB0byBjYXVzZSBnbnUgbWFrZSB0byBvdmVycmlkZSBhbnkgb3RoZXIgbWFrZSwgd2UgY291bGQgZG8KKyMgICBzb21ldGhpbmcgbGlrZSB0aGlzIChub3RlIHRoYXQgR05VIG1ha2UgYWx3YXlzIGxvb2tzIGZvciBHTlVtYWtlZmlsZQorIyAgIGZpcnN0KToKKyMKKyMgICAgICAgaWYgICEgdGVzdCB4JF9jdl9nbnVfbWFrZV9jb21tYW5kID0geCA7IHRoZW4KKyMgICAgICAgICAgICAgICBtdiBNYWtlZmlsZSBHTlVtYWtlZmlsZQorIyAgICAgICAgICAgICAgIGVjaG8gLkRFRkFVTFQ6ID4gTWFrZWZpbGUgOworIyAgICAgICAgICAgICAgIGVjaG8gXCAgJF9jdl9nbnVfbWFrZV9jb21tYW5kIFwkQCA+PiBNYWtlZmlsZTsKKyMgICAgICAgZmkKKyMKKyMgICBUaGVuLCBpZiBhbnkgKHdlbGwgYWxtb3N0IGFueSkgb3RoZXIgbWFrZSBpcyBjYWxsZWQsIGFuZCBHTlUgbWFrZSBhbHNvCisjICAgZXhpc3RzLCB0aGVuIHRoZSBvdGhlciBtYWtlIHdyYXBzIHRoZSBHTlUgbWFrZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBKb2huIERhcnJpbmd0b24gPGouZGFycmluZ3RvbkBlbHZpcy5tdXJkb2NoLmVkdS5hdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKyMKKyMgTm90ZTogTW9kaWZpZWQgYnkgVGVkIFRzJ28gdG8gYWRkIEBpZk5vdEdOVU1ha2VACisKK0FDX0RFRlVOKAorICAgICAgICBbQ0hFQ0tfR05VX01BS0VdLCBbIEFDX0NBQ0hFX0NIRUNLKCBmb3IgR05VIG1ha2UsX2N2X2dudV9tYWtlX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworZG5sIFNlYXJjaCBhbGwgdGhlIGNvbW1vbiBuYW1lcyBmb3IgR05VIG1ha2UKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworICAgICAgICApIDsKK2RubCBJZiB0aGVyZSB3YXMgYSBHTlUgdmVyc2lvbiwgdGhlbiBzZXQgQGlmR05VbWFrZUAgdG8gdGhlIGVtcHR5IHN0cmluZywgJyMnIG90aGVyd2lzZQorICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCJOb3QgZm91bmQiKTsKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoaWZHTlVtYWtlKQorICAgICAgICBBQ19TVUJTVChpZk5vdEdOVW1ha2UpCitdICkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9jb25maWcvY29uZmlnLmd1ZXNzIGIvZTJmc3Byb2dzL2NvbmZpZy9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZDY3NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9jb25maWcvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTU2OCBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxMy0xMS0yOScKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKyMKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisjCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgd2l0aCBhIENoYW5nZUxvZyBlbnRyeSB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnLgorCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwk7OworZXNhYworCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpCaXRyaWc6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tYml0cmlnJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKwlleGl0Y29kZT0kPworCXRyYXAgJycgMAorCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKwllY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKwkJICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorCQkgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisJCSAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorCQkgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKwkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisJCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKwkJCSAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworCQkJICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKwkJCWVzYWMgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKworCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQorCQkjaW5jbHVkZSA8c3RkbGliLmg+CisJCSNpbmNsdWRlIDx1bmlzdGQuaD4KKworCQlpbnQgbWFpbiAoKQorCQl7CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKwkJI2VuZGlmCisJCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisJCSAgICBzd2l0Y2ggKGNwdSkKKwkJCXsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMl8wOgorCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisJCQkgICAgc3dpdGNoIChiaXRzKQorCQkJCXsKKwkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisJCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworCQkJCX0gYnJlYWs7CisJCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisJCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCSNlbmRpZgorCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQl9CisJCSAgICBleGl0ICgwKTsKKwkJfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisJRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKwllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwljYXNlICR7VU5BTUVfUFJPQ0VTU09SfSBpbgorCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXNjQqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3NjQKKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpNU1lTKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc3lzCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKwkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi0ke0xJQkN9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhYXJjaDY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFhcmNoNjRfYmU6TGludXg6KjoqKQorCVVOQU1FX01BQ0hJTkU9YWFyY2g2NF9iZQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKwllc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFyYzpMaW51eDoqOiogfCBhcmNlYjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZWxzZQorCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorCSAgICB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpCisJICAgIGVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgorCSAgICBmaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGhleGFnb246TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CisJOzsKKyAgICBvcjFrOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NGxlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGNsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisJIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisJCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgeDg2XzY0OkhhaWt1Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KKwkgICAgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKKwlmaQorCWlmIHRlc3QgYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLi4qLy8nYCAtbGUgMTAgOyB0aGVuCisJICAgIGlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQl0aGVuCisJCSAgICBjYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkJCWkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKwkJCXBvd2VycGMpIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjNjQgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkgICAgZmkKKwllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KKwkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2Mgb24gT1MgWCAxMC45LCBhcyBpdCBzaGlwcyB3aXRoIGEgc3R1YgorCSAgICAjIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydCBwcm9tcHRpbmcgdG8gaW5zdGFsbAorCSAgICAjIGRldmVsb3BlciB0b29scy4gIEFueSBzeXN0ZW0gcnVubmluZyBNYWMgT1MgWCAxMC43IG9yCisJICAgICMgbGF0ZXIgKERhcndpbiAxMSBhbmQgbGF0ZXIpIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA2NC1iaXQKKwkgICAgIyBwcm9jZXNzb3IuIFRoaXMgaXMgbm90IHRydWUgb2YgdGhlIEFSTSB2ZXJzaW9uIG9mIERhcndpbgorCSAgICAjIHRoYXQgQXBwbGUgdXNlcyBpbiBwb3J0YWJsZSBkZXZpY2VzLgorCSAgICBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0CisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKK2VzYWMKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorCSI0IgorI2Vsc2UKKwkiIgorI2VuZGlmCisJKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbmZpZy9jb25maWcucnBhdGggYi9lMmZzcHJvZ3MvY29uZmlnL2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZWFkNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbmZpZy9jb25maWcucnBhdGgKQEAgLTAsMCArMSw1MTMgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyMKKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjICAgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgICB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorIworIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNJFZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK3NobGliZXh0PQorCitob3N0PSIkMSIKK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCit3bD0KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHdsPSctV2wsJworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGxpbnV4KikKKyAgICAgIGVjaG8gJ19fSU5URUxfQ09NUElMRVInID4gY29uZnRlc3QuJGFjX2V4dAorICAgICAgaWYgJENDIC1FIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCB8IGdyZXAgX19JTlRFTF9DT01QSUxFUiA+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJbnRlbCBpY2MKKyAgICAgICAgd2w9Jy1Rb3B0aW9uLGxkLCcKKyAgICAgIGZpCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIDs7CisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c25pOyB0aGVuCisgICAgICAgIHdsPSctTEQnCisgICAgICBlbHNlCisgICAgICAgIHdsPSctV2wsJworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7Citlc2FjCisKK2xkX3NobGlicz15ZXMKK2lmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICAgIyBPbiBBSVgsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4gdXNlCisgICAgICAjIHRoZW0uCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBlZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBzb2xhcmlzKiB8IHN5c3Y1KikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZWdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZWdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGVncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0geWVzOyB0aGVuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeDQqIHwgYWl4NSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBlbHNlCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgICAgICAgICBmaQorICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJub2xpYnBhdGggJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZDIqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwgYnV0IGFzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvcGVuYnNkKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgZWxzZQorICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBvc2YzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvc2Y0KiB8IG9zZjUqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorICAgICAgICAjIEJvdGggY2MgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgc2NvMy4ydjUqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIHN5c3Y0KQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c25vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICBlbHNlCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjIE1vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y1KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NC4ydXcyKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgICAgIDs7CisgICAgc3lzdjV1dzcqIHwgdW5peHdhcmU3KikKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIGFpeDQqIHwgYWl4NSopCisgICAgc2hsaWJleHQ9c28KKyAgICA7OworICBhbWlnYW9zKikKKyAgICBzaGxpYmV4dD1peGxpYnJhcnkKKyAgICA7OworICBiZW9zKikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIGJzZGk0KikKKyAgICBzaGxpYmV4dD1zbworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgICAgICB5ZXMsY3lnd2luKikKKyAgICAgICAgc2hsaWJleHQ9ZGxsLmEKKyAgICAgICAgOzsKKyAgICAgIHllcyxtaW5ndyopCisgICAgICAgIHNobGliZXh0PWRsbAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMvOy8gL2ciYAorICAgICAgICA7OworICAgICAgeWVzLHB3MzIqKQorICAgICAgICBzaGxpYmV4dD1kbGwKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNobGliZXh0PWRsbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNobGliZXh0PWR5bGliCisgICAgOzsKKyAgZnJlZWJzZDEqKQorICAgIDs7CisgIGZyZWVic2QqKQorICAgIHNobGliZXh0PXNvCisgICAgOzsKKyAgZ251KikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIHNobGliZXh0PXNsCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqKQorICAgIHNobGliZXh0PXNvCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSopCisgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgJExEIGluCisgICAgICAgICAgKi0zMnwqIi0zMiAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgICAgKi1uMzJ8KiItbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworICAgICAgICAgICotNjR8KiItNjQgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgICAgOzsKKyAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgICA7OworICBsaW51eC1nbnUqKQorICAgIHNobGliZXh0PXNvCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIG5ld3NvczYpCisgICAgc2hsaWJleHQ9c28KKyAgICA7OworICBvcGVuYnNkKikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIG9zMiopCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzaGxpYmV4dD1kbGwKKyAgICA7OworICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgc2hsaWJleHQ9c28KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIHNvbGFyaXMqKQorICAgIHNobGliZXh0PXNvCisgICAgOzsKKyAgc3Vub3M0KikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKyAgICBzaGxpYmV4dD1zbworICAgIGNhc2UgIiRob3N0X3ZlbmRvciIgaW4KKyAgICAgIG1vdG9yb2xhKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICB1dHM0KikKKyAgICBzaGxpYmV4dD1zbworICAgIDs7CisgIGRndXgqKQorICAgIHNobGliZXh0PXNvCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgIHNobGliZXh0PXNvCisgICAgZmkKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICJYJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiWCRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGVzY2FwZWRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGVzY2FwZWRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCisKK0VPRgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbmZpZy9jb25maWcuc3ViIGIvZTJmc3Byb2dzL2NvbmZpZy9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxY2I0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29uZmlnL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzkzIEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMTMtMTAtMDEnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAorIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHdpdGggYSBDaGFuZ2VMb2cgZW50cnkgdG8gY29uZmlnLXBhdGNoZXNAZ251Lm9yZy4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKyAgbGludXgtbXVzbCogfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgIGFuZHJvaWQtbGludXgpCisgICAgb3M9LWxpbnV4LWFuZHJvaWQKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYC11bmtub3duCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUqKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1ibHVlZ2VuZSopCisJCW9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c3JkYikKKwkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqMTc4KQorCQlvcz0tbHlueG9zMTc4CisJCTs7CisJLWx5bngqNSkKKwkJb3M9LWx5bnhvczUKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFhcmNoNjQgfCBhYXJjaDY0X2JlIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFyY2ViIFwKKwl8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzItOF0gfCBhcm12WzMtOF1bbGJdIHwgYXJtdjdbYXJtXSBcCisJfCBhdnIgfCBhdnIzMiBcCisJfCBiZTMyIHwgYmU2NCBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGM4MDUxIHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZXBpcGhhbnkgXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGhleGFnb24gXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IGsxb20gXAorCXwgbGUzMiB8IGxlNjQgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtaWNyb2JsYXplZWwgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHNyNTkwMCB8IG1pcHNyNTkwMGVsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgfCBuaW9zMmViIHwgbmlvczJlbCBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9wZW44IFwKKwl8IG9yMWsgfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAorCXwgcHlyYW1pZCBcCisJfCBybDc4IHwgcnggXAorCXwgc2NvcmUgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoNjQgfCBzaDY0bGUgXAorCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKKwl8IHNwdSBcCisJfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAorCXwgdWJpY29tMzIgXAorCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrIHwgejgwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCTs7CisJYzU1eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQk7OworCWM2eCkKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IHwgbnZwdHggfCBwaWNvY2hpcCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCXN0cm9uZ2FybSB8IHRodW1iIHwgeHNjYWxlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCTs7CisJeGdhdGUpCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCXhzY2FsZWViKQorCQliYXNpY19tYWNoaW5lPWFybWViLXVua25vd24KKwkJOzsKKworCXhzY2FsZWVsKQorCQliYXNpY19tYWNoaW5lPWFybWVsLXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhYXJjaDY0LSogfCBhYXJjaDY0X2JlLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiB8IGFyY2ViLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmUzMi0qIHwgYmU2NC0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKKwl8IGM4MDUxLSogfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaGV4YWdvbi0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBrMW9tLSogXAorCXwgbGUzMi0qIHwgbGU2NC0qIFwKKwl8IGxtMzItKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiBcCisJfCBtaWNyb2JsYXplLSogfCBtaWNyb2JsYXplZWwtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzcjU5MDAtKiB8IG1pcHNyNTkwMGVsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogfCBuaW9zMmViLSogfCBuaW9zMmVsLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcGVuOC0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcmw3OC0qIHwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdjEtKiB8IHN4Py0qIFwKKwl8IHRhaG9lLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZSotKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdjg1MGUxLSogfCB2ODUwZXMtKiB8IHY4NTBlMi0qIHwgdjg1MGUydjMtKiBcCisJfCB2YXgtKiBcCisJfCB3ZTMyay0qIFwKKwl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAorCXwgeW1wLSogXAorCXwgejhrLSogfCB6ODAtKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzU0eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM1NXgtKikKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwljNngtKikKKwkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYgfCBjcjE2LSopCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCisJCTs7CisJbWFnbnVtIHwgbTMyMzApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCisJCW9zPS1zeXN2CisJCTs7CisJbWVybGluKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKKwkJb3M9LXN5c3YKKwkJOzsKKwltaWNyb2JsYXplKikKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OworCW1pbmd3NjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCW9zPS1taW5ndzY0CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbXN5cworCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcyB8IHJkb3M2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyZG9zMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKKwkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAorCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAorCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKwkgICAgICB8IC1iaXRyaWcqIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJYzgwNTEtKikKKwkJb3M9LWVsZgorCQk7OworCWhleGFnb24tKikKKwkJb3M9LWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3Ixay0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbmZpZy9pbnN0YWxsLXNoIGIvZTJmc3Byb2dzL2NvbmZpZy9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ZmM5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29uZmlnL2luc3RhbGwtc2gKQEAgLTAsMCArMSwyMzggQEAKKyMhIC9iaW4vc2gKKyMKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisjIFRoaXMgY29tZXMgZnJvbSBYMTFSNS4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisjCisKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9IiR7RE9JVFBST0ctfSIKKworCisjIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KKworbXZwcm9nPSIke01WUFJPRy1tdn0iCitjcHByb2c9IiR7Q1BQUk9HLWNwfSIKK2NobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgorY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCitjaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKK3N0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igorcm1wcm9nPSIke1JNUFJPRy1ybX0iCitta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKKwordHJhbmZvcm1iYXNlbmFtZT0iIgordHJhbnNmb3JtX2FyZz0iIgoraW5zdGNtZD0iJG12cHJvZyIKK2NobW9kY21kPSIkY2htb2Rwcm9nIDA3NTUiCitjaG93bmNtZD0iIgorY2hncnBjbWQ9IiIKK3N0cmlwY21kPSIiCitybWNtZD0iJHJtcHJvZyAtZiIKK212Y21kPSIkbXZwcm9nIgorc3JjPSIiCitkc3Q9IiIKK2Rpcl9hcmc9IiIKKword2hpbGUgWyB4IiQxIiAhPSB4IF07IGRvCisgICAgY2FzZSAkMSBpbgorCS1jKSBpbnN0Y21kPSIkY3Bwcm9nIgorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZCkgZGlyX2FyZz10cnVlCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1zKSBzdHJpcGNtZD0iJHN0cmlwcHJvZyIKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLXQ9KikgdHJhbnNmb3JtYXJnPWBlY2hvICQxIHwgc2VkICdzLy10PS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWI9KikgdHJhbnNmb3JtYmFzZW5hbWU9YGVjaG8gJDEgfCBzZWQgJ3MvLWI9Ly8nYAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwkqKSAgaWYgWyB4IiRzcmMiID0geCBdCisJICAgIHRoZW4KKwkJc3JjPSQxCisJICAgIGVsc2UKKwkJIyB0aGlzIGNvbG9uIGlzIHRvIHdvcmsgYXJvdW5kIGEgMzg2QlNEIC9iaW4vc2ggYnVnCisJCToKKwkJZHN0PSQxCisJICAgIGZpCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgeCIkc3JjIiA9IHggXQordGhlbgorCWVjaG8gImluc3RhbGw6CW5vIGlucHV0IGZpbGUgc3BlY2lmaWVkIgorCWV4aXQgMQorZWxzZQorCXRydWUKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCisJZHN0PSRzcmMKKwlzcmM9IiIKKwkKKwlpZiBbIC1kICRkc3QgXTsgdGhlbgorCQlpbnN0Y21kPToKKwllbHNlCisJCWluc3RjbWQ9bWtkaXIKKwlmaQorZWxzZQorCisjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQgCisjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKworCWlmIFsgLWYgJHNyYyAtbyAtZCAkc3JjIF0KKwl0aGVuCisJCXRydWUKKwllbHNlCisJCWVjaG8gImluc3RhbGw6ICAkc3JjIGRvZXMgbm90IGV4aXN0IgorCQlleGl0IDEKKwlmaQorCQorCWlmIFsgeCIkZHN0IiA9IHggXQorCXRoZW4KKwkJZWNobyAiaW5zdGFsbDoJbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkIgorCQlleGl0IDEKKwllbHNlCisJCXRydWUKKwlmaQorCisjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQorIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCisKKwlpZiBbIC1kICRkc3QgXQorCXRoZW4KKwkJZHN0PSIkZHN0Ii9gYmFzZW5hbWUgJHNyY2AKKwllbHNlCisJCXRydWUKKwlmaQorZmkKKworIyMgdGhpcyBzZWQgY29tbWFuZCBlbXVsYXRlcyB0aGUgZGlybmFtZSBjb21tYW5kCitkc3RkaXI9YGVjaG8gJGRzdCB8IHNlZCAtZSAncyxbXi9dKiQsLDtzLC8kLCw7cyxeJCwuLCdgCisKKyMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMuCisjICB0aGlzIHBhcnQgaXMgdGFrZW4gZnJvbSBOb2FoIEZyaWVkbWFuJ3MgbWtpbnN0YWxsZGlycyBzY3JpcHQKKworIyBTa2lwIGxvdHMgb2Ygc3RhdCBjYWxscyBpbiB0aGUgdXN1YWwgY2FzZS4KK2lmIFsgISAtZCAiJGRzdGRpciIgXTsgdGhlbgorZGVmYXVsdElGUz0nCQorJworSUZTPSIke0lGUy0ke2RlZmF1bHRJRlN9fSIKKworb0lGUz0iJHtJRlN9IgorIyBTb21lIHNoJ3MgY2FuJ3QgaGFuZGxlIElGUz0vIGZvciBzb21lIHJlYXNvbi4KK0lGUz0nJScKK3NldCAtIGBlY2hvICR7ZHN0ZGlyfSB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAorSUZTPSIke29JRlN9IgorCitwYXRoY29tcD0nJworCit3aGlsZSBbICQjIC1uZSAwIF0gOyBkbworCXBhdGhjb21wPSIke3BhdGhjb21wfSR7MX0iCisJc2hpZnQKKworCWlmIFsgISAtZCAiJHtwYXRoY29tcH0iIF0gOworICAgICAgICB0aGVuCisJCSRta2RpcnByb2cgIiR7cGF0aGNvbXB9IgorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKwlwYXRoY29tcD0iJHtwYXRoY29tcH0vIgorZG9uZQorZmkKKworaWYgWyB4IiRkaXJfYXJnIiAhPSB4IF0KK3RoZW4KKwkkZG9pdCAkaW5zdGNtZCAkZHN0ICYmCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpCitlbHNlCisKKyMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgorCisJaWYgWyB4IiR0cmFuc2Zvcm1hcmciID0geCBdIAorCXRoZW4KKwkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKKwllbHNlCisJCWRzdGZpbGU9YGJhc2VuYW1lICRkc3QgJHRyYW5zZm9ybWJhc2VuYW1lIHwgCisJCQlzZWQgJHRyYW5zZm9ybWFyZ2AkdHJhbnNmb3JtYmFzZW5hbWUKKwlmaQorCisjIGRvbid0IGFsbG93IHRoZSBzZWQgY29tbWFuZCB0byBjb21wbGV0ZWx5IGVsaW1pbmF0ZSB0aGUgZmlsZW5hbWUKKworCWlmIFsgeCIkZHN0ZmlsZSIgPSB4IF0gCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0YAorCWVsc2UKKwkJdHJ1ZQorCWZpCisKKyMgTWFrZSBhIHRlbXAgZmlsZSBuYW1lIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorCisJZHN0dG1wPSRkc3RkaXIvI2luc3QuJCQjCisKKyMgTW92ZSBvciBjb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorCisJJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wICYmCisKKwl0cmFwICJybSAtZiAke2RzdHRtcH0iIDAgJiYKKworIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzCisKKyMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKworCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisKKyMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKworCSRkb2l0ICRybWNtZCAtZiAkZHN0ZGlyLyRkc3RmaWxlICYmCisJJGRvaXQgJG12Y21kICRkc3R0bXAgJGRzdGRpci8kZHN0ZmlsZSAKKworZmkgJiYKKworCitleGl0IDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9jb25maWcvbWtpbnN0YWxsZGlycyBiL2UyZnNwcm9ncy9jb25maWcvbWtpbnN0YWxsZGlycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjU4NTAzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbmZpZy9ta2luc3RhbGxkaXJzCkBAIC0wLDAgKzEsNDAgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4KKworIyAkSWQ6IG1raW5zdGFsbGRpcnMsdiAxLjEzIDE5OTkvMDEvMDUgMDM6MTg6NTUgYmplIEV4cCAkCisKK2VycnN0YXR1cz0wCisKK2ZvciBmaWxlCitkbworICAgc2V0IGZub3JkIGBlY2hvICI6JGZpbGUiIHwgc2VkIC1uZSAncy9eOlwvLyMvO3MvXjovLztzL1wvLyAvZztzL14jL1wvLztwJ2AKKyAgIHNoaWZ0CisKKyAgIHBhdGhjb21wPQorICAgZm9yIGQKKyAgIGRvCisgICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKyAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgIC0qICkgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICAgZXNhYworCisgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgICAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAJICBlcnJzdGF0dXM9JGxhc3RlcnIKKyAgICAgICAgZmkKKyAgICAgZmkKKworICAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKyAgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgbWtpbnN0YWxsZGlycyBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9jb25maWcvcGFyc2UtdHlwZXMuc2ggYi9lMmZzcHJvZ3MvY29uZmlnL3BhcnNlLXR5cGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwNzZmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29uZmlnL3BhcnNlLXR5cGVzLnNoCkBAIC0wLDAgKzEsMTI1IEBACisjIS9iaW4vc2gKKworY2F0ID4gc2VkLnNjcmlwdCA8PCAiRU9GIgorL14jL2QKKy9eJC9kCitzL19fZXh0ZW5zaW9uX18gLy8KK3MvdHlwZWRlZiBcKC4qXCkgX191XChbMS05XSpcKTsvI2RlZmluZSBfX1VcMl9UWVBFREVGIFwxLworcy90eXBlZGVmIFwoLipcKSBfX3NcKFsxLTldKlwpOy8jZGVmaW5lIF9fU1wyX1RZUEVERUYgXDEvCitFT0YKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgIENDPWdjYworZmkKKworaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgICBDUFA9IiRDQyAtRSIKK2ZpCisKKy9iaW4vZWNobyAtbiAiY2hlY2tpbmcgZm9yIF9fdU5OIHR5cGVzLi4uICIKKyMgY2FuJ3QgY2hlY2sgWyAtZiAvdXNyL2luY2x1ZGUvYXNtL3R5cGVzLmggXSBkaXJlY3RseSwgc2luY2UKKyMgdGhlIGluY2x1ZGUgcGF0aCBtaWdodCBiZSBkaWZmZXJlbnQgaWYgY3Jvc3MtY29tcGlsaW5nCitpZiBlY2hvICcjaW5jbHVkZSA8YXNtL3R5cGVzLmg+JyB8ICRDUFAgLSAyPiBwYXJzZS10eXBlcy5sb2cgfCBcCisJc2VkIC1mIHNlZC5zY3JpcHQgfCBncmVwICdeIycgPiBhc21fdHlwZXMuaDsgdGhlbgorCWVjaG8gInVzaW5nIDxhc20vdHlwZXMuaD4iCitlbHNlCisJZWNobyAidXNpbmcgZ2VuZXJpYyB0eXBlcyIKK2ZpCisKK3JtIHNlZC5zY3JpcHQKKworY3AgYXNtX3R5cGVzLmggYXNtX3R5cGVzLmMKKworY2F0ID4+IGFzbV90eXBlcy5jIDw8RU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyNpZmRlZiBfX1U4X1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fVThfVFlQRURFRikgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfX1U4X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgMVxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19VOF9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1U4X1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorI2lmZGVmIF9fUzhfVFlQRURFRgorCWlmIChzaXplb2YoX19TOF9UWVBFREVGKSAhPSAxKSB7CisJCXByaW50ZigiU2l6ZW9mKF9TOF9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDFcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fUzhfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19TOF9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKyNpZmRlZiBfX1UxNl9UWVBFREVGCisJaWYgKHNpemVvZihfX1UxNl9UWVBFREVGKSAhPSAyKSB7CisJCXByaW50ZigiU2l6ZW9mKF9fVTE2X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgMlxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19VMTZfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19VMTZfVFlQRURFRiBub3QgZGVmaW5lZAorI2VuZGlmCisjaWZkZWYgX19TMTZfVFlQRURFRgorCWlmIChzaXplb2YoX19TMTZfVFlQRURFRikgIT0gMikgeworCQlwcmludGYoIlNpemVvZihfX1MxNl9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDJcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fUzE2X1RZUEVERUYpKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIF9fUzE2X1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorCisjaWZkZWYgX19VMzJfVFlQRURFRgorCWlmIChzaXplb2YoX19VMzJfVFlQRURFRikgIT0gNCkgeworCQlwcmludGYoIlNpemVvZihfX1UzMl9fVFlQRURFRikgaXMgJWQgc2hvdWxkIGJlIDRcbiIsIAorCQkgICAgICAgKGludCkgc2l6ZW9mKF9fVTMyX1RZUEVERUYpKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIF9fVTMyX1RZUEVERUYgbm90IGRlZmluZWQKKyNlbmRpZgorI2lmZGVmIF9fUzMyX1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fUzMyX1RZUEVERUYpICE9IDQpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19TMzJfX1RZUEVERUYpIGlzICVkIHNob3VsZCBiZSA0XG4iLCAKKwkJICAgICAgIChpbnQpIHNpemVvZihfX1MzMl9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1MzMl9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKworI2lmZGVmIF9fVTY0X1RZUEVERUYKKwlpZiAoc2l6ZW9mKF9fVTY0X1RZUEVERUYpICE9IDgpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19VNjRfX1RZUEVERUYpIGlzICVkIHNob3VsZCBiZSA4XG4iLCAKKwkJICAgICAgIChpbnQpIHNpemVvZihfX1U2NF9UWVBFREVGKSk7CisJCWV4aXQoMSk7CisJfQorI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBfX1U2NF9UWVBFREVGIG5vdCBkZWZpbmVkCisjZW5kaWYKKyNpZmRlZiBfX1M2NF9UWVBFREVGCisJaWYgKHNpemVvZihfX1M2NF9UWVBFREVGKSAhPSA4KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fUzY0X19UWVBFREVGKSBpcyAlZCBzaG91bGQgYmUgOFxuIiwgCisJCSAgICAgICAoaW50KSBzaXplb2YoX19TNjRfVFlQRURFRikpOworCQlleGl0KDEpOworCX0KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI3dhcm5pbmcgX19TNjRfVFlQRURFRiBub3QgZGVmaW5lZAorI2VuZGlmCisJcmV0dXJuIDA7Cit9CitFT0YKKworJHtCVUlMRF9DQy0ke0NDLWdjY319IC1vIGFzbV90eXBlcyBhc21fdHlwZXMuYworaWYgLi9hc21fdHlwZXMKK3RoZW4KKyAgICB0cnVlCitlbHNlCisgICAgZWNobyAiUHJvYmxlbSBkZXRlY3RlZCB3aXRoIGFzbV90eXBlcy5oIgorICAgIGVjaG8gIiIgPiBhc21fdHlwZXMuaAorZmkKK3JtIGFzbV90eXBlcy5jIGFzbV90eXBlcworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvY29uZmlndXJlIGIvZTJmc3Byb2dzL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWVjOGQzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDEyOTExIEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCisgICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KKyAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOworICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorYXNfZm5fZXhpdCAyNTUKKyAgZmkKKyAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQoraWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCit0ZXN0IC14IC8gfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKyMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KK0JBU0hfRU5WPS9kZXYvbnVsbAorRU5WPS9kZXYvbnVsbAorKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCitjYXNlICQtIGluICMgKCgoKAorICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKyAgKnYqICkgYXNfb3B0cz0tdiA7OworICAqeCogKSBhc19vcHRzPS14IDs7CisgICogKSBhc19vcHRzPSA7OworZXNhYworZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKyMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAorIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgorJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgorZXhpdCAyNTUKK2ZpCisKKyAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CisgICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKKyAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCisgIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCisgICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCisgICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgorICBlbHNlCisgICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKKyQwOiBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworJDA6IG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuCiskMDogdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKworIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCithc19mbl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgIHQgbG9vcAorICAgICAgcy8tXG4uKi8vCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KKworICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCisgICMgYWxyZWFkeSBkb25lIHRoYXQsIHNvIGVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gZG8gc28gYWdhaW4gYW5kIGZhbGwKKyAgIyBpbiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBwcmFjdGljZS4KKyAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wUicKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCit0ZXN0IC1uICIkREpESVIiIHx8IGV4ZWMgNzwmMCA8L2Rldi9udWxsCitleGVjIDY+JjEKKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCithY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9Citjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9CitNQUtFRkxBR1M9CisKKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorUEFDS0FHRV9OQU1FPQorUEFDS0FHRV9UQVJOQU1FPQorUEFDS0FHRV9WRVJTSU9OPQorUEFDS0FHRV9TVFJJTkc9CitQQUNLQUdFX0JVR1JFUE9SVD0KK1BBQ0tBR0VfVVJMPQorCithY191bmlxdWVfZmlsZT0idmVyc2lvbi5oIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCithY19oZWFkZXJfbGlzdD0KK2FjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworTElCT0JKUworQlVJTERfTERGTEFHUworQlVJTERfQ0ZMQUdTCitJTkNMVURFUworRE9fVEVTVF9TVUlURQorRVRfRElSCitTU19ESVIKK0xERkxBR19TVEFUSUMKK3Jvb3Rfc3lzY29uZmRpcgorcm9vdF9saWJkaXIKK3Jvb3Rfc2JpbmRpcgorcm9vdF9iaW5kaXIKK3Jvb3RfcHJlZml4CitVTklYX0NNVAorQ1lHV0lOX0NNVAorTElOVVhfQ01UCitVTklfRElGRl9PUFRTCitTRU1fSU5JVF9MSUIKK1NPQ0tFVF9MSUIKK1NJWkVPRl9PRkZfVAorU0laRU9GX0xPTkdfTE9ORworU0laRU9GX0xPTkcKK1NJWkVPRl9JTlQKK1NJWkVPRl9TSE9SVAorQlVJTERfQ0MKK01BS0VJTkZPCitTVFJJUAorQVIKK0xEQ09ORklHCitQRVJMCitTRUQKK0FXSworQ0hNT0QKK1JNCitDUAorTVYKK0xOX1MKK0xOCitpZk5vdEdOVW1ha2UKK2lmR05VbWFrZQorQklOQVJZX1RZUEUKK1BPU1VCCitMVExJQklOVEwKK0xJQklOVEwKK0lOVExMSUJTCitJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWAorSU5UTE9CSlMKK0dFTkNBVAorSU5TVE9CSkVYVAorREFUQURJUk5BTUUKK0NBVE9CSkVYVAorVVNFX0lOQ0xVREVEX0xJQklOVEwKK0JVSUxEX0lOQ0xVREVEX0xJQklOVEwKK0lOVExCSVNPTgorTFRMSUJJQ09OVgorTElCSUNPTlYKK0hBVkVfV1BSSU5URgorSEFWRV9TTlBSSU5URgorSEFWRV9BU1BSSU5URgorSEFWRV9QT1NJWF9QUklOVEYKK0dMSUJDMjEKK0FMTE9DQQorRUdSRVAKK0dSRVAKK1JBTkxJQgorTVNHTUVSR0UKK1hHRVRURVhUCitHTVNHRk1UCitNU0dGTVQKK1VTRV9OTFMKK01LSU5TVEFMTERJUlMKK0lOU1RBTExfREFUQQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfUFJPR1JBTQorU0VUX01BS0UKK1ZFUlNJT04KK1BBQ0tBR0UKK0dFVFRFWFRfUEFDS0FHRQorVVVJRERfQ01UCitFMklOSVRSRF9NQU4KK0UySU5JVFJEX1BST0cKK0ZTQ0tfTUFOCitGU0NLX1BST0cKK0RFRlJBR19DTVQKK1JFU0laRVJfQ01UCitJTUFHRVJfQ01UCitERUJVR0ZTX0NNVAorUVVPVEFfQ01UCitERVBQUk9GSUxFRF9MSUJRVU9UQQorUFJPRklMRURfTElCUVVPVEEKK0RFUFNUQVRJQ19MSUJRVU9UQQorU1RBVElDX0xJQlFVT1RBCitERVBMSUJRVU9UQQorTElCUVVPVEEKK1FVT1RBX01BTl9DT01NRU5UCitCTEtJRF9DTVQKK0RFUFBST0ZJTEVEX0xJQkJMS0lECitQUk9GSUxFRF9MSUJCTEtJRAorREVQU1RBVElDX0xJQkJMS0lECitTVEFUSUNfTElCQkxLSUQKK0RFUExJQkJMS0lECitMSUJCTEtJRAorVVVJRF9DTVQKK0RFUFBST0ZJTEVEX0xJQlVVSUQKK1BST0ZJTEVEX0xJQlVVSUQKK0RFUFNUQVRJQ19MSUJVVUlECitTVEFUSUNfTElCVVVJRAorREVQTElCVVVJRAorTElCVVVJRAorUEtHX0NPTkZJRworVEVTVF9JT19DTVQKK1BSSVZBVEVfTElCU19DTVQKK0xERkxBR19EWU5BTUlDCitQUk9GSUxFRF9MSUJfRVhUCitTVEFUSUNfTElCX0VYVAorTElCX0VYVAorQ0hFQ0tFUl9DTVQKK1BST0ZJTEVfQ01UCitCU0RMSUJfQ01UCitFTEZfQ01UCitIVFJFRV9DTVQKK1EKK0VTCitFCitMSU5LX0JVSUxEX0ZMQUdTCitTWU1MSU5LX1JFTEFUSVZFCitMSU5LX0lOU1RBTExfRkxBR1MKK01BSU5UQUlORVJfQ01UCitDUFAKK1JEWU5BTUlDCitETE9QRU5fTElCCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK0UyRlNQUk9HU19QS0dWRVIKK0UyRlNQUk9HU19WRVJTSU9OCitFMkZTUFJPR1NfREFZCitFMkZTUFJPR1NfTU9OVEgKK0UyRlNQUk9HU19ZRUFSCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPSdNQ09ORklHCitNQUtFRklMRV9FTEYKK01BS0VGSUxFX0JTRExJQgorTUFLRUZJTEVfUFJPRklMRQorTUFLRUZJTEVfQ0hFQ0tFUgorTUFLRUZJTEVfTElCUkFSWQorQVNNX1RZUEVTX0hFQURFUgorUFVCTElDX0NPTkZJR19IRUFERVInCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZword2l0aF9kaWV0X2xpYmMKK3dpdGhfY2MKK3dpdGhfY2NvcHRzCit3aXRoX2xkb3B0cword2l0aF9yb290X3ByZWZpeAorZW5hYmxlX21haW50YWluZXJfbW9kZQorZW5hYmxlX3N5bWxpbmtfaW5zdGFsbAorZW5hYmxlX3JlbGF0aXZlX3N5bWxpbmtzCitlbmFibGVfc3ltbGlua19yZWxhdGl2ZV9zeW1saW5rcworZW5hYmxlX3N5bWxpbmtfYnVpbGQKK2VuYWJsZV92ZXJib3NlX21ha2VjbWRzCitlbmFibGVfY29tcHJlc3Npb24KK2VuYWJsZV9odHJlZQorZW5hYmxlX2VsZl9zaGxpYnMKK2VuYWJsZV9ic2Rfc2hsaWJzCitlbmFibGVfcHJvZmlsZQorZW5hYmxlX2NoZWNrZXIKK2VuYWJsZV9qYmRfZGVidWcKK2VuYWJsZV9ibGtpZF9kZWJ1ZworZW5hYmxlX3Rlc3Rpb19kZWJ1ZworZW5hYmxlX2xpYnV1aWQKK2VuYWJsZV9saWJibGtpZAorZW5hYmxlX3F1b3RhCitlbmFibGVfYmFja3RyYWNlCitlbmFibGVfZGVidWdmcworZW5hYmxlX2ltYWdlcgorZW5hYmxlX3Jlc2l6ZXIKK2VuYWJsZV9kZWZyYWcKK2VuYWJsZV9mc2NrCitlbmFibGVfZTJpbml0cmRfaGVscGVyCitlbmFibGVfdGxzCitlbmFibGVfdXVpZGQKK2VuYWJsZV9ubHMKK3dpdGhfZ251X2xkCitlbmFibGVfcnBhdGgKK3dpdGhfbGliaWNvbnZfcHJlZml4Cit3aXRoX2luY2x1ZGVkX2dldHRleHQKK3dpdGhfbGliaW50bF9wcmVmaXgKK3dpdGhfbXVsdGlhcmNoCisnCisgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworaG9zdF9hbGlhcwordGFyZ2V0X2FsaWFzCitDQworQ0ZMQUdTCitMREZMQUdTCitMSUJTCitDUFBGTEFHUworQ1BQCitQS0dfQ09ORklHJworCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0V9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgIDogIiR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259IgorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgorZmkKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIHRoaXMgcGFja2FnZSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgorCitUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCitWQVI9VkFMVUUuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLgorCitEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKworQ29uZmlndXJhdGlvbjoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQorICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKworQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCitcYCRhY19kZWZhdWx0X3ByZWZpeC9iaW4nLCBcYCRhY19kZWZhdWx0X3ByZWZpeC9saWInIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeQorYW4gaW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIFxgJGFjX2RlZmF1bHRfcHJlZml4JyB1c2luZyBcYC0tcHJlZml4JywKK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisKK0ZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgorCitGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL1BBQ0tBR0VdCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCitfQUNFT0YKKworICBjYXQgPDxcX0FDRU9GCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCitfQUNFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisKKyAgY2F0IDw8XF9BQ0VPRgorCitPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIGVuYWJsZSBtYWtlZmlsZSBydWxlcyB1c2VmdWwgZm9yIG1haW50YWluZXJzCisgIC0tZW5hYmxlLXN5bWxpbmstaW5zdGFsbCB1c2Ugc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nIGluc3RlYWQgb2YgaGFyZCBsaW5rcworICAtLWVuYWJsZS1yZWxhdGl2ZS1zeW1saW5rcyB1c2UgcmVsYXRpdmUgc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nCisKKyAgLS1lbmFibGUtc3ltbGluay1idWlsZCAgdXNlIHN5bWxpbmtzIHdoaWxlIGJ1aWxkaW5nIGluc3RlYWQgb2YgaGFyZCBsaW5rcworICAtLWVuYWJsZS12ZXJib3NlLW1ha2VjbWRzIGVuYWJsZSB2ZXJib3NlIG1ha2UgY29tbWFuZCBvdXRwdXQKKyAgLS1lbmFibGUtY29tcHJlc3Npb24JICBlbmFibGUgRVhQRVJJTUVOVEFMIGNvbXByZXNzaW9uIHN1cHBvcnQKKyAgLS1lbmFibGUtaHRyZWUgICAgICAJICBlbmFibGUgRVhQRVJJTUVOVEFMIGh0cmVlIGRpcmVjdG9yeSBzdXBwb3J0CisgIC0tZW5hYmxlLWVsZi1zaGxpYnMJICBzZWxlY3QgRUxGIHNoYXJlZCBsaWJyYXJpZXMKKyAgLS1lbmFibGUtYnNkLXNobGlicwkgIHNlbGVjdCBCU0Qgc2hhcmVkIGxpYnJhcmllcworICAtLWVuYWJsZS1wcm9maWxlCSAgYnVpbGQgcHJvZmlsaW5nIGxpYnJhcmllcworICAtLWVuYWJsZS1jaGVja2VyCSAgYnVpbGQgY2hlY2tlciBsaWJyYXJpZXMKKyAgLS1lbmFibGUtamJkLWRlYnVnICAJICBlbmFibGUgam91cm5hbCBkZWJ1Z2dpbmcKKyAgLS1lbmFibGUtYmxraWQtZGVidWcgICAgZW5hYmxlIGJsa2lkIGRlYnVnZ2luZworICAtLWRpc2FibGUtdGVzdGlvLWRlYnVnICBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIHRlc3QgSS9PIG1hbmFnZXIgZm9yIGRlYnVnZ2luZworICAtLWRpc2FibGUtbGlidXVpZAkgIGRvIG5vdCBidWlsZCBwcml2YXRlIHV1aWQgbGlicmFyeQorICAtLWRpc2FibGUtbGliYmxraWQJICBkbyBub3QgYnVpbGQgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5CisgIC0tZW5hYmxlLXF1b3RhCSAgZW5hYmxlIHF1b3RhIHN1cHBvcnQKKyAgLS1kaXNhYmxlLWJhY2t0cmFjZQkgIGRpc2FibGUgdXNlIGJhY2t0cmFjZQorICAtLWRpc2FibGUtZGVidWdmcyAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBkZWJ1Z2ZzIHByb2dyYW0KKyAgLS1kaXNhYmxlLWltYWdlciAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBlMmltYWdlIHByb2dyYW0KKyAgLS1kaXNhYmxlLXJlc2l6ZXIgICAJICBkaXNhYmxlIHN1cHBvcnQgb2YgZTJyZXNpemUgcHJvZ3JhbQorICAtLWRpc2FibGUtZGVmcmFnICAgCSAgZGlzYWJsZSBzdXBwb3J0IG9mIGU0ZGVmcmFnIHByb2dyYW0KKyAgLS1lbmFibGUtZnNjayAgICAgICAgICAgYnVpbGQgZnNjayB3cmFwcGVyIHByb2dyYW0KKyAgLS1lbmFibGUtZTJpbml0cmQtaGVscGVyIGJ1aWxkIGUyaW5pdHJkLWhlbHBlciBwcm9ncmFtCisgIC0tZGlzYWJsZS10bHMgICAgICAgICAgIGRpc2FibGUgdXNlIG9mIHRocmVhZCBsb2NhbCBzdXBwb3J0CisgIC0tZGlzYWJsZS11dWlkZCAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdGhlIHV1aWQgZGFlbW9uCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRocworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLWRpZXQtbGliYyAgICAgICAgdXNlIGRpZXQgbGliYworICAtLXdpdGgtY2MgICAgICAgICAgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgQ0M9IGluc3RlYWQKKyAgLS13aXRoLWNjb3B0cyAgICAgICAgICAgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIENGTEFHUz0gaW5zdGVhZAorICAtLXdpdGgtbGRvcHRzICAgICAgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgTERGTEFHUz0gaW5zdGVhZAorICAtLXdpdGgtcm9vdC1wcmVmaXg9UFJFRklYIG92ZXJyaWRlIHByZWZpeCB2YXJpYWJsZSBmb3IgZmlsZXMgdG8gYmUgcGxhY2VkIGluIHRoZSByb290CisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCisgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpY29udiBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmUKKyAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYmludGwtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmludGwgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisgIC0td2l0aC1tdWx0aWFyY2g9QVJDSCBzcGVjaWZ5IHRoZSBtdWx0aWFyY2ggdHJpcGxldAorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorCitVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAoraXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgorCitSZXBvcnQgYnVncyB0byB0aGUgcGFja2FnZSBwcm92aWRlci4KK19BQ0VPRgorYWNfc3RhdHVzPSQ/CitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKKyAgICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbHNlCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxfQUNFT0YKK2NvbmZpZ3VyZQorZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCitfQUNFT0YKKyAgZXhpdAorZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSB0ZXN0IC14IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2xpbmsKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfcnVuCisKKyMgYWNfZm5fY19jaGVja190eXBlIExJTkVOTyBUWVBFIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgVFlQRSBleGlzdHMgYWZ0ZXIgaGF2aW5nIGluY2x1ZGVkIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlCisjIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgkMikpCisJIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCgkMikpKQorCSAgICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGV2YWwgIiQzPXllcyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMDsKK3JldHVybiB0ZXN0X2FycmF5IFswXTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyA+PmNvbmZ0ZXN0LnZhbDsgcmVhZCAkMyA8Y29uZnRlc3QudmFsOyBhY19yZXR2YWw9MAorZWxzZQorICBhY19yZXR2YWw9MQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorCisgIGZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBldmFsICIkND1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQ0CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorCisjIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19kZWNsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKyAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiAkYXNfZGVjbF9uYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKyNlbHNlCisgICh2b2lkKSAkYXNfZGVjbF9uYW1lOworI2VuZGlmCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19kZWNsCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgJCAkMCAkQAorCitfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLSAjIworIyMgUGxhdGZvcm0uICMjCisjIyAtLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK19BU1VOQU1FCisKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICB7CisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykKKyAgICBlY2hvCisKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICBlY2hvCisgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgIGRvCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworICAgICAgZXNhYworICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgZG8KKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCisjIyBjb25mZGVmcy5oLiAjIworIyMgLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICB9ID4mNQorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKKworIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgID4kY2FjaGVfZmlsZQorZmkKKworYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3RkbGliLmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB1bmlzdGQuaCIKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN5cy9wYXJhbS5oIgorIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorIyB2YWx1ZS4KK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCisgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKyAgICBzZXQsKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsc2V0KQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICwpOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCisgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisgIGFzX2ZuX2Vycm9yICQ/ICJydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiAiJExJTkVOTyIgNQorZmkKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gY29uZmlnICIkc3JjZGlyIi9jb25maWc7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gY29uZmlnIFwiJHNyY2RpclwiL2NvbmZpZyIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGxpYi9jb25maWcuaCIKKworCitNQ09ORklHPS4vTUNPTkZJRworCitCSU5BUllfVFlQRT1iaW4KK0UyRlNQUk9HU19WRVJTSU9OPWBncmVwIEUyRlNQUk9HU19WRVJTSU9OICR7c3JjZGlyfS92ZXJzaW9uLmggIFwKKwl8IGF3ayAne3ByaW50ICQzfScgfCB0ciBcIiAiICIgfCBhd2sgJ3twcmludCAkMX0nYAorREFURT1gZ3JlcCBFMkZTUFJPR1NfREFURSAke3NyY2Rpcn0vdmVyc2lvbi5oIHwgYXdrICd7cHJpbnQgJDN9JyBcCisJfCB0ciBcIiAiICJgCitFMkZTUFJPR1NfREFZPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQxfSdgCitNT05USD1gZWNobyAkREFURSB8IGF3ayAtRi0gJ3twcmludCAkMn0nYAorWUVBUj1gZWNobyAkREFURSB8IGF3ayAtRi0gJ3twcmludCAkM30nYAorCitpZiBleHByICRZRUFSICI+IiAxOTAwID4gL2Rldi9udWxsIDsgdGhlbgorCUUyRlNQUk9HU19ZRUFSPSRZRUFSCitlbGlmIGV4cHIgJFlFQVIgIj4iIDkwID4vZGV2L251bGwgOyB0aGVuCisJRTJGU1BST0dTX1lFQVI9MTkkWUVBUgorZWxzZQorCUUyRlNQUk9HU19ZRUFSPTIwJFlFQVIKK2ZpCisKK2Nhc2UgJE1PTlRIIGluCitKYW4pCU1PTlRIX05VTT0wMTsgRTJGU1BST0dTX01PTlRIPSJKYW51YXJ5IiA7OworRmViKQlNT05USF9OVU09MDI7IEUyRlNQUk9HU19NT05USD0iRmVicnVhcnkiIDs7CitNYXIpCU1PTlRIX05VTT0wMzsgRTJGU1BST0dTX01PTlRIPSJNYXJjaCIgOzsKK0FwcikJTU9OVEhfTlVNPTA0OyBFMkZTUFJPR1NfTU9OVEg9IkFwcmlsIiA7OworTWF5KQlNT05USF9OVU09MDU7IEUyRlNQUk9HU19NT05USD0iTWF5IiA7OworSnVuKQlNT05USF9OVU09MDY7IEUyRlNQUk9HU19NT05USD0iSnVuZSIgOzsKK0p1bCkJTU9OVEhfTlVNPTA3OyBFMkZTUFJPR1NfTU9OVEg9Ikp1bHkiIDs7CitBdWcpCU1PTlRIX05VTT0wODsgRTJGU1BST0dTX01PTlRIPSJBdWd1c3QiIDs7CitTZXApCU1PTlRIX05VTT0wOTsgRTJGU1BST0dTX01PTlRIPSJTZXB0ZW1iZXIiIDs7CitPY3QpCU1PTlRIX05VTT0xMDsgRTJGU1BST0dTX01PTlRIPSJPY3RvYmVyIiA7OworTm92KQlNT05USF9OVU09MTE7IEUyRlNQUk9HU19NT05USD0iTm92ZW1iZXIiIDs7CitEZWMpCU1PTlRIX05VTT0xMjsgRTJGU1BST0dTX01PTlRIPSJEZWNlbWJlciIgOzsKKyopCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5rbm93biBtb250aCAkTU9OVEg/PyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmtub3duIG1vbnRoICRNT05USD8/IiA+JjI7fSA7OworZXNhYworCitiYXNlX3Zlcj1gZWNobyAkRTJGU1BST0dTX1ZFUlNJT04gfCBcCisJICAgICAgIHNlZCAtZSAncy8tV0lQLy8nIC1lICdzL3ByZS0vLycgLWUgJ3MvLVBMVVMvLydgCisKK2RhdGVfc3BlYz0ke0UyRlNQUk9HU19ZRUFSfS4ke01PTlRIX05VTX0uJHtFMkZTUFJPR1NfREFZfQorCitjYXNlICRFMkZTUFJPR1NfVkVSU0lPTiBpbgorKi1XSVB8cHJlLSopCisJRTJGU1BST0dTX1BLR1ZFUj0iJGJhc2VfdmVyfldJUC0kRTJGU1BST0dTX1lFQVItJE1PTlRIX05VTS0kRTJGU1BST0dTX0RBWSIKKwk7OworKikKKwlFMkZTUFJPR1NfUEtHVkVSPSIkYmFzZV92ZXIiCisJOzsKK2VzYWMKKwordW5zZXQgREFURSBNT05USCBZRUFSIGJhc2VfdmVyIHByZV92ZXJzIGRhdGVfc3BlYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEdlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlMmZzcHJvZ3MgdmVyc2lvbiAkRTJGU1BST0dTX1ZFUlNJT04iID4mNQorJGFzX2VjaG8gIkdlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIGZvciBlMmZzcHJvZ3MgdmVyc2lvbiAkRTJGU1BST0dTX1ZFUlNJT04iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFJlbGVhc2UgZGF0ZSBpcyAke0UyRlNQUk9HU19NT05USH0sICR7RTJGU1BST0dTX1lFQVJ9IiA+JjUKKyRhc19lY2hvICJSZWxlYXNlIGRhdGUgaXMgJHtFMkZTUFJPR1NfTU9OVEh9LCAke0UyRlNQUk9HU19ZRUFSfSIgPiY2OyB9CisKKworCisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCitETE9QRU5fTElCPScnCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CithY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorCitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCitybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgQ0ZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKKwkgQ0ZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9CisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CitzdHJ1Y3Qgc3RhdDsKKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgRExPUEVOX0xJQj0tbGRsCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRExPUEVOIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK1dJVEhfRElFVF9MSUJDPQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRpZXQtbGliYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGlldF9saWJjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kaWV0X2xpYmM7IENDPSJkaWV0IGNjIC1ub3N0ZGluYyIKK1dJVEhfRElFVF9MSUJDPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IENDPSRDQyIgPiY1CiskYXNfZWNobyAiQ0M9JENDIiA+JjY7IH0KK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jYzsgYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1jYyBubyBsb25nZXIgc3VwcG9ydGVkOyB1c2UgQ0M9IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2NvcHRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jY29wdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2Njb3B0czsgYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1jY29wdHMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsgdXNlIENGTEFHUz0gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sZG9wdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xkb3B0cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGRvcHRzOyBhc19mbl9lcnJvciAkPyAiLS13aXRoLWxkb3B0cyBubyBsb25nZXIgc3VwcG9ydGVkOyB1c2UgTERGTEFHUz0gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgUkRZTkFNSUM9Ii1yZHluYW1pYyIKKworZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgc3BlY2lhbCBjb21waWxlciBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWRkaXRpb25hbCBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkR0NDIiA9IHllcwordGhlbgorICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKwlhbHBoYSkJCWFkZGNmbGFncz0iLW1pZWVlIiA7OworICAgIGVzYWMKK2ZpCitpZiB0ZXN0ICJ4JGFkZGNmbGFncyIgIT0geAordGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWRkY2ZsYWdzIiA+JjUKKyRhc19lY2hvICIkYWRkY2ZsYWdzIiA+JjY7IH0KKyAgICBDRkxBR1M9IiRhZGRjZmxhZ3MgJENGTEFHUyIKK2Vsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKG5vbmUpIiA+JjUKKyRhc19lY2hvICIobm9uZSkiID4mNjsgfQorZmkKK0xJQl9FWFQ9LmEKK1NUQVRJQ19MSUJfRVhUPS5hCitQUk9GSUxFRF9MSUJfRVhUPS5hCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcm9vdC1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3Jvb3RfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yb290X3ByZWZpeDsgcm9vdF9wcmVmaXg9JHdpdGh2YWwKK2Vsc2UKKyAgcm9vdF9wcmVmaXg9Tk9ORQorZmkKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWFpbnRhaW5lcl9tb2RlOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlNQUlOVEFJTkVSX0NNVD0jCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBtYWludGFpbmVyIG1vZGUiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBtYWludGFpbmVyIG1vZGUiID4mNjsgfQorZWxzZQorCU1BSU5UQUlORVJfQ01UPQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBtYWludGFpbmVyIG1vZGUiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIG1haW50YWluZXIgbW9kZSIgPiY2OyB9CitmaQorCitlbHNlCisgIE1BSU5UQUlORVJfQ01UPSMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBtYWludGFpbmVyIG1vZGUgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5bWxpbmstaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeW1saW5rX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zeW1saW5rX2luc3RhbGw7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUxJTktfSU5TVEFMTF9GTEFHUz0tZgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY2OyB9CitlbHNlCisJTElOS19JTlNUQUxMX0ZMQUdTPS1zZgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNjsgfQorZmkKKworZWxzZQorICBMSU5LX0lOU1RBTExfRkxBR1M9LWYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBpbnN0YWxsIGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisKK3JlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWxhdGl2ZS1zeW1saW5rcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWxhdGl2ZV9zeW1saW5rcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3JlbGF0aXZlX3N5bWxpbmtzOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlTWU1MSU5LX1JFTEFUSVZFPQorCXJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD15ZXMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNjsgfQorZWxzZQorCVNZTUxJTktfUkVMQVRJVkU9LS1yZWxhdGl2ZQorCXJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD15ZXMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjY7IH0KK2ZpCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3ltbGluay1yZWxhdGl2ZS1zeW1saW5rcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeW1saW5rX3JlbGF0aXZlX3N5bWxpbmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3ltbGlua19yZWxhdGl2ZV9zeW1saW5rczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJU1lNTElOS19SRUxBVElWRT15ZXMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNjsgfQorZWxzZQorCVNZTUxJTktfUkVMQVRJVkU9LS1yZWxhdGl2ZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGwiID4mNjsgfQorZmkKKworZWxzZQorICBpZiB0ZXN0IC16ICIkcmVsYXRpdmVfc3ltbGlua19kZWZpbmVkIgordGhlbgorCVNZTUxJTktfUkVMQVRJVkU9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbCBieSBkZWZhdWx0IiA+JjY7IH0KK2ZpCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN5bWxpbmstYnVpbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3ltbGlua19idWlsZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N5bWxpbmtfYnVpbGQ7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUxJTktfQlVJTERfRkxBR1M9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBzeW1saW5rcyBmb3IgYnVpbGQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBzeW1saW5rcyBmb3IgYnVpbGQiID4mNjsgfQorZWxzZQorCUxJTktfQlVJTERfRkxBR1M9LXMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBzeW1saW5rcyBmb3IgYnVpbGQiID4mNjsgfQorZmkKKworZWxzZQorICBMSU5LX0JVSUxEX0ZMQUdTPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBzeW1saW5rcyBmb3IgYnVpbGQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBidWlsZCBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV92ZXJib3NlX21ha2VjbWRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdmVyYm9zZV9tYWtlY21kczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyB2ZXJib3NlIG1ha2UgY29tbWFuZHMiID4mNjsgfQorCUU9QGVjaG8KKwlFUz1lY2hvCisJUT1ACitlbHNlCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgdmVyYm9zZSBtYWtlIGNvbW1hbmRzIiA+JjY7IH0KKwlFPUBcXCMKKwlFUz1cXCMKKwlRPQorZmkKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kcyIgPiY2OyB9CitFPUBlY2hvCitFUz1lY2hvCitRPUAKKworZmkKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvbXByZXNzaW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvbXByZXNzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY29tcHJlc3Npb247IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQiID4mNjsgfQorZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfQ09NUFJFU1NJT04gMSIgPj5jb25mZGVmcy5oCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIgPiY2OyB9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCIgPiYyO30KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1odHJlZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9odHJlZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2h0cmVlOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlIVFJFRV9DTVQ9IworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydCIgPiY2OyB9CitlbHNlCisJSFRSRUVfQ01UPQorCSRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9IVFJFRSAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnQiID4mNjsgfQorZmkKKworZWxzZQorICBIVFJFRV9DTVQ9CiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfSFRSRUUgMSIgPj5jb25mZGVmcy5oCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydCBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCitFMl9QS0dfQ09ORklHX1NUQVRJQz0tLXN0YXRpYworTERGTEFHX0RZTkFNSUM9CitQUklWQVRFX0xJQlNfQ01UPQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVsZi1zaGxpYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWxmX3NobGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VsZl9zaGxpYnM7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUVMRl9DTVQ9IworCU1BS0VGSUxFX0VMRj0vZGV2L251bGwKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXMiID4mNjsgfQorZWxzZQorCUUyX1BLR19DT05GSUdfU1RBVElDPQorCUVMRl9DTVQ9CisJTUFLRUZJTEVfRUxGPSRzcmNkaXIvbGliL01ha2VmaWxlLmVsZi1saWIKKwljYXNlICIkaG9zdF9vcyIgaW4KKwlzb2xhcmlzMi4qKQorCQlNQUtFRklMRV9FTEY9JHNyY2Rpci9saWIvTWFrZWZpbGUuc29sYXJpcy1saWIKKwk7OworCWVzYWMKKwlCSU5BUllfVFlQRT1lbGZiaW4KKwlMSUJfRVhUPS5zbworCVBSSVZBVEVfTElCU19DTVQ9IworCUxERkxBR19EWU5BTUlDPSctV2wsLXJwYXRoLWxpbmssJCh0b3BfYnVpbGRkaXIpL2xpYicKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgTUFLRUZJTEVfRUxGPS9kZXYvbnVsbAorRUxGX0NNVD0jCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBFTEYgc2hhcmVkIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ic2Qtc2hsaWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2JzZF9zaGxpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ic2Rfc2hsaWJzOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlCU0RMSUJfQ01UPSMKKwlNQUtFRklMRV9CU0RMSUI9L2Rldi9udWxsCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzIiA+JjY7IH0KK2Vsc2UKKwlFMl9QS0dfQ09ORklHX1NUQVRJQz0KKwlCU0RMSUJfQ01UPQorCU1BS0VGSUxFX0JTRExJQj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5ic2QtbGliCisJTElCX0VYVD0uc28KKwljYXNlICIkaG9zdF9vcyIgaW4KKwlkYXJ3aW4qKQorCQlNQUtFRklMRV9CU0RMSUI9JHNyY2Rpci9saWIvTWFrZWZpbGUuZGFyd2luLWxpYgorCQlMSUJfRVhUPS5keWxpYgorCTs7CisJZXNhYworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMiID4mNjsgfQorZmkKKworZWxzZQorICBNQUtFRklMRV9CU0RMSUI9L2Rldi9udWxsCitCU0RMSUJfQ01UPSMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIEJTRCBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXByb2ZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHJvZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3Byb2ZpbGU7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVBST0ZJTEVfQ01UPSMKKwlNQUtFRklMRV9QUk9GSUxFPS9kZXYvbnVsbAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcHJvZmlsaW5nIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHByb2ZpbGluZyBsaWJyYXJpZXMiID4mNjsgfQorZWxzZQorCVBST0ZJTEVfQ01UPQorCU1BS0VGSUxFX1BST0ZJTEU9JHNyY2Rpci9saWIvTWFrZWZpbGUucHJvZmlsZQorCVBST0ZJTEVEX0xJQl9FWFQ9X3AuYQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyBwcm9maWxpbmcgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvICJCdWlsZGluZyBwcm9maWxpbmcgbGlicmFyaWVzIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgUFJPRklMRV9DTVQ9IworTUFLRUZJTEVfUFJPRklMRT0vZGV2L251bGwKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcHJvZmlsaW5nIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcHJvZmlsaW5nIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jaGVja2VyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NoZWNrZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jaGVja2VyOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlDSEVDS0VSX0NNVD0jCisJTUFLRUZJTEVfQ0hFQ0tFUj0vZGV2L251bGwKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGNoZWNrZXIgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgY2hlY2tlciBsaWJyYXJpZXMiID4mNjsgfQorZWxzZQorCUNIRUNLRVJfQ01UPQorCU1BS0VGSUxFX0NIRUNLRVI9JHNyY2Rpci9saWIvTWFrZWZpbGUuY2hlY2tlcgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyBjaGVja2VyIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgY2hlY2tlciBsaWJyYXJpZXMiID4mNjsgfQorZmkKKworZWxzZQorICBDSEVDS0VSX0NNVD0jCitNQUtFRklMRV9DSEVDS0VSPS9kZXYvbnVsbAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBjaGVja2VyIGxpYnJhcmllcyBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgY2hlY2tlciBsaWJyYXJpZXMgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWpiZC1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9qYmRfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9qYmRfZGVidWc7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBqb3VybmFsIGRlYnVnZ2luZyIgPiY2OyB9CitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19KQkRfREVCVUcgMSIgPj5jb25mZGVmcy5oCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGpvdXJuYWwgZGVidWdnaW5nIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBqb3VybmFsIGRlYnVnZ2luZyBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ibGtpZC1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ibGtpZF9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Jsa2lkX2RlYnVnOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY2OyB9CitlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19CTEtJRF9ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBibGtpZCBkZWJ1Z2dpbmciID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGJsa2lkIGRlYnVnZ2luZyIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgYmxraWQgZGVidWdnaW5nIGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBibGtpZCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0aW8tZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVzdGlvX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdGlvX2RlYnVnOworaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgdGVzdGlvIGRlYnVnZ2luZyIgPiY2OyB9CisJVEVTVF9JT19DTVQ9IiMiCitlbHNlCisJVEVTVF9JT19DTVQ9CisJJGFzX2VjaG8gIiNkZWZpbmUgQ09ORklHX1RFU1RJT19ERUJVRyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyB0ZXN0aW8gZGVidWdnaW5nIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmcgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgdGVzdGlvIGRlYnVnZ2luZyBieSBkZWZhdWx0IiA+JjY7IH0KKyRhc19lY2hvICIjZGVmaW5lIENPTkZJR19URVNUSU9fREVCVUcgMSIgPj5jb25mZGVmcy5oCisKK1RFU1RfSU9fQ01UPQorCitmaQorCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgorICBhY19wdF9QS0dfQ09ORklHPSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAgZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICAgICAgX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKyAgICAgICAgaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgICAgICAgIFBLR19DT05GSUc9IiIKKyAgICAgICAgZmkKKworZmkKK0xJQlVVSUQ9CitERVBMSUJVVUlEPQorU1RBVElDX0xJQlVVSUQ9CitERVBTVEFUSUNfTElCVVVJRD0KK1BST0ZJTEVEX0xJQlVVSUQ9CitERVBQUk9GSUxFRF9MSUJVVUlEPQorVVVJRF9DTVQ9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidXVpZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ1dWlkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidXVpZDsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJaWYgdGVzdCAteiAiJFBLR19DT05GSUciOyB0aGVuCisJCWFzX2ZuX2Vycm9yICQ/ICJwa2ctY29uZmlnIG5vdCBpbnN0YWxsZWQ7IHBsZWFzZSBpbnN0YWxsIGl0LiIgIiRMSU5FTk8iIDUKKwlmaQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdXVpZF9nZW5lcmF0ZSBpbiAtbHV1aWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHV1aWRfZ2VuZXJhdGUgaW4gLWx1dWlkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl91dWlkX3V1aWRfZ2VuZXJhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHV1aWQgJExJQlVVSUQgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgdXVpZF9nZW5lcmF0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHV1aWRfZ2VuZXJhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdXVpZF91dWlkX2dlbmVyYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3V1aWRfdXVpZF9nZW5lcmF0ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dWlkX3V1aWRfZ2VuZXJhdGUiID0geHllczsgdGhlbiA6CisgIExJQlVVSUQ9YCRQS0dfQ09ORklHIC0tbGlicyB1dWlkYDsKKwkJIFNUQVRJQ19MSUJVVUlEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgdXVpZGAKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImV4dGVybmFsIHV1aWQgbGlicmFyeSBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCisJVVVJRF9DTVQ9IworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnkiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeSIgPiY2OyB9CitlbHNlCisJTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJExJQl9FWFQKKwlERVBMSUJVVUlEPSRMSUJVVUlECisJU1RBVElDX0xJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRTVEFUSUNfTElCX0VYVAorCURFUFNUQVRJQ19MSUJVVUlEPSRTVEFUSUNfTElCVVVJRAorCVBST0ZJTEVEX0xJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRQUk9GSUxFRF9MSUJfRVhUCisJREVQUFJPRklMRURfTElCVVVJRD0kUFJPRklMRURfTElCVVVJRAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeSIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnkiID4mNjsgfQorZmkKKworZWxzZQorICBMSUJVVUlEPSckKExJQikvbGlidXVpZCckTElCX0VYVAorREVQTElCVVVJRD0kTElCVVVJRAorU1RBVElDX0xJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRTVEFUSUNfTElCX0VYVAorREVQU1RBVElDX0xJQlVVSUQ9JFNUQVRJQ19MSUJVVUlECitQUk9GSUxFRF9MSUJVVUlEPSckKExJQikvbGlidXVpZCckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCVVVJRD0kUFJPRklMRURfTElCVVVJRAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5IGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCisKKworCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgorICBhY19wdF9QS0dfQ09ORklHPSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAgZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICAgICAgX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKyAgICAgICAgaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgICAgICAgIFBLR19DT05GSUc9IiIKKyAgICAgICAgZmkKKworZmkKK0xJQkJMS0lEPQorREVQTElCQkxLSUQ9CitTVEFUSUNfTElCQkxLSUQ9CitERVBTVEFUSUNfTElCQkxLSUQ9CitQUk9GSUxFRF9MSUJCTEtJRD0KK0RFUFBST0ZJTEVEX0xJQkJMS0lEPQorQkxLSURfQ01UPQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliYmxraWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGliYmxraWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJibGtpZDsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJaWYgdGVzdCAteiAiJFBLR19DT05GSUciOyB0aGVuCisJCWFzX2ZuX2Vycm9yICQ/ICJwa2ctY29uZmlnIG5vdCBpbnN0YWxsZWQ7IHBsZWFzZSBpbnN0YWxsIGl0LiIgIiRMSU5FTk8iIDUKKwlmaQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYmxraWRfZ2V0X2NhY2hlIGluIC1sYmxraWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJsa2lkX2dldF9jYWNoZSBpbiAtbGJsa2lkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9ibGtpZF9ibGtpZF9nZXRfY2FjaGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJsa2lkICRMSUJCTEtJRCAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBibGtpZF9nZXRfY2FjaGUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBibGtpZF9nZXRfY2FjaGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYmxraWRfYmxraWRfZ2V0X2NhY2hlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2Jsa2lkX2Jsa2lkX2dldF9jYWNoZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ibGtpZF9ibGtpZF9nZXRfY2FjaGUiID0geHllczsgdGhlbiA6CisgIExJQkJMS0lEPWAkUEtHX0NPTkZJRyAtLWxpYnMgYmxraWRgOworCQkgU1RBVElDX0xJQkJMS0lEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgYmxraWRgCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJleHRlcm5hbCBibGtpZCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKwlCTEtJRF9DTVQ9IworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IiA+JjY7IH0KK2Vsc2UKKwlMSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRMSUJfRVhUCisJREVQTElCQkxLSUQ9JExJQkJMS0lECisJU1RBVElDX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFNUQVRJQ19MSUJfRVhUCisJREVQU1RBVElDX0xJQkJMS0lEPSRTVEFUSUNfTElCQkxLSUQKKwlQUk9GSUxFRF9MSUJCTEtJRD0nJChMSUIpL2xpYmJsa2lkJyRQUk9GSUxFRF9MSUJfRVhUCisJREVQUFJPRklMRURfTElCQkxLSUQ9JFBST0ZJTEVEX0xJQkJMS0lECisJJGFzX2VjaG8gIiNkZWZpbmUgQ09ORklHX0JVSUxEX0ZJTkRGUyAxIiA+PmNvbmZkZWZzLmgKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBwcml2YXRlIGJsa2lkIGxpYnJhcnkiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeSIgPiY2OyB9CitmaQorCitlbHNlCisgIExJQkJMS0lEPSckKExJQikvbGliYmxraWQnJExJQl9FWFQKK0RFUExJQkJMS0lEPSRMSUJCTEtJRAorU1RBVElDX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCQkxLSUQ9JFNUQVRJQ19MSUJCTEtJRAorUFJPRklMRURfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCQkxLSUQ9JFBST0ZJTEVEX0xJQkJMS0lECiskYXNfZWNobyAiI2RlZmluZSBDT05GSUdfQlVJTERfRklOREZTIDEiID4+Y29uZmRlZnMuaAorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeSBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCisKKworCisKKworCitRVU9UQV9NQU5fQ09NTUVOVD0nLlwiJworUVVPVEFfQ01UPQorCisKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgICAgIF9wa2dfbWluX3ZlcnNpb249MC45LjAKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisgICAgICAgIGlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgICAgICAgICBQS0dfQ09ORklHPSIiCisgICAgICAgIGZpCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1xdW90YSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9xdW90YStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3F1b3RhOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlRVU9UQV9DTVQ9IworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgcXVvdGEgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIHF1b3RhIHN1cHBvcnQiID4mNjsgfQorZWxzZQorCVFVT1RBX0NNVD0KKwkkYXNfZWNobyAiI2RlZmluZSBDT05GSUdfUVVPVEEgMSIgPj5jb25mZGVmcy5oCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgcXVvdGEgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgcXVvdGEgc3VwcG9ydCIgPiY2OyB9CisJUVVPVEFfTUFOX0NPTU1FTlQ9IiIKKworZmkKKworZWxzZQorICBRVU9UQV9DTVQ9IworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBxdW90YSBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyBxdW90YSBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorCitmaQorCitMSUJRVU9UQT0nJChMSUIpL2xpYnF1b3RhJyRMSUJfRVhUCitERVBMSUJRVU9UQT0kTElCUVVPVEEKK1NUQVRJQ19MSUJRVU9UQT0nJChMSUIpL2xpYnF1b3RhJyRTVEFUSUNfTElCX0VYVAorREVQU1RBVElDX0xJQlFVT1RBPSRTVEFUSUNfTElCUVVPVEEKK1BST0ZJTEVEX0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJFBST0ZJTEVEX0xJQl9FWFQKK0RFUFBST0ZJTEVEX0xJQlFVT1RBPSRQUk9GSUxFRF9MSUJRVU9UQQorCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1iYWNrdHJhY2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYmFja3RyYWNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYmFja3RyYWNlOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2UiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyB1c2Ugb2YgYmFja3RyYWNlIiA+JjY7IH0KKwkkYXNfZWNobyAiI2RlZmluZSBESVNBQkxFX0JBQ0tUUkFDRSAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyB1c2Ugb2YgYmFja3RyYWNlIiA+JjUKKyRhc19lY2hvICJFbmFibGluZyB1c2Ugb2YgYmFja3RyYWNlIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIHVzZSBvZiBiYWNrdHJhY2UgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgdXNlIG9mIGJhY2t0cmFjZSBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnZnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVidWdmcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnZnM7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgZGVidWdmcyBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgZGVidWdmcyBzdXBwb3J0IiA+JjY7IH0KKwlERUJVR0ZTX0NNVD0iIyIKK2Vsc2UKKwlERUJVR0ZTX0NNVD0KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZGVidWdmcyBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBkZWJ1Z2ZzIHN1cHBvcnQiID4mNjsgfQorZmkKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZGVidWdmcyBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGRlYnVnZnMgc3VwcG9ydCBieSBkZWZhdWx0IiA+JjY7IH0KK0RFQlVHRlNfQ01UPQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbWFnZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaW1hZ2VyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaW1hZ2VyOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRGlzYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCIgPiY2OyB9CisJSU1BR0VSX0NNVD0iIyIKK2Vsc2UKKwlJTUFHRVJfQ01UPQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlMmltYWdlIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlMmltYWdlIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgZTJpbWFnZSBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorSU1BR0VSX0NNVD0KKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVzaXplciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZXNpemVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVzaXplcjsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IERpc2FibGluZyBlMnJlc2l6ZSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvICJEaXNhYmxpbmcgZTJyZXNpemUgc3VwcG9ydCIgPiY2OyB9CisJUkVTSVpFUl9DTVQ9IiMiCitlbHNlCisJUkVTSVpFUl9DTVQ9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEVuYWJsaW5nIGUycmVzaXplIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGUycmVzaXplIHN1cHBvcnQiID4mNjsgfQorZmkKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZTJyZXNpemUgc3VwcG9ydCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJFbmFibGluZyBlMnJlc2l6ZSBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNjsgfQorUkVTSVpFUl9DTVQ9CisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlZnJhZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWZyYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWZyYWc7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgZTRkZWZyYWcgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlzYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQiID4mNjsgfQorCURFRlJBR19DTVQ9IiMiCitlbHNlCisJREVGUkFHX0NNVD0KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogRW5hYmxpbmcgZTRkZWZyYWcgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgZTRkZWZyYWcgc3VwcG9ydCIgPiY2OyB9CitmaQorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyBlNGRlZnJhZyBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIkVuYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdCIgPiY2OyB9CitERUZSQUdfQ01UPQorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mc2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ZzY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mc2NrOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlGU0NLX1BST0c9JycgRlNDS19NQU49JycKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlciIgPiY1CiskYXNfZWNobyAiTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlciIgPiY2OyB9CitlbHNlCisJRlNDS19QUk9HPWZzY2sgRlNDS19NQU49ZnNjay44CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEJ1aWxkaW5nIGZzY2sgd3JhcHBlciIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgZnNjayB3cmFwcGVyIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgIGdudSopCisgICAgRlNDS19QUk9HPScnIEZTQ0tfTUFOPScnCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE5vdCBidWlsZGluZyBmc2NrIHdyYXBwZXIgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlciBieSBkZWZhdWx0IiA+JjY7IH0KKyAgICA7OworICAqKQorICAgIEZTQ0tfUFJPRz1mc2NrIEZTQ0tfTUFOPWZzY2suOAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyBmc2NrIHdyYXBwZXIgYnkgZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiQnVpbGRpbmcgZnNjayB3cmFwcGVyIGJ5IGRlZmF1bHQiID4mNjsgfQorZXNhYworCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWUyaW5pdHJkLWhlbHBlciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lMmluaXRyZF9oZWxwZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lMmluaXRyZF9oZWxwZXI7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUUySU5JVFJEX1BST0c9JycgRTJJTklUUkRfTUFOPScnCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IE5vdCBidWlsZGluZyBlMmluaXRyZCBoZWxwZXIiID4mNQorJGFzX2VjaG8gIk5vdCBidWlsZGluZyBlMmluaXRyZCBoZWxwZXIiID4mNjsgfQorZWxzZQorCUUySU5JVFJEX1BST0c9ZTJpbml0cmRfaGVscGVyIEUySU5JVFJEX01BTj1lMmluaXRyZF9oZWxwZXIuOAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyBlMmluaXRyZCBoZWxwZXIiID4mNQorJGFzX2VjaG8gIkJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciIgPiY2OyB9CitmaQorCitlbHNlCisgIEUySU5JVFJEX1BST0c9ZTJpbml0cmRfaGVscGVyIEUySU5JVFJEX01BTj1lMmluaXRyZF9oZWxwZXIuOAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEJ1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJCdWlsZGluZyBlMmluaXRyZCBoZWxwZXIgYnkgZGVmYXVsdCIgPiY2OyB9CisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGxzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RscytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3RsczsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJdHJ5X3Rscz0iIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaXNhYmxpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnQiID4mNQorJGFzX2VjaG8gIkRpc2FibGluZyB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY2OyB9CitlbHNlCisJdHJ5X3Rscz0ieWVzIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBFbmFibGluZyB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRW5hYmxpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnQiID4mNjsgfQorZmkKKworZWxzZQorICBpZiB0ZXN0IC1uICIkV0lUSF9ESUVUX0xJQkMiCit0aGVuCisJdHJ5X3Rscz0iIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBEaWV0IGxpYmMgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWQgbG9jYWwgc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiRGlldCBsaWJjIGRvZXMgbm90IHN1cHBvcnQgdGhyZWFkIGxvY2FsIHN1cHBvcnQiID4mNjsgfQorZWxzZQorCXRyeV90bHM9InllcyIKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogVHJ5IHVzaW5nIHRocmVhZCBsb2NhbCBzdXBwb3J0IGJ5IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gIlRyeSB1c2luZyB0aHJlYWQgbG9jYWwgc3VwcG9ydCBieSBkZWZhdWx0IiA+JjY7IH0KK2ZpCisKK2ZpCisKK2lmIHRlc3QgIiR0cnlfdGxzIiA9ICJ5ZXMiCit0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgY2xhc3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGNsYXNzLi4uICIgPiY2OyB9CisgIGlmICR7YWNfY3ZfdGxzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGF4X3Rsc19rZXl3b3Jkcz0iX190aHJlYWQgX19kZWNsc3BlYyh0aHJlYWQpIG5vbmUiCisgICAgZm9yIGF4X3Rsc19rZXl3b3JkIGluICRheF90bHNfa2V5d29yZHM7IGRvCisgICAgICAgY2FzZSAkYXhfdGxzX2tleXdvcmQgaW4KKyAgICAgICAgICBub25lKSBhY19jdl90bHM9bm9uZSA7IGJyZWFrIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgICAgICAgICAgIGZvbyh2b2lkKSB7CisgICAgICAgICAgICAgICAgIHN0YXRpYyAgJGF4X3Rsc19rZXl3b3JkICBpbnQgYmFyOworICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICB9CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Rscz0kYXhfdGxzX2tleXdvcmQgOyBicmVhaworZWxzZQorICBhY19jdl90bHM9bm9uZQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZXNhYworICAgIGRvbmUKKworZmkKKworCisgIGlmIHRlc3QgIiRhY19jdl90bHMiICE9ICJub25lIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFRMUyAkYWNfY3ZfdGxzCitfQUNFT0YKKworICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3RscyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3RscyIgPiY2OyB9CisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS11dWlkZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV91dWlkZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3V1aWRkOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogTm90IGJ1aWxkaW5nIHV1aWRkIiA+JjUKKyRhc19lY2hvICJOb3QgYnVpbGRpbmcgdXVpZGQiID4mNjsgfQorCVVVSUREX0NNVD0iIyIKK2Vsc2UKKwkkYXNfZWNobyAiI2RlZmluZSBVU0VfVVVJREQgMSIgPj5jb25mZGVmcy5oCisKKwlVVUlERF9DTVQ9IiIKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQnVpbGRpbmcgdXVpZGQiID4mNQorJGFzX2VjaG8gIkJ1aWxkaW5nIHV1aWRkIiA+JjY7IH0KK2ZpCisKK2Vsc2UKKyAgJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1VVSUREIDEiID4+Y29uZmRlZnMuaAorCitVVUlERF9DTVQ9IiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBCdWlsZGluZyB1dWlkZCBieSBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJCdWlsZGluZyB1dWlkZCBieSBkZWZhdWx0IiA+JjY7IH0KKworZmkKKworCitNQUtFRklMRV9MSUJSQVJZPSRzcmNkaXIvbGliL01ha2VmaWxlLmxpYnJhcnkKKworR0VUVEVYVF9QQUNLQUdFPWUyZnNwcm9ncworUEFDS0FHRT1lMmZzcHJvZ3MKK1ZFUlNJT049IiRFMkZTUFJPR1NfVkVSU0lPTiIKK1ZFUlNJT049MC4xNC4xCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCisKKyAgICAgICAgTUtJTlNUQUxMRElSUz0KKyAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgICAgY2FzZSAiJGFjX2F1eF9kaXIiIGluCisgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKyAgICAgICopIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9idWlsZGRpcikvJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKyAgICBlc2FjCisgIGZpCisgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgorICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmxzOyBVU0VfTkxTPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX05MUz15ZXMKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CisKKworCisKKworCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01TR0ZNVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgIiRNU0dGTVQiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR0ZNVCIgJiYgYWNfY3ZfcGF0aF9NU0dGTVQ9IjoiCisgICAgOzsKK2VzYWMKK2ZpCitNU0dGTVQ9IiRhY19jdl9wYXRoX01TR0ZNVCIKK2lmIHRlc3QgIiRNU0dGTVQiICE9ICI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR0ZNVCIgPiY1CiskYXNfZWNobyAiJE1TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdtc2dmbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dNU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRHTVNHRk1UIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRHTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dNU0dGTVQiICYmIGFjX2N2X3BhdGhfR01TR0ZNVD0iJE1TR0ZNVCIKKyAgOzsKK2VzYWMKK2ZpCitHTVNHRk1UPSRhY19jdl9wYXRoX0dNU0dGTVQKK2lmIHRlc3QgLW4gIiRHTVNHRk1UIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdNU0dGTVQiID4mNQorJGFzX2VjaG8gIiRHTVNHRk1UIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieGdldHRleHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHhnZXR0ZXh0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9YR0VUVEVYVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgIiRYR0VUVEVYVCIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJFhHRVRURVhUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIgJiYgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iOiIKKyAgICA7OworZXNhYworZmkKK1hHRVRURVhUPSIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIKK2lmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWEdFVFRFWFQiID4mNQorJGFzX2VjaG8gIiRYR0VUVEVYVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICAgIHJtIC1mIG1lc3NhZ2VzLnBvCisKKworIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKyAgY2htb2QgK3ggY29uZiQkLnNoCisgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIGVsc2UKKyAgICBQQVRIX1NFUEFSQVRPUj06CisgIGZpCisgIHJtIC1mIGNvbmYkJC5zaAorZmkKKworIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCisjIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgorY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorIyEgL2Jpbi9zaAorZXhpdCAwCitfQVNFT0YKK2NobW9kICt4IGNvbmYkJC5maWxlCitpZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCitlbHNlCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKK2ZpCitybSAtZiBjb25mJCQuZmlsZQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ21lcmdlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtc2dtZXJnZTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHTUVSR0UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICIkTVNHTUVSR0UiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRNU0dNRVJHRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgICAgaWYgJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVNHTUVSR0UiICYmIGFjX2N2X3BhdGhfTVNHTUVSR0U9IjoiCisgICAgOzsKK2VzYWMKK2ZpCitNU0dNRVJHRT0iJGFjX2N2X3BhdGhfTVNHTUVSR0UiCitpZiB0ZXN0ICIkTVNHTUVSR0UiICE9ICI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR01FUkdFIiA+JjUKKyRhc19lY2hvICIkTVNHTUVSR0UiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICAgaWYgdGVzdCAiJEdNU0dGTVQiICE9ICI6IjsgdGhlbgorICAgICAgICAgICAgaWYgJEdNU0dGTVQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAoaWYgJEdNU0dGTVQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICA6IDsKKyAgICBlbHNlCisgICAgICBHTVNHRk1UPWBlY2hvICIkR01TR0ZNVCIgfCBzZWQgLWUgJ3MsXi4qLywsJ2AKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmb3VuZCAkR01TR0ZNVCBwcm9ncmFtIGlzIG5vdCBHTlUgbXNnZm10OyBpZ25vcmUgaXQiID4mNQorJGFzX2VjaG8gImZvdW5kICRHTVNHRk1UIHByb2dyYW0gaXMgbm90IEdOVSBtc2dmbXQ7IGlnbm9yZSBpdCIgPiY2OyB9CisgICAgICBHTVNHRk1UPSI6IgorICAgIGZpCisgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisgICAgICAgICAgICBpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgKGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCisgICAgICA6IDsKKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXQiID4mNQorJGFzX2VjaG8gImZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0IiA+JjY7IH0KKyAgICAgIFhHRVRURVhUPSI6IgorICAgIGZpCisgICAgICAgIHJtIC1mIG1lc3NhZ2VzLnBvCisgIGZpCisKKyAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlZmF1bHQtMSIKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cmVycm9yIGluIC1sY3Bvc2l4IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJlcnJvciBpbiAtbGNwb3NpeC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxjcG9zaXggICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHN0cmVycm9yICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc3RyZXJyb3IgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IiID0geHllczsgdGhlbiA6CisgIExJQlM9IiRMSUJTIC1sY3Bvc2l4IgorZmkKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0VHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3MgPSB7IDAsIDAgfTsKKyAgLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIHBjcGNjID0gJmcgKyAoZyA/IGctZyA6IDApOworICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLworICArK3BjcGNjOworICBwcGMgPSAoY2hhcioqKSBwY3BjYzsKKyAgcGNwY2MgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcHBjOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCisgICAgY2hhciB0eDsKKyAgICBjaGFyICp0ID0gJnR4OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzb3J0IG9mIHRoaW5nLCBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfSBieDsKKyAgICBzdHJ1Y3QgcyAqYiA9ICZieDsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19jb25zdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29uc3QiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2lnbmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaWduZWQuLi4gIiA+JjY7IH0KK2lmICR7YmhfY3ZfY19zaWduZWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworc2lnbmVkIGNoYXIgeDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBiaF9jdl9jX3NpZ25lZD15ZXMKK2Vsc2UKKyAgYmhfY3ZfY19zaWduZWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGJoX2N2X2Nfc2lnbmVkIiA+JjUKKyRhc19lY2hvICIkYmhfY3ZfY19zaWduZWQiID4mNjsgfQorICBpZiB0ZXN0ICRiaF9jdl9jX3NpZ25lZCA9IG5vOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIHNpZ25lZCAvKiovIiA+PmNvbmZkZWZzLmgKKworICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYgaW50IGZvb190Oworc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKyNlbmRpZgorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKK2RvbmUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CisKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcykgOzsKKyAgKikKKyAgICBjYXNlICRhY19jdl9jX2lubGluZSBpbgorICAgICAgbm8pIGFjX3ZhbD07OworICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7CisgICAgZXNhYworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgaW5saW5lICRhY192YWwKKyNlbmRpZgorX0FDRU9GCisgICAgOzsKK2VzYWMKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm9mZl90IiAiYWNfY3ZfdHlwZV9vZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX29mZl90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgb2ZmX3QgbG9uZyBpbnQKK19BQ0VPRgorCitmaQorCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKK19BQ0VPRgorCitmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbG9uZyBsb25nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb25nIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV9sb25nX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitsb25nIGxvbmcgbGwgPSAxTEw7IGludCBpID0gNjM7CitpbnQKK21haW4gKCkKK3sKK2xvbmcgbG9uZyBsbG1heCA9IChsb25nIGxvbmcpIC0xOworICAgICByZXR1cm4gbGwgPDwgaSB8IGxsID4+IGkgfCBsbG1heCAvIGxsIHwgbGxtYXggJSBsbDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX2xvbmdfbG9uZz15ZXMKK2Vsc2UKKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX2xvbmdfbG9uZyIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19MT05HIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb25nIGRvdWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbG9uZyBkb3VibGUuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfY19sb25nX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKKyAgICAgZWxzZQorICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgLyogVGhlIFN0YXJkZW50IFZpc3RyYSBrbm93cyBzaXplb2YobG9uZyBkb3VibGUpLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBpdC4gICovCisgICAgICAgICBsb25nIGRvdWJsZSBmb28gPSAwLjA7CisgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisgICAgICAgICBpbnQgYXJyYXkgWzIqKHNpemVvZihsb25nIGRvdWJsZSkgPj0gc2l6ZW9mKGRvdWJsZSkpIC0gMV07CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKK2Vsc2UKKyAgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY19sb25nX2RvdWJsZSIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2NfbG9uZ19kb3VibGUiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9jX2xvbmdfZG91YmxlID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdjaGFyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjaGFyX3QuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfY193Y2hhcl90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJzsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfY193Y2hhcl90PXllcworZWxzZQorICBndF9jdl9jX3djaGFyX3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Nfd2NoYXJfdCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Nfd2NoYXJfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Nfd2NoYXJfdCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1dDSEFSX1QgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnRfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2ludF90Li4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Nfd2ludF90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdjaGFyLmg+CisgICAgICAgd2ludF90IGZvbyA9ICh3Y2hhcl90KSdcMCc7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Nfd2ludF90PXllcworZWxzZQorICBndF9jdl9jX3dpbnRfdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY193aW50X3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX3dpbnRfdCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfV0lOVF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnR0eXBlcy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnR0eXBlcy5oLi4uICIgPiY2OyB9CitpZiAke2ptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CitpbnQKK21haW4gKCkKK3sKK3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzCitlbHNlCisgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPiY1CiskYXNfZWNobyAiJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA+JjY7IH0KKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIDEKK19BQ0VPRgorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50LmguLi4gIiA+JjY7IH0KK2lmICR7am1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgoraW50CittYWluICgpCit7Cit1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMKK2Vsc2UKKyAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2giID4mNQorJGFzX2VjaG8gIiRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2giID4mNjsgfQorICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCitfQUNFT0YKKworICBmaQorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludG1heF90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnRtYXhfdC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9jX2ludG1heF90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworaW50bWF4X3QgeCA9IC0xOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2NfaW50bWF4X3Q9eWVzCitlbHNlCisgIGd0X2N2X2NfaW50bWF4X3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2NfaW50bWF4X3QiID4mNQorJGFzX2VjaG8gIiRndF9jdl9jX2ludG1heF90IiA+JjY7IH0KKyAgaWYgdGVzdCAkZ3RfY3ZfY19pbnRtYXhfdCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYoKSBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYoKSBzdXBwb3J0cyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3MuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfZnVuY19wcmludGZfcG9zaXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgbm90cG9zaXgKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJub3Rwb3NpeCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIG5vIgorZWxzZQorICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3NpbmcgeWVzIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IiA+JjY7IH0KKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKyAgICAqeWVzKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BPU0lYX1BSSU5URiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgOzsKKyAgZXNhYworCisjIFRoZSBVbHRyaXggNC4yIG1pcHMgYnVpbHRpbiBhbGxvY2EgZGVjbGFyZWQgYnkgYWxsb2NhLmggb25seSB3b3JrcworIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyEKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhbGxvY2EuaD4KK2ludAorbWFpbiAoKQoreworY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAqIHNpemVvZiAoaW50KSk7CisJCQkgIGlmIChwKSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl93b3JraW5nX2FsbG9jYV9oPXllcworZWxzZQorICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQorJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZWxzZQorIyBpZmRlZiBfTVNDX1ZFUgorIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgZWxzZQorIyAgaWZkZWYgSEFWRV9BTExPQ0FfSAorIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQorIyAgIGlmZGVmIF9BSVgKKyAjcHJhZ21hIGFsbG9jYQorIyAgIGVsc2UKKyMgICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KK3ZvaWQgKmFsbG9jYSAoc2l6ZV90KTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2NoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOworCQkJCSAgICBpZiAocCkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQorCitpZiB0ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucworIyB0aGF0IGNhdXNlIHRyb3VibGUuICBTb21lIHZlcnNpb25zIGRvIG5vdCBldmVuIGNvbnRhaW4gYWxsb2NhIG9yCisjIGNvbnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKKyMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbG9jYS5jLgorCitBTExPQ0E9XCR7TElCT0JKRElSfWFsbG9jYS4kYWNfb2JqZXh0CisKKyRhc19lY2hvICIjZGVmaW5lIENfQUxMT0NBIDEiID4+Y29uZmRlZnMuaAorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9vc19jcmF5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmIGRlZmluZWQgQ1JBWSAmJiAhIGRlZmluZWQgQ1JBWTIKK3dlYmVjcmF5CisjZWxzZQord2Vub3RiZWNyYXkKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY3Zfb3NfY3JheT15ZXMKK2Vsc2UKKyAgYWNfY3Zfb3NfY3JheT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb3NfY3JheSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9vc19jcmF5ID0geWVzOyB0aGVuCisgIGZvciBhY19mdW5jIGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KKyAgICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDUkFZX1NUQUNLU0VHX0VORCAkYWNfZnVuYworX0FDRU9GCisKKyAgICBicmVhaworZmkKKworICBkb25lCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MAorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CitmaW5kX3N0YWNrX2RpcmVjdGlvbiAoaW50ICphZGRyLCBpbnQgZGVwdGgpCit7CisgIGludCBkaXIsIGR1bW15ID0gMDsKKyAgaWYgKCEgYWRkcikKKyAgICBhZGRyID0gJmR1bW15OworICAqYWRkciA9IGFkZHIgPCAmZHVtbXkgPyAxIDogYWRkciA9PSAmZHVtbXkgPyAwIDogLTE7CisgIGRpciA9IGRlcHRoID8gZmluZF9zdGFja19kaXJlY3Rpb24gKGFkZHIsIGRlcHRoIC0gMSkgOiAwOworICByZXR1cm4gZGlyICsgZHVtbXk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKDAsIGFyZ2MgKyAhYXJndiArIDIwKSA8IDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xCitlbHNlCisgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KK19BQ0VPRgorCisKK2ZpCisKKworCisKKyAgZm9yIGFjX2hlYWRlciBpbiAkYWNfaGVhZGVyX2xpc3QKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworCisKKworCisKK2ZvciBhY19mdW5jIGluIGdldHBhZ2VzaXplCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHBhZ2VzaXplIiAiYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZSIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKK19BQ0VPRgorCitmaQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisvKiBtYWxsb2MgbWlnaHQgaGF2ZSBiZWVuIHJlbmFtZWQgYXMgcnBsX21hbGxvYy4gKi8KKyN1bmRlZiBtYWxsb2MKKworLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCisgICBIZXJlIGlzIGEgbWF0cml4IG9mIG1tYXAgcG9zc2liaWxpdGllczoKKwltbWFwIHByaXZhdGUgbm90IGZpeGVkCisJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKwltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCisJbW1hcCBzaGFyZWQgbm90IGZpeGVkCisJbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorICAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIHdlIHNob3VsZCB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGNhbm5vdCBiZSByZWFkKCkKKyAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKKyAgIGFkZHJlc3MuICAoVGhlcmUgaGF2ZSBiZWVuIHN5c3RlbXMgd2hlcmUgcHJpdmF0ZSB3YXMgbm90IGNvcnJlY3RseQorICAgaW1wbGVtZW50ZWQgbGlrZSB0aGUgaW5mYW1vdXMgaTM4NiBzdnI0LjAsIGFuZCBzeXN0ZW1zIHdoZXJlIHRoZQorICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQorICAgbGlrZSBlYXJseSB2ZXJzaW9ucyBvZiBGcmVlQlNEIGFuZCBwb3NzaWJseSBjb250ZW1wb3JhcnkgTmV0QlNELikKKyAgIEZvciBzaGFyZWQgbWFwcGluZ3MsIHdlIHNob3VsZCBjb252ZXJzZWx5IHZlcmlmeSB0aGF0IGNoYW5nZXMgZ2V0CisgICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KKworICAgR3JlcCB3YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgorICAgVGhlIG1haW4gdGhpbmdzIGdyZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKKyAgICogZG9lcyBpdCBleGlzdCBhbmQgaXMgaXQgc2FmZSB0byB3cml0ZSBpbnRvIHRoZSBtbWFwJ2QgYXJlYQorICAgKiBob3cgdG8gdXNlIGl0IChCU0QgdmFyaWFudHMpICAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVfU1RETElCX0gKK2NoYXIgKm1hbGxvYyAoKTsKKyNlbmRpZgorCisvKiBUaGlzIG1lc3Mgd2FzIGNvcGllZCBmcm9tIHRoZSBHTlUgZ2V0cGFnZXNpemUuaC4gICovCisjaWZuZGVmIEhBVkVfR0VUUEFHRVNJWkUKKyMgaWZkZWYgX1NDX1BBR0VTSVpFCisjICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKyMgZWxzZSAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKyMgIGlmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKyMgICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgICAgaWZkZWYgTkJQRworIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQorIyAgICAgaWZuZGVmIENMU0laRQorIyAgICAgIGRlZmluZSBDTFNJWkUgMQorIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCisjICAgIGVsc2UgLyogbm8gTkJQRyAqLworIyAgICAgaWZkZWYgTkJQQworIyAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEMKKyMgICAgIGVsc2UgLyogbm8gTkJQQyAqLworIyAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCisjICAgICAgZW5kaWYgLyogUEFHRVNJWkUgKi8KKyMgICAgIGVuZGlmIC8qIG5vIE5CUEMgKi8KKyMgICAgZW5kaWYgLyogbm8gTkJQRyAqLworIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgIGVsc2UgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyogcHVudCB0b3RhbGx5ICovCisjICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCisjIGVuZGlmIC8qIG5vIF9TQ19QQUdFU0laRSAqLworCisjZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0laRSAqLworCitpbnQKK21haW4gKCkKK3sKKyAgY2hhciAqZGF0YSwgKmRhdGEyLCAqZGF0YTM7CisgIGNvbnN0IGNoYXIgKmNkYXRhMjsKKyAgaW50IGksIHBhZ2VzaXplOworICBpbnQgZmQsIGZkMjsKKworICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOworCisgIC8qIEZpcnN0LCBtYWtlIGEgZmlsZSB3aXRoIHNvbWUga25vd24gZ2FyYmFnZSBpbiBpdC4gKi8KKyAgZGF0YSA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworICBpZiAoIWRhdGEpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgICooZGF0YSArIGkpID0gcmFuZCAoKTsKKyAgdW1hc2sgKDApOworICBmZCA9IGNyZWF0ICgiY29uZnRlc3QubW1hcCIsIDA2MDApOworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiAyOworICBpZiAod3JpdGUgKGZkLCBkYXRhLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisgICAgcmV0dXJuIDM7CisgIGNsb3NlIChmZCk7CisKKyAgLyogTmV4dCwgY2hlY2sgdGhhdCB0aGUgdGFpbCBvZiBhIHBhZ2UgaXMgemVyby1maWxsZWQuICBGaWxlIG11c3QgaGF2ZQorICAgICBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSB3ZSByaXNrIFNJR0JVUyBmb3IgZW50aXJlIHBhZ2UuICAqLworICBmZDIgPSBvcGVuICgiY29uZnRlc3QudHh0IiwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworICBpZiAoZmQyIDwgMCkKKyAgICByZXR1cm4gNDsKKyAgY2RhdGEyID0gIiI7CisgIGlmICh3cml0ZSAoZmQyLCBjZGF0YTIsIDEpICE9IDEpCisgICAgcmV0dXJuIDU7CisgIGRhdGEyID0gKGNoYXIgKikgbW1hcCAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkMiwgMEwpOworICBpZiAoZGF0YTIgPT0gTUFQX0ZBSUxFRCkKKyAgICByZXR1cm4gNjsKKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgaWYgKCooZGF0YTIgKyBpKSkKKyAgICAgIHJldHVybiA3OworICBjbG9zZSAoZmQyKTsKKyAgaWYgKG11bm1hcCAoZGF0YTIsIHBhZ2VzaXplKSkKKyAgICByZXR1cm4gODsKKworICAvKiBOZXh0LCB0cnkgdG8gbW1hcCB0aGUgZmlsZSBhdCBhIGZpeGVkIGFkZHJlc3Mgd2hpY2ggYWxyZWFkeSBoYXMKKyAgICAgc29tZXRoaW5nIGVsc2UgYWxsb2NhdGVkIGF0IGl0LiAgSWYgd2UgY2FuLCBhbHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgIHdlIHNlZSB0aGUgc2FtZSBnYXJiYWdlLiAgKi8KKyAgZmQgPSBvcGVuICgiY29uZnRlc3QubW1hcCIsIE9fUkRXUik7CisgIGlmIChmZCA8IDApCisgICAgcmV0dXJuIDk7CisgIGlmIChkYXRhMiAhPSBtbWFwIChkYXRhMiwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLCAwTCkpCisgICAgcmV0dXJuIDEwOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMiArIGkpKQorICAgICAgcmV0dXJuIDExOworCisgIC8qIEZpbmFsbHksIG1ha2Ugc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIG1hcHBlZCBhcmVhIGRvIG5vdAorICAgICBwZXJjb2xhdGUgYmFjayB0byB0aGUgZmlsZSBhcyBzZWVuIGJ5IHJlYWQoKS4gIChUaGlzIGlzIGEgYnVnIG9uCisgICAgIHNvbWUgdmFyaWFudHMgb2YgaTM4NiBzdnI0LjAuKSAgKi8KKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgKihkYXRhMiArIGkpID0gKihkYXRhMiArIGkpICsgMTsKKyAgZGF0YTMgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhMykKKyAgICByZXR1cm4gMTI7CisgIGlmIChyZWFkIChmZCwgZGF0YTMsIHBhZ2VzaXplKSAhPSBwYWdlc2l6ZSkKKyAgICByZXR1cm4gMTM7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEzICsgaSkpCisgICAgICByZXR1cm4gMTQ7CisgIGNsb3NlIChmZCk7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29uZnRlc3QubW1hcCBjb25mdGVzdC50eHQKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2dudV9saWJyYXJ5XzJfMSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiTHVja3kgR05VIHVzZXIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9nbnVfbGlicmFyeV8yXzEiID4mNQorJGFzX2VjaG8gIiRhY19jdl9nbnVfbGlicmFyeV8yXzEiID4mNjsgfQorCisgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRS4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKworICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICBhbHBoYSogfCBpMzQ1Njc4NiB8IG02OGsgfCBzMzkwKikKKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisgICAgICAgICAgZXNhYworCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitzdGF0aWMgdm9pZAorI2lmZGVmIF9fY3BsdXNwbHVzCitzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKyNlbHNlCitzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworI2VuZGlmCit7CisgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7Cit9CisKK2ludCB4ID0gMTsKK2ludCB5ID0gMDsKK2ludCB6OworaW50IG5hbjsKKworaW50IG1haW4gKCkKK3sKKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKyNlbmRpZgorLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworI2VuZGlmCisKKyAgeiA9IHggLyB5OworICBuYW4gPSB5IC8geTsKKyAgZXhpdCAoMSk7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcworZWxzZQorICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiID4mNQorJGFzX2VjaG8gIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgPiY2OyB9CisgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKyAgICAqeWVzKSB2YWx1ZT0xOzsKKyAgICAqKSB2YWx1ZT0wOzsKKyAgZXNhYworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAkdmFsdWUKK19BQ0VPRgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxVUxMOyBpbnQgaSA9IDYzOworaW50CittYWluICgpCit7Cit1bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7CisgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcworZWxzZQorICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nIiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VTlNJR05FRF9MT05HX0xPTkcgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisKKworICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisKKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgdWludG1heF90ICRhY190eXBlCitfQUNFT0YKKworICBlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVUlOVE1BWF9UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnR0eXBlcy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnR0eXBlcy5oLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2hlYWRlcl9pbnR0eXBlc19oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2giID4mNQorJGFzX2VjaG8gIiRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKK19BQ0VPRgorCisgIGZpCisKKworCisgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbi4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpZmRlZiBQUklkMzIKK2NoYXIgKnAgPSBQUklkMzI7CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vCitlbHNlCisgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID4mNQorJGFzX2VjaG8gIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjY7IH0KKyAgZmkKKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gMQorX0FDRU9GCisKKyAgZmkKKworCisgIGZvciBhY19oZWFkZXIgaW4gc3RkaW50LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0ZGludC5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NURElOVF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTSVpFX01BWCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU0laRV9NQVguLi4gIiA+JjY7IH0KKyAgcmVzdWx0PQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBTSVpFX01BWAorRm91bmQgaXQKKyNlbmRpZgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJGb3VuZCBpdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgcmVzdWx0PXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJ+KHNpemVfdCkwIC8gMTAiICJyZXNfaGkiICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPiI7IHRoZW4gOgorCitlbHNlCisgIHJlc3VsdD0/CitmaQorCisKKyAgICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAifihzaXplX3QpMCAlIDEwIiAicmVzX2xvIiAgICAgICAgIiNpbmNsdWRlIDxzdGRkZWYuaD4iOyB0aGVuIDoKKworZWxzZQorICByZXN1bHQ9PworZmkKKworCisgICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgInNpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCkiICJmaXRzX2luX3VpbnQiICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPiI7IHRoZW4gOgorCitlbHNlCisgIHJlc3VsdD0/CitmaQorCisKKyAgICBpZiB0ZXN0ICIkZml0c19pbl91aW50IiA9IDE7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIGZvbzsKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmaXRzX2luX3VpbnQ9MAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAteiAiJHJlc3VsdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRmaXRzX2luX3VpbnQiID0gMTsgdGhlbgorICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0PSIkcmVzX2hpJHJlc19sbyJVTAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQ9J34oc2l6ZV90KTAnCisgICAgZmkKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRyZXN1bHQiID4mNQorJGFzX2VjaG8gIiRyZXN1bHQiID4mNjsgfQorICBpZiB0ZXN0ICIkcmVzdWx0IiAhPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFX01BWCAkcmVzdWx0CitfQUNFT0YKKworICBmaQorCisKKworICBmb3IgYWNfaGVhZGVyIGluIHN0ZGludC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzdGRpbnQuaCIgImFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW50X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworICAgICAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZWxzZQorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisgIGZpCisgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworICBlbHNlCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGZpCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHthY2xfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2Vsc2UKKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2FjbF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OworZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNsX2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkYWNsX2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKKworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luLi4uICIgPiY2OyB9CitpZiAke2FjbF9jdl9ycGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisgICAgLiAuL2NvbmZ0ZXN0LnNoCisgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorICAgIGFjbF9jdl9ycGF0aD1kb25lCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1CiskYXNfZWNobyAiJGFjbF9jdl9ycGF0aCIgPiY2OyB9CisgIHdsPSIkYWNsX2N2X3dsIgorICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisgIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ycGF0aDsgOgorZWxzZQorICBlbmFibGVfcnBhdGg9eWVzCitmaQorCisKKworCisKKworCisKKyAgICB1c2VfYWRkaXRpb25hbD15ZXMKKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYmljb252LXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGliaWNvbnZfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJpY29udl9wcmVmaXg7CisgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICB1c2VfYWRkaXRpb25hbD1ubworICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisgICAgICBmaQorICAgIGZpCisKK2ZpCisKKyAgICAgIExJQklDT05WPQorICBMVExJQklDT05WPQorICBJTkNJQ09OVj0KKyAgcnBhdGhkaXJzPQorICBsdHJwYXRoZGlycz0KKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorICBuYW1lc19uZXh0X3JvdW5kPSdpY29udiAnCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSUNPTlY7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovbGliIHwgKi9saWIvKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ0lDT05WOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lDT05WPSIke0lOQ0lDT05WfSR7SU5DSUNPTlY6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisgICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSUNPTlY7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCSUNPTlY7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9LWwkbmFtZSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgorICAgIGVsc2UKKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCisKKworCisKKworCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdHJkaWZmX3QiICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBwdHJkaWZmX3QgbG9uZyIgPj5jb25mZGVmcy5oCisKKworZmkKKworICBmb3IgYWNfaGVhZGVyIGluIGFyZ3ouaCBsaW1pdHMuaCBsb2NhbGUuaCBubF90eXBlcy5oIG1hbGxvYy5oIHN0ZGRlZi5oIFwKK3N0ZGxpYi5oIHN0cmluZy5oIHVuaXN0ZC5oIHN5cy9wYXJhbS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgZm9yIGFjX2Z1bmMgaW4gYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKK21lbXBjcHkgbXVubWFwIHB1dGVudiBzZXRlbnYgc2V0bG9jYWxlIHNucHJpbnRmIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBcCitzdHJ0b3VsIHRzZWFyY2ggd2NzbGVuIF9fYXJnel9jb3VudCBfX2FyZ3pfc3RyaW5naWZ5IF9fYXJnel9uZXh0IFwKK19fZnNldGxvY2tpbmcKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgX3NucHJpbnRmIGlzIGRlY2xhcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgX3NucHJpbnRmIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfZGVjbF9fc25wcmludGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9zbnByaW50ZgorICBjaGFyICpwID0gKGNoYXIgKikgX3NucHJpbnRmOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2RlY2xfX3NucHJpbnRmPXllcworZWxzZQorICBhY19jdl9oYXZlX2RlY2xfX3NucHJpbnRmPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfX3NucHJpbnRmIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9kZWNsX19zbnByaW50ZiIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9fc25wcmludGYgPSB5ZXM7IHRoZW4KKyAgICBndF92YWx1ZT0xCisgIGVsc2UKKyAgICBndF92YWx1ZT0wCisgIGZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX19TTlBSSU5URiAkZ3RfdmFsdWUKK19BQ0VPRgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgX3Nud3ByaW50ZiBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIF9zbndwcmludGYgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGF2ZV9kZWNsX19zbndwcmludGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIF9zbndwcmludGYKKyAgY2hhciAqcCA9IChjaGFyICopIF9zbndwcmludGY7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhdmVfZGVjbF9fc253cHJpbnRmPXllcworZWxzZQorICBhY19jdl9oYXZlX2RlY2xfX3Nud3ByaW50Zj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX19zbndwcmludGYiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX2RlY2xfX3Nud3ByaW50ZiIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9fc253cHJpbnRmID0geWVzOyB0aGVuCisgICAgZ3RfdmFsdWU9MQorICBlbHNlCisgICAgZ3RfdmFsdWU9MAorICBmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9fU05XUFJJTlRGICRndF92YWx1ZQorX0FDRU9GCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZlb2ZfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmZW9mX3VubG9ja2VkIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBmZW9mX3VubG9ja2VkCisgIGNoYXIgKnAgPSAoY2hhciAqKSBmZW9mX3VubG9ja2VkOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCA9IHllczsgdGhlbgorICAgIGd0X3ZhbHVlPTEKKyAgZWxzZQorICAgIGd0X3ZhbHVlPTAKKyAgZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRCAkZ3RfdmFsdWUKK19BQ0VPRgorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZmdldHNfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmZ2V0c191bmxvY2tlZCBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIGZnZXRzX3VubG9ja2VkCisgIGNoYXIgKnAgPSAoY2hhciAqKSBmZ2V0c191bmxvY2tlZDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2VkPXllcworZWxzZQorICBhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCA9IHllczsgdGhlbgorICAgIGd0X3ZhbHVlPTEKKyAgZWxzZQorICAgIGd0X3ZhbHVlPTAKKyAgZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgJGd0X3ZhbHVlCitfQUNFT0YKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGdldGNfdW5sb2NrZWQgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnZXRjX3VubG9ja2VkIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBnZXRjX3VubG9ja2VkCisgIGNoYXIgKnAgPSAoY2hhciAqKSBnZXRjX3VubG9ja2VkOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNjsgfQorICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCA9IHllczsgdGhlbgorICAgIGd0X3ZhbHVlPTEKKyAgZWxzZQorICAgIGd0X3ZhbHVlPTAKKyAgZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAkZ3RfdmFsdWUKK19BQ0VPRgorCisKKworICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorICAgICp5ZXMpIEhBVkVfUE9TSVhfUFJJTlRGPTEgOzsKKyAgICAqKSBIQVZFX1BPU0lYX1BSSU5URj0wIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0FTUFJJTlRGPTEKKyAgZWxzZQorICAgIEhBVkVfQVNQUklOVEY9MAorICBmaQorCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorICAgIEhBVkVfU05QUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9TTlBSSU5URj0wCisgIGZpCisKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dQUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9XUFJJTlRGPTAKKyAgZmkKKworCisKKworCisKKworICAgICAgICAgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKworICBmb3IgZWxlbWVudCBpbiAkSU5DSUNPTlY7IGRvCisgICAgaGF2ZWl0PQorICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGljb252IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpY29udi4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9mdW5jX2ljb252Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGFtX2N2X2Z1bmNfaWNvbnY9Im5vLCBjb25zaWRlciBpbnN0YWxsaW5nIEdOVSBsaWJpY29udiIKKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KK2ludAorbWFpbiAoKQoreworaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOworICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgIGljb252X2Nsb3NlKGNkKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl9mdW5jX2ljb252PXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgoraW50CittYWluICgpCit7CitpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgIGljb252X2Nsb3NlKGNkKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl9saWJfaWNvbnY9eWVzCisgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfZnVuY19pY29udiIgPiY1CiskYXNfZWNobyAiJGFtX2N2X2Z1bmNfaWNvbnYiID4mNjsgfQorICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JQ09OViAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252Li4uICIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSUJJQ09OViIgPiY1CiskYXNfZWNobyAiJExJQklDT05WIiA+JjY7IH0KKyAgZWxzZQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorICAgIExJQklDT05WPQorICAgIExUTElCSUNPTlY9CisgIGZpCisKKworCisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGljb252IGRlY2xhcmF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpY29udiBkZWNsYXJhdGlvbi4uLiAiID4mNjsgfQorICAgIGlmICR7YW1fY3ZfcHJvdG9faWNvbnYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgorZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKK3NpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKKyNlbHNlCitzaXplX3QgaWNvbnYoKTsKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIKK2Vsc2UKKyAgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiCitmaQorCisgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIiRhbV9jdl9wcm90b19pY29udiIgfCB0ciAtcyAnICcgfCBzZWQgLWUgJ3MvKCAvKC8nYAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2FjX3Q6LQorICAgICAgICAgfSRhbV9jdl9wcm90b19pY29udiIgPiY1CiskYXNfZWNobyAiJHthY190Oi0KKyAgICAgICAgIH0kYW1fY3ZfcHJvdG9faWNvbnYiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIElDT05WX0NPTlNUICRhbV9jdl9wcm90b19pY29udl9hcmcxCitfQUNFT0YKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VULi4uICIgPiY2OyB9CitpZiAke2FtX2N2X2xhbmdpbmZvX2NvZGVzZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KK2ludAorbWFpbiAoKQoreworY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcworZWxzZQorICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCIgPiY1CiskYXNfZWNobyAiJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQiID4mNjsgfQorICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTEFOR0lORk9fQ09ERVNFVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9sb2NhbGVfaCA9IHllczsgdGhlbgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExDX01FU1NBR0VTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBMQ19NRVNTQUdFUy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl92YWxfTENfTUVTU0FHRVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bG9jYWxlLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBMQ19NRVNTQUdFUworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMKK2Vsc2UKKyAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyIgPiY2OyB9CisgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xDX01FU1NBR0VTIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKyAgZmkKKworICAgICAgICAgICAgICAgICAgICAgIGZvciBhY19wcm9nIGluIGJpc29uCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfSU5UTEJJU09OKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJElOVExCSVNPTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19JTlRMQklTT049IiRJTlRMQklTT04iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19JTlRMQklTT049IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0lOVExCSVNPTj0kYWNfY3ZfcHJvZ19JTlRMQklTT04KK2lmIHRlc3QgLW4gIiRJTlRMQklTT04iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTEJJU09OIiA+JjUKKyRhc19lY2hvICIkSU5UTEJJU09OIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJElOVExCSVNPTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorICAgIGFjX3ZlcmNfZmFpbD15ZXMKKyAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHZlcnNpb24gb2YgYmlzb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiBiaXNvbi4uLiAiID4mNjsgfQorICAgIGFjX3Byb2dfdmVyc2lvbj1gJElOVExCSVNPTiAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAncy9eLipHTlUgQmlzb24uKiBcKFswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorICAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgICAxLjJbNi05XSogfCAxLlszLTldWzAtOV0qIHwgWzItOV0uKikKKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworICAgICAgKikgYWNfcHJvZ192ZXJzaW9uPSIkYWNfcHJvZ192ZXJzaW9uLCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAgICBlc2FjCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wcm9nX3ZlcnNpb24iID4mNQorJGFzX2VjaG8gIiRhY19wcm9nX3ZlcnNpb24iID4mNjsgfQorICBmaQorICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KKyAgICBJTlRMQklTT049OgorICBmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmxzOyBVU0VfTkxTPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX05MUz15ZXMKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CisKKworCisKKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9bm8KKworICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIFBPU1VCPQorCisgICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9pbmNsdWRlZF9nZXR0ZXh0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9pbmNsdWRlZF9nZXR0ZXh0OyBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsCitlbHNlCisgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8KK2ZpCisKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIgPiY1CiskYXNfZWNobyAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiID4mNjsgfQorCisgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PSIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorCisKKworCisKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaWJpbnRsLmg+CitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzOworaW50CittYWluICgpCit7CitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIikgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3MKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmM9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiID4mNQorJGFzX2VjaG8gIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiID4mNjsgfQorCisgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisKKworCisgICAgdXNlX2FkZGl0aW9uYWw9eWVzCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpbnRsLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbGliaW50bF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xpYmludGxfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIElOQ0lOVEw9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0naW50bCAnCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfYSIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorICAgICAgICAgICAgICAqL2xpYiB8ICovbGliLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lOVEw9IiR7SU5DSU5UTH0ke0lOQ0lOVEw6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisgICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLVIqKQorICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtbCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICoubGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiCisgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1sJG5hbWUiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbGRpcnM9CisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyIKKyAgICBlbHNlCisgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tUiRmb3VuZF9kaXIiCisgICAgZG9uZQorICBmaQorCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bC4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgorICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpYmludGwuaD4KK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTsKK2ludAorbWFpbiAoKQoreworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dDFfbGliaW50bD15ZXMKK2Vsc2UKKyAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiICE9IHllcyAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpYmludGwuaD4KK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTsKK2ludAorbWFpbiAoKQoreworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIExJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsPXllcworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0MV9saWJpbnRsIiA+JjY7IH0KKyAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmMiID0gInllcyIgXAorICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiID0gInllcyIgXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCisgICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIExJQklOVEw9CisgICAgICAgICAgTFRMSUJJTlRMPQorICAgICAgICAgIElOQ0lOVEw9CisgICAgICAgIGZpCisKKworICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgICAgIExJQklOVEw9Ilwke3RvcF9idWlsZGRpcn0vaW50bC9saWJpbnRsLmEgJExJQklDT05WIgorICAgICAgICBMVExJQklOVEw9Ilwke3RvcF9idWlsZGRpcn0vaW50bC9saWJpbnRsLmEgJExUTElCSUNPTlYiCisgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKworCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNvbmZkZWZzLmgKKworICAgIGVsc2UKKyAgICAgIFVTRV9OTFM9bm8KKyAgICBmaQorICBmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5MUy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9OTFMiID4mNQorJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0KKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiID0gInllcyI7IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X3NvdXJjZSIgPiY1CiskYXNfZWNobyAiJGd0X3NvdXJjZSIgPiY2OyB9CisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHQxX2xpYmludGwiID0gInllcyI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsLi4uICIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElCSU5UTCIgPiY1CiskYXNfZWNobyAiJExJQklOVEwiID4mNjsgfQorCisgIGZvciBlbGVtZW50IGluICRJTkNJTlRMOyBkbworICAgIGhhdmVpdD0KKyAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0kZWxlbWVudCIKKyAgICBmaQorICBkb25lCisKKyAgICAgIGZpCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRURVhUIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRENHRVRURVhUIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKworICAgICAgICBQT1NVQj1wbworICBmaQorCisKKyAgICAgICAgICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgIGZpCisKKworCisKKworICAgICAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKworICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorCisKKyAgICAgICAgSU5TVE9CSkVYVD0ubW8KKworCisgICAgICAgIEdFTkNBVD1nZW5jYXQKKworCisgICAgICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisgICAgZmkKKworCisgICAgICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPQorCisKKworICAgIElOVExMSUJTPSIkTElCSU5UTCIKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBtYWtlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbWFrZS4uLiAiID4mNjsgfQoraWYgJHtfY3ZfZ251X21ha2VfY29tbWFuZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIF9jdl9nbnVfbWFrZV9jb21tYW5kPScnIDsKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfY3ZfZ251X21ha2VfY29tbWFuZCIgPiY1CiskYXNfZWNobyAiJF9jdl9nbnVfbWFrZV9jb21tYW5kIiA+JjY7IH0gOworICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogXCJOb3QgZm91bmRcIiIgPiY1CiskYXNfZWNobyAiXCJOb3QgZm91bmRcIiIgPiY2OyB9OworICAgICAgICBmaQorCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbG47IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0xOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTE4gaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTE49IiRMTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfTE49IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTE4iICYmIGFjX2N2X3BhdGhfTE49ImxuIgorICA7OworZXNhYworZmkKK0xOPSRhY19jdl9wYXRoX0xOCitpZiB0ZXN0IC1uICIkTE4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTE4iID4mNQorJGFzX2VjaG8gIiRMTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXY7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01WKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTVYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTVY9IiRNViIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfTVY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVYiICYmIGFjX2N2X3BhdGhfTVY9Im12IgorICA7OworZXNhYworZmkKK01WPSRhY19jdl9wYXRoX01WCitpZiB0ZXN0IC1uICIkTVYiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVYiID4mNQorJGFzX2VjaG8gIiRNViIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQ1ArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRDUCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9DUD0iJENQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9DUD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9DUCIgJiYgYWNfY3ZfcGF0aF9DUD0iY3AiCisgIDs7Citlc2FjCitmaQorQ1A9JGFjX2N2X3BhdGhfQ1AKK2lmIHRlc3QgLW4gIiRDUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUCIgPiY1CiskYXNfZWNobyAiJENQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicm0iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJtOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9STSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFJNIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1JNPSIkUk0iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1JNPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1JNIiAmJiBhY19jdl9wYXRoX1JNPSJybSIKKyAgOzsKK2VzYWMKK2ZpCitSTT0kYWNfY3ZfcGF0aF9STQoraWYgdGVzdCAtbiAiJFJNIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJNIiA+JjUKKyRhc19lY2hvICIkUk0iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjaG1vZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2htb2Q7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0NITU9EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQ0hNT0QgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQ0hNT0Q9IiRDSE1PRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfQ0hNT0Q9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQ0hNT0QiICYmIGFjX2N2X3BhdGhfQ0hNT0Q9IjoiCisgIDs7Citlc2FjCitmaQorQ0hNT0Q9JGFjX2N2X3BhdGhfQ0hNT0QKK2lmIHRlc3QgLW4gIiRDSE1PRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDSE1PRCIgPiY1CiskYXNfZWNobyAiJENITU9EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FXSys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInNlZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc2VkOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRTRUQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfU0VEPSIkU0VEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIiAmJiBhY19jdl9wYXRoX1NFRD0ic2VkIgorICA7OworZXNhYworZmkKK1NFRD0kYWNfY3ZfcGF0aF9TRUQKK2lmIHRlc3QgLW4gIiRTRUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU0VEIiA+JjUKKyRhc19lY2hvICIkU0VEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEVSTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBFUkwgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEVSTD0iJFBFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BFUkw9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEVSTCIgJiYgYWNfY3ZfcGF0aF9QRVJMPSJwZXJsIgorICA7OworZXNhYworZmkKK1BFUkw9JGFjX2N2X3BhdGhfUEVSTAoraWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTCIgPiY1CiskYXNfZWNobyAiJFBFUkwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsZGNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGRjb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0xEQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTERDT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTERDT05GSUc9IiRMRENPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfTERDT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTERDT05GSUciICYmIGFjX2N2X3BhdGhfTERDT05GSUc9IjoiCisgIDs7Citlc2FjCitmaQorTERDT05GSUc9JGFjX2N2X3BhdGhfTERDT05GSUcKK2lmIHRlc3QgLW4gIiRMRENPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRENPTkZJRyIgPiY1CiskYXNfZWNobyAiJExEQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iYXIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibWFrZWluZm8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1ha2VpbmZvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19NQUtFSU5GTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNQUtFSU5GTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQUtFSU5GTz0iJE1BS0VJTkZPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTUFLRUlORk89Im1ha2VpbmZvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BS0VJTkZPPSRhY19jdl9wcm9nX01BS0VJTkZPCitpZiB0ZXN0IC1uICIkTUFLRUlORk8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFLRUlORk8iID4mNQorJGFzX2VjaG8gIiRNQUtFSU5GTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0ICJfJE1BS0VJTkZPIiA9ICJfIjsgdGhlbgorICAgIE1BS0VJTkZPPSJAZWNobyBNYWtlaW5mbyBpcyBtaXNzaW5nLiBJbmZvIGRvY3VtZW50YXRpb24gd2lsbCBub3QgYmUgYnVpbHQuO3RydWUiCitlbHNlCisgICAgY2FzZSAiJE1BS0VJTkZPIiBpbgorICAgICAgKi9taXNzaW5nLiopCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzoKKyoqKiBNYWtlaW5mbyBpcyBtaXNzaW5nLiBJbmZvIGRvY3VtZW50YXRpb24gd2lsbCBub3QgYmUgYnVpbHQuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CisqKiogTWFrZWluZm8gaXMgbWlzc2luZy4gSW5mbyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IGJlIGJ1aWx0LiIgPiYyO30KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIDs7CisgICAgZXNhYworZmkKKworCisjIFNlZSBpZiB3ZSBuZWVkIGEgc2VwYXJhdGUgbmF0aXZlIGNvbXBpbGVyLgoraWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0gbm87IHRoZW4KKyAgQlVJTERfQ0M9IiRDQyIKKworZWxzZQorICBmb3IgYWNfcHJvZyBpbiBnY2MgY2MKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19CVUlMRF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRCVUlMRF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19CVUlMRF9DQz0iJEJVSUxEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQlVJTERfQ0M9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0JVSUxEX0NDPSRhY19jdl9wcm9nX0JVSUxEX0NDCitpZiB0ZXN0IC1uICIkQlVJTERfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQlVJTERfQ0MiID4mNQorJGFzX2VjaG8gIiRCVUlMRF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRCVUlMRF9DQyIgJiYgYnJlYWsKK2RvbmUKKworZmkKK2ZvciBhY19oZWFkZXIgaW4gIAlkaXJlbnQuaCAJZXJybm8uaCAJZXhlY2luZm8uaCAJZ2V0b3B0LmggCW1hbGxvYy5oIAltbnRlbnQuaCAJcGF0aHMuaCAJc2VtYXBob3JlLmggCXNldGptcC5oIAlzaWduYWwuaCAJc3RkYXJnLmggCXN0ZGludC5oIAlzdGRsaWIuaCAJdGVybWlvcy5oIAl0ZXJtaW8uaCAJdW5pc3RkLmggCXV0aW1lLmggCWxpbnV4L2ZhbGxvYy5oIAlsaW51eC9mZC5oIAlsaW51eC9tYWpvci5oIAlsaW51eC9sb29wLmggCW5ldC9pZl9kbC5oIAluZXRpbmV0L2luLmggCXN5cy9kaXNrbGFiZWwuaCAJc3lzL2ZpbGUuaCAJc3lzL2lvY3RsLmggCXN5cy9ta2Rldi5oIAlzeXMvbW1hbi5oIAlzeXMvcHJjdGwuaCAJc3lzL3F1ZXVlLmggCXN5cy9yZXNvdXJjZS5oIAlzeXMvc2VsZWN0LmggCXN5cy9zb2NrZXQuaCAJc3lzL3NvY2tpby5oIAlzeXMvc3RhdC5oIAlzeXMvc3lzY2FsbC5oIAlzeXMvc3lzbWFjcm9zLmggCXN5cy90aW1lLmggCXN5cy90eXBlcy5oIAlzeXMvdW4uaCAJc3lzL3dhaXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmb3IgYWNfaGVhZGVyIGluIHN5cy9kaXNrLmggc3lzL21vdW50LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmb3IgYWNfaGVhZGVyIGluIG5ldC9pZi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJuZXQvaWYuaCIgImFjX2N2X2hlYWRlcl9uZXRfaWZfaCIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRfaWZfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05FVF9JRl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZvciBhY19mdW5jIGluIHZwcmludGYKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAidnByaW50ZiIgImFjX2N2X2Z1bmNfdnByaW50ZiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY192cHJpbnRmIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVlBSSU5URiAxCitfQUNFT0YKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiX2RvcHJudCIgImFjX2N2X2Z1bmNfX2RvcHJudCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19fZG9wcm50IiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RPUFJOVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZmkKK2RvbmUKKworCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBkaXJlbnQiICJkX3JlY2xlbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfZGlyZW50X2RfcmVjbGVuIiAiI2luY2x1ZGUgPGRpcmVudC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2RpcmVudF9kX3JlY2xlbiIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SRUNMRU5fRElSRU5UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzc2l6ZV90IiAiYWNfY3ZfdHlwZV9zc2l6ZV90IiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVFlQRV9TU0laRV9UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJsbHNlZWsiICJhY19jdl9oYXZlX2RlY2xfbGxzZWVrIiAiI2luY2x1ZGUgPHVuaXN0ZC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfbGxzZWVrIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xMU0VFS19QUk9UT1RZUEUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImxzZWVrNjQiICJhY19jdl9oYXZlX2RlY2xfbHNlZWs2NCIgIiNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKwkJICNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCQkgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfbHNlZWs2NCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MU0VFSzY0X1BST1RPVFlQRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9zaG9ydCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHNob3J0KSkiICJhY19jdl9zaXplb2Zfc2hvcnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zaG9ydD0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjY7IH0KKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1NIT1JUICRhY19jdl9zaXplb2Zfc2hvcnQKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9pbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnQpKSIgImFjX2N2X3NpemVvZl9pbnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2ludD0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9pbnQiID4mNjsgfQorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50CitfQUNFT0YKKworCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9sb25nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZyIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZworX0FDRU9GCisKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcgbG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nX2xvbmcKK19BQ0VPRgorCisKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygb2ZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2Zfb2ZmX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChvZmZfdCkpIiAiYWNfY3Zfc2l6ZW9mX29mZl90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfb2ZmX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAob2ZmX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfb2ZmX3Q9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9PRkZfVCAkYWNfY3Zfc2l6ZW9mX29mZl90CitfQUNFT0YKKworCitTSVpFT0ZfU0hPUlQ9JGFjX2N2X3NpemVvZl9zaG9ydAorU0laRU9GX0lOVD0kYWNfY3Zfc2l6ZW9mX2ludAorU0laRU9GX0xPTkc9JGFjX2N2X3NpemVvZl9sb25nCitTSVpFT0ZfTE9OR19MT05HPSRhY19jdl9zaXplb2ZfbG9uZ19sb25nCitTSVpFT0ZfT0ZGX1Q9JGFjX2N2X3NpemVvZl9vZmZfdAorCisKKworCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwgY29tcGlsZXIuCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX0FQUExFX0NDX18KKwkgICAgICAgbm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXIKKwkgICAgICNlbmRpZgorCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJCSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworaW50CittYWluICgpCit7CisjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiA8bGltaXRzLmg+IGRlZmluZXMgX0xJVFRMRV9FTkRJQU4gb3IgX0JJR19FTkRJQU4gKGUuZy4sIFNvbGFyaXMpLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBUcnkgdG8gZ3Vlc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworCSAgICBmaQorCSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKwkgICAgICBlbHNlCisJCSMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisJICAgICAgZmkKKwkgICAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisJICAgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCisJICAgICB1bmlvbgorCSAgICAgeworCSAgICAgICBsb25nIGludCBsOworCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworCSAgICAgfSB1OworCSAgICAgdS5sID0gMTsKKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluICMoCisgICB5ZXMpCisgICAgICRhc19lY2hvICIjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxIiA+PmNvbmZkZWZzLmgKKzs7ICMoCisgICBubykKKyAgICAgIDs7ICMoCisgICB1bml2ZXJzYWwpCisKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OyAjKAorICAgKikKKyAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gZW5kaWFubmVzcworIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiAiJExJTkVOTyIgNSA7OworIGVzYWMKKworQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCitBU01fVFlQRVNfSEVBREVSPS4vYXNtX3R5cGVzLmgKKworZWNobyAiLyogVGhlc2UgZGVmaW5lcyBhcmUgbmVlZGVkIGZvciB0aGUgcHVibGljIGV4dDJmcy5oIGhlYWRlciBmaWxlICovIiBcCisgICAgID4gcHVibGljX2NvbmZpZy5oCitpZiBncmVwIEhBVkVfU1lTX1RZUEVTX0ggY29uZmRlZnMuaCA+IHRtcF9jb25maWcuJCQ7IHRoZW4KKyAgdW5pcSB0bXBfY29uZmlnLiQkID4+IHB1YmxpY19jb25maWcuaAorZWxzZQorICBlY2hvICIjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSCIgPj4gcHVibGljX2NvbmZpZy5oCitmaQoraWYgZ3JlcCBXT1JEU19CSUdFTkRJQU4gY29uZmRlZnMuaCA+IHRtcF9jb25maWcuJCQ7IHRoZW4KKyAgdW5pcSB0bXBfY29uZmlnLiQkID4+IHB1YmxpY19jb25maWcuaAorZWxzZQorICBlY2hvICIjdW5kZWYgV09SRFNfQklHRU5ESUFOIiA+PiBwdWJsaWNfY29uZmlnLmgKK2ZpCitybSAtZiB0bXBfY29uZmlnLiQkCitQVUJMSUNfQ09ORklHX0hFQURFUj0uL3B1YmxpY19jb25maWcuaAorCitmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImludHR5cGVzLmgiICJhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50cHRyX3QiICJhY19jdl90eXBlX2ludHB0cl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50cHRyX3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9JTlRQVFJfVCAxCitfQUNFT0YKKworCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHN0YXQgaGFzIGEgc3RfZmxhZ3MgZmllbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJ1Y3Qgc3RhdCBoYXMgYSBzdF9mbGFncyBmaWVsZC4uLiAiID4mNjsgfQoraWYgJHtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzdGF0IHN0YXQ7IHN0YXQuc3RfZmxhZ3MgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9eWVzCitlbHNlCisgIGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFncyIgPiY1CiskYXNfZWNobyAiJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3MiID4mNjsgfQoraWYgdGVzdCAiJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3MiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdF9mbGFncyBmaWVsZCBpcyB1c2VmdWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdF9mbGFncyBmaWVsZCBpcyB1c2VmdWwuLi4gIiA+JjY7IH0KKyAgaWYgJHtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzdGF0IHN0YXQ7IHN0YXQuc3RfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3NfaW1tdXQ9eWVzCitlbHNlCisgIGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3NfaW1tdXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0IiA+JjUKKyRhc19lY2hvICIkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCIgPiY2OyB9CisgIGlmIHRlc3QgIiRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0IiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUQVRfRkxBR1MgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkciIgInNhX2xlbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuIiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NBX0xFTiAxCitfQUNFT0YKKworZmkKKworaWYgdGVzdCAtbiAiJEJMS0lEX0NNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGJsa2lkX3Byb2JlX2FsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGJsa2lkX3Byb2JlX2FsbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfYmxraWRfcHJvYmVfYWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYmxraWRfcHJvYmVfYWxsICgpOworaW50CittYWluICgpCit7CityZXR1cm4gYmxraWRfcHJvYmVfYWxsICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIGJsa2lkOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfYmxraWRfcHJvYmVfYWxsKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfYmxraWRfcHJvYmVfYWxsPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfYmxraWRfcHJvYmVfYWxsIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2Jsa2lkX3Byb2JlX2FsbCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9ibGtpZF9wcm9iZV9hbGwKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZmkKK2ZvciBhY19mdW5jIGluICAJX19zZWN1cmVfZ2V0ZW52IAliYWNrdHJhY2UgCWJsa2lkX3Byb2JlX2dldF90b3BvbG9neSAJY2hmbGFncyAJZmFsbG9jYXRlIAlmYWxsb2NhdGU2NCAJZmNob3duIAlmZGF0YXN5bmMgCWZzdGF0NjQgCWZ0cnVuY2F0ZTY0IAlnZXRkdGFibGVzaXplIAlnZXRtbnRpbmZvIAlnZXRwd3VpZF9yIAlnZXRybGltaXQgCWdldHJ1c2FnZSAJanJhbmQ0OCAJbGxzZWVrIAlsc2VlazY0IAltYWxsaW5mbyAJbWJzdG93Y3MgCW1lbWFsaWduIAltbWFwIAltc3luYyAJbmFub3NsZWVwIAlvcGVuNjQgCXBhdGhjb25mIAlwb3NpeF9mYWR2aXNlIAlwb3NpeF9tZW1hbGlnbiAJcHJjdGwgCXNlY3VyZV9nZXRlbnYgCXNldG1udGVudCAJc2V0cmVzZ2lkIAlzZXRyZXN1aWQgCXNyYW5kb20gCXN0cmNhc2VjbXAgCXN0cmR1cCAJc3RybmxlbiAJc3RycHRpbWUgCXN0cnRvdWxsIAlzeW5jX2ZpbGVfcmFuZ2UgCXN5c2NvbmYgCXVzbGVlcCAJdXRpbWUgCXZhbGxvYworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK1NPQ0tFVF9MSUI9JycKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNvY2tldCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNvY2tldCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc29ja2V0X3NvY2tldD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA9IHh5ZXM7IHRoZW4gOgorICBTT0NLRVRfTElCPS1sc29ja2V0CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9wdHJlc2V0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvcHRyZXNldC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX29wdHJlc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJvcHRyZXNldCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9vcHRyZXNldD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV9vcHRyZXNldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX29wdHJlc2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9vcHRyZXNldCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oYXZlX29wdHJlc2V0ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfT1BUUkVTRVQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK1NFTV9JTklUX0xJQj0nJworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2VtX2luaXQiICJhY19jdl9mdW5jX3NlbV9pbml0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NlbV9pbml0IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNlbV9pbml0IGluIC1scHRocmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wdGhyZWFkX3NlbV9pbml0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwdGhyZWFkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZW1faW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNlbV9pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9wdGhyZWFkX3NlbV9pbml0PXllcworZWxzZQorICBhY19jdl9saWJfcHRocmVhZF9zZW1faW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9zZW1faW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3NlbV9pbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfc2VtX2luaXQiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0VNX0lOSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgCVNFTV9JTklUX0xJQj0tbHB0aHJlYWQKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxydC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcnRfc2VtX2luaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJ0ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZW1faW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNlbV9pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ydF9zZW1faW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3J0X3NlbV9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9zZW1faW5pdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ydF9zZW1faW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydF9zZW1faW5pdCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TRU1fSU5JVCAxIiA+PmNvbmZkZWZzLmgKKworICAJU0VNX0lOSVRfTElCPS1scnQKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2VtX2luaXQgaW4gLWxwb3NpeDQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNlbV9pbml0IGluIC1scG9zaXg0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wb3NpeDRfc2VtX2luaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBvc2l4NCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2VtX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzZW1faW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcG9zaXg0X3NlbV9pbml0PXllcworZWxzZQorICBhY19jdl9saWJfcG9zaXg0X3NlbV9pbml0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wb3NpeDRfc2VtX2luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcG9zaXg0X3NlbV9pbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Bvc2l4NF9zZW1faW5pdCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TRU1fSU5JVCAxIiA+PmNvbmZkZWZzLmgKKworICAJU0VNX0lOSVRfTElCPS1scG9zaXg0CitmaQorCitmaQorCitmaQorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bmlmaWVkIGRpZmYgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bmlmaWVkIGRpZmYgb3B0aW9uLi4uICIgPiY2OyB9CitpZiBkaWZmIC11ICQwICQwID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICBVTklfRElGRl9PUFRTPS11CitlbHNlCisgICBVTklfRElGRl9PUFRTPS1jCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVTklfRElGRl9PUFRTIiA+JjUKKyRhc19lY2hvICIkVU5JX0RJRkZfT1BUUyIgPiY2OyB9CisKK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0VYVDJfSU9DVExTIDEiID4+Y29uZmRlZnMuaAorCisJOzsKK2VzYWMKK0xJTlVYX0NNVD0iIyIKK0NZR1dJTl9DTVQ9IiMiCitVTklYX0NNVD0KK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqKQorCUxJTlVYX0NNVD0KKwk7OworY3lnd2luKQorCUNZR1dJTl9DTVQ9CisJVU5JWF9DTVQ9IiMiCisJOzsKK2VzYWMKKworCisKK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpCisJaWYgdGVzdCAiJHByZWZpeCIgPSBOT05FIC1hICIkcm9vdF9wcmVmaXgiID0gTk9ORSA7IHRoZW4KKwkJcm9vdF9wcmVmaXg9IiI7CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPbiAkaG9zdF9vcyBzeXN0ZW1zLCByb290X3ByZWZpeCBkZWZhdWx0cyB0byAnJyIgPiY1CiskYXNfZWNobyAiT24gJGhvc3Rfb3Mgc3lzdGVtcywgcm9vdF9wcmVmaXggZGVmYXVsdHMgdG8gJyciID4mNjsgfQorCWZpCisJOzsKK2VzYWMKK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpCisJaWYgdGVzdCAiJHByZWZpeCIgPSBOT05FIDsgdGhlbgorCQlwcmVmaXg9Ii91c3IiOworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogT24gJGhvc3Rfb3Mgc3lzdGVtcywgcHJlZml4IGRlZmF1bHRzIHRvIC91c3IiID4mNQorJGFzX2VjaG8gIk9uICRob3N0X29zIHN5c3RlbXMsIHByZWZpeCBkZWZhdWx0cyB0byAvdXNyIiA+JjY7IH0KKwkJaWYgdGVzdCAiJG1hbmRpciIgPSAnJHtwcmVmaXh9L21hbicgOyB0aGVuCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogLi4uYW5kIG1hbmRpciBkZWZhdWx0cyB0byAvdXNyL3NoYXJlL21hbiIgPiY1CiskYXNfZWNobyAiLi4uYW5kIG1hbmRpciBkZWZhdWx0cyB0byAvdXNyL3NoYXJlL21hbiIgPiY2OyB9CisJCQltYW5kaXI9L3Vzci9zaGFyZS9tYW4KKwkJZmkKKwlmaQorOzsKK2VzYWMKK2lmIHRlc3QgIiRyb290X3ByZWZpeCIgPSBOT05FIDsgdGhlbgorCWlmIHRlc3QgIiRwcmVmaXgiID0gTk9ORSA7IHRoZW4KKwkJcm9vdF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKwllbHNlCisJCXJvb3RfcHJlZml4PSIkcHJlZml4IgorCWZpCisJcm9vdF9iaW5kaXI9JGJpbmRpcgorCXJvb3Rfc2JpbmRpcj0kc2JpbmRpcgorCXJvb3RfbGliZGlyPSRsaWJkaXIKKwlyb290X3N5c2NvbmZkaXI9JHN5c2NvbmZkaXIKK2Vsc2UKKwlyb290X2JpbmRpcj0nJHtyb290X3ByZWZpeH0vYmluJworCXJvb3Rfc2JpbmRpcj0nJHtyb290X3ByZWZpeH0vc2JpbicKKwlyb290X2xpYmRpcj0nJHtyb290X3ByZWZpeH0vbGliJworCXJvb3Rfc3lzY29uZmRpcj0nJHtyb290X3ByZWZpeH0vZXRjJworZmkKK2lmIHRlc3QgIiRiaW5kaXIiICE9ICcke2V4ZWNfcHJlZml4fS9iaW4nOyB0aGVuCisgICAgcm9vdF9iaW5kaXI9JGJpbmRpcgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBTZXR0aW5nIHJvb3RfYmluZGlyIHRvICRyb290X2JpbmRpciIgPiY1CiskYXNfZWNobyAiU2V0dGluZyByb290X2JpbmRpciB0byAkcm9vdF9iaW5kaXIiID4mNjsgfQorZmkKK2lmIHRlc3QgIiRzYmluZGlyIiAhPSAnJHtleGVjX3ByZWZpeH0vc2Jpbic7IHRoZW4KKyAgICByb290X3NiaW5kaXI9JHNiaW5kaXIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogU2V0dGluZyByb290X3NiaW5kaXIgdG8gJHJvb3Rfc2JpbmRpciIgPiY1CiskYXNfZWNobyAiU2V0dGluZyByb290X3NiaW5kaXIgdG8gJHJvb3Rfc2JpbmRpciIgPiY2OyB9CitmaQoraWYgdGVzdCAiJGxpYmRpciIgIT0gJyR7ZXhlY19wcmVmaXh9L2xpYic7IHRoZW4KKyAgICByb290X2xpYmRpcj0kbGliZGlyCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFNldHRpbmcgcm9vdF9saWJkaXIgdG8gJHJvb3RfbGliZGlyIiA+JjUKKyRhc19lY2hvICJTZXR0aW5nIHJvb3RfbGliZGlyIHRvICRyb290X2xpYmRpciIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHN5c2NvbmZkaXIiICE9ICcke3ByZWZpeH0vZXRjJzsgdGhlbgorICAgIHJvb3Rfc3lzY29uZmRpcj0kc3lzY29uZmRpcgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBTZXR0aW5nIHJvb3Rfc3lzY29uZmRpciB0byAkcm9vdF9zeXNjb25mZGlyIiA+JjUKKyRhc19lY2hvICJTZXR0aW5nIHJvb3Rfc3lzY29uZmRpciB0byAkcm9vdF9zeXNjb25mZGlyIiA+JjY7IH0KK2ZpCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW11bHRpYXJjaCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbXVsdGlhcmNoK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9tdWx0aWFyY2g7IGxpYmRpcj0kbGliZGlyLyR3aXRodmFsCityb290X2xpYmRpcj0kcm9vdF9saWJkaXIvJHdpdGh2YWwKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBjYW4gbGluayB3aXRoIC1zdGF0aWMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBjYW4gbGluayB3aXRoIC1zdGF0aWMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBTQVZFX0xERkxBR1M9JExERkxBR1M7IExERkxBR1M9IiRMREZMQUdTIC1zdGF0aWMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworZmZsdXNoKHN0ZG91dCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWM9eWVzCitlbHNlCisgIGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xERkxBR1M9JFNBVkVfTERGTEFHUworZmkKKworY2FzZSAiJGhvc3Rfb3MiIGluCitzb2xhcmlzMi4qKQorCWFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljPW5vCis7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljIiA+JjY7IH0KK0xERkxBR19TVEFUSUM9CitpZiB0ZXN0ICRhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYyA9IHllczsgdGhlbgorCUxERkxBR19TVEFUSUM9LXN0YXRpYworZmkKKworY2FzZSAiJGhvc3Rfb3MiIGluCitkYXJ3aW4qKQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBVc2luZyBBcHBsZSBEYXJ3aW4gLyBHTlUgbGliaW50bCB3b3JrYXJvdW5kIiA+JjUKKyRhc19lY2hvICJVc2luZyBBcHBsZSBEYXJ3aW4gLyBHTlUgbGliaW50bCB3b3JrYXJvdW5kIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgX0lOVExfUkVESVJFQ1RfTUFDUk9TIDEiID4+Y29uZmRlZnMuaAorCisJOzsKK2VzYWMKK1NTX0RJUj1gY2QgJHtzcmNkaXJ9L2xpYi9zczsgcHdkYAorRVRfRElSPWBjZCAke3NyY2Rpcn0vbGliL2V0OyBwd2RgCisKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgOyB0aGVuCisgIERPX1RFU1RfU1VJVEU9CitlbHNlCisgIERPX1RFU1RfU1VJVEU9Y2hlY2sKK2ZpCisKK0lOQ0xVREVTPSctSS4gLUkkKHRvcF9idWlsZGRpcikvbGliIC1JJCh0b3Bfc3JjZGlyKS9saWInCitpZiB0ZXN0IC1uICIkQ1BQRkxBR1MiIDsgdGhlbgorCUlOQ0xVREVTPSIkSU5DTFVERVMgJENQUEZMQUdTIgorZmkKK2lmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSAieWVzIiA7IHRoZW4KKwlJTkNMVURFUz0kSU5DTFVERVMnIC1JJCh0b3BfYnVpbGRkaXIpL2ludGwgLUkkKHRvcF9zcmNkaXIpL2ludGwnCitmaQorCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICAgQlVJTERfQ0ZMQUdTPSIkQ0ZMQUdTICRDUFBGTEFHUyIKKyAgIEJVSUxEX0xERkxBR1M9IiRMREZMQUdTIgorZWxzZQorICAgQlVJTERfQ0ZMQUdTPQorICAgQlVJTERfTERGTEFHUz0KK2ZpCisKKwordGVzdCAtZCBsaWIgfHwgbWtkaXIgbGliCit0ZXN0IC1kIGluY2x1ZGUgfHwgbWtkaXIgaW5jbHVkZQordGVzdCAtZCBpbmNsdWRlL2xpbnV4IHx8IG1rZGlyIGluY2x1ZGUvbGludXgKK3Rlc3QgLWQgaW5jbHVkZS9hc20gfHwgbWtkaXIgaW5jbHVkZS9hc20KK2ZvciBpIGluIE1DT05GSUcgTWFrZWZpbGUgZTJmc3Byb2dzLnNwZWMgXAorCXV0aWwvTWFrZWZpbGUgdXRpbC9zdWJzdC5jb25mIHV0aWwvZ2VuLXRhcmJhbGwgdXRpbC9pbnN0YWxsLXN5bWxpbmsgXAorCWxpYi9ldC9NYWtlZmlsZSBsaWIvc3MvTWFrZWZpbGUgbGliL2UycC9NYWtlZmlsZSBcCisJbGliL2V4dDJmcy9NYWtlZmlsZSBsaWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisJbGliL3V1aWQvTWFrZWZpbGUgbGliL3V1aWQvdXVpZF90eXBlcy5oIFwKKwlsaWIvYmxraWQvTWFrZWZpbGUgbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmggbGliL3F1b3RhL01ha2VmaWxlIFwKKwlsaWIvc3Mvc3MucGMgbGliL3V1aWQvdXVpZC5wYyBsaWIvZXQvY29tX2Vyci5wYyBcCisJbGliL2UycC9lMnAucGMgbGliL2Jsa2lkL2Jsa2lkLnBjIGxpYi9leHQyZnMvZXh0MmZzLnBjIFwKKwltaXNjL01ha2VmaWxlIGV4dDJlZC9NYWtlZmlsZSBlMmZzY2svTWFrZWZpbGUgXAorCWRlYnVnZnMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUgdGVzdHMvcHJvZ3MvTWFrZWZpbGUgXAorCXJlc2l6ZS9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBcCisJaW50bC9saWJnbnVpbnRsLmggcG8vTWFrZWZpbGUuaW4gOyBkbworCWlmIHRlc3QgLWQgYGRpcm5hbWUgJHtzcmNkaXJ9LyRpYCA7IHRoZW4KKwkJb3V0bGlzdD0iJG91dGxpc3QgJGkiCisJZmkKK2RvbmUKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyAkb3V0bGlzdCIKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAtaCAiJGNhY2hlX2ZpbGUiOyB0aGVuCisJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoCisgICAgICAgICovKiB8ID86KikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYKKwkgIG12IC1mICIkY2FjaGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoCisgICAgICAgICopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZmkKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCitERUZTPS1ESEFWRV9DT05GSUdfSAorCithY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorVT0KK2ZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KKyAgYXNfZm5fYXBwZW5kIGFjX2xpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKKyAgYXNfZm5fYXBwZW5kIGFjX2x0bGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCitkb25lCitMSUJPQkpTPSRhY19saWJvYmpzCisKK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisKKworCisKKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgorYWNfd3JpdGVfZmFpbD0wCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCisKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wUicKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgJGFzX21lLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCitfQUNFT0YKKworY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byB0aGUgcGFja2FnZSBwcm92aWRlci4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK2NvbmZpZy5zdGF0dXMKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3aworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0/KikKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKKyAgICBhY19vcHRpb249JDEKKyAgICBhY19vcHRhcmc9JDIKKyAgICBhY19zaGlmdD1zaGlmdAorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgYWNfY3NfcmVjaGVjaz06IDs7CisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKyAgICBhY19jc19zaWxlbnQ9OiA7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CisKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorCitpZiAkYWNfY3Nfc2lsZW50OyB0aGVuCisgIGV4ZWMgNj4vZGV2L251bGwKKyAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKyAgc2V0IFggJFNIRUxMICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAiXCRAIgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKKyAgJGFzX2VjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIworIyBJTklULUNPTU1BTkRTCisjCisjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKyAgICAjIGZyb20gYXV0b21ha2UuCisgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgImxpYi9jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgbGliL2NvbmZpZy5oIiA7OworICAgICJkZWZhdWx0LTEiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdC0xIiA7OworICAgICIkb3V0bGlzdCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkb3V0bGlzdCIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworaWYgJEFXSyAnQkVHSU4geyBnZXRsaW5lIDwiL2Rldi9udWxsIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgIGFjX2NzX2F3a19nZXRsaW5lPToKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0KKyAgYWNfY3NfYXdrX3JlYWRfZmlsZT0nCisgICAgICB3aGlsZSAoKGdldGxpbmUgYWxpbmUgPCAoRltrZXldKSkgPiAwKQorCXByaW50KGFsaW5lKQorICAgICAgY2xvc2UoRltrZXldKScKKyAgYWNfY3NfYXdrX3BpcGVfZmluaT0KK2Vsc2UKKyAgYWNfY3NfYXdrX2dldGxpbmU9ZmFsc2UKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0icHJpbnQgXCJjYXQgPDwnfCNfISFfI3wnICYmXCIiCisgIGFjX2NzX2F3a19yZWFkX2ZpbGU9JworICAgICAgcHJpbnQgInwjXyEhXyN8IgorICAgICAgcHJpbnQgImNhdCAiIEZba2V5XSAiICYmIgorICAgICAgJyRhY19jc19hd2tfcGlwZV9pbml0CisgICMgVGhlIGZpbmFsIGA6JyBmaW5pc2hlcyB0aGUgQU5EIGxpc3QuCisgIGFjX2NzX2F3a19waXBlX2Zpbmk9J0VORCB7IHByaW50ICJ8I18hIV8jfCI7IHByaW50ICI6IiB9JworZmkKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKyMgQ3JlYXRlIGNvbW1hbmRzIHRvIHN1YnN0aXR1dGUgZmlsZSBvdXRwdXQgdmFyaWFibGVzLgoreworICBlY2hvICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEiICYmCisgIGVjaG8gJ2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYnICYmCisgIGVjaG8gIiRhY19zdWJzdF9maWxlcyIgfCBzZWQgJ3MvLiovRlsiJiJdPSIkJiIvJyAmJgorICBlY2hvICJfQUNBV0siICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJGZpbGVzLnNoICYmCisuIC4vY29uZiQkZmlsZXMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorcm0gLWYgY29uZiQkZmlsZXMuc2gKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKyAgXCRhY19jc19hd2tfcGlwZV9pbml0Cit9Cit7CisgIGxpbmUgPSAkIDAKKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisgIHN1YnN0ZWQgPSAwCisgIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworICAgIGtleSA9IGZpZWxkW2ldCisgICAga2V5bGVuID0gbGVuZ3RoKGtleSkKKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworICAgICAgdmFsdWUgPSBTW2tleV0KKyAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisgICAgICBzdWJzdGVkID0gMQorICAgIH0gZWxzZQorICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKyAgfQorICBpZiAobmZpZWxkcyA9PSAzICYmICFzdWJzdGVkKSB7CisgICAga2V5ID0gZmllbGRbMl0KKyAgICBpZiAoRltrZXldICE9ICIiICYmIGxpbmUgfiAvXlsJIF0qQC4qQFsJIF0qJC8pIHsKKyAgICAgIFwkYWNfY3NfYXdrX3JlYWRfZmlsZQorICAgICAgbmV4dAorICAgIH0KKyAgfQorICBwcmludCBsaW5lCit9CitcJGFjX2NzX2F3a19waXBlX2ZpbmkKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisKKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKworICBjYXNlICRhY19tb2RlIGluCisgIDpGKQorICAjCisgICMgQ09ORklHX0ZJTEUKKyAgIworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKKyAgZXNhYworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKyMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgorYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CisgIHAKKyAgcQorfQorL0BkYXRhZGlyQC9wCisvQGRvY2RpckAvcAorL0BpbmZvZGlyQC9wCisvQGxvY2FsZWRpckAvcAorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCisqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCisgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKyAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKyAgcyZAaW5mb2RpckAmJGluZm9kaXImZworICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworICBzJkBtYW5kaXJAJiRtYW5kaXImZworICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworZXNhYworX0FDRU9GCisKKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgorJGV4dHJhc3ViCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CitzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CitzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CitzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CitzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKKyRhY19kYXRhcm9vdGRpcl9oYWNrCisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfAoraWYgJGFjX2NzX2F3a19nZXRsaW5lOyB0aGVuCisgICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siCitlbHNlCisgICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siIHwgJFNIRUxMCitmaSBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKwordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAorICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9CisKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZWZhdWx0LTEiOkMpCisgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAgICAgZXNhYworICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworICAgICAgICAgIGZpCisgICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKyAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQorICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgICAgICAgICAjIENvbXB1dGUgR01PRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisgICAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgUE9GSUxFUz0KKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorICAgICAgICAgIERVTU1ZUE9GSUxFUz0KKyAgICAgICAgICBHTU9GSUxFUz0KKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCisgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKyAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAgIElOU1RfTElOR1VBUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgICB1c2VpdD1ubworICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIENBVEFMT0dTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworICAgICAgICAgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIgorICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVzLSo7IGRvCisgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisgICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKKyAgICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZSA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KK2ZpCisKK2lmIHRlc3QgLWYgdXRpbC9nZW4tdGFyYmFsbDsgdGhlbiBjaG1vZCAreCB1dGlsL2dlbi10YXJiYWxsOyBmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbmZpZ3VyZS5pbiBiL2UyZnNwcm9ncy9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzOWNjOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9jb25maWd1cmUuaW4KQEAgLTAsMCArMSwxMzE2IEBACitBQ19JTklUKHZlcnNpb24uaCkKK0FDX1BSRVJFUSgyLjU0KQorQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorQUNfQ09ORklHX0hFQURFUlMoW2xpYi9jb25maWcuaF0pCitBSF9CT1RUT00oWyNpbmNsdWRlICJkaXJwYXRocy5oIl0pCitNQ09ORklHPS4vTUNPTkZJRworQUNfU1VCU1RfRklMRShNQ09ORklHKQorQklOQVJZX1RZUEU9YmluCitkbmwKK2RubCBUaGlzIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCB0aGUgZGF0ZS4uLi4KK2RubAorRTJGU1BST0dTX1ZFUlNJT049YGdyZXAgRTJGU1BST0dTX1ZFUlNJT04gJHtzcmNkaXJ9L3ZlcnNpb24uaCAgXAorCXwgYXdrICd7cHJpbnQgJDN9JyB8IHRyIFwiICIgIiB8IGF3ayAne3ByaW50ICQxfSdgCitEQVRFPWBncmVwIEUyRlNQUk9HU19EQVRFICR7c3JjZGlyfS92ZXJzaW9uLmggfCBhd2sgJ3twcmludCAkM30nIFwKKwl8IHRyIFwiICIgImAKK0UyRlNQUk9HU19EQVk9YGVjaG8gJERBVEUgfCBhd2sgLUYtICd7cHJpbnQgJDF9J2AKK01PTlRIPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQyfSdgCitZRUFSPWBlY2hvICREQVRFIHwgYXdrIC1GLSAne3ByaW50ICQzfSdgCisKK2lmIGV4cHIgJFlFQVIgIj4iIDE5MDAgPiAvZGV2L251bGwgOyB0aGVuCisJRTJGU1BST0dTX1lFQVI9JFlFQVIKK2VsaWYgZXhwciAkWUVBUiAiPiIgOTAgPi9kZXYvbnVsbCA7IHRoZW4KKwlFMkZTUFJPR1NfWUVBUj0xOSRZRUFSCitlbHNlCisJRTJGU1BST0dTX1lFQVI9MjAkWUVBUgorZmkKKworY2FzZSAkTU9OVEggaW4KK0phbikJTU9OVEhfTlVNPTAxOyBFMkZTUFJPR1NfTU9OVEg9IkphbnVhcnkiIDs7CitGZWIpCU1PTlRIX05VTT0wMjsgRTJGU1BST0dTX01PTlRIPSJGZWJydWFyeSIgOzsKK01hcikJTU9OVEhfTlVNPTAzOyBFMkZTUFJPR1NfTU9OVEg9Ik1hcmNoIiA7OworQXByKQlNT05USF9OVU09MDQ7IEUyRlNQUk9HU19NT05USD0iQXByaWwiIDs7CitNYXkpCU1PTlRIX05VTT0wNTsgRTJGU1BST0dTX01PTlRIPSJNYXkiIDs7CitKdW4pCU1PTlRIX05VTT0wNjsgRTJGU1BST0dTX01PTlRIPSJKdW5lIiA7OworSnVsKQlNT05USF9OVU09MDc7IEUyRlNQUk9HU19NT05USD0iSnVseSIgOzsKK0F1ZykJTU9OVEhfTlVNPTA4OyBFMkZTUFJPR1NfTU9OVEg9IkF1Z3VzdCIgOzsKK1NlcCkJTU9OVEhfTlVNPTA5OyBFMkZTUFJPR1NfTU9OVEg9IlNlcHRlbWJlciIgOzsKK09jdCkJTU9OVEhfTlVNPTEwOyBFMkZTUFJPR1NfTU9OVEg9Ik9jdG9iZXIiIDs7CitOb3YpCU1PTlRIX05VTT0xMTsgRTJGU1BST0dTX01PTlRIPSJOb3ZlbWJlciIgOzsKK0RlYykJTU9OVEhfTlVNPTEyOyBFMkZTUFJPR1NfTU9OVEg9IkRlY2VtYmVyIiA7OworKikJQUNfTVNHX1dBUk4oW1Vua25vd24gbW9udGggJE1PTlRIPz9dKSA7OworZXNhYworCitiYXNlX3Zlcj1gZWNobyAkRTJGU1BST0dTX1ZFUlNJT04gfCBcCisJICAgICAgIHNlZCAtZSAncy8tV0lQLy8nIC1lICdzL3ByZS0vLycgLWUgJ3MvLVBMVVMvLydgCisKK2RhdGVfc3BlYz0ke0UyRlNQUk9HU19ZRUFSfS4ke01PTlRIX05VTX0uJHtFMkZTUFJPR1NfREFZfQorCitjYXNlICRFMkZTUFJPR1NfVkVSU0lPTiBpbgorKi1XSVB8cHJlLSopCisJRTJGU1BST0dTX1BLR1ZFUj0iJGJhc2VfdmVyfldJUC0kRTJGU1BST0dTX1lFQVItJE1PTlRIX05VTS0kRTJGU1BST0dTX0RBWSIKKwk7OworKikKKwlFMkZTUFJPR1NfUEtHVkVSPSIkYmFzZV92ZXIiCisJOzsKK2VzYWMKKwordW5zZXQgREFURSBNT05USCBZRUFSIGJhc2VfdmVyIHByZV92ZXJzIGRhdGVfc3BlYworQUNfTVNHX1JFU1VMVChbR2VuZXJhdGluZyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGUyZnNwcm9ncyB2ZXJzaW9uICRFMkZTUFJPR1NfVkVSU0lPTl0pCitBQ19NU0dfUkVTVUxUKFtSZWxlYXNlIGRhdGUgaXMgJHtFMkZTUFJPR1NfTU9OVEh9LCAke0UyRlNQUk9HU19ZRUFSfV0pCitBQ19TVUJTVChFMkZTUFJPR1NfWUVBUikKK0FDX1NVQlNUKEUyRlNQUk9HU19NT05USCkKK0FDX1NVQlNUKEUyRlNQUk9HU19EQVkpCitBQ19TVUJTVChFMkZTUFJPR1NfVkVSU0lPTikKK0FDX1NVQlNUKEUyRlNQUk9HU19QS0dWRVIpCitBQ19DQU5PTklDQUxfSE9TVAorZG5sCitkbmwgQ2hlY2sgdG8gc2VlIGlmIGxpYmRsIGV4aXN0cyBmb3IgdGhlIHNha2Ugb2YgZGxvcGVuCitkbmwKK0RMT1BFTl9MSUI9JycKK0FDX0NIRUNLX0xJQihkbCwgZGxvcGVuLCAKK1tETE9QRU5fTElCPS1sZGwKK0FDX0RFRklORShIQVZFX0RMT1BFTiwgMSwgW0RlZmluZSB0byAxIGlmIGRsb3Blbi9saWJkbCBleGlzdHNdKV0pCitBQ19TVUJTVChETE9QRU5fTElCKQorZG5sCitkbmwgVXNlIGRpZXQgbGliYworZG5sIAorV0lUSF9ESUVUX0xJQkM9CitBQ19BUkdfV0lUSChbZGlldC1saWJjXSwKK1sgIC0td2l0aC1kaWV0LWxpYmMgICAgICAgIHVzZSBkaWV0IGxpYmNdLAorQ0M9ImRpZXQgY2MgLW5vc3RkaW5jIgorV0lUSF9ESUVUX0xJQkM9eWVzCitBQ19NU0dfUkVTVUxUKENDPSRDQykpZG5sCitkbmwKK0FDX0FSR19XSVRIKFtjY10sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWNjXSxbbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIENDPSBpbnN0ZWFkXSksCitBQ19NU0dfRVJST1IoWy0td2l0aC1jYyBubyBsb25nZXIgc3VwcG9ydGVkOyB1c2UgQ0M9IGluc3RlYWRdKSkKK2RubAorQUNfQVJHX1dJVEgoW2Njb3B0c10sCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWNjb3B0c10sW25vIGxvbmdlciBzdXBwb3J0ZWQsIHVzZSBDRkxBR1M9IGluc3RlYWRdKSwKK0FDX01TR19FUlJPUihbLS13aXRoLWNjb3B0cyBubyBsb25nZXIgc3VwcG9ydGVkOyB1c2UgQ0ZMQUdTPSBpbnN0ZWFkXSkpCitkbmwKK0FDX0FSR19XSVRIKFtsZG9wdHNdLAorQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1sZG9wdHNdLFtubyBsb25nZXIgc3VwcG9ydGVkLCB1c2UgTERGTEFHUz0gaW5zdGVhZF0pLAorQUNfTVNHX0VSUk9SKFstLXdpdGgtbGRvcHRzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHVzZSBMREZMQUdTPSBpbnN0ZWFkXSkpCitkbmwKK0FDX1BST0dfQ0MKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICBSRFlOQU1JQz0iLXJkeW5hbWljIgorICAgQUNfU1VCU1QoUkRZTkFNSUMpCitmaQorQUNfUFJPR19DUFAKK2RubAorZG5sIEFscGhhIGNvbXB1dGVycyB1c2UgZmFzdCBhbmQgaW1wcmVjaXNlIGZsb2F0aW5nIHBvaW50IGNvZGUgdGhhdCBtYXkKK2RubCBtaXNzIGV4Y2VwdGlvbnMgYnkgZGVmYXVsdC4gRm9yY2Ugc2FuZSBvcHRpb25zIGlmIHdlJ3JlIHVzaW5nIEdDQy4KK0FDX01TR19DSEVDS0lORyhmb3IgYWRkaXRpb25hbCBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzKQoraWYgdGVzdCAiJEdDQyIgPSB5ZXMKK3RoZW4KKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisJYWxwaGEpCQlhZGRjZmxhZ3M9Ii1taWVlZSIgOzsKKyAgICBlc2FjCitmaQoraWYgdGVzdCAieCRhZGRjZmxhZ3MiICE9IHgKK3RoZW4KKyAgICBBQ19NU0dfUkVTVUxUKCRhZGRjZmxhZ3MpCisgICAgQ0ZMQUdTPSIkYWRkY2ZsYWdzICRDRkxBR1MiCitlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbWyhub25lKV1dKQorZmkKK2RubAorZG5sIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbGlicmFyeSBleHRlbnRpb25zLiAgV2lsbCBiZSBkZWFsdCB3aXRoIGFmdGVyCitkbmwgcGFyc2luZyBjb25maWd1cmF0aW9uIG9waW9ucywgd2hpY2ggbWF5IG1vZGlmeSB0aGVzZQorZG5sCitMSUJfRVhUPS5hCitTVEFUSUNfTElCX0VYVD0uYQorUFJPRklMRURfTElCX0VYVD0uYQorZG5sCitkbmwgQWxsb3cgc2VwYXJhdGUgYHJvb3RfcHJlZml4JyB0byBiZSBzcGVjaWZpZWQKK2RubAorQUNfQVJHX1dJVEgoW3Jvb3QtcHJlZml4XSwKK1sgIC0td2l0aC1yb290LXByZWZpeD1QUkVGSVggb3ZlcnJpZGUgcHJlZml4IHZhcmlhYmxlIGZvciBmaWxlcyB0byBiZSBwbGFjZWQgaW4gdGhlIHJvb3RdLAorcm9vdF9wcmVmaXg9JHdpdGh2YWwsCityb290X3ByZWZpeD1OT05FKWRubAorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLW1haW50YWluZXItbW9kZQorZG5sCitBQ19BUkdfRU5BQkxFKFttYWludGFpbmVyLW1vZGVdLAorWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIGVuYWJsZSBtYWtlZmlsZSBydWxlcyB1c2VmdWwgZm9yIG1haW50YWluZXJzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCU1BSU5UQUlORVJfQ01UPSMKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgbWFpbnRhaW5lciBtb2RlXSkKK2Vsc2UKKwlNQUlOVEFJTkVSX0NNVD0KKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBtYWludGFpbmVyIG1vZGVdKQorZmkKKywKK01BSU5UQUlORVJfQ01UPSMKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBtYWludGFpbmVyIG1vZGUgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChNQUlOVEFJTkVSX0NNVCkKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1zeW1saW5rLWluc3RhbGwKK2RubAorQUNfQVJHX0VOQUJMRShbc3ltbGluay1pbnN0YWxsXSwKK1sgIC0tZW5hYmxlLXN5bWxpbmstaW5zdGFsbCB1c2Ugc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nIGluc3RlYWQgb2YgaGFyZCBsaW5rc10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlMSU5LX0lOU1RBTExfRkxBR1M9LWYKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGxdKQorZWxzZQorCUxJTktfSU5TVEFMTF9GTEFHUz0tc2YKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBzeW1saW5rcyBmb3IgaW5zdGFsbF0pCitmaQorLAorTElOS19JTlNUQUxMX0ZMQUdTPS1mCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGluc3RhbGwgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChMSU5LX0lOU1RBTExfRkxBR1MpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtcmVsYXRpdmUtc3ltbGlua3MKK2RubAorcmVsYXRpdmVfc3ltbGlua19kZWZpbmVkPQorQUNfQVJHX0VOQUJMRShbcmVsYXRpdmUtc3ltbGlua3NdLAorWyAgLS1lbmFibGUtcmVsYXRpdmUtc3ltbGlua3MgdXNlIHJlbGF0aXZlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZ10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlTWU1MSU5LX1JFTEFUSVZFPQorCXJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD15ZXMKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgcmVsYXRpdmUgc3ltbGlua3MgZm9yIGluc3RhbGxdKQorZWxzZQorCVNZTUxJTktfUkVMQVRJVkU9LS1yZWxhdGl2ZQorCXJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZD15ZXMKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbF0pCitmaSkKK0FDX0FSR19FTkFCTEUoW3N5bWxpbmstcmVsYXRpdmUtc3ltbGlua3NdLCwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVNZTUxJTktfUkVMQVRJVkU9eWVzCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsXSkKK2Vsc2UKKwlTWU1MSU5LX1JFTEFUSVZFPS0tcmVsYXRpdmUKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyByZWxhdGl2ZSBzeW1saW5rcyBmb3IgaW5zdGFsbF0pCitmaQorLAoraWYgdGVzdCAteiAiJHJlbGF0aXZlX3N5bWxpbmtfZGVmaW5lZCIKK3RoZW4KKwlTWU1MSU5LX1JFTEFUSVZFPQorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBpbnN0YWxsIGJ5IGRlZmF1bHRdKQorZmkKKykKK0FDX1NVQlNUKFNZTUxJTktfUkVMQVRJVkUpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtc3ltbGluay1idWlsZAorZG5sCitBQ19BUkdfRU5BQkxFKFtzeW1saW5rLWJ1aWxkXSwKK1sgIC0tZW5hYmxlLXN5bWxpbmstYnVpbGQgIHVzZSBzeW1saW5rcyB3aGlsZSBidWlsZGluZyBpbnN0ZWFkIG9mIGhhcmQgbGlua3NdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJTElOS19CVUlMRF9GTEFHUz0KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkXSkKK2Vsc2UKKwlMSU5LX0JVSUxEX0ZMQUdTPS1zCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgc3ltbGlua3MgZm9yIGJ1aWxkXSkKK2ZpCissCitMSU5LX0JVSUxEX0ZMQUdTPQorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHN5bWxpbmtzIGZvciBidWlsZCBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKExJTktfQlVJTERfRkxBR1MpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcworZG5sCitBQ19BUkdfRU5BQkxFKFt2ZXJib3NlLW1ha2VjbWRzXSwKK1sgIC0tZW5hYmxlLXZlcmJvc2UtbWFrZWNtZHMgZW5hYmxlIHZlcmJvc2UgbWFrZSBjb21tYW5kIG91dHB1dF0sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgdmVyYm9zZSBtYWtlIGNvbW1hbmRzXSkKKwlFPUBlY2hvCisJRVM9ZWNobworCVE9QAorZWxzZQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kc10pCisJRT1AXFwjCisJRVM9XFwjCisJUT0gCitmaQorLAorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHZlcmJvc2UgbWFrZSBjb21tYW5kc10pCitFPUBlY2hvCitFUz1lY2hvCitRPUAKKykKK0FDX1NVQlNUKEUpCitBQ19TVUJTVChFUykKK0FDX1NVQlNUKFEpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtY29tcHJlc3Npb24KK2RubAorQUNfQVJHX0VOQUJMRShbY29tcHJlc3Npb25dLAorWyAgLS1lbmFibGUtY29tcHJlc3Npb24JICBlbmFibGUgRVhQRVJJTUVOVEFMIGNvbXByZXNzaW9uIHN1cHBvcnRdLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnRdKQorZWxzZQorCUFDX0RFRklORShFTkFCTEVfQ09NUFJFU1NJT04sIDEsCisJCVtEZWZpbmUgdG8gMSBpZiBleHQyIGNvbXByZXNzaW9uIGVuYWJsZWRdKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnRdKQorCUFDX01TR19XQVJOKFtDb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbF0pCitmaQorLAorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIGNvbXByZXNzaW9uIHN1cHBvcnQgYnkgZGVmYXVsdF0pCispCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtaHRyZWUKK2RubAorQUhfVEVNUExBVEUoW0VOQUJMRV9IVFJFRV0sIFtEZWZpbmUgdG8gMSBpZiBleHQzLzQgaHRyZWUgc3VwcG9ydCBlbmFibGVkXSkKK0FDX0FSR19FTkFCTEUoW2h0cmVlXSwKK1sgIC0tZW5hYmxlLWh0cmVlICAgICAgCSAgZW5hYmxlIEVYUEVSSU1FTlRBTCBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydF0sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlIVFJFRV9DTVQ9IworCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydF0pCitlbHNlCisJSFRSRUVfQ01UPQorCUFDX0RFRklORShFTkFCTEVfSFRSRUUsIDEpCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgaHRyZWUgZGlyZWN0b3J5IHN1cHBvcnRdKQorZmkKKywKK0hUUkVFX0NNVD0KK0FDX0RFRklORShFTkFCTEVfSFRSRUUsIDEpCitBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBodHJlZSBkaXJlY3Rvcnkgc3VwcG9ydCBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKEhUUkVFX0NNVCkKK2RubAorZG5sIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGFsbCBvZiB0aGUgLS1lbmFibGUtKi1zaGxpYnMgb3B0aW9ucworZG5sCitFMl9QS0dfQ09ORklHX1NUQVRJQz0tLXN0YXRpYworTERGTEFHX0RZTkFNSUM9CitQUklWQVRFX0xJQlNfQ01UPQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWVsZi1zaGxpYnMKK2RubAorQUNfQVJHX0VOQUJMRShbZWxmLXNobGlic10sCitbICAtLWVuYWJsZS1lbGYtc2hsaWJzCSAgc2VsZWN0IEVMRiBzaGFyZWQgbGlicmFyaWVzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUVMRl9DTVQ9IworCU1BS0VGSUxFX0VMRj0vZGV2L251bGwKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXNdKQorZWxzZQorCUUyX1BLR19DT05GSUdfU1RBVElDPQorCUVMRl9DTVQ9CisJTUFLRUZJTEVfRUxGPSRzcmNkaXIvbGliL01ha2VmaWxlLmVsZi1saWIKKwlbY2FzZSAiJGhvc3Rfb3MiIGluCisJc29sYXJpczIuKikKKwkJTUFLRUZJTEVfRUxGPSRzcmNkaXIvbGliL01ha2VmaWxlLnNvbGFyaXMtbGliCisJOzsKKwllc2FjXQorCUJJTkFSWV9UWVBFPWVsZmJpbgorCUxJQl9FWFQ9LnNvCisJUFJJVkFURV9MSUJTX0NNVD0jCisJTERGTEFHX0RZTkFNSUM9WyctV2wsLXJwYXRoLWxpbmssJCh0b3BfYnVpbGRkaXIpL2xpYiddCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgRUxGIHNoYXJlZCBsaWJyYXJpZXNdKQorZmkKKywKK01BS0VGSUxFX0VMRj0vZGV2L251bGwKK0VMRl9DTVQ9IworQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIEVMRiBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoRUxGX0NNVCkKK0FDX1NVQlNUX0ZJTEUoTUFLRUZJTEVfRUxGKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLWJzZC1zaGxpYnMKK2RubAorQUNfQVJHX0VOQUJMRShbYnNkLXNobGlic10sCitbICAtLWVuYWJsZS1ic2Qtc2hsaWJzCSAgc2VsZWN0IEJTRCBzaGFyZWQgbGlicmFyaWVzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUJTRExJQl9DTVQ9IworCU1BS0VGSUxFX0JTRExJQj0vZGV2L251bGwKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXNdKQorZWxzZQorCUUyX1BLR19DT05GSUdfU1RBVElDPQorCUJTRExJQl9DTVQ9CisJTUFLRUZJTEVfQlNETElCPSRzcmNkaXIvbGliL01ha2VmaWxlLmJzZC1saWIKKwlMSUJfRVhUPS5zbworCVtjYXNlICIkaG9zdF9vcyIgaW4KKwlkYXJ3aW4qKQorCQlNQUtFRklMRV9CU0RMSUI9JHNyY2Rpci9saWIvTWFrZWZpbGUuZGFyd2luLWxpYgorCQlMSUJfRVhUPS5keWxpYgorCTs7CisJZXNhY10KKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBCU0Qgc2hhcmVkIGxpYnJhcmllc10pCitmaQorLAorTUFLRUZJTEVfQlNETElCPS9kZXYvbnVsbAorQlNETElCX0NNVD0jCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgQlNEIHNoYXJlZCBsaWJyYXJpZXMgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChCU0RMSUJfQ01UKQorQUNfU1VCU1RfRklMRShNQUtFRklMRV9CU0RMSUIpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtcHJvZmlsZQorZG5sCitBQ19BUkdfRU5BQkxFKFtwcm9maWxlXSwKK1sgIC0tZW5hYmxlLXByb2ZpbGUJICBidWlsZCBwcm9maWxpbmcgbGlicmFyaWVzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCVBST0ZJTEVfQ01UPSMKKwlNQUtFRklMRV9QUk9GSUxFPS9kZXYvbnVsbAorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBwcm9maWxpbmcgbGlicmFyaWVzXSkKK2Vsc2UKKwlQUk9GSUxFX0NNVD0KKwlNQUtFRklMRV9QUk9GSUxFPSRzcmNkaXIvbGliL01ha2VmaWxlLnByb2ZpbGUKKwlQUk9GSUxFRF9MSUJfRVhUPV9wLmEKKwlBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyBwcm9maWxpbmcgbGlicmFyaWVzXSkKK2ZpCissCitQUk9GSUxFX0NNVD0jCitNQUtFRklMRV9QUk9GSUxFPS9kZXYvbnVsbAorQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHByb2ZpbGluZyBsaWJyYXJpZXMgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChQUk9GSUxFX0NNVCkKK0FDX1NVQlNUX0ZJTEUoTUFLRUZJTEVfUFJPRklMRSkKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1jaGVja2VyCitkbmwKK0FDX0FSR19FTkFCTEUoW2NoZWNrZXJdLAorWyAgLS1lbmFibGUtY2hlY2tlcgkgIGJ1aWxkIGNoZWNrZXIgbGlicmFyaWVzXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUNIRUNLRVJfQ01UPSMKKwlNQUtFRklMRV9DSEVDS0VSPS9kZXYvbnVsbAorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBjaGVja2VyIGxpYnJhcmllc10pCitlbHNlCisJQ0hFQ0tFUl9DTVQ9CisJTUFLRUZJTEVfQ0hFQ0tFUj0kc3JjZGlyL2xpYi9NYWtlZmlsZS5jaGVja2VyCisJQUNfTVNHX1JFU1VMVChbQnVpbGRpbmcgY2hlY2tlciBsaWJyYXJpZXNdKQorZmkKKywKK0NIRUNLRVJfQ01UPSMKK01BS0VGSUxFX0NIRUNLRVI9L2Rldi9udWxsCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgY2hlY2tlciBsaWJyYXJpZXMgYnkgZGVmYXVsdF0pCispCitBQ19TVUJTVChDSEVDS0VSX0NNVCkKK0FDX1NVQlNUX0ZJTEUoTUFLRUZJTEVfQ0hFQ0tFUikKK2RubAorZG5sIFN1YnN0aXR1dGUgbGlicmFyeSBleHRlbnNpb25zCitkbmwKK0FDX1NVQlNUKExJQl9FWFQpCitBQ19TVUJTVChTVEFUSUNfTElCX0VYVCkKK0FDX1NVQlNUKFBST0ZJTEVEX0xJQl9FWFQpCitBQ19TVUJTVChMREZMQUdfRFlOQU1JQykKK0FDX1NVQlNUKFBSSVZBVEVfTElCU19DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtamJkLWRlYnVnCitkbmwKK0FDX0FSR19FTkFCTEUoW2piZC1kZWJ1Z10sCitbICAtLWVuYWJsZS1qYmQtZGVidWcgIAkgIGVuYWJsZSBqb3VybmFsIGRlYnVnZ2luZ10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmddKQorZWxzZQorCUFDX0RFRklORShDT05GSUdfSkJEX0RFQlVHLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIGV4dDMvNCBqb3VybmFsIGNvZGVdKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGpvdXJuYWwgZGVidWdnaW5nXSkKK2ZpCissCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgam91cm5hbCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCispCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtYmxraWQtZGVidWcKK2RubAorQUNfQVJHX0VOQUJMRShbYmxraWQtZGVidWddLAorWyAgLS1lbmFibGUtYmxraWQtZGVidWcgICAgZW5hYmxlIGJsa2lkIGRlYnVnZ2luZ10sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgYmxraWQgZGVidWdnaW5nXSkKK2Vsc2UKKwlBQ19ERUZJTkUoQ09ORklHX0JMS0lEX0RFQlVHLCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIHRoZSBibGtpZCBsaWJyYXJ5XSkKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBibGtpZCBkZWJ1Z2dpbmddKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0Rpc2FibGluZyBibGtpZCBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCispCitkbmwKK2RubCBoYW5kbGUgLS1lbmFibGUtdGVzdGlvLWRlYnVnCitkbmwKK0FDX0FSR19FTkFCTEUoW3Rlc3Rpby1kZWJ1Z10sCitbICAtLWRpc2FibGUtdGVzdGlvLWRlYnVnICBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIHRlc3QgSS9PIG1hbmFnZXIgZm9yIGRlYnVnZ2luZ10sCitBSF9URU1QTEFURShbQ09ORklHX1RFU1RJT19ERUJVR10sCisJW0RlZmluZSB0byAxIGlmIHRoZSB0ZXN0aW8gSS9PIG1hbmFnZXIgc2hvdWxkIGJlIGVuYWJsZWRdKQoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJQUNfTVNHX1JFU1VMVChbRGlzYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmddKQorCVRFU1RfSU9fQ01UPSIjIgorZWxzZQorCVRFU1RfSU9fQ01UPQorCUFDX0RFRklORShDT05GSUdfVEVTVElPX0RFQlVHLCAxKQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmddKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIHRlc3RpbyBkZWJ1Z2dpbmcgYnkgZGVmYXVsdF0pCitBQ19ERUZJTkUoQ09ORklHX1RFU1RJT19ERUJVRywgMSkKK1RFU1RfSU9fQ01UPQorKQorQUNfU1VCU1QoVEVTVF9JT19DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1kaXNhYmxlLWxpYnV1aWQKK2RubAorUEtHX1BST0dfUEtHX0NPTkZJRworTElCVVVJRD0KK0RFUExJQlVVSUQ9CitTVEFUSUNfTElCVVVJRD0KK0RFUFNUQVRJQ19MSUJVVUlEPQorUFJPRklMRURfTElCVVVJRD0KK0RFUFBST0ZJTEVEX0xJQlVVSUQ9CitVVUlEX0NNVD0KK0FDX0FSR19FTkFCTEUoW2xpYnV1aWRdLAorWyAgLS1kaXNhYmxlLWxpYnV1aWQJICBkbyBub3QgYnVpbGQgcHJpdmF0ZSB1dWlkIGxpYnJhcnldLAoraWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJaWYgdGVzdCAteiAiJFBLR19DT05GSUciOyB0aGVuCisJCUFDX01TR19FUlJPUihbcGtnLWNvbmZpZyBub3QgaW5zdGFsbGVkOyBwbGVhc2UgaW5zdGFsbCBpdC5dKQorCWZpCisKKwlBQ19DSEVDS19MSUIodXVpZCwgdXVpZF9nZW5lcmF0ZSwKKwkJW0xJQlVVSUQ9YCRQS0dfQ09ORklHIC0tbGlicyB1dWlkYDsKKwkJIFNUQVRJQ19MSUJVVUlEPWAkUEtHX0NPTkZJRyAtLXN0YXRpYyAtLWxpYnMgdXVpZGBdLAorCQlbQUNfTVNHX0VSUk9SKFtleHRlcm5hbCB1dWlkIGxpYnJhcnkgbm90IGZvdW5kXSldLAorCQlbJExJQlVVSURdKQorCVVVSURfQ01UPSMKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgcHJpdmF0ZSB1dWlkIGxpYnJhcnldKQorZWxzZQorCUxJQlVVSUQ9JyQoTElCKS9saWJ1dWlkJyRMSUJfRVhUCisJREVQTElCVVVJRD0kTElCVVVJRAorCVNUQVRJQ19MSUJVVUlEPSckKExJQikvbGlidXVpZCckU1RBVElDX0xJQl9FWFQKKwlERVBTVEFUSUNfTElCVVVJRD0kU1RBVElDX0xJQlVVSUQKKwlQUk9GSUxFRF9MSUJVVUlEPSckKExJQikvbGlidXVpZCckUFJPRklMRURfTElCX0VYVAorCURFUFBST0ZJTEVEX0xJQlVVSUQ9JFBST0ZJTEVEX0xJQlVVSUQKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBwcml2YXRlIHV1aWQgbGlicmFyeV0pCitmaQorLAorTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJExJQl9FWFQKK0RFUExJQlVVSUQ9JExJQlVVSUQKK1NUQVRJQ19MSUJVVUlEPSckKExJQikvbGlidXVpZCckU1RBVElDX0xJQl9FWFQKK0RFUFNUQVRJQ19MSUJVVUlEPSRTVEFUSUNfTElCVVVJRAorUFJPRklMRURfTElCVVVJRD0nJChMSUIpL2xpYnV1aWQnJFBST0ZJTEVEX0xJQl9FWFQKK0RFUFBST0ZJTEVEX0xJQlVVSUQ9JFBST0ZJTEVEX0xJQlVVSUQKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIHByaXZhdGUgdXVpZCBsaWJyYXJ5IGJ5IGRlZmF1bHRdKQorKQorQUNfU1VCU1QoTElCVVVJRCkKK0FDX1NVQlNUKERFUExJQlVVSUQpCitBQ19TVUJTVChTVEFUSUNfTElCVVVJRCkKK0FDX1NVQlNUKERFUFNUQVRJQ19MSUJVVUlEKQorQUNfU1VCU1QoUFJPRklMRURfTElCVVVJRCkKK0FDX1NVQlNUKERFUFBST0ZJTEVEX0xJQlVVSUQpCitBQ19TVUJTVChVVUlEX0NNVCkKK2RubAorZG5sIGhhbmRsZSAtLWRpc2FibGUtbGliYmxraWQKK2RubAorUEtHX1BST0dfUEtHX0NPTkZJRworTElCQkxLSUQ9CitERVBMSUJCTEtJRD0KK1NUQVRJQ19MSUJCTEtJRD0KK0RFUFNUQVRJQ19MSUJCTEtJRD0KK1BST0ZJTEVEX0xJQkJMS0lEPQorREVQUFJPRklMRURfTElCQkxLSUQ9CitCTEtJRF9DTVQ9CitBSF9URU1QTEFURShbQ09ORklHX0JVSUxEX0ZJTkRGU10sIFtEZWZpbmUgdG8gMSB0byBjb21waWxlIGZpbmRmc10pCitBQ19BUkdfRU5BQkxFKFtsaWJibGtpZF0sCitbICAtLWRpc2FibGUtbGliYmxraWQJICBkbyBub3QgYnVpbGQgcHJpdmF0ZSBibGtpZCBsaWJyYXJ5XSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCWlmIHRlc3QgLXogIiRQS0dfQ09ORklHIjsgdGhlbgorCQlBQ19NU0dfRVJST1IoW3BrZy1jb25maWcgbm90IGluc3RhbGxlZDsgcGxlYXNlIGluc3RhbGwgaXQuXSkKKwlmaQorCisJQUNfQ0hFQ0tfTElCKGJsa2lkLCBibGtpZF9nZXRfY2FjaGUsCisJCVtMSUJCTEtJRD1gJFBLR19DT05GSUcgLS1saWJzIGJsa2lkYDsKKwkJIFNUQVRJQ19MSUJCTEtJRD1gJFBLR19DT05GSUcgLS1zdGF0aWMgLS1saWJzIGJsa2lkYF0sCisJCVtBQ19NU0dfRVJST1IoW2V4dGVybmFsIGJsa2lkIGxpYnJhcnkgbm90IGZvdW5kXSldLAorCQlbJExJQkJMS0lEXSkKKwlCTEtJRF9DTVQ9IworCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBwcml2YXRlIGJsa2lkIGxpYnJhcnldKQorZWxzZQorCUxJQkJMS0lEPSckKExJQikvbGliYmxraWQnJExJQl9FWFQKKwlERVBMSUJCTEtJRD0kTElCQkxLSUQKKwlTVEFUSUNfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckU1RBVElDX0xJQl9FWFQKKwlERVBTVEFUSUNfTElCQkxLSUQ9JFNUQVRJQ19MSUJCTEtJRAorCVBST0ZJTEVEX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFBST0ZJTEVEX0xJQl9FWFQKKwlERVBQUk9GSUxFRF9MSUJCTEtJRD0kUFJPRklMRURfTElCQkxLSUQKKwlBQ19ERUZJTkUoQ09ORklHX0JVSUxEX0ZJTkRGUywgMSkKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBwcml2YXRlIGJsa2lkIGxpYnJhcnldKQorZmkKKywKK0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJExJQl9FWFQKK0RFUExJQkJMS0lEPSRMSUJCTEtJRAorU1RBVElDX0xJQkJMS0lEPSckKExJQikvbGliYmxraWQnJFNUQVRJQ19MSUJfRVhUCitERVBTVEFUSUNfTElCQkxLSUQ9JFNUQVRJQ19MSUJCTEtJRAorUFJPRklMRURfTElCQkxLSUQ9JyQoTElCKS9saWJibGtpZCckUFJPRklMRURfTElCX0VYVAorREVQUFJPRklMRURfTElCQkxLSUQ9JFBST0ZJTEVEX0xJQkJMS0lECitBQ19ERUZJTkUoQ09ORklHX0JVSUxEX0ZJTkRGUywgMSkKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIHByaXZhdGUgYmxraWQgbGlicmFyeSBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKExJQkJMS0lEKQorQUNfU1VCU1QoREVQTElCQkxLSUQpCitBQ19TVUJTVChTVEFUSUNfTElCQkxLSUQpCitBQ19TVUJTVChERVBTVEFUSUNfTElCQkxLSUQpCitBQ19TVUJTVChQUk9GSUxFRF9MSUJCTEtJRCkKK0FDX1NVQlNUKERFUFBST0ZJTEVEX0xJQkJMS0lEKQorQUNfU1VCU1QoQkxLSURfQ01UKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXF1b3RhCitkbmwKK1FVT1RBX01BTl9DT01NRU5UPScuXCInCitRVU9UQV9DTVQ9CitBQ19TVUJTVChRVU9UQV9NQU5fQ09NTUVOVCkKK1BLR19QUk9HX1BLR19DT05GSUcKK0FIX1RFTVBMQVRFKFtDT05GSUdfUVVPVEFdLCBbRGVmaW5lIHRvIDEgdG8gZW5hYmxlIHF1b3RhIHN1cHBvcnRdKQorQUNfQVJHX0VOQUJMRShbcXVvdGFdLAorWyAgLS1lbmFibGUtcXVvdGEJICBlbmFibGUgcXVvdGEgc3VwcG9ydF0sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlRVU9UQV9DTVQ9IworCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBxdW90YSBzdXBwb3J0XSkKK2Vsc2UKKwlRVU9UQV9DTVQ9CisJQUNfREVGSU5FKENPTkZJR19RVU9UQSwgMSkKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBxdW90YSBzdXBwb3J0XSkKKwlRVU9UQV9NQU5fQ09NTUVOVD0iIgorCUFDX1NVQlNUKFFVT1RBX01BTl9DT01NRU5UKQorZmkKKywKK1FVT1RBX0NNVD0jCitBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgcXVvdGEgc3VwcG9ydCBieSBkZWZhdWx0XSkKKykKK2RubAorZG5sIERlZmluZSBzdHVmZiBleHBlY3RlZCBmb3IgcXVvdGEgbGlicmFyeQorZG5sCitMSUJRVU9UQT0nJChMSUIpL2xpYnF1b3RhJyRMSUJfRVhUCitERVBMSUJRVU9UQT0kTElCUVVPVEEKK1NUQVRJQ19MSUJRVU9UQT0nJChMSUIpL2xpYnF1b3RhJyRTVEFUSUNfTElCX0VYVAorREVQU1RBVElDX0xJQlFVT1RBPSRTVEFUSUNfTElCUVVPVEEKK1BST0ZJTEVEX0xJQlFVT1RBPSckKExJQikvbGlicXVvdGEnJFBST0ZJTEVEX0xJQl9FWFQKK0RFUFBST0ZJTEVEX0xJQlFVT1RBPSRQUk9GSUxFRF9MSUJRVU9UQQorQUNfU1VCU1QoTElCUVVPVEEpCitBQ19TVUJTVChERVBMSUJRVU9UQSkKK0FDX1NVQlNUKFNUQVRJQ19MSUJRVU9UQSkKK0FDX1NVQlNUKERFUFNUQVRJQ19MSUJRVU9UQSkKK0FDX1NVQlNUKFBST0ZJTEVEX0xJQlFVT1RBKQorQUNfU1VCU1QoREVQUFJPRklMRURfTElCUVVPVEEpCitBQ19TVUJTVChRVU9UQV9DTVQpCitkbmwKK2RubCBoYW5kbGUgLS1kaXNhYmxlLWJhY2t0cmFjZQorZG5sCitBSF9URU1QTEFURShbRElTQUJMRV9CQUNLVFJBQ0VdLCBbRGVmaW5lIHRvIDEgdG8gZGlzYWJsZSB1c2Ugb2YgYmFja3RyYWNlXSkKK0FDX0FSR19FTkFCTEUoW2JhY2t0cmFjZV0sCitbICAtLWRpc2FibGUtYmFja3RyYWNlCSAgZGlzYWJsZSB1c2UgYmFja3RyYWNlXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyB1c2Ugb2YgYmFja3RyYWNlXSkKKwlBQ19ERUZJTkUoRElTQUJMRV9CQUNLVFJBQ0UsIDEpCitlbHNlCisJQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgdXNlIG9mIGJhY2t0cmFjZV0pCitmaQorLAorQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgdXNlIG9mIGJhY2t0cmFjZSBieSBkZWZhdWx0XSkKKykKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1kZWJ1Z2ZzCitkbmwKK0FDX0FSR19FTkFCTEUoW2RlYnVnZnNdLAorWyAgLS1kaXNhYmxlLWRlYnVnZnMgICAJICBkaXNhYmxlIHN1cHBvcnQgb2YgZGVidWdmcyBwcm9ncmFtXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBkZWJ1Z2ZzIHN1cHBvcnRdKQorCURFQlVHRlNfQ01UPSIjIgorZWxzZQorCURFQlVHRlNfQ01UPQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGRlYnVnZnMgc3VwcG9ydF0pCitmaQorLAorQUNfTVNHX1JFU1VMVChbRW5hYmxpbmcgZGVidWdmcyBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorREVCVUdGU19DTVQ9CispCitBQ19TVUJTVChERUJVR0ZTX0NNVCkKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1pbWFnZXIKK2RubAorQUNfQVJHX0VOQUJMRShbaW1hZ2VyXSwKK1sgIC0tZGlzYWJsZS1pbWFnZXIgICAJICBkaXNhYmxlIHN1cHBvcnQgb2YgZTJpbWFnZSBwcm9ncmFtXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBlMmltYWdlIHN1cHBvcnRdKQorCUlNQUdFUl9DTVQ9IiMiCitlbHNlCisJSU1BR0VSX0NNVD0KKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBlMmltYWdlIHN1cHBvcnRdKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIGUyaW1hZ2Ugc3VwcG9ydCBieSBkZWZhdWx0XSkKK0lNQUdFUl9DTVQ9CispCitBQ19TVUJTVChJTUFHRVJfQ01UKQorZG5sCitkbmwgaGFuZGxlIC0tZW5hYmxlLXJlc2l6ZXIKK2RubAorQUNfQVJHX0VOQUJMRShbcmVzaXplcl0sCitbICAtLWRpc2FibGUtcmVzaXplciAgIAkgIGRpc2FibGUgc3VwcG9ydCBvZiBlMnJlc2l6ZSBwcm9ncmFtXSwKK2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW0Rpc2FibGluZyBlMnJlc2l6ZSBzdXBwb3J0XSkKKwlSRVNJWkVSX0NNVD0iIyIKK2Vsc2UKKwlSRVNJWkVSX0NNVD0KKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBlMnJlc2l6ZSBzdXBwb3J0XSkKK2ZpCissCitBQ19NU0dfUkVTVUxUKFtFbmFibGluZyBlMnJlc2l6ZSBzdXBwb3J0IGJ5IGRlZmF1bHRdKQorUkVTSVpFUl9DTVQ9CispCitBQ19TVUJTVChSRVNJWkVSX0NNVCkKK2RubAorZG5sIGhhbmRsZSAtLWVuYWJsZS1kZWZyYWcKK2RubAorQUNfQVJHX0VOQUJMRShbZGVmcmFnXSwKK1sgIC0tZGlzYWJsZS1kZWZyYWcgICAJICBkaXNhYmxlIHN1cHBvcnQgb2YgZTRkZWZyYWcgcHJvZ3JhbV0sCitpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgZTRkZWZyYWcgc3VwcG9ydF0pCisJREVGUkFHX0NNVD0iIyIKK2Vsc2UKKwlERUZSQUdfQ01UPQorCUFDX01TR19SRVNVTFQoW0VuYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnRdKQorZmkKKywKK0FDX01TR19SRVNVTFQoW0VuYWJsaW5nIGU0ZGVmcmFnIHN1cHBvcnQgYnkgZGVmYXVsdF0pCitERUZSQUdfQ01UPQorKQorQUNfU1VCU1QoREVGUkFHX0NNVCkKK2RubAorZG5sIFNlZSB3aGV0aGVyIHRvIGluc3RhbGwgdGhlIGBmc2NrJyB3cmFwcGVyIHByb2dyYW0gKHRoYXQgY2FsbHMgZTJmc2NrKQorZG5sCitBQ19BUkdfRU5BQkxFKFtmc2NrXSwKK1sgIC0tZW5hYmxlLWZzY2sgICAgICAgICAgIGJ1aWxkIGZzY2sgd3JhcHBlciBwcm9ncmFtXSwKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyIKK3RoZW4KKwlGU0NLX1BST0c9JycgRlNDS19NQU49JycKKwlBQ19NU0dfUkVTVUxUKFtOb3QgYnVpbGRpbmcgZnNjayB3cmFwcGVyXSkKK2Vsc2UKKwlGU0NLX1BST0c9ZnNjayBGU0NLX01BTj1mc2NrLjgKKwlBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyBmc2NrIHdyYXBwZXJdKQorZmldCissCitbY2FzZSAiJGhvc3Rfb3MiIGluCisgIGdudSopCisgICAgRlNDS19QUk9HPScnIEZTQ0tfTUFOPScnCisgICAgQUNfTVNHX1JFU1VMVChbTm90IGJ1aWxkaW5nIGZzY2sgd3JhcHBlciBieSBkZWZhdWx0XSkKKyAgICA7OworICAqKQorICAgIEZTQ0tfUFJPRz1mc2NrIEZTQ0tfTUFOPWZzY2suOAorICAgIEFDX01TR19SRVNVTFQoW0J1aWxkaW5nIGZzY2sgd3JhcHBlciBieSBkZWZhdWx0XSkKK2VzYWNdCispCitBQ19TVUJTVChGU0NLX1BST0cpCitBQ19TVUJTVChGU0NLX01BTikKK2RubAorZG5sIFNlZSB3aGV0aGVyIHRvIGluc3RhbGwgdGhlIGBlMmluaXRyZC1oZWxwZXInIHByb2dyYW0KK2RubAorQUNfQVJHX0VOQUJMRShbZTJpbml0cmQtaGVscGVyXSwKK1sgIC0tZW5hYmxlLWUyaW5pdHJkLWhlbHBlciBidWlsZCBlMmluaXRyZC1oZWxwZXIgcHJvZ3JhbV0sCitbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iCit0aGVuCisJRTJJTklUUkRfUFJPRz0nJyBFMklOSVRSRF9NQU49JycKKwlBQ19NU0dfUkVTVUxUKFtOb3QgYnVpbGRpbmcgZTJpbml0cmQgaGVscGVyXSkKK2Vsc2UKKwlFMklOSVRSRF9QUk9HPWUyaW5pdHJkX2hlbHBlciBFMklOSVRSRF9NQU49ZTJpbml0cmRfaGVscGVyLjgKKwlBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyBlMmluaXRyZCBoZWxwZXJdKQorZmldCissCitFMklOSVRSRF9QUk9HPWUyaW5pdHJkX2hlbHBlciBFMklOSVRSRF9NQU49ZTJpbml0cmRfaGVscGVyLjgKK0FDX01TR19SRVNVTFQoW0J1aWxkaW5nIGUyaW5pdHJkIGhlbHBlciBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKEUySU5JVFJEX1BST0cpCitBQ19TVUJTVChFMklOSVRSRF9NQU4pCitkbmwKK2RubAorZG5sCitBQ19BUkdfRU5BQkxFKFt0bHNdLAorWyAgLS1kaXNhYmxlLXRscyAgICAgICAgICAgZGlzYWJsZSB1c2Ugb2YgdGhyZWFkIGxvY2FsIHN1cHBvcnRdLAorW2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCXRyeV90bHM9IiIKKwlBQ19NU0dfUkVTVUxUKFtEaXNhYmxpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnRdKQorZWxzZQorCXRyeV90bHM9InllcyIKKwlBQ19NU0dfUkVTVUxUKFtFbmFibGluZyB0aHJlYWQgbG9jYWwgc3VwcG9ydF0pCitmaV0KKywKK2lmIHRlc3QgLW4gIiRXSVRIX0RJRVRfTElCQyIKK3RoZW4KKwl0cnlfdGxzPSIiCisJQUNfTVNHX1JFU1VMVChbRGlldCBsaWJjIGRvZXMgbm90IHN1cHBvcnQgdGhyZWFkIGxvY2FsIHN1cHBvcnRdKQorZWxzZQorCXRyeV90bHM9InllcyIKKwlBQ19NU0dfUkVTVUxUKFtUcnkgdXNpbmcgdGhyZWFkIGxvY2FsIHN1cHBvcnQgYnkgZGVmYXVsdF0pCitmaQorKQoraWYgdGVzdCAiJHRyeV90bHMiID0gInllcyIKK3RoZW4KK0FYX1RMUworZmkKK2RubAorZG5sCitkbmwKK0FIX1RFTVBMQVRFKFtVU0VfVVVJRERdLCBbRGVmaW5lIHRvIDEgdG8gYnVpbGQgdXVpZGRdKQorQUNfQVJHX0VOQUJMRShbdXVpZGRdLAorWyAgLS1kaXNhYmxlLXV1aWRkICAgICAgICAgZGlzYWJsZSBidWlsZGluZyB0aGUgdXVpZCBkYWVtb25dLAorW2lmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIgordGhlbgorCUFDX01TR19SRVNVTFQoW05vdCBidWlsZGluZyB1dWlkZF0pCisJVVVJRERfQ01UPSIjIgorZWxzZQorCUFDX0RFRklORShVU0VfVVVJREQsIDEpCisJVVVJRERfQ01UPSIiCisJQUNfTVNHX1JFU1VMVChbQnVpbGRpbmcgdXVpZGRdKQorZmldCissCitBQ19ERUZJTkUoVVNFX1VVSURELCAxKQorVVVJRERfQ01UPSIiCitBQ19NU0dfUkVTVUxUKFtCdWlsZGluZyB1dWlkZCBieSBkZWZhdWx0XSkKKykKK0FDX1NVQlNUKFVVSUREX0NNVCkKK2RubAorZG5sCitkbmwKK01BS0VGSUxFX0xJQlJBUlk9JHNyY2Rpci9saWIvTWFrZWZpbGUubGlicmFyeQorQUNfU1VCU1RfRklMRShNQUtFRklMRV9MSUJSQVJZKQorZG5sCitkbmwgQWRkIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQsIHVzaW5nIGdldHRleHQuCitkbmwKK0dFVFRFWFRfUEFDS0FHRT1lMmZzcHJvZ3MKK1BBQ0tBR0U9ZTJmc3Byb2dzCitWRVJTSU9OPSIkRTJGU1BST0dTX1ZFUlNJT04iCitWRVJTSU9OPTAuMTQuMQorQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0UsICIkUEFDS0FHRSIsIFtwYWNrYWdlIG5hbWUgZm9yIGdldHRleHRdKQorQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFt2ZXJzaW9uIGZvciBnZXR0ZXh0XSkKK0FDX1NVQlNUKEdFVFRFWFRfUEFDS0FHRSkKK0FDX1NVQlNUKFBBQ0tBR0UpCitBQ19TVUJTVChWRVJTSU9OKQorCitBTV9HTlVfR0VUVEVYVAorZG5sCitkbmwgRW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworZG5sCitBQ19TVUJTVChCSU5BUllfVFlQRSkKK0FDX1BST0dfTUFLRV9TRVQKK0NIRUNLX0dOVV9NQUtFCitBQ19QQVRIX1BST0coTE4sIGxuLCBsbikKK0FDX1BST0dfTE5fUworQUNfUEFUSF9QUk9HKE1WLCBtdiwgbXYpCitBQ19QQVRIX1BST0coQ1AsIGNwLCBjcCkKK0FDX1BBVEhfUFJPRyhSTSwgcm0sIHJtKQorQUNfUEFUSF9QUk9HKENITU9ELCBjaG1vZCwgOikKK0FDX1BST0dfQVdLCitBQ19QUk9HX0VHUkVQCitBQ19QQVRIX1BST0coU0VELCBzZWQsIHNlZCkKK0FDX1BBVEhfUFJPRyhQRVJMLCBwZXJsLCBwZXJsKQorQUNfUEFUSF9QUk9HKExEQ09ORklHLCBsZGNvbmZpZywgOikKK0FDX0NIRUNLX1RPT0woQVIsIGFyLCBhcikKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK0FDX0NIRUNLX1BST0coTUFLRUlORk8sIG1ha2VpbmZvLCBtYWtlaW5mbywgKQoraWYgdGVzdCAiXyRNQUtFSU5GTyIgPSAiXyI7IHRoZW4KKyAgICBNQUtFSU5GTz0iQGVjaG8gTWFrZWluZm8gaXMgbWlzc2luZy4gSW5mbyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IGJlIGJ1aWx0Ljt0cnVlIgorZWxzZQorICAgIGNhc2UgIiRNQUtFSU5GTyIgaW4KKyAgICAgICovbWlzc2luZy4qKQorICAgICAgICBBQ19NU0dfV0FSTihbCisqKiogTWFrZWluZm8gaXMgbWlzc2luZy4gSW5mbyBkb2N1bWVudGF0aW9uIHdpbGwgbm90IGJlIGJ1aWx0Ll0pCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICA7OworICAgIGVzYWMKK2ZpCitBQ19TVUJTVChNQUtFSU5GTykKK0FDX1BST0dfSU5TVEFMTAorIyBTZWUgaWYgd2UgbmVlZCBhIHNlcGFyYXRlIG5hdGl2ZSBjb21waWxlci4KK2lmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IG5vOyB0aGVuCisgIEJVSUxEX0NDPSIkQ0MiCisgIEFDX1NVQlNUKEJVSUxEX0NDKQorZWxzZQorICBBQ19DSEVDS19QUk9HUyhCVUlMRF9DQywgZ2NjIGNjKQorZmkKK0FDX0NIRUNLX0hFQURFUlMobTRfZmxhdHRlbihbCisJZGlyZW50LmgKKwllcnJuby5oCisJZXhlY2luZm8uaAorCWdldG9wdC5oCisJbWFsbG9jLmgKKwltbnRlbnQuaAorCXBhdGhzLmgKKwlzZW1hcGhvcmUuaAorCXNldGptcC5oCisJc2lnbmFsLmgKKwlzdGRhcmcuaAorCXN0ZGludC5oCisJc3RkbGliLmgKKwl0ZXJtaW9zLmgKKwl0ZXJtaW8uaAorCXVuaXN0ZC5oCisJdXRpbWUuaAorCWxpbnV4L2ZhbGxvYy5oCisJbGludXgvZmQuaAorCWxpbnV4L21ham9yLmgKKwlsaW51eC9sb29wLmgKKwluZXQvaWZfZGwuaAorCW5ldGluZXQvaW4uaAorCXN5cy9kaXNrbGFiZWwuaAorCXN5cy9maWxlLmgKKwlzeXMvaW9jdGwuaAorCXN5cy9ta2Rldi5oCisJc3lzL21tYW4uaAorCXN5cy9wcmN0bC5oCisJc3lzL3F1ZXVlLmgKKwlzeXMvcmVzb3VyY2UuaAorCXN5cy9zZWxlY3QuaAorCXN5cy9zb2NrZXQuaAorCXN5cy9zb2NraW8uaAorCXN5cy9zdGF0LmgKKwlzeXMvc3lzY2FsbC5oCisJc3lzL3N5c21hY3Jvcy5oCisJc3lzL3RpbWUuaAorCXN5cy90eXBlcy5oCisJc3lzL3VuLmgKKwlzeXMvd2FpdC5oCitdKSkKK0FDX0NIRUNLX0hFQURFUlMoc3lzL2Rpc2suaCBzeXMvbW91bnQuaCwsLAorW1sKKyNpZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKK11dKQorQUNfQ0hFQ0tfSEVBREVSUyhuZXQvaWYuaCwsLAorW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVQKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKK11dKQorQUNfRlVOQ19WUFJJTlRGCitkbmwgQ2hlY2sgdG8gc2VlIGlmIGRpcmVudCBoYXMgbWVtYmVyIGRfcmVjbGVuLiBPbiBjeWd3aW4gdGhvc2UgZF9yZWNsZW4KK2RubCBpcyBub3QgZGVjbGVhcmVkLgorQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBkaXJlbnQuZF9yZWNsZW4sW0FDX0RFRklORShIQVZFX1JFQ0xFTl9ESVJFTlQsIDEsCisJCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgZGlyZW50IGhhcyBkX3JlY2xlbl0pXSwsCisJCVsjaW5jbHVkZSA8ZGlyZW50Lmg+XSkKK2RubCBDaGVjayB0byBzZWUgaWYgc3NpemVfdCB3YXMgZGVjbGFyZWQKK0FDX0NIRUNLX1RZUEUoc3NpemVfdCxbQUNfREVGSU5FKEhBVkVfVFlQRV9TU0laRV9ULCAxLAorCQlbRGVmaW5lIHRvIDEgaWYgc3NpemVfdCBkZWNsYXJlZF0pXSwsCisJICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQorZG5sCitkbmwgQ2hlY2sgdG8gc2VlIGlmIGxsc2VlaygpIGlzIGRlY2xhcmVkIGluIHVuaXN0ZC5oLiAgT24gc29tZSBsaWJjJ3MgCitkbmwgaXQgaXMsIGFuZCBvbiBvdGhlcnMgaXQgaXNuJ3QuLi4uLiBUaGFuayB5b3UgZ2xpYmMgZGV2ZWxvcGVycy4uLi4KK2RubAorQUNfQ0hFQ0tfREVDTChsbHNlZWssW0FDX0RFRklORShIQVZFX0xMU0VFS19QUk9UT1RZUEUsIDEsCisJCQlbRGVmaW5lIHRvIDEgaWYgbGxzZWVrIGRlY2xhcmVkIGluIHVuaXN0ZC5oXSldLCwKKwkgICAgICBbI2luY2x1ZGUgPHVuaXN0ZC5oPl0pCitkbmwKK2RubCBDaGVjayB0byBzZWUgaWYgbHNlZWs2NCgpIGlzIGRlY2xhcmVkIGluIHVuaXN0ZC5oLiAgR2xpYmMncyBoZWFkZXIgZmlsZXMKK2RubCBhcmUgc28gY29udm9sdXRlZCB0aGF0IEkgY2FuJ3QgdGVsbCB3aGV0aGVyIGl0IHdpbGwgYWx3YXlzIGJlIGRlZmluZWQsCitkbmwgYW5kIGlmIGl0IGlzbid0IGRlZmluZWQgd2hpbGUgbHNlZWs2NCBpcyBkZWZpbmVkIGluIHRoZSBsaWJyYXJ5LCAKK2RubCBkaXNhc3RlciB3aWxsIHN0cmlrZS4gIAorZG5sCitkbmwgV2FybmluZyEgIFVzZSBvZiAtLWVuYWJsZS1nY2Mtd2FsbCBtYXkgdGhyb3cgb2ZmIHRoaXMgdGVzdC4KK2RubAorZG5sCitBQ19DSEVDS19ERUNMKGxzZWVrNjQsW0FDX0RFRklORShIQVZFX0xTRUVLNjRfUFJPVE9UWVBFLCAxLAorCQkJW0RlZmluZSB0byAxIGlmIGxzZWVrNjQgZGVjbGFyZWQgaW4gdW5pc3RkLmhdKV0sLAorCQlbI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorCQkgI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisJCSAjaW5jbHVkZSA8dW5pc3RkLmg+XSkKK2RubAorZG5sIFdvcmQgc2l6ZXMuLi4KK2RubAorQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorQUNfQ0hFQ0tfU0laRU9GKGludCkKK0FDX0NIRUNLX1NJWkVPRihsb25nKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK1NJWkVPRl9TSE9SVD0kYWNfY3Zfc2l6ZW9mX3Nob3J0CitTSVpFT0ZfSU5UPSRhY19jdl9zaXplb2ZfaW50CitTSVpFT0ZfTE9ORz0kYWNfY3Zfc2l6ZW9mX2xvbmcKK1NJWkVPRl9MT05HX0xPTkc9JGFjX2N2X3NpemVvZl9sb25nX2xvbmcKK1NJWkVPRl9PRkZfVD0kYWNfY3Zfc2l6ZW9mX29mZl90CitBQ19TVUJTVChTSVpFT0ZfU0hPUlQpCitBQ19TVUJTVChTSVpFT0ZfSU5UKQorQUNfU1VCU1QoU0laRU9GX0xPTkcpCitBQ19TVUJTVChTSVpFT0ZfTE9OR19MT05HKQorQUNfU1VCU1QoU0laRU9GX09GRl9UKQorQUNfQ19CSUdFTkRJQU4KK0JVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorQVNNX1RZUEVTX0hFQURFUj0uL2FzbV90eXBlcy5oCitBQ19TVUJTVF9GSUxFKEFTTV9UWVBFU19IRUFERVIpCitkbmwKK2RubCBTYXZlIHRoZSBjb25maWd1cmF0aW9uICNkZWZpbmVzIG5lZWRlZCBmb3IgdGhlIHB1YmxpYyBleHQyZnMuaAorZG5sIGhlYWRlciBmaWxlCitkbmwKK2VjaG8gIi8qIFRoZXNlIGRlZmluZXMgYXJlIG5lZWRlZCBmb3IgdGhlIHB1YmxpYyBleHQyZnMuaCBoZWFkZXIgZmlsZSAqLyIgXAorICAgICA+IHB1YmxpY19jb25maWcuaAoraWYgZ3JlcCBIQVZFX1NZU19UWVBFU19IIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0giID4+IHB1YmxpY19jb25maWcuaAorZmkKK2lmIGdyZXAgV09SRFNfQklHRU5ESUFOIGNvbmZkZWZzLmggPiB0bXBfY29uZmlnLiQkOyB0aGVuCisgIHVuaXEgdG1wX2NvbmZpZy4kJCA+PiBwdWJsaWNfY29uZmlnLmgKK2Vsc2UKKyAgZWNobyAiI3VuZGVmIFdPUkRTX0JJR0VORElBTiIgPj4gcHVibGljX2NvbmZpZy5oCitmaQorcm0gLWYgdG1wX2NvbmZpZy4kJAorUFVCTElDX0NPTkZJR19IRUFERVI9Li9wdWJsaWNfY29uZmlnLmgKK0FDX1NVQlNUX0ZJTEUoUFVCTElDX0NPTkZJR19IRUFERVIpCitkbmwKK2RubCBTZWUgaWYgd2UgaGF2ZSBpbnR0eXBlcy5oIGFuZCBpZiBpbnRwdHJfdCBpcyBkZWZpbmVkCitkbmwKK0FDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmhdKQorQUNfQ0hFQ0tfVFlQRVMoaW50cHRyX3QpCitkbmwKK2RubCBTZWUgaWYgc3RydWN0IHN0YXQgaGFzIGEgc3RfZmxhZ3MgZmllbGQsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGdldCBmaWxlCitkbmwgZmxhZ3Mgc29tZXdoYXQgcG9ydGFibHkuICBBbHNvIGNoZWNrIGZvciB0aGUgYW5hbG9nb3VzIHNldHRlciwgY2hmbGFncygpLgorZG5sCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBzdHJ1Y3Qgc3RhdCBoYXMgYSBzdF9mbGFncyBmaWVsZCkKK0FDX0NBQ0hFX1ZBTChlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzLAorCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLAorCQlbc3RydWN0IHN0YXQgc3RhdDsgc3RhdC5zdF9mbGFncyA9IDA7XSwKKwkJW2UyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9eWVzXSwKKwkJW2UyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3M9bm9dKSkKK0FDX01TR19SRVNVTFQoJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3MpCitpZiB0ZXN0ICIkZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFncyIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgc3RfZmxhZ3MgZmllbGQgaXMgdXNlZnVsKQorICBBQ19DQUNIRV9WQUwoZTJmc3Byb2dzX2N2X3N0cnVjdF9zdF9mbGFnc19pbW11dCwKKwlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwKKwkJW3N0cnVjdCBzdGF0IHN0YXQ7IHN0YXQuc3RfZmxhZ3MgfD0gVUZfSU1NVVRBQkxFO10sCisJCVtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PXllc10sCisJCVtlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0PW5vXSkpCisgIEFDX01TR19SRVNVTFQoJGUyZnNwcm9nc19jdl9zdHJ1Y3Rfc3RfZmxhZ3NfaW1tdXQpCisgIGlmIHRlc3QgIiRlMmZzcHJvZ3NfY3Zfc3RydWN0X3N0X2ZsYWdzX2ltbXV0IiA9IHllczsgdGhlbgorCSAgQUNfREVGSU5FKEhBVkVfU1RBVF9GTEFHUywgMSwKKwkJW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGhhcyBzdF9mbGFnc10pCisgIGZpCitmaQorZG5sCitkbmwgQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBTQV9MRU4KK2RubAorQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkci5zYV9sZW4sCisJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NBX0xFTiwxLAorCQkJW0RlZmluZSB0byAxIGlmIGlmIHN0cnVjdCBzb2NrYWRkciBjb250YWlucyBzYV9sZW5dKSwsCisJWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwkgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorZG5sCitkbmwgVGhpcyB3aWxsIGFkZCAtbGJsa2lkIHRvIHRoZSBBQ19DSEVDS19GVU5DUyBzZWFyY2ggaWYgd2UgYXJlIHVzaW5nCitkbmwgdGhlIHN5c3RlbS1wcm92aWRlZCBibGtpZCBsaWJyYXJ5CitkbmwKK2lmIHRlc3QgLW4gIiRCTEtJRF9DTVQiOyB0aGVuCisgIEFDX1NFQVJDSF9MSUJTKFtibGtpZF9wcm9iZV9hbGxdLCBbYmxraWRdKQorZmkKK2RubAorQUNfQ0hFQ0tfRlVOQ1MobTRfZmxhdHRlbihbCisJX19zZWN1cmVfZ2V0ZW52CisJYmFja3RyYWNlCisJYmxraWRfcHJvYmVfZ2V0X3RvcG9sb2d5CisJY2hmbGFncworCWZhbGxvY2F0ZQorCWZhbGxvY2F0ZTY0CisJZmNob3duCisJZmRhdGFzeW5jCisJZnN0YXQ2NAorCWZ0cnVuY2F0ZTY0CisJZ2V0ZHRhYmxlc2l6ZQorCWdldG1udGluZm8KKwlnZXRwd3VpZF9yCisJZ2V0cmxpbWl0CisJZ2V0cnVzYWdlCisJanJhbmQ0OAorCWxsc2VlaworCWxzZWVrNjQKKwltYWxsaW5mbworCW1ic3Rvd2NzCisJbWVtYWxpZ24KKwltbWFwCisJbXN5bmMKKwluYW5vc2xlZXAKKwlvcGVuNjQKKwlwYXRoY29uZgorCXBvc2l4X2ZhZHZpc2UKKwlwb3NpeF9tZW1hbGlnbgorCXByY3RsCisJc2VjdXJlX2dldGVudgorCXNldG1udGVudAorCXNldHJlc2dpZAorCXNldHJlc3VpZAorCXNyYW5kb20KKwlzdHJjYXNlY21wCisJc3RyZHVwCisJc3RybmxlbgorCXN0cnB0aW1lCisJc3RydG91bGwKKwlzeW5jX2ZpbGVfcmFuZ2UKKwlzeXNjb25mCisJdXNsZWVwCisJdXRpbWUKKwl2YWxsb2MKK10pKQorZG5sCitkbmwgQ2hlY2sgdG8gc2VlIGlmIC1sc29ja2V0IGlzIHJlcXVpcmVkIChzb2xhcmlzKSB0byBtYWtlIHNvbWV0aGluZworZG5sIHRoYXQgdXNlcyBzb2NrZXQoKSB0byBjb21waWxlOyB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIFVVSUQgbGlicmFyeQorZG5sCitTT0NLRVRfTElCPScnCitBQ19DSEVDS19MSUIoc29ja2V0LCBzb2NrZXQsIFtTT0NLRVRfTElCPS1sc29ja2V0XSkKK0FDX1NVQlNUKFNPQ0tFVF9MSUIpCitkbmwKK2RubCBTZWUgaWYgb3B0cmVzZXQgZXhpc3RzCitkbmwKK0FDX01TR19DSEVDS0lORyhmb3Igb3B0cmVzZXQpCitBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV9vcHRyZXNldCwKK1tBQ19FR1JFUF9IRUFERVIob3B0cmVzZXQsIHVuaXN0ZC5oLAorICBhY19jdl9oYXZlX29wdHJlc2V0PXllcywgYWNfY3ZfaGF2ZV9vcHRyZXNldD1ubyldKWRubAorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGF2ZV9vcHRyZXNldCkKK2lmIHRlc3QgJGFjX2N2X2hhdmVfb3B0cmVzZXQgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfT1BUUkVTRVQsIDEsIFtEZWZpbmUgdG8gMSBpZiBvcHRyZXNldCBmb3IgZ2V0b3B0IGlzIHByZXNlbnRdKQorZmkKK2RubAorZG5sIFRlc3QgZm9yIHNlbV9pbml0LCBhbmQgd2hpY2ggbGlicmFyeSBpdCBtaWdodCByZXF1aXJlOgorZG5sCitBSF9URU1QTEFURShbSEFWRV9TRU1fSU5JVF0sIFtEZWZpbmUgdG8gMSBpZiBzZW1faW5pdCgpIGV4aXN0c10pCitTRU1fSU5JVF9MSUI9JycKK0FDX0NIRUNLX0ZVTkMoc2VtX2luaXQsICwKKyAgQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHNlbV9pbml0LAorICAJQUNfREVGSU5FKEhBVkVfU0VNX0lOSVQsIDEpCisgIAlTRU1fSU5JVF9MSUI9LWxwdGhyZWFkLAorICBBQ19DSEVDS19MSUIocnQsIHNlbV9pbml0LAorICAJQUNfREVGSU5FKEhBVkVfU0VNX0lOSVQsIDEpCisgIAlTRU1fSU5JVF9MSUI9LWxydCwKKyAgQUNfQ0hFQ0tfTElCKHBvc2l4NCwgc2VtX2luaXQsCisgIAlBQ19ERUZJTkUoSEFWRV9TRU1fSU5JVCwgMSkKKyAgCVNFTV9JTklUX0xJQj0tbHBvc2l4NCkpKSlkbmwKK0FDX1NVQlNUKFNFTV9JTklUX0xJQikKK2RubAorZG5sIENoZWNrIGZvciB1bmlmaWVkIGRpZmYKK2RubAorQUNfTVNHX0NIRUNLSU5HKGZvciB1bmlmaWVkIGRpZmYgb3B0aW9uKQoraWYgZGlmZiAtdSAkMCAkMCA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgVU5JX0RJRkZfT1BUUz0tdQorZWxzZQorICAgVU5JX0RJRkZfT1BUUz0tYworZmkKK0FDX01TR19SRVNVTFQoJFVOSV9ESUZGX09QVFMpCitBQ19TVUJTVChVTklfRElGRl9PUFRTKQorZG5sCitkbmwgV2UgdXNlIHRoZSBFWFQyIGlvY3RscyBvbmx5IHVuZGVyIExpbnV4CitkbmwKK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqKQorCUFDX0RFRklORShIQVZFX0VYVDJfSU9DVExTLCAxLCBbRGVmaW5lIHRvIDEgaWYgRXh0MiBpb2N0bHMgcHJlc2VudF0pCisJOzsKK2VzYWMKK2RubAorZG5sIE9TLXNwZWNpZmljIHVuY29tbWVudCBjb250cm9sCitkbmwKK0xJTlVYX0NNVD0iIyIKK0NZR1dJTl9DTVQ9IiMiCitVTklYX0NNVD0KK2Nhc2UgIiRob3N0X29zIiBpbgorbGludXgqKQorCUxJTlVYX0NNVD0KKwk7OworY3lnd2luKQorCUNZR1dJTl9DTVQ9CisJVU5JWF9DTVQ9IiMiCisJOzsKK2VzYWMKK0FDX1NVQlNUKExJTlVYX0NNVCkKK0FDX1NVQlNUKENZR1dJTl9DTVQpCitBQ19TVUJTVChVTklYX0NNVCkKK2RubAorZG5sIExpbnV4IGFuZCBIdXJkIHBsYWNlcyByb290IGZpbGVzIGluIHRoZSAvIGJ5IGRlZmF1bHQKK2RubAorY2FzZSAiJGhvc3Rfb3MiIGluCitsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkKKwlpZiB0ZXN0ICIkcHJlZml4IiA9IE5PTkUgLWEgIiRyb290X3ByZWZpeCIgPSBOT05FIDsgdGhlbgorCQlyb290X3ByZWZpeD0iIjsKKwkJQUNfTVNHX1JFU1VMVChbT24gJGhvc3Rfb3Mgc3lzdGVtcywgcm9vdF9wcmVmaXggZGVmYXVsdHMgdG8gJyddKQorCWZpCisJOzsKK2VzYWMKK2RubAorZG5sIE9uIExpbnV4L2h1cmQsIGZvcmNlIHRoZSBwcmVmaXggdG8gYmUgL3VzcgorZG5sCitjYXNlICIkaG9zdF9vcyIgaW4KK2xpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KQorCWlmIHRlc3QgIiRwcmVmaXgiID0gTk9ORSA7IHRoZW4KKwkJcHJlZml4PSIvdXNyIjsKKwkJQUNfTVNHX1JFU1VMVChbT24gJGhvc3Rfb3Mgc3lzdGVtcywgcHJlZml4IGRlZmF1bHRzIHRvIC91c3JdKQorCQlpZiB0ZXN0ICIkbWFuZGlyIiA9ICcke3ByZWZpeH0vbWFuJyA7IHRoZW4KKwkJCUFDX01TR19SRVNVTFQoWy4uLmFuZCBtYW5kaXIgZGVmYXVsdHMgdG8gL3Vzci9zaGFyZS9tYW5dKQorCQkJbWFuZGlyPS91c3Ivc2hhcmUvbWFuCisJCWZpCisJZmkKKzs7Citlc2FjCitpZiB0ZXN0ICIkcm9vdF9wcmVmaXgiID0gTk9ORSA7IHRoZW4KKwlpZiB0ZXN0ICIkcHJlZml4IiA9IE5PTkUgOyB0aGVuCisJCXJvb3RfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisJZWxzZQorCQlyb290X3ByZWZpeD0iJHByZWZpeCIKKwlmaQorCXJvb3RfYmluZGlyPSRiaW5kaXIKKwlyb290X3NiaW5kaXI9JHNiaW5kaXIKKwlyb290X2xpYmRpcj0kbGliZGlyCisJcm9vdF9zeXNjb25mZGlyPSRzeXNjb25mZGlyCitlbHNlCisJcm9vdF9iaW5kaXI9JyR7cm9vdF9wcmVmaXh9L2JpbicKKwlyb290X3NiaW5kaXI9JyR7cm9vdF9wcmVmaXh9L3NiaW4nCisJcm9vdF9saWJkaXI9JyR7cm9vdF9wcmVmaXh9L2xpYicKKwlyb290X3N5c2NvbmZkaXI9JyR7cm9vdF9wcmVmaXh9L2V0YycKK2ZpCitpZiB0ZXN0ICIkYmluZGlyIiAhPSAnJHtleGVjX3ByZWZpeH0vYmluJzsgdGhlbgorICAgIHJvb3RfYmluZGlyPSRiaW5kaXIKKyAgICBBQ19NU0dfUkVTVUxUKFtTZXR0aW5nIHJvb3RfYmluZGlyIHRvICRyb290X2JpbmRpcl0pCitmaQoraWYgdGVzdCAiJHNiaW5kaXIiICE9ICcke2V4ZWNfcHJlZml4fS9zYmluJzsgdGhlbgorICAgIHJvb3Rfc2JpbmRpcj0kc2JpbmRpcgorICAgIEFDX01TR19SRVNVTFQoW1NldHRpbmcgcm9vdF9zYmluZGlyIHRvICRyb290X3NiaW5kaXJdKQorZmkKK2lmIHRlc3QgIiRsaWJkaXIiICE9ICcke2V4ZWNfcHJlZml4fS9saWInOyB0aGVuCisgICAgcm9vdF9saWJkaXI9JGxpYmRpcgorICAgIEFDX01TR19SRVNVTFQoW1NldHRpbmcgcm9vdF9saWJkaXIgdG8gJHJvb3RfbGliZGlyXSkKK2ZpCitpZiB0ZXN0ICIkc3lzY29uZmRpciIgIT0gJyR7cHJlZml4fS9ldGMnOyB0aGVuCisgICAgcm9vdF9zeXNjb25mZGlyPSRzeXNjb25mZGlyCisgICAgQUNfTVNHX1JFU1VMVChbU2V0dGluZyByb290X3N5c2NvbmZkaXIgdG8gJHJvb3Rfc3lzY29uZmRpcl0pCitmaQorQUNfU1VCU1Qocm9vdF9wcmVmaXgpCitBQ19TVUJTVChyb290X2JpbmRpcikKK0FDX1NVQlNUKHJvb3Rfc2JpbmRpcikKK0FDX1NVQlNUKHJvb3RfbGliZGlyKQorQUNfU1VCU1Qocm9vdF9zeXNjb25mZGlyKQorZG5sCitkbmwgQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbXVsdGlhcmNoIGFyY2gKK2RubAorQUNfQVJHX1dJVEgoW211bHRpYXJjaF0sCitbICAtLXdpdGgtbXVsdGlhcmNoPUFSQ0ggc3BlY2lmeSB0aGUgbXVsdGlhcmNoIHRyaXBsZXRdLAorbGliZGlyPSRsaWJkaXIvJHdpdGh2YWwKK3Jvb3RfbGliZGlyPSRyb290X2xpYmRpci8kd2l0aHZhbAorKWRubAorZG5sCitkbmwgU2VlIGlmIC1zdGF0aWMgd29ya3MuICBUaGlzIGNvdWxkIGZhaWwgaWYgdGhlIGxpbmtlciBkb2VzIG5vdAorZG5sIHN1cHBvcnQgLXN0YXRpYywgb3IgaWYgcmVxdWlyZWQgZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgYXZhaWxhYmxlCitkbmwgaW4gc3RhdGljIGZvcm0uCitkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB3ZSBjYW4gbGluayB3aXRoIC1zdGF0aWNdKQorQUNfQ0FDSEVfVkFMKGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljLAorW1NBVkVfTERGTEFHUz0kTERGTEFHUzsgTERGTEFHUz0iJExERkxBR1MgLXN0YXRpYyIKK0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkaW8uaD5dLFtmZmx1c2goc3Rkb3V0KTtdLAorIGFjX2N2X2UyZnNwcm9nc191c2Vfc3RhdGljPXllcywgYWNfY3ZfZTJmc3Byb2dzX3VzZV9zdGF0aWM9bm8pCitMREZMQUdTPSRTQVZFX0xERkxBR1NdKQorZG5sCitkbmwgUmVnYXJkbGVzcyBvZiBob3cgdGhlIHRlc3QgdHVybnMgb3V0LCBTb2xhcmlzIGRvZXNuJ3QgaGFuZGxlIC1zdGF0aWMKK2RubCBUaGlzIGlzIGNhdXNlZCBieSB0aGUgc29ja2V0IGxpYnJhcnkgcmVxdWlyaW5nIHRoZSBuc2wgbGlicmFyeSwgd2hpY2gKK2RubCByZXF1aXJlcyB0aGUgLWRsIGxpYnJhcnksIHdoaWNoIG9ubHkgd29ya3MgZm9yIGR5bmFtaWNhbGx5IGxpbmtlZCAKK2RubCBwcm9ncmFtcy4gIEl0IGJhc2ljYWxseSBtZWFucyB5b3UgY2FuJ3QgaGF2ZSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcworZG5sIHdoaWNoIHVzZSB0aGUgbmV0d29yayB1bmRlciBTb2xhcmlzLiAgCitkbmwKK2Nhc2UgIiRob3N0X29zIiBpbgorc29sYXJpczIuKikKKwlhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYz1ubwkKKzs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYykKK0xERkxBR19TVEFUSUM9CitpZiB0ZXN0ICRhY19jdl9lMmZzcHJvZ3NfdXNlX3N0YXRpYyA9IHllczsgdGhlbgorCUxERkxBR19TVEFUSUM9LXN0YXRpYworZmkKK0FDX1NVQlNUKExERkxBR19TVEFUSUMpCitkbmwKK2RubCBXb3JrIGFyb3VuZCBteXN0ZXJpb3VzIERhcndpbiAvIEdOVSBsaWJpbnRsIHByb2JsZW0KK2RubCAoX19hc21fXyByZWRpcmVjdGlvbiBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgbXlzdGVyaW91cyByZWFzb24uICBMb29rcyBsaWtlCitkbmwgQXBwbGUgaGFja2VkIGdjYyBzb21laG93PykKK2RubAorY2FzZSAiJGhvc3Rfb3MiIGluCitkYXJ3aW4qKQorCUFDX01TR19SRVNVTFQoW1VzaW5nIEFwcGxlIERhcndpbiAvIEdOVSBsaWJpbnRsIHdvcmthcm91bmRdKQorCUFDX0RFRklORShfSU5UTF9SRURJUkVDVF9NQUNST1MsIDEsCisJCVtEZWZpbmUgdG8gMSBpZiBBcHBsZSBEYXJ3aW4gbGliaW50bCB3b3JrYXJvdW5kIGlzIG5lZWRlZF0pCisJOzsKK2VzYWMKK2RubAorZG5sIE1ha2UgdGhlIHNzIGFuZCBldCBkaXJlY3RvcmllcyB3b3JrIGNvcnJlY3RseS4KK2RubAorU1NfRElSPWBjZCAke3NyY2Rpcn0vbGliL3NzOyBwd2RgCitFVF9ESVI9YGNkICR7c3JjZGlyfS9saWIvZXQ7IHB3ZGAKK0FDX1NVQlNUKFNTX0RJUikKK0FDX1NVQlNUKEVUX0RJUikKK2RubAorZG5sIE9ubHkgdHJ5IHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSBpZiB3ZSdyZSBub3QgY3Jvc3MgY29tcGlsaW5nLgorZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyA7IHRoZW4KKyAgRE9fVEVTVF9TVUlURT0KK2Vsc2UKKyAgRE9fVEVTVF9TVUlURT1jaGVjaworZmkKK0FDX1NVQlNUKERPX1RFU1RfU1VJVEUpCitkbmwKK2RubCBPbmx5IGluY2x1ZGUgdGhlIGludGwgaW5jbHVkZSBmaWxlcyBpZiB3ZSdyZSBidWlsZGluZyB3aXRoIHRoZW0KK2RubAorSU5DTFVERVM9Jy1JLiAtSSQodG9wX2J1aWxkZGlyKS9saWIgLUkkKHRvcF9zcmNkaXIpL2xpYicKK2lmIHRlc3QgLW4gIiRDUFBGTEFHUyIgOyB0aGVuCisJSU5DTFVERVM9IiRJTkNMVURFUyAkQ1BQRkxBR1MiCitmaQoraWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9ICJ5ZXMiIDsgdGhlbgorCUlOQ0xVREVTPSRJTkNMVURFUycgLUkkKHRvcF9idWlsZGRpcikvaW50bCAtSSQodG9wX3NyY2RpcikvaW50bCcKK2ZpCitBQ19TVUJTVChJTkNMVURFUykKK2RubAorZG5sIEJ1aWxkIENGTEFHUworZG5sCitpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorICAgQlVJTERfQ0ZMQUdTPSIkQ0ZMQUdTICRDUFBGTEFHUyIKKyAgIEJVSUxEX0xERkxBR1M9IiRMREZMQUdTIgorZWxzZQorICAgQlVJTERfQ0ZMQUdTPQorICAgQlVJTERfTERGTEFHUz0KK2ZpCitBQ19TVUJTVChCVUlMRF9DRkxBR1MpCitBQ19TVUJTVChCVUlMRF9MREZMQUdTKQorZG5sCitkbmwgTWFrZSBvdXIgb3V0cHV0IGZpbGVzLCBiZWluZyBzdXJlIHRoYXQgd2UgY3JlYXRlIHRoZSBzb21lIG1pc2NlbGxhbmVvdXMgCitkbmwgZGlyZWN0b3JpZXMKK2RubAordGVzdCAtZCBsaWIgfHwgbWtkaXIgbGliCit0ZXN0IC1kIGluY2x1ZGUgfHwgbWtkaXIgaW5jbHVkZQordGVzdCAtZCBpbmNsdWRlL2xpbnV4IHx8IG1rZGlyIGluY2x1ZGUvbGludXgKK3Rlc3QgLWQgaW5jbHVkZS9hc20gfHwgbWtkaXIgaW5jbHVkZS9hc20KK2ZvciBpIGluIE1DT05GSUcgTWFrZWZpbGUgZTJmc3Byb2dzLnNwZWMgXAorCXV0aWwvTWFrZWZpbGUgdXRpbC9zdWJzdC5jb25mIHV0aWwvZ2VuLXRhcmJhbGwgdXRpbC9pbnN0YWxsLXN5bWxpbmsgXAorCWxpYi9ldC9NYWtlZmlsZSBsaWIvc3MvTWFrZWZpbGUgbGliL2UycC9NYWtlZmlsZSBcCisJbGliL2V4dDJmcy9NYWtlZmlsZSBsaWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisJbGliL3V1aWQvTWFrZWZpbGUgbGliL3V1aWQvdXVpZF90eXBlcy5oIFwKKwlsaWIvYmxraWQvTWFrZWZpbGUgbGliL2Jsa2lkL2Jsa2lkX3R5cGVzLmggbGliL3F1b3RhL01ha2VmaWxlIFwKKwlsaWIvc3Mvc3MucGMgbGliL3V1aWQvdXVpZC5wYyBsaWIvZXQvY29tX2Vyci5wYyBcCisJbGliL2UycC9lMnAucGMgbGliL2Jsa2lkL2Jsa2lkLnBjIGxpYi9leHQyZnMvZXh0MmZzLnBjIFwKKwltaXNjL01ha2VmaWxlIGV4dDJlZC9NYWtlZmlsZSBlMmZzY2svTWFrZWZpbGUgXAorCWRlYnVnZnMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUgdGVzdHMvcHJvZ3MvTWFrZWZpbGUgXAorCXJlc2l6ZS9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBcCisJaW50bC9saWJnbnVpbnRsLmggcG8vTWFrZWZpbGUuaW4gOyBkbworCWlmIHRlc3QgLWQgYGRpcm5hbWUgJHtzcmNkaXJ9LyRpYCA7IHRoZW4KKwkJb3V0bGlzdD0iJG91dGxpc3QgJGkiCisJZmkKK2RvbmUKK0FDX09VVFBVVCgkb3V0bGlzdCkKK2lmIHRlc3QgLWYgdXRpbC9nZW4tdGFyYmFsbDsgdGhlbiBjaG1vZCAreCB1dGlsL2dlbi10YXJiYWxsOyBmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbnRyaWIvYnVpbGQtcnBtIGIvZTJmc3Byb2dzL2NvbnRyaWIvYnVpbGQtcnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMDYwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29udHJpYi9idWlsZC1ycG0KQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKKyMgZW5hYmxlIHh0cmFjZSBvdXRwdXQgaWYgcmVxdWVzdGVkCitpZiBbIC1uICR7RU5BQkxFX1hUUkFDRTotJyd9IF07IHRoZW4KKyAgICBzZXQgLXgKK2ZpCisKKyMgQnVpbGQgYW4gZTJmc3Byb2dzIFJQTSBmcm9tIGN2cworCitwd2Q9YHB3ZGAKK2N1cnJkaXI9YGJhc2VuYW1lICRwd2RgCitwa2duYW1lPWBncmVwIE5hbWU6IGUyZnNwcm9ncy5zcGVjIHwgYXdrICd7cHJpbnQgJDI7fSdgCitwa2d2ZXJzPWBncmVwIFZlcnNpb246IGUyZnNwcm9ncy5zcGVjIHwgYXdrICd7cHJpbnQgJDI7fSdgCitidWlsZGRpcj0ke3BrZ25hbWV9LSR7cGtndmVyc30KKworIyBlbnN1cmUgdGhhdCAkVE1QIGlzIHNldCB0byBzb21ldGhpbmcKK1RNUD0ke1RNUDotJy90bXAnfQorCitjZCAuLgordG1wZGlyPWBta3RlbXAgLWQgJHtSUE1fVE1QRElSOi0kVE1QfS9ycG10bXAuWFhYWFhYYAorCisjIFdlIG5lZWQgdG8gYnVpbGQgYSB0YXJiYWxsIGZvciB0aGUgU1JQTSB1c2luZyAkYnVpbGRkaXIgYXMgdGhlIAorIyBkaXJlY3RvcnkgbmFtZSAoc2luY2UgdGhhdCdzIHdoYXQgUlBNIHdpbGwgZXhwZWN0IGl0IHRvIHVucGFjaworIyBpbnRvKS4gIFRoYXQgbWF5IHJlcXVpcmUgYSBzeW1saW5rLgorCisjIE1ha2UgYSByZWN1cnNpdmUtc3ltbGluayBjb3B5IG9mIHRoZSBzb3VyY2UgZGlyCitjcCAtc1IgYHB3ZGAvJGN1cnJkaXIgJHRtcGRpci8kYnVpbGRkaXIgfHwgZXhpdCAxCisKKyMgUmVtb3ZlIGFueSBidWlsZCBmaWxlcyBmcm9tIHRoZSB0ZW1wb3JhcnkgdGFyYmFsbCBkaXJlY3RvcnkKK1sgLWYgJHRtcGRpci8kYnVpbGRkaXIvTWFrZWZpbGUgXSAmJiBtYWtlIC1DICR0bXBkaXIvJGJ1aWxkZGlyIGRpc3RjbGVhbgorCitFWENMVURFPSItLWV4Y2x1ZGUgLmhnKiAtLWV4Y2x1ZGUgLnBjKiIKKyhjZCAkdG1wZGlyICYmIHRhciBjemZoICR7YnVpbGRkaXJ9LnRhci5neiAkRVhDTFVERSAkYnVpbGRkaXIpCisKK1sgImBycG1idWlsZCAtLXZlcnNpb24gMj4gL2Rldi9udWxsYCIgXSAmJiBSUE09cnBtYnVpbGQgfHwgUlBNPXJwbQorCiskUlBNIC0tZGVmaW5lICJfc291cmNlZGlyICR0bXBkaXIiIFwKKyAgICAgLS1kZWZpbmUgIl90b3BkaXIgJHtSUE1fVE9QRElSOi0kKHJwbSAtRSAlX3RvcGRpcil9IiBcCisgICAgIC0tZGVmaW5lICJfdG1wZGlyICR7UlBNX1RNUERJUjotJFRNUH0iIFwKKyAgICAgLS1kZWZpbmUgImV4dHJhX2NvbmZpZ19mbGFncyAke0VYVFJBX0NPTkZJR19GTEFHUzotJyd9IiBcCisgICAgIC1iYSAkY3VycmRpci9lMmZzcHJvZ3Muc3BlYworCitycG1fZXhpdD0kPworcm0gLXJmICR0bXBkaXIKK2V4aXQgJHJwbV9leGl0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvY29udHJpYi9kY29uZiBiL2UyZnNwcm9ncy9jb250cmliL2Rjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjRjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29udHJpYi9kY29uZgpAQCAtMCwwICsxLDExOCBAQAorIyEvYmluL3NoCisjJElkJAorIyBDcmVhdGUgQWRvYmUtUG9zdFNjcmlwdCBmaWxlIHRoYXQgZ3JhcGhpY2FsbHkgZGlzcGxheXMgdGhlIG91dHB1dCBvZgorIyBkdW1wZTJmcyg4KS4gVXNlICJkdW1wZTJmcyB8IGRjb25mIiB0byBjcmVhdGUgYSBQb3N0U2NyaXB0IGZpbGUgb24gc3Rkb3V0LgorIyBEZXZlbG9wZWQgYW5kIHRlc3RlZCBmb3IgTGludXggMS4wLgorIyBDb3B5cmlnaHQgKGMpIDE5OTQKKyMgVWxyaWNoIFdpbmRsCisjIEFMdGUgUmVnZW5zYnVyZ2VyIFN0cmFzc2UgMTFhCisjIEQtOTMxNDkgTml0dGVuYXUsIEdlcm1hbnkKKyMgPFVscmljaC5XaW5kbEByei51bmktcmVnZW5zYnVyZy5kZT4KK1NFTEY9YGJhc2VuYW1lICQwYAorQVdLRklMRT0vdG1wLyR7U0VMRn0uYXdrCitURU1QRklMRT0vdG1wLyR7U0VMRn0udG1wCitlY2hvICcKK0JFR0lOIHsKKwlwcmludCAiQiIKK30KKy9eSW5vZGUgY291bnQ6LyB7CisJaWM9JDM7IG5leHQKK30KKy9eQmxvY2sgY291bnQ6LyB7CisJYmM9JDM7IG5leHQKK30KKy9eRmlyc3QgYmxvY2s6LyB7CisJZmI9JDM7IG5leHQKK30KKy9eQmxvY2sgc2l6ZTovIHsKKwlicz0kMzsgbmV4dAorfQorL15CbG9ja3MgcGVyIGdyb3VwOi8geworCWJwZz0kNAorCXByaW50ZigiQkMgJWRcbiIsIGJwZykKKwlwcmludGYoIkdDICVkXG4iLCAoYmMgKyBicGcgLSAxKSAvIGJwZykKKwluZXh0Cit9CisvXklub2RlcyBwZXIgZ3JvdXA6LyB7CisJaXBnPSQ0OyBuZXh0Cit9CisvXkxhc3Qgd3JpdGUgdGltZTovIHsKKwlsd3RpbWU9JDA7IGdzdWIoIkxhc3Qgd3JpdGUgdGltZTpbIF0rIiwgIiIsIGx3dGltZSkKKwlwcmludGYoIlQgJXNcbiIsIGx3dGltZSkKKwluZXh0Cit9CisvXkdyb3VwIFswLTldKzovIHsKKwlncm91cD0kMjsgZ3N1YigiOiIsICIiLCBncm91cCkKKwlibG9jaz0iIgorCWdyb3VwX3N0YXJ0PWdyb3VwKmJwZytmYgorCWdyb3VwX2VuZD1ncm91cF9zdGFydCticGcKKwlwcmludGYoIkcgJWQgOiAlZCAtICVkXG4iLCBncm91cCwgZ3JvdXBfc3RhcnQsIGdyb3VwX2VuZCkKKwluZXh0Cit9CisvXlsgXStGcmVlIGJsb2NrczogLyB7CisJZm9yICggaT0zOyBpIDwgTkY7ICsraSApIHsKKwkJYmxvY2s9JGk7IGdzdWIoIiwiLCAiIiwgYmxvY2spCisJCWlmICggaW5kZXgoYmxvY2ssICItIikgPT0gMCApIGJsb2NrPWJsb2NrICItIiBibG9jaworCQlwb3M9aW5kZXgoYmxvY2ssICItIikKKwkJcHJpbnRmKCJGQiAlZC0lZFxuIiwKKwkJICAgICAgIHN1YnN0cihibG9jaywgMCwgcG9zKSAtIGdyb3VwX3N0YXJ0LAorCQkgICAgICAgc3Vic3RyKGJsb2NrLCBwb3MgKyAxKSAtIGdyb3VwX3N0YXJ0KQorCX0KKwlpZiAoIGJsb2NrID09ICIiICkgcHJpbnRmKCJHcm91cCAlZCBpcyBmdWxsXG4iLCBncm91cCkKKwlwcmludCAiLS0tLSIKKwluZXh0Cit9CitFTkQgeworCXByaW50ZigiRSAlc1xuIiwgbHd0aW1lKQorfScgPiRBV0tGSUxFCithd2sgLWYgJEFXS0ZJTEUgJCogPiRURU1QRklMRQorZWNobyAnCitCRUdJTiB7CisgICAgICAgIHByaW50ZigiJSUhUFMtQWRvYmVcbiIpCisgICAgICAgIHByaW50ZigiJSUlJUJvdW5kaW5nQm94OiAwIDAgMSAxXG4iKQorCXByaW50ZigiL3JlY3Qgey95MiBleGNoIGRlZiAveDIgZXhjaCBkZWYgL3kxIGV4Y2ggZGVmIC94MSBleGNoIGRlZlxuIikKKwlwcmludGYoIiAgICAgICBuZXdwYXRoIHgxIHkxIG1vdmV0byB4MiB5MSBsaW5ldG8geDIgeTIgbGluZXRvXG4iKQorCXByaW50ZigiICAgICAgIHgxIHkyIGxpbmV0byBjbG9zZXBhdGh9IGRlZlxuIikKKwlwcmludGYoIi9mYiB7cmVjdCBnc2F2ZSAxLjAgc2V0Z3JheSBmaWxsIGdyZXN0b3JlfSBkZWZcbiIpCisJcHJpbnRmKCIvZGcge3JlY3QgZ3NhdmUgZ3NhdmUgMC4wIHNldGdyYXkgZmlsbCBncmVzdG9yZVxuIikKKwlwcmludGYoIiAgICAgMC41IHNldGdyYXkgc3Ryb2tlIGdyZXN0b3JlfSBkZWZcbiIpCisJcHJpbnRmKCIvdGV4dHh5IHttb3ZldG8gc2hvd30gYmluZCBkZWZcbiIpCisJcHJpbnRmKCIwLjAwMDEgc2V0bGluZXdpZHRoXG4iKQorfQorJDEgPT0gIkdDIiAmJiBORiA9PSAyIHsKKwludW1iZXJfb2ZfZ3JvdXBzPSQyCisJcHJpbnRmKCIvVGltZXMtUm9tYW4gZmluZGZvbnQgJWcgc2NhbGVmb250IHNldGZvbnRcbiIsCisJICAgICAgIDEuMCAvIG51bWJlcl9vZl9ncm91cHMpCisJbmV4dAorfQorJDEgPT0gIkJDIiAmJiBORiA9PSAyIHsKKwlibG9ja3NfcGVyX2dyb3VwPSQyOyBuZXh0Cit9CiskMSA9PSAiVCIgJiYgTkYgPiAxIHsKKwlwcmludGYoIiglcykgJWcgJWcgdGV4dHh5XG4iLAorCSAgICAgICBzdWJzdHIoJDAsIDIpLCAwLCAxLjAyKQorCW5leHQKK30KKyQxID09ICJHIiAmJiBORiA9PSA2ICYmICQzID09ICI6IiAmJiAkNSA9PSAiLSIgeworCWdyb3VwX2luZGV4PSQyCisJZ3M9JDQKKwlnZT0kNgorCWhlaWdodD0xLjAgLyBudW1iZXJfb2ZfZ3JvdXBzCisJdnN0YXJ0PWdyb3VwX2luZGV4ICogaGVpZ2h0CisJcHJpbnRmKCIlJSBncm91cCAlZCBvZiAlZDpcbjAgJWcgMSAlZyBkZ1xuIiwKKwkgICAgICAgZ3JvdXBfaW5kZXgsIG51bWJlcl9vZl9ncm91cHMsIHZzdGFydCwgdnN0YXJ0ICsgaGVpZ2h0KQorCXByaW50ZigiKEdyb3VwICVzKSAxLjAyICVnIHRleHR4eVxuIiwgZ3JvdXBfaW5kZXgsIHZzdGFydCkKKwluZXh0Cit9CiskMSA9PSAiRkIiICYmIE5GID09IDIgeworCXBvcyA9IGluZGV4KCQyLCAiLSIpCisJcHJpbnRmKCIlJSBob2xlICVzXG4lZyAlZyAlZyAlZyBmYlxuIiwKKwkgICAgICAgJDIsIHN1YnN0cigkMiwgMCwgcG9zKSAvIGJsb2Nrc19wZXJfZ3JvdXAsIHZzdGFydCwKKwkgICAgICAgKHN1YnN0cigkMiwgcG9zICsgMSkgKyAxKSAvIGJsb2Nrc19wZXJfZ3JvdXAsIHZzdGFydCArIGhlaWdodCkKKwluZXh0Cit9CitFTkQgeworICAgIAlwcmludGYoIiUlJSVFT0ZcbiIpCit9CisnID4kQVdLRklMRQorYXdrIC1mICRBV0tGSUxFICRURU1QRklMRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbnRyaWIvZTJjcm9uY2hlY2sgYi9lMmZzcHJvZ3MvY29udHJpYi9lMmNyb25jaGVjawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzIwNGJlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbnRyaWIvZTJjcm9uY2hlY2sKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIGUyY3JvbmNoZWNrIC0tIHJ1biBlMmZzY2sgYXV0b21hdGljYWxseSBvdXQgb2YgL2V0Yy9jcm9uLndlZWtseQorIworIyBUaGlzIHNjcmlwdCBpcyBpbnRlbmRlZCB0byBiZSBydW4gYnkgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIAorIyBwZXJpb2RpY2FsbHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBvciB0byBiZSBydW4gb25jZSBhIHdlZWsKKyMgb3Igc28gYnkgdGhlIGNyb24gZGFlbW9uIHRvIGNoZWNrIGEgbW91bnRlZCBmaWxlc3lzdGVtIChub3JtYWxseQorIyB0aGUgcm9vdCBmaWxlc3lzdGVtLCBidXQgaXQgY291bGQgYmUgdXNlZCB0byBjaGVjayBvdGhlciBmaWxlc3lzdGVtcworIyB0aGF0IGFyZSBhbHdheXMgbW91bnRlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYm9vdGVkKS4KKyMKKyMgTWFrZSBzdXJlIHlvdSBjdXN0b21pemUgIlZHIiBzbyBpdCBpcyB5b3VyIExWTSB2b2x1bWUgZ3JvdXAgbmFtZSwgCisjICJWT0xVTUUiIHNvIGl0IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlc3lzdGVtJ3MgbG9naWNhbCB2b2x1bWUsIAorIyBhbmQgIkVNQUlMIiB0byBiZSB5b3VyIGUtbWFpbCBhZGRyZXNzCisjCisjIFdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbywgQ29weXJpZ2h0IDIwMDcsIDIwMDgsIDIwMDkuCisjCisjIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIAorIyBHTlUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMKKworVkc9c3NkCitWT0xVTUU9cm9vdAorU05BUFNJWkU9MTAwbQorRU1BSUw9c3lzYWRtaW5AZXhhbXBsZS5jb20KKworVE1QRklMRT1gbWt0ZW1wIC10IGUyZnNjay5sb2cuWFhYWFhYWFhYWGAKKworT1BUUz0iLUZ0dHYgLUMwIgorI09QVFM9Ii1GdHR2IC1FIGZyYWdjaGVjayIKKworc2V0IC1lCitTVEFSVD0iJChkYXRlICsnJVklbSVkJUglTSVTJykiCitsdmNyZWF0ZSAtcyAtTCAke1NOQVBTSVpFfSAtbiAiJHtWT0xVTUV9LXNuYXAiICIke1ZHfS8ke1ZPTFVNRX0iCitpZiBuaWNlIGxvZ3NhdmUgLWFzICRUTVBGSUxFIGUyZnNjayAtcCAkT1BUUyAiL2Rldi8ke1ZHfS8ke1ZPTFVNRX0tc25hcCIgJiYgXAorICAgbmljZSBsb2dzYXZlIC1hcyAkVE1QRklMRSBlMmZzY2sgLWZ5ICRPUFRTICIvZGV2LyR7Vkd9LyR7Vk9MVU1FfS1zbmFwIiA7IHRoZW4KKyAgZWNobyAnQmFja2dyb3VuZCBzY3J1YmJpbmcgc3VjY2VlZGVkIScKKyAgdHVuZTJmcyAtQyAwIC1UICIke1NUQVJUfSIgIi9kZXYvJHtWR30vJHtWT0xVTUV9IgorZWxzZQorICBlY2hvICdCYWNrZ3JvdW5kIHNjcnViYmluZyBmYWlsZWQhIFJlYm9vdCB0byBmc2NrIHNvb24hJworICB0dW5lMmZzIC1DIDE2MDAwIC1UICIxOTAwMDEwMSIgIi9kZXYvJHtWR30vJHtWT0xVTUV9IgorICBpZiB0ZXN0IC1uICIkUlBULUVNQUlMIjsgdGhlbiAKKyAgICBtYWlsIC1zICJFMmZzY2sgb2YgL2Rldi8ke1ZHfS8ke1ZPTFVNRX0gZmFpbGVkISIgJEVNQUlMIDwgJFRNUEZJTEUKKyAgZmkKK2ZpCitsdnJlbW92ZSAtZiAiJHtWR30vJHtWT0xVTUV9LXNuYXAiCitybSAkVE1QRklMRQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvY29udHJpYi9mYWxsb2NhdGUuYyBiL2UyZnNwcm9ncy9jb250cmliL2ZhbGxvY2F0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWI1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29udHJpYi9mYWxsb2NhdGUuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIGZhbGxvY2F0ZSAtIHV0aWxpdHkgdG8gdXNlIHRoZSBmYWxsb2NhdGUgc3lzdGVtIGNhbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogV3JpdHRlbiBieSBFcmljIFNhbmRlZW4gPHNhbmRlZW5AcmVkaGF0LmNvbT4KKyAqCisgKiBjdnRudW0gcm91dGluZSB0YWtlbiBmcm9tIHhmc3Byb2dzLAorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLy8gI2luY2x1ZGUgPGxpbnV4L2ZhbGxvYy5oPgorI2RlZmluZSBGQUxMT0NfRkxfS0VFUF9TSVpFCTB4MDEKKyNkZWZpbmUgRkFMTE9DX0ZMX1BVTkNIX0hPTEUJMHgwMiAvKiBkZS1hbGxvY2F0ZXMgcmFuZ2UgKi8KKwordm9pZCB1c2FnZSh2b2lkKQoreworCXByaW50ZigiVXNhZ2U6IGZhbGxvY2F0ZSBbLW5wdF0gWy1vIG9mZnNldF0gLWwgbGVuZ3RoIGZpbGVuYW1lXG4iKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKyNkZWZpbmUgRVhBQllURVMoeCkgICAgICgobG9uZyBsb25nKSh4KSA8PCA2MCkKKyNkZWZpbmUgUEVUQUJZVEVTKHgpICAgICgobG9uZyBsb25nKSh4KSA8PCA1MCkKKyNkZWZpbmUgVEVSQUJZVEVTKHgpICAgICgobG9uZyBsb25nKSh4KSA8PCA0MCkKKyNkZWZpbmUgR0lHQUJZVEVTKHgpICAgICgobG9uZyBsb25nKSh4KSA8PCAzMCkKKyNkZWZpbmUgTUVHQUJZVEVTKHgpICAgICgobG9uZyBsb25nKSh4KSA8PCAyMCkKKyNkZWZpbmUgS0lMT0JZVEVTKHgpICAgICgobG9uZyBsb25nKSh4KSA8PCAxMCkKKworbG9uZyBsb25nCitjdnRudW0oY2hhciAqcykKK3sKKwlsb25nIGxvbmcJaTsKKwljaGFyCQkqc3A7CisJaW50CQljOworCisJaSA9IHN0cnRvbGwocywgJnNwLCAwKTsKKwlpZiAoaSA9PSAwICYmIHNwID09IHMpCisJCXJldHVybiAtMUxMOworCWlmICgqc3AgPT0gJ1wwJykKKwkJcmV0dXJuIGk7CisJaWYgKHNwWzFdICE9ICdcMCcpCisJCXJldHVybiAtMUxMOworCisJYyA9IHRvbG93ZXIoKnNwKTsKKwlzd2l0Y2ggKGMpIHsKKwljYXNlICdrJzoKKwkJcmV0dXJuIEtJTE9CWVRFUyhpKTsKKwljYXNlICdtJzoKKwkJcmV0dXJuIE1FR0FCWVRFUyhpKTsKKwljYXNlICdnJzoKKwkJcmV0dXJuIEdJR0FCWVRFUyhpKTsKKwljYXNlICd0JzoKKwkJcmV0dXJuIFRFUkFCWVRFUyhpKTsKKwljYXNlICdwJzoKKwkJcmV0dXJuIFBFVEFCWVRFUyhpKTsKKwljYXNlICdlJzoKKwkJcmV0dXJuICBFWEFCWVRFUyhpKTsKKwl9CisKKwlyZXR1cm4gLTFMTDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAlmZDsKKwljaGFyCSpmbmFtZTsKKwlpbnQJb3B0OworCWxvZmZfdAlsZW5ndGggPSAtMkxMOworCWxvZmZfdAlvZmZzZXQgPSAwOworCWludAlmYWxsb2NfbW9kZSA9IDA7CisJaW50CWVycm9yOworCWludAl0ZmxhZyA9IDA7CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAibnBsOm86dCIpKSAhPSAtMSkgeworCQlzd2l0Y2gob3B0KSB7CisJCWNhc2UgJ24nOgorCQkJLyogZG8gbm90IGNoYW5nZSBmaWxlc2l6ZSAqLworCQkJZmFsbG9jX21vZGUgPSBGQUxMT0NfRkxfS0VFUF9TSVpFOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJLyogcHVuY2ggbW9kZSAqLworCQkJZmFsbG9jX21vZGUgPSAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfAorCQkJCSAgICAgICBGQUxMT0NfRkxfS0VFUF9TSVpFKTsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCWxlbmd0aCA9IGN2dG51bShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJb2Zmc2V0ID0gY3Z0bnVtKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQl0ZmxhZysrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJfQorCisJaWYgKGxlbmd0aCA9PSAtMkxMKSB7CisJCXByaW50ZigiRXJyb3I6IG5vIGxlbmd0aCBhcmd1bWVudCBzcGVjaWZpZWRcbiIpOworCQl1c2FnZSgpOworCX0KKworCWlmIChsZW5ndGggPD0gMCkgeworCQlwcmludGYoIkVycm9yOiBpbnZhbGlkIGxlbmd0aCB2YWx1ZSBzcGVjaWZpZWRcbiIpOworCQl1c2FnZSgpOworCX0KKworCWlmIChvZmZzZXQgPCAwKSB7CisJCXByaW50ZigiRXJyb3I6IGludmFsaWQgb2Zmc2V0IHZhbHVlIHNwZWNpZmllZFxuIik7CisJCXVzYWdlKCk7CisJfQorCisJaWYgKHRmbGFnICYmIChmYWxsb2NfbW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7CisJCXByaW50ZigiLW4gYW5kIC10IG9wdGlvbnMgaW5jb21wYXRpYmxlXG4iKTsKKwkJdXNhZ2UoKTsKKwl9CisKKwlpZiAodGZsYWcgJiYgb2Zmc2V0KSB7CisJCXByaW50ZigiLW4gYW5kIC1vIG9wdGlvbnMgaW5jb21wYXRpYmxlXG4iKTsKKwkJdXNhZ2UoKTsKKwl9CisKKwlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJcHJpbnRmKCJFcnJvcjogbm8gZmlsZW5hbWUgc3BlY2lmaWVkXG4iKTsKKwkJdXNhZ2UoKTsKKwl9CisKKwlmbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworCisJLyogU2hvdWxkIHdlIGNyZWF0ZSB0aGUgZmlsZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Q/ICovCisJZmQgPSBvcGVuKGZuYW1lLCBPX1dST05MWXxPX0xBUkdFRklMRSk7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoIkVycm9yIG9wZW5pbmcgZmlsZSIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKHRmbGFnKQorCQllcnJvciA9IGZ0cnVuY2F0ZShmZCwgbGVuZ3RoKTsKKwllbHNlCisJCWVycm9yID0gc3lzY2FsbChTWVNfZmFsbG9jYXRlLCBmZCwgZmFsbG9jX21vZGUsIG9mZnNldCwgbGVuZ3RoKTsKKworCWlmIChlcnJvciA8IDApIHsKKwkJcGVycm9yKCJmYWxsb2NhdGUgZmFpbGVkIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvY29udHJpYi9tYWtlLXNwYXJzZS5jIGIvZTJmc3Byb2dzL2NvbnRyaWIvbWFrZS1zcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNkNTUwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbnRyaWIvbWFrZS1zcGFyc2UuYwpAQCAtMCwwICsxLDg3IEBACisvKgorICogbWFrZS1zcGFyc2UuYyAtLS0gbWFrZSBhIHNwYXJzZSBmaWxlIGZyb20gc3RkaW4KKyAqIAorICogQ29weXJpZ2h0IDIwMDQgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IGZ1bGxfcmVhZChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBnb3QsIHRvdGFsID0gMDsKKwlpbnQgcGFzcyA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWdvdCA9IHJlYWQoZmQsIGJ1ZiwgY291bnQpOworCQlpZiAoZ290ID09IC0xKSB7CisJCQlpZiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkgCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gdG90YWwgPyB0b3RhbCA6IC0xOworCQl9CisJCWlmIChnb3QgPT0gMCkgeworCQkJaWYgKHBhc3MrKyA+PSAzKQorCQkJCXJldHVybiB0b3RhbDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBhc3MgPSAwOworCQlidWYgKz0gZ290OworCQl0b3RhbCArPSBnb3Q7CisJCWNvdW50IC09IGdvdDsKKwl9CisJcmV0dXJuIHRvdGFsOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGZkLCBnb3QsIGk7CisJaW50IHpmbGFnID0gMDsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogbWFrZS1zcGFyc2Ugb3V0LWZpbGVcbiIpOworCQlleGl0KDEpOworCX0KKwlmZCA9IG9wZW4oYXJndlsxXSwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DfE9fTEFSR0VGSUxFLCAwNzc3KTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcihhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJZ290ID0gZnVsbF9yZWFkKDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAoZ290ID09IDApCisJCQlicmVhazsKKwkJaWYgKGdvdCA9PSBzaXplb2YoYnVmKSkgeworCQkJZm9yIChpPTA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKSAKKwkJCQlpZiAoYnVmW2ldKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IHNpemVvZihidWYpKSB7CisJCQkJbHNlZWsoZmQsIHNpemVvZihidWYpLCBTRUVLX0NVUik7CisJCQkJemZsYWcgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXpmbGFnID0gMDsKKwkJd3JpdGUoZmQsIGJ1ZiwgZ290KTsKKwl9CisJaWYgKHpmbGFnKSB7CisJCWxzZWVrKGZkLCAtMSwgU0VFS19DVVIpOworCQlidWZbMF0gPSAwOworCQl3cml0ZShmZCwgYnVmLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisJCQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2ggYi9lMmZzcHJvZ3MvY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMWQzZDFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbnRyaWIvcG9wdWxhdGUtZXh0ZnMuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCB1c2VzIGRlYnVnZnMgY29tbWFuZCB0byBwb3B1bGF0ZSB0aGUgZXh0Mi8zLzQgZmlsZXN5c3RlbQorIyBmcm9tIGEgZ2l2ZW4gZGlyZWN0b3J5LgorIworCitkb191c2FnZSAoKSB7CisJY2F0IDw8IF9FT0YKK1VzYWdlOiBwb3B1bGF0ZS1leHRmcy5zaCA8c291cmNlPiA8ZGV2aWNlPgorQ3JlYXRlIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0gZnJvbSBhIGRpcmVjdG9yeSBvciBmaWxlCisKKyAgc291cmNlOiBUaGUgc291cmNlIGRpcmVjdG9yeSBvciBmaWxlCisgIGRldmljZTogVGhlIHRhcmdldCBkZXZpY2UKKworX0VPRgorCWV4aXQgMQorfQorCitbICQjIC1uZSAyIF0gJiYgZG9fdXNhZ2UKKworU1JDRElSPSR7MSUlL30KK0RFVklDRT0kMgorCisjIEZpbmQgd2hlcmUgaXMgdGhlIGRlYnVnZnMgY29tbWFuZCBpZiBub3QgZm91bmQgaW4gdGhlIGVudi4KK2lmIFsgLXogIiRERUJVR0ZTIiBdOyB0aGVuCisJQ09OVFJJQl9ESVI9JChkaXJuYW1lICQocmVhZGxpbmsgLWYgJDApKQorCURFQlVHRlM9IiRDT05UUklCX0RJUi8uLi9kZWJ1Z2ZzL2RlYnVnZnMiCitmaQorCit7CisJQ1dEPSIvIgorCWZpbmQgJFNSQ0RJUiB8IHdoaWxlIHJlYWQgRklMRTsgZG8KKyAgICAgICAgICAgICAgICBUR1Q9IiR7RklMRSMjKi99IgorICAgICAgICAgICAgICAgIERJUj0iJHtGSUxFIyRTUkNESVJ9IgorICAgICAgICAgICAgICAgIERJUj0iJHtESVIlJFRHVH0iCisKKwkJIyBTa2lwIHRoZSByb290IGRpcgorCQlbICEgLXogIiRESVIiIF0gfHwgY29udGludWUKKwkJWyAhIC16ICIkVEdUIiBdIHx8IGNvbnRpbnVlCisKKwkJaWYgWyAiJERJUiIgIT0gIiRDV0QiIF07IHRoZW4KKwkJCWVjaG8gImNkICRESVIiCisJCQlDV0Q9IiRESVIiCisJCWZpCisKKwkJIyBPbmx5IHN0YXQgb25jZSBzaW5jZSBzdGF0IGlzIGEgdGltZSBjb25zdW1pbmcgY29tbWFuZAorCQlTVEFUPSQoc3RhdCAtYyAiVFlQRT1cIiVGXCI7REVWTk89XCIweCV0IDB4JVRcIjtNT0RFPVwiJWZcIjtVPVwiJXVcIjtHPVwiJWdcIiIgJEZJTEUpCisJCWV2YWwgJFNUQVQKKworCQljYXNlICRUWVBFIGluCisJCSJkaXJlY3RvcnkiKQorCQkJZWNobyAibWtkaXIgJFRHVCIKKwkJCTs7CisJCSJyZWd1bGFyIGZpbGUiIHwgInJlZ3VsYXIgZW1wdHkgZmlsZSIpCisJCQllY2hvICJ3cml0ZSAkRklMRSAkVEdUIgorCQkJOzsKKwkJInN5bWJvbGljIGxpbmsiKQorCQkJTElOS19UR1Q9JChyZWFkbGluayAkRklMRSkKKwkJCWVjaG8gInN5bWxpbmsgJFRHVCAkTElOS19UR1QiCisJCQk7OworCQkiYmxvY2sgc3BlY2lhbCBmaWxlIikKKwkJCWVjaG8gIm1rbm9kICRUR1QgYiAkREVWTk8iCisJCQk7OworCQkiY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSIpCisJCQllY2hvICJta25vZCAkVEdUIGMgJERFVk5PIgorCQkJOzsKKwkJImZpZm8iKQorCQkJZWNobyAibWtub2QgJFRHVCBwIgorCQkJOzsKKwkJKikKKwkJCWVjaG8gIlVua25vd24vdW5oYW5kbGVkIGZpbGUgdHlwZSAnJFRZUEUnIGZpbGU6ICRGSUxFIiAxPiYyCisJCQk7OworCQllc2FjCisKKwkJIyBTZXQgdGhlIGZpbGUgbW9kZQorCQllY2hvICJzaWYgJFRHVCBtb2RlIDB4JE1PREUiCisKKwkJIyBTZXQgdWlkIGFuZCBnaWQKKwkJZWNobyAic2lmICRUR1QgdWlkICRVIgorCQllY2hvICJzaWYgJFRHVCBnaWQgJEciCisJZG9uZQorCisJIyBIYW5kbGUgdGhlIGhhcmQgbGlua3MuCisJIyBTYXZlIHRoZSBoYXJkIGxpbmtzIHRvIGEgZmlsZSwgdXNlIHRoZSBpbm9kZSBudW1iZXIgYXMgdGhlIGZpbGVuYW1lLCBmb3IgZXhhbXBsZToKKwkjIElmIGEgYW5kIGIncyBpbm9kZSBudW1iZXIgaXMgNjc3NTkyOCwgc2F2ZSBhIGFuZCBiIHRvIC90bXAvdG1wLlZyQ3dIaDVnZHQvNjc3NTkyOC4KKwlJTk9ERV9ESVI9YG1rdGVtcCAtZGAgfHwgZXhpdCAxCisJZm9yIGkgaW4gYGZpbmQgJFNSQ0RJUiAtdHlwZSBmIC1saW5rcyArMSAtcHJpbnRmICdJTk9ERT0laSMjI0ZOPSVwXG4nYDsgZG8KKwkJZXZhbCBgZWNobyAkaSB8IHNlZCAncyQjIyMkICQnYAorCQllY2hvICR7Rk4jJFNSQ0RJUn0gPj4kSU5PREVfRElSLyRJTk9ERQorCWRvbmUKKwkjIFVzZSB0aGUgZGVidWdmcycgbG4gYW5kICJzaWYgbGlua3NfY291bnQiIHRvIGhhbmRsZSB0aGVtLgorCWZvciBpIGluIGBscyAkSU5PREVfRElSYDsgZG8KKwkJIyBUaGUgbGluayBzb3VyY2UKKwkJU1JDPWBoZWFkIC0xICRJTk9ERV9ESVIvJGlgCisJCSMgUmVtb3ZlIHRoZSBmaWxlcyBhbmQgbGluayB0aGVtIGFnYWluIGV4Y2VwdCB0aGUgZmlyc3Qgb25lCisJCWZvciBUR1QgaW4gYHNlZCAtbiAtZSAnMSFwJyAkSU5PREVfRElSLyRpYDsgZG8KKwkJCWVjaG8gInJtICRUR1QiCisJCQllY2hvICJsbiAkU1JDICRUR1QiCisJCWRvbmUKKwkJTE5fQ05UPWBjYXQgJElOT0RFX0RJUi8kaSB8IHdjIC1sYAorCQkjIFNldCB0aGUgbGlua3MgY291bnQKKwkJZWNobyAic2lmICRTUkMgbGlua3NfY291bnQgJExOX0NOVCIKKwlkb25lCisJcm0gLWZyICRJTk9ERV9ESVIKK30gfCAkREVCVUdGUyAtdyAtZiAtICRERVZJQ0UKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9jb250cmliL3B5dGhvbi11dWlkL3NldHVwLnB5IGIvZTJmc3Byb2dzL2NvbnRyaWIvcHl0aG9uLXV1aWQvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzkzNGQxNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9jb250cmliL3B5dGhvbi11dWlkL3NldHVwLnB5CkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCisKK3V1aWQgPSBFeHRlbnNpb24oJ2UyZnNwcm9nc191dWlkJywKKyAgICAgICAgICAgICAgICAgc291cmNlcyA9IFsndXVpZC5jJ10sCisgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IFsndXVpZCddKQorCitzZXR1cCAobmFtZSA9ICdlMmZzcHJvZ3NfdXVpZCcsCisgICAgICAgdmVyc2lvbiA9ICcxLjAnLAorICAgICAgIGRlc2NyaXB0aW9uID0gJ1RoaXMgaXMgcHl0aG9uIHV1aWQgaW50ZXJmYWNlJywKKyAgICAgICBleHRfbW9kdWxlcyA9IFt1dWlkXSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9jb250cmliL3B5dGhvbi11dWlkL3Rlc3QucHkgYi9lMmZzcHJvZ3MvY29udHJpYi9weXRob24tdXVpZC90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyNjRmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29udHJpYi9weXRob24tdXVpZC90ZXN0LnB5CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCitpbXBvcnQgZTJmc3Byb2dzX3V1aWQKK2ltcG9ydCB0aW1lCisKK3ByaW50ICJHZW5lcmF0aW5nIHV1aWQuLi4iLAordHJ5OgorICAgIHRpbWUgPSB0aW1lLnRpbWUoKQorICAgIHUgPSBlMmZzcHJvZ3NfdXVpZC5nZW5lcmF0ZSgpCitleGNlcHQ6CisgICAgdSA9ICJGQUlMIgorcHJpbnQgdSwgIi4uLiIsIHRpbWUKKworcHJpbnQgIkNhbGxpbmcgZ2VuZXJhdGUgd2l0aCBwYXJhbS4uLiIsCit0cnk6CisgICAgZTJmc3Byb2dzX3V1aWQuZ2VuZXJhdGUoInBhcmFtIikKKyAgICBwcmludCAiRkFJTC4iCitleGNlcHQ6CisgICAgcHJpbnQgIk9LIgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2NvbnRyaWIvcHl0aG9uLXV1aWQvdXVpZC5jIGIvZTJmc3Byb2dzL2NvbnRyaWIvcHl0aG9uLXV1aWQvdXVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZGQ1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvY29udHJpYi9weXRob24tdXVpZC91dWlkLmMKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgPFB5dGhvbi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKworc3RhdGljIFB5T2JqZWN0ICogX3V1aWRfZ2VuZXJhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICB1dWlkX3QgdTsKKyAgY2hhciB1dWlkWzM3XTsKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiKSkgcmV0dXJuIE5VTEw7CisgIHV1aWRfZ2VuZXJhdGUodSk7CisgIHV1aWRfdW5wYXJzZSh1LCB1dWlkKTsKKyAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInMiLCB1dWlkKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIF91dWlkX21ldGhvZHNbXSA9IHsKKyAgeyJnZW5lcmF0ZSIsIF91dWlkX2dlbmVyYXRlLCBNRVRIX1ZBUkFSR1MsICJHZW5lcmF0ZSBVVUlEIn0sCisgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfQorfTsKKwordm9pZCBpbml0ZTJmc3Byb2dzX3V1aWQodm9pZCkKK3sKKyAgKHZvaWQpIFB5X0luaXRNb2R1bGUoImUyZnNwcm9nc191dWlkIiwgX3V1aWRfbWV0aG9kcyk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvY29udHJpYi9zcGRfcmVhZGRpci5jIGIvZTJmc3Byb2dzL2NvbnRyaWIvc3BkX3JlYWRkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ1ZmExCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2NvbnRyaWIvc3BkX3JlYWRkaXIuYwpAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIHJlYWRkaXIgYWNjZWxlcmF0b3IKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDggYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAyMDA4LTA2LTA4IE1vZGlmaWVkIGJ5IFJvc3MgQm95bGFuIDxSb3NzQm95bGFuIHN0YW5mb3JkYWx1bW5pIG9yZz4KKyAqICAgIEFkZGVkIHN1cHBvcnQgZm9yIHJlYWRkaXJfciBhbmQgcmVhZGRpcjY0X3IgY2FsbHMuICBOb3RlCisgKiAgICAgdGhpcyBoYXMgbm90IGJlZW4gdGVzdGVkIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gR05VL0xpbnV4IGkzODYsCisgKiAgICAgYW5kIHRoYXQgdGhlIHJlZ3VsYXIgcmVhZGRpciB3cmFwcGVyIHdpbGwgdGFrZSBzbGlnaHRseSBtb3JlCisgKiAgICAgc3BhY2UgdGhhbiBUZWQncyBvcmlnaW5hbCBzaW5jZSBpdCBub3cgaW5jbHVkZXMgYSBsb2NrLgorICoKKyAqIENvbXBpbGUgdXNpbmcgdGhlIGNvbW1hbmQ6CisgKgorICogZ2NjIC1vIHNwZF9yZWFkZGlyLnNvIC1zaGFyZWQgLWZwaWMgc3BkX3JlYWRkaXIuYyAtbGRsCisgKgorICogVXNlIGl0IGJ5IHNldHRpbmcgdGhlIExEX1BSRUxPQUQgZW52aXJvbm1lbnQgdmFyaWFibGU6CisgKiAKKyAqIGV4cG9ydCBMRF9QUkVMT0FEPS91c3IvbG9jYWwvc2Jpbi9zcGRfcmVhZGRpci5zbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKiAKKyAqLworCisjZGVmaW5lIEFMTE9DX1NURVBTSVpFCTEwMAorI2RlZmluZSBNQVhfRElSU0laRQkwCisKKyNkZWZpbmUgREVCVUcKKy8qIFV0aWwgd2UgYXV0b2NvbmZpc2NhdGUgc3BkX3JlYWRkaXIuLi4gKi8KKyNkZWZpbmUgSEFWRV9fX1NFQ1VSRV9HRVRFTlYJMQorI2RlZmluZSBIQVZFX1BSQ1RMCQkxCisjZGVmaW5lIEhBVkVfU1lTX1BSQ1RMX0gJMQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREVCVUdfRElSKHgpCXtpZiAoZG9fZGVidWcpIHsgeDsgfX0KKyNlbHNlCisjZGVmaW5lIERFQlVHX0RJUih4KQorI2VuZGlmCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX19VU0VfTEFSR0VGSUxFNjQKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaWZkZWYgSEFWRV9TWVNfUFJDVExfSAorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2Vsc2UKKyNkZWZpbmUgUFJfR0VUX0RVTVBBQkxFIDMKKyNlbmRpZgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworc3RydWN0IGRpcmVudF9zIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZF9pbm87CisJbG9uZyBsb25nIGRfb2ZmOworCXVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKKwl1bnNpZ25lZCBjaGFyIGRfdHlwZTsKKwljaGFyICpkX25hbWU7Cit9OworCitzdHJ1Y3QgZGlyX3MgeworCURJUgkqZGlyOworCXB0aHJlYWRfbXV0ZXhfdCBsb2NrOyAvKiBNdXRleCBsb2NrIGZvciB0aGlzIHN0cnVjdHVyZS4gICovCisJaW50CW51bTsKKwlpbnQJbWF4OworCXN0cnVjdCBkaXJlbnRfcyAqZHA7CisJaW50CXBvczsKKwlpbnQJZGlyZWN0OworCXN0cnVjdCBkaXJlbnQgcmV0X2RpcjsKKwlzdHJ1Y3QgZGlyZW50NjQgcmV0X2RpcjY0OworfTsKKworc3RhdGljIGludCAoKnJlYWxfY2xvc2VkaXIpKERJUiAqZGlyKSA9IDA7CitzdGF0aWMgRElSICooKnJlYWxfb3BlbmRpcikoY29uc3QgY2hhciAqbmFtZSkgPSAwOworc3RhdGljIERJUiAqKCpyZWFsX2Zkb3BlbmRpcikoaW50IGZkKSA9IDA7CitzdGF0aWMgdm9pZCAqKCpyZWFsX3Jld2luZGRpcikoRElSICpkaXJwKSA9IDA7CitzdGF0aWMgc3RydWN0IGRpcmVudCAqKCpyZWFsX3JlYWRkaXIpKERJUiAqZGlyKSA9IDA7CitzdGF0aWMgaW50ICgqcmVhbF9yZWFkZGlyX3IpKERJUiAqZGlyLCBzdHJ1Y3QgZGlyZW50ICplbnRyeSwKKwkJCSAgICAgc3RydWN0IGRpcmVudCAqKnJlc3VsdCkgPSAwOworc3RhdGljIHN0cnVjdCBkaXJlbnQ2NCAqKCpyZWFsX3JlYWRkaXI2NCkoRElSICpkaXIpID0gMDsKK3N0YXRpYyBpbnQgKCpyZWFsX3JlYWRkaXI2NF9yKShESVIgKmRpciwgc3RydWN0IGRpcmVudDY0ICplbnRyeSwKKwkJCSAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKipyZXN1bHQpID0gMDsKK3N0YXRpYyBvZmZfdCAoKnJlYWxfdGVsbGRpcikoRElSICpkaXIpID0gMDsKK3N0YXRpYyB2b2lkICgqcmVhbF9zZWVrZGlyKShESVIgKmRpciwgb2ZmX3Qgb2Zmc2V0KSA9IDA7CitzdGF0aWMgaW50ICgqcmVhbF9kaXJmZCkoRElSICpkaXIpID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kaXJzaXplID0gTUFYX0RJUlNJWkU7CitzdGF0aWMgaW50IG51bV9vcGVuID0gMDsKKyNpZmRlZiBERUJVRworc3RhdGljIGludCBkb19kZWJ1ZyA9IDA7CisjZW5kaWYKKworc3RhdGljIGNoYXIgKnNhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSkpCisJCXJldHVybiBOVUxMOworI2lmIEhBVkVfUFJDVEwKKwlpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbHNlCisjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoU1lTX3ByY3RsKSkKKwlpZiAoc3lzY2FsbChTWVNfcHJjdGwsIFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9fX1NFQ1VSRV9HRVRFTlYKKwlyZXR1cm4gX19zZWN1cmVfZ2V0ZW52KGFyZyk7CisjZWxzZQorCXJldHVybiBnZXRlbnYoYXJnKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzZXR1cF9wdHIoKQoreworCWNoYXIgKmNwOworCisJcmVhbF9vcGVuZGlyID0gZGxzeW0oUlRMRF9ORVhULCAib3BlbmRpciIpOworCXJlYWxfZmRvcGVuZGlyID0gZGxzeW0oUlRMRF9ORVhULCAiZmRvcGVuZGlyIik7CisJcmVhbF9jbG9zZWRpciA9IGRsc3ltKFJUTERfTkVYVCwgImNsb3NlZGlyIik7CisJcmVhbF9yZXdpbmRkaXIgPSBkbHN5bShSVExEX05FWFQsICJyZXdpbmRkaXIiKTsKKwlyZWFsX3JlYWRkaXIgPSBkbHN5bShSVExEX05FWFQsICJyZWFkZGlyIik7CisJcmVhbF9yZWFkZGlyX3IgPSBkbHN5bShSVExEX05FWFQsICJyZWFkZGlyX3IiKTsKKwlyZWFsX3JlYWRkaXI2NCA9IGRsc3ltKFJUTERfTkVYVCwgInJlYWRkaXI2NCIpOworCXJlYWxfcmVhZGRpcjY0X3IgPSBkbHN5bShSVExEX05FWFQsICJyZWFkZGlyNjRfciIpOworCXJlYWxfdGVsbGRpciA9IGRsc3ltKFJUTERfTkVYVCwgInRlbGxkaXIiKTsKKwlyZWFsX3NlZWtkaXIgPSBkbHN5bShSVExEX05FWFQsICJzZWVrZGlyIik7CisJcmVhbF9kaXJmZCA9IGRsc3ltKFJUTERfTkVYVCwgImRpcmZkIik7CisJaWYgKChjcCA9IHNhZmVfZ2V0ZW52KCJTUERfUkVBRERJUl9NQVhfU0laRSIpKSAhPSBOVUxMKSB7CisJCW1heF9kaXJzaXplID0gYXRvbChjcCk7CisJfQorI2lmZGVmIERFQlVHCisJaWYgKHNhZmVfZ2V0ZW52KCJTUERfUkVBRERJUl9ERUJVRyIpKSB7CisJCXByaW50ZigiaW5pdGlhbGl6ZWQhXG4iKTsKKwkJZG9fZGVidWcrKzsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZnJlZV9jYWNoZWRfZGlyKHN0cnVjdCBkaXJfcyAqZGlyc3RydWN0KQoreworCWludCBpOworCisJcHRocmVhZF9tdXRleF9kZXN0cm95KCYoZGlyc3RydWN0LT5sb2NrKSk7CisKKwlpZiAoIWRpcnN0cnVjdC0+ZHApCisJCXJldHVybjsKKworCWZvciAoaT0wOyBpIDwgZGlyc3RydWN0LT5udW07IGkrKykgeworCQlmcmVlKGRpcnN0cnVjdC0+ZHBbaV0uZF9uYW1lKTsKKwl9CisJZnJlZShkaXJzdHJ1Y3QtPmRwKTsKKwlkaXJzdHJ1Y3QtPmRwID0gMDsKKwlkaXJzdHJ1Y3QtPm1heCA9IGRpcnN0cnVjdC0+bnVtID0gMDsKK30JCisKK3N0YXRpYyBpbnQgaW5vX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBkaXJlbnRfcyAqZHNfYSA9IChjb25zdCBzdHJ1Y3QgZGlyZW50X3MgKikgYTsKKwljb25zdCBzdHJ1Y3QgZGlyZW50X3MgKmRzX2IgPSAoY29uc3Qgc3RydWN0IGRpcmVudF9zICopIGI7CisJaW5vX3QgaV9hLCBpX2I7CisJCisJaV9hID0gZHNfYS0+ZF9pbm87CisJaV9iID0gZHNfYi0+ZF9pbm87CisKKwlpZiAoZHNfYS0+ZF9uYW1lWzBdID09ICcuJykgeworCQlpZiAoZHNfYS0+ZF9uYW1lWzFdID09IDApCisJCQlpX2EgPSAwOworCQllbHNlIGlmICgoZHNfYS0+ZF9uYW1lWzFdID09ICcuJykgJiYgKGRzX2EtPmRfbmFtZVsyXSA9PSAwKSkKKwkJCWlfYSA9IDE7CisJfQorCWlmIChkc19iLT5kX25hbWVbMF0gPT0gJy4nKSB7CisJCWlmIChkc19iLT5kX25hbWVbMV0gPT0gMCkKKwkJCWlfYiA9IDA7CisJCWVsc2UgaWYgKChkc19iLT5kX25hbWVbMV0gPT0gJy4nKSAmJiAoZHNfYi0+ZF9uYW1lWzJdID09IDApKQorCQkJaV9iID0gMTsKKwl9CisKKwlyZXR1cm4gKGlfYSAtIGlfYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX3MgKmFsbG9jX2RpcnN0cnVjdChESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdDsKKwlzdGF0aWMgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleGF0dHI7CisJbXV0ZXhhdHRyLl9fYWxpZ24gPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRTsKKworCWRpcnN0cnVjdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpcl9zKSk7CisJaWYgKGRpcnN0cnVjdCkKKwkJbWVtc2V0KGRpcnN0cnVjdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaXJfcykpOworCWRpcnN0cnVjdC0+ZGlyID0gZGlyOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmKGRpcnN0cnVjdC0+bG9jayksICZtdXRleGF0dHIpOworCXJldHVybiBkaXJzdHJ1Y3Q7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2RpcnN0cnVjdChzdHJ1Y3QgZGlyX3MgKmRpcnN0cnVjdCkKK3sKKwlzdHJ1Y3QgZGlyZW50X3MgKmRzLCAqZG5ldzsKKwlzdHJ1Y3QgZGlyZW50NjQgKmQ7CisKKwl3aGlsZSAoKGQgPSAoKnJlYWxfcmVhZGRpcjY0KShkaXJzdHJ1Y3QtPmRpcikpICE9IE5VTEwpIHsKKwkJaWYgKGRpcnN0cnVjdC0+bnVtID49IGRpcnN0cnVjdC0+bWF4KSB7CisJCQlkaXJzdHJ1Y3QtPm1heCArPSBBTExPQ19TVEVQU0laRTsKKwkJCURFQlVHX0RJUihwcmludGYoIlJlYWxsb2NhdGluZyB0byBzaXplICVkXG4iLCAKKwkJCQkJIGRpcnN0cnVjdC0+bWF4KSk7CisJCQlkbmV3ID0gcmVhbGxvYyhkaXJzdHJ1Y3QtPmRwLCAKKwkJCQkgICAgICAgZGlyc3RydWN0LT5tYXggKiBzaXplb2Yoc3RydWN0IGRpcl9zKSk7CisJCQlpZiAoIWRuZXcpCisJCQkJZ290byBub21lbTsKKwkJCWRpcnN0cnVjdC0+ZHAgPSBkbmV3OworCQl9CisJCWRzID0gJmRpcnN0cnVjdC0+ZHBbZGlyc3RydWN0LT5udW0rK107CisJCWRzLT5kX2lubyA9IGQtPmRfaW5vOworCQlkcy0+ZF9vZmYgPSBkLT5kX29mZjsKKwkJZHMtPmRfcmVjbGVuID0gZC0+ZF9yZWNsZW47CisJCWRzLT5kX3R5cGUgPSBkLT5kX3R5cGU7CisJCWlmICgoZHMtPmRfbmFtZSA9IG1hbGxvYyhzdHJsZW4oZC0+ZF9uYW1lKSsxKSkgPT0gTlVMTCkgeworCQkJZGlyc3RydWN0LT5udW0tLTsKKwkJCWdvdG8gbm9tZW07CisJCX0KKwkJc3RyY3B5KGRzLT5kX25hbWUsIGQtPmRfbmFtZSk7CisJCURFQlVHX0RJUihwcmludGYoInJlYWRkaXI6ICVsdSAlc1xuIiwgCisJCQkJICh1bnNpZ25lZCBsb25nKSBkLT5kX2lubywgZC0+ZF9uYW1lKSk7CisJfQorCXFzb3J0KGRpcnN0cnVjdC0+ZHAsIGRpcnN0cnVjdC0+bnVtLCBzaXplb2Yoc3RydWN0IGRpcmVudF9zKSwgaW5vX2NtcCk7CisJcmV0dXJuOworbm9tZW06CisJREVCVUdfRElSKHByaW50ZigiTm8gbWVtb3J5LCBiYWNraW5nIG9mZiB0byBkaXJlY3QgcmVhZGRpclxuIikpOworCWZyZWVfY2FjaGVkX2RpcihkaXJzdHJ1Y3QpOworCWRpcnN0cnVjdC0+ZGlyZWN0ID0gMTsKK30KKworRElSICpvcGVuZGlyKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3Q7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXJlYWxfb3BlbmRpcikKKwkJc2V0dXBfcHRyKCk7CisKKwlERUJVR19ESVIocHJpbnRmKCJPcGVuZGlyKCVzKSAoJWQgb3BlbilcbiIsIG5hbWUsIG51bV9vcGVuKyspKTsKKwlkaXIgPSAoKnJlYWxfb3BlbmRpcikobmFtZSk7CisJaWYgKCFkaXIpCisJCXJldHVybiBOVUxMOworCisJZGlyc3RydWN0ID0gYWxsb2NfZGlyc3RydWN0KGRpcik7CisJaWYgKCFkaXJzdHJ1Y3QpIHsKKwkJKCpyZWFsX2Nsb3NlZGlyKShkaXIpOworCQllcnJubyA9IC1FTk9NRU07CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChtYXhfZGlyc2l6ZSAmJiAoc3RhdChuYW1lLCAmc3QpID09IDApICYmIAorCSAgICAoc3Quc3Rfc2l6ZSA+IG1heF9kaXJzaXplKSkgeworCQlERUJVR19ESVIocHJpbnRmKCJEaXJlY3Rvcnkgc2l6ZSAlbGQsIHVzaW5nIGRpcmVjdCByZWFkZGlyXG4iLAorCQkJCSBzdC5zdF9zaXplKSk7CisJCWRpcnN0cnVjdC0+ZGlyZWN0ID0gMTsKKwkJcmV0dXJuIChESVIgKikgZGlyc3RydWN0OworCX0KKworCWNhY2hlX2RpcnN0cnVjdChkaXJzdHJ1Y3QpOworCXJldHVybiAoKERJUiAqKSBkaXJzdHJ1Y3QpOworfQorCitESVIgKmZkb3BlbmRpcihpbnQgZmQpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3Q7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXJlYWxfZmRvcGVuZGlyKQorCQlzZXR1cF9wdHIoKTsKKworCURFQlVHX0RJUihwcmludGYoImZkb3BlbmRpciglZCkgKCVkIG9wZW4pXG4iLCBmZCwgbnVtX29wZW4rKykpOworCWRpciA9ICgqcmVhbF9mZG9wZW5kaXIpKGZkKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIE5VTEw7CisKKwlkaXJzdHJ1Y3QgPSBhbGxvY19kaXJzdHJ1Y3QoZGlyKTsKKwlpZiAoIWRpcnN0cnVjdCkgeworCQkoKnJlYWxfY2xvc2VkaXIpKGRpcik7CisJCWVycm5vID0gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKG1heF9kaXJzaXplICYmIChmc3RhdChmZCwgJnN0KSA9PSAwKSAmJiAKKwkgICAgKHN0LnN0X3NpemUgPiBtYXhfZGlyc2l6ZSkpIHsKKwkJREVCVUdfRElSKHByaW50ZigiRGlyZWN0b3J5IHNpemUgJWxkLCB1c2luZyBkaXJlY3QgcmVhZGRpclxuIiwKKwkJCQkgc3Quc3Rfc2l6ZSkpOworCQlkaXJzdHJ1Y3QtPmRpciA9IGRpcjsKKwkJZGlyc3RydWN0LT5kaXJlY3QgPSAxOworCQlyZXR1cm4gKERJUiAqKSBkaXJzdHJ1Y3Q7CisJfQorCisJY2FjaGVfZGlyc3RydWN0KGRpcnN0cnVjdCk7CisJcmV0dXJuICgoRElSICopIGRpcnN0cnVjdCk7Cit9CisKK2ludCBjbG9zZWRpcihESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCisJREVCVUdfRElSKHByaW50ZigiQ2xvc2VkaXIgKCVkIG9wZW4pXG4iLCAtLW51bV9vcGVuKSk7CisJaWYgKGRpcnN0cnVjdC0+ZGlyKQorCQkoKnJlYWxfY2xvc2VkaXIpKGRpcnN0cnVjdC0+ZGlyKTsKKworCWZyZWVfY2FjaGVkX2RpcihkaXJzdHJ1Y3QpOworCWZyZWUoZGlyc3RydWN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRpcmVudCAqcmVhZGRpcihESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCXN0cnVjdCBkaXJlbnRfcyAqZHM7CisKKwlpZiAoZGlyc3RydWN0LT5kaXJlY3QpCisJCXJldHVybiAoKnJlYWxfcmVhZGRpcikoZGlyc3RydWN0LT5kaXIpOworCisJaWYgKGRpcnN0cnVjdC0+cG9zID49IGRpcnN0cnVjdC0+bnVtKQorCQlyZXR1cm4gTlVMTDsKKworCWRzID0gJmRpcnN0cnVjdC0+ZHBbZGlyc3RydWN0LT5wb3MrK107CisJZGlyc3RydWN0LT5yZXRfZGlyLmRfaW5vID0gZHMtPmRfaW5vOworCWRpcnN0cnVjdC0+cmV0X2Rpci5kX29mZiA9IGRzLT5kX29mZjsKKwlkaXJzdHJ1Y3QtPnJldF9kaXIuZF9yZWNsZW4gPSBkcy0+ZF9yZWNsZW47CisJZGlyc3RydWN0LT5yZXRfZGlyLmRfdHlwZSA9IGRzLT5kX3R5cGU7CisJc3RybmNweShkaXJzdHJ1Y3QtPnJldF9kaXIuZF9uYW1lLCBkcy0+ZF9uYW1lLAorCQlzaXplb2YoZGlyc3RydWN0LT5yZXRfZGlyLmRfbmFtZSkpOworCisJcmV0dXJuICgmZGlyc3RydWN0LT5yZXRfZGlyKTsKK30KKworaW50IHJlYWRkaXJfcihESVIgKmRpciwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCit7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3QgPSAoc3RydWN0IGRpcl9zICopIGRpcjsKKwlzdHJ1Y3QgZGlyZW50X3MgKmRzOworCisJaWYgKGRpcnN0cnVjdC0+ZGlyZWN0KQorCQlyZXR1cm4gKCpyZWFsX3JlYWRkaXJfcikoZGlyc3RydWN0LT5kaXIsIGVudHJ5LCByZXN1bHQpOworCisJcHRocmVhZF9tdXRleF9sb2NrKCYoZGlyc3RydWN0LT5sb2NrKSk7CisJaWYgKGRpcnN0cnVjdC0+cG9zID49IGRpcnN0cnVjdC0+bnVtKSB7CisJCSpyZXN1bHQgPSBOVUxMOworCX0gZWxzZSB7CisJCWRzID0gJmRpcnN0cnVjdC0+ZHBbZGlyc3RydWN0LT5wb3MrK107CisJCWVudHJ5LT5kX2lubyA9IGRzLT5kX2lubzsKKwkJZW50cnktPmRfb2ZmID0gZHMtPmRfb2ZmOworCQllbnRyeS0+ZF9yZWNsZW4gPSBkcy0+ZF9yZWNsZW47CisJCWVudHJ5LT5kX3R5cGUgPSBkcy0+ZF90eXBlOworCQlzdHJuY3B5KGVudHJ5LT5kX25hbWUsIGRzLT5kX25hbWUsIHNpemVvZihlbnRyeS0+ZF9uYW1lKSk7CisJCSpyZXN1bHQgPSBlbnRyeTsKKwl9CisJcHRocmVhZF9tdXRleF91bmxvY2soJihkaXJzdHJ1Y3QtPmxvY2spKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRpcmVudDY0ICpyZWFkZGlyNjQoRElSICpkaXIpCit7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3QgPSAoc3RydWN0IGRpcl9zICopIGRpcjsKKwlzdHJ1Y3QgZGlyZW50X3MgKmRzOworCisJaWYgKGRpcnN0cnVjdC0+ZGlyZWN0KQorCQlyZXR1cm4gKCpyZWFsX3JlYWRkaXI2NCkoZGlyc3RydWN0LT5kaXIpOworCisJaWYgKGRpcnN0cnVjdC0+cG9zID49IGRpcnN0cnVjdC0+bnVtKQorCQlyZXR1cm4gTlVMTDsKKworCWRzID0gJmRpcnN0cnVjdC0+ZHBbZGlyc3RydWN0LT5wb3MrK107CisJZGlyc3RydWN0LT5yZXRfZGlyNjQuZF9pbm8gPSBkcy0+ZF9pbm87CisJZGlyc3RydWN0LT5yZXRfZGlyNjQuZF9vZmYgPSBkcy0+ZF9vZmY7CisJZGlyc3RydWN0LT5yZXRfZGlyNjQuZF9yZWNsZW4gPSBkcy0+ZF9yZWNsZW47CisJZGlyc3RydWN0LT5yZXRfZGlyNjQuZF90eXBlID0gZHMtPmRfdHlwZTsKKwlzdHJuY3B5KGRpcnN0cnVjdC0+cmV0X2RpcjY0LmRfbmFtZSwgZHMtPmRfbmFtZSwKKwkJc2l6ZW9mKGRpcnN0cnVjdC0+cmV0X2RpcjY0LmRfbmFtZSkpOworCisJcmV0dXJuICgmZGlyc3RydWN0LT5yZXRfZGlyNjQpOworfQorCitpbnQgcmVhZGRpcjY0X3IgKERJUiAqX19yZXN0cmljdCBkaXIsCisJCSBzdHJ1Y3QgZGlyZW50NjQgKl9fcmVzdHJpY3QgZW50cnksCisJCSBzdHJ1Y3QgZGlyZW50NjQgKipfX3Jlc3RyaWN0IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCXN0cnVjdCBkaXJlbnRfcyAqZHM7CisKKwlpZiAoZGlyc3RydWN0LT5kaXJlY3QpCisJCXJldHVybiAoKnJlYWxfcmVhZGRpcjY0X3IpKGRpciwgZW50cnksIHJlc3VsdCk7CisJcHRocmVhZF9tdXRleF9sb2NrKCYoZGlyc3RydWN0LT5sb2NrKSk7CisJaWYgKGRpcnN0cnVjdC0+cG9zID49IGRpcnN0cnVjdC0+bnVtKSB7CisJCSpyZXN1bHQgPSBOVUxMOworCX0gZWxzZSB7CisJCWRzID0gJmRpcnN0cnVjdC0+ZHBbZGlyc3RydWN0LT5wb3MrK107CisJCWVudHJ5LT5kX2lubyA9IGRzLT5kX2lubzsKKwkJZW50cnktPmRfb2ZmID0gZHMtPmRfb2ZmOworCQllbnRyeS0+ZF9yZWNsZW4gPSBkcy0+ZF9yZWNsZW47CisJCWVudHJ5LT5kX3R5cGUgPSBkcy0+ZF90eXBlOworCQlzdHJuY3B5KGVudHJ5LT5kX25hbWUsIGRzLT5kX25hbWUsCisJCQlzaXplb2YoZW50cnktPmRfbmFtZSkpOworCQkqcmVzdWx0ID0gZW50cnk7CisJfQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoZGlyc3RydWN0LT5sb2NrKSk7CisJcmV0dXJuIDA7Cit9CisKK29mZl90IHRlbGxkaXIoRElSICpkaXIpCit7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3QgPSAoc3RydWN0IGRpcl9zICopIGRpcjsKKworCWlmIChkaXJzdHJ1Y3QtPmRpcmVjdCkKKwkJcmV0dXJuICgqcmVhbF90ZWxsZGlyKShkaXJzdHJ1Y3QtPmRpcik7CisKKwlyZXR1cm4gKChvZmZfdCkgZGlyc3RydWN0LT5wb3MpOworfQorCit2b2lkIHNlZWtkaXIoRElSICpkaXIsIG9mZl90IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCisJaWYgKGRpcnN0cnVjdC0+ZGlyZWN0KSB7CisJCSgqcmVhbF9zZWVrZGlyKShkaXJzdHJ1Y3QtPmRpciwgb2Zmc2V0KTsKKwkJcmV0dXJuOworCX0KKworCWRpcnN0cnVjdC0+cG9zID0gb2Zmc2V0OworfQorCit2b2lkIHJld2luZGRpcihESVIgKmRpcikKK3sKKwlzdHJ1Y3QgZGlyX3MJKmRpcnN0cnVjdCA9IChzdHJ1Y3QgZGlyX3MgKikgZGlyOworCisJKCpyZWFsX3Jld2luZGRpcikoZGlyc3RydWN0LT5kaXIpOworCWlmIChkaXJzdHJ1Y3QtPmRpcmVjdCkKKwkJcmV0dXJuOworCQorCXB0aHJlYWRfbXV0ZXhfbG9jaygmKGRpcnN0cnVjdC0+bG9jaykpOworCWRpcnN0cnVjdC0+cG9zID0gMDsKKwlmcmVlX2NhY2hlZF9kaXIoZGlyc3RydWN0KTsKKwljYWNoZV9kaXJzdHJ1Y3QoZGlyc3RydWN0KTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmKGRpcnN0cnVjdC0+bG9jaykpOworfQorCitpbnQgZGlyZmQoRElSICpkaXIpCit7CisJc3RydWN0IGRpcl9zCSpkaXJzdHJ1Y3QgPSAoc3RydWN0IGRpcl9zICopIGRpcjsKKwlpbnQgZmQgPSAoKnJlYWxfZGlyZmQpKGRpcnN0cnVjdC0+ZGlyKTsKKworCURFQlVHX0RJUihwcmludGYoImRpcmZkICVkLCAlcFxuIiwgZmQsIHJlYWxfZGlyZmQpKTsKKwlyZXR1cm4gZmQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2NvbWVycmctZGV2LmluZm8gYi9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2NvbWVycmctZGV2LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkMzQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvY29tZXJyZy1kZXYuaW5mbwpAQCAtMCwwICsxLDQgQEAKK0RFU0NSPSJUaGUgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIGxpYnJhcnkuIgorU0VDVElPTl9NQVRDSD0iRGV2ZWxvcG1lbnQiCitTRUNUSU9OX05BTUU9IkRldmVsb3BtZW50IgorRklMRT1jb21fZXJyLmluZm8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvY29tZXJyZy1kZXYubWVudSBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvY29tZXJyZy1kZXYubWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRkYWIzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9jb21lcnJnLWRldi5tZW51CkBAIC0wLDAgKzEsNyBAQAorP3BhY2thZ2UoY29tZXJyZy1kZXYpOm5lZWRzPSJkd3d3IiBzZWN0aW9uPSJBcHBzL1Byb2dyYW1taW5nIlwKKyAgdGl0bGU9IlRoZSBjb21fZXJyIGxpYnJhcnkiIFwKKyAgbG9uZ3RpdGxlPSJUaGUgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIGxpYnJhcnkiXAorICBkZXNjcmlwdGlvbj0ibGliY29tZXJyIGlzIGFuIGF0dGVtcHQgdG8gcHJlc2VudCBhIGNvbW1vbiBlcnJvci1oYW5kbGluZyBtZWNoYW5pc20gdG8gXAorCW1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZSBpbiBhIGZhc2hpb24gdGhhdCBkb2VzIG5vdCBcCisJaGF2ZSB0aGUgcHJvYmxlbXMgaWRlbnRpZmllZCB3aXRoIG1lY2hhbmlzbXMgY29tbW9ubHkgaW4gdXNlLiIgXAorICBjb21tYW5kPSIvdXNyL2RvYy9jb21lcnJnLWRldi9odG1sLWluZm8vY29tX2Vycl90b2MuaHRtbCIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvZTJmc2xpYnNnLWRldi5pbmZvIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9lMmZzbGlic2ctZGV2LmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiZTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvZTJmc2xpYnNnLWRldi5pbmZvCkBAIC0wLDAgKzEsNCBAQAorREVTQ1I9IkxpYnJhcnkgb2Ygcm91dGluZXMgdG8gbWFuaXB1bGF0ZSBhbiBleHQyIGZpbGVzeXN0ZW0uIgorU0VDVElPTl9NQVRDSD0iRGV2ZWxvcG1lbnQiCitTRUNUSU9OX05BTUU9IkRldmVsb3BtZW50IgorRklMRT1saWJleHQyZnMuaW5mbwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9lMmZzbGlic2ctZGV2Lm1lbnUgYi9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2UyZnNsaWJzZy1kZXYubWVudQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWNlOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9lMmZzbGlic2ctZGV2Lm1lbnUKQEAgLTAsMCArMSw0IEBACis/cGFja2FnZShlMmZzbGlic2ctZGV2KTpuZWVkcz0iZHd3dyIgc2VjdGlvbj0iQXBwcy9Qcm9ncmFtbWluZyJcCisgIHRpdGxlPSJUaGUgZXh0MmZzIGxpYnJhcnkuIiBcCisgIGxvbmd0aXRsZT0iQSBsaWJyYXJ5IHRvIGhhbmRsZSBsb3ctbGV2ZWwgc3RydWN0dXJlcyBpbiBhbiBleHQyIGZpbGVzeXN0ZW0iXAorICBjb21tYW5kPSIvdXNyL2RvYy9lMmZzbGlic2ctZGV2L2h0bWwtaW5mby9saWJleHQyZnNfdG9jLmh0bWwiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2xpYnMvY29tZXJyMmcuZmlsZXMgYi9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2xpYnMvY29tZXJyMmcuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxZjU1MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvbGlicy9jb21lcnIyZy5maWxlcwpAQCAtMCwwICsxLDIgQEAKK2xpYi9saWJjb21fZXJyLnNvLj8uKgorbGliL2xpYmNvbV9lcnIuc28uPwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL2NvbnRyb2wgYi9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2xpYnMvY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA1MTIwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL2NvbnRyb2wKQEAgLTAsMCArMSwxMTQgQEAKK1NvdXJjZTogZTJmc3Byb2dzCitTZWN0aW9uOiBiYXNlCitQcmlvcml0eTogcmVxdWlyZWQKK01haW50YWluZXI6IFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4KK1N0YW5kYXJkcy1WZXJzaW9uOiAyLjQuMC4wCisKK1BhY2thZ2U6IGUyZnNwcm9ncworRXNzZW50aWFsOiB5ZXMKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9CitDb25mbGljdHM6IGUyZnNwcm9nc2csIGR1bXAgKDw8IDAuNGI0LTQpLCBxdW90YSAoPDwgMS41NS04LjEpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IFRoZSBFWFQyIGZpbGUgc3lzdGVtIHV0aWxpdGllcy4KKyBFWFQyIHN0YW5kcyBmb3IgIkV4dGVuZGVkIEZpbGVzeXN0ZW0iLCB2ZXJzaW9uIDIuIEl0J3MgdGhlIG1haW4KKyBmaWxlc3lzdGVtIHR5cGUgdXNlZCBmb3IgaGFyZCBkaXNrcyBvbiBEZWJpYW4gYW5kIG90aGVyIExpbnV4IHN5c3RlbXMuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyBwcm9ncmFtcyBmb3IgY3JlYXRpbmcsIGNoZWNraW5nLCBhbmQgbWFpbnRhaW5pbmcgRVhUMgorIGZpbGVzeXN0ZW1zLCBhbmQgdGhlIGdlbmVyaWMgYGZzY2snIHdyYXBwZXIuCisgLgorIFRoaXMgcmVsZWFzZSBtYXkgYnJlYWsgb2xkZXIgdmVyc2lvbnMgb2YgZHVtcCBhbmQgcXVvdGEuCisKK1BhY2thZ2U6IGNvbWVycjJnCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfQorQ29uZmxpY3RzOiBlMmZzcHJvZ3MgKDw8IDEuMTAtNiksIGNvbWVycjIKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogVGhlIENvbW1vbiBFcnJvciBEZXNjcmlwdGlvbiBsaWJyYXJ5IC0gc2hhcmVkIGxpYnJhcmllcy4KKyBsaWJjb21lcnIgaXMgYW4gYXR0ZW1wdCB0byBwcmVzZW50IGEgY29tbW9uIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSB0bworIG1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZSBpbiBhIGZhc2hpb24gdGhhdCBkb2VzIG5vdAorIGhhdmUgdGhlIHByb2JsZW1zIGlkZW50aWZpZWQgd2l0aCBtZWNoYW5pc21zIGNvbW1vbmx5IGluIHVzZS4KKyAuCisgSXQgaXMgbWFpbmx5IHVzZWQgYnkgdGhlIEVYVDItZmlsZXN5c3RlbSB0b29scy4KKworUGFja2FnZTogc3MyZworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30KK0NvbmZsaWN0czogZTJmc3Byb2dzICg8PCAxLjEwLTYpLCBzczIKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogIlN1Yi1TeXN0ZW0iIGxpYnJhcnkgZm9yIHNpbXBsZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgLSBzaGFyZWQgbGlicworIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgc2hhcmVkIGxpYnMgdG8gc3VwcG9ydCBjb21tYW5kLWxpbmUKKyBpbnRlcmZhY2UgcGFyc2VycyBnZW5lcmF0ZWQgd2l0aCB0aGUgc3NnLWRldiBwYWNrYWdlLgorIC4gCisgSXQgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgdGhlIE11bHRpY3MgU3ViU3lzdGVtIGxpYnJhcnkuCisKK1BhY2thZ2U6IGUyZnNsaWJzZworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30KK1Byb3ZpZGVzOiBleHQyZnMyZywgZTJwMmcsIHV1aWQxZworQ29uZmxpY3RzOiBlMmZzcHJvZ3MgKDw9IDEuMTAtNykKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogVGhlIEVYVDIgZmlsZSBzeXN0ZW0gc2hhcmVkIGxpYnMuCisgRVhUMiBzdGFuZHMgZm9yICJFeHRlbmRlZCBGaWxlc3lzdGVtIiwgdmVyc2lvbiAyLiBJdCdzIHRoZSBmaWxlc3lzdGVtIHR5cGUKKyB1c2VkIGZvciBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHNoYXJlZCBsaWJyYXJpZXMgbmVlZGVkIGJ5IHRoZSB1dGlsaXR5IHByb2dyYW1zLgorCitQYWNrYWdlOiBjb21lcnJnLWRldgorU2VjdGlvbjogZGV2ZWwKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogJHtsaWJjZGV2OkRlcGVuZHN9LCBjb21lcnIyZworU3VnZ2VzdHM6IGRvYy1iYXNlCitDb25mbGljdHM6IGUyZnNwcm9ncyAoPDwgMS4xMC02KSwgY29tZXJyLWRldgorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBUaGUgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIGxpYnJhcnkgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzLgorIGxpYmNvbWVyciBpcyBhbiBhdHRlbXB0IHRvIHByZXNlbnQgYSBjb21tb24gZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvCisgbWFuaXB1bGF0ZSB0aGUgbW9zdCBjb21tb24gZm9ybSBvZiBlcnJvciBjb2RlIGluIGEgZmFzaGlvbiB0aGF0IGRvZXMgbm90CisgaGF2ZSB0aGUgcHJvYmxlbXMgaWRlbnRpZmllZCB3aXRoIG1lY2hhbmlzbXMgY29tbW9ubHkgaW4gdXNlLgorCitQYWNrYWdlOiBzc2ctZGV2CitTZWN0aW9uOiBkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiAke2xpYmNkZXY6RGVwZW5kc30sIHNzMmcKK0NvbmZsaWN0czogZTJmc3Byb2dzICg8PCAxLjEwLTYpLCBzcy1kZXYKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogIlN1Yi1TeXN0ZW0iIGxpYnJhcnkgZm9yIHNpbXBsZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgLSBkZXZlbC4gZmlsZXMKKyBUaGlzIHBhY2thZ2UgaW5jbHVkZXMgYSB0b29sIHRoYXQgcGFyc2VzIGEgY29tbWFuZCB0YWJsZSB0byBnZW5lcmF0ZQorIGEgc2ltcGxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgcGFyc2VyLCB0aGUgaW5jbHVkZSBmaWxlcyBuZWVkZWQgdG8KKyBjb21waWxlIGFuZCB1c2UgaXQsIGFuZCB0aGUgc3RhdGljIGxpYnMuCisgLiAKKyBJdCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSB0aGUgTXVsdGljcyBTdWJTeXN0ZW0gbGlicmFyeS4KKworUGFja2FnZTogZTJmc2xpYnNnLWRldgorU2VjdGlvbjogZGV2ZWwKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogJHtsaWJjZGV2OkRlcGVuZHN9LCBlMmZzbGlic2csIGNvbWVycmctZGV2CitTdWdnZXN0czogZG9jLWJhc2UKK1Byb3ZpZGVzOiBleHQyZnNnLWRldiwgZTJwZy1kZXYsIHV1aWRnLWRldgorQ29uZmxpY3RzOiBlMmZzcHJvZ3MgKDw8IDEuMTAtNiksIGUyZnNsaWJzLWRldgorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBUaGUgaGVhZGVycyBhbmQgc3RhdGljIGxpYnJhcmllcyBmb3IgZXh0MmZzLWF3YXJlIHRvb2xzLWRldmVsb3BtZW50LgorIEVYVDJGUyBzdGFuZHMgZm9yICJFeHRlbmRlZCBGaWxlc3lzdGVtIiwgdmVyc2lvbiAyLiBJdCdzIHRoZSBmaWxlc3lzdGVtCisgdHlwZSB1c2VkIGZvciBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXJzIGFuZCBzaGFyZWQgbGlicmFyaWVzIG5lZWRlZCB0byBjb21waWxlCisgZXh0MmZzLWF3YXJlIHByb2dyYW1zLiBPbmx5IHByb2dyYW1tZXJzIHRoYXQgcmVhbGx5IG1hbmlwdWxhdGUKKyBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUgZXh0MiBmaWxlc3lzdGVtIHdpbGwgbmVlZCB0aGlzLiBNb3N0CisgcHJvZ3JhbW1lcnMgd2lsbCB1c2UgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbS1pbmRlcGVuZGVudCBpbnRlcmZhY2UKKyBmcm9tIGxpYmMuCisgLgorIEl0IGFsc28gY29udGFpbnMgZGV2IGZpbGVzIGZvciAyIG90aGVyIGxpYnMgKGUycCBhbmQgdXVpZCkgdXNlZCBieQorIHRoZSBlMmZzcHJvZ3MsIGJ1dCB3aGljaCBhcmUgbm90IHlldCBwYWNrYWdlZCBhbGwgYnkgdGhlbXNlbHZlcworIGJlY2F1c2UgdGhleSBsYWNrIGRvY3VtZW50YXRpb24uIFRoZXkgbWF5IGFsc28gbGFjayBzb21lIHN1cHBvcnQKKyBmaWxlcywgYnkgSSBjYW4ndCByZWFsbHkga25vdyB1bnRpbCBzb21lb25lIHVzZXMgdGhlbS4uLgorIC4KKyBsaWJlMnAgaXMgZm9yIHVzZXItbGV2ZWwgZTJmc3Byb2dzIGNvbW1hbmRzLiAgSXQncyB1c2VkIGJ5IGR1bXBlMmZzLAorIGNoYXR0ciwgYW5kIGxzYXR0ci4gIEZ1bmN0aW9ucyBpbiBsaWJlMnAgdHlwaWNhbGx5IGhhdmUgdHdvCisgY2hhcmFjdGVyaXN0aWNzIChhKSBkb24ndCByZXF1aXJlIHRoYXQgYmxvY2sgZGV2aWNlIGNvbnRhaW5pbmcgdGhlCisgZmlsZXN5c3RlbSBiZSBvcGVuZWQgZGlyZWN0bHkgKGZ1bmN0aW9ucyBpbiBsaWJleHQyZnMgZG8pLCBhbmQgKGIpCisgbGliZTJwIHR5cGljYWxseSBjb250YWlucyBwcmludGYgc3RhdGVtZW50cyBvciBwYXJzZSB1c2VyIGlucHV0LCBhbmQgc28KKyBoYXZlIG1vcmUgaW50ZXJuYXRpb25hbGl6YXRpb24gaXNzdWVzLgorIC4KKyBsaWJ1dWlkIGdlbmVyYXRlcyBhbmQgcGFyc2VzIDEyOC1iaXQgdW5pdmVyc2FsbHkgdW5pcXVlIGlkJ3MgKFVVSUQncyksCisgdXNpbmcgYSBzdGFuZGFyZCB3aGljaCBpcyBibGVzc2VkIGJ5IGJvdGggTWljcm9zb2Z0IGFuZCBEQ0UsIGFuZCBpcworIGJlaW5nIHByb3Bvc2VkIGFzIGFuIGludGVybmV0IHN0YW5kYXJkLiAgU2VlIHRoZSBpbnRlcm5ldC1kcmFmdDoKKyAuCisgICAgICAgICAgICAgICAgZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEudHh0CisgLgorIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL2UyZnNsaWJzZy5maWxlcyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvbGlicy9lMmZzbGlic2cuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3NzA4NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvbGlicy9lMmZzbGlic2cuZmlsZXMKQEAgLTAsMCArMSwzIEBACitsaWIvKi5zby4/LioKK2xpYi8qLnNvLj8KK3Vzci9kb2MvZTJmc2xpYnNnLyoKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvbGlicy9ydWxlcyBiL2UyZnNwcm9ncy9kZWJpYW4vYXR0aWMvbGlicy9ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2YzYzhkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL3J1bGVzCkBAIC0wLDAgKzEsMTgyIEBACisjISAvdXNyL2Jpbi9tYWtlIC1mCisjIC0qLSBtYWtlZmlsZSAtKi0KKyMKKyMgSW52b2tlIGVhY2ggdGFyZ2V0IHdpdGggYC4vZGViaWFuL3J1bGVzIDx0YXJnZXQ+Jy4gIEFsbCB0YXJnZXRzIHNob3VsZCBiZQorIyBpbnZva2VkIHdpdGggdGhlIHBhY2thZ2Ugcm9vdCBhcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisjCisjIFRoZSBgYmluYXJ5JyB0YXJnZXQgbXVzdCBiZSBydW4gYXMgcm9vdCwgYXMgaXQgbmVlZHMgdG8gaW5zdGFsbCBmaWxlcyB3aXRoCisjIHNwZWNpZmljIG93bmVyc2hpcHMuCisKKyMgVW5jb21tZW50IHRoaXMgdG8gdHVybiBvbiB2ZXJib3NlIG1vZGUuCitleHBvcnQgREhfVkVSQk9TRT0xCisKK3BhY2thZ2UgPSBlMmZzcHJvZ3MKK0FSQ0ggPSAkKHNoZWxsIGRwa2cgLS1wcmludC1hcmNoaXRlY3R1cmUpCisKKyMgZmluZCB0aGUgdmVyc2lvbiBmb3IgdGhlIG1haW4gcGFja2FnZSwgZnJvbSBjaGFuZ2Vsb2cgZmlsZQorTUFJTl9WRVJTSU9OID0gJChzaGVsbCBoZWFkIC0xIGRlYmlhbi9jaGFuZ2Vsb2cgfCBjdXQgJy1kICcgLWYgMiB8IHNlZCAncy9bKCldLy9nJykKKyMgZmluZCB2ZXJzaW9ucyBmb3IgbGlicmFyaWVzIGdvaW5nIGludG8gdGhlaXIgb3duIHBhY2thZ2VzLCBmcm9tIHRoZWlyIE1ha2VmaWxlLmluJ3MKK0NPTUVSUl9WRVJTSU9OID0gJChzaGVsbCBncmVwIEVMRl9WRVJTSU9OIGxpYi9ldC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitDT01FUlJfTUFKT1IgPSAkKHdvcmQgMSwkKHN1YnN0IC4sICwkKENPTUVSUl9WRVJTSU9OKSkpCitTU19WRVJTSU9OID0gJChzaGVsbCBncmVwIEVMRl9WRVJTSU9OIGxpYi9zcy9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitTU19NQUpPUiA9ICQod29yZCAxLCQoc3Vic3QgLiwgLCQoU1NfVkVSU0lPTikpKQorCit0b3BkaXIgPSAkKHNoZWxsIHB3ZCkKK2RlYmRpciA9ICQodG9wZGlyKS9kZWJpYW4KK21haW5kaXIgPSAkKGRlYmRpcikvdG1wCitidWlsZGRpciA9ICQodG9wZGlyKS9idWlsZGRpcgorZG9jZGlyID0gJChtYWluZGlyKS91c3IvZG9jLyQocGFja2FnZSkKKworU1VCUEFDS0FHRVNfRElSUyA9IHRtcCBlMmZzbGlic2cgZTJmc2xpYnNnLWRldiBjb21lcnIkKENPTUVSUl9NQUpPUilnIGNvbWVycmctZGV2IFwKKwlzcyQoU1NfTUFKT1IpZyBzc2ctZGV2CisKK2luc3RhbGxkb2MgPSBpbnN0YWxsIC1tIDY0NAoraW5zdGFsbGJpbiA9IGluc3RhbGwgLW0gNzU1CisKK2lmZXEgKCQoQVJDSCksYWxwaGEpCitDQ09QVFMgPSAtZyAtTzIgLWZzaWduZWQtY2hhciAtREhBVkVfTkVUSU5FVF9JTl9ICitMSUJDLURFViA9IGxpYmM2LjEtZGV2CitlbHNlCitDQ09QVFMgPSAtZyAtTzIgLWZzaWduZWQtY2hhcgorTElCQy1ERVYgPSBsaWJjNi1kZXYKK2VuZGlmCisKK2J1aWxkOiBjb25maWd1cmVkCisJZGhfdGVzdGRpcgorCW1ha2UgLUMgJChidWlsZGRpcikKKwltYWtlIC1DICQoYnVpbGRkaXIpL21pc2MgZmluZHN1cGVyCisJY2QgZG9jICYmIHRleGkyaHRtbCAtc3BsaXRfY2hhcHRlciBsaWJleHQyZnMudGV4aW5mbworCWNkIGxpYi9ldCAmJiB0ZXhpMmh0bWwgLXNwbGl0X2NoYXB0ZXIgLWV4cGFuZGluZm8gY29tX2Vyci50ZXhpbmZvCisJdG91Y2ggYnVpbGQKKworY29uZmlndXJlZDoKKwlkaF90ZXN0ZGlyCisJbWtkaXIgLXAgJChidWlsZGRpcikKKwljZCAkKGJ1aWxkZGlyKSAmJiBDRkxBR1M9IiQoQ0ZMQUdTKSIgXAorCQkuLi9jb25maWd1cmUgLS1lbmFibGUtZWxmLXNobGlicyAtLWVuYWJsZS1keW5hbWljLWUyZnNjayBcCisJCS0td2l0aC1jY29wdHM9IiQoQ0NPUFRTKSIKKwl0b3VjaCBjb25maWd1cmVkCisKK2NsZWFuOgorCWRoX3Rlc3RkaXIKKwlybSAtZiBidWlsZCBjb25maWd1cmVkIGluc3RhbGwKKwktbWFrZSAtQyAkKGJ1aWxkZGlyKSAtaSBkaXN0Y2xlYW4KKwlybSAtcmYgJChidWlsZGRpcikKKwlybSAtZiBkb2MvbGliZXh0MmZzXyouaHRtbCBsaWIvZXQvY29tX2Vycl8qLmh0bWwKKwlkaF9jbGVhbgorCitiaW5hcnktaW5kZXA6IGJ1aWxkCisgICMgbm8gYXJjaC1pbmRlcGVuZGFudCBkZWJzLgorCitiaW5hcnktYXJjaDogYnVpbGQKKwlkaF90ZXN0dmVyc2lvbiAwLjU2ICMgPT0gMC41MyArIGZpeGVzCisJZGhfdGVzdGRpciAtYQorCWRoX3Rlc3Ryb290IC1hCisJZGhfY2xlYW4gLWEgLWsKKwlkaF9pbnN0YWxsZGlycyAtYQorCisJbWFrZSAtQyAkKGJ1aWxkZGlyKSBpbnN0YWxsIERFU1RESVI9JChtYWluZGlyKQorCWluc3RhbGwgLW0gNzU1ICQoYnVpbGRkaXIpL21pc2MvZmluZHN1cGVyICQobWFpbmRpcikvc2JpbgorICAjIHN0YXRpYyBsaWJzIGFuZCAuaCBmaWxlcworCW1ha2UgLUMgJChidWlsZGRpcikgaW5zdGFsbC1saWJzIERFU1RESVI9JChtYWluZGlyKQorCWluc3RhbGwgLW0gNjQ0ICQoYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKG1haW5kaXIpL3Vzci9pbmNsdWRlL3NzLworCisjIGZpeCBhbmQgaW5zdGFsbCBjb21waWxlX2V0IHNjcmlwdAorCXNlZCBzJSQodG9wZGlyKS9saWIvZXQlL3Vzci9zaGFyZS9jb21lcnIlIFwKKwkgIDwkKGJ1aWxkZGlyKS9saWIvZXQvY29tcGlsZV9ldCBcCisJICA+JChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9iaW4vY29tcGlsZV9ldAorCWNobW9kIDc1NSAkKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL2Jpbi9jb21waWxlX2V0CisjIGFkZCBzdXBwb3J0IGZpbGVzIGZvciBjb21waWxlX2V0CisJaW5zdGFsbCAtbSA2NDQgbGliL2V0L2V0X2MuYXdrIGxpYi9ldC9ldF9oLmF3ayBcCisJICAkKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL3NoYXJlL2NvbWVyci8KKworIyBmaXggYW5kIGluc3RhbGwgbWtfY21kcyBzY3JpcHQKKwlzZWQgcyUkKHRvcGRpcikvbGliL3NzJS91c3Ivc2hhcmUvc3MlIFwKKwkgIDwkKGJ1aWxkZGlyKS9saWIvc3MvbWtfY21kcyBcCisJICA+JChkZWJkaXIpL3NzZy1kZXYvdXNyL2Jpbi9ta19jbWRzCisJY2htb2QgNzU1ICQoZGViZGlyKS9zc2ctZGV2L3Vzci9iaW4vbWtfY21kcworIyBhZGQgc3VwcG9ydCBmaWxlcyBmb3IgbWtfY21kcworCWluc3RhbGwgLW0gNjQ0IGxpYi9zcy9jdF9jLmF3ayBsaWIvc3MvY3RfYy5zZWQgXAorCSAgJChkZWJkaXIpL3NzZy1kZXYvdXNyL3NoYXJlL3NzLworCisjIGRvY3MKKwlta2RpciAtcCAkKGRlYmRpcikvZTJmc2xpYnNnLWRldi91c3IvZG9jL2UyZnNsaWJzZworCWxuIC1zZiBlMmZzbGlic2cgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL2RvYy9lMmZzbGlic2ctZGV2CisJbWtkaXIgLXAgJChtYWluZGlyKS91c3IvZG9jL2UyZnNsaWJzZworCWxuIC1zZiBlMmZzbGlic2cgJChtYWluZGlyKS91c3IvZG9jL2UyZnNwcm9ncworCW1rZGlyIC1wICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvZG9jL2NvbWVyciQoQ09NRVJSX01BSk9SKWcKKwlsbiAtc2YgY29tZXJyJChDT01FUlJfTUFKT1IpZyAkKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL2RvYy9jb21lcnJnLWRldgorCW1rZGlyIC1wICQoZGViZGlyKS9zc2ctZGV2L3Vzci9kb2Mvc3MkKFNTX01BSk9SKWcKKwlsbiAtc2Ygc3MkKFNTX01BSk9SKWcgJChkZWJkaXIpL3NzZy1kZXYvdXNyL2RvYy9zc2ctZGV2CisJZGhfaW5zdGFsbGRvY3MgLWEKKworICAjIEhUTUwgZG9jcworCWluc3RhbGwgLWQgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL2RvYy9lMmZzbGlic2ctZGV2L2h0bWwtaW5mby8KKwlpbnN0YWxsIC1wICQodG9wZGlyKS9kb2MvbGliZXh0MmZzXyouaHRtbCBcCisJICAgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL2RvYy9lMmZzbGlic2ctZGV2L2h0bWwtaW5mby8KKwlpbnN0YWxsIC1kICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvZG9jL2NvbWVycmctZGV2L2h0bWwtaW5mby8KKwlpbnN0YWxsIC1wICQodG9wZGlyKS9saWIvZXQvY29tX2Vycl8qLmh0bWwgXAorCSAgICQoZGViZGlyKS9jb21lcnJnLWRldi91c3IvZG9jL2NvbWVycmctZGV2L2h0bWwtaW5mby8KKworICAjIHRleGluZm8gZG9jcworCWluc3RhbGwgLXAgJCh0b3BkaXIpL2RvYy9saWJleHQyZnMudGV4aW5mbyBcCisJICAgJChkZWJkaXIpL2UyZnNsaWJzZy1kZXYvdXNyL2RvYy9lMmZzbGlic2cvbGliZXh0MmZzLnRleGkKKwlpbnN0YWxsIC1wICQodG9wZGlyKS9saWIvZXQvY29tX2Vyci50ZXhpbmZvIFwKKwkgICAkKGRlYmRpcikvY29tZXJyZy1kZXYvdXNyL2RvYy9jb21lcnIyZy9jb21fZXJyLnRleGkKKworICAjIGRvYy1iYXNlIHN1cHBvcnQKKwlpbnN0YWxsIC1kICQoZGViZGlyKS9lMmZzbGlic2ctZGV2L3Vzci9zaGFyZS9kb2MtYmFzZS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAkKGRlYmRpcikvbGliZXh0MmZzLmRvY2Jhc2UgXAorCSAgICQoZGViZGlyKS9lMmZzbGlic2ctZGV2L3Vzci9zaGFyZS9kb2MtYmFzZS9saWJleHQyZnMKKwlpbnN0YWxsIC1kICQoZGViZGlyKS9jb21lcnJnLWRldi91c3Ivc2hhcmUvZG9jLWJhc2UvCisJaW5zdGFsbCAtcCAtbSA2NDQgJChkZWJkaXIpL2NvbV9lcnIuZG9jYmFzZSBcCisJICAgJChkZWJkaXIpL2NvbWVycmctZGV2L3Vzci9zaGFyZS9kb2MtYmFzZS9jb21fZXJyCisKKyAgIyBleGFtcGxlcworCWRoX2luc3RhbGxleGFtcGxlcyAtYQorCisgICMgZGhfaW5zdGFsbG1hbnBhZ2VzIHN0aWxsIG1ha2VzIGEgbWVzcyBhcyBvZiAwLjU0IChzZWUgYmVsb3cgZGhfbW92ZWZpbGVzKQorCWluc3RhbGwgLXAgJCh0b3BkaXIpL2xpYi9ldC9jb21waWxlX2V0LjEgJChtYWluZGlyKS91c3IvbWFuL21hbjEvCisJaW5zdGFsbCAtZCAkKG1haW5kaXIpL3Vzci9tYW4vbWFuMy8KKwlpbnN0YWxsIC1wICQodG9wZGlyKS9saWIvZXQvY29tX2Vyci4zICQobWFpbmRpcikvdXNyL21hbi9tYW4zLworCWxuIC1zIGUyZnNjay44ICQobWFpbmRpcikvdXNyL21hbi9tYW44L2ZzY2suZXh0Mi44CisJbG4gLXMgbWtlMmZzLjggJChtYWluZGlyKS91c3IvbWFuL21hbjgvbWtmcy5leHQyLjgKKworCWRoX21vdmVmaWxlcyAtYQorICAjIGNsZWFudXAgZW1wdHkgZGlycworCWNkICAkKG1haW5kaXIpICYmIHJtZGlyIHVzci9tYW4vY2F0PyBiaW4gbGliIHVzci9pbmNsdWRlLyogdXNyL2luY2x1ZGUgXAorCQl1c3IvaW5mbyB1c3IvbGliIHVzci9tYW4vbWFuMyB1c3IvZG9jL2UyZnNsaWJzZworCisjCWRoX2luc3RhbGxtZW51IC1hCisKKyAgIyBicm9rZW4gKyB1c2VsZXNzIGluIDAuNTIKKyAgIwlkaF9pbnN0YWxsbWFucGFnZXMgLWEKKworCWRoX3VuZG9jdW1lbnRlZCAtYQorCisJZGhfaW5zdGFsbGNoYW5nZWxvZ3MgLXBlMmZzbGlic2cgLXBjb21lcnIkKENPTUVSUl9NQUpPUilnIC1wc3MkKFNTX01BSk9SKWcgQ2hhbmdlTG9nCisKKwlkaF9zdHJpcCAtYQorCWRoX2NvbXByZXNzIC1hCisJZGhfZml4cGVybXMgLWEKKworCWVjaG8gImxpYmNkZXY6RGVwZW5kcz0kKExJQkMtREVWKSIgPiBkZWJpYW4vY29tZXJyZy1kZXYuc3Vic3R2YXJzCisJZWNobyAibGliY2RldjpEZXBlbmRzPSQoTElCQy1ERVYpIiA+IGRlYmlhbi9zc2ctZGV2LnN1YnN0dmFycworCWVjaG8gImxpYmNkZXY6RGVwZW5kcz0kKExJQkMtREVWKSIgPiBkZWJpYW4vZTJmc2xpYnNnLWRldi5zdWJzdHZhcnMKKworCWRoX2luc3RhbGxkZWIgLWEKKwlMRF9MSUJSQVJZX1BBVEg9JChidWlsZGRpcikvbGliOi9saWI6L3Vzci9saWIgXAorCSAgZGhfc2hsaWJkZXBzIC1hCisJZGhfZ2VuY29udHJvbCAtdSAnLWlzcCcgLXBlMmZzcHJvZ3MgLXBlMmZzbGlic2cgLXBlMmZzbGlic2ctZGV2CisJZGhfZ2VuY29udHJvbCAtdSAnLWlzcCcgLXBjb21lcnIkKENPTUVSUl9NQUpPUilnIC1wY29tZXJyZy1kZXYgXAorCSAgLXUgJy12JChDT01FUlJfVkVSU0lPTiktJChNQUlOX1ZFUlNJT04pJworCWRoX2dlbmNvbnRyb2wgLXUgJy1pc3AnIC1wc3MkKFNTX01BSk9SKWcgLXBzc2ctZGV2IFwKKwkgIC11ICctdiQoU1NfVkVSU0lPTiktJChNQUlOX1ZFUlNJT04pJworCWRoX21ha2VzaGxpYnMgLWEKKyMJZGhfZHUgLWEKKwlkaF9tZDVzdW1zIC1hCisJZGhfYnVpbGRkZWIgLWEKKworYmluYXJ5OiBiaW5hcnktaW5kZXAgYmluYXJ5LWFyY2gKKworLlBIT05ZOiBiaW5hcnkgYmluYXJ5LWFyY2ggYmluYXJ5LWluZGVwIGNsZWFuIGNoZWNrcm9vdApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL3NzMmcuZmlsZXMgYi9lMmZzcHJvZ3MvZGViaWFuL2F0dGljL2xpYnMvc3MyZy5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjcxN2NiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9hdHRpYy9saWJzL3NzMmcuZmlsZXMKQEAgLTAsMCArMSwyIEBACitsaWIvbGlic3Muc28uPy4qCitsaWIvbGlic3Muc28uPwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9jaGFuZ2Vsb2cgYi9lMmZzcHJvZ3MvZGViaWFuL2NoYW5nZWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Q1OGJmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9jaGFuZ2Vsb2cKQEAgLTAsMCArMSwzNTA4IEBACitlMmZzcHJvZ3MgKDEuNDIuOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTk1VIGFjayAoQ2xvc2VzOiAjNjk4ODc5KQorICAqIEZpeCBjcm9zcy1idWlsZCBzdXBwb3J0IChDbG9zZXM6ICM3MjEzNjUpCisgICogbWtlMmZzIHdpbGwgZGV0ZWN0IGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gYQorICAgIGxvb3AtbW91bnRlZCBpbWFnZSBmaWxlCisgICogRml4ZWQgYSBsYXJnZSBudW1iZXIgb2YgYnVncyBpbiByZXNpemUyZnMsIGUyZnNjaywgZGVidWdmcywgdG8KKyAgICBoYW5kbGUgYmlnYWxsb2MgYW5kIDY0LWJpdCBmaWxlIHN5c3RlbXMuCisgICogVHVuZTJmcyB3aWxsIG5vIGxvbmdlciBhbGxvdyBjaGFuZ2luZyB0aGUgdXVpZCBvbiBhIG1vdW50ZWQgZmlsZQorICAgIHN5c3RlbSB3aXRoIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBlbmFibGVkLgorICAqIEUyZnNjayB3aWxsIHByb3Blcmx5IGFsbG9jYXRlIGEgbmV3IGV4dGVudCB0cmVlIGJsb2NrIGluIHRoZSByYXJlCisgICAgY2FzZSB3aGVyZSBvbmUgaXMgbmVlZGVkIHdoZW4gcmVoYXNoaW5nIGFuIGV4dGVudC1tYXBwZWQgZGlyZWN0b3J5LgorICAqIE1rZTJmcyB3aWwgbm93IHByb3Blcmx5IHNldCB0aGUgTEFSR0VfRklMRSBmZWF0dXJlIHdoZW4gY3JlYXRpbmcgYQorICAgIGpvdXJuYWwgPiAyR0IuCisgICogRGVidWdmcyB3aWxsIG5vdyBjb3JyZWN0bHkgaGFuZGxlIGZyZWUgYSByYW5nZSBvZiBpbm9kZXMgdXNpbmcgdGhlCisgICAgZnJlZWkgY29tbWFuZC4KKyAgKiBFMmZzY2sgd2lsbCBubyBsb25nZXIgY29tcGxhaW4gaWYgYW4gZXh0ZXJuYWwgam91cm5hbCB3YXMgZXhhY3RseQorICAgIDIqKjMyIGJsb2Nrcy4KKyAgKiBFMmZzY2sgd2lsbCBub3QgbG9uZ2VyIHRyeSB0byBhZGQgYSBtaXNzaW5nIGxvc3QrZm91bmQgZGlyZWN0b3J5CisgICAgd2hlbiBydW4gaW4gcmVhZC1vbmx5IG1vZGUuCisgICogRml4ZWQgc29tZSBidWZmZXIgb3ZlcnJ1biBidWdzIHdoZW4gY3JlYXRpbmcgc3RhbmRhcmQgZTJpbWFnZSBmaWxlcworICAqIE1rZTJmcyB3aWxsIG5vdCB0cnkgdG8gc2V0IGJvdGggdGhlIG1ldGFfYmcgYW5kIHJlc2l6ZV9pbm9kZSBmZWF0dXJlCisgICAgd2hlbiB0aGUgZXh0ZW5kZWQgb3B0aW9uICItRSByZXNpemU9Tk5OIiBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgICogRHVtcGUyZnMgd2lsbCBubyBsb25nZXIgYWJvcnQgd2hlbiB0cnlpbmcgdG8gcHJpbnQgdGhlIGpvdXJuYWwKKyAgICBpbmZvcm1hdGlvbiBmcm9tIGFuIGUyaW1hZ2UtY3JlYXRlZCBpbWFnZSBmaWxlLgorICAqIERlYnVnZnMncyAid3JpdGUiIGNvbW1hbmQgY2FuIG5vdyBjcmVhdGUgYSBzcGFyc2UgZmlsZXMKKyAgKiBEZWJ1Z2ZzIGNhbiBub3cgc3VwcG9ydCBhIGNvbW1hbmQgbGluZSB3aGljaCBpcyB1cCB0byA4ayBsb25nCisgICogRTJpbWFnZSB3aWxsIHJlZnVzZSB0byBjcmVhdGUgYSByYXcgb3IgcWNvbXcgaW1hZ2UgdXNpbmcgYSBtb3VudGVkCisgICAgZmlsZSBzeXN0ZW0gdW5sZXNzIHRoZSAtZiBvcHRpb24gaXMgZ2l2ZW4uCisgICogRTJpbWFnZSBoYXMgYmVlbiBtYWRlIG1vcmUgdXNlZnVsIGZvciBlZmZpY2llbnRseSBjb3B5aW5nIGZpbGUKKyAgICBzeXN0ZW1zIHVzaW5nIHRoZSAtcmEgb3B0aW9ucy4gIE5ldyBvcHRpb25zIHRvIGhlbHAgd2l0aCB0aGlzIHVzZQorICAgIGNhc2UgdGhhdCB3ZXJlIGFkZGVkOiAtbywgLU8sIC1wLCBhbmQgLWMuCisgICogRml4ZWQgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gMS40Mi44IHdoaWNoIHdvdWxkIGNhdXNlIGUyZnNjayB0bworICAgIGVycm9uZW91c2x5IHJlcG9ydCB1bmluaXRpYWxpemVkIGV4dGVudHMgcGFzdCBpX3NpemUgdG8gYmUgaW52YWxpZC4KKyAgKiBGaXhlZCBjYXNlcyB3aGVyZSByZXNpemUyZnMgY291bGQgY29ycnVwdCBhIGZpbGUgc3lzdGVtLCBlc3BlY2lhbGx5CisgICAgd2hlbiBzaHJpbmtpbmcgYSBmaWxlIHN5c3RlbS4gIChDbG9zZXM6ICM2NjA3OTMpCisgICogRml4ZWQgcmVzaXplMmZzIGFuZCBlMmZzY2sgdG8gbm90IGNyYXNoIHdoZW4gb3BlcmF0aW5nIG9uIGEgZmlsZQorICAgIHN5c3RlbSB3aXRoIHRoZSBNTVAgZmVhdHVyZSBlbmFibGVkLgorICAqIEZpeGVkIGRlYnVnZnMncyB3cml0ZSBjb21tYW5kIHRvIHByb3Blcmx5IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIGZpbGUKKyAgICAoaW5zdGVhZCBvZiBjcmVhdGluZyBhbiBpbnZhbGlkIGlub2RlKS4KKyAgKiBGaXhlZCBlMmZzY2sgdG8gbm90IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhbiBpbnZhbGlkCisgICAgZXh0ZW50LW1hcHBlZCBzeW1saW5rLgorICAqIEltcHJvdmVkIGRlYnVnZnMncyBoZWxwIHRleHRzCisgICogRml4ZWQgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBwcm9ibGVtIGluIGUyZnJlZWZyYWcKKyAgICAoQ2xvc2VzOiAjNzE4MjA1KQorICAqIFRoZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZmlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGhlCisgICAgbGF0ZXN0IHRvIGhlbHAgd2l0aCB0aGUgcHBjbGUgcG9ydC4gIChDbG9zZXM6ICM3MzIwNzYpCisgICogVXBkYXRlZC9maXhlZCB2YXJpb3VzIG1hbiBwYWdlcy4gIChDbG9zZXM6ICM1ODYyMTgsICM2Njk3MzAsCisgICAgIzY5ODA3NiwgIzczMTMyOSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDI4IERlYyAyMDEzIDIzOjE4OjM2IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBXb3JrIGFyb3VuZCBEZWJpYW4gQnVnICM3MTI1MzAgKENsb3NlczogIzcwODMwNykKKyAgKiBGaXggZTJmc2NrIHNvIGl0IGNhbiBjaGVjayBhIHJlYWQtb25seSByb290IGZpbGUgc3lzdGVtIHdpdGggYW4KKyAgICBleHRlcm5hbCBqb3VybmFsLiAgKENsb3NlczogIzcwNzAzMCkKKyAgKiBGaXggb2ZmLWxpbmUgcmVzaXppbmcgb2YgZmlsZSBzeXN0ZW1zIHdpdGggZmxleF9iZyAmJiAhcmVzaXplX2lub2RlCisgICAgKENsb3NlczogIzY5Njc0NikKKyAgKiBDaGFuZ2UgbWtlMmZzIHNvIHRoYXQgaXQgZG9lcyBub3Qgc2V0IHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgcmVhbAorICAgIHVpZC9naWQgb2YgdGhlIG1rZTJmcyBwcm9jZXNzLiAgQWRkIHRoZSBleHRlbmRlZCBvcHRpb24gcm9vdF9vd25lciB0bworICAgIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuCisgICogSWYgYW4gaW52YWxpZCBqb3VybmFsIHNpemUgaXMgZ2l2ZW4gdG8gbWtlMmZzLCBpdCB3aWxsIG5vdyBjb21wbGFpbgorICAgIGFuZCBleGl0IHNvb25lci4KKyAgKiBGaXggcmVzaXplMmZzIHdoZW4gc2hyaW5raW5nIGZpbGUgc3lzdGVtcyB0byBtYWtlIHN1cmUgdGhhdCBiaXRtYXAKKyAgICBibG9ja3MgYXJlbid0IGxlZnQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzaHJ1bmtlbiBmaWxlIHN5c3RlbS4KKyAgICBUaGlzIGNvdWxkIGhhcHBlbiB3aXRoIGZsZXhfYmcgZmlsZSBzeXN0ZW1zIHRoYXQgd2VyZSBncm93biB1c2luZworICAgIHRoZSBvbGQgb25saW5lIHJlc2l6aW5nIGFsZ29yaXRobS4KKyAgKiBFMmZzY2sgd2lsbCBub3cgZGV0ZWN0IGFuZCByZXBhaXIgY29ycnVwdGVkIGV4dGVudCB0cmVlcyB3aGljaCBjb250YWluCisgICAgaW52YWxpZCBleHRlbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGV4dGVudCB0cmVlIGxlYWYgYmxvY2suCisgICogRTJmc2NrIHdpbGwgbm93IGxvbmdlciBjb21wbGFpbiBhYm91dCB6ZXJvIGxlbmd0aCBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWVzLgorICAqIEZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBlMmZzcHJvZ3MgdjEuNDIgd2hpY2ggY2F1c2VkIGUyaW1hZ2UgLXMKKyAgICB0byBjcmFzaC4KKyAgKiBBZGQgc2FmZXR5IGNoZWNrIHNvIHR1bmUyZnMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlIGlub2RlIHNpemUgdG8KKyAgICBiZSBsYXJnZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS4KKyAgKiBFbmhhbmNlIGNoYXR0ciB0byBhbGxvdyBjbGVhcmluZyB0aGUgZXh0ZW50IGZsYWcgaWYgdGhlIGtlcm5lbCBhbGxvd3MgaXQKKyAgKiBGaXggZTJpbWFnZSB3aXRoIGxhcmdlICg+IDMyLWJpdCkgZmlsZSBzeXN0ZW1zIChDbG9zZXM6ICM3MDMwNjcpCisgICogTWtlMmZzIHdpbGwgbm90IGdpdmUgd2FybmluZ3MgYWJvdXQgdGhlIGJpZ2FsbG9jIGFuZCBxdW90YSBvcHRpb25zIGluCisgICAgcXVpZXQgbW9kZS4KKyAgKiBEZWJ1Z2ZzIHdhcyBlcnJvbmVvdXNseSBnaXZpbmcgc3B1cmlvdXMgZXJyb3IgbWVzc2FnZXMgZm9yIGNlcnRhaW4KKyAgICBleHRlbnRfaW5vZGUgc3ViY29tbWFuZHMgd2hpY2ggdGFrZSBhcmd1bWVudHMgKHNwbGl0X25vZGUsCisgICAgcmVwbGFjZV9ub2RlLCBhbmQgaW5zZXJ0X25vZGUpLiAgVGhpcyBoYXMgYmVlbiBmaXhlZC4KKyAgKiBGaXggdGhlIHBhcnNpbmcgb2YgdGhlICdzJyAoc2VjdG9ycykgaW4gcGFyc2VfbnVtX2Jsb2NrczIsIHdoaWNoIGFtb25nCisgICAgb3RoZXIgcHJvZ3JhbXMgaXMgdXNlZCBieSBta2UyZnMuCisgICogRml4IHRleGluZm8gaW5jb21wYXRpYmlsaXRpZXMgKENsb3NlczogIzcxMjM2NSkKKyAgKiBVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzICAoQ2xvc2VzOiAjNzEyNDI5LCAjNzEyNDMwLCAjNzA3NjA5KQorICAqIFVwZGF0ZSBHZXJtYW4gdHJhbnNsYXRpb24KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUaHUsIDIwIEp1biAyMDEzIDIzOjA5OjI1IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi43LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBBZGQgd2FybmluZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHF1b3RhIGFuZCBiaWdhbGxvYyBmZWF0dXJlcyBhcmUKKyAgICBzdGlsbCB1bmRlciBkZXZlbG9wbWVudC4KKyAgKiBBZGRlZCBuZXcgb3B0aW9ucyB0byBmaWxlZnJhZyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHZlcnNpb24gZnJvbQorICAgIEx1c3RyZQorICAqIE9wdGltaXplZCBlMmZzY2sncyBDUFUgdXRpbGl6YXRpb24KKyAgKiBGaXhlZCBlMmZzY2sgc28gaXQgZGV0ZWN0cyBhbmQgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBpbnRlcmlvcgorICAgIG5vZGVzIG9mIGFuIGlub2RlJ3MgZXh0ZW50IHRyZWUKKyAgKiBGaXhlZCBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBmYWlsdXJlIGluIGUyZnNjaydzIGVycm9yIHBhdGggaWYKKyAgICB0aGUgY2FsbCB0byBleHQyZnNfb3BlbjIoKSBmYWlscy4KKyAgKiBGaXhlZCBlMmZzY2sgaWYgaXRzIGxvZ2dpbmcgZnVuY3Rpb24gaXMgZW5hYmxlZCBpbiBlMmZzY2suY29uZiwgYW5kCisgICAgdGhlIHJlc3VsdGluZyBmaWxlIG5hbWUgZm9yIHRoZSBsb2cgZmlsZSBpcyBsb25nZXIgdGhhbiAxMDAgYnl0ZXMsCisgICAgdGhhdCBpdCBwcm9wZXJseSBoYW5kbGVzIHRoaXMgc2l0dWF0aW9uIGluc3RlYWQgb2YgY3Jhc2hpbmcuCisgICogRTJmc2NrIHdpbGwgbm93IHJlcG9ydCB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGl0IGF0dGVtcHRlZCB0bworICAgIGFsbG9jYXRlIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0IGZhaWxzLCB0byBtYWtlIGl0IGVhc2llciB0bworICAgIHRyYWNrIGRvd24gdGhlIHByb2JsZW0uCisgICogRml4ZWQgYSBidWcgaW4gcmVzaXplMmZzIHdoaWNoIGNvdWxkIGNhdXNlIHNldmVyZSBmaWxlIHN5c3RlbQorICAgIGNvcnJ1cHRpb24gd2hlbiBncm93aW5nIGFuIGV4dDQgZmlsZSBzeXN0ZW0gd2hpY2ggd2FzIGZvcm1hdHRlZCB3aXRoCisgICAgZmV3ZXItdGhhbi1ub3JtYWwgcmVzZXJ2ZWQgZ2R0IGJsb2NrcworICAqIEZpeGVkIHJlc2l6ZTJmcyB0byBiZSBhYmxlIHRvIGhhbmRsZSBvZmYtbGluZSByZXNpemVzIG9mIGZpbGUKKyAgICBzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmcgZmVhdHVyZSBhbmQgd2l0aG91dCBhbnkgcmVzZXJ2ZWQgZ2R0CisgICAgYmxvY2tzIG9yIGlmIHRoZSBmaWxlIHN5c3RlbSBkaWQgbm90IGhhdmUgdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlCisgICogRnVydGhlciBvcHRpbWl6ZSByZXNpemUyZnMgc28gaXQgZG9lc24ndCB1c2UgcXVpdGUgYXMgbXVjaCBDUFUgd2hlbgorICAgIHJlc2l6aW5nIHZlcnkgbGFyZ2UgZmlsZSBzeXN0ZW1zLgorICAqIEZpeGVkIDMyLWJpdCBvdmVyZmxvdyBidWdzIHdoaWNoIGNvdWxkIGNhdXNlIHJlc2l6ZTJmcyB0byBmYWlsIGFuZAorICAgIHBvc3NpYmx5IGNvcnJ1cHQgdGhlIGZpbGUgc3lzdGVtIHdoaWxlIHJlc2l6aW5nIDY0LWJpdCBmaWxlIHN5c3RlbXMuCisgICogRml4ZWQgYSBiaWcgd2hpY2ggY291bGQgY2F1c2UgcmVzaXplMmZzIHRvIGNvcnJ1cHQgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zLgorICAqIEZpeCBhIGNyYXNoIHdoaWxlIG1rZTJmcyBpcyBwYXJzaW5nICItRSByZXNpemU9Tk5OIiB3aXRoIHRoZSA2NGJpdAorICAgIGZpbGUgc3lzdGVtIGZlYXR1cmUgZW5hYmxlZAorICAqIEFkZGVkIGJldHRlciBlcnJvciBjaGVja2luZyB0byBta2UyZnMgdG8gY2hlY2sgZm9yIGludmFsaWQKKyAgICBwYXJhbWV0ZXJzIHdoZW4gY3JlYXRpbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW0uCisgICogV2hlbiBjcmVhdGluZyBiaWdhbGxvYyBmaWxlc3lzdGVtcywgdGhlIC1nIG9wdGlvbiB0byBta2UyZnMgd2lsbCBub3cKKyAgICBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgcGVyIGJsb2NrIGdyb3VwLgorICAqIEFkZGVkIHRoZSAic3ltbGluayIsICJ6YXBfYmxvY2siLCAiYmxvY2tfZHVtcCIsIGFuZCAiZXh0ZW50X29wZW4iCisgICAgY29tbWFuZHMgdG8gZGVidWdmcworICAqIEZpeGVkIGRlYnVnZnMncyBodHJlZSBjb21tYW5kIHNvIHRoYXQgYWxsIGl0cyBtZXNzYWdlcyBhcmUgc2VudAorICAgIHRocm91Z2ggdGhlIHBhZ2VyLgorICAqIEZpeGVkIGRlYnVnZnMncyBkdW1wX2ZpbGUgYW5kIGNhdCBmdW5jdGlvbnMgc28gdGhleSB3b3JrIGNvcnJlY3RseQorICAgIG9uIGZpbGUgc3lzdGVtcyB3aXRoIGEgYmxvY2sgc2l6ZSBncmVhdGVyIHRoYW4gOGsuCisgICogRml4ZWQgbWtlMmZzJ3MgaGFuZGxpbmcgb2YgdGhlIG1tcF91cGRhdGVfaW50ZXJ2YWwgb3B0aW9uCisgICogRml4ZWQgZTJmcmVlZnJhZyBzbyBpdCB3b3JrcyBvbiA2NC1iaXQgZmlsZSBzeXN0ZW1zLCBhbmQgc28gaXQgdXNlcworICAgIG11Y2ggbGVzcyBtZW1vcnkuCisgICogRTJpbWFnZSBjYW4gbm93IGluY2x1ZGUgYWxsIGRhdGEgYmxvY2tzIGluIHRoZSBlMmltYWdlIG91dHB1dAorICAgIGZpbGUgd2hlbiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIC1hIG9wdGlvbi4KKyAgKiBGaXhlZCBkZWJ1Z2ZzJ3MgbWtub2QgY29tbWFuZCBzbyB0aGF0IGl0IHVwZGF0ZXMgdGhlIGJsb2NrIGdyb3VwCisgICAgc3RhdGlzdGljcworICAqIERvY3VtZW50IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGluIHRoZSBta2UyZnMgbWFuIHBhZ2UuCisgICAgKENsb3NlczogIzY2OTczMCkKKyAgKiBVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIEdlcm1hbiwgUG9saXNoLCBTd2VlZGlzaCwgYW5kCisgICAgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDIxIEphbiAyMDEzIDIxOjUyOjU4IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi42LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBGaXggYnVpbGQgZGVwZW5kZW5jaWVzIHRvIGF2b2lkIHJlcXVpcmluZyBkYywgYW5kIHRvIGFsbG93CisgICAgY3Jvc3MtYnVpbGRpbmcgdG8gd29yayAoQ2xvc2VzOiAjNjc3NDk3KQorICAqIFVwZGF0ZWQvZml4ZWQgdmFyaW91cyBtYW4gcGFnZXMKKyAgKiBNa2UyZnMgd2lsbCBub3cgdXBkYXRlIGl0cyBwcm9ncmVzcyBpbmRpY2F0b3JzIGF0IG1vc3Qgb25jZSBhIHNlY29uZAorICAgIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyBzZXJpYWwgY29uc29sZXMuCisgICogUmVzaXplMmZzIHdpbGwgc3VwcG9ydCBsYXp5X2l0YWJsZV9pbml0LCBzcGVlZGluZyB1cCBvZmYtbGluZSBncm93dGgKKyAgICBvZiB1bmluaXRfYmcgZmlsZSBzeXN0ZW1zLgorICAqIFJlc2l6ZTJmcyBub3cgc3VwcG9ydHMgb24tbGluZSByZXNpemluZyA2NC1iaXQgZmlsZSBzeXN0ZW1zIGJleW9uZAorICAgIDE2VEIuICBBIG51bWJlciBvZiBidWdzIGluIHJlc2l6ZTJmcyB3aGljaCBwcmV2ZW50ZWQgdGhpcyBoYXZlIGJlZW4KKyAgICBmaXhlZC4KKyAgKiBSZXNpemUyZnMgbm93IGNvcnJlY3RseSBoYW5kbGVzIHJlc2l6aW5nIDMyLWJpdCBmaWxlIHN5c3RlbXMgdG8gMTZUQi4KKyAgKiBGaXhlZCBhIHBvdGVudGlhbCBzZWdmYXVsdCBpbiBlMmZzY2sgd2hlbiB0aGVyZSBpcyBhbiBJL08gZXJyb3IKKyAgICB3aGlsZSByZWFkaW5nIHRoZSBzdXBlcmJsb2NrLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIEZyaSwgMjEgU2VwIDIwMTIgMTI6MTQ6NDEgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjUtMS4xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5vbi1tYWludGFpbmVyIHVwbG9hZC4KKyAgKiBlMmZzY2stc3RhdGljLCBlMmZzcHJvZ3M6IGxldCBwcmVpbnN0IHJlbW92ZSBhIHN5bWJvbGljIGxpbmsgaW4KKyAgICAvdXNyL3NoYXJlL2RvYywgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBkaXJlY3Rvcnkgc2luY2UKKyAgICAxLjM5KzEuNDAtV0lQLTIwMDYuMTAuMDIrZGZzZy0xLiAoQ2xvc2VzOiAjNjk4ODc5KS4KKworIC0tIE5pY29sYXMgQm91bGVuZ3VleiA8bmljb2xhc0BkZWJpYW4ub3JnPiAgRnJpLCAyMiBGZWIgMjAxMyAyMzoxNDo1OSArMDEwMAorCitlMmZzcHJvZ3MgKDEuNDIuNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTWFyayB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYXMgTXVsdGktQXJjaDogZm9yZWlnbiwgc28gaWYgYSBwYWNrYWdlCisgICAgZm9vOmkzODYgZGVwZW5kcyBvbiBlMmZzcHJvZ3MgYW5kIGlzIGluc3RhbGxlZCBvbiBhbiBhbWQ2NCBzeXN0ZW0sCisgICAgdGhlIG5hdGl2ZSBlMmZzcHJvZ3Mgd2lsbCBzYXRpc2Z5IHRoZSBkZXBlbmRlbmN5LiAgKENsb3NlczogIzY3ODM5NSkKKyAgKiBGaXggYSBmZCBsZWFrIHdoaWNoIGNvdWxkIGNhdXNlIGxvZ3NhdmUgKGFuZCBoZW5jZSBhIGJvb3QtdGltZSByYworICAgIGluaXQgc2NyaXB0KSB0byBoYW5nIChDbG9zZXM6ICM2ODI1OTIpCisgICogRml4IGEgcHJvYmxlbSBpZiBlMmZzY2sgd2hlcmUgaWYgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZAorICAgIHJlYWQtb25seSwgZTJmc2NrIHdvdWxkIG5vdCBjbGVhciBhbiBlcnJvciBpbmRpY2F0aW9uIGluIHRoZSBqb3VybmFsCisgICAgc3VwZXJibG9jay4gIENvbWJpbmVkIHdpdGggYSBrZXJuZWwgYnVnLCB0aGlzIHdvdWxkIGNhdXNlIHRoZSBlMmZzY2sKKyAgICB0byBjaGVjayB0aGUgZmlsZSBzeXN0ZW0gYWZ0ZXIgZXZlcnkgc2luZ2xlIGJvb3QKKyAgKiBGaXhlZCBmaWxlZnJhZyBzbyBpdCB3b3VsZCBub3Qgc2VnIGZhdWx0IG9uIHZpcnR1YWwgZmlsZXN5c3RlbXMgc3VjaAorICAgIGFzIC9wcm9jOiBlLmcuLCAiZmlsZWZyYWcgL3Byb2MvcGFydGl0aW9ucyIKKyAgKiBGaXggZmlsZWZyYWcgc28gdGhhdCBpdCBjb3JyZWN0bHkgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGV4dGVudHMKKyAgKiBGaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZWQgIm1rZTJmcyAtTiAyNTYgLXQgZXh0NCAvdG1wL2Zvby5pbWcgMjU2bSIKKyAgICB0byB3cml0ZSBibG9ja3Mgb3V0IHVudGlsIC90bXAgZmlsbGVkCisgICogRml4ZWQgYSBidWcgaW4gaG93IGUyZnNjayB3b3VsZCB1bmlxdWlmeSBkaXJlY3RvcnkgZW50cnkgbmFtZXMKKyAgKiBDaGFuZ2UgZTJmc2NrIHNvIGl0IHdpbGwgYWxsb3cgZmlsZSBzeXN0ZW1zIG1vdW50ZWQgcmVhZC1vbmx5IHRvIGJlCisgICAgY2hlY2tlZCB3aXRoIHRoZSAtZiBvcHRpb24uCisgICogRml4IGUyZnNjayBzbyB0aGF0IHRoZSBmaWxlIHN5c3RlbSBpcyBtYXJrZWQgYXMgY29udGFpbmluZyBhbgorICAgIGVycm9yIGlmIHRoZSB1c2VyIGNob29zZXMgbm90IHRvIGZpeCB0aGUgcXVvdGEgdXNhZ2UgaW5mb3JtYXRpb24uCisgICogRml4IHR1bmUyZnMgc28gdGhhdCBpdCBjb3JyZWN0bHkgcmVtb3ZlcyB0aGUgcXVvdGEgZmVhdHVyZSB3aGVuCisgICAgdGhlIGxhc3QgcXVvdGEgaW5vZGUgaXMgcmVtb3ZlZC4KKyAgKiBGaXggdHVuZTJmcyBzbyB0aGF0IGFmdGVyIHJlbW92aW5nIGEgcXVvdGEgaW5vZGUsIHRoZSBibG9jayBiaXRtYXAKKyAgICBpcyB1cGRhdGVkOyBvdGhlcndpc2UsIGUyZnNjayB3b3VsZCBjb21wbGFpbiBhZnRlciBydW5uaW5nICd0dW5lMmZzCisgICAgLU8gXnF1b3RhIDxkZXY+Jy4KKyAgKiBGaXggdHVuZTJmcyBzbyB0aGF0IHdoZW4gY29udmVydGluZyBhIGZpbGUgc3lzdGVtIGZyb20gdXNpbmcgbGVnYWN5CisgICAgcXVvdGEgZmlsZXMgdG8gdGhlIG5ldyBxdW90YSBmaWxlIHN5c3RlbSBmZWF0dXJlIHdpdGggaGlkZGVuIHF1b3RhCisgICAgZmlsZXMsIHRoZSBhY2NvdW50aW5nIGZvciB0aGVzZSBmaWxlcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBzbyB0aGF0CisgICAgZTJmc2NrIGRvZXNuJ3QgY29tcGxhaW4uCisgICogVGhlIGU0ZGVmcmFnIHByb2dyYW0gbm93IGFsbG93cyBkZXZpY2Ugc3ltbGlua3MsIHN1Y2ggYXMKKyAgICAvZGV2L21hcHBlci90ZXN0dmctdGVzdGx2LCBpbnN0ZWFkIG9mIGluc2lzdGluZyBvbiBsZXNzCisgICAgaHVtYW4tZnJpZW5kbHkgbmFtZXMgc3VjaCBhcyAvZGV2L2RtLTIKKyAgKiBVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzICAoQ2xvc2VzOiAjNjgwMTE0KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMjkgSnVsIDIwMTIgMTk6NTk6NTYgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjQtMykgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBBZGQgdGhlIC1DIG9wdGlvbiB0byBjaGF0dHIncyB1c2FnZSBtZXNzYWdlCisgICogRml4IGUyZnNwcm9ncyBzbyBpdCBpcyBibGhjIChidWlsZCBsb2cgaGFyZGVuaW5nIGNoZWNrKSBjbGVhbi4gIFRoaXMKKyAgICBmaXhlZCBlMmZzY2suc3RhdGljIHdoaWNoIHByZXZpb3VzbHkgd2FzIG5vdCBnZXR0aW5nIGJ1aWx0IHdpdGggdGhlCisgICAgc2VjdXJpdHkgaGFyZGVuaW5nIGZsYWdzLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMTMgSnVuIDIwMTIgMTY6MDM6MjQgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjQtMikgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBGaXggRlRCRlMgcHJvYmxlbSBvbiB0aGUgaHVyZCBhbmQgZnJlZWJzZCBwbGF0Zm9ybXMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDEyIEp1biAyMDEyIDE4OjI2OjQwIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mi40LTEpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBGaXggNjQtYml0IGJsb2NrIG51bWJlciBidWdzIGluIGUyZnNjaywgZHVtcGUyZnMsIGFuZCBkZWJ1Z2ZzIHdoaWNoCisgICAgY291bGQgY29ycnVwdCBmaWxlIHN5c3RlbXMKKyAgKiBGaXhlZCBlMmZzY2sncyBoYW5kbGluZyBvZiBob3cgZXJyb3JzIHByb3BhZ2F0ZSBmcm9tIHRoZSBqb3VybmFsIHRvCisgICAgdGhlIGZpbGUgc3lzdGVtIHN1cGVyYmxvY2sKKyAgKiBGaXhlZCBhIGZhbHNlIHBvc2l0aXZlIGNvbXBsYWludCBmcm9tIGUyZnNjayBpZiBhbGwgb2YgdGhlIGV4dGVudHMKKyAgICBpbiB0aGUgbGFzdCBleHRlbnQgYmxvY2sgYXJlIHVuaW5pdGlhbGl6ZWQgYW5kIGxvY2F0ZWQgYWZ0ZXIgdGhlCisgICAgZW5kIG9mIHRoZSBmaWxlLgorICAqIGR1bXBlMmZzIHdpbGwgZGlzcGxheSB0aGUgam91cm5hbCdzIGVycm9yIGluZGljYXRvciBpbiB0aGUKKyAgICBzdXBlcmJsb2NrIGlmIGl0IGlzIHNldAorICAqIEZpeGVkIGEgIGJ1ZyB3aGljaCBjYXVzZWQgZTJmc2NrIHRvIGluY29ycmVjdGx5IHVzZSBPX0VYQ0xVU0lWRSBpbgorICAgIHNvbWUgY29ybmVyIGNhc2VzLgorICAqIEZpeCB0cnVuY2F0aW9uIG9mIGV4dGVudC1tYXBwZWQgaW5vZGVzIGluIGUyZnNjayBhbmQgbGliZXh0MmZzCisgICogRml4ZWQgaV9ibG9ja3MgYWNjb3VudGluZyBpbiBiaWdhbGxvYyBmaWxlIHN5c3RlbXMuCisgICogQWRkIHN1cHBvcnQgZm9yIGJ0cmZzJ3MgTm9fQ09XIGZsYWcgdG8gbHNhdHRyIGFuZCBjaGF0dHIKKyAgKiBEZWJ1Z2ZzIGludGVycHJldHMgdGhlIGRhdGUgc3RyaW5ncyBvZiB0aGUgZm9ybSAiQGRkZCIgYXMgZGRkCisgICAgc2Vjb25kcyBhZnRlciB0aGUgZXBvY2gKKyAgKiBVcGRhdGVkL2ZpeGVkIHZhcmlvdXMgbWFuIHBhZ2VzICAoQ2xvc2VzOiAjNjc0NDUzLCAjNjc0Njk0KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMTIgSnVuIDIwMTIgMTg6MjA6NTUgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyLjMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gdmVyc2lvbgorICAqIEZpeCBidWdzIG9uIDMyLWJpdCBzeXN0ZW1zIHdoaWNoIGNvdWxkIGNvcnJ1cHQgPiAxNlRCIGZpbGUgc3lzdGVtcworICAqIFF1aWV0IGNvbXBsYWludHMgaW4gZTJmc2NrIHdoZW4gdGhlIHRvdGFsIGZyZWUgYmxvY2tzIG9yIGlub2RlcyBhcmUKKyAgICBpbmNvcnJlY3QgaW4gdGhlIHN1cGVyYmxvY2sgYWZ0ZXIgYW4gc3lzdGVtIGNyYXNoLCBzaW5jZSB3ZSBkb24ndAorICAgIHVwZGF0ZSBub3IgZGVwZW5kIG9uIHRoZSBzdXBlcmJsb2NrIHN1bW1hcmllcyBhdCBlYWNoIGNvbW1pdCBib3VuZGFyeQorICAqIEZpeGVkIHN1cHBvcnQgZm9yIChoaWRkZW4pIHF1b3RhIGZpbGVzIGJ1aWx0IGludG8gZXh0NDsgaW4KKyAgICBwYXJ0aWN1bGFyLCBkb24ndCByZXdyaXRlIHRoZSBxdW90YSBpbm9kZSB1bmxlc3MgdGhlIHF1b3RhcyBhcmUKKyAgICBpbmNvbnNpc3RlbnQKKyAgKiBPcHRpbWl6ZWQgcmVhZGluZyBhbmQgd3JpdGluZyBiaXRtYXBzIGlmIGRpcmVjdCBJL08gd2FzIGVuYWJsZWQKKyAgKiBVcGRhdGUgQ3plY2gsIER1dGNoLCBGcmVuY2gsIEdlcm1hbiwgUG9saXNoLCBTd2VlZGlzaCwgYW5kCisgICAgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMKKyAgKiBGaXhlZCBpbmNvcnJlY3QgaW5kZW50YXRpb24gaW4gdHVuZTJmcyBtYW4gcGFnZQorICAqIFVwZGF0ZSBkZWJpYW4gcG9saWN5IGNvbXBsaWFuY2UgdG8gMy45LjMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDE0IE1heSAyMDEyIDE0OjQzOjA5IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mi4yLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4ZWQgZTJmc2NrLmNvbmYncyBtYW4gcGFnZSAoQ2xvc2VzOiAjNjQ2OTYzKQorICAqIEZpeGVkIDMyLWJpdCBiaW5hcnkgY29tcGF0aWJpbGl0eSBwcm9ibGVtIGZvciB0aGUgbGliZXh0MmZzIHNoYXJlZAorICAgIGxpYnJhcnkgaW50cm9kdWNlZCBpbiAxLjQyLjIKKyAgKiBta2UyZnMgd2lsbCBubyBsb25nZXIgZmFpbCBpZiB0aGUgL2V0Yy9tdGFiIGZpbGUgaXMgbm90IHByZXNlbnQKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDA5IEFwciAyMDEyIDE0OjU0OjMzIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mi4yLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24KKyAgKiBGaXhlZCB2YXJpb3VzIG1hbiBwYWdlcyAoQ2xvc2VzOiAjNjY1NDI3KQorICAqIFNwZWVkIHVwIHJlc2l6ZTJmcyBmb3IgbGFyZ2UgZmlsZSBzeXN0ZW1zIChDbG9zZXM6ICM2NjMyMzcpCisgICogQmUgbGVzcyBzdHJpY3QgYWJvdXQgdGhlIEVYVDRfRU9GQkxPQ0tTX0ZMIGZsYWcgKHdoaWNoIHdpbGwKKyAgICBldmVudHVhbGx5IGJlIGdvaW5nIGF3YXkgaW4gdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZm9ybWF0KQorICAqIFRlYWNoIG1rZTJmcyB0byB1c2UgZGlyZWN0IEkvTyBpZiB0aGUgLUQgb3B0aW9uIGlzIGdpdmVuCisgICogUHJpbnQgZXJyb3JzIHJldHVybmVkIGJ5IGV4dDJmc19vcGVuMigpIGFuZCBleHQyZnNfY2hlY2tfZGVzYygpIHNvCisgICAgd2UgY2FuIG1vcmUgZWFzaWx5IGRpYWdub3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGNhdXNlZCBieQorICAgIGluc3VmZmljaWVudCBtZW1vcnkgYW5kIGFib3J0IG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzCisgICogRTJmc2NrIGNhbiBub3cgd3JpdGUgbG9nIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlCisgICAgcHJvYmxlbXMgdGhhdCB3ZXJlIGZvdW5kIGFuZCBmaXhlZCBkaXJlY3RseS4KKyAgKiBFMmZzY2sgY2FuIG5vdyBsaW1pdCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGlzc3VlZCBhbmQgcHJpbnRlZCBvbgorICAgIHRoZSBjb25zb2xlCisgICogVGhlIGR1bXBlMmZzLCBkZWJ1Z2ZzLCBhbmQgdHVuZTJmcyBub3cgdXNlIHJidHJlZSBiaXRtYXBzLCB3aGljaAorICAgIGNhdXNlIHRoZW0gdG8gdXNlIG11Y2ggbGVzcyBtZW1vcnkgZm9yIGxhcmdlIGZpbGUgc3lzdGVtcy4KKyAgKiBFMmZzY2sgd2lsbCBub3cgY2hlY2sgZm9yIHplcm8tbGVuZ3RoIGV4dGVudHMsIHNpbmNlIG9sZGVyIGtlcm5lbHMgd2lsbAorICAgIE9PUFMgaWYgdGhleSBjb21lcyBhY3Jvc3Mgb25lCisgICogRml4IGUyZnNjaydzIGRpc2NhcmQgYmVoYXZpb3VyIHNvIGl0IGRvZXMgbm90IGRpc2NhcmQgdG9vIG1hbnkKKyAgICBibG9ja3MsIGFuZCBpdCB3aWxsIG5vdCB1c2UgZGlzY2FyZCBpZiB0aGUgZGV2aWNlIGFkdmVydGlzZXMKKyAgICB0aGF0IGRpc2NhcmQgZG9lcyBub3QgcGVyc2lzdGVudGx5IHplcm8gZGF0YS4gIEFsc28sIGlmIGUyZnNjayBpcworICAgIHJ1biBpbiByZWFkLW9ubHkgbW9kZSwgZG8gbm90IHRyeSB0byBkaXNjYXJkIGRhdGEuCisgICogRml4IG1rZTJmcyAtUyBzbyBpdCBkb2VzIG5vdCBjb3JydXB0IHRoZSBmaXJzdCBibG9jayBncm91cCdzCisgICAgaW5mb3JtYXRpb24uCisgICogQWRkIHBvaW50ZXIgZm9yIGUyZnNwcm9ncy11ZGViIHRvIGxpYmNvbWVycjIuc2hsaWJzIChDbG9zZXM6ICM2NjU4ODUpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAyNyBNYXIgMjAxMiAxNTo1NTo1NyAtMDcwMAorCitlMmZzcHJvZ3MgKDEuNDIuMS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCB0aGUgZmFjdCB0aGF0IGRwa2ctYnVpbGRmbGFncyB3YXMgYmVpbmcgaWdub3JlZCBkdWUgdG8gYQorICAgIGJhc2gnaXNtIGluIGRlYmlhbi9ydWxlcy4KKyAgKiBDaGVjayB0aGUgbmV3IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0FDL29ubGluZSBzaW5jZQorICAgIC9wcm9jL2FjcGkvYWNfYWRhcHRlci8uLi4gaXMgZGVwcmVjYXRlZCBhbmQgbWF5IG5vdCBiZSBwcmVzZW50IG9uCisgICAgbmV3ZXIga2VybmVscy4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDIwIEZlYiAyMDEyIDE5OjEyOjIwIC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi4xLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBkcGtnLWJ1aWxkZmxhZ3MgaXMgbm93IHVzZWQgaWYgaXQgaXMgcHJlc2VudC4gIFRoaXMgYWxsb3dzIERlYmlhbgorICAgIFdoZWV6eSB0byBidWlsZCB3aXRoIHNlY3VyaXR5IGhhcmRlbmVkIGJ1aWxkIGZsYWdzLiAgKENsb3NlczogIzY1NDQ1NykKKyAgKiBta2UyZnMgYW5kIGUyZnNjayBub3cgdXNlIG11Y2ggbGVzcyBtZW1vcnkgZm9yIGxhcmdlIGZpbGUgc3lzdGVtcworICAqIEZpeGVkIG1rZTJmcyAtUyBzbyBpdCBjYW4gYmUgdXNlZnVsbHkgdXNlZCBhcyBhIGxhc3QgZGl0Y2ggcmVjb3ZlcnkKKyAgICBjb21tYW5kIHdoZW4gZm9yIGV4dDQgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBlbmFibGVkLgorICAqIFRoZSBta2U0ZnMgYXJndlswXSBpcyBub3cgcmVjb2duaXplZCBieSBta2UyZnMuCisgICogRml4ZWQgdXNhZ2UgYW5kIGhlbHAgbWVzc2FnZXMgZm9yIG1rZTJmcy4KKyAgKiBFbGltaW5hdGVkIHNwdXJpb3VzIGJhZCBibG9jayBncm91cCBjaGVja3N1bSB3YXJuaW5ncyB3aGVuIGUyZnNjaworICAgIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGJhY2t1cCBncm91cCBkZXNjcmlwdG9ycy4KKyAgKiBEZWJ1Z2ZzJ3MgbmNoZWNrIGNvbW1hbmQgaXMgbm93IG11Y2ggbW9yZSB1c2VmdWwgd2hlbiB1c2VkIHRvCisgICAgZGlhZ25vc2UgYmFkbHkgY29ycnVwdGVkIGZpbGUgc3lzdGVtLiAgQWRkZWQgYSBuZXcgLWMgb3B0aW9uLgorICAqIEZpeGVkIGJ1ZyBpbiBlMmltYWdlIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGZhaWwgdG8gc2V0IGlfc2l6ZQorICAgIGNvcnJlY3RseSBpZiB0aGUgbGFzdCBob2xlIGluIHRoZSBmaWxlIGlzIGFuIGV4YWN0IG11bHRpcGxlIG9mIGEKKyAgICBtZWdhYnl0ZS4KKyAgKiBGaXhlZCBhIGJ1ZyB3aXRoIHJlc2l6ZTJmcyB3aGVyZSBmb3IgMWsgYW5kIDJrIGZpbGUgc3lzdGVtcywgdGhlCisgICAgbWluaW11bSBmaWxlIHNpemUgdXNlZCBmb3IgcmVzaXplMmZzIC1NIGNvdWxkIGJlIGEgYmxvY2sgdG9vIHNtYWxsLgorICAqIEZpeGVkIHRoZSBiYWRibG9ja3MgcHJvZ3JhbSB0byBob25vciB0aGUgLXMgZmxhZyB3aGVuIGluIHJlYWQtb25seSAtdAorICAgIG1vZGUuICAoQ2xvc2VzOiAjNjQ2NjI5KQorICAqIFVwZGF0ZSBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgUG9saXNoLCBhbmQgU3dlZGlzaCB0cmFuc2xhdGlvbnMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDE3IEZlYiAyMDEyIDE1OjA3OjEzIC0wNTAwCisKK2UyZnNwcm9ncyAoMS40Mi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRml4ZWQgaHVyZCBGVEJGUyAoQ2xvc2VzOiAjNjQ5Njg5KQorICAqIE9wdGltaXplZCBlMmZzY2sgc3BlZWQgb24gbGFyZ2UgZmlsZSBzeXN0ZW1zIHdoZW4gdXNpbmcgW3NjcmF0Y2hfZmlsZXNdCisgICogRml4ZWQgZTJmc2NrIGhhbmRsaW5nIG9mIGJsb2NrcyBjbGFpbWVkIGJ5IG11bHRpcGxlIGlub2RlcyBpbgorICAgIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcworICAqIEZpeGVkIGUyZnNjaydzIGNhbGN1bGF0aW9uIG9mIG1heCBmaWxlIHNpemUgZm9yIG5vbi1leHRlbnQgYmFzZWQKKyAgICBmaWxlcyB3aGVuIGh1Z2VfZmlsZSBpcyBlbmFibGVkCisgICogVXBkYXRlIEN6ZWNoIGFuZCBTd2VkaXNoIHRyYW5zbGF0aW9ucworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMjkgTm92IDIwMTEgMTU6NTA6MDcgLTA1MDAKKworZTJmc3Byb2dzICgxLjQyfldJUC0yMDExLTExLTIwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBGaXggZXJyb3IgY2hlY2tpbmcgc28gcmVzaXplMmZzIHdvcmtzIHdoZW4gdXNpbmcgYSAzMi1iaXQgdXNlcnNwYWNlCisgICAgYW5kIGEgNjQtYml0IGtlcm5lbCAoQ2xvc2VzOiAjNjQ0OTg5KQorICAqIGUyZnNjayBub3cgcmV0dXJucyBhZGRpdGlvbmFsIHN0YXR1cyBiaXRzIGluIGl0cyBleGl0IGNvZGUgaWYgaXQKKyAgICBhYm9ydHMgZWFybHkgaW4gdGhlIGUyZnNjayBydW4KKyAgKiBGaXggcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IGluIGRlYnVnZnMKKyAgKiBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGluIGV4dDJmc19maW5kX2Jsb2NrX2RldmljZSgpIGlmIHRoZXJlIGFyZQorICAgIHN5bWxpbmsgbG9vcHMgaW4gL2RldiBjYXVzZWQgYnkgYSBidWdneSB1ZGV2CisgICogRml4IHRlc3QgZmFpbHVyZXMgb24gYmlnLWVuZGlhbiBzeXN0ZW1zCisgICogRml4IGdjYyAtV2FsbCBjb21wbGFpbnRzCisgICogQWRkIGZyZWVmcmFnIGFuZCBlMmZyZWVmcmFnIGNvbW1hbmRzIHRvIGRlYnVnZnMKKyAgKiBBZGQgYSByZWFkLW9ubHksIG1ldGFkYXRhLW9ubHkgZGVidWdmcyBjb21tYW5kIGNhbGxlZCByZGVidWdmcworICAqIEltcHJvdmUgZmlyc3QtY2xhc3MgcXVvdGEgc3VwcG9ydAorICAqIEZpeCBiaWdhbGxvYyBzdXBwb3J0IGluIGUyZnJlZWZyYWcKKyAgKiBDbGVhbiB1cCBtbXAgaGFuZGxpbmcKKyAgKiBGaXggYSByZWdyZXNzaW9uIHdoaWNoIGNhdXNlZCBta2UyZnMgdG8gbm90IHdvcmsgY29ycmVjdGx5IG9uIGZpbGVzCisgICAgPiAyR0IuICAoQ2xvc2VzOiAjNjQ3MjQ1KQorICAqIEZpeCBhIG5hbWVzcGFjZSBsZWFrIGluIGxpYmV4dDJmcyAodGRiX251bGwpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAyMCBOb3YgMjAxMSAyMTozMjo0OSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDJ+V0lQLTIwMTEtMTAtMTYtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeCBvbmxpbmUgcmVzaXppbmcgd2l0aCByZXNpemUyZnMgKENsb3NlczogIzY0NDk4OSkKKyAgKiBGaXggYnVnIHdoaWNoIGNhdXNlZCBzaHJpbmtpbmcgYW4gZW1wdHkgZmlsZSBzeXN0ZW0gZmlsZSBzeXN0ZW0gdG8KKyAgICBpdHMgbWluaW1hbCBzaXplIHRvIHNvbWV0aW1lcyBmYWlsLgorICAqIERvbid0IGxvb2sgYXQgdGhlIGhpZ2ggMTYgYml0cyBvZiBpX2ZpbGVfYWNsIGlmIHRoZSA2NC1iaXQgZmVhdHVyZQorICAgIGlzIG5vdCBlbmFibGVkOyB0aGlzIGZpeGVzIGEgSHVyZCBjb21wYXRpYmlsaXR5IGZpZWxkIHNpbmNlIHRoaXMgaXMKKyAgICB1c2VkIGZvciB0aGUgaGlnaCAxNiBiaXRzIG9mIGlfbW9kZSBvbiBIdXJkLgorICAqIFVwZGF0ZSBTd2VlZGlzaCwgUG9saXNoLCBGcmVuY2gsIEdlcm1hbiwgYW5kIEN6ZWNoIHRyYW5zbGF0aW9ucworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTYgT2N0IDIwMTEgMjI6MDc6MDMgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyfldJUC0yMDExLTEwLTA5LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBGaXhlZCBpbmZpbml0ZSBsb29wIGluIGZpbGVmcmFnIChDbG9zZXM6ICM2NDQ3OTIpCisgICogRml4ZWQgdmFyaW91cyBzcGVsbGluZyBhbmQgdHJhbnNsYXRpb24gcHJvYmxlbXMKKyAgKiBGaXhlZCB2YXJpb3VzIG1hbiBwYWdlcworICAqIEZpeGVkIDY0LWJpdCBibG9jayBudW1iZXJzIGluIGUyZnNjaydzIGpvdXJuYWwgcmVwbGF5CisgICogRml4ZWQgbWlwc2VsIEZUQkZTIHRoYXQgd2FzIGZpeGVkIGZvciBtaXBzCisgICogVXBkYXRlIFN3ZWVkaXNoLCBGcmVuY2gsIGFuZCBDemVjaCB0cmFuc2xhdGlvbnMKKyAgKiBDb252ZXJ0IHRvIGRlYmlhbiBzb3VyY2UgMy4wIChxdWlsdCkgZm9ybWF0CisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAwOSBPY3QgMjAxMSAyMjoyNDozMSAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDJ+V0lQLTIwMTEtMTAtMDUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggcG9ydGFiaWxpdHkgaXNzdWVzIHdpdGggbm9uLUxpbnV4IHBsYXRmb3JtcyBhbmQgZm9yIHRoZSBtaXBzCisgICAgcGxhdGZvcm0sIHdoaWNoIGRvZXMgc29tZSByZWFsbHkgc3RyYW5nZSB0aGluZ3MgdmlzLWEtdmlzCisgICAgMzIvNjQtYml0IHN1cHBvcnQgd2l0aG91dCBhY3R1YWxseSBoYXZpbmcgYSA2NC1iaXQgdmVyc2lvbiBvZgorICAgIHRoZSBhcmNoaXRlY3R1cmUgKENsb3NlczogIzY0NDUwMikKKyAgKiBGaXggZGVwZW5kZW5jeSBwcm9ibGVtIHdoaWNoIGNhdXNlcyB0aGUgbmV3ZXIgdmVyc2lvbiBvZiBsaWJjb21fZXJyMgorICAgIHRvIGdldCBwdWxsZWQgaW4gd2hlbiB1cGdyYWRpbmcgdG8gZTJmc3Byb2dzLCB3aGljaCBuZWVkcyB0aGUgbmV3CisgICAgaW50ZXJmYWNlIGV4cG9ydGVkIGJ5IGxpYmNvbV9lcnIyLiAgKENsb3NlczogIzY0NDQyNSwgIzY0NDU4NCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDA3IE9jdCAyMDExIDE4OjI3OjA2IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mn5XSVAtMjAxMS0xMC0wNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFVwZGF0ZSB0cmFuc2xhdGlvbnM6IEdlcm1hbiAoQ2xvc2VzOiAjNTIwOTg1KQorICAqIEZpeGVkIHVzYWdlIGFuZCBlcnJvciB0ZXh0IGZvciBta2UyZnMgLUMgb3B0aW9uCisgICogVXBkYXRlZCBlMmZzcHJvZ3MucG90IGZpbGUgZm9yIHRyYW5zbGF0b3JzCisgICogQWRkZWQgc3VwcG9ydCBmb3IgaW50ZXJuYXRpb25hbGl6ZWQgZXJyb3Igc3RyaW5ncyBmb3IgbGliY29tX2VycgorICAqIEZpeGVkIHZhcmlvdXMgcG9ydGFiaWxpdHkgbml0cyB0aGF0IHdlcmUgY2F1c2luZyBGVEJGUyBwcm9ibGVtcyBvbgorICAgIEh1cmQgYW5kIEZyZWVCU0QKKyAgKiBBZGRlZCAiYmlnIiBhbmQgImh1Z2UiIHR5cGVzIHRvIG1rZTJmcy5jb25mLCBzaW5jZSB0aGV5IGFyZSBuZWVkZWQKKyAgICBmb3IgdmVyeSBsYXJnZSBmaWxlIHN5c3RlbXMKKyAgKiBGaXhlZCBvbi1saW5lIHJlc2l6aW5nIHdoaWNoIGhhZCBiZWVuIGJyb2tlbiBpbiB0aGUgMS40MiBzZXJpZXMKKyAgICAoQ2xvc2VzOiAjNDUxMzg4KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMDUgT2N0IDIwMTEgMDI6MTA6NTMgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyfldJUC0yMDExLTEwLTAxLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVXBkYXRlIHRyYW5zbGF0aW9uczogRnJlbmNoLCBHZXJtYW4gKENsb3NlczogIzYyMDY1OSkKKyAgKiBGaXggY29tcGlsYXRpb24gcHJvYmxlbXMgaW4gaGVybWV0aWMgZW52aXJvbm1lbnRzCisgICogRml4IG9uLWxpbmUgcmVzaXppbmcgaW4gcmVzaXplMmZzIChDbG9zZXM6ICM0NTEzODgpCisgICogQWRkIGRlZmluaXRpb25zIGZvciAiYmlnIiBhbmQgImh1Z2UiIGZpbGVzeXN0ZW1zIHRvIC9ldGMvbWtlMmZzLmNvbmYKKyAgKiBGaXggbWtlMmZzIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiAyKiozMiBibG9jayBncm91cHMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDA0IE9jdCAyMDExIDAwOjA0OjI1IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mn5XSVAtMjAxMS0xMC0wMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogQXZvaWQgdW5uZWNlc3NhcnkgcmVib290cyB3aGVuIGNoZWNraW5nIHRoZSByb290IGZzIGluIHNvbWUgc3BlY2lhbCBjYXNlcworICAqIEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIGZpbGVmcmFnIC12J3Mgb3V0cHV0CisgICogTWFrZSBmaWxlZnJhZyBkaXNwbGF5IHRoZSBudW1iZXIgb2YgY29udGlndW91cyAobm90IHBoeXNpY2FsKQorICAgICAgZXh0ZW50cyAoQ2xvc2VzOiAjNjMxNDk4KQorICAqIENsYXJpZnkgdGhlIG1rZTJmcy5jb25mLjUgbWFuIHBhZ2UgKENsb3NlczogIzYzNDg4MykKKyAgKiBBZGQgYSBodXJkLXNwZWNpZmljIG1rZTJmcy5jb25mIGZpbGUgKENsb3NlczogIzYyOTM1NSkKKyAgKiBta2UyZnMgd2lsbCBzZXQgc19tYXhfbW50X2NvdW50IHRvIC0xIGluc3RlYWQgb2YgMCBieSBkZWZhdWx0IHRvCisgICAgICB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBwcmUtMy4wIGtlcm5lbHMgd2hpY2ggY2F1c2VkIGEgc3B1cmlvdXMKKyAgICAgIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMgbW91bnRlZCAoQ2xvc2VzOiAjNjMyNjM3KQorICAqIEZpeGVkIHBvcnRhYmlsaXR5IHByb2JsZW1zIHdoaWNoIHdhcyBjYXVzaW5nIGJ1aWxkIGZhaWx1cmVzIG9uCisgICAgICBub24tTGludXgvbm9uLXg4NiBzeXN0ZW1zLgorICAqIFZlcmlmeSB0aGF0IHRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3Mgc2FuZSBiZWZvcmUgdHJ1c3RpbmcgaXQsIHRvCisgICAgICBhdm9pZCBpdCBjYXVzaW5nIG1vcmUgaGFybSB0aGFuIGdvb2QuCisgICogRml4ZWQgdGhlIGRlYmlhbi9ydWxlcyBmaWxlIHNvIHRoYXQgaXQgYnVpbGQgc3VjY2Vzc2Z1bGx5IGlmCisgICAgICBERUJfQlVJTERfT1BUSU9OUyBjb250YWlucyAibm9zdHJpcCIgKENsb3NlczogIzYyNzUzNSkKKyAgKiBGaXhlZCBzb21lIGJpZy1lbmRpYW4gYnVncyBpbiB0aGUgTU1QIGNvZGUKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDMwIFNlcCAyMDExIDIyOjMzOjQxIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40Mn5XSVAtMjAxMS0wOS0yNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRml4IEZUQkZTIG9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcyAoQ2xvc2VzOiAjNjQxODM4KQorICAqIEFkZCBzdXBwb3J0IGZvciBtdWx0aWFyY2ggKENsb3NlczogIzYzMjE2OSkKKyAgKiBDbGFyaWZ5IGFuZCB1cGRhdGUgZGViaWFuL2NvcHlyaWdodCBmaWxlIChDbG9zZXM6ICM2MTQ2NjIpCisgICogQWRkIHN1cHBvcnQgZm9yIE11bHRpLU1vdW50IFByb3RlY3Rpb24gKE1NUCkKKyAgKiBBbGxvdyB0dW5lMmZzIHRvIHJlbW92ZSB0aGUgZXh0ZXJuYWwgam91cm5hbCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBmb3VuZAorICAqIFVwZGF0ZWQvY2xhcmlmaWVkIG1hbiBwYWdlcyAoQ2xvc2VzOiAjNjQyMTkzKQorICAqIEZpeCBhIHBvdGVudGlhbCBGVEJGUyBjYXVzZWQgYnkgb3Zlcmx5IGxvbmcgY29tcGlsZSBsaW5lcyAoQ2xvc2VzOiAjNjI5ODgzKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMjUgU2VwIDIwMTEgMDE6Mjg6MzQgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyfldJUC0yMDExLTA5LTE2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBxdW90YSBmZWF0dXJlCisgICogSW1wcm92ZWQgNjQtYml0IGFuZCBiaWdhbGxvYyBzdXBwb3J0CisgICogTWtlMmZzIGFuZCB0dW5lMmZzIG5vdyBhbGxvd3Mgc2V0dGluZyB0aGUgc3RyaWRlIGFuZCBzdHJpcGUgd2lkdGggdG8gemVybworICAqIEZpeGVkIHR1bmUyZnMncyBtb3VudCBvcHRpb25zIHBhcnNpbmcgIChDbG9zZXM6ICM2NDE2NjcpCisgICogRml4ZWQgYW4gQUJJIGNvbXBhdGliaWxpdHkgcHJvYmxlbSB3aGljaCBicm9rZSB0aGUgZHVtcCBwcm9ncmFtCisgICAgICAoQ2xvc2VzOiAjNjM2NDE4KQorICAqIFJlc2l6ZTJmcyBoYXMgZm9yd2FyZCBjb21wYXRpYmlsaXR5IGZvciBhIG5ldyBvbi1saW5lIHJlc2l6ZSBpb2N0bAorICAgICAgZm9yID4gMTZUQiBmaWxlIHN5c3RlbXMuCisgICogRml4ZWQgYSAodmVyeSBoYXJkIHRvIGhpdCkgYnVnIHRoYXQgY291bGQgY2F1c2UgZTJmc2NrIHRvIGNyYXNoIGluCisgICAgICAgcGFzcyAxIG9yIHBhc3MgMgorICAqIERlYnVnZnMgaGFzIGEgbmV3ICdibG9ja3MnIGNvbW1hbmQKKyAgKiBNa2UyZnMgbm93IGdpdmVzIGEgd2FybmluZyBpZiB0aGUgYXV0by1kZXRlY3RlZCBibG9jayBzaXplIGV4Y2VlZHMKKyAgICAgIHRoZSBwYWdlIHNpemUKKyAgKiBNa2UyZnMgYW5kIGUyZnNjayBub3cgdHJpZXMgdG8gdXNlIHRoZSBwdW5jaCBob2xlIGNvbW1hbmQgYXMgYQorICAgICAgImRpc2NhcmQiIHdoZW4gb3BlcmF0aW5nIG9uIG5vcm1hbCBmaWxlcworICAqIE1rZTJmcyB3aWxsIG5vdCB0cnkgdG8gZG8gYW55IGRpc2NhcmQgb3BlcmF0aW9ucyBpZiAtbiBpcyBzcGVjaWZpZWQKKyAgICAgIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgKiBVcGRhdGVkL2NsYXJpZmllZCBtYW4gcGFnZXMgKENsb3NlczogIzYzOTQxMSkKKyAgKiBGaXhlZCBwYXJzaW5nIG9mIE1OVE9QVF8gb3B0aW9ucyBmb3IgdHVuZTJmcyBhbmQgZGVidWdmcyAoQ2xvc2VzOiAjNjQxNjY3KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIEZyaSwgMTYgU2VwIDIwMTEgMTA6MzM6NTkgLTA0MDAKKworZTJmc3Byb2dzICgxLjQyfldJUC0yMDExLTA3LTAyLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBBZGQgc3VwcG9ydCBmb3IgNjQtYml0IGZpbGUgc3lzdGVtcworICAqIEFkZCBzdXBwb3J0IGZvciBiaWdhbGxvYyBmaWxlIHN5c3RlbXMKKyAgKiBGaXhlZCBhbiBlMmZzY2sgYnVnIHdoaWNoIGNhdXNlZCAiKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioiCisgICAgICB3aXRob3V0IGFuIGV4cGxhbmF0aW9uIG9mIHdoYXQgd2FzIGZpeGVkLgorICAqIEUyZnNjayB3aWxsIG5vIGxvbmdlciBhdHRlbXB0IHRvIGNsb25lIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jaworICAgICAgaW4gcGFzczFiIGhhbmRsaW5nIGlmIHRoZSBmaWxlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuZGVkCisgICAgICBhdHRyaWJ1dGVzLgorICAqIEUyZnNjayB3aWxsIGJlIG1vcmUgY2FyZWZ1bCBhY2NpZGVudGFsbHkgYXNraW5nIHRoZSB1c2VyIHRvIGNvbnRpbnVlCisgICAgICBpZiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCwgc28gdGhhdCBhbiBlc2NhcGUgc2VxdWVuY2Ugd29uJ3QKKyAgICAgIGNhdXNlIGEgZmFsc2UgcG9zaXRpdmUuICAoQ2xvc2VzOiAjNjE5ODU5KQorICAqIEUyZnNjayBub3cgdXNlcyBsZXNzIGNwdSB0aW1lIGluIHBhc3MgNQorICAqIEUyZnNjayB3aWxsIG5vIGxvbmdlciBzZWdhdWx0IHdoZW4gYSBjb3JydXB0ZWQgZmlsZSBzeXN0ZW0gaGFzIGEgYmFkCisgICAgZXh0ZW50LCBhbmQgcmVtb3ZpbmcgaXQgbGVhZHMgdG8gYSBibG9jayBuZWVkaW5nIHRvIGJlIGRlYWxsb2NhdGVkLgorICAqIEUyZnNjayBub3cgc3VwcG9ydHMgYW4gZXh0ZW5kZWQgImRpc2NhcmQiIG9wdGlvbiB3aGljaCB3aWxsIGNhdXNlCisgICAgICBlMmZzY2sgdG8gYXR0ZW1wdCBkaXNjYXJkIGFsbCB1bnVzZWQgYmxvY2tzIGFmdGVyIGEgZnVsbCBjaGVjaworICAqIFRoZSBlMmltYWdlIHByb2dyYW0gbm93IHN1cHBvcnRzIHRoZSBxY293MiBmb3JtYXQsIGEgbW9yZSBlZmZpY2llbnQKKyAgICAgIHdheSBvZiBjYXB0dXJpbmcgZmlsZSBzeXN0ZW0gbWV0YWRhdGEgc25hcHNob3RzLgorICAqIE1rZTJmcyBub3cgc3VwcG9ydHMgdGhlIFtkZXZpY2VzXSBzdGFuemEgaW4gbWtlMmZzLmNvbmYuCisgICogTWtlMmZzIG5vdyBzdXBwb3J0cyB0aGUgcmVzZXJ2ZWRfcmF0aW8gcmVsYXRpb24gaW4gbWtlMmZzLmNvbmYuCisgICogTWtlMmZzIG5vdyBjcmVhdGVzIGV4dGVudC1tYXBwZWQgZGlyZWN0b3JpZXMgZm9yIHRoZSByb290IGFuZAorICAgICAgbG9zdCtmb3VuZCBkaXJlY3Rvcmllcy4KKyAgKiBNa2UyZnMgd2lsbCBza2lwIHplcm8naW5nIHRoZSBqb3VybmFsIGlmIHRoZSBleHRlbmRlZCBvcHRpb24KKyAgICAgICJsYXp5X2pvdXJuYWxfaW5pdCIgaXMgc3BlY2lmaWVkLgorICAqIE1rZTJmcyB3aWxsIG5vdyBjcmVhdGUgZmlsZSBzeXN0ZW1zIHRoYXQgZW5hYmxlIHVzZXIgbmFtZXNwYWNlCisgICAgICBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCB3aXRoIHRpbWUtIGFuZCBtb3VudCBjb3VudC1iYXNlZCBmaWxlCisgICAgICBzeXN0ZW0gY2hlY2tzIGRpc2FibGVkLgorICAgKiBNa2UyZnMgd2lsbCBub3Qgc2V0IGEgc3RyaWRlIG9yIHN0cmlwIHNpemUgb2Ygb25lIGJsb2NrIGJhc2VkIG9uCisgICAgICAgYmxvY2sgYmV2aWNlIGF0dHJpYnV0ZXMgb2J0YWluZWQgZnJvbSBzeXNmcy4KKyAgICogTWtlMmZzIG5vdyBkaXNwbGF5cyBhIHByb2dyZXNzIHJlcG9ydCBkdXJpbmcgdGhlIGRpc2NhcmQgcHJvY2Vzcy4KKyAgICogTWtlMmZzIG5vdyBoYW5kbGVzIGV4dHJlbWUgZmlsZSBzeXN0ZW0gcGFyYW1ldGVycyBjb3JyZWN0bHkgd2hpY2gKKyAgICAgICBwcmV2aW91c2x5IGNhdXNlZCB0aGUgaW5vZGVzIHBlciBncm91cCB0byBkcm9wIGJlbG93IDgsIGxlYWRpbmcKKyAgICAgICB0byBhIHNlZ2ZhdWx0LgorICAgKiBEZWJ1Z2ZzJ3MgaWNoZWNrIHdpbGwgbm93IGNvcnJlY3RseSBmaW5kIGlub2RlcyB3aGljaCB1c2UgdGhlCisgICAgICAgc2VhcmNoZWQtZm9yIGJsb2NrIGFzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jay4KKyAgICogRGVidWdmcyBub3cgaGFzIGEgbmV3ICJwdW5jaCIgY29tbWFuZCB3aGljaCByZW1vdmUgYmxvY2tzIGZyb20gdGhlCisgICAgICAgbWlkZGxlIG9mIGFuIGlub2RlLgorICAgKiBUaGUgYmFkYmxvY2tzIHByb2dyYW0gbm93IGNvcnJlY3RseSByZWNvdmVycyBmcm9tIEkvTyBlcnJvcnMgd2hlbgorICAgICAgIGRpcmVjdCBJL08gaXMgYmVpbmcgdXNlZC4gIFRoZSBiYWRibG9ja3MgY29tbWFuZCBub3cgYWxzbworICAgICAgIHN1cHBvcnRzIGEgLUIgb3B0aW9uIHdoaWNoIGZvcmNlcyB0aGUgdXNlIG9mIGJ1ZmZlcmVkIEkvTywgYW5kCisgICAgICAgdGhlIC12IG9wdGlvbiB3aWxsIHByb3ZpZGUgYSBtb3JlIGRldGFpbGVkIGJyZWFrZG93biBvZiByZWFkLAorICAgICAgIHdyaXRlLCBhbmQgZmFpbGVkIGNvbXBhcmlzb24gZXJyb3JzLgorICAgKiBBZGRlZCBlNGRlZnJhZyB0b29sIHdoaWNoIHVzZXMgdGhlIEVYVDRfSU9DX01PVkVfRVhUIGlvY3RsLgorICAgKiBBZGRlZCBzdXBwb3J0IGZvciBqb3VybmFscyBsYXJnZXIgdGhhbiAyR0IuCisgICAqIFN1cHBvcnQgdXNpbmcgYm90aCBoYXJkIGxpbmtzIGFuZCBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgZTJmc3Byb2dzLgorICAgKiBBZGQgb3ZlcmZsb3cgY2hlY2tpbmcgdG8gdHVuZTJmcyAtaSdzIGZzY2sgaW50ZXJ2YWwsIHdoaWNoIG11c3QgZml0CisgICAgICAgaW4gYSAzMi1iaXQgZmllbGQuCisgICAqIEZpbGVmcmFnIHdpbGwgcmVwb3J0IDAgZXh0ZW50cyBjb3JyZWN0bHkgaW4gdmVyYm9zZSBtb2RlLgorICAgKiBMb2dzYXZlJ3MgdXNhZ2UgbWVzc2FnZSBoYXMgYmVlbiBmaXhlZC4gIChDbG9zZXM6ICM2MTk3ODgpCisgICAqIFVwZGF0ZSB0cmFuc2xhdGlvbnM6IEZyZW5jaCwgQ2hpbmVzZSwgR2VybWFueSwgSW5kb25lc2lhbiwgU3dlZGlzaCwKKyAgICAgICAgVmlldG5hbWVzZSwgUG9saXNoLCBEdXRjaCwgQ3plY2guCisgICAqIFVwZGF0ZWQvY2xhcmlmaWVkIG1hbiBwYWdlcy4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDAyIEp1bCAyMDExIDIyOjM4OjU3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS4xNC0xKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeGVkIGEgRlRCRlMgb24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzCisgICogRml4ZWQgc3B1cmlvdXMgd2FybmluZyBpbiBta2UyZnMKKyAgKiByZXNpemUyZnMgbm93IHdvcmtzIGNvcnJlY3RseSBvbiBkZXZpY2VzIGV4YWN0bHkgMTZUQgorICAqIHJlc2l6ZTJmcyB3aWxsIG5vIGxvbmdlciBjbGVhciB0aGUgcmVzaXplX2lub2RlIGZlYXR1cmUgd2hlbiB0aGUKKyAgICBudW1iZXIgb2YgcmVzZXJ2ZWQgR0RUIGJsb2NrcyByZWFjaGVzIDAuICBUaGlzIGFsbG93cyBhIGZpbGUKKyAgICBzeXN0ZW0gd2l0aCB0aGUgZmxleF9iZyBmZWF0dXJlIHRvIGJlIHN1YnNlcXVlbnRseSBzaHJ1bmsuCisgICogZTJmc2NrIHdpbGwgbm8gbG9uZ2VyIHVzZSB0aGUgZXh0ZW5kZWQgcmVjX2xlbiBlbmNvZGluZyBmb3IgZmlsZQorICAgIHN5c3RlbXMgd2hvc2UgYmxvY2tzaXplIGlzIGxlc3MgdGhhbiA2NGssIHRvIGNhdGNoIGZzIGluY29uc2lzdGVuY2llcworICAgIHdoaWNoIHRoZSBrZXJuZWwgd2lsbCBjb21wbGFpbiBhYm91dC4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBXZWQsIDIyIERlYyAyMDEwIDE4OjM5OjE5IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40MS4xMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRTJmc2NrIGNhbiBub3cgZG8gam91cm5hbC1vbmx5IHJlcGxheXMgdmlhICJlMmZzY2sgLUUgam91cm5hbF9vbmx5IgorICAqIEUyZnNjayBub3cgdW5kZXJzdGFuZHMgVVVJRD0gYW5kIExBQkVMPSBzcGVjaWZpZXJzIGZvciB0aGUgLWogb3B0aW9uCisgICAgKENsb3NlczogIzU1OTMxNSkKKyAgKiBFMmZzY2suY29uZiBub3cgc3VwcG9ydHMgYSBuZXcgY29uZmlnIG9wdGlvbiwgd2hpY2ggZm9yY2VzIHRoZQorICAgIHByb2JsZW0gbm90IHRvIGJlIGZpeGVkOiBwcm9ibGVtcy88cHJvYmxlbSBjb2RlL2ZvcmNlX25vCisgICogRHVtcGUyZnMgbm93IHByaW50cyBmcmllbmRsaWVyIG9mZnNldHMgZm9yIGZsZXhfYmcgZmlsZSBzeXN0ZW1zCisgICogTWtlMmZzIHdpbGwgbm93IGZhaWwgaWYgdGhlIHVzZXIgdXNlcyBhbiBmaWxlIHN5c3RlbSB0eXBlIG5vdAorICAgIGRlZmluZWQgaW4gbWtlMmZzLmNvbmYgKENsb3NlczogIzU5NDYwOSkKKyAgKiBSZXNpemUgbm93IHByaW50cyBhIGNsYXJpZmllZCBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgdGhhdCBvbi1saW5lCisgICAgc2hyaW5raW5nIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLiAgKENsb3NlczogIzU5OTc4NikKKyAgKiBGaXhlZCBhIGJ1aWxkIGVycm9yIGNhdXNlZCBieSBiYWQgc3RhdGljIGFuZCBwcm9maWxlZCBkZXBlbmRlbmNpZXMKKyAgICBmb3IgdGhlIGJsa2lkIGxpYnJhcnkgKENsb3NlczogIzYwNDYyOSkKKyAgKiBGaXhlZCBhbiBlMmZzY2sgUFJPR1JBTU1JTkcgQlVHIGVycm9yIChDbG9zZXM6ICM1NTU0NTYpCisgICogRml4ZWQgb3V0ZGF0ZWQgbWVudGlvbiBvZiBmc2NrIGluIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSAoQ2xvc2VzOiAjNTg4NzI2KQorICAqIFJlbW92ZWQgb2Jzb2xldGUgaW5pdHJkIHNjcmlwdCAoQ2xvc2VzOiAjNTg1MDQxKQorICAqIEZpeGVkIGJhZCBkZXBlbmRlbmN5IG9uIGxpYmJsa2lkMSBkdWUgdG8gc2hsaWJzLmxvY2FsIChDbG9zZXM6ICM1ODM1NTEpCisgICogRTJmc2NrIG5vdyBvcGVucyB0aGUgZXh0ZXJuYWwgam91cm5hbCBpbiBleGNsdXNpdmUgbW9kZSB0byBwcmV2ZW50CisgICAgY2xlYXJpbmcgdGhlIGpvdXJuYWwgb2YgYSBtb3VudGVkLCBzbmFwc2hvdHRlZCB2b2x1bWUgaWYgdGhlIHVzZXIKKyAgICBhY2NpZGVudGFsbHkgdHJpZXMgdG8gcnVuIGUyZnNjayBvbiB0aGUgc25hcHNob3Qgdm9sdW1lIChDbG9zZXM6ICM1ODc1MzEpCisgICogRml4IGEgYmlnIGluIGUyZnNjayBzbyBpdCBjb3JyZWN0IHRlc3QgZm9yIHdoZXRoZXIgdGhlIEVPRkJMT0NLU19GTAorICAgIGZsYWcgc2hvdWxkIGJlIHNldCBvciBub3QuCisgICogVHVuZTJmcyBjYW4gbm93IHNldCB1bmluaXRfYmcgd2l0aG91dCByZXF1aXJpbmcgYW4gZnNjayBhZnRlcndhcmRzCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZXh0NCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgYWRkZWQgaW4gMi42LjM1CisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBleHQ0IGVycm9yIHRyYWNraW5nIHN1cGVyYmxvY2sgZmllbGRzIGFkZGVkIGluIDIuNi4zNgorICAqIERlYnVnZnMgbm93IHVzZXMgYSBtb3JlIGNvbmNpc2UgZm9ybWF0IGZvciBsaXN0aW5nIGV4dGVudHMgaW4gaXRzCisgICAgc3RhdCBjb21tYW5kCisgICogRGVidWdmcyBjYW4gbm93IHVzZSBkaXJlY3QgSS9PIHRvIGFjY2VzcyB0aGUgZmlsZSBzeXN0ZW0gd2l0aCB0aGUgLUQgb3B0aW9uCisgICogTWtlMmZzIHdpbGwgc2tpcCBpbml0aWFsaXppbmcgdGhlIGlub2RlIHRhYmxlIGlmIGEgZGV2aWNlIHN1cHBvcnRzCisgICAgZGlzY2FyZCBhbmQgdGhlIGRpc2NhcmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4gemVybydlZCBibG9ja3MKKyAgKiBNa2UyZnMncyBoYW5kbGluZyBvZiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBzZWN0b3Igc2l6ZXMgaGFzIGJlZW4KKyAgICBzaWduaWZpY2FudGx5IGltcHJvdmVkLgorICAqIERlYnVnZnMgd2lsbCBjb3JyZWN0bHkgc2hvdyB0aGUgcHJvZ3Jlc3MgYmFyIGV2ZW4gd2hlbiBVVEYtOAorICAgIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gaXRzIHRyYW5zbGF0aW9uIGZpbGVzIChDbG9zZXM6ICM1ODM3ODIsICM1ODc4MzQpCisgICogRTJmcmVlZnJhZyB3aWxsIG5vdyBkaXNwbGF5IHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZSBleHRlbnRzLgorICAqIFJlc2l6ZTJmcyAtUCBub3cgbG9uZ2VyIHJlcXVpcmVzIGEgZnJlc2hseSBjaGVja2VkIGZpbGUgc3lzdGVtCisgICogRml4ZWQgYSBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gZXJyb3IgdGhhdCBjYW4gY2F1c2Ugc2VnZmF1bHRzIGluCisgICAgZTJmc2NrIGFuZCByZXNpemUyZnMgaW4gZXh0cmVtZWx5IHJhcmUgY2FzZXMKKyAgKiBGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2F1c2VkIGl0IHRvIGZhaWwgaWYgYm90aCB0aGUgb3JpZ2luYWwKKyAgICBhbmQgYmFja3VwIHN1cGVyYmxvY2tzIHdlcmUgaW52YWxpZCBpbiBzb21lIHdheQorICAqIEZpeGVkIGEgYnVnIGluIGUyZnJlZWZyYWcgd2hpY2ggY2F1c2VkIGdldG9wdCBwYXJzaW5nIHRvIGZhaWwgb24KKyAgICBhcmNoaXRlY3R1cmVzIHdpdGggdW5zaWduZWQgY2hhcnMKKyAgKiBDbGFyaWZpZWQgbWtlMmZzIGFuZCBlMmZzY2sgZXJyb3IgbWVzc2FnZXMgd2hlbiBnaXZlbiBpbmNvcnJlY3QKKyAgICBvcHRpb25zL3ZhbHVlcyBieSB0aGUgdXNlcgorICAqIFVwZGF0ZWQvY2xhcmlmaWVkIG1hbiBwYWdlcyAoQ2xvc2VzOiAjNTgwMjM2LCAjNTk0MDA0LCAjNTg5MzQ1LCAjNTkxMDgzKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIE1vbiwgMjIgTm92IDIwMTAgMTY6MDA6NTAgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjEyLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKKworICAqIEFsbG93IHR1bmUyZnMgdG8gc2V0IHVuaW5pdF9iZyB3aXRob3V0IHJlcXVpcmluZyBhbiBmc2NrCisgICogRml4IHRlc3QgaW4gZTJmc2NrIHRvIGNvcnJlY3RseSBjaGVjayBmb3IgRU9GQkxPQ0tTIGZpbGVzCisgICogRml4IGRlcGVuZGVuY2llcyBmb3IgbGlidXVpZCBhbmQgbGliYmxraWQgKENsb3NlczogIzU4MzU1MSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUaHUsIDAzIEp1biAyMDEwIDA5OjMwOjM2IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS4xMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogbWtlMmZzIG5vdyBnaXZlcyB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHRlcm5hbCBqb3VybmFsCisgICAgaXMgZGV2aWNlIGlzIG5vdCBmb3VuZAorICAqIFRoZSByZXNpemUyZnMgcHJvZ3JhbSB3aWxsIHJlZnVzZSB0byBwcmludCB0aGUgbWluaW11bSBzaXplIG5lZWRlZAorICAgIGZvciBhIGZpbGUgc3lzdGVtIGlmIGl0IGlzIG5vdCBjbGVhbi4KKyAgKiBFMmZzY2sgbm93IHRlc3RzIGZvciBleHRlbnRzIHRoYXQgYmVnaW4gYXQgcGh5c2ljYWwgYmxvY2sgMCBhbmQKKyAgICByZWplY3RzIHRoZW0gYXMgaW52YWxpZC4KKyAgKiBGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY291bGQgY2F1c2UgaXQgdG8gY3Jhc2ggd2hlbiB0cnlpbmcgdG8KKyAgICByZW1vdmUgYW4gaW52YWxpZCBleHRlbnQgYW5kIHRoZSBibG9jayBiaXRtYXBzIGhhZG4ndCB5ZXQgYmVlbiBsb2FkZWQuCisgICogRTJmc2NrIHdpbGwgbm93IGNvbXBsZXRlbHkgc2tpcCB0aW1lLWJhc2VkIGNoZWNrcyBpZiB0aGUgc3lzdGVtCisgICAgY2xvY2sgbG9va3MgaW5zYW5lIG9yIGlmIHRoZSBicm9rZW5fc3lzdGVtX2Nsb2NrIG9wdGlvbiBpcyBzZXQKKyAgICBpbiAvZXRjL2UyZnNjay5jb25mLiAgKENsb3NlczogIzU0OTg2MSwgIzU0MDE1MikKKyAgKiBGaXhlZCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2F1c2VkIGUyZnNjayB0byBjb21wbGFpbiBhYm91dCBpX2Jsb2NrcworICAgIHdpdGggYSA0VCBmaWxlIGNyZWF0ZWQgdXNpbmcgcG9zaXhfZmFsbG9jYXRlKCkKKyAgKiBFMmZzY2sgd2lsbCBub3cgY29ycmVjdGx5IG1hcmsgYSBzcGFyc2Ugam91cm5hbCBhcyBpbnZhbGlkIGFuZCB3aWxsCisgICAgZGVsZXRlIGFuZCByZWNyZWF0ZSB0aGUgam91cm5hbCB0byBhZGRyZXNzIHRoZSBwcm9ibGVtLgorICAqIEZpeGVkIGUyZnNjayBub3QgdG8gYXNrIHBlcm1pc3Npb24gZnJvbSB0aGUgdXNlciB0byBhYm9ydCBpZiBpdCdzCisgICAgZ29pbmcgdG8gYWJvcnQgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSB1c2VyIGlzIGdvaW5nIHRvIHNheS4uLgorICAqIEUyZnNjayBjYW4gbm93IGNvbnRpbnVlIGV2ZW4gaWYgaXQgZmFpbHMgdG8gcmVjcmVhdGUgdGhlIHJlc2l6ZSBpbm9kZQorICAqIEUyZnNjayB3aWxsIG5vdyBhdm9pZCByZW1vdmluZyBkaXJlY3RvcnkgZW50cmllcyBmb3IgaW5vZHMgZm91bmQgaW4KKyAgICB0aGUgdW51c2VkIHJlZ2lvbiBvZiB0aGUgaW5vZGUgdGFibGUgdW50aWwgYWZ0ZXIgaXQgcmVzdGFydHMgdGhlIGZzCisgICAgY2hlY2sgdG8gYXZvaWQgcmVtb3ZpbmcgdmFsaWQgZGF0YS4KKyAgKiBFMmZzY2sgd2lsbCBub3cgbG9uZ2VyIHRyeSB0byBzZXQgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyBpZiBpdAorICAgIGlzIGludGVycnVwdGVkLgorICAqIE1rZTJmcyB3aWxsIGNoZWNrIGJvdGggdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIGJsb2Nrc2l6ZXMgb2YgYQorICAgIGRldmljZSB0byBiZXR0ZXIgc3VwcG9ydCA0ayBzZWN0b3IgZHJpdmVzLgorICAqIE1rZTJmcyB3aWxsIGFjY2VwdCB0aGUgdmFsaWQgKGJ1dCByYXJlbHkgdXNlZnVsKSBmbGV4X2JnIHNpemUgb2YgMQorICAqIEUyZnNjayB3aWxsIGNoZWNrIGZvciBjYXNlcyB3aGVyZSB0aGUgRU9GQkxPQ0tTX0ZMIGlzIHNldCB3aGUgbml0IGlzCisgICAgbm90IG5lZWRlZCwgYW5kIG9mZmVyIHRvIGNsZWFyIGl0LgorICAqIFRoZSBjb21fZXJyIGxpYnJhcnkgd2lsbCBub3cgb25seSBvdXRwdXQgYSBDUiBjaGFyYWN0ZXIgaWYgdGhlCisgICAgc3RkZXJyIGlzIGNvbm5lY3RlZCB0byBhIHR0eSBpbiByYXcgbW9kZS4KKyAgKiBVcGRhdGUgQ3plY2gsIENoaW5lc2UsIER1dGNoLCBGcmVuY2gsIEdlcm1hbnksIEluZG9uZXNpYW4sIFBvbGlzaCwKKyAgICBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMgKGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QpCisgICogQWRkIGFuIGZzY2suZXh0NCBzeW1saW5rIGluIHRoZSBlMmZzcHJvZ3MtdWRlYiBwYWNrYWdlIChDbG9zZXM6ICM1NzEyNDcpCisgICogRml4IG1ha2VmaWxlIGRlcGVuZGVuY3kgc28gZHBrZy1idWlsZHBhY2thZ2UgLWoyIHdvcmtzIChDbG9zZXM6ICM1NjM0ODcpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAxNyBNYXkgMjAxMCAxOTo0Mzo1MiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuMTEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEFkZCBIZWltZGFsIGZ1bmN0aW9uIGNvbV9yaWdodF9yKCkgdG8gbGliY29tX2VyciAoQ2xvc2VzOiAjNTU4OTEwKQorICAqIEFsbG93IGUyZnNjayB0byBydW4gZXZlbiBpZiB0aGUgcGh5c2ljYWwgZGV2aWNlIGhhcyBtb3JlIHRoYW4gMioqMzIgYmxvY2tzCisgICogRGVidWdmcydzICJsb2dkdW1wIC1iIDxibGs+IiBub3cgcHJvcGVybHkgc2hvd3MgdGhlIGFsbG9jYXRpb24gc3RhdHVzCisgICAgb2YgdGhlIGJsb2NrIDxibGs+LiAgKENsb3NlczogIzU2NDA4NCkKKyAgKiBNYWtlIGUyZnNjaydzICJ0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIiBtZXNzYWdlIGlzIG5vdyBtb3JlIHNjYXJ5CisgICAgdG8gaG9wZWZ1bGx5IGRpc3N1YWRlIHVzZXJzIGZyb20gdGhpbmtpbmcsICJzdXJlbHkgdGhhdCBtZXNzYWdlCisgICAgZG9lc24ndCBhcHBseSB0byAqbWUqIiAgOi0oCisgICogZTJmc2NrIC1uIHdpbGwgbm93IGFsd2F5cyBvcGVuIHRoZSBmaWxlIHN5c3RlbSByZWFkLW9ubHkuICAgV2Ugbm93CisgICAgZGlzYWxsb3cgY2VydGFpbiBjb21iaW5hdGlvbiBvZiBvcHRpb25zIHdoaWNoIHByZXZpb3VzbHkgd2VyZSBtYW51YWwKKyAgICBleGNlcHRpb25zOyB0aGlzIGlzIGJhZCBiZWNhdXNlIGl0IGNhdXNlcyB1c2VycyB0byB0aGluayB0aGV5IGFyZQorICAgIHNtYXJ0ZXIgdGhhbiB0aGV5IHJlYWxseSBhcmUuICAgU28gIi1uIC1jIiwgIi1uIC1sIiwgIi1uIC1MIiwgYW5kCisgICAgIi1uIC1EIiBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKyAgKiBJZiB0aGUgcGFydGl0aW9uIGlzIGJhZGx5IGFsaWduZWQsIGhhdmUgbWtlMmZzIGp1c3QgcHJpbnQgYSB3YXJuaW5nCisgICAgbWVzc2FnZSBhbmQgY29udGludWUuICBQcmV2aW91c2x5IG1rZTJmcyB3b3VsZCBhc2sgdG8gY29uZmlybSwgYW5kCisgICAgdGhpcyBicm9rZSBkaXN0cm8gaW5zdGFsbGF0aW9uIHNjcmlwdHMuCisgICogRml4IGEgYnVnIGluIGxpYmV4dDJmcyBjYXVzZWQgdGhlIGNyZWF0aW9uIG9mIHZlcnkgbGFyZ2Ugam91cm5hbHMKKyAgICBmb3IgZXh0NCB0byBiZSBfdmVyeV8gc2xvdy4KKyAgKiBFMmZzY2sgbm93IHVuZGVyc3RhbmRzIHRoZSBFT0ZCTE9DS1NfRkwgZmxhZyB3aGljaCB3aWxsIGJlIHVzZWQgaW4KKyAgICAyLjYuMzQga2VybmVscyB0byBtYWtlIGUyZnNjayBub3QgY29tcGxhaW4gYWJvdXQgYmxvY2tzIGRlbGliZXJhdGVseQorICAgIGZhbGxvY2F0ZWQoKSBiZXlvbmQgYW4gaW5vZGUncyBpX3NpemUuCisgICogRml4IGEgYnVnIGluIGUyZnNjayB3aGljaCBjb3VsZCBjYXVzZSBlMmZzY2sgLUQgdG8gY29ycnVwdAorICAgIG5vbi1pbmRleGVkIGRpcmVjdG9yaWVzLiAgKENsb3NlczogIzU3MjQ1MykKKyAgKiBkZWJpYW4vcnVsZXM6IGNhbiBiZSBjb21waWxlZCBzdGF0aWNhbGx5IHdpdGggc3RhY2sgcHJvdGVjdG9yIG5vdy4KKyAgICAoQ2xvc2VzOiAjNTczOTIzKQorICAqIFVwZGF0ZSBkZWJpYW4gcG9saWN5IGNvbXBsaWFuY2UgdG8gMy44LjQKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDE1IE1hciAyMDEwIDAwOjE2OjM1IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS4xMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRml4IHJlc2l6ZTJmcyBidWcgd2hpY2ggY2F1c2VzIGl0IHRvIGFjY2VzcyBpbnZhbGlkIG1lbW9yeQorICAqIEFkZCBsaWJzcyBzdXBwb3J0IGZvciBsaWJyZWFkbGluZS5zby42CisgICogRml4IGUyZnNjaydzIGNoZWNrIGZvciBleHRlbnQtbWFwcGVkIGRpcmVjdG9yeSB3aXRoIGFuIGluY29ycmVjdCBmaWxlIHR5cGUKKyAgKiBBZGQgbmV3IGUyZnNjay5jb25mIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgorICAgIGRlZmF1bHQvYnJva2VuX3N5c3RlbV9jbG9jayBmb3Igc3lzdGVtIHdpdGggYnJva2VuIENNT1MgaGFyZHdhcmUKKyAgICBjbG9ja3MuICAoQ2xvc2VzOiAjNTU5Nzc2KQorICAqIEZpeCBmbGV4X2JnIGlub2RlIHRhYmxlIHBsYWNlbWVudCBhbGdvcml0aG0gdXNlZCBieSBta2UyZnMgZm9yCisgICAgY2VydGFpbiBzcGVjaWZpYyBmaWxlIHN5c3RlbSBzaXplcworICAqIEFkZCBzb3VyY2UgbGludGlhbiBvdmVycmlkcyBmb3Igd2Vhay1saWJyYXJ5LWRldi1kZXBlbmRlbmN5CisgICogRml4IEZUQkZTIHByb2JsZW0gY2F1c2VkIGJ5IHRleGkyaHRtbCBjaGFuZ2luZyAoYWdhaW4pIGl0cyBvdXRwdXQKKyAgICBsb2NhdGlvbi4gIChDbG9zZXM6ICM1NTI5MzQpCisgICogTWFrZSBlMmZzY2sgdG8gYXZvaWQgcmVoYXNoaW5nIGRpcmVjdG9yaWVzIHdoaWNoIGNhbiBmaXQgaW4gYQorICAgIHNpbmdsZSBkaXJlY3RvcnkgYmxvY2suCisgICogRml4IGhvdyBlMmZzY2sgZml4ZXMgc3BhcnNlIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBleHRlbnQtbWFwcGVkLgorICAqIEZpeCBzb21lIGJpZy1lbmRpYW4gYnVncyBpbiBlMmZzY2sgYW5kIGxpYmV4dDJmcworICAqIFRlYWNoIGUyZnNjayB0byBkZXRlY3QgYW5kIGZpeCBzcGFyc2UgZXh0ZW50LW1hcHBlZCBkaXJlY3RvcmllcworICAqIEZpeCBmaWxlZnJhZyBmcm9tIGNvcmUgZHVtcGluZyBvbiBmaWxlIHN5c3RlbXMgd2l0aCA4ayBibG9jayBzaXplcworICAqIEUyZnNjayB3YXMgZGVwZW5kaW5nIG9uIGlfc2l6ZSB0byBiZSBjb3JyZWN0IHRvIGRldGVjdCBhbmQgZml4CisgICAgY2VydGFpbiBkaXJlY3RvcnkgcHJvYmxlbXMgYmVmb3JlIGFjdHVhbGx5IGZpeGluZyB0aGUKKyAgICBkaXJlY3RvcnkncyBpX3NpemUuICBUaGlzIGNhdXNlZCBjZXJ0YWluIHJhcmUgY29ycnVwdGlvbnMgdG8KKyAgICByZXF1aXJlIHR3byBydW5zIG9mIGUyZnNjayB0byBhZGRyZXNzLgorICAqIFVwZGF0ZSBDemVjaCwgSW5kb25lc2lhbiwgUG9saXNoIGFuZCBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucworICAgIChmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0KQorICAqIEZpeCBlMmZzY2sgdG8gZmluZCBhbmQgY29ycmVjdCBkdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJpZXMgaW4KKyAgICBub24taW5kZXhlZCBkaXJlY3Rvcmllcy4KKyAgKiBBZGQgc3VwcG9ydCBmb3IgY2FsbGluZyBCTEtESVNDQVJEIHRvIG1rZTJmcy4KKyAgKiBFbmhhbmNlIGxpYmV4dDJmcyBzbyBpdCB3b3JrcyBhcm91bmQgYnVnIGluIExpbnV4IHZlcnNpb24gMi42LjE5CisgICAgYW5kIGVhcmxpZXIgd2hlcmUgdGhlIC9wcm9jL3N3YXBzIGZpbGUgd2FzIG1pc3NpbmcgdGhlIGhlYWRlciBvbgorICAgIHRoZSBmaXJzdCBsaW5lLgorICAqIEZpeCByZXNpemUyZnMgc28gaXQgd29ya3MgY29ycmVjdGx5IG9uIGZpbGUgc3lzdGVtcyB3aXRoIGV4dGVybmFsIGpvdXJuYWxzCisgICogRml4IGxpYnNzIHNvIHRoYXQgaXQgZG9lcyBub3Qgc2VnIGZhdWx0IHdoZW4gdXNpbmcgYSByZWFkbGluZQorICAgIGxpYnJhcnkgd2hpY2ggZG9lcyBub3Qgc3VwcGx5IGEgcmVhZGxpbmVfc2h1dGRvd24oKSBmdW5jdGlvbi4KKyAgKiBBZGQgYSBwcmUtZGVwZW5kcyBmb3IgdXRpbC1saW51eC1uZyAoQ2xvc2VzOiAjNTUxNzk1KQorICAqIFVwZGF0ZSBhbmQgY2xhcmlmeSB2YXJpb3VzIG1hbiBwYWdlcy4KKyAgKiBDb3JyZWN0ZWQgZHVtcGUyZnMncyB1c2FnZSBtZXNzYWdlCisgICogVGVhY2ggbGliZXh0MmZzIHRvIGlnbm9yZSB0aGUgaGlnaCAzMiBiaXRzIG9mIHRoZSBpX2Jsb2NrcyBmaWVsZAorICAgIHdoZW4gaHVnZV9maWxlIGZpbGUgc3lzdGVtIGZlYXR1cmUgaXMgc2V0LCBidXQgdGhlIGlub2RlIGRvZXMgbm90CisgICAgaGF2ZSB0aGUgSFVHRV9GSUxFX0ZMIGZsYWcgc2V0LgorICAqIENoYW5nZSBlMmZzY2sgdG8gYWNjZXB0IHN1cGVyYmxvY2sgdGltZXMgdG8gYmUgZnVkZ2VkIGJ5IHVwIHRvIDI0CisgICAgaG91cnMgYnkgZGVmYXVsdC4gIE1vc3QgZGlzdHJpYnV0aW9ucyBoYXZlIGZpeGVkIHRoZWlyIGluaXQgc2NyaXB0cywKKyAgICBidXQgYXBwYXJlbnRseSBub3cgdGhleSBoYXZlIGJ1Z2d5IHZpcnR1YWxpemF0aW9uIHNjcmlwdHMuICA6LSggIEkKKyAgICBnaXZlIHVwLCB0b28gbWFueSBidWdneSB1c2VyIHNwYWNlIHNldCB1cHMgb3V0IHRoZXJlLiAgKENsb3NlczogIzU1NzYzNikKKyAgKiBGaXggZTJmc2NrIHRvIGNvcnJlY3RseSBwcmludCA+IDMyLWJpdCBpX2Jsb2NrcyBudW1iZXJzIGluIHByb2JsZW0gcmVwb3J0cworICAqIEltcHJvdmUgZTJmc2NrIHNvIGl0IHByaW50cyAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayIgaW5zdGVhZCBvZgorICAgICJJbGxlZ2FsIGJsb2NrICMtMSIKKyAgKiBUZWFjaCBta2UyZnMgdG8gZ2V0IGRldmljZSB0b3BvbG9neSBpbmZvcm1hdGlvbiBmcm9tIGJsa2lkIGFuZCB1c2UKKyAgICBpdCB0byBwb3B1bGF0ZSB0aGUgc3VwZXJibG9jayBzdHJpZGUgYW5kIHN0cmlwZSBzaXplcyBhbmQgd2FybiBpZgorICAgIHRoZSBibG9jayBkZXZpY2UgaXMgbWlzYWxpZ25lZAorICAqIEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIGRlYnVnZnMgd2hlbiBzb3VyY2luZyBhIGNvbW1hbmQgZmlsZQorICAqIEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIGZzY2sKKyAgKiBSb3VuZCB1cCB0aGUgYml0bWFwIHNpemUgdG8gcHJldmVudCBzcHVyaW91cyBzZWdtZW50YXRpb24gZmF1bHRzIG9uCisgICAgQlNEIHBsYXRmb3Jtcy4KKyAgKiBGaXggcmVzaXplMmZzIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gc2l6ZSBuZWVkZWQsIHdoZW4KKyAgICBmbGV4X2JnIGlzIGVuYWJsZWQsIHRvIHByZXZlbnQgcmVzaXplMmZzIC1NIGZyb20gZmFpbGluZy4KKyAgKiBEdW1wZTJmcyBub3cgZGlzcGxheXMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGVudHMgb2YgdGhlIGpvdXJuYWwKKyAgKiBNYWtlIHN1cmUgdGhlIGxpYmJsa2lkMSBhbmQgbGliYmxraWQxLWRiZyBwYWNrYWdzIGhhdmUgY2hhbmdlbG9ncworICAqIE9uIGxvdyBtZW1vcnkgc3lzdGVtcywgZTJmc2NrIGNhbiBwcmludCBzb21lIHZlcnkgc2NhcnkgbG9va2luZworICAgIGVycm9yIG1lc3NhZ2VzLiAgQ2xlYW4gdXAgdGhlbSB1cCB0byBhdm9pZCB1c2VyIHBhbmljLiAgKENsb3NlczogIzUwOTUyOSkKKyAgKiBFbmhhbmNlIGJsa2lkIHRvIHN1cHBvcnQgLmtvLmd6IGZpbGVzIGluIHRoZSBtb2R1bGVzLmRlcCBwYXJzZXIKKyAgKiBGaXggdHVuZTJmcyAtaiBmb3IgbW91bnRlZCBleHRlZC1lbmFibGVkIGZpbGUgc3lzdGVtcworICAqIFVzZSB0aGUgZmVhdHVyZSBuYW1lICJleHRlbnQiIGluc3RlYWQgb2YgImV4dGVudHMiIGluIG1rZTJmcy5jb25mLgorICAgIEJvdGggd29yaywgYnV0IHRoZSBsYXR0ZXIgaXMgd2hhdCBpcyBkb2N1bWVudGVkIGluIHRoZSBtYW4gcGFnZS4KKyAgICAoQ2xvc2VzOiAjNTQwMTExKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMDcgRmViIDIwMTAgMjA6NTY6NDcgLTA1MDAKKworZTJmc3Byb2dzICgxLjQxLjktMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeCB0dW5lMmZzIC1JIHRvIHdvcmsgY29ycmVjdGx5IGluIHRoZSBmYWNlIG9mIGJhZCBibG9ja3MgYW5kCisgICAgZmlsZXN5c3RlbXMgZm9ybWF0dGVkIGZvciBSQUlEIGFycmF5cywgYW5kIEVOT1NQQyBlcnJvcnMKKyAgKiBSZXF1aXJlIHRoZSB1c2VyIHRvIG9ubHkgYW5zd2VyIG9uZSBxdWVzdGlvbiBpbnN0ZWFkIG9mIG11bHRpcGxlCisgICAgb25lcyBmb3IgbXVsdGlwbGUgYmFkIGJsb2NrIGdyb3VwIGNoZWNrc3Vtcywgb3Igd2hlbiBhbiBpbm9kZQorICAgIHRhYmxlIG5lZWRzIHRvIGJlIG1vdmVkLgorICAqIEZpeCBlMmZzY2sgdG8gaGFuZGxlIG1vdmluZyBpbm9kZSB0YWJsZXMgaW4gRkxFWF9CRyBmaWxlc3lzdGVtcyBtb3JlCisgICAgZ3JhY2VmdWxseSBieSBsb29raW5nIGluIHRoZSBlbnRpcmUgZmxleF9iZyBmb3Igc3BhY2UsIGluc3RlYWQgb2YKKyAgICBqdXN0IGluIHRoZSBibG9jayBncm91cDsgaWYgdGhhdCBkb2Vzbid0IHdvcmssIHRyeSBsb29raW5nIGZvcgorICAgIHNwYWNlIGluIHRoZSBlbnRpcmUgZmlsZXN5c3RlbS4KKyAgKiBGaXggdGhlIGZpbGVmcmFnIGNvZGUgdG8gYXZvaWQgcHJpbnRpbmcgdGhlIGV4dGVudCBoZWFkZXIgaWYgaXQKKyAgICBuZWVkcyB0byBmYWxsYmFjayB0byB1c2luZyB0aGUgRklCTUFQIGlvY3RsLgorICAqIEZpeCBmaWxlZnJhZyB0byBwcmludCB0aGUgY29ycmVjdCBudW1iZXIgb2YgZXh0ZW50cyBmb3IgemVyby1sZW5ndGgKKyAgICBmaWxlcyB3aGVuIHVzaW5nIEZJQk1BUC4gIChDbG9zZXM6ICM1NDAzNzYpCisgICogQWRkIGEgZmlsZWZyYWcgLUIgb3B0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHRoZSBGSUJNQVAKKyAgICBzdXBwb3J0LgorICAqIEFsbG93IGUyZnNwcm9ncyBwcm9ncmFtcyB0byBhbGxvY2F0ZSBmcm9tIHVuaW5pdGFsaXplZCBibG9jayBncm91cHMuCisgICogQWRkIGEgbmV3IHByb2dyYW0sIGUyZnJlZWZyYWcsIHdoaWNoIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgIGZyZWUgc3BhY2UgZnJhZ21lbnRhdGlvbiBpbiBhbiBleHQyLzMvNCBmaWxlc3lzdGVtLgorICAqIEUyZnNjayB3aWxsIG5vdyBwcmludCBtdWNoIGZ1bGxlciBpbmZvcm1hdGlvbiB3aGVuIHRoZSBsYXN0IG1vdW50CisgICAgdGltZSBvciBsYXN0IHdyaXR0ZW4gdGltZSBpcyBpbiB0aGUgZnV0dXJlLCBzaW5jZSBtb3N0IHBlb3BsZSBjYW4ndAorICAgIHNlZW0gdG8gYmVsaWV2ZSB0aGVpciBkaXN0cmlidXRpb24gaGFzIGJ1Z2d5IGluaXQgc2NyaXB0cywgb3IgdGhleQorICAgIGhhdmUgYSBmYWlsZWQgQ01PUy9SVFMgY2xvY2sgYmF0dGVyeS4KKyAgKiBVcGRhdGUgRnJlbmNoLCBQb2xpc2gsIEN6ZWNoLCBhbmQgU3dlZWRpc2ggdHJhbnNsYXRpb24gZnJvbSB0aGUKKyAgICBUcmFuc2xhdGlvbiBQcm9qZWN0LgorICAqIEVuaGFuY2UgZGVidWdmcydzICdzdGF0JyBjb21tYW5kIHRvIHByaW50IGJhc2ljIGV4dGVudCBpbmZvcm1hdGlvbgorICAgIGZvciBleHRlbnQtbWFwcGVkIGlub2RlcywgYW5kIGFkZCBhIG5ldyBjb21tYW5kLCAnZHVtcF9leHRlbnRzJworICAgIHdoaWNoIHByaW50cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhbiBpbm9kZSdzIGV4dGVudCB0cmVlLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMjMgQXVnIDIwMDkgMTA6MDg6NTIgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjgtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggcmVncmVzc2lvbiBpbiBleHQyZnNfZXh0ZW50X3NldF9ibWFwKCkgd2hpY2ggY2F1c2VkIGUyZnNjayAtZkQKKyAgICB0byBmYWlsIG9uIGV4dDQgZmlsZXN5c3RlbXMgaWYgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBzaHJpbmsgYnkgbW9yZQorICAgIHRoYW4gYSBibG9jayAoQ2xvc2VzOiAjNTM3NTEwKQorICAqIEZpeGVkIGZpbGVmcmFnIGZvciBub24tZXh0ZW50IGJhc2VkIGZpbGVzCisgICogRml4IHVzZSBvZiBhcG9zdHJvaGUncyBpbiBwYWNrYWdlIGRlc2NyaXB0aW9ucworICAqIERvbid0IHVzZSBkaWV0bGliYyB3aGVuIGJ1aWxkaW5nIGZvciBtaXBzIGFuZCBtaXBzZWwgYXJjaGl0ZWN0dXJlcworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIE1vbiwgMjAgSnVsIDIwMDkgMDk6Mzg6MjEgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeCByZXNpemUyZnMgYnVncyB3aGVuIHNocmlua2luZyBleHQ0IGZpbGVzeXN0ZW1zCisgICogVXBkYXRlIGRlYmlhbiBwb2xpY3kgY29tcGxpYW5jZSB0byAzLjguMgorICAqIFVwZGF0ZSBwYWNrYWdlIGRlc2NyaXB0aW9ucyB0byBtZW50aW9uIGV4dDMgYW5kIGV4dDQgZmlsZXN5dGVtcworICAgICAgKENsb3NlczogIzUzNTUzMCkKKyAgKiBVcGRhdGUgRnJlbmNoLCBQb2xpc2gsIEN6ZWNoLCBJbmRvbmVzaWFuLCBhbmQgU3dlZWRpc2ggdHJhbnNsYXRpb24KKyAgICAgIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisgICogSWYgdGhlIHJlc2l6ZTJmcyBvcGVyYXRpb24gZmFpbHMsIHRoZSB1c2VyIHdpbGwgYmUgdG9sZCB0byBmaXggdXAKKyAgICB0aGUgZmlsZXN5c3RlbSB1c2luZyBlMmZzY2sgLWZ5LgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFNhdCwgMTEgSnVsIDIwMDkgMTc6MjY6MTYgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjctMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggb25saW5lIHJlc2l6aW5nIHVzaW5nIHJlc2l6ZTJmcyAoQ2xvc2VzOiAjNTM1NDUyKQorICAqIEZpeCB0aGUgZmlsZWZyYWcgcHJvZ3JhbSBmb3IgZmlsZXMgd2l0aCBtb3JlIHRoYW4gMTQ0IGV4dGVudHMKKyAgKiBVcGRhdGUgYW5kIGNsYXJpZnkgdmFyaW91cyBtYW4gcGFnZXMuCisgICogRml4IHBvdGVudGlhbCBmaWxlc3lzdGVtIGNvcnJ1cHRpb25zIGNhdXNlZCBieSB1c2luZyByZXNpemUyZnMgdG8KKyAgICBzaHJpbmsgZmlsZXN5c3RlbXMgd2l0aCBleHRlbnRzIGVuYWJsZWQuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAwNyBKdWwgMjAwOSAyMzoyMTo0NiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRml4IG1lbW9yeSBsZWFrcyBpbiBlMmZzcHJvZ3MsIGluY2x1ZGluZyBhIHZlcnkgbGFyZ2UgbWVtb3J5IGxlYWsKKyAgICB3aGljaCBjYW4gY2F1c2UgZTJmc2NrIHRvIHJ1biBvdXQgb2YgbWVtb3J5IHdoZW4gY2hlY2tpbmcgdmVyeSBsYXJnZQorICAgIGZpbGVzeXN0ZW1zIHVzaW5nIGV4dGVudHMuCisgICogRml4IGEgYnVnIGluIGxpYmV4dDJmcyB3aGljaCBjYW4gY2F1c2UgZTJmc2NrIGFuZCByZXNpemUyZnMgdG8gd3JpdGUKKyAgICB1bmluaXRhbGl6ZWQgZGF0YSBpbnRvIHRoZSBwb3J0aW9uIG9mIHRoZSBpbm9kZSBiZXlvbmQgdGhlIGZpcnN0IDEyOAorICAgIGJ5dGVzIHdoZW4gb3BlcmF0aW5nIG9uIGV4dGVudHM7IHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgZmlsZXN5c3RlbXMuCisgICogVGhlIGxvZ3NhdmUgcHJvZ3JhbSB3aWxsIG5vdyBmaWx0ZXIgb3V0IHRoZSBeQSBhbmQgXkIgY2hhcmFjdGVycyB3aGVuCisgICAgd3JpdGluZyB0byB0aGUgY29uc29sZS4KKyAgKiBVcGRhdGUvY2xhcmlmeSBtYW4gcGFnZXMgKENsb3NlczogIzUzMTM4NSwgIzUyMzA2MykKKyAgKiBGaXggZmlsZWZyYWcgcHJvZ2FtIHNvIGl0IGNvcnJlY3RseSBjaGVja3MgZm9yIGVycm9ycyBmcm9tIHRoZQorICAgIGZpZW1hcCBpb2N0bC4KKyAgKiBDaGFuZ2UgYmFkYmxvY2tzIHRvIGFsbG93IGJsb2NrIHNpemVzIGxhcmdlciB0aGFuIDRrLgorICAqIEZpeCBsaWJleHQyZnMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpX2V4dHJhX3NpemUgd2hlbiBjcmVhdGluZyB0aGUKKyAgICBqb3VybmFsIGFuZCByZXNpemUgaW5vZGVzLgorICAqIFJlc2l6ZTJmcyB3aWxsIG5vdyB1cGRhdGUgdGhlIGpvdXJuYWwgYmFja3VwIGZpbGVkcyBpbiB0aGUKKyAgICBzdXBlcmJsb2NrIGlmIHRoZSBqb3VybmFsIGlzIG1vdmVkOyB0aGlzIGF2b2lkcyBhbiB1bm5lY2Vzc2FyeSBmdWxsCisgICAgZnNjayBhZnRlciByZXNpemluZyB0aGUgZmlsZXN5c3RlbS4KKyAgKiBVc2UgdGhlIHNhbWUgZW5jb2RpbmcgYXMgdGhlIGtlcm5lbCBmb3IgcmVjX2xlbiA9PSA2NGsgaW4gNjRrIGJsb2NrCisgICAgZmlsZXN5c3RlbXMuCisgICogRml4IGxzYXR0ciB0byBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMgd2hlbiBpdCBlbmNvdW50ZXJzIGVycm9ycy4KKyAgKiBFbmhhbmNlIGJhZGJsb2NrcyB0byBwcmludCB0aGUgY3VycmVudGx5IHRlc3RlZCBibG9jayBudW1iZXIgd2hlbgorICAgIGludGVycnVwdGVkIHdpdGggXkMuCisgICogRml4IGRlYnVnZnMgZnJvbSBjb3JlIGR1bXBpbmcgaWYgdGhlIGxvZ2R1bXAgY29tbWFuZCBmYWlscyB0byBvcGVuIHRoZQorICAgIG91dHB1dCBmaWxlLgorICAqIEhhcmRlbiBleHQyZnNfdmFsaWRhdGVfZW50cnkoKSBzbyB0aGF0IGxzZGVsIHdpbGwgbm90IHJlYWQgYmV5b25kIHRoZQorICAgIGVuZCBvZiB0aGUgYmxvY2sgZXZlbiBpZiB0aGUgZGlyZWN0b3J5IGJsb2NrIGlzIGNvcnJ1cHRlZC4KKyAgKiBVcGRhdGUgQ2hpbmVzZSBhbmQgQ3plY2ggdHJhbnNsYXRpb24gZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdC4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDI5IEp1biAyMDA5IDE1OjEyOjE0IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS42LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBVcGRhdGUgYW5kIGNsYXJpZnkgbWFuIHBhZ2VzCisgICogRml4IGEgbnVtYmVyIG9mIExpbnRpYW4gd2FybmluZ3MsIGluY2x1ZGluZyB0byB1cGRhdGluZyB0byBkZWJpYW4KKyAgICBwb2xpY3kgMy44LjEKKyAgKiBVcGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHRvIHRoZSBsYXRlc3QgKDIwMDktMDQtMTcpCisgICAgdmVyc2lvbiBzbyB0aGF0IGUyZnNwcm9ncyB3aWxsIGJ1aWxkIG9uIHRoZSBhdnIzMiBwbGF0Zm9ybQorICAgIChDbG9zZXM6ICM1MjgzMzApCisgICogQWRkIGFuIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2UgaWYgdGhlIC9ldGMvbXRhYiBmaWxlIGlzIG1pc3NpbmcKKyAgICB3aGVuIHJ1bm5pbmcgZTJmc2NrIG9yIHJlc2l6ZTJmcyAoQ2xvc2VzOiAjNTI3ODU5KQorICAqIEVuaGFuY2UgZTJmc2NrIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcHJpbWFyeSBibG9jayBncm91cAorICAgIGRlc2NyaXB0b3JzIG5lZWQgZml4aW5nLCBhbmQgdGhlIGJhY2t1cCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuCisgICAgKENsb3NlczogIzUxNjgyMCkKKyAgKiBBZGQgYW4gIi1hIiBvcHRpb24gdG8gZGVidWdmcydzIGNsb3NlX2ZpbGVzeXMgY29tbWFuZAorICAqIGUyZnNjayB3aWxsIG5vIGxvbmdlciBhYm9ydCBhIHByZWVuIG9wZXJhdGlvbiBpZiBhbiBpbm9kZSdzCisgICAgaV9maWxlX2FjbF9oaSBmaWVsZCBpcyBub24temVyby4gIChDbG9zZXM6ICM1MjY1MjQpCisgICogVGhlIGNoYXR0ciBwcm9ncmFtIGNhbiBub3cgbWlncmF0ZSBpbm9kZXMgZnJvbSB1c2luZyBkaXJlY3QvaW5kaXJlY3QKKyAgICBibG9ja3MgdG8gZXh0ZW50IHRyZWVzLgorICAqIFNwZWVkIHVwIGUyZnNjayBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmxvY2sgZ3JvdXBzIHdpdGggaW5vZGVzIGluCisgICAgdXNlIGluIHRoZSB1bnVzZWQgcG9ydGlvbiBvZiB0aGUgYmxvY2sgZ3JvdXAncyBpbm9kZSB0YWJsZS4KKyAgKiBVcGRhdGUgQ2hpbmVzZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSB0cmFuc2xhdGlvbiBwcm9qZWN0CisgICogRml4IHJlc2l6ZTJmcyBzbyBpdCB3b24ndCBjb3JydXB0IGV4dDQgZmlsZXN5c3RlbSB3aGVuIGFza2VkIHRvCisgICAgc2hyaW5rIGEgZmlsZXN5c3RlbSBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gc3VnZ2VzdGVkIHNpemUuCisgICogRml4IGUyZnNjayByZWdyZXNzaW9uIHdoaWNoIGNhbiBjb3JydXB0IGV4dDQgZmlsZXN5c3RlbXMgd2hlbgorICAgIHJlcGxheWluZyB0aGUgam91cm5hbC4KKyAgKiBBZGQgc3VwcG9ydCB0byBlMmZzY2sgZm9yIGhhbmRsaW5nIEkvTyBlcnJvcnMgd2hpbGUgcmVwbGF5aW5nIHRoZQorICAgIGpvdXJuYWwKKyAgKiBGaXggYSBidWcgaW4gZTJmc2NrIHdoaWNoIGNvdWxkIGNhdXNlIGl0IHRvIGNyYXNoIGlmIGFuIGlub2RlIGhhcyBhCisgICAgY29ycnVwdCBleHRlbnQgaGVhZGVyLCBhbmQgdGhlIHVzZXIgZGVjbGluZXMgdG8gY2xlYXIgdGhlIGlub2RlLgorICAqIEZpeCBibGtpZCB0byBwcmVmZXIgdGhlIC9kZXYvbWFwcGVyLzxuYW1lPiBkZXZpY2UgbmFtZXMgb3ZlciB0aGUKKyAgICBwcml2YXRlIC9kZXYvZG0tTiBkZXZpY2UgbmFtZXMuCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBGSUVNQVAgaW9jdGwgdG8gdGhlIGZpbGVmcmFnIHByb2dyYW0KKyAgKiBGdXJ0aGVyIHNwZWVkIHVwIGUyZnNjayBieSBza2lwcGluZyBqb3VybmFsIGNoZWNrcyBpZiB0aGUgZmlsZXN5c3RlbQorICAgIGlzIG1vdW50ZWQgcmVhZC1vbmx5IGFuZCBpcyBtYXJrZWQgYXMgbm90IG5lZWRpbmcgam91cm5hbCByZXBsYXkuCisgICogQWRkIGEgYnVpbGQgZGVwZW5kcyBpbiB0aGUgY29udHJvbCBmaWxlIGluZGljYXRpbmcgdGhhdCBkaWV0bGliYworICAgIG11c3QgYmUgbmV3ZXIgdGhhbiB2ZXJzaW9uIDAuMzAgKENsb3NlczogIzUwNjA2NCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDMwIE1heSAyMDA5IDEzOjI2OjIzIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS41LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBFMmZzY2sgd2lsbCBub3cgZGV0ZWN0IGFuZCBmaXggaW5vZGVzIHRoYXQgaGF2ZSBhIG5vbi16ZXJvCisgICAgaV9maWxlX2FjbF9oaWdoIGZpZWxkIG9uIDMyLWJpdCBmaWxlc3lzdGVtcy4KKyAgKiBVcGRhdGUgYnVpbGQtZGVwZW5kcyB0byBpbmRpY2F0ZSB0aGF0IGRpZXRsaWJjIDAuMzAgZG9lc24ndCB3b3JrLgorICAgIChDbG9zZXM6ICM1MDYwNjQpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgRnJpLCAyNCBBcHIgMjAwOSAwODo1Mjo0NyAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuNC0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFVwZGF0ZS9jbGFyaWZ5IG1hbiBwYWdlcyAoQ2xvc2VzOiAjMzY1NjE5KQorICAqIEZpeCBhIHByb2JsZW0gd2hlcmUgdGhlICdkZXZpY2UgbmFtZXMnIGZvciBwc2V1ZG8tZmlsZXN5c3RlbXMgaW4KKyAgICAvcHJvYy9tb3VudHMgY291bGQgY29uZnVzZSB0aGUgZTJmc3Byb2dzIGludG8gdGhpbmtpbmcgdGhhdCBhCisgICAgZmlsZXN5c3RlbSBpbWFnZSBzdG9yZWQgaW4gYSByZWd1bGFyIGZpbGUgd2FzIG1vdW50ZWQgd2hlbiBpdCB3YXMgbm90CisgICogUmVtb3ZlIHdob2xlLWRpc2sgZW50cmllcyBmcm9tIHRoZSBibGtpZCBjYWNoZSB3aGVuIHBhcnRpdGlvbnMgYXJlIGZvdW5kCisgICogUmVkdWNlIHRoZSBudW1iZXIgb2YgZGlzayByZWFkcyBuZWVkZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBjbGVhbgorICAqIEFkZCBDaGluZXNlIChzaW1wbGlmaWVkKSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAyMyBBcHIgMjAwOSAwMTozNToyMiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuNC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFVwZGF0ZSB0aGUgZGViaWFuIGNvcHlyaWdodCBmaWxlcyB0byBwb2ludCBhdCB0aGUgdmVyc2lvbi1zcGVjaWZpYworICAgIEdQTCBhbmQgTEdQTCBmaWxlcy4KKyAgKiBVcGRhdGUgdGhlIGRlYmhlbHBlciBjb21wYXQgbGV2ZWwgdG8gNworICAqIEZpeCBhIG51bWJlciBvZiBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gYnVncyBpbiByZXNpemUyZnMgd2hlbiBncm93aW5nCisgICAgb3Igc2hyaW5raW5nIGV4dDQgZmlsZXN5c3RlbXMgb2ZmLWxpbmUgKGkuZS4sIHdoZW4gdGhlIGV4dDQKKyAgICBmaWxlc3lzdGVtIGlzIG5vdCBtb3VudGVkKS4KKyAgKiBDbGFyaWZ5IHR1bmUyZnMgbWFuIHBhZ2UgIChDbG9zZXM6ICM1MTU2OTMpCisgICogQWRkIGhvbWVwYWdlIGZpZWxkIHRvIHRoZSBkZWJpYW4gY29udHJvbCBmaWxlIChDbG9zZXM6ICM1MDYyNzkpCisgICogRml4IEh1cmQgY29tcGlsYXRpb24gcHJvYmxlbSAoQ2xvc2VzOiAjNTIxNjAyKQorICAqIERlYnVnZnMgY2FuIG5vdyBzZXQgaV9maWxlX2FjbF9oaWdoIHZpYSB0aGUgc2V0X2lub2Rlc19maWVsZCBjb21tYW5kCisgICogRGVidWdmcyB3aWxsIG5vdyBkaXNwbGF5IGEgNjQtYml0IGZpbGUgYWNsIGJsb2NrCisgICogRml4IHZhcmlvdXMgZ2NjIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGFuZCBvdGhlciBwcm9ncmFtbWluZyBjbGVhbnVwcworICAqIE1ha2Ugc3VyZSBsaWJ1dWlkIGNsb3NlcyBhbGwgZmlsZSBkZXNjcmlwdG9ycyBiZWZvcmUgc3RhcnRpbmcgdGhlCisgICAgdXVpZGQgZGFlbW9uLgorICAqIEF2b2lkIHJ1bm5pbmcgZTJmc2NrIHVubmVjZXNzYXJpbHkgYWZ0ZXIgZG9pbmcgYW4gb25saW5lIHJlc2l6ZQorICAqIE1rZTJmcyAtUyB3aWxsIG5vdyBhdm9pZCB0cnlpbmcgdG8gY3JlYXRlIHRoZSBqb3VybmFsCisgICogVXBkYXRlIHRoZSBDemVjaCB0cmFuc2xhdGlvbiBmcm9tIHRoZSB0cmFuc2xhdGlvbiBwcm9qZWN0LgorICAqIEZpeCBzdXBwb3J0IGZvciBleHRlcm5hbCBqb3VybmFscyAod2hpY2ggd2FzIGJyb2tlbiBpbiBlMmZzcHJvZ3MgMS40MS40KQorICAqIEZpeCBhIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBsaWJleHQyZnMgaW5mbyBwYWdlIGFuZCBtYWtlaW5mbyA0LjEyCisgICogRml4IGEgc2VnZmF1bHQgaW4gZGVidWdmcyB3aGVuIHJ1bm5pbmcgc3RhdCB3aXRob3V0IGFuIG9wZW4gZmlsZXN5c3RlbQorICAqIFRlYWNoIHRoZSBibGtpZCBsaWJyYXJ5IHRoYXQgc3RhcnRpbmcgaW4gMi42LjI5LCBleHQ0IGNhbiBzdXBwb3J0CisgICAgZmlsZXN5c3RlbXMgd2l0aG91dCBqb3VybmFscy4KKyAgKiBBZGQgZXJyb3IgY2hlY2sgcHJldmVudGluZyB0aGUgcmVzZXJ2ZWRfcmF0aW8gYXJndW1lbnQgdG8gbWtlMmZzIGFuZAorICAgIHR1bmUyZnMgZnJvbSBiZWluZyBuZWdhdGl2ZS4gIChDbG9zZXM6ICM1MTcwMTUpCisgICogQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIHRoZSBudW1iZXIga2lsb2J5dGVzIHdyaXR0ZW4gdG8gdGhlCisgICAgZmlsZXN5c3RlbSB2aWEgdGhlIHN1cGVyYmxvY2sgZmllbGQgc19rYnl0ZXNfd3JpdHRlbgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTkgQXByIDIwMDkgMjM6MDU6NTMgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeCBidWcgd2hpY2ggY291bGQgc29tZXRpbWVzIGNhdXNlIGJsa2lkIHRvIHJldHVybiBhbiBleGl0IHZhbHVlIG9mCisgICAgemVybyBmb3IgYSBub24tZXhpc3RlbnQgZGV2aWNlIChDbG9zZXM6ICM1MDI1NDEpCisgICogRml4IHNwZWxsaW5nIG1pc3Rha2UgaW4gRGViaWFuIGNoYW5nZWxvZyAoQ2xvc2VzOiAjNTAyMzIzKQorICAqIEZpeCBibGtpZCB0byBkZWFsIHdpdGggYW4gZXh0MyBmaWxlc3lzdGVtIHdpdGggdGhlIHRlc3RfZnMgZmxhZworICAqIEZpeCBkZWJ1Z2ZzJ3MgbmNoZWNrIG91dHB1dCB0byBzdXBwcmVzcyBleHRyYSBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQKKyAgICBvZiB0aGUgZmlsZSBuYW1lCisgICogVHVuZTJmcyBub3cgdXBkYXRlcyB0aGUgYmxvY2sgZ3JvdXAgY2hlY2tzdW1zIGFmdGVyIGNoYW5naW5nIHRoZQorICAgIGZpbGVzeXN0ZW0ncyBVVUlECisgICogU3BlZWQgdXAgdHVuZTJmcydzIGlub2RlIHJlc2l6aW5nIGNvZGUgc28gaXQgaXMgbm8gbG9uZ2VyIHZhc3RseQorICAgIGluZWZmaWNpZW50IGZvciBtb2RlcmF0ZSB0byBsYXJnZSBmaWxlc3lzdGVtcworICAqIEZpeCBkdW1wZTJmcyBzbyBpdCBkb2Vzbid0IGF0dGVtcHQgdG8gcHJpbnQgdGhlIGlubGluZSBqb3VybmFsCisgICAgaW5mb3JtYXRpb24gb24gZmlsZXN5c3RlbXMgd2l0aCBhbiBleHRlcm5hbCBqb3VybmFsCisgICogVXBkYXRlIHRoZSBDYXRhbGFuIHRyYW5zbGF0aW9uCisgICogRmlsdGVyIG91dCBsaW51eC12ZHNvLnNvIGxpbmVzIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGxpYnJhcnkKKyAgICBkZXBlbmRlbmNpZXMgd2hpbGUgYnVpbGRpbmcgdGhlIGluaXRpYWwgcmFtZGlzayAoQ2xvc2VzOiAjNTAzMDU3KQorICAqIEZpeCBlMmZzY2sgc28gYW4gZXJyYW50IElOT0RFX1VOSU5JVCBmbGFnIHNldCBpbiBhIGJsb2NrIGdyb3VwCisgICAgZG9lc24ndCBjYXVzZSBlMmZzY2sgdG8gYWJvcnQuCisgICogRTJmc2NrIG5vdyBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZnJhZ21lbnRlZCBkaXJlY3RvcmllcyBhbmQKKyAgICBmcmFnbWVudGVkIGZpbGVzIGluIHZlcmJvc2UgbW9kZSBzdGF0aXN0aWNzIGFuZCBpbiB0aGUgZnJhZ2NoZWNrCisgICAgcmVwb3J0LgorICAqIEF2b2lkIGRvdWJsZS1jb3VudGluZyBub24tY29udGlndW91cyBleHRlbnQtYmFzZWQgaW5vZGVzIGluIHRoZQorICAgIHZlcmJvc2UgbW9kZSBzdGF0aXN0aWNzLgorICAqIEUyZnNjayBub3cgbGVhdmVzIHNsYWNrIHNwYWNlIHdoZW4gcmVwYWNraW5nIGRpcmVjdG9yaWVzIHNvIHRoYXQgYQorICAgIGZldyBuZXcgZGlyZWN0b3J5IGVudHJpZXMgd29uJ3QgY2F1c2UgbGVhZiBub2RlcyB0byBiZWNvbWUgc3BsaXQKKyAgICByaWdodCBhd2F5LgorICAqIEUyZnNjayB3YXMgcHJldmlvdXNseSBub3QgaGFuZGxpbmcgdGhlIGNhc2Ugb2YgYSBjb3JydXB0ZWQgaW50ZXJpb3IKKyAgICBub2RlIGluIHRoZSBleHRlbnQgdHJlZSwgYW5kIHdvdWxkIGNyYXNoIGluIHRoYXQgY2FzZS4gIEl0IG5vdyB3aWxsCisgICAgaGFuZGxlIHRoaXMgYW5kIHJlbGF0ZWQgZmFpbHVyZXMgcm9idXN0bHkuCisgICogRTJmc2NrIHByb2JsZW0gZGVzY3JpcHRpb25zIGludm9sdmluZyB0aGUgam91cm5hbCBhcmUgbm8gbG9uZ2VyCisgICAgcmVmZXJyZWQgdG8gYXMgImV4dDMiIHByb2JsZW1zLCBzaW5jZSBleHQ0IGZpbGVzeXN0ZW1zIGFsc28gaGF2ZQorICAgIGpvdXJuYWxzLgorICAqIEZpeCBhIGxvbmctc3RhbmRpbmcgYnVnIGluIGUyZnNjayB3aGljaCB3b3VsZCBjYXVzZSBpdCB0byBjcmFzaCB3aGVuCisgICAgcmVwbHlpbmcgam91cm5hbHMgZm9yIGZpbGVzeXN0ZW1zIHdpdGggYmxvY2sgc2l6ZXMgZ3JlYXRlciB0aGFuIDhrLgorICAqIEZpeCBhIHJlZ3Jlc3Npb24gaW4gZGVidWdmcydzIGxvZ2R1bXAgY29tbWFuZCBzbyBpdCB3b3JrcyBmb3IKKyAgICBmaWxlc3lzdGVtcyB3aXRoIDMyLWJpdCBibG9jayBudW1iZXJzLiAgVGhpcyB3YXMgYWNjaWRlbnRhbGx5IGJyb2tlbgorICAgIHdoZW4gdGhlIGhlYWRlciBmaWxlcyB3ZXJlIGNoYW5nZWQgdG8gc3VwcG9ydCB0aGUgNjQtYml0IGJsb2NrIG51bWJlcnMuCisgICogRml4IHJlc2l6ZTJmcyBmb3IgZXh0NCBmaWxlc3lzdGVtcy4gIFNvbWUgYmxvY2tzIHRoYXQgdGhhdCBuZWVkIG1vdmluZworICAgIHdoZW4gc2hyaW5raW5nIGZpbGVzeXN0ZW1zIHdpdGggdW5pbml0X2JnIGZlYXR1cmUgd291bGQgbm90IGJlCisgICAgbW92ZWQuICBJbiBhZGRpdGlvbiwgYmxvY2tzIGFuZCBpbm9kZSB0YWJsZSBibG9ja3Mgd2VyZSBub3QgYmVpbmcKKyAgICBjb3JyZWN0bHkgZnJlZWQgd2hlbiBzaHJpbmtpbmcgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZyBmZWFibGUsCisgICAgd2hpY2ggY2F1c2VkIHJlc2l6ZTJmcyAtTSB0byBmYWlsLiAgRmluYWxseSwgd2hlbiBibG9ja3MgYXJlIG1vdmVkLAorICAgIG1ha2Ugc3VyZSB0aGUgdW5pbml0aWFsaXplZCBmbGFnIGluIGV4dGVudHMgaXMgcHJlc2VydmVkLgorICAqIEFkZCBta2ZzLmV4dDQgc3ltbGluayB0byB0aGUgZTJmc3Byb2dzLXVkZWIgcGFja2FnZSAoQ2xvc2VzOiAjNTExMjA3KQorICAqIFJlc2l6ZTJmcyBub3cgcmVzZXJ2ZXMgc29tZSBleHRyYSBibG9jayB3aGVuIGNhbGN1bGF0aW5nIHRoZSBtaW5pbXVtCisgICAgc2l6ZSB0byBzaHJpbmsgdGhlIGZpbGVzeXN0ZW0gaW4gY2FzZSBzb21lIGV4dGVudCBhbGxvY2F0aW9uIHRyZWVzCisgICogQWRkIGEgInNldCAtZSIgdG8gdXVpZC1ydW50aW1lJ3MgcHJlcm0gc2NyaXB0IHRvIG1ha2UgTGludGlhbiBoYXBweQorICAqIFRoZSBibGtpZCBsaWJyYXJ5IHdpbGwgbm93IHJlY29nbml6ZSBidHJmcyBmaWxlc3lzdGVtcyBhbmQgc3dhcAorICAgIGRldmljZXMgY3VycmVudGx5IHVzZWQgYnkgdXNlci1sZXZlbCBzb2Z0d2FyZSBzdXNwZW5kLgorICAqIHR1bmUyZnMgd2lsbCBub3QgYWxsb3cgY2hhbmdpbmcgdGhlIGlub2RlIHNpemUgZm9yIGZpbGVzeXN0ZW1zIHRoYXQKKyAgICBoYXZlIHRoZSBmbGV4X2JnIGZlYXR1cmUgZW5hYmxlZCwgc2luY2UgdGhlIGNvZGUgY3VycmVudGx5IGFzc3VtZXMKKyAgICB0aGUgZWFjaCBibG9jayBncm91cCdzIHBvcnRpb24gaW5vZGUgdGFibGUgaXMgbG9jYXRlZCBpbiBpdHMgb3duCisgICAgYmxvY2sgZ3JvdXAuCisgICogRml4IHR1bmUyZnMgLUkgc28gaXQgd29uJ3QgY29ycnVwdCBleHQzL2V4dDQgZmlsZXN5c3RlbSBjb25maWd1cmVkCisgICAgZm9yIFJBSUQgc3RvcmFnZSBkZXZpY2VzLgorICAqIE1rZTJmcyBub3cgdW5kZXJzdGFuZHMgYSAtVSBvcHRpb24gd2hpY2ggYWxsb3dzIHRoZSBVVUlEIHRvIGJlCisgICAgc3BlY2lmaWVkIGZvciB0aGUgbmV3IGZpbGVzeXN0ZW0uCisgICogTWtlMmZzIHdpbGwgbm93IHRyZWF0IGRldmljZXMgd2l0aCBleGFjdGx5IDE2VEIgYXMgaWYgdGhleSBoYXZlIDE2VEIKKyAgICBtaW51cyBvbmUgYmxvY2ssIHNpbmNlIG1hbnkgdXNlcnMgZXhwZWN0IGV4dDQgdG8gc3VwcG9ydCAxNlRCCisgICAgZGV2aWNlcywgYW5kIHRoZSB0cnVlIG1heGltdW0gc2l6ZSBpcyAxNlRCLTEuCisgICogRTJmc2NrIHdpbGwgbm93IGZsYWcgZmlsZXN5c3RlbXMgdGhhdCBoYXZlIGFuIGluc2FuZSBzX2ZpcnN0X2lubworICAgIGZpZWxkIGluIHRoZWlyIHN1cGVyYmxvY2suCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAyNyBKYW4gMjAwOSAxMTo1MDo0OSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDEuMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogRml4IGUyZnNjayBzbyBpdCBwcmludHMgdGhlIGNvcnJlY3QgaW5vZGUgbnVtYmVyIGZvciB1aW5pdF9iZworICAgIHJlbGF0ZWQgcHJvYmxlbXMuCisgICogRTJmc2NrIHdpbGwgb2ZmZXIgdG8gY2xlYXIgdGhlIHRlc3RfZnMgZmxhZyBpZiB0aGUgZXh0NCBmaWxlc3lzdGVtCisgICAgaXMgYXZhaWxhYmxlLgorICAqIEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIGxpYmJsa2lkCisgICogQXZvaWQgYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBpbiBlMmZzY2sgd2hlbiB0aGVyZSBhcmUgZGlzayBJL08KKyAgICBlcnJvcnMgd2hpbGUgdHJ5aW5nIHRvIGNsb3NlIGEgZmlsZXN5c3RlbS4KKyAgKiBGaXggYSBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCBpbiByZXNpemUyZnMgd2hlbiBhIGJvZ3VzIG5ldyBzaXplIG9mCisgICAgMCBibG9ja3MgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICogQWRkIGFuIGVhcmx5IGNoZWNrIHRvIHNlZSBpZiBhIGRldmljZSBpcyByZWFkLW9ubHkgdG8gYXZvaWQgbG90cyBvZgorICAgIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcy4KKyAgKiBGaXggZGVidWdmcydzIG5jaGVjayBjb21tYW5kIHNvIGl0IHByaW50cyBhbGwgb2YgdGhlIG5hbWVzIG9mCisgICAgaGFyZGxpbmtzIGluIHRoZSBzYW1lIGRpcmVjdG9yaWVzLgorICAqIEZpeCBhIGJ1ZyBpbiBsaWJibGtpZCBzbyBpdCBjb3JyZWN0bHkgZGV0ZWN0cyB3aGV0aGVyIHRoZSBleHQ0IGFuZAorICAgIGV4dDRkZXYgZmlsZXN5c3RlbXMgYXJlIGF2YWlsYWJsZSwgc28gdGhhdCB0aGUgZXh0NGRldi0+ZXh0NAorICAgIGZhbGxiYWNrIGNvZGUgd29ya3MgY29ycmVjdGx5LgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTIgT2N0IDIwMDggMjI6NDU6MzQgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIEZpeCBlMmZzY2sncyBhdXRvbWF0aWMgYmxvY2tzaXplIGRldGVjdGlvbi4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCisgICAgICBhZGRlZCBpbiBlMmZzcHJvZ3MgMS40MC43IHdoZXJlIGUyZnNjaydzIC1iIG9wdGlvbiB3b3VsZCBub3QKKyAgICAgIHdvcmsgaWYgYSBibG9ja3NpemUgd2Fzbid0IGFsc28gc3BlY2lmaWVkIHZpYSB0aGUgLUIgb3B0aW9uLgorICAqIEZpeCBhIHBvdGVudGlhbCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBsaWJjb21fZXJyIGlmIHRoZQorICAgICAgYXBwbGljYXRpb24gZXhlYydzIGFub3RoZXIgcHJvZ3JhbS4KKyAgKiBGaXhlZCBiYWRibG9ja3Mgb3V0cHV0IGZvciAiYmFkYmxvY2tzIC1zdyIKKyAgKiBkZWJ1Z2ZzOiBGaXggbmNoZWNrIHRvIHByaW50IGFsbCBwYXRobmFtZXMgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGlub2RlcworICAqIFVzZSBkaWV0bGliYyB3aGVuIHBvc3NpYmxlIGZvciBidWlsZGluZyBlMmZzY2suc3RhdGljLCB0byByZWR1Y2UgdGhlCisgICAgICBzaXplIG9mIHRoZSBzdGF0aWMgYmluYXJ5LgorICAqIGRlYnVnZnM6IEFkZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZSBoYXNoIHNlZWQgYW5kIHRvIHNwZWNpZnkgdGhlCisgICAgICBoYXNoIGFsZ29yaXRobSBieSBuYW1lIHRvIHRoZSAiaGFzaCIgY29tbWFuZC4KKyAgKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbGUgSS9PIGZ1bmN0aW9ucyB0byBsaWJleHQyZnMudGV4aW5mby4KKyAgICAgIChDbG9zZXM6ICM0ODQ4NzcpCisgICogRml4IGEgYnVnIGluIGUyZnNjayB3aGVyZSBpZiBhIHRyYW5zbGF0aW9uIGZpbGUgaXMgYmVpbmcgdXNlZCBhbmQKKyAgICAgIGUyZnNjayBuZWVkcyB0byBwcmludCBwcm9ibGVtIHJlcG9ydCB3aXRoIGEgY3VzdG9tIHF1ZXN0aW9uIChzdWNoIGFzCisgICAgICAiUnVuIGpvdXJuYWwgYW55d2F5PyIpLCB0aGUgUE8gZmlsZSdzIGhlYWRlciB3b3VsZCBnZXQgc3Bld2VkIG9udG8KKyAgICAgIHRoZSB0ZXJtaW5hbC4KKyAgKiBVcGRhdGUgU3dlZGlzaCwgVmlldG5hbWVzZSwgRHV0Y2gsIEluZG9uZXNpYW4sIEdlcm1hbiwgQ3plY2ggdHJhbnNsYXRpb25zCisgICogRml4ZWQgc3BlbGxpbmcgbWlzdGFrZXMgaW4gbWFuIHBhZ2VzICAoQ2xvc2VzOiAjNDk4MTAwLCAjNDk4MTAxLAorICAgICAgIzQ5ODEwMiwgIzQ5ODEwMykKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUaHUsIDAyIE9jdCAyMDA4IDA4OjU0OjE2IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MS4xLTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogYmFkYmxvY2tzIC12IHdpbGwgbm93IGRpc3BsYXkgdGhlIHRpbWUgYW5kIHBlcmNlbnRhZ2UgY29tcGxldGUKKyAgICAgIChDbG9zZXM6ICM0Mjk3MzkpCisgICogUmVvcmRlcmVkIGRlYmlhbi9ydWxlcyB3aGVuIGJ1aWxkaW5nIHVkZWJzIHRvIGF2b2lkIGEgTGludGlhbiB3YXJuaW5nCisgICogRml4ZWQgZGVwZW5kZW5jaWVzIGZpZWxkcyBpbiB0aGUgdWRlYiBwYWNrYWdlcyAoQ2xvc2VzOiAjNDk3NjE5KQorICAqIEF2b2lkIGxpbmtpbmcgdmFyaW91cyBwcm9ncmFtcyB3aXRoIHVubmVlZGVkIGxpYnJhcmllcworICAqIEZpeGVkIGEgdHlwbydlZCBib2xkIGZvbnQgc3BlY2lmaWVyIGluIG1rZTJmcydzIG1hbiBwYWdlCisgICogRml4ZWQgdGhlIHBrZy1jb25maWcgZmlsZXMgc28gdGhlIGluY2x1ZGUgZGlyZWN0b3J5IG5lZWRlZCBieSB0aGUKKyAgICAgIHZhcmlvdXMgbGlicmFyaWVzIGlzIGluY2x1ZGVkLCBhbmQgdG8gdXNlIFJlcXVpcmVzLnByaXZhdGUgdG8KKyAgICAgIGF2b2lkIHVubmVjZXNzYXJ5IGxpbmtpbmcgb2YgZHluYW1pYyBsaWJyYXJpZXMuCisgICogQWRkIG1vcmUgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiB0byB0aGUgZGViaWFuLyouc3ltYm9sIGZpbGVzCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgRnJpLCAwNSBTZXAgMjAwOCAxMToxMTowMyAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuMS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1ha2Ugc3VyZSBleHQ0X3N3YWI2NCgpIGlzIGRlZmluZWQgb24gYWxsIHBsYXRmb3JtcyAoQ2xvc2VzOiAjNDk3NTE1KQorICAqIEJhZGxvY2tzOiBVc2UgT19MQVJHRUZJTEUgc28gaXQgd2lsbCBydW4gb24gZmlsZXMgZ3JlYXRlciB0aGFuIDJHQgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMDIgU2VwIDIwMDggMDk6NTM6NDYgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIG1rZTJmcyBhbmQgdHVuZTJmcyBub3cgdXNlIGhhbGYtbWQ0IGFzIHRoZSBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtCisgICAgICAgSW4gYWRkaXRpb24gdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gY2FuIGJlIHZpYSBta2UyZnMuY29uZiBmb3IKKyAgICAgICBta2UyZnMsIGFuZCB2aWEgYSBjb21tYW5kLWxpbmUgb3B0aW9uIGZvciB0dW5lMmZzLgorICAqIEFkZCBzdXBwb3J0IGZvciBvbi1saW5lIHJlc2l6aW5nIG9mIGV4dDQgZmlsZXN5c3RlbXMgd2l0aCB0aGUKKyAgICAgICBmbGV4X2JnIGZpbGVzeXN0ZW0gZmVhdHVyZS4KKyAgKiBlMmZzY2sgbm93IGNyZWF0ZXMgdGhlIGpvdXJuYWwgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmlsZXN5c3RlbSwKKyAgICAgICB3aGljaCBjYW4gc3BlZWQgdXAgZnN5bmMtaGVhdnkgd29ya2xvYWRzLgorICAqIE1ha2UgdGhlIGJsa2lkIGxpYnJhcnkgbW9yZSBlZmZpY2llbnQgZm9yIGRldmljZW1hcHBlciBkZXZpY2VzLAorICAgICAgIG1vc3RseSBieSBubyBsb25nZXIgdXNpbmcgdGhlIGxpYmRldm1hcHBlciBsaWJyYXJ5LgorICAqIEZpeCB2YXJpb3VzIG5hbWVzcGFjZSBsZWFrYWdlcyBieSB0aGUgbGliYmxraWQsIGxpYmUycCBhbmQgbGliZXh0MmZzCisgICAgICAgbGlicmFyaWVzLgorICAqIEZpeCBzdXBwb3J0IGZvciBlbXB0eSBkaXJlY3RvcmllcyBpbiA2NGsgYmxvY2tzaXplIGZpbGVzeXN0ZW1zLgorICAqIEFkZCBzdXBwb3J0ZWRfZmVhdHVyZXMgY29tbWFuZCB0byBkZWJ1Z2ZzCisgICogSW1wcm92ZSBsaWJibGtpZCBkZXRlY3Rpb24gb2YgSkZTIGFuZCBIUEZTIGZpbGVzeXN0ZW1zCisgICogVGhlIHRlc3QgSS9PIG1hbmFnZXIgaXMgbm93IGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQsIGJ1dCB0byBhdm9pZCBpdHMKKyAgICBvdmVyaGVhZCwgaXQgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIFRFU1RfSU9fRkxBR1Mgb3IgVEVTVF9JT19CTE9DSworICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0LgorICAqIEZpeCBmaWxlZnJhZydzIGlkZWFsIGV4dGVudCBjYWxjdWxhdGlvbiAoQ2xvc2VzOiAjNDU4MzA2KQorICAqIEZpeCBwb3N0aW5zdGFsbCBzY3JpcHRzIHdoZW4gdGhlIHVzZXIvZ3JvdXAgaXMgaW4gTERBUCAoQ2xvc2VzOiAjNDk3MDEwKQorICAqIEFkZCBJbmRvbmVzaWFuIGFuZCB1cGRhdGUgRnJlbmNoLCBQb2xpc2gsIER1dGNoLCBHZXJtYW4sIFN3ZWVkaXNoLAorICAgICAgIEN6ZWNoLCBhbmQgVmlldG5hbWVzZSBUcmFuc2xhdGlvbnMuICAoQ2xvc2VzOiAjMzEzNjk3LCAjNDAxMDkyKQorICAqIFVwZGF0ZS9jbGFyaWZpZWQgbWFuIHBhZ2VzCisgICogQWRkIGRwa2ctZ2Vuc3ltYm9scyBzdXBwb3J0IHRvIHRyYWNrIEFCSSBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJpZXMKKyAgKiBBZGQgbGludGlhbiBvdmVycmlkZXMgZm9yIHV1aWQtcnVudGltZSBhbmQgbGlidXVpZDEKKyAgKiBSZW1vdmUgKG5vIGxvbmdlciBuZWVkZWQpIGxpbnRpYW4gb3ZlcnJpZGVzIGZvciBlMmZzY2stc3RhdGljCisgICogQWRkIGRlYmlhbi93YXRjaCBmaWxlCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAwMSBTZXAgMjAwOCAxMTozMDoyMSAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuMC00KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIG1rZTJmcyB3aWxsIGlzc3VlIGEgd2FybmluZyBpZiBta2UyZnMuY29uZiBoYXNuJ3QgYmVlbiB1cGRhdGVkIGFuZAorICAgIHRoZSB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBhbiBleHQzLCBleHQ0LCBvciBleHQ0ZGV2IGZpbGVzeXN0ZW0sCisgICAgc2luY2UgaXQgZGVwZW5kcyBvbiB0aGUgbWtlMmZzLmNvbmYgZmlsZSBpbiBvcmRlciB0byBjcmVhdGUgdGhlCisgICAgZmlsZXN5c3RlbSBwcm9wZXJseSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmZWF0dXJlcy4KKyAgKiBGaXggdGhlIG1heGltdW0gam91cm5hbCBzaXplIG1lc3NhZ2UgaW4gbWtlMmZzIGFuZCB0dW5lMmZzIHRvIGJlCisgICAgY29uc2lzdGVudC9jb3JyZWN0LiAgKENsb3NlczogIzQ5MTYyMCkKKyAgKiBBZGQgZGV0ZWN0aW9uIGZvciBoZnN4IGZpbGVzeXN0ZW0gYW5kIGFkZCBsYWJlbCBhbmQgdXVpZCBkZXRlY3Rpb24KKyAgICBmb3IgaGZzLCBoZnNwbHVzLCBhbmQgaGZzeCBmaWxlc3lzdGVtcyBpbiBsaWJibGtpZC4KKyAgKiBGaXggY29zbWV0aWMgaXNzdWUgaW4gcmVzaXplMmZzIHdoZW4gYSBwcm9ncmVzcyBiYXIgZG9lc24ndCBmaW5pc2gKKyAgICB3aXRoIGEgbmV3bGluZSBmb3IgcGFzcyA0ICh3aGVuIHRoZSBpbm9kZSByZWZlcmVuY2VzIGFyZSB1cGRhdGVkKS4KKyAgKiBUZWFjaCByZXNpemUyZnMgdG8gbW92ZSBibG9ja3Mgd2hlbiBleHRlbnRzIGFyZSBwcmVzZW50ICh3aGVuCisgICAgc2hyaW5raW5nIGEgZmlsZXN5c3RlbSBhbmQvb3IgaWYgcmVzaXplX2lub2RlIGlzIG5vdCBwcmVzZW50KS4KKyAgKiBUZWFjaCByZXNpemUyZnMgdG8gd29yayBjb3JyZWN0bHkgd2l0aCB0aGUgdW5pbml0X2JnIHdoZW4gYmxvY2tzCisgICAgbmVlZCB0byBiZSBtb3ZlZCBvciBhbGxvY2F0ZWQuCisgICogRml4IGFuZCBvcHRpbWl6ZSBleHRlbnQgbWFuaXB1bGF0aW9uIGluIGxpYmV4dDJmcyBmb3IgcmVzaXplMmZzLgorICAqIEZpeCAiZHVtcGUyZnMgLWkiIGFuZCAiZGVidWdmcyAtaSIuICAoQ2xvc2VzOiAjNDk1ODMwKQorICAqIEZpeCByZXNpemUyZnMgaW5jb3JyZWN0bHkgbWFuYWdpbmcgZGlyZWN0b3J5IGluLXVzZSBjb3VudHMgd2hlbgorICAgIHNocmlua2luZyBmaWxlc3lzdGVtcyBhbmQgZGlyZWN0b3J5IGlub2RlcyBuZWVkIHRvIGJlIG1vdmVkLgorICAqIEZpeCBzcHVyaW91cyBlMmZzY2sgY29tcGxhaW50cyB3aXRoIGlfc2l6ZSB3aXRoIGV4dGVudHMgYW5kIGxhcmdlCisgICAgZmlsZXMgYW5kIHByZWFsbG9jYXRlZCBibG9ja3MuCisgICogTWFrZSBzdXJlIHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaXMgc2V0IGJ5IG1rZTJmcyBhbmQgYnkgbmV3IGlub2RlcworICAgIGNyZWF0ZWQgYnkgdGhlIGxpYmV4dDJmcyBpbiBnZW5lcmFsLgorICAqIEZpeCBpbmQvZGluZC90aW5kIHN0YXRpc3RpY3Mgd2hlbiBleHRlbnRzIGFyZSBwcmVzZW50LCBhbmQgYWRkCisgICAgZXh0ZW50IHRyZWUgZGVwdGggc3RhdGlzdGljcy4KKyAgKiBBZGQgYSBmcmFnbWVudGF0aW9uIHJlcG9ydCBleHRlbmRlZCBvcHRpb24gdG8gZTJmc2NrLgorICAqIEZpeCBibGtpZCBjYWNoZSB2YWxpZGF0aW9uIGFuZCBzb21lIHBvc3NpYmxlIGJsa2lkIGNyYXNoZXMKKyAgICAoQ2xvc2VzOiAjNDkzMjE2KQorICAqIFRlYWNoIGRlYnVnZnMncyBodHJlZSBjb21tYW5kIHRvIHdvcmsgd2l0aCBleHRlbnQtYmFzZWQgZGlyZWN0b3JpZXMuCisgICogSW1wcm92ZSB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgInR1bmUyZnMgLUkiLgorICAqIEZpeCBtaXNjZWxsYW5lb3VzIHN0cmluZ3MgYW5kIHVzYWdlIG1lc3NhZ2VzIHBvaW50ZWQgb3V0IGJ5IHRoZQorICAgIHRyYW5zbGF0b3JzLiAgKFRoYW5rcywgdHJhbnNsYXRvcnMhKQorICAqIEVuZm9yY2UgdGhhdCBta2UyZnMgd29uJ3QgYWxsb3cgZmVhdHVyZXMgZm9yIHJldmlzaW9uIDAgZmlsZXN5c3RlbXMuCisgICogT3B0aW1pemUgaW5vZGUgdGFibGUgYWxsb2NhdGlvbiBpbiBta2UyZnMgZm9yIGZsZXhfYmcgZmlsZXN5c3RlbXMuCisgICogVXBkYXRlL2NsYXJpZmllZCBtYW4gcGFnZXMKKyAgKiBGaXggbWlub3IgdHlwbyBpbiB1dWlkLXJ1bnRpbWUncyBkZWJpYW4gcGFja2FnZSBkZXNjcmlwdGlvbgorICAqIFdyYXAgZGViaWFuL2NvcHlyaWdodCBmaWxlcyB0byBhdm9pZCAibGluZSB0b28gbG9uZyIgbGludGlhbiB3YXJuaW5ncworCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFNhdCwgMjMgQXVnIDIwMDggMDg6NTY6NDcgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjAtMykgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBGaXggbWlwcy1zcGVjaWZpYyBGVEJGUyBwcm9ibGVtIGluIGRlYmlhbi9ydWxlcyBmaWxlCisgICogU3luY2hyb25pemUgc2VjdGlvbiBhbmQgcHJpb3JpdHkgbGV2ZWxzIGluIGNvbnRyb2wgZmlsZSB3aXRoIHRoZQorICAgIEZUUCBtYXN0ZXJzJyBvdmVycmlkZSBmaWxlLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMTUgSnVsIDIwMDggMTE6Mzg6NTkgLTA0MDAKKworZTJmc3Byb2dzICgxLjQxLjAtMikgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBEb24ndCB0cnkgdG8gY2hlY2sgdGhlIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW0gaWYgdGhlIEdEVF9DU1VNCisgICAgZmVhdHVyZSBpcyBub3QgcHJlc2VudC4gIChDbG9zZXM6ICM0OTA2MzcpCisgICogQWRkIGEgbmV3IGJsa2lkIC1MIG9wdGlvbiB3aGljaCBwcmV0dHktcHJpbnRzIHRoZSBjdXJyZW50bHkKKyAgICBhdmFpbGFibGUgYmxvY2sgZGV2aWNlcy4gIChDbG9zZXM6ICM0OTA1MjcpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAxMyBKdWwgMjAwOCAxOToxODowOCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDEuMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogTWFrZSBlMmZzY2sgZGV0ZWN0IGNvcnJ1cHRlZCBibG9jayBncm91cCBkZXNjcmlwdG9ycyB0aGF0IHdvdWxkCisgICAgY2F1c2UgaXQgdG8gcmVsb2NhdGUgaW5vZGUgdGFibGVzLCBjYXVzaW5nIG1vcmUgZGFtYWdlIHRvIHRoZQorICAgIGZpbGVzeXN0ZW0sIGFuZCBtYWtlIGl0IHRyeSB0aGUgYmFja3VwIHN1cGVyYmxvY2svYmxvY2sgZ3JvdXAKKyAgICBkZXNjcmlwdG9ycyBmaXJzdC4KKyAgKiBGaXggcmVzaXplMmZzIHRvIGNsZWFuIHVwIHRoZSByZXNpemVfaW5vZGUgaWYgYWxsIG9mIHRoZSByZXNlcnZlZAorICAgIGdkdCBibG9ja3MgYXJlIGNvbnN1bWVkIGR1cmluZyBhbiBvZmYtbGluZSByZXNpemUuCisgICogRW5hYmxlIGh1Z2VfZmlsZSwgZGlyX25saW5rLCBleHRyYV9pc2l6ZSBmZWF1dHJlcyBmb3IgbWtlMmZzIGFuZCB0dW5lMmZzLgorICAqIEVuYWJsZSBodWdlX2ZpbGUsIGRpcl9ubGluaywgZXh0cmFfaXNpemUsIGFuZCB1bmluaXRfYmcgYnkgZGVmYXVsdAorICAgIGluIG1rZTJmcy5jb25mLgorICAqIEZpeCBiYWRibG9ja3MgdGVybWlub2xvZ3kgaW4gbWFuIHBhZ2UgYW5kIHByb2dyYW0gb3V0cHV0LgorICAgIChDbG9zZXM6ICM0NDA5ODMsICM0NDA5ODEpCisgICogQ2xhcmlmeSBzdHJpcGUtd2lkdGggYW5kIHN0cmlkZS1zaXplIGluIG1rZTJmcyBtYW4gcGFnZS4gIChDbG9zZXM6ICM0ODc4NDkpCisgICogbWtlMmZzOiBEdW1iIGRvd24gZmlsZXN5c3RlbXMgZm9yIEdOVSBIdXJkIChDbG9zZXM6ICM0NzE5NzcpCisgICogQWRkIGJhc2gtc3RhdGljIHRvIHRoZSBsaXN0IG9mIHNoZWxscyByZWNvbW1lbmRlZCBmb3IgZTJmc2NrLXN0YXRpYworICAgIChDbG9zZXM6ICM0OTAwMDMpCisgICogbWtlMmZzOiBGaXggZmxleF9iZyBtZXRhZGF0YSBkZWZhdWx0IGxheW91dCB0byBhdm9pZCBhIGhvbGUgYmV0d2VlbgorICAgIHRoZSBiaXRtYXBzIGFuZCBpbm9kZSB0YWJsZXMuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAxMCBKdWwgMjAwOCAxNzoyNTozMiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDF+V0lQLTIwMDgtMDctMDctMSkgZXhwZXJpbWVudGFsOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24gKHByZS1yZWxlYXNlIGZvciBlMnNwcm9ncyAxLjQxKQorICAqIFVwZGF0ZSB0byBpbmRpY2F0ZSBjb21wbGlhbmNlIHdpdGggZGViaWFuIHBvbGljeSB2ZXJzaW9uIDMuOC4wLjAuCisgICogRml4IGUyZnNjayB0byBub3QgdHJ1bmNhdGUgdmFsaWQgZXh0ZW50IGZpbGVzIHRoYXQgYXJlIGxhcmdlciB0aGFuCisgICAgd2hhdCBpcyBzdXBwb3J0ZWQgYnkgaW5kaXJlY3QgZmlsZXMuCisgICogQWRkIC1kYmcgcGFja2FnZXMgd2hpY2ggY29udGFpbiB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAqIG1rZTJmczogUHJpbnQgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSB3aGVuIGEgZGV2aWNlIGlzIHRvbyBiaWcuCisgICAgKENsb3NlczogIzQ4ODY2MykKKyAgKiBDcmVhdGUgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2VzIHdpdGggYSBkZWZhdWx0IGJsb2Nrc2l6ZSBvZiA0aworICAqIEZpeCBidWcgaW4gYmFkYmxvY2tzIHdoaWNoIGNhdXNlZCBjcmFzaCB3aGVuIGxvdHMgb2YgLXQgcGF0dGVybnMgYXJlCisgICAgZ2l2ZW4uICAoQ2xvc2VzOiAjNDg3Mjk4KQorICAqIEZpeCBibGtpZCBoYW5kbGluZyBvZiBzdGFsZSBlbnRyaWVzLiAgKENsb3NlczogIzQ4Nzc1OCwgIzQ4Nzc4MykKKyAgKiBVcGRhdGUgVmlldG5hbWVzZSwgUG9saXNoLCBGcmVuY2gsIFNwYW5pc2gsIEdlcm1hbiwgQ2F0YWxhbiwKKyAgICBEdXRjaCwgQ3plY2ggdHJhbnNsYXRpb25zIGZyb20gdGhlIHRyYW5zbGF0aW9uIHByb2plY3QuCisgICogRml4IEZUQkZTIHByb2JsZW0gb24gTUlQUyAoQ2xvc2VzOiAjNDg3Njc1KQorICAqIEZpeCBidWcgaW4gbGlidXVpZDEucG9zdGluc3Qgd2hpY2ggd291bGQgY2F1c2UgaXQgdG8gYmxvdyB1cCBpZgorICAgIHRoZXJlIHdlcmUgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWxzIHNpZ24gaW4gL2V0Yy9hZGR1c2VyLmNvbmYuCisgICAgKENsb3NlczogIzQ4NzQ0MykKKyAgKiBVcGRhdGUvY2xhcmlmaWVkIG1hbiBwYWdlcy4gIChDbG9zZXM6ICMzOTMzMTMpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAwNyBKdWwgMjAwOCAxNjozMDo0MyAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDF+V0lQLTIwMDgtMDYtMTctMSkgZXhwZXJpbWVudGFsOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHZlcnNpb24gKHByZS1yZWxlYXNlIGZvciBlMmZzcHJvZ3MgMS40MSkKKyAgKiBOZXcgb3B0aW9ucyB0byBiYWRibG9ja3MgYWxsb3cgaXQgdG8gbGltaXQgaG93IHF1aWNrbHkgaXQgcmVhZHMKKyAgICBmcm9tIGRpc2sgKGZvciBiYWNrZ3JvdW5kIHNjcnViYmluZykgYW5kIGFib3J0IGFmdGVyIGEgZmluZGluZworICAgIGdpdmluZyBhIG51bWJlciBvZiBlcnJvcnMuCisgICogQWRkIHN1cHBvcnQgZm9yIGV4dDQgZmlsZXN5c3RlbSBmZWF0dXJlcy4gIChDbG9zZXM6ICMzODg0NTIsICM0MjU0NzcpCisgICogVHVuZTJmcyBjYW4gbWlncmF0ZSBhIGZpbGVzeXN0ZW0gZnJvbSB1c2luZyAxMjggYnl0ZSBpbm9kZXMgdG8KKyAgICBsYXJnZXIgaW5vZGUgc2l6ZXMgc28gdGhlIHVzZXIgY2FuIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgZXh0NCkKKyAgKiBFMmZzY2sgYW5kIG1rZTJmcyBjYW4gb3B0aW9uYWxseSByZWNvcmQgYW4gdW5kbyBsb2cgd2hpY2ggY2FuIGJlCisgICAgcmVwbGF5ZWQgYnkgdGhlIGUydW5kbyBwcm9ncmFtLgorICAqIEUyZnNjayB3aWxsIGRpc3BsYXkgYSBsZXNzIGNyeXB0aWMgbWVzc2FnZSB3aGVuIHRoZSBsYXN0IGNoZWNrIGZpZWxkCisgICAgaW4gdGhlIHN1cGVyYmxvY2sgaXMgaW4gdGhlIGZ1dHVyZS4gIChDbG9zZXM6ICM0NDYwMDUpCisgICogSW1wcm92ZSBibGtpZCBwcm9iZXMgZm9yIExWTSB2b2x1bWVzIGFuZCBzd2FwIHBhcnRpdGlvbnMKKyAgKiBNa2UyZnMgaGFzIGEgbXVjaCBtb3JlIHNvcGhpc3RpY2F0ZWQgc3lzdGVtIGZvciBjb250cm9sbGluZyB0aGUKKyAgICBwYXJhbWV0ZXJzIG9mIG5ld2x5IGNyZWF0ZWQgZmlsZXN5c3RlbXMuICBUaGUgLXQgb3B0aW9uIG5vdyBpcyB1c2VkCisgICAgdG8gc3BlY2lmeSB0aGUgZmlsZXN5c3RlbSB0eXBlLiAgU2VlIHRoZSBta2UyZnMgYW5kIG1rZTJmcy5jb25mIG1hbgorICAgIHBhZ2VzIGZvciBtb3JlIGRldGFpbHMuCisgICogUmVzaXplMmZzIHdpbGwgbm93IHByaW50IHRoZSBtaW5pbXVtIG5lZWRlZCBmaWxlc3lzdGVtIHNpemUgaWYgZ2l2ZW4KKyAgICB0aGUgLVAgb3B0aW9uLCBhbmQgd2lsbCByZXNpemUgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlCisgICAgc2l6ZSBpZiBnaXZlbiB0aGUgLU0gb3B0aW9uLgorICAqIEUyZnNjayBub3cgcGVyZm9ybXMgbW9yZSBleHRlbnNpdmUgYW5kIGNhcmVmdWwgY2hlY2tzIG9mIGV4dGVuZGVkCisgICAgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhlIGlub2RlLgorICAqIE1rZTJmcyB3aWxsIGFsd2F5cyBtYWtlIHN1cmUgdGhhdCBsb3N0K2ZvdW5kIGFsd2F5cyBoYXMgYXQgbGVhc3QgMgorICAgIGJsb2NrcywgZXZlbiBmb3IgZmlsZXN5c3RlbXMgd2l0aCB2ZXJ5IGxhcmdlIGJsb2Nrc2l6ZXMgKGkuZS4sIDY0a2IpLgorICAqIFRoZSBkZWJ1Z2ZzICJscyIgY29tbWFuZCBub3cgc3VwcG9ydHMgdGhlIC1wIG9wdGlvbiwgd2hpY2ggY2F1c2VzCisgICAgZmlsZW5hbWVzIHRvIGJlIHByaW50ZWQgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzLgorICAqIEZpeCBhIHBvdGVudGlhbCBvZmYtYnktb25lIGJ1ZmZlciBvdmVyZmxvdyBpbiBlMmltYWdlCisgICogVGhlIGNoYXR0ciBwcm9ncmFtIHdpbGwgbm93IHJldHVybiBhIG5vbi16ZXJvIGV4aXQgY29kZSBpbiBjYXNlIG9mCisgICAgZmFpbHVyZXMuCisgICogVGhpcyB2ZXJzaW9uIG9mIGUyZnNwcm9ncyByZW1vdmVzIHN1cHBvcnQgZm9yIGxlZ2FjeSBiaWctZW5kaWFuCisgICAgZmlsZXN5c3RlbXMgYW5kIGZvciBNQVNJWCBmaWxlc3lzdGVtcy4KKyAgKiBBZGQgSS9PIHN0YXRpc3RpY3MgcmVwb3J0aW5nIHRvIGUyZnNjay4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDE3IEp1biAyMDA4IDIzOjU3OjA4IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MC4xMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIENoYW5nZSBta2UyZnMsIHR1bmUyZnMgYW5kIHJlc2l6ZTJmcyB0byB1c2UgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uCisgICAgd2hlbiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHJlc2VydmVkIGJsb2Nrcy4gIChDbG9zZXM6ICM0NTI2MzkpCisgICogVXBkYXRlIFNwYW5pc2ggYW5kIENhdGFsYW4gdHJhbnNsYXRpb25zLgorICAqIEZpeCBleHQyZnNfc3dhcHsxNiwzMiw2NH0gZm9yIGV4dGVybmFsIGFwcGxpY2F0aW9ucy4gIChDbG9zZXM6ICM0ODQ4NzkpCisgICogSW1wcm92ZSB1dWlkLXJ1bnRpbWUgcGFja2FnZSBkZXNjcmlwdGlvbi4gIChDbG9zZXM6ICM0ODM5NjIpCisgICogSW1wcm92ZSBlMmZzcHJvZ3MgcGFja2FnZSBkZXNjcmlwdGlvbi4gIChDbG9zZXM6ICM0ODMwMjMpCisgICogQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyBaRlMgdm9sdW1lcyB0byBsaWJibGtpZC4KKyAgKiBDbGFyaWZ5IGRlYnVnZnMgbWFuIHBhZ2UuICAoQ2xvc2VzOiAjNDg2NDYzKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMTcgSnVuIDIwMDggMjE6NTk6MjEgLTA0MDAKKworZTJmc3Byb2dzICgxLjQwLjEwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IGEgdmVyeSByYXJlIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gYnVnIGluIGUyZnNjaydzIGpvdXJuYWwKKyAgICByZXBsYXkuCisgICogVXBkYXRlZCBHZXJtYW4sIER1dGNoLCBTd2VlZGlzaCwgYW5kIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLgorICAqIEZvcmNlIGJsa2lkIHRvIHJldmFsaWRhdGUgYSBkZXZpY2UgaWYgaXRzIG10aW1lIGlzIG5ld2VyIHRoYW4gdGhlCisgICAgbGFzdCB2YWxpZGF0aW9uIHRpbWUgaW4gdGhlIGNhY2hlLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMjEgTWF5IDIwMDggMTM6MzU6MTIgLTA0MDAKKworZTJmc3Byb2dzICgxLjQwLjktMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggZnNjayBzbyB0aGF0IGlmIG11bHRpcGxlIGZpbGVzeXN0ZW1zIGFyZSBiZWluZyBjaGVja2VkIGluCisgICAgICBwYXJhbGxlbCwgdGhlIHByb2dyZXNzIGJhciBmb3Igc3Vic2VxdWVudCBmaWxlc3lzdGVtcyB3aWxsIGJlCisgICAgICBjb3JyZWN0bHkgZGlzcGxheWVkLiAgKENsb3NlczogIzQzMjg2NSkKKyAgKiBGaXggZnNjayAtQ24gZm9yIG4hPTAgZm9yIGJldHRlciBVYnVudHUgYm9vdC10aW1lIHN1cHBvcnQKKyAgKiBkZWJ1Z2ZzOiBEb24ndCBib3RoZXIgdXNpbmcgYSBwYWdlciBvZiBzdGRvdXQgaXMgbm90IGEgdHR5CisgICogRml4IHR1bmUyZnMgYW5kIGRlYnVnZnMgdG8gY29ycmVjdGx5IHBhcnNlIHRpbWUgc3RyaW5ncyBkdXJpbmcKKyAgICAgIGRheWxpZ2h0IHNhdmluZ3MgdGltZS4gIChDbG9zZXM6ICM0NzE4ODIpCisgICogVGVhY2ggZnNjayB0byB0cmVhdCBleHQ0IGFuZCBleHQ0IGZpbGVzeXN0ZW1zIGFzIGV4dCogZmlsZXN5c3RlbXMKKyAgKiBMb2dzYXZlIHdpbGwgbm93IHByb3BhZ2F0ZSBTSUdJTlQgYW5kIFNJR1RFUk0gc2lnbmFscyB0byBpdHMgY2hpbGQKKyAgICAgIHByb2Nlc3MuCisgICogTWtlMmZzIHdpbGwgbm90IGFsbG93IHRoZSBpbGxvZ2ljYWwgY29tYmluYXRpb24gb2YgdGhlIHJlc2l6ZV9pbm9kZQorICAgICAgYW5kIG1ldGFfYmcgZmlsZXN5c3RlbSBmZWF0dXJlcy4KKyAgKiBVc2UgVUlEL0dJRCByYW5nZXMgZnJvbSBhZGR1c2VyLmNvbmYgaWYgcHJlc2VudCwgZXZlbiB0aG91Z2ggd2UKKyAgICAgIGRvbid0IHVzZSBhZGR1c2VyIHRvIGFkZCB1c2Vycy9ncm91cHMuICAoQ2xvc2VzOiAjNDczMTc5KQorICAqIFVwZGF0ZWQgR2VybWFuLCBDemVjaCwgRHV0Y2gsIEZyZW5jaCwgUG9saXNoLCBTd2VlZGlzaCwgYW5kCisgICAgICBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KKyAgKiBVcGRhdGUvY2xhcmlmaWVkIHRoZSBta2UyZnMgbWFuIHBhZ2UKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDI3IEFwciAyMDA4IDAwOjM1OjIwIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MC44LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogT25lIG1vcmUgYmlnLWVuZGlhbiBzd2FwIGZpeCBuZWVkZWQgZm9yIHJlc2l6ZTJmcyB0byB3b3JrIGNvcnJlY3RseQorICAgICAgd2l0aCBpbi1pbm9kZSBleHRlbmRlZCBhdHRyaWJ1dGVzLgorICAqIEZpeCBtaW5vciBzZWN1cml0eSBpc3N1ZXMgaWRlbnRpZmllZCBpbiB1dWlkZC4KKyAgKiBSZW1vdmUgZTJmc3Byb2dzIHByZWluc3RhbGwgc2NyaXB0IHdoaWNoIGNvbnRhaW5lZCBzdHVmZiBub3QgbmVlZGVkCisgICAgICBpbiB3ZWxsIG92ZXIgdHdvIHN0YWJsZSByZWxlYXNlcy4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksIDE0IE1hciAyMDA4IDE0OjI1OjU0IC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MC44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IGUyaW1hZ2UgLUkgc28gaXQgd29ya3Mgb24gaW1hZ2UgZmlsZXMgd2hpY2ggYXJlIGxhcmdlciB0aGFuIDJHQi4KKyAgKiBGaXggZTJmc2NrJ3MgaGFuZGxpbmcgb2YgZGlyZWN0b3J5IGlub2RlcyB3aXRoIGEgY29ycnVwdCBzaXplIGZpZWxkLgorICAqIEZ1bGx5IGZpeCBhIHJlc2l6ZTJmcyBidWcgd2hlcmUgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBsYXJnZSBpbm9kZXMKKyAgICAgIGNvdWxkIGdldCBkcm9wcGVkIG9uIGJpZy1lbmRpYW4gc3lzdGVtcy4KKyAgKiBVcGRhdGUgQ3plY2gsIER1dGNoLCBQb2xpc2gsIFN3ZWVkaXNoLCBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMuCisgICogU2lnbmlmaWNhbnRseSB1cGRhdGVkIEdlcm1hbiB0cmFuc2xhdGlvbiEgIFRoYW5rcyB0byBQaGlsaXBwIFRob21hcworICAgIGZyb20gTm92ZWxsIGZvciBzdGVwcGluZyB1cCB0byBiZSBvdXIgbmV3IEdlcm1hbiB0cmFuc2xhdGlvbgorICAgIG1haW50YWluZXIhICAoQ2xvc2VzOiAjMzAyNTEyLCAjMzcwMjQ3LCAjNDAxMDkyLCAjNDEyODgyKQorICAqIEZpeGVkIG1rZTJmcyBtYW4gcGFnZSB0byBkb2N1bWVudCBuZXcgZGVmYXVsdCBpbm9kZSBzaXplLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFRodSwgMTMgTWFyIDIwMDggMjA6MDA6MDkgLTA0MDAKKworZTJmc3Byb2dzICgxLjQwLjctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIHR1bmUyZnMgbm8gbG9uZ2VyIHdpbGwgcmVtb3ZlIHRoZSBzcGFyc2Vfc3VwZXIgZmVhdHVyZSwgYXMgaXQgaXMgZGFuZ2Vyb3VzCisgICogVXBkYXRlL2NsYXJpZmllZCB2YXJpb3VzIG1hbiBwYWdlcworICAqIEZpeCBidWcgd2hlcmUgbGFyZ2Ugbm9kZXMgd2VyZSBub3QgZ2V0dGluZyBmdWxseSBjb3BpZWQgd2hlbgorICAgICAgc2hyaW5raW5nIGEgZmlsZXlzdGVtIHVzaW5nIHJlc2l6ZTJmcy4KKyAgKiBBbGxvdyBta2UyZnMgYW5kIHR1bmUyZnMgdG8gbWFuaXB1bGF0ZSB0aGUgbGFyZ2VfZmlsZSBmZWF0dXJlIGZsYWcKKyAgKiBTdXBwcmVzcyBmc2NrJ3Mgd2FybmluZyBtZXNzYWdlIGFib3V0IGFuIG9sZC1zdHlsZSBmc3RhYiBpZiB0aGUKKyAgICAgIGZzdGFiIGZpbGUgaXMgZW1wdHkuICAoQ2xvc2VzOiAjNDY4MTc2KQorICAqIEUyZnNjayB3aWxsIG5vIGxvbmdlciBjbGVhciB0aGUgbGFyZ2VfZmlsZXMgZmVhdHVyZSBmbGFnCisgICAgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbGFyZ2UgZmlsZXMgaW4gdGhlIHN5c3RlbS4KKyAgKiBGaXggYmxraWQgY29kZSB0byBhdm9pZCBzZWdmYXVsdGluZyB3aGVuIGEgZGV2aWNlIG1hcHBlciB2b2x1bWUKKyAgICAgIGRpc2FwcGVhcnMgb3V0IGZyb20gdW5kZXIgaXQuCisgICogRW5oYW5jZSBlMmZzY2sncyByZXBvcnRpbmcgb2YgdW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSBmZWF0dXJlcworICAqIEZpeCBkdW1wZTJmcyBjb21tYW5kIHN5bnRheCBmb3IgZXhwbGljaXQgc3VwZXJibG9jay9ibG9ja3NpemUgcGFyYW1ldGVycworICAqIFRlYWNoIHR1bmUyZnMgdG8gY2xlYXIgdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlIGZsYWcKKyAgKiBGaXggbGlidXVpZDEgcG9zdGluc3RhbGwgc2NyaXB0IHRvIGV4cGxpY2l0bHkgcGFzcyAxMDAgdG8gVUlEX01JTgorICAgICAgYW5kIEdJRF9NSU4sIHRvIG1ha2UgaXQgY2xlYXIgd2UgYXJlIG5vdCB0cnlpbmcgdG8gYWxsb2NhdGUgYW4KKyAgICAgIHVpZC9naWQgaW4gdGhlIGdsb2JhbGx5IHJlc2VydmVkIHJhbmdlLiAgKENsb3NlczogIzQ2NjkyOSkKKyAgKiBGaXggbWVtb3J5IGxlYWsgaW4gZXh0MmZzX2FsbG9jX2Jsb2NrKCkKKyAgKiBUZWFjaCBibGtpZCB0byByZWNvZ25pemUgTFZNMiBwaHlzaWNhbCB2b2x1bWVzCisgICogQWRkIHN1cHBvcnQgdG8gZHVtcGUyZnMsIG1rZTJmcywgYW5kIHR1bmUyZnMgZm9yIHNwZWNpZnlpbmcgYW5kCisgICAgICBwcmludGluZyB0aGUgUkFJRCBzdHJpZGUgYW5kIHN0cmlwZSB3aWR0aC4KKyAgKiBBZGQgc3VwcG9ydCBmb3IgbmV3IHN1cGVyYmxvY2sgZmllbGRzIHRvIGRlYnVnZnMncyBzZXRfc3VwZXJfdmFsdWUgY29tbWFuZAorICAqIFRlYWNoIGRlYnVnZnMgdG8gcHJpbnQgIm1vc3RseS1wcmludGFibGUiIHhhdHRyIHN0cmluZ3MsIHN1Y2ggYXMgaXMKKyAgICAgIHVzZWQgYnkgU0VMaW51eC4KKyAgKiBBZGQgc3VwcG9ydCBpbiBmc2NrIHRvIGlnbm9yZSBtb3VudGVkIGZpbGVzeXN0ZW1zIHdoZW4gZ2l2ZW4gdGhlIC1NIG9wdGlvbgorICAqIEZpeCB1dWlkZCBzbyBpdCBjcmVhdGVzIHRoZSBwaWQgZmlsZSB3aXRoIHRoZSBjb3JyZWN0IHBpZCBudW1iZXIKKyAgKiBVcGRhdGUgQ3plY2gsIER1dGNoLCBQb2xpc2gsIFN3ZWVkaXNoLCBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMKKyAgICAgIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAyOCBGZWIgMjAwOCAyMjoyNzozOSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDAuNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogQWRkIHN1cHBvcnQgZm9yIHJldHVybmluZyBsYWJlbHMgZm9yIFVERiBmaWxlc3lzdGVtcyBpbiB0aGUgYmxraWQKKyAgICAgIGxpYnJhcnkuCisgICogRml4IGJ1ZyBpbiB0aGUgYmxraWQgbGlicmFyeSB3aGVyZSBjYWNoZWQgZmlsZXN5c3RlbXMgd2FzIG5vdCBiZWluZworICAgICAgZmx1c2hlZCB3aGVuIG9wZW5pbmcgVVNCIGRldmljZXMgcmV0dXJuZWQgdGhlIGVycm9yIEVOT01FRElVTS4KKyAgICAgIChDbG9zZXM6ICM0NjM3ODcpCisgICogQWRkIGxvZ2ljIHRvIHRoZSBibGtpZCBsaWJyYXJ5IHRvIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHdoZXRoZXIgYQorICAgICAgZmlsZXN5c3RlbSBzaG91bGQgYmUgbW91bnRlZCBhcyBleHQ0IG9yIGV4dDRkZXYsIGFzIGFwcHJvcHJpYXRlLgorICAqIEFsbG93IHR1bmUyZnMgdG8gc2V0IGFuZCBjbGVhciB0aGUgdGVzdF9mcyBmbGFnIG9uIGV4dDQgZmlsZXN5c3RlbXMuCisgICogRG9jdW1lbnQgdGhlIEJMS0lEX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIGxpYmJsa2lkIG1hbiBwYWdlCisgICogVXBkYXRlIFZpZXRuYW1lc2UgYW5kIEN6ZWNoIHRyYW5zbGF0aW9ucyBmcm9tIHRoZSB0cmFuc2xhdGlvbiBwcm9qZWN0CisgICogRml4IGRlcGVuZGVuY3kgcHJvYmxlbSBjYXVzZWQgYnkgZHBrZyAxLjE0LjE2IChDbG9zZXM6ICM0MzYwNTgpCisgICogVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHRvIGZpeCBhIHRoZW9yZXRpY2FsIHJhY2UgY29uZGl0aW9uIGlmIHR3bworICAgICAgdGhyZWFkcyB0cnkgdG8gZm9ybWF0IGFuIHVua25vd24gZXJyb3IgY29kZSBhdCB0aGUgc2FtZSB0aW1lIGluCisgICAgICB0aGUgY29tX2VyciBsaWJyYXJ5LgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTAgRmViIDIwMDggMDA6MDY6MDIgLTA1MDAKKworZTJmc3Byb2dzICgxLjQwLjUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXggZGViaWFuL2NvbnRyb2wgYW5kIGRlYmlhbi9ydWxlcyBzbyB0aGF0IHRoZXkgd29yayBjb3JyZWN0bHkKKyAgICBhZnRlciBhIGNoYW5nZSBpbiBkcGtnLWdlbmNvbnRyb2wncyBiZWhhdmlvciBhZnRlciB2ZXJzaW9uIDEuMTQuMTYKKyAgICBvZiBkcGtnLiAgVGhpcyBmaXhlcyBiYWQgdmVyc2lvbiBkZXBlbmRlbmNpZXMgZm9yIGNvbWVyci1kZXYsCisgICAgdXVpZC1kZXYgYW5kIHNzLWRldi4gVGhhbmtzIHRvIERvbiBBcm1zdHJvbmcgZm9yIHRoZSBleHBsYW5hdGlvbiBhbmQKKyAgICBNYXJnYXJpdHkgTWFudGVyb2xhIGZvciBhIHByb3Bvc2VkIHBhdGNoLiAoQ2xvc2VzOiAjNDYzMDU4KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMzAgSmFuIDIwMDggMDc6MTc6MjcgLTA1MDAKKworZTJmc3Byb2dzICgxLjQwLjUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZS4KKyAgKiBNa2UyZnMgd2lsbCBub3cgY3JlYXRlIG5ldyBmaWxlc3lzdGVtcyB3aXRoIDI1NiBieXRlIGlub2RlcyBhbmQgdGhlCisgICAgICBleHRfYXR0ciBmZWF0dXJlIGZsYWcgYnkgZGVmYXVsdC4gIFRoaXMgYWxsb3dzIGZvciBtdWNoIGJldHRlcgorICAgICAgZnV0dXJlIGNvbXBhdGliaXR5IHdpdGggZXh0NCBhbmQgc3BlZWRzIHVwIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKyAgICAgIGV2ZW4gb24gZXh0MyBmaWxlc3lzdGVtcy4KKyAgKiBUZWFjaCBta2UyZnMgYW5kIHR1bmUyZnMgdG8gc2V0IGEgInRlc3RfZnMiIGZsYWcsIHdoaWNoIGluZGljYXRlcworICAgICAgdGhhdCBpdCBpcyBvayB0byB1c2UgdGhlIGZpbGVzeXN0ZW0gb24gaW4tZGV2ZWxvcG1lbnQga2VybmVsCisgICAgICBjb2RlIChpLmUuLCBleHQ0ZGV2KQorICAqIEUyZnNjayBub3cgb3B0aW1pemVzIG5vbi1odHJlZSBkaXJlY3RvcmllcyBieSBzb3J0aW5nIHRoZW0gYnkgaW5vZGUKKyAgICAgIG51bWJlci4KKyAgKiBBZGQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIEhGUysgYW5kIGV4dDQvZXh0NGRldiBmaWxlc3lzdGVtcyBpbiBibGtpZAorICAqIEZpeCBibGtpZCdzIG50ZnMgVVVJRCBoYW5kbGluZyBzbyBpdCBpcyBjb21wYXRpYmxlIHdpdGggdm9sX2lkCisgICogQXZvaWQgYSBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gd2hlbiBibGtpZCB0cmllcyB0byBwcm9iZSBhIGNvcnJwdAorICAgICAgcmVpc2VyZnMgZmlsZXN5c3RlbS4KKyAgKiBGaXggcG90ZW50aWFsIG92ZXJmbG93IHByb2JsZW0gaW4gZTJpbWFnZSBpZiB0aGUgZGV2aWNlIG5hbWUgaXMKKyAgICAgIHRvbyBsb25nLgorICAqIENhdXNlIGUyaW1hZ2UgdG8gZXhpdCBpbW1lZGlhdGVseSB3aXRoIGFuIGVycm9yIG1lc3NhZ2Ugb24gYSBkaXNrCisgICAgICBmdWxsIHNpdHVhdGlvbi4KKyAgKiBGaXggYSBtaW5vciB0eXBvcyBpbiB0aGUgcmVzaXplMmZzIGFuZCB1dWlkZCBtYW5wYWdlcy4KKyAgKiBFMmZzY2sgd2lsbCBubyBsb25nZXIgYmFja3VwIHN1cGVyYmxvY2tzIHdoZW4gdGhlIGtlcm5lbCBtYWtlcworICAgICAgY2VydGFpbiAic2FmZSIgZmVhdHVyZSBzZXQgY2hhbmdlcyBiZWhpbmQgdGhlIHVzZXIncyBiYWNrLgorICAqIEZpeCBkZWJ1Z2ZzJ3MgbHNkZWwgY29tbWFuZCBzbyBpdCB3b3JrcyBvbiBsYXJnZSBmaWxlcworICAqIEFsbG93IGEgdXNlciB0byB1bmRlbGV0ZSBhbiBpbm9kZSB3aXRoIGxpbmtpbmcgdG8gYSBkZXN0aW5hdGlvbgorICAgICAgZGlyZWN0b3J5LgorICAqIFVwZGF0ZSBTd2VkaXNoIHRyYW5zbGF0aW9uIGZpbGUgZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdAorICAqIFRoZSBsaWJ1dWlkMSBhbmQgdXVpZC1ydW50aW1lIHBhY2thZ2VzIHJlcXVpcmVzIHBhc3N3ZCBwYWNrYWdlLCBzbworICAgICAgZGVjbGFyZSBpdCBhcyBhIGRlcGVuZGVuY3kuICAoQ2xvc2VzOiAjNDU5NDAzKQorICAqIEZpeCBhIEZUQkZTIHByb2JsZW0gb24geDg2XzY0IGNhdXNlZCBieSB0aGUgZmFjdCB0aGF0IGRpZXRsaWJjCisgICAgICBkb2Vzbid0IHByb3ZpZGUgbGxzZWVrIG9uIHRoZSB4ODZfNjQuICAoQ2xvc2VzOiAjNDU5NjE0KQorICAqIERvbid0IHVzZSBkaWV0bGliYyBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0IChDbG9zZXM6ICM0NTk0NzUpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAyNyBKYW4gMjAwOCAxNjo1NzozNCAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDAuNC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1ha2Ugc3VyZSB0aGF0IHByb2dyYW1zIGxpa2UgdHVuZTJmcywgd2hlbiBtb2RpZnlpbmcgYSBtb3VudGVkCisgICAgICBmaWxlc3lzdGVtIGRvIG5vdCB3cml0ZSB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIHdpdGggdGhlCisgICAgICBORUVEU19SRUNPVkVSWSBmbGFnLCB0byBhdm9pZCBlMmZzY2sgZnJvbSBuZWVkbGVzc2x5IGZvcmNpbmcgYQorICAgICAgZnVsbCBmc2NrIGJlY2F1c2UgaXQgdGhpbmtzIHRoZSBmZWF0dXJlIGZsYWdzIG5lZWQgdG8gYmUgYmFja2VkIHVwCisgICAgICBmcm9tIHRoZSBtYXN0ZXIgdG8gdGhlIGJhY2t1cCBzdXBlcmJsb2Nrcy4gIChDbG9zZXM6ICM0NTQ5MjYpCisgICogSW1wcm92ZSB0aW1lLWJhc2VkIFVVSUQgZ2VuZXJhdGlvbiB0byBndWFyYW50ZWUgdW5pcXVlbmVzcyBldmVuIHdoZW4KKyAgICAgIFVVSUQncyBhcmUgYmVpbmcgZ2VuZXJhdGVkIGF0IHZlcnkgaGlnaCByYXRlcyBvbiBTTVAgc3lzdGVtcy4gIFRvCisgICAgICBkbyB0aGlzIHdlIHVzZSBhbiBvcHRpb25hbCBzZXR1aWQgaGVscGVyIGRhZW1vbiAodXVpZGQpIHdoaWNoIGlzCisgICAgICBzdGFydGVkIGJ5IGxpYnV1aWQgd2hlbiBpdCBpcyBuZWVkZWQuICBUaGUgdXVpZGQgZGFlbW9uIGlzCisgICAgICBwYWNrYWdlZCBpbiB0aGUgKG5ldykgdXVpZC1ydW50aW1lIHBhY2thZ2UsIHdoaWNoIG5vdyBhbHNvIGluY2x1ZGVzCisgICAgICB0aGUgdXVpZGdlbiBwcm9ncmFtICh3aGljaCBoYWQgYmVlbiBwcmV2aW91c2x5IGJlZW4gaW5jbHVkZWQgYXMKKyAgICAgIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlKS4KKyAgKiBGaXggZnNjayB0byBvbmx5IHRyZWF0ICcjJyBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgL2V0Yy9mc3RhYgorICAgICAgbGluZXMgYXMgc3RhcnRpbmcgYSBjb21tZW50LiAgVGhpcyBhdm9pZHMgc3B1cmlvdXMgd2FybmluZ3MgcHJpbnRlZAorICAgICAgZm9yIGZpbGVzeXN0ZW1zIHN1Y2ggYXMgZnVzZSB0aGF0IG9mdGVuIHVzZSAnIycgYXMgcGFydCBvZiB0aGUKKyAgICAgIGZpbGVzeXN0ZW0gc3BlY2lmaWVyIChpLmUuLCB3ZGZzI2h0dHBzOi8vZGF2Lmhvc3Rlci5jb20vZm9vKS4KKyAgKiBFbmhhbmNlIHRoZSBibGtpZCBwcm9ncmFtIHRvIHByZXR0eS1wcmludCBjb250cm9sIGFuZCBtZXRhCisgICAgICBjaGFyYWN0ZXJzIHRvIGF2b2lkIGdhcmJhZ2UgZmlsZXN5c3RlbSBsYWJlbHMgZnJvbSBzY3Jld2luZyB1cCB0aGUKKyAgICAgIHVzZXIncyB0ZXJtaW5hbAorICAqIEZpeCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgcGFzc2VkIHRvIG1hbGxvYygpIGluIHJlc2l6ZTJmcworICAqIFVwZGF0ZSBEdXRjaCwgUG9saXNoLCBhbmQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMgZnJvbSB0aGUKKyAgICAgIFRyYW5zbGF0aW9uIFByb2plY3QuICBSZW1vdmUgdGhlIFJ3YW5kYW4gdHJhbnNsYXRpb24gdXBvbiBhZHZpY2UKKyAgICAgIG9mIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0LgorICAqIEZpeCBjcm9zcy1jb21waWxhdGlvbiBzdXBwb3J0IGZvciBub24tTGludXggYXJjaGl0ZWN0dXJlcworICAgICAgICAoQ2xvc2VzOiAjNDUxMTcyLCAjNDM3NzIwKQorICAqIENsYXJpZmllZCBhbmQgaW1wcm92ZWQgbWFuIHBhZ2VzIChDbG9zZXM6ICM0NDQ4ODMsICM0NDE4NzIpCisgICogRml4IHBvdGVudGlhbCBkaXZpZGUgYnkgemVybyBlcnJvciB3aGVuIGxpYmJsa2lkIHRyaWVkIHByb2JpbmcgYW4KKyAgICAgIGludmFsaWQgRkFUIGZpbGVzeXN0ZW0uCisgICogTWFrZSBlcnJvcl9tZXNzYWdlKCkgaW4gbGliY29tX2VyciBEVFJUIHdoZW4gd2hlbiBhIDY0LWJpdCBzaWduLWV4dGVuZGVkCisgICAgICBlcnJvciBjb2RlIGlzIHBhc3NlZCB0byBpdC4KKyAgKiBCdWlsZCB0aGUgZTJmc2NrLXN0YXRpYyBwYWNrYWdlIHNvIHRoYXQgZTJmc2NrLnN0YXRpYyB3aWxsIG5vdCB1c2UKKyAgICAgIFRMUyBhbmQgaGVuY2Ugd2lsbCBydW4gY29ycmVjdGx5IG9uIGJhY2stbGV2ZWwgRGViaWFuIHN5c3RlbXMKKyAgICAgIHVzaW5nIGEgMi40IExpbnV4IGtlcm5lbC4gIChDbG9zZXM6ICM0NTgwMTcpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAzMSBEZWMgMjAwNyAyMjo0MDo0MiAtMDUwMAorCitlMmZzcHJvZ3MgKDEuNDAuMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogbGliZXh0MmZzOiBBZGQgY2hlY2tzIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgcGFzc2VkIHRvCisgICAgICBtYWxsb2MoKS4gIEZpeGVzIHNlY3VyaXR5IGlzc3VlIHJlbGF0ZWQgdG8gWGVuJ3MgcHlncnViOiBDVkUtMjAwNy01NDk3CisgICogbGlic3M6IEZpeCBwYXJhbGxlbCBidWlsZCBmYWlsdXJlCisgICogZTJmc3Byb2dzOiBmaXggYmxraWQgd2hvbGUtZGlzayBzY2FubmluZyBoZXVyaXN0aWNzCisgICogbGliZXh0MmZzOiBGaXggYSBjb3JuZXIgY2FzZSBidWcgaW4gZXh0MmZzX3VubGluaworICAqIGZpeCBjaGVja19tbnRlbnRfZmlsZSgpIHRvIHBhc3MgbW9kZSBmb3Igb3BlbihPX0NSRUFUKQorICAqIEZpeCBlcnJvcnMgaW4gdGVzdF9zcy5jIHNvIGl0IGNhbiBiZSBhbiBleGFtcGxlIGFwcGxpY2F0aW9uIGFuZCB0ZXN0IGNhc2UKKyAgKiBlMmltYWdlIGluIHJhdy1tb2RlIGFwcGVuZHMgYW4gZXh0cmEgYnl0ZSB0byBpbWFnZS1maWxlCisgICogRml4IHR5cG8gaW4gdGhlIHN1bW1hcnkgc2VjdGlvbiBvZiB0aGUgYmxraWQgbWFuIHBhZ2UKKyAgKiBta2UyZnM6IENoYW5nZSB1c2FnZSBtZXNzYWdlIHRvIHVzZSAtRSBpbnN0ZWFkIC1SLCB3aGljaCBpcyBkZXByZWNhdGVkCisgICogbGliYmxraWQ6IHJlY29nbml6ZSBzcXVhc2hmcyBmaWxlc3lzdGVtcyBvbiBCRSBzeXN0ZW1zLgorICAqIGxpYmJsa2lkOiBkZXRlY3Qgc3F1YXNoZnMKKyAgKiBlMmZzY2s6IGJhY2t1cCBzdXBlcmJsb2NrcyBpZiBrZXkgY29uc3RhbnRzIGhhdmUgY2hhbmdlZAorICAqIGUyZnNjazogdXBkYXRlIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MgaWYgdGhlIGZlYXR1cmUgYml0bWFza3MgYXJlIGNoYW5nZWQKKyAgKiBleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlOiBGaXggQUJPUlQgcHJvcGFnYXRpb24gbG9naWMKKyAgKiBsaWJibGtpZDogQWRkIG1vcmUgbWFnaWMgbnVtYmVycyB0aGF0IG1pZ2h0IG1lYW4gdGhlcmUgaXMgYSBGQVQgZmlsZXN5c3RlbQorICAqIGUyZnNjazogRG9uJ3QgbWFyayB0aGUgZmlsZXN5c3RlbSBpbnZhbGlkIGJlY2F1c2Ugb2YgdGltZSBlcnJvcnMKKyAgKiBXb3JrIGFyb3VuZCBsYW1lIFVidW50dSBpbml0IHNjcmlwdHMgLyBpbnN0YWxsZXIgYnVncworICAqIGZzY2s6IElnbm9yZSAvZXRjL2ZzdGFiIGVudHJpZXMgZm9yIGJpbmQgbW91bnRzCisgICogZTJmc2NrOiBJZiB0aGUgc3VwZXJibG9jayBpcyBjb3JydXB0LCBhdXRvbWF0aWNhbGx5IHJldHJ5IHdpdGggdGhlIGJhY2t1cCBzYgorICAqIERvbid0IGNyYXNoIGlmIHNfaW5vZGVfc2l6ZSBpcyB6ZXJvCisgICogVXNlIHNzY2FuZiBpbnN0ZWFkIG9mIGF0b2kgd2hlbiBwYXJzaW5nIGUyZnNjayBvcHRpb25zCisgICogQWRkIENhdGFsYW4gdHJhbnNsYXRpb24gYW5kIHVwZGF0ZSBTcGFuaXNoLCBGcmVuY2gsIGFuZCBEdXRjaAorICAgICAgdHJhbnNsYXRpb25zIGZyb20gdGhlIFRyYW5zbGF0aW9uIFByb2plY3QuICAoQ2xvc2VzOiAjNDExNTYyKQorICAqIEZpeCB0eXBvIGFuZCBjbGFyaWZ5IHRoZSB1dWlkZ2VuIG1hbiBwYWdlCisgICogTWFrZSBzdXJlICRwcmVmaXgvZXRjIGlzIGNyZWF0ZWQgYmVmb3JlIGluc3RhbGxpbmcgbWtlMmZzLmNvbmYKKyAgKiBlMmZzY2s6IEFsbG93IGlfc2l6ZSB0byBiZSByb3VuZGVkIHVwIHRvIHRoZSBzaXplIG9mIGEgVk0gcGFnZQorICAqIEZpeCBhIGJ1ZyBpbiBleHQyZnNfaW5pdGlhbGl6ZSgpIHdoaWNoIGNhdXNlcyBta2UyZnMgdG8gZmFpbCB3aGlsZQorICAgICAgIGFsbG9jYXRpbmcgaW5vZGUgdGFibGVzIGZvciBzb21lIHJlbGF0aXZlbHkgcmFyZSBvZGQgZGlzayBzaXplcy4KKyAgKiBGaXggYmlnLWVuZGlhbiBieXRlLXN3YXBwaW5nIGJ1ZyBpbiBleHQyZnNfc3dhcF9pbm9kZV9mdWxsKCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBXZWQsIDA1IERlYyAyMDA3IDIwOjA0OjI4IC0wNTAwCisKK2UyZnNwcm9ncyAoMS40MC4yLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBlMmZzY2s6IEZpeCBzYWx2YWdlX2RpcmVjdG9yeSB3aGVuIHRoZSBsYXN0IGVudHJ5J3MgcmVjX2xlbiBpcyB0b28gYmlnCisgICogVXBkYXRlIFR1cmtpc2gsIFBvbGlzaCwgRHV0Y2gsIGFuZCBWaWV0bmFtZXNlIFBPIGZpbGVzIGZyb20gdGhlCisgICAgICBUcmFuc2xhdGlvbiBQcm9qZWN0CisgICogRml4IGEgYnVnIHdoaWNoIHdvdWxkIGNhdXNlIGUyZnNjayBzZWdmYXVsdCBvbiB2ZXJ5IGJhZGx5IGRhbWFnZWQKKyAgICAgIGZpbGVzeXN0ZW1zCisgICogVXBkYXRlIHR1bmUyZnMgbWFuIHBhZ2UgdG8gaW5jbHVkZSBtb3JlIGRpc2N1c3Npb24gb2YgcmVzZXJ2ZWQKKyAgICAgIGJsb2NrcyAoQWRkcmVzc2VzIFVidW50dSBMYXVuY2hwYWQgYnVnICM0NzgxNykKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUaHUsIDEyIEp1bCAyMDA3IDIyOjE4OjUxIC0wNDAwCisKK2UyZnNwcm9ncyAoMS40MC4xLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBDbGFyaWZ5IG1rX2NtZHMnIGVycm9yIHJlcG9ydGluZworICAqIGUyZnNjazogRGV0ZWN0IHJlY3Vyc2l2ZSBsb29wcyBpbiBALWV4cGFuc2lvbnMKKyAgKiBDb21waWxlIHRoZSBkZWZhdWx0IG1rZTJmcy5jb25mIGludG8gbWtlMmZzIHByb2dyYW0KKyAgKiBGaXggYm9ndXMgc3RyaXAgcGVybWlzc2lvbiBlcnJvcnMgd2hlbiBidWlsZGluZyB1bmRlciBEZWJpYW4KKyAgKiBVcGRhdGUgVmlldG5hbWVzZSwgRnJlbmNoLCBhbmQgRHV0Y2ggUE8gZmlsZXMgZnJvbSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdAorICAqIEZpeCBidWcgd2hpY2ggY291bGQgY2F1c2UgbGliYmxraWQgdG8gbG9vcCBmb3JldmVyIChDbG9zZXM6ICM0MzIwNTIpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAgOCBKdWwgMjAwNyAyMDoyNTowOCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuNDAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZQorICAqIFJlbW92ZSBSRkMtNDEyMiBsb2dpYyBmcm9tIERlYmlhbiBidWlsZCBydWxlcyAoQ2xvc2VzOiAjNDA3MTA3KQorICAqIEZpeCBjb21fZXJyLnRleGluZm8gc28gdGhhdCB0aGUgaW5zdGFsbC1pbmZvIGNvbW1hbmQgd2lsbCByZW1vdmUKKyAgICAgIHRoZSBjb21fZXJyIGluZm8gZmlsZSBmcm9tIHRoZSAvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgd2hlbiB0aGUKKyAgICAgIGNvbWVyci1kZXYgcGFja2FnZSBpcyByZW1vdmVkIGFuZCBwdXJnZWQgKENsb3NlczogIzQwMTcxMSkKKyAgKiBGaXggZGl2aWRlLWJ5LXplcm8gZXJyb3IgaW4gYmxraWQncyBOVEZTIHByb3ZpbmcgbG9naWMKKyAgKiBBZGQgbmV3IGJsa2lkIC1nIG9wdGlvbiB3aGljaCBjYXVzZXMgdGhlIGJsa2lkIGNhY2hlIHRvIGJlIGdhcmJhZ2UKKyAgICAgIGNvbGxlY3RlZAorICAqIGxpYmJsa2lkOiBGaXggYnVnIHdoaWNoIGNvdWxkIGN1YXNlIGJpZF90eXBlIHRvIGJlIGNvcnJ1cHRlZAorICAqIG1rZTJmczogQWRkIHNhbnR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBpbm9kZV9zaXplICogbnVtX2lub2RlcyBpc24ndCB0b28gYmlnCisgICogRml4IGFkZGl0aW9uYWwgQ292ZXJpdHkgYnVncyBpbiBta2UyZnMgYW5kIGUyZnNjaworICAqIEltcHJvdmUgc2FuaXR5IGNoZWNrIGluIGUyZnNjaydzIGFsZ29yaXRobSBmb3IgZmluZGluZyBhIGJhY2t1cCBzdXBlcmJsb2NrCisgICogRml4IGUyZnNjayBnZXRfc2l6ZSBsb2dpYyBzbyB0aGF0IGl0IHdpbGwgd29yayB3aXRoIHRoZSBMaW51eCBmbG9wcHkKKyAgICAgIGRyaXZlciAoQ2xvc2VzOiAjNDEwNTY5KQorICAqIEZpeCBlcnJvciBjaGVja2luZyBvZiBiYWRibG9jaydzIGxhc3QtYmxvY2sgYW5kIHN0YXJ0LWJsb2NrIGFyZ3VtZW50cworICAgICAgKENsb3NlczogIzQxNjQ3NykKKyAgKiBlMmZzY2s6IGF2b2lkIHdyaXRpbmcgb3ZlcndyaXRpbmcgdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyB1bnRpbCB0aGUKKyAgICAgIG1hc3RlciBzdXBlcmJsb2NrIGlzIGNvbmZpcm1lZCB0byBiZSBzYW5lCisgICogTWFrZSB0aGUgYmxraWQgbGlicmFyeSBtb3JlIHBhcmFub2lkIGFib3V0IGNvbmNsdWRpbmcgYSBwYXJ0aXRpb24KKyAgICAgIGNvbnRhaW5zIGEgTlRGUyBmaWxlc3lzdGVtLiAgKEFkZHJlc3NlcyBMYXVuY2hwYWQgQnVnOiAjMTEwMTM4KQorICAqIEVuaGFuY2UgZTJmc2NrIHNvIGl0IHdpbGwgcmVjcmVhdGUgdGhlIGV4dDMgam91cm5hbCBpZiB0aGUgb3JpZ2luYWwKKyAgICAgIGpvdXJuYWwgaW5vZGUgd2FzIGNsZWFyZWQgdG8gZHVlIGJlaW5nIGNvcnJ1cHQKKyAgKiBGaXggZTJmc2NrIHNvIHRoYXQgaWYgdGhlIGJhY2t1cCBqb3VybmFsIGluZm9ybWF0aW9uIGlzIHVzZWQsIHRoYXQKKyAgICAgIHRoaXMgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGpvdXJuYWwgaW5vZGUKKyAgKiBNYWtlIGUyZnNjayBjaGVjayBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUgam91cm5hbCBpbm9kZSBmb3IgdmFsaWRpdHkKKyAgKiBibGtpZDogQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyBMVUtTIGVuY3J5cHRlZCBwYXJ0aXRpb25zCisgICogZTJmc2NrOiBhZGRlZCBzYW5pdHkgY2hlY2sgZm9yIHhhdHRyIHZhbGlkYXRpb24KKyAgKiBGaXggYnl0ZS1zd2FwcGluZyBidWcgZm9yIGZpbGVzeXN0ZW1zIHdpdGggbGFyZ2UgaW5vZGVzCisgICogQ2xhcmlmeSB0aGUgY29weXJpZ2h0IGxpY2Vuc2VzIHVzZWQgYnkgdGhlIHZhcmlvdXMgbGlicmFyaWVzIGluIENPUFlJTkcKKyAgKiBSZW1vdmUgUkZDLTQxMjIgZnJvbSB1cHN0cmVhbSAoQ2xvc2VzOiAjNDA3MTA3KQorICAqIEZpeCBpbmZvLWRpciBsaW5lIHdoaWNoIHByZXZlbnRlZCBpbnN0YWxsLWluZm8gZnJvbSByZW1vdmluZworICAgICAgY29tX2VyciBlbnRyeSBmcm9tIGZyb20gL3Vzci9zaGFyZS9pbmZvL2RpciB3aGVuIHRoZSBjb21lcnItZGV2CisgICAgICBwYWNrYWdlIGlzIHB1cmdlZCAoQ2xvc2VzOiAjNDAxNzExKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMjkgSnVuIDIwMDcgMjI6NDA6MjcgLTA0MDAKKworZTJmc3Byb2dzICgxLjM5KzEuNDAtV0lQLTIwMDcuMDQuMDcrZGZzZy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFsbG93IHRoZSBqb3VybmFsIHRvIHVwIHRvIDEwLDI0MCwwMDAgYmxvY2tzCisgICogRml4IGJsa2lkIGxpYnJhcnkgdG8gcmVjb2duaXplIE1EIDAuOTAgc3VwZXJibG9jayBvbiBsaXR0bGUgZW5kaWFuCisgICAgICBzeXN0ZW1zCisgICogRml4IGJsa2lkIGxpYnJhcnkgdG8gcmVwb3J0IHRoZSBjb3JyZWN0IFVVSUQgZnJvbSBNRCBzdXBlcmJsb2NrcworICAqIEZpeCBzaWduZWQgdnMuIHVuc2lnbmVkIHByb2JsZW0gaW4gZGVidWdmcycgc2V0Yi90ZXN0Yi9mcmVlYiBjb21tYW5kcworICAqIEVuaGFuY2UgZGVidWdmcydzIGRhdGUgcGFyc2VyIHNvIGl0IGFjY2NlcHRzIGludGVnZXIgdmFsdWVzCisgICogRml4IGUyZnNjaydzIHBhc3MxYyBhY2NvdW50aW5nIHNvIGl0IGRvZXNuJ3QgdGVybWluYXRlIHRvbyBlYXJseQorICAgICAgaWYgYSBmaWxlIHdpdGggbXVsdGlwbHkgY2xhaW1lZCBibG9ja3MgaXMgaGFyZCBsaW5rZWQuIG9yIG5vdCBhdAorICAgICAgYWxsIGlmIHRoZSByb290IGRpcmVjdG9yeSBjb250YWlucyBzaGFyZWQgYmxvY2tzCisgICogRW5oYW5jZSBkZWJ1Z2ZzIHNvIGl0IGNhbiBtb2RpZnkgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIHVzaW5nCisgICAgICB0aGUgY29tbWFuZCBzZXRfYmxvY2tfZ3JvdXBfZGVzY3JpcHRvcgorICAqIEltcHJvdmUgZTJmc2NrJ3MgcmVwb3J0aW5nIG9mIEkvTyBlcnJvcnMgc28gaXQncyBjbGVhcmVyIHdoYXQgaXQKKyAgICAgIHdhcyB0cnlpbmcgdG8gZG8gd2hlbiBhbiBlcnJvciBoYXBwZW5zCisgICogRml4IGEgYnVnIGluIGhvdyBlMmZzcHJvZ3MgYnl0ZSBzd2FwcyBpbm9kZXMgY29udGFpbmluZyBmYXN0CisgICAgICBzeW1saW5rcyB0aGF0IGhhdmUgZXh0ZW5kZWQgYXR0cmlidXRlcy4KKyAgKiBGaXggcG90ZW50aWFsIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIGV4dDJmc19nZXRfZGV2aWNlX3NpemUoKQorICAqIEZpeCBtaW5vciB0eXBvIGluIGUyZnNjay5jb25mLjUgbWFuIHBhZ2UKKyAgKiBDbGVhbnVwIHVkZWIgZGVwZW5kZW5jeSAoQ2xvc2VzOiAjNDE5NjA1KQorICAqIFJlYnVpbGRpbmcgd2l0aCBsaWJkZXZtYXBwZXIgMS4wMi4xIChDbG9zZXM6ICM0MjEwMjIgYW5kICM0MjE2NjgpCisgICogQWRkIGRlcGVuZGVuY3kgb24gY29tZXJyLWRldiB0byBzcy1kZXYgKENsb3NlczogIzQwODM1MikKKyAgKiBNYWtlIG1rZTJmcyB1c2Ugc2FuZSBkZWZhdWx0cyB3aGVuIC9ldGMvbWtlMmZzLmNvbmYgZG9lc24ndCBleGlzdAorICAqIEZpeCBta2UyZnMgYW5kIGRlYnVnZnMgdG8gc3VwcG9ydCBsYXJnZSAoPiAxNiBiaXQpIHVpZCdzIGFuZCBnaWQncworICAqIEZpeCBzcGVsbGluZyB0eXBvIGluIGRlYmlhbiBwYWNrYWdlIGRlc2NyaXB0aW9uIGZvciBsaWJibGtpZDEKKyAgICAoQ2xvc2VzOiAjMzk5MTU1KQorICAqIFJlbW92ZSAtV0lQIGxhbmd1YWdlIGZyb20gdGhlIGRlYmlhbiBjb3B5cmlnaHQgZmlsZS4gIChDbG9zZXM6ICM0MTU1NjApCisgICogUmVtb3ZlIGNoZWNrIGluIGUyZnNjayB3aGljaCByZXF1aXJlZCBFQSdzIGluIGlub2RlcyB0byBiZSBzb3J0ZWQKKyAgICAoV2Ugc2hvdWxkIGdldCB0aGlzIGJhY2stcG9ydGVkIHRvIHRoZSBzdGFibGUgYnJhbmNoIHNpbmNlCisgICAgZmlsZXN5c3RlbXMgd2l0aCBsYXJnZSBpbm9kZXMgd2lsbCBoYXZlIEVBJ3MgZXJyb25lb3VzbHkKKyAgICByZW1vdmVkLCB3aGljaCB3aWxsIGZvciBleGFtcGxlIHRvYXN0IGFuIFNFTGludXggc3lzdGVtLikKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sICA2IE1heSAyMDA3IDE5OjQ0OjM1IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zOSsxLjQwLVdJUC0yMDA3LjA0LjA3K2Rmc2ctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGQgbGlicmVhZGxpbmUuc28uNSBzdXBwb3J0IHRvIGxpYnNzLgorICAqIEltcG92ZSBiYWRibG9ja3MgLW4vLXcgZXhjbHVzaXZlIHVzYWdlIG1lc3NhZ2UuCisgICogQWRkIGRlYnVnZ2luZyBjb2RlICh2aWEgdGhlIENPTUVSUl9ERUJVRyBlbnYuIHZhcmlhYmxlKSB0byB0aGUKKyAgICAgIGNvbV9lcnIgbGlicmFyeQorICAqIEZpeCBkdW1wX3VudXNlZCBzZWdmYXVsdCBpbiBkZWJ1Z2ZzIHdoZW4gYSBmaWxlc3lzdGVtIGlzIG5vdCBvcGVuCisgICogQWRkIHZlcnNpb25lZCBkZXBlbmRlbmN5IGluIERlYmlhbidzIHNobGlicyBmb3IgbGliYmxraWQuCisgICAgICAoQ2xvc2VzOiAjNDEzMjA4KQorICAqIEZpeCBtZW1vcnkgbGVhayBpbiBibGtpZCBsaWJyYXJ5LiAgKENsb3NlczogIzQxMzY2MSkKKyAgKiBMZXQgdGhlIGRlYnVnZnMgbGNkIGNvbW1hbmQgd29yayBldmVuIGlmIGEgZmlsZXN5c3RlbSBpcyBub3Qgb3BlbgorICAqIEZpeCBsYXJnZSBudW1iZXIgb2YgbWlzY2VsbGFuZW91cyBDb3Zlcml5IGJ1Z3MuICAoTm9uZSB3ZXJlCisgICAgICBzZWN1cml0eS1zZWN1cml0eSkuCisgICogRml4IGUyZnNjayB0byBjbGVhciBpX3NpemUgZm9yIHNwZWNpYWwgZGV2aWNlcyB3aXRoIGEgYm9ndXMgaV9ibG9ja3MKKyAgICAgIGZpZWxkIG9uIHRoZSBmaXJzdCBwYXNzLgorICAqIEZpeCBlMmZzY2sgdG8gc2V0IHRoZSBmaWxlIHR5cGUgb2YgdGhlICcuLicgZW50cnkgd2hlbiBjb25uZWN0aW5nCisgICAgICBhIGRpcmVjdG9yeSB0byBsb3N0K2ZvdW5kLgorICAqIEVuaGFuY2UgZTJmc2NrIHRvIHJlY292ZXIgZGlyZWN0b3JpZXMgd2hvc2UgbW9kZXMgZmllbGQgd2VyZQorICAgICAgY29ycnVwdGVkIHRvIGxvb2sgbGlrZSBzcGVjaWFsIGZpbGVzLgorICAqIEFsbG93IGRlYnVnZnMgdG8gZHVtcCA+IDJHQiBmaWxlcy4gIChDbG9zZXM6ICM0MTI2MTQpCisgICogTWlzYy4gbWFuIHBhZ2UgY2xlYW51cHMuICAoQ2xvc2VzOiAjMzc5Njk1KQorICAqIEZpeCByZXNpemUyZnMgcGFyc2luZyBvZiBzaXplIHBhcmFtZXRlciAoQ2xvc2VzOiAjNDA4Mjk4KQorICAqIEZpeCBpbmZpbml0ZSBsb29wIGluIGUyZnNjayBvbiByZWFsbHkgYmlnIGZpbGVzeXN0ZW1zIChDbG9zZXM6ICM0MTE4MzgpCisgICogRml4IG1lbW9yeSBsZWFrIGluIGV4dDJmc193cml0ZV9uZXdfaW5vZGUoKQorICAqIEFkZCBzdXBwb3J0IGZvciB1c2luZyBhIHNjcmF0Y2ggZmlsZXMgZGlyZWN0b3J5IHRvIHJlZHVjZSBlMmZzY2sncworICAgICAgbWVtb3J5IHV0aWxpemF0aW9uIG9uIHJlYWxseSBiaWcgZmlsZXN5c3RlbXMuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU2F0LCAgNyBBcHIgMjAwNyAxMDozODo0MCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzkrMS40MC1XSVAtMjAwNi4xMS4xNCtkZnNnLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IHNwdXJpb3VzIGVycm9yIGZyb20gZTJmc2NrIC1jIGFuZCBta2UyZnMgLWMgY2F1c2VkIGJ5IHRoZSBmaXgKKyAgICB0byAjMzg2NDc1LgorICAqIEFkZCBkaXJoYXNoIHNpZ25lZC91bnNpZ25lZCBoaW50IHRvIHN1cGVyYmxvY2suICAoQ2xvc2VzOiAjMzg5NzcyKQorICAqIEFsbG93IHVuaXhfaW8gb2Zmc2V0cyBncmVhdGVyIHRoYW4gMiBnaWdhYnl0ZXMKKyAgKiBNYWtlIHN1cmUgbWtfY21kcyBhbmQgY29tcGlsZV9ldCB3b3JrIGV2ZW4gaW4gc3RyYW5nZSBsb2NhbGVzCisgICogRml4IHR5cGUtcHVubmluZyBidWcgd2hpY2ggY2F1c2VkIGR1bXBlMmZzIHRvIGNyYXNoIG9uIHRoZSBBcm0gcGxhdGZvcm0KKyAgICAoQ2xvc2VzOiAjMzk3MDQ0KQorICAqIEFkZCBleHBsYW5hdG9yeSBtZXNzYWdlIHRvIGJhZGJsb2NrcyB0aGF0IC1uIGFuZCAtdyBhcmUgbXV0dWFsbHkKKyAgICBleGNsdXNpdmUuICAoQ2xvc2VzOiAjMzcxODY5KQorICAqIE5ldyArZGZzZyBzb3VyY2UgdGFyYmFsbCB0aGF0IGhhcyB1c2VmdWwgZG9jdW1lbnRhdGlvbiBSRUFMTFkKKyAgICByZW1vdmVkIHRvIHNhdGlzZnkgdGhlIERGU0cgTGljZW5zZSBOYXppJ3MuICAoQ2xvc2VzOiAjMzkwNjY0KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgMTQgTm92IDIwMDYgMjM6NDU6MzQgLTA1MDAKKworZTJmc3Byb2dzICgxLjM5KzEuNDAtV0lQLTIwMDYuMTAuMDIrZGZzZy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFkZCBmYWlsc2FmZXMgYWdhaW5zdCBkdXBsaWNhdGUgVVVJRCBnZW5lcmF0aW9uIGNhdXNlZCBieSB0aHJlYWRzCisgICogRml4IHBvdGVudGlhbCBlMmZzY2sgLW4gY3Jhc2ggY2F1c2VkIGJ5IGNvcnJ1cHQgaHRyZWVzCisgICogUmVvcmRlciB0aGUgbGlicmFyeSBsaW5lIGZvciBzdGF0aWMgbGlua2luZywgdG8gZml4IHVuZGVmaW5lZAorICAgIHJlZmVyZW5jZXMgdG8gcHRocmVhZHMgb24gYW1kNjQuICAoQ2xvc2VzOiAjMzkzNjgwKQorICAqIEZpeCBta2UyZnMncyBlcnJvciBjaGVja2luZyB3aGVuIGNyZWF0aW5nIHJldmlzaW9uIDAgZmlsZXN5c3RlbXMuCisgICAgKENsb3NlczogIzM5MjEwNykKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDIyIE9jdCAyMDA2IDAwOjE5OjQ0IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zOSsxLjQwLVdJUC0yMDA2LjEwLjAyK2Rmc2ctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgK2Rmc2cgc291cmNlIHRhcmJhbGwgdGhhdCBoYXMgdXNlZnVsIGRvY3VtZW50YXRpb24gcmVtb3ZlZCB0bworICAgIHNhdGlzZnkgdGhlIERGU0cgTGljZW5zZSBOYXppJ3MuICAoQ2xvc2VzOiAjMzkwNjY0KQorICAqIFJlbW92ZSBkZXBlbmRlbmN5IG9uIGUyZnNwcm9ncyBmcm9tIHRoZSBlMmZzY2stc3RhdGljIHBhY2thZ2UKKyAgICAoQ2xvc2VzOiAjMzgzNTIxKQorICAqIEZpeCBiYWRibG9ja3MgaW50ZXJwcmV0YXRpb24gb2YgaXRzIGZpcnN0IG9wdGlvbmFsIGFyZ3VtZW50IChsYXN0LWJsb2NrKQorICAgIChDbG9zZXM6ICMzODY0NzUpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAgMyBPY3QgMjAwNiAyMzozNjowNSAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzkrMS40MC1XSVAtMjAwNi4xMC4wMi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEJ1aWxkIHVzaW5nIHRoZSBzaWQgdmVyc2lvbiBvZiBsaWJjLCBub3QgZXhwZXJpbWVudGFsIQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIE1vbiwgIDIgT2N0IDIwMDYgMjE6NDM6NDQgLTA0MDAKKworZTJmc3Byb2dzICgxLjM5KzEuNDAtV0lQLTIwMDYuMTAuMDItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBQcmV2aW91cyBOTVUgYWNrbm93bGVkZ2VkIChDbG9zZXM6ICMzODg3MTgpCisgICogRml4IGRlYnVnZnMgdG8gcHJpbnQgdW5zaWduZWQgdmFsdWVzIGZvciBFQSdzCisgICogTWlub3IgbWFuIHBhZ2UgZml4ZXMgKENsb3NlczogIzM3MzAwNCwgIzM2OTc2MSkKKyAgKiBBbGxvdyB0aGUgZGVmYXVsdCBpbm9kZSBzaXplIHRvIGJlIHNwZWNpZmllZCBpbiBta2UyZnMuY29uZgorICAqIFJlcXVpcmUgbWtlMmZzIC1GIC1GIGZvciByZWFsbHkgZGFuZ2Vyb3VzIG9wZXJhdGlvbnMKKyAgKiBBZGQgVmlldG5hbWVzZSB0cmFuc2xhdGlvbgorICAqIFVwZGF0ZSBGcmVuY2ggYW5kIER1dGNoIHRyYW5zbGF0aW9ucworICAqIEZpeCBkZWJ1Z2ZzIGNvcmVkdW1wIHdoZW4gbHNkZWwgaXMgcnVuIHdpdGhvdXQgYW4gb3BlbiBmaWxlc3lzdGVtCisgICAgKENsb3NlczogIzM3ODMzNSkKKyAgKiBGaXggc3BlbGxpbmcgZXJyb3IgaW4gZTJmc2NrIG91dHB1dAorICAqIEZpeCBvdmVyZmxvdyBwcm9ibGVtcyB3aGVuIHRoZSBudW1iZXIgb2YgaW5vZGVzIGFuZCBibG9ja3MgaXMKKyAgICBjbG9zZSB0byAyKiozMi0xCisgICogQWRkIEdGUy9HRlMyIHN1cHBvcnQgdG8gdGhlIGJsa2lkIGxpYnJhcnkuCisgICogRml4IGJsa2lkIHN1cHBvcnQgb2YgZW1wdHkgRkFUIGZpbGVzeXN0ZW0gbGFiZWxzCisgICogQXZvaWQgcmVjdXJzaW5nIGZvcmV2ZXIgZHVlIHRvIHN5bWxpbmtzIGluIC9kZXYgYnkgdGhlIGJsa2lkIGxpYnJhcnkKKyAgKiBGaXggYm9ndXMgZXJyb3IgbWVzc2FnZXMgZnJvbSByZXNpemUyZnMgY2F1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtCisgICAgbm90IGNvbnRhaW5pbmcgYSByZXNpemUgaW5vZGUuICAoQ2xvc2VzOiAjMzgwNTQ4KQorICAqIEZpeGVkIGRldmljZS1tYXBwZXIgcHJvYmluZyAoaXQgd2FzIGZhaWxpbmcgZHVlIHRvIGFuIGV4dHJhICcvZGV2JyBiZWluZworICAgIGFkZGVkIHRvIHRoZSBkZXZpY2UgcGF0aG5hbWUpCisgICogTWFrZSBzdXJlIHRoZSBkZWZhdWx0IG1pbmltdW0gc2l6ZSBqb3VybmFsIGlzIGJpZyBlbm91Z2ggdG8gc3VwcG9ydAorICAgIG9uLWxpbmUgcmVzaXppbmcuCisgICogQWRkIGEgdmVyc2lvbmVkIGJ1aWxkLWRlcCBvbiB0ZXhpMmh0bWwgKENsb3NlczogIzM4OTU1NCkKKyAgKiBSZW1vdmUgdXNlZnVsIFVVSUQgc3BlY2lmaWNhdGlvbiB0aGFua3MgdG8gTGljZW5zZSBOYXppJ3MgKENsb3NlczogIzM5MDY2NCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sICAyIE9jdCAyMDA2IDEzOjA0OjI3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zOS0xLjEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTm9uLW1haW50YWluZXIgdXBsb2FkCisgICogQWRkZWQgLXB0aHJlYWRzIHRvIGRldm1hcHBlciBsaWJyYXJpZXMgKENsb3NlczogIzM4ODcxOCkKKworIC0tIEJlbiBIdXRjaGluZ3MgPGJlbkBkZWNhZGVudC5vcmcudWs+ICBTYXQsIDMwIFNlcCAyMDA2IDEyOjQ5OjQ3ICswMTAwCisKK2UyZnNwcm9ncyAoMS4zOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogRml4IGRlYnVnZnMncyBkdW1wX3VudXNlZCBjb21tYW5kIHNvIGl0IHdpbGwgbm90IGNvcmUgZHVtcCBvbgorICAgIGZpbGVzeXN0ZW1zIHdpdGggYSA2NGsgYmxvY2tzaXplCisgICogQ2xhcmlmaWVkIGFuZCBpbXByb3ZlZCBtYW4gcGFnZXMsIGluY2x1ZGluZyBzcGVsbGluZyBlcnJvcnMKKyAgICAoQ2xvc2VzOiAjMzY4MzkyLCAjMzY4MzkzLCAjMzY4Mzk0LCAjMzY4MTc5KQorICAqIE5ldyBmaWxlc3lzdGVtcyBhcmUgbm93IGNyZWF0ZWQgd2l0aCBkaXJlY3RvcnkgaW5kZXhpbmcgYW5kCisgICAgb24tbGluZSByZXNpemluZyBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgKiBGaXggcHJldmlvdXNseSBtYW5nbGVkIHdvcmRpbmcgaW4gYW4gb2xkZXIgRGViaWFuIGNoYW5nZWxvZyBlbnRyeQorICAqIEZpeCBkb2MtYmFzZSBwb2ludGVyIHRvIHRoZSB0b3AtbGV2ZWwgaHRtbCBmaWxlIChDbG9zZXM6ICMzNjI1NDQsICMzNjI5NzApCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAyOSBNYXkgMjAwNiAxMTowNzo1MyAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzgrMS4zOS1XSVAtMjAwNi4wNC4wOS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFJlc2l6ZTJmcyBhdXRvbWF0aWNhbGx5IGRldGVjdHMgdGhlIHByZXZpb3VzbHkgdXNlZCBSQUlEIHN0cmlkZQorICAgIHBhcmFtZXRlciBzbyB0aGF0IHJlc2l6ZWQgZmlsZXN5c3RlbXMgY2FuIGJlIG1vcmUgb3B0aW1hbGx5IGxhaWQKKyAgICBvdXQgZm9yIFJBSUQgZmlsZXN5c3RlbXMuCisgICogRml4IG1rZTJmcyAtY2MgYW5kIGUyZnNjayAtY2MgKENsb3NlczogIzM2NjAxNykKKyAgKiBGaXggaW5pdHJkIHNjcmlwdCB0byBmaXggZmFpbHVyZSB3aXRoIDIuNCBrZXJuZWxzIChDbG9zZXM6ICMzNjQ1MTYpCisgICogTWtlMmZzIG5vdyB1c2VzIGFuIGltcHJvdmVkIGxheW91dCBmb3IgUkFJRCBmaWxlc3lzdGVtcyB3aGVuIHRoZQorICAgIHN0cmlkZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLgorICAqIEZpeCB0aGUgZGVidWdmcyBjb21tYW5kcyBodHJlZV9kdW1wLCBkeF9oYXNoLCBhbmQgbGlzdF9kaXIgc28gdGhleQorICAgIHByaW50IGEgdXNhZ2UgbWVzc2FnZSB3aGVuIGFuIGlsbGVnYWwgb3B0aW9uIGNoYXJhY3RlciBpcyBnaXZlbi4KKyAgKiBTcGVlZCB1cCBta2UyZnMgYW5kIGUyZnNjayBieSB3cml0aW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIGluIG9uZSBwYXNzCisgICogRml4IGZpbGVmcmFnIHRvIGJlIDMyLWJpdCBjbGVhbiBieSB1c2luZyB1bnNpZ25lZCBsb25nIGluc3RlYWQgb2YKKyAgICBhIHNpZ25lZCBpbnRlZ2VyIGZvciBibG9jayBudW1iZXJzLgorICAqIEZpeCBhIGJ1ZyBpbiB0aGUgZTJwIGxpYnJhcnkgd2hpY2ggY291bGQgY2F1c2UgZHVtcGUyZnMgdG8KKyAgICAocmFyZWx5KSBmYWlsIHRvIHByaW50IG91dCB0aGUgam91cm5hbCBvciBoYXNoIHNlZWQgVVVJRC4KKyAgKiBGaXggbWVtb3J5IGxlYWsgaW4gZTJmc2NrJ3MgZXJyb3IgcGF0aHMuCisgICogRml4IGNvbWVyci1kZXYncyBkb2MtYmFzZSBwb2ludGVyIHRvIHRoZSB0b3AtbGV2ZWwgaHRtbCBmaWxlCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAxNCBNYXkgMjAwNiAxODowOToyMCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzgrMS4zOS1XSVAtMjAwNi4wNC4wOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgdG8gbGF0ZXN0IHZlcnNpb24gKDIwMDYtMDItMjMpIGZyb20gRlNGCisgICogVXBkYXRlIEZyZW5jaCwgRHV0Y2gsIFBvbGlzaCwgU3dlZGlzaCwgYW5kIFR1cmtpc2ggdHJhbnNsYXRpb25zCisgICogRml4IGFzbS90eXBlcy5oIHR5cGUgY29uZmxpY3RzIG9uIEFNRDY0IHRvIGZpeCBGVEJGUyBwcm9ibGVtcy4KKyAgICAgIChDbG9zZXM6ICMzNjA2NjEsICMzNjAzMTcpCisgICogRml4IGJ1ZyB3aGljaCBjYXVzZWQgbWtlMmZzIC1qIHRvIGZhaWwgd2l0aCBhbiBFQlVTWSBlcnJvci4gIChDbG9zZXMKKyAgICAgICMzNjA2NTIpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAgOSBBcHIgMjAwNiAyMzowNDoxNSAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzgrMS4zOS1XSVAtMjAwNi4wMy4yOS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFkZGVkIG1pc3NpbmcgYnVpbGQgZGVwZW5kZW5jeSBvbiBsaWJkZXZtYXBwZXItZGV2LiAgKENsb3NlczogIzM2MDA0NikKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUaHUsIDMwIE1hciAyMDA2IDEyOjMzOjMwIC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zOCsxLjM5LVdJUC0yMDA2LjAzLjI5LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogQWRkIHVkZWI6IGxpbmVzIHRvIHRoZSBEZWJpYW4ncyBzaGxpYnMgZmlsZXMgKENsb3NlczogIzM1NjI5MykKKyAgKiBFbmhhbmNlIGR1bXBlMmZzIHRvIHByaW50IHRoZSBzaXplIG9mIHRoZSBqb3VybmFsCisgICogRml4IGUyc3Byb2dzIHNvIHRoYXQgaXQgaXMgMzItYml0IGNsZWFuIG9uIHg4NiBwbGF0b3Jtcy4KKyAgKiBGaXggbWtsb3N0K291bmQgc28gdGhhdCBpdCBjcmVhdGVzIGEgZnVsbC1zaXplZCBkaXJlY3Rvcnkgb24gNGsgYW5kCisgICAgbGFyZ2VyIGJsb2NrIHNpemVzLgorICAqIEFkZCBta2UyZnMuY29uZiBjb25pZ3VyYXRpb24gZmlsZSB0byBjb25pZ3VyZSBta2UyZnMncyBkZWZhdWx0cworICAqIEFkZCBkZXZtYXBwZXIgc3VwcG9ydCB0byB0aGUgYmxraWQgbGlicmFyeS4KKyAgKiBFMmZzY2ssIHJlc2l6ZTJmcyBhbmQgbWtlMmZzIHdpbGwgbm93IG9wZW4gdGhlIGZpbGVzeXN0ZW0gZGV2aWNlIGluCisgICAgZXhjbHVzaXZlIG1vZGUKKyAgKiBGaXggZG9jdW1lbnRhdGlvbiBhbmQgbWFuIHBhZ2VzLiAgKENsb3NlczogIzM1MTI2OCwgIzM1Nzk1MSwgIzM0NzI5NSwKKyAgICAjMzE2MDQwKQorICAqIENpeCAibWtlMmZzIC1PIHJlc2l6ZV9pbm9kZSIgZm9yIHZlcnkgbGFyZ2UgZmlsZXN5c3RlbXMgKENsb3NlczogIzM0NjU4MCkKKyAgKiBBZGQgb24tbGluZSByZXNpemluZyBzdXBwb3J0IGludG8gcmVzaXplMmZzCisgICogRml4IGJsa2lkJ3MgaGFuZGxpbmcgb2YgdmVyaWZpY2F0aW9uIHRpbWVvdXRzIHdoZW4gdGhlIHN5c3RlbSBjbG9jayBpcworICAgIGluc2FuZQorICAqIEZpeCBsaWJyYXJ5IE1ha2VmaWxlcyBzbyB0aGV5IHdvcmsgd2l0aCBHTlUgbWFrZSAzLjgxIGFzIHdlbGwgYXMgR05VCisgICAgbWFrZSAzLjgwLgorICAqIEVuaGFuY2UgdGhlIGJsa2lkIGxpYnJhcnkgdG8gZGlzcGxheSB0aGUgdXVpZCBvZiBleHRlcm5hbCBqb3VybmFscyBmb3IKKyAgICBleHQzIGZpbGVzeXN0ZW1zCisgICogRW5oYW5jZSBlMmZzY2sgc28gaXQgd2lsbCBmaXggdGhlIGV4dGVybmFsIGpvdXJuYWwgaGludCBpbiB0aGUKKyAgICBzdXBlcmJsb2NrIGlmIGl0IGlzIG91dCBvZiBkYXRlLgorICAqIEZpeCBkZWJ1Z2ZzJ3MgaWNoZWNrIHRvIGNvcnJlY3RseSByZXBvcnQgdGhlIG93bmVyIG9mIGFuIEVBIGJsb2NrCisgICogVXBkYXRlIFN3ZWVkaXNoIHRyYW5zbGF0aW9uCisgICogQWRkIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gZTJmc2NrLmNvbmYgdG8gY29udHJvbCB3aGV0aGVyIG9yIG5vdAorICAgIGZpbGVzeXN0ZW0gY2hlY2tzIGFyZSBkb25lIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIG9uIGJhdHRlcnkgcG93ZXIuCisgICogUHJpbnQgYW4gZXhwbGFuYXRpb24gd2hlbiBza2lwcGluZyBhIGNoZWNrIGR1ZSBiZWluZyBvbiBiYXR0ZXJ5CisgICAgKENsb3NlczogIzM1MDMwNikKKyAgKiBVcGRhdGUgRnJlbmNoIHRyYW5zbGF0aW9uIChDbG9zZXM6ICMzNDE5MTEsICMzMDA4NzEsICMzMTY2MDQsICMzMTY3ODIsCisgICAgICMzMzA3ODkpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgV2VkLCAyOSBNYXIgMjAwNiAyMDozNzoyNyAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzgrMS4zOS1XSVAtMjAwNS4xMi4zMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICogVXBkYXRlIHByb2ZpbGUgbGlicmFyeSBjb2RlIGJhc2UKKyAgICAtIEFsbG93IHRhZyBhbmQgc2VjdGlvbiBuYW1lcyB0byBoYXZlIHF1b3RlZCBzdHJpbmdzCisgICAgLSBNYWtlIHRoZSBwcm9maWxlIGxpYnJhcnkgc3VwcG9ydCByZWFkaW5nIGZpbGVzIGluIGEgY29uZi5kIGRpcmVjdG9yeQorICAgIC0gU2xpZ2h0bHkgY2hhbmdlIHRoZSBwYXJzZXIgdG8gc3VwcG9ydCBjb21tZW50cyBhdCB0aGUgZW5kIG9mIGFsbCBsaW5lcworICAgIC0gQWRkIHN5bnRheCBlcnJvciByZXBvcnRpbmcKKyAgICAtIFNpbXBsaWZ5IHByb2ZpbGUgY29kZQorICAgIC0gQWRkIEUyRlNDS19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggb3ZlcnJpZGVzIHdoZXJlIHRvCisgICAgICBmaW5kIC9ldGMvZTJmc2NrLmNvbmYKKyAgICAtIE1ha2UgZTJmc2NrJ3MgZmlsZXN5c3RlbSBwcm9ibGVtIGhhbmRpbmcgY29uZmlndXJhYmxlCisgICAgLSBGaXggRlRCRlMgYnVnIGlmIGNvbWVyci1kZXYgaXMgbm90IGluc3RhbGxlZC4gIChDbG9zZXM6ICMzNDU1MTkpCisgICogVXBkYXRlIER1dGNoLCBQb2xpc2gsIGFuZCBTd2VkaXNoIHRyYW5zbGF0aW9ucy4gIChDbG9zZXM6ICMzNDMxNDkpCisgICogRml4IGEgZmQgbGVhayBhY3Jvc3MgYW4gZXhlYyBpbiBsaWJ1dWlkLiAgKENsb3NlczogIzM0NTgzMikKKyAgKiBBZGRyZXNzIG92ZXJyaWRlIGZpbGUgZGlzcGFyaXRpZXMKKyAgKiBNYWtlIHVyZ2VuY3kgYmUgbWVkaXVtIHRvIGFjY2VsZXJhdGUgYSB3b3JrYXJvdW5kIHRvIERlYmlhbidzIGJ1Z2d5CisgICAgaW5pdHNjcmlwdHMgKFNlZSBEZWJpYW4gYnVnczogIzM0MzY2MiwgIzM0MzY0NSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksICA2IEphbiAyMDA2IDIxOjQxOjA2IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zOCsxLjM5LVdJUC0yMDA1LjEyLjEwLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTWFrZSByZXNpemUyZnMgZXhwYW5kIG9yIHRydW5jYXRlIGEgZmlsZSBjb250YWluaW5nIGEgZmlsZXN5c3RlbS4KKyAgICAoQ2xvc2VzOiAjMjcxNjA3KQorICAqIEFkZCBzdXBwb3J0IGZvciBsaWI2NGV4dDJmcy1ub3BpYy5hIGZvciB0aGUgbWlwcyBhcmNoaXRlY3R1cmUKKyAgICAoQ2xvc2VzOiAjMzI5MDc0KQorICAqIERlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IERlYmlhbidzIGJvb3Qgc2VxdWVuY2UgYm9ndXNseSBkb2Vzbid0IHNldCB0aGUKKyAgICB0aW1lIGNvcnJlY3RseSB1bnRpbCB2ZXJ5IGxhdGUgaW4gdGhlIGJvb3QgcHJvY2Vzczsgc28gaWYgdGhlCisgICAgc3VwZXJibG9jaydzIGxhc3QgbW91bnQgb3Igd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLCBkb24ndCB0cmVhdAorICAgIHRoaXMgYXMgYSBmYXRhbCBlcnJvci4gIChDbG9zZXM6ICMzNDM2NjIsICMzNDM2NDUpCisgICogTW92ZSB0aGUgYmxraWQgYW5kIHV1aWRnZW4gYmluYXJpZXMgb3V0IG9mIGxpYmJsa2lkMSBhbmQgbGlidXVpZDEgYW5kCisgICAgaW50byB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgdG8gc3VwcG9ydCBzb25hbWUgdHJhbnNpdGlvbnMgYW5kCisgICAgc2ltdWxhbmVvdXMgaW5zdGFsbHMgb2YgbXVsdGlhcmNoIGZsYXZvcnMgdG8gY29leGlzdC4gIChJdCdzIG5vdCB3b3J0aAorICAgIGNyZWF0aW5nIHR3byB3aG9sZSBuZXcgcGFja2FnZXMgZm9yIHR3byBzZXBhcmF0ZSBiaW5hcmllcywgc28gd2UganVzdAorICAgIGZvbGQgdGhlbSBpbnRvIGUyZnNwcm9ncy4pICAoQ2xvc2VzOiAjMzMwNzM3LCAjMzMwNzM2KQorICAqIE9wdGlvbmFsbHkgYWxsb3cgdGhlIHVzZXIgdG8gaW50ZXJydXB0IGUyZnNjayAic2FmZWx5IiBkdXJpbmcgYSBib290CisgICAgc2VxdWVuY2Ugd2l0aG91dCBjYXVzaW5nIHRoZSBib290IHNjcmlwdHMgdG8gYWJvcnQuICAoQ2xvc2VzOiAjMTUwMjk1KQorICAqIFVwZGF0ZSBhbmQgY2xhcmlmeSBtYW4gcGFnZXMgKENsb3NlczogIzMxMjUxNSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDMxIERlYyAyMDA1IDAxOjA1OjM1IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zOCsxLjM5LVdJUC0yMDA1LjEyLjEwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVXBkYXRlIGFuZCBjbGFyaWZ5IG1hbiBwYWdlcyAoQ2xvc2VzOiAjMzI5ODU5LCAjMzIyMTg4LCAjMzE2ODExKQorICAqIEZpeCBidWcgY3JlYXRpbmcgZXh0ZXJuYWwgam91cm5hbHMgb24gYmlnLWVuZGlhbiBtYWNoaW5lcy4KKyAgKiBEZXRlY3QgaWYgdGhlIHN1cGVyYmxvY2sncyBsYXN0IG1vdW50IHRpbWUgb3IgbGFzdCB3cml0ZSB0aW1lIGlzIGluCisgICAgdGhlIGZ1dHVyZSwgYW5kIG9mZmVyIHRvIGZpeCBpdCBpZiB0aGlzIGlzIHRoZSBjYXNlIChDbG9zZXM6ICMzMjc1ODApCisgICogQWRkIG5ldyBkZWJ1Z2ZzIGNvbW1hbmQsIHNldF9jdXJyZW50X3RpbWUgd2hpY2ggc2V0cyB0aGUgdGltZSB1c2VkIHRvCisgICAgdXBkYXRlIHRoZSBmaWxlc3lzdGVtcydzIHRpbWUgZmllbGRzLgorICAqIEZpeCBkaXNwbGF5IGJ1ZyBpbiBiYWRibG9ja3MgLXN3IHdoZW4gcHJpbnRpbmcgdGhlICJkb25lIiBtZXNzYWdlLgorICAgIChDbG9zZXM6ICMzMjIyMzEpCisgICogSW1wcm92ZSBibGtpZCdzIEZBVC9WRkFUIGZpbGVzeXN0ZW0gZGV0ZWN0aW9uIGNvZGUgc28gdGhhdCBpdCBjYW4gZmluZAorICAgIGxhYmVscyBzdG9yZWQgdGhlIHJvb3QgZGlyZWN0b3J5IGFuZCB0byBiZSBtb3JlIGNvcnJlY3QvcGFyYW5vaWQuCisgICogQWRkIHN1cHBvcnQgdG8gZXh0cmFjdCBpc285NjYwIGxhYmVsIGluZm9ybWF0aW9uIHRvIHRoZSBibGtpZCBsaWJyYXJ5LgorICAqIEFkZCBzdXBwb3J0IHRvIGRldGVjdCB0aGUgcmVpc2VyNCBmaWxlc3lzdGVtIHRvIHRoZSBibGtpZCBsaWJyYXJ5LgorICAqIEFkZCBzdXBwb3J0IGZvciBkZXRlY3Rpbmcgc29mdHdhcmUgc3VzcGVuZCBwYXJ0aXRpb25zIHRvIHRoZSBibGtpZCBsaWJyYXJ5LgorICAqIEZpeCB0aGUgYmxraWQgbGlicmFyeSB0byBub3RpY2Ugd2hlbiBhbiBleHQyIGZpbGVzeXN0ZW0gaXMgdXBncmFkZWQgdG8KKyAgICBleHQzLgorICAqIEZpeCBkZWJ1Z2ZzJ3Mgc2V0X2lub2RlX2ZpZWxkIHNvIHRoYXQgc3VjY2Vzc2Z1bGx5IHNldHMgdGhlIGlfc2l6ZSBmaWVsZAorICAqIFVwZGF0ZWQgRHV0Y2ggdHJhbnNsYXRpb24KKyAgKiBFMmZzY2sgd2lsbCBzdG9wIGFuZCBwcmludCBhIHdhcm5pbmcgaWYgdGhlIHVzZXIgdHJpZXMgcnVubmluZyBhCisgICAgcmVhZC93cml0ZSBiYWRibG9ja3MgdGVzdCBvbiBhIHJlYWQtb25seSBtb3VudGVkIHJvb3QgZmlsZXN5c3RlbS4KKyAgKiBBZGQgcmVzaXplMmZzIGFuZCBiYWRibG9ja3MgdG8gdGhlIGUyZnNwcm9ncyB1ZGViCisgICAgKENsb3NlczogIzI5MDQyOSwgIzMxMDk1MCkKKyAgKiBBdm9pZCB0cnlpbmcgdG8gbW91bnQgdGhlIHJvb3QgZGV2aWNlIGlmIGl0IGlzIGFuIE5GUyBkZXZpY2UuCisgICAgKENsb3NlczogIzMxMDQyOCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDEwIERlYyAyMDA1IDIyOjQ5OjQ3IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zOC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFByZXZpb3VzIE5NVSBhY2tub3dsZWRnZWQgKENsb3NlczogIzMxNzg2MiwgIzMyMDM4OSkKKyAgKiBGaXggZGVidWdmcydzIHNldF9pbm9kZV9maWVsZHMgY29tbWFuZCBzbyBpdCBkb2Vzbid0IHNpbGVudGx5IGZhaWwKKyAgICB3aGVuIHNldHRpbmcgY2VydGFpbiBpbm9kZSBmaWVsZHMuCisgICogRml4IGUyZnNjayBmcm9tIHNlZ2ZhdWx0aW5nIG9uIGRpc2Nvbm5lY3RlZCBpbm9kZXMgdGhhdCBjb250YWluIG9uZSBvcgorICAgIG1vcmUgZXh0ZW5kZWQgYXR0cmlidXRlcy4gIChDbG9zZXM6ICMzMTY3MzYsICMzMTg0NjMpCisgICogQWxsb3cgbWtlMmZzIGFuZCB0dW5lMmZzIHRvIHRha2UgZnJhY3Rpb25hbCBwZXJjZW50YWdlcyB0byB0aGUgLW0KKyAgICBvcHRpb24gaW4gbWtlMmZzIGFuZCB0dW5lMmZzLiAgKENsb3NlczogIzgwMjA1KQorICAqIEZpeCBhIGNvbXBpbGVfZXQgYnVnIHdoaWNoIG1pc2NvdW50IHRoZSBudW1iZXIgb2YgZXJyb3IgbWVzc2FnZXMgaWYKKyAgICBjb250aW51YXRpb25zIGFyZSB1c2VkIGluIHRoZSAuZXQgZmlsZSwgYW5kIGZpeCBjb21wYXRpYmlsaXR5IHByb2JsZW1zCisgICAgd2l0aCBNSVQgS2VyYmVyb3MgMS40CisgICogQWRkIGV4dHJhIHNhbml0eSBjaGVja3MgdG8gcHJvdGVjdCB1c2VycyBmcm9tIHVudXN1YWwgY2lydWNtc3RhbmNlcworICAgIHdoZXJlIC9ldGMvbXRhYiBtYXkgbm90IGJlIHNhbmUsIGJ5IGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzCisgICAgcmVwb3J0ZWQgYnVzeSAod29ya3Mgb24gTGludXggMi42KSBrZXJuZWxzLiAgKENsb3NlczogIzMxOTAwMikKKyAgKiBGaXggdXNlLWFmdGVyLWZyZWUgYnVnIGluIGUyZnNjayB3aGVuIGZpbmlzaGluZyB1cCB0aGUgdXNlIG9mIHRoZQorICAgIGUyZnNjayBjb250ZXh0IHN0cnVjdHVyZS4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDIxIEF1ZyAyMDA1IDIzOjM1OjI5IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zOC0xLjEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTk1VIGZvciBSQyBidWcgZHVycmluZyBidWcgc3F1aXNoaW5nIHBhcnR5CisgICogRml4IGZvciBjaGFuZ2VzIHRvIHRleGkyaHRtbCwgcGF0Y2ggYnkgTWF0dCBLcmFhaQorICAgIChDbG9zZXM6ICMzMTc4NjIsICMzMjAzODkpCisgICogdmVyc2lvbiBidWlsZC1kZXBlbmQgb24gdGV4aTJodG1sLCB3b24ndCB3b3JrIHdpdGggb2xkZXIgb25lIGFueW1vcmUKKworIC0tIEJsYXJzIEJsYXJzb24gPGJsYXJzb25AYmxhcnMub3JnPiAgRnJpLCAgNSBBdWcgMjAwNSAwNDo0Njo1NCArMDAwMAorCitlMmZzcHJvZ3MgKDEuMzgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gdmVyc2lvbgorICAqIEZpeCBpYTY0IGNvcmUgZHVtcCBidWcgY2F1c2VkIGJ5IGUyZnNwcm9ncyBydW5uaW5nIGFmb3VsIG9mIEM5OSBzdHJpY3QKKyAgICB0eXBlIGFsaWFzaW5nIHJ1bGVzIG9uIG5ld2VyIGdjYyBjb21waWxlcnMuICAoQWRkcmVzc2VzIFJlZCBIYXQKKyAgICBCdWd6aWxsYSAjIzE2MTE4My4pCisgICogRml4IG1pbm9yIHR5cG8ncyBpbiB0dW5lMmZzIG1hbiBwYWdlLgorICAqIE1rZTJmcyB3aWxsIHJlZnVzZSB0byBjcmVhdGUgZmlsZXN5c3RlbXMgZ3JlYXRlciB0aGFuIDIqKjMxLTEgYmxvY2tzLAorICAgIHVubGVzcyBmb3JjZWQsIHRvIGF2b2lkIGtlcm5lbCBidWdzIHRoYXQgc3RpbGwgbmVlZCB0byBiZSBmaXhlZCBhcworICAgIG9mIHRoaXMgcmVsZWFzZS4KKyAgKiBVcGRhdGUgRnJlbmNoLCBEdXRjaCwgUG9saXNoLCBTd2VkaXNoLCBhbmQgVHVya2lzaCB0cmFuc2xhdGlvbnMuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgV2VkLCAzMCBKdW4gMjAwNSAyMDowMjo0MiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzcrMS4zOC1XSVAtMDYyMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFVwZGF0ZSBhbmQgY2xhcmlmeSBtYW4gcGFnZXMuCisgICogQ2xhcmlmeSBhbmQgY2xlYW4gdXAgZTJmc2NrJ3MgcHJvYmxlbSBkZXNjcmlwdGlvbnMKKyAgKiBBZGQgRHV0Y2ggdHJhbnNsYXRpb24sIGFuZCB1cGRhdGUgRnJlbmNoLCBQb2xpc2gsIFN3ZWRpc2gsIGFuZAorICAgIFR1cmtpc2ggdHJhbnNsYXRpb24uCisgICogbWtlMmZzIGFuZCBiYWRibG9ja3Mgd2lsbCBjaGVjayB0byBzZWUgaWYgdGhlIGRldmljZSBhcHBlYXJzIHRvIGJlCisgICAgYnVzeSBhbmQgYWJvcnQgaWYgc287IHRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIG9uIExpbnV4IDIuNiBzeXN0ZW1zLgorICAgIChDbG9zZXM6ICMzMDg1OTQpCisgICogRml4IGZpbGVmcmFnIHNvIHRoYXQgaXQgd29ya3Mgb24gNjQtYml0IHBsYXRmb3JtcyB3aGVyZSB0aGUgc2l6ZSBvZgorICAgIGFuIGludGVnZXIgIT0gdGhlIHNpemUgb2YgYSBsb25nLiAgKENsb3NlczogIzMwOTY1NSkKKyAgKiBDaGFuZ2UgdGhlIGRlZmF1bHQgam91cm5hbCBzaXplIHRvIGJlIGJpZ2dlciBmb3IgbGFyZ2VyIGZpbGVzeXN0ZW1zLAorICAgIGdpdmVuIG1vZGVybiBtZW1vcnkgc2l6ZXMuCisgICogRml4IGNvbV9lcnIgbGlicmFyeSBzbyBpdCBpcyBjb21wYXRpYmxlIHdpdGggTUlUIGtyYjUgMS40LgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIE1vbiwgMjAgSnVuIDIwMDUgMTc6MTE6MjkgLTA0MDAKKworZTJmc3Byb2dzICgxLjM3KzEuMzgtV0lQLTA1MDktMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBNYWtlIHRoZSBibGtpZCBsaWJyYXJ5IG11Y2ggbW9yZSBlZmZpY2llbnQgd2hlbiBhIG5ldyBkZXZpY2UgaXMgYWRkZWQKKyAgICBvbiBzeXN0ZW1zIHdpdGggYSBodWdlIG51bWJlciBvZiBkaXNrcy4KKyAgKiBGaXggaGFuZGxpbmcgb2YgdGhlIFBBR0VSIGFuZCBTU19SRUFETElORV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgIGluIHRoZSBzcyBsaWJyYXJ5LCBhbmQgdGhlIFRFU1RfSU9fKiBlbnZpcm9uZW1udCB2YWlhYmxlcyBmb3IgdGhlCisgICAgdGVzdF9pbyBpb19tYW5hZ2VyLCB3aGljaCB3YXMgYWNjaWRlbnRhbGx5IGJyb2tlbiBpbiAxLjM3LTEuCisgICogRml4IGxpYmJsa2lkJ3MgcmVjb2duaXRpb24gb2YgY3JhbWZzIGZpbGVzeXN0ZW1zLCBhbmQgYWRkIHN1cHBvcnQgZm9yCisgICAgY3JhbWZzIGxhYmVscy4KKyAgKiBGaXggZmlsZWZyYWcgdG8gZ2l2ZSBjb3JyZWN0IHJlc3VsdHMgd2hlbiB0aGUgZmlyc3QgYmxvY2sgZm91bmQgaXMgYW4KKyAgICBpbmRpcmVjdCBibG9jay4gIChDbG9zZXM6ICMzMDc2MDcpCisgICogRml4IGRlYnVnZnMgc2VnIGZhdWx0IHdoZW4gdGhlIHN0YXQgY29tbWFuZCBpcyBnaXZlbiBhbmQgYSBmaWxlc3lzdGVtCisgICAgaXMgbm90IG9wZW4uCisgICogSW1wcm92ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwYXJhbm9pYSBjaGVja3MuCisgICogRml4IGUyZnNjaydzIGhhbmRsaW5nIG9mIG11bHRpcGx5IGNsYWltZWQgYmxvY2tzIGludm9sdmluZyB0aGUgcmVzaXplCisgICAgaW5vZGUuCisgICogV2hlbiBkZXRlcm1pbmluZyB0aGUgbGlicmFyaWVzIG5lZWRlZCBmb3IgdGhlIGluaXRyZCwgdW5zZXQgTERfUFJFTE9BRAorICAgIGFuZCBMRF9MSUJSQVJZX1BBVEggYW5kIGZpbHRlciBvdXQgbGlicmFyaWVzIGZvdW5kIGluCisgICAgL2V0Yy9sZC5zby5wcmVsb2FkLiAgKENsb3NlczogIzMwNDAwMykKKyAgKiBVcGRhdGUgU3dlZGlzaCB0cmFuc2xhdGlvbiwgYW5kIGFkZGVkIHRyYW5zbGF0aW9uIGZvciBSd2FuZGEuCisgICogTWlub3IgbWFuIHBhZ2Ugc3BlbGxpbmcvdHlwbyBmaXhlcy4gIChDbG9zZXM6ICMzMDQ1OTEsICMzMDQ1OTIsCisgICAgIzMwNDU5NCwgIzMwNDU5NywgIzMwNDU5MykKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sICA5IE1heSAyMDA1IDA5OjEwOjIwIC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zNy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBmaWxlZnJhZyBzbyB0aGF0IGl0IHdvcmtzIG5vbiBleHQyLzMgZmlsZXN5c3RlbXMgYWdhaW4uCisgICAgKENsb3NlczogIzMwMzUwOSkKKyAgKiBNYWtlIHN1cmUgd2UgaW5jbHVkZSBzdGRsaWIuaCB0byBmaXggYSBjb3JlIGR1bXAgYnVnIGluIG1rZTJmcyBvbiB0aGUKKyAgICBJQTY0IGFyY2hpdGVjdHVyZSAob3Igb3RoZXIgcGxhdGZvcm1zIHdoZXJlIHNpemVvZihwdHIpID4gc2l6ZW9mKGludCkpCisgICAgKENsb3NlczogIzMwMjIwMCkKKyAgKiBBZGQgbWlzc2luZyByZXR1cm4gdmFsdWVzIHNvIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGdhcmJhZ2UgaW4gY2VydGFpbgorICAgIGVycm9yIGNhc2VzIGluIGV4dDJmc193cml0ZV9uZXdfaW5vZGUoKSBhbmQgZXh0MmZzX3JlYWRfaW50X2Jsb2NrKCkuCisgICogRml4IG1pbm9yIHNwZWxsaW5nIHR5cG8gaW4gdGhlIG1rZTJmcyBtYW4gcGFnZQorICAqIEF2b2lkIGRvaW5nIHRoZSBMT1dfRFRJTUUgY2hlY2tzIGlmIHRoZSBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZQorICAgIGluZGljYXRlcyB0aGF0IHRoZSBzeXN0ZW0gY2xvY2sgbWF5IG5vdCBiZSBzZXQgY29ycmVjdGx5LgorICAqIEFkZCBmdXJ0aGVyIHBhcmFub2lhIGNoZWNrcyB0byB0aGUgYmxraWQsIGV4dDJmcywgYW5kIHNzIGxpYnJhcmllcyB0bworICAgIG1ha2UgdGhlbSBzYWZlIHRvIGNhbGwgZnJvbSBzZXR1aWQgb3Igc2V0Z2lkIGFwcGxpY2F0aW9ucy4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsICA5IEFwciAyMDA1IDExOjA4OjA0IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlLgorICAqIEZpeGVkIGEgYnVnIGluIGUyZnNjayBzbyBpdCB3b3VsZCBub3RpY2UgaWYgYSBmaWxlIHdpdGggYW4gZXh0ZW5kZWQKKyAgICBhdHRyaWJ1dGUgYmxvY2sgd2FzIGV4YWN0bHkgMioqMzIgYmxvY2tzLCBzdWNoIHRoYXQgaV9ibG9ja3Mgd3JhcHBlZAorICAgIHRvIHplcm8uCisgICogRml4ZWQgYSBidWcgaW4gZmlsZWZyYWcgd2hpY2ggY2F1c2VkIGl0IHRvIGZhbHNlbHkgcmVwb3J0IGEKKyAgICBkaXNjb250aW51aXR5IHdoZW4gdGhlcmUgYXJlIG9uZSBvciBtb3JlIHVuYWxsb2NhdGVkIGJsb2NrcyBhdCB0aGUKKyAgICBiZWdpbm5pbmcgb2YgYSBmaWxlLgorICAqIEZpeCB0aGUgbWlzc2luZyB0cmFuc2xhdGlvbnMgKGNhdXNlZCBieSBhIGJ1ZyBpbiB0aGUgZ2VuLXRhcmJhbGwKKyAgICBzY3JpcHQpLiAgKENsb3NlczogIzI5Njc2OSkKKyAgKiBBZGQgc3VwcG9ydCBpbiBlMmZzY2sgYW5kIGRlYnVnZnMgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gaW5vZGVzLgorICAqIEZpeCB0aGUgbWlzc2luZyB0cmFuc2xhdGlvbnMgKGNhdXNlZCBieSBhIGJ1ZyBpbiB0aGUgZ2VuLXRhcmJhbGwgc2NyaXB0KS4KKyAgICAoQ2xvc2VzOiAjMjk2NzY5KQorICAqIEZvcmNlIGNvbXBpbGVfZXQgYW5kIG1rX2NtZHMgdG8gdXNlIC91c3IvYmluL2F3ayBzbyB0aGF0IHdlIHdpbGwgd29yaworICAgIG9uIGFueSBEZWJpYW4gc3lzdGVtIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmVyc2lvbiBvZiBhd2sgaXMgaW5zdGFsbGVkLgorICAgIChDbG9zZXM6ICMyOTkzNDEpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAyMSBNYXIgMjAwNSAyMjozMTowOCAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzZyZWxlYXNlLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCisgICogTWFrZSBmaWxlZnJhZyBwcmludCB0aGUgZmlyc3QgYW5kIGxhc3QgYmxvY2tzIHdoZW4gaW4gdmVyYm9zZSBtb2RlLgorICAqIERyb3Agc3BhcmMgYXNzZW1ibHkgYml0b3BzOyBpdCdzIGxlc3MgZWZmaWNpZW50IHRoYW4gZ2NjIDMuNCdzCisgICAgZ2VuZXJhdGVkIGNvZGUsIGFuZCBpdCB0cmlnZ2VycyBjb21waWxlciB3YXJuaW5ncyBvbiBzcGFyYyA2NC4KKyAgICAoQ2xvc2VzOiAjMjMyMzI2KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIEZyaSwgIDQgRmViIDIwMDUgMjA6NTg6MzUgLTA1MDAKKworZTJmc3Byb2dzICgxLjM2cmM1LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTWFrZSBibGtpZCAtdCB3b3JrIG1vcmUgY29uc2lzdGVudGx5IGV2ZW4gd2hlbiB0aGUgY2FjaGUgZmlsZSBpcyBub3QKKyAgICBhdmFpbGFibGUgb3Igc2V0IHRvIC9kZXYvbnVsbC4gIChDbG9zZXM6ICMyOTI0MjUpCisgICogRG9uJ3QgZXZlciB1c2UgYSBibG9ja3NpemUgZ3JlYXRlciB0aGFuIDRrLCBzaW5jZSBub3QgYWxsIDIuNiBrZXJuZWxzCisgICAgd2lsbCBzdXBwb3J0IHRoaXMuCisgICogRml4IGJ1ZyB3aGVyZSBta2UyZnMgd291bGQgbm90IGNvcnJlY3RseSBjcmVhdGUgZmlsZXN5c3RlbXMgZ3JlYXRlcgorICAgIHRoYW4gNFRCLgorICAqIEZpeCBlMmZzY2sgc28gaXQgd29uJ3QgZGVsZXRlIHN5bWxpbmtzIHRoYXQgY29udGFpbiBhbiBleHRlbmRlZAorICAgIGF0dHJpYnV0ZSBhZnRlciB0aGUgZXh0X2F0dHIgZmVhdHVyZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQuCisgICogRml4IGUyZnNjaydzIHJlc2l6ZSBpbm9kZSBoYW5kbGluZyBpbiBzb21lIGFkZGl0aW9uYWwgY29ybmVyIGNhc2VzLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFRodSwgMjcgSmFuIDIwMDUgMjI6NDQ6MzEgLTA1MDAKKworZTJmc3Byb2dzICgxLjM2cmM0LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IGEgYnVnIGluIHJlc2l6ZTJmcyB3aGVyZSB3ZSBkb24ndCByZWxlYXNlIHRoZSBibG9ja3MgYmVsb25naW5nIHRvCisgICAgdGhlIG9sZCBpbm9kZSB0YWJsZSBibG9ja3Mgd2hlbiB3ZSBtb3ZlIHRoZSBpbm9kZSB0YWJsZS4KKyAgICAoQ2xvc2VzOiAjMjkwODk0KQorICAqIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHdyaXRlIGdhcmJhZ2Ugd2hlbiB3cml0aW5nIGEgbGFyZ2UgaW5vZGUuCisgICogQ2hlY2sgTlRGUyBhaGVhZCBvZiBvdGhlciBmaWxlc3lzdGVtcyBzaW5jZSBXaW5kb3dzIGRvZXNuJ3QgYWx3YXlzCisgICAgY2xlYXJpbmcgZW5vdWdoIG9mIHRoZSBwYXJ0aXRpb24gdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggb2xkZXIKKyAgICBmaWxlc3lzdGVtcy4gIChDbG9zZXM6ICMyOTE5OTApCisgICogRTJmc2NrIG5vdyBjaGVja3MgdGhlIHN1bW1hcnkgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uLCBhbmQKKyAgICBpZiBhbnkgb2YgdGhlIGluZm9ybWF0aW9uIGlzIG9idmlvdXNseSB3cm9uZywgaXQgd2lsbCBmb3JjZSBhIGZ1bGwKKyAgICBmaWxlc3lzdGVtIGNoZWNrLiAgKENsb3NlczogIzI5MTU3MSkKKyAgKiBDbGFyaWZpZWQgYW5kIHVwZGF0ZWQgdHVuZTJmcyBhbmQgYmxraWQgbWFuIHBhZ2VzCisgICogRml4IGUyZnNjayB0byBub3QgY29tcGxhaW4gd2hlbiB0aGUgcmVzaXplX2lub2RlIGZlYXR1cmUgaXMgZW5hYmxlZCwKKyAgICBzX3Jlc2VydmVkX2dkdF9ibG9ja3MgaXMgemVybywgYW5kIHRoZXJlIGlzIG5vIERJTkQgYmxvY2sgYWxsb2NhdGVkIGluCisgICAgdGhlIHJlc2l6ZSBpbm9kZS4KKyAgKiBGaXggYmxraWQgLXQgdG8gZGlzcGxheSBhbGwgZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEsCisgICAgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4gIChDbG9zZXM6ICMyOTA1MzApCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBibGtpZCBsaWJyYXJ5IHRvIHJlY29nbml6ZSBPcmFjbGUgQVNNIHZvbHVtZXMuCisgICogQWRkIHNldF9zdXBlcl92YWx1ZSBqbmxfYmxvY2tzW10gaW4gZGVidWdmcy4KKyAgKiBGaXggdGhlIGZpbGVmcmFnIHByb2dyYW0gc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgd2l0aCBzcGFyc2UgZmlsZXMuCisgICogRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggRnJlZUJTRCwgU29sYXJpcywgYW5kIEludGVsIEMrKyA4LjEuCisgICogQWRkIHN1cHBvcnQgZm9yIEZyZWVCU0QgYW5kIExpdGVzIGFzIE9TIENyZWF0b3IgdmFsdWVzLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMjYgSmFuIDIwMDUgMTA6MjI6MDIgLTA1MDAKKworZTJmc3Byb2dzICgxLjM2cmMzLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogUmVtb3ZlIGRlYnVnZ2luZyBwcmludGYncyBmcm9tIGUyaW1hZ2UncyAtcyBjb2RlLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMTkgSmFuIDIwMDUgMDI6MjU6NTMgLTA1MDAKKworZTJmc3Byb2dzICgxLjM2cmMzLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UKKyAgKiBVcGRhdGUgSXRhbGlhbiwgRnJlbmNoLCBhbmQgVHVya2lzaCB0cmFuc2xhdGlvbnMKKyAgKiBGaXhlZCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiB0aGUgZmlsZWZyYWcgcHJvZ3JhbQorICAqIEFkZCAtcyBvcHRpb24gdG8gZTJpbWFnZSB3aGljaCBzY3JhbWJsZXMgZGlyZWN0b3J5IGVudHJpZXMgd2hlbiBtYWtpbmcKKyAgICAgICAgcmF3IGltYWdlIGZpbGVzCisgICogTWFrZSBzdXJlIGUyZnNjayBkb2Vzbid0IGNyYXNoIGlmIC9wcm9jL2FjcGkvYWNfYWRhcHRlciBkb2VzIG5vdAorICAgICAgICBleGlzdAorICAqIEFkZGVkIFNvbGFyaXMsIEZyZWVCU0QgcG9ydGFiaWxpdHkgZml4ZXMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBXZWQsIDE5IEphbiAyMDA1IDAwOjMzOjMxIC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zNnJjMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlCisgICogVXBkYXRlIEl0YWxpYW4gdHJhbnNsYXRpb24KKyAgKiBBZGQgc3VwcG9ydCBmb3Igc3dhcCBwYXJ0aXRpb24gbGFiZWxzIGFuZCB1dWlkJ3MKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDExIEphbiAyMDA1IDE0OjEyOjE3IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zNnJjMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBhIEZUQkZTIGJ1ZyBmb3IgYW1kNjQvZ2NjLTMuMCAoQ2xvc2VzOiAjMjg5MTMzKQorICAqIE1pbm9yIG1hbiBwYWdlIGNsYXJpZmljYXRpb25zLiAgKENsb3NlczogIzI3MzY3OSkKKyAgKiBBZGQgc3VwcG9ydCBmb3Igb25saW5lIHJlc2l6aW5nIHZpYSB0aGUgcmVzaXplIGlub2RlLgorICAqIEJhZGJsb2NrcyB3aWxsIG5vdyBjb3JyZWN0bHkgZGlzcGxheSBibG9jayBudW1iZXJzIGdyZWF0ZXIgdGhhbgorICAgICAgICA5OTksOTk5LDk5OSBpbiBpdHMgcHJvZ3Jlc3MgZGlzcGxheS4KKyAgKiB0dW5lMmZzIHdpbGwgbm90IGFsbG93IHRoZSB1c2VyIGZyb20gc2V0dGluZyBhIHJpZGljdWxvdXMgbnVtYmVyIG9mCisgICAgICAgIHJlc2VydmVkIGJsb2NrcyB3aGljaCB3b3VsZCBjYXVzZSBlMmZzY2sgdG8gYXNzdW1lIHRoZSBzdXBlcmJsb2NrCisgICAgICAgIHdhcyBjb3JydXB0LiAgRTJmc2NrJ3Mgc3RhbmRhcmRzIGZvciB3aGF0IGlzIGEgcmlkaWN1bG91cyBudW1iZXIKKyAgICAgICAgb2YgcmVzZXJ2ZWQgYmxvY2tzIGhhcyBhbHNvIGJlZW4gcmVsYXhlZCB0byA1MCUgb2YgdGhlIGJsb2NrcyBpbgorICAgICAgICB0aGUgZmlsZXN5c3RlbS4KKyAgKiBUaGUgYmxraWQgbGlicmFyeSB3aWxsIHJldHVybiB2ZmF0IGluIHByZWZlcmVuY2UgdG8gbXNkb3MsIGFuZCBleHQzIGluCisgICAgICAgIHByZWZlcmVuY2UgdG8gZXh0MiAoaWYgdGhlIGpvdXJuYWxsaW5nIGZsYWcgaXMgc2V0KSBzbyB0aGF0IG1vdW50CisgICAgICAgIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLiAgKENsb3NlczogIzI4NzQ1NSkKKyAgKiBUaGUgZnNjayBwcm9ncmFtIHdpbGwgbm93IGFjY2VwdCBhbiBvcHRpb25hbCBmaWxlZGVzY3JpcHRvciBhcmd1bWVudAorICAgICAgICB0byB0aGUgLUMgb3B0aW9uLgorICAqIE1rZTJmcyB3aWxsIG5vdyB1c2UgdGhlIC1FIG9wdGlvbiBmb3IgZXh0ZW5kZWQgb3B0aW9uczsgdGhlIG9sZCAtUgorICAgICAgICAocmFpZCBvcHRpb25zKSBvcHRpb24gaXMgc3RpbGwgYWNjZXB0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAqIEZpeCBhIGRvdWJsZS1mcmVlIHByb2JsZW0gaW4gcmVzaXplMmZzLiAgKFJlZCBIYXQgQnVnemlsbGEgIzEzMjcwNykKKyAgKiBNa2UyZnMgd2lsbCBub3cgYWNjZXB0IGEgc2l6ZSBpbiBtZWdhYnl0ZXMgb3IgZ2lnYWJ5dGVzICh2aWEgIjMybSIgb3IKKyAgICAgICAgIjRnIiBvbiB0aGUgY29tbWFuZCBsaW5lKSBpZiB0aGUgdXNlciBmaW5kcyB0aGlzIG1vcmUgY29udmVuaWVudAorICAgICAgICB0aGFuIHNwZWNpZnlpbmcgYSBibG9jayBjb3VudC4KKyAgKiBGaXggYW4gb2JzY3VyZSwgaGFyZC10byBmaW5kIGJ1ZyBpbiAiZTJmc2NrIC1TIiBjYXVzZWQgYnkgYW4gaW5vZGUKKyAgICAgICAgY2FjaGUgY29uaGVyZW5jeSBwcm9ibGVtLgorICAqIERlYnVnZnMgbm93IHN1cHBvcnRzIGEgbmV3IGNvbW1hbmQsIHNldF9pbm9kZV9maWVsZCwgd2hpY2ggYWxsb3dzIGEKKyAgICAgICAgdXNlciB0byBtYW51YWxseSBzZXQgYSBzcGVjaWZpYyBpbm9kZSBmaWVsZCBtb3JlIGNvbnZlbmllbnRseSwgYXMKKyAgICAgICAgd2VsbCBhcyBzZXQgZW50cmllcyBpbiB0aGUgaW5kaXJlY3QgYmxvY2sgbWFwLgorICAqIERlYnVnZnMncyBzZXRfc3VwZXJfdmFsdWUgY29tbWFuZCBoYXMgYmVlbiBlbmhhbmNlZCBzbyB0aGF0IHRoZSB1c2VyCisgICAgICAgIGNhbiBzZXQgbW9zdCBzdXBlcmJsb2NrIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBkYXRlL3RpbWUgZmllbGRzIGFuZAorICAgICAgICBzb21lIG9mIHRoZSBtb3JlIG5ld3NseSBhZGRlZCBzdXBlcmJsb2NrIGZpZWxkcy4KKyAgKiBFMmZzcHJvZ3MgcHJvZ3JhbXMgbm93IGFjY2VwdCBhbiBvZmZzZXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBmaWxlCisgICAgICAgIHNwZWNpZmllcnMsIHZpYSB0aGUgc3ludGF4OiAiL3RtcC90ZXN0LmltZz9vZmZzZXQ9MTAyNCIKKyAgKiBFMmZzcHJvZ3Mgd2lsbCBub3cgYWNjZXB0IGJsb2Nrc2l6ZXMgdXAgdG8gNjU1MzY7IGtlcm5lbCBzdXBwb3J0IG9uCisgICAgICAgIHRoZSB4ODYgZG9lc24ndCBleGlzdCwgYnV0IGl0IGlzIHVzZWZ1bCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLgorICAqIEZpeCBidWcgaW4gZGVidWdmcyB3aGVyZSBraWxsX2ZpbGUgd291bGQgbGVhZCB0byBlcnJvcnMgd2hlbiBkZWxldGluZworICAgICAgICBkZXZpY2VzIGFuZCBzeW1saW5rcy4gIChTb3VyY2Vmb3JnZSBCdWdzICM5NTQ3NDEgYW5kICM5NTcyNDQpCisgICogRml4IGJ1ZyBpbiB0aGUgYmxraWQgbGlicmFyeSB3aGVuIGRldGVjdGluZyB0aGUgb2NmczEgZmlsZXN5c3RlbQorICAqIFVwZGF0ZWQgSXRhbGlhbiB0cmFuc2xhdGlvbiBmaWxlCisgICogRTJmc2NrIHdpbGwgbm93IHJlY292ZXIgZnJvbSBhIGpvdXJuYWwgY29udGFpbmluZyBpbGxlZ2FsIGJsb2Nrcy4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksICA3IEphbiAyMDA1IDIwOjIyOjM2IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zNS05KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1pbm9yIG1hbiBwYWdlIGNsYXJpZmljYXRpb25zLiAgKENsb3NlczogIzI3MzY3OSkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDI4IFNlcCAyMDA0IDEwOjI5OjI5IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zNS04KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFJlbW92ZSBkb3VibGUgIi8vIiB3aGVuIGxpc3RpbmcgYXR0cmlidXRlcyBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb3IKKyAgICAgICB3aGVuIHRoZXJlIGlzIGEgdHJhaWxpbmcgJy8nIGluIHRoZSBkaXJlY3RvcnkgbmFtZS4gIChDbG9zZXM6ICMyNzI5NDMpCisgICogTWFrZSBzdXJlIHRoZSBjb25maWd1cmUgZmlsZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlLmluIHRoZQorICAgICAgIGRlYmlhbi9ydWxlcyBmaWxlIHNvIHRoYXQgYSBkcGtnLXNvdXJjZSBjcmVhdGVkIHBhdGNoIHdvbid0CisgICAgICAgdHJpZ2dlciBhbiBhdHRlbXB0IHJlYnVpbGQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICAgICAgKENsb3NlczogIzI3MjU1OCwgIzI3MzI0MikKKyAgKiBNYWtlIHN1cmUgL3Vzci9saWIvZTJpbml0cmRfaGVscGVyIGlzIGluIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyAgICAgICAoQ2xvc2VzOiAjMjcyNjk4LCAjMjcyNzI4LCAjMjczMTYxLCAjMjczMTYzKQorICAqIE9ubHkgdXNlIGJsb2Nrc2l6ZXMgPiA0ayBvbiBMaW51eCAyLjYgYW5kIG5ld2VyIHN5c3RlbXMuICAoQ2xvc2VzOiAjMjcxMDY0KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFNhdCwgMjUgU2VwIDIwMDQgMDc6Mzc6NTIgLTA0MDAKKworZTJmc3Byb2dzICgxLjM1LTcpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTWFrZSBzdXJlICJkb25lIiBnZXRzIGNvcnJlY3RseSB0cmFuc2xhdGVkIGluIGJhZGJsb2Nrcyg4KSwgYW5kIHVwZGF0ZQorICAgICAgRnJlbmNoIHRyYW5zbGF0aW9uIChDbG9zZXM6ICMyNTI4MzYpCisgICogQWx3YXlzIGJ1aWxkIHRoZSBmc2NrIHdyYXBwZXIgb24gRGViaWFuIHN5c3RlbXMgKENsb3NlczogIzI0ODA1MCkKKyAgKiBGaWx0ZXIgb3V0IGxpbnV4LWdhdGUuc28sIHdoaWNoIGlzIGEgcHNldWRvIGVudHJ5IGZvciB0aGUgMzItPjY0Yml0CisgICAgICB0cmFuc2xhdGlvbiBmb3IgYW1kNjQgc3lzdGVtcywgaW4gdGhlIGluaXRyZCBjcmVhdGlvbiBzY3JpcHQuCisgICAgICAoQ2xvc2VzOiAjMjUzNTk1KQorICAqIENoYW5nZSB0aGUgaW5pdHJkIHNjcmlwdHMgdG8gYmUgdXNlIGEgaGVscGVyIHByb2dyYW0gd2hpY2ggYXZvaWRzCisgICAgICAgbmVlZGluZyB0byBtb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtIGFuZCB1c2UgYXdrIHRvIHF1ZXJ5IHRoZQorICAgICAgIC9ldGMvZnN0YWIgZmlsZS4gIChDbG9zZXM6ICMyNDc3NzUpCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSBvY2ZzMiBmaWxlc3lzdGVtIHRvIHRoZSBibGtpZCBsaWJyYXJ5LgorICAqIFZhcmlvdXMgcG9ydGFiaWxpdHkgZml4ZXMgZm9yIEh1cmQgYW5kIEZyZWVCc2QsIGFzIHdlbGwgYXMKKyAgICAgICAgcmVtb3ZpbmcgWFNJOmlzbXMuICAoQ2xvc2VzOiAjMjU2NjY5LCAjMjY0NjMwLCAjMjY5MDQ0LCAjMjU1NTg5KQorICAqIFVwZGF0ZSBjb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgZnJvbSB0aGUgRlNGLgorICAqIE1pbm9yIG1hbnVhbCBwYWdlIGNsYXJpZmljYXRpb25zIChDbG9zZXM6ICMyNjgxNDgpCisgICogRml4IHdyaXRlIG9yZGVyaW5nIHByb2JsZW1zIHRvIG1ha2UgZTJmc2NrIG1vcmUgcm9idXN0IGluIHRoZSBmYWNlCisgICAgICAgb2Ygc3lzdGVtIGNyYXNoZXMgd2hpbGUgcmVwbGF5aW5nIHRoZSBqb3VybmFsLCBldGMuCisgICogRml4IGRlYnVnZ2luZyBwcmludGYgaW4gcmVzaXplMmZzLiAgKENsb3NlczogIzI3MTYwNSkKKyAgKiBBZGQgZGVidWdmcyAtZCBvcHRpb24gdG8gdXNlIGEgc2VwYXJhdGUgc291cmNlIG9mIGRhdGEgYmxvY2tzIHdoZW4KKyAgICAgICByZWFkaW5nIGZyb20gYW4gZTJpbWFnZSBmaWxlLgorICAqIEFkZCBlMmltYWdlIC1JIG9wdGlvbiB3aGljaCBhbGxvd3MgdGhlIGUyaW1hZ2UgbWV0YWRhdGEgdG8gYmUKKyAgICAgICBpbnN0YWxsZWQgaW50byBhIGZpbGVzeXN0ZW0uCisgICogQ2hhbmdlIGUyZnNjayB0byBhY2NlcHQgZGlyZWN0b3JpZXMgZ3JlYXRlciB0aGFuIDMyTUIuCisgICogQWRkIHRlc3RfaW8gbWVjaGFuaXNtcyB0byBhYm9ydCBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgdG8gYQorICAgICAgIHBhcnRpY3VsYXIgYmxvY2suCisgICogRml4IGJsa2lkIGZpbGUgZGVzY3JpcHRvciBhbmQgbWVtb3J5IGxlYWsuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU2F0LCAxOCBTZXAgMjAwNCAwOTo1ODo0NiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzUtNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBJbiB0aGUgbWtpbml0cmQgc2NyaXB0LCBtYWtlIHN1cmUgdGhlIGRpcmVjdG9yaWVzIGV4aXN0IGJlZm9yZQorICAgIHRyeWluZyB0byBjb3B5IGluIHRoZSBuZWVkZWQgc2hhcmVkIGxpYnJhcmllcy4gIChDbG9zZXM6ICMyNDQwNTgsICMyNDY0ODApCisgICogSW4gdGhlIG1raW5pdHJkIHNjcmlwdCwgdXNlIExEX0FTU1VNRV9LRVJORUw9Mi40IGlmIG5lY2Vzc2FyeS4KKyAgICAoQ2xvc2VzOiAjMjQ1OTMxKQorICAqIEluIHRoZSBta2luaXRyZCBzY3JpcHQgY29weSBpbiAvdXNyL2Jpbi9hd2sgaW5zdGVhZCBvZiAvdXNyL2Jpbi9tYXdrLgorICAgIChDbG9zZXM6ICMyNDU2NzApCisgICogSW4gdGhlIGluaXRyZCBzY3JpcHQsIGZhaWwgcXVpZXRseSBpZiAvbW50L2V0Yy9mc3RhYiBkb2VzIG5vdCBleGlzdC4KKyAgICAoQ2xvc2VzOiAjMjQ2OTE3KQorICAqIE1pbm9yIHVwZGF0ZXMgdG8gR2VybWFuIHRyYW5zbGF0aW9uIChDbG9zZXM6ICMyNDQxMDUpCisgICogU2luY2Ugd29vZHkncyBzeXN2aW5pdCBwYWNrYWdlIGlzIGJlZm9yZSB0aGUgaW5pdHNjcmlwdHMgd2VyZSBicm9rZW4gb3V0CisgICAgd2UgbmVlZCBhbiBleHBsaWN0IENvbmZsaWN0OiBzeXN2aW5pdCAoPDwgMi44NS00KSBoZWFkZXIuIChDbG9zZXM6ICMyNDM4MjkpCisgICogVXBkYXRlIHRoZSBVVUlEIGxpYnJhcnkgbWFuIHBhZ2VzCisgICogRml4IGEgWTguODg4OEsgcG90ZW50aWFsIHByb2JsZW0gd2l0aCB0aGUgdXVpZCBsaWJyYXJ5CisgICogTWlub3IgdXBkYXRlcyB0byB0aGUgZ2VybWFuIHRyYW5zbGF0aW9uCisgICogQ2xhcmlmaWVkL2NvcnJlY3RlZCB0aGUgY29weXJpZ2h0IHN0YXRlbWVudHMgb2YgdGhlIFVVSUQgYW5kIGJsa2lkCisgICAgbGlicmFyaWVzIGluIHRoZSBEZWJpYW4gY29weXJpZ2h0IGZpbGVzLgorICAqIEFkZGVkIHNhbml0eSBjaGVjayB0byB0aGUgYmxraWQgbGlicmFyeSBzbyB0aGF0IGlmIGN1cnJlbnQgdGltZSBpcworICAgIGxlc3MgdGhhbiBsYXN0IHRpbWUgYSBkZXZpY2UgaXMgdmVyaWZpZWQsIGZvcmNlIGEgcmV2ZXJpZmljYXRpb24gc2luY2UKKyAgICBpdCBtZWFucyB0aGUgc3lzdGVtIHRpbWUgaXMgbm90IHRydXN0d29ydGh5LgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFR1ZSwgIDQgTWF5IDIwMDQgMTY6MjM6MDYgLTA0MDAKKworZTJmc3Byb2dzICgxLjM1LTUpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogQWRkIHV1aWRfdW5wYXJzZV91cHBlcigpIGFuZCB1dWlkX3VucGFyc2VfbG93ZXIoKSBmdW5jdGlvbnMgdG8gdGhlCisgICAgdXVpZCBsaWJyYXJ5LgorICAqIEFkZHJlc3MgR05VL0tGcmVlQlNEIHBvcnRhYmlsaXR5IGlzc3VlcyAoQ2xvc2VzOiAjMjM5OTM0KQorICAqIFVzZSB1bnNpZ25lZCBmb3IgMSBiaXQgd2lkZSBiaXRmaWVsZHMgaW4gaGVhZGVyIGZpbGVzIHRvIGF2b2lkCisgICAgSW50ZWwgQysrIGNvbXBpbGVyIHdhcm5pbmdzLgorICAqIFVzZSBDOTkgc3RkaW50LmggdHlwZXMgaW4gdGhlIHV1aWQgbGlicmFyeQorICAqIEZpeCB1cCBhbmQgY2xlYW51cCB1dWlkIG1hbiBwYWdlcworICAqIENoYW5nZSB0aGUgbGljZW5zaW5nIG9mIHRoZSB1dWlkIG1hbiBwYWdlcyB0byBiZSAzLWNsYXVzZSBCU0QuCisgICogRml4IHRoZSBpbml0cmQgc2NyaXB0cyBzbyB0aGF0IHRoZSBhdXRvbWF0aWMgZXh0MyBqb3VybmFsCisgICAgY29udmVyc2lvbiBhY3R1YWxseSB3b3JrcyBjb3JyZWN0bHk7IGFsc28gYWxsb3cgY29udmVyc2lvbiBvZiB0aGUgcm9vdAorICAgIGZpbGVzeXN0ZW0gZnJvbSBleHQzIGJhY2sgdG8gZXh0MiAgKENsb3NlczogIzI0MTE4MykKKyAgKiBNaW5vciBtYW4gcGFnZSBmaXhlcyAoQ2xvc2VzOiAjMjQxOTQwLCAyNDI5OTUpCisgICogVXNlIHRoZSBERUJVR0ZTX1BBR0VSIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHByZWZlcmVuY2UgdG8gUEFHRVIKKyAgICAoQ2xvc2VzOiAjMjM5NTQ3KQorICAqIEFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbgorICAqIEJlIGZsZXhpYmxlIGFib3V0IHRoZSBuYW1lIG9mIHRoZSBBQ1BJIGRldmljZSB0aGF0IGNvb3Jlc3BvbmRzIHRvCisgICAgdGhlIEFDIGFkYXB0ZXIgKENsb3NlczogIzI0MjEzNikKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sIDEyIEFwciAyMDA0IDEyOjM4OjM0IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zNS00KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBidWcgaW4gdGhlIGJsa2lkIGxpYnJhcnkgKGludHJvZHVjZWQgaW4gMS4zNS0zKSB3aGljaCBjYXVzZWQKKyAgICB0aGUgcHJvYmUgZnVuY3Rpb24gdG8gY29tcGxldGVseSBtYWxmdW5jdGlvbi4gIChDbG9zZXM6ICMyMzkxOTEpCisgICogTWFrZSB0aGUgZGVidWdmcyBjb21tYW5kJ3MgbGluayBjb21tYW5kIHNldCB0aGUgZmlsZXR5cGUgaW5mb3JtYXRpb24KKyAgICBjb3JyZWN0bHkuCisgICogVXBkYXRlIHRoZSBQb2xpc2gsIFN3ZWRpc2gsIGFuZCBUdXJraXNoIHRyYW5zbGF0aW9ucworICAqIEFkZCBhbiAtbyBvcHRpb24gdG8gdGhlIGJsa2lkIHByb2dyYW0gd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvCisgICAgY29udHJvbCB0aGUgb3V0cHV0IGZvcm1hdCBvZiBibGtpZC4KKyAgKiBGaXhlZCBhbmQgY2xlYW5lZCB1cCB0aGUgdHVuZTJmcyBhbmQgYmxraWQgbWFuIHBhZ2VzIChDbG9zZXM6ICMyMzg3NDEpCisgICogSW1wcm92ZSBVVUlEIGdlbmVyYXRpb24gYWxnb3JpdGhtICh1c2UgYWxsIDE0IGJpdHMgaW4gdGhlIGNsb2NrIHNlcXVlbmNlKQorICAqIENoYW5nZSB0aGUgbGljZW5zZSBvbiB0aGUgVVVJRCBsaWJyYXJ5IHRvIGJlIDMtY2xhdXNlIEJTRC4KKyAgKiBSZW1vdmUgdGhlIG9ubHktcGFydGlhbGx5LWltcGxlbWVudGVkIC1wIG9wdGlvbiB0byBibGtpZC4KKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDIxIE1hciAyMDA0IDIwOjE3OjAzIC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zNS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1lbnRpb24gZTJpbWFnZSdzIGxpbWl0YXRpb24gaW4gd3JpdGluZyBhIG5vcm1hbCBpbWFnZSBmaWxlIHRvCisgICAgc3Rkb3V0IChDbG9zZXM6ICMyMzYzODMpCisgICogT25seSB1c2UgQkxLR0VUU0laRTY0IG9uIExpbnV4IDIuNiBzaW5jZSBpdCBpcyB1bnJlbGlhYmxlIG9uIExpbnV4IDIuNC4KKyAgICAoQ2xvc2VzOiAjMjM2NTI4KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIE1vbiwgIDggTWFyIDIwMDQgMTQ6MTk6MTUgLTA1MDAKKworZTJmc3Byb2dzICgxLjM1LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVXNlIDY0LWJpdCBpb2N0bCdzIGlmIHByZXNlbnQgdG8gZGV0ZXJtaW5lIHRoZSA2NC1iaXQgc2l6ZSBvZiBhIGRldmljZQorICAqIEFkZCB0dW5lMmZzIHRvIHRoZSBlMmZzcHJvZ3MgdWRlYiBwYWNrYWdlIChDbG9zZXM6ICMyMzU2MzkpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAgMiBNYXIgMjAwNCAxMDoxMzozOSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gdmVyc2lvbi4KKyAgKiBGaXggImJhZGJsb2NrcyAtdCByYW5kb20iLiAoQ2xvc2VzOiAjMjM0ODI4KQorICAqIEZpeCAiZTJmc2NrIC1rIi4gIChDbG9zZXM6ICMyMzQ5OTMpCisgICogQ2hhbmdlIGJhZGJsb2NrJ3MgZGVmYXVsdCBudW1iZXIgb2YgYmxvY2tzIHRlc3RlZCBhdCBvbmNlIGZyb20KKyAgICAxNiB0byA2NC4gIChDbG9zZXM6ICMyMzIyNDApCisgICogc3MtZGV2IGFuZCBjb21lcnItZGV2IG5vdyB1c2UgYSB2ZXJzaW9uZWQgZGVwZW5kZW5jeSBmb3IgbGlic3MyIGFuZAorICAgIGxpYmNvbWVycjIsIHJlc3BlY3RpdmVseS4gIChDbG9zZXM6ICMyMzUyODApCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU2F0LCAyOCBGZWIgMjAwNCAxMDoxNDoxOSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwNC4wMS4zMS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFkZCBhIG5ldyAtayBvcHRpb24gdG8gZTJmc2NrIHdoaWNoIGtlZXBzIHRoZSBleGlzdGluZyBiYWRibG9ja3MKKyAgICBsaXN0IHdoZW4gdXNpbmcgdGhlIC1jIG9wdGlvbi4gIChDbG9zZXM6ICMyMjkxMDMpCisgICogVXBkYXRlIGRlYnVnZnMgdG8gc3VwcG9ydCBuZXcgbGFyZ2UgbWFqb3IvbWlub3IgZGV2aWNlIG51bWJlcnMKKyAgICBzdXBwb3J0ZWQgYnkgTGludXggMi42LiAgKENsb3NlczogIzg2NTI4OSkKKyAgKiBGaXggbWFrZWZpbGVzIHNvIHRoYXQgaXQgd2lsbCBidWlsZCBjb3JyZWN0bHkgd2l0aCAtLWVuYWJsZS1wcm9maWxlLgorICAqIEFkZCAtbWllZWUgd2hlbiBjb21waWxpbmcgd2l0aCBHQ0Mgb24gYW4gQWxwaGEuCisgICogRml4IGUyZnNjayBwcmVlbiBtb2RlIG1lc3NhZ2VzIHVzaW5nIHBhc3MgMUIvQy9ELgorICAqIEZpeCB0aGUgZGVidWdmcyBtYW4gcGFnZS4gIChDbG9zZXM6ICMyMzI0MDYpCisgICogRml4IHRoZSBleHQyZnMuaCBoZWFkZXIgZmlsZSB0byB3b3JrIGNvcnJlY3RseSB3aXRoIEMrKy4KKyAgKiBlMmZzY2sgYW5kIGRlYnVnZnMgbm93IGNvcnJlY3RseSBkZWFscyB3aXRoIHN5bWxpbmtzIHRoYXQgaGF2ZQorICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aG9zZSBjcmVhdGVkIGJ5IFNFIExpbnV4LgorICAgIChDbG9zZXM6ICMyMzIzMjgpCisgICogTWFrZSBzdXJlIGZpbGVmcmFnIGFjdHVhbGx5IGdldHMgY29tcGlsZWQgdW5kZXIgTGludXggKENsb3NlczogIzIzMDk5MikKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsIDI0IEZlYiAyMDA0IDAwOjE2OjQzIC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zNCsxLjM1LVdJUC0yMDA0LjAxLjMxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogRml4IGJ5dGUgc3dhcCBidWdzIGluIGUyZnNjayB0aGF0IGNhdXNlZCB0aGUgam91cm5hbCBiYWNrdXAgbG9jYXRpb24KKyAgICBpbiB0aGUgc3VwZXJibG9jayBhbmQgc3ltbGlua3MgY3JlYXRlZCBieSBTRSBMaW51eCB0byBiZSBjbGVhcmVkCisgICAgYnkgZTJmc2NrIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuICAoQ2xvc2VzOiAjMjI4NzIzKQorICAqIENoYXR0ciBub3cgc3RvcHMgcHJvY2Vzc2luZyBvcHRpb25zIHdoZW4gaXQgc2VlcyAnLS0nLiAgKENsb3NlczogIzIyNTE4OCkKKyAgKiBBZGQgRnJlZUJTRCBwb3J0IGZpeHVwcworICAqIFVzZSB0aGUgREVCVUdGU19QQUdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBwcmVmZXJlbmNlIHRvIFBBR0VSLgorICAgIERvY3VtZW50IHRoYXQgbGVzcyBpcyBhIHJlYWxseSwgcmVhbGx5LCByZWFsbHkgYmFkIHBhZ2VyIHRvIHVzZQorICAgIGZvciBkZWJ1Z2ZzICh1bmZvcnR1bmF0ZWx5LCBEZWJpYW4gcG9saWN5IHNheXMgd2UgbXVzdCB1c2UKKyAgICAvdXNyL2Jpbi9wYWdlciBldmVuIGlmIGl0IHJlc3VsdHMgaW4gdmVyeSBhbm5veWluZyBiZWhhdmlvdXIgZm9yCisgICAgdGhlIHVzZXIgc2luY2UgJ2xlc3MnIGlzIHVzZWQgaW4gcHJlZmVyZW5jZSB0byAnbW9yZScgdW5sZXNzIGl0IGlzCisgICAgZ2xvYmFsbHkgb3ZlcnJpZGVuIHZpYSB1cGRhdGUtYWx0ZXJuYXRpdmVzKDgpLiAgT2gsIHdlbGwuICBEZWJpYW4KKyAgICB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byBzZXQgREVCVUdGU19QQUdFUiB0byBiZSAibW9yZSIgaW4gdGhlaXIKKyAgICBkb3QgZmlsZXMgdG8gYXZvaWQgdGhpcyBicmFpbiBkYW1hZ2UpLgorICAqIEZpeCBsaWJ1dWlkMS11ZGViIHNvIHRoYXQgaXQgcHJvdmlkZXMgbGlidXVpZDEuICAoQ2xvc2VzOiAjMjI5NjMzKQorICAqIEZpeCBidWcgaW4gdXVpZCBsaWJyYXJ5IHdoZW4gdGhlcmUgaXMgbm8gbmV0d29yayBjYXJkIGFuZCB0aGUKKyAgICBsaWJyYXJ5IGlzIGdlbmVyYXRpbmcgYSB0aW1lLWJhc2VkIHV1aWQuICBUaGUgcmFuZG9tIE1BQyBhZGRyZXNzCisgICAgd2FzIG5vdCBjb3JyZWN0bHkgZ2VuZXJhdGVkIHRvIGJlIGEgbXVsdGljYXN0IGFkZHJlc3MuCisgICogSW5zdGFsbCB0aGUgZmlsZWZyYWcgcHJvZ3JhbS4KKyAgKiBEb24ndCB0cnkgdG8gY29tcGlsZSBmaWxlZnJhZyBvbiBub24tTGludXggcGxhdGZvcm1zLiAoQ2xvc2VzOiAjMjI2NDU2KQorICAqIE1pbm9yIG1hbnVhbCBwYWdlIGNsYXJpZmljYXRpb25zIChDbG9zZXM6ICMyMjI2MDYsICMyMTQ5MjApCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU2F0LCAzMSBKYW4gMjAwNCAyMDo1NzozNSAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwMy4xMi4wNy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCB0ZXN0IGZvciAvZXRjL21raW5pdHJkL3NjcmlwdHMvZTJmc3Byb2dzIHRvIG1ha2Ugc3VyZSBpdCBnZXRzCisgICAgcmVtb3ZlZC4gIChDbG9zZXM6ICMyMTMyNzUpCisgICogRGVidWdmcyBub3cgc2VhcmNoZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSBwYWdlciB0byB1c2UsIGJlZ2lubmluZworICAgIHdpdGggL3Vzci9iaW4vcGFnZXIsIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byAnbGVzcycgYW5kICdtb3JlJy4KKyAgICAoQ2xvc2VzOiAjMjIxOTc3KQorICAqIEZpeGVkIG1hbmdsZWQgZW5jb2RpbmcgaW4gQ3plY2ggbG9jYWxlIGZpbGUuICAoQ2xvc2VzOiAjMjE0NjMzKQorICAqIEZpeCBidWcgd2hlcmUgdXNpbmcgZGVidWdmcyB0byBjb3B5IGEgZmlsZSBmcm9tIC9kZXYvbnVsbCBjYXVzZWQKKyAgICBpbiBjb3JyZWN0IG1vZGUgYml0cy4gIChDbG9zZXM6ICMyMTc0NTYpCisgICogRml4ZWQgYSBidWcgd2hlcmUgZTJmc2NrIHdvdWxkIGJvbWIgb3V0IGlmIGEgam91cm5hbCBuZWVkZWQgdG8gYmUKKyAgICByZXBsYXllZCB3aGVuIHVzaW5nIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrLgorICAqIE1pbm9yIG1hbnVhbCBwYWdlIGZpeHVwcy9jbGVhbnVwcy4KKyAgKiBEZWJ1Z2ZzJ3MgbWtkaXIgY29tbWFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhwYW5kIHRoZSBkaXJlY3RvcnkgaWYKKyAgICBuZWNlc3NhcnkuICAoQ2xvc2VzOiAjMjE3ODkyKQorICAqIEZpeCBhIGJ1ZyBpbiBlMmZzY2sgd2hpY2ggY2F1c2VkIGl0IHRvIGluY29ycmVjdGx5IGZpeCBhIGZpbGVzeXN0ZW0KKyAgICB3aGVuIHJlY29ubmVjdGluZyBhIGRpcmVjdG9yeSByZXF1aXJlcyBjcmVhdGluZyBhIGxvc3QrZm91bmQKKyAgICBkaXJlY3RvcnkuICAoQ2xvc2VzOiAjMjE5NjQwKQorICAqIEFkZCBTcGFuaXNoIHRyYW5zbGF0aW9uLgorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFdlZCwgMjQgRGVjIDIwMDMgMTQ6MjQ6MTQgLTA1MDAKKworZTJmc3Byb2dzICgxLjM0KzEuMzUtV0lQLTIwMDMuMTIuMDctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBBZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciBta2UyZnMgYW5kIGR1bXBlMmZzLgorICAqIFN1cHBvcnQgMi42IGtlcm5lbCBoZWFkZXIgZmlsZXMuICAoQ2xvc2VzOiAjMjIxNzc4KQorICAqIEZpeCBidWcgd2hpY2ggY291bGQgYSBjb3JlIGR1bXAgaWYgYSBub24tZXhpc3RlbnQgTEFCRUwgb3IgVVVJRAorICAgIHNwZWNpZmllciBpcyBwYXNzZWQgdG8gZTJmc2NrIG9yIHR1bmUyZnMuCisgICogRml4IGhhbmRsaW5nIG9mIGNvcnJ1cHRlZCBpbmRpcmVjdCBibG9ja3MgaW4gdGhlIGJhZCBibG9jayBpbm9kZS4KKyAgKiBJZiB0aGUgbnVtYmVyIG9mIG1vdW50cyB1bnRpbCB0aGUgbmV4dCBmb3JjZWQgZmlsZXN5c3RlbSBjaGVjayBpcyBsZXNzCisgICAgdGhhbiA2LCBtZW50aW9uIHRoaXMgdG8gdGhlIHVzZXIuICAoQ2xvc2VzOiAjMTU3MTk0KQorICAqIEUyZnNjayB3aWxsIHRyeSB0byBhdm9pZCBkb2luZyBhIGZvcmNlZCBmaWxlc3lzdGVtIGNoY2VrIGlmIGEgc3lzdGVtCisgICAgaXMgcnVubmluZyBvbiBiYXR0ZXJpZXMgYWNjb3JkaW5nIHRvIEFQTSBvciBBQ1BJLiAgKENsb3NlczogIzIwNTE3NykKKyAgKiBGaXggcHJvYmxlbXMgaW4gdGhlIEdlcm1hbiB0cmFuc2xhdGlvbi4gIChDbG9zZXM6ICMyMDAwMDg2KQorICAqIFVwZGF0ZWQgU3dlZGlzaCB0cmFuc2xhdGlvbiBhbmQgYWRkZWQgUG9saXNoIHRyYW5zbGF0aW9uLgorICAqIEZpeCBzaWduZWQgdnMgdW5zaWduZWQgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBjb21fcmlnaHQgZnVuY3Rpb24gdG8KKyAgICBzZWcgZmF1bHQuICAoQ2xvc2VzOiAjMjEzNDUwKQorICAqIEFkZCBsaWJ1dWlkMS11ZGViIChDbG9zZXM6ICMyMjE3NzcpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU2F0LCAyMiBOb3YgMjAwMyAxMTo1MToxMyAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwMy4wOC4yMS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFkanVzdCB0aGUgbWFuIHBhZ2UgZGVzY3JpcHRpb25zIHNvIHRoYXQgImFwcm9wb3MgZXh0MiIgb3IKKyAgICAiYXByb3BvcyBleHQzIiB3aWxsIGZpbmQgYWxsIG9mIHRoZSBlMmZzcHJvZ3MgbWFuIHBhZ2VzLgorICAgIChDbG9zZXM6ICMyMDY4NDUpCisgICogUHJvdGVjdCBhZ2FpbnN0IGEgcG90ZW50aWFsIGNvcmUgZHVtcCBpbiBlMmZzY2sgd2hlbiBwcmludGluZyBhCisgICAgbWVzc2FnZSBhYm91dCBhIGJhY2t1cCBzdXBlcmJsb2NrLgorICAqIEZpeCBhIGJ1ZyBpbiBta2UyZnMgd2hpY2ggY2F1c2VkIC1UIGxhcmdlZmlsZSBvciAtVCBsYXJnZWZpbGU0IHRvCisgICAgY29yZSBkdW1wIGR1ZSB0byBhIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3IuICAoQ2xvc2VzOiAjMjA3MDgyKQorICAqIEZvcmNlIGUyZnNwcm9ncyB0byB1c2UgdGhlIG1hdGNoZWQgdmVyc2lvbiBvZiBlMmZzbGlicy4gIChDbG9zZXM6ICMyMDgxMDMpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAzMSBBdWcgMjAwMyAyMTo0OTo1MiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwMy4wOC4yMS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFdoZW4gbW92aW5nIHRoZSBqb3VybmFsIG9yIGJhY2tpbmcgdXAgdGhlIGpvdXJuYWwgaW5vZGUKKyAgICBpbmZvcm1hdGlvbiwgbWFrZSBzdXJlIGUyZnNjayB1cGRhdGVzIGFsbCB0aGUgc3VwZXJibG9ja3MsIGFuZCBub3QKKyAgICBqdXN0IHRoZSBtYXN0ZXIgc3VwZXJibG9jay4KKyAgKiBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGxpYmJsa2lkMS11ZGViIHRvIGJlIHJlcXVpcmVkIGluc3RlYWQgb2YKKyAgICBzdGFuZGFyZCwgdG8gbWF0Y2ggdGhlIG92ZXJyaWRlIGZpbGUuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAyMSBBdWcgMjAwMyAwODo1MDozNCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwMy4wOC4yMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBjb21waWxlX2V0IHRvIG91dHB1dCB0aGUgY29ycmVjdCBwcm90b3R5cGUgZm9yCisgICAgaW5pdGlhbGl6ZV94eHhfZXJyX3RhYmxlX3IoKSBpbiB0aGUgaGVhZGVyIGZpbGUuICAoQ2xvc2VzOiAjMjA0MzMyKQorICAqIEUyZnNjayB3aWxsIGF2b2lkIHByaW50aW5nIF5BIGFuZCBeQiBjaGFyYWN0ZXJzIGJyYWNrZXRpbmcgdGhlCisgICAgcHJvZ3Jlc3MgYmFyIHdoZW4gc3Rkb3V0IGlzIGEgdHR5IGRldmljZS4gIChDbG9zZXM6ICMyMDQxMzcpCisgICogQWRkIHN1cHBvcnQgZm9yIHN0b3JpbmcgdGhlIGpvdXJuYWwgaW5vZGUgbG9jYXRpb24gaW4gdGhlIHN1cGVyYmxvY2sKKyAgICBzbyB0aGF0IGUyZnNjayBjYW4gcmVjb3ZlciBmcm9tIGEgY29ycnVwdGVkIGlub2RlIHRhYmxlIGFmdGVyIGEgcG93ZXIKKyAgICBmYWlsdXJlLgorICAqIE1vdmUgdGhlIGluaXRyZCBzY3JpcHQgZnJvbSAvZXRjL21raW5pdHJkL3NjcmlwdHMgdG8KKyAgICAvdXNyL3NoYXJlL2luaXRyZC10b29scy9zY3JpcHRzIHNvIHRoYXQgbWtpbml0cmQgd2lsbCBub3QgcmVtb3ZlCisgICAgdGhlIGZpbGUgd2hlbiBpdCBpcyB1bmluc3RhbGxlZC4gIChDbG9zZXM6ICMyMDQwMTkpCisgICogUmVtb3ZlIHVubmVlZGVkIGZpbGVzIGluIGRlYmlhbiBkaXJlY3Rvcnk6IGJsa2lkLWRldi5zdWJzdHZhcnMgYW5kCisgICAgZTJmc3Byb2dzLWJmLmxpbnRpYW4tb3ZlcnJpZGVzLiAgKENsb3NlczogIzIwMzkxNCkKKyAgKiBTdXBwb3J0ICJub29wdCIgaW4gREVCX0JVSUxEX09QVElPTlMgaW5zdGVhZCBvZiAiZGVidWciLgorICAgIChDbG9zZXM6ICMyMDM5MTQpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAyMSBBdWcgMjAwMyAwMTo0Nzo1OCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzQrMS4zNS1XSVAtMjAwMy4wOC4wMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBPX0RJUkVDVCB0ZXN0IHRvIHByZXZlbnQgYmFkYmxvY2tzIGZyb20gc2NyZXdpbmcgdXAgYWZ0ZXIKKyAgICBmaW5kaW5nIGEgYmFkIGJsb2NrLiAgKENsb3NlczogIzIwMzcxMykKKyAgKiBBZGQgSGVpbWRhbCBjb21waWxlX2V0IGV4dGVuc2lvbnMgZnJvbSBQaGlsaXBwIFRob21hcyAocHRob21hc0BzdXNlLmRlKQorICAqIEZpeCBwb3RlbnRpYWwgcG9pbnRlciBhbGlhc2luZyBidWdzIGNhdXNlZCBieSB0eXBlLXB1bm5pbmcgYW5kIGdjYyAzLngKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBGcmksICAxIEF1ZyAyMDAzIDEzOjQ0OjU4IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zNC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCBlcnJvbmVvdXMgcmVmZXJlbmNlIHRvIC91c3Ivc2hhcmUvZG9jL2UyZnNwcm9ncy9odG1sLWluZm8gaW4KKyAgICAvdXNyL3NoYXJlL2RvYy1iYXNlL2xpYmV4dDJmcyAoQ2xvc2VzOiAjMjAzMTU3KQorICAqIEV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBsaWJibGtpZDEgbmVlZGVkIGluCisgICAgZTJmc3Byb2dzLnNobGlicy5sb2NhbCBpbiBvcmRlciB0byBhdm9pZCBwaWNraW5nIHVwIHRoZSB3cm9uZyBkZXBlZGVuY3kuCisgICAgKENsb3NlczogIzIwMzE1NykKKyAgKiBDaGFuZ2VkIHByaW9yaXR5IG9mIGxpYmJsa2lkMS11ZGViIHRvIGJlIHN0YW5kYXJkLCBub3QgcmVxdWlyZWQuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgV2VkLCAzMCBKdWwgMjAwMyAxOTo0NzozMiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzQtMS4xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5vbi1tYWludGFpbmVyIHVwbG9hZC4KKyAgKiBkb24ndCBjYWxsIGxkY29uZmlnIGluIHVkZWJzLgorICAqIGZpeCBkZXBlbmRlbmNpZXMgb2YgZTJmc3Byb2dzLXVkZWIuCisKKyAtLSBCYXN0aWFuIEJsYW5rIDx3YWxkaUBkZWJpYW4ub3JnPiAgVHVlLCAyOSBKdWwgMjAwMyAxMjoxMTo1NCArMDIwMAorCitlMmZzcHJvZ3MgKDEuMzQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gdmVyc2lvbi4KKyAgKiBGaXhlZCBidWcgaW4gZnNjayB3aGljaCBjYXVzZWQgaXQgdG8gd2FzdGUgQ1BVIGJ5IHNwaW5uaW5nIHdoaWxlCisgICAgd2FpdGluZyBmb3IgYSBjaGlsZCBmc2NrIHByb2Nlc3MgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLgorICAqIEZpeGVkIGJ1ZyBpbiBibGtpZCBsaWJyYXJ5IHdoaWNoIHdvdWxkIGNhdXNlIGl0IHRvIHNwaW4gZm9yZXZlciBpZgorICAgIC9wcm9jIGlzIG5vdCBtb3VudGVkIGFuZCAvZXRjL2Jsa2lkLnRhYiBpcyBub3QgcHJlc2VudC4KKyAgKiBJbXByb3ZlZCB0aGUgYmxraWQgbGlicmFyeSdzIFVERidzIHByb2JpbmcgZnVuY3Rpb25zLgorICAqIEZpeGVkIHRoZSBibGtpZCBsaWJyYXJ5IHNvIGl0IHdpbGwgcmVtb3ZlIGRlbGV0ZSB0aGUgTEFCRUwKKyAgICBhdHRyaWJ1dGUgZnJvbSBpdHMgY2FjaGUgd2hlbiBhIGZpbGVzeXN0ZW0gdGhhdCBwcmV2aW91c2x5IGhhZCBhCisgICAgbGFiZWwgbm8gbG9uZ2VyIGhhcyBvbmUuCisgICogQWRkZWQgU3dlZGlzaCB0cmFuc2xhdGlvbi4KKyAgKiBSZW1vdmUgZGVidWdnaW5nIHByaW50ZiBpbiBiYWRibG9ja3MgcHJvZ3JhbSAoQ2xvc2VzOiAjMjAxNDk5KQorICAqIFNwbGl0IHNoYXJlZCBsaWJyYXJpZXMgb3V0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBpbnRvIHNlcGFyYXRlCisgICAgcGFja2FnZXM6IGxpYnNzMiwgbGliY29tZXJyMiwgbGlidXVpZDEsIGFuZCBlMmZzbGlicy4gIChDbG9zZXM6ICMyMDExNTUsCisgICAgIzIwMTE2NCkKKyAgKiBXYXJuIHRoZSB1c2VyIHdoZW4gY3JlYXRpbmcgYSBmaWxlc3lzdGVtIHdpdGggYSBqb3VybmFsIGFuZCBhIGJsb2Nrc2l6ZQorICAgIGdyZWF0ZXIgdGhhbiA0MDk2LCBzaW5jZSBzb21lIGtlcm5lbHMgZG9uJ3Qgc3VwcG9ydCBleHQzIHdpdGggbGFyZ2UKKyAgICBibG9jayBzaXplcy4gIChDbG9zZXM6ICAjMTkzNzczKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFNhdCwgMjYgSnVsIDIwMDMgMDE6MDE6NTUgLTA0MDAKKworZTJmc3Byb2dzICgxLjMzKzEuMzQtV0lQLTIwMDMuMDUuMjEtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBTZXQgdXAgRnJlZUJTRCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIChDbG9zZXM6ICMxOTUyNzQpCisgICogQ2xhcmlmeSByZXNpemUyZnMgbWFuIHBhZ2UgKENsb3NlczogIzE5NTYxNikKKyAgKiBGaXggcmVzaXplMmZzIHRvIGRlYWwgd2l0aCBmaWxlc3lzdGVtIHdpdGggYmFkIGJsb2NrcworICAqIEZpeCBzcGVsbGluZyBlcnJvciBpbiBlMmZzY2sKKyAgKiBBZGQgd29ya2Fyb3VuZCBmb3IgaW50bCBsaWJyYXJ5IG9uIERhcndpbgorICAqIEZpeCBnY2MgLVdhbGwgbml0cGlja3MKKyAgKiBSb3VuZCBkb3duIHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIG1rZTJmcyBhbmQKKyAgICByZXNpemUyZnMgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZXNpemUgdG8gd29yayBhcm91bmQgYSBwb3RlbnRpYWwKKyAgICBMaW51eCBrZXJuZWwgYnVnCisgICogRml4IGJ1ZyBpbiBta2UyZnMgd2hlcmUgaXQgY291bGQgZGllIHdpdGggYSBmbG9hdGluZyBleGNlcHRpb24gaWYKKyAgICB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIEJMS1NTWkdFVCBpb2N0bCAoQ2xvc2VzOiAjMTk2NzM0KQorICAqIEFkZCBjb25mbGljdHMgYWdhaW5zdCBvbGRlciB2ZXJzaW9ucyBvZiBzeXN2aW5pdCB0aGF0IGRvbid0IGNvcnJlY3RseQorICAgIGhhbmRsZSBhbiBleGl0IGNvZGUgdGhhdCBoYXMgdGhlIGJpdCAjMiBzZXQuICAoQ2xvc2VzOiAjMTgzNjc1KQorICAqIEJhZGJsb2NrcyB3aWxsIGF0dGVtcHQgdG8gdXNlIE9fRElSRUNUIGlmIGl0IGlzIHNhZmUgdG8gZG8gc28uCisgICAgKENsb3NlczogIzE5ODAwNikKKyAgKiBVc2Ugc3ltYm9saWMgbGlua3MgZm9yIGZzY2suZXh0ezIsM30gYW5kIG1rZnMuZXh0ezIsM30gaW4gdGhlIHVkZWIKKyAgICBwYWNrYWdlIHNpbmNlIGJ1c3lib3ggdGFyIGNhbid0IGRlYWwgd2l0aCBoYXJkIGxpbmtzLiAgKENsb3NlczogIzE5NjUwOCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDEyIEp1bCAyMDAzIDAzOjE2OjA4IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zMysxLjM0LVdJUC0yMDAzLjA1LjIxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IHByb2JsZW1zIHdpdGggY29tcGlsaW5nIGUyZnNwcm9ncyB3aXRoIE5MUyBzdXBwb3J0IG9uIHdvb2R5CisgICAgKENsb3NlczogIzE5MzM3MikKKyAgKiBSZW1vdmUgdGhlIGV4dHJhbmVvdXMgZGUtdXRmLnBvIGZpbGUuCisgICogQWRkIGdldC10ZXh0IHRvIGJ1aWxkLWRlcGVuZHMuCisgICogVXNlIG5nZXR0ZXh0IChhYmJyZXZpYXRlZCB3aXRoIFBfKCkpIHRvIHNpbXBsaWZ5IHRoZSBzdGF0aXN0aWNzIHJlcG9ydGluZy4KKyAgKiBGaXggYmFkYmxvY2tzIHRvIGJlIGFibGUgdG8gc3VwcG9ydCBhcmJpdHJhcnkgNCBieXRlIHRlc3QgcGF0dGVybnMuCisgICogRml4IGJ1ZyB3aGljaCBjYXVzZWQgdXMgdG8gYWNjaWRlbnRhbGx5IGluY2x1ZGUgdGhlIEVWTVMgcGx1Z2luIGluCisgICAgdGhlIGUyZnNwcm9ncyBwYWNrYWdlICh3aGljaCBkb2Vzbid0IHdvcmssIGJ1dCBjYXVzZXMgY29uZnVzaW5nIG1lc3NhZ2VzCisgICAgdG8gc2hvdyB1cCB3aGVuIHRoZSBldm1zIGNsaWVudCBpcyBzdGFydGVkKS4KKyAgKiBJZiB0aGUgaGFyZHdhcmUgc2VjdG9yIHNpemUgb2YgYSBkZXZpY2UgaXMgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQKKyAgICBibG9ja3NpemUsIHVzZSB0aGUgaGFyZHdhcmUgc2VjdG9yIHNpemUgYXMgdGhlIGJsb2Nrc2l6ZSB3aGVuIGNyZWF0aW5nCisgICAgYSBmaWxlc3lzdGVtLCB0byBzb2x2ZSBwcm9ibGVtcyB3aXRoIHMvMzkwIERBU0Qncy4KKyAgKiBBZGQgYSBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmN5IHRvIGxpYnV1aWQgdG8gbGliYmxraWQgKENsb3NlczogIzE5NDA5NCkKKyAgKiBBZGQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIGR1bXBfdW51c2VkIGNvbW1hbmQgKENsb3NlczogIzc5MTY0KQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgMTggTWF5IDIwMDMgMDE6MjQ6MTYgLTA0MDAKKworZTJmc3Byb2dzICgxLjMzLTUpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogQ2xhcmlmeSBibG9ja3NpemUgdW5pdHMgd2hlbiBkaXNwbGF5aW5nIG1lc3NhZ2VzIGluIHJlc2l6ZTJmcywgYW5kCisgICAgc3VwcG9ydCB1c2luZyBzdWZmaXhlcyAoc2VjdG9ycywga2lsb2J5dGVzLCBtZWdhYml0ZXMsIGdpZ2FieXRlcykKKyAgICB0byB0aGUgc2l6ZSBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgdW5pdHMuICAoQ2xvc2VzOiAjMTg5ODE0KQorICAqIEZpeCBkZWJ1Z2ZzIGNvcmUtZHVtcGluZyBwcm9ibGVtIGNhdXNlZCBieSBnZXRvcHQuICAoV29ya3MgYXJvdW5kOiAjMTkyODM0KQorICAqIEFkZCBwYWNrYWdlIGRlcGVuZGVuY3kgdG8gc2hsaWJzIGZvciBjb21lcnIgdG8gaW5kaWNhdGUgc3VwcG9ydAorICAgIGZvciBrdGggY29tcGF0aWJpbGl0eS4gIChDbG9zZXM6ICMxOTMwOTYpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVHVlLCAxMyBNYXkgMjAwMyAyMzo0NTowOCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzMtNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGQgcmVwbGFjZXMgZmllbGQgdG8gY29tZXJyLWRldiB0byByZXNvbHZlIGEgZmlsZSBjb25mbGljdCB3aXRoCisgICAgL3Vzci9pbmNsdWRlL2NvbV9lcnIuaCBhbmQgdGhlIGxpYmtyYjUtZGV2IHBhY2thZ2UuICAoQ2xvc2VzOiAjMTkyMjc3KQorICAqIEFkZCAtdCBvcHRpb24gdG8gYmFkYmxvY2tzIHRvIGNvbnRyb2wgdGhlIHRlc3QgcGF0dGVybiB1c2VkLgorICAqIFJlbW92ZSBlMmZzcHJvZ3MtYmYgcGFja2FnZSwgYXMgaXQgaXMgb2Jzb2xldGUuIChDbG9zZXM6ICMxODM0NTMpCisgICogUmVtb3ZlIE5MUyBzdXBwb3J0IGZyb20gZTJmc3Byb2dzLXVkZWIuICBTYXZlIDUuNWsgb24gdGhlIGJvb3QKKyAgICBmbG9wcGllcyAvIGluc3RhbGwgbWVkaWEuCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgVGh1LCAgOCBNYXkgMjAwMyAxMDoyNTowNSAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzMtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGQgZnVsbCBIZWltZGFsbC9LZXJiZXJvczQta3RoIGNvbXBhdGliaWxpdHkgdG8gY29tX2VyciByb3V0aW5lcy4KKyAgKiBEZWNsYXJlIGNvbWVyci1kZXYgYXMgcmVwbGFjaW5nIDw8IGUyZnNsaWJzLWRldiAxLjMzLTIsIHRvIGF2b2lkCisgICAgZXJyb3JzIHdoZW4gdXBncmFkaW5nIHRvIHRoZSBuZXcgdmVyc2lvbnMgb2YgY29tZXJyLWRldiBhbmQKKyAgICBlMmZzbGlicy1kZXYKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBUdWUsICA2IE1heSAyMDAzIDAwOjI5OjQ3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zMy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeCB1cCBOTFMgc3VwcG9ydAorICAgICAtIEZpeCBtZXNzYWdlIGFiYnJldmlhdGlvbnMgc3VwcG9ydCAoaS5lLiwgQGcgLS0+IGdyb3VwKQorICAgICAtIFVwZGF0ZSB0byBnZXR0ZXh0IDAuMTEuNQorICAgICAtIEFkZCBDemVjaCB0cmFuc2xhdGlvbgorICAgICAtIEluc3RhbGwgbWVzc2FnZSBjYXRhbG9ncworICAgICAtIE90aGVyIG1pc2NlbGxhbmVvdXMgTkxTIGJ1ZyBmaXhlcworICAqIEFkZCBuZXcgZGVidWdmcyBjb21tYW5kLCBpbWFwLCB3aGljaCBwcmludHMgdGhlIGxvY2F0aW9uIG9mIGEKKyAgICBzcGVjaWZpZWQgaW5vZGUgaW4gdGhlIGlub2RlIHRhYmxlLgorICAqIFB1dCAvdXNyL2luY2x1ZGUvY29tX2Vyci5oIGluIGNvbWVyci1kZXYgaW5zdGVhZCBvZiBlMmZzbGlicy1kZXYuCisgICAgKENsb3NlczogIzE5MTg5OSkKKyAgKiBBZGQgc3VwcG9ydCBmb3IgT1Ytc3R5bGUgY29udGludWF0aW9ucyBpbiBjb21waWxlX2V0LiAgKENsb3NlczogIzE5MTkwMCkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBNb24sICA1IE1heSAyMDAzIDE4OjEzOjEyIC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uIChDbG9zZXM6ICMxODk2ODcpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgTW9uLCAyMSBBcHIgMjAwMyAxMzo0OTo1MiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzIrMS4zMy1XSVAtMjAwMy4wNC4xNC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisgICAgIC0gQWRkIG5ldyB1dGlsaXR5IHByb2dyYW0sIGxvZ3NhdmUsIHRvIGNhcHR1cmUgdGhlIG91dHB1dCBvZiBmc2NrCisgICAgICAgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlCisgICogQWRkIHN1cHBvcnQgZm9yIHRoZSAtYSBhbmQgLXMgb3B0aW9ucyB0byBsb2dzYXZlLgorICAqIENoYW5nZSBlMmZzY2sgdG8gYnJhY2tldCBpdHMgcHJvZ3Jlc3MgYmFyIG91dHB1dCB3aXRoIGN0cmwtQSBhbmQgY3RybC1CCisgICAgY2hhcmFjdGVycywgc28gdGhhdCBsb2dzYXZlIC1zIGNhbiBvbWl0IHdyaXRpbmcgdGhlIHByb2dyZXNzIGJhciBvdXRwdXQKKyAgICB0byB0aGUgbG9nIGZpbGUuCisgICogQXZvaWQgcHJpbnRpbmcgdGhlIHZlcnNpb24gYmFubmVyIGZvciBta2UyZnMgaWYgdGhlIC1xIG9wdGlvbiBpcworICAgIHNwZWNpZmllZC4gIChDbG9zZXM6ICMxNzI3MTYpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgV2VkLCAxNiBBcHIgMjAwMyAxNToyNzoyMCAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMzIrMS4zMy1XSVAtMjAwMy4wMy4zMC0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFByb3ZpZGUgL3Vzci9pbmNsdWRlL2NvbV9lcnIuaCwgd2hpY2ggd2FzIHByZXZpb3VzbHkgcHJvdmlkZWQgYnkgdGhlCisgICAgbGlia3JiNS1kZXYgcGFja2FnZQorICAqIENoYW5nZSB0aGUgc2VjdG9pbiBvZiBjb21fZXJyLWRldiwgc3MtZGV2LCB1dWlkLWRldiwgbGliYmxraWQtZGV2LAorICAgIGUyZnNsaWJzLWRldiB0byBsaWJkZXZlbAorICAqIEFkZCBsaWJibGtpZDEtdWRlYiBwYWNrYWdlIGZvciB0aGUgRGViaWFuIEluc3RhbGxlci4KKyAgKiBVc2UgdGhlIFNTX1JFQURMSU5FX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY29udHJvbCB0aGUgc2VhcmNoCisgICAgZm9yIGEgc3VpdGFibGUgcmVhZGluZSBsaWJyYXJ5LgorICAqIEZpeCBidWcgaW4gbWtlMmZzLCB3aGljaCB3YXMgd2FzIGluY29ycmVjdGx5IGNoZWNraW5nIHRoZSBhcmd1bWVudAorICAgIHRvIHRoZSAtZyBvcHRpb24gaWYgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBpcyB1c2VkLiAgKENsb3NlczogIzE4ODMxOSkKKyAgKiBVcGRhdGUgbWFuIHBhZ2VzLiAgKENsb3NlczogIzE4ODMxOCkKKyAgKiBNa2UyZnMgY2FuIGJlIGdpdmVuIGEgbWluaW11bSBibG9jayBzaXplIGJ5IHBhc3NpbmcgaW4gYSBuZWdhdGl2ZQorICAgIG51bWJlciB0byB0aGUgLWIgb3B0aW9uLgorICAqIFVwZGF0ZSB0byBzdGFuZGFyZHMgMy41LjkKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDEyIEFwciAyMDAzIDAyOjUyOjE3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4zMisxLjMzLVdJUC0yMDAzLjAzLjMwLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRml4IFhGUyBzdXBlcmJsb2NrIGRlZmluaXRpb24uICBBZGQgc3VwcG9ydCB0byBleHRyYWN0IFVVSUQgYW5kCisgICAgbGFiZWxzIGZvciBKRlMgYW5kIFJPTUZTLgorICAqIE1ha2UgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG1vcmUgcGFyYW5vaWQgYWJvdXQgcG90ZW50aWFsbHkgYnVnZ3kKKyAgICAvZGV2L3JhbmRvbSBkZXZpY2VzLgorICAqIFRoZSBiYWRibG9ja3MgcHJvZ3JhbSBub3cgZmx1c2hlcyBpdHMgb3V0cHV0IGFzIGl0IGRpc2NvdmVycyBiYWQgYmxvY2tzLgorICAqIEltcG9ydGVkIGJ1ZyBmaXhlcyB0byBFVk1TIGRyaXZlciBmcm9tIHRoZSBFVk1TIDIuMCB0cmVlLiAgRml4ZWQgYQorICAgIGZldyBwb3RlbnRpYWwgaGFuZ3MsIGFuZCBlbGltaW5hdGVkIGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsuCisgICogRTJmc2NrIG5vdyB1cGRhdGVzIHRoZSBnbG9iYWwgZnJlZSBibG9jayBhbmQgaW5vZGUgY291bnRlcnMgZnJvbQorICAgIHRoZSBibG9jayBncm91cCBzcGVjaWZpYyBjb3VudGVycyBxdWlldGx5LiAgVGhpcyBpcyBuZWVkZWQgZm9yIGFuCisgICAgZXhwZXJpbWVudGFsIGtlcm5lbCBwYXRjaCB3aGljaCBpbXByb3ZlcyBTTVAgc2NhbGFiaWxpdHkgYnkgbm90CisgICAgbG9ja2luZyB0aGUgZW50aXJlIGZpbGVzeXN0ZW0gZHVyaW5nIGJsb2NrIG9yIGlub2RlIGFsbG9jYXRpb247IGlmCisgICAgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IHVubW91dG5lZCBjbGVhbmx5LCB0aGUgZ2xvYmFsIGNvdW50cyBtYXkgbm90CisgICAgYmUgYWNjdXJhdGUuCisgICogRml4IGEgYnVnIGluIGZzY2sgd2hpY2ggY2FuIGNhdXNlIGl0IHRvIGhhbmcgdHJ5aW5nIHRvIGFjY2VzcyB0aGUKKyAgICBmbG9wcHkgZGlzayBpZiB0aGVyZSB0aGUgZmxvcHB5IGRyaXZlIGhhcyBmaWxlc3lzdGVtIHR5cGUgb2YKKyAgICAnYXV0bycuICAoQ2xvc2VzOiAjMTg3ODEyKQorCisgLS0gVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4gIFN1biwgIDYgQXByIDIwMDMgMjM6MTM6NTAgLTA0MDAKKworZTJmc3Byb2dzICgxLjMyKzEuMzMtV0lQLTIwMDMuMDMuMzAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBDaGFuZ2UgY29tcGlsZV9ldCB0byBnZW5lcmF0ZSBoZWFkZXIgZmlsZXMgdGhhdCB1c2UgPGV0L2NvbV9lcnIuaD4KKyAgICBpbnN0ZWFkIG9mIDxjb21fZXJyLmg+LCBzbyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZQorICAgIGlzIHVzZWQuICBSZW1vdmUgbGVnYWN5IEsmUiwgdmFyYXJncywgYW5kIHByZS1QT1NJWCBzaWduYWwgc3VwcG9ydC4KKyAgKiBGaXggKG9uZSBtb3JlIHRpbWUhKSBBcHBsZSBEYXJ3aW4gcG9ydCBpbiBibGtpZC9nZXRzaXplLmMKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTdW4sIDMwIE1hciAyMDAzIDIzOjM0OjU1IC0wNTAwCisKK2UyZnNwcm9ncyAoMS4zMisxLjMzLVdJUC0yMDAzLjAzLjI1LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IG1haW50YWluZXIKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiAjMTc2ODE0LCAjMTc0NzY2LCAjMTY2MDQ4LCAjMTc5NjcxLAorICAgICMxNzM2MTIsICMxNzUyMzMsICMxNzUxMTMsICMxNzA0OTcsICMxODU5NDUpCisKKyAtLSBUaGVvZG9yZSBZLiBUcydvIDx0eXRzb0BtaXQuZWR1PiAgU3VuLCAxNiBNYXIgMjAwMyAxODowNTowOCAtMDUwMAorCitlMmZzcHJvZ3MgKDEuMzItMikgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogQXBwbGllZCB1cHN0cmVhbSBwYXRjaCB0byBmaXggaHRyZWUgcHJvYmxlbXMsIGFuZCB0byBkZWFjdGl2YXRlIGl0IGJ5CisgICAgZGVmYXVsdCBpbiBta2UyZnMgKENsb3NlczogIzE4MTYxNSwgIzE3OTA0MykKKyAgKiBCZSBzdXJlIHJlbW92YWwgb2YgbGliZTJmc2ltIGRvZXNuJ3QgZmFpbCwgYXMgaXQncyBub3QgYnVpbHQgb24gaHVyZAorICAgIChDbG9zZXM6ICMxNjQxMTcpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgRnJpLCAyMSBGZWIgMjAwMyAwMDoyMTo0NCArMDEwMAorCitlMmZzcHJvZ3MgKDEuMzItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiAjMTY3MTA4KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFR1ZSwgMTkgTm92IDIwMDIgMDA6MTg6MDkgKzAxMDAKKworZTJmc3Byb2dzICgxLjI5KzEuMzAtV0lQLTA5MzAtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBNYWRlIG1raW5pdHJkIHNjcmlwdCB0byBza2lwIGNvbW1lbnRlZC1vdXQgbGluZXMgKENsb3NlczogIzE2MzI1MSkuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUdWUsIDE1IE9jdCAyMDAyIDAwOjE2OjA4ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yOSsxLjMwLVdJUC0wOTMwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHByZXJlbGVhc2UuCisgICogUmVwbGFjZWQgaW4gbWtpbml0cmQgc2NyaXB0ICJ0dW5lMmZzIC1qIiB3aXRoICJ0dW5lMmZzIC1PCisgICAgaGFzX2pvdXJuYWwiLCBhcyBzdWdnZXN0ZWQgYnkgVGhlb2RvcmUgVHMnbyAoQ2xvc2VzOiAjMTYyOTQ5KS4KKyAgKiBSZW1vdmUgLS1kaXNhYmxlLWRlYnVnZnMgZnJvbSBtaXBzLW5vcGljIGZsYWdzIChDbG9zZXM6ICMxNjI2NzQpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVGh1LCAgMyBPY3QgMjAwMiAwMDowNTozNiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjktMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiAjMTU5NDIzKS4KKyAgKiBGaXhlZCB0eXBvIGluIGNoYXR0ciBtYW5wYWdlIChQaGlsaXBwIE1hdHRoaWFzIEhhaG4sIENsb3NlczoKKyAgICAjMTYyMjk3KS4KKyAgKiBHZW5lcmF0ZSB1ZGViIHBhY2thZ2UgZm9yIGRlYmlhbi1pbnN0YWxsZXIgKE1hcnRpbiBTam9lZ3JlbiwgQ2xvc2VzOgorICAgICMxNjIyMTIpLgorICAqIEZpeGVkIGluc3RhbGxhdGlvbiBvZiBta2luaXRyZCBzY3JpcHQgKGRvbid0IHVzZSBkaF9pbnN0YWxsKS4gIFJlbW92ZQorICAgIGl0IGZyb20gdGhlIHdyb25nIGxvY2F0aW9uIHdoZXJlIGl0IHdhcywgaW4gcHJlaW5zdC4gIEhvcGVmdWxseSBub29uZQorICAgIG5vdGljZWQuCisgICogQWxzbyBoYXZlIG9sZCBzY3JpcHRzL2UyZnNwcm9ncy5ta2luaXRyZCByZW1vdmVkLgorICAqIEJ1bXBlZCBTdGFuZGFyZHMtVmVyc2lvbiB0byAzLjUuNiwgbm8gY2hhbmdlLiAgMy41Ljcgd2lsbCBuZWVkIGEgYml0CisgICAgb2Ygd29yayBidXQgbm90IHRvbmlnaHQuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUaHUsIDI2IFNlcCAyMDAyIDAxOjQ2OjI1ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yOC01KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFRoZSAidGhpcyB0aW1lIGl0IHdpbGwgd29yayAhIChmYW1vdXMgbGFzdCB3b3JkcykiIHJlbGVhc2UuCisgICogTm93IHRoYXQgaXQgYnVpbGRzLCBlbnN1cmUgdGhlIGRpciBpbiB3aGljaCB3ZSBpbnN0YWxsIHRoaXMgZGFtbiBtaXBzCisgICAgbm9uLXBpYyBsaWIgZXhpc3RzLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVHVlLCAxNyBTZXAgMjAwMiAwMDowNDo0OSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjgtNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBNb3ZlZCBzZXR0aW5nIG9mIENGTEFHUyB0byB0aGUgY29ycmVjdCBwbGFjZSB3aGVuIGJ1aWxkaW5nIHRoZSBzcGVjaWFsCisgICAgbWlwcyBub24tcGljIGxpYiAoQ2xvc2VzOiAjMTU5NzU3IGFnYWluKS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFN1biwgMTUgU2VwIDIwMDIgMjE6MTk6MTkgKzAyMDAKKworZTJmc3Byb2dzICgxLjI4LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRG9uJ3QgdXNlIHNwZWNpYWwgY2ZsYWdzIGF0IGNvbmZpZ3VyZSB0aW1lIHdoZW4gYnVpbGRpbmcgdGhlIHNwZWNpYWwKKyAgICBtaXBzIG5vbi1waWMgbGliLCBpbiB5ZXQgYW5vdGhlciBhdHRlbXB0IHRvIGZpeCBteSBhZGFwdGF0aW9uIG9mIHRoZQorICAgIHBhdGNoIGZyb20gdGhlIG1pcHMgdGVhbS4gIEFsc28gYWRkZWQgLS1kaXNhYmxlLW5scyB3aGljaCB3YXMgcHJlc2VudAorICAgIGluIHRoZSBvcmlnaW5hbCBwYXRjaC4KKyAgKiBSZW1vdmUgZGViaWFuL0JVSUxELU1JUFMgb24gY2xlYW4uCisgICogSW5zdGFsbCBta2luaXRyZCBzY3JpcHQgYXMgc2NyaXB0cy9lMmZzcHJvZ3MsIG5vdCBhcworICAgIHNjcmlwdHMvZTJmc3Byb2dzLm1raW5pdHJkLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgTW9uLCAgOSBTZXAgMjAwMiAyMzowMTozMSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjgtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXhlZCBteSBhZGFwYXRpb24gb2YgdGhlIG1pcHMgbm9uLXBpYyBidWlsZCAoQ2xvc2VzOiAjMTU5NzU3KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgIDYgU2VwIDIwMDIgMDA6MDM6NDUgKzAyMDAKKworZTJmc3Byb2dzICgxLjI4LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBNb24sICAyIFNlcCAyMDAyIDIzOjM0OjU1ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yNysxLjI4LVdJUC0wODE3LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHByZS1yZWxlYXNlLiAgQ2xvc2VzOiAjMTM4MDAzLCAjMTQ0NjIxLCAjMTQ1MDQ0LCAjMTUxOTkwLAorICAgICMxNTIwMjksICMxNTI4OTEsICMxNTUwMDcsICMxMzEzNTAsICMxNDcyNTYsICMxNTMxMDIuCisgICogTmV3IGJpbmFyeTogZmluZGZzLgorICAqIEFkZGVkIGV4ZWN1dGUgcGVybWlzc2lvbnMgdG8gdGhlIG1raW5pdHJkIHNjcmlwdCAodGhhbmtzIGxpbnRpYW4pLgorICAqIERvbid0IHNoaXAgRlNJTSBmb3IgRVZNUyBmb3Igbm93LgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgU3VuLCAyNSBBdWcgMjAwMiAxOTozMjoxMiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjcrMS4yOC1XSVAtMDYyNi0yKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisKKyAgKiBSZW1vdmUgYm9ndXMgc2hsaWJzIGRlcHMgb24gImUyZnNwcm9ncyAoPj0gPGN1cnJlbnQ+KSIKKworIC0tIFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+ICBTYXQsIDE3IEF1ZyAyMDAyIDE3OjU5OjE3IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4yNysxLjI4LVdJUC0wNjI2LTEpIGV4cGVyaW1lbnRhbDsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSBwcmUtcmVsZWFzZToKKyAgKiogU3VwcG9ydHMgdjIgQUNMIGZvcm1hdCAoQ2xvc2VzOiAjMTM4MTYwKS4KKyAgKiBSZW1vdmVkIGV4cGxpY2l0IC0tbWFuZGlyIGZsYWcsIGFzIGl0IG5vdyB1c2VzIEZIUyBtYW4gbG9jYXRpb24gYnkKKyAgICBkZWZhdWx0LgorICAqIEFkZGVkIG1raW5pdHJkIHNjcmlwdCwgInVwc3RyZWFtLWNvbnRyaWJ1dGVkIiA7KSBieSBUZWQgVHMnbyAoQ2xvc2VzOgorICAgICMxNDgwNjQpLgorICAqIEJ1aWxkIGEgbm8tcGljIHZlcnNpb24gb2YgbGliZXh0MmZzLmEgb24gbWlwcyBhbmQgbWlwc2VsLCBwYXRjaCBieQorICAgIEZsb3JpYW4gTG9ob2ZmLCBhZGFwdGVkIGZvciBzdHlsZSBjb25zaXN0ZW5jeSAoQ2xvc2VzOiAjMTQ1NDMyKS4KKyAgKiBSZW1vdmVkIHByZXN1bWFibHktdXNlbGVzcyBhbmQgcHJlc3VtYWJseS1icm9rZW4gQ0ZMQUdTIHByb3BhZ2F0aW9uLgorICAgIElmIHNvbWVvbmUgbWlzc2VzIHRoYXQsIEknbGwgYWRkICR7Q0ZMQUdTfSB0byAtLWNjb3B0cy4KKworICAqIFN3aXRjaGVkIHRvIGRlYmhlbHBlciB2NC4KKyAgKiBBZGRlZCAke21pc2M6RGVwZW5kc30gdG8gYWxsIHBhY2thZ2VzJyBEZXBlbmRzIGZpZWxkLgorCisgICogRml4ZWQgdHlwb3MgaW4gZnNjay44LCBhZGRlZCBhbiBleGFtcGxlIGZvciBjbGFyaXR5IChDbG9zZXM6CisgICAgIzE0NTA0NCkuCisgICogRml4ZWQgdHlwbyBpbiBjaGF0dHIgbWFucGFnZSAoQ2xvc2VzOiAjMTQxOTM4KS4KKyAgKiBGaXhlZCB0eXBvIGluIHR1bmUyZnMgbWFucGFnZSAoQ2xvc2VzOiAjMTQ4NTE0KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFR1ZSwgMjMgSnVsIDIwMDIgMDA6MTI6MzMgKzAyMDAKKworZTJmc3Byb2dzICgxLjI3LTIpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogVXJnZW5jeSBtZWRpdW0gc2luY2UgdGhpcyBmaXhlcyBhIFJDIGJ1Zy4KKyAgKiBHZW5lcmF0ZSB0aGUgc2hsaWJzIGZpbGUgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQgaW4gcGxhY2UsIGFuZCBtYWtlCisgICAgaXQgcHJvZHVjZSBkZXBzIG9uICJlMmZzcHJvZ3MgKD49IDxjdXJyZW50PikiIGFzIHdlbGwsIHRvIGNvcGUgd2l0aAorICAgIG5ldyBmdW5jdGlvbnMgaW50cm9kdWNlZCBpbiB0aGUgbGlicyAoQ2xvc2VzOiAjMTM5Mjc0KS4KKyAgKiBBZGRlZCBhIG5vdGUgb24gdGhpcyBpbiBSRUFETUUuRGViaWFuLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVGh1LCAyMSBNYXIgMjAwMiAyMzo1ODo0OCArMDEwMAorCitlMmZzcHJvZ3MgKDEuMjctMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiAjMTM2NzM3KS4KKyAgKiBObyBtb3JlIHVzZSBmb3IgZGhfbGluaydpbmcgKi5leHRbMjNdLCBpdCdzIG5vdyBkb25lIGJ5IHVwc3RyZWFtCisgICAgTWFrZWZpbGVzLgorICAqIE9ubHkgaW5jbHVkZSAobmV3KSBpbm9kZV9pby5vIGZyb20gbGliZXh0MmZzIHdoZW4gZmlsZWlvLm8gaXMsIG9yIHRoZQorICAgIEJGIGJ1aWxkIGZhaWxzIGJlY2F1c2Ugb2YgdGhpcyBhZGRpdGlvbmFsICh1bnVzZWQpIG1lbWJlciAodXBzdHJlYW0KKyAgICBoaW50KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIE1vbiwgMTEgTWFyIDIwMDIgMDA6MTc6MzIgKzAxMDAKKworZTJmc3Byb2dzICgxLjI2LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogU2ltcGxlIHJlYnVpbGQgYWZ0ZXIgZml4aW5nIHRoZSBzZXR0aW5ncyBvZiBteSBjb21wdXRlcidzIGNsb2NrLCBzbworICAgIHRoYXQga2F0aWUgYWNjZXB0cyB0byBpbnN0YWxsIHRoZSBwYWNrYWdlLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgU2F0LCAyMyBGZWIgMjAwMiAxNDo1MzoxNSArMDEwMAorCitlMmZzcHJvZ3MgKDEuMjYtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBcHBsaWVkIHVwc3RyZWFtIHBhdGNoIGRlYWxpbmcgd2l0aCB0aGUgcmxpbWl0IGZpbGVzaXplIHZhcmlhdGlvbgorICAgIGFtb25nIGFyY2hzIGFuZCBrZXJuZWwgdmVyc2lvbnMgKENsb3NlczogIzEzMzkwOSkuCisgICogQ3JlYXRlIGZzY2suZXh0My44IHN5bWxpbmsgKENsb3NlczogIzEyMTUyNikuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBTYXQsIDIzIEZlYiAyMDAyIDA2OjQ0OjAyICswMTAwCisKK2UyZnNwcm9ncyAoMS4yNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFRoaXMgdXBsb2FkcyBmaXhlcyAxMCBidWdzLCBpbmNsdWRpbmcgZGF0YS1jb3JydXB0aW9uIHByb2JsZW1zLCBhbmQKKyAgICBhZGRzIG11Y2ggdG8gdGhlIGVhc2Ugb2YgbWFpbnRhaW5hbmNlIGFuZCBwcm9ibGVtIHRyYWNraW5nLiAgR29vZAorICAgIGNob2ljZSBmb3Igd29vZHkuCisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiAjMTA2NjIyLCAjMTE2OTc1LCAjMTE4NDQzLCAjMTE5NjI0LAorICAgICMxMjAxNzEsICMxMjAwNzcsICMxMjk4MjgsICMxMzI3NjQpLgorICAqKiBGaXhlcyBmb3IgZGF0YS1jb3JydXB0aW9uIGJ1Z3Mgbm90IHJlcG9ydGVkIHRvIHRoZSBCVFM6IGUyZnNjaworICAgIHRyYXNoZWQgZXh0ZXJuYWwgam91cm5hbHMgbmVlZGluZyB0byBiZSByZXBsYXllZCwgZTJmc2NrIG5vdyBoaWRlcworICAgIHZpc2libGUgam91cm5hbCBmaWxlcyAoZGF0YSBjb3JydXB0aW9uIHByb2JsZW1zIHdoZW4gbm90IGV4Y2x1ZGVkIGZyb20KKyAgICBhIGJhY2t1cCBhbmQgdGhlbiByZXN0b3JlZCkgKENsb3NlczogIzEzMjY1NCkuCisgICoqIE90aGVyIG5vdGljYWJsZSBidWdzIGZpeGVkIGluY2x1ZGU6IGUyZnNjayBudWxsIHBvaW50ZXIKKyAgICBkZXJlZmVyZW5jaW5nLCBmc2NrIGRpZCBub3QgZmluZHMgTFZNIHZvbHVtZXMgYnkgVVVJRCBvciBieSBsYWJlbCwKKyAgICBsYXJnZWZpbGUgc3VwcG9ydCAoaWUuIGRlYWxpbmcgd2l0aCBmaWxlc3lzdGVtcyBpbnNpZGUgMkdCKyBmaWxlcykgd2FzCisgICAgYnJva2VuIGluIHNldmVyYWwgcHJvZ3JhbXMuCisgICogU3dpdGNoIHRvIGRlYmhlbHBlciB2MyB0byBnZXQgbGRjb25maWcgYXV0b21hdGljYWxseSBoYW5kbGVkCisgICAgKGxpbnRpYW4gcmVwb3J0ZWQgdGhhdCBpdCB3YXMgYnJva2VuKS4gIE5vdyBjYWxsIGRoX21ha2VzaGxpYnMsIGJ1dAorICAgIHN0aWxsIG92ZXJyaWRlIGl0cyBnZW5lcmF0ZWQgc2hsaWJzIGZpbGUgd2l0aCBvdXJzLCB0byBnZXQgY29tcGlsZWQKKyAgICBwYWNrYWdlcyBkZXBlbmQgb2YgdGhlIGNvcnJlY3QgdmlydHVhbCBwYWNrYWdlcywgd2hpY2ggaW5jbHVkZQorICAgIGZ1bGwgc29uYW1lcy4KKyAgKiBSZW1vdmVkIGNhbGwgZG8gZGhfaW5zdGFsbG1hbiAoQ2xvc2VzOiAjMTE1NTI2KS4KKyAgKiBDbGVhbmVkIHVwIG1haW50YWluZXIgc2NyaXB0cyB3aXRoIGRlYWQgY29kZSAtIG1vc3QgdGhpbmdzIGFyZSBub3cKKyAgICBtb3JlIHByb3Blcmx5IGhhbmRsZWQgYnkgZGViaGVscGVyLiAgUmVtb3ZlZCBhbiAiZXhpdCAwIiBsdXJraW5nIGluCisgICAgcHJlaW5zdCAtIGNhbid0IGZpbmQgYSByZWFzb24gZm9yIGl0IGluIHRoZSBjaGFuZ2Vsb2csIGl0IHdhcyBwcm9iYWJseQorICAgIGhlcmUgZm9yIGFnZXMuCisgICogUmVtb3ZlIG9ic29sZXRlIG1haW50LXNjcmlwdHMgaW4gYmluYXJ5LWFyY2gsIGFzIHRoZXkgYXJlIHByb3ZpZGVkIGJ5CisgICAgdXBzdHJlYW0uCisgICogQWxzbyByZW1vdmUgdXBzdHJlYW0tc2hpcHBlZCBjb25maWcuY2FjaGUgYmVmb3JlIGNvbmZpZ3VyaW5nLiAgVGhhdAorICAgIHNob3VsZG4ndCBpbXBhY3QgdXMsIGJ1dCB3ZWxsLCB0aGF0IG1ha2VzIGxpbnRpYW4gaGFwcHkgOikKKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgIDggRmViIDIwMDIgMDY6MTI6MzUgKzAxMDAKKworZTJmc3Byb2dzICgxLjI1LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKKworICAqIE5ldyB1cHN0cmVhbSBidWdmaXggcmVsZWFzZSAoQ2xvc2VzOiAjMTEyNDE0KSwgdGFyZ2V0ZWQgdG8gd29vZHkuCisgICogY29tX2Vyci5pbmZvIHByb3ZpZGVkIGFnYWluIG5vdyB0aGF0IGl0IHdhcyBmaXhlZCB1cHN0cmVhbS4KKyAgKiBBZGRlZCBtZXRhaW5mbyB0byBjb21fZXJyLnRleGluZm8gc28gdGhhdCBpdCBnZXRzIGluZGV4ZWQgY29ycmVjdGx5CisgICAgKHRoYW5rcyBsaW50aWFuKS4gIE1vdmVkIEBzZXRmaWxlbmFtZSBhbmQgQHNldHRpdGxlIHRvIHRoZSB0b3Agc28gdGhhdAorICAgIHRoaW5ncyBnZXQgb3V0cHV0IGFzIGV4cGVjdGVkLgorICAqIEFkZGVkIGxpbnRpYW4gb3ZlcnJpZGVzIGZvciAtYmYgYW5kIC1zdGF0aWMgcGFja2FnZXMuCisgICogUHV0IGFsbCBzdGFtcCBmaWxlcyBpbiBkZWJpYW4vc3RhbXBkaXIuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBTYXQsIDIyIFNlcCAyMDAxIDE2OjIyOjQ3ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yNGEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UgKENsb3NlczogIzEwOTU3NykuCisgICoqIFRoZSBvbmx5IG5ldyBjb2RlIGluIHRoZXJlIGlzIGluIGNvZGVwYXRocyB0aGF0CisgICAgYXJlIG9ubHkgdmlzaXRlZCB3aGVuIHByZXZpb3VzbHkgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgYXJlIHVzZWQsIHNvCisgICAgdGhleSBhZGQgdmlydHVhbGx5IG5vIHJpc2suICBTdXBwb3J0IGZvciByYXcgaW1hZ2UgZmlsZXMgd2lsbCBiZSBvZgorICAgIGdyZWF0IGhlbHAgdG8gZGVidWcgdXNlcnMnIHByb2JsZW1zLiAgVXJnZW5jeSBzZXQgdG8gImhpZ2giIHRvIG1ha2UKKyAgICBzdXJlIHRoaXMgdmVyc2lvbiBnZXRzIHJlbGVhc2VkIHdpdGggd29vZHkuCisKKyAgKiogRnNjayBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgbm93IHZhbGlkIGZpbGVzeXN0ZW1zIGFyZSBwYXNzZWQgdG8KKyAgICBpdC4gKENsb3NlczogIzEwNzQ1OCkuCisgICoqIEZzY2sgLUEgd2lsbCBub3QgdHJ5IHRvIGludGVycHJldCBkZXZpY2UgbmFtZXMgZm9yIGZpbGVzeXN0ZW1zIHdoaWNoCisgICAgaGF2ZSBhIHBhc3MgbnVtYmVyIGlzIDAuIChDbG9zZXM6ICMxMDY2OTYpLgorICAqKiBJZiAtTyBub25lIGlzIHBhc3NlZCB0byBta2UyZnMsIGl0IHdpbGwgbm93IG5vdCBzZXQgdGhlIHNwYXJzZV9zdXBlcgorICAgIGZlYXR1cmUgKENsb3NlczogIzEwODE2NSkuCisgICoqIFR1bmUyZnMgaGFzIGJlZW4gZml4ZWQgdG8gbWFrZSBzdXJlIHRoYXQgb25seSBlcnJvciBtZXNzYWdlcyBnbyB0bworICAgIHN0ZGVyciwgYW5kIG5vcm1hbCBtZXNzYWdlIGdvIHRvIHN0ZG91dCAoQ2xvc2VzOiAjMTA4NTU1KS4KKyAgKiogTWlub3IgbWFuIHBhZ2VzIHVwZGF0ZXMgKENsb3NlczogIzMwODMzLCAjMTA4MTc0KS4KKyAgKiogRG9jIGZpeGVzIChDbG9zZXM6ICMxMTA2MjEpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVHVlLCAgNCBTZXAgMjAwMSAyMzo0NDo1NiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjItMikgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBUaGlzIGlzIG9ubHkgYSB0cml2aWFsIHBhdGNoIHRvIHN0b3Agc29tZSB1c2VyIGNvbmZ1c2lvbiwgYW5kIHdvdWxkIGJlCisgICAgZ3JlYXQgdG8gaGF2ZSBpbiB3b29keSwgaGVuY2UgdGhlIHVyZ2VuY3kuCisgICogQXBwbGllZCB1cHN0cmVhbSBwYXRjaCB0byBlMmZzY2sgdG8gd2FybiB1c2VyIHdoZW4gc29tZSBlcnJvcnMgd2VyZQorICAgIG5vdCBjb3JyZWN0ZWQgZHVlIHRvIHVzZXIgYW5zd2VyaW5nICJubyIgKENsb3NlczogIzEwNDUwMikuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBTYXQsIDI4IEp1bCAyMDAxIDIzOjAxOjQ5ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpbmFsIDEuMjIgcmVsZWFzZToKKyAgKiogRml4ZXMgYnVpbGQgcHJvYmxlbXMgb24gYmlnLWVuZGlhbiAoQ2xvc2VzOiAjMTAxNjg2LCAjMTAxNzk4KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFNhdCwgMjMgSnVuIDIwMDEgMTQ6MDM6MTcgKzAyMDAKKworZTJmc3Byb2dzICgxLjIxKzEuMjItV0lQLTA2MjAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcHJlLXJlbGVhc2UsIGNyaXRpY2FsIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtcworICAgIChDbG9zZXM6ICMxMDE3NTIpLgorICAqIFJlLWFwcGxpZWQgaHVyZCBmaXggYWdhaW4uCisgICogQnVpbGQgZTJmc3Byb2dzLWJmIHdpdGggLU9zIHRvIGdhaW4gbW9yZSBzcGFjZS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMjIgSnVuIDIwMDEgMDA6MTg6NDAgKzAyMDAKKworZTJmc3Byb2dzICgxLjIxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRmluYWwgMS4yMSByZWxlYXNlLgorICAqIFJlLWFwcGxpZWQgaHVyZCBmaXggdGhhdCBkaWQgbm90IGNhbWUgcXVpY2tseSBlbm91Z2ggdG8gbWFrZSBpdCBpbgorICAgIDEuMjEuCisgICogRml4ZWQgbmFtZSBvZiBjb3B5cmlnaHQgZmlsZSBpbiBlMmZzcHJvZ3MtYmYuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBXZWQsIDIwIEp1biAyMDAxIDIyOjMyOjA4ICswMjAwCisKK2UyZnNwcm9ncyAoMS4yMCsxLjIxLVdJUC0wNjE0LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRG9uJ3QgYnVpbGQgUElDIGxpYnMsIGJ1aWxkIGEgcmVkdWNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJzIGluc3RlYWQsIGluCisgICAgcGFja2FnZSBlMmZzcHJvZ3MtYmYuICBNYWRlIHRoaXMgbmV3IHBhY2thZ2UgY29uZmxpY3Qgd2l0aCBlMmZzcHJvZ3MuCisgICogQ29tcGlsYXRpb24gZml4IGZvciB0aGUgSHVyZCAoQ2xvc2VzOiAjMTAxMzYxKS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFR1ZSwgMTkgSnVuIDIwMDEgMjM6MzM6MjUgKzAyMDAKKworZTJmc3Byb2dzICgxLjIwKzEuMjEtV0lQLTA2MTQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcHJlLXJlbGVhc2UgKENsb3NlczogIzEwMDU1OSwgIzEwMDMwNCkuCisgICogRml4ZWQgbGliL2V4dDJmcy9NYWtlZmlsZS5pbiBmb3IgaW5zdGFsbGF0aW9uIG9mIG5ldyBnZW5lcmF0ZWQgLmgKKyAgICBmaWxlLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVGh1LCAxNCBKdW4gMjAwMSAxNjoxNDoxMSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjArMS4yMS1XSVAtMDYwOC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSBwcmUtcmVsZWFzZSAoY3JpdGljYWwgZXh0MyBidWdmaXggbW9zdGx5KS4KKyAgKiBDb3JyZWN0bHkgdXNlIGRoX2luc3RhbGxpbmZvLgorICAqIEFkanVzdGVkIHZhcmlvdXMgdGhpbmdzIGFjY29yZGluZ2x5LgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgU2F0LCAgOSBKdW4gMjAwMSAwMDoyNTo1MSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMjAtNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBDbGVhbnVwIGdlbmVyYXRlZCBzdWJzdHZhcnMgZmlsZXMgbm93IHRoYXQgZGViaGVscGVyIHVzZXMgb3RoZXIKKyAgICBuYW1lcyAobWF5IGNhdXNlIHByb2JsZW1zIG9uIG90aGVyIGFyY2hzKS4gIEJ1aWxkLWRlcCBvbiBkZWJoZWxwZXIKKyAgICAzLjAuMzAgb3IgbmV3ZXIgdG8gYmUgc3VyZSBpdCB3b24ndCBjYXVzZSBicm9rZW4gdXBsb2Fkcy4gIEFsbG93cyB0bworICAgIGdldCByaWQgb2YgaGFpcnkgZGVwLCBidXQgY2Fubm90IGJ1aWxkIHN0cmFpZ2h0Zm9yd2FyZGx5IG9uIHBvdGF0byBhbnkKKyAgICBtb3JlLi4uCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBXZWQsICA2IEp1biAyMDAxIDAyOjMzOjMyICswMjAwCisKK2UyZnNwcm9ncyAoMS4yMC0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIENyZWF0ZSBhbGwgc3ltbGlua3MgdG8gdXVpZC1nZW5lcmF0ZS4zIChDbG9zZXM6ICM5OTU3MykuCisgICogU29tZXdoYXQgbW9kZXJuaXplZCBkZWJpYW4vcnVsZXMgKGRlYmhlbHBlciB2MiwgZXRjLikuCisgICogRml4ZWQgbGlic3MyIGNvcHlyaWdodCBmaWxlLgorICAqIEZpeGVkIGUyZnNsaWJzLXBpYyBzaG9ydCBkZXNjcmlwdGlvbi4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFdlZCwgIDYgSnVuIDIwMDEgMDE6MTk6MTkgKzAyMDAKKworZTJmc3Byb2dzICgxLjIwLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogQWRkZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgcGljIGxpYnMgdG8gTWFrZWZpbGUuZWxmLWxpYi4KKyAgKiBOZXcgcGFja2FnZSBlMmZzbGlicy1waWMgZm9yIGJvb3QtZmxvcHBpZXMgdGVhbSAoQ2xvc2VzOiAjOTkyODUpLgorICAqIFVzZSAtTiBvbiBkaF9nZW5jb250cm9sIGluc3RlYWQgb2YgbG90cyBvZiAtcC4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFRodSwgMzEgTWF5IDIwMDEgMjM6NTk6NTEgKzAyMDAKKworZTJmc3Byb2dzICgxLjIwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRmluYWwgMS4yMCByZWxlYXNlLgorICAqIEFkZGVkIG5ldyB6c2gtc3RhdGljIHRvIHRoZSBsaXN0IG9mIHBvc3NpYmxlIHN0YXRpYyBzaGVsbHMgcmVjb21tZW5kZWQKKyAgICBieSBlMmZzY2stc3RhdGljLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgTW9uLCAyOCBNYXkgMjAwMSAyMTozOTowNiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTkrMS4yMC1XSVAtMDUyMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSBwcmUtcmVsZWFzZSBzbmFwc2hvdDoKKyAgKiogRXh0ZW5kZWQgImZzY2sgLXQiIHN5bnRheCAoQ2xvc2VzOiAjODk0ODMpLgorICAqKiBGaXggaGFuZGxpbmcgb2YgZGV2aWNlcyBmb3Igd2hpY2ggZnNjayBjYW4ndCBkZXRlcm1pbmUgYSBwaHlzaWNhbAorICAgIHNwaW5kYWwsIGNhdXNpbmcgbG9ja3VwIHdoZW4gY2hlY2tpbmcgTFZNIHZvbHVtZXMgKENsb3NlczogIzk4MTAzKS4KKyAgKiogRml4ZWQgdHlwbyBpbiBlMmZzY2stc3RhdGljIGRlc2NyaXB0aW9uIC0gdGhhbmtzIFRlZCA6KS4KKyAgKiBGaXhlZCBzbWFsbCBjb21waWxhdGlvbiBidWcgaW4gZnNjay5jCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBNb24sIDIxIE1heSAyMDAxIDIwOjQ3OjEwICswMjAwCisKK2UyZnNwcm9ncyAoMS4xOSsxLjIwLVdJUC0wNTE0LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVGlnaHRlbiBkZXBlbmRlbmN5IG9uIGRlYmhlbHBlci4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFR1ZSwgMTUgTWF5IDIwMDEgMjE6Mzg6NDcgKzAyMDAKKworZTJmc3Byb2dzICgxLjE5KzEuMjAtV0lQLTA1MTQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcHJlLXJlbGVhc2Ugc25hcHNob3Q6CisgICoqIG5ldyBwcm9ncmFtOiBlMmltYWdlLgorICAqKiBlMmZzY2sgdmFsaWRhdGVzIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpZWQgaW4gLUMgKENsb3NlczogIzU1MjIwKQorICAqKiBGaXggbXVsdGlwbGUgcHJvZ3Jlc3MgYmFyIGZzY2sgYnVnIChDbG9zZXM6ICM2NTI2NykKKyAgKiogQWRkIGRldmZzIHN1cHBvcnQgdG8gZnNjayAoQ2xvc2VzOiAjOTQxNTkpCisgICoqIEZpeCBkZWJ1Z2ZzIGR1bXAgY21kIGxvb3Bpbmcgb24gZGlzayBlcnJvcnMgKENsb3NlczogIzc5MTYzKQorICAqKiBNaXNjZWxsYW5lb3VzIG1hbnVhbCBwYWdlIGNsYXJpZmljYXRpb25zIChDbG9zZXM6ICM2MzQ0MiwgIzY3NDQ2LAorICAgICM4NzIxNikKKyAgKiogQ29tcGlsYXRpb24gZml4ZXMgZm9yIEh1cmQgKENsb3NlczogIzUyMDQ1KS4KKyAgKiogTmV3IGNvbmZpZy57Z3Vlc3Msc3VifSBmb3IgcGFyaXNjIHN1cHBvcnQgKENsb3NlczogIzk0NjkwKS4KKyAgKiogSW1wcm92ZWQgZXh0MyBzdXBwb3J0CisgICoqIHR1bmUyZnMgY2FuIG5vdyBzYWZlbHkgbW9kaWZ5IG1vdW50ZWQgZmlsZXN5c3RlbXMKKyAgKiBBZGRlZCBtaXNzaW5nIEBkaXJjYXRlZ29yeSBlbnRyeSB0byBsaWJleHQyZnMuaW5mbyAobGludGlhbikKKyAgKiBNb3ZlZCBkZWJ1Z2ZzIGJhY2sgZnJvbSAvdXNyL3NiaW4vIHRvIC9zYmluLyAoQ2xvc2VzOiAjOTcwMzUpLgorICAqIE1vdmVkIGUybGFiZWwgYmFjayB0byAvc2Jpbi8gYXMgd2VsbCwgYXMgaXQgaXMgbm93IGEgaGFyZCBsaW5rIHRvCisgICAgdHVuZTJmcy4KKyAgKiBOZXcgYmluYXJ5IHBhY2thZ2Ugd2l0aCBzdGF0aWNhbGx5IGxpbmtlZCBlMmZzY2ssIHJlY29tbWVuZGluZyBhCisgICAgc3RhdGljYWxseSBsaW5rZWQgc2hlbGwgKENsb3NlczogIzYyNjExKS4KKyAgKiBBbGwgZGVwcyBhZ2FpbnN0IGUyZnNwcm9ncyBpdHNlbGYgbm93IHZlcnNpb25uZWQgKGxpbnRpYW4pLgorICAqIFVwZGF0ZWQgY29weXJpZ2h0IGZpbGUgKHVwc3RyZWFtIGxvY2F0aW9uLCBwYWNrYWdpbmcgY29weXJpZ2h0IG5vdGljZQorICAgIGZvciBwcmV2aW91cyBtYWludGFpbmVycyBhbmQgZm9yIEFsY292ZSkuCisgICogUmVtb3ZlIGNhbGwgdG8gZGhfdGVzdHZlcnNpb24sIHVzZSB2ZXJzaW9ubmVkIGJ1aWxkLWRlcCBpbnN0ZWFkCisgICAgKGxpbnRpYW4pLgorICAqIFN1cHBvcnQgZm9yIERFQl9CVUlMRF9PUFRJT05TIGRlYnVnL25vc3RyaXAgZm9yIHBvbGljeSAzLjIKKyAgICBjb21wbGlhbmNlLgorICAqIFVzZSBkaF9zaGxpYmRlcHMgLWwgaW5zdGVhZCBvZiBzZXR0aW5nIExEX0xJQlJBUllfUEFUSCBleHBsaWNpdGVseSAtCisgICAgbmVjZXNzYXJ5IGZvciBuZXcgdmVyc2lvbnMgb2YgZmFrZXJvb3QsIGFuZCByZXF1aXJlcyBkZWJoZWxwZXIgMy4wLjIzCisgICAgZm9yIGEgZml4LiAgV2VsbCBmaW5hbGx5IDMuMC4yMyBpcyBidWdneSwgbGVhdmUgdGhpcyBmb3IgbGF0ZXIuCisgICogQXZvaWQgdG8gY2FsbCBsZGNvbmZpZyBhdCAibWFrZSBpbnN0YWxsIiB0aW1lLCB0b28gY29zdGx5LgorICAqIEdldCByaWQgaW4gY29udHJvbCBmaWxlcyBvZiByZWZlcmVuY2VzIHRvIG5ldmVyLXJlbGVhc2VkIHN0YW5kYWxvbmUKKyAgICBsaWIgZmlsZXMgKHNwbGl0IGF0dGVtcHRlZCBpbiAxOTk3Lzk4KS4KKyAgKiBCdW1wZWQgU3RhbmRhcmRzLVZlcnNpb24gdG8gMy41LjQuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUdWUsIDE1IE1heSAyMDAxIDE0OjI4OjM5ICswMjAwCisKK2UyZnNwcm9ncyAoMS4xOS00KSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIEFkZGVkIHRleGluZm8gdG8gYnVpbGQtZGVwcyAoQ2xvc2VzOiAjODc2ODUpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVHVlLCAgMyBBcHIgMjAwMSAwOTowMzoxMyArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTktMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBEcm9wIGZpbmRzdXBlciBiaW5hcnksIGFuZCBzdWdnZXN0IGdwYXJ0IChDbG9zZXM6ICM3NDAzNCkuCisgICogRHJvcCBmbHVzaGIgYW5kIGV4dGVuZCBhdCB1cHN0cmVhbSByZXF1ZXN0IChDbG9zZXM6ICMzOTUwNikuCisgICogQXBwbGllZCB1cHN0cmVhbSBmaXggZm9yIGNoYXR0ciBvbiBsYXJnZSBmaWxlcyAoQ2xvc2VzOiAjNzI2OTApLgorICAqIEFwcGxpZWQgY2xhcmlmaWNhdGlvbiBwYXRjaCB0byB0dW5lMmZzLjggKENsb3NlczogIzY3NDQ2KS4KKyAgKiBBcHBsaWVkIHR5cG8gcGF0Y2ggdG8gY29tcGlsZV9ldC4xIChDbG9zZXM6ICM2Mzc4NikuCisgICogSW5jbHVkZSA8c3lzL21vdW50Lmg+IGluIGUyZnNjay9qb3VybmFsLmMgKENsb3NlczogIzcxNzc1KS4KKyAgKiBTdWdnZXN0IHBhcnRlZC4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIE1vbiwgIDQgRGVjIDIwMDAgMjI6MDg6MDYgKzAxMDAKKworZTJmc3Byb2dzICgxLjE5LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogQ2xhcmlmaWVkIGxpYnV1aWQgY29weXJpZ2h0IHRvIExHUEwtMiwgZXhjbHVkaW5nIExHUEwtMi4xLgorICAqIEFkZGVkIGJ1aWxkLWRlcGVuZGVuY3kgb24gZGViaGVscGVyIChDbG9zZXM6ICM2NzUzMikuCisgICogRG9uJ3QgcGFyYWxlbGl6ZSBmc2NrIHJ1bnMgb24gc2FtZSBkcml2ZSBmb3IgaGRbZWZnaF0gKENsb3NlczoKKyAgICAjNTkxMDMpLgorICAqIFVwbG9hZCBwcmlzdGluZSBzb3VyY2UsIC0xIHdhcyBlcnJvbmVvdXNseSB1cGxvYWRlZCBhcyBhCisgICAgZGViaWFuLXNwZWNpZmljIHBhY2thZ2UuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUaHUsICAzIEF1ZyAyMDAwIDAwOjMwOjQ5ICswMjAwCisKK2UyZnNwcm9ncyAoMS4xOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlOgorICAqKiBuZXcgcHJvZ3JhbTogcmVzaXplMmZzLgorICAqKiBleHQzIHN1cHBvcnQuCisgICoqIE5MUyBzdXBwb3J0IChub24tZGVmYXVsdCwgYWN0aXZhdGVkKS4KKyAgKiogQ29tcHJlc3Npb24gc3VwcG9ydCAobm9uLWRlZmF1bHQsIGFjdGl2YXRlZCkuCisgICoqIFByb2dyZXNzIGJhciBuaWNlIHRvIHNlcmlhbCBjb25zb2xlIChDbG9zZXM6ICM2NjA3OSkKKyAgKiogRW5zdXJlIGZpbGV0eXBlIGZlYXR1cmUgaXMgdHVybmVkIG9mZiBmb3IgSHVyZCBmaWxlc3lzdGVtcyAoQ2xvc2VzOgorICAgICM2MTg2MykKKyAgKiBVcGRhdGVkIG1haW4gY29weXJpZ2h0IGZpbGUgZm9yIGEgbnVtYmVyIG9mIHRoaW5ncy4KKyAgKiBGaXhlZCBOTFMgc3VwcG9ydCBmb3IgZmx1c2hiIGFuZCBleHRlbmQuCisgICogU3RhcnRlZCB0byBhZGQgYnVpbGQtZGVwZW5kcy4KKyAgKiBJbmNsdWRlIG5ldyBlMnAgaGVhZGVyLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgV2VkLCAxOSBKdWwgMjAwMCAwMTo1NToyNyArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTgtMykgZnJvemVuIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogRml4IFkySyBkaXNwbGF5LW9ubHkgYnVnIGluIGRlYnVnZnMgLSAibHMgLWwiIGRpc3BsYXllZCByYXcgdG1feWVhciwKKyAgICBjYXVzaW5nIDIwMDAgdG8gYmUgZGlzcGxheWVkIGFzICIxMDAiIChDbG9zZXM6ICM1NzEzNSkuICBQb3RhdG8gc2hvdWxkCisgICAgYmUgeTJrLWNsZWFuLgorICAqIFJlbW92ZSBlbXB0eSBkaXJzIC91c3Ivc2hhcmUvZXQvIGFuZCAvdXNyL3NoYXJlL3NzLyBmcm9tIHBhY2thZ2UKKyAgICBlMmZzcHJvZ3MgKENsb3NlczogIzUyOTAwKS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIE1vbiwgMjEgRmViIDIwMDAgMjM6MDY6NDcgKzAxMDAKKworZTJmc3Byb2dzICgxLjE4LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVGVzdCBmb3IgIl9fc3BhcmNfXyIgaW5zdGVhZCBvZiAic3BhcmMiIGFzIGEgY3BwIG1hY3JvIGluIG1rZTJmcy5jCisgICAgKHRlc3RzIGluIG90aGVyIHBsYWNlcyBhcmUgY29ycmVjdCkgKENsb3NlczogIzUwMDEyKS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMTIgTm92IDE5OTkgMjE6NDA6MjcgKzAxMDAKKworZTJmc3Byb2dzICgxLjE4LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIChidWdmaXgpIHJlbGVhc2UuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBGcmksIDEyIE5vdiAxOTk5IDE3OjI3OjIwICswMTAwCisKK2UyZnNwcm9ncyAoMS4xNy0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFwcGxpZWQgdXBzdHJlYW0gcGF0Y2ggdG8gZml4IHNlZ2ZhdWx0IChDbG9zZXM6ICM0OTUzNSkuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUdWUsICA5IE5vdiAxOTk5IDIyOjE0OjUzICswMTAwCisKK2UyZnNwcm9ncyAoMS4xNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSAoYnVnZml4KSByZWxlYXNlLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgV2VkLCAyNyBPY3QgMTk5OSAyMzo0NjozOSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTYtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXhlZCBidWlsZCBvZiBhIGxpbmsgbGlzdCBpbiBmc2NrLmMgKENsb3NlczogIzQ4MzEyKS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIFR1ZSwgMjYgT2N0IDE5OTkgMDE6MTc6MzYgKzAyMDAKKworZTJmc3Byb2dzICgxLjE2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCisgICogUmUtYXBwbGllZCBIdXJkIHBhdGNoZXMgdGhhdCBkaWQgbm90IHNlZW0gdG8gaGF2ZSBiZWVuIHJlY2VpdmVkCisgICAgdXBzdHJlYW0uCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBTdW4sIDI0IE9jdCAxOTk5IDE2OjExOjU5ICswMjAwCisKK2UyZnNwcm9ncyAoMS4xNS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeGVkIG1pbm9yIHR5cG8gZm9yIHRoZSBIdXJkLgorICAqIEZpeGVkIHZhcmlvdXMgSHVyZCBkZWZpbmVzIHRvIF9fR05VX18gKENsb3NlczogIzQ0NDA3KS4KKyAgKiBTd2l0Y2hlZCBkb2MvIGFuZCBpbmZvLyB0byBGSFMuCisgICogQ2xlYW5lZCB1cCBkZWJpYW4vcnVsZXMgdG8gdXNlIG5ldyBkZWJoZWxwZXIgZmVhdHVyZXMuCisgICogQm91bmNlZCBTdGFuZGFyZHMtVmVyc2lvbiB0byAzLjAuMS4KKyAgKiBEbyBub3QgaW5zdGFsbCBidWdneSBjb21fZXJyLmluZm8sIHNoaXBwZWQgYXMgSFRNTC4KKyAgKiBSZW1vdmVkIHBhcnRpbmZvIGZyb20gdGhlIHBhY2thZ2UsIGZvbGxvd2luZyB0aGUgd2lzaCBvZiB1cHN0cmVhbQorICAgIGF1dGhvciwgYmVjYXVzZSBvZiBkdXBsaWNhdGUgZnVuY3Rpb25hbGl0eSB3aXRoICJmZGlzayAtbCIgKENsb3NlczoKKyAgICAjNDIxMzkpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgTW9uLCAyMCBTZXAgMTk5OSAyMzowNDowNiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBDaGFuZ2VkIGJ1aWxkIGRpcmVjdG9yeSBkbyBkZWJpYW4vQlVJTEQvIC0gcmVsYXRlZCBjbGVhbnVwcyBpbgorICAgIGRlYmlhbi9ydWxlcy4KKyAgKiBGaXhlZCBwYXJ0aW5mby5jIHRvIGhhdmUgaXQgY29tcGlsZWQsIGFuZCBmaXhlZCBkaXNwbGF5IG9mIHBhcnRpdGlvbgorICAgIGRldmljZSBpbiBlcnJvciBtZXNzYWdlcy4KKyAgKiBBZGRlZCAvdXNyL3NiaW4vcGFydGluZm8gdG8gdGhlIHBhY2thZ2UgKENsb3NlczogIzQyMTM5KS4KKyAgKiBBZGRlZCBub3RlIGFib3V0IHV1aWRnZW4oMSkgaW4gUkVBRE1FLkRlYmlhbi4KKyAgKiBEb2N1bWVudGVkIGluIG1hbnBhZ2UgdGhhdCBkZWZhdWx0IG1rZTJmcyBiZWhhdmlvdXIgaXMgbm93IC1yMSAtczEKKyAgICAoQ2xvc2VzOiAjNDQ0NzgpLgorICAqIERvY3VtZW50ZWQgaW4gbWtlMmZzLjggdGhhdCAtcjEgZm9yY2VzIC1zMSwgdGh1cyBpZ25vcmluZyAtczAuCisgICogQWRkZWQgd2FybmluZyBtZXNzYWdlIHdoZW4gLXMwIGlzIGlnbm9yZWQgYmVjYXVzZSBvZiAtcjEuCisgICogRG9jdW1lbnRlZCAtbiBvcHRpb24gb2YgbWtlMmZzLgorICAqIEZpeGVkIGRpc3BsYXkgYnVnbGV0IGNhdXNpbmcgdHJhaWxpbmcgY29tbWFzIGluIGxpc3Qgb2Ygc3VwZXJibG9jaworICAgIGJhY2t1cHMgd2hlbiBzcGFyc2UgZmxhZyBpcyBvbiBhbmQgbGFzdCBncm91cCBoYXMgbm8gc3VwZXJibG9jaworICAgIGJhY2t1cC4KKyAgKiBDbG9zZXM6ICM0MjQzNCwgIzQzMTM0LgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgV2VkLCAgOCBTZXAgMTk5OSAwMDo0NjozOCArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAoQ2xvc2VzOiBCdWcjNDE3NjMpLgorICAqIEFsbCBjaGFuZ2VzIHRvIHVwc3RyZWFtIGZpbGVzIGluIDEuMTQtMyB3ZXJlIGludGVncmF0ZWQgdXBzdHJlYW0uCisgICogU2VwYXJhdGVkIGxpYnV1aWQtZGV2IGZyb20gZTJmc2xpYnMtZGV2IGJlY2F1c2UgaXQgbm93IGhhcyBtYW5wYWdlcy4KKyAgKiBGaXhlZCBkZWJpYW4vcnVsZXMgZm9yIFBPU0lYICJybWRpciAtcCIKKyAgKiBDb3JyZWN0ZWQgdGhlIGxvY2F0aW9uIG9mIHRoZSBHUEwgaW4gY29weXJpZ2h0IGZpbGUuCisgICogTW92ZWQgdGhlIG1hbnBhZ2VzIHRvIC91c3Ivc2hhcmUvLgorICAqIEJ1bXBlZCBTdGFuZGFyZHMtVmVyc2lvbiB0byAzLjAuMC4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMjMgSnVsIDE5OTkgMDE6Mzc6NTEgKzAyMDAKKworZTJmc3Byb2dzICgxLjE0LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogRmFpbCB3aXRoIGVycm9yIG1lc3NhZ2Ugd2hlbiAvZGV2L251bGwgY2Fubm90IGJlIG9wZW5lZCAoRml4ZXM6CisgICAgQnVnIzM1NTk1KS4KKyAgKiBGaXhlZCB0eXBvIGluIGUyZnNjay91bml4LmMgKEZpeGVzOiBCdWcjMzY5NjApLgorICAqIEFkZGVkICJlbWVyZWdlbmN5IGhlbHAiIG9wdGlvbnMgc3VtbWFyeSB0byBlMmZzY2sgKEZpeGVzOiBCdWcjMTEzNzIpLgorICAqIFByZXBhcmVkIGRlYmlhbi9ydWxlcyBmb3IgdXNyL3NoYXJlL21hbi8uCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUdWUsICAxIEp1biAxOTk5IDIzOjM3OjEyICswMjAwCisKK2UyZnNwcm9ncyAoMS4xNC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeGVkIGZzY2soMSkgbm90IHRvIGNvcmVkdW1wIHdoZW4gaXQgZG9lcyBub3QgZmluZCBpdHMgYXJndW1lbnQgaW4KKyAgICAvZXRjL2ZzdGFiIChGaXhlczogQnVnIzMzNTMzLCBCdWcjMzQzMjAsIHBhcnQgb2YgQnVnIzM0MTMxKS4KKyAgKiBGaXhlZCBzcGVsbGluZyBvZiB1cHN0cmVhbSBhdXRob3IncyBuYW1lLgorICAqIENsZWFuZWQgZGViaWFuLyouZmlsZXMgdXAuCisgICogVW5kaWQgdGhlIDxsaW51eC90eXBlcy5oPiBjaGFuZ2VzLgorICAqIENoYW5nZWQgInJtZGlyIC1wIiBpbnZvY2F0aW9ucyBpbiBkZWJpYW4vcnVsZXMgaW50byAiLXJtZGlyIC1wIiB0bworICAgIHR1cm4gYXJvdW5kIGNoYW5nZWQgYmVoYXZpb3VyIGluIGZpbGV1dGlsc180LjAuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBGcmksIDEyIE1hciAxOTk5IDIzOjUwOjQ3ICswMTAwCisKK2UyZnNwcm9ncyAoMS4xNC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlIChGaXhlczogQnVnIzMzMTEzKS4KKyAgKiBBbGwgcGF0Y2hlcyB3ZSB1c2VkIGZvciAxLjEyIGFyZSBvYnNvbGV0ZWQgYnkgMS4xNC4KKyAgKiBTdGlsbCBoYXZlIHRvIGluc3RhbGwgY29tX2Vyci5pbmZvIGZyb20gZGViaWFuL3J1bGVzIHRob3VnaC4KKyAgKiBJbmNvcnBvcmF0ZWQgcGF0Y2hlcyBmcm9tIEdvcmRvbiBNYXR6aWdrZWl0IGZvciBodXJkIGNyb3NzLWNvbXBpbGF0aW9uOgorICAqIC0gY29uZmlndXJlLmluOiBDaGFuZ2UgY3Jvc3MtY29tcGlsZSBkZWZhdWx0IGZvciBzaXplb2YgKGxvbmcKKyAgICAgIGxvbmcpIHRvIDgsIHNvIHRoYXQgX19zNjQgYW5kIF9fdTY0IGdldCBkZWZpbmVkIGluIGV4dDJmcy5oLgorICAgICAgKEJVSUxEX0NDKTogRGlzY292ZXIgYSBuYXRpdmUgY29tcGlsZXIgaWYgd2UgYXJlIGNyb3NzLWNvbXBsaW5nCisgICAgICAodXNlZCBmb3IgdXRpbC9zdWJzdCkuCisgICAgLSBJbmNsdWRlIGxpbnV4L3R5cGVzLmggaW5zdGVhZCBvZiBhc20vdHlwZXMuaCwgc28gdGhhdAorICAgICAgbm9uLUxpbnV4IHBsYXRmb3JtcyB1c2UgdGhlIHN0dWJiZWQgdmVyc2lvbiBwcm92aWRlZCB3aXRoIHRoaXMKKyAgICAgIHBhY2thZ2UuCisgICAgLSBtaXNjL01ha2VmaWxlLmluIChmaW5kc3VwZXIpOiBBZGQgYSBydWxlIHNvIHRoYXQgZmluZHN1cGVyIGdldHMgYnVpbHQKKyAgICAgIHdpdGggdGhlIHJpZ2h0IGNvbXBpbGVyIGZsYWdzLgorICAgIC0gZXRjLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgV2VkLCAxMCBGZWIgMTk5OSAyMzoyMzowMyArMDEwMAorCitlMmZzcHJvZ3MgKDEuMTItNCkgZnJvemVuIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogU2hpcCBmbHVzaGIoOCkgYW5kIGV4dGVuZCg4KSB3ZXJlIG1pc3NpbmcgaW4gYWxsIDEuMTIgcGFja2FnZXMKKyAgICAoRml4ZXM6IEJ1ZyMyODc3MSkuCisgICogQWRkIGV4dGVuZC44IGxpbmsgdG8gdW5kb2N1bWVudGVkLjcuCisgICogUmVwbGFjZWQgbXkgKGFkLWhvYykgZml4IGZvciBCdWcjMjU2ODQgd2l0aCAocmVhbGx5IGJldHRlcikgb25lCisgICAgZnJvbSB1cHN0cmVhbS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIE1vbiwgIDIgTm92IDE5OTggMjA6NTM6MjggKzAxMDAKKworZTJmc3Byb2dzICgxLjEyLTMpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeGVkIDxleHQyZnMvZXh0MmZzLmg+IHRvIHVzZSBhbmdsZSBicmFja2V0cyBpbnN0ZWFkIG9mIGRvdWJsZQorICAgIHF1b3RlcyB3aGVuIGluY2x1ZGluZyBmaWxlcyBmcm9tIC91c3IvaW5jbHVkZS8uCisgICogTWFkZSBlMmZzbGlicy1kZXYgZGVwZW5kIG9uIGNvbWVyci1kZXYgKEZpeGVzOiBCdWcjMjYyODIsCisgICAgQnVnIzI3NDk3KS4KKyAgKiBGaXhlZCBta2UyZnMnIGRpc3BsYXkgd2l0aCBpbm9kZSBudW1iZXJzID4gOTk5OSAoRml4ZXM6IEJ1ZyMyNTY4NCkuCisgICogVXNlIC1EX19OT19TVFJJTkdfSU5MSU5FUyBvbiBwb3dlcnBjIHRvIGFsbG93IGJ1aWxkaW5nIHRoZSBib290CisgICAgYmxvY2tzIGluIFFVSUssIHRoZSBwb3dlcm1hYyBib290IGxvYWRlciAtIHJlcG9ydGVkIGJ5IE1hdHQKKyAgICBNY0xlYW4uCisgICogUmVtb3ZlZCB1bnN1cHBvcnRlZCBpbmZvIGFuZCB0ZXhpIGVudHJpZXMgZnJvbSBkb2NiYXNlIGZpbGVzLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgTW9uLCAxOSBPY3QgMTk5OCAyMzozMjo0MSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTItMi4xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5vbi1tYWludGFpbmVyIHVwbG9hZAorICAgIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YiBmaWxlcyBtb2RpZmllZCwgdG8gcmVjb2duaXplIGEgQXJtCisgICAgYXJjaGl0ZWN0dXJlLgorCisgLS0gVHVyYm8gRnJlZHJpa3Nzb24gPHR1cmJvQGRlYmlhbi5vcmc+ICBUaHUsIDEzIEF1ZyAxOTk4IDE5OjE1OjU2IC0wNDAwCisKK2UyZnNwcm9ncyAoMS4xMi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFJlYWxseSBpbnN0YWxsIGUybGFiZWwuOCBtYW5wYWdlLgorICAqIFJlbW92ZWQgcGF0aCBmcm9tIGxkY29uZmlnIGludm9jYXRpb24sIG9iZXlpbmcgcGFja2FnaW5nIG1hbnVhbC4KKyAgKiBJbXByb3ZlZCB0aGUgc3Vic3QuYyBwYXRjaCAodGhhbmtzIHRvIFBldGVyIE1vdWxkZXIpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgVGh1LCAxNCBKdWwgMTk5OCAxNDoxMDowNiArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZSAtIGF0IGxhc3Qgb3V0IG9mIGFscGhhIHN0YXR1cyAhCisgICogUmVtb3ZlZCBzb21lIG9ic29sZXRlIGZpbGVzIGZyb20gZGViaWFuL2F0dGljLgorICAqIFBhdGNoZWQgdXRpbC9zdWJzdC5jIHRvIGV4cGFuZCBlbnYgdmFyaWFibGVzLCBhbmQgTUNPTkZJRy5pbiB0bworICAgIGhhdmUgJHtwcmVmaXh9IGV4cG9ydGVkIHRvIHRoZSBgc3Vic3QnIHByb2Nlc3MsIHNvIHRoYXQgd2UgZ2V0CisgICAgY29ycmVjdCBwYXRocyBpbiBta19jbWRzIGFuZCBjb21waWxlX2V0LiAgRm9yd2FyZGVkIHVwc3RyZWFtLgorICAqIERlYmlhbi1zcGVjaWZpYyAvdXNyL3NoYXJlL2NvbWVyci8gcmVuYW1lZCB0byAvdXNyL3NoYXJlL2V0Lywgbm93CisgICAgaW5zdGFsbGVkIHVwc3RyZWFtLgorICAqIFJlbW92ZWQgLWlzcCBmcm9tIGRoX2dlbmNvbnRyb2wgaW52b2NhdGlvbiAtIG5vdyB0aGUgZGVmYXVsdC4KKyAgKiBQYXNzZWQgbGludGlhbiAwLjUuMC4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMTAgSnVsIDE5OTggMjI6NDk6MTggKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTE3KSBmcm96ZW4gdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBDb21tZW50ZWQgb3V0IG9ic29sZXRlIGNvZGUgaW4gZnNjay5jIHRoYXQgYXNzdW1lZCBmc3RhYiBlbnRyaWVzCisgICAgZGVjbGFyZWQgYG5vYXV0bycgc2hvdWxkIG5vdCBiZSBjaGVja2VkIC0gc3VjY2Vzc2Z1bGx5IGZvcndhcmRlZAorICAgIHVwc3RyZWFtIChGaXhlczogQnVnIzE3MjQ0KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMTUgTWF5IDE5OTggMDE6MTQ6NTQgKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTE2KSBmcm96ZW4gdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBDaGFuZ2VkIDxsaW51eC90eXBlcy5oPiB0byA8YXNtL3R5cGVzLmg+IGluIGxpYi91dWlkL3V1aWRQLmggdG8KKyAgICBhbGxvdyBjb21waWxhdGlvbiB3aXRoIGdsaWJjIDIuMC43cHJlMSAoRml4ZXM6IEJ1ZyMyMjAzOSkuCisgICogVXNlICJidWlsZC1zdGFtcCIgYXMgYSBzdGFtcCBmaWxlIGluc3RlYWQgb2YgImJ1aWxkIi4KKyAgKiBSZXN0b3JlZCAiUHJvdmlkZXM6IGUyZnNsaWJzZyIgaW4gb3JkZXIgdG8gYWxsb3cgdXBncmFkZSBmcm9tCisgICAgdW5zdGFibGUgaGFtbS4gIERvY3VtZW50ZWQgaW4gUkVBRE1FLkRlYmlhbiBzbyB0aGF0IGl0IGRvZXMgbm90CisgICAgZ2V0IHJlbW92ZWQgYWdhaW4gKEZpeGVzOiBCdWcjMjIwMTkpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgTW9uLCAgNCBNYXkgMTk5OCAyMToxMTozOCArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTAtMTUpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEFkZGVkIGNhbGwgdG8gbGRjb25maWcgaW4gZTJmc3Byb2dzLnBvc3RpbnN0LgorICAqIEZpeGVzIGNoZWNrcyBmb3IgaW5zdGFsbC1kb2NzIGluIHBvc3RpbnN0L3ByZXJtIChGaXhlczogQnVnIzIwMzAzLAorICAgIEJ1ZyMyMDMwNCwgQnVnIzIwNTkwKS4KKyAgKiBSZW1vdmVkIGUyZnNsaWJzZyBmcm9tIHdoYXQgZTJmc3Byb2dzIHByb3ZpZGVzICh3YXMganVzdCBmb3Jnb3R0ZW4pLgorICAqIFBhc3NlZCBsaW50aWFuIDAuNC4yLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiAgU3VuLCAyNiBBcHIgMTk5OCAyMjoyNzoxMSArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTAtMTQpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEZpeGVkIGNoZWNrcyBmb3IgaW5zdGFsbC1kb2NzIHRvIHVzZSAteC4KKyAgKiBBcHBsaWVkIHBhdGNoIGZvciBzcGFyYyBmcm9tIEp1YW4gdG8gZnNjay5jIHRvIGNvbXBpbGUgd2l0aCBnbGliYworICAgIDIuMSAoRml4ZXM6IEJ1ZyMyMDg0MSkuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUdWUsIDE0IEFwciAxOTk4IDE3OjEyOjE5ICswMjAwCisKK2UyZnNwcm9ncyAoMS4xMC0xMykgZnJvemVuIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogdGVzdCBmb3IgL3Vzci9zYmluL2luc3RhbGwtZG9jcyBiZWZvcmUgdHJ5aW5nIHRvIHJ1biBpdCBpbgorICAgIHBvc3RpbnN0IGFuZCBwcmVybSAoRml4ZXM6IEJ1ZyMxOTQ2MSwgQnVnIzE5NDY5LCBCdWcjMTk5NDksCisgICAgQnVnIzIwMDA2KS4KKyAgKiBjb21lcnJnLWRldiBub3cgc3VnZ2VzdHMgZG9jLWJhc2UuCisgICogbW92ZWQgYmluYXJ5IHBhY2thZ2VzIHNzMmcsIGNvbWVycjJnIGFuZCBlMmZzbGlic2cgYmFjayBpbnRvCisgICAgYmluYXJ5IHBhY2thZ2UgZTJmc3Byb2dzLgorICAqIHVzZSBuZXcgdmlydHVhbCBwYWNrYWdlcyBsaWJjb21lcnIyLCBsaWJzczIsIGxpYmV4dDJmczIsIGxpYmUycDIsCisgICAgbGlidXVpZDEgaW4gc2hsaWJzIGFuZCBkZXBlbmRlbmNpZXMuCisgICogQ2hhbmdlZCBlMmZzcHJvZ3MgZGVwZW5kZW5jeSBvbiBsaWJzIHRvIGEgUHJlLURlcGVuZHMgKEZpeGVzOgorICAgIEJ1ZyMxODIyMSkuCisgICogTm90IGNvbmZsaWN0aW5nIHdpdGggb2xkIHNzMmcgYW5kIGNvbWVycjJnIC0gdGhlc2Ugd2lsbCBoYXZlIHRvIGJlCisgICAgcmVtb3ZlZCBieSBoYW5kLgorICAqIFR1cm5lZCBhcm91bmQgZHBrZydzIGJ1ZyAjMTc2MjQgaW4gZTJmc3Byb2dzLnByZWluc3QuCisgICogVXBkYXRlZCBSRUFETUUuRGViaWFuIHRvIGV4cGxhaW4gdGhlIG5ldyBwYWNrYWdlIGFyY2hpdGVjdHVyZS4KKyAgKiBQYXNzZWQgbGludGlhbiAwLjMuNC4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4gIEZyaSwgMjAgTWFyIDE5OTggMTM6MDM6MTEgKzAxMDAKKworZTJmc3Byb2dzICgxLjEwLTEyKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIENvcnJlY3RlZCBkb2MgbWVudSBlbnRyaWVzIHRvIHBvaW50IHRvIHRoZSByZWFsIGRvY3VtZW50cycgcGxhY2VzLgorICAqIEZpeGVkIG1rX2NtZHMgdG8gcmVhbGx5IGZpbmQgaXRzIHN1cHBvcnQgc2NyaXB0cyAoRml4ZXM6IEJ1ZyMxODc3OSkuCisgICogTWFkZSBta19jbWRzIGFuZCBjb21waWxlX2V0IHVzZSAic2ggLWUiLgorICAqIEhhdmUgbWlzc2luZyBmaWxlIC91c3IvaW5jbHVkZS9zcy9zc19lcnIuaCBpbnN0YWxsZWQgKEZpeGVzOiBCdWcjMTg3NzgpLgorICAqIENvcnJlY3RlZCB0eXBvIGluIERlc2NyaXB0aW9uIChGaXhlczogQnVnIzE4ODkwKS4KKyAgKiBGaXhlZCBkZXNjcmlwdGlvbnMgZm9yIHNzKiBwYWNrYWdlcywgdGhhbmtzIHRvIEdyZWcgU3RhcmsgKEZpeGVzOgorICAgIEJ1ZyMxODM3MywgQnVnIzE4NDQ3KS4KKyAgKiBBZGRlZCBkZXNjcmlwdGlvbiBvZiBlMnAgYW5kIHV1aWQgbGlicyBpbiBlMmZzbGlic2ctZGV2IGRlc2NyaXB0aW9uLgorICAqIEluY2x1ZGVkIHRleGluZm8gc291cmNlcy4KKyAgKiBBZGRlZCBkb2MtYmFzZSBzdXBwb3J0IC0gc3VwcHJlc3NlZCBkaXJlY3QgbWVudS9kd3d3IHN1cHBvcnQuCisgICogQ29tcGxpZXMgd2l0aCBzdGFuZGFyZHMgdmVyc2lvbiAyLjQuMC4wLgorICAqIFBhc3NlZCBsaW50aWFuIDAuMy4wOgorICAqICByZW1vdmVkIC5kdSBjb250cm9sIGZpbGUuCisgICogIHVwZGF0ZWQgRlNGIGFkZHJlc3MuCisgICogIGZpeGVkIGluICouZmlsZXMgbmFzdHkgbGRjb25maWctc3ltbGluay1iZWZvcmUtc2hsaWItaW4tZGViJ3MuCisgICogIHR1cm5lZCByZWxhdGl2ZSBsaW5rcyBmcm9tIC91c3IvbGliIGludG8gL2xpYiBpbnRvIGFic29sdXRlIG9uZXMuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBTdW4sICA4IE1hciAxOTk4IDE5OjQyOjU4ICswMTAwCisKK2UyZnNwcm9ncyAoMS4xMC0xMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBTd2l0Y2hlZCB0byBkZWJoZWxwZXIgKEZpeGVzOkJ1ZyMxNjMwNykuCisgICogVXBkYXRlZCBzdGFuZGFyZHMgdG8gMi4zLjAuMQorICAqIENoYW5nZWQgbWFpbnRhaW5lcidzIG1haWwgYWRkcmVzcy4KKyAgKiBBZGRlZCBjb25mbGljdHMgd2l0aCBvbGQgdmVyc2lvbnMgb2YgZHVtcCBhbmQgcXVvdGEuCisgICogQWRkZWQgaHRtbC1jb252ZXJ0ZWQgdGV4aSBkb2NzIGZvciBsaWJzLCB3aXRoIG1lbnUoZHd3dykgc3VwcG9ydC4KKyAgKiBBZGRlZCBmaW5kc3VwZXIuOCBsaW5rIHRvIHVuZG9jdW1lbnRlZC4KKyAgKiBDaGFuZ2VkIHZlcnNpb24gbnVtYmVyIG9mIGxpYiBwYWNrYWdlcyB0byByZWZsZWN0IHRoZSBsaWIgdmVyc2lvbnMuCisgICogTW92ZWQgbGlic3MgaW50byBpdHMgb3duIHBhY2thZ2VzOyBhZGRlZCBta19jbWRzIHNjcmlwdCBhbmQKKyAgICBzdXBwb3J0IGZpbGVzIGZvciBsaWJzcyBkZXZlbG9wbWVudCAoRml4ZXM6QnVnIzE3MjMzKS4KKyAgKiBBZGRlZCBSRUFETUUuRGViaWFuIGZpbGUgZG9jdW1lbnRpbmcgYWxsIHRob3NlIGRlcGVuZGVuY3kgc3R1ZmYuCisgICogSW5jbHVkZWQgZXhhbXBsZSBlcnJvciB0YWJsZXMgZnJvbSBsaWJleHQyZnMgYW5kIGxpYnNzIGluCisgICAgY29tZXJyLWRldi4KKyAgKiBJbmNsdWRlZCBleGFtcGxlIGNvbW1hbmQgdGFibGVzIGZyb20gZGVidWdmcyBpbiBzcy1kZXYuCisgICogQWRkZWQgc2VjdGlvbi9wcmlvcml0eSBmaWxlcyBpbiBwYWNrYWdlcyAoLWlzcCkuCisgICogQ2hhbmdlZCBuYW1lcy9yZWxhdGlvbnMgZm9yIGRvYyBkaXJzIHRvIGNvbXBseSB3aXRoIHBvbGljeS4KKyAgKiBSZW1vdmVkIGNhbGwgdG8gbGRjb25maWcgZnJvbSBlMmZzcHJvZ3MucG9zdGluc3QuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+ICBUaHUsIDI5IEphbiAxOTk4IDE4OjEwOjAzICswMTAwCisKK2UyZnNwcm9ncyAoMS4xMC0xMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGRlZCBwYXRjaCBmcm9tIE1pY2hhZWwgQWxhbiBEb3JtYW4gZm9yIGNvbXBpbGF0aW9uIG9uIGFscGhhLUxpbnV4CisgICAgKENsb3NlczpCdWcjMTU1OTYpLgorICAqIEFkZGVkICctZnNpZ25lZC1jaGFyJyB0byBDT1BUUyB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBwcGMtTGludXgKKyAgICAoQ2xvc2VzOkJ1ZyMxNTk3NikuCisgICogU3VwcHJlc3NlZCBFc3NlbnRpYWwgZmxhZyBvbiBsaWJzLCBhcyB3ZWxsIGFzIHVzZWxlc3MgUmVwbGFjZXMKKyAgICAoQ2xvc2VzOiBCdWcjMTY0ODApLgorICAqIFN1cHByZXNzZWQgcmVmZXJlbmNlIHRvIG9ic29sZXRlIHBhY2thZ2UgYGUyZnNwcm9nc2cnIGluIGNvbnRyb2wKKyAgICBpbmZvLCBidXQgQ29uZmxpY3RzIGZvciBzZWN1cml0eSAoQ2xvc2VzOkJ1ZyMxNjc5MSkuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQHVuaXYtbWx2LmZyPiAgV2VkLCAgNyBKYW4gMTk5OCAyMjozNTowOCArMDEwMAorCitlMmZzcHJvZ3MgKDEuMTAtOSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXhlZCBjb21lcnIyZy5zaGxpYnMgdG8gcmVmbGVjdCBwYWNrYWdlLW5hbWUgY2hhbmdlLgorICAqIEZpeGVkIHByb2JsZW0gd2l0aCBzcyBpbmNsdWRlIGZpbGVzIGJlaW5nIHJlbW92ZWQgZnJvbSAvdXNyIG9uIG1ha2UKKyAgICBpbnN0YWxsIChpbmRlZWQgZml4ZWQgaW4gMS4xMC04KS4KKyAgKiBBZGRlZCBjaGFuZ2Vsb2cgZmlsZSB0byBjb21lcnIyZyBwYWNrYWdlIChpbmRlZWQgZml4ZWQgaW4gMS4xMC04KS4KKyAgKiBDb3JyZWN0ZWQgbGluayBmcm9tIGZsdXNoYi44IHRvIHVuZG9jdW1lbnRlZCAoQ2xvc2VzOkJ1ZyMxNTMzNSxCdWcjMTU2NjAsQnVnIzE1Njc1KS4KKyAgKiBBZGRlZCAvc2Jpbi9maW5kc3VwZXIgKENsb3NlczpCdWcjMTUyMjQpLgorICAqIEZpeGVkIC91c3IvYmluL2NvbXBpbGVfZXQgc2NyaXB0IChDbG9zZXM6QnVnIzE1NDg3KS4KKyAgKiBJbmNsdWRlZCBhd2sgc2NyaXB0cyBpbiAvdXNyL3NoYXJlL2NvbWVyciwgZm9yIHVzZSBieSBjb21waWxlX2V0LgorICAqIENoYW5nZWQgYmFjayB0aGUgbmFtZSBmcm9tICJlMmZzcHJvZ3NnIiB0byAiZTJmc3Byb2dzIiB0byBnZXQgYmV0dGVyCisgICAgZGVwZW5kZW5jaWVzLgorICAqIFN0cmlwIGxpYnJhcmllcyAoQ2xvc2VzOkJ1ZyMxNTY2NykuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQHVuaXYtbWx2LmZyPiAgVHVlLCAgOSBEZWMgMTk5NyAyMjo1Mjo0MiArMDEwMAorCitlMmZzcHJvZ3MgKDEuMTAtOCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGRlZCBsYXRlc3QgcGF0Y2ggZnJvbSBUZWQgZm9yIGF1dG9kZXRlY3Rpb24gb2YgbGxzZWVrKCkgcHJvdG8uCisgICogU3dpdGNoZWQgdG8gbGliYzYsIHdpdGhvdXQgbGliYzUgY29tcGF0aWJpbGl0eSAoeWV0ID8pLgorICAqIFR1cm5lZCBQcmUtRGVwZW5kcyBpbnRvIERlcGVuZHMgdG8gYWxsb3cgaW5zdGFsbGF0aW9uLiBEaXJ0eQorICAgIHRob3VnaC4gQnV0IHdoYXQgd2VyZSBQcmUtRGVwZW5kcyBmb3IgYW55d2F5ID8KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AdW5pdi1tbHYuZnI+ICBTdW4sIDIzIE5vdiAxOTk3IDIzOjAzOjAyICswMTAwCisKK2UyZnNwcm9ncyAoMS4xMC03KSB1bnN0YWJsZTsgdXJnZW5jeT1ISUdICisKKyAgKiBUdXJuZWQgIiNpZiAoX19HTElCQ19fID09IDIpIiBpbnRvICIjaWYgMSIgdG8gdHVybiBhcm91bmQgbWlzc2luZyBsbHNlZWsoKQorICAgIHByb3RvdHlwZSBpbiBsaWJjXzUuNC4zMy01IGFzIHdlbGwgYXMgbGliYzYuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQHVuaXYtbWx2LmZyPiAgVHVlLCAyMSBPY3QgMTk5NyAxMjo1MzoyNyArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTAtNikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBPZmZpY2lhbCBsaWJjNiBwYXRjaGVzIGZyb20gVGVkLgorICAqIENvbnZlcnRlZCB0byBkZWJzdGQgLSBsZXQgaXQgZG8gdGhlIHN0cmlwcGluZyBzdHVmZi4KKyAgKiBTZXBhcmF0ZWQgbGliY29tZXJyIGludG8gYSBzdGFuZGFsb25lIGxpYiAtIGluY2x1ZGVzIGZ1bGwgZG9jIGFuZCB0b29scy4KKyAgKiBTZXBhcmF0ZWQgZGV2ZWxvcG1lbnQgZmlsZXMgaW50byBlMmZzbGlicy1kZXYsIHdoaWNoIFByb3ZpZGVzIHRoZSA0IG90aGVyCisgICAgLWRldiBwYWNrYWdlcy4KKyAgKiBOb3cgUHJvdmlkZXMgdGhlIDQgb3RoZXIgbGliIHBhY2thZ2VzLCB0byBtYWtlIGl0IHBvc3NpYmxlIG5vdCB0byBkZXBlbmQKKyAgICB1cG9uIGUyZnNwcm9ncyBpdHNlbGYuIFRoZXNlIGxpYnMgV0lMTCBiZSB0YWtlbiBvdXQgb2YgInByb2dzIiBpbiB0aGUKKyAgICBuZXh0IHJlbGVhc2UuCisKKyAtLSBZYW5uIERpcnNvbiA8ZGlyc29uQHVuaXYtbWx2LmZyPiAgV2VkLCAyNCBTZXAgMTk5NyAxMDo0NjowMCArMDIwMAorCitlMmZzcHJvZ3MgKDEuMTAtNS4xKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisKKyAgKiBBcHBsaWVkIHBhdGNoIGZyb20gVGVkIGZvciBsaWJjNiBjb21wYXRpYmlsaXR5LCBmb3IgdGVzdCBwdXJwb3NlLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkB1bml2LW1sdi5mcj4gIFRodSwgMTEgU2VwIDE5OTcgMDk6MDk6NDIgKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTUpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogU3dpdGNoZWQgYmFjayB0byBsaWJjNSBiZWNhdXNlIG9mIHBvc3NpYmxlIGJ1ZyBpbiBsaWJjNi0yLjAuNC1wcm92aWRlZAorICAgIGxsc2VlaygpIGNhdXNpbmcgcHJvYmxlbSB3aXRoIHBhcnRpdGlvbnMgPiAyR2IuCisgICogU3dpdGNoZWQgYmFjayB0byBsaWJjLXByb3ZpZGVkIGxsc2VlaygpLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkB1bml2LW1sdi5mcj4gIFR1ZSwgIDUgQXVnIDE5OTcgMTY6NTQ6NDAgKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTQuMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBNYWtlIHVzZSBvZiBzaGlwcGVkIGxsc2VlayBpbnN0ZWFkIG9mIGdsaWJjJ3Mgd2hpY2ggc2VlbXMgYnVnZ3kKKyAgICBbdW5yZWxlYXNlZCAtIGNvdWxkIG5vdCBjb21waWxlIGR1ZSB0byBwb3NzaWJsZSBnY2MgYnVnXS4KKyAgKiBDb3JyZWN0ZWQgY29tcGlsZXItb3B0aW9ucyBoYW5kbGluZyBpbiBkZWJpYW4vcnVsZXMgKHVzZSBDQ09QVFMgaW5zdGVhZAorICAgIG9mIENGTEFHUyB3aGljaCBpcyBtZXNzZWQgd2l0aCBpbiBjb25maWd1cmUuaW4pLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkB1bml2LW1sdi5mcj4gIE1vbiwgMjggSnVsIDE5OTcgMTk6NDc6MDIgKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogU3dpdGNoZWQgdG8gbGliYzYuCisgICogQWRkZWQgY2FsbHMgdG8gdXBkYXRlLWluZm8gaW4gcG9zdGlucy9wcmVybS4KKyAgKiBNaXNjIGNoYW5nZXMgdG8gZGViaWFuL3J1bGVzOyBzb21lIGNsZWFudXAgaW4gTWFrZWZpbGVzLgorCisgLS0gWWFubiBEaXJzb24gPGRpcnNvbkB1bml2LW1sdi5mcj4gIFRodSwgMTAgSnVsIDE5OTcgMTk6NDI6NTQgKzAyMDAKKworZTJmc3Byb2dzICgxLjEwLTMpIHN0YWJsZSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyBtYWludGFpbmVyIChjbG9zZWQgbWFueSBvYnNvbGV0ZSBidWctcmVwb3J0cykuCisgICogdXBkYXRlZCAiY29weXJpZ2h0IiB0byBzaG93IG5ldyBsb2NhdGlvbiBvbiB0c3gtMTEuCisgICogc3RhcnRlZCBkZWJpYW4vcnVsZXMgY2xlYW51cCwgdG93YXJkcyBuZXcgcG9saWN5IGNvbmZvcm1hbmNlLgorICAqIEFkZGVkIGZsdXNoYi44IGxpbmsgdG8gdW5kb2N1bWVudGVkLjcgKGJ1ZyAjODY0NCkuCisgICogQWRkZWQge2ZzY2ssbWtmc30uZXh0Mi44IGxpbmtzIHRvIGV4aXN0aW5nIG1hbnBhZ2VzIChidWdzICM1NTk4LAorICAgICM2Mjg2KS4KKworIC0tIFlhbm4gRGlyc29uIDxkaXJzb25AdW5pdi1tbHYuZnI+ICBXZWQsIDI1IEp1biAxOTk3IDE0OjU5OjU4ICswMjAwCisKK2UyZnNwcm9ncyAoMS4xMC0yKSBmcm96ZW4gdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGQgJ2xkY29uZmlnJyB0byBwb3N0aW5zdCAoc2hvdWxkIGZpeCAjOTAyMCkuCisgICogRGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9IIG9uIGFscGhhL2dsaWJjLgorCisgLS0gS2xlZSBEaWVuZXMgPGtsZWVAZGViaWFuLm9yZz4gIFR1ZSwgMjkgQXByIDE5OTcgMTc6MjQ6MTIgLTA0MDAKKworZTJmc3Byb2dzICgxLjEwLTEpIGZyb3plbiB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIFVwc3RyZWFtIGJ1Zy1maXggcmVsZWFzZS4KKworIC0tIEtsZWUgRGllbmVzIDxrbGVlQGRlYmlhbi5vcmc+ICBUaHUsIDI0IEFwciAxOTk3IDE0OjU0OjEyIC0wNDAwCisKK2UyZnNwcm9ncyAoMS4wOS0xKSBmcm96ZW47IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBVcHN0cmVhbSBidWctZml4IHJlbGVhc2UuCisKKyAtLSBLbGVlIERpZW5lcyA8a2xlZUBkZWJpYW4ub3JnPiAgVGh1LCAyNCBBcHIgMTk5NyAxNDo1NDoxMiAtMDQwMAorCitlMmZzcHJvZ3MgKDEuMDYtNCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBBZGRlZCBlbXB0eSBlbnRyaWVzIHRvIHNobGlicy5sb2NhbCwgdG8gbmVhdGx5IHNvbHZlIHRoZSBwcmUtZGVwZW5kcworICAgIHByb2JsZW0sIGFzIHN1Z2dlc3RlZCBieSBJYW4gSmFja3Nvbi4KKworIC0tIE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+ICBXZWQsIDEzIE5vdiAxOTk2IDA4OjEzOjI4ICswMDAwCisKK2UyZnNwcm9ncyAoMS4wNi0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEhhcmQgY29kZWQgUHJlLURlcGVuZHMgbGluZSwgYXMgYSB0ZW1wb3JhcnkgZml4IGZvciB0aGUgcHJlLWRlcGVuZHMKKyAgICBjb250YWlucyBlMmZzcHJvZ3MgcHJvYmxlbS4KKworIC0tIE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+ICBTYXQsIDkgTm92IDE5OTYgMTI6NTc6NDQgKzAwMDAKKworZTJmc3Byb2dzICgxLjA2LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHBhY2thZ2luZyBmb3JtYXQKKyAgKiBGaXhlcyBwYWNrYWdpbmcgYnVncyAtCisgICAgICBGaWxlcyBpbiAvbGliIGFyZSBub3cgc3RyaXBwZWQgb2YgYWxsIHVubmVlZGVkIHN5bWJvbHMgKEJ1ZyM1MTIxKQorICAgICAgQ2FsbHMgdG8gbGRjb25maWcgaW4gbWFpbnRhaW5lciBzY3JpcHRzIGhhdmUgYmVlbiByZW1vdmVkIChCdWcjNDI0NykKKworIC0tIE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+ICBUdWUsIDUgTm92IDE5OTYgMjE6MTQ6NTQgKzAwMDAKKworZTJmc3Byb2dzICgxLjAxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogdXBncmFkZWQgdG8gbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24sIHRvIDEuMDYgZnJvbSAxLjA1CisgICogdXBncmFkZWQgdG8gbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24sIHRvIDEuMDUgZnJvbSAxLjA0CisgICogZ3ppcCBtYW5wYWdlcworICAqIG1pbm9yIGNoYW5nZXMgdG8gZGViaWFuLnJ1bGVzCisKKyAtLSBNaWNoYWVsIE1lc2tlcyA8bWVza2VzQGRlYmlhbi5vcmc+ICBGcmksIDE4IE9jdCAxOTk2IDAwOjAwOjAwICswMDAwCisKK2UyZnNwcm9ncyAoMS4wNC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiB1cGdyYWRlZCB0byBsYXRlc3QgdXBzdHJlYW0gdmVyc2lvbiwgdG8gMS4wNCBmcm9tIDEuMDIKKyAgICogYW5vdGhlciB0aWR5LXVwIG9mIGRlYmlhbi5ydWxlcworICAgKiBzZWN0aW9uIGFuZCBwcmlvcml0eSBhZGRlZCB0byBkZWJpYW4uY29udHJvbCwgc2luY2UgdGhpcyBpcyBhbgorICAgICBlc3NlbnRpYWwgYmFzZSBwYWNrYWdlLgorCisgLS0gTWljaGFlbCBOb253ZWlsZXIgPG1ybjIwQGNhbS5hYy51az4gIFN1biwgMjMgSnVuIDE5OTYgMDA6MDA6MDAgKzAwMDAKKworZTJmc3Byb2dzICgxLjAyLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogdXBncmFkZWQgdG8gbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24sIHRvIDEuMDIgZnJvbSAxLjAxCisgICogY29waWVkICJjb25maWd1cmUiIHVzcl9wcmVmaXggY2hhbmdlIChzZWUgYmVsb3cpLCBpbnRvIGNvbmZpZ3VyZS5pbgorICAqIHVwZGF0ZWQgZGViaWFuLmNvbnRyb2wgZmlsZSwgYWRkZWQgUHJlLURlcGVuZHMgZmllbGQKKyAgICBjcmVhdGVkIHByZWluc3Qgc2NyaXB0IHRvIGNoZWNrIGRwa2cgLS1hc3NlcnQtcHJlZGVwZW5kcworICAgIHRpZHllZCBhbmQgZml4ZWQgZGViaWFuLnJ1bGVzCisgICogc2V0IGUyZnNjayB0byBsaW5rIHNoYXJlZCwgYXMgc3VnZ2VzdGVkIGJ5IEJydWNlIFBlcmVucyBpbiBCdWcjMjMzMgorICAqIGNvcnJlY3RlZCBwcm9ibGVtIGluIGUyZnNjayBlcnJvciBtZXNzYWdlLCBCdWcjMjUzNAorICAqIGFkZGVkIEFyY2hpdGVjdHVyZSBmaWVsZAorICAqIHZlcnkgbWlub3IgY29ycmVjdGlvbiB0byBleHBlY3RlZCBvdXRwdXQgb2YgYSBidWlsZCB0aW1lIHRlc3QKKworIC0tIE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+ICBUdWUsIDUgTWFyIDE5OTYgMDA6MDA6MDAgKzAwMDAKKworZTJmc3Byb2dzICgxLjAxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogcmVtb3ZlZCBkZWJ1Z2dpbmcgc3ltYm9scyBmcm9tIGxpYnMgYW5kIGVuYWJsZWQgbW9yZSBvcHRpbWl6YXRpb24KKyAgICBhcyBzdWdnZXN0ZWQgYnkgUm9sZiBSb3NzaXVzCisgICogYWxzbyByZW1vdmVkIHRoZSAvdmFyL2NhdG1hbiBwYWdlcworICAqIGNoYW5nZWQgdG8gZWxmIGNvbXBpbGF0aW9uCisKKyAtLSBBbmRyZXcgRC4gRmVybmFuZGVzIDxhZGZlcm5hbkBjbmQubWNnaWxsLmNhPiAgTW9uLCAyMCBOb3YgMTk5NSAwMDowMDowMCArMDAwMAorCitlMmZzcHJvZ3MgKDAuNWItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBVcGdyYWRlZCB0byBsYXRlc3QgdmVyc2lvbiwgdG8gMS4wMSBmcm9tIDAuNWIuCisgICogY2hhbmdlZCB0aGUgaW5zdGFsbGF0aW9uIGdyb3VwcyBmcm9tIGJpbiB0byByb290IGluIE1DT05GSUcuaW4KKyAgKiBjaGFuZ2VkIGNvbmZpZ3VyZSB0byBzZXQgdXNyX3ByZWZpeD0iXCR7cHJlZml4fS91c3IiCisgICogbW92ZWQgdGhlIGNhdCBwYWdlcyB0byAvdmFyL2NhdG1hbiBpbiBNQ09ORklHLmluCisKKyAtLSBBbmRyZXcgRC4gRmVybmFuZGVzIDxhZGZlcm5hbkBjbmQubWNnaWxsLmNhPiAgU2F0LCA3IE9jdCAxOTk1IDAwOjAwOjAwICswMDAwCisKK2UyZnNwcm9ncyAoMC41Yi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE1hZGUgImZzY2sgLXQgPGZpbGVzeXN0ZW0tdHlwZT4gPGRldmljZT4iIHdvcmsgY29ycmVjdGx5LiBGb3JtZXJseQorICAgIHRoZSAtdCBhcmd1bWVudCB3YXMgb3ZlcnJpZGVuIGJ5IHRoZSBmaWxlc3lzdGVtIHR5cGUgbGlzdGVkIGZvciB0aGUKKyAgICBkZXZpY2UgaW4gL2V0Yy9mc3RhYi4KKyAgKiBhZGRlZCBEZWJpYW4gR05VL0xpbnV4IHBhY2thZ2UgbWFpbnRlbmFuY2Ugc3lzdGVtIGZpbGVzCisKKyAtLSBCcnVjZSBQZXJlbnMgPEJydWNlQFBpeGFyLmNvbT4gIFRodSwgMyBBdWcgMTk5NSAwMDowMDowMCArMDAwMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9jb21lcnItZGV2LmRvYy1iYXNlIGIvZTJmc3Byb2dzL2RlYmlhbi9jb21lcnItZGV2LmRvYy1iYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2ViNzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2NvbWVyci1kZXYuZG9jLWJhc2UKQEAgLTAsMCArMSwxMiBAQAorRG9jdW1lbnQ6IGNvbWVyci1tYW51YWwKK1RpdGxlOiBUaGUgY29tX2VyciBsaWJyYXJ5CitBdXRob3I6IEtlbiBSYWVidXJuIGFuZCBCaWxsIFNvbW1lcmZlbGQKK0Fic3RyYWN0OiBBIGxpYnJhcnksIGFuZCBhc3NvY2lhdGVkIHV0aWxpdGllcywKKyB3aGljaCBhbGxvdyBhIG1vcmUgdW5pZm9ybSB3YXkgZm9yIGxpYnJhcmllcworIHRvIHJldHVybiBlcnJvcnMgdG8gdGhlaXIgY2FsbGVycywgYW5kIGZvciBwcm9ncmFtcworIHRvIGRlc2NyaWJlIGVycm9ycyBhbmQgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyB0byB0aGVpciB1c2Vycy4KK1NlY3Rpb246IFByb2dyYW1taW5nCisKK0Zvcm1hdDogSFRNTAorSW5kZXg6IC91c3Ivc2hhcmUvZG9jL2NvbWVyci1kZXYvaHRtbC1pbmZvL2NvbV9lcnIuaHRtbAorRmlsZXM6IC91c3Ivc2hhcmUvZG9jL2NvbWVyci1kZXYvaHRtbC1pbmZvLyouaHRtbApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9jb21lcnItZGV2LmV4YW1wbGVzIGIvZTJmc3Byb2dzL2RlYmlhbi9jb21lcnItZGV2LmV4YW1wbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjIwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2NvbWVyci1kZXYuZXhhbXBsZXMKQEAgLTAsMCArMSwyIEBACitsaWIvc3Mvc3NfZXJyLmV0CitkZWJpYW4vQlVJTEQtU1REL2xpYi9leHQyZnMvZXh0Ml9lcnIuZXQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vY29tZXJyLWRldi5maWxlcy5pbiBiL2UyZnNwcm9ncy9kZWJpYW4vY29tZXJyLWRldi5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I4YjBlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9jb21lcnItZGV2LmZpbGVzLmluCkBAIC0wLDAgKzEsOSBAQAordXNyL2xpYi8qL2xpYmNvbV9lcnIuYQordXNyL2xpYi8qL2xpYmNvbV9lcnIuc28KK3Vzci9pbmNsdWRlL2V0LyoKK3Vzci9pbmNsdWRlL2NvbV9lcnIuaAordXNyL3NoYXJlL21hbi9tYW4xL2NvbXBpbGVfZXQqCit1c3Ivc2hhcmUvbWFuL21hbjMvY29tX2Vyci4zKgordXNyL2Jpbi9jb21waWxlX2V0Cit1c3Ivc2hhcmUvZXQvKgordXNyL2xpYi8qL3BrZ2NvbmZpZy9jb21fZXJyLnBjCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2NvbXBhdCBiL2UyZnNwcm9ncy9kZWJpYW4vY29tcGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGYwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2NvbXBhdApAQCAtMCwwICsxIEBACis3CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2NvbnRyb2wuaW4gYi9lMmZzcHJvZ3MvZGViaWFuL2NvbnRyb2wuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiN2NkOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vY29udHJvbC5pbgpAQCAtMCwwICsxLDMzMCBAQAorZGVmaW5lKE1VTFRJQVJDSF9IRUFERVJTLGlmZGVmKGBET19NVUxUSUFSQ0gnLAorTXVsdGktQXJjaDogc2FtZQorUHJlLURlcGVuZHM6ICR7bWlzYzpQcmUtRGVwZW5kc30sUkVNT1ZFX01FKSlkbmwKK2RlZmluZShVVElMX0xJTlVYX05HX0RFRklORVMsCitpZmRlZihgVVRJTF9MSU5VWF9ORycsIGBgbGliYmxraWQtZGV2ICg+PSAyLjE2KSwgdXVpZC1kZXYgKD49IDIuMTYpLCcnKSlkbmwKK2RlZmluZShESUVUTElCQ19ERUZJTkVTLAoraWZkZWYoYERJRVRMSUJDJywgYGBkaWV0bGliYy1kZXYgKD4+IDAuMzApIFthbHBoYSBhbWQ2NCBhcm0gaHBwYSBpMzg2IGlhNjQgcG93ZXJwYyBwcGM2NCBzMzkwIHNwYXJjXSwnJykpZG5sCitTb3VyY2U6IGUyZnNwcm9ncworU2VjdGlvbjogYWRtaW4KK1ByaW9yaXR5OiByZXF1aXJlZAorTWFpbnRhaW5lcjogVGhlb2RvcmUgWS4gVHMnbyA8dHl0c29AbWl0LmVkdT4KK0J1aWxkLURlcGVuZHM6IGdldHRleHQsIHRleGluZm8sIHBrZy1jb25maWcsIERJRVRMSUJDX0RFRklORVMgZ2NjLW11bHRpbGliIFttaXBzIG1pcHNlbF0sIGRlYmhlbHBlciAoPj0gNy4wKSwgVVRJTF9MSU5VWF9OR19ERUZJTkVTIG00CitTdGFuZGFyZHMtVmVyc2lvbjogMy45LjUKK0hvbWVwYWdlOiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCitpZmRlZihgRTJGU0NLX1NUQVRJQycsYGAKK1BhY2thZ2U6IGUyZnNjay1zdGF0aWMKK1ByaW9yaXR5OiBvcHRpb25hbAorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorUmVjb21tZW5kczogc2FzaCB8IGJhc2gtc3RhdGljIHwgenNoLXN0YXRpYyB8IGJ1c3lib3gtc3RhdGljIHwgenNoMzAtc3RhdGljCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHN0YXRpY2FsbHktbGlua2VkIHZlcnNpb24gb2YgdGhlIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0gY2hlY2tlcgorIFRoaXMgbWF5IGJlIG9mIHNvbWUgaGVscCB0byB5b3UgaWYgeW91ciBmaWxlc3lzdGVtIGdldHMgY29ycnVwdGVkIGVub3VnaAorIHRvIGJyZWFrIHRoZSBzaGFyZWQgbGlicmFyaWVzIHVzZWQgYnkgdGhlIGR5bmFtaWNhbGx5IGxpbmtlZCBjaGVja2VyLgorIC4KKyBUaGlzIGJpbmFyeSB0YWtlcyBtdWNoIG1vcmUgc3BhY2UgdGhhbiBpdHMgZHluYW1pYyBjb3VudGVycGFydCBsb2NhdGVkCisgaW4gZTJmc3Byb2dzLCB0aG91Z2guCisgLgorIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGEgc3RhdGljYWxseS1saW5rZWQgc2hlbGwgYXMgd2VsbCwgdG8gYmUgYWJsZQorIHRvIHJ1biB0aGlzIHByb2dyYW0gaWYgc29tZXRoaW5nIGxpa2UgeW91ciBDIGxpYnJhcnkgZ2V0cyBjb3JydXB0ZWQuCisnJylkbmwKKworUGFja2FnZTogbGliY29tZXJyMgorU2VjdGlvbjogbGlicworUHJvdmlkZXM6IGxpYmNvbWVyci1rdGgtY29tcGF0CitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBjb21tb24gZXJyb3IgZGVzY3JpcHRpb24gbGlicmFyeQorIGxpYmNvbWVyciBpcyBhbiBhdHRlbXB0IHRvIHByZXNlbnQgYSBjb21tb24gZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvCisgbWFuaXB1bGF0ZSB0aGUgbW9zdCBjb21tb24gZm9ybSBvZiBlcnJvciBjb2RlIGluIGEgZmFzaGlvbiB0aGF0IGRvZXMgbm90CisgaGF2ZSB0aGUgcHJvYmxlbXMgaWRlbnRpZmllZCB3aXRoIG1lY2hhbmlzbXMgY29tbW9ubHkgaW4gdXNlLgorCitQYWNrYWdlOiBjb21lcnItZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGliY29tZXJyMiAoPSAke21haW5CaW5hcnl9KSwgJHttaXNjOkRlcGVuZHN9CitTdWdnZXN0czogZG9jLWJhc2UKK1JlcGxhY2VzOiBlMmZzbGlicy1kZXYgKDw8IDEuMzMtMiksIGxpYmtyYjUtZGV2ICg8PCAxLjMpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGNvbW1vbiBlcnJvciBkZXNjcmlwdGlvbiBsaWJyYXJ5IC0gaGVhZGVycyBhbmQgc3RhdGljIGxpYnJhcmllcworIGxpYmNvbV9lcnIgaXMgYW4gYXR0ZW1wdCB0byBwcmVzZW50IGEgY29tbW9uIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbSB0bworIG1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZSBpbiBhIGZhc2hpb24gdGhhdCBkb2VzIG5vdAorIGhhdmUgdGhlIHByb2JsZW1zIGlkZW50aWZpZWQgd2l0aCBtZWNoYW5pc21zIGNvbW1vbmx5IGluIHVzZS4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgdGhlIGNvbV9lcnIgbGlicmFyeS4KKworUGFja2FnZTogbGlic3MyCitTZWN0aW9uOiBsaWJzCitEZXBlbmRzOiBsaWJjb21lcnIyLCAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgbGlicmFyeQorIGxpYnNzIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgcGFyc2VyIHdoaWNoIHdpbGwKKyBhY2NlcHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgcGFyc2UgdGhlIGNvbW1hbmQgaW50byBhbiBhcmd2IGFyZ3VtZW50CisgdmVjdG9yLCBhbmQgdGhlbiBkaXNwYXRjaCBpdCB0byBhIGhhbmRsZXIgZnVuY3Rpb24uCisgLiAKKyBJdCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSB0aGUgTXVsdGljcyBTdWJTeXN0ZW0gbGlicmFyeS4KKworUGFja2FnZTogc3MtZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGlic3MyICg9ICR7bWFpbkJpbmFyeX0pLCBjb21lcnItZGV2LCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogY29tbWFuZC1saW5lIGludGVyZmFjZSBwYXJzaW5nIGxpYnJhcnkgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIGEgdG9vbCB0aGF0IHBhcnNlcyBhIGNvbW1hbmQgdGFibGUgdG8gZ2VuZXJhdGUKKyBhIHNpbXBsZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNlciwgdGhlIGluY2x1ZGUgZmlsZXMgbmVlZGVkIHRvCisgY29tcGlsZSBhbmQgdXNlIGl0LCBhbmQgdGhlIHN0YXRpYyBsaWJzLgorIC4gCisgSXQgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgdGhlIE11bHRpY3MgU3ViU3lzdGVtIGxpYnJhcnkuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBzcyBsaWJyYXJ5LgoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCxgYAorUGFja2FnZTogbGlidXVpZDEKK1NlY3Rpb246IGxpYnMKK0RlcGVuZHM6IHBhc3N3ZCwgJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorUmVjb21tZW5kczogdXVpZC1ydW50aW1lCitSZXBsYWNlczogZTJmc3Byb2dzICg8PCAxLjM0LTEpCitBcmNoaXRlY3R1cmU6IGFueQorTVVMVElBUkNIX0hFQURFUlMKK0Rlc2NyaXB0aW9uOiBVbml2ZXJzYWxseSBVbmlxdWUgSUQgbGlicmFyeQorIFRoZSBsaWJ1dWlkIGxpYnJhcnkgZ2VuZXJhdGVzIGFuZCBwYXJzZXMgMTI4LWJpdCB1bml2ZXJzYWxseSB1bmlxdWUKKyBpZHMgKFVVSURzKS4gIEEgVVVJRCBpcyBhbiBpZGVudGlmaWVyIHRoYXQgaXMgdW5pcXVlIGFjcm9zcyBib3RoCisgc3BhY2UgYW5kIHRpbWUsIHdpdGggcmVzcGVjdCB0byB0aGUgc3BhY2Ugb2YgYWxsIFVVSURzLiAgQSBVVUlEIGNhbgorIGJlIHVzZWQgZm9yIG11bHRpcGxlIHB1cnBvc2VzLCBmcm9tIHRhZ2dpbmcgb2JqZWN0cyB3aXRoIGFuIGV4dHJlbWVseQorIHNob3J0IGxpZmV0aW1lLCB0byByZWxpYWJseSBpZGVudGlmeWluZyB2ZXJ5IHBlcnNpc3RlbnQgb2JqZWN0cworIGFjcm9zcyBhIG5ldHdvcmsuCisgLgorIFNlZSBSRkMgNDEyMiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIAorCitQYWNrYWdlOiB1dWlkLXJ1bnRpbWUKK1NlY3Rpb246IGxpYnMKK1ByaW9yaXR5OiBvcHRpb25hbAorRGVwZW5kczogcGFzc3dkLCBsaWJ1dWlkMSAoPj4gMS40MC4zLTEpLCAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9CitSZXBsYWNlczogZTJmc3Byb2dzICg8PSAxLjQwLjMtMXVidW50dTEpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHJ1bnRpbWUgY29tcG9uZW50cyBmb3IgdGhlIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRCBsaWJyYXJ5CisgVGhlIGxpYnV1aWQgbGlicmFyeSBnZW5lcmF0ZXMgYW5kIHBhcnNlcyAxMjgtYml0IHVuaXZlcnNhbGx5IHVuaXF1ZQorIGlkcyAoVVVJRHMpLiAgQSBVVUlEIGlzIGFuIGlkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYWNyb3NzIGJvdGgKKyBzcGFjZSBhbmQgdGltZSwgd2l0aCByZXNwZWN0IHRvIHRoZSBzcGFjZSBvZiBhbGwgVVVJRHMuICBBIFVVSUQgY2FuCisgYmUgdXNlZCBmb3IgbXVsdGlwbGUgcHVycG9zZXMsIGZyb20gdGFnZ2luZyBvYmplY3RzIHdpdGggYW4gZXh0cmVtZWx5Cisgc2hvcnQgbGlmZXRpbWUsIHRvIHJlbGlhYmx5IGlkZW50aWZ5aW5nIHZlcnkgcGVyc2lzdGVudCBvYmplY3RzCisgYWNyb3NzIGEgbmV0d29yay4KKyAuCisgU2VlIFJGQyA0MTIyIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgdXVpZGdlbiBwcm9ncmFtIGFuZCB0aGUgdXVpZGQgZGFlbW9uLgorIC4KKyBUaGUgdXVpZGQgZGFlbW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgVVVJRHMsIGVzcGVjaWFsbHkgdGltZS1iYXNlZAorIFVVSUTigJlzLCBpbiBhIHNlY3VyZSBhbmQgZ3VhcmFudGVlZC11bmlxdWUgZmFzaGlvbiwgZXZlbiBpbiB0aGUgZmFjZQorIG9mIGxhcmdlIG51bWJlcnMgb2YgdGhyZWFkcyB0cnlpbmcgdG8gZ3JhYiBVVUlE4oCZcyBydW5uaW5nIG9uCisgZGlmZmVyZW50IENQVeKAmXMuIEl0IGlzIHVzZWQgYnkgbGlidXVpZCBhcyB3ZWxsIGFzIHRoZSB1dWlkZ2VuCisgcHJvZ3JhbS4KKworUGFja2FnZTogbGlidXVpZDEtdWRlYgorWEMtUGFja2FnZS1UeXBlOiB1ZGViCitTZWN0aW9uOiBkZWJpYW4taW5zdGFsbGVyCitQcmlvcml0eTogb3B0aW9uYWwKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IHN0cmlwcGVkIGRvd24gdW5pdmVyc2FsbHkgdW5pcXVlIGlkIGxpYnJhcnksIGZvciBkZWJpYW4taW5zdGFsbGVyCisgbGlidXVpZCBnZW5lcmF0ZXMgYW5kIHBhcnNlcyAxMjgtYml0IHVuaXZlcnNhbGx5IHVuaXF1ZSBpZHMgKFVVSURzKS4KKyBTZWUgUkZDIDQxMjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgLgorIFRoaXMgaXMgYSBtaW5pbWFsIHBhY2thZ2UgZm9yIGRlYmlhbi1pbnN0YWxsZXIuCisKK1BhY2thZ2U6IHV1aWQtZGV2CitTZWN0aW9uOiBsaWJkZXZlbAorUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBsaWJjNi1kZXYgfCBsaWJjLWRldiwgbGlidXVpZDEgKD0gJHttYWluQmluYXJ5fSksICR7bWlzYzpEZXBlbmRzfQorUmVwbGFjZXM6IGUyZnNsaWJzLWRldiAoPDwgMS4xNSkKK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogdW5pdmVyc2FsbHkgdW5pcXVlIGlkIGxpYnJhcnkgLSBoZWFkZXJzIGFuZCBzdGF0aWMgbGlicmFyaWVzCisgbGlidXVpZCBnZW5lcmF0ZXMgYW5kIHBhcnNlcyAxMjgtYml0IHVuaXZlcnNhbGx5IHVuaXF1ZSBpZHMgKFVVSURzKS4KKyBTZWUgUkZDIDQxMjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSB1dWlkIGxpYnJhcnkuCisKK1BhY2thZ2U6IGxpYmJsa2lkMQorU2VjdGlvbjogbGlicworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBibG9jayBkZXZpY2UgaWQgbGlicmFyeQorIFRoZSBibGtpZCBsaWJyYXJ5IHdoaWNoIGFsbG93cyBzeXN0ZW0gcHJvZ3JhbXMgbGlrZSBmc2NrIGFuZCAKKyBtb3VudCB0byBxdWlja2x5IGFuZCBlYXNpbHkgZmluZCBibG9jayBkZXZpY2VzIGJ5IGZpbGVzeXN0ZW0gVVVJRCBhbmQgCisgTEFCRUwuICBUaGlzIGFsbG93cyBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgdG8gYXZvaWQgc3BlY2lmeWluZyAKKyBmaWxlc3lzdGVtcyBieSBoYXJkLWNvZGVkIGRldmljZSBuYW1lcywgYnV0IHZpYSBhIGxvZ2ljYWwgbmFtaW5nIAorIHN5c3RlbSBpbnN0ZWFkLgorCitQYWNrYWdlOiBsaWJibGtpZDEtdWRlYgorWEMtUGFja2FnZS1UeXBlOiB1ZGViCitTZWN0aW9uOiBkZWJpYW4taW5zdGFsbGVyCitQcmlvcml0eTogb3B0aW9uYWwKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogc3RyaXBwZWQgZG93biBibG9jayBkZXZpY2UgaWQgbGlicmFyeSwgZm9yIGRlYmlhbi1pbnN0YWxsZXIKKyBUaGUgYmxraWQgbGlicmFyeSB3aGljaCBhbGxvd3Mgc3lzdGVtIHByb2dyYW1zIGxpa2UgZnNjayBhbmQgCisgbW91bnQgdG8gcXVpY2tseSBhbmQgZWFzaWx5IGZpbmQgYmxvY2sgZGV2aWNlcyBieSBmaWxlc3lzdGVtIFVVSUQgYW5kIAorIExBQkVMLiAgVGhpcyBhbGxvd3Mgc3lzdGVtIGFkbWluaXN0cmF0b3JzIHRvIGF2b2lkIHNwZWNpZml5aW5nIAorIGZpbGVzeXN0ZW1zIGJ5IGhhcmQtY29kZWQgZGV2aWNlIG5hbWVzLCBidXQgdmlhIGEgbG9naWNhbCBuYW1pbmcgCisgc3lzdGVtIGluc3RlYWQuCisgLgorIFRoaXMgaXMgYSBtaW5pbWFsIHBhY2thZ2UgZm9yIGRlYmlhbi1pbnN0YWxsZXIuCisKK1BhY2thZ2U6IGxpYmJsa2lkLWRldgorU2VjdGlvbjogbGliZGV2ZWwKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGliYzYtZGV2IHwgbGliYy1kZXYsIGxpYmJsa2lkMSAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBibG9jayBkZXZpY2UgaWQgbGlicmFyeSAtIGhlYWRlcnMgYW5kIHN0YXRpYyBsaWJyYXJpZXMKKyBUaGUgYmxraWQgbGlicmFyeSB3aGljaCBhbGxvd3Mgc3lzdGVtIHByb2dyYW1zIGxpa2UgZnNjayBhbmQgCisgbW91bnQgdG8gcXVpY2tseSBhbmQgZWFzaWx5IGZpbmQgYmxvY2sgZGV2aWNlcyBieSBmaWxlc3lzdGVtIFVVSUQgYW5kIAorIExBQkVMLiAgVGhpcyBhbGxvd3Mgc3lzdGVtIGFkbWluaXN0cmF0b3JzIHRvIGF2b2lkIHNwZWNpZml5aW5nIAorIGZpbGVzeXN0ZW1zIGJ5IGhhcmQtY29kZWQgZGV2aWNlIG5hbWVzLCBidXQgdmlhIGEgbG9naWNhbCBuYW1pbmcgCisgc3lzdGVtIGluc3RlYWQuCisgLgorIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIHRoZSBibGtpZCBsaWJyYXJ5LgorJycpZG5sCisKK1BhY2thZ2U6IGUyZnNwcm9ncy11ZGViCitYQy1QYWNrYWdlLVR5cGU6IHVkZWIKK1NlY3Rpb246IGRlYmlhbi1pbnN0YWxsZXIKK1ByaW9yaXR5OiBvcHRpb25hbAorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBzdHJpcHBlZC1kb3duIHZlcnNpb25zIG9mIGUyZnNwcm9ncywgZm9yIGRlYmlhbi1pbnN0YWxsZXIKKyBUaGlzIHBhY2thZ2UgaXMgYW4gZTJmc3Byb2dzIHBhY2thZ2UgYnVpbHQgZm9yIGEgcmVkdWNlZCBzaXplLCBzbyB0aGF0CisgaXQgY2FuIGhlbHAgdG8gc2F2ZSBzcGFjZSBpbiBkZWJpYW4taW5zdGFsbGVyLgorIC4KKyBEb24ndCBhdHRlbXB0IHRvIGluc3RhbGwgdGhpcyBwYWNrYWdlLCBpdCBoYXMgbm8gc3VwcG9ydCBmb3IgYSBjb3VwbGUgb2YKKyBmZWF0dXJlcyB5b3Ugc3VyZWx5IHdhbnQuICBBbnl3YXkgaXQgc2hvdWxkIHJlZnVzZSB0byBpbnN0YWxsLgorCitQYWNrYWdlOiBlMmZzbGlicworU2VjdGlvbjogbGlicworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorUmVwbGFjZXM6IGUyZnNwcm9ncyAoPDwgMS4zNC0xKQorUHJvdmlkZXM6IGxpYmV4dDJmczIsIGxpYmUycDIKK0FyY2hpdGVjdHVyZTogYW55CitNVUxUSUFSQ0hfSEVBREVSUworRGVzY3JpcHRpb246IGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtIGxpYnJhcmllcworIFRoZSBleHQyLCBleHQzIGFuZCBleHQ0IGZpbGUgc3lzdGVtcyBhcmUgc3VjY2Vzc29ycyBvZiB0aGUgb3JpZ2luYWwgZXh0CisgKCJleHRlbmRlZCIpIGZpbGUgc3lzdGVtLiBUaGV5IGFyZSB0aGUgbWFpbiBmaWxlIHN5c3RlbSB0eXBlcyB1c2VkIGZvcgorIGhhcmQgZGlza3Mgb24gRGViaWFuIGFuZCBvdGhlciBMaW51eCBzeXN0ZW1zLgorIC4KKyBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGV4dDJmcyBhbmQgZTJwIGxpYnJhcmllcywgZm9yIHVzZXJzcGFjZSBzb2Z0d2FyZQorIHRoYXQgZGlyZWN0bHkgYWNjZXNzZXMgZXh0ZW5kZWQgZmlsZSBzeXN0ZW1zLiBQcm9ncmFtcyB0aGF0IHVzZSBsaWJleHQyZnMKKyBpbmNsdWRlIGUyZnNjaywgbWtlMmZzLCBhbmQgdHVuZTJmcy4gUHJvZ3JhbXMgdGhhdCB1c2UgbGliZTJwIGluY2x1ZGUKKyBkdW1wZTJmcywgY2hhdHRyLCBhbmQgbHNhdHRyLgorCitQYWNrYWdlOiBlMmZzbGlicy1kZXYKK1NlY3Rpb246IGxpYmRldmVsCitQcmlvcml0eTogZXh0cmEKK0RlcGVuZHM6IGxpYmM2LWRldiB8IGxpYmMtZGV2LCBjb21lcnItZGV2LCBlMmZzbGlicyAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorU3VnZ2VzdHM6IGRvYy1iYXNlCitQcm92aWRlczogZXh0MmZzLWRldiwgZTJwLWRldgorUmVwbGFjZXM6IGxpYmtyYjUtZGV2ICg8PCAxLjMpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtIGxpYnJhcmllcyAtIGhlYWRlcnMgYW5kIHN0YXRpYyBsaWJyYXJpZXMKKyBUaGUgZXh0MiwgZXh0MyBhbmQgZXh0NCBmaWxlIHN5c3RlbXMgYXJlIHN1Y2Nlc3NvcnMgb2YgdGhlIG9yaWdpbmFsIGV4dAorICgiZXh0ZW5kZWQiKSBmaWxlIHN5c3RlbS4gVGhleSBhcmUgdGhlIG1haW4gZmlsZSBzeXN0ZW0gdHlwZXMgdXNlZCBmb3IKKyBoYXJkIGRpc2tzIG9uIERlYmlhbiBhbmQgb3RoZXIgTGludXggc3lzdGVtcy4KKyAuCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgdGhlIGV4dDJmcyBhbmQgZTJwIAorIGxpYnJhcmllcy4KKworUGFja2FnZTogZTJmc3Byb2dzCitFc3NlbnRpYWw6IHllcworaWZkZWYoYFVUSUxfTElOVVhfTkcnLAorYGBQcmUtRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfSwgdXRpbC1saW51eCAoPj0gMi4xNX5yYzEtMSkKKycnLAorYGBQcmUtRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfQorJycpZG5sCitNdWx0aS1BcmNoOiBmb3JlaWduCitTdWdnZXN0czogZ3BhcnQsIHBhcnRlZCwgZTJmc2NrLXN0YXRpYworQ29uZmxpY3RzOiBkdW1wICg8PCAwLjRiNC00KSwgcXVvdGEgKDw8IDEuNTUtOC4xKSwgaW5pdHNjcmlwdHMgKDw8IDIuODUtNCksIHN5c3Zpbml0ICg8PCAyLjg1LTQpCitSZXBsYWNlczogaHVyZCAoPD0gMjAwNDAzMDEtMSksIGxpYmJsa2lkMSAoPDwgMS4zOCsxLjM5LVdJUC0yMDA1LjEyLjEwLTIpLCBsaWJ1dWlkMSAoPDwgMS4zOCsxLjM5LVdJUC0yMDA1LjEyLjEwLTIpCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtIHV0aWxpdGllcworIFRoZSBleHQyLCBleHQzIGFuZCBleHQ0IGZpbGUgc3lzdGVtcyBhcmUgc3VjY2Vzc29ycyBvZiB0aGUgb3JpZ2luYWwgZXh0CisgKCJleHRlbmRlZCIpIGZpbGUgc3lzdGVtLiBUaGV5IGFyZSB0aGUgbWFpbiBmaWxlIHN5c3RlbSB0eXBlcyB1c2VkIGZvcgorIGhhcmQgZGlza3Mgb24gRGViaWFuIGFuZCBvdGhlciBMaW51eCBzeXN0ZW1zLgorIC4KKyBUaGlzIHBhY2thZ2UgY29udGFpbnMgcHJvZ3JhbXMgZm9yIGNyZWF0aW5nLCBjaGVja2luZywgYW5kIG1haW50YWluaW5nCisgZXh0Mi8zLzQtYmFzZWQgZmlsZSBzeXN0ZW1zLgorCitQYWNrYWdlOiBlMmZzcHJvZ3MtZGJnCitTZWN0aW9uOiBkZWJ1ZworUHJpb3JpdHk6IGV4dHJhCitEZXBlbmRzOiBlMmZzcHJvZ3MgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBlMmZzcHJvZ3MKKyBUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGUyZnNwcm9ncworIGFuZCBpdHMgbGlicmFyaWVzLCBjb250YWluZWQgaW4gdGhlIGUyZnNwcm9ncyBhbmQgZTJmc2NrLXN0YXRpYyBwYWNrYWdlcy4KKyBUaGUgZGVidWcgaW5mb3JtYXRpb24gaXMgdXNlZCBmb3IgZXhlY3V0aW9uIHRyYWNpbmcgYW5kIGNvcmUKKyBkdW1wIGFuYWx5c2lzLiAKK2lmZGVmKGBVVElMX0xJTlVYX05HJywsYGAKK1BhY2thZ2U6IHV1aWQtcnVudGltZS1kYmcKK1NlY3Rpb246IGRlYnVnCitQcmlvcml0eTogZXh0cmEKK0RlcGVuZHM6IHV1aWQtcnVudGltZSAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHV1aWQtcnVudGltZQorIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCisgdXVpZCBydW50aW1lIHByb2dyYW1zLCBjb250YWluZWQgaW4gdGhlIHV1aWQtcnVudGltZSBwYWNrYWdlLgorIFRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgdXNlZCBmb3IgZXhlY3V0aW9uIHRyYWNpbmcgYW5kIGNvcmUKKyBkdW1wIGFuYWx5c2lzLgorJycpZG5sCisKK1BhY2thZ2U6IGUyZnNsaWJzLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogZTJmc2xpYnMgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBlMmZzbGlicworIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCisgZXh0MmZzIGFuZCBlMnAgbGlicmFyaWVzLCBjb250YWluZWQgaW4gdGhlIGUyZnNsaWJzIHBhY2thZ2UuICBUaGUgZGVidWcKKyBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZSBkdW1wIGFuYWx5c2lzLgorCitQYWNrYWdlOiBsaWJjb21lcnIyLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGliY29tZXJyMiAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGxpYmNvbWVycjIKKyBUaGlzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZQorIGNvbV9lcnIgbGlicmFyeSwgY29udGFpbmVkIGluIHRoZSBsaWJjb21lcnIyIHBhY2thZ2UuICBUaGUgZGVidWdnaW5nCisgaW5mb3JtYXRpb24gaXMgdXNlZCBmb3IgZXhlY3V0aW9uIHRyYWNpbmcgYW5kIGNvcmUgZHVtcCBhbmFseXNpcy4KKworUGFja2FnZTogbGlic3MyLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGlic3MyICg9ICR7YmluYXJ5OlZlcnNpb259KSwgJHttaXNjOkRlcGVuZHN9CitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgbGlic3MyCisgVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUKKyBzcyBsaWJyYXJ5LCBjb250YWluZWQgaW4gdGhlIGxpYnNzMiBwYWNrYWdlLiAgVGhlIGRlYnVnIGluZm9ybWF0aW9uCisgaXMgdXNlZCBmb3IgZXhlY3V0aW9uIHRyYWNpbmcgYW5kIGNvcmUgZHVtcCBhbmFseXNpcy4KK2lmZGVmKGBVVElMX0xJTlVYX05HJywsYGAKK1BhY2thZ2U6IGxpYmJsa2lkMS1kYmcKK1NlY3Rpb246IGRlYnVnCitQcmlvcml0eTogZXh0cmEKK0RlcGVuZHM6IGxpYmJsa2lkMSAoPSAke2JpbmFyeTpWZXJzaW9ufSksICR7bWlzYzpEZXBlbmRzfQorQXJjaGl0ZWN0dXJlOiBhbnkKK0Rlc2NyaXB0aW9uOiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGxpYmJsa2lkMQorIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCisgYmxraWQgbGlicmFyeSwgY29udGFpbmVkIGluIHRoZSBsaWJibGtpZDEgcGFja2FnZS4gIFRoZSBkZWJ1ZworIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIGV4ZWN1dGlvbiB0cmFjaW5nIGFuZCBjb3JlIGR1bXAgYW5hbHlzaXMuCisKK1BhY2thZ2U6IGxpYnV1aWQxLWRiZworU2VjdGlvbjogZGVidWcKK1ByaW9yaXR5OiBleHRyYQorRGVwZW5kczogbGlidXVpZDEgKD0gJHtiaW5hcnk6VmVyc2lvbn0pLCAke21pc2M6RGVwZW5kc30KK0FyY2hpdGVjdHVyZTogYW55CitEZXNjcmlwdGlvbjogZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBsaWJ1dWlkMQorIFRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVidWcgaW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCisgVVVJRCBsaWJyYXJ5LCBjb250YWluZWQgaW4gdGhlIGxpYnV1aWQxIHBhY2thZ2UuICBUaGUgZGVidWcKKyBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBleGVjdXRpb24gdHJhY2luZyBhbmQgY29yZSBkdW1wIGFuYWx5c2lzLgorJycpZG5sCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2NvcHlyaWdodCBiL2UyZnNwcm9ncy9kZWJpYW4vY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTRkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2NvcHlyaWdodApAQCAtMCwwICsxLDczIEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHByZXBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIEVYVDIgZmlsZQorc3lzdGVtIHV0aWxpdGllcyAoZTJmc2NrLCBta2UyZnMsIGV0Yy4pLiAgVGhlIEVYVDIgdXRpbGl0aWVzIHdlcmUKK3dyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4gYW5kIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4uCisKK1NvdXJjZXMgd2VyZSBvYnRhaW5lZCBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzCisKK1BhY2thZ2luZyBpcyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDAzIFlhbm4gRGlyc29uIDxkaXJzb25AZGViaWFuLm9yZz4KKwkgICAgIENvcHlyaWdodCAoYykgMjAwMSBBbGNvdmUgPGh0dHA6Ly93d3cuYWxjb3ZlLmNvbS8+CisJICAgICBDb3B5cmlnaHQgKGMpIDE5OTcgS2xlZSBEaWVuZXMKKwkgICAgIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IE1pY2hhZWwgTm9ud2VpbGVyIDxtcm4yMEBjYW0uYWMudWs+CisKK1Vwc3RyZWFtIEF1dGhvcjogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKworQ29weXJpZ2h0IG5vdGljZToKKworVGhpcyBwYWNrYWdlLCB0aGUgRVhUMiBmaWxlc3lzdGVtIHV0aWxpdGllcywgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyCit0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBsaWIvZXh0MmZzCithbmQgbGliL2UycCBsaWJyYXJpZXMsIHdoaWNoIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIExpYnJhcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCB0aGUgbGliL3V1aWQgbGlicmFyeSB3aGljaCBpcyBtYWRlCithdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgbGljZW5zZSBhbmQgdGhlIGxpYi9ldCBhbmQgbGliL3NzCitsaWJyYXJpZXMgd2hpY2ggYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgorCisJQ29weXJpZ2h0IChjKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAKKwkyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IGJ5IFRoZW9kb3JlIFRzJ28KKworT24gRGViaWFuIEdOVSBzeXN0ZW1zLCB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGNhbiBiZSBmb3VuZCBpbiBgL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLTInLiAgVGhlCitjb21wbGV0ZSB0ZXh0IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSBmb3VuZAoraW4gJy91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMicuCisKKworVGhlIGxpY2Vuc2UgdXNlZCBmb3IgbGliL2V0IGFuZCBsaWIvc3MgbGlicmFyaWVzIGlzOgorCisgICBDb3B5cmlnaHQgMTk4NyBieSB0aGUgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgICBvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCisgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICAgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgICB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgICBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICAgTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICAgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAgIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworVGhlIGxpY2Vuc2UgdXNlZCBmb3IgbGliL3V1aWQgaXM6CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICAgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAgIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICAgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAgIERBTUFHRS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2NrLXN0YXRpYy5jb3B5cmlnaHQgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNjay1zdGF0aWMuY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmRjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNjay1zdGF0aWMuY29weXJpZ2h0CkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMgaXMgdGhlIERlYmlhbiBHTlUvTGludXggcHJlcGFja2FnZWQgdmVyc2lvbiBvZiB0aGUgc3RhdGljIEVYVDIKK2ZpbGUgc3lzdGVtIGNvbnNpc3RlbmN5IGNoZWNrZXIgKGUyZnNjay5zdGF0aWMpLiAgVGhlIEVYVDIgdXRpbGl0aWVzCit3ZXJlIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4gYW5kIFJlbXkgQ2FyZAorPGNhcmRAbWFzaS5pYnAuZnI+LgorCitTb3VyY2VzIHdlcmUgb2J0YWluZWQgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncworCitQYWNrYWdpbmcgaXMgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMyBZYW5uIERpcnNvbiA8ZGlyc29uQGRlYmlhbi5vcmc+CisJICAgICBDb3B5cmlnaHQgKGMpIDIwMDEgQWxjb3ZlIDxodHRwOi8vd3d3LmFsY292ZS5jb20vPgorCSAgICAgQ29weXJpZ2h0IChjKSAxOTk3IEtsZWUgRGllbmVzCisJICAgICBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5NiBNaWNoYWVsIE5vbndlaWxlciA8bXJuMjBAY2FtLmFjLnVrPgorCitVcHN0cmVhbSBBdXRob3I6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisKK0NvcHlyaWdodCBub3RpY2U6CisKK1RoaXMgcGFja2FnZSwgdGhlIEVYVDIgZmlsZXN5c3RlbSB1dGlsaXRpZXMsIGlzIHByb3RlY3RlZCBieSB0aGUgR05VCitQdWJsaWMgTGljZW5zZS4KKworCUNvcHlyaWdodCAoYykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKwkyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IGJ5IFRoZW9kb3JlIFRzJ28KKworT24gRGViaWFuIEdOVSBzeXN0ZW1zLCB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgR05VIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGNhbiBiZSBmb3VuZCBpbiBgL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLTInLgorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNjay1zdGF0aWMuZmlsZXMgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNjay1zdGF0aWMuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2NrLXN0YXRpYy5maWxlcwpAQCAtMCwwICsxLDIgQEAKKy9zYmluL2UyZnNjay5zdGF0aWMKKy91c3Ivc2hhcmUvbWFuL21hbjgvZTJmc2NrLnN0YXRpYyoKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2NrLXN0YXRpYy5wcmVpbnN0IGIvZTJmc3Byb2dzL2RlYmlhbi9lMmZzY2stc3RhdGljLnByZWluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1NmFkZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2NrLXN0YXRpYy5wcmVpbnN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCisjIEFib3J0IG9uIGVycm9yLgorc2V0IC1lCisKK1BLRz1lMmZzY2stc3RhdGljCitET0NMTks9L3Vzci9zaGFyZS9kb2MvJFBLRworaWYgdGVzdCAiJDEiID0gdXBncmFkZSBcCisgICAgLWEgLUwgJERPQ0xOSwordGhlbgorICAgIHJtICRET0NMTksKK2ZpCisKKyMgZGhfaW5zdGFsbGRlYiB3aWxsIHJlcGxhY2UgdGhpcyB3aXRoIHNoZWxsIGNvZGUgYXV0b21hdGljYWxseQorIyBnZW5lcmF0ZWQgYnkgb3RoZXIgZGViaGVscGVyIHNjcmlwdHMuCisKKyNERUJIRUxQRVIjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9lMmZzbGlicy1kZXYuZG9jLWJhc2UgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLWRldi5kb2MtYmFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQwNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9lMmZzbGlicy1kZXYuZG9jLWJhc2UKQEAgLTAsMCArMSwxMCBAQAorRG9jdW1lbnQ6IGxpYmV4dDJmcworVGl0bGU6IFRoZSBFWFQyRlMgbGlicmFyeQorQXV0aG9yOiBUaGVvZG9yZSBUcydvCitBYnN0cmFjdDogVGhlIEVYVDJGUyBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIGFsbG93CisgdXNlci1sZXZlbCBwcm9ncmFtcyB0byBtYW5pcHVsYXRlIGFuIGV4dDIgZmlsZXN5c3RlbS4KK1NlY3Rpb246IFByb2dyYW1taW5nCisKK0Zvcm1hdDogSFRNTAorSW5kZXg6IC91c3Ivc2hhcmUvZG9jL2UyZnNsaWJzL2h0bWwtaW5mby9saWJleHQyZnMuaHRtbAorRmlsZXM6IC91c3Ivc2hhcmUvZG9jL2UyZnNsaWJzL2h0bWwtaW5mby8qLmh0bWwgCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLWRldi5maWxlcy5pbiBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2xpYnMtZGV2LmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyY2Q2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLWRldi5maWxlcy5pbgpAQCAtMCwwICsxLDkgQEAKK3Vzci9saWIvKi9saWJleHQyZnMqLnNvCit1c3IvbGliLyovbGliZXh0MmZzKi5hCit1c3IvbGliLyovbGliZTJwKi5zbwordXNyL2xpYi8qL2xpYmUycCouYQordXNyL2luY2x1ZGUvZXh0MmZzCit1c3IvaW5jbHVkZS9lMnAKK3Vzci9zaGFyZS9pbmZvL2xpYmV4dDJmcy5pbmZvKgordXNyL2xpYi8qL3BrZ2NvbmZpZy9lMnAucGMKK3Vzci9saWIvKi9wa2djb25maWcvZXh0MmZzLnBjCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLmZpbGVzLmluIGIvZTJmc3Byb2dzL2RlYmlhbi9lMmZzbGlicy5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE5OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9lMmZzbGlicy5maWxlcy5pbgpAQCAtMCwwICsxLDIgQEAKK2xpYi8qL2xpYmV4dDJmcyouc28uKgorbGliLyovbGliZTJwKi5zby4qCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLnN5bWJvbHMgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNsaWJzLnN5bWJvbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ZjQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc2xpYnMuc3ltYm9scwpAQCAtMCwwICsxLDU1MyBAQAorbGliZTJwLnNvLjIgZTJmc2xpYnMgI01JTlZFUiMKKyBlMnBfZWRpdF9mZWF0dXJlMkBCYXNlIDEuNDAuNworIGUycF9lZGl0X2ZlYXR1cmVAQmFzZSAxLjM3CisgZTJwX2VkaXRfbW50b3B0c0BCYXNlIDEuMzcKKyBlMnBfZmVhdHVyZTJzdHJpbmdAQmFzZSAxLjM3CisgZTJwX2hhc2gyc3RyaW5nQEJhc2UgMS4zNworIGUycF9pc19udWxsX3V1aWRAQmFzZSAxLjM3CisgZTJwX2pybmxfZmVhdHVyZTJzdHJpbmdAQmFzZSAxLjQxLjEKKyBlMnBfanJubF9zdHJpbmcyZmVhdHVyZUBCYXNlIDEuNDEuMQorIGUycF9tbnRvcHQyc3RyaW5nQEJhc2UgMS4zNworIGUycF9vczJzdHJpbmdAQmFzZSAxLjM3CisgZTJwX3BlcmNlbnRAQmFzZSAxLjQwCisgZTJwX3N0cmluZzJmZWF0dXJlQEJhc2UgMS4zNworIGUycF9zdHJpbmcyaGFzaEBCYXNlIDEuMzcKKyBlMnBfc3RyaW5nMm1udG9wdEBCYXNlIDEuMzcKKyBlMnBfc3RyaW5nMm9zQEJhc2UgMS4zNworIGUycF91dWlkMnN0ckBCYXNlIDEuMzcKKyBlMnBfdXVpZF90b19zdHJAQmFzZSAxLjM3CisgZmdldGZsYWdzQEJhc2UgMS4zNworIGZnZXR2ZXJzaW9uQEJhc2UgMS4zNworIGZzZXRmbGFnc0BCYXNlIDEuMzcKKyBmc2V0dmVyc2lvbkBCYXNlIDEuMzcKKyBnZXRmbGFnc0BCYXNlIDEuMzcKKyBnZXR2ZXJzaW9uQEJhc2UgMS4zNworIGl0ZXJhdGVfb25fZGlyQEJhc2UgMS4zNworIGxpc3Rfc3VwZXIyQEJhc2UgMS4zNworIGxpc3Rfc3VwZXJAQmFzZSAxLjM3CisgcGFyc2VfbnVtX2Jsb2NrczJAQmFzZSAxLjQyCisgcGFyc2VfbnVtX2Jsb2Nrc0BCYXNlIDEuMzcKKyBwcmludF9mbGFnc0BCYXNlIDEuMzcKKyBwcmludF9mc19lcnJvcnNAQmFzZSAxLjM3CisgcHJpbnRfZnNfc3RhdGVAQmFzZSAxLjM3Cisgc2V0ZmxhZ3NAQmFzZSAxLjM3Cisgc2V0dmVyc2lvbkBCYXNlIDEuMzcKK2xpYmV4dDJmcy5zby4yIGUyZnNsaWJzICNNSU5WRVIjCisgYmFkYmxvY2tzX2xpc3RfYWRkQEJhc2UgMS4zNworIGJhZGJsb2Nrc19saXN0X2NyZWF0ZUBCYXNlIDEuMzcKKyBiYWRibG9ja3NfbGlzdF9mcmVlQEJhc2UgMS4zNworIGJhZGJsb2Nrc19saXN0X2l0ZXJhdGVAQmFzZSAxLjM3CisgYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbkBCYXNlIDEuMzcKKyBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZEBCYXNlIDEuMzcKKyBiYWRibG9ja3NfbGlzdF90ZXN0QEJhc2UgMS4zNworIGV0X2V4dDJfZXJyb3JfdGFibGVAQmFzZSAxLjM3CisgZXh0MmZzX2FkZF9kaXJfYmxvY2syQEJhc2UgMS40MgorIGV4dDJmc19hZGRfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19hZGRfam91cm5hbF9kZXZpY2VAQmFzZSAxLjM3CisgZXh0MmZzX2FkZF9qb3VybmFsX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyQEJhc2UgMS40MgorIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jX2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfYWxsb2NfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcEBCYXNlIDEuNDIKKyBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19hbGxvY2F0ZV9nZW5lcmljX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGVAQmFzZSAxLjM3CisgZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXBAQmFzZSAxLjQyCisgZXh0MmZzX2FsbG9jYXRlX3RhYmxlc0BCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2NvcHlAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19lcXVhbEBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkQEJhc2UgMS4zNworIGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGVAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2RlbEBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZUBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbkBCYXNlIDEuMzcKKyBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmRAQmFzZSAxLjM3CisgZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3RAQmFzZSAxLjM3CisgZXh0MmZzX2JnX2NoZWNrc3VtQEJhc2UgMS40MgorIGV4dDJmc19iZ19jaGVja3N1bV9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZsYWdzQEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc19jbGVhckBCYXNlIDEuNDIKKyBleHQyZnNfYmdfZmxhZ3Nfc2V0QEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc190ZXN0QEJhc2UgMS40MgorIGV4dDJmc19iZ19mbGFnc196YXBAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50QEJhc2UgMS40MgorIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50QEJhc2UgMS40MgorIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX2hhc19zdXBlckBCYXNlIDEuMzcKKyBleHQyZnNfYmdfaXRhYmxlX3VudXNlZEBCYXNlIDEuNDIKKyBleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudEBCYXNlIDEuNDIKKyBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldEBCYXNlIDEuNDIKKyBleHQyZnNfYml0Y291bnRAQmFzZSAxLjQyLjcKKyBleHQyZnNfYmxrbWFwNjRfYml0YXJyYXlAQmFzZSAxLjQyCisgZXh0MmZzX2Jsa21hcDY0X3JidHJlZUBCYXNlIDEuNDIuMQorIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czJAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzQEJhc2UgMS4zNworIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jQEJhc2UgMS40MgorIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldEBCYXNlIDEuNDIKKyBleHQyZnNfYmxvY2tfaXRlcmF0ZTJAQmFzZSAxLjM3CisgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzQEJhc2UgMS40MgorIGV4dDJmc19ibG9ja19pdGVyYXRlQEJhc2UgMS4zNworIGV4dDJmc19ibG9ja3NfY291bnRAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2Nrc19jb3VudF9hZGRAQmFzZSAxLjQyCisgZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2JtYXAyQEJhc2UgMS40MS4wCisgZXh0MmZzX2JtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2NoZWNrX2Rlc2NAQmFzZSAxLjM3CisgZXh0MmZzX2NoZWNrX2RpcmVjdG9yeUBCYXNlIDEuMzcKKyBleHQyZnNfY2hlY2tfaWZfbW91bnRlZEBCYXNlIDEuMzcKKyBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnRAQmFzZSAxLjM3CisgZXh0MmZzX2NsZWFyX2JpdDY0QEJhc2UgMS40MgorIGV4dDJmc19jbGVhcl9iaXRAQmFzZSAxLjM3CisgZXh0MmZzX2NsZWFyX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfY2xlYXJfZ2VuZXJpY19iaXRtYXBAQmFzZSAxLjQxLjAKKyBleHQyZnNfY2xlYXJfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Nsb3NlMkBCYXNlIDEuNDIKKyBleHQyZnNfY2xvc2VAQmFzZSAxLjM3CisgZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW5AQmFzZSAxLjM3CisgZXh0MmZzX2NvbXBhcmVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19jb21wYXJlX2dlbmVyaWNfYml0bWFwQEJhc2UgMS40MS4wCisgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jb21wYXJlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfY29udmVydF9zdWJjbHVzdGVyX2JpdG1hcEBCYXNlIDEuNDIKKyBleHQyZnNfY29weV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2NvcHlfZGJsaXN0QEJhc2UgMS4zNworIGV4dDJmc19jb3B5X2dlbmVyaWNfYml0bWFwQEJhc2UgMS40MS4wCisgZXh0MmZzX2NvcHlfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19jcmMxNkBCYXNlIDEuNDEuMQorIGV4dDJmc19jcmMzMmNfYmVAQmFzZSAxLjQyCisgZXh0MmZzX2NyYzMyY19sZUBCYXNlIDEuNDIKKyBleHQyZnNfY3JlYXRlX2ljb3VudDJAQmFzZSAxLjM3CisgZXh0MmZzX2NyZWF0ZV9pY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2NyZWF0ZV9pY291bnRfdGRiQEJhc2UgMS40MAorIGV4dDJmc19jcmVhdGVfam91cm5hbF9zdXBlcmJsb2NrQEJhc2UgMS4zNworIGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19kYmxpc3RfY291bnQyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfY291bnRAQmFzZSAxLjM3CisgZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfZGJsaXN0X2Ryb3BfbGFzdEBCYXNlIDEuNDAuOAorIGV4dDJmc19kYmxpc3RfZ2V0X2xhc3QyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfZ2V0X2xhc3RAQmFzZSAxLjQwLjgKKyBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3RfaXRlcmF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfZGJsaXN0X3NvcnQyQEJhc2UgMS40MgorIGV4dDJmc19kYmxpc3Rfc29ydEBCYXNlIDEuMzcKKyBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemVAQmFzZSAxLjQwCisgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jMkBCYXNlIDEuNDIKKyBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2NAQmFzZSAxLjM3CisgZXh0MmZzX2Rpcl9pdGVyYXRlMkBCYXNlIDEuMzcKKyBleHQyZnNfZGlyX2l0ZXJhdGVAQmFzZSAxLjM3CisgZXh0MmZzX2Rpcmhhc2hAQmFzZSAxLjM3CisgZXh0MmZzX2RpdjY0X2NlaWxAQmFzZSAxLjQyCisgZXh0MmZzX2Rpdl9jZWlsQEJhc2UgMS40MAorIGV4dDJmc19kdXBfaGFuZGxlQEJhc2UgMS4zNworIGV4dDJmc19leHBhbmRfZGlyQEJhc2UgMS4zNworIGV4dDJmc19leHRfYXR0cl9oYXNoX2VudHJ5QEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9kZWxldGVAQmFzZSAxLjQxLjAKKyBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzQEJhc2UgMS40Mi43CisgZXh0MmZzX2V4dGVudF9mcmVlQEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9nZXRAQmFzZSAxLjQxLjAKKyBleHQyZnNfZXh0ZW50X2dldF9pbmZvQEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9nb3RvQEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9nb3RvMkBCYXNlIDEuNDIuNworIGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeUBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfaW5zZXJ0QEJhc2UgMS40MS4wCisgZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0QEJhc2UgMS40Mi43CisgZXh0MmZzX2V4dGVudF9vcGVuMkBCYXNlIDEuNDEuNgorIGV4dDJmc19leHRlbnRfb3BlbkBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfcmVwbGFjZUBCYXNlIDEuNDEuMAorIGV4dDJmc19leHRlbnRfc2V0X2JtYXBAQmFzZSAxLjQxLjAKKyBleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF9jbGVhcl9iaXRAQmFzZSAxLjM5CisgZXh0MmZzX2Zhc3RfbWFya19ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF9tYXJrX2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfbWFya19pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0QEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3NldF9iaXRAQmFzZSAxLjM5CisgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlQEJhc2UgMS4zNworIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrQEJhc2UgMS40MgorIGV4dDJmc19maWxlX2FjbF9ibG9ja19zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2ZpbGVfYmxvY2tfb2Zmc2V0X3Rvb19iaWdAQmFzZSAxLjQyLjkKKyBleHQyZnNfZmlsZV9jbG9zZUBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9mbHVzaEBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9nZXRfZnNAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfZ2V0X2lub2RlQEJhc2UgMS40MgorIGV4dDJmc19maWxlX2dldF9pbm9kZV9udW1AQmFzZSAxLjQyLjEKKyBleHQyZnNfZmlsZV9nZXRfbHNpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfZ2V0X3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfbGxzZWVrQEJhc2UgMS4zNworIGV4dDJmc19maWxlX2xzZWVrQEJhc2UgMS4zNworIGV4dDJmc19maWxlX29wZW4yQEJhc2UgMS4zNworIGV4dDJmc19maWxlX29wZW5AQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfcmVhZEBCYXNlIDEuMzcKKyBleHQyZnNfZmlsZV9zZXRfc2l6ZTJAQmFzZSAxLjQyCisgZXh0MmZzX2ZpbGVfc2V0X3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbGVfd3JpdGVAQmFzZSAxLjM3CisgZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlQEJhc2UgMS4zNworIGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMkBCYXNlIDEuNDIuMgorIGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19iaXRtYXBAQmFzZSAxLjQyLjMKKyBleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYm1hcEBCYXNlIDEuNDIuMgorIGV4dDJmc19maW5kX2ZpcnN0X3plcm9faW5vZGVfYml0bWFwMkBCYXNlIDEuNDIuMgorIGV4dDJmc19mbHVzaDJAQmFzZSAxLjQyCisgZXh0MmZzX2ZsdXNoQEJhc2UgMS4zNworIGV4dDJmc19mbHVzaF9pY2FjaGVAQmFzZSAxLjM3CisgZXh0MmZzX2ZvbGxvd19saW5rQEJhc2UgMS4zNworIGV4dDJmc19mcmVlQEJhc2UgMS4zNworIGV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfZnJlZV9ibG9ja3NfY291bnRAQmFzZSAxLjQyCisgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZEBCYXNlIDEuNDIKKyBleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0QEJhc2UgMS40MgorIGV4dDJmc19mcmVlX2RibGlzdEBCYXNlIDEuMzcKKyBleHQyZnNfZnJlZV9nZW5lcmljX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfZnJlZV9nZW5lcmljX2JtYXBAQmFzZSAxLjQyCisgZXh0MmZzX2ZyZWVfaWNvdW50QEJhc2UgMS4zNworIGV4dDJmc19mcmVlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfZnJlZV9tZW1AQmFzZSAxLjM3CisgZXh0MmZzX2ZzdGF0QEJhc2UgMS40MgorIGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kMkBCYXNlIDEuNDIKKyBleHQyZnNfZnVkZ2VfYmxvY2tfYml0bWFwX2VuZEBCYXNlIDEuMzcKKyBleHQyZnNfZnVkZ2VfZ2VuZXJpY19iaXRtYXBfZW5kQEJhc2UgMS40MS4wCisgZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYm1hcF9lbmRAQmFzZSAxLjQyCisgZXh0MmZzX2Z1ZGdlX2lub2RlX2JpdG1hcF9lbmRAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9hcnJheUBCYXNlIDEuNDAuMworIGV4dDJmc19nZXRfYXJyYXl6ZXJvQEJhc2UgMS40MgorIGV4dDJmc19nZXRfYml0bWFwX2dyYW51bGFyaXR5QEJhc2UgMS40MgorIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX2VuZDJAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kQEJhc2UgMS4zNworIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuNDEuMAorIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0MkBCYXNlIDEuNDIKKyBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydEBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2Jsb2Nrc0BCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2RhdGFfaW9AQmFzZSAxLjM3CisgZXh0MmZzX2dldF9kZXZpY2VfcGh5c19zZWN0c2l6ZUBCYXNlIDEuNDEuMTIKKyBleHQyZnNfZ2V0X2RldmljZV9zZWN0c2l6ZUBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2RldmljZV9zaXplMkBCYXNlIDEuNDEuNAorIGV4dDJmc19nZXRfZGV2aWNlX3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9kaW9fYWxpZ25tZW50QEJhc2UgMS40Mi4zCisgZXh0MmZzX2dldF9mcmVlX2Jsb2NrczJAQmFzZSAxLjQyCisgZXh0MmZzX2dldF9mcmVlX2Jsb2Nrc0BCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX2VuZEBCYXNlIDEuNDEuMAorIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3N0YXJ0QEJhc2UgMS40MS4wCisgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kQEJhc2UgMS40MgorIGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3JhbmdlQEJhc2UgMS40MgorIGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3N0YXJ0QEJhc2UgMS40MgorIGV4dDJmc19nZXRfaWNvdW50X3NpemVAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kMkBCYXNlIDEuNDIKKyBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmRAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UyQEJhc2UgMS40MgorIGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3JhbmdlQEJhc2UgMS40MS4wCisgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyQEJhc2UgMS40MgorIGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3N0YXJ0QEJhc2UgMS4zNworIGV4dDJmc19nZXRfbGlicmFyeV92ZXJzaW9uQEJhc2UgMS4zNworIGV4dDJmc19nZXRfbWVtQEJhc2UgMS4zNworIGV4dDJmc19nZXRfbWVtYWxpZ25AQmFzZSAxLjQxLjEzCisgZXh0MmZzX2dldF9tZW16ZXJvQEJhc2UgMS40MgorIGV4dDJmc19nZXRfbmV4dF9pbm9kZUBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X25leHRfaW5vZGVfZnVsbEBCYXNlIDEuMzcKKyBleHQyZnNfZ2V0X251bV9kaXJzQEJhc2UgMS4zNworIGV4dDJmc19nZXRfcGF0aG5hbWVAQmFzZSAxLjM3CisgZXh0MmZzX2dldF9yZWNfbGVuQEJhc2UgMS40MS43CisgZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudEBCYXNlIDEuNDIKKyBleHQyZnNfZ3JvdXBfZGVzY19jc3VtQEJhc2UgMS40Mi4yCisgZXh0MmZzX2dyb3VwX2Rlc2NAQmFzZSAxLjQyCisgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXRAQmFzZSAxLjQxLjAKKyBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeUBCYXNlIDEuNDEuMAorIGV4dDJmc19ncm91cF9maXJzdF9ibG9jazJAQmFzZSAxLjQyCisgZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrQEJhc2UgMS40MAorIGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfZ3JvdXBfbGFzdF9ibG9ja0BCYXNlIDEuNDAKKyBleHQyZnNfZ3JvdXBfb2ZfYmxrMkBCYXNlIDEuNDIKKyBleHQyZnNfZ3JvdXBfb2ZfYmxrQEJhc2UgMS4zNworIGV4dDJmc19ncm91cF9vZl9pbm9AQmFzZSAxLjM3CisgZXh0MmZzX2libGtfYWRkX2Jsb2Nrc0BCYXNlIDEuNDEuMAorIGV4dDJmc19pYmxrX3NldEBCYXNlIDEuNDEuMAorIGV4dDJmc19pYmxrX3N1Yl9ibG9ja3NAQmFzZSAxLjQxLjAKKyBleHQyZnNfaWNvdW50X2RlY3JlbWVudEBCYXNlIDEuMzcKKyBleHQyZnNfaWNvdW50X2ZldGNoQEJhc2UgMS4zNworIGV4dDJmc19pY291bnRfaW5jcmVtZW50QEJhc2UgMS4zNworIGV4dDJmc19pY291bnRfc3RvcmVAQmFzZSAxLjM3CisgZXh0MmZzX2ljb3VudF92YWxpZGF0ZUBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2VfYml0bWFwX3JlYWRAQmFzZSAxLjM3CisgZXh0MmZzX2ltYWdlX2JpdG1hcF93cml0ZUBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2VfaW5vZGVfcmVhZEBCYXNlIDEuMzcKKyBleHQyZnNfaW1hZ2VfaW5vZGVfd3JpdGVAQmFzZSAxLjM3CisgZXh0MmZzX2ltYWdlX3N1cGVyX3JlYWRAQmFzZSAxLjM3CisgZXh0MmZzX2ltYWdlX3N1cGVyX3dyaXRlQEJhc2UgMS4zNworIGV4dDJmc19pbml0X2RibGlzdEBCYXNlIDEuMzcKKyBleHQyZnNfaW5pdGlhbGl6ZUBCYXNlIDEuMzcKKyBleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0c0BCYXNlIDEuMzcKKyBleHQyZnNfaW5vZGVfYml0bWFwX2xvY0BCYXNlIDEuNDIKKyBleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXRAQmFzZSAxLjQyCisgZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzMkBCYXNlIDEuNDIKKyBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3NAQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3NAQmFzZSAxLjM3CisgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV9pX2Jsb2Nrc0BCYXNlIDEuNDIKKyBleHQyZnNfaW5vZGVfaW9faW50ZXJuMkBCYXNlIDEuMzcKKyBleHQyZnNfaW5vZGVfaW9faW50ZXJuQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9zY2FuX2ZsYWdzQEJhc2UgMS4zNworIGV4dDJmc19pbm9kZV9zY2FuX2dvdG9fYmxvY2tncm91cEBCYXNlIDEuMzcKKyBleHQyZnNfaW5vZGVfdGFibGVfbG9jQEJhc2UgMS40MgorIGV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0QEJhc2UgMS40MgorIGV4dDJmc19saW5rQEJhc2UgMS4zNworIGV4dDJmc19sbHNlZWtAQmFzZSAxLjM3CisgZXh0MmZzX2xvb2t1cEBCYXNlIDEuMzcKKyBleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcEBCYXNlIDEuNDEuMAorIGV4dDJmc19tYXBfY2x1c3Rlcl9ibG9ja0BCYXNlIDEuNDIuOQorIGV4dDJmc19tYXJrX2JiX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2NoYW5nZWRAQmFzZSAxLjM3CisgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19tYXJrX2liX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDJAQmFzZSAxLjQyCisgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19tYXJrX3N1cGVyX2RpcnR5QEJhc2UgMS4zNworIGV4dDJmc19tYXJrX3ZhbGlkQEJhc2UgMS4zNworIGV4dDJmc19tZW1faXNfemVyb0BCYXNlIDEuNDIKKyBleHQyZnNfbWtkaXJAQmFzZSAxLjM3CisgZXh0MmZzX21tcF9jbGVhckBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX2luaXRAQmFzZSAxLjQyCisgZXh0MmZzX21tcF9uZXdfc2VxQEJhc2UgMS40MgorIGV4dDJmc19tbXBfcmVhZEBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3N0YXJ0QEJhc2UgMS40MgorIGV4dDJmc19tbXBfc3RvcEBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3VwZGF0ZUBCYXNlIDEuNDIKKyBleHQyZnNfbW1wX3dyaXRlQEJhc2UgMS40MgorIGV4dDJmc19uYW1laUBCYXNlIDEuMzcKKyBleHQyZnNfbmFtZWlfZm9sbG93QEJhc2UgMS4zNworIGV4dDJmc19uYXRpdmVfZmxhZ0BCYXNlIDEuMzcKKyBleHQyZnNfbmV3X2Jsb2NrMkBCYXNlIDEuNDIKKyBleHQyZnNfbmV3X2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19uZXdfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19uZXdfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfY2xvc2VAQmFzZSAxLjQyCisgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdEBCYXNlIDEuNDIKKyBleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGVAQmFzZSAxLjQyCisgZXh0MmZzX29wZW4yQEJhc2UgMS4zNworIGV4dDJmc19vcGVuQEJhc2UgMS4zNworIGV4dDJmc19vcGVuX2ZpbGVAQmFzZSAxLjQyCisgZXh0MmZzX29wZW5faW5vZGVfc2NhbkBCYXNlIDEuMzcKKyBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmdAQmFzZSAxLjM3CisgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19wdW5jaEBCYXNlIDEuNDIKKyBleHQyZnNfcl9ibG9ja3NfY291bnRAQmFzZSAxLjQyCisgZXh0MmZzX3JfYmxvY2tzX2NvdW50X2FkZEBCYXNlIDEuNDIKKyBleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0QEJhc2UgMS40MgorIGV4dDJmc19yYl9hdWdtZW50X2VyYXNlX2JlZ2luQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2F1Z21lbnRfZXJhc2VfZW5kQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2F1Z21lbnRfaW5zZXJ0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2VyYXNlQEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2ZpcnN0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX2luc2VydF9jb2xvckBCYXNlIDEuNDIuMQorIGV4dDJmc19yYl9sYXN0QEJhc2UgMS40Mi4xCisgZXh0MmZzX3JiX25leHRAQmFzZSAxLjQyLjEKKyBleHQyZnNfcmJfcHJldkBCYXNlIDEuNDIuMQorIGV4dDJmc19yYl9yZXBsYWNlX25vZGVAQmFzZSAxLjQyLjEKKyBleHQyZnNfcmVhZF9iYl9GSUxFMkBCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9iYl9GSUxFQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2JiX2lub2RlQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2JpdG1hcHNAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2Rpcl9ibG9jazJAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrM0BCYXNlIDEuNDIKKyBleHQyZnNfcmVhZF9kaXJfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfZXh0X2F0dHIyQEJhc2UgMS40MgorIGV4dDJmc19yZWFkX2V4dF9hdHRyQEJhc2UgMS4zNworIGV4dDJmc19yZWFkX2luZF9ibG9ja0BCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9pbm9kZUBCYXNlIDEuMzcKKyBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkQEJhc2UgMS4zNworIGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc19yZXNpemVfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfcmVzaXplX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfcmVzaXplX21lbUBCYXNlIDEuMzcKKyBleHQyZnNfcmV3cml0ZV90b19pb0BCYXNlIDEuMzcKKyBleHQyZnNfc2V0X2FsbG9jX2Jsb2NrX2NhbGxiYWNrQEJhc2UgMS40MS4wCisgZXh0MmZzX3NldF9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2JpdEBCYXNlIDEuMzcKKyBleHQyZnNfc2V0X2JpdG1hcF9wYWRkaW5nQEJhc2UgMS4zNworIGV4dDJmc19zZXRfYmxvY2tfYWxsb2Nfc3RhdHNfY2FsbGJhY2tAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX3NldF9ibG9ja19iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2RhdGFfaW9AQmFzZSAxLjM3CisgZXh0MmZzX3NldF9kaXJfYmxvY2syQEJhc2UgMS40MgorIGV4dDJmc19zZXRfZGlyX2Jsb2NrQEJhc2UgMS4zNworIGV4dDJmc19zZXRfZ2R0X2NzdW1AQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3BhZGRpbmdAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlQEJhc2UgMS40MS4wCisgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcGFkZGluZ0BCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZUBCYXNlIDEuNDIKKyBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZTJAQmFzZSAxLjQyCisgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2VAQmFzZSAxLjQxLjAKKyBleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrQEJhc2UgMS4zNworIGV4dDJmc19zZXRfcmVjX2xlbkBCYXNlIDEuNDEuNworIGV4dDJmc19zdGF0QEJhc2UgMS40MgorIGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzJAQmFzZSAxLjQyCisgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jQEJhc2UgMS4zNworIGV4dDJmc19zd2FiMTZAQmFzZSAxLjM3CisgZXh0MmZzX3N3YWIzMkBCYXNlIDEuMzcKKyBleHQyZnNfc3dhYjY0QEJhc2UgMS40MAorIGV4dDJmc19zeW1saW5rQEJhc2UgMS40Mi43CisgZXh0MmZzX3N5bmNfZGV2aWNlQEJhc2UgMS4zNworIGV4dDJmc190ZGJfYXBwZW5kQEJhc2UgMS40MAorIGV4dDJmc190ZGJfY2hhaW5sb2NrQEJhc2UgMS40MAorIGV4dDJmc190ZGJfY2hhaW5sb2NrX21hcmtAQmFzZSAxLjQwLjcKKyBleHQyZnNfdGRiX2NoYWlubG9ja19ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfY2hhaW5sb2NrX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9jaGFpbmxvY2tfdW5tYXJrQEJhc2UgMS40MC43CisgZXh0MmZzX3RkYl9jaGFpbnVubG9ja0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2NoYWludW5sb2NrX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9jbG9zZUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2RlbGV0ZUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2R1bXBfYWxsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfZW5hYmxlX3NlcW51bUBCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfZXJyb3JAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9lcnJvcnN0ckBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2V4aXN0c0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2ZkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfZmV0Y2hAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9maXJzdGtleUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2dldF9mbGFnc0BCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGVAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9nZXRfc2VxbnVtQEJhc2UgMS40MAorIGV4dDJmc190ZGJfaGFzaF9zaXplQEJhc2UgMS40MAorIGV4dDJmc190ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja19ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX2xvY2thbGxfbWFya0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbF9ub25ibG9ja0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrQEJhc2UgMS40MC43CisgZXh0MmZzX3RkYl9sb2NrYWxsX3VubWFya0BCYXNlIDEuNDAuNworIGV4dDJmc190ZGJfbG9nX2ZuQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbWFwX3NpemVAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9uYW1lQEJhc2UgMS40MAorIGV4dDJmc190ZGJfbmV4dGtleUBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX29wZW5AQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9vcGVuX2V4QEJhc2UgMS40MAorIGV4dDJmc190ZGJfcGFyc2VfcmVjb3JkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfcHJpbnRmcmVlbGlzdEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3Jlb3BlbkBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3Jlb3Blbl9hbGxAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbkBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3NldF9tYXhfZGVhZEBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3N0b3JlQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY29tbWl0QEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlckBCYXNlIDEuNDAKKyBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3N0YXJ0QEJhc2UgMS40MAorIGV4dDJmc190ZGJfdHJhdmVyc2VAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdW5sb2NrYWxsQEJhc2UgMS40MAorIGV4dDJmc190ZGJfdW5sb2NrYWxsX3JlYWRAQmFzZSAxLjQwCisgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdEBCYXNlIDEuNDAKKyBleHQyZnNfdGVzdF9iYl9kaXJ0eUBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9iaXQ2NEBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9iaXRAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2VAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfY2hhbmdlZEBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXBAQmFzZSAxLjQyCisgZXh0MmZzX3Rlc3RfaWJfZGlydHlAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXBAQmFzZSAxLjM3CisgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwX3JhbmdlQEJhc2UgMS40MS44CisgZXh0MmZzX3Rlc3RfdmFsaWRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9jb3B5QEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF9hZGRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2NvdW50QEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF9jcmVhdGVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2RlbEBCYXNlIDEuMzcKKyBleHQyZnNfdTMyX2xpc3RfZXF1YWxAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2ZpbmRAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2ZyZWVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVAQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjM3CisgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kQEJhc2UgMS4zNworIGV4dDJmc191MzJfbGlzdF90ZXN0QEJhc2UgMS4zNworIGV4dDJmc191bmxpbmtAQmFzZSAxLjM3CisgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyQEJhc2UgMS40MgorIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMkBCYXNlIDEuNDIKKyBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZUBCYXNlIDEuMzcKKyBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc191bm1hcmtfZ2VuZXJpY19ibWFwQEJhc2UgMS40MgorIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMkBCYXNlIDEuNDIKKyBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfdW5tYXJrX3ZhbGlkQEJhc2UgMS4zNworIGV4dDJmc191cGRhdGVfYmJfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX3VwZGF0ZV9keW5hbWljX3JldkBCYXNlIDEuMzcKKyBleHQyZnNfd2Fybl9iaXRtYXAyQEJhc2UgMS4zNworIGV4dDJmc193YXJuX2JpdG1hcDMyQEJhc2UgMS40MgorIGV4dDJmc193YXJuX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYmJfRklMRUBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYml0bWFwc0BCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfYmxvY2tfYml0bWFwQEJhc2UgMS4zNworIGV4dDJmc193cml0ZV9kaXJfYmxvY2syQEJhc2UgMS4zNworIGV4dDJmc193cml0ZV9kaXJfYmxvY2szQEJhc2UgMS40MgorIGV4dDJmc193cml0ZV9kaXJfYmxvY2tAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2V4dF9hdHRyMkBCYXNlIDEuNDIKKyBleHQyZnNfd3JpdGVfZXh0X2F0dHJAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2luZF9ibG9ja0BCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfaW5vZGVAQmFzZSAxLjM3CisgZXh0MmZzX3dyaXRlX2lub2RlX2JpdG1hcEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbEBCYXNlIDEuMzcKKyBleHQyZnNfd3JpdGVfbmV3X2lub2RlQEJhc2UgMS4zNworIGV4dDJmc196ZXJvX2Jsb2NrczJAQmFzZSAxLjQyCisgZXh0MmZzX3plcm9fYmxvY2tzQEJhc2UgMS40MS4wCisgaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlQEJhc2UgMS4zNworIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZV9yQEJhc2UgMS4zNworIGlub2RlX2lvX21hbmFnZXJAQmFzZSAxLjM3CisgaW9fY2hhbm5lbF9hbGxvY19idWZAQmFzZSAxLjQyLjMKKyBpb19jaGFubmVsX2Rpc2NhcmRAQmFzZSAxLjQyCisgaW9fY2hhbm5lbF9yZWFkX2JsazY0QEJhc2UgMS40MS4xCisgaW9fY2hhbm5lbF9zZXRfb3B0aW9uc0BCYXNlIDEuMzcKKyBpb19jaGFubmVsX3dyaXRlX2JsazY0QEJhc2UgMS40MS4xCisgaW9fY2hhbm5lbF93cml0ZV9ieXRlQEJhc2UgMS4zNworIHFjb3cyX3JlYWRfaGVhZGVyQEJhc2UgMS40MgorIHFjb3cyX3dyaXRlX3Jhd19pbWFnZUBCYXNlIDEuNDIKKyBzZXRfdW5kb19pb19iYWNraW5nX21hbmFnZXJAQmFzZSAxLjQxLjAKKyBzZXRfdW5kb19pb19iYWNrdXBfZmlsZUBCYXNlIDEuNDEuMAorIHRlc3RfaW9fYmFja2luZ19tYW5hZ2VyQEJhc2UgMS4zNworIHRlc3RfaW9fY2JfcmVhZF9ibGs2NEBCYXNlIDEuNDEuMAorIHRlc3RfaW9fY2JfcmVhZF9ibGtAQmFzZSAxLjM3CisgdGVzdF9pb19jYl9zZXRfYmxrc2l6ZUBCYXNlIDEuMzcKKyB0ZXN0X2lvX2NiX3dyaXRlX2JsazY0QEJhc2UgMS40MS4wCisgdGVzdF9pb19jYl93cml0ZV9ibGtAQmFzZSAxLjM3CisgdGVzdF9pb19jYl93cml0ZV9ieXRlQEJhc2UgMS4zNworIHRlc3RfaW9fbWFuYWdlckBCYXNlIDEuMzcKKyB1bmRvX2lvX21hbmFnZXJAQmFzZSAxLjQxLjAKKyB1bml4X2lvX21hbmFnZXJAQmFzZSAxLjM3CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy11ZGViLnNobGlicy5sb2NhbCBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc3Byb2dzLXVkZWIuc2hsaWJzLmxvY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWI1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy11ZGViLnNobGlicy5sb2NhbApAQCAtMCwwICsxLDYgQEAKK2xpYmJsa2lkIDEgbGliYmxraWQxLXVkZWIKKyMgZm9yY2UgdGhlIGRlcGVuZGVuY3kgdG8gbGliYmxraWQxLXVkZWIsIGV2ZW4gaWYgaXQgZG9uJ3QgaW5jbHVkZSB0aGUgbGliCitsaWJjb21fZXJyIDIgbGliYmxraWQxLXVkZWIKK2xpYnV1aWQgMSBsaWJ1dWlkMS11ZGViCitsaWJleHQyZnMgMiBsaWJibGtpZDEtdWRlYgorbGliZTJwIDIgbGliYmxraWQxLXVkZWIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vZTJmc3Byb2dzLmRvY3MgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5kb2NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjk3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5kb2NzCkBAIC0wLDAgKzEsMiBAQAorUkVBRE1FCitSRUxFQVNFLU5PVEVTCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5maWxlcyBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc3Byb2dzLmZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTU0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5maWxlcwpAQCAtMCwwICsxLDYgQEAKK3NiaW4KK3Vzci9iaW4KK3Vzci9zYmluCit1c3Ivc2hhcmUvbWFuCit1c3Ivc2hhcmUvbG9jYWxlCitldGMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vZTJmc3Byb2dzLnByZWluc3QgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5wcmVpbnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYTlmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5wcmVpbnN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCisjIEFib3J0IG9uIGVycm9yLgorc2V0IC1lCisKK1BLRz1lMmZzcHJvZ3MKK0RPQ0xOSz0vdXNyL3NoYXJlL2RvYy8kUEtHCitpZiB0ZXN0ICIkMSIgPSB1cGdyYWRlIFwKKyAgICAtYSAtTCAkRE9DTE5LCit0aGVuCisgICAgcm0gJERPQ0xOSworZmkKKworIyBkaF9pbnN0YWxsZGViIHdpbGwgcmVwbGFjZSB0aGlzIHdpdGggc2hlbGwgY29kZSBhdXRvbWF0aWNhbGx5CisjIGdlbmVyYXRlZCBieSBvdGhlciBkZWJoZWxwZXIgc2NyaXB0cy4KKworI0RFQkhFTFBFUiMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5zaGxpYnMubG9jYWwuaW4gYi9lMmZzcHJvZ3MvZGViaWFuL2UyZnNwcm9ncy5zaGxpYnMubG9jYWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxYjc1YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbC5pbgpAQCAtMCwwICsxLDggQEAKK2xpYmNvbV9lcnIgMiBsaWJjb21lcnIyICg+PSAxLjQyfldJUC0yMDExLTEwLTA1LTEpCitsaWJzcyAyIGxpYnNzMiAoPj0gMS4zNC0xKQoraWZkZWYoYFVUSUxfTElOVVhfTkcnLCwKK2BgbGlidXVpZCAxIGxpYnV1aWQxICg+PSAxLjM0LTEpCitsaWJibGtpZCAxIGxpYmJsa2lkMSAoPj0gMS4zNC0xKQorJycpZG5sCitsaWJleHQyZnMgMiBlMmZzbGlicyAoPSAke1NvdXJjZS1WZXJzaW9ufSkKK2xpYmUycCAyIGUyZnNsaWJzICg9ICR7U291cmNlLVZlcnNpb259KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZC1kZXYuZmlsZXMuaW4gYi9lMmZzcHJvZ3MvZGViaWFuL2xpYmJsa2lkLWRldi5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNkYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZC1kZXYuZmlsZXMuaW4KQEAgLTAsMCArMSw0IEBACit1c3IvbGliLyovbGliYmxraWQqLnNvLioKK3Vzci9pbmNsdWRlL2Jsa2lkCit1c3Ivc2hhcmUvbWFuL21hbjMvbGliYmxraWQuMwordXNyL2xpYi8qL3BrZ2NvbmZpZy9ibGtpZC5wYwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZC5jb3B5cmlnaHQgYi9lMmZzcHJvZ3MvZGViaWFuL2xpYmJsa2lkLmNvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU4MThiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZC5jb3B5cmlnaHQKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBwYWNrYWdlIHdhcyBhZGRlZCB0byB0aGUgZTJmc3Byb2dzIGRlYmlhbiBzb3VyY2UgcGFja2FnZSBieQorVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4gb24gU2F0IE1hciAxNSAxNTozMzozNyBFU1QgMjAwMworCitJdCBpcyBwYXJ0IG9mIHRoZSBtYWluIGUyZnNwcm9ncyBkaXN0cmlidXRpb24sIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzCisKK1Vwc3RyZWFtIEF1dGhvcjogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKworQ29weXJpZ2h0OgorCitDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEgYnkgQW5kcmllcyBCcm91d2VyCitDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworCitZb3UgYXJlIGZyZWUgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitMZXNzZXIgKExpYnJhcnkpIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK09uIERlYmlhbiBzeXN0ZW1zLCB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgR05VIExlc3NlciAoTGlicmFyeSkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIGZvdW5kIGluIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGliYmxraWQxLmZpbGVzLmluIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZDEuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlZjg2ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGliYmxraWQxLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYmJsa2lkKi5zby4qCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2xpYmJsa2lkMS5zeW1ib2xzIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZDEuc3ltYm9scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI5MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJibGtpZDEuc3ltYm9scwpAQCAtMCwwICsxLDQxIEBACitsaWJibGtpZC5zby4xIGxpYmJsa2lkMSAjTUlOVkVSIworIGJsa2lkX19zY2FuX2RpckBCYXNlIDEuNDEuMQorIGJsa2lkX2RlYnVnX21hc2tAQmFzZSAxLjMzCisgYmxraWRfZGV2X2Rldm5hbWVAQmFzZSAxLjMzCisgYmxraWRfZGV2X2hhc190YWdAQmFzZSAxLjM4CisgYmxraWRfZGV2X2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjMzCisgYmxraWRfZGV2X2l0ZXJhdGVfZW5kQEJhc2UgMS4zMworIGJsa2lkX2Rldl9uZXh0QEJhc2UgMS4zMworIGJsa2lkX2Rldl9zZXRfc2VhcmNoQEJhc2UgMS4zOAorI01JU1NJTkc6IDEuNDEuMSMgYmxraWRfZGV2ZGlyc0BCYXNlIDEuMzQKKyBibGtpZF9kZXZub190b19kZXZuYW1lQEJhc2UgMS4zMworIGJsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnQEJhc2UgMS4zMworIGJsa2lkX2ZpbmRfdGFnX2RldkBCYXNlIDEuMzMKKyBibGtpZF9mbHVzaF9jYWNoZUBCYXNlIDEuMzMKKyBibGtpZF9mcmVlX2RldkBCYXNlIDEuMzMKKyBibGtpZF9mcmVlX3RhZ0BCYXNlIDEuMzMKKyBibGtpZF9nY19jYWNoZUBCYXNlIDEuNDAKKyBibGtpZF9nZXRfY2FjaGVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2RldkBCYXNlIDEuMzMKKyBibGtpZF9nZXRfZGV2X3NpemVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2Rldm5hbWVAQmFzZSAxLjMzCisgYmxraWRfZ2V0X2xpYnJhcnlfdmVyc2lvbkBCYXNlIDEuMzcKKyBibGtpZF9nZXRfdGFnX3ZhbHVlQEJhc2UgMS4zMworIGJsa2lkX2tub3duX2ZzdHlwZUBCYXNlIDEuMzQKKyBibGtpZF9sbHNlZWtAQmFzZSAxLjMzCisgYmxraWRfbmV3X2RldkBCYXNlIDEuMzMKKyBibGtpZF9wYXJzZV90YWdfc3RyaW5nQEJhc2UgMS4zMworIGJsa2lkX3BhcnNlX3ZlcnNpb25fc3RyaW5nQEJhc2UgMS4zNworIGJsa2lkX3Byb2JlX2FsbEBCYXNlIDEuMzMKKyBibGtpZF9wcm9iZV9hbGxfbmV3QEJhc2UgMS4zOAorIGJsa2lkX3B1dF9jYWNoZUBCYXNlIDEuMzMKKyBibGtpZF9yZWFkX2NhY2hlQEJhc2UgMS4zMworIGJsa2lkX3NldF90YWdAQmFzZSAxLjMzCisgYmxraWRfc3RyZHVwQEJhc2UgMS4zMworIGJsa2lkX3N0cm5kdXBAQmFzZSAxLjMzCisgYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW5AQmFzZSAxLjMzCisgYmxraWRfdGFnX2l0ZXJhdGVfZW5kQEJhc2UgMS4zMworIGJsa2lkX3RhZ19uZXh0QEJhc2UgMS4zMworIGJsa2lkX3ZlcmlmeUBCYXNlIDEuMzcKKyNNSVNTSU5HOiAxLjQwLjcjIGNoZWNrX2Zvcl9tb2R1bGVzQEJhc2UgMS40MC42CisjTUlTU0lORzogMS40MC43IyBmc19wcm9jX2NoZWNrQEJhc2UgMS40MC42CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2xpYmNvbWVycjIuY29weXJpZ2h0IGIvZTJmc3Byb2dzL2RlYmlhbi9saWJjb21lcnIyLmNvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzg2MjhhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJjb21lcnIyLmNvcHlyaWdodApAQCAtMCwwICsxLDI0IEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHByZXBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIENvbW1vbiBFcnJvcgorRGVzY3JpcHRpb24gbGlicmFyeS4gSXQgaXMgY3VycmVudGx5IGRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIEVYVDIgZmlsZQorc3lzdGVtIHV0aWxpdGllcywgd2hpY2ggYXJlIG90aGVyd2lzZSBwYWNrYWdlZCBhcyAiZTJmc3Byb2dzIi4KKworVGhpcyBwYWNrYWdlIHdhcyBwdXQgdG9nZXRoZXIgYnkgWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiwKK2Zyb20gc291cmNlcyBvYnRhaW5lZCBmcm9tIGEgbWlycm9yIG9mOgorIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvcGFja2FnZXMvZXh0MmZzLworCitGcm9tIHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb246CisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKwlvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCithbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKK2FwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorYW5kIHRoYXQgdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCitvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0Cit0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcworcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGliY29tZXJyMi5maWxlcy5pbiBiL2UyZnNwcm9ncy9kZWJpYW4vbGliY29tZXJyMi5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMzllCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJjb21lcnIyLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYmNvbV9lcnIqLnNvLioKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGliY29tZXJyMi5zeW1ib2xzIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJjb21lcnIyLnN5bWJvbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzYjc0YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGliY29tZXJyMi5zeW1ib2xzCkBAIC0wLDAgKzEsMjEgQEAKK2xpYmNvbV9lcnIuc28uMiBsaWJjb21lcnIyICNNSU5WRVIjCisgX2V0X2R5bmFtaWNfbGlzdEBCYXNlIDEuMzgKKyBfZXRfbGlzdEBCYXNlIDEuMDEKKyBhZGRfZXJyb3JfdGFibGVAQmFzZSAxLjM0CisgYWRkX3RvX2Vycm9yX3RhYmxlQEJhc2UgMS4zNAorIGNvbV9lcnJAQmFzZSAxLjAxCisgY29tX2Vycl9ob29rQEJhc2UgMS4wMQorIGNvbV9lcnJfdmFAQmFzZSAxLjAxCisgY29tX3JpZ2h0QEJhc2UgMS4zNAorIGNvbV9yaWdodF9yQEJhc2UgMS40MS4xMQorIGVycm9yX21lc3NhZ2VAQmFzZSAxLjAxCisgZXJyb3JfdGFibGVfbmFtZUBCYXNlIDEuMDEKKyBldF9saXN0X2xvY2tAQmFzZSAxLjQxLjIKKyBldF9saXN0X3VubG9ja0BCYXNlIDEuNDEuMgorIGZyZWVfZXJyb3JfdGFibGVAQmFzZSAxLjM0CisgaW5pdF9lcnJvcl90YWJsZUBCYXNlIDEuMDEKKyBpbml0aWFsaXplX2Vycm9yX3RhYmxlX3JAQmFzZSAxLjM0CisgcmVtb3ZlX2Vycm9yX3RhYmxlQEJhc2UgMS4zNAorIHJlc2V0X2NvbV9lcnJfaG9va0BCYXNlIDEuMDEKKyBzZXRfY29tX2Vycl9nZXR0ZXh0QEJhc2UgMS40MS45OQorIHNldF9jb21fZXJyX2hvb2tAQmFzZSAxLjAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2xpYnNzMi5jb3B5cmlnaHQgYi9lMmZzcHJvZ3MvZGViaWFuL2xpYnNzMi5jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyNjFjMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlic3MyLmNvcHlyaWdodApAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHByZXBhY2thZ2VkIHZlcnNpb24gb2YgdGhlIHNzCitjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHBhcnNpbmcgbGlicmFyeSBsaWJyYXJ5LiBJdCBpcyBjdXJyZW50bHkKK2Rpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIEVYVDIgZmlsZSBzeXN0ZW0gdXRpbGl0aWVzLCB3aGljaCBhcmUKK290aGVyd2lzZSBwYWNrYWdlZCBhcyAiZTJmc3Byb2dzIi4KKworVGhpcyBwYWNrYWdlIHdhcyBwdXQgdG9nZXRoZXIgYnkgWWFubiBEaXJzb24gPGRpcnNvbkBkZWJpYW4ub3JnPiwKK2Zyb20gc291cmNlcyBvYnRhaW5lZCBmcm9tIGEgbWlycm9yIG9mOgorIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvcGFja2FnZXMvZXh0MmZzLworCitGcm9tIHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb246CisKK0NvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKwlvZiB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCithbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UKK2FwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorYW5kIHRoYXQgdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCitvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0Cit0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcworcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGlic3MyLmZpbGVzLmluIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJzczIuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2ZTE4NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlic3MyLmZpbGVzLmluCkBAIC0wLDAgKzEgQEAKK2xpYi8qL2xpYnNzKi5zby4qCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL2xpYnNzMi5zeW1ib2xzIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJzczIuc3ltYm9scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmZlNDBiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJzczIuc3ltYm9scwpAQCAtMCwwICsxLDM1IEBACitsaWJzcy5zby4yIGxpYnNzMiAjTUlOVkVSIworIF9zc19wYWdlcl9uYW1lQEJhc2UgMS4wMQorIF9zc190YWJsZUBCYXNlIDEuMDEKKyBldF9zc19lcnJvcl90YWJsZUBCYXNlIDEuMzUKKyBpbml0aWFsaXplX3NzX2Vycm9yX3RhYmxlQEJhc2UgMS4wMQorIGluaXRpYWxpemVfc3NfZXJyb3JfdGFibGVfckBCYXNlIDEuMzQKKyBzc19hYm9ydF9zdWJzeXN0ZW1AQmFzZSAxLjAxCisgc3NfYWRkX2luZm9fZGlyQEJhc2UgMS4wMQorIHNzX2FkZF9yZXF1ZXN0X3RhYmxlQEJhc2UgMS4wMQorIHNzX2NyZWF0ZV9pbnZvY2F0aW9uQEJhc2UgMS4wMQorIHNzX2RlbGV0ZV9pbmZvX2RpckBCYXNlIDEuMDEKKyBzc19kZWxldGVfaW52b2NhdGlvbkBCYXNlIDEuMDEKKyBzc19kZWxldGVfcmVxdWVzdF90YWJsZUBCYXNlIDEuMDEKKyBzc19lcnJvckBCYXNlIDEuMDEKKyBzc19leGVjdXRlX2NvbW1hbmRAQmFzZSAxLjAxCisgc3NfZXhlY3V0ZV9saW5lQEJhc2UgMS4wMQorIHNzX2dldF9wcm9tcHRAQmFzZSAxLjAxCisgc3NfZ2V0X3JlYWRsaW5lQEJhc2UgMS4zNAorIHNzX2hlbHBAQmFzZSAxLjAxCisgc3NfbGlzdF9yZXF1ZXN0c0BCYXNlIDEuMDEKKyBzc19saXN0ZW5AQmFzZSAxLjAxCisgc3NfbmFtZUBCYXNlIDEuMDEKKyBzc19wYWdlX3N0ZGluQEJhc2UgMS4wMQorIHNzX3BhZ2VyX2NyZWF0ZUBCYXNlIDEuMDEKKyBzc19wYXJzZUBCYXNlIDEuMDEKKyBzc19wZXJyb3JAQmFzZSAxLjAxCisgc3NfcXVpdEBCYXNlIDEuMDEKKyBzc19ybF9jb21wbGV0aW9uQEJhc2UgMS4zNAorIHNzX3NhZmVfZ2V0ZW52QEJhc2UgMS4zOAorIHNzX3NlbGZfaWRlbnRpZnlAQmFzZSAxLjAxCisgc3Nfc2V0X3Byb21wdEBCYXNlIDEuMDEKKyBzc19zdGRfcmVxdWVzdHNAQmFzZSAxLjAxCisgc3Nfc3Vic3lzdGVtX25hbWVAQmFzZSAxLjAxCisgc3Nfc3Vic3lzdGVtX3ZlcnNpb25AQmFzZSAxLjAxCisgc3NfdW5pbXBsZW1lbnRlZEBCYXNlIDEuMDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEuY29weXJpZ2h0IGIvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0NjczOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEuY29weXJpZ2h0CkBAIC0wLDAgKzEsMzggQEAKK1RoaXMgcGFja2FnZSB3YXMgYWRkZWQgdG8gdGhlIGUyZnNwcm9ncyBkZWJpYW4gc291cmNlIHBhY2thZ2UgYnkKK1RoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IG9uIFNhdCBNYXIgMTUgMTU6MzM6MzcgRVNUIDIwMDMKKworSXQgaXMgcGFydCBvZiB0aGUgbWFpbiBlMmZzcHJvZ3MgZGlzdHJpYnV0aW9uLCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncworCitVcHN0cmVhbSBBdXRob3I6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisKK0NvcHlyaWdodDoKKworQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCitXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5maWxlcy5pbiBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEuZmlsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2MWYzYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEuZmlsZXMuaW4KQEAgLTAsMCArMSBAQAorbGliLyovbGlidXVpZCouc28uKgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5wb3N0aW5zdCBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEucG9zdGluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzNmZjZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEucG9zdGluc3QKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCitBRERVU0VSQ09ORj0nL2V0Yy9hZGR1c2VyLmNvbmYnCisKK2lmIHRlc3QgLWYgJEFERFVTRVJDT05GOyB0aGVuCisgICAgRklSU1RfU1lTVEVNX1VJRD0kKHNlZCAtbiAicy9eW1s6c3BhY2U6XV0qRklSU1RfU1lTVEVNX1VJRFtbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSpbXCInXVw/XChbXlwiJ10qXClbXCInXVw/L1wxL3AiICRBRERVU0VSQ09ORikKKyAgICBMQVNUX1NZU1RFTV9VSUQ9JChzZWQgLW4gInMvXltbOnNwYWNlOl1dKkxBU1RfU1lTVEVNX1VJRFtbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSpbXCInXVw/XChbXlwiJ10qXClbXCInXVw/L1wxL3AiICRBRERVU0VSQ09ORikKKyAgICBGSVJTVF9TWVNURU1fR0lEPSQoc2VkIC1uICJzL15bWzpzcGFjZTpdXSpGSVJTVF9TWVNURU1fR0lEW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKltcIiddXD9cKFteXCInXSpcKVtcIiddXD8vXDEvcCIgJEFERFVTRVJDT05GKQorICAgIExBU1RfU1lTVEVNX0dJRD0kKHNlZCAtbiAicy9eW1s6c3BhY2U6XV0qTEFTVF9TWVNURU1fR0lEW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKltcIiddXD9cKFteXCInXSpcKVtcIiddXD8vXDEvcCIgJEFERFVTRVJDT05GKQorZmkKKworaWYgdGVzdCAteiAiJEZJUlNUX1NZU1RFTV9VSUQiOyB0aGVuCisgICAgRklSU1RfU1lTVEVNX1VJRD0xMDAKK2ZpCitpZiB0ZXN0IC16ICIkTEFTVF9TWVNURU1fVUlEIjsgdGhlbgorICAgIExBU1RfU1lTVEVNX1VJRD05OTkKK2ZpCitpZiB0ZXN0IC16ICIkRklSU1RfU1lTVEVNX0dJRCI7IHRoZW4KKyAgICBGSVJTVF9TWVNURU1fR0lEPTEwMAorZmkKK2lmIHRlc3QgLXogIiRMQVNUX1NZU1RFTV9HSUQiOyB0aGVuCisgICAgTEFTVF9TWVNURU1fR0lEPTk5OQorZmkKKworaWYgISBnZXRlbnQgZ3JvdXAgfCBncmVwIC1xIGxpYnV1aWQ7IHRoZW4KKyAgZ3JvdXBhZGQgLWYgLUsgR0lEX01JTj0kRklSU1RfU1lTVEVNX0dJRCAtSyBHSURfTUFYPSRMQVNUX1NZU1RFTV9HSUQgbGlidXVpZAorZmkKK2lmICEgZ2V0ZW50IHBhc3N3ZCB8IGdyZXAgLXEgbGlidXVpZDsgdGhlbgorICAgdXNlcmFkZCAtZCAvdmFyL2xpYi9saWJ1dWlkIC1LIFVJRF9NSU49JEZJUlNUX1NZU1RFTV9VSUQgLUsgVUlEX01BWD0kTEFTVF9TWVNURU1fVUlEIC1nIGxpYnV1aWQgbGlidXVpZAorZmkKKworbWtkaXIgLXAgL3Zhci9saWIvbGlidXVpZAorY2hvd24gbGlidXVpZDpsaWJ1dWlkIC92YXIvbGliL2xpYnV1aWQKK2NobW9kIDI3NzUgL3Zhci9saWIvbGlidXVpZAorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEucG9zdHJtIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5wb3N0cm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyODZlZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vbGlidXVpZDEucG9zdHJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCitpZiBbICIkMSIgPSBwdXJnZSBdCit0aGVuCisJcm0gLXJmIC92YXIvbGliL2xpYnV1aWQKK2ZpCisKKyNERUJIRUxQRVIjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5zeW1ib2xzIGIvZTJmc3Byb2dzL2RlYmlhbi9saWJ1dWlkMS5zeW1ib2xzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMDA0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL2xpYnV1aWQxLnN5bWJvbHMKQEAgLTAsMCArMSwxOSBAQAorbGlidXVpZC5zby4xIGxpYnV1aWQxICNNSU5WRVIjCisgdXVpZF9fZ2VuZXJhdGVfcmFuZG9tQEJhc2UgMS40MC40CisgdXVpZF9fZ2VuZXJhdGVfdGltZUBCYXNlIDEuNDAuNAorIHV1aWRfY2xlYXJAQmFzZSAxLjA1CisgdXVpZF9jb21wYXJlQEJhc2UgMS4wNQorIHV1aWRfY29weUBCYXNlIDEuMDUKKyB1dWlkX2dlbmVyYXRlQEJhc2UgMS4wNQorIHV1aWRfZ2VuZXJhdGVfcmFuZG9tQEJhc2UgMS4xNQorIHV1aWRfZ2VuZXJhdGVfdGltZUBCYXNlIDEuMTUKKyB1dWlkX2lzX251bGxAQmFzZSAxLjA1CisgdXVpZF9wYWNrQEJhc2UgMS4wNQorIHV1aWRfcGFyc2VAQmFzZSAxLjA1CisgdXVpZF90aW1lQEJhc2UgMS4xNQorIHV1aWRfdHlwZUBCYXNlIDEuMTUKKyB1dWlkX3VucGFja0BCYXNlIDEuMDUKKyB1dWlkX3VucGFyc2VAQmFzZSAxLjA1CisgdXVpZF91bnBhcnNlX2xvd2VyQEJhc2UgMS4zNgorIHV1aWRfdW5wYXJzZV91cHBlckBCYXNlIDEuMzYKKyB1dWlkX3ZhcmlhbnRAQmFzZSAxLjE1CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL3J1bGVzIGIvZTJmc3Byb2dzL2RlYmlhbi9ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDVjZjUwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9ydWxlcwpAQCAtMCwwICsxLDcwMCBAQAorIyEgL3Vzci9iaW4vbWFrZSAtZgorIyAtKi0gbWFrZWZpbGUgLSotCisjCisjIEludm9rZSBlYWNoIHRhcmdldCB3aXRoIGAuL2RlYmlhbi9ydWxlcyA8dGFyZ2V0PicuICBBbGwgdGFyZ2V0cyBzaG91bGQgYmUKKyMgaW52b2tlZCB3aXRoIHRoZSBwYWNrYWdlIHJvb3QgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorIworIyBUaGUgYGJpbmFyeScgdGFyZ2V0IG11c3QgYmUgcnVuIGFzIHJvb3QsIGFzIGl0IG5lZWRzIHRvIGluc3RhbGwgZmlsZXMgd2l0aAorIyBzcGVjaWZpYyBvd25lcnNoaXBzLgorCistaW5jbHVkZSBkZWJpYW4vcnVsZXMuY3VzdG9tCisKKyMgYmUgcGFyYW5vaWQKK2V4cG9ydCBMQ19BTEwgPz0gQworCisjIFRoZXNlIGFyZSB1c2VkIGZvciBjcm9zcy1jb21waWxpbmcgYW5kIGZvciBzYXZpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKyMgZnJvbSBoYXZpbmcgdG8gZ3Vlc3Mgb3VyIHBsYXRmb3JtIChzaW5jZSB3ZSBrbm93IGl0IGFscmVhZHkpCitERUJfSE9TVF9BUkNICQk/PSAkKHNoZWxsIGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSCkKK0RFQl9CVUlMRF9BUkNICQk/PSAkKHNoZWxsIGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0JVSUxEX0FSQ0gpCitERUJfSE9TVF9PUwkJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX09TKQorREVCX0hPU1RfR05VX1RZUEUJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0dOVV9UWVBFKQorREVCX0JVSUxEX0dOVV9UWVBFCT89ICQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfQlVJTERfR05VX1RZUEUpCitERUJfSE9TVF9NVUxUSUFSQ0gJPz0gJChzaGVsbCBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX01VTFRJQVJDSCAyPi9kZXYvbnVsbCkKKworIyBBbGxvdyBkaXN0cm8tc3BlY2lmaWMgYmVoYXZpb3VyCitESVNUUk8gOj0kKHNoZWxsIHNlZCAtbmUgJy9ESVNUUklCX0lEL3MvLio9Ly9wJyAvZXRjL2xzYi1yZWxlYXNlIDI+L2Rldi9udWxsIHx8IGVjaG8gRGViaWFuKQorU1lTX0JMS0lEX1ZFUiA6PSAkKHNoZWxsIGRwa2ctcXVlcnkgLVcgbGliYmxraWQxOiQoREVCX0hPU1RfQVJDSCkgfCBjdXQgLWYgMiB8IGN1dCAtYiAxKQoraWZlcSAoJChTWVNfQkxLSURfVkVSKSwyKQorVVRJTF9MSU5VWF9ORyA/PSB5ZXMKK2VuZGlmCisKKyMgZmluZCB0aGUgdmVyc2lvbiBmb3IgdGhlIG1haW4gcGFja2FnZSwgZnJvbSBjaGFuZ2Vsb2cgZmlsZQorTUFJTl9WRVJTSU9OID0gJChzaGVsbCBoZWFkIC1uIDEgZGViaWFuL2NoYW5nZWxvZyB8IGN1dCAnLWQgJyAtZiAyIHwgc2VkICdzL1soKV0vL2cnKQorIyBmaW5kIHZlcnNpb25zIGZvciBsaWJyYXJpZXMgZ29pbmcgaW50byB0aGVpciBvd24gcGFja2FnZXMsIGZyb20gdGhlaXIgTWFrZWZpbGUuaW4ncywKKyMgYW5kIHNvbmFtZXMgZm9yIGFsbCBsaWJzCitDT01FUlJfVkVSU0lPTiA/PSAkKHNoZWxsIGdyZXAgRUxGX1ZFUlNJT04gbGliL2V0L01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK0NPTUVSUl9TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi9ldC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitTU19WRVJTSU9OID89ICQoc2hlbGwgZ3JlcCBFTEZfVkVSU0lPTiBsaWIvc3MvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorU1NfU09WRVJTSU9OID89ICQoc2hlbGwgZ3JlcCBFTEZfU09fVkVSU0lPTiBsaWIvc3MvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCitVVUlEX1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9WRVJTSU9OIGxpYi91dWlkL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK1VVSURfU09WRVJTSU9OID89ICQoc2hlbGwgZ3JlcCBFTEZfU09fVkVSU0lPTiBsaWIvdXVpZC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCisKK0JMS0lEX1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9WRVJTSU9OIGxpYi9ibGtpZC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitCTEtJRF9TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi9ibGtpZC9NYWtlZmlsZS5pbiB8IGN1dCAnLWQgJyAtZjMpCitlbmRpZgorCitFWFQyRlNfU09WRVJTSU9OID89ICQoc2hlbGwgZ3JlcCBFTEZfU09fVkVSU0lPTiBsaWIvZXh0MmZzL01ha2VmaWxlLmluIHwgY3V0ICctZCAnIC1mMykKK0UyUF9TT1ZFUlNJT04gPz0gJChzaGVsbCBncmVwIEVMRl9TT19WRVJTSU9OIGxpYi9lMnAvTWFrZWZpbGUuaW4gfCBjdXQgJy1kICcgLWYzKQorCitwYWNrYWdlCQk/PSBlMmZzcHJvZ3MKKwordG9wZGlyCQk/PSAkKHNoZWxsIHB3ZCkKK2RlYmRpcgkJPz0gJHt0b3BkaXJ9L2RlYmlhbgordG1wZGlyCQk/PSAke2RlYmRpcn0vdG1wCit1ZGViZGlyCQk/PSAke2RlYmRpcn0vZTJmc3Byb2dzLXVkZWIKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK2Jsa2lkdWRlYmRpcgk/PSAke2RlYmRpcn0vbGliYmxraWQxLXVkZWIKK3V1aWR1ZGViZGlyCT89ICR7ZGViZGlyfS9saWJ1dWlkMS11ZGViCitlbmRpZgorbGliY29tZXJyZGlyCT89ICR7ZGViZGlyfS9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059Citjb21lcnJkZXZkaXIJPz0gJHtkZWJkaXJ9L2NvbWVyci1kZXYKK2xpYmNvbWVycmRiZ2Rpcgk/PSAke2RlYmRpcn0vbGliY29tZXJyMi1kYmcKK2xpYnNzZGlyCT89ICR7ZGViZGlyfS9saWJzcyR7U1NfU09WRVJTSU9OfQorc3NkZXZkaXIJPz0gJHtkZWJkaXJ9L3NzLWRldgorbGlic3NkYmdkaXIJPz0gJHtkZWJkaXJ9L2xpYnNzMi1kYmcKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK2xpYmJsa2lkZGlyCT89ICR7ZGViZGlyfS9saWJibGtpZCR7QkxLSURfU09WRVJTSU9OfQorbGliYmxraWRkZXZkaXIJPz0gJHtkZWJkaXJ9L2xpYmJsa2lkLWRldgorbGliYmxraWRkYmdkaXIJPz0gJHtkZWJkaXJ9L2xpYmJsa2lkMS1kYmcKK2xpYnV1aWRkaXIJPz0gJHtkZWJkaXJ9L2xpYnV1aWQke1VVSURfU09WRVJTSU9OfQordXVpZGRldmRpcgk/PSAke2RlYmRpcn0vdXVpZC1kZXYKK2xpYnV1aWRkYmdkaXIJPz0gJHtkZWJkaXJ9L2xpYnV1aWQxLWRiZwordXVpZHJ1bnRpbWVkaXIJPz0gJHtkZWJkaXJ9L3V1aWQtcnVudGltZQordXVpZHJ1bnRpbWVkYmdkaXIgPz0gJHtkZWJkaXJ9L3V1aWQtcnVudGltZS1kYmcKK2VuZGlmCitsaWJleHQyZGlyCT89ICR7ZGViZGlyfS9lMmZzbGlicworbGliZXh0MmRldmRpcgk/PSAke2RlYmRpcn0vZTJmc2xpYnMtZGV2CitsaWJleHQyZGJnZGlyCT89ICR7ZGViZGlyfS9lMmZzbGlicy1kYmcKK21haW5kaXIJCT89ICR7ZGViZGlyfS9lMmZzcHJvZ3MKK2UyZnNja3N0YXRpY2Rpcgk/PSAke2RlYmRpcn0vZTJmc2NrLXN0YXRpYworZGVidWdkaXIJPz0gJHtkZWJkaXJ9L2UyZnNwcm9ncy1kYmcKK3N0ZGJ1aWxkZGlyCT89ICR7ZGViZGlyfS9CVUlMRC1TVEQKK3N0YXRpY2J1aWxkZGlyCT89ICR7ZGViZGlyfS9CVUlMRC1TVEFUSUMKK21pcHNidWlsZGRpcgk/PSAke2RlYmRpcn0vQlVJTEQtTUlQUworbWlwc2J1aWxkZGlyNjQJPz0gJHtkZWJkaXJ9L0JVSUxELU1JUFMtNjQKKyMgZG9jZGlyCT89ICR7bWFpbmRpcn0vdXNyL3NoYXJlL2RvYy8ke3BhY2thZ2V9CitNQU5ESVIJCT89IC91c3Ivc2hhcmUvbWFuCittYW5kaXIJCT89ICR7dG1wZGlyfSR7TUFORElSfQorCitVREVCX05BTUUgCT89ICQocGFja2FnZSktdWRlYl8kKE1BSU5fVkVSU0lPTilfJChERUJfSE9TVF9BUkNIKS51ZGViCitVREVCX1BSSU9SSVRZCT89ICQoc2hlbGwgZ3JlcCAnXlBhY2thZ2U6IGUyZnNwcm9ncy11ZGViJyBkZWJpYW4vY29udHJvbC5pbiAtQSAxMCB8IGdyZXAgXlByaW9yaXR5OiB8IGN1dCAtZCAnICcgLWYgMikKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorQkxLSURfVURFQl9OQU1FID89IGxpYmJsa2lkMS11ZGViXyQoTUFJTl9WRVJTSU9OKV8kKERFQl9IT1NUX0FSQ0gpLnVkZWIKK0JMS0lEX1VERUJfUFJJT1JJVFkgPz0gJChzaGVsbCBncmVwICdeUGFja2FnZTogbGliYmxraWQxLXVkZWInIGRlYmlhbi9jb250cm9sLmluIC1BIDEwIHwgZ3JlcCBeUHJpb3JpdHk6IHwgY3V0IC1kICcgJyAtZiAyKQorCitVVUlEX1VERUJfTkFNRSA/PSBsaWJ1dWlkMS11ZGViXyQoTUFJTl9WRVJTSU9OKV8kKERFQl9IT1NUX0FSQ0gpLnVkZWIKK1VVSURfVURFQl9QUklPUklUWSA/PSAkKHNoZWxsIGdyZXAgJ15QYWNrYWdlOiBsaWJ1dWlkMS11ZGViJyBkZWJpYW4vY29udHJvbC5pbiAtQSAxMCB8IGdyZXAgXlByaW9yaXR5OiB8IGN1dCAtZCAnICcgLWYgMikKK2VuZGlmCisKK1NUQU1QU0RJUgk/PSBkZWJpYW4vc3RhbXBkaXIKK0NGR1NURFNUQU1QCT89ICR7U1RBTVBTRElSfS9jb25maWd1cmUtc3RkLXN0YW1wCitDRkdCRlNUQU1QCT89ICR7U1RBTVBTRElSfS9jb25maWd1cmUtYmYtc3RhbXAKK0NGR1NUQVRJQ1NUQU1QCT89ICR7U1RBTVBTRElSfS9jb25maWd1cmUtc3RhdGljLXN0YW1wCitCVUlMRFNURFNUQU1QCT89ICR7U1RBTVBTRElSfS9idWlsZC1zdGQtc3RhbXAKK0JVSUxEQkZTVEFNUAk/PSAke1NUQU1QU0RJUn0vYnVpbGQtYmYtc3RhbXAKK0JVSUxEU1RBVElDU1RBTVAgPz0ke1NUQU1QU0RJUn0vYnVpbGQtc3RhdGljLXN0YW1wCisKK0lOU1RBTEwgPz0gaW5zdGFsbAorSU5TVEFMTF9QUk9HUkFNID89ICQoSU5TVEFMTCkgLXAgLW8gcm9vdCAtZyByb290IC1tIDA3NTUKKworI2lmZXEgKCwkKGZpbmRzdHJpbmcgbm9zdHJpcCwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisjSU5TVEFMTF9QUk9HUkFNICs9IC1zCisjZW5kaWYKKworREVGQVVMVF9DRkxBR1MgPz0gLWcgLU8yCitERUZBVUxUX0xERkxBR1MgPz0gLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCisKK0NGTEFHUyA/PSAkKHNoZWxsIGlmIGRwa2ctYnVpbGRmbGFncyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbiBcCisJZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHUzsgZWxzZSBlY2hvICQoREVGQVVMVF9DRkxBR1MpIDsgZmkpCitMREZMQUdTID89ICQoc2hlbGwgaWYgZHBrZy1idWlsZGZsYWdzID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuIFwKKwlkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHUzsgZWxzZSBlY2hvICQoREVGQVVMVF9MREZMQUdTKSA7IGZpKQorQ1BQRkxBR1MgPz0gJChzaGVsbCBpZiBkcGtnLWJ1aWxkZmxhZ3MgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4gXAorCWRwa2ctYnVpbGRmbGFncyAtLWdldCBDUFBGTEFHUzsgZmkpCisKK2lmZXEgKCR7REVCX0hPU1RfQVJDSH0sYWxwaGEpCitDRkxBR1MgKz0gLURIQVZFX05FVElORVRfSU5fSAorZWxzZQorQ0ZMQUdTICs9IC1EX19OT19TVFJJTkdfSU5MSU5FUworZW5kaWYKKworaWZuZXEgKCR7REVCX0hPU1RfQVJDSF9PU30sbGludXgpCitTS0lQX1NUQVRJQyA9IHllcworZW5kaWYKKworaWZlcSAoJChTS0lQX1NUQVRJQykseWVzKQorQlVJTERfU1RBVElDID0KK0UyRlNDS19TVEFUSUMgPSAke3N0ZGJ1aWxkZGlyfS9lMmZzY2svZTJmc2NrLnN0YXRpYworZWxzZQorQlVJTERfU1RBVElDID0gYnVpbGQtc3RhdGljCitFMkZTQ0tfU1RBVElDID0gJHtzdGF0aWNidWlsZGRpcn0vZTJmc2NrL2UyZnNjay5zdGF0aWMKK2VuZGlmCisKK2lmZXEgKCQoU0tJUF9CRikseWVzKQorQlVJTERfQkYgPQorYmZidWlsZGRpcgk/PSAke3N0ZGJ1aWxkZGlyfQorZWxzZQorQlVJTERfQkYgPSBidWlsZC1iZgorYmZidWlsZGRpcgk/PSAke2RlYmRpcn0vQlVJTEQtQkYKK2VuZGlmCisKK0JGX0NGTEFHUyA9IC1PcyAtZm9taXQtZnJhbWUtcG9pbnRlcgorCitDT01NT05fQ09ORl9GTEFHUyA9IC0tZGlzYWJsZS1lMmluaXRyZC1oZWxwZXIgLS1lbmFibGUtZWxmLXNobGlicyBcCisJLS1lbmFibGUtcXVvdGEgLS1pbmZvZGlyPS91c3Ivc2hhcmUvaW5mbworaWZlcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCitDT01NT05fQ09ORl9GTEFHUyArPSAtLWRpc2FibGUtZnNjayAtLWRpc2FibGUtbGliYmxraWQgXAorCQkJLS1kaXNhYmxlLWxpYnV1aWQgLS1kaXNhYmxlLXV1aWRkCitlbHNlCitDT01NT05fQ09ORl9GTEFHUyArPSAtLWVuYWJsZS1mc2NrCitlbmRpZgorCitpZm5lcSAoJChzdHJpcCAkKERFQl9IT1NUX01VTFRJQVJDSCkpLCkKK01VTFRJQVJDSF9DT05GID89IC0td2l0aC1tdWx0aWFyY2g9JChERUJfSE9TVF9NVUxUSUFSQ0gpCisjIFRoaXMgZG9lc24ndCB3b3JrIHlldCBiZWNhdXNlIGdkYiBhbmQgbGludGlhbiBkb24ndCBleHBlY3QgYW5kL29yCisjIGRvbid0IHdvcmsgd2l0aCAvdXNyL2xpYi88dHJpcGxldD4vZGVidWcKKyNVU1JMSUIgPSAvdXNyL2xpYi8kKERFQl9IT1NUX01VTFRJQVJDSCkKK1VTUkxJQiA/PSAvdXNyL2xpYgorZWxzZQorVVNSTElCID89IC91c3IvbGliCitlbmRpZgorCitCQUNLVFJBQ0VfQ09ORl9GTEFHUyA/PSAkKHNoZWxsIGlmICR7ZGViZGlyfS9zY3JpcHRzL3Rlc3QtYmFja3RyYWNlIDsgdGhlbiBlY2hvIC0tZGlzYWJsZS1iYWNrdHJhY2UgOyBmaSkKKworU1REX0NPTkZfRkxBR1MgPz0gLS1lbmFibGUtc3ltbGluay1pbnN0YWxsICQoTVVMVElBUkNIX0NPTkYpICQoQkFDS1RSQUNFX0NPTkZfRkxBR1MpCisKK0JGX0NPTkZfRkxBR1MgPz0gLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtaW1hZ2VyIC0tZGlzYWJsZS10ZXN0aW8tZGVidWcgXAorCS0tZGlzYWJsZS11dWlkZCAtLWRpc2FibGUtdGxzIC0tZGlzYWJsZS1kZWJ1Z2ZzCisKK1NUQVRJQ19DT05GX0ZMQUdTID89IC0tZGlzYWJsZS1ubHMgLS1kaXNhYmxlLWltYWdlciBcCisJLS1kaXNhYmxlLXV1aWRkIC0tZGlzYWJsZS10bHMKKworTUlQU19OT1BJQ19DT05GX0ZMQUdTID89IC0tZGlzYWJsZS1ubHMgLS1kaXNhYmxlLWltYWdlciBcCisJLS1kaXNhYmxlLXV1aWRkIC0tZGlzYWJsZS10bHMgXAorICAgICAgICAtLWRpc2FibGUtcmVzaXplciAjIC0tZGlzYWJsZS1kZWJ1Z2ZzCisKKyMgd2UgY2FuJ3QgdXNlIHRob3NlIGZsYWdzIGF0IGNvbmZpZ3VyZSB0aW1lCitNSVBTX0NGTEFHUyA/PSAtRyAwIC1mbm8tcGljIC1tbm8tYWJpY2FsbHMKK01JUFNfQ0ZMQUdTXzY0ID89IC1tYWJpPTY0IC1HIDAgLWZuby1waWMgLW1uby1hYmljYWxscworCitpZmVxICgkKERFQl9CVUlMRF9BUkNIKSwkKERFQl9IT1NUX0FSQ0gpKQoraWZuZXEgKCwkKGZpbmRzdHJpbmcgJChERUJfQlVJTERfQVJDSCksbWlwcyBtaXBzZWwpKQoraXNtaXBzPWlzbWlwcworZW5kaWYKK2VuZGlmCisKK000X0FSR1M9CitpZmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK000X0FSR1MrPS1EVVRJTF9MSU5VWF9ORworZWxzZQorTTRfQVJHUys9LVVVVElMX0xJTlVYX05HCitlbmRpZgorCitpZm5lcSAoJChzdHJpcCAkKERFQl9IT1NUX01VTFRJQVJDSCkpLCkKK000X0FSR1MrPS1ERE9fTVVMVElBUkNICitlbHNlCitNNF9BUkdTKz0tVURPX01VTFRJQVJDSAorZW5kaWYKKworaWZuZXEgKCQoU0tJUF9ESUVUTElCQyksKQorTTRfQVJHUys9LVVESUVUTElCQworV0lUSF9ESUVUX0xJQkMgPSAKK2Vsc2UKK000X0FSR1MrPS1ERElFVExJQkMKK1dJVEhfRElFVF9MSUJDID0gLS13aXRoLWRpZXQtbGliYyAKK2VuZGlmCisKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorTTRfQVJHUys9LURFMkZTQ0tfU1RBVElDCitlbHNlCitNNF9BUkdTKz0tVUUyRlNDS19TVEFUSUMKK2VuZGlmCisKK0ZJTEVTX0ZJWFVQPSBsaWJjb21lcnIyLmZpbGVzIGNvbWVyci1kZXYuZmlsZXMgbGlic3MyLmZpbGVzIHNzLWRldi5maWxlcyBcCisJbGlidXVpZDEuZmlsZXMgdXVpZC1kZXYuZmlsZXMgbGliYmxraWQxLmZpbGVzIGxpYmJsa2lkLWRldi5maWxlcyBcCisJZTJmc2xpYnMuZmlsZXMgZTJmc2xpYnMtZGV2LmZpbGVzCisKK2RlYmlhbi1maWxlczogZGViaWFuL2NvbnRyb2wgZGViaWFuL2UyZnNwcm9ncy5zaGxpYnMubG9jYWwKK2lmZXEgKCQoc3RyaXAgJChERUJfSE9TVF9NVUxUSUFSQ0gpKSwpCisJZm9yIGkgaW4gJChGSUxFU19GSVhVUCk7IGRvIFwKKwkJc2VkIC1lICdzO2xpYi9cKi87bGliLzsnIGRlYmlhbi8kJGkuaW4gPiBkZWJpYW4vJCRpOyBcCisJZG9uZQorZWxzZQorCWZvciBpIGluICQoRklMRVNfRklYVVApOyBkbyBjcCBkZWJpYW4vJCRpLmluIGRlYmlhbi8kJGk7IGRvbmUKK2VuZGlmCisKK21ycHJvcGVyOiBjbGVhbgorCXJtIGRlYmlhbi9jb250cm9sIGRlYmlhbi9lMmZzcHJvZ3Muc2hsaWJzLmxvY2FsCisKK2RlYmlhbi9jb250cm9sOiBkZWJpYW4vY29udHJvbC5pbiBkZWJpYW4vcnVsZXMKKwltNCAkKE00X0FSR1MpIDwgZGViaWFuL2NvbnRyb2wuaW4gfCBncmVwIC12IF5SRU1PVkVfTUUkJCA+ICRACisKK2RlYmlhbi9lMmZzcHJvZ3Muc2hsaWJzLmxvY2FsOiBkZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbC5pbgorCW00ICQoTTRfQVJHUykgPCBkZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbC5pbiA+ICRACisKKyR7Q0ZHU1REU1RBTVB9OgorCWRoX3Rlc3RkaXIKKworCSMgTWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byByZWJ1aWxkIHRoZSBjb25maWd1cmUgc2NyaXB0cworCWZpbmQgLiAtbmFtZSBjb25maWd1cmUgfCB4YXJncyB0b3VjaAorCisJbWtkaXIgLXAgJHtzdGRidWlsZGRpcn0KK2lmZXEgKCQoREVCX0JVSUxEX0FSQ0gpLCQoREVCX0hPU1RfQVJDSCkpCisJY2QgJHtzdGRidWlsZGRpcn0gJiYgQVdLPS91c3IvYmluL2F3ayBcCisJCSR7dG9wZGlyfS9jb25maWd1cmUgJHtDT01NT05fQ09ORl9GTEFHU30gJHtTVERfQ09ORl9GTEFHU30gJHtFWFRSQV9DT05GX0ZMQUdTfSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbHNlCisJY2QgJHtzdGRidWlsZGRpcn0gJiYgQVdLPS91c3IvYmluL2F3ayBDQz0iJHtERUJfSE9TVF9HTlVfVFlQRX0tZ2NjIiBcCisJCSR7dG9wZGlyfS9jb25maWd1cmUgJHtDT01NT05fQ09ORl9GTEFHU30gJHtTVERfQ09ORl9GTEFHU30gJHtFWFRSQV9DT05GX0ZMQUdTfSBcCisJCS0tYnVpbGQ9JChERUJfQlVJTERfR05VX1RZUEUpIC0taG9zdD0kKERFQl9IT1NUX0dOVV9UWVBFKSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbmRpZgorCisgICMgc3BlY2lhbGx5LWJ1aWx0IE1JUFMgbGlicworaWZuZXEgKCQoaXNtaXBzKSwpCisJbWtkaXIgLXAgJHttaXBzYnVpbGRkaXJ9ICR7bWlwc2J1aWxkZGlyNjR9CisJY2QgJHttaXBzYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7TUlQU19OT1BJQ19DT05GX0ZMQUdTfSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCisJY2QgJHttaXBzYnVpbGRkaXI2NH0gJiYgQVdLPS91c3IvYmluL2F3ayBcCisJCSR7dG9wZGlyfS9jb25maWd1cmUgJHtNSVBTX05PUElDX0NPTkZfRkxBR1N9IFwKKwkJQ0ZMQUdTPSIke0NGTEFHU30iIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKK2VuZGlmCisKKwlta2RpciAtcCAke1NUQU1QU0RJUn0KKwl0b3VjaCAke0NGR1NURFNUQU1QfQorCiske0NGR0JGU1RBTVB9OgorCWRoX3Rlc3RkaXIKKwlybSAtZiBjb25maWcuY2FjaGUKKworCW1rZGlyIC1wICR7YmZidWlsZGRpcn0KK2lmZXEgKCQoREVCX0JVSUxEX0FSQ0gpLCQoREVCX0hPU1RfQVJDSCkpCisJY2QgJHtiZmJ1aWxkZGlyfSAmJiBBV0s9L3Vzci9iaW4vYXdrIFwKKwkJJHt0b3BkaXJ9L2NvbmZpZ3VyZSAke0NPTU1PTl9DT05GX0ZMQUdTfSAke0JGX0NPTkZfRkxBR1N9ICR7RVhUUkFfQ09ORl9GTEFHU30gXAorCQlDRkxBR1M9IiR7Q0ZMQUdTfSAke0JGX0NGTEFHU30iIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKK2Vsc2UKKwljZCAke2JmYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgQ0M9IiR7REVCX0hPU1RfR05VX1RZUEV9LWdjYyIgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7Q09NTU9OX0NPTkZfRkxBR1N9ICR7QkZfQ09ORl9GTEFHU30gJHtFWFRSQV9DT05GX0ZMQUdTfSBcCisJCS0tYnVpbGQ9JChERUJfQlVJTERfR05VX1RZUEUpIC0taG9zdD0kKERFQl9IT1NUX0dOVV9UWVBFKSBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiCitlbmRpZgorCW1rZGlyIC1wICR7U1RBTVBTRElSfQorCXRvdWNoICR7Q0ZHQkZTVEFNUH0KKworJHtDRkdTVEFUSUNTVEFNUH06CisJZGhfdGVzdGRpcgorCXJtIC1mIGNvbmZpZy5jYWNoZQorCisJbWtkaXIgLXAgJHtzdGF0aWNidWlsZGRpcn0KK2lmZXEgKCQoREVCX0JVSUxEX0FSQ0gpLCQoREVCX0hPU1RfQVJDSCkpCisJaWYgdHlwZSBkaWV0ID4gL2Rldi9udWxsICAyPiYxIDsgdGhlbiBcCisJCWNkICR7c3RhdGljYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgXAorCQkke3RvcGRpcn0vY29uZmlndXJlICR7U1RBVElDX0NPTkZfRkxBR1N9ICR7RVhUUkFfQ09ORl9GTEFHU30gXAorCQkke1dJVEhfRElFVF9MSUJDfSBDRkxBR1M9IiR7Q0ZMQUdTfSIgXAorCQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiOyBcCisJZWxzZSBcCisJCWNkICR7c3RhdGljYnVpbGRkaXJ9ICYmIEFXSz0vdXNyL2Jpbi9hd2sgXAorCQkJJHt0b3BkaXJ9L2NvbmZpZ3VyZSAke1NUQVRJQ19DT05GX0ZMQUdTfSAke0VYVFJBX0NPTkZfRkxBR1N9IFwKKwkJCUNGTEFHUz0iJHtDRkxBR1N9IiBDUFBGTEFHUz0iJChDUFBGTEFHUykiIFwKKwkJCUxERkxBR1M9IiQoTERGTEFHUykiOyBcCisJZmkKK2Vsc2UKKwljZCAke3N0YXRpY2J1aWxkZGlyfSAmJiBBV0s9L3Vzci9iaW4vYXdrIENDPSIke0RFQl9IT1NUX0dOVV9UWVBFfS1nY2MiIFwKKwkJJHt0b3BkaXJ9L2NvbmZpZ3VyZSAke0NPTU1PTl9DT05GX0ZMQUdTfSAke1NUQVRJQ19DT05GX0ZMQUdTfSAke0VYVFJBX0NPTkZfRkxBR1N9IFwKKwkJLS1idWlsZD0kKERFQl9CVUlMRF9HTlVfVFlQRSkgLS1ob3N0PSQoREVCX0hPU1RfR05VX1RZUEUpIFwKKwkJQ0ZMQUdTPSIke0NGTEFHU30iIENQUEZMQUdTPSIkKENQUEZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIKK2VuZGlmCisJbWtkaXIgLXAgJHtTVEFNUFNESVJ9CisJdG91Y2ggJHtDRkdTVEFUSUNTVEFNUH0KKworYnVpbGQtYXJjaDogYnVpbGQKK2J1aWxkLWluZGVwOiBidWlsZAorYnVpbGQ6IGJ1aWxkLXN0ZCAkKEJVSUxEX0JGKSAkKEJVSUxEX1NUQVRJQykKKworYnVpbGQtc3RkOiAke0JVSUxEU1REU1RBTVB9Ciske0JVSUxEU1REU1RBTVB9OiAke0NGR1NURFNUQU1QfQorCWRoX3Rlc3RkaXIKKwkkKE1BS0UpIC1DICR7c3RkYnVpbGRkaXJ9IFY9MSBhbGwKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorCSQoTUFLRSkgLUMgJHtzdGRidWlsZGRpcn0vZTJmc2NrIFY9MSBlMmZzY2suc3RhdGljCitlbmRpZgorCSQoTUFLRSkgLUMgJHtzdGRidWlsZGRpcn0vcG8gVj0xIHVwZGF0ZS1nbW8KKworCSggY2QgJHtzdGRidWlsZGRpcn0vZG9jICYmICQoTUFLRSkgVj0xIGxpYmV4dDJmcy5odG1sICkKKwkoIGNkICR7c3RkYnVpbGRkaXJ9L2xpYi9ldCAmJiAkKE1BS0UpIFY9MSBjb21fZXJyLmluZm8gY29tX2Vyci5odG1sICkKKworICAjIHNwZWNpYWxseS1idWlsdCBNSVBTIGxpYnMKK2lmbmVxICgkKGlzbWlwcyksKQorCSQoTUFLRSkgLUMgJHttaXBzYnVpbGRkaXJ9L3V0aWwgVj0xCisJJChNQUtFKSAtQyAke21pcHNidWlsZGRpcn0gVj0xIFwKKwkJQ0ZMQUdTPSIke0NGTEFHU30gJHtNSVBTX0NGTEFHU30iIFwKKwkJTElCX1NVQkRJUlM9ImxpYi9ldCBsaWIvZXh0MmZzIiBsaWJzCisJJChNQUtFKSAtQyAke21pcHNidWlsZGRpcjY0fS91dGlsIFY9MQorCSQoTUFLRSkgLUMgJHttaXBzYnVpbGRkaXI2NH0gVj0xIFwKKwkJQ0ZMQUdTPSIke0NGTEFHU30gJHtNSVBTX0NGTEFHU182NH0iIFwKKwkJTElCX1NVQkRJUlM9ImxpYi9ldCBsaWIvZXh0MmZzIiBsaWJzCitlbmRpZgorCisJdG91Y2ggJHtCVUlMRFNURFNUQU1QfQorCitidWlsZC1iZjogJHtCVUlMREJGU1RBTVB9Ciske0JVSUxEQkZTVEFNUH06ICR7Q0ZHQkZTVEFNUH0KKwlkaF90ZXN0ZGlyCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9IFY9MSBsaWJzCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9L2UyZnNjayBWPTEgYWxsCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9L21pc2MgVj0xIGFsbAorCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfS9yZXNpemUgVj0xIGFsbAorCXRvdWNoICR7QlVJTERCRlNUQU1QfQorCitidWlsZC1zdGF0aWM6ICR7QlVJTERTVEFUSUNTVEFNUH0KKyR7QlVJTERTVEFUSUNTVEFNUH06ICR7Q0ZHU1RBVElDU1RBTVB9CisJZGhfdGVzdGRpcgorCSQoTUFLRSkgLUMgJHtzdGF0aWNidWlsZGRpcn0gVj0xIGxpYnMKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorCSQoTUFLRSkgLUMgJHtzdGF0aWNidWlsZGRpcn0vZTJmc2NrIFY9MSBhbGwgZTJmc2NrLnN0YXRpYworZW5kaWYKKwl0b3VjaCAke0JVSUxEU1RBVElDU1RBTVB9CisKK2NsZWFuOgorCWRoX3Rlc3RkaXIKKwlybSAtcmYgJHtTVEFNUFNESVJ9CisJWyAhIC1mICR7c3RkYnVpbGRkaXJ9L01ha2VmaWxlIF0gfHwgJChNQUtFKSAtQyAke3N0ZGJ1aWxkZGlyfSBWPTEgZGlzdGNsZWFuCisJWyAhIC1mICR7YmZidWlsZGRpcn0vTWFrZWZpbGUgXSB8fCAkKE1BS0UpIC1DICR7YmZidWlsZGRpcn0gVj0xIGRpc3RjbGVhbgorCVsgISAtZiAke3N0YXRpY2J1aWxkZGlyfS9NYWtlZmlsZSBdIHx8ICQoTUFLRSkgLUMgJHtzdGF0aWNidWlsZGRpcn0gVj0xIGRpc3RjbGVhbgorCXJtIC1yZiAke3N0ZGJ1aWxkZGlyfSAke2JmYnVpbGRkaXJ9ICR7c3RhdGljYnVpbGRkaXJ9ICR7bWlwc2J1aWxkZGlyfSAke21pcHNidWlsZGRpcjY0fQorCXJtIC1mIGRlYmlhbi8qLnN1YnN0dmFycworCWRoX2NsZWFuCisKK2luc3RhbGw6IGNsZWFudXAgaW5zdGFsbC1zdGQKKworIyBUaGlzIHJ1bGUgYWxsb3dzIHRvIGZhY3Rvcml6ZSB0aGUgZGhfY2xlYW4gYmV0d2VlbiB0aGUgMiBpbnN0YWxsIHJ1bGVzCisjIFRoaXMgbXVzdCBiZSBsYXVuY2hlZCBiZWZvcmUgaW5zdGFsbC0qIChpZiBsYXVuY2hpbmcgdGhlbSBieSBoYW5kLCBmb3IKKyMgZXhlbXBsZSkgb3IgcmVzdWx0cyBhcmUgdW5wcmVkaWN0YWJsZQorY2xlYW51cDoKKwlkaF90ZXN0ZGlyCisJZGhfdGVzdHJvb3QKKwlkaF9wcmVwCisKK2luc3RhbGwtc3RkOiBESF9PUFRJT05TPQoraW5zdGFsbC1zdGQ6IGJ1aWxkCisJZGhfdGVzdGRpcgorCWRoX3Rlc3Ryb290CisJZGhfaW5zdGFsbGRpcnMKKworCW1rZGlyIC1wICR7dG1wZGlyfS9zYmluCisJJChNQUtFKSAtQyAke3N0ZGJ1aWxkZGlyfSBWPTEgaW5zdGFsbCBERVNURElSPSR7dG1wZGlyfSBcCisJCUlOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBMRENPTkZJRz10cnVlCisgICMgc3RhdGljIGxpYnMgYW5kIC5oIGZpbGVzCisJJChNQUtFKSAtQyAke3N0ZGJ1aWxkZGlyfSBWPTEgaW5zdGFsbC1saWJzIERFU1RESVI9JHt0bXBkaXJ9IExEQ09ORklHPXRydWUKKworaWZuZXEgKCQoQlVJTERfRTJGU0NLX1NUQVRJQyksbm8pCisgICMgc3RhdGljYWxseS1saW5rZWQgZnNjaworCSR7SU5TVEFMTF9QUk9HUkFNfSAkKEUyRlNDS19TVEFUSUMpICR7dG1wZGlyfS9zYmluCisJY3AgJHttYW5kaXJ9L21hbjgvZTJmc2NrLjggJHttYW5kaXJ9L21hbjgvZTJmc2NrLnN0YXRpYy44CitlbmRpZgorCisgICMgcmVtb3ZlIHN0YXRpYyBxdW90YSBsaWJyYXJ5IGZvciBub3cKKwlybSAke3RtcGRpcn0vdXNyL2luY2x1ZGUvcXVvdGEvbWtxdW90YS5oCisJZmluZCAke3RtcGRpcn0gLW5hbWUgcXVvdGEucGMgLW8gLW5hbWUgbGlicXVvdGEuYSB8IHhhcmdzIHJtCisKK2lmZXEgKCQoREVCX0JVSUxEX0dOVV9TWVNURU0pLCBnbnUpIAorCSR7SU5TVEFMTH0gLW0gMDY0NCBtaXNjL21rZTJmcy1odXJkLmNvbmYgJHt0bXBkaXJ9L2V0Yy9ta2UyZnMuY29uZgorZW5kaWYKKworCWRoX21vdmVmaWxlcworCXRlc3QgLXogImBmaW5kICR7dG1wZGlyfSAtdHlwZSBmYCIKKworICAjIHNwZWNpYWxseS1idWlsdCBNSVBTIGxpYnMKK2lmbmVxICgkKGlzbWlwcyksKQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCAke21pcHNidWlsZGRpcn0vbGliL2xpYmV4dDJmcy5hIFwKKwkJJHtkZWJkaXJ9L2UyZnNsaWJzLWRldi91c3IvbGliL2xpYmV4dDJmcy1ub3BpYy5hCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0ICR7bWlwc2J1aWxkZGlyNjR9L2xpYi9saWJleHQyZnMuYSBcCisJCSR7ZGViZGlyfS9lMmZzbGlicy1kZXYvdXNyL2xpYi9saWI2NGV4dDJmcy1ub3BpYy5hCitlbmRpZgorCitpbnN0YWxsLXVkZWI6IERIX09QVElPTlM9CitpbnN0YWxsLXVkZWI6IGJ1aWxkCisJZGhfdGVzdGRpcgorCWRoX3Rlc3Ryb290CisKKwkkKE1BS0UpIC1DICR7YmZidWlsZGRpcn0gVj0xIGluc3RhbGwtc2hsaWJzLWxpYnMtcmVjdXJzaXZlIERFU1RESVI9JHt1ZGViZGlyfSBcCisJCUlOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBMRENPTkZJRz10cnVlCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9L2UyZnNjayBWPTEgaW5zdGFsbCBERVNURElSPSR7dWRlYmRpcn0gXAorCQlJTlNUQUxMX1BST0dSQU09IiR7SU5TVEFMTF9QUk9HUkFNfSIgTERDT05GSUc9dHJ1ZQorCSQoTUFLRSkgLUMgJHtiZmJ1aWxkZGlyfS9taXNjIFY9MSBpbnN0YWxsIERFU1RESVI9JHt1ZGViZGlyfSBcCisJCUlOU1RBTExfUFJPR1JBTT0iJHtJTlNUQUxMX1BST0dSQU19IiBMRENPTkZJRz10cnVlCisJJChNQUtFKSAtQyAke2JmYnVpbGRkaXJ9L3Jlc2l6ZSBWPTEgaW5zdGFsbCBERVNURElSPSR7dWRlYmRpcn0gXAorCQlJTlNUQUxMX1BST0dSQU09IiR7SU5TVEFMTF9QUk9HUkFNfSIgTERDT05GSUc9dHJ1ZQorCisJcm0gLXJmICR7dWRlYmRpcn0vdXNyCisJZmluZCAke3VkZWJkaXJ9L3NiaW4gLXR5cGUgZiAtYSAhIC1uYW1lIGUyZnNjayBcCisJCS1hICEgLW5hbWUgbWtlMmZzIC1hICEgLW5hbWUgdHVuZTJmcyBcCisJCS1hICEgLW5hbWUgcmVzaXplMmZzIC1hICEgLW5hbWUgYmFkYmxvY2tzIC1wcmludCB8IHhhcmdzIHJtCisKKwkoY2QgJHt1ZGViZGlyfS9zYmluOyBsbiAtc2YgZTJmc2NrIGZzY2suZXh0MiA7IFwKKwkJbG4gLXNmIGUyZnNjayBmc2NrLmV4dDMgOyBsbiAtc2YgZTJmc2NrIGZzY2suZXh0NCA7IFwKKwkJbG4gLXNmIG1rZTJmcyBta2ZzLmV4dDIgOyBsbiAtc2YgbWtlMmZzIG1rZnMuZXh0MyA7IFwKKwkJbG4gLXNmIG1rZTJmcyBta2ZzLmV4dDQpCisKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlta2RpciAtcCAke2Jsa2lkdWRlYmRpcn0vbGliCisJbXYgJHt1ZGViZGlyfS9saWIvbGliYmxraWQuKiAke2Jsa2lkdWRlYmRpcn0vbGliCisKKwlta2RpciAtcCAke3V1aWR1ZGViZGlyfS9saWIKKwltdiAke3VkZWJkaXJ9L2xpYi9saWJ1dWlkLiogJHt1dWlkdWRlYmRpcn0vbGliCitlbmRpZgorCitiaW5hcnktaW5kZXA6IAorICAjIG5vIGFyY2gtaW5kZXBlbmRhbnQgZGVicy4KKworYmluYXJ5LWFyY2g6IERIX09QVElPTlM9IC1hCitiaW5hcnktYXJjaDogaW5zdGFsbCBpbnN0YWxsLXVkZWIKKwlkaF90ZXN0ZGlyCisJZGhfdGVzdHJvb3QKKworICAjIGxpbnRpYW4gb3ZlcnJpZGVzCisJZm9yIGkgaW4gJCQoY2QgZGViaWFuICYmIGVjaG8gKi5saW50aWFuLW92ZXJyaWRlcyk7IGRvIFwKKwkJcGtnPSQke2klLmxpbnRpYW4tb3ZlcnJpZGVzfSA7XAorCQlpZiB0ZXN0ICIkJHtwa2d9IiAhPSBzb3VyY2UgOyB0aGVuIFwKKwkJCSQoSU5TVEFMTCkgLW0gMDY0NCAtRCAtcCBkZWJpYW4vJCRpICR7ZGViZGlyfS8kJHtwa2d9L3Vzci9zaGFyZS9saW50aWFuL292ZXJyaWRlcy8kJHtwa2d9IDtcCisJCWZpIDtcCisJZG9uZQorCisgICMgc3ltbGlua3MgdG8gcHJlcGFyZSBkaF9pbnN0YWxsZG9jcyBydW4KKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCW1rZGlyIC1wICR7ZGViZGlyfS9saWJibGtpZCR7QkxLSURfU09WRVJTSU9OfS91c3Ivc2hhcmUvZG9jL2xpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059CisJbWtkaXIgLXAgJHtkZWJkaXJ9L2xpYmJsa2lkLWRldi91c3Ivc2hhcmUvZG9jCisJbG4gLXNmIGxpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059ICR7ZGViZGlyfS9saWJibGtpZC1kZXYvdXNyL3NoYXJlL2RvYy9saWJibGtpZC1kZXYKK2VuZGlmCisKKwlta2RpciAtcCAke2RlYmRpcn0vbGlic3Mke1NTX1NPVkVSU0lPTn0vdXNyL3NoYXJlL2RvYy9saWJzcyR7U1NfU09WRVJTSU9OfQorCW1rZGlyIC1wICR7ZGViZGlyfS9zcy1kZXYvdXNyL3NoYXJlL2RvYworCWxuIC1zZiBsaWJzcyR7U1NfU09WRVJTSU9OfSAke2RlYmRpcn0vc3MtZGV2L3Vzci9zaGFyZS9kb2Mvc3MtZGV2CisKKwlta2RpciAtcCAke2RlYmRpcn0vbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfS91c3Ivc2hhcmUvZG9jL2xpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0KKwlta2RpciAtcCAke2RlYmRpcn0vY29tZXJyLWRldi91c3Ivc2hhcmUvZG9jCisJbG4gLXNmIGxpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0gJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9jb21lcnItZGV2CisKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlta2RpciAtcCAke2RlYmRpcn0vbGlidXVpZCR7VVVJRF9TT1ZFUlNJT059L3Vzci9zaGFyZS9kb2MvbGlidXVpZCR7VVVJRF9TT1ZFUlNJT059CisJbWtkaXIgLXAgJHtkZWJkaXJ9L3V1aWQtZGV2L3Vzci9zaGFyZS9kb2MKKyMJbG4gLXNmIGxpYnV1aWQke1VVSURfU09WRVJTSU9OfSAke2RlYmRpcn0vdXVpZC1kZXYvdXNyL3NoYXJlL2RvYy91dWlkLWRldgorZW5kaWYKKworCW1rZGlyIC1wICR7ZGViZGlyfS9lMmZzbGlicy91c3Ivc2hhcmUvZG9jL2UyZnNsaWJzCisJbWtkaXIgLXAgJHtkZWJkaXJ9L2UyZnNsaWJzLWRldi91c3Ivc2hhcmUvZG9jCisJbG4gLXNmIGUyZnNsaWJzICR7ZGViZGlyfS9lMmZzbGlicy1kZXYvdXNyL3NoYXJlL2RvYy9lMmZzbGlicy1kZXYKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vbGliYmxraWQuY29weXJpZ2h0IFwKKwkJJHtkZWJkaXJ9L2xpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059L3Vzci9zaGFyZS9kb2MvbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0vY29weXJpZ2h0CitlbmRpZgorCisJZGhfaW5zdGFsbGRvY3MgLU5lMmZzcHJvZ3MtdWRlYiAtTmxpYmJsa2lkMS11ZGViIC1ObGlidXVpZDEtdWRlYgorCisgICMgSFRNTCBkb2NzCisJJChJTlNUQUxMKSAtZCAke2RlYmRpcn0vZTJmc2xpYnMtZGV2L3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMvaHRtbC1pbmZvLworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCAke3N0ZGJ1aWxkZGlyfS9kb2MvKi5odG1sIFwKKwkgICAke2RlYmRpcn0vZTJmc2xpYnMtZGV2L3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMvaHRtbC1pbmZvLworCSQoSU5TVEFMTCkgLWQgJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L2h0bWwtaW5mby8KKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgJHtzdGRidWlsZGRpcn0vbGliL2V0LyouaHRtbCBcCisJICAgJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L2h0bWwtaW5mby8KKworICAjIHRleGluZm8gZG9jcworCW1rZGlyIC1wICR7ZGViZGlyfS9jb21lcnItZGV2L3Vzci9zaGFyZS9kb2MvbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCAke3RvcGRpcn0vZG9jL2xpYmV4dDJmcy50ZXhpbmZvIFwKKwkgICAke2RlYmRpcn0vZTJmc2xpYnMtZGV2L3Vzci9zaGFyZS9kb2MvZTJmc2xpYnMvbGliZXh0MmZzLnRleGkKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgJHt0b3BkaXJ9L2xpYi9ldC9jb21fZXJyLnRleGluZm8gXAorCSAgICR7ZGViZGlyfS9jb21lcnItZGV2L3Vzci9zaGFyZS9kb2MvbGliY29tZXJyJHtDT01FUlJfU09WRVJTSU9OfS9jb21fZXJyLnRleGkKKworCSQoSU5TVEFMTCkgLWQgJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L2V4YW1wbGVzCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0IGxpYi9zcy9zc19lcnIuZXQgXAorCQkke3N0ZGJ1aWxkZGlyfS9saWIvZXh0MmZzL2V4dDJfZXJyLmV0IFwKKwkJJHtkZWJkaXJ9L2NvbWVyci1kZXYvdXNyL3NoYXJlL2RvYy9saWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059L2V4YW1wbGVzCisJJChJTlNUQUxMKSAtZCAke2RlYmRpcn0vc3MtZGV2L3Vzci9zaGFyZS9kb2MvbGlic3Mke1NTX1NPVkVSU0lPTn0vZXhhbXBsZXMKKwkkKElOU1RBTEwpIC1wIC1tIDA2NDQgZGVidWdmcy9kZWJ1Z19jbWRzLmN0IFwKKwkJJHtkZWJkaXJ9L3NzLWRldi91c3Ivc2hhcmUvZG9jL2xpYnNzJHtTU19TT1ZFUlNJT059L2V4YW1wbGVzCisKKwlkaF9pbnN0YWxsaW5mbyAtcGNvbWVyci1kZXYgJHtzdGRidWlsZGRpcn0vbGliL2V0L2NvbV9lcnIuaW5mbworCWRoX2luc3RhbGxpbmZvIC1wZTJmc2xpYnMtZGV2ICR7c3RkYnVpbGRkaXJ9L2RvYy9saWJleHQyZnMuaW5mbworCisJREhfT1BUSU9OUz0gZGhfaW5zdGFsbGNoYW5nZWxvZ3MgLXBlMmZzcHJvZ3MgXAorCQktcGxpYmNvbWVyciR7Q09NRVJSX1NPVkVSU0lPTn0gXAorCQktcGxpYnNzJHtTU19TT1ZFUlNJT059IFwKKwkJLXBlMmZzbGlicyBcCisJCS1wZTJmc3Byb2dzLWRiZyAtcGUyZnNsaWJzLWRiZyBcCisJCS1wbGliY29tZXJyMi1kYmcgLXBsaWJzczItZGJnCitpZm5lcSAoJChCVUlMRF9FMkZTQ0tfU1RBVElDKSxubykKKwlESF9PUFRJT05TPSBkaF9pbnN0YWxsY2hhbmdlbG9ncyAtcGUyZnNjay1zdGF0aWMKK2VuZGlmCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJREhfT1BUSU9OUz0gZGhfaW5zdGFsbGNoYW5nZWxvZ3MgLXBsaWJ1dWlkJHtVVUlEX1NPVkVSU0lPTn0gXAorCQktcHV1aWQtZGV2IC1wdXVpZC1ydW50aW1lIC1wdXVpZC1ydW50aW1lLWRiZyAtcGxpYnV1aWQxLWRiZyBcCisJCS1wbGliYmxraWQke0JMS0lEX1NPVkVSU0lPTn0gLXBsaWJibGtpZDEtZGJnCitlbmRpZgorCisJZGhfZml4cGVybXMKK2lmbmVxICgkKGlzbWlwcyksKQorCWRoX3N0cmlwIC1rIC1YbGliNjRleHQyZnMtbm9waWMuYQorZWxzZQorCWRoX3N0cmlwIC1rCitlbmRpZgorCisJIyBkZWJ1ZyBwYWNrYWdlIHN0dWZmCisJcm0gLXJmICR7dWRlYmRpcn0vdXNyCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJcm0gLXJmICR7YmxraWR1ZGViZGlyfS91c3IKKwlybSAtcmYgJHt1dWlkdWRlYmRpcn0vdXNyCitlbmRpZgorCitpZmVxICgsJChmaW5kc3RyaW5nIG5vc3RyaXAsJChERUJfQlVJTERfT1BUSU9OUykpKQorCW1rZGlyIC1wICR7ZGVidWdkaXJ9LyQoVVNSTElCKQorCW12ICR7bWFpbmRpcn0vdXNyL2xpYi9kZWJ1ZyAke2RlYnVnZGlyfS8kKFVTUkxJQikKKwlybSAtcmYgJHttYWluZGlyfS91c3IvbGliL2RlYnVnCisKK2lmbmVxICgkKEJVSUxEX0UyRlNDS19TVEFUSUMpLG5vKQorCW12ICR7ZTJmc2Nrc3RhdGljZGlyfS91c3IvbGliL2RlYnVnL3NiaW4vKiBcCisJCSR7ZGVidWdkaXJ9LyQoVVNSTElCKS9kZWJ1ZworCXJtIC1yZiAke2UyZnNja3N0YXRpY2Rpcn0vdXNyL2xpYgorZW5kaWYKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCW1rZGlyIC1wICR7dXVpZHJ1bnRpbWVkYmdkaXJ9LyQoVVNSTElCKQorCW12ICR7dXVpZHJ1bnRpbWVkaXJ9L3Vzci9saWIvZGVidWcgJHt1dWlkcnVudGltZWRiZ2Rpcn0vJChVU1JMSUIpCisJcm1kaXIgJHt1dWlkcnVudGltZWRpcn0vdXNyL2xpYgorZW5kaWYKKworCW1rZGlyIC1wICR7bGliZXh0MmRiZ2Rpcn0vJChVU1JMSUIpCisJbXYgJHtsaWJleHQyZGlyfS91c3IvbGliL2RlYnVnICR7bGliZXh0MmRiZ2Rpcn0vJChVU1JMSUIpCisJcm1kaXIgJHtsaWJleHQyZGlyfS91c3IvbGliCisKKwlta2RpciAtcCAke2xpYmNvbWVycmRiZ2Rpcn0vJChVU1JMSUIpCisJbXYgJHtsaWJjb21lcnJkaXJ9L3Vzci9saWIvZGVidWcgJHtsaWJjb21lcnJkYmdkaXJ9LyQoVVNSTElCKQorCXJtZGlyICR7bGliY29tZXJyZGlyfS91c3IvbGliCisKKwlta2RpciAtcCAke2xpYnNzZGJnZGlyfS8kKFVTUkxJQikKKwltdiAke2xpYnNzZGlyfS91c3IvbGliL2RlYnVnICR7bGlic3NkYmdkaXJ9LyQoVVNSTElCKQorCXJtZGlyICR7bGlic3NkaXJ9L3Vzci9saWIKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCW1rZGlyIC1wICR7bGlidXVpZGRiZ2Rpcn0vJChVU1JMSUIpCisJbXYgJHtsaWJ1dWlkZGlyfS91c3IvbGliL2RlYnVnICR7bGlidXVpZGRiZ2Rpcn0vJChVU1JMSUIpCisJcm1kaXIgJHtsaWJ1dWlkZGlyfS91c3IvbGliCisKKwlta2RpciAtcCAke2xpYmJsa2lkZGJnZGlyfS8kKFVTUkxJQikKKwltdiAke2xpYmJsa2lkZGlyfS91c3IvbGliL2RlYnVnICR7bGliYmxraWRkYmdkaXJ9LyQoVVNSTElCKQorCXJtZGlyICR7bGliYmxraWRkaXJ9L3Vzci9saWIKK2VuZGlmCitlbmRpZgorCisJIyBkcGtnIHN5bWJvbCBoYW5kbGluZworaWZuZXEgKCwkKGZpbmRzdHJpbmcgdXBkYXRlLXN5bWJvbHMsJChERUJfQlVJTERfT1BUSU9OUykpKQorU1lNQk9MX0xJQlMgOj0gZTJmc2xpYnMgbGliY29tZXJyMiBsaWJzczIKK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKK1NZTUJPTF9MSUJTICs9IGxpYmJsa2lkMSBsaWJ1dWlkMQorZW5kaWYKKwlmb3IgaSBpbiAkKFNZTUJPTF9MSUJTKTsgXAorCWRvIFwKKwkJZWNobyAiR2VuZXJhdGluZyBzeW1ib2xzIGZvciAkJGkuLi4iOyBcCisJCWRwa2ctZ2Vuc3ltYm9scyAtcCQkaSAtUGRlYmlhbi8kJGkgPiBkZWJpYW4vJCRpLnRtcC1wYXRjaDsgXAorCQljYXQgZGViaWFuLyQkaS50bXAtcGF0Y2g7IFwKKwkJcGF0Y2ggZGViaWFuLyQkaS5zeW1ib2xzIDwgZGViaWFuLyQkaS50bXAtcGF0Y2g7IFwKKwkJL2Jpbi9ybSBkZWJpYW4vJCRpLnRtcC1wYXRjaDsgXAorCWRvbmUKK2VuZGlmCisKKwlmb3IgaSBpbiBlMmZzcHJvZ3MgZTJmc3Byb2dzLWRiZyBlMmZzbGlicyBlMmZzbGlicy1kYmc7IGRvIFwKKwkgICAkKElOU1RBTEwpIC1wIC1tIDA2NDQgZGViaWFuL2NvcHlyaWdodCBcCisJCSR7ZGViZGlyfS8kJGkvdXNyL3NoYXJlL2RvYy8kJGkvY29weXJpZ2h0OyBcCisJZG9uZQorCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0IGRlYmlhbi91dWlkLXJ1bnRpbWUuY29weXJpZ2h0IFwKKwkJJHt1dWlkcnVudGltZWRiZ2Rpcn0vdXNyL3NoYXJlL2RvYy91dWlkLXJ1bnRpbWUtZGJnL2NvcHlyaWdodAorZW5kaWYKKworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vbGliY29tZXJyMi5jb3B5cmlnaHQgXAorCQkke2xpYmNvbWVycmRiZ2Rpcn0vdXNyL3NoYXJlL2RvYy9saWJjb21lcnIyLWRiZy9jb3B5cmlnaHQKKworCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vbGlic3MyLmNvcHlyaWdodCBcCisJCSR7bGlic3NkYmdkaXJ9L3Vzci9zaGFyZS9kb2MvbGlic3MyLWRiZy9jb3B5cmlnaHQKKworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCSQoSU5TVEFMTCkgLXAgLW0gMDY0NCBkZWJpYW4vbGliYmxraWQuY29weXJpZ2h0IFwKKwkJJHtsaWJibGtpZGRiZ2Rpcn0vdXNyL3NoYXJlL2RvYy9saWJibGtpZDEtZGJnL2NvcHlyaWdodAorCisJJChJTlNUQUxMKSAtcCAtbSAwNjQ0IGRlYmlhbi9saWJ1dWlkMS5jb3B5cmlnaHQgXAorCQkke2xpYnV1aWRkYmdkaXJ9L3Vzci9zaGFyZS9kb2MvbGlidXVpZDEtZGJnL2NvcHlyaWdodAorZW5kaWYKKworCWRoX2NvbXByZXNzCisKKwlkaF9tYWtlc2hsaWJzIC1OZTJmc3Byb2dzLXVkZWIgLU5saWJibGtpZDEtdWRlYiAtTmxpYnV1aWQxLXVkZWIKKwlkaF9tYWtlc2hsaWJzIC0tYWRkLXVkZWI9ZTJmc3Byb2dzLXVkZWIgLXBsaWJjb21lcnIke0NPTUVSUl9TT1ZFUlNJT059IFwKKwkJLVYgJ2xpYmNvbWVycjIgKD49IDEuMzMtMyknCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJZGhfbWFrZXNobGlicyAtcGxpYmJsa2lkJHtCTEtJRF9TT1ZFUlNJT059IC1WICdsaWJibGtpZDEgKD49IDEuMzktMSknCisJZWNobyAidWRlYjogbGliYmxraWQgMSBsaWJibGtpZDEtdWRlYiIgPj4gXAorCQlkZWJpYW4vbGliYmxraWQxL0RFQklBTi9zaGxpYnMKKwllY2hvICJ1ZGViOiBsaWJ1dWlkIDEgbGlidXVpZDEtdWRlYiIgPj4gZGViaWFuL2xpYnV1aWQxL0RFQklBTi9zaGxpYnMKK2VuZGlmCisKKwlkaF9pbnN0YWxsZGViCisJZGhfc2hsaWJkZXBzIC1sJHtzdGRidWlsZGRpcn0vbGliCisJZGhfc2hsaWJkZXBzIC1wZTJmc3Byb2dzIC1sJHtzdGRidWlsZGRpcn0vbGliIFwKKwkJLXUiLUxkZWJpYW4vZTJmc3Byb2dzLnNobGlicy5sb2NhbCIKKwlkaF9zaGxpYmRlcHMgLXBlMmZzcHJvZ3MtdWRlYiAtbCR7c3RkYnVpbGRkaXJ9L2xpYiBcCisJCS11Ii1MZGViaWFuL2UyZnNwcm9ncy11ZGViLnNobGlicy5sb2NhbCIKKworCWRoX2dlbmNvbnRyb2wgLU5jb21lcnItZGV2IC1Oc3MtZGV2IC1OdXVpZC1kZXYgXAorCQktTmUyZnNwcm9ncy11ZGViIC1ObGliYmxraWQxLXVkZWIgLU5saWJ1dWlkMS11ZGViCisJREhfT1BUSU9OUz0gZGhfZ2VuY29udHJvbCAtcGNvbWVyci1kZXYgXAorCSAgLXUgJy12JHtDT01FUlJfVkVSU0lPTn0tJHtNQUlOX1ZFUlNJT059IC1WbWFpbkJpbmFyeT0ke01BSU5fVkVSU0lPTn0nCisJREhfT1BUSU9OUz0gZGhfZ2VuY29udHJvbCAtcHNzLWRldiBcCisJICAtdSAnLXYke1NTX1ZFUlNJT059LSR7TUFJTl9WRVJTSU9OfSAtVm1haW5CaW5hcnk9JHtNQUlOX1ZFUlNJT059JworaWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCURIX09QVElPTlM9IGRoX2dlbmNvbnRyb2wgLXB1dWlkLWRldiBcCisJICAtdSAnLXYke1VVSURfVkVSU0lPTn0tJHtNQUlOX1ZFUlNJT059IC1WbWFpbkJpbmFyeT0ke01BSU5fVkVSU0lPTn0nCitlbmRpZgorCWRoX2dlbmNvbnRyb2wJLXBlMmZzcHJvZ3MtdWRlYiAtLSAtZmRlYmlhbi9maWxlc34KK2lmbmVxICgkKFVUSUxfTElOVVhfTkcpLHllcykKKwlkaF9nZW5jb250cm9sCS1wbGliYmxraWQxLXVkZWIgLS0gLWZkZWJpYW4vZmlsZXN+CisJZGhfZ2VuY29udHJvbAktcGxpYnV1aWQxLXVkZWIgLS0gLWZkZWJpYW4vZmlsZXN+CitlbmRpZgorCisJZHBrZy1kaXN0YWRkZmlsZSAkKFVERUJfTkFNRSkgZGViaWFuLWluc3RhbGxlciAkKFVERUJfUFJJT1JJVFkpCitpZm5lcSAoJChVVElMX0xJTlVYX05HKSx5ZXMpCisJZHBrZy1kaXN0YWRkZmlsZSAkKEJMS0lEX1VERUJfTkFNRSkgZGViaWFuLWluc3RhbGxlciAkKEJMS0lEX1VERUJfUFJJT1JJVFkpCisJZHBrZy1kaXN0YWRkZmlsZSAkKFVVSURfVURFQl9OQU1FKSBkZWJpYW4taW5zdGFsbGVyICQoVVVJRF9VREVCX1BSSU9SSVRZKQorZW5kaWYKKwlkaF9tZDVzdW1zIC1OZTJmc3Byb2dzLXVkZWIgLU5saWJibGtpZDEtdWRlYiAtTmxpYnV1aWQxLXVkZWIKKwlkaF9idWlsZGRlYiAtTmUyZnNwcm9ncy11ZGViIC1ObGliYmxraWQxLXVkZWIgLU5saWJ1dWlkMS11ZGViCisJZGhfYnVpbGRkZWIgLXBlMmZzcHJvZ3MtdWRlYiAtLWZpbGVuYW1lPSQoVURFQl9OQU1FKQoraWZuZXEgKCQoVVRJTF9MSU5VWF9ORykseWVzKQorCWRoX2J1aWxkZGViIC1wbGliYmxraWQxLXVkZWIgLS1maWxlbmFtZT0kKEJMS0lEX1VERUJfTkFNRSkKKwlkaF9idWlsZGRlYiAtcGxpYnV1aWQxLXVkZWIgLS1maWxlbmFtZT0kKFVVSURfVURFQl9OQU1FKQorZW5kaWYKKworYmluYXJ5OiBiaW5hcnktaW5kZXAgYmluYXJ5LWFyY2gKKworLlBIT05ZOiBiaW5hcnkgYmluYXJ5LWFyY2ggYmluYXJ5LWluZGVwIGNsZWFuIGNoZWNrcm9vdCBtcnByb3BlciBcCisJZGVidWdfZmxhZ3MgZGViaWFuLWZpbGVzCisKK2RlYnVnX2ZsYWdzOgorCUBlY2hvIENGTEFHUyBpcyAkKENGTEFHUykKKwlAZWNobyBMREZMQUdTIGlzICQoTERGTEFHUykKKwlAZWNobyBDUFBGTEFHUyBpcyAkKENQUEZMQUdTKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9zY3JpcHRzL3Rlc3QtYmFja3RyYWNlIGIvZTJmc3Byb2dzL2RlYmlhbi9zY3JpcHRzL3Rlc3QtYmFja3RyYWNlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5MDQ4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3NjcmlwdHMvdGVzdC1iYWNrdHJhY2UKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIFRlc3QgdG8gc2VlIGlmIGJhY2t0cmFjZSByZXF1aXJlcyBhIGxpYnJhcnkgaW4gL3Vzci9saWIKKyMgUmV0dXJucyB0cnVlIGlmIHRoZSBiYWNrdHJhY2UgY29tbWFuZCB3b3JrcyBhbmQgcmVxdWlyZXMgYSBsaWJyYXJ5IGluIC91c3IvbGliCisjIFRoaXMgaXMgYSBuYXN0eSB3b3JrYXJvdW5kIGZvciBEZWJpYW4gYnVnICM3MDgzMDcsIHdoaWNoIGlzIHJlYWxseSBhIGdsaWJjIGJ1ZworIworCitjYXQgPiAvdG1wL2JhY2t0cmFjZSQkLmMgPDwgRU9GCisKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgdm9pZCAqc3RhY2tfc3ltc1szMl07CisgICAgICAgaW50IGZyYW1lczsKKworICAgICAgIGZyYW1lcyA9IGJhY2t0cmFjZShzdGFja19zeW1zLCAzMik7CisgICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQoc3RhY2tfc3ltcywgZnJhbWVzLCAwKTsKK30KK0VPRgorCitpZiAhIGNjIC1vIC90bXAvYmFja3RyYWNlJCQgL3RtcC9iYWNrdHJhY2UkJC5jOyB0aGVuCisgICBleGl0IDEKK2ZpCisKK2lmICEgbGRkIC90bXAvYmFja3RyYWNlJCQgPiAvdG1wL2JhY2t0cmFjZSQkLmxkZCAyPiYxIDsgdGhlbgorICAgZXhpdCAxCitmaQorCitncmVwIC1xIC91c3IvbGliIC90bXAvYmFja3RyYWNlJCQubGRkCityZXQ9JD8KKworL2Jpbi9ybSAtZiAvdG1wL2JhY2t0cmFjZSQkKgorZXhpdCAkcmV0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL3NobGlicy5sb2NhbCBiL2UyZnNwcm9ncy9kZWJpYW4vc2hsaWJzLmxvY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzhkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3NobGlicy5sb2NhbApAQCAtMCwwICsxLDYgQEAKK2xpYmV4dDJmcwkyCitsaWJlMnAJCTIKK2xpYnV1aWQJCTEKK2xpYmNvbV9lcnIJMgorbGlic3MJCTIKK2xpYmJsa2lkCTEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vc291cmNlLmxpbnRpYW4tb3ZlcnJpZGVzIGIvZTJmc3Byb2dzL2RlYmlhbi9zb3VyY2UubGludGlhbi1vdmVycmlkZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwY2QwZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vc291cmNlLmxpbnRpYW4tb3ZlcnJpZGVzCkBAIC0wLDAgKzEsMyBAQAorZTJmc3Byb2dzIHNvdXJjZTogd2Vhay1saWJyYXJ5LWRldi1kZXBlbmRlbmN5IHNzLWRldiBvbiBsaWJzczIgKD0gJHttYWluQmluYXJ5fSkKK2UyZnNwcm9ncyBzb3VyY2U6IHdlYWstbGlicmFyeS1kZXYtZGVwZW5kZW5jeSBjb21lcnItZGV2IG9uIGxpYmNvbWVycjIgKD0gJHttYWluQmluYXJ5fSkKK2UyZnNwcm9ncyBzb3VyY2U6IHdlYWstbGlicmFyeS1kZXYtZGVwZW5kZW5jeSB1dWlkLWRldiBvbiBsaWJ1dWlkMSAoPSAke21haW5CaW5hcnl9KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9zb3VyY2UvZm9ybWF0IGIvZTJmc3Byb2dzL2RlYmlhbi9zb3VyY2UvZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2FhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3NvdXJjZS9mb3JtYXQKQEAgLTAsMCArMSBAQAorMy4wIChxdWlsdCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vc3MtZGV2LmV4YW1wbGVzIGIvZTJmc3Byb2dzL2RlYmlhbi9zcy1kZXYuZXhhbXBsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5MzBiYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vc3MtZGV2LmV4YW1wbGVzCkBAIC0wLDAgKzEgQEAKK2RlYnVnZnMvZGVidWdfY21kcy5jdApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYmlhbi9zcy1kZXYuZmlsZXMuaW4gYi9lMmZzcHJvZ3MvZGViaWFuL3NzLWRldi5maWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGM3ODhlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi9zcy1kZXYuZmlsZXMuaW4KQEAgLTAsMCArMSw3IEBACit1c3IvbGliLyovbGlic3Muc28KK3Vzci9saWIvKi9saWJzcy5hCit1c3IvaW5jbHVkZS9zcy8qCit1c3IvYmluL21rX2NtZHMKK3Vzci9zaGFyZS9zcy8qCit1c3Ivc2hhcmUvbWFuL21hbjEvbWtfY21kcyoKK3Vzci9saWIvKi9wa2djb25maWcvc3MucGMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1kZXYuUkVBRE1FLkRlYmlhbiBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1kZXYuUkVBRE1FLkRlYmlhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhjYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLWRldi5SRUFETUUuRGViaWFuCkBAIC0wLDAgKzEsMjMgQEAKKworSW4gb3JkZXIgdG8gc2FudGl6ZSBlMmZzcHJvZ3MgdG8gYmUgREZTRyBmcmVlLCB0aGUgZmlsZQorZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEudHh0IGhhcyBiZWVuIHJlbW92ZWQuICBJdCBjYW4gYmUgb2J0YWluZWQKK2J5IGRvd25sb2FkaW5nIGUyZnNwcm9ncyBmcm9tIHRoZSB1cHN0cmVhbSBzb3VyY2VzLiAgSXQgbWF5IGFsc28gYmUKK2F2YWlsYWJsZSBmcm9tIG90aGVyIHNpdGVzIG9uIHRoZSBuZXR3b3JrLCBpZiB5b3UgZG8gYSBxdWljayB3ZWIKK3NlYXJjaCBmb3IgdGhlIHN0cmluZyAiZHJhZnQtbGVhY2gtdXVpZHMtZ3VpZHMtMDEiLgorCitOb3RlIHRoYXQgZGViaWFuL3J1bGVzIGlzIHNldCB1cCB0byBpbmNsdWRlIHRoZSBmaWxlIG9uIFVidW50dQorc3lzdGVtcywgc28gZm9yIHBlb3BsZSB0cnlpbmcgdG8gYnVpbGQgZTJmc3Byb2dzIG9uIFVidW50dSBzeXN0ZW1zLAordGhleSBzaG91bGQgc3RhcnQgZnJvbSB0aGUgdXBzdHJlYW0gc291cmNlcywgYW5kIG5vdCB0aGUKK0RlYmlhbi1leHB1cmdhdGVkIHNvdXJjZXMgZm91bmQgaW4gdGhlIERlYmlhbiByZXBvc2l0b3J5LiAgKG4uYi4sIGZvcgorV0lQIHJlbGVhc2VzIHRoZSBjb21tYW5kICIuL3V0aWwvZ2VuLXRhcmJhbGwgdWJ1bnR1IiB3aWxsIGhlbHAgY3JlYXRlCit0YXIgZmlsZSB3aGljaCBpcyBhcHByb3ByaWF0ZWx5IG5hbWVkIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yCitkcGtnLWJ1aWxkcGFja2FnZS4pICBTaW5jZSBVYnVudHUgZG9lc24ndCBoYXZlIHRoZSBERlNHIHJlc3RyaWN0aW9ucywKK3RoZSBkb2N1bWVudGF0aW9uIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgZm9yIERlYmlhbidzIERGU0cgbGljZW5zZQorcHVyaXR5IHNob3VsZG4ndCBiZSBkZW5pZWQgdG8gVWJ1bnR1IHVzZXJzLgorCisJCQkJCVRoZW9kb3JlIFRzJ28KKwkJCQkJT2NvdG9iZXIgMywgMjAwNgorCisKKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGViaWFuL3V1aWQtZGV2LmNvcHlyaWdodCBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1kZXYuY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDY3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3V1aWQtZGV2LmNvcHlyaWdodApAQCAtMCwwICsxLDM4IEBACitUaGlzIHBhY2thZ2Ugd2FzIGFkZGVkIHRvIHRoZSBlMmZzcHJvZ3MgZGViaWFuIHNvdXJjZSBwYWNrYWdlIGJ5CitUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PiBvbiBTYXQgTWFyIDE1IDE1OjMzOjM3IEVTVCAyMDAzCisKK0l0IGlzIHBhcnQgb2YgdGhlIG1haW4gZTJmc3Byb2dzIGRpc3RyaWJ1dGlvbiwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0OgorCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MKKworVXBzdHJlYW0gQXV0aG9yOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorCitDb3B5cmlnaHQ6CisKK0NvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCBieSBUaGVvZG9yZSBUcydvCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1kZXYuZmlsZXMuaW4gYi9lMmZzcHJvZ3MvZGViaWFuL3V1aWQtZGV2LmZpbGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGI5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3V1aWQtZGV2LmZpbGVzLmluCkBAIC0wLDAgKzEsNSBAQAordXNyL2xpYi8qL2xpYnV1aWQuc28KK3Vzci9saWIvKi9saWJ1dWlkLmEKK3Vzci9pbmNsdWRlL3V1aWQvKgordXNyL3NoYXJlL21hbi9tYW4zL3V1aWQqCit1c3IvbGliLyovcGtnY29uZmlnL3V1aWQucGMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmNvcHlyaWdodCBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmNvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNkNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUuY29weXJpZ2h0CkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGFja2FnZSB3YXMgYWRkZWQgdG8gdGhlIGUyZnNwcm9ncyBkZWJpYW4gc291cmNlIHBhY2thZ2UgYnkKK1RoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IG9uIEZyaSBEZWMgMTQgMjI6MjQ6MzUgRVNUIDIwMDcKKworSXQgaXMgcGFydCBvZiB0aGUgbWFpbiBlMmZzcHJvZ3MgZGlzdHJpYnV0aW9uLCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncworCitVcHN0cmVhbSBBdXRob3I6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisKK0NvcHlyaWdodDoKKworQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IGJ5CitUaGVvZG9yZSBUcydvCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmZpbGVzIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4ZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmZpbGVzCkBAIC0wLDAgKzEsNCBAQAordXNyL2Jpbi91dWlkZ2VuCit1c3Ivc2Jpbi91dWlkZAordXNyL3NoYXJlL21hbi9tYW44L3V1aWRkLioKK3Vzci9zaGFyZS9tYW4vbWFuMS91dWlkZ2VuLioKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmxpbnRpYW4tb3ZlcnJpZGVzIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUubGludGlhbi1vdmVycmlkZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0MmQzMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLmxpbnRpYW4tb3ZlcnJpZGVzCkBAIC0wLDAgKzEgQEAKK3V1aWQtcnVudGltZTogY29tbWFuZC13aXRoLXBhdGgtaW4tbWFpbnRhaW5lci1zY3JpcHQgcHJlcm06NSAvdXNyL3NiaW4vdXVpZGQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RpbnN0IGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUucG9zdGluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxYWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RpbnN0CkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKK2lmICEgZ2V0ZW50IGdyb3VwIHwgZ3JlcCAtcSBsaWJ1dWlkOyB0aGVuCitncm91cGFkZCAtZiAtSyBHSURfTUlOPTEgLUsgR0lEX01BWD05OTkgbGlidXVpZAorZmkKK2lmICEgZ2V0ZW50IHBhc3N3ZCB8IGdyZXAgLXEgbGlidXVpZDsgdGhlbgorICAgdXNlcmFkZCAtZCAvdmFyL2xpYi9saWJ1dWlkIC1LIFVJRF9NSU49MSAtSyBVSURfTUFYPTQ5OSAtZyBsaWJ1dWlkIGxpYnV1aWQKK2ZpCitjaG93biBsaWJ1dWlkOmxpYnV1aWQgL3Vzci9zYmluL3V1aWRkCitjaG1vZCA2NzU1IC91c3Ivc2Jpbi91dWlkZAorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RybSBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnBvc3RybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDc3MDAxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUucG9zdHJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCitpZiBbICIkMSIgPSBwdXJnZSBdCit0aGVuCisJcm0gLXJmIC92YXIvcnVuL3V1aWRkCitmaQorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnByZXJtIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUucHJlcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0ZTE2MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnByZXJtCkBAIC0wLDAgKzEsMTAgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQoraWYgWyAteCAvdXNyL3NiaW4vdXVpZGQgXQordGhlbgorCS91c3Ivc2Jpbi91dWlkZCAtayB8fCB0cnVlCitmaQorCisjREVCSEVMUEVSIworCitleGl0IDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnNobGlicy5sb2NhbCBiL2UyZnNwcm9ncy9kZWJpYW4vdXVpZC1ydW50aW1lLnNobGlicy5sb2NhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk3Njc0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYmlhbi91dWlkLXJ1bnRpbWUuc2hsaWJzLmxvY2FsCkBAIC0wLDAgKzEgQEAKK2xpYnV1aWQgMSBsaWJ1dWlkMSAoPiAxLjQwLjMtMSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJpYW4vd2F0Y2ggYi9lMmZzcHJvZ3MvZGViaWFuL3dhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjYxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGViaWFuL3dhdGNoCkBAIC0wLDAgKzEsNCBAQAordmVyc2lvbj0zCitodHRwOi8vc2YubmV0L2UyZnNwcm9ncy9lMmZzcHJvZ3MtKFswLTldLispXC50YXJcLmd6CisjZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvdHl0c28vZTJmc3Byb2dzL2UyZnNwcm9ncy0oWzAtOV0uKylcLnRhclwuZ3oKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvZGVidWdmcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAzN2UwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMDggQEAKKyMKKyMgU3RhbmRhcmQgZTJmc3Byb2dzIHByb2xvZ3VlLi4uLgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK215X2RpciA9IGRlYnVnZnMKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK1BST0dTPQkJZGVidWdmcworTUFOUEFHRVM9CWRlYnVnZnMuOAorCitNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL2xpYi9zcyAuLi9saWIvc3MvbWtfY21kcworCitERUJVR19PQkpTPSBkZWJ1Z19jbWRzLm8gZGVidWdmcy5vIHV0aWwubyBuY2hlY2subyBpY2hlY2subyBscy5vIFwKKwlsc2RlbC5vIGR1bXAubyBzZXRfZmllbGRzLm8gbG9nZHVtcC5vIGh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIFwKKwlmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gZXh0ZW50X2lub2RlLm8gemFwLm8KKworUk9fREVCVUdfT0JKUz0gcm9fZGVidWdfY21kcy5vIHJvX2RlYnVnZnMubyB1dGlsLm8gbmNoZWNrLm8gaWNoZWNrLm8gbHMubyBcCisJbHNkZWwubyBsb2dkdW1wLm8gaHRyZWUubyBlMmZyZWVmcmFnLm8gZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIFwKKwlleHRlbnRfaW5vZGUubworCitTUkNTPSBkZWJ1Z19jbWRzLmMgJChzcmNkaXIpL2RlYnVnZnMuYyAkKHNyY2RpcikvdXRpbC5jICQoc3JjZGlyKS9scy5jIFwKKwkkKHNyY2RpcikvbmNoZWNrLmMgJChzcmNkaXIpL2ljaGVjay5jICQoc3JjZGlyKS9sc2RlbC5jIFwKKwkkKHNyY2RpcikvZHVtcC5jICQoc3JjZGlyKS9zZXRfZmllbGRzLmMgJHtzcmNkaXJ9L2xvZ2R1bXAuYyBcCisJJChzcmNkaXIpL2h0cmVlLmMgJChzcmNkaXIpL3VudXNlZC5jICR7c3JjZGlyfS8uLi9taXNjL2UyZnJlZWZyYWcuYyBcCisJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYworCitMSUJTPSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoTElCU1MpICQoTElCQ09NX0VSUikgJChMSUJCTEtJRCkgXAorCSQoTElCVVVJRCkKK0RFUExJQlM9ICQoTElCRVhUMkZTKSAkKExJQkUyUCkgJChERVBMSUJTUykgJChERVBMSUJDT01fRVJSKSBcCisJJChERVBMSUJCTEtJRCkgJChERVBMSUJVVUlEKQorCitTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJTUykgJChTVEFUSUNfTElCQ09NX0VSUikgXAorCSQoU1RBVElDX0xJQkJMS0lEKSAkKFNUQVRJQ19MSUJVVUlEKSAkKFNUQVRJQ19MSUJFMlApCitTVEFUSUNfREVQTElCUz0gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJTUykgXAorCQkkKERFUFNUQVRJQ19MSUJDT01fRVJSKSAkKERFUFNUQVRJQ19MSUJVVUlEKSBcCisJCSQoREVQU1RBVElDX0xJQkUyUCkKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorCithbGw6OiAkKFBST0dTKSAkKE1BTlBBR0VTKQorCitkZWJ1Z2ZzOiAkKERFQlVHX09CSlMpICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBkZWJ1Z2ZzICQoREVCVUdfT0JKUykgJChMSUJTKQorCitkZWJ1Z2ZzLnN0YXRpYzogJChERUJVR19PQkpTKSAkKFNUQVRJQ19ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoTERGTEFHU19TVEFUSUMpIC1vIGRlYnVnZnMuc3RhdGljICQoREVCVUdfT0JKUykgXAorCQkkKFNUQVRJQ19MSUJTKSAkKFJFQURMSU5FX0xJQikKKworcmRlYnVnZnM6ICQoUk9fREVCVUdfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIHJkZWJ1Z2ZzICQoUk9fREVCVUdfT0JKUykgJChMSUJTKQorCitkZWJ1Z19jbWRzLmMgZGVidWdfY21kcy5oOiBkZWJ1Z19jbWRzLmN0CisJJChFKSAiCU1LX0NNRFMgJEAiCisJJChRKSAkKE1LX0NNRFMpICQoc3JjZGlyKS9kZWJ1Z19jbWRzLmN0CisKK2V4dGVudF9jbWRzLmMgZXh0ZW50X2NtZHMuaDogZXh0ZW50X2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL2V4dGVudF9jbWRzLmN0CisKK3JvX2RlYnVnX2NtZHMuYyByb19kZWJ1Z19jbWRzLmg6IHJvX2RlYnVnX2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL3JvX2RlYnVnX2NtZHMuY3QKKworcm9fZGVidWdmcy5vOiBkZWJ1Z2ZzLmMKKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpICQ8IC1EUkVBRF9PTkxZIC1vICRACisKK2UyZnJlZWZyYWcubzogJChzcmNkaXIpLy4uL21pc2MvZTJmcmVlZnJhZy5jCisJJChFKSAiCUNDICRAIgorCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAtSSQoc3JjZGlyKSAkPCAtRERFQlVHRlMgLW8gJEAKKworZGVidWdmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZGVidWdmcy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2RlYnVnZnMuOC5pbiBkZWJ1Z2ZzLjgKKworaW5zdGFsbGRpcnM6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChyb290X3NiaW5kaXIpICQobWFuOGRpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikgXAorCQkkKERFU1RESVIpJChtYW44ZGlyKQorCitpbnN0YWxsOiAkKFBST0dTKSAkKE1BTlBBR0VTKSBpbnN0YWxsZGlycworCSQoUSkgZm9yIGkgaW4gJChQUk9HUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTEwgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoTUFOUEFHRVMpOyBkbyBcCisJCWZvciBqIGluICQoQ09NUFJFU1NfRVhUKTsgZG8gXAorCQkJJChSTSkgLWYgJChERVNURElSKSQobWFuOGRpcikvJCRpLiQkajsgXAorCQlkb25lOyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChtYW44ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisJJChRKSBmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQllY2hvICIJU1RSSVAgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChTVFJJUCkgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisKK3VuaW5zdGFsbDoKKwlmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKE1BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisKK2NsZWFuOgorCSQoUk0pIC1mICQoUFJPR1MpIGRlYnVnZnMuOCBcIyogKi5zICoubyAqLmEgKn4gZGVidWdfY21kcy5jIFwKKwkJZXh0ZW50X2NtZHMuYyByb19kZWJ1Z19jbWRzLmMgY29yZSByZGVidWdmcyBkZWJ1Z2ZzLnN0YXRpYworCittb3N0bHljbGVhbjogY2xlYW4KK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSAtZiBkZWJ1Z19jbWRzLmMgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyBcCisJCSQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitkZWJ1Z19jbWRzLm86IGRlYnVnX2NtZHMuYyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorZGVidWdmcy5vOiAkKHNyY2RpcikvZGVidWdmcy5jICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvc3Mvc3MuaCAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oIFwKKyAkKHNyY2RpcikvZGVidWdmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oICQoc3JjZGlyKS9qZnNfdXNlci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCit1dGlsLm86ICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaAorbHMubzogJChzcmNkaXIpL2xzLmMgJChzcmNkaXIpL2RlYnVnZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oCituY2hlY2subzogJChzcmNkaXIpL25jaGVjay5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmgKK2ljaGVjay5vOiAkKHNyY2RpcikvaWNoZWNrLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaAorbHNkZWwubzogJChzcmNkaXIpL2xzZGVsLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaAorZHVtcC5vOiAkKHNyY2RpcikvZHVtcC5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmgKK3NldF9maWVsZHMubzogJChzcmNkaXIpL3NldF9maWVsZHMuYyAkKHNyY2RpcikvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK2xvZ2R1bXAubzogJChzcmNkaXIpL2xvZ2R1bXAuYyAkKHNyY2RpcikvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvamZzX3VzZXIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCitodHJlZS5vOiAkKHNyY2RpcikvaHRyZWUuYyAkKHNyY2RpcikvZGVidWdmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK3VudXNlZC5vOiAkKHNyY2RpcikvdW51c2VkLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvZGVidWdfY21kcy5jdCBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnX2NtZHMuY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmZjAwZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnX2NtZHMuY3QKQEAgLTAsMCArMSwxOTQgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkzIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCitjb21tYW5kX3RhYmxlIGRlYnVnX2NtZHM7CisKK3JlcXVlc3QgZG9fc2hvd19kZWJ1Z2ZzX3BhcmFtcywgIlNob3cgZGVidWdmcyBwYXJhbWV0ZXJzIiwKKwlzaG93X2RlYnVnZnNfcGFyYW1zLCBwYXJhbXM7CisKK3JlcXVlc3QgZG9fb3Blbl9maWxlc3lzLCAiT3BlbiBhIGZpbGVzeXN0ZW0iLAorCW9wZW5fZmlsZXN5cywgb3BlbjsKKworcmVxdWVzdCBkb19jbG9zZV9maWxlc3lzLCAiQ2xvc2UgdGhlIGZpbGVzeXN0ZW0iLAorCWNsb3NlX2ZpbGVzeXMsIGNsb3NlOworCityZXF1ZXN0IGRvX2ZyZWVmcmFnLCAiUmVwb3J0IGZyZWUgc3BhY2UgZnJhZ21lbnRhdGlvbiIsCisJZnJlZWZyYWcsIGUyZnJlZWZyYWc7CisKK3JlcXVlc3QgZG9fZmVhdHVyZXMsICJTZXQvcHJpbnQgc3VwZXJibG9jayBmZWF0dXJlcyIsCisJZmVhdHVyZSwgZmVhdHVyZXM7CisKK3JlcXVlc3QgZG9fZGlydHlfZmlsZXN5cywgIk1hcmsgdGhlIGZpbGVzeXN0ZW0gYXMgZGlydHkiLAorCWRpcnR5X2ZpbGVzeXMsIGRpcnR5OworCityZXF1ZXN0IGRvX2luaXRfZmlsZXN5cywgIkluaXRpYWxpemUgYSBmaWxlc3lzdGVtIChERVNUUk9ZUyBEQVRBKSIsCisJaW5pdF9maWxlc3lzOworCityZXF1ZXN0IGRvX3Nob3dfc3VwZXJfc3RhdHMsICJTaG93IHN1cGVyYmxvY2sgc3RhdGlzdGljcyIsCisJc2hvd19zdXBlcl9zdGF0cywgc3RhdHM7CisKK3JlcXVlc3QgZG9fbmNoZWNrLCAiRG8gaW5vZGUtPm5hbWUgdHJhbnNsYXRpb24iLAorCW5jaGVjazsKKworcmVxdWVzdCBkb19pY2hlY2ssICJEbyBibG9jay0+aW5vZGUgdHJhbnNsYXRpb24iLAorCWljaGVjazsKKworcmVxdWVzdCBkb19jaHJvb3QsICJDaGFuZ2Ugcm9vdCBkaXJlY3RvcnkiLAorCWNoYW5nZV9yb290X2RpcmVjdG9yeSwgY2hyb290OworCityZXF1ZXN0IGRvX2NoYW5nZV93b3JraW5nX2RpciwgIkNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIsCisJY2hhbmdlX3dvcmtpbmdfZGlyZWN0b3J5LCBjZDsKKworcmVxdWVzdCBkb19saXN0X2RpciwgIkxpc3QgZGlyZWN0b3J5IiwKKwlsaXN0X2RpcmVjdG9yeSwgbHM7CisKK3JlcXVlc3QgZG9fc3RhdCwgIlNob3cgaW5vZGUgaW5mb3JtYXRpb24gIiwKKwlzaG93X2lub2RlX2luZm8sIHN0YXQ7CisKK3JlcXVlc3QgZG9fZHVtcF9leHRlbnRzLCAiRHVtcCBleHRlbnRzIGluZm9ybWF0aW9uICIsCisJZHVtcF9leHRlbnRzLCBleHRlbnRzLCBleDsKKworcmVxdWVzdCBkb19ibG9ja3MsICJEdW1wIGJsb2NrcyB1c2VkIGJ5IGFuIGlub2RlICIsCisJYmxvY2tzOworCityZXF1ZXN0IGRvX2ZpbGVmcmFnLCAiUmVwb3J0IGZyYWdtZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGlub2RlIiwKKwlmaWxlZnJhZzsKKworcmVxdWVzdCBkb19saW5rLCAiQ3JlYXRlIGRpcmVjdG9yeSBsaW5rIiwKKwlsaW5rLCBsbjsKKworcmVxdWVzdCBkb191bmxpbmssICJEZWxldGUgYSBkaXJlY3RvcnkgbGluayIsCisJdW5saW5rOworCityZXF1ZXN0IGRvX21rZGlyLCAiQ3JlYXRlIGEgZGlyZWN0b3J5IiwKKwlta2RpcjsKKworcmVxdWVzdCBkb19ybWRpciwgIlJlbW92ZSBhIGRpcmVjdG9yeSIsCisJcm1kaXI7CisKK3JlcXVlc3QgZG9fcm0sICJSZW1vdmUgYSBmaWxlICh1bmxpbmsgYW5kIGtpbGxfZmlsZSwgaWYgYXBwcm9wcmlhdGUpIiwKKwlybTsKKworcmVxdWVzdCBkb19raWxsX2ZpbGUsICJEZWFsbG9jYXRlIGFuIGlub2RlIGFuZCBpdHMgYmxvY2tzIiwKKwlraWxsX2ZpbGU7CisKK3JlcXVlc3QgZG9fY2xyaSwgIkNsZWFyIGFuIGlub2RlJ3MgY29udGVudHMiLAorCWNscmk7CisKK3JlcXVlc3QgZG9fZnJlZWksICJDbGVhciBhbiBpbm9kZSdzIGluLXVzZSBmbGFnIiwKKwlmcmVlaTsKKworcmVxdWVzdCBkb19zZXRpLCAiU2V0IGFuIGlub2RlJ3MgaW4tdXNlIGZsYWciLAorCXNldGk7CisKK3JlcXVlc3QgZG9fdGVzdGksICJUZXN0IGFuIGlub2RlJ3MgaW4tdXNlIGZsYWciLAorCXRlc3RpOworCityZXF1ZXN0IGRvX2ZyZWViLCAiQ2xlYXIgYSBibG9jaydzIGluLXVzZSBmbGFnIiwKKwlmcmVlYjsKKworcmVxdWVzdCBkb19zZXRiLCAiU2V0IGEgYmxvY2sncyBpbi11c2UgZmxhZyIsCisJc2V0YjsKKworcmVxdWVzdCBkb190ZXN0YiwgIlRlc3QgYSBibG9jaydzIGluLXVzZSBmbGFnIiwKKwl0ZXN0YjsKKworcmVxdWVzdCBkb19tb2RpZnlfaW5vZGUsICJNb2RpZnkgYW4gaW5vZGUgYnkgc3RydWN0dXJlIiwKKwltb2RpZnlfaW5vZGUsIG1pOworCityZXF1ZXN0IGRvX2ZpbmRfZnJlZV9ibG9jaywgIkZpbmQgZnJlZSBibG9jayhzKSIsCisJZmluZF9mcmVlX2Jsb2NrLCBmZmI7CisKK3JlcXVlc3QgZG9fZmluZF9mcmVlX2lub2RlLCAiRmluZCBmcmVlIGlub2RlKHMpIiwKKwlmaW5kX2ZyZWVfaW5vZGUsIGZmaTsKKworcmVxdWVzdAlkb19wcmludF93b3JraW5nX2RpcmVjdG9yeSwgIlByaW50IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiLAorCXByaW50X3dvcmtpbmdfZGlyZWN0b3J5LCBwd2Q7IAorCityZXF1ZXN0CWRvX2V4cGFuZF9kaXIsICJFeHBhbmQgZGlyZWN0b3J5IiwKKwlleHBhbmRfZGlyLCBleHBhbmQ7CisKK3JlcXVlc3QgZG9fbWtub2QsICJDcmVhdGUgYSBzcGVjaWFsIGZpbGUiLAorCW1rbm9kOworCityZXF1ZXN0IGRvX2xzZGVsLCAiTGlzdCBkZWxldGVkIGlub2RlcyIsCisJbGlzdF9kZWxldGVkX2lub2RlcywgbHNkZWw7CisKK3JlcXVlc3QgZG9fdW5kZWwsICJVbmRlbGV0ZSBmaWxlIiwKKwl1bmRlbGV0ZSwgdW5kZWw7CisKK3JlcXVlc3QgZG9fd3JpdGUsICJDb3B5IGEgZmlsZSBmcm9tIHlvdXIgbmF0aXZlIGZpbGVzeXN0ZW0iLAorCXdyaXRlOworCityZXF1ZXN0IGRvX2R1bXAsICJEdW1wIGFuIGlub2RlIG91dCB0byBhIGZpbGUiLAorCWR1bXBfaW5vZGUsIGR1bXA7CisKK3JlcXVlc3QgZG9fY2F0LCAiRHVtcCBhbiBpbm9kZSBvdXQgdG8gc3Rkb3V0IiwKKwljYXQ7CisKK3JlcXVlc3QgZG9fbGNkLCAiQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiB5b3VyIG5hdGl2ZSBmaWxlc3lzdGVtIiwKKwlsY2Q7CisKK3JlcXVlc3QgZG9fcmR1bXAsICJSZWN1cnNpdmVseSBkdW1wIGEgZGlyZWN0b3J5IHRvIHRoZSBuYXRpdmUgZmlsZXN5c3RlbSIsCisJcmR1bXA7CisKK3JlcXVlc3QgZG9fc2V0X3N1cGVyLCAiU2V0IHN1cGVyYmxvY2sgdmFsdWUiLAorCXNldF9zdXBlcl92YWx1ZSwgc3N2OworCityZXF1ZXN0IGRvX3NldF9pbm9kZSwgIlNldCBpbm9kZSBmaWVsZCIsCisJc2V0X2lub2RlX2ZpZWxkLCBzaWY7CisKK3JlcXVlc3QgZG9fc2V0X2Jsb2NrX2dyb3VwX2Rlc2NyaXB0b3IsICJTZXQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBmaWVsZCIsCisJc2V0X2Jsb2NrX2dyb3VwLCBzZXRfYmc7CisKK3JlcXVlc3QgZG9fbG9nZHVtcCwgIkR1bXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBqb3VybmFsIiwKKwlsb2dkdW1wOworCityZXF1ZXN0IGRvX2h0cmVlX2R1bXAsICJEdW1wIGEgaGFzaC1pbmRleGVkIGRpcmVjdG9yeSIsCisJaHRyZWVfZHVtcCwgaHRyZWU7CisKK3JlcXVlc3QgZG9fZHhfaGFzaCwgIkNhbGN1bGF0ZSB0aGUgZGlyZWN0b3J5IGhhc2ggb2YgYSBmaWxlbmFtZSIsCisJZHhfaGFzaCwgaGFzaDsKKworcmVxdWVzdCBkb19kaXJzZWFyY2gsICJTZWFyY2ggYSBkaXJlY3RvcnkgZm9yIGEgcGFydGljdWxhciBmaWxlbmFtZSIsCisJZGlyc2VhcmNoOworCityZXF1ZXN0IGRvX2JtYXAsICJDYWxjdWxhdGUgdGhlIGxvZ2ljYWwtPnBoeXNpY2FsIGJsb2NrIG1hcHBpbmcgZm9yIGFuIGlub2RlIiwKKwlibWFwOworCityZXF1ZXN0IGRvX3B1bmNoLCAiUHVuY2ggKG9yIHRydW5jYXRlKSBibG9ja3MgZnJvbSBhbiBpbm9kZSBieSBkZWFsbG9jYXRpbmcgdGhlbSIsCisJcHVuY2gsIHRydW5jYXRlOworCityZXF1ZXN0IGRvX3N5bWxpbmssICJDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIiwKKwlzeW1saW5rOworCityZXF1ZXN0IGRvX2ltYXAsICJDYWxjdWxhdGUgdGhlIGxvY2F0aW9uIG9mIGFuIGlub2RlIiwKKwlpbWFwOworCityZXF1ZXN0CWRvX2R1bXBfdW51c2VkLCAiRHVtcCB1bnVzZWQgYmxvY2tzIiwKKwlkdW1wX3VudXNlZDsKKworcmVxdWVzdCBkb19zZXRfY3VycmVudF90aW1lLCAiU2V0IGN1cnJlbnQgdGltZSB0byB1c2Ugd2hlbiBzZXR0aW5nIGZpbGVzeXN0ZW0gZmllbGRzIiwKKwlzZXRfY3VycmVudF90aW1lOworCityZXF1ZXN0IGRvX3N1cHBvcnRlZF9mZWF0dXJlcywgIlByaW50IGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgZTJmc3Byb2dzIiwKKwlzdXBwb3J0ZWRfZmVhdHVyZXM7CisKK3JlcXVlc3QgZG9fZHVtcF9tbXAsICJEdW1wIE1NUCBpbmZvcm1hdGlvbiIsCisJZHVtcF9tbXA7CisKK3JlcXVlc3QgZG9fc2V0X21tcF92YWx1ZSwgIlNldCBNTVAgdmFsdWUiLAorCXNldF9tbXBfdmFsdWUsIHNtbXA7CisKK3JlcXVlc3QgZG9fZXh0ZW50X29wZW4sICJPcGVuIGlub2RlIGZvciBleHRlbnQgbWFuaXB1bGF0aW9uIiwKKwlleHRlbnRfb3BlbiwgZW87CisKK3JlcXVlc3QgZG9femFwX2Jsb2NrLCAiWmFwIGJsb2NrOiBmaWxsIHdpdGggMCwgcGF0dGVybiwgZmxpcCBiaXRzIGV0Yy4iLAorCXphcF9ibG9jaywgemFwOworCityZXF1ZXN0IGRvX2Jsb2NrX2R1bXAsICJEdW1wIGNvbnRlbnRzIG9mIGEgYmxvY2siLAorCWJsb2NrX2R1bXAsIGJkOworCitlbmQ7CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnZnMuOC5pbiBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnZnMuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzI1NGQzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvZGVidWdmcy44LmluCkBAIC0wLDAgKzEsNzE4IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggREVCVUdGUyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitkZWJ1Z2ZzIFwtIGV4dDIvZXh0My9leHQ0IGZpbGUgc3lzdGVtIGRlYnVnZ2VyCisuU0ggU1lOT1BTSVMKKy5CIGRlYnVnZnMKK1sKKy5CIFwtRFZ3Y2kKK10KK1sKKy5CIFwtYgorYmxvY2tzaXplCitdCitbCisuQiBcLXMKK3N1cGVyYmxvY2sKK10KK1sKKy5CIFwtZgorY21kX2ZpbGUKK10KK1sKKy5CIFwtUgorcmVxdWVzdAorXQorWworLkIgXC1kCitkYXRhX3NvdXJjZV9kZXZpY2UKK10KK1sKK2RldmljZQorXQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGRlYnVnZnMKK3Byb2dyYW0gaXMgYW4gaW50ZXJhY3RpdmUgZmlsZSBzeXN0ZW0gZGVidWdnZXIuIEl0IGNhbiBiZSB1c2VkIHRvCitleGFtaW5lIGFuZCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZSBzeXN0ZW0uCisuYnIKKy5JIGRldmljZQoraXMgdGhlIHNwZWNpYWwgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2UgY29udGFpbmluZyB0aGUKK2ZpbGUgc3lzdGVtIChlLmcgL2Rldi9oZFhYKS4KKy5TSCBPUFRJT05TCisuVFAKKy5JIFwtdworU3BlY2lmaWVzIHRoYXQgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBiZSBvcGVuZWQgaW4gcmVhZC13cml0ZSBtb2RlLgorV2l0aG91dCB0aGlzIG9wdGlvbiwgdGhlIGZpbGUgc3lzdGVtIGlzIG9wZW5lZCBpbiByZWFkLW9ubHkgbW9kZS4KKy5UUAorLkkgXC1jCitTcGVjaWZpZXMgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gc2hvdWxkIGJlIG9wZW5lZCBpbiBjYXRhc3Ryb3BoaWMgbW9kZSwgaW4KK3doaWNoIHRoZSBpbm9kZSBhbmQgZ3JvdXAgYml0bWFwcyBhcmUgbm90IHJlYWQgaW5pdGlhbGx5LiAgVGhpcyBjYW4gYmUKK3VzZWZ1bCBmb3IgZmlsZXN5c3RlbXMgd2l0aCBzaWduaWZpY2FudCBjb3JydXB0aW9uLCBidXQgYmVjYXVzZSBvZiB0aGlzLAorY2F0YXN0cm9waGljIG1vZGUgZm9yY2VzIHRoZSBmaWxlc3lzdGVtIHRvIGJlIG9wZW5lZCByZWFkLW9ubHkuCisuVFAKKy5JIFwtaQorU3BlY2lmaWVzIHRoYXQKKy5JIGRldmljZQorcmVwcmVzZW50cyBhbiBleHQyIGltYWdlIGZpbGUgY3JlYXRlZCBieSB0aGUKKy5CIGUyaW1hZ2UKK3Byb2dyYW0uICBTaW5jZSB0aGUgZXh0MiBpbWFnZSBmaWxlIG9ubHkgY29udGFpbnMgdGhlIHN1cGVyYmxvY2ssIGJsb2NrCitncm91cCBkZXNjcmlwdG9yLCBibG9jayBhbmQgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXBzLCBhbmQKK3RoZSBpbm9kZSB0YWJsZSwgbWFueQorLkIgZGVidWdmcworY29tbWFuZHMgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkuCisuQiBXYXJuaW5nOgorbm8gc2FmZXR5IGNoZWNrcyBhcmUgaW4gcGxhY2UsIGFuZAorLkIgZGVidWdmcworbWF5IGZhaWwgaW4gaW50ZXJlc3Rpbmcgd2F5cyBpZiBjb21tYW5kcyBzdWNoIGFzCisuSVIgbHMgIiwgIiBkdW1wICIsICIKK2V0Yy4gYXJlIHRyaWVkIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUKKy5JIGRhdGFfc291cmNlX2RldmljZQordXNpbmcgdGhlCisuSSBcLWQKK29wdGlvbi4KKy5CIGRlYnVnZnMKK2lzIGEgZGVidWdnaW5nIHRvb2wuICBJdCBoYXMgcm91Z2ggZWRnZXMhCisuVFAKKy5JIC1kIGRhdGFfc291cmNlX2RldmljZQorVXNlZCB3aXRoIHRoZQorLkkgXC1pCitvcHRpb24sIHNwZWNpZmllcyB0aGF0CisuSSBkYXRhX3NvdXJjZV9kZXZpY2UKK3Nob3VsZCBiZSB1c2VkIHdoZW4gcmVhZGluZyBibG9ja3Mgbm90IGZvdW5kIGluIHRoZSBleHQyIGltYWdlIGZpbGUuCitUaGlzIGluY2x1ZGVzIGRhdGEsIGRpcmVjdG9yeSwgYW5kIGluZGlyZWN0IGJsb2Nrcy4KKy5UUAorLkkgLWIgYmxvY2tzaXplCitGb3JjZXMgdGhlIHVzZSBvZiB0aGUgZ2l2ZW4gYmxvY2sgc2l6ZSBmb3IgdGhlIGZpbGUgc3lzdGVtLCByYXRoZXIgdGhhbgorZGV0ZWN0aW5nIHRoZSBjb3JyZWN0IGJsb2NrIHNpemUgYXMgbm9ybWFsLgorLlRQCisuSSAtcyBzdXBlcmJsb2NrCitDYXVzZXMgdGhlIGZpbGUgc3lzdGVtIHN1cGVyYmxvY2sgdG8gYmUgcmVhZCBmcm9tIHRoZSBnaXZlbiBibG9jaworbnVtYmVyLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKGxvY2F0ZWQgYXQgYW4gb2Zmc2V0IG9mCisxMDI0IGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZXN5c3RlbSkuICBJZiB5b3Ugc3BlY2lmeSB0aGUKKy5JIC1zCitvcHRpb24sIHlvdSBtdXN0IGFsc28gcHJvdmlkZSB0aGUgYmxvY2tzaXplIG9mIHRoZSBmaWxlc3lzdGVtIHZpYSB0aGUKKy5JIC1iCitvcHRpb24uCisuVFAKKy5JIC1mIGNtZF9maWxlCitDYXVzZXMKKy5CIGRlYnVnZnMKK3RvIHJlYWQgaW4gY29tbWFuZHMgZnJvbQorLklSIGNtZF9maWxlICwKK2FuZCBleGVjdXRlIHRoZW0uICBXaGVuCisuQiBkZWJ1Z2ZzCitpcyBmaW5pc2hlZCBleGVjdXRpbmcgdGhvc2UgY29tbWFuZHMsIGl0IHdpbGwgZXhpdC4KKy5UUAorLkkgLUQKK0NhdXNlcworLkIgZGVidWdmcwordG8gb3BlbiB0aGUgZGV2aWNlIHVzaW5nIERpcmVjdCBJL08sIGJ5cGFzc2luZyB0aGUgYnVmZmVyIGNhY2hlLiAgTm90ZQordGhhdCBzb21lIExpbnV4IGRldmljZXMsIG5vdGFibHkgZGV2aWNlIG1hcHBlciBhcyBvZiB0aGlzIHdyaXRpbmcsIGRvCitub3Qgc3VwcG9ydCBEaXJlY3QgSS9PLgorLlRQCisuSSAtUiByZXF1ZXN0CitDYXVzZXMKKy5CIGRlYnVnZnMKK3RvIGV4ZWN1dGUgdGhlIHNpbmdsZSBjb21tYW5kCisuSVIgcmVxdWVzdCAsCithbmQgdGhlbiBleGl0LgorLlRQCisuSSAtVgorcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mCisuQiBkZWJ1Z2ZzCithbmQgZXhpdC4KKy5TSCBTUEVDSUZZSU5HIEZJTEVTCitNYW55CisuQiBkZWJ1Z2ZzCitjb21tYW5kcyB0YWtlIGEKKy5JIGZpbGVzcGVjCithcyBhbiBhcmd1bWVudCB0byBzcGVjaWZ5IGFuIGlub2RlIChhcyBvcHBvc2VkIHRvIGEgcGF0aG5hbWUpCitpbiB0aGUgZmlsZXN5c3RlbSB3aGljaCBpcyBjdXJyZW50bHkgb3BlbmVkIGJ5CisuQlIgZGVidWdmcyAuCitUaGUKKy5JIGZpbGVzcGVjCithcmd1bWVudCBtYXkgYmUgc3BlY2lmaWVkIGluIHR3byBmb3Jtcy4gIFRoZSBmaXJzdCBmb3JtIGlzIGFuIGlub2RlCitudW1iZXIgc3Vycm91bmRlZCBieSBhbmdsZSBicmFja2V0cywgZS5nLiwKKy5JUiA8Mj4gLgorVGhlIHNlY29uZCBmb3JtIGlzIGEgcGF0aG5hbWU7IGlmIHRoZSBwYXRobmFtZSBpcyBwcmVmaXhlZCBieSBhIGZvcndhcmQgc2xhc2gKKygnLycpLCB0aGVuIGl0IGlzIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtCit3aGljaCBpcyBjdXJyZW50bHkgb3BlbmVkIGJ5CisuQlIgZGVidWdmcyAuCitJZiBub3QsIHRoZSBwYXRobmFtZSBpcworaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXMgbWFpbnRhaW5lZCBieQorLkJSIGRlYnVnZnMgLgorVGhpcyBtYXkgYmUgbW9kaWZpZWQgYnkgdXNpbmcgdGhlCisuQiBkZWJ1Z2ZzCitjb21tYW5kCisuSVIgY2QgLgorLlwiCisuXCIKKy5cIgorLlNIIENPTU1BTkRTCitUaGlzIGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZHMgd2hpY2gKKy5CIGRlYnVnZnMKK3N1cHBvcnRzLgorLlRQCisuQkkgYmxvY2tzICIgZmlsZXNwYWNlIgorUHJpbnQgdGhlIGJsb2NrcyB1c2VkIGJ5IHRoZSBpbm9kZQorLkkgZmlsZXNwZWMKK3RvIHN0ZG91dC4KKy5UUAorLkJJIGJtYXAgIiBmaWxlc3BlYyBsb2dpY2FsX2Jsb2NrIgorUHJpbnQgdGhlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlcgorLkkgbG9naWNhbF9ibG9jaworaW4gdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgYmxvY2tfZHVtcCAiIFstZiBmaWxlc3BlY10gYmxvY2tfbnVtIgorRHVtcCB0aGUgZmlsZXN5c3RlbSBibG9jayBnaXZlbiBieQorLkkgYmxvY2tfbnVtCitpbiBoZXggYW5kIEFTQ0lJIGZvcm1hdCB0byB0aGUgY29uc29sZS4gIElmIHRoZQorLkkgLWYKK29wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBibG9jayBudW1iZXIgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbgorLkJSIGZpbGVzcGVjIC4KKy5UUAorLkJJIGNhdCAiIGZpbGVzcGVjIgorRHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGlub2RlCisuSSBmaWxlc3BlYwordG8gc3Rkb3V0LgorLlRQCisuQkkgY2QgIiBmaWxlc3BlYyIKK0NoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0bworLklSIGZpbGVzcGVjIC4KKy5UUAorLkJJIGNocm9vdCAiIGZpbGVzcGVjIgorQ2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSB0byBiZSB0aGUgZGlyZWN0b3J5CisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgY2xvc2UgIiBbLWFdIgorQ2xvc2UgdGhlIGN1cnJlbnRseSBvcGVuIGZpbGUgc3lzdGVtLiAgSWYgdGhlCisuSSAtYQorb3B0aW9uIGlzIHNwZWNpZmllZCwgd3JpdGUgb3V0IGFueSBjaGFuZ2VzIHRvIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jaworZ3JvdXAgZGVzY3JpcHRvcnMgdG8gYWxsIG9mIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MsIG5vdCBqdXN0IHRvIHRoZQorbWFzdGVyIHN1cGVyYmxvY2suCisuVFAKKy5CSSBjbHJpICIgZmlsZXNwZWMiCitDbGVhciB0aGUgY29udGVudHMgb2YgdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgZGlyc2VhcmNoICIgZmlsZXNwZWMgZmlsZW5hbWUiCitTZWFyY2ggdGhlIGRpcmVjdG9yeQorLkkgZmlsZXNwZWMKK2ZvcgorLklSIGZpbGVuYW1lIC4KKy5UUAorLkIgZGlydHkKK01hcmsgdGhlIGZpbGVzeXN0ZW0gYXMgZGlydHksIHNvIHRoYXQgdGhlIHN1cGVyYmxvY2tzIHdpbGwgYmUgd3JpdHRlbiBvbiBleGl0LgorLlRQCisuQkkgZHVtcCAiIFstcF0gZmlsZXNwZWMgb3V0X2ZpbGUiCitEdW1wIHRoZSBjb250ZW50cyBvZiB0aGUgaW5vZGUKKy5JIGZpbGVzcGVjCit0byB0aGUgb3V0cHV0IGZpbGUKKy5JUiBvdXRfZmlsZSAuCitJZiB0aGUKKy5JIC1wCitvcHRpb24gaXMgZ2l2ZW4gc2V0IHRoZSBvd25lciwgZ3JvdXAgYW5kIHBlcm1pc3Npb25zIGluZm9ybWF0aW9uIG9uCisuSSBvdXRfZmlsZQordG8gbWF0Y2gKKy5JUiBmaWxlc3BlYyAuCisuVFAKKy5CIGR1bXBfbW1wCitEaXNwbGF5IHRoZSBtdWx0aXBsZS1tb3VudCBwcm90ZWN0aW9uIChtbXApIGZpZWxkIHZhbHVlcy4KKy5UUAorLkJJIGR4X2hhc2ggIiBbLWggaGFzaF9hbGddIFstcyBoYXNoX3NlZWRdIGZpbGVuYW1lIgorQ2FsY3VsYXRlIHRoZSBkaXJlY3RvcnkgaGFzaCBvZgorLklSIGZpbGVuYW1lIC4KK1RoZSBoYXNoIGFsZ29yaXRobSBzcGVjaWZpZWQgd2l0aAorLkkgLWgKK21heSBiZQorLkJSIGxlZ2FjeSAsICIgaGFsZl9tZDQiICIsIG9yICIgdGVhIC4KK1RoZSBoYXNoIHNlZWQgc3BlY2lmaWVkIHdpdGgKKy5JIC1zCittdXN0IGJlIGluIFVVSUQgZm9ybWF0LgorLlRQCisuQkkgZHVtcF9leHRlbnRzICIgWy1uXSBbLWxdIGZpbGVzcGVjIgorRHVtcCB0aGUgdGhlIGV4dGVudCB0cmVlIG9mIHRoZSBpbm9kZQorLklSIGZpbGVzcGVjIC4KK1RoZQorLkkgLW4KK2ZsYWcgd2lsbCBjYXVzZQorLkIgZHVtcF9leHRlbnRzCit0byBvbmx5IGRpc3BsYXkgdGhlIGludGVyaW9yIG5vZGVzIGluIHRoZSBleHRlbnQgdHJlZS4gICBUaGUKKy5JIC1sCitmbGFnIHdpbGwgY2F1c2UKKy5CIGR1bXBfZXh0ZW50cwordG8gb25seSBkaXNwbGF5IHRoZSBsZWFmIG5vZGVzIGluIHRoZSBleHRlbnQgdHJlZS4KKy5JUAorKFBsZWFzZSBub3RlIHRoYXQgdGhlIGxlbmd0aCBhbmQgcmFuZ2Ugb2YgYmxvY2tzIGZvciB0aGUgbGFzdCBleHRlbnQgaW4KK2FuIGludGVyaW9yIG5vZGUgaXMgYW4gZXN0aW1hdGUgYnkgdGhlIGV4dGVudHMgbGlicmFyeSBmdW5jdGlvbnMsIGFuZCBpcworbm90IHN0b3JlZCBpbiBmaWxlc3lzdGVtIGRhdGEgc3RydWN0dXJlcy4gICBIZW5jZSwgdGhlIHZhbHVlcyBkaXNwbGF5ZWQKK21heSBub3QgbmVjZXNzYXJpbHkgYnkgYWNjdXJhdGUgYW5kIGRvZXMgbm90IGluZGljYXRlIGEgcHJvYmxlbSBvcgorY29ycnVwdGlvbiBpbiB0aGUgZmlsZSBzeXN0ZW0uKQorLlRQCisuQkkgZXhwYW5kX2RpciAiIGZpbGVzcGVjIgorRXhwYW5kIHRoZSBkaXJlY3RvcnkKKy5JUiBmaWxlc3BlYyAuCisuVFAKKy5CSSBmZWF0dXJlICIgW2ZzX2ZlYXR1cmVdIFstZnNfZmVhdHVyZV0gLi4uIgorU2V0IG9yIGNsZWFyIHZhcmlvdXMgZmlsZXN5c3RlbSBmZWF0dXJlcyBpbiB0aGUgc3VwZXJibG9jay4gIEFmdGVyIHNldHRpbmcKK29yIGNsZWFyaW5nIGFueSBmaWxlc3lzdGVtIGZlYXR1cmVzIHRoYXQgd2VyZSByZXF1ZXN0ZWQsIHByaW50IHRoZSBjdXJyZW50CitzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBmZWF0dXJlIHNldC4KKy5UUAorLkJJIGZpbGVmcmFnICIgWy1kdnJdIGZpbGVzcGVjIgorUHJpbnQgdGhlIG51bWJlciBvZiBjb250aWd1b3VzIGV4dGVudHMgaW4KKy5JUiBmaWxlc3BlYyAuCitJZgorLkkgZmlsZXNwZWMKK2lzIGEgZGlyZWN0b3J5IGFuZCB0aGUKKy5JIC1kCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKy5JIGZpbGVmcmFnCit3aWxsIHByaW50IHRoZSBudW1iZXIgb2YgY29udGlndW91cyBleHRlbnRzIGZvciBlYWNoIGZpbGUgaW4KK3RoZSBkaXJlY3RvcnkuICBUaGUKKy5JIC12CitvcHRpb24gd2lsbCBjYXVzZQorLkkgZmlsZWZyYWcKK3ByaW50IGEgdGFidWxhciBsaXN0aW5nIG9mIHRoZSBjb250aWd1b3VzIGV4dGVudHMgaW4gdGhlCitmaWxlLiAgVGhlCisuSSAtcgorb3B0aW9uIHdpbGwgY2F1c2UKKy5JIGZpbGVmcmFnCit0byBkbyBhIHJlY3Vyc2l2ZSBsaXN0aW5nIG9mIHRoZSBkaXJlY3RvcnkuCisuVFAKKy5CSSBmaW5kX2ZyZWVfYmxvY2sgIiBbY291bnQgW2dvYWxdXSIKK0ZpbmQgdGhlIGZpcnN0CisuSSBjb3VudAorZnJlZSBibG9ja3MsIHN0YXJ0aW5nIGZyb20KKy5JIGdvYWwKK2FuZCBhbGxvY2F0ZSBpdC4gIEFsc28gYXZhaWxhYmxlIGFzCisuQlIgZmZiIC4KKy5UUAorLkJJIGZpbmRfZnJlZV9pbm9kZSAiIFtkaXIgW21vZGVdXSIKK0ZpbmQgYSBmcmVlIGlub2RlIGFuZCBhbGxvY2F0ZSBpdC4gIElmIHByZXNlbnQsCisuSSBkaXIKK3NwZWNpZmllcyB0aGUgaW5vZGUgbnVtYmVyIG9mIHRoZSBkaXJlY3RvcnkKK3doaWNoIHRoZSBpbm9kZSBpcyB0byBiZSBsb2NhdGVkLiAgVGhlIHNlY29uZAorb3B0aW9uYWwgYXJndW1lbnQKKy5JIG1vZGUKK3NwZWNpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIG5ldyBpbm9kZS4gIChJZiB0aGUgZGlyZWN0b3J5IGJpdCBpcyBzZXQKK29uIHRoZSBtb2RlLCB0aGUgYWxsb2NhdGlvbiByb3V0aW5lIHdpbGwgZnVuY3Rpb24gZGlmZmVyZW50bHkuKSAgQWxzbworYXZhaWxhYmxlIGFzCisuQlIgZmZpIC4KKy5UUAorLkJJIGZyZWViICIgYmxvY2sgW2NvdW50XSIKK01hcmsgdGhlIGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK2FzIG5vdCBhbGxvY2F0ZWQuCitJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQKKy5JIGNvdW50CitpcyBwcmVzZW50LCB0aGVuCisuSSBjb3VudAorYmxvY2tzIHN0YXJ0aW5nIGF0IGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK3dpbGwgYmUgbWFya2VkIGFzIG5vdCBhbGxvY2F0ZWQuCisuVFAKKy5CSSBmcmVlZnJhZyAiIFstYyBjaHVua19rYl0iCitSZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIG9uIHRoZSBjdXJyZW50bHkgb3BlbiBmaWxlIHN5c3RlbS4KK0lmIHRoZQorLkkgXC1jCitvcHRpb24gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpbGVmcmFnIGNvbW1hbmQgd2lsbCBwcmludCBob3cgbWFueSBmcmVlCitjaHVua3Mgb2Ygc2l6ZQorLkkgY2h1bmtfa2IKK2NhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBzeXN0ZW0uICBUaGUgY2h1bmsgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvCithbmQgYmUgbGFyZ2VyIHRoYW4gdGhlIGZpbGUgc3lzdGVtIGJsb2NrIHNpemUuCisuVFAKKy5CSSBmcmVlaSAiIGZpbGVzcGVjIFtudW1dIgorRnJlZSB0aGUgaW5vZGUgc3BlY2lmaWVkIGJ5CisuSVIgZmlsZXNwZWMgLgorSWYKKy5JIG51bQoraXMgc3BlY2lmaWVkLCBhbHNvIGNsZWFyIG51bS0xIGlub2RlcyBhZnRlciB0aGUgc3BlY2lmaWVkIGlub2RlLgorLlRQCisuQiBoZWxwCitQcmludCBhIGxpc3Qgb2YgY29tbWFuZHMgdW5kZXJzdG9vZCBieQorLkJSIGRlYnVnZnMgLgorLlRQCisuQkkgaHRyZWVfZHVtcCAiIGZpbGVzcGVjIgorRHVtcCB0aGUgaGFzaC1pbmRleGVkIGRpcmVjdG9yeQorLklSIGZpbGVzcGVjICwKK3Nob3dpbmcgaXRzIHRyZWUgc3RydWN0dXJlLgorLlRQCisuQkkgaWNoZWNrICIgYmxvY2sgLi4uIgorUHJpbnQgYSBsaXN0aW5nIG9mIHRoZSBpbm9kZXMgd2hpY2ggdXNlIHRoZSBvbmUgb3IgbW9yZSBibG9ja3Mgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuQkkgaW1hcCAiIGZpbGVzcGVjIgorUHJpbnQgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbm9kZSBkYXRhIHN0cnVjdHVyZSAoaW4gdGhlIGlub2RlIHRhYmxlKQorb2YgdGhlIGlub2RlCisuSVIgZmlsZXNwZWMgLgorLlRQCisuQkkgaW5pdF9maWxlc3lzICIgZGV2aWNlIGJsb2Nrc2l6ZSIKK0NyZWF0ZSBhbiBleHQyIGZpbGUgc3lzdGVtIG9uCisuSSBkZXZpY2UKK3dpdGggZGV2aWNlIHNpemUKKy5JUiBibG9ja3NpemUgLgorTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZnVsbHkgaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGRhdGEgc3RydWN0dXJlczsKK3RvIGRvIHRoaXMsIHVzZSB0aGUKKy5CUiBta2UyZnMgKDgpCitwcm9ncmFtLiAgVGhpcyBpcyBqdXN0IGEgY2FsbCB0byB0aGUgbG93LWxldmVsIGxpYnJhcnksIHdoaWNoIHNldHMgdXAKK3RoZSBzdXBlcmJsb2NrIGFuZCBibG9jayBkZXNjcmlwdG9ycy4KKy5UUAorLkJJIGtpbGxfZmlsZSAiIGZpbGVzcGVjIgorRGVhbGxvY2F0ZSB0aGUgaW5vZGUKKy5JIGZpbGVzcGVjCithbmQgaXRzIGJsb2Nrcy4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlbW92ZSBhbnkgZGlyZWN0b3J5CitlbnRyaWVzIChpZiBhbnkpIHRvIHRoaXMgaW5vZGUuICBTZWUgdGhlCisuQlIgcm0gKDEpCitjb21tYW5kIGlmIHlvdSB3aXNoIHRvIHVubGluayBhIGZpbGUuCisuVFAKKy5CSSBsY2QgIiBkaXJlY3RvcnkiCitDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlCisuQiBkZWJ1Z2ZzCitwcm9jZXNzIHRvCisuSSBkaXJlY3RvcnkKK29uIHRoZSBuYXRpdmUgZmlsZXN5c3RlbS4KKy5UUAorLkJJIGxuICIgZmlsZXNwZWMgZGVzdF9maWxlIgorQ3JlYXRlIGEgbGluayBuYW1lZAorLkkgZGVzdF9maWxlCit3aGljaCBpcyBhIGhhcmQgbGluayB0bworLklSIGZpbGVzcGVjIC4KK05vdGUgdGhpcyBkb2VzIG5vdCBhZGp1c3QgdGhlIGlub2RlIHJlZmVyZW5jZSBjb3VudHMuCisuVFAKKy5CSSBsb2dkdW1wICIgWy1hY3NdIFstYiBibG9ja10gWy1pIGZpbGVzcGVjXSBbLWYgam91cm5hbF9maWxlXSBbb3V0cHV0X2ZpbGVdIgorRHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGV4dDMgam91cm5hbC4gIEJ5IGRlZmF1bHQsIGR1bXAgdGhlIGpvdXJuYWwgaW5vZGUgYXMKK3NwZWNpZmllZCBpbiB0aGUgc3VwZXJibG9jay4gIEhvd2V2ZXIsIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUKKy5JIFwtaQorb3B0aW9uLCB3aGljaCBkdW1wcyB0aGUgam91cm5hbCBmcm9tIHRoZSBpbnRlcm5hbCBpbm9kZSBnaXZlbiBieQorLklSIGZpbGVzcGVjIC4KK0EgcmVndWxhciBmaWxlIGNvbnRhaW5pbmcgam91cm5hbCBkYXRhIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisuSSBcLWYKK29wdGlvbi4gIEZpbmFsbHksIHRoZQorLkkgXC1zCitvcHRpb24gdXRpbGl6ZXMgdGhlIGJhY2t1cCBpbmZvcm1hdGlvbiBpbiB0aGUgc3VwZXJibG9jayB0byBsb2NhdGUgdGhlCitqb3VybmFsLgorLklQCitUaGUKKy5JIFwtYQorb3B0aW9uIGNhdXNlcyB0aGUKKy5CIGxvZ2R1bXAKK3Byb2dyYW0gdG8gcHJpbnQgdGhlIGNvbnRlbnRzIG9mIGFsbCBvZiB0aGUgZGVzY3JpcHRvciBibG9ja3MuCitUaGUKKy5JIFwtYgorb3B0aW9uIGNhdXNlcworLkIgbG9nZHVtcAordG8gcHJpbnQgYWxsIGpvdXJuYWwgcmVjb3JkcyB0aGF0IGFyZSByZWZlciB0byB0aGUgc3BlY2lmaWVkIGJsb2NrLgorVGhlCisuSSBcLWMKK29wdGlvbiB3aWxsIHByaW50IG91dCB0aGUgY29udGVudHMgb2YgYWxsIG9mIHRoZSBkYXRhIGJsb2NrcyBzZWxlY3RlZCBieQordGhlCisuSSBcLWEKK2FuZAorLkkgXC1iCitvcHRpb25zLgorLlRQCisuQkkgbHMgIiBbLWRdIFstbF0gWy1wXSBmaWxlc3BlYyIKK1ByaW50IGEgbGlzdGluZyBvZiB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeQorLklSIGZpbGVzcGVjIC4KK1RoZQorLkkgXC1kCitmbGFnIHdpbGwgbGlzdCBkZWxldGVkIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeS4KK1RoZQorLkkgXC1sCitmbGFnIHdpbGwgbGlzdCBmaWxlcyB1c2luZyBhIG1vcmUgdmVyYm9zZSBmb3JtYXQuCitUaGUKKy5JIFwtcAorZmxhZyB3aWxsIGxpc3QgdGhlIGZpbGVzIGluIGEgZm9ybWF0IHdoaWNoIGlzIG1vcmUgZWFzaWx5IHBhcnNhYmxlIGJ5CitzY3JpcHRzLCBhcyB3ZWxsIGFzIG1ha2luZyBpdCBtb3JlIGNsZWFyIHdoZW4gdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgorbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiBmaWxlbmFtZXMuCisuVFAKKy5CSSBsaXN0X2RlbGV0ZWRfaW5vZGVzICIgW2xpbWl0XSIKK0xpc3QgZGVsZXRlZCBpbm9kZXMsIG9wdGlvbmFsbHkgbGltaXRlZCB0byB0aG9zZSBkZWxldGVkIHdpdGhpbgorLkkgbGltaXQKK3NlY29uZHMgYWdvLiAgQWxzbyBhdmFpbGFibGUgYXMKKy5CUiBsc2RlbCAuCisuSVAKK1RoaXMgY29tbWFuZCB3YXMgdXNlZnVsIGZvciByZWNvdmVyaW5nIGZyb20gYWNjaWRlbnRhbCBmaWxlIGRlbGV0aW9ucworZm9yIGV4dDIgZmlsZSBzeXN0ZW1zLiAgVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90IHVzZWZ1bCBmb3IgdGhpcyBwdXJwb3NlCitpZiB0aGUgZmlsZXMgd2VyZSBkZWxldGVkIHVzaW5nIGV4dDMgb3IgZXh0NCwgc2luY2UgdGhlIGlub2RlJ3MKK2RhdGEgYmxvY2tzIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlIGFmdGVyIHRoZSBpbm9kZSBpcyByZWxlYXNlZC4KKy5UUAorLkJJIG1vZGlmeV9pbm9kZSAiIGZpbGVzcGVjIgorTW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgaW5vZGUgc3RydWN0dXJlIGluIHRoZSBpbm9kZQorLklSIGZpbGVzcGVjIC4KK0Fsc28gYXZhaWxhYmxlIGFzCisuQlIgbWkgLgorLlRQCisuQkkgbWtkaXIgIiBmaWxlc3BlYyIKK01ha2UgYSBkaXJlY3RvcnkuCisuVFAKKy5CSSBta25vZCAiIGZpbGVzcGVjIFtwfFtbY3xiXSBtYWpvciBtaW5vcl1dIgorQ3JlYXRlIGEgc3BlY2lhbCBkZXZpY2UgZmlsZSAoYSBuYW1lZCBwaXBlLCBjaGFyYWN0ZXIgb3IgYmxvY2sgZGV2aWNlKS4KK0lmIGEgY2hhcmFjdGVyIG9yIGJsb2NrIGRldmljZSBpcyB0byBiZSBtYWRlLCB0aGUKKy5JIG1ham9yCithbmQKKy5JIG1pbm9yCitkZXZpY2UgbnVtYmVycyBtdXN0IGJlIHNwZWNpZmllZC4KKy5UUAorLkJJIG5jaGVjayAiIFstY10gaW5vZGVfbnVtIC4uLiIKK1Rha2UgdGhlIHJlcXVlc3RlZCBsaXN0IG9mIGlub2RlIG51bWJlcnMsIGFuZCBwcmludCBhIGxpc3Rpbmcgb2YgcGF0aG5hbWVzCit0byB0aG9zZSBpbm9kZXMuICBUaGUKKy5JIC1jCitmbGFnIHdpbGwgZW5hYmxlIGNoZWNraW5nIHRoZSBmaWxlIHR5cGUgaW5mb3JtYXRpb24gaW4gdGhlIGRpcmVjdG9yeQorZW50cnkgdG8gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIGlub2RlJ3MgdHlwZS4KKy5UUAorLkJJIG9wZW4gIiBbLXdlZmljRF0gWy1iIGJsb2Nrc2l6ZV0gWy1zIHN1cGVyYmxvY2tdIGRldmljZSIKK09wZW4gYSBmaWxlc3lzdGVtIGZvciBlZGl0aW5nLiAgVGhlCisuSSAtZgorZmxhZyBmb3JjZXMgdGhlIGZpbGVzeXN0ZW0gdG8gYmUgb3BlbmVkIGV2ZW4gaWYgdGhlcmUgYXJlIHNvbWUgdW5rbm93bgorb3IgaW5jb21wYXRpYmxlIGZpbGVzeXN0ZW0gZmVhdHVyZXMgd2hpY2ggd291bGQgbm9ybWFsbHkKK3ByZXZlbnQgdGhlIGZpbGVzeXN0ZW0gZnJvbSBiZWluZyBvcGVuZWQuICBUaGUKKy5JIC1lCitmbGFnIGNhdXNlcyB0aGUgZmlsZXN5c3RlbSB0byBiZSBvcGVuZWQgaW4gZXhjbHVzaXZlIG1vZGUuICBUaGUKKy5JUiAtYiAiLCAiIC1jICIsICIgLWkgIiwgIiAtcyAiLCAiIC13ICIsIGFuZCAiIC1ECitvcHRpb25zIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8KKy5CUiBkZWJ1Z2ZzIC4KKy5UUAorLkJJIHB1bmNoICIgZmlsZXNwZWMgc3RhcnRfYmxrIFtlbmRfYmxrXSIKK0RlbGV0ZSB0aGUgYmxvY2tzIGluIHRoZSBpbm9kZSByYW5naW5nIGZyb20KKy5JIHN0YXJ0X2JsawordG8KKy5JUiBlbmRfYmxrIC4KK0lmCisuSSBlbmRfYmxrCitpcyBvbWl0dGVkIHRoZW4gdGhpcyBjb21tYW5kIHdpbGwgZnVuY3Rpb24gYXMgYSB0cnVuY2F0ZSBjb21tYW5kOyB0aGF0CitpcywgYWxsIG9mIHRoZSBibG9ja3Mgc3RhcnRpbmcgYXQKKy5JIHN0YXJ0X2JsawordGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHdpbGwgYmUgZGVhbGxvY2F0ZWQuCisuVFAKKy5CSSBzeW1saW5rICIgZmlsZXNwZWMgdGFyZ2V0IgorTWFrZSBhIHN5bWJvbGljIGxpbmsuCisuVFAKKy5CIHB3ZAorUHJpbnQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisuVFAKKy5CIHF1aXQKK1F1aXQKKy5CIGRlYnVnZnMKKy5UUAorLkJJIHJkdW1wICIgZGlyZWN0b3J5IGRlc3RpbmF0aW9uIgorUmVjdXJzaXZlbHkgZHVtcAorLkkgZGlyZWN0b3J5CithbmQgYWxsIGl0cyBjb250ZW50cyAoaW5jbHVkaW5nIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzLCBhbmQgb3RoZXIKK2RpcmVjdG9yaWVzKSBpbnRvIHRoZSBuYW1lZAorLkkgZGVzdGluYXRpb24KK3doaWNoIHNob3VsZCBiZSBhbiBleGlzdGluZyBkaXJlY3Rvcnkgb24gdGhlIG5hdGl2ZSBmaWxlc3lzdGVtLgorLlRQCisuQkkgcm0gIiBwYXRobmFtZSIKK1VubGluaworLklSIHBhdGhuYW1lIC4KK0lmIHRoaXMgY2F1c2VzIHRoZSBpbm9kZSBwb2ludGVkIHRvIGJ5CisuSSBwYXRobmFtZQordG8gaGF2ZSBubyBvdGhlciByZWZlcmVuY2VzLCBkZWFsbG9jYXRlIHRoZSBmaWxlLiAgVGhpcyBjb21tYW5kIGZ1bmN0aW9ucworYXMgdGhlIHVubGluaygpIHN5c3RlbSBjYWxsLgorLkkKKy5UUAorLkJJIHJtZGlyICIgZmlsZXNwZWMiCitSZW1vdmUgdGhlIGRpcmVjdG9yeQorLklSIGZpbGVzcGVjIC4KKy5UUAorLkJJIHNldGIgIiBibG9jayBbY291bnRdIgorTWFyayB0aGUgYmxvY2sgbnVtYmVyCisuSSBibG9jaworYXMgYWxsb2NhdGVkLgorSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CisuSSBjb3VudAoraXMgcHJlc2VudCwgdGhlbgorLkkgY291bnQKK2Jsb2NrcyBzdGFydGluZyBhdCBibG9jayBudW1iZXIKKy5JIGJsb2NrCit3aWxsIGJlIG1hcmtlZCBhcyBhbGxvY2F0ZWQuCisuVFAKKy5CSSBzZXRfYmxvY2tfZ3JvdXAgIiBiZ251bSBmaWVsZCB2YWx1ZSIKK01vZGlmeSB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzcGVjaWZpZWQgYnkKKy5JIGJnbnVtCitzbyB0aGF0IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGZpZWxkCisuSSBmaWVsZAoraGFzIHZhbHVlCisuSVIgdmFsdWUgLgorQWxzbyBhdmFpbGFibGUgYXMKKy5CUiBzZXRfYmcgLgorLlRQCisuQkkgc2V0aSAiIGZpbGVzcGVjIFtudW1dIgorTWFyayBpbm9kZQorLkkgZmlsZXNwZWMKK2FzIGluIHVzZSBpbiB0aGUgaW5vZGUgYml0bWFwLiAgSWYKKy5JIG51bQoraXMgc3BlY2lmaWVkLCBhbHNvIHNldCBudW0tMSBpbm9kZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbm9kZS4KKy5UUAorLkJJIHNldF9pbm9kZV9maWVsZCAiIGZpbGVzcGVjIGZpZWxkIHZhbHVlIgorTW9kaWZ5IHRoZSBpbm9kZSBzcGVjaWZpZWQgYnkKKy5JIGZpbGVzcGVjCitzbyB0aGF0IHRoZSBpbm9kZSBmaWVsZAorLkkgZmllbGQKK2hhcyB2YWx1ZQorLkkgdmFsdWUuCitUaGUgbGlzdCBvZiB2YWxpZCBpbm9kZSBmaWVsZHMgd2hpY2ggY2FuIGJlIHNldCB2aWEgdGhpcyBjb21tYW5kCitjYW4gYmUgZGlzcGxheWVkIGJ5IHVzaW5nIHRoZSBjb21tYW5kOgorLkIgc2V0X2lub2RlX2ZpZWxkIC1sCitBbHNvIGF2YWlsYWJsZSBhcworLkJSIHNpZiAuCisuVFAKKy5CSSBzZXRfbW1wX3ZhbHVlICIgZmllbGQgdmFsdWUiCitNb2RpZnkgdGhlIG11bHRpcGxlLW1vdW50IHByb3RlY3Rpb24gKE1NUCkgZGF0YSBzbyB0aGF0IHRoZSBNTVAgZmllbGQKKy5JIGZpZWxkCitoYXMgdmFsdWUKKy5JIHZhbHVlLgorVGhlIGxpc3Qgb2YgdmFsaWQgTU1QIGZpZWxkcyB3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGlzIGNvbW1hbmQKK2NhbiBiZSBkaXNwbGF5ZWQgYnkgdXNpbmcgdGhlIGNvbW1hbmQ6CisuQiBzZXRfbW1wX3ZhbHVlIC1sCitBbHNvIGF2YWlsYWJsZSBhcworLkJSIHNtbXAgLgorLlRQCisuQkkgc2V0X3N1cGVyX3ZhbHVlICIgZmllbGQgdmFsdWUiCitTZXQgdGhlIHN1cGVyYmxvY2sgZmllbGQKKy5JIGZpZWxkCit0bworLkkgdmFsdWUuCitUaGUgbGlzdCBvZiB2YWxpZCBzdXBlcmJsb2NrIGZpZWxkcyB3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGlzIGNvbW1hbmQKK2NhbiBiZSBkaXNwbGF5ZWQgYnkgdXNpbmcgdGhlIGNvbW1hbmQ6CisuQiBzZXRfc3VwZXJfdmFsdWUgLWwKK0Fsc28gYXZhaWxhYmxlIGFzCisuQlIgc3N2IC4KKy5UUAorLkJJIHNob3dfc3VwZXJfc3RhdHMgIiBbLWhdIgorTGlzdCB0aGUgY29udGVudHMgb2YgdGhlIHN1cGVyIGJsb2NrIGFuZCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMuICBJZiB0aGUKKy5JIC1oCitmbGFnIGlzIGdpdmVuLCBvbmx5IHByaW50IG91dCB0aGUgc3VwZXJibG9jayBjb250ZW50cy4gQWxzbyBhdmFpbGFibGUgYXMKKy5CUiBzdGF0cyAuCisuVFAKKy5CSSBzdGF0ICIgZmlsZXNwZWMiCitEaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgaW5vZGUgc3RydWN0dXJlIG9mIHRoZSBpbm9kZQorLklSIGZpbGVzcGVjIC4KKy5UUAorLkJJIHRlc3RiICIgYmxvY2sgW2NvdW50XSIKK1Rlc3QgaWYgdGhlIGJsb2NrIG51bWJlcgorLkkgYmxvY2sKK2lzIG1hcmtlZCBhcyBhbGxvY2F0ZWQgaW4gdGhlIGJsb2NrIGJpdG1hcC4KK0lmIHRoZSBvcHRpb25hbCBhcmd1bWVudAorLkkgY291bnQKK2lzIHByZXNlbnQsIHRoZW4KKy5JIGNvdW50CitibG9ja3Mgc3RhcnRpbmcgYXQgYmxvY2sgbnVtYmVyCisuSSBibG9jaword2lsbCBiZSB0ZXN0ZWQuCisuVFAKKy5CSSB0ZXN0aSAiIGZpbGVzcGVjIgorVGVzdCBpZiB0aGUgaW5vZGUKKy5JIGZpbGVzcGVjCitpcyBtYXJrZWQgYXMgYWxsb2NhdGVkIGluIHRoZSBpbm9kZSBiaXRtYXAuCisuVFAKKy5CSSB1bmRlbCAiIDxpbm9kZV9udW1iZXI+IFtwYXRobmFtZV0iCitVbmRlbGV0ZSB0aGUgc3BlY2lmaWVkIGlub2RlIG51bWJlciAod2hpY2ggbXVzdCBiZSBzdXJyb3VuZGVkIGJ5IGFuZ2xlCiticmFja2V0cykgc28gdGhhdCBpdCBhbmQgaXRzIGJsb2NrcyBhcmUgbWFya2VkIGluIHVzZSwgYW5kIG9wdGlvbmFsbHkKK2xpbmsgdGhlIHJlY292ZXJlZCBpbm9kZSB0byB0aGUgc3BlY2lmaWVkIHBhdGhuYW1lLiAgVGhlCisuQiBlMmZzY2sKK2NvbW1hbmQgc2hvdWxkIGFsd2F5cyBiZSBydW4gYWZ0ZXIgdXNpbmcgdGhlCisuQiB1bmRlbAorY29tbWFuZCB0byByZWNvdmVyIGRlbGV0ZWQgZmlsZXMuCisuSVAKK05vdGUgdGhhdCBpZiB5b3UgYXJlIHJlY292ZXJpbmcgYSBsYXJnZSBudW1iZXIgb2YgZGVsZXRlZCBmaWxlcywgbGlua2luZwordGhlIGlub2RlIHRvIGEgZGlyZWN0b3J5IG1heSByZXF1aXJlIHRoZSBkaXJlY3RvcnkgdG8gYmUgZXhwYW5kZWQsIHdoaWNoCitjb3VsZCBhbGxvY2F0ZSBhIGJsb2NrIHRoYXQgaGFkIGJlZW4gdXNlZCBieSBvbmUgb2YgdGhlCit5ZXQtdG8tYmUtdW5kZWxldGVkIGZpbGVzLiAgU28gaXQgaXMgc2FmZXIgdG8gdW5kZWxldGUgYWxsIG9mIHRoZQoraW5vZGVzIHdpdGhvdXQgc3BlY2lmeWluZyBhIGRlc3RpbmF0aW9uIHBhdGhuYW1lLCBhbmQgdGhlbiBpbiBhIHNlcGFyYXRlCitwYXNzLCB1c2UgdGhlIGRlYnVnZnMKKy5CIGxpbmsKK2NvbW1hbmQgdG8gbGluayB0aGUgaW5vZGUgdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGhuYW1lLCBvciB1c2UKKy5CIGUyZnNjawordG8gY2hlY2sgdGhlIGZpbGVzeXN0ZW0gYW5kIGxpbmsgYWxsIG9mIHRoZSByZWNvdmVyZWQgaW5vZGVzIHRvIHRoZQorbG9zdCtmb3VuZCBkaXJlY3RvcnkuCisuVFAKKy5CSSB1bmxpbmsgIiBwYXRobmFtZSIKK1JlbW92ZSB0aGUgbGluayBzcGVjaWZpZWQgYnkKKy5JIHBhdGhuYW1lCit0byBhbiBpbm9kZS4gIE5vdGUgdGhpcyBkb2VzIG5vdCBhZGp1c3QgdGhlIGlub2RlIHJlZmVyZW5jZSBjb3VudHMuCisuVFAKKy5CSSB3cml0ZSAiIHNvdXJjZV9maWxlIG91dF9maWxlIgorQ29weSB0aGUgY29udGVudHMgb2YKKy5JIHNvdXJjZV9maWxlCitpbnRvIGEgbmV3bHktY3JlYXRlZCBmaWxlIGluIHRoZSBmaWxlc3lzdGVtIG5hbWVkCisuSVIgb3V0X2ZpbGUgLgorLlRQCisuQkkgemFwX2Jsb2NrICIgWy1mIGZpbGVzcGVjXSBbLW8gb2Zmc2V0XSBbLWwgbGVuZ3RoXSBbLXAgcGF0dGVybl0gYmxvY2tfbnVtIgorLlRQCitPdmVyd3JpdGUgdGhlIGJsb2NrIHNwZWNpZmllZCBieQorLkkgYmxvY2tfbnVtCit3aXRoIHplcm8gKE5VTCkgYnl0ZXMsIG9yIGlmCisuSSAtcAoraXMgZ2l2ZW4gdXNlIHRoZSBieXRlIHNwZWNpZmllZCBieQorLklSIHBhdHRlcm4gLgorSWYKKy5JIC1mCitpcyBnaXZlbiB0aGVuCisuSSBibG9ja19udW0KK2lzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZSBnaXZlbiBieQorLklSIGZpbGVzcGVjIC4KK1RoZQorLkkgLW8KK2FuZAorLkkgLWwKK29wdGlvbnMgbGltaXQgdGhlIHJhbmdlIG9mIGJ5dGVzIHRvIHphcCB0byB0aGUgc3BlY2lmaWVkCisuSSBvZmZzZXQKK2FuZAorLkkgbGVuZ3RoCityZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrLgorLlRQCisuQkkgemFwX2Jsb2NrICIgWy1mIGZpbGVzcGVjXSBbLWIgYml0XSBibG9ja19udW0iCitCaXQtZmxpcCBwb3J0aW9ucyBvZiB0aGUgcGh5c2ljYWwKKy5JUiBibG9ja19udW0gLgorSWYKKy5JIC1mCitpcyBnaXZlbiwgdGhlbgorLkkgYmxvY2tfbnVtCitpcyBhIGxvZ2ljYWwgYmxvY2sgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mCisuSVIgZmlsZXNwZWMgLgorLlNIIEVOVklST05NRU5UIFZBUklBQkxFUworLlRQCisuQiBERUJVR0ZTX1BBR0VSLCBQQUdFUgorVGhlCisuQiBkZWJ1Z2ZzCitwcm9ncmFtIGFsd2F5cyBwaXBlcyB0aGUgb3V0cHV0IG9mIHRoZSBzb21lIGNvbW1hbmRzIHRocm91Z2ggYQorcGFnZXIgcHJvZ3JhbS4gIFRoZXNlIGNvbW1hbmRzIGluY2x1ZGU6CisuSVIgc2hvd19zdXBlcl9zdGF0cyAiICgiIHN0YXRzICksCisuSVIgbGlzdF9kaXJlY3RvcnkgIiAoIiBscyApLAorLklSIHNob3dfaW5vZGVfaW5mbyAiICgiIHN0YXQgKSwKKy5JUiBsaXN0X2RlbGV0ZWRfaW5vZGVzICIgKCIgbHNkZWwgKSwKK2FuZAorLklSIGh0cmVlX2R1bXAgLgorVGhlIHNwZWNpZmljIHBhZ2VyIGNhbiBleHBsaWNpdGx5IHNwZWNpZmllZCBieSB0aGUKKy5CIERFQlVHRlNfUEFHRVIKK2Vudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgaWYgaXQgaXMgbm90IHNldCwgYnkgdGhlCisuQiBQQUdFUgorZW52aXJvbm1lbnQgdmFyaWFibGUuCisuSVAKK05vdGUgdGhhdCBzaW5jZSBhIHBhZ2VyIGlzIGFsd2F5cyB1c2VkLCB0aGUKKy5CUiBsZXNzICgxKQorcGFnZXIgaXMgbm90IHBhcnRpY3VsYXJseSBhcHByb3ByaWF0ZSwgc2luY2UgaXQgY2xlYXJzIHRoZSBzY3JlZW4gYmVmb3JlCitkaXNwbGF5aW5nIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgYW5kIGNsZWFycyB0aGUgb3V0cHV0IHRoZSBzY3JlZW4KK3doZW4gdGhlIHBhZ2VyIGlzIGV4aXRlZC4gIE1hbnkgdXNlcnMgcHJlZmVyIHRvIHVzZSB0aGUKKy5CUiBsZXNzICgxKQorcGFnZXIgZm9yIG1vc3QgcHVycG9zZXMsIHdoaWNoIGlzIHdoeSB0aGUKKy5CIERFQlVHRlNfUEFHRVIKK2Vudmlyb25tZW50IHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB0byBvdmVycmlkZSB0aGUgbW9yZSBnZW5lcmFsCisuQiBQQUdFUgorZW52aXJvbm1lbnQgdmFyaWFibGUuCisuU0ggQVVUSE9SCisuQiBkZWJ1Z2ZzCit3YXMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1Pi4KKy5TSCBTRUUgQUxTTworLkJSIGR1bXBlMmZzICg4KSwKKy5CUiB0dW5lMmZzICg4KSwKKy5CUiBlMmZzY2sgKDgpLAorLkJSIG1rZTJmcyAoOCksCisuQlIgZXh0NCAoNSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnZnMuYyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDY2MmIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvZGVidWdmcy5jCkBAIC0wLDAgKzEsMjUyMCBAQAorLyoKKyAqIGRlYnVnZnMuYyAtLS0gYSBwcm9ncmFtIHdoaWNoIGFsbG93cyB5b3UgdG8gYXR0YWNoIGFuIGV4dDJmcworICogZmlsZXN5c3RlbSBhbmQgcGxheSB3aXRoIGl0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqCisgKiBNb2RpZmljYXRpb25zIGJ5IFJvYmVydCBTYW5kZXJzIDxndDgxMzRiQHByaXNtLmdhdGVjaC5lZHU+CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZXh0X2F0dHIuaD4KKworI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorCisjaWZuZGVmIEJVRlNJWgorI2RlZmluZSBCVUZTSVogODE5MgorI2VuZGlmCisKKy8qIDY0S2lCIGlzIHRoZSBtaW5pbWl1bSBibGtzaXplIHRvIGJlc3QgbWluaW1pemUgc3lzdGVtIGNhbGwgb3ZlcmhlYWQuICovCisjaWZuZGVmIElPX0JVRlNJWkUKKyNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CisjZW5kaWYKKworLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKyNpZm5kZWYgU19CTEtTSVpFCisjZGVmaW5lIFNfQkxLU0laRSA1MTIKKyNlbmRpZgorCitzc19yZXF1ZXN0X3RhYmxlICpleHRyYV9jbWRzOworY29uc3QgY2hhciAqZGVidWdfcHJvZ19uYW1lOworaW50IHNjaV9pZHg7CisKK2V4dDJfZmlsc3lzCWN1cnJlbnRfZnMgPSBOVUxMOworZXh0Ml9pbm9fdAlyb290LCBjd2Q7CisKK3N0YXRpYyB2b2lkIG9wZW5fZmlsZXN5c3RlbShjaGFyICpkZXZpY2UsIGludCBvcGVuX2ZsYWdzLCBibGs2NF90IHN1cGVyYmxvY2ssCisJCQkgICAgYmxrNjRfdCBibG9ja3NpemUsIGludCBjYXRhc3Ryb3BoaWMsCisJCQkgICAgY2hhciAqZGF0YV9maWxlbmFtZSkKK3sKKwlpbnQJcmV0dmFsOworCWlvX2NoYW5uZWwgZGF0YV9pbyA9IDA7CisKKwlpZiAoc3VwZXJibG9jayAhPSAwICYmIGJsb2Nrc2l6ZSA9PSAwKSB7CisJCWNvbV9lcnIoZGV2aWNlLCAwLCAiaWYgeW91IHNwZWNpZnkgdGhlIHN1cGVyYmxvY2ssIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgYmxvY2sgc2l6ZSIpOworCQljdXJyZW50X2ZzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWlmIChkYXRhX2ZpbGVuYW1lKSB7CisJCWlmICgob3Blbl9mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSA9PSAwKSB7CisJCQljb21fZXJyKGRldmljZSwgMCwKKwkJCQkiVGhlIC1kIG9wdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gcmVhZGluZyBhbiBlMmltYWdlIGZpbGUiKTsKKwkJCWN1cnJlbnRfZnMgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IHVuaXhfaW9fbWFuYWdlci0+b3BlbihkYXRhX2ZpbGVuYW1lLCAwLCAmZGF0YV9pbyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoZGF0YV9maWxlbmFtZSwgMCwgIndoaWxlIG9wZW5pbmcgZGF0YSBzb3VyY2UiKTsKKwkJCWN1cnJlbnRfZnMgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGNhdGFzdHJvcGhpYyAmJiAob3Blbl9mbGFncyAmIEVYVDJfRkxBR19SVykpIHsKKwkJY29tX2VycihkZXZpY2UsIDAsCisJCQkib3BlbmluZyByZWFkLW9ubHkgYmVjYXVzZSBvZiBjYXRhc3Ryb3BoaWMgbW9kZSIpOworCQlvcGVuX2ZsYWdzICY9IH5FWFQyX0ZMQUdfUlc7CisJfQorCWlmIChjYXRhc3Ryb3BoaWMpCisJCW9wZW5fZmxhZ3MgfD0gRVhUMl9GTEFHX1NLSVBfTU1QOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlLCBvcGVuX2ZsYWdzLCBzdXBlcmJsb2NrLCBibG9ja3NpemUsCisJCQkgICAgIHVuaXhfaW9fbWFuYWdlciwgJmN1cnJlbnRfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihkZXZpY2UsIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgZmlsZXN5c3RlbSIpOworCQljdXJyZW50X2ZzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKwljdXJyZW50X2ZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisKKwlpZiAoY2F0YXN0cm9waGljKQorCQljb21fZXJyKGRldmljZSwgMCwgImNhdGFzdHJvcGhpYyBtb2RlIC0gbm90IHJlYWRpbmcgaW5vZGUgb3IgZ3JvdXAgYml0bWFwcyIpOworCWVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAoY3VycmVudF9mcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoZGV2aWNlLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGlub2RlIGJpdG1hcCIpOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGN1cnJlbnRfZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGRldmljZSwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBibG9jayBiaXRtYXAiKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJfQorCisJaWYgKGRhdGFfaW8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX3NldF9kYXRhX2lvKGN1cnJlbnRfZnMsIGRhdGFfaW8pOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGRldmljZSwgcmV0dmFsLAorCQkJCSJ3aGlsZSBzZXR0aW5nIGRhdGEgc291cmNlIik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKworCXJvb3QgPSBjd2QgPSBFWFQyX1JPT1RfSU5POworCXJldHVybjsKKworZXJyb3V0OgorCXJldHZhbCA9IGV4dDJmc19jbG9zZShjdXJyZW50X2ZzKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKGRldmljZSwgcmV0dmFsLCAid2hpbGUgdHJ5aW5nIHRvIGNsb3NlIGZpbGVzeXN0ZW0iKTsKKwljdXJyZW50X2ZzID0gTlVMTDsKK30KKwordm9pZCBkb19vcGVuX2ZpbGVzeXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAljLCBlcnI7CisJaW50CWNhdGFzdHJvcGhpYyA9IDA7CisJYmxrNjRfdAlzdXBlcmJsb2NrID0gMDsKKwlibGs2NF90CWJsb2Nrc2l6ZSA9IDA7CisJaW50CW9wZW5fZmxhZ3MgPSBFWFQyX0ZMQUdfU09GVFNVUFBfRkVBVFVSRVMgfCBFWFQyX0ZMQUdfNjRCSVRTOyAKKwljaGFyCSpkYXRhX2ZpbGVuYW1lID0gMDsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIml3ZmVjYjpzOmQ6RCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2knOgorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfSU1BR0VfRklMRTsKKwkJCWJyZWFrOworCQljYXNlICd3JzoKKyNpZmRlZiBSRUFEX09OTFkKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisjZWxzZQorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfUlc7CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19GT1JDRTsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCW9wZW5fZmxhZ3MgfD0gRVhUMl9GTEFHX0VYQ0xVU0lWRTsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCWNhdGFzdHJvcGhpYyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlkYXRhX2ZpbGVuYW1lID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJb3Blbl9mbGFncyB8PSBFWFQyX0ZMQUdfRElSRUNUX0lPOworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgorCQkJYmxvY2tzaXplID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkJImJsb2NrIHNpemUiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJZXJyID0gc3RydG9ibGsoYXJndlswXSwgb3B0YXJnLCAmc3VwZXJibG9jayk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKwlpZiAob3B0aW5kICE9IGFyZ2MtMSkgeworCQlnb3RvIHByaW50X3VzYWdlOworCX0KKwlpZiAoY2hlY2tfZnNfbm90X29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlvcGVuX2ZpbGVzeXN0ZW0oYXJndltvcHRpbmRdLCBvcGVuX2ZsYWdzLAorCQkJc3VwZXJibG9jaywgYmxvY2tzaXplLCBjYXRhc3Ryb3BoaWMsCisJCQlkYXRhX2ZpbGVuYW1lKTsKKwlyZXR1cm47CisKK3ByaW50X3VzYWdlOgorCWZwcmludGYoc3RkZXJyLCAiJXM6IFVzYWdlOiBvcGVuIFstcyBzdXBlcmJsb2NrXSBbLWIgYmxvY2tzaXplXSAiCisJCSJbLWQgaW1hZ2VfZmlsZW5hbWVdIFstY10gWy1pXSBbLWZdIFstZV0gWy1EXSAiCisjaWZuZGVmIFJFQURfT05MWQorCQkiWy13XSAiCisjZW5kaWYKKwkJIjxkZXZpY2U+XG4iLCBhcmd2WzBdKTsKK30KKwordm9pZCBkb19sY2QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjICE9IDIpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6ICVzICVzIiwgYXJndlswXSwgIjxuYXRpdmUgZGlyPiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNoZGlyKGFyZ3ZbMV0pID09IC0xKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sCisJCQkid2hpbGUgdHJ5aW5nIHRvIGNoYW5nZSBuYXRpdmUgZGlyZWN0b3J5IHRvICVzIiwKKwkJCWFyZ3ZbMV0pOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBjbG9zZV9maWxlc3lzdGVtKE5PQVJHUykKK3sKKwlpbnQJcmV0dmFsOworCisJaWYgKGN1cnJlbnRfZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lCX0RJUlRZKSB7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZV9iaXRtYXAoY3VycmVudF9mcyk7CisJCWlmIChyZXR2YWwpCisJCQljb21fZXJyKCJleHQyZnNfd3JpdGVfaW5vZGVfYml0bWFwIiwgcmV0dmFsLCAwKTsKKwl9CisJaWYgKGN1cnJlbnRfZnMtPmZsYWdzICYgRVhUMl9GTEFHX0JCX0RJUlRZKSB7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9ibG9ja19iaXRtYXAoY3VycmVudF9mcyk7CisJCWlmIChyZXR2YWwpCisJCQljb21fZXJyKCJleHQyZnNfd3JpdGVfYmxvY2tfYml0bWFwIiwgcmV0dmFsLCAwKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2Nsb3NlKGN1cnJlbnRfZnMpOworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIoImV4dDJmc19jbG9zZSIsIHJldHZhbCwgMCk7CisJY3VycmVudF9mcyA9IE5VTEw7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2Nsb3NlX2ZpbGVzeXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAljOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImEiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdhJzoKKwkJCWN1cnJlbnRfZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IG9wdGluZCkgeworCXByaW50X3VzYWdlOgorCQljb21fZXJyKDAsIDAsICJVc2FnZTogY2xvc2VfZmlsZXN5cyBbLWFdIik7CisJCXJldHVybjsKKwl9CisKKwljbG9zZV9maWxlc3lzdGVtKCk7Cit9CisKKyNpZm5kZWYgUkVBRF9PTkxZCit2b2lkIGRvX2luaXRfZmlsZXN5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgcGFyYW07CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCWVycjsKKwlibGs2NF90CQlibG9ja3M7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAiaW5pdGlhbGl6ZSIsCisJCQkJIjxkZXZpY2U+IDxibG9ja3M+IiwgQ0hFQ0tfRlNfTk9UT1BFTikpCisJCXJldHVybjsKKworCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaykpOworCWVyciA9IHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbMl0sICZibG9ja3MpOworCWlmIChlcnIpCisJCXJldHVybjsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIGJsb2Nrcyk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKGFyZ3ZbMV0sIDAsICZwYXJhbSwKKwkJCQkgICB1bml4X2lvX21hbmFnZXIsICZjdXJyZW50X2ZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAid2hpbGUgaW5pdGlhbGl6aW5nIGZpbGVzeXN0ZW0iKTsKKwkJY3VycmVudF9mcyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9mZWF0dXJlcyhzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHMsIEZJTEUgKmYpCit7CisJaW50CWksIGosIHByaW50ZWQ9MDsKKwlfX3UzMgkqbWFzayA9ICZzLT5zX2ZlYXR1cmVfY29tcGF0LCBtOworCisJZnB1dHMoIkZpbGVzeXN0ZW0gZmVhdHVyZXM6IiwgZik7CisJZm9yIChpPTA7IGkgPDM7IGkrKyxtYXNrKyspIHsKKwkJZm9yIChqPTAsbT0xOyBqIDwgMzI7IGorKywgbTw8PTEpIHsKKwkJCWlmICgqbWFzayAmIG0pIHsKKwkJCQlmcHJpbnRmKGYsICIgJXMiLCBlMnBfZmVhdHVyZTJzdHJpbmcoaSwgbSkpOworCQkJCXByaW50ZWQrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAocHJpbnRlZCA9PSAwKQorCQlmcHV0cygiKG5vbmUpIiwgZik7CisJZnB1dHMoIlxuIiwgZik7Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3N0YXRpYyB2b2lkIHByaW50X2JnX29wdHMoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgaW50IG1hc2ssCisJCQkgIGNvbnN0IGNoYXIgKnN0ciwgaW50ICpmaXJzdCwgRklMRSAqZikKK3sKKwlpZiAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBtYXNrKSkgeworCQlpZiAoKmZpcnN0KSB7CisJCQlmcHV0cygiICAgICAgICAgICBbIiwgZik7CisJCQkqZmlyc3QgPSAwOworCQl9IGVsc2UKKwkJCWZwdXRzKCIsICIsIGYpOworCQlmcHV0cyhzdHIsIGYpOworCX0KK30KKwordm9pZCBkb19zaG93X3N1cGVyX3N0YXRzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqdW5pdHMgPSJibG9jayI7CisJZGdycF90CWk7CisJRklMRSAJKm91dDsKKwlpbnQJYywgaGVhZGVyX29ubHkgPSAwOworCWludAludW1kaXJzID0gMCwgZmlyc3QsIGdkdF9jc3VtOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2gnOgorCQkJaGVhZGVyX29ubHkrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKwlpZiAob3B0aW5kICE9IGFyZ2MpIHsKKwkJZ290byBwcmludF91c2FnZTsKKwl9CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlvdXQgPSBvcGVuX3BhZ2VyKCk7CisKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoY3VycmVudF9mcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQl1bml0cyA9ICJjbHVzdGVyIjsKKworCWxpc3Rfc3VwZXIyKGN1cnJlbnRfZnMtPnN1cGVyLCBvdXQpOworCWZvciAoaT0wOyBpIDwgY3VycmVudF9mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQludW1kaXJzICs9IGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoY3VycmVudF9mcywgaSk7CisJZnByaW50ZihvdXQsICJEaXJlY3RvcmllczogICAgICAgICAgICAgICVkXG4iLCBudW1kaXJzKTsKKworCWlmIChoZWFkZXJfb25seSkgeworCQljbG9zZV9wYWdlcihvdXQpOworCQlyZXR1cm47CisJfQorCisJZ2R0X2NzdW0gPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShjdXJyZW50X2ZzLT5zdXBlciwKKwkJCQkJICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CisJZm9yIChpID0gMDsgaSA8IGN1cnJlbnRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlmcHJpbnRmKG91dCwgIiBHcm91cCAlMmQ6IGJsb2NrIGJpdG1hcCBhdCAlbGx1LCAiCisJCSAgICAgICAgImlub2RlIGJpdG1hcCBhdCAlbGx1LCAiCisJCSAgICAgICAgImlub2RlIHRhYmxlIGF0ICVsbHVcbiIKKwkJICAgICAgICAiICAgICAgICAgICAldSBmcmVlICVzJXMsICIKKwkJICAgICAgICAiJXUgZnJlZSAlcywgIgorCQkgICAgICAgICIldSB1c2VkICVzJXMiLAorCQkgICAgICAgIGksIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGN1cnJlbnRfZnMsIGkpLAorCQkgICAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGN1cnJlbnRfZnMsIGkpLAorCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoY3VycmVudF9mcywgaSksIHVuaXRzLAorCQkgICAgICAgIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChjdXJyZW50X2ZzLCBpKSAhPSAxID8KKwkJCSJzIiA6ICIiLAorCQkgICAgICAgIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoY3VycmVudF9mcywgaSkgIT0gMSA/CisJCQkiaW5vZGVzIiA6ICJpbm9kZSIsCisJCSAgICAgICAgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChjdXJyZW50X2ZzLCBpKSwKKwkJICAgICAgICBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGN1cnJlbnRfZnMsIGkpICE9IDEgPyAiZGlyZWN0b3JpZXMiCisgCQkJCTogImRpcmVjdG9yeSIsIGdkdF9jc3VtID8gIiwgIiA6ICJcbiIpOworCQlpZiAoZ2R0X2NzdW0pCisJCQlmcHJpbnRmKG91dCwgIiV1IHVudXNlZCAlc1xuIiwKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChjdXJyZW50X2ZzLCBpKSwKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChjdXJyZW50X2ZzLCBpKSAhPSAxID8KKwkJCQkiaW5vZGVzIiA6ICJpbm9kZSIpOworCQlmaXJzdCA9IDE7CisJCXByaW50X2JnX29wdHMoY3VycmVudF9mcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQsICJJbm9kZSBub3QgaW5pdCIsCisJCQkgICAgICAmZmlyc3QsIG91dCk7CisJCXByaW50X2JnX29wdHMoY3VycmVudF9mcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQsICJCbG9jayBub3QgaW5pdCIsCisJCQkgICAgICAmZmlyc3QsIG91dCk7CisJCWlmIChnZHRfY3N1bSkgeworCQkJZnByaW50ZihvdXQsICIlc0NoZWNrc3VtIDB4JTA0eCIsCisJCQkJZmlyc3QgPyAiICAgICAgICAgICBbIjoiLCAiLCBleHQyZnNfYmdfY2hlY2tzdW0oY3VycmVudF9mcywgaSkpOworCQkJZmlyc3QgPSAwOworCQl9CisJCWlmICghZmlyc3QpCisJCQlmcHV0cygiXVxuIiwgb3V0KTsKKwl9CisJY2xvc2VfcGFnZXIob3V0KTsKKwlyZXR1cm47CitwcmludF91c2FnZToKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVc2FnZTogc2hvd19zdXBlciBbLWhdXG4iLCBhcmd2WzBdKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fZGlydHlfZmlsZXN5cyhpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNoYXIgKiphcmd2IEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJndlsxXSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItY2xlYW4iKSkKKwkJY3VycmVudF9mcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9WQUxJRF9GUzsKKwllbHNlCisJCWN1cnJlbnRfZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN1cnJlbnRfZnMpOworfQorI2VuZGlmIC8qIFJFQURfT05MWSAqLworCitzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0IHsKKwlGSUxFCQkqZjsKKwllMl9ibGtjbnRfdAl0b3RhbDsKKwlibGs2NF90CQlmaXJzdF9ibG9jaywgbGFzdF9ibG9jazsKKwllMl9ibGtjbnRfdAlmaXJzdF9iY250LCBsYXN0X2JjbnQ7CisJZTJfYmxrY250X3QJZmlyc3Q7Cit9OworCitzdGF0aWMgdm9pZCBmaW5pc2hfcmFuZ2Uoc3RydWN0IGxpc3RfYmxvY2tzX3N0cnVjdCAqbGIpCit7CisJaWYgKGxiLT5maXJzdF9ibG9jayA9PSAwKQorCQlyZXR1cm47CisJaWYgKGxiLT5maXJzdCkKKwkJbGItPmZpcnN0ID0gMDsKKwllbHNlCisJCWZwcmludGYobGItPmYsICIsICIpOworCWlmIChsYi0+Zmlyc3RfYmxvY2sgPT0gbGItPmxhc3RfYmxvY2spCisJCWZwcmludGYobGItPmYsICIoJWxsZCk6JWxsdSIsCisJCQkobG9uZyBsb25nKWxiLT5maXJzdF9iY250LCBsYi0+Zmlyc3RfYmxvY2spOworCWVsc2UKKwkJZnByaW50ZihsYi0+ZiwgIiglbGxkLSVsbGQpOiVsbHUtJWxsdSIsCisJCQkobG9uZyBsb25nKWxiLT5maXJzdF9iY250LCAobG9uZyBsb25nKWxiLT5sYXN0X2JjbnQsCisJCQlsYi0+Zmlyc3RfYmxvY2ssIGxiLT5sYXN0X2Jsb2NrKTsKKwlsYi0+Zmlyc3RfYmxvY2sgPSAwOworfQorCitzdGF0aWMgaW50IGxpc3RfYmxvY2tzX3Byb2MoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgIGJsazY0X3QgKmJsb2NrbnIsIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0ICpsYiA9IChzdHJ1Y3QgbGlzdF9ibG9ja3Nfc3RydWN0ICopIHByaXZhdGU7CisKKwlsYi0+dG90YWwrKzsKKwlpZiAoYmxvY2tjbnQgPj0gMCkgeworCQkvKgorCQkgKiBTZWUgaWYgd2UgY2FuIGFkZCBvbiB0byB0aGUgZXhpc3RpbmcgcmFuZ2UgKGlmIGl0IGV4aXN0cykKKwkJICovCisJCWlmIChsYi0+Zmlyc3RfYmxvY2sgJiYKKwkJICAgIChsYi0+bGFzdF9ibG9jaysxID09ICpibG9ja25yKSAmJgorCQkgICAgKGxiLT5sYXN0X2JjbnQrMSA9PSBibG9ja2NudCkpIHsKKwkJCWxiLT5sYXN0X2Jsb2NrID0gKmJsb2NrbnI7CisJCQlsYi0+bGFzdF9iY250ID0gYmxvY2tjbnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKgorCQkgKiBTdGFydCBhIG5ldyByYW5nZS4KKwkJICovCisJCWZpbmlzaF9yYW5nZShsYik7CisJCWxiLT5maXJzdF9ibG9jayA9IGxiLT5sYXN0X2Jsb2NrID0gKmJsb2NrbnI7CisJCWxiLT5maXJzdF9iY250ID0gbGItPmxhc3RfYmNudCA9IGJsb2NrY250OworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBOb3QgYSBub3JtYWwgYmxvY2suICBBbHdheXMgZm9yY2UgYSBuZXcgcmFuZ2UuCisJICovCisJZmluaXNoX3JhbmdlKGxiKTsKKwlpZiAobGItPmZpcnN0KQorCQlsYi0+Zmlyc3QgPSAwOworCWVsc2UKKwkJZnByaW50ZihsYi0+ZiwgIiwgIik7CisJaWYgKGJsb2NrY250ID09IC0xKQorCQlmcHJpbnRmKGxiLT5mLCAiKElORCk6JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpICpibG9ja25yKTsKKwllbHNlIGlmIChibG9ja2NudCA9PSAtMikKKwkJZnByaW50ZihsYi0+ZiwgIihESU5EKTolbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKmJsb2NrbnIpOworCWVsc2UgaWYgKGJsb2NrY250ID09IC0zKQorCQlmcHJpbnRmKGxiLT5mLCAiKFRJTkQpOiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSAqYmxvY2tucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfeGF0dHJfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQoreworCWludCBwcmludGFibGUgPSAwOworCWludCBpOworCisJLyogY2hlY2s6IGlzIHN0cmluZyAicHJpbnRhYmxlIGVub3VnaD8iICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoaXNwcmludChzdHJbaV0pKQorCQkJcHJpbnRhYmxlKys7CisKKwlpZiAocHJpbnRhYmxlIDw9IGxlbio3LzgpCisJCXByaW50YWJsZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChwcmludGFibGUpCisJCQlmcHJpbnRmKG91dCwgaXNwcmludChzdHJbaV0pID8gIiVjIiA6ICJcXCUwM28iLAorCQkJCSh1bnNpZ25lZCBjaGFyKXN0cltpXSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiJTAyeCAiLCAodW5zaWduZWQgY2hhcilzdHJbaV0pOworfQorCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9kdW1wX2lub2RlX2V4dHJhKEZJTEUgKm91dCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXggRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgICAgIGV4dDJfaW5vX3QgaW5vZGVfbnVtIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqaW5vZGUpCit7CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmVudHJ5OworCV9fdTMyICptYWdpYzsKKwljaGFyICpzdGFydCwgKmVuZDsKKwl1bnNpZ25lZCBpbnQgc3RvcmFnZV9zaXplOworCisJZnByaW50ZihvdXQsICJTaXplIG9mIGV4dHJhIGlub2RlIGZpZWxkczogJXVcbiIsIGlub2RlLT5pX2V4dHJhX2lzaXplKTsKKwlpZiAoaW5vZGUtPmlfZXh0cmFfaXNpemUgPiBFWFQyX0lOT0RFX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpIC0KKwkJCUVYVDJfR09PRF9PTERfSU5PREVfU0laRSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgaW5vZGUtPmlfZXh0cmFfaXNpemUgKCV1KVxuIiwKKwkJCQlpbm9kZS0+aV9leHRyYV9pc2l6ZSk7CisJCXJldHVybjsKKwl9CisJc3RvcmFnZV9zaXplID0gRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSAtCisJCQlFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgLQorCQkJaW5vZGUtPmlfZXh0cmFfaXNpemU7CisJbWFnaWMgPSAoX191MzIgKikoKGNoYXIgKilpbm9kZSArIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSArCisJCQlpbm9kZS0+aV9leHRyYV9pc2l6ZSk7CisJaWYgKCptYWdpYyA9PSBFWFQyX0VYVF9BVFRSX01BR0lDKSB7CisJCWZwcmludGYob3V0LCAiRXh0ZW5kZWQgYXR0cmlidXRlcyBzdG9yZWQgaW4gaW5vZGUgYm9keTogXG4iKTsKKwkJZW5kID0gKGNoYXIgKikgaW5vZGUgKyBFWFQyX0lOT0RFX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpOworCQlzdGFydCA9IChjaGFyICopIG1hZ2ljICsgc2l6ZW9mKF9fdTMyKTsKKwkJZW50cnkgPSAoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKikgc3RhcnQ7CisJCXdoaWxlICghRVhUMl9FWFRfSVNfTEFTVF9FTlRSWShlbnRyeSkpIHsKKwkJCXN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICpuZXh0ID0KKwkJCQlFWFQyX0VYVF9BVFRSX05FWFQoZW50cnkpOworCQkJaWYgKGVudHJ5LT5lX3ZhbHVlX3NpemUgPiBzdG9yYWdlX3NpemUgfHwKKwkJCQkJKGNoYXIgKikgbmV4dCA+PSBlbmQpIHsKKwkJCQlmcHJpbnRmKG91dCwgImludmFsaWQgRUEgZW50cnkgaW4gaW5vZGVcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWZwcmludGYob3V0LCAiICAiKTsKKwkJCWR1bXBfeGF0dHJfc3RyaW5nKG91dCwgRVhUMl9FWFRfQVRUUl9OQU1FKGVudHJ5KSwKKwkJCQkJICBlbnRyeS0+ZV9uYW1lX2xlbik7CisJCQlmcHJpbnRmKG91dCwgIiA9IFwiIik7CisJCQlkdW1wX3hhdHRyX3N0cmluZyhvdXQsIHN0YXJ0ICsgZW50cnktPmVfdmFsdWVfb2ZmcywKKwkJCQkJCWVudHJ5LT5lX3ZhbHVlX3NpemUpOworCQkJZnByaW50ZihvdXQsICJcIiAoJXUpXG4iLCBlbnRyeS0+ZV92YWx1ZV9zaXplKTsKKwkJCWVudHJ5ID0gbmV4dDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9ibG9ja3MoRklMRSAqZiwgY29uc3QgY2hhciAqcHJlZml4LCBleHQyX2lub190IGlub2RlKQoreworCXN0cnVjdCBsaXN0X2Jsb2Nrc19zdHJ1Y3QgbGI7CisKKwlmcHJpbnRmKGYsICIlc0JMT0NLUzpcbiVzIiwgcHJlZml4LCBwcmVmaXgpOworCWxiLnRvdGFsID0gMDsKKwlsYi5maXJzdF9ibG9jayA9IDA7CisJbGIuZiA9IGY7CisJbGIuZmlyc3QgPSAxOworCWV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm9kZSwgQkxPQ0tfRkxBR19SRUFEX09OTFksIE5VTEwsCisJCQkgICAgICBsaXN0X2Jsb2Nrc19wcm9jLCAodm9pZCAqKSZsYik7CisJZmluaXNoX3JhbmdlKCZsYik7CisJaWYgKGxiLnRvdGFsKQorCQlmcHJpbnRmKGYsICJcbiVzVE9UQUw6ICVsbGRcbiIsIHByZWZpeCwgKGxvbmcgbG9uZylsYi50b3RhbCk7CisJZnByaW50ZihmLCJcbiIpOworfQorCitzdGF0aWMgaW50IGludF9sb2cxMCh1bnNpZ25lZCBsb25nIGxvbmcgYXJnKQoreworCWludCAgICAgbCA9IDA7CisKKwlhcmcgPSBhcmcgLyAxMDsKKwl3aGlsZSAoYXJnKSB7CisJCWwrKzsKKwkJYXJnID0gYXJnIC8gMTA7CisJfQorCXJldHVybiBsOworfQorCisjZGVmaW5lIERVTVBfTEVBRl9FWFRFTlRTCTB4MDEKKyNkZWZpbmUgRFVNUF9OT0RFX0VYVEVOVFMJMHgwMgorI2RlZmluZSBEVU1QX0VYVEVOVF9UQUJMRQkweDA0CisKK3N0YXRpYyB2b2lkIGR1bXBfZXh0ZW50cyhGSUxFICpmLCBjb25zdCBjaGFyICpwcmVmaXgsIGV4dDJfaW5vX3QgaW5vLAorCQkJIGludCBmbGFncywgaW50IGxvZ2ljYWxfd2lkdGgsIGludCBwaHlzaWNhbF93aWR0aCkKK3sKKwlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGU7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvIGluZm87CisJaW50CQkJb3AgPSBFWFQyX0VYVEVOVF9ST09UOworCXVuc2lnbmVkIGludAkJcHJpbnRlZCA9IDA7CisJZXJyY29kZV90IAkJZXJyY29kZTsKKworCWVycmNvZGUgPSBleHQyZnNfZXh0ZW50X29wZW4oY3VycmVudF9mcywgaW5vLCAmaGFuZGxlKTsKKwlpZiAoZXJyY29kZSkKKwkJcmV0dXJuOworCisJaWYgKGZsYWdzICYgRFVNUF9FWFRFTlRfVEFCTEUpCisJCWZwcmludGYoZiwgIkxldmVsIEVudHJpZXMgJSpzICUqcyBMZW5ndGggRmxhZ3NcbiIsCisJCQkobG9naWNhbF93aWR0aCoyKSszLCAiTG9naWNhbCIsCisJCQkocGh5c2ljYWxfd2lkdGgqMikrMywgIlBoeXNpY2FsIik7CisJZWxzZQorCQlmcHJpbnRmKGYsICIlc0VYVEVOVFM6XG4lcyIsIHByZWZpeCwgcHJlZml4KTsKKworCXdoaWxlICgxKSB7CisJCWVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIG9wLCAmZXh0ZW50KTsKKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCisJCW9wID0gRVhUMl9FWFRFTlRfTkVYVDsKKworCQlpZiAoZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpCisJCQljb250aW51ZTsKKworCQlpZiAoZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19MRUFGKSB7CisJCQlpZiAoKGZsYWdzICYgRFVNUF9MRUFGX0VYVEVOVFMpID09IDApCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoKGZsYWdzICYgRFVNUF9OT0RFX0VYVEVOVFMpID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQllcnJjb2RlID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwkJaWYgKGVycmNvZGUpCisJCQljb250aW51ZTsKKworCQlpZiAoIShleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX0xFQUYpKSB7CisJCQlpZiAoZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChmbGFncyAmIERVTVBfRVhURU5UX1RBQkxFKSB7CisJCQkJZnByaW50ZihmLCAiJTJkLyUyZCAlM2QvJTNkICUqbGx1IC0gJSpsbHUgIgorCQkJCQkiJSpsbHUlKnMgJTZ1XG4iLAorCQkJCQlpbmZvLmN1cnJfbGV2ZWwsIGluZm8ubWF4X2RlcHRoLAorCQkJCQlpbmZvLmN1cnJfZW50cnksIGluZm8ubnVtX2VudHJpZXMsCisJCQkJCWxvZ2ljYWxfd2lkdGgsCisJCQkJCWV4dGVudC5lX2xibGssCisJCQkJCWxvZ2ljYWxfd2lkdGgsCisJCQkJCWV4dGVudC5lX2xibGsgKyAoZXh0ZW50LmVfbGVuIC0gMSksCisJCQkJCXBoeXNpY2FsX3dpZHRoLAorCQkJCQlleHRlbnQuZV9wYmxrLAorCQkJCQlwaHlzaWNhbF93aWR0aCszLCAiIiwgZXh0ZW50LmVfbGVuKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZnByaW50ZihmLCAiJXMoRVRCJWQpOiVsbGQiLAorCQkJCXByaW50ZWQgPyAiLCAiIDogIiIsIGluZm8uY3Vycl9sZXZlbCwKKwkJCQlleHRlbnQuZV9wYmxrKTsKKwkJCXByaW50ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZmxhZ3MgJiBEVU1QX0VYVEVOVF9UQUJMRSkgeworCQkJZnByaW50ZihmLCAiJTJkLyUyZCAlM2QvJTNkICUqbGx1IC0gJSpsbHUgIgorCQkJCSIlKmxsdSAtICUqbGx1ICU2dSAlc1xuIiwKKwkJCQlpbmZvLmN1cnJfbGV2ZWwsIGluZm8ubWF4X2RlcHRoLAorCQkJCWluZm8uY3Vycl9lbnRyeSwgaW5mby5udW1fZW50cmllcywKKwkJCQlsb2dpY2FsX3dpZHRoLAorCQkJCWV4dGVudC5lX2xibGssCisJCQkJbG9naWNhbF93aWR0aCwKKwkJCQlleHRlbnQuZV9sYmxrICsgKGV4dGVudC5lX2xlbiAtIDEpLAorCQkJCXBoeXNpY2FsX3dpZHRoLAorCQkJCWV4dGVudC5lX3BibGssCisJCQkJcGh5c2ljYWxfd2lkdGgsCisJCQkJZXh0ZW50LmVfcGJsayArIChleHRlbnQuZV9sZW4gLSAxKSwKKwkJCQlleHRlbnQuZV9sZW4sCisJCQkJZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQgPworCQkJCQkiVW5pbml0IiA6ICIiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGV4dGVudC5lX2xlbiA9PSAwKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKGV4dGVudC5lX2xlbiA9PSAxKQorCQkJZnByaW50ZihmLAorCQkJCSIlcyglbGxkJXMpOiVsbGQiLAorCQkJCXByaW50ZWQgPyAiLCAiIDogIiIsCisJCQkJZXh0ZW50LmVfbGJsaywKKwkJCQlleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCA/CisJCQkJIlt1XSIgOiAiIiwKKwkJCQlleHRlbnQuZV9wYmxrKTsKKwkJZWxzZQorCQkJZnByaW50ZihmLAorCQkJCSIlcyglbGxkLSVsbGQlcyk6JWxsZC0lbGxkIiwKKwkJCQlwcmludGVkID8gIiwgIiA6ICIiLAorCQkJCWV4dGVudC5lX2xibGssCisJCQkJZXh0ZW50LmVfbGJsayArIChleHRlbnQuZV9sZW4gLSAxKSwKKwkJCQlleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCA/CisJCQkJCSJbdV0iIDogIiIsCisJCQkJZXh0ZW50LmVfcGJsaywKKwkJCQlleHRlbnQuZV9wYmxrICsgKGV4dGVudC5lX2xlbiAtIDEpKTsKKwkJcHJpbnRlZCA9IDE7CisJfQorCWlmIChwcmludGVkKQorCQlmcHJpbnRmKGYsICJcbiIpOworfQorCit2b2lkIGludGVybmFsX2R1bXBfaW5vZGUoRklMRSAqb3V0LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgZXh0Ml9pbm9fdCBpbm9kZV9udW0sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSBpbnQgZG9fZHVtcF9ibG9ja3MpCit7CisJY29uc3QgY2hhciAqaV90eXBlOworCWNoYXIgZnJhZywgZnNpemU7CisJaW50IG9zID0gY3VycmVudF9mcy0+c3VwZXItPnNfY3JlYXRvcl9vczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqbGFyZ2VfaW5vZGU7CisJaW50IGlzX2xhcmdlX2lub2RlID0gMDsKKworCWlmIChFWFQyX0lOT0RFX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpID4gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFKQorCQlpc19sYXJnZV9pbm9kZSA9IDE7CisJbGFyZ2VfaW5vZGUgPSAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGU7CisKKwlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgaV90eXBlID0gImRpcmVjdG9yeSI7CisJZWxzZSBpZiAoTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgaV90eXBlID0gInJlZ3VsYXIiOworCWVsc2UgaWYgKExJTlVYX1NfSVNMTksoaW5vZGUtPmlfbW9kZSkpIGlfdHlwZSA9ICJzeW1saW5rIjsKKwllbHNlIGlmIChMSU5VWF9TX0lTQkxLKGlub2RlLT5pX21vZGUpKSBpX3R5cGUgPSAiYmxvY2sgc3BlY2lhbCI7CisJZWxzZSBpZiAoTElOVVhfU19JU0NIUihpbm9kZS0+aV9tb2RlKSkgaV90eXBlID0gImNoYXJhY3RlciBzcGVjaWFsIjsKKwllbHNlIGlmIChMSU5VWF9TX0lTRklGTyhpbm9kZS0+aV9tb2RlKSkgaV90eXBlID0gIkZJRk8iOworCWVsc2UgaWYgKExJTlVYX1NfSVNTT0NLKGlub2RlLT5pX21vZGUpKSBpX3R5cGUgPSAic29ja2V0IjsKKwllbHNlIGlfdHlwZSA9ICJiYWQgdHlwZSI7CisJZnByaW50ZihvdXQsICIlc0lub2RlOiAldSAgIFR5cGU6ICVzICAgICIsIHByZWZpeCwgaW5vZGVfbnVtLCBpX3R5cGUpOworCWZwcmludGYob3V0LCAiJXNNb2RlOiAgJTA0byAgIEZsYWdzOiAweCV4XG4iLAorCQlwcmVmaXgsIGlub2RlLT5pX21vZGUgJiAwNzc3LCBpbm9kZS0+aV9mbGFncyk7CisJaWYgKGlzX2xhcmdlX2lub2RlICYmIGxhcmdlX2lub2RlLT5pX2V4dHJhX2lzaXplID49IDI0KSB7CisJCWZwcmludGYob3V0LCAiJXNHZW5lcmF0aW9uOiAldSAgICBWZXJzaW9uOiAweCUwOHg6JTA4eFxuIiwKKwkJCXByZWZpeCwgaW5vZGUtPmlfZ2VuZXJhdGlvbiwgbGFyZ2VfaW5vZGUtPmlfdmVyc2lvbl9oaSwKKwkJCWlub2RlLT5vc2QxLmxpbnV4MS5sX2lfdmVyc2lvbik7CisJfSBlbHNlIHsKKwkJZnByaW50ZihvdXQsICIlc0dlbmVyYXRpb246ICV1ICAgIFZlcnNpb246IDB4JTA4eFxuIiwgcHJlZml4LAorCQkJaW5vZGUtPmlfZ2VuZXJhdGlvbiwgaW5vZGUtPm9zZDEubGludXgxLmxfaV92ZXJzaW9uKTsKKwl9CisJZnByaW50ZihvdXQsICIlc1VzZXI6ICU1ZCAgIEdyb3VwOiAlNWQgICBTaXplOiAiLAorCQlwcmVmaXgsIGlub2RlX3VpZCgqaW5vZGUpLCBpbm9kZV9naWQoKmlub2RlKSk7CisJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCWZwcmludGYob3V0LCAiJWxsdVxuIiwgRVhUMl9JX1NJWkUoaW5vZGUpKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiJWRcbiIsIGlub2RlLT5pX3NpemUpOworCWlmIChvcyA9PSBFWFQyX09TX0hVUkQpCisJCWZwcmludGYob3V0LAorCQkJIiVzRmlsZSBBQ0w6ICVkICAgIERpcmVjdG9yeSBBQ0w6ICVkIFRyYW5zbGF0b3I6ICVkXG4iLAorCQkJcHJlZml4LAorCQkJaW5vZGUtPmlfZmlsZV9hY2wsIExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkgPyBpbm9kZS0+aV9kaXJfYWNsIDogMCwKKwkJCWlub2RlLT5vc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiJXNGaWxlIEFDTDogJWxsdSAgICBEaXJlY3RvcnkgQUNMOiAlZFxuIiwKKwkJCXByZWZpeCwKKwkJCWlub2RlLT5pX2ZpbGVfYWNsIHwgKChsb25nIGxvbmcpCisJCQkJKGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCkgPDwgMzIpLAorCQkJTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSA/IGlub2RlLT5pX2Rpcl9hY2wgOiAwKTsKKwlpZiAob3MgPT0gRVhUMl9PU19MSU5VWCkKKwkJZnByaW50ZihvdXQsICIlc0xpbmtzOiAlZCAgIEJsb2NrY291bnQ6ICVsbHVcbiIsCisJCQlwcmVmaXgsIGlub2RlLT5pX2xpbmtzX2NvdW50LAorCQkJKCgodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICBpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSA8PCAzMikpICsKKwkJCWlub2RlLT5pX2Jsb2Nrcyk7CisJZWxzZQorCQlmcHJpbnRmKG91dCwgIiVzTGlua3M6ICVkICAgQmxvY2tjb3VudDogJXVcbiIsCisJCQlwcmVmaXgsIGlub2RlLT5pX2xpbmtzX2NvdW50LCBpbm9kZS0+aV9ibG9ja3MpOworCXN3aXRjaCAob3MpIHsKKwkgICAgY2FzZSBFWFQyX09TX0hVUkQ6CisJCWZyYWcgPSBpbm9kZS0+b3NkMi5odXJkMi5oX2lfZnJhZzsKKwkJZnNpemUgPSBpbm9kZS0+b3NkMi5odXJkMi5oX2lfZnNpemU7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlmcmFnID0gZnNpemUgPSAwOworCX0KKwlmcHJpbnRmKG91dCwgIiVzRnJhZ21lbnQ6ICBBZGRyZXNzOiAlZCAgICBOdW1iZXI6ICVkICAgIFNpemU6ICVkXG4iLAorCQlwcmVmaXgsIGlub2RlLT5pX2ZhZGRyLCBmcmFnLCBmc2l6ZSk7CisJaWYgKGlzX2xhcmdlX2lub2RlICYmIGxhcmdlX2lub2RlLT5pX2V4dHJhX2lzaXplID49IDI0KSB7CisJCWZwcmludGYob3V0LCAiJXMgY3RpbWU6IDB4JTA4eDolMDh4IC0tICVzIiwgcHJlZml4LAorCQkJaW5vZGUtPmlfY3RpbWUsIGxhcmdlX2lub2RlLT5pX2N0aW1lX2V4dHJhLAorCQkJdGltZV90b19zdHJpbmcoaW5vZGUtPmlfY3RpbWUpKTsKKwkJZnByaW50ZihvdXQsICIlcyBhdGltZTogMHglMDh4OiUwOHggLS0gJXMiLCBwcmVmaXgsCisJCQlpbm9kZS0+aV9hdGltZSwgbGFyZ2VfaW5vZGUtPmlfYXRpbWVfZXh0cmEsCisJCQl0aW1lX3RvX3N0cmluZyhpbm9kZS0+aV9hdGltZSkpOworCQlmcHJpbnRmKG91dCwgIiVzIG10aW1lOiAweCUwOHg6JTA4eCAtLSAlcyIsIHByZWZpeCwKKwkJCWlub2RlLT5pX210aW1lLCBsYXJnZV9pbm9kZS0+aV9tdGltZV9leHRyYSwKKwkJCXRpbWVfdG9fc3RyaW5nKGlub2RlLT5pX210aW1lKSk7CisJCWZwcmludGYob3V0LCAiJXNjcnRpbWU6IDB4JTA4eDolMDh4IC0tICVzIiwgcHJlZml4LAorCQkJbGFyZ2VfaW5vZGUtPmlfY3J0aW1lLCBsYXJnZV9pbm9kZS0+aV9jcnRpbWVfZXh0cmEsCisJCQl0aW1lX3RvX3N0cmluZyhsYXJnZV9pbm9kZS0+aV9jcnRpbWUpKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKG91dCwgIiVzY3RpbWU6IDB4JTA4eCAtLSAlcyIsIHByZWZpeCwgaW5vZGUtPmlfY3RpbWUsCisJCQl0aW1lX3RvX3N0cmluZyhpbm9kZS0+aV9jdGltZSkpOworCQlmcHJpbnRmKG91dCwgIiVzYXRpbWU6IDB4JTA4eCAtLSAlcyIsIHByZWZpeCwgaW5vZGUtPmlfYXRpbWUsCisJCQl0aW1lX3RvX3N0cmluZyhpbm9kZS0+aV9hdGltZSkpOworCQlmcHJpbnRmKG91dCwgIiVzbXRpbWU6IDB4JTA4eCAtLSAlcyIsIHByZWZpeCwgaW5vZGUtPmlfbXRpbWUsCisJCQl0aW1lX3RvX3N0cmluZyhpbm9kZS0+aV9tdGltZSkpOworCX0KKwlpZiAoaW5vZGUtPmlfZHRpbWUpCisJICBmcHJpbnRmKG91dCwgIiVzZHRpbWU6IDB4JTA4eCAtLSAlcyIsIHByZWZpeCwgaW5vZGUtPmlfZHRpbWUsCisJCSAgdGltZV90b19zdHJpbmcoaW5vZGUtPmlfZHRpbWUpKTsKKwlpZiAoRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSA+IEVYVDJfR09PRF9PTERfSU5PREVfU0laRSkKKwkJaW50ZXJuYWxfZHVtcF9pbm9kZV9leHRyYShvdXQsIHByZWZpeCwgaW5vZGVfbnVtLAorCQkJCQkgIChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBpbm9kZSk7CisJaWYgKExJTlVYX1NfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzKGN1cnJlbnRfZnMsaW5vZGUpID09IDApCisJCWZwcmludGYob3V0LCAiJXNGYXN0X2xpbmtfZGVzdDogJS4qc1xuIiwgcHJlZml4LAorCQkJKGludCkgaW5vZGUtPmlfc2l6ZSwgKGNoYXIgKilpbm9kZS0+aV9ibG9jayk7CisJZWxzZSBpZiAoTElOVVhfU19JU0JMSyhpbm9kZS0+aV9tb2RlKSB8fCBMSU5VWF9TX0lTQ0hSKGlub2RlLT5pX21vZGUpKSB7CisJCWludCBtYWpvciwgbWlub3I7CisJCWNvbnN0IGNoYXIgKmRldm5vdGU7CisKKwkJaWYgKGlub2RlLT5pX2Jsb2NrWzBdKSB7CisJCQltYWpvciA9IChpbm9kZS0+aV9ibG9ja1swXSA+PiA4KSAmIDI1NTsKKwkJCW1pbm9yID0gaW5vZGUtPmlfYmxvY2tbMF0gJiAyNTU7CisJCQlkZXZub3RlID0gIiI7CisJCX0gZWxzZSB7CisJCQltYWpvciA9IChpbm9kZS0+aV9ibG9ja1sxXSAmIDB4ZmZmMDApID4+IDg7CisJCQltaW5vciA9ICgoaW5vZGUtPmlfYmxvY2tbMV0gJiAweGZmKSB8CisJCQkJICgoaW5vZGUtPmlfYmxvY2tbMV0gPj4gMTIpICYgMHhmZmYwMCkpOworCQkJZGV2bm90ZSA9ICIoTmV3LXN0eWxlKSAiOworCQl9CisJCWZwcmludGYob3V0LCAiJXNEZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyOiAlMDJkOiUwMmQgKGhleCAlMDJ4OiUwMngpXG4iLAorCQkJZGV2bm90ZSwgbWFqb3IsIG1pbm9yLCBtYWpvciwgbWlub3IpOworCX0gZWxzZSBpZiAoZG9fZHVtcF9ibG9ja3MpIHsKKwkJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQkJZHVtcF9leHRlbnRzKG91dCwgcHJlZml4LCBpbm9kZV9udW0sCisJCQkJICAgICBEVU1QX0xFQUZfRVhURU5UU3xEVU1QX05PREVfRVhURU5UUywgMCwgMCk7CisJCWVsc2UKKwkJCWR1bXBfYmxvY2tzKG91dCwgcHJlZml4LCBpbm9kZV9udW0pOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9pbm9kZShleHQyX2lub190IGlub2RlX251bSwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCUZJTEUJKm91dDsKKworCW91dCA9IG9wZW5fcGFnZXIoKTsKKwlpbnRlcm5hbF9kdW1wX2lub2RlKG91dCwgIiIsIGlub2RlX251bSwgaW5vZGUsIDEpOworCWNsb3NlX3BhZ2VyKG91dCk7Cit9CisKK3ZvaWQgZG9fc3RhdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZV9idWY7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaW5vZGVfYnVmID0gKHN0cnVjdCBleHQyX2lub2RlICopCisJCQltYWxsb2MoRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSk7CisJaWYgKCFpbm9kZV9idWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJkb19zdGF0OiBjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlub2RlLCAwKSkgeworCQlmcmVlKGlub2RlX2J1Zik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlX2Z1bGwoaW5vZGUsIGlub2RlX2J1ZiwgYXJndlswXSwKKwkJCQkJRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKSkpIHsKKwkJZnJlZShpbm9kZV9idWYpOworCQlyZXR1cm47CisJfQorCisJZHVtcF9pbm9kZShpbm9kZSwgaW5vZGVfYnVmKTsKKwlmcmVlKGlub2RlX2J1Zik7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2R1bXBfZXh0ZW50cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXh0Ml9pbm9fdAlpbm87CisJRklMRQkJKm91dDsKKwlpbnQJCWMsIGZsYWdzID0gMDsKKwlpbnQJCWxvZ2ljYWxfd2lkdGg7CisJaW50CQlwaHlzaWNhbF93aWR0aDsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAibmwiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICduJzoKKwkJCWZsYWdzIHw9IERVTVBfTk9ERV9FWFRFTlRTOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJZmxhZ3MgfD0gRFVNUF9MRUFGX0VYVEVOVFM7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChhcmdjICE9IG9wdGluZCArIDEpIHsKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGR1bXBfZXh0ZW50cyBbLW5dIFstbF0gZmlsZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZsYWdzID09IDApCisJCWZsYWdzID0gRFVNUF9OT0RFX0VYVEVOVFMgfCBEVU1QX0xFQUZfRVhURU5UUzsKKwlmbGFncyB8PSBEVU1QX0VYVEVOVF9UQUJMRTsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndltvcHRpbmRdKTsKKwlpZiAoaW5vID09IDApCisJCXJldHVybjsKKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoKGlub2RlLmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZG9lcyBub3QgdXNlcyBleHRlbnQgYmxvY2sgbWFwc1xuIiwKKwkJCWFyZ3Zbb3B0aW5kXSk7CisJCXJldHVybjsKKwl9CisKKwlsb2dpY2FsX3dpZHRoID0gaW50X2xvZzEwKChFWFQyX0lfU0laRSgmaW5vZGUpK2N1cnJlbnRfZnMtPmJsb2Nrc2l6ZS0xKS8KKwkJCQkgIGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSkgKyAxOworCWlmIChsb2dpY2FsX3dpZHRoIDwgNSkKKwkJbG9naWNhbF93aWR0aCA9IDU7CisJcGh5c2ljYWxfd2lkdGggPSBpbnRfbG9nMTAoZXh0MmZzX2Jsb2Nrc19jb3VudChjdXJyZW50X2ZzLT5zdXBlcikpICsgMTsKKwlpZiAocGh5c2ljYWxfd2lkdGggPCA1KQorCQlwaHlzaWNhbF93aWR0aCA9IDU7CisKKwlvdXQgPSBvcGVuX3BhZ2VyKCk7CisJZHVtcF9leHRlbnRzKG91dCwgIiIsIGlubywgZmxhZ3MsIGxvZ2ljYWxfd2lkdGgsIHBoeXNpY2FsX3dpZHRoKTsKKwljbG9zZV9wYWdlcihvdXQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBwcmludF9ibG9ja3NfcHJvYyhleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGJsazY0X3QgKmJsb2NrbnIsCisJCQkgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIHZvaWQgKnByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXByaW50ZigiJWxsdSAiLCAqYmxvY2tucik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fYmxvY2tzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm9kZTsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmaW5vZGUsIDApKSB7CisJCXJldHVybjsKKwl9CisKKwlleHQyZnNfYmxvY2tfaXRlcmF0ZTMoY3VycmVudF9mcywgaW5vZGUsIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBOVUxMLAorCQkJICAgICAgcHJpbnRfYmxvY2tzX3Byb2MsIE5VTEwpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2Nocm9vdChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QgaW5vZGU7CisJaW50IHJldHZhbDsKKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgMCkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19kaXJlY3RvcnkoY3VycmVudF9mcywgaW5vZGUpOworCWlmIChyZXR2YWwpICB7CisJCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKwlyb290ID0gaW5vZGU7Cit9CisKKyNpZm5kZWYgUkVBRF9PTkxZCit2b2lkIGRvX2NscmkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190IGlub2RlOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlX2J1ZjsKKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlLCAmaW5vZGVfYnVmLCBhcmd2WzBdKSkKKwkJcmV0dXJuOworCW1lbXNldCgmaW5vZGVfYnVmLCAwLCBzaXplb2YoaW5vZGVfYnVmKSk7CisJaWYgKGRlYnVnZnNfd3JpdGVfaW5vZGUoaW5vZGUsICZpbm9kZV9idWYsIGFyZ3ZbMF0pKQorCQlyZXR1cm47Cit9CisKK3ZvaWQgZG9fZnJlZWkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQJbGVuID0gMTsKKwlpbnQJCWVyciA9IDA7CisJZXh0Ml9pbm9fdAlpbm9kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDMsIGFyZ3ZbMF0sICI8ZmlsZT4gW251bV0iLAorCQkJCUNIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKwlpZiAoY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPT0gMykgeworCQlsZW4gPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAibGVuZ3RoIiwgJmVycik7CisJCWlmIChlcnIpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA9PSAxICYmCisJICAgICFleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCxpbm9kZSkpCisJCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgY2xlYXIiKTsKKwl3aGlsZSAobGVuLS0gPiAwKQorCQlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLCBpbm9kZSsrKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShjdXJyZW50X2ZzKTsKK30KKwordm9pZCBkb19zZXRpKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50CWxlbiA9IDE7CisJaW50CQllcnIgPSAwOworCWV4dDJfaW5vX3QJaW5vZGU7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAzLCBhcmd2WzBdLCAiPGZpbGU+IFtudW1dIiwKKwkJCQlDSEVDS19GU19SVyB8IENIRUNLX0ZTX0JJVE1BUFMpKQorCQlyZXR1cm47CisJaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCisJCXJldHVybjsKKworCWlub2RlID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCWlmIChhcmdjID09IDMpIHsKKwkJbGVuID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgYXJndlswXSwgImxlbmd0aCIsICZlcnIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuOworCX0KKworCWlmICgobGVuID09IDEpICYmCisJICAgIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLGlub2RlKSkKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKwl3aGlsZSAobGVuLS0gPiAwKQorCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgaW5vZGUrKyk7CisJZXh0MmZzX21hcmtfaWJfZGlydHkoY3VycmVudF9mcyk7Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fdGVzdGkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190IGlub2RlOworCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlub2RlLCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLGlub2RlKSkKKwkJcHJpbnRmKCJJbm9kZSAldSBpcyBtYXJrZWQgaW4gdXNlXG4iLCBpbm9kZSk7CisJZWxzZQorCQlwcmludGYoIklub2RlICV1IGlzIG5vdCBpbiB1c2VcbiIsIGlub2RlKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fZnJlZWIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlibGs2NF90IGJsb2NrOworCWJsazY0X3QgY291bnQgPSAxOworCisJaWYgKGNvbW1vbl9ibG9ja19hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmJsb2NrLCAmY291bnQpKQorCQlyZXR1cm47CisJaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCisJCXJldHVybjsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN1cnJlbnRfZnMtPmJsb2NrX21hcCxibG9jaykpCisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBibG9jayAlbGx1IGFscmVhZHkgY2xlYXIiLAorCQkJCWJsb2NrKTsKKwkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGN1cnJlbnRfZnMtPmJsb2NrX21hcCxibG9jayk7CisJCWJsb2NrKys7CisJfQorCWV4dDJmc19tYXJrX2JiX2RpcnR5KGN1cnJlbnRfZnMpOworfQorCit2b2lkIGRvX3NldGIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlibGs2NF90IGJsb2NrOworCWJsazY0X3QgY291bnQgPSAxOworCisJaWYgKGNvbW1vbl9ibG9ja19hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmJsb2NrLCAmY291bnQpKQorCQlyZXR1cm47CisJaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCisJCXJldHVybjsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3VycmVudF9mcy0+YmxvY2tfbWFwLGJsb2NrKSkKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGJsb2NrICVsbHUgYWxyZWFkeSBzZXQiLAorCQkJCWJsb2NrKTsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdXJyZW50X2ZzLT5ibG9ja19tYXAsYmxvY2spOworCQlibG9jaysrOworCX0KKwlleHQyZnNfbWFya19iYl9kaXJ0eShjdXJyZW50X2ZzKTsKK30KKyNlbmRpZiAvKiBSRUFEX09OTFkgKi8KKwordm9pZCBkb190ZXN0YihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWJsazY0X3QgYmxvY2s7CisJYmxrNjRfdCBjb3VudCA9IDE7CisKKwlpZiAoY29tbW9uX2Jsb2NrX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmYmxvY2ssICZjb3VudCkpCisJCXJldHVybjsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3VycmVudF9mcy0+YmxvY2tfbWFwLGJsb2NrKSkKKwkJCXByaW50ZigiQmxvY2sgJWxsdSBtYXJrZWQgaW4gdXNlXG4iLCBibG9jayk7CisJCWVsc2UKKwkJCXByaW50ZigiQmxvY2sgJWxsdSBub3QgaW4gdXNlXG4iLCBibG9jayk7CisJCWJsb2NrKys7CisJfQorfQorCisjaWZuZGVmIFJFQURfT05MWQorc3RhdGljIHZvaWQgbW9kaWZ5X3U4KGNoYXIgKmNvbSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQkgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIF9fdTggKnZhbCkKK3sKKwljaGFyIGJ1ZlsyMDBdOworCXVuc2lnbmVkIGxvbmcgdjsKKwljaGFyICp0bXA7CisKKwlzcHJpbnRmKGJ1ZiwgZm9ybWF0LCAqdmFsKTsKKwlwcmludGYoIiUzMHMgICAgWyVzXSAiLCBwcm9tcHQsIGJ1Zik7CisJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikpCisJCXJldHVybjsKKwlpZiAoYnVmW3N0cmxlbiAoYnVmKSAtIDFdID09ICdcbicpCisJCWJ1ZltzdHJsZW4gKGJ1ZikgLSAxXSA9ICdcMCc7CisJaWYgKCFidWZbMF0pCisJCXJldHVybjsKKwl2ID0gc3RydG91bChidWYsICZ0bXAsIDApOworCWlmICgqdG1wKQorCQljb21fZXJyKGNvbSwgMCwgIkJhZCB2YWx1ZSAtICVzIiwgYnVmKTsKKwllbHNlCisJCSp2YWwgPSB2OworfQorCitzdGF0aWMgdm9pZCBtb2RpZnlfdTE2KGNoYXIgKmNvbSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQkgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCBfX3UxNiAqdmFsKQoreworCWNoYXIgYnVmWzIwMF07CisJdW5zaWduZWQgbG9uZyB2OworCWNoYXIgKnRtcDsKKworCXNwcmludGYoYnVmLCBmb3JtYXQsICp2YWwpOworCXByaW50ZigiJTMwcyAgICBbJXNdICIsIHByb21wdCwgYnVmKTsKKwlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkKKwkJcmV0dXJuOworCWlmIChidWZbc3RybGVuIChidWYpIC0gMV0gPT0gJ1xuJykKKwkJYnVmW3N0cmxlbiAoYnVmKSAtIDFdID0gJ1wwJzsKKwlpZiAoIWJ1ZlswXSkKKwkJcmV0dXJuOworCXYgPSBzdHJ0b3VsKGJ1ZiwgJnRtcCwgMCk7CisJaWYgKCp0bXApCisJCWNvbV9lcnIoY29tLCAwLCAiQmFkIHZhbHVlIC0gJXMiLCBidWYpOworCWVsc2UKKwkJKnZhbCA9IHY7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV91MzIoY2hhciAqY29tLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCSAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIF9fdTMyICp2YWwpCit7CisJY2hhciBidWZbMjAwXTsKKwl1bnNpZ25lZCBsb25nIHY7CisJY2hhciAqdG1wOworCisJc3ByaW50ZihidWYsIGZvcm1hdCwgKnZhbCk7CisJcHJpbnRmKCIlMzBzICAgIFslc10gIiwgcHJvbXB0LCBidWYpOworCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKQorCQlyZXR1cm47CisJaWYgKGJ1ZltzdHJsZW4gKGJ1ZikgLSAxXSA9PSAnXG4nKQorCQlidWZbc3RybGVuIChidWYpIC0gMV0gPSAnXDAnOworCWlmICghYnVmWzBdKQorCQlyZXR1cm47CisJdiA9IHN0cnRvdWwoYnVmLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkKKwkJY29tX2Vycihjb20sIDAsICJCYWQgdmFsdWUgLSAlcyIsIGJ1Zik7CisJZWxzZQorCQkqdmFsID0gdjsKK30KKworCit2b2lkIGRvX21vZGlmeV9pbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vX3QJaW5vZGVfbnVtOworCWludCAJCWk7CisJdW5zaWduZWQgY2hhcgkqZnJhZywgKmZzaXplOworCWNoYXIJCWJ1Zls4MF07CisJaW50IAkJb3M7CisJY29uc3QgY2hhcgkqaGV4X2Zvcm1hdCA9ICIweCV4IjsKKwljb25zdCBjaGFyCSpvY3RhbF9mb3JtYXQgPSAiMCVvIjsKKwljb25zdCBjaGFyCSpkZWNpbWFsX2Zvcm1hdCA9ICIlZCI7CisJY29uc3QgY2hhcgkqdW5zaWduZWRsb25nX2Zvcm1hdCA9ICIlbHUiOworCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlub2RlX251bSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlvcyA9IGN1cnJlbnRfZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3M7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlX251bSwgJmlub2RlLCBhcmd2WzFdKSkKKwkJcmV0dXJuOworCisJbW9kaWZ5X3UxNihhcmd2WzBdLCAiTW9kZSIsIG9jdGFsX2Zvcm1hdCwgJmlub2RlLmlfbW9kZSk7CisJbW9kaWZ5X3UxNihhcmd2WzBdLCAiVXNlciBJRCIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV91aWQpOworCW1vZGlmeV91MTYoYXJndlswXSwgIkdyb3VwIElEIiwgZGVjaW1hbF9mb3JtYXQsICZpbm9kZS5pX2dpZCk7CisJbW9kaWZ5X3UzMihhcmd2WzBdLCAiU2l6ZSIsIHVuc2lnbmVkbG9uZ19mb3JtYXQsICZpbm9kZS5pX3NpemUpOworCW1vZGlmeV91MzIoYXJndlswXSwgIkNyZWF0aW9uIHRpbWUiLCBkZWNpbWFsX2Zvcm1hdCwgJmlub2RlLmlfY3RpbWUpOworCW1vZGlmeV91MzIoYXJndlswXSwgIk1vZGlmaWNhdGlvbiB0aW1lIiwgZGVjaW1hbF9mb3JtYXQsICZpbm9kZS5pX210aW1lKTsKKwltb2RpZnlfdTMyKGFyZ3ZbMF0sICJBY2Nlc3MgdGltZSIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9hdGltZSk7CisJbW9kaWZ5X3UzMihhcmd2WzBdLCAiRGVsZXRpb24gdGltZSIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9kdGltZSk7CisJbW9kaWZ5X3UxNihhcmd2WzBdLCAiTGluayBjb3VudCIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9saW5rc19jb3VudCk7CisJaWYgKG9zID09IEVYVDJfT1NfTElOVVgpCisJCW1vZGlmeV91MTYoYXJndlswXSwgIkJsb2NrIGNvdW50IGhpZ2giLCB1bnNpZ25lZGxvbmdfZm9ybWF0LAorCQkJICAgJmlub2RlLm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkpOworCW1vZGlmeV91MzIoYXJndlswXSwgIkJsb2NrIGNvdW50IiwgdW5zaWduZWRsb25nX2Zvcm1hdCwgJmlub2RlLmlfYmxvY2tzKTsKKwltb2RpZnlfdTMyKGFyZ3ZbMF0sICJGaWxlIGZsYWdzIiwgaGV4X2Zvcm1hdCwgJmlub2RlLmlfZmxhZ3MpOworCW1vZGlmeV91MzIoYXJndlswXSwgIkdlbmVyYXRpb24iLCBoZXhfZm9ybWF0LCAmaW5vZGUuaV9nZW5lcmF0aW9uKTsKKyNpZiAwCisJbW9kaWZ5X3UzMihhcmd2WzBdLCAiUmVzZXJ2ZWQxIiwgZGVjaW1hbF9mb3JtYXQsICZpbm9kZS5pX3Jlc2VydmVkMSk7CisjZW5kaWYKKwltb2RpZnlfdTMyKGFyZ3ZbMF0sICJGaWxlIGFjbCIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9maWxlX2FjbCk7CisJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkKKwkJbW9kaWZ5X3UzMihhcmd2WzBdLCAiRGlyZWN0b3J5IGFjbCIsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9kaXJfYWNsKTsKKwllbHNlCisJCW1vZGlmeV91MzIoYXJndlswXSwgIkhpZ2ggMzJiaXRzIG9mIHNpemUiLCBkZWNpbWFsX2Zvcm1hdCwgJmlub2RlLmlfc2l6ZV9oaWdoKTsKKworCWlmIChvcyA9PSBFWFQyX09TX0hVUkQpCisJCW1vZGlmeV91MzIoYXJndlswXSwgIlRyYW5zbGF0b3IgQmxvY2siLAorCQkJICAgIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUub3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcik7CisKKwltb2RpZnlfdTMyKGFyZ3ZbMF0sICJGcmFnbWVudCBhZGRyZXNzIiwgZGVjaW1hbF9mb3JtYXQsICZpbm9kZS5pX2ZhZGRyKTsKKwlzd2l0Y2ggKG9zKSB7CisJICAgIGNhc2UgRVhUMl9PU19IVVJEOgorCQlmcmFnID0gJmlub2RlLm9zZDIuaHVyZDIuaF9pX2ZyYWc7CisJCWZzaXplID0gJmlub2RlLm9zZDIuaHVyZDIuaF9pX2ZzaXplOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJZnJhZyA9IGZzaXplID0gMDsKKwl9CisJaWYgKGZyYWcpCisJCW1vZGlmeV91OChhcmd2WzBdLCAiRnJhZ21lbnQgbnVtYmVyIiwgZGVjaW1hbF9mb3JtYXQsIGZyYWcpOworCWlmIChmc2l6ZSkKKwkJbW9kaWZ5X3U4KGFyZ3ZbMF0sICJGcmFnbWVudCBzaXplIiwgZGVjaW1hbF9mb3JtYXQsIGZzaXplKTsKKworCWZvciAoaT0wOyAgaSA8IEVYVDJfTkRJUl9CTE9DS1M7IGkrKykgeworCQlzcHJpbnRmKGJ1ZiwgIkRpcmVjdCBCbG9jayAjJWQiLCBpKTsKKwkJbW9kaWZ5X3UzMihhcmd2WzBdLCBidWYsIGRlY2ltYWxfZm9ybWF0LCAmaW5vZGUuaV9ibG9ja1tpXSk7CisJfQorCW1vZGlmeV91MzIoYXJndlswXSwgIkluZGlyZWN0IEJsb2NrIiwgZGVjaW1hbF9mb3JtYXQsCisJCSAgICAmaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10pOworCW1vZGlmeV91MzIoYXJndlswXSwgIkRvdWJsZSBJbmRpcmVjdCBCbG9jayIsIGRlY2ltYWxfZm9ybWF0LAorCQkgICAgJmlub2RlLmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSk7CisJbW9kaWZ5X3UzMihhcmd2WzBdLCAiVHJpcGxlIEluZGlyZWN0IEJsb2NrIiwgZGVjaW1hbF9mb3JtYXQsCisJCSAgICAmaW5vZGUuaV9ibG9ja1tFWFQyX1RJTkRfQkxPQ0tdKTsKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm9kZV9udW0sICZpbm9kZSwgYXJndlsxXSkpCisJCXJldHVybjsKK30KKyNlbmRpZiAvKiBSRUFEX09OTFkgKi8KKwordm9pZCBkb19jaGFuZ2Vfd29ya2luZ19kaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190CWlub2RlOworCWludAkJcmV0dmFsOworCisJaWYgKGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgJmlub2RlLCAwKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2NoZWNrX2RpcmVjdG9yeShjdXJyZW50X2ZzLCBpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMV0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJY3dkID0gaW5vZGU7CisJcmV0dXJuOworfQorCit2b2lkIGRvX3ByaW50X3dvcmtpbmdfZGlyZWN0b3J5KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50CXJldHZhbDsKKwljaGFyCSpwYXRobmFtZSA9IE5VTEw7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAxLAorCQkJCSJwcmludF93b3JraW5nX2RpcmVjdG9yeSIsICIiLCAwKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZShjdXJyZW50X2ZzLCBjd2QsIDAsICZwYXRobmFtZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSB0cnlpbmcgdG8gZ2V0IHBhdGhuYW1lIG9mIGN3ZCIpOworCX0KKwlwcmludGYoIltwd2RdICAgSU5PREU6ICU2dSAgUEFUSDogJXNcbiIsCisJICAgICAgIGN3ZCwgcGF0aG5hbWUgPyBwYXRobmFtZSA6ICJOVUxMIik7CisgICAgICAgIGlmIChwYXRobmFtZSkgeworCQlmcmVlKHBhdGhuYW1lKTsKKwkJcGF0aG5hbWUgPSBOVUxMOworICAgICAgICB9CisJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZShjdXJyZW50X2ZzLCByb290LCAwLCAmcGF0aG5hbWUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgdHJ5aW5nIHRvIGdldCBwYXRobmFtZSBvZiByb290Iik7CisJfQorCXByaW50ZigiW3Jvb3RdICBJTk9ERTogJTZ1ICBQQVRIOiAlc1xuIiwKKwkgICAgICAgcm9vdCwgcGF0aG5hbWUgPyBwYXRobmFtZSA6ICJOVUxMIik7CisJaWYgKHBhdGhuYW1lKSB7CisJCWZyZWUocGF0aG5hbWUpOworCQlwYXRobmFtZSA9IE5VTEw7CisJfQorCXJldHVybjsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3N0YXRpYyB2b2lkIG1ha2VfbGluayhjaGFyICpzb3VyY2VuYW1lLCBjaGFyICpkZXN0bmFtZSkKK3sKKwlleHQyX2lub190CWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlpbnQJCXJldHZhbDsKKwlleHQyX2lub190CWRpcjsKKwljaGFyCQkqZGVzdCwgKmNwLCAqYmFzZV9uYW1lOworCisJLyoKKwkgKiBHZXQgdGhlIHNvdXJjZSBpbm9kZQorCSAqLworCWlubyA9IHN0cmluZ190b19pbm9kZShzb3VyY2VuYW1lKTsKKwlpZiAoIWlubykKKwkJcmV0dXJuOworCWJhc2VfbmFtZSA9IHN0cnJjaHIoc291cmNlbmFtZSwgJy8nKTsKKwlpZiAoYmFzZV9uYW1lKQorCQliYXNlX25hbWUrKzsKKwllbHNlCisJCWJhc2VfbmFtZSA9IHNvdXJjZW5hbWU7CisJLyoKKwkgKiBGaWd1cmUgb3V0IHRoZSBkZXN0aW5hdGlvbi4gIEZpcnN0IHNlZSBpZiBpdCBleGlzdHMgYW5kIGlzCisJICogYSBkaXJlY3RvcnkuCisJICovCisJaWYgKCEgKHJldHZhbD1leHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBkZXN0bmFtZSwgJmRpcikpKQorCQlkZXN0ID0gYmFzZV9uYW1lOworCWVsc2UgeworCQkvKgorCQkgKiBPSywgaXQgZG9lc24ndCBleGlzdC4gIFNlZSBpZiBpdCBpcworCQkgKiAnPGRpcj4vYmFzZW5hbWUnIG9yICdiYXNlbmFtZScKKwkJICovCisJCWNwID0gc3RycmNocihkZXN0bmFtZSwgJy8nKTsKKwkJaWYgKGNwKSB7CisJCQkqY3AgPSAwOworCQkJZGlyID0gc3RyaW5nX3RvX2lub2RlKGRlc3RuYW1lKTsKKwkJCWlmICghZGlyKQorCQkJCXJldHVybjsKKwkJCWRlc3QgPSBjcCsxOworCQl9IGVsc2UgeworCQkJZGlyID0gY3dkOworCQkJZGVzdCA9IGRlc3RuYW1lOworCQl9CisJfQorCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm8sICZpbm9kZSwgc291cmNlbmFtZSkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGRpciwgZGVzdCwgaW5vLAorCQkJICAgICBleHQyX2ZpbGVfdHlwZShpbm9kZS5pX21vZGUpKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKCJtYWtlX2xpbmsiLCByZXR2YWwsIDApOworCXJldHVybjsKK30KKworCit2b2lkIGRvX2xpbmsoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAibGluayIsCisJCQkJIjxzb3VyY2UgZmlsZT4gPGRlc3RfbmFtZT4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCW1ha2VfbGluayhhcmd2WzFdLCBhcmd2WzJdKTsKK30KKworc3RhdGljIGludCBtYXJrX2Jsb2Nrc19wcm9jKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90ICpibG9ja25yLAorCQkJICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgIHZvaWQgKnByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWJsazY0X3QJYmxvY2s7CisKKwlibG9jayA9ICpibG9ja25yOworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsb2NrLCArMSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fdW5kZWwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190CWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDMsICJ1bmRlbGV0ZSIsCisJCQkJIjxpbm9kZV9udW0+IFtkZXN0X25hbWVdIiwKKwkJCQlDSEVDS19GU19SVyB8IENIRUNLX0ZTX0JJVE1BUFMpKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIGFyZ3ZbMV0pKQorCQlyZXR1cm47CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsIGlubykpIHsKKwkJY29tX2Vycihhcmd2WzFdLCAwLCAiSW5vZGUgaXMgbm90IG1hcmtlZCBhcyBkZWxldGVkIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFhYWCB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGFuZGxlIGNoYW5naW5nIHRoZSBsaW5rcyBjb3VudCBvbiB0aGUKKwkgKiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gdW5kZWxldGluZyBhIGRpcmVjdG9yeS4KKwkgKi8KKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpID8gMiA6IDE7CisJaW5vZGUuaV9kdGltZSA9IDA7CisKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm8sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCWV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm8sIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBOVUxMLAorCQkJICAgICAgbWFya19ibG9ja3NfcHJvYywgTlVMTCk7CisKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlubywgKzEsIDApOworCisJaWYgKGFyZ2MgPiAyKQorCQltYWtlX2xpbmsoYXJndlsxXSwgYXJndlsyXSk7Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19maWxlX2J5X25hbWUoY2hhciAqZmlsZW5hbWUpCit7CisJaW50CQlyZXR2YWw7CisJZXh0Ml9pbm9fdAlkaXI7CisJY2hhcgkJKmJhc2VfbmFtZTsKKworCWJhc2VfbmFtZSA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisJaWYgKGJhc2VfbmFtZSkgeworCQkqYmFzZV9uYW1lKysgPSAnXDAnOworCQlkaXIgPSBzdHJpbmdfdG9faW5vZGUoZmlsZW5hbWUpOworCQlpZiAoIWRpcikKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQlkaXIgPSBjd2Q7CisJCWJhc2VfbmFtZSA9IGZpbGVuYW1lOworCX0KKwlyZXR2YWwgPSBleHQyZnNfdW5saW5rKGN1cnJlbnRfZnMsIGRpciwgYmFzZV9uYW1lLCAwLCAwKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKCJ1bmxpbmtfZmlsZV9ieV9uYW1lIiwgcmV0dmFsLCAwKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fdW5saW5rKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgImxpbmsiLAorCQkJCSI8cGF0aG5hbWU+IiwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwl1bmxpbmtfZmlsZV9ieV9uYW1lKGFyZ3ZbMV0pOworfQorI2VuZGlmIC8qIFJFQURfT05MWSAqLworCit2b2lkIGRvX2ZpbmRfZnJlZV9ibG9jayhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWJsazY0X3QJZnJlZV9ibGssIGdvYWwsIGZpcnN0X2ZyZWUgPSAwOworIAlpbnQJCWNvdW50OworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnRtcDsKKworCWlmICgoYXJnYyA+IDMpIHx8IChhcmdjPT0yICYmICphcmd2WzFdID09ICc/JykpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IGZpbmRfZnJlZV9ibG9jayBbY291bnQgW2dvYWxdXSIpOworCQlyZXR1cm47CisJfQorCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJY291bnQgPSBzdHJ0b2woYXJndlsxXSwmdG1wLDApOworCQlpZiAoKnRtcCkgeworCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiQmFkIGNvdW50IC0gJXMiLCBhcmd2WzFdKTsKKwkJCXJldHVybjsKKwkJfQorIAl9IGVsc2UKKwkJY291bnQgPSAxOworCisJaWYgKGFyZ2MgPiAyKSB7CisJCWdvYWwgPSBzdHJ0b2woYXJndlsyXSwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJCYWQgZ29hbCAtICVzIiwgYXJndlsxXSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZWxzZQorCQlnb2FsID0gY3VycmVudF9mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKworCXByaW50ZigiRnJlZSBibG9ja3MgZm91bmQ6ICIpOworCWZyZWVfYmxrID0gZ29hbCAtIDE7CisJd2hpbGUgKGNvdW50LS0gPiAwKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGN1cnJlbnRfZnMsIGZyZWVfYmxrICsgMSwgMCwKKwkJCQkJICAgJmZyZWVfYmxrKTsKKwkJaWYgKGZpcnN0X2ZyZWUpIHsKKwkJCWlmIChmaXJzdF9mcmVlID09IGZyZWVfYmxrKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWZpcnN0X2ZyZWUgPSBmcmVlX2JsazsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiZXh0MmZzX25ld19ibG9jayIsIHJldHZhbCwgMCk7CisJCQlyZXR1cm47CisJCX0gZWxzZQorCQkJcHJpbnRmKCIlbGx1ICIsIGZyZWVfYmxrKTsKKwl9CisgCXByaW50ZigiXG4iKTsKK30KKwordm9pZCBkb19maW5kX2ZyZWVfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190CWZyZWVfaW5vZGUsIGRpcjsKKwlpbnQJCW1vZGU7CisJaW50CQlyZXR2YWw7CisJY2hhcgkJKnRtcDsKKworCWlmIChhcmdjID4gMyB8fCAoYXJnYz4xICYmICphcmd2WzFdID09ICc/JykpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IGZpbmRfZnJlZV9pbm9kZSBbZGlyXSBbbW9kZV0iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCWRpciA9IHN0cnRvbChhcmd2WzFdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIkJhZCBkaXIgLSAlcyIsIGFyZ3ZbMV0pOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UKKwkJZGlyID0gcm9vdDsKKwlpZiAoYXJnYyA+IDIpIHsKKwkJbW9kZSA9IHN0cnRvbChhcmd2WzJdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIkJhZCBtb2RlIC0gJXMiLCBhcmd2WzJdKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQltb2RlID0gMDEwNzU1OworCisJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBkaXIsIG1vZGUsIDAsICZmcmVlX2lub2RlKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKCJleHQyZnNfbmV3X2lub2RlIiwgcmV0dmFsLCAwKTsKKwllbHNlCisJCXByaW50ZigiRnJlZSBpbm9kZSBmb3VuZDogJXVcbiIsIGZyZWVfaW5vZGUpOworfQorCisjaWZuZGVmIFJFQURfT05MWQorc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKK3sKKwlleHQyX2ZpbGVfdAllMl9maWxlOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlnb3Q7CisJdW5zaWduZWQgaW50CXdyaXR0ZW47CisJY2hhcgkJKmJ1ZjsKKwljaGFyCQkqcHRyOworCWNoYXIJCSp6ZXJvX2J1ZjsKKwlpbnQJCWNtcDsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKwkJCQkgIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKGJ1ZnNpemUsICZ6ZXJvX2J1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKwkJaWYgKGdvdCA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChnb3QgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlwdHIgPSBidWY7CisKKwkJLyogU3BhcnNlIGNvcHkgKi8KKwkJaWYgKG1ha2VfaG9sZXMpIHsKKwkJCS8qIENoZWNrIHdoZXRoZXIgYWxsIGlzIHplcm8gKi8KKwkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworCQkJaWYgKGNtcCA9PSAwKSB7CisJCQkJIC8qIFRoZSB3aG9sZSBibG9jayBpcyB6ZXJvLCBtYWtlIGEgaG9sZSAqLworCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBmYWlsOworCQkJCWdvdCA9IDA7CisJCQl9CisJCX0KKworCQkvKiBOb3JtYWwgY29weSAqLworCQl3aGlsZSAoZ290ID4gMCkgeworCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorCQkJCQkJICAgZ290LCAmd3JpdHRlbik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZmFpbDsKKworCQkJZ290IC09IHdyaXR0ZW47CisJCQlwdHIgKz0gd3JpdHRlbjsKKwkJfQorCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisJcmV0dXJuIHJldHZhbDsKKworZmFpbDoKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisJKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCXJldHVybiByZXR2YWw7Cit9CisKKwordm9pZCBkb193cml0ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAkJZmQ7CisJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKwlleHQyX2lub190CW5ld2ZpbGU7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworCWludAkJbWFrZV9ob2xlcyA9IDA7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAid3JpdGUiLAorCQkJCSI8bmF0aXZlIGZpbGU+IDxuZXcgZmlsZT4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKGFyZ3ZbMV0sIGVycm5vLCAwKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKKwkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMl0sICZuZXdmaWxlKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgYXJndlsyXSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CisJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzJdLCBuZXdmaWxlLAorCQkJICAgICBFWFQyX0ZUX1JFR19GSUxFKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKwkJCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlsyXSwgcmV0dmFsLCAwKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCisJCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CisJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisJaW5vZGUuaV9tb2RlID0gKHN0YXRidWYuc3RfbW9kZSAmIH5MSU5VWF9TX0lGTVQpIHwgTElOVVhfU19JRlJFRzsKKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKwlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisJCWludCBpOworCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKworCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworCQllaC0+ZWhfZGVwdGggPSAwOworCQllaC0+ZWhfZW50cmllcyA9IDA7CisJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisJCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwl9CisJaWYgKGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKG5ld2ZpbGUsICZpbm9kZSwgYXJndlswXSkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKwkJaWYgKHN0YXRidWYuc3RfYmxvY2tzIDwgc3RhdGJ1Zi5zdF9zaXplIC8gU19CTEtTSVpFKSB7CisJCQltYWtlX2hvbGVzID0gMTsKKwkJCS8qCisJCQkgKiBVc2UgSS9PIGJsb2Nrc2l6ZSBhcyBidWZmZXIgc2l6ZSB3aGVuCisJCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKwkJCSAqLworCQkJYnVmc2l6ZSA9IHN0YXRidWYuc3RfYmxrc2l6ZTsKKwkJfQorCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworCQlpZiAocmV0dmFsKQorCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKwl9CisJY2xvc2UoZmQpOworfQorCit2b2lkIGRvX21rbm9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgbG9uZwltb2RlLCBtYWpvciwgbWlub3I7CisJZXh0Ml9pbm9fdAluZXdmaWxlOworCWVycmNvZGVfdCAJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWludAkJZmlsZXR5cGUsIG5yOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAoYXJnYyA8IDMgfHwgYXJndlsyXVsxXSkgeworCXVzYWdlOgorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogbWtub2QgPG5hbWU+IFtwfCBbY3xiXSA8bWFqb3I+IDxtaW5vcj5dIik7CisJCXJldHVybjsKKwl9CisJbW9kZSA9IG1pbm9yID0gbWFqb3IgPSAwOworCXN3aXRjaCAoYXJndlsyXVswXSkgeworCQljYXNlICdwJzoKKwkJCW1vZGUgPSBMSU5VWF9TX0lGSUZPOworCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisJCQluciA9IDM7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQltb2RlID0gTElOVVhfU19JRkNIUjsKKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisJCQluciA9IDU7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQltb2RlID0gTElOVVhfU19JRkJMSzsKKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9CTEtERVY7CisJCQluciA9IDU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZpbGV0eXBlID0gMDsKKwkJCW5yID0gMDsKKwl9CisJaWYgKG5yID09IDUpIHsKKwkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbM10sIGFyZ3YrMywgMCk7CisJCW1pbm9yID0gc3RydG91bChhcmd2WzRdLCBhcmd2KzQsIDApOworCQlpZiAobWFqb3IgPiA2NTUzNSB8fCBtaW5vciA+IDY1NTM1IHx8IGFyZ3ZbM11bMF0gfHwgYXJndls0XVswXSkKKwkJCW5yID0gMDsKKwl9CisJaWYgKGFyZ2MgIT0gbnIpCisJCWdvdG8gdXNhZ2U7CisJaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMV0sIG5ld2ZpbGUsIGZpbGV0eXBlKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworCQkJcmV0dXJuOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwKKwkJCQkgICAgIGZpbGV0eXBlKTsKKwl9CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMV0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCxuZXdmaWxlKSkKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKwlpbm9kZS5pX21vZGUgPSBtb2RlOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisJaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IqMjU2K21pbm9yOworCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKwl9IGVsc2UgeworCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKwkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CisJfQorCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCWlmIChkZWJ1Z2ZzX3dyaXRlX25ld19pbm9kZShuZXdmaWxlLCAmaW5vZGUsIGFyZ3ZbMF0pKQorCQlyZXR1cm47Cit9CisKK3ZvaWQgZG9fbWtkaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyCSpjcDsKKwlleHQyX2lub190CXBhcmVudDsKKwljaGFyCSpuYW1lOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCAibWtkaXIiLAorCQkJCSI8ZmlsZW5hbWU+IiwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwljcCA9IHN0cnJjaHIoYXJndlsxXSwgJy8nKTsKKwlpZiAoY3ApIHsKKwkJKmNwID0gMDsKKwkJcGFyZW50ID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCQlpZiAoIXBhcmVudCkgeworCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworCQkJcmV0dXJuOworCQl9CisJCW5hbWUgPSBjcCsxOworCX0gZWxzZSB7CisJCXBhcmVudCA9IGN3ZDsKKwkJbmFtZSA9IGFyZ3ZbMV07CisJfQorCit0cnlfYWdhaW46CisJcmV0dmFsID0gZXh0MmZzX21rZGlyKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSk7CisJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKwkJCXJldHVybjsKKwkJfQorCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCit9CisKK3N0YXRpYyBpbnQgcmVsZWFzZV9ibG9ja3NfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tuciwKKwkJCSAgICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlibGs2NF90CWJsb2NrOworCisJYmxvY2sgPSAqYmxvY2tucjsKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibG9jaywgLTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX2ZpbGVfYnlfaW5vZGUoZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZV9idWY7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlLCAmaW5vZGVfYnVmLCAwKSkKKwkJcmV0dXJuOworCWlub2RlX2J1Zi5pX2R0aW1lID0gY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm9kZSwgJmlub2RlX2J1ZiwgMCkpCisJCXJldHVybjsKKwlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihjdXJyZW50X2ZzLCAmaW5vZGVfYnVmKSkKKwkJcmV0dXJuOworCisJZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGN1cnJlbnRfZnMsIGlub2RlLCBCTE9DS19GTEFHX1JFQURfT05MWSwgTlVMTCwKKwkJCSAgICAgIHJlbGVhc2VfYmxvY2tzX3Byb2MsIE5VTEwpOworCXByaW50ZigiXG4iKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlub2RlLCAtMSwKKwkJCQkgIExJTlVYX1NfSVNESVIoaW5vZGVfYnVmLmlfbW9kZSkpOworfQorCisKK3ZvaWQgZG9fa2lsbF9maWxlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdCBpbm9kZV9udW07CisKKwlpZiAoY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmaW5vZGVfbnVtLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWtpbGxfZmlsZV9ieV9pbm9kZShpbm9kZV9udW0pOworfQorCit2b2lkIGRvX3JtKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldHZhbDsKKwlleHQyX2lub190IGlub2RlX251bTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDIsICJybSIsCisJCQkJIjxmaWxlbmFtZT4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGFyZ3ZbMV0sICZpbm9kZV9udW0pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBmaWxlbmFtZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm9kZV9udW0sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiZmlsZSBpcyBhIGRpcmVjdG9yeSIpOworCQlyZXR1cm47CisJfQorCisJLS1pbm9kZS5pX2xpbmtzX2NvdW50OworCWlmIChkZWJ1Z2ZzX3dyaXRlX2lub2RlKGlub2RlX251bSwgJmlub2RlLCBhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJdW5saW5rX2ZpbGVfYnlfbmFtZShhcmd2WzFdKTsKKwlpZiAoaW5vZGUuaV9saW5rc19jb3VudCA9PSAwKQorCQlraWxsX2ZpbGVfYnlfaW5vZGUoaW5vZGVfbnVtKTsKK30KKworc3RydWN0IHJkX3N0cnVjdCB7CisJZXh0Ml9pbm9fdAlwYXJlbnQ7CisJaW50CQllbXB0eTsKK307CisKK3N0YXRpYyBpbnQgcm1kaXJfcHJvYyhleHQyX2lub190IGRpciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludAllbnRyeSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkgICAgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNoYXIJKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHZvaWQJKnByaXZhdGUpCit7CisJc3RydWN0IHJkX3N0cnVjdCAqcmRzID0gKHN0cnVjdCByZF9zdHJ1Y3QgKikgcHJpdmF0ZTsKKworCWlmIChkaXJlbnQtPmlub2RlID09IDApCisJCXJldHVybiAwOworCWlmICgoKGRpcmVudC0+bmFtZV9sZW4mMHhGRikgPT0gMSkgJiYgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpKQorCQlyZXR1cm4gMDsKKwlpZiAoKChkaXJlbnQtPm5hbWVfbGVuJjB4RkYpID09IDIpICYmIChkaXJlbnQtPm5hbWVbMF0gPT0gJy4nKSAmJgorCSAgICAoZGlyZW50LT5uYW1lWzFdID09ICcuJykpIHsKKwkJcmRzLT5wYXJlbnQgPSBkaXJlbnQtPmlub2RlOworCQlyZXR1cm4gMDsKKwl9CisJcmRzLT5lbXB0eSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fcm1kaXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0dmFsOworCWV4dDJfaW5vX3QgaW5vZGVfbnVtOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCXN0cnVjdCByZF9zdHJ1Y3QgcmRzOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgInJtZGlyIiwKKwkJCQkiPGZpbGVuYW1lPiIsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgYXJndlsxXSwgJmlub2RlX251bSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIHRyeWluZyB0byByZXNvbHZlIGZpbGVuYW1lIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlub2RlX251bSwgJmlub2RlLCBhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiZmlsZSBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJcmV0dXJuOworCX0KKworCXJkcy5wYXJlbnQgPSAwOworCXJkcy5lbXB0eSA9IDE7CisKKwlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUyKGN1cnJlbnRfZnMsIGlub2RlX251bSwgMCwKKwkJCQkgICAgMCwgcm1kaXJfcHJvYywgJnJkcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSIpOworCQlyZXR1cm47CisJfQorCWlmIChyZHMuZW1wdHkgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJkaXJlY3Rvcnkgbm90IGVtcHR5Iik7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMDsKKwlpZiAoZGVidWdmc193cml0ZV9pbm9kZShpbm9kZV9udW0sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCXVubGlua19maWxlX2J5X25hbWUoYXJndlsxXSk7CisJa2lsbF9maWxlX2J5X2lub2RlKGlub2RlX251bSk7CisKKwlpZiAocmRzLnBhcmVudCkgeworCQlpZiAoZGVidWdmc19yZWFkX2lub2RlKHJkcy5wYXJlbnQsICZpbm9kZSwgYXJndlswXSkpCisJCQlyZXR1cm47CisJCWlmIChpbm9kZS5pX2xpbmtzX2NvdW50ID4gMSkKKwkJCWlub2RlLmlfbGlua3NfY291bnQtLTsKKwkJaWYgKGRlYnVnZnNfd3JpdGVfaW5vZGUocmRzLnBhcmVudCwgJmlub2RlLCBhcmd2WzBdKSkKKwkJCXJldHVybjsKKwl9Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fc2hvd19kZWJ1Z2ZzX3BhcmFtcyhpbnQgYXJnYyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgY2hhciAqYXJndltdIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoY3VycmVudF9mcykKKwkJcHJpbnRmKCJPcGVuIG1vZGU6IHJlYWQtJXNcbiIsCisJCSAgICAgICBjdXJyZW50X2ZzLT5mbGFncyAmIEVYVDJfRkxBR19SVyA/ICJ3cml0ZSIgOiAib25seSIpOworCXByaW50ZigiRmlsZXN5c3RlbSBpbiB1c2U6ICVzXG4iLAorCSAgICAgICBjdXJyZW50X2ZzID8gY3VycmVudF9mcy0+ZGV2aWNlX25hbWUgOiAiLS1ub25lLS0iKTsKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fZXhwYW5kX2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QgaW5vZGU7CisJaW50IHJldHZhbDsKKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJY29tX2VycigiZXh0MmZzX2V4cGFuZF9kaXIiLCByZXR2YWwsIDApOworCXJldHVybjsKK30KKwordm9pZCBkb19mZWF0dXJlcyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAlpOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmICgoYXJnYyAhPSAxKSAmJiBjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJZm9yIChpPTE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGUycF9lZGl0X2ZlYXR1cmUoYXJndltpXSwKKwkJCQkgICAgICZjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCwgMCkpCisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVbmtub3duIGZlYXR1cmU6ICVzXG4iLAorCQkJCWFyZ3ZbaV0pOworCQllbHNlCisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdXJyZW50X2ZzKTsKKwl9CisJcHJpbnRfZmVhdHVyZXMoY3VycmVudF9mcy0+c3VwZXIsIHN0ZG91dCk7Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3ZvaWQgZG9fYm1hcChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vOworCWJsazY0X3QJCWJsaywgcGJsazsKKwlpbnQJCWVycjsKKwllcnJjb2RlX3QJZXJyY29kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiBsb2dpY2FsX2JsayIsIDApKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKwllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBhcmd2WzJdLCAmYmxrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwllcnJjb2RlID0gZXh0MmZzX2JtYXAyKGN1cnJlbnRfZnMsIGlubywgMCwgMCwgMCwgYmxrLCAwLCAmcGJsayk7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnJjb2RlLAorCQkJIndoaWxlIG1hcHBpbmcgbG9naWNhbCBibG9jayAlbGx1XG4iLCBibGspOworCQlyZXR1cm47CisJfQorCXByaW50ZigiJWxsdVxuIiwgcGJsayk7Cit9CisKK3ZvaWQgZG9faW1hcChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vOworCXVuc2lnbmVkIGxvbmcgCWdyb3VwLCBibG9jaywgYmxvY2tfbnIsIG9mZnNldDsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDIsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiIsIDApKQorCQlyZXR1cm47CisJaW5vID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vKQorCQlyZXR1cm47CisKKwlncm91cCA9IChpbm8gLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChjdXJyZW50X2ZzLT5zdXBlcik7CisJb2Zmc2V0ID0gKChpbm8gLSAxKSAlIEVYVDJfSU5PREVTX1BFUl9HUk9VUChjdXJyZW50X2ZzLT5zdXBlcikpICoKKwkJRVhUMl9JTk9ERV9TSVpFKGN1cnJlbnRfZnMtPnN1cGVyKTsKKwlibG9jayA9IG9mZnNldCA+PiBFWFQyX0JMT0NLX1NJWkVfQklUUyhjdXJyZW50X2ZzLT5zdXBlcik7CisJaWYgKCFleHQyZnNfaW5vZGVfdGFibGVfbG9jKGN1cnJlbnRfZnMsICh1bnNpZ25lZClncm91cCkpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiSW5vZGUgdGFibGUgZm9yIGdyb3VwICVsdSBpcyBtaXNzaW5nXG4iLAorCQkJZ3JvdXApOworCQlyZXR1cm47CisJfQorCWJsb2NrX25yID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhjdXJyZW50X2ZzLCAodW5zaWduZWQpZ3JvdXApICsKKwkJYmxvY2s7CisJb2Zmc2V0ICY9IChFWFQyX0JMT0NLX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpIC0gMSk7CisKKwlwcmludGYoIklub2RlICVkIGlzIHBhcnQgb2YgYmxvY2sgZ3JvdXAgJWx1XG4iCisJICAgICAgICJcdGxvY2F0ZWQgYXQgYmxvY2sgJWx1LCBvZmZzZXQgMHglMDRseFxuIiwgaW5vLCBncm91cCwKKwkgICAgICAgYmxvY2tfbnIsIG9mZnNldCk7CisKK30KKworI2lmbmRlZiBSRUFEX09OTFkKK3ZvaWQgZG9fc2V0X2N1cnJlbnRfdGltZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXRpbWVfdCBub3c7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCBhcmd2WzBdLAorCQkJCSI8dGltZT4iLCAwKSkKKwkJcmV0dXJuOworCisJbm93ID0gc3RyaW5nX3RvX3RpbWUoYXJndlsxXSk7CisJaWYgKG5vdyA9PSAoKHRpbWVfdCkgLTEpKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkNvdWxkbid0IHBhcnNlIGFyZ3VtZW50IGFzIGEgdGltZTogJXNcbiIsCisJCQlhcmd2WzFdKTsKKwkJcmV0dXJuOworCisJfSBlbHNlIHsKKwkJcHJpbnRmKCJTZXR0aW5nIGN1cnJlbnQgdGltZSB0byAlc1xuIiwgdGltZV90b19zdHJpbmcobm93KSk7CisJCWN1cnJlbnRfZnMtPm5vdyA9IG5vdzsKKwl9Cit9CisjZW5kaWYgLyogUkVBRF9PTkxZICovCisKK3N0YXRpYyBpbnQgZmluZF9zdXBwX2ZlYXR1cmUoX191MzIgKnN1cHAsIGludCBmZWF0dXJlX3R5cGUsIGNoYXIgKm5hbWUpCit7CisJaW50IGNvbXBhdCwgYml0LCByZXQ7CisJdW5zaWduZWQgaW50IGZlYXR1cmVfbWFzazsKKworCWlmIChuYW1lKSB7CisJCWlmIChmZWF0dXJlX3R5cGUgPT0gRTJQX0ZTX0ZFQVRVUkUpCisJCQlyZXQgPSBlMnBfc3RyaW5nMmZlYXR1cmUobmFtZSwgJmNvbXBhdCwgJmZlYXR1cmVfbWFzayk7CisJCWVsc2UKKwkJCXJldCA9IGUycF9qcm5sX3N0cmluZzJmZWF0dXJlKG5hbWUsICZjb21wYXQsCisJCQkJCQkgICAgICAmZmVhdHVyZV9tYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCEoc3VwcFtjb21wYXRdICYgZmVhdHVyZV9tYXNrKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJICAgICAgICBmb3IgKGNvbXBhdCA9IDA7IGNvbXBhdCA8IDM7IGNvbXBhdCsrKSB7CisJCSAgICAgICAgZm9yIChiaXQgPSAwLCBmZWF0dXJlX21hc2sgPSAxOyBiaXQgPCAzMjsKKwkJCSAgICAgYml0KyssIGZlYXR1cmVfbWFzayA8PD0gMSkgeworCQkJICAgICAgICBpZiAoc3VwcFtjb21wYXRdICYgZmVhdHVyZV9tYXNrKSB7CisJCQkJCWlmIChmZWF0dXJlX3R5cGUgPT0gRTJQX0ZTX0ZFQVRVUkUpCisJCQkJCQlmcHJpbnRmKHN0ZG91dCwgIiAlcyIsCisJCQkJCQllMnBfZmVhdHVyZTJzdHJpbmcoY29tcGF0LAorCQkJCQkJZmVhdHVyZV9tYXNrKSk7CisJCQkJCWVsc2UKKwkJCQkJCWZwcmludGYoc3Rkb3V0LCAiICVzIiwKKwkJCQkJCWUycF9qcm5sX2ZlYXR1cmUyc3RyaW5nKGNvbXBhdCwKKwkJCQkJCWZlYXR1cmVfbWFzaykpOworCQkJCX0KKwkgICAgICAgIAl9CisJCX0KKwkgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkb19zdXBwb3J0ZWRfZmVhdHVyZXMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICAgICAgaW50CXJldDsKKwlfX3UzMglzdXBwWzNdID0geyBFWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQLAorCQkJICAgIEVYVDJfTElCX0ZFQVRVUkVfSU5DT01QQVRfU1VQUCwKKwkJCSAgICBFWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQIH07CisJX191MzIJanJubF9zdXBwWzNdID0geyBKRlNfS05PV05fQ09NUEFUX0ZFQVRVUkVTLAorCQkJCSBKRlNfS05PV05fSU5DT01QQVRfRkVBVFVSRVMsCisJCQkJIEpGU19LTk9XTl9ST0NPTVBBVF9GRUFUVVJFUyB9OworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXJldCA9IGZpbmRfc3VwcF9mZWF0dXJlKHN1cHAsIEUyUF9GU19GRUFUVVJFLCBhcmd2WzFdKTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gZmluZF9zdXBwX2ZlYXR1cmUoanJubF9zdXBwLCBFMlBfSk9VUk5BTF9GRUFUVVJFLAorCQkJCQkJYXJndlsxXSk7CisJCX0KKwkJaWYgKHJldCkKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVua25vd24gZmVhdHVyZTogJXNcbiIsIGFyZ3ZbMV0pOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZG91dCwgIlN1cHBvcnRlZCBmZWF0dXJlOiAlc1xuIiwgYXJndlsxXSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRvdXQsICJTdXBwb3J0ZWQgZmVhdHVyZXM6Iik7CisJCXJldCA9IGZpbmRfc3VwcF9mZWF0dXJlKHN1cHAsIEUyUF9GU19GRUFUVVJFLCBOVUxMKTsKKwkJcmV0ID0gZmluZF9zdXBwX2ZlYXR1cmUoanJubF9zdXBwLCBFMlBfSk9VUk5BTF9GRUFUVVJFLCBOVUxMKTsKKwl9Cit9CisKKyNpZm5kZWYgUkVBRF9PTkxZCit2b2lkIGRvX3B1bmNoKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm87CisJYmxrNjRfdAkJc3RhcnQsIGVuZDsKKwlpbnQJCWVycjsKKwllcnJjb2RlX3QJZXJyY29kZTsKKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDQsIGFyZ3ZbMF0sCisJCQkJIjxmaWxlPiBzdGFydF9ibGsgW2VuZF9ibGtdIiwKKwkJCQlDSEVDS19GU19SVyB8IENIRUNLX0ZTX0JJVE1BUFMpKQorCQlyZXR1cm47CisKKwlpbm8gPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCFpbm8pCisJCXJldHVybjsKKwllcnIgPSBzdHJ0b2Jsayhhcmd2WzBdLCBhcmd2WzJdLCAmc3RhcnQpOworCWlmIChlcnIpCisJCXJldHVybjsKKwlpZiAoYXJnYyA9PSA0KSB7CisJCWVyciA9IHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbM10sICZlbmQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuOworCX0gZWxzZQorCQllbmQgPSB+MDsKKworCWVycmNvZGUgPSBleHQyZnNfcHVuY2goY3VycmVudF9mcywgaW5vLCAwLCAwLCBzdGFydCwgZW5kKTsKKworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwKKwkJCSJ3aGlsZSB0cnVuY2F0aW5nIGlub2RlICV1IGZyb20gJWxsdSB0byAlbGx1XG4iLCBpbm8sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZW5kKTsKKwkJcmV0dXJuOworCX0KK30KKyNlbmRpZiAvKiBSRUFEX09OTFkgKi8KKwordm9pZCBkb19zeW1saW5rKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY2hhcgkJKmNwOworCWV4dDJfaW5vX3QJcGFyZW50OworCWNoYXIJCSpuYW1lLCAqdGFyZ2V0OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAic3ltbGluayIsCisJCQkJIjxmaWxlbmFtZT4gPHRhcmdldD4iLCBDSEVDS19GU19SVykpCisJCXJldHVybjsKKworCWNwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworCWlmIChjcCkgeworCQkqY3AgPSAwOworCQlwYXJlbnQgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJCWlmICghcGFyZW50KSB7CisJCQljb21fZXJyKGFyZ3ZbMV0sIEVOT0VOVCwgMCk7CisJCQlyZXR1cm47CisJCX0KKwkJbmFtZSA9IGNwKzE7CisJfSBlbHNlIHsKKwkJcGFyZW50ID0gY3dkOworCQluYW1lID0gYXJndlsxXTsKKwl9CisJdGFyZ2V0ID0gYXJndlsyXTsKKwordHJ5X2FnYWluOgorCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSwgdGFyZ2V0KTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworCQkJcmV0dXJuOworCQl9CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19zeW1saW5rIiwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKworfQorCit2b2lkIGRvX2R1bXBfbW1wKGludCBhcmdjIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYjsKKwlzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wX3M7CisJdGltZV90IHQ7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJc2IgID0gY3VycmVudF9mcy0+c3VwZXI7CisKKwlpZiAoY3VycmVudF9mcy0+bW1wX2J1ZiA9PSBOVUxMKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJJmN1cnJlbnRfZnMtPm1tcF9idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgImFsbG9jYXRpbmcgTU1QIGJ1ZmZlci5cbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbW1wX3MgPSBjdXJyZW50X2ZzLT5tbXBfYnVmOworCisJcmV0dmFsID0gZXh0MmZzX21tcF9yZWFkKGN1cnJlbnRfZnMsIGN1cnJlbnRfZnMtPnN1cGVyLT5zX21tcF9ibG9jaywKKwkJCQkgY3VycmVudF9mcy0+bW1wX2J1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgInJlYWRpbmcgTU1QIGJsb2NrLlxuIik7CisJCXJldHVybjsKKwl9CisKKwl0ID0gbW1wX3MtPm1tcF90aW1lOworCWZwcmludGYoc3Rkb3V0LCAiYmxvY2tfbnVtYmVyOiAlbGx1XG4iLCBjdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2spOworCWZwcmludGYoc3Rkb3V0LCAidXBkYXRlX2ludGVydmFsOiAlZFxuIiwKKwkJY3VycmVudF9mcy0+c3VwZXItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCk7CisJZnByaW50ZihzdGRvdXQsICJjaGVja19pbnRlcnZhbDogJWRcbiIsIG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWwpOworCWZwcmludGYoc3Rkb3V0LCAic2VxdWVuY2U6ICUwOHhcbiIsIG1tcF9zLT5tbXBfc2VxKTsKKwlmcHJpbnRmKHN0ZG91dCwgInRpbWU6ICVsbGQgLS0gJXMiLCBtbXBfcy0+bW1wX3RpbWUsIGN0aW1lKCZ0KSk7CisJZnByaW50ZihzdGRvdXQsICJub2RlX25hbWU6ICVzXG4iLCBtbXBfcy0+bW1wX25vZGVuYW1lKTsKKwlmcHJpbnRmKHN0ZG91dCwgImRldmljZV9uYW1lOiAlc1xuIiwgbW1wX3MtPm1tcF9iZGV2bmFtZSk7CisJZnByaW50ZihzdGRvdXQsICJtYWdpYzogMHgleFxuIiwgbW1wX3MtPm1tcF9tYWdpYyk7Cit9CisKK3N0YXRpYyBpbnQgc291cmNlX2ZpbGUoY29uc3QgY2hhciAqY21kX2ZpbGUsIGludCBzc19pZHgpCit7CisJRklMRQkJKmY7CisJY2hhcgkJYnVmW0JVRlNJWl07CisJY2hhcgkJKmNwOworCWludAkJZXhpdF9zdGF0dXMgPSAwOworCWludAkJcmV0dmFsOworCisJaWYgKHN0cmNtcChjbWRfZmlsZSwgIi0iKSA9PSAwKQorCQlmID0gc3RkaW47CisJZWxzZSB7CisJCWYgPSBmb3BlbihjbWRfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQlwZXJyb3IoY21kX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJcHJpbnRmKCJkZWJ1Z2ZzOiAlc1xuIiwgYnVmKTsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNzX2lkeCwgYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJc3NfcGVycm9yKHNzX2lkeCwgcmV0dmFsLCBidWYpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0KKwlpZiAoZiAhPSBzdGRpbikKKwkJZmNsb3NlKGYpOworCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAkJcmV0dmFsOworCWNvbnN0IGNoYXIJKnVzYWdlID0gCisJCSJVc2FnZTogJXMgWy1iIGJsb2Nrc2l6ZV0gWy1zIHN1cGVyYmxvY2tdIFstZiBjbWRfZmlsZV0gIgorCQkiWy1SIHJlcXVlc3RdIFstVl0gWyIKKyNpZm5kZWYgUkVBRF9PTkxZCisJCSJbLXddICIKKyNlbmRpZgorCQkiWy1jXSBkZXZpY2VdIjsKKwlpbnQJCWM7CisJaW50CQlvcGVuX2ZsYWdzID0gRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTIHwgRVhUMl9GTEFHXzY0QklUUzsKKwljaGFyCQkqcmVxdWVzdCA9IDA7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJY2hhcgkJKmNtZF9maWxlID0gMDsKKwlibGs2NF90CQlzdXBlcmJsb2NrID0gMDsKKwlibGs2NF90CQlibG9ja3NpemUgPSAwOworCWludAkJY2F0YXN0cm9waGljID0gMDsKKwljaGFyCQkqZGF0YV9maWxlbmFtZSA9IDA7CisjaWZkZWYgUkVBRF9PTkxZCisJY29uc3QgY2hhcgkqb3B0X3N0cmluZyA9ICJpY1I6ZjpiOnM6VmQ6RCI7CisjZWxzZQorCWNvbnN0IGNoYXIJKm9wdF9zdHJpbmcgPSAiaXdjUjpmOmI6czpWZDpEIjsKKyNlbmRpZgorCisJaWYgKGRlYnVnX3Byb2dfbmFtZSA9PSAwKQorI2lmZGVmIFJFQURfT05MWQorCQlkZWJ1Z19wcm9nX25hbWUgPSAicmRlYnVnZnMiOworI2Vsc2UKKwkJZGVidWdfcHJvZ19uYW1lID0gImRlYnVnZnMiOworI2VuZGlmCisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlmcHJpbnRmIChzdGRlcnIsICIlcyAlcyAoJXMpXG4iLCBkZWJ1Z19wcm9nX25hbWUsCisJCSBFMkZTUFJPR1NfVkVSU0lPTiwgRTJGU1BST0dTX0RBVEUpOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCBvcHRfc3RyaW5nKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdSJzoKKwkJCXJlcXVlc3QgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQljbWRfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWRhdGFfZmlsZW5hbWUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19JTUFHRV9GSUxFOworCQkJYnJlYWs7CisjaWZuZGVmIFJFQURfT05MWQorCQljYXNlICd3JzoKKwkJCW9wZW5fZmxhZ3MgfD0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSAnRCc6CisJCQlvcGVuX2ZsYWdzIHw9IEVYVDJfRkxBR19ESVJFQ1RfSU87CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQlibG9ja3NpemUgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCQkiYmxvY2sgc2l6ZSIsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJcmV0dmFsID0gc3RydG9ibGsoYXJndlswXSwgb3B0YXJnLCAmc3VwZXJibG9jayk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJY2F0YXN0cm9waGljID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBleGl0ICovCisJCQlmcHJpbnRmKHN0ZGVyciwgIlx0VXNpbmcgJXNcbiIsCisJCQkJZXJyb3JfbWVzc2FnZShFWFQyX0VUX0JBU0UpKTsKKwkJCWV4aXQoMCk7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsIHVzYWdlLCBkZWJ1Z19wcm9nX25hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJaWYgKG9wdGluZCA8IGFyZ2MpCisJCW9wZW5fZmlsZXN5c3RlbShhcmd2W29wdGluZF0sIG9wZW5fZmxhZ3MsCisJCQkJc3VwZXJibG9jaywgYmxvY2tzaXplLCBjYXRhc3Ryb3BoaWMsCisJCQkJZGF0YV9maWxlbmFtZSk7CisKKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oZGVidWdfcHJvZ19uYW1lLCAiMC4wIiwgKGNoYXIgKikgTlVMTCwKKwkJCQkgICAgICAgJmRlYnVnX2NtZHMsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisJc3NfZ2V0X3JlYWRsaW5lKHNjaV9pZHgpOworCisJKHZvaWQpIHNzX2FkZF9yZXF1ZXN0X3RhYmxlIChzY2lfaWR4LCAmc3Nfc3RkX3JlcXVlc3RzLCAxLCAmcmV0dmFsKTsKKwlpZiAocmV0dmFsKSB7CisJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsICJhZGRpbmcgc3RhbmRhcmQgcmVxdWVzdHMiKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmIChleHRyYV9jbWRzKQorCQlzc19hZGRfcmVxdWVzdF90YWJsZSAoc2NpX2lkeCwgZXh0cmFfY21kcywgMSwgJnJldHZhbCk7CisJaWYgKHJldHZhbCkgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCAiYWRkaW5nIGV4dHJhIHJlcXVlc3RzIik7CisJCWV4aXQgKDEpOworCX0KKwlpZiAocmVxdWVzdCkgeworCQlyZXR2YWwgPSAwOworCQlyZXR2YWwgPSBzc19leGVjdXRlX2xpbmUoc2NpX2lkeCwgcmVxdWVzdCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsIHJlcXVlc3QpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0gZWxzZSBpZiAoY21kX2ZpbGUpIHsKKwkJZXhpdF9zdGF0dXMgPSBzb3VyY2VfZmlsZShjbWRfZmlsZSwgc2NpX2lkeCk7CisJfSBlbHNlIHsKKwkJc3NfbGlzdGVuKHNjaV9pZHgpOworCX0KKworCXNzX2RlbGV0ZV9pbnZvY2F0aW9uKHNjaV9pZHgpOworCisJaWYgKGN1cnJlbnRfZnMpCisJCWNsb3NlX2ZpbGVzeXN0ZW0oKTsKKworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJcmV0dXJuIGV4aXRfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvZGVidWdmcy5oIGIvZTJmc3Byb2dzL2RlYnVnZnMvZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGY2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVidWdmcy9kZWJ1Z2ZzLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBkZWJ1Z2ZzLmggLS0tIGhlYWRlciBmaWxlIGZvciB0aGUgZGVidWdmcyBwcm9ncmFtCisgKi8KKworI2luY2x1ZGUgInNzL3NzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBOT0FSR1Mgdm9pZAorI2Vsc2UKKyNkZWZpbmUgTk9BUkdTCisjZGVmaW5lIGNvbnN0CisjZW5kaWYKKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgdGhlIGNvbW1vbiBhcmd1bWVudCBwcm9jZXNzaW5nIGZ1bmN0aW9ucworICovCisjZGVmaW5lIENIRUNLX0ZTX1JXCQkweDAwMDEKKyNkZWZpbmUgQ0hFQ0tfRlNfQklUTUFQUwkweDAwMDIKKyNkZWZpbmUgQ0hFQ0tfRlNfTk9UT1BFTgkweDAwMDQKKworZXh0ZXJuIGV4dDJfZmlsc3lzIGN1cnJlbnRfZnM7CitleHRlcm4gZXh0Ml9pbm9fdAlyb290LCBjd2Q7CitleHRlcm4gaW50IHNjaV9pZHg7CitleHRlcm4gc3NfcmVxdWVzdF90YWJsZSBkZWJ1Z19jbWRzLCBleHRlbnRfY21kczsKKworZXh0ZXJuIHZvaWQgcmVzZXRfZ2V0b3B0KHZvaWQpOworZXh0ZXJuIEZJTEUgKm9wZW5fcGFnZXIodm9pZCk7CitleHRlcm4gdm9pZCBjbG9zZV9wYWdlcihGSUxFICpzdHJlYW0pOworZXh0ZXJuIGludCBjaGVja19mc19vcGVuKGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBjaGVja19mc19ub3Rfb3BlbihjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgY2hlY2tfZnNfcmVhZF93cml0ZShjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgY2hlY2tfZnNfYml0bWFwcyhjaGFyICpuYW1lKTsKK2V4dGVybiBleHQyX2lub190IHN0cmluZ190b19pbm9kZShjaGFyICpzdHIpOworZXh0ZXJuIGNoYXIgKnRpbWVfdG9fc3RyaW5nKF9fdTMyKTsKK2V4dGVybiB0aW1lX3Qgc3RyaW5nX3RvX3RpbWUoY29uc3QgY2hhciAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqY21kLAorCQkJCSBjb25zdCBjaGFyICpkZXNjciwgaW50ICplcnIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJzZV91bG9uZ2xvbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpjbWQsCisJCQkJCSAgY29uc3QgY2hhciAqZGVzY3IsIGludCAqZXJyKTsKK2V4dGVybiBpbnQgc3RydG9ibGsoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzdHIsIGJsazY0X3QgKnJldCk7CitleHRlcm4gaW50IGNvbW1vbl9hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IG1pbl9hcmdjLAorCQkJICAgICAgIGludCBtYXhfYXJnYywgY29uc3QgY2hhciAqY21kLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGludCBhcmdjLCBjaGFyICphcmd2W10sCisJCQkJICAgICBleHQyX2lub190ICppbm9kZSwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgY29tbW9uX2Jsb2NrX2FyZ3NfcHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdLAorCQkJCSAgICAgYmxrNjRfdCAqYmxvY2ssIGJsazY0X3QgKmNvdW50KTsKK2V4dGVybiBpbnQgZGVidWdmc19yZWFkX2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJICAgICAgY29uc3QgY2hhciAqY21kKTsKK2V4dGVybiBpbnQgZGVidWdmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQkJICAgY29uc3QgY2hhciAqY21kLCBpbnQgYnVmc2l6ZSk7CitleHRlcm4gaW50IGRlYnVnZnNfd3JpdGVfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQkgICAgICAgY29uc3QgY2hhciAqY21kKTsKK2V4dGVybiBpbnQgZGVidWdmc193cml0ZV9pbm9kZV9mdWxsKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJCSAgICBjb25zdCBjaGFyICpjbWQsIGludCBidWZzaXplKTsKK2V4dGVybiBpbnQgZGVidWdmc193cml0ZV9uZXdfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQkJICAgY29uc3QgY2hhciAqY21kKTsKK2V4dGVybiBpbnQgZXh0Ml9maWxlX3R5cGUodW5zaWduZWQgaW50IG1vZGUpOworCisvKiBzcyBjb21tYW5kIGZ1bmN0aW9ucyAqLworCisvKiBkdW1wLmMgKi8KK2V4dGVybiB2b2lkIGRvX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2NhdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcmR1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogZXh0ZW50X2lub2RlLmMgKi8KK2V4dGVybiB2b2lkIGRvX2V4dGVudF9vcGVuKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19leHRlbnRfY2xvc2UoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2N1cnJlbnRfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcm9vdF9ub2RlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19sYXN0X2xlYWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ZpcnN0X3NpYihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbGFzdF9zaWIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX25leHRfc2liKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19wcmV2X3NpYihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbmV4dF9sZWFmKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19wcmV2X2xlYWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX25leHQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3ByZXYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3VwKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19kb3duKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19kZWxldGVfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcmVwbGFjZV9ub2RlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19zcGxpdF9ub2RlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19pbnNlcnRfbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2V0X2JtYXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3ByaW50X2FsbChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZml4X3BhcmVudHMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2dvdG9fYmxvY2soaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogaHRyZWUuYyAqLworZXh0ZXJuIHZvaWQgZG9faHRyZWVfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZHhfaGFzaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZGlyc2VhcmNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIGxvZ2R1bXAuYyAqLworZXh0ZXJuIHZvaWQgZG9fbG9nZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBsc2RlbC5jICovCitleHRlcm4gdm9pZCBkb19sc2RlbChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBpY2hlY2suYyAqLworZXh0ZXJuIHZvaWQgZG9faWNoZWNrKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIG5jaGVjay5jICovCitleHRlcm4gdm9pZCBkb19uY2hlY2soaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworLyogc2V0X2ZpZWxkcy5jICovCitleHRlcm4gdm9pZCBkb19zZXRfc3VwZXIoaW50IGFyZ2MsIGNoYXIgKiopOworZXh0ZXJuIHZvaWQgZG9fc2V0X2lub2RlKGludCBhcmdjLCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGRvX3NldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yKGludCBhcmdjLCBjaGFyICoqKTsKKworLyogdW51c2VkLmMgKi8KK2V4dGVybiB2b2lkIGRvX2R1bXBfdW51c2VkKGludCBhcmdjLCBjaGFyICoqYXJndik7CisKKy8qIGRlYnVnZnMuYyAqLworZXh0ZXJuIHZvaWQgaW50ZXJuYWxfZHVtcF9pbm9kZShGSUxFICosIGNvbnN0IGNoYXIgKiwgZXh0Ml9pbm9fdCwKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqLCBpbnQpOworCitleHRlcm4gdm9pZCBkb19kaXJ0eV9maWxlc3lzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19vcGVuX2ZpbGVzeXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2Nsb3NlX2ZpbGVzeXMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2xjZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9faW5pdF9maWxlc3lzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19zaG93X3N1cGVyX3N0YXRzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19raWxsX2ZpbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3JtKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19saW5rKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb191bmRlbChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fdW5saW5rKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19maW5kX2ZyZWVfYmxvY2soaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2ZpbmRfZnJlZV9pbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc3RhdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZHVtcF9leHRlbnRzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19ibG9ja3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKK2V4dGVybiB2b2lkIGRvX2Nocm9vdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fY2xyaShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZnJlZWkoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3NldGkoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3Rlc3RpKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19mcmVlYihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2V0YihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fdGVzdGIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX21vZGlmeV9pbm9kZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbGlzdF9kaXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX2NoYW5nZV93b3JraW5nX2RpcihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fcHJpbnRfd29ya2luZ19kaXJlY3RvcnkoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3dyaXRlKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19ta25vZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fbWtkaXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2V4dGVybiB2b2lkIGRvX3JtZGlyKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19zaG93X2RlYnVnZnNfcGFyYW1zKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19leHBhbmRfZGlyKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19mZWF0dXJlcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fYm1hcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9faW1hcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2V0X2N1cnJlbnRfdGltZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc3VwcG9ydGVkX2ZlYXR1cmVzKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19wdW5jaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc3ltbGluayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCitleHRlcm4gdm9pZCBkb19kdW1wX21tcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fc2V0X21tcF92YWx1ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCitleHRlcm4gdm9pZCBkb19mcmVlZnJhZyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworZXh0ZXJuIHZvaWQgZG9fZmlsZWZyYWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKy8qIHV0aWwuYyAqLworZXh0ZXJuIHRpbWVfdCBzdHJpbmdfdG9fdGltZShjb25zdCBjaGFyICphcmcpOworCisvKiB6YXAuYyAqLworZXh0ZXJuIHZvaWQgZG9femFwX2Jsb2NrKGludCBhcmdjLCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCBkb19ibG9ja19kdW1wKGludCBhcmdjLCBjaGFyICoqYXJndik7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy9kdW1wLmMgYi9lMmZzcHJvZ3MvZGVidWdmcy9kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwZmYzYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2R1bXAuYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIGR1bXAuYyAtLS0gZHVtcCB0aGUgY29udGVudHMgb2YgYW4gaW5vZGUgb3V0IHRvIGEgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFIC8qIGZvciBPX0xBUkdFRklMRSAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKKyNpZm5kZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT19MQVJHRUZJTEUgMAorI2VuZGlmCisKKy8qCisgKiBUaGUgbW9kZV94bGF0ZSBmdW5jdGlvbiB0cmFuc2xhdGVzIGEgbGludXggbW9kZSBpbnRvIGEgbmF0aXZlLU9TIG1vZGVfdC4KKyAqLworc3RhdGljIHN0cnVjdCB7CisJX191MTYgbG1hc2s7CisJbW9kZV90IG1hc2s7Cit9IG1vZGVfdGFibGVbXSA9IHsKKwl7IExJTlVYX1NfSVJVU1IsIFNfSVJVU1IgfSwKKwl7IExJTlVYX1NfSVdVU1IsIFNfSVdVU1IgfSwKKwl7IExJTlVYX1NfSVhVU1IsIFNfSVhVU1IgfSwKKwl7IExJTlVYX1NfSVJHUlAsIFNfSVJHUlAgfSwKKwl7IExJTlVYX1NfSVdHUlAsIFNfSVdHUlAgfSwKKwl7IExJTlVYX1NfSVhHUlAsIFNfSVhHUlAgfSwKKwl7IExJTlVYX1NfSVJPVEgsIFNfSVJPVEggfSwKKwl7IExJTlVYX1NfSVdPVEgsIFNfSVdPVEggfSwKKwl7IExJTlVYX1NfSVhPVEgsIFNfSVhPVEggfSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIG1vZGVfdCBtb2RlX3hsYXRlKF9fdTE2IGxtb2RlKQoreworCW1vZGVfdAltb2RlID0gMDsKKwlpbnQJaTsKKworCWZvciAoaT0wOyBtb2RlX3RhYmxlW2ldLmxtYXNrOyBpKyspIHsKKwkJaWYgKGxtb2RlICYgbW9kZV90YWJsZVtpXS5sbWFzaykKKwkJCW1vZGUgfD0gbW9kZV90YWJsZVtpXS5tYXNrOworCX0KKwlyZXR1cm4gbW9kZTsKK30KKworc3RhdGljIHZvaWQgZml4X3Blcm1zKGNvbnN0IGNoYXIgKmNtZCwgY29uc3Qgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkgICAgICBpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHV0aW1idWYgdXQ7CisJaW50IGk7CisKKwlpZiAoZmQgIT0gLTEpCisJCWkgPSBmY2htb2QoZmQsIG1vZGVfeGxhdGUoaW5vZGUtPmlfbW9kZSkpOworCWVsc2UKKwkJaSA9IGNobW9kKG5hbWUsIG1vZGVfeGxhdGUoaW5vZGUtPmlfbW9kZSkpOworCWlmIChpID09IC0xKQorCQljb21fZXJyKGNtZCwgZXJybm8sICJ3aGlsZSBzZXR0aW5nIHBlcm1pc3Npb25zIG9mICVzIiwgbmFtZSk7CisKKyNpZm5kZWYgSEFWRV9GQ0hPV04KKwlpID0gY2hvd24obmFtZSwgaW5vZGUtPmlfdWlkLCBpbm9kZS0+aV9naWQpOworI2Vsc2UKKwlpZiAoZmQgIT0gLTEpCisJCWkgPSBmY2hvd24oZmQsIGlub2RlLT5pX3VpZCwgaW5vZGUtPmlfZ2lkKTsKKwllbHNlCisJCWkgPSBjaG93bihuYW1lLCBpbm9kZS0+aV91aWQsIGlub2RlLT5pX2dpZCk7CisjZW5kaWYKKwlpZiAoaSA9PSAtMSkKKwkJY29tX2VycihjbWQsIGVycm5vLCAid2hpbGUgY2hhbmdpbmcgb3duZXJzaGlwIG9mICVzIiwgbmFtZSk7CisKKwlpZiAoZmQgIT0gLTEpCisJCWNsb3NlKGZkKTsKKworCXV0LmFjdGltZSA9IGlub2RlLT5pX2F0aW1lOworCXV0Lm1vZHRpbWUgPSBpbm9kZS0+aV9tdGltZTsKKwlpZiAodXRpbWUobmFtZSwgJnV0KSA9PSAtMSkKKwkJY29tX2VycihjbWQsIGVycm5vLCAid2hpbGUgc2V0dGluZyB0aW1lcyBvZiAlcyIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2ZpbGUoY29uc3QgY2hhciAqY21kbmFtZSwgZXh0Ml9pbm9fdCBpbm8sIGludCBmZCwKKwkJICAgICAgaW50IHByZXNlcnZlLCBjaGFyICpvdXRuYW1lKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJY2hhcgkJKmJ1ZiA9IDA7CisJZXh0Ml9maWxlX3QJZTJfZmlsZTsKKwlpbnQJCW5ieXRlczsKKwl1bnNpZ25lZCBpbnQJZ290LCBibG9ja3NpemUgPSBjdXJyZW50X2ZzLT5ibG9ja3NpemU7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBjbWRuYW1lKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBpbm8sIDAsICZlMl9maWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kbmFtZSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBleHQyIGZpbGUiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSBhbGxvY2F0aW5nIG1lbW9yeSIpOworCQlyZXR1cm47CisJfQorCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoZTJfZmlsZSwgYnVmLCBibG9ja3NpemUsICZnb3QpOworCQlpZiAocmV0dmFsKQorCQkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGV4dDIgZmlsZSIpOworCQlpZiAoZ290ID09IDApCisJCQlicmVhazsKKwkJbmJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiwgZ290KTsKKwkJaWYgKCh1bnNpZ25lZCkgbmJ5dGVzICE9IGdvdCkKKwkJCWNvbV9lcnIoY21kbmFtZSwgZXJybm8sICJ3aGlsZSB3cml0aW5nIGZpbGUiKTsKKwl9CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWRuYW1lLCByZXR2YWwsICJ3aGlsZSBjbG9zaW5nIGV4dDIgZmlsZSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByZXNlcnZlKQorCQlmaXhfcGVybXMoImR1bXBfZmlsZSIsICZpbm9kZSwgZmQsIG91dG5hbWUpOworCisJcmV0dXJuOworfQorCit2b2lkIGRvX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJaW50CQlmZDsKKwlpbnQJCWM7CisJaW50CQlwcmVzZXJ2ZSA9IDA7CisJY2hhcgkJKmluX2ZuLCAqb3V0X2ZuOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAicCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ3AnOgorCQkJcHJlc2VydmUrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQlwcmludF91c2FnZToKKwkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBkdW1wX2lub2RlIFstcF0gIgorCQkJCSI8ZmlsZT4gPG91dHB1dF9maWxlPiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmIChvcHRpbmQgIT0gYXJnYy0yKQorCQlnb3RvIHByaW50X3VzYWdlOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWluX2ZuID0gYXJndltvcHRpbmRdOworCW91dF9mbiA9IGFyZ3Zbb3B0aW5kKzFdOworCisJaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoaW5fZm4pOworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCWZkID0gb3BlbihvdXRfZm4sIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0xBUkdFRklMRSwgMDY2Nik7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZHVtcF9pbm9kZSIsCisJCQlvdXRfZm4pOworCQlyZXR1cm47CisJfQorCisJZHVtcF9maWxlKGFyZ3ZbMF0sIGlub2RlLCBmZCwgcHJlc2VydmUsIG91dF9mbik7CisJaWYgKGNsb3NlKGZkKSAhPSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSBjbG9zaW5nICVzIGZvciBkdW1wX2lub2RlIiwKKwkJCW91dF9mbik7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJkdW1wX3N5bWxpbmsoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgY29uc3QgY2hhciAqZnVsbG5hbWUpCit7CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKKwljaGFyICpidWY7CisJZXJyY29kZV90IHJldHZhbDsKKworCWJ1ZiA9IG1hbGxvYyhpbm9kZS0+aV9zaXplICsgMSk7CisJaWYgKCFidWYpIHsKKwkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGFsbG9jYXRpbmcgZm9yIHN5bWxpbmsiKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyogQXBwYXJlbnRseSwgdGhpcyBpcyB0aGUgcmlnaHQgd2F5IHRvIGRldGVjdCBhbmQgaGFuZGxlIGZhc3QKKwkgKiBzeW1saW5rczsgc2VlIGRvX3N0YXQoKSBpbiBkZWJ1Z2ZzLmMuICovCisJaWYgKGlub2RlLT5pX2Jsb2NrcyA9PSAwKQorCQlzdHJjcHkoYnVmLCAoY2hhciAqKSBpbm9kZS0+aV9ibG9jayk7CisJZWxzZSB7CisJCXVuc2lnbmVkIGJ5dGVzID0gaW5vZGUtPmlfc2l6ZTsKKwkJY2hhciAqcCA9IGJ1ZjsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBpbm8sIDAsICZlMl9maWxlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigicmR1bXAiLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIHN5bWxpbmsiKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWZvciAoOzspIHsKKwkJCXVuc2lnbmVkIGludCBnb3Q7CisJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKGUyX2ZpbGUsIHAsIGJ5dGVzLCAmZ290KTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKCJyZHVtcCIsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgc3ltbGluayIpOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJYnl0ZXMgLT0gZ290OworCQkJcCArPSBnb3Q7CisJCQlpZiAoZ290ID09IDAgfHwgYnl0ZXMgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlidWZbaW5vZGUtPmlfc2l6ZV0gPSAwOworCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoInJkdW1wIiwgcmV0dmFsLCAid2hpbGUgY2xvc2luZyBzeW1saW5rIik7CisJfQorCisJaWYgKHN5bWxpbmsoYnVmLCBmdWxsbmFtZSkgPT0gLTEpIHsKKwkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGNyZWF0aW5nIHN5bWxpbmsgJXMgLT4gJXMiLCBidWYsIGZ1bGxuYW1lKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCitlcnJvdXQ6CisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IHJkdW1wX2RpcmVudChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKiwgaW50LCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKKworc3RhdGljIHZvaWQgcmR1bXBfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmR1bXByb290KQoreworCWNoYXIgKmZ1bGxuYW1lOworCisJLyogVGhlcmUgYXJlIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRoaXMgbWV0aG9kCisJICogcmVxdWlyZXMgb25seSBtaW5pbWFsIGRlYnVnZ2luZy4gKi8KKwlmdWxsbmFtZSA9IG1hbGxvYyhzdHJsZW4oZHVtcHJvb3QpICsgc3RybGVuKG5hbWUpICsgMik7CisJaWYgKCFmdWxsbmFtZSkgeworCQljb21fZXJyKCJyZHVtcCIsIGVycm5vLCAid2hpbGUgYWxsb2NhdGluZyBtZW1vcnkiKTsKKwkJcmV0dXJuOworCX0KKwlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBkdW1wcm9vdCwgbmFtZSk7CisKKwlpZiAoTElOVVhfU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmR1bXBfc3ltbGluayhpbm8sIGlub2RlLCBmdWxsbmFtZSk7CisJZWxzZSBpZiAoTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbnQgZmQ7CisJCWZkID0gb3BlbihmdWxsbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fTEFSR0VGSUxFLCBTX0lSV1hVKTsKKwkJaWYgKGZkID09IC0xKSB7CisJCQljb21fZXJyKCJyZHVtcCIsIGVycm5vLCAid2hpbGUgZHVtcGluZyAlcyIsIGZ1bGxuYW1lKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWR1bXBfZmlsZSgicmR1bXAiLCBpbm8sIGZkLCAxLCBmdWxsbmFtZSk7CisJCWlmIChjbG9zZShmZCkgIT0gMCkgeworCQkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIGR1bXBpbmcgJXMiLCBmdWxsbmFtZSk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKwllbHNlIGlmIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpICYmIHN0cmNtcChuYW1lLCAiLiIpICYmIHN0cmNtcChuYW1lLCAiLi4iKSkgeworCQllcnJjb2RlX3QgcmV0dmFsOworCisJCS8qIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHdpdGggMDcwMCBwZXJtaXNzaW9ucywgYmVjYXVzZSB3ZQorCQkgKiBleHBlY3QgdG8gaGF2ZSB0byBjcmVhdGUgZW50cmllcyBpdC4gIFRoZW4gZml4IGl0cyBwZXJtcworCQkgKiBvbmNlIHdlJ3ZlIGRvbmUgdGhlIHRyYXZlcnNhbC4gKi8KKwkJaWYgKG1rZGlyKGZ1bGxuYW1lLCBTX0lSV1hVKSA9PSAtMSkgeworCQkJY29tX2VycigicmR1bXAiLCBlcnJubywgIndoaWxlIG1ha2luZyBkaXJlY3RvcnkgJXMiLCBmdWxsbmFtZSk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShjdXJyZW50X2ZzLCBpbm8sIDAsIDAsCisJCQkJCSAgICByZHVtcF9kaXJlbnQsICh2b2lkICopIGZ1bGxuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIoInJkdW1wIiwgcmV0dmFsLCAid2hpbGUgZHVtcGluZyAlcyIsIGZ1bGxuYW1lKTsKKworCQlmaXhfcGVybXMoInJkdW1wIiwgaW5vZGUsIC0xLCBmdWxsbmFtZSk7CisJfQorCS8qIGVsc2UgZG8gbm90aGluZyAoZG9uJ3QgZHVtcCBkZXZpY2UgZmlsZXMsIHNvY2tldHMsIGZpZm9zLCBldGMuKSAqLworCitlcnJvdXQ6CisJZnJlZShmdWxsbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcmR1bXBfZGlyZW50KHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJaW50IG9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQlpbnQgYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCWNoYXIgKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksIHZvaWQgKnByaXZhdGUpCit7CisJY2hhciBuYW1lW0VYVDJfTkFNRV9MRU4gKyAxXTsKKwlpbnQgdGhpc2xlbjsKKwljb25zdCBjaGFyICpkdW1wcm9vdCA9IHByaXZhdGU7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisKKwl0aGlzbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisJc3RybmNweShuYW1lLCBkaXJlbnQtPm5hbWUsIHRoaXNsZW4pOworCW5hbWVbdGhpc2xlbl0gPSAwOworCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShkaXJlbnQtPmlub2RlLCAmaW5vZGUsIG5hbWUpKQorCQlyZXR1cm4gMDsKKworCXJkdW1wX2lub2RlKGRpcmVudC0+aW5vZGUsICZpbm9kZSwgbmFtZSwgZHVtcHJvb3QpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fcmR1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dDJfaW5vX3QgaW5vOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCXN0cnVjdCBzdGF0IHN0OworCWludCBpOworCWNoYXIgKnA7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAicmR1bXAiLAorCQkJCSI8ZGlyZWN0b3J5PiA8bmF0aXZlIGRpcmVjdG9yeT4iLCAwKSkKKwkJcmV0dXJuOworCisJaW5vID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vKQorCQlyZXR1cm47CisKKwkvKiBFbnN1cmUgQVJHVlsyXSBpcyBhIGRpcmVjdG9yeS4gKi8KKwlpID0gc3RhdChhcmd2WzJdLCAmc3QpOworCWlmIChpID09IC0xKSB7CisJCWNvbV9lcnIoInJkdW1wIiwgZXJybm8sICJ3aGlsZSBzdGF0dGluZyAlcyIsIGFyZ3ZbMl0pOworCQlyZXR1cm47CisJfQorCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQljb21fZXJyKCJyZHVtcCIsIDAsICIlcyBpcyBub3QgYSBkaXJlY3RvcnkiLCBhcmd2WzJdKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIGFyZ3ZbMV0pKQorCQlyZXR1cm47CisKKwlwID0gc3RycmNocihhcmd2WzFdLCAnLycpOworCWlmIChwKQorCQlwKys7CisJZWxzZQorCQlwID0gYXJndlsxXTsKKworCXJkdW1wX2lub2RlKGlubywgJmlub2RlLCBwLCBhcmd2WzJdKTsKK30KKwordm9pZCBkb19jYXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisKKwlpZiAoY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmaW5vZGUsIDApKQorCQlyZXR1cm47CisKKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlkdW1wX2ZpbGUoYXJndlswXSwgaW5vZGUsIDEsIDAsIGFyZ3ZbMl0pOworCisJcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy9leHRlbnRfY21kcy5jdCBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2V4dGVudF9jbWRzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzQzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVidWdmcy9leHRlbnRfY21kcy5jdApAQCAtMCwwICsxLDc3IEBACisjCisjIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSBleHRlbnRfY21kczsKKworcmVxdWVzdCBkb19jdXJyZW50X25vZGUsICJDdXJyZW50IGV4dGVudCBub2RlIiwKKwljdXJyZW50X25vZGUsIGN1cnJlbnQ7CisKK3JlcXVlc3QgZG9fcm9vdF9ub2RlLCAiR290byByb290IGV4dGVudCIsCisJcm9vdF9ub2RlLCByb290OworCityZXF1ZXN0IGRvX2xhc3RfbGVhZiwgIkdvdG8gbGFzdCBsZWFmIiwKKwlsYXN0X2xlYWY7CisKK3JlcXVlc3QgZG9fZmlyc3Rfc2liLCAiR290byBmaXJzdCBzaWJsaW5nIiwKKwlmaXJzdF9zaWJsaW5nLCBmaXJzdF9zaWI7CisKK3JlcXVlc3QgZG9fbGFzdF9zaWIsICJHb3RvIGxhc3Qgc2libGluZyIsCisJbGFzdF9zaWJsaW5nLCBsYXN0X3NpYjsKKworcmVxdWVzdCBkb19uZXh0X3NpYiwgIkdvdG8gbmV4dCBzaWJsaW5nIiwKKwluZXh0X3NpYmxpbmcsIG5leHRfc2liLCBuczsKKworcmVxdWVzdCBkb19wcmV2X3NpYiwgIkdvdG8gcHJldmlvdXMgc2libGluZyIsCisJcHJldl9zaWJsaW5nLCBwcmV2X3NpYiwgcHM7CisKK3JlcXVlc3QgZG9fbmV4dF9sZWFmLCAiR290byBuZXh0IGxlYWYiLAorCW5leHRfbGVhZiwgbmw7CisKK3JlcXVlc3QgZG9fcHJldl9sZWFmLCAiR290byBwcmV2aW91cyBsZWFmIiwKKwlwcmV2X2xlYWYsIHBsOworCityZXF1ZXN0IGRvX25leHQsICJHb3RvIG5leHQgbm9kZSIsCisJbmV4dCwgbjsKKworcmVxdWVzdCBkb19wcmV2LCAiR290byBwcmV2aW91cyBub2RlIiwKKwlwcmV2aW91cywgcHJldiwgcDsKKworcmVxdWVzdCBkb191cCwgIlVwIG5vZGUiLAorCXVwX25vZGUsIHVwLCB1OworCityZXF1ZXN0IGRvX2Rvd24sICJEb3duIG5vZGUiLAorCWRvd25fbm9kZSwgZG93biwgZDsKKworcmVxdWVzdCBkb19kZWxldGVfbm9kZSwgIkRlbGV0ZSBub2RlIiwKKwlkZWxldGVfbm9kZSwgZGVsZXRlOworCityZXF1ZXN0IGRvX2luc2VydF9ub2RlLCAiSW5zZXJ0IG5vZGUiLAorCWluc2VydF9ub2RlLCBpbnNlcnQ7CisKK3JlcXVlc3QgZG9fc3BsaXRfbm9kZSwgIlNwbGl0IG5vZGUiLAorCXNwbGl0X25vZGUsIHNwbGl0OworCityZXF1ZXN0IGRvX2ZpeF9wYXJlbnRzLCAiRml4IHBhcmVudHMiLAorCWZpeF9wYXJlbnRzLCBmaXhwOworCityZXF1ZXN0IGRvX3NldF9ibWFwLCAiU2V0IGJsb2NrIG1hcHBpbmciLAorCXNldF9ibWFwOworCityZXF1ZXN0IGRvX3JlcGxhY2Vfbm9kZSwgIkluc2VydCBub2RlIiwKKwlyZXBsYWNlX25vZGUsIHJlcGxhY2U7CisKK3JlcXVlc3QgZG9fcHJpbnRfYWxsLCAiSXRlcmF0ZSBvdmVyIGFsbCBub2RlcyBhbmQgcHJpbnQgdGhlbSIsCisJcHJpbnRfYWxsLCBhbGw7CisKK3JlcXVlc3QgZG9fZ290b19ibG9jaywgIkdvdG8gZXh0ZW50IGNvbnRhaW5pbmcgc3BlY2lmaWVkIGJsb2NrIiwKKwlnb3RvX2Jsb2NrLCBnb3RvOworCityZXF1ZXN0IGRvX2luZm8sICJQcmludCBleHRlbnQgaW5mbyIsCisJaW5mbzsKKworcmVxdWVzdCBkb19leHRlbnRfY2xvc2UsICJDbG9zZSBleHRlbnQgaGFuZGxlIiwKKwlleHRlbnRfY2xvc2UsIGVjOworCitlbmQ7CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJ1Z2ZzL2V4dGVudF9pbm9kZS5jIGIvZTJmc3Byb2dzL2RlYnVnZnMvZXh0ZW50X2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViODk0NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2V4dGVudF9pbm9kZS5jCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogZXh0ZW50X2lub2RlLmMgLS0tIGRpcmVjdCBleHRlbnQgdHJlZSBtYW5pcHVsYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworc3RhdGljIGV4dDJfaW5vX3QJY3VycmVudF9pbm87CitzdGF0aWMgZXh0Ml9leHRlbnRfaGFuZGxlX3QgY3VycmVudF9oYW5kbGU7CisKK3N0YXRpYyB2b2lkIGRiZ19wcmludF9leHRlbnQoY2hhciAqZGVzYywgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlpZiAoZGVzYykKKwkJcHJpbnRmKCIlczogIiwgZGVzYyk7CisJcHJpbnRmKCJleHRlbnQ6IGxibGsgJWxsdS0tJWxsdSwgbGVuICV1LCBwYmxrICVsbHUsIGZsYWdzOiAiLAorCSAgICAgICBleHRlbnQtPmVfbGJsaywgZXh0ZW50LT5lX2xibGsgKyBleHRlbnQtPmVfbGVuIC0gMSwKKwkgICAgICAgZXh0ZW50LT5lX2xlbiwgZXh0ZW50LT5lX3BibGspOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19MRUFGKQorCQlmcHV0cygiTEVBRiAiLCBzdGRvdXQpOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCWZwdXRzKCJVTklOSVQgIiwgc3Rkb3V0KTsKKwlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfU0VDT05EX1ZJU0lUKQorCQlmcHV0cygiMk5EX1ZJU0lUICIsIHN0ZG91dCk7CisJaWYgKCFleHRlbnQtPmVfZmxhZ3MpCisJCWZwdXRzKCIobm9uZSkiLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisKK30KKworc3RhdGljIGludCBjb21tb25fZXh0ZW50X2FyZ3NfcHJvY2VzcyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgbWluX2FyZ2MsCisJCQkJICAgICAgaW50IG1heF9hcmdjLCBjb25zdCBjaGFyICpjbWQsCisJCQkJICAgICAgY29uc3QgY2hhciAqdXNhZ2UsIGludCBmbGFncykKK3sKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCBtaW5fYXJnYywgbWF4X2FyZ2MsIGNtZCwKKwkJCQl1c2FnZSwgZmxhZ3MpKQorCQlyZXR1cm4gMTsKKworCWlmICghY3VycmVudF9oYW5kbGUpIHsKKwkJY29tX2VycihjbWQsIDAsICJFeHRlbnQgaGFuZGxlIG5vdCBvcGVuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKm9yaWdfcHJvbXB0LCAqZXh0ZW50X3Byb21wdDsKKwordm9pZCBkb19leHRlbnRfb3BlbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJaW50CQlyZXQ7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqY3A7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPT0gMSkgeworCQlpZiAoY3VycmVudF9pbm8pCisJCQlwcmludGYoIkN1cnJlbnQgaW5vZGUgaXMgJWRcbiIsIGN1cnJlbnRfaW5vKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJObyBjdXJyZW50IGlub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb21tb25faW5vZGVfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsICZpbm9kZSwgMCkpCisJCXJldHVybjsKKworCWN1cnJlbnRfaW5vID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfb3BlbihjdXJyZW50X2ZzLCBpbm9kZSwgJmN1cnJlbnRfaGFuZGxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlsxXSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBleHRlbnQgaGFuZGxlIik7CisJCXJldHVybjsKKwl9CisKKwljdXJyZW50X2lubyA9IGlub2RlOworCisJb3JpZ19wcm9tcHQgPSBzc19nZXRfcHJvbXB0KHNjaV9pZHgpOworCWV4dGVudF9wcm9tcHQgPSBtYWxsb2Moc3RybGVuKG9yaWdfcHJvbXB0KSArIDMyKTsKKwlzdHJjcHkoZXh0ZW50X3Byb21wdCwgb3JpZ19wcm9tcHQpOworCWNwID0gc3RyY2hyKGV4dGVudF9wcm9tcHQsICc6Jyk7CisJaWYgKGNwKQorCQkqY3AgPSAwOworCXNwcmludGYoZXh0ZW50X3Byb21wdCArIHN0cmxlbihleHRlbnRfcHJvbXB0KSwgIiAoZXh0ZW50IGlubyAlZCk6ICIsCisJCWN1cnJlbnRfaW5vKTsKKwlzc19hZGRfcmVxdWVzdF90YWJsZShzY2lfaWR4LCAmZXh0ZW50X2NtZHMsIDEsICZyZXQpOworCXNzX3NldF9wcm9tcHQoc2NpX2lkeCwgZXh0ZW50X3Byb21wdCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2V4dGVudF9jbG9zZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCByZXQ7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAxLAorCQkJCSJleHRlbnRfY2xvc2UiLCAiIiwgMCkpCisJCXJldHVybjsKKworCWlmICghY3VycmVudF9oYW5kbGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiRXh0ZW50IGhhbmRsZSBub3Qgb3BlbiIpOworCQlyZXR1cm47CisJfQorCisJZXh0MmZzX2V4dGVudF9mcmVlKGN1cnJlbnRfaGFuZGxlKTsKKwljdXJyZW50X2hhbmRsZSA9IE5VTEw7CisJY3VycmVudF9pbm8gPSAwOworCXNzX2RlbGV0ZV9yZXF1ZXN0X3RhYmxlKHNjaV9pZHgsICZleHRlbnRfY21kcywgJnJldCk7CisJc3Nfc2V0X3Byb21wdChzY2lfaWR4LCBvcmlnX3Byb21wdCk7CisJZnJlZShleHRlbnRfcHJvbXB0KTsKKwlleHRlbnRfcHJvbXB0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJpY19nb3RvX25vZGUoY29uc3QgY2hhciAqbXlfbmFtZSwgaW50IGFyZ2MsCisJCQkgICAgICBjaGFyICoqYXJndiwgaW50IG9wKQoreworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCWlmIChteV9uYW1lICYmIGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwKKwkJCQkJICAgbXlfbmFtZSwgIiIsIDApKQorCQlyZXR1cm47CisKKwlpZiAoIWN1cnJlbnRfaGFuZGxlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkV4dGVudCBoYW5kbGUgbm90IG9wZW4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLCBvcCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJZGJnX3ByaW50X2V4dGVudCgwLCAmZXh0ZW50KTsKK30KKwordm9pZCBkb19jdXJyZW50X25vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgiY3VycmVudF9ub2RlIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfQ1VSUkVOVCk7Cit9CisKK3ZvaWQgZG9fcm9vdF9ub2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoInJvb3Rfbm9kZSIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX1JPT1QpOworfQorCit2b2lkIGRvX2xhc3RfbGVhZihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJsYXN0X2xlYWYiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9MQVNUX0xFQUYpOworfQorCit2b2lkIGRvX2ZpcnN0X3NpYihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJmaXJzdF9zaWIiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9GSVJTVF9TSUIpOworfQorCit2b2lkIGRvX2xhc3Rfc2liKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoIm5leHRfc2liIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfTEFTVF9TSUIpOworfQorCit2b2lkIGRvX25leHRfc2liKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoIm5leHRfc2liIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfTkVYVF9TSUIpOworfQorCit2b2lkIGRvX3ByZXZfc2liKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoInByZXZfc2liIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfUFJFVl9TSUIpOworfQorCit2b2lkIGRvX25leHRfbGVhZihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJuZXh0X2xlYWYiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9ORVhUX0xFQUYpOworfQorCit2b2lkIGRvX3ByZXZfbGVhZihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdlbmVyaWNfZ290b19ub2RlKCJwcmV2X2xlYWYiLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9QUkVWX0xFQUYpOworfQorCit2b2lkIGRvX25leHQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgibmV4dCIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX05FWFQpOworfQorCit2b2lkIGRvX3ByZXYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgicHJldiIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX1BSRVYpOworfQorCit2b2lkIGRvX3VwKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2VuZXJpY19nb3RvX25vZGUoInVwIiwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfVVApOworfQorCit2b2lkIGRvX2Rvd24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlnZW5lcmljX2dvdG9fbm9kZSgiZG93biIsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX0RPV04pOworfQorCit2b2lkIGRvX2RlbGV0ZV9ub2RlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IGV4dDJmc19leHRlbnQgZXh0ZW50OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwgImRlbGV0ZV9ub2RlIiwKKwkJCQkgICAgICAgIiIsIENIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZGVsZXRlKGN1cnJlbnRfaGFuZGxlLCAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULAorCQkJCSAgICZleHRlbnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKwlkYmdfcHJpbnRfZXh0ZW50KDAsICZleHRlbnQpOworfQorCit2b2lkIGRvX3JlcGxhY2Vfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlstLXVuaW5pdF0gPGxibGs+IDxsZW4+IDxwYmxrPiI7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudCBleHRlbnQ7CisJaW50IGVycjsKKworCWlmIChjb21tb25fZXh0ZW50X2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCA1LCAicmVwbGFjZV9ub2RlIiwKKwkJCQkgICAgICAgdXNhZ2UsIENIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKworCWV4dGVudC5lX2ZsYWdzID0gMDsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLXVuaW5pdCIpKSB7CisJCWFyZ2MtLTsKKwkJYXJndisrOworCQlleHRlbnQuZV9mbGFncyB8PSBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQ7CisJfQorCisJaWYgKGFyZ2MgIT0gNCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyAlc1xuIiwgYXJndlswXSwgdXNhZ2UpOworCQlyZXR1cm47CisJfQorCisJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlsxXSwgJmV4dGVudC5lX2xibGspOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWV4dGVudC5lX2xlbiA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJsb2dpY2FsIGJsb2NrIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlszXSwgJmV4dGVudC5lX3BibGspOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShjdXJyZW50X2hhbmRsZSwgMCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJZ2VuZXJpY19nb3RvX25vZGUoTlVMTCwgYXJnYywgYXJndiwgRVhUMl9FWFRFTlRfQ1VSUkVOVCk7Cit9CisKK3ZvaWQgZG9fc3BsaXRfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwgInNwbGl0X25vZGUiLAorCQkJCSAgICAgICAiIiwgQ0hFQ0tfRlNfUlcgfCBDSEVDS19GU19CSVRNQVBTKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0KGN1cnJlbnRfaGFuZGxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKwlnZW5lcmljX2dvdG9fbm9kZShOVUxMLCBhcmdjLCBhcmd2LCBFWFQyX0VYVEVOVF9DVVJSRU5UKTsKK30KKwordm9pZCBkb19pbnNlcnRfbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlstLWFmdGVyXSBbLS11bmluaXRdIDxsYmxrPiA8bGVuPiA8cGJsaz4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGV4dDJmc19leHRlbnQgZXh0ZW50OworCWNoYXIgKmNtZDsKKwlpbnQgZXJyOworCWludCBmbGFncyA9IDA7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgNiwgImluc2VydF9ub2RlIiwKKwkJCQkgICAgICAgdXNhZ2UsIENIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKworCWNtZCA9IGFyZ3ZbMF07CisKKwlleHRlbnQuZV9mbGFncyA9IDA7CisKKwl3aGlsZSAoYXJnYyA+IDIpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tYWZ0ZXIiKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQkJZmxhZ3MgfD0gRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdW5pbml0IikpIHsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJCWV4dGVudC5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChhcmdjICE9IDQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgJXNcbiIsIGNtZCwgdXNhZ2UpOworCQlyZXR1cm47CisJfQorCisJZXJyID0gc3RydG9ibGsoY21kLCBhcmd2WzFdLCAmZXh0ZW50LmVfbGJsayk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXh0ZW50LmVfbGVuID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgY21kLAorCQkJCSAgICAibGVuZ3RoIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXJyID0gc3RydG9ibGsoY21kLCBhcmd2WzNdLCAmZXh0ZW50LmVfcGJsayk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoY3VycmVudF9oYW5kbGUsIGZsYWdzLCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCWdlbmVyaWNfZ290b19ub2RlKE5VTEwsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX0NVUlJFTlQpOworfQorCit2b2lkIGRvX3NldF9ibWFwKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICJbLS11bmluaXRdIDxsYmxrPiA8cGJsaz4iOworCXN0cnVjdCBleHQyZnNfZXh0ZW50IGV4dGVudDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWxvZ2ljYWw7CisJYmxrNjRfdAkJcGh5c2ljYWw7CisJY2hhcgkJKmNtZCA9IGFyZ3ZbMF07CisJaW50CQlmbGFncyA9IDA7CisJaW50CQllcnI7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgNSwgInNldF9ibWFwIiwKKwkJCQkgICAgICAgdXNhZ2UsIENIRUNLX0ZTX1JXIHwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybjsKKworCWlmIChhcmdjID4gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXVuaW5pdCIpKSB7CisJCWFyZ2MtLTsKKwkJYXJndisrOworCQlmbGFncyB8PSBFWFQyX0VYVEVOVF9TRVRfQk1BUF9VTklOSVQ7CisJfQorCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyAlc1xuIiwgY21kLCB1c2FnZSk7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSBzdHJ0b2JsayhjbWQsIGFyZ3ZbMV0sICZsb2dpY2FsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwllcnIgPSBzdHJ0b2JsayhjbWQsIGFyZ3ZbMl0sICZwaHlzaWNhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9zZXRfYm1hcChjdXJyZW50X2hhbmRsZSwgbG9naWNhbCwKKwkJCQkJcGh5c2ljYWwsIGZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoY3VycmVudF9oYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsCisJCQkJICAgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCWRiZ19wcmludF9leHRlbnQoMCwgJmV4dGVudCk7Cit9CisKK3ZvaWQgZG9fcHJpbnRfYWxsKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICJbLS1sZWFmLW9ubHl8LS1yZXZlcnNlfC0tcmV2ZXJzZS1sZWFmXSI7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCWVycmNvZGVfdAkJcmV0dmFsOworCWVycmNvZGVfdAkJZW5kX2VyciA9IEVYVDJfRVRfRVhURU5UX05PX05FWFQ7CisJaW50CQkJb3AgPSBFWFQyX0VYVEVOVF9ORVhUOworCWludAkJCWZpcnN0X29wID0gRVhUMl9FWFRFTlRfUk9PVDsKKworCisJaWYgKGNvbW1vbl9leHRlbnRfYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDEsIDIsICJwcmludF9hbGwiLAorCQkJCSAgICAgICB1c2FnZSwgMCkpCisJCXJldHVybjsKKworCWlmIChhcmdjID09IDIpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tbGVhZi1vbmx5IikpCisJCQlvcCA9IEVYVDJfRVhURU5UX05FWFRfTEVBRjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1yZXZlcnNlIikpIHsKKwkJCW9wID0gRVhUMl9FWFRFTlRfUFJFVjsKKwkJCWZpcnN0X29wID0gRVhUMl9FWFRFTlRfTEFTVF9MRUFGOworCQkJZW5kX2VyciA9IEVYVDJfRVRfRVhURU5UX05PX1BSRVY7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1yZXZlcnNlLWxlYWYiKSkgeworCQkJb3AgPSBFWFQyX0VYVEVOVF9QUkVWX0xFQUY7CisJCQlmaXJzdF9vcCA9IEVYVDJfRVhURU5UX0xBU1RfTEVBRjsKKwkJCWVuZF9lcnIgPSBFWFQyX0VUX0VYVEVOVF9OT19QUkVWOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgJXNcbiIsIGFyZ3ZbMF0sIHVzYWdlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLCBmaXJzdF9vcCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJZGJnX3ByaW50X2V4dGVudCgwLCAmZXh0ZW50KTsKKworCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLCBvcCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwgPT0gZW5kX2VycikKKwkJCWJyZWFrOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJCXJldHVybjsKKwkJfQorCQlkYmdfcHJpbnRfZXh0ZW50KDAsICZleHRlbnQpOworCX0KK30KKwordm9pZCBkb19maXhfcGFyZW50cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwgImZpeF9wYXJlbnRzIiwgIiIsCisJCQkJICAgICAgIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhjdXJyZW50X2hhbmRsZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgZG9faW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvCWluZm87CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMSwgMSwgImluZm8iLCAiIiwgMCkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oY3VycmVudF9oYW5kbGUsICZpbmZvKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGN1cnJlbnRfaGFuZGxlLAorCQkJCSAgIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworCQlyZXR1cm47CisJfQorCisJZGJnX3ByaW50X2V4dGVudCgwLCAmZXh0ZW50KTsKKworCXByaW50ZigiQ3VycmVudCBoYW5kbGUgbG9jYXRpb246ICVkLyVkIChtYXg6ICVkLCBieXRlcyAlZCksIGxldmVsICVkLyVkXG4iLAorCSAgICAgICBpbmZvLmN1cnJfZW50cnksIGluZm8ubnVtX2VudHJpZXMsIGluZm8ubWF4X2VudHJpZXMsCisJICAgICAgIGluZm8uYnl0ZXNfYXZhaWwsIGluZm8uY3Vycl9sZXZlbCwgaW5mby5tYXhfZGVwdGgpOworCXByaW50ZigiXHRtYXggbGJsazogJWxsdSwgbWF4IHBibGs6ICVsbHVcbiIsIGluZm8ubWF4X2xibGssCisJICAgICAgIGluZm8ubWF4X3BibGspOworCXByaW50ZigiXHRtYXhfbGVuOiAldSwgbWF4X3VuaW5pdF9sZW46ICV1XG4iLCBpbmZvLm1heF9sZW4sCisJICAgICAgIGluZm8ubWF4X3VuaW5pdF9sZW4pOworfQorCit2b2lkIGRvX2dvdG9fYmxvY2soaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsazY0X3QJCQlibGs7CisJaW50CQkJbGV2ZWwgPSAwLCBlcnI7CisKKwlpZiAoY29tbW9uX2V4dGVudF9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMywgImdvdG9fYmxvY2siLAorCQkJCSAgICAgICAiYmxvY2sgW2xldmVsXSIsIDApKQorCQlyZXR1cm47CisKKwlpZiAoc3RydG9ibGsoYXJndlswXSwgYXJndlsxXSwgJmJsaykpCisJCXJldHVybjsKKworCWlmIChhcmdjID09IDMpIHsKKwkJbGV2ZWwgPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAibGV2ZWwiLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8yKGN1cnJlbnRfaGFuZGxlLCBsZXZlbCwgKGJsazY0X3QpIGJsayk7CisKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLAorCQkJIndoaWxlIHRyeWluZyB0byBnbyB0byBibG9jayAlbGx1LCBsZXZlbCAlZCIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBibGssIGxldmVsKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmVyaWNfZ290b19ub2RlKE5VTEwsIGFyZ2MsIGFyZ3YsIEVYVDJfRVhURU5UX0NVUlJFTlQpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvZmlsZWZyYWcuYyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2ZpbGVmcmFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhNzY3OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2ZpbGVmcmFnLmMKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBmaWxlZnJhZy5jIC0tLSBkaXNwbGF5IHRoZSBmcmFnbWVudGF0aW9uIGluZm9ybWF0aW9uIGZvciBhIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworI2RlZmluZSBWRVJCT1NFX09QVAkweDAwMDEKKyNkZWZpbmUgRElSX09QVAkJMHgwMDAyCisjZGVmaW5lIFJFQ1VSU0lWRV9PUFQJMHgwMDA0CisKK3N0cnVjdCBkaXJfbGlzdCB7CisJY2hhcgkJKm5hbWU7CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGRpcl9saXN0CSpuZXh0OworfTsKKworc3RydWN0IGZpbGVmcmFnX3N0cnVjdCB7CisJRklMRQkJKmY7CisJY29uc3QgY2hhcgkqbmFtZTsKKwljb25zdCBjaGFyCSpkaXJfbmFtZTsKKwlpbnQJCW9wdGlvbnM7CisJaW50CQlsb2dpY2FsX3dpZHRoOworCWludAkJcGh5c2ljYWxfd2lkdGg7CisJaW50CQlleHQ7CisJaW50CQljb250X2V4dDsKKwllMl9ibGtjbnRfdAludW07CisJZTJfYmxrY250X3QJbG9naWNhbF9zdGFydDsKKwlibGs2NF90CQlwaHlzaWNhbF9zdGFydDsKKwlibGs2NF90CQlleHBlY3RlZDsKKwlzdHJ1Y3QgZGlyX2xpc3QgKmRpcl9saXN0LCAqZGlyX2xhc3Q7Cit9OworCitzdGF0aWMgaW50IGludF9sb2cxMCh1bnNpZ25lZCBsb25nIGxvbmcgYXJnKQoreworCWludCAgICAgbCA9IDA7CisKKwlhcmcgPSBhcmcgLyAxMDsKKwl3aGlsZSAoYXJnKSB7CisJCWwrKzsKKwkJYXJnID0gYXJnIC8gMTA7CisJfQorCXJldHVybiBsOworfQorCitzdGF0aWMgdm9pZCBwcmludF9oZWFkZXIoc3RydWN0IGZpbGVmcmFnX3N0cnVjdCAqZnMpCit7CisJaWYgKGZzLT5vcHRpb25zICYgVkVSQk9TRV9PUFQpIHsKKwkJZnByaW50Zihmcy0+ZiwgIiU0cyAlKnMgJSpzICUqcyAlKnNcbiIsICJleHQiLAorCQkJZnMtPmxvZ2ljYWxfd2lkdGgsICJsb2dpY2FsIiwgZnMtPnBoeXNpY2FsX3dpZHRoLAorCQkJInBoeXNpY2FsIiwgZnMtPnBoeXNpY2FsX3dpZHRoLCAiZXhwZWN0ZWQiLAorCQkJZnMtPmxvZ2ljYWxfd2lkdGgsICJsZW5ndGgiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9maWxlZnJhZyhzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0ICpmcykKK3sKKwlpZiAoZnMtPm51bSA9PSAwKQorCQlyZXR1cm47CisJaWYgKGZzLT5vcHRpb25zICYgVkVSQk9TRV9PUFQpIHsKKwkJaWYgKGZzLT5leHBlY3RlZCkKKwkJCWZwcmludGYoZnMtPmYsICIlNGQgJSpsdSAlKmxsdSAlKmxsdSAlKmx1XG4iLCBmcy0+ZXh0LAorCQkJCWZzLT5sb2dpY2FsX3dpZHRoLAorCQkJCSh1bnNpZ25lZCBsb25nKSBmcy0+bG9naWNhbF9zdGFydCwKKwkJCQlmcy0+cGh5c2ljYWxfd2lkdGgsIGZzLT5waHlzaWNhbF9zdGFydCwKKwkJCQlmcy0+cGh5c2ljYWxfd2lkdGgsIGZzLT5leHBlY3RlZCwKKwkJCQlmcy0+bG9naWNhbF93aWR0aCwgKHVuc2lnbmVkIGxvbmcpIGZzLT5udW0pOworCQllbHNlCisJCQlmcHJpbnRmKGZzLT5mLCAiJTRkICUqbHUgJSpsbHUgJSpzICUqbHVcbiIsIGZzLT5leHQsCisJCQkJZnMtPmxvZ2ljYWxfd2lkdGgsCisJCQkJKHVuc2lnbmVkIGxvbmcpIGZzLT5sb2dpY2FsX3N0YXJ0LAorCQkJCWZzLT5waHlzaWNhbF93aWR0aCwgZnMtPnBoeXNpY2FsX3N0YXJ0LAorCQkJCWZzLT5waHlzaWNhbF93aWR0aCwgIiIsCisJCQkJZnMtPmxvZ2ljYWxfd2lkdGgsICh1bnNpZ25lZCBsb25nKSBmcy0+bnVtKTsKKwl9CisJZnMtPmV4dCsrOworfQorCitzdGF0aWMgaW50IGZpbGVmcmFnX2Jsb2Nrc19wcm9jKGV4dDJfZmlsc3lzIGV4dDRfZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCWJsazY0X3QgKmJsb2NrbnIsIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJCWJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQlpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0ICpmcyA9IHByaXZhdGU7CisKKwlpZiAoYmxvY2tjbnQgPCAwIHx8ICpibG9ja25yID09IDApCisJCXJldHVybiAwOworCisJaWYgKChmcy0+bnVtID09IDApIHx8IChibG9ja2NudCAhPSBmcy0+bG9naWNhbF9zdGFydCArIGZzLT5udW0pIHx8CisJICAgICgqYmxvY2tuciAhPSBmcy0+cGh5c2ljYWxfc3RhcnQgKyBmcy0+bnVtKSkgeworCQlyZXBvcnRfZmlsZWZyYWcoZnMpOworCQlpZiAoYmxvY2tjbnQgPT0gZnMtPmxvZ2ljYWxfc3RhcnQgKyBmcy0+bnVtKQorCQkJZnMtPmV4cGVjdGVkID0gZnMtPnBoeXNpY2FsX3N0YXJ0ICsgZnMtPm51bTsKKwkJZWxzZQorCQkJZnMtPmV4cGVjdGVkID0gMDsKKwkJZnMtPmxvZ2ljYWxfc3RhcnQgPSBibG9ja2NudDsKKwkJZnMtPnBoeXNpY2FsX3N0YXJ0ID0gKmJsb2NrbnI7CisJCWZzLT5udW0gPSAxOworCQlmcy0+Y29udF9leHQrKzsKKwl9IGVsc2UKKwkJZnMtPm51bSsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaWxlZnJhZyhleHQyX2lub190IGlubywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkgICAgIHN0cnVjdCBmaWxlZnJhZ19zdHJ1Y3QgKmZzKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlibG9ja3NpemUgPSBjdXJyZW50X2ZzLT5ibG9ja3NpemU7CisKKwlmcy0+bG9naWNhbF93aWR0aCA9IGludF9sb2cxMCgoRVhUMl9JX1NJWkUoaW5vZGUpICsgYmxvY2tzaXplIC0gMSkgLworCQkJCSAgICAgIGJsb2Nrc2l6ZSkgKyAxOworCWlmIChmcy0+bG9naWNhbF93aWR0aCA8IDcpCisJCWZzLT5sb2dpY2FsX3dpZHRoID0gNzsKKwlmcy0+ZXh0ID0gMDsKKwlmcy0+Y29udF9leHQgPSAwOworCWZzLT5sb2dpY2FsX3N0YXJ0ID0gMDsKKwlmcy0+cGh5c2ljYWxfc3RhcnQgPSAwOworCWZzLT5udW0gPSAwOworCisJaWYgKGZzLT5vcHRpb25zICYgVkVSQk9TRV9PUFQpIHsKKwkJYmxrNjRfdCBudW1fYmxvY2tzID0gZXh0MmZzX2lub2RlX2lfYmxvY2tzKGN1cnJlbnRfZnMsIGlub2RlKTsKKworCQlpZiAoIShjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIHx8CisJCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCQkJbnVtX2Jsb2NrcyAvPSBjdXJyZW50X2ZzLT5ibG9ja3NpemUgLyA1MTI7CisKKwkJZnByaW50Zihmcy0+ZiwgIlxuJXMgaGFzICVsbHUgYmxvY2socyksIGlfc2l6ZSBpcyAlbGx1XG4iLAorCQkJZnMtPm5hbWUsIG51bV9ibG9ja3MsIEVYVDJfSV9TSVpFKGlub2RlKSk7CisJfQorCXByaW50X2hlYWRlcihmcyk7CisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGN1cnJlbnRfZnMsIGlubywKKwkJCQkgICAgICAgQkxPQ0tfRkxBR19SRUFEX09OTFksIE5VTEwsCisJCQkJICAgICAgIGZpbGVmcmFnX2Jsb2Nrc19wcm9jLCBmcyk7CisJaWYgKHJldHZhbCkKKwkJY29tX2VycigiZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzIiwgcmV0dmFsLCAwKTsKKworCXJlcG9ydF9maWxlZnJhZyhmcyk7CisJZnByaW50Zihmcy0+ZiwgIiVzOiAlZCBjb250aWd1b3VzIGV4dGVudHMlc1xuIiwgZnMtPm5hbWUsIGZzLT5leHQsCisJCUxJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkgPyAiIChkaXIpIiA6ICIiKTsKK30KKworc3RhdGljIGludCBmaWxlZnJhZ19kaXJfcHJvYyhleHQyX2lub190IGRpciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludAllbnRyeSwKKwkJCSAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgICAgIGludAlvZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBpbnQJYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgdm9pZAkqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0ICpmcyA9IHByaXZhdGU7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXh0Ml9pbm9fdAkJaW5vOworCWNoYXIJCQluYW1lW0VYVDJfTkFNRV9MRU4gKyAxXTsKKwljaGFyCQkJKmNwOworCWludAkJCXRoaXNsZW47CisKKwlpZiAoZW50cnkgPT0gRElSRU5UX0RFTEVURURfRklMRSkKKwkJcmV0dXJuIDA7CisKKwl0aGlzbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisJc3RybmNweShuYW1lLCBkaXJlbnQtPm5hbWUsIHRoaXNsZW4pOworCW5hbWVbdGhpc2xlbl0gPSAnXDAnOworCWlubyA9IGRpcmVudC0+aW5vZGU7CisKKwlpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisJCXJldHVybiAwOworCisJY3AgPSBtYWxsb2Moc3RybGVuKGZzLT5kaXJfbmFtZSkgKyBzdHJsZW4obmFtZSkgKyAyKTsKKwlpZiAoIWNwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcy8lc1xuIiwKKwkJCWZzLT5kaXJfbmFtZSwgbmFtZSk7CisJCXJldHVybiAwOworCX0KKworCXNwcmludGYoY3AsICIlcy8lcyIsIGZzLT5kaXJfbmFtZSwgbmFtZSk7CisJZnMtPm5hbWUgPSBjcDsKKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGUoaW5vLCAmaW5vZGUsIGZzLT5uYW1lKSkKKwkJZ290byBlcnJvdXQ7CisKKwlmaWxlZnJhZyhpbm8sICZpbm9kZSwgZnMpOworCisJaWYgKChmcy0+b3B0aW9ucyAmIFJFQ1VSU0lWRV9PUFQpICYmIExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkgeworCQlzdHJ1Y3QgZGlyX2xpc3QgKnA7CisKKwkJcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpcl9saXN0KSk7CisJCWlmICghcCkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBhbGxvY2F0ZSBkaXJfbGlzdCBmb3IgJXNcbiIsCisJCQkJZnMtPm5hbWUpOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgZGlyX2xpc3QpKTsKKwkJcC0+bmFtZSA9IGNwOworCQlwLT5pbm8gPSBpbm87CisJCWlmIChmcy0+ZGlyX2xhc3QpCisJCQlmcy0+ZGlyX2xhc3QtPm5leHQgPSBwOworCQllbHNlCisJCQlmcy0+ZGlyX2xpc3QgPSBwOworCQlmcy0+ZGlyX2xhc3QgPSBwOworCQlyZXR1cm4gMDsKKwl9CitlcnJvdXQ6CisJZnJlZShjcCk7CisJZnMtPm5hbWUgPSAwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGRpcl9pdGVyYXRlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0ICpmcykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBkaXJfbGlzdAkqcCA9IE5VTEw7CisKKwlmcy0+ZGlyX25hbWUgPSBmcy0+bmFtZTsKKworCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZTIoY3VycmVudF9mcywgaW5vLCAwLAorCQkJCQkgICAgIDAsIGZpbGVmcmFnX2Rpcl9wcm9jLCBmcyk7CisJCWlmIChyZXR2YWwpCisJCQljb21fZXJyKCJleHQyZnNfZGlyX2l0ZXJhdGUyIiwgcmV0dmFsLCAwKTsKKwkJaWYgKHApIHsKKwkJCWZyZWUocC0+bmFtZSk7CisJCQlmcy0+ZGlyX2xpc3QgPSBwLT5uZXh0OworCQkJaWYgKCFmcy0+ZGlyX2xpc3QpCisJCQkJZnMtPmRpcl9sYXN0ID0gMDsKKwkJCWZyZWUocCk7CisJCX0KKwkJcCA9IGZzLT5kaXJfbGlzdDsKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisJCWlubyA9IHAtPmlubzsKKwkJZnMtPmRpcl9uYW1lID0gcC0+bmFtZTsKKwl9Cit9CisKK3ZvaWQgZG9fZmlsZWZyYWcoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgZmlsZWZyYWdfc3RydWN0IGZzOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vX3QJaW5vOworCWludAkJYzsKKworCW1lbXNldCgmZnMsIDAsIHNpemVvZihmcykpOworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlyZXNldF9nZXRvcHQoKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImR2ciIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2QnOgorCQkJZnMub3B0aW9ucyB8PSBESVJfT1BUOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJZnMub3B0aW9ucyB8PSBWRVJCT1NFX09QVDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWZzLm9wdGlvbnMgfD0gUkVDVVJTSVZFX09QVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKworCWlmIChhcmdjID4gb3B0aW5kKzEpIHsKKwlwcmludF91c2FnZToKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGZpbGVmcmFnIFstZHZyXSBmaWxlIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJnYyA9PSBvcHRpbmQpIHsKKwkJaW5vID0gY3dkOworCQlmcy5uYW1lID0gIi4iOworCX0gZWxzZSB7CisJCWlubyA9IHN0cmluZ190b19pbm9kZShhcmd2W29wdGluZF0pOworCQlmcy5uYW1lID0gYXJndltvcHRpbmRdOworCX0KKwlpZiAoIWlubykKKwkJcmV0dXJuOworCisJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm8sICZpbm9kZSwgYXJndlswXSkpCisJCXJldHVybjsKKworCWZzLmYgPSBvcGVuX3BhZ2VyKCk7CisJZnMucGh5c2ljYWxfd2lkdGggPSBpbnRfbG9nMTAoZXh0MmZzX2Jsb2Nrc19jb3VudChjdXJyZW50X2ZzLT5zdXBlcikpOworCWZzLnBoeXNpY2FsX3dpZHRoKys7CisJaWYgKGZzLnBoeXNpY2FsX3dpZHRoIDwgOCkKKwkJZnMucGh5c2ljYWxfd2lkdGggPSA4OworCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkgfHwgKGZzLm9wdGlvbnMgJiBESVJfT1BUKSkKKwkJZmlsZWZyYWcoaW5vLCAmaW5vZGUsICZmcyk7CisJZWxzZQorCQlkaXJfaXRlcmF0ZShpbm8sICZmcyk7CisKKwlmcHJpbnRmKGZzLmYsICJcbiIpOworCWNsb3NlX3BhZ2VyKGZzLmYpOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvaHRyZWUuYyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2h0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiNjJhNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2h0cmVlLmMKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBodHJlZS5jIC0tLSBoYXNoIHRyZWUgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKK3N0YXRpYyBGSUxFICpwYWdlcjsKKworc3RhdGljIHZvaWQgaHRyZWVfZHVtcF9sZWFmX25vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqIHJvb3Rub2RlLAorCQkJCSBibGs2NF90IGJsaywgY2hhciAqYnVmKQoreworCWVycmNvZGVfdAllcnJjb2RlOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50OworCWludAkJdGhpc2xlbiwgY29sID0gMDsKKwl1bnNpZ25lZCBpbnQJb2Zmc2V0ID0gMDsKKwljaGFyCQluYW1lW0VYVDJfTkFNRV9MRU4gKyAxXTsKKwljaGFyCQl0bXBbRVhUMl9OQU1FX0xFTiArIDY0XTsKKwlibGs2NF90CQlwYmxrOworCWV4dDJfZGlyaGFzaF90IAloYXNoLCBtaW5vcl9oYXNoOworCXVuc2lnbmVkIGludAlyZWNfbGVuOworCWludAkJaGFzaF9hbGc7CisKKwllcnJjb2RlID0gZXh0MmZzX2JtYXAyKGZzLCBpbm8sIGlub2RlLCBidWYsIDAsIGJsaywgMCwgJnBibGspOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoImh0cmVlX2R1bXBfbGVhZl9ub2RlIiwgZXJyY29kZSwKKwkJCSJ3aGlsZSBtYXBwaW5nIGxvZ2ljYWwgYmxvY2sgJWxsdVxuIiwgYmxrKTsKKwkJcmV0dXJuOworCX0KKworCWZwcmludGYocGFnZXIsICJSZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlbGx1LCBwaHlzICVsbHVcbiIsIGJsaywgcGJsayk7CisJZXJyY29kZSA9IGV4dDJmc19yZWFkX2Rpcl9ibG9jazIoY3VycmVudF9mcywgcGJsaywgYnVmLCAwKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKCJodHJlZV9kdW1wX2xlYWZfbm9kZSIsIGVycmNvZGUsCisJCQkid2hpbGUgcmVhZGluZyBibG9jayAlbGx1ICglbGx1KVxuIiwKKwkJCWJsaywgcGJsayk7CisJCXJldHVybjsKKwl9CisJaGFzaF9hbGcgPSByb290bm9kZS0+aGFzaF92ZXJzaW9uOworCWlmICgoaGFzaF9hbGcgPD0gRVhUMl9IQVNIX1RFQSkgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mbGFncyAmIEVYVDJfRkxBR1NfVU5TSUdORURfSEFTSCkpCisJCWhhc2hfYWxnICs9IDM7CisKKwl3aGlsZSAob2Zmc2V0IDwgZnMtPmJsb2Nrc2l6ZSkgeworCQlkaXJlbnQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChidWYgKyBvZmZzZXQpOworCQllcnJjb2RlID0gZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKTsKKwkJaWYgKGVycmNvZGUpIHsKKwkJCWNvbV9lcnIoImh0cmVlX2R1bXBfbGVhZl9pbm9kZSIsIGVycmNvZGUsCisJCQkJIndoaWxlIGdldHRpbmcgcmVjX2xlbiBmb3IgYmxvY2sgJWx1IiwKKwkJCQkodW5zaWduZWQgbG9uZykgYmxrKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoKChvZmZzZXQgKyByZWNfbGVuKSA+IGZzLT5ibG9ja3NpemUpIHx8CisJCSAgICAocmVjX2xlbiA8IDgpIHx8CisJCSAgICAoKHJlY19sZW4gJSA0KSAhPSAwKSB8fAorCQkgICAgKCgoKHVuc2lnbmVkKSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikrOCkgPiByZWNfbGVuKSkgeworCQkJZnByaW50ZihwYWdlciwgIkNvcnJ1cHRlZCBkaXJlY3RvcnkgYmxvY2sgKCVsbHUpIVxuIiwKKwkJCQlibGspOworCQkJYnJlYWs7CisJCX0KKwkJdGhpc2xlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCQlzdHJuY3B5KG5hbWUsIGRpcmVudC0+bmFtZSwgdGhpc2xlbik7CisJCW5hbWVbdGhpc2xlbl0gPSAnXDAnOworCQllcnJjb2RlID0gZXh0MmZzX2Rpcmhhc2goaGFzaF9hbGcsIG5hbWUsCisJCQkJCSB0aGlzbGVuLCBmcy0+c3VwZXItPnNfaGFzaF9zZWVkLAorCQkJCQkgJmhhc2gsICZtaW5vcl9oYXNoKTsKKwkJaWYgKGVycmNvZGUpCisJCQljb21fZXJyKCJodHJlZV9kdW1wX2xlYWZfbm9kZSIsIGVycmNvZGUsCisJCQkJIndoaWxlIGNhbGN1bGF0aW5nIGhhc2giKTsKKwkJc25wcmludGYodG1wLCBFWFQyX05BTUVfTEVOICsgNjQsICIldSAweCUwOHgtJTA4eCAoJWQpICVzICAgIiwKKwkJCWRpcmVudC0+aW5vZGUsIGhhc2gsIG1pbm9yX2hhc2gsIHJlY19sZW4sIG5hbWUpOworCQl0aGlzbGVuID0gc3RybGVuKHRtcCk7CisJCWlmIChjb2wgKyB0aGlzbGVuID4gODApIHsKKwkJCWZwcmludGYocGFnZXIsICJcbiIpOworCQkJY29sID0gMDsKKwkJfQorCQlmcHJpbnRmKHBhZ2VyLCAiJXMiLCB0bXApOworCQljb2wgKz0gdGhpc2xlbjsKKwkJb2Zmc2V0ICs9IHJlY19sZW47CisJfQorCWZwcmludGYocGFnZXIsICJcbiIpOworfQorCisKK3N0YXRpYyB2b2lkIGh0cmVlX2R1bXBfaW50X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKiByb290bm9kZSwKKwkJCQkgYmxrNjRfdCBibGssIGNoYXIgKmJ1ZiwgaW50IGxldmVsKTsKKworCitzdGF0aWMgdm9pZCBodHJlZV9kdW1wX2ludF9ub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICogcm9vdG5vZGUsCisJCQkJc3RydWN0IGV4dDJfZHhfZW50cnkgKmVudCwKKwkJCQljaGFyICpidWYsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgZXh0Ml9keF9jb3VudGxpbWl0CWxpbWl0OworCXN0cnVjdCBleHQyX2R4X2VudHJ5CQllOworCWludAkJCQloYXNoLCBpOworCisKKwlsaW1pdCA9ICooKHN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQgKikgZW50KTsKKwlsaW1pdC5jb3VudCA9IGV4dDJmc19sZTE2X3RvX2NwdShsaW1pdC5jb3VudCk7CisJbGltaXQubGltaXQgPSBleHQyZnNfbGUxNl90b19jcHUobGltaXQubGltaXQpOworCisJZnByaW50ZihwYWdlciwgIk51bWJlciBvZiBlbnRyaWVzIChjb3VudCk6ICVkXG4iLCBsaW1pdC5jb3VudCk7CisJZnByaW50ZihwYWdlciwgIk51bWJlciBvZiBlbnRyaWVzIChsaW1pdCk6ICVkXG4iLCBsaW1pdC5saW1pdCk7CisKKwlmb3IgKGk9MDsgaSA8IGxpbWl0LmNvdW50OyBpKyspIHsKKwkJaGFzaCA9IGkgPyBleHQyZnNfbGUzMl90b19jcHUoZW50W2ldLmhhc2gpIDogMDsKKwkJZnByaW50ZihwYWdlciwgIkVudHJ5ICMlZDogSGFzaCAweCUwOHglcywgYmxvY2sgJXVcbiIsIGksCisJCQloYXNoLCAoaGFzaCAmIDEpID8gIiAoKiopIiA6ICIiLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5ibG9jaykpOworCQl9CisKKwlmcHJpbnRmKHBhZ2VyLCAiXG4iKTsKKworCWZvciAoaT0wOyBpIDwgbGltaXQuY291bnQ7IGkrKykgeworCQllLmhhc2ggPSBleHQyZnNfbGUzMl90b19jcHUoZW50W2ldLmhhc2gpOworCQllLmJsb2NrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5ibG9jayk7CisJCWZwcmludGYocGFnZXIsICJFbnRyeSAjJWQ6IEhhc2ggMHglMDh4LCBibG9jayAldVxuIiwgaSwKKwkJICAgICAgIGkgPyBlLmhhc2ggOiAwLCBlLmJsb2NrKTsKKwkJaWYgKGxldmVsKQorCQkJaHRyZWVfZHVtcF9pbnRfYmxvY2soZnMsIGlubywgaW5vZGUsIHJvb3Rub2RlLAorCQkJCQkgICAgIGUuYmxvY2ssIGJ1ZiwgbGV2ZWwtMSk7CisJCWVsc2UKKwkJCWh0cmVlX2R1bXBfbGVhZl9ub2RlKGZzLCBpbm8sIGlub2RlLCByb290bm9kZSwKKwkJCQkJICAgICBlLmJsb2NrLCBidWYpOworCX0KKworCWZwcmludGYocGFnZXIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworfQorCitzdGF0aWMgdm9pZCBodHJlZV9kdW1wX2ludF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICogcm9vdG5vZGUsCisJCQkJIGJsazY0X3QgYmxrLCBjaGFyICpidWYsIGludCBsZXZlbCkKK3sKKwljaGFyCQkqY2J1ZjsKKwllcnJjb2RlX3QJZXJyY29kZTsKKwlibGs2NF90CQlwYmxrOworCisJY2J1ZiA9IG1hbGxvYyhmcy0+YmxvY2tzaXplKTsKKwlpZiAoIWNidWYpIHsKKwkJZnByaW50ZihwYWdlciwgIkNvdWxkbid0IGFsbG9jYXRlIGNoaWxkIGJsb2NrLlxuIik7CisJCXJldHVybjsKKwl9CisKKwllcnJjb2RlID0gZXh0MmZzX2JtYXAyKGZzLCBpbm8sIGlub2RlLCBidWYsIDAsIGJsaywgMCwgJnBibGspOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoImh0cmVlX2R1bXBfaW50X2Jsb2NrIiwgZXJyY29kZSwKKwkJCSJ3aGlsZSBtYXBwaW5nIGxvZ2ljYWwgYmxvY2sgJWxsdVxuIiwgYmxrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjdXJyZW50X2ZzLT5pbywgcGJsaywgMSwgYnVmKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKCJodHJlZV9kdW1wX2ludF9ibG9jayIsIGVycmNvZGUsCisJCQkid2hpbGUgCXJlYWRpbmcgYmxvY2sgJWxsdVxuIiwgYmxrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaHRyZWVfZHVtcF9pbnRfbm9kZShmcywgaW5vLCBpbm9kZSwgcm9vdG5vZGUsCisJCQkgICAgKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopIChidWYrOCksCisJCQkgICAgY2J1ZiwgbGV2ZWwpOworZXJyb3V0OgorCWZyZWUoY2J1Zik7Cit9CisKKworCit2b2lkIGRvX2h0cmVlX2R1bXAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHQyX2lub190CWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlibGs2NF90CQlibGs7CisJY2hhcgkJKmJ1ZiA9IE5VTEw7CisJc3RydWN0IAkJZXh0Ml9keF9yb290X2luZm8gICpyb290bm9kZTsKKwlzdHJ1Y3QgCQlleHQyX2R4X2VudHJ5ICplbnQ7CisJZXJyY29kZV90CWVycmNvZGU7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcGFnZXIgPSBvcGVuX3BhZ2VyKCk7CisKKwlpZiAoY29tbW9uX2lub2RlX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAmaW5vLCAwKSkKKwkJZ290byBlcnJvdXQ7CisKKwlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBhcmd2WzFdKSkKKwkJZ290byBlcnJvdXQ7CisKKwlpZiAoIUxJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJOb3QgYSBkaXJlY3RvcnkiKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKChpbm9kZS5pX2ZsYWdzICYgRVhUMl9CVFJFRV9GTCkgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJOb3QgYSBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5Iik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWJ1ZiA9IG1hbGxvYygyKmN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKCFidWYpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiQ291bGRuJ3QgYWxsb2NhdGUgaHRyZWUgYnVmZmVyIik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWVycmNvZGUgPSBleHQyZnNfYm1hcDIoY3VycmVudF9mcywgaW5vLCAmaW5vZGUsIGJ1ZiwgMCwgMCwgMCwgJmJsayk7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2VycigiZG9faHRyZWVfYmxvY2siLCBlcnJjb2RlLAorCQkJIndoaWxlIG1hcHBpbmcgbG9naWNhbCBibG9jayAwXG4iKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjdXJyZW50X2ZzLT5pbywgYmxrLAorCQkJCQkxLCBidWYpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwgIkVycm9yIHJlYWRpbmcgcm9vdCBub2RlIik7CisJCWdvdG8gZXJyb3V0OworCX0KKworCXJvb3Rub2RlID0gKHN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqKSAoYnVmICsgMjQpOworCisJZnByaW50ZihwYWdlciwgIlJvb3Qgbm9kZSBkdW1wOlxuIik7CisJZnByaW50ZihwYWdlciwgIlx0IFJlc2VydmVkIHplcm86ICV1XG4iLCByb290bm9kZS0+cmVzZXJ2ZWRfemVybyk7CisJZnByaW50ZihwYWdlciwgIlx0IEhhc2ggVmVyc2lvbjogJWRcbiIsIHJvb3Rub2RlLT5oYXNoX3ZlcnNpb24pOworCWZwcmludGYocGFnZXIsICJcdCBJbmZvIGxlbmd0aDogJWRcbiIsIHJvb3Rub2RlLT5pbmZvX2xlbmd0aCk7CisJZnByaW50ZihwYWdlciwgIlx0IEluZGlyZWN0IGxldmVsczogJWRcbiIsIHJvb3Rub2RlLT5pbmRpcmVjdF9sZXZlbHMpOworCWZwcmludGYocGFnZXIsICJcdCBGbGFnczogJWRcbiIsIHJvb3Rub2RlLT51bnVzZWRfZmxhZ3MpOworCisJZW50ID0gKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopIChidWYgKyAyNCArIHJvb3Rub2RlLT5pbmZvX2xlbmd0aCk7CisKKwlodHJlZV9kdW1wX2ludF9ub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlLCByb290bm9kZSwgZW50LAorCQkJICAgIGJ1ZiArIGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSwKKwkJCSAgICByb290bm9kZS0+aW5kaXJlY3RfbGV2ZWxzKTsKKworZXJyb3V0OgorCWZyZWUoYnVmKTsKKwljbG9zZV9wYWdlcihwYWdlcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByaW50cyB0aGUgaGFzaCBvZiBhIGdpdmVuIGZpbGUuCisgKi8KK3ZvaWQgZG9fZHhfaGFzaChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfZGlyaGFzaF90IGhhc2gsIG1pbm9yX2hhc2g7CisJZXJyY29kZV90CWVycjsKKwlpbnQJCWM7CisJaW50CQloYXNoX3ZlcnNpb24gPSAwOworCV9fdTMyCQloYXNoX3NlZWRbNF07CisKKwloYXNoX3NlZWRbMF0gPSBoYXNoX3NlZWRbMV0gPSBoYXNoX3NlZWRbMl0gPSBoYXNoX3NlZWRbM10gPSAwOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaDpzOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2gnOgorCQkJaGFzaF92ZXJzaW9uID0gZTJwX3N0cmluZzJoYXNoKG9wdGFyZyk7CisJCQlpZiAoaGFzaF92ZXJzaW9uIDwgMCkKKwkJCQloYXNoX3ZlcnNpb24gPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAodXVpZF9wYXJzZShvcHRhcmcsICh1bnNpZ25lZCBjaGFyICopIGhhc2hfc2VlZCkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgVVVJRCBmb3JtYXQ6ICVzXG4iLAorCQkJCQlvcHRhcmcpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKwlpZiAob3B0aW5kICE9IGFyZ2MtMSkgeworCXByaW50X3VzYWdlOgorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJ1c2FnZTogZHhfaGFzaCBbLWggaGFzaF9hbGddICIKKwkJCSJbLXMgaGFzaF9zZWVkXSBmaWxlbmFtZSIpOworCQlyZXR1cm47CisJfQorCWVyciA9IGV4dDJmc19kaXJoYXNoKGhhc2hfdmVyc2lvbiwgYXJndltvcHRpbmRdLCBzdHJsZW4oYXJndltvcHRpbmRdKSwKKwkJCSAgICAgaGFzaF9zZWVkLCAmaGFzaCwgJm1pbm9yX2hhc2gpOworCWlmIChlcnIpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnIsICJ3aGlsZSBjYWNsdWxhdGluZyBoYXNoIik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJIYXNoIG9mICVzIGlzIDB4JTB4IChtaW5vciAweCUweClcbiIsIGFyZ3Zbb3B0aW5kXSwKKwkgICAgICAgaGFzaCwgbWlub3JfaGFzaCk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIHBhcnRpY3VsYXIgZGlyZWN0b3J5IGVudHJ5ICh1c2VmdWwgZm9yIGRlYnVnZ2luZyB2ZXJ5CisgKiBsYXJnZSBoYXNoIHRyZWUgZGlyZWN0b3JpZXMgdGhhdCBoYXZlIGxvc3Qgc29tZSBibG9ja3MgZnJvbSB0aGUKKyAqIGJ0cmVlIGluZGV4KS4KKyAqLworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwljaGFyCSpzZWFyY2hfbmFtZTsKKwljaGFyCSpidWY7CisJaW50CWxlbjsKK307CisKK3N0YXRpYyBpbnQgc2VhcmNoX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tuciwKKwkJCSAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxrLAorCQkJICAgIGludCByZWZfb2Zmc2V0LCB2b2lkICpwcml2X2RhdGEpOworCit2b2lkIGRvX2RpcnNlYXJjaChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWV4dDJfaW5vX3QJaW5vZGU7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDMpIHsKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGRpcnNlYXJjaCBkaXIgZmlsZW5hbWUiKTsKKwkJcmV0dXJuOworCX0KKworCWlub2RlID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCXBiLmJ1ZiA9IG1hbGxvYyhjdXJyZW50X2ZzLT5ibG9ja3NpemUpOworCWlmICghcGIuYnVmKSB7CisJCWNvbV9lcnIoImRpcnNlYXJjaCIsIDAsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWZmZXIiKTsKKwkJcmV0dXJuOworCX0KKwlwYi5zZWFyY2hfbmFtZSA9IGFyZ3ZbMl07CisJcGIubGVuID0gc3RybGVuKHBiLnNlYXJjaF9uYW1lKTsKKworCWV4dDJmc19ibG9ja19pdGVyYXRlMyhjdXJyZW50X2ZzLCBpbm9kZSwgQkxPQ0tfRkxBR19SRUFEX09OTFksIDAsCisJCQkgICAgICBzZWFyY2hfZGlyX2Jsb2NrLCAmcGIpOworCisJZnJlZShwYi5idWYpOworfQorCisKK3N0YXRpYyBpbnQgc2VhcmNoX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tuciwKKwkJCSAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICBibGs2NF90IHJlZl9ibGsgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50OworCWVycmNvZGVfdAkgICAgICAgCWVycmNvZGU7CisJdW5zaWduZWQgaW50CQlvZmZzZXQgPSAwOworCXVuc2lnbmVkIGludAkJcmVjX2xlbjsKKworCWlmIChibG9ja2NudCA8IDApCisJCXJldHVybiAwOworCisJcCA9IChzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKikgcHJpdl9kYXRhOworCisJZXJyY29kZSA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjdXJyZW50X2ZzLT5pbywgKmJsb2NrbnIsIDEsIHAtPmJ1Zik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycigic2VhcmNoX2Rpcl9ibG9jayIsIGVycmNvZGUsCisJCQkid2hpbGUgcmVhZGluZyBibG9jayAlbHUiLCAodW5zaWduZWQgbG9uZykgKmJsb2NrbnIpOworCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCisJd2hpbGUgKG9mZnNldCA8IGZzLT5ibG9ja3NpemUpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAocC0+YnVmICsgb2Zmc2V0KTsKKwkJZXJyY29kZSA9IGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKCJodHJlZV9kdW1wX2xlYWZfaW5vZGUiLCBlcnJjb2RlLAorCQkJCSJ3aGlsZSBnZXR0aW5nIHJlY19sZW4gZm9yIGJsb2NrICVsdSIsCisJCQkJKHVuc2lnbmVkIGxvbmcpICpibG9ja25yKTsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQlpZiAoZGlyZW50LT5pbm9kZSAmJgorCQkgICAgcC0+bGVuID09IChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgJiYKKwkJICAgIHN0cm5jbXAocC0+c2VhcmNoX25hbWUsIGRpcmVudC0+bmFtZSwKKwkJCSAgICBwLT5sZW4pID09IDApIHsKKwkJCXByaW50ZigiRW50cnkgZm91bmQgYXQgbG9naWNhbCBibG9jayAlbGxkLCAiCisJCQkgICAgICAgInBoeXMgJWxsdSwgb2Zmc2V0ICV1XG4iLCAobG9uZyBsb25nKWJsb2NrY250LAorCQkJICAgICAgICpibG9ja25yLCBvZmZzZXQpOworCQkJcHJpbnRmKCJvZmZzZXQgJXVcbiIsIG9mZnNldCk7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJb2Zmc2V0ICs9IHJlY19sZW47CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy9pY2hlY2suYyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2ljaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZmE4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVidWdmcy9pY2hlY2suYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIGljaGVjay5jIC0tLSBnaXZlbiBhIGxpc3Qgb2YgYmxvY2tzLCBnZW5lcmF0ZSBhIGxpc3Qgb2YgaW5vZGVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworc3RydWN0IGJsb2NrX2luZm8geworCWJsazY0X3QJCWJsazsKKwlleHQyX2lub190CWlubzsKK307CisKK3N0cnVjdCBibG9ja193YWxrX3N0cnVjdCB7CisJc3RydWN0IGJsb2NrX2luZm8JKmJhcnJheTsKKwllMl9ibGtjbnRfdAkJYmxvY2tzX2xlZnQ7CisJZTJfYmxrY250X3QJCW51bV9ibG9ja3M7CisJZXh0Ml9pbm9fdAkJaW5vZGU7Cit9OworCitzdGF0aWMgaW50IGljaGVja19wcm9jKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIGJsazY0X3QJKmJsb2NrX25yLAorCQkgICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgYmxvY2tfd2Fsa19zdHJ1Y3QgKmJ3ID0gKHN0cnVjdCBibG9ja193YWxrX3N0cnVjdCAqKSBwcml2YXRlOworCWUyX2Jsa2NudF90CWk7CisKKwlmb3IgKGk9MDsgaSA8IGJ3LT5udW1fYmxvY2tzOyBpKyspIHsKKwkJaWYgKCFidy0+YmFycmF5W2ldLmlubyAmJiBidy0+YmFycmF5W2ldLmJsayA9PSAqYmxvY2tfbnIpIHsKKwkJCWJ3LT5iYXJyYXlbaV0uaW5vID0gYnctPmlub2RlOworCQkJYnctPmJsb2Nrc19sZWZ0LS07CisJCX0KKwl9CisJaWYgKCFidy0+YmxvY2tzX2xlZnQpCisJCXJldHVybiBCTE9DS19BQk9SVDsKKworCXJldHVybiAwOworfQorCit2b2lkIGRvX2ljaGVjayhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGJsb2NrX3dhbGtfc3RydWN0IGJ3OworCXN0cnVjdCBibG9ja19pbmZvCSpiaW5mbzsKKwlpbnQJCQlpOworCWV4dDJfaW5vZGVfc2NhbgkJc2NhbiA9IDA7CisJZXh0Ml9pbm9fdAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqYmxvY2tfYnVmOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBpY2hlY2sgPGJsb2NrIG51bWJlcj4gLi4uIik7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWJ3LmJhcnJheSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGJsb2NrX2luZm8pICogYXJnYyk7CisJaWYgKCFidy5iYXJyYXkpIHsKKwkJY29tX2VycigiaWNoZWNrIiwgRU5PTUVNLAorCQkJIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgaW5mbyBhcnJheSIpOworCQlyZXR1cm47CisJfQorCW1lbXNldChidy5iYXJyYXksIDAsIHNpemVvZihzdHJ1Y3QgYmxvY2tfaW5mbykgKiBhcmdjKTsKKworCWJsb2NrX2J1ZiA9IG1hbGxvYyhjdXJyZW50X2ZzLT5ibG9ja3NpemUgKiAzKTsKKwlpZiAoIWJsb2NrX2J1ZikgeworCQljb21fZXJyKCJpY2hlY2siLCBFTk9NRU0sICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlmb3IgKGk9MTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoc3RydG9ibGsoYXJndlswXSwgYXJndltpXSwgJmJ3LmJhcnJheVtpLTFdLmJsaykpCisJCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlidy5udW1fYmxvY2tzID0gYncuYmxvY2tzX2xlZnQgPSBhcmdjLTE7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGN1cnJlbnRfZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImljaGVjayIsIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlkbyB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCX0gd2hpbGUgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJpY2hlY2siLCByZXR2YWwsICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCXdoaWxlIChpbm8pIHsKKwkJYmxrNjRfdCBibGs7CisKKwkJaWYgKCFpbm9kZS5pX2xpbmtzX2NvdW50KQorCQkJZ290byBuZXh0OworCisJCWJ3Lmlub2RlID0gaW5vOworCisJCWJsayA9IGV4dDJmc19maWxlX2FjbF9ibG9jayhjdXJyZW50X2ZzLCAmaW5vZGUpOworCQlpZiAoYmxrKSB7CisJCQlpY2hlY2tfcHJvYyhjdXJyZW50X2ZzLCAmYmxrLCAwLAorCQkJCSAgICAwLCAwLCAmYncpOworCQkJaWYgKGJ3LmJsb2Nrc19sZWZ0ID09IDApCisJCQkJYnJlYWs7CisJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGN1cnJlbnRfZnMsICZpbm9kZSwgYmxrKTsKKwkJfQorCisJCWlmICghZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGN1cnJlbnRfZnMsICZpbm9kZSkpCisJCQlnb3RvIG5leHQ7CisJCS8qCisJCSAqIFRvIGhhbmRsZSBmaWxlc3lzdGVtcyB0b3VjaGVkIGJ5IDAuM2MgZXh0ZnM7IGNhbiBiZQorCQkgKiByZW1vdmVkIGxhdGVyLgorCQkgKi8KKwkJaWYgKGlub2RlLmlfZHRpbWUpCisJCQlnb3RvIG5leHQ7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGN1cnJlbnRfZnMsIGlubywKKwkJCQkJICAgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBibG9ja19idWYsCisJCQkJCSAgICAgICBpY2hlY2tfcHJvYywgJmJ3KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiaWNoZWNrIiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIik7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlpZiAoYncuYmxvY2tzX2xlZnQgPT0gMCkKKwkJCWJyZWFrOworCisJbmV4dDoKKwkJZG8geworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCX0gd2hpbGUgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImljaGVjayIsIHJldHZhbCwKKwkJCQkid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIpOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwl9CisKKwlwcmludGYoIkJsb2NrXHRJbm9kZSBudW1iZXJcbiIpOworCWZvciAoaT0wLCBiaW5mbyA9IGJ3LmJhcnJheTsgaSA8IGJ3Lm51bV9ibG9ja3M7IGkrKywgYmluZm8rKykgeworCQlpZiAoYmluZm8tPmlubyA9PSAwKSB7CisJCQlwcmludGYoIiVsbHVcdDxibG9jayBub3QgZm91bmQ+XG4iLCBiaW5mby0+YmxrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ZigiJWxsdVx0JXVcbiIsIGJpbmZvLT5ibGssIGJpbmZvLT5pbm8pOworCX0KKworZXJyb3Jfb3V0OgorCWZyZWUoYncuYmFycmF5KTsKKwlmcmVlKGJsb2NrX2J1Zik7CisJaWYgKHNjYW4pCisJCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJ1Z2ZzL2pmc191c2VyLmggYi9lMmZzcHJvZ3MvZGVidWdmcy9qZnNfdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzBjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVidWdmcy9qZnNfdXNlci5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfSkZTX1VTRVJfSAorI2RlZmluZSBfSkZTX1VTRVJfSAorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGtkZXZfdDsKKworI2luY2x1ZGUgPGV4dDJmcy9rZXJuZWwtamJkLmg+CisKKyNlbmRpZiAvKiBfSkZTX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvbG9nZHVtcC5jIGIvZTJmc3Byb2dzL2RlYnVnZnMvbG9nZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTcxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVidWdmcy9sb2dkdW1wLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8qCisgKiBsb2dkdW1wLmMgLS0tIGR1bXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBqb3VybmFsIG91dCB0byBhIGZpbGUKKyAqCisgKiBBdXRocm86IFN0ZXBoZW4gQy4gVHdlZWRpZSwgMjAwMSAgPHNjdEByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJlZCBIYXQsIEluYy4KKyAqIEJhc2VkIG9uIHBvcnRpb25zICBDb3B5cmlnaHQgKEMpIDE5OTQgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiYmxraWQvYmxraWQuaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCitlbnVtIGpvdXJuYWxfbG9jYXRpb24ge0pPVVJOQUxfSVNfSU5URVJOQUwsIEpPVVJOQUxfSVNfRVhURVJOQUx9OworCisjZGVmaW5lIEFOWV9CTE9DSyAoKGJsazY0X3QpIC0xKQorCitzdGF0aWMgaW50CQlkdW1wX2FsbCwgZHVtcF9jb250ZW50cywgZHVtcF9kZXNjcmlwdG9yczsKK3N0YXRpYyBibGs2NF90CQlibG9ja190b19kdW1wLCBiaXRtYXBfdG9fZHVtcCwgaW5vZGVfYmxvY2tfdG9fZHVtcDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJZ3JvdXBfdG9fZHVtcCwgaW5vZGVfb2Zmc2V0X3RvX2R1bXA7CitzdGF0aWMgZXh0Ml9pbm9fdAlpbm9kZV90b19kdW1wOworCitzdHJ1Y3Qgam91cm5hbF9zb3VyY2UKK3sKKwllbnVtIGpvdXJuYWxfbG9jYXRpb24gd2hlcmU7CisJaW50IGZkOworCWV4dDJfZmlsZV90IGZpbGU7Cit9OworCitzdGF0aWMgdm9pZCBkdW1wX2pvdXJuYWwoY2hhciAqLCBGSUxFICosIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqKTsKKworc3RhdGljIHZvaWQgZHVtcF9kZXNjcmlwdG9yX2Jsb2NrKEZJTEUgKiwgc3RydWN0IGpvdXJuYWxfc291cmNlICosCisJCQkJICBjaGFyICosIGpvdXJuYWxfc3VwZXJibG9ja190ICosCisJCQkJICB1bnNpZ25lZCBpbnQgKiwgaW50LCB0aWRfdCk7CisKK3N0YXRpYyB2b2lkIGR1bXBfcmV2b2tlX2Jsb2NrKEZJTEUgKiwgY2hhciAqLCBqb3VybmFsX3N1cGVyYmxvY2tfdCAqLAorCQkJCSAgdW5zaWduZWQgaW50LCBpbnQsIHRpZF90KTsKKworc3RhdGljIHZvaWQgZHVtcF9tZXRhZGF0YV9ibG9jayhGSUxFICosIHN0cnVjdCBqb3VybmFsX3NvdXJjZSAqLAorCQkJCWpvdXJuYWxfc3VwZXJibG9ja190KiwKKwkJCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCQkJCWludCwgdGlkX3QpOworCitzdGF0aWMgdm9pZCBkb19oZXhkdW1wIChGSUxFICosIGNoYXIgKiwgaW50KTsKKworI2RlZmluZSBXUkFQKGpzYiwgYmxvY2tucikJCQkJCVwKKwlpZiAoYmxvY2tuciA+PSBiZTMyX3RvX2NwdSgoanNiKS0+c19tYXhsZW4pKQkJXAorCQlibG9ja25yIC09IChiZTMyX3RvX2NwdSgoanNiKS0+c19tYXhsZW4pIC0JXAorCQkJICAgIGJlMzJfdG9fY3B1KChqc2IpLT5zX2ZpcnN0KSk7CisKK3ZvaWQgZG9fbG9nZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQljOworCWludAkJcmV0dmFsOworCWNoYXIJCSpvdXRfZm47CisJRklMRQkJKm91dF9maWxlOworCisJY2hhcgkJKmlub2RlX3NwZWMgPSBOVUxMOworCWNoYXIJCSpqb3VybmFsX2ZuID0gTlVMTDsKKwlpbnQJCWpvdXJuYWxfZmQgPSAwOworCWludAkJdXNlX3NiID0gMDsKKwlleHQyX2lub190CWpvdXJuYWxfaW51bTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBqb3VybmFsX2lub2RlOworCWV4dDJfZmlsZV90IAlqb3VybmFsX2ZpbGU7CisJY2hhcgkJKnRtcDsKKwlzdHJ1Y3Qgam91cm5hbF9zb3VyY2Ugam91cm5hbF9zb3VyY2U7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzID0gTlVMTDsKKworCWpvdXJuYWxfc291cmNlLndoZXJlID0gSk9VUk5BTF9JU19JTlRFUk5BTDsKKwlqb3VybmFsX3NvdXJjZS5mZCA9IDA7CisJam91cm5hbF9zb3VyY2UuZmlsZSA9IDA7CisJZHVtcF9hbGwgPSAwOworCWR1bXBfY29udGVudHMgPSAwOworCWR1bXBfZGVzY3JpcHRvcnMgPSAxOworCWJsb2NrX3RvX2R1bXAgPSBBTllfQkxPQ0s7CisJYml0bWFwX3RvX2R1bXAgPSAtMTsKKwlpbm9kZV9ibG9ja190b19kdW1wID0gQU5ZX0JMT0NLOworCWlub2RlX3RvX2R1bXAgPSAtMTsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImFiOmNpOmY6cyIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2EnOgorCQkJZHVtcF9hbGwrKzsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJCWJsb2NrX3RvX2R1bXAgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwKKwkJCQkJIkJhZCBibG9jayBudW1iZXIgLSAlcyIsIG9wdGFyZyk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZHVtcF9kZXNjcmlwdG9ycyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQlkdW1wX2NvbnRlbnRzKys7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlqb3VybmFsX2ZuID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5vZGVfc3BlYyA9IG9wdGFyZzsKKwkJCWR1bXBfZGVzY3JpcHRvcnMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJdXNlX3NiKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gcHJpbnRfdXNhZ2U7CisJCX0KKwl9CisJaWYgKG9wdGluZCAhPSBhcmdjICYmIG9wdGluZCAhPSBhcmdjLTEpIHsKKwkJZ290byBwcmludF91c2FnZTsKKwl9CisKKwlpZiAoY3VycmVudF9mcykKKwkJZXMgPSBjdXJyZW50X2ZzLT5zdXBlcjsKKworCWlmIChpbm9kZV9zcGVjKSB7CisJCWludCBpbm9kZV9ncm91cCwgZ3JvdXBfb2Zmc2V0LCBpbm9kZXNfcGVyX2Jsb2NrOworCisJCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQkJcmV0dXJuOworCisJCWlub2RlX3RvX2R1bXAgPSBzdHJpbmdfdG9faW5vZGUoaW5vZGVfc3BlYyk7CisJCWlmICghaW5vZGVfdG9fZHVtcCkKKwkJCXJldHVybjsKKworCQlpbm9kZV9ncm91cCA9ICgoaW5vZGVfdG9fZHVtcCAtIDEpCisJCQkgICAgICAgLyBlcy0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwkJZ3JvdXBfb2Zmc2V0ID0gKChpbm9kZV90b19kdW1wIC0gMSkKKwkJCQklIGVzLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCQlpbm9kZXNfcGVyX2Jsb2NrID0gKGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZQorCQkJCSAgICAvIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCisJCWlub2RlX2Jsb2NrX3RvX2R1bXAgPQorCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhjdXJyZW50X2ZzLCBpbm9kZV9ncm91cCkgKworCQkJKGdyb3VwX29mZnNldCAvIGlub2Rlc19wZXJfYmxvY2spOworCQlpbm9kZV9vZmZzZXRfdG9fZHVtcCA9ICgoZ3JvdXBfb2Zmc2V0ICUgaW5vZGVzX3Blcl9ibG9jaykKKwkJCQkJKiBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJcHJpbnRmKCJJbm9kZSAldSBpcyBhdCBncm91cCAldSwgYmxvY2sgJWxsdSwgb2Zmc2V0ICV1XG4iLAorCQkgICAgICAgaW5vZGVfdG9fZHVtcCwgaW5vZGVfZ3JvdXAsCisJCSAgICAgICBpbm9kZV9ibG9ja190b19kdW1wLCBpbm9kZV9vZmZzZXRfdG9fZHVtcCk7CisJfQorCisJaWYgKG9wdGluZCA9PSBhcmdjKSB7CisJCW91dF9maWxlID0gc3Rkb3V0OworCX0gZWxzZSB7CisJCW91dF9mbiA9IGFyZ3Zbb3B0aW5kXTsKKwkJb3V0X2ZpbGUgPSBmb3BlbihvdXRfZm4sICJ3Iik7CisJCWlmICghb3V0X2ZpbGUpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSBvcGVuaW5nICVzIGZvciBsb2dkdW1wIiwKKwkJCQlvdXRfZm4pOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisKKwlpZiAoYmxvY2tfdG9fZHVtcCAhPSBBTllfQkxPQ0sgJiYgY3VycmVudF9mcyAhPSBOVUxMKSB7CisJCWdyb3VwX3RvX2R1bXAgPSAoKGJsb2NrX3RvX2R1bXAgLQorCQkJCSAgZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykKKwkJCQkgLyBlcy0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKwkJYml0bWFwX3RvX2R1bXAgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhjdXJyZW50X2ZzLCBncm91cF90b19kdW1wKTsKKwl9CisKKwlpZiAoIWpvdXJuYWxfZm4gJiYgY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJZ290byBlcnJvdXQ7CisKKwlpZiAoam91cm5hbF9mbikgeworCQkvKiBTZXQgdXAgdG8gcmVhZCBqb3VybmFsIGZyb20gYSByZWd1bGFyIGZpbGUgc29tZXdoZXJlICovCisJCWpvdXJuYWxfZmQgPSBvcGVuKGpvdXJuYWxfZm4sIE9fUkRPTkxZLCAwKTsKKwkJaWYgKGpvdXJuYWxfZmQgPCAwKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycm5vLCAid2hpbGUgb3BlbmluZyAlcyBmb3IgbG9nZHVtcCIsCisJCQkJam91cm5hbF9mbik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCWpvdXJuYWxfc291cmNlLndoZXJlID0gSk9VUk5BTF9JU19FWFRFUk5BTDsKKwkJam91cm5hbF9zb3VyY2UuZmQgPSBqb3VybmFsX2ZkOworCX0gZWxzZSBpZiAoKGpvdXJuYWxfaW51bSA9IGVzLT5zX2pvdXJuYWxfaW51bSkpIHsKKwkJaWYgKHVzZV9zYikgeworCQkJaWYgKGVzLT5zX2pubF9iYWNrdXBfdHlwZSAhPSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTKSB7CisJCQkJY29tX2Vycihhcmd2WzBdLCAwLAorCQkJCQkibm8gam91cm5hbCBiYWNrdXAgaW4gc3VwZXIgYmxvY2tcbiIpOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJbWVtc2V0KCZqb3VybmFsX2lub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJCW1lbWNweSgmam91cm5hbF9pbm9kZS5pX2Jsb2NrWzBdLCBlcy0+c19qbmxfYmxvY2tzLAorCQkJICAgICAgIEVYVDJfTl9CTE9DS1MqNCk7CisJCQlqb3VybmFsX2lub2RlLmlfc2l6ZV9oaWdoID0gZXMtPnNfam5sX2Jsb2Nrc1sxNV07CisJCQlqb3VybmFsX2lub2RlLmlfc2l6ZSA9IGVzLT5zX2pubF9ibG9ja3NbMTZdOworCQkJam91cm5hbF9pbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwkJCWpvdXJuYWxfaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRlJFRyB8IDA2MDA7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVidWdmc19yZWFkX2lub2RlKGpvdXJuYWxfaW51bSwgJmpvdXJuYWxfaW5vZGUsCisJCQkJCSAgICAgICBhcmd2WzBdKSkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4yKGN1cnJlbnRfZnMsIGpvdXJuYWxfaW51bSwKKwkJCQkJICAgJmpvdXJuYWxfaW5vZGUsIDAsICZqb3VybmFsX2ZpbGUpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgZXh0MiBmaWxlIik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlqb3VybmFsX3NvdXJjZS53aGVyZSA9IEpPVVJOQUxfSVNfSU5URVJOQUw7CisJCWpvdXJuYWxfc291cmNlLmZpbGUgPSBqb3VybmFsX2ZpbGU7CisJfSBlbHNlIHsKKwkJY2hhciB1dWlkWzM3XTsKKworCQl1dWlkX3VucGFyc2UoZXMtPnNfam91cm5hbF91dWlkLCB1dWlkKTsKKwkJam91cm5hbF9mbiA9IGJsa2lkX2dldF9kZXZuYW1lKE5VTEwsICJVVUlEIiwgdXVpZCk7CisJCWlmICgham91cm5hbF9mbikKKwkJCQlqb3VybmFsX2ZuID0gYmxraWRfZGV2bm9fdG9fZGV2bmFtZShlcy0+c19qb3VybmFsX2Rldik7CisJCWlmICgham91cm5hbF9mbikgeworCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiZmlsZXN5c3RlbSBoYXMgbm8gam91cm5hbCIpOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJam91cm5hbF9mZCA9IG9wZW4oam91cm5hbF9mbiwgT19SRE9OTFksIDApOworCQlpZiAoam91cm5hbF9mZCA8IDApIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSBvcGVuaW5nICVzIGZvciBsb2dkdW1wIiwKKwkJCQlqb3VybmFsX2ZuKTsKKwkJCWZyZWUoam91cm5hbF9mbik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlmcHJpbnRmKG91dF9maWxlLCAiVXNpbmcgZXh0ZXJuYWwgam91cm5hbCBmb3VuZCBhdCAlc1xuIiwKKwkJCWpvdXJuYWxfZm4pOworCQlmcmVlKGpvdXJuYWxfZm4pOworCQlqb3VybmFsX3NvdXJjZS53aGVyZSA9IEpPVVJOQUxfSVNfRVhURVJOQUw7CisJCWpvdXJuYWxfc291cmNlLmZkID0gam91cm5hbF9mZDsKKwl9CisKKwlkdW1wX2pvdXJuYWwoYXJndlswXSwgb3V0X2ZpbGUsICZqb3VybmFsX3NvdXJjZSk7CisKKwlpZiAoam91cm5hbF9zb3VyY2Uud2hlcmUgPT0gSk9VUk5BTF9JU19JTlRFUk5BTCkKKwkJZXh0MmZzX2ZpbGVfY2xvc2Uoam91cm5hbF9maWxlKTsKKwllbHNlCisJCWNsb3NlKGpvdXJuYWxfZmQpOworCitlcnJvdXQ6CisJaWYgKG91dF9maWxlICYmIChvdXRfZmlsZSAhPSBzdGRvdXQpKQorCQlmY2xvc2Uob3V0X2ZpbGUpOworCisJcmV0dXJuOworCitwcmludF91c2FnZToKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVc2FnZTogbG9nZHVtcCBbLWFjc10gWy1iPGJsb2NrPl0gWy1pPGZpbGVzcGVjPl1cblx0IgorCQkiWy1mPGpvdXJuYWxfZmlsZT5dIFtvdXRwdXRfZmlsZV1cbiIsIGFyZ3ZbMF0pOworfQorCisKK3N0YXRpYyBpbnQgcmVhZF9qb3VybmFsX2Jsb2NrKGNvbnN0IGNoYXIgKmNtZCwgc3RydWN0IGpvdXJuYWxfc291cmNlICpzb3VyY2UsCisJCQkgICAgICBvZmZfdCBvZmZzZXQsIGNoYXIgKmJ1ZiwgaW50IHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKmdvdCkKK3sKKwlpbnQgcmV0dmFsOworCisJaWYgKHNvdXJjZS0+d2hlcmUgPT0gSk9VUk5BTF9JU19FWFRFUk5BTCkgeworCQlpZiAobHNlZWsoc291cmNlLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWNvbV9lcnIoY21kLCByZXR2YWwsICJ3aGlsZSBzZWVraW5nIGluIHJlYWRpbmcgam91cm5hbCIpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlyZXR2YWwgPSByZWFkKHNvdXJjZS0+ZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChyZXR2YWwgPj0gMCkgeworCQkJKmdvdCA9IHJldHZhbDsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gZXJybm87CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoc291cmNlLT5maWxlLCBvZmZzZXQsCisJCQkJCSAgIEVYVDJfU0VFS19TRVQsIE5VTEwpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGNtZCwgcmV0dmFsLCAid2hpbGUgc2Vla2luZyBpbiByZWFkaW5nIGpvdXJuYWwiKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKworCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKHNvdXJjZS0+ZmlsZSwgYnVmLCBzaXplLCBnb3QpOworCX0KKworCWlmIChyZXR2YWwpCisJCWNvbV9lcnIoY21kLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwiKTsKKwllbHNlIGlmICgqZ290ICE9ICh1bnNpZ25lZCBpbnQpIHNpemUpIHsKKwkJY29tX2VycihjbWQsIDAsICJzaG9ydCByZWFkIChyZWFkICVkLCBleHBlY3RlZCAlZCkgIgorCQkJIndoaWxlIHJlYWRpbmcgam91cm5hbCIsICpnb3QsIHNpemUpOworCQlyZXR2YWwgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdHlwZV90b19uYW1lKGludCBidHlwZSkKK3sKKwlzd2l0Y2ggKGJ0eXBlKSB7CisJY2FzZSBKRlNfREVTQ1JJUFRPUl9CTE9DSzoKKwkJcmV0dXJuICJkZXNjcmlwdG9yIGJsb2NrIjsKKwljYXNlIEpGU19DT01NSVRfQkxPQ0s6CisJCXJldHVybiAiY29tbWl0IGJsb2NrIjsKKwljYXNlIEpGU19TVVBFUkJMT0NLX1YxOgorCQlyZXR1cm4gIlYxIHN1cGVyYmxvY2siOworCWNhc2UgSkZTX1NVUEVSQkxPQ0tfVjI6CisJCXJldHVybiAiVjIgc3VwZXJibG9jayI7CisJY2FzZSBKRlNfUkVWT0tFX0JMT0NLOgorCQlyZXR1cm4gInJldm9rZSB0YWJsZSI7CisJfQorCXJldHVybiAidW5yZWNvZ25pc2VkIHR5cGUiOworfQorCisKK3N0YXRpYyB2b2lkIGR1bXBfam91cm5hbChjaGFyICpjbWRuYW1lLCBGSUxFICpvdXRfZmlsZSwKKwkJCSBzdHJ1Y3Qgam91cm5hbF9zb3VyY2UgKnNvdXJjZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJY2hhcgkJCWpzYl9idWZmZXJbMTAyNF07CisJY2hhcgkJCWJ1Zls4MTkyXTsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCXVuc2lnbmVkIGludAkJYmxvY2tzaXplID0gMTAyNDsKKwl1bnNpZ25lZCBpbnQJCWdvdDsKKwlpbnQJCQlyZXR2YWw7CisJX191MzIJCQltYWdpYywgc2VxdWVuY2UsIGJsb2NrdHlwZTsKKwlqb3VybmFsX2hlYWRlcl90CSpoZWFkZXI7CisKKwl0aWRfdAkJCXRyYW5zYWN0aW9uOworCXVuc2lnbmVkIGludAkJYmxvY2tuciA9IDA7CisKKwkvKiBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZXh0MiBzdXBlcmJsb2NrIGhlYWRlciAqLworCXJldHZhbCA9IHJlYWRfam91cm5hbF9ibG9jayhjbWRuYW1lLCBzb3VyY2UsIDAsCisJCQkJICAgIGJ1ZiwgMjA0OCwgJmdvdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwlzYiA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSAoYnVmKzEwMjQpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWlmIChzYi0+c19tYWdpYyA9PSBleHQyZnNfc3dhYjE2KEVYVDJfU1VQRVJfTUFHSUMpKQorCQlleHQyZnNfc3dhcF9zdXBlcihzYik7CisjZW5kaWYKKworCWlmICgoYmUzMl90b19jcHUoanNiLT5zX2hlYWRlci5oX21hZ2ljKSAhPSBKRlNfTUFHSUNfTlVNQkVSKSAmJgorCSAgICAoc2ItPnNfbWFnaWMgPT0gRVhUMl9TVVBFUl9NQUdJQykgJiYKKwkgICAgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpKSB7CisJCWJsb2Nrc2l6ZSA9IEVYVDJfQkxPQ0tfU0laRShzYik7CisJCWJsb2NrbnIgPSAoYmxvY2tzaXplID09IDEwMjQpID8gMiA6IDE7CisJCXV1aWRfdW5wYXJzZShzYi0+c191dWlkLCBqc2JfYnVmZmVyKTsKKwkJZnByaW50ZihvdXRfZmlsZSwgIkV4dDIgc3VwZXJibG9jayBoZWFkZXIgZm91bmQuXG4iKTsKKwkJaWYgKGR1bXBfYWxsKSB7CisJCQlmcHJpbnRmKG91dF9maWxlLCAiXHR1dWlkPSVzXG4iLCBqc2JfYnVmZmVyKTsKKwkJCWZwcmludGYob3V0X2ZpbGUsICJcdGJsb2Nrc2l6ZT0lZFxuIiwgYmxvY2tzaXplKTsKKwkJCWZwcmludGYob3V0X2ZpbGUsICJcdGpvdXJuYWwgZGF0YSBzaXplICVsdVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZykgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikpOworCQl9CisJfQorCisJLyogTmV4dCwgcmVhZCB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisKKwlyZXR2YWwgPSByZWFkX2pvdXJuYWxfYmxvY2soY21kbmFtZSwgc291cmNlLCBibG9ja25yKmJsb2Nrc2l6ZSwKKwkJCQkgICAganNiX2J1ZmZlciwgMTAyNCwgJmdvdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGpzYl9idWZmZXI7CisJaWYgKGJlMzJfdG9fY3B1KGpzYi0+c19oZWFkZXIuaF9tYWdpYykgIT0gSkZTX01BR0lDX05VTUJFUikgeworCQlmcHJpbnRmKG91dF9maWxlLAorCQkJIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIpOworCQlyZXR1cm47CisJfQorCWJsb2Nrc2l6ZSA9IGJlMzJfdG9fY3B1KGpzYi0+c19ibG9ja3NpemUpOworCXRyYW5zYWN0aW9uID0gYmUzMl90b19jcHUoanNiLT5zX3NlcXVlbmNlKTsKKwlibG9ja25yID0gYmUzMl90b19jcHUoanNiLT5zX3N0YXJ0KTsKKworCWZwcmludGYob3V0X2ZpbGUsICJKb3VybmFsIHN0YXJ0cyBhdCBibG9jayAldSwgdHJhbnNhY3Rpb24gJXVcbiIsCisJCWJsb2NrbnIsIHRyYW5zYWN0aW9uKTsKKworCWlmICghYmxvY2tucikKKwkJLyogRW1wdHkgam91cm5hbCwgbm90aGluZyB0byBkby4gKi8KKwkJcmV0dXJuOworCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gcmVhZF9qb3VybmFsX2Jsb2NrKGNtZG5hbWUsIHNvdXJjZSwKKwkJCQkJICAgIGJsb2NrbnIqYmxvY2tzaXplLCBidWYsCisJCQkJCSAgICBibG9ja3NpemUsICZnb3QpOworCQlpZiAocmV0dmFsIHx8IGdvdCAhPSBibG9ja3NpemUpCisJCQlyZXR1cm47CisKKwkJaGVhZGVyID0gKGpvdXJuYWxfaGVhZGVyX3QgKikgYnVmOworCisJCW1hZ2ljID0gYmUzMl90b19jcHUoaGVhZGVyLT5oX21hZ2ljKTsKKwkJc2VxdWVuY2UgPSBiZTMyX3RvX2NwdShoZWFkZXItPmhfc2VxdWVuY2UpOworCQlibG9ja3R5cGUgPSBiZTMyX3RvX2NwdShoZWFkZXItPmhfYmxvY2t0eXBlKTsKKworCQlpZiAobWFnaWMgIT0gSkZTX01BR0lDX05VTUJFUikgeworCQkJZnByaW50ZiAob3V0X2ZpbGUsICJObyBtYWdpYyBudW1iZXIgYXQgYmxvY2sgJXU6ICIKKwkJCQkgImVuZCBvZiBqb3VybmFsLlxuIiwgYmxvY2tucik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc2VxdWVuY2UgIT0gdHJhbnNhY3Rpb24pIHsKKwkJCWZwcmludGYgKG91dF9maWxlLCAiRm91bmQgc2VxdWVuY2UgJXUgKG5vdCAldSkgYXQgIgorCQkJCSAiYmxvY2sgJXU6IGVuZCBvZiBqb3VybmFsLlxuIiwKKwkJCQkgc2VxdWVuY2UsIHRyYW5zYWN0aW9uLCBibG9ja25yKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChkdW1wX2Rlc2NyaXB0b3JzKSB7CisJCQlmcHJpbnRmIChvdXRfZmlsZSwgIkZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlICV1LCAiCisJCQkJICJ0eXBlICV1ICglcykgYXQgYmxvY2sgJXVcbiIsCisJCQkJIHNlcXVlbmNlLCBibG9ja3R5cGUsCisJCQkJIHR5cGVfdG9fbmFtZShibG9ja3R5cGUpLCBibG9ja25yKTsKKwkJfQorCisJCXN3aXRjaCAoYmxvY2t0eXBlKSB7CisJCWNhc2UgSkZTX0RFU0NSSVBUT1JfQkxPQ0s6CisJCQlkdW1wX2Rlc2NyaXB0b3JfYmxvY2sob3V0X2ZpbGUsIHNvdXJjZSwgYnVmLCBqc2IsCisJCQkJCSAgICAgICZibG9ja25yLCBibG9ja3NpemUsCisJCQkJCSAgICAgIHRyYW5zYWN0aW9uKTsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgSkZTX0NPTU1JVF9CTE9DSzoKKwkJCXRyYW5zYWN0aW9uKys7CisJCQlibG9ja25yKys7CisJCQlXUkFQKGpzYiwgYmxvY2tucik7CisJCQljb250aW51ZTsKKworCQljYXNlIEpGU19SRVZPS0VfQkxPQ0s6CisJCQlkdW1wX3Jldm9rZV9ibG9jayhvdXRfZmlsZSwgYnVmLCBqc2IsCisJCQkJCSAgYmxvY2tuciwgYmxvY2tzaXplLAorCQkJCQkgIHRyYW5zYWN0aW9uKTsKKwkJCWJsb2NrbnIrKzsKKwkJCVdSQVAoanNiLCBibG9ja25yKTsKKwkJCWNvbnRpbnVlOworCisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmIChvdXRfZmlsZSwgIlVuZXhwZWN0ZWQgYmxvY2sgdHlwZSAldSBhdCAiCisJCQkJICJibG9jayAldS5cbiIsIGJsb2NrdHlwZSwgYmxvY2tucik7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgZHVtcF9kZXNjcmlwdG9yX2Jsb2NrKEZJTEUgKm91dF9maWxlLAorCQkJCSAgc3RydWN0IGpvdXJuYWxfc291cmNlICpzb3VyY2UsCisJCQkJICBjaGFyICpidWYsCisJCQkJICBqb3VybmFsX3N1cGVyYmxvY2tfdCAqanNiLAorCQkJCSAgdW5zaWduZWQgaW50ICpibG9ja3AsIGludCBibG9ja3NpemUsCisJCQkJICB0aWRfdCB0cmFuc2FjdGlvbikKK3sKKwlpbnQJCQlvZmZzZXQsIHRhZ19zaXplID0gSkJEX1RBR19TSVpFMzI7CisJY2hhcgkJCSp0YWdwOworCWpvdXJuYWxfYmxvY2tfdGFnX3QJKnRhZzsKKwl1bnNpZ25lZCBpbnQJCWJsb2NrbnI7CisJX191MzIJCQl0YWdfYmxvY2s7CisJX191MzIJCQl0YWdfZmxhZ3M7CisKKwlpZiAoYmUzMl90b19jcHUoanNiLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYgSkZTX0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCXRhZ19zaXplID0gSkJEX1RBR19TSVpFNjQ7CisKKwlvZmZzZXQgPSBzaXplb2Yoam91cm5hbF9oZWFkZXJfdCk7CisJYmxvY2tuciA9ICpibG9ja3A7CisKKwlpZiAoZHVtcF9hbGwpCisJCWZwcmludGYob3V0X2ZpbGUsICJEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlICV1LCBhdCAiCisJCQkiYmxvY2sgJXU6XG4iLCB0cmFuc2FjdGlvbiwgYmxvY2tucik7CisKKwkrK2Jsb2NrbnI7CisJV1JBUChqc2IsIGJsb2NrbnIpOworCisJZG8geworCQkvKiBXb3JrIG91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgdGFnLCBhbmQgc2tpcCB0bworCQkgKiB0aGUgbmV4dCBvbmUuLi4gKi8KKwkJdGFncCA9ICZidWZbb2Zmc2V0XTsKKwkJdGFnID0gKGpvdXJuYWxfYmxvY2tfdGFnX3QgKikgdGFncDsKKwkJb2Zmc2V0ICs9IHRhZ19zaXplOworCisJCS8qIC4uLiBhbmQgaWYgd2UgaGF2ZSBnb25lIHRvbyBmYXIsIHRoZW4gd2UndmUgcmVhY2hlZCB0aGUKKwkJICAgZW5kIG9mIHRoaXMgYmxvY2suICovCisJCWlmIChvZmZzZXQgPiBibG9ja3NpemUpCisJCQlicmVhazsKKworCQl0YWdfYmxvY2sgPSBiZTMyX3RvX2NwdSh0YWctPnRfYmxvY2tucik7CisJCXRhZ19mbGFncyA9IGJlMzJfdG9fY3B1KHRhZy0+dF9mbGFncyk7CisKKwkJaWYgKCEodGFnX2ZsYWdzICYgSkZTX0ZMQUdfU0FNRV9VVUlEKSkKKwkJCW9mZnNldCArPSAxNjsKKworCQlkdW1wX21ldGFkYXRhX2Jsb2NrKG91dF9maWxlLCBzb3VyY2UsIGpzYiwKKwkJCQkgICAgYmxvY2tuciwgdGFnX2Jsb2NrLCB0YWdfZmxhZ3MsIGJsb2Nrc2l6ZSwKKwkJCQkgICAgdHJhbnNhY3Rpb24pOworCisJCSsrYmxvY2tucjsKKwkJV1JBUChqc2IsIGJsb2NrbnIpOworCisJfSB3aGlsZSAoISh0YWdfZmxhZ3MgJiBKRlNfRkxBR19MQVNUX1RBRykpOworCisJKmJsb2NrcCA9IGJsb2NrbnI7Cit9CisKKworc3RhdGljIHZvaWQgZHVtcF9yZXZva2VfYmxvY2soRklMRSAqb3V0X2ZpbGUsIGNoYXIgKmJ1ZiwKKwkJCSAgICAgIGpvdXJuYWxfc3VwZXJibG9ja190ICpqc2IgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJsb2NrbnIsCisJCQkgICAgICBpbnQgYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIHRpZF90IHRyYW5zYWN0aW9uKQoreworCWludAkJCW9mZnNldCwgbWF4OworCWpvdXJuYWxfcmV2b2tlX2hlYWRlcl90ICpoZWFkZXI7CisJdW5zaWduZWQgaW50CQkqZW50cnksIHJibG9jazsKKworCWlmIChkdW1wX2FsbCkKKwkJZnByaW50ZihvdXRfZmlsZSwgIkR1bXBpbmcgcmV2b2tlIGJsb2NrLCBzZXF1ZW5jZSAldSwgYXQgIgorCQkJImJsb2NrICV1OlxuIiwgdHJhbnNhY3Rpb24sIGJsb2NrbnIpOworCisJaGVhZGVyID0gKGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90ICopIGJ1ZjsKKwlvZmZzZXQgPSBzaXplb2Yoam91cm5hbF9yZXZva2VfaGVhZGVyX3QpOworCW1heCA9IGJlMzJfdG9fY3B1KGhlYWRlci0+cl9jb3VudCk7CisKKwl3aGlsZSAob2Zmc2V0IDwgbWF4KSB7CisJCWVudHJ5ID0gKHVuc2lnbmVkIGludCAqKSAoYnVmICsgb2Zmc2V0KTsKKwkJcmJsb2NrID0gYmUzMl90b19jcHUoKmVudHJ5KTsKKwkJaWYgKGR1bXBfYWxsIHx8IHJibG9jayA9PSBibG9ja190b19kdW1wKSB7CisJCQlmcHJpbnRmKG91dF9maWxlLCAiICBSZXZva2UgRlMgYmxvY2sgJXUiLCByYmxvY2spOworCQkJaWYgKGR1bXBfYWxsKQorCQkJCWZwcmludGYob3V0X2ZpbGUsICJcbiIpOworCQkJZWxzZQorCQkJCWZwcmludGYob3V0X2ZpbGUsIiBhdCBibG9jayAldSwgc2VxdWVuY2UgJXVcbiIsCisJCQkJCWJsb2NrbnIsIHRyYW5zYWN0aW9uKTsKKwkJfQorCQlvZmZzZXQgKz0gNDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc2hvd19leHRlbnQoRklMRSAqb3V0X2ZpbGUsIGludCBzdGFydF9leHRlbnQsIGludCBlbmRfZXh0ZW50LAorCQkJX191MzIgZmlyc3RfYmxvY2spCit7CisJaWYgKHN0YXJ0X2V4dGVudCA+PSAwICYmIGZpcnN0X2Jsb2NrICE9IDApCisJCWZwcmludGYob3V0X2ZpbGUsICIoJWQrJXUpOiAldSAiLAorCQkJc3RhcnRfZXh0ZW50LCBlbmRfZXh0ZW50LXN0YXJ0X2V4dGVudCwgZmlyc3RfYmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzaG93X2luZGlyZWN0KEZJTEUgKm91dF9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBfX3UzMiB3aGVyZSkKK3sKKwlpZiAod2hlcmUpCisJCWZwcmludGYob3V0X2ZpbGUsICIoJXMpOiAldSAiLCBuYW1lLCB3aGVyZSk7Cit9CisKKworc3RhdGljIHZvaWQgZHVtcF9tZXRhZGF0YV9ibG9jayhGSUxFICpvdXRfZmlsZSwgc3RydWN0IGpvdXJuYWxfc291cmNlICpzb3VyY2UsCisJCQkJam91cm5hbF9zdXBlcmJsb2NrX3QgKmpzYiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJdW5zaWduZWQgaW50IGxvZ19ibG9ja25yLAorCQkJCXVuc2lnbmVkIGludCBmc19ibG9ja25yLAorCQkJCXVuc2lnbmVkIGludCBsb2dfdGFnX2ZsYWdzLAorCQkJCWludCBibG9ja3NpemUsCisJCQkJdGlkX3QgdHJhbnNhY3Rpb24pCit7CisJdW5zaWduZWQgaW50IAlnb3Q7CisJaW50CQlyZXR2YWw7CisJY2hhciAJCWJ1Zls4MTkyXTsKKworCWlmICghKGR1bXBfYWxsCisJICAgICAgfHwgKGZzX2Jsb2NrbnIgPT0gYmxvY2tfdG9fZHVtcCkKKwkgICAgICB8fCAoZnNfYmxvY2tuciA9PSBpbm9kZV9ibG9ja190b19kdW1wKQorCSAgICAgIHx8IChmc19ibG9ja25yID09IGJpdG1hcF90b19kdW1wKSkpCisJCXJldHVybjsKKworCWZwcmludGYob3V0X2ZpbGUsICIgIEZTIGJsb2NrICV1IGxvZ2dlZCBhdCAiLCBmc19ibG9ja25yKTsKKwlpZiAoIWR1bXBfYWxsKQorCQlmcHJpbnRmKG91dF9maWxlLCAic2VxdWVuY2UgJXUsICIsIHRyYW5zYWN0aW9uKTsKKwlmcHJpbnRmKG91dF9maWxlLCAiam91cm5hbCBibG9jayAldSAoZmxhZ3MgMHgleClcbiIsIGxvZ19ibG9ja25yLAorCQlsb2dfdGFnX2ZsYWdzKTsKKworCS8qIFRoZXJlIGFyZSB0d28gbWFqb3Igc3BlY2lhbCBjYXNlcyB0byBwYXJzZToKKwkgKgorCSAqIElmIHRoaXMgYmxvY2sgaXMgYSBibG9jaworCSAqIGJpdG1hcCBibG9jaywgd2UgbmVlZCB0byBnaXZlIGl0IHNwZWNpYWwgdHJlYXRtZW50IHNvIHRoYXQgd2UKKwkgKiBjYW4gbG9nIGFueSBhbGxvY2F0ZXMgYW5kIGRlYWxsb2NhdGVzIHdoaWNoIGFmZmVjdCB0aGUKKwkgKiBibG9ja190b19kdW1wIHF1ZXJ5IGJsb2NrLgorCSAqCisJICogSWYgdGhlIGJsb2NrIGlzIGFuIGlub2RlIGJsb2NrIGZvciB0aGUgaW5vZGUgYmVpbmcgc2VhcmNoZWQKKwkgKiBmb3IsIHRoZW4gd2UgbmVlZCB0byBkdW1wIHRoZSBjb250ZW50cyBvZiB0aGF0IGlub2RlCisJICogc3RydWN0dXJlIHN5bWJvbGljYWxseS4KKwkgKi8KKworCWlmICghKGR1bXBfY29udGVudHMgJiYgZHVtcF9hbGwpCisJICAgICYmIGZzX2Jsb2NrbnIgIT0gYmxvY2tfdG9fZHVtcAorCSAgICAmJiBmc19ibG9ja25yICE9IGJpdG1hcF90b19kdW1wCisJICAgICYmIGZzX2Jsb2NrbnIgIT0gaW5vZGVfYmxvY2tfdG9fZHVtcCkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gcmVhZF9qb3VybmFsX2Jsb2NrKCJsb2dkdW1wIiwgc291cmNlLAorCQkJCSAgICBibG9ja3NpemUgKiBsb2dfYmxvY2tuciwKKwkJCQkgICAgYnVmLCBibG9ja3NpemUsICZnb3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKworCWlmIChmc19ibG9ja25yID09IGJpdG1hcF90b19kdW1wKSB7CisJCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcjsKKwkJaW50IG9mZnNldDsKKworCQlzdXBlciA9IGN1cnJlbnRfZnMtPnN1cGVyOworCQlvZmZzZXQgPSAoKGJsb2NrX3RvX2R1bXAgLSBzdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAlCisJCQkgIHN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCisJCWZwcmludGYob3V0X2ZpbGUsICIgICAgKGJsb2NrIGJpdG1hcCBmb3IgYmxvY2sgJWxsdTogIgorCQkJImJsb2NrIGlzICVzKVxuIiwKKwkJCWJsb2NrX3RvX2R1bXAsCisJCQlleHQyZnNfdGVzdF9iaXQob2Zmc2V0LCBidWYpID8gIlNFVCIgOiAiQ0xFQVIiKTsKKwl9CisKKwlpZiAoZnNfYmxvY2tuciA9PSBpbm9kZV9ibG9ja190b19kdW1wKSB7CisJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZTsKKwkJaW50IGZpcnN0LCBwcmV2LCB0aGlzLCBzdGFydF9leHRlbnQsIGk7CisKKwkJZnByaW50ZihvdXRfZmlsZSwgIiAgICAoaW5vZGUgYmxvY2sgZm9yIGlub2RlICV1KTpcbiIsCisJCQlpbm9kZV90b19kdW1wKTsKKworCQlpbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSAoYnVmICsgaW5vZGVfb2Zmc2V0X3RvX2R1bXApOworCQlpbnRlcm5hbF9kdW1wX2lub2RlKG91dF9maWxlLCAiICAgICIsIGlub2RlX3RvX2R1bXAsIGlub2RlLCAwKTsKKworCQkvKiBEdW1wIG91dCB0aGUgZGlyZWN0L2luZGlyZWN0IGJsb2NrcyBoZXJlOgorCQkgKiBpbnRlcm5hbF9kdW1wX2lub2RlIGNhbiBvbmx5IGR1bXAgdGhlbSBmcm9tIHRoZSBtYWluCisJCSAqIG9uLWRpc2sgaW5vZGUsIG5vdCBmcm9tIHRoZSBqb3VybmFsZWQgY29weSBvZiB0aGUKKwkJICogaW5vZGUuICovCisKKwkJZnByaW50ZiAob3V0X2ZpbGUsICIgICAgQmxvY2tzOiAgIik7CisJCWZpcnN0ID0gcHJldiA9IHN0YXJ0X2V4dGVudCA9IC0xOworCisJCWZvciAoaT0wOyBpPEVYVDJfTkRJUl9CTE9DS1M7IGkrKykgeworCQkJdGhpcyA9IGlub2RlLT5pX2Jsb2NrW2ldOworCQkJaWYgKHN0YXJ0X2V4dGVudCA+PSAwICAmJiB0aGlzID09IHByZXYrMSkgeworCQkJCXByZXYgPSB0aGlzOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlzaG93X2V4dGVudChvdXRfZmlsZSwgc3RhcnRfZXh0ZW50LCBpLCBmaXJzdCk7CisJCQkJc3RhcnRfZXh0ZW50ID0gaTsKKwkJCQlmaXJzdCA9IHByZXYgPSB0aGlzOworCQkJfQorCQl9CisJCXNob3dfZXh0ZW50KG91dF9maWxlLCBzdGFydF9leHRlbnQsIGksIGZpcnN0KTsKKwkJc2hvd19pbmRpcmVjdChvdXRfZmlsZSwgIklORCIsIGlub2RlLT5pX2Jsb2NrW2krK10pOworCQlzaG93X2luZGlyZWN0KG91dF9maWxlLCAiRElORCIsIGlub2RlLT5pX2Jsb2NrW2krK10pOworCQlzaG93X2luZGlyZWN0KG91dF9maWxlLCAiVElORCIsIGlub2RlLT5pX2Jsb2NrW2krK10pOworCisJCWZwcmludGYob3V0X2ZpbGUsICJcbiIpOworCX0KKworCWlmIChkdW1wX2NvbnRlbnRzKQorCQlkb19oZXhkdW1wKG91dF9maWxlLCBidWYsIGJsb2Nrc2l6ZSk7CisKK30KKworc3RhdGljIHZvaWQgZG9faGV4ZHVtcCAoRklMRSAqb3V0X2ZpbGUsIGNoYXIgKmJ1ZiwgaW50IGJsb2Nrc2l6ZSkKK3sKKwlpbnQgaSxqOworCWludCAqaW50cDsKKwljaGFyICpjaGFycDsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlpbnRwID0gKGludCAqKSBidWY7CisJY2hhcnAgPSAoY2hhciAqKSBidWY7CisKKwlmb3IgKGk9MDsgaTxibG9ja3NpemU7IGkrPTE2KSB7CisJCWZwcmludGYob3V0X2ZpbGUsICIgICAgJTA0eDogICIsIGkpOworCQlmb3IgKGo9MDsgajwxNjsgais9NCkKKwkJCWZwcmludGYob3V0X2ZpbGUsICIlMDh4ICIsICppbnRwKyspOworCQlmb3IgKGo9MDsgajwxNjsgaisrKSB7CisJCQljID0gKmNoYXJwKys7CisJCQlpZiAoYyA8ICcgJyB8fCBjID49IDEyNykKKwkJCQljID0gJy4nOworCQkJZnByaW50ZihvdXRfZmlsZSwgIiVjIiwgYyk7CisJCX0KKwkJZnByaW50ZihvdXRfZmlsZSwgIlxuIik7CisJfQorfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy9scy5jIGIvZTJmc3Byb2dzL2RlYnVnZnMvbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFlOTZlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvbHMuYwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIGxzLmMgLS0tIGxpc3QgZGlyZWN0b3JpZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImRlYnVnZnMuaCIKKworLyoKKyAqIGxpc3QgZGlyZWN0b3J5CisgKi8KKworI2RlZmluZSBMT05HX09QVAkweDAwMDEKKyNkZWZpbmUgREVMRVRFRF9PUFQJMHgwMDAyCisjZGVmaW5lIFBBUlNFX09QVAkweDAwMDQKKworc3RydWN0IGxpc3RfZGlyX3N0cnVjdCB7CisJRklMRQkqZjsKKwlpbnQJY29sOworCWludAlvcHRpb25zOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1vbnN0cltdID0geyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorCQkJCSJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJ9OworCitzdGF0aWMgaW50IGxpc3RfZGlyX3Byb2MoZXh0Ml9pbm9fdCBkaXIgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIGludAllbnRyeSwKKwkJCSBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCSBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBpbnQJYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIHZvaWQJKnByaXZhdGUpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXh0Ml9pbm9fdAkJaW5vOworCXN0cnVjdCB0bQkJKnRtX3A7CisJdGltZV90CQkJbW9kdGltZTsKKwljaGFyCQkJbmFtZVtFWFQyX05BTUVfTEVOICsgMV07CisJY2hhcgkJCXRtcFtFWFQyX05BTUVfTEVOICsgMTZdOworCWNoYXIJCQlkYXRlc3RyWzgwXTsKKwljaGFyCQkJbGJyLCByYnI7CisJaW50CQkJdGhpc2xlbjsKKwlzdHJ1Y3QgbGlzdF9kaXJfc3RydWN0ICpscyA9IChzdHJ1Y3QgbGlzdF9kaXJfc3RydWN0ICopIHByaXZhdGU7CisKKwl0aGlzbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisJc3RybmNweShuYW1lLCBkaXJlbnQtPm5hbWUsIHRoaXNsZW4pOworCW5hbWVbdGhpc2xlbl0gPSAnXDAnOworCWlubyA9IGRpcmVudC0+aW5vZGU7CisKKwlpZiAoZW50cnkgPT0gRElSRU5UX0RFTEVURURfRklMRSkgeworCQlsYnIgPSAnPCc7CisJCXJiciA9ICc+JzsKKwkJaW5vID0gMDsKKwl9IGVsc2UgeworCQlsYnIgPSByYnIgPSAnICc7CisJfQorCWlmIChscy0+b3B0aW9ucyAmIFBBUlNFX09QVCkgeworCQlpZiAoaW5vKSB7CisJCQlpZiAoZGVidWdmc19yZWFkX2lub2RlKGlubywgJmlub2RlLCBuYW1lKSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJZnByaW50Zihscy0+ZiwiLyV1LyUwNm8vJWQvJWQvJXMvIixpbm8saW5vZGUuaV9tb2RlLGlub2RlLmlfdWlkLCBpbm9kZS5pX2dpZCxuYW1lKTsKKwkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkKKwkJCWZwcmludGYobHMtPmYsICIvIik7CisJCWVsc2UKKwkJCWZwcmludGYobHMtPmYsICIlbGxkLyIsIEVYVDJfSV9TSVpFKCZpbm9kZSkpOworCQlmcHJpbnRmKGxzLT5mLCAiXG4iKTsKKwl9IGVsc2UgaWYgKGxzLT5vcHRpb25zICYgTE9OR19PUFQpIHsKKwkJaWYgKGlubykgeworCQkJaWYgKGRlYnVnZnNfcmVhZF9pbm9kZShpbm8sICZpbm9kZSwgbmFtZSkpCisJCQkJcmV0dXJuIDA7CisJCQltb2R0aW1lID0gaW5vZGUuaV9tdGltZTsKKwkJCXRtX3AgPSBsb2NhbHRpbWUoJm1vZHRpbWUpOworCQkJc3ByaW50ZihkYXRlc3RyLCAiJTJkLSVzLSU0ZCAlMDJkOiUwMmQiLAorCQkJCXRtX3AtPnRtX21kYXksIG1vbnN0clt0bV9wLT50bV9tb25dLAorCQkJCTE5MDAgKyB0bV9wLT50bV95ZWFyLCB0bV9wLT50bV9ob3VyLAorCQkJCXRtX3AtPnRtX21pbik7CisJCX0gZWxzZSB7CisJCQlzdHJjcHkoZGF0ZXN0ciwgIiAgICAgICAgICAgICAgICAgIik7CisJCQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJfQorCQlmcHJpbnRmKGxzLT5mLCAiJWMlNnUlYyAlNm8gKCVkKSAgJTVkICAlNWQgICAiLCBsYnIsIGlubywgcmJyLAorCQkJaW5vZGUuaV9tb2RlLCBkaXJlbnQtPm5hbWVfbGVuID4+IDgsCisJCQlpbm9kZV91aWQoaW5vZGUpLCBpbm9kZV9naWQoaW5vZGUpKTsKKwkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkKKwkJCWZwcmludGYobHMtPmYsICIlNWQiLCBpbm9kZS5pX3NpemUpOworCQllbHNlCisJCQlmcHJpbnRmKGxzLT5mLCAiJTVsbHUiLCBFWFQyX0lfU0laRSgmaW5vZGUpKTsKKwkJZnByaW50ZiAobHMtPmYsICIgJXMgJXNcbiIsIGRhdGVzdHIsIG5hbWUpOworCX0gZWxzZSB7CisJCXNwcmludGYodG1wLCAiJWMldSVjICglZCkgJXMgICAiLCBsYnIsIGRpcmVudC0+aW5vZGUsIHJiciwKKwkJCWRpcmVudC0+cmVjX2xlbiwgbmFtZSk7CisJCXRoaXNsZW4gPSBzdHJsZW4odG1wKTsKKworCQlpZiAobHMtPmNvbCArIHRoaXNsZW4gPiA4MCkgeworCQkJZnByaW50Zihscy0+ZiwgIlxuIik7CisJCQlscy0+Y29sID0gMDsKKwkJfQorCQlmcHJpbnRmKGxzLT5mLCAiJXMiLCB0bXApOworCQlscy0+Y29sICs9IHRoaXNsZW47CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGRvX2xpc3RfZGlyKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXh0Ml9pbm9fdAlpbm9kZTsKKwlpbnQJCXJldHZhbDsKKwlpbnQJCWM7CisJaW50CQlmbGFnczsKKwlzdHJ1Y3QgbGlzdF9kaXJfc3RydWN0IGxzOworCisJbHMub3B0aW9ucyA9IDA7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXJlc2V0X2dldG9wdCgpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImRscCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2wnOgorCQkJbHMub3B0aW9ucyB8PSBMT05HX09QVDsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWxzLm9wdGlvbnMgfD0gREVMRVRFRF9PUFQ7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlscy5vcHRpb25zIHw9IFBBUlNFX09QVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKworCWlmIChhcmdjID4gb3B0aW5kKzEpIHsKKwlwcmludF91c2FnZToKKwkJY29tX2VycigwLCAwLCAiVXNhZ2U6IGxzIFstbF0gWy1kXSBbLXBdIGZpbGUiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdjID09IG9wdGluZCkKKwkJaW5vZGUgPSBjd2Q7CisJZWxzZQorCQlpbm9kZSA9IHN0cmluZ190b19pbm9kZShhcmd2W29wdGluZF0pOworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCWxzLmYgPSBvcGVuX3BhZ2VyKCk7CisJbHMuY29sID0gMDsKKwlmbGFncyA9IERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFk7CisJaWYgKGxzLm9wdGlvbnMgJiBERUxFVEVEX09QVCkKKwkJZmxhZ3MgfD0gRElSRU5UX0ZMQUdfSU5DTFVERV9SRU1PVkVEOworCisJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlMihjdXJyZW50X2ZzLCBpbm9kZSwgZmxhZ3MsCisJCQkJICAgIDAsIGxpc3RfZGlyX3Byb2MsICZscyk7CisJZnByaW50Zihscy5mLCAiXG4iKTsKKwljbG9zZV9wYWdlcihscy5mKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKGFyZ3ZbMV0sIHJldHZhbCwgMCk7CisKKwlyZXR1cm47Cit9CisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvbHNkZWwuYyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2xzZGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjOGE4OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL2xzZGVsLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBsc2RlbC5jIC0tLSByb3V0aW5lcyB0byB0cnkgdG8gaGVscCBhIHVzZXIgcmVjb3ZlciBhIGRlbGV0ZWQgZmlsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKKyAqIFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCitzdHJ1Y3QgZGVsZXRlZF9pbmZvIHsKKwlleHQyX2lub190CWlubzsKKwl1bnNpZ25lZCBzaG9ydAltb2RlOworCV9fdTMyCQl1aWQ7CisJX191NjQJCXNpemU7CisJdGltZV90CQlkdGltZTsKKwllMl9ibGtjbnRfdAludW1fYmxvY2tzOworCWUyX2Jsa2NudF90CWZyZWVfYmxvY2tzOworfTsKKworc3RydWN0IGxzZGVsX3N0cnVjdCB7CisJZXh0Ml9pbm9fdAkJaW5vZGU7CisJZTJfYmxrY250X3QJCW51bV9ibG9ja3M7CisJZTJfYmxrY250X3QJCWZyZWVfYmxvY2tzOworCWUyX2Jsa2NudF90CQliYWRfYmxvY2tzOworfTsKKworc3RhdGljIGludCBkZWxldGVkX2luZm9fY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBkZWxldGVkX2luZm8gKmFyZzEsICphcmcyOworCisJYXJnMSA9IChjb25zdCBzdHJ1Y3QgZGVsZXRlZF9pbmZvICopIGE7CisJYXJnMiA9IChjb25zdCBzdHJ1Y3QgZGVsZXRlZF9pbmZvICopIGI7CisKKwlyZXR1cm4gYXJnMS0+ZHRpbWUgLSBhcmcyLT5kdGltZTsKK30KKworc3RhdGljIGludCBsc2RlbF9wcm9jKGV4dDJfZmlsc3lzIGZzLAorCQkgICAgICBibGs2NF90CSpibG9ja19uciwKKwkJICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgbHNkZWxfc3RydWN0ICpsc2QgPSAoc3RydWN0IGxzZGVsX3N0cnVjdCAqKSBwcml2YXRlOworCisJbHNkLT5udW1fYmxvY2tzKys7CisKKwlpZiAoKmJsb2NrX25yIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgfHwKKwkgICAgKmJsb2NrX25yID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgeworCQlsc2QtPmJhZF9ibG9ja3MrKzsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCpibG9ja19ucikpCisJCWxzZC0+ZnJlZV9ibG9ja3MrKzsKKworCXJldHVybiAwOworfQorCit2b2lkIGRvX2xzZGVsKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgbHNkZWxfc3RydWN0IAlsc2Q7CisJc3RydWN0IGRlbGV0ZWRfaW5mbwkqZGVsYXJyYXk7CisJaW50CQkJbnVtX2RlbGFycmF5LCBtYXhfZGVsYXJyYXk7CisJZXh0Ml9pbm9kZV9zY2FuCQlzY2FuID0gMDsKKwlleHQyX2lub190CQlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY2hhcgkJCSpibG9ja19idWY7CisJaW50CQkJaTsKKyAJbG9uZwkJCXNlY3MgPSAwOworIAljaGFyCQkJKnRtcDsKKwl0aW1lX3QJCQlub3c7CisJRklMRQkJCSpvdXQ7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAyLCAibGlzdF9kZWxldGVkX2lub2RlcyIsCisJCQkJIltzZWNzXSIsIDApKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJc2VjcyA9IHN0cnRvbChhcmd2WzFdLCZ0bXAsMCk7CisJCWlmICgqdG1wKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJCYWQgdGltZSAtICVzIixhcmd2WzFdKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW5vdyA9IGN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisJbWF4X2RlbGFycmF5ID0gMTAwOworCW51bV9kZWxhcnJheSA9IDA7CisJZGVsYXJyYXkgPSBtYWxsb2MobWF4X2RlbGFycmF5ICogc2l6ZW9mKHN0cnVjdCBkZWxldGVkX2luZm8pKTsKKwlpZiAoIWRlbGFycmF5KSB7CisJCWNvbV9lcnIoImxzX2RlbGV0ZWRfaW5vZGVzIiwgRU5PTUVNLAorCQkJIndoaWxlIGFsbG9jYXRpbmcgZGVsZXRlZCBpbmZvcm1hdGlvbiBzdG9yYWdlIik7CisJCWV4aXQoMSk7CisJfQorCisJYmxvY2tfYnVmID0gbWFsbG9jKGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSAqIDMpOworCWlmICghYmxvY2tfYnVmKSB7CisJCWNvbV9lcnIoImxzX2RlbGV0ZWRfaW5vZGVzIiwgRU5PTUVNLCAid2hpbGUgYWxsb2NhdGluZyBibG9jayBidWZmZXIiKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX29wZW5faW5vZGVfc2NhbihjdXJyZW50X2ZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJsc19kZWxldGVkX2lub2RlcyIsIHJldHZhbCwKKwkJCSJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJZG8geworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwl9IHdoaWxlIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigibHNfZGVsZXRlZF9pbm9kZXMiLCByZXR2YWwsCisJCQkid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwl3aGlsZSAoaW5vKSB7CisJCWlmICgoaW5vZGUuaV9kdGltZSA9PSAwKSB8fAorCQkgICAgKHNlY3MgJiYgKCh1bnNpZ25lZCkgYWJzKG5vdyAtIHNlY3MpID4gaW5vZGUuaV9kdGltZSkpKQorCQkJZ290byBuZXh0OworCisJCWxzZC5pbm9kZSA9IGlubzsKKwkJbHNkLm51bV9ibG9ja3MgPSAwOworCQlsc2QuZnJlZV9ibG9ja3MgPSAwOworCQlsc2QuYmFkX2Jsb2NrcyA9IDA7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGN1cnJlbnRfZnMsIGlubywKKwkJCQkJICAgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBibG9ja19idWYsCisJCQkJCSAgICAgICBsc2RlbF9wcm9jLCAmbHNkKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigibHNfZGVsZXRlZF9pbm9kZXMiLCByZXR2YWwsCisJCQkJIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyIik7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJaWYgKGxzZC5mcmVlX2Jsb2NrcyAmJiAhbHNkLmJhZF9ibG9ja3MpIHsKKwkJCWlmIChudW1fZGVsYXJyYXkgPj0gbWF4X2RlbGFycmF5KSB7CisJCQkJbWF4X2RlbGFycmF5ICs9IDUwOworCQkJCWRlbGFycmF5ID0gcmVhbGxvYyhkZWxhcnJheSwKKwkJCSAgIG1heF9kZWxhcnJheSAqIHNpemVvZihzdHJ1Y3QgZGVsZXRlZF9pbmZvKSk7CisJCQkJaWYgKCFkZWxhcnJheSkgeworCQkJCQljb21fZXJyKCJsc19kZWxldGVkX2lub2RlcyIsCisJCQkJCQlFTk9NRU0sCisJCQkJCQkid2hpbGUgcmVhbGxvY2F0aW5nIGFycmF5Iik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJfQorCisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLmlubyA9IGlubzsKKwkJCWRlbGFycmF5W251bV9kZWxhcnJheV0ubW9kZSA9IGlub2RlLmlfbW9kZTsKKwkJCWRlbGFycmF5W251bV9kZWxhcnJheV0udWlkID0gaW5vZGVfdWlkKGlub2RlKTsKKwkJCWRlbGFycmF5W251bV9kZWxhcnJheV0uc2l6ZSA9IEVYVDJfSV9TSVpFKCZpbm9kZSk7CisJCQlkZWxhcnJheVtudW1fZGVsYXJyYXldLmR0aW1lID0gaW5vZGUuaV9kdGltZTsKKwkJCWRlbGFycmF5W251bV9kZWxhcnJheV0ubnVtX2Jsb2NrcyA9IGxzZC5udW1fYmxvY2tzOworCQkJZGVsYXJyYXlbbnVtX2RlbGFycmF5XS5mcmVlX2Jsb2NrcyA9IGxzZC5mcmVlX2Jsb2NrczsKKwkJCW51bV9kZWxhcnJheSsrOworCQl9CisKKwluZXh0OgorCQlkbyB7CisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwkJfSB3aGlsZSAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigibHNfZGVsZXRlZF9pbm9kZXMiLCByZXR2YWwsCisJCQkJIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJfQorCisJb3V0ID0gb3Blbl9wYWdlcigpOworCisJZnByaW50ZihvdXQsICIgSW5vZGUgIE93bmVyICBNb2RlICAgIFNpemUgICAgICBCbG9ja3MgICBUaW1lIGRlbGV0ZWRcbiIpOworCisJcXNvcnQoZGVsYXJyYXksIG51bV9kZWxhcnJheSwgc2l6ZW9mKHN0cnVjdCBkZWxldGVkX2luZm8pLAorCSAgICAgIGRlbGV0ZWRfaW5mb19jb21wYXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZGVsYXJyYXk7IGkrKykgeworCQlmcHJpbnRmKG91dCwgIiU2dSAlNmQgJTZvICU2bGx1ICU2bGxkLyU2bGxkICVzIiwKKwkJCWRlbGFycmF5W2ldLmlubywKKwkJCWRlbGFycmF5W2ldLnVpZCwgZGVsYXJyYXlbaV0ubW9kZSwgZGVsYXJyYXlbaV0uc2l6ZSwKKwkJCWRlbGFycmF5W2ldLmZyZWVfYmxvY2tzLCBkZWxhcnJheVtpXS5udW1fYmxvY2tzLAorCQkJdGltZV90b19zdHJpbmcoZGVsYXJyYXlbaV0uZHRpbWUpKTsKKwl9CisJZnByaW50ZihvdXQsICIlZCBkZWxldGVkIGlub2RlcyBmb3VuZC5cbiIsIG51bV9kZWxhcnJheSk7CisJY2xvc2VfcGFnZXIob3V0KTsKKworZXJyb3Jfb3V0OgorCWZyZWUoYmxvY2tfYnVmKTsKKwlmcmVlKGRlbGFycmF5KTsKKwlpZiAoc2NhbikKKwkJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJcmV0dXJuOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvbmNoZWNrLmMgYi9lMmZzcHJvZ3MvZGVidWdmcy9uY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZhYTYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvbmNoZWNrLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBuY2hlY2suYyAtLS0gZ2l2ZW4gYSBsaXN0IG9mIGlub2RlcywgZ2VuZXJhdGUgYSBsaXN0IG9mIG5hbWVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBvcHRpbmQ7CitleHRlcm4gY2hhciAqb3B0YXJnOworI2VuZGlmCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKK3N0cnVjdCBpbm9kZV93YWxrX3N0cnVjdCB7CisJZXh0Ml9pbm9fdAkJZGlyOworCWV4dDJfaW5vX3QJCSppYXJyYXk7CisJaW50CQkJaW5vZGVzX2xlZnQ7CisJaW50CQkJbnVtX2lub2RlczsKKwlpbnQJCQlwb3NpdGlvbjsKKwljaGFyCQkJKnBhcmVudDsKKwl1bnNpZ25lZCBpbnQJCWdldF9wYXRobmFtZV9mYWlsZWQ6MTsKKwl1bnNpZ25lZCBpbnQJCWNoZWNrX2RpcmVudDoxOworfTsKKworc3RhdGljIGludCBuY2hlY2tfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICAgIGludAlvZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgICBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgdm9pZAkqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgaW5vZGVfd2Fsa19zdHJ1Y3QgKml3ID0gKHN0cnVjdCBpbm9kZV93YWxrX3N0cnVjdCAqKSBwcml2YXRlOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlmaWxldHlwZSA9IGRpcmVudC0+bmFtZV9sZW4gPj4gODsKKwlpbnQJCWk7CisKKwlpdy0+cG9zaXRpb24rKzsKKwlpZiAoaXctPnBvc2l0aW9uIDw9IDIpCisJCXJldHVybiAwOworCWZvciAoaT0wOyBpIDwgaXctPm51bV9pbm9kZXM7IGkrKykgeworCQlpZiAoaXctPmlhcnJheVtpXSA9PSBkaXJlbnQtPmlub2RlKSB7CisJCQlpZiAoIWl3LT5wYXJlbnQgJiYgIWl3LT5nZXRfcGF0aG5hbWVfZmFpbGVkKSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZShjdXJyZW50X2ZzLAorCQkJCQkJCSAgICAgaXctPmRpciwKKwkJCQkJCQkgICAgIDAsICZpdy0+cGFyZW50KTsKKwkJCQlpZiAocmV0dmFsKSB7CisJCQkJCWNvbV9lcnIoIm5jaGVjayIsIHJldHZhbCwKKwkJIndoaWxlIGNhbGxpbmcgZXh0MmZzX2dldF9wYXRobmFtZSBmb3IgaW5vZGUgIyV1IiwgaXctPmRpcik7CisJCQkJCWl3LT5nZXRfcGF0aG5hbWVfZmFpbGVkID0gMTsKKwkJCQl9CisJCQl9CisJCQlpZiAoaXctPnBhcmVudCkKKwkJCQlwcmludGYoIiV1XHQlcy8lLipzIiwgaXctPmlhcnJheVtpXSwKKwkJCQkgICAgICAgaXctPnBhcmVudCwKKwkJCQkgICAgICAgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSwgZGlyZW50LT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiV1XHQ8JXU+LyUuKnMiLCBpdy0+aWFycmF5W2ldLAorCQkJCSAgICAgICBpdy0+ZGlyLAorCQkJCSAgICAgICAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpLCBkaXJlbnQtPm5hbWUpOworCQkJaWYgKGl3LT5jaGVja19kaXJlbnQgJiYgZmlsZXR5cGUpIHsKKwkJCQlpZiAoIWRlYnVnZnNfcmVhZF9pbm9kZShkaXJlbnQtPmlub2RlLCAmaW5vZGUsCisJCQkJCQkJIm5jaGVjayIpICYmCisJCQkJICAgIGZpbGV0eXBlICE9IGV4dDJfZmlsZV90eXBlKGlub2RlLmlfbW9kZSkpIHsKKwkJCQkJcHJpbnRmKCIgIDwtLS0gQkFEIEZJTEVUWVBFIik7CisJCQkJfQorCQkJfQorCQkJcHV0YygnXG4nLCBzdGRvdXQpOworCQl9CisJfQorCWlmICghaXctPmlub2Rlc19sZWZ0KQorCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZG9fbmNoZWNrKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgaW5vZGVfd2Fsa19zdHJ1Y3QgaXc7CisJaW50CQkJYywgaTsKKwlleHQyX2lub2RlX3NjYW4JCXNjYW4gPSAwOworCWV4dDJfaW5vX3QJCWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKnRtcDsKKworCWl3LmNoZWNrX2RpcmVudCA9IDA7CisKKwlyZXNldF9nZXRvcHQoKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJjIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYyc6CisJCQlpdy5jaGVja19kaXJlbnQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHByaW50X3VzYWdlOworCQl9CisJfQorCWFyZ2MgLT0gb3B0aW5kOworCWFyZ3YgKz0gb3B0aW5kOworCisJaWYgKGFyZ2MgPCAxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBuY2hlY2sgWy1jXSA8aW5vZGUgbnVtYmVyPiAuLi4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaXcuaWFycmF5ID0gbWFsbG9jKHNpemVvZihleHQyX2lub190KSAqIGFyZ2MpOworCWlmICghaXcuaWFycmF5KSB7CisJCWNvbV9lcnIoIm5jaGVjayIsIEVOT01FTSwKKwkJCSJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIG51bWJlciBhcnJheSIpOworCQlyZXR1cm47CisJfQorCW1lbXNldChpdy5pYXJyYXksIDAsIHNpemVvZihleHQyX2lub190KSAqIGFyZ2MpOworCisJZm9yIChpPTA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaXcuaWFycmF5W2ldID0gc3RydG9sKGFyZ3ZbaV0sICZ0bXAsIDApOworCQlpZiAoKnRtcCkgeworCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiQmFkIGlub2RlIC0gJXMiLCBhcmd2W2ldKTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJfQorCisJaXcubnVtX2lub2RlcyA9IGl3Lmlub2Rlc19sZWZ0ID0gYXJnYzsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oY3VycmVudF9mcywgMCwgJnNjYW4pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigibmNoZWNrIiwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWRvIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJfSB3aGlsZSAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoIm5jaGVjayIsIHJldHZhbCwgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iKTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJcHJpbnRmKCJJbm9kZVx0UGF0aG5hbWVcbiIpOworCXdoaWxlIChpbm8pIHsKKwkJaWYgKCFpbm9kZS5pX2xpbmtzX2NvdW50KQorCQkJZ290byBuZXh0OworCQkvKgorCQkgKiBUbyBoYW5kbGUgZmlsZXN5c3RlbXMgdG91Y2hlZCBieSAwLjNjIGV4dGZzOyBjYW4gYmUKKwkJICogcmVtb3ZlZCBsYXRlci4KKwkJICovCisJCWlmIChpbm9kZS5pX2R0aW1lKQorCQkJZ290byBuZXh0OworCQkvKiBJZ25vcmUgYW55dGhpbmcgdGhhdCBpc24ndCBhIGRpcmVjdG9yeSAqLworCQlpZiAoIUxJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpdy5wb3NpdGlvbiA9IDA7CisJCWl3LnBhcmVudCA9IDA7CisJCWl3LmRpciA9IGlubzsKKwkJaXcuZ2V0X3BhdGhuYW1lX2ZhaWxlZCA9IDA7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlKGN1cnJlbnRfZnMsIGlubywgMCwgMCwKKwkJCQkJICAgIG5jaGVja19wcm9jLCAmaXcpOworCQlleHQyZnNfZnJlZV9tZW0oJml3LnBhcmVudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoIm5jaGVjayIsIHJldHZhbCwKKwkJCQkid2hpbGUgY2FsbGluZyBleHQyX2Rpcl9pdGVyYXRlIik7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlpZiAoaXcuaW5vZGVzX2xlZnQgPT0gMCkKKwkJCWJyZWFrOworCisJbmV4dDoKKwkJZG8geworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCX0gd2hpbGUgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSk7CisKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigibmNoZWNrIiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIik7CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCX0KKworZXJyb3Jfb3V0OgorCWZyZWUoaXcuaWFycmF5KTsKKwlpZiAoc2NhbikKKwkJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJcmV0dXJuOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvcm9fZGVidWdfY21kcy5jdCBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL3JvX2RlYnVnX2NtZHMuY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNmQxYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL3JvX2RlYnVnX2NtZHMuY3QKQEAgLTAsMCArMSw5NCBAQAorIworIyBSZXN0cmljdGVkIHNldCBvZiBkZWJ1Z2ZzIGNvbW1hbmRzCisjCisjIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSBkZWJ1Z19jbWRzOworCityZXF1ZXN0IGRvX3Nob3dfZGVidWdmc19wYXJhbXMsICJTaG93IGRlYnVnZnMgcGFyYW1ldGVycyIsCisJc2hvd19kZWJ1Z2ZzX3BhcmFtcywgcGFyYW1zOworCityZXF1ZXN0IGRvX29wZW5fZmlsZXN5cywgIk9wZW4gYSBmaWxlc3lzdGVtIiwKKwlvcGVuX2ZpbGVzeXMsIG9wZW47CisKK3JlcXVlc3QgZG9fY2xvc2VfZmlsZXN5cywgIkNsb3NlIHRoZSBmaWxlc3lzdGVtIiwKKwljbG9zZV9maWxlc3lzLCBjbG9zZTsKKworcmVxdWVzdCBkb19mcmVlZnJhZywgIlJlcG9ydCBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24iLAorCWZyZWVmcmFnLCBlMmZyZWVmcmFnOworCityZXF1ZXN0IGRvX3Nob3dfc3VwZXJfc3RhdHMsICJTaG93IHN1cGVyYmxvY2sgc3RhdGlzdGljcyIsCisJc2hvd19zdXBlcl9zdGF0cywgc3RhdHM7CisKK3JlcXVlc3QgZG9fbmNoZWNrLCAiRG8gaW5vZGUtPm5hbWUgdHJhbnNsYXRpb24iLAorCW5jaGVjazsKKworcmVxdWVzdCBkb19pY2hlY2ssICJEbyBibG9jay0+aW5vZGUgdHJhbnNsYXRpb24iLAorCWljaGVjazsKKworcmVxdWVzdCBkb19jaHJvb3QsICJDaGFuZ2Ugcm9vdCBkaXJlY3RvcnkiLAorCWNoYW5nZV9yb290X2RpcmVjdG9yeSwgY2hyb290OworCityZXF1ZXN0IGRvX2NoYW5nZV93b3JraW5nX2RpciwgIkNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSIsCisJY2hhbmdlX3dvcmtpbmdfZGlyZWN0b3J5LCBjZDsKKworcmVxdWVzdCBkb19saXN0X2RpciwgIkxpc3QgZGlyZWN0b3J5IiwKKwlsaXN0X2RpcmVjdG9yeSwgbHM7CisKK3JlcXVlc3QgZG9fc3RhdCwgIlNob3cgaW5vZGUgaW5mb3JtYXRpb24gIiwKKwlzaG93X2lub2RlX2luZm8sIHN0YXQ7CisKK3JlcXVlc3QgZG9fZHVtcF9leHRlbnRzLCAiRHVtcCBleHRlbnRzIGluZm9ybWF0aW9uICIsCisJZHVtcF9leHRlbnRzLCBleHRlbnRzLCBleDsKKworcmVxdWVzdCBkb19ibG9ja3MsICJEdW1wIGJsb2NrcyB1c2VkIGJ5IGFuIGlub2RlICIsCisJYmxvY2tzOworCityZXF1ZXN0IGRvX2ZpbGVmcmFnLCAiUmVwb3J0IGZyYWdtZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGlub2RlIiwKKwlmaWxlZnJhZzsKKworcmVxdWVzdCBkb190ZXN0aSwgIlRlc3QgYW4gaW5vZGUncyBpbi11c2UgZmxhZyIsCisJdGVzdGk7CisKK3JlcXVlc3QgZG9fZmluZF9mcmVlX2Jsb2NrLCAiRmluZCBmcmVlIGJsb2NrKHMpIiwKKwlmaW5kX2ZyZWVfYmxvY2ssIGZmYjsKKworcmVxdWVzdCBkb19maW5kX2ZyZWVfaW5vZGUsICJGaW5kIGZyZWUgaW5vZGUocykiLAorCWZpbmRfZnJlZV9pbm9kZSwgZmZpOworCityZXF1ZXN0CWRvX3ByaW50X3dvcmtpbmdfZGlyZWN0b3J5LCAiUHJpbnQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIsCisJcHJpbnRfd29ya2luZ19kaXJlY3RvcnksIHB3ZDsgCisKK3JlcXVlc3QgZG9fbHNkZWwsICJMaXN0IGRlbGV0ZWQgaW5vZGVzIiwKKwlsaXN0X2RlbGV0ZWRfaW5vZGVzLCBsc2RlbDsKKworcmVxdWVzdCBkb19sb2dkdW1wLCAiRHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGpvdXJuYWwiLAorCWxvZ2R1bXA7CisKK3JlcXVlc3QgZG9faHRyZWVfZHVtcCwgIkR1bXAgYSBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5IiwKKwlodHJlZV9kdW1wLCBodHJlZTsKKworcmVxdWVzdCBkb19keF9oYXNoLCAiQ2FsY3VsYXRlIHRoZSBkaXJlY3RvcnkgaGFzaCBvZiBhIGZpbGVuYW1lIiwKKwlkeF9oYXNoLCBoYXNoOworCityZXF1ZXN0IGRvX2RpcnNlYXJjaCwgIlNlYXJjaCBhIGRpcmVjdG9yeSBmb3IgYSBwYXJ0aWN1bGFyIGZpbGVuYW1lIiwKKwlkaXJzZWFyY2g7CisKK3JlcXVlc3QgZG9fYm1hcCwgIkNhbGN1bGF0ZSB0aGUgbG9naWNhbC0+cGh5c2ljYWwgYmxvY2sgbWFwcGluZyBmb3IgYW4gaW5vZGUiLAorCWJtYXA7CisKK3JlcXVlc3QgZG9faW1hcCwgIkNhbGN1bGF0ZSB0aGUgbG9jYXRpb24gb2YgYW4gaW5vZGUiLAorCWltYXA7CisKK3JlcXVlc3QgZG9fc3VwcG9ydGVkX2ZlYXR1cmVzLCAiUHJpbnQgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBlMmZzcHJvZ3MiLAorCXN1cHBvcnRlZF9mZWF0dXJlczsKKworcmVxdWVzdCBkb19kdW1wX21tcCwgIkR1bXAgTU1QIGluZm9ybWF0aW9uIiwKKwlkdW1wX21tcDsKKworcmVxdWVzdCBkb19leHRlbnRfb3BlbiwgIk9wZW4gaW5vZGUgZm9yIGV4dGVudCBtYW5pcHVsYXRpb24iLAorCWV4dGVudF9vcGVuLCBlbzsKKworZW5kOworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy9zZXRfZmllbGRzLmMgYi9lMmZzcHJvZ3MvZGVidWdmcy9zZXRfZmllbGRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YTE1YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL3NldF9maWVsZHMuYwpAQCAtMCwwICsxLDgyNiBAQAorLyoKKyAqIHNldF9maWVsZHMuYyAtLS0gc2V0IGEgc3VwZXJibG9jayB2YWx1ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIHN0cnB0aW1lKCkgYW5kIHN0cnRvdWxsICovCisKKyNpZmRlZiBIQVZFX1NUUlRPVUxMCisjZGVmaW5lIFNUUlRPVUxMIHN0cnRvdWxsCisjZWxzZQorI2RlZmluZSBTVFJUT1VMTCBzdHJ0b3VsCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKworc3RhdGljIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNldF9zYjsKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSBzZXRfaW5vZGU7CitzdGF0aWMgc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBzZXRfZ2Q7CitzdGF0aWMgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyBzZXRfZ2Q0Oworc3RhdGljIHN0cnVjdCBtbXBfc3RydWN0IHNldF9tbXA7CitzdGF0aWMgZGdycF90IHNldF9iZzsKK3N0YXRpYyBleHQyX2lub190IHNldF9pbm87CitzdGF0aWMgaW50IGFycmF5X2lkeDsKKworI2RlZmluZSBGTEFHX0FSUkFZCTB4MDAwMQorCitzdHJ1Y3QgZmllbGRfc2V0X2luZm8geworCWNvbnN0IGNoYXIJKm5hbWU7CisJdm9pZAkqcHRyOworCXZvaWQJKnB0cjI7CisJdW5zaWduZWQgaW50CXNpemU7CisJZXJyY29kZV90ICgqZnVuYykoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKKwlpbnQgZmxhZ3M7CisJaW50IG1heF9pZHg7Cit9OworCitzdGF0aWMgZXJyY29kZV90IHBhcnNlX3VpbnQoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfaW50KHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX3N0cmluZyhzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLCBjaGFyICphcmcpOworc3RhdGljIGVycmNvZGVfdCBwYXJzZV91dWlkKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2hhc2hhbGcoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfdGltZShzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLCBjaGFyICphcmcpOworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9ibWFwKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsIGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHBhcnNlX2dkX2NzdW0oc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLCBjaGFyICpmaWVsZCwgY2hhciAqYXJnKTsKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfbW1wX2NsZWFyKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywgY2hhciAqZmllbGQsCisJCQkJIGNoYXIgKmFyZyk7CisKK3N0YXRpYyBzdHJ1Y3QgZmllbGRfc2V0X2luZm8gc3VwZXJfZmllbGRzW10gPSB7CisJeyAiaW5vZGVzX2NvdW50IiwgJnNldF9zYi5zX2lub2Rlc19jb3VudCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImJsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19ibG9ja3NfY291bnQsICZzZXRfc2Iuc19ibG9ja3NfY291bnRfaGksCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJyX2Jsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19yX2Jsb2Nrc19jb3VudCwKKwkJJnNldF9zYi5zX3JfYmxvY2tzX2NvdW50X2hpLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZnJlZV9ibG9ja3NfY291bnQiLCAmc2V0X3NiLnNfZnJlZV9ibG9ja3NfY291bnQsCisJCSZzZXRfc2Iuc19mcmVlX2Jsb2Nrc19oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyZWVfaW5vZGVzX2NvdW50IiwgJnNldF9zYi5zX2ZyZWVfaW5vZGVzX2NvdW50LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmlyc3RfZGF0YV9ibG9jayIsICZzZXRfc2Iuc19maXJzdF9kYXRhX2Jsb2NrLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAibG9nX2Jsb2NrX3NpemUiLCAmc2V0X3NiLnNfbG9nX2Jsb2NrX3NpemUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJsb2dfY2x1c3Rlcl9zaXplIiwgJnNldF9zYi5zX2xvZ19jbHVzdGVyX3NpemUsIE5VTEwsIDQsIHBhcnNlX2ludCB9LAorCXsgImJsb2Nrc19wZXJfZ3JvdXAiLCAmc2V0X3NiLnNfYmxvY2tzX3Blcl9ncm91cCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImNsdXN0ZXJzX3Blcl9ncm91cCIsICZzZXRfc2Iuc19jbHVzdGVyc19wZXJfZ3JvdXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZXNfcGVyX2dyb3VwIiwgJnNldF9zYi5zX2lub2Rlc19wZXJfZ3JvdXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtdGltZSIsICZzZXRfc2Iuc19tdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgInd0aW1lIiwgJnNldF9zYi5zX3d0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAibW50X2NvdW50IiwgJnNldF9zYi5zX21udF9jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1heF9tbnRfY291bnQiLCAmc2V0X3NiLnNfbWF4X21udF9jb3VudCwgTlVMTCwgMiwgcGFyc2VfaW50IH0sCisJLyogc19tYWdpYyAqLworCXsgInN0YXRlIiwgJnNldF9zYi5zX3N0YXRlLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZXJyb3JzIiwgJnNldF9zYi5zX2Vycm9ycywgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1pbm9yX3Jldl9sZXZlbCIsICZzZXRfc2Iuc19taW5vcl9yZXZfbGV2ZWwsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJsYXN0Y2hlY2siLCAmc2V0X3NiLnNfbGFzdGNoZWNrLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiY2hlY2tpbnRlcnZhbCIsICZzZXRfc2Iuc19jaGVja2ludGVydmFsLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiY3JlYXRvcl9vcyIsICZzZXRfc2Iuc19jcmVhdG9yX29zLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAicmV2X2xldmVsIiwgJnNldF9zYi5zX3Jldl9sZXZlbCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImRlZl9yZXN1aWQiLCAmc2V0X3NiLnNfZGVmX3Jlc3VpZCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImRlZl9yZXNnaWQiLCAmc2V0X3NiLnNfZGVmX3Jlc2dpZCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZpcnN0X2lubyIsICZzZXRfc2Iuc19maXJzdF9pbm8sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV9zaXplIiwgJnNldF9zYi5zX2lub2RlX3NpemUsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJibG9ja19ncm91cF9uciIsICZzZXRfc2Iuc19ibG9ja19ncm91cF9uciwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZlYXR1cmVfY29tcGF0IiwgJnNldF9zYi5zX2ZlYXR1cmVfY29tcGF0LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmVhdHVyZV9pbmNvbXBhdCIsICZzZXRfc2Iuc19mZWF0dXJlX2luY29tcGF0LCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiZmVhdHVyZV9yb19jb21wYXQiLCAmc2V0X3NiLnNfZmVhdHVyZV9yb19jb21wYXQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1dWlkIiwgJnNldF9zYi5zX3V1aWQsIE5VTEwsIDE2LCBwYXJzZV91dWlkIH0sCisJeyAidm9sdW1lX25hbWUiLCAgJnNldF9zYi5zX3ZvbHVtZV9uYW1lLCBOVUxMLCAxNiwgcGFyc2Vfc3RyaW5nIH0sCisJeyAibGFzdF9tb3VudGVkIiwgICZzZXRfc2Iuc19sYXN0X21vdW50ZWQsIE5VTEwsIDY0LCBwYXJzZV9zdHJpbmcgfSwKKwl7ICJsYXN0Y2hlY2siLCAgJnNldF9zYi5zX2xhc3RjaGVjaywgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImFsZ29yaXRobV91c2FnZV9iaXRtYXAiLCAmc2V0X3NiLnNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcCwgTlVMTCwKKwkJICA0LCBwYXJzZV91aW50IH0sCisJeyAicHJlYWxsb2NfYmxvY2tzIiwgJnNldF9zYi5zX3ByZWFsbG9jX2Jsb2NrcywgTlVMTCwgMSwgcGFyc2VfdWludCB9LAorCXsgInByZWFsbG9jX2Rpcl9ibG9ja3MiLCAmc2V0X3NiLnNfcHJlYWxsb2NfZGlyX2Jsb2NrcywgTlVMTCwgMSwKKwkJICBwYXJzZV91aW50IH0sCisJeyAicmVzZXJ2ZWRfZ2R0X2Jsb2NrcyIsICZzZXRfc2Iuc19yZXNlcnZlZF9nZHRfYmxvY2tzLCBOVUxMLCAyLAorCQkgIHBhcnNlX3VpbnQgfSwKKwl7ICJqb3VybmFsX3V1aWQiLCAmc2V0X3NiLnNfam91cm5hbF91dWlkLCBOVUxMLCAxNiwgcGFyc2VfdXVpZCB9LAorCXsgImpvdXJuYWxfaW51bSIsICZzZXRfc2Iuc19qb3VybmFsX2ludW0sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJqb3VybmFsX2RldiIsICZzZXRfc2Iuc19qb3VybmFsX2RldiwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImxhc3Rfb3JwaGFuIiwgJnNldF9zYi5zX2xhc3Rfb3JwaGFuLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaGFzaF9zZWVkIiwgJnNldF9zYi5zX2hhc2hfc2VlZCwgTlVMTCwgMTYsIHBhcnNlX3V1aWQgfSwKKwl7ICJkZWZfaGFzaF92ZXJzaW9uIiwgJnNldF9zYi5zX2RlZl9oYXNoX3ZlcnNpb24sIE5VTEwsIDEsIHBhcnNlX2hhc2hhbGcgfSwKKwl7ICJqbmxfYmFja3VwX3R5cGUiLCAmc2V0X3NiLnNfam5sX2JhY2t1cF90eXBlLCBOVUxMLCAxLCBwYXJzZV91aW50IH0sCisJeyAiZGVzY19zaXplIiwgJnNldF9zYi5zX2Rlc2Nfc2l6ZSwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImRlZmF1bHRfbW91bnRfb3B0cyIsICZzZXRfc2Iuc19kZWZhdWx0X21vdW50X29wdHMsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmaXJzdF9tZXRhX2JnIiwgJnNldF9zYi5zX2ZpcnN0X21ldGFfYmcsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJta2ZzX3RpbWUiLCAmc2V0X3NiLnNfbWtmc190aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiam5sX2Jsb2NrcyIsICZzZXRfc2Iuc19qbmxfYmxvY2tzWzBdLCBOVUxMLCA0LCBwYXJzZV91aW50LCBGTEFHX0FSUkFZLAorCSAgMTcgfSwKKwl7ICJtaW5fZXh0cmFfaXNpemUiLCAmc2V0X3NiLnNfbWluX2V4dHJhX2lzaXplLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAid2FudF9leHRyYV9pc2l6ZSIsICZzZXRfc2Iuc193YW50X2V4dHJhX2lzaXplLCBOVUxMLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZmxhZ3MiLCAmc2V0X3NiLnNfZmxhZ3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJyYWlkX3N0cmlkZSIsICZzZXRfc2Iuc19yYWlkX3N0cmlkZSwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1pbl9leHRyYV9pc2l6ZSIsICZzZXRfc2Iuc19taW5fZXh0cmFfaXNpemUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtbXBfaW50ZXJ2YWwiLCAmc2V0X3NiLnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIm1tcF9ibG9jayIsICZzZXRfc2Iuc19tbXBfYmxvY2ssIE5VTEwsIDgsIHBhcnNlX3VpbnQgfSwKKwl7ICJyYWlkX3N0cmlwZV93aWR0aCIsICZzZXRfc2Iuc19yYWlkX3N0cmlwZV93aWR0aCwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImxvZ19ncm91cHNfcGVyX2ZsZXgiLCAmc2V0X3NiLnNfbG9nX2dyb3Vwc19wZXJfZmxleCwgTlVMTCwgMSwgcGFyc2VfdWludCB9LAorCXsgImtieXRlc193cml0dGVuIiwgJnNldF9zYi5zX2tieXRlc193cml0dGVuLCBOVUxMLCA4LCBwYXJzZV91aW50IH0sCisJeyAic25hcHNob3RfaW51bSIsICZzZXRfc2Iuc19zbmFwc2hvdF9pbnVtLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAic25hcHNob3RfaWQiLCAmc2V0X3NiLnNfc25hcHNob3RfaWQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJzbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCIsICZzZXRfc2Iuc19zbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCwKKwkgIE5VTEwsIDgsIHBhcnNlX3VpbnQgfSwKKwl7ICJzbmFwc2hvdF9saXN0IiwgJnNldF9zYi5zX3NuYXBzaG90X2xpc3QsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtb3VudF9vcHRzIiwgICZzZXRfc2Iuc19tb3VudF9vcHRzLCBOVUxMLCA2NCwgcGFyc2Vfc3RyaW5nIH0sCisJeyAidXNyX3F1b3RhX2ludW0iLCAmc2V0X3NiLnNfdXNyX3F1b3RhX2ludW0sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJncnBfcXVvdGFfaW51bSIsICZzZXRfc2Iuc19ncnBfcXVvdGFfaW51bSwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgIm92ZXJoZWFkX2Jsb2NrcyIsICZzZXRfc2Iuc19vdmVyaGVhZF9ibG9ja3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJjaGVja3N1bSIsICZzZXRfc2Iuc19jaGVja3N1bSwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvIGlub2RlX2ZpZWxkc1tdID0geworCXsgImlub2Rlc19jb3VudCIsICZzZXRfc2Iuc19pbm9kZXNfY291bnQsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJtb2RlIiwgJnNldF9pbm9kZS5pX21vZGUsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1aWQiLCAmc2V0X2lub2RlLmlfdWlkLCAmc2V0X2lub2RlLm9zZDIubGludXgyLmxfaV91aWRfaGlnaCwKKwkJMiwgcGFyc2VfdWludCB9LAorCXsgInNpemUiLCAmc2V0X2lub2RlLmlfc2l6ZSwgJnNldF9pbm9kZS5pX3NpemVfaGlnaCwgNCwgcGFyc2VfdWludCB9LAorCXsgImF0aW1lIiwgJnNldF9pbm9kZS5pX2F0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiY3RpbWUiLCAmc2V0X2lub2RlLmlfY3RpbWUsIE5VTEwsIDQsIHBhcnNlX3RpbWUgfSwKKwl7ICJtdGltZSIsICZzZXRfaW5vZGUuaV9tdGltZSwgTlVMTCwgNCwgcGFyc2VfdGltZSB9LAorCXsgImR0aW1lIiwgJnNldF9pbm9kZS5pX2R0aW1lLCBOVUxMLCA0LCBwYXJzZV90aW1lIH0sCisJeyAiZ2lkIiwgJnNldF9pbm9kZS5pX2dpZCwgJnNldF9pbm9kZS5vc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gsCisJCTIsIHBhcnNlX3VpbnQgfSwKKwl7ICJsaW5rc19jb3VudCIsICZzZXRfaW5vZGUuaV9saW5rc19jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCS8qIFNwZWNpYWwgY2FzZTogaV9ibG9ja3MgaXMgNCBieXRlcywgaV9ibG9ja3NfaGlnaCBpcyAyIGJ5dGVzICovCisJeyAiYmxvY2tzIiwgJnNldF9pbm9kZS5pX2Jsb2NrcywgJnNldF9pbm9kZS5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpLAorCQk2LCBwYXJzZV91aW50IH0sCisJeyAiZmxhZ3MiLCAmc2V0X2lub2RlLmlfZmxhZ3MsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ2ZXJzaW9uIiwgJnNldF9pbm9kZS5vc2QxLmxpbnV4MS5sX2lfdmVyc2lvbiwKKwkJJnNldF9pbm9kZS5pX3ZlcnNpb25faGksIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJ0cmFuc2xhdG9yIiwgJnNldF9pbm9kZS5vc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiYmxvY2siLCAmc2V0X2lub2RlLmlfYmxvY2tbMF0sIE5VTEwsIDQsIHBhcnNlX3VpbnQsIEZMQUdfQVJSQVksCisJICBFWFQyX05ESVJfQkxPQ0tTIH0sCisJeyAiYmxvY2tbSU5EXSIsICZzZXRfaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10sIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJibG9ja1tESU5EXSIsICZzZXRfaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiYmxvY2tbVElORF0iLCAmc2V0X2lub2RlLmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImdlbmVyYXRpb24iLCAmc2V0X2lub2RlLmlfZ2VuZXJhdGlvbiwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCS8qIFNwZWNpYWwgY2FzZTogaV9maWxlX2FjbF9oaWdoIGlzIDIgYnl0ZXMgKi8KKwl7ICJmaWxlX2FjbCIsICZzZXRfaW5vZGUuaV9maWxlX2FjbCwgCisJCSZzZXRfaW5vZGUub3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2gsIDYsIHBhcnNlX3VpbnQgfSwKKwl7ICJkaXJfYWNsIiwgJnNldF9pbm9kZS5pX2Rpcl9hY2wsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmYWRkciIsICZzZXRfaW5vZGUuaV9mYWRkciwgTlVMTCwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyYWciLCAmc2V0X2lub2RlLm9zZDIuaHVyZDIuaF9pX2ZyYWcsIE5VTEwsIDEsIHBhcnNlX3VpbnQgfSwKKwl7ICJmc2l6ZSIsICZzZXRfaW5vZGUub3NkMi5odXJkMi5oX2lfZnNpemUsIE5VTEwsIDEsIHBhcnNlX3VpbnQgfSwKKwl7ICJjaGVja3N1bSIsICZzZXRfaW5vZGUub3NkMi5saW51eDIubF9pX2NoZWNrc3VtX2xvLCAKKwkJJnNldF9pbm9kZS5pX2NoZWNrc3VtX2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiYXV0aG9yIiwgJnNldF9pbm9kZS5vc2QyLmh1cmQyLmhfaV9hdXRob3IsIE5VTEwsCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJleHRyYV9pc2l6ZSIsICZzZXRfaW5vZGUuaV9leHRyYV9pc2l6ZSwgTlVMTCwKKwkJMiwgcGFyc2VfdWludCB9LAorCXsgImN0aW1lX2V4dHJhIiwgJnNldF9pbm9kZS5pX2N0aW1lX2V4dHJhLCBOVUxMLAorCQk0LCBwYXJzZV91aW50IH0sCisJeyAibXRpbWVfZXh0cmEiLCAmc2V0X2lub2RlLmlfbXRpbWVfZXh0cmEsIE5VTEwsCisJCTQsIHBhcnNlX3VpbnQgfSwKKwl7ICJhdGltZV9leHRyYSIsICZzZXRfaW5vZGUuaV9hdGltZV9leHRyYSwgTlVMTCwKKwkJNCwgcGFyc2VfdWludCB9LAorCXsgImNydGltZSIsICZzZXRfaW5vZGUuaV9jcnRpbWUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJjcnRpbWVfZXh0cmEiLCAmc2V0X2lub2RlLmlfY3J0aW1lX2V4dHJhLCBOVUxMLAorCQk0LCBwYXJzZV91aW50IH0sCisJeyAiYm1hcCIsIE5VTEwsIE5VTEwsIDQsIHBhcnNlX2JtYXAsIEZMQUdfQVJSQVkgfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBleHQyX2JnX2ZpZWxkc1tdID0geworCXsgImJsb2NrX2JpdG1hcCIsICZzZXRfZ2QuYmdfYmxvY2tfYml0bWFwLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwIiwgJnNldF9nZC5iZ19pbm9kZV9iaXRtYXAsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV90YWJsZSIsICZzZXRfZ2QuYmdfaW5vZGVfdGFibGUsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJmcmVlX2Jsb2Nrc19jb3VudCIsICZzZXRfZ2QuYmdfZnJlZV9ibG9ja3NfY291bnQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJmcmVlX2lub2Rlc19jb3VudCIsICZzZXRfZ2QuYmdfZnJlZV9pbm9kZXNfY291bnQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1c2VkX2RpcnNfY291bnQiLCAmc2V0X2dkLmJnX3VzZWRfZGlyc19jb3VudCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgImZsYWdzIiwgJnNldF9nZC5iZ19mbGFncywgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorCXsgIml0YWJsZV91bnVzZWQiLCAmc2V0X2dkLmJnX2l0YWJsZV91bnVzZWQsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJjaGVja3N1bSIsICZzZXRfZ2QuYmdfY2hlY2tzdW0sIE5VTEwsIDIsIHBhcnNlX2dkX2NzdW0gfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBleHQ0X2JnX2ZpZWxkc1tdID0geworCXsgImJsb2NrX2JpdG1hcCIsICZzZXRfZ2Q0LmJnX2Jsb2NrX2JpdG1hcCwKKwkJJnNldF9nZDQuYmdfYmxvY2tfYml0bWFwX2hpLCA0LCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwIiwgJnNldF9nZDQuYmdfaW5vZGVfYml0bWFwLAorCQkmc2V0X2dkNC5iZ19pbm9kZV9iaXRtYXBfaGksIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJpbm9kZV90YWJsZSIsICZzZXRfZ2Q0LmJnX2lub2RlX3RhYmxlLAorCQkmc2V0X2dkNC5iZ19pbm9kZV90YWJsZV9oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImZyZWVfYmxvY2tzX2NvdW50IiwgJnNldF9nZDQuYmdfZnJlZV9ibG9ja3NfY291bnQsCisJCSZzZXRfZ2Q0LmJnX2ZyZWVfYmxvY2tzX2NvdW50X2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiZnJlZV9pbm9kZXNfY291bnQiLCAmc2V0X2dkNC5iZ19mcmVlX2lub2Rlc19jb3VudCwKKwkJJnNldF9nZDQuYmdfZnJlZV9pbm9kZXNfY291bnRfaGksIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJ1c2VkX2RpcnNfY291bnQiLCAmc2V0X2dkNC5iZ191c2VkX2RpcnNfY291bnQsCisJCSZzZXRfZ2Q0LmJnX3VzZWRfZGlyc19jb3VudF9oaSwgMiwgcGFyc2VfdWludCB9LAorCXsgImZsYWdzIiwgJnNldF9nZDQuYmdfZmxhZ3MsIE5VTEwsIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJleGNsdWRlX2JpdG1hcCIsICZzZXRfZ2Q0LmJnX2V4Y2x1ZGVfYml0bWFwX2xvLAorCQkmc2V0X2dkNC5iZ19leGNsdWRlX2JpdG1hcF9oaSwgNCwgcGFyc2VfdWludCB9LAorCXsgImJsb2NrX2JpdG1hcF9jc3VtIiwgJnNldF9nZDQuYmdfYmxvY2tfYml0bWFwX2NzdW1fbG8sCisJCSZzZXRfZ2Q0LmJnX2Jsb2NrX2JpdG1hcF9jc3VtX2hpLCAyLCBwYXJzZV91aW50IH0sCisJeyAiaW5vZGVfYml0bWFwX2NzdW0iLCAmc2V0X2dkNC5iZ19pbm9kZV9iaXRtYXBfY3N1bV9sbywKKwkJJnNldF9nZDQuYmdfaW5vZGVfYml0bWFwX2NzdW1faGksIDIsIHBhcnNlX3VpbnQgfSwKKwl7ICJpdGFibGVfdW51c2VkIiwgJnNldF9nZDQuYmdfaXRhYmxlX3VudXNlZCwKKwkJJnNldF9nZDQuYmdfaXRhYmxlX3VudXNlZF9oaSwgMiwgcGFyc2VfdWludCB9LAorCXsgImNoZWNrc3VtIiwgJnNldF9nZDQuYmdfY2hlY2tzdW0sIE5VTEwsIDIsIHBhcnNlX2dkX2NzdW0gfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyBtbXBfZmllbGRzW10gPSB7CisJeyAiY2xlYXIiLCAmc2V0X21tcC5tbXBfbWFnaWMsIE5VTEwsIHNpemVvZihzZXRfbW1wKSwgcGFyc2VfbW1wX2NsZWFyIH0sCisJeyAibWFnaWMiLCAmc2V0X21tcC5tbXBfbWFnaWMsIE5VTEwsIDQsIHBhcnNlX3VpbnQgfSwKKwl7ICJzZXEiLCAmc2V0X21tcC5tbXBfc2VxLCBOVUxMLCA0LCBwYXJzZV91aW50IH0sCisJeyAidGltZSIsICZzZXRfbW1wLm1tcF90aW1lLCBOVUxMLCA4LCBwYXJzZV91aW50IH0sCisJeyAibm9kZW5hbWUiLCAmc2V0X21tcC5tbXBfbm9kZW5hbWUsIE5VTEwsIHNpemVvZihzZXRfbW1wLm1tcF9ub2RlbmFtZSksCisJCXBhcnNlX3N0cmluZyB9LAorCXsgImJkZXZuYW1lIiwgJnNldF9tbXAubW1wX2JkZXZuYW1lLCBOVUxMLCBzaXplb2Yoc2V0X21tcC5tbXBfYmRldm5hbWUpLAorCQlwYXJzZV9zdHJpbmcgfSwKKwl7ICJjaGVja19pbnRlcnZhbCIsICZzZXRfbW1wLm1tcF9jaGVja19pbnRlcnZhbCwgTlVMTCwgMiwgcGFyc2VfdWludCB9LAorfTsKKworc3RhdGljIGludCBjaGVja19zdWZmaXgoY29uc3QgY2hhciAqZmllbGQpCit7CisJaW50IGxlbiA9IHN0cmxlbihmaWVsZCk7CisKKwlpZiAobGVuIDw9IDMpCisJCXJldHVybiAwOworCWZpZWxkICs9IGxlbi0zOworCWlmICghc3RyY21wKGZpZWxkLCAiX2xvIikpCisJCXJldHVybiAxOworCWlmICghc3RyY21wKGZpZWxkLCAiX2hpIikpCisJCXJldHVybiAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvICpmaW5kX2ZpZWxkKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqZmllbGRzLAorCQkJCQkgY2hhciAqZmllbGQpCit7CisJc3RydWN0IGZpZWxkX3NldF9pbmZvICpzczsKKwljb25zdCBjaGFyCSpwcmVmaXg7CisJY2hhcgkJKmFyZywgKmRlbGltLCAqaWR4LCAqdG1wOworCWludAkJc3VmZml4LCBwcmVmaXhfbGVuOworCisJaWYgKGZpZWxkcyA9PSBzdXBlcl9maWVsZHMpCisJCXByZWZpeCA9ICJzXyI7CisJZWxzZSBpZiAoZmllbGRzID09IGlub2RlX2ZpZWxkcykKKwkJcHJlZml4ID0gImlfIjsKKwllbHNlCisJCXByZWZpeCA9ICJiZ18iOworCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlpZiAoc3RybmNtcChmaWVsZCwgcHJlZml4LCBwcmVmaXhfbGVuKSA9PSAwKQorCQlmaWVsZCArPSBwcmVmaXhfbGVuOworCisJYXJnID0gbWFsbG9jKHN0cmxlbihmaWVsZCkrMSk7CisJaWYgKCFhcmcpCisJCXJldHVybiBOVUxMOworCXN0cmNweShhcmcsIGZpZWxkKTsKKworCWlkeCA9IHN0cmNocihhcmcsICdbJyk7CisJaWYgKGlkeCkgeworCQkqaWR4KysgPSAwOworCQlkZWxpbSA9IGlkeCArIHN0cmxlbihpZHgpIC0gMTsKKwkJaWYgKCEqaWR4IHx8ICpkZWxpbSAhPSAnXScpCisJCQlpZHggPSAwOworCQllbHNlCisJCQkqZGVsaW0gPSAwOworCX0KKwkvKgorCSAqIENhbiB3ZSBwYXJzZSB0aGUgbnVtYmVyPworCSAqLworCWlmIChpZHgpIHsKKwkJYXJyYXlfaWR4ID0gc3RydG9sKGlkeCwgJnRtcCwgMCk7CisJCWlmICgqdG1wKQorCQkJaWR4ID0gMDsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgdmFsaWQgX2hpIG9yIGEgX2xvIHN1ZmZpeCwgc3RyaXAgaXQgb2ZmCisJICovCisJc3VmZml4ID0gY2hlY2tfc3VmZml4KGFyZyk7CisJaWYgKHN1ZmZpeCA+IDApCisJCWFyZ1tzdHJsZW4oYXJnKS0zXSA9IDA7CisKKwlmb3IgKHNzID0gZmllbGRzIDsgc3MtPm5hbWUgOyBzcysrKSB7CisJCWlmIChzdWZmaXggJiYgc3MtPnB0cjIgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3MtPmZsYWdzICYgRkxBR19BUlJBWSkgeworCQkJaWYgKCFpZHggfHwgKHN0cmNtcChzcy0+bmFtZSwgYXJnKSAhPSAwKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzcy0+bWF4X2lkeCA+IDAgJiYgYXJyYXlfaWR4ID49IHNzLT5tYXhfaWR4KQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKHN0cmNtcChzcy0+bmFtZSwgYXJnKSAhPSAwKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZyZWUoYXJnKTsKKwkJcmV0dXJuIHNzOworCX0KKwlmcmVlKGFyZyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBOb3RlOiBpbmZvLT5zaXplID09IDYgaXMgc3BlY2lhbDsgdGhpcyBtZWFucyBhIGJhc2Ugc2l6ZSA0IGJ5dGVzLAorICogYW5kIHNlY29uZGlvcnkgKGhpZ2gpIHNpemUgb2YgMiBieXRlcy4gIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUKKyAqIHNwZWNpYWwgY2FzZSBvZiBpX2Jsb2Nrc19oaWdoIGFuZCBpX2ZpbGVfYWNsX2hpZ2guCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfdWludChzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLAorCQkJICAgIGNoYXIgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbiwgbnVtLCBtYXNrLCBsaW1pdDsKKwlpbnQgc3VmZml4ID0gY2hlY2tfc3VmZml4KGZpZWxkKTsKKwljaGFyICp0bXA7CisJdm9pZCAqZmllbGQxID0gaW5mby0+cHRyLCAqZmllbGQyID0gaW5mby0+cHRyMjsKKwlpbnQgc2l6ZSA9IChpbmZvLT5zaXplID09IDYpID8gNCA6IGluZm8tPnNpemU7CisJdW5pb24geworCQlfX3U2NAkqcHRyNjQ7CisJCV9fdTMyCSpwdHIzMjsKKwkJX191MTYJKnB0cjE2OworCQlfX3U4CSpwdHI4OworCX0gdTsKKworCWlmIChzdWZmaXggPT0gMSkKKwkJZmllbGQyID0gMDsKKwlpZiAoc3VmZml4ID09IDIpIHsKKwkJZmllbGQxID0gZmllbGQyOworCQlmaWVsZDIgPSAwOworCX0KKworCXUucHRyOCA9IChfX3U4ICopIGZpZWxkMTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBGTEFHX0FSUkFZKQorCQl1LnB0cjggKz0gYXJyYXlfaWR4ICogaW5mby0+c2l6ZTsKKworCWVycm5vID0gMDsKKwludW0gPSBTVFJUT1VMTChhcmcsICZ0bXAsIDApOworCWlmICgqdG1wIHx8IGVycm5vKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcGFyc2UgJyVzJyBmb3IgZmllbGQgJXMuXG4iLAorCQkJYXJnLCBpbmZvLT5uYW1lKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisJbWFzayA9IH4wVUxMID4+ICgoOCAtIHNpemUpICogOCk7CisJbGltaXQgPSB+MFVMTCA+PiAoKDggLSBpbmZvLT5zaXplKSAqIDgpOworCWlmIChmaWVsZDIgJiYgaW5mby0+c2l6ZSAhPSA2KQorCQlsaW1pdCA9IH4wVUxMID4+ICgoOCAtIGluZm8tPnNpemUqMikgKiA4KTsKKworCWlmIChudW0gPiBsaW1pdCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlZhbHVlICclcycgZXhjZWVkcyBmaWVsZCAlcyBtYXhpbXVtICVsbHUuXG4iLAorCQkJYXJnLCBpbmZvLT5uYW1lLCBsaW1pdCk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCW4gPSBudW0gJiBtYXNrOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgODoKKwkJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJCWZwcmludGYoc3RkZXJyLCAiNjQtYml0IGZpZWxkICVzIGhhcyBhIHNlY29uZCA2NC1iaXQgZmllbGRcbiIKKwkJCSJkZWZpbmVkOyBCVUc/IT9cbiIsIGluZm8tPm5hbWUpOworCQkqdS5wdHI2NCA9IDA7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKnUucHRyMzIgPSBuOworCQlicmVhazsKKwljYXNlIDI6CisJCSp1LnB0cjE2ID0gbjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqdS5wdHI4ID0gbjsKKwkJYnJlYWs7CisJfQorCWlmICghZmllbGQyKQorCQlyZXR1cm4gMDsKKwluID0gbnVtID4+IChzaXplKjgpOworCXUucHRyOCA9IChfX3U4ICopIGZpZWxkMjsKKwlpZiAoaW5mby0+c2l6ZSA9PSA2KQorCQlzaXplID0gMjsKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDg6CisJCSp1LnB0cjY0ID0gbjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqdS5wdHIzMiA9IG47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnUucHRyMTYgPSBuOworCQlicmVhazsKKwljYXNlIDE6CisJCSp1LnB0cjggPSBuOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfaW50KHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywKKwkJCSAgIGNoYXIgKmZpZWxkIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwgY2hhciAqYXJnKQoreworCWxvbmcJbnVtOworCWNoYXIgKnRtcDsKKwlfX3MzMgkqcHRyMzI7CisJX19zMTYJKnB0cjE2OworCV9fczgJKnB0cjg7CisKKwludW0gPSBzdHJ0b2woYXJnLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHBhcnNlICclcycgZm9yIGZpZWxkICVzLlxuIiwKKwkJCWFyZywgaW5mby0+bmFtZSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCXN3aXRjaCAoaW5mby0+c2l6ZSkgeworCWNhc2UgNDoKKwkJcHRyMzIgPSAoX19zMzIgKikgaW5mby0+cHRyOworCQkqcHRyMzIgPSBudW07CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHRyMTYgPSAoX19zMTYgKikgaW5mby0+cHRyOworCQkqcHRyMTYgPSBudW07CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHRyOCA9IChfX3M4ICopIGluZm8tPnB0cjsKKwkJKnB0cjggPSBudW07CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9zdHJpbmcoc3RydWN0IGZpZWxkX3NldF9pbmZvICppbmZvLAorCQkJICAgICAgY2hhciAqZmllbGQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCBjaGFyICphcmcpCit7CisJY2hhcgkqY3AgPSAoY2hhciAqKSBpbmZvLT5wdHI7CisKKwlpZiAoc3RybGVuKGFyZykgPj0gaW5mby0+c2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG1heGltdW0gc2l6ZSBmb3IgJXMgaXMgJWQuXG4iLAorCQkJaW5mby0+bmFtZSwgaW5mby0+c2l6ZSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCXN0cmNweShjcCwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV90aW1lKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywKKwkJCSAgICBjaGFyICpmaWVsZCBFWFQyRlNfQVRUUigodW51c2VkKSksIGNoYXIgKmFyZykKK3sKKwl0aW1lX3QJCXQ7CisJX191MzIJCSpwdHIzMjsKKworCXB0cjMyID0gKF9fdTMyICopIGluZm8tPnB0cjsKKworCXQgPSBzdHJpbmdfdG9fdGltZShhcmcpOworCisJaWYgKHQgPT0gKCh0aW1lX3QpIC0xKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHBhcnNlICclcycgZm9yIGZpZWxkICVzLlxuIiwKKwkJCWFyZywgaW5mby0+bmFtZSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCSpwdHIzMiA9IHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfdXVpZChzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sCisJCQkgICAgY2hhciAqZmllbGQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCBjaGFyICphcmcpCit7CisJdW5zaWduZWQgY2hhciAqCXAgPSAodW5zaWduZWQgY2hhciAqKSBpbmZvLT5wdHI7CisKKwlpZiAoKHN0cmNhc2VjbXAoYXJnLCAibnVsbCIpID09IDApIHx8CisJICAgIChzdHJjYXNlY21wKGFyZywgImNsZWFyIikgPT0gMCkpIHsKKwkJdXVpZF9jbGVhcihwKTsKKwl9IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXJnLCAidGltZSIpID09IDApIHsKKwkJdXVpZF9nZW5lcmF0ZV90aW1lKHApOworCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChhcmcsICJyYW5kb20iKSA9PSAwKSB7CisJCXV1aWRfZ2VuZXJhdGUocCk7CisJfSBlbHNlIGlmICh1dWlkX3BhcnNlKGFyZywgcCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFVVSUQgZm9ybWF0OiAlc1xuIiwgYXJnKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfaGFzaGFsZyhzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sCisJCQkgICAgICAgY2hhciAqZmllbGQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLCBjaGFyICphcmcpCit7CisJaW50CWhhc2h2OworCXVuc2lnbmVkIGNoYXIJKnAgPSAodW5zaWduZWQgY2hhciAqKSBpbmZvLT5wdHI7CisKKwloYXNodiA9IGUycF9zdHJpbmcyaGFzaChhcmcpOworCWlmIChoYXNodiA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIiwgYXJnKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisJKnAgPSBoYXNodjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9ibWFwKHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqaW5mbywKKwkJCSAgICBjaGFyICpmaWVsZCBFWFQyRlNfQVRUUigodW51c2VkKSksIGNoYXIgKmFyZykKK3sKKwlibGs2NF90CQlibGs7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqdG1wOworCisJYmxrID0gc3RydG91bGwoYXJnLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHBhcnNlICclcycgZm9yIGZpZWxkICVzLlxuIiwKKwkJCWFyZywgaW5mby0+bmFtZSk7CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGN1cnJlbnRfZnMsIHNldF9pbm8sCisJCQkgICAgIChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSAmc2V0X2lub2RlLAorCQkJICAgICBOVUxMLCBCTUFQX1NFVCwgYXJyYXlfaWR4LCBOVUxMLCAmYmxrKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldF9pbm9kZSIsIHJldHZhbCwgIndoaWxlIHNldHRpbmcgYmxvY2sgbWFwIik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFyc2VfZ2RfY3N1bShzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sIGNoYXIgKmZpZWxkLAorCQkJICAgICAgIGNoYXIgKmFyZykKK3sKKworCWlmIChzdHJjbXAoYXJnLCAiY2FsYyIpID09IDApIHsKKwkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoY3VycmVudF9mcywgc2V0X2JnKTsKKwkJbWVtY3B5KCZzZXRfZ2QsIGV4dDJmc19ncm91cF9kZXNjKGN1cnJlbnRfZnMsCisJCQkJCWN1cnJlbnRfZnMtPmdyb3VwX2Rlc2MsCisJCQkJCXNldF9iZyksCisJCQlzaXplb2Yoc2V0X2dkKSk7CisJCXByaW50ZigiQ2hlY2tzdW0gc2V0IHRvIDB4JTA0eFxuIiwKKwkJICAgICAgIGV4dDJmc19iZ19jaGVja3N1bShjdXJyZW50X2ZzLCBzZXRfYmcpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBhcnNlX3VpbnQoaW5mbywgZmllbGQsIGFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Bvc3NpYmxlX2ZpZWxkcyhzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmZpZWxkcykKK3sKKwlzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKnNzOworCWNvbnN0IGNoYXIJKnR5cGUsICpjbWQ7CisJRklMRSAqZjsKKwljaGFyIG5hbWVbNDBdLCBpZHhbNDBdOworCisJaWYgKGZpZWxkcyA9PSBzdXBlcl9maWVsZHMpIHsKKwkJdHlwZSA9ICJTdXBlcmJsb2NrIjsKKwkJY21kID0gInNldF9zdXBlcl92YWx1ZSI7CisJfSBlbHNlIGlmIChmaWVsZHMgPT0gaW5vZGVfZmllbGRzKSB7CisJCXR5cGUgPSAiSW5vZGUiOworCQljbWQgPSAic2V0X2lub2RlIjsKKwl9IGVsc2UgaWYgKGZpZWxkcyA9PSBtbXBfZmllbGRzKSB7CisJCXR5cGUgPSAiTU1QIjsKKwkJY21kID0gInNldF9tbXBfdmFsdWUiOworCX0gZWxzZSB7CisJCXR5cGUgPSAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciI7CisJCWNtZCA9ICJzZXRfYmxvY2tfZ3JvdXAiOworCX0KKwlmID0gb3Blbl9wYWdlcigpOworCisJZnByaW50ZihmLCAiJXMgZmllbGRzIHN1cHBvcnRlZCBieSB0aGUgJXMgY29tbWFuZDpcbiIsIHR5cGUsIGNtZCk7CisKKwlmb3IgKHNzID0gZmllbGRzIDsgc3MtPm5hbWUgOyBzcysrKSB7CisJCXR5cGUgPSAidW5rbm93biI7CisJCWlmIChzcy0+ZnVuYyA9PSBwYXJzZV9zdHJpbmcpCisJCQl0eXBlID0gInN0cmluZyI7CisJCWVsc2UgaWYgKHNzLT5mdW5jID09IHBhcnNlX2ludCkKKwkJCXR5cGUgPSAiaW50ZWdlciI7CisJCWVsc2UgaWYgKHNzLT5mdW5jID09IHBhcnNlX3VpbnQpCisJCQl0eXBlID0gInVuc2lnbmVkIGludGVnZXIiOworCQllbHNlIGlmIChzcy0+ZnVuYyA9PSBwYXJzZV91dWlkKQorCQkJdHlwZSA9ICJVVUlEIjsKKwkJZWxzZSBpZiAoc3MtPmZ1bmMgPT0gcGFyc2VfaGFzaGFsZykKKwkJCXR5cGUgPSAiaGFzaCBhbGdvcml0aG0iOworCQllbHNlIGlmIChzcy0+ZnVuYyA9PSBwYXJzZV90aW1lKQorCQkJdHlwZSA9ICJkYXRlL3RpbWUiOworCQllbHNlIGlmIChzcy0+ZnVuYyA9PSBwYXJzZV9ibWFwKQorCQkJdHlwZSA9ICJzZXQgcGh5c2ljYWwtPmxvZ2ljYWwgYmxvY2sgbWFwIjsKKwkJZWxzZSBpZiAoc3MtPmZ1bmMgPT0gcGFyc2VfZ2RfY3N1bSkKKwkJCXR5cGUgPSAidW5zaWduZWQgaW50ZWdlciBPUiBcImNhbGNcIiI7CisJCXN0cmNweShuYW1lLCBzcy0+bmFtZSk7CisJCWlmIChzcy0+ZmxhZ3MgJiBGTEFHX0FSUkFZKSB7CisJCQlpZiAoc3MtPm1heF9pZHggPiAwKQorCQkJCXNwcmludGYoaWR4LCAiWyVkXSIsIHNzLT5tYXhfaWR4KTsKKwkJCWVsc2UKKwkJCQlzdHJjcHkoaWR4LCAiW10iKTsKKwkJCXN0cmNhdChuYW1lLCBpZHgpOworCQl9CisJCWlmIChzcy0+cHRyMikKKwkJCXN0cmNhdChuYW1lLCAiW19oaXxfbG9dIik7CisJCWZwcmludGYoZiwgIlx0JS0yNXNcdCVzXG4iLCBuYW1lLCB0eXBlKTsKKwl9CisJY2xvc2VfcGFnZXIoZik7Cit9CisKKwordm9pZCBkb19zZXRfc3VwZXIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICI8ZmllbGQ+IDx2YWx1ZT5cbiIKKwkJIlx0XCJzZXRfc3VwZXJfdmFsdWUgLWxcIiB3aWxsIGxpc3QgdGhlIG5hbWVzIG9mICIKKwkJInN1cGVyYmxvY2sgZmllbGRzXG5cdHdoaWNoIGNhbiBiZSBzZXQuIjsKKwlzdGF0aWMgc3RydWN0IGZpZWxkX3NldF9pbmZvICpzczsKKworCWlmICgoYXJnYyA9PSAyKSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItbCIpKSB7CisJCXByaW50X3Bvc3NpYmxlX2ZpZWxkcyhzdXBlcl9maWVsZHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgInNldF9zdXBlcl92YWx1ZSIsCisJCQkJdXNhZ2UsIENIRUNLX0ZTX1JXKSkKKwkJcmV0dXJuOworCisJaWYgKChzcyA9IGZpbmRfZmllbGQoc3VwZXJfZmllbGRzLCBhcmd2WzFdKSkgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJpbnZhbGlkIGZpZWxkIHNwZWNpZmllcjogJXMiLCBhcmd2WzFdKTsKKwkJcmV0dXJuOworCX0KKwlzZXRfc2IgPSAqY3VycmVudF9mcy0+c3VwZXI7CisJaWYgKHNzLT5mdW5jKHNzLCBhcmd2WzFdLCBhcmd2WzJdKSA9PSAwKSB7CisJCSpjdXJyZW50X2ZzLT5zdXBlciA9IHNldF9zYjsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoY3VycmVudF9mcyk7CisJfQorfQorCit2b2lkIGRvX3NldF9pbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIjxpbm9kZT4gPGZpZWxkPiA8dmFsdWU+XG4iCisJCSJcdFwic2V0X2lub2RlX2ZpZWxkIC1sXCIgd2lsbCBsaXN0IHRoZSBuYW1lcyBvZiAiCisJCSJ0aGUgZmllbGRzIGluIGFuIGV4dDIgaW5vZGVcblx0d2hpY2ggY2FuIGJlIHNldC4iOworCXN0YXRpYyBzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKnNzOworCisJaWYgKChhcmdjID09IDIpICYmICFzdHJjbXAoYXJndlsxXSwgIi1sIikpIHsKKwkJcHJpbnRfcG9zc2libGVfZmllbGRzKGlub2RlX2ZpZWxkcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCA0LCA0LCAic2V0X2lub2RlIiwKKwkJCQl1c2FnZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlpZiAoKHNzID0gZmluZF9maWVsZChpbm9kZV9maWVsZHMsIGFyZ3ZbMl0pKSA9PSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgImludmFsaWQgZmllbGQgc3BlY2lmaWVyOiAlcyIsIGFyZ3ZbMl0pOworCQlyZXR1cm47CisJfQorCisJc2V0X2lubyA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKwlpZiAoIXNldF9pbm8pCisJCXJldHVybjsKKworCWlmIChkZWJ1Z2ZzX3JlYWRfaW5vZGVfZnVsbChzZXRfaW5vLAorCQkJKHN0cnVjdCBleHQyX2lub2RlICopICZzZXRfaW5vZGUsIGFyZ3ZbMV0sCisJCQkJICAgIHNpemVvZihzZXRfaW5vZGUpKSkKKwkJcmV0dXJuOworCisJaWYgKHNzLT5mdW5jKHNzLCBhcmd2WzJdLCBhcmd2WzNdKSA9PSAwKSB7CisJCWlmIChkZWJ1Z2ZzX3dyaXRlX2lub2RlX2Z1bGwoc2V0X2lubywgCisJCQkgICAgIChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSAmc2V0X2lub2RlLAorCQkJICAgICBhcmd2WzFdLCBzaXplb2Yoc2V0X2lub2RlKSkpCisJCQlyZXR1cm47CisJfQorfQorCit2b2lkIGRvX3NldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqdXNhZ2UgPSAiPGJnIG51bWJlcj4gPGZpZWxkPiA8dmFsdWU+XG4iCisJCSJcdFwic2V0X2Jsb2NrX2dyb3VwX2Rlc2NyaXB0b3IgLWxcIiB3aWxsIGxpc3QgdGhlIG5hbWVzIG9mICIKKwkJInRoZSBmaWVsZHMgaW4gYSBibG9jayBncm91cCBkZXNjcmlwdG9yXG5cdHdoaWNoIGNhbiBiZSBzZXQuIjsKKwlzdHJ1Y3QgZmllbGRfc2V0X2luZm8JKnRhYmxlOworCXN0cnVjdCBmaWVsZF9zZXRfaW5mbwkqc3M7CisJY2hhcgkJCSplbmQ7CisJdm9pZAkJCSplZGl0LCAqdGFyZ2V0OworCWludAkJCXNpemU7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIHdlIGFyZSBlZGl0aW5nIGFuIGV4dDIgb3IgZXh0NCBibG9jayBncm91cAorCSAqIGRlc2NyaXB0b3IuICBEZXNjcmlwdG9ycyBsYXJnZXIgdGhhbiBleHQ0X2dyb3VwX2Rlc2MgY2Fubm90CisJICogaGF2ZSB0aGVpciBmaWVsZHMgZWRpdGVkIHlldCwgYmVjYXVzZSB0aGV5IGRvIG5vdCBoYXZlIGFueQorCSAqIG5hbWVzIGFzc2lnbmVkLiAgV2hlbiB0aGF0IGhhcHBlbnMsIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8KKwkgKiBiZSB1cGRhdGVkIGZvciB0aGUgbmV3IGRlc2NyaXB0b3Igc3RydWN0IGFuZCBmaWVsZHMuCisJICovCisJaWYgKGN1cnJlbnRfZnMgJiYKKwkgICAgRVhUMl9ERVNDX1NJWkUoY3VycmVudF9mcy0+c3VwZXIpID49IEVYVDJfTUlOX0RFU0NfU0laRV82NEJJVCkgeworCQl0YWJsZSA9IGV4dDRfYmdfZmllbGRzOworCQllZGl0ID0gJnNldF9nZDQ7CisJCXNpemUgPSBzaXplb2Yoc2V0X2dkNCk7CisJfSBlbHNlIHsKKwkJdGFibGUgPSBleHQyX2JnX2ZpZWxkczsKKwkJZWRpdCA9ICZzZXRfZ2Q7CisJCXNpemUgPSBzaXplb2Yoc2V0X2dkKTsKKwl9CisKKwlpZiAoKGFyZ2MgPT0gMikgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWwiKSkgeworCQlwcmludF9wb3NzaWJsZV9maWVsZHModGFibGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgNCwgNCwgInNldF9ibG9ja19ncm91cF9kZXNjcmlwdG9yIiwKKwkJCQl1c2FnZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwlzZXRfYmcgPSBzdHJ0b3VsKGFyZ3ZbMV0sICZlbmQsIDApOworCWlmICgqZW5kKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgImludmFsaWQgYmxvY2sgZ3JvdXAgbnVtYmVyOiAlcyIsIGFyZ3ZbMV0pOworCQlyZXR1cm47CisJfQorCisJaWYgKHNldF9iZyA+PSBjdXJyZW50X2ZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgImJsb2NrIGdyb3VwIG51bWJlciB0b28gYmlnOiAlZCIsIHNldF9iZyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHNzID0gZmluZF9maWVsZCh0YWJsZSwgYXJndlsyXSkpID09IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiaW52YWxpZCBmaWVsZCBzcGVjaWZpZXI6ICVzIiwgYXJndlsyXSk7CisJCXJldHVybjsKKwl9CisKKwl0YXJnZXQgPSBleHQyZnNfZ3JvdXBfZGVzYyhjdXJyZW50X2ZzLCBjdXJyZW50X2ZzLT5ncm91cF9kZXNjLCBzZXRfYmcpOworCW1lbWNweShlZGl0LCB0YXJnZXQsIHNpemUpOworCWlmIChzcy0+ZnVuYyhzcywgYXJndlsyXSwgYXJndlszXSkgPT0gMCkgeworCQltZW1jcHkodGFyZ2V0LCBlZGl0LCBzaXplKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoY3VycmVudF9mcyk7CisJfQorfQorCitzdGF0aWMgZXJyY29kZV90IHBhcnNlX21tcF9jbGVhcihzdHJ1Y3QgZmllbGRfc2V0X2luZm8gKmluZm8sCisJCQkJIGNoYXIgKmZpZWxkIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgY2hhciAqYXJnIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX21tcF9jbGVhcihjdXJyZW50X2ZzKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWNvbV9lcnIoInNldF9tbXBfdmFsdWUiLCByZXR2YWwsICJ3aGlsZSBjbGVhcmluZyBNTVAgYmxvY2tcbiIpOworCWVsc2UKKwkJbWVtY3B5KGluZm8tPnB0ciwgY3VycmVudF9mcy0+bW1wX2J1ZiwgaW5mby0+c2l6ZSk7CisKKwlyZXR1cm4gMTsgLyogd2UgZG9uJ3QgbmVlZCB0aGUgTU1QIGJsb2NrIHdyaXR0ZW4gYWdhaW4gKi8KK30KKwordm9pZCBkb19zZXRfbW1wX3ZhbHVlKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqdXNhZ2UgPSAiPGZpZWxkPiA8dmFsdWU+XG4iCisJCSJcdFwic2V0X21tcF92YWx1ZSAtbFwiIHdpbGwgbGlzdCB0aGUgbmFtZXMgb2YgIgorCQkiTU1QIGZpZWxkc1xuXHR3aGljaCBjYW4gYmUgc2V0LiI7CisJc3RhdGljIHN0cnVjdCBmaWVsZF9zZXRfaW5mbyAqc21tcDsKKwlzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wX3M7CisJZXJyY29kZV90IHJldHZhbDsKKworCWlmIChhcmdjID09IDIgJiYgc3RyY21wKGFyZ3ZbMV0sICItbCIpID09IDApIHsKKwkJcHJpbnRfcG9zc2libGVfZmllbGRzKG1tcF9maWVsZHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChjdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2sgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJubyBNTVAgYmxvY2sgYWxsb2NhdGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDMsICJzZXRfbW1wX3ZhbHVlIiwKKwkJCQl1c2FnZSwgQ0hFQ0tfRlNfUlcpKQorCQlyZXR1cm47CisKKwltbXBfcyA9IGN1cnJlbnRfZnMtPm1tcF9idWY7CisJaWYgKG1tcF9zID09IE5VTEwpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oY3VycmVudF9mcy0+YmxvY2tzaXplLCAmbW1wX3MpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgImFsbG9jYXRpbmcgTU1QIGJ1ZmZlclxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX21tcF9yZWFkKGN1cnJlbnRfZnMsCisJCQkJCSBjdXJyZW50X2ZzLT5zdXBlci0+c19tbXBfYmxvY2ssIG1tcF9zKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJyZWFkaW5nIE1NUCBibG9jayAlbGx1LlxuIiwKKwkJCQkobG9uZyBsb25nKWN1cnJlbnRfZnMtPnN1cGVyLT5zX21tcF9ibG9jayk7CisJCQlleHQyZnNfZnJlZV9tZW0oJm1tcF9zKTsKKwkJCXJldHVybjsKKwkJfQorCQljdXJyZW50X2ZzLT5tbXBfYnVmID0gbW1wX3M7CisJfQorCisJc21tcCA9IGZpbmRfZmllbGQobW1wX2ZpZWxkcywgYXJndlsxXSk7CisJaWYgKHNtbXAgPT0gMCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJpbnZhbGlkIGZpZWxkIHNwZWNpZmllcjogJXMiLCBhcmd2WzFdKTsKKwkJcmV0dXJuOworCX0KKworCXNldF9tbXAgPSAqbW1wX3M7CisJaWYgKHNtbXAtPmZ1bmMoc21tcCwgYXJndlsxXSwgYXJndlsyXSkgPT0gMCkgeworCQlleHQyZnNfbW1wX3dyaXRlKGN1cnJlbnRfZnMsIGN1cnJlbnRfZnMtPnN1cGVyLT5zX21tcF9ibG9jaywKKwkJCQkgJnNldF9tbXApOworCQkqbW1wX3MgPSBzZXRfbW1wOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RlYnVnZnMvdW51c2VkLmMgYi9lMmZzcHJvZ3MvZGVidWdmcy91bnVzZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhkNzBiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RlYnVnZnMvdW51c2VkLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIHVudXNlZC5jIC0tLSBxdWljayBhbmQgZGlydHkgdW51c2VkIHNwYWNlIGR1bXBlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCit2b2lkIGRvX2R1bXBfdW51c2VkKGludCBhcmdjIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwgY2hhciAqKmFyZ3YpCit7CisJYmxrNjRfdAkJYmxrOworCXVuc2lnbmVkIGNoYXIJYnVmW0VYVDJfTUFYX0JMT0NLX1NJWkVdOworCXVuc2lnbmVkIGludAlpOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAxLCAxLAorCQkJCSJkdW1wX3VudXNlZCIsICIiLCAwKSkKKwkJcmV0dXJuOworCisJZm9yIChibGs9Y3VycmVudF9mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoY3VycmVudF9mcy0+c3VwZXIpOyBibGsrKykgeworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdXJyZW50X2ZzLT5ibG9ja19tYXAsYmxrKSkKKwkJCWNvbnRpbnVlOworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIGJsaywgMSwgYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJXaGlsZSByZWFkaW5nIGJsb2NrXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlmb3IgKGk9MDsgaSA8IGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZTsgaSsrKQorCQkJaWYgKGJ1ZltpXSkKKwkJCQlicmVhazsKKwkJaWYgKGkgPj0gY3VycmVudF9mcy0+YmxvY2tzaXplKQorCQkJY29udGludWU7CisJCXByaW50ZigiXG5VbnVzZWQgYmxvY2sgJWxsdSBjb250YWlucyBub24temVybyBkYXRhOlxuXG4iLAorCQkgICAgICAgYmxrKTsKKwkJZm9yIChpPTA7IGkgPCBjdXJyZW50X2ZzLT5ibG9ja3NpemU7IGkrKykKKwkJCWZwdXRjKGJ1ZltpXSwgc3Rkb3V0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVidWdmcy91dGlsLmMgYi9lMmZzcHJvZ3MvZGVidWdmcy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzNDQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL3V0aWwuYwpAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqIHV0aWwuYyAtLS0gdXRpbGl0aWVzIGZvciB0aGUgZGVidWdmcyBwcm9ncmFtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlCisgKiByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIC8qIG5lZWRlZCBmb3Igc3RycHRpbWUgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BUUkVTRVQKK2V4dGVybiBpbnQgb3B0cmVzZXQ7CQkvKiBkZWZpbmVkIGJ5IEJTRCwgYnV0IG5vdCBvdGhlcnMgKi8KKyNlbmRpZgorCisjaW5jbHVkZSAic3Mvc3MuaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgbGliYyBnZXRvcHQoKSBmdW5jdGlvbiwgd2hpY2gga2VlcHMKKyAqIGludGVybmFsIHN0YXRlLiAgQmFkIGRlc2lnbiEgIFN0dXBpZCBsaWJjIEFQSSBkZXNpZ25lcnMhICBObworICogYmlzY3VpdCEKKyAqCisgKiBCU0QtZGVyaXZlZCBnZXRvcHQoKSBmdW5jdGlvbnMgcmVxdWlyZSB0aGF0IG9wdGluZCBiZSByZXNldCB0byAxIGluCisgKiBvcmRlciB0byByZXNldCBnZXRvcHQoKSBzdGF0ZS4gIFRoaXMgdXNlZCB0byBiZSBnZW5lcmFsbHkgYWNjZXB0ZWQKKyAqIHdheSBvZiByZXNldHRpbmcgZ2V0b3B0KCkuICBIb3dldmVyLCBnbGliYydzIGdldG9wdCgpCisgKiBoYXMgYWRkaXRpb25hbCBnZXRvcHQoKSBzdGF0ZSBiZXlvbmQgb3B0aW5kLCBhbmQgcmVxdWlyZXMgdGhhdAorICogb3B0aW5kIGJlIHNldCB6ZXJvIHRvIHJlc2V0IGl0cyBzdGF0ZS4gIFNvIHRoZSB1bmZvcnR1bmF0ZSBzdGF0ZSBvZgorICogYWZmYWlycyBpcyB0aGF0IEJTRC1kZXJpdmVkIHZlcnNpb25zIG9mIGdldG9wdCgpIG1pc2JlaGF2ZSBpZgorICogb3B0aW5kIGlzIHNldCB0byAwIGluIG9yZGVyIHRvIHJlc2V0IGdldG9wdCgpLCBhbmQgZ2xpYmMncyBnZXRvcHQoKQorICogd2lsbCBjb3JlIGR1bXAgaWYgb3B0aW5kIGlzIHNldCAxIGluIG9yZGVyIHRvIHJlc2V0IGdldG9wdCgpLgorICoKKyAqIE1vcmUgbW9kZXJuIHZlcnNpb25zIG9mIEJTRCByZXF1aXJlIHRoYXQgb3B0cmVzZXQgYmUgc2V0IHRvIDEgaW4KKyAqIG9yZGVyIHRvIHJlc2V0IGdldG9wdCgpLiAgIFNpZ2guICBTdGFuZGFyZHMsIGFueW9uZT8KKyAqCisgKiBXZSBoaWRlIHRoZSBoYWlyIGhlcmUuCisgKi8KK3ZvaWQgcmVzZXRfZ2V0b3B0KHZvaWQpCit7CisjaWYgZGVmaW5lZChfX0dMSUJDX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorCW9wdGluZCA9IDA7CisjZWxzZQorCW9wdGluZCA9IDE7CisjZW5kaWYKKyNpZmRlZiBIQVZFX09QVFJFU0VUCisJb3B0cmVzZXQgPSAxOwkJLyogTWFrZXMgQlNEIGdldG9wdCBoYXBweSAqLworI2VuZGlmCit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWdlcl9zZWFyY2hfbGlzdFtdID0geyAicGFnZXIiLCAibW9yZSIsICJsZXNzIiwgMCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VyX2Rpcl9saXN0W10gPSB7ICIvdXNyL2JpbiIsICIvYmluIiwgMCB9OworCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9wYWdlcihjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqKmksICoqajsKKworCWZvciAoaSA9IHBhZ2VyX3NlYXJjaF9saXN0OyAqaTsgaSsrKSB7CisJCWZvciAoaiA9IHBhZ2VyX2Rpcl9saXN0OyAqajsgaisrKSB7CisJCQlzcHJpbnRmKGJ1ZiwgIiVzLyVzIiwgKmosICppKTsKKwkJCWlmIChhY2Nlc3MoYnVmLCBYX09LKSA9PSAwKQorCQkJCXJldHVybihidWYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitGSUxFICpvcGVuX3BhZ2VyKHZvaWQpCit7CisJRklMRSAqb3V0ZmlsZSA9IDA7CisJY29uc3QgY2hhciAqcGFnZXIgPSBzc19zYWZlX2dldGVudigiREVCVUdGU19QQUdFUiIpOworCWNoYXIgYnVmWzgwXTsKKworCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKwlpZiAoIWlzYXR0eSgxKSkKKwkJcmV0dXJuIHN0ZG91dDsKKwlpZiAoIXBhZ2VyKQorCQlwYWdlciA9IHNzX3NhZmVfZ2V0ZW52KCJQQUdFUiIpOworCWlmICghcGFnZXIpCisJCXBhZ2VyID0gZmluZF9wYWdlcihidWYpOworCWlmICghcGFnZXIgfHwKKwkgICAgKHN0cmNtcChwYWdlciwgIl9fbm9uZV9fIikgPT0gMCkgfHwKKwkgICAgKChvdXRmaWxlID0gcG9wZW4ocGFnZXIsICJ3IikpID09IDApKQorCQlyZXR1cm4gc3Rkb3V0OworCXJldHVybiBvdXRmaWxlOworfQorCit2b2lkIGNsb3NlX3BhZ2VyKEZJTEUgKnN0cmVhbSkKK3sKKwlpZiAoc3RyZWFtICYmIHN0cmVhbSAhPSBzdGRvdXQpIHBjbG9zZShzdHJlYW0pOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgd2hlbmV2ZXIgYSBjb21tYW5kIG5lZWRzIHRvIHR1cm4gYSBzdHJpbmcgaW50bworICogYW4gaW5vZGUuCisgKi8KK2V4dDJfaW5vX3Qgc3RyaW5nX3RvX2lub2RlKGNoYXIgKnN0cikKK3sKKwlleHQyX2lub190CWlubzsKKwlpbnQJCWxlbiA9IHN0cmxlbihzdHIpOworCWNoYXIJCSplbmQ7CisJaW50CQlyZXR2YWw7CisKKwkvKgorCSAqIElmIHRoZSBzdHJpbmcgaXMgb2YgdGhlIGZvcm0gPGlubz4sIHRoZW4gdHJlYXQgaXQgYXMgYW4KKwkgKiBpbm9kZSBudW1iZXIuCisJICovCisJaWYgKChsZW4gPiAyKSAmJiAoc3RyWzBdID09ICc8JykgJiYgKHN0cltsZW4tMV0gPT0gJz4nKSkgeworCQlpbm8gPSBzdHJ0b3VsKHN0cisxLCAmZW5kLCAwKTsKKwkJaWYgKCplbmQ9PSc+JykKKwkJCXJldHVybiBpbm87CisJfQorCisJcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgc3RyLCAmaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoc3RyLCByZXR2YWwsIDApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGlubzsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IG9wZW4sIGFuZCBwcmludHMgYW4KKyAqIGVycm9yIG1lc3NhZ2UgdG8gdGhhdCBlZmZlY3QuCisgKi8KK2ludCBjaGVja19mc19vcGVuKGNoYXIgKm5hbWUpCit7CisJaWYgKCFjdXJyZW50X2ZzKSB7CisJCWNvbV9lcnIobmFtZSwgMCwgIkZpbGVzeXN0ZW0gbm90IG9wZW4iKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiBhIGZpbGVzeXN0ZW0gaXMgb3BlbiwgYW5kIHByaW50cyBhbgorICogZXJyb3IgbWVzc2FnZSB0byB0aGF0IGVmZmVjdC4KKyAqLworaW50IGNoZWNrX2ZzX25vdF9vcGVuKGNoYXIgKm5hbWUpCit7CisJaWYgKGN1cnJlbnRfZnMpIHsKKwkJY29tX2VycihuYW1lLCAwLAorCQkJIkZpbGVzeXN0ZW0gJXMgaXMgc3RpbGwgb3Blbi4gIENsb3NlIGl0IGZpcnN0LlxuIiwKKwkJCWN1cnJlbnRfZnMtPmRldmljZV9uYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiBhIGZpbGVzeXN0ZW0gaXMgbm90IG9wZW5lZCByZWFkL3dyaXRlLAorICogYW5kIHByaW50cyBhbiBlcnJvciBtZXNzYWdlIHRvIHRoYXQgZWZmZWN0LgorICovCitpbnQgY2hlY2tfZnNfcmVhZF93cml0ZShjaGFyICpuYW1lKQoreworCWlmICghKGN1cnJlbnRfZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkgeworCQljb21fZXJyKG5hbWUsIDAsICJGaWxlc3lzdGVtIG9wZW5lZCByZWFkL29ubHkiKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgMSBpZiBhIGZpbGVzeXN0ZW0gaXMgZG9lc24ndCBoYXZlIGl0cyBpbm9kZQorICogYW5kIGJsb2NrIGJpdG1hcHMgbG9hZGVkLCBhbmQgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhhdAorICogZWZmZWN0LgorICovCitpbnQgY2hlY2tfZnNfYml0bWFwcyhjaGFyICpuYW1lKQoreworCWlmICghY3VycmVudF9mcy0+YmxvY2tfbWFwIHx8ICFjdXJyZW50X2ZzLT5pbm9kZV9tYXApIHsKKwkJY29tX2VycihuYW1lLCAwLCAiRmlsZXN5c3RlbSBiaXRtYXBzIG5vdCBsb2FkZWQiKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIF9fdTMyIHRpbWUgdmFsdWUgYW5kIGNvbnZlcnRzIGl0IHRvIGEgc3RyaW5nLAorICogdXNpbmcgY3RpbWUKKyAqLworY2hhciAqdGltZV90b19zdHJpbmcoX191MzIgY2wpCit7CisJc3RhdGljIGludAlkb19nbXQgPSAtMTsKKwl0aW1lX3QJCXQgPSAodGltZV90KSBjbDsKKwljb25zdCBjaGFyCSp0ejsKKworCWlmIChkb19nbXQgPT0gLTEpIHsKKwkJLyogVGhlIGRpZXQgbGliYyBkb2Vzbid0IHJlc3BlY3QgdGhlIFRaIGVudmlyb25lbW50IHZhcmlhYmxlICovCisJCXR6ID0gc3Nfc2FmZV9nZXRlbnYoIlRaIik7CisJCWlmICghdHopCisJCQl0eiA9ICIiOworCQlkb19nbXQgPSAhc3RyY21wKHR6LCAiR01UIik7CisJfQorCisJcmV0dXJuIGFzY3RpbWUoKGRvX2dtdCkgPyBnbXRpbWUoJnQpIDogbG9jYWx0aW1lKCZ0KSk7Cit9CisKKy8qCisgKiBQYXJzZSBhIHN0cmluZyBhcyBhIHRpbWUuICBSZXR1cm4gKCh0aW1lX3QpLTEpIGlmIHRoZSBzdHJpbmcKKyAqIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgc2FuZSB0aW1lLgorICovCit0aW1lX3Qgc3RyaW5nX3RvX3RpbWUoY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdAl0bQl0czsKKwl0aW1lX3QJCXJldDsKKwljaGFyICp0bXA7CisKKwlpZiAoc3RyY21wKGFyZywgIm5vdyIpID09IDApIHsKKwkJcmV0dXJuIHRpbWUoMCk7CisJfQorCWlmIChhcmdbMF0gPT0gJ0AnKSB7CisJCS8qIGludGVycHJldCBpdCBhcyBhbiBpbnRlZ2VyICovCisJCXJldCA9IHN0cnRvdWwoYXJnKzEsICZ0bXAsIDApOworCQlpZiAoKnRtcCkKKwkJCXJldHVybiAoKHRpbWVfdCkgLTEpOworCQlyZXR1cm4gcmV0OworCX0KKwltZW1zZXQoJnRzLCAwLCBzaXplb2YodHMpKTsKKyNpZmRlZiBIQVZFX1NUUlBUSU1FCisJc3RycHRpbWUoYXJnLCAiJVklbSVkJUglTSVTIiwgJnRzKTsKKyNlbHNlCisJc3NjYW5mKGFyZywgIiU0ZCUyZCUyZCUyZCUyZCUyZCIsICZ0cy50bV95ZWFyLCAmdHMudG1fbW9uLAorCSAgICAgICAmdHMudG1fbWRheSwgJnRzLnRtX2hvdXIsICZ0cy50bV9taW4sICZ0cy50bV9zZWMpOworCXRzLnRtX3llYXIgLT0gMTkwMDsKKwl0cy50bV9tb24gLT0gMTsKKwlpZiAodHMudG1feWVhciA8IDAgfHwgdHMudG1fbW9uIDwgMCB8fCB0cy50bV9tb24gPiAxMSB8fAorCSAgICB0cy50bV9tZGF5IDwgMCB8fCB0cy50bV9tZGF5ID4gMzEgfHwgdHMudG1faG91ciA+IDIzIHx8CisJICAgIHRzLnRtX21pbiA+IDU5IHx8IHRzLnRtX3NlYyA+IDYxKQorCQl0cy50bV9tZGF5ID0gMDsKKyNlbmRpZgorCXRzLnRtX2lzZHN0ID0gLTE7CisJcmV0ID0gbWt0aW1lKCZ0cyk7CisJaWYgKHRzLnRtX21kYXkgPT0gMCB8fCByZXQgPT0gKCh0aW1lX3QpIC0xKSkgeworCQkvKiBUcnkgaXQgYXMgYW4gaW50ZWdlci4uLiAqLworCQlyZXQgPSBzdHJ0b3VsKGFyZywgJnRtcCwgMCk7CisJCWlmICgqdG1wKQorCQkJcmV0dXJuICgodGltZV90KSAtMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nLCBwcmludGluZworICogYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCBmYWlscywgYW5kIHJldHVybmluZyBzdWNjZXNzIG9yIGZhaWx1cmUgaW4gZXJyLgorICovCit1bnNpZ25lZCBsb25nIHBhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqY21kLAorCQkJICBjb25zdCBjaGFyICpkZXNjciwgaW50ICplcnIpCit7CisJY2hhcgkJKnRtcDsKKwl1bnNpZ25lZCBsb25nCXJldDsKKworCXJldCA9IHN0cnRvdWwoc3RyLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCA9PSAwKSB7CisJCWlmIChlcnIpCisJCQkqZXJyID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisJY29tX2VycihjbWQsIDAsICJCYWQgJXMgLSAlcyIsIGRlc2NyLCBzdHIpOworCWlmIChlcnIpCisJCSplcnIgPSAxOworCWVsc2UKKwkJZXhpdCgxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZywgcHJpbnRpbmcKKyAqIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgZmFpbHMsIGFuZCByZXR1cm5pbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIGVyci4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX3Vsb25nbG9uZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkgICBjb25zdCBjaGFyICpkZXNjciwgaW50ICplcnIpCit7CisJY2hhcgkJCSp0bXA7CisJdW5zaWduZWQgbG9uZyBsb25nCXJldDsKKworCXJldCA9IHN0cnRvdWxsKHN0ciwgJnRtcCwgMCk7CisJaWYgKCp0bXAgPT0gMCkgeworCQlpZiAoZXJyKQorCQkJKmVyciA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCWNvbV9lcnIoY21kLCAwLCAiQmFkICVzIC0gJXMiLCBkZXNjciwgc3RyKTsKKwlpZiAoZXJyKQorCQkqZXJyID0gMTsKKwllbHNlCisJCWV4aXQoMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHN0cmluZyB0byBhIGJsb2NrIG51bWJlci4gIEl0IHJldHVybnMKKyAqIDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlLgorICovCitpbnQgc3RydG9ibGsoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzdHIsIGJsazY0X3QgKnJldCkKK3sKKwlibGs2NF90CWJsazsKKwlpbnQJZXJyOworCisJYmxrID0gcGFyc2VfdWxvbmdsb25nKHN0ciwgY21kLCAiYmxvY2sgbnVtYmVyIiwgJmVycik7CisJKnJldCA9IGJsazsKKwlpZiAoZXJyKQorCQljb21fZXJyKGNtZCwgMCwgIkludmFsaWQgYmxvY2sgbnVtYmVyOiAlcyIsIHN0cik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBjb21tb24gaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNvbW1hbmQgcHJvY2Vzc2luZworICogcm91dGluZXMKKyAqLworaW50IGNvbW1vbl9hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IG1pbl9hcmdjLCBpbnQgbWF4X2FyZ2MsCisJCQljb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnVzYWdlLCBpbnQgZmxhZ3MpCit7CisJaWYgKGFyZ2MgPCBtaW5fYXJnYyB8fCBhcmdjID4gbWF4X2FyZ2MpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6ICVzICVzIiwgY21kLCB1c2FnZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZmxhZ3MgJiBDSEVDS19GU19OT1RPUEVOKSB7CisJCWlmIChjaGVja19mc19ub3Rfb3Blbihhcmd2WzBdKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQkJcmV0dXJuIDE7CisJfQorCWlmICgoZmxhZ3MgJiBDSEVDS19GU19SVykgJiYgY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKwkJcmV0dXJuIDE7CisJaWYgKChmbGFncyAmIENIRUNLX0ZTX0JJVE1BUFMpICYmIGNoZWNrX2ZzX2JpdG1hcHMoYXJndlswXSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRvX3N0YXQsIGRvX2ZyZWVpLCBkb19zZXRpLCBhbmQKKyAqIGRvX3Rlc3RpLCBldGMuICBCYXNpY2FsbHksIGFueSBjb21tYW5kIHdoaWNoIHRha2VzIGEgc2luZ2xlCisgKiBhcmd1bWVudCB3aGljaCBpcyBhIGZpbGUvaW5vZGUgbnVtYmVyIHNwZWNpZmllci4KKyAqLworaW50IGNvbW1vbl9pbm9kZV9hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJCSAgICAgIGV4dDJfaW5vX3QgKmlub2RlLCBpbnQgZmxhZ3MpCit7CisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMiwgYXJndlswXSwgIjxmaWxlPiIsIGZsYWdzKSkKKwkJcmV0dXJuIDE7CisKKwkqaW5vZGUgPSBzdHJpbmdfdG9faW5vZGUoYXJndlsxXSk7CisJaWYgKCEqaW5vZGUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRvX2ZyZWViLCBkb19zZXRiLCBhbmQgZG9fdGVzdGIKKyAqLworaW50IGNvbW1vbl9ibG9ja19hcmdzX3Byb2Nlc3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJCSAgICAgIGJsazY0X3QgKmJsb2NrLCBibGs2NF90ICpjb3VudCkKK3sKKwlpbnQJZXJyOworCisJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMiwgMywgYXJndlswXSwKKwkJCQkiPGJsb2NrPiBbY291bnRdIiwgQ0hFQ0tfRlNfQklUTUFQUykpCisJCXJldHVybiAxOworCisJaWYgKHN0cnRvYmxrKGFyZ3ZbMF0sIGFyZ3ZbMV0sIGJsb2NrKSkKKwkJcmV0dXJuIDE7CisJaWYgKCpibG9jayA9PSAwKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIkludmFsaWQgYmxvY2sgbnVtYmVyIDAiKTsKKwkJZXJyID0gMTsKKwl9CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZXJyID0gc3RydG9ibGsoYXJndlswXSwgYXJndlsyXSwgY291bnQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZGVidWdmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQljb25zdCBjaGFyICpjbWQsIGludCBidWZzaXplKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGN1cnJlbnRfZnMsIGlubywgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3JlYWRfaW5vZGUoZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsCisJCQljb25zdCBjaGFyICpjbWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgY29uc3QgY2hhciAqY21kLAorCQkJICAgICBpbnQgYnVmc2l6ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoY3VycmVudF9mcywgaW5vLAorCQkJCQkgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z2ZzX3dyaXRlX2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJY29uc3QgY2hhciAqY21kKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCBpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGNtZCwgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBpbm9kZSAldSIsIGlubyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRlYnVnZnNfd3JpdGVfbmV3X2lub2RlKGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJICAgIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShjdXJyZW50X2ZzLCBpbm8sIGlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY21kLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIGlubyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgbW9kZSwgcmV0dXJuIHRoZSBleHQyIGZpbGUgdHlwZQorICovCitpbnQgZXh0Ml9maWxlX3R5cGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKExJTlVYX1NfSVNSRUcobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1JFR19GSUxFOworCisJaWYgKExJTlVYX1NfSVNESVIobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0RJUjsKKworCWlmIChMSU5VWF9TX0lTQ0hSKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9DSFJERVY7CisKKwlpZiAoTElOVVhfU19JU0JMSyhtb2RlKSkKKwkJcmV0dXJuIEVYVDJfRlRfQkxLREVWOworCisJaWYgKExJTlVYX1NfSVNMTksobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NZTUxJTks7CisKKwlpZiAoTElOVVhfU19JU0ZJRk8obW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0ZJRk87CisKKwlpZiAoTElOVVhfU19JU1NPQ0sobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NPQ0s7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kZWJ1Z2ZzL3phcC5jIGIvZTJmc3Byb2dzL2RlYnVnZnMvemFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0ZDAyZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9kZWJ1Z2ZzL3phcC5jCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogemFwLmMgLS0tIHphcCBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZGVidWdmcy5oIgorCit2b2lkIGRvX3phcF9ibG9jayhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGxvbmcJcGF0dGVybiA9IDA7CisJdW5zaWduZWQgY2hhcgkqYnVmOworCWV4dDJfaW5vX3QJaW5vZGU7CisJZXJyY29kZV90CWVycmNvZGU7CisJYmxrNjRfdAkJYmxvY2s7CisJY2hhcgkJKmZpbGUgPSBOVUxMOworCWludAkJYywgZXJyOworCWludAkJb2Zmc2V0ID0gLTE7CisJaW50CQlsZW5ndGggPSAtMTsKKwlpbnQJCWJpdCA9IC0xOworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAoY2hlY2tfZnNfcmVhZF93cml0ZShhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYjpmOmw6bzpwOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2YnOgorCQkJZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJCWJpdCA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAiYml0IiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWlmIChiaXQgPj0gKGludCkgY3VycmVudF9mcy0+YmxvY2tzaXplICogOCkgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBiaXQgdG8gZmxpcCAiCisJCQkJCSJtdXN0IGJlIHdpdGhpbiBhICVkIGJsb2NrXG4iLAorCQkJCQljdXJyZW50X2ZzLT5ibG9ja3NpemUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXBhdHRlcm4gPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICAgICJwYXR0ZXJuIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWlmIChwYXR0ZXJuID49IDI1NikgeworCQkJCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBmaWxsIHBhdHRlcm4gbXVzdCAiCisJCQkJCSJiZSBhbiA4LWJpdCB2YWx1ZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJb2Zmc2V0ID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAgICJvZmZzZXQiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJaWYgKG9mZnNldCA+PSAoaW50KSBjdXJyZW50X2ZzLT5ibG9ja3NpemUpIHsKKwkJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgb2Zmc2V0IG11c3QgYmUgIgorCQkJCQkid2l0aGluIGEgJWQgYmxvY2tcbiIsCisJCQkJCWN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCWxlbmd0aCA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAgICAibGVuZ3RoIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBwcmludF91c2FnZTsKKwkJfQorCX0KKworCWlmIChiaXQgPiAwICYmIG9mZnNldCA+IDApIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVGhlIC1vIGFuZCAtYiBvcHRpb25zIGNhbiBub3QgYmUgbWl4ZWQuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJb2Zmc2V0ID0gMDsKKwlpZiAobGVuZ3RoIDwgMCkKKwkJbGVuZ3RoID0gY3VycmVudF9mcy0+YmxvY2tzaXplIC0gb2Zmc2V0OworCWlmICgob2Zmc2V0ICsgbGVuZ3RoKSA+IChpbnQpIGN1cnJlbnRfZnMtPmJsb2Nrc2l6ZSkgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJUaGUgc3BlY2lmaWVkIGxlbmd0aCBpcyB0b28gYnVnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhcmdjICE9IG9wdGluZCsxKSB7CisJcHJpbnRfdXNhZ2U6CisJCWNvbV9lcnIoMCwgMCwgIlVzYWdlOlx0emFwX2Jsb2NrIFstZiBmaWxlXSBbLW8gb2Zmc2V0XSAiCisJCQkiWy1sIGxlbmd0aF0gWy1wIHBhdHRlcm5dIGJsb2NrX251bSIpOworCQljb21fZXJyKDAsIDAsICJcdHphcF9ibG9jayBbLWYgZmlsZV0gWy1iIGJpdF0gIgorCQkJImJsb2NrX251bSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZ2xvbmcoYXJndltvcHRpbmRdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoZmlsZSkgeworCQlpbm9kZSA9IHN0cmluZ190b19pbm9kZShmaWxlKTsKKwkJaWYgKCFpbm9kZSkKKwkJCXJldHVybjsKKwkJZXJyY29kZSA9IGV4dDJmc19ibWFwMihjdXJyZW50X2ZzLCBpbm9kZSwgMCwgMCwgMCwKKwkJCQkgICAgICAgYmxvY2ssIDAsICZibG9jayk7CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsCisJCQkJIndoaWxlIG1hcHBpbmcgbG9naWNhbCBibG9jayAlbGx1XG4iLCBibG9jayk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlidWYgPSBtYWxsb2MoY3VycmVudF9mcy0+YmxvY2tzaXplKTsKKwlpZiAoIWJ1ZikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiKTsKKwkJcmV0dXJuOworCX0KKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIGJsb2NrLCAxLCBidWYpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwKKwkJCSJ3aGlsZSByZWFkaW5nIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKGJpdCA+PSAwKQorCQlidWZbYml0ID4+IDNdIF49IDEgPDwgKGJpdCAmIDcpOworCWVsc2UKKwkJbWVtc2V0KGJ1ZitvZmZzZXQsIHBhdHRlcm4sIGxlbmd0aCk7CisKKwllcnJjb2RlID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChjdXJyZW50X2ZzLT5pbywgYmxvY2ssIDEsIGJ1Zik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihhcmd2WzBdLCBlcnJjb2RlLAorCQkJIndoaWxlIHdyaXRlIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybjsKK30KKwordm9pZCBkb19ibG9ja19kdW1wKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgY2hhcgkqYnVmOworCWV4dDJfaW5vX3QJaW5vZGU7CisJZXJyY29kZV90CWVycmNvZGU7CisJYmxrNjRfdAkJYmxvY2s7CisJY2hhcgkJKmZpbGUgPSBOVUxMOworCXVuc2lnbmVkIGludAlpLCBqOworCWludAkJYywgZXJyOworCWludAkJc3VwcHJlc3MgPSAtMTsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlyZXNldF9nZXRvcHQoKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJmOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2YnOgorCQkJZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnb3RvIHByaW50X3VzYWdlOworCQl9CisJfQorCisJaWYgKGFyZ2MgIT0gb3B0aW5kICsgMSkgeworCXByaW50X3VzYWdlOgorCQljb21fZXJyKDAsIDAsICJVc2FnZTogYmxvY2tfZHVtcCBbLWYgaW5vZGVdIGJsb2NrX251bSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZ2xvbmcoYXJndltvcHRpbmRdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoZmlsZSkgeworCQlpbm9kZSA9IHN0cmluZ190b19pbm9kZShmaWxlKTsKKwkJaWYgKCFpbm9kZSkKKwkJCXJldHVybjsKKwkJZXJyY29kZSA9IGV4dDJmc19ibWFwMihjdXJyZW50X2ZzLCBpbm9kZSwgMCwgMCwgMCwKKwkJCQkgICAgICAgYmxvY2ssIDAsICZibG9jayk7CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIGVycmNvZGUsCisJCQkJIndoaWxlIG1hcHBpbmcgbG9naWNhbCBibG9jayAlbGx1XG4iLCBibG9jayk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlidWYgPSBtYWxsb2MoY3VycmVudF9mcy0+YmxvY2tzaXplKTsKKwlpZiAoIWJ1ZikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIiKTsKKwkJcmV0dXJuOworCX0KKworCWVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoY3VycmVudF9mcy0+aW8sIGJsb2NrLCAxLCBidWYpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIoYXJndlswXSwgZXJyY29kZSwKKwkJCSJ3aGlsZSByZWFkaW5nIGJsb2NrICVsbHVcbiIsIGJsb2NrKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZm9yIChpPTA7IGkgPCBjdXJyZW50X2ZzLT5ibG9ja3NpemU7IGkgKz0gMTYpIHsKKwkJaWYgKHN1cHByZXNzIDwgMCkgeworCQkJaWYgKGkgJiYgbWVtY21wKGJ1ZiArIGksIGJ1ZiArIGkgLSAxNiwgMTYpID09IDApIHsKKwkJCQlzdXBwcmVzcyA9IGk7CisJCQkJcHJpbnRmKCIqXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChtZW1jbXAoYnVmICsgaSwgYnVmICsgc3VwcHJlc3MsIDE2KSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJc3VwcHJlc3MgPSAtMTsKKwkJfQorCQlwcmludGYoIiUwNG8gICIsIGkpOworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQkJcHJpbnRmKCIlMDJ4IiwgYnVmW2kral0pOworCQkJaWYgKChqICUgMikgPT0gMSkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCX0KKwkJcHV0Y2hhcignICcpOworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKKwkJCXByaW50ZigiJWMiLCBpc3ByaW50KGJ1ZltpK2pdKSA/IGJ1ZltpK2pdIDogJy4nKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisJcHV0Y2hhcignXG4nKTsKKworZXJyb3V0OgorCWZyZWUoYnVmKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZGVwZml4LnNlZCBiL2UyZnNwcm9ncy9kZXBmaXguc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmQ3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZGVwZml4LnNlZApAQCAtMCwwICsxLDM1IEBACisjCisjIEluc2VydCB0aGUgaGVhZGVyLi4uLi4KKyMKKzFpXAorIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrK1wKKyMgXAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW5cCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlXAorIworCisjCisjIFJlbW92ZSBsaW5lIGNvbnRpbnVhdGlvbnMuLi4uCisjCis6RklSU1QKK3kvCS8gLworcy9eICovLworL1xcJC97CitOCit5LwkvIC8KK3MvXFxcbiAqLyAvCitiRklSU1QKK30KK3MvICAqLyAvZworCitzOy91c3IvaW5jbHVkZS9bXiBdKiAqOztnCitzOy91c3IvbGliL1teIF0qICo7O2cKK3M7L21pdC9jeWdudXNbXiBdKiAqOztnCitzO1wuXC4vW14gXSpsaWIvYmxraWQvYmxraWRbXiBdKiAqOztnCitzO1wuXC4vW14gXSpsaWIvdXVpZC91dWlkLmhbXiBdKiAqOztnCisKKyMKKyMgTm93IGluc2VydCBhIHRyYWlsaW5nIG5ld2xpbmUuLi4KKyMKKyRhXAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZG9jL01ha2VmaWxlLmluIGIvZTJmc3Byb2dzL2RvYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmIyNjEyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RvYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgZG9jIGRpcmVjdG9yeQorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK215X2RpciA9IGRvYworSU5TVEFMTCA9IEBJTlNUQUxMQAorCitATUNPTkZJR0AKKworRFZJPXRleGkyZHZpCitEVklQUz1kdmlwcyAtbyAiJEAiCitJTkZPPUBNQUtFSU5GT0AKK0hUTUw9bWFrZWluZm8gLS1odG1sIC0tbm8tc3BsaXQKK1BTMlBERj1wczJwZGYKKworYWxsOjogbGliZXh0MmZzLmluZm8gbGliZXh0MmZzLmR2aSBsaWJleHQyZnMuaHRtbAorCitpbnN0YWxsLWRvYy1saWJzOiBsaWJleHQyZnMuaW5mbyBsaWJleHQyZnMuZHZpCisJJChRKSAkKFJNKSAtcmYgJChERVNURElSKSQoaW5mb2RpcikvbGliZXh0MmZzLmluZm8qCisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChpbmZvZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQoaW5mb2RpcikKKwktJChRKSBmb3IgaSBpbiBsaWJleHQyZnMuaW5mbyogOyBkbyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChpbmZvZGlyKS8kJGkiIDsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKGluZm9kaXIpLyQkaSA7IFwKKwlkb25lCisJJChFKSAiCUdaSVAgJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoiCisJLSQoUSkgZ3ppcCAtOSAkKERFU1RESVIpJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoKKwordW5pbnN0YWxsLWRvYy1saWJzOgorCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmZvZGlyKS9saWJleHQyZnMuaW5mbyoKKworbGliZXh0MmZzLmluZm86ICQoc3JjZGlyKS9saWJleHQyZnMudGV4aW5mbworCSQoRSkgIglNQUtFSU5GTyAkQCIKKwktJChRKSAkKElORk8pICQoc3JjZGlyKS9saWJleHQyZnMudGV4aW5mbworCitsaWJleHQyZnMuZHZpOiAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKwkkKEUpICIJVEVYSTJEVkkgJEAiCisJLSQoUSkgJChEVkkpICQoc3JjZGlyKS9saWJleHQyZnMudGV4aW5mbworCitsaWJleHQyZnMucHM6IGxpYmV4dDJmcy5kdmkKKwkkKEUpICIJRFZJUFMgJEAiCisJLSQoUSkgJChEVklQUykgbGliZXh0MmZzLmR2aQorCitsaWJleHQyZnMucGRmOiBsaWJleHQyZnMucHMKKwkkKEUpICIJUFMyUERGICRAIgorCS0kKFEpICQoUFMyUERGKSBsaWJleHQyZnMucHMKKworbGliZXh0MmZzLmh0bWw6ICQoc3JjZGlyKS9saWJleHQyZnMudGV4aW5mbworCSQoRSkgIglURVhJMkhUTUwgJEAiCisJLSQoUSkgJChIVE1MKSAkKHNyY2RpcikvbGliZXh0MmZzLnRleGluZm8KKworLlBIT05ZOiBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjo6IGNsZWFuCisJJChSTSkgLWYgTWFrZWZpbGUKKworLlBIT05ZOiBjbGVhbgorY2xlYW46OiBjbGVhbi1hbGwKKworLlBIT05ZOiBjbGVhbi1hbGwKK2NsZWFuLWFsbDo6IGNsZWFuLXRleCBjbGVhbi1iYWNrdXAgY2xlYW4tZmluYWwgY2xlYW4tdGFyZmlsZXMgY2xlYW4taHRtbAorCisuUEhPTlk6IGNsZWFuLWZpbmFsCitjbGVhbi1maW5hbDo6CisJJChSTSkgLWYgKi5wcyAqLmluZm8gKi5pbmZvLT8gKi5odG1sICoucGRmCisKKy5QSE9OWTogY2xlYW4tdGV4CitjbGVhbi10ZXg6OgorCSQoUk0pIC1mICouYXV4ICouY3AgKi5kdmkgKi5mbiAqLmt5ICoubG9nICoucGcgKi50b2MgKi50cCAqLnZyICouZm5zCisKKy5QSE9OWTogY2xlYW4tYmFja3VwCitjbGVhbi1iYWNrdXA6OgorCSQoUk0pIC1mICp+ICMqCisKKy5QSE9OWTogY2xlYW4tdGFyZmlsZXMKK2NsZWFuLXRhcmZpbGVzOjoKKwkkKFJNKSAtZiAqLnRhciAqLnRhci5neiAqLnRnegorCitjbGVhbi1odG1sOjoKKwkkKFJNKSAtZiAqLmh0bWwKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2RvYy9saWJibGtpZC50eHQgYi9lMmZzcHJvZ3MvZG9jL2xpYmJsa2lkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVhMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2RvYy9saWJibGtpZC50eHQKQEAgLTAsMCArMSw3OCBAQAorbGliYmxraWQgLSBhIGxpYnJhcnkgdG8gaGFuZGxlIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQgdG9rZW4gZXh0cmFjdGlvbgorCitCYXNpYyB1c2FnZSBpcyBhcyBmb2xsb3dzIC0gdGhlcmUgYXJlIHR3byBub3JtYWwgdXNhZ2UgcGF0dGVybnM6CisKK0ZvciBjYXNlcyB3aGVyZSBhIHByb2dyYW0gd2FudHMgaW5mb3JtYXRpb24gYWJvdXQgbXVsdGlwbGUgZGV2aWNlcywgb3IKK2V4cGVjdHMgdG8gYmUgZG9pbmcgbXVsdGlwbGUgdG9rZW4gc2VhcmNoZXMsIHRoZSBwcm9ncmFtIHNob3VsZAorZGlyZWN0bHkgaW5pdGlhbGl6ZSBjYWNoZSBmaWxlIHZpYSAoc2Vjb25kIHBhcmFtZXRlciBpcyBjYWNoZQorZmlsZW5hbWUsIE5VTEwgPSBkZWZhdWx0KToKKworCWJsa2lkX2NhY2hlIGNhY2hlID0gTlVMTDsKKwlpZiAoYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgTlVMTCkgPCAwKQorCQkvKiBlcnJvciByZWFkaW5nIHRoZSBjYWNoZSBmaWxlLCBub3QgcmVhbGx5IGZhdGFsICovCisKK05vdGUgdGhhdCBpZiBubyBjYWNoZSBmaWxlIGV4aXN0cywgYW4gZW1wdHkgY2FjaGUgc3RydWN0IGlzIHN0aWxsCithbGxvY2F0ZWQuICBVc2FnZSBvZiBsaWJibGtpZCBmdW5jdGlvbnMgd2lsbCB1c2UgdGhlIGNhY2hlIHRvIGF2b2lkCituZWVkbGVzcyBkZXZpY2Ugc2NhbnMuCisKK1RoZSBtb2RlbCBvZiB0aGUgYmxraWQgY2FjaGUgaXMgdGhhdCBlYWNoIGRldmljZSBoYXMgYSBudW1iZXIgb2YKK2F0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LiAgQ3VycmVudGx5IHRoZSBhdHRyaWJ1dGVzCit3aGljaCBhcmUgc3VwcG9ydGVkIChhbmQgc2V0KSBieSBibGtpZCBhcmU6CisKKwlUWVBFCQlmaWxlc3lzdGVtIHR5cGUKKwlVVUlECQlmaWxlc3lzdGVtIHV1aWQKKwlMQUJFTAkJZmlsZXN5c3RlbSBsYWJlbAorCisKK0hvdyB0byB1c2UgbGliYmxraWQ/ICBOb3JtYWxseSwgeW91IGVpdGhlciB3YW50IHRvIGZpbmQgYSBkZXZpY2Ugd2l0aAorYSBzcGVjaWZpYyBOQU1FPXZhbHVlIHRva2VuLCBvciB5b3Ugd2FudCB0byBvdXRwdXQgdG9rZW4ocykgZnJvbSBhCitkZXZpY2UuICBUbyBmaW5kIGEgZGV2aWNlIHRoYXQgbWF0Y2hlcyBhIGZvbGxvd2luZyBhdHRyaWJ1dGUsIHlvdQorc2ltcGx5IGNhbGwgdGhlIGJsa2lkX2dldF9kZXZuYW1lKCkgZnVuY3Rpb246IAorCisJaWYgKChkZXZuYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoY2FjaGUsIGF0dHJpYnV0ZV9uYW1lLCB2YWx1ZSkpKSB7CisJCS8qIGRvIHNvbWV0aGluZyB3aXRoIGRldm5hbWUgKi8KKwkJc3RyaW5nX2ZyZWUoZGV2bmFtZSk7CisJfQorCitUaGUgY2FjaGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsOyBpZiBpdCBpcyBOVUxMLCB0aGVuIHRoZSBibGtpZCBsaWJyYXJ5Cit3aWxsIGxvYWQgdGhlIGRlZmF1bHQgYmxraWQudGFiIGNhY2hlIGZpbGUsIGFuZCB0aGVuIHJlbGVhc2UgdGhlIGNhY2hlCitiZWZvcmUgZnVuY3Rpb24gY2FsbCByZXR1cm5zLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhbGxvY2F0ZWQgc3RyaW5nCit3aGljaCBob2xkcyB0aGUgcmVzdWx0aW5nIGRldmljZSBuYW1lIChpZiBpdCBpcyBmb3VuZCkuICBJZiB0aGUgdmFsdWUKK2lzIE5VTEwsIHRoZW4gYXR0cmlidXRlX25hbWUgaXMgcGFyc2VkIGFzIGlmIGl0IHdlcmUKKyI8YXR0cmlidXRlX25hbWU+PTx2YWx1ZT4iOyBpZiBpdCBjYW5ub3QgYmUgc28gcGFyc2VkLCB0aGVuIHRoZQorb3JpZ2luYWwgYXR0cmlidXRlX25hbWUgaXMgcmV0dXJuZWQgaW4gYSBjb3BpZWQgYWxsb2NhdGVkIHN0cmluZy4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSB0byBhbGxvdyB1c2VyIHByb2dyYW1zIHRvIHdhbnQgdG8gdHJhbnNsYXRlIHVzZXIKK2lucHV0LCB3aGV0aGVyIGl0IGlzIG9mIHRoZSBmb3JtOiAiL2Rldi9oZGExIiwgIkxBQkVMPXJvb3QiLAorIlVVSUQ9MDgyRC0yNkUzIiwgYW5kIGdldCBiYWNrIGEgZGV2aWNlIG5hbWUgdGhhdCBpdCBjYW4gdXNlLgorCitBbHRlcm5hdGl2ZWx5LCBvZiBjb3Vyc2UsIHRoZSBwcm9ncmFtbWVyIGNhbiBwYXNzIGFuIGF0dHJpYnV0ZSBuYW1lIG9mCisiTEFCRUwiLCBhbmQgdmFsdWUgb2YgInJvb3QiLCBpZiB0aGF0IGlzIG1vcmUgY29udmVuaWVudC4KKworQW5vdGhlciBjb21tb24gdXNhZ2UgaXMgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgYXR0cmlidXRlCitmb3IgYSBwYXJ0aWN1bGFyIGRldmljZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlc3lzdGVtCit0eXBlLCBvciBsYWJlbCwgb3IgdXVpZCBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZToKKworCWlmICgodmFsdWUgPSBibGtpZF9nZXRfdGFnX3ZhbHVlKGNhY2hlLCBhdHRyaWJ1dGVfbmFtZSwgZGV2bmFtZSkpKSB7CisJCS8qIGRvIHNvbWV0aGluZyB3aXRoIHZhbHVlICovCisJCXN0cmluZ19mcmVlKHZhbHVlKTsKKwl9CisKK0lmIGEgcHJvZ3JhbSBuZWVkcyB0byBjYWxsIG11bHRpcGxlIGJsa2lkIGZ1bmN0aW9ucywgdGhlbiBwYXNzaW5nIGluIGEKK2NhY2hlIHZhbHVlIG9mIE5VTEwgaXMgbm90IHJlY29tbWVuZGVkLCBzaW5jZSB0aGUgL2V0Yy9ibGtpZC50YWIgZmlsZQord2lsbCBiZSByZXBlYXRlZGx5IHBhcnNlZCBvdmVyIGFuZCBvdmVyIGFnYWluLCB3aXRoIG1lbW9yeSBhbGxvY2F0ZWQKK2FuZCBkZWFsbG9jYXRlZC4gIFRvIGluaXRpYWxpemUgdGhlIGJsa2lkIGNhY2hlLCBibGtpZF9nZXRfY2FjaGUoKQorZnVuY3Rpb24gaXMgdXNlZDoKKworCWlmIChibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBOVUxMKSA8IDApCisJCWdvdG8gZXJyb3V0OworCitUaGUgc2Vjb25kIHBhcmFtZXRlciBvZiBibGtpZF9nZXRfY2FjaGUgKGlmIG5vbi16ZXJvKSBpcyB0aGUgYWx0ZXJuYXRlCitmaWxlbmFtZSBvZiB0aGUgYmxraWQgY2FjaGUgZmlsZSAod2hlcmUgdGhlIGRlZmF1bHQgaXMKKy9ldGMvYmxraWQudGFiKS4gIE5vcm1hbGx5LCBwcm9ncmFtcyBzaG91bGQganVzdCBwYXNzIGluIE5VTEwuCisKK0lmIHlvdSBoYXZlIGNhbGxlZCBibGtpZF9nZXRfY2FjaGUoKSwgeW91IHNob3VsZCBjYWxsIGJsa2lkX3B1dF9jYWNoZSgpCit3aGVuIHlvdSBhcmUgZG9uZSB1c2luZyB0aGUgYmxraWQgbGlicmFyeSBmdW5jdGlvbnMuICBUaGlzIHdpbGwgc2F2ZSB0aGUKK2NhY2hlIHRvIHRoZSBibGtpZC50YWIgZmlsZSwgaWYgeW91IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoZSBmaWxlLiAgSXQKK3dpbGwgYWxzbyBmcmVlIGFsbCBhc3NvY2lhdGVkIGRldmljZXMgYW5kIHRhZ3M6CisKKwlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOyAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kb2MvbGliZXh0MmZzLnRleGluZm8gYi9lMmZzcHJvZ3MvZG9jL2xpYmV4dDJmcy50ZXhpbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzY2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZG9jL2xpYmV4dDJmcy50ZXhpbmZvCkBAIC0wLDAgKzEsMTM3NCBAQAorXGlucHV0IHRleGluZm8gICAgQGMgLSotdGV4aW5mby0qLQorQGMgJSoqc3RhcnQgb2YgaGVhZGVyCitAc2V0ZmlsZW5hbWUgbGliZXh0MmZzLmluZm8KK0BzZXR0aXRsZSBUaGUgRVhUMkZTIExpYnJhcnkgKHZlcnNpb24gMS40Mi45KQorQHN5bmluZGV4IHRwIGZuCitAY29tbWVudCAlKiplbmQgb2YgaGVhZGVyCisKK0BpZmluZm8KK0BkaXJjYXRlZ29yeSBEZXZlbG9wbWVudAorQGRpcmVudHJ5CisqIGxpYmV4dDJmczogKGxpYmV4dDJmcykuICAgICAgICAgICAgICAgICAgVGhlIEVYVDJGUyBsaWJyYXJ5LgorQGVuZCBkaXJlbnRyeQorQGVuZCBpZmluZm8KKworQGMgc21hbGxib29rCisKK0BpZnRleAorQGZpbmFsb3V0CitAZW5kIGlmdGV4CisKK0BjIE5vdGU6IHRoZSBlZGl0aW9uIG51bWJlciBpcyBsaXN0ZWQgaW4gKnRocmVlKiBwbGFjZXM7IHBsZWFzZSB1cGRhdGUKK0BjIGFsbCB0aHJlZS4gIEFsc28sIHVwZGF0ZSB0aGUgbW9udGggYW5kIHllYXIgd2hlcmUgYXBwcm9wcmlhdGUuCisKK0BjID09PiBVcGRhdGUgZWRpdGlvbiBudW1iZXIgZm9yIHNldHRpdGxlIGFuZCBzdWJ0aXRsZSwgYW5kIGluIHRoZQorQGMgPT0+IGZvbGxvd2luZyBwYXJhZ3JhcGg7IHVwZGF0ZSBkYXRlLCB0b28uCisKKworQGlmaW5mbworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZXh0MmZzIGxpYnJhcnksIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIHRoZQorZXh0MiBmaWxlc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIGJ5IFRoZW9kb3JlIFRzJ28KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mCit0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorYXJlIHByZXNlcnZlZCBvbiBhbGwgY29waWVzLgorCitAaWdub3JlCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUgdGhyb3VnaCBUZVggYW5kIHByaW50IHRoZQorcmVzdWx0cywgcHJvdmlkZWQgdGhlIHByaW50ZWQgZG9jdW1lbnQgY2FycmllcyBjb3B5aW5nIHBlcm1pc3Npb24KK25vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUgZXhjZXB0IGZvciB0aGUgcmVtb3ZhbCBvZiB0aGlzIHBhcmFncmFwaAorKHRoaXMgcGFyYWdyYXBoIG5vdCBiZWluZyByZWxldmFudCB0byB0aGUgcHJpbnRlZCBtYW51YWwpLgorCitAZW5kIGlnbm9yZQorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUKK3Jlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbgorbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMgbWFudWFsCitpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZCB2ZXJzaW9ucywKK2V4Y2VwdCB0aGF0IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgbWF5IGJlIHN0YXRlZCBpbiBhIHRyYW5zbGF0aW9uIGFwcHJvdmVkCitieSB0aGUgYXV0aG9yLgorQGVuZCBpZmluZm8KKworQHNldGNoYXB0ZXJuZXdwYWdlIG9uCitAdGl0bGVwYWdlCitAYyAgdXNlIHRoZSBuZXcgZm9ybWF0IGZvciB0aXRsZXMKKworQHRpdGxlIFRoZSBFWFQyRlMgTGlicmFyeQorQHN1YnRpdGxlIFRoZSBFWFQyRlMgTGlicmFyeQorQHN1YnRpdGxlIFZlcnNpb24gMS40Mi45CitAc3VidGl0bGUgRGVjZW1iZXIgMjAxMworCitAYXV0aG9yIGJ5IFRoZW9kb3JlIFRzJ28KKworQGMgSW5jbHVkZSB0aGUgRGlzdHJpYnV0aW9uIGluc2lkZSB0aGUgdGl0bGVwYWdlIHNvCitAYyB0aGF0IGhlYWRpbmdzIGFyZSB0dXJuZWQgb2ZmLgorCitAdGV4CitcZ2xvYmFsXHBhcmluZGVudD0wcHQKK1xnbG9iYWxccGFyc2tpcD04cHQKK1xnbG9iYWxcYmFzZWxpbmVza2lwPTEzcHQKK0BlbmQgdGV4CisKK0BwYWdlCitAdnNraXAgMHB0IHBsdXMgMWZpbGxsCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIFRoZW9kb3JlIFRzJ28KKworQHNwIDIKKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mCit0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorYXJlIHByZXNlcnZlZCBvbiBhbGwgY29waWVzLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCittYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIHZlcmJhdGltIGNvcHlpbmcsIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZQorcmVzdWx0aW5nIGRlcml2ZWQgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBwZXJtaXNzaW9uCitub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgb25lLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhpcyBtYW51YWwKK2ludG8gYW5vdGhlciBsYW5ndWFnZSwgdW5kZXIgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yIG1vZGlmaWVkIHZlcnNpb25zLAorZXhjZXB0IHRoYXQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBtYXkgYmUgc3RhdGVkIGluIGEgdHJhbnNsYXRpb24gYXBwcm92ZWQKK2J5IHRoZSBGb3VuZGF0aW9uLgorQGVuZCB0aXRsZXBhZ2UKK0BoZWFkaW5ncyBkb3VibGUKKworQG5vZGUgVG9wLCBJbnRyb2R1Y3Rpb24gdG8gdGhlIEVYVDJGUyBMaWJyYXJ5LCAoZGlyKSwgKGRpcikKKworQHRvcCBUaGUgRVhUMkZTIExpYnJhcnkKKworVGhpcyBtYW51YWwgZG9jdW1lbnRzIHRoZSBFWFQyRlMgTGlicmFyeSwgdmVyc2lvbiAxLjQyLjkuCisKK0BtZW51CisqIEludHJvZHVjdGlvbiB0byB0aGUgRVhUMkZTIExpYnJhcnk6OiAgCisqIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9uczo6ICAgIAorKiBDb25jZXB0IEluZGV4OjogICAgICAgICAgICAgICAKKyogRnVuY3Rpb24gSW5kZXg6OiAgICAgICAgICAgICAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBJbnRyb2R1Y3Rpb24gdG8gdGhlIEVYVDJGUyBMaWJyYXJ5LCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMsIFRvcCwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BjaGFwdGVyIEludHJvZHVjdGlvbiB0byB0aGUgRVhUMkZTIExpYnJhcnkKKworVGhlIEVYVDJGUyBsaWJyYXJ5IGlzIGRlc2lnbmVkIHRvIGFsbG93IHVzZXItbGV2ZWwgcHJvZ3JhbXMgdG8KK21hbmlwdWxhdGUgYW4gZXh0MiBmaWxlc3lzdGVtLgorCitAbm9kZSBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMsIENvbmNlcHQgSW5kZXgsIEludHJvZHVjdGlvbiB0byB0aGUgRVhUMkZTIExpYnJhcnksIFRvcAorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAY2hhcHRlciBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKKworQG1lbnUKKyogRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnM6OiAgCisqIEZpbGUgSS9PIEZ1bmN0aW9uczo6ICAgICAgICAgIAorKiBJbm9kZSBGdW5jdGlvbnM6OiAgICAgICAgICAgICAKKyogRGlyZWN0b3J5IGZ1bmN0aW9uczo6ICAgICAgICAgCisqIEJpdG1hcCBGdW5jdGlvbnM6OiAgICAgICAgICAgIAorKiBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zOjogICAgICAKKyogQnl0ZS1zd2FwcGluZyBmdW5jdGlvbnM6OiAgICAgCisqIE90aGVyIGZ1bmN0aW9uczo6ICAgICAgICAgICAgIAorQGVuZCBtZW51CisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnMsIEZpbGUgSS9PIEZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zLCBFWFQyRlMgTGlicmFyeSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHNlY3Rpb24gRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnMKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIGZpbGVzeXN0ZW0gaGFuZGxlLiAgTW9zdCBFWFQyRlMKK0xpYnJhcnkgZnVuY3Rpb25zIHJlcXVpcmUgYSBmaWxlc3lzdGVtIGhhbmRsZSBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4KK1RoZXJlIGFyZSB0d28gZnVuY3Rpb25zIHdoaWNoIGNyZWF0ZSBhIGZpbGVzeXN0ZW0gaGFuZGxlLAorQGNvZGV7ZXh0MmZzX29wZW59IGFuZCBAY29kZXtleHQyZnNfaW5pdGlhbGl6ZX0uICAKKworVGhlIGZpbGVzeXN0ZW0gY2FuIGFsc28gYmUgY2xvc2VkIHVzaW5nIEBjb2Rle2V4dDJmc19jbG9zZX0sIGFuZCBhbnkKK2NoYW5nZXMgdG8gdGhlIHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0cyBjYW4gYmUgd3JpdHRlbiBvdXQgdG8gZGlzawordXNpbmcgQGNvZGV7ZXh0MmZzX2ZsdXNofS4KKworQG1lbnUKKyogT3BlbmluZyBhbiBleHQyIGZpbGVzeXN0ZW06OiAgCisqIENsb3NpbmcgYW5kIGZsdXNoaW5nIG91dCBjaGFuZ2VzOjogIAorKiBJbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtOjogICAKKyogRmlsZXN5c3RlbSBmbGFnIGZ1bmN0aW9uczo6ICAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBPcGVuaW5nIGFuIGV4dDIgZmlsZXN5c3RlbSwgQ2xvc2luZyBhbmQgZmx1c2hpbmcgb3V0IGNoYW5nZXMsIEZpbGVzeXN0ZW0tbGV2ZWwgZnVuY3Rpb25zLCBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBPcGVuaW5nIGFuIGV4dDIgZmlsZXN5c3RlbQorCitNb3N0IGxpYmV4dDJmcyBmdW5jdGlvbnMgdGFrZSBhIGZpbGVzeXN0ZW0gaGFuZGxlIG9mIHR5cGUKK0Bjb2Rle2V4dDJfZmlsc3lzfS4gIEEgZmlsZXN5c3RlbSBoYW5kbGUgaXMgY3JlYXRlZCBlaXRoZXIgYnkgb3BlbmluZworYW4gZXhpc3RpbmcgZnVuY3Rpb24gdXNpbmcgQGNvZGV7ZXh0MmZzX29wZW59LCBvciBieSBpbml0aWFsaXppbmcgYSBuZXcKK2ZpbGVzeXN0ZW0gdXNpbmcgQGNvZGV7ZXh0MmZzX2luaXRpYWxpemV9LgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX29wZW4gKGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0sIGludCBAdmFye2ZsYWdzfSwgaW50IEB2YXJ7c3VwZXJibG9ja30sIGludCBAdmFye2Jsb2NrX3NpemV9LCBpb19tYW5hZ2VyIEB2YXJ7bWFuYWdlcn0sIGV4dDJfZmlsc3lzICpAdmFye3JldF9mc30pCisKK09wZW5zIGEgZmlsZXN5c3RlbSBuYW1lZCBAdmFye25hbWV9LCB1c2luZyB0aGUgdGhlIGlvX21hbmFnZXIKK0B2YXJ7bWFuYWdlcn0gdG8gZGVmaW5lIHRoZSBpbnB1dC9vdXRwdXQgcm91dGluZXMgbmVlZGVkIHRvIHJlYWQgYW5kCit3cml0ZSB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIHRoZSBAY29kZXt1bml4X2lvfSBpb19tYW5hZ2VyLAorQHZhcntuYW1lfSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgVW5peCBmaWxlbmFtZSBvZiB0aGUgZmlsZXN5c3RlbSBpbWFnZS4KK1RoaXMgaXMgb2Z0ZW4gYSBkZXZpY2UgZmlsZSwgc3VjaCBhcyBAZmlsZXsvZGV2L2hkYTF9LgorCitUaGUgQHZhcntzdXBlcmJsb2NrfSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBibG9jayBudW1iZXIgb2YgdGhlCitzdXBlcmJsb2NrIHdoaWNoIHNob3VsZCBiZSB1c2VkIHdoZW4gb3BlbmluZyB0aGUgZmlsZXN5c3RlbS4KK0lmIEB2YXJ7c3VwZXJibG9ja30gaXMgemVybywgQGNvZGV7ZXh0MmZzX29wZW59IHdpbGwgdXNlIHRoZSBwcmltYXJ5CitzdXBlcmJsb2NrIGxvY2F0ZWQgYXQgb2Zmc2V0IDEwMjQgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGVzeXN0ZW0KK2ltYWdlLgorCitUaGUgQHZhcntibG9ja19zaXplfSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBibG9jayBzaXplIHVzZWQgYnkgdGhlCitmaWxlc3lzdGVtLiAgTm9ybWFsbHkgdGhpcyBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUKK2ZpbGVzeXN0ZW0gdXBlcmJsb2NrLiAgSWYgQHZhcntibG9ja19zaXplfSBpcyBub24temVybywgaXQgbXVzdCBtYXRjaAordGhlIGJsb2NrIHNpemUgZm91bmQgaW4gdGhlIHN1cGVyYmxvY2ssIG9yIHRoZSBlcnJvcgorQGNvZGV7RVhUMl9FVF9VTkVYUEVDVEVEX0JMT0NLX1NJWkV9IHdpbGwgYmUgcmV0dXJuZWQuICBUaGUKK0B2YXJ7YmxvY2tfc2l6ZX0gcGFyYW1ldGVyIGlzIGFsc28gdXNlZCB0byBoZWxwIGZ1bmQgdGhlIHN1cGVyYmxvY2sgd2hlbgorQHZhcntzdXBlcmJsb2NrfSBpcyBub24temVyby4KKworVGhlIEB2YXJ7ZmxhZ3N9IGFyZ3VtZW50IGNvbnRhaW5zIGEgYml0bWFzayBvZiBmbGFncyB3aGljaCBjb250cm9sIGhvdwordGhlIGZpbGVzeXN0ZW0gb3BlbiBzaG91bGQgYmUgaGFuZGxlZC4KKworQHRhYmxlIEBjb2RlCitAaXRlbSBFWFQyX0ZMQUdfUlcKK09wZW4gdGhlIGZpbGVzeXN0ZW0gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuICBXaXRob3V0IHRoaXMgZmxhZywgdGhlCitmaWxlc3lzdGVtIGlzIG9wZW5lZCBmb3IgcmVhZGluZyBvbmx5LgorCitAaXRlbSBFWFQyX0ZMQUdfRk9SQ0UKK09wZW4gdGhlIGZpbGVzeXN0ZW0gcmVnYXJkbGVzcyBvZiB0aGUgZmVhdHVyZSBzZXRzIGxpc3RlZCBpbiB0aGUKK3N1cGVyYmxvY2suCisKK0BlbmQgdGFibGUKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIENsb3NpbmcgYW5kIGZsdXNoaW5nIG91dCBjaGFuZ2VzLCBJbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtLCBPcGVuaW5nIGFuIGV4dDIgZmlsZXN5c3RlbSwgRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ2xvc2luZyBhbmQgZmx1c2hpbmcgb3V0IGNoYW5nZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19mbHVzaCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCisKK1dyaXRlIGFueSBjaGFuZ2VzIHRvIHRoZSBoaWdoLWxldmVsIGZpbGVzeXN0ZW0gZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZQorQHZhcntmc30gZmlsZXN5c3RlbS4gIFRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgYmUgd3JpdHRlbiBvdXQ6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIFRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sKK0BpdGVtIFRoZSBmaWxlc3lzdGVtIGdyb3VwIGRlc2NyaXB0b3JzCitAaXRlbSBUaGUgZmlsZXN5c3RlbSBiaXRtYXBzLCBpZiByZWFkIGluIHZpYSBAY29kZXtleHQyZnNfcmVhZF9iaXRtYXBzfS4KK0BlbmQgaXRlbWl6ZQorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfZnJlZSAoZXh0Ml9maWxzeXMgQHZhcntmc30pCisKK0Nsb3NlIHRoZSBpb19tYW5hZ2VyIGFic3RyYWN0aW9uIGZvciBAdmFye2ZzfSBhbmQgcmVsZWFzZSBhbGwgbWVtb3J5Cithc3NvY2lhdGVkIHdpdGggdGhlIGZpbGVzeXN0ZW0gaGFuZGxlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfY2xvc2UgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorCitGbHVzaCBvdXQgYW55IGNoYW5nZXMgdG8gdGhlIGhpZ2gtbGV2ZWwgZmlsZXN5c3RlbSBkYXRhIHN0cnVjdHVyZXMgdXNpbmcKK0Bjb2Rle2V4dDJmc19mbHVzaH0gaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGRpcnR5OyB0aGVuIGNsb3NlIGFuZAorZnJlZSB0aGUgZmlsZXN5c3RlbSB1c2luZyBAY29kZXtleHQyZnNfZnJlZX0uCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW0sIEZpbGVzeXN0ZW0gZmxhZyBmdW5jdGlvbnMsIENsb3NpbmcgYW5kIGZsdXNoaW5nIG91dCBjaGFuZ2VzLCBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBJbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtCisKK0FuIGV4dDIgZmlsZXN5c3RlbSBpcyBpbml0aWFsaXppbmcgYnkgdGhlIEBjb2Rle21rZTJmc30gcHJvZ3JhbS4gIFRoZQordHdvIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSwgQGNvZGV7ZXh0MmZzX2luaXRpYWxpemV9IGFuZAorQGNvZGV7ZXh0MmZzX2FsbG9jYXRlX3RhYmxlc30gZG8gbXVjaCBvZiB0aGUgaW5pdGlhbCB3b3JrIGZvciBzZXR0aW5nIHVwCithIGZpbGVzeXN0ZW0uICBIb3dldmVyLCB0aGV5IGRvbid0IGRvIHRoZSB3aG9sZSBqb2IuICBAY29kZXtta2UyZnN9CitjYWxscyBAY29kZXtleHQyZnNfaW5pdGlhbGl6ZX0gdG8gc2V0IHVwIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2ssIGFuZAorY2FsbHMgQGNvZGV7ZXh0MmZzX2FsbG9jYXRlX3RhYmxlc30gdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBpbm9kZQordGFibGUsIGFuZCB0aGUgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMuICBJbiBhZGRpdGlvbiwgQGNvZGV7bWtlMmZzfSBtdXN0CithbHNvIGluaXRpYWxpemUgdGhlIGlub2RlIHRhYmxlcyBieSBjbGVhcmluZyB0aGVtIHdpdGggemVyb3MsIGNyZWF0ZSB0aGUKK3Jvb3QgYW5kIGxvc3QrZm91bmQgZGlyZWN0b3JpZXMsIGFuZCByZXNlcnZlIHRoZSByZXNlcnZlZCBpbm9kZXMuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfaW5pdGlhbGl6ZSAoY29uc3QgY2hhciAqQHZhcntuYW1lfSwgaW50IEB2YXJ7ZmxhZ3N9LCBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqQHZhcntwYXJhbX0sIGlvX21hbmFnZXIgQHZhcnttYW5hZ2VyfSwgZXh0Ml9maWxzeXMgKkB2YXJ7cmV0X2ZzfSkKKworVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBAY29kZXtta2UyZnN9IHByb2dyYW0gdG8gaW5pdGlhbGl6ZSBhCitmaWxlc3lzdGVtLiAgVGhlIEBjb2Rle2V4dDJmc19pbml0aWFsaXplfSBmdW5jdGlvbiBjcmVhdGVzIGEgZmlsZXN5c3RlbQoraGFuZGxlIHdoaWNoIGlzIHJldHVybmVkIGluIEB2YXJ7cmV0X2ZzfSB0aGF0IGhhcyBiZWVuIHByb3Blcmx5IHNldHVwCitmb3IgYSBmaWxlc3lzdGVtIHRvIGJlIGxvY2F0ZWQgaW4gQHZhcntuYW1lfSwgdXNpbmcgdGhlIGlvX21hbmFnZXIKK0B2YXJ7bWFuYWdlcn0uICBUaGUgcHJvdG90eXBlIHN1cGVyYmxvY2sgaW4gQHZhcntwYXJhbX0gaXMgdXNlZCB0bworc3VwcGx5IHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgZmlsZXN5c3RlbSwgdGhlCitibG9jayBzaXplLCBldGMuICAKKworVGhlIEBjb2Rle2V4dDJmc19pbml0aWFsaXplfSBmdW5jdGlvbiBkb2VzIG5vdCBhY3R1YWxseSBkbyBhbnkgSS9POyB0aGF0Cit3aWxsIGJlIGRvbmUgd2hlbiB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbSBjYWxscyBAY29kZXtleHQyZnNfY2xvc2V9IG9yCitAY29kZXtleHQyZnNfZmx1c2h9LiAgQWxzbywgdGhpcyBmdW5jdGlvbiBvbmx5IGluaXRpYWxpemVzIHRoZQorc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRvciBzdHJ1Y3R1cmVzLiAgSXQgZG9lcyBub3QgY3JlYXRlIHRoZQoraW5vZGUgdGFibGUgb3IgdGhlIHJvb3QgZGlyZWN0b3J5LiAgVGhpcyBtdXN0IGJlIGRvbmUgYnkgdGhlIGNhbGxpbmcKK2FwcGxpY2F0aW9uLCBzdWNoIGFzIEBjb2Rle21rZTJmc30uCisKK1RoZSBmb2xsb3dpbmcgdmFsdWVzIG1heSBiZSBzZXQgaW4gdGhlIEB2YXJ7cGFyYW19IHByb3RvdHlwZSBzdXBlcmJsb2NrOworaWYgYSB2YWx1ZSBvZiAwIGlzIGZvdW5kIGluIGEgZmllbGQsIEBjb2Rle2V4dDJmc19pbml0aWFsaXplfSB3aWxsIHVzZSBhCitkZWZhdWx0IHZhbHVlLiAgVGhlIGNhbGxpbmcgYXBwbGljYXRpb24gc2hvdWxkIHplcm8gb3V0IHRoZSBwcm90b3R5cGUKK2VudGlyZSBzdXBlcmJsb2NrLCBhbmQgdGhlbiBmaWxsIGluIGFueSBhcHByb3ByaWF0ZSB2YWx1ZXMuCisKK0B0YWJsZSBAY29kZQorCitAaXRlbSBzX2Jsb2Nrc19jb3VudAorVGhlIG51bWJlciBvZiBibG9ja3MgaW4gdGhlIGZpbGVzeXN0ZW0uICBUaGlzIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgYW5kCittdXN0IGJlIHNldCBieSB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4KKworQGl0ZW0gc19pbm9kZXNfY291bnQKK1RoZSBudW1iZXIgb2YgaW5vZGVzIGluIHRoZSBmaWxlc3lzdGVtLiAgVGhlCitkZWZhdWx0IHZhbHVlIGlzIGRldGVybWluZWQgYnkgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0sCithbmQgY3JlYXRpbmcgb25lIGlub2RlIGZvciBldmVyeSA0MDk2IGJ5dGVzLgorCitAaXRlbSBzX3JfYmxvY2tzX2NvdW50CitUaGUgbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlcnVzZXIuICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgemVybyBibG9ja3MuCisKK0BpdGVtIHNfbG9nX2Jsb2NrX3NpemUKK1RoZSBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0uICBWYWxpZCB2YWx1ZXMgYXJlIDAgKDEwMjQgYnl0ZXMpLCAxCisoMjA0OCBieXRlcyksIG9yIDIgKDQwOTYgYnl0ZXMpLiAgVGhlIGRlZmF1bHQgYmxvY2tzaXplIGlzIDEwMjQgYnl0ZXMuCisKK0BpdGVtIHNfbG9nX2ZyYWdfc2l6ZQorVGhlIHNpemUgb2YgZnJhZ21lbnRzLiAgVGhlIGV4dDIgZmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50cworKGFuZCBtYXkgbmV2ZXIgc3VwcG9ydCBmcmFnbWVudHMpLiAgQ3VycmVudGx5IHRoaXMgZmllbGQgbXVzdCBiZSB0aGUKK3NhbWUgYXMgQGNvZGV7c19sb2dfYmxvY2tfc2l6ZX0uCisKK0BpdGVtIHNfZmlyc3RfZGF0YV9ibG9jaworVGhlIGZpcnN0IGRhdGEgYmxvY2sgZm9yIHRoZSBmaWxlc3lzdGVtLiAgRm9yIGZpbGVzeXN0ZW0gd2l0aCBhCitibG9ja3NpemUgb2YgMTAyNCBieXRlcywgdGhpcyB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IDEsIHNpbmNlIHRoZQorc3VwZXJibG9jayBpcyBsb2NhdGVkIGluIGJsb2NrIG51bWJlciAxLiAgRm9yIGZpbGVzeXN0ZW1zIHdpdGggbGFyZ2VyCitibG9ja3NpemVzLCB0aGUgc3VwZXJibG9jayBpcyBzdGlsbCBsb2NhdGVkIGF0IGFuIG9mZnNldCBvZiAxMDI0IGJ5dGVzLAorc28gdGhlIHN1cGVyYmxvY2sgaXMgbG9jYXRlZCBpbiBibG9jayBudW1iZXIgMC4gIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUKK2lzIHNldCB0byAxIGZvciBmaWxlc3lzdGVtcyB3aXRoIGEgYmxvY2sgc2l6ZSBvZiAxMDI0IGJ5dGVzLCBvciAwIGZvcgorZmlsZXN5c3RlbXMgd2l0aCBsYXJnZXIgYmxvY2tzaXplcy4KKworQGl0ZW0gc19tYXhfbW50X2NvdW50CitUaGlzIGZpZWxkIGRlZmluZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBmaWxlc3lzdGVtIGNhbiBiZQorbW91bnRlZCBiZWZvcmUgaXQgc2hvdWxkIGJlIGNoZWNrZWQgdXNpbmcgQGNvZGV7ZTJmc2NrfS4gIFdoZW4KK0Bjb2Rle2UyZnNja30gaXMgcnVuIHdpdGhvdXQgdGhlIEBzYW1wey1mfSBvcHRpb24sIEBjb2Rle2UyZnNja30gd2lsbAorc2tpcCB0aGUgZmlsZXN5c3RlbSBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaGFzCitiZWVuIG1vdW50ZWQgaXMgbGVzcyB0aGFuIEBjb2Rle3NfbWF4X21udF9jb3VudH0gYW5kIGlmIHRoZSBpbnRlcnZhbAorYmV0d2VlbiB0aGUgbGFzdCB0aW1lIGEgZmlsZXN5c3RlbSBjaGVjayB3YXMgcGVyZm9ybWVkIGFuZCB0aGUgY3VycmVudAordGltZSBpcyBsZXNzIHRoYW4gQGNvZGV7c19jaGVja2ludGVydmFsfSAoc2VlIGJlbG93KS4gIFRoZSBkZWZhdWx0IHZhbHVlCitvZiBAY29kZXtzX21heF9tbnRfY291bnR9IGlzIDIwLgorCitAaXRlbSBzX2NoZWNraW50ZXJ2YWwKK1RoaXMgZmllbGQgZGVmaW5lcyB0aGUgbWluaW1hbCBpbnRlcnZhbCBiZXR3ZWVuIGZpbGVzeXN0ZW0gY2hlY2tzLiAgU2VlCit0aGUgcHJldmlvdXMgZW50cnkgZm9yIGEgZGlzY3Vzc2lvbiBvZiBob3cgdGhpcyBmaWVsZCBpcyB1c2VkIGJ5CitAY29kZXtlMmZzY2t9LiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyAxODAgZGF5cyAoc2l4Cittb250aHMpLgorCitAaXRlbSBzX2Vycm9ycworVGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBiZWhhdmlvciB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB0aGUga2VybmVsIG9mCitlcnJvcnMgYXJlIGRldGVjdGVkIGluIHRoZSBmaWxlc3lzdGVtLiAgUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gRVhUMl9FUlJPUlNfQ09OVElOVUUKK0NvbnRpbnVlIGV4ZWN1dGlvbiB3aGVuIGVycm9ycyBhcmUgZGV0ZWN0ZWQuCisKK0BpdGVtIEVYVDJfRVJST1JTX1JPCitSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seS4KKworQGl0ZW0gRVhUMl9FUlJPUlNfUEFOSUMKK1BhbmljLgorCitAZW5kIHRhYmxlCisKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIEBzYW1we0VYVDJfRVJST1JTX0NPTlRJTlVFfS4KKworQGVuZCB0YWJsZQorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV90YWJsZXMgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBpbm9kZSB0YWJsZSBhbmQgdGhlIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzLiAgVGhlCitpbm9kZSB0YWJsZXMgYW5kIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGFyZW4ndCBhY3R1YWxseSBpbml0aWFsaXplZDsKK3RoaXMgZnVuY3Rpb24ganVzdCBhbGxvY2F0ZXMgdGhlIHNwYWNlIGZvciB0aGVtLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRmlsZXN5c3RlbSBmbGFnIGZ1bmN0aW9ucywgICwgSW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbSwgRmlsZXN5c3RlbS1sZXZlbCBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gRmlsZXN5c3RlbSBmbGFnIGZ1bmN0aW9ucworCitUaGUgZmlsZXN5c3RlbSBoYW5kbGUgaGFzIGEgbnVtYmVyIG9mIGZsYWdzIHdoaWNoIGNhbiBiZSBtYW5pcHVsYXRlZAordXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4gIFNvbWUgb2YgdGhlc2UgZmxhZ3MgYWZmZWN0IGhvdyB0aGUKK2xpYmV4dDJmcyBmaWxlc3lzdGVtIGJlaGF2ZXM7IG90aGVycyBhcmUgcHJvdmlkZWQgc29sZWx5IGZvciB0aGUKK2FwcGxpY2F0aW9uJ3MgY29udmVuaWVuY2UuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX21hcmtfY2hhbmdlZCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc190ZXN0X2NoYW5nZWQgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorVGhpcyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBjaGFuZ2VkLiAKK0l0IGlzIG5vdCB1c2VkIGJ5IHRoZSBleHQyZnMgbGlicmFyeS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19tYXJrX3N1cGVyX2RpcnR5IChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK01hcmsgdGhlIGZpbGVzeXN0ZW0gQHZhcntmc30gYXMgYmVpbmcgZGlydHk7IHRoaXMgd2lsbCBjYXVzZQordGhlIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24gdG8gYmUgZmx1c2hlZCBvdXQgd2hlbiBAY29kZXtleHQyZnNfY2xvc2V9IGlzCitjYWxsZWQuICBAY29kZXtleHQyZnNfbWFya19zdXBlcl9kaXJ0eX0gd2lsbCBhbHNvIHNldCB0aGUgZmlsZXN5c3RlbSAKK2NoYW5nZWQgZmxhZy4gIFRoZSBkaXJ0eSBmbGFnIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCBieQorQGNvZGV7ZXh0MmZzX2ZsdXNofSB3aGVuIHRoZSBzdXBlcmJsb2NrIGlzIHdyaXR0ZW4gdG8gZGlzay4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19tYXJrX3ZhbGlkIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK0BkZWZ0eXBlZnVueCB2b2lkIGV4dDJmc191bm1hcmtfdmFsaWQgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGRlZnR5cGVmdW54IGludCBleHQyZnNfdGVzdF92YWxpZCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmaWxlc3lzdGVtIGlzIGZyZWUgb2YgZXJyb3JzLgorSXQgaXMgbm90IHVzZWQgYnkgbGliZXh0MmZzLCBhbmQgaXMgc29sZWx5IGZvciB0aGUgYXBwbGljYXRpb24ncyAKK2NvbnZlbmllbmNlLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX21hcmtfaWJfZGlydHkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGRlZnR5cGVmdW54IHZvaWQgZXh0MmZzX21hcmtfYmJfZGlydHkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGRlZnR5cGVmdW54IGludCBleHQyZnNfdGVzdF9pYl9kaXJ0eSAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc190ZXN0X2JiX2RpcnR5IChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK1RoZXNlIGZsYWdzIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBpbm9kZSBvciBibG9jayBiaXRtYXBzIGhhdmUgYmVlbgorbW9kaWZpZWQuICAgSWYgdGhlIGZsYWcgaXMgc2V0LCBpdCB3aWxsIGNhdXNlIHRoZSBhcHByb3ByaWF0ZSBiaXRtYXAKK3RvIGJlIHdyaXR0ZW4gd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBjbG9zZWQgb3IgZmx1c2hlZC4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEZpbGUgSS9PIEZ1bmN0aW9ucywgSW5vZGUgRnVuY3Rpb25zLCBGaWxlc3lzdGVtLWxldmVsIGZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIEZpbGUgSS9PIEZ1bmN0aW9ucworCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIGEgY29udmVuaWVudCBhYnN0cmFjdGlvbiB0byByZWFkIG9yCit3cml0ZSBhIGZpbGUgaW4gYW4gZmlsZXN5c3RlbS4gIFRoZSBpbnRlcmZhY2UgaXMgc2ltaWxhciBpbiBzcGlyaXQgdG8KK3RoZSBMaW51eC9QT1NJWCBmaWxlIEkvTyBzeXN0ZW0gY2FsbHMuCisKK0BtZW51CisqIEZpbGUgaGFuZGxlIG1hbmlwdWxhdGlvbjo6ICAgIAorKiBSZWFkaW5nIGFuZCB3cml0aW5nIGRhdGE6OiAgICAKKyogQ2hhbmdpbmcgdGhlIGZpbGUgb2Zmc2V0IDo6ICAgCisqIEdldHRpbmcgdGhlIGZpbGUgc2l6ZTo6ICAgICAgIAorQGVuZCBtZW51CisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRmlsZSBoYW5kbGUgbWFuaXB1bGF0aW9uLCBSZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEsIEZpbGUgSS9PIEZ1bmN0aW9ucywgRmlsZSBJL08gRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEZpbGUgaGFuZGxlIG1hbmlwdWxhdGlvbgorCitUaGUgZmlsZSBoYW5kbGUgZnVuY3Rpb25zIG11Y2ggbGlrZSBhIGZpbGUgZGVzY3JpcHRvciBpbiB0aGUgTGludXgvUE9TSVgKK2ZpbGUgSS9PIHN5c3RlbSBjYWxscy4gIFVubGlrZSB0aGUgTGludXgvUE9TSVggc3lzdGVtIGNhbGxzLCBmaWxlcyBhcmUKK29wZW5lZCB2aWEgaW5vZGUgbnVtYmVycyBpbnN0ZWFkIG9mIHZpYSBwYXRobmFtZXMuICBUbyByZXNvbHZlIGEKK3BhdGhuYW1lIHRvIGFuIGlub2RlIG51bWJlciwgdXNlIHRoZSBmdW5jdGlvbiBAY29kZXtleHQyZnNfbmFtZWl9IG9yIHRvCitjcmVhdGUgYSBuZXcgZmlsZSwgdXNlIEBjb2Rle2V4dDJmc19uZXdfaW5vZGV9IGFuZCBAY29kZXtleHQyZnNfbGlua30uCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9vcGVuMiAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntpbm9kZX0sIGludCBAdmFye2ZsYWdzfSwgZXh0Ml9maWxlX3QgKkB2YXJ7cmV0fSkKK0BkZWZ0eXBlZnVueCBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfb3BlbiAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBpbnQgQHZhcntmbGFnc30sIGV4dDJfZmlsZV90ICpAdmFye3JldH0pCisKK09wZW5zIGEgZmlsZSBpZGVudGlmaWVkIGJ5IGlub2RlIG51bWJlciBAdmFye2lub30gaW4gZmlsZXN5c3RlbSBAdmFye2ZzfQorYW5kIHJldHVybnMgYSBmaWxlIGhhbmRsZSBpbiBAdmFye3JldH0uICBJZiBhbiBpbm9kZSBzdHJ1Y3R1cmUgaXMKK3Byb3ZpZGVkIGluIEB2YXJ7aW5vZGV9LCB0aGVuIGl0IGlzIHVzZWQgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSBpbm9kZQorZnJvbSB0aGUgZmlsZXN5c3RlbS4KKworVGhlIEB2YXJ7ZmxhZ3N9IGFyZ3VtZW50IGNvbnRhaW5zIGEgYml0bWFzayBvZiBmbGFncyB3aGljaCBjb250cm9sIGhvdwordGhlIGZpbGUgc2hvdWxkIGJlIG9wZW5lZC4KKworQHRhYmxlIEBjb2RlCitAaXRlbSBFWFQyX0ZJTEVfV1JJVEUKK09wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuICBXaXRob3V0IHRoaXMgZmxhZywgdGhlIGZpbGUgaXMKK29wZW5lZCBmb3Igd3JpdGluZyBvbmx5LgorCitAaXRlbSBFWFQyX0ZJTEVfQ1JFQVRFCitDcmVhdGUgdGhlIGZpbGUgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4KKworQGVuZCB0YWJsZQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGV4dDJfZmlsc3lzIGV4dDJmc19maWxlX2dldF9mcyAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSkKK1JldHVybiB0aGUgZmlsZXN5c3RlbSBoYW5kbGUgd2hlcmUgdGhlIG9wZW4gZmlsZSBAdmFye2ZpbGV9IHdhcyBvcGVuZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19maWxlX2Nsb3NlIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9KQorQ2xvc2UgdGhlIGZpbGUgaGFuZGxlIEB2YXJ7ZmlsZX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19maWxlX2ZsdXNoIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9KQorRm9yY2UgYW55IGRhdGEgd3JpdHRlbiB2aWEgQGNvZGV7ZXh0MmZzX2ZpbGVfd3JpdGV9IHRvIGRpc2suCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBSZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEsIENoYW5naW5nIHRoZSBmaWxlIG9mZnNldCAsIEZpbGUgaGFuZGxlIG1hbmlwdWxhdGlvbiwgRmlsZSBJL08gRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YQorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfcmVhZCAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSwgdm9pZCAqQHZhcntidWZ9LCB1bnNpZ25lZCBpbnQgQHZhcnt3YW50ZWR9LCB1bnNpZ25lZCBpbnQgKkB2YXJ7Z290fSkKK1JlYWQgQHZhcnt3YW50ZWR9IGJ5dGVzIG9mIGRhdGEgZnJvbSBAdmFye2ZpbGV9IHN0b3JlIGl0IGluIHRoZSBidWZmZXIKK0B2YXJ7YnVmfS4gIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXMgYWN0dWFsbHkgcmVhZCBpcyByZXR1cm5lZAordmlhIEB2YXJ7Z290fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfd3JpdGUgKGV4dDJfZmlsZV90IEB2YXJ7ZmlsZX0sIGNvbnN0IHZvaWQgKkB2YXJ7YnVmfSwgdW5zaWduZWQgaW50IEB2YXJ7bmJ5dGVzfSwgdW5zaWduZWQgaW50ICpAdmFye3dyaXR0ZW59KQorV3JpdGUgQHZhcnt3YW50ZWR9IGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgYnVmZmVyIEB2YXJ7YnVmfSB0byB0aGUKK2N1cnJlbnQgZmlsZSBwb3NpdGlvbiBvZiBAdmFye2ZpbGV9LiAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyAKK2FjdHVhbGx5IHdyaXR0ZW4gaXMgcmV0dXJuZWQgdmlhIEB2YXJ7Z290fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIENoYW5naW5nIHRoZSBmaWxlIG9mZnNldCAsIEdldHRpbmcgdGhlIGZpbGUgc2l6ZSwgUmVhZGluZyBhbmQgd3JpdGluZyBkYXRhLCBGaWxlIEkvTyBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ2hhbmdpbmcgdGhlIGZpbGUgb2Zmc2V0CisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9sbHNlZWsgKGV4dDJfZmlsZV90IEB2YXJ7ZmlsZX0sIF9fdTY0IEB2YXJ7b2Zmc2V0fSwgaW50IEB2YXJ7d2hlbmNlfSwgX191NjQgKkB2YXJ7cmV0X3Bvc30pCitAZGVmdHlwZWZ1bnggZXJyY29kZV90IGV4dDJmc19maWxlX2xzZWVrIChleHQyX2ZpbGVfdCBAdmFye2ZpbGV9LCBleHQyX29mZl90IEB2YXJ7b2Zmc2V0fSwgaW50IEB2YXJ7d2hlbmNlfSwgZXh0Ml9vZmZfdCAqQHZhcntyZXRfcG9zfSkKK0NoYW5nZSB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIG9mIEB2YXJ7ZmlsZX0gYWNjb3JkaW5nIHRvIHRoZQorZGlyZWN0aXZlIEB2YXJ7d2hlbmNlfSBhcyBmb2xsb3dzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIEVYVDJfU0VFS19TRVQKK1RoZSBmaWxlIHBvc2l0aW9uIGlzIHNldCB0byBAdmFye29mZnNldH0gYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQorZmlsZS4KKworQGl0ZW0gRVhUMl9TRUVLX0NVUgorVGhlIGZpbGUgcG9zaXRpb24gc2V0IHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uIHBsdXMgQHZhcntvZmZzZXR9IGJ5dGVzLgorCitAaXRlbSBFWFQyX1NFRUtfRU5ECitUaGUgZmlsZSBwb3NpdGlvbiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGZpbGUgcGx1cyBAdmFye29mZnNldH0KK2J5dGVzLgorQGVuZCB0YWJsZQorCitUaGUgY3VycmVudCBvZmZzZXQgaXMgcmV0dXJuZWQgdmlhIEB2YXJ7cmV0X3Bvc30uCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBHZXR0aW5nIHRoZSBmaWxlIHNpemUsICAsIENoYW5naW5nIHRoZSBmaWxlIG9mZnNldCAsIEZpbGUgSS9PIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBHZXR0aW5nIHRoZSBmaWxlIHNpemUKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19maWxlX2dldF9sc2l6ZSAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSwgX191NjQgKkB2YXJ7cmV0X3NpemV9KQorUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBmaWxlIEB2YXJ7ZmlsZX0gaW4gQHZhcntyZXRfc2l6ZX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXh0Ml9vZmZfdCBleHQyZnNfZmlsZV9nZXRfc2l6ZSAoZXh0Ml9maWxlX3QgQHZhcntmaWxlfSkKK1JldHVybiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBAdmFye2ZpbGV9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgSW5vZGUgRnVuY3Rpb25zLCBEaXJlY3RvcnkgZnVuY3Rpb25zLCBGaWxlIEkvTyBGdW5jdGlvbnMsIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBJbm9kZSBGdW5jdGlvbnMKKworQG1lbnUKKyogUmVhZGluZyBhbmQgd3JpdGluZyBpbm9kZXM6OiAgCisqIEl0ZXJhdGluZyBvdmVyIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW06OiAgCisqIEl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBhbiBpbm9kZTo6ICAKKyogSW5vZGUgQ29udmVuaWVuY2UgRnVuY3Rpb25zOjogIAorQGVuZCBtZW51CisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgUmVhZGluZyBhbmQgd3JpdGluZyBpbm9kZXMsIEl0ZXJhdGluZyBvdmVyIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW0sIElub2RlIEZ1bmN0aW9ucywgSW5vZGUgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFJlYWRpbmcgYW5kIHdyaXRpbmcgaW5vZGVzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntpbm9kZX0pCitSZWFkIHRoZSBpbm9kZSBudW1iZXIgQHZhcntpbm99IGludG8gQHZhcntpbm9kZX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc193cml0ZV9pbm9kZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntpbm9kZX0pCitXcml0ZSBAdmFye2lub2RlfSB0byBpbm9kZSBAdmFye2lub30uCitAZW5kIGRlZnR5cGVmdW4KKworCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEl0ZXJhdGluZyBvdmVyIGlub2RlcyBpbiBhIGZpbGVzeXN0ZW0sIEl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBhbiBpbm9kZSwgUmVhZGluZyBhbmQgd3JpdGluZyBpbm9kZXMsIElub2RlIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBJdGVyYXRpbmcgb3ZlciBpbm9kZXMgaW4gYSBmaWxlc3lzdGVtCisKK1RoZSBpbm9kZV9zY2FuIGFic3RyYWN0aW9uIGlzIHVzZWZ1bCBmb3IgaXRlcmF0aW5nIG92ZXIgYWxsIHRoZSBpbm9kZXMKK2luIGEgZmlsZXN5c3RlbS4gIAorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX29wZW5faW5vZGVfc2NhbiAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGludCBAdmFye2J1ZmZlcl9ibG9ja3N9LCBleHQyX2lub2RlX3NjYW4gKkB2YXJ7c2Nhbn0pCitJbml0aWFsaXplIHRoZSBpdGVyYXRpb24gdmFyaWFibGUgQHZhcntzY2FufS4gIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieQorQGNvZGV7ZXh0MmZzX2dldF9uZXh0X2lub2RlfS4gIFRoZSBAdmFye2J1ZmZlcl9ibG9ja3N9IHBhcmFtZXRlcgorY29udHJvbHMgaG93IG1hbnkgYmxvY2tzIG9mIHRoZSBpbm9kZSB0YWJsZSBhcmUgcmVhZCBpbiBhdCBhIHRpbWUuICBBCitsYXJnZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVzIG1vcmUgbWVtb3J5LCBidXQgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgaW4KK3NlZWtpbmcgYW5kIHJlYWRpbmcgZnJvbSB0aGUgZGlzay4gIElmIEB2YXJ7YnVmZmVyX2Jsb2Nrc30gaXMgemVybywgYQorc3VpdGFibGUgZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHVzZWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfY2xvc2VfaW5vZGVfc2NhbiAoZXh0Ml9pbm9kZV9zY2FuIEB2YXJ7c2Nhbn0pCitSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIEB2YXJ7c2Nhbn0gYW5kIGludmFsaWRhdGUgaXQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19nZXRfbmV4dF9pbm9kZSAoZXh0Ml9pbm9kZV9zY2FuIEB2YXJ7c2Nhbn0sIGV4dDJfaW5vX3QgKkB2YXJ7aW5vfSwgc3RydWN0IGV4dDJfaW5vZGUgKkB2YXJ7aW5vZGV9KQorCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgaW5vZGUgZnJvbSB0aGUgZmlsZXN5c3RlbTsgdGhlIGlub2RlCitudW1iZXIgb2YgdGhlIGlub2RlIGlzIHN0b3JlZCBpbiBAdmFye2lub30sIGFuZCB0aGUgaW5vZGUgaXMgc3RvcmVkIGluCitAdmFye2lub2RlfS4gIAorCitJZiB0aGUgaW5vZGUgaXMgbG9jYXRlZCBpbiBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gbWFya2VkIGFzIGJhZCwKK0Bjb2Rle2V4dDJmc19nZXRfbmV4dF9pbm9kZX0gd2lsbCByZXR1cm4gdGhlIGVycm9yCitAY29kZXtFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRX0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pbm9kZV9zY2FuX2dvdG9fYmxvY2tncm91cCAoZXh0Ml9pbm9kZV9zY2FuIEB2YXJ7c2Nhbn0sIGludCBAdmFye2dyb3VwfSkKK1N0YXJ0IHRoZSBpbm9kZSBzY2FuIGF0IGEgcGFydGljdWxhciBleHQyIGJsb2NrZ3JvdXAsIEB2YXJ7Z3JvdXB9LiAgCitUaGlzIGZ1bmN0aW9uIG1heSBiZSBzYWZlbHkgY2FsbGVkIGF0IGFueSB0aW1lIHdoaWxlIEB2YXJ7c2Nhbn0gaXMgdmFsaWQuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrIChleHQyX2lub2RlX3NjYW4gQHZhcntzY2FufSwgZXJyY29kZV90ICgqZG9uZV9ncm91cCkoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vZGVfc2NhbiBAdmFye3NjYW59LCBkZ3JwX3QgQHZhcntncm91cH0sIHZvaWQgKiBAdmFye3ByaXZhdGV9KSwgdm9pZCAqQHZhcntkb25lX2dyb3VwX2RhdGF9KQorUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBieQorQGNvZGV7ZXh0Ml9nZXRfbmV4dF9pbm9kZX0gd2hlbiBhbGwgb2YgdGhlIGlub2RlcyBpbiBhIGJsb2NrIGdyb3VwIGhhdmUKK2JlZW4gcHJvY2Vzc2VkLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfaW5vZGVfc2Nhbl9mbGFncyAoZXh0Ml9pbm9kZV9zY2FuIEB2YXJ7c2Nhbn0sIGludCBAdmFye3NldF9mbGFnc30sIGludCBAdmFye2NsZWFyX2ZsYWdzfSkKKworU2V0IHRoZSBzY2FuX2ZsYWdzIEB2YXJ7c2V0X2ZsYWdzfSBhbmQgY2xlYXIgdGhlIHNjYW5fZmxhZ3MgQHZhcntjbGVhcl9mbGFnc30uCitUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBpbnRlcmZhY2U6CisKK0B0YWJsZSBAc2FtcAorCitAaXRlbSBFWFQyX1NGX1NLSVBfTUlTU0lOR19JVEFCTEUgCitXaGVuIGEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSwgc2tpcCBpdC4gIElmIHRoaXMgZmxhZyBpcworbm90IHNldCBAY29kZXtleHQyZnNfZ2V0X25leHRfaW5vZGV9IHdpbGwgcmV0dXJuIHRoZSBlcnJvcgorRVhUMl9FVF9NSVNTSU5HX0lOT0RFX1RBQkxFLgorCitAZW5kIHRhYmxlCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBhbiBpbm9kZSwgSW5vZGUgQ29udmVuaWVuY2UgRnVuY3Rpb25zLCBJdGVyYXRpbmcgb3ZlciBpbm9kZXMgaW4gYSBmaWxlc3lzdGVtLCBJbm9kZSBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gSXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGFuIGlub2RlCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYmxvY2tfaXRlcmF0ZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBpbnQgQHZhcntmbGFnc30sIGNoYXIgKmJsb2NrX2J1ZiwgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190ICpAdmFye2Jsb2NrbnJ9LCBpbnQgQHZhcntibG9ja2NudH0sIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pLCB2b2lkICpAdmFye3ByaXZhdGV9KQorCitJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBibG9ja3MgaW4gaW5vZGUgbnVtYmVyIEB2YXJ7aW5vfSBpbiBmaWxlc3lzdGVtCitAdmFye2ZzfSwgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gQHZhcntmdW5jfSBmb3IgZWFjaCBibG9jayBpbiB0aGUKK2lub2RlLiAgVGhlIEB2YXJ7YmxvY2tfYnVmfSBwYXJhbWV0ZXIgc2hvdWxkIGVpdGhlciBiZSBOVUxMLCBvciBpZiB0aGUKK0Bjb2Rle2V4dDJmc19ibG9ja19pdGVyYXRlfSBmdW5jdGlvbiBpcyBjYWxsZWQgcmVwZWF0ZWRseSwgdGhlIG92ZXJoZWFkCitvZiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIHNjcmF0Y2ggbWVtb3J5IGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgYQorcG9pbnRlciB0byBhIHNjcmF0Y2ggYnVmZmVyIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgYXMgYmlnIGFzIHRocmVlIHRpbWVzIHRoZQorZmlsZXN5c3RlbSdzIGJsb2Nrc2l6ZS4gIAorCitUaGUgQHZhcntmbGFnc30gcGFyYW1ldGVyIGNvbnRyb2xzIGhvdyB0aGUgaXRlcmF0b3Igd2lsbCBmdW5jdGlvbjoKKworQHRhYmxlIEBzYW1wCisKK0BpdGVtIEJMT0NLX0ZMQUdfSE9MRQorVGhpcyBmbGFnIGluZGljaWF0ZXMgdGhhdCB0aGUgaW50ZXJhdG9yIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb24KK2Jsb2NrcyB3aGVyZSB0aGUgYmxvY2sgbnVtYmVyIGlzIHplcm8gKGFsc28ga25vd24gYXMgYGBob2xlcycnLikgIEl0IGlzCithbHNvIGtub3duIGFzIEJMT0NLX0ZMQUdfQVBQRU5ELCBzaW5jZSBpdCBpcyBhbHNvIHVzZWQgYnkgZnVuY3Rpb25zCitzdWNoIGFzIGV4dDJmc19leHBhbmRfZGlyKCkgdG8gYWRkIGEgbmV3IGJsb2NrIHRvIGFuIGlub2RlLgorCitAaXRlbSBCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFCitUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUKK2luZGlyZWN0LCBkb3VibHkgaW5kaXJlY3QsIGV0Yy4gYmxvY2tzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYWxsCitvZiB0aGUgYmxvY2tzIGNvbnRhaW5pbmVkIGluIHRoZSBpbmRpcmVjdCBibG9ja3MgYXJlIHByb2Nlc3NlZC4KK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgZGVhbGxvY2F0aW5nIGJsb2NrcyBmcm9tIGFuCitpbm9kZS4KKworQGl0ZW0gQkxPQ0tfRkxBR19EQVRBX09OTFkKK1RoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb24gc2hvdWxkIGJlCitjYWxsZWQgZm9yIGRhdGEgYmxvY2tzIG9ubHkuCisKK0BlbmQgdGFibGUKKworVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEB2YXJ7ZnVuY30gaXMgY2FsbGVkIHdpdGggYSBudW1iZXIgb2YgcGFyYW1ldGVyczsKK3RoZSBAdmFye2ZzfSBhbmQgQHZhcntwcml2YXRlfSBwYXJhbWV0ZXJzIGFyZSBzZWxmLWV4cGxhbmF0b3J5LCBhbmQKK3RoZWlyIHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB0aGUgcGFyYW1ldGVycyB0bworQGNvZGV7ZXh0MmZzX2Jsb2NrX2l0ZXJhdGV9LiAgKFRoZSBAdmFye3ByaXZhdGV9IGRhdGEgc3RydWN0dXJlIGlzCitnZW5lcmFsbHkgdXNlZCBieSBjYWxsZXJzIHRvIEBjb2Rle2V4dDJmc19ibG9ja19pdGVyYXRlfSBzbyB0aGF0IHNvbWUKK3ByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uICBUaGUgCitAdmFye2Jsb2NrY250fSBwYXJhbWV0ZXIsIGlmIG5vbi1uZWdhdGl2ZSwgaW5kaWNhdGVzIHRoZSBsb2dpY2FsIGJsb2NrCitudW1iZXIgb2YgYSBkYXRhIGJsb2NrIGluIHRoZSBpbm9kZS4gIElmIEB2YXJ7YmxvY2tjbnR9IGlzIGxlc3MgdGhhbgoremVybywgdGhlbiBAdmFye2Z1bmN9IHdhcyBjYWxsZWQgb24gYSBtZXRhZGF0YSBibG9jaywgYW5kIEB2YXJ7YmxvY2tjbnR9Cit3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogIEJMT0NLX0NPVU5UX0lORCwgQkxPQ0tfQ09VTlRfRElORCwKK0JMT0NLX0NPVU5UX1RJTkQsIG9yIEJMT0NLX0NPVU5UX1RSQU5TTEFUT1IuICBUaGUgQHZhcntibG9ja25yfSBpcyBhCitwb2ludGVyIHRvIHRoZSBpbm9kZSBvciBpbmRpcmVjdCBibG9jayBlbnRyeSBsaXN0aW5nIHBoeXNpY2FsIGJsb2NrCitudW1iZXIuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IG1vZGlmeSB0aGUgcGh5c2ljYWwgYmxvY2sgbnVtYmVyLCBpZgoraXQgcmV0dXJucyB0aGUgQHZhcntCTE9DS19DSEFOR0VEfSBmbGFnLgorCisKK1RoZSBjYWxsYmFjayBmdW5jdGlvbiBAdmFye2Z1bmN9IHJldHVybnMgYSByZXN1bHQgY29kZSB3aGljaCBpcyBjb21wb3NlZCBvZgordGhlIGxvZ2ljYWwgT1Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKKworQHRhYmxlIEBzYW1wCisKK0BpdGVtIEJMT0NLX0NIQU5HRUQKKworVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyBtb2RpZmllZCB0aGUgcGh5c2ljYWwKK2Jsb2NrIG51bWJlciBwb2ludGVkIHRvIGJ5IEB2YXJ7YmxvY2tucn0uCisKK0BpdGVtIEJMT0NLX0FCT1JUCisKK1RoaXMgZmxhZyByZXF1ZXN0cyB0aGF0IEBjb2Rle2V4dDJmc19ibG9ja19pdGVyYXRlfSB0byBzdG9wIGltbWVkaWF0ZWx5CithbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIuCisKK0BlbmQgdGFibGUKKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYmxvY2tfaXRlcmF0ZTIgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgaW50IEB2YXJ7ZmxhZ3N9LCBjaGFyICpAdmFye2Jsb2NrfV9idWYsIGludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBibGtfdCAqQHZhcntibG9ja25yfSwgZTJfYmxrY250X3QgQHZhcntibG9ja2NudH0sIGJsa190IEB2YXJ7cmVmX2Jsa30sIGludCAgQHZhcntyZWZfb2Zmc2V0fSwgdm9pZCAqQHZhcntwcml2YXRlfSksIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pCisKK1RoaXMgZnVuY3Rpb24gaXMgbXVjaCBsaWtlIEBjb2Rle2V4dDJmc19ibG9ja19pdGVyYXRlfSwgZXhjZXB0IHRoYXQgdGhlCitAdmFye2Jsb2NrY250fSB0eXBlIGlzIGEgNjQtYml0IHNpZ25lZCBxdWFudGl0eSwgdG8gc3VwcG9ydCBsYXJnZXIKK2ZpbGVzLCBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoZSBAdmFye3JlZl9ibGt9IGFuZCBAdmFye3JlZl9vZmZzZXR9Cithcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggaWRlbnRpZnkgdGhlIGxvY2F0aW9uCitvZiB0aGUgcGh5c2ljYWwgYmxvY2sgcG9pbnRlZCB0byBieSBwb2ludGVyIEB2YXJ7YmxvY2tucn0uICBJZgorQHZhcntyZWZfYmxrfSBpcyB6ZXJvLCB0aGVuIEB2YXJ7cmVmX29mZnNldH0gY29udGFpbnMgdGhlIG9mZnNldCBpbnRvCit0aGUgQGNvZGV7aV9ibG9ja3N9IGFycmF5LiAgSWYgQHZhcntyZWZfYmxrfSBpcyBub24temVybywgdGhlbiB0aGUgcGh5c2ljYWwKK2Jsb2NrIGxvY2F0aW9uIGlzIGNvbnRhaW5lZCBpbnNpZGUgYW4gaW5kaXJlY3QgYmxvY2sgZ3JvdXAsIGFuZAorQHZhcntyZWZfb2Zmc2V0fSBjb250YWlucyB0aGUgb2Zmc2V0IGludG8gdGhlIGluZGlyZWN0IGJsb2NrLgorCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBJbm9kZSBDb252ZW5pZW5jZSBGdW5jdGlvbnMsICAsIEl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBhbiBpbm9kZSwgSW5vZGUgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgSW5vZGVzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrcyAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBibGtfdCAqQHZhcntibG9ja3N9KQorCitSZXR1cm5zIGFuIGFycmF5IG9mIGJsb2NrcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkaXJlY3QsCitpbmRpcmVjdCwgZG91Ymx5IGluZGlyZWN0LCBhbmQgdHJpcGx5IGluZGlyZWN0IGJsb2NrcyBhcyBzdG9yZWQgaW4gdGhlCitpbm9kZSBzdHJ1Y3R1cmUuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19jaGVja19kaXJlY3RvcnkgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7aW5vfSkKK1JldHVybnMgMCBpZiBAdmFye2lub30gaXMgYSBkaXJlY3RvcnksIGFuZCBAY29kZXtFTk9URElSfSBpZiBpdCBpcyBub3QuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzIChzdHJ1Y3QgZXh0Ml9pbm9kZSAqQHZhcntpbm9kZX0pCisKK1JldHVybnMgMSBpZiB0aGUgaW5vZGUncyBibG9jayBlbnRyaWVzIGFjdHVhbGx5IHZhbGlkIGJsb2NrIGVudHJpZXMsIGFuZAorMCBpZiBub3QuICBJbm9kZXMgd2hpY2ggcmVwcmVzZW50IGRldmljZXMgYW5kIGZhc3Qgc3ltYm9saWMgbGlua3MgZG8gbm90Citjb250YWluIHZhbGlkIGJsb2NrIGVudHJpZXMuCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBEaXJlY3RvcnkgZnVuY3Rpb25zLCBCaXRtYXAgRnVuY3Rpb25zLCBJbm9kZSBGdW5jdGlvbnMsIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBEaXJlY3RvcnkgZnVuY3Rpb25zCisKK0BtZW51CisqIERpcmVjdG9yeSBibG9jayBmdW5jdGlvbnM6OiAgIAorKiBJdGVyYXRpbmcgb3ZlciBhIGRpcmVjdG9yeTo6ICAKKyogQ3JlYXRpbmcgYW5kIGV4cGFuZGluZyBkaXJlY3Rvcmllczo6ICAKKyogQ3JlYXRpbmcgYW5kIHJlbW92aW5nIGRpcmVjdG9yeSBlbnRyaWVzOjogIAorKiBMb29raW5nIHVwIGZpbGVuYW1lczo6ICAgICAgICAKKyogVHJhbnNsYXRpbmcgaW5vZGUgbnVtYmVycyB0byBmaWxlbmFtZXM6OiAgCitAZW5kIG1lbnUKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBEaXJlY3RvcnkgYmxvY2sgZnVuY3Rpb25zLCBJdGVyYXRpbmcgb3ZlciBhIGRpcmVjdG9yeSwgRGlyZWN0b3J5IGZ1bmN0aW9ucywgRGlyZWN0b3J5IGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBEaXJlY3RvcnkgYmxvY2sgZnVuY3Rpb25zCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9kaXJfYmxvY2sgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBibGtfdCBAdmFye2Jsb2NrfSwgdm9pZCAqQHZhcntidWZ9KQorCitUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgZGlyZWN0b3J5IGJsb2NrLCBwZXJmb3JtaW5nIGFueSBuZWNlc3NhcnkKK2J5dGUgc3dhcHBpbmcgaWYgbmVjZXNzYXJ5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgYmxrX3QgQHZhcntibG9ja30sIHZvaWQgKkB2YXJ7YnVmfSkKKworVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBkaXJlY3RvcnkgYmxvY2ssIHBlcmZvcm1pbmcgYW55IG5lY2Vzc2FyeQorYnl0ZSBzd2FwcGluZyBpZiBuZWNlc3NhcnkuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19uZXdfZGlyX2Jsb2NrIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcl9pbm99LCBleHQyX2lub190IEB2YXJ7cGFyZW50X2lub30sIGNoYXIgKipAdmFye2Jsb2NrfSkKKworVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeSBibG9jayBpbiBAdmFye2Jsb2NrfS4gIElmCitAdmFye2Rpcl9pbm99IGlzIG5vbi16ZXJvLCB0aGVuIEB2YXJ7ZGlyX2luZm99IGFuZCBAdmFye3BhcmVudF9pbm99IGlzIHVzZWQKK3RvIGluaXRpYWxpemUgZGlyZWN0b3J5IGVudHJpZXMgZm9yIEBmaWxley59IGFuZCBAZmlsZXsuLn0sIHJlc3BlY3RpdmVseS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEl0ZXJhdGluZyBvdmVyIGEgZGlyZWN0b3J5LCBDcmVhdGluZyBhbmQgZXhwYW5kaW5nIGRpcmVjdG9yaWVzLCBEaXJlY3RvcnkgYmxvY2sgZnVuY3Rpb25zLCBEaXJlY3RvcnkgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIEl0ZXJhdGluZyBvdmVyIGEgZGlyZWN0b3J5CisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZGlyX2l0ZXJhdGUgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7ZGlyfSwgaW50IEB2YXJ7ZmxhZ3N9LCBjaGFyICpAdmFye2Jsb2NrX2J1Zn0sIGludCAoKkB2YXJ7ZnVuY30pKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqQHZhcntkaXJlbnR9LCBpbnQgQHZhcntvZmZzZXR9LCBpbnQgQHZhcntibG9ja3NpemV9LCBjaGFyICpAdmFye2J1Zn0sIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pLCB2b2lkICpAdmFye3ByaXZhdGV9KQorCitUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9mIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGUKK2RpcmVjdG9yeSBAdmFye2Rpcn0sIGNhbGxpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEB2YXJ7ZnVuY30gZm9yIGVhY2gKK2RpcmVjdG9yeSBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5LiAgVGhlIEB2YXJ7YmxvY2tfYnVmfSBwYXJhbWV0ZXIgc2hvdWxkCitlaXRoZXIgYmUgTlVMTCwgb3IgaWYgdGhlIEBjb2Rle2V4dDJmc19kaXJfaXRlcmF0ZX0gZnVuY3Rpb24gaXMgCitjYWxsZWQgcmVwZWF0ZWRseSwgdGhlIG92ZXJoZWFkIG9mIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgCitzY3JhdGNoIG1lbW9yeSBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIGEgcG9pbnRlciB0byBhIHNjcmF0Y2ggYnVmZmVyCit3aGljaCBtdXN0IGJlIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgZmlsZXN5c3RlbSdzIGJsb2Nrc2l6ZS4gIAorCitUaGUgQHZhcntmbGFnc30gcGFyYW1ldGVyIGNvbnRyb2xzIGhvdyB0aGUgaXRlcmF0b3Igd2lsbCBmdW5jdGlvbjoKKworQHRhYmxlIEBzYW1wCisKK0BpdGVtIERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFkKKworVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGV2ZW4gCitmb3IgZGVsZXRlZCBvciBlbXB0eSBkaXJlY3RvcnkgZW50cmllcy4KKworQGVuZCB0YWJsZQorCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBDcmVhdGluZyBhbmQgZXhwYW5kaW5nIGRpcmVjdG9yaWVzLCBDcmVhdGluZyBhbmQgcmVtb3ZpbmcgZGlyZWN0b3J5IGVudHJpZXMsIEl0ZXJhdGluZyBvdmVyIGEgZGlyZWN0b3J5LCBEaXJlY3RvcnkgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIENyZWF0aW5nIGFuZCBleHBhbmRpbmcgZGlyZWN0b3JpZXMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19ta2RpciAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntwYXJlbnR9LCBleHQyX2lub190IEB2YXJ7aW51bX0sIGNvbnN0IGNoYXIgKkB2YXJ7bmFtZX0pCisKK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkuICBJZiBAdmFye2ludW19IGlzIHplcm8sIHRoZW4gYQorbmV3IGlub2RlIHdpbGwgYmUgYWxsb2NhdGVkOyBvdGhlcndpc2UsIHRoZSBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkIGluCit0aGUgaW5vZGUgc3BlY2lmaWVkIGJ5IEB2YXJ7aW51bX0uICBJZiBAdmFye25hbWV9IHNwZWNpZmllcyB0aGUgbmFtZSBvZgordGhlIG5ldyBkaXJlY3Rvcnk7IGlmIGl0IGlzIG5vbi1OVUxMLCB0aGVuIHRoZSBuZXcgZGlyZWN0b3J5IHdpbGwgYmUKK2xpbmtlZCBpbnRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IEB2YXJ7cGFyZW50fS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2V4cGFuZF9kaXIgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7ZGlyfSkKKworVGhpcyBmdW5jdGlvbiBhZGRzIGEgbmV3IGVtcHR5IGRpcmVjdG9yeSBibG9jayBhbmQgYXBwZW5kcyBpdCB0byAKK3RoZSBkaXJlY3RvcnkgQHZhcntkaXJ9LiAgVGhpcyBhbGxvd3MgZnVuY3Rpb25zIHN1Y2ggYXMKK0Bjb2Rle2V4dDJmc19saW5rfSB0byBhZGQgbmV3IGRpcmVjdG9yeSBlbnRyaWVzIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGlzIGZ1bGwuCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIENyZWF0aW5nIGFuZCByZW1vdmluZyBkaXJlY3RvcnkgZW50cmllcywgTG9va2luZyB1cCBmaWxlbmFtZXMsIENyZWF0aW5nIGFuZCBleHBhbmRpbmcgZGlyZWN0b3JpZXMsIERpcmVjdG9yeSBmdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQ3JlYXRpbmcgYW5kIHJlbW92aW5nIGRpcmVjdG9yeSBlbnRyaWVzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfbGluayAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9LCBjb25zdCBjaGFyICpAdmFye25hbWV9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgaW50IGZsYWdzKQorCitUaGlzIGZ1bmN0aW9uIGFkZHMgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IHRvIHRoZSBkaXJlY3RvcnkgQHZhcntkaXJ9LCAKK3dpdGggQHZhcntuYW1lfSBhbmQgQHZhcntpbm99IHNwZWNpZnlpbmcgdGhlIG5hbWUgYW5kIGlub2RlIG51bWJlciBpbgordGhlIGRpcmVjdG9yeSBlbnRyeSwgcmVzcGVjdGl2ZWx5LiAgCisKK1RoZSBsb3cgMyBiaXRzIG9mIHRoZSBmbGFncyBmaWVsZCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgdHlwZSBvZgoraW5vZGU6ICAgKE5vIG90aGVyIGZsYWdzIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4pCisKK0B0YWJsZSBAc2FtcAorCitAaXRlbSBFWFQyX0ZUX1VOS05PV04KKworVGhlIGZpbGUgdHlwZSBpcyB1bmtub3duLgorCitAaXRlbSBFWFQyX0ZUX1JFR19GSUxFCisKK1RoZSBmaWxlIHR5cGUgaXMgYSBub3JtYWwgZmlsZS4KKworQGl0ZW0gRVhUMl9GVF9ESVIKKworVGhlIGZpbGUgdHlwZSBpcyBhIGRpcmVjdG9yeS4KKworQGl0ZW0gRVhUMl9GVF9DSFJERVYKKworVGhlIGZpbGUgdHlwZSBpcyBhIGNoYXJhY3RlciBkZXZpY2UuCisKK0BpdGVtIEVYVDJfRlRfQkxLREVWCisKK1RoZSBmaWxlIHR5cGUgaXMgYSBibG9jayBkZXZpY2UuCisKK0BpdGVtIEVYVDJfRlRfRklGTworCitUaGUgZmlsZSB0eXBlIGlzIGEgbmFtZWQgcGlwZS4KKworQGl0ZW0gRVhUMl9GVF9TT0NLCisKK1RoZSBmaWxlIHR5cGUgaXMgYSB1bml4IGRvbWFpbiBzb2NrZXQuCisKK0BpdGVtIEVYVDJfRlRfU1lNTElOSworCitUaGUgZmlsZSB0eXBlIGlzIGEgc3ltYm9saWMgbGluay4KK0BlbmQgdGFibGUgCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3VubGluayAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9LCBjb25zdCBjaGFyICpAdmFye25hbWV9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgaW50IEB2YXJ7ZmxhZ3N9KQorCitUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBkaXJlY3RvcnkgZW50cnkgZnJvbSBAdmFye2Rpcn0uCitUaGUgZGlyZWN0b3J5IGVudHJ5IHRvIGJlIHJlbW92ZWQgaXMgdGhlIGZpcnN0IG9uZSB3aGljaCBpcworbWF0Y2hlZCBieSBAdmFye25hbWV9IGFuZCBAdmFye2lub30uICBJZiBAdmFye25hbWV9IGlzIG5vbi1OVUxMLCAKK3RoZSBkaXJlY3RvcnkgZW50cnkncyBuYW1lIG11c3QgbWF0Y2ggQHZhcntuYW1lfS4gIElmIEB2YXJ7aW5vfSBpcworbm9uLXplcm8sIHRoZSBkaXJlY3RvcnkgZW50cnkncyBpbm9kZSBudW1iZXIgbXVzdCBtYXRjaCBAdmFye2lub30uCitObyBmbGFncyBhcmUgY3VycmVudGx5IGRlZmluZWQgZm9yIEBjb2Rle2V4dDJmc191bmxpbmt9OyBjYWxsZXJzIHNob3VsZAorcGFzcyBpbiB6ZXJvIHRvIHRoaXMgcGFyYW1ldGVyLgorCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBMb29raW5nIHVwIGZpbGVuYW1lcywgVHJhbnNsYXRpbmcgaW5vZGUgbnVtYmVycyB0byBmaWxlbmFtZXMsIENyZWF0aW5nIGFuZCByZW1vdmluZyBkaXJlY3RvcnkgZW50cmllcywgRGlyZWN0b3J5IGZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBMb29raW5nIHVwIGZpbGVuYW1lcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2xvb2t1cCAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9LCBjb25zdCBjaGFyICpAdmFye25hbWV9LCBpbnQgQHZhcntuYW1lbGVufSwgY2hhciAqQHZhcntidWZ9LCBleHQyX2lub190ICpAdmFye2lub2RlfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX25hbWVpIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye3Jvb3R9LCBleHQyX2lub190IEB2YXJ7Y3dkfSwgY29uc3QgY2hhciAqQHZhcntuYW1lfSwgZXh0Ml9pbm9fdCAqQHZhcntpbm9kZX0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19uYW1laV9mb2xsb3cgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2lub190IEB2YXJ7cm9vdH0sIGV4dDJfaW5vX3QgQHZhcntjd2R9LCBjb25zdCBjaGFyICpAdmFye25hbWV9LCBleHQyX2lub190ICpAdmFye2lub2RlfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ZvbGxvd19saW5rIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye3Jvb3R9LCBleHQyX2lub190IEB2YXJ7Y3dkfSwgZXh0Ml9pbm9fdCBAdmFye2lub2RlfSwgZXh0Ml9pbm9fdCAqQHZhcntyZXN9X2lub2RlKQorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgVHJhbnNsYXRpbmcgaW5vZGUgbnVtYmVycyB0byBmaWxlbmFtZXMsICAsIExvb2tpbmcgdXAgZmlsZW5hbWVzLCBEaXJlY3RvcnkgZnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFRyYW5zbGF0aW5nIGlub2RlIG51bWJlcnMgdG8gZmlsZW5hbWVzCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZ2V0X3BhdGhuYW1lIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBjaGFyICoqQHZhcntuYW1lfSkKK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQml0bWFwIEZ1bmN0aW9ucywgRVhUMiBkYXRhIGFic3RyYWN0aW9ucywgRGlyZWN0b3J5IGZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIEJpdG1hcCBGdW5jdGlvbnMKKworQG1lbnUKKyogUmVhZGluZyBhbmQgV3JpdGluZyBCaXRtYXBzOjogIAorKiBBbGxvY2F0aW5nIEJpdG1hcHM6OiAgICAgICAgICAKKyogRnJlZSBiaXRtYXBzOjogICAgICAgICAgICAgICAgCisqIEJpdG1hcCBPcGVyYXRpb25zOjogICAgICAgICAgIAorKiBDb21wYXJpbmcgYml0bWFwczo6ICAgICAgICAgICAKKyogTW9kaWZ5aW5nIEJpdG1hcHM6OiAgICAgICAgICAgCisqIFJlc2l6aW5nIEJpdG1hcHM6OiAgICAgICAgICAgIAorKiBDbGVhcmluZyBCaXRtYXBzOjogICAgICAgICAgICAKK0BlbmQgbWVudQorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIFJlYWRpbmcgYW5kIFdyaXRpbmcgQml0bWFwcywgQWxsb2NhdGluZyBCaXRtYXBzLCBCaXRtYXAgRnVuY3Rpb25zLCBCaXRtYXAgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFJlYWRpbmcgYW5kIFdyaXRpbmcgQml0bWFwcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2JpdG1hcCAoZXh0Ml9maWxzeXMgQHZhcntmc30pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc193cml0ZV9ibG9ja19iaXRtYXAgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9iaXRtYXBzIChleHQyX2ZpbHN5cyBAdmFye2ZzfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2JpdG1hcHMgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQWxsb2NhdGluZyBCaXRtYXBzLCBGcmVlIGJpdG1hcHMsIFJlYWRpbmcgYW5kIFdyaXRpbmcgQml0bWFwcywgQml0bWFwIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBBbGxvY2F0aW5nIEJpdG1hcHMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9nZW5lcmljX2JpdG1hcCAoX191MzIgQHZhcntzdGFydH0sIF9fdTMyIEB2YXJ7ZW5kfSwgX3UzMiBAdmFye3JlYWxfZW5kfSwgY29uc3QgY2hhciAqQHZhcntkZXNjcn0sIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqQHZhcntyZXR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgY29uc3QgY2hhciAqQHZhcntkZXNjcn0sIGV4dDJmc19ibG9ja19iaXRtYXAgKkB2YXJ7cmV0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcCAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGNvbnN0IGNoYXIgKkB2YXJ7ZGVzY3J9LCBleHQyZnNfaW5vZGVfYml0bWFwICpAdmFye3JldH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBGcmVlIGJpdG1hcHMsIEJpdG1hcCBPcGVyYXRpb25zLCBBbGxvY2F0aW5nIEJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gRnJlZWluZyBiaXRtYXBzCisKKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfZnJlZV9nZW5lcmljX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSkKK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQml0bWFwIE9wZXJhdGlvbnMsIENvbXBhcmluZyBiaXRtYXBzLCBGcmVlIGJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQml0bWFwIE9wZXJhdGlvbnMKKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfbWFya19ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2Jsb2NrfSkKKworQGRlZnR5cGVmdW54IHZvaWQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2Jsb2NrfSkKKworQGRlZnR5cGVmdW54IGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2Jsb2NrfSkKKworVGhlc2UgZnVuY3Rpb25zIHNldCwgY2xlYXIsIGFuZCB0ZXN0IGJpdHMgaW4gYSBibG9jayBiaXRtYXAgQHZhcntiaXRtYXB9LgorQGVuZCBkZWZ0eXBlZnVuCisKKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9LCBleHQyX2lub190IEB2YXJ7aW5vZGV9KQorCitAZGVmdHlwZWZ1bnggdm9pZCBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0sIGV4dDJfaW5vX3QgQHZhcntpbm9kZX0pCisKK0BkZWZ0eXBlZnVueCBpbnQgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSwgZXh0Ml9pbm9fdCBAdmFye2lub2RlfSkKKworVGhlc2UgZnVuY3Rpb25zIHNldCwgY2xlYXIsIGFuZCB0ZXN0IGJpdHMgaW4gYW4gaW5vZGUgYml0bWFwIEB2YXJ7Yml0bWFwfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwIChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Yml0bWFwfSwgYmxrX3QgQHZhcntibG9ja30pCisKK0BkZWZ0eXBlZnVueCB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9LCBibGtfdCBAdmFye2Jsb2NrfSkKKworQGRlZnR5cGVmdW54IGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcCAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JpdG1hcH0sIGJsa190IEB2YXJ7YmxvY2t9KQorCitAZGVmdHlwZWZ1bnggdm9pZCBleHQyZnNfZmFzdF9tYXJrX2lub2RlX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0sIGV4dDJfaW5vX3QgQHZhcntpbm9kZX0pCisKK0BkZWZ0eXBlZnVueCB2b2lkIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAgKGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntiaXRtYXB9LCBleHQyX2lub190IEB2YXJ7aW5vZGV9KQorCitAZGVmdHlwZWZ1bnggaW50IGV4dDJmc19mYXN0X3Rlc3RfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSwgZXh0Ml9pbm9fdCBAdmFye2lub2RlfSkKKworVGhlc2UgYGBmYXN0JycgZnVuY3Rpb25zIGFyZSBsaWtlIHRoZWlyIG5vcm1hbCBjb3VudGVycGFydHM7IGhvd2V2ZXIsCit0aGV5IGFyZSBpbXBsZW1lbnRlZCBhcyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBkbyBub3QgcGVyZm9ybSBib3VuZHMKK2NoZWNrcyBvbiB0aGUgaW5vZGUgbnVtYmVyIG9yIGJsb2NrIG51bWJlcjsgdGhleSBhcmUgYXNzdW1lZCB0byBiZQorY29ycmVjdC4gIFRoZXkgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBzcGVlZC1jcml0aWNhbCBhcHBsaWNhdGlvbnMsIHdoZXJlCit0aGUgaW5vZGUgb3IgYmxvY2sgbnVtYmVyIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IG90aGVyIG1lYW5zLgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGJsa190IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3N0YXJ0IChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Yml0bWFwfSkKK0BkZWZ0eXBlZnVueCBleHQyX2lub190IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3N0YXJ0IChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSkKK1JldHVybiB0aGUgZmlyc3QgaW5vZGUgb3IgYmxvY2sgd2hpY2ggaXMgc3RvcmVkIGluIHRoZSBiaXRtYXAuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kIChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Yml0bWFwfSkKK0BkZWZ0eXBlZnVueCBleHQyX2lub190IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JpdG1hcH0pCisKK1JldHVybiB0aGUgbGFzdCBpbm9kZSBvciBibG9jayB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIGJpdG1hcC4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQ29tcGFyaW5nIGJpdG1hcHMsIE1vZGlmeWluZyBCaXRtYXBzLCBCaXRtYXAgT3BlcmF0aW9ucywgQml0bWFwIEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBDb21wYXJpbmcgYml0bWFwcworCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfYmxvY2tfYml0bWFwIChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Ym0xfSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JtMn0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19jb21wYXJlX2lub2RlX2JpdG1hcCAoZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye2JtMX0sIGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntibTJ9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBNb2RpZnlpbmcgQml0bWFwcywgUmVzaXppbmcgQml0bWFwcywgQ29tcGFyaW5nIGJpdG1hcHMsIEJpdG1hcCBGdW5jdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gTW9kaWZ5aW5nIEJpdG1hcHMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9pbm9kZV9iaXRtYXBfZW5kIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSwgZXh0Ml9pbm9fdCBAdmFye2VuZH0sIGV4dDJfaW5vX3QgKkB2YXJ7b2VuZH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kIChleHQyZnNfYmxvY2tfYml0bWFwIEB2YXJ7Yml0bWFwfSwgYmxrX3QgQHZhcntlbmR9LCBibGtfdCAqQHZhcntvZW5kfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIFJlc2l6aW5nIEJpdG1hcHMsIENsZWFyaW5nIEJpdG1hcHMsIE1vZGlmeWluZyBCaXRtYXBzLCBCaXRtYXAgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFJlc2l6aW5nIEJpdG1hcHMKKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfZ2VuZXJpY19iaXRtYXAgKF9fdTMyIEB2YXJ7bmV3X2VuZH0sIF9fdTMyIEB2YXJ7bmV3X3JlYWxfZW5kfSwgZXh0MmZzX2dlbmVyaWNfYml0bWFwIEB2YXJ7Ym1hcH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwIChfX3UzMiBAdmFye25ld19lbmR9LCBfX3UzMiBAdmFye25ld19yZWFsX2VuZH0sIGV4dDJmc19pbm9kZV9iaXRtYXAgQHZhcntibWFwfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9ibG9ja19iaXRtYXAgKF9fdTMyIEB2YXJ7bmV3X2VuZH0sIF9fdTMyIEB2YXJ7bmV3X3JlYWxfZW5kfSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye2JtYXB9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBDbGVhcmluZyBCaXRtYXBzLCAgLCBSZXNpemluZyBCaXRtYXBzLCBCaXRtYXAgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIENsZWFyaW5nIEJpdG1hcHMKKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfY2xlYXJfaW5vZGVfYml0bWFwIChleHQyZnNfaW5vZGVfYml0bWFwIEB2YXJ7Yml0bWFwfSkKKworVGhpcyBmdW5jdGlvbiBzZXRzIGFsbCBvZiB0aGUgYml0cyBpbiB0aGUgaW5vZGUgYml0bWFwIEB2YXJ7Yml0bWFwfSB0byAKK2JlIHplcm8uCisKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19jbGVhcl9ibG9ja19iaXRtYXAgKGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcntiaXRtYXB9KQorCitUaGlzIGZ1bmN0aW9uIHNldHMgYWxsIG9mIHRoZSBiaXRzIGluIHRoZSBibG9jayBiaXRtYXAgQHZhcntiaXRtYXB9IHRvIAorYmUgemVyby4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRVhUMiBkYXRhIGFic3RyYWN0aW9ucywgQnl0ZS1zd2FwcGluZyBmdW5jdGlvbnMsIEJpdG1hcCBGdW5jdGlvbnMsIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBFWFQyIGRhdGEgYWJzdHJhY3Rpb25zCisKK1RoZSBleHQyIGxpYnJhcnkgaGFzIGEgbnVtYmVyIG9mIGFic3RyYWN0aW9ucyB3aGljaCBhcmUgdXNlZnVsIGZvciBleHQyCit1dGlsaXR5IHByb2dyYW1zLiAgCisKK0BtZW51CisqIEJhZGJsb2NrcyBsaXN0IG1hbmFnZW1lbnQ6OiAgIAorKiBEaXJlY3RvcnktYmxvY2sgbGlzdCBtYW5hZ2VtZW50OjogIAorKiBJbm9kZSBjb3VudCBmdW5jdGlvbnM6OiAgICAgICAKK0BlbmQgbWVudQorCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIEJhZGJsb2NrcyBsaXN0IG1hbmFnZW1lbnQsIERpcmVjdG9yeS1ibG9jayBsaXN0IG1hbmFnZW1lbnQsIEVYVDIgZGF0YSBhYnN0cmFjdGlvbnMsIEVYVDIgZGF0YSBhYnN0cmFjdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gQmFkYmxvY2tzIGxpc3QgbWFuYWdlbWVudAorCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlIChleHQyX2JhZGJsb2Nrc19saXN0ICpAdmFye3JldH0sIGludCBAdmFye3NpemV9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUgKGV4dDJfYmFkYmxvY2tzX2xpc3QgQHZhcntiYn0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQgKGV4dDJfYmFkYmxvY2tzX2xpc3QgQHZhcntiYn0sIGJsa190IEB2YXJ7YmxrfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QgKGV4dDJfYmFkYmxvY2tzX2xpc3QgQHZhcntiYn0sIGJsa190IEB2YXJ7YmxrfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4gKGV4dDJfYmFkYmxvY2tzX2xpc3QgQHZhcntiYn0sIGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgKkB2YXJ7cmV0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBpbnQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUgKGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgaXRlciwgYmxrX3QgKkB2YXJ7YmxrfSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZCAoZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBAdmFye2l0ZXJ9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfdXBkYXRlX2JiX2lub2RlIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9iYWRibG9ja3NfbGlzdCBAdmFye2JiX2xpc3R9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9iYl9pbm9kZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfYmFkYmxvY2tzX2xpc3QgKkB2YXJ7YmJfbGlzdH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX0ZJTEUgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBGSUxFICpmLCBleHQyX2JhZGJsb2Nrc19saXN0ICpAdmFye2JiX2xpc3R9LCB2b2lkICgqaW52YWxpZCkoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190IEB2YXJ7YmxrfSkpCitAZW5kIGRlZnR5cGVmdW4KKworCitAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Bub2RlIERpcmVjdG9yeS1ibG9jayBsaXN0IG1hbmFnZW1lbnQsIElub2RlIGNvdW50IGZ1bmN0aW9ucywgQmFkYmxvY2tzIGxpc3QgbWFuYWdlbWVudCwgRVhUMiBkYXRhIGFic3RyYWN0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBEaXJlY3RvcnktYmxvY2sgbGlzdCBtYW5hZ2VtZW50CisKK1RoZSBkYmxpc3QgYWJzdHJhY3Rpb24gc3RvcmVzIGEgbGlzdCBvZiBibG9ja3MgYmVsb25naW5nIHRvCitkaXJlY3Rvcmllcy4gIFRoaXMgbGlzdCBjYW4gYmUgdXNlZnVsIHdoZW4gYSBwcm9ncmFtIG5lZWRzIHRvIGludGVyYXRlCitvdmVyIGFsbCBkaXJlY3RvcnkgZW50cmllcyBpbiBhIGZpbGVzeXN0ZW07IEBjb2Rle2UyZnNja30gZG9lcyB0aGlzIGluCitwYXNzIDIgb2YgaXRzIG9wZXJhdGlvbnMsIGFuZCBAY29kZXtkZWJ1Z2ZzfSBuZWVkcyB0byBkbyB0aGlzIHdoZW4gaXQgaXMKK3RyeWluZyB0byB0dXJuIGFuIGlub2RlIG51bWJlciBpbnRvIGEgcGF0aG5hbWUuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfaW5pdF9kYmxpc3QgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBleHQyX2RibGlzdCAqQHZhcntyZXRfZGJsaXN0fSkKKworQ3JlYXRlcyBhIGRibGlzdCBkYXRhIHN0cnVjdHVyZSBhbmQgcmV0dXJuIGl0IGluIEB2YXJ7cmV0X2RibGlzdH0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfZnJlZV9kYmxpc3QgKGV4dDJfZGJsaXN0IEB2YXJ7ZGJsaXN0fSkKKworRnJlZSBhIGRibGlzdCBkYXRhIHN0cnVjdHVyZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2FkZF9kaXJfYmxvY2sgKGV4dDJfZGJsaXN0IEB2YXJ7ZGJsaXN0fSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIGJsa190IEB2YXJ7YmxrfSwgaW50IEB2YXJ7YmxvY2tjbnR9KQorCitBZGQgYW4gZW50cnkgdG8gdGhlIGRibGlzdCBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgY2FsbCByZWNvcmRzIHRoZSBmYWN0Cit0aGF0IGJsb2NrIG51bWJlciBAdmFye2Jsb2NrY250fSBvZiBkaXJlY3RvcnkgaW5vZGUgQHZhcntpbm99IGlzIHN0b3JlZAoraW4gYmxvY2sgQHZhcntibGt9LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfc2V0X2Rpcl9ibG9jayAoZXh0Ml9kYmxpc3QgQHZhcntkYmxpc3R9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgYmxrX3QgQHZhcntibGt9LCBpbnQgQHZhcntibG9ja2NudH0pCisKK0NoYW5nZSBhbiBlbnRyeSBpbiB0aGUgZGJsaXN0IGRhdGEgc3RydWN0dXJlOyB0aGlzIGNoYW5nZXMgdGhlIGxvY2F0aW9uCitvZiBibG9jayBudW1iZXIgQHZhcntibG9ja2NudH0gb2YgZGlyZWN0b3J5IGluZG9lIEB2YXJ7aW5vfSB0byBiZSBibG9jaworQHZhcntibGt9LiAKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9pdGVyYXRlIChleHQyX2RibGlzdCBAdmFye2RibGlzdH0sIGludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSAqQHZhcntkYl9pbmZvfSwgdm9pZCAqQHZhcntwcml2YXRlfSksIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pCisKK1RoaXMgaXRlcmF0b3IgY2FsbHMgQHZhcntmdW5jfSBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIGRibGlzdCBkYXRhIHN0cnVjdHVyZS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZSAoZXh0Ml9kYmxpc3QgQHZhcntkYmxpc3R9LCBpbnQgZmxhZ3MsIGNoYXIgKkB2YXJ7YmxvY2tfYnVmfSwgaW50ICgqZnVuYykoZXh0Ml9pbm9fdCBAdmFye2Rpcn0sIGludCAgQHZhcntlbnRyeX0sIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqQHZhcntkaXJlbnR9LCBpbnQgQHZhcntvZmZzZXR9LCBpbnQgQHZhcntibG9ja3NpemV9LCBjaGFyICpAdmFye2J1Zn0sIHZvaWQgKkB2YXJ7cHJpdmF0ZX0pLCB2b2lkICpAdmFye3ByaXZhdGV9KQorCitUaGlzIGl0ZXJhdG9yIHRha2VzIHJlYWRzIGluIHRoZSBkaXJlY3RvcnkgYmxvY2sgaW5kaWNhdGVkIGluIGVhY2gKK2RibGlzdCBlbnRyeSwgYW5kIGNhbGxzIEB2YXJ7ZnVuY30gZm9yIGVhY2ggZGlyZWN0b3J5IGVudHJ5IGluIGVhY2gKK2RpcmVjdG9yeSBibG9jay4gIElmIEB2YXJ7ZGJsaXN0fSBjb250YWlucyBhbGwgdGhlIGRpcmVjdG9yeSBibG9ja3MgaW4gYQorZmlsZXN5c3RlbSwgdGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRvIGl0ZXJhdGUgb3ZlciBhbGwKK2RpcmVjdG9yeSBlbnRyaWVzIGZvciB0aGF0IGZpbGVzeXN0ZW0uCitAZW5kIGRlZnR5cGVmdW4KKworQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAbm9kZSBJbm9kZSBjb3VudCBmdW5jdGlvbnMsICAsIERpcmVjdG9yeS1ibG9jayBsaXN0IG1hbmFnZW1lbnQsIEVYVDIgZGF0YSBhYnN0cmFjdGlvbnMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gSW5vZGUgY291bnQgZnVuY3Rpb25zCisKK1RoZSBpY291bnQgYWJzdHJhY3Rpb24gaXMgYSBzcGVjaWFsaXplZCBkYXRhIHR5cGUgdXNlZCBieSBAY29kZXtlMmZzY2t9Cit0byBzdG9yZSBob3cgbWFueSB0aW1lcyBhIHBhcnRpY3VsYXIgaW5vZGUgaXMgcmVmZXJlbmNlZCBieSB0aGUKK2ZpbGVzeXN0ZW0uICBUaGlzIGlzIHVzZWQgdHdpY2U7IG9uY2UgdG8gc3RvcmUgdGhlIGFjdHVhbCBudW1iZXIgb2YgdGltZXMKK3RoYXQgdGhlIGlub2RlIGlzIHJlZmVyZW5jZTsgYW5kIG9uY2UgdG8gc3RvcmUgdGhlIGNsYWltZWQgbnVtYmVyIG9mIHRpbWVzCit0aGUgaW5vZGUgaXMgcmVmZXJlbmNlZCBhY2NvcmRpbmcgdG8gdGhlIGlub2RlIHN0cnVjdHVyZS4KKworVGhpcyBhYnN0cmFjdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBleHRyZW1lbHkgZWZmaWNpZW50IGZvciBzdG9yaW5nIHRoaXMKK3NvcnQgb2YgaW5mb3JtYXRpb24sIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG9mCitpbm9kZSBjb3VudHMsIG5hbWVseSAoMSkgaW5vZGUgY291bnRzIGFyZSB2ZXJ5IG9mdGVuIHplcm8gKGJlY2F1c2UKK3RoZSBpbm9kZSBpcyBjdXJycmVudGx5IG5vdCBpbiB1c2UpLCBhbmQgKDIpIG1hbnkgZmlsZXMgaGF2ZSBhIGlub2RlCitjb3VudCBvZiAxIChiZWNhdXNlIHRoZXkgYXJlIGEgZmlsZSB3aGljaCBoYXMgbm8gYWRkaXRpb25hbCBoYXJkIGxpbmtzKS4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19jcmVhdGVfaWNvdW50MiAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGludCBAdmFye2ZsYWdzfSwgaW50IEB2YXJ7c2l6ZX0sIGV4dDJfaWNvdW50X3QgQHZhcntoaW50fSwgZXh0Ml9pY291bnRfdCAqQHZhcntyZXR9KQorCitDcmVhdGVzIGFuIGljb3VudCBzdHVjdHVyZSBmb3IgYSBmaWxlc3lzdGVtIEB2YXJ7ZnN9LCB3aXRoIGluaXRpYWwgc3BhY2UKK2ZvciBAdmFye3NpemV9IGlub2RlcyB3aG9zZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gMS4gIFRoZSBAdmFye2ZsYWdzfQorcGFyYW1ldGVyIGlzIGVpdGhlciAwIG9yIEBjb2Rle0VYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlR9LCB3aGljaAoraW5kaWNhdGVzIHRoYXQgaWNvdW50IHN0cnVjdHVyZSBzaG91bGQgYmUgYWJsZSB0byBpbmNyZW1lbnQgaW5vZGUgY291bnRzCitxdWlja2x5LiAgVGhlIGljb3VudCBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgaW4gQHZhcntyZXR9LiAgVGhlIHJldHVybmVkCitpY291bnQgc3RydWN0dXJlIGluaXRpYWxseSBoYXMgYSBjb3VudCBvZiB6ZXJvIGZvciBhbGwgaW5vZGVzLgorCitUaGUgQHZhcntoaW50fSBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjYWxsZXIgdG8gb3B0aW9uYWxseSBwYXNzIGluIGFub3RoZXIKK2ljb3VudCBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBhcnJheSBvZiBpbm9kZXMgd2hvc2UKK2NvdW50IGlzIGdyZWF0ZXIgdGhhbiAxLiAgSXQgaXMgdXNlZCBwdXJlbHkgYXMgYSBzcGVlZCBvcHRpbWl6YXRpb24gc28KK3RoYXQgdGhlIGljb3VudCBzdHJ1Y3R1cmUgY2FuIGRldGVybWluZSBpbiBhZHZhbmNlIHdoaWNoIGlub2RlcyBhcmUKK2xpa2VseSB0byBjb250YWluIGEgY291bnQgZ3JhdGVyIHRoYW4gMS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biB2b2lkIGV4dDJmc19mcmVlX2ljb3VudCAoZXh0Ml9pY291bnRfdCBAdmFye2ljb3VudH0pCisKK0ZyZWVzIGFuIGljb3VudCBzdHJ1Y3R1cmUuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pY291bnRfZmV0Y2ggKGV4dDJfaWNvdW50X3QgQHZhcntpY291bnR9LCBleHQyX2lub190IEB2YXJ7aW5vfSwgX191MTYgKkB2YXJ7cmV0fSkKKworUmV0dXJucyBpbiBAdmFye3JldH0gZmV0Y2hlcyB0aGUgY291bnQgZm9yIGEgcGFydGljdWxhciBpbm9kZSBAdmFye2lub30uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pY291bnRfaW5jcmVtZW50IChleHQyX2ljb3VudF90IEB2YXJ7aWNvdW50fSwgZXh0Ml9pbm9fdCBAdmFye2lub30sIF9fdTE2ICpAdmFye3JldH0pCisKK0luY3JlbWVudHMgdGhlIHJlZiBjb3VudCBmb3IgaW5vZGUgQHZhcntpbm99LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfaWNvdW50X2RlY3JlbWVudCAoZXh0Ml9pY291bnRfdCBAdmFye2ljb3VudH0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBfX3UxNiAqQHZhcntyZXR9KQorCitEZWNyZW1lbnRzIHRoZSByZWYgY291bnQgZm9yIGlub2RlIEB2YXJ7aW5vfS4KK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9zdG9yZSAoZXh0Ml9pY291bnRfdCBAdmFye2ljb3VudH0sIGV4dDJfaW5vX3QgQHZhcntpbm99LCBfX3UxNiBAdmFye2NvdW50fSkKKworU2V0cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBpbm9kZSBAdmFye2lub30gdG8gYmUgQHZhcntjb3VudH0uCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2ljb3VudF9zaXplIChleHQyX2ljb3VudF90IEB2YXJ7aWNvdW50fSkKKworUmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5vZGVzIGluIEB2YXJ7aWNvdW50fSB3aGljaCBoYXMgYSBjb3VudAorZ3JlYXRlciB0aGFuIDEuCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gZXJyY29kZV90IGV4dDJmc19pY291bnRfdmFsaWRhdGUgKGV4dDJfaWNvdW50X3QgQHZhcntpY291bnR9LCBGSUxFICpAdmFye2Z9KQorCitWYWxpZGF0ZXMgdGhlIGludGVybmFsIHJlcCBpbnZhcmlhbnQgb2YgQHZhcntpY291bnR9OyBpZiB0aGVyZSBhcmUgYW55Citwcm9ibGVtcywgcHJpbnQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBAdmFye2Z9LiAgVGhpcyBmdW5jdGlvbiBpcworaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyB1c2Ugb25seS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQnl0ZS1zd2FwcGluZyBmdW5jdGlvbnMsIE90aGVyIGZ1bmN0aW9ucywgRVhUMiBkYXRhIGFic3RyYWN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIEJ5dGUtc3dhcHBpbmcgZnVuY3Rpb25zCisKK0BkZWZ0eXBlZnVuIHZvaWQgZXh0MmZzX3N3YXBfc3VwZXIgKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogQHZhcntzdXBlcn0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfc3dhcF9ncm91cF9kZXNjIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpAdmFye2dkcH0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBleHQyZnNfc3dhcF9pbm9kZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIHN0cnVjdCBleHQyX2lub2RlICpAdmFye3RvfSwgc3RydWN0IGV4dDJfaW5vZGUgKkB2YXJ7ZnJvbX0sIGludCBAdmFye2hvc3RvcmRlcn0pCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19uYXRpdmVfZmxhZyAodm9pZCkKK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgT3RoZXIgZnVuY3Rpb25zLCAgLCBCeXRlLXN3YXBwaW5nIGZ1bmN0aW9ucywgRVhUMkZTIExpYnJhcnkgRnVuY3Rpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIE90aGVyIGZ1bmN0aW9ucworCisvKiBhbGxvYy5jICovCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX25ld19pbm9kZSAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGV4dDJfaW5vX3QgQHZhcntkaXJ9LCBpbnQgQHZhcnttb2RlfSwgZXh0MmZzX2lub2RlX2JpdG1hcCBAdmFye21hcH0sIGV4dDJfaW5vX3QgKkB2YXJ7cmV0fSkKK0BlbmQgZGVmdHlwZWZ1bgorCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jayAoZXh0Ml9maWxzeXMgQHZhcntmc30sIGJsa190IEB2YXJ7Z29hbH0sIGV4dDJmc19ibG9ja19iaXRtYXAgQHZhcnttYXB9LCBibGtfdCAqQHZhcntyZXR9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgYmxrX3QgQHZhcntzdGFydH0sIGJsa190IEB2YXJ7ZmluaXNofSwgaW50IEB2YXJ7bnVtfSwgZXh0MmZzX2Jsb2NrX2JpdG1hcCBAdmFye21hcH0sIGJsa190ICpAdmFye3JldH0pCitAZW5kIGRlZnR5cGVmdW4KKworLyogY2hlY2tfZGVzYy5jICovCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2Rlc2MgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGVycmNvZGVfdCBleHQyZnNfZ2V0X251bV9kaXJzIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCAqQHZhcntyZXRfbnVtX2RpcnN9KQorQGVuZCBkZWZ0eXBlZnVuCisKKworLyogZ2V0c2l6ZS5jICovCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSAoY29uc3QgY2hhciAqQHZhcntmaWxlfSwgaW50IEB2YXJ7YmxvY2tzaXplfSwgYmxrX3QgKkB2YXJ7cmV0YmxvY2tzfSkKK0BlbmQgZGVmdHlwZWZ1bgorCisKKy8qIGlzbW91bnRlZC5jICovCitAZGVmdHlwZWZ1biBlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQgKGNvbnN0IGNoYXIgKkB2YXJ7ZmlsZX0sIGludCAqQHZhcnttb3VudF9mbGFnc30pCitAZW5kIGRlZnR5cGVmdW4KKworLyogdmVyc2lvbi5jICovCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfZ2V0X2xpYnJhcnlfdmVyc2lvbiAoY29uc3QgY2hhciAqKkB2YXJ7dmVyX3N0cmluZ30sIGNvbnN0IGNoYXIgKipAdmFye2RhdGVfc3RyaW5nfSkKKworVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGV4dDIgbGlicmFyeS4gIFRoZQorcmV0dXJuIHZhbHVlIGNvbnRhaW5zIGFuIGludGVnZXIgdmVyc2lvbiBjb2RlLCB3aGljaCBjb25zaXN0cyBvZiB0aGUKK21ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWJyYXJ5IG11bHRpcGxpZWQgYnkgMTAwLCBwbHVzIHRoZSBtaW5vcgordmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYnJhcnkuICBIZW5jZSwgaWYgdGhlIGxpYnJhcnkgdmVyc2lvbiBpcyAxLjA4LAordGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgMTA4LgorCitJZiBAdmFye3Zlcl9zdHJpbmd9IGFuZC9vciBAdmFye2RhdGVfc3RyaW5nfSBhcmUgbm9uLU5VTEwsIHRoZXkgd2lsbCBiZQorc2V0IHRvIHBvaW50IGF0IGEgY29uc3RhbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxpYnJhcnkgdmVyc2lvbiBhbmQvb3IKK3JlbGVhc2UgZGF0ZSwgcmVzcGVjdGl2ZWx5LgorQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcgKGNvbnN0IGNoYXIgKkB2YXJ7dmVyX3N0cmluZ30pCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgYSB2ZXJzaW9uIHN0cmluZyB3aGljaCBtYXkgaW5jbHVkZWQgaW4gYW4KK2FwcGxpY2F0aW9uIGFuZCByZXR1cm5zIGEgdmVyc2lvbiBjb2RlIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSB1c2VkIGJ5CitAY29kZXtleHQyZnNfZ2V0X2xpYnJhcnlfdmVyc2lvbn0uICBJdCBjYW4gYmUgdXNlZCBieSBwcm9ncmFtcyBpbmNsdWRlZAoraW4gdGhlIEBjb2Rle2UyZnNwcm9nc30gZGlzdHJpYnV0aW9uIHRvIGFzc3VyZSB0aGF0IHRoZXkgYXJlIHVzaW5nIGFuCit1cC10by1kYXRlIGV4dDIgc2hhcmVkIGxpYnJhcnkuCitAZW5kIGRlZnR5cGVmdW4KKworLyogaW5saW5lIGZ1bmN0aW9ucyAqLworQGRlZnR5cGVmdW4gaW50IGV4dDJmc19ncm91cF9vZl9ibGsgKGV4dDJfZmlsc3lzIEB2YXJ7ZnN9LCBibGtfdCBAdmFye2Jsa30pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYmxvY2sgZ3JvdXAgd2hpY2ggY29udGFpbnMgdGhlIGJsb2NrIEB2YXJ7YmxrfS4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIGludCBleHQyZnNfZ3JvdXBfb2ZfaW5vIChleHQyX2ZpbHN5cyBAdmFye2ZzfSwgZXh0Ml9pbm9fdCBAdmFye2lub30pCisKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYmxvY2sgZ3JvdXAgd2hpY2ggY29udGFpbnMgdGhlIGlub2RlIEB2YXJ7aW5vfS4KK0BlbmQgZGVmdHlwZWZ1bgorCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgQ29uY2VwdCBJbmRleCwgRnVuY3Rpb24gSW5kZXgsIEVYVDJGUyBMaWJyYXJ5IEZ1bmN0aW9ucywgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0B1bm51bWJlcmVkIENvbmNlcHQgSW5kZXgKK0BwcmludGluZGV4IGNwCisKK0BjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQG5vZGUgRnVuY3Rpb24gSW5kZXgsICAsIENvbmNlcHQgSW5kZXgsIFRvcAorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAdW5udW1iZXJlZCBGdW5jdGlvbiBhbmQgVHlwZSBJbmRleAorQHByaW50aW5kZXggZm4KKworCitAY29udGVudHMKK0BieWUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9kb2MvdGV4aW5mby50ZXggYi9lMmZzcHJvZ3MvZG9jL3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZG9jL3RleGluZm8udGV4CkBAIC0wLDAgKzEsNzIyNiBAQAorJSB0ZXhpbmZvLnRleCAtLSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgorJQorJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCitcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQorJQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDA2LTAyLTEzLjE2fQorJQorJSBDb3B5cmlnaHQgKEMpIDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZQorJSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorJSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCislCislIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCislIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKKyUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislCislIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIHJlYWQgYnkgVGVYIHdoZW4gcHJvY2Vzc2luZworJSBhIFRleGluZm8gc291cmNlIGRvY3VtZW50LCB5b3UgbWF5IHVzZSB0aGUgcmVzdWx0IHdpdGhvdXQKKyUgcmVzdHJpY3Rpb24uICAoVGhpcyBoYXMgYmVlbiBvdXIgaW50ZW50IHNpbmNlIFRleGluZm8gd2FzIGludmVudGVkLikKKyUKKyUgUGxlYXNlIHRyeSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGV4aW5mby50ZXggYmVmb3JlIHN1Ym1pdHRpbmcgYnVnCislIHJlcG9ydHM7IHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tOgorJSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyAodGhlIFRleGluZm8gaG9tZSBwYWdlKSwgb3IKKyUgICBmdHA6Ly90dWcub3JnL3RleC90ZXhpbmZvLnRleAorJSAgICAgKGFuZCBhbGwgQ1RBTiBtaXJyb3JzLCBzZWUgaHR0cDovL3d3dy5jdGFuLm9yZykuCislIFRoZSB0ZXhpbmZvLnRleCBpbiBhbnkgZ2l2ZW4gZGlzdHJpYnV0aW9uIGNvdWxkIHdlbGwgYmUgb3V0CislIG9mIGRhdGUsIHNvIGlmIHRoYXQncyB3aGF0IHlvdSdyZSB1c2luZywgcGxlYXNlIGNoZWNrLgorJQorJSBTZW5kIGJ1ZyByZXBvcnRzIHRvIGJ1Zy10ZXhpbmZvQGdudS5vcmcuICBQbGVhc2UgaW5jbHVkZSBpbmNsdWRpbmcgYQorJSBjb21wbGV0ZSBkb2N1bWVudCBpbiBlYWNoIGJ1ZyByZXBvcnQgd2l0aCB3aGljaCB3ZSBjYW4gcmVwcm9kdWNlIHRoZQorJSBwcm9ibGVtLiAgUGF0Y2hlcyBhcmUsIG9mIGNvdXJzZSwgZ3JlYXRseSBhcHByZWNpYXRlZC4KKyUKKyUgVG8gcHJvY2VzcyBhIFRleGluZm8gbWFudWFsIHdpdGggVGVYLCBpdCdzIG1vc3QgcmVsaWFibGUgdG8gdXNlIHRoZQorJSB0ZXhpMmR2aSBzaGVsbCBzY3JpcHQgdGhhdCBjb21lcyB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgYSBzaW1wbGUKKyUgbWFudWFsIGZvby50ZXhpLCBob3dldmVyLCB5b3UgY2FuIGdldCBhd2F5IHdpdGggdGhpczoKKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXhpbmRleCBmb28uPz8KKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXggZm9vLnRleGkKKyUgICBkdmlwcyBmb28uZHZpIC1vICAjIG9yIHdoYXRldmVyOyB0aGlzIG1ha2VzIGZvby5wcy4KKyUgVGhlIGV4dHJhIFRlWCBydW5zIGdldCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGluZm9ybWF0aW9uIGNvcnJlY3QuCislIFNvbWV0aW1lcyBvbmUgcnVuIGFmdGVyIHRleGluZGV4IHN1ZmZpY2VzLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIG1vcmUKKyUgdGhhbiB0d287IHRleGkyZHZpIGRvZXMgaXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCislCislIEl0IGlzIHBvc3NpYmxlIHRvIGFkYXB0IHRleGluZm8udGV4IGZvciBvdGhlciBsYW5ndWFnZXMsIHRvIHNvbWUKKyUgZXh0ZW50LiAgWW91IGNhbiBnZXQgdGhlIGV4aXN0aW5nIGxhbmd1YWdlLXNwZWNpZmljIGZpbGVzIGZyb20gdGhlCislIGZ1bGwgVGV4aW5mbyBkaXN0cmlidXRpb24uCislCislIFRoZSBHTlUgVGV4aW5mbyBob21lIHBhZ2UgaXMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8uCisKKworXG1lc3NhZ2V7TG9hZGluZyB0ZXhpbmZvIFt2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl06fQorCislIElmIGluIGEgLmZtdCBmaWxlLCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIKKyUgYW5kIHR1cm4gb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCB3ZSBjb3VsZG4ndCBkbyBlYXJsaWVyIGJlY2F1c2UKKyUgdGhleSBtaWdodCBoYXZlIGFwcGVhcmVkIGluIHRoZSBpbnB1dCBmaWxlIG5hbWUuCitcZXZlcnlqb2J7XG1lc3NhZ2V7W1RleGluZm8gdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dfSUKKyAgXGNhdGNvZGVgKz1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmV9CisKK1xtZXNzYWdle0Jhc2ljcyx9CitcY2hhcmRlZlxvdGhlcj0xMgorCislIFdlIG5ldmVyIHdhbnQgcGxhaW4ncyBcb3V0ZXIgZGVmaW5pdGlvbiBvZiBcKyBpbiBUZXhpbmZvLgorJSBGb3IgQHRleCwgd2UgY2FuIHVzZSBcdGFiYWxpZ24uCitcbGV0XCsgPSBccmVsYXgKKworJSBTYXZlIHNvbWUgcGxhaW4gdGV4IG1hY3JvcyB3aG9zZSBuYW1lcyB3ZSB3aWxsIHJlZGVmaW5lLgorXGxldFxwdGV4Yj1cYgorXGxldFxwdGV4YnVsbGV0PVxidWxsZXQKK1xsZXRccHRleGM9XGMKK1xsZXRccHRleGNvbW1hPVwsCitcbGV0XHB0ZXhkb3Q9XC4KK1xsZXRccHRleGRvdHM9XGRvdHMKK1xsZXRccHRleGVuZD1cZW5kCitcbGV0XHB0ZXhlcXVpdj1cZXF1aXYKK1xsZXRccHRleGV4Y2xhbT1cIQorXGxldFxwdGV4Zm9vdG5vdGU9XGZvb3Rub3RlCitcbGV0XHB0ZXhndHI9PgorXGxldFxwdGV4aGF0PV4KK1xsZXRccHRleGk9XGkKK1xsZXRccHRleGluZGVudD1caW5kZW50CitcbGV0XHB0ZXhpbnNlcnQ9XGluc2VydAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCitcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorCislIElmIHRoaXMgY2hhcmFjdGVyIGFwcGVhcnMgaW4gYW4gZXJyb3IgbWVzc2FnZSBvciBoZWxwIHN0cmluZywgaXQKKyUgc3RhcnRzIGEgbmV3IGxpbmUgaW4gdGhlIG91dHB1dC4KK1xuZXdsaW5lY2hhciA9IGBeXkoKKworJSBVc2UgVGVYIDMuMCdzIFxpbnB1dGxpbmVubyB0byBnZXQgdGhlIGxpbmUgbnVtYmVyLCBmb3IgYmV0dGVyIGVycm9yCislIG1lc3NhZ2VzLCBidXQgaWYgd2UncmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4KKyUKK1xpZnhcaW5wdXRsaW5lbm9cdGhpc2lzdW5kZWZpbmVkCisgIFxsZXRcbGluZW51bWJlciA9IFxlbXB0eSAlIFByZS0zLjAuCitcZWxzZQorICBcZGVmXGxpbmVudW1iZXJ7bC5cdGhlXGlucHV0bGluZW5vOlxzcGFjZX0KK1xmaQorCislIFNldCB1cCBmaXhlZCB3b3JkcyBmb3IgRW5nbGlzaCBpZiBub3QgYWxyZWFkeSBzZXQuCitcaWZ4XHB1dHdvcmRBcHBlbmRpeFx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRBcHBlbmRpeHtBcHBlbmRpeH1cZmkKK1xpZnhccHV0d29yZENoYXB0ZXJcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZENoYXB0ZXJ7Q2hhcHRlcn1cZmkKK1xpZnhccHV0d29yZGZpbGVcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZGZpbGV7ZmlsZX1cZmkKK1xpZnhccHV0d29yZGluXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZGlue2lufVxmaQorXGlmeFxwdXR3b3JkSW5kZXhJc0VtcHR5XHVuZGVmaW5lZCAgICAgXGdkZWZccHV0d29yZEluZGV4SXNFbXB0eXsoSW5kZXggaXMgZW1wdHkpfVxmaQorXGlmeFxwdXR3b3JkSW5kZXhOb25leGlzdGVudFx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluZGV4Tm9uZXhpc3RlbnR7KEluZGV4IGlzIG5vbmV4aXN0ZW50KX1cZmkKK1xpZnhccHV0d29yZEluZm9cdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZEluZm97SW5mb31cZmkKK1xpZnhccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZlx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZntJbnN0YW5jZSBWYXJpYWJsZSBvZn1cZmkKK1xpZnhccHV0d29yZE1ldGhvZG9uXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZE1ldGhvZG9ue01ldGhvZCBvbn1cZmkKK1xpZnhccHV0d29yZE5vVGl0bGVcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZE5vVGl0bGV7Tm8gVGl0bGV9XGZpCitcaWZ4XHB1dHdvcmRvZlx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvZntvZn1cZmkKK1xpZnhccHV0d29yZG9uXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9ue29ufVxmaQorXGlmeFxwdXR3b3JkcGFnZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkcGFnZXtwYWdlfVxmaQorXGlmeFxwdXR3b3Jkc2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3Jkc2VjdGlvbntzZWN0aW9ufVxmaQorXGlmeFxwdXR3b3JkU2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkU2VjdGlvbntTZWN0aW9ufVxmaQorXGlmeFxwdXR3b3Jkc2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3Jkc2Vle3NlZX1cZmkKK1xpZnhccHV0d29yZFNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFNlZXtTZWV9XGZpCitcaWZ4XHB1dHdvcmRTaG9ydFRPQ1x1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRTaG9ydFRPQ3tTaG9ydCBDb250ZW50c31cZmkKK1xpZnhccHV0d29yZFRPQ1x1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFRPQ3tUYWJsZSBvZiBDb250ZW50c31cZmkKKyUKK1xpZnhccHV0d29yZE1KYW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSmFue0phbnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNRmViXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUZlYntGZWJydWFyeX1cZmkKK1xpZnhccHV0d29yZE1NYXJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWFye01hcmNofVxmaQorXGlmeFxwdXR3b3JkTUFwclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BcHJ7QXByaWx9XGZpCitcaWZ4XHB1dHdvcmRNTWF5XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1heXtNYXl9XGZpCitcaWZ4XHB1dHdvcmRNSnVuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bntKdW5lfVxmaQorXGlmeFxwdXR3b3JkTUp1bFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdWx7SnVseX1cZmkKK1xpZnhccHV0d29yZE1BdWdcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXVne0F1Z3VzdH1cZmkKK1xpZnhccHV0d29yZE1TZXBcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNU2Vwe1NlcHRlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1PY3RcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNT2N0e09jdG9iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNTm92XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU5vdntOb3ZlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1EZWNcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRGVje0RlY2VtYmVyfVxmaQorJQorXGlmeFxwdXR3b3JkRGVmbWFjXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmbWFje01hY3JvfVxmaQorXGlmeFxwdXR3b3JkRGVmc3BlY1x1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkRGVmc3BlY3tTcGVjaWFsIEZvcm19XGZpCitcaWZ4XHB1dHdvcmREZWZ2YXJcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZ2YXJ7VmFyaWFibGV9XGZpCitcaWZ4XHB1dHdvcmREZWZvcHRcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZvcHR7VXNlciBPcHRpb259XGZpCitcaWZ4XHB1dHdvcmREZWZmdW5jXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZmdW5je0Z1bmN0aW9ufVxmaQorCislIFNpbmNlIHRoZSBjYXRlZ29yeSBvZiBzcGFjZSBpcyBub3Qga25vd24sIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bC4KK1xjaGFyZGVmXHNwYWNlY2F0ID0gMTAKK1xkZWZcc3BhY2Vpc3NwYWNle1xjYXRjb2RlYFwgPVxzcGFjZWNhdH0KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBNYWluIG91dHB1dCByb3V0aW5lLgorXGNoYXJkZWZcUEFHRSA9IDI1NQorXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQorCitcbmV3Ym94XGhlYWRsaW5lYm94CitcbmV3Ym94XGZvb3RsaW5lYm94CisKKyUgXG9uZXBhZ2VvdXQgdGFrZXMgYSB2Ym94IGFzIGFuIGFyZ3VtZW50LiAgTm90ZSB0aGF0IFxwYWdlY29udGVudHMKKyUgZG9lcyBpbnNlcnRpb25zLCBidXQgeW91IGhhdmUgdG8gY2FsbCBpdCB5b3Vyc2VsZi4KK1xkZWZcb25lcGFnZW91dCMxeyUKKyAgXGlmY3JvcG1hcmtzIFxob2Zmc2V0PTBwdCBcZWxzZSBcaG9mZnNldD1cbm9ybWFsb2Zmc2V0IFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8gIFxhZHZhbmNlXGhvZmZzZXQgYnkgXGJpbmRpbmdvZmZzZXQKKyAgXGVsc2UgXGFkdmFuY2VcaG9mZnNldCBieSAtXGJpbmRpbmdvZmZzZXRcZmkKKyAgJQorICAlIERvIHRoaXMgb3V0c2lkZSBvZiB0aGUgXHNoaXBvdXQgc28gQGNvZGUgZXRjLiB3aWxsIGJlIGV4cGFuZGVkIGluCisgICUgdGhlIGhlYWRsaW5lIGFzIHRoZXkgc2hvdWxkIGJlLCBub3QgdGFrZW4gbGl0ZXJhbGx5IChvdXRwdXR0aW5nICcnY29kZSkuCisgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgXCBpbiBpbmRleCBlbnRyaWVzIG11c3Qgbm90IHN0YXkgXCwgZS5nLiwgaWYKKyAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAlIFdlIGRvbid0IHdhbnQgLnZyIChvciB3aGF0ZXZlcikgZW50cmllcyBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAlIFxlbnRyeXt7XHR0IFxpbmRleGJhY2tzbGFzaCB9YWNyb255bX17MzJ9e1xjb2RlIHtcYWNyb255bX19CisgICAgICAgICAgICAgICAlICJcYWNyb255bSIgd29uJ3Qgd29yayB3aGVuIGl0J3MgcmVhZCBiYWNrIGluOworICAgICAgICAgICAgICAgJSBpdCBuZWVkcyB0byBiZSAKKyAgICAgICAgICAgICAgICUge1xjb2RlIHt7XHR0IFxiYWNrc2xhc2hjdXJmb250IH1hY3JvbnltfQorICAgIFxzaGlwb3V0XHZib3h7JQorICAgICAgJSBEbyB0aGlzIGVhcmx5IHNvIHBkZiByZWZlcmVuY2VzIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuCisgICAgICBcaWZwZGZtYWtlcGFnZWRlc3QgXHBkZmRlc3QgbmFtZXtcdGhlXHBhZ2Vub30geHl6XGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MgXHZib3ggdG8gXG91dGVydnNpemVcYmdyb3VwCisgICAgICAgIFxoc2l6ZSA9IFxvdXRlcmhzaXplCisgICAgICAgIFx2c2tpcC1cdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFx2dG9wIHRvMHB0eyUKKyAgICAgICAgICBcbGluZXtcZXd0b3BcaGZpbFxld3RvcH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXHZzc30lCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXGxpbmVcYmdyb3VwCisgICAgICAgICAgXGhmaWwgJSBjZW50ZXIgdGhlIHBhZ2Ugd2l0aGluIHRoZSBvdXRlciAocGFnZSkgaHNpemUuCisgICAgICAgICAgXGlmb2RkXHBhZ2Vub1xoc2tpcFxiaW5kaW5nb2Zmc2V0XGZpCisgICAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFx1bnZib3hcaGVhZGxpbmVib3gKKyAgICAgIFxwYWdlYm9keXsjMX0lCisgICAgICBcaWZkaW1caHRcZm9vdGxpbmVib3ggPiAwcHQKKyAgICAgICAgJSBPbmx5IGxlYXZlIHRoaXMgc3BhY2UgaWYgdGhlIGZvb3RsaW5lIGlzIG5vbmVtcHR5LgorICAgICAgICAlIChXZSBsZXNzZW5lZCBcdnNpemUgZm9yIGl0IGluIFxvZGRmb290aW5neHh4LikKKyAgICAgICAgJSBUaGUgXGJhc2VsaW5lc2tpcD0yNHB0IGluIHBsYWluJ3MgXG1ha2Vmb290bGluZSBoYXMgbm8gZWZmZWN0LgorICAgICAgICBcdnNraXAgMlxiYXNlbGluZXNraXAKKyAgICAgICAgXHVudmJveFxmb290bGluZWJveAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MKKyAgICAgICAgICBcZWdyb3VwICUgZW5kIG9mIFx2Ym94XGJncm91cAorICAgICAgICBcaGZpbFxlZ3JvdXAgJSBlbmQgb2YgKGNlbnRlcmluZykgXGxpbmVcYmdyb3VwCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4gcGx1czFmaWxsIG1pbnVzMWZpbGwKKyAgICAgICAgXGJveG1heGRlcHRoID0gXGNvcm5lcnRoaWNrCisgICAgICAgIFx2Ym94IHRvMHB0e1x2c3MKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXtcZXdib3RcaGZpbFxld2JvdH0lCisgICAgICAgIH0lCisgICAgICBcZWdyb3VwICUgXHZib3ggZnJvbSBmaXJzdCBjcm9wbWFya3MgY2xhdXNlCisgICAgICBcZmkKKyAgICB9JSBlbmQgb2YgXHNoaXBvdXRcdmJveAorICB9JSBlbmQgb2YgZ3JvdXAgd2l0aCBcaW5kZXhkdW1taWVzCisgIFxhZHZhbmNlcGFnZW5vCisgIFxpZm51bVxvdXRwdXRwZW5hbHR5Pi0yMDAwMCBcZWxzZVxkb3N1cGVyZWplY3RcZmkKK30KKworXG5ld2luc2VydFxtYXJnaW4gXGRpbWVuXG1hcmdpbj1cbWF4ZGltZW4KKworXGRlZlxwYWdlYm9keSMxe1x2Ym94IHRvXHBhZ2VoZWlnaHR7XGJveG1heGRlcHRoPVxtYXhkZXB0aCAjMX19Cit7XGNhdGNvZGVgXEAgPTExCitcZ2RlZlxwYWdlY29udGVudHMjMXtcaWZ2b2lkXHRvcGluc1xlbHNlXHVudmJveFx0b3BpbnNcZmkKKyUgbWFyZ2luYWwgaGFja3MsIGp1aGFAdmlpc2EudXVjcCAoSnVoYSBUYWthbGEpCitcaWZ2b2lkXG1hcmdpblxlbHNlICUgbWFyZ2luYWwgaW5mbyBpcyBwcmVzZW50CisgIFxybGFwe1xrZXJuXGhzaXplXHZib3ggdG9cekB7XGtlcm4xcHRcYm94XG1hcmdpbiBcdnNzfX1cZmkKK1xkaW1lbkA9XGRwIzEgXHVudmJveCMxCitcaWZ2b2lkXGZvb3RpbnNcZWxzZVx2c2tpcFxza2lwXGZvb3RpbnNcZm9vdG5vdGVydWxlIFx1bnZib3hcZm9vdGluc1xmaQorXGlmckBnZ2VkYm90dG9tIFxrZXJuLVxkaW1lbkAgXHZmaWwgXGZpfQorfQorCislIEhlcmUgYXJlIHRoZSBydWxlcyBmb3IgdGhlIGNyb3BtYXJrcy4gIE5vdGUgdGhhdCB0aGV5IGFyZQorJSBvZmZzZXQgc28gdGhhdCB0aGUgc3BhY2UgYmV0d2VlbiB0aGVtIGlzIHRydWx5IFxvdXRlcmhzaXplIG9yIFxvdXRlcnZzaXplCislIChQLiBBLiBNYWNLYXksIDEyIE5vdmVtYmVyLCAxOTg2KQorJQorXGRlZlxld3RvcHtcdnJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoMHB0IHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zdG9we1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoXGNvcm5lcmxvbmcgd2lkdGhcY29ybmVydGhpY2t9fQorXGRlZlxld2JvdHtcdnJ1bGUgaGVpZ2h0MHB0IGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zYm90e1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcmxvbmcgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVydGhpY2t9fQorCislIFBhcnNlIGFuIGFyZ3VtZW50LCB0aGVuIHBhc3MgaXQgdG8gIzEuICBUaGUgYXJndW1lbnQgaXMgdGhlIHJlc3Qgb2YKKyUgdGhlIGlucHV0IGxpbmUgKGV4Y2VwdCB3ZSByZW1vdmUgYSB0cmFpbGluZyBjb21tZW50KS4gICMxIHNob3VsZCBiZSBhCislIG1hY3JvIHdoaWNoIGV4cGVjdHMgYW4gb3JkaW5hcnkgdW5kZWxpbWl0ZWQgVGVYIGFyZ3VtZW50LgorJQorXGRlZlxwYXJzZWFyZ3tccGFyc2Vhcmd1c2luZ3t9fQorXGRlZlxwYXJzZWFyZ3VzaW5nIzEjMnslCisgIFxkZWZcbmV4dHsjMn0lCisgIFxiZWdpbmdyb3VwCisgICAgXG9iZXlsaW5lcworICAgIFxzcGFjZWlzc3BhY2UKKyAgICAjMSUKKyAgICBccGFyc2VhcmdsaW5lXGVtcHR5JSBJbnNlcnQgdGhlIFxlbXB0eSB0b2tlbiwgc2VlIFxmaW5pc2hwYXJzZWFyZyBiZWxvdy4KK30KKwore1xvYmV5bGluZXMgJQorICBcZ2RlZlxwYXJzZWFyZ2xpbmUjMV5eTXslCisgICAgXGVuZGdyb3VwICUgRW5kIG9mIHRoZSBncm91cCBzdGFydGVkIGluIFxwYXJzZWFyZy4KKyAgICBcYXJncmVtb3ZlY29tbWVudCAjMVxjb21tZW50XEFyZ1Rlcm0lCisgIH0lCit9CisKKyUgRmlyc3QgcmVtb3ZlIGFueSBAY29tbWVudCwgdGhlbiBhbnkgQGMgY29tbWVudC4KK1xkZWZcYXJncmVtb3ZlY29tbWVudCMxXGNvbW1lbnQjMlxBcmdUZXJte1xhcmdyZW1vdmVjICMxXGNcQXJnVGVybX0KK1xkZWZcYXJncmVtb3ZlYyMxXGMjMlxBcmdUZXJte1xhcmdjaGVja3NwYWNlcyMxXF5eTVxBcmdUZXJtfQorCislIEVhY2ggb2NjdXJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBXZSBjYW5ub3QgdXNlIFxuZXh0IGhlcmUsIGFzIGl0IGhvbGRzIHRoZSBtYWNybyB0byBydW47CisgICAgJSB0aHVzIHdlIHJldXNlIFx0ZW1wLgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcbmV4dC4KKyUgKFNpbWlsYXJpbHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxuZXh0XGV4cGFuZGFmdGVyeyMxfX0KKworJSBccGFyc2VhcmdkZWZcZm9vey4uLn0KKyUJaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCislIFxkZWZcZm9ve1xwYXJzZWFyZ1xYZm9vfQorJSBcZGVmXFhmb28jMXsuLi59CislCislIEFjdHVhbGx5LCBJIHVzZSBcY3NuYW1lXHN0cmluZ1xmb29cZW5kY3NuYW1lLCBpZS4gXFxmb28sIGFzIGl0IGlzIG15CislIGZhdm91cml0ZSBUZVggdHJpY2suICAtLWthc2FsLCAxNm5vdjAzCisKK1xkZWZccGFyc2VhcmdkZWYjMXslCisgIFxleHBhbmRhZnRlciBcZG9wYXJzZWFyZ2RlZiBcY3NuYW1lXHN0cmluZyMxXGVuZGNzbmFtZSAjMSUKK30KK1xkZWZcZG9wYXJzZWFyZ2RlZiMxIzJ7JQorICBcZGVmIzJ7XHBhcnNlYXJnIzF9JQorICBcZGVmIzEjIzElCit9CisKKyUgU2V2ZXJhbCB1dGlsaXR5IGRlZmluaXRpb25zIHdpdGggYWN0aXZlIHNwYWNlOgoreworICBcb2JleXNwYWNlcworICBcZ2RlZlxvYmV5ZWRzcGFjZXsgfQorCisgICUgTWFrZSBlYWNoIHNwYWNlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgcHJvZHVjZSBhIG5vcm1hbCBpbnRlcndvcmQKKyAgJSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgRG9uJ3QgYWxsb3cgYSBsaW5lIGJyZWFrIGF0IHRoaXMgc3BhY2UsIGFzIHRoaXMKKyAgJSBpcyB1c2VkIG9ubHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgQGV4YW1wbGUsIHdoZXJlIGVhY2ggbGluZSBvZiBpbnB1dAorICAlIHNob3VsZCBwcm9kdWNlIGEgbGluZSBvZiBvdXRwdXQgYW55d2F5LgorICAlCisgIFxnZGVmXHNlcHNwYWNlc3tcb2JleXNwYWNlc1xsZXQgPVx0aWV9CisKKyAgJSBJZiBhbiBpbmRleCBjb21tYW5kIGlzIHVzZWQgaW4gYW4gQGV4YW1wbGUgZW52aXJvbm1lbnQsIGFueSBzcGFjZXMKKyAgJSB0aGVyZWluIHNob3VsZCBiZWNvbWUgcmVndWxhciBzcGFjZXMgaW4gdGhlIHJhdyBpbmRleCBmaWxlLCBub3QgdGhlCisgICUgZXhwYW5zaW9uIG9mIFx0aWUgKFxsZWF2ZXZtb2RlIFxwZW5hbHR5IFxATSBcICkuCisgIFxnZGVmXHVuc2Vwc3BhY2Vze1xsZXQgPVxzcGFjZX0KK30KKworCitcZGVmXGZsdXNoY3J7XGlmeFxwYXJcbGlzcHBhciBcZGVmXG5leHQjIzF7fVxlbHNlIFxsZXRcbmV4dD1ccmVsYXggXGZpIFxuZXh0fQorCislIERlZmluZSB0aGUgZnJhbWV3b3JrIGZvciBlbnZpcm9ubWVudHMgaW4gdGV4aW5mby50ZXguICBJdCdzIHVzZWQgbGlrZSB0aGlzOgorJQorJSAgIFxlbnZkZWZcZm9vey4uLn0KKyUgICBcZGVmXEVmb297Li4ufQorJQorJSBJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBcZW52ZGVmIHRvIGluc2VydCBcYmVnaW5ncm91cCBiZWZvcmUgdGhlCislIGFjdHVhbCBib2R5OyBAZW5kIGNsb3NlcyB0aGUgZ3JvdXAgYWZ0ZXIgY2FsbGluZyBcRWZvby4gIFxlbnZkZWYgYWxzbworJSBkZWZpbmVzIFx0aGlzZW52LCBzbyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBrbm93bjsgQGVuZCBjaGVja3MKKyUgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgbmFtZSBtYXRjaGVzLiAgVGhlIFxjaGVja2VudiBtYWNybyBjYW4gYWxzbyBiZQorJSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgdGhlIG9uZSBleHBlY3RlZC4KKyUKKyUgTm9uLWZhbHNlIGNvbmRpdGlvbmFscyAoQGlmdGV4LCBAaWZzZXQpIGRvbid0IGZpdCBpbnRvIHRoaXMsIHNvIHRoZXkKKyUgYXJlIG5vdCB0cmVhdGVkIGFzIGVudmlyb21lbnRzOyB0aGV5IGRvbid0IG9wZW4gYSBncm91cC4gIChUaGUKKyUgaW1wbGVtZW50YXRpb24gb2YgQGVuZCB0YWtlcyBjYXJlIG5vdCB0byBjYWxsIFxlbmRncm91cCBpbiB0aGlzCislIHNwZWNpYWwgY2FzZS4pCisKKworJSBBdCBydW50aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgorXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQorJSBpbml0aWFsaXplCitcbGV0XHRoaXNlbnZcZW1wdHkKKworJSAuLi4gYnV0IHRoZXkgZ2V0IGRlZmluZWQgdmlhIGBgXGVudmRlZlxmb297Li4ufScnOgorXGxvbmdcZGVmXGVudmRlZiMxIzJ7XGRlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CitcZGVmXGVudnBhcnNlYXJnZGVmIzEjMntccGFyc2VhcmdkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorCislIENoZWNrIHdoZXRoZXIgd2UncmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorXGRlZlxjaGVja2VudiMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgXGVsc2UKKyAgICBcYmFkZW52ZXJyCisgIFxmaQorfQorCislIEV2aXJvbm1lbnQgbWlzbWF0Y2gsICMxIGV4cGVjdGVkOgorXGRlZlxiYWRlbnZlcnJ7JQorICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgY2FuIGFwcGVhciBvbmx5IFxpbmVudmlyb25tZW50XHRlbXAsCisgICAgbm90IFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorfQorXGRlZlxpbmVudmlyb25tZW50IzF7JQorICBcaWZ4IzFcZW1wdHkKKyAgICBvdXQgb2YgYW55IGVudmlyb25tZW50JQorICBcZWxzZQorICAgIGluIGVudmlyb25tZW50IFxleHBhbmRhZnRlclxzdHJpbmcjMSUKKyAgXGZpCit9CisKKyUgQGVuZCBmb28gZXhlY3V0ZXMgdGhlIGRlZmluaXRpb24gb2YgXEVmb28uCislIEJ1dCBmaXJzdCwgaXQgZXhlY3V0ZXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIFxjaGVja2VudgorJQorXHBhcnNlYXJnZGVmXGVuZHslCisgIFxpZiAxXGNzbmFtZSBpc2NvbmQuIzFcZW5kY3NuYW1lCisgIFxlbHNlCisgICAgJSBUaGUgZ2VuZXJhbCB3b3JkaW5nIG9mIFxiYWRlbnZlcnIgbWF5IG5vdCBiZSBpZGVhbCwgYnV0Li4uIC0ta2FzYWwsIDA2bm92MDMKKyAgICBcZXhwYW5kYWZ0ZXJcY2hlY2tlbnZcY3NuYW1lIzFcZW5kY3NuYW1lCisgICAgXGNzbmFtZSBFIzFcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCitcbmV3aGVscFxFTXNpbXBsZXtQcmVzcyBSRVRVUk4gdG8gY29udGludWUufQorCisKKyUlIFNpbXBsZSBzaW5nbGUtY2hhcmFjdGVyIEAgY29tbWFuZHMKKworJSBAQCBwcmludHMgYW4gQAorJSBLbHVkZ2UgdGhpcyB1bnRpbCB0aGUgZm9udHMgYXJlIHJpZ2h0IChncnIpLgorXGRlZlxAe3tcdHRcY2hhcjY0fX0KKworJSBUaGlzIGlzIHR1cm5lZCBvZmYgYmVjYXVzZSBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZAorJSBhbmQgeW91IGNhbiB1c2UgQHd7Li4ufSBhcm91bmQgYSBxdW90ZSB0byBzdXBwcmVzcyBsaWdhdHVyZXMuCislJSBEZWZpbmUgQGAgYW5kIEAnIHRvIGJlIHRoZSBzYW1lIGFzIGAgYW5kICcKKyUlIGJ1dCBzdXBwcmVzc2luZyBsaWdhdHVyZXMuCislXGRlZlxge3tgfX0KKyVcZGVmXCd7eyd9fQorCislIFVzZWQgdG8gZ2VuZXJhdGUgcXVvdGVkIGJyYWNlcy4KK1xkZWZcbXlsYnJhY2Uge3tcdHRcY2hhcjEyM319CitcZGVmXG15cmJyYWNlIHt7XHR0XGNoYXIxMjV9fQorXGxldFx7PVxteWxicmFjZQorXGxldFx9PVxteXJicmFjZQorXGJlZ2luZ3JvdXAKKyAgJSBEZWZpbml0aW9ucyB0byBwcm9kdWNlIFx7IGFuZCBcfSBjb21tYW5kcyBmb3IgaW5kaWNlcywKKyAgJSBhbmQgQHsgYW5kIEB9IGZvciB0aGUgYXV4L3RvYyBmaWxlcy4KKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgXGNhdGNvZGVgXFsgPSAxIFxjYXRjb2RlYFxdID0gMgorICBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcb3RoZXIKKyAgIWdkZWYhbGJyYWNlY21kW1x7XSUKKyAgIWdkZWYhcmJyYWNlY21kW1x9XSUKKyAgIWdkZWYhbGJyYWNlYXRjbWRbQHtdJQorICAhZ2RlZiFyYnJhY2VhdGNtZFtAfV0lCishZW5kZ3JvdXAKKworJSBAY29tbWF7fSB0byBhdm9pZCAsIHBhcnNpbmcgcHJvYmxlbXMuCitcbGV0XGNvbW1hID0gLAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBcYworXGxldFxkb3RhY2NlbnQgPSBcLgorXGRlZlxyaW5nYWNjZW50IzF7e1xhY2NlbnQyMyAjMX19CitcbGV0XHRpZWFjY2VudCA9IFx0CitcbGV0XHViYXJhY2NlbnQgPSBcYgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24gQG9yZGYgQG9yZG0KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CitcZGVmXG9yZGZ7XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7YX19fQorXGRlZlxvcmRte1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye299fX0KKworJSBEb3RsZXNzIGkgYW5kIGRvdGxlc3MgaiwgdXNlZCBmb3IgYWNjZW50cy4KK1xkZWZcaW1hY3Jve2l9CitcZGVmXGptYWNyb3tqfQorXGRlZlxkb3RsZXNzIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcaW1hY3JvIFxwdGV4aQorICBcZWxzZVxpZnhcdGVtcFxqbWFjcm8gXGoKKyAgXGVsc2UgXGVycm1lc3NhZ2V7QGRvdGxlc3MgY2FuIGJlIHVzZWQgb25seSB3aXRoIGkgb3Igan0lCisgIFxmaVxmaQorfQorCislIFRoZSBcVGVYe30gbG9nbywgYXMgaW4gcGxhaW4sIGJ1dCByZXNldHRpbmcgdGhlIHNwYWNpbmcgc28gdGhhdCBhCislIHBlcmlvZCBmb2xsb3dpbmcgY291bnRzIGFzIGVuZGluZyBhIHNlbnRlbmNlLiAgKElkZWEgZm91bmQgaW4gbGF0ZXguKQorJQorXGVkZWZcVGVYe1xUZVggXHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEBMYVRlWHt9IGxvZ28uICBOb3QgcXVpdGUgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgZGVmaW5pdGlvbiBpbgorJSBsYXRleC5sdHgsIHNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudCBmb250IGZvciB0aGUgcmFpc2VkIEE7IGl0J3MgbW9zdAorJSBjb252ZW5pZW50IGZvciB1cyB0byB1c2UgYW4gZXhwbGljaXRseSBzbWFsbGVyIGZvbnQsIHJhdGhlciB0aGFuIHVzaW5nCislIHRoZSBcc2NyaXB0c3R5bGUgZm9udCAoc2luY2Ugd2UgZG9uJ3QgcmVzZXQgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUpLgorJQorXGRlZlxMYVRlWHslCisgIExca2Vybi0uMzZlbQorICB7XHNldGJveDA9XGhib3h7VH0lCisgICBcdmJveCB0byBcaHQwe1xoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIEF9XHZzc319JQorICBca2Vybi0uMTVlbQorICBcVGVYCit9CisKKyUgQmUgc3VyZSB3ZSdyZSBpbiBob3Jpem9udGFsIG1vZGUgd2hlbiBkb2luZyBhIHRpZSwgc2luY2Ugd2UgbWFrZSBzcGFjZQorJSBlcXVpdmFsZW50IHRvIHRoaXMgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMuIE90aGVyd2lzZSwgYSBzcGFjZQorJSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aWxsIHN0YXJ0IHdpdGggXHBlbmFsdHkgLS0gYW5kCislIHNpbmNlIFxwZW5hbHR5IGlzIHZhbGlkIGluIHZlcnRpY2FsIG1vZGUsIHdlJ2QgZW5kIHVwIHB1dHRpbmcgdGhlCislIHBlbmFsdHkgb24gdGhlIHZlcnRpY2FsIGxpc3QgaW5zdGVhZCBvZiBpbiB0aGUgbmV3IHBhcmFncmFwaC4KK3tcY2F0Y29kZWBAID0gMTEKKyAlIEF2b2lkIHVzaW5nIFxATSBkaXJlY3RseSwgYmVjYXVzZSB0aGF0IGNhdXNlcyB0cm91YmxlCisgJSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB3cml0dGVuIGludG8gYW4gaW5kZXggZmlsZS4KKyBcZ2xvYmFsXGxldFx0aWVwZW5hbHR5ID0gXEBNCisgXGdkZWZcdGlle1xsZWF2ZXZtb2RlXHBlbmFsdHlcdGllcGVuYWx0eVwgfQorfQorCislIEA6IGZvcmNlcyBub3JtYWwgc2l6ZSB3aGl0ZXNwYWNlIGZvbGxvd2luZy4KK1xkZWZcOntcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQCogZm9yY2VzIGEgbGluZSBicmVhay4KK1xkZWZcKntcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQorCislIEAvIGFsbG93cyBhIGxpbmUgYnJlYWsuCitcbGV0XC89XGFsbG93YnJlYWsKKworJSBALiBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcGVyaW9kLgorXGRlZlwuey5cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAISBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgYmFuZy4KK1xkZWZcIXshXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQD8gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHF1ZXJ5LgorXGRlZlw/ez9cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAZnJlbmNoc3BhY2luZyBvbnxvZmYgIHNheXMgd2hldGhlciB0byBwdXQgZXh0cmEgc3BhY2UgYWZ0ZXIgcHVuY3R1YXRpb24uCislIAorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJQorXGRlZlxpbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcaW5jbHVkZXp6en0KK1xkZWZcaW5jbHVkZXp6eiMxeyUKKyAgXHB1c2h0aGlzZmlsZXN0YWNrCisgIFxkZWZcdGhpc2ZpbGV7IzF9JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1we1xpbnB1dCAjMSB9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAKKyAgXHBvcHRoaXNmaWxlc3RhY2sKK30KK1xkZWZcZmlsZW5hbWVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWB+PVxvdGhlcgorICBcY2F0Y29kZWBePVxvdGhlcgorICBcY2F0Y29kZWBfPVxvdGhlcgorICBcY2F0Y29kZWB8PVxvdGhlcgorICBcY2F0Y29kZWA8PVxvdGhlcgorICBcY2F0Y29kZWA+PVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlcgorICBcY2F0Y29kZWAtPVxvdGhlcgorfQorCitcZGVmXHB1c2h0aGlzZmlsZXN0YWNreyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWFxwb3B0aGlzZmlsZXN0YWNrXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1h7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tZXHRoaXNmaWxlXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1kgIzFcU3RhY2tUZXJtICMyXFN0YWNrVGVybSB7JQorICBcZ2RlZlxwb3B0aGlzZmlsZXN0YWNre1xnZGVmXHRoaXNmaWxleyMxfVxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7IzJ9fSUKK30KKworXGRlZlxwb3B0aGlzZmlsZXN0YWNre1xlcnJ0aGlzZmlsZXN0YWNrZW1wdHl9CitcZGVmXGVycnRoaXNmaWxlc3RhY2tlbXB0eXtcZXJybWVzc2FnZXtJbnRlcm5hbCBlcnJvcjoKKyAgdGhlIHN0YWNrIG9mIGZpbGVuYW1lcyBpcyBlbXB0eS59fQorCitcZGVmXHRoaXNmaWxle30KKworJSBAY2VudGVyIGxpbmUKKyUgb3V0cHV0cyB0aGF0IGxpbmUsIGNlbnRlcmVkLgorJQorXHBhcnNlYXJnZGVmXGNlbnRlcnslCisgIFxpZmhtb2RlCisgICAgXGxldFxuZXh0XGNlbnRlckgKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcY2VudGVyVgorICBcZmkKKyAgXG5leHR7XGhmaWwgXGlnbm9yZXNwYWNlcyMxXHVuc2tpcCBcaGZpbH0lCit9CitcZGVmXGNlbnRlckgjMXslCisgIHslCisgICAgXGhmaWxcYnJlYWsKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgICBcbGluZXsjMX0lCisgICAgXGJyZWFrCisgIH0lCit9CitcZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CisKKyUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKKworXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CisKKyUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCislIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CislIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKKworXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQorXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCitcY29tbWVudHh4eH0KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KKworXGxldFxjPVxjb21tZW50CisKKyUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTLCBjbG9zZSBlbm91Z2guCislIE5DSEFSUyBjYW4gYWxzbyBiZSB0aGUgd29yZCBgYXNpcycgb3IgYG5vbmUnLgorJSBXZSBjYW5ub3QgZmVhc2libHkgaW1wbGVtZW50IEBwYXJhZ3JhcGhpbmRlbnQgYXNpcywgdGhvdWdoLgorJQorXGRlZlxhc2lzd29yZHthc2lzfSAlIG5vIHRyYW5zbGF0aW9uLCB0aGVzZSBhcmUga2V5d29yZHMKK1xkZWZcbm9uZXdvcmR7bm9uZX0KKyUKK1xwYXJzZWFyZ2RlZlxwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gIzFlbQorICAgIFxmaQorICBcZmkKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50Cit9CisKKyUgQGV4YW1wbGVpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUyBsaWtlIEBwYXJhZ3JhcGhpbmRlbnQuCislIEl0IHNlZW1zIEBleGFtcGxlaW5kZW50IGFzaXMgaXNuJ3QgbmVjZXNzYXJ5LCBidXQKKyUgSSBwcmVzZXJ2ZSBpdCB0byBtYWtlIGl0IHNpbWlsYXIgdG8gQHBhcmFncmFwaGluZGVudC4KK1xwYXJzZWFyZ2RlZlxleGFtcGxlaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcbGlzcG5hcnJvd2luZyA9IDBwdAorICAgIFxlbHNlCisgICAgICBcbGlzcG5hcnJvd2luZyA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCit9CisKKyUgQGZpcnN0cGFyYWdyYXBoaW5kZW50IFdPUkQKKyUgSWYgV09SRCBpcyBgbm9uZScsIHRoZW4gc3VwcHJlc3MgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcmFncmFwaAorJSBhZnRlciBhIHNlY3Rpb24gaGVhZGluZy4gIElmIFdPUkQgaXMgYGluc2VydCcsIHRoZW4gZG8gaW5kZW50IGF0IHN1Y2gKKyUgcGFyYWdyYXBocy4KKyUKKyUgVGhlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBpcyBzdXBwcmVzc2VkIG9yIG5vdCBieSBjYWxsaW5nCislIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50LCB3aGljaCB0aGUgc2VjdGlvbmluZyBjb21tYW5kcyBkby4KKyUgV2Ugc3dpdGNoIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYmFjayBhbmQgZm9ydGggYWNjb3JkaW5nIHRvIFdPUkQuCislIEJ5IGRlZmF1bHQsIHdlIHN1cHByZXNzIGluZGVudGF0aW9uLgorJQorXGRlZlxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50e1xkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXHBhcnNlYXJnZGVmXGZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgIFxnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGRlZl97XGlmbnVtXGZhbT1cc2xmYW0gXF9cZWxzZVxzYlxmaX0lCisgIH0KK30KKyUgQW5vdGhlciBjb21wbGljYXRpb246IHdlIHdhbnQgXFwgKGFuZCBAXCkgdG8gb3V0cHV0IGEgXCBjaGFyYWN0ZXIuCislIEZZSSwgcGxhaW4udGV4IHVzZXMgXFwgYXMgYSB0ZW1wb3JhcnkgY29udHJvbCBzZXF1ZW5jZSAod2h5PyksIGJ1dAorJSB0aGlzIGlzIG5vdCBhZHZlcnRpc2VkIGFuZCB3ZSBkb24ndCBjYXJlLiAgVGV4aW5mbyBkb2VzIG5vdAorJSBvdGhlcndpc2UgZGVmaW5lIEBcLgorJQorJSBUaGUgXG1hdGhjaGFyIGlzIGNsYXNzPTA9b3JkaW5hcnksIGZhbWlseT03PXR0ZmFtLCBwb3NpdGlvbj01Qz1cLgorXGRlZlxtYXRoYmFja3NsYXNoe1xpZm51bVxmYW09XHR0ZmFtIFxtYXRoY2hhciIwNzVDIFxlbHNlXGJhY2tzbGFzaCBcZml9CislCitcZGVmXG1hdGh7JQorICBcdGV4CisgIFxtYXRodW5kZXJzY29yZQorICBcbGV0XFwgPSBcbWF0aGJhY2tzbGFzaAorICBcbWF0aGFjdGl2ZQorICAkXGZpbmlzaG1hdGgKK30KK1xkZWZcZmluaXNobWF0aCMxeyMxJFxlbmRncm91cH0gICUgQ2xvc2UgdGhlIGdyb3VwIG9wZW5lZCBieSBcdGV4LgorCislIFNvbWUgYWN0aXZlIGNoYXJhY3RlcnMgKHN1Y2ggYXMgPCkgYXJlIHNwYWNlZCBkaWZmZXJlbnRseSBpbiBtYXRoLgorJSBXZSBoYXZlIHRvIHJlc2V0IHRoZWlyIGRlZmluaXRpb25zIGluIGNhc2UgdGhlIEBtYXRoIHdhcyBhbiBhcmd1bWVudAorJSB0byBhIGNvbW1hbmQgd2hpY2ggc2V0cyB0aGUgY2F0Y29kZXMgKHN1Y2ggYXMgQGl0ZW0gb3IgQHNlY3Rpb24pLgorJQoreworICBcY2F0Y29kZWBeID0gXGFjdGl2ZQorICBcY2F0Y29kZWA8ID0gXGFjdGl2ZQorICBcY2F0Y29kZWA+ID0gXGFjdGl2ZQorICBcY2F0Y29kZWArID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRoYWN0aXZleyUKKyAgICBcbGV0XiA9IFxwdGV4aGF0CisgICAgXGxldDwgPSBccHRleGxlc3MKKyAgICBcbGV0PiA9IFxwdGV4Z3RyCisgICAgXGxldCsgPSBccHRleHBsdXMKKyAgfQorfQorCislIEBidWxsZXQgYW5kIEBtaW51cyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudCBhcyBAbWF0aCwganVzdCBhYm92ZS4KK1xkZWZcYnVsbGV0eyRccHRleGJ1bGxldCR9CitcZGVmXG1pbnVzeyQtJH0KKworJSBAZG90c3t9IG91dHB1dHMgYW4gZWxsaXBzaXMgdXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KKyUgV2UgZG8gLjVlbSBwZXIgcGVyaW9kIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIHNwYWNpbmcgaW4gYSB0eXBld3JpdGVyCislIGZvbnQgYXMgdGhyZWUgYWN0dWFsIHBlcmlvZCBjaGFyYWN0ZXJzLgorJQorXGRlZlxkb3RzeyUKKyAgXGxlYXZldm1vZGUKKyAgXGhib3ggdG8gMS41ZW17JQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjI1ZmlsCisgICAgLlxoZmlsLlxoZmlsLiUKKyAgICBcaHNraXAgMHB0IHBsdXMgMC41ZmlsCisgIH0lCit9CisKKyUgQGVuZGRvdHN7fSBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgZWxsaXBzaXMuCislCitcZGVmXGVuZGRvdHN7JQorICBcZG90cworICBcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcgorfQorCislIEBjb21tYXt9IGlzIHNvIGNvbW1hcyBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0ZXh0IHdpdGhvdXQgbWVzc2luZyB1cAorJSBUZXhpbmZvJ3MgcGFyc2luZy4KKyUKK1xsZXRcY29tbWEgPSAsCisKKyUgQHJlZmlsbCBpcyBhIG5vLW9wLgorXGxldFxyZWZpbGw9XHJlbGF4CisKKyUgSWYgd29ya2luZyBvbiBhIGxhcmdlIGRvY3VtZW50IGluIGNoYXB0ZXJzLCBpdCBpcyBjb252ZW5pZW50IHRvCislIGJlIGFibGUgdG8gZGlzYWJsZSBpbmRleGluZywgY3Jvc3MtcmVmZXJlbmNpbmcsIGFuZCBjb250ZW50cywgZm9yIHRlc3QgcnVucy4KKyUgVGhpcyBpcyBkb25lIHdpdGggQG5vdmFsaWRhdGUgKGJlZm9yZSBAc2V0ZmlsZW5hbWUpLgorJQorXG5ld2lmXGlmbGlua3MgXGxpbmtzdHJ1ZSAlIGJ5IGRlZmF1bHQgd2Ugd2FudCB0aGUgYXV4IGZpbGVzLgorXGxldFxub3ZhbGlkYXRlID0gXGxpbmtzZmFsc2UKKworJSBAc2V0ZmlsZW5hbWUgaXMgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHRleGluZm8gZmlsZS4KKyUgU28gb3BlbiBoZXJlIHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGhhdmUgb3BlbiB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dC4KKyUgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBtYWtlIGEgLmZtdCBmaWxlIGZvciB0ZXhpbmZvLgorXGRlZlxzZXRmaWxlbmFtZXslCisgICBcZml4YmFja3NsYXNoICAlIFR1cm4gb2ZmIGhhY2sgdG8gc3dhbGxvdyBgXGlucHV0IHRleGluZm8nLgorICAgXGlmbGlua3MKKyAgICAgXHRyeWF1eGZpbGUKKyAgICAgJSBPcGVuIHRoZSBuZXcgYXV4IGZpbGUuICBUZVggd2lsbCBjbG9zZSBpdCBhdXRvbWF0aWNhbGx5IGF0IGV4aXQuCisgICAgIFxpbW1lZGlhdGVcb3Blbm91dFxhdXhmaWxlPVxqb2JuYW1lLmF1eAorICAgXGZpICUgXG9wZW5pbmRpY2VzIG5lZWRzIHRvIGRvIHNvbWUgd29yayBpbiBhbnkgY2FzZS4KKyAgIFxvcGVuaW5kaWNlcworICAgXGxldFxzZXRmaWxlbmFtZT1cY29tbWVudCAlIElnbm9yZSBleHRyYSBAc2V0ZmlsZW5hbWUgY21kcy4KKyAgICUKKyAgICUgSWYgdGV4aW5mby5jbmYgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLCByZWFkIGl0LgorICAgJSBVc2VmdWwgZm9yIHNpdGUtd2lkZSBAYWZvdXJwYXBlciwgZXRjLgorICAgXG9wZW5pbiAxIHRleGluZm8uY25mCisgICBcaWZlb2YgMSBcZWxzZSBcaW5wdXQgdGV4aW5mby5jbmYgXGZpCisgICBcY2xvc2VpbiAxCisgICAlCisgICBcY29tbWVudCAlIElnbm9yZSB0aGUgYWN0dWFsIGZpbGVuYW1lLgorfQorCislIENhbGxlZCBmcm9tIFxzZXRmaWxlbmFtZS4KKyUKK1xkZWZcb3BlbmluZGljZXN7JQorICBcbmV3aW5kZXh7Y3B9JQorICBcbmV3Y29kZWluZGV4e2ZufSUKKyAgXG5ld2NvZGVpbmRleHt2cn0lCisgIFxuZXdjb2RlaW5kZXh7dHB9JQorICBcbmV3Y29kZWluZGV4e2t5fSUKKyAgXG5ld2NvZGVpbmRleHtwZ30lCit9CisKKyUgQGJ5ZS4KK1xvdXRlclxkZWZcYnlle1xwYWdlYWxpZ25tYWNyb1x0cmFjaW5nc3RhdHM9MVxwdGV4ZW5kfQorCisKK1xtZXNzYWdle3BkZix9CislIGFkb2JlIGBwb3J0YWJsZScgZG9jdW1lbnQgZm9ybWF0CitcbmV3Y291bnRcdGVtcG51bQorXG5ld2NvdW50XGxua2NvdW50CitcbmV3dG9rc1xmaWxlbmFtZQorXG5ld2NvdW50XGZpbGVuYW1lbGVuZ3RoCitcbmV3Y291bnRccGduCitcbmV3dG9rc1x0b2tzQQorXG5ld3Rva3NcdG9rc0IKK1xuZXd0b2tzXHRva3NDCitcbmV3dG9rc1x0b2tzRAorXG5ld2JveFxib3hBCitcbmV3Y291bnRcY291bnRBCitcbmV3aWZcaWZwZGYKK1xuZXdpZlxpZnBkZm1ha2VwYWdlZGVzdAorCislIHdoZW4gcGRmdGV4IGlzIHJ1biBpbiBkdmkgbW9kZSwgXHBkZm91dHB1dCBpcyBkZWZpbmVkIChzbyBccGRmb3V0cHV0PTEKKyUgY2FuIGJlIHNldCkuICBTbyB3ZSB0ZXN0IGZvciBccmVsYXggYW5kIDAgYXMgd2VsbCBhcyBcdW5kZWZpbmVkLAorJSBib3Jyb3dlZCBmcm9tIGlmcGRmLnN0eS4KK1xpZnhccGRmb3V0cHV0XHVuZGVmaW5lZAorXGVsc2UKKyAgXGlmeFxwZGZvdXRwdXRccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBkZm91dHB1dAorICAgIFxlbHNlCisgICAgICBccGRmdHJ1ZQorICAgIFxmaQorICBcZmkKK1xmaQorCislIFBERiB1c2VzIFBvc3RTY3JpcHQgc3RyaW5nIGNvbnN0YW50cyBmb3IgdGhlIG5hbWVzIG9mIHhyZWYgdGFyZ2V0cywKKyUgZm9yIGRpc3BsYXkgaW4gdGhlIG91dGxpbmVzLCBhbmQgaW4gb3RoZXIgcGxhY2VzLiAgVGh1cywgd2UgaGF2ZSB0bworJSBkb3VibGUgYW55IGJhY2tzbGFzaGVzLiAgT3RoZXJ3aXNlLCBhIG5hbWUgbGlrZSAiXG5vZGUiIHdpbGwgYmUKKyUgaW50ZXJwcmV0ZWQgYXMgYSBuZXdsaW5lIChcbiksIGZvbGxvd2VkIGJ5IG8sIGQsIGUuICBOb3QgZ29vZC4KKyUgaHR0cDovL3d3dy5udGcubmwvcGlwZXJtYWlsL250Zy1wZGZ0ZXgvMjAwNC1KdWx5LzAwMDY1NC5odG1sCislIChhbmQgcmVsYXRlZCBtZXNzYWdlcywgdGhlIGZpbmFsIG91dGNvbWUgaXMgdGhhdCBpdCBpcyB1cCB0byB0aGUgVGVYCislIHVzZXIgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXJ3aXNlIG1ha2UgdGhlIHN0cmluZyB2YWxpZCwgc28KKyUgdGhhdCdzIHdoYXQgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislIAore1xjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaGRvdWJsZXslCisgICBAY2F0Y29kZWBAXD1AYWN0aXZlCisgICBAbGV0XD1AZG91YmxlYmFja3NsYXNofQorfQorCislIFRvIGhhbmRsZSBwYXJlbnMsIHdlIG11c3QgYWRvcHQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIHNpbmNlIHBhcmVucyBhcmUKKyUgbm90IGFjdGl2ZSBjaGFyYWN0ZXJzLiAgaHlwZXJyZWYuZHR4ICh3aGljaCBoYXMgdGhlIHNhbWUgcHJvYmxlbSBhcworJSB1cykgaGFuZGxlcyBpdCB3aXRoIHRoaXMgYW1hemluZyBtYWNybyB0byByZXBsYWNlIHRva2Vucy4gIEkndmUKKyUgdGlua2VyZWQgd2l0aCBpdCBhIGxpdHRsZSBmb3IgdGV4aW5mbywgYnV0IGl0J3MgZGVmaW5pdGVseSBmcm9tIHRoZXJlLgorJSAKKyUgIzEgaXMgdGhlIHRva2VucyB0byByZXBsYWNlLgorJSAjMiBpcyB0aGUgcmVwbGFjZW1lbnQuCislICMzIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdpdGggdGhlIHN0cmluZy4KKyUgCitcZGVmXEh5UHNkU3Vic3QjMSMyIzN7JQorICBcZGVmXEh5UHNkUmVwbGFjZSMjMSMxIyMyXEVORHslCisgICAgIyMxJQorICAgIFxpZnhcXCMjMlxcJQorICAgIFxlbHNlCisgICAgICAjMiUKKyAgICAgIFxIeVJldHVybkFmdGVyRml7JQorICAgICAgICBcSHlQc2RSZXBsYWNlIyMyXEVORAorICAgICAgfSUKKyAgICBcZmkKKyAgfSUKKyAgXHhkZWYjM3tcZXhwYW5kYWZ0ZXJcSHlQc2RSZXBsYWNlIzMjMVxFTkR9JQorfQorXGxvbmdcZGVmXEh5UmV0dXJuQWZ0ZXJGaSMxXGZpe1xmaSMxfQorCislICMxIGlzIGEgY29udHJvbCBzZXF1ZW5jZSBpbiB3aGljaCB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorXGRlZlxiYWNrc2xhc2hwYXJlbnMjMXslCisgIFx4ZGVmIzF7IzF9JSByZWRlZmluZSBpdCBhcyBpdHMgZXhwYW5zaW9uOyB0aGUgZGVmaW5pdGlvbiBpcyBzaW1wbHkKKyAgICAgICAgICAgICAlIFxsYXN0bm9kZSB3aGVuIGNhbGxlZCBmcm9tIFxzZXRyZWYgLT4gXHBkZm1rZGVzdC4KKyAgXEh5UHNkU3Vic3R7KH17XHJlYWxiYWNrc2xhc2gofXsjMX0lCisgIFxIeVBzZFN1YnN0eyl9e1xyZWFsYmFja3NsYXNoKX17IzF9JQorfQorCitcaWZwZGYKKyAgXGlucHV0IHBkZmNvbG9yCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9JQorICBcZGVmXGRvcGRmaW1hZ2UjMSMyIzN7JQorICAgIFxkZWZcaW1hZ2V3aWR0aHsjMn0lCisgICAgXGRlZlxpbWFnZWhlaWdodHsjM30lCisgICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICAlIGluY2x1ZGVkIHR3aWNlLiAgKFZlcnNpb24gMy4xNDE1OS1wcmUtMS4wLXVub2ZmaWNpYWwtMjAwMTA3MDQuKQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICAgIFxpbW1lZGlhdGVccGRmaW1hZ2UKKyAgICBcZWxzZQorICAgICAgXGltbWVkaWF0ZVxwZGZ4aW1hZ2UKKyAgICBcZmkKKyAgICAgIFxpZnhcZW1wdHlcaW1hZ2V3aWR0aFxlbHNlIHdpZHRoIFxpbWFnZXdpZHRoIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZWhlaWdodFxlbHNlIGhlaWdodCBcaW1hZ2VoZWlnaHQgXGZpCisgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMworICAgICAgICAgIzEucGRmJQorICAgICAgIFxlbHNlCisgICAgICAgICB7IzEucGRmfSUKKyAgICAgICBcZmkKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0IFxlbHNlCisgICAgICBccGRmcmVmeGltYWdlIFxwZGZsYXN0eGltYWdlCisgICAgXGZpfQorICBcZGVmXHBkZm1rZGVzdCMxe3slCisgICAgJSBXZSBoYXZlIHRvIHNldCBkdW1taWVzIHNvIGNvbW1hbmRzIHN1Y2ggYXMgQGNvZGUsIGFuZCBjaGFyYWN0ZXJzCisgICAgJSBzdWNoIGFzIFwsIGFyZW4ndCBleHBhbmRlZCB3aGVuIHByZXNlbnQgaW4gYSBzZWN0aW9uIHRpdGxlLgorICAgIFxhdGR1bW1pZXMKKyAgICBcYWN0aXZlYmFja3NsYXNoZG91YmxlCisgICAgXGRlZlxwZGZkZXN0bmFtZXsjMX0lCisgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZkZXN0bmFtZQorICAgIFxwZGZkZXN0IG5hbWV7XHBkZmRlc3RuYW1lfSB4eXolCisgIH19JQorICAlCisgICUgdXNlZCB0byBtYXJrIHRhcmdldCBuYW1lczsgbXVzdCBiZSBleHBhbmRhYmxlLgorICBcZGVmXHBkZm1rcGduIzF7IzF9JQorICAlCisgIFxsZXRcbGlua2NvbG9yID0gXEJsdWUgICUgd2FzIEN5YW4sIGJ1dCB0aGF0IHNlZW1zIGxpZ2h0PworICBcZGVmXGVuZGxpbmt7XEJsYWNrXHBkZmVuZGxpbmt9CisgICUgQWRkaW5nIG91dGxpbmVzIHRvIFBERjsgbWFjcm9zIGZvciBjYWxjdWxhdGluZyBzdHJ1Y3R1cmUgb2Ygb3V0bGluZXMKKyAgJSBjb21lIGZyb20gUGV0ciBPbHNhaworICBcZGVmXGV4cG51bWJlciMxe1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIzFcZW5kY3NuYW1lXHJlbGF4IDAlCisgICAgXGVsc2UgXGNzbmFtZSMxXGVuZGNzbmFtZSBcZml9CisgIFxkZWZcYWR2YW5jZW51bWJlciMxe1x0ZW1wbnVtPVxleHBudW1iZXJ7IzF9XHJlbGF4CisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFcZW5kY3NuYW1le1x0aGVcdGVtcG51bX19CisgICUKKyAgJSAjMSBpcyB0aGUgc2VjdGlvbiB0ZXh0LCB3aGljaCBpcyB3aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorICAlIG91dGxpbmUgYnkgdGhlIHBkZiB2aWV3ZXIuICAjMiBpcyB0aGUgcGRmIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIKKyAgJSBvZiBzdWJlbnRyaWVzIChvciBlbXB0eSwgZm9yIHN1YnN1YnNlY3Rpb25zKS4gICMzIGlzIHRoZSBub2RlIHRleHQsCisgICUgd2hpY2ggbWlnaHQgYmUgZW1wdHkgaWYgdGhpcyB0b2MgZW50cnkgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZS4KKyAgJSAjNCBpcyB0aGUgcGFnZSBudW1iZXIKKyAgJQorICBcZGVmXGRvcGRmb3V0bGluZSMxIzIjMyM0eyUKKyAgICAlIEdlbmVyYXRlIGEgbGluayB0byB0aGUgbm9kZSB0ZXh0IGlmIHRoYXQgZXhpc3RzOyBlbHNlLCB1c2UgdGhlCisgICAgJSBwYWdlIG51bWJlci4gIFdlIGNvdWxkIGdlbmVyYXRlIGEgZGVzdGluYXRpb24gZm9yIHRoZSBzZWN0aW9uCisgICAgJSB0ZXh0IGluIHRoZSBjYXNlIHdoZXJlIGEgc2VjdGlvbiBoYXMgbm8gbm9kZSwgYnV0IGl0IGRvZXNuJ3QKKyAgICAlIHNlZW0gd29ydGggdGhlIHRyb3VibGUsIHNpbmNlIG1vc3QgZG9jdW1lbnRzIGFyZSBub3JtYWxseSBzdHJ1Y3R1cmVkLgorICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgIFxpZnhccGRmb3V0bGluZWRlc3RcZW1wdHkKKyAgICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzR9JQorICAgIFxlbHNlCisgICAgICAlIERvdWJsZWQgYmFja3NsYXNoZXMgaW4gdGhlIG5hbWUuCisgICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5lZGVzdH0lCisgICAgXGZpCisgICAgJQorICAgICUgQWxzbyBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGluIHRoZSBkaXNwbGF5IHN0cmluZy4KKyAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5ldGV4dHsjMX0lCisgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZXRleHR9JQorICAgICUKKyAgICBccGRmb3V0bGluZSBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZvdXRsaW5lZGVzdH19IzJ7XHBkZm91dGxpbmV0ZXh0fSUKKyAgfQorICAlCisgIFxkZWZccGRmbWFrZW91dGxpbmVzeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBUaGFuaCdzIGhhY2sgLyBwcm9wZXIgYnJhY2VzIGluIGJvb2ttYXJrcworICAgICAgXGVkZWZcbXlsYnJhY2V7XGlmdHJ1ZSBcc3RyaW5ne1xlbHNlfVxmaX1cbGV0XHs9XG15bGJyYWNlCisgICAgICBcZWRlZlxteXJicmFjZXtcaWZmYWxzZXtcZWxzZVxzdHJpbmd9XGZpfVxsZXRcfT1cbXlyYnJhY2UKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2lsZW50bHksIHRvIGdldCBjb3VudHMgb2Ygc3ViZW50cmllcyBmb3IgXHBkZm91dGxpbmUuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisJXGRlZlx0aGlzY2hhcG51bXsjIzJ9JQorCVxkZWZcdGhpc3NlY251bXswfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7Y2hhcFx0aGlzY2hhcG51bX0lCisJXGRlZlx0aGlzc2VjbnVteyMjMn0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3NlY1x0aGlzc2VjbnVtfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17IyMyfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzdWJzZWNcdGhpc3N1YnNlY251bX0lCisgICAgICB9JQorICAgICAgXGRlZlx0aGlzY2hhcG51bXswfSUKKyAgICAgIFxkZWZcdGhpc3NlY251bXswfSUKKyAgICAgIFxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgICUKKyAgICAgICUgdXNlIFxkZWYgcmF0aGVyIHRoYW4gXGxldCBoZXJlIGJlY2F1c2Ugd2UgcmVkZWZpbmUgXGNoYXBlbnRyeSBldAorICAgICAgJSBhbC4gYSBzZWNvbmQgdGltZSwgYmVsb3cuCisgICAgICBcZGVmXGFwcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlxhcHBzZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5jaGFwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXHVubnNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBccmVhZGRhdGFmaWxle3RvY30lCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNlY29uZCB0aW1lLCB0aGlzIHRpbWUgYWN0dWFsbHkgcHJvZHVjaW5nIHRoZSBvdXRsaW5lcy4KKyAgICAgICUgVGhlIGAtJyBtZWFucyB0YWtlIHRoZSBcZXhwbnVtYmVyIGFzIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YKKyAgICAgICUgc3ViZW50cmllcywgd2hpY2ggd2UgY2FsY3VsYXRlZCBvbiBvdXIgZmlyc3QgcmVhZCBvZiB0aGUgLnRvYyBhYm92ZS4KKyAgICAgICUKKyAgICAgICUgV2UgdXNlIHRoZSBub2RlIG5hbWVzIGFzIHRoZSBkZXN0aW5hdGlvbnMuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye2NoYXAjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3NlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c3Vic2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JSBjb3VudCBpcyBhbHdheXMgemVybworICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17fXsjIzN9eyMjNH19JQorICAgICAgJQorICAgICAgJSBQREYgb3V0bGluZXMgYXJlIGRpc3BsYXllZCB1c2luZyBzeXN0ZW0gZm9udHMsIGluc3RlYWQgb2YKKyAgICAgICUgZG9jdW1lbnQgZm9udHMuICBUaGVyZWZvcmUgd2UgY2Fubm90IHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAlIHNpbmNlIHRoZSBlbmNvZGluZyBpcyB1bmtub3duLiAgRm9yIGV4YW1wbGUsIHRoZSBlb2dvbmVrIGZyb20KKyAgICAgICUgTGF0aW4gMiAoMHhlYSkgZ2V0cyB0cmFuc2xhdGVkIHRvIGEgfCBjaGFyYWN0ZXIuICBJbmZvIGZyb20KKyAgICAgICUgU3Rhc3playBXYXdyeWtpZXdpY3osIDE5IEphbiAyMDA0IDA0OjA5OjI0ICswMTAwLgorICAgICAgJQorICAgICAgJSB4eCB0byBkbyB0aGlzIHJpZ2h0LCB3ZSBoYXZlIHRvIHRyYW5zbGF0ZSA4LWJpdCBjaGFyYWN0ZXJzIHRvCisgICAgICAlIHRoZWlyICJiZXN0IiBlcXVpdmFsZW50LCBiYXNlZCBvbiB0aGUgQGRvY3VtZW50ZW5jb2RpbmcuICBSaWdodAorICAgICAgJSBub3csIEkgZ3Vlc3Mgd2UnbGwganVzdCBsZXQgdGhlIHBkZiByZWFkZXIgaGF2ZSBpdHMgd2F5LgorICAgICAgXGluZGV4bm9mb250cworICAgICAgXHNldHVwZGF0YWZpbGUKKyAgICAgIFxjYXRjb2RlYFxcPVxhY3RpdmUgXG90aGVyYmFja3NsYXNoCisgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgXGVuZGdyb3VwCisgIH0KKyAgJQorICBcZGVmXHNraXBzcGFjZXMjMXtcZGVmXFBQeyMxfVxkZWZcRHt8fSUKKyAgICBcaWZ4XFBQXERcbGV0XG5leHRzcFxyZWxheAorICAgIFxlbHNlXGxldFxuZXh0c3Bcc2tpcHNwYWNlcworICAgICAgXGlmeFxwXHNwYWNlXGVsc2VcYWRkdG9rZW5ze1xmaWxlbmFtZX17XFBQfSUKKyAgICAgICAgXGFkdmFuY2VcZmlsZW5hbWVsZW5ndGggYnkgMQorICAgICAgXGZpCisgICAgXGZpCisgICAgXG5leHRzcH0KKyAgXGRlZlxnZXRmaWxlbmFtZSMxe1xmaWxlbmFtZWxlbmd0aD0wXGV4cGFuZGFmdGVyXHNraXBzcGFjZXMjMXxccmVsYXh9CisgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZmFubm90bGluaworICBcZWxzZQorICAgIFxsZXQgXHN0YXJ0bGluayBccGRmc3RhcnRsaW5rCisgIFxmaQorICAlIG1ha2UgYSBsaXZlIHVybCBpbiBwZGYgb3V0cHV0LgorICBcZGVmXHBkZnVybCMxeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBpdCBzZWVtcyB3ZSByZWFsbHkgbmVlZCB5ZXQgYW5vdGhlciBzZXQgb2YgZHVtbWllczsgaGF2ZSBub3QKKyAgICAgICUgdHJpZWQgdG8gZmlndXJlIG91dCB3aGF0IGVhY2ggY29tbWFuZCBzaG91bGQgZG8gaW4gdGhlIGNvbnRleHQKKyAgICAgICUgb2YgQHVybC4gIGZvciBub3csIGp1c3QgbWFrZSBALyBhIG5vLW9wLCB0aGF0J3MgdGhlIG9ubHkgb25lCisgICAgICAlIHBlb3BsZSBoYXZlIGFjdHVhbGx5IHJlcG9ydGVkIGEgcHJvYmxlbSB3aXRoLgorICAgICAgJSAKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICAgICBcZGVmXEB7QH0lCisgICAgICBcbGV0XC89XGVtcHR5CisgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAgXGxlYXZldm1vZGVcUmVkCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxsaW5rY29sb3IgIzFcZW5kbGlua30KKyAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KK1xlbHNlCisgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQorICBcbGV0XHBkZnVybCA9IFxnb2JibGUKKyAgXGxldFxlbmRsaW5rID0gXHJlbGF4CisgIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CitcZmkgICUgXGlmeFxwZGZvdXRwdXQKKworCitcbWVzc2FnZXtmb250cyx9CisKKyUgQ2hhbmdlIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUgdG8gIzEsIHJlbWVtYmVyaW5nIGl0IGluIFxjdXJmb250c3R5bGUuCislIEZvciBub3csIHdlIGRvIG5vdCBhY2N1bXVsYXRlIGZvbnQgc3R5bGVzOiBAYntAaXtmb299fSBwcmludHMgZm9vIGluCislIGl0YWxpY3MsIG5vdCBib2xkIGl0YWxpY3MuCislCitcZGVmXHNldGZvbnRzdHlsZSMxeyUKKyAgXGRlZlxjdXJmb250c3R5bGV7IzF9JSBub3QgYXMgYSBjb250cm9sIHNlcXVlbmNlLCBiZWNhdXNlIHdlIGFyZSBcZWRlZidkLgorICBcY3NuYW1lIHRlbiMxXGVuZGNzbmFtZSAgJSBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udAorfQorCislIFNlbGVjdCAjMSBmb250cyB3aXRoIHRoZSBjdXJyZW50IHN0eWxlLgorJQorXGRlZlxzZWxlY3Rmb250cyMxe1xjc25hbWUgIzFmb250c1xlbmRjc25hbWUgXGNzbmFtZVxjdXJmb250c3R5bGVcZW5kY3NuYW1lfQorCitcZGVmXHJte1xmYW09MCBcc2V0Zm9udHN0eWxle3JtfX0KK1xkZWZcaXR7XGZhbT1caXRmYW0gXHNldGZvbnRzdHlsZXtpdH19CitcZGVmXHNse1xmYW09XHNsZmFtIFxzZXRmb250c3R5bGV7c2x9fQorXGRlZlxiZntcZmFtPVxiZmZhbSBcc2V0Zm9udHN0eWxle2JmfX1cZGVmXGJmc3R5bGVuYW1le2JmfQorXGRlZlx0dHtcZmFtPVx0dGZhbSBcc2V0Zm9udHN0eWxle3R0fX0KKworJSBUZXhpbmZvIHNvcnQgb2Ygc3VwcG9ydHMgdGhlIHNhbnMgc2VyaWYgZm9udCBzdHlsZSwgd2hpY2ggcGxhaW4gVGVYIGRvZXMgbm90LgorJSBTbyB3ZSBzZXQgdXAgYSBcc2YuCitcbmV3ZmFtXHNmZmFtCitcZGVmXHNme1xmYW09XHNmZmFtIFxzZXRmb250c3R5bGV7c2Z9fQorXGxldFxsaSA9IFxzZiAlIFNvbWV0aW1lcyB3ZSBjYWxsIGl0IFxsaSwgbm90IFxzZi4KKworJSBXZSBkb24ndCBuZWVkIG1hdGggZm9yIHRoaXMgZm9udCBzdHlsZS4KK1xkZWZcdHRzbHtcc2V0Zm9udHN0eWxle3R0c2x9fQorCislIERlZmF1bHQgbGVhZGluZy4KK1xuZXdkaW1lblx0ZXh0bGVhZGluZyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisKKyUgU2V0IHRoZSBiYXNlbGluZXNraXAgdG8gIzEsIGFuZCB0aGUgbGluZXNraXAgYW5kIHN0cnV0IHNpemUKKyUgY29ycmVzcG9uZGluZ2x5LiAgVGhlcmUgaXMgbm8gZGVlcCBtZWFuaW5nIGJlaGluZCB0aGVzZSBtYWdpYyBudW1iZXJzCislIHVzZWQgYXMgZmFjdG9yczsgdGhleSBqdXN0IG1hdGNoIChjbG9zZWx5IGVub3VnaCkgd2hhdCBLbnV0aCBkZWZpbmVkLgorJQorXGRlZlxsaW5lc2tpcGZhY3RvcnsuMDgzMzN9CitcZGVmXHN0cnV0aGVpZ2h0cGVyY2VudHsuNzA4MzN9CitcZGVmXHN0cnV0ZGVwdGhwZXJjZW50IHsuMjkxNjd9CislCitcZGVmXHNldGxlYWRpbmcjMXslCisgIFxub3JtYWxiYXNlbGluZXNraXAgPSAjMVxyZWxheAorICBcbm9ybWFsbGluZXNraXAgPSBcbGluZXNraXBmYWN0b3Jcbm9ybWFsYmFzZWxpbmVza2lwCisgIFxub3JtYWxiYXNlbGluZXMKKyAgXHNldGJveFxzdHJ1dGJveCA9XGhib3h7JQorICAgIFx2cnVsZSB3aWR0aDBwdCBoZWlnaHRcc3RydXRoZWlnaHRwZXJjZW50XGJhc2VsaW5lc2tpcAorICAgICAgICAgICAgICAgICAgICBkZXB0aCBcc3RydXRkZXB0aHBlcmNlbnQgXGJhc2VsaW5lc2tpcAorICB9JQorfQorCislIFNldCB0aGUgZm9udCBtYWNybyAjMSB0byB0aGUgZm9udCBuYW1lZCAjMiwgYWRkaW5nIG9uIHRoZQorJSBzcGVjaWZpZWQgZm9udCBwcmVmaXggKG5vcm1hbGx5IGBjbScpLgorJSAjMyBpcyB0aGUgZm9udCdzIGRlc2lnbiBzaXplLCAjNCBpcyBhIHNjYWxlIGZhY3RvcgorXGRlZlxzZXRmb250IzEjMiMzIzR7XGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0fQorCislIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KKyUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAorJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCitcaWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcZGVmXGZvbnRwcmVmaXh7Y219CitcZmkKKyUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCitcZGVmXHJtc2hhcGV7cn0KK1xkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXGJmc2hhcGV7Yn0KK1xkZWZcYnhzaGFwZXtieH0KK1xkZWZcdHRzaGFwZXt0dH0KK1xkZWZcdHRic2hhcGV7dHR9CitcZGVmXHR0c2xzaGFwZXtzbHR0fQorXGRlZlxpdHNoYXBle3RpfQorXGRlZlxpdGJzaGFwZXtieHRpfQorXGRlZlxzbHNoYXBle3NsfQorXGRlZlxzbGJzaGFwZXtieHNsfQorXGRlZlxzZnNoYXBle3NzfQorXGRlZlxzZmJzaGFwZXtzc30KK1xkZWZcc2NzaGFwZXtjc2N9CitcZGVmXHNjYnNoYXBle2NzY30KKworJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CitcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0XHR0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0aXRcaXRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzZlxzZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCisKKyUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KK1xzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGxldFx0ZW50dHNsPVxkZWZ0dHNsIFxiZn0KKworJSBGb250cyBmb3IgaW5kaWNlcywgZm9vdG5vdGVzLCBzbWFsbCBleGFtcGxlcyAoOXB0KS4KK1xkZWZcc21hbGxub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxzbWFsbHJtXHJtc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxiZlxiZnNoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2xcc2xzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNjXHNjc2hhcGV7MTB9ezkwMH0KK1xzZXRmb250XHNtYWxsdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH0KK1xmb250XHNtYWxsaT1jbW1pOQorXGZvbnRcc21hbGxzeT1jbXN5OQorCislIEZvbnRzIGZvciBzbWFsbCBleGFtcGxlcyAoOHB0KS4KK1xkZWZcc21hbGxlcm5vbWluYWxzaXplezhwdH0KK1xzZXRmb250XHNtYWxsZXJybVxybXNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVydHRcdHRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcmJmXGJmc2hhcGV7MTB9ezgwMH0KK1xzZXRmb250XHNtYWxsZXJpdFxpdHNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2xcc2xzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNmXHNmc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVydHRzbFx0dHNsc2hhcGV7MTB9ezgwMH0KK1xmb250XHNtYWxsZXJpPWNtbWk4CitcZm9udFxzbWFsbGVyc3k9Y21zeTgKKworJSBGb250cyBmb3IgdGl0bGUgcGFnZSAoMjAuNHB0KToKK1xkZWZcdGl0bGVub21pbmFsc2l6ZXsyMHB0fQorXHNldGZvbnRcdGl0bGVybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGV0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzZlxzZmJzaGFwZXsxN317XG1hZ3N0ZXAxfQorXGxldFx0aXRsZWJmPVx0aXRsZXJtCitcc2V0Zm9udFx0aXRsZXNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDR9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcYXV0aG9ycm17XHNlY3JtfQorXGRlZlxhdXRob3J0dHtcc2VjdHR9CisKKyUgQ2hhcHRlciAoYW5kIHVubnVtYmVyZWQpIGZvbnRzICgxNy4yOHB0KS4KK1xkZWZcY2hhcG5vbWluYWxzaXplezE3cHR9Citcc2V0Zm9udFxjaGFwcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXBpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDN9Citcc2V0Zm9udFxjaGFwdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXB0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezE3fXsxMDAwfQorXGxldFxjaGFwYmY9XGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDN9CitcZm9udFxjaGFwaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMgorXGZvbnRcY2hhcHN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAzCisKKyUgU2VjdGlvbiBmb250cyAoMTQuNHB0KS4KK1xkZWZcc2Vjbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XHNlY3JtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWNpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWN0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwMX0KK1xsZXRcc2VjYmZcc2Vjcm0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9CitcZm9udFxzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxzZWNzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMgorCislIFN1YnNlY3Rpb24gZm9udHMgKDEzLjE1cHQpLgorXGRlZlxzc2Vjbm9taW5hbHNpemV7MTNwdH0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMzE1fQorXGZvbnRcc3NlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcGhhbGYKK1xmb250XHNzZWNzeT1jbXN5MTAgc2NhbGVkIDEzMTUKKworJSBSZWR1Y2VkIGZvbnRzIGZvciBAYWNybyBpbiB0ZXh0ICgxMHB0KS4KK1xkZWZccmVkdWNlZG5vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dFx0dHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkaXRcaXRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzbFxzbHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNmXHNmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH0KK1xmb250XHJlZHVjZWRpPWNtbWkxMAorXGZvbnRccmVkdWNlZHN5PWNtc3kxMAorCislIEluIG9yZGVyIGZvciB0aGUgZm9udCBjaGFuZ2VzIHRvIGFmZmVjdCBtb3N0IG1hdGggc3ltYm9scyBhbmQgbGV0dGVycywKKyUgd2UgaGF2ZSB0byBkZWZpbmUgdGhlIFx0ZXh0Zm9udCBvZiB0aGUgc3RhbmRhcmQgZmFtaWxpZXMuICBTaW5jZQorJSB0ZXhpbmZvIGRvZXNuJ3QgYWxsb3cgZm9yIHByb2R1Y2luZyBzdWJzY3JpcHRzIGFuZCBzdXBlcnNjcmlwdHMgZXhjZXB0CislIGluIHRoZSBtYWluIHRleHQsIHdlIGRvbid0IGJvdGhlciB0byByZXNldCBcc2NyaXB0Zm9udCBhbmQKKyUgXHNjcmlwdHNjcmlwdGZvbnQgKHdoaWNoIHdvdWxkIGFsc28gcmVxdWlyZSBsb2FkaW5nIGEgbG90IG1vcmUgZm9udHMpLgorJQorXGRlZlxyZXNldG1hdGhmb250c3slCisgIFx0ZXh0Zm9udDA9XHRlbnJtIFx0ZXh0Zm9udDE9XHRlbmkgXHRleHRmb250Mj1cdGVuc3kKKyAgXHRleHRmb250XGl0ZmFtPVx0ZW5pdCBcdGV4dGZvbnRcc2xmYW09XHRlbnNsIFx0ZXh0Zm9udFxiZmZhbT1cdGVuYmYKKyAgXHRleHRmb250XHR0ZmFtPVx0ZW50dCBcdGV4dGZvbnRcc2ZmYW09XHRlbnNmCit9CisKKyUgVGhlIGZvbnQtY2hhbmdpbmcgY29tbWFuZHMgcmVkZWZpbmUgdGhlIG1lYW5pbmdzIG9mIFx0ZW5TVFlMRSwgaW5zdGVhZAorJSBvZiBqdXN0IFxTVFlMRS4gIFdlIGRvIHRoaXMgYmVjYXVzZSBcU1RZTEUgbmVlZHMgdG8gYWxzbyBzZXQgdGhlCislIGN1cnJlbnQgXGZhbSBmb3IgbWF0aCBtb2RlLiAgT3VyIFxTVFlMRSAoZS5nLiwgXHJtKSBjb21tYW5kcyBoYXJkd2lyZQorJSBcdGVuU1RZTEUgdG8gc2V0IHRoZSBjdXJyZW50IGZvbnQuCislCislIEVhY2ggZm9udC1jaGFuZ2luZyBjb21tYW5kIGFsc28gc2V0cyB0aGUgbmFtZXMgXGxzaXplIChvbmUgc2l6ZSBsb3dlcikKKyUgYW5kIFxsbGxzaXplICh0aHJlZSBzaXplcyBsb3dlcikuICBUaGVzZSByZWxhdGl2ZSBjb21tYW5kcyBhcmUgdXNlZCBpbgorJSB0aGUgTGFUZVggbG9nbyBhbmQgYWNyb255bXMuCislCislIFRoaXMgYWxsIG5lZWRzIGdlbmVyYWxpemluZywgYmFkbHkuCislCitcZGVmXHRleHRmb250c3slCisgIFxsZXRcdGVucm09XHRleHRybSBcbGV0XHRlbml0PVx0ZXh0aXQgXGxldFx0ZW5zbD1cdGV4dHNsCisgIFxsZXRcdGVuYmY9XHRleHRiZiBcbGV0XHRlbnR0PVx0ZXh0dHQgXGxldFxzbWFsbGNhcHM9XHRleHRzYworICBcbGV0XHRlbnNmPVx0ZXh0c2YgXGxldFx0ZW5pPVx0ZXh0aSBcbGV0XHRlbnN5PVx0ZXh0c3kKKyAgXGxldFx0ZW50dHNsPVx0ZXh0dHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RleHR9JQorICBcZGVmXGxzaXple3JlZHVjZWR9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfX0KK1xkZWZcdGl0bGVmb250c3slCisgIFxsZXRcdGVucm09XHRpdGxlcm0gXGxldFx0ZW5pdD1cdGl0bGVpdCBcbGV0XHRlbnNsPVx0aXRsZXNsCisgIFxsZXRcdGVuYmY9XHRpdGxlYmYgXGxldFx0ZW50dD1cdGl0bGV0dCBcbGV0XHNtYWxsY2Fwcz1cdGl0bGVzYworICBcbGV0XHRlbnNmPVx0aXRsZXNmIFxsZXRcdGVuaT1cdGl0bGVpIFxsZXRcdGVuc3k9XHRpdGxlc3kKKyAgXGxldFx0ZW50dHNsPVx0aXRsZXR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0aXRsZX0lCisgIFxkZWZcbHNpemV7Y2hhcH1cZGVmXGxsbHNpemV7c3Vic2VjfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezI1cHR9fQorXGRlZlx0aXRsZWZvbnQjMXt7XHRpdGxlZm9udHNccm0gIzF9fQorXGRlZlxjaGFwZm9udHN7JQorICBcbGV0XHRlbnJtPVxjaGFwcm0gXGxldFx0ZW5pdD1cY2hhcGl0IFxsZXRcdGVuc2w9XGNoYXBzbAorICBcbGV0XHRlbmJmPVxjaGFwYmYgXGxldFx0ZW50dD1cY2hhcHR0IFxsZXRcc21hbGxjYXBzPVxjaGFwc2MKKyAgXGxldFx0ZW5zZj1cY2hhcHNmIFxsZXRcdGVuaT1cY2hhcGkgXGxldFx0ZW5zeT1cY2hhcHN5CisgIFxsZXRcdGVudHRzbD1cY2hhcHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtjaGFwfSUKKyAgXGRlZlxsc2l6ZXtzZWN9XGRlZlxsbGxzaXple3RleHR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTlwdH19CitcZGVmXHNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc2Vjcm0gXGxldFx0ZW5pdD1cc2VjaXQgXGxldFx0ZW5zbD1cc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc2VjYmYgXGxldFx0ZW50dD1cc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNlY3NjCisgIFxsZXRcdGVuc2Y9XHNlY3NmIFxsZXRcdGVuaT1cc2VjaSBcbGV0XHRlbnN5PVxzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzZWN9JQorICBcZGVmXGxzaXple3N1YnNlY31cZGVmXGxsbHNpemV7cmVkdWNlZH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNnB0fX0KK1xkZWZcc3Vic2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzc2Vjcm0gXGxldFx0ZW5pdD1cc3NlY2l0IFxsZXRcdGVuc2w9XHNzZWNzbAorICBcbGV0XHRlbmJmPVxzc2VjYmYgXGxldFx0ZW50dD1cc3NlY3R0IFxsZXRcc21hbGxjYXBzPVxzc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc3NlY3NmIFxsZXRcdGVuaT1cc3NlY2kgXGxldFx0ZW5zeT1cc3NlY3N5CisgIFxsZXRcdGVudHRzbD1cc3NlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzc2VjfSUKKyAgXGRlZlxsc2l6ZXt0ZXh0fVxkZWZcbGxsc2l6ZXtzbWFsbH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNXB0fX0KK1xsZXRcc3Vic3Vic2VjZm9udHMgPSBcc3Vic2VjZm9udHMKK1xkZWZccmVkdWNlZGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1ccmVkdWNlZHJtIFxsZXRcdGVuaXQ9XHJlZHVjZWRpdCBcbGV0XHRlbnNsPVxyZWR1Y2Vkc2wKKyAgXGxldFx0ZW5iZj1ccmVkdWNlZGJmIFxsZXRcdGVudHQ9XHJlZHVjZWR0dCBcbGV0XHJlZHVjZWRjYXBzPVxyZWR1Y2Vkc2MKKyAgXGxldFx0ZW5zZj1ccmVkdWNlZHNmIFxsZXRcdGVuaT1ccmVkdWNlZGkgXGxldFx0ZW5zeT1ccmVkdWNlZHN5CisgIFxsZXRcdGVudHRzbD1ccmVkdWNlZHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtyZWR1Y2VkfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxybSBcbGV0XHRlbml0PVxzbWFsbGl0IFxsZXRcdGVuc2w9XHNtYWxsc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxiZiBcbGV0XHRlbnR0PVxzbWFsbHR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbHNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsc2YgXGxldFx0ZW5pPVxzbWFsbGkgXGxldFx0ZW5zeT1cc21hbGxzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZXJmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxsZXJybSBcbGV0XHRlbml0PVxzbWFsbGVyaXQgXGxldFx0ZW5zbD1cc21hbGxlcnNsCisgIFxsZXRcdGVuYmY9XHNtYWxsZXJiZiBcbGV0XHRlbnR0PVxzbWFsbGVydHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsZXJzYworICBcbGV0XHRlbnNmPVxzbWFsbGVyc2YgXGxldFx0ZW5pPVxzbWFsbGVyaSBcbGV0XHRlbnN5PVxzbWFsbGVyc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbGVydHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsZXJ9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7OS41cHR9fQorCislIFNldCB0aGUgZm9udHMgdG8gdXNlIHdpdGggdGhlIEBzbWFsbC4uLiBlbnZpcm9ubWVudHMuCitcbGV0XHNtYWxsZXhhbXBsZWZvbnRzID0gXHNtYWxsZm9udHMKKworJSBBYm91dCBcc21hbGxleGFtcGxlZm9udHMuICBJZiB3ZSB1c2UgXHNtYWxsZm9udHMgKDlwdCksIEBzbWFsbGV4YW1wbGUKKyUgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9ODYgICBzbWFsbGJvb2s9NzIgIGE0PTkwICBhNT02OQorJSBJZiB3ZSB1c2UgXHNjcmlwdGZvbnRzICg4cHQpLCB0aGVuIHdlIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTkwKyAgc21hbGxib29rPTgwICBhND05MCsgIGE1PTc3CislIEZvciBtZSwgc3ViamVjdGl2ZWx5LCB0aGUgZmV3IGV4dHJhIGNoYXJhY3RlcnMgdGhhdCBmaXQgYXJlbid0IHdvcnRoCislIHRoZSBhZGRpdGlvbmFsIHNtYWxsbmVzcyBvZiA4cHQuICBTbyBJJ20gbWFraW5nIHRoZSBkZWZhdWx0IDlwdC4KKyUKKyUgQnkgdGhlIHdheSwgZm9yIGNvbXBhcmlzb24sIGhlcmUncyB3aGF0IGZpdHMgd2l0aCBAZXhhbXBsZSAoMTBwdCk6CislICAgOC41eDExPTcxICBzbWFsbGJvb2s9NjAgIGE0PTc1ICBhNT01OAorJQorJSBJIHdpc2ggdGhlIFVTQSB1c2VkIEE0IHBhcGVyLgorJSAtLWthcmwsIDI0amFuMDMuCisKKworJSBTZXQgdXAgdGhlIGRlZmF1bHQgZm9udHMsIHNvIHdlIGNhbiB1c2UgdGhlbSBmb3IgY3JlYXRpbmcgYm94ZXMuCislCitcdGV4dGZvbnRzIFxybQorCislIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSBGb250cyBmb3Igc2hvcnQgdGFibGUgb2YgY29udGVudHMuCitcc2V0Zm9udFxzaG9ydGNvbnRybVxybXNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250YmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udHR0XHR0c2hhcGV7MTJ9ezEwMDB9CisKKyUlIEFkZCBzY3JpYmUtbGlrZSBmb250IGVudmlyb25tZW50cywgcGx1cyBAbCBmb3IgaW5saW5lIGxpc3AgKHVzdWFsbHkgc2FucworJSUgc2VyaWYpIGFuZCBAaWkgZm9yIFRlWCBpdGFsaWMKKworJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgorJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCitcZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKKyAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KK1xkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLgorJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCitcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CislIHR0c2wgZm9yIGJvb2sgdGl0bGVzLCBkbyB3ZT8KK1xkZWZcY2l0ZSMxe3tcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworXGxldFxpPVxzbWFydGl0YWxpYworXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBAYiwgZXhwbGljaXQgYm9sZC4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjaGFyZGVmXGNvbG9uQ2hhciA9IGBcOgorXGNoYXJkZWZcY29tbWFDaGFyID0gYFwsCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGV4Y2xhbUNoYXI9IGBcIQorXGNoYXJkZWZccXVlc3RDaGFyID0gYFw/CitcY2hhcmRlZlxzZW1pQ2hhciAgPSBgXDsKKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxudWxsCit9CitcZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Citcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9CitcZm9udFxrZXlzeT1jbXN5OQorXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCisgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKKyAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAorICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKKyAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorJSBUaGUgb2xkIGRlZmluaXRpb24sIHdpdGggbm8gbG96ZW5nZToKKyVcZGVmXGtleSAjMXt7XHR0c2wgXG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9CitcZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CisKKyUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgorXGxldFxmaWxlPVxzYW1wCitcbGV0XG9wdGlvbj1cc2FtcAorCislIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAorJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCitcZGVmXHRjbG9zZSMxeyUKKyAgeyUKKyAgICAlIENoYW5nZSBub3JtYWwgaW50ZXJ3b3JkIHNwYWNlIHRvIGJlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IGZvbnQuCisgICAgXHNwYWNlc2tpcCA9IFxmb250ZGltZW4yXGZvbnQKKyAgICAlCisgICAgJSBTd2l0Y2ggdG8gdHlwZXdyaXRlci4KKyAgICBcdHQKKyAgICAlCisgICAgJSBCdXQgYFwgJyBwcm9kdWNlcyB0aGUgbGFyZ2UgdHlwZXdyaXRlciBpbnRlcndvcmQgc3BhY2UuCisgICAgXGRlZlwge3tcc3BhY2Vza2lwID0gMHB0e30gfX0lCisgICAgJQorICAgICUgVHVybiBvZmYgaHlwaGVuYXRpb24uCisgICAgXG5vaHlwaGVuYXRpb24KKyAgICAlCisgICAgXHJhd2JhY2tzbGFzaAorICAgIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgICAjMSUKKyAgfSUKKyAgXG51bGwKK30KKworJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBAY29kZS4KKyUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKKyUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCisKKyUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKKyUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCislIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCislIGFuZCBhcnJhbmdlIGV4cGxpY2l0bHkgdG8gaHlwaGVuYXRlIGF0IGEgZGFzaC4KKyUgIC0tIHJtcy4KK3sKKyAgXGNhdGNvZGVgXC09XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFwtPVxhY3RpdmUgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcaWZhbGxvd2NvZGVicmVha3MKKyAgICAgXGxldC1cY29kZWRhc2gKKyAgICAgXGxldF9cY29kZXVuZGVyCisgICAgXGVsc2UKKyAgICAgXGxldC1ccmVhbGRhc2gKKyAgICAgXGxldF9ccmVhbHVuZGVyCisgICAgXGZpCisgICAgXGNvZGV4CisgIH0KK30KKworXGRlZlxyZWFsZGFzaHstfQorXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CitcZGVmXGNvZGV1bmRlcnslCisgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCisgICUgaXMgImFjdGl2ZSIgKG1hdGhjb2RlIjgwMDApIGFuZCBcbm9ybWFsdW5kZXJzY29yZSAob3IgXGNoYXI5NSwgZXRjLikKKyAgJSB3aWxsIHRoZXJlZm9yZSBleHBhbmQgdGhlIGFjdGl2ZSBkZWZpbml0aW9uIG9mIF8sIHdoaWNoIGlzIHVzCisgICUgKGluc2lkZSBAY29kZSB0aGF0IGlzKSwgdGhlcmVmb3JlIGFuIGVuZGxlc3MgbG9vcC4KKyAgXGlmdXNpbmd0dHtcaWZtbW9kZQorICAgICAgICAgICAgICAgXG1hdGhjaGFyIjA3NUYgJSBjbGFzcyAwPW9yZGluYXJ5LCBmYW1pbHkgNz10dGZhbSwgcG9zIDB4NUY9Xy4KKyAgICAgICAgICAgICBcZWxzZVxub3JtYWx1bmRlcnNjb3JlIFxmaQorICAgICAgICAgICAgIFxkaXNjcmV0aW9uYXJ5e317fXt9fSUKKyAgICAgICAgICAgIHtcX30lCit9CitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCislIEFuIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uOiB0aGUgYWJvdmUgd2lsbCBhbGxvdyBicmVha3MgYWZ0ZXIsIGUuZy4sCislIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgdW5kZXNpcmFibGUgaW4KKyUgc29tZSBtYW51YWxzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBsb25nIGlkZW50aWZpZXJzIGluCislIGdlbmVyYWwuICBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyUgCitcbmV3aWZcaWZhbGxvd2NvZGVicmVha3MgIFxhbGxvd2NvZGVicmVha3N0cnVlCisKK1xkZWZca2V5d29yZHRydWV7dHJ1ZX0KK1xkZWZca2V5d29yZGZhbHNle2ZhbHNlfQorCitccGFyc2VhcmdkZWZcYWxsb3djb2RlYnJlYWtzeyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1xrZXl3b3JkdHJ1ZQorICAgIFxhbGxvd2NvZGVicmVha3N0cnVlCisgIFxlbHNlXGlmeFx0eGlhcmdca2V5d29yZGZhbHNlCisgICAgXGFsbG93Y29kZWJyZWFrc2ZhbHNlCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBhbGxvd2NvZGVicmVha3Mgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaQorfQorCislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCisKKyUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCislICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCislICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCitccGFyc2VhcmdkZWZca2JkaW5wdXRzdHlsZXslCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdcd29yZGRpc3RpbmN0CisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHRzbH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGV4YW1wbGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGNvZGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHR9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAa2JkaW5wdXRzdHlsZSBvcHRpb24gYFx0eGlhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KK1xkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KK1xkZWZcd29yZGNvZGV7Y29kZX0KKworJSBEZWZhdWx0IGlzIGBkaXN0aW5jdC4nCitca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAorCitcZGVmXHhrZXl7XGtleX0KK1xkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKK1xpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKK1xlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaX0KKworJSBGb3IgQGluZGljYXRldXJsLCBAZW52LCBAY29tbWFuZCBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwgc28gdXNlIFxjb2RlLgorXGxldFxpbmRpY2F0ZXVybD1cY29kZQorXGxldFxlbnY9XGNvZGUKK1xsZXRcY29tbWFuZD1cY29kZQorCislIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQorJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAorJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCislIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLiAgUGVyaGFwcyBldmVudHVhbGx5IHB1dCBpbgorJSBhIGh5cGVydGV4IFxzcGVjaWFsIGhlcmUuCislCitcZGVmXHVyZWYjMXtcZG91cmVmICMxLCwsXGZpbmlzaH0KK1xkZWZcZG91cmVmIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBccGRmdXJseyMxfSUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFx1bmhib3gwICUgdGhpcmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgdGhhdAorICBcZWxzZQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMCA+IDBwdAorICAgICAgXGlmcGRmCisgICAgICAgIFx1bmhib3gwICAgICAgICAgICAgICUgUERGOiAybmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgaXQKKyAgICAgIFxlbHNlCisgICAgICAgIFx1bmhib3gwXCAoXGNvZGV7IzF9KSUgRFZJOiAybmQgYXJnIGdpdmVuLCBzaG93IGJvdGggaXQgYW5kIHVybAorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxjb2RleyMxfSUgb25seSB1cmwgZ2l2ZW4sIHNvIHNob3cgaXQKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgQHVybCBzeW5vbnltIGZvciBAdXJlZiwgc2luY2UgdGhhdCdzIGhvdyBldmVyeW9uZSB1c2VzIGl0LgorJQorXGxldFx1cmw9XHVyZWYKKworJSBybXMgZG9lcyBub3QgbGlrZSBhbmdsZSBicmFja2V0cyAtLWthcmwsIDE3bWF5OTcuCislIFNvIG5vdyBAZW1haWwgaXMganVzdCBsaWtlIEB1cmVmLCB1bmxlc3Mgd2UgYXJlIHBkZi4KKyUKKyVcZGVmXGVtYWlsIzF7XGFuZ2xlbGVmdHtcdHQgIzF9XGFuZ2xlcmlnaHR9CitcaWZwZGYKKyAgXGRlZlxlbWFpbCMxe1xkb2VtYWlsIzEsLFxmaW5pc2h9CisgIFxkZWZcZG9lbWFpbCMxLCMyLCMzXGZpbmlzaHtcYmVnaW5ncm91cAorICAgIFx1bnNlcHNwYWNlcworICAgIFxwZGZ1cmx7bWFpbHRvOiMxfSUKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDA+MHB0XHVuaGJveDBcZWxzZVxjb2RleyMxfVxmaQorICAgIFxlbmRsaW5rCisgIFxlbmRncm91cH0KK1xlbHNlCisgIFxsZXRcZW1haWw9XHVyZWYKK1xmaQorCislIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCislIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCislIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCislIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZm1vbm9zcGFjZXtcaWZkaW1cZm9udGRpbWVuM1xmb250PTBwdCB9CisKKyUgVHlwZXNldCBhIGRpbWVuc2lvbiwgZS5nLiwgYGluJyBvciBgcHQnLiAgVGhlIG9ubHkgcmVhc29uIGZvciB0aGUKKyUgYXJndW1lbnQgaXMgdG8gbWFrZSB0aGUgaW5wdXQgbG9vayByaWdodDogQGRtbntwdH0gaW5zdGVhZCBvZiBAZG1ue31wdC4KKyUKK1xkZWZcZG1uIzF7XHRoaW5zcGFjZSAjMX0KKworXGRlZlxrYmQjMXtcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfQorCislIEBsIHdhcyBuZXZlciBkb2N1bWVudGVkIHRvIG1lYW4gYGBzd2l0Y2ggdG8gdGhlIExpc3AgZm9udCcnLAorJSBhbmQgaXQgaXMgbm90IHVzZWQgYXMgc3VjaCBpbiBhbnkgbWFudWFsIEkgY2FuIGZpbmQuICBXZSBuZWVkIGl0IGZvcgorJSBQb2xpc2ggc3VwcHJlc3NlZC1sLiAgLS1rYXJsLCAyMnNlcDk2LgorJVxkZWZcbCMxe3tcbGkgIzF9XG51bGx9CisKKyUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgorXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKK1xkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAorXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250CisKKyUgQGFjcm9ueW0gZm9yICJGQkkiLCAiTkFUTyIsIGFuZCB0aGUgbGlrZS4KKyUgV2UgcHJpbnQgdGhpcyBvbmUgcG9pbnQgc2l6ZSBzbWFsbGVyLCBzaW5jZSBpdCdzIGludGVuZGVkIGZvcgorJSBhbGwtdXBwZXJjYXNlLgorJSAKK1xkZWZcYWNyb255bSMxe1xkb2Fjcm9ueW0gIzEsLFxmaW5pc2h9CitcZGVmXGRvYWNyb255bSMxLCMyLCMzXGZpbmlzaHslCisgIHtcc2VsZWN0Zm9udHNcbHNpemUgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBhYmJyIGZvciAiQ29tcHV0LiBKLiIgYW5kIHRoZSBsaWtlLgorJSBObyBmb250IGNoYW5nZSwgYnV0IGRvbid0IGRvIGVuZC1vZi1zZW50ZW5jZSBzcGFjaW5nLgorJSAKK1xkZWZcYWJiciMxe1xkb2FiYnIgIzEsLFxmaW5pc2h9CitcZGVmXGRvYWJiciMxLCMyLCMzXGZpbmlzaHslCisgIHtccGxhaW5mcmVuY2hzcGFjaW5nICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLCB3aGljaCBLbnV0aCBwdXQgaW4gdGhlIENNIGl0YWxpYyBmb250LgorJQorXGRlZlxwb3VuZHN7e1xpdFwkfX0KKworJSBAZXVyb3t9IGNvbWVzIGZyb20gYSBzZXBhcmF0ZSBmb250LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3R5bGUuCislIFdlIHVzZSB0aGUgZnJlZSBmZXltKiBmb250cyBmcm9tIHRoZSBldXJvc3ltIHBhY2thZ2UgYnkgSGVucmlrCislIFRoZWlsaW5nLCB3aGljaCBzdXBwb3J0IHJlZ3VsYXIsIHNsYW50ZWQsIGJvbGQgYW5kIGJvbGQgc2xhbnRlZCAoYW5kCislICJvdXRsaW5lZCIgKGJsYWNrYm9hcmQgYm9hcmQsIHNvcnQgb2YpIHZlcnNpb25zLCB3aGljaCB3ZSBkb24ndCBuZWVkKS4KKyUgSXQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9mb250cy9ldXJvc3ltLgorJSAKKyUgQWx0aG91Z2ggb25seSByZWd1bGFyIGlzIHRoZSB0cnVseSBvZmZpY2lhbCBFdXJvIHN5bWJvbCwgd2UgaWdub3JlCislIHRoYXQuICBUaGUgRXVybyBpcyBkZXNpZ25lZCB0byBiZSBzbGlnaHRseSB0YWxsZXIgdGhhbiB0aGUgcmVndWxhcgorJSBmb250IGhlaWdodC4KKyUgCislIGZleW1yIC0gcmVndWxhcgorJSBmZXltbyAtIHNsYW50ZWQKKyUgZmV5YnIgLSBib2xkCislIGZleWJvIC0gYm9sZCBzbGFudGVkCislIAorJSBUaGVyZSBpcyBubyBnb29kIChmcmVlKSB0eXBld3JpdGVyIHZlcnNpb24sIHRvIG15IGtub3dsZWRnZS4KKyUgQSBmZXltcjEwIGV1cm8gaXMgfjcuM3B0IHdpZGUsIHdoaWxlIGEgbm9ybWFsIGNtdHQxMCBjaGFyIGlzIH41LjI1cHQgd2lkZS4KKyUgSG1tLgorJSAKKyUgQWxzbyBkb2Vzbid0IHdvcmsgaW4gbWF0aC4gIERvIHdlIG5lZWQgdG8gZG8gbWF0aCB3aXRoIGV1cm8gc3ltYm9scz8KKyUgSG9wZSBub3QuCislIAorJSAKK1xkZWZcZXVyb3t7XGV1cm9mb250IGV9fQorXGRlZlxldXJvZm9udHslCisgICUgV2Ugc2V0IHRoZSBmb250IGF0IGVhY2ggY29tbWFuZCwgcmF0aGVyIHRoYW4gcHJlZGVmaW5pbmcgaXQgaW4KKyAgJSBcdGV4dGZvbnRzIGFuZCB0aGUgb3RoZXIgZm9udC1zd2l0Y2hpbmcgY29tbWFuZHMsIHNvIHRoYXQKKyAgJSBpbnN0YWxsYXRpb25zIHdoaWNoIG5ldmVyIG5lZWQgdGhlIHN5bWJvbCBkb24ndCBoYXZlIHRvIGhhdmUgdGhlCisgICUgZm9udCBpbnN0YWxsZWQuCisgICUgCisgICUgVGhlcmUgaXMgb25seSBvbmUgZGVzaWduZWQgc2l6ZSAobm9taW5hbCAxMHB0KSwgc28gd2UgYWx3YXlzIHNjYWxlCisgICUgdGhhdCB0byB0aGUgY3VycmVudCBub21pbmFsIHNpemUuCisgICUgCisgICUgQnkgdGhlIHdheSwgc2ltcGx5IHVzaW5nICJhdCAxZW0iIHdvcmtzIGZvciBjbXIxMCBhbmQgdGhlIGxpa2UsIGJ1dAorICAlIGRvZXMgbm90IHdvcmsgZm9yIGNtYngxMCBhbmQgb3RoZXIgZXh0ZW5kZWQvc2hydW5rZW4gZm9udHMuCisgICUgCisgIFxkZWZcZXVyb3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQorICAlCisgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lIAorICAgICUgYm9sZDoKKyAgICBcZm9udFx0aGlzZXVyb2ZvbnQgPSBcaWZ1c2luZ2l0e2ZleWJvMTB9e2ZleWJyMTB9IGF0IFxldXJvc2l6ZQorICBcZWxzZSAKKyAgICAlIHJlZ3VsYXI6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXltbzEwfXtmZXltcjEwfSBhdCBcZXVyb3NpemUKKyAgXGZpCisgIFx0aGlzZXVyb2ZvbnQKK30KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQorJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgUn0lCisgICAgICAgICAgICAgICBcaGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCislIExhdXJlbnQgU2llYmVubWFubiByZXBvcnRzIFxPcmIgdW5kZWZpbmVkIHdpdGg6CislICBUZXh0dXJlcyAxLjcuNyAocHJlbG9hZGVkIGZvcm1hdD1wbGFpbiA5My4xMC4xNCkgICg2OEspICAxNiBBUFIgMjAwNCAwMjozOAorJSBzbyB3ZSdsbCBkZWZpbmUgaXQgaWYgbmVjZXNzYXJ5LgorJSAKK1xpZnhcT3JiXHVuZGVmaW5lZAorXGRlZlxPcmJ7XG1hdGhoZXhib3gyMER9CitcZmkKKworCitcbWVzc2FnZXtwYWdlIGhlYWRpbmdzLH0KKworXG5ld3NraXBcdGl0bGVwYWdldG9wZ2x1ZSBcdGl0bGVwYWdldG9wZ2x1ZSA9IDEuNWluCitcbmV3c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlIFx0aXRsZXBhZ2Vib3R0b21nbHVlID0gMnBjCisKKyUgRmlyc3QgdGhlIHRpdGxlIHBhZ2UuICBNdXN0IGRvIEBzZXR0aXRsZSBiZWZvcmUgQHRpdGxlcGFnZS4KK1xuZXdpZlxpZnNlZW5hdXRob3IKK1xuZXdpZlxpZmZpbmlzaGVkdGl0bGVwYWdlCisKKyUgRG8gYW4gaW1wbGljaXQgQGNvbnRlbnRzIG9yIEBzaG9ydGNvbnRlbnRzIGFmdGVyIEBlbmQgdGl0bGVwYWdlIGlmIHRoZQorJSB1c2VyIHNheXMgQHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2Ugb3IgQHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZS4KKyUKK1xuZXdpZlxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKK1xuZXdpZlxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKKworXHBhcnNlYXJnZGVmXHNob3J0dGl0bGVwYWdle1xiZWdpbmdyb3VwXGhib3h7fVx2c2tpcCAxLjVpbiBcY2hhcHJtIFxjZW50ZXJsaW5leyMxfSUKKyAgICAgICAgXGVuZGdyb3VwXHBhZ2VcaGJveHt9XHBhZ2V9CisKK1xlbnZkZWZcdGl0bGVwYWdleyUKKyAgJSBPcGVuIG9uZSBleHRyYSBncm91cCwgYXMgd2Ugd2FudCB0byBjbG9zZSBpdCBpbiB0aGUgbWlkZGxlIG9mIFxFdGl0bGVwYWdlLgorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQ9MHB0IFx0ZXh0Zm9udHMKKyAgICAlIExlYXZlIHNvbWUgc3BhY2UgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBwYWdlLgorICAgIFx2Z2x1ZVx0aXRsZXBhZ2V0b3BnbHVlCisgICAgJSBObyBydWxlIGF0IHBhZ2UgYm90dG9tIHVubGVzcyB3ZSBwcmludCBvbmUgYXQgdGhlIHRvcCB3aXRoIEB0aXRsZS4KKyAgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCisgICAgJQorICAgICUgTW9zdCB0aXRsZSBgYHBhZ2VzJycgYXJlIGFjdHVhbGx5IHR3byBwYWdlcyBsb25nLCB3aXRoIHNwYWNlCisgICAgJSBhdCB0aGUgdG9wIG9mIHRoZSBzZWNvbmQuICBXZSBkb24ndCB3YW50IHRoZSByYWdnZWQgbGVmdCBvbiB0aGUgc2Vjb25kLgorICAgIFxsZXRcb2xkcGFnZSA9IFxwYWdlCisgICAgXGRlZlxwYWdleyUKKyAgICAgIFxpZmZpbmlzaGVkdGl0bGVwYWdlXGVsc2UKKwkgXGZpbmlzaHRpdGxlcGFnZQorICAgICAgXGZpCisgICAgICBcbGV0XHBhZ2UgPSBcb2xkcGFnZQorICAgICAgXHBhZ2UKKyAgICAgIFxudWxsCisgICAgfSUKK30KKworXGRlZlxFdGl0bGVwYWdleyUKKyAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJXGZpbmlzaHRpdGxlcGFnZQorICAgIFxmaQorICAgICUgSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoZSBwYWdlIGJyZWFrIGJlZm9yZSBlbmRpbmcgdGhlIGdyb3VwLAorICAgICUgYmVjYXVzZSB0aGUgaGVhZGxpbmUgYW5kIGZvb3RsaW5lIGFyZSBvbmx5IGVtcHR5IGluc2lkZSB0aGUgZ3JvdXAuCisgICAgJSBJZiB3ZSB1c2UgdGhlIG5ldyBkZWZpbml0aW9uIG9mIFxwYWdlLCB3ZSBhbHdheXMgZ2V0IGEgYmxhbmsgcGFnZQorICAgICUgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2UsIHdoaWNoIHdlIGNlcnRhaW5seSBkb24ndCB3YW50LgorICAgIFxvbGRwYWdlCisgIFxlbmRncm91cAorICAlCisgICUgTmVlZCB0aGlzIGJlZm9yZSB0aGUgXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyBzbyB0aGF0IGlmIHRoZXkgYXJlCisgICUgaW4gZWZmZWN0IHRoZSB0b2MgcGFnZXMgd2lsbCBjb21lIG91dCB3aXRoIHBhZ2UgbnVtYmVycy4KKyAgXEhFQURJTkdTb24KKyAgJQorICAlIElmIHRoZXkgd2FudCBzaG9ydCwgdGhleSBjZXJ0YWlubHkgd2FudCBsb25nIHRvby4KKyAgXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgICAgXHNob3J0Y29udGVudHMKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxzaG9ydGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgXGZpCisgICUKKyAgXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxjb250ZW50cworICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICBcZmkKK30KKworXGRlZlxmaW5pc2h0aXRsZXBhZ2V7JQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCAycHQgd2lkdGggXGhzaXplCisgIFx2c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlCisgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKK30KKworJSUlIE1hY3JvcyB0byBiZSB1c2VkIHdpdGhpbiBAdGl0bGVwYWdlOgorCitcbGV0XHN1YnRpdGxlcm09XHRlbnJtCitcZGVmXHN1YnRpdGxlZm9udHtcc3VidGl0bGVybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTNwdCBcbm9ybWFsYmFzZWxpbmVzfQorCitcZGVmXGF1dGhvcmZvbnR7XGF1dGhvcnJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxNnB0IFxub3JtYWxiYXNlbGluZXMKKwkJXGxldFx0dD1cYXV0aG9ydHR9CisKK1xwYXJzZWFyZ2RlZlx0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgXGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtICMxfQorICAlIHByaW50IGEgcnVsZSBhdCB0aGUgcGFnZSBib3R0b20gYWxzby4KKyAgXGZpbmlzaGVkdGl0bGVwYWdlZmFsc2UKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgNHB0IHdpZHRoIFxoc2l6ZSBcdnNraXA0cHQKK30KKworXHBhcnNlYXJnZGVmXHN1YnRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICB7XHN1YnRpdGxlZm9udCBccmlnaHRsaW5leyMxfX0lCit9CisKKyUgQGF1dGhvciBzaG91bGQgY29tZSBsYXN0LCBidXQgbWF5IGNvbWUgbWFueSB0aW1lcy4KKyUgSXQgY2FuIGFsc28gYmUgdXNlZCBpbnNpZGUgQHF1b3RhdGlvbi4KKyUKK1xwYXJzZWFyZ2RlZlxhdXRob3J7JQorICBcZGVmXHRlbXB7XHF1b3RhdGlvbn0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgICAgXGRlZlxxdW90YXRpb25hdXRob3J7IzF9JSBwcmludGVkIGluIFxFcXVvdGF0aW9uLgorICBcZWxzZQorICAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgICBcaWZzZWVuYXV0aG9yXGVsc2UgXHZza2lwIDBwdCBwbHVzIDFmaWxsbCBcc2VlbmF1dGhvcnRydWUgXGZpCisgICAge1xhdXRob3Jmb250IFxsZWZ0bGluZXsjMX19JQorICBcZmkKK30KKworCislJSUgU2V0IHVwIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzLgorCitcbGV0XHRoaXNwYWdlPVxmb2xpbworCitcbmV3dG9rc1xldmVuaGVhZGxpbmUgICAgJSBoZWFkbGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRoZWFkbGluZSAgICAgJSBoZWFkbGluZSBvbiBvZGQgcGFnZXMKK1xuZXd0b2tzXGV2ZW5mb290bGluZSAgICAlIGZvb3RsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGZvb3RsaW5lICAgICAlIGZvb3RsaW5lIG9uIG9kZCBwYWdlcworCislIE5vdyBtYWtlIFRlWCB1c2UgdGhvc2UgdmFyaWFibGVzCitcaGVhZGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRoZWFkbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmhlYWRsaW5lIFxmaX19CitcZm9vdGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRmb290bGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmZvb3RsaW5lIFxmaX1cSEVBRElOR1Nob29rfQorXGxldFxIRUFESU5HU2hvb2s9XHJlbGF4CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRob3NlIHZhcmlhYmxlcy4KKyUgRm9yIGV4YW1wbGUsIHRoaXMgaXMgd2hhdCAgQGhlYWRpbmdzIG9uICBkb2VzCislIEBldmVuaGVhZGluZyBAdGhpc3RpdGxlfEB0aGlzcGFnZXxAdGhpc2NoYXB0ZXIKKyUgQG9kZGhlYWRpbmcgQHRoaXNjaGFwdGVyfEB0aGlzcGFnZXxAdGhpc3RpdGxlCislIEBldmVuZm9vdGluZyBAdGhpc2ZpbGV8fAorJSBAb2RkZm9vdGluZyB8fEB0aGlzZmlsZQorCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxldmVuaGVhZGluZ3h4eCAjMXtcZXZlbmhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5oZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGhlYWRpbmd7XHBhcnNlYXJnXG9kZGhlYWRpbmd4eHh9CitcZGVmXG9kZGhlYWRpbmd4eHggIzF7XG9kZGhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXHBhcnNlYXJnZGVmXGV2ZXJ5aGVhZGluZ3tcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXGV2ZW5mb290aW5neHh4ICMxe1xldmVuZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkZm9vdGluZ3tccGFyc2Vhcmdcb2RkZm9vdGluZ3h4eH0KK1xkZWZcb2RkZm9vdGluZ3h4eCAjMXtcb2RkZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorICBcZ2xvYmFsXG9kZGZvb3RsaW5lID0ge1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fSUKKyAgJQorICAlIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBmb290bGluZS4gIEhvcGVmdWxseSBvayB0byBhc3N1bWUKKyAgJSBAZXZlbmZvb3Rpbmcgd2lsbCBub3QgYmUgdXNlZCBieSBpdHNlbGYuCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC1cYmFzZWxpbmVza2lwCisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtXGJhc2VsaW5lc2tpcAorfQorCitccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CisKKworJSBAaGVhZGluZ3MgZG91YmxlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIGRvdWJsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIHNpbmdsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBvZmYgICAgICAgICB0dXJucyB0aGVtIG9mZi4KKyUgQGhlYWRpbmdzIG9uICAgICAgICAgIHNhbWUgYXMgQGhlYWRpbmdzIGRvdWJsZSwgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCislIEBoZWFkaW5ncyBhZnRlciAgICAgICB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3MgZG91YmxlYWZ0ZXIgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIHNpbmdsZWFmdGVyIHR1cm5zIG9uIHNpbmdsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEJ5IGRlZmF1bHQsIHRoZXkgYXJlIG9mZiBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudCwKKyUgYW5kIHR1cm5lZCBgb24nIGFmdGVyIEBlbmQgdGl0bGVwYWdlLgorCitcZGVmXGhlYWRpbmdzICMxIHtcY3NuYW1lIEhFQURJTkdTIzFcZW5kY3NuYW1lfQorCitcZGVmXEhFQURJTkdTb2ZmeyUKK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfX0KK1xIRUFESU5HU29mZgorJSBXaGVuIHdlIHR1cm4gaGVhZGluZ3Mgb24sIHNldCB0aGUgcGFnZSBudW1iZXIgdG8gMS4KKyUgRm9yIGRvdWJsZS1zaWRlZCBwcmludGluZywgcHV0IGN1cnJlbnQgZmlsZSBuYW1lIGluIGxvd2VyIGxlZnQgY29ybmVyLAorJSBjaGFwdGVyIG5hbWUgb24gaW5zaWRlIHRvcCBvZiByaWdodCBoYW5kIHBhZ2VzLCBkb2N1bWVudAorJSB0aXRsZSBvbiBpbnNpZGUgdG9wIG9mIGxlZnQgaGFuZCBwYWdlcywgYW5kIHBhZ2UgbnVtYmVycyBvbiBvdXRzaWRlIHRvcAorJSBlZGdlIG9mIGFsbCBwYWdlcy4KK1xkZWZcSEVBRElOR1Nkb3VibGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCisKKyUgRm9yIHNpbmdsZS1zaWRlZCBwcmludGluZywgY2hhcHRlciB0aXRsZSBnb2VzIGFjcm9zcyB0b3AgbGVmdCBvZiBwYWdlLAorJSBwYWdlIG51bWJlciBvbiB0b3AgcmlnaHQuCitcZGVmXEhFQURJTkdTc2luZ2xleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KK1xkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9CisKK1xkZWZcSEVBRElOR1NhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1Nkb3VibGV4fQorXGxldFxIRUFESU5HU2RvdWJsZWFmdGVyPVxIRUFESU5HU2FmdGVyCitcZGVmXEhFQURJTkdTZG91YmxleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CisKK1xkZWZcSEVBRElOR1NzaW5nbGVhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1NzaW5nbGV4fQorXGRlZlxIRUFESU5HU3NpbmdsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorCislIFN1YnJvdXRpbmVzIHVzZWQgaW4gZ2VuZXJhdGluZyBoZWFkaW5ncworJSBUaGlzIHByb2R1Y2VzIERheSBNb250aCBZZWFyIHN0eWxlIG9mIG91dHB1dC4KKyUgT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZCwgaW4gY2FzZSBhIHR4aS0/Py50ZXggZmlsZSBoYXMgc2V0CislIHVwIGEgZGlmZmVyZW50IGZvcm1hdCAoZS5nLiwgdHhpLWNzLnRleCBkb2VzIHRoaXMpLgorXGlmeFx0b2RheVx1bmRlZmluZWQKK1xkZWZcdG9kYXl7JQorICBcbnVtYmVyXGRheVxzcGFjZQorICBcaWZjYXNlXG1vbnRoCisgIFxvclxwdXR3b3JkTUphblxvclxwdXR3b3JkTUZlYlxvclxwdXR3b3JkTU1hclxvclxwdXR3b3JkTUFwcgorICBcb3JccHV0d29yZE1NYXlcb3JccHV0d29yZE1KdW5cb3JccHV0d29yZE1KdWxcb3JccHV0d29yZE1BdWcKKyAgXG9yXHB1dHdvcmRNU2VwXG9yXHB1dHdvcmRNT2N0XG9yXHB1dHdvcmRNTm92XG9yXHB1dHdvcmRNRGVjCisgIFxmaQorICBcc3BhY2VcbnVtYmVyXHllYXJ9CitcZmkKKworJSBAc2V0dGl0bGUgbGluZS4uLiAgc3BlY2lmaWVzIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciBoZWFkaW5ncy4KKyUgSXQgZ2VuZXJhdGVzIG5vIG91dHB1dCBvZiBpdHMgb3duLgorXGRlZlx0aGlzdGl0bGV7XHB1dHdvcmROb1RpdGxlfQorXGRlZlxzZXR0aXRsZXtccGFyc2Vhcmd7XGdkZWZcdGhpc3RpdGxlfX0KKworCitcbWVzc2FnZXt0YWJsZXMsfQorJSBUYWJsZXMgLS0gQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLCBAaXRlbSh4KS4KKworJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIHRhYmxlIHRleHQKK1xuZXdkaW1lblx0YWJsZWluZGVudCBcdGFibGVpbmRlbnQ9LjhpbgorJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlIHRleHQKK1xuZXdkaW1lblxpdGVtaW5kZW50ICBcaXRlbWluZGVudD0uM2luCislIG1hcmdpbiBiZXR3ZWVuIGVuZCBvZiB0YWJsZSBpdGVtIGFuZCBzdGFydCBvZiB0YWJsZSB0ZXh0LgorXG5ld2RpbWVuXGl0ZW1tYXJnaW4gIFxpdGVtbWFyZ2luPS4xaW4KKworJSB1c2VkIGludGVybmFsbHkgZm9yIFxpdGVtaW5kZW50IG1pbnVzIFxpdGVtbWFyZ2luCitcbmV3ZGltZW5caXRlbW1heAorCislIE5vdGUgQHRhYmxlLCBAZnRhYmxlLCBhbmQgQHZ0YWJsZSBkZWZpbmUgQGl0ZW0sIEBpdGVteCwgZXRjLiwgd2l0aAorJSB0aGVzZSBkZWZzLgorJSBUaGV5IGFsc28gZGVmaW5lIFxpdGVtaW5kZXgKKyUgdG8gaW5kZXggdGhlIGl0ZW0gbmFtZSBpbiB3aGF0ZXZlciBtYW5uZXIgaXMgZGVzaXJlZCAocGVyaGFwcyBub25lKS4KKworXG5ld2lmXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXAKKworXGRlZlxpdGVteHBhcntccGFyXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXBcbm9icmVha1x2c2tpcC1ccGFyc2tpcFxub2JyZWFrXGZpfQorCitcZGVmXGludGVybmFsQml0ZW17XHNtYWxsYnJlYWsgXHBhcnNlYXJnXGl0ZW16enp9CitcZGVmXGludGVybmFsQml0ZW14e1xpdGVteHBhciBccGFyc2VhcmdcaXRlbXp6en0KKworXGRlZlxpdGVtenp6ICMxe1xiZWdpbmdyb3VwICUKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVx0YWJsZWluZGVudAorICBcc2V0Ym94MD1caGJveHtcaXRlbWluZGljYXRleyMxfX0lCisgIFxpdGVtaW5kZXh7IzF9JQorICBcbm9icmVhayAlIFRoaXMgcHJldmVudHMgYSBicmVhayBiZWZvcmUgQGl0ZW14LgorICAlCisgICUgSWYgdGhlIGl0ZW0gdGV4dCBkb2VzIG5vdCBmaXQgaW4gdGhlIHNwYWNlIHdlIGhhdmUsIHB1dCBpdCBvbiBhIGxpbmUKKyAgJSBieSBpdHNlbGYsIGFuZCBkbyBub3QgYWxsb3cgYSBwYWdlIGJyZWFrIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhhdAorICAlIGxpbmUuICBXZSBkbyBub3Qgc3RhcnQgYSBwYXJhZ3JhcGggaGVyZSBiZWNhdXNlIHRoZW4gaWYgdGhlIG5leHQKKyAgJSBjb21tYW5kIGlzLCBlLmcuLCBAa2luZGV4LCB0aGUgd2hhdHNpdCB3b3VsZCBnZXQgcHV0IGludG8gdGhlCisgICUgaG9yaXpvbnRhbCBsaXN0IG9uIGEgbGluZSBieSBpdHNlbGYsIHJlc3VsdGluZyBpbiBleHRyYSBibGFuayBzcGFjZS4KKyAgXGlmZGltIFx3ZDA+XGl0ZW1tYXgKKyAgICAlCisgICAgJSBNYWtlIHRoaXMgYSBwYXJhZ3JhcGggc28gd2UgZ2V0IHRoZSBccGFyc2tpcCBnbHVlIGFuZCB3cmFwcGluZywKKyAgICAlIGJ1dCBsZWF2ZSBpdCByYWdnZWQtcmlnaHQuCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5LVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VcaHNpemUgYnlcdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieTBwdCBwbHVzMWZpbAorICAgICAgXGxlYXZldm1vZGVcdW5oYm94MFxwYXIKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSBXZSdyZSBnb2luZyB0byBiZSBzdGFydGluZyBhIHBhcmFncmFwaCwgYnV0IHdlIGRvbid0IHdhbnQgdGhlCisgICAgJSBccGFyc2tpcCBnbHVlIC0tIGxvZ2ljYWxseSBpdCdzIHBhcnQgb2YgdGhlIEBpdGVtIHdlIGp1c3Qgc3RhcnRlZC4KKyAgICBcbm9icmVhayBcdnNraXAtXHBhcnNraXAKKyAgICAlCisgICAgJSBTdG9wIGEgcGFnZSBicmVhayBhdCB0aGUgXHBhcnNraXAgZ2x1ZSBjb21pbmcgdXAuICBIb3dldmVyLCBpZgorICAgICUgd2hhdCBmb2xsb3dzIGlzIGFuIGVudmlyb25tZW50IHN1Y2ggYXMgQGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgbm8KKyAgICAlIFxwYXJza2lwIGdsdWU7IHRoZW4gdGhlIG5lZ2F0aXZlIHZza2lwIHdlIGp1c3QgaW5zZXJ0ZWQgd291bGQKKyAgICAlIGNhdXNlIHRoZSBleGFtcGxlIGFuZCB0aGUgaXRlbSB0byBjcmFzaCB0b2dldGhlci4gIFNvIHdlIHVzZSB0aGlzCisgICAgJSBiaXphcnJlIHZhbHVlIG9mIDEwMDAxIGFzIGEgc2lnbmFsIHRvIFxhYm92ZWVudmJyZWFrIHRvIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSBhZnRlciBhbGwuICBTZWN0aW9uIHRpdGxlcyBhcmUgaGFuZGxlZCB0aGlzIHdheSBhbHNvLgorICAgICUgCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CitcZGVmXGl0ZW14e1xlcnJtZXNzYWdle0BpdGVteCB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KKworJSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUuCitcZW52ZGVmXHRhYmxleyUKKyAgXGxldFxpdGVtaW5kZXhcZ29iYmxlCisgIFx0YWJsZWNoZWNre3RhYmxlfSUKK30KK1xlbnZkZWZcZnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7Zm59e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7ZnRhYmxlfSUKK30KK1xlbnZkZWZcdnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7dnJ9e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7dnRhYmxlfSUKK30KK1xkZWZcdGFibGVjaGVjayMxeyUKKyAgXGlmbnVtIFx0aGVcY2F0Y29kZWBcXl5NPVxhY3RpdmUKKyAgICBcZW5kZ3JvdXAKKyAgICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgd29uJ3Qgd29yayBpbiB0aGlzIGNvbnRleHQ7IHBlcmhhcHMgdGhlIHByb2JsZW0gaXMKKyAgICAgIHRoYXQgd2UgYXJlIFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorICAgIFxkZWZcbmV4dHtcZG9pZ25vcmV7IzF9fSUKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcdGFibGV4CisgIFxmaQorICBcbmV4dAorfQorXGRlZlx0YWJsZXgjMXslCisgIFxkZWZcaXRlbWluZGljYXRleyMxfSUKKyAgXHBhcnNlYXJnXHRhYmxleQorfQorXGRlZlx0YWJsZXkjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZWRlZlx0ZW1we1xub2V4cGFuZFx0YWJsZXogIzFcc3BhY2Vcc3BhY2Vcc3BhY2V9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAgXGVuZHRhYmxlegorfQorXGRlZlx0YWJsZXogIzEgIzIgIzMgIzRcZW5kdGFibGV6eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGlmbnVtIDAjMT4wIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSAjMVxtaWwgXGZpCisgIFxpZm51bSAwIzI+MCBcdGFibGVpbmRlbnQ9IzJcbWlsIFxmaQorICBcaWZudW0gMCMzPjAgXGFkdmFuY2UgXHJpZ2h0c2tpcCBieSAjM1xtaWwgXGZpCisgIFxpdGVtbWF4PVx0YWJsZWluZGVudAorICBcYWR2YW5jZSBcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFx0YWJsZWluZGVudAorICBcZXhkZW50YW1vdW50PVx0YWJsZWluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW0gXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGxldFxpdGVtID0gXGludGVybmFsQml0ZW0KKyAgXGxldFxpdGVteCA9IFxpbnRlcm5hbEJpdGVteAorfQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha30KK1xsZXRcRWZ0YWJsZVxFdGFibGUKK1xsZXRcRXZ0YWJsZVxFdGFibGUKK1xsZXRcRWl0ZW1pemVcRXRhYmxlCitcbGV0XEVlbnVtZXJhdGVcRXRhYmxlCisKKyUgVGhpcyBpcyB0aGUgY291bnRlciB1c2VkIGJ5IEBlbnVtZXJhdGUsIHdoaWNoIGlzIHJlYWxseSBAaXRlbWl6ZQorCitcbmV3Y291bnQgXGl0ZW1ubworCitcZW52ZGVmXGl0ZW1pemV7XHBhcnNlYXJnXGRvaXRlbWl6ZX0KKworXGRlZlxkb2l0ZW1pemUjMXslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpdGVtbWF4PVxpdGVtaW5kZW50CisgIFxhZHZhbmNlXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxpdGVtaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGl0ZW1pbmRlbnQKKyAgXHBhcmluZGVudD0wcHQKKyAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZS4KKyUKK1xkZWZcaXRlbWl6ZWl0ZW17JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgMSAgJSBmb3IgZW51bWVyYXRpb25zCisgIHtcbGV0XHBhcj1cZW5kZ3JhZiBcc21hbGxicmVha30lIHJlYXNvbmFibGUgcGxhY2UgdG8gYnJlYWsKKyAgeyUKKyAgICUgSWYgdGhlIGRvY3VtZW50IGhhcyBhbiBAaXRlbWl6ZSBkaXJlY3RseSBhZnRlciBhIHNlY3Rpb24gdGl0bGUsIGEKKyAgICUgXG5vYnJlYWsgd2lsbCBiZSBsYXN0IG9uIHRoZSBsaXN0LCBhbmQgXHNlY3Rpb25oZWFkaW5nIHdpbGwgaGF2ZQorICAgJSBkb25lIGEgXHZza2lwLVxwYXJza2lwLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHplcm8KKyAgICUgcGFyc2tpcCwgb3IgdGhlIGl0ZW0gdGV4dCB3aWxsIGNyYXNoIHdpdGggdGhlIGhlYWRpbmcuICBPbiB0aGUKKyAgICUgb3RoZXIgaGFuZCwgd2hlbiB0aGVyZSBpcyBub3JtYWwgdGV4dCBwcmVjZWRpbmcgdGhlIGl0ZW0gKGFzIHRoZXJlCisgICAlIHVzdWFsbHkgaXMpLCB3ZSBkbyB3YW50IHRvIHplcm8gcGFyc2tpcCwgb3IgdGhlcmUgd291bGQgYmUgdG9vIG11Y2gKKyAgICUgc3BhY2UuICBJbiB0aGF0IGNhc2UsIHdlIHdvbid0IGhhdmUgYSBcbm9icmVhayBiZWZvcmUuICBBdCBsZWFzdAorICAgJSB0aGF0J3MgdGhlIHRoZW9yeS4KKyAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGFyc2tpcD0waW4gXGZpCisgICBcbm9pbmRlbnQKKyAgIFxoYm94IHRvIDBwdHtcaHNzIFxpdGVtY29udGVudHMgXGtlcm5caXRlbW1hcmdpbn0lCisgICBcdmFkanVzdHtccGVuYWx0eSAxMjAwfX0lIG5vdCBnb29kIHRvIGJyZWFrIGFmdGVyIGZpcnN0IGxpbmUgb2YgaXRlbS4KKyAgXGZsdXNoY3IKK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGVudnBhcnNlYXJnZGVmXGVudW1lcmF0ZXtcZW51bWVyYXRleSAjMSAgXGVuZGVudW1lcmF0ZXl9CitcZGVmXGVudW1lcmF0ZXkgIzEgIzJcZW5kZW51bWVyYXRleXslCisgICUgSWYgd2Ugd2VyZSBnaXZlbiBubyBhcmd1bWVudCwgcHJldGVuZCB3ZSB3ZXJlIGdpdmVuIGAxJy4KKyAgXGRlZlx0aGVhcmd7IzF9JQorICBcaWZ4XHRoZWFyZ1xlbXB0eSBcZGVmXHRoZWFyZ3sxfVxmaQorICAlCisgICUgRGV0ZWN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSB0b2tlbi4gIElmIHNvLCBpdCBtaWdodCBiZSBhCisgICUgbGV0dGVyLiAgT3RoZXJ3aXNlLCB0aGUgb25seSB2YWxpZCB0aGluZyBpdCBjYW4gYmUgaXMgYSBudW1iZXIuCisgICUgKFdlIHdpbGwgYWx3YXlzIGhhdmUgb25lIHRva2VuLCBiZWNhdXNlIG9mIHRoZSB0ZXN0IHdlIGp1c3QgbWFkZS4KKyAgJSBUaGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgXHNwbGl0b2ZmIGRvZXNuJ3Qgd29yayBnaXZlbiBub3RoaW5nIGF0CisgICUgYWxsIC0tIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5kZWxpbWl0ZWQuKQorICBcZXhwYW5kYWZ0ZXJcc3BsaXRvZmZcdGhlYXJnXGVuZG1hcmsKKyAgXGlmeFxyZXN0XGVtcHR5CisgICAgJSBPbmx5IG9uZSB0b2tlbiBpbiB0aGUgYXJndW1lbnQuICBJdCBjb3VsZCBzdGlsbCBiZSBhbnl0aGluZy4KKyAgICAlIEEgYGBsb3dlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgbm9uemVyby4KKyAgICAlIEFuIGBgdXBwZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIGJvdGggbm9uemVybywgYW5kCisgICAgJSAgIG5vdCBlcXVhbCB0byBpdHNlbGYuCisgICAgJSBPdGhlcndpc2UsIHdlIGFzc3VtZSBpdCdzIGEgbnVtYmVyLgorICAgICUKKyAgICAlIFdlIG5lZWQgdGhlIFxyZWxheCBhdCB0aGUgZW5kIG9mIHRoZSBcaWZudW0gbGluZXMgdG8gc3RvcCBUZVggZnJvbQorICAgICUgY29udGludWluZyB0byBsb29rIGZvciBhIDxudW1iZXI+LgorICAgICUKKyAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9MFxyZWxheAorICAgICAgXG51bWVyaWNlbnVtZXJhdGUgJSBhIG51bWJlciAod2UgaG9wZSkKKyAgICBcZWxzZQorICAgICAgJSBJdCdzIGEgbGV0dGVyLgorICAgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPVxleHBhbmRhZnRlcmBcdGhlYXJnXHJlbGF4CisgICAgICAgIFxsb3dlcmNhc2VlbnVtZXJhdGUgJSBsb3dlcmNhc2UgbGV0dGVyCisgICAgICBcZWxzZQorICAgICAgICBcdXBwZXJjYXNlZW51bWVyYXRlICUgdXBwZXJjYXNlIGxldHRlcgorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBNdWx0aXBsZSB0b2tlbnMgaW4gdGhlIGFyZ3VtZW50LiAgV2UgaG9wZSBpdCdzIGEgbnVtYmVyLgorICAgIFxudW1lcmljZW51bWVyYXRlCisgIFxmaQorfQorCislIEFuIEBlbnVtZXJhdGUgd2hvc2UgbGFiZWxzIGFyZSBpbnRlZ2Vycy4gIFRoZSBzdGFydGluZyBpbnRlZ2VyIGlzCislIGdpdmVuIGluIFx0aGVhcmcuCislCitcZGVmXG51bWVyaWNlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbntcdGhlXGl0ZW1ub30lCit9CisKKyUgVGhlIHN0YXJ0aW5nIChsb3dlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlxsb3dlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSBsb3dlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fSUKKyAgICBcZmkKKyAgICBcY2hhclxsY2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgVGhlIHN0YXJ0aW5nICh1cHBlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlx1cHBlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fQorICAgIFxmaQorICAgIFxjaGFyXHVjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBDYWxsIFxkb2l0ZW1pemUsIGFkZGluZyBhIHBlcmlvZCB0byB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHN1cHBseWluZyB0aGUKKyUgY29tbW9uIGxhc3QgdHdvIGFyZ3VtZW50cy4gIEFsc28gc3VidHJhY3Qgb25lIGZyb20gdGhlIGluaXRpYWwgdmFsdWUgaW4KKyUgXGl0ZW1ubywgc2luY2UgQGl0ZW0gaW5jcmVtZW50cyBcaXRlbW5vLgorJQorXGRlZlxzdGFydGVudW1lcmF0aW9uIzF7JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgLTEKKyAgXGRvaXRlbWl6ZXsjMS59XGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCisKKyUgRWFjaCBuZXcgdGFibGUgbGluZSBzdGFydHMgd2l0aCBAaXRlbSwgZWFjaCBzdWJzZXF1ZW50IG5ldyBjb2x1bW4KKyUgc3RhcnRzIHdpdGggQHRhYi4gRW1wdHkgY29sdW1ucyBtYXkgYmUgcHJvZHVjZWQgYnkgc3VwcGx5aW5nIEB0YWIncworJSB3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGVtIGZvciBhcyBtYW55IHRpbWVzIGFzIGVtcHR5IGNvbHVtbnMgYXJlIG5lZWRlZCwKKyUgaWUsIEB0YWJAdGFiQHRhYiB3aWxsIHByb2R1Y2UgdHdvIGVtcHR5IGNvbHVtbnMuCisKKyUgQGl0ZW0sIEB0YWIgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydAorJSBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIEBjb2x1bW5mcmFjdGlvbiwgdXN1YWxseSBhIGRlY2ltYWwgbnVtYmVyIGxpa2UgLjUsIGJ1dCBtaWdodAorJSBiZSBqdXN0IDEuICBXZSBqdXN0IHVzZSBpdCwgd2hhdGV2ZXIgaXQgaXMuCislCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMSB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7IzFcaHNpemV9JQorICBcc2V0dXB0YWJsZQorfQorCitcbmV3Y291bnRcY29sY291bnQKK1xkZWZcc2V0dXB0YWJsZSMxeyUKKyAgXGRlZlxmaXJzdGFyZ3sjMX0lCisgIFxpZnhcZmlyc3RhcmdceGVuZHNldHVwdGFibGUKKyAgICBcbGV0XGdvID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGlmeFxmaXJzdGFyZ1x4Y29sdW1uZnJhY3Rpb25zCisgICAgICBcZ2xvYmFsXHNldHBlcmNlbnR0cnVlCisgICAgXGVsc2UKKyAgICAgIFxpZnNldHBlcmNlbnQKKyAgICAgICAgIFxsZXRcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgXGVsc2UKKyAgICAgICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgICAgICBcc2V0Ym94MD1caGJveHsjMVx1bnNraXBcc3BhY2V9JSBBZGQgYSBub3JtYWwgd29yZCBzcGFjZSBhcyBhCisgICAgICAgICAgICAgICAgICAgJSBzZXBhcmF0b3I7IHR5cGljYWxseSB0aGF0IGlzIGFsd2F5cyBpbiB0aGUgaW5wdXQsIGFueXdheS4KKyAgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXtcdGhlXHdkMH0lCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcaWZ4XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgICUgUHV0IHRoZSBhcmd1bWVudCBiYWNrIGZvciB0aGUgXHBpY2t1cHdob2xlZnJhY3Rpb24gY2FsbCwgc28KKyAgICAgICUgd2UnbGwgYWx3YXlzIGhhdmUgYSBwZXJpb2QgdGhlcmUgdG8gYmUgcGFyc2VkLgorICAgICAgXGRlZlxnb3tccGlja3Vwd2hvbGVmcmFjdGlvbiMxfSUKKyAgICBcZWxzZQorICAgICAgXGxldFxnbyA9IFxzZXR1cHRhYmxlCisgICAgXGZpJQorICBcZmkKKyAgXGdvCit9CisKKyUgbXVsdGl0YWJsZS1vbmx5IGNvbW1hbmRzLgorJQorJSBAaGVhZGl0ZW0gc3RhcnRzIGEgaGVhZGluZyByb3csIHdoaWNoIHdlIHR5cGVzZXQgaW4gYm9sZC4KKyUgQXNzaWdubWVudHMgaGF2ZSB0byBiZSBnbG9iYWwgc2luY2Ugd2UgYXJlIGluc2lkZSB0aGUgaW1wbGljaXQgZ3JvdXAKKyUgb2YgYW4gYWxpZ25tZW50IGVudHJ5LiAgTm90ZSB0aGF0IFxldmVyeWNyIHJlc2V0cyBcZXZlcnl0YWIuCitcZGVmXGhlYWRpdGVte1xjaGVja2VudlxtdWx0aXRhYmxlIFxjcmNyIFxnbG9iYWxcZXZlcnl0YWI9e1xiZn1cdGhlXGV2ZXJ5dGFifSUKKyUKKyUgQSBcdGFiIHVzZWQgdG8gaW5jbHVkZSBcaHNraXAxc3AuICBCdXQgdGhlbiB0aGUgc3BhY2UgaW4gYSB0ZW1wbGF0ZQorJSBsaW5lIGlzIG5vdCBlbm91Z2guICBUaGF0IGlzIGJhZC4gIFNvIGxldCdzIGdvIGJhY2sgdG8ganVzdCBgJicgdW50aWwKKyUgd2UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhZ2Fpbi4KKyUJCQkJCS0ta2FybCwgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCitcZGVmXHRhYntcY2hlY2tlbnZcbXVsdGl0YWJsZSAmXHRoZVxldmVyeXRhYn0lCisKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSBkZWZpbml0aW9uczoKKyUKK1xuZXd0b2tzXGV2ZXJ5dGFiICAlIGluc2VydCBhZnRlciBldmVyeSB0YWIuCislCitcZW52ZGVmXG11bHRpdGFibGV7JQorICBcdnNraXBccGFyc2tpcAorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBAaXRlbSB3aXRoaW4gYSBtdWx0aXRhYmxlIHN0YXJ0cyBhIG5vcm1hbCByb3cuCisgICUgV2UgdXNlIFxkZWYgaW5zdGVhZCBvZiBcbGV0IHNvIHRoYXQgaWYgb25lIG9mIHRoZSBtdWx0aXRhYmxlIGVudHJpZXMKKyAgJSBjb250YWlucyBhbiBAaXRlbWl6ZSwgd2UgZG9uJ3QgY2hva2Ugb24gdGhlIFxpdGVtIChzZWVuIGFzIFxjcmNyIGFrYQorICAlIFxlbmR0ZW1wbGF0ZSkgZXhwYW5kaW5nIFxkb2l0ZW1pemUuCisgIFxkZWZcaXRlbXtcY3Jjcn0lCisgICUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgJQorICBcZXZlcnljciA9IHslCisgICAgXG5vYWxpZ257JQorICAgICAgXGdsb2JhbFxldmVyeXRhYj17fSUKKyAgICAgIFxnbG9iYWxcY29sY291bnQ9MCAlIFJlc2V0IHRoZSBjb2x1bW4gY291bnRlci4KKyAgICAgICUgQ2hlY2sgZm9yIHNhdmVkIGZvb3Rub3RlcywgZXRjLgorICAgICAgXGNoZWNraW5zZXJ0cworICAgICAgJSBLZWVwcyB1bmRlcmZ1bGwgYm94IG1lc3NhZ2VzIG9mZiB3aGVuIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLgorICAgICAgJVxmaWxicmVhaworCSUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlCisJJSB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4gV291bGRuJ3QgXHZmaWwgYmUgYmV0dGVyPyAgV2FpdCB1bnRpbCB0aGUKKwklIHByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZiwgc28gaXQgY2FuIGJlIGZpeGVkIGZvciByZWFsIC0ta2FybC4KKyAgICB9JQorICB9JQorICAlCisgIFxwYXJzZWFyZ1xkb211bHRpdGFibGUKK30KK1xkZWZcZG9tdWx0aXRhYmxlIzF7JQorICAlIFRvIHBhcnNlIGV2ZXJ5dGhpbmcgYmV0d2VlbiBAbXVsdGl0YWJsZSBhbmQgQGl0ZW06CisgIFxzZXR1cHRhYmxlIzEgXGVuZHNldHVwdGFibGUKKyAgJQorICAlIFRoaXMgcHJlYW1ibGUgc2V0cyB1cCBhIGdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24sIHdoaWNoIHdpbGwKKyAgJSBiZSB1c2VkIGFzIG1hbnkgdGltZXMgYXMgdXNlciBjYWxscyBmb3IgY29sdW1ucy4KKyAgJSBcdnRvcCB3aWxsIHNldCBhIHNpbmdsZSBsaW5lIGFuZCB3aWxsIGFsc28gbGV0IHRleHQgd3JhcCBhbmQKKyAgJSBjb250aW51ZSBmb3IgbWFueSBwYXJhZ3JhcGhzIGlmIGRlc2lyZWQuCisgIFxoYWxpZ25cYmdyb3VwICYlCisgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICBcbXVsdGlzdHJ1dAorICAgIFx2dG9weyUKKyAgICAgICUgVXNlIHRoZSBjdXJyZW50IFxjb2xjb3VudCB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbHVtbiB3aWR0aDoKKyAgICAgIFxoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICAgICAlCisgICAgICAlIEluIG9yZGVyIHRvIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyCisgICAgICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgICAgICUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICUKKyAgICAgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICAlIHRvIHRoZSB3aWR0aCBvZiBlYWNoIHRlbXBsYXRlIGVudHJ5LgorICAgICAgJQorICAgICAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgICAgICUgdXNlIHRoYXQgZGltZW5zaW9uIGFzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLCBhbmQgdGhlIFxsZWZ0c2tpcAorICAgICAgJSB3aWxsIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyLiAgVGFibGUgd2lsbCBzdGFydCBhdAorICAgICAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICAgICAlCisgICAgICAlIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSB0aGUgb3V0ZXIgZW52aXJvbm1lbnQuCisgICAgICBccmlnaHRza2lwPTBwdAorICAgICAgXGlmbnVtXGNvbGNvdW50PTEKKwklIFRoZSBmaXJzdCBjb2x1bW4gd2lsbCBiZSBpbmRlbnRlZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorCVxhZHZhbmNlXGhzaXplIGJ5XGxlZnRza2lwCisgICAgICBcZWxzZQorCVxpZnNldHBlcmNlbnQgXGVsc2UKKwkgICUgSWYgdXNlciBoYXMgbm90IHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZQorCSAgJSB3ZSB3aWxsIGFkdmFuY2UgXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UuCisJICBcYWR2YW5jZVxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlCisJXGZpCisgICAgICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgICAgICBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgXGZpCisgICAgICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAgICAgJSBibGFuayBsaW5lLCB3aGVuIFRlWCBkZWNpZGVzIHRvIGJyZWFrIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBiZWZvcmUgdGhlCisgICAgICAlIGJveCBmcm9tIHRoZSBtdWx0aXN0cnV0LCBzbyB0aGUgc3RydXQgZW5kcyB1cCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgJSBGb3IgZXhhbXBsZToKKyAgICAgICUgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTEgLjg5CisgICAgICAlIEBpdGVtIEBjb2RleyN9CisgICAgICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgICAgICUgSXMgYXV0b21hdGljYWxseSBwcm92aWRlZCB3aXRoIGhpZ2hsaWdodGluZyBzZXF1ZW5jZXMgcmVzcGVjdGl2ZWx5CisgICAgICAlIG1hcmtpbmcgY2hhcmFjdGVycy4KKyAgICAgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dAorICAgIH1cY3IKK30KK1xkZWZcRW11bHRpdGFibGV7JQorICBcY3JjcgorICBcZWdyb3VwICUgZW5kIHRoZSBcaGFsaWduCisgIFxnbG9iYWxcc2V0cGVyY2VudGZhbHNlCit9CisKK1xkZWZcc2V0bXVsdGl0YWJsZXNwYWNpbmd7JQorICBcZGVmXG11bHRpc3RydXR7XHN0cnV0fSUganVzdCB1c2UgdGhlIHN0YW5kYXJkIGxpbmUgc3BhY2luZworICAlCisgICUgQ29tcHV0ZSBcbXVsdGl0YWJsZWxpbmVzcGFjZSAoaWYgbm90IGRlZmluZWQgYnkgdXNlcikgZm9yIHVzZSBpbgorICAlIFxtdWx0aXRhYmxlcGFyc2tpcCBjYWxjdWxhdGlvbi4gIFdlIHVzZWQgZGVmaW5lIFxtdWx0aXN0cnV0IGJhc2VkIG9uCisgICUgdGhpcywgYnV0IChpcm9uaWNhbGx5KSB0aGF0IGNhdXNlZCB0aGUgc3BhY2luZyB0byBiZSBvZmYuCisgICUgU2VlIGJ1Zy10ZXhpbmZvIHJlcG9ydCBmcm9tIFdlcm5lciBMZW1iZXJnLCAzMSBPY3QgMjAwNCAxMjo1MjoyMCArMDEwMC4KK1xpZmRpbVxtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorXHNldGJveDA9XHZib3h7WH1cZ2xvYmFsXG11bHRpdGFibGVsaW5lc3BhY2U9XHRoZVxiYXNlbGluZXNraXAKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlbGluZXNwYWNlIGJ5LVxodDAKK1xmaQorJSUgVGVzdCB0byBzZWUgaWYgcGFyc2tpcCBpcyBsYXJnZXIgdGhhbiBzcGFjZSBiZXR3ZWVuIGxpbmVzIG9mCislJSB0YWJsZS4gSWYgbm90LCBkbyBub3RoaW5nLgorJSUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZmklCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaX0KKworCitcbWVzc2FnZXtjb25kaXRpb25hbHMsfQorCislIEBpZnRleCwgQGlmbm90ZG9jYm9vaywgQGlmbm90aHRtbCwgQGlmbm90aW5mbywgQGlmbm90cGxhaW50ZXh0LAorJSBAaWZub3R4bWwgYWx3YXlzIHN1Y2NlZWQuICBUaGV5IGN1cnJlbnRseSBkbyBub3RoaW5nOyB3ZSBkb24ndAorJSBhdHRlbXB0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFscyBhcmUgcHJvcGVybHkgbmVzdGVkLiAgQnV0IHdlCislIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB0aGV5IGFyZSBjb25kaXRpb25hbHMsIHNvIHRoYXQgQGVuZCBkb2Vzbid0CislIGF0dGVtcHQgdG8gY2xvc2UgYW4gZW52aXJvbm1lbnQgZ3JvdXAuCislCitcZGVmXG1ha2Vjb25kIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSAjMVxlbmRjc25hbWUgPSBccmVsYXgKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZSA9IDEKK30KK1xtYWtlY29uZHtpZnRleH0KK1xtYWtlY29uZHtpZm5vdGRvY2Jvb2t9CitcbWFrZWNvbmR7aWZub3RodG1sfQorXG1ha2Vjb25ke2lmbm90aW5mb30KK1xtYWtlY29uZHtpZm5vdHBsYWludGV4dH0KK1xtYWtlY29uZHtpZm5vdHhtbH0KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcZG9jYm9va3tcZG9pZ25vcmV7ZG9jYm9va319CitcZGVmXGh0bWx7XGRvaWdub3Jle2h0bWx9fQorXGRlZlxpZmRvY2Jvb2t7XGRvaWdub3Jle2lmZG9jYm9va319CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgU2NhbiBpbiBgYHZlcmJhdGltJycgbW9kZToKKyAgXG9iZXlsaW5lcworICBcY2F0Y29kZWBcQCA9IFxvdGhlcgorICBcY2F0Y29kZWBceyA9IFxvdGhlcgorICBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICAlCisgICUgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIHR1cm4gaW50byB0b2tlbnMgdGhhdCBtYXRjaCB3aGF0IFxkb2lnbm9yZXRleHQgd2FudHMuCisgIFxzcGFjZWlzc3BhY2UKKyAgJQorICAlIENvdW50IG51bWJlciBvZiAjMSdzIHRoYXQgd2UndmUgc2Vlbi4KKyAgXGRvaWdub3JlY291bnQgPSAwCisgICUKKyAgJSBTd2FsbG93IHRleHQgdW50aWwgd2UgcmVhY2ggdGhlIG1hdGNoaW5nIGBAZW5kICMxJy4KKyAgXGRvZG9pZ25vcmV7IzF9JQorfQorCit7IFxjYXRjb2RlYF89MTEgJSBXZSB3YW50IHRvIHVzZSBcX1NUT1BfIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gdGV4aW5mbyBzb3VyY2UuCisgIFxvYmV5bGluZXMgJQorICAlCisgIFxnZGVmXGRvZG9pZ25vcmUjMXslCisgICAgJSAjMSBjb250YWlucyB0aGUgY29tbWFuZCBuYW1lIGFzIGEgc3RyaW5nLCBlLmcuLCBgaWZpbmZvJy4KKyAgICAlCisgICAgJSBEZWZpbmUgYSBjb21tYW5kIHRvIGZpbmQgdGhlIG5leHQgYEBlbmQgIzEnLgorICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHQjIzFeXk1AZW5kICMxeyUKKyAgICAgIFxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzFcX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxIyMyXF9TVE9QX3tcZG9pZ25vcmV5eXl7IyMyfVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCBub3cgZXhwYW5kIHRoYXQgY29tbWFuZC4KKyAgICBcZG9pZ25vcmV0ZXh0IF5eTSUKKyAgfSUKK30KKworXGRlZlxkb2lnbm9yZXl5eSMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CQkJJSBOb3RoaW5nIGZvdW5kLgorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR6enoKKyAgXGVsc2UJCQkJCSUgRm91bmQgYSBuZXN0ZWQgY29uZGl0aW9uLCAuLi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IDEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0eXl5CQklIC4uLiwgbG9vayBmb3IgYW5vdGhlci4KKyAgICAlIElmIHdlJ3JlIGhlcmUsICMxIGVuZHMgd2l0aCBeXk1caWZpbmZvIChmb3IgZXhhbXBsZSkuCisgIFxmaQorICBcbmV4dCAjMSUgdGhlIHRva2VuIFxfU1RPUF8gaXMgcHJlc2VudCBqdXN0IGFmdGVyIHRoaXMgbWFjcm8uCit9CisKKyUgV2UgaGF2ZSB0byBzd2FsbG93IHRoZSByZW1haW5pbmcgIlxfU1RPUF8iLgorJQorXGRlZlxkb2lnbm9yZXRleHR6enojMXslCisgIFxpZm51bVxkb2lnbm9yZWNvdW50ID0gMAklIFdlIGhhdmUganVzdCBmb3VuZCB0aGUgb3V0ZXJtb3N0IEBlbmQuCisgICAgXGxldFxuZXh0XGVuZGRvaWdub3JlCisgIFxlbHNlCQkJCSUgU3RpbGwgaW5zaWRlIGEgbmVzdGVkIGNvbmRpdGlvbi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IC0xCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dCAgICAgICUgTG9vayBmb3IgdGhlIG5leHQgQGVuZC4KKyAgXGZpCisgIFxuZXh0Cit9CisKKyUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCit7IFxvYmV5bGluZXMlCisgICUgSWdub3JlIGFueXRoaW5nIGFmdGVyIHRoZSBsYXN0IGBAZW5kICMxJzsgdGhpcyBtYXR0ZXJzIGluIHZlcmJhdGltCisgICUgZW52aXJvbm1lbnRzLCB3aGVyZSBvdGhlcndpc2UgdGhlIG5ld2xpbmUgYWZ0ZXIgYW4gaWdub3JlZCBjb25kaXRpb25hbAorICAlIHdvdWxkIHJlc3VsdCBpbiBhIGJsYW5rIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZW5kZG9pZ25vcmUjMV5eTXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfSUKK30KKworCislIEBzZXQgVkFSIHNldHMgdGhlIHZhcmlhYmxlIFZBUiB0byBhbiBlbXB0eSB2YWx1ZS4KKyUgQHNldCBWQVIgUkVTVC1PRi1MSU5FIHNldHMgVkFSIHRvIHRoZSB2YWx1ZSBSRVNULU9GLUxJTkUuCislCislIFNpbmNlIHdlIHdhbnQgdG8gc2VwYXJhdGUgVkFSIGZyb20gUkVTVC1PRi1MSU5FICh3aGljaCBtaWdodCBiZQorJSBlbXB0eSksIHdlIGNhbid0IGp1c3QgdXNlIFxwYXJzZWFyZzsgd2UgaGF2ZSB0byBpbnNlcnQgYSBzcGFjZSBvZiBvdXIKKyUgb3duIHRvIGRlbGltaXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCB0aGVuIHRha2UgaXQgb3V0IGFnYWluIGlmIHdlCislIGRpZG4ndCBuZWVkIGl0LgorJSBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgXHBhcnNlYXJnIHNldHMgXGNhdGNvZGVgXCA9MTAuCislCitccGFyc2VhcmdkZWZcc2V0e1xzZXR5eXkjMSBcZW5kc2V0eXl5fQorXGRlZlxzZXR5eXkjMSAjMlxlbmRzZXR5eXl7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1weyMyfSUKKyAgICBcZWRlZlxuZXh0e1xnZGVmXG1ha2Vjc25hbWV7U0VUIzF9fSUKKyAgICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAgIFxuZXh0e30lCisgICAgXGVsc2UKKyAgICAgIFxzZXR6enojMlxlbmRzZXR6enoKKyAgICBcZmkKKyAgfSUKK30KKyUgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSBcc2V0eHh4IGluc2VydGVkLgorXGRlZlxzZXR6enojMSBcZW5kc2V0enp6e1xuZXh0eyMxfX0KKworJSBAY2xlYXIgVkFSIGNsZWFycyAoaS5lLiwgdW5zZXRzKSB0aGUgdmFyaWFibGUgVkFSLgorJQorXHBhcnNlYXJnZGVmXGNsZWFyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVQjMVxlbmRjc25hbWU9XHJlbGF4CisgIH0lCit9CisKKyUgQHZhbHVle2Zvb30gZ2V0cyB0aGUgdGV4dCBzYXZlZCBpbiB2YXJpYWJsZSBmb28uCitcZGVmXHZhbHVle1xiZWdpbmdyb3VwXG1ha2V2YWx1ZWV4cGFuZGFibGVcdmFsdWV4eHh9CitcZGVmXHZhbHVleHh4IzF7XGV4cGFuZGFibGV2YWx1ZXsjMX1cZW5kZ3JvdXB9Cit7CisgIFxjYXRjb2RlYFwtID0gXGFjdGl2ZSBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgJQorICBcZ2RlZlxtYWtldmFsdWVleHBhbmRhYmxleyUKKyAgICBcbGV0XHZhbHVlID0gXGV4cGFuZGFibGV2YWx1ZQorICAgICUgV2UgZG9uJ3Qgd2FudCB0aGVzZSBjaGFyYWN0ZXJzIGFjdGl2ZSwgLi4uCisgICAgXGNhdGNvZGVgXC09XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcgorICAgICUgLi4uLCBidXQgd2UgbWlnaHQgZW5kIHVwIHdpdGggYWN0aXZlIG9uZXMgaW4gdGhlIGFyZ3VtZW50IGlmCisgICAgJSB3ZSdyZSBjYWxsZWQgZnJvbSBAY29kZSwgYXMgQGNvZGV7QHZhbHVle2Zvby1iYXJffX0sIHRob3VnaC4KKyAgICAlIFNvIFxsZXQgdGhlbSB0byB0aGVpciBub3JtYWwgZXF1aXZhbGVudHMuCisgICAgXGxldC1ccmVhbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQorICB9Cit9CisKKyUgV2UgaGF2ZSB0aGlzIHN1YnJvdXRpbmUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHNvbWUgQHZhbHVlJ3MKKyUgcHJvcGVybHkgaW4gaW5kZXhlcyAod2UgY2FsbCBcbWFrZXZhbHVlZXhwYW5kYWJsZSBpbiBcaW5kZXhkdW1taWVzKS4KKyUgVGhlIGNvbW1hbmQgaGFzIHRvIGJlIGZ1bGx5IGV4cGFuZGFibGUgKGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQpLCBzaW5jZQorJSB0aGUgcmVzdWx0IHdpbmRzIHVwIGluIHRoZSBpbmRleCBmaWxlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZQorJSB2YXJpYWJsZSdzIHZhbHVlIGNvbnRhaW5zIG90aGVyIFRleGluZm8gY29tbWFuZHMsIGl0J3MgYWxtb3N0IGNlcnRhaW4KKyUgaXQgd2lsbCBmYWlsIChhbHRob3VnaCBwZXJoYXBzIHdlIGNvdWxkIGZpeCB0aGF0IHdpdGggc3VmZmljaWVudCB3b3JrCislIHRvIGRvIGEgb25lLWxldmVsIGV4cGFuc2lvbiBvbiB0aGUgcmVzdWx0LCBpbnN0ZWFkIG9mIGNvbXBsZXRlKS4KKyUKK1xkZWZcZXhwYW5kYWJsZXZhbHVlIzF7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMVxlbmRjc25hbWVccmVsYXgKKyAgICB7W05vIHZhbHVlIGZvciBgYCMxJyddfSUKKyAgICBcbWVzc2FnZXtWYXJpYWJsZSBgIzEnLCB1c2VkIGluIEB2YWx1ZSwgaXMgbm90IHNldC59JQorICBcZWxzZQorICAgIFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lCisgIFxmaQorfQorCislIEBpZnNldCBWQVIgLi4uIEBlbmQgaWZzZXQgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIGJlZW4gZGVmaW5lZAorJSB3aXRoIEBzZXQuCislCislIFRvIGdldCBzcGVjaWFsIHRyZWF0bWVudCBvZiBgQGVuZCBpZnNldCwnIGNhbGwgXG1ha2VvbmQgYW5kIHRoZSByZWRlZmluZS4KKyUKK1xtYWtlY29uZHtpZnNldH0KK1xkZWZcaWZzZXR7XHBhcnNlYXJne1xkb2lmc2V0e1xsZXRcbmV4dD1caWZzZXRmYWlsfX19CitcZGVmXGRvaWZzZXQjMSMyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxsZXRcbmV4dD1cZW1wdHkKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMlxlbmRjc25hbWVccmVsYXgKKyAgICAgICMxJSBJZiBub3Qgc2V0LCByZWRlZmluZSBcbmV4dC4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQorCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIGRlZmluZWQgd2l0aCBAc2V0LCBvciBoYXMgYmVlbiB1bmRlZmluZWQgd2l0aCBAY2xlYXIuCislCislIFRoZSBgXGVsc2UnIGluc2lkZSB0aGUgYFxkb2lmc2V0JyBwYXJhbWV0ZXIgaXMgYSB0cmljayB0byByZXVzZSB0aGUKKyUgYWJvdmUgY29kZTogaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGRvIG5vdGhpbmcsIGlmIGl0IGlzIHNldCwKKyUgdGhlbiByZWRlZmluZSBcbmV4dCB0byBcaWZjbGVhcmZhaWwuCislCitcbWFrZWNvbmR7aWZjbGVhcn0KK1xkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQorXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CisKKyUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCislIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgorXGxldFxkaXJjYXRlZ29yeT1cY29tbWVudAorCislIEBkZWZpbmluZm9lbmNsb3NlLgorXGxldFxkZWZpbmZvZW5jbG9zZT1cY29tbWVudAorCisKK1xtZXNzYWdle2luZGV4aW5nLH0KKyUgSW5kZXggZ2VuZXJhdGlvbiBmYWNpbGl0aWVzCisKKyUgRGVmaW5lIFxuZXd3cml0ZSB0byBiZSBpZGVudGljYWwgdG8gcGxhaW4gdGV4J3MgXG5ld3dyaXRlCislIGV4Y2VwdCBub3QgXG91dGVyLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gbWFjcm9zIGFuZCBcaWYncy4KK1xlZGVmXG5ld3dyaXRle1xtYWtlY3NuYW1le3B0ZXhuZXd3cml0ZX19CisKKyUgXG5ld2luZGV4IHtmb299IGRlZmluZXMgYW4gaW5kZXggbmFtZWQgZm9vLgorJSBJdCBhdXRvbWF0aWNhbGx5IGRlZmluZXMgXGZvb2luZGV4IHN1Y2ggdGhhdAorJSBcZm9vaW5kZXggLi4ucmVzdCBvZiBsaW5lLi4uIHB1dHMgYW4gZW50cnkgaW4gdGhlIGluZGV4IGZvby4KKyUgSXQgYWxzbyBkZWZpbmVzIFxmb29pbmRmaWxlIHRvIGJlIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCBjaGFubmVsIGZvcgorJSB0aGUgZmlsZSB0aGF0IGFjY3VtdWxhdGVzIHRoaXMgaW5kZXguICBUaGUgZmlsZSdzIGV4dGVuc2lvbiBpcyBmb28uCislIFRoZSBuYW1lIG9mIGFuIGluZGV4IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMiBjaGFyYWN0ZXJzIGxvbmcKKyUgZm9yIHRoZSBzYWtlIG9mIHZtcy4KKyUKK1xkZWZcbmV3aW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEgJSBPcGVuIHRoZSBmaWxlCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslICAgICAlIERlZmluZSBAIzFpbmRleAorICAgIFxub2V4cGFuZFxkb2luZGV4eyMxfX0KK30KKworJSBAZGVmaW5kZXggZm9vICA9PSAgXG5ld2luZGV4e2Zvb30KKyUKK1xkZWZcZGVmaW5kZXh7XHBhcnNlYXJnXG5ld2luZGV4fQorCislIERlZmluZSBAZGVmY29kZWluZGV4LCBsaWtlIEBkZWZpbmRleCBleGNlcHQgcHV0IGFsbCBlbnRyaWVzIGluIEBjb2RlLgorJQorXGRlZlxkZWZjb2RlaW5kZXh7XHBhcnNlYXJnXG5ld2NvZGVpbmRleH0KKyUKK1xkZWZcbmV3Y29kZWluZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslCisgICAgXG5vZXhwYW5kXGRvY29kZWluZGV4eyMxfX0lCit9CisKKworJSBAc3luaW5kZXggZm9vIGJhciAgICBtYWtlcyBpbmRleCBmb28gZmVlZCBpbnRvIGluZGV4IGJhci4KKyUgRG8gdGhpcyBpbnN0ZWFkIG9mIEBkZWZpbmRleCBmb28gaWYgeW91IGRvbid0IHdhbnQgaXQgYXMgYSBzZXBhcmF0ZSBpbmRleC4KKyUKKyUgQHN5bmNvZGVpbmRleCBmb28gYmFyICAgc2ltaWxhciwgYnV0IHB1dCBhbGwgZW50cmllcyBtYWRlIGZvciBpbmRleCBmb28KKyUgaW5zaWRlIEBjb2RlLgorJQorXGRlZlxzeW5pbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2luZGV4eyMxfXsjMn19CitcZGVmXHN5bmNvZGVpbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2NvZGVpbmRleHsjMX17IzJ9fQorCislICMxIGlzIFxkb2luZGV4IG9yIFxkb2NvZGVpbmRleCwgIzIgdGhlIGluZGV4IGdldHRpbmcgcmVkZWZpbmVkIChmb28pLAorJSAjMyB0aGUgdGFyZ2V0IGluZGV4IChiYXIpLgorXGRlZlxkb3N5bmluZGV4IzEjMiMzeyUKKyAgJSBPbmx5IGRvIFxjbG9zZW91dCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBpdCwgZWxzZSB3ZSdsbCBlbmQgdXAKKyAgJSBjbG9zaW5nIHRoZSB0YXJnZXQgaW5kZXguCisgIFxleHBhbmRhZnRlciBcaWZ4XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgXHVuZGVmaW5lZAorICAgICUgVGhlIFxjbG9zZW91dCBoZWxwcyByZWR1Y2UgdW5uZWNlc3Nhcnkgb3BlbiBmaWxlczsgdGhlIGxpbWl0IG9uIHRoZQorICAgICUgQWNvcm4gUklTQyBPUyBpcyBhIG1lcmUgMTYgZmlsZXMuCisgICAgXGV4cGFuZGFmdGVyXGNsb3Nlb3V0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZVxkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCisgIFxmaQorICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lPVx0ZW1wCisgICUgcmVkZWZpbmUgXGZvb2luZGV4OgorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMmluZGV4XGVuZGNzbmFtZXtcbm9leHBhbmQjMXsjM319JQorfQorCislIERlZmluZSBcZG9pbmRleCwgdGhlIGRyaXZlciBmb3IgYWxsIFxmb29pbmRleCBtYWNyb3MuCislIEFyZ3VtZW50ICMxIGlzIGdlbmVyYXRlZCBieSB0aGUgY2FsbGluZyBcZm9vaW5kZXggbWFjcm8sCislICBhbmQgaXQgaXMgImZvbyIsIHRoZSBuYW1lIG9mIHRoZSBpbmRleC4KKworJSBcZG9pbmRleCBqdXN0IHVzZXMgXHBhcnNlYXJnOyBpdCBjYWxscyBcZG9pbmQgZm9yIHRoZSBhY3R1YWwgd29yay4KKyUgVGhpcyBpcyBiZWNhdXNlIFxkb2luZCBpcyBtb3JlIHVzZWZ1bCB0byBjYWxsIGZyb20gb3RoZXIgbWFjcm9zLgorCislIFRoZXJlIGlzIGFsc28gXGRvc3ViaW5kIHtpbmRleH17dG9waWN9e3N1YnRvcGljfQorJSB3aGljaCBtYWtlcyBhbiBlbnRyeSBpbiBhIHR3by1sZXZlbCBpbmRleCBzdWNoIGFzIHRoZSBvcGVyYXRpb24gaW5kZXguCisKK1xkZWZcZG9pbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlaW5kZXhlcn0KK1xkZWZcc2luZ2xlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17IzF9fQorCislIGxpa2UgdGhlIHByZXZpb3VzIHR3bywgYnV0IHRoZXkgcHV0IEBjb2RlIGFyb3VuZCB0aGUgYXJndW1lbnQuCitcZGVmXGRvY29kZWluZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVjb2RlaW5kZXhlcn0KK1xkZWZcc2luZ2xlY29kZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9e1xjb2RleyMxfX19CisKKyUgVGFrZSBjYXJlIG9mIFRleGluZm8gY29tbWFuZHMgdGhhdCBjYW4gYXBwZWFyIGluIGFuIGluZGV4IGVudHJ5LgorJSBTaW5jZSB0aGVyZSBhcmUgc29tZSBjb21tYW5kcyB3ZSB3YW50IHRvIGV4cGFuZCwgYW5kIG90aGVycyB3ZSBkb24ndCwKKyUgd2UgaGF2ZSB0byBsYWJvcmlvdXNseSBwcmV2ZW50IGV4cGFuc2lvbiBmb3IgdGhvc2UgdGhhdCB3ZSBkb24ndC4KKyUKK1xkZWZcaW5kZXhkdW1taWVzeyUKKyAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCisgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCisgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQorICAlIE5lZWQgdGhlc2UgaW4gY2FzZSBcdGV4IGlzIGluIGVmZmVjdCBhbmQgXHsgaXMgYSBcZGVsaW1pdGVyIGFnYWluLgorICAlIEJ1dCBjYW4ndCB1c2UgXGxicmFjZWNtZCBhbmQgXHJicmFjZWNtZCBiZWNhdXNlIHRleGluZGV4IGFzc3VtZXMKKyAgJSBicmFjZXMgYW5kIGJhY2tzbGFzaGVzIGFyZSB1c2VkIG9ubHkgYXMgZGVsaW1pdGVycy4KKyAgXGxldFx7ID0gXG15bGJyYWNlCisgIFxsZXRcfSA9IFxteXJicmFjZQorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCit9CisKKyUgRm9yIHRoZSBhdXggYW5kIHRvYyBmaWxlcywgQCBpcyB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gIFNvIHdlIHdhbnQgdG8KKyUgcmVkZWZpbmUgZXZlcnl0aGluZyB1c2luZyBAIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChpbnN0ZWFkIG9mCislIFxyZWFsYmFja3NsYXNoLCBzdGlsbCB1c2VkIGZvciBpbmRleCBmaWxlcykuICBXaGVuIGV2ZXJ5dGhpbmcgdXNlcyBALAorJSB0aGlzIHdpbGwgYmUgc2ltcGxlci4KKyUKK1xkZWZcYXRkdW1taWVzeyUKKyAgXGRlZlxAe0BAfSUKKyAgXGRlZlwge0AgfSUKKyAgXGxldFx7ID0gXGxicmFjZWF0Y21kCisgIFxsZXRcfSA9IFxyYnJhY2VhdGNtZAorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCislIENhbGxlZCBmcm9tIFxpbmRleGR1bW1pZXMgYW5kIFxhdGR1bW1pZXMuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgICUgXGRlZmluZWR1bW15d29yZCBkZWZpbmVzIFwjMSBhcyBcc3RyaW5nXCMxXHNwYWNlLCB0aHVzIGVmZmVjdGl2ZWx5CisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wlIHdvcmRzLAorICAlIG5vdCBjb250cm9sIGxldHRlcnMsIGJlY2F1c2UgdGhlIFxzcGFjZSB3b3VsZCBiZSBpbmNvcnJlY3QgZm9yCisgICUgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZSBjb250cm9sIHdvcmQKKyAgJSBmcm9tIHdoYXRldmVyIGZvbGxvd3MuCisgICUKKyAgJSBGb3IgY29udHJvbCBsZXR0ZXJzLCB3ZSBoYXZlIFxkZWZpbmVkdW1teWxldHRlciwgd2hpY2ggb21pdHMgdGhlCisgICUgc3BhY2UuCisgICUKKyAgJSBUaGVzZSBjYW4gYmUgdXNlZCBib3RoIGZvciBjb250cm9sIHdvcmRzIHRoYXQgdGFrZSBhbiBhcmd1bWVudCBhbmQKKyAgJSB0aG9zZSB0aGF0IGRvIG5vdC4gIElmIGl0IGlzIGZvbGxvd2VkIGJ5IHthcmd9IGluIHRoZSBpbnB1dCwgdGhlbgorICAlIHRoYXQgd2lsbCBkdXRpZnVsbHkgZ2V0IHdyaXR0ZW4gdG8gdGhlIGluZGV4IChvciB3aGVyZXZlcikuCisgICUKKyAgXGRlZlxkZWZpbmVkdW1teXdvcmQgICMjMXtcZGVmIyMxe1xzdHJpbmcjIzFcc3BhY2V9fSUKKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcZGVmIyMxe1xzdHJpbmcjIzF9fSUKKyAgXGxldFxkZWZpbmVkdW1teWFjY2VudFxkZWZpbmVkdW1teWxldHRlcgorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgIFxkZWZpbmVkdW1teWxldHRlclxfJQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxBQQorICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcTAorICBcZGVmaW5lZHVtbXl3b3JkXE9FCisgIFxkZWZpbmVkdW1teXdvcmRcTworICBcZGVmaW5lZHVtbXl3b3JkXGFhCisgIFxkZWZpbmVkdW1teXdvcmRcYWUKKyAgXGRlZmluZWR1bW15d29yZFxsCisgIFxkZWZpbmVkdW1teXdvcmRcb2UKKyAgXGRlZmluZWR1bW15d29yZFxvCisgIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFxleGNsYW1kb3duCisgIFxkZWZpbmVkdW1teXdvcmRccXVlc3Rpb25kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcb3JkZgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZG0KKyAgJQorICAlIEFsdGhvdWdoIHRoZXNlIGludGVybmFsIGNvbW1hbmRzIHNob3VsZG4ndCBzaG93IHVwLCBzb21ldGltZXMgdGhleSBkby4KKyAgXGRlZmluZWR1bW15d29yZFxiZgorICBcZGVmaW5lZHVtbXl3b3JkXGd0cgorICBcZGVmaW5lZHVtbXl3b3JkXGhhdAorICBcZGVmaW5lZHVtbXl3b3JkXGxlc3MKKyAgXGRlZmluZWR1bW15d29yZFxzZgorICBcZGVmaW5lZHVtbXl3b3JkXHNsCisgIFxkZWZpbmVkdW1teXdvcmRcdGNsb3NlCisgIFxkZWZpbmVkdW1teXdvcmRcdHQKKyAgJQorICBcZGVmaW5lZHVtbXl3b3JkXExhVGVYCisgIFxkZWZpbmVkdW1teXdvcmRcVGVYCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcYnVsbGV0CisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWEKKyAgXGRlZmluZWR1bW15d29yZFxjb3B5cmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxyZWdpc3RlcmVkc3ltYm9sCisgIFxkZWZpbmVkdW1teXdvcmRcZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVuZGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlcXVpdgorICBcZGVmaW5lZHVtbXl3b3JkXGVycm9yCisgIFxkZWZpbmVkdW1teXdvcmRcZXVybworICBcZGVmaW5lZHVtbXl3b3JkXGV4cGFuc2lvbgorICBcZGVmaW5lZHVtbXl3b3JkXG1pbnVzCisgIFxkZWZpbmVkdW1teXdvcmRccG91bmRzCisgIFxkZWZpbmVkdW1teXdvcmRccG9pbnQKKyAgXGRlZmluZWR1bW15d29yZFxwcmludAorICBcZGVmaW5lZHVtbXl3b3JkXHJlc3VsdAorICAlCisgICUgV2Ugd2FudCB0byBkaXNhYmxlIGFsbCBtYWNyb3Mgc28gdGhhdCB0aGV5IGFyZSBub3QgZXhwYW5kZWQgYnkgXHdyaXRlLgorICBcbWFjcm9saXN0CisgICUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgJQorICAlIEhhbmRsZSBzb21lIGNhc2VzIG9mIEB2YWx1ZSAtLSB3aGVyZSBpdCBkb2VzIG5vdCBjb250YWluIGFueQorICAlIChub24tZnVsbHktZXhwYW5kYWJsZSkgY29tbWFuZHMuCisgIFxtYWtldmFsdWVleHBhbmRhYmxlCit9CisKKyUgXGNvbW1vbmR1bW1pZXNub2ZvbnRzOiBjb21tb24gdG8gXGNvbW1vbmR1bW1pZXMgYW5kIFxpbmRleG5vZm9udHMuCislCitcZGVmXGNvbW1vbmR1bW1pZXNub2ZvbnRzeyUKKyAgJSBDb250cm9sIGxldHRlcnMgYW5kIGFjY2VudHMuCisgIFxkZWZpbmVkdW1teWxldHRlclwhJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcIiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCclCisgIFxkZWZpbmVkdW1teWxldHRlclwqJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcLCUKKyAgXGRlZmluZWR1bW15bGV0dGVyXC4lCisgIFxkZWZpbmVkdW1teWxldHRlclwvJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcOiUKKyAgXGRlZmluZWR1bW15YWNjZW50XD0lCisgIFxkZWZpbmVkdW1teWxldHRlclw/JQorICBcZGVmaW5lZHVtbXlhY2NlbnRcXiUKKyAgXGRlZmluZWR1bW15YWNjZW50XGAlCisgIFxkZWZpbmVkdW1teWFjY2VudFx+JQorICBcZGVmaW5lZHVtbXl3b3JkXHUKKyAgXGRlZmluZWR1bW15d29yZFx2CisgIFxkZWZpbmVkdW1teXdvcmRcSAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdGFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHJpbmdhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx0aWVhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx1YmFyYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWRvdGFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdGxlc3MKKyAgJQorICAlIFRleGluZm8gZm9udCBjb21tYW5kcy4KKyAgXGRlZmluZWR1bW15d29yZFxiCisgIFxkZWZpbmVkdW1teXdvcmRcaQorICBcZGVmaW5lZHVtbXl3b3JkXHIKKyAgXGRlZmluZWR1bW15d29yZFxzYworICBcZGVmaW5lZHVtbXl3b3JkXHQKKyAgJQorICAlIENvbW1hbmRzIHRoYXQgdGFrZSBhcmd1bWVudHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYWNyb255bQorICBcZGVmaW5lZHVtbXl3b3JkXGNpdGUKKyAgXGRlZmluZWR1bW15d29yZFxjb2RlCisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWFuZAorICBcZGVmaW5lZHVtbXl3b3JkXGRmbgorICBcZGVmaW5lZHVtbXl3b3JkXGVtcGgKKyAgXGRlZmluZWR1bW15d29yZFxlbnYKKyAgXGRlZmluZWR1bW15d29yZFxmaWxlCisgIFxkZWZpbmVkdW1teXdvcmRca2JkCisgIFxkZWZpbmVkdW1teXdvcmRca2V5CisgIFxkZWZpbmVkdW1teXdvcmRcbWF0aAorICBcZGVmaW5lZHVtbXl3b3JkXG9wdGlvbgorICBcZGVmaW5lZHVtbXl3b3JkXHB4cmVmCisgIFxkZWZpbmVkdW1teXdvcmRccmVmCisgIFxkZWZpbmVkdW1teXdvcmRcc2FtcAorICBcZGVmaW5lZHVtbXl3b3JkXHN0cm9uZworICBcZGVmaW5lZHVtbXl3b3JkXHRpZQorICBcZGVmaW5lZHVtbXl3b3JkXHVyZWYKKyAgXGRlZmluZWR1bW15d29yZFx1cmwKKyAgXGRlZmluZWR1bW15d29yZFx2YXIKKyAgXGRlZmluZWR1bW15d29yZFx2ZXJiCisgIFxkZWZpbmVkdW1teXdvcmRcdworICBcZGVmaW5lZHVtbXl3b3JkXHhyZWYKK30KKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4bm9mb250c3slCisgICUgQWNjZW50IGNvbW1hbmRzIHNob3VsZCBiZWNvbWUgQGFzaXMuCisgIFxkZWZcZGVmaW5lZHVtbXlhY2NlbnQjIzF7XGxldCMjMVxhc2lzfSUKKyAgJSBXZSBjYW4ganVzdCBpZ25vcmUgb3RoZXIgY29udHJvbCBsZXR0ZXJzLgorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xsZXQjIzFcZW1wdHl9JQorICAlIEhvcGVmdWxseSwgYWxsIGNvbnRyb2wgd29yZHMgY2FuIGJlY29tZSBAYXNpcy4KKyAgXGxldFxkZWZpbmVkdW1teXdvcmRcZGVmaW5lZHVtbXlhY2NlbnQKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICAlIERvbid0IG5vLW9wIFx0dCwgc2luY2UgaXQgaXNuJ3QgYSB1c2VyLWxldmVsIGNvbW1hbmQKKyAgJSBhbmQgaXMgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGFjdGl2ZSBjaGFycyBsaWtlIDwsID4sIHwsIGV0Yy4KKyAgJSBMaWtld2lzZSB3aXRoIHRoZSBvdGhlciBwbGFpbiB0ZXggZm9udCBjb21tYW5kcy4KKyAgJVxsZXRcdHQ9XGFzaXMKKyAgJQorICBcZGVmXCB7IH0lCisgIFxkZWZcQHtAfSUKKyAgJSBob3cgdG8gaGFuZGxlIGJyYWNlcz8KKyAgXGRlZlxfe1xub3JtYWx1bmRlcnNjb3JlfSUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxMe0x9JQorICBcZGVmXE9Fe09FfSUKKyAgXGRlZlxPe099JQorICBcZGVmXGFhe2FhfSUKKyAgXGRlZlxhZXthZX0lCisgIFxkZWZcbHtsfSUKKyAgXGRlZlxvZXtvZX0lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxzc3tzc30lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgIFxkZWZcb3JkZnthfSUKKyAgXGRlZlxvcmRte299JQorICAlCisgIFxkZWZcTGFUZVh7TGFUZVh9JQorICBcZGVmXFRlWHtUZVh9JQorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAlIChUaGUgZm9sbG93aW5nIHt9IHdpbGwgZW5kIHVwIGluIHRoZSBzb3J0IHN0cmluZywgYnV0IHRoYXQncyBvay4pCisgIFxkZWZcYnVsbGV0e2J1bGxldH0lCisgIFxkZWZcY29tbWF7LH0lCisgIFxkZWZcY29weXJpZ2h0e2NvcHlyaWdodH0lCisgIFxkZWZccmVnaXN0ZXJlZHN5bWJvbHtSfSUKKyAgXGRlZlxkb3Rzey4uLn0lCisgIFxkZWZcZW5kZG90c3suLi59JQorICBcZGVmXGVxdWl2ez09fSUKKyAgXGRlZlxlcnJvcntlcnJvcn0lCisgIFxkZWZcZXVyb3tldXJvfSUKKyAgXGRlZlxleHBhbnNpb257PT0+fSUKKyAgXGRlZlxtaW51c3stfSUKKyAgXGRlZlxwb3VuZHN7cG91bmRzfSUKKyAgXGRlZlxwb2ludHsufSUKKyAgXGRlZlxwcmludHstfH0lCisgIFxkZWZccmVzdWx0ez0+fSUKKyAgJQorICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCisgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCisgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCisgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CisgICUgdGhhdCBzdGFydHMgd2l0aCBcLgorICAlIAorICAlIFNpbmNlIG1hY3JvIGludm9jYXRpb25zIGFyZSBmb2xsb3dlZCBieSBicmFjZXMsIHdlIGNhbiBqdXN0IHJlZGVmaW5lIHRoZW0KKyAgJSB0byB0YWtlIGEgc2luZ2xlIFRlWCBhcmd1bWVudC4gIFRoZSBjYXNlIG9mIGEgbWFjcm8gaW52b2NhdGlvbiB0aGF0CisgICUgZ29lcyB0byBlbmQtb2YtbGluZSBpcyBub3QgaGFuZGxlZC4KKyAgJSAKKyAgXG1hY3JvbGlzdAorfQorCitcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KK1xsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPworCislIE1vc3QgaW5kZXggZW50cmllcyBnbyB0aHJvdWdoIGhlcmUsIGJ1dCBcZG9zdWJpbmQgaXMgdGhlIGdlbmVyYWwgY2FzZS4KKyUgIzEgaXMgdGhlIGluZGV4IG5hbWUsICMyIGlzIHRoZSBlbnRyeSB0ZXh0LgorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBlbXB0eSBpZiBjYWxsZWQgZnJvbSBcZG9pbmQsIGFzIHdlIHVzdWFsbHkgYXJlICh0aGUgbWFpbiBleGNlcHRpb24KKyUgaXMgd2l0aCBtb3N0IGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseSkuCislCitcZGVmXGRvc3ViaW5kIzEjMiMzeyUKKyAgXGlmbGlua3MKKyAgeyUKKyAgICAlIFN0b3JlIHRoZSBtYWluIGluZGV4IGVudHJ5IHRleHQgKGluY2x1ZGluZyB0aGUgdGhpcmQgYXJnKS4KKyAgICBcdG9rczAgPSB7IzJ9JQorICAgICUgSWYgdGhpcmQgYXJnIGlzIHByZXNlbnQsIHByZWNlZGUgaXQgd2l0aCBhIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcaWZ2bW9kZQorICAgICAgXGRvc3ViaW5kc2FuaXRpemUKKyAgICBcZWxzZQorICAgICAgXGRvc3ViaW5kd3JpdGUKKyAgICBcZmkKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IGluIFx0b2tzMCB0byB0aGUgaW5kZXggZmlsZToKKyUKK1xkZWZcZG9zdWJpbmR3cml0ZXslCisgICUgUHV0IHRoZSBpbmRleCBlbnRyeSBpbiB0aGUgbWFyZ2luIGlmIGRlc2lyZWQuCisgIFxpZnhcU0VUbWFyZ2luaW5kZXhccmVsYXhcZWxzZQorICAgIFxpbnNlcnRcbWFyZ2lue1xoYm94e1x2cnVsZSBoZWlnaHQ4cHQgZGVwdGgzcHQgd2lkdGgwcHQgXHRoZVx0b2tzMH19JQorICBcZmkKKyAgJQorICAlIFJlbWVtYmVyLCB3ZSBhcmUgd2l0aGluIGEgZ3JvdXAuCisgIFxpbmRleGR1bW1pZXMgJSBNdXN0IGRvIHRoaXMgaGVyZSwgc2luY2UgXGJmLCBldGMgZXhwYW5kIGF0IHRoaXMgc3RhZ2UKKyAgXGRlZlxiYWNrc2xhc2hjdXJmb250e1xpbmRleGJhY2tzbGFzaH0lIFxpbmRleGJhY2tzbGFzaCBpc24ndCBkZWZpbmVkIG5vdworICAgICAgJSBzbyBpdCB3aWxsIGJlIG91dHB1dCBhcyBpczsgYW5kIGl0IHdpbGwgcHJpbnQgYXMgYmFja3NsYXNoLgorICAlCisgICUgUHJvY2VzcyB0aGUgaW5kZXggZW50cnkgd2l0aCBhbGwgZm9udCBjb21tYW5kcyB0dXJuZWQgb2ZmLCB0bworICAlIGdldCB0aGUgc3RyaW5nIHRvIHNvcnQgYnkuCisgIHtcaW5kZXhub2ZvbnRzCisgICBcZWRlZlx0ZW1we1x0aGVcdG9rczB9JSBuZWVkIGZ1bGwgZXhwYW5zaW9uCisgICBceGRlZlxpbmRleHNvcnR0bXB7XHRlbXB9JQorICB9JQorICAlCisgICUgU2V0IHVwIHRoZSBjb21wbGV0ZSBpbmRleCBlbnRyeSwgd2l0aCBib3RoIHRoZSBzb3J0IGtleSBhbmQKKyAgJSB0aGUgb3JpZ2luYWwgdGV4dCwgaW5jbHVkaW5nIGFueSBmb250IGNvbW1hbmRzLiAgV2Ugd3JpdGUKKyAgJSB0aHJlZSBhcmd1bWVudHMgdG8gXGVudHJ5IHRvIHRoZSAuPz8gZmlsZSAoZm91ciBpbiB0aGUKKyAgJSBzdWJlbnRyeSBjYXNlKSwgdGV4aW5kZXggcmVkdWNlcyB0byB0d28gd2hlbiB3cml0aW5nIHRoZSAuPz9zCisgICUgc29ydGVkIHJlc3VsdC4KKyAgXGVkZWZcdGVtcHslCisgICAgXHdyaXRlXHdyaXRldG97JQorICAgICAgXHN0cmluZ1xlbnRyeXtcaW5kZXhzb3J0dG1wfXtcbm9leHBhbmRcZm9saW99e1x0aGVcdG9rczB9fSUKKyAgfSUKKyAgXHRlbXAKK30KKworJSBUYWtlIGNhcmUgb2YgdW53YW50ZWQgcGFnZSBicmVha3M6CislCislIElmIGEgc2tpcCBpcyB0aGUgbGFzdCB0aGluZyBvbiB0aGUgbGlzdCBub3csIHByZXNlcnZlIGl0CislIGJ5IGJhY2tpbmcgdXAgYnkgXGxhc3Rza2lwLCBkb2luZyB0aGUgXHdyaXRlLCB0aGVuIGluc2VydGluZworJSB0aGUgc2tpcCBhZ2Fpbi4gIE90aGVyd2lzZSwgdGhlIHdoYXRzaXQgZ2VuZXJhdGVkIGJ5IHRoZQorJSBcd3JpdGUgd2lsbCBtYWtlIFxsYXN0c2tpcCB6ZXJvLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHNlcXVlbmNlcworJSBsaWtlIHRoaXM6CislIEBlbmQgZGVmdW4KKyUgQHRpbmRleCB3aGF0ZXZlcgorJSBAZGVmdW4gLi4uCislIHdpbGwgaGF2ZSBleHRyYSBzcGFjZSBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgXG1lZGJyZWFrIGluIHRoZQorJSBzdGFydCBvZiB0aGUgQGRlZnVuIHdvbid0IHNlZSB0aGUgc2tpcCBpbnNlcnRlZCBieSB0aGUgQGVuZCBvZgorJSB0aGUgcHJldmlvdXMgZGVmdW4uCislCislIEJ1dCBkb24ndCBkbyBhbnkgb2YgdGhpcyBpZiB3ZSdyZSBub3QgaW4gdmVydGljYWwgbW9kZS4gIFdlCislIGRvbid0IHdhbnQgdG8gZG8gYSBcdnNraXAgYW5kIHByZW1hdHVyZWx5IGVuZCBhIHBhcmFncmFwaC4KKyUKKyUgQXZvaWQgcGFnZSBicmVha3MgZHVlIHRvIHRoZXNlIGV4dHJhIHNraXBzLCB0b28uCislCislIEJ1dCB3YWl0LCB0aGVyZSBpcyBhIGNhdGNoIHRoZXJlOgorJSBXZSdsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgXGxhc3Rza2lwIGlzIHplcm8gc2tpcC4gIFxpZmRpbSBpcyBub3QKKyUgc3VmZmljaWVudCBmb3IgdGhpcyBwdXJwb3NlLCBhcyBpdCBpZ25vcmVzIHN0cmV0Y2ggYW5kIHNocmluayBwYXJ0cworJSBvZiB0aGUgc2tpcC4gIFRoZSBvbmx5IHdheSBzZWVtcyB0byBiZSB0byBjaGVjayB0aGUgdGV4dHVhbAorJSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2tpcC4KKyUKKyUgVGhlIGZvbGxvd2luZyBpcyBhbG1vc3QgbGlrZSBcZGVmXHplcm9za2lwbWFjcm97MC4wcHR9IGV4Y2VwdCB0aGF0CislIHRoZSBgYHAnJyBhbmQgYGB0JycgY2hhcmFjdGVycyBoYXZlIGNhdGNvZGUgXG90aGVyLCBub3QgMTEgKGxldHRlcikuCislCitcZWRlZlx6ZXJvc2tpcG1hY3Jve1xleHBhbmRhZnRlclx0aGVcY3NuYW1lIHpAc2tpcFxlbmRjc25hbWV9CislCislIC4uLiwgcmVhZHksIEdPOgorJQorXGRlZlxkb3N1YmluZHNhbml0aXpleyUKKyAgJSBcbGFzdHNraXAgYW5kIFxsYXN0cGVuYWx0eSBjYW5ub3QgYm90aCBiZSBub256ZXJvIHNpbXVsdGFuZW91c2x5LgorICBcc2tpcDAgPSBcbGFzdHNraXAKKyAgXGVkZWZcbGFzdHNraXBtYWNyb3tcdGhlXGxhc3Rza2lwfSUKKyAgXGNvdW50MjU1ID0gXGxhc3RwZW5hbHR5CisgICUKKyAgJSBJZiBcbGFzdHNraXAgaXMgbm9uemVybywgdGhhdCBtZWFucyB0aGUgbGFzdCBpdGVtIHdhcyBhCisgICUgc2tpcC4gIEFuZCBzaW5jZSBhIHNraXAgaXMgZGlzY2FyZGFibGUsIHRoYXQgbWVhbnMgdGhpcworICAlIC1cc2tpcDAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQorICAlIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCB0aGVyZWZvcmUgaXQgaXMgbm90IGEgcG90ZW50aWFsCisgICUgYnJlYWtwb2ludCwgdGhlcmVmb3JlIG5vIFxub2JyZWFrIG5lZWRlZC4KKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgXGVsc2UKKyAgICBcdnNraXAtXHNraXAwCisgIFxmaQorICAlCisgIFxkb3N1YmluZHdyaXRlCisgICUKKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgICAlIElmIFxsYXN0c2tpcCB3YXMgemVybywgcGVyaGFwcyB0aGUgbGFzdCBpdGVtIHdhcyBhIHBlbmFsdHksIGFuZAorICAgICUgcGVyaGFwcyBpdCB3YXMgPj0xMDAwMCwgZS5nLiwgYSBcbm9icmVhay4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgICUgdG8gcmUtaW5zZXJ0IHRoZSBzYW1lIHBlbmFsdHkgKHZhbHVlcyA+MTAwMDAgYXJlIHVzZWQgZm9yIHZhcmlvdXMKKyAgICAlIHNpZ25hbHMpOyBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIGFueQorICAgICUgZm9sbG93aW5nIGdsdWUgKHN1Y2ggYXMgYSBccGFyc2tpcCkgd291bGQgYmUgYSBicmVha3BvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgJSAKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVxjb3VudDI1NT45OTk5IFxwZW5hbHR5XGNvdW50MjU1IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcc2tpcDAKKyAgXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgJQorICAlIFNlZSBpZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LgorICAlIENoYW5nZSBjYXRjb2RlIG9mIEAgaGVyZSBzbyB0aGF0IGlmIHRoZSBpbmRleCBmaWxlIGNvbnRhaW5zCisgICUgXGluaXRpYWwge0B9CisgICUgYXMgaXRzIGZpcnN0IGxpbmUsIFRlWCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IG1pc21hdGNoZWQgYnJhY2VzCisgICUgKGJlY2F1c2UgaXQgdGhpbmtzIEB9IGlzIGEgY29udHJvbCBzZXF1ZW5jZSkuCisgIFxjYXRjb2RlYFxAID0gMTEKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLiMxcworICBcaWZlb2YgMQorICAgICUgXGVuZGRvdWJsZWNvbHVtbnMgZ2V0cyBjb25mdXNlZCBpZiB0aGVyZSBpcyBubyB0ZXh0IGluIHRoZSBpbmRleCwKKyAgICAlIGFuZCBpdCBsb3NlcyB0aGUgY2hhcHRlciB0aXRsZSBhbmQgdGhlIGF1eCBmaWxlIGVudHJpZXMgZm9yIHRoZQorICAgICUgaW5kZXguICBUaGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIHByb2JsZW0gaXMgdG8gbWFrZSBzdXJlCisgICAgJSB0aGVyZSBpcyBzb21lIHRleHQuCisgICAgXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50CisgIFxlbHNlCisgICAgJQorICAgICUgSWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgdGhlbiBcb3BlbmluIGxlYXZlcyBcaWZlb2YKKyAgICAlIGZhbHNlLiAgV2UgaGF2ZSB0byBtYWtlIFRlWCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgZnJvbSB0aGUgZmlsZSwgc28KKyAgICAlIGl0IGNhbiBkaXNjb3ZlciBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiBpdC4KKyAgICBccmVhZCAxIHRvIFx0ZW1wCisgICAgXGlmZW9mIDEKKyAgICAgIFxwdXR3b3JkSW5kZXhJc0VtcHR5CisgICAgXGVsc2UKKyAgICAgICUgSW5kZXggZmlsZXMgYXJlIGFsbW9zdCBUZXhpbmZvIHNvdXJjZSwgYnV0IHdlIHVzZSBcIGFzIHRoZSBlc2NhcGUKKyAgICAgICUgY2hhcmFjdGVyLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBALCBidXQgdGhhdCdzIHRvbyBiaWcgYSBjaGFuZ2UKKyAgICAgICUgdG8gbWFrZSByaWdodCBub3cuCisgICAgICBcZGVmXGluZGV4YmFja3NsYXNoe1xiYWNrc2xhc2hjdXJmb250fSUKKyAgICAgIFxjYXRjb2RlYFxcID0gMAorICAgICAgXGVzY2FwZWNoYXIgPSBgXFwKKyAgICAgIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgICAgIFxpbnB1dCBcam9ibmFtZS4jMXMKKyAgICAgIFxlbmRkb3VibGVjb2x1bW5zCisgICAgXGZpCisgIFxmaQorICBcY2xvc2VpbiAxCitcZW5kZ3JvdXB9CisKKyUgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBzb3J0ZWQgaW5kZXggZmlsZSBpdHNlbGYuCislIENoYW5nZSB0aGVtIHRvIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGluZGV4LgorCitcZGVmXGluaXRpYWwjMXt7JQorICAlIFNvbWUgbWlub3IgZm9udCBjaGFuZ2VzIGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHR0PVxzZWN0dCBcbGV0XHNmPVxzZWN0dAorICAlCisgICUgUmVtb3ZlIGFueSBnbHVlIHdlIG1heSBoYXZlLCB3ZSdsbCBiZSBpbnNlcnRpbmcgb3VyIG93bi4KKyAgXHJlbW92ZWxhc3Rza2lwCisgICUKKyAgJSBXZSBsaWtlIGJyZWFrcyBiZWZvcmUgdGhlIGluZGV4IGluaXRpYWxzLCBzbyBpbnNlcnQgYSBib251cy4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIDBwdCBwbHVzIDNcYmFzZWxpbmVza2lwCisgIFxwZW5hbHR5IDAKKyAgXHZza2lwIDBwdCBwbHVzIC0zXGJhc2VsaW5lc2tpcAorICAlCisgICUgVHlwZXNldCB0aGUgaW5pdGlhbC4gIE1ha2luZyB0aGlzIGFkZCB1cCB0byBhIHdob2xlIG51bWJlciBvZgorICAlIGJhc2VsaW5lc2tpcHMgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgdGhlIGRvdHMgbGluaW5nIHVwIGZyb20gY29sdW1uCisgICUgdG8gY29sdW1uLiAgSXQgc3RpbGwgd29uJ3Qgb2Z0ZW4gYmUgcGVyZmVjdCwgYmVjYXVzZSBvZiB0aGUgc3RyZXRjaAorICAlIHdlIG5lZWQgYmVmb3JlIGVhY2ggZW50cnksIGJ1dCBpdCdzIGJldHRlci4KKyAgJQorICAlIE5vIHNocmluayBiZWNhdXNlIGl0IGNvbmZ1c2VzIFxiYWxhbmNlY29sdW1ucy4KKyAgXHZza2lwIDEuNjdcYmFzZWxpbmVza2lwIHBsdXMgLjVcYmFzZWxpbmVza2lwCisgIFxsZWZ0bGluZXtcc2VjYmYgIzF9JQorICAlIERvIG91ciBiZXN0IG5vdCB0byBicmVhayBhZnRlciB0aGUgaW5pdGlhbC4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIC4zM1xiYXNlbGluZXNraXAgcGx1cyAuMVxiYXNlbGluZXNraXAKK319CisKKyUgXGVudHJ5IHR5cGVzZXRzIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgdGhlIHRleHQgKCMxKSwgZG90IGxlYWRlcnMsIGFuZAorJSB0aGVuIHBhZ2UgbnVtYmVyICgjMikgZmx1c2hlZCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgSXQgaXMgdXNlZCBmb3IgaW5kZXgKKyUgYW5kIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJpZXMuICBUaGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IFxsZWZ0c2tpcC4KKyUKKyUgQSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gd291bGQgc3RhcnQgbGlrZSB0aGlzOgorJQlcZGVmXGVudHJ5IzEjMnsuLi4KKyUgQnV0IHRoaXMgZnJvemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxkZWZcdGVtcGF7e1xybSB9fSUKKyAgICBcZGVmXHRlbXBieyMxfSUKKyAgICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICAgIFxlZGVmXHRlbXBke1x0ZW1wYn0lCisgICAgXGlmeFx0ZW1wY1x0ZW1wZAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBcZG90ZmlsbCBleGNlcHQgdGFrZXMgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUgJHtcaXQgLn0kIFxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CisKK1xkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KKworXG5ld3NraXBcc2Vjb25kYXJ5aW5kZW50IFxzZWNvbmRhcnlpbmRlbnQ9MC41Y20KK1xkZWZcc2Vjb25kYXJ5IzEjMnt7JQorICBccGFyZmlsbHNraXA9MGluCisgIFxwYXJza2lwPTBpbgorICBcaGFuZ2luZGVudD0xaW4KKyAgXGhhbmdhZnRlcj0xCisgIFxub2luZGVudFxoc2tpcFxzZWNvbmRhcnlpbmRlbnRcaGJveHsjMX1caW5kZXhkb3RmaWxsCisgIFxpZnBkZgorICAgIFxwZGZnZXR0b2tzIzIuXCBcdGhlXHRva3NBICUgVGhlIHBhZ2UgbnVtYmVyIGVuZHMgdGhlIHBhcmFncmFwaC4KKyAgXGVsc2UKKyAgICAjMgorICBcZmkKKyAgXHBhcgorfX0KKworJSBEZWZpbmUgdHdvLWNvbHVtbiBtb2RlLCB3aGljaCB3ZSB1c2UgdG8gdHlwZXNldCBpbmRleGVzLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2ssIHBhZ2UgNDE2LCB3aGljaCBpcyB0byBzYXksCislIHRoZSBtYW5tYWMudGV4IGZvcm1hdCB1c2VkIHRvIHByaW50IHRoZSBUZVhib29rIGl0c2VsZi4KK1xjYXRjb2RlYFxAPTExCisKK1xuZXdib3hccGFydGlhbHBhZ2UKK1xuZXdkaW1lblxkb3VibGVjb2x1bW5oc2l6ZQorCitcZGVmXGJlZ2luZG91YmxlY29sdW1uc3tcYmVnaW5ncm91cCAlIGVuZGVkIGJ5IFxlbmRkb3VibGVjb2x1bW5zCisgICUgR3JhYiBhbnkgc2luZ2xlLWNvbHVtbiBtYXRlcmlhbCBhYm92ZSB1cy4KKyAgXG91dHB1dCA9IHslCisgICAgJQorICAgICUgSGVyZSBpcyBhIHBvc3NpYmlsaXR5IG5vdCBmb3Jlc2VlbiBpbiBtYW5tYWM6IGlmIHdlIGFjY3VtdWxhdGUgYQorICAgICUgd2hvbGUgbG90IG9mIG1hdGVyaWFsLCB3ZSBtaWdodCBlbmQgdXAgY2FsbGluZyB0aGlzIFxvdXRwdXQKKyAgICAlIHJvdXRpbmUgdHdpY2UgaW4gYSByb3cgKHNlZSB0aGUgZG91YmxlY29sLWxvc2UgdGVzdCwgd2hpY2ggaXMKKyAgICAlIGVzc2VudGlhbGx5IGEgY291cGxlIG9mIGluZGV4ZXMgd2l0aCBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmKS4gIEluCisgICAgJSB0aGF0IGNhc2Ugd2UganVzdCBzaGlwIG91dCB3aGF0IGlzIGluIFxwYXJ0aWFscGFnZSB3aXRoIHRoZSBub3JtYWwKKyAgICAlIG91dHB1dCByb3V0aW5lLiAgR2VuZXJhbGx5LCBccGFydGlhbHBhZ2Ugd2lsbCBiZSBlbXB0eSB3aGVuIHRoaXMKKyAgICAlIHJ1bnMgYW5kIHRoaXMgd2lsbCBiZSBhIG5vLW9wLiAgU2VlIHRoZSBpbmRleHNwcmVhZC50ZXggdGVzdCBjYXNlLgorICAgIFxpZnZvaWRccGFydGlhbHBhZ2UgXGVsc2UKKyAgICAgIFxvbmVwYWdlb3V0e1xwYWdlY29udGVudHNccGFydGlhbHBhZ2V9JQorICAgIFxmaQorICAgICUKKyAgICBcZ2xvYmFsXHNldGJveFxwYXJ0aWFscGFnZSA9IFx2Ym94eyUKKyAgICAgICUgVW52Ym94IHRoZSBtYWluIG91dHB1dCBwYWdlLgorICAgICAgXHVudmJveFxQQUdFCisgICAgICBca2Vybi1cdG9wc2tpcCBca2VyblxiYXNlbGluZXNraXAKKyAgICB9JQorICB9JQorICBcZWplY3QgJSBydW4gdGhhdCBvdXRwdXQgcm91dGluZSB0byBzZXQgXHBhcnRpYWxwYWdlCisgICUKKyAgJSBVc2UgdGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIHN1YnNlcXVlbnQgcGFnZXMuCisgIFxvdXRwdXQgPSB7XGRvdWJsZWNvbHVtbm91dH0lCisgICUKKyAgJSBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLiAgV2UgY291bGQgZG8gdGhpcyBvbmNlIG91dHNpZGUgdGhpcworICAlIHJvdXRpbmUsIGluIGVhY2ggb2YgQHNtYWxsYm9vaywgQGFmb3VycGFwZXIsIGFuZCB0aGUgZGVmYXVsdCA4LjV4MTEKKyAgJSBmb3JtYXQsIGJ1dCB0aGVuIHdlIHJlcGVhdCB0aGUgc2FtZSBjb21wdXRhdGlvbi4gIFJlcGVhdGluZyBhIGNvdXBsZQorICAlIG9mIGFzc2lnbm1lbnRzIG9uY2UgcGVyIGluZGV4IGlzIGNsZWFybHkgbWVhbmluZ2xlc3MgZm9yIHRoZQorICAlIGV4ZWN1dGlvbiB0aW1lLCBzbyB3ZSBtYXkgYXMgd2VsbCBkbyBpdCBpbiBvbmUgcGxhY2UuCisgICUKKyAgJSBGaXJzdCB3ZSBoYWx2ZSB0aGUgbGluZSBsZW5ndGgsIGxlc3MgYSBsaXR0bGUgZm9yIHRoZSBndXR0ZXIgYmV0d2VlbgorICAlIHRoZSBjb2x1bW5zLiAgV2UgY29tcHV0ZSB0aGUgZ3V0dGVyIGJhc2VkIG9uIHRoZSBsaW5lIGxlbmd0aCwgc28gaXQKKyAgJSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgcGFwZXIgZm9ybWF0LiAgVGhlIG1hZ2ljIGNvbnN0YW50CisgICUgYmVsb3cgaXMgY2hvc2VuIHNvIHRoYXQgdGhlIGd1dHRlciBoYXMgdGhlIHNhbWUgdmFsdWUgKHdlbGwsICstPDFwdCkKKyAgJSBhcyBpdCBkaWQgd2hlbiB3ZSBoYXJkLWNvZGVkIGl0LgorICAlCisgICUgV2UgcHV0IHRoZSByZXN1bHQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlciwgXGRvdWJsZWNvbHVtaHNpemUsIHNvIHdlCisgICUgY2FuIHJlc3RvcmUgaXQgaW4gXHBhZ2Vzb2ZhciwgYWZ0ZXIgXGhzaXplIGl0c2VsZiBoYXMgKHBvdGVudGlhbGx5KQorICAlIGJlZW4gY2xvYmJlcmVkLgorICAlCisgIFxkb3VibGVjb2x1bW5oc2l6ZSA9IFxoc2l6ZQorICAgIFxhZHZhbmNlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IC0uMDQxNTRcaHNpemUKKyAgICBcZGl2aWRlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IDIKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgICUKKyAgJSBEb3VibGUgdGhlIFx2c2l6ZSBhcyB3ZWxsLiAgKFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSByZWdpc3RlciBoZXJlLAorICAlIHNpbmNlIG5vYm9keSBjbG9iYmVycyBcdnNpemUuKQorICBcdnNpemUgPSAyXHZzaXplCit9CisKKyUgVGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIGFsbCBkb3VibGUtY29sdW1uIHBhZ2VzIGV4Y2VwdAorJSB0aGUgbGFzdC4KKyUKK1xkZWZcZG91YmxlY29sdW1ub3V0eyUKKyAgXHNwbGl0dG9wc2tpcD1cdG9wc2tpcCBcc3BsaXRtYXhkZXB0aD1cbWF4ZGVwdGgKKyAgJSBHZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb2x1bW5zIC0tIHRoZSBub3JtYWwKKyAgJSAodW5kb3VibGVkKSBwYWdlIGhlaWdodCBtaW51cyBhbnkgbWF0ZXJpYWwgbGVmdCBvdmVyIGZyb20gdGhlCisgICUgcHJldmlvdXMgcGFnZS4KKyAgXGRpbWVuQCA9IFx2c2l6ZQorICBcZGl2aWRlXGRpbWVuQCBieSAyCisgIFxhZHZhbmNlXGRpbWVuQCBieSAtXGh0XHBhcnRpYWxwYWdlCisgICUKKyAgJSBib3gwIHdpbGwgYmUgdGhlIGxlZnQtaGFuZCBjb2x1bW4sIGJveDIgdGhlIHJpZ2h0LgorICBcc2V0Ym94MD1cdnNwbGl0MjU1IHRvXGRpbWVuQCBcc2V0Ym94Mj1cdnNwbGl0MjU1IHRvXGRpbWVuQAorICBcb25lcGFnZW91dFxwYWdlc29mYXIKKyAgXHVudmJveDI1NQorICBccGVuYWx0eVxvdXRwdXRwZW5hbHR5Cit9CislCislIFJlLW91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBwYWdlIC0tIGFueSBwcmV2aW91cyBtYXRlcmlhbCwKKyUgZm9sbG93ZWQgYnkgdGhlIHR3byBib3hlcyB3ZSBqdXN0IHNwbGl0LCBpbiBib3gwIGFuZCBib3gyLgorXGRlZlxwYWdlc29mYXJ7JQorICBcdW52Ym94XHBhcnRpYWxwYWdlCisgICUKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgIFx3ZDA9XGhzaXplIFx3ZDI9XGhzaXplCisgIFxoYm94IHRvXHBhZ2V3aWR0aHtcYm94MFxoZmlsXGJveDJ9JQorfQorJQorJSBBbGwgZG9uZSB3aXRoIGRvdWJsZSBjb2x1bW5zLgorXGRlZlxlbmRkb3VibGVjb2x1bW5zeyUKKyAgXG91dHB1dCA9IHslCisgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQorICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KKyAgICBcYmFsYW5jZWNvbHVtbnMKKyAgICAlCisgICAgJSBJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHRvbyBtdWNoIG1hdGVyaWFsIGZvciB0aGUgY3VycmVudCBwYWdlLAorICAgICUgdGhvdWdoLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIFxvdXRwdXQKKyAgICAlIGludm9jYXRpb24gZW5kcy4gIEhhdmluZyBjYWxsZWQgXGJhbGFuY2Vjb2x1bW5zIG9uY2UsIHdlIGRvIG5vdAorICAgICUgd2FudCB0byBjYWxsIGl0IGFnYWluLiAgVGhlcmVmb3JlLCByZXNldCBcb3V0cHV0IHRvIGl0cyBub3JtYWwKKyAgICAlIGRlZmluaXRpb24gcmlnaHQgYXdheS4gIChXZSBob3BlIFxiYWxhbmNlY29sdW1ucyB3aWxsIG5ldmVyIGJlCisgICAgJSBjYWxsZWQgb24gdG8gYmFsYW5jZSB0b28gbXVjaCBtYXRlcmlhbCwgYnV0IGlmIGl0IGlzLCB0aGlzIG1ha2VzCisgICAgJSB0aGUgb3V0cHV0IHNvbWV3aGF0IG1vcmUgcGFsYXRhYmxlLikKKyAgICBcZ2xvYmFsXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fSUKKyAgfSUKKyAgXGVqZWN0CisgIFxlbmRncm91cCAlIHN0YXJ0ZWQgaW4gXGJlZ2luZG91YmxlY29sdW1ucworICAlCisgICUgXHBhZ2Vnb2FsIHdhcyBzZXQgdG8gdGhlIGRvdWJsZWQgXHZzaXplIGFib3ZlLCBzaW5jZSB3ZSByZXN0YXJ0ZWQKKyAgJSB0aGUgY3VycmVudCBwYWdlLiAgV2UncmUgbm93IGJhY2sgdG8gbm9ybWFsIHNpbmdsZS1jb2x1bW4KKyAgJSB0eXBlc2V0dGluZywgc28gcmVzZXQgXHBhZ2Vnb2FsIHRvIHRoZSBub3JtYWwgXHZzaXplIChhZnRlciB0aGUKKyAgJSBcZW5kZ3JvdXAgd2hlcmUgXHZzaXplIGdvdCByZXN0b3JlZCkuCisgIFxwYWdlZ29hbCA9IFx2c2l6ZQorfQorJQorJSBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG91YmxlIGNvbHVtbiBtYXRlcmlhbC4KK1xkZWZcYmFsYW5jZWNvbHVtbnN7JQorICBcc2V0Ym94MCA9IFx2Ym94e1x1bnZib3gyNTV9JSBsaWtlIFxib3gyNTUgYnV0IG1vcmUgZWZmaWNpZW50LCBzZWUgcC4xMjAuCisgIFxkaW1lbkAgPSBcaHQwCisgIFxhZHZhbmNlXGRpbWVuQCBieSBcdG9wc2tpcAorICBcYWR2YW5jZVxkaW1lbkAgYnktXGJhc2VsaW5lc2tpcAorICBcZGl2aWRlXGRpbWVuQCBieSAyICUgdGFyZ2V0IHRvIHNwbGl0IHRvCisgICVkZWJ1Z1xtZXNzYWdle2ZpbmFsIDItY29sdW1uIG1hdGVyaWFsIGhlaWdodD1cdGhlXGh0MCwgdGFyZ2V0PVx0aGVcZGltZW5ALn0lCisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlIExvb3AgdW50aWwgd2UgZ2V0IGEgZGVjZW50IGJyZWFrcG9pbnQuCisgIHslCisgICAgXHZiYWRuZXNzID0gMTAwMDAKKyAgICBcbG9vcAorICAgICAgXGdsb2JhbFxzZXRib3gzID0gXGNvcHkwCisgICAgICBcZ2xvYmFsXHNldGJveDEgPSBcdnNwbGl0MyB0byBcZGltZW5ACisgICAgXGlmZGltXGh0Mz5cZGltZW5ACisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZGltZW5AIGJ5IDFwdAorICAgIFxyZXBlYXQKKyAgfSUKKyAgJWRlYnVnXG1lc3NhZ2V7c3BsaXQgdG8gXHRoZVxkaW1lbkAsIGNvbHVtbiBoZWlnaHRzOiBcdGhlXGh0MSwgXHRoZVxodDMufSUKKyAgXHNldGJveDA9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gxfSUKKyAgXHNldGJveDI9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gzfSUKKyAgJQorICBccGFnZXNvZmFyCit9CitcY2F0Y29kZWBcQCA9IFxvdGhlcgorCisKK1xtZXNzYWdle3NlY3Rpb25pbmcsfQorJSBDaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4KKworJSBcdW5udW1iZXJlZG5vIGlzIGFuIG94eW1vcm9uLCBvZiBjb3Vyc2UuICBCdXQgd2UgY291bnQgdGhlIHVubnVtYmVyZWQKKyUgc2VjdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhlbSB1bmFtYmlndW91c2x5IGluIHRoZSBwZGYKKyUgb3V0bGluZXMgYnkgdGhlaXIgInNlY3Rpb24gbnVtYmVyIi4gIFdlIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBjaGFwdGVyCislIG51bWJlcnMgYnkgc3RhcnRpbmcgdGhlbSBhdCAxMDAwMC4gIChJZiBhIGRvY3VtZW50IGV2ZXIgaGFzIDEwMDAwCislIGNoYXB0ZXJzLCB3ZSdyZSBpbiB0cm91YmxlIGFueXdheSwgSSdtIHN1cmUuKQorXG5ld2NvdW50XHVubnVtYmVyZWRubyBcdW5udW1iZXJlZG5vID0gMTAwMDAKK1xuZXdjb3VudFxjaGFwbm8KK1xuZXdjb3VudFxzZWNubyAgICAgICAgXHNlY25vPTAKK1xuZXdjb3VudFxzdWJzZWNubyAgICAgXHN1YnNlY25vPTAKK1xuZXdjb3VudFxzdWJzdWJzZWNubyAgXHN1YnN1YnNlY25vPTAKKworJSBUaGlzIGNvdW50ZXIgaXMgZnVubnkgc2luY2UgaXQgY291bnRzIHRocm91Z2ggY2hhcmNvZGVzIG9mIGxldHRlcnMgQSwgQiwgLi4uCitcbmV3Y291bnRcYXBwZW5kaXhubyAgXGFwcGVuZGl4bm8gPSBgXEAKKyUKKyUgXGRlZlxhcHBlbmRpeGxldHRlcntcY2hhclx0aGVcYXBwZW5kaXhub30KKyUgV2UgZG8gdGhlIGZvbGxvd2luZyB1Z2x5IGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgdGhlIGFib3ZlIHNpbXBsZQorJSBjb25zdHJ1Y3QgZm9yIHRoZSBzYWtlIG9mIHBkZnRleCwgd2hpY2ggbmVlZHMgdGhlIGFjdHVhbAorJSBsZXR0ZXIgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdHlwZXNldC4KKyUKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KKyUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCislIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCitcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc3NlY3Rpb257fQorCitcbmV3Y291bnRcYWJzc2VjbGV2ZWwgJSB1c2VkIHRvIGNhbGN1bGF0ZSBwcm9wZXIgaGVhZGluZyBsZXZlbAorXG5ld2NvdW50XHNlY2Jhc2Vcc2VjYmFzZT0wICUgQHJhaXNlc2VjdGlvbnMvQGxvd2Vyc2VjdGlvbnMgbW9kaWZ5IHRoaXMgY291bnQKKworJSBAcmFpc2VzZWN0aW9uczogdHJlYXQgQHNlY3Rpb24gYXMgY2hhcHRlciwgQHN1YnNlY3Rpb24gYXMgc2VjdGlvbiwgZXRjLgorXGRlZlxyYWlzZXNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IC0xfQorXGxldFx1cD1ccmFpc2VzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIEBsb3dlcnNlY3Rpb25zOiB0cmVhdCBAY2hhcHRlciBhcyBzZWN0aW9uLCBAc2VjdGlvbiBhcyBzdWJzZWN0aW9uLCBldGMuCitcZGVmXGxvd2Vyc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgMX0KK1xsZXRcZG93bj1cbG93ZXJzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIHdlIG9ubHkgaGF2ZSBzdWJzdWIuCitcY2hhcmRlZlxtYXhzZWNsZXZlbCA9IDMKKyUKKyUgQSBudW1iZXJlZCBzZWN0aW9uIHdpdGhpbiBhbiB1bm51bWJlcmVkIGNoYW5nZXMgdG8gdW5udW1iZXJlZCB0b28uCislIFRvIGFjaGl2ZSB0aGlzLCByZW1lbWJlciB0aGUgImJpZ2dlc3QiIHVubnVtLiBzZWMuIHdlIGFyZSBjdXJyZW50bHkgaW46CitcY2hhcmRlZlx1bm1sZXZlbCA9IFxtYXhzZWNsZXZlbAorJQorJSBUcmFjZSB3aGV0aGVyIHRoZSBjdXJyZW50IGNoYXB0ZXIgaXMgYW4gYXBwZW5kaXggb3Igbm90OgorJSBcY2hhcGhlYWR0eXBlIGlzICJOIiBvciAiQSIsIHVubnVtYmVyZWQgY2hhcHRlcnMgYXJlIGlnbm9yZWQuCitcZGVmXGNoYXBoZWFkdHlwZXtOfQorCislIENob29zZSBhIGhlYWRpbmcgbWFjcm8KKyUgIzEgaXMgaGVhZGluZyB0eXBlCislICMyIGlzIGhlYWRpbmcgbGV2ZWwKKyUgIzMgaXMgdGV4dCBmb3IgaGVhZGluZworXGRlZlxnZW5oZWFkIzEjMiMzeyUKKyAgJSBDb21wdXRlIHRoZSBhYnMuIHNlYy4gbGV2ZWw6CisgIFxhYnNzZWNsZXZlbD0jMgorICBcYWR2YW5jZVxhYnNzZWNsZXZlbCBieSBcc2VjYmFzZQorICAlIE1ha2Ugc3VyZSBcYWJzc2VjbGV2ZWwgZG9lc24ndCBmYWxsIG91dHNpZGUgdGhlIHJhbmdlOgorICBcaWZudW0gXGFic3NlY2xldmVsIDwgMAorICAgIFxhYnNzZWNsZXZlbCA9IDAKKyAgXGVsc2UKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gMworICAgICAgXGFic3NlY2xldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBUaGUgaGVhZGluZyB0eXBlOgorICBcZGVmXGhlYWR0eXBleyMxfSUKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCBcdW5tbGV2ZWwKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gXGFic3NlY2xldmVsCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBDaGVjayBmb3IgYXBwZW5kaXggc2VjdGlvbnM6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA9IDAKKyAgICAgIFxlZGVmXGNoYXBoZWFkdHlwZXtcaGVhZHR5cGV9JQorICAgIFxlbHNlCisgICAgICBcaWYgXGhlYWR0eXBlIEFcaWYgXGNoYXBoZWFkdHlwZSBOJQorCVxlcnJtZXNzYWdle0BhcHBlbmRpeC4uLiB3aXRoaW4gYSBub24tYXBwZW5kaXggY2hhcHRlcn0lCisgICAgICBcZmlcZmkKKyAgICBcZmkKKyAgICAlIENoZWNrIGZvciBudW1iZXJlZCB3aXRoaW4gdW5udW1iZXJlZDoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gXHVubWxldmVsCisgICAgICBcZGVmXGhlYWR0eXBle1V9JQorICAgIFxlbHNlCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgTm93IHByaW50IHRoZSBoZWFkaW5nOgorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCVx1bm51bWJlcmVkenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWYgXGhlYWR0eXBlIEElCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcYXBwZW5kaXh6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHNlY3Rpb256enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcY2hhcHRlcnp6ensjM30lCisgICAgICBcb3IgXHNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIGFuIGludGVyZmFjZToKK1xkZWZcbnVtaGVhZHtcZ2VuaGVhZCBOfQorXGRlZlxhcHBoZWFke1xnZW5oZWFkIEF9CitcZGVmXHVubm1oZWFke1xnZW5oZWFkIFV9CisKKyUgQGNoYXB0ZXIsIEBhcHBlbmRpeCwgQHVubnVtYmVyZWQuICBJbmNyZW1lbnQgdG9wLWxldmVsIGNvdW50ZXIsIHJlc2V0CislIGFsbCBsb3dlci1sZXZlbCBzZWN0aW9uaW5nIGNvdW50ZXJzIHRvIHplcm8uCislCislIEFsc28gc2V0IFxjaGFwbGV2ZWxwcmVmaXgsIHdoaWNoIHdlIHByZXBlbmQgdG8gQGZsb2F0IHNlcXVlbmNlIG51bWJlcnMKKyUgKGUuZy4sIGZpZ3VyZXMpLCBxLnYuICBCeSBkZWZhdWx0IChiZWZvcmUgYW55IGNoYXB0ZXIpLCB0aGF0IGlzIGVtcHR5LgorXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyUKK1xvdXRlclxwYXJzZWFyZ2RlZlxjaGFwdGVye1xudW1oZWFkMHsjMX19ICUgbm9ybWFsbHkgbnVtaGVhZDAgY2FsbHMgY2hhcHRlcnp6egorXGRlZlxjaGFwdGVyenp6IzF7JQorICAlIHNlY3Rpb24gcmVzZXR0aW5nIGlzIFxnbG9iYWwgaW4gY2FzZSB0aGUgY2hhcHRlciBpcyBpbiBhIGdyb3VwLCBzdWNoCisgICUgYXMgYW4gQGluY2x1ZGUgZmlsZS4KKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcY2hhcG5vIGJ5IDEKKyAgJQorICAlIFVzZWQgZm9yIFxmbG9hdC4KKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1x0aGVcY2hhcG5vLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXG1lc3NhZ2V7XHB1dHdvcmRDaGFwdGVyXHNwYWNlIFx0aGVcY2hhcG5vfSUKKyAgJQorICAlIFdyaXRlIHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgXGNoYXBtYWNyb3sjMX17WW51bWJlcmVkfXtcdGhlXGNoYXBub30lCisgICUKKyAgJSBTbyBAc2VjdGlvbiBhbmQgdGhlIGxpa2UgYXJlIG51bWJlcmVkIHVuZGVybmVhdGggdGhpcyBjaGFwdGVyLgorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXh7XGFwcGhlYWQweyMxfX0gJSBub3JtYWxseSBhcHBoZWFkMCBjYWxscyBhcHBlbmRpeHp6egorXGRlZlxhcHBlbmRpeHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcYXBwZW5kaXhsZXR0ZXIufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcZGVmXGFwcGVuZGl4bnVte1xwdXR3b3JkQXBwZW5kaXhcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKKyAgXG1lc3NhZ2V7XGFwcGVuZGl4bnVtfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxhcHBlbmRpeHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWR7XHVubm1oZWFkMHsjMX19ICUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6enoKK1xkZWZcdW5udW1iZXJlZHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcdW5udW1iZXJlZG5vIGJ5IDEKKyAgJQorICAlIFNpbmNlIGFuIHVubnVtYmVyZWQgaGFzIG5vIG51bWJlciwgbm8gcHJlZml4IGZvciBmaWd1cmVzLgorICBcZ2xvYmFsXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICAlIFRoaXMgdXNlZCB0byBiZSBzaW1wbHkgXG1lc3NhZ2V7IzF9LCBidXQgVGVYIGZ1bGx5IGV4cGFuZHMgdGhlCisgICUgYXJndW1lbnQgdG8gXG1lc3NhZ2UuICBUaGVyZWZvcmUsIGlmICMxIGNvbnRhaW5lZCBALWNvbW1hbmRzLCBUZVgKKyAgJSBleHBhbmRlZCB0aGVtLiAgRm9yIGV4YW1wbGUsIGluIGBAdW5udW1iZXJlZCBUaGUgQGNpdGV7Qm9va30nLCBUZVgKKyAgJSBleHBhbmRlZCBAY2l0ZSAod2hpY2ggdHVybnMgb3V0IHRvIGNhdXNlIGVycm9ycyBiZWNhdXNlIFxjaXRlIGlzIG1lYW50CisgICUgdG8gYmUgZXhlY3V0ZWQsIG5vdCBleHBhbmRlZCkuCisgICUKKyAgJSBBbnl3YXksIHdlIGRvbid0IHdhbnQgdGhlIGZ1bGx5LWV4cGFuZGVkIGRlZmluaXRpb24gb2YgQGNpdGUgdG8gYXBwZWFyCisgICUgYXMgYSByZXN1bHQgb2YgdGhlIFxtZXNzYWdlLCB3ZSBqdXN0IHdhbnQgYEBjaXRlJyBpdHNlbGYuICBXZSB1c2UKKyAgJSBcdGhlPHRva3MgcmVnaXN0ZXI+IHRvIGFjaGlldmUgdGhpczogVGVYIGV4cGFuZHMgXHRoZTx0b2tzPiBvbmx5IG9uY2UsCisgICUgc2ltcGx5IHlpZWxkaW5nIHRoZSBjb250ZW50cyBvZiA8dG9rcyByZWdpc3Rlcj4uICAoV2UgYWxzbyBkbyB0aGlzIGZvcgorICAlIHRoZSB0b2MgZW50cmllcy4pCisgIFx0b2tzMCA9IHsjMX0lCisgIFxtZXNzYWdleyhcdGhlXHRva3MwKX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXHVubnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnN1YnNlYworfQorCislIEBjZW50ZXJjaGFwIGlzIGxpa2UgQHVubnVtYmVyZWQsIGJ1dCB0aGUgaGVhZGluZyBpcyBjZW50ZXJlZC4KK1xvdXRlclxwYXJzZWFyZ2RlZlxjZW50ZXJjaGFweyUKKyAgJSBXZWxsLCB3ZSBjb3VsZCBkbyB0aGUgZm9sbG93aW5nIGluIGEgZ3JvdXAsIGJ1dCB0aGF0IHdvdWxkIGJyZWFrCisgICUgYW4gYXNzdW1wdGlvbiB0aGF0IFxjaGFwbWFjcm8gaXMgY2FsbGVkIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwuCisgICUgVGh1cyB3ZSBhcmUgc2FmZXIgdGhpcyB3YXk6CQktLWthc2FsLCAyNGZlYjA0CisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXGNlbnRlcnBhcmFtZXRlcnMKKyAgXHVubm1oZWFkMHsjMX0lCisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4Cit9CisKKyUgQHRvcCBpcyBsaWtlIEB1bm51bWJlcmVkLgorXGxldFx0b3BcdW5udW1iZXJlZAorCislIFNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc2Vje1xudW1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgc2Vjenp6CitcZGVmXHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHNlY3Rpb257XGFwcGhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHNlY3Rpb256enoKK1xkZWZcYXBwZW5kaXhzZWN0aW9uenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNub30lCit9CitcbGV0XGFwcGVuZGl4c2VjXGFwcGVuZGl4c2VjdGlvbgorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHNlY3tcdW5ubWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc2Vjenp6CitcZGVmXHVubnVtYmVyZWRzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNub30lCit9CisKKyUgU3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzZWN7XGFwcGhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnNlY3tcdW5ubWhlYWQyeyMxfX0gJW5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworJSBTdWJzdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnN1YnNlY3tcbnVtaGVhZDN7IzF9fSAlIG5vcm1hbGx5IG51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic3Vic2Vje1xhcHBoZWFkM3sjMX19ICUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN7XHVubm1oZWFkM3sjMX19ICVub3JtYWxseSB1bm51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGNvbnRyb2wgd2hhdCB0aGUgc2VjdGlvbiBjb21tYW5kcyBkbywgYWNjb3JkaW5nCislIHRvIHdoYXQga2luZCBvZiBjaGFwdGVyIHdlIGFyZSBpbiAob3JkaW5hcnksIGFwcGVuZGl4LCBvciB1bm51bWJlcmVkKS4KKyUgRGVmaW5lIHRoZW0gYnkgZGVmYXVsdCBmb3IgYSBudW1iZXJlZCBjaGFwdGVyLgorXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCitcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKK1xsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworCislIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKKworJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6CislICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKKyUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KKyUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQorJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgorJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCislICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KKworCitcZGVmXG1ham9yaGVhZGluZ3slCisgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCisgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egorfQorCitcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQorXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKKyAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXHBhcnNlYXJnZGVmXGhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3Vic3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworJSUlIERlZmluZSBwbGFpbiBjaGFwdGVyIHN0YXJ0cywgYW5kIHBhZ2Ugb24vb2ZmIHN3aXRjaGluZyBmb3IgaXQKKyUgUGFyYW1ldGVyIGNvbnRyb2xsaW5nIHNraXAgYmVmb3JlIGNoYXB0ZXIgaGVhZGluZ3MgKGlmIG5lZWRlZCkKKworXG5ld3NraXBcY2hhcGhlYWRpbmdza2lwCisKK1xkZWZcY2hhcGJyZWFre1xkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXAgey00MDAwfX0KK1xkZWZcY2hhcHBhZ2Vye1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KK1xkZWZcY2hhcG9kZHBhZ2V7XGNoYXBwYWdlciBcaWZvZGRccGFnZW5vIFxlbHNlIFxoYm94IHRvIDBwdHt9IFxjaGFwcGFnZXJcZml9CisKK1xkZWZcc2V0Y2hhcHRlcm5ld3BhZ2UgIzEge1xjc25hbWUgQ0hBUFBBRyMxXGVuZGNzbmFtZX0KKworXGRlZlxDSEFQUEFHb2ZmeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBicmVhaworXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcn0KKworXGRlZlxDSEFQUEFHb257JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU3NpbmdsZX19CisKK1xkZWZcQ0hBUFBBR29kZHslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfX0KKworXENIQVBQQUdvbgorCislIENoYXB0ZXIgb3BlbmluZy4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIHR5cGUgKFludW1iZXJlZCwgWW5vdGhpbmcsCislIFlhcHBlbmRpeCwgWW9taXRmcm9tdG9jKSwgIzMgdGhlIGNoYXB0ZXIgbnVtYmVyLgorJQorJSBUbyB0ZXN0IGFnYWluc3Qgb3VyIGFyZ3VtZW50LgorXGRlZlxZbm90aGluZ2tleXdvcmR7WW5vdGhpbmd9CitcZGVmXFlvbWl0ZnJvbXRvY2tleXdvcmR7WW9taXRmcm9tdG9jfQorXGRlZlxZYXBwZW5kaXhrZXl3b3Jke1lhcHBlbmRpeH0KKyUKK1xkZWZcY2hhcG1hY3JvIzEjMiMzeyUKKyAgXHBjaGFwc2VwbWFjcm8KKyAgeyUKKyAgICBcY2hhcGZvbnRzIFxybQorICAgICUKKyAgICAlIEhhdmUgdG8gZGVmaW5lIFx0aGlzc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBcZG9ub2RlcmVmLCBiZWNhdXNlIHRoZQorICAgICUgeHJlZiBjb2RlIGV2ZW50dWFsbHkgdXNlcyBpdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBoYXMgdG8gYmUgY2FsbGVkCisgICAgJSBhZnRlciBccGNoYXBzZXBtYWNybywgb3IgdGhlIGhlYWRsaW5lIHdpbGwgY2hhbmdlIHRvbyBzb29uLgorICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZ2RlZlx0aGlzY2hhcHRlcm5hbWV7IzF9JQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzZXBhcmF0aW5nIHNwYWNlIGlmIHdlIGhhdmUgYSBjaGFwdGVyL2FwcGVuZGl4CisgICAgJSBudW1iZXIsIGFuZCBkb24ndCBwcmludCB0aGUgdW5udW1iZXJlZCBgYG51bWJlcicnLgorICAgIFxkZWZcdGVtcHR5cGV7IzJ9JQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5uY2hhcH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUgY29udGVudHMgbGlrZSB1bm51bWJlcmVkLCBidXQgbm8gdG9jIGVudHJ5CisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnt9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgJSBXZSBkb24ndCBzdWJzdGl0dXRlIHRoZSBhY3R1YWwgY2hhcHRlciBuYW1lIGludG8gXHRoaXNjaGFwdGVyCisgICAgICAlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpdHMgbWFjcm9zIGV2YWx1YXRlZCBub3cuICBBbmQgd2UgZG9uJ3QKKyAgICAgICUgdXNlIFx0aGlzc2VjdGlvbiBiZWNhdXNlIHRoYXQgY2hhbmdlcyB3aXRoIGVhY2ggc2VjdGlvbi4KKyAgICAgICUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQXBwZW5kaXh7fSBcYXBwZW5kaXhsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW1jaGFwfSUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQ2hhcHRlcnt9IFx0aGVcY2hhcG5vOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSBmb3IgdGhpcyBjaGFwdGVyLiAgTXVzdCBjb21lIGJlZm9yZSB0aGUKKyAgICAlIFxkb25vZGVyZWYsIGJlY2F1c2Ugd2UgaW5jbHVkZSB0aGUgY3VycmVudCBub2RlIG5hbWUgaW4gdGhlIHRvYworICAgICUgZW50cnksIGFuZCBcZG9ub2RlcmVmIHJlc2V0cyBpdCB0byBlbXB0eS4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZX17IzF9eyMzfSUKKyAgICAlCisgICAgJSBGb3IgcGRmdGV4LCB3ZSBoYXZlIHRvIHdyaXRlIG91dCB0aGUgbm9kZSBkZWZpbml0aW9uIChha2EsIG1ha2UKKyAgICAlIHRoZSBwZGZkZXN0KSBhZnRlciBhbnkgcGFnZSBicmVhaywgYnV0IGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgaGFzCisgICAgJSBiZWVuIHR5cGVzZXQuICBJZiB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBwZGYgb3V0bGluZSBpcyBhZnRlciB0aGUKKyAgICAlIHRleHQsIHRoZW4ganVtcGluZyBmcm9tIHRoZSBvdXRsaW5lIG1heSB3aW5kIHVwIHdpdGggdGhlIHRleHQgbm90CisgICAgJSBiZWluZyB2aXNpYmxlLCBmb3IgaW5zdGFuY2UgdW5kZXIgaGlnaCBtYWduaWZpY2F0aW9uLgorICAgIFxkb25vZGVyZWZ7IzJ9JQorICAgICUKKyAgICAlIFR5cGVzZXQgdGhlIGFjdHVhbCBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKKyAgICAgICAgICBcdW5oYm94MCAjMVxwYXJ9JQorICB9JQorICBcbm9icmVha1xiaWdza2lwICUgbm8gcGFnZSBicmVhayBhZnRlciBhIGNoYXB0ZXIgdGl0bGUKKyAgXG5vYnJlYWsKK30KKworJSBAY2VudGVyY2hhcCAtLSBjZW50ZXJlZCBhbmQgdW5udW1iZXJlZC4KK1xsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4CitcZGVmXGNlbnRlcnBhcmFtZXRlcnN7JQorICBcYWR2YW5jZVxyaWdodHNraXAgYnkgM1xyaWdodHNraXAKKyAgXGxlZnRza2lwID0gXHJpZ2h0c2tpcAorICBccGFyZmlsbHNraXAgPSAwcHQKK30KKworCislIEkgZG9uJ3QgdGhpbmsgdGhpcyBjaGFwdGVyIHN0eWxlIGlzIHN1cHBvcnRlZCBhbnkgbW9yZSwgc28gSSdtIG5vdAorJSB1cGRhdGluZyBpdCB3aXRoIHRoZSBuZXcgbm9kZXJlZiBzdHVmZi4gIFdlJ2xsIHNlZS4gIC0ta2FybCwgMTFhdWcwMy4KKyUKK1xkZWZcc2V0Y2hhcHRlcnN0eWxlICMxIHtcY3NuYW1lIENIQVBGIzFcZW5kY3NuYW1lfQorJQorXGRlZlx1bm5jaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAorICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybSAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxDSEFQRm9wZW57JQorICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KKyAgXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUKK1xuZXdza2lwXHNlY2hlYWRpbmdza2lwCitcZGVmXHNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc2VjaGVhZGluZ3NraXB7LTEwMDB9fQorCislIFN1YnNlY3Rpb24gdGl0bGVzLgorXG5ld3NraXBcc3Vic2VjaGVhZGluZ3NraXAKK1xkZWZcc3Vic2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzdWJzZWNoZWFkaW5nc2tpcHstNTAwfX0KKworJSBTdWJzdWJzZWN0aW9uIHRpdGxlcy4KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ3NraXB7XHN1YnNlY2hlYWRpbmdza2lwfQorXGRlZlxzdWJzdWJzZWNoZWFkaW5nYnJlYWt7XHN1YnNlY2hlYWRpbmdicmVha30KKworCislIFByaW50IGFueSBzaXplLCBhbnkgdHlwZSwgc2VjdGlvbiB0aXRsZS4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIGxldmVsIChzZWMvc3Vic2VjL3N1YnN1YnNlYyksICMzIGlzCislIHRoZSBzZWN0aW9uIHR5cGUgZm9yIHhyZWZzIChZbnVtYmVyZWQsIFlub3RoaW5nLCBZYXBwZW5kaXgpLCAjNCBpcyB0aGUKKyUgc2VjdGlvbiBudW1iZXIuCislCitcZGVmXHNlY3Rpb25oZWFkaW5nIzEjMiMzIzR7JQorICB7JQorICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCisgICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICAlCisgICAgJSBJbnNlcnQgc3BhY2UgYWJvdmUgdGhlIGhlYWRpbmcuCisgICAgXGNzbmFtZSAjMmhlYWRpbmdicmVha1xlbmRjc25hbWUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGRlZlxzZWN0aW9ubGV2ZWx7IzJ9JQorICAgIFxkZWZcdGVtcHR5cGV7IzN9JQorICAgICUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bX0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGFwbWFjcm8uCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGVcc2VjdGlvbmxldmVsfXsjMX17IzR9JQorICAgICUKKyAgICAlIFdyaXRlIHRoZSBub2RlIHJlZmVyZW5jZSAoPSBwZGYgZGVzdGluYXRpb24gZm9yIHBkZnRleCkuCisgICAgJSBBZ2Fpbiwgc2VlIGNvbW1lbnRzIGluIFxjaGFwbWFjcm8uCisgICAgXGRvbm9kZXJlZnsjM30lCisgICAgJQorICAgICUgSW50ZXJsaW5lIGdsdWUgd2lsbCBiZSBpbnNlcnRlZCB3aGVuIHRoZSB2Ym94IGlzIGNvbXBsZXRlZC4KKyAgICAlIFRoYXQgZ2x1ZSB3aWxsIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBmb3IgdGhlIHBhZ2UsIHNpbmNlIGl0J2xsIGJlCisgICAgJSBwcmVjZWRlZCBieSBhIHdoYXRzaXQgKHVzdWFsbHkgZnJvbSB0aGUgXGRvbm9kZXJlZiwgb3IgZnJvbSB0aGUKKyAgICAlIFx3cml0ZXRvY2VudHJ5IGlmIHRoZXJlIHdhcyBubyBub2RlKS4gIFdlIGRvbid0IHdhbnQgdG8gYWxsb3cgdGhhdAorICAgICUgYnJlYWssIHNpbmNlIHRoZW4gdGhlIHdoYXRzaXRzIGNvdWxkIGVuZCB1cCBvbiBwYWdlIG4gd2hpbGUgdGhlCisgICAgJSBzZWN0aW9uIGlzIG9uIHBhZ2UgbisxLCB0aHVzIHRvYy9ldGMuIGFyZSB3cm9uZy4gIERlYmlhbiBidWcgMjc2MDAwLgorICAgIFxub2JyZWFrCisgICAgJQorICAgICUgT3V0cHV0IHRoZSBhY3R1YWwgc2VjdGlvbiBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwICAlIHplcm8gaWYgbm8gc2VjdGlvbiBudW1iZXIKKyAgICAgICAgICBcdW5oYm94MCAjMX0lCisgIH0lCisgICUgQWRkIGV4dHJhIHNwYWNlIGFmdGVyIHRoZSBoZWFkaW5nIC0tIGhhbGYgb2Ygd2hhdGV2ZXIgY2FtZSBhYm92ZSBpdC4KKyAgJSBEb24ndCBhbGxvdyBzdHJldGNoLCB0aG91Z2guCisgIFxrZXJuIC41IFxjc25hbWUgIzJoZWFkaW5nc2tpcFxlbmRjc25hbWUKKyAgJQorICAlIERvIG5vdCBsZXQgdGhlIGtlcm4gYmUgYSBwb3RlbnRpYWwgYnJlYWtwb2ludCwgYXMgaXQgd291bGQgYmUgaWYgaXQKKyAgJSB3YXMgZm9sbG93ZWQgYnkgZ2x1ZS4KKyAgXG5vYnJlYWsKKyAgJQorICAlIFdlJ2xsIGFsbW9zdCBjZXJ0YWlubHkgc3RhcnQgYSBwYXJhZ3JhcGggbmV4dCwgc28gZG9uJ3QgbGV0IHRoYXQKKyAgJSBnbHVlIGFjY3VtdWxhdGUuICAoTm90IGEgYnJlYWtwb2ludCBiZWNhdXNlIGl0J3MgcHJlY2VkZWQgYnkgYQorICAlIGRpc2NhcmRhYmxlIGl0ZW0uKQorICBcdnNraXAtXHBhcnNraXAKKyAgJSAKKyAgJSBUaGlzIGlzIHB1cmVseSBzbyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGlzIGEga25vd24gXHBlbmFsdHkgPgorICAlIDEwMDAwLiAgVGhpcyBpcyBzbyBcc3RhcnRkZWZ1biBjYW4gYXZvaWQgYWxsb3dpbmcgYnJlYWtwb2ludHMgYWZ0ZXIKKyAgJSBzZWN0aW9uIGhlYWRpbmdzLiAgT3RoZXJ3aXNlLCBpdCB3b3VsZCBpbnNlcnQgYSB2YWxpZCBicmVha3BvaW50IGJldHdlZW46CisgICUgCisgICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKKyAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgXHBlbmFsdHkgMTAwMDEKK30KKworCitcbWVzc2FnZXt0b2MsfQorJSBUYWJsZSBvZiBjb250ZW50cy4KK1xuZXd3cml0ZVx0b2NmaWxlCisKKyUgV3JpdGUgYW4gZW50cnkgdG8gdGhlIHRvYyBmaWxlLCBvcGVuaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKyUgQ2FsbGVkIGZyb20gQGNoYXB0ZXIsIGV0Yy4KKyUKKyUgRXhhbXBsZSB1c2FnZTogXHdyaXRldG9jZW50cnl7c2VjfXtTZWN0aW9uIE5hbWV9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99CislIFdlIGFwcGVuZCB0aGUgY3VycmVudCBub2RlIG5hbWUgKGlmIGFueSkgYW5kIHBhZ2UgbnVtYmVyIGFzIGFkZGl0aW9uYWwKKyUgYXJndW1lbnRzIGZvciB0aGUgXHtjaGFwLHNlYywuLi59ZW50cnkgbWFjcm9zIHdoaWNoIHdpbGwgZXZlbnR1YWxseQorJSByZWFkIHRoaXMuICBUaGUgbm9kZSBuYW1lIGlzIHVzZWQgaW4gdGhlIHBkZiBvdXRsaW5lcyBhcyB0aGUKKyUgZGVzdGluYXRpb24gdG8ganVtcCB0by4KKyUKKyUgV2Ugb3BlbiB0aGUgLnRvYyBmaWxlIGZvciB3cml0aW5nIGhlcmUgaW5zdGVhZCBvZiBhdCBAc2V0ZmlsZW5hbWUgKG9yCislIGFueSBvdGhlciBmaXhlZCB0aW1lKSBzbyB0aGF0IEBjb250ZW50cyBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorJSBCdXQgaWYgIzEgaXMgYG9taXQnLCB0aGVuIHdlIGRvbid0IGRvIGFueXRoaW5nLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUKKyUgdGFibGUgb2YgY29udGVudHMgY2hhcHRlciBvcGVuaW5ncyB0aGVtc2VsdmVzLgorJQorXG5ld2lmXGlmdG9jZmlsZW9wZW5lZAorXGRlZlxvbWl0a2V5d29yZHtvbWl0fSUKKyUKK1xkZWZcd3JpdGV0b2NlbnRyeSMxIzIjM3slCisgIFxlZGVmXHdyaXRldG9jdHlwZXsjMX0lCisgIFxpZnhcd3JpdGV0b2N0eXBlXG9taXRrZXl3b3JkIFxlbHNlCisgICAgXGlmdG9jZmlsZW9wZW5lZFxlbHNlCisgICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcdG9jZmlsZSA9IFxqb2JuYW1lLnRvYworICAgICAgXGdsb2JhbFx0b2NmaWxlb3BlbmVkdHJ1ZQorICAgIFxmaQorICAgICUKKyAgICBcaWZsaW5rcworICAgICAge1xhdGR1bW1pZXMKKyAgICAgICBcZWRlZlx0ZW1weyUKKyAgICAgICAgIFx3cml0ZVx0b2NmaWxle0AjMWVudHJ5eyMyfXsjM317XGxhc3Rub2RlfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICAgXHRlbXAKKyAgICAgIH0lCisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJSAKK1xkZWZcYWN0aXZlY2F0Y29kZXN7JQorICBcY2F0Y29kZWBcIj1cYWN0aXZlCisgIFxjYXRjb2RlYFwkPVxhY3RpdmUKKyAgXGNhdGNvZGVgXDw9XGFjdGl2ZQorICBcY2F0Y29kZWBcPj1cYWN0aXZlCisgIFxjYXRjb2RlYFxcPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF49XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgIFxjYXRjb2RlYFx8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXH49XGFjdGl2ZQorfQorCisKKyUgUmVhZCB0aGUgdG9jIGZpbGUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IFRleGluZm8gaW5wdXQuCitcZGVmXHJlYWR0b2NmaWxleyUKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGFjdGl2ZWNhdGNvZGVzCisgIFxpbnB1dCBcam9ibmFtZS50b2MKK30KKworXG5ld3NraXBcY29udGVudHNyaWdodG1hcmdpbiBcY29udGVudHNyaWdodG1hcmdpbj0xaW4KK1xuZXdjb3VudFxzYXZlcGFnZW5vCitcbmV3Y291bnRcbGFzdG5lZ2F0aXZlcGFnZW5vIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSAtMQorCislIFByZXBhcmUgdG8gcmVhZCB3aGF0IHdlJ3ZlIHdyaXR0ZW4gdG8gXHRvY2ZpbGUuCislCitcZGVmXHN0YXJ0Y29udGVudHMjMXslCisgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAlIHN0YXJ0IG9uIGFuIG9kZCBwYWdlLCB1bmxpa2UgY2hhcHRlcnMuICBUaHVzLCB3ZSBtYWludGFpbgorICAlIFxjb250ZW50c2FsaWdubWFjcm8gaW4gcGFyYWxsZWwgd2l0aCBccGFnZWFsaWdubWFjcm8uCisgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICBcY29udGVudHNhbGlnbm1hY3JvCisgIFxpbW1lZGlhdGVcY2xvc2VvdXRcdG9jZmlsZQorICAlCisgICUgRG9uJ3QgbmVlZCB0byBwdXQgYENvbnRlbnRzJyBvciBgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KKyAgJSBJdCBpcyBhYnVuZGFudGx5IGNsZWFyIHdoYXQgdGhleSBhcmUuCisgIFxkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgXGNoYXBtYWNyb3sjMX17WW9taXRmcm9tdG9jfXt9JQorICAlCisgIFxzYXZlcGFnZW5vID0gXHBhZ2VubworICBcYmVnaW5ncm91cCAgICAgICAgICAgICAgICAgICUgU2V0IHVwIHRvIGhhbmRsZSBjb250ZW50cyBmaWxlcyBwcm9wZXJseS4KKyAgICBccmFnZ2VkYm90dG9tICAgICAgICAgICAgICAlIFdvcnJ5IG1vcmUgYWJvdXQgYnJlYWtwb2ludHMgdGhhbiB0aGUgYm90dG9tLgorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cY29udGVudHNyaWdodG1hcmdpbiAlIERvbid0IHVzZSB0aGUgZnVsbCBsaW5lIGxlbmd0aC4KKyAgICAlCisgICAgJSBSb21hbiBudW1lcmFscyBmb3IgcGFnZSBudW1iZXJzLgorICAgIFxpZm51bSBccGFnZW5vPjAgXGdsb2JhbFxwYWdlbm8gPSBcbGFzdG5lZ2F0aXZlcGFnZW5vIFxmaQorfQorCisKKyUgTm9ybWFsIChsb25nKSB0b2MuCitcZGVmXGNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxwZGZtYWtlb3V0bGluZXMKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CisKKyUgQW5kIGp1c3QgdGhlIGNoYXB0ZXJzLgorXGRlZlxzdW1tYXJ5Y29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFNob3J0VE9DfSUKKyAgICAlCisgICAgXGxldFxudW1jaGFwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XGFwcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFx1bm5jaGFwZW50cnkgPSBcc2hvcnR1bm5jaGFwZW50cnkKKyAgICAlIFdlIHdhbnQgYSB0cnVlIHJvbWFuIGhlcmUgZm9yIHRoZSBwYWdlIG51bWJlcnMuCisgICAgXHNlY2ZvbnRzCisgICAgXGxldFxybT1cc2hvcnRjb250cm0gXGxldFxiZj1cc2hvcnRjb250YmYKKyAgICBcbGV0XHNsPVxzaG9ydGNvbnRzbCBcbGV0XHR0PVxzaG9ydGNvbnR0dAorICAgIFxybQorICAgIFxoeXBoZW5wZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxiYXNlbGluZXNraXAgYnkgMXB0ICUgT3BlbiBpdCB1cCBhIGxpdHRsZS4KKyAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0e30KKyAgICBcbGV0XGFwcHNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlCisgICUgV2UnZCBsaWtlIHRvIHJpZ2h0LWp1c3RpZnkgY2hhcHRlciBudW1iZXJzLCBidXQgdGhhdCBsb29rcyBzdHJhbmdlCisgICUgd2l0aCBhcHBlbmRpeCBsZXR0ZXJzLiAgQW5kIHJpZ2h0LWp1c3RpZnlpbmcgbnVtYmVycyBhbmQKKyAgJSBsZWZ0LWp1c3RpZnlpbmcgbGV0dGVycyBsb29rcyBzdHJhbmdlIHdoZW4gdGhlcmUgaXMgbGVzcyB0aGFuIDEwCisgICUgY2hhcHRlcnMuICBIYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRvYyBvbmNlIHRvIGtub3cgaG93IG1hbnkgY2hhcHRlcnMKKyAgJSB0aGVyZSBhcmUgYmVmb3JlIGRlY2lkaW5nIC4uLgorICBcaGJveCB0byAxZW17IzFcaHNzfSUKK30KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4KKyUgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjaGFwdGVyIG9yIHNlY3Rpb24gbmFtZS4KKyUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgorJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgorCislIENoYXB0ZXJzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KK1xkZWZcbnVtY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorJQorJSBDaGFwdGVycywgaW4gdGhlIHNob3J0IHRvYy4KKyUgU2VlIGNvbW1lbnRzIGluIFxkb2NoYXBlbnRyeSByZSB2Ym94IGFuZCByZWxhdGVkIHNldHRpbmdzLgorXGRlZlxzaG9ydGNoYXBlbnRyeSMxIzIjMyM0eyUKKyAgXHRvY2VudHJ5e1xzaG9ydGNoYXBsYWJlbHsjMn1cbGFiZWxzcGFjZSAjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfSUKK30KKworJSBBcHBlbmRpY2VzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KKyUgTmVlZCB0aGUgd29yZCBBcHBlbmRpeCwgYW5kIGEgZml4ZWQtc2l6ZSBib3guCislCitcZGVmXGFwcGVuZGl4Ym94IzF7JQorICAlIFdlIHVzZSBNIHNpbmNlIGl0J3MgcHJvYmFibHkgdGhlIHdpZGVzdCBsZXR0ZXIuCisgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9IE19JQorICBcaGJveCB0byBcd2Qwe1xwdXR3b3JkQXBwZW5kaXh7fSAjMVxoc3N9fQorJQorXGRlZlxhcHBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXtcYXBwZW5kaXhib3h7IzJ9XGxhYmVsc3BhY2UjMX17IzR9fQorCislIFVubnVtYmVyZWQgY2hhcHRlcnMuCitcZGVmXHVubmNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMX17IzR9fQorXGRlZlxzaG9ydHVubmNoYXBlbnRyeSMxIzIjMyM0e1x0b2NlbnRyeXsjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfX0KKworJSBTZWN0aW9ucy4KK1xkZWZcbnVtc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc2VjZW50cnk9XG51bXNlY2VudHJ5CitcZGVmXHVubnNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzF9eyM0fX0KKworJSBTdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic2VjZW50cnk9XG51bXN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBBbmQgc3Vic3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnN1YnNlY2VudHJ5PVxudW1zdWJzdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGxldmVscy4KKyUgU2FtZSBhcyBcZGVmYXVsdHBhcmluZGVudC4KK1xuZXdkaW1lblx0b2NpbmRlbnQgXHRvY2luZGVudCA9IDE1cHQKKworJSBOb3cgZm9yIHRoZSBhY3R1YWwgdHlwZXNldHRpbmcuIEluIGFsbCB0aGVzZSwgIzEgaXMgdGhlIHRleHQgYW5kICMyIGlzIHRoZQorJSBwYWdlIG51bWJlci4KKyUKKyUgSWYgdGhlIHRvYyBoYXMgdG8gYmUgYnJva2VuIG92ZXIgcGFnZXMsIHdlIHdhbnQgaXQgdG8gYmUgYXQgY2hhcHRlcnMKKyUgaWYgYXQgYWxsIHBvc3NpYmxlOyBoZW5jZSB0aGUgXHBlbmFsdHkuCitcZGVmXGRvY2hhcGVudHJ5IzEjMnslCisgICBccGVuYWx0eS0zMDAgXHZza2lwMVxiYXNlbGluZXNraXAgcGx1cy4zM1xiYXNlbGluZXNraXAgbWludXMuMjVcYmFzZWxpbmVza2lwCisgICBcYmVnaW5ncm91cAorICAgICBcY2hhcGVudHJ5Zm9udHMKKyAgICAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKKyAgIFxlbmRncm91cAorICAgXG5vYnJlYWtcdnNraXAgLjI1XGJhc2VsaW5lc2tpcCBwbHVzLjFcYmFzZWxpbmVza2lwCit9CisKK1xkZWZcZG9zZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPVx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9Mlx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnN1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9M1x0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworJSBXZSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIGFzIGZvciB0aGUgaW5kZXggZW50cmllcy4KK1xsZXRcdG9jZW50cnkgPSBcZW50cnkKKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQorCislIFRoZSBAZXJyb3J7fSBjb21tYW5kLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCislCitcbmV3Ym94XGVycm9yYm94CislCit7XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KK1xkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcworJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQorXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0CisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CisKKyUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCislCitcbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZvcm1hdC9Ac21hbGxmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXG1ha2VkaXNwZW52e2Zvcm1hdH17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZsdXNobGVmdDogc2FtZSBhcyBAZm9ybWF0LCBidXQgZG9lc24ndCBvYmV5IFxTRVRkaXNwZW52c2l6ZS4KK1xlbnZkZWZcZmx1c2hsZWZ0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hsZWZ0ID0gXGFmdGVyZW52YnJlYWsKKworJSBAZmx1c2hyaWdodC4KKyUKK1xlbnZkZWZcZmx1c2hyaWdodHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNocmlnaHQgPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQorJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQorJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAorJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgorJQorXGVudmRlZlxxdW90YXRpb257JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCit9CisKKyUgV2UgaGF2ZSByZXRhaW5lZCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZQorJSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRXF1b3RhdGlvbnslCisgIFxwYXIKKyAgXGlmeFxxdW90YXRpb25hdXRob3JcdW5kZWZpbmVkXGVsc2UKKyAgICAlIGluZGVudCBhIGJpdC4KKyAgICBcbGVmdGxpbmV7XGtlcm4gMlxsZWZ0c2tpcCBcc2wgLS0tXHF1b3RhdGlvbmF1dGhvcn0lCisgIFxmaQorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KKworJSBJZiB3ZSdyZSBnaXZlbiBhbiBhcmd1bWVudCwgdHlwZXNldCBpdCBpbiBib2xkIHdpdGggYSBjb2xvbiBhZnRlci4KK1xkZWZccXVvdGF0aW9ubGFiZWwjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIHtcYmYgIzE6IH0lCisgIFxmaQorfQorCisKKyUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CislIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCislIHdlIG5lZWQgdGhlIGN1cmx5IGJyYWNlcyBzbyB0aGF0IG1ha2VpbmZvIHNlZXMgdGhlIEB2ZXJiIGNvbW1hbmQsIGVnOgorJSBgQHZlcmJ4Li4ueCcgd291bGQgbG9vayBsaWtlIHRoZSAnQHZlcmJ4JyBjb21tYW5kLiAgLS1qYW5uZWtlQGdudS5vcmcKKyUKKyUgW0tudXRoXTogRG9uYWxkIEVydmluIEtudXRoLCAxOTk2LiAgVGhlIFRlWGJvb2suCislCislIFtLbnV0aF0gcC4zNDQ7IG9ubHkgd2UgbmVlZCB0byBkbyB0aGUgb3RoZXIgY2hhcmFjdGVycyBUZXhpbmZvIHNldHMKKyUgYWN0aXZlIHRvby4gIE90aGVyd2lzZSwgdGhleSBnZXQgbG9zdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKKyUgdmVyYmF0aW0gbGluZS4KK1xkZWZcZG9zcGVjaWFsc3slCisgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKKyAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQorICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxCislIERpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcYD1cYWN0aXZlXGdkZWZge1xyZWxheFxscX0KK1xlbmRncm91cAorJQorJSBTZXR1cCBmb3IgdGhlIEB2ZXJiIGNvbW1hbmQuCislCislIEVpZ2h0IHNwYWNlcyBmb3IgYSB0YWIKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJlaWdodHNwYWNlc3tcY2F0Y29kZWBcXl5JPVxhY3RpdmVcZGVmXl5Je1wgXCBcIFwgXCBcIFwgXCB9fQorXGVuZGdyb3VwCislCitcZGVmXHNldHVwdmVyYnslCisgIFx0dCAgJSBlYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmVpZ2h0c3BhY2VzCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCit9CisKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYmF0aW0gZW52aXJvbm1lbnQKKyUKKyUgUmVhbCB0YWIgZXhwYW5zaW9uCitcbmV3ZGltZW5cdGFidyBcc2V0Ym94MD1caGJveHtcdHRcc3BhY2V9IFx0YWJ3PThcd2QwICUgdGFiIGFtb3VudAorJQorXGRlZlxzdGFydHRhYmJveHtcc2V0Ym94MD1caGJveFxiZ3JvdXB9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZXhwYW5keyUKKyAgICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgICBcZGVmXl5Je1xsZWF2ZXZtb2RlXGVncm91cAorICAgICAgXGRpbWVuMD1cd2QwICUgdGhlIHdpZHRoIHNvIGZhciwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHRhYgorICAgICAgXGRpdmlkZVxkaW1lbjAgYnlcdGFidworICAgICAgXG11bHRpcGx5XGRpbWVuMCBieVx0YWJ3ICUgY29tcHV0ZSBwcmV2aW91cyBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXGFkdmFuY2VcZGltZW4wIGJ5XHRhYncgICUgYWR2YW5jZSB0byBuZXh0IG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcd2QwPVxkaW1lbjAgXGJveDAgXHN0YXJ0dGFiYm94CisgICAgfSUKKyAgfQorXGVuZGdyb3VwCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworICBcZXZlcnlwYXJ7XHN0YXJ0dGFiYm94fSUKK30KKworJSBEbyB0aGUgQHZlcmIgbWFnaWM6IHZlcmJhdGltIHRleHQgaXMgcXVvdGVkIGJ5IHVuaXF1ZQorJSBkZWxpbWl0ZXIgY2hhcmFjdGVycy4gIEJlZm9yZSBmaXJzdCBkZWxpbWl0ZXIgZXhwZWN0IGEKKyUgcmlnaHQgYnJhY2UsIGFmdGVyIGxhc3QgZGVsaW1pdGVyIGV4cGVjdCBjbG9zaW5nIGJyYWNlOgorJQorJSAgICBcZGVmXGRvdmVyYid7JzxjaGFyPiMxPGNoYXI+J30neyMxfQorJQorJSBbS251dGhdIHAuIDM4Mjsgb25seSBlYXQgb3V0ZXIge30KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFs9MVxjYXRjb2RlYF09MlxjYXRjb2RlYFx7PVxvdGhlclxjYXRjb2RlYFx9PVxvdGhlcgorICBcZ2RlZlxkb3ZlcmJ7IzFbXGRlZlxuZXh0IyMxIzF9WyMjMVxlbmRncm91cF1cbmV4dF0KK1xlbmRncm91cAorJQorXGRlZlx2ZXJie1xiZWdpbmdyb3VwXHNldHVwdmVyYlxkb3ZlcmJ9CislCislCislIERvIHRoZSBAdmVyYmF0aW0gbWFnaWM6IGRlZmluZSB0aGUgbWFjcm8gXGRvdmVyYmF0aW0gc28gdGhhdAorJSB0aGUgKGZpcnN0KSBhcmd1bWVudCBlbmRzIHdoZW4gJ0BlbmQgdmVyYmF0aW0nIGlzIHJlYWNoZWQsIGllOgorJQorJSAgICAgXGRlZlxkb3ZlcmJhdGltIzFAZW5kIHZlcmJhdGlteyMxfQorJQorJSBGb3IgVGV4aW5mbyBpdCdzIGEgbG90IGVhc2llciB0aGFuIGZvciBMYVRlWCwKKyUgYmVjYXVzZSB0ZXhpbmZvJ3MgXHZlcmJhdGltIGRvZXNuJ3Qgc3RvcCBhdCAnXGVuZHt2ZXJiYXRpbX0nOgorJSB3ZSBuZWVkIG5vdCByZWRlZmluZSAnXCcsICd7JyBhbmQgJ30nLgorJQorJSBJbnNwaXJlZCBieSBMYVRlWCdzIHZlcmJhdGltIGNvbW1hbmQgc2V0IFtsYXRleC5sdHhdCislCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcID1cYWN0aXZlCisgIFxvYmV5bGluZXMgJQorICAlIGlnbm9yZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBmaXJzdCBeXk0sIHRoYXQncyB0aGUgbmV3bGluZSBhdCB0aGUgZW5kCisgICUgb2YgdGhlIEB2ZXJiYXRpbSBpbnB1dCBsaW5lIGl0c2VsZi4gIE90aGVyd2lzZSB3ZSBnZXQgYW4gZXh0cmEgYmxhbmsKKyAgJSBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx4ZGVmXGRvdmVyYmF0aW0jMV5eTSMyQGVuZCB2ZXJiYXRpbXsjMlxub2V4cGFuZFxlbmRcZ29iYmxlIHZlcmJhdGltfSUKKyAgJSBXZSByZWFsbHkgd2FudCB7Li4uXGVuZCB2ZXJiYXRpbX0gaW4gdGhlIGJvZHkgb2YgdGhlIG1hY3JvLCBidXQKKyAgJSB3aXRob3V0IHRoZSBhY3RpdmUgc3BhY2U7IHRodXMgd2UgaGF2ZSB0byB1c2UgXHhkZWYgYW5kIFxnb2JibGUuCitcZW5kZ3JvdXAKKyUKK1xlbnZkZWZcdmVyYmF0aW17JQorICAgIFxzZXR1cHZlcmJhdGltXGRvdmVyYmF0aW0KK30KK1xsZXRcRXZlcmJhdGltID0gXGFmdGVyZW52YnJlYWsKKworCislIEB2ZXJiYXRpbWluY2x1ZGUgRklMRSAtIGluc2VydCB0ZXh0IG9mIGZpbGUgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnQuCislCitcZGVmXHZlcmJhdGltaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGRvdmVyYmF0aW1pbmNsdWRlfQorJQorXGRlZlxkb3ZlcmJhdGltaW5jbHVkZSMxeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxzZXR1cHZlcmJhdGltCisgICAgXGlucHV0ICMxCisgICAgXGFmdGVyZW52YnJlYWsKKyAgfSUKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLgorJQorJSBXZSBzYXZlIHRoZSB1bmludGVycHJldGVkIHRva2VucywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBib3guCislIFNhdmluZyB0aGUgdGV4dCBpbiBhIGJveCB3b3VsZCBiZSBtdWNoIGVhc2llciwgYnV0IHRoZW4gYWxsIHRoZQorJSB0eXBlc2V0dGluZyBjb21tYW5kcyAoQHNtYWxsYm9vaywgZm9udCBjaGFuZ2VzLCBldGMuKSBoYXZlIHRvIGJlIGRvbmUKKyUgYmVmb3JlaGFuZCAtLSBhbmQgYSkgd2Ugd2FudCBAY29weWluZyB0byBiZSBkb25lIGZpcnN0IGluIHRoZSBzb3VyY2UKKyUgZmlsZTsgYikgbGV0dGluZyB1c2VycyBkZWZpbmUgdGhlIGZyb250bWF0dGVyIGluIGFzIGZsZXhpYmxlIG9yZGVyIGFzCislIHBvc3NpYmxlIGlzIHZlcnkgZGVzaXJhYmxlLgorJQorXGRlZlxjb3B5aW5ne1xjaGVja2Vudnt9XGJlZ2luZ3JvdXBcc2NhbmFyZ2N0eHRcZG9jb3B5aW5nfQorXGRlZlxkb2NvcHlpbmcjMUBlbmQgY29weWluZ3tcZW5kZ3JvdXBcZGVmXGNvcHlpbmd0ZXh0eyMxfX0KKyUKK1xkZWZcaW5zZXJ0Y29weWluZ3slCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudCA9IDBwdCAgJSBwYXJhZ3JhcGggaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgb24gdGl0bGUgcGFnZQorICAgIFxzY2FuZXhwXGNvcHlpbmd0ZXh0CisgIFxlbmRncm91cAorfQorCitcbWVzc2FnZXtkZWZ1bnMsfQorJSBAZGVmdW4gZXRjLgorCitcbmV3c2tpcFxkZWZib2R5aW5kZW50IFxkZWZib2R5aW5kZW50PS40aW4KK1xuZXdza2lwXGRlZmFyZ3NpbmRlbnQgXGRlZmFyZ3NpbmRlbnQ9NTBwdAorXG5ld3NraXBcZGVmbGFzdGFyZ21hcmdpbiBcZGVmbGFzdGFyZ21hcmdpbj0xOHB0CisKKyUgU3RhcnQgdGhlIHByb2Nlc3Npbmcgb2YgQGRlZmZuOgorXGRlZlxzdGFydGRlZnVueyUKKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwCisgICAgXG1lZGJyZWFrCisgIFxlbHNlCisgICAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgICAlIHdoaWNoIGlzIHRoZXJlIHRvIGtlZXAgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvZ2V0aGVyIHdpdGggaXRzCisgICAgJSBoZWFkZXIuICBCdXQgaWYgdGhlcmUncyBub3RoaW5nIGJ1dCBoZWFkZXJzLCB3ZSBuZWVkIHRvIGFsbG93IGEKKyAgICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIHNwZWNpZmljYWxseSBmb3IgcGVuYWx0eSAxMDAwMiwgaW5zZXJ0ZWQKKyAgICAlIGJ5IFxkZWZhcmdzY29tbW9uZW5kaW5nLCBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAgICUgY29tbWFuZHMgYWxzbyBpbnNlcnQgYSBub2JyZWFrIHBlbmFsdHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93CisgICAgJSBhIGJyZWFrIGJldHdlZW4gYSBzZWN0aW9uIGhlYWRpbmcgYW5kIGEgZGVmdW4uCisgICAgJSAKKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZmkKKyAgJQorICAlIEFuZCBub3csIGl0J3MgdGltZSB0byByZXVzZSB0aGUgYm9keSBvZiB0aGUgb3JpZ2luYWwgZGVmdW46CisgIFxleHBhbmRhZnRlclxnb2JibGVkZWZ1biMxJQorfQorXGRlZlxnb2JibGVkZWZ1biMxXHN0YXJ0ZGVmdW57fQorCislIFxwcmludGRlZnVubGluZSBcZGVmZm5oZWFkZXJ7dGV4dH0KKyUKK1xkZWZccHJpbnRkZWZ1bmxpbmUjMSMyeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlIGNhbGwgXGRlZmZuaGVhZGVyOgorICAgICMxIzIgXGVuZGhlYWRlcgorICAgICUgY29tbW9uIGVuZGluZzoKKyAgICBcaW50ZXJsaW5lcGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgICBcZW5kZ3JhZgorICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAorICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUKKyAgICAlIEkndmUgdmVyaWZpZWQgdGhhdCBpdCBpcyBuZWNlc3NhcnkgYm90aCBmb3IgZS1UZVggYW5kIGZvciBvcmRpbmFyeSBUZVgKKyAgICAlCQkJCQkJCS0ta2FzYWwsIDI5bm92MDMKKyAgICBcc2NhbnRva2Vuc3sjMVxlbmRpbnB1dH0lCisgIFxlbmRncm91cAorfQorCitcZGVmXHNjYW5leHAjMXslCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHNjYW5tYWNyb3sjMX19JQorICBcdGVtcAorfQorCitcbmV3Y291bnRccGFyYW1ubyAgICUgQ291bnQgb2YgcGFyYW1ldGVycworXG5ld3Rva3NcbWFjbmFtZSAgICAlIE1hY3JvIG5hbWUKK1xuZXdpZlxpZnJlY3Vyc2l2ZSAgJSBJcyBpdCByZWN1cnNpdmU/CisKKyUgTGlzdCBvZiBhbGwgZGVmaW5lZCBtYWNyb3MgaW4gdGhlIGZvcm0KKyUgICAgXGRlZmluZWR1bW15d29yZFxtYWNybzFcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMi4uLgorJSBDdXJyZW50bHkgaXMgYWxzbyBjb250YWlucyBhbGwgQGFsaWFzZXM7IHRoZSBsaXN0IGNhbiBiZSBzcGxpdAorJSBpZiB0aGVyZSBpcyBhIG5lZWQuCitcZGVmXG1hY3JvbGlzdHt9CisKKyUgQWRkIHRoZSBtYWNybyB0byBcbWFjcm9saXN0CitcZGVmXGFkZHRvbWFjcm9saXN0IzF7XGV4cGFuZGFmdGVyIFxhZGR0b21hY3JvbGlzdHh4eCBcY3NuYW1lIzFcZW5kY3NuYW1lfQorXGRlZlxhZGR0b21hY3JvbGlzdHh4eCMxeyUKKyAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xtYWNyb2xpc3RcZGVmaW5lZHVtbXl3b3JkIzF9JQorICAgICBceGRlZlxtYWNyb2xpc3R7XHRoZVx0b2tzMH0lCit9CisKKyUgVXRpbGl0eSByb3V0aW5lcy4KKyUgVGhpcyBkb2VzIFxsZXQgIzEgPSAjMiwgd2l0aCBcY3NuYW1lczsgdGhhdCBpcywKKyUgICBcbGV0IFxjc25hbWUjMVxlbmRjc25hbWUgPSBcY3NuYW1lIzJcZW5kY3NuYW1lCislIChleGNlcHQgb2YgY291cnNlIHdlIGhhdmUgdG8gcGxheSBleHBhbnNpb24gZ2FtZXMpLgorJSAKK1xkZWZcY3NsZXQjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGxldAorICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCisgIFxjc25hbWUjMlxlbmRjc25hbWUKK30KKworJSBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgYSBzdHJpbmcuCislIENvbmNlcHRzIGZyb20gYXJvLWJlbmQgcHJvYmxlbSAxNSAoc2VlIENUQU4pLgore1xjYXRjb2RlYFxAPTExCitcZ2RlZlxlYXRzcGFjZXMgIzF7XGV4cGFuZGFmdGVyXHRyaW1AXGV4cGFuZGFmdGVyeyMxIH19CitcZ2RlZlx0cmltQCAjMXtcdHJpbUBAIEAjMSBAICMxIEAgQEB9CitcZ2RlZlx0cmltQEAgIzFAICMyQCAjM0BAe1x0cmltQEBAXGVtcHR5ICMyIEB9CitcZGVmXHVuYnJhY2UjMXsjMX0KK1x1bmJyYWNle1xnZGVmXHRyaW1AQEAgIzEgfSAjMkB7IzF9Cit9CisKKyUgVHJpbSBhIHNpbmdsZSB0cmFpbGluZyBeXk0gb2ZmIGEgc3RyaW5nLgore1xjYXRjb2RlYFxeXk09XG90aGVyIFxjYXRjb2RlYFxRPTMlCitcZ2RlZlxlYXRjciAjMXtcZWF0Y3JhICMxUV5eTVF9JQorXGdkZWZcZWF0Y3JhIzFeXk1Re1xlYXRjcmIjMVF9JQorXGdkZWZcZWF0Y3JiIzFRIzJReyMxfSUKK30KKworJSBNYWNybyBib2RpZXMgYXJlIGFic29yYmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgY29udGV4dCB3aGVyZQorJSBhbGwgY2hhcmFjdGVycyBhcmUgY2F0Y29kZSAxMCwgMTEgb3IgMTIsIGV4Y2VwdCBcIHdoaWNoIGlzIGFjdGl2ZQorJSAoYXMgaW4gbm9ybWFsIHRleGluZm8pLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIFwuCisKKyUgSXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBoYXJkIENScyB3aGVuIHRoZSBtYWNybyBpcyBleGVjdXRlZC4gVGhpcyBpcworJSBkb25lIGJ5ICBtYWtpbmcgXl5NIChcZW5kbGluZWNoYXIpIGNhdGNvZGUgMTIgd2hlbiByZWFkaW5nIHRoZSBtYWNybworJSBib2R5LCBhbmQgdGhlbiBtYWtpbmcgaXQgdGhlIFxuZXdsaW5lY2hhciBpbiBcc2Nhbm1hY3JvLgorCitcZGVmXHNjYW5jdHh0eyUKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFwrPVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcfj1cb3RoZXIKK30KKworXGRlZlxzY2FuYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKK30KKworXGRlZlxtYWNyb2JvZHljdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFx7PVxvdGhlcgorICBcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKKyAgXHVzZW1ib2R5YmFja3NsYXNoCit9CisKK1xkZWZcbWFjcm9hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorfQorCislIFxtYm9keWJhY2tzbGFzaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBcIGluIEBtYWNybyBib2RpZXMuCislIEl0IG1hcHMgXGZvb1wgPT4gXGNzbmFtZSBtYWNhcmcuZm9vXGVuZGNzbmFtZSA9PiAjTgorJSB3aGVyZSBOIGlzIHRoZSBtYWNybyBwYXJhbWV0ZXIgbnVtYmVyLgorJSBXZSBkZWZpbmUgXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZSB0byBiZSBccmVhbGJhY2tzbGFzaCwgc28KKyUgXFwgaW4gbWFjcm8gcmVwbGFjZW1lbnQgdGV4dCBnZXRzIHlvdSBhIGJhY2tzbGFzaC4KKwore1xjYXRjb2RlYEA9MCBAY2F0Y29kZWBAXD1AYWN0aXZlCisgQGdkZWZAdXNlbWJvZHliYWNrc2xhc2h7QGxldFw9QG1ib2R5YmFja3NsYXNofQorIEBnZGVmQG1ib2R5YmFja3NsYXNoIzFce0Bjc25hbWUgbWFjYXJnLiMxQGVuZGNzbmFtZX0KK30KK1xleHBhbmRhZnRlclxkZWZcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1le1xyZWFsYmFja3NsYXNofQorCitcZGVmXG1hY3Jve1xyZWN1cnNpdmVmYWxzZVxwYXJzZWFyZ1xtYWNyb3h4eH0KK1xkZWZccm1hY3Jve1xyZWN1cnNpdmV0cnVlXHBhcnNlYXJnXG1hY3JveHh4fQorCitcZGVmXG1hY3JveHh4IzF7JQorICBcZ2V0YXJnc3sjMX0lICAgICAgICAgICBub3cgXG1hY25hbWUgaXMgdGhlIG1hY25hbWUgYW5kIFxhcmdsIHRoZSBhcmdsaXN0CisgIFxpZnhcYXJnbFxlbXB0eSAgICAgICAlIG5vIGFyZ3VtZW50cworICAgICBccGFyYW1ubz0wJQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJccGFyc2VtYXJnZGVmIFxhcmdsOyUKKyAgXGZpCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZQorICAgICBcbWVzc2FnZXtXYXJuaW5nOiByZWRlZmluaW5nIFx0aGVcbWFjbmFtZX0lCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFx0aGVcbWFjbmFtZVxlbmRjc25hbWUgXHJlbGF4CisgICAgIFxlbHNlIFxlcnJtZXNzYWdle01hY3JvIG5hbWUgXHRoZVxtYWNuYW1lXHNwYWNlIGFscmVhZHkgZGVmaW5lZH1cZmkKKyAgICAgXGdsb2JhbFxjc2xldHttYWNzYXZlLlx0aGVcbWFjbmFtZX17XHRoZVxtYWNuYW1lfSUKKyAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZT0xJQorICAgICBcYWRkdG9tYWNyb2xpc3R7XHRoZVxtYWNuYW1lfSUKKyAgXGZpCisgIFxiZWdpbmdyb3VwIFxtYWNyb2JvZHljdHh0CisgIFxpZnJlY3Vyc2l2ZSBcZXhwYW5kYWZ0ZXJccGFyc2VybWFjYm9keQorICBcZWxzZSBcZXhwYW5kYWZ0ZXJccGFyc2VtYWNib2R5CisgIFxmaX0KKworXHBhcnNlYXJnZGVmXHVubWFjcm97JQorICBcaWYxXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZQorICAgIFxnbG9iYWxcY3NsZXR7IzF9e21hY3NhdmUuIzF9JQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0IFxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWU9MCUKKyAgICAlIFJlbW92ZSB0aGUgbWFjcm8gbmFtZSBmcm9tIFxtYWNyb2xpc3Q6CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzFcZW5kY3NuYW1lIFxyZWxheAorICAgICAgXGxldFxkZWZpbmVkdW1teXdvcmRcdW5tYWNyb2RvCisgICAgICBceGRlZlxtYWNyb2xpc3R7XG1hY3JvbGlzdH0lCisgICAgXGVuZGdyb3VwCisgIFxlbHNlCisgICAgXGVycm1lc3NhZ2V7TWFjcm8gIzEgbm90IGRlZmluZWR9JQorICBcZmkKK30KKworJSBDYWxsZWQgYnkgXGRvIGZyb20gXGRvdW5tYWNybyBvbiBlYWNoIG1hY3JvLiAgVGhlIGlkZWEgaXMgdG8gb21pdCBhbnkKKyUgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCB0byBccmVsYXguCislCitcZGVmXHVubWFjcm9kbyMxeyUKKyAgXGlmeCAjMVxyZWxheAorICAgICUgcmVtb3ZlIHRoaXMKKyAgXGVsc2UKKyAgICBcbm9leHBhbmRcZGVmaW5lZHVtbXl3b3JkIFxub2V4cGFuZCMxJQorICBcZmkKK30KKworJSBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgb2JzY3VyZSBmZWF0dXJlIHRoYXQgaWYgdGhlIGxhc3QgdG9rZW4gb2YgYQorJSA8cGFyYW1ldGVyIGxpc3Q+IGlzICMsIHRoZW4gdGhlIHByZWNlZGluZyBhcmd1bWVudCBpcyBkZWxpbWl0ZWQgYnkKKyUgYW4gb3BlbmluZyBicmFjZSwgYW5kIHRoYXQgb3BlbmluZyBicmFjZSBpcyBub3QgY29uc3VtZWQuCitcZGVmXGdldGFyZ3MjMXtcZ2V0YXJnc3h4eCMxe319CitcZGVmXGdldGFyZ3N4eHgjMSN7XGdldG1hY25hbWUgIzEgXHJlbGF4XGdldG1hY2FyZ3N9CitcZGVmXGdldG1hY25hbWUgIzEgIzJccmVsYXh7XG1hY25hbWU9eyMxfX0KK1xkZWZcZ2V0bWFjYXJncyMxe1xkZWZcYXJnbHsjMX19CisKKyUgUGFyc2UgdGhlIG9wdGlvbmFsIHtwYXJhbXN9IGxpc3QuICBTZXQgdXAgXHBhcmFtbm8gYW5kIFxwYXJhbWxpc3QKKyUgc28gXGRlZm1hY3JvIGtub3dzIHdoYXQgdG8gZG8uICBEZWZpbmUgXG1hY2FyZy5ibGFoIGZvciBlYWNoIGJsYWgKKyUgaW4gdGhlIHBhcmFtcyBsaXN0LCB0byBiZSAjI04gd2hlcmUgTiBpcyB0aGUgcG9zaXRpb24gaW4gdGhhdCBsaXN0LgorJSBUaGF0IGdldHMgdXNlZCBieSBcbWJvZHliYWNrc2xhc2ggKGFib3ZlKS4KKworJSBXZSBuZWVkIHRvIGdldCBgbWFjcm8gcGFyYW1ldGVyIGNoYXIgIycgaW50byBzZXZlcmFsIGRlZmluaXRpb25zLgorJSBUaGUgdGVjaG5pcXVlIHVzZWQgaXMgc3RvbGVuIGZyb20gTGFUZVg6ICBsZXQgXGhhc2ggYmUgc29tZXRoaW5nCislIHVuZXhwYW5kYWJsZSwgaW5zZXJ0IHRoYXQgd2hlcmV2ZXIgeW91IG5lZWQgYSAjLCBhbmQgdGhlbiByZWRlZmluZQorJSBpdCB0byAjIGp1c3QgYmVmb3JlIHVzaW5nIHRoZSB0b2tlbiBsaXN0IHByb2R1Y2VkLgorJQorJSBUaGUgc2FtZSB0ZWNobmlxdWUgaXMgdXNlZCB0byBwcm90ZWN0IFxlYXRzcGFjZXMgdGlsbCBqdXN0IGJlZm9yZQorJSB0aGUgbWFjcm8gaXMgdXNlZC4KKworXGRlZlxwYXJzZW1hcmdkZWYjMTt7XHBhcmFtbm89MFxkZWZccGFyYW1saXN0e30lCisgICAgICAgIFxsZXRcaGFzaFxyZWxheFxsZXRceGVhdHNwYWNlc1xyZWxheFxwYXJzZW1hcmdkZWZ4eHgjMSw7LH0KK1xkZWZccGFyc2VtYXJnZGVmeHh4IzEseyUKKyAgXGlmIzE7XGxldFxuZXh0PVxyZWxheAorICBcZWxzZSBcbGV0XG5leHQ9XHBhcnNlbWFyZ2RlZnh4eAorICAgIFxhZHZhbmNlXHBhcmFtbm8gYnkgMSUKKyAgICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgbWFjYXJnLlxlYXRzcGFjZXN7IzF9XGVuZGNzbmFtZQorICAgICAgICB7XHhlYXRzcGFjZXN7XGhhc2hcdGhlXHBhcmFtbm99fSUKKyAgICBcZWRlZlxwYXJhbWxpc3R7XHBhcmFtbGlzdFxoYXNoXHRoZVxwYXJhbW5vLH0lCisgIFxmaVxuZXh0fQorCislIFRoZXNlIHR3byBjb21tYW5kcyByZWFkIHJlY3Vyc2l2ZSBhbmQgbm9ucmVjdXJzaXZlIG1hY3JvIGJvZGllcy4KKyUgKFRoZXkncmUgZGlmZmVyZW50IHNpbmNlIHJlYyBhbmQgbm9ucmVjIG1hY3JvcyBlbmQgZGlmZmVyZW50bHkuKQorCitcbG9uZ1xkZWZccGFyc2VtYWNib2R5IzFAZW5kIG1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorXGxvbmdcZGVmXHBhcnNlcm1hY2JvZHkjMUBlbmQgcm1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorCislIFRoaXMgZGVmaW5lcyB0aGUgbWFjcm8gaXRzZWxmLiBUaGVyZSBhcmUgc2l4IGNhc2VzOiByZWN1cnNpdmUgYW5kCislIG5vbnJlY3Vyc2l2ZSBtYWNyb3Mgb2YgemVybywgb25lLCBhbmQgbWFueSBhcmd1bWVudHMuCislIE11Y2ggbWFnaWMgd2l0aCBcZXhwYW5kYWZ0ZXIgaGVyZS4KKyUgXHhkZWYgaXMgdXNlZCBzbyB0aGF0IG1hY3JvIGRlZmluaXRpb25zIHdpbGwgc3Vydml2ZSB0aGUgZmlsZQorJSB0aGV5J3JlIGRlZmluZWQgaW47IEBpbmNsdWRlIHJlYWRzIHRoZSBmaWxlIGluc2lkZSBhIGdyb3VwLgorXGRlZlxkZWZtYWNyb3slCisgIFxsZXRcaGFzaD0jIyUgY29udmVydCBwbGFjZWhvbGRlcnMgdG8gbWFjcm8gcGFyYW1ldGVyIGNoYXJzCisgIFxpZnJlY3Vyc2l2ZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICBcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICAgIFxwYXJhbWxpc3R7XGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICBcZWdyb3VwCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICBccGFyYW1saXN0eyUKKyAgICAgICAgICBcZWdyb3VwCisgICAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGZpCisgIFxmaX0KKworXGRlZlxub3JlY3Vyc2UjMXtcYmdyb3VwXGNzbGV0eyMxfXttYWNzYXZlLiMxfX0KKworJSBcYnJhY2VvcmxpbmUgZGVjaWRlcyB3aGV0aGVyIHRoZSBuZXh0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEKKyUgey4gIElmIHNvIGl0IHJlYWRzIHVwIHRvIHRoZSBjbG9zaW5nIH0sIGlmIG5vdCwgaXQgcmVhZHMgdGhlIHdob2xlCislIGxpbmUuICBXaGF0ZXZlciB3YXMgcmVhZCBpcyB0aGVuIGZlZCB0byB0aGUgbmV4dCBjb250cm9sIHNlcXVlbmNlCislIGFzIGFuIGFyZ3VtZW50IChieSBccGFyc2VicmFjZSBvciBccGFyc2VhcmcpCitcZGVmXGJyYWNlb3JsaW5lIzF7XGxldFxuZXh0PSMxXGZ1dHVyZWxldFxuY2hhclxicmFjZW9ybGluZXh4eH0KK1xkZWZcYnJhY2VvcmxpbmV4eHh7JQorICBcaWZ4XG5jaGFyXGJncm91cFxlbHNlCisgICAgXGV4cGFuZGFmdGVyXHBhcnNlYXJnCisgIFxmaSBcbmV4dH0KKworCislIEBhbGlhcy4KKyUgV2UgbmVlZCBzb21lIHRyaWNrZXJ5IHRvIHJlbW92ZSB0aGUgb3B0aW9uYWwgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWwKKyUgc2lnbi4gIEp1c3QgbWFrZSB0aGVtIGFjdGl2ZSBhbmQgdGhlbiBleHBhbmQgdGhlbSBhbGwgdG8gbm90aGluZy4KK1xkZWZcYWxpYXN7XHBhcnNlYXJndXNpbmdcb2JleXNwYWNlc1xhbGlhc3h4eH0KK1xkZWZcYWxpYXN4eHggIzF7XGFsaWFzeXl5IzFccmVsYXh9CitcZGVmXGFsaWFzeXl5ICMxPSMyXHJlbGF4eyUKKyAgeyUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XG9iZXllZHNwYWNlPVxlbXB0eQorICAgIFxhZGR0b21hY3JvbGlzdHsjMX0lCisgICAgXHhkZWZcbmV4dHtcZ2xvYmFsXGxldFxtYWtlY3NuYW1leyMxfT1cbWFrZWNzbmFtZXsjMn19JQorICB9JQorICBcbmV4dAorfQorCisKK1xtZXNzYWdle2Nyb3NzIHJlZmVyZW5jZXMsfQorCitcbmV3d3JpdGVcYXV4ZmlsZQorCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXHRoaXNzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGlzc2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFx3cml0ZXhyZGVme3BnfXtcZm9saW99JSB3aWxsIGJlIHdyaXR0ZW4gbGF0ZXIsIGR1cmluZyBcc2hpcG91dAorICAgIH0lCisgIFxmaQorfQorCislIEB4cmVmLCBAcHhyZWYsIGFuZCBAcmVmIGdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jZXMuICBGb3IgXHhyZWZYLCAjMSBpcworJSB0aGUgbm9kZSBuYW1lLCAjMiB0aGUgbmFtZSBvZiB0aGUgSW5mbyBjcm9zcy1yZWZlcmVuY2UsICMzIHRoZSBwcmludGVkCislIG5vZGUgbmFtZSwgIzQgdGhlIG5hbWUgb2YgdGhlIEluZm8gZmlsZSwgIzUgdGhlIG5hbWUgb2YgdGhlIHByaW50ZWQKKyUgbWFudWFsLiAgQWxsIGJ1dCB0aGUgbm9kZSBuYW1lIGNhbiBiZSBvbWl0dGVkLgorJQorXGRlZlxweHJlZiMxe1xwdXR3b3Jkc2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWYjMXtccHV0d29yZFNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlxyZWYjMXtceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZlhbIzEsIzIsIzMsIzQsIzUsIzZde1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxzZXRib3gxPVxoYm94e1xwcmludGVkbWFudWFsXHVuc2tpcH0lCisgIFxzZXRib3gwPVxoYm94e1xwcmludGVkcmVmbmFtZVx1bnNraXB9JQorICBcaWZkaW0gXHdkMCA9IDBwdAorICAgICUgTm8gcHJpbnRlZCBub2RlIG5hbWUgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uCisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZVxlbmRjc25hbWVccmVsYXgKKyAgICAgICUgVXNlIHRoZSBub2RlIG5hbWUgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgIFxlbHNlCisgICAgICAlIFVzZSB0aGUgYWN0dWFsIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBhcHBlYXIgaW5zaWRlCisgICAgICAlIHRoZSBzcXVhcmUgYnJhY2tldHMuICBVc2UgdGhlIHJlYWwgc2VjdGlvbiB0aXRsZSBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgICAgJSBJdCBpcyBpbiBhbm90aGVyIG1hbnVhbCwgc28gd2UgZG9uJ3QgaGF2ZSBpdC4KKyAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICAgICUgV2Uga25vdyB0aGUgcmVhbCB0aXRsZSBpZiB3ZSBoYXZlIHRoZSB4cmVmIHZhbHVlcy4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xyZWZ4eyMxLXRpdGxlfXt9fSUKKyAgICAgICAgXGVsc2UKKyAgICAgICAgICAlIE90aGVyd2lzZSBqdXN0IGNvcHkgdGhlIEluZm8gbm9kZSBuYW1lLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICAgIFxmaSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIE1ha2UgbGluayBpbiBwZGYgb3V0cHV0LgorICBcaWZwZGYKKyAgICBcbGVhdmV2bW9kZQorICAgIFxnZXRmaWxlbmFtZXsjNH0lCisgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICUgU2VlIGNvbW1lbnRzIGF0IFxhY3RpdmViYWNrc2xhc2hkb3VibGUuCisgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZnhyZWZkZXN0eyMxfSUKKyAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmeHJlZmRlc3R9JQorICAgICAlCisgICAgIFxpZm51bVxmaWxlbmFtZWxlbmd0aD4wCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZnhyZWZkZXN0fX0lCisgICAgIFxmaQorICAgIH0lCisgICAgXGxpbmtjb2xvcgorICBcZmkKKyAgJQorICAlIEZsb2F0IHJlZmVyZW5jZXMgYXJlIHByaW50ZWQgY29tcGxldGVseSBkaWZmZXJlbnRseTogIkZpZ3VyZSAxLjIiCisgICUgaW5zdGVhZCBvZiAiW3NvbWVub2RlXSwgcC4zIi4gIFdlIGRpc3Rpbmd1aXNoIHRoZW0gYnkgdGhlCisgICUgTEFCRUwtdGl0bGUgYmVpbmcgc2V0IHRvIGEgbWFnaWMgc3RyaW5nLgorICB7JQorICAgICUgSGF2ZSB0byBvdGhlcmlmeSBldmVyeXRoaW5nIHNwZWNpYWwgdG8gYWxsb3cgdGhlIFxjc25hbWUgdG8KKyAgICAlIGluY2x1ZGUgYW4gXyBpbiB0aGUgeHJlZiBuYW1lLCBldGMuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcWHRoaXNyZWZ0aXRsZQorICAgICAgXGNzbmFtZSBYUiMxLXRpdGxlXGVuZGNzbmFtZQorICB9JQorICBcaWZmbG9hdFxYdGhpc3JlZnRpdGxlCisgICAgJSBJZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIHByaW50IG5hbWUgKHRoaXJkIGFyZykgdG8gdGhlIHJlZiwKKyAgICAlIHByaW50IGl0IGluc3RlYWQgb2Ygb3VyIHVzdWFsICJGaWd1cmUgMS4yIi4KKyAgICBcaWZkaW1cd2QwID0gMHB0CisgICAgICBccmVmeHsjMS1zbnR9e30lCisgICAgXGVsc2UKKyAgICAgIFxwcmludGVkcmVmbmFtZQorICAgIFxmaQorICAgICUKKyAgICAlIGlmIHRoZSB1c2VyIGFsc28gZ2F2ZSB0aGUgcHJpbnRlZCBtYW51YWwgbmFtZSAoZmlmdGggYXJnKSwgYXBwZW5kCisgICAgJSAiaW4gTUFOVUFMTkFNRSIuCisgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgIFxzcGFjZSBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxmaQorICBcZWxzZQorICAgICUgbm9kZS9hbmNob3IgKG5vbi1mbG9hdCkgcmVmZXJlbmNlcy4KKyAgICAlCisgICAgJSBJZiB3ZSB1c2UgXHVuaGJveDAgYW5kIFx1bmhib3gxIHRvIHByaW50IHRoZSBub2RlIG5hbWVzLCBUZVggZG9lcyBub3QKKyAgICAlIGluc2VydCBlbXB0eSBkaXNjcmV0aW9uYXJpZXMgYWZ0ZXIgaHlwaGVucywgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsCisgICAgJSBub3QgZmluZCBhIGxpbmUgYnJlYWsgYXQgYSBoeXBoZW4gaW4gYSBub2RlIG5hbWVzLiAgU2luY2Ugc29tZSBtYW51YWxzCisgICAgJSBhcmUgYmVzdCB3cml0dGVuIHdpdGggZmFpcmx5IGxvbmcgbm9kZSBuYW1lcywgY29udGFpbmluZyBoeXBoZW5zLCB0aGlzCisgICAgJSBpcyBhIGxvc3MuICBUaGVyZWZvcmUsIHdlIGdpdmUgdGhlIHRleHQgb2YgdGhlIG5vZGUgbmFtZSBhZ2Fpbiwgc28gaXQKKyAgICAlIGlzIGFzIGlmIFRlWCBpcyBzZWVpbmcgaXQgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBccHV0d29yZHNlY3Rpb257fSBgYFxwcmludGVkcmVmbmFtZScnIFxwdXR3b3JkaW57fSBcY2l0ZXtccHJpbnRlZG1hbnVhbH0lCisgICAgXGVsc2UKKyAgICAgICUgXyAoZm9yIGV4YW1wbGUpIGhhcyB0byBiZSB0aGUgY2hhcmFjdGVyIF8gZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUKKyAgICAgICUgY29udHJvbCBzZXF1ZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlLCBidXQgaXQgaGFzIHRvIGV4cGFuZAorICAgICAgJSBpbnRvIHRoZSB1c3VhbCBcbGVhdmV2bW9kZS4uLlx2cnVsZSBzdHVmZiBmb3IgcHVycG9zZXMgb2YKKyAgICAgICUgcHJpbnRpbmcuIFNvIHdlIFx0dXJub2ZmYWN0aXZlIGZvciB0aGUgXHJlZngtc250LCBiYWNrIG9uIGZvciB0aGUKKyAgICAgICUgcHJpbnRpbmcsIGJhY2sgb2ZmIGZvciB0aGUgXHJlZngtcGcuCisgICAgICB7XHR1cm5vZmZhY3RpdmUKKyAgICAgICAlIE9ubHkgb3V0cHV0IGEgZm9sbG93aW5nIHNwYWNlIGlmIHRoZSAtc250IHJlZiBpcyBub25lbXB0eTsgZm9yCisgICAgICAgJSBAdW5udW1iZXJlZCBhbmQgQGFuY2hvciwgaXQgd29uJ3QgYmUuCisgICAgICAgXHNldGJveDIgPSBcaGJveHtcaWdub3Jlc3BhY2VzIFxyZWZ4eyMxLXNudH17fX0lCisgICAgICAgXGlmZGltIFx3ZDIgPiAwcHQgXHJlZnh7IzEtc250fVxzcGFjZVxmaQorICAgICAgfSUKKyAgICAgICUgb3V0cHV0IHRoZSBgW215bm9kZV0nIHZpYSBhIG1hY3JvIHNvIGl0IGNhbiBiZSBvdmVycmlkZGVuLgorICAgICAgXHhyZWZwcmludG5vZGVuYW1lXHByaW50ZWRyZWZuYW1lCisgICAgICAlCisgICAgICAlIEJ1dCB3ZSBhbHdheXMgd2FudCBhIGNvbW1hIGFuZCBhIHNwYWNlOgorICAgICAgLFxzcGFjZQorICAgICAgJQorICAgICAgJSBvdXRwdXQgdGhlIGBwYWdlIDMnLgorICAgICAgXHR1cm5vZmZhY3RpdmUgXHB1dHdvcmRwYWdlXHRpZVxyZWZ4eyMxLXBnfXt9JQorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcm9tIFx4cmVmWCBmb3IgdGhlIGBbbm9kZW5hbWVdJyBwYXJ0IG9mIHhyZWYKKyUgb3V0cHV0LiAgSXQncyBhIHNlcGFyYXRlIG1hY3JvIG9ubHkgc28gaXQgY2FuIGJlIGNoYW5nZWQgbW9yZSBlYXNpbHksCislIHNpbmNlIHNxdWFyZSBicmFja2V0cyBkb24ndCB3b3JrIHdlbGwgaW4gc29tZSBkb2N1bWVudHMuICBQYXJ0aWN1bGFybHkKKyUgb25lIHRoYXQgQm9iIGlzIHdvcmtpbmcgb24gOikuCislCitcZGVmXHhyZWZwcmludG5vZGVuYW1lIzF7WyMxXX0KKworJSBUaGluZ3MgcmVmZXJyZWQgdG8gYnkgXHNldHJlZi4KKyUKK1xkZWZcWW5vdGhpbmd7fQorXGRlZlxZb21pdGZyb210b2N7fQorXGRlZlxZbnVtYmVyZWR7JQorICBcaWZudW1cc2Vjbm89MAorICAgIFxwdXR3b3JkQ2hhcHRlckB0aWUgXHRoZVxjaGFwbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CitcZGVmXFlhcHBlbmRpeHslCisgIFxpZm51bVxzZWNubz0wCisgICAgIFxwdXR3b3JkQXBwZW5kaXhAdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5ve30lCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNubworICBcZWxzZSBcaWZudW1cc3Vic3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vCisgIFxlbHNlCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZQorICAgICAgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CisKKyUgRGVmaW5lIFxyZWZ4e05BTUV9e1NVRkZJWH0gdG8gcmVmZXJlbmNlIGEgY3Jvc3MtcmVmZXJlbmNlIHN0cmluZyBuYW1lZCBOQU1FLgorJSBJZiBpdHMgdmFsdWUgaXMgbm9uZW1wdHksIFNVRkZJWCBpcyBvdXRwdXQgYWZ0ZXJ3YXJkLgorJQorXGRlZlxyZWZ4IzEjMnslCisgIHslCisgICAgXGluZGV4bm9mb250cworICAgIFxvdGhlcmJhY2tzbGFzaAorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRoaXNyZWZYCisgICAgICBcY3NuYW1lIFhSIzFcZW5kY3NuYW1lCisgIH0lCisgIFxpZnhcdGhpc3JlZlhccmVsYXgKKyAgICAlIElmIG5vdCBkZWZpbmVkLCBzYXkgc29tZXRoaW5nIGF0IGxlYXN0LgorICAgIFxhbmdsZWxlZnQgdW5cLWRlXC1maW5lZFxhbmdsZXJpZ2h0CisgICAgXGlmbGlua3MKKyAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIGAjMScufSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZndhcm5lZHhyZWZzXGVsc2UKKyAgICAgICAgICBcZ2xvYmFsXHdhcm5lZHhyZWZzdHJ1ZQorICAgICAgICAgIFxtZXNzYWdle0Nyb3NzIHJlZmVyZW5jZSB2YWx1ZXMgdW5rbm93bjsgeW91IG11c3QgcnVuIFRlWCBhZ2Fpbi59JQorICAgICAgICBcZmkKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgSXQncyBkZWZpbmVkLCBzbyBqdXN0IHVzZSBpdC4KKyAgICBcdGhpc3JlZlgKKyAgXGZpCisgICMyJSBPdXRwdXQgdGhlIHN1ZmZpeCBpbiBhbnkgY2FzZS4KK30KKworJSBUaGlzIGlzIHRoZSBtYWNybyBpbnZva2VkIGJ5IGVudHJpZXMgaW4gdGhlIGF1eCBmaWxlLiAgVXN1YWxseSBpdCdzCislIGp1c3QgYSBcZGVmICh3ZSBwcmVwZW5kIFhSIHRvIHRoZSBjb250cm9sIHNlcXVlbmNlIG5hbWUgdG8gYXZvaWQKKyUgY29sbGlzaW9ucykuICBCdXQgaWYgdGhpcyBpcyBhIGZsb2F0IHR5cGUsIHdlIGhhdmUgbW9yZSB3b3JrIHRvIGRvLgorJQorXGRlZlx4cmRlZiMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZ2RlZlxjc25hbWUgWFIjMVxlbmRjc25hbWV7IzJ9JSByZW1lbWJlciB0aGlzIHhyZWYgdmFsdWUuCisgICUKKyAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/CisgIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICAgICUgaXQgd2FzIGEgZmxvYXQsIGFuZCB3ZSBoYXZlIHRoZSAoc2FmZSkgZmxvYXQgdHlwZSBpbiBcaWZmbG9hdHR5cGUuCisgICAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxmbG9hdGxpc3QKKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZQorICAgICUKKyAgICAlIElzIHRoaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiB0aGlzIGZsb2F0IHR5cGU/CisgICAgXGV4cGFuZGFmdGVyXGlmeFxmbG9hdGxpc3RccmVsYXgKKyAgICAgIFx0b2tzMCA9IHtcZG99JSB5ZXMsIHNvIGp1c3QgXGRvCisgICAgXGVsc2UKKyAgICAgICUgaGFkIGl0IGJlZm9yZSwgc28gcHJlc2VydmUgcHJldmlvdXMgZWxlbWVudHMgaW4gbGlzdC4KKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcZmxvYXRsaXN0XGRvfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBSZW1lbWJlciB0aGlzIHhyZWYgaW4gdGhlIGNvbnRyb2wgc2VxdWVuY2UgXGZsb2F0bGlzdEZMT0FUVFlQRSwKKyAgICAlIGZvciBsYXRlciB1c2UgaW4gXGxpc3RvZmZsb2F0cy4KKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZXtcdGhlXHRva3MweyMxfX0lCisgIFxmaQorfQorCislIFJlYWQgdGhlIGxhc3QgZXhpc3RpbmcgYXV4IGZpbGUsIGlmIGFueS4gIE5vIGVycm9yIGlmIG5vbmUgZXhpc3RzLgorJQorXGRlZlx0cnlhdXhmaWxleyUKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLmF1eAorICBcaWZlb2YgMSBcZWxzZQorICAgIFxyZWFkZGF0YWZpbGV7YXV4fSUKKyAgICBcZ2xvYmFsXGhhdmV4cmVmc3RydWUKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KKworXGRlZlxzZXR1cGRhdGFmaWxleyUKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgVGhpcyBpcyB0byBzdXBwb3J0IFwgaW4gbm9kZSBuYW1lcyBhbmQgdGl0bGVzLCBzaW5jZSB0aGUgXAorICAlIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgXGNzbmFtZS4gIEl0J3MgZWFzaWVyIHRoYW4KKyAgJSBsZWF2aW5nIGl0IGFjdGl2ZSBhbmQgbWFraW5nIGl0cyBhY3RpdmUgZGVmaW5pdGlvbiBhbiBhY3R1YWwgXAorICAlIGNoYXJhY3Rlci4gIFdoYXQgSSBkb24ndCB1bmRlcnN0YW5kIGlzIHdoeSBpdCB3b3JrcyBpbiB0aGUgKnZhbHVlKgorICAlIG9mIHRoZSB4cmRlZi4gIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgY2F0Y29kZTEyIFwsIGFuZCB0aGF0CisgICUgc2hvdWxkIG5vdCB0eXBlc2V0IHByb3Blcmx5LiAgQnV0IGl0IHdvcmtzLCBzbyBJJ20gbW92aW5nIG9uIGZvcgorICAlIG5vdy4gIC0ta2FybCwgMTVqYW4wNC4KKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgICUKKyAgJSBNYWtlIHRoZSBjaGFyYWN0ZXJzIDEyOC0yNTUgYmUgcHJpbnRpbmcgY2hhcmFjdGVycy4KKyAgeyUKKyAgICBcY291bnQxPTEyOAorICAgIFxkZWZcbG9vcHslCisgICAgICBcY2F0Y29kZVxjb3VudDE9XG90aGVyCisgICAgICBcYWR2YW5jZVxjb3VudDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudDE8MjU2IFxsb29wIFxmaQorICAgIH0lCisgIH0lCisgICUKKyAgJSBAIGlzIG91ciBlc2NhcGUgY2hhcmFjdGVyIGluIC5hdXggZmlsZXMsIGFuZCB3ZSBuZWVkIGJyYWNlcy4KKyAgXGNhdGNvZGVgXHs9MQorICBcY2F0Y29kZWBcfT0yCisgIFxjYXRjb2RlYFxAPTAKK30KKworXGRlZlxyZWFkZGF0YWZpbGUjMXslCitcYmVnaW5ncm91cAorICBcc2V0dXBkYXRhZmlsZQorICBcaW5wdXRcam9ibmFtZS4jMQorXGVuZGdyb3VwfQorCitcbWVzc2FnZXtpbnNlcnRpb25zLH0KKyUgaW5jbHVkaW5nIGZvb3Rub3Rlcy4KKworXG5ld2NvdW50IFxmb290bm90ZW5vCisKKyUgVGhlIHRyYWlsaW5nIHNwYWNlIGluIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBmb3Igc3VwZXJlamVjdCBpcworJSB2aXRhbCBmb3IgcHJvcGVyIGZpbGxpbmc7IHBhZ2VzIGNvbWUgb3V0IHVuYWxpZ25lZCB3aGVuIHlvdSBkbyBhCislIHBhZ2VhbGlnbm1hY3JvIGNhbGwgaWYgdGhhdCBzcGFjZSBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UgaXMKKyUgcmVtb3ZlZC4gKEdlbmVyYWxseSwgbnVtZXJpYyBjb25zdGFudHMgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSBhCislIHNwYWNlIHRvIHByZXZlbnQgc3RyYW5nZSBleHBhbnNpb24gZXJyb3JzLikKK1xkZWZcc3VwZXJlamVjdHtccGFyXHBlbmFsdHkgLTIwMDAwXGZvb3Rub3Rlbm8gPTAgfQorCislIEBmb290bm90ZXN0eWxlIGlzIG1lYW5pbmdmdWwgZm9yIGluZm8gb3V0cHV0IG9ubHkuCitcbGV0XGZvb3Rub3Rlc3R5bGU9XGNvbW1lbnQKKwore1xjYXRjb2RlIGBcQD0xMQorJQorJSBBdXRvLW51bWJlciBmb290bm90ZXMuICBPdGhlcndpc2UgbGlrZSBwbGFpbi4KK1xnZGVmXGZvb3Rub3RleyUKKyAgXGxldFxpbmRlbnQ9XHB0ZXhpbmRlbnQKKyAgXGxldFxub2luZGVudD1ccHRleG5vaW5kZW50CisgIFxnbG9iYWxcYWR2YW5jZVxmb290bm90ZW5vIGJ5IFxAbmUKKyAgXGVkZWZcdGhpc2Zvb3Rub3skXntcdGhlXGZvb3Rub3Rlbm99JH0lCisgICUKKyAgJSBJbiBjYXNlIHRoZSBmb290bm90ZSBjb21lcyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsIHByZXNlcnZlIHRoZQorICAlIGV4dHJhIHNwYWNpbmcgYWZ0ZXIgd2UgZG8gdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXGxldFxAc2ZcZW1wdHkKKyAgXGlmaG1vZGVcZWRlZlxAc2Z7XHNwYWNlZmFjdG9yXHRoZVxzcGFjZWZhY3Rvcn1ccHRleHNsYXNoXGZpCisgICUKKyAgJSBSZW1vdmUgaW5hZHZlcnRlbnQgYmxhbmsgc3BhY2UgYmVmb3JlIHR5cGVzZXR0aW5nIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFx1bnNraXAKKyAgXHRoaXNmb290bm9cQHNmCisgIFxkb2Zvb3Rub3RlCit9JQorCislIERvbid0IGJvdGhlciB3aXRoIHRoZSB0cmlja2VyeSBpbiBwbGFpbi50ZXggdG8gbm90IHJlcXVpcmUgdGhlCislIGZvb3Rub3RlIHRleHQgYXMgYSBwYXJhbWV0ZXIuICBPdXIgZm9vdG5vdGVzIGRvbid0IG5lZWQgdG8gYmUgc28gZ2VuZXJhbC4KKyUKKyUgT2ggeWVzLCB0aGV5IGRvOyBvdGhlcndpc2UsIEBpZnNldCAoYW5kIGFueXRoaW5nIGVsc2UgdGhhdCB1c2VzCislIFxwYXJzZWFyZ2xpbmUpIGZhaWxzIGluc2lkZSBmb290bm90ZXMgYmVjYXVzZSB0aGUgdG9rZW5zIGFyZSBmaXhlZCB3aGVuCislIHRoZSBmb290bm90ZSBpcyByZWFkLiAgLS1rYXJsLCAxNm5vdjk2LgorJQorXGdkZWZcZG9mb290bm90ZXslCisgIFxpbnNlcnRcZm9vdGluc1xiZ3JvdXAKKyAgJSBXZSB3YW50IHRvIHR5cGVzZXQgdGhpcyB0ZXh0IGFzIGEgbm9ybWFsIHBhcmFncmFwaCwgZXZlbiBpZiB0aGUKKyAgJSBmb290bm90ZSByZWZlcmVuY2Ugb2NjdXJzIGluIChmb3IgZXhhbXBsZSkgYSBkaXNwbGF5IGVudmlyb25tZW50LgorICAlIFNvIHJlc2V0IHNvbWUgcGFyYW1ldGVycy4KKyAgXGhzaXplPVxwYWdld2lkdGgKKyAgXGludGVybGluZXBlbmFsdHlcaW50ZXJmb290bm90ZWxpbmVwZW5hbHR5CisgIFxzcGxpdHRvcHNraXBcaHRcc3RydXRib3ggJSB0b3AgYmFzZWxpbmUgZm9yIGJyb2tlbiBmb290bm90ZXMKKyAgXHNwbGl0bWF4ZGVwdGhcZHBcc3RydXRib3gKKyAgXGZsb2F0aW5ncGVuYWx0eVxATU0KKyAgXGxlZnRza2lwXHpAc2tpcAorICBccmlnaHRza2lwXHpAc2tpcAorICBcc3BhY2Vza2lwXHpAc2tpcAorICBceHNwYWNlc2tpcFx6QHNraXAKKyAgXHBhcmluZGVudFxkZWZhdWx0cGFyaW5kZW50CisgICUKKyAgXHNtYWxsZm9udHMgXHJtCisgICUKKyAgJSBCZWNhdXNlIHdlIHVzZSBoYW5naW5nIGluZGVudGF0aW9uIGluIGZvb3Rub3RlcywgYSBAbm9pbmRlbnQgYXBwZWFycworICAlIHRvIGV4ZGVudCB0aGlzIHRleHQsIHNvIG1ha2UgaXQgYmUgYSBuby1vcC4gIG1ha2VpbmZvIGRvZXMgbm90IHVzZQorICAlIGhhbmdpbmcgaW5kZW50YXRpb24gc28gQG5vaW5kZW50IGNhbiBzdGlsbCBiZSBuZWVkZWQgd2l0aGluIGZvb3Rub3RlCisgICUgdGV4dCBhZnRlciBhbiBAZXhhbXBsZSBvciB0aGUgbGlrZSAobm90IHRoYXQgdGhpcyBpcyBnb29kIHN0eWxlKS4KKyAgXGxldFxub2luZGVudCA9IFxyZWxheAorICAlCisgICUgSGFuZyB0aGUgZm9vdG5vdGUgdGV4dCBvZmYgdGhlIG51bWJlci4gIFVzZSBcZXZlcnlwYXIgaW4gY2FzZSB0aGUKKyAgJSBmb290bm90ZSBleHRlbmRzIGZvciBtb3JlIHRoYW4gb25lIHBhcmFncmFwaC4KKyAgXGV2ZXJ5cGFyID0ge1xoYW5nfSUKKyAgXHRleHRpbmRlbnR7XHRoaXNmb290bm99JQorICAlCisgICUgRG9uJ3QgY3Jhc2ggaW50byB0aGUgbGluZSBhYm92ZSB0aGUgZm9vdG5vdGUgdGV4dC4gIFNpbmNlIHRoaXMKKyAgJSBleHBhbmRzIGludG8gYSBib3gsIGl0IG11c3QgY29tZSB3aXRoaW4gdGhlIHBhcmFncmFwaCwgbGVzdCBpdAorICAlIHByb3ZpZGUgYSBwbGFjZSB3aGVyZSBUZVggY2FuIHNwbGl0IHRoZSBmb290bm90ZS4KKyAgXGZvb3RzdHJ1dAorICBcZnV0dXJlbGV0XG5leHRcZm9AdAorfQorfSVlbmQgXGNhdGNvZGUgYFxAPTExCisKKyUgSW4gY2FzZSBhIEBmb290bm90ZSBhcHBlYXJzIGluIGEgdmJveCwgc2F2ZSB0aGUgZm9vdG5vdGUgdGV4dCBhbmQgY3JlYXRlCislIHRoZSByZWFsIFxpbnNlcnQganVzdCBhZnRlciB0aGUgdmJveCBmaW5pc2hlZC4gIE90aGVyd2lzZSwgdGhlIGluc2VydGlvbgorJSB3b3VsZCBiZSBsb3N0LgorJSBTaW1pbGFyaWx5LCBpZiBhIEBmb290bm90ZSBhcHBlYXJzIGluc2lkZSBhbiBhbGlnbm1lbnQsIHNhdmUgdGhlIGZvb3Rub3RlCislIHRleHQgdG8gYSBib3ggYW5kIG1ha2UgdGhlIFxpbnNlcnQgd2hlbiBhIHJvdyBvZiB0aGUgdGFibGUgaXMgZmluaXNoZWQuCislIEFuZCB0aGUgc2FtZSBjYW4gYmUgZG9uZSBmb3Igb3RoZXIgaW5zZXJ0IGNsYXNzZXMuICAtLWthc2FsLCAxNm5vdjAzLgorCislIFJlcGxhY2UgdGhlIFxpbnNlcnQgcHJpbWl0aXZlIGJ5IGEgY2hlYXRpbmcgbWFjcm8uCislIERlZXBlciBpbnNpZGUsIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHNhdmVkIGluc2VydGlvbnMgYXJlIG5vdCBzcGlsbGVkCislIG91dCBwcmVtYXR1cmVseS4KKyUKK1xkZWZcc3RhcnRzYXZpbmdpbnNlcnRzeyUKKyAgXGlmeCBcaW5zZXJ0XHB0ZXhpbnNlcnQKKyAgICBcbGV0XGluc2VydFxzYXZlaW5zZXJ0CisgIFxlbHNlCisgICAgXGxldFxjaGVja2luc2VydHNccmVsYXgKKyAgXGZpCit9CisKKyUgVGhpcyBcaW5zZXJ0IHJlcGxhY2VtZW50IHdvcmtzIGZvciBib3RoIFxpbnNlcnRcZm9vdGluc3tmb299IGFuZAorJSBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwIGZvb1xlZ3JvdXAsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIFxpbnNlcnQyN3tmb299LgorJQorXGRlZlxzYXZlaW5zZXJ0IzF7JQorICBcZWRlZlxuZXh0e1xub2V4cGFuZFxzYXZldG9ib3ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXGFmdGVyYXNzaWdubWVudFxuZXh0CisgICUgc3dhbGxvdyB0aGUgbGVmdCBicmFjZQorICBcbGV0XHRlbXAgPQorfQorXGRlZlxtYWtlU0FWRW5hbWUjMXtcbWFrZWNzbmFtZXtTQVZFXGV4cGFuZGFmdGVyXGdvYmJsZVxzdHJpbmcjMX19CitcZGVmXHNhdmV0b2JveCMxe1xnbG9iYWxcc2V0Ym94IzEgPSBcdmJveFxiZ3JvdXAgXHVudmJveCMxfQorCitcZGVmXGNoZWNrc2F2ZWlucyMxe1xpZnZvaWQjMVxlbHNlIFxwbGFjZXNhdmVpbnMjMVxmaX0KKworXGRlZlxwbGFjZXNhdmVpbnMjMXslCisgIFxwdGV4aW5zZXJ0IFxjc25hbWVcZXhwYW5kYWZ0ZXJcZ29iYmxlc2F2ZVxzdHJpbmcjMVxlbmRjc25hbWUKKyAgICB7XGJveCMxfSUKK30KKworJSBlYXQgQFNBVkUgLS0gYmV3YXJlLCBhbGwgb2YgdGhlbSBoYXZlIGNhdGNvZGUgXG90aGVyOgoreworICBcZGVmXGRvc3BlY2lhbHN7XGRvIFNcZG8gQVxkbyBWXGRvIEV9IFx1bmNhdGNvZGVzcGVjaWFscyAgJSAgOy0pCisgIFxnZGVmXGdvYmJsZXNhdmUgQFNBVkV7fQorfQorCislIGluaXRpYWxpemF0aW9uOgorXGRlZlxuZXdzYXZlaW5zICMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcbmV3c2F2ZWluc1ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXG5leHQKK30KK1xkZWZcbmV3c2F2ZWluc1ggIzF7JQorICBcY3NuYW1lIG5ld2JveFxlbmRjc25hbWUgIzElCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXJcY2hlY2tpbnNlcnRzXGV4cGFuZGFmdGVye1xjaGVja2luc2VydHMKKyAgICBcY2hlY2tzYXZlaW5zICMxfSUKK30KKworJSBpbml0aWFsaXplOgorXGxldFxjaGVja2luc2VydHNcZW1wdHkKK1xuZXdzYXZlaW5zXGZvb3RpbnMKK1xuZXdzYXZlaW5zXG1hcmdpbgorCisKKyUgQGltYWdlLiAgV2UgdXNlIHRoZSBtYWNyb3MgZnJvbSBlcHNmLnRleCB0byBzdXBwb3J0IHRoaXMuCislIElmIGVwc2YudGV4IGlzIG5vdCBpbnN0YWxsZWQgYW5kIEBpbWFnZSBpcyB1c2VkLCB3ZSBjb21wbGFpbi4KKyUKKyUgQ2hlY2sgZm9yIGFuZCByZWFkIGVwc2YudGV4IHVwIGZyb250LiAgSWYgd2UgcmVhZCBpdCBvbmx5IGF0IEBpbWFnZQorJSB0aW1lLCB3ZSBtaWdodCBiZSBpbnNpZGUgYSBncm91cCwgYW5kIHRoZW4gaXRzIGRlZmluaXRpb25zIHdvdWxkIGdldAorJSB1bmRvbmUgYW5kIHRoZSBuZXh0IGltYWdlIHdvdWxkIGZhaWwuCitcb3BlbmluIDEgPSBlcHNmLnRleAorXGlmZW9mIDEgXGVsc2UKKyAgJSBEbyBub3QgYm90aGVyIHNob3dpbmcgYmFubmVyIHdpdGggZXBzZi50ZXggdjIuN2sgKGF2YWlsYWJsZSBpbgorICAlIGRvYy9lcHNmLnRleCBhbmQgb24gY3RhbikuCisgIFxkZWZcZXBzZmFubm91bmNle1x0b2tzMCA9IH0lCisgIFxpbnB1dCBlcHNmLnRleAorXGZpCitcY2xvc2VpbiAxCislCislIFdlIHdpbGwgb25seSBjb21wbGFpbiBvbmNlIGFib3V0IGxhY2sgb2YgZXBzZi50ZXguCitcbmV3aWZcaWZ3YXJuZWRub2Vwc2YKK1xuZXdoZWxwXG5vZXBzZmhlbHB7ZXBzZi50ZXggbXVzdCBiZSBpbnN0YWxsZWQgZm9yIGltYWdlcyB0bworICB3b3JrLiAgSXQgaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgVGV4aW5mbyBkaXN0cmlidXRpb24sIG9yIHlvdSBjYW4gZ2V0CisgIGl0IGZyb20gZnRwOi8vdHVnLm9yZy90ZXgvZXBzZi50ZXgufQorJQorXGRlZlxpbWFnZSMxeyUKKyAgXGlmeFxlcHNmYm94XHVuZGVmaW5lZAorICAgIFxpZndhcm5lZG5vZXBzZiBcZWxzZQorICAgICAgXGVycmhlbHAgPSBcbm9lcHNmaGVscAorICAgICAgXGVycm1lc3NhZ2V7ZXBzZi50ZXggbm90IGZvdW5kLCBpbWFnZXMgd2lsbCBiZSBpZ25vcmVkfSUKKyAgICAgIFxnbG9iYWxcd2FybmVkbm9lcHNmdHJ1ZQorICAgIFxmaQorICBcZWxzZQorICAgIFxpbWFnZXh4eCAjMSwsLCwsXGZpbmlzaAorICBcZmkKK30KKyUKKyUgQXJndW1lbnRzIHRvIEBpbWFnZToKKyUgIzEgaXMgKG1hbmRhdG9yeSkgaW1hZ2UgZmlsZW5hbWU7IHdlIHRhY2sgb24gLmVwcyBleHRlbnNpb24uCislICMyIGlzIChvcHRpb25hbCkgd2lkdGgsICMzIGlzIChvcHRpb25hbCkgaGVpZ2h0LgorJSAjNCBpcyAoaWdub3JlZCBvcHRpb25hbCkgaHRtbCBhbHQgdGV4dC4KKyUgIzUgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGV4dGVuc2lvbi4KKyUgIzYgaXMganVzdCB0aGUgdXN1YWwgZXh0cmEgaWdub3JlZCBhcmcgZm9yIHBhcnNpbmcgdGhpcyBzdHVmZi4KK1xuZXdpZlxpZmltYWdldm1vZGUKK1xkZWZcaW1hZ2V4eHgjMSwjMiwjMywjNCwjNSwjNlxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eTSA9IDUgICAgICUgaW4gY2FzZSB3ZSdyZSBpbnNpZGUgYW4gZXhhbXBsZQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBhbGxvdyBfIGV0IGFsLiBpbiBuYW1lcworICAlIElmIHRoZSBpbWFnZSBpcyBieSBpdHNlbGYsIGNlbnRlciBpdC4KKyAgXGlmdm1vZGUKKyAgICBcaW1hZ2V2bW9kZXRydWUKKyAgICBcbm9icmVha1xiaWdza2lwCisgICAgJSBVc3VhbGx5IHdlJ2xsIGhhdmUgdGV4dCBhZnRlciB0aGUgaW1hZ2Ugd2hpY2ggd2lsbCBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUsIHNvIGluc2VydCBpdCBoZXJlIHRvbyB0byBlcXVhbGl6ZSB0aGUgc3BhY2UKKyAgICAlIGFib3ZlIGFuZCBiZWxvdy4KKyAgICBcbm9icmVha1x2c2tpcFxwYXJza2lwCisgICAgXG5vYnJlYWsKKyAgICBcbGluZVxiZ3JvdXAKKyAgXGZpCisgICUKKyAgJSBPdXRwdXQgdGhlIGltYWdlLgorICBcaWZwZGYKKyAgICBcZG9wZGZpbWFnZXsjMX17IzJ9eyMzfSUKKyAgXGVsc2UKKyAgICAlIFxlcHNmYm94IGl0c2VsZiByZXNldHMgXGVwc2Y/c2l6ZSBhdCBlYWNoIGZpZ3VyZS4KKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnhzaXplPSMyXHJlbGF4IFxmaQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM31caWZkaW1cd2QwID4gMHB0IFxlcHNmeXNpemU9IzNccmVsYXggXGZpCisgICAgXGVwc2Zib3h7IzEuZXBzfSUKKyAgXGZpCisgICUKKyAgXGlmaW1hZ2V2bW9kZSBcZWdyb3VwIFxiaWdicmVhayBcZmkgICUgc3BhY2UgYWZ0ZXIgdGhlIGltYWdlCitcZW5kZ3JvdXB9CisKKworJSBAZmxvYXQgRkxPQVRUWVBFLExBQkVMLExPQyAuLi4gQGVuZCBmbG9hdCBmb3IgZGlzcGxheWVkIGZpZ3VyZXMsIHRhYmxlcywKKyUgZXRjLiAgV2UgZG9uJ3QgYWN0dWFsbHkgaW1wbGVtZW50IGZsb2F0aW5nIHlldCwgd2UgYWx3YXlzIGluY2x1ZGUgdGhlCislIGZsb2F0ICJoZXJlIi4gIEJ1dCBpdCBzZWVtZWQgdGhlIGJlc3QgbmFtZSBmb3IgdGhlIGZ1dHVyZS4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxmbG9hdHtcZWF0Y29tbWFzcGFjZVxlYXRjb21tYXNwYWNlXGRvZmxvYXQjMSwgLCAsXGZpbmlzaH0KKworJSBUaGVyZSBtYXkgYmUgYSBzcGFjZSBiZWZvcmUgc2Vjb25kIGFuZC9vciB0aGlyZCBwYXJhbWV0ZXI7IGRlbGV0ZSBpdC4KK1xkZWZcZWF0Y29tbWFzcGFjZSMxLCB7IzEsfQorCislICMxIGlzIHRoZSBvcHRpb25hbCBGTE9BVFRZUEUsIHRoZSB0ZXh0IGxhYmVsIGZvciB0aGlzIGZsb2F0LCB0eXBpY2FsbHkKKyUgIkZpZ3VyZSIsICJUYWJsZSIsICJFeGFtcGxlIiwgZXRjLiAgQ2FuJ3QgY29udGFpbiBjb21tYXMuICBJZiBvbWl0dGVkLAorJSB0aGlzIGZsb2F0IHdpbGwgbm90IGJlIG51bWJlcmVkIGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8uCislCislICMyIGlzIHRoZSBvcHRpb25hbCB4cmVmIGxhYmVsLiAgQWxzbyBtdXN0IGJlIHByZXNlbnQgZm9yIHRoZSBmbG9hdCB0bworJSBiZSByZWZlcmFibGUuCislCislICMzIGlzIHRoZSBvcHRpb25hbCBwb3NpdGlvbmluZyBhcmd1bWVudDsgZm9yIG5vdywgaXQgaXMgaWdub3JlZC4gIEl0CislIHdpbGwgc29tZWhvdyBzcGVjaWZ5IHRoZSBwb3NpdGlvbnMgYWxsb3dlZCB0byBmbG9hdCB0byAoaGVyZSwgdG9wLCBib3R0b20pLgorJQorJSBXZSBrZWVwIGEgc2VwYXJhdGUgY291bnRlciBmb3IgZWFjaCBGTE9BVFRZUEUsIHdoaWNoIHdlIHJlc2V0IGF0IGVhY2gKKyUgY2hhcHRlci1sZXZlbCBjb21tYW5kLgorXGxldFxyZXNldGFsbGZsb2F0bm9zPVxlbXB0eQorJQorXGRlZlxkb2Zsb2F0IzEsIzIsIzMsIzRcZmluaXNoeyUKKyAgXGxldFx0aGlzY2FwdGlvbj1cZW1wdHkKKyAgXGxldFx0aGlzc2hvcnRjYXB0aW9uPVxlbXB0eQorICAlCisgICUgZG9uJ3QgbG9zZSBmb290bm90ZXMgaW5zaWRlIEBmbG9hdC4KKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0LCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcgd2hlbmV2ZXIgYW4KKyAgJSBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgJQorICAlIFdlIGNhbid0IGJlIHVzZWQgaW5zaWRlIGEgcGFyYWdyYXBoLgorICBccGFyCisgICUKKyAgXHZ0b3BcYmdyb3VwCisgICAgXGRlZlxmbG9hdHR5cGV7IzF9JQorICAgIFxkZWZcZmxvYXRsYWJlbHsjMn0lCisgICAgXGRlZlxmbG9hdGxvY3sjM30lIHdlIGRvIG5vdGhpbmcgd2l0aCB0aGlzIHlldC4KKyAgICAlCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkKKyAgICAgIFxsZXRcc2FmZWZsb2F0dHlwZT1cZW1wdHkKKyAgICBcZWxzZQorICAgICAgeyUKKyAgICAgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAgICUgYnV0IHdlIG5lZWQgdG8gdXNlIGl0IGluIGEgY29udHJvbCBzZXF1ZW5jZSBuYW1lLgorICAgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICAgIFx0dXJub2ZmYWN0aXZlCisgICAgICAgIFx4ZGVmXHNhZmVmbG9hdHR5cGV7XGZsb2F0dHlwZX0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIGxhYmVsIGlzIGdpdmVuIGJ1dCBubyB0eXBlLCB3ZSBoYW5kbGUgdGhhdCBhcyB0aGUgZW1wdHkgdHlwZS4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV2Ugd2FudCBlYWNoIEZMT0FUVFlQRSB0byBiZSBudW1iZXJlZCBzZXBhcmF0ZWx5IChGaWd1cmUgMSwKKyAgICAgICUgVGFibGUgMSwgRmlndXJlIDIsIC4uLikuICAoQW5kIGlmIG5vIGxhYmVsLCBubyBudW1iZXIuKQorICAgICAgJQorICAgICAgXGV4cGFuZGFmdGVyXGdldGZsb2F0bm9cY3NuYW1lXHNhZmVmbG9hdHR5cGUgZmxvYXRub1xlbmRjc25hbWUKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxmbG9hdG5vIGJ5IDEKKyAgICAgICUKKyAgICAgIHslCisgICAgICAgICUgVGhpcyBtYWdpYyB2YWx1ZSBmb3IgXHRoaXNzZWN0aW9uIGlzIG91dHB1dCBieSBcc2V0cmVmIGFzIHRoZQorICAgICAgICAlIFhSRUZMQUJFTC10aXRsZSB2YWx1ZS4gIFx4cmVmWCB1c2VzIGl0IHRvIGRpc3Rpbmd1aXNoIGZsb2F0CisgICAgICAgICUgbGFiZWxzICh3aGljaCBoYXZlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdCkgZnJvbQorICAgICAgICAlIG5vZGUgYW5kIGFuY2hvciBsYWJlbHMuICBBbmQgXHhyZGVmIHVzZXMgaXQgdG8gY29uc3RydWN0IHRoZQorICAgICAgICAlIGxpc3RzIG9mIGZsb2F0cy4KKyAgICAgICAgJQorICAgICAgICBcZWRlZlx0aGlzc2VjdGlvbntcZmxvYXRtYWdpYz1cc2FmZWZsb2F0dHlwZX0lCisgICAgICAgIFxzZXRyZWZ7XGZsb2F0bGFiZWx9e1lmbG9hdH0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIHN0YXJ0IHdpdGggXHBhcnNraXAgZ2x1ZSwgSSBndWVzcy4KKyAgICBcdnNraXBccGFyc2tpcAorICAgICUKKyAgICAlIERvbid0IHN1cHByZXNzIGluZGVudGF0aW9uIGlmIGEgZmxvYXQgaGFwcGVucyB0byBzdGFydCBhIHNlY3Rpb24uCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIHdlIGhhdmUgdGhlc2UgcG9zc2liaWxpdGllczoKKyUgQGZsb2F0IEZvbyxsYmwgJiBAY2FwdGlvbntDYXB9OiBGb28gMS4xOiBDYXAKKyUgQGZsb2F0IEZvbyxsYmwgJiBubyBjYXB0aW9uOiAgICBGb28gMS4xCislIEBmbG9hdCBGb28gJiBAY2FwdGlvbntDYXB9OiAgICAgRm9vOiBDYXAKKyUgQGZsb2F0IEZvbyAmIG5vIGNhcHRpb246ICAgICAgICBGb28KKyUgQGZsb2F0ICxsYmwgJiBDYXB0aW9ue0NhcH06ICAgICAxLjE6IENhcAorJSBAZmxvYXQgLGxibCAmIG5vIGNhcHRpb246ICAgICAgIDEuMQorJSBAZmxvYXQgJiBAY2FwdGlvbntDYXB9OiAgICAgICAgIENhcAorJSBAZmxvYXQgJiBubyBjYXB0aW9uOgorJQorXGRlZlxFZmxvYXR7JQorICAgIFxsZXRcZmxvYXRpZGVudCA9IFxlbXB0eQorICAgICUKKyAgICAlIEluIGFsbCBjYXNlcywgaWYgd2UgaGF2ZSBhIGZsb2F0IHR5cGUsIGl0IGNvbWVzIGZpcnN0LgorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlIFxkZWZcZmxvYXRpZGVudHtcZmxvYXR0eXBlfVxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW4geHJlZiBsYWJlbCwgdGhlIG51bWJlciBjb21lcyBuZXh0LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgJSBpZiBhbHNvIGhhZCBmbG9hdCB0eXBlLCBuZWVkIHRpZSBmaXJzdC4KKyAgICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcdGllfSUKKyAgICAgIFxmaQorICAgICAgJSB0aGUgbnVtYmVyLgorICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcY2hhcGxldmVscHJlZml4XHRoZVxmbG9hdG5vfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBTdGFydCB0aGUgcHJpbnRlZCBjYXB0aW9uIHdpdGggd2hhdCB3ZSd2ZSBjb25zdHJ1Y3RlZCBpbgorICAgICUgXGZsb2F0aWRlbnQsIGJ1dCBrZWVwIGl0IHNlcGFyYXRlOyB3ZSBuZWVkIFxmbG9hdGlkZW50IGFnYWluLgorICAgIFxsZXRcY2FwdGlvbmxpbmUgPSBcZmxvYXRpZGVudAorICAgICUKKyAgICBcaWZ4XHRoaXNjYXB0aW9uXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0aWRlbnRcZW1wdHkgXGVsc2UKKwlcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXs6IH0lIGhhZCBpZGVudCwgc28gbmVlZCBhIGNvbG9uIGJldHdlZW4KKyAgICAgIFxmaQorICAgICAgJQorICAgICAgJSBjYXB0aW9uIHRleHQuCisgICAgICBcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXtcc2NhbmV4cFx0aGlzY2FwdGlvbn0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBwcmludCwgcHJpbnQgaXQsIHdpdGggc3BhY2UgYmVmb3JlLgorICAgICUgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhbiBcaW5zZXJ0LgorICAgIFxpZnhcY2FwdGlvbmxpbmVcZW1wdHkgXGVsc2UKKyAgICAgIFx2c2tpcC41XHBhcnNraXAKKyAgICAgIFxjYXB0aW9ubGluZQorICAgICAgJQorICAgICAgJSBTcGFjZSBiZWxvdyBjYXB0aW9uLgorICAgICAgXHZza2lwXHBhcnNraXAKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBoYXZlIGFuIHhyZWYgbGFiZWwsIHdyaXRlIHRoZSBsaXN0IG9mIGZsb2F0cyBpbmZvLiAgRG8gdGhpcworICAgICUgYWZ0ZXIgdGhlIGNhcHRpb24sIHRvIGF2b2lkIGNoYW5jZSBvZiBpdCBiZWluZyBhIGJyZWFrcG9pbnQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdyaXRlIHRoZSB0ZXh0IHRoYXQgZ29lcyBpbiB0aGUgbG9mIHRvIHRoZSBhdXggZmlsZSBhcworICAgICAgJSBcZmxvYXRsYWJlbC1sb2YuICBCZXNpZGVzIFxmbG9hdGlkZW50LCB3ZSBpbmNsdWRlIHRoZSBzaG9ydAorICAgICAgJSBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSB0aGUgZnVsbCBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSBub3RoaW5nLgorICAgICAgeyUKKyAgICAgICAgXGF0ZHVtbWllcworICAgICAgICAlCisgICAgICAgICUgc2luY2Ugd2UgcmVhZCB0aGUgY2FwdGlvbiB0ZXh0IGluIHRoZSBtYWNybyB3b3JsZCwgd2hlcmUgXl5NCisgICAgICAgICUgaXMgdHVybmVkIGludG8gYSBub3JtYWwgY2hhcmFjdGVyLCB3ZSBoYXZlIHRvIHNjYW4gaXQgYmFjaywgc28KKyAgICAgICAgJSB3ZSBkb24ndCB3cml0ZSB0aGUgbGl0ZXJhbCB0aHJlZSBjaGFyYWN0ZXJzICJeXk0iIGludG8gdGhlIGF1eCBmaWxlLgorCVxzY2FuZXhweyUKKwkgIFx4ZGVmXG5vZXhwYW5kXGd0ZW1weyUKKwkgICAgXGlmeFx0aGlzc2hvcnRjYXB0aW9uXGVtcHR5CisJICAgICAgXHRoaXNjYXB0aW9uCisJICAgIFxlbHNlCisJICAgICAgXHRoaXNzaG9ydGNhcHRpb24KKwkgICAgXGZpCisJICB9JQorCX0lCisgICAgICAgIFxpbW1lZGlhdGVcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7XGZsb2F0bGFiZWwtbG9mfXtcZmxvYXRpZGVudAorCSAgXGlmeFxndGVtcFxlbXB0eSBcZWxzZSA6IFxndGVtcCBcZml9fSUKKyAgICAgIH0lCisgICAgXGZpCisgIFxlZ3JvdXAgICUgZW5kIG9mIFx2dG9wCisgICUKKyAgJSBwbGFjZSB0aGUgY2FwdHVyZWQgaW5zZXJ0cworICAlCisgICUgQkVXQVJFOiB3aGVuIHRoZSBmbG9hdHMgc3RhcnQgZmxvYXRpbmcsIHdlIGhhdmUgdG8gaXNzdWUgd2FybmluZworICAlIHdoZW5ldmVyIGFuIGluc2VydCBhcHBlYXJzIGluc2lkZSBhIGZsb2F0IHdoaWNoIGNvdWxkIHBvc3NpYmx5CisgICUgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcY2hlY2tpbnNlcnRzCit9CisKKyUgQXBwZW5kIHRoZSB0b2tlbnMgIzIgdG8gdGhlIGRlZmluaXRpb24gb2YgbWFjcm8gIzEsIG5vdCBleHBhbmRpbmcgZWl0aGVyLgorJQorXGRlZlxhcHBlbmR0b21hY3JvIzEjMnslCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXIjMVxleHBhbmRhZnRlcnsjMSMyfSUKK30KKworJSBAY2FwdGlvbiwgQHNob3J0Y2FwdGlvbgorJQorXGRlZlxjYXB0aW9ue1xkb2NhcHRpb25cdGhpc2NhcHRpb259CitcZGVmXHNob3J0Y2FwdGlvbntcZG9jYXB0aW9uXHRoaXNzaG9ydGNhcHRpb259CitcZGVmXGRvY2FwdGlvbntcY2hlY2tlbnZcZmxvYXQgXGJncm91cFxzY2FuYXJnY3R4dFxkZWZjYXB0aW9ufQorXGRlZlxkZWZjYXB0aW9uIzEjMntcZWdyb3VwIFxkZWYjMXsjMn19CisKKyUgVGhlIHBhcmFtZXRlciBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSBpZGVudGlmeWluZyB0aGUgY291bnRlciB3ZSBhcmUKKyUgZ29pbmcgdG8gdXNlLiAgQ3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIGFzc2lnbiBpdCB0byBcZmxvYXRuby4KK1xkZWZcZ2V0ZmxvYXRubyMxeyUKKyAgXGlmeCMxXHJlbGF4CisgICAgICAlIEhhdmVuJ3Qgc2VlbiB0aGlzIGZpZ3VyZSB0eXBlIGJlZm9yZS4KKyAgICAgIFxjc25hbWUgbmV3Y291bnRcZW5kY3NuYW1lICMxJQorICAgICAgJQorICAgICAgJSBSZW1lbWJlciB0byByZXNldCB0aGlzIGZsb2F0bm8gYXQgdGhlIG5leHQgY2hhcC4KKyAgICAgIFxleHBhbmRhZnRlclxnZGVmXGV4cGFuZGFmdGVyXHJlc2V0YWxsZmxvYXRub3MKKyAgICAgICAgXGV4cGFuZGFmdGVye1xyZXNldGFsbGZsb2F0bm9zICMxPTAgfSUKKyAgXGZpCisgIFxsZXRcZmxvYXRubyMxJQorfQorCislIFxzZXRyZWYgY2FsbHMgdGhpcyB0byBnZXQgdGhlIFhSRUZMQUJFTC1zbnQgdmFsdWUuICBXZSB3YW50IGFuIEB4cmVmCislIHRvIHRoZSBGTE9BVExBQkVMIHRvIGV4cGFuZCB0byAiRmlndXJlIDMuMSIuICBXZSBjYWxsIFxzZXRyZWYgd2hlbiB3ZQorJSBmaXJzdCByZWFkIHRoZSBAZmxvYXQgY29tbWFuZC4KKyUKK1xkZWZcWWZsb2F0e1xmbG9hdHR5cGVAdGllIFxjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorCislIE1hZ2ljIHN0cmluZyB1c2VkIGZvciB0aGUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLCBzbyBceHJlZlggY2FuCislIGRpc3Rpbmd1aXNoIGZsb2F0cyBmcm9tIG90aGVyIHhyZWYgdHlwZXMuCitcZGVmXGZsb2F0bWFnaWN7ISFmbG9hdCEhfQorCislICMxIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdlIGFyZSBwYXNzZWQ7IHdlIGV4cGFuZCBpbnRvIGEgY29uZGl0aW9uYWwKKyUgd2hpY2ggaXMgdHJ1ZSBpZiAjMSByZXByZXNlbnRzIGEgZmxvYXQgcmVmLiAgVGhhdCBpcywgdGhlIG1hZ2ljCislIFx0aGlzc2VjdGlvbiB2YWx1ZSB3aGljaCB3ZSBcc2V0cmVmIGFib3ZlLgorJQorXGRlZlxpZmZsb2F0IzF7XGV4cGFuZGFmdGVyXGRvaWZmbG9hdCMxPT1cZmluaXNofQorJQorJSAjMSBpcyAobWF5YmUpIHRoZSBcZmxvYXRtYWdpYyBzdHJpbmcuICBJZiBzbywgIzIgd2lsbCBiZSB0aGUKKyUgKHNhZmUpIGZsb2F0IHR5cGUgZm9yIHRoaXMgZmxvYXQuICBXZSBzZXQgXGlmZmxvYXR0eXBlIHRvICMyLgorJQorXGRlZlxkb2lmZmxvYXQjMT0jMj0jM1xmaW5pc2h7JQorICBcZGVmXHRlbXB7IzF9JQorICBcZGVmXGlmZmxvYXR0eXBleyMyfSUKKyAgXGlmeFx0ZW1wXGZsb2F0bWFnaWMKK30KKworJSBAbGlzdG9mZmxvYXRzIEZMT0FUVFlQRSAtIHByaW50IGEgbGlzdCBvZiBmbG9hdHMgbGlrZSBhIHRhYmxlIG9mIGNvbnRlbnRzLgorJQorXHBhcnNlYXJnZGVmXGxpc3RvZmZsb2F0c3slCisgIFxkZWZcZmxvYXR0eXBleyMxfSUgZmxvYXR0eXBlCisgIHslCisgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgfSUKKyAgJQorICAlIFx4cmRlZiBzYXZlcyB0aGUgZmxvYXRzIGFzIGEgXGRvLWxpc3QgaW4gXGZsb2F0bGlzdFNBRkVGTE9BVFRZUEUuCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZSBccmVsYXgKKyAgICBcaWZoYXZleHJlZnMKKyAgICAgICUgaWYgdGhlIHVzZXIgc2FpZCBAbGlzdG9mZmxvYXRzIGZvbyBidXQgbmV2ZXIgQGZsb2F0IGZvby4KKyAgICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIE5vIGBcc2FmZWZsb2F0dHlwZScgZmxvYXRzIHRvIGxpc3QufSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGxlZnRza2lwPVx0b2NpbmRlbnQgICUgaW5kZW50IHRoZXNlIGVudHJpZXMgbGlrZSBhIHRvYworICAgICAgXGxldFxkbz1cbGlzdG9mZmxvYXRzZG8KKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCislIFRoaXMgaXMgY2FsbGVkIG9uIGVhY2ggZW50cnkgaW4gYSBsaXN0IG9mIGZsb2F0cy4gIFdlJ3JlIHBhc3NlZCB0aGUKKyUgeHJlZiBsYWJlbCwgaW4gdGhlIGZvcm0gTEFCRUwtdGl0bGUsIHdoaWNoIGlzIGhvdyB3ZSBzYXZlIGl0IGluIHRoZQorJSBhdXggZmlsZS4gIFdlIHN0cmlwIG9mZiB0aGUgLXRpdGxlIGFuZCBsb29rIHVwIFxYUkxBQkVMLWxvZiwgd2hpY2gKKyUgaGFzIHRoZSB0ZXh0IHdlJ3JlIHN1cHBvc2VkIHRvIHR5cGVzZXQgaGVyZS4KKyUKKyUgRmlndXJlcyB3aXRob3V0IHhyZWYgbGFiZWxzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IChzaW5jZQorJSB0aGV5IHdvbid0IGFwcGVhciBpbiB0aGUgYXV4IGZpbGUpLgorJQorXGRlZlxsaXN0b2ZmbG9hdHNkbyMxe1xsaXN0b2ZmbG9hdHNkb2VudHJ5IzFcZmluaXNofQorXGRlZlxsaXN0b2ZmbG9hdHNkb2VudHJ5IzEtdGl0bGVcZmluaXNoe3slCisgICUgQ2FuJ3QgZnVsbHkgZXhwYW5kIFhSIzEtbG9mIGJlY2F1c2UgaXQgY2FuIGNvbnRhaW4gYW55dGhpbmcuICBKdXN0CisgICUgcGFzcyB0aGUgY29udHJvbCBzZXF1ZW5jZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBYUiMxLXBnIGlzIGp1c3QgdGhlCisgICUgcGFnZSBudW1iZXIsIGFuZCB3ZSB3YW50IHRvIGZ1bGx5IGV4cGFuZCB0aGF0IHNvIHdlIGNhbiBnZXQgYSBsaW5rCisgICUgaW4gcGRmIG91dHB1dC4KKyAgXHRva3NBID0gXGV4cGFuZGFmdGVye1xjc25hbWUgWFIjMS1sb2ZcZW5kY3NuYW1lfSUKKyAgJQorICAlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gd2UgdXNlIHRvIGdlbmVyYXRlIHRoZSBUT0MgYW5kIGluZGV4LgorICBcZWRlZlx3cml0ZWVudHJ5e1xub2V4cGFuZFxlbnRyeXtcdGhlXHRva3NBfXtcY3NuYW1lIFhSIzEtcGdcZW5kY3NuYW1lfX0lCisgIFx3cml0ZWVudHJ5Cit9fQorCitcbWVzc2FnZXtsb2NhbGl6YXRpb24sfQorJSBhbmQgaTE4bi4KKworJSBAZG9jdW1lbnRsYW5ndWFnZSBpcyB1c3VhbGx5IGdpdmVuIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIKKyUgQHNldGZpbGVuYW1lLiAgSWYgZG9uZSB0b28gbGF0ZSwgaXQgbWF5IG5vdCBvdmVycmlkZSBldmVyeXRoaW5nCislIHByb3Blcmx5LiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uCislIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgc2V0IHVwIGEgaHlwaGVuYXRpb24gZmlsZSBoZXJlLgorJQorXHBhcnNlYXJnZGVmXGRvY3VtZW50bGFuZ3VhZ2V7JQorICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgorICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgXG9wZW5pbiAxIHR4aS0jMS50ZXgKKyAgICBcaWZlb2YgMQorICAgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcZWxzZQorICAgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKworJSBAZG9jdW1lbnRlbmNvZGluZyBzaG91bGQgY2hhbmdlIHNvbWV0aGluZyBpbiBUZVggZXZlbnR1YWxseSwgbW9zdAorJSBsaWtlbHksIGJ1dCBmb3Igbm93IGp1c3QgcmVjb2duaXplIGl0LgorXGxldFxkb2N1bWVudGVuY29kaW5nID0gXGNvbW1lbnQKKworCislIFBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLgorJQorXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCitcd2lkb3dwZW5hbHR5PTEwMDAwCitcY2x1YnBlbmFsdHk9MTAwMDAKKworJSBVc2UgVGVYIDMuMCdzIFxlbWVyZ2VuY3lzdHJldGNoIHRvIGhlbHAgbGluZSBicmVha2luZywgYnV0IGlmIHdlJ3JlCislIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuICBXZSB3YW50IHRoZSBhbW91bnQgb2YKKyUgc3RyZXRjaCBhZGRlZCB0byBkZXBlbmQgb24gdGhlIGxpbmUgbGVuZ3RoLCBoZW5jZSB0aGUgZGVwZW5kZW5jZSBvbgorJSBcaHNpemUuICBXZSBjYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIHBhcGVyIHNpemUgaXMgc2V0LgorJQorXGRlZlxzZXRlbWVyZ2VuY3lzdHJldGNoeyUKKyAgXGlmeFxlbWVyZ2VuY3lzdHJldGNoXHRoaXNpc3VuZGVmaW5lZAorICAgICUgQWxsb3cgdXMgdG8gYXNzaWduIHRvIFxlbWVyZ2VuY3lzdHJldGNoIGFueXdheS4KKyAgICBcZGVmXGVtZXJnZW5jeXN0cmV0Y2h7XGRpbWVuMH0lCisgIFxlbHNlCisgICAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAuMTVcaHNpemUKKyAgXGZpCit9CisKKyUgUGFyYW1ldGVycyBpbiBvcmRlcjogMSkgdGV4dGhlaWdodDsgMikgdGV4dHdpZHRoOworJSAzKSB2b2Zmc2V0OyA0KSBob2Zmc2V0OyA1KSBiaW5kaW5nIG9mZnNldDsgNikgdG9wc2tpcDsKKyUgNykgcGh5c2ljYWwgcGFnZSBoZWlnaHQ7IDgpIHBoeXNpY2FsIHBhZ2Ugd2lkdGguCislCislIFdlIGFsc28gY2FsbCBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBkZWZpbmUKKyUgXHRleHRsZWFkaW5nLiAgVGhlIGNhbGxlciBzaG91bGQgYWxzbyBzZXQgXHBhcnNraXAuCislCitcZGVmXGludGVybmFscGFnZXNpemVzIzEjMiMzIzQjNSM2IzcjOHslCisgIFx2b2Zmc2V0ID0gIzNccmVsYXgKKyAgXHRvcHNraXAgPSAjNlxyZWxheAorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJQorICBcdnNpemUgPSAjMVxyZWxheAorICBcYWR2YW5jZVx2c2l6ZSBieSBcdG9wc2tpcAorICBcb3V0ZXJ2c2l6ZSA9IFx2c2l6ZQorICBcYWR2YW5jZVxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luCisgIFxwYWdlaGVpZ2h0ID0gXHZzaXplCisgICUKKyAgXGhzaXplID0gIzJccmVsYXgKKyAgXG91dGVyaHNpemUgPSBcaHNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJoc2l6ZSBieSAwLjVpbgorICBccGFnZXdpZHRoID0gXGhzaXplCisgICUKKyAgXG5vcm1hbG9mZnNldCA9ICM0XHJlbGF4CisgIFxiaW5kaW5nb2Zmc2V0ID0gIzVccmVsYXgKKyAgJQorICBcaWZwZGYKKyAgICBccGRmcGFnZWhlaWdodCAjN1xyZWxheAorICAgIFxwZGZwYWdld2lkdGggIzhccmVsYXgKKyAgXGZpCisgICUKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQorICAlCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorICBcc2V0ZW1lcmdlbmN5c3RyZXRjaAorfQorCislIEBsZXR0ZXJwYXBlciAodGhlIGRlZmF1bHQpLgorXGRlZlxsZXR0ZXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIElmIHBhZ2UgaXMgbm90aGluZyBidXQgdGV4dCwgbWFrZSBpdCBjb21lIG91dCBldmVuLgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NDZcYmFzZWxpbmVza2lwfXs2aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKK319CisKKyUgVXNlIEBzbWFsbGJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgN3g5LjI1IHRyaW0gc2l6ZS4KK1xkZWZcc21hbGxib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjVpbn17NWlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MTZwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5LjI1aW59ezdpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjNpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC41Y20KK319CisKKyUgVXNlIEBzbWFsbGVyYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA2eDkgdHJpbSBzaXplLgorJSAoSnVzdCB0ZXN0aW5nLCBwYXJhbWV0ZXJzIHN0aWxsIGluIGZsdXguKQorXGRlZlxzbWFsbGVyYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMS41cHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjRpbn17NC44aW59JQorICAgICAgICAgICAgICAgICAgICB7LS4yaW59ey0uNGlufSUKKyAgICAgICAgICAgICAgICAgICAgezBwdH17MTRwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5aW59ezZpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjI1aW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNGNtCit9fQorCislIFVzZSBAYWZvdXJwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNCBwYXBlci4KK1xkZWZcYWZvdXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIERvdWJsZS1zaWRlIHByaW50aW5nIHZpYSBwb3N0c2NyaXB0IG9uIExhc2VyamV0IDQwNTAKKyAgJSBwcmludHMgZG91YmxlLXNpZGVkIG5pY2VseSB3aGVuIFxiaW5kaW5nb2Zmc2V0PTEwbW0gYW5kIFxob2Zmc2V0PS02bW0uCisgICUgVG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmb3IgYSBkaWZmZXJlbnQgcHJpbnRlciBvciBzaXR1YXRpb24sIGFkanVzdAorICAlIFxub3JtYWxvZmZzZXQgdW50aWwgdGhlIGZyb250LXNpZGUgYW5kIGJhY2stc2lkZSB0ZXh0cyBhbGlnbi4gIFRoZW4KKyAgJSBkbyB0aGUgc2FtZSBmb3IgXGJpbmRpbmdvZmZzZXQuICBZb3UgY2FuIHNldCB0aGVzZSBmb3IgdGVzdGluZyBpbgorICAlIHlvdXIgdGV4aW5mbyBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisgICUgQHRleAorICAlIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0gLTZtbQorICAlIFxnbG9iYWxcYmluZGluZ29mZnNldCA9IDEwbW0KKyAgJSBAZW5kIHRleAorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NTFcYmFzZWxpbmVza2lwfXsxNjBtbX0KKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gNW1tCit9fQorCislIFVzZSBAYWZpdmVwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNSBwYXBlci4KKyUgRnJvbSByb21pbGRvQHVyYW5vLmljZWIudWZvcC5iciwgMiBKdWx5IDIwMDAuCislIEhlIGFsc28gcmVjb21tZW5kcyBtYWtpbmcgQGV4YW1wbGUgYW5kIEBsaXNwIGJlIHNtYWxsLgorXGRlZlxhZml2ZXBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQgbWludXMgMC4xcHQKKyAgXHRleHRsZWFkaW5nID0gMTIuNXB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezE2MG1tfXsxMjBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezhwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyMTBtbX17MTQ4bW19JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yaW4KKyAgXHRvbGVyYW5jZSA9IDgwMAorICBcaGZ1enogPSAxLjJwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDJtbQorICBcdGFibGVpbmRlbnQgPSAxMm1tCit9fQorCislIEEgc3BlY2lmaWMgdGV4dCBsYXlvdXQsIDI0eDE1Y20gb3ZlcmFsbCwgaW50ZW5kZWQgZm9yIEE0IHBhcGVyLgorXGRlZlxhZm91cmxhdGV4e3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezIzN21tfXsxNTBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17NC42bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgICUgTXVzdCBleHBsaWNpdGx5IHJlc2V0IHRvIDAgYmVjYXVzZSB3ZSBjYWxsIFxhZm91cnBhcGVyLgorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgVXNlIEBhZm91cndpZGUgdG8gcHJpbnQgb24gQTQgcGFwZXIgaW4gbGFuZHNjYXBlIGZvcm1hdC4KK1xkZWZcYWZvdXJ3aWRle3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezI0MW1tfXsxNjVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LTIuOTVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBAcGFnZXNpemVzIFRFWFRIRUlHSFRbLFRFWFRXSURUSF0KKyUgUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgc2V0dGluZyB0aGUgbWFyZ2lucywgXHRvcHNraXAsIFxwYXJza2lwLAorJSBhbmQvb3IgbGVhZGluZywgYWxzby4gT3IgcGVyaGFwcyB3ZSBzaG91bGQgY29tcHV0ZSB0aGVtIHNvbWVob3cuCislCitccGFyc2VhcmdkZWZccGFnZXNpemVze1xwYWdlc2l6ZXN5eXkgIzEsLFxmaW5pc2h9CitcZGVmXHBhZ2VzaXplc3l5eSMxLCMyLCMzXGZpbmlzaHt7JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcaHNpemU9IzJccmVsYXggXGZpCisgIFxnbG9iYWxkZWZzID0gMQorICAlCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9JQorICAlCisgIFxkaW1lbjAgPSAjMQorICBcYWR2YW5jZVxkaW1lbjAgYnkgXHZvZmZzZXQKKyAgJQorICBcZGltZW4yID0gXGhzaXplCisgIFxhZHZhbmNlXGRpbWVuMiBieSBcbm9ybWFsb2Zmc2V0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzeyMxfXtcaHNpemV9JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xub3JtYWxvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7XGRpbWVuMH17XGRpbWVuMn0lCit9fQorCislIFNldCBkZWZhdWx0IHRvIGxldHRlci4KKyUKK1xsZXR0ZXJwYXBlcgorCisKK1xtZXNzYWdle2FuZCB0dXJuaW5nIG9uIHRleGluZm8gaW5wdXQgZm9ybWF0Ln0KKworJSBEZWZpbmUgbWFjcm9zIHRvIG91dHB1dCB2YXJpb3VzIGNoYXJhY3RlcnMgd2l0aCBjYXRjb2RlIGZvciBub3JtYWwgdGV4dC4KK1xjYXRjb2RlYFwiPVxvdGhlcgorXGNhdGNvZGVgXH49XG90aGVyCitcY2F0Y29kZWBcXj1cb3RoZXIKK1xjYXRjb2RlYFxfPVxvdGhlcgorXGNhdGNvZGVgXHw9XG90aGVyCitcY2F0Y29kZWBcPD1cb3RoZXIKK1xjYXRjb2RlYFw+PVxvdGhlcgorXGNhdGNvZGVgXCs9XG90aGVyCitcY2F0Y29kZWBcJD1cb3RoZXIKK1xkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xkZWZcbm9ybWFsdGlsZGV7fn0KK1xkZWZcbm9ybWFsY2FyZXR7Xn0KK1xkZWZcbm9ybWFsdW5kZXJzY29yZXtffQorXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGRlZlxub3JtYWxsZXNzezx9CitcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xkZWZcbm9ybWFscGx1c3srfQorXGRlZlxub3JtYWxkb2xsYXJ7JH0lJCBmb250LWxvY2sgZml4CisKKyUgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnQgb25lIHdheSBpbiBcdHQKKyUgKHdoZXJlIGl0IGNhbiBwcm9iYWJseSBiZSBvdXRwdXQgYXMtaXMpLCBhbmQgYW5vdGhlciB3YXkgaW4gb3RoZXIgZm9udHMsCislIHdoZXJlIHNvbWV0aGluZyBoYWlyaWVyIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUuCislCislICMxIGlzIHdoYXQgdG8gcHJpbnQgaWYgd2UgYXJlIGluZGVlZCB1c2luZyBcdHQ7ICMyIGlzIHdoYXQgdG8gcHJpbnQKKyUgb3RoZXJ3aXNlLiAgU2luY2UgYWxsIHRoZSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8KKyUgaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZCBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsCislIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZSB0aGlzLCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZ1c2luZ3R0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjNcZm9udD0wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgZm9yIGl0YWxpYyBmb250LiAgQWN0dWFsbHkgdGhpcyBhbHNvIGNhdGNoZXMKKyUgbm9uLWl0YWxpYyBzbGFudGVkIGZvbnRzIHNpbmNlIGl0IGlzIGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCislIGl0YWxpYyBmb250cy4gIEJ1dCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSAkIGFuZCBpdCB1c2VzIFxzbCBhbnl3YXkKKyUgdGhpcyBpcyBub3QgYSBwcm9ibGVtLgorXGRlZlxpZnVzaW5naXQjMSMye1xpZmRpbSBcZm9udGRpbWVuMVxmb250PjBwdCAjMVxlbHNlICMyXGZpfQorCislIFR1cm4gb2ZmIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0IEAKKyUgKGFuZCB0aG9zZSB3aGljaCB0aGUgdXNlciBjYW4gdXNlIGFzIGlmIHRoZXkgd2VyZSBvcmRpbmFyeSkuCislIE1vc3Qgb2YgdGhlc2Ugd2Ugc2ltcGx5IHByaW50IGZyb20gdGhlIFx0dCBmb250LCBidXQgZm9yIHNvbWUsIHdlIGNhbgorJSB1c2UgbWF0aCBvciBvdGhlciB2YXJpYW50cyB0aGF0IGxvb2sgYmV0dGVyIGluIG5vcm1hbCB0ZXh0LgorCitcY2F0Y29kZWBcIj1cYWN0aXZlCitcZGVmXGFjdGl2ZWRvdWJsZXF1b3Rle3tcdHRcY2hhcjM0fX0KK1xsZXQiPVxhY3RpdmVkb3VibGVxdW90ZQorXGNhdGNvZGVgXH49XGFjdGl2ZQorXGRlZn57e1x0dFxjaGFyMTI2fX0KK1xjaGFyZGVmXGhhdD1gXF4KK1xjYXRjb2RlYFxePVxhY3RpdmUKK1xkZWZee3tcdHQgXGhhdH19CisKK1xjYXRjb2RlYFxfPVxhY3RpdmUKK1xkZWZfe1xpZnVzaW5ndHRcbm9ybWFsdW5kZXJzY29yZVxffQorXGxldFxyZWFsdW5kZXI9XworJSBTdWJyb3V0aW5lIGZvciB0aGUgcHJldmlvdXMgbWFjcm8uCitcZGVmXF97XGxlYXZldm1vZGUgXGtlcm4uMDdlbSBcdmJveHtcaHJ1bGUgd2lkdGguM2VtIGhlaWdodC4xZXh9XGtlcm4gLjA3ZW0gfQorCitcY2F0Y29kZWBcfD1cYWN0aXZlCitcZGVmfHt7XHR0XGNoYXIxMjR9fQorXGNoYXJkZWYgXGxlc3M9YFw8CitcY2F0Y29kZWBcPD1cYWN0aXZlCitcZGVmPHt7XHR0IFxsZXNzfX0KK1xjaGFyZGVmIFxndHI9YFw+CitcY2F0Y29kZWBcPj1cYWN0aXZlCitcZGVmPnt7XHR0IFxndHJ9fQorXGNhdGNvZGVgXCs9XGFjdGl2ZQorXGRlZit7e1x0dCBcY2hhciA0M319CitcY2F0Y29kZWBcJD1cYWN0aXZlCitcZGVmJHtcaWZ1c2luZ2l0e3tcc2xcJH19XG5vcm1hbGRvbGxhcn0lJCBmb250LWxvY2sgZml4CisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiBhIGZpbGUKKyUgbmFtZSBjYW5ub3QgYmUgYWN0aXZlIHVudGlsIHdlIGhhdmUgcGFyc2VkIHRoZSBjb21tYW5kIGxpbmUuCislIFNvIHR1cm4gdGhlbSBvZmYgYWdhaW4sIGFuZCBoYXZlIFxldmVyeWpvYiAob3IgQHNldGZpbGVuYW1lKSB0dXJuIHRoZW0gb24uCislIFxvdGhlcmlmeWFjdGl2ZSBpcyBjYWxsZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK1xkZWZcb3RoZXJpZnlhY3RpdmV7XGNhdGNvZGVgKz1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyfQorCislIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzIGV2ZW4gYWZ0ZXIKKyUgcGFyc2luZyB0aGVtLgorXGRlZlx0dXJub2ZmYWN0aXZleyUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgXG90aGVyYmFja3NsYXNoCit9CisKK1xjYXRjb2RlYFxAPTAKKworJSBcYmFja3NsYXNoY3VyZm9udCBvdXRwdXRzIG9uZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIGN1cnJlbnQgZm9udCwKKyUgYXMgaW4gXGNoYXJgXFwuCitcZ2xvYmFsXGNoYXJkZWZcYmFja3NsYXNoY3VyZm9udD1gXFwKK1xnbG9iYWxcbGV0XHJhd2JhY2tzbGFzaHh4PVxiYWNrc2xhc2hjdXJmb250ICAlIGxldCBleGlzdGluZyAuPz9zIGZpbGVzIHdvcmsKKworJSBccmVhbGJhY2tzbGFzaCBpcyBhbiBhY3R1YWwgY2hhcmFjdGVyIGBcJyB3aXRoIGNhdGNvZGUgb3RoZXIsIGFuZAorJSBcZG91YmxlYmFja3NsYXNoIGlzIHR3byBvZiB0aGVtIChmb3IgdGhlIHBkZiBvdXRsaW5lcykuCit7XGNhdGNvZGVgXFw9XG90aGVyIEBnZGVmQHJlYWxiYWNrc2xhc2h7XH0gQGdkZWZAZG91YmxlYmFja3NsYXNoe1xcfX0KKworJSBJbiB0ZXhpbmZvLCBiYWNrc2xhc2ggaXMgYW4gYWN0aXZlIGNoYXJhY3RlcjsgaXQgcHJpbnRzIHRoZSBiYWNrc2xhc2gKKyUgaW4gZml4ZWQgd2lkdGggZm9udC4KK1xjYXRjb2RlYFxcPVxhY3RpdmUKK0BkZWZAbm9ybWFsYmFja3NsYXNoe3tAdHRAYmFja3NsYXNoY3VyZm9udH19CislIE9uIHN0YXJ0dXAsIEBmaXhiYWNrc2xhc2ggYXNzaWduczoKKyUgIEBsZXQgXCA9IEBub3JtYWxiYWNrc2xhc2gKKworJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCislIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKKyUgY2F0Y29kZSBvdGhlci4KK0BnZGVmQHJhd2JhY2tzbGFzaHtAbGV0XD1AYmFja3NsYXNoY3VyZm9udH0KK0BnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQorCislIFNhbWUgYXMgQHR1cm5vZmZhY3RpdmUgZXhjZXB0IG91dHB1dHMgXCBhcyB7XHR0XGNoYXJgXFx9IGluc3RlYWQgb2YKKyUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4KKyUgCitAZGVmQG5vcm1hbHR1cm5vZmZhY3RpdmV7JQorICBAbGV0XD1Abm9ybWFsYmFja3NsYXNoCisgIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQorICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgQGxldF49QG5vcm1hbGNhcmV0CisgIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCisgIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgorICBAbGV0PD1Abm9ybWFsbGVzcworICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgorICBAbGV0Kz1Abm9ybWFscGx1cworICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKKyAgQHVuc2Vwc3BhY2VzCit9CisKKyUgTWFrZSBfIGFuZCArIFxvdGhlciBjaGFyYWN0ZXJzLCB0ZW1wb3JhcmlseS4KKyUgVGhpcyBpcyBjYW5jZWxlZCBieSBAZml4YmFja3NsYXNoLgorQG90aGVyaWZ5YWN0aXZlCisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgd2UgZG9uJ3Qgd2FudCB0aGUgYFxpbnB1dCB0ZXhpbmZvJyB0byBzaG93IHVwLgorJSBUaGF0IGlzIHdoYXQgXGVhdGlucHV0IGlzIGZvcjsgYWZ0ZXIgdGhhdCwgdGhlIGBcJyBzaG91bGQgcmV2ZXJ0IHRvIHByaW50aW5nCislIGEgYmFja3NsYXNoLgorJQorQGdkZWZAZWF0aW5wdXQgaW5wdXQgdGV4aW5mb3tAZml4YmFja3NsYXNofQorQGdsb2JhbEBsZXRcID0gQGVhdGlucHV0CisKKyUgT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMgdGhlIGZpbGUgZGlkIG5vdCBoYXZlIGEgYFxpbnB1dCB0ZXhpbmZvJy4gVGhlbgorJSB0aGUgZmlyc3QgYFwnIGluIHRoZSBmaWxlIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIG1hY3JvIHRyaWVzIHRvIGZpeAorJSB0aGF0LCBhc3N1bWluZyBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBgXCcgY291bGQgcGxhdXNpYmx5IG9jY3VyLgorJSBBbHNvIHR1cm4gYmFjayBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiB0aGUgaW5wdXQKKyUgZmlsZSBuYW1lLCBpbiBjYXNlIG5vdCB1c2luZyBhIHByZS1kdW1wZWQgZm9ybWF0LgorJQorQGdkZWZAZml4YmFja3NsYXNoeyUKKyAgQGlmeFxAZWF0aW5wdXQgQGxldFwgPSBAbm9ybWFsYmFja3NsYXNoIEBmaQorICBAY2F0Y29kZWArPUBhY3RpdmUKKyAgQGNhdGNvZGVgQF89QGFjdGl2ZQorfQorCislIFNheSBAZm9vLCBub3QgXGZvbywgaW4gZXJyb3IgbWVzc2FnZXMuCitAZXNjYXBlY2hhciA9IGBAQAorCislIFRoZXNlIGxvb2sgb2sgaW4gYWxsIGZvbnRzLCBzbyBqdXN0IG1ha2UgdGhlbSBub3Qgc3BlY2lhbC4KK0BjYXRjb2RlYEAmID0gQG90aGVyCitAY2F0Y29kZWBAIyA9IEBvdGhlcgorQGNhdGNvZGVgQCUgPSBAb3RoZXIKKworCitAYyBMb2NhbCB2YXJpYWJsZXM6CitAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCitAYyBwYWdlLWRlbGltaXRlcjogIl5cXFxcbWVzc2FnZSIKK0BjIHRpbWUtc3RhbXAtc3RhcnQ6ICJkZWZcXFxcdGV4aW5mb3ZlcnNpb257IgorQGMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCitAYyB0aW1lLXN0YW1wLWVuZDogIn0iCitAYyBFbmQ6CisKK0BjIHZpbTpzdz0yOgorCitAaWdub3JlCisgICBhcmNoLXRhZzogZTFiMzZlMzItYzk2ZS00MTM1LWE0MWEtMGIyZWZhMmVhMTE1CitAZW5kIGlnbm9yZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9BbmRyb2lkLm1rIGIvZTJmc3Byb2dzL2UyZnNjay9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDQzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNjYgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCB0aGUgbGliZXh0MiBwcm9maWxlIGxpYnJhcnkKKworbGliZXh0Ml9wcm9maWxlX3NyY19maWxlcyA6PSAgXAorCXByb2ZfZXJyLmMgXAorCXByb2ZpbGUuYworCitsaWJleHQyX3Byb2ZpbGVfc2hhcmVkX2xpYnJhcmllcyA6PSBcCisJbGliZXh0Ml9jb21fZXJyCisKK2xpYmV4dDJfcHJvZmlsZV9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2xpYmV4dDJfcHJvZmlsZV9jX2luY2x1ZGVzIDo9IGV4dGVybmFsL2UyZnNwcm9ncy9saWIKKworbGliZXh0Ml9wcm9maWxlX2NmbGFncyA6PSAtTzIgLWcgLVcgLVdhbGwgXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkRVUCBcCisJLURIQVZFX01NQVAgXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfR0VUUEFHRVNJWkUgXAorCS1ESEFWRV9MU0VFSzY0IFwKKwktREhBVkVfTFNFRUs2NF9QUk9UT1RZUEUgXAorCS1ESEFWRV9FWFQyX0lPQ1RMUyBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKwktREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GIFwKKwktRERJU0FCTEVfQkFDS1RSQUNFPTEgXAorCS1Xbm8tdW51c2VkLXBhcmFtZXRlcgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9wcm9maWxlX3NyY19maWxlcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9ICQobGliZXh0Ml9wcm9maWxlX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGxpYmV4dDJfcHJvZmlsZV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmV4dDJfcHJvZmlsZV9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9wcm9maWxlX2NmbGFncykKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX3Byb2ZpbGUKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfcHJvZmlsZV9zcmNfZmlsZXMpCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9ICQoYWRkc3VmZml4IC1ob3N0LCAkKGxpYmV4dDJfcHJvZmlsZV9zaGFyZWRfbGlicmFyaWVzKSkKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX3Byb2ZpbGVfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJfcHJvZmlsZV9jZmxhZ3MpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9wcm9maWxlLWhvc3QKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX1NIQVJFRF9MSUJSQVJZKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHRoZSBlMmZzY2sgYmluYXJ5CisKK2UyZnNja19zcmNfZmlsZXMgOj0gIFwKKwljcmMzMi5jIFwKKwllMmZzY2suYyBcCisJZGljdC5jIFwKKwlzdXBlci5jIFwKKwlwYXNzMS5jIFwKKwlwYXNzMWIuYyBcCisJcGFzczIuYyBcCisJcGFzczMuYyBcCisJcGFzczQuYyBcCisJcGFzczUuYyBcCisJbG9nZmlsZS5jIFwKKwlqb3VybmFsLmMgXAorCXJlY292ZXJ5LmMgXAorCXJldm9rZS5jIFwKKwliYWRibG9ja3MuYyBcCisJdXRpbC5jIFwKKwl1bml4LmMgXAorCWRpcmluZm8uYyBcCisJZHhfZGlyaW5mby5jIFwKKwllaGFuZGxlci5jIFwKKwlwcm9ibGVtLmMgXAorCW1lc3NhZ2UuYyBcCisJZWFfcmVmY291bnQuYyBcCisJcXVvdGEuYyBcCisJcmVoYXNoLmMgXAorCXJlZ2lvbi5jIFwKKwlzaWdjYXRjaGVyLmMKKworZTJmc2NrX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorCWxpYmV4dDJmcyBcCisJbGliZXh0Ml9ibGtpZCBcCisJbGliZXh0Ml91dWlkIFwKKwlsaWJleHQyX3Byb2ZpbGUgXAorCWxpYmV4dDJfcXVvdGEgXAorCWxpYmV4dDJfY29tX2VyciBcCisJbGliZXh0Ml9lMnAKK2UyZnNja19zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2UyZnNja19jX2luY2x1ZGVzIDo9CisKK2UyZnNja19jZmxhZ3MgOj0gLU8yIC1nIC1XIC1XYWxsIC1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwktREhBVkVfRElSRU5UX0ggXAorCS1ESEFWRV9FUlJOT19IIFwKKwktREhBVkVfSU5UVFlQRVNfSCBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TRVRKTVBfSCBcCisJLURIQVZFX1NZU19JT0NUTF9IIFwKKwktREhBVkVfU1lTX01NQU5fSCBcCisJLURIQVZFX1NZU19NT1VOVF9IIFwKKwktREhBVkVfU1lTX1BSQ1RMX0ggXAorCS1ESEFWRV9TWVNfUkVTT1VSQ0VfSCBcCisJLURIQVZFX1NZU19TRUxFQ1RfSCBcCisJLURIQVZFX1NZU19TVEFUX0ggXAorCS1ESEFWRV9TWVNfVFlQRVNfSCBcCisJLURIQVZFX1NURExJQl9IIFwKKwktREhBVkVfVU5JU1REX0ggXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfU1RSRFVQIFwKKwktREhBVkVfTU1BUCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9JTlRQVFJfVCBcCisJLURFTkFCTEVfSFRSRUU9MSBcCisJLURIQVZFX1NZU19USU1FX0ggXAorCS1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYgXAorCS1ERElTQUJMRV9CQUNLVFJBQ0U9MSBcCisJLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQoZTJmc2NrX3NyY19maWxlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChlMmZzY2tfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGUyZnNja19jZmxhZ3MpCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSAkKGUyZnNja19zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChlMmZzY2tfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSBlMmZzY2sKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGUyZnNja19zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQoZTJmc2NrX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChlMmZzY2tfY2ZsYWdzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGFkZHN1ZmZpeCAtaG9zdCwgJChlMmZzY2tfc2hhcmVkX2xpYnJhcmllcykpCitMT0NBTF9NT0RVTEUgOj0gZTJmc2NrX2hvc3QKK0xPQ0FMX01PRFVMRV9TVEVNIDo9IGUyZnNjaworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svQ0hBTkdFUyBiL2UyZnNwcm9ncy9lMmZzY2svQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTEzNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9DSEFOR0VTCkBAIC0wLDAgKzEsNTMgQEAKK1t0eXRzbzoxOTk0MDEwMS4xMjAwRVNUXQorCitBZGQgbmV3IG9wdGlvbnMgLWwgYW5kIC1MLCB0byBhcHBlbmQgdG8gYW5kIG1vZGlmeSB0aGUgYmFkLWJsb2NrcyBsaXN0LgorCitGaXggYnVncyBpbiBiYWQtYmxvY2sgY2xvbmluZy4KKworW3R5dHNvOjE5OTMxMjMwLjE4MzJFU1RdCisKK0NsZWFuIHVwIGUyZnNjayBhbmQgbGlicmFyeSB0byBiZSBjbGVhbiBldmVuIHdoZW4gY29tcGlsaW5nIHdpdGggZnVsbAord2FybmluZ3MgZW5hYmxlZC4KKworTWFrZSBlMmZzY2sgZGVhbCB3aXRoIHplcm8tbGVuZ3RoIGRpcmVjdG9yaWVzIGNvcnJlY3RseS4KKworRGVsZXRlZCBpbm9kZXMgZnJvbSBvbGQgZXh0MmZzIGNvZGUgKGlub2RlcyB3aXRoIGR0aW1lIHNldCBidXQKK25vbi16ZXJvIGxpbmsgY291bnQpIGFyZSBkZXRlY3RlZCwgYW5kIHRoZSB1c2VyIGlzIGdpdmVuIHRoZQorb3Bwb3J0dW5pdHkgdG8gY2xlYXIgdGhlbS4KKworVGhlIGxhc3QgYml0IGluIHRoZSBsYXN0IGdyb3VwIG9mIHRoZSBibG9jayBiaXRtYXAgYmFkZGluZyB3YXMgbm90CitiZWluZyBjaGVja2VkOyBub3cgZml4ZWQuCisKK1RoZSBmcmVlX2Jsb2NrcyBhbmQgZnJlZV9pbm9kZXMgY291bnQgaW4gdGhlIGxhc3QgZ3JvdXAgd2VyZW4ndCBiZWluZworY2hlY2tlZC4gIE5vdyBmaXhlZC4KKworW3R5dHNvOjE5OTMxMTAxLjAwMDdFU1RdCisKK0ZpeGVkIGJ1Z3Mgd2l0aCByb290IHJlYWxsb2NhdGlvbjsgcHJldmlvdXNseSB0aGUgcGFyZW50IHBvaW50ZXJzIGluCit0aGUgZGlyaW5mbyBzdHJ1Y3R1cmUgd291bGQgZ2V0IGNvcnJ1cHRlZCwgY2F1c2luZyBtYW55IGRpZmZlcmVudCAnLi4nCitsaW5rcyB0byBiZSB3cm9uZy4gIEFsc28sIHRoZSBpbm9kZSBsaW5rIGNvdW50IGZvciB0aGUgcm9vdCBkaXJlY3RvcnkKK3dhc24ndCBhbHdheXMgYmVpbmcgc2V0IGNvcnJlY3RseS4gIChBbGwgb2YgdGhpcyB3b3VsZCBiZSBmaXhlZCBvbgordGhlIHNlY29uZCBlMmZzY2ssIGhvd2V2ZXIpLgorCitGaXhlZCB0byByZWNvZ25pemUgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGNhdXNlZCBieSBta2UyZnMgMC4yYiAod2hlcmUKKy8gYW5kIC9sb3N0K2ZvdW5kIGhhZCBub24temVybyBkdGltZSBlbnRyaWVzKS4gIE9mZmVycyB0byBmaXggLydzCitkdGltZSBlbnRyeS4KKworZTJmc2NrIHdpbGwgbm93IGV4cGFuZCB0aGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5IGlmIGl0IHJ1bnMgb3V0IG9mIHJvb20uCisKK0ZpeGVkIGRlcGVuZGVuY3kgb24gQkxPQ0tfU0laRSBpbiBwYXNzMi4gIGUyZnNjayB3aWxsIG5vdyBoYW5kbGUgNGsKK2ZpbGVzeXN0ZW1zIHcvbyBwcm9ibGVtcy4KKworZTJmc2NrIHdpbGwgbm93IG1vdmUgYmFkIGJsb2NrcyBmb3VuZCBpbiB0aGUgaW5vZGUgYml0bWFwcywgYmxvY2sKK2JpdG1hcHMsIGFuZCBpbiB0aGUgaW5vZGUgdGFibGVzLiAgKENhbid0IGhhbmRsZSBiYWQgYmxvY2tzIGZvdW5kIGluCit0aGUgc3VwZXJibG9jayBhbmQgdGhlIGdyb3VwIGRlc2NyaXB0b3JzLikgIChEb2Vzbid0IHVwZGF0ZSBhbHRlcm5hdGUKK3N1cGVyYmxvY2tzLCBncm91cCBkZXNjcmlwdG9ycy4pCisKK2UyZnNjayBub3cgc3VwcG9ydHMgdGhlIC1iIG9wdGlvbiwgdG8gYWxsb3cgYSB1c2VyIHRvIHNwZWNpZnkgYW4KK2FsdGVybmF0ZSBzdXBlcmJsb2NrLgorCitUaGUgLUIgb3B0aW9uIG5vdyBzcGVjaWZpZXMgdGhlIGJsb2Nrc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4gIChJZiBub3QKK3NwZWNpZmllZCwgYW5kIHRoZSAtYiBvcHRpb24gaXMgc3BlY2lmaWVkLCBlMmZzY2sgd2lsbCBhdHRlbXB0IHRvCitzZWFyY2ggdGhyb3VnaCB2YXJpb3VzIGJsb2Nrc2l6ZXMgdG8gZmluZCB0aGUgY29ycmVjdCBvbmUuKQorCitBZGRlZCBtYW51YWwgcGFnZS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvZTJmc2NrL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWM4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTc4IEBACisjCisjIE1ha2VmaWxlIGZvciBlMmZzY2sKKyMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4uCitteV9kaXIgPSBlMmZzY2sKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK1BST0dTPQkJZTJmc2NrCitNQU5QQUdFUz0JZTJmc2NrLjgKK0ZNQU5QQUdFUz0JZTJmc2NrLmNvbmYuNQorCitMSUJTPSAkKExJQlFVT1RBKSAkKExJQkVYVDJGUykgJChMSUJDT01fRVJSKSAkKExJQkJMS0lEKSAkKExJQlVVSUQpIFwKKwkkKExJQklOVEwpICQoTElCRTJQKQorREVQTElCUz0gJChERVBMSUJRVU9UQSkgJChMSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikgJChERVBMSUJCTEtJRCkgXAorCSAkKERFUExJQlVVSUQpICQoREVQTElCRTJQKQorCitTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCUVVPVEEpICQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikgXAorCSAgICAgJChTVEFUSUNfTElCQkxLSUQpICQoU1RBVElDX0xJQlVVSUQpICQoTElCSU5UTCkgJChTVEFUSUNfTElCRTJQKQorU1RBVElDX0RFUExJQlM9ICQoREVQU1RBVElDX0xJQlFVT1RBKSAkKFNUQVRJQ19MSUJFWFQyRlMpIFwKKwkJJChERVBTVEFUSUNfTElCQ09NX0VSUikgJChERVBTVEFUSUNfTElCQkxLSUQpIFwKKwkJJChERVBTVEFUSUNfTElCVVVJRCkgJChERVBTVEFUSUNfTElCRTJQKQorCitQUk9GSUxFRF9MSUJTPSAkKFBST0ZJTEVEX0xJQlFVT1RBKSAkKFBST0ZJTEVEX0xJQkVYVDJGUykgXAorCSAgICAgICAkKFBST0ZJTEVEX0xJQkNPTV9FUlIpICQoUFJPRklMRURfTElCQkxLSUQpICQoUFJPRklMRURfTElCVVVJRCkgXAorCSAgICAgICAkKFBST0ZJTEVEX0xJQkUyUCkgJChMSUJJTlRMKQorUFJPRklMRURfREVQTElCUz0gJChERVBQUk9GSUxFRF9MSUJRVU9UQSkgJChQUk9GSUxFRF9MSUJFWFQyRlMpIFwKKwkJICAkKERFUFBST0ZJTEVEX0xJQkNPTV9FUlIpICQoREVQUFJPRklMRURfTElCQkxLSUQpIFwKKwkJICAkKERFUFBST0ZJTEVEX0xJQlVVSUQpICQoREVQUFJPRklMRURfTElCRTJQKQorCitDT01QSUxFX0VUPSQodG9wX2J1aWxkZGlyKS9saWIvZXQvY29tcGlsZV9ldCAtLWJ1aWxkLXRyZWUKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKKworIworIyBGbGFncyBmb3IgdXNpbmcgQ2hlY2tlcgorIwlOb3RlOiBUaGUgb3B0aW1pemF0aW9uIGZsYWdzIG11c3QgaW5jbHVkZSAtZworIworI01DSEVDSz0JLWNoZWNrZXIKKyNMSUJTPSAkKExJQkNPTV9FUlIpICQoTElCX0VYVDJGUykgJChDSEVDS0xJQikKKyNERVBMSUJTPSAkKExJQkNPTV9FUlIpICQoTElCX0VYVDJGUykgCisjQ0hFQ0tMSUI9IC91c3IvbGliL2xpYmNoZWNrZXIubworCisjCisjIEZsYWdzIGZvciBkb2luZyBtdHJhY2UgLS0tIHVuY29tbWVudCB0byBwcm9kdWNlIG10cmFjaW5nIGUyZnNjaworIyAJTm90ZTogIFRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgbXVzdCBpbmNsdWRlIC1nCisjCisjTVRSQUNFPQktRE1UUkFDRQorI01UUkFDRV9PQko9IG10cmFjZS5vCisjTVRSQUNFX1NSQz0gJChzcmNkaXIpL210cmFjZS5jCisjT1BUPSAtZworCisjCisjIEZsYWdzIGZvciBkb2luZyBtY2hlY2sgLS0tIHVuY29tbWVudCB0byBwcm9kdWNlIG1jaGVja2luZyBlMmZzY2sKKyMgCU5vdGU6ICBUaGUgb3B0aW1pemF0aW9uIGZsYWdzIG11c3QgaW5jbHVkZSAtZworIworI01DSEVDSz0gLURNQ0hFQ0sKKworT0JKUz0gY3JjMzIubyBkaWN0Lm8gdW5peC5vIGUyZnNjay5vIHN1cGVyLm8gcGFzczEubyBwYXNzMWIubyBwYXNzMi5vIFwKKwlwYXNzMy5vIHBhc3M0Lm8gcGFzczUubyBqb3VybmFsLm8gYmFkYmxvY2tzLm8gdXRpbC5vIGRpcmluZm8ubyBcCisJZHhfZGlyaW5mby5vIGVoYW5kbGVyLm8gcHJvYmxlbS5vIG1lc3NhZ2UubyBxdW90YS5vIHJlY292ZXJ5Lm8gXAorCXJlZ2lvbi5vIHJldm9rZS5vIGVhX3JlZmNvdW50Lm8gcmVoYXNoLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gXAorCWxvZ2ZpbGUubyBzaWdjYXRjaGVyLm8gJChNVFJBQ0VfT0JKKQorCitQUk9GSUxFRF9PQkpTPSBwcm9maWxlZC9kaWN0Lm8gcHJvZmlsZWQvdW5peC5vIHByb2ZpbGVkL2UyZnNjay5vIFwKKwlwcm9maWxlZC9zdXBlci5vIHByb2ZpbGVkL3Bhc3MxLm8gcHJvZmlsZWQvcGFzczFiLm8gXAorCXByb2ZpbGVkL3Bhc3MyLm8gcHJvZmlsZWQvcGFzczMubyBwcm9maWxlZC9wYXNzNC5vIHByb2ZpbGVkL3Bhc3M1Lm8gXAorCXByb2ZpbGVkL2pvdXJuYWwubyBwcm9maWxlZC9iYWRibG9ja3MubyBwcm9maWxlZC91dGlsLm8gXAorCXByb2ZpbGVkL2RpcmluZm8ubyBwcm9maWxlZC9keF9kaXJpbmZvLm8gcHJvZmlsZWQvZWhhbmRsZXIubyBcCisJcHJvZmlsZWQvbWVzc2FnZS5vIHByb2ZpbGVkL3Byb2JsZW0ubyBwcm9maWxlZC9xdW90YS5vIFwKKwlwcm9maWxlZC9yZWNvdmVyeS5vIHByb2ZpbGVkL3JlZ2lvbi5vIHByb2ZpbGVkL3Jldm9rZS5vIFwKKwlwcm9maWxlZC9lYV9yZWZjb3VudC5vIHByb2ZpbGVkL3JlaGFzaC5vIHByb2ZpbGVkL3Byb2ZpbGUubyBcCisJcHJvZmlsZWQvY3JjMzIubyBwcm9maWxlZC9wcm9mX2Vyci5vIHByb2ZpbGVkL2xvZ2ZpbGUubyBcCisJcHJvZmlsZWQvc2lnY2F0Y2hlci5vCisKK1NSQ1M9ICQoc3JjZGlyKS9lMmZzY2suYyBcCisJJChzcmNkaXIpL2NyYzMyLmMgXAorCSQoc3JjZGlyKS9nZW5fY3JjMzJ0YWJsZS5jIFwKKwkkKHNyY2RpcikvZGljdC5jIFwKKwkkKHNyY2Rpcikvc3VwZXIuYyBcCisJJChzcmNkaXIpL3Bhc3MxLmMgXAorCSQoc3JjZGlyKS9wYXNzMWIuYyBcCisJJChzcmNkaXIpL3Bhc3MyLmMgXAorCSQoc3JjZGlyKS9wYXNzMy5jIFwKKwkkKHNyY2RpcikvcGFzczQuYyBcCisJJChzcmNkaXIpL3Bhc3M1LmMgXAorCSQoc3JjZGlyKS9qb3VybmFsLmMgXAorCSQoc3JjZGlyKS9yZWNvdmVyeS5jIFwKKwkkKHNyY2RpcikvcmV2b2tlLmMgXAorCSQoc3JjZGlyKS9iYWRibG9ja3MuYyBcCisJJChzcmNkaXIpL3V0aWwuYyBcCisJJChzcmNkaXIpL3VuaXguYyBcCisJJChzcmNkaXIpL2RpcmluZm8uYyBcCisJJChzcmNkaXIpL2R4X2RpcmluZm8uYyBcCisJJChzcmNkaXIpL2VoYW5kbGVyLmMgXAorCSQoc3JjZGlyKS9wcm9ibGVtLmMgXAorCSQoc3JjZGlyKS9tZXNzYWdlLmMgXAorCSQoc3JjZGlyKS9lYV9yZWZjb3VudC5jIFwKKwkkKHNyY2RpcikvcmVoYXNoLmMgXAorCSQoc3JjZGlyKS9yZWdpb24uYyBcCisJJChzcmNkaXIpL3Byb2ZpbGUuYyBcCisJJChzcmNkaXIpL3NpZ2NhdGNoZXIuYyBcCisJJChzcmNkaXIpL2xvZ2ZpbGUuYyBcCisJcHJvZl9lcnIuYyBcCisJJChzcmNkaXIpL3F1b3RhLmMgXAorCSQoTVRSQUNFX1NSQykKKworYWxsOjogcHJvZmlsZWQgJChQUk9HUykgZTJmc2NrICQoTUFOUEFHRVMpICQoRk1BTlBBR0VTKQorCitAUFJPRklMRV9DTVRAYWxsOjogZTJmc2NrLnByb2ZpbGVkCisKK3Byb2ZfZXJyLmMgcHJvZl9lcnIuaDogcHJvZl9lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBwcm9mX2Vyci5ldCIKKwkkKFEpICQoQ09NUElMRV9FVCkgJChzcmNkaXIpL3Byb2ZfZXJyLmV0CisKK2UyZnNjazogJChPQkpTKSAgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpICQoUkRZTkFNSUMpIC1vIGUyZnNjayAkKE9CSlMpICQoTElCUykgCisKK2UyZnNjay5zdGF0aWM6ICQoT0JKUykgJChTVEFUSUNfREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKExEKSAkKExERkxBR1NfU1RBVElDKSAtbyBlMmZzY2suc3RhdGljICQoT0JKUykgJChTVEFUSUNfTElCUykgCisKK2UyZnNjay5wcm9maWxlZDogJChPQkpTKSAgJChQUk9GSUxFRF9ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBlMmZzY2sucHJvZmlsZWQgJChQUk9GSUxFRF9PQkpTKSBcCisJCSQoUFJPRklMRURfTElCUykgCisKK2dlbl9jcmMzMnRhYmxlOiAkKHNyY2RpcikvZ2VuX2NyYzMydGFibGUuYworCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQlVJTERfQ0MpICQoQlVJTERfQ0ZMQUdTKSAkKEJVSUxEX0xERkxBR1MpIC1vIGdlbl9jcmMzMnRhYmxlIFwKKwkJJChzcmNkaXIpL2dlbl9jcmMzMnRhYmxlLmMKKworY3JjMzJ0YWJsZS5oOiBnZW5fY3JjMzJ0YWJsZQorCSQoRSkgIglHRU4zMlRBQkxFICRAIgorCSQoUSkgLi9nZW5fY3JjMzJ0YWJsZSA+IGNyYzMydGFibGUuaAorCit0c3Rfc2lnY2F0Y2hlcjogJChzcmNkaXIpL3NpZ2NhdGNoZXIuYyBzaWdjYXRjaGVyLm8KKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKENDKSAkKEJVSUxEX0xERkxBR1MpICQoQUxMX0NGTEFHUykgJChSRFlOQU1JQykgXAorCQkkKHNyY2Rpcikvc2lnY2F0Y2hlci5jIC1EREVCVUcgLW8gdHN0X3NpZ2NhdGNoZXIKKwordHN0X3Byb2JsZW06ICQoc3JjZGlyKS9wcm9ibGVtLmMgJChzcmNkaXIpL3Byb2JsZW0uaCAkKExJQkVYVDJGUykgXAorCSQoREVQTElCQ09NX0VSUikKKwkkKFEpICQoQ0MpICQoQlVJTERfTERGTEFHUykgJChBTExfQ0ZMQUdTKSAtbyB0c3RfcHJvYmxlbSBcCisJCSQoc3JjZGlyKS9wcm9ibGVtLmMgLURVTklUVEVTVCAkKExJQkVYVDJGUykgJChMSUJDT01fRVJSKSBcCisJCSQoTElCSU5UTCkKKwordHN0X2NyYzMyOiAkKHNyY2RpcikvY3JjMzIuYyAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCSQoUSkgJChDQykgJChCVUlMRF9MREZMQUdTKSAkKEFMTF9DRkxBR1MpIC1vIHRzdF9jcmMzMiAkKHNyY2RpcikvY3JjMzIuYyBcCisJCS1EVU5JVFRFU1QgJChMSUJFWFQyRlMpICQoTElCQ09NX0VSUikKKwordHN0X3JlZmNvdW50OiBlYV9yZWZjb3VudC5jICQoREVQTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfcmVmY291bnQgJChzcmNkaXIpL2VhX3JlZmNvdW50LmMgXAorCQkkKEFMTF9DRkxBR1MpIC1EVEVTVF9QUk9HUkFNICQoTElCQ09NX0VSUikgJChMSUJFWFQyRlMpIAorCit0c3RfbG9nZmlsZTogJChzcmNkaXIpL2xvZ2ZpbGUuYworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9sb2dmaWxlICQoc3JjZGlyKS9sb2dmaWxlLmMgJChBTExfQ0ZMQUdTKSBcCisJCS1EVEVTVF9QUk9HUkFNCisKK3RzdF9yZWdpb246IHJlZ2lvbi5jICQoREVQTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfcmVnaW9uICQoc3JjZGlyKS9yZWdpb24uYyBcCisJCSQoQUxMX0NGTEFHUykgLURURVNUX1BST0dSQU0gJChMSUJDT01fRVJSKQorCitjaGVjazo6IHRzdF9yZWZjb3VudCB0c3RfcmVnaW9uIHRzdF9jcmMzMiB0c3RfcHJvYmxlbQorCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIC4vdHN0X3JlZmNvdW50CisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfcmVnaW9uCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfY3JjMzIKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3RzdF9wcm9ibGVtCisKK2V4dGVuZDogZXh0ZW5kLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKExEKSAkKEFMTF9MREZMQUdTKSAtbyBleHRlbmQgZXh0ZW5kLm8gJChDSEVDS0xJQikKKworZmx1c2hiOiBmbHVzaGIubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1vIGZsdXNoYiBmbHVzaGIubyAkKENIRUNLTElCKQorCitpc2NhbjogaXNjYW4ubyB1dGlsLm8gZWhhbmRsZXIubyAkKERFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChMRCkgJChBTExfTERGTEFHUykgLW8gaXNjYW4gaXNjYW4ubyB1dGlsLm8gZWhhbmRsZXIubyAkKExJQlMpCisKK3Rlc3RfcHJvZmlsZTogJChzcmNkaXIpL3Byb2ZpbGUuYyBwcm9maWxlX2hlbHBlcnMubyBhcmd2X3BhcnNlLm8gXAorCQlwcm9mX2Vyci5vIHByb2ZpbGUuaCAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRlc3RfcHJvZmlsZSAtRERFQlVHX1BST0dSQU0gJChzcmNkaXIpL3Byb2ZpbGUuYyBwcm9mX2Vyci5vIFwKKwkJcHJvZmlsZV9oZWxwZXJzLm8gYXJndl9wYXJzZS5vICQoU1RBVElDX0xJQkNPTV9FUlIpIFwKKwkJJChBTExfQ0ZMQUdTKQorCitwcm9maWxlZDoKK0BQUk9GSUxFX0NNVEAJJChFKSAiCU1LRElSICRAIgorQFBST0ZJTEVfQ01UQAkkKFEpIG1rZGlyIHByb2ZpbGVkCisKK2UyZnNjay44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZTJmc2NrLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZTJmc2NrLjguaW4gZTJmc2NrLjgKKworZTJmc2NrLmNvbmYuNTogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2UyZnNjay5jb25mLjUuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZTJmc2NrLmNvbmYuNS5pbiBlMmZzY2suY29uZi41CisKK2luc3RhbGxkaXJzOgorCSQoRSkgIglNS0lOU1RBTExESVJTICQocm9vdF9zYmluZGlyKSAkKG1hbjhkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpIFwKKwkJJChERVNURElSKSQobWFuOGRpcikgJChERVNURElSKSQobWFuNWRpcikKKworaW5zdGFsbDogJChQUk9HUykgJChNQU5QQUdFUykgJChGTUFOUEFHRVMpIGluc3RhbGxkaXJzCisJJChRKSBmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQkkKEVTKSAiCUlOU1RBTEwgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluIGV4dDIgZXh0MyBleHQ0IGV4dDRkZXY7IGRvIFwKKwkJJChFUykgIglMSU5LICQocm9vdF9zYmluZGlyKS9mc2NrLiQkaSI7IFwKKwkJKGNkICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcik7IFwKKwkJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSBlMmZzY2sgZnNjay4kJGkpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChtYW44ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChGTUFOUEFHRVMpOyBkbyBcCisJCWZvciBqIGluICQoQ09NUFJFU1NfRVhUKTsgZG8gXAorCQkJJChSTSkgLWYgJChERVNURElSKSQobWFuNWRpcikvJCRpLiQkajsgXAorCQlkb25lOyBcCisJCSQoRVMpICIJSU5TVEFMTF9EQVRBICQobWFuNWRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKG1hbjVkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluIGV4dDIgZXh0MyBleHQ0IGV4dDRkZXY7IGRvIFwKKwkJJChFUykgIglMSU5LICQobWFuOGRpcikvZnNjay4kJGkuOCI7IFwKKwkJKGNkICQoREVTVERJUikkKG1hbjhkaXIpOyBcCisJCQkkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgZTJmc2NrLjggZnNjay4kJGkuOCk7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKwkkKFEpIGZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCSQoRVMpICIJU1RSSVAgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChTVFJJUCkgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisKK3VuaW5zdGFsbDoKKwlmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpL2ZzY2suZXh0MiBcCisJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQzIFwKKwkJJChERVNURElSKSQocm9vdF9zYmluZGlyKS9mc2NrLmV4dDQgXAorCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpL2ZzY2suZXh0NGRldgorCWZvciBpIGluICQoTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKEZNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuNWRpcikvJCRpOyBcCisJZG9uZQorCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQyIFwKKwkJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQzIFwKKwkJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQ0IFwKKwkJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvZnNjay5leHQ0ZGV2CisKK2NsZWFuOgorCSQoUk0pIC1mICQoUFJPR1MpIFwjKiAqXCMgKi5zICoubyAqLmEgKn4gY29yZSBlMmZzY2suc3RhdGljIFwKKwkJZTJmc2NrLnNoYXJlZCBlMmZzY2sucHJvZmlsZWQgZmx1c2hiIGUyZnNjay44IFwKKwkJdHN0X3Byb2JsZW0gdHN0X2NyYzMyIHRzdF9yZWdpb24gdHN0X3JlZmNvdW50IGdlbl9jcmMzMnRhYmxlIFwKKwkJY3JjMzJ0YWJsZS5oIGUyZnNjay5jb25mLjUgcHJvZl9lcnIuYyBwcm9mX2Vyci5oIFwKKwkJdGVzdF9wcm9maWxlCisJJChSTSkgLXJmIHByb2ZpbGVkCisKK21vc3RseWNsZWFuOiBjbGVhbgorZGlzdGNsZWFuOiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2UyZnNjay5vOiAkKHNyY2RpcikvZTJmc2NrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmgKK2NyYzMyLm86ICQoc3JjZGlyKS9jcmMzMi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvY3JjMzJkZWZzLmggY3JjMzJ0YWJsZS5oCitnZW5fY3JjMzJ0YWJsZS5vOiAkKHNyY2RpcikvZ2VuX2NyYzMydGFibGUuYyAkKHNyY2RpcikvY3JjMzJkZWZzLmgKK2RpY3QubzogJChzcmNkaXIpL2RpY3QuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2RpY3QuaAorc3VwZXIubzogJChzcmNkaXIpL3N1cGVyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmgKK3Bhc3MxLm86ICQoc3JjZGlyKS9wYXNzMS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oCitwYXNzMWIubzogJChzcmNkaXIpL3Bhc3MxYi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9lMmZzY2suaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oICQoc3JjZGlyKS9kaWN0LmgKK3Bhc3MyLm86ICQoc3JjZGlyKS9wYXNzMi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oICQoc3JjZGlyKS9kaWN0LmgKK3Bhc3MzLm86ICQoc3JjZGlyKS9wYXNzMy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oCitwYXNzNC5vOiAkKHNyY2RpcikvcGFzczQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCBcCisgJChzcmNkaXIpL3Byb2JsZW0uaAorcGFzczUubzogJChzcmNkaXIpL3Bhc3M1LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmgKK2pvdXJuYWwubzogJChzcmNkaXIpL2pvdXJuYWwuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2pmc191c2VyLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCAkKHNyY2RpcikvcHJvYmxlbS5oCityZWNvdmVyeS5vOiAkKHNyY2RpcikvcmVjb3ZlcnkuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2pmc191c2VyLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAorcmV2b2tlLm86ICQoc3JjZGlyKS9yZXZva2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2pmc191c2VyLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaAorYmFkYmxvY2tzLm86ICQoc3JjZGlyKS9iYWRibG9ja3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZTJmc2NrLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAordXRpbC5vOiAkKHNyY2RpcikvdXRpbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCit1bml4Lm86ICQoc3JjZGlyKS91bml4LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oCitkaXJpbmZvLm86ICQoc3JjZGlyKS9kaXJpbmZvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy90ZGIuaAorZHhfZGlyaW5mby5vOiAkKHNyY2RpcikvZHhfZGlyaW5mby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitlaGFuZGxlci5vOiAkKHNyY2RpcikvZWhhbmRsZXIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorcHJvYmxlbS5vOiAkKHNyY2RpcikvcHJvYmxlbS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oICQoc3JjZGlyKS9wcm9ibGVtUC5oCittZXNzYWdlLm86ICQoc3JjZGlyKS9tZXNzYWdlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmgKK2VhX3JlZmNvdW50Lm86ICQoc3JjZGlyKS9lYV9yZWZjb3VudC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCityZWhhc2gubzogJChzcmNkaXIpL3JlaGFzaC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oIFwKKyAkKHNyY2RpcikvcHJvYmxlbS5oCityZWdpb24ubzogJChzcmNkaXIpL3JlZ2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJmc2NrLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9wcm9maWxlLmggcHJvZl9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCitwcm9maWxlLm86ICQoc3JjZGlyKS9wcm9maWxlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oCitzaWdjYXRjaGVyLm86ICQoc3JjZGlyKS9zaWdjYXRjaGVyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmgKK2xvZ2ZpbGUubzogJChzcmNkaXIpL2xvZ2ZpbGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UyZnNjay5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorcHJvZl9lcnIubzogcHJvZl9lcnIuYworcXVvdGEubzogJChzcmNkaXIpL3F1b3RhLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMmZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL3Byb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oICQodG9wX3NyY2RpcikvbGliLy4uL2UyZnNjay9kaWN0LmggXAorICQoc3JjZGlyKS9wcm9ibGVtLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL01ha2VmaWxlLnBxIGIvZTJmc3Byb2dzL2UyZnNjay9NYWtlZmlsZS5wcQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGEzY2QzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9NYWtlZmlsZS5wcQpAQCAtMCwwICsxLDkgQEAKK1RPUFNSQz0uLgorTElCTkFNRT1FMkZTQ0suTElCCitPQkpGSUxFPUUyRlNDSy5MU1QKKworT0JKUz0gZTJmc2NrLm9iaiBzdXBlci5vYmogcGFzczEub2JqIHBhc3MyLm9iaiBwYXNzMy5vYmogXAorCXBhc3M0Lm9iaiBwYXNzNS5vYmogZGlyaW5mby5vYmoKKworIWluY2x1ZGUgJChUT1BTUkMpXHBvd2VycXVlc3RcTUNPTkZJRworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2FyZ3ZfcGFyc2UuYyBiL2UyZnNwcm9ncy9lMmZzY2svYXJndl9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzViYmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2FyZ3ZfcGFyc2UuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIGFyZ3ZfcGFyc2UuYyAtLS0gdXRpbGl0eSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhIHN0cmluZyBpbnRvIGEKKyAqIAlhcmdjLCBhcmd2IGFycmF5LgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIGEgZnVuY3Rpb24gYXJndl9wYXJzZSgpIHdoaWNoIHBhcnNpbmcgYQorICogcGFzc2VkLWluIHN0cmluZywgaGFuZGxpbmcgZG91YmxlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIGFuZAorICogY3JlYXRlcyBhbiBhbGxvY2F0ZWQgYXJndiB2ZWN0b3Igd2hpY2ggY2FuIGJlIGZyZWVkIHVzaW5nIHRoZQorICogYXJndl9mcmVlKCkgZnVuY3Rpb24uCisgKgorICogU2VlIGFyZ3ZfcGFyc2UuaCBmb3IgdGhlIGZvcm1hbCBkZWZpbml0aW9uIG9mIHRoZSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDE5OTkgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvcgorICogYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRU9ET1JFIFRTJ08gKFRIRQorICogQVVUSE9SKSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAorICogSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUgorICogSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gIChJc24ndAorICogaXQgc2ljayB0aGF0IHRoZSBVLlMuIGN1bHR1cmUgb2YgbGF3c3VpdC1oYXBweSBsYXd5ZXJzIHJlcXVpcmVzCisgKiB0aGlzIGtpbmQgb2YgZGlzY2xhaW1lcj8pCisgKgorICogVmVyc2lvbiAxLjEsIG1vZGlmaWVkIDIvMjcvMTk5OQorICovCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImFyZ3ZfcGFyc2UuaCIKKworI2RlZmluZSBTVEFURV9XSElURVNQQUNFCTEKKyNkZWZpbmUgU1RBVEVfVE9LRU4JCTIKKyNkZWZpbmUgU1RBVEVfUVVPVEVECQkzCisKKy8qCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IGFyZ3ZfcGFyc2UoY2hhciAqaW5fYnVmLCBpbnQgKnJldF9hcmdjLCBjaGFyICoqKnJldF9hcmd2KQoreworCWludAlhcmdjID0gMCwgbWF4X2FyZ2MgPSAwOworCWNoYXIgCSoqYXJndiwgKipuZXdfYXJndiwgKmJ1ZiwgY2g7CisJY2hhcgkqY3AgPSAwLCAqb3V0Y3AgPSAwOworCWludAlzdGF0ZSA9IFNUQVRFX1dISVRFU1BBQ0U7CisKKwlidWYgPSBtYWxsb2Moc3RybGVuKGluX2J1ZikrMSk7CisJaWYgKCFidWYpCisJCXJldHVybiAtMTsKKworCW1heF9hcmdjID0gMDsgYXJnYyA9IDA7IGFyZ3YgPSAwOworCW91dGNwID0gYnVmOworCWZvciAoY3AgPSBpbl9idWY7IChjaCA9ICpjcCk7IGNwKyspIHsKKwkJaWYgKHN0YXRlID09IFNUQVRFX1dISVRFU1BBQ0UpIHsKKwkJCWlmIChpc3NwYWNlKChpbnQpIGNoKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIE5vdCB3aGl0ZXNwYWNlLCBzbyBzdGFydCBhIG5ldyB0b2tlbiAqLworCQkJc3RhdGUgPSBTVEFURV9UT0tFTjsKKwkJCWlmIChhcmdjID49IG1heF9hcmdjKSB7CisJCQkJbWF4X2FyZ2MgKz0gMzsKKwkJCQluZXdfYXJndiA9IHJlYWxsb2MoYXJndiwKKwkJCQkJCSAgKG1heF9hcmdjKzEpKnNpemVvZihjaGFyICopKTsKKwkJCQlpZiAoIW5ld19hcmd2KSB7CisJCQkJCWZyZWUoYXJndik7CisJCQkJCWZyZWUoYnVmKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlhcmd2ID0gbmV3X2FyZ3Y7CisJCQl9CisJCQlhcmd2W2FyZ2MrK10gPSBvdXRjcDsKKwkJfQorCQlpZiAoc3RhdGUgPT0gU1RBVEVfUVVPVEVEKSB7CisJCQlpZiAoY2ggPT0gJyInKQorCQkJCXN0YXRlID0gU1RBVEVfVE9LRU47CisJCQllbHNlCisJCQkJKm91dGNwKysgPSBjaDsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIE11c3QgYmUgcHJvY2Vzc2luZyBjaGFyYWN0ZXJzIGluIGEgd29yZCAqLworCQlpZiAoaXNzcGFjZSgoaW50KSBjaCkpIHsKKwkJCS8qCisJCQkgKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgd29yZCBhbmQgc3RhcnQKKwkJCSAqIGxvb2tpbmcgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgd29yZC4KKwkJCSAqLworCQkJKm91dGNwKysgPSAwOworCQkJc3RhdGUgPSBTVEFURV9XSElURVNQQUNFOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNoID09ICciJykgeworCQkJc3RhdGUgPSBTVEFURV9RVU9URUQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJ1xcJykgeworCQkJY2ggPSAqKytjcDsKKwkJCXN3aXRjaCAoY2gpIHsKKwkJCWNhc2UgJ1wwJzoKKwkJCQljaCA9ICdcXCc7IGNwLS07IGJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJY2ggPSAnXG4nOyBicmVhazsKKwkJCWNhc2UgJ3QnOgorCQkJCWNoID0gJ1x0JzsgYnJlYWs7CisJCQljYXNlICdiJzoKKwkJCQljaCA9ICdcYic7IGJyZWFrOworCQkJfQorCQl9CisJCSpvdXRjcCsrID0gY2g7CisJfQorCWlmIChzdGF0ZSAhPSBTVEFURV9XSElURVNQQUNFKQorCQkqb3V0Y3ArKyA9ICdcMCc7CisJaWYgKGFyZ3YgPT0gMCkgeworCQlhcmd2ID0gbWFsbG9jKHNpemVvZihjaGFyICopKTsKKwkJZnJlZShidWYpOworCX0KKwlhcmd2W2FyZ2NdID0gMDsKKwlpZiAocmV0X2FyZ2MpCisJCSpyZXRfYXJnYyA9IGFyZ2M7CisJaWYgKHJldF9hcmd2KQorCQkqcmV0X2FyZ3YgPSBhcmd2OworCXJldHVybiAwOworfQorCit2b2lkIGFyZ3ZfZnJlZShjaGFyICoqYXJndikKK3sKKwlmcmVlKCphcmd2KTsKKwlmcmVlKGFyZ3YpOworfQorCisjaWZkZWYgREVCVUcKKy8qCisgKiBGb3IgZGVidWdnaW5nCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJYWMsIHJldDsKKwljaGFyCSoqYXYsICoqY3BwOworCWNoYXIJYnVmWzI1Nl07CisKKwl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlyZXQgPSBhcmd2X3BhcnNlKGJ1ZiwgJmFjLCAmYXYpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ZigiQXJndl9wYXJzZSByZXR1cm5lZCAlZCFcbiIsIHJldCk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoIkFyZ3ZfcGFyc2UgcmV0dXJuZWQgJWQgYXJndW1lbnRzLi4uXG4iLCBhYyk7CisJCWZvciAoY3BwID0gYXY7ICpjcHA7IGNwcCsrKSB7CisJCQlpZiAoY3BwICE9IGF2KQorCQkJCXByaW50ZigiLCAiKTsKKwkJCXByaW50ZigiJyVzJyIsICpjcHApOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJYXJndl9mcmVlKGF2KTsKKwl9CisJZXhpdCgwKTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9hcmd2X3BhcnNlLmggYi9lMmZzcHJvZ3MvZTJmc2NrL2FyZ3ZfcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY0NTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9hcmd2X3BhcnNlLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGFyZ3ZfcGFyc2UuaCAtLS0gaGVhZGVyIGZpbGUgZm9yIHRoZSBhcmd2IHBhcnNlci4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgZnVuY3Rpb25zIGFyZ3ZfcGFyc2UoKSBhbmQKKyAqIGFyZ3ZfZnJlZSgpLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW50IGFyZ3ZfcGFyc2UoY2hhciAqaW5fYnVmLCBpbnQgKnJldF9hcmdjLCBjaGFyICoqKnJldF9hcmd2KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgaXRzIGZpcnN0IGFyZ3VtZW50IGEgc3RyaW5nIHdoaWNoIGl0IHdpbGwKKyAqIHBhcnNlIGludG8gYW4gYXJndiBhcmd1bWVudCB2ZWN0b3IsIHdpdGggZWFjaCB3aGl0ZS1zcGFjZSBzZXBhcmF0ZWQKKyAqIHdvcmQgcGxhY2VkIGludG8gaXRzIG93biBzbG90IGluIHRoZSBhcmd2LiAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzCisgKiBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBzbyB0aGF0IHRoZSBwYXJzZWQgd29yZHMgY2FuIGNvbnRhaW4KKyAqIHNwZWNpYWwgY2hhcmFjdGVycy4gICBUaGUgY291bnQgb2YgdGhlIG51bWJlciB3b3JkcyBmb3VuZCBpbiB0aGUKKyAqIHBhcnNlZCBzdHJpbmcsIGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50IHZlY3RvciwgYXJlIHJldHVybmVkIGludG8KKyAqIHJldF9hcmdjIGFuZCByZXRfYXJndiwgcmVzcGVjdGl2ZWx5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBleHRlcm4gdm9pZCBhcmd2X2ZyZWUoY2hhciAqKmFyZ3YpOworICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGFyZ3VtZW50IHZlY3RvciBjcmVhdGVkIGJ5IGFyZ3ZfcGFyc2UoKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAxOTk5IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IKKyAqIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwKKyAqIGNvcGllcy4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEVPRE9SRSBUUydPIChUSEUKKyAqIEFVVEhPUikgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorICogUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IKKyAqIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuICAoSXNuJ3QKKyAqIGl0IHNpY2sgdGhhdCB0aGUgVS5TLiBjdWx0dXJlIG9mIGxhd3N1aXQtaGFwcHkgbGF3eWVycyByZXF1aXJlcworICogdGhpcyBraW5kIG9mIGRpc2NsYWltZXI/KQorICoKKyAqIFZlcnNpb24gMS4xLCBtb2RpZmllZCAyLzI3LzE5OTkKKyAqLworCitleHRlcm4gaW50IGFyZ3ZfcGFyc2UoY2hhciAqaW5fYnVmLCBpbnQgKnJldF9hcmdjLCBjaGFyICoqKnJldF9hcmd2KTsKK2V4dGVybiB2b2lkIGFyZ3ZfZnJlZShjaGFyICoqYXJndik7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2JhZGJsb2Nrcy5jIGIvZTJmc3Byb2dzL2UyZnNjay9iYWRibG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0MTRiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9iYWRibG9ja3MuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIGJhZGJsb2Nrcy5jIC0tLSByZXBsYWNlL2FwcGVuZCBiYWQgYmxvY2tzIHRvIHRoZSBiYWQgYmxvY2sgaW5vZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUKKyAqIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjaW5jbHVkZSAiZTJmc2NrLmgiCisKK3N0YXRpYyBpbnQgY2hlY2tfYmJfaW5vZGVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCAqYmxvY2tfbnIsIGludCBibG9ja2NudCwKKwkJCQkgdm9pZCAqcHJpdl9kYXRhKTsKKworCitzdGF0aWMgdm9pZCBpbnZhbGlkX2Jsb2NrKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwgYmxrX3QgYmxrKQoreworCXByaW50ZihfKCJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIiksIGJsayk7CisJcmV0dXJuOworfQorCit2b2lkIHJlYWRfYmFkX2Jsb2Nrc19maWxlKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqYmFkX2Jsb2Nrc19maWxlLAorCQkJICBpbnQgcmVwbGFjZV9iYWRfYmxvY2tzKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJhZGJsb2Nrc19saXN0CWJiX2xpc3QgPSAwOworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsxMDI0XTsKKworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBiYWQgYmxvY2sgaW5vZGUgaXMgc2FuZS4gIElmIHRoZXJlIGFyZSBhbnkKKwkgKiBpbGxlZ2FsIGJsb2NrcywgY2xlYXIgdGhlbS4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZShmcywgRVhUMl9CQURfSU5PLCAwLCAwLAorCQkJCSAgICAgIGNoZWNrX2JiX2lub2RlX2Jsb2NrcywgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfYmxvY2tfaXRlcmF0ZSIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHNhbml0eSBjaGVja2luZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIpKTsKKwkJZ290byBmYXRhbDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIGFwcGVuZGluZyB0byB0aGUgYmFkIGJsb2NrcyBpbm9kZSwgcmVhZCBpbiB0aGUKKwkgKiBjdXJyZW50IGJhZCBibG9ja3MuCisJICovCisJaWYgKCFyZXBsYWNlX2JhZF9ibG9ja3MpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmJfaW5vZGUoZnMsICZiYl9saXN0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiZXh0MmZzX3JlYWRfYmJfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIpKTsKKwkJCWdvdG8gZmF0YWw7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyByZWFkIGluIHRoZSBiYWQgYmxvY2tzIGZyb20gdGhlIGZpbGU7IGlmCisJICogYmFkX2Jsb2Nrc19maWxlIGlzIG51bGwsIHRoZW4gdHJ5IHRvIHJ1biB0aGUgYmFkYmxvY2tzCisJICogY29tbWFuZC4KKwkgKi8KKwlpZiAoYmFkX2Jsb2Nrc19maWxlKSB7CisJCWYgPSBmb3BlbihiYWRfYmxvY2tzX2ZpbGUsICJyIik7CisJCWlmICghZikgeworCQkJY29tX2VycigicmVhZF9iYWRfYmxvY2tzX2ZpbGUiLCBlcnJubywKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLCBiYWRfYmxvY2tzX2ZpbGUpOworCQkJZ290byBmYXRhbDsKKwkJfQorCX0gZWxzZSB7CisJCXNwcmludGYoYnVmLCAiYmFkYmxvY2tzIC1iICVkIC1YICVzJXMlcyAlbGx1IiwgZnMtPmJsb2Nrc2l6ZSwKKwkJCShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSA/ICIiIDogIi1zICIsCisJCQkoY3R4LT5vcHRpb25zICYgRTJGX09QVF9XUklURUNIRUNLKSA/ICItbiAiIDogIiIsCisJCQlmcy0+ZGV2aWNlX25hbWUsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKTsKKwkJZiA9IHBvcGVuKGJ1ZiwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQljb21fZXJyKCJyZWFkX2JhZF9ibG9ja3NfZmlsZSIsIGVycm5vLAorCQkJCV8oIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIiksIGJ1Zik7CisJCQlnb3RvIGZhdGFsOworCQl9CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX0ZJTEUoZnMsIGYsICZiYl9saXN0LCBpbnZhbGlkX2Jsb2NrKTsKKwlpZiAoYmFkX2Jsb2Nrc19maWxlKQorCQlmY2xvc2UoZik7CisJZWxzZQorCQlwY2xvc2UoZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9iYl9GSUxFIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIikpOworCQlnb3RvIGZhdGFsOworCX0KKworCS8qCisJICogRmluYWxseSwgdXBkYXRlIHRoZSBiYWQgYmxvY2tzIGZyb20gdGhlIGJhZF9ibG9ja19tYXAKKwkgKi8KKwlwcmludGYoIiVzOiBVcGRhdGluZyBiYWQgYmxvY2sgaW5vZGUuXG4iLCBjdHgtPmRldmljZV9uYW1lKTsKKwlyZXR2YWwgPSBleHQyZnNfdXBkYXRlX2JiX2lub2RlKGZzLCBiYl9saXN0KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc191cGRhdGVfYmJfaW5vZGUiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiKSk7CisJCWdvdG8gZmF0YWw7CisJfQorCisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmJfbGlzdCk7CisJcmV0dXJuOworCitmYXRhbDoKKwljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCXJldHVybjsKKworfQorCitzdGF0aWMgaW50IGNoZWNrX2JiX2lub2RlX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkgYmxrX3QgKmJsb2NrX25yLAorCQkJCSBpbnQgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSB2b2lkICpwcml2X2RhdGEgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWlmICghKmJsb2NrX25yKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGJsb2NrIG51bWJlciBpcyBvdXRyYWdlb3VzLCBjbGVhciBpdCBhbmQgaWdub3JlIGl0LgorCSAqLworCWlmICgqYmxvY2tfbnIgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIHx8CisJICAgICpibG9ja19uciA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCXByaW50ZihfKCJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gICIKKwkJCSAiQ2xlYXJlZC5cbiIpLCAqYmxvY2tfbnIpOworCQkqYmxvY2tfbnIgPSAwOworCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9jcmMzMi5jIGIvZTJmc3Byb2dzL2UyZnNjay9jcmMzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOTJjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2NyYzMyLmMKQEAgLTAsMCArMSw1NjkgQEAKKy8qCisgKiBjcmMzMi5jIC0tLSBDUkMzMiBmdW5jdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIE9jdCAxNSwgMjAwMCBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKiBOaWNlciBjcmMzMiBmdW5jdGlvbnMvZG9jcyBzdWJtaXR0ZWQgYnkgbGludXhAaG9yaXpvbi5jb20uICBUaGFua3MhCisgKiBDb2RlIHdhcyBmcm9tIHRoZSBwdWJsaWMgZG9tYWluLCBjb3B5cmlnaHQgYWJhbmRvbmVkLiAgQ29kZSB3YXMKKyAqIHN1YnNlcXVlbnRseSBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCB0aHVzIHdhcyByZS1saWNlbnNlZCB1bmRlciB0aGUKKyAqIEdOVSBHUEwgdjIuCisgKgorICogT2N0IDEyLCAyMDAwIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqIFNhbWUgY3JjMzIgZnVuY3Rpb24gd2FzIHVzZWQgaW4gNSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbC4KKyAqIEkgbWFkZSBvbmUgdmVyc2lvbiwgYW5kIGRlbGV0ZWQgdGhlIG90aGVycy4KKyAqIFRoZXJlIGFyZSB2YXJpb3VzIGluY2FudGF0aW9ucyBvZiBjcmMzMigpLiAgU29tZSB1c2UgYSBzZWVkIG9mIDAgb3IgfjAuCisgKiBTb21lIHhvciBhdCB0aGUgZW5kIHdpdGggfjAuICBUaGUgZ2VuZXJpYyBjcmMzMigpIGZ1bmN0aW9uIHRha2VzCisgKiBzZWVkIGFzIGFuIGFyZ3VtZW50LCBhbmQgZG9lc24ndCB4b3IgYXQgdGhlIGVuZC4gIFRoZW4gaW5kaXZpZHVhbAorICogdXNlcnMgY2FuIGRvIHdoYXRldmVyIHRoZXkgbmVlZC4KKyAqICAgZHJpdmVycy9uZXQvc21jOTE5NC5jIHVzZXMgc2VlZCB+MCwgZG9lc24ndCB4b3Igd2l0aCB+MC4KKyAqICAgZnMvamZmczIgdXNlcyBzZWVkIDAsIGRvZXNuJ3QgeG9yIHdpdGggfjAuCisgKiAgIGZzL3BhcnRpdGlvbnMvZWZpLmMgdXNlcyBzZWVkIH4wLCB4b3IncyB3aXRoIH4wLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIFVOSVRURVNUCisjdW5kZWYgRU5BQkxFX05MUworI2VuZGlmCisjaW5jbHVkZSAiZTJmc2NrLmgiCisKKyNpbmNsdWRlICJjcmMzMmRlZnMuaCIKKyNpZiBDUkNfTEVfQklUUyA9PSA4CisjZGVmaW5lIHRvbGUoeCkgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KQorI2RlZmluZSB0b2JlKHgpIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkKKyNlbHNlCisjZGVmaW5lIHRvbGUoeCkgKHgpCisjZGVmaW5lIHRvYmUoeCkgKHgpCisjZW5kaWYKKyNpbmNsdWRlICJjcmMzMnRhYmxlLmgiCisKKyNpZmRlZiBVTklUVEVTVAorCisvKioKKyAqIGNyYzMyX2xlKCkgLSBDYWxjdWxhdGUgYml0d2lzZSBsaXR0bGUtZW5kaWFuIEV0aGVybmV0IEFVVE9ESU4gSUkgQ1JDMzIKKyAqIEBjcmM6IHNlZWQgdmFsdWUgZm9yIGNvbXB1dGF0aW9uLiAgfjAgZm9yIEV0aGVybmV0LCBzb21ldGltZXMgMCBmb3IKKyAqCW90aGVyIHVzZXMsIG9yIHRoZSBwcmV2aW91cyBjcmMzMiB2YWx1ZSBpZiBjb21wdXRpbmcgaW5jcmVtZW50YWxseS4KKyAqIEBwOiBwb2ludGVyIHRvIGJ1ZmZlciBvdmVyIHdoaWNoIENSQyBpcyBydW4KKyAqIEBsZW46IGxlbmd0aCBvZiBidWZmZXIgQHAKKyAqLworX191MzIgY3JjMzJfbGUoX191MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKKworI2lmIENSQ19MRV9CSVRTID09IDEKKy8qCisgKiBJbiBmYWN0LCB0aGUgdGFibGUtYmFzZWQgY29kZSB3aWxsIHdvcmsgaW4gdGhpcyBjYXNlLCBidXQgaXQgY2FuIGJlCisgKiBzaW1wbGlmaWVkIGJ5IGlubGluaW5nIHRoZSB0YWJsZSBpbiA/OiBmb3JtLgorICovCisKK19fdTMyIGNyYzMyX2xlKF9fdTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKys7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQljcmMgPSAoY3JjID4+IDEpIF4gKChjcmMgJiAxKSA/IENSQ1BPTFlfTEUgOiAwKTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKyNlbHNlCQkJCS8qIFRhYmxlLWJhc2VkIGFwcHJvYWNoICovCisKK19fdTMyIGNyYzMyX2xlKF9fdTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKyMgaWYgQ1JDX0xFX0JJVFMgPT0gOAorCWNvbnN0IF9fdTMyICAgICAgKmIgPShfX3UzMiAqKXA7CisJY29uc3QgX191MzIgICAgICAqdGFiID0gY3JjMzJ0YWJsZV9sZTsKKworIyBpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmM8PDgpCisjIGVsc2UKKyMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoY3JjIF4gKHgpKSAmIDI1NSBdIF4gKGNyYz4+OCkKKyMgZW5kaWYKKworCWNyYyA9IF9fY3B1X3RvX2xlMzIoY3JjKTsKKwkvKiBBbGlnbiBpdCAqLworCWlmKHVubGlrZWx5KCgobG9uZyliKSYzICYmIGxlbikpeworCQlkbyB7CisJCQlfX3U4ICpwID0gKF9fdTggKiliOworCQkJRE9fQ1JDKCpwKyspOworCQkJYiA9ICh2b2lkICopcDsKKwkJfSB3aGlsZSAoKC0tbGVuKSAmJiAoKGxvbmcpYikmMyApOworCX0KKwlpZihsaWtlbHkobGVuID49IDQpKXsKKwkJLyogbG9hZCBkYXRhIDMyIGJpdHMgd2lkZSwgeG9yIGRhdGEgMzIgYml0cyB3aWRlLiAqLworCQlzaXplX3Qgc2F2ZV9sZW4gPSBsZW4gJiAzOworCSAgICAgICAgbGVuID0gbGVuID4+IDI7CisJCS0tYjsgLyogdXNlIHByZSBpbmNyZW1lbnQgYmVsb3coKisrYikgZm9yIHNwZWVkICovCisJCWRvIHsKKwkJCWNyYyBePSAqKytiOworCQkJRE9fQ1JDKDApOworCQkJRE9fQ1JDKDApOworCQkJRE9fQ1JDKDApOworCQkJRE9fQ1JDKDApOworCQl9IHdoaWxlICgtLWxlbik7CisJCWIrKzsgLyogcG9pbnQgdG8gbmV4dCBieXRlKHMpICovCisJCWxlbiA9IHNhdmVfbGVuOworCX0KKwkvKiBBbmQgdGhlIGxhc3QgZmV3IGJ5dGVzICovCisJaWYobGVuKXsKKwkJZG8geworCQkJX191OCAqcCA9IChfX3U4ICopYjsKKwkJCURPX0NSQygqcCsrKTsKKwkJCWIgPSAodm9pZCAqKXA7CisJCX0gd2hpbGUgKC0tbGVuKTsKKwl9CisKKwlyZXR1cm4gX19sZTMyX3RvX2NwdShjcmMpOworI3VuZGVmIEVORElBTl9TSElGVAorI3VuZGVmIERPX0NSQworCisjIGVsaWYgQ1JDX0xFX0JJVFMgPT0gNAorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKzsKKwkJY3JjID0gKGNyYyA+PiA0KSBeIGNyYzMydGFibGVfbGVbY3JjICYgMTVdOworCQljcmMgPSAoY3JjID4+IDQpIF4gY3JjMzJ0YWJsZV9sZVtjcmMgJiAxNV07CisJfQorCXJldHVybiBjcmM7CisjIGVsaWYgQ1JDX0xFX0JJVFMgPT0gMgorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKzsKKwkJY3JjID0gKGNyYyA+PiAyKSBeIGNyYzMydGFibGVfbGVbY3JjICYgM107CisJCWNyYyA9IChjcmMgPj4gMikgXiBjcmMzMnRhYmxlX2xlW2NyYyAmIDNdOworCQljcmMgPSAoY3JjID4+IDIpIF4gY3JjMzJ0YWJsZV9sZVtjcmMgJiAzXTsKKwkJY3JjID0gKGNyYyA+PiAyKSBeIGNyYzMydGFibGVfbGVbY3JjICYgM107CisJfQorCXJldHVybiBjcmM7CisjIGVuZGlmCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFVOSVRURVNUICovCisKKy8qKgorICogY3JjMzJfYmUoKSAtIENhbGN1bGF0ZSBiaXR3aXNlIGJpZy1lbmRpYW4gRXRoZXJuZXQgQVVUT0RJTiBJSSBDUkMzMgorICogQGNyYzogc2VlZCB2YWx1ZSBmb3IgY29tcHV0YXRpb24uICB+MCBmb3IgRXRoZXJuZXQsIHNvbWV0aW1lcyAwIGZvcgorICoJb3RoZXIgdXNlcywgb3IgdGhlIHByZXZpb3VzIGNyYzMyIHZhbHVlIGlmIGNvbXB1dGluZyBpbmNyZW1lbnRhbGx5LgorICogQHA6IHBvaW50ZXIgdG8gYnVmZmVyIG92ZXIgd2hpY2ggQ1JDIGlzIHJ1bgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlciBAcAorICovCitfX3UzMiBjcmMzMl9iZShfX3UzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOworCisjaWYgQ1JDX0JFX0JJVFMgPT0gMQorLyoKKyAqIEluIGZhY3QsIHRoZSB0YWJsZS1iYXNlZCBjb2RlIHdpbGwgd29yayBpbiB0aGlzIGNhc2UsIGJ1dCBpdCBjYW4gYmUKKyAqIHNpbXBsaWZpZWQgYnkgaW5saW5pbmcgdGhlIHRhYmxlIGluID86IGZvcm0uCisgKi8KKworX191MzIgY3JjMzJfYmUoX191MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQoreworCWludCBpOworCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKyA8PCAyNDsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWNyYyA9CisJCQkgICAgKGNyYyA8PCAxKSBeICgoY3JjICYgMHg4MDAwMDAwMCkgPyBDUkNQT0xZX0JFIDoKKwkJCQkJICAwKTsKKwl9CisJcmV0dXJuIGNyYzsKK30KKworI2Vsc2UJCQkJLyogVGFibGUtYmFzZWQgYXBwcm9hY2ggKi8KK19fdTMyIGNyYzMyX2JlKF9fdTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKyMgaWYgQ1JDX0JFX0JJVFMgPT0gOAorCWNvbnN0IF9fdTMyICAgICAgKmIgPShjb25zdCBfX3UzMiAqKXA7CisJY29uc3QgX191MzIgICAgICAqdGFiID0gY3JjMzJ0YWJsZV9iZTsKKworIyBpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmM8PDgpCisjIGVsc2UKKyMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyAoY3JjIF4gKHgpKSAmIDI1NSBdIF4gKGNyYz4+OCkKKyMgZW5kaWYKKworCWNyYyA9IF9fY3B1X3RvX2JlMzIoY3JjKTsKKwkvKiBBbGlnbiBpdCAqLworCWlmKHVubGlrZWx5KCgobG9uZyliKSYzICYmIGxlbikpeworCQlkbyB7CisJCQljb25zdCBfX3U4ICpxID0gKGNvbnN0IF9fdTggKiliOworCQkJRE9fQ1JDKCpxKyspOworCQkJYiA9IChjb25zdCBfX3UzMiAqKXE7CisJCX0gd2hpbGUgKCgtLWxlbikgJiYgKChsb25nKWIpJjMgKTsKKwl9CisJaWYobGlrZWx5KGxlbiA+PSA0KSl7CisJCS8qIGxvYWQgZGF0YSAzMiBiaXRzIHdpZGUsIHhvciBkYXRhIDMyIGJpdHMgd2lkZS4gKi8KKwkJc2l6ZV90IHNhdmVfbGVuID0gbGVuICYgMzsKKwkgICAgICAgIGxlbiA9IGxlbiA+PiAyOworCQktLWI7IC8qIHVzZSBwcmUgaW5jcmVtZW50IGJlbG93KCorK2IpIGZvciBzcGVlZCAqLworCQlkbyB7CisJCQljcmMgXj0gKisrYjsKKwkJCURPX0NSQygwKTsKKwkJCURPX0NSQygwKTsKKwkJCURPX0NSQygwKTsKKwkJCURPX0NSQygwKTsKKwkJfSB3aGlsZSAoLS1sZW4pOworCQliKys7IC8qIHBvaW50IHRvIG5leHQgYnl0ZShzKSAqLworCQlsZW4gPSBzYXZlX2xlbjsKKwl9CisJLyogQW5kIHRoZSBsYXN0IGZldyBieXRlcyAqLworCWlmKGxlbil7CisJCWRvIHsKKwkJCWNvbnN0IF9fdTggKnEgPSAoY29uc3QgX191OCAqKWI7CisJCQlET19DUkMoKnErKyk7CisJCQliID0gKGNvbnN0IHZvaWQgKilxOworCQl9IHdoaWxlICgtLWxlbik7CisJfQorCXJldHVybiBfX2JlMzJfdG9fY3B1KGNyYyk7CisjdW5kZWYgRU5ESUFOX1NISUZUCisjdW5kZWYgRE9fQ1JDCisKKyMgZWxpZiBDUkNfQkVfQklUUyA9PSA0CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrIDw8IDI0OworCQljcmMgPSAoY3JjIDw8IDQpIF4gY3JjMzJ0YWJsZV9iZVtjcmMgPj4gMjhdOworCQljcmMgPSAoY3JjIDw8IDQpIF4gY3JjMzJ0YWJsZV9iZVtjcmMgPj4gMjhdOworCX0KKwlyZXR1cm4gY3JjOworIyBlbGlmIENSQ19CRV9CSVRTID09IDIKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKysgPDwgMjQ7CisJCWNyYyA9IChjcmMgPDwgMikgXiBjcmMzMnRhYmxlX2JlW2NyYyA+PiAzMF07CisJCWNyYyA9IChjcmMgPDwgMikgXiBjcmMzMnRhYmxlX2JlW2NyYyA+PiAzMF07CisJCWNyYyA9IChjcmMgPDwgMikgXiBjcmMzMnRhYmxlX2JlW2NyYyA+PiAzMF07CisJCWNyYyA9IChjcmMgPDwgMikgXiBjcmMzMnRhYmxlX2JlW2NyYyA+PiAzMF07CisJfQorCXJldHVybiBjcmM7CisjIGVuZGlmCit9CisjZW5kaWYKKworLyoKKyAqIEEgYnJpZWYgQ1JDIHR1dG9yaWFsLgorICoKKyAqIEEgQ1JDIGlzIGEgbG9uZy1kaXZpc2lvbiByZW1haW5kZXIuICBZb3UgYWRkIHRoZSBDUkMgdG8gdGhlIG1lc3NhZ2UsCisgKiBhbmQgdGhlIHdob2xlIHRoaW5nIChtZXNzYWdlK0NSQykgaXMgYSBtdWx0aXBsZSBvZiB0aGUgZ2l2ZW4KKyAqIENSQyBwb2x5bm9taWFsLiAgVG8gY2hlY2sgdGhlIENSQywgeW91IGNhbiBlaXRoZXIgY2hlY2sgdGhhdCB0aGUKKyAqIENSQyBtYXRjaGVzIHRoZSByZWNvbXB1dGVkIHZhbHVlLCAqb3IqIHlvdSBjYW4gY2hlY2sgdGhhdCB0aGUKKyAqIHJlbWFpbmRlciBjb21wdXRlZCBvbiB0aGUgbWVzc2FnZStDUkMgaXMgMC4gIFRoaXMgbGF0dGVyIGFwcHJvYWNoCisgKiBpcyB1c2VkIGJ5IGEgbG90IG9mIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucywgYW5kIGlzIHdoeSBzbyBtYW55CisgKiBwcm90b2NvbHMgcHV0IHRoZSBlbmQtb2YtZnJhbWUgZmxhZyBhZnRlciB0aGUgQ1JDLgorICoKKyAqIEl0J3MgYWN0dWFsbHkgdGhlIHNhbWUgbG9uZyBkaXZpc2lvbiB5b3UgbGVhcm5lZCBpbiBzY2hvb2wsIGV4Y2VwdCB0aGF0CisgKiAtIFdlJ3JlIHdvcmtpbmcgaW4gYmluYXJ5LCBzbyB0aGUgZGlnaXRzIGFyZSBvbmx5IDAgYW5kIDEsIGFuZAorICogLSBXaGVuIGRpdmlkaW5nIHBvbHlub21pYWxzLCB0aGVyZSBhcmUgbm8gY2Fycmllcy4gIFJhdGhlciB0aGFuIGFkZCBhbmQKKyAqICAgc3VidHJhY3QsIHdlIGp1c3QgeG9yLiAgVGh1cywgd2UgdGVuZCB0byBnZXQgYSBiaXQgc2xvcHB5IGFib3V0CisgKiAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWRkaW5nIGFuZCBzdWJ0cmFjdGluZy4KKyAqCisgKiBBIDMyLWJpdCBDUkMgcG9seW5vbWlhbCBpcyBhY3R1YWxseSAzMyBiaXRzIGxvbmcuICBCdXQgc2luY2UgaXQncworICogMzMgYml0cyBsb25nLCBiaXQgMzIgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIHNldCwgc28gdXN1YWxseSB0aGUgQ1JDCisgKiBpcyB3cml0dGVuIGluIGhleCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvbWl0dGVkLiAgKElmIHlvdSdyZQorICogZmFtaWxpYXIgd2l0aCB0aGUgSUVFRSA3NTQgZmxvYXRpbmctcG9pbnQgZm9ybWF0LCBpdCdzIHRoZSBzYW1lIGlkZWEuKQorICoKKyAqIE5vdGUgdGhhdCBhIENSQyBpcyBjb21wdXRlZCBvdmVyIGEgc3RyaW5nIG9mICpiaXRzKiwgc28geW91IGhhdmUKKyAqIHRvIGRlY2lkZSBvbiB0aGUgZW5kaWFubmVzcyBvZiB0aGUgYml0cyB3aXRoaW4gZWFjaCBieXRlLiAgVG8gZ2V0CisgKiB0aGUgYmVzdCBlcnJvci1kZXRlY3RpbmcgcHJvcGVydGllcywgdGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUKKyAqIG9yZGVyIHRoZXkncmUgYWN0dWFsbHkgc2VudC4gIEZvciBleGFtcGxlLCBzdGFuZGFyZCBSUy0yMzIgc2VyaWFsIGlzCisgKiBsaXR0bGUtZW5kaWFuOyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgKHNvbWV0aW1lcyB1c2VkIGZvciBwYXJpdHkpCisgKiBpcyBzZW50IGxhc3QuICBBbmQgd2hlbiBhcHBlbmRpbmcgYSBDUkMgd29yZCB0byBhIG1lc3NhZ2UsIHlvdSBzaG91bGQKKyAqIGRvIGl0IGluIHRoZSByaWdodCBvcmRlciwgbWF0Y2hpbmcgdGhlIGVuZGlhbm5lc3MuCisgKgorICogSnVzdCBsaWtlIHdpdGggb3JkaW5hcnkgZGl2aXNpb24sIHRoZSByZW1haW5kZXIgaXMgYWx3YXlzIHNtYWxsZXIgdGhhbgorICogdGhlIGRpdmlzb3IgKHRoZSBDUkMgcG9seW5vbWlhbCkgeW91J3JlIGRpdmlkaW5nIGJ5LiAgRWFjaCBzdGVwIG9mIHRoZQorICogZGl2aXNpb24sIHlvdSB0YWtlIG9uZSBtb3JlIGRpZ2l0IChiaXQpIG9mIHRoZSBkaXZpZGVuZCBhbmQgYXBwZW5kIGl0CisgKiB0byB0aGUgY3VycmVudCByZW1haW5kZXIuICBUaGVuIHlvdSBmaWd1cmUgb3V0IHRoZSBhcHByb3ByaWF0ZSBtdWx0aXBsZQorICogb2YgdGhlIGRpdmlzb3IgdG8gc3VidHJhY3QgdG8gYmVpbmcgdGhlIHJlbWFpbmRlciBiYWNrIGludG8gcmFuZ2UuCisgKiBJbiBiaW5hcnksIGl0J3MgZWFzeSAtIGl0IGhhcyB0byBiZSBlaXRoZXIgMCBvciAxLCBhbmQgdG8gbWFrZSB0aGUKKyAqIFhPUiBjYW5jZWwsIGl0J3MganVzdCBhIGNvcHkgb2YgYml0IDMyIG9mIHRoZSByZW1haW5kZXIuCisgKgorICogV2hlbiBjb21wdXRpbmcgYSBDUkMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHF1b3RpZW50LCBzbyB3ZSBjYW4KKyAqIHRocm93IHRoZSBxdW90aWVudCBiaXQgYXdheSwgYnV0IHN1YnRyYWN0IHRoZSBhcHByb3ByaWF0ZSBtdWx0aXBsZSBvZgorICogdGhlIHBvbHlub21pYWwgZnJvbSB0aGUgcmVtYWluZGVyIGFuZCB3ZSdyZSBiYWNrIHRvIHdoZXJlIHdlIHN0YXJ0ZWQsCisgKiByZWFkeSB0byBwcm9jZXNzIHRoZSBuZXh0IGJpdC4KKyAqCisgKiBBIGJpZy1lbmRpYW4gQ1JDIHdyaXR0ZW4gdGhpcyB3YXkgd291bGQgYmUgY29kZWQgbGlrZToKKyAqIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9iaXRzOyBpKyspIHsKKyAqIAltdWx0aXBsZSA9IHJlbWFpbmRlciAmIDB4ODAwMDAwMDAgPyBDUkNQT0xZIDogMDsKKyAqIAlyZW1haW5kZXIgPSAocmVtYWluZGVyIDw8IDEgfCBuZXh0X2lucHV0X2JpdCgpKSBeIG11bHRpcGxlOworICogfQorICogTm90aWNlIGhvdywgdG8gZ2V0IGF0IGJpdCAzMiBvZiB0aGUgc2hpZnRlZCByZW1haW5kZXIsIHdlIGxvb2sKKyAqIGF0IGJpdCAzMSBvZiB0aGUgcmVtYWluZGVyICpiZWZvcmUqIHNoaWZ0aW5nIGl0LgorICoKKyAqIEJ1dCBhbHNvIG5vdGljZSBob3cgdGhlIG5leHRfaW5wdXRfYml0KCkgYml0cyB3ZSdyZSBzaGlmdGluZyBpbnRvCisgKiB0aGUgcmVtYWluZGVyIGRvbid0IGFjdHVhbGx5IGFmZmVjdCBhbnkgZGVjaXNpb24tbWFraW5nIHVudGlsCisgKiAzMiBiaXRzIGxhdGVyLiAgVGh1cywgdGhlIGZpcnN0IDMyIGN5Y2xlcyBvZiB0aGlzIGFyZSBwcmV0dHkgYm9yaW5nLgorICogQWxzbywgdG8gYWRkIHRoZSBDUkMgdG8gYSBtZXNzYWdlLCB3ZSBuZWVkIGEgMzItYml0LWxvbmcgaG9sZSBmb3IgaXQgYXQKKyAqIHRoZSBlbmQsIHNvIHdlIGhhdmUgdG8gYWRkIDMyIGV4dHJhIGN5Y2xlcyBzaGlmdGluZyBpbiB6ZXJvcyBhdCB0aGUKKyAqIGVuZCBvZiBldmVyeSBtZXNzYWdlLAorICoKKyAqIFNvIHRoZSBzdGFuZGFyZCB0cmljayBpcyB0byByZWFycmFnZSBtZXJnaW5nIGluIHRoZSBuZXh0X2lucHV0X2JpdCgpCisgKiB1bnRpbCB0aGUgbW9tZW50IGl0J3MgbmVlZGVkLiAgVGhlbiB0aGUgZmlyc3QgMzIgY3ljbGVzIGNhbiBiZSBwcmVjb21wdXRlZCwKKyAqIGFuZCBtZXJnaW5nIGluIHRoZSBmaW5hbCAzMiB6ZXJvIGJpdHMgdG8gbWFrZSByb29tIGZvciB0aGUgQ1JDIGNhbiBiZQorICogc2tpcHBlZCBlbnRpcmVseS4KKyAqIFRoaXMgY2hhbmdlcyB0aGUgY29kZSB0bzoKKyAqIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9iaXRzOyBpKyspIHsKKyAqICAgICAgcmVtYWluZGVyIF49IG5leHRfaW5wdXRfYml0KCkgPDwgMzE7CisgKiAJbXVsdGlwbGUgPSAocmVtYWluZGVyICYgMHg4MDAwMDAwMCkgPyBDUkNQT0xZIDogMDsKKyAqIAlyZW1haW5kZXIgPSAocmVtYWluZGVyIDw8IDEpIF4gbXVsdGlwbGU7CisgKiB9CisgKiBXaXRoIHRoaXMgb3B0aW1pemF0aW9uLCB0aGUgbGl0dGxlLWVuZGlhbiBjb2RlIGlzIHNpbXBsZXI6CisgKiBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfYml0czsgaSsrKSB7CisgKiAgICAgIHJlbWFpbmRlciBePSBuZXh0X2lucHV0X2JpdCgpOworICogCW11bHRpcGxlID0gKHJlbWFpbmRlciAmIDEpID8gQ1JDUE9MWSA6IDA7CisgKiAJcmVtYWluZGVyID0gKHJlbWFpbmRlciA+PiAxKSBeIG11bHRpcGxlOworICogfQorICoKKyAqIE5vdGUgdGhhdCB0aGUgb3RoZXIgZGV0YWlscyBvZiBlbmRpYW5uZXNzIGhhdmUgYmVlbiBoaWRkZW4gaW4gQ1JDUE9MWQorICogKHdoaWNoIG11c3QgYmUgYml0LXJldmVyc2VkKSBhbmQgbmV4dF9pbnB1dF9iaXQoKS4KKyAqCisgKiBIb3dldmVyLCBhcyBsb25nIGFzIG5leHRfaW5wdXRfYml0IGlzIHJldHVybmluZyB0aGUgYml0cyBpbiBhIHNlbnNpYmxlCisgKiBvcmRlciwgd2UgY2FuIGFjdHVhbGx5IGRvIHRoZSBtZXJnaW5nIDggb3IgbW9yZSBiaXRzIGF0IGEgdGltZSByYXRoZXIKKyAqIHRoYW4gb25lIGJpdCBhdCBhIHRpbWU6CisgKiBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfYnl0ZXM7IGkrKykgeworICogCXJlbWFpbmRlciBePSBuZXh0X2lucHV0X2J5dGUoKSA8PCAyNDsKKyAqIAlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisgKiAJCW11bHRpcGxlID0gKHJlbWFpbmRlciAmIDB4ODAwMDAwMDApID8gQ1JDUE9MWSA6IDA7CisgKiAJCXJlbWFpbmRlciA9IChyZW1haW5kZXIgPDwgMSkgXiBtdWx0aXBsZTsKKyAqIAl9CisgKiB9CisgKiBPciBpbiBsaXR0bGUtZW5kaWFuOgorICogZm9yIChpID0gMDsgaSA8IGlucHV0X2J5dGVzOyBpKyspIHsKKyAqIAlyZW1haW5kZXIgXj0gbmV4dF9pbnB1dF9ieXRlKCk7CisgKiAJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworICogCQltdWx0aXBsZSA9IChyZW1haW5kZXIgJiAxKSA/IENSQ1BPTFkgOiAwOworICogCQlyZW1haW5kZXIgPSAocmVtYWluZGVyIDw8IDEpIF4gbXVsdGlwbGU7CisgKiAJfQorICogfQorICogSWYgdGhlIGlucHV0IGlzIGEgbXVsdGlwbGUgb2YgMzIgYml0cywgeW91IGNhbiBldmVuIFhPUiBpbiBhIDMyLWJpdAorICogd29yZCBhdCBhIHRpbWUgYW5kIGluY3JlYXNlIHRoZSBpbm5lciBsb29wIGNvdW50IHRvIDMyLgorICoKKyAqIFlvdSBjYW4gYWxzbyBtaXggYW5kIG1hdGNoIHRoZSB0d28gbG9vcCBzdHlsZXMsIGZvciBleGFtcGxlIGRvaW5nIHRoZQorICogYnVsayBvZiBhIG1lc3NhZ2UgYnl0ZS1hdC1hLXRpbWUgYW5kIGFkZGluZyBiaXQtYXQtYS10aW1lIHByb2Nlc3NpbmcKKyAqIGZvciBhbnkgZnJhY3Rpb25hbCBieXRlcyBhdCB0aGUgZW5kLgorICoKKyAqIFRoZSBvbmx5IHJlbWFpbmluZyBvcHRpbWl6YXRpb24gaXMgdG8gdGhlIGJ5dGUtYXQtYS10aW1lIHRhYmxlIG1ldGhvZC4KKyAqIEhlcmUsIHJhdGhlciB0aGFuIGp1c3Qgc2hpZnRpbmcgb25lIGJpdCBvZiB0aGUgcmVtYWluZGVyIHRvIGRlY2lkZQorICogaW4gdGhlIGNvcnJlY3QgbXVsdGlwbGUgdG8gc3VidHJhY3QsIHdlIGNhbiBzaGlmdCBhIGJ5dGUgYXQgYSB0aW1lLgorICogVGhpcyBwcm9kdWNlcyBhIDQwLWJpdCAocmF0aGVyIHRoYW4gYSAzMy1iaXQpIGludGVybWVkaWF0ZSByZW1haW5kZXIsCisgKiBidXQgYWdhaW4gdGhlIG11bHRpcGxlIG9mIHRoZSBwb2x5bm9taWFsIHRvIHN1YnRyYWN0IGRlcGVuZHMgb25seSBvbgorICogdGhlIGhpZ2ggYml0cywgdGhlIGhpZ2ggOCBiaXRzIGluIHRoaXMgY2FzZS4KKyAqCisgKiBUaGUgbXVsdGlwbGUgd2UgbmVlZCBpbiB0aGF0IGNhc2UgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGEgNDAtYml0CisgKiB2YWx1ZSB3aG9zZSBoaWdoIDggYml0cyBhcmUgZ2l2ZW4sIGFuZCB3aGljaCBpcyBhIG11bHRpcGxlIG9mIHRoZQorICogZ2VuZXJhdG9yIHBvbHlub21pYWwuICBUaGlzIGlzIHNpbXBseSB0aGUgQ1JDLTMyIG9mIHRoZSBnaXZlbgorICogb25lLWJ5dGUgbWVzc2FnZS4KKyAqCisgKiBUd28gbW9yZSBkZXRhaWxzOiBub3JtYWxseSwgYXBwZW5kaW5nIHplcm8gYml0cyB0byBhIG1lc3NhZ2Ugd2hpY2gKKyAqIGlzIGFscmVhZHkgYSBtdWx0aXBsZSBvZiBhIHBvbHlub21pYWwgcHJvZHVjZXMgYSBsYXJnZXIgbXVsdGlwbGUgb2YgdGhhdAorICogcG9seW5vbWlhbC4gIFRvIGVuYWJsZSBhIENSQyB0byBkZXRlY3QgdGhpcyBjb25kaXRpb24sIGl0J3MgY29tbW9uIHRvCisgKiBpbnZlcnQgdGhlIENSQyBiZWZvcmUgYXBwZW5kaW5nIGl0LiAgVGhpcyBtYWtlcyB0aGUgcmVtYWluZGVyIG9mIHRoZQorICogbWVzc2FnZStjcmMgY29tZSBvdXQgbm90IGFzIHplcm8sIGJ1dCBzb21lIGZpeGVkIG5vbi16ZXJvIHZhbHVlLgorICoKKyAqIFRoZSBzYW1lIHByb2JsZW0gYXBwbGllcyB0byB6ZXJvIGJpdHMgcHJlcGVuZGVkIHRvIHRoZSBtZXNzYWdlLCBhbmQKKyAqIGEgc2ltaWxhciBzb2x1dGlvbiBpcyB1c2VkLiAgSW5zdGVhZCBvZiBzdGFydGluZyB3aXRoIGEgcmVtYWluZGVyIG9mCisgKiAwLCBhbiBpbml0aWFsIHJlbWFpbmRlciBvZiBhbGwgb25lcyBpcyB1c2VkLiAgQXMgbG9uZyBhcyB5b3Ugc3RhcnQKKyAqIHRoZSBzYW1lIHdheSBvbiBkZWNvZGluZywgaXQgZG9lc24ndCBtYWtlIGEgZGlmZmVyZW5jZS4KKyAqLworCisjaWZkZWYgVU5JVFRFU1QKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2NvbnN0IF9fdTggYnl0ZV9yZXZfdGFibGVbMjU2XSA9IHsKKwkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAorCTB4MTAsIDB4OTAsIDB4NTAsIDB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsCisJMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKKwkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAorCTB4MDQsIDB4ODQsIDB4NDQsIDB4YzQsIDB4MjQsIDB4YTQsIDB4NjQsIDB4ZTQsCisJMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKKwkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAorCTB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsCisJMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKKwkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAorCTB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCisJMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKKwkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAorCTB4MTYsIDB4OTYsIDB4NTYsIDB4ZDYsIDB4MzYsIDB4YjYsIDB4NzYsIDB4ZjYsCisJMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKKwkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAorCTB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsIDB4MjEsIDB4YTEsIDB4NjEsIDB4ZTEsCisJMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKKwkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAorCTB4MTksIDB4OTksIDB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksCisJMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKKwkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAorCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsCisJMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKKwkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAorCTB4MTMsIDB4OTMsIDB4NTMsIDB4ZDMsIDB4MzMsIDB4YjMsIDB4NzMsIDB4ZjMsCisJMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKKwkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAorCTB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsIDB4ZTcsCisJMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKKwkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAorCTB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsIDB4YmYsIDB4N2YsIDB4ZmYsCit9OworCitzdGF0aWMgaW5saW5lIF9fdTggYml0cmV2OChfX3U4IGJ5dGUpCit7CisJcmV0dXJuIGJ5dGVfcmV2X3RhYmxlW2J5dGVdOworfQorCitzdGF0aWMgaW5saW5lIF9fdTE2IGJpdHJldjE2KF9fdTE2IHgpCit7CisJcmV0dXJuIChiaXRyZXY4KHggJiAweGZmKSA8PCA4KSB8IGJpdHJldjgoeCA+PiA4KTsKK30KKworLyoqCisgKiBiaXRyZXYzMiAtIHJldmVyc2UgdGhlIG9yZGVyIG9mIGJpdHMgaW4gYSB1MzIgdmFsdWUKKyAqIEB4OiB2YWx1ZSB0byBiZSBiaXQtcmV2ZXJzZWQKKyAqLworc3RhdGljIF9fdTMyIGJpdHJldjMyKF9fdTMyIHgpCit7CisJcmV0dXJuIChiaXRyZXYxNih4ICYgMHhmZmZmKSA8PCAxNikgfCBiaXRyZXYxNih4ID4+IDE2KTsKK30KKworI2lmIDAJCQkJLypOb3QgdXNlZCBhdCBwcmVzZW50ICovCisKK3N0YXRpYyB2b2lkCitidWZfZHVtcChjaGFyIGNvbnN0ICpwcmVmaXgsIHVuc2lnbmVkIGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlmcHV0cyhwcmVmaXgsIHN0ZG91dCk7CisJd2hpbGUgKGxlbi0tKQorCQlwcmludGYoIiAlMDJ4IiwgKmJ1ZisrKTsKKwlwdXRjaGFyKCdcbicpOworCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYnl0ZXJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4tLSkgeworCQl1bnNpZ25lZCBjaGFyIHggPSBiaXRyZXY4KCpidWYpOworCQkqYnVmKysgPSB4OworCX0KK30KKworc3RhdGljIHZvaWQgcmFuZG9tX2dhcmJhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXdoaWxlIChsZW4tLSkKKwkJKmJ1ZisrID0gKHVuc2lnbmVkIGNoYXIpIHJhbmRvbSgpOworfQorCisjaWYgMAkJCQkvKiBOb3QgdXNlZCBhdCBwcmVzZW50ICovCitzdGF0aWMgdm9pZCBzdG9yZV9sZShfX3UzMiB4LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIHg7CisJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICh4ID4+IDgpOworCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoeCA+PiAxNik7CisJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICh4ID4+IDI0KTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzdG9yZV9iZShfX3UzMiB4LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh4ID4+IDI0KTsKKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKHggPj4gMTYpOworCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoeCA+PiA4KTsKKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgeDsKK30KKworLyoKKyAqIFRoaXMgY2hlY2tzIHRoYXQgQ1JDKGJ1ZiArIENSQyhidWYpKSA9IDAsIGFuZCB0aGF0CisgKiBDUkMgY29tbXV0ZXMgd2l0aCBiaXQtcmV2ZXJzYWwuICBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3QKKyAqIG9mIGJ5dGV3aXNlIGJpdC1yZXZlcnNpbmcgdGhlIGlucHV0IGJ1ZmZlciwgYW5kIHJldHVybnMKKyAqIHRoZSBDUkMgb2YgdGhlIHJldmVyc2VkIGJ1ZmZlci4KKyAqLworc3RhdGljIF9fdTMyIHRlc3Rfc3RlcChfX3UzMiBpbml0LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJX191MzIgY3JjMSwgY3JjMjsKKwlzaXplX3QgaTsKKworCWNyYzEgPSBjcmMzMl9iZShpbml0LCBidWYsIGxlbik7CisJc3RvcmVfYmUoY3JjMSwgYnVmICsgbGVuKTsKKwljcmMyID0gY3JjMzJfYmUoaW5pdCwgYnVmLCBsZW4gKyA0KTsKKwlpZiAoY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBjYW5jZWxsYXRpb24gZmFpbDogMHglMDh4IHNob3VsZCBiZSAwXG4iLAorCQkgICAgICAgY3JjMik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGxlbiArIDQ7IGkrKykgeworCQljcmMyID0gY3JjMzJfYmUoaW5pdCwgYnVmLCBpKTsKKwkJY3JjMiA9IGNyYzMyX2JlKGNyYzIsIGJ1ZiArIGksIGxlbiArIDQgLSBpKTsKKwkJaWYgKGNyYzIpCisJCQlwcmludGYoIlxuQ1JDIHNwbGl0IGZhaWw6IDB4JTA4eFxuIiwgY3JjMik7CisJfQorCisJLyogTm93IHN3YXAgaXQgYXJvdW5kIGZvciB0aGUgb3RoZXIgdGVzdCAqLworCisJYnl0ZXJldmVyc2UoYnVmLCBsZW4gKyA0KTsKKwlpbml0ID0gYml0cmV2MzIoaW5pdCk7CisJY3JjMiA9IGJpdHJldjMyKGNyYzEpOworCWlmIChjcmMxICE9IGJpdHJldjMyKGNyYzIpKQorCQlwcmludGYoIlxuQml0IHJldmVyc2FsIGZhaWw6IDB4JTA4eCAtPiAweCUwOHggLT4gMHglMDh4XG4iLAorCQkgICAgICAgY3JjMSwgY3JjMiwgYml0cmV2MzIoY3JjMikpOworCWNyYzEgPSBjcmMzMl9sZShpbml0LCBidWYsIGxlbik7CisJaWYgKGNyYzEgIT0gY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBlbmRpYW5uZXNzIGZhaWw6IDB4JTA4eCAhPSAweCUwOHhcbiIsIGNyYzEsCisJCSAgICAgICBjcmMyKTsKKwljcmMyID0gY3JjMzJfbGUoaW5pdCwgYnVmLCBsZW4gKyA0KTsKKwlpZiAoY3JjMikKKwkJcHJpbnRmKCJcbkNSQyBjYW5jZWxsYXRpb24gZmFpbDogMHglMDh4IHNob3VsZCBiZSAwXG4iLAorCQkgICAgICAgY3JjMik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGxlbiArIDQ7IGkrKykgeworCQljcmMyID0gY3JjMzJfbGUoaW5pdCwgYnVmLCBpKTsKKwkJY3JjMiA9IGNyYzMyX2xlKGNyYzIsIGJ1ZiArIGksIGxlbiArIDQgLSBpKTsKKwkJaWYgKGNyYzIpCisJCQlwcmludGYoIlxuQ1JDIHNwbGl0IGZhaWw6IDB4JTA4eFxuIiwgY3JjMik7CisJfQorCisJcmV0dXJuIGNyYzE7Cit9CisKKyNkZWZpbmUgU0laRSA2NAorI2RlZmluZSBJTklUMSAwCisjZGVmaW5lIElOSVQyIDAKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmMVtTSVpFICsgNF07CisJdW5zaWduZWQgY2hhciBidWYyW1NJWkUgKyA0XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjNbU0laRSArIDRdOworCWludCBpLCBqOworCV9fdTMyIGNyYzEsIGNyYzIsIGNyYzM7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPD0gU0laRTsgaSsrKSB7CisJCXByaW50ZigiXHJUZXN0aW5nIGxlbmd0aCAlZC4uLiIsIGkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmFuZG9tX2dhcmJhZ2UoYnVmMSwgaSk7CisJCXJhbmRvbV9nYXJiYWdlKGJ1ZjIsIGkpOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJYnVmM1tqXSA9IGJ1ZjFbal0gXiBidWYyW2pdOworCisJCWNyYzEgPSB0ZXN0X3N0ZXAoSU5JVDEsIGJ1ZjEsIGkpOworCQljcmMyID0gdGVzdF9zdGVwKElOSVQyLCBidWYyLCBpKTsKKwkJLyogTm93IGNoZWNrIHRoYXQgQ1JDKGJ1ZjEgXiBidWYyKSA9IENSQyhidWYxKSBeIENSQyhidWYyKSAqLworCQljcmMzID0gdGVzdF9zdGVwKElOSVQxIF4gSU5JVDIsIGJ1ZjMsIGkpOworCQlpZiAoY3JjMyAhPSAoY3JjMSBeIGNyYzIpKSB7CisJCQlwcmludGYoIkNSQyBYT1IgZmFpbDogMHglMDh4ICE9IDB4JTA4eCBeIDB4JTA4eFxuIiwKKwkJCSAgICAgICBjcmMzLCBjcmMxLCBjcmMyKTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9CisJcHJpbnRmKCJcbkFsbCB0ZXN0IGNvbXBsZXRlLiAgTm8gZmFpbHVyZXMgZXhwZWN0ZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCQkJCS8qIFVOSVRURVNUICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2NyYzMyZGVmcy5oIGIvZTJmc3Byb2dzL2UyZnNjay9jcmMzMmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQxNGQyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9jcmMzMmRlZnMuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogVGhlcmUgYXJlIG11bHRpcGxlIDE2LWJpdCBDUkMgcG9seW5vbWlhbHMgaW4gY29tbW9uIHVzZSwgYnV0IHRoaXMgaXMKKyAqICp0aGUqIHN0YW5kYXJkIENSQy0zMiBwb2x5bm9taWFsLCBmaXJzdCBwb3B1bGFyaXplZCBieSBFdGhlcm5ldC4KKyAqIHheMzIreF4yNit4XjIzK3heMjIreF4xNit4XjEyK3heMTEreF4xMCt4XjgreF43K3heNSt4XjQreF4yK3heMSt4XjAKKyAqLworI2RlZmluZSBDUkNQT0xZX0xFIDB4ZWRiODgzMjAKKyNkZWZpbmUgQ1JDUE9MWV9CRSAweDA0YzExZGI3CisKKy8qIEhvdyBtYW55IGJpdHMgYXQgYSB0aW1lIHRvIHVzZS4gIFJlcXVpcmVzIGEgdGFibGUgb2YgNDw8Q1JDX3h4X0JJVFMgYnl0ZXMuICovCisvKiBGb3IgbGVzcyBwZXJmb3JtYW5jZS1zZW5zaXRpdmUsIHVzZSA0ICovCisjaWZuZGVmIENSQ19MRV9CSVRTCisjIGRlZmluZSBDUkNfTEVfQklUUyA4CisjZW5kaWYKKyNpZm5kZWYgQ1JDX0JFX0JJVFMKKyMgZGVmaW5lIENSQ19CRV9CSVRTIDgKKyNlbmRpZgorCisvKgorICogTGl0dGxlLWVuZGlhbiBDUkMgY29tcHV0YXRpb24uICBVc2VkIHdpdGggc2VyaWFsIGJpdCBzdHJlYW1zIHNlbnQKKyAqIGxzYml0LWZpcnN0LiAgQmUgc3VyZSB0byB1c2UgY3B1X3RvX2xlMzIoKSB0byBhcHBlbmQgdGhlIGNvbXB1dGVkIENSQy4KKyAqLworI2lmIENSQ19MRV9CSVRTID4gOCB8fCBDUkNfTEVfQklUUyA8IDEgfHwgQ1JDX0xFX0JJVFMgJiBDUkNfTEVfQklUUy0xCisjIGVycm9yIENSQ19MRV9CSVRTIG11c3QgYmUgYSBwb3dlciBvZiAyIGJldHdlZW4gMSBhbmQgOAorI2VuZGlmCisKKy8qCisgKiBCaWctZW5kaWFuIENSQyBjb21wdXRhdGlvbi4gIFVzZWQgd2l0aCBzZXJpYWwgYml0IHN0cmVhbXMgc2VudAorICogbXNiaXQtZmlyc3QuICBCZSBzdXJlIHRvIHVzZSBjcHVfdG9fYmUzMigpIHRvIGFwcGVuZCB0aGUgY29tcHV0ZWQgQ1JDLgorICovCisjaWYgQ1JDX0JFX0JJVFMgPiA4IHx8IENSQ19CRV9CSVRTIDwgMSB8fCBDUkNfQkVfQklUUyAmIENSQ19CRV9CSVRTLTEKKyMgZXJyb3IgQ1JDX0JFX0JJVFMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgYmV0d2VlbiAxIGFuZCA4CisjZW5kaWYKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiMzIoeCkgXAorCSgoX191MzIpKCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKwkJKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorCQkoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCisJCSgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKQorCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSBfX19jb25zdGFudF9zd2FiMzIoKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICh4KQorI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpICh4KQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICh4KQorI2RlZmluZSBfX2NwdV90b19sZTMyKHgpIChleHQyZnNfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKGV4dDJmc19zd2FiMzIoKHgpKSkKKyNlbHNlCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgX19fY29uc3RhbnRfc3dhYjMyKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSAoZXh0MmZzX3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpIChleHQyZnNfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKHgpCisjZW5kaWYKKworI2lmIChfX0dOVUNfXyA+PSAzKQorI2RlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbHNlCisjZGVmaW5lIGxpa2VseSh4KQkoeCkKKyNkZWZpbmUgdW5saWtlbHkoeCkJKHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svY3JjMzJ0YWJsZS5oIGIvZTJmc3Byb2dzL2UyZnNjay9jcmMzMnRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhNzlhMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svY3JjMzJ0YWJsZS5oCkBAIC0wLDAgKzEsMTM2IEBACisvKiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIC0gZG8gbm90IGVkaXQgKi8KKworI2lmZGVmIFVOSVRURVNUCitzdGF0aWMgY29uc3QgX191MzIgY3JjMzJ0YWJsZV9sZVtdID0gewordG9sZSgweDAwMDAwMDAwTCksIHRvbGUoMHg3NzA3MzA5NkwpLCB0b2xlKDB4ZWUwZTYxMmNMKSwgdG9sZSgweDk5MDk1MWJhTCksIAordG9sZSgweDA3NmRjNDE5TCksIHRvbGUoMHg3MDZhZjQ4ZkwpLCB0b2xlKDB4ZTk2M2E1MzVMKSwgdG9sZSgweDllNjQ5NWEzTCksIAordG9sZSgweDBlZGI4ODMyTCksIHRvbGUoMHg3OWRjYjhhNEwpLCB0b2xlKDB4ZTBkNWU5MWVMKSwgdG9sZSgweDk3ZDJkOTg4TCksIAordG9sZSgweDA5YjY0YzJiTCksIHRvbGUoMHg3ZWIxN2NiZEwpLCB0b2xlKDB4ZTdiODJkMDdMKSwgdG9sZSgweDkwYmYxZDkxTCksIAordG9sZSgweDFkYjcxMDY0TCksIHRvbGUoMHg2YWIwMjBmMkwpLCB0b2xlKDB4ZjNiOTcxNDhMKSwgdG9sZSgweDg0YmU0MWRlTCksIAordG9sZSgweDFhZGFkNDdkTCksIHRvbGUoMHg2ZGRkZTRlYkwpLCB0b2xlKDB4ZjRkNGI1NTFMKSwgdG9sZSgweDgzZDM4NWM3TCksIAordG9sZSgweDEzNmM5ODU2TCksIHRvbGUoMHg2NDZiYThjMEwpLCB0b2xlKDB4ZmQ2MmY5N2FMKSwgdG9sZSgweDhhNjVjOWVjTCksIAordG9sZSgweDE0MDE1YzRmTCksIHRvbGUoMHg2MzA2NmNkOUwpLCB0b2xlKDB4ZmEwZjNkNjNMKSwgdG9sZSgweDhkMDgwZGY1TCksIAordG9sZSgweDNiNmUyMGM4TCksIHRvbGUoMHg0YzY5MTA1ZUwpLCB0b2xlKDB4ZDU2MDQxZTRMKSwgdG9sZSgweGEyNjc3MTcyTCksIAordG9sZSgweDNjMDNlNGQxTCksIHRvbGUoMHg0YjA0ZDQ0N0wpLCB0b2xlKDB4ZDIwZDg1ZmRMKSwgdG9sZSgweGE1MGFiNTZiTCksIAordG9sZSgweDM1YjVhOGZhTCksIHRvbGUoMHg0MmIyOTg2Y0wpLCB0b2xlKDB4ZGJiYmM5ZDZMKSwgdG9sZSgweGFjYmNmOTQwTCksIAordG9sZSgweDMyZDg2Y2UzTCksIHRvbGUoMHg0NWRmNWM3NUwpLCB0b2xlKDB4ZGNkNjBkY2ZMKSwgdG9sZSgweGFiZDEzZDU5TCksIAordG9sZSgweDI2ZDkzMGFjTCksIHRvbGUoMHg1MWRlMDAzYUwpLCB0b2xlKDB4YzhkNzUxODBMKSwgdG9sZSgweGJmZDA2MTE2TCksIAordG9sZSgweDIxYjRmNGI1TCksIHRvbGUoMHg1NmIzYzQyM0wpLCB0b2xlKDB4Y2ZiYTk1OTlMKSwgdG9sZSgweGI4YmRhNTBmTCksIAordG9sZSgweDI4MDJiODllTCksIHRvbGUoMHg1ZjA1ODgwOEwpLCB0b2xlKDB4YzYwY2Q5YjJMKSwgdG9sZSgweGIxMGJlOTI0TCksIAordG9sZSgweDJmNmY3Yzg3TCksIHRvbGUoMHg1ODY4NGMxMUwpLCB0b2xlKDB4YzE2MTFkYWJMKSwgdG9sZSgweGI2NjYyZDNkTCksIAordG9sZSgweDc2ZGM0MTkwTCksIHRvbGUoMHgwMWRiNzEwNkwpLCB0b2xlKDB4OThkMjIwYmNMKSwgdG9sZSgweGVmZDUxMDJhTCksIAordG9sZSgweDcxYjE4NTg5TCksIHRvbGUoMHgwNmI2YjUxZkwpLCB0b2xlKDB4OWZiZmU0YTVMKSwgdG9sZSgweGU4YjhkNDMzTCksIAordG9sZSgweDc4MDdjOWEyTCksIHRvbGUoMHgwZjAwZjkzNEwpLCB0b2xlKDB4OTYwOWE4OGVMKSwgdG9sZSgweGUxMGU5ODE4TCksIAordG9sZSgweDdmNmEwZGJiTCksIHRvbGUoMHgwODZkM2QyZEwpLCB0b2xlKDB4OTE2NDZjOTdMKSwgdG9sZSgweGU2NjM1YzAxTCksIAordG9sZSgweDZiNmI1MWY0TCksIHRvbGUoMHgxYzZjNjE2MkwpLCB0b2xlKDB4ODU2NTMwZDhMKSwgdG9sZSgweGYyNjIwMDRlTCksIAordG9sZSgweDZjMDY5NWVkTCksIHRvbGUoMHgxYjAxYTU3YkwpLCB0b2xlKDB4ODIwOGY0YzFMKSwgdG9sZSgweGY1MGZjNDU3TCksIAordG9sZSgweDY1YjBkOWM2TCksIHRvbGUoMHgxMmI3ZTk1MEwpLCB0b2xlKDB4OGJiZWI4ZWFMKSwgdG9sZSgweGZjYjk4ODdjTCksIAordG9sZSgweDYyZGQxZGRmTCksIHRvbGUoMHgxNWRhMmQ0OUwpLCB0b2xlKDB4OGNkMzdjZjNMKSwgdG9sZSgweGZiZDQ0YzY1TCksIAordG9sZSgweDRkYjI2MTU4TCksIHRvbGUoMHgzYWI1NTFjZUwpLCB0b2xlKDB4YTNiYzAwNzRMKSwgdG9sZSgweGQ0YmIzMGUyTCksIAordG9sZSgweDRhZGZhNTQxTCksIHRvbGUoMHgzZGQ4OTVkN0wpLCB0b2xlKDB4YTRkMWM0NmRMKSwgdG9sZSgweGQzZDZmNGZiTCksIAordG9sZSgweDQzNjllOTZhTCksIHRvbGUoMHgzNDZlZDlmY0wpLCB0b2xlKDB4YWQ2Nzg4NDZMKSwgdG9sZSgweGRhNjBiOGQwTCksIAordG9sZSgweDQ0MDQyZDczTCksIHRvbGUoMHgzMzAzMWRlNUwpLCB0b2xlKDB4YWEwYTRjNWZMKSwgdG9sZSgweGRkMGQ3Y2M5TCksIAordG9sZSgweDUwMDU3MTNjTCksIHRvbGUoMHgyNzAyNDFhYUwpLCB0b2xlKDB4YmUwYjEwMTBMKSwgdG9sZSgweGM5MGMyMDg2TCksIAordG9sZSgweDU3NjhiNTI1TCksIHRvbGUoMHgyMDZmODViM0wpLCB0b2xlKDB4Yjk2NmQ0MDlMKSwgdG9sZSgweGNlNjFlNDlmTCksIAordG9sZSgweDVlZGVmOTBlTCksIHRvbGUoMHgyOWQ5Yzk5OEwpLCB0b2xlKDB4YjBkMDk4MjJMKSwgdG9sZSgweGM3ZDdhOGI0TCksIAordG9sZSgweDU5YjMzZDE3TCksIHRvbGUoMHgyZWI0MGQ4MUwpLCB0b2xlKDB4YjdiZDVjM2JMKSwgdG9sZSgweGMwYmE2Y2FkTCksIAordG9sZSgweGVkYjg4MzIwTCksIHRvbGUoMHg5YWJmYjNiNkwpLCB0b2xlKDB4MDNiNmUyMGNMKSwgdG9sZSgweDc0YjFkMjlhTCksIAordG9sZSgweGVhZDU0NzM5TCksIHRvbGUoMHg5ZGQyNzdhZkwpLCB0b2xlKDB4MDRkYjI2MTVMKSwgdG9sZSgweDczZGMxNjgzTCksIAordG9sZSgweGUzNjMwYjEyTCksIHRvbGUoMHg5NDY0M2I4NEwpLCB0b2xlKDB4MGQ2ZDZhM2VMKSwgdG9sZSgweDdhNmE1YWE4TCksIAordG9sZSgweGU0MGVjZjBiTCksIHRvbGUoMHg5MzA5ZmY5ZEwpLCB0b2xlKDB4MGEwMGFlMjdMKSwgdG9sZSgweDdkMDc5ZWIxTCksIAordG9sZSgweGYwMGY5MzQ0TCksIHRvbGUoMHg4NzA4YTNkMkwpLCB0b2xlKDB4MWUwMWYyNjhMKSwgdG9sZSgweDY5MDZjMmZlTCksIAordG9sZSgweGY3NjI1NzVkTCksIHRvbGUoMHg4MDY1NjdjYkwpLCB0b2xlKDB4MTk2YzM2NzFMKSwgdG9sZSgweDZlNmIwNmU3TCksIAordG9sZSgweGZlZDQxYjc2TCksIHRvbGUoMHg4OWQzMmJlMEwpLCB0b2xlKDB4MTBkYTdhNWFMKSwgdG9sZSgweDY3ZGQ0YWNjTCksIAordG9sZSgweGY5YjlkZjZmTCksIHRvbGUoMHg4ZWJlZWZmOUwpLCB0b2xlKDB4MTdiN2JlNDNMKSwgdG9sZSgweDYwYjA4ZWQ1TCksIAordG9sZSgweGQ2ZDZhM2U4TCksIHRvbGUoMHhhMWQxOTM3ZUwpLCB0b2xlKDB4MzhkOGMyYzRMKSwgdG9sZSgweDRmZGZmMjUyTCksIAordG9sZSgweGQxYmI2N2YxTCksIHRvbGUoMHhhNmJjNTc2N0wpLCB0b2xlKDB4M2ZiNTA2ZGRMKSwgdG9sZSgweDQ4YjIzNjRiTCksIAordG9sZSgweGQ4MGQyYmRhTCksIHRvbGUoMHhhZjBhMWI0Y0wpLCB0b2xlKDB4MzYwMzRhZjZMKSwgdG9sZSgweDQxMDQ3YTYwTCksIAordG9sZSgweGRmNjBlZmMzTCksIHRvbGUoMHhhODY3ZGY1NUwpLCB0b2xlKDB4MzE2ZThlZWZMKSwgdG9sZSgweDQ2NjliZTc5TCksIAordG9sZSgweGNiNjFiMzhjTCksIHRvbGUoMHhiYzY2ODMxYUwpLCB0b2xlKDB4MjU2ZmQyYTBMKSwgdG9sZSgweDUyNjhlMjM2TCksIAordG9sZSgweGNjMGM3Nzk1TCksIHRvbGUoMHhiYjBiNDcwM0wpLCB0b2xlKDB4MjIwMjE2YjlMKSwgdG9sZSgweDU1MDUyNjJmTCksIAordG9sZSgweGM1YmEzYmJlTCksIHRvbGUoMHhiMmJkMGIyOEwpLCB0b2xlKDB4MmJiNDVhOTJMKSwgdG9sZSgweDVjYjM2YTA0TCksIAordG9sZSgweGMyZDdmZmE3TCksIHRvbGUoMHhiNWQwY2YzMUwpLCB0b2xlKDB4MmNkOTllOGJMKSwgdG9sZSgweDViZGVhZTFkTCksIAordG9sZSgweDliNjRjMmIwTCksIHRvbGUoMHhlYzYzZjIyNkwpLCB0b2xlKDB4NzU2YWEzOWNMKSwgdG9sZSgweDAyNmQ5MzBhTCksIAordG9sZSgweDljMDkwNmE5TCksIHRvbGUoMHhlYjBlMzYzZkwpLCB0b2xlKDB4NzIwNzY3ODVMKSwgdG9sZSgweDA1MDA1NzEzTCksIAordG9sZSgweDk1YmY0YTgyTCksIHRvbGUoMHhlMmI4N2ExNEwpLCB0b2xlKDB4N2JiMTJiYWVMKSwgdG9sZSgweDBjYjYxYjM4TCksIAordG9sZSgweDkyZDI4ZTliTCksIHRvbGUoMHhlNWQ1YmUwZEwpLCB0b2xlKDB4N2NkY2VmYjdMKSwgdG9sZSgweDBiZGJkZjIxTCksIAordG9sZSgweDg2ZDNkMmQ0TCksIHRvbGUoMHhmMWQ0ZTI0MkwpLCB0b2xlKDB4NjhkZGIzZjhMKSwgdG9sZSgweDFmZGE4MzZlTCksIAordG9sZSgweDgxYmUxNmNkTCksIHRvbGUoMHhmNmI5MjY1YkwpLCB0b2xlKDB4NmZiMDc3ZTFMKSwgdG9sZSgweDE4Yjc0Nzc3TCksIAordG9sZSgweDg4MDg1YWU2TCksIHRvbGUoMHhmZjBmNmE3MEwpLCB0b2xlKDB4NjYwNjNiY2FMKSwgdG9sZSgweDExMDEwYjVjTCksIAordG9sZSgweDhmNjU5ZWZmTCksIHRvbGUoMHhmODYyYWU2OUwpLCB0b2xlKDB4NjE2YmZmZDNMKSwgdG9sZSgweDE2NmNjZjQ1TCksIAordG9sZSgweGEwMGFlMjc4TCksIHRvbGUoMHhkNzBkZDJlZUwpLCB0b2xlKDB4NGUwNDgzNTRMKSwgdG9sZSgweDM5MDNiM2MyTCksIAordG9sZSgweGE3NjcyNjYxTCksIHRvbGUoMHhkMDYwMTZmN0wpLCB0b2xlKDB4NDk2OTQ3NGRMKSwgdG9sZSgweDNlNmU3N2RiTCksIAordG9sZSgweGFlZDE2YTRhTCksIHRvbGUoMHhkOWQ2NWFkY0wpLCB0b2xlKDB4NDBkZjBiNjZMKSwgdG9sZSgweDM3ZDgzYmYwTCksIAordG9sZSgweGE5YmNhZTUzTCksIHRvbGUoMHhkZWJiOWVjNUwpLCB0b2xlKDB4NDdiMmNmN2ZMKSwgdG9sZSgweDMwYjVmZmU5TCksIAordG9sZSgweGJkYmRmMjFjTCksIHRvbGUoMHhjYWJhYzI4YUwpLCB0b2xlKDB4NTNiMzkzMzBMKSwgdG9sZSgweDI0YjRhM2E2TCksIAordG9sZSgweGJhZDAzNjA1TCksIHRvbGUoMHhjZGQ3MDY5M0wpLCB0b2xlKDB4NTRkZTU3MjlMKSwgdG9sZSgweDIzZDk2N2JmTCksIAordG9sZSgweGIzNjY3YTJlTCksIHRvbGUoMHhjNDYxNGFiOEwpLCB0b2xlKDB4NWQ2ODFiMDJMKSwgdG9sZSgweDJhNmYyYjk0TCksIAordG9sZSgweGI0MGJiZTM3TCksIHRvbGUoMHhjMzBjOGVhMUwpLCB0b2xlKDB4NWEwNWRmMWJMKSwgdG9sZSgweDJkMDJlZjhkTCkKK307CisjZW5kaWYgLyogVU5JVFRFU1QgKi8KK3N0YXRpYyBjb25zdCBfX3UzMiBjcmMzMnRhYmxlX2JlW10gPSB7Cit0b2JlKDB4MDAwMDAwMDBMKSwgdG9iZSgweDA0YzExZGI3TCksIHRvYmUoMHgwOTgyM2I2ZUwpLCB0b2JlKDB4MGQ0MzI2ZDlMKSwgCit0b2JlKDB4MTMwNDc2ZGNMKSwgdG9iZSgweDE3YzU2YjZiTCksIHRvYmUoMHgxYTg2NGRiMkwpLCB0b2JlKDB4MWU0NzUwMDVMKSwgCit0b2JlKDB4MjYwOGVkYjhMKSwgdG9iZSgweDIyYzlmMDBmTCksIHRvYmUoMHgyZjhhZDZkNkwpLCB0b2JlKDB4MmI0YmNiNjFMKSwgCit0b2JlKDB4MzUwYzliNjRMKSwgdG9iZSgweDMxY2Q4NmQzTCksIHRvYmUoMHgzYzhlYTAwYUwpLCB0b2JlKDB4Mzg0ZmJkYmRMKSwgCit0b2JlKDB4NGMxMWRiNzBMKSwgdG9iZSgweDQ4ZDBjNmM3TCksIHRvYmUoMHg0NTkzZTAxZUwpLCB0b2JlKDB4NDE1MmZkYTlMKSwgCit0b2JlKDB4NWYxNWFkYWNMKSwgdG9iZSgweDViZDRiMDFiTCksIHRvYmUoMHg1Njk3OTZjMkwpLCB0b2JlKDB4NTI1NjhiNzVMKSwgCit0b2JlKDB4NmExOTM2YzhMKSwgdG9iZSgweDZlZDgyYjdmTCksIHRvYmUoMHg2MzliMGRhNkwpLCB0b2JlKDB4Njc1YTEwMTFMKSwgCit0b2JlKDB4NzkxZDQwMTRMKSwgdG9iZSgweDdkZGM1ZGEzTCksIHRvYmUoMHg3MDlmN2I3YUwpLCB0b2JlKDB4NzQ1ZTY2Y2RMKSwgCit0b2JlKDB4OTgyM2I2ZTBMKSwgdG9iZSgweDljZTJhYjU3TCksIHRvYmUoMHg5MWExOGQ4ZUwpLCB0b2JlKDB4OTU2MDkwMzlMKSwgCit0b2JlKDB4OGIyN2MwM2NMKSwgdG9iZSgweDhmZTZkZDhiTCksIHRvYmUoMHg4MmE1ZmI1MkwpLCB0b2JlKDB4ODY2NGU2ZTVMKSwgCit0b2JlKDB4YmUyYjViNThMKSwgdG9iZSgweGJhZWE0NmVmTCksIHRvYmUoMHhiN2E5NjAzNkwpLCB0b2JlKDB4YjM2ODdkODFMKSwgCit0b2JlKDB4YWQyZjJkODRMKSwgdG9iZSgweGE5ZWUzMDMzTCksIHRvYmUoMHhhNGFkMTZlYUwpLCB0b2JlKDB4YTA2YzBiNWRMKSwgCit0b2JlKDB4ZDQzMjZkOTBMKSwgdG9iZSgweGQwZjM3MDI3TCksIHRvYmUoMHhkZGIwNTZmZUwpLCB0b2JlKDB4ZDk3MTRiNDlMKSwgCit0b2JlKDB4YzczNjFiNGNMKSwgdG9iZSgweGMzZjcwNmZiTCksIHRvYmUoMHhjZWI0MjAyMkwpLCB0b2JlKDB4Y2E3NTNkOTVMKSwgCit0b2JlKDB4ZjIzYTgwMjhMKSwgdG9iZSgweGY2ZmI5ZDlmTCksIHRvYmUoMHhmYmI4YmI0NkwpLCB0b2JlKDB4ZmY3OWE2ZjFMKSwgCit0b2JlKDB4ZTEzZWY2ZjRMKSwgdG9iZSgweGU1ZmZlYjQzTCksIHRvYmUoMHhlOGJjY2Q5YUwpLCB0b2JlKDB4ZWM3ZGQwMmRMKSwgCit0b2JlKDB4MzQ4NjcwNzdMKSwgdG9iZSgweDMwNDc2ZGMwTCksIHRvYmUoMHgzZDA0NGIxOUwpLCB0b2JlKDB4MzljNTU2YWVMKSwgCit0b2JlKDB4Mjc4MjA2YWJMKSwgdG9iZSgweDIzNDMxYjFjTCksIHRvYmUoMHgyZTAwM2RjNUwpLCB0b2JlKDB4MmFjMTIwNzJMKSwgCit0b2JlKDB4MTI4ZTlkY2ZMKSwgdG9iZSgweDE2NGY4MDc4TCksIHRvYmUoMHgxYjBjYTZhMUwpLCB0b2JlKDB4MWZjZGJiMTZMKSwgCit0b2JlKDB4MDE4YWViMTNMKSwgdG9iZSgweDA1NGJmNmE0TCksIHRvYmUoMHgwODA4ZDA3ZEwpLCB0b2JlKDB4MGNjOWNkY2FMKSwgCit0b2JlKDB4Nzg5N2FiMDdMKSwgdG9iZSgweDdjNTZiNmIwTCksIHRvYmUoMHg3MTE1OTA2OUwpLCB0b2JlKDB4NzVkNDhkZGVMKSwgCit0b2JlKDB4NmI5M2RkZGJMKSwgdG9iZSgweDZmNTJjMDZjTCksIHRvYmUoMHg2MjExZTZiNUwpLCB0b2JlKDB4NjZkMGZiMDJMKSwgCit0b2JlKDB4NWU5ZjQ2YmZMKSwgdG9iZSgweDVhNWU1YjA4TCksIHRvYmUoMHg1NzFkN2RkMUwpLCB0b2JlKDB4NTNkYzYwNjZMKSwgCit0b2JlKDB4NGQ5YjMwNjNMKSwgdG9iZSgweDQ5NWEyZGQ0TCksIHRvYmUoMHg0NDE5MGIwZEwpLCB0b2JlKDB4NDBkODE2YmFMKSwgCit0b2JlKDB4YWNhNWM2OTdMKSwgdG9iZSgweGE4NjRkYjIwTCksIHRvYmUoMHhhNTI3ZmRmOUwpLCB0b2JlKDB4YTFlNmUwNGVMKSwgCit0b2JlKDB4YmZhMWIwNGJMKSwgdG9iZSgweGJiNjBhZGZjTCksIHRvYmUoMHhiNjIzOGIyNUwpLCB0b2JlKDB4YjJlMjk2OTJMKSwgCit0b2JlKDB4OGFhZDJiMmZMKSwgdG9iZSgweDhlNmMzNjk4TCksIHRvYmUoMHg4MzJmMTA0MUwpLCB0b2JlKDB4ODdlZTBkZjZMKSwgCit0b2JlKDB4OTlhOTVkZjNMKSwgdG9iZSgweDlkNjg0MDQ0TCksIHRvYmUoMHg5MDJiNjY5ZEwpLCB0b2JlKDB4OTRlYTdiMmFMKSwgCit0b2JlKDB4ZTBiNDFkZTdMKSwgdG9iZSgweGU0NzUwMDUwTCksIHRvYmUoMHhlOTM2MjY4OUwpLCB0b2JlKDB4ZWRmNzNiM2VMKSwgCit0b2JlKDB4ZjNiMDZiM2JMKSwgdG9iZSgweGY3NzE3NjhjTCksIHRvYmUoMHhmYTMyNTA1NUwpLCB0b2JlKDB4ZmVmMzRkZTJMKSwgCit0b2JlKDB4YzZiY2YwNWZMKSwgdG9iZSgweGMyN2RlZGU4TCksIHRvYmUoMHhjZjNlY2IzMUwpLCB0b2JlKDB4Y2JmZmQ2ODZMKSwgCit0b2JlKDB4ZDViODg2ODNMKSwgdG9iZSgweGQxNzk5YjM0TCksIHRvYmUoMHhkYzNhYmRlZEwpLCB0b2JlKDB4ZDhmYmEwNWFMKSwgCit0b2JlKDB4NjkwY2UwZWVMKSwgdG9iZSgweDZkY2RmZDU5TCksIHRvYmUoMHg2MDhlZGI4MEwpLCB0b2JlKDB4NjQ0ZmM2MzdMKSwgCit0b2JlKDB4N2EwODk2MzJMKSwgdG9iZSgweDdlYzk4Yjg1TCksIHRvYmUoMHg3MzhhYWQ1Y0wpLCB0b2JlKDB4Nzc0YmIwZWJMKSwgCit0b2JlKDB4NGYwNDBkNTZMKSwgdG9iZSgweDRiYzUxMGUxTCksIHRvYmUoMHg0Njg2MzYzOEwpLCB0b2JlKDB4NDI0NzJiOGZMKSwgCit0b2JlKDB4NWMwMDdiOGFMKSwgdG9iZSgweDU4YzE2NjNkTCksIHRvYmUoMHg1NTgyNDBlNEwpLCB0b2JlKDB4NTE0MzVkNTNMKSwgCit0b2JlKDB4MjUxZDNiOWVMKSwgdG9iZSgweDIxZGMyNjI5TCksIHRvYmUoMHgyYzlmMDBmMEwpLCB0b2JlKDB4Mjg1ZTFkNDdMKSwgCit0b2JlKDB4MzYxOTRkNDJMKSwgdG9iZSgweDMyZDg1MGY1TCksIHRvYmUoMHgzZjliNzYyY0wpLCB0b2JlKDB4M2I1YTZiOWJMKSwgCit0b2JlKDB4MDMxNWQ2MjZMKSwgdG9iZSgweDA3ZDRjYjkxTCksIHRvYmUoMHgwYTk3ZWQ0OEwpLCB0b2JlKDB4MGU1NmYwZmZMKSwgCit0b2JlKDB4MTAxMWEwZmFMKSwgdG9iZSgweDE0ZDBiZDRkTCksIHRvYmUoMHgxOTkzOWI5NEwpLCB0b2JlKDB4MWQ1Mjg2MjNMKSwgCit0b2JlKDB4ZjEyZjU2MGVMKSwgdG9iZSgweGY1ZWU0YmI5TCksIHRvYmUoMHhmOGFkNmQ2MEwpLCB0b2JlKDB4ZmM2YzcwZDdMKSwgCit0b2JlKDB4ZTIyYjIwZDJMKSwgdG9iZSgweGU2ZWEzZDY1TCksIHRvYmUoMHhlYmE5MWJiY0wpLCB0b2JlKDB4ZWY2ODA2MGJMKSwgCit0b2JlKDB4ZDcyN2JiYjZMKSwgdG9iZSgweGQzZTZhNjAxTCksIHRvYmUoMHhkZWE1ODBkOEwpLCB0b2JlKDB4ZGE2NDlkNmZMKSwgCit0b2JlKDB4YzQyM2NkNmFMKSwgdG9iZSgweGMwZTJkMGRkTCksIHRvYmUoMHhjZGExZjYwNEwpLCB0b2JlKDB4Yzk2MGViYjNMKSwgCit0b2JlKDB4YmQzZThkN2VMKSwgdG9iZSgweGI5ZmY5MGM5TCksIHRvYmUoMHhiNGJjYjYxMEwpLCB0b2JlKDB4YjA3ZGFiYTdMKSwgCit0b2JlKDB4YWUzYWZiYTJMKSwgdG9iZSgweGFhZmJlNjE1TCksIHRvYmUoMHhhN2I4YzBjY0wpLCB0b2JlKDB4YTM3OWRkN2JMKSwgCit0b2JlKDB4OWIzNjYwYzZMKSwgdG9iZSgweDlmZjc3ZDcxTCksIHRvYmUoMHg5MmI0NWJhOEwpLCB0b2JlKDB4OTY3NTQ2MWZMKSwgCit0b2JlKDB4ODgzMjE2MWFMKSwgdG9iZSgweDhjZjMwYmFkTCksIHRvYmUoMHg4MWIwMmQ3NEwpLCB0b2JlKDB4ODU3MTMwYzNMKSwgCit0b2JlKDB4NWQ4YTkwOTlMKSwgdG9iZSgweDU5NGI4ZDJlTCksIHRvYmUoMHg1NDA4YWJmN0wpLCB0b2JlKDB4NTBjOWI2NDBMKSwgCit0b2JlKDB4NGU4ZWU2NDVMKSwgdG9iZSgweDRhNGZmYmYyTCksIHRvYmUoMHg0NzBjZGQyYkwpLCB0b2JlKDB4NDNjZGMwOWNMKSwgCit0b2JlKDB4N2I4MjdkMjFMKSwgdG9iZSgweDdmNDM2MDk2TCksIHRvYmUoMHg3MjAwNDY0ZkwpLCB0b2JlKDB4NzZjMTViZjhMKSwgCit0b2JlKDB4Njg4NjBiZmRMKSwgdG9iZSgweDZjNDcxNjRhTCksIHRvYmUoMHg2MTA0MzA5M0wpLCB0b2JlKDB4NjVjNTJkMjRMKSwgCit0b2JlKDB4MTE5YjRiZTlMKSwgdG9iZSgweDE1NWE1NjVlTCksIHRvYmUoMHgxODE5NzA4N0wpLCB0b2JlKDB4MWNkODZkMzBMKSwgCit0b2JlKDB4MDI5ZjNkMzVMKSwgdG9iZSgweDA2NWUyMDgyTCksIHRvYmUoMHgwYjFkMDY1YkwpLCB0b2JlKDB4MGZkYzFiZWNMKSwgCit0b2JlKDB4Mzc5M2E2NTFMKSwgdG9iZSgweDMzNTJiYmU2TCksIHRvYmUoMHgzZTExOWQzZkwpLCB0b2JlKDB4M2FkMDgwODhMKSwgCit0b2JlKDB4MjQ5N2QwOGRMKSwgdG9iZSgweDIwNTZjZDNhTCksIHRvYmUoMHgyZDE1ZWJlM0wpLCB0b2JlKDB4MjlkNGY2NTRMKSwgCit0b2JlKDB4YzVhOTI2NzlMKSwgdG9iZSgweGMxNjgzYmNlTCksIHRvYmUoMHhjYzJiMWQxN0wpLCB0b2JlKDB4YzhlYTAwYTBMKSwgCit0b2JlKDB4ZDZhZDUwYTVMKSwgdG9iZSgweGQyNmM0ZDEyTCksIHRvYmUoMHhkZjJmNmJjYkwpLCB0b2JlKDB4ZGJlZTc2N2NMKSwgCit0b2JlKDB4ZTNhMWNiYzFMKSwgdG9iZSgweGU3NjBkNjc2TCksIHRvYmUoMHhlYTIzZjBhZkwpLCB0b2JlKDB4ZWVlMmVkMThMKSwgCit0b2JlKDB4ZjBhNWJkMWRMKSwgdG9iZSgweGY0NjRhMGFhTCksIHRvYmUoMHhmOTI3ODY3M0wpLCB0b2JlKDB4ZmRlNjliYzRMKSwgCit0b2JlKDB4ODliOGZkMDlMKSwgdG9iZSgweDhkNzllMGJlTCksIHRvYmUoMHg4MDNhYzY2N0wpLCB0b2JlKDB4ODRmYmRiZDBMKSwgCit0b2JlKDB4OWFiYzhiZDVMKSwgdG9iZSgweDllN2Q5NjYyTCksIHRvYmUoMHg5MzNlYjBiYkwpLCB0b2JlKDB4OTdmZmFkMGNMKSwgCit0b2JlKDB4YWZiMDEwYjFMKSwgdG9iZSgweGFiNzEwZDA2TCksIHRvYmUoMHhhNjMyMmJkZkwpLCB0b2JlKDB4YTJmMzM2NjhMKSwgCit0b2JlKDB4YmNiNDY2NmRMKSwgdG9iZSgweGI4NzU3YmRhTCksIHRvYmUoMHhiNTM2NWQwM0wpLCB0b2JlKDB4YjFmNzQwYjRMKQorfTsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZGljdC5jIGIvZTJmc3Byb2dzL2UyZnNjay9kaWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyYjViMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svZGljdC5jCkBAIC0wLDAgKzEsMTUyMSBAQAorLyoKKyAqIERpY3Rpb25hcnkgQWJzdHJhY3QgRGF0YSBUeXBlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgS2F6IEt5bGhla3UgPGthekBhc2hpLmZvb3RwcmludHMubmV0PgorICoKKyAqIEZyZWUgU29mdHdhcmUgTGljZW5zZToKKyAqCisgKiBBbGwgcmlnaHRzIGFyZSByZXNlcnZlZCBieSB0aGUgYXV0aG9yLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczoKKyAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBmcmVlbHkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsCisgKiBwb3NzaWJseSBpbiBleGNoYW5nZSBmb3IgYSBmZWUsIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMKKyAqIGludGFjdC4gUGVybWlzc2lvbiBpcyBhbHNvIGdyYW50ZWQgdG8gYWRhcHQgdGhpcyBzb2Z0d2FyZSB0byBwcm9kdWNlCisgKiBkZXJpdmF0aXZlIHdvcmtzLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9ucyBjYXJyeSB0aGlzIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBhZGRpdGlvbmFsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLgorICogVGhpcyBzb3VyY2UgY29kZSBtYXkgYmUgdHJhbnNsYXRlZCBpbnRvIGV4ZWN1dGFibGUgZm9ybSBhbmQgaW5jb3Jwb3JhdGVkCisgKiBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlOyB0aGVyZSBpcyBubyByZXF1aXJlbWVudCBmb3Igc3VjaCBzb2Z0d2FyZSB0bworICogY29udGFpbiBhIGNvcHlyaWdodCBub3RpY2UgcmVsYXRlZCB0byB0aGlzIHNvdXJjZS4KKyAqCisgKiAkSWQ6IGRpY3QuYyx2IDEuNDAuMi43IDIwMDAvMTEvMTMgMDE6MzY6NDQga2F6IEV4cCAkCisgKiAkTmFtZToga2F6bGliXzFfMjAgJAorICovCisKKyNkZWZpbmUgTkRFQlVHCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBFWFQyRlNfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBFWFQyRlNfQVRUUih4KQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgRElDVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgImRpY3QuaCIKKworI2lmZGVmIEtBWkxJQl9SQ1NJRAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSWQ6IGRpY3QuYyx2IDEuNDAuMi43IDIwMDAvMTEvMTMgMDE6MzY6NDQga2F6IEV4cCAkIjsKKyNlbmRpZgorCisvKgorICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgc2hvcnQgY29udmVuaWVudCBuYW1lcyBmb3Igc3RydWN0dXJlIG1lbWJlcnMsCisgKiB3aGljaCBhcmUgZW1iZWxsaXNoZWQgd2l0aCBkaWN0XyBwcmVmaXhlcyBzbyB0aGF0IHRoZXkgYXJlCisgKiBwcm9wZXJseSBjb25maW5lZCB0byB0aGUgZG9jdW1lbnRlZCBuYW1lc3BhY2UuIEl0J3MgbGVnYWwgZm9yIGEKKyAqIHByb2dyYW0gd2hpY2ggdXNlcyBkaWN0IHRvIGRlZmluZSwgZm9yIGluc3RhbmNlLCBhIG1hY3JvIGNhbGxlZCBgYHBhcmVudCcnLgorICogU3VjaCBhIG1hY3JvIHdvdWxkIGludGVyZmVyZSB3aXRoIHRoZSBkbm9kZV90IHN0cnVjdCBkZWZpbml0aW9uLgorICogSW4gZ2VuZXJhbCwgaGlnaGx5IHBvcnRhYmxlIGFuZCByZXVzYWJsZSBDIG1vZHVsZXMgd2hpY2ggZXhwb3NlIHRoZWlyCisgKiBzdHJ1Y3R1cmVzIG5lZWQgdG8gY29uZmluZSBzdHJ1Y3R1cmUgbWVtYmVyIG5hbWVzIHRvIHdlbGwtZGVmaW5lZCBzcGFjZXMuCisgKiBUaGUgcmVzdWx0aW5nIGlkZW50aWZpZXJzIGFyZW4ndCBuZWNlc3NhcmlseSBjb252ZW5pZW50IHRvIHVzZSwgbm9yCisgKiByZWFkYWJsZSwgaW4gdGhlIGltcGxlbWVudGF0aW9uLCBob3dldmVyIQorICovCisKKyNkZWZpbmUgbGVmdCBkaWN0X2xlZnQKKyNkZWZpbmUgcmlnaHQgZGljdF9yaWdodAorI2RlZmluZSBwYXJlbnQgZGljdF9wYXJlbnQKKyNkZWZpbmUgY29sb3IgZGljdF9jb2xvcgorI2RlZmluZSBrZXkgZGljdF9rZXkKKyNkZWZpbmUgZGF0YSBkaWN0X2RhdGEKKworI2RlZmluZSBuaWxub2RlIGRpY3Rfbmlsbm9kZQorI2RlZmluZSBub2RlY291bnQgZGljdF9ub2RlY291bnQKKyNkZWZpbmUgbWF4Y291bnQgZGljdF9tYXhjb3VudAorI2RlZmluZSBjb21wYXJlIGRpY3RfY29tcGFyZQorI2RlZmluZSBhbGxvY25vZGUgZGljdF9hbGxvY25vZGUKKyNkZWZpbmUgZnJlZW5vZGUgZGljdF9mcmVlbm9kZQorI2RlZmluZSBjb250ZXh0IGRpY3RfY29udGV4dAorI2RlZmluZSBkdXBlcyBkaWN0X2R1cGVzCisKKyNkZWZpbmUgZGljdHB0ciBkaWN0X2RpY3RwdHIKKworI2RlZmluZSBkaWN0X3Jvb3QoRCkgKChEKS0+bmlsbm9kZS5sZWZ0KQorI2RlZmluZSBkaWN0X25pbChEKSAoJihEKS0+bmlsbm9kZSkKKyNkZWZpbmUgRElDVF9ERVBUSF9NQVggNjQKKworc3RhdGljIGRub2RlX3QgKmRub2RlX2FsbG9jKHZvaWQgKmNvbnRleHQpOworc3RhdGljIHZvaWQgZG5vZGVfZnJlZShkbm9kZV90ICpub2RlLCB2b2lkICpjb250ZXh0KTsKKworLyoKKyAqIFBlcmZvcm0gYSBgYGxlZnQgcm90YXRpb24nJyBhZGp1c3RtZW50IG9uIHRoZSB0cmVlLiAgVGhlIGdpdmVuIG5vZGUgUCBhbmQKKyAqIGl0cyByaWdodCBjaGlsZCBDIGFyZSByZWFycmFuZ2VkIHNvIHRoYXQgdGhlIFAgaW5zdGVhZCBiZWNvbWVzIHRoZSBsZWZ0CisgKiBjaGlsZCBvZiBDLiAgIFRoZSBsZWZ0IHN1YnRyZWUgb2YgQyBpcyBpbmhlcml0ZWQgYXMgdGhlIG5ldyByaWdodCBzdWJ0cmVlCisgKiBmb3IgUC4gIFRoZSBvcmRlcmluZyBvZiB0aGUga2V5cyB3aXRoaW4gdGhlIHRyZWUgaXMgdGh1cyBwcmVzZXJ2ZWQuCisgKi8KKworc3RhdGljIHZvaWQgcm90YXRlX2xlZnQoZG5vZGVfdCAqdXBwZXIpCit7CisgICAgZG5vZGVfdCAqbG93ZXIsICpsb3dsZWZ0LCAqdXBwYXJlbnQ7CisKKyAgICBsb3dlciA9IHVwcGVyLT5yaWdodDsKKyAgICB1cHBlci0+cmlnaHQgPSBsb3dsZWZ0ID0gbG93ZXItPmxlZnQ7CisgICAgbG93bGVmdC0+cGFyZW50ID0gdXBwZXI7CisKKyAgICBsb3dlci0+cGFyZW50ID0gdXBwYXJlbnQgPSB1cHBlci0+cGFyZW50OworCisgICAgLyogZG9uJ3QgbmVlZCB0byBjaGVjayBmb3Igcm9vdCBub2RlIGhlcmUgYmVjYXVzZSByb290LT5wYXJlbnQgaXMKKyAgICAgICB0aGUgc2VudGluZWwgbmlsIG5vZGUsIGFuZCByb290LT5wYXJlbnQtPmxlZnQgcG9pbnRzIGJhY2sgdG8gcm9vdCAqLworCisgICAgaWYgKHVwcGVyID09IHVwcGFyZW50LT5sZWZ0KSB7CisJdXBwYXJlbnQtPmxlZnQgPSBsb3dlcjsKKyAgICB9IGVsc2UgeworCWFzc2VydCAodXBwZXIgPT0gdXBwYXJlbnQtPnJpZ2h0KTsKKwl1cHBhcmVudC0+cmlnaHQgPSBsb3dlcjsKKyAgICB9CisKKyAgICBsb3dlci0+bGVmdCA9IHVwcGVyOworICAgIHVwcGVyLT5wYXJlbnQgPSBsb3dlcjsKK30KKworLyoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIHRoZSBgYG1pcnJvcicnIGltYWdlIG9mIHJvdGF0ZV9sZWZ0LiBJdCBpcworICogdGhlIHNhbWUgcHJvY2VkdXJlLCBidXQgd2l0aCBsZWZ0IGFuZCByaWdodCBpbnRlcmNoYW5nZWQuCisgKi8KKworc3RhdGljIHZvaWQgcm90YXRlX3JpZ2h0KGRub2RlX3QgKnVwcGVyKQoreworICAgIGRub2RlX3QgKmxvd2VyLCAqbG93cmlnaHQsICp1cHBhcmVudDsKKworICAgIGxvd2VyID0gdXBwZXItPmxlZnQ7CisgICAgdXBwZXItPmxlZnQgPSBsb3dyaWdodCA9IGxvd2VyLT5yaWdodDsKKyAgICBsb3dyaWdodC0+cGFyZW50ID0gdXBwZXI7CisKKyAgICBsb3dlci0+cGFyZW50ID0gdXBwYXJlbnQgPSB1cHBlci0+cGFyZW50OworCisgICAgaWYgKHVwcGVyID09IHVwcGFyZW50LT5yaWdodCkgeworCXVwcGFyZW50LT5yaWdodCA9IGxvd2VyOworICAgIH0gZWxzZSB7CisJYXNzZXJ0ICh1cHBlciA9PSB1cHBhcmVudC0+bGVmdCk7CisJdXBwYXJlbnQtPmxlZnQgPSBsb3dlcjsKKyAgICB9CisKKyAgICBsb3dlci0+cmlnaHQgPSB1cHBlcjsKKyAgICB1cHBlci0+cGFyZW50ID0gbG93ZXI7Cit9CisKKy8qCisgKiBEbyBhIHBvc3RvcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgcm9vdGVkIGF0IHRoZSBzcGVjaWZpZWQKKyAqIG5vZGUgYW5kIGZyZWUgZXZlcnl0aGluZyB1bmRlciBpdC4gIFVzZWQgYnkgZGljdF9mcmVlKCkuCisgKi8KKworc3RhdGljIHZvaWQgZnJlZV9ub2RlcyhkaWN0X3QgKmRpY3QsIGRub2RlX3QgKm5vZGUsIGRub2RlX3QgKm5pbCkKK3sKKyAgICBpZiAobm9kZSA9PSBuaWwpCisJcmV0dXJuOworICAgIGZyZWVfbm9kZXMoZGljdCwgbm9kZS0+bGVmdCwgbmlsKTsKKyAgICBmcmVlX25vZGVzKGRpY3QsIG5vZGUtPnJpZ2h0LCBuaWwpOworICAgIGRpY3QtPmZyZWVub2RlKG5vZGUsIGRpY3QtPmNvbnRleHQpOworfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgcGVyZm9ybXMgYSB2ZXJpZmljYXRpb24gdGhhdCB0aGUgZ2l2ZW4gc3VidHJlZSBpcyBhIGJpbmFyeQorICogc2VhcmNoIHRyZWUuIEl0IHBlcmZvcm1zIGFuIGlub3JkZXIgdHJhdmVyc2FsIG9mIHRoZSB0cmVlIHVzaW5nIHRoZQorICogZGljdF9uZXh0KCkgc3VjY2Vzc29yIGZ1bmN0aW9uLCB2ZXJpZnlpbmcgdGhhdCB0aGUga2V5IG9mIGVhY2ggbm9kZSBpcworICogc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGF0IG9mIGl0cyBzdWNjZXNzb3IsIGlmIGR1cGxpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkLAorICogb3IgbG93ZXIgb3IgZXF1YWwgaWYgZHVwbGljYXRlcyBhcmUgYWxsb3dlZC4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IKKyAqIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAqLworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBpbnQgdmVyaWZ5X2JpbnRyZWUoZGljdF90ICpkaWN0KQoreworICAgIGRub2RlX3QgKmZpcnN0LCAqbmV4dDsKKworICAgIGZpcnN0ID0gZGljdF9maXJzdChkaWN0KTsKKworICAgIGlmIChkaWN0LT5kdXBlcykgeworCXdoaWxlIChmaXJzdCAmJiAobmV4dCA9IGRpY3RfbmV4dChkaWN0LCBmaXJzdCkpKSB7CisJICAgIGlmIChkaWN0LT5jb21wYXJlKGZpcnN0LT5rZXksIG5leHQtPmtleSkgPiAwKQorCQlyZXR1cm4gMDsKKwkgICAgZmlyc3QgPSBuZXh0OworCX0KKyAgICB9IGVsc2UgeworCXdoaWxlIChmaXJzdCAmJiAobmV4dCA9IGRpY3RfbmV4dChkaWN0LCBmaXJzdCkpKSB7CisJICAgIGlmIChkaWN0LT5jb21wYXJlKGZpcnN0LT5rZXksIG5leHQtPmtleSkgPj0gMCkKKwkJcmV0dXJuIDA7CisJICAgIGZpcnN0ID0gbmV4dDsKKwl9CisgICAgfQorICAgIHJldHVybiAxOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSB2ZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBiaW5hcnkgc3VidHJlZSBzYXRpc2ZpZXMKKyAqIHRocmVlIG9mIHRoZSByZWQgYmxhY2sgcHJvcGVydGllcy4gSXQgY2hlY2tzIHRoYXQgZXZlcnkgcmVkIG5vZGUgaGFzIG9ubHkKKyAqIGJsYWNrIGNoaWxkcmVuLiBJdCBtYWtlcyBzdXJlIHRoYXQgZWFjaCBub2RlIGlzIGVpdGhlciByZWQgb3IgYmxhY2suIEFuZCBpdAorICogY2hlY2tzIHRoYXQgZXZlcnkgcGF0aCBoYXMgdGhlIHNhbWUgY291bnQgb2YgYmxhY2sgbm9kZXMgZnJvbSByb290IHRvIGxlYWYuCisgKiBJdCByZXR1cm5zIHRoZSBibGFja2hlaWdodCBvZiB0aGUgZ2l2ZW4gc3VidHJlZTsgdGhpcyBhbGxvd3MgYmxhY2toZWlnaHRzIHRvCisgKiBiZSBjb21wdXRlZCByZWN1cnNpdmVseSBhbmQgY29tcGFyZWQgZm9yIGxlZnQgYW5kIHJpZ2h0IHNpYmxpbmdzIGZvcgorICogbWlzbWF0Y2hlcy4gSXQgZG9lcyBub3QgY2hlY2sgZm9yIGV2ZXJ5IG5pbCBub2RlIGJlaW5nIGJsYWNrLCBiZWNhdXNlIHRoZXJlCisgKiBpcyBvbmx5IG9uZSBzZW50aW5lbCBuaWwgbm9kZS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoZQorICogYmxhY2sgaGVpZ2h0IG9mIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB0aGUgbm9kZSBgYHJvb3QnJywgb3IgemVybyBpZiB0aGUKKyAqIHN1YnRyZWUgaXMgbm90IHJlZC1ibGFjay4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHZlcmlmeV9yZWRibGFjayhkbm9kZV90ICpuaWwsIGRub2RlX3QgKnJvb3QpCit7CisgICAgdW5zaWduZWQgaGVpZ2h0X2xlZnQsIGhlaWdodF9yaWdodDsKKworICAgIGlmIChyb290ICE9IG5pbCkgeworCWhlaWdodF9sZWZ0ID0gdmVyaWZ5X3JlZGJsYWNrKG5pbCwgcm9vdC0+bGVmdCk7CisJaGVpZ2h0X3JpZ2h0ID0gdmVyaWZ5X3JlZGJsYWNrKG5pbCwgcm9vdC0+cmlnaHQpOworCWlmIChoZWlnaHRfbGVmdCA9PSAwIHx8IGhlaWdodF9yaWdodCA9PSAwKQorCSAgICByZXR1cm4gMDsKKwlpZiAoaGVpZ2h0X2xlZnQgIT0gaGVpZ2h0X3JpZ2h0KQorCSAgICByZXR1cm4gMDsKKwlpZiAocm9vdC0+Y29sb3IgPT0gZG5vZGVfcmVkKSB7CisJICAgIGlmIChyb290LT5sZWZ0LT5jb2xvciAhPSBkbm9kZV9ibGFjaykKKwkJcmV0dXJuIDA7CisJICAgIGlmIChyb290LT5yaWdodC0+Y29sb3IgIT0gZG5vZGVfYmxhY2spCisJCXJldHVybiAwOworCSAgICByZXR1cm4gaGVpZ2h0X2xlZnQ7CisJfQorCWlmIChyb290LT5jb2xvciAhPSBkbm9kZV9ibGFjaykKKwkgICAgcmV0dXJuIDA7CisJcmV0dXJuIGhlaWdodF9sZWZ0ICsgMTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDb21wdXRlIHRoZSBhY3R1YWwgY291bnQgb2Ygbm9kZXMgYnkgdHJhdmVyc2luZyB0aGUgdHJlZSBhbmQKKyAqIHJldHVybiBpdC4gVGhpcyBjb3VsZCBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBzdG9yZWQgY291bnQgdG8KKyAqIGRldGVjdCBhIG1pc21hdGNoLgorICovCisKK3N0YXRpYyBkaWN0Y291bnRfdCB2ZXJpZnlfbm9kZV9jb3VudChkbm9kZV90ICpuaWwsIGRub2RlX3QgKnJvb3QpCit7CisgICAgaWYgKHJvb3QgPT0gbmlsKQorCXJldHVybiAwOworICAgIGVsc2UKKwlyZXR1cm4gMSArIHZlcmlmeV9ub2RlX2NvdW50KG5pbCwgcm9vdC0+bGVmdCkKKwkgICAgKyB2ZXJpZnlfbm9kZV9jb3VudChuaWwsIHJvb3QtPnJpZ2h0KTsKK30KKyNlbmRpZgorCisvKgorICogVmVyaWZ5IHRoYXQgdGhlIHRyZWUgY29udGFpbnMgdGhlIGdpdmVuIG5vZGUuIFRoaXMgaXMgZG9uZSBieQorICogdHJhdmVyc2luZyBhbGwgb2YgdGhlIG5vZGVzIGFuZCBjb21wYXJpbmcgdGhlaXIgcG9pbnRlcnMgdG8gdGhlCisgKiBnaXZlbiBwb2ludGVyLiBSZXR1cm5zIDEgaWYgdGhlIG5vZGUgaXMgZm91bmQsIG90aGVyd2lzZQorICogcmV0dXJucyB6ZXJvLiBJdCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICovCisKK3N0YXRpYyBpbnQgdmVyaWZ5X2RpY3RfaGFzX25vZGUoZG5vZGVfdCAqbmlsLCBkbm9kZV90ICpyb290LCBkbm9kZV90ICpub2RlKQoreworICAgIGlmIChyb290ICE9IG5pbCkgeworCXJldHVybiByb290ID09IG5vZGUKKwkJfHwgdmVyaWZ5X2RpY3RfaGFzX25vZGUobmlsLCByb290LT5sZWZ0LCBub2RlKQorCQl8fCB2ZXJpZnlfZGljdF9oYXNfbm9kZShuaWwsIHJvb3QtPnJpZ2h0LCBub2RlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIEUyRlNDS19OT1RVU0VECisvKgorICogRHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBkaWN0aW9uYXJ5IG9iamVjdC4KKyAqLworCitkaWN0X3QgKmRpY3RfY3JlYXRlKGRpY3Rjb3VudF90IG1heGNvdW50LCBkaWN0X2NvbXBfdCBjb21wKQoreworICAgIGRpY3RfdCAqbmV3ID0gbWFsbG9jKHNpemVvZiAqbmV3KTsKKworICAgIGlmIChuZXcpIHsKKwluZXctPmNvbXBhcmUgPSBjb21wOworCW5ldy0+YWxsb2Nub2RlID0gZG5vZGVfYWxsb2M7CisJbmV3LT5mcmVlbm9kZSA9IGRub2RlX2ZyZWU7CisJbmV3LT5jb250ZXh0ID0gTlVMTDsKKwluZXctPm5vZGVjb3VudCA9IDA7CisJbmV3LT5tYXhjb3VudCA9IG1heGNvdW50OworCW5ldy0+bmlsbm9kZS5sZWZ0ID0gJm5ldy0+bmlsbm9kZTsKKwluZXctPm5pbG5vZGUucmlnaHQgPSAmbmV3LT5uaWxub2RlOworCW5ldy0+bmlsbm9kZS5wYXJlbnQgPSAmbmV3LT5uaWxub2RlOworCW5ldy0+bmlsbm9kZS5jb2xvciA9IGRub2RlX2JsYWNrOworCW5ldy0+ZHVwZXMgPSAwOworICAgIH0KKyAgICByZXR1cm4gbmV3OworfQorI2VuZGlmIC8qIEUyRlNDS19OT1RVU0VEICovCisKKy8qCisgKiBTZWxlY3QgYSBkaWZmZXJlbnQgc2V0IG9mIG5vZGUgYWxsb2NhdG9yIHJvdXRpbmVzLgorICovCisKK3ZvaWQgZGljdF9zZXRfYWxsb2NhdG9yKGRpY3RfdCAqZGljdCwgZG5vZGVfYWxsb2NfdCBhbCwKKwlkbm9kZV9mcmVlX3QgZnIsIHZvaWQgKmNvbnRleHQpCit7CisgICAgYXNzZXJ0IChkaWN0X2NvdW50KGRpY3QpID09IDApOworICAgIGFzc2VydCAoKGFsID09IE5VTEwgJiYgZnIgPT0gTlVMTCkgfHwgKGFsICE9IE5VTEwgJiYgZnIgIT0gTlVMTCkpOworCisgICAgZGljdC0+YWxsb2Nub2RlID0gYWwgPyBhbCA6IGRub2RlX2FsbG9jOworICAgIGRpY3QtPmZyZWVub2RlID0gZnIgPyBmciA6IGRub2RlX2ZyZWU7CisgICAgZGljdC0+Y29udGV4dCA9IGNvbnRleHQ7Cit9CisKKyNpZmRlZiBFMkZTQ0tfTk9UVVNFRAorLyoKKyAqIEZyZWUgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGljdGlvbmFyeSBvYmplY3QuIFJlbW92aW5nIHRoZSBub2RlcworICogZnJvbSB0aGUgdHJlZSBiZWZvcmUgZGVsZXRpbmcgaXQgaXMgcmVxdWlyZWQuCisgKi8KKwordm9pZCBkaWN0X2Rlc3Ryb3koZGljdF90ICpkaWN0KQoreworICAgIGFzc2VydCAoZGljdF9pc2VtcHR5KGRpY3QpKTsKKyAgICBmcmVlKGRpY3QpOworfQorI2VuZGlmCisKKy8qCisgKiBGcmVlIGFsbCB0aGUgbm9kZXMgaW4gdGhlIGRpY3Rpb25hcnkgYnkgdXNpbmcgdGhlIGRpY3Rpb25hcnkncworICogaW5zdGFsbGVkIGZyZWUgcm91dGluZS4gVGhlIGRpY3Rpb25hcnkgaXMgZW1wdGllZC4KKyAqLworCit2b2lkIGRpY3RfZnJlZV9ub2RlcyhkaWN0X3QgKmRpY3QpCit7CisgICAgZG5vZGVfdCAqbmlsID0gZGljdF9uaWwoZGljdCksICpyb290ID0gZGljdF9yb290KGRpY3QpOworICAgIGZyZWVfbm9kZXMoZGljdCwgcm9vdCwgbmlsKTsKKyAgICBkaWN0LT5ub2RlY291bnQgPSAwOworICAgIGRpY3QtPm5pbG5vZGUubGVmdCA9ICZkaWN0LT5uaWxub2RlOworICAgIGRpY3QtPm5pbG5vZGUucmlnaHQgPSAmZGljdC0+bmlsbm9kZTsKK30KKworI2lmZGVmIEUyRlNDS19OT1RVU0VECisvKgorICogT2Jzb2xlc2NlbnQgZnVuY3Rpb24sIGVxdWl2YWxlbnQgdG8gZGljdF9mcmVlX25vZGVzCisgKi8KK3ZvaWQgZGljdF9mcmVlKGRpY3RfdCAqZGljdCkKK3sKKyNpZmRlZiBLQVpMSUJfT0JTT0xFU0NFTlRfREVCVUcKKyAgICBhc3NlcnQgKCJjYWxsIHRvIG9ic29sZXNjZW50IGZ1bmN0aW9uIGRpY3RfZnJlZSgpIiAmJiAwKTsKKyNlbmRpZgorICAgIGRpY3RfZnJlZV9ub2RlcyhkaWN0KTsKK30KKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSBhIHVzZXItc3VwcGxpZWQgZGljdGlvbmFyeSBvYmplY3QuCisgKi8KKworZGljdF90ICpkaWN0X2luaXQoZGljdF90ICpkaWN0LCBkaWN0Y291bnRfdCBtYXhjb3VudCwgZGljdF9jb21wX3QgY29tcCkKK3sKKyAgICBkaWN0LT5jb21wYXJlID0gY29tcDsKKyAgICBkaWN0LT5hbGxvY25vZGUgPSBkbm9kZV9hbGxvYzsKKyAgICBkaWN0LT5mcmVlbm9kZSA9IGRub2RlX2ZyZWU7CisgICAgZGljdC0+Y29udGV4dCA9IE5VTEw7CisgICAgZGljdC0+bm9kZWNvdW50ID0gMDsKKyAgICBkaWN0LT5tYXhjb3VudCA9IG1heGNvdW50OworICAgIGRpY3QtPm5pbG5vZGUubGVmdCA9ICZkaWN0LT5uaWxub2RlOworICAgIGRpY3QtPm5pbG5vZGUucmlnaHQgPSAmZGljdC0+bmlsbm9kZTsKKyAgICBkaWN0LT5uaWxub2RlLnBhcmVudCA9ICZkaWN0LT5uaWxub2RlOworICAgIGRpY3QtPm5pbG5vZGUuY29sb3IgPSBkbm9kZV9ibGFjazsKKyAgICBkaWN0LT5kdXBlcyA9IDA7CisgICAgcmV0dXJuIGRpY3Q7Cit9CisKKyNpZmRlZiBFMkZTQ0tfTk9UVVNFRAorLyoKKyAqIEluaXRpYWxpemUgYSBkaWN0aW9uYXJ5IGluIHRoZSBsaWtlbmVzcyBvZiBhbm90aGVyIGRpY3Rpb25hcnkKKyAqLworCit2b2lkIGRpY3RfaW5pdF9saWtlKGRpY3RfdCAqZGljdCwgY29uc3QgZGljdF90ICp0ZW1wbGF0ZSkKK3sKKyAgICBkaWN0LT5jb21wYXJlID0gdGVtcGxhdGUtPmNvbXBhcmU7CisgICAgZGljdC0+YWxsb2Nub2RlID0gdGVtcGxhdGUtPmFsbG9jbm9kZTsKKyAgICBkaWN0LT5mcmVlbm9kZSA9IHRlbXBsYXRlLT5mcmVlbm9kZTsKKyAgICBkaWN0LT5jb250ZXh0ID0gdGVtcGxhdGUtPmNvbnRleHQ7CisgICAgZGljdC0+bm9kZWNvdW50ID0gMDsKKyAgICBkaWN0LT5tYXhjb3VudCA9IHRlbXBsYXRlLT5tYXhjb3VudDsKKyAgICBkaWN0LT5uaWxub2RlLmxlZnQgPSAmZGljdC0+bmlsbm9kZTsKKyAgICBkaWN0LT5uaWxub2RlLnJpZ2h0ID0gJmRpY3QtPm5pbG5vZGU7CisgICAgZGljdC0+bmlsbm9kZS5wYXJlbnQgPSAmZGljdC0+bmlsbm9kZTsKKyAgICBkaWN0LT5uaWxub2RlLmNvbG9yID0gZG5vZGVfYmxhY2s7CisgICAgZGljdC0+ZHVwZXMgPSB0ZW1wbGF0ZS0+ZHVwZXM7CisKKyAgICBhc3NlcnQgKGRpY3Rfc2ltaWxhcihkaWN0LCB0ZW1wbGF0ZSkpOworfQorCisvKgorICogUmVtb3ZlIGFsbCBub2RlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5ICh3aXRob3V0IGZyZWVpbmcgdGhlbSBpbiBhbnkgd2F5KS4KKyAqLworCitzdGF0aWMgdm9pZCBkaWN0X2NsZWFyKGRpY3RfdCAqZGljdCkKK3sKKyAgICBkaWN0LT5ub2RlY291bnQgPSAwOworICAgIGRpY3QtPm5pbG5vZGUubGVmdCA9ICZkaWN0LT5uaWxub2RlOworICAgIGRpY3QtPm5pbG5vZGUucmlnaHQgPSAmZGljdC0+bmlsbm9kZTsKKyAgICBkaWN0LT5uaWxub2RlLnBhcmVudCA9ICZkaWN0LT5uaWxub2RlOworICAgIGFzc2VydCAoZGljdC0+bmlsbm9kZS5jb2xvciA9PSBkbm9kZV9ibGFjayk7Cit9CisKKworLyoKKyAqIFZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gIFRoaXMgaXMgcHJvdmlkZWQgZm9yCisgKiBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFuZCBzaG91bGQgYmUgcGxhY2VkIGluIGFzc2VydCBzdGF0ZW1lbnRzLiAgIEp1c3QgYmVjYXVzZQorICogdGhpcyBmdW5jdGlvbiBzdWNjZWVkcyBkb2Vzbid0IG1lYW4gdGhhdCB0aGUgdHJlZSBpcyBub3QgY29ycnVwdC4gQ2VydGFpbgorICogY29ycnVwdGlvbnMgaW4gdGhlIHRyZWUgbWF5IHNpbXBseSBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IuCisgKi8KKworaW50IGRpY3RfdmVyaWZ5KGRpY3RfdCAqZGljdCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgZG5vZGVfdCAqbmlsID0gZGljdF9uaWwoZGljdCksICpyb290ID0gZGljdF9yb290KGRpY3QpOworCisgICAgLyogY2hlY2sgdGhhdCB0aGUgc2VudGluZWwgbm9kZSBhbmQgcm9vdCBub2RlIGFyZSBibGFjayAqLworICAgIGlmIChyb290LT5jb2xvciAhPSBkbm9kZV9ibGFjaykKKwlyZXR1cm4gMDsKKyAgICBpZiAobmlsLT5jb2xvciAhPSBkbm9kZV9ibGFjaykKKwlyZXR1cm4gMDsKKyAgICBpZiAobmlsLT5yaWdodCAhPSBuaWwpCisJcmV0dXJuIDA7CisgICAgLyogbmlsLT5sZWZ0IGlzIHRoZSByb290IG5vZGU7IGNoZWNrIHRoYXQgaXRzIHBhcmVudCBwb2ludGVyIGlzIG5pbCAqLworICAgIGlmIChuaWwtPmxlZnQtPnBhcmVudCAhPSBuaWwpCisJcmV0dXJuIDA7CisgICAgLyogcGVyZm9ybSBhIHdlYWsgdGVzdCB0aGF0IHRoZSB0cmVlIGlzIGEgYmluYXJ5IHNlYXJjaCB0cmVlICovCisgICAgaWYgKCF2ZXJpZnlfYmludHJlZShkaWN0KSkKKwlyZXR1cm4gMDsKKyAgICAvKiB2ZXJpZnkgdGhhdCB0aGUgdHJlZSBpcyBhIHJlZC1ibGFjayB0cmVlICovCisgICAgaWYgKCF2ZXJpZnlfcmVkYmxhY2sobmlsLCByb290KSkKKwlyZXR1cm4gMDsKKyAgICBpZiAodmVyaWZ5X25vZGVfY291bnQobmlsLCByb290KSAhPSBkaWN0X2NvdW50KGRpY3QpKQorCXJldHVybiAwOworI2VuZGlmCisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0d28gZGljdGlvbmFyaWVzIGFyZSBzaW1pbGFyOiBoYXZlIHRoZSBzYW1lIGNvbXBhcmlzb24gYW5kCisgKiBhbGxvY2F0b3IgZnVuY3Rpb25zLCBhbmQgc2FtZSBzdGF0dXMgYXMgdG8gd2hldGhlciBkdXBsaWNhdGVzIGFyZSBhbGxvd2VkLgorICovCisKK2ludCBkaWN0X3NpbWlsYXIoY29uc3QgZGljdF90ICpsZWZ0LCBjb25zdCBkaWN0X3QgKnJpZ2h0KQoreworICAgIGlmIChsZWZ0LT5jb21wYXJlICE9IHJpZ2h0LT5jb21wYXJlKQorCXJldHVybiAwOworCisgICAgaWYgKGxlZnQtPmFsbG9jbm9kZSAhPSByaWdodC0+YWxsb2Nub2RlKQorCXJldHVybiAwOworCisgICAgaWYgKGxlZnQtPmZyZWVub2RlICE9IHJpZ2h0LT5mcmVlbm9kZSkKKwlyZXR1cm4gMDsKKworICAgIGlmIChsZWZ0LT5jb250ZXh0ICE9IHJpZ2h0LT5jb250ZXh0KQorCXJldHVybiAwOworCisgICAgaWYgKGxlZnQtPmR1cGVzICE9IHJpZ2h0LT5kdXBlcykKKwlyZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorI2VuZGlmIC8qIEUyRlNDS19OT1RVU0VEICovCisKKy8qCisgKiBMb2NhdGUgYSBub2RlIGluIHRoZSBkaWN0aW9uYXJ5IGhhdmluZyB0aGUgZ2l2ZW4ga2V5LgorICogSWYgdGhlIG5vZGUgaXMgbm90IGZvdW5kLCBhIG51bGwgYSBwb2ludGVyIGlzIHJldHVybmVkIChyYXRoZXIgdGhhbgorICogYSBwb2ludGVyIHRoYXQgZGljdGlvbmFyeSdzIG5pbCBzZW50aW5lbCBub2RlKSwgb3RoZXJ3aXNlIGEgcG9pbnRlciB0byB0aGUKKyAqIGxvY2F0ZWQgbm9kZSBpcyByZXR1cm5lZC4KKyAqLworCitkbm9kZV90ICpkaWN0X2xvb2t1cChkaWN0X3QgKmRpY3QsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBkbm9kZV90ICpyb290ID0gZGljdF9yb290KGRpY3QpOworICAgIGRub2RlX3QgKm5pbCA9IGRpY3RfbmlsKGRpY3QpOworICAgIGRub2RlX3QgKnNhdmVkOworICAgIGludCByZXN1bHQ7CisKKyAgICAvKiBzaW1wbGUgYmluYXJ5IHNlYXJjaCBhZGFwdGVkIGZvciB0cmVlcyB0aGF0IGNvbnRhaW4gZHVwbGljYXRlIGtleXMgKi8KKworICAgIHdoaWxlIChyb290ICE9IG5pbCkgeworCXJlc3VsdCA9IGRpY3QtPmNvbXBhcmUoa2V5LCByb290LT5rZXkpOworCWlmIChyZXN1bHQgPCAwKQorCSAgICByb290ID0gcm9vdC0+bGVmdDsKKwllbHNlIGlmIChyZXN1bHQgPiAwKQorCSAgICByb290ID0gcm9vdC0+cmlnaHQ7CisJZWxzZSB7CisJICAgIGlmICghZGljdC0+ZHVwZXMpIHsJLyogbm8gZHVwbGljYXRlcywgcmV0dXJuIG1hdGNoCQkqLworCQlyZXR1cm4gcm9vdDsKKwkgICAgfSBlbHNlIHsJCS8qIGNvdWxkIGJlIGR1cGVzLCBmaW5kIGxlZnRtb3N0IG9uZQkqLworCQlkbyB7CisJCSAgICBzYXZlZCA9IHJvb3Q7CisJCSAgICByb290ID0gcm9vdC0+bGVmdDsKKwkJICAgIHdoaWxlIChyb290ICE9IG5pbCAmJiBkaWN0LT5jb21wYXJlKGtleSwgcm9vdC0+a2V5KSkKKwkJCXJvb3QgPSByb290LT5yaWdodDsKKwkJfSB3aGlsZSAocm9vdCAhPSBuaWwpOworCQlyZXR1cm4gc2F2ZWQ7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNpZmRlZiBFMkZTQ0tfTk9UVVNFRAorLyoKKyAqIExvb2sgZm9yIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdCBrZXkgdGhhdCBpcyBlcXVhbCB0byBvcgorICogZ3JlYXRlciB0aGFuIHRoZSBnaXZlbiBrZXkuICBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHJldHVybiBudWxsLgorICovCisKK2Rub2RlX3QgKmRpY3RfbG93ZXJfYm91bmQoZGljdF90ICpkaWN0LCBjb25zdCB2b2lkICprZXkpCit7CisgICAgZG5vZGVfdCAqcm9vdCA9IGRpY3Rfcm9vdChkaWN0KTsKKyAgICBkbm9kZV90ICpuaWwgPSBkaWN0X25pbChkaWN0KTsKKyAgICBkbm9kZV90ICp0ZW50YXRpdmUgPSAwOworCisgICAgd2hpbGUgKHJvb3QgIT0gbmlsKSB7CisJaW50IHJlc3VsdCA9IGRpY3QtPmNvbXBhcmUoa2V5LCByb290LT5rZXkpOworCisJaWYgKHJlc3VsdCA+IDApIHsKKwkgICAgcm9vdCA9IHJvb3QtPnJpZ2h0OworCX0gZWxzZSBpZiAocmVzdWx0IDwgMCkgeworCSAgICB0ZW50YXRpdmUgPSByb290OworCSAgICByb290ID0gcm9vdC0+bGVmdDsKKwl9IGVsc2UgeworCSAgICBpZiAoIWRpY3QtPmR1cGVzKSB7CisJICAgIAlyZXR1cm4gcm9vdDsKKwkgICAgfSBlbHNlIHsKKwkJdGVudGF0aXZlID0gcm9vdDsKKwkJcm9vdCA9IHJvb3QtPmxlZnQ7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgcmV0dXJuIHRlbnRhdGl2ZTsKK30KKworLyoKKyAqIExvb2sgZm9yIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdyZWF0ZXN0IGtleSB0aGF0IGlzIGVxdWFsIHRvIG9yCisgKiBsb3dlciB0aGFuIHRoZSBnaXZlbiBrZXkuICBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHJldHVybiBudWxsLgorICovCisKK2Rub2RlX3QgKmRpY3RfdXBwZXJfYm91bmQoZGljdF90ICpkaWN0LCBjb25zdCB2b2lkICprZXkpCit7CisgICAgZG5vZGVfdCAqcm9vdCA9IGRpY3Rfcm9vdChkaWN0KTsKKyAgICBkbm9kZV90ICpuaWwgPSBkaWN0X25pbChkaWN0KTsKKyAgICBkbm9kZV90ICp0ZW50YXRpdmUgPSAwOworCisgICAgd2hpbGUgKHJvb3QgIT0gbmlsKSB7CisJaW50IHJlc3VsdCA9IGRpY3QtPmNvbXBhcmUoa2V5LCByb290LT5rZXkpOworCisJaWYgKHJlc3VsdCA8IDApIHsKKwkgICAgcm9vdCA9IHJvb3QtPmxlZnQ7CisJfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7CisJICAgIHRlbnRhdGl2ZSA9IHJvb3Q7CisJICAgIHJvb3QgPSByb290LT5yaWdodDsKKwl9IGVsc2UgeworCSAgICBpZiAoIWRpY3QtPmR1cGVzKSB7CisJICAgIAlyZXR1cm4gcm9vdDsKKwkgICAgfSBlbHNlIHsKKwkJdGVudGF0aXZlID0gcm9vdDsKKwkJcm9vdCA9IHJvb3QtPnJpZ2h0OworCSAgICB9CisJfQorICAgIH0KKworICAgIHJldHVybiB0ZW50YXRpdmU7Cit9CisjZW5kaWYKKworLyoKKyAqIEluc2VydCBhIG5vZGUgaW50byB0aGUgZGljdGlvbmFyeS4gVGhlIG5vZGUgc2hvdWxkIGhhdmUgYmVlbgorICogaW5pdGlhbGl6ZWQgd2l0aCBhIGRhdGEgZmllbGQuIEFsbCBvdGhlciBmaWVsZHMgYXJlIGlnbm9yZWQuCisgKiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIGluc2VydCBpbnRvCisgKiBhIGRpY3Rpb25hcnkgdGhhdCBpcyBhbHJlYWR5IGZ1bGwgKGZvciB3aGljaCB0aGUgZGljdF9pc2Z1bGwoKQorICogZnVuY3Rpb24gcmV0dXJucyB0cnVlKS4KKyAqLworCit2b2lkIGRpY3RfaW5zZXJ0KGRpY3RfdCAqZGljdCwgZG5vZGVfdCAqbm9kZSwgY29uc3Qgdm9pZCAqa2V5KQoreworICAgIGRub2RlX3QgKndoZXJlID0gZGljdF9yb290KGRpY3QpLCAqbmlsID0gZGljdF9uaWwoZGljdCk7CisgICAgZG5vZGVfdCAqcGFyZW50ID0gbmlsLCAqdW5jbGUsICpncmFuZHBhOworICAgIGludCByZXN1bHQgPSAtMTsKKworICAgIG5vZGUtPmtleSA9IGtleTsKKworICAgIGFzc2VydCAoIWRpY3RfaXNmdWxsKGRpY3QpKTsKKyAgICBhc3NlcnQgKCFkaWN0X2NvbnRhaW5zKGRpY3QsIG5vZGUpKTsKKyAgICBhc3NlcnQgKCFkbm9kZV9pc19pbl9hX2RpY3Qobm9kZSkpOworCisgICAgLyogYmFzaWMgYmluYXJ5IHRyZWUgaW5zZXJ0ICovCisKKyAgICB3aGlsZSAod2hlcmUgIT0gbmlsKSB7CisJcGFyZW50ID0gd2hlcmU7CisJcmVzdWx0ID0gZGljdC0+Y29tcGFyZShrZXksIHdoZXJlLT5rZXkpOworCS8qIHRyYXAgYXR0ZW1wdHMgYXQgZHVwbGljYXRlIGtleSBpbnNlcnRpb24gdW5sZXNzIGl0J3MgZXhwbGljaXRseSBhbGxvd2VkICovCisJYXNzZXJ0IChkaWN0LT5kdXBlcyB8fCByZXN1bHQgIT0gMCk7CisJaWYgKHJlc3VsdCA8IDApCisJICAgIHdoZXJlID0gd2hlcmUtPmxlZnQ7CisJZWxzZQorCSAgICB3aGVyZSA9IHdoZXJlLT5yaWdodDsKKyAgICB9CisKKyAgICBhc3NlcnQgKHdoZXJlID09IG5pbCk7CisKKyAgICBpZiAocmVzdWx0IDwgMCkKKwlwYXJlbnQtPmxlZnQgPSBub2RlOworICAgIGVsc2UKKwlwYXJlbnQtPnJpZ2h0ID0gbm9kZTsKKworICAgIG5vZGUtPnBhcmVudCA9IHBhcmVudDsKKyAgICBub2RlLT5sZWZ0ID0gbmlsOworICAgIG5vZGUtPnJpZ2h0ID0gbmlsOworCisgICAgZGljdC0+bm9kZWNvdW50Kys7CisKKyAgICAvKiByZWQgYmxhY2sgYWRqdXN0bWVudHMgKi8KKworICAgIG5vZGUtPmNvbG9yID0gZG5vZGVfcmVkOworCisgICAgd2hpbGUgKHBhcmVudC0+Y29sb3IgPT0gZG5vZGVfcmVkKSB7CisJZ3JhbmRwYSA9IHBhcmVudC0+cGFyZW50OworCWlmIChwYXJlbnQgPT0gZ3JhbmRwYS0+bGVmdCkgeworCSAgICB1bmNsZSA9IGdyYW5kcGEtPnJpZ2h0OworCSAgICBpZiAodW5jbGUtPmNvbG9yID09IGRub2RlX3JlZCkgewkvKiByZWQgcGFyZW50LCByZWQgdW5jbGUgKi8KKwkJcGFyZW50LT5jb2xvciA9IGRub2RlX2JsYWNrOworCQl1bmNsZS0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJZ3JhbmRwYS0+Y29sb3IgPSBkbm9kZV9yZWQ7CisJCW5vZGUgPSBncmFuZHBhOworCQlwYXJlbnQgPSBncmFuZHBhLT5wYXJlbnQ7CisJICAgIH0gZWxzZSB7CQkJCS8qIHJlZCBwYXJlbnQsIGJsYWNrIHVuY2xlICovCisJICAgIAlpZiAobm9kZSA9PSBwYXJlbnQtPnJpZ2h0KSB7CisJCSAgICByb3RhdGVfbGVmdChwYXJlbnQpOworCQkgICAgcGFyZW50ID0gbm9kZTsKKwkJICAgIGFzc2VydCAoZ3JhbmRwYSA9PSBwYXJlbnQtPnBhcmVudCk7CisJCSAgICAvKiByb3RhdGlvbiBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQgcHJlc2VydmVzIGdyYW5kcGEgKi8KKwkJfQorCQlwYXJlbnQtPmNvbG9yID0gZG5vZGVfYmxhY2s7CisJCWdyYW5kcGEtPmNvbG9yID0gZG5vZGVfcmVkOworCQlyb3RhdGVfcmlnaHQoZ3JhbmRwYSk7CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIHsgCS8qIHN5bW1ldHJpYyBjYXNlczogcGFyZW50ID09IHBhcmVudC0+cGFyZW50LT5yaWdodCAqLworCSAgICB1bmNsZSA9IGdyYW5kcGEtPmxlZnQ7CisJICAgIGlmICh1bmNsZS0+Y29sb3IgPT0gZG5vZGVfcmVkKSB7CisJCXBhcmVudC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJdW5jbGUtPmNvbG9yID0gZG5vZGVfYmxhY2s7CisJCWdyYW5kcGEtPmNvbG9yID0gZG5vZGVfcmVkOworCQlub2RlID0gZ3JhbmRwYTsKKwkJcGFyZW50ID0gZ3JhbmRwYS0+cGFyZW50OworCSAgICB9IGVsc2UgeworCSAgICAJaWYgKG5vZGUgPT0gcGFyZW50LT5sZWZ0KSB7CisJCSAgICByb3RhdGVfcmlnaHQocGFyZW50KTsKKwkJICAgIHBhcmVudCA9IG5vZGU7CisJCSAgICBhc3NlcnQgKGdyYW5kcGEgPT0gcGFyZW50LT5wYXJlbnQpOworCQl9CisJCXBhcmVudC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJZ3JhbmRwYS0+Y29sb3IgPSBkbm9kZV9yZWQ7CisJCXJvdGF0ZV9sZWZ0KGdyYW5kcGEpOworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgICBkaWN0X3Jvb3QoZGljdCktPmNvbG9yID0gZG5vZGVfYmxhY2s7CisKKyAgICBhc3NlcnQgKGRpY3RfdmVyaWZ5KGRpY3QpKTsKK30KKworI2lmZGVmIEUyRlNDS19OT1RVU0VECisvKgorICogRGVsZXRlIHRoZSBnaXZlbiBub2RlIGZyb20gdGhlIGRpY3Rpb25hcnkuIElmIHRoZSBnaXZlbiBub2RlIGRvZXMgbm90IGJlbG9uZworICogdG8gdGhlIGdpdmVuIGRpY3Rpb25hcnksIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRzLiAgQSBwb2ludGVyIHRvIHRoZQorICogZGVsZXRlZCBub2RlIGlzIHJldHVybmVkLgorICovCisKK2Rub2RlX3QgKmRpY3RfZGVsZXRlKGRpY3RfdCAqZGljdCwgZG5vZGVfdCAqZGVsZXRlKQoreworICAgIGRub2RlX3QgKm5pbCA9IGRpY3RfbmlsKGRpY3QpLCAqY2hpbGQsICpkZWxwYXJlbnQgPSBkZWxldGUtPnBhcmVudDsKKworICAgIC8qIGJhc2ljIGRlbGV0aW9uICovCisKKyAgICBhc3NlcnQgKCFkaWN0X2lzZW1wdHkoZGljdCkpOworICAgIGFzc2VydCAoZGljdF9jb250YWlucyhkaWN0LCBkZWxldGUpKTsKKworICAgIC8qCisgICAgICogSWYgdGhlIG5vZGUgYmVpbmcgZGVsZXRlZCBoYXMgdHdvIGNoaWxkcmVuLCB0aGVuIHdlIHJlcGxhY2UgaXQgd2l0aCBpdHMKKyAgICAgKiBzdWNjZXNzb3IgKGkuZS4gdGhlIGxlZnRtb3N0IG5vZGUgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuKSBCeSBkb2luZyB0aGlzLAorICAgICAqIHdlIGF2b2lkIHRoZSB0cmFkaXRpb25hbCBhbGdvcml0aG0gdW5kZXIgd2hpY2ggdGhlIHN1Y2Nlc3NvcidzIGtleSBhbmQKKyAgICAgKiB2YWx1ZSAqb25seSogbW92ZSB0byB0aGUgZGVsZXRlZCBub2RlIGFuZCB0aGUgc3VjY2Vzc29yIGlzIHNwbGljZWQgb3V0CisgICAgICogZnJvbSB0aGUgdHJlZS4gV2UgY2Fubm90IHVzZSB0aGlzIGFwcHJvYWNoIGJlY2F1c2UgdGhlIHVzZXIgbWF5IGhvbGQKKyAgICAgKiBwb2ludGVycyB0byB0aGUgc3VjY2Vzc29yLCBvciBub2RlcyBtYXkgYmUgaW5leHRyaWNhYmx5IHRpZWQgdG8gc29tZQorICAgICAqIG90aGVyIHN0cnVjdHVyZXMgYnkgd2F5IG9mIGVtYmVkZGluZywgZXRjLiBTbyB3ZSBtdXN0IHNwbGljZSBvdXQgdGhlCisgICAgICogbm9kZSB3ZSBhcmUgZ2l2ZW4sIG5vdCBzb21lIG90aGVyIG5vZGUsIGFuZCBtdXN0IG5vdCBtb3ZlIGNvbnRlbnRzIGZyb20KKyAgICAgKiBvbmUgbm9kZSB0byBhbm90aGVyIGJlaGluZCB0aGUgdXNlcidzIGJhY2suCisgICAgICovCisKKyAgICBpZiAoZGVsZXRlLT5sZWZ0ICE9IG5pbCAmJiBkZWxldGUtPnJpZ2h0ICE9IG5pbCkgeworCWRub2RlX3QgKm5leHQgPSBkaWN0X25leHQoZGljdCwgZGVsZXRlKTsKKwlkbm9kZV90ICpuZXh0cGFyZW50ID0gbmV4dC0+cGFyZW50OworCWRub2RlX2NvbG9yX3QgbmV4dGNvbG9yID0gbmV4dC0+Y29sb3I7CisKKwlhc3NlcnQgKG5leHQgIT0gbmlsKTsKKwlhc3NlcnQgKG5leHQtPnBhcmVudCAhPSBuaWwpOworCWFzc2VydCAobmV4dC0+bGVmdCA9PSBuaWwpOworCisJLyoKKwkgKiBGaXJzdCwgc3BsaWNlIG91dCB0aGUgc3VjY2Vzc29yIGZyb20gdGhlIHRyZWUgY29tcGxldGVseSwgYnkKKwkgKiBtb3ZpbmcgdXAgaXRzIHJpZ2h0IGNoaWxkIGludG8gaXRzIHBsYWNlLgorCSAqLworCisJY2hpbGQgPSBuZXh0LT5yaWdodDsKKwljaGlsZC0+cGFyZW50ID0gbmV4dHBhcmVudDsKKworCWlmIChuZXh0cGFyZW50LT5sZWZ0ID09IG5leHQpIHsKKwkgICAgbmV4dHBhcmVudC0+bGVmdCA9IGNoaWxkOworCX0gZWxzZSB7CisJICAgIGFzc2VydCAobmV4dHBhcmVudC0+cmlnaHQgPT0gbmV4dCk7CisJICAgIG5leHRwYXJlbnQtPnJpZ2h0ID0gY2hpbGQ7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB0aGUgc3VjY2Vzc29yIGhhcyBiZWVuIGV4dHJpY2F0ZWQgZnJvbSB0aGUgdHJlZSwgaW5zdGFsbCBpdAorCSAqIGluIHBsYWNlIG9mIHRoZSBub2RlIHRoYXQgd2Ugd2FudCBkZWxldGVkLgorCSAqLworCisJbmV4dC0+cGFyZW50ID0gZGVscGFyZW50OworCW5leHQtPmxlZnQgPSBkZWxldGUtPmxlZnQ7CisJbmV4dC0+cmlnaHQgPSBkZWxldGUtPnJpZ2h0OworCW5leHQtPmxlZnQtPnBhcmVudCA9IG5leHQ7CisJbmV4dC0+cmlnaHQtPnBhcmVudCA9IG5leHQ7CisJbmV4dC0+Y29sb3IgPSBkZWxldGUtPmNvbG9yOworCWRlbGV0ZS0+Y29sb3IgPSBuZXh0Y29sb3I7CisKKwlpZiAoZGVscGFyZW50LT5sZWZ0ID09IGRlbGV0ZSkgeworCSAgICBkZWxwYXJlbnQtPmxlZnQgPSBuZXh0OworCX0gZWxzZSB7CisJICAgIGFzc2VydCAoZGVscGFyZW50LT5yaWdodCA9PSBkZWxldGUpOworCSAgICBkZWxwYXJlbnQtPnJpZ2h0ID0gbmV4dDsKKwl9CisKKyAgICB9IGVsc2UgeworCWFzc2VydCAoZGVsZXRlICE9IG5pbCk7CisJYXNzZXJ0IChkZWxldGUtPmxlZnQgPT0gbmlsIHx8IGRlbGV0ZS0+cmlnaHQgPT0gbmlsKTsKKworCWNoaWxkID0gKGRlbGV0ZS0+bGVmdCAhPSBuaWwpID8gZGVsZXRlLT5sZWZ0IDogZGVsZXRlLT5yaWdodDsKKworCWNoaWxkLT5wYXJlbnQgPSBkZWxwYXJlbnQgPSBkZWxldGUtPnBhcmVudDsKKworCWlmIChkZWxldGUgPT0gZGVscGFyZW50LT5sZWZ0KSB7CisJICAgIGRlbHBhcmVudC0+bGVmdCA9IGNoaWxkOworCX0gZWxzZSB7CisJICAgIGFzc2VydCAoZGVsZXRlID09IGRlbHBhcmVudC0+cmlnaHQpOworCSAgICBkZWxwYXJlbnQtPnJpZ2h0ID0gY2hpbGQ7CisJfQorICAgIH0KKworICAgIGRlbGV0ZS0+cGFyZW50ID0gTlVMTDsKKyAgICBkZWxldGUtPnJpZ2h0ID0gTlVMTDsKKyAgICBkZWxldGUtPmxlZnQgPSBOVUxMOworCisgICAgZGljdC0+bm9kZWNvdW50LS07CisKKyAgICBhc3NlcnQgKHZlcmlmeV9iaW50cmVlKGRpY3QpKTsKKworICAgIC8qIHJlZC1ibGFjayBhZGp1c3RtZW50cyAqLworCisgICAgaWYgKGRlbGV0ZS0+Y29sb3IgPT0gZG5vZGVfYmxhY2spIHsKKwlkbm9kZV90ICpwYXJlbnQsICpzaXN0ZXI7CisKKwlkaWN0X3Jvb3QoZGljdCktPmNvbG9yID0gZG5vZGVfcmVkOworCisJd2hpbGUgKGNoaWxkLT5jb2xvciA9PSBkbm9kZV9ibGFjaykgeworCSAgICBwYXJlbnQgPSBjaGlsZC0+cGFyZW50OworCSAgICBpZiAoY2hpbGQgPT0gcGFyZW50LT5sZWZ0KSB7CisJCXNpc3RlciA9IHBhcmVudC0+cmlnaHQ7CisJCWFzc2VydCAoc2lzdGVyICE9IG5pbCk7CisJCWlmIChzaXN0ZXItPmNvbG9yID09IGRub2RlX3JlZCkgeworCQkgICAgc2lzdGVyLT5jb2xvciA9IGRub2RlX2JsYWNrOworCQkgICAgcGFyZW50LT5jb2xvciA9IGRub2RlX3JlZDsKKwkJICAgIHJvdGF0ZV9sZWZ0KHBhcmVudCk7CisJCSAgICBzaXN0ZXIgPSBwYXJlbnQtPnJpZ2h0OworCQkgICAgYXNzZXJ0IChzaXN0ZXIgIT0gbmlsKTsKKwkJfQorCQlpZiAoc2lzdGVyLT5sZWZ0LT5jb2xvciA9PSBkbm9kZV9ibGFjaworCQkJJiYgc2lzdGVyLT5yaWdodC0+Y29sb3IgPT0gZG5vZGVfYmxhY2spIHsKKwkJICAgIHNpc3Rlci0+Y29sb3IgPSBkbm9kZV9yZWQ7CisJCSAgICBjaGlsZCA9IHBhcmVudDsKKwkJfSBlbHNlIHsKKwkJICAgIGlmIChzaXN0ZXItPnJpZ2h0LT5jb2xvciA9PSBkbm9kZV9ibGFjaykgeworCQkJYXNzZXJ0IChzaXN0ZXItPmxlZnQtPmNvbG9yID09IGRub2RlX3JlZCk7CisJCQlzaXN0ZXItPmxlZnQtPmNvbG9yID0gZG5vZGVfYmxhY2s7CisJCQlzaXN0ZXItPmNvbG9yID0gZG5vZGVfcmVkOworCQkJcm90YXRlX3JpZ2h0KHNpc3Rlcik7CisJCQlzaXN0ZXIgPSBwYXJlbnQtPnJpZ2h0OworCQkJYXNzZXJ0IChzaXN0ZXIgIT0gbmlsKTsKKwkJICAgIH0KKwkJICAgIHNpc3Rlci0+Y29sb3IgPSBwYXJlbnQtPmNvbG9yOworCQkgICAgc2lzdGVyLT5yaWdodC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJICAgIHBhcmVudC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJICAgIHJvdGF0ZV9sZWZ0KHBhcmVudCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9IGVsc2UgewkvKiBzeW1tZXRyaWMgY2FzZTogY2hpbGQgPT0gY2hpbGQtPnBhcmVudC0+cmlnaHQgKi8KKwkJYXNzZXJ0IChjaGlsZCA9PSBwYXJlbnQtPnJpZ2h0KTsKKwkJc2lzdGVyID0gcGFyZW50LT5sZWZ0OworCQlhc3NlcnQgKHNpc3RlciAhPSBuaWwpOworCQlpZiAoc2lzdGVyLT5jb2xvciA9PSBkbm9kZV9yZWQpIHsKKwkJICAgIHNpc3Rlci0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJICAgIHBhcmVudC0+Y29sb3IgPSBkbm9kZV9yZWQ7CisJCSAgICByb3RhdGVfcmlnaHQocGFyZW50KTsKKwkJICAgIHNpc3RlciA9IHBhcmVudC0+bGVmdDsKKwkJICAgIGFzc2VydCAoc2lzdGVyICE9IG5pbCk7CisJCX0KKwkJaWYgKHNpc3Rlci0+cmlnaHQtPmNvbG9yID09IGRub2RlX2JsYWNrCisJCQkmJiBzaXN0ZXItPmxlZnQtPmNvbG9yID09IGRub2RlX2JsYWNrKSB7CisJCSAgICBzaXN0ZXItPmNvbG9yID0gZG5vZGVfcmVkOworCQkgICAgY2hpbGQgPSBwYXJlbnQ7CisJCX0gZWxzZSB7CisJCSAgICBpZiAoc2lzdGVyLT5sZWZ0LT5jb2xvciA9PSBkbm9kZV9ibGFjaykgeworCQkJYXNzZXJ0IChzaXN0ZXItPnJpZ2h0LT5jb2xvciA9PSBkbm9kZV9yZWQpOworCQkJc2lzdGVyLT5yaWdodC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKwkJCXNpc3Rlci0+Y29sb3IgPSBkbm9kZV9yZWQ7CisJCQlyb3RhdGVfbGVmdChzaXN0ZXIpOworCQkJc2lzdGVyID0gcGFyZW50LT5sZWZ0OworCQkJYXNzZXJ0IChzaXN0ZXIgIT0gbmlsKTsKKwkJICAgIH0KKwkJICAgIHNpc3Rlci0+Y29sb3IgPSBwYXJlbnQtPmNvbG9yOworCQkgICAgc2lzdGVyLT5sZWZ0LT5jb2xvciA9IGRub2RlX2JsYWNrOworCQkgICAgcGFyZW50LT5jb2xvciA9IGRub2RlX2JsYWNrOworCQkgICAgcm90YXRlX3JpZ2h0KHBhcmVudCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorCisJY2hpbGQtPmNvbG9yID0gZG5vZGVfYmxhY2s7CisJZGljdF9yb290KGRpY3QpLT5jb2xvciA9IGRub2RlX2JsYWNrOworICAgIH0KKworICAgIGFzc2VydCAoZGljdF92ZXJpZnkoZGljdCkpOworCisgICAgcmV0dXJuIGRlbGV0ZTsKK30KKyNlbmRpZiAvKiBFMkZTQ0tfTk9UVVNFRCAqLworCisvKgorICogQWxsb2NhdGUgYSBub2RlIHVzaW5nIHRoZSBkaWN0aW9uYXJ5J3MgYWxsb2NhdG9yIHJvdXRpbmUsIGdpdmUgaXQKKyAqIHRoZSBkYXRhIGl0ZW0uCisgKi8KKworaW50IGRpY3RfYWxsb2NfaW5zZXJ0KGRpY3RfdCAqZGljdCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhKQoreworICAgIGRub2RlX3QgKm5vZGUgPSBkaWN0LT5hbGxvY25vZGUoZGljdC0+Y29udGV4dCk7CisKKyAgICBpZiAobm9kZSkgeworCWRub2RlX2luaXQobm9kZSwgZGF0YSk7CisJZGljdF9pbnNlcnQoZGljdCwgbm9kZSwga2V5KTsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBFMkZTQ0tfTk9UVVNFRAordm9pZCBkaWN0X2RlbGV0ZV9mcmVlKGRpY3RfdCAqZGljdCwgZG5vZGVfdCAqbm9kZSkKK3sKKyAgICBkaWN0X2RlbGV0ZShkaWN0LCBub2RlKTsKKyAgICBkaWN0LT5mcmVlbm9kZShub2RlLCBkaWN0LT5jb250ZXh0KTsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRoZSBub2RlIHdpdGggdGhlIGxvd2VzdCAobGVmdG1vc3QpIGtleS4gSWYgdGhlIGRpY3Rpb25hcnkgaXMgZW1wdHkKKyAqICh0aGF0IGlzLCBkaWN0X2lzZW1wdHkoZGljdCkgcmV0dXJucyAxKSBhIG51bGwgcG9pbnRlciBpcyByZXR1cm5lZC4KKyAqLworCitkbm9kZV90ICpkaWN0X2ZpcnN0KGRpY3RfdCAqZGljdCkKK3sKKyAgICBkbm9kZV90ICpuaWwgPSBkaWN0X25pbChkaWN0KSwgKnJvb3QgPSBkaWN0X3Jvb3QoZGljdCksICpsZWZ0OworCisgICAgaWYgKHJvb3QgIT0gbmlsKQorCXdoaWxlICgobGVmdCA9IHJvb3QtPmxlZnQpICE9IG5pbCkKKwkgICAgcm9vdCA9IGxlZnQ7CisKKyAgICByZXR1cm4gKHJvb3QgPT0gbmlsKSA/IE5VTEwgOiByb290OworfQorCisvKgorICogUmV0dXJuIHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgKHJpZ2h0bW9zdCkga2V5LiBJZiB0aGUgZGljdGlvbmFyeSBpcyBlbXB0eQorICogKHRoYXQgaXMsIGRpY3RfaXNlbXB0eShkaWN0KSByZXR1cm5zIDEpIGEgbnVsbCBwb2ludGVyIGlzIHJldHVybmVkLgorICovCisKK2Rub2RlX3QgKmRpY3RfbGFzdChkaWN0X3QgKmRpY3QpCit7CisgICAgZG5vZGVfdCAqbmlsID0gZGljdF9uaWwoZGljdCksICpyb290ID0gZGljdF9yb290KGRpY3QpLCAqcmlnaHQ7CisKKyAgICBpZiAocm9vdCAhPSBuaWwpCisJd2hpbGUgKChyaWdodCA9IHJvb3QtPnJpZ2h0KSAhPSBuaWwpCisJICAgIHJvb3QgPSByaWdodDsKKworICAgIHJldHVybiAocm9vdCA9PSBuaWwpID8gTlVMTCA6IHJvb3Q7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG5vZGUncyBzdWNjZXNzb3Igbm9kZS0tLXRoZSBub2RlIHdoaWNoIGhhcyB0aGUKKyAqIG5leHQga2V5IGluIHRoZSB0aGUgbGVmdCB0byByaWdodCBvcmRlcmluZy4gSWYgdGhlIG5vZGUgaGFzCisgKiBubyBzdWNjZXNzb3IsIGEgbnVsbCBwb2ludGVyIGlzIHJldHVybmVkIHJhdGhlciB0aGFuIGEgcG9pbnRlciB0bworICogdGhlIG5pbCBub2RlLgorICovCisKK2Rub2RlX3QgKmRpY3RfbmV4dChkaWN0X3QgKmRpY3QsIGRub2RlX3QgKmN1cnIpCit7CisgICAgZG5vZGVfdCAqbmlsID0gZGljdF9uaWwoZGljdCksICpwYXJlbnQsICpsZWZ0OworCisgICAgaWYgKGN1cnItPnJpZ2h0ICE9IG5pbCkgeworCWN1cnIgPSBjdXJyLT5yaWdodDsKKwl3aGlsZSAoKGxlZnQgPSBjdXJyLT5sZWZ0KSAhPSBuaWwpCisJICAgIGN1cnIgPSBsZWZ0OworCXJldHVybiBjdXJyOworICAgIH0KKworICAgIHBhcmVudCA9IGN1cnItPnBhcmVudDsKKworICAgIHdoaWxlIChwYXJlbnQgIT0gbmlsICYmIGN1cnIgPT0gcGFyZW50LT5yaWdodCkgeworCWN1cnIgPSBwYXJlbnQ7CisJcGFyZW50ID0gY3Vyci0+cGFyZW50OworICAgIH0KKworICAgIHJldHVybiAocGFyZW50ID09IG5pbCkgPyBOVUxMIDogcGFyZW50OworfQorCisvKgorICogUmV0dXJuIHRoZSBnaXZlbiBub2RlJ3MgcHJlZGVjZXNzb3IsIGluIHRoZSBrZXkgb3JkZXIuCisgKiBUaGUgbmlsIHNlbnRpbmVsIG5vZGUgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXMgbm8gcHJlZGVjZXNzb3IuCisgKi8KKworZG5vZGVfdCAqZGljdF9wcmV2KGRpY3RfdCAqZGljdCwgZG5vZGVfdCAqY3VycikKK3sKKyAgICBkbm9kZV90ICpuaWwgPSBkaWN0X25pbChkaWN0KSwgKnBhcmVudCwgKnJpZ2h0OworCisgICAgaWYgKGN1cnItPmxlZnQgIT0gbmlsKSB7CisJY3VyciA9IGN1cnItPmxlZnQ7CisJd2hpbGUgKChyaWdodCA9IGN1cnItPnJpZ2h0KSAhPSBuaWwpCisJICAgIGN1cnIgPSByaWdodDsKKwlyZXR1cm4gY3VycjsKKyAgICB9CisKKyAgICBwYXJlbnQgPSBjdXJyLT5wYXJlbnQ7CisKKyAgICB3aGlsZSAocGFyZW50ICE9IG5pbCAmJiBjdXJyID09IHBhcmVudC0+bGVmdCkgeworCWN1cnIgPSBwYXJlbnQ7CisJcGFyZW50ID0gY3Vyci0+cGFyZW50OworICAgIH0KKworICAgIHJldHVybiAocGFyZW50ID09IG5pbCkgPyBOVUxMIDogcGFyZW50OworfQorCit2b2lkIGRpY3RfYWxsb3dfZHVwZXMoZGljdF90ICpkaWN0KQoreworICAgIGRpY3QtPmR1cGVzID0gMTsKK30KKworI3VuZGVmIGRpY3RfY291bnQKKyN1bmRlZiBkaWN0X2lzZW1wdHkKKyN1bmRlZiBkaWN0X2lzZnVsbAorI3VuZGVmIGRub2RlX2dldAorI3VuZGVmIGRub2RlX3B1dAorI3VuZGVmIGRub2RlX2dldGtleQorCitkaWN0Y291bnRfdCBkaWN0X2NvdW50KGRpY3RfdCAqZGljdCkKK3sKKyAgICByZXR1cm4gZGljdC0+bm9kZWNvdW50OworfQorCitpbnQgZGljdF9pc2VtcHR5KGRpY3RfdCAqZGljdCkKK3sKKyAgICByZXR1cm4gZGljdC0+bm9kZWNvdW50ID09IDA7Cit9CisKK2ludCBkaWN0X2lzZnVsbChkaWN0X3QgKmRpY3QpCit7CisgICAgcmV0dXJuIGRpY3QtPm5vZGVjb3VudCA9PSBkaWN0LT5tYXhjb3VudDsKK30KKworaW50IGRpY3RfY29udGFpbnMoZGljdF90ICpkaWN0LCBkbm9kZV90ICpub2RlKQoreworICAgIHJldHVybiB2ZXJpZnlfZGljdF9oYXNfbm9kZShkaWN0X25pbChkaWN0KSwgZGljdF9yb290KGRpY3QpLCBub2RlKTsKK30KKworc3RhdGljIGRub2RlX3QgKmRub2RlX2FsbG9jKHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZW9mICpkbm9kZV9hbGxvYyhOVUxMKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRub2RlX2ZyZWUoZG5vZGVfdCAqbm9kZSwgdm9pZCAqY29udGV4dCBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisgICAgZnJlZShub2RlKTsKK30KKworZG5vZGVfdCAqZG5vZGVfY3JlYXRlKHZvaWQgKmRhdGEpCit7CisgICAgZG5vZGVfdCAqbmV3ID0gbWFsbG9jKHNpemVvZiAqbmV3KTsKKyAgICBpZiAobmV3KSB7CisJbmV3LT5kYXRhID0gZGF0YTsKKwluZXctPnBhcmVudCA9IE5VTEw7CisJbmV3LT5sZWZ0ID0gTlVMTDsKKwluZXctPnJpZ2h0ID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG5ldzsKK30KKworZG5vZGVfdCAqZG5vZGVfaW5pdChkbm9kZV90ICpkbm9kZSwgdm9pZCAqZGF0YSkKK3sKKyAgICBkbm9kZS0+ZGF0YSA9IGRhdGE7CisgICAgZG5vZGUtPnBhcmVudCA9IE5VTEw7CisgICAgZG5vZGUtPmxlZnQgPSBOVUxMOworICAgIGRub2RlLT5yaWdodCA9IE5VTEw7CisgICAgcmV0dXJuIGRub2RlOworfQorCit2b2lkIGRub2RlX2Rlc3Ryb3koZG5vZGVfdCAqZG5vZGUpCit7CisgICAgYXNzZXJ0ICghZG5vZGVfaXNfaW5fYV9kaWN0KGRub2RlKSk7CisgICAgZnJlZShkbm9kZSk7Cit9CisKK3ZvaWQgKmRub2RlX2dldChkbm9kZV90ICpkbm9kZSkKK3sKKyAgICByZXR1cm4gZG5vZGUtPmRhdGE7Cit9CisKK2NvbnN0IHZvaWQgKmRub2RlX2dldGtleShkbm9kZV90ICpkbm9kZSkKK3sKKyAgICByZXR1cm4gZG5vZGUtPmtleTsKK30KKworI2lmZGVmIEUyRlNDS19OT1RVU0VECit2b2lkIGRub2RlX3B1dChkbm9kZV90ICpkbm9kZSwgdm9pZCAqZGF0YSkKK3sKKyAgICBkbm9kZS0+ZGF0YSA9IGRhdGE7Cit9CisKK2ludCBkbm9kZV9pc19pbl9hX2RpY3QoZG5vZGVfdCAqZG5vZGUpCit7CisgICAgcmV0dXJuIChkbm9kZS0+cGFyZW50ICYmIGRub2RlLT5sZWZ0ICYmIGRub2RlLT5yaWdodCk7Cit9CisKK3ZvaWQgZGljdF9wcm9jZXNzKGRpY3RfdCAqZGljdCwgdm9pZCAqY29udGV4dCwgZG5vZGVfcHJvY2Vzc190IGZ1bmN0aW9uKQoreworICAgIGRub2RlX3QgKm5vZGUgPSBkaWN0X2ZpcnN0KGRpY3QpLCAqbmV4dDsKKworICAgIHdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkvKiBjaGVjayBmb3IgY2FsbGJhY2sgZnVuY3Rpb24gZGVsZXRpbmcJKi8KKwkvKiB0aGUgbmV4dCBub2RlIGZyb20gdW5kZXIgdXMJCSovCisJYXNzZXJ0IChkaWN0X2NvbnRhaW5zKGRpY3QsIG5vZGUpKTsKKwluZXh0ID0gZGljdF9uZXh0KGRpY3QsIG5vZGUpOworCWZ1bmN0aW9uKGRpY3QsIG5vZGUsIGNvbnRleHQpOworCW5vZGUgPSBuZXh0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9hZF9iZWdpbl9pbnRlcm5hbChkaWN0X2xvYWRfdCAqbG9hZCwgZGljdF90ICpkaWN0KQoreworICAgIGxvYWQtPmRpY3RwdHIgPSBkaWN0OworICAgIGxvYWQtPm5pbG5vZGUubGVmdCA9ICZsb2FkLT5uaWxub2RlOworICAgIGxvYWQtPm5pbG5vZGUucmlnaHQgPSAmbG9hZC0+bmlsbm9kZTsKK30KKwordm9pZCBkaWN0X2xvYWRfYmVnaW4oZGljdF9sb2FkX3QgKmxvYWQsIGRpY3RfdCAqZGljdCkKK3sKKyAgICBhc3NlcnQgKGRpY3RfaXNlbXB0eShkaWN0KSk7CisgICAgbG9hZF9iZWdpbl9pbnRlcm5hbChsb2FkLCBkaWN0KTsKK30KKwordm9pZCBkaWN0X2xvYWRfbmV4dChkaWN0X2xvYWRfdCAqbG9hZCwgZG5vZGVfdCAqbmV3bm9kZSwgY29uc3Qgdm9pZCAqa2V5KQoreworICAgIGRpY3RfdCAqZGljdCA9IGxvYWQtPmRpY3RwdHI7CisgICAgZG5vZGVfdCAqbmlsID0gJmxvYWQtPm5pbG5vZGU7CisKKyAgICBhc3NlcnQgKCFkbm9kZV9pc19pbl9hX2RpY3QobmV3bm9kZSkpOworICAgIGFzc2VydCAoZGljdC0+bm9kZWNvdW50IDwgZGljdC0+bWF4Y291bnQpOworCisjaWZuZGVmIE5ERUJVRworICAgIGlmIChkaWN0LT5ub2RlY291bnQgPiAwKSB7CisJaWYgKGRpY3QtPmR1cGVzKQorCSAgICBhc3NlcnQgKGRpY3QtPmNvbXBhcmUobmlsLT5sZWZ0LT5rZXksIGtleSkgPD0gMCk7CisJZWxzZQorCSAgICBhc3NlcnQgKGRpY3QtPmNvbXBhcmUobmlsLT5sZWZ0LT5rZXksIGtleSkgPCAwKTsKKyAgICB9CisjZW5kaWYKKworICAgIG5ld25vZGUtPmtleSA9IGtleTsKKyAgICBuaWwtPnJpZ2h0LT5sZWZ0ID0gbmV3bm9kZTsKKyAgICBuaWwtPnJpZ2h0ID0gbmV3bm9kZTsKKyAgICBuZXdub2RlLT5sZWZ0ID0gbmlsOworICAgIGRpY3QtPm5vZGVjb3VudCsrOworfQorCit2b2lkIGRpY3RfbG9hZF9lbmQoZGljdF9sb2FkX3QgKmxvYWQpCit7CisgICAgZGljdF90ICpkaWN0ID0gbG9hZC0+ZGljdHB0cjsKKyAgICBkbm9kZV90ICp0cmVlW0RJQ1RfREVQVEhfTUFYXSA9IHsgMCB9OworICAgIGRub2RlX3QgKmN1cnIsICpkaWN0bmlsID0gZGljdF9uaWwoZGljdCksICpsb2FkbmlsID0gJmxvYWQtPm5pbG5vZGUsICpuZXh0OworICAgIGRub2RlX3QgKmNvbXBsZXRlID0gMDsKKyAgICBkaWN0Y291bnRfdCBmdWxsY291bnQgPSBESUNUQ09VTlRfVF9NQVgsIG5vZGVjb3VudCA9IGRpY3QtPm5vZGVjb3VudDsKKyAgICBkaWN0Y291bnRfdCBib3Ryb3djb3VudDsKKyAgICB1bnNpZ25lZCBiYXNlbGV2ZWwgPSAwLCBsZXZlbCA9IDAsIGk7CisKKyAgICBhc3NlcnQgKGRub2RlX3JlZCA9PSAwICYmIGRub2RlX2JsYWNrID09IDEpOworCisgICAgd2hpbGUgKGZ1bGxjb3VudCA+PSBub2RlY291bnQgJiYgZnVsbGNvdW50KQorCWZ1bGxjb3VudCA+Pj0gMTsKKworICAgIGJvdHJvd2NvdW50ID0gbm9kZWNvdW50IC0gZnVsbGNvdW50OworCisgICAgZm9yIChjdXJyID0gbG9hZG5pbC0+bGVmdDsgY3VyciAhPSBsb2FkbmlsOyBjdXJyID0gbmV4dCkgeworCW5leHQgPSBjdXJyLT5sZWZ0OworCisJaWYgKGNvbXBsZXRlID09IE5VTEwgJiYgYm90cm93Y291bnQtLSA9PSAwKSB7CisJICAgIGFzc2VydCAoYmFzZWxldmVsID09IDApOworCSAgICBhc3NlcnQgKGxldmVsID09IDApOworCSAgICBiYXNlbGV2ZWwgPSBsZXZlbCA9IDE7CisJICAgIGNvbXBsZXRlID0gdHJlZVswXTsKKworCSAgICBpZiAoY29tcGxldGUgIT0gMCkgeworCQl0cmVlWzBdID0gMDsKKwkJY29tcGxldGUtPnJpZ2h0ID0gZGljdG5pbDsKKwkJd2hpbGUgKHRyZWVbbGV2ZWxdICE9IDApIHsKKwkJICAgIHRyZWVbbGV2ZWxdLT5yaWdodCA9IGNvbXBsZXRlOworCQkgICAgY29tcGxldGUtPnBhcmVudCA9IHRyZWVbbGV2ZWxdOworCQkgICAgY29tcGxldGUgPSB0cmVlW2xldmVsXTsKKwkJICAgIHRyZWVbbGV2ZWwrK10gPSAwOworCQl9CisJICAgIH0KKwl9CisKKwlpZiAoY29tcGxldGUgPT0gTlVMTCkgeworCSAgICBjdXJyLT5sZWZ0ID0gZGljdG5pbDsKKwkgICAgY3Vyci0+cmlnaHQgPSBkaWN0bmlsOworCSAgICBjdXJyLT5jb2xvciA9IGxldmVsICUgMjsKKwkgICAgY29tcGxldGUgPSBjdXJyOworCisJICAgIGFzc2VydCAobGV2ZWwgPT0gYmFzZWxldmVsKTsKKwkgICAgd2hpbGUgKHRyZWVbbGV2ZWxdICE9IDApIHsKKwkJdHJlZVtsZXZlbF0tPnJpZ2h0ID0gY29tcGxldGU7CisJCWNvbXBsZXRlLT5wYXJlbnQgPSB0cmVlW2xldmVsXTsKKwkJY29tcGxldGUgPSB0cmVlW2xldmVsXTsKKwkJdHJlZVtsZXZlbCsrXSA9IDA7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBjdXJyLT5sZWZ0ID0gY29tcGxldGU7CisJICAgIGN1cnItPmNvbG9yID0gKGxldmVsICsgMSkgJSAyOworCSAgICBjb21wbGV0ZS0+cGFyZW50ID0gY3VycjsKKwkgICAgdHJlZVtsZXZlbF0gPSBjdXJyOworCSAgICBjb21wbGV0ZSA9IDA7CisJICAgIGxldmVsID0gYmFzZWxldmVsOworCX0KKyAgICB9CisKKyAgICBpZiAoY29tcGxldGUgPT0gTlVMTCkKKwljb21wbGV0ZSA9IGRpY3RuaWw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRElDVF9ERVBUSF9NQVg7IGkrKykgeworCWlmICh0cmVlW2ldICE9IDApIHsKKwkgICAgdHJlZVtpXS0+cmlnaHQgPSBjb21wbGV0ZTsKKwkgICAgY29tcGxldGUtPnBhcmVudCA9IHRyZWVbaV07CisJICAgIGNvbXBsZXRlID0gdHJlZVtpXTsKKwl9CisgICAgfQorCisgICAgZGljdG5pbC0+Y29sb3IgPSBkbm9kZV9ibGFjazsKKyAgICBkaWN0bmlsLT5yaWdodCA9IGRpY3RuaWw7CisgICAgY29tcGxldGUtPnBhcmVudCA9IGRpY3RuaWw7CisgICAgY29tcGxldGUtPmNvbG9yID0gZG5vZGVfYmxhY2s7CisgICAgZGljdF9yb290KGRpY3QpID0gY29tcGxldGU7CisKKyAgICBhc3NlcnQgKGRpY3RfdmVyaWZ5KGRpY3QpKTsKK30KKwordm9pZCBkaWN0X21lcmdlKGRpY3RfdCAqZGVzdCwgZGljdF90ICpzb3VyY2UpCit7CisgICAgZGljdF9sb2FkX3QgbG9hZDsKKyAgICBkbm9kZV90ICpsZWZ0bm9kZSA9IGRpY3RfZmlyc3QoZGVzdCksICpyaWdodG5vZGUgPSBkaWN0X2ZpcnN0KHNvdXJjZSk7CisKKyAgICBhc3NlcnQgKGRpY3Rfc2ltaWxhcihkZXN0LCBzb3VyY2UpKTsKKworICAgIGlmIChzb3VyY2UgPT0gZGVzdCkKKwlyZXR1cm47CisKKyAgICBkZXN0LT5ub2RlY291bnQgPSAwOworICAgIGxvYWRfYmVnaW5faW50ZXJuYWwoJmxvYWQsIGRlc3QpOworCisgICAgZm9yICg7OykgeworCWlmIChsZWZ0bm9kZSAhPSBOVUxMICYmIHJpZ2h0bm9kZSAhPSBOVUxMKSB7CisJICAgIGlmIChkZXN0LT5jb21wYXJlKGxlZnRub2RlLT5rZXksIHJpZ2h0bm9kZS0+a2V5KSA8IDApCisJCWdvdG8gY29weWxlZnQ7CisJICAgIGVsc2UKKwkJZ290byBjb3B5cmlnaHQ7CisJfSBlbHNlIGlmIChsZWZ0bm9kZSAhPSBOVUxMKSB7CisJICAgIGdvdG8gY29weWxlZnQ7CisJfSBlbHNlIGlmIChyaWdodG5vZGUgIT0gTlVMTCkgeworCSAgICBnb3RvIGNvcHlyaWdodDsKKwl9IGVsc2UgeworCSAgICBhc3NlcnQgKGxlZnRub2RlID09IE5VTEwgJiYgcmlnaHRub2RlID09IE5VTEwpOworCSAgICBicmVhazsKKwl9CisKKyAgICBjb3B5bGVmdDoKKwl7CisJICAgIGRub2RlX3QgKm5leHQgPSBkaWN0X25leHQoZGVzdCwgbGVmdG5vZGUpOworI2lmbmRlZiBOREVCVUcKKwkgICAgbGVmdG5vZGUtPmxlZnQgPSBOVUxMOwkvKiBzdXBwcmVzcyBhc3NlcnRpb24gaW4gZGljdF9sb2FkX25leHQgKi8KKyNlbmRpZgorCSAgICBkaWN0X2xvYWRfbmV4dCgmbG9hZCwgbGVmdG5vZGUsIGxlZnRub2RlLT5rZXkpOworCSAgICBsZWZ0bm9kZSA9IG5leHQ7CisJICAgIGNvbnRpbnVlOworCX0KKworICAgIGNvcHlyaWdodDoKKwl7CisJICAgIGRub2RlX3QgKm5leHQgPSBkaWN0X25leHQoc291cmNlLCByaWdodG5vZGUpOworI2lmbmRlZiBOREVCVUcKKwkgICAgcmlnaHRub2RlLT5sZWZ0ID0gTlVMTDsKKyNlbmRpZgorCSAgICBkaWN0X2xvYWRfbmV4dCgmbG9hZCwgcmlnaHRub2RlLCByaWdodG5vZGUtPmtleSk7CisJICAgIHJpZ2h0bm9kZSA9IG5leHQ7CisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9CisKKyAgICBkaWN0X2NsZWFyKHNvdXJjZSk7CisgICAgZGljdF9sb2FkX2VuZCgmbG9hZCk7Cit9CisjZW5kaWYgLyogRTJGU0NLX05PVFVTRUQgKi8KKworI2lmZGVmIEtBWkxJQl9URVNUX01BSU4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKwordHlwZWRlZiBjaGFyIGlucHV0X3RbMjU2XTsKKworc3RhdGljIGludCB0b2tlbml6ZShjaGFyICpzdHJpbmcsIC4uLikKK3sKKyAgICBjaGFyICoqdG9rcHRyOworICAgIHZhX2xpc3QgYXJnbGlzdDsKKyAgICBpbnQgdG9rY291bnQgPSAwOworCisgICAgdmFfc3RhcnQoYXJnbGlzdCwgc3RyaW5nKTsKKyAgICB0b2twdHIgPSB2YV9hcmcoYXJnbGlzdCwgY2hhciAqKik7CisgICAgd2hpbGUgKHRva3B0cikgeworCXdoaWxlICgqc3RyaW5nICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpzdHJpbmcpKQorCSAgICBzdHJpbmcrKzsKKwlpZiAoISpzdHJpbmcpCisJICAgIGJyZWFrOworCSp0b2twdHIgPSBzdHJpbmc7CisJd2hpbGUgKCpzdHJpbmcgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpzdHJpbmcpKQorCSAgICBzdHJpbmcrKzsKKwl0b2twdHIgPSB2YV9hcmcoYXJnbGlzdCwgY2hhciAqKik7CisJdG9rY291bnQrKzsKKwlpZiAoISpzdHJpbmcpCisJICAgIGJyZWFrOworCSpzdHJpbmcrKyA9IDA7CisgICAgfQorICAgIHZhX2VuZChhcmdsaXN0KTsKKworICAgIHJldHVybiB0b2tjb3VudDsKK30KKworc3RhdGljIGludCBjb21wYXJlZihjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyKQoreworICAgIHJldHVybiBzdHJjbXAoa2V5MSwga2V5Mik7Cit9CisKK3N0YXRpYyBjaGFyICpkdXBzdHJpbmcoY2hhciAqc3RyKQoreworICAgIGludCBzeiA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjaGFyICpuZXcgPSBtYWxsb2Moc3opOworICAgIGlmIChuZXcpCisJbWVtY3B5KG5ldywgc3RyLCBzeik7CisgICAgcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGRub2RlX3QgKm5ld19ub2RlKHZvaWQgKmMpCit7CisgICAgc3RhdGljIGRub2RlX3QgZmV3WzVdOworICAgIHN0YXRpYyBpbnQgY291bnQ7CisKKyAgICBpZiAoY291bnQgPCA1KQorCXJldHVybiBmZXcgKyBjb3VudCsrOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlbF9ub2RlKGRub2RlX3QgKm4sIHZvaWQgKmMpCit7Cit9CisKK3N0YXRpYyBpbnQgcHJvbXB0ID0gMDsKKworc3RhdGljIHZvaWQgY29uc3RydWN0KGRpY3RfdCAqZCkKK3sKKyAgICBpbnB1dF90IGluOworICAgIGludCBkb25lID0gMDsKKyAgICBkaWN0X2xvYWRfdCBkbDsKKyAgICBkbm9kZV90ICpkbjsKKyAgICBjaGFyICp0b2sxLCAqdG9rMiwgKnZhbDsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgY2hhciAqaGVscCA9CisJInAgICAgICAgICAgICAgICAgICAgICAgdHVybiBwcm9tcHQgb25cbiIKKwkicSAgICAgICAgICAgICAgICAgICAgICBmaW5pc2ggY29uc3RydWN0aW9uXG4iCisJImEgPGtleT4gPHZhbD4gICAgICAgICAgYWRkIG5ldyBlbnRyeVxuIjsKKworICAgIGlmICghZGljdF9pc2VtcHR5KGQpKQorCXB1dHMoIndhcm5pbmc6IGRpY3Rpb25hcnkgbm90IGVtcHR5ISIpOworCisgICAgZGljdF9sb2FkX2JlZ2luKCZkbCwgZCk7CisKKyAgICB3aGlsZSAoIWRvbmUpIHsKKwlpZiAocHJvbXB0KQorCSAgICBwdXRjaGFyKCc+Jyk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlpZiAoIWZnZXRzKGluLCBzaXplb2YoaW5wdXRfdCksIHN0ZGluKSkKKwkgICAgYnJlYWs7CisKKwlzd2l0Y2ggKGluWzBdKSB7CisJICAgIGNhc2UgJz8nOgorCQlwdXRzKGhlbHApOworCQlicmVhazsKKwkgICAgY2FzZSAncCc6CisJCXByb21wdCA9IDE7CisJCWJyZWFrOworCSAgICBjYXNlICdxJzoKKwkJZG9uZSA9IDE7CisJCWJyZWFrOworCSAgICBjYXNlICdhJzoKKwkJaWYgKHRva2VuaXplKGluKzEsICZ0b2sxLCAmdG9rMiwgKGNoYXIgKiopIDApICE9IDIpIHsKKwkJICAgIHB1dHMoIndoYXQ/Iik7CisJCSAgICBicmVhazsKKwkJfQorCQlrZXkgPSBkdXBzdHJpbmcodG9rMSk7CisJCXZhbCA9IGR1cHN0cmluZyh0b2syKTsKKwkJZG4gPSBkbm9kZV9jcmVhdGUodmFsKTsKKworCQlpZiAoIWtleSB8fCAhdmFsIHx8ICFkbikgeworCQkgICAgcHV0cygib3V0IG9mIG1lbW9yeSIpOworCQkgICAgZnJlZSgodm9pZCAqKSBrZXkpOworCQkgICAgZnJlZSh2YWwpOworCQkgICAgaWYgKGRuKQorCQkJZG5vZGVfZGVzdHJveShkbik7CisJCX0KKworCQlkaWN0X2xvYWRfbmV4dCgmZGwsIGRuLCBrZXkpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcHV0Y2hhcignPycpOworCQlwdXRjaGFyKCdcbicpOworCQlicmVhazsKKwl9CisgICAgfQorCisgICAgZGljdF9sb2FkX2VuZCgmZGwpOworfQorCitpbnQgbWFpbih2b2lkKQoreworICAgIGlucHV0X3QgaW47CisgICAgZGljdF90IGRhcnJheVsxMF07CisgICAgZGljdF90ICpkID0gJmRhcnJheVswXTsKKyAgICBkbm9kZV90ICpkbjsKKyAgICBpbnQgaTsKKyAgICBjaGFyICp0b2sxLCAqdG9rMiwgKnZhbDsKKyAgICBjb25zdCBjaGFyICprZXk7CisKKyAgICBjaGFyICpoZWxwID0KKwkiYSA8a2V5PiA8dmFsPiAgICAgICAgICBhZGQgdmFsdWUgdG8gZGljdGlvbmFyeVxuIgorCSJkIDxrZXk+ICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZSBmcm9tIGRpY3Rpb25hcnlcbiIKKwkibCA8a2V5PiAgICAgICAgICAgICAgICBsb29rdXAgdmFsdWUgaW4gZGljdGlvbmFyeVxuIgorCSIoIDxrZXk+ICAgICAgICAgICAgICAgIGxvb2t1cCBsb3dlciBib3VuZFxuIgorCSIpIDxrZXk+ICAgICAgICAgICAgICAgIGxvb2t1cCB1cHBlciBib3VuZFxuIgorCSIjIDxudW0+ICAgICAgICAgICAgICAgIHN3aXRjaCB0byBhbHRlcm5hdGUgZGljdGlvbmFyeSAoMC05KVxuIgorCSJqIDxudW0+IDxudW0+ICAgICAgICAgIG1lcmdlIHR3byBkaWN0aW9uYXJpZXNcbiIKKwkiZiAgICAgICAgICAgICAgICAgICAgICBmcmVlIHRoZSB3aG9sZSBkaWN0aW9uYXJ5XG4iCisJImsgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgZHVwbGljYXRlIGtleXNcbiIKKwkiYyAgICAgICAgICAgICAgICAgICAgICBzaG93IG51bWJlciBvZiBlbnRyaWVzXG4iCisJInQgICAgICAgICAgICAgICAgICAgICAgZHVtcCB3aG9sZSBkaWN0aW9uYXJ5IGluIHNvcnQgb3JkZXJcbiIKKwkibSAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRpY3Rpb25hcnkgb3V0IG9mIHNvcnRlZCBpdGVtc1xuIgorCSJwICAgICAgICAgICAgICAgICAgICAgIHR1cm4gcHJvbXB0IG9uXG4iCisJInMgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIHRvIG5vbi1mdW5jdGlvbmluZyBhbGxvY2F0b3JcbiIKKwkicSAgICAgICAgICAgICAgICAgICAgICBxdWl0IjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgZGFycmF5IC8gc2l6ZW9mICpkYXJyYXk7IGkrKykKKwlkaWN0X2luaXQoJmRhcnJheVtpXSwgRElDVENPVU5UX1RfTUFYLCBjb21wYXJlZik7CisKKyAgICBmb3IgKDs7KSB7CisJaWYgKHByb21wdCkKKwkgICAgcHV0Y2hhcignPicpOworCWZmbHVzaChzdGRvdXQpOworCisJaWYgKCFmZ2V0cyhpbiwgc2l6ZW9mKGlucHV0X3QpLCBzdGRpbikpCisJICAgIGJyZWFrOworCisJc3dpdGNoKGluWzBdKSB7CisJICAgIGNhc2UgJz8nOgorCQlwdXRzKGhlbHApOworCQlicmVhazsKKwkgICAgY2FzZSAnYSc6CisJCWlmICh0b2tlbml6ZShpbisxLCAmdG9rMSwgJnRvazIsIChjaGFyICoqKSAwKSAhPSAyKSB7CisJCSAgICBwdXRzKCJ3aGF0PyIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJa2V5ID0gZHVwc3RyaW5nKHRvazEpOworCQl2YWwgPSBkdXBzdHJpbmcodG9rMik7CisKKwkJaWYgKCFrZXkgfHwgIXZhbCkgeworCQkgICAgcHV0cygib3V0IG9mIG1lbW9yeSIpOworCQkgICAgZnJlZSgodm9pZCAqKSBrZXkpOworCQkgICAgZnJlZSh2YWwpOworCQl9CisKKwkJaWYgKCFkaWN0X2FsbG9jX2luc2VydChkLCBrZXksIHZhbCkpIHsKKwkJICAgIHB1dHMoImRpY3RfYWxsb2NfaW5zZXJ0IGZhaWxlZCIpOworCQkgICAgZnJlZSgodm9pZCAqKSBrZXkpOworCQkgICAgZnJlZSh2YWwpOworCQkgICAgYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJICAgIGNhc2UgJ2QnOgorCQlpZiAodG9rZW5pemUoaW4rMSwgJnRvazEsIChjaGFyICoqKSAwKSAhPSAxKSB7CisJCSAgICBwdXRzKCJ3aGF0PyIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJZG4gPSBkaWN0X2xvb2t1cChkLCB0b2sxKTsKKwkJaWYgKCFkbikgeworCQkgICAgcHV0cygiZGljdF9sb29rdXAgZmFpbGVkIik7CisJCSAgICBicmVhazsKKwkJfQorCQl2YWwgPSBkbm9kZV9nZXQoZG4pOworCQlrZXkgPSBkbm9kZV9nZXRrZXkoZG4pOworCQlkaWN0X2RlbGV0ZV9mcmVlKGQsIGRuKTsKKworCQlmcmVlKHZhbCk7CisJCWZyZWUoKHZvaWQgKikga2V5KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2YnOgorCQlkaWN0X2ZyZWUoZCk7CisJCWJyZWFrOworCSAgICBjYXNlICdsJzoKKwkgICAgY2FzZSAnKCc6CisJICAgIGNhc2UgJyknOgorCQlpZiAodG9rZW5pemUoaW4rMSwgJnRvazEsIChjaGFyICoqKSAwKSAhPSAxKSB7CisJCSAgICBwdXRzKCJ3aGF0PyIpOworCQkgICAgYnJlYWs7CisJCX0KKwkJZG4gPSAwOworCQlzd2l0Y2ggKGluWzBdKSB7CisJCWNhc2UgJ2wnOgorCQkgICAgZG4gPSBkaWN0X2xvb2t1cChkLCB0b2sxKTsKKwkJICAgIGJyZWFrOworCQljYXNlICcoJzoKKwkJICAgIGRuID0gZGljdF9sb3dlcl9ib3VuZChkLCB0b2sxKTsKKwkJICAgIGJyZWFrOworCQljYXNlICcpJzoKKwkJICAgIGRuID0gZGljdF91cHBlcl9ib3VuZChkLCB0b2sxKTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlmICghZG4pIHsKKwkJICAgIHB1dHMoImxvb2t1cCBmYWlsZWQiKTsKKwkJICAgIGJyZWFrOworCQl9CisJCXZhbCA9IGRub2RlX2dldChkbik7CisJCXB1dHModmFsKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ20nOgorCQljb25zdHJ1Y3QoZCk7CisJCWJyZWFrOworCSAgICBjYXNlICdrJzoKKwkJZGljdF9hbGxvd19kdXBlcyhkKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ2MnOgorCQlwcmludGYoIiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGRpY3RfY291bnQoZCkpOworCQlicmVhazsKKwkgICAgY2FzZSAndCc6CisJCWZvciAoZG4gPSBkaWN0X2ZpcnN0KGQpOyBkbjsgZG4gPSBkaWN0X25leHQoZCwgZG4pKSB7CisJCSAgICBwcmludGYoIiVzXHQlc1xuIiwgKGNoYXIgKikgZG5vZGVfZ2V0a2V5KGRuKSwKKwkJCSAgICAoY2hhciAqKSBkbm9kZV9nZXQoZG4pKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSAncSc6CisJCWV4aXQoMCk7CisJCWJyZWFrOworCSAgICBjYXNlICdcMCc6CisJCWJyZWFrOworCSAgICBjYXNlICdwJzoKKwkJcHJvbXB0ID0gMTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJ3MnOgorCQlkaWN0X3NldF9hbGxvY2F0b3IoZCwgbmV3X25vZGUsIGRlbF9ub2RlLCBOVUxMKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgJyMnOgorCQlpZiAodG9rZW5pemUoaW4rMSwgJnRvazEsIChjaGFyICoqKSAwKSAhPSAxKSB7CisJCSAgICBwdXRzKCJ3aGF0PyIpOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSB7CisJCSAgICBpbnQgZGljdG51bSA9IGF0b2kodG9rMSk7CisJCSAgICBpZiAoZGljdG51bSA8IDAgfHwgZGljdG51bSA+IDkpIHsKKwkJCXB1dHMoImludmFsaWQgbnVtYmVyIik7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGQgPSAmZGFycmF5W2RpY3RudW1dOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlICdqJzoKKwkJaWYgKHRva2VuaXplKGluKzEsICZ0b2sxLCAmdG9rMiwgKGNoYXIgKiopIDApICE9IDIpIHsKKwkJICAgIHB1dHMoIndoYXQ/Iik7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIHsKKwkJICAgIGludCBkaWN0MSA9IGF0b2kodG9rMSksIGRpY3QyID0gYXRvaSh0b2syKTsKKwkJICAgIGlmIChkaWN0MSA8IDAgfHwgZGljdDEgPiA5IHx8IGRpY3QyIDwgMCB8fCBkaWN0MiA+IDkpIHsKKwkJCXB1dHMoImludmFsaWQgbnVtYmVyIik7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGRpY3RfbWVyZ2UoJmRhcnJheVtkaWN0MV0sICZkYXJyYXlbZGljdDJdKTsKKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcHV0Y2hhcignPycpOworCQlwdXRjaGFyKCdcbicpOworCQlicmVhazsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9kaWN0LmggYi9lMmZzcHJvZ3MvZTJmc2NrL2RpY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzgwNzlkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9kaWN0LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBEaWN0aW9uYXJ5IEFic3RyYWN0IERhdGEgVHlwZQorICogQ29weXJpZ2h0IChDKSAxOTk3IEtheiBLeWxoZWt1IDxrYXpAYXNoaS5mb290cHJpbnRzLm5ldD4KKyAqCisgKiBGcmVlIFNvZnR3YXJlIExpY2Vuc2U6CisgKgorICogQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQgYnkgdGhlIGF1dGhvciwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZnJlZWx5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLAorICogcG9zc2libHkgaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLCBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzCisgKiBpbnRhY3QuIFBlcm1pc3Npb24gaXMgYWxzbyBncmFudGVkIHRvIGFkYXB0IHRoaXMgc29mdHdhcmUgdG8gcHJvZHVjZQorICogZGVyaXZhdGl2ZSB3b3JrcywgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbnMgY2FycnkgdGhpcyBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgYWRkaXRpb25hbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgd29yayBoYXMgYmVlbiBtb2RpZmllZC4KKyAqIFRoaXMgc291cmNlIGNvZGUgbWF5IGJlIHRyYW5zbGF0ZWQgaW50byBleGVjdXRhYmxlIGZvcm0gYW5kIGluY29ycG9yYXRlZAorICogaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZTsgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZm9yIHN1Y2ggc29mdHdhcmUgdG8KKyAqIGNvbnRhaW4gYSBjb3B5cmlnaHQgbm90aWNlIHJlbGF0ZWQgdG8gdGhpcyBzb3VyY2UuCisgKgorICogJElkOiBkaWN0LmgsdiAxLjIyLjIuNiAyMDAwLzExLzEzIDAxOjM2OjQ0IGtheiBFeHAgJAorICogJE5hbWU6IGthemxpYl8xXzIwICQKKyAqLworCisjaWZuZGVmIERJQ1RfSAorI2RlZmluZSBESUNUX0gKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmZGVmIEtBWkxJQl9TSURFRUZGRUNUX0RFQlVHCisjaW5jbHVkZSAic2Z4LmgiCisjZW5kaWYKKworLyoKKyAqIEJsdXJiIGZvciBpbmNsdXNpb24gaW50byBDKysgdHJhbnNsYXRpb24gdW5pdHMKKyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBkaWN0Y291bnRfdDsKKyNkZWZpbmUgRElDVENPVU5UX1RfTUFYIFVMT05HX01BWAorCisvKgorICogVGhlIGRpY3Rpb25hcnkgaXMgaW1wbGVtZW50ZWQgYXMgYSByZWQtYmxhY2sgdHJlZQorICovCisKK3R5cGVkZWYgZW51bSB7IGRub2RlX3JlZCwgZG5vZGVfYmxhY2sgfSBkbm9kZV9jb2xvcl90OworCit0eXBlZGVmIHN0cnVjdCBkbm9kZV90IHsKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisgICAgc3RydWN0IGRub2RlX3QgKmRpY3RfbGVmdDsKKyAgICBzdHJ1Y3QgZG5vZGVfdCAqZGljdF9yaWdodDsKKyAgICBzdHJ1Y3QgZG5vZGVfdCAqZGljdF9wYXJlbnQ7CisgICAgZG5vZGVfY29sb3JfdCBkaWN0X2NvbG9yOworICAgIGNvbnN0IHZvaWQgKmRpY3Rfa2V5OworICAgIHZvaWQgKmRpY3RfZGF0YTsKKyNlbHNlCisgICAgaW50IGRpY3RfZHVtbXk7CisjZW5kaWYKK30gZG5vZGVfdDsKKwordHlwZWRlZiBpbnQgKCpkaWN0X2NvbXBfdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwordHlwZWRlZiBkbm9kZV90ICooKmRub2RlX2FsbG9jX3QpKHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpkbm9kZV9mcmVlX3QpKGRub2RlX3QgKiwgdm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgZGljdF90IHsKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisgICAgZG5vZGVfdCBkaWN0X25pbG5vZGU7CisgICAgZGljdGNvdW50X3QgZGljdF9ub2RlY291bnQ7CisgICAgZGljdGNvdW50X3QgZGljdF9tYXhjb3VudDsKKyAgICBkaWN0X2NvbXBfdCBkaWN0X2NvbXBhcmU7CisgICAgZG5vZGVfYWxsb2NfdCBkaWN0X2FsbG9jbm9kZTsKKyAgICBkbm9kZV9mcmVlX3QgZGljdF9mcmVlbm9kZTsKKyAgICB2b2lkICpkaWN0X2NvbnRleHQ7CisgICAgaW50IGRpY3RfZHVwZXM7CisjZWxzZQorICAgIGludCBkaWN0X2R1bW1teTsKKyNlbmRpZgorfSBkaWN0X3Q7CisKK3R5cGVkZWYgdm9pZCAoKmRub2RlX3Byb2Nlc3NfdCkoZGljdF90ICosIGRub2RlX3QgKiwgdm9pZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgZGljdF9sb2FkX3QgeworI2lmIGRlZmluZWQoRElDVF9JTVBMRU1FTlRBVElPTikgfHwgIWRlZmluZWQoS0FaTElCX09QQVFVRV9ERUJVRykKKyAgICBkaWN0X3QgKmRpY3RfZGljdHB0cjsKKyAgICBkbm9kZV90IGRpY3Rfbmlsbm9kZTsKKyNlbHNlCisgICAgaW50IGRpY3RfZHVtbW15OworI2VuZGlmCit9IGRpY3RfbG9hZF90OworCitleHRlcm4gZGljdF90ICpkaWN0X2NyZWF0ZShkaWN0Y291bnRfdCwgZGljdF9jb21wX3QpOworZXh0ZXJuIHZvaWQgZGljdF9zZXRfYWxsb2NhdG9yKGRpY3RfdCAqLCBkbm9kZV9hbGxvY190LCBkbm9kZV9mcmVlX3QsIHZvaWQgKik7CitleHRlcm4gdm9pZCBkaWN0X2Rlc3Ryb3koZGljdF90ICopOworZXh0ZXJuIHZvaWQgZGljdF9mcmVlX25vZGVzKGRpY3RfdCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfZnJlZShkaWN0X3QgKik7CitleHRlcm4gZGljdF90ICpkaWN0X2luaXQoZGljdF90ICosIGRpY3Rjb3VudF90LCBkaWN0X2NvbXBfdCk7CitleHRlcm4gdm9pZCBkaWN0X2luaXRfbGlrZShkaWN0X3QgKiwgY29uc3QgZGljdF90ICopOworZXh0ZXJuIGludCBkaWN0X3ZlcmlmeShkaWN0X3QgKik7CitleHRlcm4gaW50IGRpY3Rfc2ltaWxhcihjb25zdCBkaWN0X3QgKiwgY29uc3QgZGljdF90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbG9va3VwKGRpY3RfdCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbG93ZXJfYm91bmQoZGljdF90ICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF91cHBlcl9ib3VuZChkaWN0X3QgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfaW5zZXJ0KGRpY3RfdCAqLCBkbm9kZV90ICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF9kZWxldGUoZGljdF90ICosIGRub2RlX3QgKik7CitleHRlcm4gaW50IGRpY3RfYWxsb2NfaW5zZXJ0KGRpY3RfdCAqLCBjb25zdCB2b2lkICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBkaWN0X2RlbGV0ZV9mcmVlKGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfZmlyc3QoZGljdF90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfbGFzdChkaWN0X3QgKik7CitleHRlcm4gZG5vZGVfdCAqZGljdF9uZXh0KGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRpY3RfcHJldihkaWN0X3QgKiwgZG5vZGVfdCAqKTsKK2V4dGVybiBkaWN0Y291bnRfdCBkaWN0X2NvdW50KGRpY3RfdCAqKTsKK2V4dGVybiBpbnQgZGljdF9pc2VtcHR5KGRpY3RfdCAqKTsKK2V4dGVybiBpbnQgZGljdF9pc2Z1bGwoZGljdF90ICopOworZXh0ZXJuIGludCBkaWN0X2NvbnRhaW5zKGRpY3RfdCAqLCBkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgZGljdF9hbGxvd19kdXBlcyhkaWN0X3QgKik7CitleHRlcm4gaW50IGRub2RlX2lzX2luX2FfZGljdChkbm9kZV90ICopOworZXh0ZXJuIGRub2RlX3QgKmRub2RlX2NyZWF0ZSh2b2lkICopOworZXh0ZXJuIGRub2RlX3QgKmRub2RlX2luaXQoZG5vZGVfdCAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZG5vZGVfZGVzdHJveShkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgKmRub2RlX2dldChkbm9kZV90ICopOworZXh0ZXJuIGNvbnN0IHZvaWQgKmRub2RlX2dldGtleShkbm9kZV90ICopOworZXh0ZXJuIHZvaWQgZG5vZGVfcHV0KGRub2RlX3QgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfcHJvY2VzcyhkaWN0X3QgKiwgdm9pZCAqLCBkbm9kZV9wcm9jZXNzX3QpOworZXh0ZXJuIHZvaWQgZGljdF9sb2FkX2JlZ2luKGRpY3RfbG9hZF90ICosIGRpY3RfdCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfbG9hZF9uZXh0KGRpY3RfbG9hZF90ICosIGRub2RlX3QgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRpY3RfbG9hZF9lbmQoZGljdF9sb2FkX3QgKik7CitleHRlcm4gdm9pZCBkaWN0X21lcmdlKGRpY3RfdCAqLCBkaWN0X3QgKik7CisKKyNpZiBkZWZpbmVkKERJQ1RfSU1QTEVNRU5UQVRJT04pIHx8ICFkZWZpbmVkKEtBWkxJQl9PUEFRVUVfREVCVUcpCisjaWZkZWYgS0FaTElCX1NJREVFRkZFQ1RfREVCVUcKKyNkZWZpbmUgZGljdF9pc2Z1bGwoRCkgKFNGWF9DSEVDSyhEKS0+ZGljdF9ub2RlY291bnQgPT0gKEQpLT5kaWN0X21heGNvdW50KQorI2Vsc2UKKyNkZWZpbmUgZGljdF9pc2Z1bGwoRCkgKChEKS0+ZGljdF9ub2RlY291bnQgPT0gKEQpLT5kaWN0X21heGNvdW50KQorI2VuZGlmCisjZGVmaW5lIGRpY3RfY291bnQoRCkgKChEKS0+ZGljdF9ub2RlY291bnQpCisjZGVmaW5lIGRpY3RfaXNlbXB0eShEKSAoKEQpLT5kaWN0X25vZGVjb3VudCA9PSAwKQorI2RlZmluZSBkbm9kZV9nZXQoTikgKChOKS0+ZGljdF9kYXRhKQorI2RlZmluZSBkbm9kZV9nZXRrZXkoTikgKChOKS0+ZGljdF9rZXkpCisjZGVmaW5lIGRub2RlX3B1dChOLCBYKSAoKE4pLT5kaWN0X2RhdGEgPSAoWCkpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2RpcmluZm8uYyBiL2UyZnNwcm9ncy9lMmZzY2svZGlyaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTgzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2RpcmluZm8uYwpAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIGRpcmluZm8uYyAtLS0gbWFpbnRhaW5zIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gdGFibGUgZm9yIGUyZnNjay4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKi8KKworI3VuZGVmIERJUklORk9fREVCVUcKKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKworI2luY2x1ZGUgPGV4dDJmcy90ZGIuaD4KKworc3RydWN0IGRpcl9pbmZvX2RiIHsKKwlpbnQJCWNvdW50OworCWludAkJc2l6ZTsKKwlzdHJ1Y3QgZGlyX2luZm8gKmFycmF5OworCXN0cnVjdCBkaXJfaW5mbyAqbGFzdF9sb29rdXA7CisJY2hhcgkJKnRkYl9mbjsKKwlUREJfQ09OVEVYVAkqdGRiOworfTsKKworc3RydWN0IGRpcl9pbmZvX2l0ZXIgeworCWludAlpOworCVREQl9EQVRBCXRkYl9pdGVyOworfTsKKworc3RydWN0IGRpcl9pbmZvX2VudCB7CisJZXh0Ml9pbm9fdAkJZG90ZG90OwkvKiBQYXJlbnQgYWNjb3JkaW5nIHRvICcuLicgKi8KKwlleHQyX2lub190CQlwYXJlbnQ7IC8qIFBhcmVudCBhY2NvcmRpbmcgdG8gdHJlZXdhbGsgKi8KK307CisKKworc3RhdGljIHZvaWQgZTJmc2NrX3B1dF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIHN0cnVjdCBkaXJfaW5mbyAqZGlyKTsKKworc3RhdGljIHZvaWQgc2V0dXBfdGRiKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBudW1fZGlycykKK3sKKwlzdHJ1Y3QgZGlyX2luZm9fZGIJKmRiID0gY3R4LT5kaXJfaW5mbzsKKwl1bnNpZ25lZCBpbnQJCXRocmVzaG9sZDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKnRkYl9kaXIsIHV1aWRbNDBdOworCWludAkJCWZkLCBlbmFibGU7CisKKwlwcm9maWxlX2dldF9zdHJpbmcoY3R4LT5wcm9maWxlLCAic2NyYXRjaF9maWxlcyIsICJkaXJlY3RvcnkiLCAwLCAwLAorCQkJICAgJnRkYl9kaXIpOworCXByb2ZpbGVfZ2V0X3VpbnQoY3R4LT5wcm9maWxlLCAic2NyYXRjaF9maWxlcyIsCisJCQkgIm51bWRpcnNfdGhyZXNob2xkIiwgMCwgMCwgJnRocmVzaG9sZCk7CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwKKwkJCSAgICAiZGlyaW5mbyIsIDAsIDEsICZlbmFibGUpOworCisJaWYgKCFlbmFibGUgfHwgIXRkYl9kaXIgfHwgYWNjZXNzKHRkYl9kaXIsIFdfT0spIHx8CisJICAgICh0aHJlc2hvbGQgJiYgbnVtX2RpcnMgPD0gdGhyZXNob2xkKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKHRkYl9kaXIpICsgNjQsICZkYi0+dGRiX2ZuKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm47CisKKwl1dWlkX3VucGFyc2UoY3R4LT5mcy0+c3VwZXItPnNfdXVpZCwgdXVpZCk7CisJc3ByaW50ZihkYi0+dGRiX2ZuLCAiJXMvJXMtZGlyaW5mby1YWFhYWFgiLCB0ZGJfZGlyLCB1dWlkKTsKKwlmZCA9IG1rc3RlbXAoZGItPnRkYl9mbik7CisJaWYgKGZkIDwgMCkgeworCQlkYi0+dGRiID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWlmIChudW1fZGlycyA8IDk5OTkxKQorCQludW1fZGlycyA9IDk5OTkxOyAvKiBsYXJnZXN0IDUgZGlnaXQgcHJpbWUgKi8KKworCWRiLT50ZGIgPSB0ZGJfb3BlbihkYi0+dGRiX2ZuLCBudW1fZGlycywgVERCX05PTE9DSyB8IFREQl9OT1NZTkMsCisJCQkgICBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgMDYwMCk7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kYihlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGRpcl9pbmZvX2RiCSpkYjsKKwlleHQyX2lub190CQludW1fZGlyczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCWRiID0gKHN0cnVjdCBkaXJfaW5mb19kYiAqKQorCQllMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgc2l6ZW9mKHN0cnVjdCBkaXJfaW5mb19kYiksCisJCQkJICAgICAgICJkaXJlY3RvcnkgbWFwIGRiIik7CisJZGItPmNvdW50ID0gZGItPnNpemUgPSAwOworCWRiLT5hcnJheSA9IDA7CisKKwljdHgtPmRpcl9pbmZvID0gZGI7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X251bV9kaXJzKGN0eC0+ZnMsICZudW1fZGlycyk7CisJaWYgKHJldHZhbCkKKwkJbnVtX2RpcnMgPSAxMDI0OwkvKiBHdWVzcyAqLworCisJc2V0dXBfdGRiKGN0eCwgbnVtX2RpcnMpOworCisJaWYgKGRiLT50ZGIpIHsKKyNpZmRlZiBESVJJTkZPX0RFQlVHCisJCXByaW50ZigiTm90ZTogdXNpbmcgdGRiIVxuIik7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCWRiLT5zaXplID0gbnVtX2RpcnMgKyAxMDsKKwlkYi0+YXJyYXkgID0gKHN0cnVjdCBkaXJfaW5mbyAqKQorCQllMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgZGItPnNpemUKKwkJCQkgICAgICAgKiBzaXplb2YgKHN0cnVjdCBkaXJfaW5mbyksCisJCQkJICAgICAgICJkaXJlY3RvcnkgbWFwIik7Cit9CisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgY2FsbGVkIGR1cmluZyBwYXNzMSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgaW5mbworICogZW50cnkuICBEdXJpbmcgcGFzczEsIHRoZSBwYXNzZWQtaW4gcGFyZW50IGlzIDA7IGl0IHdpbGwgZ2V0IGZpbGxlZAorICogaW4gZHVyaW5nIHBhc3MyLgorICovCit2b2lkIGUyZnNja19hZGRfZGlyX2luZm8oZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywgZXh0Ml9pbm9fdCBwYXJlbnQpCit7CisJc3RydWN0IGRpcl9pbmZvX2RiIAkqZGI7CisJc3RydWN0IGRpcl9pbmZvIAkqZGlyLCBlbnQ7CisJaW50CQkJaSwgajsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCQlvbGRfc2l6ZTsKKworI2lmZGVmIERJUklORk9fREVCVUcKKwlwcmludGYoImFkZF9kaXJfaW5mbyBmb3IgaW5vZGUgKCVsdSwgJWx1KS4uLlxuIiwgaW5vLCBwYXJlbnQpOworI2VuZGlmCisJaWYgKCFjdHgtPmRpcl9pbmZvKQorCQlzZXR1cF9kYihjdHgpOworCWRiID0gY3R4LT5kaXJfaW5mbzsKKworCWlmIChjdHgtPmRpcl9pbmZvLT5jb3VudCA+PSBjdHgtPmRpcl9pbmZvLT5zaXplKSB7CisJCW9sZF9zaXplID0gY3R4LT5kaXJfaW5mby0+c2l6ZSAqIHNpemVvZihzdHJ1Y3QgZGlyX2luZm8pOworCQljdHgtPmRpcl9pbmZvLT5zaXplICs9IDEwOworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwgY3R4LT5kaXJfaW5mby0+c2l6ZSAqCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZGlyX2luZm8pLAorCQkJCQkgICAmY3R4LT5kaXJfaW5mby0+YXJyYXkpOworCQlpZiAocmV0dmFsKSB7CisJCQljdHgtPmRpcl9pbmZvLT5zaXplIC09IDEwOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZW50LmlubyA9IGlubzsKKwllbnQucGFyZW50ID0gcGFyZW50OworCWVudC5kb3Rkb3QgPSBwYXJlbnQ7CisKKwlpZiAoZGItPnRkYikgeworCQllMmZzY2tfcHV0X2Rpcl9pbmZvKGN0eCwgJmVudCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vcm1hbGx5LCBhZGRfZGlyX2luZm8gaXMgY2FsbGVkIHdpdGggZWFjaCBpbm9kZSBpbgorCSAqIHNlcXVlbnRpYWwgb3JkZXI7IGJ1dCBvbmNlIGluIGEgd2hpbGUgKGxpa2Ugd2hlbiBwYXNzIDMKKwkgKiBuZWVkcyB0byByZWNyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb3IgbG9zdCtmb3VuZAorCSAqIGRpcmVjdG9yeSkgaXQgaXMgY2FsbGVkIG91dCBvZiBvcmRlci4gIEluIHRob3NlIGNhc2VzLCB3ZQorCSAqIG5lZWQgdG8gbW92ZSB0aGUgZGlyX2luZm8gZW50cmllcyBkb3duIHRvIG1ha2Ugcm9vbSwgc2luY2UKKwkgKiB0aGUgZGlyX2luZm8gYXJyYXkgbmVlZHMgdG8gYmUgc29ydGVkIGJ5IGlub2RlIG51bWJlciBmb3IKKwkgKiBnZXRfZGlyX2luZm8oKSdzIHNha2UuCisJICovCisJaWYgKGN0eC0+ZGlyX2luZm8tPmNvdW50ICYmCisJICAgIGN0eC0+ZGlyX2luZm8tPmFycmF5W2N0eC0+ZGlyX2luZm8tPmNvdW50LTFdLmlubyA+PSBpbm8pIHsKKwkJZm9yIChpID0gY3R4LT5kaXJfaW5mby0+Y291bnQtMTsgaSA+IDA7IGktLSkKKwkJCWlmIChjdHgtPmRpcl9pbmZvLT5hcnJheVtpLTFdLmlubyA8IGlubykKKwkJCQlicmVhazsKKwkJZGlyID0gJmN0eC0+ZGlyX2luZm8tPmFycmF5W2ldOworCQlpZiAoZGlyLT5pbm8gIT0gaW5vKQorCQkJZm9yIChqID0gY3R4LT5kaXJfaW5mby0+Y291bnQrKzsgaiA+IGk7IGotLSkKKwkJCQljdHgtPmRpcl9pbmZvLT5hcnJheVtqXSA9IGN0eC0+ZGlyX2luZm8tPmFycmF5W2otMV07CisJfSBlbHNlCisJCWRpciA9ICZjdHgtPmRpcl9pbmZvLT5hcnJheVtjdHgtPmRpcl9pbmZvLT5jb3VudCsrXTsKKworCWRpci0+aW5vID0gaW5vOworCWRpci0+ZG90ZG90ID0gcGFyZW50OworCWRpci0+cGFyZW50ID0gcGFyZW50OworfQorCisvKgorICogZ2V0X2Rpcl9pbmZvKCkgLS0tIGdpdmVuIGFuIGlub2RlIG51bWJlciwgdHJ5IHRvIGZpbmQgdGhlIGRpcmVjdG9yeQorICogaW5mb3JtYXRpb24gZW50cnkgZm9yIGl0LgorICovCitzdGF0aWMgc3RydWN0IGRpcl9pbmZvICplMmZzY2tfZ2V0X2Rpcl9pbmZvKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGRpcl9pbmZvX2RiCSpkYiA9IGN0eC0+ZGlyX2luZm87CisJaW50CQkJbG93LCBoaWdoLCBtaWQ7CisJc3RydWN0IGRpcl9pbmZvX2VudAkqYnVmOworCXN0YXRpYyBzdHJ1Y3QgZGlyX2luZm8JcmV0X2Rpcl9pbmZvOworCisJaWYgKCFkYikKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBESVJJTkZPX0RFQlVHCisJcHJpbnRmKCJlMmZzY2tfZ2V0X2Rpcl9pbmZvICVkLi4uIiwgaW5vKTsKKyNlbmRpZgorCisJaWYgKGRiLT50ZGIpIHsKKwkJVERCX0RBVEEga2V5LCBkYXRhOworCisJCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmlubzsKKwkJa2V5LmRzaXplID0gc2l6ZW9mKGV4dDJfaW5vX3QpOworCisJCWRhdGEgPSB0ZGJfZmV0Y2goZGItPnRkYiwga2V5KTsKKwkJaWYgKCFkYXRhLmRwdHIpIHsKKwkJCWlmICh0ZGJfZXJyb3IoZGItPnRkYikgIT0gVERCX0VSUl9OT0VYSVNUKQorCQkJCXByaW50ZigiZmV0Y2ggZmFpbGVkOiAlc1xuIiwKKwkJCQkgICAgICAgdGRiX2Vycm9yc3RyKGRiLT50ZGIpKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJYnVmID0gKHN0cnVjdCBkaXJfaW5mb19lbnQgKikgZGF0YS5kcHRyOworCQlyZXRfZGlyX2luZm8uaW5vID0gaW5vOworCQlyZXRfZGlyX2luZm8uZG90ZG90ID0gYnVmLT5kb3Rkb3Q7CisJCXJldF9kaXJfaW5mby5wYXJlbnQgPSBidWYtPnBhcmVudDsKKyNpZmRlZiBESVJJTkZPX0RFQlVHCisJCXByaW50ZigiKCVkLCVkLCVkKVxuIiwgaW5vLCBidWYtPmRvdGRvdCwgYnVmLT5wYXJlbnQpOworI2VuZGlmCisJCWZyZWUoZGF0YS5kcHRyKTsKKwkJcmV0dXJuICZyZXRfZGlyX2luZm87CisJfQorCisJaWYgKGRiLT5sYXN0X2xvb2t1cCAmJiBkYi0+bGFzdF9sb29rdXAtPmlubyA9PSBpbm8pCisJCXJldHVybiBkYi0+bGFzdF9sb29rdXA7CisKKwlsb3cgPSAwOworCWhpZ2ggPSBjdHgtPmRpcl9pbmZvLT5jb3VudC0xOworCWlmIChpbm8gPT0gY3R4LT5kaXJfaW5mby0+YXJyYXlbbG93XS5pbm8pIHsKKyNpZmRlZiBESVJJTkZPX0RFQlVHCisJCXByaW50ZigiKCVkLCVkLCVkKVxuIiwgaW5vLAorCQkgICAgICAgY3R4LT5kaXJfaW5mby0+YXJyYXlbbG93XS5kb3Rkb3QsCisJCSAgICAgICBjdHgtPmRpcl9pbmZvLT5hcnJheVtsb3ddLnBhcmVudCk7CisjZW5kaWYKKwkJcmV0dXJuICZjdHgtPmRpcl9pbmZvLT5hcnJheVtsb3ddOworCX0KKwlpZiAoaW5vID09IGN0eC0+ZGlyX2luZm8tPmFycmF5W2hpZ2hdLmlubykgeworI2lmZGVmIERJUklORk9fREVCVUcKKwkJcHJpbnRmKCIoJWQsJWQsJWQpXG4iLCBpbm8sCisJCSAgICAgICBjdHgtPmRpcl9pbmZvLT5hcnJheVtoaWdoXS5kb3Rkb3QsCisJCSAgICAgICBjdHgtPmRpcl9pbmZvLT5hcnJheVtoaWdoXS5wYXJlbnQpOworI2VuZGlmCisJCXJldHVybiAmY3R4LT5kaXJfaW5mby0+YXJyYXlbaGlnaF07CisJfQorCisJd2hpbGUgKGxvdyA8IGhpZ2gpIHsKKwkJbWlkID0gKGxvdytoaWdoKS8yOworCQlpZiAobWlkID09IGxvdyB8fCBtaWQgPT0gaGlnaCkKKwkJCWJyZWFrOworCQlpZiAoaW5vID09IGN0eC0+ZGlyX2luZm8tPmFycmF5W21pZF0uaW5vKSB7CisjaWZkZWYgRElSSU5GT19ERUJVRworCQkJcHJpbnRmKCIoJWQsJWQsJWQpXG4iLCBpbm8sCisJCQkgICAgICAgY3R4LT5kaXJfaW5mby0+YXJyYXlbbWlkXS5kb3Rkb3QsCisJCQkgICAgICAgY3R4LT5kaXJfaW5mby0+YXJyYXlbbWlkXS5wYXJlbnQpOworI2VuZGlmCisJCQlyZXR1cm4gJmN0eC0+ZGlyX2luZm8tPmFycmF5W21pZF07CisJCX0KKwkJaWYgKGlubyA8IGN0eC0+ZGlyX2luZm8tPmFycmF5W21pZF0uaW5vKQorCQkJaGlnaCA9IG1pZDsKKwkJZWxzZQorCQkJbG93ID0gbWlkOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZTJmc2NrX3B1dF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIHN0cnVjdCBkaXJfaW5mbyAqZGlyKQoreworCXN0cnVjdCBkaXJfaW5mb19kYgkqZGIgPSBjdHgtPmRpcl9pbmZvOworCXN0cnVjdCBkaXJfaW5mb19lbnQJYnVmOworCVREQl9EQVRBCQlrZXksIGRhdGE7CisKKyNpZmRlZiBESVJJTkZPX0RFQlVHCisJcHJpbnRmKCJlMmZzY2tfcHV0X2Rpcl9pbmZvICglZCwgJWQsICVkKS4uLiIsIGRpci0+aW5vLCBkaXItPmRvdGRvdCwKKwkgICAgICAgZGlyLT5wYXJlbnQpOworI2VuZGlmCisKKwlpZiAoIWRiLT50ZGIpCisJCXJldHVybjsKKworCWJ1Zi5wYXJlbnQgPSBkaXItPnBhcmVudDsKKwlidWYuZG90ZG90ID0gZGlyLT5kb3Rkb3Q7CisKKwlrZXkuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZkaXItPmlubzsKKwlrZXkuZHNpemUgPSBzaXplb2YoZXh0Ml9pbm9fdCk7CisJZGF0YS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZjsKKwlkYXRhLmRzaXplID0gc2l6ZW9mKGJ1Zik7CisKKwlpZiAodGRiX3N0b3JlKGRiLT50ZGIsIGtleSwgZGF0YSwgVERCX1JFUExBQ0UpID09IC0xKSB7CisJCXByaW50Zigic3RvcmUgZmFpbGVkOiAlc1xuIiwgdGRiX2Vycm9yc3RyKGRiLT50ZGIpKTsKKwl9CisJcmV0dXJuOworfQorCisvKgorICogRnJlZSB0aGUgZGlyX2luZm8gc3RydWN0dXJlIHdoZW4gaXQgaXNuJ3QgbmVlZGVkIGFueSBtb3JlLgorICovCit2b2lkIGUyZnNja19mcmVlX2Rpcl9pbmZvKGUyZnNja190IGN0eCkKK3sKKwlpZiAoY3R4LT5kaXJfaW5mbykgeworCQlpZiAoY3R4LT5kaXJfaW5mby0+dGRiKQorCQkJdGRiX2Nsb3NlKGN0eC0+ZGlyX2luZm8tPnRkYik7CisJCWlmIChjdHgtPmRpcl9pbmZvLT50ZGJfZm4pIHsKKwkJCXVubGluayhjdHgtPmRpcl9pbmZvLT50ZGJfZm4pOworCQkJZnJlZShjdHgtPmRpcl9pbmZvLT50ZGJfZm4pOworCQl9CisJCWlmIChjdHgtPmRpcl9pbmZvLT5hcnJheSkKKwkJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5kaXJfaW5mby0+YXJyYXkpOworCQljdHgtPmRpcl9pbmZvLT5hcnJheSA9IDA7CisJCWN0eC0+ZGlyX2luZm8tPnNpemUgPSAwOworCQljdHgtPmRpcl9pbmZvLT5jb3VudCA9IDA7CisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5kaXJfaW5mbyk7CisJCWN0eC0+ZGlyX2luZm8gPSAwOworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgY291bnQgb2YgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGluIHRoZSBkaXJfaW5mbyBzdHJ1Y3R1cmUKKyAqLworaW50IGUyZnNja19nZXRfbnVtX2RpcmluZm8oZTJmc2NrX3QgY3R4KQoreworCXJldHVybiBjdHgtPmRpcl9pbmZvID8gY3R4LT5kaXJfaW5mby0+Y291bnQgOiAwOworfQorCitzdHJ1Y3QgZGlyX2luZm9faXRlciAqZTJmc2NrX2Rpcl9pbmZvX2l0ZXJfYmVnaW4oZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBkaXJfaW5mb19pdGVyICppdGVyOworCXN0cnVjdCBkaXJfaW5mb19kYiAqZGIgPSBjdHgtPmRpcl9pbmZvOworCisJaXRlciA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBzaXplb2Yoc3RydWN0IGRpcl9pbmZvX2l0ZXIpLAorCQkJCSAgICAgICJkaXJfaW5mbyBpdGVyYXRvciIpOworCisJaWYgKGRiLT50ZGIpCisJCWl0ZXItPnRkYl9pdGVyID0gdGRiX2ZpcnN0a2V5KGRiLT50ZGIpOworCisJcmV0dXJuIGl0ZXI7Cit9CisKK3ZvaWQgZTJmc2NrX2Rpcl9pbmZvX2l0ZXJfZW5kKGUyZnNja190IGN0eCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBzdHJ1Y3QgZGlyX2luZm9faXRlciAqaXRlcikKK3sKKwlmcmVlKGl0ZXItPnRkYl9pdGVyLmRwdHIpOworCWV4dDJmc19mcmVlX21lbSgmaXRlcik7Cit9CisKKy8qCisgKiBBIHNpbXBsZSBpbnRlcmF0b3IgZnVuY3Rpb24KKyAqLworc3RydWN0IGRpcl9pbmZvICplMmZzY2tfZGlyX2luZm9faXRlcihlMmZzY2tfdCBjdHgsIHN0cnVjdCBkaXJfaW5mb19pdGVyICppdGVyKQoreworCVREQl9EQVRBIGRhdGEsIGtleTsKKwlzdHJ1Y3QgZGlyX2luZm9fZGIgKmRiID0gY3R4LT5kaXJfaW5mbzsKKwlzdHJ1Y3QgZGlyX2luZm9fZW50ICpidWY7CisJc3RhdGljIHN0cnVjdCBkaXJfaW5mbyByZXRfZGlyX2luZm87CisKKwlpZiAoIWN0eC0+ZGlyX2luZm8gfHwgIWl0ZXIpCisJCXJldHVybiAwOworCisJaWYgKGRiLT50ZGIpIHsKKwkJaWYgKGl0ZXItPnRkYl9pdGVyLmRwdHIgPT0gMCkKKwkJCXJldHVybiAwOworCQlrZXkgPSBpdGVyLT50ZGJfaXRlcjsKKwkJZGF0YSA9IHRkYl9mZXRjaChkYi0+dGRiLCBrZXkpOworCQlpZiAoIWRhdGEuZHB0cikgeworCQkJcHJpbnRmKCJpdGVyIGZldGNoIGZhaWxlZDogJXNcbiIsCisJCQkgICAgICAgdGRiX2Vycm9yc3RyKGRiLT50ZGIpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJ1ZiA9IChzdHJ1Y3QgZGlyX2luZm9fZW50ICopIGRhdGEuZHB0cjsKKwkJcmV0X2Rpcl9pbmZvLmlubyA9ICooKGV4dDJfaW5vX3QgKikgaXRlci0+dGRiX2l0ZXIuZHB0cik7CisJCXJldF9kaXJfaW5mby5kb3Rkb3QgPSBidWYtPmRvdGRvdDsKKwkJcmV0X2Rpcl9pbmZvLnBhcmVudCA9IGJ1Zi0+cGFyZW50OworCQlpdGVyLT50ZGJfaXRlciA9IHRkYl9uZXh0a2V5KGRiLT50ZGIsIGtleSk7CisJCWZyZWUoa2V5LmRwdHIpOworCQlmcmVlKGRhdGEuZHB0cik7CisJCXJldHVybiAmcmV0X2Rpcl9pbmZvOworCX0KKworCWlmIChpdGVyLT5pID49IGN0eC0+ZGlyX2luZm8tPmNvdW50KQorCQlyZXR1cm4gMDsKKworI2lmZGVmIERJUklORk9fREVCVUcKKwlwcmludGYoIml0ZXIoJWQsICVkLCAlZCkuLi4iLCBjdHgtPmRpcl9pbmZvLT5hcnJheVtpdGVyLT5pXS5pbm8sCisJICAgICAgIGN0eC0+ZGlyX2luZm8tPmFycmF5W2l0ZXItPmldLmRvdGRvdCwKKwkgICAgICAgY3R4LT5kaXJfaW5mby0+YXJyYXlbaXRlci0+aV0ucGFyZW50KTsKKyNlbmRpZgorCWN0eC0+ZGlyX2luZm8tPmxhc3RfbG9va3VwID0gY3R4LT5kaXJfaW5mby0+YXJyYXkgKyBpdGVyLT5pKys7CisJcmV0dXJuKGN0eC0+ZGlyX2luZm8tPmxhc3RfbG9va3VwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBzZXRzIHRoZSBwYXJlbnQgcG9pbnRlciwgYW5kIHJlcXVpcmVzIHRoYXQKKyAqIGRpcmluZm8gc3RydWN0dXJlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KKyAqLworaW50IGUyZnNja19kaXJfaW5mb19zZXRfcGFyZW50KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgICAgZXh0Ml9pbm9fdCBwYXJlbnQpCit7CisJc3RydWN0IGRpcl9pbmZvICpwOworCisJcCA9IGUyZnNja19nZXRfZGlyX2luZm8oY3R4LCBpbm8pOworCWlmICghcCkKKwkJcmV0dXJuIDE7CisJcC0+cGFyZW50ID0gcGFyZW50OworCWUyZnNja19wdXRfZGlyX2luZm8oY3R4LCBwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBzZXRzIHRoZSBkb3QgZG90IHBvaW50ZXIsIGFuZCByZXF1aXJlcyB0aGF0CisgKiBkaXJpbmZvIHN0cnVjdHVyZSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuCisgKi8KK2ludCBlMmZzY2tfZGlyX2luZm9fc2V0X2RvdGRvdChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGV4dDJfaW5vX3QgZG90ZG90KQoreworCXN0cnVjdCBkaXJfaW5mbyAqcDsKKworCXAgPSBlMmZzY2tfZ2V0X2Rpcl9pbmZvKGN0eCwgaW5vKTsKKwlpZiAoIXApCisJCXJldHVybiAxOworCXAtPmRvdGRvdCA9IGRvdGRvdDsKKwllMmZzY2tfcHV0X2Rpcl9pbmZvKGN0eCwgcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc2V0cyB0aGUgcGFyZW50IHBvaW50ZXIsIGFuZCByZXF1aXJlcyB0aGF0CisgKiBkaXJpbmZvIHN0cnVjdHVyZSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuCisgKi8KK2ludCBlMmZzY2tfZGlyX2luZm9fZ2V0X3BhcmVudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGV4dDJfaW5vX3QgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgZGlyX2luZm8gKnA7CisKKwlwID0gZTJmc2NrX2dldF9kaXJfaW5mbyhjdHgsIGlubyk7CisJaWYgKCFwKQorCQlyZXR1cm4gMTsKKwkqcGFyZW50ID0gcC0+cGFyZW50OworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IHNldHMgdGhlIGRvdCBkb3QgcG9pbnRlciwgYW5kIHJlcXVpcmVzIHRoYXQKKyAqIGRpcmluZm8gc3RydWN0dXJlIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KKyAqLworaW50IGUyZnNja19kaXJfaW5mb19nZXRfZG90ZG90KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgICAgZXh0Ml9pbm9fdCAqZG90ZG90KQoreworCXN0cnVjdCBkaXJfaW5mbyAqcDsKKworCXAgPSBlMmZzY2tfZ2V0X2Rpcl9pbmZvKGN0eCwgaW5vKTsKKwlpZiAoIXApCisJCXJldHVybiAxOworCSpkb3Rkb3QgPSBwLT5kb3Rkb3Q7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZHhfZGlyaW5mby5jIGIvZTJmc3Byb2dzL2UyZnNjay9keF9kaXJpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0OGQzMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svZHhfZGlyaW5mby5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogZGlyaW5mby5jIC0tLSBtYWludGFpbnMgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiB0YWJsZSBmb3IgZTJmc2NrLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaWZkZWYgRU5BQkxFX0hUUkVFCisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgY2FsbGVkIGR1cmluZyBwYXNzMSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgaW5mbworICogZW50cnkuICBEdXJpbmcgcGFzczEsIHRoZSBwYXNzZWQtaW4gcGFyZW50IGlzIDA7IGl0IHdpbGwgZ2V0IGZpbGxlZAorICogaW4gZHVyaW5nIHBhc3MyLgorICovCit2b2lkIGUyZnNja19hZGRfZHhfZGlyKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGludCBudW1fYmxvY2tzKQoreworCXN0cnVjdCBkeF9kaXJfaW5mbyAqZGlyOworCWludAkJaSwgajsKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGxvbmcJb2xkX3NpemU7CisKKyNpZiAwCisJcHJpbnRmKCJhZGRfZHhfZGlyX2luZm8gZm9yIGlub2RlICVsdS4uLlxuIiwgaW5vKTsKKyNlbmRpZgorCWlmICghY3R4LT5keF9kaXJfaW5mbykgeworCQljdHgtPmR4X2Rpcl9pbmZvX2NvdW50ID0gMDsKKwkJY3R4LT5keF9kaXJfaW5mb19zaXplID0gMTAwOyAvKiBHdWVzcyAqLworCQljdHgtPmR4X2Rpcl9pbmZvICA9IChzdHJ1Y3QgZHhfZGlyX2luZm8gKikKKwkJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBjdHgtPmR4X2Rpcl9pbmZvX3NpemUKKwkJCQkJICAgICAgICogc2l6ZW9mIChzdHJ1Y3QgZHhfZGlyX2luZm8pLAorCQkJCQkgICAgICAgImRpcmVjdG9yeSBtYXAiKTsKKwl9CisKKwlpZiAoY3R4LT5keF9kaXJfaW5mb19jb3VudCA+PSBjdHgtPmR4X2Rpcl9pbmZvX3NpemUpIHsKKwkJb2xkX3NpemUgPSBjdHgtPmR4X2Rpcl9pbmZvX3NpemUgKiBzaXplb2Yoc3RydWN0IGR4X2Rpcl9pbmZvKTsKKwkJY3R4LT5keF9kaXJfaW5mb19zaXplICs9IDEwOworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwgY3R4LT5keF9kaXJfaW5mb19zaXplICoKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBkeF9kaXJfaW5mbyksCisJCQkJCSAgICZjdHgtPmR4X2Rpcl9pbmZvKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY3R4LT5keF9kaXJfaW5mb19zaXplIC09IDEwOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBOb3JtYWxseSwgYWRkX2R4X2Rpcl9pbmZvIGlzIGNhbGxlZCB3aXRoIGVhY2ggaW5vZGUgaW4KKwkgKiBzZXF1ZW50aWFsIG9yZGVyOyBidXQgb25jZSBpbiBhIHdoaWxlIChsaWtlIHdoZW4gcGFzcyAzCisJICogbmVlZHMgdG8gcmVjcmVhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IG9yIGxvc3QrZm91bmQKKwkgKiBkaXJlY3RvcnkpIGl0IGlzIGNhbGxlZCBvdXQgb2Ygb3JkZXIuICBJbiB0aG9zZSBjYXNlcywgd2UKKwkgKiBuZWVkIHRvIG1vdmUgdGhlIGR4X2Rpcl9pbmZvIGVudHJpZXMgZG93biB0byBtYWtlIHJvb20sIHNpbmNlCisJICogdGhlIGR4X2Rpcl9pbmZvIGFycmF5IG5lZWRzIHRvIGJlIHNvcnRlZCBieSBpbm9kZSBudW1iZXIgZm9yCisJICogZ2V0X2R4X2Rpcl9pbmZvKCkncyBzYWtlLgorCSAqLworCWlmIChjdHgtPmR4X2Rpcl9pbmZvX2NvdW50ICYmCisJICAgIGN0eC0+ZHhfZGlyX2luZm9bY3R4LT5keF9kaXJfaW5mb19jb3VudC0xXS5pbm8gPj0gaW5vKSB7CisJCWZvciAoaSA9IGN0eC0+ZHhfZGlyX2luZm9fY291bnQtMTsgaSA+IDA7IGktLSkKKwkJCWlmIChjdHgtPmR4X2Rpcl9pbmZvW2ktMV0uaW5vIDwgaW5vKQorCQkJCWJyZWFrOworCQlkaXIgPSAmY3R4LT5keF9kaXJfaW5mb1tpXTsKKwkJaWYgKGRpci0+aW5vICE9IGlubykKKwkJCWZvciAoaiA9IGN0eC0+ZHhfZGlyX2luZm9fY291bnQrKzsgaiA+IGk7IGotLSkKKwkJCQljdHgtPmR4X2Rpcl9pbmZvW2pdID0gY3R4LT5keF9kaXJfaW5mb1tqLTFdOworCX0gZWxzZQorCQlkaXIgPSAmY3R4LT5keF9kaXJfaW5mb1tjdHgtPmR4X2Rpcl9pbmZvX2NvdW50KytdOworCisJZGlyLT5pbm8gPSBpbm87CisJZGlyLT5udW1ibG9ja3MgPSBudW1fYmxvY2tzOworCWRpci0+aGFzaHZlcnNpb24gPSAwOworCWRpci0+ZHhfYmxvY2sgPSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgbnVtX2Jsb2NrcworCQkJCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGR4X2RpcmJsb2NrX2luZm8pLAorCQkJCSAgICAgICAiZHhfYmxvY2sgaW5mbyBhcnJheSIpOworCit9CisKKy8qCisgKiBnZXRfZHhfZGlyX2luZm8oKSAtLS0gZ2l2ZW4gYW4gaW5vZGUgbnVtYmVyLCB0cnkgdG8gZmluZCB0aGUgZGlyZWN0b3J5CisgKiBpbmZvcm1hdGlvbiBlbnRyeSBmb3IgaXQuCisgKi8KK3N0cnVjdCBkeF9kaXJfaW5mbyAqZTJmc2NrX2dldF9keF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vKQoreworCWludAlsb3csIGhpZ2gsIG1pZDsKKworCWxvdyA9IDA7CisJaGlnaCA9IGN0eC0+ZHhfZGlyX2luZm9fY291bnQtMTsKKwlpZiAoIWN0eC0+ZHhfZGlyX2luZm8pCisJCXJldHVybiAwOworCWlmIChpbm8gPT0gY3R4LT5keF9kaXJfaW5mb1tsb3ddLmlubykKKwkJcmV0dXJuICZjdHgtPmR4X2Rpcl9pbmZvW2xvd107CisJaWYgIChpbm8gPT0gY3R4LT5keF9kaXJfaW5mb1toaWdoXS5pbm8pCisJCXJldHVybiAmY3R4LT5keF9kaXJfaW5mb1toaWdoXTsKKworCXdoaWxlIChsb3cgPCBoaWdoKSB7CisJCW1pZCA9IChsb3craGlnaCkvMjsKKwkJaWYgKG1pZCA9PSBsb3cgfHwgbWlkID09IGhpZ2gpCisJCQlicmVhazsKKwkJaWYgKGlubyA9PSBjdHgtPmR4X2Rpcl9pbmZvW21pZF0uaW5vKQorCQkJcmV0dXJuICZjdHgtPmR4X2Rpcl9pbmZvW21pZF07CisJCWlmIChpbm8gPCBjdHgtPmR4X2Rpcl9pbmZvW21pZF0uaW5vKQorCQkJaGlnaCA9IG1pZDsKKwkJZWxzZQorCQkJbG93ID0gbWlkOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgdGhlIGR4X2Rpcl9pbmZvIHN0cnVjdHVyZSB3aGVuIGl0IGlzbid0IG5lZWRlZCBhbnkgbW9yZS4KKyAqLwordm9pZCBlMmZzY2tfZnJlZV9keF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgpCit7CisJaW50CWk7CisJc3RydWN0IGR4X2Rpcl9pbmZvICpkaXI7CisKKwlpZiAoY3R4LT5keF9kaXJfaW5mbykgeworCQlkaXIgPSBjdHgtPmR4X2Rpcl9pbmZvOworCQlmb3IgKGk9MDsgaSA8IGN0eC0+ZHhfZGlyX2luZm9fY291bnQ7IGkrKyxkaXIrKykgeworCQkJaWYgKGRpci0+ZHhfYmxvY2spIHsKKwkJCQlleHQyZnNfZnJlZV9tZW0oJmRpci0+ZHhfYmxvY2spOworCQkJCWRpci0+ZHhfYmxvY2sgPSAwOworCQkJfQorCQl9CisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5keF9kaXJfaW5mbyk7CisJCWN0eC0+ZHhfZGlyX2luZm8gPSAwOworCX0KKwljdHgtPmR4X2Rpcl9pbmZvX3NpemUgPSAwOworCWN0eC0+ZHhfZGlyX2luZm9fY291bnQgPSAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBjb3VudCBvZiBudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW4gdGhlIGR4X2Rpcl9pbmZvIHN0cnVjdHVyZQorICovCitpbnQgZTJmc2NrX2dldF9udW1fZHhfZGlyaW5mbyhlMmZzY2tfdCBjdHgpCit7CisJcmV0dXJuIGN0eC0+ZHhfZGlyX2luZm9fY291bnQ7Cit9CisKKy8qCisgKiBBIHNpbXBsZSBpbnRlcmF0b3IgZnVuY3Rpb24KKyAqLworc3RydWN0IGR4X2Rpcl9pbmZvICplMmZzY2tfZHhfZGlyX2luZm9faXRlcihlMmZzY2tfdCBjdHgsIGludCAqY29udHJvbCkKK3sKKwlpZiAoKmNvbnRyb2wgPj0gY3R4LT5keF9kaXJfaW5mb19jb3VudCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4oY3R4LT5keF9kaXJfaW5mbyArICgqY29udHJvbCkrKyk7Cit9CisKKyNlbmRpZiAvKiBFTkFCTEVfSFRSRUUgKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZTJmc2NrLjguaW4gYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZWQ3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay44LmluCkBAIC0wLDAgKzEsNDE3IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIEUyRlNDSyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitlMmZzY2sgXC0gY2hlY2sgYSBMaW51eCBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbQorLlNIIFNZTk9QU0lTCisuQiBlMmZzY2sKK1sKKy5CIFwtcGFjbnlyZGZrdnRERlYKK10KK1sKKy5CIFwtYgorLkkgc3VwZXJibG9jaworXQorWworLkIgXC1CCisuSSBibG9ja3NpemUKK10KK1sKKy5CUiBcLWwgfCBcLUwKKy5JIGJhZF9ibG9ja3NfZmlsZQorXQorWworLkIgXC1DCisuSSBmZAorXQorQEpERVZAWworQEpERVZALkIgXC1qCitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBdCitbCisuQiBcLUUKKy5JIGV4dGVuZGVkX29wdGlvbnMKK10KKy5JIGRldmljZQorLlNIIERFU0NSSVBUSU9OCisuQiBlMmZzY2sKK2lzIHVzZWQgdG8gY2hlY2sgdGhlIGV4dDIvZXh0My9leHQ0IGZhbWlseSBvZiBmaWxlIHN5c3RlbXMuICAgCitGb3IgZXh0MyBhbmQgZXh0NCBmaWxlc3lzdGVtcyB0aGF0IHVzZSBhIGpvdXJuYWwsIGlmIHRoZSBzeXN0ZW0gaGFzIGJlZW4KK3NodXQgZG93biB1bmNsZWFubHkgd2l0aG91dCBhbnkgZXJyb3JzLCBub3JtYWxseSwgYWZ0ZXIgcmVwbGF5aW5nIHRoZQorY29tbWl0dGVkIHRyYW5zYWN0aW9ucyAgaW4gdGhlIGpvdXJuYWwsIHRoZSBmaWxlIHN5c3RlbSBzaG91bGQgYmUKK21hcmtlZCBhcyBjbGVhbi4gICBIZW5jZSwgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGpvdXJuYWxsaW5nLAorLkIgZTJmc2NrCit3aWxsIG5vcm1hbGx5IHJlcGxheSB0aGUgam91cm5hbCBhbmQgZXhpdCwgdW5sZXNzIGl0cyBzdXBlcmJsb2NrCitpbmRpY2F0ZXMgdGhhdCBmdXJ0aGVyIGNoZWNraW5nIGlzIHJlcXVpcmVkLgorLlBQCisuSSBkZXZpY2UKK2lzIHRoZSBkZXZpY2UgZmlsZSB3aGVyZSB0aGUgZmlsZXN5c3RlbSBpcyBzdG9yZWQgKGUuZy4KKy5JUiAvZGV2L2hkYzEgKS4KKy5QUAorTm90ZSB0aGF0IGluIGdlbmVyYWwgaXQgaXMgbm90IHNhZmUgdG8gcnVuCisuQiBlMmZzY2sKK29uIG1vdW50ZWQgZmlsZXN5c3RlbXMuICBUaGUgb25seSBleGNlcHRpb24gaXMgaWYgdGhlCisuQiBcLW4KK29wdGlvbiBpcyBzcGVjaWZpZWQsIGFuZCAKKy5CUiBcLWMgLCAKKy5CUiBcLWwgLAorb3IKKy5CIC1MCitvcHRpb25zIGFyZSAKKy5JIG5vdAorc3BlY2lmaWVkLiAgIEhvd2V2ZXIsIGV2ZW4gaWYgaXQgaXMgc2FmZSB0byBkbyBzbywgdGhlIHJlc3VsdHMgcHJpbnRlZCBieQorLkIgZTJmc2NrCithcmUgbm90IHZhbGlkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgCisuQiBlMmZzY2sKK2Fza3Mgd2hldGhlciBvciBub3QgeW91IHNob3VsZCBjaGVjayBhIGZpbGVzeXN0ZW0gd2hpY2ggaXMgbW91bnRlZCwgCit0aGUgb25seSBjb3JyZWN0IGFuc3dlciBpcyBgYG5vJycuICBPbmx5IGV4cGVydHMgd2hvIHJlYWxseSBrbm93IHdoYXQKK3RoZXkgYXJlIGRvaW5nIHNob3VsZCBjb25zaWRlciBhbnN3ZXJpbmcgdGhpcyBxdWVzdGlvbiBpbiBhbnkgb3RoZXIgd2F5LgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1hIAorVGhpcyBvcHRpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgCisuQiBcLXAKK29wdGlvbi4gIEl0IGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5OyBpdCBpcworc3VnZ2VzdGVkIHRoYXQgcGVvcGxlIHVzZSAKKy5CIFwtcCAKK29wdGlvbiB3aGVuZXZlciBwb3NzaWJsZS4KKy5UUAorLkJJIFwtYiAiIHN1cGVyYmxvY2siCitJbnN0ZWFkIG9mIHVzaW5nIHRoZSBub3JtYWwgc3VwZXJibG9jaywgdXNlIGFuIGFsdGVybmF0aXZlIHN1cGVyYmxvY2sKK3NwZWNpZmllZCBieSAKKy5JUiBzdXBlcmJsb2NrIC4KK1RoaXMgb3B0aW9uIGlzIG5vcm1hbGx5IHVzZWQgd2hlbiB0aGUgcHJpbWFyeSBzdXBlcmJsb2NrIGhhcyBiZWVuCitjb3JydXB0ZWQuICBUaGUgbG9jYXRpb24gb2YgdGhlIGJhY2t1cCBzdXBlcmJsb2NrIGlzIGRlcGVuZGVudCBvbiB0aGUKK2ZpbGVzeXN0ZW0ncyBibG9ja3NpemUuICBGb3IgZmlsZXN5c3RlbXMgd2l0aCAxayBibG9ja3NpemVzLCBhIGJhY2t1cAorc3VwZXJibG9jayBjYW4gYmUgZm91bmQgYXQgYmxvY2sgODE5MzsgZm9yIGZpbGVzeXN0ZW1zIHdpdGggMmsKK2Jsb2Nrc2l6ZXMsIGF0IGJsb2NrIDE2Mzg0OyBhbmQgZm9yIDRrIGJsb2Nrc2l6ZXMsIGF0IGJsb2NrIDMyNzY4LiAgCisuSVAKK0FkZGl0aW9uYWwgYmFja3VwIHN1cGVyYmxvY2tzIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZSAKKy5CIG1rZTJmcyAKK3Byb2dyYW0gdXNpbmcgdGhlIAorLkIgXC1uCitvcHRpb24gdG8gcHJpbnQgb3V0IHdoZXJlIHRoZSBzdXBlcmJsb2NrcyB3ZXJlIGNyZWF0ZWQuICAgVGhlIAorLkIgXC1iIAorb3B0aW9uIHRvIAorLkJSIG1rZTJmcyAsCit3aGljaCBzcGVjaWZpZXMgYmxvY2tzaXplIG9mIHRoZSBmaWxlc3lzdGVtIG11c3QgYmUgc3BlY2lmaWVkIGluIG9yZGVyCitmb3IgdGhlIHN1cGVyYmxvY2sgbG9jYXRpb25zIHRoYXQgYXJlIHByaW50ZWQgb3V0IHRvIGJlIGFjY3VyYXRlLgorLklQCitJZiBhbiBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrIGlzIHNwZWNpZmllZCBhbmQgIAordGhlIGZpbGVzeXN0ZW0gaXMgbm90IG9wZW5lZCByZWFkLW9ubHksIGUyZnNjayB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZQorcHJpbWFyeSBzdXBlcmJsb2NrIGlzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSB1cG9uIGNvbXBsZXRpb24gb2YgdGhlIAorZmlsZXN5c3RlbSBjaGVjay4KKy5UUAorLkJJIFwtQiAiIGJsb2Nrc2l6ZSIKK05vcm1hbGx5LCAKKy5CIGUyZnNjaword2lsbCBzZWFyY2ggZm9yIHRoZSBzdXBlcmJsb2NrIGF0IHZhcmlvdXMgZGlmZmVyZW50CitibG9jayBzaXplcyBpbiBhbiBhdHRlbXB0IHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGJsb2NrIHNpemUuCitUaGlzIHNlYXJjaCBjYW4gYmUgZm9vbGVkIGluIHNvbWUgY2FzZXMuICBUaGlzIG9wdGlvbiBmb3JjZXMgCisuQiBlMmZzY2sKK3RvIG9ubHkgdHJ5IGxvY2F0aW5nIHRoZSBzdXBlcmJsb2NrIGF0IGEgcGFydGljdWxhciBibG9ja3NpemUuCitJZiB0aGUgc3VwZXJibG9jayBpcyBub3QgZm91bmQsIAorLkIgZTJmc2NrIAord2lsbCB0ZXJtaW5hdGUgd2l0aCBhIGZhdGFsIGVycm9yLgorLlRQCisuQiBcLWMKK1RoaXMgb3B0aW9uIGNhdXNlcyAKKy5CIGUyZnNjayAKK3RvIHVzZSAKKy5CUiBiYWRibG9ja3MgKDgpCitwcm9ncmFtIHRvIGRvIGEgcmVhZC1vbmx5IHNjYW4gb2YgdGhlIGRldmljZSBpbiBvcmRlciB0byBmaW5kIGFueSBiYWQKK2Jsb2Nrcy4gIElmIGFueSBiYWQgYmxvY2tzIGFyZSBmb3VuZCwgdGhleSBhcmUgYWRkZWQgdG8gdGhlIGJhZCBibG9jaworaW5vZGUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYWxsb2NhdGVkIHRvIGEgZmlsZSBvciBkaXJlY3RvcnkuICBJZgordGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIHR3aWNlLCB0aGVuIHRoZSBiYWQgYmxvY2sgc2NhbiB3aWxsIGJlIGRvbmUKK3VzaW5nIGEgbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdC4KKy5UUAorLkJJIFwtQyAiIGZkIgorVGhpcyBvcHRpb24gY2F1c2VzCisuQiBlMmZzY2sKK3RvIHdyaXRlIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gdG8gdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgCitzbyB0aGF0IHRoZSBwcm9ncmVzcyBvZiB0aGUgZmlsZXN5c3RlbSAKK2NoZWNrIGNhbiBiZSBtb25pdG9yZWQuICBUaGlzIG9wdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBwcm9ncmFtcyAKK3doaWNoIGFyZSBydW5uaW5nCisuQlIgZTJmc2NrIC4KK0lmIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIGlzIG5lZ2F0aXZlLCB0aGVuIGFic29sdXRlIHZhbHVlIG9mCit0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgdXNlZCwgYW5kIHRoZSBwcm9ncmVzcyBpbmZvcm1hdGlvbiB3aWxsIGJlCitzdXBwcmVzc2VkIGluaXRpYWxseS4gIEl0IGNhbiBsYXRlciBiZSBlbmFibGVkIGJ5IHNlbmRpbmcgdGhlCisuQiBlMmZzY2sKK3Byb2Nlc3MgYSBTSUdVU1IxIHNpZ25hbC4KK0lmIHRoZSBmaWxlIGRlc2NyaXB0b3Igc3BlY2lmaWVkIGlzIDAsIAorLkIgZTJmc2NrCit3aWxsIHByaW50IGEgY29tcGxldGlvbiBiYXIgYXMgaXQgZ29lcyBhYm91dCBpdHMgYnVzaW5lc3MuICBUaGlzIHJlcXVpcmVzCit0aGF0IGUyZnNjayBpcyBydW5uaW5nIG9uIGEgdmlkZW8gY29uc29sZSBvciB0ZXJtaW5hbC4KKy5UUAorLkIgXC1kCitQcmludCBkZWJ1Z2dpbmcgb3V0cHV0ICh1c2VsZXNzIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZworLkJSIGUyZnNjayApLgorLlRQCisuQiBcLUQKK09wdGltaXplIGRpcmVjdG9yaWVzIGluIGZpbGVzeXN0ZW0uICBUaGlzIG9wdGlvbiBjYXVzZXMgZTJmc2NrIHRvCit0cnkgdG8gb3B0aW1pemUgYWxsIGRpcmVjdG9yaWVzLCBlaXRoZXIgYnkgcmVpbmRleGluZyB0aGVtIGlmIHRoZQorZmlsZXN5c3RlbSBzdXBwb3J0cyBkaXJlY3RvcnkgaW5kZXhpbmcsICBvciBieSBzb3J0aW5nIGFuZCBjb21wcmVzc2luZworZGlyZWN0b3JpZXMgZm9yIHNtYWxsZXIgZGlyZWN0b3JpZXMsIG9yIGZvciBmaWxlc3lzdGVtcyB1c2luZwordHJhZGl0aW9uYWwgbGluZWFyIGRpcmVjdG9yaWVzLgorLklQCitFdmVuIHdpdGhvdXQgdGhlCisuQiBcLUQKK29wdGlvbiwKKy5CIGUyZnNjaworbWF5IHNvbWV0aW1lcyBvcHRpbWl6ZSBhIGZldyBkaXJlY3RvcmllcyAtLS0gZm9yIGV4YW1wbGUsIGlmCitkaXJlY3RvcnkgaW5kZXhpbmcgaXMgZW5hYmxlZCBhbmQgYSBkaXJlY3RvcnkgaXMgbm90IGluZGV4ZWQgYW5kIHdvdWxkCitiZW5lZml0IGZyb20gYmVpbmcgaW5kZXhlZCwgb3IgaWYgdGhlIGluZGV4IHN0cnVjdHVyZXMgYXJlIGNvcnJ1cHRlZAorYW5kIG5lZWQgdG8gYmUgcmVidWlsdC4gIFRoZQorLkIgXC1ECitvcHRpb24gZm9yY2VzIGFsbCBkaXJlY3RvcmllcyBpbiB0aGUgZmlsZXN5c3RlbSB0byBiZSBvcHRpbWl6ZWQuICBUaGlzIGNhbgorc29tZXRpbWVzIG1ha2UgdGhlbSBhIGxpdHRsZSBzbWFsbGVyIGFuZCBzbGlnaHRseSBmYXN0ZXIgdG8gc2VhcmNoLCBidXQKK2luIHByYWN0aWNlLCB5b3Ugc2hvdWxkIHJhcmVseSBuZWVkIHRvIHVzZSB0aGlzIG9wdGlvbi4KKy5JUAorVGhlCisuQiBcLUQKK29wdGlvbiB3aWxsIGRldGVjdCBkaXJlY3RvcnkgZW50cmllcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcyBpbiBhIHNpbmdsZQorZGlyZWN0b3J5LCB3aGljaCBlMmZzY2sgbm9ybWFsbHkgZG9lcyBub3QgZW5mb3JjZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKy5UUAorLkJJIFwtRSAiIGV4dGVuZGVkX29wdGlvbnMiCitTZXQgZTJmc2NrIGV4dGVuZGVkIG9wdGlvbnMuICBFeHRlbmRlZCBvcHRpb25zIGFyZSBjb21tYQorc2VwYXJhdGVkLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgdXNpbmcgdGhlIGVxdWFscyAoJz0nKSBzaWduLiAgVGhlIAorZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5SUyAxLjJpCisuVFAKKy5CSSBlYV92ZXI9IGV4dGVuZGVkX2F0dHJpYnV0ZV92ZXJzaW9uCitTZXQgdGhlIHZlcnNpb24gb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9ja3Mgd2hpY2gKKy5CIGUyZnNjaword2lsbCByZXF1aXJlIHdoaWxlIGNoZWNraW5nIHRoZSBmaWxlc3lzdGVtLiAgVGhlIHZlcnNpb24gbnVtYmVyIG1heSAKK2JlIDEgb3IgMi4gIFRoZSBkZWZhdWx0IGV4dGVuZGVkIGF0dHJpYnV0ZSB2ZXJzaW9uIGZvcm1hdCBpcyAyLgorLlRQCisuQkkgam91cm5hbF9vbmx5CitPbmx5IHJlcGxheSB0aGUgam91cm5hbCBpZiByZXF1aXJlZCwgYnV0IGRvIG5vdCBwZXJmb3JtIGFueSBmdXJ0aGVyIGNoZWNrcworb3IgcmVwYWlycy4KKy5UUAorLkJJIGZyYWdjaGVjaworRHVyaW5nIHBhc3MgMSwgcHJpbnQgYSBkZXRhaWxlZCByZXBvcnQgb2YgYW55IGRpc2NvbnRpZ3VvdXMgYmxvY2tzIGZvcgorZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBkaXNjYXJkCitBdHRlbXB0IHRvIGRpc2NhcmQgZnJlZSBibG9ja3MgYW5kIHVudXNlZCBpbm9kZSBibG9ja3MgYWZ0ZXIgdGhlIGZ1bGwKK2ZpbGVzeXN0ZW0gY2hlY2sgKGRpc2NhcmRpbmcgYmxvY2tzIGlzIHVzZWZ1bCBvbiBzb2xpZCBzdGF0ZSBkZXZpY2VzIGFuZCBzcGFyc2UKKy8gdGhpbi1wcm92aXNpb25lZCBzdG9yYWdlKS4gTm90ZSB0aGF0IGRpc2NhcmQgaXMgZG9uZSBpbiBwYXNzIDUgQUZURVIgdGhlCitmaWxlc3lzdGVtIGhhcyBiZWVuIGZ1bGx5IGNoZWNrZWQgYW5kIG9ubHkgaWYgaXQgZG9lcyBub3QgY29udGFpbiByZWNvZ25pemFibGUKK2Vycm9ycy4gSG93ZXZlciB0aGVyZSBtaWdodCBiZSBjYXNlcyB3aGVyZQorLkIgZTJmc2NrCitkb2VzIG5vdCBmdWxseSByZWNvZ25pemUgYSBwcm9ibGVtIGFuZCBoZW5jZSBpbiB0aGlzIGNhc2UgdGhpcworb3B0aW9uIG1heSBwcmV2ZW50IHlvdSBmcm9tIGZ1cnRoZXIgbWFudWFsIGRhdGEgcmVjb3ZlcnkuCisuVFAKKy5CSSBub2Rpc2NhcmQKK0RvIG5vdCBhdHRlbXB0IHRvIGRpc2NhcmQgZnJlZSBibG9ja3MgYW5kIHVudXNlZCBpbm9kZSBibG9ja3MuIFRoaXMgb3B0aW9uIGlzCitleGFjdGx5IHRoZSBvcHBvc2l0ZSBvZiBkaXNjYXJkIG9wdGlvbi4gVGhpcyBpcyBzZXQgYXMgZGVmYXVsdC4KKy5SRQorLlRQCisuQiBcLWYKK0ZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgdGhlIGZpbGUgc3lzdGVtIHNlZW1zIGNsZWFuLgorLlRQCisuQiBcLUYKK0ZsdXNoIHRoZSBmaWxlc3lzdGVtIGRldmljZSdzIGJ1ZmZlciBjYWNoZXMgYmVmb3JlIGJlZ2lubmluZy4gIE9ubHkKK3JlYWxseSB1c2VmdWwgZm9yIGRvaW5nIAorLkIgZTJmc2NrIAordGltZSB0cmlhbHMuCitASkRFVkAuVFAKK0BKREVWQC5CSSBcLWogIiBleHRlcm5hbC1qb3VybmFsIgorQEpERVZAU2V0IHRoZSBwYXRobmFtZSB3aGVyZSB0aGUgZXh0ZXJuYWwtam91cm5hbCBmb3IgdGhpcyBmaWxlc3lzdGVtIGNhbiBiZQorQEpERVZAZm91bmQuCisuVFAKKy5CSSBcLWsKK1doZW4gY29tYmluZWQgd2l0aCB0aGUgCisuQiBcLWMKK29wdGlvbiwgYW55IGV4aXN0aW5nIGJhZCBibG9ja3MgaW4gdGhlIGJhZCBibG9ja3MgbGlzdCBhcmUgcHJlc2VydmVkLAorYW5kIGFueSBuZXcgYmFkIGJsb2NrcyBmb3VuZCBieSBydW5uaW5nCisuQlIgYmFkYmxvY2tzICg4KSAKK3dpbGwgYmUgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIGJhZCBibG9ja3MgbGlzdC4KKy5UUAorLkJJIFwtbCAiIGZpbGVuYW1lIgorQWRkIHRoZSBibG9jayBudW1iZXJzIGxpc3RlZCBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgCisuSSBmaWxlbmFtZQordG8gdGhlIGxpc3Qgb2YgYmFkIGJsb2Nrcy4gIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZQorb25lIGdlbmVyYXRlZCBieSB0aGUgCisuQlIgYmFkYmxvY2tzICg4KQorcHJvZ3JhbS4gIE5vdGUgdGhhdCB0aGUgYmxvY2sgbnVtYmVycyBhcmUgYmFzZWQgb24gdGhlIGJsb2Nrc2l6ZQorb2YgdGhlIGZpbGVzeXN0ZW0uICBIZW5jZSwgCisuQlIgYmFkYmxvY2tzICg4KQorbXVzdCBiZSBnaXZlbiB0aGUgYmxvY2tzaXplIG9mIHRoZSBmaWxlc3lzdGVtIGluIG9yZGVyIHRvIG9idGFpbiBjb3JyZWN0CityZXN1bHRzLiAgQXMgYSByZXN1bHQsIGl0IGlzIG11Y2ggc2ltcGxlciBhbmQgc2FmZXIgdG8gdXNlIHRoZSAKKy5CIC1jCitvcHRpb24gdG8gCisuQlIgZTJmc2NrICwKK3NpbmNlIGl0IHdpbGwgYXNzdXJlIHRoYXQgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZQorLkIgYmFkYmxvY2tzCitwcm9ncmFtLgorLlRQCisuQkkgXC1MICIgZmlsZW5hbWUiCitTZXQgdGhlIGJhZCBibG9ja3MgbGlzdCB0byBiZSB0aGUgbGlzdCBvZiBibG9ja3Mgc3BlY2lmaWVkIGJ5IAorLklSIGZpbGVuYW1lIC4KKyhUaGlzIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgCisuQiBcLWwKK29wdGlvbiwgZXhjZXB0IHRoZSBiYWQgYmxvY2tzIGxpc3QgaXMgY2xlYXJlZCBiZWZvcmUgdGhlIGJsb2NrcyBsaXN0ZWQKK2luIHRoZSBmaWxlIGFyZSBhZGRlZCB0byB0aGUgYmFkIGJsb2NrcyBsaXN0LikKKy5UUAorLkIgXC1uCitPcGVuIHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSwgYW5kIGFzc3VtZSBhbiBhbnN3ZXIgb2YgYG5vJyB0byBhbGwKK3F1ZXN0aW9ucy4gIEFsbG93cworLkIgZTJmc2NrCit0byBiZSB1c2VkIG5vbi1pbnRlcmFjdGl2ZWx5LiAgVGhpcyBvcHRpb24KK21heSBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIAorLkIgXC1wCitvcgorLkIgXC15CitvcHRpb25zLgorLlRQCisuQiBcLXAKK0F1dG9tYXRpY2FsbHkgcmVwYWlyICgicHJlZW4iKSB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlCisuQiBlMmZzY2sKK3RvIGF1dG9tYXRpY2FsbHkKK2ZpeCBhbnkgZmlsZXN5c3RlbSBwcm9ibGVtcyB0aGF0IGNhbiBiZSBzYWZlbHkgZml4ZWQgd2l0aG91dCBodW1hbgoraW50ZXJ2ZW50aW9uLiAgSWYgCisuQiBlMmZzY2sKK2Rpc2NvdmVycyBhIHByb2JsZW0gd2hpY2ggbWF5IHJlcXVpcmUgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yCit0byB0YWtlIGFkZGl0aW9uYWwgY29ycmVjdGl2ZSBhY3Rpb24sIAorLkIgZTJmc2NrCit3aWxsIHByaW50IGEgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0gYW5kIHRoZW4gZXhpdCB3aXRoIHRoZSB2YWx1ZSA0Citsb2dpY2FsbHkgb3InZWQgaW50byB0aGUgZXhpdCBjb2RlLiAgKFNlZSB0aGUgXGZCRVhJVCBDT0RFXGZSIHNlY3Rpb24uKQorVGhpcyBvcHRpb24gaXMgbm9ybWFsbHkgdXNlZCBieSB0aGUgc3lzdGVtJ3MgYm9vdCBzY3JpcHRzLiAgSXQgbWF5IG5vdCAKK2JlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQorLkIgXC1uCitvcgorLkIgXC15CitvcHRpb25zLgorLlRQCisuQiBcLXIKK1RoaXMgb3B0aW9uIGRvZXMgbm90aGluZyBhdCBhbGw7IGl0IGlzIHByb3ZpZGVkIG9ubHkgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKy5UUAorLkIgXC10CitQcmludCB0aW1pbmcgc3RhdGlzdGljcyBmb3IKKy5CUiBlMmZzY2sgLgorSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgYWRkaXRpb25hbCB0aW1pbmcgc3RhdGlzdGljcyBhcmUgcHJpbnRlZAorb24gYSBwYXNzIGJ5IHBhc3MgYmFzaXMuCisuVFAKKy5CIFwtdgorVmVyYm9zZSBtb2RlLgorLlRQCisuQiBcLVYKK1ByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuCisuVFAKKy5CIFwteQorQXNzdW1lIGFuIGFuc3dlciBvZiBgeWVzJyB0byBhbGwgcXVlc3Rpb25zOyBhbGxvd3MgCisuQiBlMmZzY2sKK3RvIGJlIHVzZWQgbm9uLWludGVyYWN0aXZlbHkuICBUaGlzIG9wdGlvbgorbWF5IG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgCisuQiBcLW4KK29yCisuQiBcLXAKK29wdGlvbnMuCisuU0ggRVhJVCBDT0RFCitUaGUgZXhpdCBjb2RlIHJldHVybmVkIGJ5CisuQiBlMmZzY2sKK2lzIHRoZSBzdW0gb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorLmJyCitcCTBcCVwtXCBObyBlcnJvcnMKKy5icgorXAkxXAlcLVwgRmlsZSBzeXN0ZW0gZXJyb3JzIGNvcnJlY3RlZAorLmJyCitcCTJcCVwtXCBGaWxlIHN5c3RlbSBlcnJvcnMgY29ycmVjdGVkLCBzeXN0ZW0gc2hvdWxkCisuYnIKK1wJXAlcIFwgYmUgcmVib290ZWQKKy5icgorXAk0XAlcLVwgRmlsZSBzeXN0ZW0gZXJyb3JzIGxlZnQgdW5jb3JyZWN0ZWQKKy5icgorXAk4XAlcLVwgT3BlcmF0aW9uYWwgZXJyb3IKKy5icgorXAkxNlwJXC1cIFVzYWdlIG9yIHN5bnRheCBlcnJvcgorLmJyCitcCTMyXAlcLVwgRTJmc2NrIGNhbmNlbGVkIGJ5IHVzZXIgcmVxdWVzdAorLmJyCitcCTEyOFwJXC1cIFNoYXJlZCBsaWJyYXJ5IGVycm9yCisuYnIKKy5TSCBTSUdOQUxTCitUaGUgZm9sbG93aW5nIHNpZ25hbHMgaGF2ZSB0aGUgZm9sbG93aW5nIGVmZmVjdCB3aGVuIHNlbnQgdG8gCisuQlIgZTJmc2NrIC4KKy5UUAorLkIgU0lHVVNSMQorVGhpcyBzaWduYWwgY2F1c2VzCisuQiBlMmZzY2sKK3RvIHN0YXJ0IGRpc3BsYXlpbmcgYSBjb21wbGV0aW9uIGJhciBvciBlbWl0dGluZyBwcm9ncmVzcyBpbmZvcm1hdGlvbi4gIAorKFNlZSBkaXNjdXNzaW9uIG9mIHRoZSAKKy5CIFwtQworb3B0aW9uLikKKy5UUAorLkIgU0lHVVNSMgorVGhpcyBzaWduYWwgY2F1c2VzCisuQiBlMmZzY2sgCit0byBzdG9wIGRpc3BsYXlpbmcgYSBjb21wbGV0aW9uIGJhciBvciBlbWl0dGluZyBwcm9ncmVzcyBpbmZvcm1hdGlvbi4KKy5TSCBSRVBPUlRJTkcgQlVHUworQWxtb3N0IGFueSBwaWVjZSBvZiBzb2Z0d2FyZSB3aWxsIGhhdmUgYnVncy4gIElmIHlvdSBtYW5hZ2UgdG8gZmluZCBhCitmaWxlc3lzdGVtIHdoaWNoIGNhdXNlcyAKKy5CIGUyZnNjawordG8gY3Jhc2gsIG9yIHdoaWNoIAorLkIgZTJmc2NrCitpcyB1bmFibGUgdG8gcmVwYWlyLCBwbGVhc2UgcmVwb3J0IGl0IHRvIHRoZSBhdXRob3IuCisuUFAKK1BsZWFzZSBpbmNsdWRlIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgaW4geW91ciBidWcgcmVwb3J0LgorSWRlYWxseSwgaW5jbHVkZSBhIGNvbXBsZXRlIHRyYW5zY3JpcHQgb2YgdGhlCisuQiBlMmZzY2sKK3J1biwgc28gSSBjYW4gc2VlIGV4YWN0bHkgd2hhdCBlcnJvciBtZXNzYWdlcyBhcmUgZGlzcGxheWVkLiAgKE1ha2Ugc3VyZQordGhlIG1lc3NhZ2VzIHByaW50ZWQgYnkgCisuQiBlMmZzY2sgCithcmUgaW4gRW5nbGlzaDsgaWYgeW91ciBzeXN0ZW0gaGFzIGJlZW4KK2NvbmZpZ3VyZWQgc28gdGhhdCAKKy5CUiBlMmZzY2sgJ3MKK21lc3NhZ2VzIGhhdmUgYmVlbiB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZSwgcGxlYXNlIHNldCB0aGUgdGhlCisuQiBMQ19BTEwKK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvCisuQiBDCitzbyB0aGF0IHRoZSB0cmFuc2NyaXB0IG9mIGUyZnNjaydzIG91dHB1dCB3aWxsIGJlIHVzZWZ1bCB0byBtZS4pCitJZiB5b3UKK2hhdmUgYSB3cml0YWJsZSBmaWxlc3lzdGVtIHdoZXJlIHRoZSB0cmFuc2NyaXB0IGNhbiBiZSBzdG9yZWQsIHRoZSAKKy5CUiBzY3JpcHQgKDEpCitwcm9ncmFtIGlzIGEgaGFuZHkgd2F5IHRvIHNhdmUgdGhlIG91dHB1dCBvZgorLkIgZTJmc2NrCit0byBhIGZpbGUuCisuUFAKK0l0IGlzIGFsc28gdXNlZnVsIHRvIHNlbmQgdGhlIG91dHB1dCBvZiAKKy5CUiBkdW1wZTJmcyAoOCkuCitJZiBhIHNwZWNpZmljIGlub2RlIG9yIGlub2RlcyBzZWVtcyB0byBiZSBnaXZpbmcgCisuQiBlMmZzY2sgCit0cm91YmxlLCB0cnkgcnVubmluZyB0aGUKKy5CUiBkZWJ1Z2ZzICg4KQorY29tbWFuZCBhbmQgc2VuZCB0aGUgb3V0cHV0IG9mIHRoZSAKKy5CUiBzdGF0ICgxdSkKK2NvbW1hbmQgcnVuIG9uIHRoZSByZWxldmFudCBpbm9kZShzKS4gIElmIHRoZSBpbm9kZSBpcyBhIGRpcmVjdG9yeSwgdGhlIAorLkIgZGVidWdmcworLkkgZHVtcAorY29tbWFuZCB3aWxsIGFsbG93IHlvdSB0byBleHRyYWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGlub2RlLAord2hpY2ggY2FuIHNlbnQgdG8gbWUgYWZ0ZXIgYmVpbmcgZmlyc3QgcnVuIHRocm91Z2gKKy5CUiB1dWVuY29kZSAoMSkuICAKK1RoZSBtb3N0IHVzZWZ1bCBkYXRhIHlvdSBjYW4gc2VuZCB0byBoZWxwIHJlcHJvZHVjZQordGhlIGJ1ZyBpcyBhIGNvbXByZXNzZWQgcmF3IGltYWdlIGR1bXAgb2YgdGhlIGZpbGVzeXN0ZW0sIGdlbmVyYXRlZCB1c2luZworLkJSIGUyaW1hZ2UgKDgpLgorU2VlIHRoZSAKKy5CUiBlMmltYWdlICg4KQorbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKy5QUAorQWx3YXlzIGluY2x1ZGUgdGhlIGZ1bGwgdmVyc2lvbiBzdHJpbmcgd2hpY2ggCisuQiBlMmZzY2sKK2Rpc3BsYXlzIHdoZW4gaXQgaXMgcnVuLCBzbyBJIGtub3cgd2hpY2ggdmVyc2lvbiB5b3UgYXJlIHJ1bm5pbmcuCisuU0ggQVVUSE9SCitUaGlzIHZlcnNpb24gb2YgCisuQiBlMmZzY2sKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+LgorLlNIIFNFRSBBTFNPCisuQlIgZTJmc2NrLmNvbmYgKDUpLAorLkJSIGJhZGJsb2NrcyAoOCksCisuQlIgZHVtcGUyZnMgKDgpLAorLkJSIGRlYnVnZnMgKDgpLAorLkJSIGUyaW1hZ2UgKDgpLAorLkJSIG1rZTJmcyAoOCksCisuQlIgdHVuZTJmcyAoOCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZTJmc2NrLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTMxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogZTJmc2NrLmMgLSBhIGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIHRoZSBuZXcgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuIGUyZnNjayBjb250ZXh0CisgKi8KK2VycmNvZGVfdCBlMmZzY2tfYWxsb2NhdGVfY29udGV4dChlMmZzY2tfdCAqcmV0KQoreworCWUyZnNja190CWNvbnRleHQ7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqdGltZV9lbnY7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGUyZnNja19zdHJ1Y3QpLCAmY29udGV4dCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2Yoc3RydWN0IGUyZnNja19zdHJ1Y3QpKTsKKworCWNvbnRleHQtPnByb2Nlc3NfaW5vZGVfc2l6ZSA9IDI1NjsKKwljb250ZXh0LT5leHRfYXR0cl92ZXIgPSAyOworCWNvbnRleHQtPmJsb2Nrc19wZXJfcGFnZSA9IDE7CisJY29udGV4dC0+aHRyZWVfc2xhY2tfcGVyY2VudGFnZSA9IDI1NTsKKworCXRpbWVfZW52ID0gZ2V0ZW52KCJFMkZTQ0tfVElNRSIpOworCWlmICh0aW1lX2VudikKKwkJY29udGV4dC0+bm93ID0gc3RydG91bCh0aW1lX2VudiwgTlVMTCwgMCk7CisJZWxzZSB7CisJCWNvbnRleHQtPm5vdyA9IHRpbWUoMCk7CisJCWlmIChjb250ZXh0LT5ub3cgPCAxMjYyMzIyMDAwKSAvKiBKYW51YXJ5IDEgMjAxMCAqLworCQkJY29udGV4dC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfVElNRV9JTlNBTkU7CisJfQorCisJKnJldCA9IGNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyBhbiBlMmZzY2sgY29udGV4dDsgaXQgaXMgY2FsbGVkIHdoZW4gZTJmc2NrCisgKiBuZWVkcyB0byBiZSByZXN0YXJ0ZWQuCisgKi8KK2VycmNvZGVfdCBlMmZzY2tfcmVzZXRfY29udGV4dChlMmZzY2tfdCBjdHgpCit7CisJaW50CWk7CisKKwljdHgtPmZsYWdzICY9IEUyRl9SRVNFVF9GTEFHUzsKKwljdHgtPmxvc3RfYW5kX2ZvdW5kID0gMDsKKwljdHgtPmJhZF9sb3N0X2FuZF9mb3VuZCA9IDA7CisJaWYgKGN0eC0+aW5vZGVfdXNlZF9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfdXNlZF9tYXApOworCQljdHgtPmlub2RlX3VzZWRfbWFwID0gMDsKKwl9CisJaWYgKGN0eC0+aW5vZGVfZGlyX21hcCkgeworCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV9kaXJfbWFwKTsKKwkJY3R4LT5pbm9kZV9kaXJfbWFwID0gMDsKKwl9CisJaWYgKGN0eC0+aW5vZGVfcmVnX21hcCkgeworCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV9yZWdfbWFwKTsKKwkJY3R4LT5pbm9kZV9yZWdfbWFwID0gMDsKKwl9CisJaWYgKGN0eC0+YmxvY2tfZm91bmRfbWFwKSB7CisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChjdHgtPmJsb2NrX2ZvdW5kX21hcCk7CisJCWN0eC0+YmxvY2tfZm91bmRfbWFwID0gMDsKKwl9CisJaWYgKGN0eC0+aW5vZGVfbGlua19pbmZvKSB7CisJCWV4dDJmc19mcmVlX2ljb3VudChjdHgtPmlub2RlX2xpbmtfaW5mbyk7CisJCWN0eC0+aW5vZGVfbGlua19pbmZvID0gMDsKKwl9CisJaWYgKGN0eC0+am91cm5hbF9pbykgeworCQlpZiAoY3R4LT5mcyAmJiBjdHgtPmZzLT5pbyAhPSBjdHgtPmpvdXJuYWxfaW8pCisJCQlpb19jaGFubmVsX2Nsb3NlKGN0eC0+am91cm5hbF9pbyk7CisJCWN0eC0+am91cm5hbF9pbyA9IDA7CisJfQorCWlmIChjdHgtPmZzICYmIGN0eC0+ZnMtPmRibGlzdCkgeworCQlleHQyZnNfZnJlZV9kYmxpc3QoY3R4LT5mcy0+ZGJsaXN0KTsKKwkJY3R4LT5mcy0+ZGJsaXN0ID0gMDsKKwl9CisJZTJmc2NrX2ZyZWVfZGlyX2luZm8oY3R4KTsKKyNpZmRlZiBFTkFCTEVfSFRSRUUKKwllMmZzY2tfZnJlZV9keF9kaXJfaW5mbyhjdHgpOworI2VuZGlmCisJaWYgKGN0eC0+cmVmY291bnQpIHsKKwkJZWFfcmVmY291bnRfZnJlZShjdHgtPnJlZmNvdW50KTsKKwkJY3R4LT5yZWZjb3VudCA9IDA7CisJfQorCWlmIChjdHgtPnJlZmNvdW50X2V4dHJhKSB7CisJCWVhX3JlZmNvdW50X2ZyZWUoY3R4LT5yZWZjb3VudF9leHRyYSk7CisJCWN0eC0+cmVmY291bnRfZXh0cmEgPSAwOworCX0KKwlpZiAoY3R4LT5ibG9ja19kdXBfbWFwKSB7CisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChjdHgtPmJsb2NrX2R1cF9tYXApOworCQljdHgtPmJsb2NrX2R1cF9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5ibG9ja19lYV9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGN0eC0+YmxvY2tfZWFfbWFwKTsKKwkJY3R4LT5ibG9ja19lYV9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9iYl9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfYmJfbWFwKTsKKwkJY3R4LT5pbm9kZV9iYl9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9iYWRfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2JhZF9tYXApOworCQljdHgtPmlub2RlX2JhZF9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9pbWFnaWNfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2ltYWdpY19tYXApOworCQljdHgtPmlub2RlX2ltYWdpY19tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5kaXJzX3RvX2hhc2gpIHsKKwkJZXh0MmZzX3UzMl9saXN0X2ZyZWUoY3R4LT5kaXJzX3RvX2hhc2gpOworCQljdHgtPmRpcnNfdG9faGFzaCA9IDA7CisJfQorCisJLyoKKwkgKiBDbGVhciB0aGUgYXJyYXkgb2YgaW52YWxpZCBtZXRhLWRhdGEgZmxhZ3MKKwkgKi8KKwlpZiAoY3R4LT5pbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnKSB7CisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5pbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnKTsKKwkJY3R4LT5pbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnID0gMDsKKwl9CisJaWYgKGN0eC0+aW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZykgeworCQlleHQyZnNfZnJlZV9tZW0oJmN0eC0+aW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZyk7CisJCWN0eC0+aW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZyA9IDA7CisJfQorCWlmIChjdHgtPmludmFsaWRfaW5vZGVfdGFibGVfZmxhZykgeworCQlleHQyZnNfZnJlZV9tZW0oJmN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnKTsKKwkJY3R4LT5pbnZhbGlkX2lub2RlX3RhYmxlX2ZsYWcgPSAwOworCX0KKworCS8qIENsZWFyIHN0YXRpc3RpYyBjb3VudGVycyAqLworCWN0eC0+ZnNfZGlyZWN0b3J5X2NvdW50ID0gMDsKKwljdHgtPmZzX3JlZ3VsYXJfY291bnQgPSAwOworCWN0eC0+ZnNfYmxvY2tkZXZfY291bnQgPSAwOworCWN0eC0+ZnNfY2hhcmRldl9jb3VudCA9IDA7CisJY3R4LT5mc19saW5rc19jb3VudCA9IDA7CisJY3R4LT5mc19zeW1saW5rc19jb3VudCA9IDA7CisJY3R4LT5mc19mYXN0X3N5bWxpbmtzX2NvdW50ID0gMDsKKwljdHgtPmZzX2ZpZm9fY291bnQgPSAwOworCWN0eC0+ZnNfdG90YWxfY291bnQgPSAwOworCWN0eC0+ZnNfYmFkYmxvY2tzX2NvdW50ID0gMDsKKwljdHgtPmZzX3NvY2tldHNfY291bnQgPSAwOworCWN0eC0+ZnNfaW5kX2NvdW50ID0gMDsKKwljdHgtPmZzX2RpbmRfY291bnQgPSAwOworCWN0eC0+ZnNfdGluZF9jb3VudCA9IDA7CisJY3R4LT5mc19mcmFnbWVudGVkID0gMDsKKwljdHgtPmZzX2ZyYWdtZW50ZWRfZGlyID0gMDsKKwljdHgtPmxhcmdlX2ZpbGVzID0gMDsKKworCWZvciAoaT0wOyBpIDwgTUFYX0VYVEVOVF9ERVBUSF9DT1VOVDsgaSsrKQorCQljdHgtPmV4dGVudF9kZXB0aF9jb3VudFtpXSA9IDA7CisKKwkvKiBSZXNldCB0aGUgc3VwZXJibG9jayB0byB0aGUgdXNlcidzIHJlcXVlc3RlZCB2YWx1ZSAqLworCWN0eC0+c3VwZXJibG9jayA9IGN0eC0+dXNlX3N1cGVyYmxvY2s7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBlMmZzY2tfZnJlZV9jb250ZXh0KGUyZnNja190IGN0eCkKK3sKKwlpZiAoIWN0eCkKKwkJcmV0dXJuOworCisJZTJmc2NrX3Jlc2V0X2NvbnRleHQoY3R4KTsKKwlpZiAoY3R4LT5ibGtpZCkKKwkJYmxraWRfcHV0X2NhY2hlKGN0eC0+YmxraWQpOworCisJaWYgKGN0eC0+cHJvZmlsZSkKKwkJcHJvZmlsZV9yZWxlYXNlKGN0eC0+cHJvZmlsZSk7CisKKwlpZiAoY3R4LT5maWxlc3lzdGVtX25hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5maWxlc3lzdGVtX25hbWUpOworCisJaWYgKGN0eC0+ZGV2aWNlX25hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmY3R4LT5kZXZpY2VfbmFtZSk7CisKKwlpZiAoY3R4LT5sb2dfZm4pCisJCWZyZWUoY3R4LT5sb2dfZm4pOworCisJZXh0MmZzX2ZyZWVfbWVtKCZjdHgpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBydW5zIHRocm91Z2ggdGhlIGUyZnNjayBwYXNzZXMgYW5kIGNhbGxzIHRoZW0gYWxsLAorICogcmV0dXJuaW5nIHJlc3RhcnQsIGFib3J0LCBvciBjYW5jZWwgYXMgbmVjZXNzYXJ5Li4uCisgKi8KK3R5cGVkZWYgdm9pZCAoKnBhc3NfdCkoZTJmc2NrX3QgY3R4KTsKKworc3RhdGljIHBhc3NfdCBlMmZzY2tfcGFzc2VzW10gPSB7CisJZTJmc2NrX3Bhc3MxLCBlMmZzY2tfcGFzczIsIGUyZnNja19wYXNzMywgZTJmc2NrX3Bhc3M0LAorCWUyZnNja19wYXNzNSwgMCB9OworCisjZGVmaW5lIEUyRl9GTEFHX1JVTl9SRVRVUk4JKEUyRl9GTEFHX1NJR05BTF9NQVNLfEUyRl9GTEFHX1JFU1RBUlQpCisKK2ludCBlMmZzY2tfcnVuKGUyZnNja190IGN0eCkKK3sKKwlpbnQJaTsKKwlwYXNzX3QJZTJmc2NrX3Bhc3M7CisKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisJaWYgKHNldGptcChjdHgtPmFib3J0X2xvYykpIHsKKwkJY3R4LT5mbGFncyAmPSB+RTJGX0ZMQUdfU0VUSk1QX09LOworCQlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SVU5fUkVUVVJOKTsKKwl9CisJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19TRVRKTVBfT0s7CisjZW5kaWYKKworCWZvciAoaT0wOyAoZTJmc2NrX3Bhc3MgPSBlMmZzY2tfcGFzc2VzW2ldKTsgaSsrKSB7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUlVOX1JFVFVSTikKKwkJCWJyZWFrOworCQlpZiAoZTJmc2NrX21tcF91cGRhdGUoY3R4LT5mcykpCisJCQlmYXRhbF9lcnJvcihjdHgsIDApOworCQllMmZzY2tfcGFzcyhjdHgpOworCQlpZiAoY3R4LT5wcm9ncmVzcykKKwkJCSh2b2lkKSAoY3R4LT5wcm9ncmVzcykoY3R4LCAwLCAwLCAwKTsKKwl9CisJY3R4LT5mbGFncyAmPSB+RTJGX0ZMQUdfU0VUSk1QX09LOworCisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SVU5fUkVUVVJOKQorCQlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SVU5fUkVUVVJOKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZTJmc2NrLmNvbmYuNS5pbiBiL2UyZnNwcm9ncy9lMmZzY2svZTJmc2NrLmNvbmYuNS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVhOTUxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9lMmZzY2suY29uZi41LmluCkBAIC0wLDAgKzEsNDMyIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIGUyZnNjay5jb25mIDUgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UyZnNjay5jb25mIFwtIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZTJmc2NrCisuU0ggREVTQ1JJUFRJT04KKy5JIGUyZnNjay5jb25mCitpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciAKKy5CUiBlMmZzY2sgKDgpLiAgCitJdCBjb250cm9scyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiAKKy5CUiBlMmZzY2sgKDgpCit3aGlsZSBpdCBpcyBjaGVja2luZyBleHQyLCBleHQzLCBvciBleHQ0IGZpbGVzeXN0ZW1zLgorLlBQCitUaGUKKy5JIGUyZnNjay5jb25mCitmaWxlIHVzZXMgYW4gSU5JLXN0eWxlIGZvcm1hdC4gIFN0YW56YXMsIG9yIHRvcC1sZXZlbCBzZWN0aW9ucywgYXJlIAorZGVsaW1pdGVkIGJ5IHNxdWFyZSBicmFjZXM6IFsgXS4gIFdpdGhpbiBlYWNoIHNlY3Rpb24sIGVhY2ggbGluZSAKK2RlZmluZXMgYSByZWxhdGlvbiwgd2hpY2ggYXNzaWducyB0YWdzIHRvIHZhbHVlcywgb3IgdG8gYSBzdWJzZWN0aW9uLAord2hpY2ggY29udGFpbnMgZnVydGhlciByZWxhdGlvbnMgb3Igc3Vic2VjdGlvbnMuICAgCisuXCIgVGFncyBjYW4gYmUgYXNzaWduZWQgbXVsdGlwbGUgdmFsdWVzCitBbiBleGFtcGxlIG9mIHRoZSBJTkktc3R5bGUgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgCitmb2xsb3dzIGJlbG93OgorLlAKKwlbc2VjdGlvbjFdCisuYnIKKwkJdGFnMSA9IHZhbHVlX2EKKy5icgorCQl0YWcxID0gdmFsdWVfYgorLmJyCisJCXRhZzIgPSB2YWx1ZV9jCisuUAorCVtzZWN0aW9uIDJdCisuYnIKKwkJdGFnMyA9IHsKKy5icgorCQkJc3VidGFnMSA9IHN1YnRhZ192YWx1ZV9hCisuYnIKKwkJCXN1YnRhZzEgPSBzdWJ0YWdfdmFsdWVfYgorLmJyCisJCQlzdWJ0YWcyID0gc3VidGFnX3ZhbHVlX2MKKy5icgorCQl9CisuYnIKKwkJdGFnMSA9IHZhbHVlX2QKKy5icgorCQl0YWcyID0gdmFsdWVfZQorLmJyCisJfQorLlAKK0NvbW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24gKCc7Jykgb3IgYSBoYXNoICgnIycpIGNoYXJhY3RlciAKK2F0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1lbnQsIGFuZCBhcmUgdGVybWluYXRlZCBieSB0aGUgZW5kIG9mIAorbGluZSBjaGFyYWN0ZXIuCisuUAorVGFncyBhbmQgdmFsdWVzIG11c3QgYmUgcXVvdGVkIHVzaW5nIGRvdWJsZSBxdW90ZXMgaWYgdGhleSBjb250YWluCitzcGFjZXMuICBXaXRoaW4gYSBxdW90ZWQgc3RyaW5nLCB0aGUgc3RhbmRhcmQgYmFja3NsYXNoIGludGVycHJldGF0aW9ucyAKK2FwcGx5OiAiXGVuIiAoZm9yIHRoZSBuZXdsaW5lIGNoYXJhY3RlciksIAorIlxldCIgKGZvciB0aGUgdGFiIGNoYXJhY3RlciksICJcZWIiIChmb3IgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIpLCAKK2FuZCAiXGVcZSIgKGZvciB0aGUgYmFja3NsYXNoIGNoYXJhY3RlcikuCisuUAorVGhlIGZvbGxvd2luZyBzdGFuemFzIGFyZSB1c2VkIGluIHRoZSAKKy5JIGUyZnNjay5jb25mCitmaWxlLiAgVGhleSB3aWxsIGJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBmdXR1cmUgc2VjdGlvbnMgb2YgdGhpcworZG9jdW1lbnQuCisuVFAgCisuSSBbb3B0aW9uc10KK1RoaXMgc3RhbnphIGNvbnRhaW5zIGdlbmVyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciAKKy5CUiBlMmZzY2sgJ3MKK2JlaGF2aW9yLgorLlRQCisuSSBbcHJvYmxlbXNdCitUaGlzIHN0YW56YSBhbGxvd3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gcmVjb25maWd1cmUgaG93IGUyZnNjayBoYW5kbGVzCit2YXJpb3VzIGZpbGVzeXN0ZW0gaW5jb25zaXN0ZW5jaWVzLgorLlRQCisuSSBbc2NyYXRjaF9maWxlc10KK1RoaXMgc3RhbnphIGNvbnRyb2xzIHdoZW4gZTJmc2NrIHdpbGwgYXR0ZW1wdCB0byB1c2Ugc2NyYXRjaCBmaWxlcyB0bworcmVkdWNlIHRoZSBuZWVkIGZvciBtZW1vcnkuCisuU0ggVEhFIFtvcHRpb25zXSBTVEFOWkEKK1RoZSBmb2xsb3dpbmcgcmVsYXRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSAKKy5JIFtvcHRpb25zXQorc3RhbnphLgorLlRQCisuSSBhbGxvd19jYW5jZWxsYXRpb24KK0lmIHRoaXMgcmVsYXRpb24gaXMgc2V0IHRvIGEgYm9vbGVhbiB2YWx1ZSBvZiB0cnVlLCB0aGVuIGlmIHRoZSB1c2VyIAoraW50ZXJydXB0cyBlMmZzY2sgdXNpbmcgXkMsIGFuZCB0aGUgZmlsZXN5c3RlbSBpcyBub3QgZXhwbGljaXRseSBmbGFnZ2VkCithcyBjb250YWluaW5nIGVycm9ycywgZTJmc2NrIHdpbGwgZXhpdCB3aXRoIGFuIGV4aXQgc3RhdHVzIG9mIDAgaW5zdGVhZAorb2YgMzIuICBUaGlzIHNldHRpbmcgZGVmYXVsdHMgdG8gZmFsc2UuCisuVFAKKy5JIGFjY2VwdF90aW1lX2Z1ZGdlCitVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gV2luZG93cycgdW5mb3J0dW5hdGUgZGVzaWduIGRlY2lzaW9uCit0byBjb25maWd1cmUgdGhlIGhhcmR3YXJlIGNsb2NrIHRvIHRpY2sgbG9jYWx0aW1lLCBpbnN0ZWFkCitvZiB0aGUgbW9yZSBwcm9wZXIgYW5kIGxlc3MgZXJyb3ItcHJvbmUgVVRDIHRpbWUsIG1hbnkKK3VzZXJzIGVuZCB1cCBpbiB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBzeXN0ZW0gY2xvY2sgaXMKK2luY29ycmVjdGx5IHNldCBhdCB0aGUgdGltZSB3aGVuIGUyZnNjayBpcyBydW4uCisuSVAKK0hpc3RvcmljYWxseSB0aGlzIHdhcyB1c3VhbGx5IGR1ZSB0byBzb21lIGRpc3RyaWJ1dGlvbnMKK2hhdmluZyBidWdneSBpbml0IHNjcmlwdHMgYW5kL29yIGluc3RhbGxlcnMgdGhhdCBkaWRuJ3QKK2NvcnJlY3RseSBkZXRlY3QgdGhpcyBjYXNlIGFuZCB0YWtlIGFwcHJvcHJpYXRlCitjb3VudGVybWVhc3VyZXMuICBIb3dldmVyLCBpdCdzIHN0aWxsIHBvc3NpYmxlLCBkZXNwaXRlIHRoZQorYmVzdCBlZmZvcnRzIG9mIGluaXQgc2NyaXB0IGFuZCBpbnN0YWxsZXIgYXV0aG9ycyB0byBub3QgYmUKK2FibGUgdG8gZGV0ZWN0IHRoaXMgbWlzY29uZmlndXJhdGlvbiwgdXN1YWxseSBkdWUgdG8gYQorYnVnZ3kgb3IgbWlzY29uZmlndXJlZCB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VyIG9yIHRoZQoraW5zdGFsbGVyIG5vdCBoYXZpbmcgYWNjZXNzIHRvIGEgbmV0d29yayB0aW1lIHNlcnZlcgorZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIFNvIGJ5IGRlZmF1bHQsIHdlIGFsbG93Cit0aGUgc3VwZXJibG9jayB0aW1lcyB0byBiZSBmdWRnZWQgYnkgdXAgdG8gMjQgaG91cnMuCitUaGlzIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nCisuSSBhY2NlcHRfdGltZV9mdWRnZQordG8gdGhlCitib29sZWFuIHZhbHVlIG9mIGZhbHNlLiAgVGhpcyBzZXR0aW5nIGRlZmF1bHRzIHRvIHRydWUuCisuVFAKKy5JIGJyb2tlbl9zeXN0ZW1fY2xvY2sKK1RoZQorLkJSIGUyZnNjayAoOCkKK3Byb2dyYW0gaGFzIHNvbWUgaGV1cmlzdGljcyB0aGF0IGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gY2xvY2sgaXMKK2NvcnJlY3QuICBJbiBhZGRpdGlvbiwgbWFueSBzeXN0ZW0gcHJvZ3JhbXMgbWFrZSBzaW1pbGFyIGFzc3VtcHRpb25zLgorRm9yIGV4YW1wbGUsIHRoZSBVVUlEIGxpYnJhcnkgZGVwZW5kcyBvbiB0aW1lIG5vdCBnb2luZyBiYWNrd2FyZHMgaW4KK29yZGVyIGZvciBpdCB0byBiZSBhYmxlIHRvIG1ha2UgaXRzIGd1YXJhbnRlZXMgYWJvdXQgaXNzdWluZyB1bml2ZXJzYWxseQordW5pcXVlIElEJ3MuICBTeXN0ZW1zIHdpdGggYnJva2VuIHN5c3RlbSBjbG9ja3MsIGFyZSB3ZWxsLCBicm9rZW4uCitIb3dldmVyLCBicm9rZW4gc3lzdGVtIGNsb2NrcywgcGFydGljdWxhcmx5IGluIGVtYmVkZGVkIHN5c3RlbXMsIGRvCitleGlzdC4gIEUyZnNjayB3aWxsIGF0dGVtcHQgdG8gdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0aW1lCitjYW4gbm90IGJlIHRydXN0ZWQ7IGFuZCB0byBza2lwIHRpbWUtYmFzZWQgY2hlY2tzIGlmIHRoaXMgaXMgdHJ1ZS4gIElmCit0aGlzIGJvb2xlYW4gaXMgc2V0IHRvIHRydWUsIHRoZW4gZTJmc2NrIHdpbGwgYWx3YXlzIGFzc3VtZSB0aGF0IHRoZQorc3lzdGVtIGNsb2NrIGNhbiBub3QgYmUgdHJ1c3RlZC4KKy5UUAorLkkgYnVnZ3lfaW5pdF9zY3JpcHRzCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gaXMgYW4gYWxpYXMgZm9yCisuSSBhY2NlcHRfdGltZV9mdWRnZQorZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyBpdCB1c2VkIHRvCitiZSB0aGF0IHRoZSBiZWhhdmlvciBkZWZpbmVkIGJ5CisuSSBhY2NlcHRfdGltZV9mdWRnZQorYWJvdmUgZGVmYXVsdGVkIHRvIGZhbHNlLCBhbmQKKy5JIGJ1Z2d5X2luaXRfc2NyaXB0cword291bGQgZW5hYmxlIHN1cGVyYmxvY2sgdGltZSBmaWVsZCB0byBiZSB3cm9uZyBieSB1cCB0byAyNCBob3Vycy4gIFdoZW4KK3dlIGNoYW5nZWQgdGhlIGRlZmF1bHQsIHdlIGFsc28gcmVuYW1lZCB0aGlzIGJvb2xlYW4gcmVsYXRpb24gdG8KKy5JUiBhY2NlcHRfdGltZV9mdWRnZS4KKy5UUAorLkkgY2xlYXJfdGVzdF9mc19mbGFnCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gY29udHJvbHMgd2hldGhlciBvciBub3QgCisuQlIgZTJmc2NrICg4KQord2lsbCBvZmZlciB0byBjbGVhcgordGhlIHRlc3RfZnMgZmxhZyBpZiB0aGUgZXh0NCBmaWxlc3lzdGVtIGlzIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiAgSXQKK2RlZmF1bHRzIHRvIHRydWUuCisuVFAgCisuSSBkZWZlcl9jaGVja19vbl9iYXR0ZXJ5CitUaGlzIGJvb2xlYW4gcmVsYXRpb24gY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGludGVydmFsIGJldHdlZW4gCitmaWxlc3lzdGVtIGNoZWNrcyAoZWl0aGVyIGJhc2VkIG9uIHRpbWUgb3IgbnVtYmVyIG9mIG1vdW50cykgc2hvdWxkIAorYmUgZG91YmxlZCBpZiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgb24gYmF0dGVyeS4gIFRoaXMgc2V0dGluZyBkZWZhdWx0cyB0byAKK3RydWUuCisuVFAKKy5JIGluZGV4ZWRfZGlyX3NsYWNrX3BlcmNlbnRhZ2UKK1doZW4KKy5CUiBlMmZzY2sgKDgpCityZXBhY2tzIGEgaW5kZXhlZCBkaXJlY3RvcnksIHJlc2VydmUgdGhlIHNwZWNpZmllZCBwZXJjZW50YWdlIG9mCitlbXB0eSBzcGFjZSBpbiBlYWNoIGxlYWYgbm9kZXMgc28gdGhhdCBhIGZldyBuZXcgZW50cmllcyBjYW4KK2JlIGFkZGVkIHRvIHRoZSBkaXJlY3Rvcnkgd2l0aG91dCBzcGxpdHRpbmcgbGVhZiBub2Rlcywgc28gdGhhdAordGhlIGF2ZXJhZ2UgZmlsbCByYXRpbyBvZiBkaXJlY3RvcmllcyBjYW4gYmUgbWFpbnRhaW5lZCBhdCBhCitoaWdoZXIsIG1vcmUgZWZmaWNpZW50IGxldmVsLiAgVGhpcyByZWxhdGlvbiBkZWZhdWx0cyB0byAyMAorcGVyY2VudC4KKy5UUAorLkkgbG9nX2RpcgorSWYgdGhlCisuSSBsb2dfZmlsZW5hbWUKK3JlbGF0aW9uIGNvbnRhaW5zIGEgcmVsYXRpdmUgcGF0aG5hbWUsIHRoZW4gdGhlIGxvZyBmaWxlIHdpbGwgYmUgcGxhY2VkCitpbiB0aGUgZGlyZWN0b3J5IG5hbWVkIGJ5IHRoZQorLkkgbG9nX2RpcgorcmVsYXRpb24uCisuVFAKKy5JIGxvZ19kaXJfZmFsbGJhY2sKK1RoaXMgcmVsYXRpb24gY29udGFpbnMgYW4gYWx0ZXJuYXRlIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCBpZiB0aGUKK2RpcmVjdG9yeSBzcGVjaWZpZWQgYnkKKy5JIGxvZ19kaXIKK2lzIG5vdCBhdmFpbGFibGUgb3IgaXMgbm90IHdyaXRlYWJsZS4KKy5UUAorLkkgbG9nX2Rpcl93YWl0CitJZiB0aGlzIGJvb2xlYW4gcmVsYXRpb24gaXMgdHJ1ZSwgdGhlbSBpZiB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5CisuSSBsb2dfZGlyCitvcgorLkkgbG9nX2Rpcl9mYWxsYmFjaworYXJlIG5vdCBhdmFpbGFibGUgb3IgYXJlIG5vdCB5ZXQgd3JpdGVhYmxlLCBlMmZzY2sgd2lsbCBzYXZlIHRoZSBvdXRwdXQKK2luIGEgbWVtb3J5IGJ1ZmZlciwgYW5kIGEgY2hpbGQgcHJvY2VzcyB3aWxsIHBlcmlvZGljYWxseSB0ZXN0IHRvIHNlZSBpZgordGhlIGxvZyBkaXJlY3RvcnkgaGFzIGJlY29tZSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGJvb3Qgc2VxdWVuY2UgaGFzCittb3VudGVkIHRoZSByZXF1aXN0ZSBmaWxlc3l0ZW0gZm9yIHJlYWRpbmcvd3JpdGluZy4gIFRoaXMgaW1wbGVtZW50cyB0aGUKK2Z1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkKKy5CUiBsb2dzYXZlICg4KQorZm9yIGUyZnNjayBsb2cgZmlsZXMuCisuVFAKKy5JIGxvZ19maWxlbmFtZQorVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGZpbGUgbmFtZSB3aGVyZSBhIGNvcHkgb2YgZTJmc2NrJ3Mgb3V0cHV0Cit3aWxsIGJlIHdyaXR0ZW4uICAgSWYgY2VydGFpbiBwcm9ibGVtIHJlcG9ydHMgYXJlIHN1cHByZXNzZWQgdXNpbmcgdGhlCisuSSBtYXhfY291bnRfcHJvYmxlbXMKK3JlbGF0aW9uLCAob3Igb24gYSBwZXItcHJvYmxlbSBiYXNpcyB1c2luZyB0aGUKKy5JIG1heF9jb3VudAorcmVsYXRpb24pLCB0aGUgZnVsbCBzZXQgb2YgcHJvYmxlbSByZXBvcnRzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgbG9nCitmaWxlLiAgVGhlIGZpbGVuYW1lIG1heSBjb250YWluIHZhcmlvdXMgcGVyY2VudC1leHByZXNzaW9ucyAoJUQsICVULCAlTiwKK2V0Yy4pIHdoaWNoIHdpbGwgYmUgZXhwYW5kZWQgc28gdGhhdCB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbG9nIGZpbGUgY2FuCitpbmNsdWRlIHRoaW5ncyBsaWtlIGRhdGUsIHRpbWUsIGRldmljZSBuYW1lLCBhbmQgb3RoZXIgcnVuLXRpbWUKK3BhcmFtZXRlcnMuICBTZWUgdGhlCisuQiBMT0dHSU5HCitzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisuVFAKKy5JIG1heF9jb3VudF9wcm9ibGVtcworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHByb2JsZW0gcmVwb3J0cyBvZiBhCitwYXJ0aWN1bGFyIHR5cGUgd2lsbCBiZSBwcmludGVkIHRvIHN0ZG91dCBiZWZvcmUgZnVydGhlciBwcm9ibGVtIHJlcG9ydHMKK29mIHRoYXQgdHlwZSBhcmUgc3F1ZWxjaGVkLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBjb25zb2xlIGlzIHNsb3cKKyhpLmUuLCBjb25uZWN0ZWQgdG8gYSBzZXJpYWwgcG9ydCkgYW5kIHNvIGEgbGFyZ2UgYW1vdW50IG9mIG91dHB1dCBjb3VsZAorZW5kIHVwIGRlbGF5aW5nIHRoZSBib290IHByb2Nlc3MgZm9yIGEgbG9uZyB0aW1lIChwb3RlbnRpYWxseSBob3VycykuCisuVFAKKy5JIHJlcG9ydF9mZWF0dXJlcworSWYgdGhpcyBib29sZWFuIHJlbGF0aW9uIGlzIHRydWUsIGUyZnNjayB3aWxsIHByaW50IHRoZSBmaWxlIHN5c3RlbQorZmVhdHVyZXMgYXMgcGFydCBvZiBpdHMgdmVyYm9zZSByZXBvcnRpbmcgKGkuZS4sIGlmIHRoZQorLkIgLXYKK29wdGlvbiBpcyBzcGVjaWZpZWQpCisuVFAKKy5JIHJlcG9ydF90aW1lCitJZiB0aGlzIGJvb2xlYW4gcmVsYXRpb24gaXMgdHJ1ZSwgZTJmc2NrIHdpbGwgcnVuIGFzIGlmIHRoZSBvcHRpb25zCisuQiAtdHQKK2FyZSBhbHdheXMgc3BlY2lmaWVkLiAgVGhpcyB3aWxsIGNhdXNlIGUyZnNjayB0byBwcmludCB0aW1pbmcgc3RhdGlzdGljcworb24gYSBwYXNzIGJ5IHBhc3MgYmFzaXMgZm9yIGZ1bGwgZmlsZSBzeXN0ZW0gY2hlY2tzLgorLlRQCisuSSByZXBvcnRfdmVyYm9zZQorSWYgdGhpcyBib29sZWFuIHJlbGF0aW9uIGlzIHRydWUsIGUyZnNjayB3aWxsIHJ1biBhcyBpZiB0aGUgb3B0aW9uCisuQiAtdgoraXMgYWx3YXlzIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZSBlMmZzY2sgdG8gcHJpbnQgc29tZSBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBhdCB0aGUgZW5kIG9mIGVhY2ggZnVsbCBmaWxlIHN5c3RlbSBjaGVjay4KKy5TSCBUSEUgW3Byb2JsZW1zXSBTVEFOWkEKK0VhY2ggdGFnIGluIHRoZQorLkkgW3Byb2JsZW1zXSAKK3N0YW56YSBuYW1lcyBhIHByb2JsZW0gY29kZSBzcGVjaWZpZWQgd2l0aCBhIGxlYWRpbmcgIjB4IiBmb2xsb3dlZCBieQorc2l4IGhleCBkaWdpdHMuICAgCitUaGUgdmFsdWUgb2YgdGhlIHRhZyBpcyBhIHN1YnNlY3Rpb24gd2hlcmUgdGhlIHJlbGF0aW9ucyBpbiB0aGF0CitzdWJzZWN0aW9uIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRyZWF0bWVudCBvZiB0aGF0IHBhcnRpY3VsYXIgcHJvYmxlbSAKK2NvZGUuCisuUAorTm90ZSB0aGF0IGluYXBwcm9wcmlhdGUgc2V0dGluZ3MgaW4gdGhpcyBzdGFuemEgbWF5IGNhdXNlIAorLkIgZTJmc2NrCit0byBiZWhhdmUgaW5jb3JyZWN0bHksIG9yIGV2ZW4gY3Jhc2guICBNb3N0IHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBzaG91bGQKK25vdCBiZSBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIHNlY3Rpb24gd2l0aG91dCByZWZlcnJpbmcgdG8gc291cmNlIGNvZGUuCisuUAorV2l0aGluIGVhY2ggcHJvYmxlbSBjb2RlJ3Mgc3Vic2VjdGlvbiwgdGhlIGZvbGxvd2luZyB0YWdzIG1heSBiZSB1c2VkOgorLlRQCisuSSBkZXNjcmlwdGlvbgorVGhpcyByZWxhdGlvbiBhbGxvd3MgdGhlIG1lc3NhZ2Ugd2hpY2ggaXMgcHJpbnRlZCB3aGVuIHRoaXMgZmlsZXN5c3RlbQoraW5jb25zaXN0ZW5jeSBpcyBkZXRlY3RlZCB0byBiZSBvdmVycmlkZGVuLgorLlRQCisuSSBwcmVlbl9vaworVGhpcyBib29sZWFuIHJlbGF0aW9uIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBjb250cm9sbGluZyAKK3doZXRoZXIgdGhpcyBmaWxlc3lzdGVtIHByb2JsZW0gc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgZml4ZWQgd2hlbgorLkIgZTJmc2NrCitpcyBydW5uaW5nIGluIHByZWVuIG1vZGUuCisuVFAKKy5JIG1heF9jb3VudAorVGhpcyBpbnRlZ2VyIHJlbGF0aW9uIG92ZXJyaWRlcyB0aGUgCisuSSBtYXhfY291bnRfcHJvYmxlbXMKK3BhcmFtZXRlciAoc2V0IGluIHRoZSBvcHRpb25zIHNlY3Rpb24pIGZvciB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbS4KKy5UUAorLkkgbm9fb2sKK1RoaXMgYm9vbGVhbiByZWxhdGlvbiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZGV0ZXJtaW5pbmcKK3doZXRoZXIgb3Igbm90IHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgbWFya2VkIGFzIGluY29uc2lzdGVudCBpZiB0aGUgdXNlcgorZGVjbGluZXMgdG8gZml4IHRoZSByZXBvcnRlZCBwcm9ibGVtLgorLlRQCisuSSBub19kZWZhdWx0CitUaGlzIGJvb2xlYW4gcmVsYXRpb24gb3ZlcnJpZGVzIHdoZXRoZXIgdGhlIGRlZmF1bHQgYW5zd2VyIGZvciB0aGlzIAorcHJvYmxlbSAob3IgcXVlc3Rpb24pIHNob3VsZCBiZSAibm8iLgorLlRQIAorLkkgcHJlZW5fbm9tZXNzYWdlCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGNvbnRyb2xsaW5nIAord2hldGhlciBvciBub3QgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGZpbGVzeXN0ZW0gcHJvYmxlbSBzaG91bGQKK2JlIHN1cHByZXNzZWQgd2hlbgorLkIgZTJmc2NrCitpcyBydW5uaW5nIGluIHByZWVuIG1vZGUuCisuVFAKKy5JIG5vX25vbXNnCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGNvbnRyb2xsaW5nIAord2hldGhlciBvciBub3QgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGlzIGZpbGVzeXN0ZW0gcHJvYmxlbSBzaG91bGQKK2JlIHN1cHByZXNzZWQgd2hlbiBhIHByb2JsZW0gZm9yY2VkIG5vdCB0byBiZSBmaXhlZCwgZWl0aGVyIGJlY2F1c2UKKy5CIGUyZnNjaworaXMgcnVuIHdpdGggdGhlCisuQiAtbgorb3B0aW9uIG9yIGJlY2F1c2UgdGhlCisuSSBmb3JjZV9ubworZmxhZyBoYXMgYmVlbiBzZXQgZm9yIHRoZSBwcm9ibGVtLgorLlRQCisuSSBmb3JjZV9ubworVGhpcyBib29sZWFuIG9wdGlvbiwgaWYgc2V0IHRvIHRydWUsIGZvcmNlcyBhIHByb2JsZW0gdG8gbmV2ZXIgYmUgZml4ZWQuCitUaGF0IGlzLCBpdCB3aWxsIGJlIGFzIGlmIHRoZSB1c2VyIHByb2JsZW0gcmVzcG9uZHMgJ25vJyB0byB0aGUgcXVlc3Rpb24KK29mICdzaG91bGQgdGhpcyBwcm9ibGVtIGJlIGZpeGVkPycuICBUaGUKKy5JIGZvcmNlX25vCitvcHRpb24gZXZlbiBvdmVycmlkZXMgdGhlCisuQiAteQorb3B0aW9uIGdpdmVuIG9uIHRoZSBjb21tYW5kLWxpbmUgKGp1c3QgZm9yIHRoZSBzcGVjaWZpYyBwcm9ibGVtLCBvZiBjb3Vyc2UpLgorLlNIIFRIRSBbc2NyYXRjaF9maWxlc10gU1RBTlpBCitUaGUgZm9sbG93aW5nIHJlbGF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgCisuSSBbc2NyYXRjaF9maWxlc10KK3N0YW56YS4KKy5UUAorLkkgZGlyZWN0b3J5CitJZiB0aGUgZGlyZWN0b3J5IG5hbWVkIGJ5IHRoaXMgcmVsYXRpb24gZXhpc3RzIGFuZCBpcyB3cml0ZWFibGUsIHRoZW4KK2UyZnNjayB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoaXMgZGlyZWN0b3J5IHRvIHN0b3JlIHNjcmF0Y2ggZmlsZXMgaW5zdGVhZAorb2YgdXNpbmcgaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlcy4KKy5UUAorLkkgbnVtZGlyc190aHJlc2hvbGQKK0lmIHRoaXMgcmVsYXRpb24gaXMgc2V0LCB0aGVuIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgYmUgdXNlZCBpZiB0aGUKK251bWJlciBvZiBkaXJlY3RvcmllcyBpbiB0aGUgZmlsZXN5c3RlbSBhcmUgZmV3ZXIgdGhhbiBhbW91bnQgc3BlY2lmaWVkLgorLlRQCisuSSBkaXJpbmZvCitUaGlzIHJlbGF0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBzY3JhdGNoIGZpbGUgZGlyZWN0b3J5IGlzIHVzZWQKK2luc3RlYWQgb2YgYW4gaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlIGZvciBkaXJlY3RvcnkgaW5mb3JtYXRpb24uICBJdAorZGVmYXVsdHMgdG8gdHJ1ZS4KKy5UUAorLkkgaWNvdW50CitUaGlzIHJlbGF0aW9uIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBzY3JhdGNoIGZpbGUgZGlyZWN0b3J5IGlzIHVzZWQKK2luc3RlYWQgb2YgYW4gaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlIHdoZW4gdHJhY2tpbmcgaW5vZGUgY291bnRzLiAgSXQKK2RlZmF1bHRzIHRvIHRydWUuCisuU0ggTE9HR0lORworRTJmc2NrIGhhcyB0aGUgZmFjaWxpdHkgdG8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSBhbiBlMmZzY2sgcnVuIGluIGEKK2RpcmVjdG9yeSBzbyB0aGF0IGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgY2FuIHJldmlldyBpdHMgb3V0cHV0IGF0IHRoZWlyCitsZWlzdXJlLiAgVGhpcyBhbGxvd3MgaW5mb3JtYXRpb24gY2FwdHVyZWQgZHVyaW5nIHRoZSBhdXRvbWF0aWMgZTJmc2NrCitwcmVlbiBydW4sIGFzIHdlbGwgYXMgYSBtYW51YWxseSBzdGFydGVkIGUyZnNjayBydW4sIHRvIGJlIHNhdmVkIGZvcgorcG9zdGVyaXR5LiAgVGhpcyBmYWNpbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZQorLklSIGxvZ19maWxlbmFtZSAsCisuSVIgbG9nX2RpciAsCisuSVIgbG9nX2Rpcl9mYWxsYmFjayAsCithbmQKKy5JIGxvZ19kaXJfd2FpdAorcmVsYXRpb25zIGluIHRoZQorLkkgW29wdGlvbnNdCitzdGFuemEuCisuUFAKK1RoZSBmaWxlbmFtZSBpbgorLkkgbG9nX2ZpbGVuYW1lCittYXkgY29udGFpbiB0aGUgZm9sbG93aW5nIHBlcmNlbnQtZXhwcmVzc2lvbnMgdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGFzCitmb2xsb3dzLgorLlRQCisuQiAlZAorVGhlIGN1cnJlbnQgZGF5IG9mIHRoZSBtb250aAorLlRQCisuQiAlRAorVGhlIGN1cnJlbnQgZGF0ZTsgdGhpcyBpcyBhIGVxdWl2YWxlbnQgb2YKKy5CICVZJW0lZAorLlRQCisuQiAlaAorVGhlIGhvc3RuYW1lIG9mIHRoZSBzeXN0ZW0uCisuVFAKKy5CICVICitUaGUgY3VycmVudCBob3VyIGluIDI0LWhvdXIgZm9ybWF0ICgwMC4uMjMpCisuVFAKKy5CICVtCitUaGUgY3VycmVudCBtb250aCBhcyBhIHR3by1kaWdpdCBudW1iZXIgKDAxLi4xMikKKy5UUAorLkIgJU0KK1RoZSBjdXJyZW50IG1pbnV0ZSAoMDAuLjU5KQorLlRQCisuQiAlTgorVGhlIG5hbWUgb2YgdGhlIGJsb2NrIGRldmljZSBjb250YWluaW5nIHRoZSBmaWxlIHN5c3RlbSwgd2l0aCBhbnkKK2RpcmVjdG9yeSBwYXRobmFtZSBzdHJpcHBlZCBvZmYuCisuVFAKKy5CICVwCitUaGUgcGlkIG9mIHRoZSBlMmZzY2sgcHJvY2VzcworLlRQCisuQiAlcworVGhlIGN1cnJlbnQgdGltZSBleHByZXNzZWQgYXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIDE5NzAtMDEtMDEKKzAwOjAwOjAwIFVUQworLlRQCisuQiAlUworVGhlIGN1cnJlbnQgc2Vjb25kICgwMC4uNTkpCisuVFAKKy5CICVUCitUaGUgY3VycmVudCB0aW1lOyB0aGlzIGlzIGVxdWl2YWxlbnQgb2YKKy5CICVIJU0lUworLlRQCisuQiAldQorVGhlIG5hbWUgb2YgdGhlIHVzZXIgcnVubmluZyBlMmZzY2suCisuVFAKKy5CICVVCitUaGlzIHBlcmNlbnQgZXhwcmVzc2lvbiBkb2VzIG5vdCBleHBhbmQgdG8gYW55dGhpbmcsIGJ1dCBpdCBzaWduYWxzIHRoYXQKK2FueSBmb2xsb3dpbmcgZGF0ZSBvciB0aW1lIGV4cHJlc3Npb25zIHNob3VsZCBiZSBleHByZXNzZWQgaW4gVVRDIHRpbWUKK2luc3RlYWQgb2YgdGhlIGxvY2FsIHRpbXplb25lLgorLlRQCisuQiAleQorVGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiB0aGUgY3VycmVudCB5ZWFyICgwMC4uOTkpCisuVFAKKy5CICVZCitUaGUgY3VycmVudCB5ZWFyIChpLmUuLCAyMDEyKS4KKy5TSCBFWEFNUExFUworVGhlIGZvbGxvd2luZyByZWNpcGUgd2lsbCBwcmV2ZW50IGUyZnNjayBmcm9tIGFib3J0aW5nIGR1cmluZyB0aGUgYm9vdAorcHJvY2VzcyB3aGVuIGEgZmlsZXN5c3RlbSBjb250YWlucyBvcnBoYW5lZCBmaWxlcy4gIChPZiBjb3Vyc2UsIHRoaXMgaXMKK25vdCBhbHdheXMgYSBnb29kIGlkZWEsIHNpbmNlIGNyaXRpY2FsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlCitzZWN1cml0eSBvZiB0aGUgc3lzdGVtIGNvdWxkIHBvdGVudGlhbGx5IGVuZCB1cCBpbiBsb3N0K2ZvdW5kLCBhbmQKK3N0YXJ0aW5nIHRoZSBzeXN0ZW0gd2l0aG91dCBmaXJzdCBoYXZpbmcgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBjaGVjawordGhpbmdzIG91dCBtYXkgYmUgZGFuZ2Vyb3VzLikKKy5QCisuYnIKKwlbcHJvYmxlbXNdCisuYnIKKwkJMHgwNDAwMDIgPSB7CisuYnIKKwkJCXByZWVuX29rID0gdHJ1ZQorLmJyCisJCQlkZXNjcmlwdGlvbiA9ICJAdSBAaSAlaS4gICIKKy5icgorCQl9CisuUAorVGhlIGZvbGxvd2luZyByZWNpcGUgd2lsbCBjYXVzZSBhbiBlMmZzY2sgbG9nZmlsZSB0byBiZSB3cml0dGVuIHRvIHRoZQorZGlyZWN0b3J5IC92YXIvbG9nL2UyZnNjaywgd2l0aCBhIGZpbGVuYW1lIHRoYXQgY29udGFpbnMgdGhlIGRldmljZQorbmFtZSwgdGhlIGhvc3RuYW1lIG9mIHRoZSBzeXN0ZW0sIHRoZSBkYXRlLCBhbmQgdGltZTogZS5nLiwKKyJlMmZzY2stc2RhMy5zZXJ2ZXIuSU5GTy4yMDEyMDMxNC0xMTIxNDIiLiAgSWYgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCisvdmFyL2xvZyBpcyBsb2NhdGVkIG9uIHRoZSByb290IGZpbGUgc3lzdGVtCit3aGljaCBpcyBpbml0aWFsbHkgbW91bnRlZCByZWFkLW9ubHksIHRoZW4gdGhlIG91dHB1dCB3aWxsIGJlIHNhdmVkIGluCittZW1vcnkgYW5kIHdyaXR0ZW4gb3V0IG9uY2UgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gcmVtb3VudGVkCityZWFkL3dyaXRlLiAgIFRvIGF2b2lkIHRvbyBtdWNoIGRldGFpbCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIHNlcmlhbAorY29uc29sZSAod2hpY2ggY291bGQgcG90ZW50aWFsbHkgc2xvdyBkb3duIHRoZSBib290IHNlcXVlbmNlKSwgb25seSBwcmludAorbm8gbW9yZSB0aGFuIDE2IGluc3RhbmNlcyBvZiBlYWNoIHR5cGUgb2YgZmlsZSBzeXN0ZW0gY29ycnVwdGlvbi4KKy5QCisuYnIKKwlbb3B0aW9uc10KKy5icgorCQltYXhfY291bnRfcHJvYmxlbXMgPSAxNgorLmJyCisJCWxvZ19kaXIgPSAvdmFyL2xvZy9lMmZzY2sKKy5icgorCQlsb2dfZmlsZW5hbWUgPSBlMmZzY2stJU4uJWguSU5GTy4lRC0lVAorLmJyCisJCWxvZ19kaXJfd2FpdCA9IHRydWUKKy5QCisuU0ggRklMRVMKKy5UUAorLkkgL2V0Yy9lMmZzY2suY29uZgorVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgCisuQlIgZTJmc2NrICg4KS4KKy5TSCBTRUUgQUxTTworLkJSIGUyZnNjayAoOCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZTJmc2NrLmggYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGRmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2UyZnNjay5oCkBAIC0wLDAgKzEsNTgyIEBACisvKgorICogZTJmc2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUKKyAqIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX0UyRlNDS19ICisjZGVmaW5lIF9FMkZTQ0tfSAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VUSk1QX0gKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZgorCisjaWYgRVhUMl9GTEFUX0lOQ0xVREVTCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImJsa2lkLmgiCisjZWxzZQorI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImJsa2lkL2Jsa2lkLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInByb2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9mX2Vyci5oIgorCisjaWZkZWYgRU5BQkxFX05MUworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNkZWZpbmUgXyhhKSAoZ2V0dGV4dCAoYSkpCisjaWZkZWYgZ2V0dGV4dF9ub29wCisjZGVmaW5lIE5fKGEpIGdldHRleHRfbm9vcCAoYSkKKyNlbHNlCisjZGVmaW5lIE5fKGEpIChhKQorI2VuZGlmCisjZGVmaW5lIFBfKHNpbmd1bGFyLCBwbHVyYWwsIG4pIChuZ2V0dGV4dCAoc2luZ3VsYXIsIHBsdXJhbCwgbikpCisjaWZuZGVmIE5MU19DQVRfTkFNRQorI2RlZmluZSBOTFNfQ0FUX05BTUUgImUyZnNwcm9ncyIKKyNlbmRpZgorI2lmbmRlZiBMT0NBTEVESVIKKyNkZWZpbmUgTE9DQUxFRElSICIvdXNyL3NoYXJlL2xvY2FsZSIKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgXyhhKSAoYSkKKyNkZWZpbmUgTl8oYSkgYQorI2RlZmluZSBQXyhzaW5ndWxhciwgcGx1cmFsLCBuKSAoKG4pID09IDEgPyAoc2luZ3VsYXIpIDogKHBsdXJhbCkpCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEUyRlNDS19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEUyRlNDS19BVFRSKHgpCisjZW5kaWYKKworI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKworLyoKKyAqIEV4aXQgY29kZXMgdXNlZCBieSBmc2NrLXR5cGUgcHJvZ3JhbXMKKyAqLworI2RlZmluZSBGU0NLX09LICAgICAgICAgIDAJLyogTm8gZXJyb3JzICovCisjZGVmaW5lIEZTQ0tfTk9OREVTVFJVQ1QgMQkvKiBGaWxlIHN5c3RlbSBlcnJvcnMgY29ycmVjdGVkICovCisjZGVmaW5lIEZTQ0tfUkVCT09UICAgICAgMgkvKiBTeXN0ZW0gc2hvdWxkIGJlIHJlYm9vdGVkICovCisjZGVmaW5lIEZTQ0tfVU5DT1JSRUNURUQgNAkvKiBGaWxlIHN5c3RlbSBlcnJvcnMgbGVmdCB1bmNvcnJlY3RlZCAqLworI2RlZmluZSBGU0NLX0VSUk9SICAgICAgIDgJLyogT3BlcmF0aW9uYWwgZXJyb3IgKi8KKyNkZWZpbmUgRlNDS19VU0FHRSAgICAgICAxNgkvKiBVc2FnZSBvciBzeW50YXggZXJyb3IgKi8KKyNkZWZpbmUgRlNDS19DQU5DRUxFRAkgMzIJLyogQWJvcnRlZCB3aXRoIGEgc2lnbmFsIG9yIF5DICovCisjZGVmaW5lIEZTQ0tfTElCUkFSWSAgICAgMTI4CS8qIFNoYXJlZCBsaWJyYXJ5IGVycm9yICovCisKKy8qCisgKiBUaGUgbGFzdCBleHQyZnMgcmV2aXNpb24gbGV2ZWwgdGhhdCB0aGlzIHZlcnNpb24gb2YgZTJmc2NrIGlzIGFibGUgdG8KKyAqIHN1cHBvcnQKKyAqLworI2RlZmluZSBFMkZTQ0tfQ1VSUkVOVF9SRVYJMQorCisvKgorICogVGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IHN0b3JlcyBkaXJlY3RvcnkgaW5mb3JtYXRpb24KKyAqIGNvbGxlY3RlZCBpbiBlYXJsaWVyIHBhc3NlcywgdG8gYXZvaWQgZGlzayBpL28gaW4gZmV0Y2hpbmcgdGhlCisgKiBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBkaXJfaW5mbyB7CisJZXh0Ml9pbm9fdAkJaW5vOwkvKiBJbm9kZSBudW1iZXIgKi8KKwlleHQyX2lub190CQlkb3Rkb3Q7CS8qIFBhcmVudCBhY2NvcmRpbmcgdG8gJy4uJyAqLworCWV4dDJfaW5vX3QJCXBhcmVudDsgLyogUGFyZW50IGFjY29yZGluZyB0byB0cmVld2FsayAqLworfTsKKworCisvKgorICogVGhlIGluZGV4ZWQgZGlyZWN0b3J5IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgc3RvcmVzIGluZm9ybWF0aW9uIGZvcgorICogZGlyZWN0b3JpZXMgd2hpY2ggY29udGFpbiBhIGhhc2ggdHJlZSBpbmRleC4KKyAqLworc3RydWN0IGR4X2Rpcl9pbmZvIHsKKwlleHQyX2lub190CQlpbm87IAkJLyogSW5vZGUgbnVtYmVyICovCisJaW50CQkJbnVtYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzICovCisJaW50CQkJaGFzaHZlcnNpb247CisJc2hvcnQJCQlkZXB0aDsJCS8qIGRlcHRoIG9mIHRyZWUgKi8KKwlzdHJ1Y3QgZHhfZGlyYmxvY2tfaW5mbwkqZHhfYmxvY2s7IAkvKiBBcnJheSBvZiBzaXplIG51bWJsb2NrcyAqLworfTsKKworI2RlZmluZSBEWF9ESVJCTE9DS19ST09UCTEKKyNkZWZpbmUgRFhfRElSQkxPQ0tfTEVBRgkyCisjZGVmaW5lIERYX0RJUkJMT0NLX05PREUJMworI2RlZmluZSBEWF9ESVJCTE9DS19DT1JSVVBUCTQKKyNkZWZpbmUgRFhfRElSQkxPQ0tfQ0xFQVJFRAk4CisKK3N0cnVjdCBkeF9kaXJibG9ja19pbmZvIHsKKwlpbnQJCXR5cGU7CisJYmxrNjRfdAkJcGh5czsKKwlpbnQJCWZsYWdzOworCWJsazY0X3QJCXBhcmVudDsKKwlleHQyX2Rpcmhhc2hfdAltaW5faGFzaDsKKwlleHQyX2Rpcmhhc2hfdAltYXhfaGFzaDsKKwlleHQyX2Rpcmhhc2hfdAlub2RlX21pbl9oYXNoOworCWV4dDJfZGlyaGFzaF90CW5vZGVfbWF4X2hhc2g7Cit9OworCisjZGVmaW5lIERYX0ZMQUdfUkVGRVJFTkNFRAkxCisjZGVmaW5lIERYX0ZMQUdfRFVQX1JFRgkJMgorI2RlZmluZSBEWF9GTEFHX0ZJUlNUCQk0CisjZGVmaW5lIERYX0ZMQUdfTEFTVAkJOAorCisjZGVmaW5lIFJFU09VUkNFX1RSQUNLCisKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaG93IG11Y2ggcmVzb3VyY2VzIGhhdmUKKyAqIGJlZW4gdXNlZCBmb3IgYSBwYXJ0aWN1bGFyIHBhc3Mgb2YgZTJmc2NrLgorICovCitzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgeworCXN0cnVjdCB0aW1ldmFsIHRpbWVfc3RhcnQ7CisJc3RydWN0IHRpbWV2YWwgdXNlcl9zdGFydDsKKwlzdHJ1Y3QgdGltZXZhbCBzeXN0ZW1fc3RhcnQ7CisJdm9pZAkqYnJrX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc19yZWFkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc193cml0dGVuOworfTsKKyNlbmRpZgorCisvKgorICogRTJmc2NrIG9wdGlvbnMKKyAqLworI2RlZmluZSBFMkZfT1BUX1JFQURPTkxZCTB4MDAwMQorI2RlZmluZSBFMkZfT1BUX1BSRUVOCQkweDAwMDIKKyNkZWZpbmUgRTJGX09QVF9ZRVMJCTB4MDAwNAorI2RlZmluZSBFMkZfT1BUX05PCQkweDAwMDgKKyNkZWZpbmUgRTJGX09QVF9USU1FCQkweDAwMTAKKyNkZWZpbmUgRTJGX09QVF9USU1FMgkJMHgwMDIwCisjZGVmaW5lIEUyRl9PUFRfQ0hFQ0tCTE9DS1MJMHgwMDQwCisjZGVmaW5lIEUyRl9PUFRfREVCVUcJCTB4MDA4MAorI2RlZmluZSBFMkZfT1BUX0ZPUkNFCQkweDAxMDAKKyNkZWZpbmUgRTJGX09QVF9XUklURUNIRUNLCTB4MDIwMAorI2RlZmluZSBFMkZfT1BUX0NPTVBSRVNTX0RJUlMJMHgwNDAwCisjZGVmaW5lIEUyRl9PUFRfRlJBR0NIRUNLCTB4MDgwMAorI2RlZmluZSBFMkZfT1BUX0pPVVJOQUxfT05MWQkweDEwMDAgLyogb25seSByZXBsYXkgdGhlIGpvdXJuYWwgKi8KKyNkZWZpbmUgRTJGX09QVF9ESVNDQVJECQkweDIwMDAKKworLyoKKyAqIEUyZnNjayBmbGFncworICovCisjZGVmaW5lIEUyRl9GTEFHX0FCT1JUCQkweDAwMDEgLyogQWJvcnQgc2lnbmFsZWQgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfQ0FOQ0VMCQkweDAwMDIgLyogQ2FuY2VsIHNpZ25hbGVkICovCisjZGVmaW5lIEUyRl9GTEFHX1NJR05BTF9NQVNLCTB4MDAwMworI2RlZmluZSBFMkZfRkxBR19SRVNUQVJUCTB4MDAwNCAvKiBSZXN0YXJ0IHNpZ25hbGVkICovCisjZGVmaW5lIEUyRl9GTEFHX1JFU1RBUlRfTEFURVIJMHgwMDA4IC8qIFJlc3RhcnQgYWZ0ZXIgYWxsIGl0ZXJhdGlvbnMgZG9uZSAqLworCisjZGVmaW5lIEUyRl9GTEFHX1NFVEpNUF9PSwkweDAwMTAgLyogU2V0am1wIHZhbGlkIGZvciBhYm9ydCAqLworCisjZGVmaW5lIEUyRl9GTEFHX1BST0dfQkFSCTB4MDAyMCAvKiBQcm9ncmVzcyBiYXIgb24gc2NyZWVuICovCisjZGVmaW5lIEUyRl9GTEFHX1BST0dfU1VQUFJFU1MJMHgwMDQwIC8qIFByb2dyZXNzIHN1c3BlbmRlZCAqLworI2RlZmluZSBFMkZfRkxBR19KT1VSTkFMX0lOT0RFCTB4MDA4MCAvKiBDcmVhdGUgYSBuZXcgZXh0MyBqb3VybmFsIGlub2RlICovCisjZGVmaW5lIEUyRl9GTEFHX1NCX1NQRUNJRklFRAkweDAxMDAgLyogVGhlIHN1cGVyYmxvY2sgd2FzIGV4cGxpY2l0bHkKKwkJCQkJKiBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfUkVTVEFSVEVECTB4MDIwMCAvKiBFMmZzY2sgaGFzIGJlZW4gcmVzdGFydGVkICovCisjZGVmaW5lIEUyRl9GTEFHX1JFU0laRV9JTk9ERQkweDA0MDAgLyogUmVxdWVzdCB0byByZWNyZWF0ZSByZXNpemUgaW5vZGUgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfR09UX0RFVlNJWkUJMHgwODAwIC8qIERldmljZSBzaXplIGhhcyBiZWVuIGZldGNoZWQgKi8KKyNkZWZpbmUgRTJGX0ZMQUdfRVhJVElORwkweDEwMDAgLyogRTJmc2NrIGV4aXRpbmcgZHVlIHRvIGVycm9ycyAqLworI2RlZmluZSBFMkZfRkxBR19USU1FX0lOU0FORQkweDIwMDAgLyogVGltZSBpcyBpbnNhbmUgKi8KKworI2RlZmluZSBFMkZfUkVTRVRfRkxBR1MgKEUyRl9GTEFHX1RJTUVfSU5TQU5FKQorCisvKgorICogRGVmaW5lcyBmb3IgaW5kaWNhdGluZyB0aGUgZTJmc2NrIHBhc3MgbnVtYmVyCisgKi8KKyNkZWZpbmUgRTJGX1BBU1NfMQkxCisjZGVmaW5lIEUyRl9QQVNTXzIJMgorI2RlZmluZSBFMkZfUEFTU18zCTMKKyNkZWZpbmUgRTJGX1BBU1NfNAk0CisjZGVmaW5lIEUyRl9QQVNTXzUJNQorI2RlZmluZSBFMkZfUEFTU18xQgk2CisKKy8qCisgKiBEZWZpbmUgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSByZWZjb3VudCBzdHJ1Y3R1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZWFfcmVmY291bnQgKmV4dDJfcmVmY291bnRfdDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGdsb2JhbCBlMmZzY2sgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBlMmZzY2tfc3RydWN0ICplMmZzY2tfdDsKKworI2RlZmluZSBNQVhfRVhURU5UX0RFUFRIX0NPVU5UIDUKKworc3RydWN0IGUyZnNja19zdHJ1Y3QgeworCWV4dDJfZmlsc3lzIGZzOworCWNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZTsKKwljaGFyICpmaWxlc3lzdGVtX25hbWU7CisJY2hhciAqZGV2aWNlX25hbWU7CisJY2hhciAqaW9fb3B0aW9uczsKKwlGSUxFCSpsb2dmOworCWNoYXIJKmxvZ19mbjsKKwlpbnQJZmxhZ3M7CQkvKiBFMmZzY2sgaW50ZXJuYWwgZmxhZ3MgKi8KKwlpbnQJb3B0aW9uczsKKwlpbnQJYmxvY2tzaXplOwkvKiBibG9ja3NpemUgKi8KKwlibGs2NF90CXVzZV9zdXBlcmJsb2NrOwkvKiBzYiByZXF1ZXN0ZWQgYnkgdXNlciAqLworCWJsazY0X3QJc3VwZXJibG9jazsJLyogc2IgdXNlZCB0byBvcGVuIGZzICovCisJYmxrNjRfdAludW1fYmxvY2tzOwkvKiBUb3RhbCBudW1iZXIgb2YgYmxvY2tzICovCisJYmxrNjRfdCBmcmVlX2Jsb2NrczsKKwlpbm9fdAlmcmVlX2lub2RlczsKKwlpbnQJbW91bnRfZmxhZ3M7CisJYmxraWRfY2FjaGUgYmxraWQ7CS8qIGJsa2lkIGNhY2hlICovCisKKyNpZmRlZiBIQVZFX1NFVEpNUF9ICisJam1wX2J1ZglhYm9ydF9sb2M7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIGFib3J0X2NvZGU7CisKKwlpbnQgKCpwcm9ncmVzcykoZTJmc2NrX3QgY3R4LCBpbnQgcGFzcywgdW5zaWduZWQgbG9uZyBjdXIsCisJCQl1bnNpZ25lZCBsb25nIG1heCk7CisKKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX3VzZWRfbWFwOyAvKiBJbm9kZXMgd2hpY2ggYXJlIGluIHVzZSAqLworCWV4dDJmc19pbm9kZV9iaXRtYXAgaW5vZGVfYmFkX21hcDsgLyogSW5vZGVzIHdoaWNoIGFyZSBiYWQgc29tZWhvdyAqLworCWV4dDJmc19pbm9kZV9iaXRtYXAgaW5vZGVfZGlyX21hcDsgLyogSW5vZGVzIHdoaWNoIGFyZSBkaXJlY3RvcmllcyAqLworCWV4dDJmc19pbm9kZV9iaXRtYXAgaW5vZGVfYmJfbWFwOyAvKiBJbm9kZXMgd2hpY2ggYXJlIGluIGJhZCBibG9ja3MgKi8KKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX2ltYWdpY19tYXA7IC8qIEFGUyBpbm9kZXMgKi8KKwlleHQyZnNfaW5vZGVfYml0bWFwIGlub2RlX3JlZ19tYXA7IC8qIElub2RlcyB3aGljaCBhcmUgcmVndWxhciBmaWxlcyovCisKKwlleHQyZnNfYmxvY2tfYml0bWFwIGJsb2NrX2ZvdW5kX21hcDsgLyogQmxvY2tzIHdoaWNoIGFyZSBpbiB1c2UgKi8KKwlleHQyZnNfYmxvY2tfYml0bWFwIGJsb2NrX2R1cF9tYXA7IC8qIEJsa3MgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSAqLworCWV4dDJmc19ibG9ja19iaXRtYXAgYmxvY2tfZWFfbWFwOyAvKiBCbG9ja3Mgd2hpY2ggYXJlIHVzZWQgYnkgRUEncyAqLworCisJLyoKKwkgKiBJbm9kZSBjb3VudCBhcnJheXMKKwkgKi8KKwlleHQyX2ljb3VudF90CWlub2RlX2NvdW50OworCWV4dDJfaWNvdW50X3QgaW5vZGVfbGlua19pbmZvOworCisJZXh0Ml9yZWZjb3VudF90CXJlZmNvdW50OworCWV4dDJfcmVmY291bnRfdCByZWZjb3VudF9leHRyYTsKKworCS8qCisJICogQXJyYXkgb2YgZmxhZ3MgaW5kaWNhdGluZyB3aGV0aGVyIGFuIGlub2RlIGJpdG1hcCwgYmxvY2sKKwkgKiBiaXRtYXAsIG9yIGlub2RlIHRhYmxlIGlzIGludmFsaWQKKwkgKi8KKwlpbnQgKmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWc7CisJaW50ICppbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnOworCWludCAqaW52YWxpZF9pbm9kZV90YWJsZV9mbGFnOworCWludCBpbnZhbGlkX2JpdG1hcHM7CS8qIFRoZXJlIGFyZSBpbnZhbGlkIGJpdG1hcHMvaXRhYmxlICovCisKKwkvKgorCSAqIEJsb2NrIGJ1ZmZlcgorCSAqLworCWNoYXIgKmJsb2NrX2J1ZjsKKworCS8qCisJICogRm9yIHBhc3MxX2NoZWNrX2RpcmVjdG9yeSBhbmQgcGFzczFfZ2V0X2Jsb2NrcworCSAqLworCWV4dDJfaW5vX3Qgc3Rhc2hlZF9pbm87CisJc3RydWN0IGV4dDJfaW5vZGUgKnN0YXNoZWRfaW5vZGU7CisKKwkvKgorCSAqIExvY2F0aW9uIG9mIHRoZSBsb3N0IGFuZCBmb3VuZCBkaXJlY3RvcnkKKwkgKi8KKwlleHQyX2lub190IGxvc3RfYW5kX2ZvdW5kOworCWludCBiYWRfbG9zdF9hbmRfZm91bmQ7CisKKwkvKgorCSAqIERpcmVjdG9yeSBpbmZvcm1hdGlvbgorCSAqLworCXN0cnVjdCBkaXJfaW5mb19kYgkqZGlyX2luZm87CisKKwkvKgorCSAqIEluZGV4ZWQgZGlyZWN0b3J5IGluZm9ybWF0aW9uCisJICovCisJaW50CQlkeF9kaXJfaW5mb19jb3VudDsKKwlpbnQJCWR4X2Rpcl9pbmZvX3NpemU7CisJc3RydWN0IGR4X2Rpcl9pbmZvICpkeF9kaXJfaW5mbzsKKworCS8qCisJICogRGlyZWN0b3JpZXMgdG8gaGFzaAorCSAqLworCWV4dDJfdTMyX2xpc3QJZGlyc190b19oYXNoOworCisJLyoKKwkgKiBUdW5pbmcgcGFyYW1ldGVycworCSAqLworCWludCBwcm9jZXNzX2lub2RlX3NpemU7CisJaW50IGlub2RlX2J1ZmZlcl9ibG9ja3M7CisJdW5zaWduZWQgaW50IGh0cmVlX3NsYWNrX3BlcmNlbnRhZ2U7CisKKwkvKgorCSAqIGV4dDMgam91cm5hbCBzdXBwb3J0CisJICovCisJaW9fY2hhbm5lbAlqb3VybmFsX2lvOworCWNoYXIJKmpvdXJuYWxfbmFtZTsKKworCS8qCisJICogRXh0NCBxdW90YSBzdXBwb3J0CisJICovCisJcXVvdGFfY3R4X3QgcWN0eDsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCS8qCisJICogRm9yIHRpbWluZyBwdXJwb3NlcworCSAqLworCXN0cnVjdCByZXNvdXJjZV90cmFjawlnbG9iYWxfcnRyYWNrOworI2VuZGlmCisKKwkvKgorCSAqIEhvdyB3ZSBkaXNwbGF5IHRoZSBwcm9ncmVzcyB1cGRhdGUgKGZvciB1bml4KQorCSAqLworCWludCBwcm9ncmVzc19mZDsKKwlpbnQgcHJvZ3Jlc3NfcG9zOworCWludCBwcm9ncmVzc19sYXN0X3BlcmNlbnQ7CisJdW5zaWduZWQgaW50IHByb2dyZXNzX2xhc3RfdGltZTsKKwlpbnQgaW50ZXJhY3RpdmU7CS8qIEFyZSB3ZSBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYSB0dHk/ICovCisJY2hhciBzdGFydF9tZXRhWzJdLCBzdG9wX21ldGFbMl07CisKKwkvKiBGaWxlIGNvdW50cyAqLworCV9fdTMyIGZzX2RpcmVjdG9yeV9jb3VudDsKKwlfX3UzMiBmc19yZWd1bGFyX2NvdW50OworCV9fdTMyIGZzX2Jsb2NrZGV2X2NvdW50OworCV9fdTMyIGZzX2NoYXJkZXZfY291bnQ7CisJX191MzIgZnNfbGlua3NfY291bnQ7CisJX191MzIgZnNfc3ltbGlua3NfY291bnQ7CisJX191MzIgZnNfZmFzdF9zeW1saW5rc19jb3VudDsKKwlfX3UzMiBmc19maWZvX2NvdW50OworCV9fdTMyIGZzX3RvdGFsX2NvdW50OworCV9fdTMyIGZzX2JhZGJsb2Nrc19jb3VudDsKKwlfX3UzMiBmc19zb2NrZXRzX2NvdW50OworCV9fdTMyIGZzX2luZF9jb3VudDsKKwlfX3UzMiBmc19kaW5kX2NvdW50OworCV9fdTMyIGZzX3RpbmRfY291bnQ7CisJX191MzIgZnNfZnJhZ21lbnRlZDsKKwlfX3UzMiBmc19mcmFnbWVudGVkX2RpcjsKKwlfX3UzMiBsYXJnZV9maWxlczsKKwlfX3UzMiBmc19leHRfYXR0cl9pbm9kZXM7CisJX191MzIgZnNfZXh0X2F0dHJfYmxvY2tzOworCV9fdTMyIGV4dGVudF9kZXB0aF9jb3VudFtNQVhfRVhURU5UX0RFUFRIX0NPVU5UXTsKKworCS8qIG1pc2MgZmllbGRzICovCisJdGltZV90IG5vdzsKKwl0aW1lX3QgdGltZV9mdWRnZTsJLyogRm9yIHdvcmtpbmcgYXJvdW5kIGJ1Z2d5IGluaXQgc2NyaXB0cyAqLworCWludCBleHRfYXR0cl92ZXI7CisJcHJvZmlsZV90CXByb2ZpbGU7CisJaW50IGJsb2Nrc19wZXJfcGFnZTsKKwlleHQyX3UzMl9saXN0IGVuY3J5cHRlZF9kaXJzOworCisJLyoKKwkgKiBGb3IgdGhlIHVzZSBvZiBjYWxsZXJzIG9mIHRoZSBlMmZzY2sgZnVuY3Rpb25zOyBub3QgdXNlZCBieQorCSAqIGUyZnNjayBmdW5jdGlvbnMgdGhlbXNlbHZlcy4KKwkgKi8KKwl2b2lkICpwcml2X2RhdGE7Cit9OworCisvKiBVc2VkIGJ5IHRoZSByZWdpb24gYWxsb2NhdGlvbiBjb2RlICovCit0eXBlZGVmIF9fdTMyIHJlZ2lvbl9hZGRyX3Q7Cit0eXBlZGVmIHN0cnVjdCByZWdpb25fc3RydWN0ICpyZWdpb25fdDsKKworI2lmbmRlZiBIQVZFX1NUUk5MRU4KKyNkZWZpbmUgc3RybmxlbihzdHIsIHgpIGUyZnNja19zdHJubGVuKChzdHIpLCh4KSkKK2V4dGVybiBpbnQgZTJmc2NrX3N0cm5sZW4oY29uc3QgY2hhciAqIHMsIGludCBjb3VudCk7CisjZW5kaWYKKworLyoKKyAqIFByb2NlZHVyZSBkZWNsYXJhdGlvbnMKKyAqLworCitleHRlcm4gdm9pZCBlMmZzY2tfcGFzczEoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGUyZnNja19wYXNzMV9kdXBibG9ja3MoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3Bhc3MyKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBlMmZzY2tfcGFzczMoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGUyZnNja19wYXNzNChlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3Bhc3M1KGUyZnNja190IGN0eCk7CisKKy8qIGUyZnNjay5jICovCitleHRlcm4gZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9jb250ZXh0KGUyZnNja190ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBlMmZzY2tfcmVzZXRfY29udGV4dChlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHZvaWQgZTJmc2NrX2ZyZWVfY29udGV4dChlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGludCBlMmZzY2tfcnVuKGUyZnNja190IGN0eCk7CisKKworLyogYmFkYmxvY2suYyAqLworZXh0ZXJuIHZvaWQgcmVhZF9iYWRfYmxvY2tzX2ZpbGUoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpiYWRfYmxvY2tzX2ZpbGUsCisJCQkJIGludCByZXBsYWNlX2JhZF9ibG9ja3MpOworCisvKiBjcmMzMi5jICovCitleHRlcm4gX191MzIgY3JjMzJfYmUoX191MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKKworLyogZGlyaW5mby5jICovCitleHRlcm4gdm9pZCBlMmZzY2tfYWRkX2Rpcl9pbmZvKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGV4dDJfaW5vX3QgcGFyZW50KTsKK2V4dGVybiB2b2lkIGUyZnNja19mcmVlX2Rpcl9pbmZvKGUyZnNja190IGN0eCk7CitleHRlcm4gaW50IGUyZnNja19nZXRfbnVtX2RpcmluZm8oZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBzdHJ1Y3QgZGlyX2luZm9faXRlciAqZTJmc2NrX2Rpcl9pbmZvX2l0ZXJfYmVnaW4oZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBzdHJ1Y3QgZGlyX2luZm8gKmUyZnNja19kaXJfaW5mb19pdGVyKGUyZnNja190IGN0eCwKKwkJCQkJICAgICBzdHJ1Y3QgZGlyX2luZm9faXRlciAqKTsKK2V4dGVybiB2b2lkIGUyZnNja19kaXJfaW5mb19pdGVyX2VuZChlMmZzY2tfdCBjdHgsIHN0cnVjdCBkaXJfaW5mb19pdGVyICopOworZXh0ZXJuIGludCBlMmZzY2tfZGlyX2luZm9fc2V0X3BhcmVudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgIGV4dDJfaW5vX3QgcGFyZW50KTsKK2V4dGVybiBpbnQgZTJmc2NrX2Rpcl9pbmZvX3NldF9kb3Rkb3QoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBleHQyX2lub190IGRvdGRvdCk7CitleHRlcm4gaW50IGUyZnNja19kaXJfaW5mb19nZXRfcGFyZW50KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICAgZXh0Ml9pbm9fdCAqcGFyZW50KTsKK2V4dGVybiBpbnQgZTJmc2NrX2Rpcl9pbmZvX2dldF9kb3Rkb3QoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBleHQyX2lub190ICpkb3Rkb3QpOworCisvKiBkeF9kaXJpbmZvLmMgKi8KK2V4dGVybiB2b2lkIGUyZnNja19hZGRfZHhfZGlyKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGludCBudW1fYmxvY2tzKTsKK2V4dGVybiBzdHJ1Y3QgZHhfZGlyX2luZm8gKmUyZnNja19nZXRfZHhfZGlyX2luZm8oZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubyk7CitleHRlcm4gdm9pZCBlMmZzY2tfZnJlZV9keF9kaXJfaW5mbyhlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGludCBlMmZzY2tfZ2V0X251bV9keF9kaXJpbmZvKGUyZnNja190IGN0eCk7CitleHRlcm4gc3RydWN0IGR4X2Rpcl9pbmZvICplMmZzY2tfZHhfZGlyX2luZm9faXRlcihlMmZzY2tfdCBjdHgsIGludCAqY29udHJvbCk7CisKKy8qIGVhX3JlZmNvdW50LmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZWFfcmVmY291bnRfY3JlYXRlKGludCBzaXplLCBleHQyX3JlZmNvdW50X3QgKnJldCk7CitleHRlcm4gdm9pZCBlYV9yZWZjb3VudF9mcmVlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCk7CitleHRlcm4gZXJyY29kZV90IGVhX3JlZmNvdW50X2ZldGNoKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgYmxrNjRfdCBibGssIGludCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZWFfcmVmY291bnRfaW5jcmVtZW50KGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICAgICAgYmxrNjRfdCBibGssIGludCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZWFfcmVmY291bnRfZGVjcmVtZW50KGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICAgICAgYmxrNjRfdCBibGssIGludCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZWFfcmVmY291bnRfc3RvcmUoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50LAorCQkJCSAgIGJsazY0X3QgYmxrLCBpbnQgY291bnQpOworZXh0ZXJuIGJsa190IGV4dDJmc19nZXRfcmVmY291bnRfc2l6ZShleHQyX3JlZmNvdW50X3QgcmVmY291bnQpOworZXh0ZXJuIHZvaWQgZWFfcmVmY291bnRfaW50cl9iZWdpbihleHQyX3JlZmNvdW50X3QgcmVmY291bnQpOworZXh0ZXJuIGJsazY0X3QgZWFfcmVmY291bnRfaW50cl9uZXh0KGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgaW50ICpyZXQpOworCisvKiBlaGFuZGxlci5jICovCitleHRlcm4gY29uc3QgY2hhciAqZWhhbmRsZXJfb3BlcmF0aW9uKGNvbnN0IGNoYXIgKm9wKTsKK2V4dGVybiB2b2lkIGVoYW5kbGVyX2luaXQoaW9fY2hhbm5lbCBjaGFubmVsKTsKKworLyogam91cm5hbC5jICovCitleHRlcm4gZXJyY29kZV90IGUyZnNja19jaGVja19leHQzX2pvdXJuYWwoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX3J1bl9leHQzX2pvdXJuYWwoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGUyZnNja19tb3ZlX2V4dDNfam91cm5hbChlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGludCBlMmZzY2tfZml4X2V4dDNfam91cm5hbF9oaW50KGUyZnNja190IGN0eCk7CisKKy8qIGxvZ2ZpbGUuYyAqLworZXh0ZXJuIHZvaWQgc2V0X3VwX2xvZ2dpbmcoZTJmc2NrX3QgY3R4KTsKKworLyogcXVvdGEuYyAqLworZXh0ZXJuIHZvaWQgZTJmc2NrX2hpZGVfcXVvdGEoZTJmc2NrX3QgY3R4KTsKKworLyogcGFzczEuYyAqLworZXh0ZXJuIHZvaWQgZTJmc2NrX3NldHVwX3RkYl9pY291bnQoZTJmc2NrX3QgY3R4LCBpbnQgZmxhZ3MsCisJCQkJICAgIGV4dDJfaWNvdW50X3QgKnJldCk7CitleHRlcm4gdm9pZCBlMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhlMmZzY2tfdCBjdHgsIGludCB1c2Vfc2hvcnRjdXRzKTsKK2V4dGVybiBpbnQgZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgZTJmc2NrX3Bhc3MxX2NoZWNrX3N5bWxpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgY2hhciAqYnVmKTsKK2V4dGVybiB2b2lkIGUyZnNja19jbGVhcl9pbm9kZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgaW50IHJlc3RhcnRfZmxhZywKKwkJCSAgICAgICBjb25zdCBjaGFyICpzb3VyY2UpOworCisvKiBwYXNzMi5jICovCitleHRlcm4gaW50IGUyZnNja19wcm9jZXNzX2JhZF9pbm9kZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgZGlyLAorCQkJCSAgICBleHQyX2lub190IGlubywgY2hhciAqYnVmKTsKKworLyogcGFzczMuYyAqLworZXh0ZXJuIGludCBlMmZzY2tfcmVjb25uZWN0X2ZpbGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX2V4cGFuZF9kaXJlY3RvcnkoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGRpciwKKwkJCQkJIGludCBudW0sIGludCBnYXVyYW50ZWVkX3NpemUpOworZXh0ZXJuIGV4dDJfaW5vX3QgZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChlMmZzY2tfdCBjdHgsIGludCBmaXgpOworZXh0ZXJuIGVycmNvZGVfdCBlMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCSAgIGludCBhZGopOworCisKKy8qIHJlZ2lvbi5jICovCitleHRlcm4gcmVnaW9uX3QgcmVnaW9uX2NyZWF0ZShyZWdpb25fYWRkcl90IG1pbiwgcmVnaW9uX2FkZHJfdCBtYXgpOworZXh0ZXJuIHZvaWQgcmVnaW9uX2ZyZWUocmVnaW9uX3QgcmVnaW9uKTsKK2V4dGVybiBpbnQgcmVnaW9uX2FsbG9jYXRlKHJlZ2lvbl90IHJlZ2lvbiwgcmVnaW9uX2FkZHJfdCBzdGFydCwgaW50IG4pOworCisvKiByZWhhc2guYyAqLworZXJyY29kZV90IGUyZnNja19yZWhhc2hfZGlyKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pOwordm9pZCBlMmZzY2tfcmVoYXNoX2RpcmVjdG9yaWVzKGUyZnNja190IGN0eCk7CisKKy8qIHNpZ2NhdGNoZXIuYyAqLwordm9pZCBzaWdjYXRjaGVyX3NldHVwKHZvaWQpOworCisvKiBzdXBlci5jICovCit2b2lkIGNoZWNrX3N1cGVyX2Jsb2NrKGUyZnNja190IGN0eCk7CitpbnQgY2hlY2tfYmFja3VwX3N1cGVyX2Jsb2NrKGUyZnNja190IGN0eCk7Cit2b2lkIGNoZWNrX3Jlc2l6ZV9pbm9kZShlMmZzY2tfdCBjdHgpOworCisvKiB1dGlsLmMgKi8KK2V4dGVybiB2b2lkICplMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGUyZnNja190IGN0eCwgdW5zaWduZWQgaW50IHNpemUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKTsKK2V4dGVybiBpbnQgYXNrKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqIHN0cmluZywgaW50IGRlZik7CitleHRlcm4gaW50IGFza195bihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKiBzdHJpbmcsIGludCBkZWYpOworZXh0ZXJuIHZvaWQgZmF0YWxfZXJyb3IoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICogZm10X3N0cmluZyk7CitleHRlcm4gdm9pZCBsb2dfb3V0KGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJRTJGU0NLX0FUVFIoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gdm9pZCBsb2dfZXJyKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJRTJGU0NLX0FUVFIoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gdm9pZCBlMmZzY2tfcmVhZF9iaXRtYXBzKGUyZnNja190IGN0eCk7CitleHRlcm4gdm9pZCBlMmZzY2tfd3JpdGVfYml0bWFwcyhlMmZzY2tfdCBjdHgpOworZXh0ZXJuIHZvaWQgcHJlZW5oYWx0KGUyZnNja190IGN0eCk7CitleHRlcm4gY2hhciAqc3RyaW5nX2NvcHkoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pOworZXh0ZXJuIGVycmNvZGVfdCBlMmZzY2tfemVyb19ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgaW50IG51bSwKKwkJCQkgICAgYmxrX3QgKnJldF9ibGssIGludCAqcmV0X2NvdW50KTsKK2V4dGVybiBpbnQgZnNfcHJvY19jaGVjayhjb25zdCBjaGFyICpmc19uYW1lKTsKK2V4dGVybiBpbnQgY2hlY2tfZm9yX21vZHVsZXMoY29uc3QgY2hhciAqZnNfbmFtZSk7CisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKK2V4dGVybiB2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKGUyZnNja190IGN0eCwKKwkJCQkgY29uc3QgY2hhciAqZGVzYywKKwkJCQkgc3RydWN0IHJlc291cmNlX3RyYWNrICp0cmFjaywKKwkJCQkgaW9fY2hhbm5lbCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIGluaXRfcmVzb3VyY2VfdHJhY2soc3RydWN0IHJlc291cmNlX3RyYWNrICp0cmFjaywKKwkJCQlpb19jaGFubmVsIGNoYW5uZWwpOworI2Vsc2UKKyNkZWZpbmUgcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCBkZXNjLCB0cmFjaywgY2hhbm5lbCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBpbml0X3Jlc291cmNlX3RyYWNrKHRyYWNrLCBjaGFubmVsKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKK2V4dGVybiBpbnQgaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrcyhzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3JlYWRfaW5vZGUoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUsIGNvbnN0IGNoYXIgKiBwcm9jKTsKK2V4dGVybiB2b2lkIGUyZnNja19yZWFkX2lub2RlX2Z1bGwoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJICAgY29uc3QgaW50IGJ1ZnNpemUsIGNvbnN0IGNoYXIgKnByb2MpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3dyaXRlX2lub2RlKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkgICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqIHByb2MpOworZXh0ZXJuIHZvaWQgZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLCBpbnQgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9jKTsKKyNpZmRlZiBNVFJBQ0UKK2V4dGVybiB2b2lkIG10cmFjZV9wcmludChjaGFyICptZXNnKTsKKyNlbmRpZgorZXh0ZXJuIGJsazY0X3QgZ2V0X2JhY2t1cF9zYihlMmZzY2tfdCBjdHgsIGV4dDJfZmlsc3lzIGZzLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgaW9fbWFuYWdlciBtYW5hZ2VyKTsKK2V4dGVybiBpbnQgZXh0Ml9maWxlX3R5cGUodW5zaWduZWQgaW50IG1vZGUpOworZXh0ZXJuIGludCB3cml0ZV9hbGwoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Cit2b2lkIGR1bXBfbW1wX21zZyhzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wLCBjb25zdCBjaGFyICptc2cpOworZXJyY29kZV90IGUyZnNja19tbXBfdXBkYXRlKGV4dDJfZmlsc3lzIGZzKTsKKworZXh0ZXJuIHZvaWQgZTJmc2NrX3NldF9iaXRtYXBfdHlwZShleHQyX2ZpbHN5cyBmcywKKwkJCQkgICB1bnNpZ25lZCBpbnQgZGVmYXVsdF90eXBlLAorCQkJCSAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfbmFtZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKm9sZF90eXBlKTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX2lub2RlX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCSAgICAgIGludCBkZWZhdWx0X3R5cGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfbmFtZSwKKwkJCQkJICAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCSAgICAgIGludCBkZWZhdWx0X3R5cGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfbmFtZSwKKwkJCQkJICAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX3N1YmNsdXN0ZXJfYml0bWFwKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCQkgICBpbnQgZGVmYXVsdF90eXBlLAorCQkJCQkJICAgY29uc3QgY2hhciAqcHJvZmlsZV9uYW1lLAorCQkJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqcmV0KTsKKworLyogdW5peC5jICovCitleHRlcm4gdm9pZCBlMmZzY2tfY2xlYXJfcHJvZ2JhcihlMmZzY2tfdCBjdHgpOworZXh0ZXJuIGludCBlMmZzY2tfc2ltcGxlX3Byb2dyZXNzKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqbGFiZWwsCisJCQkJICBmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCBpbnQgZHB5bnVtKTsKKyNlbmRpZiAvKiBfRTJGU0NLX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZWFfcmVmY291bnQuYyBiL2UyZnNwcm9ncy9lMmZzY2svZWFfcmVmY291bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGNjZDZkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9lYV9yZWZjb3VudC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogZWFfcmVmY291bnQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZQorICogcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI3VuZGVmIEVOQUJMRV9OTFMKKyNlbmRpZgorI2luY2x1ZGUgImUyZnNjay5oIgorCisvKgorICogVGhlIHN0cmF0ZWd5IHdlIHVzZSBmb3Iga2VlcGluZyB0cmFjayBvZiBFQSByZWZjb3VudHMgaXMgYXMKKyAqIGZvbGxvd3MuICBXZSBrZWVwIGEgc29ydGVkIGFycmF5IG9mIGZpcnN0IEVBIGJsb2NrcyBhbmQgaXRzCisgKiByZWZlcmVuY2UgY291bnRzLiAgT25jZSB0aGUgcmVmY291bnQgaGFzIGRyb3BwZWQgdG8gemVybywgaXQgaXMKKyAqIHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkgdG8gc2F2ZSBtZW1vcnkgc3BhY2UuICBPbmNlIHRoZSBFQSBibG9jayBpcworICogY2hlY2tlZCwgaXRzIGJpdCBpcyBzZXQgaW4gdGhlIGJsb2NrX2VhX21hcCBiaXRtYXAuCisgKi8KK3N0cnVjdCBlYV9yZWZjb3VudF9lbCB7CisJYmxrNjRfdAllYV9ibGs7CisJaW50CWVhX2NvdW50OworfTsKKworc3RydWN0IGVhX3JlZmNvdW50IHsKKwlibGtfdAkJY291bnQ7CisJYmxrX3QJCXNpemU7CisJYmxrX3QJCWN1cnNvcjsKKwlzdHJ1Y3QgZWFfcmVmY291bnRfZWwJKmxpc3Q7Cit9OworCit2b2lkIGVhX3JlZmNvdW50X2ZyZWUoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50KQoreworCWlmICghcmVmY291bnQpCisJCXJldHVybjsKKworCWlmIChyZWZjb3VudC0+bGlzdCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZyZWZjb3VudC0+bGlzdCk7CisJZXh0MmZzX2ZyZWVfbWVtKCZyZWZjb3VudCk7Cit9CisKK2VycmNvZGVfdCBlYV9yZWZjb3VudF9jcmVhdGUoaW50IHNpemUsIGV4dDJfcmVmY291bnRfdCAqcmV0KQoreworCWV4dDJfcmVmY291bnRfdAlyZWZjb3VudDsKKwllcnJjb2RlX3QJcmV0dmFsOworCXNpemVfdAkJYnl0ZXM7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGVhX3JlZmNvdW50KSwgJnJlZmNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChyZWZjb3VudCwgMCwgc2l6ZW9mKHN0cnVjdCBlYV9yZWZjb3VudCkpOworCisJaWYgKCFzaXplKQorCQlzaXplID0gNTAwOworCXJlZmNvdW50LT5zaXplID0gc2l6ZTsKKwlieXRlcyA9IChzaXplX3QpIChzaXplICogc2l6ZW9mKHN0cnVjdCBlYV9yZWZjb3VudF9lbCkpOworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJSZWZjb3VudCBhbGxvY2F0ZWQgJWQgZW50cmllcywgJWQgYnl0ZXMuXG4iLAorCSAgICAgICByZWZjb3VudC0+c2l6ZSwgYnl0ZXMpOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oYnl0ZXMsICZyZWZjb3VudC0+bGlzdCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KHJlZmNvdW50LT5saXN0LCAwLCBieXRlcyk7CisKKwlyZWZjb3VudC0+Y291bnQgPSAwOworCXJlZmNvdW50LT5jdXJzb3IgPSAwOworCisJKnJldCA9IHJlZmNvdW50OworCXJldHVybiAwOworCitlcnJvdXQ6CisJZWFfcmVmY291bnRfZnJlZShyZWZjb3VudCk7CisJcmV0dXJuKHJldHZhbCk7Cit9CisKKy8qCisgKiBjb2xsYXBzZV9yZWZjb3VudCgpIC0tLSBnbyB0aHJvdWdoIHRoZSByZWZjb3VudCBhcnJheSwgYW5kIGdldCByaWQKKyAqIG9mIGFueSBjb3VudCA9PSB6ZXJvIGVudHJpZXMKKyAqLworc3RhdGljIHZvaWQgcmVmY291bnRfY29sbGFwc2UoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50KQoreworCXVuc2lnbmVkIGludAlpLCBqOworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqbGlzdDsKKworCWxpc3QgPSByZWZjb3VudC0+bGlzdDsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHJlZmNvdW50LT5jb3VudDsgaSsrKSB7CisJCWlmIChsaXN0W2ldLmVhX2NvdW50KSB7CisJCQlpZiAoaSAhPSBqKQorCQkJCWxpc3Rbal0gPSBsaXN0W2ldOworCQkJaisrOworCQl9CisJfQorI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoVEVTVF9QUk9HUkFNKQorCXByaW50ZigiUmVmY291bnRfY29sbGFwc2U6IHNpemUgd2FzICVkLCBub3cgJWRcbiIsCisJICAgICAgIHJlZmNvdW50LT5jb3VudCwgaik7CisjZW5kaWYKKwlyZWZjb3VudC0+Y291bnQgPSBqOworfQorCisKKy8qCisgKiBpbnNlcnRfcmVmY291bnRfZWwoKSAtLS0gSW5zZXJ0IGEgbmV3IGVudHJ5IGludG8gdGhlIHNvcnRlZCBsaXN0IGF0IGEKKyAqIAlzcGVjaWZpZWQgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWFfcmVmY291bnRfZWwgKmluc2VydF9yZWZjb3VudF9lbChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsCisJCQkJCQkgYmxrNjRfdCBibGssIGludCBwb3MpCit7CisJc3RydWN0IGVhX3JlZmNvdW50X2VsIAkqZWw7CisJZXJyY29kZV90CQlyZXR2YWw7CisJYmxrX3QJCQluZXdfc2l6ZSA9IDA7CisJaW50CQkJbnVtOworCisJaWYgKHJlZmNvdW50LT5jb3VudCA+PSByZWZjb3VudC0+c2l6ZSkgeworCQluZXdfc2l6ZSA9IHJlZmNvdW50LT5zaXplICsgMTAwOworI2lmZGVmIERFQlVHCisJCXByaW50ZigiUmVhbGxvY2F0aW5nIHJlZmNvdW50ICVkIGVudHJpZXMuLi5cbiIsIG5ld19zaXplKTsKKyNlbmRpZgorCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbSgoc2l6ZV90KSByZWZjb3VudC0+c2l6ZSAqCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZWFfcmVmY291bnRfZWwpLAorCQkJCQkgICAoc2l6ZV90KSBuZXdfc2l6ZSAqCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZWFfcmVmY291bnRfZWwpLAorCQkJCQkgICAmcmVmY291bnQtPmxpc3QpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIDA7CisJCXJlZmNvdW50LT5zaXplID0gbmV3X3NpemU7CisJfQorCW51bSA9IChpbnQpIHJlZmNvdW50LT5jb3VudCAtIHBvczsKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuIDA7CS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwlpZiAobnVtKSB7CisJCW1lbW1vdmUoJnJlZmNvdW50LT5saXN0W3BvcysxXSwgJnJlZmNvdW50LT5saXN0W3Bvc10sCisJCQlzaXplb2Yoc3RydWN0IGVhX3JlZmNvdW50X2VsKSAqIG51bSk7CisJfQorCXJlZmNvdW50LT5jb3VudCsrOworCWVsID0gJnJlZmNvdW50LT5saXN0W3Bvc107CisJZWwtPmVhX2NvdW50ID0gMDsKKwllbC0+ZWFfYmxrID0gYmxrOworCXJldHVybiBlbDsKK30KKworCisvKgorICogZ2V0X3JlZmNvdW50X2VsKCkgLS0tIGdpdmVuIGFuIGJsb2NrIG51bWJlciwgdHJ5IHRvIGZpbmQgcmVmY291bnQKKyAqIAlpbmZvcm1hdGlvbiBpbiB0aGUgc29ydGVkIGxpc3QuICBJZiB0aGUgY3JlYXRlIGZsYWcgaXMgc2V0LAorICogCWFuZCB3ZSBjYW4ndCBmaW5kIGFuIGVudHJ5LCBjcmVhdGUgb25lIGluIHRoZSBzb3J0ZWQgbGlzdC4KKyAqLworc3RhdGljIHN0cnVjdCBlYV9yZWZjb3VudF9lbCAqZ2V0X3JlZmNvdW50X2VsKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkJICAgICAgYmxrNjRfdCBibGssIGludCBjcmVhdGUpCit7CisJaW50CWxvdywgaGlnaCwgbWlkOworCisJaWYgKCFyZWZjb3VudCB8fCAhcmVmY291bnQtPmxpc3QpCisJCXJldHVybiAwOworcmV0cnk6CisJbG93ID0gMDsKKwloaWdoID0gKGludCkgcmVmY291bnQtPmNvdW50LTE7CisJaWYgKGNyZWF0ZSAmJiAoKHJlZmNvdW50LT5jb3VudCA9PSAwKSB8fAorCQkgICAgICAgKGJsayA+IHJlZmNvdW50LT5saXN0W2hpZ2hdLmVhX2JsaykpKSB7CisJCWlmIChyZWZjb3VudC0+Y291bnQgPj0gcmVmY291bnQtPnNpemUpCisJCQlyZWZjb3VudF9jb2xsYXBzZShyZWZjb3VudCk7CisKKwkJcmV0dXJuIGluc2VydF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLAorCQkJCQkgICh1bnNpZ25lZCkgcmVmY291bnQtPmNvdW50KTsKKwl9CisJaWYgKHJlZmNvdW50LT5jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChyZWZjb3VudC0+Y3Vyc29yID49IHJlZmNvdW50LT5jb3VudCkKKwkJcmVmY291bnQtPmN1cnNvciA9IDA7CisJaWYgKGJsayA9PSByZWZjb3VudC0+bGlzdFtyZWZjb3VudC0+Y3Vyc29yXS5lYV9ibGspCisJCXJldHVybiAmcmVmY291bnQtPmxpc3RbcmVmY291bnQtPmN1cnNvcisrXTsKKyNpZmRlZiBERUJVRworCXByaW50ZigiTm9uLWN1cnNvciBnZXRfcmVmY291bnRfZWw6ICV1XG4iLCBibGspOworI2VuZGlmCisJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CisJCW1pZCA9IChsb3craGlnaCkvMjsKKwkJaWYgKGJsayA9PSByZWZjb3VudC0+bGlzdFttaWRdLmVhX2JsaykgeworCQkJcmVmY291bnQtPmN1cnNvciA9IG1pZCsxOworCQkJcmV0dXJuICZyZWZjb3VudC0+bGlzdFttaWRdOworCQl9CisJCWlmIChibGsgPCByZWZjb3VudC0+bGlzdFttaWRdLmVhX2JsaykKKwkJCWhpZ2ggPSBtaWQtMTsKKwkJZWxzZQorCQkJbG93ID0gbWlkKzE7CisJfQorCS8qCisJICogSWYgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZW50cnksIGl0IHNob3VsZCBiZSByaWdodCBhdAorCSAqIGxvdyAod2hlcmUgaGlnaCB3aWxsIGJlIGxlZnQgYXQgbG93LTEpLgorCSAqLworCWlmIChjcmVhdGUpIHsKKwkJaWYgKHJlZmNvdW50LT5jb3VudCA+PSByZWZjb3VudC0+c2l6ZSkgeworCQkJcmVmY291bnRfY29sbGFwc2UocmVmY291bnQpOworCQkJaWYgKHJlZmNvdW50LT5jb3VudCA8IHJlZmNvdW50LT5zaXplKQorCQkJCWdvdG8gcmV0cnk7CisJCX0KKwkJcmV0dXJuIGluc2VydF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLCBsb3cpOworCX0KKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGVhX3JlZmNvdW50X2ZldGNoKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgYmxrNjRfdCBibGssCisJCQkJaW50ICpyZXQpCit7CisJc3RydWN0IGVhX3JlZmNvdW50X2VsCSplbDsKKworCWVsID0gZ2V0X3JlZmNvdW50X2VsKHJlZmNvdW50LCBibGssIDApOworCWlmICghZWwpIHsKKwkJKnJldCA9IDA7CisJCXJldHVybiAwOworCX0KKwkqcmV0ID0gZWwtPmVhX2NvdW50OworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZWFfcmVmY291bnRfaW5jcmVtZW50KGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgYmxrNjRfdCBibGssIGludCAqcmV0KQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqZWw7CisKKwllbCA9IGdldF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLCAxKTsKKwlpZiAoIWVsKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJZWwtPmVhX2NvdW50Kys7CisKKwlpZiAocmV0KQorCQkqcmV0ID0gZWwtPmVhX2NvdW50OworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZWFfcmVmY291bnRfZGVjcmVtZW50KGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgYmxrNjRfdCBibGssIGludCAqcmV0KQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqZWw7CisKKwllbCA9IGdldF9yZWZjb3VudF9lbChyZWZjb3VudCwgYmxrLCAwKTsKKwlpZiAoIWVsIHx8IGVsLT5lYV9jb3VudCA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJZWwtPmVhX2NvdW50LS07CisKKwlpZiAocmV0KQorCQkqcmV0ID0gZWwtPmVhX2NvdW50OworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZWFfcmVmY291bnRfc3RvcmUoZXh0Ml9yZWZjb3VudF90IHJlZmNvdW50LCBibGs2NF90IGJsaywgaW50IGNvdW50KQoreworCXN0cnVjdCBlYV9yZWZjb3VudF9lbAkqZWw7CisKKwkvKgorCSAqIEdldCB0aGUgcmVmY291bnQgZWxlbWVudAorCSAqLworCWVsID0gZ2V0X3JlZmNvdW50X2VsKHJlZmNvdW50LCBibGssIGNvdW50ID8gMSA6IDApOworCWlmICghZWwpCisJCXJldHVybiBjb3VudCA/IEVYVDJfRVRfTk9fTUVNT1JZIDogMDsKKwllbC0+ZWFfY291bnQgPSBjb3VudDsKKwlyZXR1cm4gMDsKK30KKworYmxrX3QgZXh0MmZzX2dldF9yZWZjb3VudF9zaXplKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCkKK3sKKwlpZiAoIXJlZmNvdW50KQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZWZjb3VudC0+c2l6ZTsKK30KKwordm9pZCBlYV9yZWZjb3VudF9pbnRyX2JlZ2luKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCkKK3sKKwlyZWZjb3VudC0+Y3Vyc29yID0gMDsKK30KKworCitibGs2NF90IGVhX3JlZmNvdW50X2ludHJfbmV4dChleHQyX3JlZmNvdW50X3QgcmVmY291bnQsCisJCQkJaW50ICpyZXQpCit7CisJc3RydWN0IGVhX3JlZmNvdW50X2VsCSpsaXN0OworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHJlZmNvdW50LT5jdXJzb3IgPj0gcmVmY291bnQtPmNvdW50KQorCQkJcmV0dXJuIDA7CisJCWxpc3QgPSByZWZjb3VudC0+bGlzdDsKKwkJaWYgKGxpc3RbcmVmY291bnQtPmN1cnNvcl0uZWFfY291bnQpIHsKKwkJCWlmIChyZXQpCisJCQkJKnJldCA9IGxpc3RbcmVmY291bnQtPmN1cnNvcl0uZWFfY291bnQ7CisJCQlyZXR1cm4gbGlzdFtyZWZjb3VudC0+Y3Vyc29yKytdLmVhX2JsazsKKwkJfQorCQlyZWZjb3VudC0+Y3Vyc29yKys7CisJfQorfQorCisKKyNpZmRlZiBURVNUX1BST0dSQU0KKworZXJyY29kZV90IGVhX3JlZmNvdW50X3ZhbGlkYXRlKGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwgRklMRSAqb3V0KQoreworCWVycmNvZGVfdAlyZXQgPSAwOworCWludAkJaTsKKwljb25zdCBjaGFyICpiYWQgPSAiYmFkIHJlZmNvdW50IjsKKworCWlmIChyZWZjb3VudC0+Y291bnQgPiByZWZjb3VudC0+c2l6ZSkgeworCQlmcHJpbnRmKG91dCwgIiVzOiBjb3VudCA+IHNpemVcbiIsIGJhZCk7CisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJfQorCWZvciAoaT0xOyBpIDwgcmVmY291bnQtPmNvdW50OyBpKyspIHsKKwkJaWYgKHJlZmNvdW50LT5saXN0W2ktMV0uZWFfYmxrID49IHJlZmNvdW50LT5saXN0W2ldLmVhX2JsaykgeworCQkJZnByaW50ZihvdXQsCisJCQkJIiVzOiBsaXN0WyVkXS5ibGs9JWxsdSwgbGlzdFslZF0uYmxrPSVsbHVcbiIsCisJCQkJYmFkLCBpLTEsIHJlZmNvdW50LT5saXN0W2ktMV0uZWFfYmxrLAorCQkJCWksIHJlZmNvdW50LT5saXN0W2ldLmVhX2Jsayk7CisJCQlyZXQgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBCQ09ERV9FTkQJMAorI2RlZmluZSBCQ09ERV9DUkVBVEUJMQorI2RlZmluZSBCQ09ERV9GUkVFCTIKKyNkZWZpbmUgQkNPREVfU1RPUkUJMworI2RlZmluZSBCQ09ERV9JTkNSCTQKKyNkZWZpbmUgQkNPREVfREVDUgk1CisjZGVmaW5lIEJDT0RFX0ZFVENICTYKKyNkZWZpbmUgQkNPREVfVkFMSURBVEUJNworI2RlZmluZSBCQ09ERV9MSVNUCTgKKyNkZWZpbmUgQkNPREVfQ09MTEFQU0UgOQorCitpbnQgYmNvZGVfcHJvZ3JhbVtdID0geworCUJDT0RFX0NSRUFURSwgNSwKKwlCQ09ERV9TVE9SRSwgMywgMywKKwlCQ09ERV9TVE9SRSwgNCwgNCwKKwlCQ09ERV9TVE9SRSwgMSwgMSwKKwlCQ09ERV9TVE9SRSwgOCwgOCwKKwlCQ09ERV9TVE9SRSwgMiwgMiwKKwlCQ09ERV9TVE9SRSwgNCwgMCwKKwlCQ09ERV9TVE9SRSwgMiwgMCwKKwlCQ09ERV9TVE9SRSwgNiwgNiwKKwlCQ09ERV9WQUxJREFURSwKKwlCQ09ERV9TVE9SRSwgNCwgNCwKKwlCQ09ERV9TVE9SRSwgMiwgMiwKKwlCQ09ERV9GRVRDSCwgMSwKKwlCQ09ERV9GRVRDSCwgMiwKKwlCQ09ERV9JTkNSLCAzLAorCUJDT0RFX0lOQ1IsIDMsCisJQkNPREVfREVDUiwgNCwKKwlCQ09ERV9TVE9SRSwgNCwgNCwKKwlCQ09ERV9WQUxJREFURSwKKwlCQ09ERV9TVE9SRSwgMjAsIDIwLAorCUJDT0RFX1NUT1JFLCA0MCwgNDAsCisJQkNPREVfU1RPUkUsIDMwLCAzMCwKKwlCQ09ERV9TVE9SRSwgMTAsIDEwLAorCUJDT0RFX0RFQ1IsIDMwLAorCUJDT0RFX0ZFVENILCAzMCwKKwlCQ09ERV9ERUNSLCAyLAorCUJDT0RFX0RFQ1IsIDIsCisJQkNPREVfQ09MTEFQU0UsCisJQkNPREVfTElTVCwKKwlCQ09ERV9WQUxJREFURSwKKwlCQ09ERV9GUkVFLAorCUJDT0RFX0VORAorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludAlpID0gMDsKKwlleHQyX3JlZmNvdW50X3QgcmVmY291bnQ7CisJaW50CQlzaXplLCBhcmc7CisJYmxrNjRfdAkJYmxrOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwl3aGlsZSAoMSkgeworCQlzd2l0Y2ggKGJjb2RlX3Byb2dyYW1baSsrXSkgeworCQljYXNlIEJDT0RFX0VORDoKKwkJCWV4aXQoMCk7CisJCWNhc2UgQkNPREVfQ1JFQVRFOgorCQkJc2l6ZSA9IGJjb2RlX3Byb2dyYW1baSsrXTsKKwkJCXJldHZhbCA9IGVhX3JlZmNvdW50X2NyZWF0ZShzaXplLCAmcmVmY291bnQpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoImVhX3JlZmNvdW50X2NyZWF0ZSIsIHJldHZhbCwKKwkJCQkJIndoaWxlIGNyZWF0aW5nIHNpemUgJWQiLCBzaXplKTsKKwkJCQlleGl0KDEpOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCJDcmVhdGluZyByZWZjb3VudCB3aXRoIHNpemUgJWRcbiIsCisJCQkJICAgICAgIHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfRlJFRToKKwkJCWVhX3JlZmNvdW50X2ZyZWUocmVmY291bnQpOworCQkJcmVmY291bnQgPSAwOworCQkJcHJpbnRmKCJGcmVlaW5nIHJlZmNvdW50XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX1NUT1JFOgorCQkJYmxrID0gKGJsa190KSBiY29kZV9wcm9ncmFtW2krK107CisJCQlhcmcgPSBiY29kZV9wcm9ncmFtW2krK107CisJCQlwcmludGYoIlN0b3JpbmcgYmxrICVsbHUgd2l0aCB2YWx1ZSAlZFxuIiwgYmxrLCBhcmcpOworCQkJcmV0dmFsID0gZWFfcmVmY291bnRfc3RvcmUocmVmY291bnQsIGJsaywgYXJnKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJY29tX2VycigiZWFfcmVmY291bnRfc3RvcmUiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBzdG9yaW5nIGJsayAlbGx1IiwgYmxrKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX0ZFVENIOgorCQkJYmxrID0gKGJsa190KSBiY29kZV9wcm9ncmFtW2krK107CisJCQlyZXR2YWwgPSBlYV9yZWZjb3VudF9mZXRjaChyZWZjb3VudCwgYmxrLCAmYXJnKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJY29tX2VycigiZWFfcmVmY291bnRfZmV0Y2giLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBmZXRjaGluZyBibGsgJWxsdSIsIGJsayk7CisJCQllbHNlCisJCQkJcHJpbnRmKCJiY29kZV9mZXRjaCglbGx1KSByZXR1cm5zICVkXG4iLAorCQkJCSAgICAgICBibGssIGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9JTkNSOgorCQkJYmxrID0gKGJsa190KSBiY29kZV9wcm9ncmFtW2krK107CisJCQlyZXR2YWwgPSBlYV9yZWZjb3VudF9pbmNyZW1lbnQocmVmY291bnQsIGJsaywgJmFyZyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWNvbV9lcnIoImVhX3JlZmNvdW50X2luY3JlbWVudCIsIHJldHZhbCwKKwkJCQkJIndoaWxlIGluY3JlbWVudGluZyBibGsgJWxsdSIsIGJsayk7CisJCQllbHNlCisJCQkJcHJpbnRmKCJiY29kZV9pbmNyZW1lbnQoJWxsdSkgcmV0dXJucyAlZFxuIiwKKwkJCQkgICAgICAgYmxrLCBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfREVDUjoKKwkJCWJsayA9IChibGtfdCkgYmNvZGVfcHJvZ3JhbVtpKytdOworCQkJcmV0dmFsID0gZWFfcmVmY291bnRfZGVjcmVtZW50KHJlZmNvdW50LCBibGssICZhcmcpOworCQkJaWYgKHJldHZhbCkKKwkJCQljb21fZXJyKCJlYV9yZWZjb3VudF9kZWNyZW1lbnQiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSBkZWNyZW1lbnRpbmcgYmxrICVsbHUiLCBibGspOworCQkJZWxzZQorCQkJCXByaW50ZigiYmNvZGVfZGVjcmVtZW50KCVsbHUpIHJldHVybnMgJWRcbiIsCisJCQkJICAgICAgIGJsaywgYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEJDT0RFX1ZBTElEQVRFOgorCQkJcmV0dmFsID0gZWFfcmVmY291bnRfdmFsaWRhdGUocmVmY291bnQsIHN0ZGVycik7CisJCQlpZiAocmV0dmFsKQorCQkJCWNvbV9lcnIoImVhX3JlZmNvdW50X3ZhbGlkYXRlIiwgcmV0dmFsLAorCQkJCQkid2hpbGUgdmFsaWRhdGluZyIpOworCQkJZWxzZQorCQkJCXByaW50ZigiUmVmY291bnQgdmFsaWRhdGlvbiBPSy5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfTElTVDoKKwkJCWVhX3JlZmNvdW50X2ludHJfYmVnaW4ocmVmY291bnQpOworCQkJd2hpbGUgKDEpIHsKKwkJCQlibGsgPSBlYV9yZWZjb3VudF9pbnRyX25leHQocmVmY291bnQsICZhcmcpOworCQkJCWlmICghYmxrKQorCQkJCQlicmVhazsKKwkJCQlwcmludGYoIlx0YmxrPSVsbHUsIGNvdW50PSVkXG4iLCBibGssIGFyZyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9DT0xMQVBTRToKKwkJCXJlZmNvdW50X2NvbGxhcHNlKHJlZmNvdW50KTsKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9laGFuZGxlci5jIGIvZTJmc3Byb2dzL2UyZnNjay9laGFuZGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmYyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2VoYW5kbGVyLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBlaGFuZGxlci5jIC0tLSBoYW5kbGUgYmFkIGJsb2NrIGVycm9ycyB3aGljaCBjb21lIHVwIGR1cmluZyB0aGUKKyAqIAljb3Vyc2Ugb2YgYW4gZTJmc2NrIHNlc3Npb24uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZXJhdGlvbjsKKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfaGFuZGxlX3JlYWRfZXJyb3IoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJCSAgaW50IGNvdW50LAorCQkJCQkgIHZvaWQgKmRhdGEsCisJCQkJCSAgc2l6ZV90IHNpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCQkgIGludCBhY3R1YWwgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCQkgIGVycmNvZGVfdCBlcnJvcikKK3sKKwlpbnQJaTsKKwljaGFyCSpwOworCWV4dDJfZmlsc3lzIGZzID0gKGV4dDJfZmlsc3lzKSBjaGFubmVsLT5hcHBfZGF0YTsKKwllMmZzY2tfdCBjdHg7CisKKwljdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19FWElUSU5HKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgYmxvY2sgd2FzIHJlYWQsIHRyeSByZWFkaW5nIGVhY2ggYmxvY2sKKwkgKiBzZXBhcmF0ZWx5LiAgV2UgY291bGQgdXNlIHRoZSBhY3R1YWwgYnl0ZXMgcmVhZCB0byBmaWd1cmUKKwkgKiBvdXQgd2hlcmUgdG8gc3RhcnQsIGJ1dCB3ZSBkb24ndCBib3RoZXIuCisJICovCisJaWYgKGNvdW50ID4gMSkgeworCQlwID0gKGNoYXIgKikgZGF0YTsKKwkJZm9yIChpPTA7IGkgPCBjb3VudDsgaSsrLCBwICs9IGNoYW5uZWwtPmJsb2NrX3NpemUsIGJsb2NrKyspIHsKKwkJCWVycm9yID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgIDEsIHApOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wZXJhdGlvbikKKwkJcHJpbnRmKF8oIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiKSwgYmxvY2ssCisJCSAgICAgICBlcnJvcl9tZXNzYWdlKGVycm9yKSwgb3BlcmF0aW9uKTsKKwllbHNlCisJCXByaW50ZihfKCJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIiksIGJsb2NrLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShlcnJvcikpOworCXByZWVuaGFsdChjdHgpOworCWlmIChhc2soY3R4LCBfKCJJZ25vcmUgZXJyb3IiKSwgMSkpIHsKKwkJaWYgKGFzayhjdHgsIF8oIkZvcmNlIHJld3JpdGUiKSwgMSkpCisJCQlpb19jaGFubmVsX3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgZGF0YSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfaGFuZGxlX3dyaXRlX2Vycm9yKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJCSAgICBpbnQgY291bnQsCisJCQkJCSAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkgICAgc2l6ZV90IHNpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCQkgICAgaW50IGFjdHVhbCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJCSAgICBlcnJjb2RlX3QgZXJyb3IpCit7CisJaW50CQlpOworCWNvbnN0IGNoYXIJKnA7CisJZXh0Ml9maWxzeXMgZnMgPSAoZXh0Ml9maWxzeXMpIGNoYW5uZWwtPmFwcF9kYXRhOworCWUyZnNja190IGN0eDsKKworCWN0eCA9IChlMmZzY2tfdCkgZnMtPnByaXZfZGF0YTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX0VYSVRJTkcpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBtb3JlIHRoYW4gb25lIGJsb2NrIHdhcyB3cml0dGVuLCB0cnkgd3JpdGluZyBlYWNoIGJsb2NrCisJICogc2VwYXJhdGVseS4gIFdlIGNvdWxkIHVzZSB0aGUgYWN0dWFsIGJ5dGVzIHJlYWQgdG8gZmlndXJlCisJICogb3V0IHdoZXJlIHRvIHN0YXJ0LCBidXQgd2UgZG9uJ3QgYm90aGVyLgorCSAqLworCWlmIChjb3VudCA+IDEpIHsKKwkJcCA9IChjb25zdCBjaGFyICopIGRhdGE7CisJCWZvciAoaT0wOyBpIDwgY291bnQ7IGkrKywgcCArPSBjaGFubmVsLT5ibG9ja19zaXplLCBibG9jaysrKSB7CisJCQllcnJvciA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoY2hhbm5lbCwgYmxvY2ssCisJCQkJCQkgICAgIDEsIHApOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob3BlcmF0aW9uKQorCQlwcmludGYoXygiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIpLCBibG9jaywKKwkJICAgICAgIGVycm9yX21lc3NhZ2UoZXJyb3IpLCBvcGVyYXRpb24pOworCWVsc2UKKwkJcHJpbnRmKF8oIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiKSwgYmxvY2ssCisJCSAgICAgICBlcnJvcl9tZXNzYWdlKGVycm9yKSk7CisJcHJlZW5oYWx0KGN0eCk7CisJaWYgKGFzayhjdHgsIF8oIklnbm9yZSBlcnJvciIpLCAxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2NvbnN0IGNoYXIgKmVoYW5kbGVyX29wZXJhdGlvbihjb25zdCBjaGFyICpvcCkKK3sKKwljb25zdCBjaGFyICpyZXQgPSBvcGVyYXRpb247CisKKwlvcGVyYXRpb24gPSBvcDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGVoYW5kbGVyX2luaXQoaW9fY2hhbm5lbCBjaGFubmVsKQoreworCWNoYW5uZWwtPnJlYWRfZXJyb3IgPSBlMmZzY2tfaGFuZGxlX3JlYWRfZXJyb3I7CisJY2hhbm5lbC0+d3JpdGVfZXJyb3IgPSBlMmZzY2tfaGFuZGxlX3dyaXRlX2Vycm9yOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9lbXB0eWRpci5jIGIvZTJmc3Byb2dzL2UyZnNjay9lbXB0eWRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOWI1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2VtcHR5ZGlyLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBlbXB0eWRpci5jIC0tLSBjbGVhciBlbXB0eSBkaXJlY3RvcnkgYmxvY2tzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqIFRoaXMgZmlsZSBoYXMgdGhlIG5lY2Vzc2FyeSByb3V0aW5lcyB0byBzZWFyY2ggZm9yIGVtcHR5IGRpcmVjdG9yeQorICogYmxvY2tzIGFuZCBnZXQgcmlkIG9mIHRoZW0uCisgKi8KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKworLyoKKyAqIEZvciBlMmZzY2suaAorICovCitzdHJ1Y3QgZW1wdHlfZGlyX2luZm9fc3RydWN0IHsKKwlleHQyX2RibGlzdCBlbXB0eV9kYmxpc3Q7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBlbXB0eV9kaXJfYmxvY2tzOworCWV4dDJmc19pbm9kZV9iaXRtYXAgZGlyX21hcDsKKwljaGFyICpibG9ja19idWY7CisJZXh0Ml9pbm9fdCBpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJYmxrNjRfdAlsb2dibGs7CisJYmxrNjRfdAlmcmVlZF9ibG9ja3M7Cit9OworCit0eXBlZGVmIHN0cnVjdCBlbXB0eV9kaXJfaW5mb19zdHJ1Y3QgKmVtcHR5X2Rpcl9pbmZvOworCitleHRlcm4gZW1wdHlfZGlyX2luZm8gaW5pdF9lbXB0eV9kaXIoZTJmc2NrX3QgY3R4KTsKK2V4dGVybiB2b2lkIGZyZWVfZW1wdHlfZGlyYmxvY2soZW1wdHlfZGlyX2luZm8gZWRpKTsKK2V4dGVybiB2b2lkIGFkZF9lbXB0eV9kaXJibG9jayhlbXB0eV9kaXJfaW5mbyBlZGksCisJCQkgICAgICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYik7CitleHRlcm4gdm9pZCBwcm9jZXNzX2VtcHR5X2RpcmJsb2NrKGUyZnNja190IGN0eCwgZW1wdHlfZGlyX2luZm8gZWRpKTsKKworCitlbXB0eV9kaXJfaW5mbyBpbml0X2VtcHR5X2RpcihlMmZzY2tfdCBjdHgpCit7CisJZW1wdHlfZGlyX2luZm8JZWRpOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwllZGkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlbXB0eV9kaXJfaW5mb19zdHJ1Y3QpKTsKKwlpZiAoIWVkaSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoZWRpLCAwLCBzaXplb2Yoc3RydWN0IGVtcHR5X2Rpcl9pbmZvX3N0cnVjdCkpOworCisJcmV0dmFsID0gZXh0MmZzX2luaXRfZGJsaXN0KGN0eC0+ZnMsICZlZGktPmVtcHR5X2RibGlzdCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGN0eC0+ZnMsIF8oImVtcHR5IGRpcmJsb2NrcyIpLAorCQkJCQkgICAgICAmZWRpLT5lbXB0eV9kaXJfYmxvY2tzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoY3R4LT5mcywgXygiZW1wdHkgZGlyIG1hcCIpLAorCQkJCQkgICAgICAmZWRpLT5kaXJfbWFwKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldHVybiAoZWRpKTsKKworZXJyb3V0OgorCWZyZWVfZW1wdHlfZGlyYmxvY2soZWRpKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBmcmVlX2VtcHR5X2RpcmJsb2NrKGVtcHR5X2Rpcl9pbmZvIGVkaSkKK3sKKwlpZiAoIWVkaSkKKwkJcmV0dXJuOworCWlmIChlZGktPmVtcHR5X2RibGlzdCkKKwkJZXh0MmZzX2ZyZWVfZGJsaXN0KGVkaS0+ZW1wdHlfZGJsaXN0KTsKKwlpZiAoZWRpLT5lbXB0eV9kaXJfYmxvY2tzKQorCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoZWRpLT5lbXB0eV9kaXJfYmxvY2tzKTsKKwlpZiAoZWRpLT5kaXJfbWFwKQorCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoZWRpLT5kaXJfbWFwKTsKKworCW1lbXNldChlZGksIDAsIHNpemVvZihzdHJ1Y3QgZW1wdHlfZGlyX2luZm9fc3RydWN0KSk7CisJZnJlZShlZGkpOworfQorCit2b2lkIGFkZF9lbXB0eV9kaXJibG9jayhlbXB0eV9kaXJfaW5mbyBlZGksCisJCQlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiKQoreworCWlmICghZWRpIHx8ICFkYikKKwkJcmV0dXJuOworCisJaWYgKGRiLT5pbm8gPT0gMTEpCisJCXJldHVybjsJCS8qIElub2RlIG51bWJlciAxMSBpcyB1c3VhbGx5IGxvc3QrZm91bmQgKi8KKworCXByaW50ZihfKCJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIpLAorCSAgICAgICBkYi0+YmxrLCBkYi0+YmxvY2tjbnQsIGRiLT5pbm8pOworCisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihlZGktPmVtcHR5X2Rpcl9ibG9ja3MsIGRiLT5ibGspOworCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAoZWRpLT5kaXJfbWFwLCBkYi0+aW5vKSkKKwkJcmV0dXJuOworCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcChlZGktPmRpcl9tYXAsIGRiLT5pbm8pOworCisJZXh0MmZzX2FkZF9kaXJfYmxvY2syKGVkaS0+ZW1wdHlfZGJsaXN0LCBkYi0+aW5vLAorCQkJICAgICAgZGItPmJsaywgZGItPmJsb2NrY250KTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpeF9kaXJlY3RvcnkuCisgKgorICogWFhYIG5lZWQgdG8gZmluaXNoIHRoaXMuICBHZW5lcmFsIGFwcHJvYWNoIGlzIHRvIHVzZSBibWFwIHRvCisgKiBpdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBsb2dpY2FsIGJsb2NrcyB1c2luZyB0aGUgYm1hcCBmdW5jdGlvbiwgYW5kCisgKiBjb3B5IHRoZSBibG9jayByZWZlcmVuY2UgYXMgbmVjZXNzYXJ5LiAgQmlnIHF1ZXN0aW9uIC0tLSB3aGF0IGRvCisgKiBhYm91dCBlcnJvciByZWNvdmVyeT8KKyAqCisgKiBBbHNvIHF1ZXN0aW9uIC0tLSBob3cgdG8gZnJlZSB0aGUgaW5kaXJlY3QgYmxvY2tzLgorICovCitpbnQgZW1wdHlfcGFzczEoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrX25yLCBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJYmxrNjRfdCByZWZfYmxvY2ssIGludCByZWZfb2Zmc2V0LCB2b2lkICpwcml2X2RhdGEpCit7CisJZW1wdHlfZGlyX2luZm8gZWRpID0gKGVtcHR5X2Rpcl9pbmZvKSBwcml2X2RhdGE7CisJYmxrNjRfdAlibG9jaywgbmV3X2Jsb2NrOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoYmxvY2tjbnQgPCAwKQorCQlyZXR1cm4gMDsKKwlibG9jayA9ICpibG9ja19ucjsKKwlkbyB7CisJCXJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgZWRpLT5pbm8sICZlZGktPmlub2RlLAorCQkJCSAgICAgIGVkaS0+YmxvY2tfYnVmLCAwLCBlZGktPmxvZ2JsaywgMCwKKwkJCQkgICAgICAmbmV3X2Jsb2NrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiBESVJFTlRfQUJPUlQ7ICAgLyogWFhYIHdoYXQgdG8gZG8/ICovCisJCWlmIChuZXdfYmxvY2sgPT0gMCkKKwkJCWJyZWFrOworCQllZGktPmxvZ2JsaysrOworCX0gd2hpbGUgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZWRpLT5lbXB0eV9kaXJfYmxvY2tzLCBuZXdfYmxvY2spKTsKKworCWlmIChuZXdfYmxvY2sgPT0gYmxvY2spCisJCXJldHVybiAwOworCWlmIChuZXdfYmxvY2sgPT0gMCkKKwkJZWRpLT5mcmVlZF9ibG9ja3MrKzsKKwkqYmxvY2tfbnIgPSBuZXdfYmxvY2s7CisJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7Cit9CisKK3N0YXRpYyBpbnQgZml4X2RpcmVjdG9yeShleHQyX2ZpbHN5cyBmcywKKwkJCSBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiLAorCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJZW1wdHlfZGlyX2luZm8gZWRpID0gKGVtcHR5X2Rpcl9pbmZvKSBwcml2X2RhdGE7CisKKwllZGktPmxvZ2JsayA9IDA7CisJZWRpLT5mcmVlZF9ibG9ja3MgPSAwOworCWVkaS0+aW5vID0gZGItPmlubzsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBkYi0+aW5vLCAmZWRpLT5pbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGRiLT5pbm8sIDAsIGVkaS0+YmxvY2tfYnVmLAorCQkJCSAgICAgICBlbXB0eV9wYXNzMSwgZWRpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gMDsKKworCWlmIChlZGktPmZyZWVkX2Jsb2NrcykgeworCQllZGktPmlub2RlLmlfc2l6ZSAtPSBlZGktPmZyZWVkX2Jsb2NrcyAqIGZzLT5ibG9ja3NpemU7CisJCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZlZGktPmlub2RlLCBlZGktPmZyZWVkX2Jsb2Nrcyk7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgZGItPmlubywgJmVkaS0+aW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHByb2Nlc3NfZW1wdHlfZGlyYmxvY2soZTJmc2NrX3QgY3R4LCBlbXB0eV9kaXJfaW5mbyBlZGkpCit7CisJaWYgKCFlZGkpCisJCXJldHVybjsKKworCWVkaS0+YmxvY2tfYnVmID0gbWFsbG9jKGN0eC0+ZnMtPmJsb2Nrc2l6ZSAqIDMpOworCisJaWYgKGVkaS0+YmxvY2tfYnVmKSB7CisJCSh2b2lkKSBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGVkaS0+ZW1wdHlfZGJsaXN0LAorCQkJCQkgICAgICBmaXhfZGlyZWN0b3J5LCAmZWRpKTsKKwl9CisJZnJlZShlZGktPmJsb2NrX2J1Zik7CisJZnJlZV9lbXB0eV9kaXJibG9jayhlZGkpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2V4dGVuZC5jIGIvZTJmc3Byb2dzL2UyZnNjay9leHRlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTg0OWIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9leHRlbmQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogZXh0ZW5kLmMgLS0tIGV4dGVuZCBhIGZpbGUgc28gdGhhdCBpdCBoYXMgYXQgbGVhc3QgYSBzcGVjaWZpZWQKKyAqIAludW1iZXIgb2YgYmxvY2tzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlICIuLi9taXNjL25scy1lbmFibGUuaCIKKworc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqcHJvZ25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsIF8oIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIiksCisJCXByb2duYW1lLCBwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhcgkqZmlsZW5hbWU7CisJaW50CW5ibG9ja3MsIGJsb2Nrc2l6ZTsKKwlpbnQJZmQ7CisJY2hhcgkqYmxvY2s7CisJaW50CXJldDsKKworCWlmIChhcmdjICE9IDQpCisJCXVzYWdlKGFyZ3ZbMF0pOworCisJZmlsZW5hbWUgPSBhcmd2WzFdOworCW5ibG9ja3MgPSBzdHJ0b3VsKGFyZ3ZbMl0sIDAsIDApIC0gMTsKKwlibG9ja3NpemUgPSBzdHJ0b3VsKGFyZ3ZbM10sIDAsIDApOworCisJaWYgKG5ibG9ja3MgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJYmxvY2sgPSBtYWxsb2MoYmxvY2tzaXplKTsKKwlpZiAoYmxvY2sgPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIiksCisJCQlibG9ja3NpemUpOworCQlleGl0KDEpOworCX0KKwltZW1zZXQoYmxvY2ssIDAsIGJsb2Nrc2l6ZSk7CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IoZmlsZW5hbWUpOworCQlleGl0KDEpOworCX0KKwlyZXQgPSBsc2VlayhmZCwgbmJsb2NrcypibG9ja3NpemUsIFNFRUtfU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoImxzZWVrIik7CisJCWV4aXQoMSk7CisJfQorCXJldCA9IHJlYWQoZmQsIGJsb2NrLCBibG9ja3NpemUpOworCWlmIChyZXQgPCAwKSB7CisJCXBlcnJvcigicmVhZCIpOworCQlleGl0KDEpOworCX0KKwlyZXQgPSBsc2VlayhmZCwgbmJsb2NrcypibG9ja3NpemUsIFNFRUtfU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoImxzZWVrICMyIik7CisJCWV4aXQoMSk7CisJfQorCXJldCA9IHdyaXRlKGZkLCBibG9jaywgYmxvY2tzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoInJlYWQiKTsKKwkJZXhpdCgxKTsKKwl9CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svZmx1c2hiLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL2ZsdXNoYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2E2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2ZsdXNoYi5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBmbHVzaGIuYyAtLS0gVGhpcyByb3V0aW5lIGZsdXNoZXMgdGhlIGRpc2sgYnVmZmVycyBmb3IgYSBkaXNrCisgKgorICogQ29weXJpZ2h0IDE5OTcsIDIwMDAsIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogV0FSTklORzogdXNlIG9mIGZsdXNoYiBvbiBzb21lIG9sZGVyIDIuMiBrZXJuZWxzIG9uIGEgaGVhdmlseSBsb2FkZWQKKyAqIHN5c3RlbSB3aWxsIGNvcnJ1cHQgZmlsZXN5c3RlbXMuICBUaGlzIHByb2dyYW0gaXMgbm90IHJlYWxseSB1c2VmdWwKKyAqIGJleW9uZCBmb3IgYmVuY2htYXJraW5nIHNjcmlwdHMuCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgIi4uL21pc2MvbmxzLWVuYWJsZS5oIgorCisvKiBGb3IgTGludXgsIGRlZmluZSBCTEtGTFNCVUYgaWYgbmVjZXNzYXJ5ICovCisjaWYgKCFkZWZpbmVkKEJMS0ZMU0JVRikgJiYgZGVmaW5lZChfX2xpbnV4X18pKQorI2RlZmluZSBCTEtGTFNCVUYJX0lPKDB4MTIsOTcpCS8qIGZsdXNoIGJ1ZmZlciBjYWNoZSAqLworI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2duYW1lOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgZGlza1xuIiksIHByb2duYW1lKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CWZkOworCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKCk7CisKKwlmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFksIDApOworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKCJvcGVuIik7CisJCWV4aXQoMSk7CisJfQorCS8qCisJICogTm90ZTogdG8gcmVyZWFkIHRoZSBwYXJ0aXRpb24gdGFibGUsIHVzZSB0aGUgaW9jdGwKKwkgKiBCTEtSUlBBUlQgaW5zdGVhZCBvZiBCTEtGU0xCVUYuCisJICovCisjaWZkZWYgQkxLRkxTQlVGCisJaWYgKGlvY3RsKGZkLCBCTEtGTFNCVUYsIDApIDwgMCkgeworCQlwZXJyb3IoImlvY3RsIEJMS0ZMU0JVRiIpOworCQlleGl0KDEpOworCX0KKwlyZXR1cm4gMDsKKyNlbHNlCisJZnByaW50ZihzdGRlcnIsCisJCV8oIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIpKTsKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9nZW5fY3JjMzJ0YWJsZS5jIGIvZTJmc3Byb2dzL2UyZnNjay9nZW5fY3JjMzJ0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWFhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2dlbl9jcmMzMnRhYmxlLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBnZW5fY3JjMzJ0YWJsZS5jIC0tLSBHZW5lcmF0ZSBDUkMzMiB0YWJsZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcmMzMmRlZnMuaCIKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjZGVmaW5lIEVOVFJJRVNfUEVSX0xJTkUgNAorCisjZGVmaW5lIExFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0xFX0JJVFMpCisjZGVmaW5lIEJFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0JFX0JJVFMpCisKK3N0YXRpYyB1aW50MzJfdCBjcmMzMnRhYmxlX2xlW0xFX1RBQkxFX1NJWkVdOworc3RhdGljIHVpbnQzMl90IGNyYzMydGFibGVfYmVbQkVfVEFCTEVfU0laRV07CisKKy8qKgorICogY3JjMzJpbml0X2xlKCkgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBMRSB0YWJsZSBkYXRhCisgKgorICogY3JjIGlzIHRoZSBjcmMgb2YgdGhlIGJ5dGUgaTsgb3RoZXIgZW50cmllcyBhcmUgZmlsbGVkIGluIGJhc2VkIG9uIHRoZQorICogZmFjdCB0aGF0IGNyY3RhYmxlW2leal0gPSBjcmN0YWJsZVtpXSBeIGNyY3RhYmxlW2pdLgorICoKKyAqLworc3RhdGljIHZvaWQgY3JjMzJpbml0X2xlKHZvaWQpCit7CisJdW5zaWduZWQgaSwgajsKKwl1aW50MzJfdCBjcmMgPSAxOworCisJY3JjMzJ0YWJsZV9sZVswXSA9IDA7CisKKwlmb3IgKGkgPSAxIDw8IChDUkNfTEVfQklUUyAtIDEpOyBpOyBpID4+PSAxKSB7CisJCWNyYyA9IChjcmMgPj4gMSkgXiAoKGNyYyAmIDEpID8gQ1JDUE9MWV9MRSA6IDApOworCQlmb3IgKGogPSAwOyBqIDwgTEVfVEFCTEVfU0laRTsgaiArPSAyICogaSkKKwkJCWNyYzMydGFibGVfbGVbaSArIGpdID0gY3JjIF4gY3JjMzJ0YWJsZV9sZVtqXTsKKwl9Cit9CisKKy8qKgorICogY3JjMzJpbml0X2JlKCkgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBCRSB0YWJsZSBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIGNyYzMyaW5pdF9iZSh2b2lkKQoreworCXVuc2lnbmVkIGksIGo7CisJdWludDMyX3QgY3JjID0gMHg4MDAwMDAwMDsKKworCWNyYzMydGFibGVfYmVbMF0gPSAwOworCisJZm9yIChpID0gMTsgaSA8IEJFX1RBQkxFX1NJWkU7IGkgPDw9IDEpIHsKKwkJY3JjID0gKGNyYyA8PCAxKSBeICgoY3JjICYgMHg4MDAwMDAwMCkgPyBDUkNQT0xZX0JFIDogMCk7CisJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQljcmMzMnRhYmxlX2JlW2kgKyBqXSA9IGNyYyBeIGNyYzMydGFibGVfYmVbal07CisJfQorfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfdGFibGUodWludDMyX3QgdGFibGVbXSwgaW50IGxlbiwgY29uc3QgY2hhciAqdHJhbnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7CisJCWlmIChpICUgRU5UUklFU19QRVJfTElORSA9PSAwKQorCQkJcHJpbnRmKCJcbiIpOworCQlwcmludGYoIiVzKDB4JTguOHhMKSwgIiwgdHJhbnMsIHRhYmxlW2ldKTsKKwl9CisJcHJpbnRmKCIlcygweCU4Ljh4TClcbiIsIHRyYW5zLCB0YWJsZVtsZW4gLSAxXSk7Cit9CisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBBVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEFUVFIoeCkKKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYyBBVFRSKCh1bnVzZWQpKSwgY2hhcioqIGFyZ3YgQVRUUigodW51c2VkKSkpCit7CisJcHJpbnRmKCIvKiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIC0gZG8gbm90IGVkaXQgKi9cblxuIik7CisKKwlwcmludGYoIiNpZmRlZiBVTklUVEVTVFxuIik7CisJaWYgKENSQ19MRV9CSVRTID4gMSkgeworCQljcmMzMmluaXRfbGUoKTsKKwkJcHJpbnRmKCJzdGF0aWMgY29uc3QgX191MzIgY3JjMzJ0YWJsZV9sZVtdID0geyIpOworCQlvdXRwdXRfdGFibGUoY3JjMzJ0YWJsZV9sZSwgTEVfVEFCTEVfU0laRSwgInRvbGUiKTsKKwkJcHJpbnRmKCJ9O1xuIik7CisJfQorCXByaW50ZigiI2VuZGlmIC8qIFVOSVRURVNUICovXG4iKTsKKworCWlmIChDUkNfQkVfQklUUyA+IDEpIHsKKwkJY3JjMzJpbml0X2JlKCk7CisJCXByaW50Zigic3RhdGljIGNvbnN0IF9fdTMyIGNyYzMydGFibGVfYmVbXSA9IHsiKTsKKwkJb3V0cHV0X3RhYmxlKGNyYzMydGFibGVfYmUsIEJFX1RBQkxFX1NJWkUsICJ0b2JlIik7CisJCXByaW50ZigifTtcbiIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9pc2Nhbi5jIGIvZTJmc3Byb2dzL2UyZnNjay9pc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2lzY2FuLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBUZXN0IHRvIHNlZSBob3cgcXVpY2tseSB3ZSBjYW4gc2NhbiB0aGUgaW5vZGUgdGFibGUgKG5vdCBkb2luZworICogYW55dGhpbmcgZWxzZSkKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lmZGVmIEhBVkVfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKworZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKKworY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJpc2NhbiI7Citjb25zdCBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworCitpbnQgeWZsYWcgPSAwOworaW50IG5mbGFnID0gMDsKK2ludCBwcmVlbiA9IDA7CitpbnQgaW5vZGVfYnVmZmVyX2Jsb2NrcyA9IDA7CitpbnQgaW52YWxpZF9iaXRtYXBzID0gMDsKKworc3RydWN0IHJlc291cmNlX3RyYWNrCWdsb2JhbF9ydHJhY2s7CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIpLAorCQlwcm9ncmFtX25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIFBSUyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAkJZmx1c2ggPSAwOworCWludAkJYzsKKyNpZmRlZiBNVFJBQ0UKKwlleHRlcm4gdm9pZAkqbWFsbHdhdGNoOworI2VuZGlmCisJZXJyY29kZV90CXJldHZhbDsKKworCXNldGJ1ZihzdGRvdXQsIE5VTEwpOworCXNldGJ1ZihzdGRlcnIsIE5VTEwpOworCWluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSgpOworCisJaWYgKGFyZ2MgJiYgKmFyZ3YpCisJCXByb2dyYW1fbmFtZSA9ICphcmd2OworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkZJIikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ0YnOgorCQkJZmx1c2ggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ0knOgorCQkJaW5vZGVfYnVmZmVyX2Jsb2NrcyA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UgKCk7CisJCX0KKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kXTsKKwlpZiAoZmx1c2gpIHsKKwkJaW50CWZkID0gb3BlbihkZXZpY2VfbmFtZSwgT19SRE9OTFksIDApOworCisJCWlmIChmZCA8IDApIHsKKwkJCWNvbV9lcnIoIm9wZW4iLCBlcnJubywKKwkJCSAgICBfKCJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIpLCBkZXZpY2VfbmFtZSk7CisJCQlleGl0KEZTQ0tfRVJST1IpOworCQl9CisJCWlmICgocmV0dmFsID0gZXh0MmZzX3N5bmNfZGV2aWNlKGZkLCAxKSkpIHsKKwkJCWNvbV9lcnIoImV4dDJmc19zeW5jX2RldmljZSIsIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiKSwgZGV2aWNlX25hbWUpOworCQkJZXhpdChGU0NLX0VSUk9SKTsKKwkJfQorCQljbG9zZShmZCk7CisJfQorfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlpbnQJCWV4aXRfdmFsdWUgPSBGU0NLX09LOworCWV4dDJfZmlsc3lzCWZzOworCWV4dDJfaW5vX3QJaW5vOworCV9fdTMyCW51bV9pbm9kZXMgPSAwOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vZGVfc2NhbglzY2FuOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmZ2xvYmFsX3J0cmFjayk7CisKKwlQUlMoYXJnYywgYXJndik7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbihkZXZpY2VfbmFtZSwgMCwKKwkJCSAgICAgMCwgMCwgdW5peF9pb19tYW5hZ2VyLCAmZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCWVoYW5kbGVyX2luaXQoZnMtPmlvKTsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIGlub2RlX2J1ZmZlcl9ibG9ja3MsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChpbm8gPT0gMCkKKwkJCWJyZWFrOworCQludW1faW5vZGVzKys7CisJfQorCisJcHJpbnRfcmVzb3VyY2VfdHJhY2soTlVMTCwgJmdsb2JhbF9ydHJhY2spOworCXByaW50ZihfKCIldSBpbm9kZXMgc2Nhbm5lZC5cbiIpLCBudW1faW5vZGVzKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2pmc191c2VyLmggYi9lMmZzcHJvZ3MvZTJmc2NrL2pmc191c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyYzYzMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svamZzX3VzZXIuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvbXBhdGliaWxpdHkgaGVhZGVyIGZpbGUgZm9yIGUyZnNjayB3aGljaCBzaG91bGQgYmUgaW5jbHVkZWQKKyAqIGluc3RlYWQgb2YgbGludXgvamZzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU3RlcGhlbiBDLiBUd2VlZGllCisgKgorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBhdCB5b3VyIGRpc2NyZXRpb24KKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBQdWxsIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBlMmZzY2sgY29udGV4dCBzdHJ1Y3R1cmUKKyAqLworI2luY2x1ZGUgImUyZnNjay5oIgorCitzdHJ1Y3QgYnVmZmVyX2hlYWQgeworCWUyZnNja190CWJfY3R4OworCWlvX2NoYW5uZWwgCWJfaW87CisJaW50CSAJYl9zaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBiX2Jsb2NrbnI7CisJaW50CSAJYl9kaXJ0eTsKKwlpbnQJIAliX3VwdG9kYXRlOworCWludAkgCWJfZXJyOworCWNoYXIJCWJfZGF0YVsxMDI0XTsKK307CisKK3N0cnVjdCBpbm9kZSB7CisJZTJmc2NrX3QJaV9jdHg7CisJZXh0Ml9pbm9fdAlpX2lubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpX2V4dDI7Cit9OworCitzdHJ1Y3Qga2Rldl9zIHsKKwllMmZzY2tfdAlrX2N0eDsKKwlpbnQJCWtfZGV2OworfTsKKworI2RlZmluZSBLX0RFVl9GUwkxCisjZGVmaW5lIEtfREVWX0pPVVJOQUwJMgorCit0eXBlZGVmIHN0cnVjdCBrZGV2X3MgKmtkZXZfdDsKKworI2RlZmluZSBsb2NrX2J1ZmZlcihiaCkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgdW5sb2NrX2J1ZmZlcihiaCkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgYnVmZmVyX3JlcShiaCkgMQorI2RlZmluZSBkb19yZWFkYWhlYWQoam91cm5hbCwgc3RhcnQpIGRvIHt9IHdoaWxlKDApCisKK2V4dGVybiBlMmZzY2tfdCBlMmZzY2tfZ2xvYmFsX2N0eDsgIC8qIFRyeSB5b3VyIHZlcnkgYmVzdCBub3QgdG8gdXNlIHRoaXMhICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQJb2JqZWN0X2xlbmd0aDsKK30gbGttZW1fY2FjaGVfdDsKKworI2RlZmluZSBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlLGZsYWdzKSBtYWxsb2MoKGNhY2hlKS0+b2JqZWN0X2xlbmd0aCkKKyNkZWZpbmUga21lbV9jYWNoZV9mcmVlKGNhY2hlLG9iaikgZnJlZShvYmopCisjZGVmaW5lIGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsbGVuLGEsYixjLGQpIGRvX2NhY2hlX2NyZWF0ZShsZW4pCisjZGVmaW5lIGttZW1fY2FjaGVfZGVzdHJveShjYWNoZSkgZG9fY2FjaGVfZGVzdHJveShjYWNoZSkKKyNkZWZpbmUga21hbGxvYyhsZW4sZmxhZ3MpIG1hbGxvYyhsZW4pCisjZGVmaW5lIGtmcmVlKHApIGZyZWUocCkKKworI2RlZmluZSBjb25kX3Jlc2NoZWQoKQlkbyB7IH0gd2hpbGUgKDApCisKKyNpZm5kZWYgX19CSU9OSUNfXwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iZTMyOwordHlwZWRlZiBfX3U2NCBfX2JlNjQ7CisjZW5kaWYKKworI2RlZmluZSBfX2luaXQKKworLyoKKyAqIE5vdyBwdWxsIGluIHRoZSByZWFsIGxpbnV4L2pmcy5oIGRlZmluaXRpb25zLgorICovCisjaW5jbHVkZSA8ZXh0MmZzL2tlcm5lbC1qYmQuaD4KKworLyoKKyAqIFdlIHVzZSB0aGUgc3RhbmRhcmQgbGliZXh0MmZzIHBvcnRhYmlsaXR5IHRyaWNrcyBmb3IgaW5saW5lCisgKiBmdW5jdGlvbnMuCisgKi8KKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKK2V4dGVybiBsa21lbV9jYWNoZV90ICogZG9fY2FjaGVfY3JlYXRlKGludCBsZW4pOworZXh0ZXJuIHZvaWQgZG9fY2FjaGVfZGVzdHJveShsa21lbV9jYWNoZV90ICpjYWNoZSk7CitleHRlcm4gc2l6ZV90IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWxfdCAqam91cm5hbCk7CisjZW5kaWYKKworI2lmIChkZWZpbmVkKEUyRlNDS19JTkNMVURFX0lOTElORV9GVU5DUykgfHwgIWRlZmluZWQoTk9fSU5MSU5FX0ZVTkNTKSkKKyNpZmRlZiBFMkZTQ0tfSU5DTFVERV9JTkxJTkVfRlVOQ1MKKyNpZiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2RlZmluZSBfSU5MSU5FXyBleHRlcm4gaW5saW5lCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorI2Vsc2UgLyogIUUyRlNDS19JTkNMVURFX0lOTElORSBGVU5DUyAqLworI2lmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjZGVmaW5lIF9JTkxJTkVfIGlubGluZQorI2Vsc2UgLyogbm90IEM5OSAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybiBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisjZW5kaWYgLyogRTJGU0NLX0lOQ0xVREVfSU5MSU5FX0ZVTkNTICovCisKKworX0lOTElORV8gbGttZW1fY2FjaGVfdCAqIGRvX2NhY2hlX2NyZWF0ZShpbnQgbGVuKQoreworCWxrbWVtX2NhY2hlX3QgKm5ld19jYWNoZTsKKwluZXdfY2FjaGUgPSBtYWxsb2Moc2l6ZW9mKCpuZXdfY2FjaGUpKTsKKwlpZiAobmV3X2NhY2hlKQorCQluZXdfY2FjaGUtPm9iamVjdF9sZW5ndGggPSBsZW47CisJcmV0dXJuIG5ld19jYWNoZTsKK30KKworX0lOTElORV8gdm9pZCBkb19jYWNoZV9kZXN0cm95KGxrbWVtX2NhY2hlX3QgKmNhY2hlKQoreworCWZyZWUoY2FjaGUpOworfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggMzIgb3IgNjRiaXQgYmxvY2sgbnVtYmVycy4KKyAqLworX0lOTElORV8gc2l6ZV90IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlpZiAoSkZTX0hBU19JTkNPTVBBVF9GRUFUVVJFKGpvdXJuYWwsIEpGU19GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkKKwkJcmV0dXJuIEpCRF9UQUdfU0laRTY0OworCWVsc2UKKwkJcmV0dXJuIEpCRF9UQUdfU0laRTMyOworfQorCisjdW5kZWYgX0lOTElORV8KKyNlbmRpZgorCisvKgorICogS2VybmVsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGpvdXJuYWwuYworICovCitpbnQgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgbG9uZyBsb25nICpwaHlzKTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqZ2V0YmxrKGtkZXZfdCBjdHgsIGJsazY0X3QgYmxvY2tuciwgaW50IGJsb2Nrc2l6ZSk7Cit2b2lkIHN5bmNfYmxvY2tkZXYoa2Rldl90IGtkZXYpOwordm9pZCBsbF9yd19ibG9jayhpbnQgcncsIGludCBkdW1teSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaFtdKTsKK3ZvaWQgbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB2YWwpOwordm9pZCBicmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitpbnQgYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCB3YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKKworLyoKKyAqIERlZmluZSBuZXdlciAyLjUgaW50ZXJmYWNlcworICovCisjZGVmaW5lIF9fZ2V0YmxrKGRldiwgYmxvY2tuciwgYmxvY2tzaXplKSBnZXRibGsoZGV2LCBibG9ja25yLCBibG9ja3NpemUpCisjZGVmaW5lIHNldF9idWZmZXJfdXB0b2RhdGUoYmgpIG1hcmtfYnVmZmVyX3VwdG9kYXRlKGJoLCAxKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9qb3VybmFsLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL2pvdXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA2YWUyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9qb3VybmFsLmMKQEAgLTAsMCArMSwxMDk1IEBACisvKgorICogam91cm5hbC5jIC0tLSBjb2RlIGZvciBoYW5kbGluZyB0aGUgImV4dDMiIGpvdXJuYWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvCisgKgorICogUGFydHMgb2YgdGhlIGNvZGUgYXJlIGJhc2VkIG9uIGZzL2pmcy9qb3VybmFsLmMgYnkgU3RlcGhlbiBDLiBUd2VlZGllCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmVkIEhhdCBTb2Z0d2FyZQorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgYXQgeW91ciBkaXNjcmV0aW9uCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2RlZmluZSBNTlRfRkwgKE1TX01HQ19WQUwgfCBNU19SRE9OTFkpCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNkZWZpbmUgRTJGU0NLX0lOQ0xVREVfSU5MSU5FX0ZVTkNTCisjaW5jbHVkZSAiamZzX3VzZXIuaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSAidXVpZC91dWlkLmgiCisKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCQkvKiBFbmFibGVkIGJ5IGNvbmZpZ3VyZSAtLWVuYWJsZS1qZnMtZGVidWcgKi8KK3N0YXRpYyBpbnQgYmhfY291bnQgPSAwOworI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgVVNFX0lOT0RFX0lPIHRvIHVzZSB0aGUgaW5vZGVfaW8uYyAvIGZpbGVpby5jIGNvZGVwYXRocy4KKyAqIFRoaXMgY3JlYXRlcyBhIGxhcmdlciBzdGF0aWMgYmluYXJ5LCBhbmQgYSBzbWFsbGVyIGJpbmFyeSB1c2luZworICogc2hhcmVkIGxpYnJhcmllcy4gIEl0J3MgYWxzbyBwcm9iYWJseSBzbGlnaHRseSBsZXNzIENQVS1lZmZpY2llbnQsCisgKiB3aGljaCBpcyB3aHkgaXQncyBub3Qgb24gYnkgZGVmYXVsdC4gIEJ1dCwgaXQncyBhIGdvb2Qgd2F5IG9mCisgKiB0ZXN0aW5nIHRoZSBmdW5jdGlvbnMgaW4gaW5vZGVfaW8uYyBhbmQgZmlsZWlvLmMuCisgKi8KKyN1bmRlZiBVU0VfSU5PREVfSU8KKworLyogS2VybmVsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB0aGUgam91cm5hbC4gIFRoZXNlIGFsbG93IHVzCisgKiB0byB1c2UgdGhlIHJlY292ZXJ5LmMgZmlsZSB2aXJ0dWFsbHkgdW5jaGFuZ2VkIGZyb20gdGhlIGtlcm5lbCwgc28gd2UKKyAqIGRvbid0IGhhdmUgdG8gZG8gbXVjaCB0byBrZWVwIGtlcm5lbCBhbmQgdXNlciByZWNvdmVyeSBpbiBzeW5jLgorICovCitpbnQgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgbG9uZyBsb25nICpwaHlzKQoreworI2lmZGVmIFVTRV9JTk9ERV9JTworCSpwaHlzID0gYmxvY2s7CisJcmV0dXJuIDA7CisjZWxzZQorCXN0cnVjdCBpbm9kZSAJKmlub2RlID0gam91cm5hbC0+al9pbm9kZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCXBibGs7CisKKwlpZiAoIWlub2RlKSB7CisJCSpwaHlzID0gYmxvY2s7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbD0gZXh0MmZzX2JtYXAyKGlub2RlLT5pX2N0eC0+ZnMsIGlub2RlLT5pX2lubywKKwkJCSAgICAgJmlub2RlLT5pX2V4dDIsIE5VTEwsIDAsIGJsb2NrLCAwLCAmcGJsayk7CisJKnBoeXMgPSBwYmxrOworCXJldHVybiAoaW50KSByZXR2YWw7CisjZW5kaWYKK30KKworc3RydWN0IGJ1ZmZlcl9oZWFkICpnZXRibGsoa2Rldl90IGtkZXYsIGJsazY0X3QgYmxvY2tuciwgaW50IGJsb2Nrc2l6ZSkKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCWludCBidWZzaXplID0gc2l6ZW9mKCpiaCkgKyBrZGV2LT5rX2N0eC0+ZnMtPmJsb2Nrc2l6ZSAtCisJCXNpemVvZihiaC0+Yl9kYXRhKTsKKworCWJoID0gZTJmc2NrX2FsbG9jYXRlX21lbW9yeShrZGV2LT5rX2N0eCwgYnVmc2l6ZSwgImJsb2NrIGJ1ZmZlciIpOworCWlmICghYmgpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgQ09ORklHX0pCRF9ERUJVRworCWlmIChqb3VybmFsX2VuYWJsZV9kZWJ1ZyA+PSAzKQorCQliaF9jb3VudCsrOworI2VuZGlmCisJamZzX2RlYnVnKDQsICJnZXRibGsgZm9yIGJsb2NrICVsbHUgKCVkIGJ5dGVzKSh0b3RhbCAlZClcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2tuciwgYmxvY2tzaXplLCBiaF9jb3VudCk7CisKKwliaC0+Yl9jdHggPSBrZGV2LT5rX2N0eDsKKwlpZiAoa2Rldi0+a19kZXYgPT0gS19ERVZfRlMpCisJCWJoLT5iX2lvID0ga2Rldi0+a19jdHgtPmZzLT5pbzsKKwllbHNlCisJCWJoLT5iX2lvID0ga2Rldi0+a19jdHgtPmpvdXJuYWxfaW87CisJYmgtPmJfc2l6ZSA9IGJsb2Nrc2l6ZTsKKwliaC0+Yl9ibG9ja25yID0gYmxvY2tucjsKKworCXJldHVybiBiaDsKK30KKwordm9pZCBzeW5jX2Jsb2NrZGV2KGtkZXZfdCBrZGV2KQoreworCWlvX2NoYW5uZWwJaW87CisKKwlpZiAoa2Rldi0+a19kZXYgPT0gS19ERVZfRlMpCisJCWlvID0ga2Rldi0+a19jdHgtPmZzLT5pbzsKKwllbHNlCisJCWlvID0ga2Rldi0+a19jdHgtPmpvdXJuYWxfaW87CisKKwlpb19jaGFubmVsX2ZsdXNoKGlvKTsKK30KKwordm9pZCBsbF9yd19ibG9jayhpbnQgcncsIGludCBuciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHBbXSkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwlmb3IgKDsgbnIgPiAwOyAtLW5yKSB7CisJCWJoID0gKmJocCsrOworCQlpZiAocncgPT0gUkVBRCAmJiAhYmgtPmJfdXB0b2RhdGUpIHsKKwkJCWpmc19kZWJ1ZygzLCAicmVhZGluZyBibG9jayAlbGx1LyVwXG4iLAorCQkJCSAgYmgtPmJfYmxvY2tuciwgKHZvaWQgKikgYmgpOworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGJoLT5iX2lvLAorCQkJCQkJICAgICBiaC0+Yl9ibG9ja25yLAorCQkJCQkJICAgICAxLCBiaC0+Yl9kYXRhKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKGJoLT5iX2N0eC0+ZGV2aWNlX25hbWUsIHJldHZhbCwKKwkJCQkJIndoaWxlIHJlYWRpbmcgYmxvY2sgJWxsdVxuIiwKKwkJCQkJYmgtPmJfYmxvY2tucik7CisJCQkJYmgtPmJfZXJyID0gKGludCkgcmV0dmFsOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYmgtPmJfdXB0b2RhdGUgPSAxOworCQl9IGVsc2UgaWYgKHJ3ID09IFdSSVRFICYmIGJoLT5iX2RpcnR5KSB7CisJCQlqZnNfZGVidWcoMywgIndyaXRpbmcgYmxvY2sgJWxsdS8lcFxuIiwKKwkJCQkgIGJoLT5iX2Jsb2NrbnIsCisJCQkJICAodm9pZCAqKSBiaCk7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGJoLT5iX2lvLAorCQkJCQkJICAgICAgYmgtPmJfYmxvY2tuciwKKwkJCQkJCSAgICAgIDEsIGJoLT5iX2RhdGEpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoYmgtPmJfY3R4LT5kZXZpY2VfbmFtZSwgcmV0dmFsLAorCQkJCQkid2hpbGUgd3JpdGluZyBibG9jayAlbGx1XG4iLAorCQkJCQliaC0+Yl9ibG9ja25yKTsKKwkJCQliaC0+Yl9lcnIgPSAoaW50KSByZXR2YWw7CisJCQkJY29udGludWU7CisJCQl9CisJCQliaC0+Yl9kaXJ0eSA9IDA7CisJCQliaC0+Yl91cHRvZGF0ZSA9IDE7CisJCX0gZWxzZSB7CisJCQlqZnNfZGVidWcoMywgIm5vLW9wICVzIGZvciBibG9jayAlbGx1XG4iLAorCQkJCSAgcncgPT0gUkVBRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkJICBiaC0+Yl9ibG9ja25yKTsKKwkJfQorCX0KK30KKwordm9pZCBtYXJrX2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJoLT5iX2RpcnR5ID0gMTsKK30KKworc3RhdGljIHZvaWQgbWFya19idWZmZXJfY2xlYW4oc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCit7CisJYmgtPmJfZGlydHkgPSAwOworfQorCit2b2lkIGJyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWlmIChiaC0+Yl9kaXJ0eSkKKwkJbGxfcndfYmxvY2soV1JJVEUsIDEsICZiaCk7CisJamZzX2RlYnVnKDMsICJmcmVlaW5nIGJsb2NrICVsbHUvJXAgKHRvdGFsICVkKVxuIiwKKwkJICBiaC0+Yl9ibG9ja25yLCAodm9pZCAqKSBiaCwgLS1iaF9jb3VudCk7CisJZXh0MmZzX2ZyZWVfbWVtKCZiaCk7Cit9CisKK2ludCBidWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlyZXR1cm4gYmgtPmJfdXB0b2RhdGU7Cit9CisKK3ZvaWQgbWFya19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHZhbCkKK3sKKwliaC0+Yl91cHRvZGF0ZSA9IHZhbDsKK30KKwordm9pZCB3YWl0X29uX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWlmICghYmgtPmJfdXB0b2RhdGUpCisJCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZiaCk7Cit9CisKKworc3RhdGljIHZvaWQgZTJmc2NrX2NsZWFyX3JlY292ZXIoZTJmc2NrX3QgY3R4LCBpbnQgZXJyb3IpCit7CisJY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+RVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVI7CisKKwkvKiBpZiB3ZSBoYWQgYW4gZXJyb3IgZG9pbmcgam91cm5hbCByZWNvdmVyeSwgd2UgbmVlZCBhIGZ1bGwgZnNjayAqLworCWlmIChlcnJvcikKKwkJY3R4LT5mcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoY3R4LT5mcyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgam91cm5hbC4KKyAqLworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwllMl9ibGtjbnRfdAlsYXN0X2Jsb2NrOworfTsKKworc3RhdGljIGludCBwcm9jZXNzX2pvdXJuYWxfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJIGJsazY0X3QJKmJsb2NrX25yLAorCQkJCSBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCQkgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnA7CisJYmxrNjRfdAlibGsgPSAqYmxvY2tfbnI7CisKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisKKwlpZiAoIWJsayB8fCBibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayB8fAorCSAgICBibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisKKwlpZiAoYmxvY2tjbnQgPj0gMCkKKwkJcC0+bGFzdF9ibG9jayA9IGJsb2NrY250OworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGUyZnNja19nZXRfam91cm5hbChlMmZzY2tfdCBjdHgsIGpvdXJuYWxfdCAqKnJldF9qb3VybmFsKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCBwYjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBqc3VwZXI7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXN0cnVjdCBidWZmZXJfaGVhZCAJKmJoOworCXN0cnVjdCBpbm9kZQkJKmpfaW5vZGUgPSBOVUxMOworCXN0cnVjdCBrZGV2X3MJCSpkZXZfZnMgPSBOVUxMLCAqZGV2X2pvdXJuYWw7CisJY29uc3QgY2hhcgkJKmpvdXJuYWxfbmFtZSA9IDA7CisJam91cm5hbF90CQkqam91cm5hbCA9IE5VTEw7CisJZXJyY29kZV90CQlyZXR2YWwgPSAwOworCWlvX21hbmFnZXIJCWlvX3B0ciA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nCXN0YXJ0ID0gMDsKKwlpbnQJCQlleHRfam91cm5hbCA9IDA7CisJaW50CQkJdHJpZWRfYmFja3VwX2pubCA9IDA7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJam91cm5hbCA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBzaXplb2Yoam91cm5hbF90KSwgImpvdXJuYWwiKTsKKwlpZiAoIWpvdXJuYWwpIHsKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCX0KKworCWRldl9mcyA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCAyKnNpemVvZihzdHJ1Y3Qga2Rldl9zKSwgImtkZXYiKTsKKwlpZiAoIWRldl9mcykgeworCQlyZXR2YWwgPSBFWFQyX0VUX05PX01FTU9SWTsKKwkJZ290byBlcnJvdXQ7CisJfQorCWRldl9qb3VybmFsID0gZGV2X2ZzKzE7CisKKwlkZXZfZnMtPmtfY3R4ID0gZGV2X2pvdXJuYWwtPmtfY3R4ID0gY3R4OworCWRldl9mcy0+a19kZXYgPSBLX0RFVl9GUzsKKwlkZXZfam91cm5hbC0+a19kZXYgPSBLX0RFVl9KT1VSTkFMOworCisJam91cm5hbC0+al9kZXYgPSBkZXZfam91cm5hbDsKKwlqb3VybmFsLT5qX2ZzX2RldiA9IGRldl9mczsKKwlqb3VybmFsLT5qX2lub2RlID0gTlVMTDsKKwlqb3VybmFsLT5qX2Jsb2Nrc2l6ZSA9IGN0eC0+ZnMtPmJsb2Nrc2l6ZTsKKworCWlmICh1dWlkX2lzX251bGwoc2ItPnNfam91cm5hbF91dWlkKSkgeworCQlpZiAoIXNiLT5zX2pvdXJuYWxfaW51bSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJal9pbm9kZSA9IGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBzaXplb2YoKmpfaW5vZGUpLAorCQkJCQkJICJqb3VybmFsIGlub2RlIik7CisJCWlmICghal9pbm9kZSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9OT19NRU1PUlk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCWpfaW5vZGUtPmlfY3R4ID0gY3R4OworCQlqX2lub2RlLT5pX2lubyA9IHNiLT5zX2pvdXJuYWxfaW51bTsKKworCQlpZiAoKHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN0eC0+ZnMsCisJCQkJCQlzYi0+c19qb3VybmFsX2ludW0sCisJCQkJCQkmal9pbm9kZS0+aV9leHQyKSkpIHsKKwkJdHJ5X2JhY2t1cF9qb3VybmFsOgorCQkJaWYgKHNiLT5zX2pubF9iYWNrdXBfdHlwZSAhPSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTIHx8CisJCQkgICAgdHJpZWRfYmFja3VwX2pubCkKKwkJCQlnb3RvIGVycm91dDsKKwkJCW1lbXNldCgmal9pbm9kZS0+aV9leHQyLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwkJCW1lbWNweSgmal9pbm9kZS0+aV9leHQyLmlfYmxvY2tbMF0sIHNiLT5zX2pubF9ibG9ja3MsCisJCQkgICAgICAgRVhUMl9OX0JMT0NLUyo0KTsKKwkJCWpfaW5vZGUtPmlfZXh0Mi5pX3NpemVfaGlnaCA9IHNiLT5zX2pubF9ibG9ja3NbMTVdOworCQkJal9pbm9kZS0+aV9leHQyLmlfc2l6ZSA9IHNiLT5zX2pubF9ibG9ja3NbMTZdOworCQkJal9pbm9kZS0+aV9leHQyLmlfbGlua3NfY291bnQgPSAxOworCQkJal9pbm9kZS0+aV9leHQyLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCAwNjAwOworCQkJZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoY3R4LCAxKTsKKwkJCWN0eC0+c3Rhc2hlZF9pbm8gPSBqX2lub2RlLT5pX2lubzsKKwkJCWN0eC0+c3Rhc2hlZF9pbm9kZSA9ICZqX2lub2RlLT5pX2V4dDI7CisJCQl0cmllZF9iYWNrdXBfam5sKys7CisJCX0KKwkJaWYgKCFqX2lub2RlLT5pX2V4dDIuaV9saW5rc19jb3VudCB8fAorCQkgICAgIUxJTlVYX1NfSVNSRUcoal9pbm9kZS0+aV9leHQyLmlfbW9kZSkpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTk9fSk9VUk5BTDsKKwkJCWdvdG8gdHJ5X2JhY2t1cF9qb3VybmFsOworCQl9CisJCWlmIChFWFQyX0lfU0laRSgmal9pbm9kZS0+aV9leHQyKSAvIGpvdXJuYWwtPmpfYmxvY2tzaXplIDwKKwkJICAgIEpGU19NSU5fSk9VUk5BTF9CTE9DS1MpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfSk9VUk5BTF9UT09fU01BTEw7CisJCQlnb3RvIHRyeV9iYWNrdXBfam91cm5hbDsKKwkJfQorCQlwYi5sYXN0X2Jsb2NrID0gLTE7CisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhjdHgtPmZzLCBqX2lub2RlLT5pX2lubywKKwkJCQkJICAgICAgIEJMT0NLX0ZMQUdfSE9MRSwgMCwKKwkJCQkJICAgICAgIHByb2Nlc3Nfam91cm5hbF9ibG9jaywgJnBiKTsKKwkJaWYgKChwYi5sYXN0X2Jsb2NrICsgMSkgKiBjdHgtPmZzLT5ibG9ja3NpemUgPAorCQkgICAgKGludCkgRVhUMl9JX1NJWkUoJmpfaW5vZGUtPmlfZXh0MikpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfSk9VUk5BTF9UT09fU01BTEw7CisJCQlnb3RvIHRyeV9iYWNrdXBfam91cm5hbDsKKwkJfQorCQlpZiAodHJpZWRfYmFja3VwX2pubCAmJiAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3R4LT5mcywgc2ItPnNfam91cm5hbF9pbnVtLAorCQkJCQkJICAgICZqX2lub2RlLT5pX2V4dDIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCWpvdXJuYWwtPmpfbWF4bGVuID0gRVhUMl9JX1NJWkUoJmpfaW5vZGUtPmlfZXh0MikgLworCQkJam91cm5hbC0+al9ibG9ja3NpemU7CisKKyNpZmRlZiBVU0VfSU5PREVfSU8KKwkJcmV0dmFsID0gZXh0MmZzX2lub2RlX2lvX2ludGVybjIoY3R4LT5mcywgc2ItPnNfam91cm5hbF9pbnVtLAorCQkJCQkJICZqX2lub2RlLT5pX2V4dDIsCisJCQkJCQkgJmpvdXJuYWxfbmFtZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKworCQlpb19wdHIgPSBpbm9kZV9pb19tYW5hZ2VyOworI2Vsc2UKKwkJam91cm5hbC0+al9pbm9kZSA9IGpfaW5vZGU7CisJCWN0eC0+am91cm5hbF9pbyA9IGN0eC0+ZnMtPmlvOworCQlpZiAoKHJldHZhbCA9IChlcnJjb2RlX3QpIGpvdXJuYWxfYm1hcChqb3VybmFsLCAwLCAmc3RhcnQpKSAhPSAwKQorCQkJZ290byBlcnJvdXQ7CisjZW5kaWYKKwl9IGVsc2UgeworCQlleHRfam91cm5hbCA9IDE7CisJCWlmICghY3R4LT5qb3VybmFsX25hbWUpIHsKKwkJCWNoYXIgdXVpZFszN107CisKKwkJCXV1aWRfdW5wYXJzZShzYi0+c19qb3VybmFsX3V1aWQsIHV1aWQpOworCQkJY3R4LT5qb3VybmFsX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShjdHgtPmJsa2lkLAorCQkJCQkJCSAgICAgICJVVUlEIiwgdXVpZCk7CisJCQlpZiAoIWN0eC0+am91cm5hbF9uYW1lKQorCQkJCWN0eC0+am91cm5hbF9uYW1lID0gYmxraWRfZGV2bm9fdG9fZGV2bmFtZShzYi0+c19qb3VybmFsX2Rldik7CisJCX0KKwkJam91cm5hbF9uYW1lID0gY3R4LT5qb3VybmFsX25hbWU7CisKKwkJaWYgKCFqb3VybmFsX25hbWUpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9DQU5UX0ZJTkRfSk9VUk5BTCwgJnBjdHgpOworCQkJcmV0dmFsID0gRVhUMl9FVF9MT0FEX0VYVF9KT1VSTkFMOworCQkJZ290byBlcnJvdXQ7CisJCX0KKworCQlqZnNfZGVidWcoMSwgIlVzaW5nIGpvdXJuYWwgZmlsZSAlc1xuIiwgam91cm5hbF9uYW1lKTsKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCX0KKworI2lmIDAKKwl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IGlvX3B0cjsKKwlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisjZW5kaWYKKyNpZm5kZWYgVVNFX0lOT0RFX0lPCisJaWYgKGV4dF9qb3VybmFsKQorI2VuZGlmCisJeworCQlpbnQgZmxhZ3MgPSBJT19GTEFHX1JXOworCQlpZiAoIShjdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9JU1JPT1QgJiYKKwkJICAgICAgY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpKQorCQkJZmxhZ3MgfD0gSU9fRkxBR19FWENMVVNJVkU7CisJCWlmICgoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpICYmCisJCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GT1JDRSkpCisJCQlmbGFncyAmPSB+SU9fRkxBR19FWENMVVNJVkU7CisKKworCQlyZXR2YWwgPSBpb19wdHItPm9wZW4oam91cm5hbF9uYW1lLCBmbGFncywKKwkJCQkgICAgICAmY3R4LT5qb3VybmFsX2lvKTsKKwl9CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGN0eC0+am91cm5hbF9pbywgY3R4LT5mcy0+YmxvY2tzaXplKTsKKworCWlmIChleHRfam91cm5hbCkgeworCQlibGs2NF90IG1heGxlbjsKKworCQlpZiAoY3R4LT5mcy0+YmxvY2tzaXplID09IDEwMjQpCisJCQlzdGFydCA9IDE7CisJCWJoID0gZ2V0YmxrKGRldl9qb3VybmFsLCBzdGFydCwgY3R4LT5mcy0+YmxvY2tzaXplKTsKKwkJaWYgKCFiaCkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9OT19NRU1PUlk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlsbF9yd19ibG9jayhSRUFELCAxLCAmYmgpOworCQlpZiAoKHJldHZhbCA9IGJoLT5iX2VycikgIT0gMCkgeworCQkJYnJlbHNlKGJoKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCW1lbWNweSgmanN1cGVyLCBzdGFydCA/IGJoLT5iX2RhdGEgOiAgYmgtPmJfZGF0YSArIDEwMjQsCisJCSAgICAgICBzaXplb2YoanN1cGVyKSk7CisJCWJyZWxzZShiaCk7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCWlmIChqc3VwZXIuc19tYWdpYyA9PSBleHQyZnNfc3dhYjE2KEVYVDJfU1VQRVJfTUFHSUMpKQorCQkJZXh0MmZzX3N3YXBfc3VwZXIoJmpzdXBlcik7CisjZW5kaWYKKwkJaWYgKGpzdXBlci5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMgfHwKKwkJICAgICEoanN1cGVyLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9FWFRfSk9VUk5BTF9CQURfU1VQRVIsICZwY3R4KTsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTE9BRF9FWFRfSk9VUk5BTDsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCS8qIE1ha2Ugc3VyZSB0aGUgam91cm5hbCBVVUlEIGlzIGNvcnJlY3QgKi8KKwkJaWYgKG1lbWNtcChqc3VwZXIuc191dWlkLCBjdHgtPmZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQsCisJCQkgICBzaXplb2YoanN1cGVyLnNfdXVpZCkpKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfSk9VUk5BTF9CQURfVVVJRCwgJnBjdHgpOworCQkJcmV0dmFsID0gRVhUMl9FVF9MT0FEX0VYVF9KT1VSTkFMOworCQkJZ290byBlcnJvdXQ7CisJCX0KKworCQltYXhsZW4gPSBleHQyZnNfYmxvY2tzX2NvdW50KCZqc3VwZXIpOworCQlqb3VybmFsLT5qX21heGxlbiA9IChtYXhsZW4gPCAxVUxMIDw8IDMyKSA/IG1heGxlbiA6ICgxVUxMIDw8IDMyKSAtIDE7CisJCXN0YXJ0Kys7CisJfQorCisJaWYgKCEoYmggPSBnZXRibGsoZGV2X2pvdXJuYWwsIHN0YXJ0LCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSkpKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfTk9fTUVNT1JZOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlqb3VybmFsLT5qX3NiX2J1ZmZlciA9IGJoOworCWpvdXJuYWwtPmpfc3VwZXJibG9jayA9IChqb3VybmFsX3N1cGVyYmxvY2tfdCAqKWJoLT5iX2RhdGE7CisKKyNpZmRlZiBVU0VfSU5PREVfSU8KKwlpZiAoal9pbm9kZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZqX2lub2RlKTsKKyNlbmRpZgorCisJKnJldF9qb3VybmFsID0gam91cm5hbDsKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDApOworCXJldHVybiAwOworCitlcnJvdXQ6CisJZTJmc2NrX3VzZV9pbm9kZV9zaG9ydGN1dHMoY3R4LCAwKTsKKwlpZiAoZGV2X2ZzKQorCQlleHQyZnNfZnJlZV9tZW0oJmRldl9mcyk7CisJaWYgKGpfaW5vZGUpCisJCWV4dDJmc19mcmVlX21lbSgmal9pbm9kZSk7CisJaWYgKGpvdXJuYWwpCisJCWV4dDJmc19mcmVlX21lbSgmam91cm5hbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBlMmZzY2tfam91cm5hbF9maXhfYmFkX2lub2RlKGUyZnNja190IGN0eCwKKwkJCQkJICAgICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlpbnQgcmVjb3ZlciA9IGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKwlpbnQgaGFzX2pvdXJuYWwgPSBjdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmCisJCUVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisKKwlpZiAoaGFzX2pvdXJuYWwgfHwgc2ItPnNfam91cm5hbF9pbnVtKSB7CisJCS8qIFRoZSBqb3VybmFsIGlub2RlIGlzIGJvZ3VzLCByZW1vdmUgYW5kIGZvcmNlIGZ1bGwgZnNjayAqLworCQlwY3R4LT5pbm8gPSBzYi0+c19qb3VybmFsX2ludW07CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfSk9VUk5BTF9CQURfSU5PREUsIHBjdHgpKSB7CisJCQlpZiAoaGFzX2pvdXJuYWwgJiYgc2ItPnNfam91cm5hbF9pbnVtKQorCQkJCXByaW50ZigiKioqIGV4dDMgam91cm5hbCBoYXMgYmVlbiBkZWxldGVkIC0gIgorCQkJCSAgICAgICAiZmlsZXN5c3RlbSBpcyBub3cgZXh0MiBvbmx5ICoqKlxuXG4iKTsKKwkJCXNiLT5zX2ZlYXR1cmVfY29tcGF0ICY9IH5FWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCQkJc2ItPnNfam91cm5hbF9pbnVtID0gMDsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERTsKKwkJCWN0eC0+ZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCQllMmZzY2tfY2xlYXJfcmVjb3ZlcihjdHgsIDEpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0lOT0RFX05VTTsKKwl9IGVsc2UgaWYgKHJlY292ZXIpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1JFQ09WRVJfU0VULCBwY3R4KSkgeworCQkJZTJmc2NrX2NsZWFyX3JlY292ZXIoY3R4LCAxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBWMV9TQl9TSVpFCTB4MDAyNAorc3RhdGljIHZvaWQgY2xlYXJfdjJfam91cm5hbF9maWVsZHMoam91cm5hbF90ICpqb3VybmFsKQoreworCWUyZnNja190IGN0eCA9IGpvdXJuYWwtPmpfZGV2LT5rX2N0eDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzBfQ0xFQVJfVjJfSk9VUk5BTCwgJnBjdHgpKQorCQlyZXR1cm47CisKKwltZW1zZXQoKChjaGFyICopIGpvdXJuYWwtPmpfc3VwZXJibG9jaykgKyBWMV9TQl9TSVpFLCAwLAorCSAgICAgICBjdHgtPmZzLT5ibG9ja3NpemUtVjFfU0JfU0laRSk7CisJbWFya19idWZmZXJfZGlydHkoam91cm5hbC0+al9zYl9idWZmZXIpOworfQorCisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2pvdXJuYWxfbG9hZChqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJZTJmc2NrX3QgY3R4ID0gam91cm5hbC0+al9kZXYtPmtfY3R4OworCWpvdXJuYWxfc3VwZXJibG9ja190ICpqc2I7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpqYmggPSBqb3VybmFsLT5qX3NiX2J1ZmZlcjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJbGxfcndfYmxvY2soUkVBRCwgMSwgJmpiaCk7CisJaWYgKGpiaC0+Yl9lcnIpIHsKKwkJY29tX2VycihjdHgtPmRldmljZV9uYW1lLCBqYmgtPmJfZXJyLCAiJXMiLAorCQkJXygicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIpKTsKKwkJcmV0dXJuIGpiaC0+Yl9lcnI7CisJfQorCisJanNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOworCS8qIElmIHdlIGRvbid0IGV2ZW4gaGF2ZSBKRlNfTUFHSUMsIHdlIHByb2JhYmx5IGhhdmUgYSB3cm9uZyBpbm9kZSAqLworCWlmIChqc2ItPnNfaGVhZGVyLmhfbWFnaWMgIT0gaHRvbmwoSkZTX01BR0lDX05VTUJFUikpCisJCXJldHVybiBlMmZzY2tfam91cm5hbF9maXhfYmFkX2lub2RlKGN0eCwgJnBjdHgpOworCisJc3dpdGNoIChudG9obChqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlKSkgeworCWNhc2UgSkZTX1NVUEVSQkxPQ0tfVjE6CisJCWpvdXJuYWwtPmpfZm9ybWF0X3ZlcnNpb24gPSAxOworCQlpZiAoanNiLT5zX2ZlYXR1cmVfY29tcGF0IHx8CisJCSAgICBqc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCB8fAorCQkgICAganNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHx8CisJCSAgICBqc2ItPnNfbnJfdXNlcnMpCisJCQljbGVhcl92Ml9qb3VybmFsX2ZpZWxkcyhqb3VybmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIEpGU19TVVBFUkJMT0NLX1YyOgorCQlqb3VybmFsLT5qX2Zvcm1hdF92ZXJzaW9uID0gMjsKKwkJaWYgKG50b2hsKGpzYi0+c19ucl91c2VycykgPiAxICYmCisJCSAgICB1dWlkX2lzX251bGwoY3R4LT5mcy0+c3VwZXItPnNfam91cm5hbF91dWlkKSkKKwkJCWNsZWFyX3YyX2pvdXJuYWxfZmllbGRzKGpvdXJuYWwpOworCQlpZiAobnRvaGwoanNiLT5zX25yX3VzZXJzKSA+IDEpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1VOU1VQUF9NVUxUSUZTLCAmcGN0eCk7CisJCQlyZXR1cm4gRVhUMl9FVF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OOworCQl9CisJCWJyZWFrOworCisJLyoKKwkgKiBUaGVzZSBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIGEgam91cm5hbCBzdXBlciBibG9jaywgc28gaWYKKwkgKiB0aGV5IGRvLCB0aGUgam91cm5hbCBpcyBiYWRseSBjb3JydXB0ZWQuCisJICovCisJY2FzZSBKRlNfREVTQ1JJUFRPUl9CTE9DSzoKKwljYXNlIEpGU19DT01NSVRfQkxPQ0s6CisJY2FzZSBKRlNfUkVWT0tFX0JMT0NLOgorCQlyZXR1cm4gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisKKwkvKiBJZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSBzdXBlcmJsb2NrIG1ham9yIHR5cGUsIGJ1dCB0aGVyZQorCSAqIGlzIGEgbWFnaWMgbnVtYmVyLCB0aGVuIGl0IGlzIGxpa2VseSB0byBiZSBhIG5ldyBmb3JtYXQgd2UKKwkgKiBqdXN0IGRvbid0IHVuZGVyc3RhbmQsIHNvIGxlYXZlIGl0IGFsb25lLiAqLworCWRlZmF1bHQ6CisJCXJldHVybiBFWFQyX0VUX0pPVVJOQUxfVU5TVVBQX1ZFUlNJT047CisJfQorCisJaWYgKEpGU19IQVNfSU5DT01QQVRfRkVBVFVSRShqb3VybmFsLCB+SkZTX0tOT1dOX0lOQ09NUEFUX0ZFQVRVUkVTKSkKKwkJcmV0dXJuIEVYVDJfRVRfVU5TVVBQX0ZFQVRVUkU7CisKKwlpZiAoSkZTX0hBU19ST19DT01QQVRfRkVBVFVSRShqb3VybmFsLCB+SkZTX0tOT1dOX1JPQ09NUEFUX0ZFQVRVUkVTKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fVU5TVVBQX0ZFQVRVUkU7CisKKwkvKiBXZSBoYXZlIG5vdyBjaGVja2VkIHdoZXRoZXIgd2Uga25vdyBlbm91Z2ggYWJvdXQgdGhlIGpvdXJuYWwKKwkgKiBmb3JtYXQgdG8gYmUgYWJsZSB0byBwcm9jZWVkIHNhZmVseSwgc28gYW55IG90aGVyIGNoZWNrcyB0aGF0CisJICogZmFpbCB3ZSBzaG91bGQgYXR0ZW1wdCB0byByZWNvdmVyIGZyb20uICovCisJaWYgKGpzYi0+c19ibG9ja3NpemUgIT0gaHRvbmwoam91cm5hbC0+al9ibG9ja3NpemUpKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLLAorCQkJXygiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIiksCisJCQljdHgtPmRldmljZV9uYW1lKTsKKwkJcmV0dXJuIEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLOworCX0KKworCWlmIChudG9obChqc2ItPnNfbWF4bGVuKSA8IGpvdXJuYWwtPmpfbWF4bGVuKQorCQlqb3VybmFsLT5qX21heGxlbiA9IG50b2hsKGpzYi0+c19tYXhsZW4pOworCWVsc2UgaWYgKG50b2hsKGpzYi0+c19tYXhsZW4pID4gam91cm5hbC0+al9tYXhsZW4pIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0ssCisJCQlfKCIlczogam91cm5hbCB0b28gc2hvcnRcbiIpLAorCQkJY3R4LT5kZXZpY2VfbmFtZSk7CisJCXJldHVybiBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKwl9CisKKwlqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2UgPSBudG9obChqc2ItPnNfc2VxdWVuY2UpOworCWpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UgPSBqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2U7CisJam91cm5hbC0+al90YWlsID0gbnRvaGwoanNiLT5zX3N0YXJ0KTsKKwlqb3VybmFsLT5qX2ZpcnN0ID0gbnRvaGwoanNiLT5zX2ZpcnN0KTsKKwlqb3VybmFsLT5qX2xhc3QgPSBudG9obChqc2ItPnNfbWF4bGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlMmZzY2tfam91cm5hbF9yZXNldF9zdXBlcihlMmZzY2tfdCBjdHgsIGpvdXJuYWxfc3VwZXJibG9ja190ICpqc2IsCisJCQkJICAgICAgIGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwljaGFyICpwOworCXVuaW9uIHsKKwkJdXVpZF90IHV1aWQ7CisJCV9fdTMyIHZhbFs0XTsKKwl9IHU7CisJX191MzIgbmV3X3NlcSA9IDA7CisJaW50IGk7CisKKwkvKiBMZWF2ZSBhIHZhbGlkIGV4aXN0aW5nIFYxIHN1cGVyYmxvY2sgc2lnbmF0dXJlIGFsb25lLgorCSAqIEFueXRoaW5nIHVucmVjb2duaXNhYmxlIHdlIG92ZXJ3cml0ZSB3aXRoIGEgbmV3IFYyCisJICogc2lnbmF0dXJlLiAqLworCisJaWYgKGpzYi0+c19oZWFkZXIuaF9tYWdpYyAhPSBodG9ubChKRlNfTUFHSUNfTlVNQkVSKSB8fAorCSAgICBqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlICE9IGh0b25sKEpGU19TVVBFUkJMT0NLX1YxKSkgeworCQlqc2ItPnNfaGVhZGVyLmhfbWFnaWMgPSBodG9ubChKRlNfTUFHSUNfTlVNQkVSKTsKKwkJanNiLT5zX2hlYWRlci5oX2Jsb2NrdHlwZSA9IGh0b25sKEpGU19TVVBFUkJMT0NLX1YyKTsKKwl9CisKKwkvKiBaZXJvIG91dCBldmVyeXRoaW5nIGVsc2UgYmV5b25kIHRoZSBzdXBlcmJsb2NrIGhlYWRlciAqLworCisJcCA9ICgoY2hhciAqKSBqc2IpICsgc2l6ZW9mKGpvdXJuYWxfaGVhZGVyX3QpOworCW1lbXNldCAocCwgMCwgY3R4LT5mcy0+YmxvY2tzaXplLXNpemVvZihqb3VybmFsX2hlYWRlcl90KSk7CisKKwlqc2ItPnNfYmxvY2tzaXplID0gaHRvbmwoY3R4LT5mcy0+YmxvY2tzaXplKTsKKwlqc2ItPnNfbWF4bGVuID0gaHRvbmwoam91cm5hbC0+al9tYXhsZW4pOworCWpzYi0+c19maXJzdCA9IGh0b25sKDEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgam91cm5hbCBzZXF1ZW5jZSBudW1iZXIgc28gdGhhdCB0aGVyZSBpcyAibm8iCisJICogY2hhbmNlIHdlIHdpbGwgZmluZCBvbGQgInZhbGlkIiB0cmFuc2FjdGlvbnMgaW4gdGhlIGpvdXJuYWwuCisJICogVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG8gemVybyB0aGUgd2hvbGUgam91cm5hbCAoc2xvdyB0byBkbywKKwkgKiBhbmQgcmlza3kgd2hlbiB3ZSBhcmUganVzdCByZWNvdmVyaW5nIHRoZSBmaWxlc3lzdGVtKS4KKwkgKi8KKwl1dWlkX2dlbmVyYXRlKHUudXVpZCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspCisJCW5ld19zZXEgXj0gdS52YWxbaV07CisJanNiLT5zX3NlcXVlbmNlID0gaHRvbmwobmV3X3NlcSk7CisKKwltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisJbGxfcndfYmxvY2soV1JJVEUsIDEsICZqb3VybmFsLT5qX3NiX2J1ZmZlcik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2pvdXJuYWxfZml4X2NvcnJ1cHRfc3VwZXIoZTJmc2NrX3QgY3R4LAorCQkJCQkJICBqb3VybmFsX3QgKmpvdXJuYWwsCisJCQkJCQkgIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gY3R4LT5mcy0+c3VwZXI7CisJaW50IHJlY292ZXIgPSBjdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVI7CisKKwlpZiAoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfSk9VUk5BTF9CQURfU1VQRVIsIHBjdHgpKSB7CisJCQllMmZzY2tfam91cm5hbF9yZXNldF9zdXBlcihjdHgsIGpvdXJuYWwtPmpfc3VwZXJibG9jaywKKwkJCQkJCSAgIGpvdXJuYWwpOworCQkJam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSA9IDE7CisJCQllMmZzY2tfY2xlYXJfcmVjb3ZlcihjdHgsIHJlY292ZXIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLOworCX0gZWxzZSBpZiAoZTJmc2NrX2pvdXJuYWxfZml4X2JhZF9pbm9kZShjdHgsIHBjdHgpKQorCQlyZXR1cm4gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZTJmc2NrX2pvdXJuYWxfcmVsZWFzZShlMmZzY2tfdCBjdHgsIGpvdXJuYWxfdCAqam91cm5hbCwKKwkJCQkgICBpbnQgcmVzZXQsIGludCBkcm9wKQoreworCWpvdXJuYWxfc3VwZXJibG9ja190ICpqc2I7CisKKwlpZiAoZHJvcCkKKwkJbWFya19idWZmZXJfY2xlYW4oam91cm5hbC0+al9zYl9idWZmZXIpOworCWVsc2UgaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkpIHsKKwkJanNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOworCQlqc2ItPnNfc2VxdWVuY2UgPSBodG9ubChqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlKTsKKwkJaWYgKHJlc2V0KQorCQkJanNiLT5zX3N0YXJ0ID0gMDsgLyogdGhpcyBtYXJrcyB0aGUgam91cm5hbCBhcyBlbXB0eSAqLworCQltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisJfQorCWJyZWxzZShqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisKKwlpZiAoY3R4LT5qb3VybmFsX2lvKSB7CisJCWlmIChjdHgtPmZzICYmIGN0eC0+ZnMtPmlvICE9IGN0eC0+am91cm5hbF9pbykKKwkJCWlvX2NoYW5uZWxfY2xvc2UoY3R4LT5qb3VybmFsX2lvKTsKKwkJY3R4LT5qb3VybmFsX2lvID0gMDsKKwl9CisKKyNpZm5kZWYgVVNFX0lOT0RFX0lPCisJaWYgKGpvdXJuYWwtPmpfaW5vZGUpCisJCWV4dDJmc19mcmVlX21lbSgmam91cm5hbC0+al9pbm9kZSk7CisjZW5kaWYKKwlpZiAoam91cm5hbC0+al9mc19kZXYpCisJCWV4dDJmc19mcmVlX21lbSgmam91cm5hbC0+al9mc19kZXYpOworCWV4dDJmc19mcmVlX21lbSgmam91cm5hbCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB0aGUgc3VwZXJibG9jayBmaWVsZHMgcmVnYXJkaW5nIHRoZQorICogam91cm5hbCBhcmUgY29uc2lzdGVudC4KKyAqLworZXJyY29kZV90IGUyZnNja19jaGVja19leHQzX2pvdXJuYWwoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCWpvdXJuYWxfdCAqam91cm5hbDsKKwlpbnQgcmVjb3ZlciA9IGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisJcHJvYmxlbV90IHByb2JsZW07CisJaW50IHJlc2V0ID0gMCwgZm9yY2VfZnNjayA9IDA7CisJZXJyY29kZV90IHJldHZhbDsKKworCS8qIElmIHdlIGRvbid0IGhhdmUgYW55IGpvdXJuYWwgZmVhdHVyZXMsIGRvbid0IGRvIGFueXRoaW5nIG1vcmUgKi8KKwlpZiAoIShzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICFyZWNvdmVyICYmIHNiLT5zX2pvdXJuYWxfaW51bSA9PSAwICYmIHNiLT5zX2pvdXJuYWxfZGV2ID09IDAgJiYKKwkgICAgdXVpZF9pc19udWxsKHNiLT5zX2pvdXJuYWxfdXVpZCkpCisgCQlyZXR1cm4gMDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJcGN0eC5udW0gPSBzYi0+c19qb3VybmFsX2ludW07CisKKwlyZXR2YWwgPSBlMmZzY2tfZ2V0X2pvdXJuYWwoY3R4LCAmam91cm5hbCk7CisJaWYgKHJldHZhbCkgeworCQlpZiAoKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9JTk9ERV9OVU0pIHx8CisJCSAgICAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX05VTSkgfHwKKwkJICAgIChyZXR2YWwgPT0gRVhUMl9FVF9KT1VSTkFMX1RPT19TTUFMTCkgfHwKKwkJICAgIChyZXR2YWwgPT0gRVhUMl9FVF9OT19KT1VSTkFMKSkKKwkJCXJldHVybiBlMmZzY2tfam91cm5hbF9maXhfYmFkX2lub2RlKGN0eCwgJnBjdHgpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IGUyZnNja19qb3VybmFsX2xvYWQoam91cm5hbCk7CisJaWYgKHJldHZhbCkgeworCQlpZiAoKHJldHZhbCA9PSBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSykgfHwKKwkJICAgICgocmV0dmFsID09IEVYVDJfRVRfVU5TVVBQX0ZFQVRVUkUpICYmCisJCSAgICAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1VOU1VQUF9JTkNPTVBBVCwKKwkJCQkgICZwY3R4KSkpIHx8CisJCSAgICAoKHJldHZhbCA9PSBFWFQyX0VUX1JPX1VOU1VQUF9GRUFUVVJFKSAmJgorCQkgICAgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzBfSk9VUk5BTF9VTlNVUFBfUk9DT01QQVQsCisJCQkJICAmcGN0eCkpKSB8fAorCQkgICAgKChyZXR2YWwgPT0gRVhUMl9FVF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OKSAmJgorCQkgICAgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzBfSk9VUk5BTF9VTlNVUFBfVkVSU0lPTiwgJnBjdHgpKSkpCisJCQlyZXR2YWwgPSBlMmZzY2tfam91cm5hbF9maXhfY29ycnVwdF9zdXBlcihjdHgsIGpvdXJuYWwsCisJCQkJCQkJCSAgJnBjdHgpOworCQllMmZzY2tfam91cm5hbF9yZWxlYXNlKGN0eCwgam91cm5hbCwgMCwgMSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyoKKwkgKiBXZSB3YW50IHRvIG1ha2UgdGhlIGZsYWdzIGNvbnNpc3RlbnQgaGVyZS4gIFdlIHdpbGwgbm90IGxlYXZlIHdpdGgKKwkgKiBuZWVkc19yZWNvdmVyeSBzZXQgYnV0IGhhc19qb3VybmFsIGNsZWFyLiAgV2UgY2FuJ3QgZ2V0IGluIGEgbG9vcAorCSAqIHdpdGggLXksIC1uLCBvciAtcCwgb25seSBpZiBhIHVzZXIgaXNuJ3QgbWFraW5nIHVwIHRoZWlyIG1pbmQuCisJICovCitub19oYXNfam91cm5hbDoKKwlpZiAoIShzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpKSB7CisJCXJlY292ZXIgPSBzYi0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVI7CisJCXBjdHguc3RyID0gImlub2RlIjsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX0hBU19KT1VSTkFMLCAmcGN0eCkpIHsKKwkJCWlmIChyZWNvdmVyICYmCisJCQkgICAgIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1JFQ09WRVJfU0VULCAmcGN0eCkpCisJCQkJZ290byBub19oYXNfam91cm5hbDsKKwkJCS8qCisJCQkgKiBOZWVkIGEgZnVsbCBmc2NrIGlmIHdlIGFyZSByZWxlYXNpbmcgYQorCQkJICogam91cm5hbCBzdG9yZWQgb24gYSByZXNlcnZlZCBpbm9kZS4KKwkJCSAqLworCQkJZm9yY2VfZnNjayA9IHJlY292ZXIgfHwKKwkJCQkoc2ItPnNfam91cm5hbF9pbnVtIDwgRVhUMl9GSVJTVF9JTk9ERShzYikpOworCQkJLyogQ2xlYXIgYWxsIG9mIHRoZSBqb3VybmFsIGZpZWxkcyAqLworCQkJc2ItPnNfam91cm5hbF9pbnVtID0gMDsKKwkJCXNiLT5zX2pvdXJuYWxfZGV2ID0gMDsKKwkJCW1lbXNldChzYi0+c19qb3VybmFsX3V1aWQsIDAsCisJCQkgICAgICAgc2l6ZW9mKHNiLT5zX2pvdXJuYWxfdXVpZCkpOworCQkJZTJmc2NrX2NsZWFyX3JlY292ZXIoY3R4LCBmb3JjZV9mc2NrKTsKKwkJfSBlbHNlIGlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCQlzYi0+c19mZWF0dXJlX2NvbXBhdCB8PSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMOworCQkJY3R4LT5mcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQl9CisJfQorCisJaWYgKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCAmJgorCSAgICAhKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKKwkgICAgam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX3N0YXJ0ICE9IDApIHsKKwkJLyogUHJpbnQgc3RhdHVzIGluZm9ybWF0aW9uICovCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KT1VSTkFMX1JFQ09WRVJZX0NMRUFSLCAmcGN0eCk7CisJCWlmIChjdHgtPnN1cGVyYmxvY2spCisJCQlwcm9ibGVtID0gUFJfMF9KT1VSTkFMX1JVTl9ERUZBVUxUOworCQllbHNlCisJCQlwcm9ibGVtID0gUFJfMF9KT1VSTkFMX1JVTjsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJnBjdHgpKSB7CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9GT1JDRTsKKwkJCXNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgfD0KKwkJCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUjsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQl9IGVsc2UgaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCQkgICAgICAgUFJfMF9KT1VSTkFMX1JFU0VUX0pPVVJOQUwsICZwY3R4KSkgeworCQkJcmVzZXQgPSAxOworCQkJc2ItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShjdHgtPmZzKTsKKwkJfQorCQkvKgorCQkgKiBJZiB0aGUgdXNlciBhbnN3ZXJzIG5vIHRvIHRoZSBhYm92ZSBxdWVzdGlvbiwgd2UKKwkJICogaWdub3JlIHRoZSBmYWN0IHRoYXQgam91cm5hbCBhcHBhcmVudGx5IGhhcyBkYXRhOworCQkgKiBhY2NpZGVudGFsbHkgcmVwbGF5aW5nIG92ZXIgdmFsaWQgZGF0YSB3b3VsZCBiZSBmYXIKKwkJICogd29yc2UgdGhhbiBza2lwcGluZyBhIHF1ZXN0aW9uYWJsZSByZWNvdmVyeS4KKwkJICoKKwkJICogWFhYIHNob3VsZCB3ZSBhYm9ydCB3aXRoIGEgZmF0YWwgZXJyb3IgaGVyZT8gIFdoYXQKKwkJICogd2lsbCB0aGUgZXh0MyBrZXJuZWwgY29kZSBkbyBpZiBhIGZpbGVzeXN0ZW0gd2l0aAorCQkgKiAhTkVFRFNfUkVDT1ZFUlkgYnV0IHdpdGggYSBub24temVybworCQkgKiBqb3VybmFsLT5qX3N1cGVyYmxvY2stPnNfc3RhcnQgaXMgbW91bnRlZD8KKwkJICovCisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBuZWVkIHRvIGRvIHJlcGxheSB0aGUgam91cm5hbCwgY2hlY2sgdG8gc2VlIGlmCisJICogdGhlIGpvdXJuYWwncyBlcnJubyBpcyBzZXQ7IGlmIHNvLCB3ZSBuZWVkIHRvIG1hcmsgdGhlIGZpbGUKKwkgKiBzeXN0ZW0gYXMgYmVpbmcgY29ycnVwdCBhbmQgY2xlYXIgdGhlIGpvdXJuYWwncyBzX2Vycm5vLgorCSAqLworCWlmICghKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKKwkgICAgam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX2Vycm5vKSB7CisJCWN0eC0+ZnMtPnN1cGVyLT5zX3N0YXRlIHw9IEVYVDJfRVJST1JfRlM7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGN0eC0+ZnMpOworCQlqb3VybmFsLT5qX3N1cGVyYmxvY2stPnNfZXJybm8gPSAwOworCQltYXJrX2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX3NiX2J1ZmZlcik7CisJfQorCisJZTJmc2NrX2pvdXJuYWxfcmVsZWFzZShjdHgsIGpvdXJuYWwsIHJlc2V0LCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHJlY292ZXJfZXh0M19qb3VybmFsKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJam91cm5hbF90ICpqb3VybmFsOworCWVycmNvZGVfdCByZXR2YWw7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJam91cm5hbF9pbml0X3Jldm9rZV9jYWNoZXMoKTsKKwlyZXR2YWwgPSBlMmZzY2tfZ2V0X2pvdXJuYWwoY3R4LCAmam91cm5hbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IGUyZnNja19qb3VybmFsX2xvYWQoam91cm5hbCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBqb3VybmFsX2luaXRfcmV2b2tlKGpvdXJuYWwsIDEwMjQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gLWpvdXJuYWxfcmVjb3Zlcihqb3VybmFsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWlmIChqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQpIHsKKwkJcGN0eC5pbm8gPSBqb3VybmFsLT5qX2ZhaWxlZF9jb21taXQ7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9KTkxfVFhOX0NPUlJVUFQsICZwY3R4KTsKKwkJam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX2Vycm5vID0gLUVJTlZBTDsKKwkJbWFya19idWZmZXJfZGlydHkoam91cm5hbC0+al9zYl9idWZmZXIpOworCX0KKworZXJyb3V0OgorCWpvdXJuYWxfZGVzdHJveV9yZXZva2Uoam91cm5hbCk7CisJam91cm5hbF9kZXN0cm95X3Jldm9rZV9jYWNoZXMoKTsKKwllMmZzY2tfam91cm5hbF9yZWxlYXNlKGN0eCwgam91cm5hbCwgMSwgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGUyZnNja19ydW5fZXh0M19qb3VybmFsKGUyZnNja190IGN0eCkKK3sKKwlpb19tYW5hZ2VyIGlvX3B0ciA9IGN0eC0+ZnMtPmlvLT5tYW5hZ2VyOworCWludCBibG9ja3NpemUgPSBjdHgtPmZzLT5ibG9ja3NpemU7CisJZXJyY29kZV90CXJldHZhbCwgcmVjb3Zlcl9yZXR2YWw7CisJaW9fc3RhdHMJc3RhdHMgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBrYnl0ZXNfd3JpdHRlbiA9IDA7CisKKwlwcmludGYoXygiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIiksIGN0eC0+ZGV2aWNlX25hbWUpOworCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB7CisJCXByaW50ZihfKCIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIpLAorCQkgICAgICAgY3R4LT5kZXZpY2VfbmFtZSk7CisJCXJldHVybiBFWFQyX0VUX0ZJTEVfUk87CisJfQorCisJaWYgKGN0eC0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX0RJUlRZKQorCQlleHQyZnNfZmx1c2goY3R4LT5mcyk7CS8qIEZvcmNlIG91dCBhbnkgbW9kaWZpY2F0aW9ucyAqLworCisJcmVjb3Zlcl9yZXR2YWwgPSByZWNvdmVyX2V4dDNfam91cm5hbChjdHgpOworCisJLyoKKwkgKiBSZWxvYWQgdGhlIGZpbGVzeXN0ZW0gY29udGV4dCB0byBnZXQgdXAtdG8tZGF0ZSBkYXRhIGZyb20gZGlzaworCSAqIGJlY2F1c2Ugam91cm5hbCByZWNvdmVyeSB3aWxsIGNoYW5nZSB0aGUgZmlsZXN5c3RlbSB1bmRlciB1cy4KKwkgKi8KKwlpZiAoY3R4LT5mcy0+c3VwZXItPnNfa2J5dGVzX3dyaXR0ZW4gJiYKKwkgICAgY3R4LT5mcy0+aW8tPm1hbmFnZXItPmdldF9zdGF0cykKKwkJY3R4LT5mcy0+aW8tPm1hbmFnZXItPmdldF9zdGF0cyhjdHgtPmZzLT5pbywgJnN0YXRzKTsKKwlpZiAoc3RhdHMgJiYgc3RhdHMtPmJ5dGVzX3dyaXR0ZW4pCisJCWtieXRlc193cml0dGVuID0gc3RhdHMtPmJ5dGVzX3dyaXR0ZW4gPj4gMTA7CisKKwlleHQyZnNfbW1wX3N0b3AoY3R4LT5mcyk7CisJZXh0MmZzX2ZyZWUoY3R4LT5mcyk7CisJcmV0dmFsID0gZXh0MmZzX29wZW4oY3R4LT5maWxlc3lzdGVtX25hbWUsIEVYVDJfRkxBR19SVywKKwkJCSAgICAgY3R4LT5zdXBlcmJsb2NrLCBibG9ja3NpemUsIGlvX3B0ciwKKwkJCSAgICAgJmN0eC0+ZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KKwljdHgtPmZzLT5wcml2X2RhdGEgPSBjdHg7CisJY3R4LT5mcy0+bm93ID0gY3R4LT5ub3c7CisJY3R4LT5mcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCWN0eC0+ZnMtPnN1cGVyLT5zX2tieXRlc193cml0dGVuICs9IGtieXRlc193cml0dGVuOworCisJLyogU2V0IHRoZSBzdXBlcmJsb2NrIGZsYWdzICovCisJZTJmc2NrX2NsZWFyX3JlY292ZXIoY3R4LCByZWNvdmVyX3JldHZhbCAhPSAwKTsKKworCS8qCisJICogRG8gb25lIGxhc3Qgc2FuaXR5IGNoZWNrLCBhbmQgcHJvcGFnYXRlIGpvdXJuYWwtPnNfZXJybm8gdG8KKwkgKiB0aGUgRVhUMl9FUlJPUl9GUyBmbGFnIGluIHRoZSBmcyBzdXBlcmJsb2NrIGlmIG5lZWRlZC4KKwkgKi8KKwlyZXR2YWwgPSBlMmZzY2tfY2hlY2tfZXh0M19qb3VybmFsKGN0eCk7CisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IHJlY292ZXJfcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG1vdmUgdGhlIGpvdXJuYWwgaW5vZGUgZnJvbSBhIHZpc2libGUgZmlsZSBpbgorICogdGhlIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IGhpZXJhcmNoeSB0byB0aGUgcmVzZXJ2ZWQgaW5vZGUgaWYgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGpvdXJuYWxfbmFtZXNbXSA9IHsKKwkiLmpvdXJuYWwiLCAiam91cm5hbCIsICIuam91cm5hbC5kYXQiLCAiam91cm5hbC5kYXQiLCAwIH07CisKK3ZvaWQgZTJmc2NrX21vdmVfZXh0M19qb3VybmFsKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJc3RydWN0IGV4dDJfaW5vZGUgCWlub2RlOworCWV4dDJfZmlsc3lzCQlmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdAkJaW5vOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNvbnN0IGNoYXIgKiBjb25zdCAqCWNwcDsKKwlkZ3JwX3QJCQlncm91cDsKKwlpbnQJCQltb3VudF9mbGFnczsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwkvKgorCSAqIElmIHRoZSBmaWxlc3lzdGVtIGlzIG9wZW5lZCByZWFkLW9ubHksIG9yIHRoZXJlIGlzIG5vCisJICogam91cm5hbCwgdGhlbiBkbyBub3RoaW5nLgorCSAqLworCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgfHwKKwkgICAgKHNiLT5zX2pvdXJuYWxfaW51bSA9PSAwKSB8fAorCSAgICAhKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybjsKKworCS8qCisJICogUmVhZCBpbiB0aGUgam91cm5hbCBpbm9kZQorCSAqLworCWlmIChleHQyZnNfcmVhZF9pbm9kZShmcywgc2ItPnNfam91cm5hbF9pbnVtLCAmaW5vZGUpICE9IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgaXQncyBuZWNlc3NhcnkgdG8gYmFja3VwIHRoZSBqb3VybmFsIGlub2RlLCBkbyBzby4KKwkgKi8KKwlpZiAoKHNiLT5zX2pubF9iYWNrdXBfdHlwZSA9PSAwKSB8fAorCSAgICAoKHNiLT5zX2pubF9iYWNrdXBfdHlwZSA9PSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTKSAmJgorCSAgICAgbWVtY21wKGlub2RlLmlfYmxvY2ssIHNiLT5zX2pubF9ibG9ja3MsIEVYVDJfTl9CTE9DS1MqNCkpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfQkFDS1VQX0pOTCwgJnBjdHgpKSB7CisJCQltZW1jcHkoc2ItPnNfam5sX2Jsb2NrcywgaW5vZGUuaV9ibG9jaywKKwkJCSAgICAgICBFWFQyX05fQkxPQ0tTKjQpOworCQkJc2ItPnNfam5sX2Jsb2Nrc1sxNV0gPSBpbm9kZS5pX3NpemVfaGlnaDsKKwkJCXNiLT5zX2pubF9ibG9ja3NbMTZdID0gaW5vZGUuaV9zaXplOworCQkJc2ItPnNfam5sX2JhY2t1cF90eXBlID0gRVhUM19KTkxfQkFDS1VQX0JMT0NLUzsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgam91cm5hbCBpcyBhbHJlYWR5IHRoZSBoaWRkZW4gaW5vZGUsIHRoZW4gZG8gbm90aGluZworCSAqLworCWlmIChzYi0+c19qb3VybmFsX2ludW0gPT0gRVhUMl9KT1VSTkFMX0lOTykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgam91cm5hbCBpbm9kZSBoYWQgYmV0dGVyIGhhdmUgb25seSBvbmUgbGluayBhbmQgbm90IGJlIHJlYWRhYmxlLgorCSAqLworCWlmIChpbm9kZS5pX2xpbmtzX2NvdW50ICE9IDEpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCwgb3Igd2UgY2FuJ3QgdGVsbCB3aGV0aGVyCisJICogb3Igbm90IGl0J3MgbW91bnRlZCwgZG8gbm90aGluZy4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChjdHgtPmZpbGVzeXN0ZW1fbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsIHx8IChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkpCisJCXJldHVybjsKKworCS8qCisJICogSWYgd2UgY2FuJ3QgZmluZCB0aGUgbmFtZSBvZiB0aGUgam91cm5hbCBpbm9kZSwgdGhlbiBkbworCSAqIG5vdGhpbmcuCisJICovCisJZm9yIChjcHAgPSBqb3VybmFsX25hbWVzOyAqY3BwOyBjcHArKykgeworCQlyZXR2YWwgPSBleHQyZnNfbG9va3VwKGZzLCBFWFQyX1JPT1RfSU5PLCAqY3BwLAorCQkJCSAgICAgICBzdHJsZW4oKmNwcCksIDAsICZpbm8pOworCQlpZiAoKHJldHZhbCA9PSAwKSAmJiAoaW5vID09IHNiLT5zX2pvdXJuYWxfaW51bSkpCisJCQlicmVhazsKKwl9CisJaWYgKCpjcHAgPT0gMCkKKwkJcmV0dXJuOworCisJLyogV2UgbmVlZCB0aGUgaW5vZGUgYml0bWFwIHRvIGJlIGxvYWRlZCAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKworCXBjdHguc3RyID0gKmNwcDsKKwlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9NT1ZFX0pPVVJOQUwsICZwY3R4KSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBPSywgd2UndmUgZG9uZSBhbGwgdGhlIGNoZWNrcywgbGV0J3MgYWN0dWFsbHkgbW92ZSB0aGUKKwkgKiBqb3VybmFsIGlub2RlLiAgRXJyb3JzIGF0IHRoaXMgcG9pbnQgbWVhbiB3ZSBuZWVkIHRvIGZvcmNlCisJICogYW4gZXh0MiBmaWxlc3lzdGVtIGNoZWNrLgorCSAqLworCWlmICgocmV0dmFsID0gZXh0MmZzX3VubGluayhmcywgRVhUMl9ST09UX0lOTywgKmNwcCwgaW5vLCAwKSkgIT0gMCkKKwkJZ290byBlcnJfb3V0OworCWlmICgocmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBFWFQyX0pPVVJOQUxfSU5PLCAmaW5vZGUpKSAhPSAwKQorCQlnb3RvIGVycl9vdXQ7CisJc2ItPnNfam91cm5hbF9pbnVtID0gRVhUMl9KT1VSTkFMX0lOTzsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJaW5vZGUuaV9saW5rc19jb3VudCA9IDA7CisJaW5vZGUuaV9kdGltZSA9IGN0eC0+bm93OworCWlmICgocmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSkpICE9IDApCisJCWdvdG8gZXJyX291dDsKKworCWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2lubyhmcywgaW5vKTsKKwlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7CisJZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChmcywgZ3JvdXAsIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChmcywgZ3JvdXApICsgMSk7CisJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwlmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQrKzsKKwlyZXR1cm47CisKK2Vycl9vdXQ6CisJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9FUlJfTU9WRV9KT1VSTkFMLCAmcGN0eCk7CisJZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhlIHN1cGVyYmxvY2sgaGludCBmb3IgdGhlIGV4dGVybmFsCisgKiBqb3VybmFsIGlzIGNvcnJlY3QuCisgKi8KK2ludCBlMmZzY2tfZml4X2V4dDNfam91cm5hbF9oaW50KGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisJY2hhciB1dWlkWzM3XSwgKmpvdXJuYWxfbmFtZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkgfHwKKwkgICAgdXVpZF9pc19udWxsKHNiLT5zX2pvdXJuYWxfdXVpZCkpCisgCQlyZXR1cm4gMDsKKworCXV1aWRfdW5wYXJzZShzYi0+c19qb3VybmFsX3V1aWQsIHV1aWQpOworCWpvdXJuYWxfbmFtZSA9IGJsa2lkX2dldF9kZXZuYW1lKGN0eC0+YmxraWQsICJVVUlEIiwgdXVpZCk7CisJaWYgKCFqb3VybmFsX25hbWUpCisJCXJldHVybiAwOworCisJaWYgKHN0YXQoam91cm5hbF9uYW1lLCAmc3QpIDwgMCkgeworCQlmcmVlKGpvdXJuYWxfbmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdC5zdF9yZGV2ICE9IHNiLT5zX2pvdXJuYWxfZGV2KSB7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHgubnVtID0gc3Quc3RfcmRldjsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9FWFRFUk5BTF9KT1VSTkFMX0hJTlQsICZwY3R4KSkgeworCQkJc2ItPnNfam91cm5hbF9kZXYgPSBzdC5zdF9yZGV2OworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoY3R4LT5mcyk7CisJCX0KKwl9CisKKwlmcmVlKGpvdXJuYWxfbmFtZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL2xvZ2ZpbGUuYyBiL2UyZnNwcm9ncy9lMmZzY2svbG9nZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTVhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL2xvZ2ZpbGUuYwpAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIGxvZ2ZpbGUuYyAtLS0gc2V0IHVwIGUyZnNjayBsb2cgZmlsZXMKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiwgMTk5NyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgPHB3ZC5oPgorCitzdHJ1Y3Qgc3RyaW5nIHsKKwljaGFyCSpzOworCWludAlsZW47CisJaW50CWVuZDsKK307CisKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nICpzLCBpbnQgbGVuKQoreworCXMtPnMgPSBtYWxsb2MobGVuKTsKKy8qIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCBsZW4sICJsb2dmaWxlIG5hbWUiKTsgKi8KKwlzLT5sZW4gPSBsZW47CisJcy0+ZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nICpzLCBjb25zdCBjaGFyICphLCBpbnQgbGVuKQoreworCWludCBuZWVkbGVuOworCisJaWYgKCFsZW4pCisJCWxlbiA9IHN0cmxlbihhKTsKKworCW5lZWRsZW4gPSBzLT5lbmQgKyBsZW4gKyAxOworCWlmIChuZWVkbGVuID4gcy0+bGVuKSB7CisJCWNoYXIgKm47CisKKwkJaWYgKHMtPmxlbiAqIDIgPiBuZWVkbGVuKQorCQkJbmVlZGxlbiA9IHMtPmxlbiAqIDI7CisJICAgICAgICBuID0gcmVhbGxvYyhzLT5zLCBuZWVkbGVuKTsKKworCQlpZiAobikgeworCQkJcy0+cyA9IG47CisJCQlzLT5sZW4gPSBuZWVkbGVuOworCQl9IGVsc2UgeworCQkJLyogRG9uJ3QgYXBwZW5kIGlmIHdlIHJhbiBvdXQgb2YgbWVtb3J5ICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJbWVtY3B5KHMtPnMgKyBzLT5lbmQsIGEsIGxlbik7CisJcy0+ZW5kICs9IGxlbjsKKwlzLT5zW3MtPmVuZF0gPSAwOworfQorCisjZGVmaW5lIEZMQUdfVVRDCTB4MDAwMQorCitzdGF0aWMgdm9pZCBleHBhbmRfcGVyY2VudF9leHByZXNzaW9uKGUyZnNja190IGN0eCwgY2hhciBjaCwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyaW5nICpzLCBpbnQgKmZsYWdzKQoreworCXN0cnVjdCB0bQkqdG0gPSBOVUxMLCB0bV9zdHJ1Y3Q7CisJc3RydWN0IHBhc3N3ZAkqcHcgPSBOVUxMLCBwd19zdHJ1Y3Q7CisJY2hhcgkJKmNwOworCWNoYXIJCWJ1ZlsyNTZdOworCisJaWYgKChjaCA9PSAnRCcpIHx8IChjaCA9PSAnZCcpIHx8IChjaCA9PSAnbScpIHx8IChjaCA9PSAneScpIHx8CisJICAgIChjaCA9PSAnWScpIHx8CisJICAgIChjaCA9PSAnVCcpIHx8IChjaCA9PSAnSCcpIHx8IChjaCA9PSAnTScpIHx8IChjaCA9PSAnUycpKSB7CisJCXR6c2V0KCk7CisJCXRtID0gKCpmbGFncyAmIEZMQUdfVVRDKSA/IGdtdGltZV9yKCZjdHgtPm5vdywgJnRtX3N0cnVjdCkgOgorCQkJbG9jYWx0aW1lX3IoJmN0eC0+bm93LCAmdG1fc3RydWN0KTsKKwl9CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnJSc6CisJCWFwcGVuZF9zdHJpbmcocywgIiUiLCAxKTsKKwkJcmV0dXJuOworCWNhc2UgJ2QnOgorCQlzcHJpbnRmKGJ1ZiwgIiUwMmQiLCB0bS0+dG1fbWRheSk7CisJCWJyZWFrOworCWNhc2UgJ0QnOgorCQlzcHJpbnRmKGJ1ZiwgIiVkJTAyZCUwMmQiLCB0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLAorCQkJdG0tPnRtX21kYXkpOworCQlicmVhazsKKwljYXNlICdoJzoKKyNpZmRlZiBURVNUX1BST0dSQU0KKwkJc3RyY3B5KGJ1ZiwgInNlcnZlciIpOworI2Vsc2UKKwkJYnVmWzBdID0gMDsKKwkJZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2YoYnVmKSk7CisJCWJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAnSCc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9ob3VyKTsKKwkJYnJlYWs7CisJY2FzZSAnbSc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9tb24gKyAxKTsKKwkJYnJlYWs7CisJY2FzZSAnTSc6CisJCXNwcmludGYoYnVmLCAiJTAyZCIsIHRtLT50bV9taW4pOworCQlicmVhazsKKwljYXNlICdOJzoJCS8qIGJsb2NrIGRldmljZSBuYW1lICovCisJCWNwID0gc3RycmNocihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwgJy8nKTsKKwkJaWYgKGNwKQorCQkJY3ArKzsKKwkJZWxzZQorCQkJY3AgPSBjdHgtPmZpbGVzeXN0ZW1fbmFtZTsKKwkJYXBwZW5kX3N0cmluZyhzLCBjcCwgMCk7CisJCXJldHVybjsKKwljYXNlICdwJzoKKwkJc3ByaW50ZihidWYsICIlbHUiLCAodW5zaWduZWQgbG9uZykgZ2V0cGlkKCkpOworCQlicmVhazsKKwljYXNlICdzJzoKKwkJc3ByaW50ZihidWYsICIlbHUiLCAodW5zaWduZWQgbG9uZykgY3R4LT5ub3cpOworCQlicmVhazsKKwljYXNlICdTJzoKKwkJc3ByaW50ZihidWYsICIlMDJkIiwgdG0tPnRtX3NlYyk7CisJCWJyZWFrOworCWNhc2UgJ1QnOgorCQlzcHJpbnRmKGJ1ZiwgIiUwMmQlMDJkJTAyZCIsIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluLAorCQkJdG0tPnRtX3NlYyk7CisJCWJyZWFrOworCWNhc2UgJ3UnOgorI2lmZGVmIFRFU1RfUFJPR1JBTQorCQlzdHJjcHkoYnVmLCAidHl0c28iKTsKKwkJYnJlYWs7CisjZWxzZQorI2lmZGVmIEhBVkVfR0VUUFdVSURfUgorCQlnZXRwd3VpZF9yKGdldHVpZCgpLCAmcHdfc3RydWN0LCBidWYsIHNpemVvZihidWYpLCAmcHcpOworI2Vsc2UKKwkJcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisjZW5kaWYKKwkJaWYgKHB3KQorCQkJYXBwZW5kX3N0cmluZyhzLCBwdy0+cHdfbmFtZSwgMCk7CisJCXJldHVybjsKKyNlbmRpZgorCWNhc2UgJ1UnOgorCQkqZmxhZ3MgfD0gRkxBR19VVEM7CisJCXJldHVybjsKKwljYXNlICd5JzoKKwkJc3ByaW50ZihidWYsICIlMDJkIiwgdG0tPnRtX3llYXIgJSAxMDApOworCQlicmVhazsKKwljYXNlICdZJzoKKwkJc3ByaW50ZihidWYsICIlZCIsIHRtLT50bV95ZWFyICsgMTkwMCk7CisJCWJyZWFrOworCX0KKwlhcHBlbmRfc3RyaW5nKHMsIGJ1ZiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZF9sb2dmbihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmxvZ19mbiwgc3RydWN0IHN0cmluZyAqcykKK3sKKwljb25zdCBjaGFyCSpjcDsKKwlpbnQJCWk7CisJaW50CQlmbGFncyA9IDA7CisKKwlhbGxvY19zdHJpbmcocywgMTAwKTsKKwlmb3IgKGNwID0gbG9nX2ZuOyAqY3A7IGNwKyspIHsKKwkJaWYgKGNwWzBdID09ICclJykgeworCQkJY3ArKzsKKwkJCWV4cGFuZF9wZXJjZW50X2V4cHJlc3Npb24oY3R4LCAqY3AsIHMsICZmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBjcFtpXTsgaSsrKQorCQkJaWYgKGNwW2ldID09ICclJykKKwkJCQlicmVhazsKKwkJYXBwZW5kX3N0cmluZyhzLCBjcCwgaSk7CisJCWNwICs9IGktMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQJb3V0YnVmc2l6ZTsKK3N0YXRpYyB2b2lkCSpvdXRidWY7CisKK3N0YXRpYyBpbnQgZG9fcmVhZChpbnQgZmQpCit7CisJaW50CWM7CisJY2hhcgkJKm47CisJY2hhcglidWZmZXJbNDA5Nl07CisKKwljID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwlpZiAoYyA8PSAwKQorCQlyZXR1cm4gYzsKKworCW4gPSByZWFsbG9jKG91dGJ1Ziwgb3V0YnVmc2l6ZSArIGMpOworCWlmIChuKSB7CisJCW91dGJ1ZiA9IG47CisJCW1lbWNweSgoKGNoYXIgKilvdXRidWYpK291dGJ1ZnNpemUsIGJ1ZmZlciwgYyk7CisJCW91dGJ1ZnNpemUgKz0gYzsKKwl9CisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBGb3JrIGEgY2hpbGQgcHJvY2VzcyB0byBzYXZlIHRoZSBvdXRwdXQgb2YgdGhlIGxvZ2ZpbGUgdW50aWwgdGhlCisgKiBhcHByb3ByaWF0ZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQvd3JpdGUuCisgKi8KK3N0YXRpYyBGSUxFICpzYXZlX291dHB1dChjb25zdCBjaGFyICpzMCwgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWludCBjLCBmZCwgZmRzWzJdOworCWNoYXIgKmNwOworCXBpZF90IHBpZDsKKwlGSUxFICpyZXQ7CisKKwlpZiAoczAgJiYgKnMwID09IDApCisJCXMwID0gMDsKKwlpZiAoczEgJiYgKnMxID09IDApCisJCXMxID0gMDsKKwlpZiAoczIgJiYgKnMyID09IDApCisJCXMyID0gMDsKKworCS8qIEF0IGxlYXN0IG9uZSBwb3RlbnRpYWwgb3V0cHV0IGZpbGUgbmFtZSBpcyB2YWxpZCAqLworCWlmICghczAgJiYgIXMxICYmICFzMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHBpcGUoZmRzKSA8IDApIHsKKwkJcGVycm9yKCJwaXBlIik7CisJCWV4aXQoMSk7CisJfQorCisJcGlkID0gZm9yaygpOworCWlmIChwaWQgPCAwKSB7CisJCXBlcnJvcigiZm9yayIpOworCQlleGl0KDEpOworCX0KKworCWlmIChwaWQgPT0gMCkgeworCQlpZiAoZGFlbW9uKDAsIDApIDwgMCkgeworCQkJcGVycm9yKCJkYWVtb24iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJLyoKKwkJICogR3JhYiB0aGUgb3V0cHV0IGZyb20gb3VyIHBhcmVudAorCQkgKi8KKwkJY2xvc2UoZmRzWzFdKTsKKwkJd2hpbGUgKGRvX3JlYWQoZmRzWzBdKSA+IDApCisJCQk7CisJCWNsb3NlKGZkc1swXSk7CisKKwkJLyogT0ssIG5vdyBsZXQncyB0cnkgdG8gb3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KKwkJZmQgPSAtMTsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChmZCA8IDAgJiYgczApCisJCQkJZmQgPSBvcGVuKHMwLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMsIDA2NDQpOworCQkJaWYgKGZkIDwgMCAmJiBzMSkKKwkJCQlmZCA9IG9wZW4oczEsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgMDY0NCk7CisJCQlpZiAoZmQgPCAwICYmIHMyKQorCQkJCWZkID0gb3BlbihzMiwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjQ0KTsKKwkJCWlmIChmZCA+PSAwKQorCQkJCWJyZWFrOworCQkJc2xlZXAoMSk7CisJCX0KKworCQljcCA9IG91dGJ1ZjsKKwkJd2hpbGUgKG91dGJ1ZnNpemUgPiAwKSB7CisJCQljID0gd3JpdGUoZmQsIGNwLCBvdXRidWZzaXplKTsKKwkJCWlmIChjIDwgMCkgeworCQkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW91dGJ1ZnNpemUgLT0gYzsKKwkJCWNwICs9IGM7CisJCX0KKwkJZXhpdCgwKTsKKwl9CisKKwljbG9zZShmZHNbMF0pOworCXJldCA9IGZkb3BlbihmZHNbMV0sICJ3Iik7CisJaWYgKCFyZXQpCisJCWNsb3NlKGZkc1sxXSk7CisJcmV0dXJuIHJldDsKK30KKworI2lmbmRlZiBURVNUX1BST0dSQU0KK3ZvaWQgc2V0X3VwX2xvZ2dpbmcoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBzdHJpbmcgcywgczEsIHMyOworCWNoYXIgKnMwID0gMCwgKmxvZ19kaXIgPSAwLCAqbG9nX2ZuID0gMDsKKwlpbnQgbG9nX2Rpcl93YWl0ID0gMDsKKworCXMucyA9IHMxLnMgPSBzMi5zID0gMDsKKworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJsb2dfZGlyX3dhaXQiLCAwLCAwLAorCQkJICAgICZsb2dfZGlyX3dhaXQpOworCWlmIChjdHgtPmxvZ19mbikKKwkJbG9nX2ZuID0gc3RyaW5nX2NvcHkoY3R4LCBjdHgtPmxvZ19mbiwgMCk7CisJZWxzZQorCQlwcm9maWxlX2dldF9zdHJpbmcoY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJsb2dfZmlsZW5hbWUiLAorCQkJCSAgIDAsIDAsICZsb2dfZm4pOworCXByb2ZpbGVfZ2V0X3N0cmluZyhjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgImxvZ19kaXIiLCAwLCAwLCAmbG9nX2Rpcik7CisKKwlpZiAoIWxvZ19mbiB8fCAhbG9nX2ZuWzBdKQorCQlnb3RvIG91dDsKKworCWV4cGFuZF9sb2dmbihjdHgsIGxvZ19mbiwgJnMpOworCWlmICgobG9nX2ZuWzBdID09ICcvJykgfHwgIWxvZ19kaXIgfHwgIWxvZ19kaXJbMF0pCisJCXMwID0gcy5zOworCisJaWYgKGxvZ19kaXIgJiYgbG9nX2RpclswXSkgeworCQlhbGxvY19zdHJpbmcoJnMxLCBzdHJsZW4obG9nX2RpcikgKyBzdHJsZW4ocy5zKSArIDIpOworCQlhcHBlbmRfc3RyaW5nKCZzMSwgbG9nX2RpciwgMCk7CisJCWFwcGVuZF9zdHJpbmcoJnMxLCAiLyIsIDEpOworCQlhcHBlbmRfc3RyaW5nKCZzMSwgcy5zLCAwKTsKKwl9CisKKwlmcmVlKGxvZ19kaXIpOworCXByb2ZpbGVfZ2V0X3N0cmluZyhjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgImxvZ19kaXJfZmFsbGJhY2siLCAwLCAwLAorCQkJICAgJmxvZ19kaXIpOworCWlmIChsb2dfZGlyICYmIGxvZ19kaXJbMF0pIHsKKwkJYWxsb2Nfc3RyaW5nKCZzMiwgc3RybGVuKGxvZ19kaXIpICsgc3RybGVuKHMucykgKyAyKTsKKwkJYXBwZW5kX3N0cmluZygmczIsIGxvZ19kaXIsIDApOworCQlhcHBlbmRfc3RyaW5nKCZzMiwgIi8iLCAxKTsKKwkJYXBwZW5kX3N0cmluZygmczIsIHMucywgMCk7CisJCXByaW50ZigiJXNcbiIsIHMyLnMpOworCX0KKworCWlmIChzMCkKKwkJY3R4LT5sb2dmID0gZm9wZW4oczAsICJ3Iik7CisJaWYgKCFjdHgtPmxvZ2YgJiYgczEucykKKwkJY3R4LT5sb2dmID0gZm9wZW4oczEucywgInciKTsKKwlpZiAoIWN0eC0+bG9nZiAmJiBzMi5zKQorCQljdHgtPmxvZ2YgPSBmb3BlbihzMi5zLCAidyIpOworCWlmICghY3R4LT5sb2dmICYmIGxvZ19kaXJfd2FpdCkKKwkJY3R4LT5sb2dmID0gc2F2ZV9vdXRwdXQoczAsIHMxLnMsIHMyLnMpOworCitvdXQ6CisJZnJlZShzLnMpOworCWZyZWUoczEucyk7CisJZnJlZShzMi5zKTsKKwlmcmVlKGxvZ19mbik7CisJZnJlZShsb2dfZGlyKTsKKwlyZXR1cm47Cit9CisjZWxzZQordm9pZCAqZTJmc2NrX2FsbG9jYXRlX21lbW9yeShlMmZzY2tfdCBjdHgsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikKK3sKKwl2b2lkICpyZXQ7CisJY2hhciBidWZbMjU2XTsKKworCXJldCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJldCkgeworCQlzcHJpbnRmKGJ1ZiwgIkNhbid0IGFsbG9jYXRlICVzXG4iLCBkZXNjcmlwdGlvbik7CisJCWV4aXQoMSk7CisJfQorCW1lbXNldChyZXQsIDAsIHNpemUpOworCXJldHVybiByZXQ7Cit9CisKK2VycmNvZGVfdCBlMmZzY2tfYWxsb2NhdGVfY29udGV4dChlMmZzY2tfdCAqcmV0KQoreworCWUyZnNja190CWNvbnRleHQ7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqdGltZV9lbnY7CisKKwljb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZTJmc2NrX3N0cnVjdCkpOworCWlmICghY29udGV4dCkKKwkJcmV0dXJuIEVOT01FTTsKKworCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2Yoc3RydWN0IGUyZnNja19zdHJ1Y3QpKTsKKworCWNvbnRleHQtPm5vdyA9IDEzMzIwMDY0NzQ7CisKKwljb250ZXh0LT5maWxlc3lzdGVtX25hbWUgPSAiL2Rldi9zZGEzIjsKKwljb250ZXh0LT5kZXZpY2VfbmFtZSA9ICJmc2xhYmVsIjsKKworCSpyZXQgPSBjb250ZXh0OworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZTJmc2NrX3QJY3R4OworCXN0cnVjdCBzdHJpbmcJczsKKworCXB1dGVudigiVFo9RVNUKzU6MDAiKTsKKwllMmZzY2tfYWxsb2NhdGVfY29udGV4dCgmY3R4KTsKKwlleHBhbmRfbG9nZm4oY3R4LCAiZTJmc2NrLSVOLiVoLiV1LiVELSVUIiwgJnMpOworCXByaW50ZigiJXNcbiIsIHMucyk7CisJZnJlZShzLnMpOworCWV4cGFuZF9sb2dmbihjdHgsICJlMmZzY2stJU4uJWguJXUuJVklbSVkLSVIJU0lUyIsICZzKTsKKwlwcmludGYoIiVzXG4iLCBzLnMpOworCWZyZWUocy5zKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL21lc3NhZ2UuYyBiL2UyZnNwcm9ncy9lMmZzY2svbWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjBhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL21lc3NhZ2UuYwpAQCAtMCwwICsxLDU2MiBAQAorLyoKKyAqIG1lc3NhZ2UuYyAtLS0gcHJpbnQgZTJmc2NrIG1lc3NhZ2VzICh3aXRoIGNvbXByZXNzaW9uKQorICoKKyAqIENvcHlyaWdodCAxOTk2LCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqIHByaW50X2UyZnNja19tZXNzYWdlKCkgcHJpbnRzIGEgbWVzc2FnZSB0byB0aGUgdXNlciwgdXNpbmcKKyAqIGNvbXByZXNzaW9uIHRlY2huaXF1ZXMgYW5kIGV4cGFuc2lvbnMgb2YgYWJicmV2aWF0aW9ucy4KKyAqCisgKiBUaGUgZm9sbG93aW5nICUgZXhwYW5zaW9ucyBhcmUgc3VwcG9ydGVkOgorICoKKyAqIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorICogCSVCCTxibGtjb3VudD4JCWludGVycHJldCBibGtjb3VudCBhcyBibGtjb3VudAorICogCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorICogCSVEaQk8ZGlyZW50Pi0+aW5vCQlpbm9kZSBudW1iZXIKKyAqIAklRG4JPGRpcmVudD4tPm5hbWUJCXN0cmluZworICogCSVEcgk8ZGlyZW50Pi0+cmVjX2xlbgorICogCSVEbAk8ZGlyZW50Pi0+bmFtZV9sZW4KKyAqIAklRHQJPGRpcmVudD4tPmZpbGV0eXBlCisgKiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisgKiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyAqIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorICogCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorICogCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyAqIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworICogCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyAqIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyAqIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisgKiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorICogCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyAqIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyAqIAklSXUJPGlub2RlPiAtPiBpX3VpZAorICogCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisgKgklSXQJPGlub2RlIHR5cGU+CisgKiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisgKiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyAqIAklTgk8bnVtPgorICoJJXAJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyAqIAklUAlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyAqIAkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorICogCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisgKiAJJXEJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyAqIAklUQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisgKiAJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisgKiAJJXIJPGJsa2NvdW50PgkJaW50ZXJwcmV0IGJsa2NvdW50IGFzIHJlZmNvdW50CisgKiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworICogCSVTCWJhY2t1cCBzdXBlcmJsb2NrCisgKiAJJVgJPG51bT4gaGV4YWRlY2ltYWwgZm9ybWF0CisgKgorICogVGhlIGZvbGxvd2luZyAnQCcgZXhwYW5zaW9ucyBhcmUgc3VwcG9ydGVkOgorICoKKyAqIAlAYQlleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIAlAQQllcnJvciBhbGxvY2F0aW5nCisgKiAJQGIJYmxvY2sKKyAqIAlAQgliaXRtYXAKKyAqIAlAYwljb21wcmVzcworICogCUBDCWNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sKKyAqIAlARAlkZWxldGVkCisgKiAJQGQJZGlyZWN0b3J5CisgKiAJQGUJZW50cnkKKyAqIAlARQlFbnRyeSAnJURuJyBpbiAlcCAoJWkpCisgKiAJQGYJZmlsZXN5c3RlbQorICogCUBGCWZvciBAaSAlaSAoJVEpIGlzCisgKiAJQGcJZ3JvdXAKKyAqIAlAaAlIVFJFRSBkaXJlY3RvcnkgaW5vZGUKKyAqIAlAaQlpbm9kZQorICogCUBJCWlsbGVnYWwKKyAqIAlAaglqb3VybmFsCisgKiAJQGwJbG9zdCtmb3VuZAorICogCUBMCWlzIGEgbGluaworICoJQG0JbXVsdGlwbHktY2xhaW1lZAorICoJQG4JaW52YWxpZAorICogCUBvCW9ycGhhbmVkCisgKiAJQHAJcHJvYmxlbSBpbgorICoJQHEJcXVvdGEKKyAqIAlAcglyb290IGlub2RlCisgKiAJQHMJc2hvdWxkIGJlCisgKiAJQFMJc3VwZXJibG9jaworICogCUB1CXVuYXR0YWNoZWQKKyAqIAlAdglkZXZpY2UKKyAqCUB4CWV4dGVudAorICogCUB6CXplcm8tbGVuZ3RoCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfSU5MSU5FXyBfX2lubGluZV9fCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXworI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBhYmJyZXZpYXRpb25zIHVzZWQgYnkgdGhlIHRleHQgc3RyaW5ncworICogYmVsb3cuICBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgdGhlIGluZGV4IGxldHRlci4gIEFuCisgKiBhYmJyZXZpYXRpb24gb2YgdGhlIGZvcm0gJ0A8aT4nIGlzIGV4cGFuZGVkIGJ5IGxvb2tpbmcgdXAgdGhlIGluZGV4CisgKiBsZXR0ZXIgPGk+IGluIHRoZSB0YWJsZSBiZWxvdy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmFiYnJldnNbXSA9IHsKKwlOXygiYWV4dGVuZGVkIGF0dHJpYnV0ZSIpLAorCU5fKCJBZXJyb3IgYWxsb2NhdGluZyIpLAorCU5fKCJiYmxvY2siKSwKKwlOXygiQmJpdG1hcCIpLAorCU5fKCJjY29tcHJlc3MiKSwKKwlOXygiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiKSwKKwlOXygiaWlub2RlIiksCisJTl8oIklpbGxlZ2FsIiksCisJTl8oImpqb3VybmFsIiksCisJTl8oIkRkZWxldGVkIiksCisJTl8oImRkaXJlY3RvcnkiKSwKKwlOXygiZWVudHJ5IiksCisJTl8oIkVAZSAnJURuJyBpbiAlcCAoJWkpIiksCisJTl8oImZmaWxlc3lzdGVtIiksCisJTl8oIkZmb3IgQGkgJWkgKCVRKSBpcyIpLAorCU5fKCJnZ3JvdXAiKSwKKwlOXygiaEhUUkVFIEBkIEBpIiksCisJTl8oImxsb3N0K2ZvdW5kIiksCisJTl8oIkxpcyBhIGxpbmsiKSwKKwlOXygibW11bHRpcGx5LWNsYWltZWQiKSwKKwlOXygibmludmFsaWQiKSwKKwlOXygib29ycGhhbmVkIiksCisJTl8oInBwcm9ibGVtIGluIiksCisJTl8oInFxdW90YSIpLAorCU5fKCJycm9vdCBAaSIpLAorCU5fKCJzc2hvdWxkIGJlIiksCisJTl8oIlNzdXBlckBiIiksCisJTl8oInV1bmF0dGFjaGVkIiksCisJTl8oInZkZXZpY2UiKSwKKwlOXygieGV4dGVudCIpLAorCU5fKCJ6emVyby1sZW5ndGgiKSwKKwkiQEAiLAorCTAKKwl9OworCisvKgorICogR2l2ZSBtb3JlIHVzZXIgZnJpZW5kbHkgbmFtZXMgdG8gdGhlICJzcGVjaWFsIiBpbm9kZXMuCisgKi8KKyNkZWZpbmUgbnVtX3NwZWNpYWxfaW5vZGVzCTExCitzdGF0aWMgY29uc3QgY2hhciAqc3BlY2lhbF9pbm9kZV9uYW1lW10gPQoreworCU5fKCI8VGhlIE5VTEwgaW5vZGU+IiksCQkJLyogMCAqLworCU5fKCI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IiksCQkvKiAxICovCisJIi8iLAkJCQkJLyogMiAqLworCU5fKCI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IiksCQkvKiAzICovCisJTl8oIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IiksCQkvKiA0ICovCisJTl8oIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IiksCQkvKiA1ICovCisJTl8oIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIpLAkvKiA2ICovCisJTl8oIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iKSwJLyogNyAqLworCU5fKCI8VGhlIGpvdXJuYWwgaW5vZGU+IiksCQkvKiA4ICovCisJTl8oIjxSZXNlcnZlZCBpbm9kZSA5PiIpLAkJLyogOSAqLworCU5fKCI8UmVzZXJ2ZWQgaW5vZGUgMTA+IiksCQkvKiAxMCAqLworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyAic2FmZSIgcHJpbnRpbmcuICBJdCB3aWxsIGNvbnZlcnQgbm9uLXByaW50YWJsZQorICogQVNDSUkgY2hhcmFjdGVycyB1c2luZyAnXicgYW5kIE0tIG5vdGF0aW9uLgorICovCitzdGF0aWMgdm9pZCBzYWZlX3ByaW50KEZJTEUgKmYsIGNvbnN0IGNoYXIgKmNwLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIJY2g7CisKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gc3RybGVuKGNwKTsKKworCXdoaWxlIChsZW4tLSkgeworCQljaCA9ICpjcCsrOworCQlpZiAoY2ggPiAxMjgpIHsKKwkJCWZwdXRzKCJNLSIsIGYpOworCQkJY2ggLT0gMTI4OworCQl9CisJCWlmICgoY2ggPCAzMikgfHwgKGNoID09IDB4N2YpKSB7CisJCQlmcHV0YygnXicsIGYpOworCQkJY2ggXj0gMHg0MDsgLyogXkAsIF5BLCBeQjsgXj8gZm9yIERFTCAqLworCQl9CisJCWZwdXRjKGNoLCBmKTsKKwl9Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRzIGEgcGF0aG5hbWUsIHVzaW5nIHRoZSBleHQyZnNfZ2V0X3BhdGhuYW1lCisgKiBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBwcmludF9wYXRobmFtZShGSUxFICpmLCBleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICBleHQyX2lub190IGlubykKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwljaGFyCQkqcGF0aDsKKworCWlmICghZGlyICYmIChpbm8gPCBudW1fc3BlY2lhbF9pbm9kZXMpKSB7CisJCWZwdXRzKF8oc3BlY2lhbF9pbm9kZV9uYW1lW2lub10pLCBmKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmcykKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZShmcywgZGlyLCBpbm8sICZwYXRoKTsKKwlpZiAoIWZzIHx8IHJldHZhbCkKKwkJZnB1dHMoIj8/PyIsIGYpOworCWVsc2UgeworCQlzYWZlX3ByaW50KGYsIHBhdGgsIC0xKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZwYXRoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RpbWUoRklMRSAqZiwgdGltZV90IHQpCit7CisJY29uc3QgY2hhciAqCQl0aW1lX3N0cjsKKwlzdGF0aWMgaW50CQlkb19nbXQgPSAtMTsKKworI2lmZGVmIF9fZGlldGxpYmNfXworCQkvKiBUaGUgZGlldCBsaWJjIGRvZXNuJ3QgcmVzcGVjdCB0aGUgVFogZW52aXJvbmVtbnQgdmFyaWFibGUgKi8KKwkJaWYgKGRvX2dtdCA9PSAtMSkgeworCQkJdGltZV9zdHIgPSBnZXRlbnYoIlRaIik7CisJCQlpZiAoIXRpbWVfc3RyKQorCQkJCXRpbWVfc3RyID0gIiI7CisJCQlkb19nbXQgPSAhc3RyY21wKHRpbWVfc3RyLCAiR01UMCIpOworCQl9CisjZW5kaWYKKwkJdGltZV9zdHIgPSBhc2N0aW1lKChkb19nbXQgPiAwKSA/IGdtdGltZSgmdCkgOiBsb2NhbHRpbWUoJnQpKTsKKwkJZnByaW50ZihmLCAiJS4yNHMiLCB0aW1lX3N0cik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlICdAJyBleHBhbnNpb24uICBXZSBhbGxvdyByZWN1cnNpdmUKKyAqIGV4cGFuc2lvbjsgYW4gQCBleHByZXNzaW9uIGNhbiBjb250YWluIGZ1cnRoZXIgJ0AnIGFuZCAnJScKKyAqIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgX0lOTElORV8gdm9pZCBleHBhbmRfYXRfZXhwcmVzc2lvbihGSUxFICpmLCBlMmZzY2tfdCBjdHgsIGNoYXIgY2gsCisJCQkJCSAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwKKwkJCQkJICBpbnQgKmZpcnN0LCBpbnQgcmVjdXJzZSkKK3sKKwljb25zdCBjaGFyICoqY3BwLCAqc3RyOworCisJLyogU2VhcmNoIGZvciB0aGUgYWJicmV2aWF0aW9uICovCisJZm9yIChjcHAgPSBhYmJyZXZzOyAqY3BwOyBjcHArKykgeworCQlpZiAoY2ggPT0gKmNwcFswXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoKmNwcCAmJiByZWN1cnNlIDwgMTApIHsKKwkJc3RyID0gXygqY3BwKSArIDE7CisJCWlmICgqZmlyc3QgJiYgaXNsb3dlcigqc3RyKSkgeworCQkJKmZpcnN0ID0gMDsKKwkJCWZwdXRjKHRvdXBwZXIoKnN0cisrKSwgZik7CisJCX0KKwkJcHJpbnRfZTJmc2NrX21lc3NhZ2UoZiwgY3R4LCBzdHIsIHBjdHgsICpmaXJzdCwgcmVjdXJzZSsxKTsKKwl9IGVsc2UKKwkJZnByaW50ZihmLCAiQCVjIiwgY2gpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBleHBhbmRzICclSVgnIGV4cHJlc3Npb25zCisgKi8KK3N0YXRpYyBfSU5MSU5FXyB2b2lkIGV4cGFuZF9pbm9kZV9leHByZXNzaW9uKEZJTEUgKmYsIGV4dDJfZmlsc3lzIGZzLCBjaGFyIGNoLAorCQkJCQkgICAgIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkqaW5vZGU7CisJc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UJKmxhcmdlX2lub2RlOworCisJaWYgKCFjdHggfHwgIWN0eC0+aW5vZGUpCisJCWdvdG8gbm9faW5vZGU7CisKKwlpbm9kZSA9IGN0eC0+aW5vZGU7CisJbGFyZ2VfaW5vZGUgPSAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGU7CisKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAncyc6CisJCWlmIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJZnByaW50ZihmLCAiJXUiLCBpbm9kZS0+aV9zaXplKTsKKwkJZWxzZSB7CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCQlpZiAoaW5vZGUtPmlfc2l6ZV9oaWdoKQorCQkJCWZwcmludGYoZiwgIjB4JXglMDh4IiwgaW5vZGUtPmlfc2l6ZV9oaWdoLAorCQkJCQlpbm9kZS0+aV9zaXplKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKGYsICIldSIsIGlub2RlLT5pX3NpemUpOworI2Vsc2UKKwkJCWZwcmludGYoZiwgIiVsbHUiLCBFWFQyX0lfU0laRShpbm9kZSkpOworI2VuZGlmCisJCX0KKwkJYnJlYWs7CisJY2FzZSAnUyc6CisJCWZwcmludGYoZiwgIiV1IiwgbGFyZ2VfaW5vZGUtPmlfZXh0cmFfaXNpemUpOworCQlicmVhazsKKwljYXNlICdiJzoKKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkgCisJCQlmcHJpbnRmKGYsICIlbGx1IiwgaW5vZGUtPmlfYmxvY2tzICsKKwkJCQkoKChsb25nIGxvbmcpIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpKQorCQkJCSA8PCAzMikpOworCQllbHNlCisJCQlmcHJpbnRmKGYsICIldSIsIGlub2RlLT5pX2Jsb2Nrcyk7CisJCWJyZWFrOworCWNhc2UgJ2wnOgorCQlmcHJpbnRmKGYsICIlZCIsIGlub2RlLT5pX2xpbmtzX2NvdW50KTsKKwkJYnJlYWs7CisJY2FzZSAnbSc6CisJCWZwcmludGYoZiwgIjAlbyIsIGlub2RlLT5pX21vZGUpOworCQlicmVhazsKKwljYXNlICdNJzoKKwkJcHJpbnRfdGltZShmLCBpbm9kZS0+aV9tdGltZSk7CisJCWJyZWFrOworCWNhc2UgJ0YnOgorCQlmcHJpbnRmKGYsICIldSIsIGlub2RlLT5pX2ZhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAnZic6CisJCWZwcmludGYoZiwgIiVsbHUiLCBleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsIGlub2RlKSk7CisJCWJyZWFrOworCWNhc2UgJ2QnOgorCQlmcHJpbnRmKGYsICIldSIsIChMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpID8KKwkJCQkgIGlub2RlLT5pX2Rpcl9hY2wgOiAwKSk7CisJCWJyZWFrOworCWNhc2UgJ3UnOgorCQlmcHJpbnRmKGYsICIlZCIsIGlub2RlX3VpZCgqaW5vZGUpKTsKKwkJYnJlYWs7CisJY2FzZSAnZyc6CisJCWZwcmludGYoZiwgIiVkIiwgaW5vZGVfZ2lkKCppbm9kZSkpOworCQlicmVhazsKKwljYXNlICd0JzoKKwkJaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJyZWd1bGFyIGZpbGUiKSwgZik7CisJCWVsc2UgaWYgKExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJkaXJlY3RvcnkiKSwgZik7CisJCWVsc2UgaWYgKExJTlVYX1NfSVNDSFIoaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJjaGFyYWN0ZXIgZGV2aWNlIiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTQkxLKGlub2RlLT5pX21vZGUpKQorCQkJZnB1dHMoXygiYmxvY2sgZGV2aWNlIiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTRklGTyhpbm9kZS0+aV9tb2RlKSkKKwkJCWZwdXRzKF8oIm5hbWVkIHBpcGUiKSwgZik7CisJCWVsc2UgaWYgKExJTlVYX1NfSVNMTksoaW5vZGUtPmlfbW9kZSkpCisJCQlmcHV0cyhfKCJzeW1ib2xpYyBsaW5rIiksIGYpOworCQllbHNlIGlmIChMSU5VWF9TX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkKKwkJCWZwdXRzKF8oInNvY2tldCIpLCBmKTsKKwkJZWxzZQorCQkJZnByaW50ZihmLCBfKCJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIiksCisJCQkJaW5vZGUtPmlfbW9kZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJbm9faW5vZGU6CisJCWZwcmludGYoZiwgIiUlSSVjIiwgY2gpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgJyVkWCcgZXhwcmVzc2lvbnMKKyAqLworc3RhdGljIF9JTkxJTkVfIHZvaWQgZXhwYW5kX2RpcmVudF9leHByZXNzaW9uKEZJTEUgKmYsIGV4dDJfZmlsc3lzIGZzLCBjaGFyIGNoLAorCQkJCQkgICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5CSpkaXJlbnQ7CisJdW5zaWduZWQgaW50IHJlY19sZW4sIGxlbjsKKworCWlmICghY3R4IHx8ICFjdHgtPmRpcmVudCkKKwkJZ290byBub19kaXJlbnQ7CisKKwlkaXJlbnQgPSBjdHgtPmRpcmVudDsKKworCXN3aXRjaCAoY2gpIHsKKwljYXNlICdpJzoKKwkJZnByaW50ZihmLCAiJXUiLCBkaXJlbnQtPmlub2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnbic6CisJCWxlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCQlpZiAoKGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbikgPT0gMCkgJiYKKwkJICAgIChsZW4gPiByZWNfbGVuKSkKKwkJCWxlbiA9IHJlY19sZW47CisJCXNhZmVfcHJpbnQoZiwgZGlyZW50LT5uYW1lLCBsZW4pOworCQlicmVhazsKKwljYXNlICdyJzoKKwkJKHZvaWQpIGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJCWZwcmludGYoZiwgIiV1IiwgcmVjX2xlbik7CisJCWJyZWFrOworCWNhc2UgJ2wnOgorCQlmcHJpbnRmKGYsICIldSIsIGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKTsKKwkJYnJlYWs7CisJY2FzZSAndCc6CisJCWZwcmludGYoZiwgIiV1IiwgZGlyZW50LT5uYW1lX2xlbiA+PiA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwlub19kaXJlbnQ6CisJCWZwcmludGYoZiwgIiUlRCVjIiwgY2gpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBfSU5MSU5FXyB2b2lkIGV4cGFuZF9wZXJjZW50X2V4cHJlc3Npb24oRklMRSAqZiwgZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICAgICBjaGFyIGNoLCBpbnQgd2lkdGgsIGludCAqZmlyc3QsCisJCQkJCSAgICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpjdHgpCit7CisJZTJmc2NrX3QgZTJmc2NrX2N0eCA9IGZzID8gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhIDogTlVMTDsKKwljb25zdCBjaGFyICptOworCisJaWYgKCFjdHgpCisJCWdvdG8gbm9fY29udGV4dDsKKworCXN3aXRjaCAoY2gpIHsKKwljYXNlICclJzoKKwkJZnB1dGMoJyUnLCBmKTsKKwkJYnJlYWs7CisJY2FzZSAnYic6CisjaWZkZWYgRVhUMl9OT182NF9UWVBFCisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCAodW5zaWduZWQgbG9uZykgY3R4LT5ibGspOworI2Vsc2UKKwkJZnByaW50ZihmLCAiJSpsbHUiLCB3aWR0aCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3R4LT5ibGspOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ0InOgorCQlpZiAoY3R4LT5ibGtjb3VudCA9PSBCTE9DS19DT1VOVF9JTkQpCisJCQltID0gXygiaW5kaXJlY3QgYmxvY2siKTsKKwkJZWxzZSBpZiAoY3R4LT5ibGtjb3VudCA9PSBCTE9DS19DT1VOVF9ESU5EKQorCQkJbSA9IF8oImRvdWJsZSBpbmRpcmVjdCBibG9jayIpOworCQllbHNlIGlmIChjdHgtPmJsa2NvdW50ID09IEJMT0NLX0NPVU5UX1RJTkQpCisJCQltID0gXygidHJpcGxlIGluZGlyZWN0IGJsb2NrIik7CisJCWVsc2UgaWYgKGN0eC0+YmxrY291bnQgPT0gQkxPQ0tfQ09VTlRfVFJBTlNMQVRPUikKKwkJCW0gPSBfKCJ0cmFuc2xhdG9yIGJsb2NrIik7CisJCWVsc2UKKwkJCW0gPSBfKCJibG9jayAjIik7CisJCWlmICgqZmlyc3QgJiYgaXNsb3dlcihtWzBdKSkKKwkJCWZwdXRjKHRvdXBwZXIoKm0rKyksIGYpOworCQlmcHV0cyhtLCBmKTsKKwkJaWYgKGN0eC0+YmxrY291bnQgPj0gMCkgeworI2lmZGVmIEVYVDJfTk9fNjRfVFlQRQorCQkJZnByaW50ZihmLCAiJWQiLCBjdHgtPmJsa2NvdW50KTsKKyNlbHNlCisJCQlmcHJpbnRmKGYsICIlbGxkIiwgKGxvbmcgbG9uZykgY3R4LT5ibGtjb3VudCk7CisjZW5kaWYKKwkJfQorCQlicmVhazsKKwljYXNlICdjJzoKKyNpZmRlZiBFWFQyX05PXzY0X1RZUEUKKwkJZnByaW50ZihmLCAiJSp1Iiwgd2lkdGgsICh1bnNpZ25lZCBsb25nKSBjdHgtPmJsazIpOworI2Vsc2UKKwkJZnByaW50ZihmLCAiJSpsbHUiLCB3aWR0aCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3R4LT5ibGsyKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlICdkJzoKKwkJZnByaW50ZihmLCAiJSp1Iiwgd2lkdGgsIGN0eC0+ZGlyKTsKKwkJYnJlYWs7CisJY2FzZSAnZyc6CisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCBjdHgtPmdyb3VwKTsKKwkJYnJlYWs7CisJY2FzZSAnaSc6CisJCWZwcmludGYoZiwgIiUqdSIsIHdpZHRoLCBjdHgtPmlubyk7CisJCWJyZWFrOworCWNhc2UgJ2onOgorCQlmcHJpbnRmKGYsICIlKnUiLCB3aWR0aCwgY3R4LT5pbm8yKTsKKwkJYnJlYWs7CisJY2FzZSAnbSc6CisJCWZwcmludGYoZiwgIiUqcyIsIHdpZHRoLCBlcnJvcl9tZXNzYWdlKGN0eC0+ZXJyY29kZSkpOworCQlicmVhazsKKwljYXNlICdOJzoKKyNpZmRlZiBFWFQyX05PXzY0X1RZUEUKKwkJZnByaW50ZihmLCAiJSp1Iiwgd2lkdGgsIGN0eC0+bnVtKTsKKyNlbHNlCisJCWZwcmludGYoZiwgIiUqbGx1Iiwgd2lkdGgsIChsb25nIGxvbmcpY3R4LT5udW0pOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ3AnOgorCQlwcmludF9wYXRobmFtZShmLCBmcywgY3R4LT5pbm8sIDApOworCQlicmVhazsKKwljYXNlICdQJzoKKwkJcHJpbnRfcGF0aG5hbWUoZiwgZnMsIGN0eC0+aW5vMiwKKwkJCSAgICAgICBjdHgtPmRpcmVudCA/IGN0eC0+ZGlyZW50LT5pbm9kZSA6IDApOworCQlicmVhazsKKwljYXNlICdxJzoKKwkJcHJpbnRfcGF0aG5hbWUoZiwgZnMsIGN0eC0+ZGlyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAnUSc6CisJCXByaW50X3BhdGhuYW1lKGYsIGZzLCBjdHgtPmRpciwgY3R4LT5pbm8pOworCQlicmVhazsKKwljYXNlICdyJzoKKyNpZmRlZiBFWFQyX05PXzY0X1RZUEUKKwkJZnByaW50ZihmLCAiJSpkIiwgd2lkdGgsIGN0eC0+YmxrY291bnQpOworI2Vsc2UKKwkJZnByaW50ZihmLCAiJSpsbGQiLCB3aWR0aCwgKGxvbmcgbG9uZykgY3R4LT5ibGtjb3VudCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAnUyc6CisJCWZwcmludGYoZiwgIiVsbHUiLCBnZXRfYmFja3VwX3NiKE5VTEwsIGZzLCBOVUxMLCBOVUxMKSk7CisJCWJyZWFrOworCWNhc2UgJ3MnOgorCQlmcHJpbnRmKGYsICIlKnMiLCB3aWR0aCwgY3R4LT5zdHIgPyBjdHgtPnN0ciA6ICJOVUxMIik7CisJCWJyZWFrOworCWNhc2UgJ3QnOgorCQlwcmludF90aW1lKGYsICh0aW1lX3QpIGN0eC0+bnVtKTsKKwkJYnJlYWs7CisJY2FzZSAnVCc6CisJCXByaW50X3RpbWUoZiwgZTJmc2NrX2N0eCA/IGUyZnNja19jdHgtPm5vdyA6IHRpbWUoMCkpOworCQlicmVhazsKKwljYXNlICd4JzoKKwkJZnByaW50ZihmLCAiMHglMCp4Iiwgd2lkdGgsIGN0eC0+Y3N1bTEpOworCQlicmVhazsKKwljYXNlICdYJzoKKyNpZmRlZiBFWFQyX05PXzY0X1RZUEUKKwkJZnByaW50ZihmLCAiMHglMCp4Iiwgd2lkdGgsIGN0eC0+bnVtKTsKKyNlbHNlCisJCWZwcmludGYoZiwgIjB4JTAqbGx4Iiwgd2lkdGgsIChsb25nIGxvbmcpY3R4LT5udW0pOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ3knOgorCQlmcHJpbnRmKGYsICIweCUwKngiLCB3aWR0aCwgY3R4LT5jc3VtMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJbm9fY29udGV4dDoKKwkJZnByaW50ZihmLCAiJSUlYyIsIGNoKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHByaW50X2UyZnNja19tZXNzYWdlKEZJTEUgKmYsIGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqbXNnLAorCQkJICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LCBpbnQgZmlyc3QsCisJCQkgIGludCByZWN1cnNlKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwljb25zdCBjaGFyICoJY3A7CisJaW50CQlpLCB3aWR0aDsKKworCWUyZnNja19jbGVhcl9wcm9nYmFyKGN0eCk7CisJZm9yIChjcCA9IG1zZzsgKmNwOyBjcCsrKSB7CisJCWlmIChjcFswXSA9PSAnQCcpIHsKKwkJCWNwKys7CisJCQlleHBhbmRfYXRfZXhwcmVzc2lvbihmLCBjdHgsICpjcCwgcGN0eCwgJmZpcnN0LAorCQkJCQkgICAgIHJlY3Vyc2UpOworCQl9IGVsc2UgaWYgKGNwWzBdID09ICclJykgeworCQkJY3ArKzsKKwkJCXdpZHRoID0gMDsKKwkJCXdoaWxlIChpc2RpZ2l0KGNwWzBdKSkgeworCQkJCXdpZHRoID0gKHdpZHRoICogMTApICsgY3BbMF0gLSAnMCc7CisJCQkJY3ArKzsKKwkJCX0KKwkJCWlmIChjcFswXSA9PSAnSScpIHsKKwkJCQljcCsrOworCQkJCWV4cGFuZF9pbm9kZV9leHByZXNzaW9uKGYsIGZzLCAqY3AsIHBjdHgpOworCQkJfSBlbHNlIGlmIChjcFswXSA9PSAnRCcpIHsKKwkJCQljcCsrOworCQkJCWV4cGFuZF9kaXJlbnRfZXhwcmVzc2lvbihmLCBmcywgKmNwLCBwY3R4KTsKKwkJCX0gZWxzZSB7CisJCQkJZXhwYW5kX3BlcmNlbnRfZXhwcmVzc2lvbihmLCBmcywgKmNwLCB3aWR0aCwKKwkJCQkJCQkgICZmaXJzdCwgcGN0eCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGk9MDsgY3BbaV07IGkrKykKKwkJCQlpZiAoKGNwW2ldID09ICdAJykgfHwgY3BbaV0gPT0gJyUnKQorCQkJCQlicmVhazsKKwkJCWZwcmludGYoZiwgIiUuKnMiLCBpLCBjcCk7CisJCQljcCArPSBpLTE7CisJCX0KKwkJZmlyc3QgPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svbXRyYWNlLmF3ayBiL2UyZnNwcm9ncy9lMmZzY2svbXRyYWNlLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTk2YjhhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9tdHJhY2UuYXdrCkBAIC0wLDAgKzEsMzcgQEAKKyMhL3Vzci9iaW4vYXdrIC1mCisjCisjICBBd2sgcHJvZ3JhbSB0byBhbmFseXplIG10cmFjZS5jIG91dHB1dC4KKyMKKyQxID09ICIrIgl7IGlmIChhbGxvY2F0ZWRbJDJdICE9ICIiKQorCQkgICAgcHJpbnQgIisiLCAkMiwgIkFsbG9jIiwgTlIsICJkdXBsaWNhdGU6IiwgYWxsb2NhdGVkWyQyXTsKKwkJICBlbHNlCisJCSAgICBhbGxvY2F0ZWRbJDJdID0gJDM7CisJCX0KKyQxID09ICItIgl7IGlmIChhbGxvY2F0ZWRbJDJdICE9ICIiKSB7CisJCSAgICBhbGxvY2F0ZWRbJDJdID0gIiI7CisJCSAgICBpZiAoYWxsb2NhdGVkWyQyXSAhPSAiIikKKwkJCXByaW50ICJERUxFVEUgRkFJTEVEIiwgJDIsIGFsbG9jYXRlZFskMl07CisJCSAgfSBlbHNlCisJCSAgICBwcmludCAiLSIsICQyLCAiRnJlZSIsIE5SLCAid2FzIG5ldmVyIGFsbG9jJ2QiOworCQl9CiskMSA9PSAiPCIJeyBpZiAoYWxsb2NhdGVkWyQyXSAhPSAiIikKKwkJICAgIGFsbG9jYXRlZFskMl0gPSAiIjsKKwkJICBlbHNlCisJCSAgICBwcmludCAiLSIsICQyLCAiUmVhbGxvYyIsIE5SLCAid2FzIG5ldmVyIGFsbG9jJ2QiOworCQl9CiskMSA9PSAiPiIJeyBpZiAoYWxsb2NhdGVkWyQyXSAhPSAiIikKKwkJICAgIHByaW50ICIrIiwgJDIsICJSZWFsbG9jIiwgTlIsICJkdXBsaWNhdGU6IiwgYWxsb2NhdGVkWyQyXTsKKwkJICBlbHNlCisJCSAgICBhbGxvY2F0ZWRbJDJdID0gJDM7CisJCX0KKworIyBJZ25vcmUgIj0gU3RhcnQiCiskMSA9PSAiPSIJeyB9CisjIElnbm9yZSBmYWlsZWQgcmVhbGxvYyBhdHRlbXB0cyBmb3Igbm93CiskMSA9PSAiISIJeyB9CisKKworRU5ECQl7IGZvciAoeCBpbiBhbGxvY2F0ZWQpIAorCQkgICAgaWYgKGFsbG9jYXRlZFt4XSAhPSAiIikKKwkJICAgICAgcHJpbnQgIisiLCB4LCBhbGxvY2F0ZWRbeF07CisJCX0KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svbXRyYWNlLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL210cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGYxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL210cmFjZS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKiBNb3JlIGRlYnVnZ2luZyBob29rcyBmb3IgYG1hbGxvYycuCisgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisJCSBXcml0dGVuIEFwcmlsIDIsIDE5OTEgYnkgSm9obiBHaWxtb3JlIG9mIEN5Z251cyBTdXBwb3J0LgorCQkgQmFzZWQgb24gbWNoZWNrLmMgYnkgTWlrZSBIYWVydGVsLgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCitub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwKK0NhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRoZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKKyAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhhZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICovCisKKyNpZm5kZWYJX01BTExPQ19JTlRFUk5BTAorI2RlZmluZQlfTUFMTE9DX0lOVEVSTkFMCisjaW5jbHVkZSAiLi9tdHJhY2UuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZglfX0dOVV9MSUJSQVJZX18KK2V4dGVybiBjaGFyICpnZXRlbnYgKCk7CisjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisKK3N0YXRpYyBGSUxFICptYWxsc3RyZWFtOworc3RhdGljIGNoYXIgbWFsbGVudltdPSAiTUFMTE9DX1RSQUNFIjsKK3N0YXRpYyBjaGFyIG1hbGxidWZbQlVGU0laXTsJLyogQnVmZmVyIGZvciB0aGUgb3V0cHV0LiAgKi8KKworLyogQWRkcmVzcyB0byBicmVha3BvaW50IG9uIGFjY2Vzc2VzIHRvLi4uICovCitfX3B0cl90IG1hbGx3YXRjaDsKKworLyogT2xkIGhvb2sgdmFsdWVzLiAgKi8KK3N0YXRpYyB2b2lkICgqdHJfb2xkX2ZyZWVfaG9vaykgX19QICgoX19wdHJfdCBwdHIpKTsKK3N0YXRpYyBfX3B0cl90ICgqdHJfb2xkX21hbGxvY19ob29rKSBfX1AgKChzaXplX3Qgc2l6ZSkpOworc3RhdGljIF9fcHRyX3QgKCp0cl9vbGRfcmVhbGxvY19ob29rKSBfX1AgKChfX3B0cl90IHB0ciwgc2l6ZV90IHNpemUpKTsKKworLyoKKyAqIEFkZGVkIGJ5IFRZVCwgMTAvMTAvOTMgLS0tIHNvIHRoYXQgd2UgY2FuIHByaW50CisgKi8KK0ZJTEUgKm1hbGxvY19nZXRfbWFsbHN0cmVhbSgpCit7CisJcmV0dXJuIG1hbGxzdHJlYW07Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJsb2NrIGJlaW5nIGFsbG9jJ2QsIHJlYWxsb2MnZCwgb3IKKyAgIGZyZWVkIGhhcyBhbiBhZGRyZXNzIG1hdGNoaW5nIHRoZSB2YXJpYWJsZSAibWFsbHdhdGNoIi4gIEluIGEgZGVidWdnZXIsCisgICBzZXQgIm1hbGx3YXRjaCIgdG8gdGhlIGFkZHJlc3Mgb2YgaW50ZXJlc3QsIHRoZW4gcHV0IGEgYnJlYWtwb2ludCBvbgorICAgdHJfYnJlYWsuICAqLworCit2b2lkIHRyX2JyZWFrIF9fUCAoKHZvaWQpKTsKK3ZvaWQKK3RyX2JyZWFrICgpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRyX2ZyZWVob29rIF9fUCAoKF9fcHRyX3QpKTsKK3N0YXRpYyB2b2lkCit0cl9mcmVlaG9vayAocHRyKQorICAgICBfX3B0cl90IHB0cjsKK3sKKyAgZnByaW50ZiAobWFsbHN0cmVhbSwgIi0gJXBcbiIsIHB0cik7CS8qIEJlIHN1cmUgdG8gcHJpbnQgaXQgZmlyc3QuICAqLworICBpZiAocHRyID09IG1hbGx3YXRjaCkKKyAgICB0cl9icmVhayAoKTsKKyAgX19mcmVlX2hvb2sgPSB0cl9vbGRfZnJlZV9ob29rOworICBmcmVlIChwdHIpOworICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworfQorCitzdGF0aWMgX19wdHJfdCB0cl9tYWxsb2Nob29rIF9fUCAoKHNpemVfdCkpOworc3RhdGljIF9fcHRyX3QKK3RyX21hbGxvY2hvb2sgKHNpemUpCisgICAgIHNpemVfdCBzaXplOworeworICBfX3B0cl90IGhkcjsKKworICBfX21hbGxvY19ob29rID0gdHJfb2xkX21hbGxvY19ob29rOworICBoZHIgPSAoX19wdHJfdCkgbWFsbG9jIChzaXplKTsKKyAgX19tYWxsb2NfaG9vayA9IHRyX21hbGxvY2hvb2s7CisKKyAgLyogV2UgY291bGQgYmUgcHJpbnRpbmcgYSBOVUxMIGhlcmU7IHRoYXQncyBPSy4gICovCisgIGZwcmludGYgKG1hbGxzdHJlYW0sICIrICVwICVkXG4iLCBoZHIsIHNpemUpOworCisgIGlmIChoZHIgPT0gbWFsbHdhdGNoKQorICAgIHRyX2JyZWFrICgpOworCisgIHJldHVybiBoZHI7Cit9CisKK3N0YXRpYyBfX3B0cl90IHRyX3JlYWxsb2Nob29rIF9fUCAoKF9fcHRyX3QsIHNpemVfdCkpOworc3RhdGljIF9fcHRyX3QKK3RyX3JlYWxsb2Nob29rIChwdHIsIHNpemUpCisgICAgIF9fcHRyX3QgcHRyOworICAgICBzaXplX3Qgc2l6ZTsKK3sKKyAgX19wdHJfdCBoZHI7CisKKyAgaWYgKHB0ciA9PSBtYWxsd2F0Y2gpCisgICAgdHJfYnJlYWsgKCk7CisKKyAgX19mcmVlX2hvb2sgPSB0cl9vbGRfZnJlZV9ob29rOworICBfX21hbGxvY19ob29rID0gdHJfb2xkX21hbGxvY19ob29rOworICBfX3JlYWxsb2NfaG9vayA9IHRyX29sZF9yZWFsbG9jX2hvb2s7CisgIGhkciA9IChfX3B0cl90KSByZWFsbG9jIChwdHIsIHNpemUpOworICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworICBfX21hbGxvY19ob29rID0gdHJfbWFsbG9jaG9vazsKKyAgX19yZWFsbG9jX2hvb2sgPSB0cl9yZWFsbG9jaG9vazsKKyAgaWYgKGhkciA9PSBOVUxMKQorICAgIC8qIEZhaWxlZCByZWFsbG9jLiAgKi8KKyAgICBmcHJpbnRmIChtYWxsc3RyZWFtLCAiISAlcCAlZFxuIiwgcHRyLCBzaXplKTsKKyAgZWxzZQorICAgIGZwcmludGYgKG1hbGxzdHJlYW0sICI8ICVwXG4+ICVwICVkXG4iLCBwdHIsIGhkciwgc2l6ZSk7CisKKyAgaWYgKGhkciA9PSBtYWxsd2F0Y2gpCisgICAgdHJfYnJlYWsgKCk7CisKKyAgcmV0dXJuIGhkcjsKK30KKworLyogV2UgZW5hYmxlIHRyYWNpbmcgaWYgZWl0aGVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNQUxMT0NfVFJBQ0UKKyAgIGlzIHNldCwgb3IgaWYgdGhlIHZhcmlhYmxlIG1hbGx3YXRjaCBoYXMgYmVlbiBwYXRjaGVkIHRvIGFuIGFkZHJlc3MKKyAgIHRoYXQgdGhlIGRlYnVnZ2luZyB1c2VyIHdhbnRzIHVzIHRvIHN0b3Agb24uICBXaGVuIHBhdGNoaW5nIG1hbGx3YXRjaCwKKyAgIGRvbid0IGZvcmdldCB0byBzZXQgYSBicmVha3BvaW50IG9uIHRyX2JyZWFrISAgKi8KKwordm9pZAorbXRyYWNlICgpCit7CisgIGNoYXIgKm1hbGxmaWxlOworCisgIG1hbGxmaWxlID0gZ2V0ZW52IChtYWxsZW52KTsKKyAgaWYgKG1hbGxmaWxlICE9IE5VTEwgfHwgbWFsbHdhdGNoICE9IE5VTEwpCisgICAgeworICAgICAgbWFsbHN0cmVhbSA9IGZvcGVuIChtYWxsZmlsZSAhPSBOVUxMID8gbWFsbGZpbGUgOiAiL2Rldi9udWxsIiwgInciKTsKKyAgICAgIGlmIChtYWxsc3RyZWFtICE9IE5VTEwpCisJeworCSAgLyogQmUgc3VyZSBpdCBkb2Vzbid0IG1hbGxvYyBpdHMgYnVmZmVyISAgKi8KKwkgIHNldGJ1ZiAobWFsbHN0cmVhbSwgbWFsbGJ1Zik7CisJICBmcHJpbnRmIChtYWxsc3RyZWFtLCAiPSBTdGFydFxuIik7CisJICB0cl9vbGRfZnJlZV9ob29rID0gX19mcmVlX2hvb2s7CisJICBfX2ZyZWVfaG9vayA9IHRyX2ZyZWVob29rOworCSAgdHJfb2xkX21hbGxvY19ob29rID0gX19tYWxsb2NfaG9vazsKKwkgIF9fbWFsbG9jX2hvb2sgPSB0cl9tYWxsb2Nob29rOworCSAgdHJfb2xkX3JlYWxsb2NfaG9vayA9IF9fcmVhbGxvY19ob29rOworCSAgX19yZWFsbG9jX2hvb2sgPSB0cl9yZWFsbG9jaG9vazsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9tdHJhY2UuaCBiL2UyZnNwcm9ncy9lMmZzY2svbXRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVkMjBlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svbXRyYWNlLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qIERlY2xhcmF0aW9ucyBmb3IgYG1hbGxvYycgYW5kIGZyaWVuZHMuCisgICBDb3B5cmlnaHQgMTk5MCwgMTk5MSwgMTk5MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwkJICBXcml0dGVuIE1heSAxOTg5IGJ5IE1pa2UgSGFlcnRlbC4KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsCitDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAqLworCisjaWZuZGVmIF9NVFJBQ0VfSAorCisjZGVmaW5lIF9NVFJBQ0VfSAkxCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2NwbHVzcGx1cykgfHwgKGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXykKKyN1bmRlZglfX1AKKyNkZWZpbmUJX19QKGFyZ3MpCWFyZ3MKKyN1bmRlZglfX3B0cl90CisjZGVmaW5lCV9fcHRyX3QJCXZvaWQgKgorI2Vsc2UgLyogTm90IEMrKyBvciBBTlNJIEMuICAqLworI3VuZGVmCV9fUAorI2RlZmluZQlfX1AoYXJncykJKCkKKyN1bmRlZgljb25zdAorI2RlZmluZQljb25zdAorI3VuZGVmCV9fcHRyX3QKKyNkZWZpbmUJX19wdHJfdAkJY2hhciAqCisjZW5kaWYgLyogQysrIG9yIEFOU0kgQy4gICovCisKKyNpZm5kZWYJTlVMTAorI2RlZmluZQlOVUxMCTAKKyNlbmRpZgorCisjaWZkZWYJX19TVERDX18KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjdW5kZWYJc2l6ZV90CisjZGVmaW5lCXNpemVfdAkJdW5zaWduZWQgaW50CisjdW5kZWYJcHRyZGlmZl90CisjZGVmaW5lCXB0cmRpZmZfdAlpbnQKKyNlbmRpZgorCisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgb2YgbWVtb3J5LiAgKi8KK2V4dGVybiBfX3B0cl90IG1hbGxvYyBfX1AgKChzaXplX3QgX19zaXplKSk7CisvKiBSZS1hbGxvY2F0ZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmxvY2sKKyAgIGluIF9fcHRyX3QsIG1ha2luZyB0aGUgbmV3IGJsb2NrIFNJWkUgYnl0ZXMgbG9uZy4gICovCitleHRlcm4gX19wdHJfdCByZWFsbG9jIF9fUCAoKF9fcHRyX3QgX19wdHIsIHNpemVfdCBfX3NpemUpKTsKKy8qIEFsbG9jYXRlIE5NRU1CIGVsZW1lbnRzIG9mIFNJWkUgYnl0ZXMgZWFjaCwgYWxsIGluaXRpYWxpemVkIHRvIDAuICAqLworZXh0ZXJuIF9fcHRyX3QgY2FsbG9jIF9fUCAoKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKSk7CisvKiBGcmVlIGEgYmxvY2sgYWxsb2NhdGVkIGJ5IGBtYWxsb2MnLCBgcmVhbGxvYycgb3IgYGNhbGxvYycuICAqLworZXh0ZXJuIHZvaWQgZnJlZSBfX1AgKChfX3B0cl90IF9fcHRyKSk7CisKKy8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMgYWxsb2NhdGVkIHRvIEFMSUdOTUVOVCBieXRlcy4gICovCitleHRlcm4gX19wdHJfdCBtZW1hbGlnbiBfX1AgKChzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpKTsKKworLyogQWxsb2NhdGUgU0laRSBieXRlcyBvbiBhIHBhZ2UgYm91bmRhcnkuICAqLworZXh0ZXJuIF9fcHRyX3QgdmFsbG9jIF9fUCAoKHNpemVfdCBfX3NpemUpKTsKKworCisjaWZkZWYgX01BTExPQ19JTlRFUk5BTAorCisjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIEhhcm1sZXNzLCBnZXRzIF9fR05VX0xJQlJBUllfXyBkZWZpbmVkLiAgKi8KKworI2lmCWRlZmluZWQoX19HTlVfTElCUkFSWV9fKSB8fCBkZWZpbmVkKFNURENfSEVBREVSUykgfHwgZGVmaW5lZChVU0cpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2lmbmRlZiBtZW1zZXQKKyNkZWZpbmUJbWVtc2V0KHMsIHplcm8sIG4pCWJ6ZXJvICgocyksIChuKSkKKyNlbmRpZgorI2lmbmRlZiBtZW1jcHkKKyNkZWZpbmUJbWVtY3B5KGQsIHMsIG4pCQliY29weSAoKHMpLCAoZCksIChuKSkKKyNlbmRpZgorI2VuZGlmCisKKworI2lmCWRlZmluZWQoX19HTlVfTElCUkFSWV9fKSB8fCBkZWZpbmVkKF9fU1REQ19fKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyNkZWZpbmUJQ0hBUl9CSVQJOAorI2VuZGlmCisKKy8qIFRoZSBhbGxvY2F0b3IgZGl2aWRlcyB0aGUgaGVhcCBpbnRvIGJsb2NrcyBvZiBmaXhlZCBzaXplOyBsYXJnZQorICAgcmVxdWVzdHMgcmVjZWl2ZSBvbmUgb3IgbW9yZSB3aG9sZSBibG9ja3MsIGFuZCBzbWFsbCByZXF1ZXN0cworICAgcmVjZWl2ZSBhIGZyYWdtZW50IG9mIGEgYmxvY2suICBGcmFnbWVudCBzaXplcyBhcmUgcG93ZXJzIG9mIHR3bywKKyAgIGFuZCBhbGwgZnJhZ21lbnRzIG9mIGEgYmxvY2sgYXJlIHRoZSBzYW1lIHNpemUuICBXaGVuIGFsbCB0aGUKKyAgIGZyYWdtZW50cyBpbiBhIGJsb2NrIGhhdmUgYmVlbiBmcmVlZCwgdGhlIGJsb2NrIGl0c2VsZiBpcyBmcmVlZC4gICovCisjZGVmaW5lIElOVF9CSVQJCShDSEFSX0JJVCAqIHNpemVvZihpbnQpKQorI2RlZmluZSBCTE9DS0xPRwkoSU5UX0JJVCA+IDE2ID8gMTIgOiA5KQorI2RlZmluZSBCTE9DS1NJWkUJKDEgPDwgQkxPQ0tMT0cpCisjZGVmaW5lIEJMT0NLSUZZKFNJWkUpCSgoKFNJWkUpICsgQkxPQ0tTSVpFIC0gMSkgLyBCTE9DS1NJWkUpCisKKy8qIERldGVybWluZSB0aGUgYW1vdW50IG9mIG1lbW9yeSBzcGFubmVkIGJ5IHRoZSBpbml0aWFsIGhlYXAgdGFibGUKKyAgIChub3QgYW4gYWJzb2x1dGUgbGltaXQpLiAgKi8KKyNkZWZpbmUgSEVBUAkJKElOVF9CSVQgPiAxNiA/IDQxOTQzMDQgOiA2NTUzNikKKworLyogTnVtYmVyIG9mIGNvbnRpZ3VvdXMgZnJlZSBibG9ja3MgYWxsb3dlZCB0byBidWlsZCB1cCBhdCB0aGUgZW5kIG9mCisgICBtZW1vcnkgYmVmb3JlIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLiAgKi8KKyNkZWZpbmUgRklOQUxfRlJFRV9CTE9DS1MJOAorCisvKiBEYXRhIHN0cnVjdHVyZSBnaXZpbmcgcGVyLWJsb2NrIGluZm9ybWF0aW9uLiAgKi8KK3R5cGVkZWYgdW5pb24KKyAgeworICAgIC8qIEhlYXAgaW5mb3JtYXRpb24gZm9yIGEgYnVzeSBibG9jay4gICovCisgICAgc3RydWN0CisgICAgICB7CisJLyogWmVybyBmb3IgYSBsYXJnZSBibG9jaywgb3IgcG9zaXRpdmUgZ2l2aW5nIHRoZQorCSAgIGxvZ2FyaXRobSB0byB0aGUgYmFzZSB0d28gb2YgdGhlIGZyYWdtZW50IHNpemUuICAqLworCWludCB0eXBlOworCXVuaW9uCisJICB7CisJICAgIHN0cnVjdAorCSAgICAgIHsKKwkJc2l6ZV90IG5mcmVlOwkvKiBGcmVlIGZyYWdtZW50cyBpbiBhIGZyYWdtZW50ZWQgYmxvY2suICAqLworCQlzaXplX3QgZmlyc3Q7CS8qIEZpcnN0IGZyZWUgZnJhZ21lbnQgb2YgdGhlIGJsb2NrLiAgKi8KKwkgICAgICB9IGZyYWc7CisJICAgIC8qIFNpemUgKGluIGJsb2Nrcykgb2YgYSBsYXJnZSBjbHVzdGVyLiAgKi8KKwkgICAgc2l6ZV90IHNpemU7CisJICB9IGluZm87CisgICAgICB9IGJ1c3k7CisgICAgLyogSGVhcCBpbmZvcm1hdGlvbiBmb3IgYSBmcmVlIGJsb2NrCisgICAgICAgKHRoYXQgbWF5IGJlIHRoZSBmaXJzdCBvZiBhIGZyZWUgY2x1c3RlcikuICAqLworICAgIHN0cnVjdAorICAgICAgeworCXNpemVfdCBzaXplOwkJLyogU2l6ZSAoaW4gYmxvY2tzKSBvZiBhIGZyZWUgY2x1c3Rlci4gICovCisJc2l6ZV90IG5leHQ7CQkvKiBJbmRleCBvZiBuZXh0IGZyZWUgY2x1c3Rlci4gICovCisJc2l6ZV90IHByZXY7CQkvKiBJbmRleCBvZiBwcmV2aW91cyBmcmVlIGNsdXN0ZXIuICAqLworICAgICAgfSBmcmVlOworICB9IG1hbGxvY19pbmZvOworCisvKiBQb2ludGVyIHRvIGZpcnN0IGJsb2NrIG9mIHRoZSBoZWFwLiAgKi8KK2V4dGVybiBjaGFyICpfaGVhcGJhc2U7CisKKy8qIFRhYmxlIGluZGV4ZWQgYnkgYmxvY2sgbnVtYmVyIGdpdmluZyBwZXItYmxvY2sgaW5mb3JtYXRpb24uICAqLworZXh0ZXJuIG1hbGxvY19pbmZvICpfaGVhcGluZm87CisKKy8qIEFkZHJlc3MgdG8gYmxvY2sgbnVtYmVyIGFuZCB2aWNlIHZlcnNhLiAgKi8KKyNkZWZpbmUgQkxPQ0soQSkJKCgoY2hhciAqKSAoQSkgLSBfaGVhcGJhc2UpIC8gQkxPQ0tTSVpFICsgMSkKKyNkZWZpbmUgQUREUkVTUyhCKQkoKF9fcHRyX3QpICgoKEIpIC0gMSkgKiBCTE9DS1NJWkUgKyBfaGVhcGJhc2UpKQorCisvKiBDdXJyZW50IHNlYXJjaCBpbmRleCBmb3IgdGhlIGhlYXAgdGFibGUuICAqLworZXh0ZXJuIHNpemVfdCBfaGVhcGluZGV4OworCisvKiBMaW1pdCBvZiB2YWxpZCBpbmZvIHRhYmxlIGluZGljZXMuICAqLworZXh0ZXJuIHNpemVfdCBfaGVhcGxpbWl0OworCisvKiBEb3VibHkgbGlua2VkIGxpc3RzIG9mIGZyZWUgZnJhZ21lbnRzLiAgKi8KK3N0cnVjdCBsaXN0CisgIHsKKyAgICBzdHJ1Y3QgbGlzdCAqbmV4dDsKKyAgICBzdHJ1Y3QgbGlzdCAqcHJldjsKKyAgfTsKKworLyogRnJlZSBsaXN0IGhlYWRlcnMgZm9yIGVhY2ggZnJhZ21lbnQgc2l6ZS4gICovCitleHRlcm4gc3RydWN0IGxpc3QgX2ZyYWdoZWFkW107CisKKy8qIExpc3Qgb2YgYmxvY2tzIGFsbG9jYXRlZCB3aXRoIGBtZW1hbGlnbicgKG9yIGB2YWxsb2MnKS4gICovCitzdHJ1Y3QgYWxpZ25saXN0CisgIHsKKyAgICBzdHJ1Y3QgYWxpZ25saXN0ICpuZXh0OworICAgIF9fcHRyX3QgYWxpZ25lZDsJCS8qIFRoZSBhZGRyZXNzIHRoYXQgbWVtYWxpZ25lZCByZXR1cm5lZC4gICovCisgICAgX19wdHJfdCBleGFjdDsJCS8qIFRoZSBhZGRyZXNzIHRoYXQgbWFsbG9jIHJldHVybmVkLiAgKi8KKyAgfTsKK2V4dGVybiBzdHJ1Y3QgYWxpZ25saXN0ICpfYWxpZ25lZF9ibG9ja3M7CisKKy8qIEluc3RydW1lbnRhdGlvbi4gICovCitleHRlcm4gc2l6ZV90IF9jaHVua3NfdXNlZDsKK2V4dGVybiBzaXplX3QgX2J5dGVzX3VzZWQ7CitleHRlcm4gc2l6ZV90IF9jaHVua3NfZnJlZTsKK2V4dGVybiBzaXplX3QgX2J5dGVzX2ZyZWU7CisKKy8qIEludGVybmFsIHZlcnNpb24gb2YgYGZyZWUnIHVzZWQgaW4gYG1vcmVjb3JlJyAobWFsbG9jLmMpLiAqLworZXh0ZXJuIHZvaWQgX2ZyZWVfaW50ZXJuYWwgX19QICgoX19wdHJfdCBfX3B0cikpOworCisjZW5kaWYgLyogX01BTExPQ19JTlRFUk5BTC4gICovCisKKy8qIFVuZGVybHlpbmcgYWxsb2NhdGlvbiBmdW5jdGlvbjsgc3VjY2Vzc2l2ZSBjYWxscyBzaG91bGQKKyAgIHJldHVybiBjb250aWd1b3VzIHBpZWNlcyBvZiBtZW1vcnkuICAqLworZXh0ZXJuIF9fcHRyX3QgKCpfX21vcmVjb3JlKSBfX1AgKChwdHJkaWZmX3QgX19zaXplKSk7CisKKy8qIERlZmF1bHQgdmFsdWUgb2YgYF9fbW9yZWNvcmUnLiAgKi8KK2V4dGVybiBfX3B0cl90IF9fZGVmYXVsdF9tb3JlY29yZSBfX1AgKChwdHJkaWZmX3QgX19zaXplKSk7CisKKy8qIE5vbnplcm8gaWYgYG1hbGxvYycgaGFzIGJlZW4gY2FsbGVkIGFuZCBkb25lIGl0cyBpbml0aWFsaXphdGlvbi4gICovCitleHRlcm4gaW50IF9fbWFsbG9jX2luaXRpYWxpemVkOworCisvKiBIb29rcyBmb3IgZGVidWdnaW5nIHZlcnNpb25zLiAgKi8KK2V4dGVybiB2b2lkICgqX19mcmVlX2hvb2spIF9fUCAoKF9fcHRyX3QgX19wdHIpKTsKK2V4dGVybiBfX3B0cl90ICgqX19tYWxsb2NfaG9vaykgX19QICgoc2l6ZV90IF9fc2l6ZSkpOworZXh0ZXJuIF9fcHRyX3QgKCpfX3JlYWxsb2NfaG9vaykgX19QICgoX19wdHJfdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkpOworCisvKiBBY3RpdmF0ZSBhIHN0YW5kYXJkIGNvbGxlY3Rpb24gb2YgZGVidWdnaW5nIGhvb2tzLiAgKi8KK2V4dGVybiB2b2lkIG1jaGVjayBfX1AgKCh2b2lkICgqX19mdW5jKSBfX1AgKCh2b2lkKSkpKTsKKworLyogQWN0aXZhdGUgYSBzdGFuZGFyZCBjb2xsZWN0aW9uIG9mIHRyYWNpbmcgaG9va3MuICAqLworZXh0ZXJuIHZvaWQgbXRyYWNlIF9fUCAoKHZvaWQpKTsKKworLyogU3RhdGlzdGljcyBhdmFpbGFibGUgdG8gdGhlIHVzZXIuICAqLworc3RydWN0IG1zdGF0cworICB7CisgICAgc2l6ZV90IGJ5dGVzX3RvdGFsOwkJLyogVG90YWwgc2l6ZSBvZiB0aGUgaGVhcC4gKi8KKyAgICBzaXplX3QgY2h1bmtzX3VzZWQ7CQkvKiBDaHVua3MgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyLiAqLworICAgIHNpemVfdCBieXRlc191c2VkOwkJLyogQnl0ZSB0b3RhbCBvZiB1c2VyLWFsbG9jYXRlZCBjaHVua3MuICovCisgICAgc2l6ZV90IGNodW5rc19mcmVlOwkJLyogQ2h1bmtzIGluIHRoZSBmcmVlIGxpc3QuICovCisgICAgc2l6ZV90IGJ5dGVzX2ZyZWU7CQkvKiBCeXRlIHRvdGFsIG9mIGNodW5rcyBpbiB0aGUgZnJlZSBsaXN0LiAqLworICB9OworCisvKiBQaWNrIHVwIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICovCitleHRlcm4gc3RydWN0IG1zdGF0cyBtc3RhdHMgX19QICgodm9pZCkpOworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogbXRyYWNlLmggICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MxLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwNGI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcGFzczEuYwpAQCAtMCwwICsxLDI5MTcgQEAKKy8qCisgKiBwYXNzMS5jIC0tIHBhc3MgIzEgb2YgZTJmc2NrOiBzZXF1ZW50aWFsIHNjYW4gb2YgdGhlIGlub2RlIHRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBQYXNzIDEgb2YgZTJmc2NrIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBpbm9kZXMgaW4gdGhlIGZpbGVzeXN0ZW1zLAorICogYW5kIGFwcGxpZXMgdGhlIGZvbGxvd2luZyB0ZXN0cyB0byBlYWNoIGlub2RlOgorICoKKyAqIAktIFRoZSBtb2RlIGZpZWxkIG9mIHRoZSBpbm9kZSBtdXN0IGJlIGxlZ2FsLgorICogCS0gVGhlIHNpemUgYW5kIGJsb2NrIGNvdW50IGZpZWxkcyBvZiB0aGUgaW5vZGUgYXJlIGNvcnJlY3QuCisgKiAJLSBBIGRhdGEgYmxvY2sgbXVzdCBub3QgYmUgdXNlZCBieSBhbm90aGVyIGlub2RlCisgKgorICogUGFzcyAxIGFsc28gZ2F0aGVycyB0aGUgY29sbGVjdHMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqCisgKiAJLSBBIGJpdG1hcCBvZiB3aGljaCBpbm9kZXMgYXJlIGluIHVzZS4JCShpbm9kZV91c2VkX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBhcmUgZGlyZWN0b3JpZXMuCShpbm9kZV9kaXJfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSByZWd1bGFyIGZpbGVzLgkoaW5vZGVfcmVnX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBoYXZlIGJhZCBmaWVsZHMuCShpbm9kZV9iYWRfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSBpbiBiYWQgYmxvY2tzLgkoaW5vZGVfYmJfbWFwKQorICogCS0gQSBiaXRtYXAgb2Ygd2hpY2ggaW5vZGVzIGFyZSBpbWFnaWMgaW5vZGVzLgkoaW5vZGVfaW1hZ2ljX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGJsb2NrcyBhcmUgaW4gdXNlLgkJKGJsb2NrX2ZvdW5kX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGJsb2NrcyBhcmUgaW4gdXNlIGJ5IHR3byBpbm9kZXMJKGJsb2NrX2R1cF9tYXApCisgKiAJLSBUaGUgZGF0YSBibG9ja3Mgb2YgdGhlIGRpcmVjdG9yeSBpbm9kZXMuCShkaXJfbWFwKQorICoKKyAqIFBhc3MgMSBpcyBkZXNpZ25lZCB0byBzdGFzaCBhd2F5IGVub3VnaCBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZQorICogb3RoZXIgcGFzc2VzIHNob3VsZCBub3QgbmVlZCB0byByZWFkIGluIHRoZSBpbm9kZSBpbmZvcm1hdGlvbgorICogZHVyaW5nIHRoZSBub3JtYWwgY291cnNlIG9mIGEgZmlsZXN5c3RlbSBjaGVjay4gIChBbHRob2doIGlmIGFuCisgKiBpbmNvbnNpc3RlbmN5IGlzIGRldGVjdGVkLCBvdGhlciBwYXNzZXMgbWF5IG5lZWQgdG8gcmVhZCBpbiBhbgorICogaW5vZGUgdG8gZml4IGl0LikKKyAqCisgKiBOb3RlIHRoYXQgcGFzcyAxQiB3aWxsIGJlIGludm9rZWQgaWYgdGhlcmUgYXJlIGFueSBkdXBsaWNhdGUgYmxvY2tzCisgKiBmb3VuZC4KKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFIDEgLyogZ2V0IHN0cm5sZW4oKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCisjZGVmaW5lIF9JTkxJTkVfCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QJKmJsb2NrbnIsCisJCQkgZTJfYmxrY250X3QgYmxvY2tjbnQsIGJsazY0X3QgcmVmX2JsaywKKwkJCSBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyBpbnQgcHJvY2Vzc19iYWRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxrLAorCQkJICAgICBpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2NrcyhlMmZzY2tfdCBjdHgsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgsCisJCQkgY2hhciAqYmxvY2tfYnVmKTsKK3N0YXRpYyB2b2lkIG1hcmtfdGFibGVfYmxvY2tzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBhbGxvY19iYl9tYXAoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIGFsbG9jX2ltYWdpY19tYXAoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIG1hcmtfaW5vZGVfYmFkKGUyZnNja190IGN0eCwgaW5vX3QgaW5vKTsKK3N0YXRpYyB2b2lkIGFkZF9lbmNyeXB0ZWRfZGlyKGUyZnNja190IGN0eCwgaW5vX3QgaW5vKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mc19iYWRfYmxvY2tzKGUyZnNja190IGN0eCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2lub2RlcyhlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1Zik7CitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIHByb2Nlc3NfaW5vZGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworc3RhdGljIGVycmNvZGVfdCBzY2FuX2NhbGxiYWNrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkJCQkgIGRncnBfdCBncm91cCwgdm9pZCAqIHByaXZfZGF0YSk7CitzdGF0aWMgdm9pZCBhZGp1c3RfZXh0YXR0cl9yZWZjb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYWRqdXN0X3NpZ24pOworLyogc3RhdGljIGNoYXIgKmRlc2NyaWJlX2lsbGVnYWxfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2spOyAqLworCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWV4dDJfaW5vX3QJaW5vOworCXVuc2lnbmVkCWlzX2RpcjoxLCBpc19yZWc6MSwgY2xlYXI6MSwgc3VwcHJlc3M6MSwKKwkJCQlmcmFnbWVudGVkOjEsIGNvbXByZXNzZWQ6MSwgYmJjaGVjazoxOworCWJsazY0X3QJCW51bV9ibG9ja3M7CisJYmxrNjRfdAkJbWF4X2Jsb2NrczsKKwllMl9ibGtjbnRfdAlsYXN0X2Jsb2NrOworCWUyX2Jsa2NudF90CWxhc3RfaW5pdF9sYmxvY2s7CisJZTJfYmxrY250X3QJbGFzdF9kYl9ibG9jazsKKwlpbnQJCW51bV9pbGxlZ2FsX2Jsb2NrczsKKwlibGs2NF90CQlwcmV2aW91c19ibG9jazsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGU7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eDsKKwlleHQyZnNfYmxvY2tfYml0bWFwIGZzX21ldGFfYmxvY2tzOworCWUyZnNja190CWN0eDsKK307CisKK3N0cnVjdCBwcm9jZXNzX2lub2RlX2Jsb2NrIHsKKwlleHQyX2lub190IGlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKK307CisKK3N0cnVjdCBzY2FuX2NhbGxiYWNrX3N0cnVjdCB7CisJZTJmc2NrX3QJY3R4OworCWNoYXIJCSpibG9ja19idWY7Cit9OworCisvKgorICogRm9yIHRoZSBpbm9kZXMgdG8gcHJvY2VzcyBsaXN0LgorICovCitzdGF0aWMgc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2sgKmlub2Rlc190b19wcm9jZXNzOworc3RhdGljIGludCBwcm9jZXNzX2lub2RlX2NvdW50OworCitzdGF0aWMgX191NjQgZXh0Ml9tYXhfc2l6ZXNbRVhUMl9NQVhfQkxPQ0tfTE9HX1NJWkUgLQorCQkJICAgIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFICsgMV07CisKKy8qCisgKiBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHBhc3MxIGluIHByZXBhcmF0aW9uIGZvciByZXN0YXJ0aW5nCisgKiB0aGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHVud2luZF9wYXNzMShleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZXNfdG9fcHJvY2Vzcyk7CisJaW5vZGVzX3RvX3Byb2Nlc3MgPSAwOworfQorCisvKgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIGEgZGV2aWNlIGlub2RlIGlzIHJlYWwuICBSZXR1cm5zIDEgaWYgdGhlIGRldmljZQorICogY2hlY2tzIG91dCwgMCBpZiBub3QuCisgKgorICogTm90ZTogdGhpcyByb3V0aW5lIGlzIG5vdyBhbHNvIHVzZWQgdG8gY2hlY2sgRklGTydzIGFuZCBTb2NrZXRzLAorICogc2luY2UgdGhleSBoYXZlIHRoZSBzYW1lIHJlcXVpcmVtZW50OyB0aGUgaV9ibG9jayBmaWVsZHMgc2hvdWxkIGJlCisgKiB6ZXJvLgorICovCitpbnQgZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlpbnQJaTsKKworCS8qCisJICogSWYgdGhlIGluZGV4IGZsYWcgaXMgc2V0LCB0aGVuIHRoaXMgaXMgYSBib2d1cworCSAqIGRldmljZS9maWZvL3NvY2tldAorCSAqLworCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDJfSU5ERVhfRkwpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGUgdGVzdCBiZWxvdyBhbGwgdGhlIHRpbWUsIGJ1dAorCSAqIGJlY2F1c2UgdGhlIGtlcm5lbCBkb2Vzbid0IGZvcmNpYmx5IGNsZWFyIHRoZSBkZXZpY2UKKwkgKiBpbm9kZSdzIGFkZGl0aW9uYWwgaV9ibG9jayBmaWVsZHMsIHRoZXJlIGFyZSBzb21lIHJhcmUKKwkgKiBvY2Nhc2lvbnMgd2hlbiBhIGxlZ2l0aW1hdGUgZGV2aWNlIGlub2RlIHdpbGwgaGF2ZSBub24temVybworCSAqIGFkZGl0aW9uYWwgaV9ibG9jayBmaWVsZHMuICBTbyBmb3Igbm93LCB3ZSBvbmx5IGNvbXBsYWluCisJICogd2hlbiB0aGUgaW1tdXRhYmxlIGZsYWcgaXMgc2V0LCB3aGljaCBzaG91bGQgbmV2ZXIgaGFwcGVuCisJICogZm9yIGRldmljZXMuICAoQW5kIHRoYXQncyB3aGVuIHRoZSBwcm9ibGVtIGlzIGNhdXNlZCwgc2luY2UKKwkgKiB5b3UgY2FuJ3Qgc2V0IG9yIGNsZWFyIGltbXV0YWJsZSBmbGFncyBmb3IgZGV2aWNlcy4pICBPbmNlCisJICogdGhlIGtlcm5lbCBoYXMgYmVlbiBmaXhlZCB3ZSBjYW4gY2hhbmdlIHRoaXMuLi4KKwkgKi8KKwlpZiAoaW5vZGUtPmlfZmxhZ3MgJiAoRVhUMl9JTU1VVEFCTEVfRkwgfCBFWFQyX0FQUEVORF9GTCkpIHsKKwkJZm9yIChpPTQ7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCQlpZiAoaW5vZGUtPmlfYmxvY2tbaV0pCisJCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIGEgc3ltbGluayBpbm9kZSBpcyByZWFsLiAgUmV0dXJucyAxIGlmIHRoZSBzeW1saW5rCisgKiBjaGVja3Mgb3V0LCAwIGlmIG5vdC4KKyAqLworaW50IGUyZnNja19wYXNzMV9jaGVja19zeW1saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGNoYXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpOworCWJsazY0X3QJYmxvY2tzOworCWV4dDJfZXh0ZW50X2hhbmRsZV90CWhhbmRsZTsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbwlpbmZvOworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKworCWlmICgoaW5vZGUtPmlfc2l6ZV9oaWdoIHx8IGlub2RlLT5pX3NpemUgPT0gMCkgfHwKKwkgICAgKGlub2RlLT5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkpCisJCXJldHVybiAwOworCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSB7CisJCWlmIChpbm9kZS0+aV9zaXplID4gZnMtPmJsb2Nrc2l6ZSkKKwkJCXJldHVybiAwOworCQlpZiAoZXh0MmZzX2V4dGVudF9vcGVuMihmcywgaW5vLCBpbm9kZSwgJmhhbmRsZSkpCisJCQlyZXR1cm4gMDsKKwkJaSA9IDA7CisJCWlmIChleHQyZnNfZXh0ZW50X2dldF9pbmZvKGhhbmRsZSwgJmluZm8pIHx8CisJCSAgICAoaW5mby5udW1fZW50cmllcyAhPSAxKSB8fAorCQkgICAgKGluZm8ubWF4X2RlcHRoICE9IDApKQorCQkJZ290byBleGl0X2V4dGVudDsKKwkJaWYgKGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfUk9PVCwgJmV4dGVudCkgfHwKKwkJICAgIChleHRlbnQuZV9sYmxrICE9IDApIHx8CisJCSAgICAoZXh0ZW50LmVfbGVuICE9IDEpIHx8CisJCSAgICAoZXh0ZW50LmVfcGJsayA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fAorCQkgICAgKGV4dGVudC5lX3BibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkKKwkJCWdvdG8gZXhpdF9leHRlbnQ7CisJCWkgPSAxOworCWV4aXRfZXh0ZW50OgorCQlleHQyZnNfZXh0ZW50X2ZyZWUoaGFuZGxlKTsKKwkJcmV0dXJuIGk7CisJfQorCisJYmxvY2tzID0gZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzMihmcywgaW5vZGUpOworCWlmIChibG9ja3MpIHsKKwkJaWYgKChpbm9kZS0+aV9zaXplID49IGZzLT5ibG9ja3NpemUpIHx8CisJCSAgICAoYmxvY2tzICE9IGZzLT5ibG9ja3NpemUgPj4gOSkgfHwKKwkJICAgIChpbm9kZS0+aV9ibG9ja1swXSA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fAorCQkgICAgKGlub2RlLT5pX2Jsb2NrWzBdID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpCisJCQlyZXR1cm4gMDsKKworCQlmb3IgKGkgPSAxOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQkJaWYgKGlub2RlLT5pX2Jsb2NrW2ldKQorCQkJCXJldHVybiAwOworCisJCWlmIChpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBpbm9kZS0+aV9ibG9ja1swXSwgMSwgYnVmKSkKKwkJCXJldHVybiAwOworCisJCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRU5DUllQVF9GTCkgeworCQkJbGVuID0gZXh0MmZzX2xlMzJfdG9fY3B1KCooKF9fdTMyICopYnVmKSkgKyA0OworCQl9IGVsc2UgeworCQkJbGVuID0gc3RybmxlbihidWYsIGZzLT5ibG9ja3NpemUpOworCQl9CisJCWlmIChsZW4gPT0gZnMtPmJsb2Nrc2l6ZSkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlmIChpbm9kZS0+aV9zaXplID49IHNpemVvZihpbm9kZS0+aV9ibG9jaykpCisJCQlyZXR1cm4gMDsKKworCQlsZW4gPSBzdHJubGVuKChjaGFyICopaW5vZGUtPmlfYmxvY2ssIHNpemVvZihpbm9kZS0+aV9ibG9jaykpOworCQlpZiAobGVuID09IHNpemVvZihpbm9kZS0+aV9ibG9jaykpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxlbiAhPSBpbm9kZS0+aV9zaXplKQorCQlpZiAoKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FTkNSWVBUX0ZMKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJZiB0aGUgaW1tdXRhYmxlIChvciBhcHBlbmQtb25seSkgZmxhZyBpcyBzZXQgb24gdGhlIGlub2RlLCBvZmZlcgorICogdG8gY2xlYXIgaXQuCisgKi8KKyNkZWZpbmUgQkFEX1NQRUNJQUxfRkxBR1MgKEVYVDJfSU1NVVRBQkxFX0ZMIHwgRVhUMl9BUFBFTkRfRkwpCitzdGF0aWMgdm9pZCBjaGVja19pbW11dGFibGUoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWlmICghKHBjdHgtPmlub2RlLT5pX2ZsYWdzICYgQkFEX1NQRUNJQUxfRkxBR1MpKQorCQlyZXR1cm47CisKKwlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9TRVRfSU1NVVRBQkxFLCBwY3R4KSkKKwkJcmV0dXJuOworCisJcGN0eC0+aW5vZGUtPmlfZmxhZ3MgJj0gfkJBRF9TUEVDSUFMX0ZMQUdTOworCWUyZnNja193cml0ZV9pbm9kZShjdHgsIHBjdHgtPmlubywgcGN0eC0+aW5vZGUsICJwYXNzMSIpOworfQorCisvKgorICogSWYgZGV2aWNlLCBmaWZvIG9yIHNvY2tldCwgY2hlY2sgc2l6ZSBpcyB6ZXJvIC0tIGlmIG5vdCBvZmZlciB0bworICogY2xlYXIgaXQKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfc2l6ZShlMmZzY2tfdCBjdHgsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlID0gcGN0eC0+aW5vZGU7CisKKwlpZiAoRVhUMl9JX1NJWkUoaW5vZGUpID09IDApCisJCXJldHVybjsKKworCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8xX1NFVF9OT05aU0laRSwgcGN0eCkpCisJCXJldHVybjsKKworCWlub2RlLT5pX3NpemUgPSAwOworCWlub2RlLT5pX3NpemVfaGlnaCA9IDA7CisJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgcGN0eC0+aW5vLCBwY3R4LT5pbm9kZSwgInBhc3MxIik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2VhX2luX2lub2RlKGUyZnNja190IGN0eCwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqaW5vZGU7CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmVudHJ5OworCWNoYXIgKnN0YXJ0OworCXVuc2lnbmVkIGludCBzdG9yYWdlX3NpemUsIHJlbWFpbjsKKwlwcm9ibGVtX3QgcHJvYmxlbSA9IDA7CisKKwlpbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBwY3R4LT5pbm9kZTsKKwlzdG9yYWdlX3NpemUgPSBFWFQyX0lOT0RFX1NJWkUoY3R4LT5mcy0+c3VwZXIpIC0gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIC0KKwkJaW5vZGUtPmlfZXh0cmFfaXNpemU7CisJc3RhcnQgPSAoKGNoYXIgKikgaW5vZGUpICsgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFICsKKwkJaW5vZGUtPmlfZXh0cmFfaXNpemUgKyBzaXplb2YoX191MzIpOworCWVudHJ5ID0gKHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICopIHN0YXJ0OworCisJLyogc2NhbiBhbGwgZW50cnkncyBoZWFkZXJzIGZpcnN0ICovCisKKwkvKiB0YWtlIGZpbmlzaCBlbnRyeSAwVUwgaW50byBhY2NvdW50ICovCisJcmVtYWluID0gc3RvcmFnZV9zaXplIC0gc2l6ZW9mKF9fdTMyKTsKKworCXdoaWxlICghRVhUMl9FWFRfSVNfTEFTVF9FTlRSWShlbnRyeSkpIHsKKwkJX191MzIgaGFzaDsKKworCQkvKiBoZWFkZXIgZWF0cyB0aGlzIHNwYWNlICovCisJCXJlbWFpbiAtPSBzaXplb2Yoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkpOworCisJCS8qIGlzIGF0dHJpYnV0ZSBuYW1lIHZhbGlkPyAqLworCQlpZiAoRVhUMl9FWFRfQVRUUl9TSVpFKGVudHJ5LT5lX25hbWVfbGVuKSA+IHJlbWFpbikgeworCQkJcGN0eC0+bnVtID0gZW50cnktPmVfbmFtZV9sZW47CisJCQlwcm9ibGVtID0gUFJfMV9BVFRSX05BTUVfTEVOOworCQkJZ290byBmaXg7CisJCX0KKworCQkvKiBhdHRyaWJ1dGUgbGVuIGVhdHMgdGhpcyBzcGFjZSAqLworCQlyZW1haW4gLT0gRVhUMl9FWFRfQVRUUl9TSVpFKGVudHJ5LT5lX25hbWVfbGVuKTsKKworCQkvKiBjaGVjayB2YWx1ZSBzaXplICovCisJCWlmIChlbnRyeS0+ZV92YWx1ZV9zaXplID4gcmVtYWluKSB7CisJCQlwY3R4LT5udW0gPSBlbnRyeS0+ZV92YWx1ZV9zaXplOworCQkJcHJvYmxlbSA9IFBSXzFfQVRUUl9WQUxVRV9TSVpFOworCQkJZ290byBmaXg7CisJCX0KKworCQkvKiBlX3ZhbHVlX2Jsb2NrIG11c3QgYmUgMCBpbiBpbm9kZSdzIGVhICovCisJCWlmIChlbnRyeS0+ZV92YWx1ZV9ibG9jayAhPSAwKSB7CisJCQlwY3R4LT5udW0gPSBlbnRyeS0+ZV92YWx1ZV9ibG9jazsKKwkJCXByb2JsZW0gPSBQUl8xX0FUVFJfVkFMVUVfQkxPQ0s7CisJCQlnb3RvIGZpeDsKKwkJfQorCisJCWhhc2ggPSBleHQyZnNfZXh0X2F0dHJfaGFzaF9lbnRyeShlbnRyeSwKKwkJCQkJCSAgc3RhcnQgKyBlbnRyeS0+ZV92YWx1ZV9vZmZzKTsKKworCQkvKiBlX2hhc2ggbWF5IGJlIDAgaW4gb2xkZXIgaW5vZGUncyBlYSAqLworCQlpZiAoZW50cnktPmVfaGFzaCAhPSAwICYmIGVudHJ5LT5lX2hhc2ggIT0gaGFzaCkgeworCQkJcGN0eC0+bnVtID0gZW50cnktPmVfaGFzaDsKKwkJCXByb2JsZW0gPSBQUl8xX0FUVFJfSEFTSDsKKwkJCWdvdG8gZml4OworCQl9CisKKwkJcmVtYWluIC09IGVudHJ5LT5lX3ZhbHVlX3NpemU7CisKKwkJZW50cnkgPSBFWFQyX0VYVF9BVFRSX05FWFQoZW50cnkpOworCX0KK2ZpeDoKKwkvKgorCSAqIGl0IHNlZW1zIGxpa2UgYSBjb3JydXB0aW9uLiBpdCdzIHZlcnkgdW5saWtlbHkgd2UgY291bGQgcmVwYWlyCisJICogRUEocykgaW4gYXV0b21hdGljIGZhc2hpb24gLWJ6enoKKwkgKi8KKwlpZiAocHJvYmxlbSA9PSAwIHx8ICFmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKQorCQlyZXR1cm47CisKKwkvKiBzaW1wbHkgcmVtb3ZlIGFsbCBwb3NzaWJsZSBFQShzKSAqLworCSooKF9fdTMyICopc3RhcnQpID0gMFVMOworCWUyZnNja193cml0ZV9pbm9kZV9mdWxsKGN0eCwgcGN0eC0+aW5vLCBwY3R4LT5pbm9kZSwKKwkJCQlFWFQyX0lOT0RFX1NJWkUoc2IpLCAicGFzczEiKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfaW5vZGVfZXh0cmFfc3BhY2UoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCXN0cnVjdCBleHQyX2lub2RlX2xhcmdlICppbm9kZTsKKwlfX3UzMiAqZWFtYWdpYzsKKwlpbnQgbWluLCBtYXg7CisKKwlpbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBwY3R4LT5pbm9kZTsKKwlpZiAoRVhUMl9JTk9ERV9TSVpFKHNiKSA9PSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKKwkJLyogdGhpcyBpc24ndCBsYXJnZSBpbm9kZS4gc28sIG5vdGhpbmcgdG8gY2hlY2sgKi8KKwkJcmV0dXJuOworCX0KKworI2lmIDAKKwlwcmludGYoImlub2RlICMldSwgaV9leHRyYV9zaXplICVkXG4iLCBwY3R4LT5pbm8sCisJCQlpbm9kZS0+aV9leHRyYV9pc2l6ZSk7CisjZW5kaWYKKwkvKiBpX2V4dHJhX2lzaXplIG11c3QgY292ZXIgaV9leHRyYV9pc2l6ZSArIGlfY2hlY2tzdW1faGkgYXQgbGVhc3QgKi8KKwltaW4gPSBzaXplb2YoaW5vZGUtPmlfZXh0cmFfaXNpemUpICsgc2l6ZW9mKGlub2RlLT5pX2NoZWNrc3VtX2hpKTsKKwltYXggPSBFWFQyX0lOT0RFX1NJWkUoc2IpIC0gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCS8qCisJICogRm9yIG5vdyB3ZSB3aWxsIGFsbG93IGlfZXh0cmFfaXNpemUgdG8gYmUgMCwgYnV0IHJlYWxseQorCSAqIGltcGxlbWVudGF0aW9ucyBzaG91bGQgbmV2ZXIgYWxsb3cgaV9leHRyYV9pc2l6ZSB0byBiZSAwCisJICovCisJaWYgKGlub2RlLT5pX2V4dHJhX2lzaXplICYmCisJICAgIChpbm9kZS0+aV9leHRyYV9pc2l6ZSA8IG1pbiB8fCBpbm9kZS0+aV9leHRyYV9pc2l6ZSA+IG1heCkpIHsKKwkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzFfRVhUUkFfSVNJWkUsIHBjdHgpKQorCQkJcmV0dXJuOworCQlpbm9kZS0+aV9leHRyYV9pc2l6ZSA9IG1pbjsKKwkJZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoY3R4LCBwY3R4LT5pbm8sIHBjdHgtPmlub2RlLAorCQkJCQlFWFQyX0lOT0RFX1NJWkUoc2IpLCAicGFzczEiKTsKKwkJcmV0dXJuOworCX0KKworCWVhbWFnaWMgPSAoX191MzIgKikgKCgoY2hhciAqKSBpbm9kZSkgKyBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgKworCQkJaW5vZGUtPmlfZXh0cmFfaXNpemUpOworCWlmICgqZWFtYWdpYyA9PSBFWFQyX0VYVF9BVFRSX01BR0lDKSB7CisJCS8qIGl0IHNlZW1zIGlub2RlIGhhcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUocykgaW4gYm9keSAqLworCQljaGVja19lYV9pbl9pbm9kZShjdHgsIHBjdHgpOworCX0KK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5vZGUgbWlnaHQgcmVhbGx5IGJlIGEgZGlyZWN0b3J5LCBkZXNwaXRlIGlfbW9kZQorICoKKyAqIFRoaXMgaXMgYSBsb3Qgb2YgY29tcGxleGl0eSBmb3Igc29tZXRoaW5nIGZvciB3aGljaCBJJ20gbm90IHJlYWxseQorICogY29udmluY2VkIGhhcHBlbnMgZnJlcXVlbnRseSBpbiB0aGUgd2lsZC4gIElmIGZvciBhbnkgcmVhc29uIHRoaXMKKyAqIGNhdXNlcyBhbnkgcHJvYmxlbXMsIHRha2UgdGhpcyBjb2RlIG91dC4KKyAqIFt0eXRzbzoyMDA3MDMzMS4wODI3RURUXQorICovCitzdGF0aWMgdm9pZCBjaGVja19pc19yZWFsbHlfZGlyKGUyZnNja190IGN0eCwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlID0gcGN0eC0+aW5vZGU7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5IAkqZGlyZW50OworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsazY0X3QJCQlibGs7CisJdW5zaWduZWQgaW50CQlpLCByZWNfbGVuLCBub3RfZGV2aWNlID0gMDsKKwlpbnQJCQlleHRlbnRfZnM7CisKKwkvKgorCSAqIElmIHRoZSBtb2RlIGxvb2tzIE9LLCB3ZSBiZWxpZXZlIGl0LiAgSWYgdGhlIGZpcnN0IGJsb2NrIGluCisJICogdGhlIGlfYmxvY2sgYXJyYXkgaXMgMCwgdGhpcyBjYW5ub3QgYmUgYSBkaXJlY3RvcnkuIElmIHRoZQorCSAqIGlub2RlIGlzIGV4dGVudC1tYXBwZWQsIGl0IGlzIHN0aWxsIHRoZSBjYXNlIHRoYXQgdGhlIGxhdHRlcgorCSAqIGNhbm5vdCBiZSAwIC0gdGhlIG1hZ2ljIG51bWJlciBpbiB0aGUgZXh0ZW50IGhlYWRlciB3b3VsZCBtYWtlCisJICogaXQgbm9uemVyby4KKwkgKi8KKwlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCBMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8CisJICAgIExJTlVYX1NfSVNMTksoaW5vZGUtPmlfbW9kZSkgfHwgaW5vZGUtPmlfYmxvY2tbMF0gPT0gMCkKKwkJcmV0dXJuOworCisJLyogCisJICogQ2hlY2sgdGhlIGJsb2NrIG51bWJlcnMgaW4gdGhlIGlfYmxvY2sgYXJyYXkgZm9yIHZhbGlkaXR5OgorCSAqIHplcm8gYmxvY2tzIGFyZSBza2lwcGVkIChidXQgdGhlIGZpcnN0IG9uZSBjYW5ub3QgYmUgemVybyAtCisJICogc2VlIGFib3ZlKSwgb3RoZXIgYmxvY2tzIGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIGZpcnN0IGFuZAorCSAqIG1heCBkYXRhIGJsb2NrcyAoZnJvbSB0aGUgdGhlIHN1cGVyYmxvY2spIGFuZCBhZ2FpbnN0IHRoZQorCSAqIGJsb2NrIGJpdG1hcC4gQW55IGludmFsaWQgYmxvY2sgZm91bmQgbWVhbnMgdGhpcyBjYW5ub3QgYmUKKwkgKiBhIGRpcmVjdG9yeS4KKwkgKiAKKwkgKiBJZiB0aGVyZSBhcmUgbm9uLXplcm8gYmxvY2tzIHBhc3QgdGhlIGZvdXJ0aCBlbnRyeSwgdGhlbgorCSAqIHRoaXMgY2Fubm90IGJlIGEgZGV2aWNlIGZpbGU6IHdlIHJlbWVtYmVyIHRoYXQgZm9yIHRoZSBuZXh0CisJICogY2hlY2suCisJICoKKwkgKiBGb3IgZXh0ZW50IG1hcHBlZCBmaWxlcywgd2UgZG9uJ3QgZG8gYW55IHNhbml0eSBjaGVja2luZzoKKwkgKiBqdXN0IHRyeSB0byBnZXQgdGhlIHBoeXMgYmxvY2sgb2YgbG9naWNhbCBibG9jayAwIGFuZCBydW4KKwkgKiB3aXRoIGl0LgorCSAqLworCisJZXh0ZW50X2ZzID0gKGN0eC0+ZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKTsKKwlpZiAoZXh0ZW50X2ZzICYmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpIHsKKwkJLyogZXh0ZW50IG1hcHBlZCAqLworCQlpZiAgKGV4dDJmc19ibWFwMihjdHgtPmZzLCBwY3R4LT5pbm8sIGlub2RlLCAwLCAwLCAwLCAwLAorCQkJCSAmYmxrKSkKKwkJCXJldHVybjsKKwkJLyogZGV2aWNlIGZpbGVzIGFyZSBuZXZlciBleHRlbnQgbWFwcGVkICovCisJCW5vdF9kZXZpY2UrKzsKKwl9IGVsc2UgeworCQlmb3IgKGk9MDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykgeworCQkJYmxrID0gaW5vZGUtPmlfYmxvY2tbaV07CisJCQlpZiAoIWJsaykKKwkJCQljb250aW51ZTsKKwkJCWlmIChpID49IDQpCisJCQkJbm90X2RldmljZSsrOworCisJCQlpZiAoYmxrIDwgY3R4LT5mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayB8fAorCQkJICAgIGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGN0eC0+ZnMtPnN1cGVyKSB8fAorCQkJICAgIGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCQkgICBibGspKQorCQkJCXJldHVybjsJLyogSW52YWxpZCBibG9jaywgY2FuJ3QgYmUgZGlyICovCisJCX0KKwkJYmxrID0gaW5vZGUtPmlfYmxvY2tbMF07CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbW9kZSBzYXlzIHRoaXMgaXMgYSBkZXZpY2UgZmlsZSBhbmQgdGhlIGlfbGlua3NfY291bnQgZmllbGQKKwkgKiBpcyBzYW5lIGFuZCB3ZSBoYXZlIG5vdCBydWxlZCBpdCBvdXQgYXMgYSBkZXZpY2UgZmlsZSBwcmV2aW91c2x5LAorCSAqIHdlIGRlY2xhcmUgaXQgYSBkZXZpY2UgZmlsZSwgbm90IGEgZGlyZWN0b3J5LgorCSAqLworCWlmICgoTElOVVhfU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBMSU5VWF9TX0lTQkxLKGlub2RlLT5pX21vZGUpKSAmJgorCSAgICAoaW5vZGUtPmlfbGlua3NfY291bnQgPT0gMSkgJiYgIW5vdF9kZXZpY2UpCisJCXJldHVybjsKKworCS8qIHJlYWQgdGhlIGZpcnN0IGJsb2NrICovCisJZWhhbmRsZXJfb3BlcmF0aW9uKF8oInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIikpOworCXJldHZhbCA9IGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoY3R4LT5mcywgYmxrLCBidWYsIDApOworCWVoYW5kbGVyX29wZXJhdGlvbigwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm47CisKKwlkaXJlbnQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGJ1ZjsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X3JlY19sZW4oY3R4LT5mcywgZGlyZW50LCAmcmVjX2xlbik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuOworCWlmICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSAhPSAxKSB8fAorCSAgICAoZGlyZW50LT5uYW1lWzBdICE9ICcuJykgfHwKKwkgICAgKGRpcmVudC0+aW5vZGUgIT0gcGN0eC0+aW5vKSB8fAorCSAgICAocmVjX2xlbiA8IDEyKSB8fAorCSAgICAocmVjX2xlbiAlIDQpIHx8CisJICAgIChyZWNfbGVuID49IGN0eC0+ZnMtPmJsb2Nrc2l6ZSAtIDEyKSkKKwkJcmV0dXJuOworCisJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgcmVjX2xlbik7CisJcmV0dmFsID0gZXh0MmZzX2dldF9yZWNfbGVuKGN0eC0+ZnMsIGRpcmVudCwgJnJlY19sZW4pOworCWlmIChyZXR2YWwpCisJCXJldHVybjsKKwlpZiAoKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgIT0gMikgfHwKKwkgICAgKGRpcmVudC0+bmFtZVswXSAhPSAnLicpIHx8CisJICAgIChkaXJlbnQtPm5hbWVbMV0gIT0gJy4nKSB8fAorCSAgICAocmVjX2xlbiA8IDEyKSB8fAorCSAgICAocmVjX2xlbiAlIDQpKQorCQlyZXR1cm47CisKKwlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX1RSRUFUX0FTX0RJUkVDVE9SWSwgcGN0eCkpIHsKKwkJaW5vZGUtPmlfbW9kZSA9IChpbm9kZS0+aV9tb2RlICYgMDc3NzcpIHwgTElOVVhfU19JRkRJUjsKKwkJZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoY3R4LCBwY3R4LT5pbm8sIGlub2RlLAorCQkJCQlFWFQyX0lOT0RFX1NJWkUoY3R4LT5mcy0+c3VwZXIpLAorCQkJCQkiY2hlY2tfaXNfcmVhbGx5X2RpciIpOworCX0KK30KKwordm9pZCBlMmZzY2tfc2V0dXBfdGRiX2ljb3VudChlMmZzY2tfdCBjdHgsIGludCBmbGFncywKKwkJCSAgICAgZXh0Ml9pY291bnRfdCAqcmV0KQoreworCXVuc2lnbmVkIGludAkJdGhyZXNob2xkOworCWV4dDJfaW5vX3QJCW51bV9kaXJzOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqdGRiX2RpcjsKKwlpbnQJCQllbmFibGU7CisKKwkqcmV0ID0gMDsKKworCXByb2ZpbGVfZ2V0X3N0cmluZyhjdHgtPnByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwgImRpcmVjdG9yeSIsIDAsIDAsCisJCQkgICAmdGRiX2Rpcik7CisJcHJvZmlsZV9nZXRfdWludChjdHgtPnByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwKKwkJCSAibnVtZGlyc190aHJlc2hvbGQiLCAwLCAwLCAmdGhyZXNob2xkKTsKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgInNjcmF0Y2hfZmlsZXMiLAorCQkJICAgICJpY291bnQiLCAwLCAxLCAmZW5hYmxlKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbnVtX2RpcnMoY3R4LT5mcywgJm51bV9kaXJzKTsKKwlpZiAocmV0dmFsKQorCQludW1fZGlycyA9IDEwMjQ7CS8qIEd1ZXNzICovCisKKwlpZiAoIWVuYWJsZSB8fCAhdGRiX2RpciB8fCBhY2Nlc3ModGRiX2RpciwgV19PSykgfHwKKwkgICAgKHRocmVzaG9sZCAmJiBudW1fZGlycyA8PSB0aHJlc2hvbGQpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2ljb3VudF90ZGIoY3R4LT5mcywgdGRiX2RpciwgZmxhZ3MsIHJldCk7CisJaWYgKHJldHZhbCkKKwkJKnJldCA9IDA7Cit9CisKK3ZvaWQgZTJmc2NrX3Bhc3MxKGUyZnNja190IGN0eCkKK3sKKwlpbnQJaTsKKwlfX3U2NAltYXhfc2l6ZXM7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaW5vID0gMDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJY2hhcgkJKmJsb2NrX2J1ZjsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwl1bnNpZ25lZCBjaGFyCWZyYWcsIGZzaXplOworCXN0cnVjdAkJcHJvYmxlbV9jb250ZXh0IHBjdHg7CisJc3RydWN0CQlzY2FuX2NhbGxiYWNrX3N0cnVjdCBzY2FuX3N0cnVjdDsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwljb25zdCBjaGFyCSpvbGRfb3A7CisJdW5zaWduZWQgaW50CXNhdmVfdHlwZTsKKwlpbnQJCWltYWdpY19mcywgZXh0ZW50X2ZzOworCWludAkJYnVzdGVkX2ZzX3RpbWUgPSAwOworCWludAkJaW5vZGVfc2l6ZTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1BBU1NfSEVBREVSLCAmcGN0eCk7CisKKwlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pKSB7CisJCWlmIChleHQyZnNfdTMyX2xpc3RfY3JlYXRlKCZjdHgtPmRpcnNfdG9faGFzaCwgNTApKQorCQkJY3R4LT5kaXJzX3RvX2hhc2ggPSAwOworCX0KKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyAxIik7CisjZW5kaWYKKworI2RlZmluZSBFWFQyX0JQUChiaXRzKSAoMVVMTCA8PCAoKGJpdHMpIC0gMikpCisKKwlmb3IgKGkgPSBFWFQyX01JTl9CTE9DS19MT0dfU0laRTsgaSA8PSBFWFQyX01BWF9CTE9DS19MT0dfU0laRTsgaSsrKSB7CisJCW1heF9zaXplcyA9IEVYVDJfTkRJUl9CTE9DS1MgKyBFWFQyX0JQUChpKTsKKwkJbWF4X3NpemVzID0gbWF4X3NpemVzICsgRVhUMl9CUFAoaSkgKiBFWFQyX0JQUChpKTsKKwkJbWF4X3NpemVzID0gbWF4X3NpemVzICsgRVhUMl9CUFAoaSkgKiBFWFQyX0JQUChpKSAqIEVYVDJfQlBQKGkpOworCQltYXhfc2l6ZXMgPSAobWF4X3NpemVzICogKDFVTCA8PCBpKSk7CisJCWV4dDJfbWF4X3NpemVzW2kgLSBFWFQyX01JTl9CTE9DS19MT0dfU0laRV0gPSBtYXhfc2l6ZXM7CisJfQorI3VuZGVmIEVYVDJfQlBQCisKKwlpbWFnaWNfZnMgPSAoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMpOworCWV4dGVudF9mcyA9IChzYi0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBiaXRtYXBzIHN0cnVjdHVyZXMKKwkgKi8KKwlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCBfKCJpbi11c2UgaW5vZGUgbWFwIiksCisJCQkJCQkgICAgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkJCQkgICAgImlub2RlX3VzZWRfbWFwIiwKKwkJCQkJCSAgICAmY3R4LT5pbm9kZV91c2VkX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDE7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZTJmc2NrX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywKKwkJCV8oImRpcmVjdG9yeSBpbm9kZSBtYXAiKSwKKwkJCUVYVDJGU19CTUFQNjRfQVVUT0RJUiwKKwkJCSJpbm9kZV9kaXJfbWFwIiwgJmN0eC0+aW5vZGVfZGlyX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZTJmc2NrX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywKKwkJCV8oInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiKSwgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkiaW5vZGVfcmVnX21hcCIsICZjdHgtPmlub2RlX3JlZ19tYXApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSA2OworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChmcywKKwkJCV8oImluLXVzZSBibG9jayBtYXAiKSwgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkiYmxvY2tfZm91bmRfbWFwIiwgJmN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0JCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKwllMmZzY2tfc2V0dXBfdGRiX2ljb3VudChjdHgsIDAsICZjdHgtPmlub2RlX2xpbmtfaW5mbyk7CisJaWYgKCFjdHgtPmlub2RlX2xpbmtfaW5mbykgeworCQllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBFWFQyRlNfQk1BUDY0X1JCVFJFRSwKKwkJCQkgICAgICAgImlub2RlX2xpbmtfaW5mbyIsICZzYXZlX3R5cGUpOworCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfY3JlYXRlX2ljb3VudDIoZnMsIDAsIDAsIDAsCisJCQkJCQkgICAgICZjdHgtPmlub2RlX2xpbmtfaW5mbyk7CisJCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gc2F2ZV90eXBlOworCX0KKworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0lDT1VOVCwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWlub2RlX3NpemUgPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwlpbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKQorCQllMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgaW5vZGVfc2l6ZSwgInNjcmF0Y2ggaW5vZGUiKTsKKworCWlub2Rlc190b19wcm9jZXNzID0gKHN0cnVjdCBwcm9jZXNzX2lub2RlX2Jsb2NrICopCisJCWUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJCSAgICAgICAoY3R4LT5wcm9jZXNzX2lub2RlX3NpemUgKgorCQkJCQlzaXplb2Yoc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2spKSwKKwkJCQkgICAgICAgImFycmF5IG9mIGlub2RlcyB0byBwcm9jZXNzIik7CisJcHJvY2Vzc19pbm9kZV9jb3VudCA9IDA7CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfaW5pdF9kYmxpc3QoZnMsIDApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0RCQ09VTlQsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBsYXN0IG9ycGhhbiBmaWVsZCBpcyBzZXQsIGNsZWFyIGl0LCBzaW5jZSB0aGUgcGFzczEKKwkgKiBwcm9jZXNzaW5nIHdpbGwgYXV0b21hdGljYWxseSBmaW5kIGFuZCBjbGVhciB0aGUgb3JwaGFucy4KKwkgKiBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byB0cnkgdXNpbmcgdGhlIGxhc3Rfb3JwaGFuCisJICogbGlua2VkIGxpc3Qgb3Vyc2VsdmVzLCBidXQgZm9yIG5vdywgd2UgY2xlYXIgaXQgc28gdGhhdCB0aGUKKwkgKiBleHQzIG1vdW50IGNvZGUgd29uJ3QgZ2V0IGNvbmZ1c2VkLgorCSAqLworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKSB7CisJCWlmIChmcy0+c3VwZXItPnNfbGFzdF9vcnBoYW4pIHsKKwkJCWZzLT5zdXBlci0+c19sYXN0X29ycGhhbiA9IDA7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CisKKwltYXJrX3RhYmxlX2Jsb2NrcyhjdHgpOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19jb252ZXJ0X3N1YmNsdXN0ZXJfYml0bWFwKGZzLAorCQkJCQkJJmN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9DT05WRVJUX1NVQkNMVVNURVIsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZSk7CisJCXJldHVybjsKKwl9CisJYmxvY2tfYnVmID0gKGNoYXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIGZzLT5ibG9ja3NpemUgKiAzLAorCQkJCQkJICAgICJibG9jayBpbnRlcmF0ZSBidWZmZXIiKTsKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDEpOworCW9sZF9vcCA9IGVoYW5kbGVyX29wZXJhdGlvbihfKCJvcGVuaW5nIGlub2RlIHNjYW4iKSk7CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX29wZW5faW5vZGVfc2NhbihmcywgY3R4LT5pbm9kZV9idWZmZXJfYmxvY2tzLAorCQkJCQkgICAgICAmc2Nhbik7CisJZWhhbmRsZXJfb3BlcmF0aW9uKG9sZF9vcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfSVNDQU5fRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCQlleHQyZnNfZnJlZV9tZW0oJmlub2RlKTsKKwkJcmV0dXJuOworCX0KKwlleHQyZnNfaW5vZGVfc2Nhbl9mbGFncyhzY2FuLCBFWFQyX1NGX1NLSVBfTUlTU0lOR19JVEFCTEUsIDApOworCWN0eC0+c3Rhc2hlZF9pbm9kZSA9IGlub2RlOworCXNjYW5fc3RydWN0LmN0eCA9IGN0eDsKKwlzY2FuX3N0cnVjdC5ibG9ja19idWYgPSBibG9ja19idWY7CisJZXh0MmZzX3NldF9pbm9kZV9jYWxsYmFjayhzY2FuLCBzY2FuX2NhbGxiYWNrLCAmc2Nhbl9zdHJ1Y3QpOworCWlmIChjdHgtPnByb2dyZXNzKQorCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgMSwgMCwgY3R4LT5mcy0+Z3JvdXBfZGVzY19jb3VudCkpCisJCQlyZXR1cm47CisJaWYgKChmcy0+c3VwZXItPnNfd3RpbWUgPCBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSB8fAorCSAgICAoZnMtPnN1cGVyLT5zX210aW1lIDwgZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpCisJCWJ1c3RlZF9mc190aW1lID0gMTsKKworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSAmJgorCSAgICBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrID4gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgJiYKKwkgICAgZnMtPnN1cGVyLT5zX21tcF9ibG9jayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJICBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrKTsKKworCXdoaWxlICgxKSB7CisJCWlmIChpbm8gJSAoZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKiA0KSA9PSAxKSB7CisJCQlpZiAoZTJmc2NrX21tcF91cGRhdGUoZnMpKQorCQkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwkJb2xkX29wID0gZWhhbmRsZXJfb3BlcmF0aW9uKF8oImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iKSk7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZV9mdWxsKHNjYW4sICZpbm8sCisJCQkJCQkJICBpbm9kZSwgaW5vZGVfc2l6ZSk7CisJCWVoYW5kbGVyX29wZXJhdGlvbihvbGRfb3ApOworCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQkJcmV0dXJuOworCQlpZiAocGN0eC5lcnJjb2RlID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKSB7CisJCQlpZiAoIWN0eC0+aW5vZGVfYmJfbWFwKQorCQkJCWFsbG9jX2JiX21hcChjdHgpOworCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JiX21hcCwgaW5vKTsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9JU0NBTl9FUlJPUiwgJnBjdHgpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIWlubykKKwkJCWJyZWFrOworCQlwY3R4LmlubyA9IGlubzsKKwkJcGN0eC5pbm9kZSA9IGlub2RlOworCQljdHgtPnN0YXNoZWRfaW5vID0gaW5vOworCQlpZiAoaW5vZGUtPmlfbGlua3NfY291bnQpIHsKKwkJCXBjdHguZXJyY29kZSA9IGV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sCisJCQkJCSAgIGlubywgaW5vZGUtPmlfbGlua3NfY291bnQpOworCQkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJCXBjdHgubnVtID0gaW5vZGUtPmlfbGlua3NfY291bnQ7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lDT1VOVF9TVE9SRSwgJnBjdHgpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogVGVzdCBmb3IgaW5jb3JyZWN0IGV4dGVudCBmbGFnIHNldHRpbmdzLgorCQkgKgorCQkgKiBPbiBiaWctZW5kaWFuIG1hY2hpbmVzIHdlIG11c3QgYmUgY2FyZWZ1bDoKKwkJICogV2hlbiB0aGUgaW5vZGUgaXMgcmVhZCwgdGhlIGlfYmxvY2sgYXJyYXkgaXMgbm90IHN3YXBwZWQKKwkJICogaWYgdGhlIGV4dGVudCBmbGFnIGlzIHNldC4gIFRoZXJlZm9yZSBpZiB3ZSBhcmUgdGVzdGluZworCQkgKiBmb3Igb3IgZml4aW5nIGEgd3JvbmdseS1zZXQgZmxhZywgd2UgbXVzdCBwb3RlbnRpYWxseQorCQkgKiAodW4pc3dhcCBiZWZvcmUgdGVzdGluZywgb3IgYWZ0ZXIgZml4aW5nLgorCQkgKi8KKworCQkvKgorCQkgKiBJbiB0aGlzIGNhc2UgdGhlIGV4dGVudHMgZmxhZyB3YXMgc2V0IHdoZW4gcmVhZCwgc28KKwkJICogZXh0ZW50X2hlYWRlcl92ZXJpZnkgaXMgb2suICBJZiB0aGUgaW5vZGUgaXMgY2xlYXJlZCwKKwkJICogbm8gbmVlZCB0byBzd2FwLi4uIHNvIG5vIGV4dHJhIHN3YXBwaW5nIGhlcmUuCisJCSAqLworCQlpZiAoKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSAmJiAhZXh0ZW50X2ZzICYmCisJCSAgICAoaW5vZGUtPmlfbGlua3NfY291bnQgfHwgKGlubyA9PSBFWFQyX0JBRF9JTk8pIHx8CisJCSAgICAgKGlubyA9PSBFWFQyX1JPT1RfSU5PKSB8fCAoaW5vID09IEVYVDJfSk9VUk5BTF9JTk8pKSkgeworCQkJaWYgKChleHQyZnNfZXh0ZW50X2hlYWRlcl92ZXJpZnkoaW5vZGUtPmlfYmxvY2ssCisJCQkJCQkgc2l6ZW9mKGlub2RlLT5pX2Jsb2NrKSkgPT0gMCkgJiYKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzFfRVhURU5UX0ZFQVRVUkUsICZwY3R4KSkgeworCQkJCXNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgfD0gRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFM7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJCWV4dGVudF9mcyA9IDE7CisJCQl9IGVsc2UgaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FWFRFTlRTX1NFVCwgJnBjdHgpKSB7CisJCQljbGVhcl9pbm9kZToKKwkJCQllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAwLCAicGFzczEiKTsKKwkJCQlpZiAoaW5vID09IEVYVDJfQkFEX0lOTykKKwkJCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLAorCQkJCQkJCQkgaW5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEZvciBiaWctZW5kaWFuIG1hY2hpbmVzOgorCQkgKiBJZiB0aGUgaW5vZGUgZGlkbid0IGhhdmUgdGhlIGV4dGVudHMgZmxhZyBzZXQgd2hlbiBpdAorCQkgKiB3YXMgcmVhZCwgdGhlbiB0aGUgaV9ibG9ja3MgYXJyYXkgd2FzIHN3YXBwZWQuICBUbyB0ZXN0CisJCSAqIGFzIGFuIGV4dGVudHMgaGVhZGVyLCB3ZSBtdXN0IHN3YXAgaXQgYmFjayBmaXJzdC4KKwkJICogSUYgd2UgdGhlbiBzZXQgdGhlIGV4dGVudHMgZmxhZywgdGhlIGVudGlyZSBpX2Jsb2NrCisJCSAqIGFycmF5IG11c3QgYmUgdW4vcmUtc3dhcHBlZCB0byBtYWtlIGl0IHByb3BlciBleHRlbnRzIGRhdGEuCisJCSAqLworCQlpZiAoZXh0ZW50X2ZzICYmICEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpICYmCisJCSAgICAoaW5vZGUtPmlfbGlua3NfY291bnQgfHwgKGlubyA9PSBFWFQyX0JBRF9JTk8pIHx8CisJCSAgICAgKGlubyA9PSBFWFQyX1JPT1RfSU5PKSB8fCAoaW5vID09IEVYVDJfSk9VUk5BTF9JTk8pKSAmJgorCQkgICAgKExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwKKwkJICAgICBMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKSkgeworCQkJdm9pZCAqZWhwOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQkJX191MzIgdG1wX2Jsb2NrW0VYVDJfTl9CTE9DS1NdOworCisJCQlmb3IgKGkgPSAwOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQkJCXRtcF9ibG9ja1tpXSA9IGV4dDJmc19zd2FiMzIoaW5vZGUtPmlfYmxvY2tbaV0pOworCQkJZWhwID0gdG1wX2Jsb2NrOworI2Vsc2UKKwkJCWVocCA9IGlub2RlLT5pX2Jsb2NrOworI2VuZGlmCisJCQlpZiAoKGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeShlaHAsCisJCQkJCSBzaXplb2YoaW5vZGUtPmlfYmxvY2spKSA9PSAwKSAmJgorCQkJICAgIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfVU5TRVRfRVhURU5UX0ZMLCAmcGN0eCkpKSB7CisJCQkJaW5vZGUtPmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQkJCW1lbWNweShpbm9kZS0+aV9ibG9jaywgdG1wX2Jsb2NrLAorCQkJCSAgICAgICBzaXplb2YoaW5vZGUtPmlfYmxvY2spKTsKKyNlbmRpZgorCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsICJwYXNzMSIpOworCQkJfQorCQl9CisKKwkJaWYgKGlubyA9PSBFWFQyX0JBRF9JTk8pIHsKKwkJCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCBwYjsKKworCQkJaWYgKChpbm9kZS0+aV9tb2RlIHx8IGlub2RlLT5pX3VpZCB8fCBpbm9kZS0+aV9naWQgfHwKKwkJCSAgICAgaW5vZGUtPmlfbGlua3NfY291bnQgfHwgaW5vZGUtPmlfZmlsZV9hY2wpICYmCisJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0lOVkFMSURfQkFEX0lOT0RFLCAmcGN0eCkpIHsKKwkJCQltZW1zZXQoaW5vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsCisJCQkJCQkgICAiY2xlYXIgYmFkIGlub2RlIik7CisJCQl9CisKKwkJCXBjdHguZXJyY29kZSA9IGV4dDJmc19jb3B5X2JpdG1hcChjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCQkgICZwYi5mc19tZXRhX2Jsb2Nrcyk7CisJCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQkJcGN0eC5udW0gPSA0OworCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9CQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwYi5pbm8gPSBFWFQyX0JBRF9JTk87CisJCQlwYi5udW1fYmxvY2tzID0gcGIubGFzdF9ibG9jayA9IDA7CisJCQlwYi5sYXN0X2RiX2Jsb2NrID0gLTE7CisJCQlwYi5udW1faWxsZWdhbF9ibG9ja3MgPSAwOworCQkJcGIuc3VwcHJlc3MgPSAwOyBwYi5jbGVhciA9IDA7IHBiLmlzX2RpciA9IDA7CisJCQlwYi5pc19yZWcgPSAwOyBwYi5mcmFnbWVudGVkID0gMDsgcGIuYmJjaGVjayA9IDA7CisJCQlwYi5pbm9kZSA9IGlub2RlOworCQkJcGIucGN0eCA9ICZwY3R4OworCQkJcGIuY3R4ID0gY3R4OworCQkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsCisJCQkJICAgICBibG9ja19idWYsIHByb2Nlc3NfYmFkX2Jsb2NrLCAmcGIpOworCQkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKHBiLmZzX21ldGFfYmxvY2tzKTsKKwkJCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkxPQ0tfSVRFUkFURSwgJnBjdHgpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKHBiLmJiY2hlY2spCisJCQkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJJTk9ERV9CQURfTUVUQUJMT0NLX1BST01QVCwgJnBjdHgpKSB7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoaW5vID09IEVYVDJfUk9PVF9JTk8pIHsKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgdGhlIHJvb3QgaW5vZGUgaXMgYSBkaXJlY3Rvcnk7IGlmCisJCQkgKiBub3QsIG9mZmVyIHRvIGNsZWFyIGl0LiAgSXQgd2lsbCBiZQorCQkJICogcmVnbmVyYXRlZCBpbiBwYXNzICMzLgorCQkJICovCisJCQlpZiAoIUxJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JPT1RfTk9fRElSLCAmcGN0eCkpCisJCQkJCWdvdG8gY2xlYXJfaW5vZGU7CisJCQl9CisJCQkvKgorCQkJICogSWYgZHRpbWUgaXMgc2V0LCBvZmZlciB0byBjbGVhciBpdC4gIG1rZTJmcworCQkJICogdmVyc2lvbiAwLjJiIGNyZWF0ZWQgZmlsZXN5c3RlbXMgd2l0aCB0aGUKKwkJCSAqIGR0aW1lIGZpZWxkIHNldCBmb3IgdGhlIHJvb3QgYW5kIGxvc3QrZm91bmQKKwkJCSAqIGRpcmVjdG9yaWVzLiAgV2Ugd29uJ3Qgd29ycnkgYWJvdXQKKwkJCSAqIC9sb3N0K2ZvdW5kLCBzaW5jZSB0aGF0IGNhbiBiZSByZWdlbmVyYXRlZAorCQkJICogZWFzaWx5LiAgQnV0IHdlIHdpbGwgZml4IHRoZSByb290IGRpcmVjdG9yeQorCQkJICogYXMgYSBzcGVjaWFsIGNhc2UuCisJCQkgKi8KKwkJCWlmIChpbm9kZS0+aV9kdGltZSAmJiBpbm9kZS0+aV9saW5rc19jb3VudCkgeworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfUk9PVF9EVElNRSwgJnBjdHgpKSB7CisJCQkJCWlub2RlLT5pX2R0aW1lID0gMDsKKwkJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwKKwkJCQkJCQkgICAicGFzczEiKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoaW5vID09IEVYVDJfSk9VUk5BTF9JTk8pIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKTsKKwkJCWlmIChmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtID09IEVYVDJfSk9VUk5BTF9JTk8pIHsKKwkJCQlpZiAoIUxJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0pPVVJOQUxfQkFEX01PREUsCisJCQkJCQkmcGN0eCkpIHsKKwkJCQkJaW5vZGUtPmlfbW9kZSA9IExJTlVYX1NfSUZSRUc7CisJCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJICAgInBhc3MxIik7CisJCQkJfQorCQkJCWNoZWNrX2Jsb2NrcyhjdHgsICZwY3R4LCBibG9ja19idWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChpbm9kZS0+aV9saW5rc19jb3VudCB8fAorCQkJICAgICBpbm9kZS0+aV9ibG9ja3MgfHwgaW5vZGUtPmlfYmxvY2tbMF0pICYmCisJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0pPVVJOQUxfSU5PREVfTk9UX0NMRUFSLAorCQkJCQkmcGN0eCkpIHsKKwkJCQltZW1zZXQoaW5vZGUsIDAsIGlub2RlX3NpemUpOworCQkJCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sCisJCQkJCQkgICAgaW5vLCAwKTsKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGVfZnVsbChjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJaW5vZGVfc2l6ZSwgInBhc3MxIik7CisJCQl9CisJCX0gZWxzZSBpZiAoKGlubyA9PSBFWFQ0X1VTUl9RVU9UQV9JTk8pIHx8CisJCQkgICAoaW5vID09IEVYVDRfR1JQX1FVT1RBX0lOTykpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKTsKKwkJCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSkgJiYKKwkJCSAgICAoKGZzLT5zdXBlci0+c191c3JfcXVvdGFfaW51bSA9PSBpbm8pIHx8CisJCQkgICAgIChmcy0+c3VwZXItPnNfZ3JwX3F1b3RhX2ludW0gPT0gaW5vKSkpIHsKKwkJCQlpZiAoIUxJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX1FVT1RBX0JBRF9NT0RFLAorCQkJCQkJCSZwY3R4KSkgeworCQkJCQlpbm9kZS0+aV9tb2RlID0gTElOVVhfU19JRlJFRzsKKwkJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwKKwkJCQkJCQkicGFzczEiKTsKKwkJCQl9CisJCQkJY2hlY2tfYmxvY2tzKGN0eCwgJnBjdHgsIGJsb2NrX2J1Zik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKGlub2RlLT5pX2xpbmtzX2NvdW50IHx8CisJCQkgICAgIGlub2RlLT5pX2Jsb2NrcyB8fCBpbm9kZS0+aV9ibG9ja1swXSkgJiYKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzFfUVVPVEFfSU5PREVfTk9UX0NMRUFSLAorCQkJCQkmcGN0eCkpIHsKKwkJCQltZW1zZXQoaW5vZGUsIDAsIGlub2RlX3NpemUpOworCQkJCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sCisJCQkJCQkgICAgaW5vLCAwKTsKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGVfZnVsbChjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJaW5vZGVfc2l6ZSwgInBhc3MxIik7CisJCQl9CisJCX0gZWxzZSBpZiAoaW5vIDwgRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpKSB7CisJCQlwcm9ibGVtX3QgcHJvYmxlbSA9IDA7CisKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKTsKKwkJCWlmIChpbm8gPT0gRVhUMl9CT09UX0xPQURFUl9JTk8pIHsKKwkJCQlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCQkJcHJvYmxlbSA9IFBSXzFfUkVTRVJWRURfQkFEX01PREU7CisJCQl9IGVsc2UgaWYgKGlubyA9PSBFWFQyX1JFU0laRV9JTk8pIHsKKwkJCQlpZiAoaW5vZGUtPmlfbW9kZSAmJgorCQkJCSAgICAhTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJCQkJcHJvYmxlbSA9IFBSXzFfUkVTRVJWRURfQkFEX01PREU7CisJCQl9IGVsc2UgeworCQkJCWlmIChpbm9kZS0+aV9tb2RlICE9IDApCisJCQkJCXByb2JsZW0gPSBQUl8xX1JFU0VSVkVEX0JBRF9NT0RFOworCQkJfQorCQkJaWYgKHByb2JsZW0pIHsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBwcm9ibGVtLCAmcGN0eCkpIHsKKwkJCQkJaW5vZGUtPmlfbW9kZSA9IDA7CisJCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsCisJCQkJCQkJICAgInBhc3MxIik7CisJCQkJfQorCQkJfQorCQkJY2hlY2tfYmxvY2tzKGN0eCwgJnBjdHgsIGJsb2NrX2J1Zik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGZvciBpbm9kZXMgd2hvIG1pZ2h0IGhhdmUgYmVlbiBwYXJ0IG9mIHRoZQorCQkgKiBvcnBoYW5lZCBsaXN0IGxpbmtlZCBsaXN0LiAgVGhleSBzaG91bGQgaGF2ZSBnb3R0ZW4KKwkJICogZGVhbHQgd2l0aCBieSBub3csIHVubGVzcyB0aGUgbGlzdCBoYWQgc29tZWhvdyBiZWVuCisJCSAqIGNvcnJ1cHRlZC4KKwkJICoKKwkJICogRklYTUU6IEluIHRoZSBmdXR1cmUsIGlub2RlcyB3aGljaCBhcmUgc3RpbGwgaW4gdXNlCisJCSAqIChhbmQgd2hpY2ggYXJlIHRoZXJlZm9yZSkgcGVuZGluZyB0cnVuY2F0aW9uIHNob3VsZAorCQkgKiBiZSBoYW5kbGVkIHNwZWNpYWxseS4gIFJpZ2h0IG5vdyB3ZSBqdXN0IGNsZWFyIHRoZQorCQkgKiBkdGltZSBmaWVsZCwgYW5kIHRoZSBub3JtYWwgZTJmc2NrIGhhbmRsaW5nIG9mCisJCSAqIGlub2RlcyB3aGVyZSBpX3NpemUgYW5kIHRoZSBpbm9kZSBibG9ja3MgYXJlCisJCSAqIGluY29uc2lzdGVudCBpcyB0byBmaXggaV9zaXplLCBpbnN0ZWFkIG9mIHJlbGVhc2luZworCQkgKiB0aGUgZXh0cmEgYmxvY2tzLiAgVGhpcyB3b24ndCBjYXRjaCB0aGUgaW5vZGVzIHRoYXQKKwkJICogd2FzIGF0IHRoZSBlbmQgb2YgdGhlIG9ycGhhbiBsaXN0LCBidXQgaXQncyBiZXR0ZXIKKwkJICogdGhhbiBub3RoaW5nLiAgVGhlIHJpZ2h0IGFuc3dlciBpcyB0aGF0IHRoZXJlCisJCSAqIHNob3VsZG4ndCBiZSBhbnkgYnVncyBpbiB0aGUgb3JwaGFuIGxpc3QgaGFuZGxpbmcuICA6LSkKKwkJICovCisJCWlmIChpbm9kZS0+aV9kdGltZSAmJiAhYnVzdGVkX2ZzX3RpbWUgJiYKKwkJICAgIGlub2RlLT5pX2R0aW1lIDwgY3R4LT5mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0xPV19EVElNRSwgJnBjdHgpKSB7CisJCQkJaW5vZGUtPmlfZHRpbWUgPSBpbm9kZS0+aV9saW5rc19jb3VudCA/CisJCQkJCTAgOiBjdHgtPm5vdzsKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJICAgInBhc3MxIik7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGRlbGV0ZWQgaW5vZGVzIGhhdmUKKwkJICogaV9saW5rc19jb3VudCBzZXQgdG8gMC4KKwkJICovCisJCWlmICghaW5vZGUtPmlfbGlua3NfY291bnQpIHsKKwkJCWlmICghaW5vZGUtPmlfZHRpbWUgJiYgaW5vZGUtPmlfbW9kZSkgeworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsCisJCQkJCSAgICBQUl8xX1pFUk9fRFRJTUUsICZwY3R4KSkgeworCQkJCQlpbm9kZS0+aV9kdGltZSA9IGN0eC0+bm93OworCQkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLAorCQkJCQkJCSAgICJwYXNzMSIpOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJCSAqIG4uYi4gIDAuM2MgZXh0MmZzIGNvZGUgZGlkbid0IGNsZWFyIGlfbGlua3NfY291bnQgZm9yCisJCSAqIGRlbGV0ZWQgZmlsZXMuICBPb3BzLgorCQkgKgorCQkgKiBTaW5jZSBhbGwgbmV3IGV4dDIgaW1wbGVtZW50YXRpb25zIGdldCB0aGlzIHJpZ2h0LAorCQkgKiB3ZSBub3cgYXNzdW1lIHRoYXQgdGhlIGNhc2Ugb2Ygbm9uLXplcm8KKwkJICogaV9saW5rc19jb3VudCBhbmQgbm9uLXplcm8gZHRpbWUgbWVhbnMgdGhhdCB3ZQorCQkgKiBzaG91bGQga2VlcCB0aGUgZmlsZSwgbm90IGRlbGV0ZSBpdC4KKwkJICoKKwkJICovCisJCWlmIChpbm9kZS0+aV9kdGltZSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9TRVRfRFRJTUUsICZwY3R4KSkgeworCQkJCWlub2RlLT5pX2R0aW1lID0gMDsKKwkJCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAicGFzczEiKTsKKwkJCX0KKwkJfQorCisJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKTsKKwkJc3dpdGNoIChmcy0+c3VwZXItPnNfY3JlYXRvcl9vcykgeworCQkgICAgY2FzZSBFWFQyX09TX0hVUkQ6CisJCQlmcmFnID0gaW5vZGUtPm9zZDIuaHVyZDIuaF9pX2ZyYWc7CisJCQlmc2l6ZSA9IGlub2RlLT5vc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCWZyYWcgPSBmc2l6ZSA9IDA7CisJCX0KKworCQlpZiAoaW5vZGUtPmlfZmFkZHIgfHwgZnJhZyB8fCBmc2l6ZSB8fAorCQkgICAgKExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfZGlyX2FjbCkpCisJCQltYXJrX2lub2RlX2JhZChjdHgsIGlubyk7CisJCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgCisJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgJiYKKwkJICAgIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCAhPSAwKQorCQkJbWFya19pbm9kZV9iYWQoY3R4LCBpbm8pOworCQlpZiAoKGZzLT5zdXBlci0+c19jcmVhdG9yX29zID09IEVYVDJfT1NfTElOVVgpICYmCisJCSAgICAhKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCQkgICAgKGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpICE9IDApKQorCQkJbWFya19pbm9kZV9iYWQoY3R4LCBpbm8pOworCQlpZiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0lNQUdJQ19GTCkgeworCQkJaWYgKGltYWdpY19mcykgeworCQkJCWlmICghY3R4LT5pbm9kZV9pbWFnaWNfbWFwKQorCQkJCQlhbGxvY19pbWFnaWNfbWFwKGN0eCk7CisJCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2ltYWdpY19tYXAsCisJCQkJCQkJIGlubyk7CisJCQl9IGVsc2UgeworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfU0VUX0lNQUdJQywgJnBjdHgpKSB7CisJCQkJCWlub2RlLT5pX2ZsYWdzICY9IH5FWFQyX0lNQUdJQ19GTDsKKwkJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLAorCQkJCQkJCSAgIGlub2RlLCAicGFzczEiKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQljaGVja19pbm9kZV9leHRyYV9zcGFjZShjdHgsICZwY3R4KTsKKwkJY2hlY2tfaXNfcmVhbGx5X2RpcihjdHgsICZwY3R4LCBibG9ja19idWYpOworCisJCS8qCisJCSAqIGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMiBkb2VzIG5vdCBhY3R1YWxseSBsb29rCisJCSAqIGF0IGlfYmxvY2tbXSB2YWx1ZXMsIHNvIG5vdCBlbmRpYW4tc2Vuc2l0aXZlIGhlcmUuCisJCSAqLworCQlpZiAoZXh0ZW50X2ZzICYmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgJiYKKwkJICAgIExJTlVYX1NfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYKKwkJICAgICFleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsIGlub2RlKSAmJgorCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0ZBU1RfU1lNTElOS19FWFRFTlRfRkwsICZwY3R4KSkgeworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gfkVYVDRfRVhURU5UU19GTDsKKwkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgaW5vZGUsICJwYXNzMSIpOworCQl9CisKKwkJaWYgKExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpbm8pOworCQkJZTJmc2NrX2FkZF9kaXJfaW5mbyhjdHgsIGlubywgMCk7CisJCQljdHgtPmZzX2RpcmVjdG9yeV9jb3VudCsrOworCQkJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FTkNSWVBUX0ZMKQorCQkJCWFkZF9lbmNyeXB0ZWRfZGlyKGN0eCwgaW5vKTsKKwkJfSBlbHNlIGlmIChMSU5VWF9TX0lTUkVHIChpbm9kZS0+aV9tb2RlKSkgeworCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3JlZ19tYXAsIGlubyk7CisJCQljdHgtPmZzX3JlZ3VsYXJfY291bnQrKzsKKwkJfSBlbHNlIGlmIChMSU5VWF9TX0lTQ0hSIChpbm9kZS0+aV9tb2RlKSAmJgorCQkJICAgZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShmcywgaW5vZGUpKSB7CisJCQljaGVja19pbW11dGFibGUoY3R4LCAmcGN0eCk7CisJCQljaGVja19zaXplKGN0eCwgJnBjdHgpOworCQkJY3R4LT5mc19jaGFyZGV2X2NvdW50Kys7CisJCX0gZWxzZSBpZiAoTElOVVhfU19JU0JMSyAoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCSAgIGUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsIGlub2RlKSkgeworCQkJY2hlY2tfaW1tdXRhYmxlKGN0eCwgJnBjdHgpOworCQkJY2hlY2tfc2l6ZShjdHgsICZwY3R4KTsKKwkJCWN0eC0+ZnNfYmxvY2tkZXZfY291bnQrKzsKKwkJfSBlbHNlIGlmIChMSU5VWF9TX0lTTE5LIChpbm9kZS0+aV9tb2RlKSAmJgorCQkJICAgZTJmc2NrX3Bhc3MxX2NoZWNrX3N5bWxpbmsoZnMsIGlubywgaW5vZGUsCisJCQkJCQkgICAgICBibG9ja19idWYpKSB7CisJCQljaGVja19pbW11dGFibGUoY3R4LCAmcGN0eCk7CisJCQljdHgtPmZzX3N5bWxpbmtzX2NvdW50Kys7CisJCQlpZiAoZXh0MmZzX2lub2RlX2RhdGFfYmxvY2tzKGZzLCBpbm9kZSkgPT0gMCkgeworCQkJCWN0eC0+ZnNfZmFzdF9zeW1saW5rc19jb3VudCsrOworCQkJCWNoZWNrX2Jsb2NrcyhjdHgsICZwY3R4LCBibG9ja19idWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWVsc2UgaWYgKExJTlVYX1NfSVNGSUZPIChpbm9kZS0+aV9tb2RlKSAmJgorCQkJIGUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsIGlub2RlKSkgeworCQkJY2hlY2tfaW1tdXRhYmxlKGN0eCwgJnBjdHgpOworCQkJY2hlY2tfc2l6ZShjdHgsICZwY3R4KTsKKwkJCWN0eC0+ZnNfZmlmb19jb3VudCsrOworCQl9IGVsc2UgaWYgKChMSU5VWF9TX0lTU09DSyAoaW5vZGUtPmlfbW9kZSkpICYmCisJCQkgICBlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGZzLCBpbm9kZSkpIHsKKwkJCWNoZWNrX2ltbXV0YWJsZShjdHgsICZwY3R4KTsKKwkJCWNoZWNrX3NpemUoY3R4LCAmcGN0eCk7CisJCQljdHgtPmZzX3NvY2tldHNfY291bnQrKzsKKwkJfSBlbHNlCisJCQltYXJrX2lub2RlX2JhZChjdHgsIGlubyk7CisJCWlmICghKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkgeworCQkJaWYgKGlub2RlLT5pX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSkKKwkJCQljdHgtPmZzX2luZF9jb3VudCsrOworCQkJaWYgKGlub2RlLT5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10pCisJCQkJY3R4LT5mc19kaW5kX2NvdW50Kys7CisJCQlpZiAoaW5vZGUtPmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSkKKwkJCQljdHgtPmZzX3RpbmRfY291bnQrKzsKKwkJfQorCQlpZiAoIShpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgJiYKKwkJICAgIChpbm9kZS0+aV9ibG9ja1tFWFQyX0lORF9CTE9DS10gfHwKKwkJICAgICBpbm9kZS0+aV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdIHx8CisJCSAgICAgaW5vZGUtPmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSB8fAorCQkgICAgIGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgaW5vZGUpKSkgeworCQkJaW5vZGVzX3RvX3Byb2Nlc3NbcHJvY2Vzc19pbm9kZV9jb3VudF0uaW5vID0gaW5vOworCQkJaW5vZGVzX3RvX3Byb2Nlc3NbcHJvY2Vzc19pbm9kZV9jb3VudF0uaW5vZGUgPSAqaW5vZGU7CisJCQlwcm9jZXNzX2lub2RlX2NvdW50Kys7CisJCX0gZWxzZQorCQkJY2hlY2tfYmxvY2tzKGN0eCwgJnBjdHgsIGJsb2NrX2J1Zik7CisKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCXJldHVybjsKKworCQlpZiAocHJvY2Vzc19pbm9kZV9jb3VudCA+PSBjdHgtPnByb2Nlc3NfaW5vZGVfc2l6ZSkgeworCQkJcHJvY2Vzc19pbm9kZXMoY3R4LCBibG9ja19idWYpOworCisJCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQkJCXJldHVybjsKKwkJfQorCX0KKwlwcm9jZXNzX2lub2RlcyhjdHgsIGJsb2NrX2J1Zik7CisJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisKKwkvKgorCSAqIElmIGFueSBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzJyByZWZlcmVuY2UgY291bnRzIG5lZWQgdG8KKwkgKiBiZSBhZGp1c3RlZCwgZWl0aGVyIHVwIChjdHgtPnJlZmNvdW50X2V4dHJhKSwgb3IgZG93bgorCSAqIChjdHgtPnJlZmNvdW50KSwgdGhlbiBmaXggdGhlbS4KKwkgKi8KKwlpZiAoY3R4LT5yZWZjb3VudCkgeworCQlhZGp1c3RfZXh0YXR0cl9yZWZjb3VudChjdHgsIGN0eC0+cmVmY291bnQsIGJsb2NrX2J1ZiwgLTEpOworCQllYV9yZWZjb3VudF9mcmVlKGN0eC0+cmVmY291bnQpOworCQljdHgtPnJlZmNvdW50ID0gMDsKKwl9CisJaWYgKGN0eC0+cmVmY291bnRfZXh0cmEpIHsKKwkJYWRqdXN0X2V4dGF0dHJfcmVmY291bnQoY3R4LCBjdHgtPnJlZmNvdW50X2V4dHJhLAorCQkJCQlibG9ja19idWYsICsxKTsKKwkJZWFfcmVmY291bnRfZnJlZShjdHgtPnJlZmNvdW50X2V4dHJhKTsKKwkJY3R4LT5yZWZjb3VudF9leHRyYSA9IDA7CisJfQorCisJaWYgKGN0eC0+aW52YWxpZF9iaXRtYXBzKQorCQloYW5kbGVfZnNfYmFkX2Jsb2NrcyhjdHgpOworCisJLyogV2UgZG9uJ3QgbmVlZCB0aGUgYmxvY2tfZWFfbWFwIGFueSBtb3JlICovCisJaWYgKGN0eC0+YmxvY2tfZWFfbWFwKSB7CisJCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChjdHgtPmJsb2NrX2VhX21hcCk7CisJCWN0eC0+YmxvY2tfZWFfbWFwID0gMDsKKwl9CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JFU0laRV9JTk9ERSkgeworCQlleHQyZnNfYmxvY2tfYml0bWFwIHNhdmVfYm1hcDsKKworCQlzYXZlX2JtYXAgPSBmcy0+YmxvY2tfbWFwOworCQlmcy0+YmxvY2tfbWFwID0gY3R4LT5ibG9ja19mb3VuZF9tYXA7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19jcmVhdGVfcmVzaXplX2lub2RlKGZzKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzFfUkVTSVpFX0lOT0RFX0NSRUFURSwKKwkJCQkJICZwY3R4KSkgeworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGN0eC5lcnJjb2RlID0gMDsKKwkJfQorCQlpZiAoIXBjdHguZXJyY29kZSkgeworCQkJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBFWFQyX1JFU0laRV9JTk8sIGlub2RlLAorCQkJCQkgICJyZWNyZWF0ZSBpbm9kZSIpOworCQkJaW5vZGUtPmlfbXRpbWUgPSBjdHgtPm5vdzsKKwkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIEVYVDJfUkVTSVpFX0lOTywgaW5vZGUsCisJCQkJCSAgICJyZWNyZWF0ZSBpbm9kZSIpOworCQl9CisJCWZzLT5ibG9ja19tYXAgPSBzYXZlX2JtYXA7CisJCWN0eC0+ZmxhZ3MgJj0gfkUyRl9GTEFHX1JFU0laRV9JTk9ERTsKKwl9CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JFU1RBUlQpIHsKKwkJLyoKKwkJICogT25seSB0aGUgbWFzdGVyIGNvcHkgb2YgdGhlIHN1cGVyYmxvY2sgYW5kIGJsb2NrCisJCSAqIGdyb3VwIGRlc2NyaXB0b3JzIGFyZSBnb2luZyB0byBiZSB3cml0dGVuIGR1cmluZyBhCisJCSAqIHJlc3RhcnQsIHNvIHNldCB0aGUgc3VwZXJibG9jayB0byBiZSB1c2VkIHRvIGJlIHRoZQorCQkgKiBtYXN0ZXIgc3VwZXJibG9jay4KKwkJICovCisJCWN0eC0+dXNlX3N1cGVyYmxvY2sgPSAwOworCQl1bndpbmRfcGFzczEoZnMpOworCQlnb3RvIGVuZGl0OworCX0KKworCWlmIChjdHgtPmJsb2NrX2R1cF9tYXApIHsKKwkJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pIHsKKwkJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfRFVQX0JMT0NLU19QUkVFTlNUT1AsICZwY3R4KTsKKwkJfQorCQllMmZzY2tfcGFzczFfZHVwYmxvY2tzKGN0eCwgYmxvY2tfYnVmKTsKKwl9CisJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZXNfdG9fcHJvY2Vzcyk7CitlbmRpdDoKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDApOworCisJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCWV4dDJmc19mcmVlX21lbSgmaW5vZGUpOworCisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCBfKCJQYXNzIDEiKSwgJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworfQorCisvKgorICogV2hlbiB0aGUgaW5vZGVfc2NhbiByb3V0aW5lcyBjYWxsIHRoaXMgY2FsbGJhY2sgYXQgdGhlIGVuZCBvZiB0aGUKKyAqIGdsb2NrIGdyb3VwLCBjYWxsIHByb2Nlc3NfaW5vZGVzLgorICovCitzdGF0aWMgZXJyY29kZV90IHNjYW5fY2FsbGJhY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgICAgZXh0Ml9pbm9kZV9zY2FuIHNjYW4gRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIGRncnBfdCBncm91cCwgdm9pZCAqIHByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2Nhbl9jYWxsYmFja19zdHJ1Y3QgKnNjYW5fc3RydWN0OworCWUyZnNja190IGN0eDsKKworCXNjYW5fc3RydWN0ID0gKHN0cnVjdCBzY2FuX2NhbGxiYWNrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJY3R4ID0gc2Nhbl9zdHJ1Y3QtPmN0eDsKKworCXByb2Nlc3NfaW5vZGVzKChlMmZzY2tfdCkgZnMtPnByaXZfZGF0YSwgc2Nhbl9zdHJ1Y3QtPmJsb2NrX2J1Zik7CisKKwlpZiAoY3R4LT5wcm9ncmVzcykKKwkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDEsIGdyb3VwKzEsCisJCQkJICAgIGN0eC0+ZnMtPmdyb3VwX2Rlc2NfY291bnQpKQorCQkJcmV0dXJuIEVYVDJfRVRfQ0FOQ0VMX1JFUVVFU1RFRDsKKworCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyB0aGUgaW5vZGVzIGluIHRoZSAiaW5vZGVzIHRvIHByb2Nlc3MiIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfaW5vZGVzKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKQoreworCWludAkJCWk7CisJc3RydWN0IGV4dDJfaW5vZGUJKm9sZF9zdGFzaGVkX2lub2RlOworCWV4dDJfaW5vX3QJCW9sZF9zdGFzaGVkX2lubzsKKwljb25zdCBjaGFyCQkqb2xkX29wZXJhdGlvbjsKKwljaGFyCQkJYnVmWzgwXTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisKKyNpZiAwCisJcHJpbnRmKCJiZWdpbiBwcm9jZXNzX2lub2RlczogIik7CisjZW5kaWYKKwlpZiAocHJvY2Vzc19pbm9kZV9jb3VudCA9PSAwKQorCQlyZXR1cm47CisJb2xkX29wZXJhdGlvbiA9IGVoYW5kbGVyX29wZXJhdGlvbigwKTsKKwlvbGRfc3Rhc2hlZF9pbm9kZSA9IGN0eC0+c3Rhc2hlZF9pbm9kZTsKKwlvbGRfc3Rhc2hlZF9pbm8gPSBjdHgtPnN0YXNoZWRfaW5vOworCXFzb3J0KGlub2Rlc190b19wcm9jZXNzLCBwcm9jZXNzX2lub2RlX2NvdW50LAorCQkgICAgICBzaXplb2Yoc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2spLCBwcm9jZXNzX2lub2RlX2NtcCk7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlmb3IgKGk9MDsgaSA8IHByb2Nlc3NfaW5vZGVfY291bnQ7IGkrKykgeworCQlwY3R4Lmlub2RlID0gY3R4LT5zdGFzaGVkX2lub2RlID0gJmlub2Rlc190b19wcm9jZXNzW2ldLmlub2RlOworCQlwY3R4LmlubyA9IGN0eC0+c3Rhc2hlZF9pbm8gPSBpbm9kZXNfdG9fcHJvY2Vzc1tpXS5pbm87CisKKyNpZiAwCisJCXByaW50ZigiJXUgIiwgcGN0eC5pbm8pOworI2VuZGlmCisJCXNwcmludGYoYnVmLCBfKCJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIpLAorCQkJcGN0eC5pbm8pOworCQllaGFuZGxlcl9vcGVyYXRpb24oYnVmKTsKKwkJY2hlY2tfYmxvY2tzKGN0eCwgJnBjdHgsIGJsb2NrX2J1Zik7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlicmVhazsKKwl9CisJY3R4LT5zdGFzaGVkX2lub2RlID0gb2xkX3N0YXNoZWRfaW5vZGU7CisJY3R4LT5zdGFzaGVkX2lubyA9IG9sZF9zdGFzaGVkX2lubzsKKwlwcm9jZXNzX2lub2RlX2NvdW50ID0gMDsKKyNpZiAwCisJcHJpbnRmKCJlbmQgcHJvY2VzcyBpbm9kZXNcbiIpOworI2VuZGlmCisJZWhhbmRsZXJfb3BlcmF0aW9uKG9sZF9vcGVyYXRpb24pOworfQorCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIHByb2Nlc3NfaW5vZGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2sgKmliX2EgPQorCQkoY29uc3Qgc3RydWN0IHByb2Nlc3NfaW5vZGVfYmxvY2sgKikgYTsKKwljb25zdCBzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayAqaWJfYiA9CisJCShjb25zdCBzdHJ1Y3QgcHJvY2Vzc19pbm9kZV9ibG9jayAqKSBiOworCWludAlyZXQ7CisKKwlyZXQgPSAoaWJfYS0+aW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10gLQorCSAgICAgICBpYl9iLT5pbm9kZS5pX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSk7CisJaWYgKHJldCA9PSAwKQorCQkvKgorCQkgKiBXZSBvbmx5IGNhbGwgcHJvY2Vzc19pbm9kZXMoKSBmb3Igbm9uLWV4dGVudAorCQkgKiBpbm9kZXMsIHNvIGl0J3MgT0sgdG8gcGFzcyBOVUxMIHRvCisJCSAqIGV4dDJmc19maWxlX2FjbF9ibG9jaygpIGhlcmUuCisJCSAqLworCQlyZXQgPSBleHQyZnNfZmlsZV9hY2xfYmxvY2soMCwgJihpYl9hLT5pbm9kZSkpIC0KKwkJCWV4dDJmc19maWxlX2FjbF9ibG9jaygwLCAmKGliX2ItPmlub2RlKSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBpYl9hLT5pbm8gLSBpYl9iLT5pbm87CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1hcmsgYW4gaW5vZGUgYXMgYmVpbmcgYmFkIGluIHNvbWUgd2hhdAorICovCitzdGF0aWMgdm9pZCBtYXJrX2lub2RlX2JhZChlMmZzY2tfdCBjdHgsIGlub190IGlubykKK3sKKwlzdHJ1Y3QJCXByb2JsZW1fY29udGV4dCBwY3R4OworCisJaWYgKCFjdHgtPmlub2RlX2JhZF9tYXApIHsKKwkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCQlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGN0eC0+ZnMsCisJCQkJXygiYmFkIGlub2RlIG1hcCIpLCBFWFQyRlNfQk1BUDY0X1JCVFJFRSwKKwkJCQkiaW5vZGVfYmFkX21hcCIsICZjdHgtPmlub2RlX2JhZF9tYXApOworCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlwY3R4Lm51bSA9IDM7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQkJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuOworCQl9CisJfQorCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9iYWRfbWFwLCBpbm8pOworfQorCitzdGF0aWMgdm9pZCBhZGRfZW5jcnlwdGVkX2RpcihlMmZzY2tfdCBjdHgsIGlub190IGlubykKK3sKKwlzdHJ1Y3QJCXByb2JsZW1fY29udGV4dCBwY3R4OworCisJaWYgKCFjdHgtPmVuY3J5cHRlZF9kaXJzKSB7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc191MzJfbGlzdF9jcmVhdGUoJmN0eC0+ZW5jcnlwdGVkX2RpcnMsIDApOworCQlpZiAocGN0eC5lcnJjb2RlKQorCQkJZ290byBlcnJvcjsKKwl9CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX3UzMl9saXN0X2FkZChjdHgtPmVuY3J5cHRlZF9kaXJzLCBpbm8pOworCWlmIChwY3R4LmVycmNvZGUgPT0gMCkKKwkJcmV0dXJuOworZXJyb3I6CisJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX0VOQ1JZUFRFRF9ESVJMSVNULCAmcGN0eCk7CisJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIHdpbGwgYWxsb2NhdGUgdGhlIGlub2RlICJiYiIgKGJhZGJsb2NrKSBtYXAgdGFibGUKKyAqLworc3RhdGljIHZvaWQgYWxsb2NfYmJfbWFwKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QJCXByb2JsZW1fY29udGV4dCBwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGN0eC0+ZnMsCisJCQlfKCJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIiksIEVYVDJGU19CTUFQNjRfUkJUUkVFLAorCQkJImlub2RlX2JiX21hcCIsICZjdHgtPmlub2RlX2JiX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDQ7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9JQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgd2lsbCBhbGxvY2F0ZSB0aGUgaW5vZGUgaW1hZ2ljIHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkIGFsbG9jX2ltYWdpY19tYXAoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdAkJcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoY3R4LT5mcywKKwkJCV8oImltYWdpYyBpbm9kZSBtYXAiKSwgRVhUMkZTX0JNQVA2NF9SQlRSRUUsCisJCQkiaW5vZGVfaW1hZ2ljX21hcCIsICZjdHgtPmlub2RlX2ltYWdpY19tYXApOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSA1OworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KK30KKworLyoKKyAqIE1hcmtzIGEgYmxvY2sgYXMgaW4gdXNlLCBzZXR0aW5nIHRoZSBkdXBfbWFwIGlmIGl0J3MgYmVlbiBzZXQKKyAqIGFscmVhZHkuICBDYWxsZWQgYnkgcHJvY2Vzc19ibG9jayBhbmQgcHJvY2Vzc19iYWRfYmxvY2suCisgKgorICogV0FSTklORzogQXNzdW1lcyBjaGVja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSB0byBtYWtlIHN1cmUgYmxvY2sKKyAqIGlzIHZhbGlkLiAgVGhpcyBpcyB0cnVlIGluIGJvdGggcHJvY2Vzc19ibG9jayBhbmQgcHJvY2Vzc19iYWRfYmxvY2suCisgKi8KK3N0YXRpYyBfSU5MSU5FXyB2b2lkIG1hcmtfYmxvY2tfdXNlZChlMmZzY2tfdCBjdHgsIGJsazY0X3QgYmxvY2spCit7CisJc3RydWN0CQlwcm9ibGVtX2NvbnRleHQgcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibG9jaykpIHsKKwkJaWYgKCFjdHgtPmJsb2NrX2R1cF9tYXApIHsKKwkJCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoY3R4LT5mcywKKwkJCQkJXygibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiKSwKKwkJCQkJRVhUMkZTX0JNQVA2NF9SQlRSRUUsICJibG9ja19kdXBfbWFwIiwKKwkJCQkJJmN0eC0+YmxvY2tfZHVwX21hcCk7CisJCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQkJcGN0eC5udW0gPSAzOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BTExPQ0FURV9CQklUTUFQX0VSUk9SLAorCQkJCQkgICAgJnBjdHgpOworCQkJCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2R1cF9tYXAsIGJsb2NrKTsKKwl9IGVsc2UgeworCQlleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBfSU5MSU5FXyB2b2lkIG1hcmtfYmxvY2tzX3VzZWQoZTJmc2NrX3QgY3R4LCBibGs2NF90IGJsb2NrLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsb2NrLCBudW0pKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibG9jaywgbnVtKTsKKwllbHNlCisJCXdoaWxlIChudW0tLSkKKwkJCW1hcmtfYmxvY2tfdXNlZChjdHgsIGJsb2NrKyspOworfQorCisvKgorICogQWRqdXN0IHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sncyByZWZlcmVuY2UgY291bnRzIGF0IHRoZSBlbmQKKyAqIG9mIHBhc3MgMSwgZWl0aGVyIGJ5IHN1YnRyYWN0aW5nIG91dCByZWZlcmVuY2VzIGZvciBFQSBibG9ja3MgdGhhdAorICogYXJlIHN0aWxsIHJlZmVyZW5jZWQgaW4gY3R4LT5yZWZjb3VudCwgb3IgYnkgYWRkaW5nIHJlZmVyZW5jZXMgZm9yCisgKiBFQSBibG9ja3MgdGhhdCBoYWQgZXh0cmEgcmVmZXJlbmNlcyBhcyBhY2NvdW50ZWQgZm9yIGluCisgKiBjdHgtPnJlZmNvdW50X2V4dHJhLgorICovCitzdGF0aWMgdm9pZCBhZGp1c3RfZXh0YXR0cl9yZWZjb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfcmVmY291bnRfdCByZWZjb3VudCwKKwkJCQkgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYWRqdXN0X3NpZ24pCit7CisJc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyIAkqaGVhZGVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJCXBjdHg7CisJZXh0Ml9maWxzeXMJCQlmcyA9IGN0eC0+ZnM7CisJYmxrNjRfdAkJCQlibGs7CisJX191MzIJCQkJc2hvdWxkX2JlOworCWludAkJCQljb3VudDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwllYV9yZWZjb3VudF9pbnRyX2JlZ2luKHJlZmNvdW50KTsKKwl3aGlsZSAoMSkgeworCQlpZiAoKGJsayA9IGVhX3JlZmNvdW50X2ludHJfbmV4dChyZWZjb3VudCwgJmNvdW50KSkgPT0gMCkKKwkJCWJyZWFrOworCQlwY3R4LmJsayA9IGJsazsKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX3JlYWRfZXh0X2F0dHIyKGZzLCBibGssIGJsb2NrX2J1Zik7CisJCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FWFRBVFRSX1JFQURfQUJPUlQsICZwY3R4KTsKKwkJCXJldHVybjsKKwkJfQorCQloZWFkZXIgPSAoc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICopIGJsb2NrX2J1ZjsKKwkJcGN0eC5ibGtjb3VudCA9IGhlYWRlci0+aF9yZWZjb3VudDsKKwkJc2hvdWxkX2JlID0gaGVhZGVyLT5oX3JlZmNvdW50ICsgYWRqdXN0X3NpZ24gKiBjb3VudDsKKwkJcGN0eC5udW0gPSBzaG91bGRfYmU7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfRVhUQVRUUl9SRUZDT1VOVCwgJnBjdHgpKSB7CisJCQloZWFkZXItPmhfcmVmY291bnQgPSBzaG91bGRfYmU7CisJCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfd3JpdGVfZXh0X2F0dHIyKGZzLCBibGssCisJCQkJCQkJICAgICBibG9ja19idWYpOworCQkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FWFRBVFRSX1dSSVRFX0FCT1JULAorCQkJCQkgICAgJnBjdHgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogSGFuZGxlIHByb2Nlc3NpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9ja3MKKyAqLworc3RhdGljIGludCBjaGVja19leHRfYXR0cihlMmZzY2tfdCBjdHgsIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgsCisJCQkgICBjaGFyICpibG9ja19idWYpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaW5vID0gcGN0eC0+aW5vOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSA9IHBjdHgtPmlub2RlOworCWJsazY0X3QJCWJsazsKKwljaGFyICoJCWVuZDsKKwlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqZW50cnk7CisJaW50CQljb3VudDsKKwlyZWdpb25fdAlyZWdpb24gPSAwOworCisJYmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSk7CisJaWYgKGJsayA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIEV4dGVuZGVkIGF0dHJpYnV0ZSBmbGFnIGlzbid0IHNldCwgdGhlbiBhIG5vbi16ZXJvCisJICogZmlsZSBhY2wgbWVhbnMgdGhhdCB0aGUgaW5vZGUgaXMgY29ycnVwdGVkLgorCSAqCisJICogT3IgaWYgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBpcyBhbiBpbnZhbGlkIGJsb2NrLAorCSAqIHRoZW4gdGhlIGlub2RlIGlzIGFsc28gY29ycnVwdGVkLgorCSAqLworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIpIHx8CisJICAgIChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCW1hcmtfaW5vZGVfYmFkKGN0eCwgaW5vKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgZWEgYml0bWFwIGhhc24ndCBiZWVuIGFsbG9jYXRlZCwgY3JlYXRlIGl0ICovCisJaWYgKCFjdHgtPmJsb2NrX2VhX21hcCkgeworCQlwY3R4LT5lcnJjb2RlID0gZTJmc2NrX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywKKwkJCQkJXygiZXh0IGF0dHIgYmxvY2sgbWFwIiksCisJCQkJCUVYVDJGU19CTUFQNjRfUkJUUkVFLCAiYmxvY2tfZWFfbWFwIiwKKwkJCQkJJmN0eC0+YmxvY2tfZWFfbWFwKTsKKwkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCXBjdHgtPm51bSA9IDI7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfQkJJVE1BUF9FUlJPUiwgcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBDcmVhdGUgdGhlIEVBIHJlZmNvdW50IHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIWN0eC0+cmVmY291bnQpIHsKKwkJcGN0eC0+ZXJyY29kZSA9IGVhX3JlZmNvdW50X2NyZWF0ZSgwLCAmY3R4LT5yZWZjb3VudCk7CisJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQlwY3R4LT5udW0gPSAxOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FMTE9DQVRFX1JFRkNPVU5ULCBwY3R4KTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworI2lmIDAKKwkvKiBEZWJ1Z2dpbmcgdGV4dCAqLworCXByaW50ZigiSW5vZGUgJXUgaGFzIEVBIGJsb2NrICV1XG4iLCBpbm8sIGJsayk7CisjZW5kaWYKKworCS8qIEhhdmUgd2Ugc2VlbiB0aGlzIEVBIGJsb2NrIGJlZm9yZT8gKi8KKwlpZiAoZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZWFfbWFwLCBibGspKSB7CisJCWlmIChlYV9yZWZjb3VudF9kZWNyZW1lbnQoY3R4LT5yZWZjb3VudCwgYmxrLCAwKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJCS8qIE9vb3BzLCB0aGlzIEVBIHdhcyByZWZlcmVuY2VkIG1vcmUgdGhhbiBpdCBzdGF0ZWQgKi8KKwkJaWYgKCFjdHgtPnJlZmNvdW50X2V4dHJhKSB7CisJCQlwY3R4LT5lcnJjb2RlID0gZWFfcmVmY291bnRfY3JlYXRlKDAsCisJCQkJCSAgICZjdHgtPnJlZmNvdW50X2V4dHJhKTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQkJcGN0eC0+bnVtID0gMjsKKwkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUxMT0NBVEVfUkVGQ09VTlQsIHBjdHgpOworCQkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJZWFfcmVmY291bnRfaW5jcmVtZW50KGN0eC0+cmVmY291bnRfZXh0cmEsIGJsaywgMCk7CisJCXJldHVybiAxOworCX0KKworCS8qCisJICogT0ssIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIEVBIGJsb2NrIHlldC4gIFNvIHdlIG5lZWQgdG8KKwkgKiB2YWxpZGF0ZSBpdAorCSAqLworCXBjdHgtPmJsayA9IGJsazsKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX3JlYWRfZXh0X2F0dHIyKGZzLCBibGssIGJsb2NrX2J1Zik7CisJaWYgKHBjdHgtPmVycmNvZGUgJiYgZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JFQURfRUFfQkxPQ0ssIHBjdHgpKQorCQlnb3RvIGNsZWFyX2V4dGF0dHI7CisJaGVhZGVyID0gKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqKSBibG9ja19idWY7CisJcGN0eC0+YmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSk7CisJaWYgKCgoY3R4LT5leHRfYXR0cl92ZXIgPT0gMSkgJiYKKwkgICAgIChoZWFkZXItPmhfbWFnaWMgIT0gRVhUMl9FWFRfQVRUUl9NQUdJQ192MSkpIHx8CisJICAgICgoY3R4LT5leHRfYXR0cl92ZXIgPT0gMikgJiYKKwkgICAgIChoZWFkZXItPmhfbWFnaWMgIT0gRVhUMl9FWFRfQVRUUl9NQUdJQykpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkFEX0VBX0JMT0NLLCBwY3R4KSkKKwkJCWdvdG8gY2xlYXJfZXh0YXR0cjsKKwl9CisKKwlpZiAoaGVhZGVyLT5oX2Jsb2NrcyAhPSAxKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfRUFfTVVMVElfQkxPQ0ssIHBjdHgpKQorCQkJZ290byBjbGVhcl9leHRhdHRyOworCX0KKworCXJlZ2lvbiA9IHJlZ2lvbl9jcmVhdGUoMCwgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VBX0FMTE9DX1JFR0lPTl9BQk9SVCwgcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybiAwOworCX0KKwlpZiAocmVnaW9uX2FsbG9jYXRlKHJlZ2lvbiwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlcikpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfRUFfQUxMT0NfQ09MTElTSU9OLCBwY3R4KSkKKwkJCWdvdG8gY2xlYXJfZXh0YXR0cjsKKwl9CisKKwllbnRyeSA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKShoZWFkZXIrMSk7CisJZW5kID0gYmxvY2tfYnVmICsgZnMtPmJsb2Nrc2l6ZTsKKwl3aGlsZSAoKGNoYXIgKillbnRyeSA8IGVuZCAmJiAqKF9fdTMyICopZW50cnkpIHsKKwkJX191MzIgaGFzaDsKKworCQlpZiAocmVnaW9uX2FsbG9jYXRlKHJlZ2lvbiwgKGNoYXIgKillbnRyeSAtIChjaGFyICopaGVhZGVyLAorCQkJICAgICAgICAgICBFWFQyX0VYVF9BVFRSX0xFTihlbnRyeS0+ZV9uYW1lX2xlbikpKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VBX0FMTE9DX0NPTExJU0lPTiwgcGN0eCkpCisJCQkJZ290byBjbGVhcl9leHRhdHRyOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChjdHgtPmV4dF9hdHRyX3ZlciA9PSAxICYmCisJCSAgICAgKGVudHJ5LT5lX25hbWVfbGVuID09IDAgfHwgZW50cnktPmVfbmFtZV9pbmRleCAhPSAwKSkgfHwKKwkJICAgIChjdHgtPmV4dF9hdHRyX3ZlciA9PSAyICYmCisJCSAgICAgZW50cnktPmVfbmFtZV9pbmRleCA9PSAwKSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FQV9CQURfTkFNRSwgcGN0eCkpCisJCQkJZ290byBjbGVhcl9leHRhdHRyOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVudHJ5LT5lX3ZhbHVlX2Jsb2NrICE9IDApIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfRUFfQkFEX1ZBTFVFLCBwY3R4KSkKKwkJCQlnb3RvIGNsZWFyX2V4dGF0dHI7CisJCX0KKwkJaWYgKGVudHJ5LT5lX3ZhbHVlX29mZnMgKyBlbnRyeS0+ZV92YWx1ZV9zaXplID4gZnMtPmJsb2Nrc2l6ZSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9FQV9CQURfVkFMVUUsIHBjdHgpKQorCQkJCWdvdG8gY2xlYXJfZXh0YXR0cjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlbnRyeS0+ZV92YWx1ZV9zaXplICYmCisJCSAgICByZWdpb25fYWxsb2NhdGUocmVnaW9uLCBlbnRyeS0+ZV92YWx1ZV9vZmZzLAorCQkJCSAgICBFWFQyX0VYVF9BVFRSX1NJWkUoZW50cnktPmVfdmFsdWVfc2l6ZSkpKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VBX0FMTE9DX0NPTExJU0lPTiwgcGN0eCkpCisJCQkJZ290byBjbGVhcl9leHRhdHRyOworCQl9CisKKwkJaGFzaCA9IGV4dDJmc19leHRfYXR0cl9oYXNoX2VudHJ5KGVudHJ5LCBibG9ja19idWYgKworCQkJCQkJCSBlbnRyeS0+ZV92YWx1ZV9vZmZzKTsKKworCQlpZiAoZW50cnktPmVfaGFzaCAhPSBoYXNoKSB7CisJCQlwY3R4LT5udW0gPSBlbnRyeS0+ZV9oYXNoOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9BVFRSX0hBU0gsIHBjdHgpKQorCQkJCWdvdG8gY2xlYXJfZXh0YXR0cjsKKwkJCWVudHJ5LT5lX2hhc2ggPSBoYXNoOworCQl9CisKKwkJZW50cnkgPSBFWFQyX0VYVF9BVFRSX05FWFQoZW50cnkpOworCX0KKwlpZiAocmVnaW9uX2FsbG9jYXRlKHJlZ2lvbiwgKGNoYXIgKillbnRyeSAtIChjaGFyICopaGVhZGVyLCA0KSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VBX0FMTE9DX0NPTExJU0lPTiwgcGN0eCkpCisJCQlnb3RvIGNsZWFyX2V4dGF0dHI7CisJfQorCXJlZ2lvbl9mcmVlKHJlZ2lvbik7CisKKwljb3VudCA9IGhlYWRlci0+aF9yZWZjb3VudCAtIDE7CisJaWYgKGNvdW50KQorCQllYV9yZWZjb3VudF9zdG9yZShjdHgtPnJlZmNvdW50LCBibGssIGNvdW50KTsKKwltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCWV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2VhX21hcCwgYmxrKTsKKwlyZXR1cm4gMTsKKworY2xlYXJfZXh0YXR0cjoKKwlpZiAocmVnaW9uKQorCQlyZWdpb25fZnJlZShyZWdpb24pOworCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZnMsIGlub2RlLCAwKTsKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAiY2hlY2tfZXh0X2F0dHIiKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAxIGlmIGJhZCBodHJlZSwgMCBpZiBPSyAqLworc3RhdGljIGludCBoYW5kbGVfaHRyZWUoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LAorCQkJZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCWNoYXIgKmJsb2NrX2J1ZikKK3sKKwlzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8JKnJvb3Q7CisJZXh0Ml9maWxzeXMJCQlmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CQkJcmV0dmFsOworCWJsazY0X3QJCQkJYmxrOworCisJaWYgKCghTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0hUUkVFX05PRElSLCBwY3R4KSkgfHwKKwkgICAgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpICYmCisJICAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzFfSFRSRUVfU0VULCBwY3R4KSkpCisJCXJldHVybiAxOworCisJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19ibWFwMihmcywgaW5vLCBpbm9kZSwgMCwgMCwgMCwgMCwgJmJsayk7CisKKwlpZiAoKHBjdHgtPmVycmNvZGUpIHx8CisJICAgIChibGsgPT0gMCkgfHwKKwkgICAgKGJsayA8IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fAorCSAgICAoYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9IVFJFRV9CQURST09ULCBwY3R4KSkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCAmJiBmaXhfcHJvYmxlbShjdHgsIFBSXzFfSFRSRUVfQkFEUk9PVCwgcGN0eCkpCisJCXJldHVybiAxOworCisJLyogWFhYIHNob3VsZCBjaGVjayB0aGF0IGJlZ2lubmluZyBtYXRjaGVzIGEgZGlyZWN0b3J5ICovCisJcm9vdCA9IChzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKikgKGJsb2NrX2J1ZiArIDI0KTsKKworCWlmICgocm9vdC0+cmVzZXJ2ZWRfemVybyB8fCByb290LT5pbmZvX2xlbmd0aCA8IDgpICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9IVFJFRV9CQURST09ULCBwY3R4KSkKKwkJcmV0dXJuIDE7CisKKwlwY3R4LT5udW0gPSByb290LT5oYXNoX3ZlcnNpb247CisJaWYgKChyb290LT5oYXNoX3ZlcnNpb24gIT0gRVhUMl9IQVNIX0xFR0FDWSkgJiYKKwkgICAgKHJvb3QtPmhhc2hfdmVyc2lvbiAhPSBFWFQyX0hBU0hfSEFMRl9NRDQpICYmCisJICAgIChyb290LT5oYXNoX3ZlcnNpb24gIT0gRVhUMl9IQVNIX1RFQSkgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0hUUkVFX0hBU0hWLCBwY3R4KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKHJvb3QtPnVudXNlZF9mbGFncyAmIEVYVDJfSEFTSF9GTEFHX0lOQ09NUEFUKSAmJgorCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzFfSFRSRUVfSU5DT01QQVQsIHBjdHgpKQorCQlyZXR1cm4gMTsKKworCXBjdHgtPm51bSA9IHJvb3QtPmluZGlyZWN0X2xldmVsczsKKwlpZiAoKHJvb3QtPmluZGlyZWN0X2xldmVscyA+IDEpICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9IVFJFRV9ERVBUSCwgcGN0eCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZTJmc2NrX2NsZWFyX2lub2RlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGludCByZXN0YXJ0X2ZsYWcsCisJCQljb25zdCBjaGFyICpzb3VyY2UpCit7CisJaW5vZGUtPmlfZmxhZ3MgPSAwOworCWlub2RlLT5pX2xpbmtzX2NvdW50ID0gMDsKKwlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfbGlua19pbmZvLCBpbm8sIDApOworCWlub2RlLT5pX2R0aW1lID0gY3R4LT5ub3c7CisKKwlleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpbm8pOworCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBpbm8pOworCWlmIChjdHgtPmlub2RlX3JlZ19tYXApCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3JlZ19tYXAsIGlubyk7CisJaWYgKGN0eC0+aW5vZGVfYmFkX21hcCkKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmFkX21hcCwgaW5vKTsKKworCS8qCisJICogSWYgdGhlIGlub2RlIHdhcyBwYXJ0aWFsbHkgYWNjb3VudGVkIGZvciBiZWZvcmUgcHJvY2Vzc2luZworCSAqIHdhcyBhYm9ydGVkLCB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHBhc3MgMSBzY2FuLgorCSAqLworCWN0eC0+ZmxhZ3MgfD0gcmVzdGFydF9mbGFnOworCisJaWYgKGlubyA9PSBFWFQyX0JBRF9JTk8pCisJCW1lbXNldChpbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7CisKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCBzb3VyY2UpOworfQorCitzdGF0aWMgdm9pZCBzY2FuX2V4dGVudF9ub2RlKGUyZnNja190IGN0eCwgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCwKKwkJCSAgICAgc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwYiwKKwkJCSAgICAgYmxrNjRfdCBzdGFydF9ibG9jaywgYmxrNjRfdCBlbmRfYmxvY2ssCisJCQkgICAgIGJsazY0X3QgZW9mX2Jsb2NrLAorCQkJICAgICBleHQyX2V4dGVudF9oYW5kbGVfdCBlaGFuZGxlKQoreworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwlibGs2NF90CQkJYmxrLCBsYXN0X2xibGs7CisJZTJfYmxrY250X3QJCWJsb2NrY250OworCXVuc2lnbmVkIGludAkJaTsKKwlpbnQJCQlpc19kaXIsIGlzX2xlYWY7CisJcHJvYmxlbV90CQlwcm9ibGVtOworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvCWluZm87CisKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhlaGFuZGxlLCAmaW5mbyk7CisJaWYgKHBjdHgtPmVycmNvZGUpCisJCXJldHVybjsKKworCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X2dldChlaGFuZGxlLCBFWFQyX0VYVEVOVF9GSVJTVF9TSUIsCisJCQkJCSAgJmV4dGVudCk7CisJd2hpbGUgKCFwY3R4LT5lcnJjb2RlICYmIGluZm8ubnVtX2VudHJpZXMtLSA+IDApIHsKKwkJaXNfbGVhZiA9IGV4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfTEVBRjsKKwkJaXNfZGlyID0gTElOVVhfU19JU0RJUihwY3R4LT5pbm9kZS0+aV9tb2RlKTsKKwkJbGFzdF9sYmxrID0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbiAtIDE7CisKKwkJcHJvYmxlbSA9IDA7CisJCWlmIChleHRlbnQuZV9wYmxrID09IDAgfHwKKwkJICAgIGV4dGVudC5lX3BibGsgPCBjdHgtPmZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrIHx8CisJCSAgICBleHRlbnQuZV9wYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoY3R4LT5mcy0+c3VwZXIpKQorCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0JBRF9TVEFSVF9CTEs7CisJCWVsc2UgaWYgKGV4dGVudC5lX2xibGsgPCBzdGFydF9ibG9jaykKKwkJCXByb2JsZW0gPSBQUl8xX09VVF9PRl9PUkRFUl9FWFRFTlRTOworCQllbHNlIGlmICgoZW5kX2Jsb2NrICYmIGxhc3RfbGJsayA+IGVuZF9ibG9jaykgJiYKKwkJCSAoIShleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCAmJgorCQkJCWxhc3RfbGJsayA+IGVvZl9ibG9jaykpKQorCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0VORF9PVVRfT0ZfQk9VTkRTOworCQllbHNlIGlmIChpc19sZWFmICYmIGV4dGVudC5lX2xlbiA9PSAwKQorCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0xFTkdUSF9aRVJPOworCQllbHNlIGlmIChpc19sZWFmICYmCisJCQkgKGV4dGVudC5lX3BibGsgKyBleHRlbnQuZV9sZW4pID4KKwkJCSBleHQyZnNfYmxvY2tzX2NvdW50KGN0eC0+ZnMtPnN1cGVyKSkKKwkJCXByb2JsZW0gPSBQUl8xX0VYVEVOVF9FTkRTX0JFWU9ORDsKKwkJZWxzZSBpZiAoaXNfbGVhZiAmJiBpc19kaXIgJiYKKwkJCSAoKGV4dGVudC5lX2xibGsgKyBleHRlbnQuZV9sZW4pID4KKwkJCSAgKDEgPDwgKDIxIC0gY3R4LT5mcy0+c3VwZXItPnNfbG9nX2Jsb2NrX3NpemUpKSkpCisJCQlwcm9ibGVtID0gUFJfMV9UT09CSUdfRElSOworCisJCWlmIChwcm9ibGVtKSB7CityZXBvcnRfcHJvYmxlbToKKwkJCXBjdHgtPmJsayA9IGV4dGVudC5lX3BibGs7CisJCQlwY3R4LT5ibGsyID0gZXh0ZW50LmVfbGJsazsKKwkJCXBjdHgtPm51bSA9IGV4dGVudC5lX2xlbjsKKwkJCXBjdHgtPmJsa2NvdW50ID0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQkJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCQkJCXBjdHgtPmVycmNvZGUgPQorCQkJCQlleHQyZnNfZXh0ZW50X2RlbGV0ZShlaGFuZGxlLCAwKTsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJCQlwY3R4LT5zdHIgPSAiZXh0MmZzX2V4dGVudF9kZWxldGUiOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoZWhhbmRsZSk7CisJCQkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19leHRlbnRfZ2V0KGVoYW5kbGUsCisJCQkJCQkJCSAgRVhUMl9FWFRFTlRfQ1VSUkVOVCwKKwkJCQkJCQkJICAmZXh0ZW50KTsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSA9PSBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERSkgeworCQkJCQlwY3R4LT5lcnJjb2RlID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBuZXh0OworCQl9CisKKwkJaWYgKCFpc19sZWFmKSB7CisJCQlibGs2NF90IGxibGsgPSBleHRlbnQuZV9sYmxrOworCisJCQlibGsgPSBleHRlbnQuZV9wYmxrOworCQkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19leHRlbnRfZ2V0KGVoYW5kbGUsCisJCQkJCQkgIEVYVDJfRVhURU5UX0RPV04sICZleHRlbnQpOworCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQlwY3R4LT5zdHIgPSAiRVhUMl9FWFRFTlRfRE9XTiI7CisJCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0hFQURFUl9JTlZBTElEOworCQkJCWlmIChwY3R4LT5lcnJjb2RlID09IEVYVDJfRVRfRVhURU5UX0hFQURFUl9CQUQpCisJCQkJCWdvdG8gcmVwb3J0X3Byb2JsZW07CisJCQkJcmV0dXJuOworCQkJfQorCQkJLyogVGhlIG5leHQgZXh0ZW50IHNob3VsZCBtYXRjaCB0aGlzIGluZGV4J3MgbG9naWNhbCBzdGFydCAqLworCQkJaWYgKGV4dGVudC5lX2xibGsgIT0gbGJsaykgeworCQkJCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvIGVfaW5mbzsKKworCQkJCWV4dDJmc19leHRlbnRfZ2V0X2luZm8oZWhhbmRsZSwgJmVfaW5mbyk7CisJCQkJcGN0eC0+YmxrID0gbGJsazsKKwkJCQlwY3R4LT5ibGsyID0gZXh0ZW50LmVfbGJsazsKKwkJCQlwY3R4LT5udW0gPSBlX2luZm8uY3Vycl9sZXZlbCAtIDE7CisJCQkJcHJvYmxlbSA9IFBSXzFfRVhURU5UX0lOREVYX1NUQVJUX0lOVkFMSUQ7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgcGN0eCkpCisJCQkJCWV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoZWhhbmRsZSk7CisJCQl9CisJCQlzY2FuX2V4dGVudF9ub2RlKGN0eCwgcGN0eCwgcGIsIGV4dGVudC5lX2xibGssCisJCQkJCSBsYXN0X2xibGssIGVvZl9ibG9jaywgZWhhbmRsZSk7CisJCQlpZiAocGN0eC0+ZXJyY29kZSkKKwkJCQlyZXR1cm47CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9nZXQoZWhhbmRsZSwKKwkJCQkJCSAgRVhUMl9FWFRFTlRfVVAsICZleHRlbnQpOworCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQlwY3R4LT5zdHIgPSAiRVhUMl9FWFRFTlRfVVAiOworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1hcmtfYmxvY2tfdXNlZChjdHgsIGJsayk7CisJCQlwYi0+bnVtX2Jsb2NrcysrOworCQkJZ290byBuZXh0OworCQl9CisKKwkJaWYgKChwYi0+cHJldmlvdXNfYmxvY2sgIT0gMCkgJiYKKwkJICAgIChwYi0+cHJldmlvdXNfYmxvY2srMSAhPSBleHRlbnQuZV9wYmxrKSkgeworCQkJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRlJBR0NIRUNLKSB7CisJCQkJY2hhciB0eXBlID0gJz8nOworCisJCQkJaWYgKHBiLT5pc19kaXIpCisJCQkJCXR5cGUgPSAnZCc7CisJCQkJZWxzZSBpZiAocGItPmlzX3JlZykKKwkJCQkJdHlwZSA9ICdmJzsKKworCQkJCXByaW50ZigoIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSAiCisJCQkJCSJhY3R1YWwgZXh0ZW50ICIKKwkJCQkJInBoeXMgJTZsdSBsb2cgJWx1IGxlbiAlbHVcbiIpLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgcGN0eC0+aW5vLCB0eXBlLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgcGItPnByZXZpb3VzX2Jsb2NrKzEsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBleHRlbnQuZV9wYmxrLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgZXh0ZW50LmVfbGJsaywKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGV4dGVudC5lX2xlbik7CisJCQl9CisJCQlwYi0+ZnJhZ21lbnRlZCA9IDE7CisJCX0KKwkJd2hpbGUgKGlzX2RpciAmJiAoKytwYi0+bGFzdF9kYl9ibG9jayA8CisJCQkJICAoZTJfYmxrY250X3QpIGV4dGVudC5lX2xibGspKSB7CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGN0eC0+ZnMtPmRibGlzdCwKKwkJCQkJCQkgICAgICBwYi0+aW5vLCAwLAorCQkJCQkJCSAgICAgIHBiLT5sYXN0X2RiX2Jsb2NrKTsKKwkJCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCQkJcGN0eC0+YmxrID0gMDsKKwkJCQlwY3R4LT5udW0gPSBwYi0+bGFzdF9kYl9ibG9jazsKKwkJCQlnb3RvIGZhaWxlZF9hZGRfZGlyX2Jsb2NrOworCQkJfQorCQl9CisJCWlmICghY3R4LT5mcy0+Y2x1c3Rlcl9yYXRpb19iaXRzKSB7CisJCQltYXJrX2Jsb2Nrc191c2VkKGN0eCwgZXh0ZW50LmVfcGJsaywgZXh0ZW50LmVfbGVuKTsKKwkJCXBiLT5udW1fYmxvY2tzICs9IGV4dGVudC5lX2xlbjsKKwkJfQorCQlmb3IgKGJsayA9IGV4dGVudC5lX3BibGssIGJsb2NrY250ID0gZXh0ZW50LmVfbGJsaywgaSA9IDA7CisJCSAgICAgaSA8IGV4dGVudC5lX2xlbjsKKwkJICAgICBibGsrKywgYmxvY2tjbnQrKywgaSsrKSB7CisJCQlpZiAoY3R4LT5mcy0+Y2x1c3Rlcl9yYXRpb19iaXRzICYmCisJCQkgICAgIShwYi0+cHJldmlvdXNfYmxvY2sgJiYKKwkJCSAgICAgIChFWFQyRlNfQjJDKGN0eC0+ZnMsIGJsaykgPT0KKwkJCSAgICAgICBFWFQyRlNfQjJDKGN0eC0+ZnMsIHBiLT5wcmV2aW91c19ibG9jaykpICYmCisJCQkgICAgICAoYmxrICYgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkgPT0KKwkJCSAgICAgICgodW5zaWduZWQpIGJsb2NrY250ICYgRVhUMkZTX0NMVVNURVJfTUFTSyhjdHgtPmZzKSkpKSB7CisJCQkJbWFya19ibG9ja191c2VkKGN0eCwgYmxrKTsKKwkJCQlwYi0+bnVtX2Jsb2NrcysrOworCQkJfQorCisJCQlwYi0+cHJldmlvdXNfYmxvY2sgPSBibGs7CisKKwkJCWlmIChpc19kaXIpIHsKKwkJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGN0eC0+ZnMtPmRibGlzdCwgcGN0eC0+aW5vLCBibGssIGJsb2NrY250KTsKKwkJCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJCQlwY3R4LT5ibGsgPSBibGs7CisJCQkJCXBjdHgtPm51bSA9IGJsb2NrY250OworCQkJCWZhaWxlZF9hZGRfZGlyX2Jsb2NrOgorCQkJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFfQUREX0RCTE9DSywgcGN0eCk7CisJCQkJCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCQkJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChpc19kaXIgJiYgZXh0ZW50LmVfbGVuID4gMCkKKwkJCXBiLT5sYXN0X2RiX2Jsb2NrID0gYmxvY2tjbnQgLSAxOworCQlwYi0+cHJldmlvdXNfYmxvY2sgPSBleHRlbnQuZV9wYmxrICsgZXh0ZW50LmVfbGVuIC0gMTsKKwkJc3RhcnRfYmxvY2sgPSBwYi0+bGFzdF9ibG9jayA9IGxhc3RfbGJsazsKKwkJaWYgKGlzX2xlYWYgJiYgIWlzX2RpciAmJgorCQkgICAgIShleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkpCisJCQlwYi0+bGFzdF9pbml0X2xibG9jayA9IGxhc3RfbGJsazsKKwluZXh0OgorCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9nZXQoZWhhbmRsZSwKKwkJCQkJCSAgRVhUMl9FWFRFTlRfTkVYVF9TSUIsCisJCQkJCQkgICZleHRlbnQpOworCX0KKwlpZiAocGN0eC0+ZXJyY29kZSA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQlwY3R4LT5lcnJjb2RlID0gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tzX2V4dGVudHMoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LAorCQkJCSBzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiKQoreworCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvIGluZm87CisJc3RydWN0IGV4dDJfaW5vZGUJKmlub2RlID0gcGN0eC0+aW5vZGU7CisJZXh0Ml9leHRlbnRfaGFuZGxlX3QJZWhhbmRsZTsKKwlleHQyX2ZpbHN5cwkJZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJCWlubyA9IHBjdHgtPmlubzsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90ICAgICAgICAgICAgICAgICBlb2ZfbGJsazsKKworCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmZWhhbmRsZSk7CisJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9SRUFEX0VYVEVOVCwgcGN0eCkpCisJCQllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAwLAorCQkJCQkgICAiY2hlY2tfYmxvY2tzX2V4dGVudHMiKTsKKwkJcGN0eC0+ZXJyY29kZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldF9pbmZvKGVoYW5kbGUsICZpbmZvKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaWYgKGluZm8ubWF4X2RlcHRoID49IE1BWF9FWFRFTlRfREVQVEhfQ09VTlQpCisJCQlpbmZvLm1heF9kZXB0aCA9IE1BWF9FWFRFTlRfREVQVEhfQ09VTlQtMTsKKwkJY3R4LT5leHRlbnRfZGVwdGhfY291bnRbaW5mby5tYXhfZGVwdGhdKys7CisJfQorCisJZW9mX2xibGsgPSAoKEVYVDJfSV9TSVpFKGlub2RlKSArIGZzLT5ibG9ja3NpemUgLSAxKSA+PgorCQlFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpKSAtIDE7CisJc2Nhbl9leHRlbnRfbm9kZShjdHgsIHBjdHgsIHBiLCAwLCAwLCBlb2ZfbGJsaywgZWhhbmRsZSk7CisJaWYgKHBjdHgtPmVycmNvZGUgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0VYVEVOVF9JVEVSQVRFX0ZBSUxVUkUsIHBjdHgpKSB7CisJCXBiLT5udW1fYmxvY2tzID0gMDsKKwkJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwkJZTJmc2NrX2NsZWFyX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgRTJGX0ZMQUdfUkVTVEFSVCwKKwkJCQkgICAiY2hlY2tfYmxvY2tzX2V4dGVudHMiKTsKKwkJcGN0eC0+ZXJyY29kZSA9IDA7CisJfQorCWV4dDJmc19leHRlbnRfZnJlZShlaGFuZGxlKTsKK30KKworLyoKKyAqIFRoaXMgc3Vicm91dGluZSBpcyBjYWxsZWQgb24gZWFjaCBpbm9kZSB0byBhY2NvdW50IGZvciBhbGwgb2YgdGhlCisgKiBibG9ja3MgdXNlZCBieSB0aGF0IGlub2RlLgorICovCitzdGF0aWMgdm9pZCBjaGVja19ibG9ja3MoZTJmc2NrX3QgY3R4LCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LAorCQkJIGNoYXIgKmJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCWV4dDJfaW5vX3QJaW5vID0gcGN0eC0+aW5vOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSA9IHBjdHgtPmlub2RlOworCXVuc2lnbmVkCWJhZF9zaXplID0gMDsKKwlpbnQJCWRpcnR5X2lub2RlID0gMDsKKwlpbnQJCWV4dGVudF9mczsKKwlfX3U2NAkJc2l6ZTsKKworCXBiLmlubyA9IGlubzsKKwlwYi5udW1fYmxvY2tzID0gMDsKKwlwYi5sYXN0X2Jsb2NrID0gLTE7CisJcGIubGFzdF9pbml0X2xibG9jayA9IC0xOworCXBiLmxhc3RfZGJfYmxvY2sgPSAtMTsKKwlwYi5udW1faWxsZWdhbF9ibG9ja3MgPSAwOworCXBiLnN1cHByZXNzID0gMDsgcGIuY2xlYXIgPSAwOworCXBiLmZyYWdtZW50ZWQgPSAwOworCXBiLmNvbXByZXNzZWQgPSAwOworCXBiLnByZXZpb3VzX2Jsb2NrID0gMDsKKwlwYi5pc19kaXIgPSBMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpOworCXBiLmlzX3JlZyA9IExJTlVYX1NfSVNSRUcoaW5vZGUtPmlfbW9kZSk7CisJcGIubWF4X2Jsb2NrcyA9IDEgPDwgKDMxIC0gZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplKTsKKwlwYi5pbm9kZSA9IGlub2RlOworCXBiLnBjdHggPSBwY3R4OworCXBiLmN0eCA9IGN0eDsKKwlwY3R4LT5pbm8gPSBpbm87CisJcGN0eC0+ZXJyY29kZSA9IDA7CisKKwlleHRlbnRfZnMgPSAoY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisgICAgICAgICAgICAgICAgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUyk7CisKKwlpZiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0NPTVBSQkxLX0ZMKSB7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQ09NUFJFU1NJT04pCisJCQlwYi5jb21wcmVzc2VkID0gMTsKKwkJZWxzZSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0NPTVBSX1NFVCwgcGN0eCkpIHsKKwkJCQlpbm9kZS0+aV9mbGFncyAmPSB+RVhUMl9DT01QUkJMS19GTDsKKwkJCQlkaXJ0eV9pbm9kZSsrOworCQkJfQorCQl9CisJfQorCisJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgaW5vZGUpICYmCisJICAgIGNoZWNrX2V4dF9hdHRyKGN0eCwgcGN0eCwgYmxvY2tfYnVmKSkgeworCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQkJZ290byBvdXQ7CisJCXBiLm51bV9ibG9ja3MrKzsKKwl9CisKKwlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCBpbm9kZSkpIHsKKwkJaWYgKGV4dGVudF9mcyAmJiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpKQorCQkJY2hlY2tfYmxvY2tzX2V4dGVudHMoY3R4LCBwY3R4LCAmcGIpOworCQllbHNlIHsKKwkJCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywKKwkJCQkJCXBiLmlzX2RpciA/IEJMT0NLX0ZMQUdfSE9MRSA6IDAsCisJCQkJCQlibG9ja19idWYsIHByb2Nlc3NfYmxvY2ssICZwYik7CisJCQkvKgorCQkJICogV2UgZG8gbm90IGhhdmUgdW5pbml0aWFsaXplZCBleHRlbnRzIGluIG5vbiBleHRlbnQKKwkJCSAqIGZpbGVzLgorCQkJICovCisJCQlwYi5sYXN0X2luaXRfbGJsb2NrID0gcGIubGFzdF9ibG9jazsKKwkJfQorCX0KKwllbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX0JMT0NLKTsKKwllbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX1RPT0JJRyk7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJZ290byBvdXQ7CisJaWYgKHBjdHgtPmVycmNvZGUpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CTE9DS19JVEVSQVRFLCBwY3R4KTsKKworCWlmIChwYi5mcmFnbWVudGVkICYmIHBiLm51bV9ibG9ja3MgPCBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCkgeworCQlpZiAoTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCWN0eC0+ZnNfZnJhZ21lbnRlZF9kaXIrKzsKKwkJZWxzZQorCQkJY3R4LT5mc19mcmFnbWVudGVkKys7CisJfQorCisJaWYgKHBiLmNsZWFyKSB7CisJCWUyZnNja19jbGVhcl9pbm9kZShjdHgsIGlubywgaW5vZGUsIEUyRl9GTEFHX1JFU1RBUlQsCisJCQkJICAgImNoZWNrX2Jsb2NrcyIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkgeworCQlpZiAoaGFuZGxlX2h0cmVlKGN0eCwgcGN0eCwgaW5vLCBpbm9kZSwgYmxvY2tfYnVmKSkgeworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gfkVYVDJfSU5ERVhfRkw7CisJCQlkaXJ0eV9pbm9kZSsrOworCQl9IGVsc2UgeworI2lmZGVmIEVOQUJMRV9IVFJFRQorCQkJZTJmc2NrX2FkZF9keF9kaXIoY3R4LCBpbm8sIHBiLmxhc3RfYmxvY2srMSk7CisjZW5kaWYKKwkJfQorCX0KKworCWlmICghcGIubnVtX2Jsb2NrcyAmJiBwYi5pc19kaXIpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9aRVJPX0xFTkdUSF9ESVIsIHBjdHgpKSB7CisJCQllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAwLCAiY2hlY2tfYmxvY2tzIik7CisJCQljdHgtPmZzX2RpcmVjdG9yeV9jb3VudC0tOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGlubyA9PSBFWFQyX1JPT1RfSU5PIHx8IGlubyA+PSBFWFQyX0ZJUlNUX0lOT0RFKGN0eC0+ZnMtPnN1cGVyKSkgeworCQlxdW90YV9kYXRhX2FkZChjdHgtPnFjdHgsIGlub2RlLCBpbm8sCisJCQkgICAgICAgcGIubnVtX2Jsb2NrcyAqIGZzLT5ibG9ja3NpemUpOworCQlxdW90YV9kYXRhX2lub2RlcyhjdHgtPnFjdHgsIGlub2RlLCBpbm8sICsxKTsKKwl9CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCQlwYi5udW1fYmxvY2tzICo9IChmcy0+YmxvY2tzaXplIC8gNTEyKTsKKwlwYi5udW1fYmxvY2tzICo9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKyNpZiAwCisJcHJpbnRmKCJpbm9kZSAldSwgaV9zaXplID0gJXUsIGxhc3RfYmxvY2sgPSAlbGxkLCBpX2Jsb2Nrcz0lbGx1LCBudW1fYmxvY2tzID0gJWxsdVxuIiwKKwkgICAgICAgaW5vLCBpbm9kZS0+aV9zaXplLCBwYi5sYXN0X2Jsb2NrLCBleHQyZnNfaW5vZGVfaV9ibG9ja3MoZnMsIGlub2RlKSwKKwkgICAgICAgcGIubnVtX2Jsb2Nrcyk7CisjZW5kaWYKKwlpZiAocGIuaXNfZGlyKSB7CisJCWludCBuYmxvY2sgPSBpbm9kZS0+aV9zaXplID4+IEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcik7CisJCWlmIChpbm9kZS0+aV9zaXplICYgKGZzLT5ibG9ja3NpemUgLSAxKSkKKwkJCWJhZF9zaXplID0gNTsKKwkJZWxzZSBpZiAobmJsb2NrID4gKHBiLmxhc3RfYmxvY2sgKyAxKSkKKwkJCWJhZF9zaXplID0gMTsKKwkJZWxzZSBpZiAobmJsb2NrIDwgKHBiLmxhc3RfYmxvY2sgKyAxKSkgeworCQkJaWYgKCgocGIubGFzdF9ibG9jayArIDEpIC0gbmJsb2NrKSA+CisJCQkgICAgZnMtPnN1cGVyLT5zX3ByZWFsbG9jX2Rpcl9ibG9ja3MpCisJCQkJYmFkX3NpemUgPSAyOworCQl9CisJfSBlbHNlIHsKKwkJZTJfYmxrY250X3QgYmxrcGcgPSBjdHgtPmJsb2Nrc19wZXJfcGFnZTsKKworCQlzaXplID0gRVhUMl9JX1NJWkUoaW5vZGUpOworCQlpZiAoKHBiLmxhc3RfaW5pdF9sYmxvY2sgPj0gMCkgJiYKKwkJICAgIC8qIGFsbG93IGFsbG9jYXRlZCBibG9ja3MgdG8gZW5kIG9mIFBBR0VfU0laRSAqLworCQkgICAgKHNpemUgPCAoX191NjQpcGIubGFzdF9pbml0X2xibG9jayAqIGZzLT5ibG9ja3NpemUpICYmCisJCSAgICAocGIubGFzdF9pbml0X2xibG9jayAvIGJsa3BnICogYmxrcGcgIT0gcGIubGFzdF9pbml0X2xibG9jayB8fAorCQkgICAgIHNpemUgPCAoX191NjQpKHBiLmxhc3RfaW5pdF9sYmxvY2sgJiB+KGJsa3BnLTEpKSAqCisJCSAgICAgZnMtPmJsb2Nrc2l6ZSkpCisJCQliYWRfc2l6ZSA9IDM7CisJCWVsc2UgaWYgKCEoZXh0ZW50X2ZzICYmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpICYmCisJCQkgc2l6ZSA+IGV4dDJfbWF4X3NpemVzW2ZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZV0pCisJCQkvKiB0b28gYmlnIGZvciBhIGRpcmVjdC9pbmRpcmVjdC1tYXBwZWQgZmlsZSAqLworCQkJYmFkX3NpemUgPSA0OworCQllbHNlIGlmICgoZXh0ZW50X2ZzICYmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpICYmCisJCQkgc2l6ZSA+CisJCQkgKCgxVUxMIDw8ICgzMiArIEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcikpKSAtIDEpKQorCQkJLyogdG9vIGJpZyBmb3IgYW4gZXh0ZW50LWJhc2VkIGZpbGUgLSAzMmJpdCBlZV9ibG9jayAqLworCQkJYmFkX3NpemUgPSA2OworCX0KKwkvKiBpX3NpemUgZm9yIHN5bWxpbmtzIGlzIGNoZWNrZWQgZWxzZXdoZXJlICovCisJaWYgKGJhZF9zaXplICYmICFMSU5VWF9TX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCXBjdHgtPm51bSA9IChwYi5sYXN0X2Jsb2NrKzEpICogZnMtPmJsb2Nrc2l6ZTsKKwkJcGN0eC0+Z3JvdXAgPSBiYWRfc2l6ZTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CQURfSV9TSVpFLCBwY3R4KSkgeworCQkJaW5vZGUtPmlfc2l6ZSA9IHBjdHgtPm51bTsKKwkJCWlmICghTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCQlpbm9kZS0+aV9zaXplX2hpZ2ggPSBwY3R4LT5udW0gPj4gMzI7CisJCQlkaXJ0eV9pbm9kZSsrOworCQl9CisJCXBjdHgtPm51bSA9IDA7CisJfQorCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCisJICAgIGV4dDJmc19uZWVkc19sYXJnZV9maWxlX2ZlYXR1cmUoRVhUMl9JX1NJWkUoaW5vZGUpKSkKKwkJY3R4LT5sYXJnZV9maWxlcysrOworCWlmICgocGIubnVtX2Jsb2NrcyAhPSBleHQyZnNfaW5vZGVfaV9ibG9ja3MoZnMsIGlub2RlKSkgfHwKKwkgICAgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCSAgICAgKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpICYmCisJICAgICAoaW5vZGUtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgIT0gMCkpKSB7CisJCXBjdHgtPm51bSA9IHBiLm51bV9ibG9ja3M7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkFEX0lfQkxPQ0tTLCBwY3R4KSkgeworCQkJaW5vZGUtPmlfYmxvY2tzID0gcGIubnVtX2Jsb2NrczsKKwkJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0gcGIubnVtX2Jsb2NrcyA+PiAzMjsKKwkJCWRpcnR5X2lub2RlKys7CisJCX0KKwkJcGN0eC0+bnVtID0gMDsKKwl9CisKKwlpZiAoY3R4LT5kaXJzX3RvX2hhc2ggJiYgcGIuaXNfZGlyICYmCisJICAgICEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0lOREVYX0ZMKSAmJgorCSAgICAoKGlub2RlLT5pX3NpemUgLyBmcy0+YmxvY2tzaXplKSA+PSAzKSkKKwkJZXh0MmZzX3UzMl9saXN0X2FkZChjdHgtPmRpcnNfdG9faGFzaCwgaW5vKTsKKworb3V0OgorCWlmIChkaXJ0eV9pbm9kZSkKKwkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCBpbm9kZSwgImNoZWNrX2Jsb2NrcyIpOworfQorCisjaWYgMAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYnkgcHJvY2VzcyBibG9jayB3aGVuIGFuIGlsbGVnYWwgYmxvY2sgaXMKKyAqIGZvdW5kLiAgSXQgcmV0dXJucyBhIGRlc2NyaXB0aW9uIGFib3V0IHdoeSB0aGUgYmxvY2sgaXMgaWxsZWdhbAorICovCitzdGF0aWMgY2hhciAqZGVzY3JpYmVfaWxsZWdhbF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaykKK3sKKwlibGs2NF90CXN1cGVyOworCWludAlpOworCXN0YXRpYyBjaGFyCXByb2JsZW1bODBdOworCisJc3VwZXIgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlzdHJjcHkocHJvYmxlbSwgIlBST0dSQU1NSU5HIEVSUk9SOiBVbmtub3duIHJlYXNvbiBmb3IgaWxsZWdhbCBibG9jayIpOworCWlmIChibG9jayA8IHN1cGVyKSB7CisJCXNwcmludGYocHJvYmxlbSwgIjwgRklSU1RCTE9DSyAoJXUpIiwgc3VwZXIpOworCQlyZXR1cm4ocHJvYmxlbSk7CisJfSBlbHNlIGlmIChibG9jayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHsKKwkJc3ByaW50Zihwcm9ibGVtLCAiPiBCTE9DS1MgKCV1KSIsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisJCXJldHVybihwcm9ibGVtKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKGJsb2NrID09IHN1cGVyKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgc3VwZXJibG9jayBpbiBncm91cCAlZCIsIGkpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGJsb2NrID4gc3VwZXIgJiYKKwkJICAgIGJsb2NrIDw9IChzdXBlciArIGZzLT5kZXNjX2Jsb2NrcykpIHsKKwkJCXNwcmludGYocHJvYmxlbSwgImlzIGluIHRoZSBncm91cCBkZXNjcmlwdG9ycyAiCisJCQkJIm9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPT0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgYmxvY2sgYml0bWFwIG9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPT0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlzcHJpbnRmKHByb2JsZW0sICJpcyB0aGUgaW5vZGUgYml0bWFwIG9mIGdyb3VwICVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmxvY2sgPj0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgJiYKKwkJICAgIChibG9jayA8IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpCisJCSAgICAgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkpIHsKKwkJCXNwcmludGYocHJvYmxlbSwgImlzIGluIHRoZSBpbm9kZSB0YWJsZSBvZiBncm91cCAlZCIsCisJCQkJaSk7CisJCQlicmVhazsKKwkJfQorCQlzdXBlciArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJcmV0dXJuKHByb2JsZW0pOworfQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBjaGVja19ibG9ja3MoKS4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkgIGJsazY0X3QJKmJsb2NrX25yLAorCQkgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4OworCWJsazY0X3QJYmxrID0gKmJsb2NrX25yOworCWludAlyZXRfY29kZSA9IDA7CisJcHJvYmxlbV90CXByb2JsZW0gPSAwOworCWUyZnNja190CWN0eDsKKworCXAgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwlwY3R4ID0gcC0+cGN0eDsKKwljdHggPSBwLT5jdHg7CisKKwlpZiAocC0+Y29tcHJlc3NlZCAmJiAoYmxrID09IEVYVDJGU19DT01QUkVTU0VEX0JMS0FERFIpKSB7CisJCS8qIHRvZG86IENoZWNrIHRoYXQgdGhlIGNvbXByYmxrX2ZsIGlzIGhpZ2gsIHRoYXQgdGhlCisJCSAgIGJsa2FkZHIgcGF0dGVybiBsb29rcyByaWdodCAoYWxsIG5vbi1ob2xlcyB1cCB0bworCQkgICBmaXJzdCBFWFQyRlNfQ09NUFJFU1NFRF9CTEtBRERSLCB0aGVuIGFsbAorCQkgICBFWFQyRlNfQ09NUFJFU1NFRF9CTEtBRERSIHVwIHRvIGVuZCBvZiBjbHVzdGVyKSwKKwkJICAgdGhhdCB0aGUgZmVhdHVyZV9pbmNvbXBhdCBiaXQgaXMgaGlnaCwgYW5kIHRoYXQgdGhlCisJCSAgIGlub2RlIGlzIGEgcmVndWxhciBmaWxlLiAgSWYgd2UncmUgZG9pbmcgYSAiZnVsbAorCQkgICBjaGVjayIgKGEgY29uY2VwdCBpbnRyb2R1Y2VkIHRvIGUyZnNjayBieSBlMmNvbXByLAorCQkgICBtZWFuaW5nIHRoYXQgd2UgbG9vayBhdCBkYXRhIGJsb2NrcyBhcyB3ZWxsIGFzCisJCSAgIG1ldGFkYXRhKSB0aGVuIGNhbGwgc29tZSBsaWJyYXJ5IHJvdXRpbmUgdGhhdAorCQkgICBjaGVja3MgdGhlIGNvbXByZXNzZWQgZGF0YS4gIEknbGwgaGF2ZSB0byB0aGluaworCQkgICBhYm91dCB0aGlzLCBiZWNhdXNlIG9uZSBwYXJ0aWN1bGFybHkgaW1wb3J0YW50CisJCSAgIHByb2JsZW0gdG8gYmUgYWJsZSB0byBmaXggaXMgdG8gcmVjYWxjdWxhdGUgdGhlCisJCSAgIGNsdXN0ZXIgc2l6ZSBpZiBuZWNlc3NhcnkuICBJIHRoaW5rIHRoYXQgcGVyaGFwcworCQkgICB3ZSdkIGJldHRlciBkbyBtb3N0L2FsbCBlMmNvbXByLXNwZWNpZmljIGNoZWNrcworCQkgICBzZXBhcmF0ZWx5LCBhZnRlciB0aGUgbm9uLWUyY29tcHIgY2hlY2tzLiAgSWYgbm90CisJCSAgIGRvaW5nIGEgZnVsbCBjaGVjaywgaXQgbWF5IGJlIHVzZWZ1bCB0byB0ZXN0IHRoYXQKKwkJICAgdGhlIHBlcnNvbmFsaXR5IGlzIGxpbnV4OyBlLmcuIGlmIGl0IGlzbid0IHRoZW4KKwkJICAgcGVyaGFwcyB0aGlzIHJlYWxseSBpcyBqdXN0IGFuIGlsbGVnYWwgYmxvY2suICovCisJCXJldHVybiAwOworCX0KKworCWlmIChibGsgPT0gMCkKKwkJcmV0dXJuIDA7CisKKyNpZiAwCisJcHJpbnRmKCJQcm9jZXNzX2Jsb2NrLCBpbm9kZSAlbHUsIGJsb2NrICV1LCAjJWRcbiIsIHAtPmlubywgYmxrLAorCSAgICAgICBibG9ja2NudCk7CisjZW5kaWYKKworCS8qCisJICogU2ltcGxpc3RpYyBmcmFnbWVudGF0aW9uIGNoZWNrLiAgV2UgbWVyZWx5IHJlcXVpcmUgdGhhdCB0aGUKKwkgKiBmaWxlIGJlIGNvbnRpZ3VvdXMuICAoV2hpY2ggY2FuIG5ldmVyIGJlIHRydWUgZm9yIHJlYWxseQorCSAqIGJpZyBmaWxlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gYSBibG9jayBncm91cC4pCisJICovCisJaWYgKCFIT0xFX0JMS0FERFIocC0+cHJldmlvdXNfYmxvY2spICYmIHAtPmlubyAhPSBFWFQyX1JFU0laRV9JTk8pIHsKKwkJaWYgKHAtPnByZXZpb3VzX2Jsb2NrKzEgIT0gYmxrKSB7CisJCQlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GUkFHQ0hFQ0spIHsKKwkJCQljaGFyIHR5cGUgPSAnPyc7CisKKwkJCQlpZiAocC0+aXNfZGlyKQorCQkJCQl0eXBlID0gJ2QnOworCQkJCWVsc2UgaWYgKHAtPmlzX3JlZykKKwkJCQkJdHlwZSA9ICdmJzsKKworCQkJCXByaW50ZihfKCIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgIgorCQkJCQkgImdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIiksCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBwY3R4LT5pbm8sIHR5cGUsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBwLT5wcmV2aW91c19ibG9jaysxLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYmxrLAorCQkJCSAgICAgICBibG9ja2NudCk7CisJCQl9CisJCQlwLT5mcmFnbWVudGVkID0gMTsKKwkJfQorCX0KKworCWlmIChwLT5pc19kaXIgJiYgYmxvY2tjbnQgPiAoMSA8PCAoMjEgLSBmcy0+c3VwZXItPnNfbG9nX2Jsb2NrX3NpemUpKSkKKwkJcHJvYmxlbSA9IFBSXzFfVE9PQklHX0RJUjsKKwlpZiAocC0+aXNfcmVnICYmIHAtPm51bV9ibG9ja3MrMSA+PSBwLT5tYXhfYmxvY2tzKQorCQlwcm9ibGVtID0gUFJfMV9UT09CSUdfUkVHOworCWlmICghcC0+aXNfZGlyICYmICFwLT5pc19yZWcgJiYgYmxvY2tjbnQgPiAwKQorCQlwcm9ibGVtID0gUFJfMV9UT09CSUdfU1lNTElOSzsKKworCWlmIChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayB8fAorCSAgICBibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlwcm9ibGVtID0gUFJfMV9JTExFR0FMX0JMT0NLX05VTTsKKworCWlmIChwcm9ibGVtKSB7CisJCXAtPm51bV9pbGxlZ2FsX2Jsb2NrcysrOworCQlpZiAoIXAtPnN1cHByZXNzICYmIChwLT5udW1faWxsZWdhbF9ibG9ja3MgJSAxMikgPT0gMCkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9UT09fTUFOWV9CQURfQkxPQ0tTLCBwY3R4KSkgeworCQkJCXAtPmNsZWFyID0gMTsKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCQl9CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX1NVUFBSRVNTX01FU1NBR0VTLCBwY3R4KSkgeworCQkJCXAtPnN1cHByZXNzID0gMTsKKwkJCQlzZXRfbGF0Y2hfZmxhZ3MoUFJfTEFUQ0hfQkxPQ0ssCisJCQkJCQlQUkxfU1VQUFJFU1MsIDApOworCQkJfQorCQl9CisJCXBjdHgtPmJsayA9IGJsazsKKwkJcGN0eC0+YmxrY291bnQgPSBibG9ja2NudDsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgcGN0eCkpIHsKKwkJCWJsayA9ICpibG9ja19uciA9IDA7CisJCQlyZXRfY29kZSA9IEJMT0NLX0NIQU5HRUQ7CisJCQlnb3RvIG1hcmtfZGlyOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCX0KKworCWlmIChwLT5pbm8gPT0gRVhUMl9SRVNJWkVfSU5PKSB7CisJCS8qCisJCSAqIFRoZSByZXNpemUgaW5vZGUgaGFzIGFscmVhZHkgYmUgc2FuaXR5IGNoZWNrZWQKKwkJICogZHVyaW5nIHBhc3MgIzAgKHRoZSBzdXBlcmJsb2NrIGNoZWNrcykuICBBbGwgd2UKKwkJICogaGF2ZSB0byBkbyBpcyBtYXJrIHRoZSBkb3VibGUgaW5kaXJlY3QgYmxvY2sgYXMKKwkJICogYmVpbmcgaW4gdXNlOyBhbGwgb2YgdGhlIG90aGVyIGJsb2NrcyBhcmUgaGFuZGxlZAorCQkgKiBieSBtYXJrX3RhYmxlX2Jsb2NrcygpKS4KKwkJICovCisJCWlmIChibG9ja2NudCA9PSBCTE9DS19DT1VOVF9ESU5EKQorCQkJbWFya19ibG9ja191c2VkKGN0eCwgYmxrKTsKKwkJcC0+bnVtX2Jsb2NrcysrOworCX0gZWxzZSBpZiAoIShjdHgtPmZzLT5jbHVzdGVyX3JhdGlvX2JpdHMgJiYKKwkJICAgICBwLT5wcmV2aW91c19ibG9jayAmJgorCQkgICAgIChFWFQyRlNfQjJDKGN0eC0+ZnMsIGJsaykgPT0KKwkJICAgICAgRVhUMkZTX0IyQyhjdHgtPmZzLCBwLT5wcmV2aW91c19ibG9jaykpICYmCisJCSAgICAgKGJsayAmIEVYVDJGU19DTFVTVEVSX01BU0soY3R4LT5mcykpID09CisJCSAgICAgKCh1bnNpZ25lZCkgYmxvY2tjbnQgJiBFWFQyRlNfQ0xVU1RFUl9NQVNLKGN0eC0+ZnMpKSkpIHsKKwkJbWFya19ibG9ja191c2VkKGN0eCwgYmxrKTsKKwkJcC0+bnVtX2Jsb2NrcysrOworCX0KKwlpZiAoYmxvY2tjbnQgPj0gMCkKKwkJcC0+bGFzdF9ibG9jayA9IGJsb2NrY250OworCXAtPnByZXZpb3VzX2Jsb2NrID0gYmxrOworbWFya19kaXI6CisJaWYgKHAtPmlzX2RpciAmJiAoYmxvY2tjbnQgPj0gMCkpIHsKKwkJd2hpbGUgKCsrcC0+bGFzdF9kYl9ibG9jayA8IGJsb2NrY250KSB7CisJCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsCisJCQkJCQkJICAgICAgcC0+aW5vLCAwLAorCQkJCQkJCSAgICAgIHAtPmxhc3RfZGJfYmxvY2spOworCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQlwY3R4LT5ibGsgPSAwOworCQkJCXBjdHgtPm51bSA9IHAtPmxhc3RfZGJfYmxvY2s7CisJCQkJZ290byBmYWlsZWRfYWRkX2Rpcl9ibG9jazsKKwkJCX0KKwkJfQorCQlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsIHAtPmlubywKKwkJCQkJCSAgICAgIGJsaywgYmxvY2tjbnQpOworCQlpZiAocGN0eC0+ZXJyY29kZSkgeworCQkJcGN0eC0+YmxrID0gYmxrOworCQkJcGN0eC0+bnVtID0gYmxvY2tjbnQ7CisJCWZhaWxlZF9hZGRfZGlyX2Jsb2NrOgorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0FERF9EQkxPQ0ssIHBjdHgpOworCQkJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJfQorCXJldHVybiByZXRfY29kZTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2JhZF9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJICAgICAgYmxrNjRfdCAqYmxvY2tfbnIsCisJCSAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqcDsKKwlibGs2NF90CQlibGsgPSAqYmxvY2tfbnI7CisJYmxrNjRfdAkJZmlyc3RfYmxvY2s7CisJZGdycF90CQlpOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHg7CisJZTJmc2NrX3QJY3R4OworCisJLyoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBibG9ja3MgZm9yIHRoZSBiYWQgYmxvY2tzCisJICogaW5vZGUsIHdoaWNoIGlzIG5ldmVyIGNvbXByZXNzZWQuICBTbyB3ZSBkb24ndCB1c2UgSE9MRV9CTEtBRERSKCkuCisJICovCisKKwlpZiAoIWJsaykKKwkJcmV0dXJuIDA7CisKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJY3R4ID0gcC0+Y3R4OworCXBjdHggPSBwLT5wY3R4OworCisJcGN0eC0+aW5vID0gRVhUMl9CQURfSU5POworCXBjdHgtPmJsayA9IGJsazsKKwlwY3R4LT5ibGtjb3VudCA9IGJsb2NrY250OworCisJaWYgKChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJfSUxMRUdBTF9CTE9DS19OVU0sIHBjdHgpKSB7CisJCQkqYmxvY2tfbnIgPSAwOworCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKGJsb2NrY250IDwgMCkgeworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihwLT5mc19tZXRhX2Jsb2NrcywgYmxrKSkgeworCQkJcC0+YmJjaGVjayA9IDE7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JCX0ZTX0JMT0NLLCBwY3R4KSkgeworCQkJCSpibG9ja19uciA9IDA7CisJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQl9CisJCX0gZWxzZSBpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCSAgICBibGspKSB7CisJCQlwLT5iYmNoZWNrID0gMTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfQkJJTk9ERV9CQURfTUVUQUJMT0NLLAorCQkJCQlwY3R4KSkgeworCQkJCSpibG9ja19uciA9IDA7CisJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQl9CisJCQlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfSBlbHNlCisJCQltYXJrX2Jsb2NrX3VzZWQoY3R4LCBibGspOworCQlyZXR1cm4gMDsKKwl9CisjaWYgMAorCXByaW50ZiAoIkRFQlVHOiBNYXJraW5nICV1IGFzIGJhZC5cbiIsIGJsayk7CisjZW5kaWYKKwljdHgtPmZzX2JhZGJsb2Nrc19jb3VudCsrOworCS8qCisJICogSWYgdGhlIGJsb2NrIGlzIG5vdCB1c2VkLCB0aGVuIG1hcmsgaXQgYXMgdXNlZCBhbmQgcmV0dXJuLgorCSAqIElmIGl0IGlzIGFscmVhZHkgbWFya2VkIGFzIGZvdW5kLCB0aGlzIG11c3QgbWVhbiB0aGF0CisJICogdGhlcmUncyBhbiBvdmVybGFwIGJldHdlZW4gdGhlIGZpbGVzeXN0ZW0gdGFibGUgYmxvY2tzCisJICogKGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlKSBhbmQgdGhlIGJhZCBibG9jayBsaXN0LgorCSAqLworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgYmxrKSkgeworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibGspOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBUcnkgdG8gZmluZCB0aGUgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gYmxvY2sgd2FzIHVzZWQuLi4KKwkgKi8KKwlmaXJzdF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKysgKSB7CisJCXBjdHgtPmdyb3VwID0gaTsKKwkJcGN0eC0+YmxrID0gYmxrOworCQlpZiAoIWV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpKQorCQkJZ290byBza2lwX3N1cGVyOworCQlpZiAoYmxrID09IGZpcnN0X2Jsb2NrKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCQkJCVBSXzFfQkFEX1BSSU1BUllfU1VQRVJCTE9DSywKKwkJCQkJCXBjdHgpKSB7CisJCQkJCSpibG9ja19uciA9IDA7CisJCQkJCXJldHVybiBCTE9DS19DSEFOR0VEOworCQkJCX0KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CQURfU1VQRVJCTE9DSywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoKGJsayA+IGZpcnN0X2Jsb2NrKSAmJgorCQkgICAgKGJsayA8PSBmaXJzdF9ibG9jayArIGZzLT5kZXNjX2Jsb2NrcykpIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQlwY3R4LT5ibGsgPSAqYmxvY2tfbnI7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwKKwkJCVBSXzFfQkFEX1BSSU1BUllfR1JPVVBfREVTQ1JJUFRPUiwgcGN0eCkpIHsKKwkJCQkJKmJsb2NrX25yID0gMDsKKwkJCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCQkJfQorCQkJCXJldHVybiAwOworCQkJfQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JBRF9HUk9VUF9ERVNDUklQVE9SUywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCXNraXBfc3VwZXI6CisJCWlmIChibGsgPT0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JCX0JBRF9CTE9DSywgcGN0eCkpIHsKKwkJCQljdHgtPmludmFsaWRfYmxvY2tfYml0bWFwX2ZsYWdbaV0rKzsKKwkJCQljdHgtPmludmFsaWRfYml0bWFwcysrOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGJsayA9PSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFfSUJfQkFEX0JMT0NLLCBwY3R4KSkgeworCQkJCWN0eC0+aW52YWxpZF9pbm9kZV9iaXRtYXBfZmxhZ1tpXSsrOworCQkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoKGJsayA+PSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgJiYKKwkJICAgIChibGsgPCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgKworCQkJICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgYmFkIGJsb2NrcyBpbiB0aGUgaW5vZGUgdGFibGUsCisJCQkgKiB0aGUgaW5vZGUgc2NhbiBjb2RlIHdpbGwgdHJ5IHRvIGRvCisJCQkgKiBzb21ldGhpbmcgcmVhc29uYWJsZSBhdXRvbWF0aWNhbGx5LgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQlmaXJzdF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJLyoKKwkgKiBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgdGhlbiB0aGUgb25seQorCSAqIHBvc3NpYmlsaXR5IGlzIHRoYXQgdGhlIGJhZCBibG9jayBpbm9kZSBtZXRhIGRhdGEKKwkgKiBpcyB1c2luZyBhIGJhZCBibG9jay4KKwkgKi8KKwlpZiAoKGJsayA9PSBwLT5pbm9kZS0+aV9ibG9ja1tFWFQyX0lORF9CTE9DS10pIHx8CisJICAgIChibGsgPT0gcC0+aW5vZGUtPmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSkgfHwKKwkgICAgKGJsayA9PSBwLT5pbm9kZS0+aV9ibG9ja1tFWFQyX1RJTkRfQkxPQ0tdKSkgeworCQlwLT5iYmNoZWNrID0gMTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0ssIHBjdHgpKSB7CisJCQkqYmxvY2tfbnIgPSAwOworCQkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJCX0KKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJcmV0dXJuIDA7CisJfQorCisJcGN0eC0+Z3JvdXAgPSAtMTsKKworCS8qIFdhcm4gdXNlciB0aGF0IHRoZSBibG9jayB3YXNuJ3QgY2xhaW1lZCAqLworCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9QUk9HRVJSX0NMQUlNRURfQkxPQ0ssIHBjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5ld190YWJsZV9ibG9jayhlMmZzY2tfdCBjdHgsIGJsazY0X3QgZmlyc3RfYmxvY2ssIGRncnBfdCBncm91cCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtLCBibGs2NF90ICpuZXdfYmxvY2spCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWRncnBfdAkJbGFzdF9ncnA7CisJYmxrNjRfdAkJb2xkX2Jsb2NrID0gKm5ld19ibG9jazsKKwlibGs2NF90CQlsYXN0X2Jsb2NrOworCWRncnBfdAkJZmxleGJnOworCXVuc2lnbmVkCWZsZXhiZ19zaXplOworCWludAkJaSwgaXNfZmxleGJnOworCWNoYXIJCSpidWY7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCXBjdHguZ3JvdXAgPSBncm91cDsKKwlwY3R4LmJsayA9IG9sZF9ibG9jazsKKwlwY3R4LnN0ciA9IG5hbWU7CisKKwkvKgorCSAqIEZvciBmbGV4X2JnIGZpbGVzeXN0ZW1zLCBmaXJzdCB0cnkgdG8gYWxsb2NhdGUgdGhlIG1ldGFkYXRhCisJICogd2l0aGluIHRoZSBmbGV4X2JnLCBhbmQgaWYgdGhhdCBmYWlscyB0aGVuIHRyeSBmaW5kaW5nIHRoZQorCSAqIHNwYWNlIGFueXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtLgorCSAqLworCWlzX2ZsZXhiZyA9IEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRyk7CisJaWYgKGlzX2ZsZXhiZykgeworCQlmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJCWZsZXhiZyA9IGdyb3VwIC8gZmxleGJnX3NpemU7CisJCWZpcnN0X2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywKKwkJCQkJCQlmbGV4Ymdfc2l6ZSAqIGZsZXhiZyk7CisJCWxhc3RfZ3JwID0gZ3JvdXAgfCAoZmxleGJnX3NpemUgLSAxKTsKKwkJaWYgKGxhc3RfZ3JwID4gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlsYXN0X2dycCA9IGZzLT5ncm91cF9kZXNjX2NvdW50OworCQlsYXN0X2Jsb2NrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBsYXN0X2dycCk7CisJfSBlbHNlCisJCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGdyb3VwKTsKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgZmlyc3RfYmxvY2ssIGxhc3RfYmxvY2ssCisJCQkJCSAgICAgICBudW0sIGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkgICAgICAgbmV3X2Jsb2NrKTsKKwlpZiAoaXNfZmxleGJnICYmIChwY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9CTE9DS19BTExPQ19GQUlMKSkKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsCisJCQkJZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCQkJZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLAorCQkJCW51bSwgY3R4LT5ibG9ja19mb3VuZF9tYXAsIG5ld19ibG9jayk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IG51bTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JFTE9DX0JMT0NLX0FMTE9DQVRFLCAmcGN0eCk7CisJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCXBjdHguZXJyY29kZSA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JFTE9DX01FTU9SWV9BTExPQ0FURSwgJnBjdHgpOworCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJcGN0eC5ibGsyID0gKm5ld19ibG9jazsKKwlmaXhfcHJvYmxlbShjdHgsIChvbGRfYmxvY2sgPyBQUl8xX1JFTE9DX0ZST01fVE8gOgorCQkJICBQUl8xX1JFTE9DX1RPKSwgJnBjdHgpOworCXBjdHguYmxrMiA9IDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXBjdHguYmxrID0gaTsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgKCpuZXdfYmxvY2spK2kpOworCQlpZiAob2xkX2Jsb2NrKSB7CisJCQlwY3R4LmVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLAorCQkJCSAgIG9sZF9ibG9jayArIGksIDEsIGJ1Zik7CisJCQlpZiAocGN0eC5lcnJjb2RlKQorCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMV9SRUxPQ19SRUFEX0VSUiwgJnBjdHgpOworCQl9IGVsc2UKKwkJCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCisJCXBjdHguYmxrID0gKCpuZXdfYmxvY2spICsgaTsKKwkJcGN0eC5lcnJjb2RlID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIHBjdHguYmxrLAorCQkJCQkgICAgICAxLCBidWYpOworCQlpZiAocGN0eC5lcnJjb2RlKQorCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8xX1JFTE9DX1dSSVRFX0VSUiwgJnBjdHgpOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgZ2V0cyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBwYXNzIDEgaWYgYmFkIGJsb2NrcyBhcmUKKyAqIGRldGVjdGVkIGluIHRoZSBzdXBlcmJsb2NrLCBncm91cCBkZXNjcmlwdG9ycywgaW5vZGVfYml0bWFwcywgb3IKKyAqIGJsb2NrIGJpdG1hcHMuICBBdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIGJsb2NrcyBoYXZlIGJlZW4gbWFwcGVkCisgKiBvdXQsIHNvIHdlIGNhbiB0cnkgdG8gYWxsb2NhdGUgbmV3IGJsb2NrKHMpIHRvIHJlcGxhY2UgdGhlIGJhZAorICogYmxvY2tzLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZnNfYmFkX2Jsb2NrcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWRncnBfdAkJaTsKKwlibGs2NF90CQlmaXJzdF9ibG9jazsKKwlibGs2NF90CQluZXdfYmxrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJZmlyc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBpKTsKKworCQlpZiAoY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnW2ldKSB7CisJCQluZXdfYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQkJbmV3X3RhYmxlX2Jsb2NrKGN0eCwgZmlyc3RfYmxvY2ssIGksIF8oImJsb2NrIGJpdG1hcCIpLAorCQkJCQkxLCAmbmV3X2Jsayk7CisJCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQl9CisJCWlmIChjdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWdbaV0pIHsKKwkJCW5ld19ibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCQluZXdfdGFibGVfYmxvY2soY3R4LCBmaXJzdF9ibG9jaywgaSwgXygiaW5vZGUgYml0bWFwIiksCisJCQkJCTEsICZuZXdfYmxrKTsKKwkJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgaSwgbmV3X2Jsayk7CisJCX0KKwkJaWYgKGN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnW2ldKSB7CisJCQluZXdfYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCQluZXdfdGFibGVfYmxvY2soY3R4LCBmaXJzdF9ibG9jaywgaSwgXygiaW5vZGUgdGFibGUiKSwKKwkJCQkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAsCisJCQkJCSZuZXdfYmxrKTsKKwkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGZzLCBpLCBuZXdfYmxrKTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTVEFSVDsKKwkJfQorCX0KKwljdHgtPmludmFsaWRfYml0bWFwcyA9IDA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgbWFya3MgYWxsIGJsb2NrcyB3aGljaCBhcmUgdXNlZCBieSB0aGUgc3VwZXJibG9jaywKKyAqIGdyb3VwIGRlc2NyaXB0b3JzLCBpbm9kZSBiaXRtYXBzLCBhbmQgYmxvY2sgYml0bWFwcy4KKyAqLworc3RhdGljIHZvaWQgbWFya190YWJsZV9ibG9ja3MoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CWI7CisJZGdycF90CWk7CisJdW5zaWduZWQgaW50CWo7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCXBjdHguZ3JvdXAgPSBpOworCisJCWV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGksIGN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBibG9ja3MgdXNlZCBmb3IgdGhlIGlub2RlIHRhYmxlCisJCSAqLworCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkpIHsKKwkJCWZvciAoaiA9IDAsIGIgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKTsKKwkJCSAgICAgaiA8IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQkJICAgICBqKyssIGIrKykgeworCQkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkJCSAgICAgYikpIHsKKwkJCQkJcGN0eC5ibGsgPSBiOworCQkJCQlpZiAoIWN0eC0+aW52YWxpZF9pbm9kZV90YWJsZV9mbGFnW2ldICYmCisJCQkJCSAgICBmaXhfcHJvYmxlbShjdHgsCisJCQkJCQlQUl8xX0lUQUJMRV9DT05GTElDVCwgJnBjdHgpKSB7CisJCQkJCQljdHgtPmludmFsaWRfaW5vZGVfdGFibGVfZmxhZ1tpXSsrOworCQkJCQkJY3R4LT5pbnZhbGlkX2JpdG1hcHMrKzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJICAgIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCQkJICAgICBiKTsKKwkJCSAgICAJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogTWFyayBibG9jayB1c2VkIGZvciB0aGUgYmxvY2sgYml0bWFwCisJCSAqLworCQlpZiAoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkgICAgIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSkpIHsKKwkJCQlwY3R4LmJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xX0JCX0NPTkZMSUNULCAmcGN0eCkpIHsKKwkJCQkJY3R4LT5pbnZhbGlkX2Jsb2NrX2JpdG1hcF9mbGFnW2ldKys7CisJCQkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCSAgICBleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJICAgIH0KKworCQl9CisJCS8qCisJCSAqIE1hcmsgYmxvY2sgdXNlZCBmb3IgdGhlIGlub2RlIGJpdG1hcAorCQkgKi8KKwkJaWYgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkgeworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJICAgICBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpKSB7CisJCQkJcGN0eC5ibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMV9JQl9DT05GTElDVCwgJnBjdHgpKSB7CisJCQkJCWN0eC0+aW52YWxpZF9pbm9kZV9iaXRtYXBfZmxhZ1tpXSsrOworCQkJCQljdHgtPmludmFsaWRfYml0bWFwcysrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkgICAgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkgICAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGVzIHN1YnJvdXRpbmVzIHNob3J0IGNpcmN1aXRzIGV4dDJmc19nZXRfYmxvY2tzIGFuZAorICogZXh0MmZzX2NoZWNrX2RpcmVjdG9yeTsgd2UgdXNlIHRoZW0gc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBpbm9kZQorICogc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGxldHRpbmcgdGhlIGV4dDJmcyBsaWJyYXJ5IHJlYWQKKyAqIHRoZSBpbm9kZSBhZ2Fpbi4KKyAqLworc3RhdGljIGVycmNvZGVfdCBwYXNzMV9nZXRfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgIGJsa190ICpibG9ja3MpCit7CisJZTJmc2NrX3QgY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCWludAlpOworCisJaWYgKChpbm8gIT0gY3R4LT5zdGFzaGVkX2lubykgfHwgIWN0eC0+c3Rhc2hlZF9pbm9kZSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRDsKKworCWZvciAoaT0wOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQlibG9ja3NbaV0gPSBjdHgtPnN0YXNoZWRfaW5vZGUtPmlfYmxvY2tbaV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFzczFfcmVhZF9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJZTJmc2NrX3QgY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCisJaWYgKChpbm8gIT0gY3R4LT5zdGFzaGVkX2lubykgfHwgIWN0eC0+c3Rhc2hlZF9pbm9kZSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRDsKKwkqaW5vZGUgPSAqY3R4LT5zdGFzaGVkX2lub2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHBhc3MxX3dyaXRlX2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJZTJmc2NrX3QgY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCisJaWYgKChpbm8gPT0gY3R4LT5zdGFzaGVkX2lubykgJiYgY3R4LT5zdGFzaGVkX2lub2RlICYmCisJCShpbm9kZSAhPSBjdHgtPnN0YXNoZWRfaW5vZGUpKQorCQkqY3R4LT5zdGFzaGVkX2lub2RlID0gKmlub2RlOworCXJldHVybiBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQ7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcGFzczFfY2hlY2tfZGlyZWN0b3J5KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubykKK3sKKwllMmZzY2tfdCBjdHggPSAoZTJmc2NrX3QpIGZzLT5wcml2X2RhdGE7CisKKwlpZiAoKGlubyAhPSBjdHgtPnN0YXNoZWRfaW5vKSB8fCAhY3R4LT5zdGFzaGVkX2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEOworCisJaWYgKCFMSU5VWF9TX0lTRElSKGN0eC0+c3Rhc2hlZF9pbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fRElSRUNUT1JZOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGUyZnNja19nZXRfYWxsb2NfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgZ29hbCwKKwkJCQkJYmxrNjRfdCAqcmV0KQoreworCWUyZnNja190IGN0eCA9IChlMmZzY2tfdCkgZnMtPnByaXZfZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCW5ld19ibG9jazsKKworCWlmIChjdHgtPmJsb2NrX2ZvdW5kX21hcCkgeworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgZ29hbCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCSAgICZuZXdfYmxvY2spOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKGZzLT5ibG9ja19tYXApIHsKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgbmV3X2Jsb2NrKTsKKwkJCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghZnMtPmJsb2NrX21hcCkgeworCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGZzKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCAwLCAmbmV3X2Jsb2NrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJKnJldCA9IG5ld19ibG9jazsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZCBlMmZzY2tfYmxvY2tfYWxsb2Nfc3RhdHMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpCit7CisJZTJmc2NrX3QgY3R4ID0gKGUyZnNja190KSBmcy0+cHJpdl9kYXRhOworCisJaWYgKGN0eC0+YmxvY2tfZm91bmRfbWFwKSB7CisJCWlmIChpbnVzZSA+IDApCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBibGspOworCQllbHNlCisJCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7CisJfQorfQorCit2b2lkIGUyZnNja191c2VfaW5vZGVfc2hvcnRjdXRzKGUyZnNja190IGN0eCwgaW50IHVzZV9zaG9ydGN1dHMpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCisJaWYgKHVzZV9zaG9ydGN1dHMpIHsKKwkJZnMtPmdldF9ibG9ja3MgPSBwYXNzMV9nZXRfYmxvY2tzOworCQlmcy0+Y2hlY2tfZGlyZWN0b3J5ID0gcGFzczFfY2hlY2tfZGlyZWN0b3J5OworCQlmcy0+cmVhZF9pbm9kZSA9IHBhc3MxX3JlYWRfaW5vZGU7CisJCWZzLT53cml0ZV9pbm9kZSA9IHBhc3MxX3dyaXRlX2lub2RlOworCQljdHgtPnN0YXNoZWRfaW5vID0gMDsKKwkJZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhmcywgZTJmc2NrX2dldF9hbGxvY19ibG9jaywKKwkJCQkJCTApOworCQlleHQyZnNfc2V0X2Jsb2NrX2FsbG9jX3N0YXRzX2NhbGxiYWNrKGZzLAorCQkJCQkJICAgICAgZTJmc2NrX2Jsb2NrX2FsbG9jX3N0YXRzLAorCQkJCQkJICAgICAgMCk7CisJfSBlbHNlIHsKKwkJZnMtPmdldF9ibG9ja3MgPSAwOworCQlmcy0+Y2hlY2tfZGlyZWN0b3J5ID0gMDsKKwkJZnMtPnJlYWRfaW5vZGUgPSAwOworCQlmcy0+d3JpdGVfaW5vZGUgPSAwOworCX0KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcGFzczFiLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MxYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmExNzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MxYi5jCkBAIC0wLDAgKzEsOTUzIEBACisvKgorICogcGFzczFiLmMgLS0tIFBhc3MgIzFiIG9mIGUyZnNjaworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwYXNzMUIsIHBhc3MxQywgYW5kIHBhc3MxRCBvZiBlMmZzY2suICBUaGV5IGFyZQorICogb25seSBpbnZva2VkIGlmIHBhc3MgMSBkaXNjb3ZlcmVkIGJsb2NrcyB3aGljaCBhcmUgaW4gdXNlIGJ5IG1vcmUKKyAqIHRoYW4gb25lIGlub2RlLgorICoKKyAqIFBhc3MxQiBzY2FucyB0aGUgZGF0YSBibG9ja3Mgb2YgYWxsIHRoZSBpbm9kZXMgYWdhaW4sIGdlbmVyYXRpbmcgYQorICogY29tcGxldGUgbGlzdCBvZiBkdXBsaWNhdGUgYmxvY2tzIGFuZCB3aGljaCBpbm9kZXMgaGF2ZSBjbGFpbWVkCisgKiB0aGVtLgorICoKKyAqIFBhc3MxQyBkb2VzIGEgdHJlZS10cmF2ZXJzYWwgb2YgdGhlIGZpbGVzeXN0ZW0sIHRvIGRldGVybWluZSB0aGUKKyAqIHBhcmVudCBkaXJlY3RvcmllcyBvZiB0aGVzZSBpbm9kZXMuICBUaGlzIHN0ZXAgaXMgbmVjZXNzYXJ5IHNvIHRoYXQKKyAqIGUyZnNjayBjYW4gcHJpbnQgb3V0IHRoZSBwYXRobmFtZXMgb2YgYWZmZWN0ZWQgaW5vZGVzLgorICoKKyAqIFBhc3MxRCBpcyBhIHJlY29uY2lsaWF0aW9uIHBhc3MuICBGb3IgZWFjaCBpbm9kZSB3aXRoIGR1cGxpY2F0ZQorICogYmxvY2tzLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBpZiBzL2hlIHdvdWxkIGxpa2UgdG8gY2xvbmUgdGhlIGZpbGUKKyAqIChzbyB0aGF0IHRoZSBmaWxlIGdldHMgYSBmcmVzaCBjb3B5IG9mIHRoZSBkdXBsaWNhdGVkIGJsb2Nrcykgb3IKKyAqIHNpbXBseSB0byBkZWxldGUgdGhlIGZpbGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9JTlRQVFJfVAordHlwZWRlZiBsb25nIGludHB0cl90OworI2VuZGlmCisKKy8qIE5lZWRlZCBmb3IgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSAqLworI2RlZmluZSBJTlRfVE9fVk9JRFBUUih2YWwpICAoKHZvaWQgKikoaW50cHRyX3QpKHZhbCkpCisjZGVmaW5lIFZPSURQVFJfVE9fSU5UKHB0cikgICgoaW50KShpbnRwdHJfdCkocHRyKSkKKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlICJlMmZzY2suaCIKKworI2luY2x1ZGUgInByb2JsZW0uaCIKKyNpbmNsdWRlICJkaWN0LmgiCisKKy8qIERlZmluZSBhbiBleHRlbnNpb24gdG8gdGhlIGV4dDIgbGlicmFyeSdzIGJsb2NrIGNvdW50IGluZm9ybWF0aW9uICovCisjZGVmaW5lIEJMT0NLX0NPVU5UX0VYVEFUVFIJKC01KQorCitzdHJ1Y3QgY2x1c3Rlcl9lbCB7CisJYmxrNjRfdAljbHVzdGVyOworCXN0cnVjdCBjbHVzdGVyX2VsICpuZXh0OworfTsKKworc3RydWN0IGlub2RlX2VsIHsKKwlleHQyX2lub190CWlub2RlOworCXN0cnVjdCBpbm9kZV9lbCAqbmV4dDsKK307CisKK3N0cnVjdCBkdXBfY2x1c3RlciB7CisJaW50CQludW1fYmFkOworCXN0cnVjdCBpbm9kZV9lbCAqaW5vZGVfbGlzdDsKK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGlub2RlIHdoaWNoCisgKiBpcyBzaGFyaW5nIGJsb2NrcyB3aXRoIG90aGVyIGlub2Rlcy4gIFRoaXMgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkCisgKiB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLCBzbyB0aGF0IHRoZSB1c2VyIGtub3dzIHdoYXQgZmlsZXMgaGUgb3Igc2hlCisgKiBpcyBkZWFsaW5nIHdpdGgsIHdoZW4gdHJ5aW5nIHRvIGRlY2lkZSBob3cgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QKKyAqIG9mIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLgorICovCitzdHJ1Y3QgZHVwX2lub2RlIHsKKwlleHQyX2lub190CQlkaXI7CisJaW50CQkJbnVtX2R1cGJsb2NrczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlzdHJ1Y3QgY2x1c3Rlcl9lbAkqY2x1c3Rlcl9saXN0OworfTsKKworc3RhdGljIGludCBwcm9jZXNzX3Bhc3MxYl9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdAkqYmxvY2tuciwKKwkJCQllMl9ibGtjbnRfdCBibG9ja2NudCwgYmxrNjRfdCByZWZfYmxrLAorCQkJCWludCByZWZfb2Zmc2V0LCB2b2lkICpwcml2X2RhdGEpOworc3RhdGljIHZvaWQgZGVsZXRlX2ZpbGUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCXN0cnVjdCBkdXBfaW5vZGUgKmRwLCBjaGFyICpibG9ja19idWYpOworc3RhdGljIGVycmNvZGVfdCBjbG9uZV9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIqIGJsb2NrX2J1Zik7CitzdGF0aWMgaW50IGNoZWNrX2lmX2ZzX2Jsb2NrKGUyZnNja190IGN0eCwgYmxrNjRfdCB0ZXN0X2Jsb2NrKTsKK3N0YXRpYyBpbnQgY2hlY2tfaWZfZnNfY2x1c3RlcihlMmZzY2tfdCBjdHgsIGJsazY0X3QgY2x1c3Rlcik7CisKK3N0YXRpYyB2b2lkIHBhc3MxYihlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1Zik7CitzdGF0aWMgdm9pZCBwYXNzMWMoZTJmc2NrX3QgY3R4LCBjaGFyICpibG9ja19idWYpOworc3RhdGljIHZvaWQgcGFzczFkKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKTsKKworc3RhdGljIGludCBkdXBfaW5vZGVfY291bnQgPSAwOworc3RhdGljIGludCBkdXBfaW5vZGVfZm91bmRkaXIgPSAwOworCitzdGF0aWMgZGljdF90IGNsc3RyX2RpY3QsIGlub19kaWN0OworCitzdGF0aWMgZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9kdXBfbWFwOworCitzdGF0aWMgaW50IGRpY3RfaW50X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWludHB0cl90CWlhLCBpYjsKKworCWlhID0gKGludHB0cl90KWE7CisJaWIgPSAoaW50cHRyX3QpYjsKKworCXJldHVybiAoaWEtaWIpOworfQorCisvKgorICogQWRkIGEgZHVwbGljYXRlIGJsb2NrIHJlY29yZAorICovCitzdGF0aWMgdm9pZCBhZGRfZHVwZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBibGs2NF90IGNsdXN0ZXIsCisJCSAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCWRub2RlX3QJKm47CisJc3RydWN0IGR1cF9jbHVzdGVyCSpkYjsKKwlzdHJ1Y3QgZHVwX2lub2RlCSpkaTsKKwlzdHJ1Y3QgY2x1c3Rlcl9lbAkqY2x1c3Rlcl9lbDsKKwlzdHJ1Y3QgaW5vZGVfZWwgCSppbm9fZWw7CisKKwluID0gZGljdF9sb29rdXAoJmNsc3RyX2RpY3QsIElOVF9UT19WT0lEUFRSKGNsdXN0ZXIpKTsKKwlpZiAobikKKwkJZGIgPSAoc3RydWN0IGR1cF9jbHVzdGVyICopIGRub2RlX2dldChuKTsKKwllbHNlIHsKKwkJZGIgPSAoc3RydWN0IGR1cF9jbHVzdGVyICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJc2l6ZW9mKHN0cnVjdCBkdXBfY2x1c3RlciksICJkdXBsaWNhdGUgY2x1c3RlciBoZWFkZXIiKTsKKwkJZGItPm51bV9iYWQgPSAwOworCQlkYi0+aW5vZGVfbGlzdCA9IDA7CisJCWRpY3RfYWxsb2NfaW5zZXJ0KCZjbHN0cl9kaWN0LCBJTlRfVE9fVk9JRFBUUihjbHVzdGVyKSwgZGIpOworCX0KKwlpbm9fZWwgPSAoc3RydWN0IGlub2RlX2VsICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJIHNpemVvZihzdHJ1Y3QgaW5vZGVfZWwpLCAiaW5vZGUgZWxlbWVudCIpOworCWlub19lbC0+aW5vZGUgPSBpbm87CisJaW5vX2VsLT5uZXh0ID0gZGItPmlub2RlX2xpc3Q7CisJZGItPmlub2RlX2xpc3QgPSBpbm9fZWw7CisJZGItPm51bV9iYWQrKzsKKworCW4gPSBkaWN0X2xvb2t1cCgmaW5vX2RpY3QsIElOVF9UT19WT0lEUFRSKGlubykpOworCWlmIChuKQorCQlkaSA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGRub2RlX2dldChuKTsKKwllbHNlIHsKKwkJZGkgPSAoc3RydWN0IGR1cF9pbm9kZSAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkJCSBzaXplb2Yoc3RydWN0IGR1cF9pbm9kZSksICJkdXBsaWNhdGUgaW5vZGUgaGVhZGVyIik7CisJCWlmIChpbm8gPT0gRVhUMl9ST09UX0lOTykgeworCQkJZGktPmRpciA9IEVYVDJfUk9PVF9JTk87CisJCQlkdXBfaW5vZGVfZm91bmRkaXIrKzsKKwkJfSBlbHNlCisJCQlkaS0+ZGlyID0gMDsKKworCQlkaS0+bnVtX2R1cGJsb2NrcyA9IDA7CisJCWRpLT5jbHVzdGVyX2xpc3QgPSAwOworCQlkaS0+aW5vZGUgPSAqaW5vZGU7CisJCWRpY3RfYWxsb2NfaW5zZXJ0KCZpbm9fZGljdCwgSU5UX1RPX1ZPSURQVFIoaW5vKSwgZGkpOworCX0KKwljbHVzdGVyX2VsID0gKHN0cnVjdCBjbHVzdGVyX2VsICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LAorCQkJIHNpemVvZihzdHJ1Y3QgY2x1c3Rlcl9lbCksICJjbHVzdGVyIGVsZW1lbnQiKTsKKwljbHVzdGVyX2VsLT5jbHVzdGVyID0gY2x1c3RlcjsKKwljbHVzdGVyX2VsLT5uZXh0ID0gZGktPmNsdXN0ZXJfbGlzdDsKKwlkaS0+Y2x1c3Rlcl9saXN0ID0gY2x1c3Rlcl9lbDsKKwlkaS0+bnVtX2R1cGJsb2NrcysrOworfQorCisvKgorICogRnJlZSBhIGR1cGxpY2F0ZSBpbm9kZSByZWNvcmQKKyAqLworc3RhdGljIHZvaWQgaW5vZGVfZG5vZGVfZnJlZShkbm9kZV90ICpub2RlLAorCQkJICAgICB2b2lkICpjb250ZXh0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlzdHJ1Y3QgZHVwX2lub2RlCSpkaTsKKwlzdHJ1Y3QgY2x1c3Rlcl9lbAkJKnAsICpuZXh0OworCisJZGkgPSAoc3RydWN0IGR1cF9pbm9kZSAqKSBkbm9kZV9nZXQobm9kZSk7CisJZm9yIChwID0gZGktPmNsdXN0ZXJfbGlzdDsgcDsgcCA9IG5leHQpIHsKKwkJbmV4dCA9IHAtPm5leHQ7CisJCWZyZWUocCk7CisJfQorCWZyZWUoZGkpOworCWZyZWUobm9kZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgZHVwbGljYXRlIGNsdXN0ZXIgcmVjb3JkCisgKi8KK3N0YXRpYyB2b2lkIGNsdXN0ZXJfZG5vZGVfZnJlZShkbm9kZV90ICpub2RlLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXN0cnVjdCBkdXBfY2x1c3RlcgkqZGM7CisJc3RydWN0IGlub2RlX2VsCQkqcCwgKm5leHQ7CisKKwlkYyA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZG5vZGVfZ2V0KG5vZGUpOworCWZvciAocCA9IGRjLT5pbm9kZV9saXN0OyBwOyBwID0gbmV4dCkgeworCQluZXh0ID0gcC0+bmV4dDsKKwkJZnJlZShwKTsKKwl9CisJZnJlZShkYyk7CisJZnJlZShub2RlKTsKK30KKworCisvKgorICogTWFpbiBwcm9jZWR1cmUgZm9yIGhhbmRsaW5nIGR1cGxpY2F0ZSBibG9ja3MKKyAqLwordm9pZCBlMmZzY2tfcGFzczFfZHVwYmxvY2tzKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKQoreworCWV4dDJfZmlsc3lzIAkJZnMgPSBjdHgtPmZzOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlwY3R4LmVycmNvZGUgPSBlMmZzY2tfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLAorCQkJXygibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiKSwKKwkJCUVYVDJGU19CTUFQNjRfUkJUUkVFLCAiaW5vZGVfZHVwX21hcCIsCisJCQkmaW5vZGVfZHVwX21hcCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKworCWRpY3RfaW5pdCgmaW5vX2RpY3QsIERJQ1RDT1VOVF9UX01BWCwgZGljdF9pbnRfY21wKTsKKwlkaWN0X2luaXQoJmNsc3RyX2RpY3QsIERJQ1RDT1VOVF9UX01BWCwgZGljdF9pbnRfY21wKTsKKwlkaWN0X3NldF9hbGxvY2F0b3IoJmlub19kaWN0LCBOVUxMLCBpbm9kZV9kbm9kZV9mcmVlLCBOVUxMKTsKKwlkaWN0X3NldF9hbGxvY2F0b3IoJmNsc3RyX2RpY3QsIE5VTEwsIGNsdXN0ZXJfZG5vZGVfZnJlZSwgTlVMTCk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKwlwYXNzMWIoY3R4LCBibG9ja19idWYpOworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgIlBhc3MgMWIiLCAmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKwlwYXNzMWMoY3R4LCBibG9ja19idWYpOworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgIlBhc3MgMWMiLCAmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKwlwYXNzMWQoY3R4LCBibG9ja19idWYpOworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgIlBhc3MgMWQiLCAmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisKKwkvKgorCSAqIFRpbWUgdG8gZnJlZSBhbGwgb2YgdGhlIGFjY3VtdWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdlCisJICogZG9uJ3QgbmVlZCBhbnltb3JlLgorCSAqLworCWRpY3RfZnJlZV9ub2RlcygmaW5vX2RpY3QpOworCWRpY3RfZnJlZV9ub2RlcygmY2xzdHJfZGljdCk7CisJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGlub2RlX2R1cF9tYXApOworfQorCisvKgorICogU2NhbiB0aGUgaW5vZGVzIGxvb2tpbmcgZm9yIGlub2RlcyB0aGF0IGNvbnRhaW4gZHVwbGljYXRlIGJsb2Nrcy4KKyAqLworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwllMmZzY2tfdAljdHg7CisJZXh0Ml9pbm9fdAlpbm87CisJaW50CQlkdXBfYmxvY2tzOworCWJsazY0X3QJCWN1cl9jbHVzdGVyOworCXN0cnVjdCBleHQyX2lub2RlICppbm9kZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4OworfTsKKworc3RhdGljIHZvaWQgcGFzczFiKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlleHQyX2lub190IGlubyA9IDA7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQl9QQVNTX0hFQURFUiwgJnBjdHgpOworCXBjdHguZXJyY29kZSA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIGN0eC0+aW5vZGVfYnVmZmVyX2Jsb2NrcywKKwkJCQkJICAgICAgJnNjYW4pOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQl9JU0NBTl9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWN0eC0+c3Rhc2hlZF9pbm9kZSA9ICZpbm9kZTsKKwlwYi5jdHggPSBjdHg7CisJcGIucGN0eCA9ICZwY3R4OworCXBjdHguc3RyID0gInBhc3MxYiI7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGlubyAlIChmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqIDQpID09IDEpIHsKKwkJCWlmIChlMmZzY2tfbW1wX3VwZGF0ZShmcykpCisJCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwkJaWYgKHBjdHguZXJyY29kZSA9PSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0lTQ0FOX0VSUk9SLCAmcGN0eCk7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJcmV0dXJuOworCQl9CisJCWlmICghaW5vKQorCQkJYnJlYWs7CisJCXBjdHguaW5vID0gY3R4LT5zdGFzaGVkX2lubyA9IGlubzsKKwkJaWYgKChpbm8gIT0gRVhUMl9CQURfSU5PKSAmJgorCQkgICAgIWV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaW5vKSkKKwkJCWNvbnRpbnVlOworCisJCXBiLmlubyA9IGlubzsKKwkJcGIuZHVwX2Jsb2NrcyA9IDA7CisJCXBiLmlub2RlID0gJmlub2RlOworCQlwYi5jdXJfY2x1c3RlciA9IH4wOworCisJCWlmIChleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsICZpbm9kZSkgfHwKKwkJICAgIChpbm8gPT0gRVhUMl9CQURfSU5PKSkKKwkJCXBjdHguZXJyY29kZSA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLAorCQkJCQkgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLCBibG9ja19idWYsCisJCQkJCSAgICAgcHJvY2Vzc19wYXNzMWJfYmxvY2ssICZwYik7CisJCS8qIElmIHRoZSBmZWF0dXJlIGlzIG5vdCBzZXQsIGF0dHJzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciBhbnl3YXkgKi8KKwkJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSKSAmJgorCQkgICAgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpKSB7CisJCQlibGs2NF90IGJsayA9IGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKTsKKwkJCXByb2Nlc3NfcGFzczFiX2Jsb2NrKGZzLCAmYmxrLAorCQkJCQkgICAgIEJMT0NLX0NPVU5UX0VYVEFUVFIsIDAsIDAsICZwYik7CisJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCAmaW5vZGUsIGJsayk7CisJCX0KKwkJaWYgKHBiLmR1cF9ibG9ja3MpIHsKKwkJCWVuZF9wcm9ibGVtX2xhdGNoKGN0eCwgUFJfTEFUQ0hfREJMT0NLKTsKKwkJCWlmIChpbm8gPj0gRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpIHx8CisJCQkgICAgaW5vID09IEVYVDJfUk9PVF9JTk8pCisJCQkJZHVwX2lub2RlX2NvdW50Kys7CisJCX0KKwkJaWYgKHBjdHguZXJyY29kZSkKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfQkxPQ0tfSVRFUkFURSwgJnBjdHgpOworCX0KKwlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKwllMmZzY2tfdXNlX2lub2RlX3Nob3J0Y3V0cyhjdHgsIDApOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcGFzczFiX2Jsb2NrKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQlibGs2NF90CSpibG9ja19uciwKKwkJCQllMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCQlibGs2NF90IHJlZl9ibGsgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCWludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwOworCWUyZnNja190IGN0eDsKKwlibGs2NF90CWxjOworCisJaWYgKEhPTEVfQkxLQUREUigqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJY3R4ID0gcC0+Y3R4OworCWxjID0gRVhUMkZTX0IyQyhmcywgYmxvY2tjbnQpOworCisJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZHVwX21hcCwgKmJsb2NrX25yKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKiBPSywgdGhpcyBpcyBhIGR1cGxpY2F0ZSBibG9jayAqLworCWlmIChwLT5pbm8gIT0gRVhUMl9CQURfSU5PKSB7CisJCXAtPnBjdHgtPmJsayA9ICpibG9ja19ucjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQl9EVVBfQkxPQ0ssIHAtPnBjdHgpOworCX0KKwlwLT5kdXBfYmxvY2tzKys7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihpbm9kZV9kdXBfbWFwLCBwLT5pbm8pOworCisJaWYgKGxjICE9IHAtPmN1cl9jbHVzdGVyKQorCQlhZGRfZHVwZShjdHgsIHAtPmlubywgRVhUMkZTX0IyQyhmcywgKmJsb2NrX25yKSwgcC0+aW5vZGUpOworCitmaW5pc2g6CisJcC0+Y3VyX2NsdXN0ZXIgPSBsYzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhc3MgMWM6IFNjYW4gZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIGR1cGxpY2F0ZSBibG9ja3MuICBUaGlzCisgKiBpcyB1c2VkIHNvIHRoYXQgd2UgY2FuIHByaW50IHBhdGhuYW1lcyB3aGVuIHByb21wdGluZyB0aGUgdXNlciBmb3IKKyAqIHdoYXQgdG8gZG8uCisgKi8KK3N0cnVjdCBzZWFyY2hfZGlyX3N0cnVjdCB7CisJaW50CQljb3VudDsKKwlleHQyX2lub190CWZpcnN0X2lub2RlOworCWV4dDJfaW5vX3QJbWF4X2lub2RlOworfTsKKworc3RhdGljIGludCBzZWFyY2hfZGlyZW50X3Byb2MoZXh0Ml9pbm9fdCBkaXIsIGludCBlbnRyeSwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJICAgICAgaW50IG9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBpbnQgYmxvY2tzaXplIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIGNoYXIgKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHNlYXJjaF9kaXJfc3RydWN0ICpzZDsKKwlzdHJ1Y3QgZHVwX2lub2RlCSpwOworCWRub2RlX3QJCQkqbjsKKworCXNkID0gKHN0cnVjdCBzZWFyY2hfZGlyX3N0cnVjdCAqKSBwcml2X2RhdGE7CisKKwlpZiAoZGlyZW50LT5pbm9kZSA+IHNkLT5tYXhfaW5vZGUpCisJCS8qIFNob3VsZCBhYm9ydCB0aGlzIGlub2RlLCBidXQgbm90IGV2ZXJ5dGhpbmcgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoKGRpcmVudC0+aW5vZGUgPCBzZC0+Zmlyc3RfaW5vZGUpIHx8IChlbnRyeSA8IERJUkVOVF9PVEhFUl9GSUxFKSB8fAorCSAgICAhZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihpbm9kZV9kdXBfbWFwLCBkaXJlbnQtPmlub2RlKSkKKwkJcmV0dXJuIDA7CisKKwluID0gZGljdF9sb29rdXAoJmlub19kaWN0LCBJTlRfVE9fVk9JRFBUUihkaXJlbnQtPmlub2RlKSk7CisJaWYgKCFuKQorCQlyZXR1cm4gMDsKKwlwID0gKHN0cnVjdCBkdXBfaW5vZGUgKikgZG5vZGVfZ2V0KG4pOworCWlmICghcC0+ZGlyKSB7CisJCXAtPmRpciA9IGRpcjsKKwkJc2QtPmNvdW50LS07CisJfQorCisJcmV0dXJuKHNkLT5jb3VudCA/IDAgOiBESVJFTlRfQUJPUlQpOworfQorCisKK3N0YXRpYyB2b2lkIHBhc3MxYyhlMmZzY2tfdCBjdHgsIGNoYXIgKmJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHNlYXJjaF9kaXJfc3RydWN0IHNkOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQ19QQVNTX0hFQURFUiwgJnBjdHgpOworCisJLyoKKwkgKiBTZWFyY2ggdGhyb3VnaCBhbGwgZGlyZWN0b3JpZXMgdG8gdHJhbnNsYXRlIGlub2RlcyB0byBuYW1lcworCSAqIChieSBzZWFyY2hpbmcgZm9yIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBmb3IgdGhhdCBpbm9kZS4pCisJICovCisJc2QuY291bnQgPSBkdXBfaW5vZGVfY291bnQgLSBkdXBfaW5vZGVfZm91bmRkaXI7CisJc2QuZmlyc3RfaW5vZGUgPSBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcik7CisJc2QubWF4X2lub2RlID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsKKwlleHQyZnNfZGJsaXN0X2Rpcl9pdGVyYXRlKGZzLT5kYmxpc3QsIDAsIGJsb2NrX2J1ZiwKKwkJCQkgIHNlYXJjaF9kaXJlbnRfcHJvYywgJnNkKTsKK30KKworc3RhdGljIHZvaWQgcGFzczFkKGUyZnNja190IGN0eCwgY2hhciAqYmxvY2tfYnVmKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgZHVwX2lub2RlCSpwLCAqdDsKKwlzdHJ1Y3QgZHVwX2NsdXN0ZXIJKnE7CisJZXh0Ml9pbm9fdAkJKnNoYXJlZCwgaW5vOworCWludAlzaGFyZWRfbGVuOworCWludAlpOworCWludAlmaWxlX29rOworCWludAltZXRhX2RhdGEgPSAwOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwlkbm9kZV90CSpuLCAqbTsKKwlzdHJ1Y3QgY2x1c3Rlcl9lbAkqczsKKwlzdHJ1Y3QgaW5vZGVfZWwgKnI7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfUEFTU19IRUFERVIsICZwY3R4KTsKKwllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisKKwlwY3R4Lm51bSA9IGR1cF9pbm9kZV9jb3VudDsgLyogZGljdF9jb3VudCgmaW5vX2RpY3QpOyAqLworCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfTlVNX0RVUF9JTk9ERVMsICZwY3R4KTsKKwlzaGFyZWQgPSAoZXh0Ml9pbm9fdCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkJCQlzaXplb2YoZXh0Ml9pbm9fdCkgKiBkaWN0X2NvdW50KCZpbm9fZGljdCksCisJCQkJIlNoYXJlZCBpbm9kZSBsaXN0Iik7CisJZm9yIChuID0gZGljdF9maXJzdCgmaW5vX2RpY3QpOyBuOyBuID0gZGljdF9uZXh0KCZpbm9fZGljdCwgbikpIHsKKwkJcCA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGRub2RlX2dldChuKTsKKwkJc2hhcmVkX2xlbiA9IDA7CisJCWZpbGVfb2sgPSAxOworCQlpbm8gPSAoZXh0Ml9pbm9fdClWT0lEUFRSX1RPX0lOVChkbm9kZV9nZXRrZXkobikpOworCQlpZiAoaW5vID09IEVYVDJfQkFEX0lOTyB8fCBpbm8gPT0gRVhUMl9SRVNJWkVfSU5PKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRmluZCBhbGwgb2YgdGhlIGlub2RlcyB3aGljaCBzaGFyZSBibG9ja3Mgd2l0aCB0aGlzCisJCSAqIG9uZS4gIEZpcnN0IHdlIGZpbmQgYWxsIG9mIHRoZSBkdXBsaWNhdGUgYmxvY2tzCisJCSAqIGJlbG9uZ2luZyB0byB0aGlzIGlub2RlLCBhbmQgdGhlbiBzZWFyY2ggZWFjaCBibG9jaworCQkgKiBnZXQgdGhlIGxpc3Qgb2YgaW5vZGVzLCBhbmQgbWVyZ2UgdGhlbSB0b2dldGhlci4KKwkJICovCisJCWZvciAocyA9IHAtPmNsdXN0ZXJfbGlzdDsgczsgcyA9IHMtPm5leHQpIHsKKwkJCW0gPSBkaWN0X2xvb2t1cCgmY2xzdHJfZGljdCwKKwkJCQkJSU5UX1RPX1ZPSURQVFIocy0+Y2x1c3RlcikpOworCQkJaWYgKCFtKQorCQkJCWNvbnRpbnVlOyAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCisJCQlxID0gKHN0cnVjdCBkdXBfY2x1c3RlciAqKSBkbm9kZV9nZXQobSk7CisJCQlpZiAocS0+bnVtX2JhZCA+IDEpCisJCQkJZmlsZV9vayA9IDA7CisJCQlpZiAoY2hlY2tfaWZfZnNfY2x1c3RlcihjdHgsIHMtPmNsdXN0ZXIpKSB7CisJCQkJZmlsZV9vayA9IDA7CisJCQkJbWV0YV9kYXRhID0gMTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEFkZCBhbGwgaW5vZGVzIHVzZWQgYnkgdGhpcyBibG9jayB0byB0aGUKKwkJCSAqIHNoYXJlZFtdIC0tLSB3aGljaCBpcyBhIHVuaXF1ZSBsaXN0LCBzbworCQkJICogaWYgYW4gaW5vZGUgaXMgYWxyZWFkeSBpbiBzaGFyZWRbXSwgZG9uJ3QKKwkJCSAqIGFkZCBpdCBhZ2Fpbi4KKwkJCSAqLworCQkJZm9yIChyID0gcS0+aW5vZGVfbGlzdDsgcjsgciA9IHItPm5leHQpIHsKKwkJCQlpZiAoci0+aW5vZGUgPT0gaW5vKQorCQkJCQljb250aW51ZTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgc2hhcmVkX2xlbjsgaSsrKQorCQkJCQlpZiAoc2hhcmVkW2ldID09IHItPmlub2RlKQorCQkJCQkJYnJlYWs7CisJCQkJaWYgKGkgPT0gc2hhcmVkX2xlbikgeworCQkJCQlzaGFyZWRbc2hhcmVkX2xlbisrXSA9IHItPmlub2RlOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlcG9ydCB0aGUgaW5vZGUgdGhhdCB3ZSBhcmUgd29ya2luZyBvbgorCQkgKi8KKwkJcGN0eC5pbm9kZSA9ICZwLT5pbm9kZTsKKwkJcGN0eC5pbm8gPSBpbm87CisJCXBjdHguZGlyID0gcC0+ZGlyOworCQlwY3R4LmJsa2NvdW50ID0gcC0+bnVtX2R1cGJsb2NrczsKKwkJcGN0eC5udW0gPSBtZXRhX2RhdGEgPyBzaGFyZWRfbGVuKzEgOiBzaGFyZWRfbGVuOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFEX0RVUF9GSUxFLCAmcGN0eCk7CisJCXBjdHguYmxrY291bnQgPSAwOworCQlwY3R4Lm51bSA9IDA7CisKKwkJaWYgKG1ldGFfZGF0YSkKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfU0hBUkVfTUVUQURBVEEsICZwY3R4KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hhcmVkX2xlbjsgaSsrKSB7CisJCQltID0gZGljdF9sb29rdXAoJmlub19kaWN0LCBJTlRfVE9fVk9JRFBUUihzaGFyZWRbaV0pKTsKKwkJCWlmICghbSkKKwkJCQljb250aW51ZTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJdCA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGRub2RlX2dldChtKTsKKwkJCS8qCisJCQkgKiBSZXBvcnQgdGhlIGlub2RlIHRoYXQgd2UgYXJlIHNoYXJpbmcgd2l0aAorCQkJICovCisJCQlwY3R4Lmlub2RlID0gJnQtPmlub2RlOworCQkJcGN0eC5pbm8gPSBzaGFyZWRbaV07CisJCQlwY3R4LmRpciA9IHQtPmRpcjsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfRFVQX0ZJTEVfTElTVCwgJnBjdHgpOworCQl9CisJCWlmIChmaWxlX29rKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFEX0RVUF9CTE9DS1NfREVBTFQsICZwY3R4KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzFEX0NMT05FX1FVRVNUSU9OLCAmcGN0eCkpIHsKKwkJCXBjdHguZXJyY29kZSA9IGNsb25lX2ZpbGUoY3R4LCBpbm8sIHAsIGJsb2NrX2J1Zik7CisJCQlpZiAocGN0eC5lcnJjb2RlKQorCQkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMURfQ0xPTkVfRVJST1IsICZwY3R4KTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8xRF9ERUxFVEVfUVVFU1RJT04sICZwY3R4KSkKKwkJCWRlbGV0ZV9maWxlKGN0eCwgaW5vLCBwLCBibG9ja19idWYpOworCQllbHNlCisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwl9CisJZXh0MmZzX2ZyZWVfbWVtKCZzaGFyZWQpOworfQorCisvKgorICogRHJvcCB0aGUgcmVmY291bnQgb24gdGhlIGR1cF9ibG9jayBzdHJ1Y3R1cmUsIGFuZCBjbGVhciB0aGUgZW50cnkKKyAqIGluIHRoZSBibG9ja19kdXBfbWFwIGlmIGFwcHJvcHJpYXRlLgorICovCitzdGF0aWMgdm9pZCBkZWNyZW1lbnRfYmFkY291bnQoZTJmc2NrX3QgY3R4LCBibGs2NF90IGJsb2NrLAorCQkJICAgICAgIHN0cnVjdCBkdXBfY2x1c3RlciAqcCkKK3sKKwlwLT5udW1fYmFkLS07CisJaWYgKHAtPm51bV9iYWQgPD0gMCB8fAorCSAgICAocC0+bnVtX2JhZCA9PSAxICYmICFjaGVja19pZl9mc19ibG9jayhjdHgsIGJsb2NrKSkpIHsKKwkJaWYgKGNoZWNrX2lmX2ZzX2NsdXN0ZXIoY3R4LCBFWFQyRlNfQjJDKGN0eC0+ZnMsIGJsb2NrKSkpCisJCQlyZXR1cm47CisJCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2R1cF9tYXAsIGJsb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX2ZpbGVfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgIGJsazY0X3QJKmJsb2NrX25yLAorCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICAgYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiOworCXN0cnVjdCBkdXBfY2x1c3RlciAqcDsKKwlkbm9kZV90CSpuOworCWUyZnNja190IGN0eDsKKwlibGs2NF90IGMsIGxjOworCisJcGIgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwljdHggPSBwYi0+Y3R4OworCisJaWYgKEhPTEVfQkxLQUREUigqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKworCWMgPSBFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpOworCWxjID0gRVhUMkZTX0IyQyhmcywgYmxvY2tjbnQpOworCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZHVwX21hcCwgKmJsb2NrX25yKSkgeworCQluID0gZGljdF9sb29rdXAoJmNsc3RyX2RpY3QsIElOVF9UT19WT0lEUFRSKGMpKTsKKwkJaWYgKG4pIHsKKwkJCXAgPSAoc3RydWN0IGR1cF9jbHVzdGVyICopIGRub2RlX2dldChuKTsKKwkJCWlmIChsYyAhPSBwYi0+Y3VyX2NsdXN0ZXIpCisJCQkJZGVjcmVtZW50X2JhZGNvdW50KGN0eCwgKmJsb2NrX25yLCBwKTsKKwkJfSBlbHNlCisJCQljb21fZXJyKCJkZWxldGVfZmlsZV9ibG9jayIsIDAsCisJCQkgICAgXygiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIiksCisJCQkJKmJsb2NrX25yKTsKKwl9IGVsc2UgeworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsICpibG9ja19ucik7CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsICpibG9ja19uciwgLTEpOworCQlwYi0+ZHVwX2Jsb2NrcysrOworCX0KKwlwYi0+Y3VyX2NsdXN0ZXIgPSBsYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfZmlsZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLAorCQkJc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIqIGJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwl1bnNpZ25lZCBpbnQJCWNvdW50OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlwY3R4LmlubyA9IHBiLmlubyA9IGlubzsKKwlwYi5kdXBfYmxvY2tzID0gMDsKKwlwYi5jdHggPSBjdHg7CisJcGN0eC5zdHIgPSAiZGVsZXRlX2ZpbGUiOworCXBiLmN1cl9jbHVzdGVyID0gfjA7CisKKwlpZiAoZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmZHAtPmlub2RlKSkKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sCisJCQkJCQkgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorCQkJCQkJICAgICBibG9ja19idWYsCisJCQkJCQkgICAgIGRlbGV0ZV9maWxlX2Jsb2NrLCAmcGIpOworCWlmIChwY3R4LmVycmNvZGUpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMUJfQkxPQ0tfSVRFUkFURSwgJnBjdHgpOworCWlmIChjdHgtPmlub2RlX2JhZF9tYXApCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JhZF9tYXAsIGlubyk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCAtMSwgTElOVVhfU19JU0RJUihkcC0+aW5vZGUuaV9tb2RlKSk7CisJcXVvdGFfZGF0YV9zdWIoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sCisJCSAgICAgICBwYi5kdXBfYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sIC0xKTsKKworCS8qIElub2RlIG1heSBoYXZlIGNoYW5nZWQgYnkgYmxvY2tfaXRlcmF0ZSwgc28gcmVyZWFkIGl0ICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZkcC0+aW5vZGUsICJkZWxldGVfZmlsZSIpOworCWUyZnNja19jbGVhcl9pbm9kZShjdHgsIGlubywgJmRwLT5pbm9kZSwgMCwgImRlbGV0ZV9maWxlIik7CisJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSkgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIpKSB7CisJCWNvdW50ID0gMTsKKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIoZnMsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSksCisJCQkJCQkgICBibG9ja19idWYsIC0xLCAmY291bnQpOworCQlpZiAocGN0eC5lcnJjb2RlID09IEVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTSkgeworCQkJcGN0eC5lcnJjb2RlID0gMDsKKwkJCWNvdW50ID0gMTsKKwkJfQorCQlpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlwY3R4LmJsayA9IGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSk7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzFCX0FESl9FQV9SRUZDT1VOVCwgJnBjdHgpOworCQl9CisJCS8qCisJCSAqIElmIHRoZSBjb3VudCBpcyB6ZXJvLCB0aGVuIGFycmFuZ2UgdG8gaGF2ZSB0aGUKKwkJICogYmxvY2sgZGVsZXRlZC4gIElmIHRoZSBibG9jayBpcyBpbiB0aGUgYmxvY2tfZHVwX21hcCwKKwkJICogYWxzbyBjYWxsIGRlbGV0ZV9maWxlX2Jsb2NrIHNpbmNlIGl0IHdpbGwgdGFrZSBjYXJlCisJCSAqIG9mIGtlZXBpbmcgdGhlIGFjY291bnRpbmcgc3RyYWlnaHQuCisJCSAqLworCQlpZiAoKGNvdW50ID09IDApIHx8CisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZHVwX21hcCwKKwkJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKSkpIHsKKwkJCWJsazY0X3QgYmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKTsKKwkJCWRlbGV0ZV9maWxlX2Jsb2NrKGZzLCAmYmxrLAorCQkJCQkgIEJMT0NLX0NPVU5UX0VYVEFUVFIsIDAsIDAsICZwYik7CisJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGZzLCAmZHAtPmlub2RlLCBibGspOworCQkJcXVvdGFfZGF0YV9zdWIoY3R4LT5xY3R4LCAmZHAtPmlub2RlLCBpbm8sIGZzLT5ibG9ja3NpemUpOworCQl9CisJfQorfQorCitzdHJ1Y3QgY2xvbmVfc3RydWN0IHsKKwllcnJjb2RlX3QJZXJyY29kZTsKKwlibGs2NF90CQlkdXBfY2x1c3RlcjsKKwlibGs2NF90CQlhbGxvY19ibG9jazsKKwlleHQyX2lub190CWRpcjsKKwljaGFyCSpidWY7CisJZTJmc2NrX3QgY3R4OworfTsKKworc3RhdGljIGludCBjbG9uZV9maWxlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgIGJsazY0X3QJKmJsb2NrX25yLAorCQkJICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBkdXBfY2x1c3RlciAqcDsKKwlibGs2NF90CW5ld19ibG9jazsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBjbG9uZV9zdHJ1Y3QgKmNzID0gKHN0cnVjdCBjbG9uZV9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWRub2RlX3QgKm47CisJZTJmc2NrX3QgY3R4OworCWJsazY0X3QgYzsKKwlpbnQgaXNfbWV0YSA9IDA7CisKKwljdHggPSBjcy0+Y3R4OworCisJaWYgKEhPTEVfQkxLQUREUigqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKworCWMgPSBFWFQyRlNfQjJDKGZzLCBibG9ja2NudCk7CisJaWYgKGNoZWNrX2lmX2ZzX2NsdXN0ZXIoY3R4LCBFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpKSkKKwkJaXNfbWV0YSA9IDE7CisKKwlpZiAoYyA9PSBjcy0+ZHVwX2NsdXN0ZXIgJiYgY3MtPmFsbG9jX2Jsb2NrKSB7CisJCW5ld19ibG9jayA9IGNzLT5hbGxvY19ibG9jazsKKwkJZ290byBnb3RfYmxvY2s7CisJfQorCisJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19kdXBfbWFwLCAqYmxvY2tfbnIpKSB7CisJCW4gPSBkaWN0X2xvb2t1cCgmY2xzdHJfZGljdCwKKwkJCQlJTlRfVE9fVk9JRFBUUihFWFQyRlNfQjJDKGZzLCAqYmxvY2tfbnIpKSk7CisJCWlmICghbikgeworCQkJY29tX2VycigiY2xvbmVfZmlsZV9ibG9jayIsIDAsCisJCQkgICAgXygiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIiksCisJCQkJKmJsb2NrX25yKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJcCA9IChzdHJ1Y3QgZHVwX2NsdXN0ZXIgKikgZG5vZGVfZ2V0KG4pOworCQlpZiAoIWlzX21ldGEpCisJCQlkZWNyZW1lbnRfYmFkY291bnQoY3R4LCAqYmxvY2tfbnIsIHApOworCisJCWNzLT5kdXBfY2x1c3RlciA9IGM7CisKKwkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIDAsIGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQkgICAmbmV3X2Jsb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY3MtPmVycmNvZGUgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJY3MtPmFsbG9jX2Jsb2NrID0gbmV3X2Jsb2NrOworCisJZ290X2Jsb2NrOgorCQluZXdfYmxvY2sgJj0gfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCQluZXdfYmxvY2sgKz0gRVhUMkZTX0NMVVNURVJfTUFTSyhmcykgJiBibG9ja2NudDsKKwkJaWYgKGNzLT5kaXIgJiYgKGJsb2NrY250ID49IDApKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfc2V0X2Rpcl9ibG9jazIoZnMtPmRibGlzdCwKKwkJCQkJY3MtPmRpciwgbmV3X2Jsb2NrLCBibG9ja2NudCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY3MtPmVycmNvZGUgPSByZXR2YWw7CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQl9CisjaWYgMAorIAkJcHJpbnRmKCJDbG9uaW5nIGJsb2NrICMlbGxkIGZyb20gJWxsdSB0byAlbGx1XG4iLAorCQkgICAgICAgYmxvY2tjbnQsICpibG9ja19uciwgbmV3X2Jsb2NrKTsKKyNlbmRpZgorCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCAqYmxvY2tfbnIsIDEsIGNzLT5idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQljcy0+ZXJyY29kZSA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgbmV3X2Jsb2NrLCAxLCBjcy0+YnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY3MtPmVycmNvZGUgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJKmJsb2NrX25yID0gbmV3X2Jsb2NrOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCBuZXdfYmxvY2spOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIG5ld19ibG9jayk7CisJCXJldHVybiBCTE9DS19DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBjbG9uZV9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgc3RydWN0IGR1cF9pbm9kZSAqZHAsIGNoYXIqIGJsb2NrX2J1ZikKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgY2xvbmVfc3RydWN0IGNzOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlibGs2NF90CQlibGssIG5ld19ibGs7CisJZG5vZGVfdAkJKm47CisJc3RydWN0IGlub2RlX2VsCSppbm9fZWw7CisJc3RydWN0IGR1cF9jbHVzdGVyCSpkYzsKKwlzdHJ1Y3QgZHVwX2lub2RlCSpkaTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJY3MuZXJyY29kZSA9IDA7CisJY3MuZGlyID0gMDsKKwljcy5kdXBfY2x1c3RlciA9IH4wOworCWNzLmFsbG9jX2Jsb2NrID0gMDsKKwljcy5jdHggPSBjdHg7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmNzLmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwgaW5vKSkKKwkJY3MuZGlyID0gaW5vOworCisJcGN0eC5pbm8gPSBpbm87CisJcGN0eC5zdHIgPSAiY2xvbmVfZmlsZSI7CisJaWYgKGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgJmRwLT5pbm9kZSkpCisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCAwLCBibG9ja19idWYsCisJCQkJCQkgICAgIGNsb25lX2ZpbGVfYmxvY2ssICZjcyk7CisJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8xQl9CTE9DS19JVEVSQVRFLCAmcGN0eCk7CisJCXJldHZhbCA9IHBjdHguZXJyY29kZTsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChjcy5lcnJjb2RlKSB7CisJCWNvbV9lcnIoImNsb25lX2ZpbGUiLCBjcy5lcnJjb2RlLCAiJXMiLAorCQkJXygicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIikpOworCQlyZXR2YWwgPSBjcy5lcnJjb2RlOworCQlnb3RvIGVycm91dDsKKwl9CisJLyogVGhlIGlub2RlIG1heSBoYXZlIGNoYW5nZWQgb24gZGlzaywgc28gd2UgaGF2ZSB0byByZS1yZWFkIGl0ICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZkcC0+aW5vZGUsICJjbG9uZSBmaWxlIEVBIik7CisJYmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmZHAtPmlub2RlKTsKKwluZXdfYmxrID0gYmxrOworCWlmIChibGsgJiYgKGNsb25lX2ZpbGVfYmxvY2soZnMsICZuZXdfYmxrLAorCQkJCSAgICAgQkxPQ0tfQ09VTlRfRVhUQVRUUiwgMCwgMCwgJmNzKSA9PQorCQkgICAgQkxPQ0tfQ0hBTkdFRCkpIHsKKwkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmRwLT5pbm9kZSwgbmV3X2Jsayk7CisJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlubywgJmRwLT5pbm9kZSwgImNsb25lIGZpbGUgRUEiKTsKKwkJLyoKKwkJICogSWYgd2UgY2xvbmVkIHRoZSBFQSBibG9jaywgZmluZCBhbGwgb3RoZXIgaW5vZGVzCisJCSAqIHdoaWNoIHJlZmVyZWQgdG8gdGhhdCBFQSBibG9jaywgYW5kIG1vZGlmeQorCQkgKiB0aGVtIHRvIHBvaW50IHRvIHRoZSBuZXcgRUEgYmxvY2suCisJCSAqLworCQluID0gZGljdF9sb29rdXAoJmNsc3RyX2RpY3QsCisJCQkJSU5UX1RPX1ZPSURQVFIoRVhUMkZTX0IyQyhmcywgYmxrKSkpOworCQlpZiAoIW4pIHsKKwkJCWNvbV9lcnIoImNsb25lX2ZpbGUiLCAwLAorCQkJCV8oImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgIgorCQkJCSAgImJsb2NrIHJlY29yZCBmb3IgJWxsdSIpLCBibGspOworCQkJcmV0dmFsID0gMDsgLyogT0sgdG8gc3R1bWJsZSBvbi4uLiAqLworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZGMgPSAoc3RydWN0IGR1cF9jbHVzdGVyICopIGRub2RlX2dldChuKTsKKwkJZm9yIChpbm9fZWwgPSBkYy0+aW5vZGVfbGlzdDsgaW5vX2VsOyBpbm9fZWwgPSBpbm9fZWwtPm5leHQpIHsKKwkJCWlmIChpbm9fZWwtPmlub2RlID09IGlubykKKwkJCQljb250aW51ZTsKKwkJCW4gPSBkaWN0X2xvb2t1cCgmaW5vX2RpY3QsIElOVF9UT19WT0lEUFRSKGlub19lbC0+aW5vZGUpKTsKKwkJCWlmICghbikgeworCQkJCWNvbV9lcnIoImNsb25lX2ZpbGUiLCAwLAorCQkJCQlfKCJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBICIKKwkJCQkJICAiaW5vZGUgcmVjb3JkIGZvciAldSIpLAorCQkJCQlpbm9fZWwtPmlub2RlKTsKKwkJCQlyZXR2YWwgPSAwOyAvKiBPSyB0byBzdHVtYmxlIG9uLi4uICovCisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCQlkaSA9IChzdHJ1Y3QgZHVwX2lub2RlICopIGRub2RlX2dldChuKTsKKwkJCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZkaS0+aW5vZGUpID09IGJsaykgeworCQkJCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZnMsICZkaS0+aW5vZGUsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmRwLT5pbm9kZSkpOworCQkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIGlub19lbC0+aW5vZGUsCisJCQkJCSAgICZkaS0+aW5vZGUsICJjbG9uZSBmaWxlIEVBIik7CisJCQkJZGVjcmVtZW50X2JhZGNvdW50KGN0eCwgYmxrLCBkYyk7CisJCQl9CisJCX0KKwl9CisJcmV0dmFsID0gMDsKK2Vycm91dDoKKwlleHQyZnNfZnJlZV9tZW0oJmNzLmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDEgaWYgYSBibG9jayBvdmVybGFwcyB3aXRoIG9uZSBvZiB0aGUgc3VwZXJibG9ja3MsCisgKiBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgYml0bWFwcywgb3IgYmxvY2sgYml0bWFwcy4KKyAqLworc3RhdGljIGludCBjaGVja19pZl9mc19ibG9jayhlMmZzY2tfdCBjdHgsIGJsazY0X3QgdGVzdF9ibG9jaykKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJYmxrNjRfdAlmaXJzdF9ibG9jazsKKwlkZ3JwX3QJaTsKKworCWZpcnN0X2Jsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKworCQkvKiBDaGVjayBzdXBlcmJsb2Nrcy9ibG9jayBncm91cCBkZXNjcmlwdG9ycyAqLworCQlpZiAoZXh0MmZzX2JnX2hhc19zdXBlcihmcywgaSkpIHsKKwkJCWlmICh0ZXN0X2Jsb2NrID49IGZpcnN0X2Jsb2NrICYmCisJCQkgICAgKHRlc3RfYmxvY2sgPD0gZmlyc3RfYmxvY2sgKyBmcy0+ZGVzY19ibG9ja3MpKQorCQkJCXJldHVybiAxOworCQl9CisKKwkJLyogQ2hlY2sgdGhlIGlub2RlIHRhYmxlICovCisJCWlmICgoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkpICYmCisJCSAgICAodGVzdF9ibG9jayA+PSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgJiYKKwkJICAgICh0ZXN0X2Jsb2NrIDwgKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpICsKKwkJCQkgICBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkpKQorCQkJcmV0dXJuIDE7CisKKwkJLyogQ2hlY2sgdGhlIGJpdG1hcCBibG9ja3MgKi8KKwkJaWYgKCh0ZXN0X2Jsb2NrID09IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSkgfHwKKwkJICAgICh0ZXN0X2Jsb2NrID09IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkpCisJCQlyZXR1cm4gMTsKKworCQlmaXJzdF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAxIGlmIGEgY2x1c3RlciBvdmVybGFwcyB3aXRoIG9uZSBvZiB0aGUgc3VwZXJibG9ja3MsCisgKiBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgYml0bWFwcywgb3IgYmxvY2sgYml0bWFwcy4KKyAqLworc3RhdGljIGludCBjaGVja19pZl9mc19jbHVzdGVyKGUyZnNja190IGN0eCwgYmxrNjRfdCBjbHVzdGVyKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CWZpcnN0X2Jsb2NrOworCWRncnBfdAlpOworCisJZmlyc3RfYmxvY2sgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCisJCS8qIENoZWNrIHN1cGVyYmxvY2tzL2Jsb2NrIGdyb3VwIGRlc2NyaXB0b3JzICovCisJCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBpKSkgeworCQkJaWYgKGNsdXN0ZXIgPj0gRVhUMkZTX0IyQyhmcywgZmlyc3RfYmxvY2spICYmCisJCQkgICAgKGNsdXN0ZXIgPD0gRVhUMkZTX0IyQyhmcywgZmlyc3RfYmxvY2sgKworCQkJCQkJICAgZnMtPmRlc2NfYmxvY2tzKSkpCisJCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaGVjayB0aGUgaW5vZGUgdGFibGUgKi8KKwkJaWYgKChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSkgJiYKKwkJICAgIChjbHVzdGVyID49IEVYVDJGU19CMkMoZnMsCisJCQkJCSAgIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKSkgJiYKKwkJICAgIChjbHVzdGVyIDw9IEVYVDJGU19CMkMoZnMsCisJCQkJCSAgIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpICsKKwkJCQkJICAgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgLSAxKSkpCisJCQlyZXR1cm4gMTsKKworCQkvKiBDaGVjayB0aGUgYml0bWFwIGJsb2NrcyAqLworCQlpZiAoKGNsdXN0ZXIgPT0gRVhUMkZTX0IyQyhmcywKKwkJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSkgfHwKKwkJICAgIChjbHVzdGVyID09IEVYVDJGU19CMkMoZnMsCisJCQkJCSAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSkpKQorCQkJcmV0dXJuIDE7CisKKwkJZmlyc3RfYmxvY2sgKz0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wYXNzMi5jIGIvZTJmc3Byb2dzL2UyZnNjay9wYXNzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDY2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MyLmMKQEAgLTAsMCArMSwxNDk1IEBACisvKgorICogcGFzczIuYyAtLS0gY2hlY2sgZGlyZWN0b3J5IHN0cnVjdHVyZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBQYXNzIDIgb2YgZTJmc2NrIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGFjdGl2ZSBkaXJlY3RvcnkgaW5vZGVzLCBhbmQKKyAqIGFwcGxpZXMgdG8gZm9sbG93aW5nIHRlc3RzIHRvIGVhY2ggZGlyZWN0b3J5IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkKKyAqIGJsb2NrcyBpbiB0aGUgaW5vZGVzOgorICoKKyAqCS0gVGhlIGxlbmd0aCBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5IChyZWNfbGVuKSBzaG91bGQgYmUgYXQKKyAqIAkJbGVhc3QgOCBieXRlcywgYW5kIG5vIG1vcmUgdGhhbiB0aGUgcmVtYWluaW5nIHNwYWNlCisgKiAJCWxlZnQgaW4gdGhlIGRpcmVjdG9yeSBibG9jay4KKyAqIAktIFRoZSBsZW5ndGggb2YgdGhlIG5hbWUgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeSAobmFtZV9sZW4pCisgKiAJCXNob3VsZCBiZSBsZXNzIHRoYW4gKHJlY19sZW4gLSA4KS4KKyAqCS0gVGhlIGlub2RlIG51bWJlciBpbiB0aGUgZGlyZWN0b3J5IGVudHJ5IHNob3VsZCBiZSB3aXRoaW4KKyAqIAkJbGVnYWwgYm91bmRzLgorICogCS0gVGhlIGlub2RlIG51bWJlciBzaG91bGQgcmVmZXIgdG8gYSBpbi11c2UgaW5vZGUuCisgKgktIFRoZSBmaXJzdCBlbnRyeSBzaG91bGQgYmUgJy4nLCBhbmQgaXRzIGlub2RlIHNob3VsZCBiZQorICogCQl0aGUgaW5vZGUgb2YgdGhlIGRpcmVjdG9yeS4KKyAqIAktIFRoZSBzZWNvbmQgZW50cnkgc2hvdWxkIGJlICcuLicuCisgKgorICogVG8gbWluaW1pemUgZGlzayBzZWVrIHRpbWUsIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGFyZSBwcm9jZXNzZWQgaW4KKyAqIHNvcnRlZCBvcmRlciBvZiBibG9jayBudW1iZXJzLgorICoKKyAqIFBhc3MgMiBhbHNvIGNvbGxlY3RzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisgKiAJLSBUaGUgaW5vZGUgbnVtYmVycyBvZiB0aGUgc3ViZGlyZWN0b3JpZXMgZm9yIGVhY2ggZGlyZWN0b3J5LgorICoKKyAqIFBhc3MgMiByZWxpZXMgb24gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmcm9tIHByZXZpb3VzIHBhc3NlczoKKyAqIAktIFRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gY29sbGVjdGVkIGluIHBhc3MgMS4KKyAqIAktIFRoZSBpbm9kZV91c2VkX21hcCBiaXRtYXAKKyAqIAktIFRoZSBpbm9kZV9iYWRfbWFwIGJpdG1hcAorICogCS0gVGhlIGlub2RlX2Rpcl9tYXAgYml0bWFwCisgKgorICogUGFzcyAyIGZyZWVzIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzCisgKiAJLSBUaGUgaW5vZGVfYmFkX21hcCBiaXRtYXAKKyAqIAktIFRoZSBpbm9kZV9yZWdfbWFwIGJpdG1hcAorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMSAvKiBnZXQgc3RybmxlbigpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSAiZGljdC5oIgorCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCisjZGVmaW5lIF9JTkxJTkVfCisjZWxzZQorI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKKyNlbmRpZgorCisvKiAjZGVmaW5lIERYX0RFQlVHICovCisKKy8qCisgKiBLZWVwcyB0cmFjayBvZiBob3cgbWFueSB0aW1lcyBhbiBpbm9kZSBpcyByZWZlcmVuY2VkLgorICovCitzdGF0aWMgdm9pZCBkZWFsbG9jYXRlX2lub2RlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sIGNoYXIqIGJsb2NrX2J1Zik7CitzdGF0aWMgaW50IGNoZWNrX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCSAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGlyX2Jsb2Nrc19pbmZvLAorCQkJICAgdm9pZCAqcHJpdl9kYXRhKTsKK3N0YXRpYyBpbnQgYWxsb2NhdGVfZGlyX2Jsb2NrKGUyZnNja190IGN0eCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGlyX2Jsb2Nrc19pbmZvLAorCQkJICAgICAgY2hhciAqYnVmLCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KTsKK3N0YXRpYyB2b2lkIGNsZWFyX2h0cmVlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pOworc3RhdGljIGludCBodHJlZV9kZXB0aChzdHJ1Y3QgZHhfZGlyX2luZm8gKmR4X2RpciwKKwkJICAgICAgIHN0cnVjdCBkeF9kaXJibG9ja19pbmZvICpkeF9kYik7CitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIHNwZWNpYWxfZGlyX2Jsb2NrX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKKworc3RydWN0IGNoZWNrX2Rpcl9zdHJ1Y3QgeworCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJaW50CWNvdW50LCBtYXg7CisJZTJmc2NrX3QgY3R4OworfTsKKwordm9pZCBlMmZzY2tfcGFzczIoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlleHQyX2ZpbHN5cyAJCWZzID0gY3R4LT5mczsKKwljaGFyCQkJKmJ1ZjsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwlzdHJ1Y3QgY2hlY2tfZGlyX3N0cnVjdCBjZDsKKwlzdHJ1Y3QgZHhfZGlyX2luZm8JKmR4X2RpcjsKKwlzdHJ1Y3QgZHhfZGlyYmxvY2tfaW5mbwkqZHhfZGIsICpkeF9wYXJlbnQ7CisJdW5zaWduZWQgaW50CQlzYXZlX3R5cGU7CisJaW50CQkJYjsKKwlpbnQJCQlpLCBkZXB0aDsKKwlwcm9ibGVtX3QJCWNvZGU7CisJaW50CQkJYmFkX2RpcjsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmY2QucGN0eCk7CisKKyNpZmRlZiBNVFJBQ0UKKwltdHJhY2VfcHJpbnQoIlBhc3MgMiIpOworI2VuZGlmCisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX1BBU1NfSEVBREVSLCAmY2QucGN0eCk7CisKKwllMmZzY2tfc2V0dXBfdGRiX2ljb3VudChjdHgsIEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQsCisJCQkJJmN0eC0+aW5vZGVfY291bnQpOworCWlmIChjdHgtPmlub2RlX2NvdW50KQorCQljZC5wY3R4LmVycmNvZGUgPSAwOworCWVsc2UgeworCQllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBFWFQyRlNfQk1BUDY0X1JCVFJFRSwKKwkJCQkgICAgICAgImlub2RlX2NvdW50IiwgJnNhdmVfdHlwZSk7CisJCWNkLnBjdHguZXJyY29kZSA9IGV4dDJmc19jcmVhdGVfaWNvdW50MihmcywKKwkJCQkJCUVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQsCisJCQkJCQkwLCBjdHgtPmlub2RlX2xpbmtfaW5mbywKKwkJCQkJCSZjdHgtPmlub2RlX2NvdW50KTsKKwkJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBzYXZlX3R5cGU7CisJfQorCWlmIChjZC5wY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0FMTE9DQVRFX0lDT1VOVCwgJmNkLnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWJ1ZiA9IChjaGFyICopIGUyZnNja19hbGxvY2F0ZV9tZW1vcnkoY3R4LCAyKmZzLT5ibG9ja3NpemUsCisJCQkJCSAgICAgICJkaXJlY3Rvcnkgc2NhbiBidWZmZXIiKTsKKworCS8qCisJICogU2V0IHVwIHRoZSBwYXJlbnQgcG9pbnRlciBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5LCBpZgorCSAqIHByZXNlbnQuICAoSWYgdGhlIHJvb3QgZGlyZWN0b3J5IGlzIG5vdCBwcmVzZW50LCB3ZSB3aWxsCisJICogY3JlYXRlIGl0IGluIHBhc3MgMy4pCisJICovCisJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfcGFyZW50KGN0eCwgRVhUMl9ST09UX0lOTywgRVhUMl9ST09UX0lOTyk7CisKKwljZC5idWYgPSBidWY7CisJY2QuY3R4ID0gY3R4OworCWNkLmNvdW50ID0gMTsKKwljZC5tYXggPSBleHQyZnNfZGJsaXN0X2NvdW50Mihmcy0+ZGJsaXN0KTsKKworCWlmIChjdHgtPnByb2dyZXNzKQorCQkodm9pZCkgKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgMiwgMCwgY2QubWF4KTsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkKKwkJZXh0MmZzX2RibGlzdF9zb3J0Mihmcy0+ZGJsaXN0LCBzcGVjaWFsX2Rpcl9ibG9ja19jbXApOworCisJY2QucGN0eC5lcnJjb2RlID0gZXh0MmZzX2RibGlzdF9pdGVyYXRlMihmcy0+ZGJsaXN0LCBjaGVja19kaXJfYmxvY2ssCisJCQkJCQkgJmNkKTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLIHx8IGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SRVNUQVJUKQorCQlyZXR1cm47CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JFU1RBUlRfTEFURVIpIHsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19SRVNUQVJUOworCQlyZXR1cm47CisJfQorCisJaWYgKGNkLnBjdHguZXJyY29kZSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfREJMSVNUX0lURVJBVEUsICZjZC5wY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIEVOQUJMRV9IVFJFRQorCWZvciAoaT0wOyAoZHhfZGlyID0gZTJmc2NrX2R4X2Rpcl9pbmZvX2l0ZXIoY3R4LCAmaSkpICE9IDA7KSB7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlyZXR1cm47CisJCWlmIChkeF9kaXItPm51bWJsb2NrcyA9PSAwKQorCQkJY29udGludWU7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCWJhZF9kaXIgPSAwOworCQlwY3R4LmRpciA9IGR4X2Rpci0+aW5vOworCQlkeF9kYiA9IGR4X2Rpci0+ZHhfYmxvY2s7CisJCWlmIChkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX1JFRkVSRU5DRUQpCisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19EVVBfUkVGOworCQllbHNlCisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19SRUZFUkVOQ0VEOworCQkvKgorCQkgKiBGaW5kIGFsbCBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgbGVhZiBibG9ja3MsIGFuZAorCQkgKiB1cGRhdGUgdGhlaXIgcGFyZW50J3MgbWluIGFuZCBtYXggaGFzaCB2YWx1ZXMKKwkJICovCisJCWZvciAoYj0wLCBkeF9kYiA9IGR4X2Rpci0+ZHhfYmxvY2s7CisJCSAgICAgYiA8IGR4X2Rpci0+bnVtYmxvY2tzOworCQkgICAgIGIrKywgZHhfZGIrKykgeworCQkJaWYgKChkeF9kYi0+dHlwZSAhPSBEWF9ESVJCTE9DS19MRUFGKSB8fAorCQkJICAgICEoZHhfZGItPmZsYWdzICYgKERYX0ZMQUdfRklSU1QgfCBEWF9GTEFHX0xBU1QpKSkKKwkJCQljb250aW51ZTsKKwkJCWR4X3BhcmVudCA9ICZkeF9kaXItPmR4X2Jsb2NrW2R4X2RiLT5wYXJlbnRdOworCQkJLyoKKwkJCSAqIFhYWCBNYWtlIHN1cmUgZHhfcGFyZW50LT5taW5faGFzaCA+IGR4X2RiLT5taW5faGFzaAorCQkJICovCisJCQlpZiAoZHhfZGItPmZsYWdzICYgRFhfRkxBR19GSVJTVCkKKwkJCQlkeF9wYXJlbnQtPm1pbl9oYXNoID0gZHhfZGItPm1pbl9oYXNoOworCQkJLyoKKwkJCSAqIFhYWCBNYWtlIHN1cmUgZHhfcGFyZW50LT5tYXhfaGFzaCA8IGR4X2RiLT5tYXhfaGFzaAorCQkJICovCisJCQlpZiAoZHhfZGItPmZsYWdzICYgRFhfRkxBR19MQVNUKQorCQkJCWR4X3BhcmVudC0+bWF4X2hhc2ggPSBkeF9kYi0+bWF4X2hhc2g7CisJCX0KKworCQlmb3IgKGI9MCwgZHhfZGIgPSBkeF9kaXItPmR4X2Jsb2NrOworCQkgICAgIGIgPCBkeF9kaXItPm51bWJsb2NrczsKKwkJICAgICBiKyssIGR4X2RiKyspIHsKKwkJCXBjdHguYmxrY291bnQgPSBiOworCQkJcGN0eC5ncm91cCA9IGR4X2RiLT5wYXJlbnQ7CisJCQljb2RlID0gMDsKKwkJCWlmICghKGR4X2RiLT5mbGFncyAmIERYX0ZMQUdfRklSU1QpICYmCisJCQkgICAgKGR4X2RiLT5taW5faGFzaCA8IGR4X2RiLT5ub2RlX21pbl9oYXNoKSkgeworCQkJCXBjdHguYmxrID0gZHhfZGItPm1pbl9oYXNoOworCQkJCXBjdHguYmxrMiA9IGR4X2RiLT5ub2RlX21pbl9oYXNoOworCQkJCWNvZGUgPSBQUl8yX0hUUkVFX01JTl9IQVNIOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgY29kZSwgJnBjdHgpOworCQkJCWJhZF9kaXIrKzsKKwkJCX0KKwkJCWlmIChkeF9kYi0+dHlwZSA9PSBEWF9ESVJCTE9DS19MRUFGKSB7CisJCQkJZGVwdGggPSBodHJlZV9kZXB0aChkeF9kaXIsIGR4X2RiKTsKKwkJCQlpZiAoZGVwdGggIT0gZHhfZGlyLT5kZXB0aCkgeworCQkJCQlwY3R4Lm51bSA9IGR4X2Rpci0+ZGVwdGg7CisJCQkJCWNvZGUgPSBQUl8yX0hUUkVFX0JBRF9ERVBUSDsKKwkJCQkJZml4X3Byb2JsZW0oY3R4LCBjb2RlLCAmcGN0eCk7CisJCQkJCWJhZF9kaXIrKzsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogVGhpcyB0ZXN0IGRvZXNuJ3QgYXBwbHkgZm9yIHRoZSByb290IGJsb2NrCisJCQkgKiBhdCBibG9jayAjMAorCQkJICovCisJCQlpZiAoYiAmJgorCQkJICAgIChkeF9kYi0+bWF4X2hhc2ggPiBkeF9kYi0+bm9kZV9tYXhfaGFzaCkpIHsKKwkJCQlwY3R4LmJsayA9IGR4X2RiLT5tYXhfaGFzaDsKKwkJCQlwY3R4LmJsazIgPSBkeF9kYi0+bm9kZV9tYXhfaGFzaDsKKwkJCQljb2RlID0gUFJfMl9IVFJFRV9NQVhfSEFTSDsKKwkJCQlmaXhfcHJvYmxlbShjdHgsIGNvZGUsICZwY3R4KTsKKwkJCQliYWRfZGlyKys7CisJCQl9CisJCQlpZiAoIShkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX1JFRkVSRU5DRUQpKSB7CisJCQkJY29kZSA9IFBSXzJfSFRSRUVfTk9UUkVGOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgY29kZSwgJnBjdHgpOworCQkJCWJhZF9kaXIrKzsKKwkJCX0gZWxzZSBpZiAoZHhfZGItPmZsYWdzICYgRFhfRkxBR19EVVBfUkVGKSB7CisJCQkJY29kZSA9IFBSXzJfSFRSRUVfRFVQUkVGOworCQkJCWZpeF9wcm9ibGVtKGN0eCwgY29kZSwgJnBjdHgpOworCQkJCWJhZF9kaXIrKzsKKwkJCX0KKwkJfQorCQlpZiAoYmFkX2RpciAmJiBmaXhfcHJvYmxlbShjdHgsIFBSXzJfSFRSRUVfQ0xFQVIsICZwY3R4KSkgeworCQkJY2xlYXJfaHRyZWUoY3R4LCBkeF9kaXItPmlubyk7CisJCQlkeF9kaXItPm51bWJsb2NrcyA9IDA7CisJCX0KKwl9CisJZTJmc2NrX2ZyZWVfZHhfZGlyX2luZm8oY3R4KTsKKyNlbmRpZgorCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlleHQyZnNfZnJlZV9kYmxpc3QoZnMtPmRibGlzdCk7CisKKwlpZiAoY3R4LT5pbm9kZV9iYWRfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2JhZF9tYXApOworCQljdHgtPmlub2RlX2JhZF9tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5pbm9kZV9yZWdfbWFwKSB7CisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX3JlZ19tYXApOworCQljdHgtPmlub2RlX3JlZ19tYXAgPSAwOworCX0KKwlpZiAoY3R4LT5lbmNyeXB0ZWRfZGlycykgeworCQlleHQyZnNfdTMyX2xpc3RfZnJlZShjdHgtPmVuY3J5cHRlZF9kaXJzKTsKKwkJY3R4LT5lbmNyeXB0ZWRfZGlycyA9IDA7CisJfQorCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlpZiAoY3R4LT5sYXJnZV9maWxlcykgeworCQlpZiAoIShzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSkgJiYKKwkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GRUFUVVJFX0xBUkdFX0ZJTEVTLCAmcGN0eCkpIHsKKwkJCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9CisJCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFOworCQkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwkJaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFViAmJgorCQkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8xX0ZTX1JFVl9MRVZFTCwgJnBjdHgpKSB7CisJCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfQorCX0KKworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyAyIiksICZydHJhY2ssIGZzLT5pbyk7Cit9CisKKyNkZWZpbmUgTUFYX0RFUFRIIDMyMDAwCitzdGF0aWMgaW50IGh0cmVlX2RlcHRoKHN0cnVjdCBkeF9kaXJfaW5mbyAqZHhfZGlyLAorCQkgICAgICAgc3RydWN0IGR4X2RpcmJsb2NrX2luZm8gKmR4X2RiKQoreworCWludAlkZXB0aCA9IDA7CisKKwl3aGlsZSAoZHhfZGItPnR5cGUgIT0gRFhfRElSQkxPQ0tfUk9PVCAmJiBkZXB0aCA8IE1BWF9ERVBUSCkgeworCQlkeF9kYiA9ICZkeF9kaXItPmR4X2Jsb2NrW2R4X2RiLT5wYXJlbnRdOworCQlkZXB0aCsrOworCX0KKwlyZXR1cm4gZGVwdGg7Cit9CisKK3N0YXRpYyBpbnQgZGljdF9kZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRlX2EsICpkZV9iOworCWludAlhX2xlbiwgYl9sZW47CisKKwlkZV9hID0gKGNvbnN0IHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBhOworCWFfbGVuID0gZGVfYS0+bmFtZV9sZW4gJiAweEZGOworCWRlX2IgPSAoY29uc3Qgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIGI7CisJYl9sZW4gPSBkZV9iLT5uYW1lX2xlbiAmIDB4RkY7CisKKwlpZiAoYV9sZW4gIT0gYl9sZW4pCisJCXJldHVybiAoYV9sZW4gLSBiX2xlbik7CisKKwlyZXR1cm4gbWVtY21wKGRlX2EtPm5hbWUsIGRlX2ItPm5hbWUsIGFfbGVuKTsKK30KKworLyoKKyAqIFRoaXMgaXMgc3BlY2lhbCBzb3J0IGZ1bmN0aW9uIHRoYXQgbWFrZXMgc3VyZSB0aGF0IGRpcmVjdG9yeSBibG9ja3MKKyAqIHdpdGggYSBkaXJibG9jayBvZiB6ZXJvIGFyZSBzb3J0ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4KKyAqIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSByb290IG5vZGUgb2YgdGhlIGh0cmVlIGRpcmVjdG9yaWVzIGFyZQorICogcHJvY2Vzc2VkIGZpcnN0LCBzbyB3ZSBrbm93IHdoYXQgaGFzaCB2ZXJzaW9uIHRvIHVzZS4KKyAqLworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBzcGVjaWFsX2Rpcl9ibG9ja19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiX2EgPQorCQkoY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICopIGE7CisJY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9iID0KKwkJKGNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqKSBiOworCisJaWYgKGRiX2EtPmJsb2NrY250ICYmICFkYl9iLT5ibG9ja2NudCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWRiX2EtPmJsb2NrY250ICYmIGRiX2ItPmJsb2NrY250KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZGJfYS0+YmxrICE9IGRiX2ItPmJsaykKKwkJcmV0dXJuIChpbnQpIChkYl9hLT5ibGsgLSBkYl9iLT5ibGspOworCisJaWYgKGRiX2EtPmlubyAhPSBkYl9iLT5pbm8pCisJCXJldHVybiAoaW50KSAoZGJfYS0+aW5vIC0gZGJfYi0+aW5vKTsKKworCXJldHVybiAoaW50KSAoZGJfYS0+YmxvY2tjbnQgLSBkYl9iLT5ibG9ja2NudCk7Cit9CisKKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSBpcyAnLicsIGFuZCB0aGF0IHRoZQorICogZGlyZWN0b3J5IGVudHJ5IGlzIHNhbmUuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZG90KGUyZnNja190IGN0eCwKKwkJICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICBleHQyX2lub190IGlubywgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKm5leHRkaXI7CisJdW5zaWduZWQgaW50CXJlY19sZW4sIG5ld19sZW47CisJaW50CQlzdGF0dXMgPSAwOworCWludAkJY3JlYXRlZCA9IDA7CisJcHJvYmxlbV90CXByb2JsZW0gPSAwOworCisJaWYgKCFkaXJlbnQtPmlub2RlKQorCQlwcm9ibGVtID0gUFJfMl9NSVNTSU5HX0RPVDsKKwllbHNlIGlmICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSAhPSAxKSB8fAorCQkgKGRpcmVudC0+bmFtZVswXSAhPSAnLicpKQorCQlwcm9ibGVtID0gUFJfMl8xU1RfTk9UX0RPVDsKKwllbHNlIGlmIChkaXJlbnQtPm5hbWVbMV0gIT0gJ1wwJykKKwkJcHJvYmxlbSA9IFBSXzJfRE9UX05VTExfVEVSTTsKKworCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oY3R4LT5mcywgZGlyZW50LCAmcmVjX2xlbik7CisJaWYgKHByb2JsZW0pIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgcGN0eCkpIHsKKwkJCWlmIChyZWNfbGVuIDwgMTIpCisJCQkJcmVjX2xlbiA9IGRpcmVudC0+cmVjX2xlbiA9IDEyOworCQkJZGlyZW50LT5pbm9kZSA9IGlubzsKKwkJCWRpcmVudC0+bmFtZV9sZW4gPSAxOworCQkJZGlyZW50LT5uYW1lWzBdID0gJy4nOworCQkJZGlyZW50LT5uYW1lWzFdID0gJ1wwJzsKKwkJCXN0YXR1cyA9IDE7CisJCQljcmVhdGVkID0gMTsKKwkJfQorCX0KKwlpZiAoZGlyZW50LT5pbm9kZSAhPSBpbm8pIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9CQURfSU5PREVfRE9ULCBwY3R4KSkgeworCQkJZGlyZW50LT5pbm9kZSA9IGlubzsKKwkJCXN0YXR1cyA9IDE7CisJCX0KKwl9CisJaWYgKHJlY19sZW4gPiAxMikgeworCQluZXdfbGVuID0gcmVjX2xlbiAtIDEyOworCQlpZiAobmV3X2xlbiA+IDEyKSB7CisJCQlpZiAoY3JlYXRlZCB8fAorCQkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9TUExJVF9ET1QsIHBjdHgpKSB7CisJCQkJbmV4dGRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikKKwkJCQkJKChjaGFyICopIGRpcmVudCArIDEyKTsKKwkJCQlkaXJlbnQtPnJlY19sZW4gPSAxMjsKKwkJCQkodm9pZCkgZXh0MmZzX3NldF9yZWNfbGVuKGN0eC0+ZnMsIG5ld19sZW4sCisJCQkJCQkJICBuZXh0ZGlyKTsKKwkJCQluZXh0ZGlyLT5pbm9kZSA9IDA7CisJCQkJbmV4dGRpci0+bmFtZV9sZW4gPSAwOworCQkJCXN0YXR1cyA9IDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgc2Vjb25kIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgaXMgJy4uJywgYW5kIHRoYXQgdGhlCisgKiBkaXJlY3RvcnkgZW50cnkgaXMgc2FuZS4gIFdlIGRvIG5vdCBjaGVjayB0aGUgaW5vZGUgbnVtYmVyIG9mICcuLicKKyAqIGhlcmU7IHRoaXMgZ2V0cyBkb25lIGluIHBhc3MgMy4KKyAqLworc3RhdGljIGludCBjaGVja19kb3Rkb3QoZTJmc2NrX3QgY3R4LAorCQkJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQlleHQyX2lub190IGlubywgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlwcm9ibGVtX3QJcHJvYmxlbSA9IDA7CisJdW5zaWduZWQgaW50CXJlY19sZW47CisKKwlpZiAoIWRpcmVudC0+aW5vZGUpCisJCXByb2JsZW0gPSBQUl8yX01JU1NJTkdfRE9UX0RPVDsKKwllbHNlIGlmICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSAhPSAyKSB8fAorCQkgKGRpcmVudC0+bmFtZVswXSAhPSAnLicpIHx8CisJCSAoZGlyZW50LT5uYW1lWzFdICE9ICcuJykpCisJCXByb2JsZW0gPSBQUl8yXzJORF9OT1RfRE9UX0RPVDsKKwllbHNlIGlmIChkaXJlbnQtPm5hbWVbMl0gIT0gJ1wwJykKKwkJcHJvYmxlbSA9IFBSXzJfRE9UX0RPVF9OVUxMX1RFUk07CisKKwkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGN0eC0+ZnMsIGRpcmVudCwgJnJlY19sZW4pOworCWlmIChwcm9ibGVtKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sIHBjdHgpKSB7CisJCQlpZiAocmVjX2xlbiA8IDEyKQorCQkJCWRpcmVudC0+cmVjX2xlbiA9IDEyOworCQkJLyoKKwkJCSAqIE5vdGU6IHdlIGRvbid0IGhhdmUgdGhlIHBhcmVudCBpbm9kZSBqdXN0CisJCQkgKiB5ZXQsIHNvIHdlIHdpbGwgZmlsbCBpdCBpbiB3aXRoIHRoZSByb290CisJCQkgKiBpbm9kZS4gIFRoaXMgd2lsbCBnZXQgZml4ZWQgaW4gcGFzcyAzLgorCQkJICovCisJCQlkaXJlbnQtPmlub2RlID0gRVhUMl9ST09UX0lOTzsKKwkJCWRpcmVudC0+bmFtZV9sZW4gPSAyOworCQkJZGlyZW50LT5uYW1lWzBdID0gJy4nOworCQkJZGlyZW50LT5uYW1lWzFdID0gJy4nOworCQkJZGlyZW50LT5uYW1lWzJdID0gJ1wwJzsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoZTJmc2NrX2Rpcl9pbmZvX3NldF9kb3Rkb3QoY3R4LCBpbm8sIGRpcmVudC0+aW5vZGUpKSB7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9OT19ESVJJTkZPLCBwY3R4KTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIHRvIG1ha2Ugc3VyZSBhIGRpcmVjdG9yeSBlbnRyeSBkb2Vzbid0IGNvbnRhaW4gYW55IGlsbGVnYWwKKyAqIGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbmFtZShlMmZzY2tfdCBjdHgsCisJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkgICAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWludAlpOworCWludAlmaXh1cCA9IC0xOworCWludAlyZXQgPSAwOworCisJZm9yICggaSA9IDA7IGkgPCAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpOyBpKyspIHsKKwkJaWYgKGRpcmVudC0+bmFtZVtpXSA9PSAnLycgfHwgZGlyZW50LT5uYW1lW2ldID09ICdcMCcpIHsKKwkJCWlmIChmaXh1cCA8IDApIHsKKwkJCQlmaXh1cCA9IGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9CQURfTkFNRSwgcGN0eCk7CisJCQl9CisJCQlpZiAoZml4dXApIHsKKwkJCQlkaXJlbnQtPm5hbWVbaV0gPSAnLic7CisJCQkJcmV0ID0gMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2hlY2sgdGhlIGRpcmVjdG9yeSBmaWxldHlwZSAoaWYgcHJlc2VudCkKKyAqLworc3RhdGljIF9JTkxJTkVfIGludCBjaGVja19maWxldHlwZShlMmZzY2tfdCBjdHgsCisJCQkJICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJICAgZXh0Ml9pbm9fdCBkaXJfaW5vIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWludAlmaWxldHlwZSA9IGRpcmVudC0+bmFtZV9sZW4gPj4gODsKKwlpbnQJc2hvdWxkX2JlID0gRVhUMl9GVF9VTktOT1dOOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCisJaWYgKCEoY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFKSkgeworCQlpZiAoZmlsZXR5cGUgPT0gMCB8fAorCQkgICAgIWZpeF9wcm9ibGVtKGN0eCwgUFJfMl9DTEVBUl9GSUxFVFlQRSwgcGN0eCkpCisJCQlyZXR1cm4gMDsKKwkJZGlyZW50LT5uYW1lX2xlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGRpcmVudC0+aW5vZGUpKSB7CisJCXNob3VsZF9iZSA9IEVYVDJfRlRfRElSOworCX0gZWxzZSBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3JlZ19tYXAsCisJCQkJCSAgICBkaXJlbnQtPmlub2RlKSkgeworCQlzaG91bGRfYmUgPSBFWFQyX0ZUX1JFR19GSUxFOworCX0gZWxzZSBpZiAoY3R4LT5pbm9kZV9iYWRfbWFwICYmCisJCSAgIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9iYWRfbWFwLAorCQkJCQkgICAgZGlyZW50LT5pbm9kZSkpCisJCXNob3VsZF9iZSA9IDA7CisJZWxzZSB7CisJCWUyZnNja19yZWFkX2lub2RlKGN0eCwgZGlyZW50LT5pbm9kZSwgJmlub2RlLAorCQkJCSAgImNoZWNrX2ZpbGV0eXBlIik7CisJCXNob3VsZF9iZSA9IGV4dDJfZmlsZV90eXBlKGlub2RlLmlfbW9kZSk7CisJfQorCWlmIChmaWxldHlwZSA9PSBzaG91bGRfYmUpCisJCXJldHVybiAwOworCXBjdHgtPm51bSA9IHNob3VsZF9iZTsKKworCWlmIChmaXhfcHJvYmxlbShjdHgsIGZpbGV0eXBlID8gUFJfMl9CQURfRklMRVRZUEUgOiBQUl8yX1NFVF9GSUxFVFlQRSwKKwkJCXBjdHgpID09IDApCisJCXJldHVybiAwOworCisJZGlyZW50LT5uYW1lX2xlbiA9IChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgfCBzaG91bGRfYmUgPDwgODsKKwlyZXR1cm4gMTsKK30KKworI2lmZGVmIEVOQUJMRV9IVFJFRQorc3RhdGljIHZvaWQgcGFyc2VfaW50X25vZGUoZXh0Ml9maWxzeXMgZnMsCisJCQkgICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiLAorCQkJICAgc3RydWN0IGNoZWNrX2Rpcl9zdHJ1Y3QgKmNkLAorCQkJICAgc3RydWN0IGR4X2Rpcl9pbmZvCSpkeF9kaXIsCisJCQkgICBjaGFyICpibG9ja19idWYpCit7CisJc3RydWN0IAkJZXh0Ml9keF9yb290X2luZm8gICpyb290OworCXN0cnVjdCAJCWV4dDJfZHhfZW50cnkgKmVudDsKKwlzdHJ1Y3QJCWV4dDJfZHhfY291bnRsaW1pdCAqbGltaXQ7CisJc3RydWN0IGR4X2RpcmJsb2NrX2luZm8JKmR4X2RiOworCWludAkJaSwgZXhwZWN0X2xpbWl0LCBjb3VudDsKKwlibGtfdAkJYmxrOworCWV4dDJfZGlyaGFzaF90CW1pbl9oYXNoID0gMHhmZmZmZmZmZjsKKwlleHQyX2Rpcmhhc2hfdAltYXhfaGFzaCA9IDA7CisJZXh0Ml9kaXJoYXNoX3QJaGFzaCA9IDAsIHByZXZfaGFzaDsKKworCWlmIChkYi0+YmxvY2tjbnQgPT0gMCkgeworCQlyb290ID0gKHN0cnVjdCBleHQyX2R4X3Jvb3RfaW5mbyAqKSAoYmxvY2tfYnVmICsgMjQpOworCisjaWZkZWYgRFhfREVCVUcKKwkJcHJpbnRmKCJSb290IG5vZGUgZHVtcDpcbiIpOworCQlwcmludGYoIlx0IFJlc2VydmVkIHplcm86ICV1XG4iLCByb290LT5yZXNlcnZlZF96ZXJvKTsKKwkJcHJpbnRmKCJcdCBIYXNoIFZlcnNpb246ICVkXG4iLCByb290LT5oYXNoX3ZlcnNpb24pOworCQlwcmludGYoIlx0IEluZm8gbGVuZ3RoOiAlZFxuIiwgcm9vdC0+aW5mb19sZW5ndGgpOworCQlwcmludGYoIlx0IEluZGlyZWN0IGxldmVsczogJWRcbiIsIHJvb3QtPmluZGlyZWN0X2xldmVscyk7CisJCXByaW50ZigiXHQgRmxhZ3M6ICVkXG4iLCByb290LT51bnVzZWRfZmxhZ3MpOworI2VuZGlmCisKKwkJZW50ID0gKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopIChibG9ja19idWYgKyAyNCArIHJvb3QtPmluZm9fbGVuZ3RoKTsKKwl9IGVsc2UgeworCQllbnQgPSAoc3RydWN0IGV4dDJfZHhfZW50cnkgKikgKGJsb2NrX2J1Zis4KTsKKwl9CisJbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSBlbnQ7CisKKyNpZmRlZiBEWF9ERUJVRworCXByaW50ZigiTnVtYmVyIG9mIGVudHJpZXMgKGNvdW50KTogJWRcbiIsCisJICAgICAgIGV4dDJmc19sZTE2X3RvX2NwdShsaW1pdC0+Y291bnQpKTsKKwlwcmludGYoIk51bWJlciBvZiBlbnRyaWVzIChsaW1pdCk6ICVkXG4iLAorCSAgICAgICBleHQyZnNfbGUxNl90b19jcHUobGltaXQtPmxpbWl0KSk7CisjZW5kaWYKKworCWNvdW50ID0gZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5jb3VudCk7CisJZXhwZWN0X2xpbWl0ID0gKGZzLT5ibG9ja3NpemUgLSAoKGNoYXIgKikgZW50IC0gYmxvY2tfYnVmKSkgLworCQlzaXplb2Yoc3RydWN0IGV4dDJfZHhfZW50cnkpOworCWlmIChleHQyZnNfbGUxNl90b19jcHUobGltaXQtPmxpbWl0KSAhPSBleHBlY3RfbGltaXQpIHsKKwkJY2QtPnBjdHgubnVtID0gZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5saW1pdCk7CisJCWlmIChmaXhfcHJvYmxlbShjZC0+Y3R4LCBQUl8yX0hUUkVFX0JBRF9MSU1JVCwgJmNkLT5wY3R4KSkKKwkJCWdvdG8gY2xlYXJfYW5kX2V4aXQ7CisJfQorCWlmIChjb3VudCA+IGV4cGVjdF9saW1pdCkgeworCQljZC0+cGN0eC5udW0gPSBjb3VudDsKKwkJaWYgKGZpeF9wcm9ibGVtKGNkLT5jdHgsIFBSXzJfSFRSRUVfQkFEX0NPVU5ULCAmY2QtPnBjdHgpKQorCQkJZ290byBjbGVhcl9hbmRfZXhpdDsKKwkJY291bnQgPSBleHBlY3RfbGltaXQ7CisJfQorCisJZm9yIChpPTA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXByZXZfaGFzaCA9IGhhc2g7CisJCWhhc2ggPSBpID8gKGV4dDJmc19sZTMyX3RvX2NwdShlbnRbaV0uaGFzaCkgJiB+MSkgOiAwOworI2lmZGVmIERYX0RFQlVHCisJCXByaW50ZigiRW50cnkgIyVkOiBIYXNoIDB4JTA4eCwgYmxvY2sgJXVcbiIsIGksCisJCSAgICAgICBoYXNoLCBleHQyZnNfbGUzMl90b19jcHUoZW50W2ldLmJsb2NrKSk7CisjZW5kaWYKKwkJYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGVudFtpXS5ibG9jaykgJiAweDBmZmZmZmY7CisJCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgYmxvY2sgaXMgdmFsaWQgKi8KKwkJaWYgKGJsayA+PSAoYmxrX3QpIGR4X2Rpci0+bnVtYmxvY2tzKSB7CisJCQljZC0+cGN0eC5ibGsgPSBibGs7CisJCQlpZiAoZml4X3Byb2JsZW0oY2QtPmN0eCwgUFJfMl9IVFJFRV9CQURCTEssCisJCQkJCSZjZC0+cGN0eCkpCisJCQkJZ290byBjbGVhcl9hbmRfZXhpdDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChoYXNoIDwgcHJldl9oYXNoICYmCisJCSAgICBmaXhfcHJvYmxlbShjZC0+Y3R4LCBQUl8yX0hUUkVFX0hBU0hfT1JERVIsICZjZC0+cGN0eCkpCisJCQlnb3RvIGNsZWFyX2FuZF9leGl0OworCQlkeF9kYiA9ICZkeF9kaXItPmR4X2Jsb2NrW2Jsa107CisJCWlmIChkeF9kYi0+ZmxhZ3MgJiBEWF9GTEFHX1JFRkVSRU5DRUQpIHsKKwkJCWR4X2RiLT5mbGFncyB8PSBEWF9GTEFHX0RVUF9SRUY7CisJCX0gZWxzZSB7CisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19SRUZFUkVOQ0VEOworCQkJZHhfZGItPnBhcmVudCA9IGRiLT5ibG9ja2NudDsKKwkJfQorCQlpZiAoaGFzaCA8IG1pbl9oYXNoKQorCQkJbWluX2hhc2ggPSBoYXNoOworCQlpZiAoaGFzaCA+IG1heF9oYXNoKQorCQkJbWF4X2hhc2ggPSBoYXNoOworCQlkeF9kYi0+bm9kZV9taW5faGFzaCA9IGhhc2g7CisJCWlmICgoaSsxKSA8IGNvdW50KQorCQkJZHhfZGItPm5vZGVfbWF4X2hhc2ggPQorCQkJICBleHQyZnNfbGUzMl90b19jcHUoZW50W2krMV0uaGFzaCkgJiB+MTsKKwkJZWxzZSB7CisJCQlkeF9kYi0+bm9kZV9tYXhfaGFzaCA9IDB4ZmZmZmZmZmU7CisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19MQVNUOworCQl9CisJCWlmIChpID09IDApCisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19GSVJTVDsKKwl9CisjaWZkZWYgRFhfREVCVUcKKwlwcmludGYoIkJsb2NrY250ID0gJWQsIG1pbiBoYXNoIDB4JTA4eCwgbWF4IGhhc2ggMHglMDh4XG4iLAorCSAgICAgICBkYi0+YmxvY2tjbnQsIG1pbl9oYXNoLCBtYXhfaGFzaCk7CisjZW5kaWYKKwlkeF9kYiA9ICZkeF9kaXItPmR4X2Jsb2NrW2RiLT5ibG9ja2NudF07CisJZHhfZGItPm1pbl9oYXNoID0gbWluX2hhc2g7CisJZHhfZGItPm1heF9oYXNoID0gbWF4X2hhc2g7CisJcmV0dXJuOworCitjbGVhcl9hbmRfZXhpdDoKKwljbGVhcl9odHJlZShjZC0+Y3R4LCBjZC0+cGN0eC5pbm8pOworCWR4X2Rpci0+bnVtYmxvY2tzID0gMDsKK30KKyNlbmRpZiAvKiBFTkFCTEVfSFRSRUUgKi8KKworLyoKKyAqIEdpdmVuIGEgYnVzdGVkIGRpcmVjdG9yeSwgdHJ5IHRvIHNhbHZhZ2UgaXQgc29tZWhvdy4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHNhbHZhZ2VfZGlyZWN0b3J5KGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKnByZXYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKK3sKKwljaGFyCSpjcCA9IChjaGFyICopIGRpcmVudDsKKwlpbnQgbGVmdDsKKwl1bnNpZ25lZCBpbnQgcmVjX2xlbiwgcHJldl9yZWNfbGVuOworCXVuc2lnbmVkIGludCBuYW1lX2xlbiA9IGRpcmVudC0+bmFtZV9sZW4gJiAweEZGOworCisJKHZvaWQpIGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJbGVmdCA9IGZzLT5ibG9ja3NpemUgLSAqb2Zmc2V0IC0gcmVjX2xlbjsKKworCS8qCisJICogU3BlY2lhbCBjYXNlIG9mIGRpcmVjdG9yeSBlbnRyeSBvZiBzaXplIDg6IGNvcHkgd2hhdCdzIGxlZnQKKwkgKiBvZiB0aGUgZGlyZWN0b3J5IGJsb2NrIHVwIHRvIGNvdmVyIHVwIHRoZSBpbnZhbGlkIGhvbGUuCisJICovCisJaWYgKChsZWZ0ID49IDEyKSAmJiAocmVjX2xlbiA9PSA4KSkgeworCQltZW1tb3ZlKGNwLCBjcCs4LCBsZWZ0KTsKKwkJbWVtc2V0KGNwICsgbGVmdCwgMCwgOCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBJZiB0aGUgZGlyZWN0b3J5IGVudHJ5IG92ZXJydW5zIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeQorCSAqIGJsb2NrLCBhbmQgdGhlIG5hbWUgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCwgdGhlbiBhZGp1c3QgdGhlCisJICogcmVjb3JkIGxlbmd0aC4KKwkgKi8KKwlpZiAoKGxlZnQgPCAwKSAmJgorCSAgICAoKGludCkgcmVjX2xlbiArIGxlZnQgPiA4KSAmJgorCSAgICAoKGludCkgbmFtZV9sZW4gKyA4IDw9IChpbnQpIHJlY19sZW4gKyBsZWZ0KSAmJgorCSAgICBkaXJlbnQtPmlub2RlIDw9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgJiYKKwkgICAgc3RybmxlbihkaXJlbnQtPm5hbWUsIG5hbWVfbGVuKSA9PSBuYW1lX2xlbikgeworCQkodm9pZCkgZXh0MmZzX3NldF9yZWNfbGVuKGZzLCAoaW50KSByZWNfbGVuICsgbGVmdCwgZGlyZW50KTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIElmIHRoZSByZWNvcmQgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgYSBtdWx0aXBsZQorCSAqIG9mIGZvdXIsIGFuZCBub3QgdG9vIGJpZywgc3VjaCB0aGF0IGl0IGlzIHZhbGlkLCBsZXQgdGhlCisJICogcHJldmlvdXMgZGlyZWN0b3J5IGVudHJ5IGFic29yYiB0aGUgaW52YWxpZCBvbmUuCisJICovCisJaWYgKHByZXYgJiYgcmVjX2xlbiAmJiAocmVjX2xlbiAlIDQpID09IDAgJiYKKwkgICAgKCpvZmZzZXQgKyByZWNfbGVuIDw9IGZzLT5ibG9ja3NpemUpKSB7CisJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIHByZXYsICZwcmV2X3JlY19sZW4pOworCQlwcmV2X3JlY19sZW4gKz0gcmVjX2xlbjsKKwkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihmcywgcHJldl9yZWNfbGVuLCBwcmV2KTsKKwkJKm9mZnNldCArPSByZWNfbGVuOworCQlyZXR1cm47CisJfQorCS8qCisJICogRGVmYXVsdCBzYWx2YWdlIG1ldGhvZCAtLS0ga2lsbCBhbGwgb2YgdGhlIGRpcmVjdG9yeQorCSAqIGVudHJpZXMgZm9yIHRoZSByZXN0IG9mIHRoZSBibG9jay4gIFdlIHdpbGwgZWl0aGVyIHRyeSB0bworCSAqIGFic29yYiBpdCBpbnRvIHRoZSBwcmV2aW91cyBkaXJlY3RvcnkgZW50cnksIG9yIGNyZWF0ZSBhCisJICogbmV3IGVtcHR5IGRpcmVjdG9yeSBlbnRyeSB0aGUgcmVzdCBvZiB0aGUgZGlyZWN0b3J5IGJsb2NrLgorCSAqLworCWlmIChwcmV2KSB7CisJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIHByZXYsICZwcmV2X3JlY19sZW4pOworCQlwcmV2X3JlY19sZW4gKz0gZnMtPmJsb2Nrc2l6ZSAtICpvZmZzZXQ7CisJCSh2b2lkKSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHByZXZfcmVjX2xlbiwgcHJldik7CisJCSpvZmZzZXQgPSBmcy0+YmxvY2tzaXplOworCX0gZWxzZSB7CisJCXJlY19sZW4gPSBmcy0+YmxvY2tzaXplIC0gKm9mZnNldDsKKwkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihmcywgcmVjX2xlbiwgZGlyZW50KTsKKwkJZGlyZW50LT5uYW1lX2xlbiA9IDA7CisJCWRpcmVudC0+aW5vZGUgPSAwOworCX0KK30KKworc3RhdGljIGludCBjaGVja19kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiLAorCQkJICAgdm9pZCAqcHJpdl9kYXRhKQoreworIAlzdHJ1Y3QgZHhfZGlyX2luZm8JKmR4X2RpcjsKKyNpZmRlZiBFTkFCTEVfSFRSRUUKKwlzdHJ1Y3QgZHhfZGlyYmxvY2tfaW5mbwkqZHhfZGIgPSAwOworI2VuZGlmIC8qIEVOQUJMRV9IVFJFRSAqLworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAJKmRpcmVudCwgKnByZXY7CisJZXh0Ml9kaXJoYXNoX3QJCWhhc2g7CisJdW5zaWduZWQgaW50CQlvZmZzZXQgPSAwOworCWludAkJCWRpcl9tb2RpZmllZCA9IDA7CisJaW50CQkJZG90X3N0YXRlOworCXVuc2lnbmVkIGludAkJcmVjX2xlbjsKKwlibGs2NF90CQkJYmxvY2tfbnIgPSBkYi0+YmxrOworCWV4dDJfaW5vX3QgCQlpbm8gPSBkYi0+aW5vOworCWV4dDJfaW5vX3QgCQlzdWJkaXJfcGFyZW50OworCV9fdTE2CQkJbGlua3M7CisJc3RydWN0IGNoZWNrX2Rpcl9zdHJ1Y3QJKmNkOworCWNoYXIgCQkJKmJ1ZjsKKwllMmZzY2tfdAkJY3R4OworCXByb2JsZW1fdAkJcHJvYmxlbTsKKwlzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKnJvb3Q7CisJc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqbGltaXQ7CisJc3RhdGljIGRpY3RfdCBkZV9kaWN0OworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlpbnQJZHVwc19mb3VuZCA9IDA7CisJaW50CWVuY3J5cHRlZCA9IDA7CisJaW50CXJldDsKKworCWNkID0gKHN0cnVjdCBjaGVja19kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKwlidWYgPSBjZC0+YnVmOworCWN0eCA9IGNkLT5jdHg7CisKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLIHx8IGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SRVNUQVJUKQorCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCisJaWYgKGN0eC0+cHJvZ3Jlc3MgJiYgKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgMiwgY2QtPmNvdW50KyssIGNkLT5tYXgpKQorCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGlub2RlIGlzIHN0aWxsIGluIHVzZSAoY291bGQgaGF2ZSBiZWVuCisJICogZGVsZXRlZCBpbiB0aGUgZHVwbGljYXRlL2JhZCBibG9ja3MgcGFzcy4KKwkgKi8KKwlpZiAoIShleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubykpKQorCQlyZXR1cm4gMDsKKworCWNkLT5wY3R4LmlubyA9IGlubzsKKwljZC0+cGN0eC5ibGsgPSBibG9ja19ucjsKKwljZC0+cGN0eC5ibGtjb3VudCA9IGRiLT5ibG9ja2NudDsKKwljZC0+cGN0eC5pbm8yID0gMDsKKwljZC0+cGN0eC5kaXJlbnQgPSAwOworCWNkLT5wY3R4Lm51bSA9IDA7CisKKwlpZiAoZGItPmJsayA9PSAwKSB7CisJCWlmIChhbGxvY2F0ZV9kaXJfYmxvY2soY3R4LCBkYiwgYnVmLCAmY2QtPnBjdHgpKQorCQkJcmV0dXJuIDA7CisJCWJsb2NrX25yID0gZGItPmJsazsKKwl9CisKKwlpZiAoZGItPmJsb2NrY250KQorCQlkb3Rfc3RhdGUgPSAyOworCWVsc2UKKwkJZG90X3N0YXRlID0gMDsKKworCWlmIChjdHgtPmRpcnNfdG9faGFzaCAmJgorCSAgICBleHQyZnNfdTMyX2xpc3RfdGVzdChjdHgtPmRpcnNfdG9faGFzaCwgaW5vKSkKKwkJZHVwc19mb3VuZCsrOworCisjaWYgMAorCXByaW50ZigiSW4gcHJvY2Vzc19kaXJfYmxvY2sgYmxvY2sgJWx1LCAjJWQsIGlub2RlICVsdVxuIiwgYmxvY2tfbnIsCisJICAgICAgIGRiLT5ibG9ja2NudCwgaW5vKTsKKyNlbmRpZgorCisJZWhhbmRsZXJfb3BlcmF0aW9uKF8oInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIikpOworCWNkLT5wY3R4LmVycmNvZGUgPSBleHQyZnNfcmVhZF9kaXJfYmxvY2szKGZzLCBibG9ja19uciwgYnVmLCAwKTsKKwllaGFuZGxlcl9vcGVyYXRpb24oMCk7CisJaWYgKGNkLT5wY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9ESVJfQ09SUlVQVEVEKQorCQljZC0+cGN0eC5lcnJjb2RlID0gMDsgLyogV2UnbGwgaGFuZGxlIHRoaXMgb3Vyc2VsdmVzICovCisJaWYgKGNkLT5wY3R4LmVycmNvZGUpIHsKKwkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzJfUkVBRF9ESVJCTE9DSywgJmNkLT5wY3R4KSkgeworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCXJldHVybiBESVJFTlRfQUJPUlQ7CisJCX0KKwkJbWVtc2V0KGJ1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJfQorI2lmZGVmIEVOQUJMRV9IVFJFRQorCWR4X2RpciA9IGUyZnNja19nZXRfZHhfZGlyX2luZm8oY3R4LCBpbm8pOworCWlmIChkeF9kaXIgJiYgZHhfZGlyLT5udW1ibG9ja3MpIHsKKwkJaWYgKGRiLT5ibG9ja2NudCA+PSBkeF9kaXItPm51bWJsb2NrcykgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9VTkVYUEVDVEVEX0hUUkVFX0JMT0NLLAorCQkJCQkmcGN0eCkpIHsKKwkJCQljbGVhcl9odHJlZShjdHgsIGlubyk7CisJCQkJZHhfZGlyLT5udW1ibG9ja3MgPSAwOworCQkJCWR4X2RiID0gMDsKKwkJCQlnb3RvIG91dF9odHJlZTsKKwkJCX0KKwkJCWZhdGFsX2Vycm9yKGN0eCwgXygiQ2FuIG5vdCBjb250aW51ZS4iKSk7CisJCX0KKwkJZHhfZGIgPSAmZHhfZGlyLT5keF9ibG9ja1tkYi0+YmxvY2tjbnRdOworCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX0xFQUY7CisJCWR4X2RiLT5waHlzID0gYmxvY2tfbnI7CisJCWR4X2RiLT5taW5faGFzaCA9IH4wOworCQlkeF9kYi0+bWF4X2hhc2ggPSAwOworCisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCQkodm9pZCkgZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKTsKKwkJbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAoYnVmKzgpOworCQlpZiAoZGItPmJsb2NrY250ID09IDApIHsKKwkJCXJvb3QgPSAoc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICopIChidWYgKyAyNCk7CisJCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX1JPT1Q7CisJCQlkeF9kYi0+ZmxhZ3MgfD0gRFhfRkxBR19GSVJTVCB8IERYX0ZMQUdfTEFTVDsKKwkJCWlmICgocm9vdC0+cmVzZXJ2ZWRfemVybyB8fAorCQkJICAgICByb290LT5pbmZvX2xlbmd0aCA8IDggfHwKKwkJCSAgICAgcm9vdC0+aW5kaXJlY3RfbGV2ZWxzID4gMSkgJiYKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzJfSFRSRUVfQkFEX1JPT1QsICZjZC0+cGN0eCkpIHsKKwkJCQljbGVhcl9odHJlZShjdHgsIGlubyk7CisJCQkJZHhfZGlyLT5udW1ibG9ja3MgPSAwOworCQkJCWR4X2RiID0gMDsKKwkJCX0KKwkJCWR4X2Rpci0+aGFzaHZlcnNpb24gPSByb290LT5oYXNoX3ZlcnNpb247CisJCQlpZiAoKGR4X2Rpci0+aGFzaHZlcnNpb24gPD0gRVhUMl9IQVNIX1RFQSkgJiYKKwkJCSAgICAoZnMtPnN1cGVyLT5zX2ZsYWdzICYgRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSkKKwkJCQlkeF9kaXItPmhhc2h2ZXJzaW9uICs9IDM7CisJCQlkeF9kaXItPmRlcHRoID0gcm9vdC0+aW5kaXJlY3RfbGV2ZWxzICsgMTsKKwkJfSBlbHNlIGlmICgoZGlyZW50LT5pbm9kZSA9PSAwKSAmJgorCQkJICAgKHJlY19sZW4gPT0gZnMtPmJsb2Nrc2l6ZSkgJiYKKwkJCSAgIChkaXJlbnQtPm5hbWVfbGVuID09IDApICYmCisJCQkgICAoZXh0MmZzX2xlMTZfdG9fY3B1KGxpbWl0LT5saW1pdCkgPT0KKwkJCSAgICAoKGZzLT5ibG9ja3NpemUtOCkgLworCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDJfZHhfZW50cnkpKSkpCisJCQlkeF9kYi0+dHlwZSA9IERYX0RJUkJMT0NLX05PREU7CisJfQorb3V0X2h0cmVlOgorI2VuZGlmIC8qIEVOQUJMRV9IVFJFRSAqLworCisJaWYgKGN0eC0+ZW5jcnlwdGVkX2RpcnMpCisJCWVuY3J5cHRlZCA9IGV4dDJmc191MzJfbGlzdF90ZXN0KGN0eC0+ZW5jcnlwdGVkX2RpcnMsIGlubyk7CisKKwlkaWN0X2luaXQoJmRlX2RpY3QsIERJQ1RDT1VOVF9UX01BWCwgZGljdF9kZV9jbXApOworCXByZXYgPSAwOworCWRvIHsKKwkJZGdycF90IGdyb3VwOworCQlleHQyX2lub190IGZpcnN0X3VudXNlZF9pbm9kZTsKKworCQlwcm9ibGVtID0gMDsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgb2Zmc2V0KTsKKwkJKHZvaWQpIGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJCWNkLT5wY3R4LmRpcmVudCA9IGRpcmVudDsKKwkJY2QtPnBjdHgubnVtID0gb2Zmc2V0OworCQlpZiAoKChvZmZzZXQgKyByZWNfbGVuKSA+IGZzLT5ibG9ja3NpemUpIHx8CisJCSAgICAocmVjX2xlbiA8IDEyKSB8fAorCQkgICAgKChyZWNfbGVuICUgNCkgIT0gMCkgfHwKKwkJICAgICgoKGRpcmVudC0+bmFtZV9sZW4gJiAodW5zaWduZWQpIDB4RkYpKzgpID4gcmVjX2xlbikpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRElSX0NPUlJVUFRFRCwgJmNkLT5wY3R4KSkgeworCQkJCXNhbHZhZ2VfZGlyZWN0b3J5KGZzLCBkaXJlbnQsIHByZXYsICZvZmZzZXQpOworCQkJCWRpcl9tb2RpZmllZCsrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlCisJCQkJZ290byBhYm9ydF9mcmVlX2RpY3Q7CisJCX0KKworCQlpZiAoZG90X3N0YXRlID09IDApIHsKKwkJCWlmIChjaGVja19kb3QoY3R4LCBkaXJlbnQsIGlubywgJmNkLT5wY3R4KSkKKwkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJfSBlbHNlIGlmIChkb3Rfc3RhdGUgPT0gMSkgeworCQkJcmV0ID0gY2hlY2tfZG90ZG90KGN0eCwgZGlyZW50LCBpbm8sICZjZC0+cGN0eCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGFib3J0X2ZyZWVfZGljdDsKKwkJCWlmIChyZXQpCisJCQkJZGlyX21vZGlmaWVkKys7CisJCX0gZWxzZSBpZiAoZGlyZW50LT5pbm9kZSA9PSBpbm8pIHsKKwkJCXByb2JsZW0gPSBQUl8yX0xJTktfRE9UOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9MSU5LX0RPVCwgJmNkLT5wY3R4KSkgeworCQkJCWRpcmVudC0+aW5vZGUgPSAwOworCQkJCWRpcl9tb2RpZmllZCsrOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCQlpZiAoIWRpcmVudC0+aW5vZGUpCisJCQlnb3RvIG5leHQ7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBsaXN0ZWQgaXMgYSBsZWdhbCBvbmUuCisJCSAqLworCQlpZiAoKChkaXJlbnQtPmlub2RlICE9IEVYVDJfUk9PVF9JTk8pICYmCisJCSAgICAgKGRpcmVudC0+aW5vZGUgPCBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcikpKSB8fAorCQkgICAgKGRpcmVudC0+aW5vZGUgPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkgeworCQkJcHJvYmxlbSA9IFBSXzJfQkFEX0lOTzsKKwkJfSBlbHNlIGlmIChjdHgtPmlub2RlX2JiX21hcCAmJgorCQkJICAgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9iYl9tYXAsCisJCQkJCQkgICAgIGRpcmVudC0+aW5vZGUpKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBpbm9kZSBpcyBpbiBhIGJhZCBibG9jaywgb2ZmZXIgdG8KKwkJCSAqIGNsZWFyIGl0LgorCQkJICovCisJCQlwcm9ibGVtID0gUFJfMl9CQl9JTk9ERTsKKwkJfSBlbHNlIGlmICgoZG90X3N0YXRlID4gMSkgJiYKKwkJCSAgICgoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpID09IDEpICYmCisJCQkgICAoZGlyZW50LT5uYW1lWzBdID09ICcuJykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIGEgJy4nIGVudHJ5IGluIGFueXRoaW5nIG90aGVyCisJCQkgKiB0aGFuIHRoZSBmaXJzdCBkaXJlY3RvcnkgZW50cnksIGl0J3MgYQorCQkJICogZHVwbGljYXRlIGVudHJ5IHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQuCisJCQkgKi8KKwkJCXByb2JsZW0gPSBQUl8yX0RVUF9ET1Q7CisJCX0gZWxzZSBpZiAoKGRvdF9zdGF0ZSA+IDEpICYmCisJCQkgICAoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSA9PSAyKSAmJgorCQkJICAgKGRpcmVudC0+bmFtZVswXSA9PSAnLicpICYmCisJCQkgICAoZGlyZW50LT5uYW1lWzFdID09ICcuJykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIGEgJy4uJyBlbnRyeSBpbiBhbnl0aGluZyBvdGhlcgorCQkJICogdGhhbiB0aGUgc2Vjb25kIGRpcmVjdG9yeSBlbnRyeSwgaXQncyBhCisJCQkgKiBkdXBsaWNhdGUgZW50cnkgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZC4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzJfRFVQX0RPVF9ET1Q7CisJCX0gZWxzZSBpZiAoKGRvdF9zdGF0ZSA+IDEpICYmCisJCQkgICAoZGlyZW50LT5pbm9kZSA9PSBFWFQyX1JPT1RfSU5PKSkgeworCQkJLyoKKwkJCSAqIERvbid0IGFsbG93IGxpbmtzIHRvIHRoZSByb290IGRpcmVjdG9yeS4KKwkJCSAqIFdlIGNoZWNrIHRoaXMgc3BlY2lhbGx5IHRvIG1ha2Ugc3VyZSB3ZQorCQkJICogY2F0Y2ggdGhpcyBlcnJvciBjYXNlIGV2ZW4gaWYgdGhlIHJvb3QKKwkJCSAqIGRpcmVjdG9yeSBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzJfTElOS19ST09UOworCQl9IGVsc2UgaWYgKChkb3Rfc3RhdGUgPiAxKSAmJgorCQkJICAgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSA9PSAwKSB7CisJCQkvKgorCQkJICogRG9uJ3QgYWxsb3cgemVyby1sZW5ndGggZGlyZWN0b3J5IG5hbWVzLgorCQkJICovCisJCQlwcm9ibGVtID0gUFJfMl9OVUxMX05BTUU7CisJCX0KKworCQlpZiAocHJvYmxlbSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJmNkLT5wY3R4KSkgeworCQkJCWRpcmVudC0+aW5vZGUgPSAwOworCQkJCWRpcl9tb2RpZmllZCsrOworCQkJCWdvdG8gbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJaWYgKHByb2JsZW0gPT0gUFJfMl9CQURfSU5PKQorCQkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgaW5vZGUgd2FzIG1hcmtlZCBhcyBoYXZpbmcgYmFkIGZpZWxkcyBpbgorCQkgKiBwYXNzMSwgcHJvY2VzcyBpdCBhbmQgb2ZmZXIgdG8gZml4L2NsZWFyIGl0LgorCQkgKiAoV2Ugd2FpdCB1bnRpbCBub3cgc28gdGhhdCB3ZSBjYW4gZGlzcGxheSB0aGUKKwkJICogcGF0aG5hbWUgdG8gdGhlIHVzZXIuKQorCQkgKi8KKwkJaWYgKGN0eC0+aW5vZGVfYmFkX21hcCAmJgorCQkgICAgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2JhZF9tYXAsCisJCQkJCSAgICAgZGlyZW50LT5pbm9kZSkpIHsKKwkJCWlmIChlMmZzY2tfcHJvY2Vzc19iYWRfaW5vZGUoY3R4LCBpbm8sCisJCQkJCQkgICAgIGRpcmVudC0+aW5vZGUsCisJCQkJCQkgICAgIGJ1ZiArIGZzLT5ibG9ja3NpemUpKSB7CisJCQkJZGlyZW50LT5pbm9kZSA9IDA7CisJCQkJZGlyX21vZGlmaWVkKys7CisJCQkJZ290byBuZXh0OworCQkJfQorCQkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQl9CisKKwkJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfaW5vKGZzLCBkaXJlbnQtPmlub2RlKTsKKwkJZmlyc3RfdW51c2VkX2lub2RlID0gZ3JvdXAgKiBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCArCisJCQkJCTEgKyBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAtCisJCQkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBncm91cCk7CisJCWNkLT5wY3R4Lmdyb3VwID0gZ3JvdXA7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIGlub2RlIHdhcyBtaXNzZWQgb3V0IGJlY2F1c2UKKwkJICogX0lOT0RFX1VOSU5JVCBmbGFnIHdhcyBzZXQgb3IgYmdfaXRhYmxlX3VudXNlZCB3YXMKKwkJICogaW5jb3JyZWN0LiAgSWYgc28sIGNsZWFyIHRoZSBfSU5PREVfVU5JTklUIGZsYWcgYW5kCisJCSAqIHJlc3RhcnQgZTJmc2NrLiAgSW4gdGhlIGZ1dHVyZSBpdCB3b3VsZCBiZSBuaWNlIGlmCisJCSAqIHdlIGNvdWxkIGNhbGwgYSBmdW5jdGlvbiBpbiBwYXNzMS5jIHRoYXQgY2hlY2tzIHRoZQorCQkgKiBuZXdseSB2aXNpYmxlIGlub2Rlcy4KKwkJICovCisJCWlmIChleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKSkgeworCQkJcGN0eC5udW0gPSBkaXJlbnQtPmlub2RlOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9JTk9SRUZfQkdfSU5PX1VOSU5JVCwKKwkJCQkJJmNkLT5wY3R4KSl7CisJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwKKwkJCQkJCSAgICAgIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19SRVNUQVJUX0xBVEVSOworCQkJfSBlbHNlIHsKKwkJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJCQlpZiAocHJvYmxlbSA9PSBQUl8yX0JBRF9JTk8pCisJCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfSBlbHNlIGlmIChkaXJlbnQtPmlub2RlID49IGZpcnN0X3VudXNlZF9pbm9kZSkgeworCQkJcGN0eC5udW0gPSBkaXJlbnQtPmlub2RlOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9JTk9SRUZfSU5fVU5VU0VELCAmY2QtPnBjdHgpKXsKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGdyb3VwLCAwKTsKKwkJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19SRVNUQVJUX0xBVEVSOworCQkJfSBlbHNlIHsKKwkJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJCQlpZiAocHJvYmxlbSA9PSBQUl8yX0JBRF9JTk8pCisJCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCisJCS8qIAorCQkgKiBPZmZlciB0byBjbGVhciB1bnVzZWQgaW5vZGVzOyBpZiB3ZSBhcmUgZ29pbmcgdG8gYmUKKwkJICogcmVzdGFydGluZyB0aGUgc2NhbiBkdWUgdG8gYmdfaXRhYmxlX3VudXNlZCBiZWluZworCQkgKiB3cm9uZywgdGhlbiBkb24ndCBjbGVhciBhbnkgaW5vZGVzIHRvIGF2b2lkIHphcHBpbmcKKwkJICogaW5vZGVzIHRoYXQgd2VyZSBza2lwcGVkIGR1cmluZyBwYXNzMSBkdWUgdG8gYW4KKwkJICogaW5jb3JyZWN0IGJnX2l0YWJsZV91bnVzZWQ7IHdlJ2xsIGdldCBhbnkgcmVhbAorCQkgKiBwcm9ibGVtcyBhZnRlciB3ZSByZXN0YXJ0LgorCQkgKi8KKwkJaWYgKCEoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1JFU1RBUlRfTEFURVIpICYmCisJCSAgICAhKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwKKwkJCQkJCWRpcmVudC0+aW5vZGUpKSkKKwkJCXByb2JsZW0gPSBQUl8yX1VOVVNFRF9JTk9ERTsKKworCQlpZiAocHJvYmxlbSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJmNkLT5wY3R4KSkgeworCQkJCWRpcmVudC0+aW5vZGUgPSAwOworCQkJCWRpcl9tb2RpZmllZCsrOworCQkJCWdvdG8gbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJaWYgKHByb2JsZW0gPT0gUFJfMl9CQURfSU5PKQorCQkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKworCQlpZiAoIWVuY3J5cHRlZCAmJiBjaGVja19uYW1lKGN0eCwgZGlyZW50LCAmY2QtPnBjdHgpKQorCQkJZGlyX21vZGlmaWVkKys7CisKKwkJaWYgKGNoZWNrX2ZpbGV0eXBlKGN0eCwgZGlyZW50LCBpbm8sICZjZC0+cGN0eCkpCisJCQlkaXJfbW9kaWZpZWQrKzsKKworI2lmZGVmIEVOQUJMRV9IVFJFRQorCQlpZiAoZHhfZGIpIHsKKwkJCWV4dDJmc19kaXJoYXNoKGR4X2Rpci0+aGFzaHZlcnNpb24sIGRpcmVudC0+bmFtZSwKKwkJCQkgICAgICAgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSwKKwkJCQkgICAgICAgZnMtPnN1cGVyLT5zX2hhc2hfc2VlZCwgJmhhc2gsIDApOworCQkJaWYgKGhhc2ggPCBkeF9kYi0+bWluX2hhc2gpCisJCQkJZHhfZGItPm1pbl9oYXNoID0gaGFzaDsKKwkJCWlmIChoYXNoID4gZHhfZGItPm1heF9oYXNoKQorCQkJCWR4X2RiLT5tYXhfaGFzaCA9IGhhc2g7CisJCX0KKyNlbmRpZgorCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBkaXJlY3RvcnksIHRoZW4gbWFyayBpdHMgcGFyZW50IGluIGl0cworCQkgKiBkaXJfaW5mbyBzdHJ1Y3R1cmUuICBJZiB0aGUgcGFyZW50IGZpZWxkIGlzIGFscmVhZHkKKwkJICogZmlsbGVkIGluLCB0aGVuIHRoaXMgZGlyZWN0b3J5IGhhcyBtb3JlIHRoYW4gb25lCisJCSAqIGhhcmQgbGluay4gIFdlIGFzc3VtZSB0aGUgZmlyc3QgbGluayBpcyBjb3JyZWN0LAorCQkgKiBhbmQgYXNrIHRoZSB1c2VyIGlmIGhlL3NoZSB3YW50cyB0byBjbGVhciB0aGlzIG9uZS4KKwkJICovCisJCWlmICgoZG90X3N0YXRlID4gMSkgJiYKKwkJICAgIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwKKwkJCQkJICAgICAgZGlyZW50LT5pbm9kZSkpKSB7CisJCQlpZiAoZTJmc2NrX2Rpcl9pbmZvX2dldF9wYXJlbnQoY3R4LCBkaXJlbnQtPmlub2RlLAorCQkJCQkJICAgICAgICZzdWJkaXJfcGFyZW50KSkgeworCQkJCWNkLT5wY3R4LmlubyA9IGRpcmVudC0+aW5vZGU7CisJCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX05PX0RJUklORk8sICZjZC0+cGN0eCk7CisJCQkJZ290byBhYm9ydF9mcmVlX2RpY3Q7CisJCQl9CisJCQlpZiAoc3ViZGlyX3BhcmVudCkgeworCQkJCWNkLT5wY3R4LmlubzIgPSBzdWJkaXJfcGFyZW50OworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfTElOS19ESVIsCisJCQkJCQkmY2QtPnBjdHgpKSB7CisJCQkJCWRpcmVudC0+aW5vZGUgPSAwOworCQkJCQlkaXJfbW9kaWZpZWQrKzsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCQljZC0+cGN0eC5pbm8yID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfcGFyZW50KGN0eCwKKwkJCQkJCSAgZGlyZW50LT5pbm9kZSwgaW5vKTsKKwkJCX0KKwkJfQorCisJCWlmIChkdXBzX2ZvdW5kKSB7CisJCQk7CisJCX0gZWxzZSBpZiAoZGljdF9sb29rdXAoJmRlX2RpY3QsIGRpcmVudCkpIHsKKwkJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCQlwY3R4LmlubyA9IGlubzsKKwkJCXBjdHguZGlyZW50ID0gZGlyZW50OworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX1JFUE9SVF9EVVBfRElSRU5ULCAmcGN0eCk7CisJCQlpZiAoIWN0eC0+ZGlyc190b19oYXNoKQorCQkJCWV4dDJmc191MzJfbGlzdF9jcmVhdGUoJmN0eC0+ZGlyc190b19oYXNoLCA1MCk7CisJCQlpZiAoY3R4LT5kaXJzX3RvX2hhc2gpCisJCQkJZXh0MmZzX3UzMl9saXN0X2FkZChjdHgtPmRpcnNfdG9faGFzaCwgaW5vKTsKKwkJCWR1cHNfZm91bmQrKzsKKwkJfSBlbHNlCisJCQlkaWN0X2FsbG9jX2luc2VydCgmZGVfZGljdCwgZGlyZW50LCBkaXJlbnQpOworCisJCWV4dDJmc19pY291bnRfaW5jcmVtZW50KGN0eC0+aW5vZGVfY291bnQsIGRpcmVudC0+aW5vZGUsCisJCQkJCSZsaW5rcyk7CisJCWlmIChsaW5rcyA+IDEpCisJCQljdHgtPmZzX2xpbmtzX2NvdW50Kys7CisJCWN0eC0+ZnNfdG90YWxfY291bnQrKzsKKwluZXh0OgorCQlwcmV2ID0gZGlyZW50OworCQlpZiAoZGlyX21vZGlmaWVkKQorCQkJKHZvaWQpIGV4dDJmc19nZXRfcmVjX2xlbihmcywgZGlyZW50LCAmcmVjX2xlbik7CisJCW9mZnNldCArPSByZWNfbGVuOworCQlkb3Rfc3RhdGUrKzsKKwl9IHdoaWxlIChvZmZzZXQgPCBmcy0+YmxvY2tzaXplKTsKKyNpZiAwCisJcHJpbnRmKCJcbiIpOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX0hUUkVFCisJaWYgKGR4X2RiKSB7CisjaWZkZWYgRFhfREVCVUcKKwkJcHJpbnRmKCJkYl9ibG9jayAlZCwgdHlwZSAlZCwgbWluX2hhc2ggMHglMHgsIG1heF9oYXNoIDB4JTB4XG4iLAorCQkgICAgICAgZGItPmJsb2NrY250LCBkeF9kYi0+dHlwZSwKKwkJICAgICAgIGR4X2RiLT5taW5faGFzaCwgZHhfZGItPm1heF9oYXNoKTsKKyNlbmRpZgorCQljZC0+cGN0eC5kaXIgPSBjZC0+cGN0eC5pbm87CisJCWlmICgoZHhfZGItPnR5cGUgPT0gRFhfRElSQkxPQ0tfUk9PVCkgfHwKKwkJICAgIChkeF9kYi0+dHlwZSA9PSBEWF9ESVJCTE9DS19OT0RFKSkKKwkJCXBhcnNlX2ludF9ub2RlKGZzLCBkYiwgY2QsIGR4X2RpciwgYnVmKTsKKwl9CisjZW5kaWYgLyogRU5BQkxFX0hUUkVFICovCisJaWYgKG9mZnNldCAhPSBmcy0+YmxvY2tzaXplKSB7CisJCWNkLT5wY3R4Lm51bSA9IHJlY19sZW4gLSBmcy0+YmxvY2tzaXplICsgb2Zmc2V0OworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0ZJTkFMX1JFQ0xFTiwgJmNkLT5wY3R4KSkgeworCQkJZGlyZW50LT5yZWNfbGVuID0gY2QtPnBjdHgubnVtOworCQkJZGlyX21vZGlmaWVkKys7CisJCX0KKwl9CisJaWYgKGRpcl9tb2RpZmllZCkgeworCQljZC0+cGN0eC5lcnJjb2RlID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsIGJsb2NrX25yLCBidWYsIDApOworCQlpZiAoY2QtPnBjdHguZXJyY29kZSkgeworCQkJaWYgKCFmaXhfcHJvYmxlbShjdHgsIFBSXzJfV1JJVEVfRElSQkxPQ0ssCisJCQkJCSAmY2QtPnBjdHgpKQorCQkJCWdvdG8gYWJvcnRfZnJlZV9kaWN0OworCQl9CisJCWV4dDJmc19tYXJrX2NoYW5nZWQoZnMpOworCX0KKwlkaWN0X2ZyZWVfbm9kZXMoJmRlX2RpY3QpOworCXJldHVybiAwOworYWJvcnRfZnJlZV9kaWN0OgorCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJZGljdF9mcmVlX25vZGVzKCZkZV9kaWN0KTsKKwlyZXR1cm4gRElSRU5UX0FCT1JUOworfQorCitzdHJ1Y3QgZGVsX2Jsb2NrIHsKKwllMmZzY2tfdAljdHg7CisJZTJfYmxrY250X3QJbnVtOworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRlYWxsb2NhdGUgYSBibG9jaywgYW5kIGlzIGFuIGludGVyYXRvcgorICogZnVuY3Rpb25lZCBjYWxsZWQgYnkgZGVhbGxvY2F0ZSBpbm9kZSB2aWEgZXh0MmZzX2l0ZXJhdGVfYmxvY2soKS4KKyAqLworc3RhdGljIGludCBkZWFsbG9jYXRlX2lub2RlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgYmxrNjRfdAkqYmxvY2tfbnIsCisJCQkJICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IGRlbF9ibG9jayAqcCA9IHByaXZfZGF0YTsKKworCWlmIChIT0xFX0JMS0FERFIoKmJsb2NrX25yKSkKKwkJcmV0dXJuIDA7CisJaWYgKCgqYmxvY2tfbnIgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKCpibG9ja19uciA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKQorCQlyZXR1cm4gMDsKKwlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIocC0+Y3R4LT5ibG9ja19mb3VuZF9tYXAsICpibG9ja19ucik7CisJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgKmJsb2NrX25yLCAtMSk7CisJcC0+bnVtKys7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1Y3Rpb24gZGVhbGxvY2F0ZXMgYW4gaW5vZGUKKyAqLworc3RhdGljIHZvaWQgZGVhbGxvY2F0ZV9pbm9kZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBjaGFyKiBibG9ja19idWYpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlfX3UzMgkJCWNvdW50OworCXN0cnVjdCBkZWxfYmxvY2sJZGVsX2Jsb2NrOworCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgImRlYWxsb2NhdGVfaW5vZGUiKTsKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCisJLyoKKwkgKiBGaXggdXAgdGhlIGJpdG1hcHMuLi4KKwkgKi8KKwllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCAtMSwgTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpKTsKKworCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIpKSB7CisJCXBjdHguZXJyY29kZSA9IGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyKGZzLAorCQkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSksCisJCQkJCWJsb2NrX2J1ZiwgLTEsICZjb3VudCk7CisJCWlmIChwY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9CQURfRUFfQkxPQ0tfTlVNKSB7CisJCQlwY3R4LmVycmNvZGUgPSAwOworCQkJY291bnQgPSAxOworCQl9CisJCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJCXBjdHguYmxrID0gZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCAmaW5vZGUpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0FESl9FQV9SRUZDT1VOVCwgJnBjdHgpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoY291bnQgPT0gMCkgeworCQkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLAorCQkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkpOworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywKKwkJCQkgIGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKSwgLTEpOworCQl9CisJCWV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZnMsICZpbm9kZSwgMCk7CisJfQorCisJaWYgKCFleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsICZpbm9kZSkpCisJCWdvdG8gY2xlYXJfaW5vZGU7CisKKwlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpICYmCisJICAgIGV4dDJmc19uZWVkc19sYXJnZV9maWxlX2ZlYXR1cmUoRVhUMl9JX1NJWkUoJmlub2RlKSkpCisJCWN0eC0+bGFyZ2VfZmlsZXMtLTsKKworCWRlbF9ibG9jay5jdHggPSBjdHg7CisJZGVsX2Jsb2NrLm51bSA9IDA7CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIGJsb2NrX2J1ZiwKKwkJCQkJICAgICBkZWFsbG9jYXRlX2lub2RlX2Jsb2NrLAorCQkJCQkgICAgICZkZWxfYmxvY2spOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0RFQUxMT0NfSU5PREUsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KK2NsZWFyX2lub2RlOgorCS8qIElub2RlIG1heSBoYXZlIGNoYW5nZWQgYnkgYmxvY2tfaXRlcmF0ZSwgc28gcmVyZWFkIGl0ICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgImRlYWxsb2NhdGVfaW5vZGUiKTsKKwllMmZzY2tfY2xlYXJfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgMCwgImRlYWxsb2NhdGVfaW5vZGUiKTsKK30KKworLyoKKyAqIFRoaXMgZnVjdGlvbiBjbGVhcnMgdGhlIGh0cmVlIGZsYWcgb24gYW4gaW5vZGUKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfaHRyZWUoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubykKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKworCWUyZnNja19yZWFkX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsICJjbGVhcl9odHJlZSIpOworCWlub2RlLmlfZmxhZ3MgPSBpbm9kZS5pX2ZsYWdzICYgfkVYVDJfSU5ERVhfRkw7CisJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsICJjbGVhcl9odHJlZSIpOworCWlmIChjdHgtPmRpcnNfdG9faGFzaCkKKwkJZXh0MmZzX3UzMl9saXN0X2FkZChjdHgtPmRpcnNfdG9faGFzaCwgaW5vKTsKK30KKworCitpbnQgZTJmc2NrX3Byb2Nlc3NfYmFkX2lub2RlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICAgIGV4dDJfaW5vX3QgaW5vLCBjaGFyICpidWYpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWludAkJCWlub2RlX21vZGlmaWVkID0gMDsKKwlpbnQJCQlub3RfZml4ZWQgPSAwOworCXVuc2lnbmVkIGNoYXIJCSpmcmFnLCAqZnNpemU7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXByb2JsZW1fdAkJcHJvYmxlbSA9IDA7CisKKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicHJvY2Vzc19iYWRfaW5vZGUiKTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJcGN0eC5pbm8gPSBpbm87CisJcGN0eC5kaXIgPSBkaXI7CisJcGN0eC5pbm9kZSA9ICZpbm9kZTsKKworCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkgJiYKKwkgICAgIShmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSKSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0ZJTEVfQUNMX1pFUk8sICZwY3R4KSkgeworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmlub2RlLCAwKTsKKwkJCWlub2RlX21vZGlmaWVkKys7CisJCX0gZWxzZQorCQkJbm90X2ZpeGVkKys7CisJfQorCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLmlfbW9kZSkgJiYgIUxJTlVYX1NfSVNSRUcoaW5vZGUuaV9tb2RlKSAmJgorCSAgICAhTElOVVhfU19JU0NIUihpbm9kZS5pX21vZGUpICYmICFMSU5VWF9TX0lTQkxLKGlub2RlLmlfbW9kZSkgJiYKKwkgICAgIUxJTlVYX1NfSVNMTksoaW5vZGUuaV9tb2RlKSAmJiAhTElOVVhfU19JU0ZJRk8oaW5vZGUuaV9tb2RlKSAmJgorCSAgICAhKExJTlVYX1NfSVNTT0NLKGlub2RlLmlfbW9kZSkpKQorCQlwcm9ibGVtID0gUFJfMl9CQURfTU9ERTsKKwllbHNlIGlmIChMSU5VWF9TX0lTQ0hSKGlub2RlLmlfbW9kZSkKKwkJICYmICFlMmZzY2tfcGFzczFfY2hlY2tfZGV2aWNlX2lub2RlKGZzLCAmaW5vZGUpKQorCQlwcm9ibGVtID0gUFJfMl9CQURfQ0hBUl9ERVY7CisJZWxzZSBpZiAoTElOVVhfU19JU0JMSyhpbm9kZS5pX21vZGUpCisJCSAmJiAhZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShmcywgJmlub2RlKSkKKwkJcHJvYmxlbSA9IFBSXzJfQkFEX0JMT0NLX0RFVjsKKwllbHNlIGlmIChMSU5VWF9TX0lTRklGTyhpbm9kZS5pX21vZGUpCisJCSAmJiAhZTJmc2NrX3Bhc3MxX2NoZWNrX2RldmljZV9pbm9kZShmcywgJmlub2RlKSkKKwkJcHJvYmxlbSA9IFBSXzJfQkFEX0ZJRk87CisJZWxzZSBpZiAoTElOVVhfU19JU1NPQ0soaW5vZGUuaV9tb2RlKQorCQkgJiYgIWUyZnNja19wYXNzMV9jaGVja19kZXZpY2VfaW5vZGUoZnMsICZpbm9kZSkpCisJCXByb2JsZW0gPSBQUl8yX0JBRF9TT0NLRVQ7CisJZWxzZSBpZiAoTElOVVhfU19JU0xOSyhpbm9kZS5pX21vZGUpCisJCSAmJiAhZTJmc2NrX3Bhc3MxX2NoZWNrX3N5bWxpbmsoZnMsIGlubywgJmlub2RlLCBidWYpKSB7CisJCXByb2JsZW0gPSBQUl8yX0lOVkFMSURfU1lNTElOSzsKKwl9CisKKwlpZiAocHJvYmxlbSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBwcm9ibGVtLCAmcGN0eCkpIHsKKwkJCWRlYWxsb2NhdGVfaW5vZGUoY3R4LCBpbm8sIDApOworCQkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCQlwcm9ibGVtID0gMDsKKwl9CisKKwlpZiAoaW5vZGUuaV9mYWRkcikgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0ZBRERSX1pFUk8sICZwY3R4KSkgeworCQkJaW5vZGUuaV9mYWRkciA9IDA7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCX0KKworCXN3aXRjaCAoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MpIHsKKwkgICAgY2FzZSBFWFQyX09TX0hVUkQ6CisJCWZyYWcgPSAmaW5vZGUub3NkMi5odXJkMi5oX2lfZnJhZzsKKwkJZnNpemUgPSAmaW5vZGUub3NkMi5odXJkMi5oX2lfZnNpemU7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlmcmFnID0gZnNpemUgPSAwOworCX0KKwlpZiAoZnJhZyAmJiAqZnJhZykgeworCQlwY3R4Lm51bSA9ICpmcmFnOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0ZSQUdfWkVSTywgJnBjdHgpKSB7CisJCQkqZnJhZyA9IDA7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCQlwY3R4Lm51bSA9IDA7CisJfQorCWlmIChmc2l6ZSAmJiAqZnNpemUpIHsKKwkJcGN0eC5udW0gPSAqZnNpemU7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRlNJWkVfWkVSTywgJnBjdHgpKSB7CisJCQkqZnNpemUgPSAwOworCQkJaW5vZGVfbW9kaWZpZWQrKzsKKwkJfSBlbHNlCisJCQlub3RfZml4ZWQrKzsKKwkJcGN0eC5udW0gPSAwOworCX0KKworCWlmICgoZnMtPnN1cGVyLT5zX2NyZWF0b3Jfb3MgPT0gRVhUMl9PU19MSU5VWCkgJiYKKwkgICAgIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCSAgICAoaW5vZGUub3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSAhPSAwKSkgeworCQlwY3R4Lm51bSA9IGlub2RlLm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGk7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfQkxPQ0tTX0hJX1pFUk8sICZwY3R4KSkgeworCQkJaW5vZGUub3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSA9IDA7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9CisJfQorCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiAKKwkgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgJiYKKwkgICAgaW5vZGUub3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2ggIT0gMCkgeworCQlwY3R4Lm51bSA9IGlub2RlLm9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8yX0lfRklMRV9BQ0xfSElfWkVSTywgJnBjdHgpKSB7CisJCQlpbm9kZS5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCA9IDA7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCX0KKworCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkgJiYKKwkgICAgKChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9GSUxFX0FDTF9CQUQsICZwY3R4KSkgeworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmlub2RlLCAwKTsKKwkJCWlub2RlX21vZGlmaWVkKys7CisJCX0gZWxzZQorCQkJbm90X2ZpeGVkKys7CisJfQorCWlmIChpbm9kZS5pX2Rpcl9hY2wgJiYKKwkgICAgTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRElSX0FDTF9aRVJPLCAmcGN0eCkpIHsKKwkJCWlub2RlLmlfZGlyX2FjbCA9IDA7CisJCQlpbm9kZV9tb2RpZmllZCsrOworCQl9IGVsc2UKKwkJCW5vdF9maXhlZCsrOworCX0KKworCWlmIChpbm9kZV9tb2RpZmllZCkKKwkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaW5vLCAmaW5vZGUsICJwcm9jZXNzX2JhZF9pbm9kZSIpOworCWlmICghbm90X2ZpeGVkICYmIGN0eC0+aW5vZGVfYmFkX21hcCkKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfYmFkX21hcCwgaW5vKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogYWxsb2NhdGVfZGlyX2Jsb2NrIC0tLSB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBkaXJlY3RvcnkKKyAqIAlibG9jayBmb3IgYSBwYXJ0aWN1bGFyIGlub2RlOyB0aGlzIGlzIGRvbmUgaWYgYSBkaXJlY3RvcnkgaGFzCisgKiAJYSAiaG9sZSIgaW4gaXQsIG9yIGlmIGEgZGlyZWN0b3J5IGhhcyBhIGlsbGVnYWwgYmxvY2sgbnVtYmVyCisgKiAJdGhhdCB3YXMgemVyb2VkIG91dCBhbmQgbm93IG5lZWRzIHRvIGJlIHJlcGxhY2VkLgorICovCitzdGF0aWMgaW50IGFsbG9jYXRlX2Rpcl9ibG9jayhlMmZzY2tfdCBjdHgsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiLAorCQkJICAgICAgY2hhciAqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWJsazY0X3QJCQlibGs7CisJY2hhcgkJCSpibG9jazsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKworCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzJfRElSRUNUT1JZX0hPTEUsIHBjdHgpID09IDApCisJCXJldHVybiAxOworCisJLyoKKwkgKiBSZWFkIHRoZSBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyBpbjsgd2UnbGwgYmUgbWVzc2luZyB3aXRoCisJICogdGhlbS4KKwkgKi8KKwllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisKKwkvKgorCSAqIEZpcnN0LCBmaW5kIGEgZnJlZSBibG9jaworCSAqLworCXBjdHgtPmVycmNvZGUgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgMCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsICZibGspOworCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCXBjdHgtPnN0ciA9ICJleHQyZnNfbmV3X2Jsb2NrIjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0FMTE9DX0RJUkJPQ0ssIHBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgYmxrKTsKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsayk7CisJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCisJLyoKKwkgKiBOb3cgbGV0J3MgY3JlYXRlIHRoZSBhY3R1YWwgZGF0YSBibG9jayBmb3IgdGhlIGlub2RlCisJICovCisJaWYgKGRiLT5ibG9ja2NudCkKKwkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCAwLCAwLCAmYmxvY2spOworCWVsc2UKKwkJcGN0eC0+ZXJyY29kZSA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCBkYi0+aW5vLAorCQkJCQkJICAgICBFWFQyX1JPT1RfSU5PLCAmYmxvY2spOworCisJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJcGN0eC0+c3RyID0gImV4dDJmc19uZXdfZGlyX2Jsb2NrIjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0FMTE9DX0RJUkJPQ0ssIHBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsIGJsaywgYmxvY2ssIDApOworCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCWlmIChwY3R4LT5lcnJjb2RlKSB7CisJCXBjdHgtPnN0ciA9ICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrIjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8yX0FMTE9DX0RJUkJPQ0ssIHBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgaW5vZGUgYmxvY2sgY291bnQKKwkgKi8KKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGRiLT5pbm8sICZpbm9kZSwgImFsbG9jYXRlX2Rpcl9ibG9jayIpOworCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgMSk7CisJaWYgKGlub2RlLmlfc2l6ZSA8IChkYi0+YmxvY2tjbnQrMSkgKiBmcy0+YmxvY2tzaXplKQorCQlpbm9kZS5pX3NpemUgPSAoZGItPmJsb2NrY250KzEpICogZnMtPmJsb2Nrc2l6ZTsKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBkYi0+aW5vLCAmaW5vZGUsICJhbGxvY2F0ZV9kaXJfYmxvY2siKTsKKworCS8qCisJICogRmluYWxseSwgdXBkYXRlIHRoZSBibG9jayBwb2ludGVycyBmb3IgdGhlIGlub2RlCisJICovCisJZGItPmJsayA9IGJsazsKKwlwY3R4LT5lcnJjb2RlID0gZXh0MmZzX2JtYXAyKGZzLCBkYi0+aW5vLCAmaW5vZGUsIDAsIEJNQVBfU0VULAorCQkJCSAgICAgZGItPmJsb2NrY250LCAwLCAmYmxrKTsKKwlpZiAocGN0eC0+ZXJyY29kZSkgeworCQlwY3R4LT5zdHIgPSAiZXh0MmZzX2Jsb2NrX2l0ZXJhdGUiOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzJfQUxMT0NfRElSQk9DSywgcGN0eCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wYXNzMy5jIGIvZTJmc3Byb2dzL2UyZnNjay9wYXNzMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTg5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3MzLmMKQEAgLTAsMCArMSw4NTIgQEAKKy8qCisgKiBwYXNzMy5jIC0tIHBhc3MgIzMgb2YgZTJmc2NrOiBDaGVjayBmb3IgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICogUGFzcyAjMyBhc3N1cmVzIHRoYXQgYWxsIGRpcmVjdG9yaWVzIGFyZSBjb25uZWN0ZWQgdG8gdGhlCisgKiBmaWxlc3lzdGVtIHRyZWUsIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICoKKyAqIEZpcnN0LCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgY2hlY2tlZCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzOyBpZgorICogbm90LCBlMmZzY2sgd2lsbCBvZmZlciB0byBjcmVhdGUgYSBuZXcgb25lLiAgSXQgaXMgdGhlbiBtYXJrZWQgYXMKKyAqICJkb25lIi4KKyAqCisgKiBUaGVuLCBwYXNzMyBpbnRlcmF0ZXMgb3ZlciBhbGwgZGlyZWN0b3J5IGlub2RlczsgZm9yIGVhY2ggZGlyZWN0b3J5CisgKiBpdCBhdHRlbXB0cyB0byB0cmFjZSB1cCB0aGUgZmlsZXN5c3RlbSB0cmVlLCB1c2luZyBkaXJpbmZvLnBhcmVudAorICogdW50aWwgaXQgcmVhY2hlcyBhIGRpcmVjdG9yeSB3aGljaCBoYXMgYmVlbiBtYXJrZWQgImRvbmUiLiAgSWYgaXQKKyAqIGNhbiBub3QgZG8gc28sIHRoZW4gdGhlIGRpcmVjdG9yeSBtdXN0IGJlIGRpc2Nvbm5lY3RlZCwgYW5kIGUyZnNjaworICogd2lsbCBvZmZlciB0byByZWNvbm5lY3QgaXQgdG8gL2xvc3QrZm91bmQuICBXaGlsZSBpdCBpcyBjaGFzaW5nCisgKiBwYXJlbnQgcG9pbnRlcnMgdXAgdGhlIGZpbGVzeXN0ZW0gdHJlZSwgaWYgcGFzczMgc2VlcyBhIGRpcmVjdG9yeQorICogdHdpY2UsIHRoZW4gaXQgaGFzIGRldGVjdGVkIGEgZmlsZXN5c3RlbSBsb29wLCBhbmQgaXQgd2lsbCBhZ2FpbgorICogb2ZmZXIgdG8gcmVjb25uZWN0IHRoZSBkaXJlY3RvcnkgdG8gL2xvc3QrZm91bmQgaW4gdG8gYnJlYWsgdGhlCisgKiBmaWxlc3lzdGVtIGxvb3AuCisgKgorICogUGFzcyAzIGFsc28gY29udGFpbnMgdGhlIHN1YnJvdXRpbmUsIGUyZnNja19yZWNvbm5lY3RfZmlsZSgpIHRvCisgKiByZWNvbm5lY3QgaW5vZGVzIHRvIC9sb3N0K2ZvdW5kOyB0aGlzIHN1YnJvdXRpbmUgaXMgYWxzbyB1c2VkIGJ5CisgKiBwYXNzIDQuICBlMmZzY2tfcmVjb25uZWN0X2ZpbGUoKSBjYWxscyBnZXRfbG9zdF9hbmRfZm91bmQoKSwgd2hpY2gKKyAqIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqCisgKiBQYXNzIDMgZnJlZXMgdGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXM6CisgKiAgICAgCS0gVGhlIGRpcmluZm8gZGlyZWN0b3J5IGluZm9ybWF0aW9uIGNhY2hlLgorICovCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisKK3N0YXRpYyB2b2lkIGNoZWNrX3Jvb3QoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyBpbnQgY2hlY2tfZGlyZWN0b3J5KGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KTsKK3N0YXRpYyB2b2lkIGZpeF9kb3Rkb3QoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywgZXh0Ml9pbm9fdCBwYXJlbnQpOworCitzdGF0aWMgZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9sb29wX2RldGVjdCA9IDA7CitzdGF0aWMgZXh0MmZzX2lub2RlX2JpdG1hcCBpbm9kZV9kb25lX21hcCA9IDA7CisKK3ZvaWQgZTJmc2NrX3Bhc3MzKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IGRpcl9pbmZvX2l0ZXIgKml0ZXIgPSBOVUxMOworI2lmZGVmIFJFU09VUkNFX1RSQUNLCisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjazsKKyNlbmRpZgorCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlzdHJ1Y3QgZGlyX2luZm8JKmRpcjsKKwl1bnNpZ25lZCBsb25nIG1heGRpcnMsIGNvdW50OworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworI2lmZGVmIE1UUkFDRQorCW10cmFjZV9wcmludCgiUGFzcyAzIik7CisjZW5kaWYKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfUEFTU19IRUFERVIsICZwY3R4KTsKKworCS8qCisJICogQWxsb2NhdGUgc29tZSBiaXRtYXBzIHRvIGRvIGxvb3AgZGV0ZWN0aW9uLgorCSAqLworCXBjdHguZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIF8oImlub2RlIGRvbmUgYml0bWFwIiksCisJCQkJCUVYVDJGU19CTUFQNjRfQVVUT0RJUiwKKwkJCQkJImlub2RlX2RvbmVfbWFwIiwgJmlub2RlX2RvbmVfbWFwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJZ290byBhYm9ydF9leGl0OworCX0KKwlwcmludF9yZXNvdXJjZV90cmFjayhjdHgsIF8oIlBlYWsgbWVtb3J5IiksICZjdHgtPmdsb2JhbF9ydHJhY2ssIE5VTEwpOworCisJY2hlY2tfcm9vdChjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCWdvdG8gYWJvcnRfZXhpdDsKKworCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfZG9uZV9tYXAsIEVYVDJfUk9PVF9JTk8pOworCisJbWF4ZGlycyA9IGUyZnNja19nZXRfbnVtX2RpcmluZm8oY3R4KTsKKwljb3VudCA9IDE7CisKKwlpZiAoY3R4LT5wcm9ncmVzcykKKwkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDMsIDAsIG1heGRpcnMpKQorCQkJZ290byBhYm9ydF9leGl0OworCisJaXRlciA9IGUyZnNja19kaXJfaW5mb19pdGVyX2JlZ2luKGN0eCk7CisJd2hpbGUgKChkaXIgPSBlMmZzY2tfZGlyX2luZm9faXRlcihjdHgsIGl0ZXIpKSAhPSAwKSB7CisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlnb3RvIGFib3J0X2V4aXQ7CisJCWlmIChjdHgtPnByb2dyZXNzICYmIChjdHgtPnByb2dyZXNzKShjdHgsIDMsIGNvdW50KyssIG1heGRpcnMpKQorCQkJZ290byBhYm9ydF9leGl0OworCQlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGRpci0+aW5vKSkKKwkJCWlmIChjaGVja19kaXJlY3RvcnkoY3R4LCBkaXItPmlubywgJnBjdHgpKQorCQkJCWdvdG8gYWJvcnRfZXhpdDsKKwl9CisKKwkvKgorCSAqIEZvcmNlIHRoZSBjcmVhdGlvbiBvZiAvbG9zdCtmb3VuZCBpZiBub3QgcHJlc2VudAorCSAqLworCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgPT0gMCkKKwkJZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDEpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRpcmVjdG9yaWVzIHRoYXQgbmVlZCB0byBiZSBpbmRleGVkIG9yCisJICogb3B0aW1pemVkLCBkbyBpdCBoZXJlLgorCSAqLworCWUyZnNja19yZWhhc2hfZGlyZWN0b3JpZXMoY3R4KTsKKworYWJvcnRfZXhpdDoKKwlpZiAoaXRlcikKKwkJZTJmc2NrX2Rpcl9pbmZvX2l0ZXJfZW5kKGN0eCwgaXRlcik7CisJZTJmc2NrX2ZyZWVfZGlyX2luZm8oY3R4KTsKKwlpZiAoaW5vZGVfbG9vcF9kZXRlY3QpIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGlub2RlX2xvb3BfZGV0ZWN0KTsKKwkJaW5vZGVfbG9vcF9kZXRlY3QgPSAwOworCX0KKwlpZiAoaW5vZGVfZG9uZV9tYXApIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGlub2RlX2RvbmVfbWFwKTsKKwkJaW5vZGVfZG9uZV9tYXAgPSAwOworCX0KKworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyAzIiksICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KKworLyoKKyAqIFRoaXMgbWFrZXMgc3VyZSB0aGUgcm9vdCBpbm9kZSBpcyBwcmVzZW50OyBpZiBub3QsIHdlIGFzayBpZiB0aGUKKyAqIHVzZXIgd2FudHMgdXMgdG8gY3JlYXRlIGl0LiAgTm90IGNyZWF0aW5nIGl0IGlzIGEgZmF0YWwgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3Jvb3QoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CQkJYmxrOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWNoYXIgKgkJCWJsb2NrOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBFWFQyX1JPT1RfSU5PKSkgeworCQkvKgorCQkgKiBJZiB0aGUgcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnksIGRpZSBoZXJlLiAgVGhlCisJCSAqIHVzZXIgbXVzdCBoYXZlIGFuc3dlcmVkICdubycgaW4gcGFzczEgd2hlbiB3ZQorCQkgKiBvZmZlcmVkIHRvIGNsZWFyIGl0LgorCQkgKi8KKwkJaWYgKCEoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsCisJCQkJCSAgICAgICBFWFQyX1JPT1RfSU5PKSkpIHsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19ST09UX05PVF9ESVJfQUJPUlQsICZwY3R4KTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX1JPT1RfSU5PREUsICZwY3R4KSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fUk9PVF9JTk9ERV9BQk9SVCwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJLyoKKwkgKiBGaXJzdCwgZmluZCBhIGZyZWUgYmxvY2sKKwkgKi8KKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgMCwgY3R4LT5ibG9ja19mb3VuZF9tYXAsICZibGspOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5zdHIgPSAiZXh0MmZzX25ld19ibG9jayI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfUk9PVF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGJsayk7CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKworCS8qCisJICogTm93IGxldCdzIGNyZWF0ZSB0aGUgYWN0dWFsIGRhdGEgYmxvY2sgZm9yIHRoZSBpbm9kZQorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PLAorCQkJCQkgICAgJmJsb2NrKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHguc3RyID0gImV4dDJmc19uZXdfZGlyX2Jsb2NrIjsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0NSRUFURV9ST09UX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCXJldHVybjsKKwl9CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhmcywgYmxrLCBibG9jaywgMCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfUk9PVF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIGlub2RlIHN0cnVjdHVyZQorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IDA0MDc1NTsKKwlpbm9kZS5pX3NpemUgPSBmcy0+YmxvY2tzaXplOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9IGN0eC0+bm93OworCWlub2RlLmlfbGlua3NfY291bnQgPSAyOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCAxKTsKKwlpbm9kZS5pX2Jsb2NrWzBdID0gYmxrOworCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGlub2RlLgorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIEVYVDJfUk9PVF9JTk8sICZpbm9kZSk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfd3JpdGVfaW5vZGUiOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfQ1JFQVRFX1JPT1RfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogTWlzY2VsbGFuZW91cyBib29ra2VlcGluZy4uLgorCSAqLworCWUyZnNja19hZGRfZGlyX2luZm8oY3R4LCBFWFQyX1JPT1RfSU5PLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfY291bnQsIEVYVDJfUk9PVF9JTk8sIDIpOworCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9saW5rX2luZm8sIEVYVDJfUk9PVF9JTk8sIDIpOworCisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX3VzZWRfbWFwLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwgRVhUMl9ST09UX0lOTyk7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihmcy0+aW5vZGVfbWFwLCBFWFQyX1JPT1RfSU5PKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7Cit9CisKKy8qCisgKiBUaGlzIHN1YnJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgYSBwYXJ0aWN1bGFyCisgKiBkaXJlY3RvcnkgaXMgY29ubmVjdGVkIHRvIHRoZSByb290OyBpZiBpdCBpc24ndCB3ZSB0cmFjZSBpdCB1cCBhcworICogZmFyIGFzIHdlIGNhbiBnbywgYW5kIHRoZW4gb2ZmZXIgdG8gY29ubmVjdCB0aGUgcmVzdWx0aW5nIHBhcmVudCB0bworICogdGhlIGxvc3QrZm91bmQuICBXZSBoYXZlIHRvIGRvIGxvb3AgZGV0ZWN0aW9uOyBpZiB3ZSBldmVyIGRpc2NvdmVyCisgKiBhIGxvb3AsIHdlIHRyZWF0IHRoYXQgYXMgYSBkaXNjb25uZWN0ZWQgZGlyZWN0b3J5IGFuZCBvZmZlciB0bworICogcmVwYXJlbnQgaXQgdG8gbG9zdCtmb3VuZC4KKyAqCisgKiBIb3dldmVyLCBsb29wIGRldGVjdGlvbiBpcyBleHBlbnNpdmUsIGJlY2F1c2UgZm9yIHZlcnkgbGFyZ2UKKyAqIGZpbGVzeXN0ZW1zLCB0aGUgaW5vZGVfbG9vcF9kZXRlY3QgYml0bWFwIGlzIGh1Z2UsIGFuZCBjbGVhcmluZyBpdAorICogaXMgbm9uLXRyaXZpYWwuICBMb29wcyBpbiBmaWxlc3lzdGVtcyBhcmUgYWxzbyBhIHJhcmUgZXJyb3IgY2FzZSwKKyAqIGFuZCB3ZSBzaG91bGRuJ3Qgb3B0aW1pemUgZm9yIGVycm9yIGNhc2VzLiAgU28gd2UgdHJ5IHR3byBwYXNzZXMgb2YKKyAqIHRoZSBhbGdvcml0aG0uICBUaGUgZmlyc3QgdGltZSwgd2UgaWdub3JlIGxvb3AgZGV0ZWN0aW9uIGFuZCBtZXJlbHkKKyAqIGluY3JlbWVudCBhIGNvdW50ZXI7IGlmIHRoZSBjb3VudGVyIGV4Y2VlZHMgc29tZSBleHRyZW1lIHRocmVzaG9sZCwKKyAqIHRoZW4gd2UgdHJ5IGFnYWluIHdpdGggdGhlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCBlbmFibGVkLgorICovCitzdGF0aWMgaW50IGNoZWNrX2RpcmVjdG9yeShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgc3RydWN0IHByb2JsZW1fY29udGV4dCAqcGN0eCkKK3sKKwlleHQyX2ZpbHN5cyAJZnMgPSBjdHgtPmZzOworCWV4dDJfaW5vX3QJaW5vID0gZGlyLCBwYXJlbnQ7CisJaW50CQlsb29wX3Bhc3MgPSAwLCBwYXJlbnRfY291bnQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogTWFyayB0aGlzIGlub2RlIGFzIGJlaW5nICJkb25lIjsgYnkgdGhlIHRpbWUgd2UKKwkJICogcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiwgdGhlIGlub2RlIHdlIGVpdGhlciBiZQorCQkgKiB2ZXJpZmllZCBhcyBiZWluZyBjb25uZWN0ZWQgdG8gdGhlIGRpcmVjdG9yeSB0cmVlLAorCQkgKiBvciB3ZSB3aWxsIGhhdmUgb2ZmZXJlZCB0byByZWNvbm5lY3QgdGhpcyB0bworCQkgKiBsb3N0K2ZvdW5kLgorCQkgKgorCQkgKiBJZiBpdCB3YXMgbWFya2VkIGRvbmUgYWxyZWFkeSwgdGhlbiB3ZSd2ZSByZWFjaGVkIGEKKwkJICogcGFyZW50IHdlJ3ZlIGFscmVhZHkgY2hlY2tlZC4KKwkJICovCisJICAJaWYgKGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfZG9uZV9tYXAsIGlubykpCisJCQlicmVhazsKKworCQlpZiAoZTJmc2NrX2Rpcl9pbmZvX2dldF9wYXJlbnQoY3R4LCBpbm8sICZwYXJlbnQpKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fRElSSU5GTywgcGN0eCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoaXMgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgb3Igd2UndmUKKwkJICogc2VlbiB0aGUgcGFyZW50IG9uY2UgYWxyZWFkeSwgdGhlbiBvZmZlciB0bworCQkgKiByZXBhcmVudCBpdCB0byBsb3N0K2ZvdW5kCisJCSAqLworCQlpZiAoIXBhcmVudCB8fAorCQkgICAgKGxvb3BfcGFzcyAmJgorCQkgICAgIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGlub2RlX2xvb3BfZGV0ZWN0LAorCQkJCQkgICAgICAgcGFyZW50KSkpKSB7CisJCQlwY3R4LT5pbm8gPSBpbm87CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8zX1VOQ09OTkVDVEVEX0RJUiwgcGN0eCkpIHsKKwkJCQlpZiAoZTJmc2NrX3JlY29ubmVjdF9maWxlKGN0eCwgcGN0eC0+aW5vKSkKKwkJCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCQkJZWxzZSB7CisJCQkJCWZpeF9kb3Rkb3QoY3R4LCBwY3R4LT5pbm8sCisJCQkJCQkgICBjdHgtPmxvc3RfYW5kX2ZvdW5kKTsKKwkJCQkJcGFyZW50ID0gY3R4LT5sb3N0X2FuZF9mb3VuZDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpbm8gPSBwYXJlbnQ7CisJCWlmIChsb29wX3Bhc3MpIHsKKwkJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoaW5vZGVfbG9vcF9kZXRlY3QsIGlubyk7CisJCX0gZWxzZSBpZiAocGFyZW50X2NvdW50KysgPiAyMDQ4KSB7CisJCQkvKgorCQkJICogSWYgd2UndmUgcnVuIGludG8gYSBwYXRoIGRlcHRoIHRoYXQncworCQkJICogZ3JlYXRlciB0aGFuIDIwNDgsIHRyeSBhZ2FpbiB3aXRoIHRoZSBpbm9kZQorCQkJICogbG9vcCBiaXRtYXAgdHVybmVkIG9uIGFuZCBzdGFydCBmcm9tIHRoZQorCQkJICogdG9wLgorCQkJICovCisJCQlsb29wX3Bhc3MgPSAxOworCQkJaWYgKGlub2RlX2xvb3BfZGV0ZWN0KQorCQkJCWV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXAoaW5vZGVfbG9vcF9kZXRlY3QpOworCQkJZWxzZSB7CisJCQkJcGN0eC0+ZXJyY29kZSA9IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIF8oImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIpLCBFWFQyRlNfQk1BUDY0X0FVVE9ESVIsICJpbm9kZV9sb29wX2RldGVjdCIsICZpbm9kZV9sb29wX2RldGVjdCk7CisJCQkJaWYgKHBjdHgtPmVycmNvZGUpIHsKKwkJCQkJcGN0eC0+bnVtID0gMTsKKwkJCQkJZml4X3Byb2JsZW0oY3R4LAorCQkJCSAgICBQUl8zX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsIHBjdHgpOworCQkJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQkJaW5vID0gZGlyOworCQl9CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCAuLiBhbmQgdGhlIHBhcmVudCBkaXJlY3RvcnkgYXJlIHRoZSBzYW1lOworCSAqIG9mZmVyIHRvIGZpeCBpdCBpZiBub3QuCisJICovCisJcGN0eC0+aW5vID0gZGlyOworCWlmIChlMmZzY2tfZGlyX2luZm9fZ2V0X2RvdGRvdChjdHgsIGRpciwgJnBjdHgtPmlubzIpIHx8CisJICAgIGUyZnNja19kaXJfaW5mb19nZXRfcGFyZW50KGN0eCwgZGlyLCAmcGN0eC0+ZGlyKSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfTk9fRElSSU5GTywgcGN0eCk7CisJCXJldHVybiAwOworCX0KKwlpZiAocGN0eC0+aW5vMiAhPSBwY3R4LT5kaXIpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfM19CQURfRE9UX0RPVCwgcGN0eCkpCisJCQlmaXhfZG90ZG90KGN0eCwgZGlyLCBwY3R4LT5kaXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBnZXRzIHRoZSBsb3N0X2FuZF9mb3VuZCBpbm9kZSwgbWFraW5nIGl0IGEgZGlyZWN0b3J5CisgKiBpZiBuZWNlc3NhcnkKKyAqLworZXh0Ml9pbm9fdCBlMmZzY2tfZ2V0X2xvc3RfYW5kX2ZvdW5kKGUyZnNja190IGN0eCwgaW50IGZpeCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdAkJCWlubzsKKwlibGs2NF90CQkJYmxrOworCWVycmNvZGVfdAkJcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWNoYXIgKgkJCWJsb2NrOworCXN0YXRpYyBjb25zdCBjaGFyCW5hbWVbXSA9ICJsb3N0K2ZvdW5kIjsKKwlzdHJ1Y3QgCXByb2JsZW1fY29udGV4dAlwY3R4OworCisJaWYgKGN0eC0+bG9zdF9hbmRfZm91bmQpCisJCXJldHVybiBjdHgtPmxvc3RfYW5kX2ZvdW5kOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIEVYVDJfUk9PVF9JTk8sIG5hbWUsCisJCQkgICAgICAgc2l6ZW9mKG5hbWUpLTEsIDAsICZpbm8pOworCWlmIChyZXR2YWwgJiYgIWZpeCkKKwkJcmV0dXJuIDA7CisJaWYgKCFyZXR2YWwpIHsKKwkJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpbm8pKSB7CisJCQljdHgtPmxvc3RfYW5kX2ZvdW5kID0gaW5vOworCQkJcmV0dXJuIGlubzsKKwkJfQorCisJCS8qIExvc3QrZm91bmQgaXNuJ3QgYSBkaXJlY3RvcnkhICovCisJCWlmICghZml4KQorCQkJcmV0dXJuIDA7CisJCXBjdHguaW5vID0gaW5vOworCQlpZiAoIWZpeF9wcm9ibGVtKGN0eCwgUFJfM19MUEZfTk9URElSLCAmcGN0eCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBPSywgdW5saW5rIHRoZSBvbGQgL2xvc3QrZm91bmQgZmlsZS4gKi8KKwkJcGN0eC5lcnJjb2RlID0gZXh0MmZzX3VubGluayhmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgaW5vLCAwKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJcGN0eC5zdHIgPSAiZXh0MmZzX3VubGluayI7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfQ1JFQVRFX0xQRl9FUlJPUiwgJnBjdHgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfcGFyZW50KGN0eCwgaW5vLCAwKTsKKwkJZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChjdHgsIGlubywgLTEpOworCX0gZWxzZSBpZiAocmV0dmFsICE9IEVYVDJfRVRfRklMRV9OT1RfRk9VTkQpIHsKKwkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfRVJSX0ZJTkRfTFBGLCAmcGN0eCk7CisJfQorCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX0xGX0RJUiwgMCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBSZWFkIHRoZSBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyBpbjsgd2UnbGwgYmUgbWVzc2luZyB3aXRoCisJICogdGhlbS4KKwkgKi8KKwllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisKKwkvKgorCSAqIEZpcnN0LCBmaW5kIGEgZnJlZSBibG9jaworCSAqLworCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCAwLCBjdHgtPmJsb2NrX2ZvdW5kX21hcCwgJmJsayk7CisJaWYgKHJldHZhbCkgeworCQlwY3R4LmVycmNvZGUgPSByZXR2YWw7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19FUlJfTFBGX05FV19CTE9DSywgJnBjdHgpOworCQlyZXR1cm4gMDsKKwl9CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgYmxrKTsKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKworCS8qCisJICogTmV4dCBmaW5kIGEgZnJlZSBpbm9kZS4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGZzLCBFWFQyX1JPT1RfSU5PLCAwNDA3MDAsCisJCQkJICBjdHgtPmlub2RlX3VzZWRfbWFwLCAmaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VSUl9MUEZfTkVXX0lOT0RFLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGlubyk7CisJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihjdHgtPmlub2RlX2Rpcl9tYXAsIGlubyk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgaW5vLCArMSwgMSk7CisKKwkvKgorCSAqIE5vdyBsZXQncyBjcmVhdGUgdGhlIGFjdHVhbCBkYXRhIGJsb2NrIGZvciB0aGUgaW5vZGUKKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgaW5vLCBFWFQyX1JPT1RfSU5PLCAmYmxvY2spOworCWlmIChyZXR2YWwpIHsKKwkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNfRVJSX0xQRl9ORVdfRElSX0JMT0NLLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibGssIGJsb2NrLCAwKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VSUl9MUEZfV1JJVEVfQkxPQ0ssICZwY3R4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgdGhlIGlub2RlIHN0cnVjdHVyZQorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IDA0MDcwMDsKKwlpbm9kZS5pX3NpemUgPSBmcy0+YmxvY2tzaXplOworCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9IGN0eC0+bm93OworCWlub2RlLmlfbGlua3NfY291bnQgPSAyOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCAxKTsKKwlpbm9kZS5pX2Jsb2NrWzBdID0gYmxrOworCisJLyoKKwkgKiBOZXh0LCB3cml0ZSBvdXQgdGhlIGlub2RlLgorCSAqLworCXBjdHguZXJyY29kZSA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHguc3RyID0gImV4dDJmc193cml0ZV9pbm9kZSI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfTFBGX0VSUk9SLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKwkvKgorCSAqIEZpbmFsbHksIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGxpbmsKKwkgKi8KKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfbGluayhmcywgRVhUMl9ST09UX0lOTywgbmFtZSwgaW5vLCBFWFQyX0ZUX0RJUik7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4LnN0ciA9ICJleHQyZnNfbGluayI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DUkVBVEVfTFBGX0VSUk9SLCAmcGN0eCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTWlzY2VsbGFuZW91cyBib29ra2VlcGluZyB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgc3RyYWlnaHQuCisJICovCisJZTJmc2NrX2FkZF9kaXJfaW5mbyhjdHgsIGlubywgRVhUMl9ST09UX0lOTyk7CisJZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChjdHgsIEVYVDJfUk9PVF9JTk8sIDEpOworCWV4dDJmc19pY291bnRfc3RvcmUoY3R4LT5pbm9kZV9jb3VudCwgaW5vLCAyKTsKKwlleHQyZnNfaWNvdW50X3N0b3JlKGN0eC0+aW5vZGVfbGlua19pbmZvLCBpbm8sIDIpOworCWN0eC0+bG9zdF9hbmRfZm91bmQgPSBpbm87CisJcXVvdGFfZGF0YV9hZGQoY3R4LT5xY3R4LCAmaW5vZGUsIGlubywgZnMtPmJsb2Nrc2l6ZSk7CisJcXVvdGFfZGF0YV9pbm9kZXMoY3R4LT5xY3R4LCAmaW5vZGUsIGlubywgKzEpOworI2lmIDAKKwlwcmludGYoIi9sb3N0K2ZvdW5kIGNyZWF0ZWQ7IGlub2RlICMlbHVcbiIsIGlubyk7CisjZW5kaWYKKwlyZXR1cm4gaW5vOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgY29ubmVjdCBhIGZpbGUgdG8gbG9zdCtmb3VuZAorICovCitpbnQgZTJmc2NrX3JlY29ubmVjdF9maWxlKGUyZnNja190IGN0eCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJbmFtZVs4MF07CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXN0cnVjdCBleHQyX2lub2RlIAlpbm9kZTsKKwlpbnQJCWZpbGVfdHlwZSA9IDA7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCisJaWYgKCFjdHgtPmJhZF9sb3N0X2FuZF9mb3VuZCAmJiAhY3R4LT5sb3N0X2FuZF9mb3VuZCkgeworCQlpZiAoZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDEpID09IDApCisJCQljdHgtPmJhZF9sb3N0X2FuZF9mb3VuZCsrOworCX0KKwlpZiAoY3R4LT5iYWRfbG9zdF9hbmRfZm91bmQpIHsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX05PX0xQRiwgJnBjdHgpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzcHJpbnRmKG5hbWUsICIjJXUiLCBpbm8pOworCWlmIChleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpID09IDApCisJCWZpbGVfdHlwZSA9IGV4dDJfZmlsZV90eXBlKGlub2RlLmlfbW9kZSk7CisJcmV0dmFsID0gZXh0MmZzX2xpbmsoZnMsIGN0eC0+bG9zdF9hbmRfZm91bmQsIG5hbWUsIGlubywgZmlsZV90eXBlKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisJCWlmICghZml4X3Byb2JsZW0oY3R4LCBQUl8zX0VYUEFORF9MRl9ESVIsICZwY3R4KSkKKwkJCXJldHVybiAxOworCQlyZXR2YWwgPSBlMmZzY2tfZXhwYW5kX2RpcmVjdG9yeShjdHgsIGN0eC0+bG9zdF9hbmRfZm91bmQsCisJCQkJCQkgMSwgMCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19DQU5UX0VYUEFORF9MUEYsICZwY3R4KTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGZzLCBjdHgtPmxvc3RfYW5kX2ZvdW5kLCBuYW1lLAorCQkJCSAgICAgaW5vLCBmaWxlX3R5cGUpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8zX0NBTlRfUkVDT05ORUNULCAmcGN0eCk7CisJCXJldHVybiAxOworCX0KKwllMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGN0eCwgaW5vLCAxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVXRpbGl0eSByb3V0aW5lIHRvIGFkanVzdCB0aGUgaW5vZGUgY291bnRzIG9uIGFuIGlub2RlLgorICovCitlcnJjb2RlX3QgZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBpbnQgYWRqKQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJaW5vZGU7CisKKwlpZiAoIWlubykKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKyNpZiAwCisJcHJpbnRmKCJBZGp1c3RpbmcgbGluayBjb3VudCBmb3IgaW5vZGUgJWx1IGJ5ICVkIChmcm9tICVkKVxuIiwgaW5vLCBhZGosCisJICAgICAgIGlub2RlLmlfbGlua3NfY291bnQpOworI2VuZGlmCisKKwlpZiAoYWRqID09IDEpIHsKKwkJZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQoY3R4LT5pbm9kZV9jb3VudCwgaW5vLCAwKTsKKwkJaWYgKGlub2RlLmlfbGlua3NfY291bnQgPT0gKF9fdTE2KSB+MCkKKwkJCXJldHVybiAwOworCQlleHQyZnNfaWNvdW50X2luY3JlbWVudChjdHgtPmlub2RlX2xpbmtfaW5mbywgaW5vLCAwKTsKKwkJaW5vZGUuaV9saW5rc19jb3VudCsrOworCX0gZWxzZSBpZiAoYWRqID09IC0xKSB7CisJCWV4dDJmc19pY291bnRfZGVjcmVtZW50KGN0eC0+aW5vZGVfY291bnQsIGlubywgMCk7CisJCWlmIChpbm9kZS5pX2xpbmtzX2NvdW50ID09IDApCisJCQlyZXR1cm4gMDsKKwkJZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQoY3R4LT5pbm9kZV9saW5rX2luZm8sIGlubywgMCk7CisJCWlub2RlLmlfbGlua3NfY291bnQtLTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaXggcGFyZW50IC0tLSB0aGlzIHJvdXRpbmUgZml4ZXMgdXAgdGhlIHBhcmVudCBvZiBhIGRpcmVjdG9yeS4KKyAqLworc3RydWN0IGZpeF9kb3Rkb3Rfc3RydWN0IHsKKwlleHQyX2ZpbHN5cwlmczsKKwlleHQyX2lub190CXBhcmVudDsKKwlpbnQJCWRvbmU7CisJZTJmc2NrX3QJY3R4OworfTsKKworc3RhdGljIGludCBmaXhfZG90ZG90X3Byb2Moc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkgICBpbnQJb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgY2hhcgkqYnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgZml4X2RvdGRvdF9zdHJ1Y3QgKmZwID0gKHN0cnVjdCBmaXhfZG90ZG90X3N0cnVjdCAqKSBwcml2X2RhdGE7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwlpZiAoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSAhPSAyKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RybmNtcChkaXJlbnQtPm5hbWUsICIuLiIsIDIpKQorCQlyZXR1cm4gMDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlyZXR2YWwgPSBlMmZzY2tfYWRqdXN0X2lub2RlX2NvdW50KGZwLT5jdHgsIGRpcmVudC0+aW5vZGUsIC0xKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oZnAtPmN0eCwgUFJfM19BREpVU1RfSU5PREUsICZwY3R4KTsKKwl9CisJcmV0dmFsID0gZTJmc2NrX2FkanVzdF9pbm9kZV9jb3VudChmcC0+Y3R4LCBmcC0+cGFyZW50LCAxKTsKKwlpZiAocmV0dmFsKSB7CisJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJZml4X3Byb2JsZW0oZnAtPmN0eCwgUFJfM19BREpVU1RfSU5PREUsICZwY3R4KTsKKwl9CisJZGlyZW50LT5pbm9kZSA9IGZwLT5wYXJlbnQ7CisJaWYgKGZwLT5jdHgtPmZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFKQorCQlkaXJlbnQtPm5hbWVfbGVuID0gKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSB8CisJCQkoRVhUMl9GVF9ESVIgPDwgOCk7CisJZWxzZQorCQlkaXJlbnQtPm5hbWVfbGVuID0gZGlyZW50LT5uYW1lX2xlbiAmIDB4RkY7CisKKwlmcC0+ZG9uZSsrOworCXJldHVybiBESVJFTlRfQUJPUlQgfCBESVJFTlRfQ0hBTkdFRDsKK30KKworc3RhdGljIHZvaWQgZml4X2RvdGRvdChlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaW5vLCBleHQyX2lub190IHBhcmVudCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZml4X2RvdGRvdF9zdHJ1Y3QgZnA7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCisJZnAuZnMgPSBmczsKKwlmcC5wYXJlbnQgPSBwYXJlbnQ7CisJZnAuZG9uZSA9IDA7CisJZnAuY3R4ID0gY3R4OworCisjaWYgMAorCXByaW50ZigiRml4aW5nICcuLicgb2YgaW5vZGUgJWx1IHRvIGJlICVsdS4uLlxuIiwgaW5vLCBwYXJlbnQpOworI2VuZGlmCisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCXJldHZhbCA9IGV4dDJmc19kaXJfaXRlcmF0ZShmcywgaW5vLCBESVJFTlRfRkxBR19JTkNMVURFX0VNUFRZLAorCQkJCSAgICAwLCBmaXhfZG90ZG90X3Byb2MsICZmcCk7CisJaWYgKHJldHZhbCB8fCAhZnAuZG9uZSkgeworCQlwY3R4LmVycmNvZGUgPSByZXR2YWw7CisJCWZpeF9wcm9ibGVtKGN0eCwgcmV0dmFsID8gUFJfM19GSVhfUEFSRU5UX0VSUiA6CisJCQkgICAgUFJfM19GSVhfUEFSRU5UX05PRklORCwgJnBjdHgpOworCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwl9CisJKHZvaWQpIGUyZnNja19kaXJfaW5mb19zZXRfZG90ZG90KGN0eCwgaW5vLCBwYXJlbnQpOworCWlmIChlMmZzY2tfZGlyX2luZm9fc2V0X3BhcmVudChjdHgsIGlubywgY3R4LT5sb3N0X2FuZF9mb3VuZCkpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM19OT19ESVJJTkZPLCAmcGN0eCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIGV4cGFuZGluZyBhIC9sb3N0K2ZvdW5kIGlmIGl0IGlzCisgKiB0b28gc21hbGwuCisgKi8KKworc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0IHsKKwlibGs2NF90CQkJbnVtOworCWUyX2Jsa2NudF90CQlndWFyYW50ZWVkX3NpemU7CisJYmxrNjRfdAkJCW5ld2Jsb2NrczsKKwlibGs2NF90CQkJbGFzdF9ibG9jazsKKwllcnJjb2RlX3QJCWVycjsKKwllMmZzY2tfdAkJY3R4OworfTsKKworc3RhdGljIGludCBleHBhbmRfZGlyX3Byb2MoZXh0Ml9maWxzeXMgZnMsCisJCQkgICBibGs2NF90CSpibG9ja25yLAorCQkJICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICB2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0ICplcyA9IChzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsazY0X3QJbmV3X2JsazsKKwlzdGF0aWMgYmxrNjRfdAlsYXN0X2JsayA9IDA7CisJY2hhcgkJKmJsb2NrOworCWVycmNvZGVfdAlyZXR2YWw7CisJZTJmc2NrX3QJY3R4OworCisJY3R4ID0gZXMtPmN0eDsKKworCWlmIChlcy0+Z3VhcmFudGVlZF9zaXplICYmIGJsb2NrY250ID49IGVzLT5ndWFyYW50ZWVkX3NpemUpCisJCXJldHVybiBCTE9DS19BQk9SVDsKKworCWlmIChibG9ja2NudCA+IDApCisJCWVzLT5sYXN0X2Jsb2NrID0gYmxvY2tjbnQ7CisJaWYgKCpibG9ja25yKSB7CisJCWxhc3RfYmxrID0gKmJsb2NrbnI7CisJCXJldHVybiAwOworCX0KKworCWlmIChibG9ja2NudCAmJgorCSAgICAoRVhUMkZTX0IyQyhmcywgbGFzdF9ibGspID09IEVYVDJGU19CMkMoZnMsIGxhc3RfYmxrICsgMSkpKQorCQluZXdfYmxrID0gbGFzdF9ibGsgKyAxOworCWVsc2UgeworCQlsYXN0X2JsayAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBsYXN0X2JsaywgY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCSAgJm5ld19ibGspOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWVzLT5uZXdibG9ja3MrKzsKKwkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgbmV3X2JsaywgKzEpOworCX0KKwlsYXN0X2JsayA9IG5ld19ibGs7CisKKwlpZiAoYmxvY2tjbnQgPiAwKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCAwLCAwLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWVzLT5udW0tLTsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZnMsIG5ld19ibGssIGJsb2NrLCAwKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCW1lbXNldChibG9jaywgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBibG9jayk7CisJfQorCWlmIChyZXR2YWwpIHsKKwkJZXMtPmVyciA9IHJldHZhbDsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrKTsKKwkqYmxvY2tuciA9IG5ld19ibGs7CisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwgbmV3X2Jsayk7CisKKwlpZiAoZXMtPm51bSA9PSAwKQorCQlyZXR1cm4gKEJMT0NLX0NIQU5HRUQgfCBCTE9DS19BQk9SVCk7CisJZWxzZQorCQlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKK30KKworLyoKKyAqIEVuc3VyZSB0aGF0IGFsbCBibG9ja3MgYXJlIG1hcmtlZCBpbiB0aGUgYmxvY2tfZm91bmRfbWFwLCBzaW5jZSBpdCdzCisgKiBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IGFsbG9jYXRlZCBhbiBleHRlbnQgbm9kZSBibG9jayBvciBhIGJsb2NrIG1hcAorICogYmxvY2sgZHVyaW5nIHRoZSBkaXJlY3RvcnkgcmVidWlsZGluZzsgdGhlc2UgbmV3IGFsbG9jYXRpb25zIGFyZSBub3QKKyAqIGNhcHR1cmVkIGluIGJsb2NrX2ZvdW5kX21hcC4gIFRoaXMgaXMgYmFkIHNpbmNlIHdlIGNvdWxkIGxhdGVyIHVzZQorICogYmxvY2tfZm91bmRfbWFwIHRvIGFsbG9jYXRlIG1vcmUgYmxvY2tzLgorICovCitzdGF0aWMgaW50IGZpbmRfbmV3X2Jsb2Nrc19wcm9jKGV4dDJfZmlsc3lzIGZzLAorCQkJCWJsazY0X3QJKmJsb2NrbnIsCisJCQkJZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkJYmxrNjRfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCWludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQl2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0ICplcyA9IChzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWUyZnNja190CWN0eCA9IGVzLT5jdHg7CisKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGN0eC0+YmxvY2tfZm91bmRfbWFwLCAqYmxvY2tucik7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBlMmZzY2tfZXhwYW5kX2RpcmVjdG9yeShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgZGlyLAorCQkJCSAgaW50IG51bSwgaW50IGd1YXJhbnRlZWRfc2l6ZSkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgZXM7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJYmxrNjRfdAkJc3osIGJlZm9yZSwgYWZ0ZXI7CisKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwkvKgorCSAqIFJlYWQgdGhlIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIGluOyB3ZSdsbCBiZSBtZXNzaW5nIHdpdGgKKwkgKiB0aGVtLgorCSAqLworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19kaXJlY3RvcnkoZnMsIGRpcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVzLm51bSA9IG51bTsKKwllcy5ndWFyYW50ZWVkX3NpemUgPSBndWFyYW50ZWVkX3NpemU7CisJZXMubGFzdF9ibG9jayA9IDA7CisJZXMuZXJyID0gMDsKKwllcy5uZXdibG9ja3MgPSAwOworCWVzLmN0eCA9IGN0eDsKKworCWJlZm9yZSA9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgZGlyLCBCTE9DS19GTEFHX0FQUEVORCwKKwkJCQkgICAgICAgMCwgZXhwYW5kX2Rpcl9wcm9jLCAmZXMpOworCisJaWYgKGVzLmVycikKKwkJcmV0dXJuIGVzLmVycjsKKwlhZnRlciA9IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCisJLyoKKwkgKiBJZiB0aGUgZnJlZSBibG9jayBjb3VudCBoYXMgZHJvcHBlZCBieSBtb3JlIHRoYW4gdGhlIGJsb2NrcyB3ZQorCSAqIGFsbG9jYXRlZCBvdXJzZWx2ZXMsIHRoZW4gd2UgbXVzdCd2ZSBhbGxvY2F0ZWQgc29tZSBleHRlbnQvbWFwCisJICogYmxvY2tzLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IGl0ZXJhdGUgdGhpcyBkaXIncyBibG9ja3MgYWdhaW4gdG8KKwkgKiBlbnN1cmUgdGhhdCBhbGwgbmV3bHkgYWxsb2NhdGVkIGJsb2NrcyBhcmUgY2FwdHVyZWQgaW4KKwkgKiBibG9ja19mb3VuZF9tYXAuCisJICovCisJaWYgKChiZWZvcmUgLSBhZnRlcikgPiBlcy5uZXdibG9ja3MpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBkaXIsIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorCQkJCQkgICAgICAgMCwgZmluZF9uZXdfYmxvY2tzX3Byb2MsICZlcyk7CisJCWlmIChlcy5lcnIpCisJCQlyZXR1cm4gZXMuZXJyOworCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBzaXplIGFuZCBibG9jayBjb3VudCBmaWVsZHMgaW4gdGhlIGlub2RlLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBkaXIsICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXN6ID0gKGVzLmxhc3RfYmxvY2sgKyAxKSAqIGZzLT5ibG9ja3NpemU7CisJaW5vZGUuaV9zaXplID0gc3o7CisJaW5vZGUuaV9zaXplX2hpZ2ggPSBzeiA+PiAzMjsKKwlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGZzLCAmaW5vZGUsIGVzLm5ld2Jsb2Nrcyk7CisJcXVvdGFfZGF0YV9hZGQoY3R4LT5xY3R4LCAmaW5vZGUsIGRpciwgZXMubmV3YmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBkaXIsICZpbm9kZSwgImV4cGFuZF9kaXJlY3RvcnkiKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3M0LmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3M0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3YjY2MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcGFzczQuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIHBhc3M0LmMgLS0gcGFzcyAjNCBvZiBlMmZzY2s6IENoZWNrIHJlZmVyZW5jZSBjb3VudHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqIFBhc3MgNCBmcmVlcyB0aGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlczoKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBhcmUgaW4gYmFkIGJsb2Nrcy4JKGlub2RlX2JiX21hcCkKKyAqIAktIEEgYml0bWFwIG9mIHdoaWNoIGlub2RlcyBhcmUgaW1hZ2ljIGlub2Rlcy4JKGlub2RlX2ltYWdpY19tYXApCisgKi8KKworI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorCisvKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGFuIGlub2RlIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlCisgKiBkaXJlY3RvcnkgdHJlZS4KKyAqCisgKiBUaGlzIHN1YnJvdXRpbmUgcmV0dXJucyAxIHRoZW4gdGhlIGNhbGxlciBzaG91bGRuJ3QgYm90aGVyIHdpdGggdGhlCisgKiByZXN0IG9mIHRoZSBwYXNzIDQgdGVzdHMuCisgKi8KK3N0YXRpYyBpbnQgZGlzY29ubmVjdF9pbm9kZShlMmZzY2tfdCBjdHgsIGV4dDJfaW5vX3QgaSwKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlfX3UzMiBlYW1hZ2ljID0gMDsKKwlpbnQgZXh0cmFfc2l6ZSA9IDA7CisKKwlpZiAoRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikgPiBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKKwkJZTJmc2NrX3JlYWRfaW5vZGVfZnVsbChjdHgsIGksIGlub2RlLEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpLAorCQkJCSAgICAgICAicGFzczQ6IGRpc2Nvbm5lY3RfaW5vZGUiKTsKKwkJZXh0cmFfc2l6ZSA9ICgoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKilpbm9kZSktPmlfZXh0cmFfaXNpemU7CisJfSBlbHNlIHsKKwkJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpLCBpbm9kZSwgInBhc3M0OiBkaXNjb25uZWN0X2lub2RlIik7CisJfQorCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJcGN0eC5pbm8gPSBpOworCXBjdHguaW5vZGUgPSBpbm9kZTsKKworCWlmIChFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSAtRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIC1leHRyYV9zaXplID4wKQorCQllYW1hZ2ljID0gKihfX3UzMiAqKSgoKGNoYXIgKilpbm9kZSkgK0VYVDJfR09PRF9PTERfSU5PREVfU0laRSArCisJCQkJICAgICBleHRyYV9zaXplKTsKKwkvKgorCSAqIE9mZmVyIHRvIGRlbGV0ZSBhbnkgemVyby1sZW5ndGggZmlsZXMgdGhhdCBkb2VzIG5vdCBoYXZlCisJICogYmxvY2tzLiAgSWYgdGhlcmUgaXMgYW4gRUEgYmxvY2ssIGl0IG1pZ2h0IGhhdmUgdXNlZnVsCisJICogaW5mb3JtYXRpb24sIHNvIHdlIHdvbid0IHByb21wdCB0byBkZWxldGUgaXQsIGJ1dCBsZXQgaXQgYmUKKwkgKiByZWNvbm5lY3RlZCB0byBsb3N0K2ZvdW5kLgorCSAqLworCWlmICghaW5vZGUtPmlfYmxvY2tzICYmIGVhbWFnaWMgIT0gRVhUMl9FWFRfQVRUUl9NQUdJQyAmJgorCSAgICAoTElOVVhfU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpKSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl80X1pFUk9fTEVOX0lOT0RFLCAmcGN0eCkpIHsKKwkJCWUyZnNja19jbGVhcl9pbm9kZShjdHgsIGksIGlub2RlLCAwLAorCQkJCQkgICAiZGlzY29ubmVjdF9pbm9kZSIpOworCQkJLyoKKwkJCSAqIEZpeCB1cCB0aGUgYml0bWFwcy4uLgorCQkJICovCisJCQllMmZzY2tfcmVhZF9iaXRtYXBzKGN0eCk7CisJCQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGZzLCBpLCAtMSwKKwkJCQkJCSAgTElOVVhfU19JU0RJUihpbm9kZS0+aV9tb2RlKSk7CisJCQlxdW90YV9kYXRhX2lub2RlcyhjdHgtPnFjdHgsIGlub2RlLCBpLCAtMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogUHJvbXB0IHRvIHJlY29ubmVjdC4KKwkgKi8KKwlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl80X1VOQVRUQUNIRURfSU5PREUsICZwY3R4KSkgeworCQlpZiAoZTJmc2NrX3JlY29ubmVjdF9maWxlKGN0eCwgaSkpCisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB3ZSBkb24ndCBhdHRhY2ggdGhlIGlub2RlLCB0aGVuIHNraXAgdGhlCisJCSAqIGlfbGlua3NfdGVzdCBzaW5jZSB0aGVyZSdzIG5vIHBvaW50IGluIHRyeWluZyB0bworCQkgKiBmb3JjZSBpX2xpbmtzX2NvdW50IHRvIHplcm8uCisJCSAqLworCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisKK3ZvaWQgZTJmc2NrX3Bhc3M0KGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJZXh0Ml9pbm9fdAlpOworCXN0cnVjdCBleHQyX2lub2RlCSppbm9kZTsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJX191MTYJbGlua19jb3VudCwgbGlua19jb3VudGVkOworCWNoYXIJKmJ1ZiA9IDA7CisJZGdycF90CWdyb3VwLCBtYXhncm91cDsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworCisjaWZkZWYgTVRSQUNFCisJbXRyYWNlX3ByaW50KCJQYXNzIDQiKTsKKyNlbmRpZgorCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pKQorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzRfUEFTU19IRUFERVIsICZwY3R4KTsKKworCWdyb3VwID0gMDsKKwltYXhncm91cCA9IGZzLT5ncm91cF9kZXNjX2NvdW50OworCWlmIChjdHgtPnByb2dyZXNzKQorCQlpZiAoKGN0eC0+cHJvZ3Jlc3MpKGN0eCwgNCwgMCwgbWF4Z3JvdXApKQorCQkJcmV0dXJuOworCisJaW5vZGUgPSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlciksCisJCQkJICAgICAgICJzY3JhdGNoIGlub2RlIik7CisKKwkvKiBQcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBzX2lub2Rlc19jb3VudCBtYXhlZCAqLworCWZvciAoaT0xOyBpIDw9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgJiYgaSA+IDA7IGkrKykgeworCQlpbnQgaXNkaXI7CisKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJCWdvdG8gZXJyb3V0OworCQlpZiAoKGkgJSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCkgPT0gMCkgeworCQkJZ3JvdXArKzsKKwkJCWlmIChjdHgtPnByb2dyZXNzKQorCQkJCWlmICgoY3R4LT5wcm9ncmVzcykoY3R4LCA0LCBncm91cCwgbWF4Z3JvdXApKQorCQkJCQlnb3RvIGVycm91dDsKKwkJfQorCQlpZiAoaSA9PSBFWFQyX0JBRF9JTk8gfHwKKwkJICAgIChpID4gRVhUMl9ST09UX0lOTyAmJiBpIDwgRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfdXNlZF9tYXAsIGkpKSB8fAorCQkgICAgKGN0eC0+aW5vZGVfaW1hZ2ljX21hcCAmJgorCQkgICAgIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9pbWFnaWNfbWFwLCBpKSkgfHwKKwkJICAgIChjdHgtPmlub2RlX2JiX21hcCAmJgorCQkgICAgIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9iYl9tYXAsIGkpKSkKKwkJCWNvbnRpbnVlOworCQlleHQyZnNfaWNvdW50X2ZldGNoKGN0eC0+aW5vZGVfbGlua19pbmZvLCBpLCAmbGlua19jb3VudCk7CisJCWV4dDJmc19pY291bnRfZmV0Y2goY3R4LT5pbm9kZV9jb3VudCwgaSwgJmxpbmtfY291bnRlZCk7CisJCWlmIChsaW5rX2NvdW50ZWQgPT0gMCkgeworCQkJaWYgKCFidWYpCisJCQkJYnVmID0gZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCQkJICAgICBmcy0+YmxvY2tzaXplLCAiYmFkX2lub2RlIGJ1ZmZlciIpOworCQkJaWYgKGUyZnNja19wcm9jZXNzX2JhZF9pbm9kZShjdHgsIDAsIGksIGJ1ZikpCisJCQkJY29udGludWU7CisJCQlpZiAoZGlzY29ubmVjdF9pbm9kZShjdHgsIGksIGlub2RlKSkKKwkJCQljb250aW51ZTsKKwkJCWV4dDJmc19pY291bnRfZmV0Y2goY3R4LT5pbm9kZV9saW5rX2luZm8sIGksCisJCQkJCSAgICAmbGlua19jb3VudCk7CisJCQlleHQyZnNfaWNvdW50X2ZldGNoKGN0eC0+aW5vZGVfY291bnQsIGksCisJCQkJCSAgICAmbGlua19jb3VudGVkKTsKKwkJfQorCQlpc2RpciA9IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV9kaXJfbWFwLCBpKTsKKwkJaWYgKGlzZGlyICYmIChsaW5rX2NvdW50ZWQgPiBFWFQyX0xJTktfTUFYKSkKKwkJCWxpbmtfY291bnRlZCA9IDE7CisJCWlmIChsaW5rX2NvdW50ZWQgIT0gbGlua19jb3VudCkgeworCQkJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpLCBpbm9kZSwgInBhc3M0Iik7CisJCQlwY3R4LmlubyA9IGk7CisJCQlwY3R4Lmlub2RlID0gaW5vZGU7CisJCQlpZiAoKGxpbmtfY291bnQgIT0gaW5vZGUtPmlfbGlua3NfY291bnQpICYmICFpc2RpciAmJgorCQkJICAgIChpbm9kZS0+aV9saW5rc19jb3VudCA8PSBFWFQyX0xJTktfTUFYKSkgeworCQkJCXBjdHgubnVtID0gbGlua19jb3VudDsKKwkJCQlmaXhfcHJvYmxlbShjdHgsCisJCQkJCSAgICBQUl80X0lOQ09OU0lTVEVOVF9DT1VOVCwgJnBjdHgpOworCQkJfQorCQkJcGN0eC5udW0gPSBsaW5rX2NvdW50ZWQ7CisJCQkvKiBpX2xpbmtfY291bnQgd2FzIHByZXZpb3VzbHkgZXhjZWVkZWQsIGJ1dCBubyBsb25nZXIKKwkJCSAqIGlzLCBmaXggdGhpcyBidXQgZG9uJ3QgY29uc2lkZXIgaXQgYW4gZXJyb3IgKi8KKwkJCWlmICgoaXNkaXIgJiYgbGlua19jb3VudGVkID4gMSAmJgorCQkJICAgICAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQyX0lOREVYX0ZMKSAmJgorCQkJICAgICBsaW5rX2NvdW50ID09IDEgJiYgIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSkgfHwKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzRfQkFEX1JFRl9DT1VOVCwgJnBjdHgpKSB7CisJCQkJaW5vZGUtPmlfbGlua3NfY291bnQgPSBsaW5rX2NvdW50ZWQ7CisJCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgaSwgaW5vZGUsICJwYXNzNCIpOworCQkJfQorCQl9CisJfQorCWV4dDJmc19mcmVlX2ljb3VudChjdHgtPmlub2RlX2xpbmtfaW5mbyk7IGN0eC0+aW5vZGVfbGlua19pbmZvID0gMDsKKwlleHQyZnNfZnJlZV9pY291bnQoY3R4LT5pbm9kZV9jb3VudCk7IGN0eC0+aW5vZGVfY291bnQgPSAwOworCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2JiX21hcCk7CisJY3R4LT5pbm9kZV9iYl9tYXAgPSAwOworCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChjdHgtPmlub2RlX2ltYWdpY19tYXApOworCWN0eC0+aW5vZGVfaW1hZ2ljX21hcCA9IDA7CitlcnJvdXQ6CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZSk7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCBfKCJQYXNzIDQiKSwgJnJ0cmFjaywgY3R4LT5mcy0+aW8pOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3M1LmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Bhc3M1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZmZiZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcGFzczUuYwpAQCAtMCwwICsxLDg5OCBAQAorLyoKKyAqIHBhc3M1LmMgLS0tIGNoZWNrIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGFnYWluc3Qgb24tZGlzayBiaXRtYXBzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorCisjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCisKK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2NrX2JpdG1hcHMoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIGNoZWNrX2lub2RlX2JpdG1hcHMoZTJmc2NrX3QgY3R4KTsKK3N0YXRpYyB2b2lkIGNoZWNrX2lub2RlX2VuZChlMmZzY2tfdCBjdHgpOworc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tfZW5kKGUyZnNja190IGN0eCk7CisKK3ZvaWQgZTJmc2NrX3Bhc3M1KGUyZnNja190IGN0eCkKK3sKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisKKyNpZmRlZiBNVFJBQ0UKKwltdHJhY2VfcHJpbnQoIlBhc3MgNSIpOworI2VuZGlmCisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9QQVNTX0hFQURFUiwgJnBjdHgpOworCisJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCWlmICgoY3R4LT5wcm9ncmVzcykoY3R4LCA1LCAwLCBjdHgtPmZzLT5ncm91cF9kZXNjX2NvdW50KjIpKQorCQkJcmV0dXJuOworCisJZTJmc2NrX3JlYWRfYml0bWFwcyhjdHgpOworCisJY2hlY2tfYmxvY2tfYml0bWFwcyhjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCXJldHVybjsKKwljaGVja19pbm9kZV9iaXRtYXBzKGN0eCk7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19TSUdOQUxfTUFTSykKKwkJcmV0dXJuOworCWNoZWNrX2lub2RlX2VuZChjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCXJldHVybjsKKwljaGVja19ibG9ja19lbmQoY3R4KTsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQlyZXR1cm47CisKKwlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoY3R4LT5pbm9kZV91c2VkX21hcCk7CisJY3R4LT5pbm9kZV91c2VkX21hcCA9IDA7CisJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGN0eC0+aW5vZGVfZGlyX21hcCk7CisJY3R4LT5pbm9kZV9kaXJfbWFwID0gMDsKKwlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoY3R4LT5ibG9ja19mb3VuZF9tYXApOworCWN0eC0+YmxvY2tfZm91bmRfbWFwID0gMDsKKworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgXygiUGFzcyA1IiksICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KKworc3RhdGljIHZvaWQgZTJmc2NrX2Rpc2NhcmRfYmxvY2tzKGUyZnNja190IGN0eCwgYmxrNjRfdCBzdGFydCwKKwkJCQkgIGJsazY0X3QgY291bnQpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCisJLyoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBoYXMgY2hhbmdlZCBpdCBtZWFucyB0aGF0IHRoZXJlIHdhcyBhbiBjb3JydXB0aW9uCisJICogd2hpY2ggc2hvdWxkIGJlIHJlcGFpcmVkLCBidXQgaW4gc29tZSBjYXNlcyBqdXN0IG9uZSBlMmZzY2sgcnVuIGlzCisJICogbm90IGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGhlbmNlIGl0IGlzIG5vdCBzYWZlIHRvIHJ1biBkaXNjYXJkCisJICogaW4gdGhpcyBjYXNlLgorCSAqLworCWlmIChleHQyZnNfdGVzdF9jaGFuZ2VkKGZzKSkKKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7CisKKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRElTQ0FSRCkgJiYKKwkgICAgKGlvX2NoYW5uZWxfZGlzY2FyZChmcy0+aW8sIHN0YXJ0LCBjb3VudCkpKQorCQljdHgtPm9wdGlvbnMgJj0gfkUyRl9PUFRfRElTQ0FSRDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCB0cnkgdG8gZGlzY2FyZCBudW1iZXIgJ2NvdW50JyBpbm9kZXMgc3RhcnRpbmcgYXQKKyAqIGlub2RlIG51bWJlciAnc3RhcnQnIHdpdGhpbiB0aGUgJ2dyb3VwJy4gTm90ZSB0aGF0ICdzdGFydCcKKyAqIGlzIDEtYmFzZWQsIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBhZGp1c3QgaXQgYnkgLTEgaW4gdGhpcworICogZnVuY3Rpb24gdG8gY29tcHV0ZSByaWdodCBvZmZzZXQgaW4gdGhlIHBhcnRpY3VsYXIgaW5vZGUgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkIGUyZnNja19kaXNjYXJkX2lub2RlcyhlMmZzY2tfdCBjdHgsIGRncnBfdCBncm91cCwKKwkJCQkgIGV4dDJfaW5vX3Qgc3RhcnQsIGludCBjb3VudCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJYmxrNjRfdCBibGssIG51bTsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIGZvciAnc3RhcnQnCisJICovCisJaWYgKChzdGFydCA8IDEpIHx8IChzdGFydCA+IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSkgeworCQlwcmludGYoIlBST0dSQU1NSU5HIEVSUk9SOiBHb3Qgc3RhcnQgJWQgb3V0c2lkZSBvZiBncm91cCAlZCEiCisJCSAgICAgICAiIERpc2FibGluZyBkaXNjYXJkXG4iLAorCQkJc3RhcnQsIGdyb3VwKTsKKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7CisJfQorCisJLyoKKwkgKiBEbyBub3QgYXR0ZW1wdCB0byBkaXNjYXJkIGlmIEUyRl9PUFRfRElTQ0FSRCBpcyBub3Qgc2V0LiBBbmQgYWxzbworCSAqIHNraXAgdGhlIGRpc2NhcmQgb24gdGhpcyBncm91cCBpZiBkaXNjYXJkIGRvZXMgbm90IHplcm8gZGF0YS4KKwkgKiBUaGUgcmVhc29uIGlzIHRoYXQgaWYgdGhlIGlub2RlIHRhYmxlIGlzIG5vdCB6ZXJvZWQgZGlzY2FyZCB3b3VsZAorCSAqIG5vIGhlbHAgdXMgc2luY2Ugd2UgbmVlZCB0byB6ZXJvIGl0IGFueXdheSwgb3IgaWYgdGhlIGlub2RlIHRhYmxlCisJICogaXMgemVyb2VkIHRoZW4gdGhlIHJlYWQgYWZ0ZXIgZGlzY2FyZCB3b3VsZCBub3QgYmUgZGV0ZXJtaW5pc3RpYworCSAqIGFueXdheSBhbmQgd2Ugd291bGQgbm90IGJlIGFibGUgdG8gYXNzdW1lIHRoYXQgdGhpcyBpbm9kZSB0YWJsZQorCSAqIHdhcyB6ZXJvZWQgYW55bW9yZSBzbyB3ZSB3b3VsZCBoYXZlIHRvIHplcm8gaXQgYWdhaW4sIHdoaWNoIGRvZXMKKwkgKiBub3QgcmVhbGx5IG1ha2Ugc2Vuc2UuCisJICovCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ESVNDQVJEKSB8fAorCSAgICAhaW9fY2hhbm5lbF9kaXNjYXJkX3plcm9lc19kYXRhKGZzLT5pbykpCisJCXJldHVybjsKKworCS8qCisJICogU3RhcnQgaXMgaW5vZGUgbnVtYmVyIHdpdGhpbiB0aGUgZ3JvdXAgd2hpY2ggc3RhcnRzCisJICogY291bnRpbmcgZnJvbSAxLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCBpdC4KKwkgKi8KKwlzdGFydCAtPSAxOworCisJLyoKKwkgKiBXZSBjYW4gZGlzY2FyZCBvbmx5IGJsb2NrcyBjb250YWluaW5nIG9ubHkgdW51c2VkCisJICogaW5vZGVzIGluIHRoZSB0YWJsZS4KKwkgKi8KKwlibGsgPSBESVZfUk9VTkRfVVAoc3RhcnQsCisJCUVYVDJfSU5PREVTX1BFUl9CTE9DSyhmcy0+c3VwZXIpKTsKKwljb3VudCAtPSAoYmxrICogRVhUMl9JTk9ERVNfUEVSX0JMT0NLKGZzLT5zdXBlcikgLSBzdGFydCk7CisJYmxrICs9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwKTsKKwludW0gPSBjb3VudCAvIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCisJaWYgKG51bSA+IDApCisJCWUyZnNja19kaXNjYXJkX2Jsb2NrcyhjdHgsIGJsaywgbnVtKTsKK30KKworI2RlZmluZSBOT19CTEsgKChibGs2NF90KSAtMSkKKworc3RhdGljIHZvaWQgcHJpbnRfYml0bWFwX3Byb2JsZW0oZTJmc2NrX3QgY3R4LCBwcm9ibGVtX3QgcHJvYmxlbSwKKwkJCSAgICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCXN3aXRjaCAocHJvYmxlbSkgeworCWNhc2UgUFJfNV9CTE9DS19VTlVTRUQ6CisJCWlmIChwY3R4LT5ibGsgPT0gcGN0eC0+YmxrMikKKwkJCXBjdHgtPmJsazIgPSAwOworCQllbHNlCisJCQlwcm9ibGVtID0gUFJfNV9CTE9DS19SQU5HRV9VTlVTRUQ7CisJCWJyZWFrOworCWNhc2UgUFJfNV9CTE9DS19VU0VEOgorCQlpZiAocGN0eC0+YmxrID09IHBjdHgtPmJsazIpCisJCQlwY3R4LT5ibGsyID0gMDsKKwkJZWxzZQorCQkJcHJvYmxlbSA9IFBSXzVfQkxPQ0tfUkFOR0VfVVNFRDsKKwkJYnJlYWs7CisJY2FzZSBQUl81X0lOT0RFX1VOVVNFRDoKKwkJaWYgKHBjdHgtPmlubyA9PSBwY3R4LT5pbm8yKQorCQkJcGN0eC0+aW5vMiA9IDA7CisJCWVsc2UKKwkJCXByb2JsZW0gPSBQUl81X0lOT0RFX1JBTkdFX1VOVVNFRDsKKwkJYnJlYWs7CisJY2FzZSBQUl81X0lOT0RFX1VTRUQ6CisJCWlmIChwY3R4LT5pbm8gPT0gcGN0eC0+aW5vMikKKwkJCXBjdHgtPmlubzIgPSAwOworCQllbHNlCisJCQlwcm9ibGVtID0gUFJfNV9JTk9ERV9SQU5HRV9VU0VEOworCQlicmVhazsKKwl9CisJZml4X3Byb2JsZW0oY3R4LCBwcm9ibGVtLCBwY3R4KTsKKwlwY3R4LT5ibGsgPSBwY3R4LT5ibGsyID0gTk9fQkxLOworCXBjdHgtPmlubyA9IHBjdHgtPmlubzIgPSAwOworfQorCisvKiBKdXN0IHRvIGJlIG1vcmUgc3VjY2ludCAqLworI2RlZmluZSBCMkMoeCkJRVhUMkZTX0IyQyhmcywgKHgpKQorI2RlZmluZSBFUV9DTFNUUih4LCB5KSAoQjJDKHgpID09IEIyQyh5KSkKKyNkZWZpbmUgTEVfQ0xTVFIoeCwgeSkgKEIyQyh4KSA8PSBCMkMoeSkpCisjZGVmaW5lIEdFX0NMU1RSKHgsIHkpIChCMkMoeCkgPj0gQjJDKHkpKQorCitzdGF0aWMgdm9pZCBjaGVja19ibG9ja19iaXRtYXBzKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJYmxrNjRfdAlpOworCXVuc2lnbmVkIGludAkqZnJlZV9hcnJheTsKKwlkZ3JwX3QJCWcsIGdyb3VwID0gMDsKKwl1bnNpZ25lZCBpbnQJYmxvY2tzID0gMDsKKwlibGs2NF90CWZyZWVfYmxvY2tzID0gMDsKKwlibGs2NF90IGZpcnN0X2ZyZWUgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJdW5zaWduZWQgaW50CWdyb3VwX2ZyZWUgPSAwOworCWludAlhY3R1YWwsIGJpdG1hcDsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJcHJvYmxlbV90CXByb2JsZW0sIHNhdmVfcHJvYmxlbTsKKwlpbnQJCWZpeGl0LCBoYWRfcHJvYmxlbTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJY3N1bV9mbGFnOworCWludAkJc2tpcF9ncm91cCA9IDA7CisJaW50CW9sZF9kZXNjX2Jsb2NrcyA9IDA7CisJaW50CWNvdW50ID0gMDsKKwlpbnQJY21wX2Jsb2NrID0gMDsKKwlpbnQJcmVkb19mbGFnID0gMDsKKwlibGs2NF90CXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisJY2hhciAqYWN0dWFsX2J1ZiwgKmJpdG1hcF9idWY7CisKKwlhY3R1YWxfYnVmID0gKGNoYXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIGZzLT5ibG9ja3NpemUsCisJCQkJCQkgICAgICJhY3R1YWwgYml0bWFwIGJ1ZmZlciIpOworCWJpdG1hcF9idWYgPSAoY2hhciAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJCSAgICAgImJpdG1hcCBibG9jayBidWZmZXIiKTsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJZnJlZV9hcnJheSA9ICh1bnNpZ25lZCBpbnQgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJICAgIGZzLT5ncm91cF9kZXNjX2NvdW50ICogc2l6ZW9mKHVuc2lnbmVkIGludCksICJmcmVlIGJsb2NrIGNvdW50IGFycmF5Iik7CisKKwlpZiAoKEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgPAorCSAgICAgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQyKGN0eC0+YmxvY2tfZm91bmRfbWFwKSkgfHwKKwkgICAgKEIyQyhleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMSkgPgorCSAgICAgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kMihjdHgtPmJsb2NrX2ZvdW5kX21hcCkpKSB7CisJCXBjdHgubnVtID0gMTsKKwkJcGN0eC5ibGsgPSBCMkMoZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCQlwY3R4LmJsazIgPSBCMkMoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gMSk7CisJCXBjdHguaW5vID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQyKGN0eC0+YmxvY2tfZm91bmRfbWFwKTsKKwkJcGN0eC5pbm8yID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kMihjdHgtPmJsb2NrX2ZvdW5kX21hcCk7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9CTUFQX0VORFBPSU5UUywgJnBjdHgpOworCisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCWdvdG8gZXJyb3V0OworCX0KKworCWlmICgoQjJDKGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSA8CisJICAgICBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZnMtPmJsb2NrX21hcCkpIHx8CisJICAgIChCMkMoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTEpID4KKwkgICAgIGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX2VuZDIoZnMtPmJsb2NrX21hcCkpKSB7CisJCXBjdHgubnVtID0gMjsKKwkJcGN0eC5ibGsgPSBCMkMoZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCQlwY3R4LmJsazIgPSBCMkMoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gMSk7CisJCXBjdHguaW5vID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQyKGZzLT5ibG9ja19tYXApOworCQlwY3R4LmlubzIgPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQyKGZzLT5ibG9ja19tYXApOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfQk1BUF9FTkRQT0lOVFMsICZwY3R4KTsKKworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBmYXRhbCAqLworCQlnb3RvIGVycm91dDsKKwl9CisKKwljc3VtX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKTsKK3JlZG9fY291bnRzOgorCWhhZF9wcm9ibGVtID0gMDsKKwlzYXZlX3Byb2JsZW0gPSAwOworCXBjdHguYmxrID0gcGN0eC5ibGsyID0gTk9fQkxLOworCWlmIChjc3VtX2ZsYWcgJiYKKwkgICAgKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpKSkKKwkJc2tpcF9ncm91cCsrOworCWZvciAoaSA9IEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJICAgICBpIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCSAgICAgaSArPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpIHsKKwkJaW50IGZpcnN0X2Jsb2NrX2luX2JnID0gKEIyQyhpKSAtCisJCQkJCSBCMkMoZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spKSAlCisJCQlmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID09IDA7CisJCWludCBuLCBuYnl0ZXMgPSBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwIC8gODsKKworCQlhY3R1YWwgPSBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoY3R4LT5ibG9ja19mb3VuZF9tYXAsIGkpOworCisJCS8qCisJCSAqIFRyeSB0byBvcHRpbWl6ZSBwYXNzNSBieSBleHRyYWN0aW5nIGEgYml0bWFwIGJsb2NrCisJCSAqIGFzIGV4cGVjdGVkIGZyb20gd2hhdCB3ZSBoYXZlIG9uIGRpc2ssIGFuZCB0aGVuCisJCSAqIGNvbXBhcmluZyB0aGUgdHdvLiAgSWYgdGhleSBhcmUgaWRlbnRpY2FsLCB0aGVuCisJCSAqIHVwZGF0ZSB0aGUgZnJlZSBibG9jayBjb3VudHMgYW5kIGdvIG9uIHRvIHRoZSBuZXh0CisJCSAqIGJsb2NrIGdyb3VwLiAgVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGRvaW5nIHRoZQorCQkgKiBpbmRpdmlkdWFsIGJpdC1ieS1iaXQgY29tcGFyaXNvbi4gIFRoZSBvbmUgZG93bnNpZGUKKwkJICogaXMgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayBpZiB3ZSBhcmUgYXNraW5nIGUyZnNjaworCQkgKiB0byBkbyBhIGRpc2NhcmQgb3BlcmF0aW9uLgorCQkgKi8KKwkJaWYgKCFmaXJzdF9ibG9ja19pbl9iZyB8fAorCQkgICAgKGdyb3VwID09IChpbnQpZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKSB8fAorCQkgICAgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRElTQ0FSRCkpCisJCQlnb3RvIG5vX29wdGltaXplOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQlCMkMoaSksIGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAsCisJCQkJYWN0dWFsX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG5vX29wdGltaXplOworCQlpZiAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCkpCisJCQltZW1zZXQoYml0bWFwX2J1ZiwgMCwgbmJ5dGVzKTsKKwkJZWxzZSB7CisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwKKwkJCQkJQjJDKGkpLCBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwLAorCQkJCQliaXRtYXBfYnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBub19vcHRpbWl6ZTsKKwkJfQorCQlpZiAobWVtY21wKGFjdHVhbF9idWYsIGJpdG1hcF9idWYsIG5ieXRlcykgIT0gMCkKKwkJCWdvdG8gbm9fb3B0aW1pemU7CisJCW4gPSBleHQyZnNfYml0Y291bnQoYWN0dWFsX2J1ZiwgbmJ5dGVzKTsKKwkJZ3JvdXBfZnJlZSA9IGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgLSBuOworCQlmcmVlX2Jsb2NrcyArPSBncm91cF9mcmVlOworCQlpICs9IEVYVDJGU19DMkIoZnMsIGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgLSAxKTsKKwkJZ290byBuZXh0X2dyb3VwOworCW5vX29wdGltaXplOgorCisJCWlmIChza2lwX2dyb3VwKSB7CisJCQlpZiAoZmlyc3RfYmxvY2tfaW5fYmcpIHsKKwkJCQlzdXBlcl9ibGsgPSAwOworCQkJCW9sZF9kZXNjX2JsayA9IDA7CisJCQkJbmV3X2Rlc2NfYmxrID0gMDsKKwkJCQlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncm91cCwgJnN1cGVyX2JsaywKKwkJCQkJICZvbGRfZGVzY19ibGssICZuZXdfZGVzY19ibGssIDApOworCisJCQkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCQkJCUVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQkJCQlvbGRfZGVzY19ibG9ja3MgPQorCQkJCQkJZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CisJCQkJZWxzZQorCQkJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3MgKworCQkJCQlmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKworCQkJCWNvdW50ID0gMDsKKwkJCQljbXBfYmxvY2sgPSBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwOworCQkJCWlmIChncm91cCA9PSAoaW50KWZzLT5ncm91cF9kZXNjX2NvdW50IC0gMSkKKwkJCQkJY21wX2Jsb2NrID0gRVhUMkZTX05VTV9CMkMoZnMsCisJCQkJCQkgICAgZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApKTsKKwkJCX0KKworCQkJYml0bWFwID0gMDsKKwkJCWlmIChFUV9DTFNUUihpLCBzdXBlcl9ibGspIHx8CisJCQkgICAgKG9sZF9kZXNjX2JsayAmJiBvbGRfZGVzY19ibG9ja3MgJiYKKwkJCSAgICAgR0VfQ0xTVFIoaSwgb2xkX2Rlc2NfYmxrKSAmJgorCQkJICAgICBMRV9DTFNUUihpLCBvbGRfZGVzY19ibGsgKyBvbGRfZGVzY19ibG9ja3MtMSkpIHx8CisJCQkgICAgKG5ld19kZXNjX2JsayAmJiBFUV9DTFNUUihpLCBuZXdfZGVzY19ibGspKSB8fAorCQkJICAgIEVRX0NMU1RSKGksIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBncm91cCkpIHx8CisJCQkgICAgRVFfQ0xTVFIoaSwgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSkgfHwKKwkJCSAgICAoR0VfQ0xTVFIoaSwgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXApKSAmJgorCQkJICAgICBMRV9DTFNUUihpLCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXApICsKKwkJCQkJICBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCAtIDEpKSkpIHsKKwkJCQliaXRtYXAgPSAxOworCQkJCWFjdHVhbCA9IChhY3R1YWwgIT0gMCk7CisJCQkJY291bnQrKzsKKwkJCQljbXBfYmxvY2stLTsKKwkJCX0gZWxzZSBpZiAoKEVYVDJGU19CMkMoZnMsIGkpIC0gY291bnQgLQorCQkJCSAgICBFWFQyRlNfQjJDKGZzLCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykpICUKKwkJCQkgICBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID09IDApIHsKKwkJCQkvKgorCQkJCSAqIFdoZW4gdGhlIGNvbXBhcmUgZGF0YSBibG9ja3MgaW4gYmxvY2sgYml0bWFwCisJCQkJICogYXJlIDAsIGNvdW50IHRoZSBmcmVlIGJsb2NrLAorCQkJCSAqIHNraXAgdGhlIGN1cnJlbnQgYmxvY2sgZ3JvdXAuCisJCQkJICovCisJCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoCisJCQkJCSAgICBjdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJICAgIEVYVDJGU19CMkMoZnMsIGkpLAorCQkJCQkgICAgY21wX2Jsb2NrKSkgeworCQkJCQkvKgorCQkJCQkgKiAtMSBtZWFucyB0byBza2lwIHRoZSBjdXJyZW50IGJsb2NrCisJCQkJCSAqIGdyb3VwLgorCQkJCQkgKi8KKwkJCQkJYmxvY2tzID0gZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAtIDE7CisJCQkJCWdyb3VwX2ZyZWUgPSBjbXBfYmxvY2s7CisJCQkJCWZyZWVfYmxvY2tzICs9IGNtcF9ibG9jazsKKwkJCQkJLyoKKwkJCQkJICogVGhlIGN1cnJlbnQgYmxvY2sgZ3JvdXAncyBsYXN0IGJsb2NrCisJCQkJCSAqIGlzIHNldCB0byBpLgorCQkJCQkgKi8KKwkJCQkJaSArPSBFWFQyRlNfQzJCKGZzLCBjbXBfYmxvY2sgLSAxKTsKKwkJCQkJYml0bWFwID0gMTsKKwkJCQkJZ290byBkb19jb3VudHM7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHJlZG9fZmxhZykKKwkJCWJpdG1hcCA9IGFjdHVhbDsKKwkJZWxzZQorCQkJYml0bWFwID0gZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGkpOworCisJCWlmICghYWN0dWFsID09ICFiaXRtYXApCisJCQlnb3RvIGRvX2NvdW50czsKKworCQlpZiAoIWFjdHVhbCAmJiBiaXRtYXApIHsKKwkJCS8qCisJCQkgKiBCbG9jayBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiB1c2UgaW4gdGhlIGJpdG1hcC4KKwkJCSAqLworCQkJcHJvYmxlbSA9IFBSXzVfQkxPQ0tfVU5VU0VEOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJsb2NrIHVzZWQsIGJ1dCBub3QgbWFya2VkIGluIHVzZSBpbiB0aGUgYml0bWFwLgorCQkJICovCisJCQlwcm9ibGVtID0gUFJfNV9CTE9DS19VU0VEOworCisJCQlpZiAoc2tpcF9ncm91cCkgeworCQkJCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDI7CisJCQkJcGN0eDIuYmxrID0gaTsKKwkJCQlwY3R4Mi5ncm91cCA9IGdyb3VwOworCQkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfQkxPQ0tfVU5JTklULCZwY3R4MikpeworCQkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQkJCXNraXBfZ3JvdXAgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAocGN0eC5ibGsgPT0gTk9fQkxLKSB7CisJCQlwY3R4LmJsayA9IHBjdHguYmxrMiA9IGk7CisJCQlzYXZlX3Byb2JsZW0gPSBwcm9ibGVtOworCQl9IGVsc2UgeworCQkJaWYgKChwcm9ibGVtID09IHNhdmVfcHJvYmxlbSkgJiYKKwkJCSAgICAocGN0eC5ibGsyID09IGkgLSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpKQorCQkJCXBjdHguYmxrMiArPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisJCQllbHNlIHsKKwkJCQlwcmludF9iaXRtYXBfcHJvYmxlbShjdHgsIHNhdmVfcHJvYmxlbSwgJnBjdHgpOworCQkJCXBjdHguYmxrID0gcGN0eC5ibGsyID0gaTsKKwkJCQlzYXZlX3Byb2JsZW0gPSBwcm9ibGVtOworCQkJfQorCQl9CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUFJPR19TVVBQUkVTUzsKKwkJaGFkX3Byb2JsZW0rKzsKKworCQkvKgorCQkgKiBJZiB0aGVyZSBhIHByb2JsZW0gd2Ugc2hvdWxkIHR1cm4gb2ZmIHRoZSBkaXNjYXJkIHNvIHdlCisJCSAqIGRvIG5vdCBjb21wcm9taXNlIHRoZSBmaWxlc3lzdGVtLgorCQkgKi8KKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7CisKKwlkb19jb3VudHM6CisJCWlmICghYml0bWFwKSB7CisJCQlncm91cF9mcmVlKys7CisJCQlmcmVlX2Jsb2NrcysrOworCQkJaWYgKGZpcnN0X2ZyZWUgPiBpKQorCQkJCWZpcnN0X2ZyZWUgPSBpOworCQl9IGVsc2UgaWYgKGkgPiBmaXJzdF9mcmVlKSB7CisJCQllMmZzY2tfZGlzY2FyZF9ibG9ja3MoY3R4LCBmaXJzdF9mcmVlLAorCQkJCQkgICAgICAoaSAtIGZpcnN0X2ZyZWUpKTsKKwkJCWZpcnN0X2ZyZWUgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJCX0KKwkJYmxvY2tzICsrOworCQlpZiAoKGJsb2NrcyA9PSBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwKSB8fAorCQkgICAgKEVYVDJGU19CMkMoZnMsIGkpID09CisJCSAgICAgRVhUMkZTX0IyQyhmcywgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTEpKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBsYXN0IGJsb2NrIG9mIHRoaXMgZ3JvdXAgaXMgZnJlZSwgdGhlbiB3ZSBjYW4KKwkJCSAqIGRpc2NhcmQgaXQgYXMgd2VsbC4KKwkJCSAqLworCQkJaWYgKCFiaXRtYXAgJiYgaSA+PSBmaXJzdF9mcmVlKQorCQkJCWUyZnNja19kaXNjYXJkX2Jsb2NrcyhjdHgsIGZpcnN0X2ZyZWUsCisJCQkJCQkgICAgICAoaSAtIGZpcnN0X2ZyZWUpICsgMSk7CisJCW5leHRfZ3JvdXA6CisJCQlmaXJzdF9mcmVlID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCisJCQlmcmVlX2FycmF5W2dyb3VwXSA9IGdyb3VwX2ZyZWU7CisJCQlncm91cCArKzsKKwkJCWJsb2NrcyA9IDA7CisJCQlncm91cF9mcmVlID0gMDsKKwkJCXNraXBfZ3JvdXAgPSAwOworCQkJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCQkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDUsIGdyb3VwLAorCQkJCQkJICAgIGZzLT5ncm91cF9kZXNjX2NvdW50KjIpKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCWlmIChjc3VtX2ZsYWcgJiYKKwkJCSAgICAoaSAhPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMSkgJiYKKwkJCSAgICBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIAorCQkJCQkJRVhUMl9CR19CTE9DS19VTklOSVQpKQorCQkJCXNraXBfZ3JvdXArKzsKKwkJfQorCX0KKwlpZiAocGN0eC5ibGsgIT0gTk9fQkxLKQorCQlwcmludF9iaXRtYXBfcHJvYmxlbShjdHgsIHNhdmVfcHJvYmxlbSwgJnBjdHgpOworCWlmIChoYWRfcHJvYmxlbSkKKwkJZml4aXQgPSBlbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX0JCSVRNQVApOworCWVsc2UKKwkJZml4aXQgPSAtMTsKKwljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19QUk9HX1NVUFBSRVNTOworCisJaWYgKGZpeGl0ID09IDEpIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGZzLT5ibG9ja19tYXApOworCQlyZXR2YWwgPSBleHQyZnNfY29weV9iaXRtYXAoY3R4LT5ibG9ja19mb3VuZF9tYXAsCisJCQkJCQkgICZmcy0+YmxvY2tfbWFwKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9DT1BZX0JCSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlleHQyZnNfc2V0X2JpdG1hcF9wYWRkaW5nKGZzLT5ibG9ja19tYXApOworCQlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7CisKKwkJLyogUmVkbyB0aGUgY291bnRzICovCisJCWJsb2NrcyA9IDA7IGZyZWVfYmxvY2tzID0gMDsgZ3JvdXBfZnJlZSA9IDA7IGdyb3VwID0gMDsKKwkJbWVtc2V0KGZyZWVfYXJyYXksIDAsIGZzLT5ncm91cF9kZXNjX2NvdW50ICogc2l6ZW9mKGludCkpOworCQlyZWRvX2ZsYWcrKzsKKwkJZ290byByZWRvX2NvdW50czsKKwl9IGVsc2UgaWYgKGZpeGl0ID09IDApCisJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCisJZm9yIChnID0gMDsgZyA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBnKyspIHsKKwkJaWYgKGZyZWVfYXJyYXlbZ10gIT0gZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBnKSkgeworCQkJcGN0eC5ncm91cCA9IGc7CisJCQlwY3R4LmJsayA9IGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgZyk7CisJCQlwY3R4LmJsazIgPSBmcmVlX2FycmF5W2ddOworCisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZSRUVfQkxPQ0tfQ09VTlRfR1JPVVAsCisJCQkJCSZwY3R4KSkgeworCQkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGcsIGZyZWVfYXJyYXlbZ10pOworCQkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCX0gZWxzZQorCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQl9CisJfQorCWZyZWVfYmxvY2tzID0gRVhUMkZTX0MyQihmcywgZnJlZV9ibG9ja3MpOworCWlmIChmcmVlX2Jsb2NrcyAhPSBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgeworCQlwY3R4Lmdyb3VwID0gMDsKKwkJcGN0eC5ibGsgPSBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkJcGN0eC5ibGsyID0gZnJlZV9ibG9ja3M7CisKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GUkVFX0JMT0NLX0NPVU5ULCAmcGN0eCkpIHsKKwkJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMtPnN1cGVyLCBmcmVlX2Jsb2Nrcyk7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CitlcnJvdXQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZmcmVlX2FycmF5KTsKKwlleHQyZnNfZnJlZV9tZW0oJmFjdHVhbF9idWYpOworCWV4dDJmc19mcmVlX21lbSgmYml0bWFwX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2lub2RlX2JpdG1hcHMoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlleHQyX2lub190CWk7CisJdW5zaWduZWQgaW50CWZyZWVfaW5vZGVzID0gMDsKKwlpbnQJCWdyb3VwX2ZyZWUgPSAwOworCWludAkJZGlyc19jb3VudCA9IDA7CisJZGdycF90CQlncm91cCA9IDA7CisJdW5zaWduZWQgaW50CWlub2RlcyA9IDA7CisJZXh0Ml9pbm9fdAkqZnJlZV9hcnJheTsKKwlleHQyX2lub190CSpkaXJfYXJyYXk7CisJaW50CQlhY3R1YWwsIGJpdG1hcDsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKwlwcm9ibGVtX3QJcHJvYmxlbSwgc2F2ZV9wcm9ibGVtOworCWludAkJZml4aXQsIGhhZF9wcm9ibGVtOworCWludAkJY3N1bV9mbGFnOworCWludAkJc2tpcF9ncm91cCA9IDA7CisJaW50CQlyZWRvX2ZsYWcgPSAwOworCWV4dDJfaW5vX3QJCWZpcnN0X2ZyZWUgPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCArIDE7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCWZyZWVfYXJyYXkgPSAoZXh0Ml9pbm9fdCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQgKiBzaXplb2YoZXh0Ml9pbm9fdCksICJmcmVlIGlub2RlIGNvdW50IGFycmF5Iik7CisKKwlkaXJfYXJyYXkgPSAoZXh0Ml9pbm9fdCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkgICBmcy0+Z3JvdXBfZGVzY19jb3VudCAqIHNpemVvZihleHQyX2lub190KSwgImRpcmVjdG9yeSBjb3VudCBhcnJheSIpOworCisJaWYgKCgxIDwgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyKGN0eC0+aW5vZGVfdXNlZF9tYXApKSB8fAorCSAgICAoZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCA+CisJICAgICBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyKGN0eC0+aW5vZGVfdXNlZF9tYXApKSkgeworCQlwY3R4Lm51bSA9IDM7CisJCXBjdHguYmxrID0gMTsKKwkJcGN0eC5ibGsyID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsKKwkJcGN0eC5pbm8gPSBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydDIoY3R4LT5pbm9kZV91c2VkX21hcCk7CisJCXBjdHguaW5vMiA9IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZDIoY3R4LT5pbm9kZV91c2VkX21hcCk7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9CTUFQX0VORFBPSU5UUywgJnBjdHgpOworCisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoKDEgPCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydDIoZnMtPmlub2RlX21hcCkpIHx8CisJICAgIChmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50ID4KKwkgICAgIGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZDIoZnMtPmlub2RlX21hcCkpKSB7CisJCXBjdHgubnVtID0gNDsKKwkJcGN0eC5ibGsgPSAxOworCQlwY3R4LmJsazIgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OworCQlwY3R4LmlubyA9IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX3N0YXJ0Mihmcy0+aW5vZGVfbWFwKTsKKwkJcGN0eC5pbm8yID0gZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kMihmcy0+aW5vZGVfbWFwKTsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0JNQVBfRU5EUE9JTlRTLCAmcGN0eCk7CisKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogZmF0YWwgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorCisJY3N1bV9mbGFnID0gRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CityZWRvX2NvdW50czoKKwloYWRfcHJvYmxlbSA9IDA7CisJc2F2ZV9wcm9ibGVtID0gMDsKKwlwY3R4LmlubyA9IHBjdHguaW5vMiA9IDA7CisJaWYgKGNzdW1fZmxhZyAmJgorCSAgICAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkpKQorCQlza2lwX2dyb3VwKys7CisKKwkvKiBQcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBpbm9kZXNfY291bnQgaXMgbWF4ZWQgKi8KKwlmb3IgKGkgPSAxOyBpIDw9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgJiYgaSA+IDA7IGkrKykgeworCQliaXRtYXAgPSAwOworCQlpZiAoc2tpcF9ncm91cCAmJgorCQkgICAgaSAlIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwID09IDEpIHsKKwkJCS8qCisJCQkgKiBDdXJyZW50IGlub2RlIGlzIHRoZSBmaXJzdCBpbm9kZQorCQkJICogaW4gdGhlIGN1cnJlbnQgYmxvY2sgZ3JvdXAuCisJCQkgKi8KKwkJCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXBfcmFuZ2UoCisJCQkJICAgIGN0eC0+aW5vZGVfdXNlZF9tYXAsIGksCisJCQkJICAgIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSkgeworCQkJCS8qCisJCQkJICogV2hlbiB0aGUgY29tcGFyZWQgaW5vZGVzIGluIGlub2RlcyBiaXRtYXAKKwkJCQkgKiBhcmUgMCwgY291bnQgdGhlIGZyZWUgaW5vZGUsCisJCQkJICogc2tpcCB0aGUgY3VycmVudCBibG9jayBncm91cC4KKwkJCQkgKi8KKwkJCQlmaXJzdF9mcmVlID0gMTsKKwkJCQlpbm9kZXMgPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAtIDE7CisJCQkJZ3JvdXBfZnJlZSA9IGlub2RlczsKKwkJCQlmcmVlX2lub2RlcyArPSBpbm9kZXM7CisJCQkJaSArPSBpbm9kZXM7CisJCQkJc2tpcF9ncm91cCA9IDA7CisJCQkJZ290byBkb19jb3VudHM7CisJCQl9CisJCX0KKworCQlhY3R1YWwgPSBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoY3R4LT5pbm9kZV91c2VkX21hcCwgaSk7CisJCWlmIChyZWRvX2ZsYWcpCisJCQliaXRtYXAgPSBhY3R1YWw7CisJCWVsc2UgaWYgKCFza2lwX2dyb3VwKQorCQkJYml0bWFwID0gZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAyKGZzLT5pbm9kZV9tYXAsIGkpOworCQlpZiAoIWFjdHVhbCA9PSAhYml0bWFwKQorCQkJZ290byBkb19jb3VudHM7CisKKwkJaWYgKCFhY3R1YWwgJiYgYml0bWFwKSB7CisJCQkvKgorCQkJICogSW5vZGUgd2Fzbid0IHVzZWQsIGJ1dCBtYXJrZWQgaW4gYml0bWFwCisJCQkgKi8KKwkJCXByb2JsZW0gPSBQUl81X0lOT0RFX1VOVVNFRDsKKwkJfSBlbHNlIC8qIGlmIChhY3R1YWwgJiYgIWJpdG1hcCkgKi8geworCQkJLyoKKwkJCSAqIElub2RlIHVzZWQsIGJ1dCBub3QgaW4gYml0bWFwCisJCQkgKi8KKwkJCXByb2JsZW0gPSBQUl81X0lOT0RFX1VTRUQ7CisKKwkJCS8qIFdlIHNob3VsZCBuZXZlciBoaXQgdGhpcywgYmVjYXVzZSBpdCBtZWFucyB0aGF0CisJCQkgKiBpbm9kZXMgd2VyZSBtYXJrZWQgaW4gdXNlIHRoYXQgd2VyZW4ndCBub3RpY2VkCisJCQkgKiBpbiBwYXNzMSBvciBwYXNzIDIuIEl0IGlzIGVhc2llciB0byBmaXggdGhlIHByb2JsZW0KKwkJCSAqIHRoYW4gdG8ga2lsbCBlMmZzY2sgYW5kIGxlYXZlIHRoZSB1c2VyIHN0dWNrLiAqLworCQkJaWYgKHNraXBfZ3JvdXApIHsKKwkJCQlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0IHBjdHgyOworCQkJCXBjdHgyLmJsayA9IGk7CisJCQkJcGN0eDIuZ3JvdXAgPSBncm91cDsKKwkJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl81X0lOT0RFX1VOSU5JVCwmcGN0eDIpKXsKKwkJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCQkJCQlza2lwX2dyb3VwID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHBjdHguaW5vID09IDApIHsKKwkJCXBjdHguaW5vID0gcGN0eC5pbm8yID0gaTsKKwkJCXNhdmVfcHJvYmxlbSA9IHByb2JsZW07CisJCX0gZWxzZSB7CisJCQlpZiAoKHByb2JsZW0gPT0gc2F2ZV9wcm9ibGVtKSAmJgorCQkJICAgIChwY3R4LmlubzIgPT0gaS0xKSkKKwkJCQlwY3R4LmlubzIrKzsKKwkJCWVsc2UgeworCQkJCXByaW50X2JpdG1hcF9wcm9ibGVtKGN0eCwgc2F2ZV9wcm9ibGVtLCAmcGN0eCk7CisJCQkJcGN0eC5pbm8gPSBwY3R4LmlubzIgPSBpOworCQkJCXNhdmVfcHJvYmxlbSA9IHByb2JsZW07CisJCQl9CisJCX0KKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19QUk9HX1NVUFBSRVNTOworCQloYWRfcHJvYmxlbSsrOworCQkvKgorCQkgKiBJZiB0aGVyZSBhIHByb2JsZW0gd2Ugc2hvdWxkIHR1cm4gb2ZmIHRoZSBkaXNjYXJkIHNvIHdlCisJCSAqIGRvIG5vdCBjb21wcm9taXNlIHRoZSBmaWxlc3lzdGVtLgorCQkgKi8KKwkJY3R4LT5vcHRpb25zICY9IH5FMkZfT1BUX0RJU0NBUkQ7CisKK2RvX2NvdW50czoKKwkJaW5vZGVzKys7CisJCWlmIChiaXRtYXApIHsKKwkJCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN0eC0+aW5vZGVfZGlyX21hcCwgaSkpCisJCQkJZGlyc19jb3VudCsrOworCQkJaWYgKGlub2RlcyA+IGZpcnN0X2ZyZWUpIHsKKwkJCQllMmZzY2tfZGlzY2FyZF9pbm9kZXMoY3R4LCBncm91cCwgZmlyc3RfZnJlZSwKKwkJCQkJCSAgICAgIGlub2RlcyAtIGZpcnN0X2ZyZWUpOworCQkJCWZpcnN0X2ZyZWUgPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCArIDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlncm91cF9mcmVlKys7CisJCQlmcmVlX2lub2RlcysrOworCQkJaWYgKGZpcnN0X2ZyZWUgPiBpbm9kZXMpCisJCQkJZmlyc3RfZnJlZSA9IGlub2RlczsKKwkJfQorCisJCWlmICgoaW5vZGVzID09IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSB8fAorCQkgICAgKGkgPT0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbGFzdCBpbm9kZSBpcyBmcmVlLCB3ZSBjYW4gZGlzY2FyZCBpdCBhcyB3ZWxsLgorCQkJICovCisJCQlpZiAoIWJpdG1hcCAmJiBpbm9kZXMgPj0gZmlyc3RfZnJlZSkKKwkJCQllMmZzY2tfZGlzY2FyZF9pbm9kZXMoY3R4LCBncm91cCwgZmlyc3RfZnJlZSwKKwkJCQkJCSAgICAgIGlub2RlcyAtIGZpcnN0X2ZyZWUgKyAxKTsKKwkJCS8qCisJCQkgKiBJZiBkaXNjYXJkIHplcm9lcyBkYXRhIGFuZCB0aGUgZ3JvdXAgaW5vZGUgdGFibGUKKwkJCSAqIHdhcyBub3QgemVyb2VkIHlldCwgc2V0IGl0YWJsZSBhcyB6ZXJvZWQKKwkJCSAqLworCQkJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0RJU0NBUkQpICYmCisJCQkgICAgaW9fY2hhbm5lbF9kaXNjYXJkX3plcm9lc19kYXRhKGZzLT5pbykgJiYKKwkJCSAgICAhKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwKKwkJCQkJCSAgIEVYVDJfQkdfSU5PREVfWkVST0VEKSkpIHsKKwkJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBncm91cCwKKwkJCQkJCSAgICBFWFQyX0JHX0lOT0RFX1pFUk9FRCk7CisJCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwkJCX0KKworCQkJZmlyc3RfZnJlZSA9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICsgMTsKKwkJCWZyZWVfYXJyYXlbZ3JvdXBdID0gZ3JvdXBfZnJlZTsKKwkJCWRpcl9hcnJheVtncm91cF0gPSBkaXJzX2NvdW50OworCQkJZ3JvdXAgKys7CisJCQlpbm9kZXMgPSAwOworCQkJc2tpcF9ncm91cCA9IDA7CisJCQlncm91cF9mcmVlID0gMDsKKwkJCWRpcnNfY291bnQgPSAwOworCQkJaWYgKGN0eC0+cHJvZ3Jlc3MpCisJCQkJaWYgKChjdHgtPnByb2dyZXNzKShjdHgsIDUsCisJCQkJCSAgICBncm91cCArIGZzLT5ncm91cF9kZXNjX2NvdW50LAorCQkJCQkgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQqMikpCisJCQkJCWdvdG8gZXJyb3V0OworCQkJaWYgKGNzdW1fZmxhZyAmJgorCQkJICAgIChpICE9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpICYmCisJCQkgICAgKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpCisJCQkgICAgICkpCisJCQkJc2tpcF9ncm91cCsrOworCQl9CisJfQorCWlmIChwY3R4LmlubykKKwkJcHJpbnRfYml0bWFwX3Byb2JsZW0oY3R4LCBzYXZlX3Byb2JsZW0sICZwY3R4KTsKKworCWlmIChoYWRfcHJvYmxlbSkKKwkJZml4aXQgPSBlbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX0lCSVRNQVApOworCWVsc2UKKwkJZml4aXQgPSAtMTsKKwljdHgtPmZsYWdzICY9IH5FMkZfRkxBR19QUk9HX1NVUFBSRVNTOworCisJaWYgKGZpeGl0ID09IDEpIHsKKwkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGZzLT5pbm9kZV9tYXApOworCQlyZXR2YWwgPSBleHQyZnNfY29weV9iaXRtYXAoY3R4LT5pbm9kZV91c2VkX21hcCwKKwkJCQkJCSAgJmZzLT5pbm9kZV9tYXApOworCQlpZiAocmV0dmFsKSB7CisJCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0NPUFlfSUJJVE1BUF9FUlJPUiwgJnBjdHgpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWV4dDJmc19zZXRfYml0bWFwX3BhZGRpbmcoZnMtPmlub2RlX21hcCk7CisJCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKworCQkvKiByZWRvIGNvdW50cyAqLworCQlpbm9kZXMgPSAwOyBmcmVlX2lub2RlcyA9IDA7IGdyb3VwX2ZyZWUgPSAwOworCQlkaXJzX2NvdW50ID0gMDsgZ3JvdXAgPSAwOworCQltZW1zZXQoZnJlZV9hcnJheSwgMCwgZnMtPmdyb3VwX2Rlc2NfY291bnQgKiBzaXplb2YoaW50KSk7CisJCW1lbXNldChkaXJfYXJyYXksIDAsIGZzLT5ncm91cF9kZXNjX2NvdW50ICogc2l6ZW9mKGludCkpOworCQlyZWRvX2ZsYWcrKzsKKwkJZ290byByZWRvX2NvdW50czsKKwl9IGVsc2UgaWYgKGZpeGl0ID09IDApCisJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKGZyZWVfYXJyYXlbaV0gIT0gZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKSkgeworCQkJcGN0eC5ncm91cCA9IGk7CisJCQlwY3R4LmlubyA9IGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChmcywgaSk7CisJCQlwY3R4LmlubzIgPSBmcmVlX2FycmF5W2ldOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GUkVFX0lOT0RFX0NPVU5UX0dST1VQLAorCQkJCQkmcGN0eCkpIHsKKwkJCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBpLCBmcmVlX2FycmF5W2ldKTsKKwkJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQl9IGVsc2UKKwkJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJfQorCQlpZiAoZGlyX2FycmF5W2ldICE9IGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZnMsIGkpKSB7CisJCQlwY3R4Lmdyb3VwID0gaTsKKwkJCXBjdHguaW5vID0gZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgaSk7CisJCQlwY3R4LmlubzIgPSBkaXJfYXJyYXlbaV07CisKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfRlJFRV9ESVJfQ09VTlRfR1JPVVAsCisJCQkJCSZwY3R4KSkgeworCQkJCWV4dDJmc19iZ191c2VkX2RpcnNfY291bnRfc2V0KGZzLCBpLCBkaXJfYXJyYXlbaV0pOworCQkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCX0gZWxzZQorCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQl9CisJfQorCWlmIChmcmVlX2lub2RlcyAhPSBmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQpIHsKKwkJcGN0eC5ncm91cCA9IC0xOworCQlwY3R4LmlubyA9IGZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudDsKKwkJcGN0eC5pbm8yID0gZnJlZV9pbm9kZXM7CisKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GUkVFX0lOT0RFX0NPVU5ULCAmcGN0eCkpIHsKKwkJCWZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudCA9IGZyZWVfaW5vZGVzOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQl9CisJfQorZXJyb3V0OgorCWV4dDJmc19mcmVlX21lbSgmZnJlZV9hcnJheSk7CisJZXh0MmZzX2ZyZWVfbWVtKCZkaXJfYXJyYXkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19pbm9kZV9lbmQoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlleHQyX2lub190CWVuZCwgc2F2ZV9pbm9kZXNfY291bnQsIGk7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWVuZCA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Z1ZGdlX2lub2RlX2JpdG1hcF9lbmQoZnMtPmlub2RlX21hcCwgZW5kLAorCQkJCQkJICAgICAmc2F2ZV9pbm9kZXNfY291bnQpOworCWlmIChwY3R4LmVycmNvZGUpIHsKKwkJcGN0eC5udW0gPSAxOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzVfRlVER0VfQklUTUFQX0VSUk9SLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIGZhdGFsICovCisJCXJldHVybjsKKwl9CisJaWYgKHNhdmVfaW5vZGVzX2NvdW50ID09IGVuZCkKKwkJcmV0dXJuOworCisJLyogcHJvdGVjdCBsb29wIGZyb20gd3JhcC1hcm91bmQgaWYgZW5kIGlzIG1heGVkICovCisJZm9yIChpID0gc2F2ZV9pbm9kZXNfY291bnQgKyAxOyBpIDw9IGVuZCAmJiBpID4gc2F2ZV9pbm9kZXNfY291bnQ7IGkrKykgeworCQlpZiAoIWV4dDJmc190ZXN0X2lub2RlX2JpdG1hcChmcy0+aW5vZGVfbWFwLCBpKSkgeworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfNV9JTk9ERV9CTUFQX1BBRERJTkcsICZwY3R4KSkgeworCQkJCWZvciAoOyBpIDw9IGVuZDsgaSsrKQorCQkJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAoZnMtPmlub2RlX21hcCwKKwkJCQkJCQkJIGkpOworCQkJCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKwkJCX0gZWxzZQorCQkJCWV4dDJmc191bm1hcmtfdmFsaWQoZnMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwY3R4LmVycmNvZGUgPSBleHQyZnNfZnVkZ2VfaW5vZGVfYml0bWFwX2VuZChmcy0+aW5vZGVfbWFwLAorCQkJCQkJICAgICBzYXZlX2lub2Rlc19jb3VudCwgMCk7CisJaWYgKHBjdHguZXJyY29kZSkgeworCQlwY3R4Lm51bSA9IDI7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfNV9GVURHRV9CSVRNQVBfRVJST1IsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogZmF0YWwgKi8KKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tfZW5kKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJYmxrNjRfdAllbmQsIHNhdmVfYmxvY2tzX2NvdW50LCBpOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwllbmQgPSBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZnMtPmJsb2NrX21hcCkgKworCQkoKGJsazY0X3QpRVhUMl9DTFVTVEVSU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAqIGZzLT5ncm91cF9kZXNjX2NvdW50KSAtIDE7CisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQyKGZzLT5ibG9ja19tYXAsIGVuZCwKKwkJCQkJCSAgICAgJnNhdmVfYmxvY2tzX2NvdW50KTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gMzsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZVREdFX0JJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBmYXRhbCAqLworCQlyZXR1cm47CisJfQorCWlmIChzYXZlX2Jsb2Nrc19jb3VudCA9PSBlbmQpCisJCXJldHVybjsKKworCS8qIFByb3RlY3QgbG9vcCBmcm9tIHdyYXAtYXJvdW5kIGlmIGVuZCBpcyBtYXhlZCAqLworCWZvciAoaSA9IHNhdmVfYmxvY2tzX2NvdW50ICsgMTsgaSA8PSBlbmQgJiYgaSA+IHNhdmVfYmxvY2tzX2NvdW50OyBpKyspIHsKKwkJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCSAgICAgICBFWFQyRlNfQzJCKGZzLCBpKSkpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzVfQkxPQ0tfQk1BUF9QQURESU5HLCAmcGN0eCkpIHsKKwkJCQlmb3IgKDsgaSA8PSBlbmQ7IGkrKykKKwkJCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLAorCQkJCQkJCUVYVDJGU19DMkIoZnMsIGkpKTsKKwkJCQlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7CisJCQl9IGVsc2UKKwkJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcGN0eC5lcnJjb2RlID0gZXh0MmZzX2Z1ZGdlX2Jsb2NrX2JpdG1hcF9lbmQyKGZzLT5ibG9ja19tYXAsCisJCQkJCQkgICAgIHNhdmVfYmxvY2tzX2NvdW50LCAwKTsKKwlpZiAocGN0eC5lcnJjb2RlKSB7CisJCXBjdHgubnVtID0gNDsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl81X0ZVREdFX0JJVE1BUF9FUlJPUiwgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOyAvKiBmYXRhbCAqLworCQlyZXR1cm47CisJfQorfQorCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wcm9ibGVtLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2JsZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRjOGQyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9wcm9ibGVtLmMKQEAgLTAsMCArMSwyMDcyIEBACisvKgorICogcHJvYmxlbS5jIC0tLSByZXBvcnQgZmlsZXN5c3RlbSBwcm9ibGVtcyB0byB0aGUgdXNlcgorICoKKyAqIENvcHlyaWdodCAxOTk2LCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKworI2luY2x1ZGUgImUyZnNjay5oIgorCisjaW5jbHVkZSAicHJvYmxlbS5oIgorI2luY2x1ZGUgInByb2JsZW1QLmgiCisKKyNkZWZpbmUgUFJPTVBUX05PTkUJMAorI2RlZmluZSBQUk9NUFRfRklYCTEKKyNkZWZpbmUgUFJPTVBUX0NMRUFSCTIKKyNkZWZpbmUgUFJPTVBUX1JFTE9DQVRFCTMKKyNkZWZpbmUgUFJPTVBUX0FMTE9DQVRFIDQKKyNkZWZpbmUgUFJPTVBUX0VYUEFORAk1CisjZGVmaW5lIFBST01QVF9DT05ORUNUCTYKKyNkZWZpbmUgUFJPTVBUX0NSRUFURQk3CisjZGVmaW5lIFBST01QVF9TQUxWQUdFCTgKKyNkZWZpbmUgUFJPTVBUX1RSVU5DQVRFCTkKKyNkZWZpbmUgUFJPTVBUX0NMRUFSX0lOT0RFIDEwCisjZGVmaW5lIFBST01QVF9BQk9SVAkxMQorI2RlZmluZSBQUk9NUFRfU1BMSVQJMTIKKyNkZWZpbmUgUFJPTVBUX0NPTlRJTlVFCTEzCisjZGVmaW5lIFBST01QVF9DTE9ORQkxNAorI2RlZmluZSBQUk9NUFRfREVMRVRFCTE1CisjZGVmaW5lIFBST01QVF9TVVBQUkVTUyAxNgorI2RlZmluZSBQUk9NUFRfVU5MSU5LCTE3CisjZGVmaW5lIFBST01QVF9DTEVBUl9IVFJFRSAxOAorI2RlZmluZSBQUk9NUFRfUkVDUkVBVEUgMTkKKyNkZWZpbmUgUFJPTVBUX05VTEwJMjAKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgcHJvbXB0cyB3aGljaCBhcmUgdXNlZCB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3YW50CisgKiB0byBmaXggYSBwcm9ibGVtLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqcHJvbXB0W10gPSB7CisJTl8oIihubyBwcm9tcHQpIiksCS8qIDAgKi8KKwlOXygiRml4IiksCQkvKiAxICovCisJTl8oIkNsZWFyIiksCQkvKiAyICovCisJTl8oIlJlbG9jYXRlIiksCQkvKiAzICovCisJTl8oIkFsbG9jYXRlIiksCQkvKiA0ICovCisJTl8oIkV4cGFuZCIpLAkJLyogNSAqLworCU5fKCJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIiksIC8qIDYgKi8KKwlOXygiQ3JlYXRlIiksCQkvKiA3ICovCisJTl8oIlNhbHZhZ2UiKSwJCS8qIDggKi8KKwlOXygiVHJ1bmNhdGUiKSwJCS8qIDkgKi8KKwlOXygiQ2xlYXIgaW5vZGUiKSwJLyogMTAgKi8KKwlOXygiQWJvcnQiKSwJCS8qIDExICovCisJTl8oIlNwbGl0IiksCQkvKiAxMiAqLworCU5fKCJDb250aW51ZSIpLAkJLyogMTMgKi8KKwlOXygiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiKSwgLyogMTQgKi8KKwlOXygiRGVsZXRlIGZpbGUiKSwJLyogMTUgKi8KKwlOXygiU3VwcHJlc3MgbWVzc2FnZXMiKSwvKiAxNiAqLworCU5fKCJVbmxpbmsiKSwJCS8qIDE3ICovCisJTl8oIkNsZWFyIEhUcmVlIGluZGV4IiksLyogMTggKi8KKwlOXygiUmVjcmVhdGUiKSwJCS8qIDE5ICovCisJIiIsCQkJLyogMjAgKi8KK307CisKKy8qCisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgcHJpbnRlZCB3aGVuIHdlIGFyZSBwcmVlbiBtb2RlIGFuZCB3ZSB3aWxsIGJlCisgKiBhdXRvbWF0aWNhbGx5IGZpeGluZyB0aGUgcHJvYmxlbS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnByZWVuX21zZ1tdID0geworCU5fKCIoTk9ORSkiKSwJCS8qIDAgKi8KKwlOXygiRklYRUQiKSwJCS8qIDEgKi8KKwlOXygiQ0xFQVJFRCIpLAkJLyogMiAqLworCU5fKCJSRUxPQ0FURUQiKSwJLyogMyAqLworCU5fKCJBTExPQ0FURUQiKSwJLyogNCAqLworCU5fKCJFWFBBTkRFRCIpLAkJLyogNSAqLworCU5fKCJSRUNPTk5FQ1RFRCIpLAkvKiA2ICovCisJTl8oIkNSRUFURUQiKSwJCS8qIDcgKi8KKwlOXygiU0FMVkFHRUQiKSwJCS8qIDggKi8KKwlOXygiVFJVTkNBVEVEIiksCS8qIDkgKi8KKwlOXygiSU5PREUgQ0xFQVJFRCIpLAkvKiAxMCAqLworCU5fKCJBQk9SVEVEIiksCQkvKiAxMSAqLworCU5fKCJTUExJVCIpLAkJLyogMTIgKi8KKwlOXygiQ09OVElOVUlORyIpLAkvKiAxMyAqLworCU5fKCJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiKSwgLyogMTQgKi8KKwlOXygiRklMRSBERUxFVEVEIiksCS8qIDE1ICovCisJTl8oIlNVUFBSRVNTRUQiKSwJLyogMTYgKi8KKwlOXygiVU5MSU5LRUQiKSwJCS8qIDE3ICovCisJTl8oIkhUUkVFIElOREVYIENMRUFSRUQiKSwvKiAxOCAqLworCU5fKCJXSUxMIFJFQ1JFQVRFIiksCS8qIDE5ICovCisJIiIsCQkJLyogMjAgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgZTJmc2NrX3Byb2JsZW0gcHJvYmxlbV90YWJsZVtdID0geworCisJLyogUHJlLVBhc3MgMSBlcnJvcnMgKi8KKworCS8qIEJsb2NrIGJpdG1hcCBub3QgaW4gZ3JvdXAgKi8KKwl7IFBSXzBfQkJfTk9UX0dST1VQLCBOXygiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCBQUl9MQVRDSF9SRUxPQyB9LAorCisJLyogSW5vZGUgYml0bWFwIG5vdCBpbiBncm91cCAqLworCXsgUFJfMF9JQl9OT1RfR1JPVVAsIE5fKCJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIiksCisJICBQUk9NUFRfUkVMT0NBVEUsIFBSX0xBVENIX1JFTE9DIH0sCisKKwkvKiBJbm9kZSB0YWJsZSBub3QgaW4gZ3JvdXAgKi8KKwl7IFBSXzBfSVRBQkxFX05PVF9HUk9VUCwKKwkgIE5fKCJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorCSAgIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iKSwKKwkgIFBST01QVF9SRUxPQ0FURSwgUFJfTEFUQ0hfUkVMT0MgfSwKKworCS8qIFN1cGVyYmxvY2sgY29ycnVwdCAqLworCXsgUFJfMF9TQl9DT1JSVVBULAorCSAgTl8oIlxuVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisJICAiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisJICAiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorCSAgImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorCSAgIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRmlsZXN5c3RlbSBzaXplIGlzIHdyb25nICovCisJeyBQUl8wX0ZTX1NJWkVfV1JPTkcsCisJICBOXygiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorCSAgIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKwkgICJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iKSwKKwkgIFBST01QVF9BQk9SVCwgMCB9LAorCisJLyogRnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQgKi8KKwl7IFBSXzBfTk9fRlJBR01FTlRTLAorCSAgTl8oIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKwkgICJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisJICAiZnJvbSB0aGUgQGIgc2l6ZS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkgIC8qIEJhZCBibG9ja3NfcGVyX2dyb3VwICovCisJeyBQUl8wX0JMT0NLU19QRVJfR1JPVVAsCisJICBOXygiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9BRlRFUl9DT0RFLCBQUl8wX1NCX0NPUlJVUFQgfSwKKworCS8qIEJhZCBmaXJzdF9kYXRhX2Jsb2NrICovCisJeyBQUl8wX0ZJUlNUX0RBVEFfQkxPQ0ssCisJICBOXygiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9BRlRFUl9DT0RFLCBQUl8wX1NCX0NPUlJVUFQgfSwKKworCS8qIEFkZGluZyBVVUlEIHRvIGZpbGVzeXN0ZW0gKi8KKwl7IFBSXzBfQUREX1VVSUQsCisJICBOXygiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFJlbG9jYXRlIGhpbnQgKi8KKwl7IFBSXzBfUkVMT0NBVEVfSElOVCwKKwkgIE5fKCJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorCSAgIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKwkgICJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisJICAibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorCSAgInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB8IFBSX05PQ09MTEFURSB9LAorCisJLyogTWlzY2VsbGFuZW91cyBzdXBlcmJsb2NrIGNvcnJ1cHRpb24gKi8KKwl7IFBSXzBfTUlTQ19DT1JSVVBUX1NVUEVSLAorCSAgTl8oIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9BRlRFUl9DT0RFLCBQUl8wX1NCX0NPUlJVUFQgfSwKKworCS8qIEVycm9yIGRldGVybWluZyBwaHlzaWNhbCBkZXZpY2Ugc2l6ZSBvZiBmaWxlc3lzdGVtICovCisJeyBQUl8wX0dFVFNJWkVfRVJST1IsCisJICBOXygiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogSW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyBpbmNvcnJlY3QgKi8KKwl7IFBSXzBfSU5PREVfQ09VTlRfV1JPTkcsCisJICBOXygiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwl7IFBSXzBfSFVSRF9DTEVBUl9GSUxFVFlQRSwKKwkgIE5fKCJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEpvdXJuYWwgaW5vZGUgaXMgaW52YWxpZCAqLworCXsgUFJfMF9KT1VSTkFMX0JBRF9JTk9ERSwKKwkgIE5fKCJAUyBoYXMgYW4gQG4gQGogKEBpICVpKS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogVGhlIGV4dGVybmFsIGpvdXJuYWwgaGFzICh1bnN1cHBvcnRlZCkgbXVsdGlwbGUgZmlsZXN5c3RlbXMgKi8KKwl7IFBSXzBfSk9VUk5BTF9VTlNVUFBfTVVMVElGUywKKwkgIE5fKCJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWwgKi8KKwl7IFBSXzBfQ0FOVF9GSU5EX0pPVVJOQUwsCisJICBOXygiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrICovCisJeyBQUl8wX0VYVF9KT1VSTkFMX0JBRF9TVVBFUiwKKwkgIE5fKCJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogU3VwZXJibG9jayBoYXMgYSBiYWQgam91cm5hbCBVVUlEICovCisJeyBQUl8wX0pPVVJOQUxfQkFEX1VVSUQsCisJICBOXygiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogSm91cm5hbCBoYXMgYW4gdW5rbm93biBzdXBlcmJsb2NrIHR5cGUgKi8KKwl7IFBSXzBfSk9VUk5BTF9VTlNVUFBfU1VQRVIsCisJICBOXygiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisJICAgICAiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3QgIgorCSAgICAgInN1cHBvcnQgdGhpcyBAaiBmb3JtYXQuXG4iCisJICAgICAiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIpLAorCSAgUFJPTVBUX0FCT1JULCBQUl9OT19PSyB8IFBSX0FGVEVSX0NPREUsIFBSXzBfSk9VUk5BTF9CQURfU1VQRVIgfSwKKworCS8qIEpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0ICovCisJeyBQUl8wX0pPVVJOQUxfQkFEX1NVUEVSLAorCSAgTl8oIkBqIEBTIGlzIGNvcnJ1cHQuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBTdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIgYnV0IGhhcyBhIGpvdXJuYWwgKi8KKwl7IFBSXzBfSk9VUk5BTF9IQVNfSk9VUk5BTCwKKwkgIE5fKCJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogU3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCBidXQgbm90IGpvdXJuYWwgaXMgcHJlc2VudCAqLworCXsgUFJfMF9KT1VSTkFMX1JFQ09WRVJfU0VULAorCSAgTl8oIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogU3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IGpvdXJuYWwgaGFzIGRhdGEgKi8KKwl7IFBSXzBfSk9VUk5BTF9SRUNPVkVSWV9DTEVBUiwKKwkgIE5fKCJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBBc2sgaWYgd2Ugc2hvdWxkIGNsZWFyIHRoZSBqb3VybmFsICovCisJeyBQUl8wX0pPVVJOQUxfUkVTRVRfSk9VUk5BTCwKKwkgIE5fKCJDbGVhciBAaiIpLAorCSAgUFJPTVBUX05VTEwsIFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBGaWxlc3lzdGVtIHJldmlzaW9uIGlzIDAsIGJ1dCBmZWF0dXJlIGZsYWdzIGFyZSBzZXQgKi8KKwl7IFBSXzBfRlNfUkVWX0xFVkVMLAorCSAgTl8oIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBDbGVhcmluZyBvcnBoYW4gaW5vZGUgKi8KKwl7IFBSXzBfT1JQSEFOX0NMRUFSX0lOT0RFLAorCSAgTl8oIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBJbGxlZ2FsIGJsb2NrIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICovCisJeyBQUl8wX09SUEhBTl9JTExFR0FMX0JMT0NLX05VTSwKKwkgICBOXygiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEFscmVhZHkgY2xlYXJlZCBibG9jayBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAqLworCXsgUFJfMF9PUlBIQU5fQUxSRUFEWV9DTEVBUkVEX0JMT0NLLAorCSAgIE5fKCJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIElsbGVnYWwgb3JwaGFuIGlub2RlIGluIHN1cGVyYmxvY2sgKi8KKwl7IFBSXzBfT1JQSEFOX0lMTEVHQUxfSEVBRF9JTk9ERSwKKwkgIE5fKCJASSBAbyBAaSAlaSBpbiBAUy5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIElsbGVnYWwgaW5vZGUgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdCAqLworCXsgUFJfMF9PUlBIQU5fSUxMRUdBTF9JTk9ERSwKKwkgIE5fKCJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogSm91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0ICovCisJeyBQUl8wX0pPVVJOQUxfVU5TVVBQX1JPQ09NUEFULAorCSAgTl8oIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIiksCisJICBQUk9NUFRfQUJPUlQsIDAgfSwKKworCS8qIEpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldCAqLworCXsgUFJfMF9KT1VSTkFMX1VOU1VQUF9JTkNPTVBBVCwKKwkgIE5fKCJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIpLAorCSAgUFJPTVBUX0FCT1JULCAwIH0sCisKKwkvKiBKb3VybmFsIGhhcyB1bnN1cHBvcnRlZCB2ZXJzaW9uIG51bWJlciAqLworCXsgUFJfMF9KT1VSTkFMX1VOU1VQUF9WRVJTSU9OLAorCSAgTl8oIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIpLAorCSAgUFJPTVBUX0FCT1JULCAwIH0sCisKKwkvKiBNb3Zpbmcgam91cm5hbCB0byBoaWRkZW4gZmlsZSAqLworCXsgUFJfMF9NT1ZFX0pPVVJOQUwsCisJICBOXygiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3IgbW92aW5nIGpvdXJuYWwgdG8gaGlkZGVuIGZpbGUgKi8KKwl7IFBSXzBfRVJSX01PVkVfSk9VUk5BTCwKKwkgIE5fKCJFcnJvciBtb3ZpbmcgQGo6ICVtXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENsZWFyaW5nIFYyIGpvdXJuYWwgc3VwZXJibG9jayAqLworCXsgUFJfMF9DTEVBUl9WMl9KT1VSTkFMLAorCSAgTl8oIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisJICAgICAiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQXNrIGlmIHdlIHNob3VsZCBydW4gdGhlIGpvdXJuYWwgYW55d2F5ICovCisJeyBQUl8wX0pPVVJOQUxfUlVOLAorCSAgTl8oIlJ1biBAaiBhbnl3YXkiKSwKKwkgIFBST01QVF9OVUxMLCAwIH0sCisKKwkvKiBSdW4gdGhlIGpvdXJuYWwgYnkgZGVmYXVsdCAqLworCXsgUFJfMF9KT1VSTkFMX1JVTl9ERUZBVUxULAorCSAgTl8oIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQmFja3VwIGpvdXJuYWwgaW5vZGUgYmxvY2tzICovCisJeyBQUl8wX0JBQ0tVUF9KTkwsCisJICBOXygiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUmVzZXJ2ZWQgYmxvY2tzIHcvbyByZXNpemVfaW5vZGUgKi8KKwl7IFBSXzBfTk9OWkVST19SRVNFUlZFRF9HRFRfQkxPQ0tTLAorCSAgTl8oIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKwkgICAgICJpcyAlTjsgQHMgemVyby4gICIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvICovCisJeyBQUl8wX0NMRUFSX1JFU0laRV9JTk9ERSwKKwkgIE5fKCJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIFJlc2l6ZSBpbm9kZSBpbnZhbGlkICovCisJeyBQUl8wX1JFU0laRV9JTk9ERV9JTlZBTElELAorCSAgTl8oIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiKSwKKwkgIFBST01QVF9SRUNSRUFURSwgMCB9LAorCisJLyogTGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUgKi8KKwl7IFBSXzBfRlVUVVJFX1NCX0xBU1RfTU9VTlQsCisJICBOXygiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcblx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX05PX09LIH0sCisKKwkvKiBMYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSAqLworCXsgUFJfMF9GVVRVUkVfU0JfTEFTVF9XUklURSwKKwkgIE5fKCJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfTk9fT0sgfSwKKworCXsgUFJfMF9FWFRFUk5BTF9KT1VSTkFMX0hJTlQsCisJICBOXygiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIpLAorCSAgICAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEFkZGluZyBkaXJoYXNoIGhpbnQgKi8KKwl7IFBSXzBfRElSSEFTSF9ISU5ULAorCSAgTl8oIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIGdyb3VwIGRlc2NyaXB0b3IgTiBjaGVja3N1bSBpcyBpbnZhbGlkLiAqLworCXsgUFJfMF9HRFRfQ1NVTSwKKwkgIE5fKCJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9MQVRDSF9CR19DSEVDS1NVTSB9LAorCisJLyogZ3JvdXAgZGVzY3JpcHRvciBOIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuICovCisJeyBQUl8wX0dEVF9VTklOSVQsCisJICBOXygiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogR3JvdXAgZGVzY3JpcHRvciBOIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQuICovCisJeyBQUl8wX0dEVF9JVEFCTEVfVU5VU0VELAorCSAgTl8oIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIpLAorCSAgICAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICovCisJeyBQUl8wX0JCX1VOSU5JVF9MQVNULAorCSAgTl8oIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIpLAorCSAgICAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEpvdXJuYWwgdHJhbnNhY3Rpb24gZm91bmQgY29ycnVwdCAqLworCXsgUFJfMF9KTkxfVFhOX0NPUlJVUFQsCisJICBOXygiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJeyBQUl8wX0NMRUFSX1RFU1RGU19GTEFHLAorCSAgTl8oIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBMYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSAoZnVkZ2VkKSAqLworCXsgUFJfMF9GVVRVUkVfU0JfTEFTVF9NT1VOVF9GVURHRUQsCisJICBOXygiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG5cdChieSBsZXNzIHRoYW4gYSBkYXksICIKKwkgICAgICJwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkgICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJLyogTGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUgKGZ1ZGdlZCkgKi8KKwl7IFBSXzBfRlVUVVJFX1NCX0xBU1RfV1JJVEVfRlVER0VELAorCSAgTl8oIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCAiCisJICAgICAicHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBCbG9jayBncm91cCBjaGVja3N1bSAobGF0Y2ggcXVlc3Rpb24pIGlzIGludmFsaWQuICovCisJeyBQUl8wX0dEVF9DU1VNX0xBVENILAorCSAgTl8oIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIiksCisJICAgICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKi8KKwl7IFBSXzBfRlJFRV9JTk9ERV9DT1VOVCwKKwkgIE5fKCJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKi8KKwl7IFBSXzBfRlJFRV9CTE9DS19DT1VOVCwKKwkgIE5fKCJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogTWFraW5nIHF1b3RhIGZpbGUgaGlkZGVuICovCisJeyBQUl8wX0hJREVfUVVPVEEsCisJICBOXygiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAqLworCXsgUFJfMF9NTVBfSU5WQUxJRF9CTEssCisJICBOXygiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBTdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gKi8KKwl7IFBSXzBfTU1QX0lOVkFMSURfTUFHSUMsCisJICBOXygiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LfSwKKworCS8qIE9wZW5pbmcgZmlsZSBzeXN0ZW0gZmFpbGVkICovCisJeyBQUl8wX09QRU5fRkFJTEVELAorCSAgTl8oImV4dDJmc19vcGVuMjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENoZWNraW5nIGdyb3VwIGRlc2NyaXB0b3IgZmFpbGVkICovCisJeyBQUl8wX0NIRUNLX0RFU0NfRkFJTEVELAorCSAgTl8oImV4dDJmc19jaGVja19kZXNjOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogNjRiaXQgaXMgc2V0IGJ1dCBleHRlbnRzIGlzIHVuc2V0LiAqLworCXsgUFJfMF82NEJJVF9XSVRIT1VUX0VYVEVOVFMsCisJICBOXygiQFMgNjRiaXQgZmlsZXN5c3RlbXMgbmVlZHMgZXh0ZW50cyB0byBhY2Nlc3MgdGhlIHdob2xlIGRpc2suICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfTk9fT0t9LAorCisJLyogUGFzcyAxIGVycm9ycyAqLworCisJLyogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzICovCisJeyBQUl8xX1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUm9vdCBkaXJlY3RvcnkgaXMgbm90IGFuIGlub2RlICovCisJeyBQUl8xX1JPT1RfTk9fRElSLCBOXygiQHIgaXMgbm90IGEgQGQuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogUm9vdCBkaXJlY3RvcnkgaGFzIGR0aW1lIHNldCAqLworCXsgUFJfMV9ST09UX0RUSU1FLAorCSAgTl8oIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFJlc2VydmVkIGlub2RlIGhhcyBiYWQgbW9kZSAqLworCXsgUFJfMV9SRVNFUlZFRF9CQURfTU9ERSwKKwkgIE5fKCJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBEZWxldGVkIGlub2RlIGhhcyB6ZXJvIGR0aW1lICovCisJeyBQUl8xX1pFUk9fRFRJTUUsCisJICBOXygiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbm9kZSBpbiB1c2UsIGJ1dCBkdGltZSBzZXQgKi8KKwl7IFBSXzFfU0VUX0RUSU1FLAorCSAgTl8oIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBaZXJvLWxlbmd0aCBkaXJlY3RvcnkgKi8KKwl7IFBSXzFfWkVST19MRU5HVEhfRElSLAorCSAgTl8oIkBpICVpIGlzIGEgQHogQGQuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEJsb2NrIGJpdG1hcCBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrICovCisJeyBQUl8xX0JCX0NPTkZMSUNULAorCSAgTl8oIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iKSwKKwkgIFBST01QVF9SRUxPQ0FURSwgMCB9LAorCisJLyogSW5vZGUgYml0bWFwIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKwl7IFBSXzFfSUJfQ09ORkxJQ1QsCisJICBOXygiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCAwIH0sCisKKwkvKiBJbm9kZSB0YWJsZSBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrICovCisJeyBQUl8xX0lUQUJMRV9DT05GTElDVCwKKwkgIE5fKCJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIiksCisJICBQUk9NUFRfUkVMT0NBVEUsIDAgfSwKKworCS8qIEJsb2NrIGJpdG1hcCBpcyBvbiBhIGJhZCBibG9jayAqLworCXsgUFJfMV9CQl9CQURfQkxPQ0ssCisJICBOXygiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIpLAorCSAgUFJPTVBUX1JFTE9DQVRFLCAwIH0sCisKKwkvKiBJbm9kZSBiaXRtYXAgaXMgb24gYSBiYWQgYmxvY2sgKi8KKwl7IFBSXzFfSUJfQkFEX0JMT0NLLAorCSAgTl8oIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiKSwKKwkgIFBST01QVF9SRUxPQ0FURSwgMCB9LAorCisJLyogSW5vZGUgaGFzIGluY29ycmVjdCBpX3NpemUgKi8KKwl7IFBSXzFfQkFEX0lfU0laRSwKKwkgIE5fKCJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbm9kZSBoYXMgaW5jb3JyZWN0IGlfYmxvY2tzICovCisJeyBQUl8xX0JBRF9JX0JMT0NLUywKKwkgIE5fKCJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIElsbGVnYWwgYmxvY2tudW1iZXIgaW4gaW5vZGUgKi8KKwl7IFBSXzFfSUxMRUdBTF9CTE9DS19OVU0sCisJICBOXygiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9MQVRDSF9CTE9DSyB9LAorCisJLyogQmxvY2sgbnVtYmVyIG92ZXJsYXBzIGZzIG1ldGFkYXRhICovCisJeyBQUl8xX0JMT0NLX09WRVJMQVBTX01FVEFEQVRBLAorCSAgTl8oIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfTEFUQ0hfQkxPQ0sgfSwKKworCS8qIElub2RlIGhhcyBpbGxlZ2FsIGJsb2NrcyAobGF0Y2ggcXVlc3Rpb24pICovCisJeyBQUl8xX0lOT0RFX0JMT0NLX0xBVENILAorCSAgTl8oIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIFRvbyBtYW55IGJhZCBibG9ja3MgaW4gaW5vZGUgKi8KKwl7IFBSXzFfVE9PX01BTllfQkFEX0JMT0NLUywKKwkgIE5fKCJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0lOT0RFLCBQUl9OT19PSyB9LAorCisJLyogSWxsZWdhbCBibG9jayBudW1iZXIgaW4gYmFkIGJsb2NrIGlub2RlICovCisJeyBQUl8xX0JCX0lMTEVHQUxfQkxPQ0tfTlVNLAorCSAgTl8oIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX0JCTE9DSyB9LAorCisJLyogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrcyAobGF0Y2ggcXVlc3Rpb24pICovCisJeyBQUl8xX0lOT0RFX0JCTE9DS19MQVRDSCwKKwkgIE5fKCJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRHVwbGljYXRlIG9yIGJhZCBibG9ja3MgaW4gdXNlISAqLworCXsgUFJfMV9EVVBfQkxPQ0tTX1BSRUVOU1RPUCwKKwkgIE5fKCJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEJhZCBibG9jayB1c2VkIGFzIGJhZCBibG9jayBpbmRpcmVjdCBibG9jayAqLworCXsgUFJfMV9CQklOT0RFX0JBRF9NRVRBQkxPQ0ssCisJICBOXygiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX0JCTE9DSyB9LAorCisJLyogSW5jb25zaXN0ZW5jeSBjYW4ndCBiZSBmaXhlZCBwcm9tcHQgKi8KKwl7IFBSXzFfQkJJTk9ERV9CQURfTUVUQUJMT0NLX1BST01QVCwKKwkgIE5fKCJcblRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisJICAgICAic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gIiJlMmZzY2sgLWMiIiB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisJICAgICAiaW4gdGhlIEBmLlxuIiksCisJICBQUk9NUFRfQ09OVElOVUUsIFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBCYWQgcHJpbWFyeSBibG9jayAqLworCXsgUFJfMV9CQURfUFJJTUFSWV9CTE9DSywKKwkgIE5fKCJcbklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0FGVEVSX0NPREUsIFBSXzFfQkFEX1BSSU1BUllfQkxPQ0tfUFJPTVBUIH0sCisKKwkvKiBCYWQgcHJpbWFyeSBibG9jayBwcm9tcHQgKi8KKwl7IFBSXzFfQkFEX1BSSU1BUllfQkxPQ0tfUFJPTVBULAorCSAgTl8oIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKwkgICAgICJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogQmFkIHByaW1hcnkgc3VwZXJibG9jayAqLworCXsgUFJfMV9CQURfUFJJTUFSWV9TVVBFUkJMT0NLLAorCSAgTl8oIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfQUZURVJfQ09ERSwgUFJfMV9CQURfUFJJTUFSWV9CTE9DSyB9LAorCisJLyogQmFkIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgKi8KKwl7IFBSXzFfQkFEX1BSSU1BUllfR1JPVVBfREVTQ1JJUFRPUiwKKwkgIE5fKCJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyAiCisJICAiaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9BRlRFUl9DT0RFLCBQUl8xX0JBRF9QUklNQVJZX0JMT0NLIH0sCisKKwkvKiBCYWQgc3VwZXJibG9jayBpbiBncm91cCAqLworCXsgUFJfMV9CQURfU1VQRVJCTE9DSywKKwkgIE5fKCJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9QUkVFTl9OT01TRyB9LAorCisJLyogQmFkIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIGluIGdyb3VwICovCisJeyBQUl8xX0JBRF9HUk9VUF9ERVNDUklQVE9SUywKKwkgIE5fKCJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCAiCisJICAiQGIgKCViKS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEJsb2NrIGNsYWltZWQgZm9yIG5vIHJlYXNvbiAqLworCXsgUFJfMV9QUk9HRVJSX0NMQUlNRURfQkxPQ0ssCisJICBOXygiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluICIKKwkgICJwcm9jZXNzX2JhZF9AYi5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGJsb2NrcyBmb3IgcmVsb2NhdGluZyBtZXRhZGF0YSAqLworCXsgUFJfMV9SRUxPQ19CTE9DS19BTExPQ0FURSwKKwkgIE5fKCJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBkdXJpbmcgcmVsb2NhdGlvbiBwcm9jZXNzICovCisJeyBQUl8xX1JFTE9DX01FTU9SWV9BTExPQ0FURSwKKwkgIE5fKCJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBSZWxvY2F0aW5nIG1ldGFkYXRhIGdyb3VwIGluZm9ybWF0aW9uIGZyb20gWCB0byBZICovCisJeyBQUl8xX1JFTE9DX0ZST01fVE8sCisJICBOXygiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBSZWxvY2F0aW5nIG1ldGF0ZGF0YSBncm91cCBpbmZvcm1hdGlvbiB0byBYICovCisJeyBQUl8xX1JFTE9DX1RPLAorCSAgTl8oIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIiksIC8qIHhnZXR0ZXh0Om5vLWMtZm9ybWF0ICovCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEJsb2NrIHJlYWQgZXJyb3IgZHVyaW5nIHJlbG9jYXRpb24gcHJvY2VzcyAqLworCXsgUFJfMV9SRUxPQ19SRUFEX0VSUiwKKwkgIE5fKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBCbG9jayB3cml0ZSBlcnJvciBkdXJpbmcgcmVsb2NhdGlvbiBwcm9jZXNzICovCisJeyBQUl8xX1JFTE9DX1dSSVRFX0VSUiwKKwkgIE5fKCJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisJeyBQUl8xX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsCisJICBOXygiQEEgQGkgQEIgKCVOKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAqLworCXsgUFJfMV9BTExPQ0FURV9CQklUTUFQX0VSUk9SLAorCSAgTl8oIkBBIEBiIEBCICglTik6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbiAqLworCXsgUFJfMV9BTExPQ0FURV9JQ09VTlQsCisJICBOXygiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXkgKi8KKwl7IFBSXzFfQUxMT0NBVEVfREJDT1VOVCwKKwkgIE5fKCJAQSBAZCBAYiBhcnJheTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKi8KKwl7IFBSXzFfSVNDQU5fRVJST1IsCisJICBOXygiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzICovCisJeyBQUl8xX0JMT0NLX0lURVJBVEUsCisJICBOXygiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHdoaWxlIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKi8KKwl7IFBSXzFfSUNPVU5UX1NUT1JFLAorCSAgTl8oIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3Igd2hpbGUgc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKi8KKwl7IFBSXzFfQUREX0RCTE9DSywKKwkgIE5fKCJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uICIKKwkgICIoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHdoaWxlIHJlYWRpbmcgaW5vZGUgKGZvciBjbGVhcmluZykgKi8KKwl7IFBSXzFfUkVBRF9JTk9ERSwKKwkgIE5fKCJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIFN1cHByZXNzIG1lc3NhZ2VzIHByb21wdCAqLworCXsgUFJfMV9TVVBQUkVTU19NRVNTQUdFUywgIiIsIFBST01QVF9TVVBQUkVTUywgUFJfTk9fT0sgfSwKKworCS8qIEltYWdpYyBmbGFnIHNldCBvbiBhbiBpbm9kZSB3aGVuIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0ICovCisJeyBQUl8xX1NFVF9JTUFHSUMsCisJICBOXygiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBJbW11dGFibGUgZmxhZyBzZXQgb24gYSBkZXZpY2Ugb3Igc29ja2V0IGlub2RlICovCisJeyBQUl8xX1NFVF9JTU1VVEFCTEUsCisJICBOXygiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKwkgICAgICJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PIHwgUFJfTk9fT0sgfSwKKworCS8qIENvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGFuIGlub2RlIHdoZW4gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQgKi8KKwl7IFBSXzFfQ09NUFJfU0VULAorCSAgTl8oIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogTm9uLXplcm8gc2l6ZSBmb3IgZGV2aWNlLCBmaWZvIG9yIHNvY2tldCBpbm9kZSAqLworCXsgUFJfMV9TRVRfTk9OWlNJWkUsCisJICBOXygiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRmlsZXN5c3RlbSByZXZpc2lvbiBpcyAwLCBidXQgZmVhdHVyZSBmbGFncyBhcmUgc2V0ICovCisJeyBQUl8xX0ZTX1JFVl9MRVZFTCwKKwkgIE5fKCJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB9LAorCisJLyogSm91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YSAqLworCXsgUFJfMV9KT1VSTkFMX0lOT0RFX05PVF9DTEVBUiwKKwkgIE5fKCJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSm91cm5hbCBoYXMgYmFkIG1vZGUgKi8KKwl7IFBSXzFfSk9VUk5BTF9CQURfTU9ERSwKKwkgIE5fKCJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRGVhbCB3aXRoIGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBvcnBoYW4gbGlua2VkIGxpc3QgKi8KKwl7IFBSXzFfTE9XX0RUSU1FLAorCSAgTl8oIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIiksCisJICBQUk9NUFRfRklYLCBQUl9MQVRDSF9MT1dfRFRJTUUsIDAgfSwKKworCS8qIERlYWwgd2l0aCBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQKKwkgICBsaXN0IChsYXRjaCBxdWVzdGlvbikgKi8KKwl7IFBSXzFfT1JQSEFOX0xJU1RfUkVGVUdFRVMsCisJICBOXygiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKi8KKwl7IFBSXzFfQUxMT0NBVEVfUkVGQ09VTlQsCisJICBOXygiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgKi8KKwl7IFBSXzFfUkVBRF9FQV9CTE9DSywKKwkgIE5fKCJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBJbnZhbGlkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAqLworCXsgUFJfMV9CQURfRUFfQkxPQ0ssCisJICBOXygiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEVycm9yIHJlYWRpbmcgRXh0ZW5kZWQgQXR0cmlidXRlIGJsb2NrIHdoaWxlIGZpeGluZyByZWZjb3VudCAqLworCXsgUFJfMV9FWFRBVFRSX1JFQURfQUJPUlQsCisJICBOXygiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEV4dGVuZGVkIGF0dHJpYnV0ZSByZWZlcmVuY2UgY291bnQgaW5jb3JyZWN0ICovCisJeyBQUl8xX0VYVEFUVFJfUkVGQ09VTlQsCisJICBOXygiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEVycm9yIHdyaXRpbmcgRXh0ZW5kZWQgQXR0cmlidXRlIGJsb2NrIHdoaWxlIGZpeGluZyByZWZjb3VudCAqLworCXsgUFJfMV9FWFRBVFRSX1dSSVRFX0FCT1JULAorCSAgTl8oIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBNdWx0aXBsZSBFQSBibG9ja3Mgbm90IHN1cHBvcnRlZCAqLworCXsgUFJfMV9FQV9NVUxUSV9CTE9DSywKKwkgIE5fKCJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBFQSByZWdpb24gYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgKi8KKwl7IFBSXzFfRUFfQUxMT0NfUkVHSU9OX0FCT1JULAorCSAgTl8oIkBBIEBhIEBiICViLiAgIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUx9LAorCisJLyogRXJyb3IgRUEgYWxsb2NhdGlvbiBjb2xsaXNpb24gKi8KKwl7IFBSXzFfRUFfQUxMT0NfQ09MTElTSU9OLAorCSAgTl8oIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwfSwKKworCS8qIEJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZSAqLworCXsgUFJfMV9FQV9CQURfTkFNRSwKKwkgIE5fKCJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwfSwKKworCS8qIEJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUgKi8KKwl7IFBSXzFfRUFfQkFEX1ZBTFVFLAorCSAgTl8oIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwfSwKKworCS8qIElub2RlIHRvbyBiaWcgKGxhdGNoIHF1ZXN0aW9uKSAqLworCXsgUFJfMV9JTk9ERV9UT09CSUcsCisJICBOXygiQGkgJWkgaXMgdG9vIGJpZy4gICIpLCBQUk9NUFRfVFJVTkNBVEUsIDAgfSwKKworCS8qIERpcmVjdG9yeSB0b28gYmlnICovCisJeyBQUl8xX1RPT0JJR19ESVIsCisJICBOXygiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9MQVRDSF9UT09CSUcgfSwKKworCS8qIFJlZ3VsYXIgZmlsZSB0b28gYmlnICovCisJeyBQUl8xX1RPT0JJR19SRUcsCisJICBOXygiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX0xBVENIX1RPT0JJRyB9LAorCisJLyogU3ltbGluayB0b28gYmlnICovCisJeyBQUl8xX1RPT0JJR19TWU1MSU5LLAorCSAgTl8oIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9MQVRDSF9UT09CSUcgfSwKKworCS8qIElOREVYX0ZMIGZsYWcgc2V0IG9uIGEgbm9uLUhUUkVFIGZpbGVzeXN0ZW0gKi8KKwl7IFBSXzFfSFRSRUVfU0VULAorCSAgTl8oIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIElOREVYX0ZMIGZsYWcgc2V0IG9uIGEgbm9uLWRpcmVjdG9yeSAqLworCXsgUFJfMV9IVFJFRV9OT0RJUiwKKwkgIE5fKCJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbnZhbGlkIHJvb3Qgbm9kZSBpbiBIVFJFRSBkaXJlY3RvcnkgKi8KKwl7IFBSXzFfSFRSRUVfQkFEUk9PVCwKKwkgIE5fKCJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBVbnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gaW4gSFRSRUUgZGlyZWN0b3J5ICovCisJeyBQUl8xX0hUUkVFX0hBU0hWLAorCSAgTl8oIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbmNvbXBhdGlibGUgZmxhZyBpbiBIVFJFRSByb290IG5vZGUgKi8KKwl7IFBSXzFfSFRSRUVfSU5DT01QQVQsCisJICBOXygiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEhUUkVFIHRvbyBkZWVwICovCisJeyBQUl8xX0hUUkVFX0RFUFRILAorCSAgTl8oIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEJhZCBibG9jayBoYXMgaW5kaXJlY3QgYmxvY2sgdGhhdCBjb25mbGljdHMgd2l0aCBmaWxlc3lzdGVtIGJsb2NrICovCisJeyBQUl8xX0JCX0ZTX0JMT0NLLAorCSAgTl8oIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisJICAgICAiQGYgbWV0YWRhdGEuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfTEFUQ0hfQkJMT0NLIH0sCisKKwkvKiBSZXNpemUgaW5vZGUgZmFpbGVkICovCisJeyBQUl8xX1JFU0laRV9JTk9ERV9DUkVBVEUsCisJICBOXygiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIpLAorCSAgUFJPTVBUX0NPTlRJTlVFLCAwIH0sCisKKwkvKiBpbnZhbGlkIGlub2RlLT5pX2V4dHJhX2lzaXplICovCisJeyBQUl8xX0VYVFJBX0lTSVpFLAorCSAgTl8oIkBpICVpIGhhcyBhIGV4dHJhIHNpemUgKCVJUykgd2hpY2ggaXMgQG5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGludmFsaWQgZWEgZW50cnktPmVfbmFtZV9sZW4gKi8KKwl7IFBSXzFfQVRUUl9OQU1FX0xFTiwKKwkgIE5fKCJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaW52YWxpZCBlYSBlbnRyeS0+ZV92YWx1ZV9vZmZzICovCisJeyBQUl8xX0FUVFJfVkFMVUVfT0ZGU0VULAorCSAgTl8oIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGludmFsaWQgZWEgZW50cnktPmVfdmFsdWVfYmxvY2sgKi8KKwl7IFBSXzFfQVRUUl9WQUxVRV9CTE9DSywKKwkgIE5fKCJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGludmFsaWQgZWEgZW50cnktPmVfdmFsdWVfc2l6ZSAqLworCXsgUFJfMV9BVFRSX1ZBTFVFX1NJWkUsCisJICBOXygiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGludmFsaWQgZWEgZW50cnktPmVfaGFzaCAqLworCXsgUFJfMV9BVFRSX0hBU0gsCisJICBOXygiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIGlub2RlIGFwcGVhcnMgdG8gYmUgYSBkaXJlY3RvcnkgKi8KKwl7IFBSXzFfVFJFQVRfQVNfRElSRUNUT1JZLAorCSAgTl8oIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRXJyb3Igd2hpbGUgcmVhZGluZyBleHRlbnQgdHJlZSAqLworCXsgUFJfMV9SRUFEX0VYVEVOVCwKKwkgIE5fKCJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0lOT0RFLCAwIH0sCisKKwkvKiBGYWlsdXJlIHRvIGl0ZXJhdGUgZXh0ZW50cyAqLworCXsgUFJfMV9FWFRFTlRfSVRFUkFURV9GQUlMVVJFLAorCSAgTl8oIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKwkgICAgICJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIpLAorCSAgUFJPTVBUX0NMRUFSX0lOT0RFLCAwIH0sCisKKwkvKiBCYWQgc3RhcnRpbmcgYmxvY2sgaW4gZXh0ZW50ICovCisJeyBQUl8xX0VYVEVOVF9CQURfU1RBUlRfQkxLLAorCSAgTl8oIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcblx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRXh0ZW50IGVuZHMgYmV5b25kIGZpbGVzeXN0ZW0gKi8KKwl7IFBSXzFfRVhURU5UX0VORFNfQkVZT05ELAorCSAgTl8oIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcblx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRVhURU5UU19GTCBmbGFnIHNldCBvbiBhIG5vbi1leHRlbnRzIGZpbGVzeXN0ZW0gKi8KKwl7IFBSXzFfRVhURU5UU19TRVQsCisJICBOXygiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogaW5vZGUgaGFzIGV4dGVudHMsIHN1cGVyYmxvY2sgbWlzc2luZyBJTkNPTVBBVF9FWFRFTlRTIGZlYXR1cmUgKi8KKwl7IFBSXzFfRVhURU5UX0ZFQVRVUkUsCisJICBOXygiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIGlub2RlIG1pc3NpbmcgRVhURU5UU19GTCwgYnV0IGlzIGFuIGV4dGVudCBpbm9kZSAqLworCXsgUFJfMV9VTlNFVF9FWFRFTlRfRkwsCisJICBOXygiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogRmFzdCBzeW1saW5rIGhhcyBFWFRFTlRTX0ZMIHNldCAqLworCXsgUFJfMV9GQVNUX1NZTUxJTktfRVhURU5UX0ZMLAorCSAgTl8oIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBFeHRlbnRzIGFyZSBvdXQgb2Ygb3JkZXIgKi8KKwl7IFBSXzFfT1VUX09GX09SREVSX0VYVEVOVFMsCisJICBOXygiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG5cdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCXsgUFJfMV9FWFRFTlRfSEVBREVSX0lOVkFMSUQsCisJICBOXygiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBGYWlsZWQgdG8gY29udmVydCBzdWJjbHVzdGVyIGJpdG1hcCAqLworCXsgUFJfMV9DT05WRVJUX1NVQkNMVVNURVIsCisJICBOXygiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIFF1b3RhIGlub2RlIGhhcyBiYWQgbW9kZSAqLworCXsgUFJfMV9RVU9UQV9CQURfTU9ERSwKKwkgIE5fKCJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBRdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YSAqLworCXsgUFJfMV9RVU9UQV9JTk9ERV9OT1RfQ0xFQVIsCisJICBOXygiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFF1b3RhIGlub2RlIGlzIHVzZXIgdmlzaWJsZSAqLworCXsgUFJfMV9RVU9UQV9JTk9ERV9OT1RfSElEREVOLAorCSAgTl8oIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEludmFsaWQgYmFkIGlub2RlICovCisJeyBQUl8xX0lOVkFMSURfQkFEX0lOT0RFLAorCSAgTl8oIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRXh0ZW50IGhhcyB6ZXJvIGxlbmd0aCAqLworCXsgUFJfMV9FWFRFTlRfTEVOR1RIX1pFUk8sCisJICBOXygiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyoKKwkgKiBJbnRlcmlvciBleHRlbnQgbm9kZSBsb2dpY2FsIG9mZnNldCBkb2Vzbid0IG1hdGNoIGZpcnN0IG5vZGUgYmVsb3cgaXQKKwkgKi8KKwl7IFBSXzFfRVhURU5UX0lOREVYX1NUQVJUX0lOVkFMSUQsCisJICBOXygiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKwkgICAgICJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRXh0ZW50IGVuZCBpcyBvdXQgb2YgYm91bmRzIGZvciB0aGUgdHJlZSAqLworCXsgUFJfMV9FWFRFTlRfRU5EX09VVF9PRl9CT1VORFMsCisJICBOXygiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG5cdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCisJLyogRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGVuY3J5cHRlZCBkaXJlY3RvcnkgbGlzdCAqLworCXsgUFJfMV9BTExPQ0FURV9FTkNSWVBURURfRElSTElTVCwKKwkgIE5fKCJAQSBtZW1vcnkgZm9yIGVuY3J5cHRlZCBAZCBsaXN0XG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogUGFzcyAxYiBlcnJvcnMgKi8KKworCS8qIFBhc3MgMUI6IFJlc2NhbiBmb3IgZHVwbGljYXRlL2JhZCBibG9ja3MgKi8KKwl7IFBSXzFCX1BBU1NfSEVBREVSLAorCSAgTl8oIlxuUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKwkgICJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIER1cGxpY2F0ZS9iYWQgYmxvY2socykgaGVhZGVyICovCisJeyBQUl8xQl9EVVBfQkxPQ0tfSEVBREVSLAorCSAgTl8oIkBtIEBiKHMpIGluIEBpICVpOiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIER1cGxpY2F0ZS9iYWQgYmxvY2socykgaW4gaW5vZGUgKi8KKwl7IFBSXzFCX0RVUF9CTE9DSywKKwkgICIgJWIiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX0RCTE9DSyB8IFBSX1BSRUVOX05PSERSIH0sCisKKwkvKiBEdXBsaWNhdGUvYmFkIGJsb2NrKHMpIGVuZCAqLworCXsgUFJfMUJfRFVQX0JMT0NLX0VORCwKKwkgICJcbiIsCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fTk9IRFIgfSwKKworCS8qIEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAqLworCXsgUFJfMUJfSVNDQU5fRVJST1IsCisJICBOXygiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKi8KKwl7IFBSXzFCX0FMTE9DQVRFX0lCSVRNQVBfRVJST1IsCisJICBOXygiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyAqLworCXsgUFJfMUJfQkxPQ0tfSVRFUkFURSwKKwkgIE5fKCJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIGFkanVzdGluZyBFQSByZWZjb3VudCAqLworCXsgUFJfMUJfQURKX0VBX1JFRkNPVU5ULAorCSAgTl8oIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIFBhc3MgMUM6IFNjYW4gZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLiAqLworCXsgUFJfMUNfUEFTU19IRUFERVIsCisJICBOXygiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisKKwkvKiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyAqLworCXsgUFJfMURfUEFTU19IRUFERVIsCisJICBOXygiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBGaWxlIGhhcyBkdXBsaWNhdGUgYmxvY2tzICovCisJeyBQUl8xRF9EVVBfRklMRSwKKwkgIE5fKCJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisJICAiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBMaXN0IG9mIGZpbGVzIHNoYXJpbmcgZHVwbGljYXRlIGJsb2NrcyAqLworCXsgUFJfMURfRFVQX0ZJTEVfTElTVCwKKwkgIE5fKCJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEZpbGUgc2hhcmluZyBibG9ja3Mgd2l0aCBmaWxlc3lzdGVtIG1ldGFkYXRhICAqLworCXsgUFJfMURfU0hBUkVfTUVUQURBVEEsCisJICBOXygiXHQ8QGYgbWV0YWRhdGE+XG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBSZXBvcnQgb2YgaG93IG1hbnkgZHVwbGljYXRlL2JhZCBpbm9kZXMgKi8KKwl7IFBSXzFEX05VTV9EVVBfSU5PREVTLAorCSAgTl8oIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRHVwbGljYXRlZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4gKi8KKwl7IFBSXzFEX0RVUF9CTE9DS1NfREVBTFQsCisJICBOXygiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENsb25lIGR1cGxpY2F0ZS9iYWQgYmxvY2tzPyAqLworCXsgUFJfMURfQ0xPTkVfUVVFU1RJT04sCisJICAiIiwgUFJPTVBUX0NMT05FLCBQUl9OT19PSyB9LAorCisJLyogRGVsZXRlIGZpbGU/ICovCisJeyBQUl8xRF9ERUxFVEVfUVVFU1RJT04sCisJICAiIiwgUFJPTVBUX0RFTEVURSwgMCB9LAorCisJLyogQ291bGRuJ3QgY2xvbmUgZmlsZSAoZXJyb3IpICovCisJeyBQUl8xRF9DTE9ORV9FUlJPUiwKKwkgIE5fKCJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIiksIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBQYXNzIDIgZXJyb3JzICovCisKKwkvKiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgKi8KKwl7IFBSXzJfUEFTU19IRUFERVIsCisJICBOXygiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEJhZCBpbm9kZSBudW1iZXIgZm9yICcuJyAqLworCXsgUFJfMl9CQURfSU5PREVfRE9ULAorCSAgTl8oIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBFbnRyeSAneHh4eCcgaW4gL2EvYi9jIGhhcyBiYWQgaW5vZGUgbnVtYmVyLiovCisJeyBQUl8yX0JBRF9JTk8sCisJICBOXygiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBFbnRyeSAneHh4eCcgaW4gL2EvYi9jIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSBubm5ubi4qLworCXsgUFJfMl9VTlVTRURfSU5PREUsCisJICBOXygiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIERpcmVjdHJ5IGVudHJ5IGlzIGxpbmsgdG8gJy4nICovCisJeyBQUl8yX0xJTktfRE9ULAorCSAgTl8oIkBFIEBMIHRvICcuJyAgIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIERpcmVjdG9yeSBlbnRyeSBwb2ludHMgdG8gaW5vZGUgbm93IGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2sgKi8KKwl7IFBSXzJfQkJfSU5PREUsCisJICBOXygiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRGlyZWN0b3J5IGVudHJ5IGNvbnRhaW5zIGEgbGluayB0byBhIGRpcmVjdG9yeSAqLworCXsgUFJfMl9MSU5LX0RJUiwKKwkgIE5fKCJARSBATCB0byBAZCAlUCAoJURpKS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBEaXJlY3RvcnkgZW50cnkgY29udGFpbnMgYSBsaW5rIHRvIHRoZSByb290IGRpcmVjdHJ5ICovCisJeyBQUl8yX0xJTktfUk9PVCwKKwkgIE5fKCJARSBATCB0byB0aGUgQHIuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRGlyZWN0b3J5IGVudHJ5IGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUgKi8KKwl7IFBSXzJfQkFEX05BTUUsCisJICBOXygiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICovCisJeyBQUl8yX01JU1NJTkdfRE9ULAorCSAgTl8oIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICovCisJeyBQUl8yX01JU1NJTkdfRE9UX0RPVCwKKwkgIE5fKCJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIEZpcnN0IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSBkb2Vzbid0IGNvbnRhaW4gJy4nICovCisJeyBQUl8yXzFTVF9OT1RfRE9ULAorCSAgTl8oIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIFNlY29uZCBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgZG9lc24ndCBjb250YWluICcuLicgKi8KKwl7IFBSXzJfMk5EX05PVF9ET1RfRE9ULAorCSAgTl8oIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIGlfZmFkZHIgc2hvdWxkIGJlIHplcm8gKi8KKwl7IFBSXzJfRkFERFJfWkVSTywKKwkgIE5fKCJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBpX2ZpbGVfYWNsIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0ZJTEVfQUNMX1pFUk8sCisJICBOXygiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogaV9kaXJfYWNsIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0RJUl9BQ0xfWkVSTywKKwkgIE5fKCJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGlfZnJhZyBzaG91bGQgYmUgemVybyAqLworCXsgUFJfMl9GUkFHX1pFUk8sCisJICBOXygiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGlfZnNpemUgc2hvdWxkIGJlIHplcm8gKi8KKwl7IFBSXzJfRlNJWkVfWkVSTywKKwkgIE5fKCJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGlub2RlIGhhcyBiYWQgbW9kZSAqLworCXsgUFJfMl9CQURfTU9ERSwKKwkgIE5fKCJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIGRpcmVjdG9yeSBjb3JydXB0ZWQgKi8KKwl7IFBSXzJfRElSX0NPUlJVUFRFRCwKKwkgIE5fKCJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iKSwKKwkgIFBST01QVF9TQUxWQUdFLCAwIH0sCisKKwkvKiBmaWxlbmFtZSB0b28gbG9uZyAqLworCXsgUFJfMl9GSUxFTkFNRV9MT05HLAorCSAgTl8oIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIiksCisJICBQUk9NUFRfVFJVTkNBVEUsIDAgfSwKKworCS8qIERpcmVjdG9yeSBpbm9kZSBoYXMgYSBtaXNzaW5nIGJsb2NrIChob2xlKSAqLworCXsgUFJfMl9ESVJFQ1RPUllfSE9MRSwKKwkgIE5fKCJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiKSwKKwkgIFBST01QVF9BTExPQ0FURSwgMCB9LAorCisJLyogJy4nIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQgKi8KKwl7IFBSXzJfRE9UX05VTExfVEVSTSwKKwkgIE5fKCInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiAnLi4nIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQgKi8KKwl7IFBSXzJfRE9UX0RPVF9OVUxMX1RFUk0sCisJICBOXygiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIElsbGVnYWwgY2hhcmFjdGVyIGRldmljZSBpbm9kZSAqLworCXsgUFJfMl9CQURfQ0hBUl9ERVYsCisJICBOXygiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogSWxsZWdhbCBibG9jayBkZXZpY2UgaW5vZGUgKi8KKwl7IFBSXzJfQkFEX0JMT0NLX0RFViwKKwkgIE5fKCJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIER1cGxpY2F0ZSAnLicgZW50cnkgKi8KKwl7IFBSXzJfRFVQX0RPVCwKKwkgIE5fKCJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIiksCisJICBQUk9NUFRfRklYLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUgJy4uJyBlbnRyeSAqLworCXsgUFJfMl9EVVBfRE9UX0RPVCwKKwkgIE5fKCJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gKi8KKwl7IFBSXzJfTk9fRElSSU5GTywKKwkgIE5fKCJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRmluYWwgcmVjX2xlbiBpcyB3cm9uZyAqLworCXsgUFJfMl9GSU5BTF9SRUNMRU4sCisJICBOXygiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogRXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlICovCisJeyBQUl8yX0FMTE9DQVRFX0lDT1VOVCwKKwkgIE5fKCJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3MgKi8KKwl7IFBSXzJfREJMSVNUX0lURVJBVEUsCisJICBOXygiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICovCisJeyBQUl8yX1JFQURfRElSQkxPQ0ssCisJICBOXygiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIiksCisJICBQUk9NUFRfQ09OVElOVUUsIDAgfSwKKworCS8qIEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICovCisJeyBQUl8yX1dSSVRFX0RJUkJMT0NLLAorCSAgTl8oIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIpLAorCSAgUFJPTVBUX0NPTlRJTlVFLCAwIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgKi8KKwl7IFBSXzJfQUxMT0NfRElSQk9DSywKKwkgIE5fKCJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgKi8KKwl7IFBSXzJfREVBTExPQ19JTk9ERSwKKwkgIE5fKCJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaXMgYmlnLiAgU3BsaXQ/ICovCisJeyBQUl8yX1NQTElUX0RPVCwKKwkgIE5fKCJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIiksCisJICBQUk9NUFRfU1BMSVQsIFBSX05PX09LIH0sCisKKwkvKiBJbGxlZ2FsIEZJRk8gaW5vZGUgKi8KKwl7IFBSXzJfQkFEX0ZJRk8sCisJICBOXygiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIElsbGVnYWwgc29ja2V0IGlub2RlICovCisJeyBQUl8yX0JBRF9TT0NLRVQsCisJICBOXygiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogRGlyZWN0b3J5IGZpbGV0eXBlIG5vdCBzZXQgKi8KKwl7IFBSXzJfU0VUX0ZJTEVUWVBFLAorCSAgTl8oIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB8IFBSX05PX05PTVNHIH0sCisKKwkvKiBEaXJlY3RvcnkgZmlsZXR5cGUgaW5jb3JyZWN0ICovCisJeyBQUl8yX0JBRF9GSUxFVFlQRSwKKwkgIE5fKCJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIERpcmVjdG9yeSBmaWxldHlwZSBzZXQgb24gZmlsZXN5c3RlbSAqLworCXsgUFJfMl9DTEVBUl9GSUxFVFlQRSwKKwkgIE5fKCJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBEaXJlY3RvcnkgZmlsZW5hbWUgaXMgbnVsbCAqLworCXsgUFJfMl9OVUxMX05BTUUsCisJICBOXygiQEUgaGFzIGEgQHogbmFtZS5cbiIpLAorCSAgUFJPTVBUX0NMRUFSLCAwIH0sCisKKwkvKiBJbnZhbGlkIHN5bWxpbmsgKi8KKwl7IFBSXzJfSU5WQUxJRF9TWU1MSU5LLAorCSAgTl8oIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogaV9maWxlX2FjbCAoZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrKSBpcyBiYWQgKi8KKwl7IFBSXzJfRklMRV9BQ0xfQkFELAorCSAgTl8oIkBhIEBiIEBGIEBuICglSWYpLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIEZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBoYXMgbm8gc3VjaCBmbGFnIGluIHNiICovCisJeyBQUl8yX0ZFQVRVUkVfTEFSR0VfRklMRVMsCisJICBOXygiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iKSwKKwkgIFBST01QVF9GSVgsIDAgfSwKKworCS8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IG5vdCByZWZlcmVuY2VkICovCisJeyBQUl8yX0hUUkVFX05PVFJFRiwKKwkgIE5fKCJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IHJlZmVyZW5jZWQgdHdpY2UgKi8KKwl7IFBSXzJfSFRSRUVfRFVQUkVGLAorCSAgTl8oIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBoYXMgYmFkIG1pbiBoYXNoICovCisJeyBQUl8yX0hUUkVFX01JTl9IQVNILAorCSAgTl8oIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBoYXMgYmFkIG1heCBoYXNoICovCisJeyBQUl8yX0hUUkVFX01BWF9IQVNILAorCSAgTl8oIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBDbGVhciBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSAqLworCXsgUFJfMl9IVFJFRV9DTEVBUiwKKwkgIE5fKCJAbiBAaCAlZCAoJXEpLiAgIiksIFBST01QVF9DTEVBUl9IVFJFRSwgMCB9LAorCisJLyogQmFkIGJsb2NrIGluIGh0cmVlIGludGVyaW9yIG5vZGUgKi8KKwl7IFBSXzJfSFRSRUVfQkFEQkxLLAorCSAgTl8oIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgMCB9LAorCisJLyogRXJyb3IgYWRqdXN0aW5nIEVBIHJlZmNvdW50ICovCisJeyBQUl8yX0FESl9FQV9SRUZDT1VOVCwKKwkgIE5fKCJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogSW52YWxpZCBIVFJFRSByb290IG5vZGUgKi8KKwl7IFBSXzJfSFRSRUVfQkFEX1JPT1QsCisJICBOXygiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIiksCisJICBQUk9NUFRfQ0xFQVJfSFRSRUUsIFBSX1BSRUVOX09LIH0sCisKKwkvKiBJbnZhbGlkIEhUUkVFIGxpbWl0ICovCisJeyBQUl8yX0hUUkVFX0JBRF9MSU1JVCwKKwkgIE5fKCJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIpLAorCSAgUFJPTVBUX0NMRUFSX0hUUkVFLCBQUl9QUkVFTl9PSyB9LAorCisJLyogSW52YWxpZCBIVFJFRSBjb3VudCAqLworCXsgUFJfMl9IVFJFRV9CQURfQ09VTlQsCisJICBOXygiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEhUUkVFIGludGVyaW9yIG5vZGUgaGFzIG91dC1vZi1vcmRlciBoYXNoZXMgaW4gdGFibGUgKi8KKwl7IFBSXzJfSFRSRUVfSEFTSF9PUkRFUiwKKwkgIE5fKCJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iKSwKKwkgIFBST01QVF9DTEVBUl9IVFJFRSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IGhhcyBpbnZhbGlkIGRlcHRoICovCisJeyBQUl8yX0hUUkVFX0JBRF9ERVBUSCwKKwkgIE5fKCJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIER1cGxpY2F0ZSBkaXJlY3RvcnkgZW50cnkgZm91bmQgKi8KKwl7IFBSXzJfRFVQTElDQVRFX0RJUkVOVCwKKwkgIE5fKCJEdXBsaWNhdGUgQEUgZm91bmQuICAiKSwKKwkgIFBST01QVF9DTEVBUiwgMCB9LAorCisJLyogTm9uLXVuaXF1ZSBmaWxlbmFtZSBmb3VuZCAqLworCXsgUFJfMl9OT05fVU5JUVVFX0ZJTEUsIC8qIHhnZXR0ZXh0OiBuby1jLWZvcm1hdCAqLworCSAgTl8oIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG5SZW5hbWUgdG8gJXMiKSwKKwkgIFBST01QVF9OVUxMLCAwIH0sCisKKwkvKiBEdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJ5IGZvdW5kICovCisJeyBQUl8yX1JFUE9SVF9EVVBfRElSRU5ULAorCSAgTl8oIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cblx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIGlfYmxvY2tzX2hpIHNob3VsZCBiZSB6ZXJvICovCisJeyBQUl8yX0JMT0NLU19ISV9aRVJPLAorCSAgTl8oImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIiksCisJICBQUk9NUFRfQ0xFQVIsIDAgfSwKKworCS8qIFVuZXhwZWN0ZWQgSFRSRUUgYmxvY2sgKi8KKwl7IFBSXzJfVU5FWFBFQ1RFRF9IVFJFRV9CTE9DSywKKwkgIE5fKCJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iKSwgUFJPTVBUX0NMRUFSX0hUUkVFLCAwIH0sCisKKwkvKiBJbm9kZSBmb3VuZCBpbiBncm91cCB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldCAqLworCXsgUFJfMl9JTk9SRUZfQkdfSU5PX1VOSU5JVCwKKwkgIE5fKCJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIElub2RlIGZvdW5kIGluIGdyb3VwIHVudXNlZCBpbm9kZXMgYXJlYSAqLworCXsgUFJfMl9JTk9SRUZfSU5fVU5VU0VELAorCSAgTl8oIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogaV9ibG9ja3NfaGkgc2hvdWxkIGJlIHplcm8gKi8KKwl7IFBSXzJfSV9GSUxFX0FDTF9ISV9aRVJPLAorCSAgTl8oImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iKSwKKwkgIFBST01QVF9DTEVBUiwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFBhc3MgMyBlcnJvcnMgKi8KKworCS8qIFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eSAqLworCXsgUFJfM19QQVNTX0hFQURFUiwKKwkgIE5fKCJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkICovCisJeyBQUl8zX05PX1JPT1RfSU5PREUsCisJICBOXygiQHIgbm90IGFsbG9jYXRlZC4gICIpLAorCSAgUFJPTVBUX0FMTE9DQVRFLCAwIH0sCisKKwkvKiBObyByb29tIGluIGxvc3QrZm91bmQgKi8KKwl7IFBSXzNfRVhQQU5EX0xGX0RJUiwKKwkgIE5fKCJObyByb29tIGluIEBsIEBkLiAgIiksCisJICBQUk9NUFRfRVhQQU5ELCAwIH0sCisKKwkvKiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgKi8KKwl7IFBSXzNfVU5DT05ORUNURURfRElSLAorCSAgTl8oIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIpLAorCSAgUFJPTVBUX0NPTk5FQ1QsIDAgfSwKKworCS8qIC9sb3N0K2ZvdW5kIG5vdCBmb3VuZCAqLworCXsgUFJfM19OT19MRl9ESVIsCisJICBOXygiL0BsIG5vdCBmb3VuZC4gICIpLAorCSAgUFJPTVBUX0NSRUFURSwgUFJfUFJFRU5fT0sgfSwKKworCS8qIC4uIGVudHJ5IGlzIGluY29ycmVjdCAqLworCXsgUFJfM19CQURfRE9UX0RPVCwKKwkgIE5fKCInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgMCB9LAorCisJLyogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QgKi8KKwl7IFBSXzNfTk9fTFBGLAorCSAgTl8oIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQgKi8KKwl7IFBSXzNfQ0FOVF9FWFBBTkRfTFBGLAorCSAgTl8oIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQ291bGQgbm90IHJlY29ubmVjdCBpbm9kZSAqLworCXsgUFJfM19DQU5UX1JFQ09OTkVDVCwKKwkgIE5fKCJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQgKi8KKwl7IFBSXzNfRVJSX0ZJTkRfTFBGLAorCSAgTl8oIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIGluIGV4dDJmc19uZXdfYmxvY2sgd2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQgKi8KKwl7IFBSXzNfRVJSX0xQRl9ORVdfQkxPQ0ssCisJICBOXygiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIGluIGV4dDJmc19uZXdfaW5vZGUgd2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQgKi8KKwl7IFBSXzNfRVJSX0xQRl9ORVdfSU5PREUsCisJICBOXygiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIGluIGV4dDJmc19uZXdfZGlyX2Jsb2NrIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisJeyBQUl8zX0VSUl9MUEZfTkVXX0RJUl9CTE9DSywKKwkgIE5fKCJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciB3aGlsZSB3cml0aW5nIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmQgKi8KKwl7IFBSXzNfRVJSX0xQRl9XUklURV9CTE9DSywKKwkgIE5fKCJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgKi8KKwl7IFBSXzNfQURKVVNUX0lOT0RFLAorCSAgTl8oIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQ291bGRuJ3QgZml4IHBhcmVudCBkaXJlY3RvcnkgLS0gZXJyb3IgKi8KKwl7IFBSXzNfRklYX1BBUkVOVF9FUlIsCisJICBOXygiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cblxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogQ291bGRuJ3QgZml4IHBhcmVudCBkaXJlY3RvcnkgLS0gY291bGRuJ3QgZmluZCBpdCAqLworCXsgUFJfM19GSVhfUEFSRU5UX05PRklORCwKKwkgIE5fKCJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBFcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAqLworCXsgUFJfM19BTExPQ0FURV9JQklUTUFQX0VSUk9SLAorCSAgTl8oIkBBIEBpIEBCICglTik6ICVtXG4iKSwKKwkgIFBST01QVF9OT05FLCBQUl9GQVRBTCB9LAorCisJLyogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKi8KKwl7IFBSXzNfQ1JFQVRFX1JPT1RfRVJST1IsCisJICBOXygiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGNyZWF0aW5nIGxvc3QgYW5kIGZvdW5kIGRpcmVjdG9yeSAqLworCXsgUFJfM19DUkVBVEVfTFBGX0VSUk9SLAorCSAgTl8oIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUm9vdCBpbm9kZSBpcyBub3QgZGlyZWN0b3J5OyBhYm9ydGluZyAqLworCXsgUFJfM19ST09UX05PVF9ESVJfQUJPUlQsCisJICBOXygiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLiAqLworCXsgUFJfM19OT19ST09UX0lOT0RFX0FCT1JULAorCSAgTl8oIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyAqLworCXsgUFJfM19OT19ESVJJTkZPLAorCSAgTl8oIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX0ZBVEFMIH0sCisKKwkvKiBMb3N0K2ZvdW5kIG5vdCBhIGRpcmVjdG9yeSAqLworCXsgUFJfM19MUEZfTk9URElSLAorCSAgTl8oIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIiksCisJICBQUk9NUFRfVU5MSU5LLCAwIH0sCisKKwkvKiBQYXNzIDNBIERpcmVjdG9yeSBPcHRpbWl6YXRpb24JKi8KKworCS8qIFBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXMgKi8KKwl7IFBSXzNBX1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcmllcyAqLworCXsgUFJfM0FfT1BUSU1JWkVfSVRFUiwKKwkgIE5fKCJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIpLAorCSAgUFJPTVBUX05PTkUsIDAgfSwKKworCS8qIEVycm9yIHJlaGFzaCBkaXJlY3RvcnkgKi8KKwl7IFBSXzNBX09QVElNSVpFX0RJUl9FUlIsCisJICBOXygiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogUmVoYXNoaW5nIGRpciBoZWFkZXIgKi8KKwl7IFBSXzNBX09QVElNSVpFX0RJUl9IRUFERVIsCisJICBOXygiT3B0aW1pemluZyBkaXJlY3RvcmllczogIiksCisJICBQUk9NUFRfTk9ORSwgUFJfTVNHX09OTFkgfSwKKworCS8qIFJlaGFzaGluZyBkaXJlY3RvcnkgJWQgKi8KKwl7IFBSXzNBX09QVElNSVpFX0RJUiwKKwkgICIgJWQiLAorCSAgUFJPTVBUX05PTkUsIFBSX0xBVENIX09QVElNSVpFX0RJUiB8IFBSX1BSRUVOX05PSERSfSwKKworCS8qIFJlaGFzaGluZyBkaXIgZW5kICovCisJeyBQUl8zQV9PUFRJTUlaRV9ESVJfRU5ELAorCSAgIlxuIiwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9OT0hEUiB9LAorCisJLyogUGFzcyA0IGVycm9ycyAqLworCisJLyogUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzICovCisJeyBQUl80X1BBU1NfSEVBREVSLAorCSAgTl8oIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIiksCisJICBQUk9NUFRfTk9ORSwgMCB9LAorCisJLyogVW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAqLworCXsgUFJfNF9aRVJPX0xFTl9JTk9ERSwKKwkgIE5fKCJAdSBAeiBAaSAlaS4gICIpLAorCSAgUFJPTVBUX0NMRUFSLCBQUl9QUkVFTl9PS3xQUl9OT19PSyB9LAorCisJLyogVW5hdHRhY2hlZCBpbm9kZSAqLworCXsgUFJfNF9VTkFUVEFDSEVEX0lOT0RFLAorCSAgTl8oIkB1IEBpICVpXG4iKSwKKwkgIFBST01QVF9DT05ORUNULCAwIH0sCisKKwkvKiBJbm9kZSByZWYgY291bnQgd3JvbmcgKi8KKwl7IFBSXzRfQkFEX1JFRl9DT1VOVCwKKwkgIE5fKCJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCXsgUFJfNF9JTkNPTlNJU1RFTlRfQ09VTlQsCisJICBOXygiV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbiIKKwkgICJcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuIgorCSAgIkBpX2xpbmtfaW5mb1slaV0gaXMgJU4sIEBpLmlfbGlua3NfY291bnQgaXMgJUlsLiAgIgorCSAgIlRoZXkgQHMgdGhlIHNhbWUhXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBQYXNzIDUgZXJyb3JzICovCisKKwkvKiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KKwl7IFBSXzVfUEFTU19IRUFERVIsCisJICBOXygiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iKSwKKwkgIFBST01QVF9OT05FLCAwIH0sCisKKwkvKiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gKi8KKwl7IFBSXzVfSU5PREVfQk1BUF9QQURESU5HLAorCSAgTl8oIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAqLworCXsgUFJfNV9CTE9DS19CTUFQX1BBRERJTkcsCisJICBOXygiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIiksCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB9LAorCisJLyogQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzIGhlYWRlciAqLworCXsgUFJfNV9CTE9DS19CSVRNQVBfSEVBREVSLAorCSAgTl8oIkBiIEBCIGRpZmZlcmVuY2VzOiAiKSwKKwkgIFBST01QVF9OT05FLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHfSwKKworCS8qIEJsb2NrIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9CTE9DS19VTlVTRUQsCisJICAiIC0lYiIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfQkJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEJsb2NrIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisJeyBQUl81X0JMT0NLX1VTRUQsCisJICAiICslYiIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfQkJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKwl7IFBSXzVfQkxPQ0tfQklUTUFQX0VORCwKKwkgICJcbiIsCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXMgaGVhZGVyICovCisJeyBQUl81X0lOT0RFX0JJVE1BUF9IRUFERVIsCisJICBOXygiQGkgQEIgZGlmZmVyZW5jZXM6ICIpLAorCSAgUFJPTVBUX05PTkUsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIElub2RlIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9JTk9ERV9VTlVTRUQsCisJICAiIC0laSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfSUJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIElub2RlIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisJeyBQUl81X0lOT0RFX1VTRUQsCisJICAiICslaSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfSUJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIElub2RlIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKwl7IFBSXzVfSU5PREVfQklUTUFQX0VORCwKKwkgICJcbiIsCisJICBQUk9NUFRfRklYLCBQUl9QUkVFTl9PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBGcmVlIGlub2RlcyBjb3VudCBmb3IgZ3JvdXAgd3JvbmcgKi8KKwl7IFBSXzVfRlJFRV9JTk9ERV9DT1VOVF9HUk9VUCwKKwkgIE5fKCJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIERpcmVjdG9yaWVzIGNvdW50IGZvciBncm91cCB3cm9uZyAqLworCXsgUFJfNV9GUkVFX0RJUl9DT1VOVF9HUk9VUCwKKwkgIE5fKCJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICovCisJeyBQUl81X0ZSRUVfSU5PREVfQ09VTlQsCisJICBOXygiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBGcmVlIGJsb2NrcyBjb3VudCBmb3IgZ3JvdXAgd3JvbmcgKi8KKwl7IFBSXzVfRlJFRV9CTE9DS19DT1VOVF9HUk9VUCwKKwkgIE5fKCJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iKSwKKwkgIFBST01QVF9GSVgsIFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICovCisJeyBQUl81X0ZSRUVfQkxPQ0tfQ09VTlQsCisJICBOXygiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfCBQUl9OT19PSyB8IFBSX1BSRUVOX05PTVNHIH0sCisKKwkvKiBQcm9ncmFtbWluZyBlcnJvcjogYml0bWFwIGVuZHBvaW50cyBkb24ndCBtYXRjaCAqLworCXsgUFJfNV9CTUFQX0VORFBPSU5UUywKKwkgIE5fKCJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0ICIKKwkgICJtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKi8KKwl7IFBSXzVfRlVER0VfQklUTUFQX0VSUk9SLAorCSAgTl8oIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwICovCisJeyBQUl81X0NPUFlfSUJJVE1BUF9FUlJPUiwKKwkgIE5fKCJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwICovCisJeyBQUl81X0NPUFlfQkJJVE1BUF9FUlJPUiwKKwkgIE5fKCJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIiksCisJICBQUk9NUFRfTk9ORSwgUFJfRkFUQUwgfSwKKworCS8qIEJsb2NrIHJhbmdlIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9CTE9DS19SQU5HRV9VTlVTRUQsCisJICAiIC0oJWItLSVjKSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfQkJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEJsb2NrIHJhbmdlIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisJeyBQUl81X0JMT0NLX1JBTkdFX1VTRUQsCisJICAiICsoJWItLSVjKSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfQkJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIElub2RlIHJhbmdlIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworCXsgUFJfNV9JTk9ERV9SQU5HRV9VTlVTRUQsCisJICAiIC0oJWktLSVqKSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfSUJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIElub2RlIHJhbmdlIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisJeyBQUl81X0lOT0RFX1JBTkdFX1VTRUQsCisJICAiICsoJWktLSVqKSIsCisJICBQUk9NUFRfTk9ORSwgUFJfTEFUQ0hfSUJJVE1BUCB8IFBSX1BSRUVOX09LIHwgUFJfUFJFRU5fTk9NU0cgfSwKKworCS8qIEdyb3VwIE4gYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUICovCisJeyBQUl81X0JMT0NLX1VOSU5JVCwKKwkgIE5fKCJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIEdyb3VwIE4gaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUICovCisJeyBQUl81X0lOT0RFX1VOSU5JVCwKKwkgIE5fKCJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIpLAorCSAgUFJPTVBUX0ZJWCwgUFJfUFJFRU5fT0sgfSwKKworCS8qIFBvc3QtUGFzcyA1IGVycm9ycyAqLworCisJLyogUmVjcmVhdGUgam91cm5hbCBpZiBFMkZfRkxBR19KT1VSTkFMX0lOT0RFIGZsYWcgaXMgc2V0ICovCisJeyBQUl82X1JFQ1JFQVRFX0pPVVJOQUwsCisJICBOXygiUmVjcmVhdGUgQGoiKSwKKwkgIFBST01QVF9OVUxMLCBQUl9QUkVFTl9PSyB8IFBSX05PX09LIH0sCisKKwkvKiBVcGRhdGUgcXVvdGEgaW5mb3JtYXRpb24gaWYgaXQgaXMgaW5jb25zaXN0ZW50ICovCisJeyBQUl82X1VQREFURV9RVU9UQVMsCisJICBOXygiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iKSwKKwkgIFBST01QVF9OVUxMLCBQUl9QUkVFTl9PSyB9LAorCisJeyAwIH0KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBsYXRjaCBmbGFncyByZWdpc3Rlci4gIEl0IGFsbG93cyBzZXZlcmFsIHByb2JsZW1zIHRvIGJlCisgKiAibGF0Y2hlZCIgdG9nZXRoZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHVzZXIgaGFzIHRvIGFuc3dlciBidXQgb25lCisgKiBxdWVzdGlvbiBmb3IgdGhlIHNldCBvZiBwcm9ibGVtcywgYW5kIGFsbCBvZiB0aGUgYXNzb2NpYXRlZAorICogcHJvYmxlbXMgd2lsbCBiZSBlaXRoZXIgZml4ZWQgb3Igbm90IGZpeGVkLgorICovCitzdGF0aWMgc3RydWN0IGxhdGNoX2Rlc2NyIHByX2xhdGNoX2luZm9bXSA9IHsKKwl7IFBSX0xBVENIX0JMT0NLLCBQUl8xX0lOT0RFX0JMT0NLX0xBVENILCAwIH0sCisJeyBQUl9MQVRDSF9CQkxPQ0ssIFBSXzFfSU5PREVfQkJMT0NLX0xBVENILCAwIH0sCisJeyBQUl9MQVRDSF9JQklUTUFQLCBQUl81X0lOT0RFX0JJVE1BUF9IRUFERVIsIFBSXzVfSU5PREVfQklUTUFQX0VORCB9LAorCXsgUFJfTEFUQ0hfQkJJVE1BUCwgUFJfNV9CTE9DS19CSVRNQVBfSEVBREVSLCBQUl81X0JMT0NLX0JJVE1BUF9FTkQgfSwKKwl7IFBSX0xBVENIX1JFTE9DLCBQUl8wX1JFTE9DQVRFX0hJTlQsIDAgfSwKKwl7IFBSX0xBVENIX0RCTE9DSywgUFJfMUJfRFVQX0JMT0NLX0hFQURFUiwgUFJfMUJfRFVQX0JMT0NLX0VORCB9LAorCXsgUFJfTEFUQ0hfTE9XX0RUSU1FLCBQUl8xX09SUEhBTl9MSVNUX1JFRlVHRUVTLCAwIH0sCisJeyBQUl9MQVRDSF9UT09CSUcsIFBSXzFfSU5PREVfVE9PQklHLCAwIH0sCisJeyBQUl9MQVRDSF9PUFRJTUlaRV9ESVIsIFBSXzNBX09QVElNSVpFX0RJUl9IRUFERVIsIFBSXzNBX09QVElNSVpFX0RJUl9FTkQgfSwKKwl7IFBSX0xBVENIX0JHX0NIRUNLU1VNLCBQUl8wX0dEVF9DU1VNX0xBVENILCAwIH0sCisJeyAtMSwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBlMmZzY2tfcHJvYmxlbSAqZmluZF9wcm9ibGVtKHByb2JsZW1fdCBjb2RlKQoreworCWludAlpOworCisJZm9yIChpPTA7IHByb2JsZW1fdGFibGVbaV0uZTJwX2NvZGU7IGkrKykgeworCQlpZiAocHJvYmxlbV90YWJsZVtpXS5lMnBfY29kZSA9PSBjb2RlKQorCQkJcmV0dXJuICZwcm9ibGVtX3RhYmxlW2ldOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsYXRjaF9kZXNjciAqZmluZF9sYXRjaChpbnQgY29kZSkKK3sKKwlpbnQJaTsKKworCWZvciAoaT0wOyBwcl9sYXRjaF9pbmZvW2ldLmxhdGNoX2NvZGUgPj0gMDsgaSsrKSB7CisJCWlmIChwcl9sYXRjaF9pbmZvW2ldLmxhdGNoX2NvZGUgPT0gY29kZSkKKwkJCXJldHVybiAmcHJfbGF0Y2hfaW5mb1tpXTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbmRfcHJvYmxlbV9sYXRjaChlMmZzY2tfdCBjdHgsIGludCBtYXNrKQoreworCXN0cnVjdCBsYXRjaF9kZXNjciAqbGRlc2M7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWludCBhbnN3ZXIgPSAtMTsKKworCWxkZXNjID0gZmluZF9sYXRjaChtYXNrKTsKKwlpZiAobGRlc2MtPmVuZF9tZXNzYWdlICYmIChsZGVzYy0+ZmxhZ3MgJiBQUkxfTEFUQ0hFRCkpIHsKKwkJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwkJYW5zd2VyID0gZml4X3Byb2JsZW0oY3R4LCBsZGVzYy0+ZW5kX21lc3NhZ2UsICZwY3R4KTsKKwl9CisJbGRlc2MtPmZsYWdzICY9IH4oUFJMX1ZBUklBQkxFKTsKKwlyZXR1cm4gYW5zd2VyOworfQorCitpbnQgc2V0X2xhdGNoX2ZsYWdzKGludCBtYXNrLCBpbnQgc2V0ZmxhZ3MsIGludCBjbGVhcmZsYWdzKQoreworCXN0cnVjdCBsYXRjaF9kZXNjciAqbGRlc2M7CisKKwlsZGVzYyA9IGZpbmRfbGF0Y2gobWFzayk7CisJaWYgKCFsZGVzYykKKwkJcmV0dXJuIC0xOworCWxkZXNjLT5mbGFncyB8PSBzZXRmbGFnczsKKwlsZGVzYy0+ZmxhZ3MgJj0gfmNsZWFyZmxhZ3M7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnZXRfbGF0Y2hfZmxhZ3MoaW50IG1hc2ssIGludCAqdmFsdWUpCit7CisJc3RydWN0IGxhdGNoX2Rlc2NyICpsZGVzYzsKKworCWxkZXNjID0gZmluZF9sYXRjaChtYXNrKTsKKwlpZiAoIWxkZXNjKQorCQlyZXR1cm4gLTE7CisJKnZhbHVlID0gbGRlc2MtPmZsYWdzOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFyX3Byb2JsZW1fY29udGV4dChzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpjdHgpCit7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKHN0cnVjdCBwcm9ibGVtX2NvbnRleHQpKTsKKwljdHgtPmJsa2NvdW50ID0gLTE7CisJY3R4LT5ncm91cCA9IC0xOworfQorCitzdGF0aWMgdm9pZCByZWNvbmZpZ3VyZV9ib29sKGUyZnNja190IGN0eCwgc3RydWN0IGUyZnNja19wcm9ibGVtICpwdHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmtleSwgaW50IG1hc2ssIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50CXZhbDsKKworCXZhbCA9IChwdHItPmZsYWdzICYgbWFzayk7CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJwcm9ibGVtcyIsIGtleSwgbmFtZSwgdmFsLCAmdmFsKTsKKwlpZiAodmFsKQorCQlwdHItPmZsYWdzIHw9IG1hc2s7CisJZWxzZQorCQlwdHItPmZsYWdzICY9IH5tYXNrOworfQorCisKK2ludCBmaXhfcHJvYmxlbShlMmZzY2tfdCBjdHgsIHByb2JsZW1fdCBjb2RlLCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlzdHJ1Y3QgZTJmc2NrX3Byb2JsZW0gKnB0cjsKKwlzdHJ1Y3QgbGF0Y2hfZGVzY3IgKmxkZXNjID0gMDsKKwljb25zdCBjaGFyICptZXNzYWdlOworCWludAkJZGVmX3luLCBhbnN3ZXIsIGFuczsKKwlpbnQJCXByaW50X2Fuc3dlciA9IDA7CisJaW50CQlzdXBwcmVzcyA9IDA7CisKKwlwdHIgPSBmaW5kX3Byb2JsZW0oY29kZSk7CisJaWYgKCFwdHIpIHsKKwkJcHJpbnRmKF8oIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIpLCBjb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKHB0ci0+ZmxhZ3MgJiBQUl9DT05GSUcpKSB7CisJCWNoYXIJa2V5WzldLCAqbmV3X2Rlc2MgPSBOVUxMOworCisJCXNwcmludGYoa2V5LCAiMHglMDZ4IiwgY29kZSk7CisKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKGN0eC0+cHJvZmlsZSwgInByb2JsZW1zIiwga2V5LAorCQkJCSAgICJkZXNjcmlwdGlvbiIsIDAsICZuZXdfZGVzYyk7CisJCWlmIChuZXdfZGVzYykKKwkJCXB0ci0+ZTJwX2Rlc2NyaXB0aW9uID0gbmV3X2Rlc2M7CisKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9QUkVFTl9PSywgInByZWVuX29rIik7CisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfTk9fT0ssICJub19vayIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX05PX0RFRkFVTFQsICJub19kZWZhdWx0Iik7CisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfTVNHX09OTFksICJwcmludF9tZXNzYWdlX29ubHkiKTsKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9QUkVFTl9OT01TRywgInByZWVuX25vbWVzc2FnZSIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX05PQ09MTEFURSwgIm5vX2NvbGxhdGUiKTsKKwkJcmVjb25maWd1cmVfYm9vbChjdHgsIHB0ciwga2V5LCBQUl9OT19OT01TRywgIm5vX25vbXNnIik7CisJCXJlY29uZmlndXJlX2Jvb2woY3R4LCBwdHIsIGtleSwgUFJfUFJFRU5fTk9IRFIsICJwcmVlbl9ub2hlYWRlciIpOworCQlyZWNvbmZpZ3VyZV9ib29sKGN0eCwgcHRyLCBrZXksIFBSX0ZPUkNFX05PLCAiZm9yY2Vfbm8iKTsKKwkJcHJvZmlsZV9nZXRfaW50ZWdlcihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwKKwkJCQkgICAgIm1heF9jb3VudF9wcm9ibGVtcyIsIDAsIDAsCisJCQkJICAgICZwdHItPm1heF9jb3VudCk7CisJCXByb2ZpbGVfZ2V0X2ludGVnZXIoY3R4LT5wcm9maWxlLCAicHJvYmxlbXMiLCBrZXksICJtYXhfY291bnQiLAorCQkJCSAgICBwdHItPm1heF9jb3VudCwgJnB0ci0+bWF4X2NvdW50KTsKKworCQlwdHItPmZsYWdzIHw9IFBSX0NPTkZJRzsKKwl9CisJZGVmX3luID0gMTsKKwlwdHItPmNvdW50Kys7CisJaWYgKChwdHItPmZsYWdzICYgUFJfTk9fREVGQVVMVCkgfHwKKwkgICAgKChwdHItPmZsYWdzICYgUFJfUFJFRU5fTk8pICYmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkgfHwKKwkgICAgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pKQorCQlkZWZfeW49IDA7CisKKwkvKgorCSAqIERvIHNwZWNpYWwgbGF0Y2ggcHJvY2Vzc2luZy4gIFRoaXMgaXMgd2hlcmUgd2UgYXNrIHRoZQorCSAqIGxhdGNoIHF1ZXN0aW9uLCBpZiBpdCBleGlzdHMKKwkgKi8KKwlpZiAocHRyLT5mbGFncyAmIFBSX0xBVENIX01BU0spIHsKKwkJbGRlc2MgPSBmaW5kX2xhdGNoKHB0ci0+ZmxhZ3MgJiBQUl9MQVRDSF9NQVNLKTsKKwkJaWYgKGxkZXNjLT5xdWVzdGlvbiAmJiAhKGxkZXNjLT5mbGFncyAmIFBSTF9MQVRDSEVEKSkgeworCQkJYW5zID0gZml4X3Byb2JsZW0oY3R4LCBsZGVzYy0+cXVlc3Rpb24sIHBjdHgpOworCQkJaWYgKGFucyA9PSAxKQorCQkJCWxkZXNjLT5mbGFncyB8PSBQUkxfWUVTOworCQkJaWYgKGFucyA9PSAwKQorCQkJCWxkZXNjLT5mbGFncyB8PSBQUkxfTk87CisJCQlsZGVzYy0+ZmxhZ3MgfD0gUFJMX0xBVENIRUQ7CisJCX0KKwkJaWYgKGxkZXNjLT5mbGFncyAmIFBSTF9TVVBQUkVTUykKKwkJCXN1cHByZXNzKys7CisJfQorCWlmICgocHRyLT5mbGFncyAmIFBSX1BSRUVOX05PTVNHKSAmJgorCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCXN1cHByZXNzKys7CisJaWYgKChwdHItPmZsYWdzICYgUFJfTk9fTk9NU0cpICYmCisJICAgICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykgfHwgKHB0ci0+ZmxhZ3MgJiBQUl9GT1JDRV9OTykpKQorCQlzdXBwcmVzcysrOworCWlmIChwdHItPm1heF9jb3VudCAmJiAocHRyLT5jb3VudCA+IHB0ci0+bWF4X2NvdW50KSkgeworCQlpZiAoY3R4LT5vcHRpb25zICYgKEUyRl9PUFRfTk8gfCBFMkZfT1BUX1lFUykpCisJCQlzdXBwcmVzcysrOworCQlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pICYmCisJCSAgICAocHRyLT5mbGFncyAmIFBSX1BSRUVOX09LKSkKKwkJCXN1cHByZXNzKys7CisJCWlmICgocHRyLT5mbGFncyAmIFBSX0xBVENIX01BU0spICYmCisJCSAgICAobGRlc2MtPmZsYWdzICYgKFBSTF9ZRVMgfCBQUkxfTk8pKSkKKwkJCXN1cHByZXNzKys7CisJCWlmIChwdHItPmNvdW50ID09IHB0ci0+bWF4X2NvdW50ICsgMSkgeworCQkJcHJpbnRmKCIuLi5wcm9ibGVtIDB4JTA2eCBzdXBwcmVzc2VkXG4iLAorCQkJICAgICAgIHB0ci0+ZTJwX2NvZGUpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCX0KKwl9CisJbWVzc2FnZSA9IHB0ci0+ZTJwX2Rlc2NyaXB0aW9uOworCWlmICgqbWVzc2FnZSkKKwkJbWVzc2FnZSA9IF8obWVzc2FnZSk7CisJaWYgKCFzdXBwcmVzcykgeworCQlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pICYmCisJCSAgICAhKHB0ci0+ZmxhZ3MgJiBQUl9QUkVFTl9OT0hEUikpIHsKKwkJCXByaW50ZigiJXM6ICIsIGN0eC0+ZGV2aWNlX25hbWUgPworCQkJICAgICAgIGN0eC0+ZGV2aWNlX25hbWUgOiBjdHgtPmZpbGVzeXN0ZW1fbmFtZSk7CisJCX0KKwkJaWYgKCptZXNzYWdlKQorCQkJcHJpbnRfZTJmc2NrX21lc3NhZ2Uoc3Rkb3V0LCBjdHgsIG1lc3NhZ2UsIHBjdHgsIDEsIDApOworCX0KKwlpZiAoY3R4LT5sb2dmICYmIG1lc3NhZ2UpCisJCXByaW50X2UyZnNja19tZXNzYWdlKGN0eC0+bG9nZiwgY3R4LCBtZXNzYWdlLCBwY3R4LCAxLCAwKTsKKwlpZiAoIShwdHItPmZsYWdzICYgUFJfUFJFRU5fT0spICYmIChwdHItPnByb21wdCAhPSBQUk9NUFRfTk9ORSkpCisJCXByZWVuaGFsdChjdHgpOworCisJaWYgKHB0ci0+ZmxhZ3MgJiBQUl9GQVRBTCkKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKworCWlmIChwdHItPnByb21wdCA9PSBQUk9NUFRfTk9ORSkgeworCQlpZiAocHRyLT5mbGFncyAmIFBSX05PQ09MTEFURSkKKwkJCWFuc3dlciA9IC0xOworCQllbHNlCisJCQlhbnN3ZXIgPSBkZWZfeW47CisJfSBlbHNlIHsKKwkJaWYgKHB0ci0+ZmxhZ3MgJiBQUl9GT1JDRV9OTykgeworCQkJYW5zd2VyID0gMDsKKwkJCXByaW50X2Fuc3dlciA9IDE7CisJCX0gZWxzZSBpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikgeworCQkJYW5zd2VyID0gZGVmX3luOworCQkJaWYgKCEocHRyLT5mbGFncyAmIFBSX1BSRUVOX05PTVNHKSkKKwkJCQlwcmludF9hbnN3ZXIgPSAxOworCQl9IGVsc2UgaWYgKChwdHItPmZsYWdzICYgUFJfTEFUQ0hfTUFTSykgJiYKKwkJCSAgIChsZGVzYy0+ZmxhZ3MgJiAoUFJMX1lFUyB8IFBSTF9OTykpKSB7CisJCQlwcmludF9hbnN3ZXIgPSAxOworCQkJaWYgKGxkZXNjLT5mbGFncyAmIFBSTF9ZRVMpCisJCQkJYW5zd2VyID0gMTsKKwkJCWVsc2UKKwkJCQlhbnN3ZXIgPSAwOworCQl9IGVsc2UKKwkJCWFuc3dlciA9IGFzayhjdHgsIChwdHItPnByb21wdCA9PSBQUk9NUFRfTlVMTCkgPyAiIiA6CisJCQkJICAgICBfKHByb21wdFsoaW50KSBwdHItPnByb21wdF0pLCBkZWZfeW4pOworCQlpZiAoIWFuc3dlciAmJiAhKHB0ci0+ZmxhZ3MgJiBQUl9OT19PSykpCisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKworCQlpZiAocHJpbnRfYW5zd2VyKSB7CisJCQlpZiAoIXN1cHByZXNzKQorCQkJCXByaW50ZigiJXMuXG4iLCBhbnN3ZXIgPworCQkJCSAgICAgICBfKHByZWVuX21zZ1soaW50KSBwdHItPnByb21wdF0pIDoKKwkJCQkgICAgICAgXygiSUdOT1JFRCIpKTsKKwkJCWlmIChjdHgtPmxvZ2YpCisJCQkJZnByaW50ZihjdHgtPmxvZ2YsICIlcy5cbiIsIGFuc3dlciA/CisJCQkJCV8ocHJlZW5fbXNnWyhpbnQpIHB0ci0+cHJvbXB0XSkgOgorCQkJCQlfKCJJR05PUkVEIikpOworCQl9CisJfQorCisJaWYgKChwdHItPnByb21wdCA9PSBQUk9NUFRfQUJPUlQpICYmIGFuc3dlcikKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKworCWlmIChwdHItPmZsYWdzICYgUFJfQUZURVJfQ09ERSkKKwkJYW5zd2VyID0gZml4X3Byb2JsZW0oY3R4LCBwdHItPnNlY29uZF9jb2RlLCBwY3R4KTsKKworCXJldHVybiBhbnN3ZXI7Cit9CisKKyNpZmRlZiBVTklUVEVTVAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXJyY29kZV90Citwcm9maWxlX2dldF9ib29sZWFuKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgICAgY29uc3QgY2hhciAqc3Vic3VibmFtZSwgaW50IGRlZl92YWwsIGludCAqcmV0X2Jvb2xlYW4pCit7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfaW50ZWdlcihwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJICAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGludCBkZWZfdmFsLCBpbnQgKnJldF9pbnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHJpbnRfZTJmc2NrX21lc3NhZ2UoRklMRSAqZiwgZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICptc2csCisJCQkgIHN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHgsIGludCBmaXJzdCwKKwkJCSAgaW50IHJlY3Vyc2UpCit7CisJcmV0dXJuOworfQorCit2b2lkIGZhdGFsX2Vycm9yKGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqbXNnKQoreworCXJldHVybjsKK30KKwordm9pZCBwcmVlbmhhbHQoZTJmc2NrX3QgY3R4KQoreworCXJldHVybjsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF9zdHJpbmcocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGNvbnN0IGNoYXIgKmRlZl92YWwsCisJCSAgIGNoYXIgKipyZXRfc3RyaW5nKQoreworCXJldHVybiAwOworfQorCitpbnQgYXNrIChlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKiBzdHJpbmcsIGludCBkZWYpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2ZXJpZnlfcHJvYmxlbV90YWJsZShlMmZzY2tfdCBjdHgpCit7CisJc3RydWN0IGUyZnNja19wcm9ibGVtICpjdXJyLCAqcHJldiA9IE5VTEw7CisJaW50IHJjID0gMDsKKworCWZvciAocHJldiA9IE5VTEwsIGN1cnIgPSBwcm9ibGVtX3RhYmxlOyBjdXJyLT5lMnBfY29kZTsgcHJldiA9IGN1cnIrKykgeworCQlpZiAocHJldiA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGN1cnItPmUycF9jb2RlID4gcHJldi0+ZTJwX2NvZGUpCisJCQljb250aW51ZTsKKworCQlpZiAoY3Vyci0+ZTJwX2NvZGUgPT0gcHJldi0+ZTJwX2NvZGUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBEdXBsaWNhdGUgaW4gcHJvYmxlbSB0YWJsZTpcbiIpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBVbm9yZGVyZWQgcHJvYmxlbSB0YWJsZTpcbiIpOworCisJCWZwcmludGYoc3RkZXJyLCAiY3VyciBjb2RlID0gMHglMDh4OiAlc1xuIiwKKwkJCWN1cnItPmUycF9jb2RlLCBjdXJyLT5lMnBfZGVzY3JpcHRpb24pOworCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBwcmV2IGNvZGUgPSAweCUwOHg6ICVzXG4iLAorCQkJcHJldi0+ZTJwX2NvZGUsIHByZXYtPmUycF9kZXNjcmlwdGlvbik7CisKKwkJZnByaW50ZihzdGRlcnIsICIqKiogVGhpcyBpcyBhICVzcHJvZ3JhbW1pbmcgZXJyb3IgaW4gZTJmc2NrXG4iLAorCQkJKGN1cnItPmUycF9jb2RlID09IHByZXYtPmUycF9jb2RlKSA/ICJmYXRhbCAiIDogIiIpOworCisJCXJjID0gMTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZTJmc2NrX3QgY3R4OworCWludCByYzsKKworCW1lbXNldCgmY3R4LCAwLCBzaXplb2YoY3R4KSk7IC8qIGp1c3QgdG8gcXVpZXQgY29tcGlsZXIgKi8KKwlyYyA9IHZlcmlmeV9wcm9ibGVtX3RhYmxlKGN0eCk7CisJaWYgKHJjID09IDApCisJCXByaW50ZigiZTJmc2NrIHByb2JsZW0gdGFibGUgdmVyaWZpZWRcbiIpOworCisJcmV0dXJuIHJjOworfQorI2VuZGlmIC8qIFVOSVRURVNUICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Byb2JsZW0uaCBiL2UyZnNwcm9ncy9lMmZzY2svcHJvYmxlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDMyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2JsZW0uaApAQCAtMCwwICsxLDEwNTcgQEAKKy8qCisgKiBwcm9ibGVtLmggLS0tIGUyZnNjayBwcm9ibGVtIGVycm9yIGNvZGVzCisgKgorICogQ29weXJpZ2h0IDE5OTYgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgordHlwZWRlZiBfX3UzMiBwcm9ibGVtX3Q7CisKK3N0cnVjdCBwcm9ibGVtX2NvbnRleHQgeworCWVycmNvZGVfdAllcnJjb2RlOworCWV4dDJfaW5vX3QgaW5vLCBpbm8yLCBkaXI7CisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50OworCWJsazY0X3QJYmxrLCBibGsyOworCWUyX2Jsa2NudF90CWJsa2NvdW50OworCWRncnBfdAkJZ3JvdXA7CisJX191MzIJCWNzdW0xLCBjc3VtMjsKKwlfX3U2NAludW07CisJY29uc3QgY2hhciAqc3RyOworfTsKKworLyoKKyAqIFdlIGRlZmluZSBhIHNldCBvZiAibGF0Y2ggZ3JvdXBzIjsgdGhlc2UgYXJlIHByb2JsZW1zIHdoaWNoIGFyZQorICogaGFuZGxlZCBhcyBhIHNldC4gIFRoZSB1c2VyIGFuc3dlcnMgb25jZSBmb3IgYSBwYXJ0aWN1bGFyIGxhdGNoCisgKiBncm91cC4KKyAqLworI2RlZmluZSBQUl9MQVRDSF9NQVNLCTB4MGZmMCAgLyogTGF0Y2ggbWFzayAqLworI2RlZmluZSBQUl9MQVRDSF9CTE9DSwkweDAwMTAJLyogTGF0Y2ggZm9yIGlsbGVnYWwgYmxvY2tzIChwYXNzIDEpICovCisjZGVmaW5lIFBSX0xBVENIX0JCTE9DSwkweDAwMjAJLyogTGF0Y2ggZm9yIGJhZCBibG9jayBpbm9kZSBibG9ja3MgKHBhc3MgMSkgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfSUJJVE1BUCAweDAwMzAgLyogTGF0Y2ggZm9yIHBhc3MgNSBpbm9kZSBiaXRtYXAgcHJvYy4gKi8KKyNkZWZpbmUgUFJfTEFUQ0hfQkJJVE1BUCAweDAwNDAgLyogTGF0Y2ggZm9yIHBhc3MgNSBpbm9kZSBiaXRtYXAgcHJvYy4gKi8KKyNkZWZpbmUgUFJfTEFUQ0hfUkVMT0MJMHgwMDUwICAvKiBMYXRjaCBmb3Igc3VwZXJibG9jayByZWxvY2F0ZSBoaW50ICovCisjZGVmaW5lIFBSX0xBVENIX0RCTE9DSwkweDAwNjAJLyogTGF0Y2ggZm9yIHBhc3MgMWIgZHVwIGJsb2NrIGhlYWRlcnMgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfTE9XX0RUSU1FIDB4MDA3MCAvKiBMYXRjaCBmb3IgcGFzczEgb3JwaGFuZWQgbGlzdCByZWZ1Z2VlcyAqLworI2RlZmluZSBQUl9MQVRDSF9UT09CSUcJMHgwMDgwCS8qIExhdGNoIGZvciBmaWxlIHRvIGJpZyBlcnJvcnMgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfT1BUSU1JWkVfRElSIDB4MDA5MCAvKiBMYXRjaCBmb3Igb3B0aW1pemUgZGlyZWN0b3JpZXMgKi8KKyNkZWZpbmUgUFJfTEFUQ0hfQkdfQ0hFQ0tTVU0gMHgwMEEwICAvKiBMYXRjaCBmb3IgYmxvY2sgZ3JvdXAgY2hlY2tzdW1zICovCisKKyNkZWZpbmUgUFJfTEFUQ0goeCkJKCgoKHgpICYgUFJfTEFUQ0hfTUFTSykgPj4gNCkgLSAxKQorCisvKgorICogTGF0Y2ggZ3JvdXAgZGVzY3JpcHRvciBmbGFncworICovCisjZGVmaW5lIFBSTF9ZRVMJCTB4MDAwMQkvKiBBbnN3ZXIgeWVzICovCisjZGVmaW5lIFBSTF9OTwkJMHgwMDAyCS8qIEFuc3dlciBubyAqLworI2RlZmluZSBQUkxfTEFUQ0hFRAkweDAwMDQJLyogVGhlIGxhdGNoIGdyb3VwIGlzIGxhdGNoZWQgKi8KKyNkZWZpbmUgUFJMX1NVUFBSRVNTCTB4MDAwOAkvKiBTdXBwcmVzcyBhbGwgbGF0Y2ggZ3JvdXAgcXVlc3Rpb25zICovCisKKyNkZWZpbmUgUFJMX1ZBUklBQkxFCTB4MDAwZgkvKiBBbGwgdGhlIGZsYWdzIHRoYXQgbmVlZCB0byBiZSByZXNldCAqLworCisvKgorICogUHJlLVBhc3MgMSBlcnJvcnMKKyAqLworCisvKiBCbG9jayBiaXRtYXAgbm90IGluIGdyb3VwICovCisjZGVmaW5lIFBSXzBfQkJfTk9UX0dST1VQCTB4MDAwMDAxCisKKy8qIElub2RlIGJpdG1hcCBub3QgaW4gZ3JvdXAgKi8KKyNkZWZpbmUgUFJfMF9JQl9OT1RfR1JPVVAJMHgwMDAwMDIKKworLyogSW5vZGUgdGFibGUgbm90IGluIGdyb3VwICovCisjZGVmaW5lIFBSXzBfSVRBQkxFX05PVF9HUk9VUAkweDAwMDAwMworCisvKiBTdXBlcmJsb2NrIGNvcnJ1cHQgKi8KKyNkZWZpbmUgUFJfMF9TQl9DT1JSVVBUCQkweDAwMDAwNAorCisvKiBGaWxlc3lzdGVtIHNpemUgaXMgd3JvbmcgKi8KKyNkZWZpbmUgUFJfMF9GU19TSVpFX1dST05HCTB4MDAwMDA1CisKKy8qIEZyYWdtZW50cyBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIFBSXzBfTk9fRlJBR01FTlRTCTB4MDAwMDA2CisKKy8qIEJhZCBibG9ja3NfcGVyX2dyb3VwICovCisjZGVmaW5lIFBSXzBfQkxPQ0tTX1BFUl9HUk9VUAkweDAwMDAwNworCisvKiBCYWQgZmlyc3RfZGF0YV9ibG9jayAqLworI2RlZmluZSBQUl8wX0ZJUlNUX0RBVEFfQkxPQ0sJMHgwMDAwMDgKKworLyogQWRkaW5nIFVVSUQgdG8gZmlsZXN5c3RlbSAqLworI2RlZmluZSBQUl8wX0FERF9VVUlECQkweDAwMDAwOQorCisvKiBSZWxvY2F0ZSBoaW50ICovCisjZGVmaW5lIFBSXzBfUkVMT0NBVEVfSElOVAkweDAwMDAwQQorCisvKiBNaXNjZWxsYW5lb3VzIHN1cGVyYmxvY2sgY29ycnVwdGlvbiAqLworI2RlZmluZSBQUl8wX01JU0NfQ09SUlVQVF9TVVBFUgkweDAwMDAwQgorCisvKiBFcnJvciBkZXRlcm1pbmcgcGh5c2ljYWwgZGV2aWNlIHNpemUgb2YgZmlsZXN5c3RlbSAqLworI2RlZmluZSBQUl8wX0dFVFNJWkVfRVJST1IJMHgwMDAwMEMKKworLyogSW5vZGUgY291bnQgaW4gdGhlIHN1cGVyYmxvY2sgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzBfSU5PREVfQ09VTlRfV1JPTkcJMHgwMDAwMEQKKworLyogVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZSAqLworI2RlZmluZSBQUl8wX0hVUkRfQ0xFQVJfRklMRVRZUEUgMHgwMDAwMEUKKworLyogSm91cm5hbCBpbm9kZSBpcyBpbnZhbGlkICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9CQURfSU5PREUJMHgwMDAwMEYKKworLyogVGhlIGV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW1zICh3aGljaCB3ZSBjYW4ndCBoYW5kbGUgeWV0KSAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfVU5TVVBQX01VTFRJRlMgMHgwMDAwMTAKKworLyogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsICovCisjZGVmaW5lIFBSXzBfQ0FOVF9GSU5EX0pPVVJOQUwJMHgwMDAwMTEKKworLyogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2sgKi8KKyNkZWZpbmUgUFJfMF9FWFRfSk9VUk5BTF9CQURfU1VQRVIgMHgwMDAwMTIKKworLyogU3VwZXJibG9jayBoYXMgYSBiYWQgam91cm5hbCBVVUlEICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9CQURfVVVJRAkweDAwMDAxMworCisvKiBKb3VybmFsIGhhcyBhbiB1bmtub3duIHN1cGVyYmxvY2sgdHlwZSAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfVU5TVVBQX1NVUEVSIDB4MDAwMDE0CisKKy8qIEpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0ICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9CQURfU1VQRVIJMHgwMDAwMTUKKworLyogSm91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX0hBU19KT1VSTkFMIDB4MDAwMDE2CisKKy8qIFN1cGVyYmxvY2sgaGFzIHJlY292ZXJ5IGZsYWcgc2V0IGJ1dCBubyBqb3VybmFsICovCisjZGVmaW5lIFBSXzBfSk9VUk5BTF9SRUNPVkVSX1NFVCAweDAwMDAxNworCisvKiBKb3VybmFsIGhhcyBkYXRhLCBidXQgcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfUkVDT1ZFUllfQ0xFQVIgMHgwMDAwMTgKKworLyogQXNrIGlmIHdlIHNob3VsZCBjbGVhciB0aGUgam91cm5hbCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfUkVTRVRfSk9VUk5BTCAweDAwMDAxOQorCisvKiBGaWxlc3lzdGVtIHJldmlzaW9uIGlzIDAsIGJ1dCBmZWF0dXJlIGZsYWdzIGFyZSBzZXQgKi8KKyNkZWZpbmUgUFJfMF9GU19SRVZfTEVWRUwJMHgwMDAwMUEKKworLyogQ2xlYXJpbmcgb3JwaGFuIGlub2RlICovCisjZGVmaW5lIFBSXzBfT1JQSEFOX0NMRUFSX0lOT0RFCQkJMHgwMDAwMjAKKworLyogSWxsZWdhbCBibG9jayBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAqLworI2RlZmluZSBQUl8wX09SUEhBTl9JTExFR0FMX0JMT0NLX05VTQkJMHgwMDAwMjEKKworLyogQWxyZWFkeSBjbGVhcmVkIGJsb2NrIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICovCisjZGVmaW5lIFBSXzBfT1JQSEFOX0FMUkVBRFlfQ0xFQVJFRF9CTE9DSwkweDAwMDAyMgorCisvKiBJbGxlZ2FsIG9ycGhhbiBpbm9kZSBpbiBzdXBlcmJsb2NrICovCisjZGVmaW5lIFBSXzBfT1JQSEFOX0lMTEVHQUxfSEVBRF9JTk9ERQkJMHgwMDAwMjMKKworLyogSWxsZWdhbCBpbm9kZSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0ICovCisjZGVmaW5lIFBSXzBfT1JQSEFOX0lMTEVHQUxfSU5PREUJCTB4MDAwMDI0CisKKy8qIEpvdXJuYWwgaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlIC0gYWJvcnQgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1VOU1VQUF9ST0NPTVBBVAkJMHgwMDAwMjUKKworLyogSm91cm5hbCBoYXMgdW5zdXBwb3J0ZWQgaW5jb21wYXRpYmxlIGZlYXR1cmUgLSBhYm9ydCAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfVU5TVVBQX0lOQ09NUEFUCQkweDAwMDAyNgorCisvKiBKb3VybmFsIGhhcyB1bnN1cHBvcnRlZCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfVU5TVVBQX1ZFUlNJT04JCTB4MDAwMDI3CisKKy8qIE1vdmluZyBqb3VybmFsIHRvIGhpZGRlbiBmaWxlICovCisjZGVmaW5lCVBSXzBfTU9WRV9KT1VSTkFMCQkJMHgwMDAwMjgKKworLyogRXJyb3IgbW92aW5nIGpvdXJuYWwgKi8KKyNkZWZpbmUJUFJfMF9FUlJfTU9WRV9KT1VSTkFMCQkJMHgwMDAwMjkKKworLyogQ2xlYXJpbmcgVjIgam91cm5hbCBzdXBlcmJsb2NrICovCisjZGVmaW5lIFBSXzBfQ0xFQVJfVjJfSk9VUk5BTAkJCTB4MDAwMDJBCisKKy8qIFJ1biBqb3VybmFsIGFueXdheSAqLworI2RlZmluZSBQUl8wX0pPVVJOQUxfUlVOCQkJMHgwMDAwMkIKKworLyogUnVuIGpvdXJuYWwgYW55d2F5IGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgUFJfMF9KT1VSTkFMX1JVTl9ERUZBVUxUCQkweDAwMDAyQworCisvKiBCYWNrdXAgam91cm5hbCBpbm9kZSBibG9ja3MgKi8KKyNkZWZpbmUgUFJfMF9CQUNLVVBfSk5MCQkJCTB4MDAwMDJECisKKy8qIFJlc2VydmVkIGJsb2NrcyB3L28gcmVzaXplX2lub2RlICovCisjZGVmaW5lIFBSXzBfTk9OWkVST19SRVNFUlZFRF9HRFRfQkxPQ0tTCTB4MDAwMDJFCisKKy8qIFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHJlc2l6ZSBpbm9kZSBpcyBub24temVybyAqLworI2RlZmluZSBQUl8wX0NMRUFSX1JFU0laRV9JTk9ERQkJCTB4MDAwMDJGCisKKy8qIFJlc2l6ZSBpbm9kZSBpbnZhbGlkICovCisjZGVmaW5lIFBSXzBfUkVTSVpFX0lOT0RFX0lOVkFMSUQJCTB4MDAwMDMwCisKKy8qIExhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlICovCisjZGVmaW5lIFBSXzBfRlVUVVJFX1NCX0xBU1RfTU9VTlQJCTB4MDAwMDMxCisKKy8qIExhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlICovCisjZGVmaW5lIFBSXzBfRlVUVVJFX1NCX0xBU1RfV1JJVEUJCTB4MDAwMDMyCisKKy8qIFN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgam91cm5hbCBpbmNvcnJlY3QgKi8KKyNkZWZpbmUgUFJfMF9FWFRFUk5BTF9KT1VSTkFMX0hJTlQJCTB4MDAwMDMzCisKKy8qIFN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgam91cm5hbCBpbmNvcnJlY3QgKi8KKyNkZWZpbmUgUFJfMF9ESVJIQVNIX0hJTlQJCQkweDAwMDAzNAorCisvKiBHcm91cCBkZXNjcmlwdG9yIE4gY2hlY2tzdW0gaXMgaW52YWxpZCAqLworI2RlZmluZSBQUl8wX0dEVF9DU1VNCQkJCTB4MDAwMDM1CisKKy8qIEdyb3VwIGRlc2NyaXB0b3IgTiBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LiAqLworI2RlZmluZSBQUl8wX0dEVF9VTklOSVQJCQkJMHgwMDAwMzYKKworLyogQmxvY2sgYml0bWFwIGlzIG5vdCBpbml0aWFsaXNlZCBhbmQgSW5vZGUgYml0bWFwIGlzIC0tIE5PIExPTkdFUiBVU0VEICovCisvKiAjZGVmaW5lIFBSXzBfQkJfVU5JTklUX0lCX0lOSVQJCQkweDAwMDAzNyAqLworCisvKiBHcm91cCBkZXNjcmlwdG9yIE4gaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudC4gKi8KKyNkZWZpbmUgUFJfMF9HRFRfSVRBQkxFX1VOVVNFRAkJCTB4MDAwMDM4CisKKy8qIExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIGlzIHVuaW5pdGlhbGl6ZWQuICovCisjZGVmaW5lIFBSXzBfQkJfVU5JTklUX0xBU1QJCQkweDAwMDAzOQorCisvKiBKb3VybmFsIHRyYW5zYWN0aW9uIGZvdW5kIGNvcnJ1cHQgKi8KKyNkZWZpbmUgUFJfMF9KTkxfVFhOX0NPUlJVUFQJCQkweDAwMDAzQQorCisvKiBUaGUgdGVzdF9mcyBmaWxlc3lzdGVtIGZsYWcgaXMgc2V0IGFuZCBleHQ0IGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBQUl8wX0NMRUFSX1RFU1RGU19GTEFHCQkJMHgwMDAwM0IKKworLyogTGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUgKGZ1ZGdlZCkgKi8KKyNkZWZpbmUgUFJfMF9GVVRVUkVfU0JfTEFTVF9NT1VOVF9GVURHRUQJMHgwMDAwM0MKKworLyogTGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUgKGZ1ZGdlZCkgKi8KKyNkZWZpbmUgUFJfMF9GVVRVUkVfU0JfTEFTVF9XUklURV9GVURHRUQJMHgwMDAwM0QKKworLyogQmxvY2sgZ3JvdXAgY2hlY2tzdW0gKGxhdGNoIHF1ZXN0aW9uKSAqLworI2RlZmluZSBQUl8wX0dEVF9DU1VNX0xBVENICQkJMHgwMDAwM0UKKworLyogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKi8KKyNkZWZpbmUgUFJfMF9GUkVFX0lOT0RFX0NPVU5UCQkJMHgwMDAwM0YKKworLyogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKi8KKyNkZWZpbmUgUFJfMF9GUkVFX0JMT0NLX0NPVU5UCQkJMHgwMDAwNDAKKworLyogTWFrZSBxdW90YSBmaWxlIGhpZGRlbiAqLworI2RlZmluZQlQUl8wX0hJREVfUVVPVEEJCQkJMHgwMDAwNDEKKworLyogU3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICovCisjZGVmaW5lIFBSXzBfTU1QX0lOVkFMSURfQkxLCQkJMHgwMDAwNDIKKworLyogU3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICovCisjZGVmaW5lIFBSXzBfTU1QX0lOVkFMSURfTUFHSUMJCQkweDAwMDA0MworCisvKiBPcGVuaW5nIGZpbGUgc3lzdGVtIGZhaWxlZCAqLworI2RlZmluZSBQUl8wX09QRU5fRkFJTEVECQkJMHgwMDAwNDQKKworLyogQ2hlY2tpbmcgZ3JvdXAgZGVzY3JpcHRvciBmYWlsZWQgKi8KKyNkZWZpbmUgUFJfMF9DSEVDS19ERVNDX0ZBSUxFRAkJCTB4MDAwMDQ1CisKKy8qIDY0Yml0IGlzIHNldCBidXQgZXh0ZW50cyBhcmUgbm90IHNldC4gKi8KKyNkZWZpbmUgUFJfMF82NEJJVF9XSVRIT1VUX0VYVEVOVFMJCTB4MDAwMDQ4CisKKy8qCisgKiBQYXNzIDEgZXJyb3JzCisgKi8KKworLyogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzICovCisjZGVmaW5lIFBSXzFfUEFTU19IRUFERVIJCTB4MDEwMDAwCisKKy8qIFJvb3QgZGlyZWN0b3J5IGlzIG5vdCBhbiBpbm9kZSAqLworI2RlZmluZSBQUl8xX1JPT1RfTk9fRElSCQkweDAxMDAwMQorCisvKiBSb290IGRpcmVjdG9yeSBoYXMgZHRpbWUgc2V0ICovCisjZGVmaW5lIFBSXzFfUk9PVF9EVElNRQkJCTB4MDEwMDAyCisKKy8qIFJlc2VydmVkIGlub2RlIGhhcyBiYWQgbW9kZSAqLworI2RlZmluZSBQUl8xX1JFU0VSVkVEX0JBRF9NT0RFCQkweDAxMDAwMworCisvKiBEZWxldGVkIGlub2RlIGhhcyB6ZXJvIGR0aW1lICovCisjZGVmaW5lIFBSXzFfWkVST19EVElNRQkJCTB4MDEwMDA0CisKKy8qIElub2RlIGluIHVzZSwgYnV0IGR0aW1lIHNldCAqLworI2RlZmluZSBQUl8xX1NFVF9EVElNRQkJCTB4MDEwMDA1CisKKy8qIFplcm8tbGVuZ3RoIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8xX1pFUk9fTEVOR1RIX0RJUgkJMHgwMTAwMDYKKworLyogQmxvY2sgYml0bWFwIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9CQl9DT05GTElDVAkJMHgwMTAwMDcKKworLyogSW5vZGUgYml0bWFwIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9JQl9DT05GTElDVAkJMHgwMTAwMDgKKworLyogSW5vZGUgdGFibGUgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jayAqLworI2RlZmluZSBQUl8xX0lUQUJMRV9DT05GTElDVAkJMHgwMTAwMDkKKworLyogQmxvY2sgYml0bWFwIGlzIG9uIGEgYmFkIGJsb2NrICovCisjZGVmaW5lIFBSXzFfQkJfQkFEX0JMT0NLCQkweDAxMDAwQQorCisvKiBJbm9kZSBiaXRtYXAgaXMgb24gYSBiYWQgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9JQl9CQURfQkxPQ0sJCTB4MDEwMDBCCisKKy8qIElub2RlIGhhcyBpbmNvcnJlY3QgaV9zaXplICovCisjZGVmaW5lIFBSXzFfQkFEX0lfU0laRQkJCTB4MDEwMDBDCisKKy8qIElub2RlIGhhcyBpbmNvcnJlY3QgaV9ibG9ja3MgKi8KKyNkZWZpbmUgUFJfMV9CQURfSV9CTE9DS1MJCTB4MDEwMDBECisKKy8qIElsbGVnYWwgYmxvY2sgbnVtYmVyIGluIGlub2RlICovCisjZGVmaW5lIFBSXzFfSUxMRUdBTF9CTE9DS19OVU0JCTB4MDEwMDBFCisKKy8qIEJsb2NrIG51bWJlciBvdmVybGFwcyBmcyBtZXRhZGF0YSAqLworI2RlZmluZSBQUl8xX0JMT0NLX09WRVJMQVBTX01FVEFEQVRBCTB4MDEwMDBGCisKKy8qIElub2RlIGhhcyBpbGxlZ2FsIGJsb2NrcyAobGF0Y2ggcXVlc3Rpb24pICovCisjZGVmaW5lIFBSXzFfSU5PREVfQkxPQ0tfTEFUQ0gJCTB4MDEwMDEwCisKKy8qIFRvbyBtYW55IGJhZCBibG9ja3MgaW4gaW5vZGUgKi8KKyNkZWZpbmUJUFJfMV9UT09fTUFOWV9CQURfQkxPQ0tTCTB4MDEwMDExCisKKy8qIElsbGVnYWwgYmxvY2sgbnVtYmVyIGluIGJhZCBibG9jayBpbm9kZSAqLworI2RlZmluZSBQUl8xX0JCX0lMTEVHQUxfQkxPQ0tfTlVNCTB4MDEwMDEyCisKKy8qIEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9ja3MgKGxhdGNoIHF1ZXN0aW9uKSAqLworI2RlZmluZSBQUl8xX0lOT0RFX0JCTE9DS19MQVRDSAkJMHgwMTAwMTMKKworLyogRHVwbGljYXRlIG9yIGJhZCBibG9ja3MgaW4gdXNlISAqLworI2RlZmluZSBQUl8xX0RVUF9CTE9DS1NfUFJFRU5TVE9QCTB4MDEwMDE0CisKKy8qIEJhZCBibG9jayB1c2VkIGFzIGJhZCBibG9jayBpbmRpcmVjdCBibG9jayAqLworI2RlZmluZSBQUl8xX0JCSU5PREVfQkFEX01FVEFCTE9DSwkweDAxMDAxNQorCisvKiBJbmNvbnNpc3RlbmN5IGNhbid0IGJlIGZpeGVkIHByb21wdCAqLworI2RlZmluZSBQUl8xX0JCSU5PREVfQkFEX01FVEFCTE9DS19QUk9NUFQgMHgwMTAwMTYKKworLyogQmFkIHByaW1hcnkgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9CQURfUFJJTUFSWV9CTE9DSwkJMHgwMTAwMTcKKworLyogQmFkIHByaW1hcnkgYmxvY2sgcHJvbXB0ICovCisjZGVmaW5lIFBSXzFfQkFEX1BSSU1BUllfQkxPQ0tfUFJPTVBUCTB4MDEwMDE4CisKKy8qIEJhZCBwcmltYXJ5IHN1cGVyYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9CQURfUFJJTUFSWV9TVVBFUkJMT0NLCTB4MDEwMDE5CisKKy8qIEJhZCBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIFBSXzFfQkFEX1BSSU1BUllfR1JPVVBfREVTQ1JJUFRPUiAweDAxMDAxQQorCisvKiBCYWQgc3VwZXJibG9jayBpbiBncm91cCAqLworI2RlZmluZSBQUl8xX0JBRF9TVVBFUkJMT0NLCQkweDAxMDAxQgorCisvKiBCYWQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgaW4gZ3JvdXAgKi8KKyNkZWZpbmUgUFJfMV9CQURfR1JPVVBfREVTQ1JJUFRPUlMJMHgwMTAwMUMKKworLyogQmxvY2sgY2xhaW1lZCBmb3Igbm8gcmVhc29uICovCisjZGVmaW5lIFBSXzFfUFJPR0VSUl9DTEFJTUVEX0JMT0NLCTB4MDEwMDFECisKKy8qIEVycm9yIGFsbG9jYXRpbmcgYmxvY2tzIGZvciByZWxvY2F0aW5nIG1ldGFkYXRhICovCisjZGVmaW5lIFBSXzFfUkVMT0NfQkxPQ0tfQUxMT0NBVEUJMHgwMTAwMUUKKworLyogRXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZHVyaW5nIHJlbG9jYXRpb24gcHJvY2VzcyAqLworI2RlZmluZSBQUl8xX1JFTE9DX01FTU9SWV9BTExPQ0FURQkweDAxMDAxRgorCisvKiBSZWxvY2F0aW5nIG1ldGFkYXRhIGdyb3VwIGluZm9ybWF0aW9uIGZyb20gWCB0byBZICovCisjZGVmaW5lIFBSXzFfUkVMT0NfRlJPTV9UTwkJMHgwMTAwMjAKKworLyogUmVsb2NhdGluZyBtZXRhdGRhdGEgZ3JvdXAgaW5mb3JtYXRpb24gdG8gWCAqLworI2RlZmluZSBQUl8xX1JFTE9DX1RPCQkJMHgwMTAwMjEKKworLyogQmxvY2sgcmVhZCBlcnJvciBkdXJpbmcgcmVsb2NhdGlvbiBwcm9jZXNzICovCisjZGVmaW5lIFBSXzFfUkVMT0NfUkVBRF9FUlIJCTB4MDEwMDIyCisKKy8qIEJsb2NrIHdyaXRlIGVycm9yIGR1cmluZyByZWxvY2F0aW9uIHByb2Nlc3MgKi8KKyNkZWZpbmUgUFJfMV9SRUxPQ19XUklURV9FUlIJCTB4MDEwMDIzCisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzFfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUgkweDAxMDAyNAorCisvKiBFcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAqLworI2RlZmluZSBQUl8xX0FMTE9DQVRFX0JCSVRNQVBfRVJST1IJMHgwMTAwMjUKKworLyogRXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlICovCisjZGVmaW5lIFBSXzFfQUxMT0NBVEVfSUNPVU5UCQkweDAxMDAyNgorCisvKiBFcnJvciBhbGxvY2F0aW5nIGRiY291bnQgKi8KKyNkZWZpbmUgUFJfMV9BTExPQ0FURV9EQkNPVU5UCQkweDAxMDAyNworCisvKiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKi8KKyNkZWZpbmUgUFJfMV9JU0NBTl9FUlJPUgkJMHgwMTAwMjgKKworLyogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzICovCisjZGVmaW5lIFBSXzFfQkxPQ0tfSVRFUkFURQkJMHgwMTAwMjkKKworLyogRXJyb3Igd2hpbGUgc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQUl8xX0lDT1VOVF9TVE9SRQkJMHgwMTAwMkEKKworLyogRXJyb3Igd2hpbGUgc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUFJfMV9BRERfREJMT0NLCQkJMHgwMTAwMkIKKworLyogRXJyb3Igd2hpbGUgcmVhZGluZyBpbm9kZSAoZm9yIGNsZWFyaW5nKSAqLworI2RlZmluZSBQUl8xX1JFQURfSU5PREUJCQkweDAxMDAyQworCisvKiBTdXBwcmVzcyBtZXNzYWdlcyBwcm9tcHQgKi8KKyNkZWZpbmUgUFJfMV9TVVBQUkVTU19NRVNTQUdFUwkJMHgwMTAwMkQKKworLyogSW1hZ2ljIGZsYWcgc2V0IG9uIGFuIGlub2RlIHdoZW4gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQgKi8KKyNkZWZpbmUgUFJfMV9TRVRfSU1BR0lDCQkJMHgwMTAwMkYKKworLyogSW1tdXRhYmxlIGZsYWcgc2V0IG9uIGEgZGV2aWNlIG9yIHNvY2tldCBpbm9kZSAqLworI2RlZmluZSBQUl8xX1NFVF9JTU1VVEFCTEUJCTB4MDEwMDMwCisKKy8qIENvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGEgbm9uLWNvbXByZXNzZWQgZmlsZXN5c3RlbSAqLworI2RlZmluZSBQUl8xX0NPTVBSX1NFVAkJCTB4MDEwMDMxCisKKy8qIE5vbi16ZXJvIHNpemUgb24gb24gZGV2aWNlLCBmaWZvIG9yIHNvY2tldCBpbm9kZSAqLworI2RlZmluZSBQUl8xX1NFVF9OT05aU0laRQkJMHgwMTAwMzIKKworLyogRmlsZXN5c3RlbSByZXZpc2lvbiBpcyAwLCBidXQgZmVhdHVyZSBmbGFncyBhcmUgc2V0ICovCisjZGVmaW5lIFBSXzFfRlNfUkVWX0xFVkVMCQkweDAxMDAzMworCisvKiBKb3VybmFsIGlub2RlIG5vdCBpbiB1c2UsIG5lZWRzIGNsZWFyaW5nICovCisjZGVmaW5lIFBSXzFfSk9VUk5BTF9JTk9ERV9OT1RfQ0xFQVIJMHgwMTAwMzQKKworLyogSm91cm5hbCBpbm9kZSBoYXMgd3JvbmcgbW9kZSAqLworI2RlZmluZSBQUl8xX0pPVVJOQUxfQkFEX01PREUJCTB4MDEwMDM1CisKKy8qIElub2RlIHRoYXQgd2FzIHBhcnQgb2Ygb3JwaGFuIGxpbmtlZCBsaXN0ICovCisjZGVmaW5lIFBSXzFfTE9XX0RUSU1FCQkJMHgwMTAwMzYKKworLyogTGF0Y2ggcXVlc3Rpb24gd2hpY2ggYXNrcyBob3cgdG8gZGVhbCB3aXRoIGxvdyBkdGltZSBpbm9kZXMgKi8KKyNkZWZpbmUgUFJfMV9PUlBIQU5fTElTVF9SRUZVR0VFUwkweDAxMDAzNworCisvKiBFcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAqLworI2RlZmluZSBQUl8xX0FMTE9DQVRFX1JFRkNPVU5UCQkweDAxMDAzOAorCisvKiBFcnJvciByZWFkaW5nIEV4dGVuZGVkIEF0dHJpYnV0ZSBibG9jayAqLworI2RlZmluZSBQUl8xX1JFQURfRUFfQkxPQ0sJCTB4MDEwMDM5CisKKy8qIEludmFsaWQgRXh0ZW5kZWQgQXR0cmlidXRlIGJsb2NrICovCisjZGVmaW5lIFBSXzFfQkFEX0VBX0JMT0NLCQkweDAxMDAzQQorCisvKiBFcnJvciByZWFkaW5nIEV4dGVuZGVkIEF0dHJpYnV0ZSBibG9jayB3aGlsZSBmaXhpbmcgcmVmY291bnQgLS0gYWJvcnQgKi8KKyNkZWZpbmUgUFJfMV9FWFRBVFRSX1JFQURfQUJPUlQJCTB4MDEwMDNCCisKKy8qIEV4dGVuZGVkIGF0dHJpYnV0ZSByZWZlcmVuY2UgY291bnQgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzFfRVhUQVRUUl9SRUZDT1VOVAkJMHgwMTAwM0MKKworLyogRXJyb3Igd3JpdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgYmxvY2sgd2hpbGUgZml4aW5nIHJlZmNvdW50ICovCisjZGVmaW5lIFBSXzFfRVhUQVRUUl9XUklURV9BQk9SVAkweDAxMDAzRAorCisvKiBNdWx0aXBsZSBFQSBibG9ja3Mgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSBQUl8xX0VBX01VTFRJX0JMT0NLCQkweDAxMDAzRQorCisvKiBFcnJvciBhbGxvY2F0aW5nIEVBIHJlZ2lvbiBhbGxvY2F0aW9uIHN0cnVjdHVyZSAqLworI2RlZmluZSBQUl8xX0VBX0FMTE9DX1JFR0lPTl9BQk9SVAkweDAxMDAzRgorCisvKiBFcnJvciBFQSBhbGxvY2F0aW9uIGNvbGxpc2lvbiAqLworI2RlZmluZSBQUl8xX0VBX0FMTE9DX0NPTExJU0lPTgkJMHgwMTAwNDAKKworLyogQmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lICovCisjZGVmaW5lIFBSXzFfRUFfQkFEX05BTUUJCTB4MDEwMDQxCisKKy8qIEJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUgKi8KKyNkZWZpbmUgUFJfMV9FQV9CQURfVkFMVUUJCTB4MDEwMDQyCisKKy8qIElub2RlIHRvbyBiaWcgKGxhdGNoIHF1ZXN0aW9uKSAqLworI2RlZmluZSBQUl8xX0lOT0RFX1RPT0JJRwkJMHgwMTAwNDMKKworLyogRGlyZWN0b3J5IHRvbyBiaWcgKi8KKyNkZWZpbmUgUFJfMV9UT09CSUdfRElSCQkJMHgwMTAwNDQKKworLyogUmVndWxhciBmaWxlIHRvbyBiaWcgKi8KKyNkZWZpbmUgUFJfMV9UT09CSUdfUkVHCQkJMHgwMTAwNDUKKworLyogU3ltbGluayB0b28gYmlnICovCisjZGVmaW5lIFBSXzFfVE9PQklHX1NZTUxJTksJCTB4MDEwMDQ2CisKKy8qIElOREVYX0ZMIGZsYWcgc2V0IG9uIGEgbm9uLUhUUkVFIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMV9IVFJFRV9TRVQJCQkweDAxMDA0NworCisvKiBJTkRFWF9GTCBmbGFnIHNldCBvbiBhIG5vbi1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfMV9IVFJFRV9OT0RJUgkJMHgwMTAwNDgKKworLyogSW52YWxpZCByb290IG5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzFfSFRSRUVfQkFEUk9PVAkJMHgwMTAwNDkKKworLyogVW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uIGluIEhUUkVFIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8xX0hUUkVFX0hBU0hWCQkweDAxMDA0QQorCisvKiBJbmNvbXBhdGlibGUgZmxhZyBpbiBIVFJFRSByb290IG5vZGUgKi8KKyNkZWZpbmUgUFJfMV9IVFJFRV9JTkNPTVBBVAkJMHgwMTAwNEIKKworLyogSFRSRUUgdG9vIGRlZXAgKi8KKyNkZWZpbmUgUFJfMV9IVFJFRV9ERVBUSAkJMHgwMTAwNEMKKworLyogQmFkIGJsb2NrIGhhcyBpbmRpcmVjdCBibG9jayB0aGF0IGNvbmZsaWN0cyB3aXRoIGZpbGVzeXN0ZW0gYmxvY2sgKi8KKyNkZWZpbmUgUFJfMV9CQl9GU19CTE9DSwkJMHgwMTAwNEQKKworLyogUmVzaXplIGlub2RlIGZhaWxlZCAqLworI2RlZmluZSBQUl8xX1JFU0laRV9JTk9ERV9DUkVBVEUJMHgwMTAwNEUKKworLyogaW5vZGUtPmlfc2l6ZSBpcyB0b28gbG9uZyAqLworI2RlZmluZSBQUl8xX0VYVFJBX0lTSVpFCQkweDAxMDA0RgorCisvKiBhdHRyaWJ1dGUgbmFtZSBpcyB0b28gbG9uZyAqLworI2RlZmluZSBQUl8xX0FUVFJfTkFNRV9MRU4JCTB4MDEwMDUwCisKKy8qIHdyb25nIEVBIHZhbHVlIG9mZnNldCAqLworI2RlZmluZSBQUl8xX0FUVFJfVkFMVUVfT0ZGU0VUCQkweDAxMDA1MQorCisvKiB3cm9uZyBFQSBibG9ja251bWJlciAqLworI2RlZmluZSBQUl8xX0FUVFJfVkFMVUVfQkxPQ0sJCTB4MDEwMDUyCisKKy8qIHdyb25nIEVBIHZhbHVlIHNpemUgKi8KKyNkZWZpbmUgUFJfMV9BVFRSX1ZBTFVFX1NJWkUJCTB4MDEwMDUzCisKKy8qIHdyb25nIEVBIGhhc2ggdmFsdWUgKi8KKyNkZWZpbmUgUFJfMV9BVFRSX0hBU0gJCQkweDAxMDA1NAorCisvKiBpbm9kZSBhcHBlYXJzIHRvIGJlIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzFfVFJFQVRfQVNfRElSRUNUT1JZCQkweDAxMDA1NQorCisvKiBFcnJvciB3aGlsZSByZWFkaW5nIGV4dGVudCB0cmVlICovCisjZGVmaW5lIFBSXzFfUkVBRF9FWFRFTlQJCTB4MDEwMDU2CisKKy8qIEZhaWx1cmUgdG8gaXRlcmF0ZSBleHRlbnRzICovCisjZGVmaW5lIFBSXzFfRVhURU5UX0lURVJBVEVfRkFJTFVSRQkweDAxMDA1NworCisvKiBCYWQgc3RhcnRpbmcgYmxvY2sgaW4gZXh0ZW50ICovCisjZGVmaW5lIFBSXzFfRVhURU5UX0JBRF9TVEFSVF9CTEsJMHgwMTAwNTgKKworLyogRXh0ZW50IGVuZHMgYmV5b25kIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMV9FWFRFTlRfRU5EU19CRVlPTkQJCTB4MDEwMDU5CisKKy8qIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gYSBub24tZXh0ZW50cyBjYXBhYmxlIGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgUFJfMV9FWFRFTlRTX1NFVAkJMHgwMTAwNUEKKworLyogaW5vZGUgaGFzIGV4dGVudHMsIHN1cGVyYmxvY2sgbWlzc2luZyBJTkNPTVBBVF9FWFRFTlRTIGZlYXR1cmUgKi8KKyNkZWZpbmUgUFJfMV9FWFRFTlRfRkVBVFVSRQkJMHgwMTAwNUIKKworLyogaW5vZGUgbWlzc2luZyBFWFRFTlRTX0ZMLCBidXQgaXMgYW4gZXh0ZW50IGlub2RlICovCisjZGVmaW5lIFBSXzFfVU5TRVRfRVhURU5UX0ZMCQkweDAxMDA1QworCisvKiBGYXN0IHN5bWxpbmsgaGFzIEVYVEVOVFNfRkwgc2V0ICovCisjZGVmaW5lIFBSXzFfRkFTVF9TWU1MSU5LX0VYVEVOVF9GTAkweDAxMDA1RAorCisvKiBFeHRlbnRzIGFyZSBvdXQgb2Ygb3JkZXIgKi8KKyNkZWZpbmUgUFJfMV9PVVRfT0ZfT1JERVJfRVhURU5UUwkweDAxMDA1RQorCisvKiBFeHRlbnQgbm9kZSBoZWFkZXIgaW52YWxpZCAqLworI2RlZmluZSBQUl8xX0VYVEVOVF9IRUFERVJfSU5WQUxJRAkweDAxMDA1RgorCisvKiBQUl8xX0VPRkJMT0NLU19GTF9TRVQgMHgwMTAwNjAgd2FzIGhlcmUgKi8KKworLyogRmFpbGVkIHRvIGNvbnZlcnQgc3ViY2x1c3RlciBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfMV9DT05WRVJUX1NVQkNMVVNURVIJCTB4MDEwMDYxCisKKy8qIFF1b3RhIGlub2RlIGhhcyB3cm9uZyBtb2RlICovCisjZGVmaW5lIFBSXzFfUVVPVEFfQkFEX01PREUJCTB4MDEwMDYyCisKKy8qIFF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhICovCisjZGVmaW5lIFBSXzFfUVVPVEFfSU5PREVfTk9UX0NMRUFSCTB4MDEwMDYzCisKKy8qIFF1b3RhIGlub2RlIGlzIHVzZXIgdmlzaWJsZSAqLworI2RlZmluZSBQUl8xX1FVT1RBX0lOT0RFX05PVF9ISURERU4JMHgwMTAwNjQKKworLyogSW52YWxpZCBiYWQgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMV9JTlZBTElEX0JBRF9JTk9ERQkJMHgwMTAwNjUKKworLyogRXh0ZW50IGhhcyB6ZXJvIGxlbmd0aCAqLworI2RlZmluZSBQUl8xX0VYVEVOVF9MRU5HVEhfWkVSTwkJMHgwMTAwNjYKKworLyogSW5kZXggc3RhcnQgZG9lc24ndCBtYXRjaCBzdGFydCBvZiBuZXh0IGV4dGVudCBkb3duICovCisjZGVmaW5lIFBSXzFfRVhURU5UX0lOREVYX1NUQVJUX0lOVkFMSUQJMHgwMTAwNkQKKworI2RlZmluZSBQUl8xX0VYVEVOVF9FTkRfT1VUX09GX0JPVU5EUwkweDAxMDA2RQorLyoKKyAqIFBhc3MgMWIgZXJyb3JzCisgKi8KKworLyogUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIGJsb2NrcyAqLworI2RlZmluZSBQUl8xQl9QQVNTX0hFQURFUgkweDAxMTAwMAorCisvKiBEdXBsaWNhdGUvYmFkIGJsb2NrKHMpIGhlYWRlciAqLworI2RlZmluZSBQUl8xQl9EVVBfQkxPQ0tfSEVBREVSCTB4MDExMDAxCisKKy8qIER1cGxpY2F0ZS9iYWQgYmxvY2socykgaW4gaW5vZGUgKi8KKyNkZWZpbmUgUFJfMUJfRFVQX0JMT0NLCQkweDAxMTAwMgorCisvKiBEdXBsaWNhdGUvYmFkIGJsb2NrKHMpIGVuZCAqLworI2RlZmluZSBQUl8xQl9EVVBfQkxPQ0tfRU5ECTB4MDExMDAzCisKKy8qIEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAqLworI2RlZmluZSBQUl8xQl9JU0NBTl9FUlJPUgkweDAxMTAwNAorCisvKiBFcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAqLworI2RlZmluZSBQUl8xQl9BTExPQ0FURV9JQklUTUFQX0VSUk9SIDB4MDExMDA1CisKKy8qIEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyAqLworI2RlZmluZSBQUl8xQl9CTE9DS19JVEVSQVRFCTB4MDExMDA2CisKKy8qIEVycm9yIGFkanVzdGluZyBFQSByZWZjb3VudCAqLworI2RlZmluZSBQUl8xQl9BREpfRUFfUkVGQ09VTlQJMHgwMTEwMDcKKworLyogUGFzcyAxQzogU2NhbiBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggZHVwIGJsb2Nrcy4gKi8KKyNkZWZpbmUgUFJfMUNfUEFTU19IRUFERVIJMHgwMTIwMDAKKworCisvKiBQYXNzIDFEOiBSZWNvbmNpbGluZyBkdXBsaWNhdGUgYmxvY2tzICovCisjZGVmaW5lIFBSXzFEX1BBU1NfSEVBREVSCTB4MDEzMDAwCisKKy8qIEZpbGUgaGFzIGR1cGxpY2F0ZSBibG9ja3MgKi8KKyNkZWZpbmUgUFJfMURfRFVQX0ZJTEUJCTB4MDEzMDAxCisKKy8qIExpc3Qgb2YgZmlsZXMgc2hhcmluZyBkdXBsaWNhdGUgYmxvY2tzICovCisjZGVmaW5lIFBSXzFEX0RVUF9GSUxFX0xJU1QJMHgwMTMwMDIKKworLyogRmlsZSBzaGFyaW5nIGJsb2NrcyB3aXRoIGZpbGVzeXN0ZW0gbWV0YWRhdGEgICovCisjZGVmaW5lIFBSXzFEX1NIQVJFX01FVEFEQVRBCTB4MDEzMDAzCisKKy8qIFJlcG9ydCBvZiBob3cgbWFueSBkdXBsaWNhdGUvYmFkIGlub2RlcyAqLworI2RlZmluZSBQUl8xRF9OVU1fRFVQX0lOT0RFUwkweDAxMzAwNAorCisvKiBEdXBsaWNhdGVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLiAqLworI2RlZmluZSBQUl8xRF9EVVBfQkxPQ0tTX0RFQUxUCTB4MDEzMDA1CisKKy8qIENsb25lIGR1cGxpY2F0ZS9iYWQgYmxvY2tzPyAqLworI2RlZmluZSBQUl8xRF9DTE9ORV9RVUVTVElPTgkweDAxMzAwNgorCisvKiBEZWxldGUgZmlsZT8gKi8KKyNkZWZpbmUgUFJfMURfREVMRVRFX1FVRVNUSU9OCTB4MDEzMDA3CisKKy8qIENvdWxkbid0IGNsb25lIGZpbGUgKGVycm9yKSAqLworI2RlZmluZSBQUl8xRF9DTE9ORV9FUlJPUgkweDAxMzAwOAorCisvKiBFcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgZW5jcnlwdGVkIGRpcmVjdG9yeSBsaXN0ICovCisjZGVmaW5lIFBSXzFfQUxMT0NBVEVfRU5DUllQVEVEX0RJUkxJU1QJCTB4MDEwMDdFCisKKy8qCisgKiBQYXNzIDIgZXJyb3JzCisgKi8KKworLyogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlICovCisjZGVmaW5lIFBSXzJfUEFTU19IRUFERVIJMHgwMjAwMDAKKworLyogQmFkIGlub2RlIG51bWJlciBmb3IgJy4nICovCisjZGVmaW5lIFBSXzJfQkFEX0lOT0RFX0RPVAkweDAyMDAwMQorCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGJhZCBpbm9kZSBudW1iZXIgKi8KKyNkZWZpbmUgUFJfMl9CQURfSU5PCQkweDAyMDAwMgorCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGRlbGV0ZWQgb3IgdW51c2VkIGlub2RlICovCisjZGVmaW5lIFBSXzJfVU5VU0VEX0lOT0RFCTB4MDIwMDAzCisKKy8qIERpcmVjdHJ5IGVudHJ5IGlzIGxpbmsgdG8gJy4nICovCisjZGVmaW5lIFBSXzJfTElOS19ET1QJCTB4MDIwMDA0CisKKy8qIERpcmVjdG9yeSBlbnRyeSBwb2ludHMgdG8gaW5vZGUgbm93IGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMl9CQl9JTk9ERQkJMHgwMjAwMDUKKworLyogRGlyZWN0b3J5IGVudHJ5IGNvbnRhaW5zIGEgbGluayB0byBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8yX0xJTktfRElSCQkweDAyMDAwNgorCisvKiBEaXJlY3RvcnkgZW50cnkgY29udGFpbnMgYSBsaW5rIHRvIHRoZSByb290IGRpcmVjdHJ5ICovCisjZGVmaW5lIFBSXzJfTElOS19ST09UCQkweDAyMDAwNworCisvKiBEaXJlY3RvcnkgZW50cnkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZSAqLworI2RlZmluZSBQUl8yX0JBRF9OQU1FCQkweDAyMDAwOAorCisvKiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMl9NSVNTSU5HX0RPVAkweDAyMDAwOQorCisvKiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICovCisjZGVmaW5lIFBSXzJfTUlTU0lOR19ET1RfRE9UCTB4MDIwMDBBCisKKy8qIEZpcnN0IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSBkb2Vzbid0IGNvbnRhaW4gJy4nICovCisjZGVmaW5lIFBSXzJfMVNUX05PVF9ET1QJMHgwMjAwMEIKKworLyogU2Vjb25kIGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSBkb2Vzbid0IGNvbnRhaW4gJy4uJyAqLworI2RlZmluZSBQUl8yXzJORF9OT1RfRE9UX0RPVAkweDAyMDAwQworCisvKiBpX2ZhZGRyIHNob3VsZCBiZSB6ZXJvICovCisjZGVmaW5lIFBSXzJfRkFERFJfWkVSTwkJMHgwMjAwMEQKKworLyogaV9maWxlX2FjbCBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZJTEVfQUNMX1pFUk8JMHgwMjAwMEUKKworLyogaV9kaXJfYWNsIHNob3VsZCBiZSB6ZXJvICovCisjZGVmaW5lIFBSXzJfRElSX0FDTF9aRVJPCTB4MDIwMDBGCisKKy8qIGlfZnJhZyBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZSQUdfWkVSTwkJMHgwMjAwMTAKKworLyogaV9mc2l6ZSBzaG91bGQgYmUgemVybyAqLworI2RlZmluZSBQUl8yX0ZTSVpFX1pFUk8JCTB4MDIwMDExCisKKy8qIGlub2RlIGhhcyBiYWQgbW9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9NT0RFCQkweDAyMDAxMgorCisvKiBkaXJlY3RvcnkgY29ycnVwdGVkICovCisjZGVmaW5lIFBSXzJfRElSX0NPUlJVUFRFRAkweDAyMDAxMworCisvKiBmaWxlbmFtZSB0b28gbG9uZyAqLworI2RlZmluZSBQUl8yX0ZJTEVOQU1FX0xPTkcJMHgwMjAwMTQKKworLyogRGlyZWN0b3J5IGlub2RlIGhhcyBhIG1pc3NpbmcgYmxvY2sgKGhvbGUpICovCisjZGVmaW5lIFBSXzJfRElSRUNUT1JZX0hPTEUJMHgwMjAwMTUKKworLyogJy4nIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWQgKi8KKyNkZWZpbmUgUFJfMl9ET1RfTlVMTF9URVJNCTB4MDIwMDE2CisKKy8qICcuLicgaXMgbm90IE5VTEwgdGVybWluYXRlZCAqLworI2RlZmluZSBQUl8yX0RPVF9ET1RfTlVMTF9URVJNCTB4MDIwMDE3CisKKy8qIElsbGVnYWwgY2hhcmFjdGVyIGRldmljZSBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9DSEFSX0RFVgkweDAyMDAxOAorCisvKiBJbGxlZ2FsIGJsb2NrIGRldmljZSBpbiBpbm9kZSAqLworI2RlZmluZSBQUl8yX0JBRF9CTE9DS19ERVYJMHgwMjAwMTkKKworLyogRHVwbGljYXRlICcuJyBlbnRyeSAqLworI2RlZmluZSBQUl8yX0RVUF9ET1QJCTB4MDIwMDFBCisKKy8qIER1cGxpY2F0ZSAnLi4nIGVudHJ5ICovCisjZGVmaW5lIFBSXzJfRFVQX0RPVF9ET1QJMHgwMjAwMUIKKworLyogSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gKi8KKyNkZWZpbmUgUFJfMl9OT19ESVJJTkZPCQkweDAyMDAxQworCisvKiBGaW5hbCByZWNfbGVuIGlzIHdyb25nICovCisjZGVmaW5lIFBSXzJfRklOQUxfUkVDTEVOCTB4MDIwMDFECisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZSAqLworI2RlZmluZSBQUl8yX0FMTE9DQVRFX0lDT1VOVAkweDAyMDAxRQorCisvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzICovCisjZGVmaW5lIFBSXzJfREJMSVNUX0lURVJBVEUJMHgwMjAwMUYKKworLyogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgKi8KKyNkZWZpbmUgUFJfMl9SRUFEX0RJUkJMT0NLCTB4MDIwMDIwCisKKy8qIEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICovCisjZGVmaW5lIFBSXzJfV1JJVEVfRElSQkxPQ0sJMHgwMjAwMjEKKworLyogRXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrICovCisjZGVmaW5lIFBSXzJfQUxMT0NfRElSQk9DSwkweDAyMDAyMgorCisvKiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgKi8KKyNkZWZpbmUgUFJfMl9ERUFMTE9DX0lOT0RFCTB4MDIwMDIzCisKKy8qIERpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGlzIGJpZy4gIFNwbGl0PyAqLworI2RlZmluZSBQUl8yX1NQTElUX0RPVAkJMHgwMjAwMjQKKworLyogSWxsZWdhbCBGSUZPICovCisjZGVmaW5lIFBSXzJfQkFEX0ZJRk8JCTB4MDIwMDI1CisKKy8qIElsbGVnYWwgc29ja2V0ICovCisjZGVmaW5lIFBSXzJfQkFEX1NPQ0tFVAkJMHgwMjAwMjYKKworLyogRGlyZWN0b3J5IGZpbGV0eXBlIG5vdCBzZXQgKi8KKyNkZWZpbmUgUFJfMl9TRVRfRklMRVRZUEUJMHgwMjAwMjcKKworLyogRGlyZWN0b3J5IGZpbGV0eXBlIGluY29ycmVjdCAqLworI2RlZmluZSBQUl8yX0JBRF9GSUxFVFlQRQkweDAyMDAyOAorCisvKiBEaXJlY3RvcnkgZmlsZXR5cGUgc2V0IHdoZW4gaXQgc2hvdWxkbid0IGJlICovCisjZGVmaW5lIFBSXzJfQ0xFQVJfRklMRVRZUEUJMHgwMjAwMjkKKworLyogRGlyZWN0b3J5IGZpbGVuYW1lIGNhbid0IGJlIHplcm8tbGVuZ3RoICAqLworI2RlZmluZSBQUl8yX05VTExfTkFNRQkJMHgwMjAwMzAKKworLyogSW52YWxpZCBzeW1saW5rICovCisjZGVmaW5lIFBSXzJfSU5WQUxJRF9TWU1MSU5LCTB4MDIwMDMxCisKKy8qIGlfZmlsZV9hY2wgKGV4dGVuZGVkIGF0dHJpYnV0ZSkgaXMgYmFkICovCisjZGVmaW5lIFBSXzJfRklMRV9BQ0xfQkFECTB4MDIwMDMyCisKKy8qIEZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBoYXMgbm8gc3VjaCBmbGFnIGluIHNiICovCisjZGVmaW5lIFBSXzJfRkVBVFVSRV9MQVJHRV9GSUxFUyAweDAyMDAzMworCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBub3QgcmVmZXJlbmNlZCAqLworI2RlZmluZSBQUl8yX0hUUkVFX05PVFJFRgkweDAyMDAzNAorCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSByZWZlcmVuY2VkIHR3aWNlICovCisjZGVmaW5lIFBSXzJfSFRSRUVfRFVQUkVGCTB4MDIwMDM1CisKKy8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IGhhcyBiYWQgbWluIGhhc2ggKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9NSU5fSEFTSAkweDAyMDAzNgorCisvKiBOb2RlIGluIEhUUkVFIGRpcmVjdG9yeSBoYXMgYmFkIG1heCBoYXNoICovCisjZGVmaW5lIFBSXzJfSFRSRUVfTUFYX0hBU0gJMHgwMjAwMzcKKworLyogQ2xlYXIgaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9DTEVBUgkweDAyMDAzOAorCisvKiBDbGVhciB0aGUgaHRyZWUgZmxhZyBmb3JjaWJseSAqLworLyogI2RlZmluZSBQUl8yX0hUUkVFX0ZDTFIJMHgwMjAwMzkgKi8KKworLyogQmFkIGJsb2NrIGluIGh0cmVlIGludGVyaW9yIG5vZGUgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9CQURCTEsJMHgwMjAwM0EKKworLyogRXJyb3IgYWRqdXN0aW5nIEVBIHJlZmNvdW50ICovCisjZGVmaW5lIFBSXzJfQURKX0VBX1JFRkNPVU5UCTB4MDIwMDNCCisKKy8qIEludmFsaWQgSFRSRUUgcm9vdCBub2RlICovCisjZGVmaW5lIFBSXzJfSFRSRUVfQkFEX1JPT1QJMHgwMjAwM0MKKworLyogSW52YWxpZCBIVFJFRSBsaW1pdCAqLworI2RlZmluZSBQUl8yX0hUUkVFX0JBRF9MSU1JVAkweDAyMDAzRAorCisvKiBJbnZhbGlkIEhUUkVFIGNvdW50ICovCisjZGVmaW5lIFBSXzJfSFRSRUVfQkFEX0NPVU5UCTB4MDIwMDNFCisKKy8qIEhUUkVFIGludGVyaW9yIG5vZGUgaGFzIG91dC1vZi1vcmRlciBoYXNoZXMgaW4gdGFibGUgKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9IQVNIX09SREVSCTB4MDIwMDNGCisKKy8qIE5vZGUgaW4gSFRSRUUgZGlyZWN0b3J5IGhhcyBiYWQgZGVwdGggKi8KKyNkZWZpbmUgUFJfMl9IVFJFRV9CQURfREVQVEgJMHgwMjAwNDAKKworLyogRHVwbGljYXRlIGRpcmVjdG9yeSBlbnRyeSBmb3VuZCAqLworI2RlZmluZSBQUl8yX0RVUExJQ0FURV9ESVJFTlQJMHgwMjAwNDEKKworLyogTm9uLXVuaXF1ZSBmaWxlbmFtZSBmb3VuZCAqLworI2RlZmluZSBQUl8yX05PTl9VTklRVUVfRklMRQkweDAyMDA0MgorCisvKiBEdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJ5IGZvdW5kICovCisjZGVmaW5lIFBSXzJfUkVQT1JUX0RVUF9ESVJFTlQJMHgwMjAwNDMKKworLyogaV9ibG9ja3NfaGkgc2hvdWxkIGJlIHplcm8gKi8KKyNkZWZpbmUgUFJfMl9CTE9DS1NfSElfWkVSTwkweDAyMDA0NAorCisvKiBVbmV4cGVjdGVkIEhUUkVFIGJsb2NrICovCisjZGVmaW5lIFBSXzJfVU5FWFBFQ1RFRF9IVFJFRV9CTE9DSwkweDAyMDA0NQorCisvKiBJbm9kZSBmb3VuZCBpbiBncm91cCB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldCAqLworI2RlZmluZSBQUl8yX0lOT1JFRl9CR19JTk9fVU5JTklUCTB4MDIwMDQ2CisKKy8qIElub2RlIGZvdW5kIGluIGdyb3VwIHVudXNlZCBpbm9kZXMgYXJlYSAqLworI2RlZmluZSBQUl8yX0lOT1JFRl9JTl9VTlVTRUQJCTB4MDIwMDQ3CisKKy8qIGlfZmlsZV9hY2xfaGkgc2hvdWxkIGJlIHplcm8gKi8KKyNkZWZpbmUgUFJfMl9JX0ZJTEVfQUNMX0hJX1pFUk8JCTB4MDIwMDQ4CisKKy8qCisgKiBQYXNzIDMgZXJyb3JzCisgKi8KKworLyogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5ICovCisjZGVmaW5lIFBSXzNfUEFTU19IRUFERVIJCTB4MDMwMDAwCisKKy8qIFJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZCAqLworI2RlZmluZSBQUl8zX05PX1JPT1RfSU5PREUJCTB4MDMwMDAxCisKKy8qIE5vIHJvb20gaW4gbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VYUEFORF9MRl9ESVIJCTB4MDMwMDAyCisKKy8qIFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAqLworI2RlZmluZSBQUl8zX1VOQ09OTkVDVEVEX0RJUgkJMHgwMzAwMDMKKworLyogL2xvc3QrZm91bmQgbm90IGZvdW5kICovCisjZGVmaW5lIFBSXzNfTk9fTEZfRElSCQkJMHgwMzAwMDQKKworLyogLi4gZW50cnkgaXMgaW5jb3JyZWN0ICovCisjZGVmaW5lIFBSXzNfQkFEX0RPVF9ET1QJCTB4MDMwMDA1CisKKy8qIEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0ICovCisjZGVmaW5lIFBSXzNfTk9fTFBGCQkJMHgwMzAwMDYKKworLyogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0NBTlRfRVhQQU5EX0xQRgkJMHgwMzAwMDcKKworLyogQ291bGQgbm90IHJlY29ubmVjdCBpbm9kZSAqLworI2RlZmluZSBQUl8zX0NBTlRfUkVDT05ORUNUCQkweDAzMDAwOAorCisvKiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9GSU5EX0xQRgkJMHgwMzAwMDkKKworLyogRXJyb3IgaW4gZXh0MmZzX25ld19ibG9jayB3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9MUEZfTkVXX0JMT0NLCQkweDAzMDAwQQorCisvKiBFcnJvciBpbiBleHQyZnNfbmV3X2lub2RlIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisjZGVmaW5lIFBSXzNfRVJSX0xQRl9ORVdfSU5PREUJCTB4MDMwMDBCCisKKy8qIEVycm9yIGluIGV4dDJmc19uZXdfZGlyX2Jsb2NrIHdoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kICovCisjZGVmaW5lIFBSXzNfRVJSX0xQRl9ORVdfRElSX0JMT0NLCTB4MDMwMDBDCisKKy8qIEVycm9yIHdoaWxlIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZCAqLworI2RlZmluZSBQUl8zX0VSUl9MUEZfV1JJVEVfQkxPQ0sJMHgwMzAwMEQKKworLyogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50ICovCisjZGVmaW5lIFBSXzNfQURKVVNUX0lOT0RFCQkweDAzMDAwRQorCisvKiBDb3VsZG4ndCBmaXggcGFyZW50IGRpcmVjdG9yeSAtLSBlcnJvciAqLworI2RlZmluZSBQUl8zX0ZJWF9QQVJFTlRfRVJSCQkweDAzMDAwRgorCisvKiBDb3VsZG4ndCBmaXggcGFyZW50IGRpcmVjdG9yeSAtLSBjb3VsZG4ndCBmaW5kIGl0ICovCisjZGVmaW5lIFBSXzNfRklYX1BBUkVOVF9OT0ZJTkQJCTB4MDMwMDEwCisKKy8qIEVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzNfQUxMT0NBVEVfSUJJVE1BUF9FUlJPUgkweDAzMDAxMQorCisvKiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAqLworI2RlZmluZSBQUl8zX0NSRUFURV9ST09UX0VSUk9SCQkweDAzMDAxMgorCisvKiBFcnJvciBjcmVhdGluZyBsb3N0IGFuZCBmb3VuZCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgUFJfM19DUkVBVEVfTFBGX0VSUk9SCQkweDAzMDAxMworCisvKiBSb290IGlub2RlIGlzIG5vdCBkaXJlY3Rvcnk7IGFib3J0aW5nICovCisjZGVmaW5lIFBSXzNfUk9PVF9OT1RfRElSX0FCT1JUCQkweDAzMDAxNAorCisvKiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS4gKi8KKyNkZWZpbmUgUFJfM19OT19ST09UX0lOT0RFX0FCT1JUCTB4MDMwMDE1CisKKy8qIEludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvICovCisjZGVmaW5lIFBSXzNfTk9fRElSSU5GTwkJCTB4MDMwMDE2CisKKy8qIExvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzNfTFBGX05PVERJUgkJCTB4MDMwMDE3CisKKy8qCisgKiBQYXNzIDNhIC0tLSByZWhhc2hpbmcgZGlyZXRvcmllcworICovCisvKiBQYXNzIDNhOiBSZWluZGV4aW5nIGRpcmVjdG9yaWVzICovCisjZGVmaW5lIFBSXzNBX1BBU1NfSEVBREVSCQkweDAzMTAwMAorCisvKiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcmllcyAqLworI2RlZmluZSBQUl8zQV9PUFRJTUlaRV9JVEVSCQkweDAzMTAwMQorCisvKiBFcnJvciByZWhhc2ggZGlyZWN0b3J5ICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9FUlIJCTB4MDMxMDAyCisKKy8qIFJlaGFzaGluZyBkaXIgaGVhZGVyICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9IRUFERVIJMHgwMzEwMDMKKworLyogUmVoYXNoaW5nIGRpcmVjdG9yeSAlZCAqLworI2RlZmluZSBQUl8zQV9PUFRJTUlaRV9ESVIJCTB4MDMxMDA0CisKKy8qIFJlaGFzaGluZyBkaXIgZW5kICovCisjZGVmaW5lIFBSXzNBX09QVElNSVpFX0RJUl9FTkQJCTB4MDMxMDA1CisKKy8qCisgKiBQYXNzIDQgZXJyb3JzCisgKi8KKworLyogUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzICovCisjZGVmaW5lIFBSXzRfUEFTU19IRUFERVIJCTB4MDQwMDAwCisKKy8qIFVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgKi8KKyNkZWZpbmUgUFJfNF9aRVJPX0xFTl9JTk9ERQkJMHgwNDAwMDEKKworLyogVW5hdHRhY2hlZCBpbm9kZSAqLworI2RlZmluZSBQUl80X1VOQVRUQUNIRURfSU5PREUJCTB4MDQwMDAyCisKKy8qIElub2RlIHJlZiBjb3VudCB3cm9uZyAqLworI2RlZmluZSBQUl80X0JBRF9SRUZfQ09VTlQJCTB4MDQwMDAzCisKKy8qIEluY29uc2lzdGVudCBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiBjYWNoZWQgKi8KKyNkZWZpbmUgUFJfNF9JTkNPTlNJU1RFTlRfQ09VTlQJCTB4MDQwMDA0CisKKy8qCisgKiBQYXNzIDUgZXJyb3JzCisgKi8KKworLyogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBSXzVfUEFTU19IRUFERVIJCTB4MDUwMDAwCisKKy8qIFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAqLworI2RlZmluZSBQUl81X0lOT0RFX0JNQVBfUEFERElORwkJMHgwNTAwMDEKKworLyogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfQk1BUF9QQURESU5HCQkweDA1MDAwMgorCisvKiBCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXMgaGVhZGVyICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfQklUTUFQX0hFQURFUgkweDA1MDAwMworCisvKiBCbG9jayBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9CTE9DS19VTlVTRUQJCTB4MDUwMDA0CisKKy8qIEJsb2NrIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfVVNFRAkJCTB4MDUwMDA1CisKKy8qIEJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKyNkZWZpbmUgUFJfNV9CTE9DS19CSVRNQVBfRU5ECQkweDA1MDAwNgorCisvKiBJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXMgaGVhZGVyICovCisjZGVmaW5lIFBSXzVfSU5PREVfQklUTUFQX0hFQURFUgkweDA1MDAwNworCisvKiBJbm9kZSBub3QgdXNlZCwgYnV0IG1hcmtlZCBpbiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9JTk9ERV9VTlVTRUQJCTB4MDUwMDA4CisKKy8qIElub2RlIHVzZWQsIGJ1dCBub3QgbWFya2VkIHVzZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfSU5PREVfVVNFRAkJCTB4MDUwMDA5CisKKy8qIElub2RlIGJpdG1hcCBkaWZmZXJlbmNlcyBlbmQgKi8KKyNkZWZpbmUgUFJfNV9JTk9ERV9CSVRNQVBfRU5ECQkweDA1MDAwQQorCisvKiBGcmVlIGlub2RlcyBjb3VudCBmb3IgZ3JvdXAgd3JvbmcgKi8KKyNkZWZpbmUgUFJfNV9GUkVFX0lOT0RFX0NPVU5UX0dST1VQCTB4MDUwMDBCCisKKy8qIERpcmVjdG9yaWVzIGNvdW50IGZvciBncm91cCB3cm9uZyAqLworI2RlZmluZSBQUl81X0ZSRUVfRElSX0NPVU5UX0dST1VQCTB4MDUwMDBDCisKKy8qIEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICovCisjZGVmaW5lIFBSXzVfRlJFRV9JTk9ERV9DT1VOVAkJMHgwNTAwMEQKKworLyogRnJlZSBibG9ja3MgY291bnQgZm9yIGdyb3VwIHdyb25nICovCisjZGVmaW5lIFBSXzVfRlJFRV9CTE9DS19DT1VOVF9HUk9VUAkweDA1MDAwRQorCisvKiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAqLworI2RlZmluZSBQUl81X0ZSRUVfQkxPQ0tfQ09VTlQJCTB4MDUwMDBGCisKKy8qIFByb2dyYW1taW5nIGVycm9yOiBiaXRtYXAgZW5kcG9pbnRzIGRvbid0IG1hdGNoICovCisjZGVmaW5lIFBSXzVfQk1BUF9FTkRQT0lOVFMJCTB4MDUwMDEwCisKKy8qIEludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKi8KKyNkZWZpbmUgUFJfNV9GVURHRV9CSVRNQVBfRVJST1IJCTB4MDUwMDExCisKKy8qIEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwICovCisjZGVmaW5lIFBSXzVfQ09QWV9JQklUTUFQX0VSUk9SCQkweDA1MDAxMgorCisvKiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0NPUFlfQkJJVE1BUF9FUlJPUgkJMHgwNTAwMTMKKworLyogQmxvY2sgcmFuZ2Ugbm90IHVzZWQsIGJ1dCBtYXJrZWQgaW4gYml0bWFwICovCisjZGVmaW5lIFBSXzVfQkxPQ0tfUkFOR0VfVU5VU0VECQkweDA1MDAxNAorCisvKiBCbG9jayByYW5nZSB1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0JMT0NLX1JBTkdFX1VTRUQJCTB4MDUwMDE1CisKKy8qIElub2RlIHJhbmdlIG5vdCB1c2VkLCBidXQgbWFya2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0lOT0RFX1JBTkdFX1VOVVNFRAkJMHgwNTAwMTYKKworLyogSW5vZGUgcmFuZ2V1c2VkLCBidXQgbm90IG1hcmtlZCB1c2VkIGluIGJpdG1hcCAqLworI2RlZmluZSBQUl81X0lOT0RFX1JBTkdFX1VTRUQJCTB4MDUwMDE3CisKKy8qIEJsb2NrIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVCAqLworI2RlZmluZSBQUl81X0JMT0NLX1VOSU5JVAkJMHgwNTAwMTgKKworLyogSW5vZGUgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUICovCisjZGVmaW5lIFBSXzVfSU5PREVfVU5JTklUCQkweDA1MDAxOQorCisvKgorICogUG9zdC1QYXNzIDUgZXJyb3JzCisgKi8KKworLyogUmVjcmVhdGUgdGhlIGpvdXJuYWwgaWYgRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERSBmbGFnIGlzIHNldCAqLworI2RlZmluZSBQUl82X1JFQ1JFQVRFX0pPVVJOQUwJCTB4MDYwMDAxCisKKy8qIFVwZGF0ZSBxdW90YSBpbmZvcm1hdGlvbiBpZiBpdCBpcyBpbmNvbnNpc3RlbnQgKi8KKyNkZWZpbmUgUFJfNl9VUERBVEVfUVVPVEFTCQkweDA2MDAwMgorCisvKgorICogRnVuY3Rpb24gZGVjbGFyYXRpb25zCisgKi8KK2ludCBmaXhfcHJvYmxlbShlMmZzY2tfdCBjdHgsIHByb2JsZW1fdCBjb2RlLCBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KTsKK2ludCBlbmRfcHJvYmxlbV9sYXRjaChlMmZzY2tfdCBjdHgsIGludCBtYXNrKTsKK2ludCBzZXRfbGF0Y2hfZmxhZ3MoaW50IG1hc2ssIGludCBzZXRmbGFncywgaW50IGNsZWFyZmxhZ3MpOworaW50IGdldF9sYXRjaF9mbGFncyhpbnQgbWFzaywgaW50ICp2YWx1ZSk7Cit2b2lkIGNsZWFyX3Byb2JsZW1fY29udGV4dChzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KTsKKworLyogbWVzc2FnZS5jICovCit2b2lkIHByaW50X2UyZnNja19tZXNzYWdlKEZJTEUgKmYsIGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqbXNnLAorCQkJICBzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4LCBpbnQgZmlyc3QsCisJCQkgIGludCByZWN1cnNlKTsKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wcm9ibGVtUC5oIGIvZTJmc3Byb2dzL2UyZnNjay9wcm9ibGVtUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDRjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2JsZW1QLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIHByb2JsZW1QLmggLS0tIFByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGZpeF9wcm9ibGVtKCkKKyAqCisgKiBDb3B5cmlnaHQgMTk5NyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitzdHJ1Y3QgZTJmc2NrX3Byb2JsZW0geworCXByb2JsZW1fdAllMnBfY29kZTsKKwljb25zdCBjaGFyICoJZTJwX2Rlc2NyaXB0aW9uOworCWNoYXIJCXByb21wdDsKKwlpbnQJCWZsYWdzOworCXByb2JsZW1fdAlzZWNvbmRfY29kZTsKKwlpbnQJCWNvdW50OworCWludAkJbWF4X2NvdW50OworfTsKKworc3RydWN0IGxhdGNoX2Rlc2NyIHsKKwlpbnQJCWxhdGNoX2NvZGU7CisJcHJvYmxlbV90CXF1ZXN0aW9uOworCXByb2JsZW1fdAllbmRfbWVzc2FnZTsKKwlpbnQJCWZsYWdzOworfTsKKworI2RlZmluZSBQUl9QUkVFTl9PSwkweDAwMDAwMSAvKiBEb24ndCBuZWVkIHRvIGRvIHByZWVuaGFsdCAqLworI2RlZmluZSBQUl9OT19PSwkweDAwMDAwMiAvKiBJZiB1c2VyIGFuc3dlcnMgbm8sIGRvbid0IG1ha2UgZnMgaW52YWxpZCAqLworI2RlZmluZSBQUl9OT19ERUZBVUxUCTB4MDAwMDA0IC8qIERlZmF1bHQgdG8gbm8gKi8KKyNkZWZpbmUgUFJfTVNHX09OTFkJMHgwMDAwMDggLyogUHJpbnQgbWVzc2FnZSBvbmx5ICovCisKKy8qIEJpdCBwb3NpdGlvbnMgMHgwMDBmZjAgYXJlIHJlc2VydmVkIGZvciB0aGUgUFJfTEFUQ0ggZmxhZ3MgKi8KKworI2RlZmluZSBQUl9GQVRBTAkweDAwMTAwMCAvKiBGYXRhbCBlcnJvciAqLworI2RlZmluZSBQUl9BRlRFUl9DT0RFCTB4MDAyMDAwIC8qIEFmdGVyIGFza2luZyB0aGUgZmlyc3QgcXVlc3Rpb24sICovCisJCQkJIC8qIGFzayBhbm90aGVyICovCisjZGVmaW5lIFBSX1BSRUVOX05PTVNHCTB4MDA0MDAwIC8qIERvbid0IHByaW50IGEgbWVzc2FnZSBpZiB3ZSdyZSBwcmVlbmluZyAqLworI2RlZmluZSBQUl9OT0NPTExBVEUJMHgwMDgwMDAgLyogRG9uJ3QgY29sbGF0ZSBhbnN3ZXJzIGZvciB0aGlzIGxhdGNoICovCisjZGVmaW5lIFBSX05PX05PTVNHCTB4MDEwMDAwIC8qIERvbid0IHByaW50IGEgbWVzc2FnZSBpZiBlMmZzY2sgLW4gKi8KKyNkZWZpbmUgUFJfUFJFRU5fTk8JMHgwMjAwMDAgLyogVXNlIE5vIGFzIGFuIGFuc3dlciBpZiBwcmVlbmluZyAqLworI2RlZmluZSBQUl9QUkVFTl9OT0hEUgkweDA0MDAwMCAvKiBEb24ndCBwcmludCB0aGUgcHJlZW4gaGVhZGVyICovCisjZGVmaW5lIFBSX0NPTkZJRwkweDA4MDAwMCAvKiBUaGlzIHByb2JsZW0gaGFzIGJlZW4gY3VzdG9taXplZAorCQkJCSAgICBmcm9tIHRoZSBjb25maWcgZmlsZSAqLworI2RlZmluZSBQUl9GT1JDRV9OTwkweDEwMDAwMCAvKiBGb3JjZSB0aGUgYW5zd2VyIHRvIGJlIG5vICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZfZXJyLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4ZDQzYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZl9lcnIuYwpAQCAtMCwwICsxLDg1IEBACisvKgorICogcHJvZl9lcnIuYzoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOXyhhKSBhCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geworCU5fKCJQcm9maWxlIHZlcnNpb24gMC4wIiksCisJTl8oIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiKSwKKwlOXygiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIpLAorCU5fKCJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIpLAorCU5fKAkiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iKSwKKwlOXygJIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIpLAorCU5fKCJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIiksCisJTl8oIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiKSwKKwlOXygJIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiKSwKKwlOXygiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiKSwKKwlOXygiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIpLAorCU5fKCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiKSwKKwlOXygiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiKSwKKwlOXygiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIiksCisJTl8oIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIiksCisJTl8oIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIiksCisJTl8oIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIpLAorCU5fKCJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIpLAorCU5fKCJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IiksCisJTl8oIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIpLAorCU5fKAkiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiKSwKKwlOXygiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IiksCisJTl8oIk5vIG1vcmUgc2VjdGlvbnMiKSwKKwlOXygiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiKSwKKwlOXygiTm8gcHJvZmlsZSBmaWxlIG9wZW4iKSwKKwlOXygiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IiksCisJTl8oIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIiksCisJTl8oIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiKSwKKwlOXygiSW52YWxpZCBib29sZWFuIHZhbHVlIiksCisJTl8oIkludmFsaWQgaW50ZWdlciB2YWx1ZSIpLAorCU5fKCJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIpLAorICAgIDAKK307CisKK3N0cnVjdCBlcnJvcl90YWJsZSB7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsKKyAgICBsb25nIGJhc2U7CisgICAgaW50IG5fbXNnczsKK307CitzdHJ1Y3QgZXRfbGlzdCB7CisgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7CisgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsKKworY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X3Byb2ZfZXJyb3JfdGFibGUgPSB7IHRleHQsIC0xNDI5NTc3NzI4TCwgMzEgfTsKKworc3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsKKwordm9pZCBpbml0aWFsaXplX3Byb2ZfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX3Byb2ZfZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9wcm9mX2Vycm9yX3RhYmxlKHZvaWQpIHsKKyAgICBpbml0aWFsaXplX3Byb2ZfZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfcHJvZl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfcHJvZl9lcnJvcl90YWJsZTsKKyAgICBldC0+bmV4dCA9IDA7CisgICAgKmVuZCA9IGV0OworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wcm9mX2Vyci5ldCBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZl9lcnIuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzMTZjNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZl9lcnIuZXQKQEAgLTAsMCArMSw2NiBAQAorZXJyb3JfdGFibGUgcHJvZgorCitlcnJvcl9jb2RlCVBST0ZfVkVSU0lPTiwJIlByb2ZpbGUgdmVyc2lvbiAwLjAiCisKKyMKKyMgZ2VuZXJhdGVkIGJ5IHByb2ZfdHJlZS5jCisjCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfTk9ERSwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCitlcnJvcl9jb2RlCVBST0ZfTk9fU0VDVElPTiwJIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCitlcnJvcl9jb2RlCVBST0ZfTk9fUkVMQVRJT04sCSJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK2Vycm9yX2NvZGUJUFJPRl9BRERfTk9UX1NFQ1RJT04sIAorCSJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK2Vycm9yX2NvZGUJUFJPRl9TRUNUSU9OX1dJVEhfVkFMVUUsIAorCSJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCitlcnJvcl9jb2RlCVBST0ZfQkFEX0xJTktfTElTVCwgCSJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorZXJyb3JfY29kZQlQUk9GX0JBRF9HUk9VUF9MVkwsIAkiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK2Vycm9yX2NvZGUJUFJPRl9CQURfUEFSRU5UX1BUUiwgCQorCSJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorZXJyb3JfY29kZQlQUk9GX01BR0lDX0lURVJBVE9SLAkiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCitlcnJvcl9jb2RlCVBST0ZfU0VUX1NFQ1RJT05fVkFMVUUsCSJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorZXJyb3JfY29kZQlQUk9GX0VJTlZBTCwJCSJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCitlcnJvcl9jb2RlCVBST0ZfUkVBRF9PTkxZLAkJIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorCisjCisjIGdlbmVyYXRlZCBieSBwcm9mX3BhcnNlLmMKKyMKKworZXJyb3JfY29kZQlQUk9GX1NFQ1RJT05fTk9UT1AsICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCitlcnJvcl9jb2RlCVBST0ZfU0VDVElPTl9TWU5UQVgsICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK2Vycm9yX2NvZGUJUFJPRl9SRUxBVElPTl9TWU5UQVgsICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK2Vycm9yX2NvZGUJUFJPRl9FWFRSQV9DQlJBQ0UsICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCitlcnJvcl9jb2RlCVBST0ZfTUlTU0lOR19PQlJBQ0UsICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKKworIworIyBnZW5lcmF0ZWQgYnkgcHJvZl9pbml0LmMKKyMgCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfUFJPRklMRSwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfU0VDVElPTiwJIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK2Vycm9yX2NvZGUJUFJPRl9UT1BTRUNUSU9OX0lURVJfTk9TVVBQLAorCSJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK2Vycm9yX2NvZGUJUFJPRl9JTlZBTElEX1NFQ1RJT04sCSJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCitlcnJvcl9jb2RlCVBST0ZfRU5EX09GX1NFQ1RJT05TLAkiTm8gbW9yZSBzZWN0aW9ucyIKK2Vycm9yX2NvZGUJUFJPRl9CQURfTkFNRVNFVCwJIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorZXJyb3JfY29kZQlQUk9GX05PX1BST0ZJTEUsCSJObyBwcm9maWxlIGZpbGUgb3BlbiIKKworIworIyBnZW5lcmF0ZWQgYnkgcHJvZl9maWxlLmMKKyMKK2Vycm9yX2NvZGUgICAgICBQUk9GX01BR0lDX0ZJTEUsCSJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCitlcnJvcl9jb2RlCVBST0ZfRkFJTF9PUEVOLAkJIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorCisjCisjIGdlbmVyYXRlZCBieSBwcm9mX3NldC5jCisjCitlcnJvcl9jb2RlCVBST0ZfRVhJU1RTLAkJIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCisKKyMKKyMgZ2VuZXJhdGVkIGJ5IHByb2ZfZ2V0LmMKKyMKK2Vycm9yX2NvZGUJUFJPRl9CQURfQk9PTEVBTiwJCSJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCitlcnJvcl9jb2RlCVBST0ZfQkFEX0lOVEVHRVIsCQkiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorCitlcnJvcl9jb2RlCVBST0ZfTUFHSUNfRklMRV9EQVRBLCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCisKKworZW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZfZXJyLmggYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZfZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwNjZkZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZl9lcnIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogcHJvZl9lcnIuaDoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisKKyNkZWZpbmUgUFJPRl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MjhMKQorI2RlZmluZSBQUk9GX01BR0lDX05PREUgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcyN0wpCisjZGVmaW5lIFBST0ZfTk9fU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzI2TCkKKyNkZWZpbmUgUFJPRl9OT19SRUxBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MjVMKQorI2RlZmluZSBQUk9GX0FERF9OT1RfU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcyNEwpCisjZGVmaW5lIFBST0ZfU0VDVElPTl9XSVRIX1ZBTFVFICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzIzTCkKKyNkZWZpbmUgUFJPRl9CQURfTElOS19MSVNUICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MjJMKQorI2RlZmluZSBQUk9GX0JBRF9HUk9VUF9MVkwgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcyMUwpCisjZGVmaW5lIFBST0ZfQkFEX1BBUkVOVF9QVFIgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzIwTCkKKyNkZWZpbmUgUFJPRl9NQUdJQ19JVEVSQVRPUiAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MTlMKQorI2RlZmluZSBQUk9GX1NFVF9TRUNUSU9OX1ZBTFVFICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcxOEwpCisjZGVmaW5lIFBST0ZfRUlOVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzE3TCkKKyNkZWZpbmUgUFJPRl9SRUFEX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MTZMKQorI2RlZmluZSBQUk9GX1NFQ1RJT05fTk9UT1AgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcxNUwpCisjZGVmaW5lIFBST0ZfU0VDVElPTl9TWU5UQVggICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzE0TCkKKyNkZWZpbmUgUFJPRl9SRUxBVElPTl9TWU5UQVggICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MTNMKQorI2RlZmluZSBQUk9GX0VYVFJBX0NCUkFDRSAgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcxMkwpCisjZGVmaW5lIFBST0ZfTUlTU0lOR19PQlJBQ0UgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzExTCkKKyNkZWZpbmUgUFJPRl9NQUdJQ19QUk9GSUxFICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MTBMKQorI2RlZmluZSBQUk9GX01BR0lDX1NFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcwOUwpCisjZGVmaW5lIFBST0ZfVE9QU0VDVElPTl9JVEVSX05PU1VQUCAgICAgICAgICAgICAgKC0xNDI5NTc3NzA4TCkKKyNkZWZpbmUgUFJPRl9JTlZBTElEX1NFQ1RJT04gICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MDdMKQorI2RlZmluZSBQUk9GX0VORF9PRl9TRUNUSU9OUyAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcwNkwpCisjZGVmaW5lIFBST0ZfQkFEX05BTUVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzA1TCkKKyNkZWZpbmUgUFJPRl9OT19QUk9GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MDRMKQorI2RlZmluZSBQUk9GX01BR0lDX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcwM0wpCisjZGVmaW5lIFBST0ZfRkFJTF9PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3NzAyTCkKKyNkZWZpbmUgUFJPRl9FWElTVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc3MDFMKQorI2RlZmluZSBQUk9GX0JBRF9CT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQyOTU3NzcwMEwpCisjZGVmaW5lIFBST0ZfQkFEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNDI5NTc3Njk5TCkKKyNkZWZpbmUgUFJPRl9NQUdJQ19GSUxFX0RBVEEgICAgICAgICAgICAgICAgICAgICAoLTE0Mjk1Nzc2OThMKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9wcm9mX2Vycm9yX3RhYmxlOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9wcm9mX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfcHJvZl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7CisKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9wcm9mICgtMTQyOTU3NzcyOEwpCisKKy8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuLi4gKi8KKyNkZWZpbmUgaW5pdF9wcm9mX2Vycl90YmwgaW5pdGlhbGl6ZV9wcm9mX2Vycm9yX3RhYmxlCisjZGVmaW5lIHByb2ZfZXJyX2Jhc2UgRVJST1JfVEFCTEVfQkFTRV9wcm9mCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZpbGUuYyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWIwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZpbGUuYwpAQCAtMCwwICsxLDE5MDMgQEAKKy8qCisgKiBwcm9maWxlLmMgLS0gQSBzaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIHBhcnNpbmcgImxpYnJhcnkgaW4gYSBmaWxlIgorICoKKyAqIFRoZSBwcm9maWxlIGxpYnJhcnkgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIGluIDE5OTUKKyAqIGZvciB1c2UgaW4gdGhlIE1JVCBLZXJiZXJvcyB2NSBsaWJyYXJ5LiAgSXQgaGFzIGJlZW4KKyAqIG1vZGlmaWVkL2VuaGFuY2VkL2J1Zy1maXhlZCBvdmVyIHRpbWUgYnkgb3RoZXIgbWVtYmVycyBvZiB0aGUgTUlUCisgKiBLZXJiZXJvcyB0ZWFtLiAgVGhpcyB2ZXJzaW9uIHdhcyBvcmlnaW5hbGx5IHRha2VuIGZyb20gdGhlIEtlcmJlcm9zCisgKiB2NSBkaXN0cmlidXRpb24sIHZlcnNpb24gMS40LjIsIGFuZCByYWRpY2FsbHkgc2ltcGxpZmllZCBmb3IgdXNlIGluCisgKiBlMmZzcHJvZ3MuICAoU3VwcG9ydCBmb3IgbG9ja2luZyBmb3IgbXVsdGktdGhyZWFkZWQgb3BlcmF0aW9ucywKKyAqIGJlaW5nIGFibGUgdG8gbW9kaWZ5IGFuZCB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorICogcHJvZ3JhbW1hdGljYWxseSwgYW5kIE1hYy9XaW5kb3dzIHBvcnRhYmlsaXR5IGhhdmUgYmVlbiByZW1vdmVkLgorICogSXQgaGFzIGJlZW4gZm9sZGVkIGludG8gYSBzaW5nbGUgQyBzb3VyY2UgZmlsZSB0byBtYWtlIGl0IGVhc2llciB0bworICogZm9sZCBpbnRvIGFuIGFwcGxpY2F0aW9uIHByb2dyYW0uKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTg1LTIwMDUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5IHJlcXVpcmUKKyAqIGEgc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuICBJdCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0IHRvCisgKiBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAqCisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QgbGFiZWwKKyAqIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZpZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQorICogZmFzaGlvbiB0aGF0IGl0IG1pZ2h0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG9yaWdpbmFsIE1JVCBzb2Z0d2FyZS4KKyAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUKKyAqIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKyAqIHdhcnJhbnR5LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaWZkZWYgSEFWRV9QV0RfSAorI2luY2x1ZGUgPHB3ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgInByb2ZfZXJyLmgiCisKKyN1bmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorI3VuZGVmIEhBVkVfU1RBVAorCisvKgorICogcHJvZl9pbnQuaAorICovCisKK3R5cGVkZWYgbG9uZyBwcmZfbWFnaWNfdDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3aGljaCBzdG9yZXMgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIGEKKyAqIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorICovCitzdHJ1Y3QgX3ByZl9maWxlX3QgeworCXByZl9tYWdpY190CW1hZ2ljOworCWNoYXIJCSpmaWxlc3BlYzsKKyNpZmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorCXRpbWVfdAkJbGFzdF9zdGF0OworI2VuZGlmCisJdGltZV90CQl0aW1lc3RhbXA7IC8qIHRpbWUgdHJlZSB3YXMgbGFzdCB1cGRhdGVkIGZyb20gZmlsZSAqLworCWludAkJZmxhZ3M7CS8qIHIvdywgZGlydHkgKi8KKwlpbnQJCXVwZF9zZXJpYWw7IC8qIGluY3JlbWVudGVkIHdoZW4gZGF0YSBjaGFuZ2VzICovCisJc3RydWN0IHByb2ZpbGVfbm9kZSAqcm9vdDsKKwlzdHJ1Y3QgX3ByZl9maWxlX3QgKm5leHQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfcHJmX2ZpbGVfdCAqcHJmX2ZpbGVfdDsKKworLyoKKyAqIFRoZSBwcm9maWxlIGZsYWdzCisgKi8KKyNkZWZpbmUgUFJPRklMRV9GSUxFX1JXCQkweDAwMDEKKyNkZWZpbmUgUFJPRklMRV9GSUxFX0RJUlRZCTB4MDAwMgorI2RlZmluZSBQUk9GSUxFX0ZJTEVfTk9fUkVMT0FECTB4MDAwNAorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgaGlnaC1sZXZlbCwgdXNlciB2aXNpYmxlIHByb2ZpbGVfdAorICogb2JqZWN0LCB3aGljaCBpcyB1c2VkIGFzIGEgaGFuZGxlIGJ5IHVzZXJzIHdobyBuZWVkIHRvIHF1ZXJ5IHNvbWUKKyAqIGNvbmZpZ3VyYXRpb24gZmlsZShzKQorICovCitzdHJ1Y3QgX3Byb2ZpbGVfdCB7CisJcHJmX21hZ2ljX3QJbWFnaWM7CisJcHJmX2ZpbGVfdAlmaXJzdF9maWxlOworfTsKKworLyoKKyAqIFVzZWQgYnkgdGhlIHByb2ZpbGUgaXRlcmF0b3IgaW4gcHJvZl9nZXQuYworICovCisjZGVmaW5lIFBST0ZJTEVfSVRFUl9MSVNUX1NFQ1RJT04JMHgwMDAxCisjZGVmaW5lIFBST0ZJTEVfSVRFUl9TRUNUSU9OU19PTkxZCTB4MDAwMgorI2RlZmluZSBQUk9GSUxFX0lURVJfUkVMQVRJT05TX09OTFkJMHgwMDA0CisKKyNkZWZpbmUgUFJPRklMRV9JVEVSX0ZJTkFMX1NFRU4JCTB4MDEwMAorCisvKgorICogQ2hlY2sgaWYgYSBmaWxlc3BlYyBpcyBsYXN0IGluIGEgbGlzdCAoTlVMTCBvbiBVTklYLCBpbnZhbGlkIEZTU3BlYyBvbiBNYWNPUworICovCisKKyNkZWZpbmUJUFJPRklMRV9MQVNUX0ZJTEVTUEVDKHgpICgoKHgpID09IE5VTEwpIHx8ICgoeClbMF0gPT0gJ1wwJykpCisKK3N0cnVjdCBwcm9maWxlX25vZGUgeworCWVycmNvZGVfdAltYWdpYzsKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOworCWludCBncm91cF9sZXZlbDsKKwl1bnNpZ25lZCBpbnQgZmluYWw6MTsJCS8qIEluZGljYXRlIGRvbid0IHNlYXJjaCBuZXh0IGZpbGUgKi8KKwl1bnNpZ25lZCBpbnQgZGVsZXRlZDoxOworCXN0cnVjdCBwcm9maWxlX25vZGUgKmZpcnN0X2NoaWxkOworCXN0cnVjdCBwcm9maWxlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpuZXh0LCAqcHJldjsKK307CisKKyNkZWZpbmUgQ0hFQ0tfTUFHSUMobm9kZSkgXAorCSAgaWYgKChub2RlKS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19OT0RFKSBcCisJCSAgcmV0dXJuIFBST0ZfTUFHSUNfTk9ERTsKKworLyogcHJvZmlsZSBwYXJzZXIgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgcGFyc2Vfc3RhdGUgeworCWludAlzdGF0ZTsKKwlpbnQJZ3JvdXBfbGV2ZWw7CisJaW50CWxpbmVfbnVtOworCXN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3Rfc2VjdGlvbjsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpjdXJyZW50X3NlY3Rpb247Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9maWxlbmFtZSA9ICI8ZGVmYXVsdD4iOworCitzdGF0aWMgcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QJc3ludGF4X2Vycl9jYjsKKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9saW5lKGNoYXIgKmxpbmUsIHN0cnVjdCBwYXJzZV9zdGF0ZSAqc3RhdGUpOworCisjaWZkZWYgREVCVUdfUFJPR1JBTQorc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3dyaXRlX3RyZWVfZmlsZQorCShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpyb290LCBGSUxFICpkc3RmaWxlKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3dyaXRlX3RyZWVfdG9fYnVmZmVyCisJKHN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3QsIGNoYXIgKipidWYpOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgcHJvZmlsZV9mcmVlX25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqcmVsYXRpb24pOworCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfY3JlYXRlX25vZGUKKwkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCisJCSAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSk7CisKKyNpZmRlZiBERUJVR19QUk9HUkFNCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfdmVyaWZ5X25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqbm9kZSk7CisjZW5kaWYKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX2FkZF9ub2RlCisJKHN0cnVjdCBwcm9maWxlX25vZGUgKnNlY3Rpb24sCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJICAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSk7CisKK3N0YXRpYyBlcnJjb2RlX3QgcHJvZmlsZV9maW5kX25vZGUKKwkoc3RydWN0IHByb2ZpbGVfbm9kZSAqc2VjdGlvbiwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkgICAgaW50IHNlY3Rpb25fZmxhZywgdm9pZCAqKnN0YXRlLAorCQkgICAgc3RydWN0IHByb2ZpbGVfbm9kZSAqKm5vZGUpOworCitzdGF0aWMgZXJyY29kZV90IHByb2ZpbGVfbm9kZV9pdGVyYXRvcgorCSh2b2lkCSoqaXRlcl9wLCBzdHJ1Y3QgcHJvZmlsZV9ub2RlICoqcmV0X25vZGUsCisJCSAgIGNoYXIgKipyZXRfbmFtZSwgY2hhciAqKnJldF92YWx1ZSk7CisKK3N0YXRpYyBlcnJjb2RlX3QgcHJvZmlsZV9vcGVuX2ZpbGUKKwkoY29uc3QgY2hhciAqIGZpbGUsIHByZl9maWxlX3QgKnJldF9wcm9mKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX3VwZGF0ZV9maWxlCisJKHByZl9maWxlX3QgcHJmKTsKKworc3RhdGljIHZvaWQgcHJvZmlsZV9mcmVlX2ZpbGUKKwkocHJmX2ZpbGVfdCBwcm9maWxlKTsKKworc3RhdGljIGVycmNvZGVfdCBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCBjaGFyICpzdWJuYW1lLCBjb25zdCBjaGFyICpzdWJzdWJuYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKipyZXRfdmFsdWUpOworCisKKy8qCisgKiBwcm9mX2luaXQuYyAtLS0gcm91dGluZXMgdGhhdCBtYW5pcHVsYXRlIHRoZSB1c2VyLXZpc2libGUgcHJvZmlsZV90CisgKiAJb2JqZWN0LgorICovCisKK3N0YXRpYyBpbnQgY29tcHN0cihjb25zdCB2b2lkICptMSwgY29uc3Qgdm9pZCAqbTIpCit7CisJY29uc3QgY2hhciAqczEgPSAqKChjb25zdCBjaGFyICogY29uc3QgKikgbTEpOworCWNvbnN0IGNoYXIgKnMyID0gKigoY29uc3QgY2hhciAqIGNvbnN0ICopIG0yKTsKKworCXJldHVybiBzdHJjbXAoczEsIHMyKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9saXN0KGNoYXIgKipsaXN0KQoreworICAgIGNoYXIJKipjcDsKKworICAgIGlmIChsaXN0ID09IDApCisJICAgIHJldHVybjsKKworICAgIGZvciAoY3AgPSBsaXN0OyAqY3A7IGNwKyspCisJZnJlZSgqY3ApOworICAgIGZyZWUobGlzdCk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZ2V0X2Rpcmxpc3QoY29uc3QgY2hhciAqZGlybmFtZSwgY2hhcioqKnJldF9hcnJheSkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWNoYXIgKmZuLCAqY3A7CisJY2hhciAqKmFycmF5ID0gMCwgKipuZXdfYXJyYXk7CisJaW50IG1heCA9IDAsIG51bSA9IDA7CisKKwlkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCWlmICghZGlyKQorCQlyZXR1cm4gZXJybm87CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCWZvciAoY3AgPSBkZS0+ZF9uYW1lOyAqY3A7IGNwKyspIHsKKwkJCWlmICghaXNhbG51bSgqY3ApICYmCisJCQkgICAgKCpjcCAhPSAnLScpICYmCisJCQkgICAgKCpjcCAhPSAnXycpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgqY3ApCisJCQljb250aW51ZTsKKwkJZm4gPSBtYWxsb2Moc3RybGVuKGRpcm5hbWUpICsgc3RybGVuKGRlLT5kX25hbWUpICsgMik7CisJCWlmICghZm4pIHsKKwkJCXJldHZhbCA9IEVOT01FTTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCXNwcmludGYoZm4sICIlcy8lcyIsIGRpcm5hbWUsIGRlLT5kX25hbWUpOworCQlpZiAoKHN0YXQoZm4sICZzdCkgPCAwKSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQkJZnJlZShmbik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobnVtID49IG1heCkgeworCQkJbWF4ICs9IDEwOworCQkJbmV3X2FycmF5ID0gcmVhbGxvYyhhcnJheSwgc2l6ZW9mKGNoYXIgKikgKiAobWF4KzEpKTsKKwkJCWlmICghbmV3X2FycmF5KSB7CisJCQkJcmV0dmFsID0gRU5PTUVNOworCQkJCWZyZWUoZm4pOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJYXJyYXkgPSBuZXdfYXJyYXk7CisJCX0KKwkJYXJyYXlbbnVtKytdID0gZm47CisJfQorCWlmIChhcnJheSkgeworCQlxc29ydChhcnJheSwgbnVtLCBzaXplb2YoY2hhciAqKSwgY29tcHN0cik7CisJCWFycmF5W251bSsrXSA9IDA7CisJfQorCSpyZXRfYXJyYXkgPSBhcnJheTsKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworZXJyb3V0OgorCWlmIChhcnJheSkKKwkJYXJyYXlbbnVtXSA9IDA7CisJY2xvc2VkaXIoZGlyKTsKKwlmcmVlX2xpc3QoYXJyYXkpOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9pbml0KGNvbnN0IGNoYXIgKipmaWxlcywgcHJvZmlsZV90ICpyZXRfcHJvZmlsZSkKK3sKKwljb25zdCBjaGFyICoqZnM7CisJcHJvZmlsZV90IHByb2ZpbGU7CisJcHJmX2ZpbGVfdCAgbmV3X2ZpbGUsICpsYXN0OworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNoYXIgKipjcHAsICpjcCwgKiphcnJheSA9IDA7CisKKwlwcm9maWxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgX3Byb2ZpbGVfdCkpOworCWlmICghcHJvZmlsZSkKKwkJcmV0dXJuIEVOT01FTTsKKwltZW1zZXQocHJvZmlsZSwgMCwgc2l6ZW9mKHN0cnVjdCBfcHJvZmlsZV90KSk7CisJcHJvZmlsZS0+bWFnaWMgPSBQUk9GX01BR0lDX1BST0ZJTEU7CisJbGFzdCA9ICZwcm9maWxlLT5maXJzdF9maWxlOworCisgICAgICAgIC8qIGlmIHRoZSBmaWxlbmFtZXMgbGlzdCBpcyBub3Qgc3BlY2lmaWVkIHJldHVybiBhbiBlbXB0eSBwcm9maWxlICovCisgICAgICAgIGlmICggZmlsZXMgKSB7CisJICAgIGZvciAoZnMgPSBmaWxlczsgIVBST0ZJTEVfTEFTVF9GSUxFU1BFQygqZnMpOyBmcysrKSB7CisJCWlmIChhcnJheSkKKwkJCWZyZWVfbGlzdChhcnJheSk7CisJCXJldHZhbCA9IGdldF9kaXJsaXN0KCpmcywgJmFycmF5KTsKKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQlpZiAoIWFycmF5KQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChjcHAgPSBhcnJheTsgKGNwID0gKmNwcCk7IGNwcCsrKSB7CisJCQkJcmV0dmFsID0gcHJvZmlsZV9vcGVuX2ZpbGUoY3AsICZuZXdfZmlsZSk7CisJCQkJaWYgKHJldHZhbCA9PSBFQUNDRVMpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gZXJyb3V0OworCQkJCSpsYXN0ID0gbmV3X2ZpbGU7CisJCQkJbGFzdCA9ICZuZXdfZmlsZS0+bmV4dDsKKwkJCX0KKwkJfSBlbHNlIGlmICgocmV0dmFsICE9IEVOT1RESVIpICYmCisJCQkgICBzdHJjbXAoKmZzLCBkZWZhdWx0X2ZpbGVuYW1lKSkKKwkJCWdvdG8gZXJyb3V0OworCisJCXJldHZhbCA9IHByb2ZpbGVfb3Blbl9maWxlKCpmcywgJm5ld19maWxlKTsKKwkJLyogaWYgdGhpcyBmaWxlIGlzIG1pc3NpbmcsIHNraXAgdG8gdGhlIG5leHQgKi8KKwkJaWYgKHJldHZhbCA9PSBFTk9FTlQgfHwgcmV0dmFsID09IEVBQ0NFUykgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCQkqbGFzdCA9IG5ld19maWxlOworCQlsYXN0ID0gJm5ld19maWxlLT5uZXh0OworCSAgICB9CisJICAgIC8qCisJICAgICAqIElmIGFsbCB0aGUgZmlsZXMgd2VyZSBub3QgZm91bmQsIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IuCisJICAgICAqLworCSAgICBpZiAoIXByb2ZpbGUtPmZpcnN0X2ZpbGUpIHsKKwkJcmV0dmFsID0gRU5PRU5UOworCQlnb3RvIGVycm91dDsKKwkgICAgfQorCX0KKworCWZyZWVfbGlzdChhcnJheSk7CisgICAgICAgICpyZXRfcHJvZmlsZSA9IHByb2ZpbGU7CisgICAgICAgIHJldHVybiAwOworZXJyb3V0OgorCWZyZWVfbGlzdChhcnJheSk7CisJcHJvZmlsZV9yZWxlYXNlKHByb2ZpbGUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQKK3Byb2ZpbGVfcmVsZWFzZShwcm9maWxlX3QgcHJvZmlsZSkKK3sKKwlwcmZfZmlsZV90CXAsIG5leHQ7CisKKwlpZiAoIXByb2ZpbGUgfHwgcHJvZmlsZS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19QUk9GSUxFKQorCQlyZXR1cm47CisKKwlmb3IgKHAgPSBwcm9maWxlLT5maXJzdF9maWxlOyBwOyBwID0gbmV4dCkgeworCQluZXh0ID0gcC0+bmV4dDsKKwkJcHJvZmlsZV9mcmVlX2ZpbGUocCk7CisJfQorCXByb2ZpbGUtPm1hZ2ljID0gMDsKKwlmcmVlKHByb2ZpbGUpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgcHNldWRvIGZpbGUgIjxkZWZhdWx0PiIuICBJZgorICogdGhlIGZpbGUgIjxkZWZhdWx0PiIgaGFkIHByZXZpb3VzbHkgYmVlbiBwYXNzZWQgdG8gcHJvZmlsZV9pbml0KCksCisgKiB0aGVuIGRlZl9zdHJpbmcgcGFyYW1ldGVyIHdpbGwgYmUgcGFyc2VkIGFuZCB1c2VkIGFzIHRoZSBwcm9maWxlCisgKiBpbmZvcm1hdGlvbiBmb3IgdGhlICI8ZGVmYXVsdD4iIGZpbGUuCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX3NldF9kZWZhdWx0KHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpkZWZfc3RyaW5nKQoreworCXN0cnVjdCBwYXJzZV9zdGF0ZQlzdGF0ZTsKKwlwcmZfZmlsZV90CQlwcmY7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY29uc3QgY2hhcgkJKmluOworCWNoYXIJCQkqbGluZSwgKnAsICplbmQ7CisJaW50CQkJbGluZV9zaXplLCBsZW47CisKKwlpZiAoIWRlZl9zdHJpbmcgfHwgIXByb2ZpbGUgfHwgcHJvZmlsZS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19QUk9GSUxFKQorCQlyZXR1cm4gUFJPRl9NQUdJQ19QUk9GSUxFOworCisJZm9yIChwcmYgPSBwcm9maWxlLT5maXJzdF9maWxlOyBwcmY7IHByZiA9IHByZi0+bmV4dCkgeworCQlpZiAoc3RyY21wKHByZi0+ZmlsZXNwZWMsIGRlZmF1bHRfZmlsZW5hbWUpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKCFwcmYpCisJCXJldHVybiAwOworCisJaWYgKHByZi0+cm9vdCkgeworCQlwcm9maWxlX2ZyZWVfbm9kZShwcmYtPnJvb3QpOworCQlwcmYtPnJvb3QgPSAwOworCX0KKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdHJ1Y3QgcGFyc2Vfc3RhdGUpKTsKKwlyZXR2YWwgPSBwcm9maWxlX2NyZWF0ZV9ub2RlKCIocm9vdCkiLCAwLCAmc3RhdGUucm9vdF9zZWN0aW9uKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbGluZSA9IDA7CisJbGluZV9zaXplID0gMDsKKwlpbiA9IGRlZl9zdHJpbmc7CisJd2hpbGUgKCppbikgeworCQllbmQgPSBzdHJjaHIoaW4sICdcbicpOworCQlsZW4gPSBlbmQgPyAoZW5kIC0gaW4pIDogKGludCkgc3RybGVuKGluKTsKKwkJaWYgKGxlbiA+PSBsaW5lX3NpemUpIHsKKwkJCWxpbmVfc2l6ZSA9IGxlbisxOworCQkJcCA9IHJlYWxsb2MobGluZSwgbGluZV9zaXplKTsKKwkJCWlmICghcCkgeworCQkJCXJldHZhbCA9IEVOT01FTTsKKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJCWxpbmUgPSBwOworCQl9CisJCW1lbWNweShsaW5lLCBpbiwgbGVuKTsKKwkJbGluZVtsZW5dID0gMDsKKwkJcmV0dmFsID0gcGFyc2VfbGluZShsaW5lLCAmc3RhdGUpOworCQlpZiAocmV0dmFsKSB7CisJCWVycm91dDoKKwkJCWlmIChzeW50YXhfZXJyX2NiKQorCQkJCShzeW50YXhfZXJyX2NiKShwcmYtPmZpbGVzcGVjLCByZXR2YWwsCisJCQkJCQlzdGF0ZS5saW5lX251bSk7CisJCQlmcmVlKGxpbmUpOworCQkJaWYgKHByZi0+cm9vdCkKKwkJCQlwcm9maWxlX2ZyZWVfbm9kZShwcmYtPnJvb3QpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlpZiAoIWVuZCkKKwkJCWJyZWFrOworCQlpbiA9IGVuZCsxOworCX0KKwlwcmYtPnJvb3QgPSBzdGF0ZS5yb290X3NlY3Rpb247CisJZnJlZShsaW5lKTsKKworCXJldHVybiAwOworfQorCisvKgorICogcHJvZl9maWxlLmMgLS0tLSByb3V0aW5lcyB0aGF0IG1hbmlwdWxhdGUgYW4gaW5kaXZpZHVhbCBwcm9maWxlIGZpbGUuCisgKi8KKworZXJyY29kZV90IHByb2ZpbGVfb3Blbl9maWxlKGNvbnN0IGNoYXIgKiBmaWxlc3BlYywKKwkJCSAgICBwcmZfZmlsZV90ICpyZXRfcHJvZikKK3sKKwlwcmZfZmlsZV90CXByZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSpob21lX2VudiA9IDA7CisJdW5zaWduZWQgaW50CWxlbjsKKwljaGFyCQkqZXhwYW5kZWRfZmlsZW5hbWU7CisKKwlwcmYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBfcHJmX2ZpbGVfdCkpOworCWlmICghcHJmKQorCQlyZXR1cm4gRU5PTUVNOworCW1lbXNldChwcmYsIDAsIHNpemVvZihzdHJ1Y3QgX3ByZl9maWxlX3QpKTsKKwlwcmYtPm1hZ2ljID0gUFJPRl9NQUdJQ19GSUxFOworCisJbGVuID0gc3RybGVuKGZpbGVzcGVjKSsxOworCWlmIChmaWxlc3BlY1swXSA9PSAnficgJiYgZmlsZXNwZWNbMV0gPT0gJy8nKSB7CisJCWhvbWVfZW52ID0gZ2V0ZW52KCJIT01FIik7CisjaWZkZWYgSEFWRV9QV0RfSAorCQlpZiAoaG9tZV9lbnYgPT0gTlVMTCkgeworI2lmZGVmIEhBVkVfR0VUV1VJRF9SCisJCSAgICBzdHJ1Y3QgcGFzc3dkICpwdywgcHd4OworCQkgICAgdWlkX3QgdWlkOworCQkgICAgY2hhciBwd2J1ZltCVUZTSVpdOworCisJCSAgICB1aWQgPSBnZXR1aWQoKTsKKwkJICAgIGlmICghZ2V0cHd1aWRfcih1aWQsICZwd3gsIHB3YnVmLCBzaXplb2YocHdidWYpLCAmcHcpCisJCQkmJiBwdyAhPSBOVUxMICYmIHB3LT5wd19kaXJbMF0gIT0gMCkKKwkJCWhvbWVfZW52ID0gcHctPnB3X2RpcjsKKyNlbHNlCisJCSAgICBzdHJ1Y3QgcGFzc3dkICpwdzsKKworCQkgICAgcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisJCSAgICBob21lX2VudiA9IHB3LT5wd19kaXI7CisjZW5kaWYKKwkJfQorI2VuZGlmCisJCWlmIChob21lX2VudikKKwkJCWxlbiArPSBzdHJsZW4oaG9tZV9lbnYpOworCX0KKwlleHBhbmRlZF9maWxlbmFtZSA9IG1hbGxvYyhsZW4pOworCWlmIChleHBhbmRlZF9maWxlbmFtZSA9PSAwKSB7CisJICAgIHByb2ZpbGVfZnJlZV9maWxlKHByZik7CisJICAgIHJldHVybiBlcnJubzsKKwl9CisJaWYgKGhvbWVfZW52KSB7CisJICAgIHN0cmNweShleHBhbmRlZF9maWxlbmFtZSwgaG9tZV9lbnYpOworCSAgICBzdHJjYXQoZXhwYW5kZWRfZmlsZW5hbWUsIGZpbGVzcGVjKzEpOworCX0gZWxzZQorCSAgICBtZW1jcHkoZXhwYW5kZWRfZmlsZW5hbWUsIGZpbGVzcGVjLCBsZW4pOworCisJcHJmLT5maWxlc3BlYyA9IGV4cGFuZGVkX2ZpbGVuYW1lOworCisJaWYgKHN0cmNtcChwcmYtPmZpbGVzcGVjLCBkZWZhdWx0X2ZpbGVuYW1lKSAhPSAwKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfdXBkYXRlX2ZpbGUocHJmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJcHJvZmlsZV9mcmVlX2ZpbGUocHJmKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwkqcmV0X3Byb2YgPSBwcmY7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBwcm9maWxlX3VwZGF0ZV9maWxlKHByZl9maWxlX3QgcHJmKQoreworCWVycmNvZGVfdCByZXR2YWw7CisjaWZkZWYgSEFWRV9TVEFUCisJc3RydWN0IHN0YXQgc3Q7CisjaWZkZWYgU1RBVF9PTkNFX1BFUl9TRUNPTkQKKwl0aW1lX3Qgbm93OworI2VuZGlmCisjZW5kaWYKKwlGSUxFICpmOworCWNoYXIgYnVmWzIwNDhdOworCXN0cnVjdCBwYXJzZV9zdGF0ZSBzdGF0ZTsKKworCWlmIChwcmYtPmZsYWdzICYgUFJPRklMRV9GSUxFX05PX1JFTE9BRCkKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBIQVZFX1NUQVQKKyNpZmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorCW5vdyA9IHRpbWUoMCk7CisJaWYgKG5vdyA9PSBwcmYtPmxhc3Rfc3RhdCAmJiBwcmYtPnJvb3QgIT0gTlVMTCkgeworCSAgICByZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoc3RhdChwcmYtPmZpbGVzcGVjLCAmc3QpKSB7CisJICAgIHJldHZhbCA9IGVycm5vOworCSAgICByZXR1cm4gcmV0dmFsOworCX0KKyNpZmRlZiBTVEFUX09OQ0VfUEVSX1NFQ09ORAorCXByZi0+bGFzdF9zdGF0ID0gbm93OworI2VuZGlmCisJaWYgKHN0LnN0X210aW1lID09IHByZi0+dGltZXN0YW1wICYmIHByZi0+cm9vdCAhPSBOVUxMKSB7CisJICAgIHJldHVybiAwOworCX0KKwlpZiAocHJmLT5yb290KSB7CisJCXByb2ZpbGVfZnJlZV9ub2RlKHByZi0+cm9vdCk7CisJCXByZi0+cm9vdCA9IDA7CisJfQorI2Vsc2UKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgdGhlIHN0YXQoKSBjYWxsLCBhc3N1bWUgdGhhdCBvdXIgaW4tY29yZQorCSAqIG1lbW9yeSBpbWFnZSBpcyBjb3JyZWN0LiAgVGhhdCBpcywgd2Ugd29uJ3QgcmVyZWFkIHRoZQorCSAqIHByb2ZpbGUgZmlsZSBpZiBpdCBjaGFuZ2VzLgorCSAqLworCWlmIChwcmYtPnJvb3QpIHsKKwkgICAgcmV0dXJuIDA7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBwYXJzZV9zdGF0ZSkpOworCXJldHZhbCA9IHByb2ZpbGVfY3JlYXRlX25vZGUoIihyb290KSIsIDAsICZzdGF0ZS5yb290X3NlY3Rpb24pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJZXJybm8gPSAwOworCWYgPSBmb3BlbihwcmYtPmZpbGVzcGVjLCAiciIpOworCWlmIChmID09IE5VTEwpIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCXJldHZhbCA9IEVOT0VOVDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcHJmLT51cGRfc2VyaWFsKys7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IHBhcnNlX2xpbmUoYnVmLCAmc3RhdGUpOworCQlpZiAocmV0dmFsKSB7CisJCQlpZiAoc3ludGF4X2Vycl9jYikKKwkJCQkoc3ludGF4X2Vycl9jYikocHJmLT5maWxlc3BlYywgcmV0dmFsLAorCQkJCQkJc3RhdGUubGluZV9udW0pOworCQkJZmNsb3NlKGYpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKwlwcmYtPnJvb3QgPSBzdGF0ZS5yb290X3NlY3Rpb247CisKKwlmY2xvc2UoZik7CisKKyNpZmRlZiBIQVZFX1NUQVQKKwlwcmYtPnRpbWVzdGFtcCA9IHN0LnN0X210aW1lOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHJvZmlsZV9mcmVlX2ZpbGUocHJmX2ZpbGVfdCBwcmYpCit7CisgICAgaWYgKHByZi0+cm9vdCkKKwlwcm9maWxlX2ZyZWVfbm9kZShwcmYtPnJvb3QpOworICAgIGZyZWUocHJmLT5maWxlc3BlYyk7CisgICAgZnJlZShwcmYpOworfQorCisvKiBCZWdpbiB0aGUgcHJvZmlsZSBwYXJzZXIgKi8KKworcHJvZmlsZV9zeW50YXhfZXJyX2NiX3QgcHJvZmlsZV9zZXRfc3ludGF4X2Vycl9jYihwcm9maWxlX3N5bnRheF9lcnJfY2JfdCBob29rKQoreworCXByb2ZpbGVfc3ludGF4X2Vycl9jYl90CW9sZDsKKworCW9sZCA9IHN5bnRheF9lcnJfY2I7CisJc3ludGF4X2Vycl9jYiA9IGhvb2s7CisJcmV0dXJuKG9sZCk7Cit9CisKKyNkZWZpbmUgU1RBVEVfSU5JVF9DT01NRU5UCTAKKyNkZWZpbmUgU1RBVEVfU1REX0xJTkUJCTEKKyNkZWZpbmUgU1RBVEVfR0VUX09CUkFDRQkyCisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmtzKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgoaW50KSAoKmNwKSkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgaW50IGVuZF9vcl9jb21tZW50KGNoYXIgY2gpCit7CisJcmV0dXJuIChjaCA9PSAwIHx8IGNoID09ICcjJyB8fCBjaCA9PSAnOycpOworfQorCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX25vbmJsYW5rcyhjaGFyICpjcCkKK3sKKwl3aGlsZSAoIWVuZF9vcl9jb21tZW50KCpjcCkgJiYgIWlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmlwX2xpbmUoY2hhciAqbGluZSkKK3sKKwljaGFyICpwID0gbGluZSArIHN0cmxlbihsaW5lKTsKKwl3aGlsZSAocCA+IGxpbmUgJiYgKHBbLTFdID09ICdcbicgfHwgcFstMV0gPT0gJ1xyJykpCisJICAgICpwLS0gPSAwOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9xdW90ZWRfc3RyaW5nKGNoYXIgKnN0cikKK3sKKwljaGFyICp0bywgKmZyb207CisKKwl0byA9IGZyb20gPSBzdHI7CisKKwlmb3IgKHRvID0gZnJvbSA9IHN0cjsgKmZyb20gJiYgKmZyb20gIT0gJyInOyB0bysrLCBmcm9tKyspIHsKKwkJaWYgKCpmcm9tID09ICdcXCcpIHsKKwkJCWZyb20rKzsKKwkJCXN3aXRjaCAoKmZyb20pIHsKKwkJCWNhc2UgJ24nOgorCQkJCSp0byA9ICdcbic7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQkqdG8gPSAnXHQnOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJCQkJKnRvID0gJ1xiJzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJKnRvID0gKmZyb207CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQkqdG8gPSAqZnJvbTsKKwl9CisJKnRvID0gJ1wwJzsKK30KKworc3RhdGljIGVycmNvZGVfdCBwYXJzZV9saW5lKGNoYXIgKmxpbmUsIHN0cnVjdCBwYXJzZV9zdGF0ZSAqc3RhdGUpCit7CisJY2hhcgkqY3AsIGNoLCAqdGFnLCAqdmFsdWU7CisJY2hhcgkqcDsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBwcm9maWxlX25vZGUJKm5vZGU7CisJaW50IGRvX3N1YnNlY3Rpb24gPSAwOworCXZvaWQgKml0ZXIgPSAwOworCisJc3RhdGUtPmxpbmVfbnVtKys7CisJaWYgKHN0YXRlLT5zdGF0ZSA9PSBTVEFURV9HRVRfT0JSQUNFKSB7CisJCWNwID0gc2tpcF9vdmVyX2JsYW5rcyhsaW5lKTsKKwkJaWYgKCpjcCAhPSAneycpCisJCQlyZXR1cm4gUFJPRl9NSVNTSU5HX09CUkFDRTsKKwkJc3RhdGUtPnN0YXRlID0gU1RBVEVfU1REX0xJTkU7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RhdGUtPnN0YXRlID09IFNUQVRFX0lOSVRfQ09NTUVOVCkgeworCQlpZiAobGluZVswXSAhPSAnWycpCisJCQlyZXR1cm4gMDsKKwkJc3RhdGUtPnN0YXRlID0gU1RBVEVfU1REX0xJTkU7CisJfQorCisJaWYgKCpsaW5lID09IDApCisJCXJldHVybiAwOworCXN0cmlwX2xpbmUobGluZSk7CisJY3AgPSBza2lwX292ZXJfYmxhbmtzKGxpbmUpOworCWNoID0gKmNwOworCWlmIChlbmRfb3JfY29tbWVudChjaCkpCisJCXJldHVybiAwOworCWlmIChjaCA9PSAnWycpIHsKKwkJaWYgKHN0YXRlLT5ncm91cF9sZXZlbCA+IDApCisJCQlyZXR1cm4gUFJPRl9TRUNUSU9OX05PVE9QOworCQljcCsrOworCQljcCA9IHNraXBfb3Zlcl9ibGFua3MoY3ApOworCQlwID0gc3RyY2hyKGNwLCAnXScpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIFBST0ZfU0VDVElPTl9TWU5UQVg7CisJCWlmICgqY3AgPT0gJyInKSB7CisJCQljcCsrOworCQkJcGFyc2VfcXVvdGVkX3N0cmluZyhjcCk7CisJCX0gZWxzZSB7CisJCQkqcC0tID0gJ1wwJzsKKwkJCXdoaWxlIChpc3NwYWNlKCpwKSAmJiAocCA+IGNwKSkKKwkJCQkqcC0tID0gJ1wwJzsKKwkJCWlmICgqY3AgPT0gMCkKKwkJCQlyZXR1cm4gUFJPRl9TRUNUSU9OX1NZTlRBWDsKKwkJfQorCQlyZXR2YWwgPSBwcm9maWxlX2ZpbmRfbm9kZShzdGF0ZS0+cm9vdF9zZWN0aW9uLCBjcCwgMCwgMSwKKwkJCQkJICAgJml0ZXIsICZzdGF0ZS0+Y3VycmVudF9zZWN0aW9uKTsKKwkJaWYgKHJldHZhbCA9PSBQUk9GX05PX1NFQ1RJT04pIHsKKwkJCXJldHZhbCA9IHByb2ZpbGVfYWRkX25vZGUoc3RhdGUtPnJvb3Rfc2VjdGlvbiwKKwkJCQkJCSAgY3AsIDAsCisJCQkJCQkgICZzdGF0ZS0+Y3VycmVudF9zZWN0aW9uKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfSBlbHNlIGlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisJCS8qCisJCSAqIEZpbmlzaCBvZmYgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCisJCSAqLworCQljcCA9IHArMTsKKwkJaWYgKCpjcCA9PSAnKicpIHsKKwkJCXN0YXRlLT5jdXJyZW50X3NlY3Rpb24tPmZpbmFsID0gMTsKKwkJCWNwKys7CisJCX0KKwkJLyoKKwkJICogU3BhY2VzIG9yIGNvbW1lbnRzIGFmdGVyICddJyBzaG91bGQgbm90IGJlIGZhdGFsCisJCSAqLworCQljcCA9IHNraXBfb3Zlcl9ibGFua3MoY3ApOworCQlpZiAoIWVuZF9vcl9jb21tZW50KCpjcCkpCisJCQlyZXR1cm4gUFJPRl9TRUNUSU9OX1NZTlRBWDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjaCA9PSAnfScpIHsKKwkJaWYgKHN0YXRlLT5ncm91cF9sZXZlbCA9PSAwKQorCQkJcmV0dXJuIFBST0ZfRVhUUkFfQ0JSQUNFOworCQlpZiAoKihjcCsxKSA9PSAnKicpCisJCQlzdGF0ZS0+Y3VycmVudF9zZWN0aW9uLT5maW5hbCA9IDE7CisJCXN0YXRlLT5jdXJyZW50X3NlY3Rpb24gPSBzdGF0ZS0+Y3VycmVudF9zZWN0aW9uLT5wYXJlbnQ7CisJCXN0YXRlLT5ncm91cF9sZXZlbC0tOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBQYXJzZSB0aGUgcmVsYXRpb25zCisJICovCisJdGFnID0gY3A7CisJY3AgPSBzdHJjaHIoY3AsICc9Jyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIFBST0ZfUkVMQVRJT05fU1lOVEFYOworCWlmIChjcCA9PSB0YWcpCisJICAgIHJldHVybiBQUk9GX1JFTEFUSU9OX1NZTlRBWDsKKwkqY3AgPSAnXDAnOworCWlmICgqdGFnID09ICciJykgeworCQl0YWcrKzsKKwkJcGFyc2VfcXVvdGVkX3N0cmluZyh0YWcpOworCX0gZWxzZSB7CisJCS8qIExvb2sgZm9yIHdoaXRlc3BhY2Ugb24gbGVmdC1oYW5kIHNpZGUuICAqLworCQlwID0gc2tpcF9vdmVyX25vbmJsYW5rcyh0YWcpOworCQlpZiAoKnApCisJCQkqcCsrID0gMDsKKwkJcCA9IHNraXBfb3Zlcl9ibGFua3MocCk7CisJCS8qIElmIHdlIGhhdmUgbW9yZSBub24td2hpdGVzcGFjZSwgaXQncyBhbiBlcnJvci4gICovCisJCWlmICgqcCkKKwkJCXJldHVybiBQUk9GX1JFTEFUSU9OX1NZTlRBWDsKKwl9CisKKwljcCA9IHNraXBfb3Zlcl9ibGFua3MoY3ArMSk7CisJdmFsdWUgPSBjcDsKKwljaCA9IHZhbHVlWzBdOworCWlmIChjaCA9PSAnIicpIHsKKwkJdmFsdWUrKzsKKwkJcGFyc2VfcXVvdGVkX3N0cmluZyh2YWx1ZSk7CisJfSBlbHNlIGlmIChlbmRfb3JfY29tbWVudChjaCkpIHsKKwkJZG9fc3Vic2VjdGlvbisrOworCQlzdGF0ZS0+c3RhdGUgPSBTVEFURV9HRVRfT0JSQUNFOworCX0gZWxzZSBpZiAodmFsdWVbMF0gPT0gJ3snKSB7CisJCWNwID0gc2tpcF9vdmVyX2JsYW5rcyh2YWx1ZSsxKTsKKwkJY2ggPSAqY3A7CisJCWlmIChlbmRfb3JfY29tbWVudChjaCkpCisJCQlkb19zdWJzZWN0aW9uKys7CisJCWVsc2UKKwkJCXJldHVybiBQUk9GX1JFTEFUSU9OX1NZTlRBWDsKKwl9IGVsc2UgeworCQljcCA9IHNraXBfb3Zlcl9ub25ibGFua3ModmFsdWUpOworCQlwID0gc2tpcF9vdmVyX2JsYW5rcyhjcCk7CisJCWNoID0gKnA7CisJCSpjcCA9IDA7CisJCWlmICghZW5kX29yX2NvbW1lbnQoY2gpKQorCQkJcmV0dXJuIFBST0ZfUkVMQVRJT05fU1lOVEFYOworCX0KKwlpZiAoZG9fc3Vic2VjdGlvbikgeworCQlwID0gc3RyY2hyKHRhZywgJyonKTsKKwkJaWYgKHApCisJCQkqcCA9ICdcMCc7CisJCXJldHZhbCA9IHByb2ZpbGVfYWRkX25vZGUoc3RhdGUtPmN1cnJlbnRfc2VjdGlvbiwKKwkJCQkJICB0YWcsIDAsICZzdGF0ZS0+Y3VycmVudF9zZWN0aW9uKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmIChwKQorCQkJc3RhdGUtPmN1cnJlbnRfc2VjdGlvbi0+ZmluYWwgPSAxOworCQlzdGF0ZS0+Z3JvdXBfbGV2ZWwrKzsKKwkJcmV0dXJuIDA7CisJfQorCXAgPSBzdHJjaHIodGFnLCAnKicpOworCWlmIChwKQorCQkqcCA9ICdcMCc7CisJcHJvZmlsZV9hZGRfbm9kZShzdGF0ZS0+Y3VycmVudF9zZWN0aW9uLCB0YWcsIHZhbHVlLCAmbm9kZSk7CisJaWYgKHApCisJCW5vZGUtPmZpbmFsID0gMTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHX1BST0dSQU0KKy8qCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgc3RyaW5nIGJlZ2lucyBvciBlbmRzIHdpdGggd2hpdGVzcGFjZQorICovCitzdGF0aWMgaW50IG5lZWRfZG91YmxlX3F1b3RlcyhjaGFyICpzdHIpCit7CisJaWYgKCFzdHIgfHwgISpzdHIpCisJCXJldHVybiAwOworCWlmIChpc3NwYWNlKChpbnQpICgqc3RyKSkgfHxpc3NwYWNlKChpbnQpICgqKHN0ciArIHN0cmxlbihzdHIpIC0gMSkpKSkKKwkJcmV0dXJuIDE7CisJaWYgKHN0cmNocihzdHIsICdcbicpIHx8IHN0cmNocihzdHIsICdcdCcpIHx8IHN0cmNocihzdHIsICdcYicpIHx8CisJICAgIHN0cmNocihzdHIsICcgJykgfHwgc3RyY2hyKHN0ciwgJyMnKSB8fCBzdHJjaHIoc3RyLCAnOycpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE91dHB1dCBhIHN0cmluZyB3aXRoIGRvdWJsZSBxdW90ZXMsIGRvaW5nIGFwcHJvcHJpYXRlIGJhY2txdW90aW5nCisgKiBvZiBjaGFyYWN0ZXJzIGFzIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIHZvaWQgb3V0cHV0X3F1b3RlZF9zdHJpbmcoY2hhciAqc3RyLCB2b2lkICgqY2IpKGNvbnN0IGNoYXIgKix2b2lkICopLAorCQkJCSB2b2lkICpkYXRhKQoreworCWNoYXIJY2g7CisJY2hhciBidWZbMl07CisKKwljYigiXCIiLCBkYXRhKTsKKwlpZiAoIXN0cikgeworCQljYigiXCIiLCBkYXRhKTsKKwkJcmV0dXJuOworCX0KKwlidWZbMV0gPSAwOworCXdoaWxlICgoY2ggPSAqc3RyKyspKSB7CisJCXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnXFwnOgorCQkJY2IoIlxcXFwiLCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdcbic6CisJCQljYigiXFxuIiwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnXHQnOgorCQkJY2IoIlxcdCIsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xiJzoKKwkJCWNiKCJcXGIiLCBkYXRhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogVGhpcyB3b3VsZCBiZSBhIGxvdCBmYXN0ZXIgaWYgd2Ugc2Nhbm5lZAorCQkJICAgZm9yd2FyZCBmb3IgdGhlIG5leHQgImludGVyZXN0aW5nIgorCQkJICAgY2hhcmFjdGVyLiAgKi8KKwkJCWJ1ZlswXSA9IGNoOworCQkJY2IoYnVmLCBkYXRhKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNiKCJcIiIsIGRhdGEpOworfQorCisjaWZuZGVmIEVPTAorI2RlZmluZSBFT0wgIlxuIgorI2VuZGlmCisKKy8qIEVycm9ycyBzaG91bGQgYmUgcmV0dXJuZWQsIG5vdCBpZ25vcmVkISAgKi8KK3N0YXRpYyB2b2lkIGR1bXBfcHJvZmlsZShzdHJ1Y3QgcHJvZmlsZV9ub2RlICpyb290LCBpbnQgbGV2ZWwsCisJCQkgdm9pZCAoKmNiKShjb25zdCBjaGFyICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHByb2ZpbGVfbm9kZSAqcDsKKwl2b2lkICppdGVyOworCWxvbmcgcmV0dmFsOworCisJaXRlciA9IDA7CisJZG8geworCQlyZXR2YWwgPSBwcm9maWxlX2ZpbmRfbm9kZShyb290LCAwLCAwLCAwLCAmaXRlciwgJnApOworCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisJCWZvciAoaT0wOyBpIDwgbGV2ZWw7IGkrKykKKwkJCWNiKCJcdCIsIGRhdGEpOworCQlpZiAobmVlZF9kb3VibGVfcXVvdGVzKHAtPm5hbWUpKQorCQkJb3V0cHV0X3F1b3RlZF9zdHJpbmcocC0+bmFtZSwgY2IsIGRhdGEpOworCQllbHNlCisJCQljYihwLT5uYW1lLCBkYXRhKTsKKwkJY2IoIiA9ICIsIGRhdGEpOworCQlpZiAobmVlZF9kb3VibGVfcXVvdGVzKHAtPnZhbHVlKSkKKwkJCW91dHB1dF9xdW90ZWRfc3RyaW5nKHAtPnZhbHVlLCBjYiwgZGF0YSk7CisJCWVsc2UKKwkJCWNiKHAtPnZhbHVlLCBkYXRhKTsKKwkJY2IoRU9MLCBkYXRhKTsKKwl9IHdoaWxlIChpdGVyICE9IDApOworCisJaXRlciA9IDA7CisJZG8geworCQlyZXR2YWwgPSBwcm9maWxlX2ZpbmRfbm9kZShyb290LCAwLCAwLCAxLCAmaXRlciwgJnApOworCQlpZiAocmV0dmFsKQorCQkJYnJlYWs7CisJCWlmIChsZXZlbCA9PSAwKQl7IC8qIFt4eHhdICovCisJCQljYigiWyIsIGRhdGEpOworCQkJaWYgKG5lZWRfZG91YmxlX3F1b3RlcyhwLT5uYW1lKSkKKwkJCQlvdXRwdXRfcXVvdGVkX3N0cmluZyhwLT5uYW1lLCBjYiwgZGF0YSk7CisJCQllbHNlCisJCQkJY2IocC0+bmFtZSwgZGF0YSk7CisJCQljYigiXSIsIGRhdGEpOworCQkJY2IocC0+ZmluYWwgPyAiKiIgOiAiIiwgZGF0YSk7CisJCQljYihFT0wsIGRhdGEpOworCQkJZHVtcF9wcm9maWxlKHAsIGxldmVsKzEsIGNiLCBkYXRhKTsKKwkJCWNiKEVPTCwgZGF0YSk7CisJCX0gZWxzZSB7IAkvKiB4eHggPSB7IC4uLiB9ICovCisJCQlmb3IgKGk9MDsgaSA8IGxldmVsOyBpKyspCisJCQkJY2IoIlx0IiwgZGF0YSk7CisJCQlpZiAobmVlZF9kb3VibGVfcXVvdGVzKHAtPm5hbWUpKQorCQkJCW91dHB1dF9xdW90ZWRfc3RyaW5nKHAtPm5hbWUsIGNiLCBkYXRhKTsKKwkJCWVsc2UKKwkJCQljYihwLT5uYW1lLCBkYXRhKTsKKwkJCWNiKCIgPSB7IiwgZGF0YSk7CisJCQljYihFT0wsIGRhdGEpOworCQkJZHVtcF9wcm9maWxlKHAsIGxldmVsKzEsIGNiLCBkYXRhKTsKKwkJCWZvciAoaT0wOyBpIDwgbGV2ZWw7IGkrKykKKwkJCQljYigiXHQiLCBkYXRhKTsKKwkJCWNiKCJ9IiwgZGF0YSk7CisJCQljYihwLT5maW5hbCA/ICIqIiA6ICIiLCBkYXRhKTsKKwkJCWNiKEVPTCwgZGF0YSk7CisJCX0KKwl9IHdoaWxlIChpdGVyICE9IDApOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3Byb2ZpbGVfdG9fZmlsZV9jYihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmRhdGEpCit7CisJZnB1dHMoc3RyLCBkYXRhKTsKK30KKworZXJyY29kZV90IHByb2ZpbGVfd3JpdGVfdHJlZV9maWxlKHN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3QsIEZJTEUgKmRzdGZpbGUpCit7CisJZHVtcF9wcm9maWxlKHJvb3QsIDAsIGR1bXBfcHJvZmlsZV90b19maWxlX2NiLCBkc3RmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHByb2ZfYnVmIHsKKwljaGFyICpiYXNlOworCXNpemVfdCBjdXIsIG1heDsKKwlpbnQgZXJyOworfTsKKworc3RhdGljIHZvaWQgYWRkX2RhdGFfdG9fYnVmZmVyKHN0cnVjdCBwcm9mX2J1ZiAqYiwgY29uc3Qgdm9pZCAqZCwgc2l6ZV90IGxlbikKK3sKKwlpZiAoYi0+ZXJyKQorCQlyZXR1cm47CisJaWYgKGItPm1heCAtIGItPmN1ciA8IGxlbikgeworCQlzaXplX3QgbmV3c2l6ZTsKKwkJY2hhciAqbmV3cHRyOworCisJCW5ld3NpemUgPSBiLT5tYXggKyAoYi0+bWF4ID4+IDEpICsgbGVuICsgMTAyNDsKKwkJbmV3cHRyID0gcmVhbGxvYyhiLT5iYXNlLCBuZXdzaXplKTsKKwkJaWYgKG5ld3B0ciA9PSBOVUxMKSB7CisJCQliLT5lcnIgPSAxOworCQkJcmV0dXJuOworCQl9CisJCWItPmJhc2UgPSBuZXdwdHI7CisJCWItPm1heCA9IG5ld3NpemU7CisJfQorCW1lbWNweShiLT5iYXNlICsgYi0+Y3VyLCBkLCBsZW4pOworCWItPmN1ciArPSBsZW47IAkJLyogaWdub3JlIG92ZXJmbG93ICovCit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcHJvZmlsZV90b19idWZmZXJfY2IoY29uc3QgY2hhciAqc3RyLCB2b2lkICpkYXRhKQoreworCWFkZF9kYXRhX3RvX2J1ZmZlcigoc3RydWN0IHByb2ZfYnVmICopZGF0YSwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CisKK2VycmNvZGVfdCBwcm9maWxlX3dyaXRlX3RyZWVfdG9fYnVmZmVyKHN0cnVjdCBwcm9maWxlX25vZGUgKnJvb3QsCisJCQkJICAgICAgIGNoYXIgKipidWYpCit7CisJc3RydWN0IHByb2ZfYnVmIHByb2ZfYnVmID0geyAwLCAwLCAwLCAwIH07CisKKwlkdW1wX3Byb2ZpbGUocm9vdCwgMCwgZHVtcF9wcm9maWxlX3RvX2J1ZmZlcl9jYiwgJnByb2ZfYnVmKTsKKwlpZiAocHJvZl9idWYuZXJyKSB7CisJCSpidWYgPSBOVUxMOworCQlyZXR1cm4gRU5PTUVNOworCX0KKwlhZGRfZGF0YV90b19idWZmZXIoJnByb2ZfYnVmLCAiIiwgMSk7IC8qIGFwcGVuZCBudWwgKi8KKwlpZiAocHJvZl9idWYubWF4IC0gcHJvZl9idWYuY3VyID4gKHByb2ZfYnVmLm1heCA+PiAzKSkgeworCQljaGFyICpuZXdwdHIgPSByZWFsbG9jKHByb2ZfYnVmLmJhc2UsIHByb2ZfYnVmLmN1cik7CisJCWlmIChuZXdwdHIpCisJCQlwcm9mX2J1Zi5iYXNlID0gbmV3cHRyOworCX0KKwkqYnVmID0gcHJvZl9idWYuYmFzZTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKgorICogcHJvZl90cmVlLmMgLS0tIHRoZXNlIHJvdXRpbmVzIG1haW50YWluIHRoZSBwYXJzZSB0cmVlIG9mIHRoZQorICogCWNvbmZpZyBmaWxlLgorICoKKyAqIEFsbCBvZiB0aGUgZGV0YWlscyBvZiBob3cgdGhlIHRyZWUgaXMgc3RvcmVkIGlzIGFic3RyYWN0ZWQgYXdheSBpbgorICogdGhpcyBmaWxlOyBhbGwgb2YgdGhlIG90aGVyIHByb2ZpbGUgcm91dGluZXMgYnVpbGQsIGFjY2VzcywgYW5kCisgKiBtb2RpZnkgdGhlIHRyZWUgdmlhIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgZm91bmQgaW4gdGhpcyBmaWxlLgorICoKKyAqIEVhY2ggbm9kZSBtYXkgcmVwcmVzZW50IGVpdGhlciBhIHJlbGF0aW9uIG9yIGEgc2VjdGlvbiBoZWFkZXIuCisgKgorICogQSBzZWN0aW9uIGhlYWRlciBtdXN0IGhhdmUgaXRzIHZhbHVlIGZpZWxkIHNldCB0byAwLCBhbmQgbWF5IGEgb25lCisgKiBvciBtb3JlIGNoaWxkIG5vZGVzLCBwb2ludGVkIHRvIGJ5IGZpcnN0X2NoaWxkLgorICoKKyAqIEEgcmVsYXRpb24gaGFzIGFzIGl0cyB2YWx1ZSBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeQorICogY29udGFpbmluZyBhIHN0cmluZy4gIEl0cyBmaXJzdF9jaGlsZCBwb2ludGVyIG11c3QgYmUgbnVsbC4KKyAqCisgKi8KKworLyoKKyAqIEZyZWUgYSBub2RlLCBhbmQgYW55IGNoaWxkcmVuCisgKi8KK3ZvaWQgcHJvZmlsZV9mcmVlX25vZGUoc3RydWN0IHByb2ZpbGVfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpjaGlsZCwgKm5leHQ7CisKKwlpZiAobm9kZS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19OT0RFKQorCQlyZXR1cm47CisKKwlmcmVlKG5vZGUtPm5hbWUpOworCWZyZWUobm9kZS0+dmFsdWUpOworCisJZm9yIChjaGlsZD1ub2RlLT5maXJzdF9jaGlsZDsgY2hpbGQ7IGNoaWxkID0gbmV4dCkgeworCQluZXh0ID0gY2hpbGQtPm5leHQ7CisJCXByb2ZpbGVfZnJlZV9ub2RlKGNoaWxkKTsKKwl9CisJbm9kZS0+bWFnaWMgPSAwOworCisJZnJlZShub2RlKTsKK30KKworI2lmbmRlZiBIQVZFX1NUUkRVUAorI3VuZGVmIHN0cmR1cAorI2RlZmluZSBzdHJkdXAgTVlzdHJkdXAKK3N0YXRpYyBjaGFyICpNWXN0cmR1cCAoY29uc3QgY2hhciAqcykKK3sKKyAgICBzaXplX3Qgc3ogPSBzdHJsZW4ocykgKyAxOworICAgIGNoYXIgKnAgPSBtYWxsb2Moc3opOworICAgIGlmIChwICE9IDApCisJbWVtY3B5KHAsIHMsIHN6KTsKKyAgICByZXR1cm4gcDsKK30KKyNlbmRpZgorCisvKgorICogQ3JlYXRlIGEgbm9kZQorICovCitlcnJjb2RlX3QgcHJvZmlsZV9jcmVhdGVfbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgICAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSkKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpuZXc7CisKKwluZXcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9maWxlX25vZGUpKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIEVOT01FTTsKKwltZW1zZXQobmV3LCAwLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfbm9kZSkpOworCW5ldy0+bmFtZSA9IHN0cmR1cChuYW1lKTsKKwlpZiAobmV3LT5uYW1lID09IDApIHsKKwkgICAgcHJvZmlsZV9mcmVlX25vZGUobmV3KTsKKwkgICAgcmV0dXJuIEVOT01FTTsKKwl9CisJaWYgKHZhbHVlKSB7CisJCW5ldy0+dmFsdWUgPSBzdHJkdXAodmFsdWUpOworCQlpZiAobmV3LT52YWx1ZSA9PSAwKSB7CisJCSAgICBwcm9maWxlX2ZyZWVfbm9kZShuZXcpOworCQkgICAgcmV0dXJuIEVOT01FTTsKKwkJfQorCX0KKwluZXctPm1hZ2ljID0gUFJPRl9NQUdJQ19OT0RFOworCisJKnJldF9ub2RlID0gbmV3OworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyB0aGF0IGFsbCBvZiB0aGUgcmVwcmVzZW50YXRpb24gaW52YXJpZW50cyBvZgorICogdGhlIHByb2ZpbGUgYXJlIHRydWUuICBJZiBub3QsIHdlIGhhdmUgYSBwcm9ncmFtbWluZyBidWcgc29tZXdoZXJlLAorICogcHJvYmFibHkgaW4gdGhpcyBmaWxlLgorICovCisjaWZkZWYgREVCVUdfUFJPR1JBTQorZXJyY29kZV90IHByb2ZpbGVfdmVyaWZ5X25vZGUoc3RydWN0IHByb2ZpbGVfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlICpwLCAqbGFzdDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJQ0hFQ0tfTUFHSUMobm9kZSk7CisKKwlpZiAobm9kZS0+dmFsdWUgJiYgbm9kZS0+Zmlyc3RfY2hpbGQpCisJCXJldHVybiBQUk9GX1NFQ1RJT05fV0lUSF9WQUxVRTsKKworCWxhc3QgPSAwOworCWZvciAocCA9IG5vZGUtPmZpcnN0X2NoaWxkOyBwOyBsYXN0ID0gcCwgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnByZXYgIT0gbGFzdCkKKwkJCXJldHVybiBQUk9GX0JBRF9MSU5LX0xJU1Q7CisJCWlmIChsYXN0ICYmIChsYXN0LT5uZXh0ICE9IHApKQorCQkJcmV0dXJuIFBST0ZfQkFEX0xJTktfTElTVDsKKwkJaWYgKG5vZGUtPmdyb3VwX2xldmVsKzEgIT0gcC0+Z3JvdXBfbGV2ZWwpCisJCQlyZXR1cm4gUFJPRl9CQURfR1JPVVBfTFZMOworCQlpZiAocC0+cGFyZW50ICE9IG5vZGUpCisJCQlyZXR1cm4gUFJPRl9CQURfUEFSRU5UX1BUUjsKKwkJcmV0dmFsID0gcHJvZmlsZV92ZXJpZnlfbm9kZShwKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBBZGQgYSBub2RlIHRvIGEgcGFydGljdWxhciBzZWN0aW9uCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX2FkZF9ub2RlKHN0cnVjdCBwcm9maWxlX25vZGUgKnNlY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICBjb25zdCBjaGFyICp2YWx1ZSwgc3RydWN0IHByb2ZpbGVfbm9kZSAqKnJldF9ub2RlKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IHByb2ZpbGVfbm9kZSAqcCwgKmxhc3QsICpuZXc7CisKKwlDSEVDS19NQUdJQyhzZWN0aW9uKTsKKworCWlmIChzZWN0aW9uLT52YWx1ZSkKKwkJcmV0dXJuIFBST0ZfQUREX05PVF9TRUNUSU9OOworCisJLyoKKwkgKiBGaW5kIHRoZSBwbGFjZSB0byBpbnNlcnQgdGhlIG5ldyBub2RlLiAgV2UgbG9vayBmb3IgdGhlCisJICogcGxhY2UgKmFmdGVyKiB0aGUgbGFzdCBtYXRjaCBvZiB0aGUgbm9kZSBuYW1lLCBzaW5jZQorCSAqIG9yZGVyIG1hdHRlcnMuCisJICovCisJZm9yIChwPXNlY3Rpb24tPmZpcnN0X2NoaWxkLCBsYXN0ID0gMDsgcDsgbGFzdCA9IHAsIHAgPSBwLT5uZXh0KSB7CisJCWludCBjbXA7CisJCWNtcCA9IHN0cmNtcChwLT5uYW1lLCBuYW1lKTsKKwkJaWYgKGNtcCA+IDApCisJCQlicmVhazsKKwl9CisJcmV0dmFsID0gcHJvZmlsZV9jcmVhdGVfbm9kZShuYW1lLCB2YWx1ZSwgJm5ldyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwluZXctPmdyb3VwX2xldmVsID0gc2VjdGlvbi0+Z3JvdXBfbGV2ZWwrMTsKKwluZXctPmRlbGV0ZWQgPSAwOworCW5ldy0+cGFyZW50ID0gc2VjdGlvbjsKKwluZXctPnByZXYgPSBsYXN0OworCW5ldy0+bmV4dCA9IHA7CisJaWYgKHApCisJCXAtPnByZXYgPSBuZXc7CisJaWYgKGxhc3QpCisJCWxhc3QtPm5leHQgPSBuZXc7CisJZWxzZQorCQlzZWN0aW9uLT5maXJzdF9jaGlsZCA9IG5ldzsKKwlpZiAocmV0X25vZGUpCisJCSpyZXRfbm9kZSA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbiwgcmV0dXJuaW5nIHRoZSBub2RlcyB3aGljaCBtYXRjaAorICogdGhlIGdpdmVuIG5hbWUuICBJZiBuYW1lIGlzIE5VTEwsIHRoZW4gaW50ZXJhdGUgdGhyb3VnaCBhbGwgdGhlCisgKiBub2RlcyBpbiB0aGUgc2VjdGlvbi4gIElmIHNlY3Rpb25fZmxhZyBpcyBub24temVybywgb25seSByZXR1cm4gdGhlCisgKiBzZWN0aW9uIHdoaWNoIG1hdGNoZXMgdGhlIG5hbWU7IGRvbid0IHJldHVybiByZWxhdGlvbnMuICBJZiB2YWx1ZQorICogaXMgbm9uLU5VTEwsIHRoZW4gb25seSByZXR1cm4gcmVsYXRpb25zIHdoaWNoIG1hdGNoIHRoZSByZXF1ZXN0ZWQKKyAqIHZhbHVlLiAgKFRoZSB2YWx1ZSBhcmd1bWVudCBpcyBpZ25vcmVkIGlmIHNlY3Rpb25fZmxhZyBpcyBub24temVyby4pCisgKgorICogVGhlIGZpcnN0IHRpbWUgdGhpcyByb3V0aW5lIGlzIGNhbGxlZCwgdGhlIHN0YXRlIHBvaW50ZXIgbXVzdCBiZQorICogbnVsbC4gIFdoZW4gdGhpcyBwcm9maWxlX2ZpbmRfbm9kZV9yZWxhdGlvbigpIHJldHVybnMsIGlmIHRoZSBzdGF0ZQorICogcG9pbnRlciBpcyBub24tTlVMTCwgdGhlbiB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCBhZ2Fpbi4KKyAqIChUaGlzIHdvbid0IGhhcHBlbiBpZiBzZWN0aW9uX2ZsYWcgaXMgbm9uLXplcm8sIG9idmlvdXNseS4pCisgKgorICovCitlcnJjb2RlX3QgcHJvZmlsZV9maW5kX25vZGUoc3RydWN0IHByb2ZpbGVfbm9kZSAqc2VjdGlvbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHNlY3Rpb25fZmxhZywgdm9pZCAqKnN0YXRlLAorCQkJICAgIHN0cnVjdCBwcm9maWxlX25vZGUgKipub2RlKQoreworCXN0cnVjdCBwcm9maWxlX25vZGUgKnA7CisKKwlDSEVDS19NQUdJQyhzZWN0aW9uKTsKKwlwID0gKnN0YXRlOworCWlmIChwKSB7CisJCUNIRUNLX01BR0lDKHApOworCX0gZWxzZQorCQlwID0gc2VjdGlvbi0+Zmlyc3RfY2hpbGQ7CisKKwlmb3IgKDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKG5hbWUgJiYgKHN0cmNtcChwLT5uYW1lLCBuYW1lKSkpCisJCQljb250aW51ZTsKKwkJaWYgKHNlY3Rpb25fZmxhZykgeworCQkJaWYgKHAtPnZhbHVlKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJaWYgKCFwLT52YWx1ZSkKKwkJCQljb250aW51ZTsKKwkJCWlmICh2YWx1ZSAmJiAoc3RyY21wKHAtPnZhbHVlLCB2YWx1ZSkpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwLT5kZWxldGVkKQorCQkgICAgY29udGludWU7CisJCS8qIEEgbWF0Y2ghICovCisJCWlmIChub2RlKQorCQkJKm5vZGUgPSBwOworCQlicmVhazsKKwl9CisJaWYgKHAgPT0gMCkgeworCQkqc3RhdGUgPSAwOworCQlyZXR1cm4gc2VjdGlvbl9mbGFnID8gUFJPRl9OT19TRUNUSU9OIDogUFJPRl9OT19SRUxBVElPTjsKKwl9CisJLyoKKwkgKiBPSywgd2UndmUgZm91bmQgb25lIG1hdGNoOyBub3cgbGV0J3MgdHJ5IHRvIGZpbmQgYW5vdGhlcgorCSAqIG9uZS4gIFRoaXMgd2F5LCBpZiB3ZSByZXR1cm4gYSBub24temVybyBzdGF0ZSBwb2ludGVyLAorCSAqIHRoZXJlJ3MgZ3VhcmFudGVlZCB0byBiZSBhbm90aGVyIG1hdGNoIHRoYXQncyByZXR1cm5lZC4KKwkgKi8KKwlmb3IgKHAgPSBwLT5uZXh0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAobmFtZSAmJiAoc3RyY21wKHAtPm5hbWUsIG5hbWUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2VjdGlvbl9mbGFnKSB7CisJCQlpZiAocC0+dmFsdWUpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoIXAtPnZhbHVlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZhbHVlICYmIChzdHJjbXAocC0+dmFsdWUsIHZhbHVlKSkpCisJCQkJY29udGludWU7CisJCX0KKwkJLyogQSBtYXRjaCEgKi8KKwkJYnJlYWs7CisJfQorCSpzdGF0ZSA9IHA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGl0ZXJhdG9yIGZvciByZXR1cm5pbmcgYWxsIG5vZGVzIHRoYXQKKyAqIG1hdGNoIHRoZSBzcGVjaWZpZWQgbmFtZSBhcnJheS4KKyAqLworc3RydWN0IHByb2ZpbGVfaXRlcmF0b3IgeworCXByZl9tYWdpY190CQltYWdpYzsKKwlwcm9maWxlX3QJCXByb2ZpbGU7CisJaW50CQkJZmxhZ3M7CisJY29uc3QgY2hhciAJCSpjb25zdCAqbmFtZXM7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJcHJmX2ZpbGVfdAkJZmlsZTsKKwlpbnQJCQlmaWxlX3NlcmlhbDsKKwlpbnQJCQlkb25lX2lkeDsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlIAkqbm9kZTsKKwlpbnQJCQludW07Cit9OworCitlcnJjb2RlX3QKK3Byb2ZpbGVfaXRlcmF0b3JfY3JlYXRlKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsIGludCBmbGFncywKKwkJCXZvaWQgKipyZXRfaXRlcikKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9pdGVyYXRvciAqaXRlcjsKKwlpbnQJZG9uZV9pZHggPSAwOworCisJaWYgKHByb2ZpbGUgPT0gMCkKKwkJcmV0dXJuIFBST0ZfTk9fUFJPRklMRTsKKwlpZiAocHJvZmlsZS0+bWFnaWMgIT0gUFJPRl9NQUdJQ19QUk9GSUxFKQorCQlyZXR1cm4gUFJPRl9NQUdJQ19QUk9GSUxFOworCWlmICghbmFtZXMpCisJCXJldHVybiBQUk9GX0JBRF9OQU1FU0VUOworCWlmICghKGZsYWdzICYgUFJPRklMRV9JVEVSX0xJU1RfU0VDVElPTikpIHsKKwkJaWYgKCFuYW1lc1swXSkKKwkJCXJldHVybiBQUk9GX0JBRF9OQU1FU0VUOworCQlkb25lX2lkeCA9IDE7CisJfQorCisJaWYgKChpdGVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9pdGVyYXRvcikpKSA9PSBOVUxMKQorCQlyZXR1cm4gRU5PTUVNOworCisJaXRlci0+bWFnaWMgPSBQUk9GX01BR0lDX0lURVJBVE9SOworCWl0ZXItPnByb2ZpbGUgPSBwcm9maWxlOworCWl0ZXItPm5hbWVzID0gbmFtZXM7CisJaXRlci0+ZmxhZ3MgPSBmbGFnczsKKwlpdGVyLT5maWxlID0gcHJvZmlsZS0+Zmlyc3RfZmlsZTsKKwlpdGVyLT5kb25lX2lkeCA9IGRvbmVfaWR4OworCWl0ZXItPm5vZGUgPSAwOworCWl0ZXItPm51bSA9IDA7CisJKnJldF9pdGVyID0gaXRlcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwcm9maWxlX2l0ZXJhdG9yX2ZyZWUodm9pZCAqKml0ZXJfcCkKK3sKKwlzdHJ1Y3QgcHJvZmlsZV9pdGVyYXRvciAqaXRlcjsKKworCWlmICghaXRlcl9wKQorCQlyZXR1cm47CisJaXRlciA9ICppdGVyX3A7CisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IFBST0ZfTUFHSUNfSVRFUkFUT1IpCisJCXJldHVybjsKKwlmcmVlKGl0ZXIpOworCSppdGVyX3AgPSAwOworfQorCisvKgorICogTm90ZTogdGhlIHJldHVybmVkIGNoYXJhY3RlciBzdHJpbmdzIGluIHJldF9uYW1lIGFuZCByZXRfdmFsdWUKKyAqIHBvaW50cyB0byB0aGUgc3RvcmVkIGNoYXJhY3RlciBzdHJpbmcgaW4gdGhlIHBhcnNlIHN0cmluZy4gIEJlZm9yZQorICogdGhpcyBzdHJpbmcgdmFsdWUgaXMgcmV0dXJuZWQgdG8gYSBjYWxsaW5nIGFwcGxpY2F0aW9uCisgKiAocHJvZmlsZV9ub2RlX2l0ZXJhdG9yIGlzIG5vdCBhbiBleHBvcnRlZCBpbnRlcmZhY2UpLCBpdCBzaG91bGQgYmUKKyAqIHN0cmR1cCgpJ2VkLgorICovCitlcnJjb2RlX3QgcHJvZmlsZV9ub2RlX2l0ZXJhdG9yKHZvaWQgKippdGVyX3AsIHN0cnVjdCBwcm9maWxlX25vZGUgKipyZXRfbm9kZSwKKwkJCQljaGFyICoqcmV0X25hbWUsIGNoYXIgKipyZXRfdmFsdWUpCit7CisJc3RydWN0IHByb2ZpbGVfaXRlcmF0b3IgCSppdGVyID0gKml0ZXJfcDsKKwlzdHJ1Y3QgcHJvZmlsZV9ub2RlIAkJKnNlY3Rpb24sICpwOworCWNvbnN0IGNoYXIJCQkqY29uc3QgKmNwcDsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJaW50CQkJCXNraXBfbnVtID0gMDsKKworCWlmICghaXRlciB8fCBpdGVyLT5tYWdpYyAhPSBQUk9GX01BR0lDX0lURVJBVE9SKQorCQlyZXR1cm4gUFJPRl9NQUdJQ19JVEVSQVRPUjsKKwlpZiAoaXRlci0+ZmlsZSAmJiBpdGVyLT5maWxlLT5tYWdpYyAhPSBQUk9GX01BR0lDX0ZJTEUpCisJICAgIHJldHVybiBQUk9GX01BR0lDX0ZJTEU7CisJLyoKKwkgKiBJZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCwgdGhlbiB0aGUgbm9kZSBwb2ludGVyIGlzIGludmFsaWQsCisJICogc28gd2UnbGwgaGF2ZSBzZWFyY2ggdGhlIGZpbGUgYWdhaW4gbG9va2luZyBmb3IgaXQuCisJICovCisJaWYgKGl0ZXItPm5vZGUgJiYgKGl0ZXItPmZpbGUgJiYKKwkJCSAgIGl0ZXItPmZpbGUtPnVwZF9zZXJpYWwgIT0gaXRlci0+ZmlsZV9zZXJpYWwpKSB7CisJCWl0ZXItPmZsYWdzICY9IH5QUk9GSUxFX0lURVJfRklOQUxfU0VFTjsKKwkJc2tpcF9udW0gPSBpdGVyLT5udW07CisJCWl0ZXItPm5vZGUgPSAwOworCX0KKwlpZiAoaXRlci0+bm9kZSAmJiBpdGVyLT5ub2RlLT5tYWdpYyAhPSBQUk9GX01BR0lDX05PREUpIHsKKwkgICAgcmV0dXJuIFBST0ZfTUFHSUNfTk9ERTsKKwl9CitnZXRfbmV3X2ZpbGU6CisJaWYgKGl0ZXItPm5vZGUgPT0gMCkgeworCQlpZiAoaXRlci0+ZmlsZSA9PSAwIHx8CisJCSAgICAoaXRlci0+ZmxhZ3MgJiBQUk9GSUxFX0lURVJfRklOQUxfU0VFTikpIHsKKwkJCXByb2ZpbGVfaXRlcmF0b3JfZnJlZShpdGVyX3ApOworCQkJaWYgKHJldF9ub2RlKQorCQkJCSpyZXRfbm9kZSA9IDA7CisJCQlpZiAocmV0X25hbWUpCisJCQkJKnJldF9uYW1lID0gMDsKKwkJCWlmIChyZXRfdmFsdWUpCisJCQkJKnJldF92YWx1ZSA9MDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICgocmV0dmFsID0gcHJvZmlsZV91cGRhdGVfZmlsZShpdGVyLT5maWxlKSkpIHsKKwkJICAgIGlmIChyZXR2YWwgPT0gRU5PRU5UIHx8IHJldHZhbCA9PSBFQUNDRVMpIHsKKwkJCS8qIFhYWCBtZW1vcnkgbGVhaz8gKi8KKwkJCWl0ZXItPmZpbGUgPSBpdGVyLT5maWxlLT5uZXh0OworCQkJc2tpcF9udW0gPSAwOworCQkJcmV0dmFsID0gMDsKKwkJCWdvdG8gZ2V0X25ld19maWxlOworCQkgICAgfSBlbHNlIHsKKwkJCXByb2ZpbGVfaXRlcmF0b3JfZnJlZShpdGVyX3ApOworCQkJcmV0dXJuIHJldHZhbDsKKwkJICAgIH0KKwkJfQorCQlpdGVyLT5maWxlX3NlcmlhbCA9IGl0ZXItPmZpbGUtPnVwZF9zZXJpYWw7CisJCS8qCisJCSAqIEZpbmQgdGhlIHNlY3Rpb24gdG8gbGlzdCBpZiB3ZSBhcmUgYSBMSVNUX1NFQ1RJT04sCisJCSAqIG9yIGZpbmQgdGhlIGNvbnRhaW5pbmcgc2VjdGlvbiBpZiBub3QuCisJCSAqLworCQlzZWN0aW9uID0gaXRlci0+ZmlsZS0+cm9vdDsKKwkJZm9yIChjcHAgPSBpdGVyLT5uYW1lczsgY3BwW2l0ZXItPmRvbmVfaWR4XTsgY3BwKyspIHsKKwkJCWZvciAocD1zZWN0aW9uLT5maXJzdF9jaGlsZDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCQlpZiAoIXN0cmNtcChwLT5uYW1lLCAqY3BwKSAmJiAhcC0+dmFsdWUpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCFwKSB7CisJCQkJc2VjdGlvbiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZWN0aW9uID0gcDsKKwkJCWlmIChwLT5maW5hbCkKKwkJCQlpdGVyLT5mbGFncyB8PSBQUk9GSUxFX0lURVJfRklOQUxfU0VFTjsKKwkJfQorCQlpZiAoIXNlY3Rpb24pIHsKKwkJCWl0ZXItPmZpbGUgPSBpdGVyLT5maWxlLT5uZXh0OworCQkJc2tpcF9udW0gPSAwOworCQkJZ290byBnZXRfbmV3X2ZpbGU7CisJCX0KKwkJaXRlci0+bmFtZSA9ICpjcHA7CisJCWl0ZXItPm5vZGUgPSBzZWN0aW9uLT5maXJzdF9jaGlsZDsKKwl9CisJLyoKKwkgKiBPSywgbm93IHdlIGtub3cgaXRlci0+bm9kZSBpcyBzZXQgdXAgY29ycmVjdGx5LiAgTGV0J3MgZG8KKwkgKiB0aGUgc2VhcmNoLgorCSAqLworCWZvciAocCA9IGl0ZXItPm5vZGU7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChpdGVyLT5uYW1lICYmIHN0cmNtcChwLT5uYW1lLCBpdGVyLT5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGl0ZXItPmZsYWdzICYgUFJPRklMRV9JVEVSX1NFQ1RJT05TX09OTFkpICYmCisJCSAgICBwLT52YWx1ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGl0ZXItPmZsYWdzICYgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZKSAmJgorCQkgICAgIXAtPnZhbHVlKQorCQkJY29udGludWU7CisJCWlmIChza2lwX251bSA+IDApIHsKKwkJCXNraXBfbnVtLS07CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocC0+ZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJaXRlci0+bnVtKys7CisJaWYgKCFwKSB7CisJCWl0ZXItPmZpbGUgPSBpdGVyLT5maWxlLT5uZXh0OworCQlpdGVyLT5ub2RlID0gMDsKKwkJc2tpcF9udW0gPSAwOworCQlnb3RvIGdldF9uZXdfZmlsZTsKKwl9CisJaWYgKChpdGVyLT5ub2RlID0gcC0+bmV4dCkgPT0gTlVMTCkKKwkJaXRlci0+ZmlsZSA9IGl0ZXItPmZpbGUtPm5leHQ7CisJaWYgKHJldF9ub2RlKQorCQkqcmV0X25vZGUgPSBwOworCWlmIChyZXRfbmFtZSkKKwkJKnJldF9uYW1lID0gcC0+bmFtZTsKKwlpZiAocmV0X3ZhbHVlKQorCQkqcmV0X3ZhbHVlID0gcC0+dmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHByb2ZfZ2V0LmMgLS0tIHJvdXRpbmVzIHRoYXQgZXhwb3NlIHRoZSBwdWJsaWMgaW50ZXJmYWNlcyBmb3IKKyAqIAlxdWVyeWluZyBpdGVtcyBmcm9tIHRoZSBwcm9maWxlLgorICoKKyAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIGZpbGU7IGl0IGlzIGEKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgcHJvZmlsZV9nZXRfc3RyaW5nLCBwcm9maWxlX2dldF9pbnRlZ2VyLCBldGMuCisgKi8KK2VycmNvZGVfdCBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBjb25zdCBjaGFyICpzdWJuYW1lLCBjb25zdCBjaGFyICpzdWJzdWJuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKipyZXRfdmFsdWUpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJdm9pZAkJCSpzdGF0ZTsKKwljaGFyCQkJKnZhbHVlOworCWNvbnN0IGNoYXIJCSpuYW1lc1s0XTsKKworCW5hbWVzWzBdID0gbmFtZTsKKwluYW1lc1sxXSA9IHN1Ym5hbWU7CisJbmFtZXNbMl0gPSBzdWJzdWJuYW1lOworCW5hbWVzWzNdID0gMDsKKworCWlmICgocmV0dmFsID0gcHJvZmlsZV9pdGVyYXRvcl9jcmVhdGUocHJvZmlsZSwgbmFtZXMsCisJCQkJCSAgICAgIFBST0ZJTEVfSVRFUl9SRUxBVElPTlNfT05MWSwKKwkJCQkJICAgICAgJnN0YXRlKSkpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoKHJldHZhbCA9IHByb2ZpbGVfbm9kZV9pdGVyYXRvcigmc3RhdGUsIDAsIDAsICZ2YWx1ZSkpKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAodmFsdWUpCisJCSpyZXRfdmFsdWUgPSB2YWx1ZTsKKwllbHNlCisJCXJldHZhbCA9IFBST0ZfTk9fUkVMQVRJT047CisKK2NsZWFudXA6CisJcHJvZmlsZV9pdGVyYXRvcl9mcmVlKCZzdGF0ZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF9zdHJpbmcocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGNvbnN0IGNoYXIgKmRlZl92YWwsCisJCSAgIGNoYXIgKipyZXRfc3RyaW5nKQoreworCWNvbnN0IGNoYXIJKnZhbHVlOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAocHJvZmlsZSkgeworCQlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlLCBuYW1lLCBzdWJuYW1lLAorCQkJCQkgICBzdWJzdWJuYW1lLCAmdmFsdWUpOworCQlpZiAocmV0dmFsID09IFBST0ZfTk9fU0VDVElPTiB8fCByZXR2YWwgPT0gUFJPRl9OT19SRUxBVElPTikKKwkJCXZhbHVlID0gZGVmX3ZhbDsKKwkJZWxzZSBpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9IGVsc2UKKwkJdmFsdWUgPSBkZWZfdmFsOworCisJaWYgKHZhbHVlKSB7CisJCSpyZXRfc3RyaW5nID0gbWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJCWlmICgqcmV0X3N0cmluZyA9PSAwKQorCQkJcmV0dXJuIEVOT01FTTsKKwkJc3RyY3B5KCpyZXRfc3RyaW5nLCB2YWx1ZSk7CisJfSBlbHNlCisJCSpyZXRfc3RyaW5nID0gMDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF9pbnRlZ2VyKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgICAgY29uc3QgY2hhciAqc3Vic3VibmFtZSwgaW50IGRlZl92YWwsIGludCAqcmV0X2ludCkKK3sKKwljb25zdCBjaGFyCSp2YWx1ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIgICAgICAgICAgICAqZW5kX3ZhbHVlOworCWxvbmcJCXJldF9sb25nOworCisJKnJldF9pbnQgPSBkZWZfdmFsOworCWlmIChwcm9maWxlID09IDApCisJCXJldHVybiAwOworCisJcmV0dmFsID0gcHJvZmlsZV9nZXRfdmFsdWUocHJvZmlsZSwgbmFtZSwgc3VibmFtZSwgc3Vic3VibmFtZSwgJnZhbHVlKTsKKwlpZiAocmV0dmFsID09IFBST0ZfTk9fU0VDVElPTiB8fCByZXR2YWwgPT0gUFJPRl9OT19SRUxBVElPTikgeworCQkqcmV0X2ludCA9IGRlZl92YWw7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHZhbHVlWzBdID09IDApCisJICAgIC8qIEVtcHR5IHN0cmluZyBpcyBubyBnb29kLiAgKi8KKwkgICAgcmV0dXJuIFBST0ZfQkFEX0lOVEVHRVI7CisJZXJybm8gPSAwOworCXJldF9sb25nID0gc3RydG9sICh2YWx1ZSwgJmVuZF92YWx1ZSwgMTApOworCisJLyogT3ZlcmZsb3cgb3IgdW5kZXJmbG93LiAgKi8KKwlpZiAoKHJldF9sb25nID09IExPTkdfTUlOIHx8IHJldF9sb25nID09IExPTkdfTUFYKSAmJiBlcnJubyAhPSAwKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBWYWx1ZSBvdXRzaWRlICJpbnQiIHJhbmdlLiAgKi8KKwlpZiAoKGxvbmcpIChpbnQpIHJldF9sb25nICE9IHJldF9sb25nKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKwkvKiBHYXJiYWdlIGluIHN0cmluZy4gICovCisJaWYgKGVuZF92YWx1ZSAhPSB2YWx1ZSArIHN0cmxlbiAodmFsdWUpKQorCSAgICByZXR1cm4gUFJPRl9CQURfSU5URUdFUjsKKworCisJKnJldF9pbnQgPSByZXRfbG9uZzsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF91aW50KHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkgY29uc3QgY2hhciAqc3Vic3VibmFtZSwgdW5zaWduZWQgaW50IGRlZl92YWwsCisJCSB1bnNpZ25lZCBpbnQgKnJldF9pbnQpCit7CisJY29uc3QgY2hhcgkqdmFsdWU7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyICAgICAgICAgICAgKmVuZF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nCXJldF9sb25nOworCisJKnJldF9pbnQgPSBkZWZfdmFsOworCWlmIChwcm9maWxlID09IDApCisJCXJldHVybiAwOworCisJcmV0dmFsID0gcHJvZmlsZV9nZXRfdmFsdWUocHJvZmlsZSwgbmFtZSwgc3VibmFtZSwgc3Vic3VibmFtZSwgJnZhbHVlKTsKKwlpZiAocmV0dmFsID09IFBST0ZfTk9fU0VDVElPTiB8fCByZXR2YWwgPT0gUFJPRl9OT19SRUxBVElPTikgeworCQkqcmV0X2ludCA9IGRlZl92YWw7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKHZhbHVlWzBdID09IDApCisJICAgIC8qIEVtcHR5IHN0cmluZyBpcyBubyBnb29kLiAgKi8KKwkgICAgcmV0dXJuIFBST0ZfQkFEX0lOVEVHRVI7CisJZXJybm8gPSAwOworCXJldF9sb25nID0gc3RydG91bCAodmFsdWUsICZlbmRfdmFsdWUsIDEwKTsKKworCS8qIE92ZXJmbG93IG9yIHVuZGVyZmxvdy4gICovCisJaWYgKChyZXRfbG9uZyA9PSBVTE9OR19NQVgpICYmIGVycm5vICE9IDApCisJICAgIHJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCS8qIFZhbHVlIG91dHNpZGUgImludCIgcmFuZ2UuICAqLworCWlmICgodW5zaWduZWQgbG9uZykgKHVuc2lnbmVkIGludCkgcmV0X2xvbmcgIT0gcmV0X2xvbmcpCisJICAgIHJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCS8qIEdhcmJhZ2UgaW4gc3RyaW5nLiAgKi8KKwlpZiAoZW5kX3ZhbHVlICE9IHZhbHVlICsgc3RybGVuICh2YWx1ZSkpCisJICAgIHJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCisJKnJldF9pbnQgPSByZXRfbG9uZzsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF9kb3VibGUocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCSAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGRvdWJsZSBkZWZfdmFsLCBkb3VibGUgKnJldF9kb3VibGUpCit7CisJY29uc3QgY2hhcgkqdmFsdWU7CisJZXJyY29kZV90CSAgcmV0dmFsOworCWNoYXIgICAgICAgICplbmRfdmFsdWU7CisJZG91YmxlICAgICAgZG91YmxlX3ZhbDsKKworCSpyZXRfZG91YmxlID0gZGVmX3ZhbDsKKwlpZiAocHJvZmlsZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IHByb2ZpbGVfZ2V0X3ZhbHVlKHByb2ZpbGUsIG5hbWUsIHN1Ym5hbWUsIHN1YnN1Ym5hbWUsICZ2YWx1ZSk7CisJaWYgKHJldHZhbCA9PSBQUk9GX05PX1NFQ1RJT04gfHwgcmV0dmFsID09IFBST0ZfTk9fUkVMQVRJT04pIHsKKwkJKnJldF9kb3VibGUgPSBkZWZfdmFsOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICh2YWx1ZVswXSA9PSAwKQorCQkvKiBFbXB0eSBzdHJpbmcgaXMgbm8gZ29vZC4gICovCisJCXJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCWVycm5vID0gMDsKKwlkb3VibGVfdmFsID0gc3RydG9kKHZhbHVlLCAmZW5kX3ZhbHVlKTsKKworCS8qIE92ZXJmbG93IG9yIHVuZGVyZmxvdy4gICovCisJaWYgKGVycm5vICE9IDApCisJCXJldHVybiBQUk9GX0JBRF9JTlRFR0VSOworCS8qIEdhcmJhZ2UgaW4gc3RyaW5nLiAgKi8KKwlpZiAoZW5kX3ZhbHVlICE9IHZhbHVlICsgc3RybGVuKHZhbHVlKSkKKwkJcmV0dXJuIFBST0ZfQkFEX0lOVEVHRVI7CisKKwkqcmV0X2RvdWJsZSA9IGRvdWJsZV92YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjb25mX3llc1tdID0geworICAgICJ5IiwgInllcyIsICJ0cnVlIiwgInQiLCAiMSIsICJvbiIsCisgICAgMCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjb25mX25vW10gPSB7CisgICAgIm4iLCAibm8iLCAiZmFsc2UiLCAibmlsIiwgIjAiLCAib2ZmIiwKKyAgICAwLAorfTsKKworc3RhdGljIGVycmNvZGVfdAorcHJvZmlsZV9wYXJzZV9ib29sZWFuKGNvbnN0IGNoYXIgKnMsIGludCAqcmV0X2Jvb2xlYW4pCit7CisgICAgY29uc3QgY2hhciAqY29uc3QgKnA7CisKKyAgICBpZiAocmV0X2Jvb2xlYW4gPT0gTlVMTCkKKyAgICAJcmV0dXJuIFBST0ZfRUlOVkFMOworCisgICAgZm9yKHA9Y29uZl95ZXM7ICpwOyBwKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKCpwLHMpKSB7CisJCQkqcmV0X2Jvb2xlYW4gPSAxOworCSAgICAJcmV0dXJuIDA7CisJCX0KKyAgICB9CisKKyAgICBmb3IocD1jb25mX25vOyAqcDsgcCsrKSB7CisJCWlmICghc3RyY2FzZWNtcCgqcCxzKSkgeworCQkJKnJldF9ib29sZWFuID0gMDsKKwkJCXJldHVybiAwOworCQl9CisgICAgfQorCisJcmV0dXJuIFBST0ZfQkFEX0JPT0xFQU47Cit9CisKK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfYm9vbGVhbihwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJICAgIGNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGludCBkZWZfdmFsLCBpbnQgKnJldF9ib29sZWFuKQoreworCWNvbnN0IGNoYXIJKnZhbHVlOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAocHJvZmlsZSA9PSAwKSB7CisJCSpyZXRfYm9vbGVhbiA9IGRlZl92YWw7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IHByb2ZpbGVfZ2V0X3ZhbHVlKHByb2ZpbGUsIG5hbWUsIHN1Ym5hbWUsIHN1YnN1Ym5hbWUsICZ2YWx1ZSk7CisJaWYgKHJldHZhbCA9PSBQUk9GX05PX1NFQ1RJT04gfHwgcmV0dmFsID09IFBST0ZfTk9fUkVMQVRJT04pIHsKKwkJKnJldF9ib29sZWFuID0gZGVmX3ZhbDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcHJvZmlsZV9wYXJzZV9ib29sZWFuICh2YWx1ZSwgcmV0X2Jvb2xlYW4pOworfQorCitlcnJjb2RlX3QKK3Byb2ZpbGVfaXRlcmF0b3Iodm9pZCAqKml0ZXJfcCwgY2hhciAqKnJldF9uYW1lLCBjaGFyICoqcmV0X3ZhbHVlKQoreworCWNoYXIgKm5hbWUsICp2YWx1ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gcHJvZmlsZV9ub2RlX2l0ZXJhdG9yKGl0ZXJfcCwgMCwgJm5hbWUsICZ2YWx1ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChyZXRfbmFtZSkgeworCQlpZiAobmFtZSkgeworCQkJKnJldF9uYW1lID0gbWFsbG9jKHN0cmxlbihuYW1lKSsxKTsKKwkJCWlmICghKnJldF9uYW1lKQorCQkJCXJldHVybiBFTk9NRU07CisJCQlzdHJjcHkoKnJldF9uYW1lLCBuYW1lKTsKKwkJfSBlbHNlCisJCQkqcmV0X25hbWUgPSAwOworCX0KKwlpZiAocmV0X3ZhbHVlKSB7CisJCWlmICh2YWx1ZSkgeworCQkJKnJldF92YWx1ZSA9IG1hbGxvYyhzdHJsZW4odmFsdWUpKzEpOworCQkJaWYgKCEqcmV0X3ZhbHVlKSB7CisJCQkJaWYgKHJldF9uYW1lKSB7CisJCQkJCWZyZWUoKnJldF9uYW1lKTsKKwkJCQkJKnJldF9uYW1lID0gMDsKKwkJCQl9CisJCQkJcmV0dXJuIEVOT01FTTsKKwkJCX0KKwkJCXN0cmNweSgqcmV0X3ZhbHVlLCB2YWx1ZSk7CisJCX0gZWxzZQorCQkJKnJldF92YWx1ZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUdfUFJPR1JBTQorCisvKgorICogdGVzdF9wcm9maWxlLmMgLS0tIHRlc3RpbmcgcHJvZ3JhbSBmb3IgdGhlIHByb2ZpbGUgcm91dGluZQorICovCisKKyNpbmNsdWRlICJhcmd2X3BhcnNlLmgiCisjaW5jbHVkZSAicHJvZmlsZV9oZWxwZXJzLmgiCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJ0ZXN0X3Byb2ZpbGUiOworCisjZGVmaW5lIFBSSU5UX1ZBTFVFCTEKKyNkZWZpbmUgUFJJTlRfVkFMVUVTCTIKKworc3RhdGljIHZvaWQgZG9fY21kKHByb2ZpbGVfdCBwcm9maWxlLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWNvbnN0IGNoYXIJKipuYW1lcywgKnZhbHVlOworCWNoYXIJCSoqdmFsdWVzLCAqKmNwcDsKKwljaGFyCSpjbWQ7CisJaW50CQlwcmludF9zdGF0dXM7CisKKwljbWQgPSAqKGFyZ3YpOworCW5hbWVzID0gKGNvbnN0IGNoYXIgKiopIGFyZ3YgKyAxOworCXByaW50X3N0YXR1cyA9IDA7CisJcmV0dmFsID0gMDsKKwlpZiAoY21kID09IDApCisJCXJldHVybjsKKwlpZiAoIXN0cmNtcChjbWQsICJxdWVyeSIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfZ2V0X3ZhbHVlcyhwcm9maWxlLCBuYW1lcywgJnZhbHVlcyk7CisJCXByaW50X3N0YXR1cyA9IFBSSU5UX1ZBTFVFUzsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAicXVlcnkxIikpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IDA7CisJCWNvbnN0IGNoYXIgKnN1Ym5hbWUgPSAwOworCQljb25zdCBjaGFyICpzdWJzdWJuYW1lID0gMDsKKworCQluYW1lID0gbmFtZXNbMF07CisJCWlmIChuYW1lKQorCQkJc3VibmFtZSA9IG5hbWVzWzFdOworCQlpZiAoc3VibmFtZSkKKwkJCXN1YnN1Ym5hbWUgPSBuYW1lc1syXTsKKwkJaWYgKHN1YnN1Ym5hbWUgJiYgbmFtZXNbM10pIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJPbmx5IDMgbGV2ZWxzIGFyZSBhbGxvd2VkIHdpdGggcXVlcnkxXG4iKTsKKwkJCXJldHZhbCA9IEVJTlZBTDsKKwkJfSBlbHNlCisJCQlyZXR2YWwgPSBwcm9maWxlX2dldF92YWx1ZShwcm9maWxlLCBuYW1lLCBzdWJuYW1lLAorCQkJCQkJICAgc3Vic3VibmFtZSwgJnZhbHVlKTsKKwkJcHJpbnRfc3RhdHVzID0gUFJJTlRfVkFMVUU7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImxpc3Rfc2VjdGlvbnMiKSkgeworCQlyZXR2YWwgPSBwcm9maWxlX2dldF9zdWJzZWN0aW9uX25hbWVzKHByb2ZpbGUsIG5hbWVzLAorCQkJCQkJICAgICAgJnZhbHVlcyk7CisJCXByaW50X3N0YXR1cyA9IFBSSU5UX1ZBTFVFUzsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAibGlzdF9yZWxhdGlvbnMiKSkgeworCQlyZXR2YWwgPSBwcm9maWxlX2dldF9yZWxhdGlvbl9uYW1lcyhwcm9maWxlLCBuYW1lcywKKwkJCQkJCSAgICAmdmFsdWVzKTsKKwkJcHJpbnRfc3RhdHVzID0gUFJJTlRfVkFMVUVTOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJkdW1wIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV93cml0ZV90cmVlX2ZpbGUKKwkJCShwcm9maWxlLT5maXJzdF9maWxlLT5yb290LCBzdGRvdXQpOworI2lmIDAKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiY2xlYXIiKSkgeworCQlyZXR2YWwgPSBwcm9maWxlX2NsZWFyX3JlbGF0aW9uKHByb2ZpbGUsIG5hbWVzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAidXBkYXRlIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV91cGRhdGVfcmVsYXRpb24ocHJvZmlsZSwgbmFtZXMrMiwKKwkJCQkJCSAqbmFtZXMsICoobmFtZXMrMSkpOworI2VuZGlmCisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInZlcmlmeSIpKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfdmVyaWZ5X25vZGUKKwkJCShwcm9maWxlLT5maXJzdF9maWxlLT5yb290KTsKKyNpZiAwCisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInJlbmFtZV9zZWN0aW9uIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV9yZW5hbWVfc2VjdGlvbihwcm9maWxlLCBuYW1lcysxLCAqbmFtZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJhZGQiKSkgeworCQl2YWx1ZSA9ICpuYW1lczsKKwkJaWYgKHN0cmNtcCh2YWx1ZSwgIk5VTEwiKSA9PSAwKQorCQkJdmFsdWUgPSBOVUxMOworCQlyZXR2YWwgPSBwcm9maWxlX2FkZF9yZWxhdGlvbihwcm9maWxlLCBuYW1lcysxLCB2YWx1ZSk7CisJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImZsdXNoIikpIHsKKwkJcmV0dmFsID0gcHJvZmlsZV9mbHVzaChwcm9maWxlKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXByaW50ZigiSW52YWxpZCBjb21tYW5kLlxuIik7CisJfQorCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjbWQsIHJldHZhbCwgIiIpOworCQlwcmludF9zdGF0dXMgPSAwOworCX0KKwlzd2l0Y2ggKHByaW50X3N0YXR1cykgeworCWNhc2UgUFJJTlRfVkFMVUU6CisJCXByaW50ZigiJXNcbiIsIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9WQUxVRVM6CisJCWZvciAoY3BwID0gdmFsdWVzOyAqY3BwOyBjcHArKykKKwkJCXByaW50ZigiJXNcbiIsICpjcHApOworCQlwcm9maWxlX2ZyZWVfbGlzdCh2YWx1ZXMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX2JhdGNobW9kZShwcm9maWxlX3QgcHJvZmlsZSkKK3sKKwlpbnQJCWFyZ2MsIHJldDsKKwljaGFyCQkqKmFyZ3Y7CisJY2hhcgkJYnVmWzI1Nl07CisKKwl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbikgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlwcmludGYoIj4lcyIsIGJ1Zik7CisJCXJldCA9IGFyZ3ZfcGFyc2UoYnVmLCAmYXJnYywgJmFyZ3YpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ZigiQXJndl9wYXJzZSByZXR1cm5lZCAlZCFcbiIsIHJldCk7CisJCQljb250aW51ZTsKKwkJfQorCQlkb19jbWQocHJvZmlsZSwgYXJndik7CisJCXByaW50ZigiXG4iKTsKKwkJYXJndl9mcmVlKGFyZ3YpOworCX0KKwlwcm9maWxlX3JlbGVhc2UocHJvZmlsZSk7CisJZXhpdCgwKTsKKworfQorCit2b2lkIHN5bnRheF9lcnJfcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBsb25nIGVyciwgaW50IGxpbmVfbnVtKQoreworCWZwcmludGYoc3RkZXJyLCAiU3ludGF4IGVycm9yIGluICVzLCBsaW5lIG51bWJlciAlZDogJXNcbiIsCisJCWZpbGVuYW1lLCBsaW5lX251bSwgZXJyb3JfbWVzc2FnZShlcnIpKTsKKwlleGl0KDEpOworfQorCitjb25zdCBjaGFyICpkZWZhdWx0X3N0ciA9ICJbZm9vXVxuXHRiYXI9cXV1eFxuXHRzdWIgPSB7XG5cdFx0d2luID0gdHJ1ZVxufVxuIjsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHByb2ZpbGVfdAlwcm9maWxlOworICAgIGxvbmcJcmV0dmFsOworICAgIGNoYXIJKmNtZDsKKworICAgIGlmIChhcmdjIDwgMikgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBmaWxlbmFtZSBbY21kIGFyZ3NldF1cbiIsIHByb2dyYW1fbmFtZSk7CisJICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaW5pdGlhbGl6ZV9wcm9mX2Vycm9yX3RhYmxlKCk7CisKKyAgICBwcm9maWxlX3NldF9zeW50YXhfZXJyX2NiKHN5bnRheF9lcnJfcmVwb3J0KTsKKworICAgIHJldHZhbCA9IHByb2ZpbGVfaW5pdF9wYXRoKGFyZ3ZbMV0sICZwcm9maWxlKTsKKyAgICBpZiAocmV0dmFsKSB7CisJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIndoaWxlIGluaXRpYWxpemluZyBwcm9maWxlIik7CisJZXhpdCgxKTsKKyAgICB9CisgICAgcmV0dmFsID0gcHJvZmlsZV9zZXRfZGVmYXVsdChwcm9maWxlLCBkZWZhdWx0X3N0cik7CisgICAgaWYgKHJldHZhbCkgeworCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICJ3aGlsZSBzZXR0aW5nIGRlZmF1bHQiKTsKKwlleGl0KDEpOworICAgIH0KKworICAgIGNtZCA9ICooYXJndisyKTsKKyAgICBpZiAoIWNtZCB8fCAhc3RyY21wKGNtZCwgImJhdGNoIikpCisJICAgIGRvX2JhdGNobW9kZShwcm9maWxlKTsKKyAgICBlbHNlCisJICAgIGRvX2NtZChwcm9maWxlLCBhcmd2KzIpOworICAgIHByb2ZpbGVfcmVsZWFzZShwcm9maWxlKTsKKworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZS5oIGIvZTJmc3Byb2dzL2UyZnNjay9wcm9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjMTBlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogcHJvZmlsZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5ODUtMjAwNSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkgcmVxdWlyZQorICogYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4gIEl0IGlzIHRoZQorICogcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGluZyBleHBvcnQgdG8KKyAqIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0aW5nLgorICoKKyAqIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZAorICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCisgKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcKKyAqIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gIEZ1cnRoZXJtb3JlIGlmIHlvdSBtb2RpZnkgdGhpcyBzb2Z0d2FyZSB5b3UgbXVzdCBsYWJlbAorICogeW91ciBzb2Z0d2FyZSBhcyBtb2RpZmllZCBzb2Z0d2FyZSBhbmQgbm90IGRpc3RyaWJ1dGUgaXQgaW4gc3VjaCBhCisgKiBmYXNoaW9uIHRoYXQgaXQgbWlnaHQgYmUgY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgTUlUIHNvZnR3YXJlLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZQorICogZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfUFJPRklMRV9ICisjZGVmaW5lIF9QUk9GSUxFX0gKKwordHlwZWRlZiBzdHJ1Y3QgX3Byb2ZpbGVfdCAqcHJvZmlsZV90OworCit0eXBlZGVmIHZvaWQgKCpwcm9maWxlX3N5bnRheF9lcnJfY2JfdCkoY29uc3QgY2hhciAqZmlsZSwgbG9uZyBlcnIsCisJCQkJCWludCBsaW5lX251bSk7CisKKy8qCisgKiBVc2VkIGJ5IHRoZSBwcm9maWxlIGl0ZXJhdG9yIGluIHByb2ZfZ2V0LmMKKyAqLworI2RlZmluZSBQUk9GSUxFX0lURVJfTElTVF9TRUNUSU9OCTB4MDAwMQorI2RlZmluZSBQUk9GSUxFX0lURVJfU0VDVElPTlNfT05MWQkweDAwMDIKKyNkZWZpbmUgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZCTB4MDAwNAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK2xvbmcgcHJvZmlsZV9pbml0CisJKGNvbnN0IGNoYXIgKiAqZmlsZXMsIHByb2ZpbGVfdCAqcmV0X3Byb2ZpbGUpOworCit2b2lkIHByb2ZpbGVfcmVsZWFzZQorCShwcm9maWxlX3QgcHJvZmlsZSk7CisKK2xvbmcgcHJvZmlsZV9zZXRfZGVmYXVsdAorCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqZGVmX3N0cmluZyk7CisKK2xvbmcgcHJvZmlsZV9nZXRfc3RyaW5nCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkJY29uc3QgY2hhciAqc3Vic3VibmFtZSwgY29uc3QgY2hhciAqZGVmX3ZhbCwKKwkJCWNoYXIgKipyZXRfc3RyaW5nKTsKK2xvbmcgcHJvZmlsZV9nZXRfaW50ZWdlcgorCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCWNvbnN0IGNoYXIgKnN1YnN1Ym5hbWUsIGludCBkZWZfdmFsLAorCQkJaW50ICpyZXRfZGVmYXVsdCk7CisKK2xvbmcgcHJvZmlsZV9nZXRfdWludAorCShwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJY29uc3QgY2hhciAqc3Vic3VibmFtZSwgdW5zaWduZWQgaW50IGRlZl92YWwsCisJCXVuc2lnbmVkIGludCAqcmV0X2ludCk7CisKK2xvbmcgcHJvZmlsZV9nZXRfZG91YmxlCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQljb25zdCBjaGFyICpzdWJzdWJuYW1lLCBkb3VibGUgZGVmX3ZhbCwKKwkJZG91YmxlICpyZXRfZmxvYXQpOworCitsb25nIHByb2ZpbGVfZ2V0X2Jvb2xlYW4KKwkocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQljb25zdCBjaGFyICpzdWJzdWJuYW1lLCBpbnQgZGVmX3ZhbCwKKwkJCWludCAqcmV0X2RlZmF1bHQpOworCitsb25nIHByb2ZpbGVfaXRlcmF0b3JfY3JlYXRlCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCSAgIGludCBmbGFncywgdm9pZCAqKnJldF9pdGVyKTsKKwordm9pZCBwcm9maWxlX2l0ZXJhdG9yX2ZyZWUKKwkodm9pZCAqKml0ZXJfcCk7CisKK2xvbmcgcHJvZmlsZV9pdGVyYXRvcgorCSh2b2lkCSoqaXRlcl9wLCBjaGFyICoqcmV0X25hbWUsIGNoYXIgKipyZXRfdmFsdWUpOworCitwcm9maWxlX3N5bnRheF9lcnJfY2JfdCBwcm9maWxlX3NldF9zeW50YXhfZXJyX2NiKHByb2ZpbGVfc3ludGF4X2Vycl9jYl90IGhvb2spOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogX0tSQjVfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9wcm9maWxlX2hlbHBlcnMuYyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZV9oZWxwZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiNWM0NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZV9oZWxwZXJzLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBwcm9maWxlX2hlbHBlcnMuYyAtLSBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgcHJvZmlsZSBsaWJyYXJ5CisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgImNvcmUiIHByb2ZpbGUgbGlicmFyeSwgYW5kIGRvCisgKiBub3QgcmVxdWlyZSBhY2Nlc3MgdG8gdGhlIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIG9mCisgKiB0aGUgcHJvZmlsZSBsaWJyYXJ5LiAgVGhleSBhcmUgbWFpbmx5IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IKKyAqIHByb2dyYW1zIHRoYXQgd2FudCB0byBkbyBzb21ldGhpbmcgdW51c3VhbCBzdWNoIGFzIG9idGFpbmluZyB0aGUKKyAqIGxpc3Qgb2Ygc2VjdGlvbnMgb3IgcmVsYXRpb25zLCBvciBhY2Nlc3NpbmcgbXVsdGlwbGUgdmFsdWVzIGZyb20gYQorICogcmVsYXRpb24gdGhhdCBpcyBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UuICBUaGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGFsbAorICogYmUgZG9uZSB1c2luZyB0aGUgcHJvZmlsZV9pdGVyYXRvciBhYnN0cmFjdGlvbiwgYnV0IGl0IGlzIGxlc3MKKyAqIGNvbnZlbmllbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAicHJvZl9lcnIuaCIKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyAtLS0gaW5pdF9saXN0KCksIGVuZF9saXN0KCksIGFuZCBhZGRfdG9fbGlzdCgpIGFyZQorICogaW50ZXJuYWwgZnVuY3Rpb25zIHVzZWQgdG8gYnVpbGQgdXAgYSBudWxsLXRlcm1pbmF0ZWQgY2hhciAqKiBsaXN0CisgKiBvZiBzdHJpbmdzIHRvIGJlIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyBsaWtlIHByb2ZpbGVfZ2V0X3ZhbHVlcy4KKyAqCisgKiBUaGUgcHJvZmlsZV9zdHJpbmdfbGlzdCBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgaW50ZXJuYWwgYm9va2luZworICogcHVycG9zZXMgdG8gYnVpbGQgdXAgdGhlIGxpc3QsIHdoaWNoIGlzIHJldHVybmVkIGluICpyZXRfbGlzdCBieQorICogdGhlIGVuZF9saXN0KCkgZnVuY3Rpb24uCisgKgorICogVGhlIHB1YmxpY2x5IGV4cG9ydGVkIGludGVyZmFjZSBmb3IgZnJlZWluZyBjaGFyKiogbGlzdCBpcworICogcHJvZmlsZV9mcmVlX2xpc3QoKS4KKyAqLworCitzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCB7CisJY2hhcgkqKmxpc3Q7CisJaW50CW51bTsKKwlpbnQJbWF4OworfTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHN0cmluZyBsaXN0IGFic3RyYWN0aW9uLgorICovCitzdGF0aWMgZXJyY29kZV90IGluaXRfbGlzdChzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlsaXN0LT5udW0gPSAwOworCWxpc3QtPm1heCA9IDEwOworCWxpc3QtPmxpc3QgPSBtYWxsb2MobGlzdC0+bWF4ICogc2l6ZW9mKGNoYXIgKikpOworCWlmIChsaXN0LT5saXN0ID09IDApCisJCXJldHVybiBFTk9NRU07CisJbGlzdC0+bGlzdFswXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIGFueSBtZW1vcnkgbGVmdCBvdmVyIGluIHRoZSBzdHJpbmcgYWJzdHJhY3Rpb24sIHJldHVybmluZyB0aGUKKyAqIGJ1aWx0IHVwIGxpc3QgaW4gKnJldF9saXN0IGlmIGl0IGlzIG5vbi1udWxsLgorICovCitzdGF0aWMgdm9pZCBlbmRfbGlzdChzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCAqbGlzdCwgY2hhciAqKipyZXRfbGlzdCkKK3sKKwljaGFyCSoqY3A7CisKKwlpZiAobGlzdCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmV0X2xpc3QpIHsKKwkJKnJldF9saXN0ID0gbGlzdC0+bGlzdDsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWZvciAoY3AgPSBsaXN0LT5saXN0OyAqY3A7IGNwKyspCisJCQlmcmVlKCpjcCk7CisJCWZyZWUobGlzdC0+bGlzdCk7CisJfQorCWxpc3QtPm51bSA9IGxpc3QtPm1heCA9IDA7CisJbGlzdC0+bGlzdCA9IDA7Cit9CisKKy8qCisgKiBBZGQgYSBzdHJpbmcgdG8gdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgYWRkX3RvX2xpc3Qoc3RydWN0IHByb2ZpbGVfc3RyaW5nX2xpc3QgKmxpc3QsIGNoYXIgKnN0cikKK3sKKwljaGFyIAkqKm5ld2xpc3Q7CisJaW50CW5ld21heDsKKworCWlmIChsaXN0LT5udW0rMSA+PSBsaXN0LT5tYXgpIHsKKwkJbmV3bWF4ID0gbGlzdC0+bWF4ICsgMTA7CisJCW5ld2xpc3QgPSByZWFsbG9jKGxpc3QtPmxpc3QsIG5ld21heCAqIHNpemVvZihjaGFyICopKTsKKwkJaWYgKG5ld2xpc3QgPT0gMCkKKwkJCXJldHVybiBFTk9NRU07CisJCWxpc3QtPm1heCA9IG5ld21heDsKKwkJbGlzdC0+bGlzdCA9IG5ld2xpc3Q7CisJfQorCisJbGlzdC0+bGlzdFtsaXN0LT5udW0rK10gPSBzdHI7CisJbGlzdC0+bGlzdFtsaXN0LT5udW1dID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBhIG1lbWJlciBvZiB0aGUgbGlzdC4KKyAqLworc3RhdGljIGludCBpc19saXN0X21lbWJlcihzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyKQoreworCWNoYXIgKipjcHA7CisKKwlpZiAoIWxpc3QtPmxpc3QpCisJCXJldHVybiAwOworCisJZm9yIChjcHAgPSBsaXN0LT5saXN0OyAqY3BwOyBjcHArKykgeworCQlpZiAoIXN0cmNtcCgqY3BwLCBzdHIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIG51bGwtdGVybWluYXRlZCBsaXN0IGFzIHJldHVybmVkIGJ5CisgKiBwcm9maWxlX2dldF92YWx1ZXMuCisgKi8KK3ZvaWQgcHJvZmlsZV9mcmVlX2xpc3QoY2hhciAqKmxpc3QpCit7CisgICAgY2hhcgkqKmNwOworCisgICAgaWYgKGxpc3QgPT0gMCkKKwkgICAgcmV0dXJuOworCisgICAgZm9yIChjcCA9IGxpc3Q7ICpjcDsgY3ArKykKKwlmcmVlKCpjcCk7CisgICAgZnJlZShsaXN0KTsKK30KKworZXJyY29kZV90Citwcm9maWxlX2dldF92YWx1ZXMocHJvZmlsZV90IHByb2ZpbGUsIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywKKwkJICAgY2hhciAqKipyZXRfdmFsdWVzKQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCXZvaWQJCQkqc3RhdGU7CisJY2hhcgkJCSp2YWx1ZTsKKwlzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCB2YWx1ZXM7CisKKwlpZiAoKHJldHZhbCA9IHByb2ZpbGVfaXRlcmF0b3JfY3JlYXRlKHByb2ZpbGUsIG5hbWVzLAorCQkJCQkgICAgICBQUk9GSUxFX0lURVJfUkVMQVRJT05TX09OTFksCisJCQkJCSAgICAgICZzdGF0ZSkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChyZXR2YWwgPSBpbml0X2xpc3QoJnZhbHVlcykpKQorCQlyZXR1cm4gcmV0dmFsOworCisJZG8geworCQlpZiAoKHJldHZhbCA9IHByb2ZpbGVfaXRlcmF0b3IoJnN0YXRlLCAwLCAmdmFsdWUpKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJaWYgKHZhbHVlKQorCQkJYWRkX3RvX2xpc3QoJnZhbHVlcywgdmFsdWUpOworCX0gd2hpbGUgKHN0YXRlKTsKKworCWlmICh2YWx1ZXMubnVtID09IDApIHsKKwkJcmV0dmFsID0gUFJPRl9OT19SRUxBVElPTjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWVuZF9saXN0KCZ2YWx1ZXMsIHJldF92YWx1ZXMpOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWVuZF9saXN0KCZ2YWx1ZXMsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsaXN0IG9mIHRoZSBuYW1lcyBvZiBzdWJlY3Rpb25zIGluIHRoZQorICogdW5kZXIgdGhlIHNwZWNpZmllZCBzZWN0aW9uIG5hbWUuCisgKi8KK2VycmNvZGVfdAorcHJvZmlsZV9nZXRfc3Vic2VjdGlvbl9uYW1lcyhwcm9maWxlX3QgcHJvZmlsZSwgY29uc3QgY2hhciAqKm5hbWVzLAorCQkJICAgICBjaGFyICoqKnJldF9uYW1lcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl2b2lkCQkJKnN0YXRlOworCWNoYXIJCQkqbmFtZTsKKwlzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCB2YWx1ZXM7CisKKwlpZiAoKHJldHZhbCA9IHByb2ZpbGVfaXRlcmF0b3JfY3JlYXRlKHByb2ZpbGUsIG5hbWVzLAorCQkgICBQUk9GSUxFX0lURVJfTElTVF9TRUNUSU9OIHwgUFJPRklMRV9JVEVSX1NFQ1RJT05TX09OTFksCisJCSAgICZzdGF0ZSkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKChyZXR2YWwgPSBpbml0X2xpc3QoJnZhbHVlcykpKQorCQlyZXR1cm4gcmV0dmFsOworCisJZG8geworCQlpZiAoKHJldHZhbCA9IHByb2ZpbGVfaXRlcmF0b3IoJnN0YXRlLCAmbmFtZSwgMCkpKQorCQkJZ290byBjbGVhbnVwOworCQlpZiAobmFtZSkKKwkJCWFkZF90b19saXN0KCZ2YWx1ZXMsIG5hbWUpOworCX0gd2hpbGUgKHN0YXRlKTsKKworCWVuZF9saXN0KCZ2YWx1ZXMsIHJldF9uYW1lcyk7CisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJZW5kX2xpc3QoJnZhbHVlcywgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIHJlbGF0aW9ucyBpbiB0aGUKKyAqIHVuZGVyIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBuYW1lLgorICovCitlcnJjb2RlX3QKK3Byb2ZpbGVfZ2V0X3JlbGF0aW9uX25hbWVzKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICoqbmFtZXMsCisJCQkgICBjaGFyICoqKnJldF9uYW1lcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwl2b2lkCQkJKnN0YXRlOworCWNoYXIJCQkqbmFtZTsKKwlzdHJ1Y3QgcHJvZmlsZV9zdHJpbmdfbGlzdCB2YWx1ZXM7CisKKwlpZiAoKHJldHZhbCA9IHByb2ZpbGVfaXRlcmF0b3JfY3JlYXRlKHByb2ZpbGUsIG5hbWVzLAorCQkgICBQUk9GSUxFX0lURVJfTElTVF9TRUNUSU9OIHwgUFJPRklMRV9JVEVSX1JFTEFUSU9OU19PTkxZLAorCQkgICAmc3RhdGUpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgocmV0dmFsID0gaW5pdF9saXN0KCZ2YWx1ZXMpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRvIHsKKwkJaWYgKChyZXR2YWwgPSBwcm9maWxlX2l0ZXJhdG9yKCZzdGF0ZSwgJm5hbWUsIDApKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJaWYgKG5hbWUpIHsKKwkJCWlmIChpc19saXN0X21lbWJlcigmdmFsdWVzLCBuYW1lKSkKKwkJCQlmcmVlKG5hbWUpOworCQkJZWxzZQorCQkJCWFkZF90b19saXN0KCZ2YWx1ZXMsIG5hbWUpOworCQl9CisJfSB3aGlsZSAoc3RhdGUpOworCisJZW5kX2xpc3QoJnZhbHVlcywgcmV0X25hbWVzKTsKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwllbmRfbGlzdCgmdmFsdWVzLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3ZvaWQKK3Byb2ZpbGVfcmVsZWFzZV9zdHJpbmcoY2hhciAqc3RyKQoreworCWZyZWUoc3RyKTsKK30KKworZXJyY29kZV90Citwcm9maWxlX2luaXRfcGF0aChjb25zdCBjaGFyICogZmlsZXBhdGgsCisJCSAgcHJvZmlsZV90ICpyZXRfcHJvZmlsZSkKK3sKKwlpbnQgbl9lbnRyaWVzLCBpOworCXVuc2lnbmVkIGludCBlbnRfbGVuOworCWNvbnN0IGNoYXIgKnMsICp0OworCWNoYXIgKipmaWxlbmFtZXM7CisJZXJyY29kZV90IHJldHZhbDsKKworCS8qIGNvdW50IHRoZSBkaXN0aW5jdCBmaWxlbmFtZSBjb21wb25lbnRzICovCisJZm9yKHMgPSBmaWxlcGF0aCwgbl9lbnRyaWVzID0gMTsgKnM7IHMrKykgeworCQlpZiAoKnMgPT0gJzonKQorCQkJbl9lbnRyaWVzKys7CisJfQorCisJLyogdGhlIGFycmF5IGlzIE5VTEwgdGVybWluYXRlZCAqLworCWZpbGVuYW1lcyA9IChjaGFyICoqKSBtYWxsb2MoKG5fZW50cmllcysxKSAqIHNpemVvZihjaGFyKikpOworCWlmIChmaWxlbmFtZXMgPT0gMCkKKwkJcmV0dXJuIEVOT01FTTsKKworCS8qIG1lYXN1cmUsIGNvcHksIGFuZCBza2lwIGVhY2ggb25lICovCisJZm9yKHMgPSBmaWxlcGF0aCwgaT0wOyAodCA9IHN0cmNocihzLCAnOicpKSB8fCAodD1zK3N0cmxlbihzKSk7IHM9dCsxLCBpKyspIHsKKwkJZW50X2xlbiA9IHQtczsKKwkJZmlsZW5hbWVzW2ldID0gKGNoYXIqKSBtYWxsb2MoZW50X2xlbiArIDEpOworCQlpZiAoZmlsZW5hbWVzW2ldID09IDApIHsKKwkJCS8qIGlmIG1hbGxvYyBmYWlscywgZnJlZSB0aGUgb25lcyB0aGF0IHdvcmtlZCAqLworCQkJd2hpbGUoLS1pID49IDApIGZyZWUoZmlsZW5hbWVzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoZmlsZW5hbWVzKTsKKwkJCXJldHVybiBFTk9NRU07CisJCX0KKwkJc3RybmNweShmaWxlbmFtZXNbaV0sIHMsIGVudF9sZW4pOworCQlmaWxlbmFtZXNbaV1bZW50X2xlbl0gPSAwOworCQlpZiAoKnQgPT0gMCkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogY2FwIHRoZSBhcnJheSAqLworCWZpbGVuYW1lc1tpXSA9IDA7CisKKwlyZXR2YWwgPSBwcm9maWxlX2luaXQoKGNvbnN0IGNoYXIgKiopIGZpbGVuYW1lcywKKwkJCSAgICAgIHJldF9wcm9maWxlKTsKKworCS8qIGNvdW50IGJhY2sgZG93biBhbmQgZnJlZSB0aGUgZW50cmllcyAqLworCXdoaWxlKC0taSA+PSAwKSBmcmVlKGZpbGVuYW1lc1tpXSk7CisJZnJlZShmaWxlbmFtZXMpOworCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcHJvZmlsZV9oZWxwZXJzLmggYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZpbGVfaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjNjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Byb2ZpbGVfaGVscGVycy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBwcm9maWxlX2hlbHBlcnMuaCAtLSBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBwcm9maWxlIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKK2xvbmcgcHJvZmlsZV9nZXRfdmFsdWVzCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsIGNoYXIgKioqcmV0X3ZhbHVlcyk7CisKK3ZvaWQgcHJvZmlsZV9mcmVlX2xpc3QKKwkoY2hhciAqKmxpc3QpOworCitsb25nIHByb2ZpbGVfZ2V0X3JlbGF0aW9uX25hbWVzCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICoqbmFtZXMsIGNoYXIgKioqcmV0X25hbWVzKTsKKworbG9uZyBwcm9maWxlX2dldF9zdWJzZWN0aW9uX25hbWVzCisJKHByb2ZpbGVfdCBwcm9maWxlLCBjb25zdCBjaGFyICoqbmFtZXMsIGNoYXIgKioqcmV0X25hbWVzKTsKKwordm9pZCBwcm9maWxlX3JlbGVhc2Vfc3RyaW5nIChjaGFyICpzdHIpOworCitsb25nIHByb2ZpbGVfaW5pdF9wYXRoCisJKGNvbnN0IGNoYXIgKiBmaWxlbGlzdCwgcHJvZmlsZV90ICpyZXRfcHJvZmlsZSk7CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcXVvdGEuYyBiL2UyZnNwcm9ncy9lMmZzY2svcXVvdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDI0Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9xdW90YS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBxdW90YS5jIC0tLSBjb2RlIGZvciBoYW5kbGluZyBleHQ0IHF1b3RhIGlub2RlcworICoKKyAqLworCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2RlZmluZSBNTlRfRkwgKE1TX01HQ19WQUwgfCBNU19SRE9OTFkpCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisjaW5jbHVkZSAicXVvdGEvbWtxdW90YS5oIgorI2luY2x1ZGUgInF1b3RhL3F1b3RhaW8uaCIKKworc3RhdGljIHZvaWQgbW92ZV9xdW90YV9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBmcm9tX2lubywKKwkJCSAgICAgZXh0Ml9pbm9fdCB0b19pbm8sIGludCBxdHlwZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwljaGFyCQkJcWZfbmFtZVtRVU9UQV9OQU1FX0xFTl07CisKKwkvKiBXZSBuZWVkIHRoZSBpbm9kZSBiaXRtYXAgdG8gYmUgbG9hZGVkICovCisJaWYgKGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpKQorCQlyZXR1cm47CisKKwlpZiAoZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGZyb21faW5vLCAmaW5vZGUpKQorCQlyZXR1cm47CisKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgMDYwMDsKKwlpbm9kZS5pX2ZsYWdzID0gRVhUMl9JTU1VVEFCTEVfRkw7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKworCWV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIHRvX2lubywgJmlub2RlKTsKKwkvKiB1bmxpbmsgdGhlIG9sZCBpbm9kZSAqLworCXF1b3RhX2dldF9xZl9uYW1lKHF0eXBlLCBRRk1UX1ZGU19WMSwgcWZfbmFtZSk7CisJZXh0MmZzX3VubGluayhmcywgRVhUMl9ST09UX0lOTywgcWZfbmFtZSwgZnJvbV9pbm8sIDApOworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0cyhmcywgZnJvbV9pbm8sIC0xKTsKKwkvKiBDbGVhciBvdXQgdGhlIG9yaWdpbmFsIGlub2RlIGluIHRoZSBpbm9kZS10YWJsZSBibG9jay4gKi8KKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGZyb21faW5vLCAmaW5vZGUpOworfQorCit2b2lkIGUyZnNja19oaWRlX3F1b3RhKGUyZnNja190IGN0eCkKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBjdHgtPmZzLT5zdXBlcjsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJZXh0Ml9maWxzeXMJCWZzID0gY3R4LT5mczsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpIHx8CisJICAgICEoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKKwkJcmV0dXJuOworCisJcGN0eC5pbm8gPSBzYi0+c191c3JfcXVvdGFfaW51bTsKKwlpZiAoc2ItPnNfdXNyX3F1b3RhX2ludW0gJiYKKwkgICAgKHNiLT5zX3Vzcl9xdW90YV9pbnVtICE9IEVYVDRfVVNSX1FVT1RBX0lOTykgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8wX0hJREVfUVVPVEEsICZwY3R4KSkgeworCQltb3ZlX3F1b3RhX2lub2RlKGZzLCBzYi0+c191c3JfcXVvdGFfaW51bSwgRVhUNF9VU1JfUVVPVEFfSU5PLAorCQkJCSBVU1JRVU9UQSk7CisJCXNiLT5zX3Vzcl9xdW90YV9pbnVtID0gRVhUNF9VU1JfUVVPVEFfSU5POworCX0KKworCXBjdHguaW5vID0gc2ItPnNfZ3JwX3F1b3RhX2ludW07CisJaWYgKHNiLT5zX2dycF9xdW90YV9pbnVtICYmCisJICAgIChzYi0+c19ncnBfcXVvdGFfaW51bSAhPSBFWFQ0X0dSUF9RVU9UQV9JTk8pICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9ISURFX1FVT1RBLCAmcGN0eCkpIHsKKwkJbW92ZV9xdW90YV9pbm9kZShmcywgc2ItPnNfZ3JwX3F1b3RhX2ludW0sIEVYVDRfR1JQX1FVT1RBX0lOTywKKwkJCQkgR1JQUVVPVEEpOworCQlzYi0+c19ncnBfcXVvdGFfaW51bSA9IEVYVDRfR1JQX1FVT1RBX0lOTzsKKwl9CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3JlY292ZXJ5LmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3JlY292ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZWRkOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcmVjb3ZlcnkuYwpAQCAtMCwwICsxLDc0OCBAQAorLyoKKyAqIGxpbnV4L2ZzL2piZC9yZWNvdmVyeS5jCisgKgorICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPiwgMTk5OQorICoKKyAqIENvcHlyaWdodCAxOTk5LTIwMDAgUmVkIEhhdCBTb2Z0d2FyZSAtLS0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIEpvdXJuYWwgcmVjb3Zlcnkgcm91dGluZXMgZm9yIHRoZSBnZW5lcmljIGZpbGVzeXN0ZW0gam91cm5hbGluZyBjb2RlOworICogcGFydCBvZiB0aGUgZXh0MmZzIGpvdXJuYWxpbmcgc3lzdGVtLgorICovCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgImpmc191c2VyLmgiCisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2piZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2VuZGlmCisKKy8qCisgKiBNYWludGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlY292ZXJ5IGpvYiwgc28gdGhhdAorICogdGhlIGRpZmZlcmVudCBwYXNzZXMgY2FuIGNhcnJ5IGluZm9ybWF0aW9uIGJldHdlZW4gdGhlbS4KKyAqLworc3RydWN0IHJlY292ZXJ5X2luZm8KK3sKKwl0aWRfdAkJc3RhcnRfdHJhbnNhY3Rpb247CisJdGlkX3QJCWVuZF90cmFuc2FjdGlvbjsKKworCWludAkJbnJfcmVwbGF5czsKKwlpbnQJCW5yX3Jldm9rZXM7CisJaW50CQlucl9yZXZva2VfaGl0czsKK307CisKK2VudW0gcGFzc3R5cGUge1BBU1NfU0NBTiwgUEFTU19SRVZPS0UsIFBBU1NfUkVQTEFZfTsKK3N0YXRpYyBpbnQgZG9fb25lX3Bhc3Moam91cm5hbF90ICpqb3VybmFsLAorCQkJCXN0cnVjdCByZWNvdmVyeV9pbmZvICppbmZvLCBlbnVtIHBhc3N0eXBlIHBhc3MpOworc3RhdGljIGludCBzY2FuX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKKwkJCQl0aWRfdCwgc3RydWN0IHJlY292ZXJ5X2luZm8gKik7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFJlbGVhc2UgcmVhZGFoZWFkIGJ1ZmZlcnMgYWZ0ZXIgdXNlICovCitzdGF0aWMgdm9pZCBqb3VybmFsX2JyZWxzZV9hcnJheShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJbXSwgaW50IG4pCit7CisJd2hpbGUgKC0tbiA+PSAwKQorCQlicmVsc2UgKGJbbl0pOworfQorCisKKy8qCisgKiBXaGVuIHJlYWRpbmcgZnJvbSB0aGUgam91cm5hbCwgd2UgYXJlIGdvaW5nIHRocm91Z2ggdGhlIGJsb2NrIGRldmljZQorICogbGF5ZXIgZGlyZWN0bHkgYW5kIHNvIHRoZXJlIGlzIG5vIHJlYWRhaGVhZCBiZWluZyBkb25lIGZvciB1cy4gIFdlCisgKiBuZWVkIHRvIGltcGxlbWVudCBhbnkgcmVhZGFoZWFkIG91cnNlbHZlcyBpZiB3ZSB3YW50IGl0IHRvIGhhcHBlbiBhdAorICogYWxsLiAgUmVjb3ZlcnkgaXMgYmFzaWNhbGx5IG9uZSBsb25nIHNlcXVlbnRpYWwgcmVhZCwgc28gbWFrZSBzdXJlIHdlCisgKiBkbyB0aGUgSU8gaW4gcmVhc29uYWJseSBsYXJnZSBjaHVua3MuCisgKgorICogVGhpcyBpcyBub3Qgc28gY3JpdGljYWwgdGhhdCB3ZSBuZWVkIHRvIGJlIGVub3Jtb3VzbHkgY2xldmVyIGFib3V0CisgKiB0aGUgcmVhZGFoZWFkIHNpemUsIHRob3VnaC4gIDEyOEsgaXMgYSBwdXJlbHkgYXJiaXRyYXJ5LCBnb29kLWVub3VnaAorICogZml4ZWQgdmFsdWUuCisgKi8KKworI2RlZmluZSBNQVhCVUYgOAorc3RhdGljIGludCBkb19yZWFkYWhlYWQoam91cm5hbF90ICpqb3VybmFsLCB1bnNpZ25lZCBpbnQgc3RhcnQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgbWF4LCBuYnVmcywgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tucjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmc1tNQVhCVUZdOworCisJLyogRG8gdXAgdG8gMTI4SyBvZiByZWFkYWhlYWQgKi8KKwltYXggPSBzdGFydCArICgxMjggKiAxMDI0IC8gam91cm5hbC0+al9ibG9ja3NpemUpOworCWlmIChtYXggPiBqb3VybmFsLT5qX21heGxlbikKKwkJbWF4ID0gam91cm5hbC0+al9tYXhsZW47CisKKwkvKiBEbyB0aGUgcmVhZGFoZWFkIGl0c2VsZi4gIFdlJ2xsIHN1Ym1pdCBNQVhCVUYgYnVmZmVyX2hlYWRzIGF0CisJICogYSB0aW1lIHRvIHRoZSBibG9jayBkZXZpY2UgSU8gbGF5ZXIuICovCisKKwluYnVmcyA9IDA7CisKKwlmb3IgKG5leHQgPSBzdGFydDsgbmV4dCA8IG1heDsgbmV4dCsrKSB7CisJCWVyciA9IGpvdXJuYWxfYm1hcChqb3VybmFsLCBuZXh0LCAmYmxvY2tucik7CisKKwkJaWYgKGVycikgeworCQkJcHJpbnRrIChLRVJOX0VSUiAiSkJEOiBiYWQgYmxvY2sgYXQgb2Zmc2V0ICV1XG4iLAorCQkJCW5leHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBibG9ja25yLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CisJCWlmICghYmgpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSAmJiAhYnVmZmVyX2xvY2tlZChiaCkpIHsKKwkJCWJ1ZnNbbmJ1ZnMrK10gPSBiaDsKKwkJCWlmIChuYnVmcyA9PSBNQVhCVUYpIHsKKwkJCQlsbF9yd19ibG9jayhSRUFELCBuYnVmcywgYnVmcyk7CisJCQkJam91cm5hbF9icmVsc2VfYXJyYXkoYnVmcywgbmJ1ZnMpOworCQkJCW5idWZzID0gMDsKKwkJCX0KKwkJfSBlbHNlCisJCQlicmVsc2UoYmgpOworCX0KKworCWlmIChuYnVmcykKKwkJbGxfcndfYmxvY2soUkVBRCwgbmJ1ZnMsIGJ1ZnMpOworCWVyciA9IDA7CisKK2ZhaWxlZDoKKwlpZiAobmJ1ZnMpCisJCWpvdXJuYWxfYnJlbHNlX2FycmF5KGJ1ZnMsIG5idWZzKTsKKwlyZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKy8qCisgKiBSZWFkIGEgYmxvY2sgZnJvbSB0aGUgam91cm5hbAorICovCisKK3N0YXRpYyBpbnQganJlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwLCBqb3VybmFsX3QgKmpvdXJuYWwsCisJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrbnI7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCSpiaHAgPSBOVUxMOworCisJaWYgKG9mZnNldCA+PSBqb3VybmFsLT5qX21heGxlbikgeworCQlwcmludGsoS0VSTl9FUlIgIkpCRDogY29ycnVwdGVkIGpvdXJuYWwgc3VwZXJibG9ja1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWVyciA9IGpvdXJuYWxfYm1hcChqb3VybmFsLCBvZmZzZXQsICZibG9ja25yKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiSkJEOiBiYWQgYmxvY2sgYXQgb2Zmc2V0ICV1XG4iLAorCQkJb2Zmc2V0KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBibG9ja25yLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKKwkJLyogSWYgdGhpcyBpcyBhIGJyYW5kIG5ldyBidWZmZXIsIHN0YXJ0IHJlYWRhaGVhZC4KKyAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHdlIGFzc3VtZSB3ZSBhcmUgYWxyZWFkeSByZWFkaW5nIGl0LiAgKi8KKwkJaWYgKCFidWZmZXJfcmVxKGJoKSkKKwkJCWRvX3JlYWRhaGVhZChqb3VybmFsLCBvZmZzZXQpOworCQl3YWl0X29uX2J1ZmZlcihiaCk7CisJfQorCisJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIkpCRDogRmFpbGVkIHRvIHJlYWQgYmxvY2sgYXQgb2Zmc2V0ICV1XG4iLAorCQkJb2Zmc2V0KTsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJKmJocCA9IGJoOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGluLXVzZSB0YWdzIGluIGEgam91cm5hbCBkZXNjcmlwdG9yIGJsb2NrLgorICovCisKK3N0YXRpYyBpbnQgY291bnRfdGFncyhqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJY2hhciAqCQkJdGFncDsKKwlqb3VybmFsX2Jsb2NrX3RhZ190ICoJdGFnOworCWludAkJCW5yID0gMCwgc2l6ZSA9IGpvdXJuYWwtPmpfYmxvY2tzaXplOworCWludAkJCXRhZ19ieXRlcyA9IGpvdXJuYWxfdGFnX2J5dGVzKGpvdXJuYWwpOworCisJdGFncCA9ICZiaC0+Yl9kYXRhW3NpemVvZihqb3VybmFsX2hlYWRlcl90KV07CisKKwl3aGlsZSAoKHRhZ3AgLSBiaC0+Yl9kYXRhICsgdGFnX2J5dGVzKSA8PSBzaXplKSB7CisJCXRhZyA9IChqb3VybmFsX2Jsb2NrX3RhZ190ICopIHRhZ3A7CisKKwkJbnIrKzsKKwkJdGFncCArPSB0YWdfYnl0ZXM7CisJCWlmICghKHRhZy0+dF9mbGFncyAmIGNwdV90b19iZTMyKEpGU19GTEFHX1NBTUVfVVVJRCkpKQorCQkJdGFncCArPSAxNjsKKworCQlpZiAodGFnLT50X2ZsYWdzICYgY3B1X3RvX2JlMzIoSkZTX0ZMQUdfTEFTVF9UQUcpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG5yOworfQorCisKKy8qIE1ha2Ugc3VyZSB3ZSB3cmFwIGFyb3VuZCB0aGUgbG9nIGNvcnJlY3RseSEgKi8KKyNkZWZpbmUgd3JhcChqb3VybmFsLCB2YXIpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodmFyID49IChqb3VybmFsKS0+al9sYXN0KQkJCQkJXAorCQl2YXIgLT0gKChqb3VybmFsKS0+al9sYXN0IC0gKGpvdXJuYWwpLT5qX2ZpcnN0KTsJXAorfSB3aGlsZSAoMCkKKworLyoqCisgKiBqb3VybmFsX3JlY292ZXIgLSByZWNvdmVycyBhIG9uLWRpc2sgam91cm5hbAorICogQGpvdXJuYWw6IHRoZSBqb3VybmFsIHRvIHJlY292ZXIKKyAqCisgKiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IgcmVjb3ZlcmluZyB0aGUgbG9nIGNvbnRlbnRzIHdoZW4gbW91bnRpbmcgYQorICogam91cm5hbGVkIGRldmljZS4KKyAqCisgKiBSZWNvdmVyeSBpcyBkb25lIGluIHRocmVlIHBhc3Nlcy4gIEluIHRoZSBmaXJzdCBwYXNzLCB3ZSBsb29rIGZvciB0aGUKKyAqIGVuZCBvZiB0aGUgbG9nLiAgSW4gdGhlIHNlY29uZCwgd2UgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgcmV2b2tlCisgKiBibG9ja3MuICBJbiB0aGUgdGhpcmQgYW5kIGZpbmFsIHBhc3MsIHdlIHJlcGxheSBhbnkgdW4tcmV2b2tlZCBibG9ja3MKKyAqIGluIHRoZSBsb2cuCisgKi8KK2ludCBqb3VybmFsX3JlY292ZXIoam91cm5hbF90ICpqb3VybmFsKQoreworCWludAkJCWVycjsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdCAqCXNiOworCisJc3RydWN0IHJlY292ZXJ5X2luZm8JaW5mbzsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKKworCS8qCisJICogVGhlIGpvdXJuYWwgc3VwZXJibG9jaydzIHNfc3RhcnQgZmllbGQgKHRoZSBjdXJyZW50IGxvZyBoZWFkKQorCSAqIGlzIGFsd2F5cyB6ZXJvIGlmLCBhbmQgb25seSBpZiwgdGhlIGpvdXJuYWwgd2FzIGNsZWFubHkKKwkgKiB1bm1vdW50ZWQuCisJICovCisKKwlpZiAoIXNiLT5zX3N0YXJ0KSB7CisJCWpiZF9kZWJ1ZygxLCAiTm8gcmVjb3ZlcnkgcmVxdWlyZWQsIGxhc3QgdHJhbnNhY3Rpb24gJWRcbiIsCisJCQkgIGJlMzJfdG9fY3B1KHNiLT5zX3NlcXVlbmNlKSk7CisJCWpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UgPSBiZTMyX3RvX2NwdShzYi0+c19zZXF1ZW5jZSkgKyAxOworCQlyZXR1cm4gMDsKKwl9CisKKwllcnIgPSBkb19vbmVfcGFzcyhqb3VybmFsLCAmaW5mbywgUEFTU19TQ0FOKTsKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfUkVWT0tFKTsKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfUkVQTEFZKTsKKworCWpiZF9kZWJ1ZygxLCAiSkJEOiByZWNvdmVyeSwgZXhpdCBzdGF0dXMgJWQsICIKKwkJICAicmVjb3ZlcmVkIHRyYW5zYWN0aW9ucyAldSB0byAldVxuIiwKKwkJICBlcnIsIGluZm8uc3RhcnRfdHJhbnNhY3Rpb24sIGluZm8uZW5kX3RyYW5zYWN0aW9uKTsKKwlqYmRfZGVidWcoMSwgIkpCRDogUmVwbGF5ZWQgJWQgYW5kIHJldm9rZWQgJWQvJWQgYmxvY2tzXG4iLAorCQkgIGluZm8ubnJfcmVwbGF5cywgaW5mby5ucl9yZXZva2VfaGl0cywgaW5mby5ucl9yZXZva2VzKTsKKworCS8qIFJlc3RhcnQgdGhlIGxvZyBhdCB0aGUgbmV4dCB0cmFuc2FjdGlvbiBJRCwgdGh1cyBpbnZhbGlkYXRpbmcKKwkgKiBhbnkgZXhpc3RpbmcgY29tbWl0IHJlY29yZHMgaW4gdGhlIGxvZy4gKi8KKwlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gKytpbmZvLmVuZF90cmFuc2FjdGlvbjsKKworCWpvdXJuYWxfY2xlYXJfcmV2b2tlKGpvdXJuYWwpOworCXN5bmNfYmxvY2tkZXYoam91cm5hbC0+al9mc19kZXYpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogam91cm5hbF9za2lwX3JlY292ZXJ5IC0gU3RhcnQgam91cm5hbCBhbmQgd2lwZSBleGl0aW5nIHJlY29yZHMKKyAqIEBqb3VybmFsOiBqb3VybmFsIHRvIHN0YXJ0dXAKKyAqCisgKiBMb2NhdGUgYW55IHZhbGlkIHJlY292ZXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGpvdXJuYWwgYW5kIHNldCB1cCB0aGUKKyAqIGpvdXJuYWwgc3RydWN0dXJlcyBpbiBtZW1vcnkgdG8gaWdub3JlIGl0IChwcmVzdW1hYmx5IGJlY2F1c2UgdGhlCisgKiBjYWxsZXIgaGFzIGV2aWRlbmNlIHRoYXQgaXQgaXMgb3V0IG9mIGRhdGUpLgorICogVGhpcyBmdW5jdGlvbiBkb2VzJ250IGFwcGVhciB0byBiZSBleG9ydGVkLi4KKyAqCisgKiBXZSBwZXJmb3JtIG9uZSBwYXNzIG92ZXIgdGhlIGpvdXJuYWwgdG8gYWxsb3cgdXMgdG8gdGVsbCB0aGUgdXNlciBob3cKKyAqIG11Y2ggcmVjb3ZlcnkgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXJhc2VkLCBhbmQgdG8gbGV0IHVzIGluaXRpYWxpc2UKKyAqIHRoZSBqb3VybmFsIHRyYW5zYWN0aW9uIHNlcXVlbmNlIG51bWJlcnMgdG8gdGhlIG5leHQgdW51c2VkIElELgorICovCitpbnQgam91cm5hbF9za2lwX3JlY292ZXJ5KGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlpbnQJCQllcnI7CisJc3RydWN0IHJlY292ZXJ5X2luZm8JaW5mbzsKKworCW1lbXNldCAoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisKKwllcnIgPSBkb19vbmVfcGFzcyhqb3VybmFsLCAmaW5mbywgUEFTU19TQ0FOKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJKQkQ6IGVycm9yICVkIHNjYW5uaW5nIGpvdXJuYWxcbiIsIGVycik7CisJCSsram91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19KQkRfREVCVUcKKwkJam91cm5hbF9zdXBlcmJsb2NrX3QgKnNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOworCisJCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLSBiZTMyX3RvX2NwdShzYi0+c19zZXF1ZW5jZSk7CisjZW5kaWYKKwkJamJkX2RlYnVnKDEsCisJCQkgICJKQkQ6IGlnbm9yaW5nICVkIHRyYW5zYWN0aW9uJXMgZnJvbSB0aGUgam91cm5hbC5cbiIsCisJCQkgIGRyb3BwZWQsIChkcm9wcGVkID09IDEpID8gIiIgOiAicyIpOworCQlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gKytpbmZvLmVuZF90cmFuc2FjdGlvbjsKKwl9CisKKwlqb3VybmFsLT5qX3RhaWwgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHJlYWRfdGFnX2Jsb2NrKGludCB0YWdfYnl0ZXMsIGpvdXJuYWxfYmxvY2tfdGFnX3QgKnRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2sgPSBiZTMyX3RvX2NwdSh0YWctPnRfYmxvY2tucik7CisJaWYgKHRhZ19ieXRlcyA+IEpCRF9UQUdfU0laRTMyKQorCQlibG9jayB8PSAoX191NjQpYmUzMl90b19jcHUodGFnLT50X2Jsb2NrbnJfaGlnaCkgPDwgMzI7CisJcmV0dXJuIGJsb2NrOworfQorCisvKgorICogY2FsY19jaGtzdW1zIGNhbGN1bGF0ZXMgdGhlIGNoZWNrc3VtcyBmb3IgdGhlIGJsb2NrcyBkZXNjcmliZWQgaW4gdGhlCisgKiBkZXNjcmlwdG9yIGJsb2NrLgorICovCitzdGF0aWMgaW50IGNhbGNfY2hrc3Vtcyhqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQl1bnNpZ25lZCBsb25nIGxvbmcgKm5leHRfbG9nX2Jsb2NrLCBfX3UzMiAqY3JjMzJfc3VtKQoreworCWludCBpLCBudW1fYmxrcywgZXJyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpb19ibG9jazsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9iaDsKKworCW51bV9ibGtzID0gY291bnRfdGFncyhqb3VybmFsLCBiaCk7CisJLyogQ2FsY3VsYXRlIGNoZWNrc3VtIG9mIHRoZSBkZXNjcmlwdG9yIGJsb2NrLiAqLworCSpjcmMzMl9zdW0gPSBjcmMzMl9iZSgqY3JjMzJfc3VtLCAodm9pZCAqKWJoLT5iX2RhdGEsIGJoLT5iX3NpemUpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ibGtzOyBpKyspIHsKKwkJaW9fYmxvY2sgPSAoKm5leHRfbG9nX2Jsb2NrKSsrOworCQl3cmFwKGpvdXJuYWwsICpuZXh0X2xvZ19ibG9jayk7CisJCWVyciA9IGpyZWFkKCZvYmgsIGpvdXJuYWwsIGlvX2Jsb2NrKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJKQkQ6IElPIGVycm9yICVkIHJlY292ZXJpbmcgYmxvY2sgIgorCQkJCSIlbGx1IGluIGxvZ1xuIiwgZXJyLCBpb19ibG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCSpjcmMzMl9zdW0gPSBjcmMzMl9iZSgqY3JjMzJfc3VtLCAodm9pZCAqKW9iaC0+Yl9kYXRhLAorCQkJCSAgICAgb2JoLT5iX3NpemUpOworCQl9CisJCWJyZWxzZShvYmgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19vbmVfcGFzcyhqb3VybmFsX3QgKmpvdXJuYWwsCisJCQlzdHJ1Y3QgcmVjb3ZlcnlfaW5mbyAqaW5mbywgZW51bSBwYXNzdHlwZSBwYXNzKQoreworCXVuc2lnbmVkIGludAkJZmlyc3RfY29tbWl0X0lELCBuZXh0X2NvbW1pdF9JRDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJbmV4dF9sb2dfYmxvY2s7CisJaW50CQkJZXJyLCBzdWNjZXNzID0gMDsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdCAqCXNiOworCWpvdXJuYWxfaGVhZGVyX3QgKgl0bXA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoJYmg7CisJdW5zaWduZWQgaW50CQlzZXF1ZW5jZTsKKwlpbnQJCQlibG9ja3R5cGU7CisJaW50CQkJdGFnX2J5dGVzID0gam91cm5hbF90YWdfYnl0ZXMoam91cm5hbCk7CisJX191MzIJCQljcmMzMl9zdW0gPSB+MDsgLyogVHJhbnNhY3Rpb25hbCBDaGVja3N1bXMgKi8KKworCS8qCisJICogRmlyc3QgdGhpbmcgaXMgdG8gZXN0YWJsaXNoIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgaW4gdGhlIGxvZworCSAqIChpbiB0ZXJtcyBvZiB0cmFuc2FjdGlvbiBJRHMpLCBhbmQgd2hlcmUgKGluIHRlcm1zIG9mIGxvZworCSAqIGJsb2NrIG9mZnNldHMpOiBxdWVyeSB0aGUgc3VwZXJibG9jay4KKwkgKi8KKworCXNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOworCW5leHRfY29tbWl0X0lEID0gYmUzMl90b19jcHUoc2ItPnNfc2VxdWVuY2UpOworCW5leHRfbG9nX2Jsb2NrID0gYmUzMl90b19jcHUoc2ItPnNfc3RhcnQpOworCisJZmlyc3RfY29tbWl0X0lEID0gbmV4dF9jb21taXRfSUQ7CisJaWYgKHBhc3MgPT0gUEFTU19TQ0FOKQorCQlpbmZvLT5zdGFydF90cmFuc2FjdGlvbiA9IGZpcnN0X2NvbW1pdF9JRDsKKworCWpiZF9kZWJ1ZygxLCAiU3RhcnRpbmcgcmVjb3ZlcnkgcGFzcyAlZFxuIiwgcGFzcyk7CisKKwkvKgorCSAqIE5vdyB3ZSB3YWxrIHRocm91Z2ggdGhlIGxvZywgdHJhbnNhY3Rpb24gYnkgdHJhbnNhY3Rpb24sCisJICogbWFraW5nIHN1cmUgdGhhdCBlYWNoIHRyYW5zYWN0aW9uIGhhcyBhIGNvbW1pdCBibG9jayBpbiB0aGUKKwkgKiBleHBlY3RlZCBwbGFjZS4gIEVhY2ggY29tcGxldGUgdHJhbnNhY3Rpb24gZ2V0cyByZXBsYXllZCBiYWNrCisJICogaW50byB0aGUgbWFpbiBmaWxlc3lzdGVtLgorCSAqLworCisJd2hpbGUgKDEpIHsKKwkJaW50CQkJZmxhZ3M7CisJCWNoYXIgKgkJCXRhZ3A7CisJCWpvdXJuYWxfYmxvY2tfdGFnX3QgKgl0YWc7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqCW9iaDsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICoJbmJoOworCisJCWNvbmRfcmVzY2hlZCgpOworCisJCS8qIElmIHdlIGFscmVhZHkga25vdyB3aGVyZSB0byBzdG9wIHRoZSBsb2cgdHJhdmVyc2FsLAorCQkgKiBjaGVjayByaWdodCBub3cgdGhhdCB3ZSBoYXZlbid0IGdvbmUgcGFzdCB0aGUgZW5kIG9mCisJCSAqIHRoZSBsb2cuICovCisKKwkJaWYgKHBhc3MgIT0gUEFTU19TQ0FOKQorCQkJaWYgKHRpZF9nZXEobmV4dF9jb21taXRfSUQsIGluZm8tPmVuZF90cmFuc2FjdGlvbikpCisJCQkJYnJlYWs7CisKKwkJamJkX2RlYnVnKDIsICJTY2FubmluZyBmb3Igc2VxdWVuY2UgSUQgJXUgYXQgJWxsdS8lbHVcbiIsCisJCQkgIG5leHRfY29tbWl0X0lELCBuZXh0X2xvZ19ibG9jaywgam91cm5hbC0+al9sYXN0KTsKKworCQkvKiBTa2lwIG92ZXIgZWFjaCBjaHVuayBvZiB0aGUgdHJhbnNhY3Rpb24gbG9va2luZworCQkgKiBlaXRoZXIgdGhlIG5leHQgZGVzY3JpcHRvciBibG9jayBvciB0aGUgZmluYWwgY29tbWl0CisJCSAqIHJlY29yZC4gKi8KKworCQlqYmRfZGVidWcoMywgIkpCRDogY2hlY2tpbmcgYmxvY2sgJWxsdVxuIiwgbmV4dF9sb2dfYmxvY2spOworCQllcnIgPSBqcmVhZCgmYmgsIGpvdXJuYWwsIG5leHRfbG9nX2Jsb2NrKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbGVkOworCisJCW5leHRfbG9nX2Jsb2NrKys7CisJCXdyYXAoam91cm5hbCwgbmV4dF9sb2dfYmxvY2spOworCisJCS8qIFdoYXQga2luZCBvZiBidWZmZXIgaXMgaXQ/CisJCSAqCisJCSAqIElmIGl0IGlzIGEgZGVzY3JpcHRvciBibG9jaywgY2hlY2sgdGhhdCBpdCBoYXMgdGhlCisJCSAqIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlci4gIE90aGVyd2lzZSwgd2UncmUgYWxsIGRvbmUKKwkJICogaGVyZS4gKi8KKworCQl0bXAgPSAoam91cm5hbF9oZWFkZXJfdCAqKWJoLT5iX2RhdGE7CisKKwkJaWYgKHRtcC0+aF9tYWdpYyAhPSBjcHVfdG9fYmUzMihKRlNfTUFHSUNfTlVNQkVSKSkgeworCQkJYnJlbHNlKGJoKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmxvY2t0eXBlID0gYmUzMl90b19jcHUodG1wLT5oX2Jsb2NrdHlwZSk7CisJCXNlcXVlbmNlID0gYmUzMl90b19jcHUodG1wLT5oX3NlcXVlbmNlKTsKKwkJamJkX2RlYnVnKDMsICJGb3VuZCBtYWdpYyAlZCwgc2VxdWVuY2UgJWRcbiIsCisJCQkgIGJsb2NrdHlwZSwgc2VxdWVuY2UpOworCisJCWlmIChzZXF1ZW5jZSAhPSBuZXh0X2NvbW1pdF9JRCkgeworCQkJYnJlbHNlKGJoKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogT0ssIHdlIGhhdmUgYSB2YWxpZCBkZXNjcmlwdG9yIGJsb2NrIHdoaWNoIG1hdGNoZXMKKwkJICogYWxsIG9mIHRoZSBzZXF1ZW5jZSBudW1iZXIgY2hlY2tzLiAgV2hhdCBhcmUgd2UgZ29pbmcKKwkJICogdG8gZG8gd2l0aCBpdD8gIFRoYXQgZGVwZW5kcyBvbiB0aGUgcGFzcy4uLiAqLworCisJCXN3aXRjaChibG9ja3R5cGUpIHsKKwkJY2FzZSBKRlNfREVTQ1JJUFRPUl9CTE9DSzoKKwkJCS8qIElmIGl0IGlzIGEgdmFsaWQgZGVzY3JpcHRvciBibG9jaywgcmVwbGF5IGl0CisJCQkgKiBpbiBwYXNzIFJFUExBWTsgaWYgam91cm5hbF9jaGVja3N1bXMgZW5hYmxlZCwgdGhlbgorCQkJICogY2FsY3VsYXRlIGNoZWNrc3VtcyBpbiBQQVNTX1NDQU4sIG90aGVyd2lzZSwKKwkJCSAqIGp1c3Qgc2tpcCBvdmVyIHRoZSBibG9ja3MgaXQgZGVzY3JpYmVzLiAqLworCQkJaWYgKHBhc3MgIT0gUEFTU19SRVBMQVkpIHsKKwkJCQlpZiAocGFzcyA9PSBQQVNTX1NDQU4gJiYKKwkJCQkgICAgSkZTX0hBU19DT01QQVRfRkVBVFVSRShqb3VybmFsLAorCQkJCQkgICAgSkZTX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNKSAmJgorCQkJCSAgICAhaW5mby0+ZW5kX3RyYW5zYWN0aW9uKSB7CisJCQkJCWlmIChjYWxjX2Noa3N1bXMoam91cm5hbCwgYmgsCisJCQkJCQkJJm5leHRfbG9nX2Jsb2NrLAorCQkJCQkJCSZjcmMzMl9zdW0pKSB7CisJCQkJCQlicmVsc2UoYmgpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJYnJlbHNlKGJoKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCW5leHRfbG9nX2Jsb2NrICs9IGNvdW50X3RhZ3Moam91cm5hbCwgYmgpOworCQkJCXdyYXAoam91cm5hbCwgbmV4dF9sb2dfYmxvY2spOworCQkJCWJyZWxzZShiaCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEEgZGVzY3JpcHRvciBibG9jazogd2UgY2FuIG5vdyB3cml0ZSBhbGwgb2YKKwkJCSAqIHRoZSBkYXRhIGJsb2Nrcy4gIFlheSwgdXNlZnVsIHdvcmsgaXMgZmluYWxseQorCQkJICogZ2V0dGluZyBkb25lIGhlcmUhICovCisKKwkJCXRhZ3AgPSAmYmgtPmJfZGF0YVtzaXplb2Yoam91cm5hbF9oZWFkZXJfdCldOworCQkJd2hpbGUgKCh0YWdwIC0gYmgtPmJfZGF0YSArIHRhZ19ieXRlcykKKwkJCSAgICAgICA8PSBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSkgeworCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBpb19ibG9jazsKKworCQkJCXRhZyA9IChqb3VybmFsX2Jsb2NrX3RhZ190ICopIHRhZ3A7CisJCQkJZmxhZ3MgPSBiZTMyX3RvX2NwdSh0YWctPnRfZmxhZ3MpOworCisJCQkJaW9fYmxvY2sgPSBuZXh0X2xvZ19ibG9jaysrOworCQkJCXdyYXAoam91cm5hbCwgbmV4dF9sb2dfYmxvY2spOworCQkJCWVyciA9IGpyZWFkKCZvYmgsIGpvdXJuYWwsIGlvX2Jsb2NrKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCS8qIFJlY292ZXIgd2hhdCB3ZSBjYW4sIGJ1dAorCQkJCQkgKiByZXBvcnQgZmFpbHVyZSBhdCB0aGUgZW5kLiAqLworCQkJCQlzdWNjZXNzID0gZXJyOworCQkJCQlwcmludGsgKEtFUk5fRVJSCisJCQkJCQkiSkJEOiBJTyBlcnJvciAlZCByZWNvdmVyaW5nICIKKwkJCQkJCSJibG9jayAlbGx1IGluIGxvZ1xuIiwKKwkJCQkJCWVyciwgaW9fYmxvY2spOworCQkJCX0gZWxzZSB7CisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja25yOworCisJCQkJCUpfQVNTRVJUKG9iaCAhPSBOVUxMKTsKKwkJCQkJYmxvY2tuciA9IHJlYWRfdGFnX2Jsb2NrKHRhZ19ieXRlcywKKwkJCQkJCQkJIHRhZyk7CisKKwkJCQkJLyogSWYgdGhlIGJsb2NrIGhhcyBiZWVuCisJCQkJCSAqIHJldm9rZWQsIHRoZW4gd2UncmUgYWxsIGRvbmUKKwkJCQkJICogaGVyZS4gKi8KKwkJCQkJaWYgKGpvdXJuYWxfdGVzdF9yZXZva2UKKwkJCQkJICAgIChqb3VybmFsLCBibG9ja25yLAorCQkJCQkgICAgIG5leHRfY29tbWl0X0lEKSkgeworCQkJCQkJYnJlbHNlKG9iaCk7CisJCQkJCQkrK2luZm8tPm5yX3Jldm9rZV9oaXRzOworCQkJCQkJZ290byBza2lwX3dyaXRlOworCQkJCQl9CisKKwkJCQkJLyogRmluZCBhIGJ1ZmZlciBmb3IgdGhlIG5ldworCQkJCQkgKiBkYXRhIGJlaW5nIHJlc3RvcmVkICovCisJCQkJCW5iaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZnNfZGV2LAorCQkJCQkJCWJsb2NrbnIsCisJCQkJCQkJam91cm5hbC0+al9ibG9ja3NpemUpOworCQkJCQlpZiAobmJoID09IE5VTEwpIHsKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgICAgICJKQkQ6IE91dCBvZiBtZW1vcnkgIgorCQkJCQkJICAgICAgICJkdXJpbmcgcmVjb3ZlcnkuXG4iKTsKKwkJCQkJCWVyciA9IC1FTk9NRU07CisJCQkJCQlicmVsc2UoYmgpOworCQkJCQkJYnJlbHNlKG9iaCk7CisJCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQkJfQorCisJCQkJCWxvY2tfYnVmZmVyKG5iaCk7CisJCQkJCW1lbWNweShuYmgtPmJfZGF0YSwgb2JoLT5iX2RhdGEsCisJCQkJCQkJam91cm5hbC0+al9ibG9ja3NpemUpOworCQkJCQlpZiAoZmxhZ3MgJiBKRlNfRkxBR19FU0NBUEUpIHsKKwkJCQkJCWpvdXJuYWxfaGVhZGVyX3QgKmhlYWRlcjsKKworCQkJCQkJaGVhZGVyID0gKGpvdXJuYWxfaGVhZGVyX3QgKikgJm5iaC0+Yl9kYXRhWzBdOworCQkJCQkJaGVhZGVyLT5oX21hZ2ljID0gY3B1X3RvX2JlMzIoSkZTX01BR0lDX05VTUJFUik7CisJCQkJCX0KKworCQkJCQlCVUZGRVJfVFJBQ0UobmJoLCAibWFya2luZyBkaXJ0eSIpOworCQkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKG5iaCk7CisJCQkJCW1hcmtfYnVmZmVyX2RpcnR5KG5iaCk7CisJCQkJCUJVRkZFUl9UUkFDRShuYmgsICJtYXJraW5nIHVwdG9kYXRlIik7CisJCQkJCSsraW5mby0+bnJfcmVwbGF5czsKKwkJCQkJLyogbGxfcndfYmxvY2soV1JJVEUsIDEsICZuYmgpOyAqLworCQkJCQl1bmxvY2tfYnVmZmVyKG5iaCk7CisJCQkJCWJyZWxzZShvYmgpOworCQkJCQlicmVsc2UobmJoKTsKKwkJCQl9CisKKwkJCXNraXBfd3JpdGU6CisJCQkJdGFncCArPSB0YWdfYnl0ZXM7CisJCQkJaWYgKCEoZmxhZ3MgJiBKRlNfRkxBR19TQU1FX1VVSUQpKQorCQkJCQl0YWdwICs9IDE2OworCisJCQkJaWYgKGZsYWdzICYgSkZTX0ZMQUdfTEFTVF9UQUcpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlicmVsc2UoYmgpOworCQkJY29udGludWU7CisKKwkJY2FzZSBKRlNfQ09NTUlUX0JMT0NLOgorCQkJamJkX2RlYnVnKDMsICJDb21taXQgYmxvY2sgZm9yICMldSBmb3VuZFxuIiwKKwkJCQkgIG5leHRfY29tbWl0X0lEKTsKKwkJCS8qICAgICBIb3cgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVycnVwdGVkIGNvbW1pdAorCQkJICogICAgICAgICAgICAgICBhbmQgam91cm5hbCBjb3JydXB0aW9uID8KKwkJCSAqCisJCQkgKiB7bnRoIHRyYW5zYWN0aW9ufQorCQkJICogICAgICAgIENoZWNrc3VtIFZlcmlmaWNhdGlvbiBGYWlsZWQKKwkJCSAqCQkJIHwKKwkJCSAqCQkgX19fX19fX19fX19fX19fX19fX18KKwkJCSAqCQl8CQkgICAgIHwKKwkJCSAqIAlhc3luY19jb21taXQgICAgICAgICAgICAgc3luY19jb21taXQKKwkJCSAqICAgICAJCXwgICAgICAgICAgICAgICAgICAgIHwKKwkJCSAqCQl8IEdPIFRPIE5FWFQgICAgIkpvdXJuYWwgQ29ycnVwdGlvbiIKKwkJCSAqCQl8IFRSQU5TQUNUSU9OCisJCQkgKgkJfAorCQkJICogeyhuKzEpdGggdHJhbnNhbmN0aW9ufQorCQkJICoJCXwKKwkJCSAqIAkgX19fX19fX3xfX19fX19fX19fX19fXworCQkJICogCXwJIAkgICAgICB8CisJCQkgKiBDb21taXQgYmxvY2sgZm91bmQJQ29tbWl0IGJsb2NrIG5vdCBmb3VuZAorCQkJICogICAgICB8CQkgICAgICB8CisJCQkgKiAiSm91cm5hbCBDb3JydXB0aW9uIiAgICAgICB8CisJCQkgKgkJIF9fX19fX19fX19fX198X19fX19fX19fCisJCQkgKiAgICAgCQl8CSAgICAgICAgICAgCXwKKwkJCSAqCW50aCB0cmFucyBjb3JydXB0CU9SICAgbnRoIHRyYW5zCisJCQkgKglhbmQgKG4rMSl0aCBpbnRlcnJ1cHRlZCAgICAgaW50ZXJydXB0ZWQKKwkJCSAqCWJlZm9yZSBjb21taXQgYmxvY2sKKwkJCSAqICAgICAgY291bGQgcmVhY2ggdGhlIGRpc2suCisJCQkgKgkoQ2Fubm90IGZpbmQgdGhlIGRpZmZlcmVuY2UgaW4gYWJvdmUKKwkJCSAqCSBtZW50aW9uZWQgY29uZGl0aW9ucy4gSGVuY2UgYXNzdW1lCisJCQkgKgkgIkludGVycnVwdGVkIENvbW1pdCIuKQorCQkJICovCisKKwkJCS8qIEZvdW5kIGFuIGV4cGVjdGVkIGNvbW1pdCBibG9jazogaWYgY2hlY2tzdW1zCisJCQkgKiBhcmUgcHJlc2VudCB2ZXJpZnkgdGhlbSBpbiBQQVNTX1NDQU47IGVsc2Ugbm90CisJCQkgKiBtdWNoIHRvIGRvIG90aGVyIHRoYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzZXF1ZW5jZQorCQkJICogbnVtYmVyLiAqLworCQkJaWYgKHBhc3MgPT0gUEFTU19TQ0FOICYmCisJCQkgICAgSkZTX0hBU19DT01QQVRfRkVBVFVSRShqb3VybmFsLAorCQkJCSAgICBKRlNfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0pKSB7CisJCQkJaW50IGNoa3N1bV9lcnIsIGNoa3N1bV9zZWVuOworCQkJCXN0cnVjdCBjb21taXRfaGVhZGVyICpjYmggPQorCQkJCQkoc3RydWN0IGNvbW1pdF9oZWFkZXIgKiliaC0+Yl9kYXRhOworCQkJCXVuc2lnbmVkIGZvdW5kX2Noa3N1bSA9CisJCQkJCWJlMzJfdG9fY3B1KGNiaC0+aF9jaGtzdW1bMF0pOworCisJCQkJY2hrc3VtX2VyciA9IGNoa3N1bV9zZWVuID0gMDsKKworCQkJCWpiZF9kZWJ1ZygzLCAiQ2hlY2tzdW1zICV4ICV4XG4iLAorCQkJCQkgIGNyYzMyX3N1bSwgZm91bmRfY2hrc3VtKTsKKwkJCQlpZiAoaW5mby0+ZW5kX3RyYW5zYWN0aW9uKSB7CisJCQkJCWpvdXJuYWwtPmpfZmFpbGVkX2NvbW1pdCA9CisJCQkJCQlpbmZvLT5lbmRfdHJhbnNhY3Rpb247CisJCQkJCWJyZWxzZShiaCk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChjcmMzMl9zdW0gPT0gZm91bmRfY2hrc3VtICYmCisJCQkJICAgIGNiaC0+aF9jaGtzdW1fdHlwZSA9PSBKQkQyX0NSQzMyX0NIS1NVTSAmJgorCQkJCSAgICBjYmgtPmhfY2hrc3VtX3NpemUgPT0KKwkJCQkJCUpCRDJfQ1JDMzJfQ0hLU1VNX1NJWkUpCisJCQkJICAgICAgIGNoa3N1bV9zZWVuID0gMTsKKwkJCQllbHNlIGlmICghKGNiaC0+aF9jaGtzdW1fdHlwZSA9PSAwICYmCisJCQkJCSAgICAgY2JoLT5oX2Noa3N1bV9zaXplID09IDAgJiYKKwkJCQkJICAgICBmb3VuZF9jaGtzdW0gPT0gMCAmJgorCQkJCQkgICAgICFjaGtzdW1fc2VlbikpCisJCQkJLyoKKwkJCQkgKiBJZiBmcyBpcyBtb3VudGVkIHVzaW5nIGFuIG9sZCBrZXJuZWwgYW5kIHRoZW4KKwkJCQkgKiBrZXJuZWwgd2l0aCBqb3VybmFsX2Noa3N1bSBpcyB1c2VkIHRoZW4gd2UKKwkJCQkgKiBnZXQgYSBzaXR1YXRpb24gd2hlcmUgdGhlIGpvdXJuYWwgZmxhZyBoYXMKKwkJCQkgKiBjaGVja3N1bSBmbGFnIHNldCBidXQgY2hlY2tzdW1zIGFyZSBub3QKKwkJCQkgKiBwcmVzZW50IGkuZSBjaGtzdW0gPSAwLCBpbiB0aGUgaW5kaXZpZHVhbAorCQkJCSAqIGNvbW1pdCBibG9ja3MuCisJCQkJICogSGVuY2UgdG8gYXZvaWQgY2hlY2tzdW0gZmFpbHVyZXMsIGluIHRoaXMKKwkJCQkgKiBzaXR1YXRpb24sIHRoaXMgZXh0cmEgY2hlY2sgaXMgYWRkZWQuCisJCQkJICovCisJCQkJCQljaGtzdW1fZXJyID0gMTsKKworCQkJCWlmIChjaGtzdW1fZXJyKSB7CisJCQkJCWluZm8tPmVuZF90cmFuc2FjdGlvbiA9IG5leHRfY29tbWl0X0lEOworCQkJCQlqYmRfZGVidWcoMSwgIkNoZWNrc3VtX2VyciAleCAleFxuIiwKKwkJCQkJCSAgY3JjMzJfc3VtLCBmb3VuZF9jaGtzdW0pOworCQkJCQlpZiAoIUpGU19IQVNfSU5DT01QQVRfRkVBVFVSRShqb3VybmFsLAorCQkJCQkgICBKRlNfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpKXsKKwkJCQkJCWpvdXJuYWwtPmpfZmFpbGVkX2NvbW1pdCA9CisJCQkJCQkJbmV4dF9jb21taXRfSUQ7CisJCQkJCQlicmVsc2UoYmgpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJY3JjMzJfc3VtID0gfjA7CisJCQl9CisJCQlicmVsc2UoYmgpOworCQkJbmV4dF9jb21taXRfSUQrKzsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgSkZTX1JFVk9LRV9CTE9DSzoKKwkJCS8qIElmIHdlIGFyZW4ndCBpbiB0aGUgUkVWT0tFIHBhc3MsIHRoZW4gd2UgY2FuCisJCQkgKiBqdXN0IHNraXAgb3ZlciB0aGlzIGJsb2NrLiAqLworCQkJaWYgKHBhc3MgIT0gUEFTU19SRVZPS0UpIHsKKwkJCQlicmVsc2UoYmgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQllcnIgPSBzY2FuX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWwsIGJoLAorCQkJCQkJICBuZXh0X2NvbW1pdF9JRCwgaW5mbyk7CisJCQlicmVsc2UoYmgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCWNvbnRpbnVlOworCisJCWRlZmF1bHQ6CisJCQlqYmRfZGVidWcoMywgIlVucmVjb2duaXNlZCBtYWdpYyAlZCwgZW5kIG9mIHNjYW4uXG4iLAorCQkJCSAgYmxvY2t0eXBlKTsKKwkJCWJyZWxzZShiaCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKyBkb25lOgorCS8qCisJICogV2UgYnJva2Ugb3V0IG9mIHRoZSBsb2cgc2NhbiBsb29wOiBlaXRoZXIgd2UgY2FtZSB0byB0aGUKKwkgKiBrbm93biBlbmQgb2YgdGhlIGxvZyBvciB3ZSBmb3VuZCBhbiB1bmV4cGVjdGVkIGJsb2NrIGluIHRoZQorCSAqIGxvZy4gIElmIHRoZSBsYXR0ZXIgaGFwcGVuZWQsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSAiY3VycmVudCIKKwkgKiB0cmFuc2FjdGlvbiBtYXJrcyB0aGUgZW5kIG9mIHRoZSB2YWxpZCBsb2cuCisJICovCisKKwlpZiAocGFzcyA9PSBQQVNTX1NDQU4pIHsKKwkJaWYgKCFpbmZvLT5lbmRfdHJhbnNhY3Rpb24pCisJCQlpbmZvLT5lbmRfdHJhbnNhY3Rpb24gPSBuZXh0X2NvbW1pdF9JRDsKKwl9IGVsc2UgeworCQkvKiBJdCdzIHJlYWxseSBiYWQgbmV3cyBpZiBkaWZmZXJlbnQgcGFzc2VzIGVuZCB1cCBhdAorCQkgKiBkaWZmZXJlbnQgcGxhY2VzIChidXQgcG9zc2libGUgZHVlIHRvIElPIGVycm9ycykuICovCisJCWlmIChpbmZvLT5lbmRfdHJhbnNhY3Rpb24gIT0gbmV4dF9jb21taXRfSUQpIHsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkpCRDogcmVjb3ZlcnkgcGFzcyAlZCBlbmRlZCBhdCAiCisJCQkJInRyYW5zYWN0aW9uICV1LCBleHBlY3RlZCAldVxuIiwKKwkJCQlwYXNzLCBuZXh0X2NvbW1pdF9JRCwgaW5mby0+ZW5kX3RyYW5zYWN0aW9uKTsKKwkJCWlmICghc3VjY2VzcykKKwkJCQlzdWNjZXNzID0gLUVJTzsKKwkJfQorCX0KKworCXJldHVybiBzdWNjZXNzOworCisgZmFpbGVkOgorCXJldHVybiBlcnI7Cit9CisKKworLyogU2NhbiBhIHJldm9rZSByZWNvcmQsIG1hcmtpbmcgYWxsIGJsb2NrcyBtZW50aW9uZWQgYXMgcmV2b2tlZC4gKi8KKworc3RhdGljIGludCBzY2FuX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgICAgICB0aWRfdCBzZXF1ZW5jZSwgc3RydWN0IHJlY292ZXJ5X2luZm8gKmluZm8pCit7CisJam91cm5hbF9yZXZva2VfaGVhZGVyX3QgKmhlYWRlcjsKKwlpbnQgb2Zmc2V0LCBtYXg7CisJaW50IHJlY29yZF9sZW4gPSA0OworCisJaGVhZGVyID0gKGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90ICopIGJoLT5iX2RhdGE7CisJb2Zmc2V0ID0gc2l6ZW9mKGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90KTsKKwltYXggPSBiZTMyX3RvX2NwdShoZWFkZXItPnJfY291bnQpOworCisJaWYgKEpGU19IQVNfSU5DT01QQVRfRkVBVFVSRShqb3VybmFsLCBKRlNfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkpCisJCXJlY29yZF9sZW4gPSA4OworCisJd2hpbGUgKG9mZnNldCA8IG1heCkgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tucjsKKwkJaW50IGVycjsKKworCQlpZiAocmVjb3JkX2xlbiA9PSA0KSB7CisJCQlfX2JlMzIgYjsKKwkJCW1lbWNweSgmYiwgYmgtPmJfZGF0YSArIG9mZnNldCwgc2l6ZW9mKF9fYmUzMikpOworCQkJYmxvY2tuciA9IGV4dDJmc19iZTMyX3RvX2NwdShiKTsKKwkJfSBlbHNlIHsKKwkJCV9fYmU2NCBiOworCQkJbWVtY3B5KCZiLCBiaC0+Yl9kYXRhICsgb2Zmc2V0LCBzaXplb2YoX19iZTY0KSk7CisJCQlibG9ja25yID0gZXh0MmZzX2JlNjRfdG9fY3B1KGIpOworCQl9CisKKwkJb2Zmc2V0ICs9IHJlY29yZF9sZW47CisJCWVyciA9IGpvdXJuYWxfc2V0X3Jldm9rZShqb3VybmFsLCBibG9ja25yLCBzZXF1ZW5jZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkrK2luZm8tPm5yX3Jldm9rZXM7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9yZWdpb24uYyBiL2UyZnNwcm9ncy9lMmZzY2svcmVnaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3ZDNkZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svcmVnaW9uLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiByZWdpb24uYyAtLS0gY29kZSB3aGljaCBtYW5hZ2VzIGFsbG9jYXRpb25zIHdpdGhpbiBhIHJlZ2lvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI3VuZGVmIEVOQUJMRV9OTFMKKyNlbmRpZgorI2luY2x1ZGUgImUyZnNjay5oIgorCitzdHJ1Y3QgcmVnaW9uX2VsIHsKKwlyZWdpb25fYWRkcl90CXN0YXJ0OworCXJlZ2lvbl9hZGRyX3QJZW5kOworCXN0cnVjdCByZWdpb25fZWwgKm5leHQ7Cit9OworCitzdHJ1Y3QgcmVnaW9uX3N0cnVjdCB7CisJcmVnaW9uX2FkZHJfdAltaW47CisJcmVnaW9uX2FkZHJfdAltYXg7CisJc3RydWN0IHJlZ2lvbl9lbCAqYWxsb2NhdGVkOworfTsKKworcmVnaW9uX3QgcmVnaW9uX2NyZWF0ZShyZWdpb25fYWRkcl90IG1pbiwgcmVnaW9uX2FkZHJfdCBtYXgpCit7CisJcmVnaW9uX3QJcmVnaW9uOworCisJcmVnaW9uID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnaW9uX3N0cnVjdCkpOworCWlmICghcmVnaW9uKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQocmVnaW9uLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lvbl9zdHJ1Y3QpKTsKKwlyZWdpb24tPm1pbiA9IG1pbjsKKwlyZWdpb24tPm1heCA9IG1heDsKKwlyZXR1cm4gcmVnaW9uOworfQorCit2b2lkIHJlZ2lvbl9mcmVlKHJlZ2lvbl90IHJlZ2lvbikKK3sKKwlzdHJ1Y3QgcmVnaW9uX2VsCSpyLCAqbmV4dDsKKworCWZvciAociA9IHJlZ2lvbi0+YWxsb2NhdGVkOyByOyByID0gbmV4dCkgeworCQluZXh0ID0gci0+bmV4dDsKKwkJZnJlZShyKTsKKwl9CisJbWVtc2V0KHJlZ2lvbiwgMCwgc2l6ZW9mKHN0cnVjdCByZWdpb25fc3RydWN0KSk7CisJZnJlZShyZWdpb24pOworfQorCitpbnQgcmVnaW9uX2FsbG9jYXRlKHJlZ2lvbl90IHJlZ2lvbiwgcmVnaW9uX2FkZHJfdCBzdGFydCwgaW50IG4pCit7CisJc3RydWN0IHJlZ2lvbl9lbAkqciwgKm5ld19yZWdpb24sICpwcmV2LCAqbmV4dDsKKwlyZWdpb25fYWRkcl90IGVuZDsKKworCWVuZCA9IHN0YXJ0K247CisJaWYgKChzdGFydCA8IHJlZ2lvbi0+bWluKSB8fCAoZW5kID4gcmVnaW9uLT5tYXgpKQorCQlyZXR1cm4gLTE7CisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFNlYXJjaCB0aHJvdWdoIHRoZSBsaW5rZWQgbGlzdC4gIElmIHdlIGZpbmQgdGhhdCBpdAorCSAqIGNvbmZsaWN0cyB3aXRpaCBzb21ldGhpbmcgdGhhdCdzIGFscmVhZHkgYWxsb2NhdGVkLCByZXR1cm4KKwkgKiAxOyBpZiB3ZSBjYW4gZmluZCBhbiBleGlzdGluZyByZWdpb24gd2hpY2ggd2UgY2FuIGdyb3csIGRvCisJICogc28uICBPdGhlcndpc2UsIHN0b3Agd2hlbiB3ZSBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwbGFjZQorCSAqIGluc2VydCBhIG5ldyByZWdpb24gZWxlbWVudCBpbnRvIHRoZSBsaW5rZWQgbGlzdC4KKwkgKi8KKwlmb3IgKHIgPSByZWdpb24tPmFsbG9jYXRlZCwgcHJldj1OVUxMOyByOyBwcmV2ID0gciwgciA9IHItPm5leHQpIHsKKwkJaWYgKCgoc3RhcnQgPj0gci0+c3RhcnQpICYmIChzdGFydCA8IHItPmVuZCkpIHx8CisJCSAgICAoKGVuZCA+IHItPnN0YXJ0KSAmJiAoZW5kIDw9IHItPmVuZCkpIHx8CisJCSAgICAoKHN0YXJ0IDw9IHItPnN0YXJ0KSAmJiAoZW5kID49IHItPmVuZCkpKQorCQkJcmV0dXJuIDE7CisJCWlmIChlbmQgPT0gci0+c3RhcnQpIHsKKwkJCXItPnN0YXJ0ID0gc3RhcnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoc3RhcnQgPT0gci0+ZW5kKSB7CisJCQlpZiAoKG5leHQgPSByLT5uZXh0KSkgeworCQkJCWlmIChlbmQgPiBuZXh0LT5zdGFydCkKKwkJCQkJcmV0dXJuIDE7CisJCQkJaWYgKGVuZCA9PSBuZXh0LT5zdGFydCkgeworCQkJCQlyLT5lbmQgPSBuZXh0LT5lbmQ7CisJCQkJCXItPm5leHQgPSBuZXh0LT5uZXh0OworCQkJCQlmcmVlKG5leHQpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisJCQlyLT5lbmQgPSBlbmQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoc3RhcnQgPCByLT5zdGFydCkKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIEluc2VydCBhIG5ldyByZWdpb24gZWxlbWVudCBzdHJ1Y3R1cmUgaW50byB0aGUgbGlua2VkIGxpc3QKKwkgKi8KKwluZXdfcmVnaW9uID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVnaW9uX2VsKSk7CisJaWYgKCFuZXdfcmVnaW9uKQorCQlyZXR1cm4gLTE7CisJbmV3X3JlZ2lvbi0+c3RhcnQgPSBzdGFydDsKKwluZXdfcmVnaW9uLT5lbmQgPSBzdGFydCArIG47CisJbmV3X3JlZ2lvbi0+bmV4dCA9IHI7CisJaWYgKHByZXYpCisJCXByZXYtPm5leHQgPSBuZXdfcmVnaW9uOworCWVsc2UKKwkJcmVnaW9uLT5hbGxvY2F0ZWQgPSBuZXdfcmVnaW9uOworCXJldHVybiAwOworfQorCisjaWZkZWYgVEVTVF9QUk9HUkFNCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBCQ09ERV9FTkQJMAorI2RlZmluZSBCQ09ERV9DUkVBVEUJMQorI2RlZmluZSBCQ09ERV9GUkVFCTIKKyNkZWZpbmUgQkNPREVfQUxMT0NBVEUJMworI2RlZmluZSBCQ09ERV9QUklOVAk0CisKK2ludCBiY29kZV9wcm9ncmFtW10gPSB7CisJQkNPREVfQ1JFQVRFLCAxLCAxMDAxLAorCUJDT0RFX1BSSU5ULAorCUJDT0RFX0FMTE9DQVRFLCAxMCwgMTAsCisJQkNPREVfQUxMT0NBVEUsIDMwLCAxMCwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgMSwgMTUsCisJQkNPREVfQUxMT0NBVEUsIDE1LCA4LAorCUJDT0RFX0FMTE9DQVRFLCAxLCAyMCwKKwlCQ09ERV9BTExPQ0FURSwgMSwgOCwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgNDAsIDEwLAorCUJDT0RFX1BSSU5ULAorCUJDT0RFX0FMTE9DQVRFLCAyMiwgNSwKKwlCQ09ERV9QUklOVCwKKwlCQ09ERV9BTExPQ0FURSwgMjcsIDMsCisJQkNPREVfUFJJTlQsCisJQkNPREVfQUxMT0NBVEUsIDIwLCAyLAorCUJDT0RFX1BSSU5ULAorCUJDT0RFX0FMTE9DQVRFLCA0OSwgMSwKKwlCQ09ERV9BTExPQ0FURSwgNTAsIDUsCisJQkNPREVfQUxMT0NBVEUsIDksIDIsCisJQkNPREVfQUxMT0NBVEUsIDksIDEsCisJQkNPREVfUFJJTlQsCisJQkNPREVfRlJFRSwKKwlCQ09ERV9FTkQKK307CisKK3ZvaWQgcmVnaW9uX3ByaW50KHJlZ2lvbl90IHJlZ2lvbiwgRklMRSAqZikKK3sKKwlzdHJ1Y3QgcmVnaW9uX2VsCSpyOworCWludAlpID0gMDsKKworCWZwcmludGYoZiwgIlByaW50aW5nIHJlZ2lvbiAobWluPSVkLiBtYXg9JWQpXG5cdCIsIHJlZ2lvbi0+bWluLAorCQlyZWdpb24tPm1heCk7CisJZm9yIChyID0gcmVnaW9uLT5hbGxvY2F0ZWQ7IHI7IHIgPSByLT5uZXh0KSB7CisJCWZwcmludGYoZiwgIiglZCwgJWQpICAiLCByLT5zdGFydCwgci0+ZW5kKTsKKwkJaWYgKCsraSA+PSA4KQorCQkJZnByaW50ZihmLCAiXG5cdCIpOworCX0KKwlmcHJpbnRmKGYsICJcbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJcmVnaW9uX3QJciA9IE5VTEw7CisJaW50CQlwYyA9IDAsIHJldDsKKwlyZWdpb25fYWRkcl90CXN0YXJ0LCBlbmQ7CisKKworCXdoaWxlICgxKSB7CisJCXN3aXRjaCAoYmNvZGVfcHJvZ3JhbVtwYysrXSkgeworCQljYXNlIEJDT0RFX0VORDoKKwkJCWV4aXQoMCk7CisJCWNhc2UgQkNPREVfQ1JFQVRFOgorCQkJc3RhcnQgPSBiY29kZV9wcm9ncmFtW3BjKytdOworCQkJZW5kID0gYmNvZGVfcHJvZ3JhbVtwYysrXTsKKwkJCXByaW50ZigiQ3JlYXRpbmcgcmVnaW9uIHdpdGggYXJncyglZCwgJWQpXG4iLAorCQkJICAgICAgIHN0YXJ0LCBlbmQpOworCQkJciA9IHJlZ2lvbl9jcmVhdGUoc3RhcnQsIGVuZCk7CisJCQlpZiAoIXIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSByZWdpb24uXG4iKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQkNPREVfQUxMT0NBVEU6CisJCQlzdGFydCA9IGJjb2RlX3Byb2dyYW1bcGMrK107CisJCQllbmQgPSBiY29kZV9wcm9ncmFtW3BjKytdOworCQkJcmV0ID0gcmVnaW9uX2FsbG9jYXRlKHIsIHN0YXJ0LCBlbmQpOworCQkJcHJpbnRmKCJSZWdpb25fYWxsb2NhdGUoJWQsICVkKSByZXR1cm5zICVkXG4iLAorCQkJICAgICAgIHN0YXJ0LCBlbmQsIHJldCk7CisJCQlicmVhazsKKwkJY2FzZSBCQ09ERV9QUklOVDoKKwkJCXJlZ2lvbl9wcmludChyLCBzdGRvdXQpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKyNlbmRpZiAvKiBURVNUX1BST0dSQU0gKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcmVoYXNoLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3JlaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZmVhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3JlaGFzaC5jCkBAIC0wLDAgKzEsOTAzIEBACisvKgorICogcmVoYXNoLmMgLS0tIHJlYnVpbGQgaGFzaCB0cmVlIGRpcmVjdG9yaWVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICoKKyAqIFRoaXMgYWxnb3JpdGhtIGlzIGRlc2lnbmVkIGZvciBzaW1wbGljaXR5IG9mIGltcGxlbWVudGF0aW9uIGFuZCB0bworICogcGFjayB0aGUgZGlyZWN0b3J5IGFzIG11Y2ggYXMgcG9zc2libGUuICBJdCBob3dldmVyIHJlcXVpcmVzIHR3aWNlCisgKiBhcyBtdWNoIG1lbW9yeSBhcyB0aGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3J5LiAgVGhlIG1heGltdW0gc2l6ZQorICogZGlyZWN0b3J5IHN1cHBvcnRlZCB1c2luZyBhIDRrIGJsb2Nrc2l6ZSBpcyByb3VnaGx5IGEgZ2lnYWJ5dGUsIGFuZAorICogc28gdGhlcmUgbWF5IHZlcnkgd2VsbCBiZSBwcm9ibGVtcyB3aXRoIG1hY2hpbmVzIHRoYXQgZG9uJ3QgaGF2ZQorICogdmlydHVhbCBtZW1vcnksIGFuZCBvYnNjZW5lbHkgbGFyZ2UgZGlyZWN0b3JpZXMuCisgKgorICogQW4gYWx0ZXJuYXRlIGFsZ29yaXRobSB3aGljaCBpcyBtdWNoIG1vcmUgZGlzayBpbnRlbnNpdmUgY291bGQgYmUKKyAqIHdyaXR0ZW4sIGFuZCBwcm9iYWJseSB3aWxsIG5lZWQgdG8gYmUgd3JpdHRlbiBpbiB0aGUgZnV0dXJlLiAgVGhlCisgKiBkZXNpZ24gZ29hbHMgb2Ygc3VjaCBhbiBhbGdvcml0aG0gYXJlOiAoYSkgdXNlIChyb3VnaGx5KSBjb25zdGFudAorICogYW1vdW50cyBvZiBtZW1vcnksIG5vIG1hdHRlciBob3cgbGFyZ2UgdGhlIGRpcmVjdG9yeSwgKGIpIHRoZQorICogZGlyZWN0b3J5IG11c3QgYmUgc2FmZSBhdCBhbGwgdGltZXMsIGV2ZW4gaWYgZTJmc2NrIGlzIGludGVycnVwdGVkCisgKiBpbiB0aGUgbWlkZGxlLCAoYykgd2UgbXVzdCB1c2UgbWluaW1hbCBhbW91bnRzIG9mIGV4dHJhIGRpc2sKKyAqIGJsb2Nrcy4gIFRoaXMgcHJldHR5IG11Y2ggcmVxdWlyZXMgYW4gaW5jcmVtZW50YWwgYXBwcm9hY2gsIHdoZXJlCisgKiB3ZSBhcmUgcmVhZGluZyBmcm9tIG9uZSBwYXJ0IG9mIHRoZSBkaXJlY3RvcnksIGFuZCBpbnNlcnRpbmcgaW50bworICogdGhlIGZyb250IGhhbGYuICBTbyB0aGUgYWxnb3JpdGhtIHdpbGwgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGEKKyAqIG1vdmluZyBibG9jayBib3VuZGFyeSBiZXR3ZWVuIHRoZSBuZXcgdHJlZSBhbmQgdGhlIG9sZCB0cmVlLCBhbmQKKyAqIGZpbGVzIHdpbGwgbmVlZCB0byBiZSBtb3ZlZCBmcm9tIHRoZSBvbGQgZGlyZWN0b3J5IGFuZCBpbnNlcnRlZAorICogaW50byB0aGUgbmV3IHRyZWUuICBJZiB0aGUgbmV3IGRpcmVjdG9yeSByZXF1aXJlcyBzcGFjZSB3aGljaCBpc24ndAorICogeWV0IGF2YWlsYWJsZSwgYmxvY2tzIGZyb20gdGhlIGJlZ2lubmluZyBwYXJ0IG9mIHRoZSBvbGQgZGlyZWN0b3J5CisgKiBtYXkgbmVlZCB0byBiZSBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkgdG8gbWFrZSByb29tIGZvcgorICogdGhlIG5ldyB0cmVlOgorICoKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICB8ICBuZXcgdHJlZSAgIHwgICAgICAgIHwgb2xkIHRyZWUgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgXiBwdHIgICAgXnB0cgorICogICAgICAgICAgICAgICAgdGFpbCBuZXcgICBoZWFkIG9sZAorICoKKyAqIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBwYWluIGluIHRoZSB0dWNrdXMgdG8gaW1wbGVtZW50LCBhbmQgd2lsbAorICogcmVxdWlyZSBhIGxvdCBtb3JlIGRpc2sgYWNjZXNzZXMuICBTbyBJJ20gZ29pbmcgdG8gc2tpcCBpdCBmb3Igbm93OworICogaXQncyBvbmx5IHJlYWxseSBnb2luZyB0byBiZSBhbiBpc3N1ZSBmb3IgcmVhbGx5LCByZWFsbHkgYmlnCisgKiBmaWxlc3lzdGVtcyAod2hlbiB3ZSByZWFjaCB0aGUgbGV2ZWwgb2YgdGVucyBvZiBtaWxsaW9ucyBvZiBmaWxlcworICogaW4gYSBzaW5nbGUgZGlyZWN0b3J5KS4gIEl0IHdpbGwgcHJvYmFibHkgYmUgZWFzaWVyIHRvIHNpbXBseQorICogcmVxdWlyZSB0aGF0IGUyZnNjayB1c2UgVk0gZmlyc3QuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJlMmZzY2suaCIKKyNpbmNsdWRlICJwcm9ibGVtLmgiCisKK3N0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QgeworCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGU7CisJZXJyY29kZV90IGVycjsKKwllMmZzY2tfdCBjdHg7CisJc3RydWN0IGhhc2hfZW50cnkgKmhhcnJheTsKKwlpbnQgbWF4X2FycmF5LCBudW1fYXJyYXk7CisJdW5zaWduZWQgaW50IGRpcl9zaXplOworCWludCBjb21wcmVzczsKKwlpbm9fdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgaGFzaF9lbnRyeSB7CisJZXh0Ml9kaXJoYXNoX3QJaGFzaDsKKwlleHQyX2Rpcmhhc2hfdAltaW5vcl9oYXNoOworCWlub190CQlpbm87CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5CSpkaXI7Cit9OworCitzdHJ1Y3Qgb3V0X2RpciB7CisJaW50CQludW07CisJaW50CQltYXg7CisJY2hhcgkJKmJ1ZjsKKwlleHQyX2Rpcmhhc2hfdAkqaGFzaGVzOworfTsKKworc3RhdGljIGludCBmaWxsX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCSAgYmxrNjRfdCAqYmxvY2tfbnIsCisJCQkgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QJKmZkID0gKHN0cnVjdCBmaWxsX2Rpcl9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCXN0cnVjdCBoYXNoX2VudHJ5IAkqbmV3X2FycmF5LCAqZW50OworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAJKmRpcmVudDsKKwljaGFyCQkJKmRpcjsKKwl1bnNpZ25lZCBpbnQJCW9mZnNldCwgZGlyX29mZnNldCwgcmVjX2xlbjsKKwlpbnQJCQloYXNoX2FsZzsKKworCWlmIChibG9ja2NudCA8IDApCisJCXJldHVybiAwOworCisJb2Zmc2V0ID0gYmxvY2tjbnQgKiBmcy0+YmxvY2tzaXplOworCWlmIChvZmZzZXQgKyBmcy0+YmxvY2tzaXplID4gZmQtPmlub2RlLT5pX3NpemUpIHsKKwkJZmQtPmVyciA9IEVYVDJfRVRfRElSX0NPUlJVUFRFRDsKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCX0KKwlkaXIgPSAoZmQtPmJ1ZitvZmZzZXQpOworCWlmIChIT0xFX0JMS0FERFIoKmJsb2NrX25yKSkgeworCQltZW1zZXQoZGlyLCAwLCBmcy0+YmxvY2tzaXplKTsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBkaXI7CisJCSh2b2lkKSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIGZzLT5ibG9ja3NpemUsIGRpcmVudCk7CisJfSBlbHNlIHsKKwkJZmQtPmVyciA9IGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoZnMsICpibG9ja19uciwgZGlyLCAwKTsKKwkJaWYgKGZkLT5lcnIpCisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCWhhc2hfYWxnID0gZnMtPnN1cGVyLT5zX2RlZl9oYXNoX3ZlcnNpb247CisJaWYgKChoYXNoX2FsZyA8PSBFWFQyX0hBU0hfVEVBKSAmJgorCSAgICAoZnMtPnN1cGVyLT5zX2ZsYWdzICYgRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSkKKwkJaGFzaF9hbGcgKz0gMzsKKwkvKiBXaGlsZSB0aGUgZGlyZWN0b3J5IGJsb2NrIGlzICJob3QiLCBpbmRleCBpdC4gKi8KKwlkaXJfb2Zmc2V0ID0gMDsKKwl3aGlsZSAoZGlyX29mZnNldCA8IGZzLT5ibG9ja3NpemUpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoZGlyICsgZGlyX29mZnNldCk7CisJCSh2b2lkKSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pOworCQlpZiAoKChkaXJfb2Zmc2V0ICsgcmVjX2xlbikgPiBmcy0+YmxvY2tzaXplKSB8fAorCQkgICAgKHJlY19sZW4gPCA4KSB8fAorCQkgICAgKChyZWNfbGVuICUgNCkgIT0gMCkgfHwKKwkJICAgICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSs4VSkgPiByZWNfbGVuKSkgeworCQkJZmQtPmVyciA9IEVYVDJfRVRfRElSX0NPUlJVUFRFRDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQlkaXJfb2Zmc2V0ICs9IHJlY19sZW47CisJCWlmIChkaXJlbnQtPmlub2RlID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFmZC0+Y29tcHJlc3MgJiYgKChkaXJlbnQtPm5hbWVfbGVuJjB4RkYpID09IDEpICYmCisJCSAgICAoZGlyZW50LT5uYW1lWzBdID09ICcuJykpCisJCQljb250aW51ZTsKKwkJaWYgKCFmZC0+Y29tcHJlc3MgJiYgKChkaXJlbnQtPm5hbWVfbGVuJjB4RkYpID09IDIpICYmCisJCSAgICAoZGlyZW50LT5uYW1lWzBdID09ICcuJykgJiYgKGRpcmVudC0+bmFtZVsxXSA9PSAnLicpKSB7CisJCQlmZC0+cGFyZW50ID0gZGlyZW50LT5pbm9kZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmZC0+bnVtX2FycmF5ID49IGZkLT5tYXhfYXJyYXkpIHsKKwkJCW5ld19hcnJheSA9IHJlYWxsb2MoZmQtPmhhcnJheSwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGhhc2hfZW50cnkpICogKGZkLT5tYXhfYXJyYXkrNTAwKSk7CisJCQlpZiAoIW5ld19hcnJheSkgeworCQkJCWZkLT5lcnIgPSBFTk9NRU07CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQkJZmQtPmhhcnJheSA9IG5ld19hcnJheTsKKwkJCWZkLT5tYXhfYXJyYXkgKz0gNTAwOworCQl9CisJCWVudCA9IGZkLT5oYXJyYXkgKyBmZC0+bnVtX2FycmF5Kys7CisJCWVudC0+ZGlyID0gZGlyZW50OworCQlmZC0+ZGlyX3NpemUgKz0gRVhUMl9ESVJfUkVDX0xFTihkaXJlbnQtPm5hbWVfbGVuICYgMHhGRik7CisJCWVudC0+aW5vID0gZGlyZW50LT5pbm9kZTsKKwkJaWYgKGZkLT5jb21wcmVzcykKKwkJCWVudC0+aGFzaCA9IGVudC0+bWlub3JfaGFzaCA9IDA7CisJCWVsc2UgeworCQkJZmQtPmVyciA9IGV4dDJmc19kaXJoYXNoKGhhc2hfYWxnLCBkaXJlbnQtPm5hbWUsCisJCQkJCQkgZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYsCisJCQkJCQkgZnMtPnN1cGVyLT5zX2hhc2hfc2VlZCwKKwkJCQkJCSAmZW50LT5oYXNoLCAmZW50LT5taW5vcl9oYXNoKTsKKwkJCWlmIChmZC0+ZXJyKQorCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBVc2VkIGZvciBzb3J0aW5nIHRoZSBoYXNoIGVudHJ5ICovCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGlub19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYSA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBhOworCWNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICpoZV9iID0gKGNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICopIGI7CisKKwlyZXR1cm4gKGhlX2EtPmlubyAtIGhlX2ItPmlubyk7Cit9CisKKy8qIFVzZWQgZm9yIHNvcnRpbmcgdGhlIGhhc2ggZW50cnkgKi8KK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgbmFtZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYSA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBhOworCWNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICpoZV9iID0gKGNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICopIGI7CisJaW50CXJldDsKKwlpbnQJbWluX2xlbjsKKworCW1pbl9sZW4gPSBoZV9hLT5kaXItPm5hbWVfbGVuOworCWlmIChtaW5fbGVuID4gaGVfYi0+ZGlyLT5uYW1lX2xlbikKKwkJbWluX2xlbiA9IGhlX2ItPmRpci0+bmFtZV9sZW47CisKKwlyZXQgPSBzdHJuY21wKGhlX2EtPmRpci0+bmFtZSwgaGVfYi0+ZGlyLT5uYW1lLCBtaW5fbGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGhlX2EtPmRpci0+bmFtZV9sZW4gPiBoZV9iLT5kaXItPm5hbWVfbGVuKQorCQkJcmV0ID0gMTsKKwkJZWxzZSBpZiAoaGVfYS0+ZGlyLT5uYW1lX2xlbiA8IGhlX2ItPmRpci0+bmFtZV9sZW4pCisJCQlyZXQgPSAtMTsKKwkJZWxzZQorCQkJcmV0ID0gaGVfYi0+ZGlyLT5pbm9kZSAtIGhlX2EtPmRpci0+aW5vZGU7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIFVzZWQgZm9yIHNvcnRpbmcgdGhlIGhhc2ggZW50cnkgKi8KK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgaGFzaF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqaGVfYSA9IChjb25zdCBzdHJ1Y3QgaGFzaF9lbnRyeSAqKSBhOworCWNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICpoZV9iID0gKGNvbnN0IHN0cnVjdCBoYXNoX2VudHJ5ICopIGI7CisJaW50CXJldDsKKworCWlmIChoZV9hLT5oYXNoID4gaGVfYi0+aGFzaCkKKwkJcmV0ID0gMTsKKwllbHNlIGlmIChoZV9hLT5oYXNoIDwgaGVfYi0+aGFzaCkKKwkJcmV0ID0gLTE7CisJZWxzZSB7CisJCWlmIChoZV9hLT5taW5vcl9oYXNoID4gaGVfYi0+bWlub3JfaGFzaCkKKwkJCXJldCA9IDE7CisJCWVsc2UgaWYgKGhlX2EtPm1pbm9yX2hhc2ggPCBoZV9iLT5taW5vcl9oYXNoKQorCQkJcmV0ID0gLTE7CisJCWVsc2UKKwkJCXJldCA9IG5hbWVfY21wKGEsIGIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZXJyY29kZV90IGFsbG9jX3NpemVfZGlyKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3Qgb3V0X2RpciAqb3V0ZGlyLAorCQkJCWludCBibG9ja3MpCit7CisJdm9pZAkJCSpuZXdfbWVtOworCisJaWYgKG91dGRpci0+bWF4KSB7CisJCW5ld19tZW0gPSByZWFsbG9jKG91dGRpci0+YnVmLCBibG9ja3MgKiBmcy0+YmxvY2tzaXplKTsKKwkJaWYgKCFuZXdfbWVtKQorCQkJcmV0dXJuIEVOT01FTTsKKwkJb3V0ZGlyLT5idWYgPSBuZXdfbWVtOworCQluZXdfbWVtID0gcmVhbGxvYyhvdXRkaXItPmhhc2hlcywKKwkJCQkgIGJsb2NrcyAqIHNpemVvZihleHQyX2Rpcmhhc2hfdCkpOworCQlpZiAoIW5ld19tZW0pCisJCQlyZXR1cm4gRU5PTUVNOworCQlvdXRkaXItPmhhc2hlcyA9IG5ld19tZW07CisJfSBlbHNlIHsKKwkJb3V0ZGlyLT5idWYgPSBtYWxsb2MoYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSk7CisJCW91dGRpci0+aGFzaGVzID0gbWFsbG9jKGJsb2NrcyAqIHNpemVvZihleHQyX2Rpcmhhc2hfdCkpOworCQlvdXRkaXItPm51bSA9IDA7CisJfQorCW91dGRpci0+bWF4ID0gYmxvY2tzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX291dF9kaXIoc3RydWN0IG91dF9kaXIgKm91dGRpcikKK3sKKwlmcmVlKG91dGRpci0+YnVmKTsKKwlmcmVlKG91dGRpci0+aGFzaGVzKTsKKwlvdXRkaXItPm1heCA9IDA7CisJb3V0ZGlyLT5udW0gPTA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZ2V0X25leHRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBvdXRfZGlyICpvdXRkaXIsCisJCQkgY2hhciAqKiByZXQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmIChvdXRkaXItPm51bSA+PSBvdXRkaXItPm1heCkgeworCQlyZXR2YWwgPSBhbGxvY19zaXplX2Rpcihmcywgb3V0ZGlyLCBvdXRkaXItPm1heCArIDUwKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCSpyZXQgPSBvdXRkaXItPmJ1ZiArIChvdXRkaXItPm51bSsrICogZnMtPmJsb2Nrc2l6ZSk7CisJbWVtc2V0KCpyZXQsIDAsIGZzLT5ibG9ja3NpemUpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1ha2UgYSB1bmlxdWUgZmlsZW5hbWUuICBXZSBkbyB0aGlzIGJ5CisgKiBhcHBlbmRpbmcgfjAsIGFuZCB0aGVuIGluY3JlbWVudGluZyB0aGUgbnVtYmVyLiAgSG93ZXZlciwgd2UgY2Fubm90CisgKiBleHBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZW5hbWUgYmV5b25kIHRoZSBwYWRkaW5nIGF2YWlsYWJsZSBpbgorICogdGhlIGRpcmVjdG9yeSBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQgbXV0YXRlX25hbWUoY2hhciAqc3RyLCBfX3UxNiAqbGVuKQoreworCWludAlpOworCV9fdTE2CWwgPSAqbGVuICYgMHhGRiwgaCA9ICpsZW4gJiAweGZmMDA7CisKKwkvKgorCSAqIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiBpdCBsb29rcyB0aGUgbmFtZSBoYXMgYmVlbiBtdXRhdGVkCisJICogYWxyZWFkeQorCSAqLworCWZvciAoaSA9IGwtMTsgaSA+IDA7IGktLSkgeworCQlpZiAoIWlzZGlnaXQoc3RyW2ldKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoKGkgPT0gbC0xKSB8fCAoc3RyW2ldICE9ICd+JykpIHsKKwkJaWYgKCgobC0xKSAmIDMpIDwgMikKKwkJCWwgKz0gMjsKKwkJZWxzZQorCQkJbCA9IChsKzMpICYgfjM7CisJCXN0cltsLTJdID0gJ34nOworCQlzdHJbbC0xXSA9ICcwJzsKKwkJKmxlbiA9IGwgfCBoOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IGwtMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKGlzZGlnaXQoc3RyW2ldKSkgeworCQkJaWYgKHN0cltpXSA9PSAnOScpCisJCQkJc3RyW2ldID0gJzAnOworCQkJZWxzZSB7CisJCQkJc3RyW2ldKys7CisJCQkJcmV0dXJuOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKGkgPT0gMSkgeworCQkJaWYgKHN0clswXSA9PSAneicpCisJCQkJc3RyWzBdID0gJ0EnOworCQkJZWxzZSBpZiAoc3RyWzBdID09ICdaJykgeworCQkJCXN0clswXSA9ICd+JzsKKwkJCQlzdHJbMV0gPSAnMCc7CisJCQl9IGVsc2UKKwkJCQlzdHJbMF0rKzsKKwkJfSBlbHNlIGlmIChpID4gMCkgeworCQkJc3RyW2ldID0gJzEnOworCQkJc3RyW2ktMV0gPSAnfic7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RyWzBdID09ICd+JykKKwkJCQlzdHJbMF0gPSAnYSc7CisJCQllbHNlCisJCQkJc3RyWzBdKys7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGR1cGxpY2F0ZV9zZWFyY2hfYW5kX2ZpeChlMmZzY2tfdCBjdHgsIGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBleHQyX2lub190IGlubywKKwkJCQkgICAgc3RydWN0IGZpbGxfZGlyX3N0cnVjdCAqZmQpCit7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCXN0cnVjdCBoYXNoX2VudHJ5IAkqZW50LCAqcHJldjsKKwlpbnQJCQlpLCBqOworCWludAkJCWZpeGVkID0gMDsKKwljaGFyCQkJbmV3X25hbWVbMjU2XTsKKwlfX3UxNgkJCW5ld19sZW47CisJaW50CQkJaGFzaF9hbGc7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gaW5vOworCisJaGFzaF9hbGcgPSBmcy0+c3VwZXItPnNfZGVmX2hhc2hfdmVyc2lvbjsKKwlpZiAoKGhhc2hfYWxnIDw9IEVYVDJfSEFTSF9URUEpICYmCisJICAgIChmcy0+c3VwZXItPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gpKQorCQloYXNoX2FsZyArPSAzOworCisJZm9yIChpPTE7IGkgPCBmZC0+bnVtX2FycmF5OyBpKyspIHsKKwkJZW50ID0gZmQtPmhhcnJheSArIGk7CisJCXByZXYgPSBlbnQgLSAxOworCQlpZiAoIWVudC0+ZGlyLT5pbm9kZSB8fAorCQkgICAgKChlbnQtPmRpci0+bmFtZV9sZW4gJiAweEZGKSAhPQorCQkgICAgIChwcmV2LT5kaXItPm5hbWVfbGVuICYgMHhGRikpIHx8CisJCSAgICAoc3RybmNtcChlbnQtPmRpci0+bmFtZSwgcHJldi0+ZGlyLT5uYW1lLAorCQkJICAgICBlbnQtPmRpci0+bmFtZV9sZW4gJiAweEZGKSkpCisJCQljb250aW51ZTsKKwkJcGN0eC5kaXJlbnQgPSBlbnQtPmRpcjsKKwkJaWYgKChlbnQtPmRpci0+aW5vZGUgPT0gcHJldi0+ZGlyLT5pbm9kZSkgJiYKKwkJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9EVVBMSUNBVEVfRElSRU5ULCAmcGN0eCkpIHsKKwkJCWUyZnNja19hZGp1c3RfaW5vZGVfY291bnQoY3R4LCBlbnQtPmRpci0+aW5vZGUsIC0xKTsKKwkJCWVudC0+ZGlyLT5pbm9kZSA9IDA7CisJCQlmaXhlZCsrOworCQkJY29udGludWU7CisJCX0KKwkJbWVtY3B5KG5ld19uYW1lLCBlbnQtPmRpci0+bmFtZSwgZW50LT5kaXItPm5hbWVfbGVuICYgMHhGRik7CisJCW5ld19sZW4gPSBlbnQtPmRpci0+bmFtZV9sZW47CisJCW11dGF0ZV9uYW1lKG5ld19uYW1lLCAmbmV3X2xlbik7CisJCWZvciAoaj0wOyBqIDwgZmQtPm51bV9hcnJheTsgaisrKSB7CisJCQlpZiAoKGk9PWopIHx8CisJCQkgICAgKChuZXdfbGVuICYgMHhGRikgIT0KKwkJCSAgICAgKGZkLT5oYXJyYXlbal0uZGlyLT5uYW1lX2xlbiAmIDB4RkYpKSB8fAorCQkJICAgIChzdHJuY21wKG5ld19uYW1lLCBmZC0+aGFycmF5W2pdLmRpci0+bmFtZSwKKwkJCQkgICAgIG5ld19sZW4gJiAweEZGKSkpCisJCQkJY29udGludWU7CisJCQltdXRhdGVfbmFtZShuZXdfbmFtZSwgJm5ld19sZW4pOworCisJCQlqID0gLTE7CisJCX0KKwkJbmV3X25hbWVbbmV3X2xlbiAmIDB4RkZdID0gMDsKKwkJcGN0eC5zdHIgPSBuZXdfbmFtZTsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMl9OT05fVU5JUVVFX0ZJTEUsICZwY3R4KSkgeworCQkJbWVtY3B5KGVudC0+ZGlyLT5uYW1lLCBuZXdfbmFtZSwgbmV3X2xlbiAmIDB4RkYpOworCQkJZW50LT5kaXItPm5hbWVfbGVuID0gbmV3X2xlbjsKKwkJCWV4dDJmc19kaXJoYXNoKGhhc2hfYWxnLCBlbnQtPmRpci0+bmFtZSwKKwkJCQkgICAgICAgZW50LT5kaXItPm5hbWVfbGVuICYgMHhGRiwKKwkJCQkgICAgICAgZnMtPnN1cGVyLT5zX2hhc2hfc2VlZCwKKwkJCQkgICAgICAgJmVudC0+aGFzaCwgJmVudC0+bWlub3JfaGFzaCk7CisJCQlmaXhlZCsrOworCQl9CisJfQorCXJldHVybiBmaXhlZDsKK30KKworCitzdGF0aWMgZXJyY29kZV90IGNvcHlfZGlyX2VudHJpZXMoZTJmc2NrX3QgY3R4LAorCQkJCSAgc3RydWN0IGZpbGxfZGlyX3N0cnVjdCAqZmQsCisJCQkJICBzdHJ1Y3Qgb3V0X2RpciAqb3V0ZGlyKQoreworCWV4dDJfZmlsc3lzIAkJZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqYmxvY2tfc3RhcnQ7CisJc3RydWN0IGhhc2hfZW50cnkgCSplbnQ7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5CSpkaXJlbnQ7CisJdW5zaWduZWQgaW50CQlyZWNfbGVuLCBwcmV2X3JlY19sZW4sIGxlZnQsIHNsYWNrLCBvZmZzZXQ7CisJaW50CQkJaTsKKwlleHQyX2Rpcmhhc2hfdAkJcHJldl9oYXNoOworCisJaWYgKGN0eC0+aHRyZWVfc2xhY2tfcGVyY2VudGFnZSA9PSAyNTUpIHsKKwkJcHJvZmlsZV9nZXRfdWludChjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwKKwkJCQkgImluZGV4ZWRfZGlyX3NsYWNrX3BlcmNlbnRhZ2UiLAorCQkJCSAwLCAyMCwKKwkJCQkgJmN0eC0+aHRyZWVfc2xhY2tfcGVyY2VudGFnZSk7CisJCWlmIChjdHgtPmh0cmVlX3NsYWNrX3BlcmNlbnRhZ2UgPiAxMDApCisJCQljdHgtPmh0cmVlX3NsYWNrX3BlcmNlbnRhZ2UgPSAyMDsKKwl9CisKKwlvdXRkaXItPm1heCA9IDA7CisJcmV0dmFsID0gYWxsb2Nfc2l6ZV9kaXIoZnMsIG91dGRpciwKKwkJCQkoZmQtPmRpcl9zaXplIC8gZnMtPmJsb2Nrc2l6ZSkgKyAyKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW91dGRpci0+bnVtID0gZmQtPmNvbXByZXNzID8gMCA6IDE7CisJb2Zmc2V0ID0gMDsKKwlvdXRkaXItPmhhc2hlc1swXSA9IDA7CisJcHJldl9oYXNoID0gMTsKKwlpZiAoKHJldHZhbCA9IGdldF9uZXh0X2Jsb2NrKGZzLCBvdXRkaXIsICZibG9ja19zdGFydCkpKQorCQlyZXR1cm4gcmV0dmFsOworCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYmxvY2tfc3RhcnQ7CisJcHJldl9yZWNfbGVuID0gMDsKKwlyZWNfbGVuID0gMDsKKwlsZWZ0ID0gZnMtPmJsb2Nrc2l6ZTsKKwlzbGFjayA9IGZkLT5jb21wcmVzcyA/IDEyIDoKKwkJKGZzLT5ibG9ja3NpemUgKiBjdHgtPmh0cmVlX3NsYWNrX3BlcmNlbnRhZ2UpLzEwMDsKKwlpZiAoc2xhY2sgPCAxMikKKwkJc2xhY2sgPSAxMjsKKwlmb3IgKGkgPSAwOyBpIDwgZmQtPm51bV9hcnJheTsgaSsrKSB7CisJCWVudCA9IGZkLT5oYXJyYXkgKyBpOworCQlpZiAoZW50LT5kaXItPmlub2RlID09IDApCisJCQljb250aW51ZTsKKwkJcmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4oZW50LT5kaXItPm5hbWVfbGVuICYgMHhGRik7CisJCWlmIChyZWNfbGVuID4gbGVmdCkgeworCQkJaWYgKGxlZnQpIHsKKwkJCQlsZWZ0ICs9IHByZXZfcmVjX2xlbjsKKwkJCQlyZXR2YWwgPSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIGxlZnQsIGRpcmVudCk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJCWlmICgocmV0dmFsID0gZ2V0X25leHRfYmxvY2soZnMsIG91dGRpciwKKwkJCQkJCSAgICAgICZibG9ja19zdGFydCkpKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlvZmZzZXQgPSAwOworCQl9CisJCWxlZnQgPSBmcy0+YmxvY2tzaXplIC0gb2Zmc2V0OworCQlkaXJlbnQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChibG9ja19zdGFydCArIG9mZnNldCk7CisJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJaWYgKGVudC0+aGFzaCA9PSBwcmV2X2hhc2gpCisJCQkJb3V0ZGlyLT5oYXNoZXNbb3V0ZGlyLT5udW0tMV0gPSBlbnQtPmhhc2ggfCAxOworCQkJZWxzZQorCQkJCW91dGRpci0+aGFzaGVzW291dGRpci0+bnVtLTFdID0gZW50LT5oYXNoOworCQl9CisJCWRpcmVudC0+aW5vZGUgPSBlbnQtPmRpci0+aW5vZGU7CisJCWRpcmVudC0+bmFtZV9sZW4gPSBlbnQtPmRpci0+bmFtZV9sZW47CisJCXJldHZhbCA9IGV4dDJmc19zZXRfcmVjX2xlbihmcywgcmVjX2xlbiwgZGlyZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCXByZXZfcmVjX2xlbiA9IHJlY19sZW47CisJCW1lbWNweShkaXJlbnQtPm5hbWUsIGVudC0+ZGlyLT5uYW1lLCBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRik7CisJCW9mZnNldCArPSByZWNfbGVuOworCQlsZWZ0IC09IHJlY19sZW47CisJCWlmIChsZWZ0IDwgc2xhY2spIHsKKwkJCXByZXZfcmVjX2xlbiArPSBsZWZ0OworCQkJcmV0dmFsID0gZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBwcmV2X3JlY19sZW4sIGRpcmVudCk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlvZmZzZXQgKz0gbGVmdDsKKwkJCWxlZnQgPSAwOworCQl9CisJCXByZXZfaGFzaCA9IGVudC0+aGFzaDsKKwl9CisJaWYgKGxlZnQpCisJCXJldHZhbCA9IGV4dDJmc19zZXRfcmVjX2xlbihmcywgcmVjX2xlbiArIGxlZnQsIGRpcmVudCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gKnNldF9yb290X25vZGUoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKmJ1ZiwKKwkJCQkgICAgZXh0Ml9pbm9fdCBpbm8sIGV4dDJfaW5vX3QgcGFyZW50KQoreworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAJCSpkaXI7CisJc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICAJKnJvb3Q7CisJc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdAkqbGltaXRzOworCWludAkJCQlmaWxldHlwZSA9IDA7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpCisJCWZpbGV0eXBlID0gRVhUMl9GVF9ESVIgPDwgODsKKworCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCWRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCWRpci0+aW5vZGUgPSBpbm87CisJZGlyLT5uYW1lWzBdID0gJy4nOworCWRpci0+bmFtZV9sZW4gPSAxIHwgZmlsZXR5cGU7CisJZGlyLT5yZWNfbGVuID0gMTI7CisJZGlyID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgMTIpOworCWRpci0+aW5vZGUgPSBwYXJlbnQ7CisJZGlyLT5uYW1lWzBdID0gJy4nOworCWRpci0+bmFtZVsxXSA9ICcuJzsKKwlkaXItPm5hbWVfbGVuID0gMiB8IGZpbGV0eXBlOworCWRpci0+cmVjX2xlbiA9IGZzLT5ibG9ja3NpemUgLSAxMjsKKworCXJvb3QgPSAoc3RydWN0IGV4dDJfZHhfcm9vdF9pbmZvICopIChidWYrMjQpOworCXJvb3QtPnJlc2VydmVkX3plcm8gPSAwOworCXJvb3QtPmhhc2hfdmVyc2lvbiA9IGZzLT5zdXBlci0+c19kZWZfaGFzaF92ZXJzaW9uOworCXJvb3QtPmluZm9fbGVuZ3RoID0gODsKKwlyb290LT5pbmRpcmVjdF9sZXZlbHMgPSAwOworCXJvb3QtPnVudXNlZF9mbGFncyA9IDA7CisKKwlsaW1pdHMgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAoYnVmKzMyKTsKKwlsaW1pdHMtPmxpbWl0ID0gKGZzLT5ibG9ja3NpemUgLSAzMikgLyBzaXplb2Yoc3RydWN0IGV4dDJfZHhfZW50cnkpOworCWxpbWl0cy0+Y291bnQgPSAwOworCisJcmV0dXJuIHJvb3Q7Cit9CisKKworc3RhdGljIHN0cnVjdCBleHQyX2R4X2VudHJ5ICpzZXRfaW50X25vZGUoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgCQkqZGlyOworCXN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQJKmxpbWl0czsKKworCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCWRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCWRpci0+aW5vZGUgPSAwOworCSh2b2lkKSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIGZzLT5ibG9ja3NpemUsIGRpcik7CisKKwlsaW1pdHMgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAoYnVmKzgpOworCWxpbWl0cy0+bGltaXQgPSAoZnMtPmJsb2Nrc2l6ZSAtIDgpIC8gc2l6ZW9mKHN0cnVjdCBleHQyX2R4X2VudHJ5KTsKKwlsaW1pdHMtPmNvdW50ID0gMDsKKworCXJldHVybiAoc3RydWN0IGV4dDJfZHhfZW50cnkgKikgbGltaXRzOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgbGVhZiBub2RlcyB3aGljaCBoYXZlIGJlZW4gd3JpdHRlbiBpbgorICogb3V0ZGlyLCBhbmQgcG9wdWxhdGVzIHRoZSByb290IG5vZGUgYW5kIGFueSBuZWNlc3NhcnkgaW50ZXJpb3Igbm9kZXMuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgY2FsY3VsYXRlX3RyZWUoZXh0Ml9maWxzeXMgZnMsCisJCQkJc3RydWN0IG91dF9kaXIgKm91dGRpciwKKwkJCQlleHQyX2lub190IGlubywKKwkJCQlleHQyX2lub190IHBhcmVudCkKK3sKKwlzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8gIAkqcm9vdF9pbmZvOworCXN0cnVjdCBleHQyX2R4X2VudHJ5IAkJKnJvb3QsICpkeF9lbnQgPSAwOworCXN0cnVjdCBleHQyX2R4X2NvdW50bGltaXQJKnJvb3RfbGltaXQsICpsaW1pdDsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJY2hhcgkJCQkqIGJsb2NrX3N0YXJ0OworCWludAkJCQlpLCBjMSwgYzIsIG5ibGtzOworCWludAkJCQlsaW1pdF9vZmZzZXQsIHJvb3Rfb2Zmc2V0OworCisJcm9vdF9pbmZvID0gc2V0X3Jvb3Rfbm9kZShmcywgb3V0ZGlyLT5idWYsIGlubywgcGFyZW50KTsKKwlyb290X29mZnNldCA9IGxpbWl0X29mZnNldCA9ICgoY2hhciAqKSByb290X2luZm8gLSBvdXRkaXItPmJ1ZikgKworCQlyb290X2luZm8tPmluZm9fbGVuZ3RoOworCXJvb3RfbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSAob3V0ZGlyLT5idWYgKyBsaW1pdF9vZmZzZXQpOworCWMxID0gcm9vdF9saW1pdC0+bGltaXQ7CisJbmJsa3MgPSBvdXRkaXItPm51bTsKKworCS8qIFdyaXRlIG91dCB0aGUgcG9pbnRlciBibG9ja3MgKi8KKwlpZiAobmJsa3MtMSA8PSBjMSkgeworCQkvKiBKdXN0IHdyaXRlIG91dCB0aGUgcm9vdCBibG9jaywgYW5kIHdlJ3JlIGRvbmUgKi8KKwkJcm9vdCA9IChzdHJ1Y3QgZXh0Ml9keF9lbnRyeSAqKSAob3V0ZGlyLT5idWYgKyByb290X29mZnNldCk7CisJCWZvciAoaT0xOyBpIDwgbmJsa3M7IGkrKykgeworCQkJcm9vdC0+YmxvY2sgPSBleHQyZnNfY3B1X3RvX2xlMzIoaSk7CisJCQlpZiAoaSAhPSAxKQorCQkJCXJvb3QtPmhhc2ggPQorCQkJCQlleHQyZnNfY3B1X3RvX2xlMzIob3V0ZGlyLT5oYXNoZXNbaV0pOworCQkJcm9vdCsrOworCQkJYzEtLTsKKwkJfQorCX0gZWxzZSB7CisJCWMyID0gMDsKKwkJbGltaXQgPSAwOworCQlyb290X2luZm8tPmluZGlyZWN0X2xldmVscyA9IDE7CisJCWZvciAoaT0xOyBpIDwgbmJsa3M7IGkrKykgeworCQkJaWYgKGMxID09IDApCisJCQkJcmV0dXJuIEVOT1NQQzsKKwkJCWlmIChjMiA9PSAwKSB7CisJCQkJaWYgKGxpbWl0KQorCQkJCQlsaW1pdC0+bGltaXQgPSBsaW1pdC0+Y291bnQgPQorCQlleHQyZnNfY3B1X3RvX2xlMTYobGltaXQtPmxpbWl0KTsKKwkJCQlyb290ID0gKHN0cnVjdCBleHQyX2R4X2VudHJ5ICopCisJCQkJCShvdXRkaXItPmJ1ZiArIHJvb3Rfb2Zmc2V0KTsKKwkJCQlyb290LT5ibG9jayA9IGV4dDJmc19jcHVfdG9fbGUzMihvdXRkaXItPm51bSk7CisJCQkJaWYgKGkgIT0gMSkKKwkJCQkJcm9vdC0+aGFzaCA9CisJCQlleHQyZnNfY3B1X3RvX2xlMzIob3V0ZGlyLT5oYXNoZXNbaV0pOworCQkJCWlmICgocmV0dmFsID0gIGdldF9uZXh0X2Jsb2NrKGZzLCBvdXRkaXIsCisJCQkJCQkJICAgICAgJmJsb2NrX3N0YXJ0KSkpCisJCQkJCXJldHVybiByZXR2YWw7CisJCQkJZHhfZW50ID0gc2V0X2ludF9ub2RlKGZzLCBibG9ja19zdGFydCk7CisJCQkJbGltaXQgPSAoc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCAqKSBkeF9lbnQ7CisJCQkJYzIgPSBsaW1pdC0+bGltaXQ7CisJCQkJcm9vdF9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBleHQyX2R4X2VudHJ5KTsKKwkJCQljMS0tOworCQkJfQorCQkJZHhfZW50LT5ibG9jayA9IGV4dDJmc19jcHVfdG9fbGUzMihpKTsKKwkJCWlmIChjMiAhPSBsaW1pdC0+bGltaXQpCisJCQkJZHhfZW50LT5oYXNoID0KKwkJCQkJZXh0MmZzX2NwdV90b19sZTMyKG91dGRpci0+aGFzaGVzW2ldKTsKKwkJCWR4X2VudCsrOworCQkJYzItLTsKKwkJfQorCQlsaW1pdC0+Y291bnQgPSBleHQyZnNfY3B1X3RvX2xlMTYobGltaXQtPmxpbWl0IC0gYzIpOworCQlsaW1pdC0+bGltaXQgPSBleHQyZnNfY3B1X3RvX2xlMTYobGltaXQtPmxpbWl0KTsKKwl9CisJcm9vdF9saW1pdCA9IChzdHJ1Y3QgZXh0Ml9keF9jb3VudGxpbWl0ICopIChvdXRkaXItPmJ1ZiArIGxpbWl0X29mZnNldCk7CisJcm9vdF9saW1pdC0+Y291bnQgPSBleHQyZnNfY3B1X3RvX2xlMTYocm9vdF9saW1pdC0+bGltaXQgLSBjMSk7CisJcm9vdF9saW1pdC0+bGltaXQgPSBleHQyZnNfY3B1X3RvX2xlMTYocm9vdF9saW1pdC0+bGltaXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB3cml0ZV9kaXJfc3RydWN0IHsKKwlzdHJ1Y3Qgb3V0X2RpciAqb3V0ZGlyOworCWVycmNvZGVfdAllcnI7CisJZTJmc2NrX3QJY3R4OworCWJsazY0X3QJCWNsZWFyZWQ7Cit9OworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIHdyaXRlcyBvdXQgYSBkaXJlY3RvcnkgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgYmxrNjRfdCAqYmxvY2tfbnIsCisJCQkgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgd3JpdGVfZGlyX3N0cnVjdAkqd2QgPSAoc3RydWN0IHdyaXRlX2Rpcl9zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsazY0X3QJYmxrOworCWNoYXIJKmRpcjsKKworCWlmICgqYmxvY2tfbnIgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKGJsb2NrY250ID49IHdkLT5vdXRkaXItPm51bSkgeworCQllMmZzY2tfcmVhZF9iaXRtYXBzKHdkLT5jdHgpOworCQlibGsgPSAqYmxvY2tfbnI7CisJCS8qCisJCSAqIEluIHRoZW9yeSwgd2Ugb25seSByZWxlYXNlIGJsb2NrcyBmcm9tIHRoZSBlbmQgb2YgdGhlCisJCSAqIGRpcmVjdG9yeSBmaWxlLCBzbyBpdCdzIGZpbmUgdG8gY2xvYmJlciBhIHdob2xlIGNsdXN0ZXIgYXQKKwkJICogb25jZS4KKwkJICovCisJCWlmIChibGsgJSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgPT0gMCkgeworCQkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKHdkLT5jdHgtPmJsb2NrX2ZvdW5kX21hcCwKKwkJCQkJCSAgICBibGspOworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCAtMSk7CisJCQl3ZC0+Y2xlYXJlZCsrOworCQl9CisJCSpibG9ja19uciA9IDA7CisJCXJldHVybiBCTE9DS19DSEFOR0VEOworCX0KKwlpZiAoYmxvY2tjbnQgPCAwKQorCQlyZXR1cm4gMDsKKworCWRpciA9IHdkLT5vdXRkaXItPmJ1ZiArIChibG9ja2NudCAqIGZzLT5ibG9ja3NpemUpOworCXdkLT5lcnIgPSBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhmcywgKmJsb2NrX25yLCBkaXIsIDApOworCWlmICh3ZC0+ZXJyKQorCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfZGlyZWN0b3J5KGUyZnNja190IGN0eCwgZXh0Ml9maWxzeXMgZnMsCisJCQkJIHN0cnVjdCBvdXRfZGlyICpvdXRkaXIsCisJCQkJIGV4dDJfaW5vX3QgaW5vLCBpbnQgY29tcHJlc3MpCit7CisJc3RydWN0IHdyaXRlX2Rpcl9zdHJ1Y3Qgd2Q7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJaW5vZGU7CisKKwlyZXR2YWwgPSBlMmZzY2tfZXhwYW5kX2RpcmVjdG9yeShjdHgsIGlubywgLTEsIG91dGRpci0+bnVtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJd2Qub3V0ZGlyID0gb3V0ZGlyOworCXdkLmVyciA9IDA7CisJd2QuY3R4ID0gY3R4OworCXdkLmNsZWFyZWQgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIDAsCisJCQkJICAgICAgIHdyaXRlX2Rpcl9ibG9jaywgJndkKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmICh3ZC5lcnIpCisJCXJldHVybiB3ZC5lcnI7CisKKwllMmZzY2tfcmVhZF9pbm9kZShjdHgsIGlubywgJmlub2RlLCAicmVoYXNoX2RpciIpOworCWlmIChjb21wcmVzcykKKwkJaW5vZGUuaV9mbGFncyAmPSB+RVhUMl9JTkRFWF9GTDsKKwllbHNlCisJCWlub2RlLmlfZmxhZ3MgfD0gRVhUMl9JTkRFWF9GTDsKKwlpbm9kZS5pX3NpemUgPSBvdXRkaXItPm51bSAqIGZzLT5ibG9ja3NpemU7CisJZXh0MmZzX2libGtfc3ViX2Jsb2NrcyhmcywgJmlub2RlLCB3ZC5jbGVhcmVkKTsKKwllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgInJlaGFzaF9kaXIiKTsKKworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZTJmc2NrX3JlaGFzaF9kaXIoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubykKK3sKKwlleHQyX2ZpbHN5cyAJCWZzID0gY3R4LT5mczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJaW5vZGU7CisJY2hhcgkJCSpkaXJfYnVmID0gMDsKKwlzdHJ1Y3QgZmlsbF9kaXJfc3RydWN0CWZkOworCXN0cnVjdCBvdXRfZGlyCQlvdXRkaXI7CisKKwlvdXRkaXIubWF4ID0gb3V0ZGlyLm51bSA9IDA7CisJb3V0ZGlyLmJ1ZiA9IDA7CisJb3V0ZGlyLmhhc2hlcyA9IDA7CisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgInJlaGFzaF9kaXIiKTsKKworCXJldHZhbCA9IEVOT01FTTsKKwlmZC5oYXJyYXkgPSAwOworCWRpcl9idWYgPSBtYWxsb2MoaW5vZGUuaV9zaXplKTsKKwlpZiAoIWRpcl9idWYpCisJCWdvdG8gZXJyb3V0OworCisJZmQubWF4X2FycmF5ID0gaW5vZGUuaV9zaXplIC8gMzI7CisJZmQubnVtX2FycmF5ID0gMDsKKwlmZC5oYXJyYXkgPSBtYWxsb2MoZmQubWF4X2FycmF5ICogc2l6ZW9mKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisJaWYgKCFmZC5oYXJyYXkpCisJCWdvdG8gZXJyb3V0OworCisJZmQuY3R4ID0gY3R4OworCWZkLmJ1ZiA9IGRpcl9idWY7CisJZmQuaW5vZGUgPSAmaW5vZGU7CisJZmQuZXJyID0gMDsKKwlmZC5kaXJfc2l6ZSA9IDA7CisJZmQuY29tcHJlc3MgPSAwOworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSB8fAorCSAgICAoaW5vZGUuaV9zaXplIC8gZnMtPmJsb2Nrc2l6ZSkgPCAyKQorCQlmZC5jb21wcmVzcyA9IDE7CisJZmQucGFyZW50ID0gMDsKKworcmV0cnlfbm9oYXNoOgorCS8qIFJlYWQgaW4gdGhlIGVudGlyZSBkaXJlY3RvcnkgaW50byBtZW1vcnkgKi8KKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywgMCwgMCwKKwkJCQkgICAgICAgZmlsbF9kaXJfYmxvY2ssICZmZCk7CisJaWYgKGZkLmVycikgeworCQlyZXR2YWwgPSBmZC5lcnI7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qIAorCSAqIElmIHRoZSBlbnRyaWVzIHJlYWQgYXJlIGxlc3MgdGhhbiBhIGJsb2NrLCB0aGVuIGRvbid0IGluZGV4CisJICogdGhlIGRpcmVjdG9yeQorCSAqLworCWlmICghZmQuY29tcHJlc3MgJiYgKGZkLmRpcl9zaXplIDwgKGZzLT5ibG9ja3NpemUgLSAyNCkpKSB7CisJCWZkLmNvbXByZXNzID0gMTsKKwkJZmQuZGlyX3NpemUgPSAwOworCQlmZC5udW1fYXJyYXkgPSAwOworCQlnb3RvIHJldHJ5X25vaGFzaDsKKwl9CisKKyNpZiAwCisJcHJpbnRmKCIlZCBlbnRyaWVzICglZCBieXRlcykgZm91bmQgaW4gaW5vZGUgJWRcbiIsCisJICAgICAgIGZkLm51bV9hcnJheSwgZmQuZGlyX3NpemUsIGlubyk7CisjZW5kaWYKKworCS8qIFNvcnQgdGhlIGxpc3QgKi8KK3Jlc29ydDoKKwlpZiAoZmQuY29tcHJlc3MpCisJCXFzb3J0KGZkLmhhcnJheSsyLCBmZC5udW1fYXJyYXktMiwgc2l6ZW9mKHN0cnVjdCBoYXNoX2VudHJ5KSwKKwkJICAgICAgaGFzaF9jbXApOworCWVsc2UKKwkJcXNvcnQoZmQuaGFycmF5LCBmZC5udW1fYXJyYXksIHNpemVvZihzdHJ1Y3QgaGFzaF9lbnRyeSksCisJCSAgICAgIGhhc2hfY21wKTsKKworCS8qCisJICogTG9vayBmb3IgZHVwbGljYXRlcworCSAqLworCWlmIChkdXBsaWNhdGVfc2VhcmNoX2FuZF9maXgoY3R4LCBmcywgaW5vLCAmZmQpKQorCQlnb3RvIHJlc29ydDsKKworCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSB7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qIFNvcnQgbm9uLWhhc2hlZCBkaXJlY3RvcmllcyBieSBpbm9kZSBudW1iZXIgKi8KKwlpZiAoZmQuY29tcHJlc3MpCisJCXFzb3J0KGZkLmhhcnJheSsyLCBmZC5udW1fYXJyYXktMiwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBoYXNoX2VudHJ5KSwgaW5vX2NtcCk7CisKKwkvKgorCSAqIENvcHkgdGhlIGRpcmVjdG9yeSBlbnRyaWVzLiAgSW4gYSBodHJlZSBkaXJlY3RvcnkgdGhlc2UKKwkgKiB3aWxsIGJlY29tZSB0aGUgbGVhZiBub2Rlcy4KKwkgKi8KKwlyZXR2YWwgPSBjb3B5X2Rpcl9lbnRyaWVzKGN0eCwgJmZkLCAmb3V0ZGlyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWZyZWUoZGlyX2J1Zik7IGRpcl9idWYgPSAwOworCisJaWYgKCFmZC5jb21wcmVzcykgeworCQkvKiBDYWxjdWxhdGUgdGhlIGludGVyaW9yIG5vZGVzICovCisJCXJldHZhbCA9IGNhbGN1bGF0ZV90cmVlKGZzLCAmb3V0ZGlyLCBpbm8sIGZkLnBhcmVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwlyZXR2YWwgPSB3cml0ZV9kaXJlY3RvcnkoY3R4LCBmcywgJm91dGRpciwgaW5vLCBmZC5jb21wcmVzcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKK2Vycm91dDoKKwlmcmVlKGRpcl9idWYpOworCWZyZWUoZmQuaGFycmF5KTsKKworCWZyZWVfb3V0X2Rpcigmb3V0ZGlyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIGUyZnNja19yZWhhc2hfZGlyZWN0b3JpZXMoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJcGN0eDsKKyNpZmRlZiBSRVNPVVJDRV9UUkFDSworCXN0cnVjdCByZXNvdXJjZV90cmFjawlydHJhY2s7CisjZW5kaWYKKwlzdHJ1Y3QgZGlyX2luZm8JCSpkaXI7CisJZXh0Ml91MzJfaXRlcmF0ZSAJaXRlcjsKKwlzdHJ1Y3QgZGlyX2luZm9faXRlciAqCWRpcmluZm9faXRlciA9IDA7CisJZXh0Ml9pbm9fdAkJaW5vOworCWVycmNvZGVfdAkJcmV0dmFsOworCWludAkJCWN1ciwgbWF4LCBhbGxfZGlycywgZmlyc3QgPSAxOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCBjdHgtPmZzLT5pbyk7CisJYWxsX2RpcnMgPSBjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0NPTVBSRVNTX0RJUlM7CisKKwlpZiAoIWN0eC0+ZGlyc190b19oYXNoICYmICFhbGxfZGlycykKKwkJcmV0dXJuOworCisJZTJmc2NrX2dldF9sb3N0X2FuZF9mb3VuZChjdHgsIDApOworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKworCWN1ciA9IDA7CisJaWYgKGFsbF9kaXJzKSB7CisJCWRpcmluZm9faXRlciA9IGUyZnNja19kaXJfaW5mb19pdGVyX2JlZ2luKGN0eCk7CisJCW1heCA9IGUyZnNja19nZXRfbnVtX2RpcmluZm8oY3R4KTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9iZWdpbihjdHgtPmRpcnNfdG9faGFzaCwKKwkJCQkJCSAgICAgICAmaXRlcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjdHguZXJyY29kZSA9IHJldHZhbDsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfM0FfT1BUSU1JWkVfSVRFUiwgJnBjdHgpOworCQkJcmV0dXJuOworCQl9CisJCW1heCA9IGV4dDJmc191MzJfbGlzdF9jb3VudChjdHgtPmRpcnNfdG9faGFzaCk7CisJfQorCXdoaWxlICgxKSB7CisJCWlmIChhbGxfZGlycykgeworCQkJaWYgKChkaXIgPSBlMmZzY2tfZGlyX2luZm9faXRlcihjdHgsCisJCQkJCQkJZGlyaW5mb19pdGVyKSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCWlubyA9IGRpci0+aW5vOworCQl9IGVsc2UgeworCQkJaWYgKCFleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZShpdGVyLCAmaW5vKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaW5vID09IGN0eC0+bG9zdF9hbmRfZm91bmQpCisJCQljb250aW51ZTsKKwkJcGN0eC5kaXIgPSBpbm87CisJCWlmIChmaXJzdCkgeworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8zQV9QQVNTX0hFQURFUiwgJnBjdHgpOworCQkJZmlyc3QgPSAwOworCQl9CisjaWYgMAorCQlmaXhfcHJvYmxlbShjdHgsIFBSXzNBX09QVElNSVpFX0RJUiwgJnBjdHgpOworI2VuZGlmCisJCXBjdHguZXJyY29kZSA9IGUyZnNja19yZWhhc2hfZGlyKGN0eCwgaW5vKTsKKwkJaWYgKHBjdHguZXJyY29kZSkgeworCQkJZW5kX3Byb2JsZW1fbGF0Y2goY3R4LCBQUl9MQVRDSF9PUFRJTUlaRV9ESVIpOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8zQV9PUFRJTUlaRV9ESVJfRVJSLCAmcGN0eCk7CisJCX0KKwkJaWYgKGN0eC0+cHJvZ3Jlc3MgJiYgIWN0eC0+cHJvZ3Jlc3NfZmQpCisJCQllMmZzY2tfc2ltcGxlX3Byb2dyZXNzKGN0eCwgIlJlYnVpbGRpbmcgZGlyZWN0b3J5IiwKKwkJCSAgICAgICAxMDAuMCAqIChmbG9hdCkgKCsrY3VyKSAvIChmbG9hdCkgbWF4LCBpbm8pOworCX0KKwllbmRfcHJvYmxlbV9sYXRjaChjdHgsIFBSX0xBVENIX09QVElNSVpFX0RJUik7CisJaWYgKGFsbF9kaXJzKQorCQllMmZzY2tfZGlyX2luZm9faXRlcl9lbmQoY3R4LCBkaXJpbmZvX2l0ZXIpOworCWVsc2UKKwkJZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kKGl0ZXIpOworCisJaWYgKGN0eC0+ZGlyc190b19oYXNoKQorCQlleHQyZnNfdTMyX2xpc3RfZnJlZShjdHgtPmRpcnNfdG9faGFzaCk7CisJY3R4LT5kaXJzX3RvX2hhc2ggPSAwOworCisJcHJpbnRfcmVzb3VyY2VfdHJhY2soY3R4LCAiUGFzcyAzQSIsICZydHJhY2ssIGN0eC0+ZnMtPmlvKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svcmV2b2tlLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3Jldm9rZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0M2U0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3Jldm9rZS5jCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICogbGludXgvZnMvcmV2b2tlLmMKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+LCAyMDAwCisgKgorICogQ29weXJpZ2h0IDIwMDAgUmVkIEhhdCBjb3JwIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogSm91cm5hbCByZXZva2Ugcm91dGluZXMgZm9yIHRoZSBnZW5lcmljIGZpbGVzeXN0ZW0gam91cm5hbGluZyBjb2RlOworICogcGFydCBvZiB0aGUgZXh0MmZzIGpvdXJuYWxpbmcgc3lzdGVtLgorICoKKyAqIFJldm9rZSBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgdG8gcHJldmVudCBvbGQgbG9nIHJlY29yZHMgZm9yIGRlbGV0ZWQKKyAqIG1ldGFkYXRhIGZyb20gYmVpbmcgcmVwbGF5ZWQgb24gdG9wIG9mIG5ld2VyIGRhdGEgdXNpbmcgdGhlIHNhbWUKKyAqIGJsb2Nrcy4gIFRoZSByZXZva2UgbWVjaGFuaXNtIGlzIHVzZWQgaW4gdHdvIHNlcGFyYXRlIHBsYWNlczoKKyAqCisgKiArIENvbW1pdDogZHVyaW5nIGNvbW1pdCB3ZSB3cml0ZSB0aGUgZW50aXJlIGxpc3Qgb2YgdGhlIGN1cnJlbnQKKyAqICAgdHJhbnNhY3Rpb24ncyByZXZva2VkIGJsb2NrcyB0byB0aGUgam91cm5hbAorICoKKyAqICsgUmVjb3Zlcnk6IGR1cmluZyByZWNvdmVyeSB3ZSByZWNvcmQgdGhlIHRyYW5zYWN0aW9uIElEIG9mIGFsbAorICogICByZXZva2VkIGJsb2Nrcy4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByZXZva2UgcmVjb3JkcyBpbiB0aGUgbG9nCisgKiAgIGZvciBhIHNpbmdsZSBibG9jaywgb25seSB0aGUgbGFzdCBvbmUgY291bnRzLCBhbmQgaWYgdGhlcmUgaXMgYSBsb2cKKyAqICAgZW50cnkgZm9yIGEgYmxvY2sgYmV5b25kIHRoZSBsYXN0IHJldm9rZSwgdGhlbiB0aGF0IGxvZyBlbnRyeSBzdGlsbAorICogICBnZXRzIHJlcGxheWVkLgorICoKKyAqIFdlIGNhbiBnZXQgaW50ZXJhY3Rpb25zIGJldHdlZW4gcmV2b2tlcyBhbmQgbmV3IGxvZyBkYXRhIHdpdGhpbiBhCisgKiBzaW5nbGUgdHJhbnNhY3Rpb246CisgKgorICogQmxvY2sgaXMgcmV2b2tlZCBhbmQgdGhlbiBqb3VybmFsZWQ6CisgKiAgIFRoZSBkZXNpcmVkIGVuZCByZXN1bHQgaXMgdGhlIGpvdXJuYWxpbmcgb2YgdGhlIG5ldyBibG9jaywgc28gd2UKKyAqICAgY2FuY2VsIHRoZSByZXZva2UgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLgorICoKKyAqIEJsb2NrIGlzIGpvdXJuYWxlZCBhbmQgdGhlbiByZXZva2VkOgorICogICBUaGUgcmV2b2tlIG11c3QgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHdyaXRlIG9mIHRoZSBibG9jaywgc28gd2UKKyAqICAgbmVlZCBlaXRoZXIgdG8gY2FuY2VsIHRoZSBqb3VybmFsIGVudHJ5IG9yIHRvIHdyaXRlIHRoZSByZXZva2UKKyAqICAgbGF0ZXIgaW4gdGhlIGxvZyB0aGFuIHRoZSBsb2cgYmxvY2suICBJbiB0aGlzIGNhc2UsIHdlIGNob29zZSB0aGUKKyAqICAgbGF0dGVyOiBqb3VybmFsaW5nIGEgYmxvY2sgY2FuY2VscyBhbnkgcmV2b2tlIHJlY29yZCBmb3IgdGhhdCBibG9jaworICogICBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgc28gYW55IHJldm9rZSBmb3IgdGhhdCBibG9jayBpbiB0aGUKKyAqICAgdHJhbnNhY3Rpb24gbXVzdCBoYXZlIGhhcHBlbmVkIGFmdGVyIHRoZSBibG9jayB3YXMgam91cm5hbGVkIGFuZCBzbworICogICB0aGUgcmV2b2tlIG11c3QgdGFrZSBwcmVjZWRlbmNlLgorICoKKyAqIEJsb2NrIGlzIHJldm9rZWQgYW5kIHRoZW4gd3JpdHRlbiBhcyBkYXRhOgorICogICBUaGUgZGF0YSB3cml0ZSBpcyBhbGxvd2VkIHRvIHN1Y2NlZWQsIGJ1dCB0aGUgcmV2b2tlIGlzIF9ub3RfCisgKiAgIGNhbmNlbGxlZC4gIFdlIHN0aWxsIG5lZWQgdG8gcHJldmVudCBvbGQgbG9nIHJlY29yZHMgZnJvbQorICogICBvdmVyd3JpdGluZyB0aGUgbmV3IGRhdGEuICBXZSBkb24ndCBldmVuIG5lZWQgdG8gY2xlYXIgdGhlIHJldm9rZQorICogICBiaXQgaGVyZS4KKyAqCisgKiBSZXZva2UgaW5mb3JtYXRpb24gb24gYnVmZmVycyBpcyBhIHRyaS1zdGF0ZSB2YWx1ZToKKyAqCisgKiBSZXZva2VWYWxpZCBjbGVhcjoJbm8gY2FjaGVkIHJldm9rZSBzdGF0dXMsIG5lZWQgdG8gbG9vayBpdCB1cAorICogUmV2b2tlVmFsaWQgc2V0LCBSZXZva2VkIGNsZWFyOgorICoJCQlidWZmZXIgaGFzIG5vdCBiZWVuIHJldm9rZWQsIGFuZCBjYW5jZWxfcmV2b2tlCisgKgkJCW5lZWQgZG8gbm90aGluZy4KKyAqIFJldm9rZVZhbGlkIHNldCwgUmV2b2tlZCBzZXQ6CisgKgkJCWJ1ZmZlciBoYXMgYmVlbiByZXZva2VkLgorICovCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgImpmc191c2VyLmgiCisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qYmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2Nrcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNlbmRpZgorCitzdGF0aWMgbGttZW1fY2FjaGVfdCAqcmV2b2tlX3JlY29yZF9jYWNoZTsKK3N0YXRpYyBsa21lbV9jYWNoZV90ICpyZXZva2VfdGFibGVfY2FjaGU7CisKKy8qIEVhY2ggcmV2b2tlIHJlY29yZCByZXByZXNlbnRzIG9uZSBzaW5nbGUgcmV2b2tlZCBibG9jay4gIER1cmluZworICAgam91cm5hbCByZXBsYXksIHRoaXMgaW52b2x2ZXMgcmVjb3JkaW5nIHRoZSB0cmFuc2FjdGlvbiBJRCBvZiB0aGUKKyAgIGxhc3QgdHJhbnNhY3Rpb24gdG8gcmV2b2tlIHRoaXMgYmxvY2suICovCisKK3N0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zCit7CisJc3RydWN0IGxpc3RfaGVhZCAgaGFzaDsKKwl0aWRfdAkJICBzZXF1ZW5jZTsJLyogVXNlZCBmb3IgcmVjb3Zlcnkgb25seSAqLworCXVuc2lnbmVkIGxvbmcJICBibG9ja25yOworfTsKKworCisvKiBUaGUgcmV2b2tlIHRhYmxlIGlzIGp1c3QgYSBzaW1wbGUgaGFzaCB0YWJsZSBvZiByZXZva2UgcmVjb3Jkcy4gKi8KK3N0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3MKK3sKKwkvKiBJdCBpcyBjb25jZWl2YWJsZSB0aGF0IHdlIG1pZ2h0IHdhbnQgYSBsYXJnZXIgaGFzaCB0YWJsZQorCSAqIGZvciByZWNvdmVyeS4gIE11c3QgYmUgYSBwb3dlciBvZiB0d28uICovCisJaW50CQkgIGhhc2hfc2l6ZTsKKwlpbnQJCSAgaGFzaF9zaGlmdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX3RhYmxlOworfTsKKworCisjaWZkZWYgX19LRVJORUxfXworc3RhdGljIHZvaWQgd3JpdGVfb25lX3Jldm9rZV9yZWNvcmQoam91cm5hbF90ICosIHRyYW5zYWN0aW9uX3QgKiwKKwkJCQkgICAgc3RydWN0IGpvdXJuYWxfaGVhZCAqKiwgaW50ICosCisJCQkJICAgIHN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICopOworc3RhdGljIHZvaWQgZmx1c2hfZGVzY3JpcHRvcihqb3VybmFsX3QgKiwgc3RydWN0IGpvdXJuYWxfaGVhZCAqLCBpbnQpOworI2VuZGlmCisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zIHRvIG1haW50YWluIHRoZSByZXZva2UgdGFibGUgKi8KKworLyogQm9ycm93ZWQgZnJvbSBidWZmZXIuYzogdGhpcyBpcyBhIHRyaWVkIGFuZCB0ZXN0ZWQgYmxvY2sgaGFzaCBmdW5jdGlvbiAqLworc3RhdGljIGlubGluZSBpbnQgaGFzaChqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGxvbmcgYmxvY2spCit7CisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqdGFibGUgPSBqb3VybmFsLT5qX3Jldm9rZTsKKwlpbnQgaGFzaF9zaGlmdCA9IHRhYmxlLT5oYXNoX3NoaWZ0OworCisJcmV0dXJuICgoYmxvY2sgPDwgKGhhc2hfc2hpZnQgLSA2KSkgXgorCQkoYmxvY2sgPj4gMTMpIF4KKwkJKGJsb2NrIDw8IChoYXNoX3NoaWZ0IC0gMTIpKSkgJiAodGFibGUtPmhhc2hfc2l6ZSAtIDEpOworfQorCitzdGF0aWMgaW50IGluc2VydF9yZXZva2VfaGFzaChqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGxvbmcgYmxvY2tuciwKKwkJCSAgICAgIHRpZF90IHNlcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX2xpc3Q7CisJc3RydWN0IGpiZF9yZXZva2VfcmVjb3JkX3MgKnJlY29yZDsKKworI2lmZGVmIF9fS0VSTkVMX18KK3JlcGVhdDoKKyNlbmRpZgorCXJlY29yZCA9IGttZW1fY2FjaGVfYWxsb2MocmV2b2tlX3JlY29yZF9jYWNoZSwgR0ZQX05PRlMpOworCWlmICghcmVjb3JkKQorCQlnb3RvIG9vbTsKKworCXJlY29yZC0+c2VxdWVuY2UgPSBzZXE7CisJcmVjb3JkLT5ibG9ja25yID0gYmxvY2tucjsKKwloYXNoX2xpc3QgPSAmam91cm5hbC0+al9yZXZva2UtPmhhc2hfdGFibGVbaGFzaChqb3VybmFsLCBibG9ja25yKV07CisJbGlzdF9hZGQoJnJlY29yZC0+aGFzaCwgaGFzaF9saXN0KTsKKwlyZXR1cm4gMDsKKworb29tOgorI2lmZGVmIF9fS0VSTkVMX18KKwlpZiAoIWpvdXJuYWxfb29tX3JldHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlqYmRfZGVidWcoMSwgIkVOT01FTSBpbiAiIF9fRlVOQ1RJT05fXyAiLCByZXRyeWluZy5cbiIpOworCWN1cnJlbnQtPnBvbGljeSB8PSBTQ0hFRF9ZSUVMRDsKKwlzY2hlZHVsZSgpOworCWdvdG8gcmVwZWF0OworI2Vsc2UKKwlyZXR1cm4gLUVOT01FTTsKKyNlbmRpZgorfQorCisvKiBGaW5kIGEgcmV2b2tlIHJlY29yZCBpbiB0aGUgam91cm5hbCdzIGhhc2ggdGFibGUuICovCisKK3N0YXRpYyBzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqZmluZF9yZXZva2VfcmVjb3JkKGpvdXJuYWxfdCAqam91cm5hbCwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tucikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX2xpc3Q7CisJc3RydWN0IGpiZF9yZXZva2VfcmVjb3JkX3MgKnJlY29yZDsKKworCWhhc2hfbGlzdCA9ICZqb3VybmFsLT5qX3Jldm9rZS0+aGFzaF90YWJsZVtoYXNoKGpvdXJuYWwsIGJsb2NrbnIpXTsKKworCXJlY29yZCA9IChzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqKSBoYXNoX2xpc3QtPm5leHQ7CisJd2hpbGUgKCYocmVjb3JkLT5oYXNoKSAhPSBoYXNoX2xpc3QpIHsKKwkJaWYgKHJlY29yZC0+YmxvY2tuciA9PSBibG9ja25yKQorCQkJcmV0dXJuIHJlY29yZDsKKwkJcmVjb3JkID0gKHN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICopIHJlY29yZC0+aGFzaC5uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IF9faW5pdCBqb3VybmFsX2luaXRfcmV2b2tlX2NhY2hlcyh2b2lkKQoreworCXJldm9rZV9yZWNvcmRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmV2b2tlX3JlY29yZCIsCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyksCisJCQkJCSAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7CisJaWYgKHJldm9rZV9yZWNvcmRfY2FjaGUgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXZva2VfdGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmV2b2tlX3RhYmxlIiwKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3MpLAorCQkJCQkgICAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV2b2tlX3RhYmxlX2NhY2hlID09IDApIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJldm9rZV9yZWNvcmRfY2FjaGUpOworCQlyZXZva2VfcmVjb3JkX2NhY2hlID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGpvdXJuYWxfZGVzdHJveV9yZXZva2VfY2FjaGVzKHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KHJldm9rZV9yZWNvcmRfY2FjaGUpOworCXJldm9rZV9yZWNvcmRfY2FjaGUgPSAwOworCWttZW1fY2FjaGVfZGVzdHJveShyZXZva2VfdGFibGVfY2FjaGUpOworCXJldm9rZV90YWJsZV9jYWNoZSA9IDA7Cit9CisKKy8qIEluaXRpYWxpc2UgdGhlIHJldm9rZSB0YWJsZSBmb3IgYSBnaXZlbiBqb3VybmFsIHRvIGEgZ2l2ZW4gc2l6ZS4gKi8KKworaW50IGpvdXJuYWxfaW5pdF9yZXZva2Uoam91cm5hbF90ICpqb3VybmFsLCBpbnQgaGFzaF9zaXplKQoreworCWludCBzaGlmdCwgdG1wOworCisJSl9BU1NFUlQgKGpvdXJuYWwtPmpfcmV2b2tlID09IE5VTEwpOworCisJam91cm5hbC0+al9yZXZva2UgPSBrbWVtX2NhY2hlX2FsbG9jKHJldm9rZV90YWJsZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFqb3VybmFsLT5qX3Jldm9rZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoYXNoX3NpemUgaXMgYSBwb3dlciBvZiB0d28gKi8KKwlKX0FTU0VSVCAoKGhhc2hfc2l6ZSAmIChoYXNoX3NpemUtMSkpID09IDApOworCisJam91cm5hbC0+al9yZXZva2UtPmhhc2hfc2l6ZSA9IGhhc2hfc2l6ZTsKKworCXNoaWZ0ID0gMDsKKwl0bXAgPSBoYXNoX3NpemU7CisJd2hpbGUoKHRtcCA+Pj0gMVVMKSAhPSAwVUwpCisJCXNoaWZ0Kys7CisJam91cm5hbC0+al9yZXZva2UtPmhhc2hfc2hpZnQgPSBzaGlmdDsKKworCWpvdXJuYWwtPmpfcmV2b2tlLT5oYXNoX3RhYmxlID0KKwkJa21hbGxvYyhoYXNoX3NpemUgKiBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOworCWlmICgham91cm5hbC0+al9yZXZva2UtPmhhc2hfdGFibGUpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJldm9rZV90YWJsZV9jYWNoZSwgam91cm5hbC0+al9yZXZva2UpOworCQlqb3VybmFsLT5qX3Jldm9rZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAodG1wID0gMDsgdG1wIDwgaGFzaF9zaXplOyB0bXArKykKKwkJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfcmV2b2tlLT5oYXNoX3RhYmxlW3RtcF0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERlc3RveSBhIGpvdXJuYWwncyByZXZva2UgdGFibGUuICBUaGUgdGFibGUgbXVzdCBhbHJlYWR5IGJlIGVtcHR5ISAqLworCit2b2lkIGpvdXJuYWxfZGVzdHJveV9yZXZva2Uoam91cm5hbF90ICpqb3VybmFsKQoreworCXN0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3MgKnRhYmxlOworCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2hfbGlzdDsKKwlpbnQgaTsKKworCXRhYmxlID0gam91cm5hbC0+al9yZXZva2U7CisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuOworCisJZm9yIChpPTA7IGk8dGFibGUtPmhhc2hfc2l6ZTsgaSsrKSB7CisJCWhhc2hfbGlzdCA9ICZ0YWJsZS0+aGFzaF90YWJsZVtpXTsKKwkJSl9BU1NFUlQgKGxpc3RfZW1wdHkoaGFzaF9saXN0KSk7CisJfQorCisJa2ZyZWUodGFibGUtPmhhc2hfdGFibGUpOworCWttZW1fY2FjaGVfZnJlZShyZXZva2VfdGFibGVfY2FjaGUsIHRhYmxlKTsKKwlqb3VybmFsLT5qX3Jldm9rZSA9IE5VTEw7Cit9CisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIGpvdXJuYWxfcmV2b2tlOiByZXZva2UgYSBnaXZlbiBidWZmZXJfaGVhZCBmcm9tIHRoZSBqb3VybmFsLiAgVGhpcworICogcHJldmVudHMgdGhlIGJsb2NrIGZyb20gYmVpbmcgcmVwbGF5ZWQgZHVyaW5nIHJlY292ZXJ5IGlmIHdlIHRha2UgYQorICogY3Jhc2ggYWZ0ZXIgdGhpcyBjdXJyZW50IHRyYW5zYWN0aW9uIGNvbW1pdHMuICBBbnkgc3Vic2VxdWVudAorICogbWV0YWRhdGEgd3JpdGVzIG9mIHRoZSBidWZmZXIgaW4gdGhpcyB0cmFuc2FjdGlvbiBjYW5jZWwgdGhlCisgKiByZXZva2UuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY2FsbCBtYXkgYmxvY2sgLS0tIGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gbWFrZQorICogc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIGNhbGxzIHRvIGpvdXJuYWxfd3JpdGVfbWV0YWRhdGEKKyAqIGJlZm9yZSB0aGUgcmV2b2tlIGlzIGNvbXBsZXRlLiAgSW4gZXh0MywgdGhpcyBpbXBsaWVzIGNhbGxpbmcgdGhlCisgKiByZXZva2UgYmVmb3JlIGNsZWFyaW5nIHRoZSBibG9jayBiaXRtYXAgd2hlbiB3ZSBhcmUgZGVsZXRpbmcKKyAqIG1ldGFkYXRhLgorICoKKyAqIFJldm9rZSBwZXJmb3JtcyBhIGpvdXJuYWxfZm9yZ2V0IG9uIGFueSBidWZmZXJfaGVhZCBwYXNzZWQgaW4gYXMgYQorICogcGFyYW1ldGVyLCBidXQgZG9lcyBfbm90XyBmb3JnZXQgdGhlIGJ1ZmZlcl9oZWFkIGlmIHRoZSBiaCB3YXMgb25seQorICogZm91bmQgaW1wbGljaXRseS4KKyAqCisgKiBiaF9pbiBtYXkgbm90IGJlIGEgam91cm5hbGxlZCBidWZmZXIgLSBpdCBtYXkgaGF2ZSBjb21lIG9mZgorICogdGhlIGhhc2ggdGFibGVzIHdpdGhvdXQgYW4gYXR0YWNoZWQgam91cm5hbF9oZWFkLgorICoKKyAqIElmIGJoX2luIGlzIG5vbi16ZXJvLCBqb3VybmFsX3Jldm9rZSgpIHdpbGwgZGVjcmVtZW50IGl0cyBiX2NvdW50CisgKiBieSBvbmUuCisgKi8KKworaW50IGpvdXJuYWxfcmV2b2tlKGhhbmRsZV90ICpoYW5kbGUsIHVuc2lnbmVkIGxvbmcgYmxvY2tuciwKKwkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9pbikKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlqb3VybmFsX3QgKmpvdXJuYWw7CisJa2Rldl90IGRldjsKKwlpbnQgZXJyOworCisJaWYgKGJoX2luKQorCQlCVUZGRVJfVFJBQ0UoYmhfaW4sICJlbnRlciIpOworCisJam91cm5hbCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsOworCWlmICgham91cm5hbF9zZXRfZmVhdHVyZXMoam91cm5hbCwgMCwgMCwgSkZTX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFKSl7CisJCUpfQVNTRVJUICghIkNhbm5vdCBzZXQgcmV2b2tlIGZlYXR1cmUhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldiA9IGpvdXJuYWwtPmpfZnNfZGV2OworCWJoID0gYmhfaW47CisKKwlpZiAoIWJoKSB7CisJCWJoID0gZ2V0X2hhc2hfdGFibGUoZGV2LCBibG9ja25yLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CisJCWlmIChiaCkKKwkJCUJVRkZFUl9UUkFDRShiaCwgImZvdW5kIG9uIGhhc2giKTsKKwl9CisjaWZkZWYgSkJEX0VYUEVOU0lWRV9DSEVDS0lORworCWVsc2UgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoMjsKKworCQkvKiBJZiB0aGVyZSBpcyBhIGRpZmZlcmVudCBidWZmZXJfaGVhZCBseWluZyBhcm91bmQgaW4KKwkJICogbWVtb3J5IGFueXdoZXJlLi4uICovCisJCWJoMiA9IGdldF9oYXNoX3RhYmxlKGRldiwgYmxvY2tuciwgam91cm5hbC0+al9ibG9ja3NpemUpOworCQlpZiAoYmgyKSB7CisJCQkvKiAuLi4gYW5kIGl0IGhhcyBSZXZva2VWYWxpZCBzdGF0dXMuLi4gKi8KKwkJCWlmICgoYmgyICE9IGJoKSAmJgorCQkJICAgIHRlc3RfYml0KEJIX1Jldm9rZVZhbGlkLCAmYmgyLT5iX3N0YXRlKSkKKwkJCQkvKiAuLi50aGVuIGl0IGJldHRlciBiZSByZXZva2VkIHRvbywKKwkJCQkgKiBzaW5jZSBpdCdzIGlsbGVnYWwgdG8gY3JlYXRlIGEgcmV2b2tlCisJCQkJICogcmVjb3JkIGFnYWluc3QgYSBidWZmZXJfaGVhZCB3aGljaCBpcworCQkJCSAqIG5vdCBtYXJrZWQgcmV2b2tlZCAtLS0gdGhhdCB3b3VsZAorCQkJCSAqIHJpc2sgbWlzc2luZyBhIHN1YnNlcXVlbnQgcmV2b2tlCisJCQkJICogY2FuY2VsLiAqLworCQkJCUpfQVNTRVJUX0JIKGJoMiwgdGVzdF9iaXQoQkhfUmV2b2tlZCwgJgorCQkJCQkJCSAgYmgyLT5iX3N0YXRlKSk7CisJCQlfX2JyZWxzZShiaDIpOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBXZSByZWFsbHkgb3VnaHQgbm90IGV2ZXIgdG8gcmV2b2tlIHR3aWNlIGluIGEgcm93IHdpdGhvdXQKKyAgICAgICAgICAgZmlyc3QgaGF2aW5nIHRoZSByZXZva2UgY2FuY2VsbGVkOiBpdCdzIGlsbGVnYWwgdG8gZnJlZSBhCisgICAgICAgICAgIGJsb2NrIHR3aWNlIHdpdGhvdXQgYWxsb2NhdGluZyBpdCBpbiBiZXR3ZWVuISAqLworCWlmIChiaCkgeworCQlKX0FTU0VSVF9CSChiaCwgIXRlc3RfYml0KEJIX1Jldm9rZWQsICZiaC0+Yl9zdGF0ZSkpOworCQlzZXRfYml0KEJIX1Jldm9rZWQsICZiaC0+Yl9zdGF0ZSk7CisJCXNldF9iaXQoQkhfUmV2b2tlVmFsaWQsICZiaC0+Yl9zdGF0ZSk7CisJCWlmIChiaF9pbikgeworCQkJQlVGRkVSX1RSQUNFKGJoX2luLCAiY2FsbCBqb3VybmFsX2ZvcmdldCIpOworCQkJam91cm5hbF9mb3JnZXQoaGFuZGxlLCBiaF9pbik7CisJCX0gZWxzZSB7CisJCQlCVUZGRVJfVFJBQ0UoYmgsICJjYWxsIGJyZWxzZSIpOworCQkJX19icmVsc2UoYmgpOworCQl9CisJfQorCisJbG9ja19qb3VybmFsKGpvdXJuYWwpOworCWpiZF9kZWJ1ZygyLCAiaW5zZXJ0IHJldm9rZSBmb3IgYmxvY2sgJWx1LCBiaF9pbj0lcFxuIiwgYmxvY2tuciwgYmhfaW4pOworCWVyciA9IGluc2VydF9yZXZva2VfaGFzaChqb3VybmFsLCBibG9ja25yLAorCQkJCWhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQpOworCXVubG9ja19qb3VybmFsKGpvdXJuYWwpOworCUJVRkZFUl9UUkFDRShiaF9pbiwgImV4aXQiKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2FuY2VsIGFuIG91dHN0YW5kaW5nIHJldm9rZS4gIEZvciB1c2Ugb25seSBpbnRlcm5hbGx5IGJ5IHRoZQorICogam91cm5hbGluZyBjb2RlIChjYWxsZWQgZnJvbSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpLgorICoKKyAqIFdlIHRydXN0IHRoZSBCSF9SZXZva2VkIGJpdCBvbiB0aGUgYnVmZmVyIGlmIHRoZSBidWZmZXIgaXMgYWxyZWFkeQorICogYmVpbmcgam91cm5hbGVkOiBpZiB0aGVyZSBpcyBubyByZXZva2UgcGVuZGluZyBvbiB0aGUgYnVmZmVyLCB0aGVuIHdlCisgKiBkb24ndCBkbyBhbnl0aGluZyBoZXJlLgorICoKKyAqIFRoaXMgd291bGQgYnJlYWsgaWYgaXQgd2VyZSBwb3NzaWJsZSBmb3IgYSBidWZmZXIgdG8gYmUgcmV2b2tlZCBhbmQKKyAqIGRpc2NhcmRlZCwgYW5kIHRoZW4gcmVhbGxvY2F0ZWQgd2l0aGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiAgSW4gc3VjaAorICogYSBjYXNlIHdlIHdvdWxkIGhhdmUgbG9zdCB0aGUgcmV2b2tlZCBiaXQsIGJ1dCB3aGVuIHdlIGFycml2ZWQgaGVyZQorICogdGhlIHNlY29uZCB0aW1lIHdlIHdvdWxkIHN0aWxsIGhhdmUgYSBwZW5kaW5nIHJldm9rZSB0byBjYW5jZWwuICBTbywKKyAqIGRvIG5vdCB0cnVzdCB0aGUgUmV2b2tlZCBiaXQgb24gYnVmZmVycyB1bmxlc3MgUmV2b2tlVmFsaWQgaXMgYWxzbworICogc2V0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSBqb3VybmFsIGxvY2tlZC4KKyAqLworaW50IGpvdXJuYWxfY2FuY2VsX3Jldm9rZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCkKK3sKKwlzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqcmVjb3JkOworCWpvdXJuYWxfdCAqam91cm5hbCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsOworCWludCBuZWVkX2NhbmNlbDsKKwlpbnQgZGlkX3Jldm9rZSA9IDA7CS8qIGFrcG06IGRlYnVnICovCisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTsKKworCWpiZF9kZWJ1Zyg0LCAiam91cm5hbF9oZWFkICVwLCBjYW5jZWxsaW5nIHJldm9rZVxuIiwgamgpOworCisJLyogSXMgdGhlIGV4aXN0aW5nIFJldm9rZSBiaXQgdmFsaWQ/ICBJZiBzbywgd2UgdHJ1c3QgaXQsIGFuZAorCSAqIG9ubHkgcGVyZm9ybSB0aGUgZnVsbCBjYW5jZWwgaWYgdGhlIHJldm9rZSBiaXQgaXMgc2V0LiAgSWYKKwkgKiBub3QsIHdlIGNhbid0IHRydXN0IHRoZSByZXZva2UgYml0LCBhbmQgd2UgbmVlZCB0byBkbyB0aGUKKwkgKiBmdWxsIHNlYXJjaCBmb3IgYSByZXZva2UgcmVjb3JkLiAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEJIX1Jldm9rZVZhbGlkLCAmYmgtPmJfc3RhdGUpKQorCQluZWVkX2NhbmNlbCA9ICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkhfUmV2b2tlZCwgJmJoLT5iX3N0YXRlKSk7CisJZWxzZSB7CisJCW5lZWRfY2FuY2VsID0gMTsKKwkJY2xlYXJfYml0KEJIX1Jldm9rZWQsICZiaC0+Yl9zdGF0ZSk7CisJfQorCisJaWYgKG5lZWRfY2FuY2VsKSB7CisJCXJlY29yZCA9IGZpbmRfcmV2b2tlX3JlY29yZChqb3VybmFsLCBiaC0+Yl9ibG9ja25yKTsKKwkJaWYgKHJlY29yZCkgeworCQkJamJkX2RlYnVnKDQsICJjYW5jZWxsZWQgZXhpc3RpbmcgcmV2b2tlIG9uICIKKwkJCQkgICJibG9ja25yICVsdVxuIiwgYmgtPmJfYmxvY2tucik7CisJCQlsaXN0X2RlbCgmcmVjb3JkLT5oYXNoKTsKKwkJCWttZW1fY2FjaGVfZnJlZShyZXZva2VfcmVjb3JkX2NhY2hlLCByZWNvcmQpOworCQkJZGlkX3Jldm9rZSA9IDE7CisJCX0KKwl9CisKKyNpZmRlZiBKQkRfRVhQRU5TSVZFX0NIRUNLSU5HCisJLyogVGhlcmUgYmV0dGVyIG5vdCBiZSBvbmUgbGVmdCBiZWhpbmQgYnkgbm93ISAqLworCXJlY29yZCA9IGZpbmRfcmV2b2tlX3JlY29yZChqb3VybmFsLCBiaC0+Yl9ibG9ja25yKTsKKwlKX0FTU0VSVF9KSChqaCwgcmVjb3JkID09IE5VTEwpOworI2VuZGlmCisKKwkvKiBGaW5hbGx5LCBoYXZlIHdlIGp1c3QgY2xlYXJlZCByZXZva2Ugb24gYW4gdW5oYXNoZWQKKwkgKiBidWZmZXJfaGVhZD8gIElmIHNvLCB3ZSdkIGJldHRlciBtYWtlIHN1cmUgd2UgY2xlYXIgdGhlCisJICogcmV2b2tlZCBzdGF0dXMgb24gYW55IGhhc2hlZCBhbGlhcyB0b28sIG90aGVyd2lzZSB0aGUgcmV2b2tlCisJICogc3RhdGUgbWFjaGluZSB3aWxsIGdldCB2ZXJ5IHVwc2V0IGxhdGVyIG9uLiAqLworCWlmIChuZWVkX2NhbmNlbCAmJiAhYmgtPmJfcHByZXYpIHsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDI7CisJCWJoMiA9IGdldF9oYXNoX3RhYmxlKGJoLT5iX2RldiwgYmgtPmJfYmxvY2tuciwgYmgtPmJfc2l6ZSk7CisJCWlmIChiaDIpIHsKKwkJCWNsZWFyX2JpdChCSF9SZXZva2VkLCAmYmgyLT5iX3N0YXRlKTsKKwkJCV9fYnJlbHNlKGJoMik7CisJCX0KKwl9CisKKwlyZXR1cm4gZGlkX3Jldm9rZTsKK30KKworCisvKgorICogV3JpdGUgcmV2b2tlIHJlY29yZHMgdG8gdGhlIGpvdXJuYWwgZm9yIGFsbCBlbnRyaWVzIGluIHRoZSBjdXJyZW50CisgKiByZXZva2UgaGFzaCwgZGVsZXRpbmcgdGhlIGVudHJpZXMgYXMgd2UgZ28uCisgKgorICogQ2FsbGVkIHdpdGggdGhlIGpvdXJuYWwgbG9jayBoZWxkLgorICovCisKK3ZvaWQgam91cm5hbF93cml0ZV9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKmpvdXJuYWwsCisJCQkJICB0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbikKK3sKKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICpkZXNjcmlwdG9yOworCXN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICpyZWNvcmQ7CisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqcmV2b2tlOworCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2hfbGlzdDsKKwlpbnQgaSwgb2Zmc2V0LCBjb3VudDsKKworCWRlc2NyaXB0b3IgPSBOVUxMOworCW9mZnNldCA9IDA7CisJY291bnQgPSAwOworCXJldm9rZSA9IGpvdXJuYWwtPmpfcmV2b2tlOworCisJZm9yIChpID0gMDsgaSA8IHJldm9rZS0+aGFzaF9zaXplOyBpKyspIHsKKwkJaGFzaF9saXN0ID0gJnJldm9rZS0+aGFzaF90YWJsZVtpXTsKKworCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGFzaF9saXN0KSkgeworCQkJcmVjb3JkID0gKHN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICopCisJCQkJaGFzaF9saXN0LT5uZXh0OworCQkJd3JpdGVfb25lX3Jldm9rZV9yZWNvcmQoam91cm5hbCwgdHJhbnNhY3Rpb24sCisJCQkJCQkmZGVzY3JpcHRvciwgJm9mZnNldCwKKwkJCQkJCXJlY29yZCk7CisJCQljb3VudCsrOworCQkJbGlzdF9kZWwoJnJlY29yZC0+aGFzaCk7CisJCQlrbWVtX2NhY2hlX2ZyZWUocmV2b2tlX3JlY29yZF9jYWNoZSwgcmVjb3JkKTsKKwkJfQorCX0KKwlpZiAoZGVzY3JpcHRvcikKKwkJZmx1c2hfZGVzY3JpcHRvcihqb3VybmFsLCBkZXNjcmlwdG9yLCBvZmZzZXQpOworCWpiZF9kZWJ1ZygxLCAiV3JvdGUgJWQgcmV2b2tlIHJlY29yZHNcbiIsIGNvdW50KTsKK30KKworLyoKKyAqIFdyaXRlIG91dCBvbmUgcmV2b2tlIHJlY29yZC4gIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGRlc2NyaXB0b3IKKyAqIGJsb2NrIGlmIHRoZSBvbGQgb25lIGlzIGZ1bGwgb3IgaWYgd2UgaGF2ZSBub3QgYWxyZWFkeSBjcmVhdGVkIG9uZS4KKyAqLworCitzdGF0aWMgdm9pZCB3cml0ZV9vbmVfcmV2b2tlX3JlY29yZChqb3VybmFsX3QgKmpvdXJuYWwsCisJCQkJICAgIHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLAorCQkJCSAgICBzdHJ1Y3Qgam91cm5hbF9oZWFkICoqZGVzY3JpcHRvcnAsCisJCQkJICAgIGludCAqb2Zmc2V0cCwKKwkJCQkgICAgc3RydWN0IGpiZF9yZXZva2VfcmVjb3JkX3MgKnJlY29yZCkKK3sKKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICpkZXNjcmlwdG9yOworCWludCBvZmZzZXQ7CisJam91cm5hbF9oZWFkZXJfdCAqaGVhZGVyOworCisJLyogSWYgd2UgYXJlIGFscmVhZHkgYWJvcnRpbmcsIHRoaXMgYWxsIGJlY29tZXMgYSBub29wLiAgV2UKKyAgICAgICAgICAgc3RpbGwgbmVlZCB0byBnbyByb3VuZCB0aGUgbG9vcCBpbgorICAgICAgICAgICBqb3VybmFsX3dyaXRlX3Jldm9rZV9yZWNvcmRzIGluIG9yZGVyIHRvIGZyZWUgYWxsIG9mIHRoZQorICAgICAgICAgICByZXZva2UgcmVjb3Jkczogb25seSB0aGUgSU8gdG8gdGhlIGpvdXJuYWwgaXMgb21pdHRlZC4gKi8KKwlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKQorCQlyZXR1cm47CisKKwlkZXNjcmlwdG9yID0gKmRlc2NyaXB0b3JwOworCW9mZnNldCA9ICpvZmZzZXRwOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBkZXNjcmlwdG9yIHdpdGggc3BhY2UgbGVmdCBmb3IgdGhlIHJlY29yZCAqLworCWlmIChkZXNjcmlwdG9yKSB7CisJCWlmIChvZmZzZXQgPT0gam91cm5hbC0+al9ibG9ja3NpemUpIHsKKwkJCWZsdXNoX2Rlc2NyaXB0b3Ioam91cm5hbCwgZGVzY3JpcHRvciwgb2Zmc2V0KTsKKwkJCWRlc2NyaXB0b3IgPSBOVUxMOworCQl9CisJfQorCisJaWYgKCFkZXNjcmlwdG9yKSB7CisJCWRlc2NyaXB0b3IgPSBqb3VybmFsX2dldF9kZXNjcmlwdG9yX2J1ZmZlcihqb3VybmFsKTsKKwkJaWYgKCFkZXNjcmlwdG9yKQorCQkJcmV0dXJuOworCQloZWFkZXIgPSAoam91cm5hbF9oZWFkZXJfdCAqKSAmamgyYmgoZGVzY3JpcHRvciktPmJfZGF0YVswXTsKKwkJaGVhZGVyLT5oX21hZ2ljICAgICA9IGh0b25sKEpGU19NQUdJQ19OVU1CRVIpOworCQloZWFkZXItPmhfYmxvY2t0eXBlID0gaHRvbmwoSkZTX1JFVk9LRV9CTE9DSyk7CisJCWhlYWRlci0+aF9zZXF1ZW5jZSAgPSBodG9ubCh0cmFuc2FjdGlvbi0+dF90aWQpOworCisJCS8qIFJlY29yZCBpdCBzbyB0aGF0IHdlIGNhbiB3YWl0IGZvciBJTyBjb21wbGV0aW9uIGxhdGVyICovCisJCUpCVUZGRVJfVFJBQ0UoZGVzY3JpcHRvciwgImZpbGUgYXMgQkpfTG9nQ3RsIik7CisJCWpvdXJuYWxfZmlsZV9idWZmZXIoZGVzY3JpcHRvciwgdHJhbnNhY3Rpb24sIEJKX0xvZ0N0bCk7CisKKwkJb2Zmc2V0ID0gc2l6ZW9mKGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90KTsKKwkJKmRlc2NyaXB0b3JwID0gZGVzY3JpcHRvcjsKKwl9CisKKwkqICgodW5zaWduZWQgaW50ICopKCZqaDJiaChkZXNjcmlwdG9yKS0+Yl9kYXRhW29mZnNldF0pKSA9CisJCWh0b25sKHJlY29yZC0+YmxvY2tucik7CisJb2Zmc2V0ICs9IDQ7CisJKm9mZnNldHAgPSBvZmZzZXQ7Cit9CisKKy8qCisgKiBGbHVzaCBhIHJldm9rZSBkZXNjcmlwdG9yIG91dCB0byB0aGUgam91cm5hbC4gIElmIHdlIGFyZSBhYm9ydGluZywKKyAqIHRoaXMgaXMgYSBub29wOyBvdGhlcndpc2Ugd2UgYXJlIGdlbmVyYXRpbmcgYSBidWZmZXIgd2hpY2ggbmVlZHMgdG8KKyAqIGJlIHdhaXRlZCBmb3IgZHVyaW5nIGNvbW1pdCwgc28gaXQgaGFzIHRvIGdvIG9udG8gdGhlIGFwcHJvcHJpYXRlCisgKiBqb3VybmFsIGJ1ZmZlciBsaXN0LgorICovCisKK3N0YXRpYyB2b2lkIGZsdXNoX2Rlc2NyaXB0b3Ioam91cm5hbF90ICpqb3VybmFsLAorCQkJICAgICBzdHJ1Y3Qgam91cm5hbF9oZWFkICpkZXNjcmlwdG9yLAorCQkJICAgICBpbnQgb2Zmc2V0KQoreworCWpvdXJuYWxfcmV2b2tlX2hlYWRlcl90ICpoZWFkZXI7CisKKwlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7CisJCUpCVUZGRVJfVFJBQ0UoZGVzY3JpcHRvciwgImJyZWxzZSIpOworCQlfX2JyZWxzZShqaDJiaChkZXNjcmlwdG9yKSk7CisJCXJldHVybjsKKwl9CisKKwloZWFkZXIgPSAoam91cm5hbF9yZXZva2VfaGVhZGVyX3QgKikgamgyYmgoZGVzY3JpcHRvciktPmJfZGF0YTsKKwloZWFkZXItPnJfY291bnQgPSBodG9ubChvZmZzZXQpOworCXNldF9iaXQoQkhfSldyaXRlLCAmamgyYmgoZGVzY3JpcHRvciktPmJfc3RhdGUpOworCXsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGRlc2NyaXB0b3IpOworCQlCVUZGRVJfVFJBQ0UoYmgsICJ3cml0ZSIpOworCQlsbF9yd19ibG9jayAoV1JJVEUsIDEsICZiaCk7CisJfQorfQorCisjZW5kaWYKKworLyoKKyAqIFJldm9rZSBzdXBwb3J0IGZvciByZWNvdmVyeS4KKyAqCisgKiBSZWNvdmVyeSBuZWVkcyB0byBiZSBhYmxlIHRvOgorICoKKyAqICByZWNvcmQgYWxsIHJldm9rZSByZWNvcmRzLCBpbmNsdWRpbmcgdGhlIHRpZCBvZiB0aGUgbGF0ZXN0IGluc3RhbmNlCisgKiAgb2YgZWFjaCByZXZva2UgaW4gdGhlIGpvdXJuYWwKKyAqCisgKiAgY2hlY2sgd2hldGhlciBhIGdpdmVuIGJsb2NrIGluIGEgZ2l2ZW4gdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHJlcGxheWVkCisgKiAgKGllLiBoYXMgbm90IGJlZW4gcmV2b2tlZCBieSBhIHJldm9rZSByZWNvcmQgaW4gdGhhdCBvciBhIHN1YnNlcXVlbnQKKyAqICB0cmFuc2FjdGlvbikKKyAqCisgKiAgZW1wdHkgdGhlIHJldm9rZSB0YWJsZSBhZnRlciByZWNvdmVyeS4KKyAqLworCisvKgorICogRmlyc3QsIHNldHRpbmcgcmV2b2tlIHJlY29yZHMuICBXZSBjcmVhdGUgYSBuZXcgcmV2b2tlIHJlY29yZCBmb3IKKyAqIGV2ZXJ5IGJsb2NrIGV2ZXIgcmV2b2tlZCBpbiB0aGUgbG9nIGFzIHdlIHNjYW4gaXQgZm9yIHJlY292ZXJ5LCBhbmQKKyAqIHdlIHVwZGF0ZSB0aGUgZXhpc3RpbmcgcmVjb3JkcyBpZiB3ZSBmaW5kIG11bHRpcGxlIHJldm9rZXMgZm9yIGEKKyAqIHNpbmdsZSBibG9jay4KKyAqLworCitpbnQgam91cm5hbF9zZXRfcmV2b2tlKGpvdXJuYWxfdCAqam91cm5hbCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tuciwKKwkJICAgICAgIHRpZF90IHNlcXVlbmNlKQoreworCXN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICpyZWNvcmQ7CisKKwlyZWNvcmQgPSBmaW5kX3Jldm9rZV9yZWNvcmQoam91cm5hbCwgYmxvY2tucik7CisJaWYgKHJlY29yZCkgeworCQkvKiBJZiB3ZSBoYXZlIG11bHRpcGxlIG9jY3VyZW5jZXMsIG9ubHkgcmVjb3JkIHRoZQorCQkgKiBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIGluIHRoZSBoYXNoZWQgcmVjb3JkICovCisJCWlmICh0aWRfZ3Qoc2VxdWVuY2UsIHJlY29yZC0+c2VxdWVuY2UpKQorCQkJcmVjb3JkLT5zZXF1ZW5jZSA9IHNlcXVlbmNlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGluc2VydF9yZXZva2VfaGFzaChqb3VybmFsLCBibG9ja25yLCBzZXF1ZW5jZSk7Cit9CisKKy8qCisgKiBUZXN0IHJldm9rZSByZWNvcmRzLiAgRm9yIGEgZ2l2ZW4gYmxvY2sgcmVmZXJlbmNlZCBpbiB0aGUgbG9nLCBoYXMKKyAqIHRoYXQgYmxvY2sgYmVlbiByZXZva2VkPyAgQSByZXZva2UgcmVjb3JkIHdpdGggYSBnaXZlbiB0cmFuc2FjdGlvbgorICogc2VxdWVuY2UgbnVtYmVyIHJldm9rZXMgYWxsIGJsb2NrcyBpbiB0aGF0IHRyYW5zYWN0aW9uIGFuZCBlYXJsaWVyCisgKiBvbmVzLCBidXQgbGF0ZXIgdHJhbnNhY3Rpb25zIHN0aWxsIG5lZWQgcmVwbGF5ZWQuCisgKi8KKworaW50IGpvdXJuYWxfdGVzdF9yZXZva2Uoam91cm5hbF90ICpqb3VybmFsLAorCQkJdW5zaWduZWQgbG9uZyBibG9ja25yLAorCQkJdGlkX3Qgc2VxdWVuY2UpCit7CisJc3RydWN0IGpiZF9yZXZva2VfcmVjb3JkX3MgKnJlY29yZDsKKworCXJlY29yZCA9IGZpbmRfcmV2b2tlX3JlY29yZChqb3VybmFsLCBibG9ja25yKTsKKwlpZiAoIXJlY29yZCkKKwkJcmV0dXJuIDA7CisJaWYgKHRpZF9ndChzZXF1ZW5jZSwgcmVjb3JkLT5zZXF1ZW5jZSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKgorICogRmluYWxseSwgb25jZSByZWNvdmVyeSBpcyBvdmVyLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSByZXZva2UgdGFibGUgc28KKyAqIHRoYXQgaXQgY2FuIGJlIHJldXNlZCBieSB0aGUgcnVubmluZyBmaWxlc3lzdGVtLgorICovCisKK3ZvaWQgam91cm5hbF9jbGVhcl9yZXZva2Uoam91cm5hbF90ICpqb3VybmFsKQoreworCWludCBpOworCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2hfbGlzdDsKKwlzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqcmVjb3JkOworCXN0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3MgKnJldm9rZTsKKworCXJldm9rZSA9IGpvdXJuYWwtPmpfcmV2b2tlOworCisJZm9yIChpID0gMDsgaSA8IHJldm9rZS0+aGFzaF9zaXplOyBpKyspIHsKKwkJaGFzaF9saXN0ID0gJnJldm9rZS0+aGFzaF90YWJsZVtpXTsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KGhhc2hfbGlzdCkpIHsKKwkJCXJlY29yZCA9IChzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyopIGhhc2hfbGlzdC0+bmV4dDsKKwkJCWxpc3RfZGVsKCZyZWNvcmQtPmhhc2gpOworCQkJa21lbV9jYWNoZV9mcmVlKHJldm9rZV9yZWNvcmRfY2FjaGUsIHJlY29yZCk7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9lMmZzY2svc2NhbnRlc3QuYyBiL2UyZnNwcm9ncy9lMmZzY2svc2NhbnRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI5N2RiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9zY2FudGVzdC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogc2NhbnRlc3QuYyAtIHRlc3QgdGhlIHNwZWVkIG9mIHRoZSBpbm9kZSBzY2FuIHJvdXRpbmUKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKworCitleHRlcm4gaW50IGlzYXR0eShpbnQpOworCitjb25zdCBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBob3cgbXVjaCByZXNvdXJjZXMgaGF2ZQorICogYmVlbiB1c2VkIGZvciBhIHBhcnRpY3VsYXIgcGFzcyBvZiBlMmZzY2suCisgKi8KK3N0cnVjdCByZXNvdXJjZV90cmFjayB7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydDsKKwlzdHJ1Y3QgdGltZXZhbCB1c2VyX3N0YXJ0OworCXN0cnVjdCB0aW1ldmFsIHN5c3RlbV9zdGFydDsKKwl2b2lkCSpicmtfc3RhcnQ7Cit9OworCitzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sJZ2xvYmFsX3J0cmFjazsKKwordm9pZCBpbml0X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2spCit7CisJc3RydWN0IHJ1c2FnZSByOworCisJdHJhY2stPmJya19zdGFydCA9IHNicmsoMCk7CisJZ2V0dGltZW9mZGF5KCZ0cmFjay0+dGltZV9zdGFydCwgMCk7CisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisJdHJhY2stPnVzZXJfc3RhcnQgPSByLnJ1X3V0aW1lOworCXRyYWNrLT5zeXN0ZW1fc3RhcnQgPSByLnJ1X3N0aW1lOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCB0aW1ldmFsX3N1YnRyYWN0KHN0cnVjdCB0aW1ldmFsICp0djEsCisJCQkJCSBzdHJ1Y3QgdGltZXZhbCAqdHYyKQoreworCXJldHVybiAoKHR2MS0+dHZfc2VjIC0gdHYyLT50dl9zZWMpICsKKwkJKChmbG9hdCkgKHR2MS0+dHZfdXNlYyAtIHR2Mi0+dHZfdXNlYykpIC8gMTAwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2spCit7CisJc3RydWN0IHJ1c2FnZSByOworCXN0cnVjdCB0aW1ldmFsIHRpbWVfZW5kOworCisJZ2V0dGltZW9mZGF5KCZ0aW1lX2VuZCwgMCk7CisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisKKwlwcmludGYoXygiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iKSwKKwkgICAgICAgKGludCkgKCgoY2hhciAqKSBzYnJrKDApKSAtICgoY2hhciAqKSB0cmFjay0+YnJrX3N0YXJ0KSksCisJICAgICAgIHRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpLAorCSAgICAgICB0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3V0aW1lLCAmdHJhY2stPnVzZXJfc3RhcnQpLAorCSAgICAgICB0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3N0aW1lLCAmdHJhY2stPnN5c3RlbV9zdGFydCkpOworfQorCisKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJaW50CQlleGl0X3ZhbHVlID0gMDsKKwlpbnQJCWk7CisJZXh0Ml9maWxzeXMJZnM7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisKKwlwcmludGYoXygic2l6ZSBvZiBpbm9kZT0lZFxuIiksIHNpemVvZihpbm9kZSkpOworCisJZGV2aWNlX25hbWUgPSAiL2Rldi9oZGEzIjsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJmdsb2JhbF9ydHJhY2spOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlX25hbWUsIDAsCisJCQkgICAgIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCBfKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIF8oIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iKSk7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlIChpbm8pIHsKKwkJaWYgKCFpbm9kZS5pX2xpbmtzX2NvdW50KQorCQkJZ290byBuZXh0OworCQlwcmludGYoIiVsdVxuIiwgaW5vZGUuaV9ibG9ja3MpOworCW5leHQ6CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCisJZXh0MmZzX2Nsb3NlKGZzKTsKKworCXByaW50X3Jlc291cmNlX3RyYWNrKCZnbG9iYWxfcnRyYWNrKTsKKworCXJldHVybiBleGl0X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2UyZnNjay9zaWdjYXRjaGVyLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3NpZ2NhdGNoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODNiMWRmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2UyZnNjay9zaWdjYXRjaGVyLmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBzaWdjYXRjaGVyLmMgLS0tIHByaW50IGEgYmFja3RyYWNlIG9uIGEgU0lHU0VHViwgZXQuIGFsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX0VYRUNJTkZPX0gKKyNpbmNsdWRlIDxleGVjaW5mby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKworc3RydWN0IHN0cl90YWJsZSB7CisJaW50CW51bTsKKwljb25zdCBjaGFyCSpuYW1lOworfTsKKworI2RlZmluZSBERUZJTkVfRU5UUlkoU1lNKQl7IFNZTSwgI1NZTSB9LAorI2RlZmluZSBFTkRfVEFCTEUJCXsgMCwgMCB9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ190YWJsZVtdID0geworI2lmZGVmIFNJR0hVUAorCURFRklORV9FTlRSWShTSUdIVVApCisjZW5kaWYKKyNpZmRlZiBTSUdJTlQKKwlERUZJTkVfRU5UUlkoU0lHSU5UKQorI2VuZGlmCisjaWZkZWYgU0lHUVVJVAorCURFRklORV9FTlRSWShTSUdRVUlUKQorI2VuZGlmCisjaWZkZWYgU0lHSUxMCisJREVGSU5FX0VOVFJZKFNJR0lMTCkKKyNlbmRpZgorI2lmZGVmIFNJR1RSQVAKKwlERUZJTkVfRU5UUlkoU0lHVFJBUCkKKyNlbmRpZgorI2lmZGVmIFNJR0FCUlQKKwlERUZJTkVfRU5UUlkoU0lHQUJSVCkKKyNlbmRpZgorI2lmZGVmIFNJR0lPVAorCURFRklORV9FTlRSWShTSUdJT1QpCisjZW5kaWYKKyNpZmRlZiBTSUdCVVMKKwlERUZJTkVfRU5UUlkoU0lHQlVTKQorI2VuZGlmCisjaWZkZWYgU0lHRlBFCisJREVGSU5FX0VOVFJZKFNJR0ZQRSkKKyNlbmRpZgorI2lmZGVmIFNJR0tJTEwKKwlERUZJTkVfRU5UUlkoU0lHS0lMTCkKKyNlbmRpZgorI2lmZGVmIFNJR1VTUjEKKwlERUZJTkVfRU5UUlkoU0lHVVNSMSkKKyNlbmRpZgorI2lmZGVmIFNJR1NFR1YKKwlERUZJTkVfRU5UUlkoU0lHU0VHVikKKyNlbmRpZgorI2lmZGVmIFNJR1VTUjIKKwlERUZJTkVfRU5UUlkoU0lHVVNSMikKKyNlbmRpZgorI2lmZGVmIFNJR1BJUEUKKwlERUZJTkVfRU5UUlkoU0lHUElQRSkKKyNlbmRpZgorI2lmZGVmIFNJR0FMUk0KKwlERUZJTkVfRU5UUlkoU0lHQUxSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1RFUk0KKwlERUZJTkVfRU5UUlkoU0lHVEVSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1NUS0ZMVAorCURFRklORV9FTlRSWShTSUdTVEtGTFQpCisjZW5kaWYKKyNpZmRlZiBTSUdDSExECisJREVGSU5FX0VOVFJZKFNJR0NITEQpCisjZW5kaWYKKyNpZmRlZiBTSUdDT05UCisJREVGSU5FX0VOVFJZKFNJR0NPTlQpCisjZW5kaWYKKyNpZmRlZiBTSUdTVE9QCisJREVGSU5FX0VOVFJZKFNJR1NUT1ApCisjZW5kaWYKKyNpZmRlZiBTSUdUU1RQCisJREVGSU5FX0VOVFJZKFNJR1RTVFApCisjZW5kaWYKKyNpZmRlZiBTSUdUVElOCisJREVGSU5FX0VOVFJZKFNJR1RUSU4pCisjZW5kaWYKKyNpZmRlZiBTSUdUVE9VCisJREVGSU5FX0VOVFJZKFNJR1RUT1UpCisjZW5kaWYKKyNpZmRlZiBTSUdVUkcKKwlERUZJTkVfRU5UUlkoU0lHVVJHKQorI2VuZGlmCisjaWZkZWYgU0lHWENQVQorCURFRklORV9FTlRSWShTSUdYQ1BVKQorI2VuZGlmCisjaWZkZWYgU0lHWEZTWgorCURFRklORV9FTlRSWShTSUdYRlNaKQorI2VuZGlmCisjaWZkZWYgU0lHVlRBTFJNCisJREVGSU5FX0VOVFJZKFNJR1ZUQUxSTSkKKyNlbmRpZgorI2lmZGVmIFNJR1BST0YKKwlERUZJTkVfRU5UUlkoU0lHUFJPRikKKyNlbmRpZgorI2lmZGVmIFNJR1dJTkNICisJREVGSU5FX0VOVFJZKFNJR1dJTkNIKQorI2VuZGlmCisjaWZkZWYgU0lHSU8KKwlERUZJTkVfRU5UUlkoU0lHSU8pCisjZW5kaWYKKyNpZmRlZiBTSUdQT0xMCisJREVGSU5FX0VOVFJZKFNJR1BPTEwpCisjZW5kaWYKKyNpZmRlZiBTSUdQV1IKKwlERUZJTkVfRU5UUlkoU0lHUFdSKQorI2VuZGlmCisjaWZkZWYgU0lHU1lTCisJREVGSU5FX0VOVFJZKFNJR1NZUykKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgZ2VuZXJpY19jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgU0lfQVNZTkNOTAorCURFRklORV9FTlRSWShTSV9BU1lOQ05MKQorI2VuZGlmCisjaWZkZWYgU0lfVEtJTEwKKwlERUZJTkVfRU5UUlkoU0lfVEtJTEwpCisjZW5kaWYKKyNpZmRlZiBTSV9TSUdJTworCURFRklORV9FTlRSWShTSV9TSUdJTykKKyNlbmRpZgorI2lmZGVmIFNJX0FTWU5DSU8KKwlERUZJTkVfRU5UUlkoU0lfQVNZTkNJTykKKyNlbmRpZgorI2lmZGVmIFNJX01FU0dRCisJREVGSU5FX0VOVFJZKFNJX01FU0dRKQorI2VuZGlmCisjaWZkZWYgU0lfVElNRVIKKwlERUZJTkVfRU5UUlkoU0lfVElNRVIpCisjZW5kaWYKKyNpZmRlZiBTSV9RVUVVRQorCURFRklORV9FTlRSWShTSV9RVUVVRSkKKyNlbmRpZgorI2lmZGVmIFNJX1VTRVIKKwlERUZJTkVfRU5UUlkoU0lfVVNFUikKKyNlbmRpZgorI2lmZGVmIFNJX0tFUk5FTAorCURFRklORV9FTlRSWShTSV9LRVJORUwpCisjZW5kaWYKKwlFTkRfVEFCTEUKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ2lsbF9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgSUxMX0lMTE9QQworCURFRklORV9FTlRSWShJTExfSUxMT1BDKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTE9QTgorCURFRklORV9FTlRSWShJTExfSUxMT1BOKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTEFEUgorCURFRklORV9FTlRSWShJTExfSUxMQURSKQorI2VuZGlmCisjaWZkZWYgSUxMX0lMTFRSUAorCURFRklORV9FTlRSWShJTExfSUxMVFJQKQorI2VuZGlmCisjaWZkZWYgSUxMX1BSVk9QQworCURFRklORV9FTlRSWShJTExfUFJWT1BDKQorI2VuZGlmCisjaWZkZWYgSUxMX1BSVlJFRworCURFRklORV9FTlRSWShJTExfUFJWUkVHKQorI2VuZGlmCisjaWZkZWYgSUxMX0NPUFJPQworCURFRklORV9FTlRSWShJTExfQ09QUk9DKQorI2VuZGlmCisjaWZkZWYgSUxMX0JBRFNUSworCURFRklORV9FTlRSWShJTExfQkFEU1RLKQorI2VuZGlmCisjaWZkZWYgQlVTX0FEUkFMTgorCURFRklORV9FTlRSWShCVVNfQURSQUxOKQorI2VuZGlmCisjaWZkZWYgQlVTX0FEUkVSUgorCURFRklORV9FTlRSWShCVVNfQURSRVJSKQorI2VuZGlmCisjaWZkZWYgQlVTX09CSkVSUgorCURFRklORV9FTlRSWShCVVNfT0JKRVJSKQorI2VuZGlmCisJRU5EX1RBQkxFCit9OworCitzdGF0aWMgc3RydWN0IHN0cl90YWJsZSBzaWdmcGVfY29kZV90YWJsZVtdID0geworI2lmZGVmIEZQRV9JTlRESVYKKwlERUZJTkVfRU5UUlkoRlBFX0lOVERJVikKKyNlbmRpZgorI2lmZGVmIEZQRV9JTlRPVkYKKwlERUZJTkVfRU5UUlkoRlBFX0lOVE9WRikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRESVYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVERJVikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRPVkYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVE9WRikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRVTkQKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFVORCkKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRSRVMKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFJFUykKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRJTlYKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVElOVikKKyNlbmRpZgorI2lmZGVmIEZQRV9GTFRTVUIKKwlERUZJTkVfRU5UUlkoRlBFX0ZMVFNVQikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lnc2Vndl9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgU0VHVl9NQVBFUlIKKwlERUZJTkVfRU5UUlkoU0VHVl9NQVBFUlIpCisjZW5kaWYKKyNpZmRlZiBTRUdWX0FDQ0VSUgorCURFRklORV9FTlRSWShTRUdWX0FDQ0VSUikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworCitzdGF0aWMgc3RydWN0IHN0cl90YWJsZSBzaWdidXNfY29kZV90YWJsZVtdID0geworI2lmZGVmIEJVU19BRFJBTE4KKwlERUZJTkVfRU5UUlkoQlVTX0FEUkFMTikKKyNlbmRpZgorI2lmZGVmIEJVU19BRFJFUlIKKwlERUZJTkVfRU5UUlkoQlVTX0FEUkVSUikKKyNlbmRpZgorI2lmZGVmIEJVU19PQkpFUlIKKwlERUZJTkVfRU5UUlkoQlVTX09CSkVSUikKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKworI2lmIDAgLyogc2hvdWxkIHRoaXMgYmUgaG9va2VkIGluIHNvbWV3aGVyZT8gKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyX3RhYmxlIHNpZ3N0cmFwX2NvZGVfdGFibGVbXSA9IHsKKyNpZmRlZiBUUkFQX0JSS1BUCisJREVGSU5FX0VOVFJZKFRSQVBfQlJLUFQpCisjZW5kaWYKKyNpZmRlZiBUUkFQX1RSQUNFCisJREVGSU5FX0VOVFJZKFRSQVBfVFJBQ0UpCisjZW5kaWYKKwlFTkRfVEFCTEUKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lnY2xkX2NvZGVfdGFibGVbXSA9IHsKKyNpZmRlZiBDTERfRVhJVEVECisJREVGSU5FX0VOVFJZKENMRF9FWElURUQpCisjZW5kaWYKKyNpZmRlZiBDTERfS0lMTEVECisJREVGSU5FX0VOVFJZKENMRF9LSUxMRUQpCisjZW5kaWYKKyNpZmRlZiBDTERfRFVNUEVECisJREVGSU5FX0VOVFJZKENMRF9EVU1QRUQpCisjZW5kaWYKKyNpZmRlZiBDTERfVFJBUFBFRAorCURFRklORV9FTlRSWShDTERfVFJBUFBFRCkKKyNlbmRpZgorI2lmZGVmIENMRF9TVE9QUEVECisJREVGSU5FX0VOVFJZKENMRF9TVE9QUEVEKQorI2VuZGlmCisjaWZkZWYgQ0xEX0NPTlRJTlVFRAorCURFRklORV9FTlRSWShDTERfQ09OVElOVUVEKQorI2VuZGlmCisJRU5EX1RBQkxFCit9OworCisjaWYgMCAvKiBzaG91bGQgdGhpcyBiZSBob29rZWQgaW4gc29tZXdoZXJlPyAqLworc3RhdGljIHN0cnVjdCBzdHJfdGFibGUgc2lncG9sbF9jb2RlX3RhYmxlW10gPSB7CisjaWZkZWYgUE9MTF9JTgorCURFRklORV9FTlRSWShQT0xMX0lOKQorI2VuZGlmCisjaWZkZWYgUE9MTF9PVVQKKwlERUZJTkVfRU5UUlkoUE9MTF9PVVQpCisjZW5kaWYKKyNpZmRlZiBQT0xMX01TRworCURFRklORV9FTlRSWShQT0xMX01TRykKKyNlbmRpZgorI2lmZGVmIFBPTExfRVJSCisJREVGSU5FX0VOVFJZKFBPTExfRVJSKQorI2VuZGlmCisjaWZkZWYgUE9MTF9QUkkKKwlERUZJTkVfRU5UUlkoUE9MTF9QUkkpCisjZW5kaWYKKyNpZmRlZiBQT0xMX0hVUAorCURFRklORV9FTlRSWShQT0xMX0hVUCkKKyNlbmRpZgorCUVORF9UQUJMRQorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqbG9va3VwX3RhYmxlKGludCBudW0sIHN0cnVjdCBzdHJfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBzdHJfdGFibGUgKnA7CisKKwlmb3IgKHA9dGFibGU7IHAtPm5hbWU7IHArKykKKwkJaWYgKG51bSA9PSBwLT5udW0pCisJCQlyZXR1cm4ocC0+bmFtZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsb29rdXBfdGFibGVfZmFsbGJhY2soaW50IG51bSwgc3RydWN0IHN0cl90YWJsZSAqdGFibGUpCit7CisJc3RhdGljIGNoYXIgYnVmWzMyXTsKKwljb25zdCBjaGFyICpyZXQgPSBsb29rdXBfdGFibGUobnVtLCB0YWJsZSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIG51bSk7CisJYnVmW3NpemVvZihidWYpLTFdID0gMDsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBkaWVfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ251bSwgc2lnaW5mb190ICpzaWdpbmZvLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworICAgICAgIHZvaWQgKnN0YWNrX3N5bXNbMzJdOworICAgICAgIGludCBmcmFtZXM7CisgICAgICAgY29uc3QgY2hhciAqY3A7CisKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNpZ25hbCAoJWQpICVzICIsIHNpZ251bSwKKwkgICAgICAgbG9va3VwX3RhYmxlX2ZhbGxiYWNrKHNpZ251bSwgc2lnX3RhYmxlKSk7CisgICAgICAgaWYgKHNpZ2luZm8tPnNpX2NvZGUgPT0gU0lfVVNFUikKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICIoc2VudCBmcm9tIHBpZCAldSkgIiwgc2lnaW5mby0+c2lfcGlkKTsKKyAgICAgICBjcCA9IGxvb2t1cF90YWJsZShzaWdpbmZvLT5zaV9jb2RlLCBnZW5lcmljX2NvZGVfdGFibGUpOworICAgICAgIGlmIChjcCkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsIGNwKTsKKyAgICAgICBlbHNlIGlmIChzaWdudW0gPT0gU0lHSUxMKQorCSAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpX2NvZGU9JXMgIiwKKwkJICAgICAgIGxvb2t1cF90YWJsZV9mYWxsYmFjayhzaWdpbmZvLT5zaV9jb2RlLAorCQkJCQkgICAgIHNpZ2lsbF9jb2RlX3RhYmxlKSk7CisgICAgICAgZWxzZSBpZiAoc2lnbnVtID09IFNJR0ZQRSkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsCisJCSAgICAgICBsb29rdXBfdGFibGVfZmFsbGJhY2soc2lnaW5mby0+c2lfY29kZSwKKwkJCQkJICAgICBzaWdmcGVfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UgaWYgKHNpZ251bSA9PSBTSUdTRUdWKQorCSAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpX2NvZGU9JXMgIiwKKwkJICAgICAgIGxvb2t1cF90YWJsZV9mYWxsYmFjayhzaWdpbmZvLT5zaV9jb2RlLAorCQkJCQkgICAgIHNpZ3NlZ3ZfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UgaWYgKHNpZ251bSA9PSBTSUdCVVMpCisJICAgICAgIGZwcmludGYoc3RkZXJyLCAic2lfY29kZT0lcyAiLAorCQkgICAgICAgbG9va3VwX3RhYmxlX2ZhbGxiYWNrKHNpZ2luZm8tPnNpX2NvZGUsCisJCQkJCSAgICAgc2lnYnVzX2NvZGVfdGFibGUpKTsKKyAgICAgICBlbHNlIGlmIChzaWdudW0gPT0gU0lHQ0hMRCkKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaV9jb2RlPSVzICIsCisJCSAgICAgICBsb29rdXBfdGFibGVfZmFsbGJhY2soc2lnaW5mby0+c2lfY29kZSwKKwkJCQkJICAgICBzaWdjbGRfY29kZV90YWJsZSkpOworICAgICAgIGVsc2UKKwkgICAgICAgZnByaW50ZihzdGRlcnIsICJzaSBjb2RlPSVkICIsIHNpZ2luZm8tPnNpX2NvZGUpOworICAgICAgIGlmICgoc2lnaW5mby0+c2lfY29kZSAhPSBTSV9VU0VSKSAmJgorCSAgIChzaWdudW0gPT0gU0lHSUxMIHx8IHNpZ251bSA9PSBTSUdGUEUgfHwKKwkgICAgc2lnbnVtID09IFNJR1NFR1YgfHwgc2lnbnVtID09IFNJR0JVUykpCisJICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmF1bHQgYWRkcj0lcCIsIHNpZ2luZm8tPnNpX2FkZHIpOworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworI2lmIGRlZmluZWQoSEFWRV9CQUNLVFJBQ0UpICYmICFkZWZpbmVkKERJU0FCTEVfQkFDS1RSQUNFKQorICAgICAgIGZyYW1lcyA9IGJhY2t0cmFjZShzdGFja19zeW1zLCAzMik7CisgICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQoc3RhY2tfc3ltcywgZnJhbWVzLCAyKTsKKyNlbmRpZgorICAgICAgIGV4aXQoRlNDS19FUlJPUik7Cit9CisKK3ZvaWQgc2lnY2F0Y2hlcl9zZXR1cCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisJCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9zaWdhY3Rpb24gPSBkaWVfc2lnbmFsX2hhbmRsZXI7CisJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworCisJc2lnYWN0aW9uKFNJR0ZQRSwgJnNhLCAwKTsKKwlzaWdhY3Rpb24oU0lHSUxMLCAmc2EsIDApOworCXNpZ2FjdGlvbihTSUdCVVMsICZzYSwgMCk7CisJc2lnYWN0aW9uKFNJR1NFR1YsICZzYSwgMCk7Cit9CQorCisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgPGdldG9wdC5oPgorCit2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJ0c3Rfc2lnY2F0Y2hlcjogWy1ha2ZuXVxuIik7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisJY2hhcgkJCSpwID0gMDsKKwlpbnQgCQkJaSwgYzsKKwl2b2xhdGlsZQkJeD0wOworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKwlzYS5zYV9zaWdhY3Rpb24gPSBkaWVfc2lnbmFsX2hhbmRsZXI7CisJc2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworCWZvciAoaT0xOyBpIDwgMzE7IGkrKykKKwkJc2lnYWN0aW9uKGksICZzYSwgMCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhZmtuIikpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2EnOgorCQkJYWJvcnQoKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCXByaW50ZigiJWRcbiIsIDQyL3gpOworCQljYXNlICdrJzoKKwkJCWtpbGwoZ2V0cGlkKCksIFNJR1RFUk0pOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJKnAgPSA0MjsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlICgpOworCQl9CisKKwlwcmludGYoIlNsZWVwaW5nIGZvciAxMCBzZWNvbmRzLCBzZW5kIGtpbGwgc2lnbmFsIHRvIHBpZCAldS4uLlxuIiwKKwkgICAgICAgZ2V0cGlkKCkpOworCWZmbHVzaChzdGRvdXQpOworCXNsZWVwKDEwKTsKKwlleGl0KDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3N1cGVyLmMgYi9lMmZzcHJvZ3MvZTJmc2NrL3N1cGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1YzkwZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzY2svc3VwZXIuYwpAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIGUyZnNjay5jIC0gc3VwZXJibG9jayBjaGVja3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpZm5kZWYgRVhUMl9TS0lQX1VVSUQKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNlbmRpZgorI2luY2x1ZGUgImUyZnNjay5oIgorI2luY2x1ZGUgInByb2JsZW0uaCIKKworI2RlZmluZSBNSU5fQ0hFQ0sgMQorI2RlZmluZSBNQVhfQ0hFQ0sgMgorI2RlZmluZSBMT0cyX0NIRUNLIDQKKworc3RhdGljIHZvaWQgY2hlY2tfc3VwZXJfdmFsdWUoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpkZXNjciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmbGFncywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbWluX3ZhbCwgdW5zaWduZWQgbG9uZyBtYXhfdmFsKQoreworCXN0cnVjdAkJcHJvYmxlbV9jb250ZXh0IHBjdHg7CisKKwlpZiAoKChmbGFncyAmIE1JTl9DSEVDSykgJiYgKHZhbHVlIDwgbWluX3ZhbCkpIHx8CisJICAgICgoZmxhZ3MgJiBNQVhfQ0hFQ0spICYmICh2YWx1ZSA+IG1heF92YWwpKSB8fAorCSAgICAoKGZsYWdzICYgTE9HMl9DSEVDSykgJiYgKHZhbHVlICYgKHZhbHVlIC0gMSkgIT0gMCkpKSB7CisJCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJCXBjdHgubnVtID0gdmFsdWU7CisJCXBjdHguc3RyID0gZGVzY3I7CisJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9NSVNDX0NPUlJVUFRfU1VQRVIsICZwY3R4KTsKKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsgLyogbmV2ZXIgZ2V0IGhlcmUhICovCisJfQorfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHJlbGVhc2UgYW4gaW5vZGUKKyAqLworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwllMmZzY2tfdCAJY3R4OworCWNoYXIgCQkqYnVmOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgKnBjdHg7CisJaW50CQl0cnVuY2F0aW5nOworCWludAkJdHJ1bmNhdGVfb2Zmc2V0OworCWUyX2Jsa2NudF90CXRydW5jYXRlX2Jsb2NrOworCWludAkJdHJ1bmNhdGVkX2Jsb2NrczsKKwlpbnQJCWFib3J0OworCWVycmNvZGVfdAllcnJjb2RlOworfTsKKworc3RhdGljIGludCByZWxlYXNlX2lub2RlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICAgIGJsazY0X3QJKmJsb2NrX25yLAorCQkJICAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgICAgIGJsazY0X3QJcmVmX2JsayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgaW50CXJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiOworCWUyZnNja190IAkJY3R4OworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQJKnBjdHg7CisJYmxrNjRfdAkJCWJsayA9ICpibG9ja19ucjsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJcGIgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwljdHggPSBwYi0+Y3R4OworCXBjdHggPSBwYi0+cGN0eDsKKworCXBjdHgtPmJsayA9IGJsazsKKwlwY3R4LT5ibGtjb3VudCA9IGJsb2NrY250OworCisJaWYgKEhPTEVfQkxLQUREUihibGspKQorCQlyZXR1cm4gMDsKKworCWlmICgoYmxrIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJICAgIChibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfT1JQSEFOX0lMTEVHQUxfQkxPQ0tfTlVNLCBwY3R4KTsKKwlyZXR1cm5fYWJvcnQ6CisJCXBiLT5hYm9ydCA9IDE7CisJCXJldHVybiBCTE9DS19BQk9SVDsKKwl9CisKKwlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKSkgeworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfT1JQSEFOX0FMUkVBRFlfQ0xFQVJFRF9CTE9DSywgcGN0eCk7CisJCWdvdG8gcmV0dXJuX2Fib3J0OworCX0KKworCS8qCisJICogSWYgd2UgYXJlIGRlbGV0aW5nIGFuIG9ycGhhbiwgdGhlbiB3ZSBsZWF2ZSB0aGUgZmllbGRzIGFsb25lLgorCSAqIElmIHdlIGFyZSB0cnVuY2F0aW5nIGFuIG9ycGhhbiwgdGhlbiB1cGRhdGUgdGhlIGlub2RlIGZpZWxkcworCSAqIGFuZCBjbGVhbiB1cCBhbnkgcGFydGlhbCBibG9jayBkYXRhLgorCSAqLworCWlmIChwYi0+dHJ1bmNhdGluZykgeworCQkvKgorCQkgKiBXZSBvbmx5IHJlbW92ZSBpbmRpcmVjdCBibG9ja3MgaWYgdGhleSBhcmUKKwkJICogY29tcGxldGVseSBlbXB0eS4KKwkJICovCisJCWlmIChibG9ja2NudCA8IDApIHsKKwkJCWludAlpLCBsaW1pdDsKKwkJCWJsa190CSpicDsKKworCQkJcGItPmVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsCisJCQkJCQkJcGItPmJ1Zik7CisJCQlpZiAocGItPmVycmNvZGUpCisJCQkJZ290byByZXR1cm5fYWJvcnQ7CisKKwkJCWxpbWl0ID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworCQkJZm9yIChpID0gMCwgYnAgPSAoYmxrX3QgKikgcGItPmJ1ZjsKKwkJCSAgICAgaSA8IGxpbWl0OwkgaSsrLCBicCsrKQorCQkJCWlmICgqYnApCisJCQkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIFdlIGRvbid0IHJlbW92ZSBkaXJlY3QgYmxvY2tzIHVudGlsIHdlJ3ZlIHJlYWNoZWQKKwkJICogdGhlIHRydW5jYXRpb24gYmxvY2suCisJCSAqLworCQlpZiAoYmxvY2tjbnQgPj0gMCAmJiBibG9ja2NudCA8IHBiLT50cnVuY2F0ZV9ibG9jaykKKwkJCXJldHVybiAwOworCQkvKgorCQkgKiBJZiBwYXJ0IG9mIHRoZSBsYXN0IGJsb2NrIG5lZWRzIHRydW5jYXRpbmcsIHdlIGRvCisJCSAqIGl0IGhlcmUuCisJCSAqLworCQlpZiAoKGJsb2NrY250ID09IHBiLT50cnVuY2F0ZV9ibG9jaykgJiYgcGItPnRydW5jYXRlX29mZnNldCkgeworCQkJcGItPmVycmNvZGUgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsCisJCQkJCQkJcGItPmJ1Zik7CisJCQlpZiAocGItPmVycmNvZGUpCisJCQkJZ290byByZXR1cm5fYWJvcnQ7CisJCQltZW1zZXQocGItPmJ1ZiArIHBiLT50cnVuY2F0ZV9vZmZzZXQsIDAsCisJCQkgICAgICAgZnMtPmJsb2Nrc2l6ZSAtIHBiLT50cnVuY2F0ZV9vZmZzZXQpOworCQkJcGItPmVycmNvZGUgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCAxLAorCQkJCQkJCSBwYi0+YnVmKTsKKwkJCWlmIChwYi0+ZXJyY29kZSkKKwkJCQlnb3RvIHJldHVybl9hYm9ydDsKKwkJfQorCQlwYi0+dHJ1bmNhdGVkX2Jsb2NrcysrOworCQkqYmxvY2tfbnIgPSAwOworCQlyZXR2YWwgfD0gQkxPQ0tfQ0hBTkdFRDsKKwl9CisKKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssIC0xKTsKKwljdHgtPmZyZWVfYmxvY2tzKys7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYW4gaW5vZGUuICBSZXR1cm5zIDEgaWYgYW4gaW5jb25zaXN0ZW5jeSB3YXMKKyAqIGZvdW5kLiAgSWYgdGhlIGlub2RlIGhhcyBhIGxpbmsgY291bnQsIHRoZW4gaXQgaXMgYmVpbmcgdHJ1bmNhdGVkIGFuZAorICogbm90IGRlbGV0ZWQuCisgKi8KK3N0YXRpYyBpbnQgcmVsZWFzZV9pbm9kZV9ibG9ja3MoZTJmc2NrX3QgY3R4LCBleHQyX2lub190IGlubywKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCQlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0ICpwY3R4KQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAJcGI7CisJZXh0Ml9maWxzeXMJCQlmcyA9IGN0eC0+ZnM7CisJZXJyY29kZV90CQkJcmV0dmFsOworCV9fdTMyCQkJCWNvdW50OworCisJaWYgKCFleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsIGlub2RlKSkKKwkJcmV0dXJuIDA7CisKKwlwYi5idWYgPSBibG9ja19idWYgKyAzICogY3R4LT5mcy0+YmxvY2tzaXplOworCXBiLmN0eCA9IGN0eDsKKwlwYi5hYm9ydCA9IDA7CisJcGIuZXJyY29kZSA9IDA7CisJcGIucGN0eCA9IHBjdHg7CisJaWYgKGlub2RlLT5pX2xpbmtzX2NvdW50KSB7CisJCXBiLnRydW5jYXRpbmcgPSAxOworCQlwYi50cnVuY2F0ZV9ibG9jayA9IChlMl9ibGtjbnRfdCkKKwkJCSgoRVhUMl9JX1NJWkUoaW5vZGUpICsgZnMtPmJsb2Nrc2l6ZSAtIDEpIC8KKwkJCSBmcy0+YmxvY2tzaXplKTsKKwkJcGIudHJ1bmNhdGVfb2Zmc2V0ID0gaW5vZGUtPmlfc2l6ZSAlIGZzLT5ibG9ja3NpemU7CisJfSBlbHNlIHsKKwkJcGIudHJ1bmNhdGluZyA9IDA7CisJCXBiLnRydW5jYXRlX2Jsb2NrID0gMDsKKwkJcGIudHJ1bmNhdGVfb2Zmc2V0ID0gMDsKKwl9CisJcGIudHJ1bmNhdGVkX2Jsb2NrcyA9IDA7CisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UsCisJCQkJICAgICAgYmxvY2tfYnVmLCByZWxlYXNlX2lub2RlX2Jsb2NrLCAmcGIpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigicmVsZWFzZV9pbm9kZV9ibG9ja3MiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIpLAorCQkJaW5vKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChwYi5hYm9ydCkKKwkJcmV0dXJuIDE7CisKKwkvKiBSZWZyZXNoIHRoZSBpbm9kZSBzaW5jZSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBtYXkgaGF2ZSBjaGFuZ2VkIGl0ICovCisJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sIGlub2RlLCAicmVsZWFzZV9pbm9kZV9ibG9ja3MiKTsKKworCWlmIChwYi50cnVuY2F0ZWRfYmxvY2tzKQorCQlleHQyZnNfaWJsa19zdWJfYmxvY2tzKGZzLCBpbm9kZSwgcGIudHJ1bmNhdGVkX2Jsb2Nrcyk7CisKKwlpZiAoZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLCBpbm9kZSkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIoZnMsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgaW5vZGUpLAorCQkJCQlibG9ja19idWYsIC0xLCAmY291bnQpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTSkgeworCQkJcmV0dmFsID0gMDsKKwkJCWNvdW50ID0gMTsKKwkJfQorCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJyZWxlYXNlX2lub2RlX2Jsb2NrcyIsIHJldHZhbCwKKwkJXygid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiKSwKKwkJCQlpbm8pOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgaW5vZGUpLCAtMSk7CisJCQljdHgtPmZyZWVfYmxvY2tzKys7CisJCX0KKwkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgaW5vZGUsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgYWxsIG9mIHRoZSBvcnBoYW4gaW5vZGVzLiAgSXQgcmV0dXJucyAxIGlmCisgKiBpdCBoaXQgc29tZSBlcnJvciwgYW5kIDAgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCByZWxlYXNlX29ycGhhbl9pbm9kZXMoZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlleHQyX2lub190CWlubywgbmV4dF9pbm87CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJc3RydWN0IHByb2JsZW1fY29udGV4dCBwY3R4OworCWNoYXIgKmJsb2NrX2J1ZjsKKworCWlmICgoaW5vID0gZnMtPnN1cGVyLT5zX2xhc3Rfb3JwaGFuKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2luIG9yIGxvc2UsIHdlIHdvbid0IGJlIHVzaW5nIHRoZSBoZWFkIG9mIHRoZSBvcnBoYW4gaW5vZGUKKwkgKiBsaXN0IGFnYWluLgorCSAqLworCWZzLT5zdXBlci0+c19sYXN0X29ycGhhbiA9IDA7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCisJLyoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBjb250YWlucyBlcnJvcnMsIGRvbid0IHJ1biB0aGUgb3JwaGFuCisJICogbGlzdCwgc2luY2UgdGhlIG9ycGhhbiBsaXN0IGNhbid0IGJlIHRydXN0ZWQ7IGFuZCB3ZSdyZQorCSAqIGdvaW5nIHRvIGJlIHJ1bm5pbmcgYSBmdWxsIGUyZnNjayBydW4gYW55d2F5Li4uCisJICovCisJaWYgKGZzLT5zdXBlci0+c19zdGF0ZSAmIEVYVDJfRVJST1JfRlMpCisJCXJldHVybiAwOworCisJaWYgKChpbm8gPCBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcikpIHx8CisJICAgIChpbm8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSkgeworCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQlwY3R4LmlubyA9IGlubzsKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX09SUEhBTl9JTExFR0FMX0hFQURfSU5PREUsICZwY3R4KTsKKwkJcmV0dXJuIDE7CisJfQorCisJYmxvY2tfYnVmID0gKGNoYXIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIGZzLT5ibG9ja3NpemUgKiA0LAorCQkJCQkJICAgICJibG9jayBpdGVyYXRlIGJ1ZmZlciIpOworCWUyZnNja19yZWFkX2JpdG1hcHMoY3R4KTsKKworCXdoaWxlIChpbm8pIHsKKwkJZTJmc2NrX3JlYWRfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgInJlbGVhc2Vfb3JwaGFuX2lub2RlcyIpOworCQljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCQlwY3R4LmlubyA9IGlubzsKKwkJcGN0eC5pbm9kZSA9ICZpbm9kZTsKKwkJcGN0eC5zdHIgPSBpbm9kZS5pX2xpbmtzX2NvdW50ID8gXygiVHJ1bmNhdGluZyIpIDoKKwkJCV8oIkNsZWFyaW5nIik7CisKKwkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX09SUEhBTl9DTEVBUl9JTk9ERSwgJnBjdHgpOworCisJCW5leHRfaW5vID0gaW5vZGUuaV9kdGltZTsKKwkJaWYgKG5leHRfaW5vICYmCisJCSAgICAoKG5leHRfaW5vIDwgRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpKSB8fAorCQkgICAgIChuZXh0X2lubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKSkgeworCQkJcGN0eC5pbm8gPSBuZXh0X2lubzsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9PUlBIQU5fSUxMRUdBTF9JTk9ERSwgJnBjdHgpOworCQkJZ290byByZXR1cm5fYWJvcnQ7CisJCX0KKworCQlpZiAocmVsZWFzZV9pbm9kZV9ibG9ja3MoY3R4LCBpbm8sICZpbm9kZSwgYmxvY2tfYnVmLCAmcGN0eCkpCisJCQlnb3RvIHJldHVybl9hYm9ydDsKKworCQlpZiAoIWlub2RlLmlfbGlua3NfY291bnQpIHsKKwkJCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgLTEsCisJCQkJCQkgIExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSk7CisJCQljdHgtPmZyZWVfaW5vZGVzKys7CisJCQlpbm9kZS5pX2R0aW1lID0gY3R4LT5ub3c7CisJCX0gZWxzZSB7CisJCQlpbm9kZS5pX2R0aW1lID0gMDsKKwkJfQorCQllMmZzY2tfd3JpdGVfaW5vZGUoY3R4LCBpbm8sICZpbm9kZSwgImRlbGV0ZV9maWxlIik7CisJCWlubyA9IG5leHRfaW5vOworCX0KKwlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJcmV0dXJuIDA7CityZXR1cm5fYWJvcnQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgdGhlIHJlc2l6ZSBpbm9kZSB0byBtYWtlIHN1cmUgaXQgaXMgc2FuZS4gIFdlIGNoZWNrIGJvdGggZm9yCisgKiB0aGUgY2FzZSB3aGVyZSBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBlbmFibGVkIChpbiB3aGljaCBjYXNlIHRoZQorICogcmVzaXplIGlub2RlIHNob3VsZCBiZSBjbGVhcmVkKSBhcyB3ZWxsIGFzIHRoZSBjYXNlIHdoZXJlIG9uLWxpbmUKKyAqIHJlc2l6aW5nIGlzIGVuYWJsZWQuCisgKi8KK3ZvaWQgY2hlY2tfcmVzaXplX2lub2RlKGUyZnNja190IGN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJc3RydWN0IHByb2JsZW1fY29udGV4dAlwY3R4OworCWludAkJaSwgZ2R0X29mZiwgaW5kX29mZjsKKwlkZ3JwX3QJCWo7CisJYmxrX3QJCWJsaywgcGJsazsKKwlibGtfdAkJZXhwZWN0OwkvKiBmb3IgcmVzaXplIGlub2RlLCB3aGljaCBpcyAzMi1iaXQgb25seSAqLworCV9fdTMyIAkJKmRpbmRfYnVmID0gMCwgKmluZF9idWY7CisJZXJyY29kZV90CXJldHZhbDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKwkvKgorCSAqIElmIHRoZSByZXNpemUgaW5vZGUgZmVhdHVyZSBpc24ndCBzZXQsIHRoZW4KKwkgKiBzX3Jlc2VydmVkX2dkdF9ibG9ja3MgbXVzdCBiZSB6ZXJvLgorCSAqLworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmCisJICAgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpKSB7CisJCWlmIChmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykgeworCQkJcGN0eC5udW0gPSBmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfTk9OWkVST19SRVNFUlZFRF9HRFRfQkxPQ0tTLAorCQkJCQkmcGN0eCkpIHsKKwkJCQlmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyA9IDA7CisJCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJfQorCQl9CisJfQorCisJLyogUmVhZCB0aGUgcmVzaXplIGlub2RlICovCisJcGN0eC5pbm8gPSBFWFQyX1JFU0laRV9JTk87CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIEVYVDJfUkVTSVpFX0lOTywgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCQkgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpCisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1JFU0laRV9JTk9ERTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhlIHJlc2l6ZSBpbm9kZSBmZWF0dXJlIGlzbid0IHNldCwgY2hlY2sgdG8gbWFrZSBzdXJlCisJICogdGhlIHJlc2l6ZSBpbm9kZSBpcyBjbGVhcmVkOyB0aGVuIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkgICAgICBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkpIHsKKwkJZm9yIChpPTA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspIHsKKwkJCWlmIChpbm9kZS5pX2Jsb2NrW2ldKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgoaSA8IEVYVDJfTl9CTE9DS1MpICYmCisJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzBfQ0xFQVJfUkVTSVpFX0lOT0RFLCAmcGN0eCkpIHsKKwkJCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworCQkJZTJmc2NrX3dyaXRlX2lub2RlKGN0eCwgRVhUMl9SRVNJWkVfSU5PLCAmaW5vZGUsCisJCQkJCSAgICJjbGVhcl9yZXNpemUiKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGUgcmVzaXplIGlub2RlIGZlYXR1cmUgaXMgZW5hYmxlZDsgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZQorCSAqIG9ubHkgYmxvY2sgaW4gdXNlIGlzIHRoZSBkb3VibGUgaW5kaXJlY3QgYmxvY2sKKwkgKi8KKwlibGsgPSBpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS107CisJZm9yIChpPTA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspIHsKKwkJaWYgKGkgIT0gRVhUMl9ESU5EX0JMT0NLICYmIGlub2RlLmlfYmxvY2tbaV0pCisJCQlicmVhazsKKwl9CisJaWYgKChpIDwgRVhUMl9OX0JMT0NLUykgfHwgIWJsayB8fCAhaW5vZGUuaV9saW5rc19jb3VudCB8fAorCSAgICAhKGlub2RlLmlfbW9kZSAmIExJTlVYX1NfSUZSRUcpIHx8CisJICAgIChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayB8fAorCSAgICAgYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpIHsKKwlyZXNpemVfaW5vZGVfaW52YWxpZDoKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9SRVNJWkVfSU5PREVfSU5WQUxJRCwgJnBjdHgpKSB7CisJCQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKwkJCWUyZnNja193cml0ZV9pbm9kZShjdHgsIEVYVDJfUkVTSVpFX0lOTywgJmlub2RlLAorCQkJCQkgICAiY2xlYXJfcmVzaXplIik7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1JFU0laRV9JTk9ERTsKKwkJfQorCQlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSkgeworCQkJZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQl9CisJCWdvdG8gY2xlYW51cDsKKwl9CisJZGluZF9idWYgPSAoX191MzIgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsIGZzLT5ibG9ja3NpemUgKiAyLAorCQkJCQkJICAgICJyZXNpemUgZGluZCBidWZmZXIiKTsKKwlpbmRfYnVmID0gKF9fdTMyICopICgoY2hhciAqKSBkaW5kX2J1ZiArIGZzLT5ibG9ja3NpemUpOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGZzLCBibGssIGRpbmRfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIHJlc2l6ZV9pbm9kZV9pbnZhbGlkOworCisJZ2R0X29mZiA9IGZzLT5kZXNjX2Jsb2NrczsKKwlwYmxrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgKyAxICsgZnMtPmRlc2NfYmxvY2tzOworCWlmIChmcy0+YmxvY2tzaXplID09IDEwMjQgJiYgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgPT0gMCkKKwkJcGJsaysrOwkvKiBEZWFsIHdpdGggMTAyNCBibG9ja3NpemUgYmlnYWxsb2MgZnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgLyA0OworCSAgICAgaSsrLCBnZHRfb2ZmKyssIHBibGsrKykgeworCQlnZHRfb2ZmICU9IGZzLT5ibG9ja3NpemUvNDsKKwkJaWYgKGRpbmRfYnVmW2dkdF9vZmZdICE9IHBibGspCisJCQlnb3RvIHJlc2l6ZV9pbm9kZV9pbnZhbGlkOworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbmRfYmxvY2soZnMsIHBibGssIGluZF9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byByZXNpemVfaW5vZGVfaW52YWxpZDsKKwkJaW5kX29mZiA9IDA7CisJCWZvciAoaiA9IDE7IGogPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaisrKSB7CisJCQlpZiAoIWV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGopKQorCQkJCWNvbnRpbnVlOworCQkJZXhwZWN0ID0gcGJsayArIChqICogZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCQkJaWYgKGluZF9idWZbaW5kX29mZl0gIT0gZXhwZWN0KQorCQkJCWdvdG8gcmVzaXplX2lub2RlX2ludmFsaWQ7CisJCQlpbmRfb2ZmKys7CisJCX0KKwl9CisKK2NsZWFudXA6CisJaWYgKGRpbmRfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmRpbmRfYnVmKTsKKworIH0KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBkaXJoYXNoIHNpZ25lZC91bnNpZ25lZCBoaW50IGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIHZvaWQgZTJmc2NrX2ZpeF9kaXJoYXNoX2hpbnQoZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGN0eC0+ZnMtPnN1cGVyOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwljaGFyCWM7CisKKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpIHx8CisJICAgICEoc2ItPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkgfHwKKwkgICAgKHNiLT5zX2ZsYWdzICYgKEVYVDJfRkxBR1NfU0lHTkVEX0hBU0h8RVhUMl9GTEFHU19VTlNJR05FRF9IQVNIKSkpCisJCXJldHVybjsKKworCWMgPSAoY2hhcikgMjU1OworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0RJUkhBU0hfSElOVCwgJnBjdHgpKSB7CisJCWlmICgoKGludCkgYykgPT0gLTEpIHsKKwkJCXNiLT5zX2ZsYWdzIHw9IEVYVDJfRkxBR1NfU0lHTkVEX0hBU0g7CisJCX0gZWxzZSB7CisJCQlzYi0+c19mbGFncyB8PSBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0g7CisJCX0KKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoY3R4LT5mcyk7CisJfQorfQorCisKK3ZvaWQgY2hlY2tfc3VwZXJfYmxvY2soZTJmc2NrX3QgY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlibGs2NF90CWZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKwl1bnNpZ25lZCBpbnQJaXBnX21heDsKKwlwcm9ibGVtX3QJcHJvYmxlbTsKKwlibGs2NF90CWJsb2Nrc19wZXJfZ3JvdXAgPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlfX3UzMglicGdfbWF4LCBjcGdfbWF4OworCWludAlpbm9kZXNfcGVyX2Jsb2NrOworCWludAlpbm9kZV9zaXplOworCWludAlhY2NlcHRfdGltZV9mdWRnZTsKKwlpbnQJYnJva2VuX3N5c3RlbV9jbG9jazsKKwlkZ3JwX3QJaTsKKwlibGs2NF90CXNob3VsZF9iZTsKKwlzdHJ1Y3QgcHJvYmxlbV9jb250ZXh0CXBjdHg7CisJYmxrNjRfdAlmcmVlX2Jsb2NrcyA9IDA7CisJaW5vX3QJZnJlZV9pbm9kZXMgPSAwOworCWludCAgICAgY3N1bV9mbGFnLCBjbGVhcl90ZXN0X2ZzX2ZsYWc7CisKKwlpbm9kZXNfcGVyX2Jsb2NrID0gRVhUMl9JTk9ERVNfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisJaXBnX21heCA9IGlub2Rlc19wZXJfYmxvY2sgKiAoYmxvY2tzX3Blcl9ncm91cCAtIDQpOworCWlmIChpcGdfbWF4ID4gRVhUMl9NQVhfSU5PREVTX1BFUl9HUk9VUChzYikpCisJCWlwZ19tYXggPSBFWFQyX01BWF9JTk9ERVNfUEVSX0dST1VQKHNiKTsKKwljcGdfbWF4ID0gOCAqIEVYVDJfQkxPQ0tfU0laRShzYik7CisJaWYgKGNwZ19tYXggPiBFWFQyX01BWF9DTFVTVEVSU19QRVJfR1JPVVAoc2IpKQorCQljcGdfbWF4ID0gRVhUMl9NQVhfQ0xVU1RFUlNfUEVSX0dST1VQKHNiKTsKKwlicGdfbWF4ID0gOCAqIEVYVDJfQkxPQ0tfU0laRShzYikgKiBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisJaWYgKGJwZ19tYXggPiBFWFQyX01BWF9CTE9DS1NfUEVSX0dST1VQKHNiKSkKKwkJYnBnX21heCA9IEVYVDJfTUFYX0JMT0NLU19QRVJfR1JPVVAoc2IpOworCisJY3R4LT5pbnZhbGlkX2lub2RlX2JpdG1hcF9mbGFnID0gKGludCAqKSBlMmZzY2tfYWxsb2NhdGVfbWVtb3J5KGN0eCwKKwkJIHNpemVvZihpbnQpICogZnMtPmdyb3VwX2Rlc2NfY291bnQsICJpbnZhbGlkX2lub2RlX2JpdG1hcCIpOworCWN0eC0+aW52YWxpZF9ibG9ja19iaXRtYXBfZmxhZyA9IChpbnQgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCSBzaXplb2YoaW50KSAqIGZzLT5ncm91cF9kZXNjX2NvdW50LCAiaW52YWxpZF9ibG9ja19iaXRtYXAiKTsKKwljdHgtPmludmFsaWRfaW5vZGVfdGFibGVfZmxhZyA9IChpbnQgKikgZTJmc2NrX2FsbG9jYXRlX21lbW9yeShjdHgsCisJCXNpemVvZihpbnQpICogZnMtPmdyb3VwX2Rlc2NfY291bnQsICJpbnZhbGlkX2lub2RlX3RhYmxlIik7CisKKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCisJLyoKKwkgKiBWZXJpZnkgdGhlIHN1cGVyIGJsb2NrIGNvbnN0YW50cy4uLgorCSAqLworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImlub2Rlc19jb3VudCIsIHNiLT5zX2lub2Rlc19jb3VudCwKKwkJCSAgTUlOX0NIRUNLLCAxLCAwKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJibG9ja3NfY291bnQiLCBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSwKKwkJCSAgTUlOX0NIRUNLLCAxLCAwKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJmaXJzdF9kYXRhX2Jsb2NrIiwgc2ItPnNfZmlyc3RfZGF0YV9ibG9jaywKKwkJCSAgTUFYX0NIRUNLLCAwLCBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSk7CisJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAibG9nX2Jsb2NrX3NpemUiLCBzYi0+c19sb2dfYmxvY2tfc2l6ZSwKKwkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLCAwLAorCQkJICBFWFQyX01BWF9CTE9DS19MT0dfU0laRSAtIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJsb2dfY2x1c3Rlcl9zaXplIiwKKwkJCSAgc2ItPnNfbG9nX2NsdXN0ZXJfc2l6ZSwKKwkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLCBzYi0+c19sb2dfYmxvY2tfc2l6ZSwKKwkJCSAgKEVYVDJfTUFYX0NMVVNURVJfTE9HX1NJWkUgLQorCQkJICAgRVhUMl9NSU5fQ0xVU1RFUl9MT0dfU0laRSkpOworCWNoZWNrX3N1cGVyX3ZhbHVlKGN0eCwgImNsdXN0ZXJzX3Blcl9ncm91cCIsIHNiLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCwKKwkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLCA4LCBjcGdfbWF4KTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJibG9ja3NfcGVyX2dyb3VwIiwgc2ItPnNfYmxvY2tzX3Blcl9ncm91cCwKKwkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLCA4LCBicGdfbWF4KTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJpbm9kZXNfcGVyX2dyb3VwIiwgc2ItPnNfaW5vZGVzX3Blcl9ncm91cCwKKwkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLCBpbm9kZXNfcGVyX2Jsb2NrLCBpcGdfbWF4KTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJyX2Jsb2Nrc19jb3VudCIsIGV4dDJmc19yX2Jsb2Nrc19jb3VudChzYiksCisJCQkgIE1BWF9DSEVDSywgMCwgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikgLyAyKTsKKwljaGVja19zdXBlcl92YWx1ZShjdHgsICJyZXNlcnZlZF9nZHRfYmxvY2tzIiwKKwkJCSAgc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgTUFYX0NIRUNLLCAwLAorCQkJICBmcy0+YmxvY2tzaXplIC8gc2l6ZW9mKF9fdTMyKSk7CisJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAiZGVzY19zaXplIiwKKwkJCSAgc2ItPnNfZGVzY19zaXplLCBNQVhfQ0hFQ0sgfCBMT0cyX0NIRUNLLCAwLAorCQkJICBFWFQyX01BWF9ERVNDX1NJWkUpOworCWlmIChzYi0+c19yZXZfbGV2ZWwgPiBFWFQyX0dPT0RfT0xEX1JFVikKKwkJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAiZmlyc3RfaW5vIiwgc2ItPnNfZmlyc3RfaW5vLAorCQkJCSAgTUlOX0NIRUNLIHwgTUFYX0NIRUNLLAorCQkJCSAgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8sIHNiLT5zX2lub2Rlc19jb3VudCk7CisJaW5vZGVfc2l6ZSA9IEVYVDJfSU5PREVfU0laRShzYik7CisJY2hlY2tfc3VwZXJfdmFsdWUoY3R4LCAiaW5vZGVfc2l6ZSIsCisJCQkgIGlub2RlX3NpemUsIE1JTl9DSEVDSyB8IE1BWF9DSEVDSyB8IExPRzJfQ0hFQ0ssCisJCQkgIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSwgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgIT0gKHNiLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAqCisJCQkJICAgICAgIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSkpIHsKKwkJcGN0eC5udW0gPSBzYi0+c19jbHVzdGVyc19wZXJfZ3JvdXAgKiBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisJCXBjdHguc3RyID0gImJsb2NrX3NpemUiOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfTUlTQ19DT1JSVVBUX1NVUEVSLCAmcGN0eCk7CisJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQUJPUlQ7IC8qIG5ldmVyIGdldCBoZXJlISAqLworCQlyZXR1cm47CisJfQorCisJaWYgKChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfR09UX0RFVlNJWkUpICYmCisJICAgIChjdHgtPm51bV9ibG9ja3MgPCBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSkpIHsKKwkJcGN0eC5ibGsgPSBleHQyZnNfYmxvY2tzX2NvdW50KHNiKTsKKwkJcGN0eC5ibGsyID0gY3R4LT5udW1fYmxvY2tzOworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0ZTX1NJWkVfV1JPTkcsICZwY3R4KSkgeworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXNob3VsZF9iZSA9IChzYi0+c19sb2dfYmxvY2tfc2l6ZSA9PSAwICYmCisJCSAgICAgRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpID09IDEpID8gMSA6IDA7CisJaWYgKHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2sgIT0gc2hvdWxkX2JlKSB7CisJCXBjdHguYmxrID0gc2ItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkJcGN0eC5ibGsyID0gc2hvdWxkX2JlOworCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfRklSU1RfREFUQV9CTE9DSywgJnBjdHgpOworCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX0FCT1JUOworCQlyZXR1cm47CisJfQorCisJc2hvdWxkX2JlID0gc2ItPnNfaW5vZGVzX3Blcl9ncm91cCAqIGZzLT5ncm91cF9kZXNjX2NvdW50OworCWlmIChzYi0+c19pbm9kZXNfY291bnQgIT0gc2hvdWxkX2JlKSB7CisJCXBjdHguaW5vID0gc2ItPnNfaW5vZGVzX2NvdW50OworCQlwY3R4LmlubzIgPSBzaG91bGRfYmU7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfSU5PREVfQ09VTlRfV1JPTkcsICZwY3R4KSkgeworCQkJc2ItPnNfaW5vZGVzX2NvdW50ID0gc2hvdWxkX2JlOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQl9CisJfQorCisJLyogSXMgNjRiaXQgc2V0IGFuZCBleHRlbnRzIHVuc2V0PyAqLworCWlmIChFWFQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpICYmCisJICAgICFFWFQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF82NEJJVF9XSVRIT1VUX0VYVEVOVFMsICZwY3R4KSkgeworCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCB8PQorCQkJRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFM7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisKKwkvKgorCSAqIFZlcmlmeSB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMuLi4uCisJICovCisJZmlyc3RfYmxvY2sgPSBzYi0+c19maXJzdF9kYXRhX2Jsb2NrOworCWxhc3RfYmxvY2sgPSBleHQyZnNfYmxvY2tzX2NvdW50KHNiKS0xOworCisJY3N1bV9mbGFnID0gRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJcGN0eC5ncm91cCA9IGk7CisKKwkJaWYgKCFFWFQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSkgeworCQkJZmlyc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBpKTsKKwkJCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGkpOworCQl9CisKKwkJaWYgKChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkgPCBmaXJzdF9ibG9jaykgfHwKKwkJICAgIChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkgPiBsYXN0X2Jsb2NrKSkgeworCQkJcGN0eC5ibGsgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSk7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0JCX05PVF9HUk9VUCwgJnBjdHgpKQorCQkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgaSwgMCk7CisJCX0KKwkJaWYgKGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKSA9PSAwKSB7CisJCQljdHgtPmludmFsaWRfYmxvY2tfYml0bWFwX2ZsYWdbaV0rKzsKKwkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCX0KKwkJaWYgKChleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkgPCBmaXJzdF9ibG9jaykgfHwKKwkJICAgIChleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkgPiBsYXN0X2Jsb2NrKSkgeworCQkJcGN0eC5ibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0lCX05PVF9HUk9VUCwgJnBjdHgpKQorCQkJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgaSwgMCk7CisJCX0KKwkJaWYgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSA9PSAwKSB7CisJCQljdHgtPmludmFsaWRfaW5vZGVfYml0bWFwX2ZsYWdbaV0rKzsKKwkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCX0KKwkJaWYgKChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSA8IGZpcnN0X2Jsb2NrKSB8fAorCQkgICAgKChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSArCisJCSAgICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwIC0gMSkgPiBsYXN0X2Jsb2NrKSkgeworCQkJcGN0eC5ibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKTsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfSVRBQkxFX05PVF9HUk9VUCwgJnBjdHgpKQorCQkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Nfc2V0KGZzLCBpLCAwKTsKKwkJfQorCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgPT0gMCkgeworCQkJY3R4LT5pbnZhbGlkX2lub2RlX3RhYmxlX2ZsYWdbaV0rKzsKKwkJCWN0eC0+aW52YWxpZF9iaXRtYXBzKys7CisJCX0KKwkJZnJlZV9ibG9ja3MgKz0gZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBpKTsKKwkJZnJlZV9pbm9kZXMgKz0gZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKTsKKworCQlpZiAoKGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgaSkgPiBzYi0+c19ibG9ja3NfcGVyX2dyb3VwKSB8fAorCQkgICAgKGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChmcywgaSkgPiBzYi0+c19pbm9kZXNfcGVyX2dyb3VwKSB8fAorCQkgICAgKGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZnMsIGkpID4gc2ItPnNfaW5vZGVzX3Blcl9ncm91cCkpCisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKworCQlzaG91bGRfYmUgPSAwOworCQlpZiAoIWV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KGZzLCBpKSkgeworCQkJcGN0eC5jc3VtMSA9IGV4dDJmc19iZ19jaGVja3N1bShmcywgaSk7CisJCQlwY3R4LmNzdW0yID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgaSk7CisJCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0dEVF9DU1VNLCAmcGN0eCkpIHsKKwkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIDApOworCQkJCXNob3VsZF9iZSA9IDE7CisJCQl9CisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJfQorCisJCWlmICghY3N1bV9mbGFnICYmCisJCSAgICAoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSB8fAorCQkgICAgIGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkgfHwKKwkJICAgICBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkgIT0gMCkpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfR0RUX1VOSU5JVCwgJnBjdHgpKSB7CisJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBpLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGZzLCBpLCAwKTsKKwkJCQlzaG91bGRfYmUgPSAxOworCQkJfQorCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCX0KKworCQlpZiAoaSA9PSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEgJiYKKwkJICAgIGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBpLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCkpIHsKKwkJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfQkJfVU5JTklUX0xBU1QsICZwY3R4KSkgeworCQkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQkJCXNob3VsZF9iZSA9IDE7CisJCQl9CisJCQlleHQyZnNfdW5tYXJrX3ZhbGlkKGZzKTsKKwkJfQorCisJCWlmIChjc3VtX2ZsYWcgJiYKKwkJICAgIChleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkgPiBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGkpIHx8CisJCSAgICAgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpID4gc2ItPnNfaW5vZGVzX3Blcl9ncm91cCkpIHsKKwkJCXBjdHguYmxrID0gZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpOworCQkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9HRFRfSVRBQkxFX1VOVVNFRCwgJnBjdHgpKSB7CisJCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGZzLCBpLCAwKTsKKwkJCQlzaG91bGRfYmUgPSAxOworCQkJfQorCQkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisJCX0KKworCQlpZiAoc2hvdWxkX2JlKQorCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGkpOworCQkvKiBJZiB0aGUgdXNlciBhYm9ydHMgZTJmc2NrIGJ5IHR5cGluZyBeQywgc3RvcCByaWdodCBhd2F5ICovCisJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCQlyZXR1cm47CisJfQorCisJY3R4LT5mcmVlX2Jsb2NrcyA9IEVYVDJGU19DMkIoZnMsIGZyZWVfYmxvY2tzKTsKKwljdHgtPmZyZWVfaW5vZGVzID0gZnJlZV9pbm9kZXM7CisKKwlpZiAoKGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChzYikgPiBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSkgfHwKKwkgICAgKHNiLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID4gc2ItPnNfaW5vZGVzX2NvdW50KSkKKwkJZXh0MmZzX3VubWFya192YWxpZChmcyk7CisKKworCS8qCisJICogSWYgd2UgaGF2ZSBpbnZhbGlkIGJpdG1hcHMsIHNldCB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlCisJICogZmlsZXN5c3RlbS4KKwkgKi8KKwlpZiAoY3R4LT5pbnZhbGlkX2JpdG1hcHMgJiYgIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSkgeworCQlzYi0+c19zdGF0ZSAmPSB+RVhUMl9WQUxJRF9GUzsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisKKyNpZm5kZWYgRVhUMl9TS0lQX1VVSUQKKwkvKgorCSAqIElmIHRoZSBVVUlEIGZpZWxkIGlzbid0IGFzc2lnbmVkLCBhc3NpZ24gaXQuCisJICovCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgJiYgdXVpZF9pc19udWxsKHNiLT5zX3V1aWQpKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfQUREX1VVSUQsICZwY3R4KSkgeworCQkJdXVpZF9nZW5lcmF0ZShzYi0+c191dWlkKTsKKwkJCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfRElSVFk7CisJCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwkJfQorCX0KKyNlbmRpZgorCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGRpc2FibGUgdGhlIHRlc3RfZnMgZmxhZworCSAqLworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsCisJCQkgICAgImNsZWFyX3Rlc3RfZnNfZmxhZyIsIDAsIDEsCisJCQkgICAgJmNsZWFyX3Rlc3RfZnNfZmxhZyk7CisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgJiYKKwkgICAgY2xlYXJfdGVzdF9mc19mbGFnICYmCisJICAgIChmcy0+c3VwZXItPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUykgJiYKKwkgICAgKGZzX3Byb2NfY2hlY2soImV4dDQiKSB8fCBjaGVja19mb3JfbW9kdWxlcygiZXh0NCIpKSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl8wX0NMRUFSX1RFU1RGU19GTEFHLCAmcGN0eCkpIHsKKwkJCWZzLT5zdXBlci0+c19mbGFncyAmPSB+RVhUMl9GTEFHU19URVNUX0ZJTEVTWVM7CisJCQlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX0RJUlRZOworCQkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJCX0KKwl9CisJCQkKKwkvKgorCSAqIEZvciB0aGUgSHVyZCwgY2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxldHlwZSBvcHRpb24gaXMgc2V0LAorCSAqIHNpbmNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKwkgKi8KKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSAmJgorCSAgICBmcy0+c3VwZXItPnNfY3JlYXRvcl9vcyA9PSBFWFQyX09TX0hVUkQgJiYKKwkgICAgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSkpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9IVVJEX0NMRUFSX0ZJTEVUWVBFLCAmcGN0eCkpIHsKKwkJCWZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICY9CisJCQkJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFueSBvZiB0aGUgY29tcGF0aWJpbGl0eSBmbGFncyBzZXQsIHdlIG5lZWQgdG8gaGF2ZSBhCisJICogcmV2aXNpb24gMSBmaWxlc3lzdGVtLiAgTW9zdCBrZXJuZWxzIHdpbGwgbm90IGNoZWNrIHRoZSBmbGFncyBvbgorCSAqIGEgcmV2IDAgZmlsZXN5c3RlbSBhbmQgd2UgbWF5IGhhdmUgY29ycnVwdGlvbiBpc3N1ZXMgYmVjYXVzZSBvZgorCSAqIHRoZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbS4KKwkgKi8KKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSAmJgorCSAgICBmcy0+c3VwZXItPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWICYmCisJICAgIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgfHwKKwkgICAgIGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCB8fAorCSAgICAgZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9GU19SRVZfTEVWRUwsICZwY3R4KSkgeworCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwIGFueSBvcnBoYW4gaW5vZGVzLCBpZiBwcmVzZW50LgorCSAqLworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpICYmIHJlbGVhc2Vfb3JwaGFuX2lub2RlcyhjdHgpKSB7CisJCWZzLT5zdXBlci0+c19zdGF0ZSAmPSB+RVhUMl9WQUxJRF9GUzsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCS8qCisJICogVW5mb3J0dW5hdGVseSwgZHVlIHRvIFdpbmRvd3MnIHVuZm9ydHVuYXRlIGRlc2lnbiBkZWNpc2lvbgorCSAqIHRvIGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgY2xvY2sgdG8gdGljayBsb2NhbHRpbWUsIGluc3RlYWQKKwkgKiBvZiB0aGUgbW9yZSBwcm9wZXIgYW5kIGxlc3MgZXJyb3ItcHJvbmUgVVRDIHRpbWUsIG1hbnkKKwkgKiB1c2VycyBlbmQgdXAgaW4gdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgc3lzdGVtIGNsb2NrIGlzCisJICogaW5jb3JyZWN0bHkgc2V0IGF0IHRoZSB0aW1lIHdoZW4gZTJmc2NrIGlzIHJ1bi4KKwkgKgorCSAqIEhpc3RvcmljYWxseSB0aGlzIHdhcyB1c3VhbGx5IGR1ZSB0byBzb21lIGRpc3RyaWJ1dGlvbnMKKwkgKiBoYXZpbmcgYnVnZ3kgaW5pdCBzY3JpcHRzIGFuZC9vciBpbnN0YWxsZXJzIHRoYXQgZGlkbid0CisJICogY29ycmVjdGx5IGRldGVjdCB0aGlzIGNhc2UgYW5kIHRha2UgYXBwcm9wcmlhdGUKKwkgKiBjb3VudGVybWVhc3VyZXMuICBIb3dldmVyLCBpdCdzIHN0aWxsIHBvc3NpYmxlLCBkZXNwaXRlIHRoZQorCSAqIGJlc3QgZWZmb3J0cyBvZiBpbml0IHNjcmlwdCBhbmQgaW5zdGFsbGVyIGF1dGhvcnMgdG8gbm90IGJlCisJICogYWJsZSB0byBkZXRlY3QgdGhpcyBtaXNjb25maWd1cmF0aW9uLCB1c3VhbGx5IGR1ZSB0byBhCisJICogYnVnZ3kgb3IgbWlzY29uZmlndXJlZCB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VyIG9yIHRoZQorCSAqIGluc3RhbGxlciBub3QgaGF2aW5nIGFjY2VzcyB0byBhIG5ldHdvcmsgdGltZSBzZXJ2ZXIgZHVyaW5nCisJICogdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiAgU28gYnkgZGVmYXVsdCwgd2UgYWxsb3cgdGhlCisJICogc3VwZXJibG9jayB0aW1lcyB0byBiZSBmdWRnZWQgYnkgdXAgdG8gMjQgaG91cnMuICBUaGlzIGNhbgorCSAqIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgb3B0aW9ucy5hY2NlcHRfdGltZV9mdWRnZSB0byB0aGUKKwkgKiBib29sZWFuIHZhbHVlIG9mIGZhbHNlIGluIGUyZnNjay5jb25mLiAgV2UgYWxzbyBzdXBwb3J0CisJICogb3B0aW9ucy5idWdneV9pbml0X3NjcmlwdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCSAqLworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJhY2NlcHRfdGltZV9mdWRnZSIsCisJCQkgICAgMCwgMSwgJmFjY2VwdF90aW1lX2Z1ZGdlKTsKKwlwcm9maWxlX2dldF9ib29sZWFuKGN0eC0+cHJvZmlsZSwgIm9wdGlvbnMiLCAiYnVnZ3lfaW5pdF9zY3JpcHRzIiwKKwkJCSAgICAwLCBhY2NlcHRfdGltZV9mdWRnZSwgJmFjY2VwdF90aW1lX2Z1ZGdlKTsKKwljdHgtPnRpbWVfZnVkZ2UgPSBhY2NlcHRfdGltZV9mdWRnZSA/IDg2NDAwIDogMDsKKworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJicm9rZW5fc3lzdGVtX2Nsb2NrIiwKKwkJCSAgICAwLCAwLCAmYnJva2VuX3N5c3RlbV9jbG9jayk7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgb3IgbGFzdAorCSAqIHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlpZiAoIWJyb2tlbl9zeXN0ZW1fY2xvY2sgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgRTJGX0ZMQUdfVElNRV9JTlNBTkUpICYmCisJICAgIGZzLT5zdXBlci0+c19tdGltZSA+IChfX3UzMikgY3R4LT5ub3cpIHsKKwkJcGN0eC5udW0gPSBmcy0+c3VwZXItPnNfbXRpbWU7CisJCXByb2JsZW0gPSBQUl8wX0ZVVFVSRV9TQl9MQVNUX01PVU5UOworCQlpZiAoZnMtPnN1cGVyLT5zX210aW1lIDw9IChfX3UzMikgY3R4LT5ub3cgKyBjdHgtPnRpbWVfZnVkZ2UpCisJCQlwcm9ibGVtID0gUFJfMF9GVVRVUkVfU0JfTEFTVF9NT1VOVF9GVURHRUQ7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIHByb2JsZW0sICZwY3R4KSkgeworCQkJZnMtPnN1cGVyLT5zX210aW1lID0gY3R4LT5ub3c7CisJCQlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX0RJUlRZOworCQl9CisJfQorCWlmICghYnJva2VuX3N5c3RlbV9jbG9jayAmJgorCSAgICAhKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19USU1FX0lOU0FORSkgJiYKKwkgICAgZnMtPnN1cGVyLT5zX3d0aW1lID4gKF9fdTMyKSBjdHgtPm5vdykgeworCQlwY3R4Lm51bSA9IGZzLT5zdXBlci0+c193dGltZTsKKwkJcHJvYmxlbSA9IFBSXzBfRlVUVVJFX1NCX0xBU1RfV1JJVEU7CisJCWlmIChmcy0+c3VwZXItPnNfd3RpbWUgPD0gKF9fdTMyKSBjdHgtPm5vdyArIGN0eC0+dGltZV9mdWRnZSkKKwkJCXByb2JsZW0gPSBQUl8wX0ZVVFVSRV9TQl9MQVNUX1dSSVRFX0ZVREdFRDsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgcHJvYmxlbSwgJnBjdHgpKSB7CisJCQlmcy0+c3VwZXItPnNfd3RpbWUgPSBjdHgtPm5vdzsKKwkJCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfRElSVFk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1vdmUgdGhlIGV4dDMgam91cm5hbCBmaWxlLCBpZiBuZWNlc3NhcnkuCisJICovCisJZTJmc2NrX21vdmVfZXh0M19qb3VybmFsKGN0eCk7CisKKwkvKgorCSAqIEZpeCBqb3VybmFsIGhpbnQsIGlmIG5lY2Vzc2FyeQorCSAqLworCWUyZnNja19maXhfZXh0M19qb3VybmFsX2hpbnQoY3R4KTsKKworCS8qCisJICogQWRkIGRpcmhhc2ggaGludCBpZiBuZWNlc3NhcnkKKwkgKi8KKwllMmZzY2tfZml4X2Rpcmhhc2hfaGludChjdHgpOworCisJLyoKKwkgKiBIaWRlIHF1b3RhIGlub2RlcyBpZiBuZWNlc3NhcnkuCisJICovCisJZTJmc2NrX2hpZGVfcXVvdGEoY3R4KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgYmFja3VwIHRoZSBtYXN0ZXIgc2IgdG8gdGhlIGJhY2t1cCBzdXBlcgorICogYmxvY2tzLiAgUmV0dXJucyBub24temVybyBpZiB0aGUgc2Igc2hvdWxkIGJlIGJhY2tlZCB1cC4KKyAqLworCisvKgorICogQSBmZXcgZmxhZ3MgYXJlIHNldCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwsIGJ1dCBvbmx5IGluIHRoZQorICogcHJpbWFyeSBzdXBlcmJsb2NrLiAgVGhpcyBpcyBhY3R1YWxseSBhIGJhZCB0aGluZywgYW5kIHdlIHNob3VsZAorICogdHJ5IHRvIGRpc2NvdXJhZ2UgaXQgaW4gdGhlIGZ1dHVyZS4gIEluIHBhcnRpY3VsYXIsIGZvciB0aGUgbmV3ZXIKKyAqIGV4dDQgZmlsZXMsIGVzcGVjaWFsbHkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTksgYW5kCisgKiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUy4gIFNvIHNvbWUgb2YgdGhlc2UgbWF5IGdvIGF3YXkgaW4gdGhlCisgKiBmdXR1cmUuICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUiBtYXkgYWxzbyBnZXQgc2V0IHdoZW4KKyAqIGNvcHlpbmcgdGhlIHByaW1hcnkgc3VwZXJibG9jayBkdXJpbmcgb25saW5lIHJlc2l6ZS4KKyAqCisgKiBUaGUga2VybmVsIHdpbGwgc2V0IEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIsIGJ1dAorICogdW5mb3J0dW5hdGVseSwgd2Ugc2hvdWxkbid0IGlnbm9yZSBpdCBzaW5jZSBpZiBpdCdzIG5vdCBzZXQgaW4gdGhlCisgKiBiYWNrdXAsIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgc3RyaXBwZWQKKyAqIGF3YXkuCisgKi8KKyNkZWZpbmUgRkVBVFVSRV9ST19DT01QQVRfSUdOT1JFCShFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8IFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LKQorI2RlZmluZSBGRUFUVVJFX0lOQ09NUEFUX0lHTk9SRQkJKEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTfCBcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikKKworaW50IGNoZWNrX2JhY2t1cF9zdXBlcl9ibG9jayhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMJZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJZGdycF90CQlnOworCWJsazY0X3QJCXNiOworCWludAkJcmV0ID0gMDsKKwljaGFyCQlidWZbU1VQRVJCTE9DS19TSVpFXTsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jawkqYmFja3VwX3NiOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgYWxyZWFkeSB3cml0aW5nIG91dCB0aGUgYmFja3VwIGJsb2NrcywgdGhlbiB3ZQorCSAqIGRvbid0IG5lZWQgdG8gdGVzdC4gIEFsc28sIGlmIHRoZSBmaWxlc3lzdGVtIGlzIGludmFsaWQsIG9yCisJICogdGhlIGNoZWNrIHdhcyBhYm9ydGVkIG9yIGNhbmNlbGxlZCwgd2UgYWxzbyBkb24ndCB3YW50IHRvCisJICogZG8gdGhlIGJhY2t1cC4gIElmIHRoZSBmaWxlc3lzdGVtIHdhcyBvcGVuZWQgcmVhZC1vbmx5IHRoZW4KKwkgKiB3ZSBjYW4ndCBkbyB0aGUgYmFja3VwLgorCSAqLworCWlmICgoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19NQVNURVJfU0JfT05MWSkgPT0gMCkgfHwKKwkgICAgIWV4dDJmc190ZXN0X3ZhbGlkKGZzKSB8fAorCSAgICAoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9FUlJPUl9GUykgfHwKKwkgICAgKGN0eC0+ZmxhZ3MgJiAoRTJGX0ZMQUdfQUJPUlQgfCBFMkZfRkxBR19DQU5DRUwpKSB8fAorCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkpCisJCXJldHVybiAwOworCisJZm9yIChnID0gMTsgZyA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBnKyspIHsKKwkJaWYgKCFleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBnKSkKKwkJCWNvbnRpbnVlOworCisJCXNiID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZyk7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2Jsayhmcy0+aW8sIHNiLCAtU1VQRVJCTE9DS19TSVpFLAorCQkJCQkgICAgIGJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQljb250aW51ZTsKKwkJYmFja3VwX3NiID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopIGJ1ZjsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJZXh0MmZzX3N3YXBfc3VwZXIoYmFja3VwX3NiKTsKKyNlbmRpZgorCQlpZiAoKGJhY2t1cF9zYi0+c19tYWdpYyAhPSBFWFQyX1NVUEVSX01BR0lDKSB8fAorCQkgICAgKGJhY2t1cF9zYi0+c19yZXZfbGV2ZWwgPiBFWFQyX0xJQl9DVVJSRU5UX1JFVikgfHwKKwkJICAgICgoYmFja3VwX3NiLT5zX2xvZ19ibG9ja19zaXplICsgRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUpID4KKwkJICAgICBFWFQyX01BWF9CTE9DS19MT0dfU0laRSkgfHwKKwkJICAgIChFWFQyX0lOT0RFX1NJWkUoYmFja3VwX3NiKSA8IEVYVDJfR09PRF9PTERfSU5PREVfU0laRSkpCisJCQljb250aW51ZTsKKworI2RlZmluZSBTVVBFUl9JTkNPTVBBVF9ESUZGRVJFTlQoeCkJXAorCSgoZnMtPnN1cGVyLT54ICYgfkZFQVRVUkVfSU5DT01QQVRfSUdOT1JFKSAhPQlcCisJIChiYWNrdXBfc2ItPnggJiB+RkVBVFVSRV9JTkNPTVBBVF9JR05PUkUpKQorI2RlZmluZSBTVVBFUl9ST19DT01QQVRfRElGRkVSRU5UKHgpCVwKKwkoKGZzLT5zdXBlci0+eCAmIH5GRUFUVVJFX1JPX0NPTVBBVF9JR05PUkUpICE9CVwKKwkgKGJhY2t1cF9zYi0+eCAmIH5GRUFUVVJFX1JPX0NPTVBBVF9JR05PUkUpKQorI2RlZmluZSBTVVBFUl9ESUZGRVJFTlQoeCkJCVwKKwkoZnMtPnN1cGVyLT54ICE9IGJhY2t1cF9zYi0+eCkKKworCQlpZiAoU1VQRVJfRElGRkVSRU5UKHNfZmVhdHVyZV9jb21wYXQpIHx8CisJCSAgICBTVVBFUl9JTkNPTVBBVF9ESUZGRVJFTlQoc19mZWF0dXJlX2luY29tcGF0KSB8fAorCQkgICAgU1VQRVJfUk9fQ09NUEFUX0RJRkZFUkVOVChzX2ZlYXR1cmVfcm9fY29tcGF0KSB8fAorCQkgICAgU1VQRVJfRElGRkVSRU5UKHNfYmxvY2tzX2NvdW50KSB8fAorCQkgICAgU1VQRVJfRElGRkVSRU5UKHNfYmxvY2tzX2NvdW50X2hpKSB8fAorCQkgICAgU1VQRVJfRElGRkVSRU5UKHNfaW5vZGVzX2NvdW50KSB8fAorCQkgICAgbWVtY21wKGZzLT5zdXBlci0+c191dWlkLCBiYWNrdXBfc2ItPnNfdXVpZCwKKwkJCSAgIHNpemVvZihmcy0+c3VwZXItPnNfdXVpZCkpKQorCQkJcmV0ID0gMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3VuaXguYyBiL2UyZnNwcm9ncy9lMmZzY2svdW5peC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZjQ5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3VuaXguYwpAQCAtMCwwICsxLDE3ODEgQEAKKy8qCisgKiB1bml4LmMgLSBUaGUgdW5peC1zcGVjaWZpYyBjb2RlIGZvciBlMmZzY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBzYV9oYW5kbGVyIGluIFNvbGFyaXMgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX1NJR05BTF9ICisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisjaW5jbHVkZSAiZTJmc2NrLmgiCisjaW5jbHVkZSAicHJvYmxlbS5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKworLyogQ29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KK3N0YXRpYyBpbnQgY2ZsYWc7CQkvKiBjaGVjayBkaXNrICovCitzdGF0aWMgaW50IHNob3dfdmVyc2lvbl9vbmx5Oworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IHJlcGxhY2VfYmFkX2Jsb2NrczsKK3N0YXRpYyBpbnQga2VlcF9iYWRfYmxvY2tzOworc3RhdGljIGNoYXIgKmJhZF9ibG9ja3NfZmlsZTsKKworZTJmc2NrX3QgZTJmc2NrX2dsb2JhbF9jdHg7CS8qIFRyeSB5b3VyIHZlcnkgYmVzdCBub3QgdG8gdXNlIHRoaXMhICovCisKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCQkvKiBFbmFibGVkIGJ5IGNvbmZpZ3VyZSAtLWVuYWJsZS1qZnMtZGVidWcgKi8KK2ludCBqb3VybmFsX2VuYWJsZV9kZWJ1ZyA9IC0xOworI2VuZGlmCisKKyNpZm5kZWYgUk9PVF9TWVNDT05GRElSCisjZGVmaW5lIFJPT1RfU1lTQ09ORkRJUiAiL2V0YyIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB1c2FnZShlMmZzY2tfdCBjdHgpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorCQkiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorCQkiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisJCSJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIiksCisJCWN0eC0+cHJvZ3JhbV9uYW1lKTsKKworCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJcbkVtZXJnZW5jeSBoZWxwOlxuIgorCQkiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKwkJIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKwkJIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisJCSIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayBsaXN0XG4iCisJCSIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIikpOworCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCIiCisJCSIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorCQkiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisJCSIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorCQkiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorCQkiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorCQkiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorCQkpKTsKKworCWV4aXQoRlNDS19VU0FHRSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc3RhdHMoZTJmc2NrX3QJY3R4KQoreworCWV4dDJfZmlsc3lzIGZzID0gY3R4LT5mczsKKwlleHQyX2lub190IGlub2RlcywgaW5vZGVzX3VzZWQ7CisJYmxrNjRfdCBibG9ja3MsIGJsb2Nrc191c2VkOworCXVuc2lnbmVkIGludCBkaXJfbGlua3M7CisJdW5zaWduZWQgaW50IG51bV9maWxlcywgbnVtX2xpbmtzOworCV9fdTMyICptYXNrLCBtOworCWludCBmcmFnX3BlcmNlbnRfZmlsZSwgZnJhZ19wZXJjZW50X2RpciwgZnJhZ19wZXJjZW50X3RvdGFsOworCWludCBpLCBqLCBwcmludGVkID0gMDsKKworCWRpcl9saW5rcyA9IDIgKiBjdHgtPmZzX2RpcmVjdG9yeV9jb3VudCAtIDE7CisJbnVtX2ZpbGVzID0gY3R4LT5mc190b3RhbF9jb3VudCAtIGRpcl9saW5rczsKKwludW1fbGlua3MgPSBjdHgtPmZzX2xpbmtzX2NvdW50IC0gZGlyX2xpbmtzOworCWlub2RlcyA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisJaW5vZGVzX3VzZWQgPSAoZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAtCisJCSAgICAgICBmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQpOworCWJsb2NrcyA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwlibG9ja3NfdXNlZCA9IChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkgICAgICAgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpOworCisJZnJhZ19wZXJjZW50X2ZpbGUgPSAoMTAwMDAgKiBjdHgtPmZzX2ZyYWdtZW50ZWQpIC8gaW5vZGVzX3VzZWQ7CisJZnJhZ19wZXJjZW50X2ZpbGUgPSAoZnJhZ19wZXJjZW50X2ZpbGUgKyA1KSAvIDEwOworCisJZnJhZ19wZXJjZW50X2RpciA9ICgxMDAwMCAqIGN0eC0+ZnNfZnJhZ21lbnRlZF9kaXIpIC8gaW5vZGVzX3VzZWQ7CisJZnJhZ19wZXJjZW50X2RpciA9IChmcmFnX3BlcmNlbnRfZGlyICsgNSkgLyAxMDsKKworCWZyYWdfcGVyY2VudF90b3RhbCA9ICgoMTAwMDAgKiAoY3R4LT5mc19mcmFnbWVudGVkICsKKwkJCQkJY3R4LT5mc19mcmFnbWVudGVkX2RpcikpCisJCQkgICAgICAvIGlub2Rlc191c2VkKTsKKwlmcmFnX3BlcmNlbnRfdG90YWwgPSAoZnJhZ19wZXJjZW50X3RvdGFsICsgNSkgLyAxMDsKKworCWlmICghdmVyYm9zZSkgeworCQlsb2dfb3V0KGN0eCwgXygiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICIKKwkJCSAgICAgICAiJWxsdS8lbGx1IGJsb2Nrc1xuIiksCisJCQljdHgtPmRldmljZV9uYW1lLCBpbm9kZXNfdXNlZCwgaW5vZGVzLAorCQkJZnJhZ19wZXJjZW50X3RvdGFsIC8gMTAsIGZyYWdfcGVyY2VudF90b3RhbCAlIDEwLAorCQkJYmxvY2tzX3VzZWQsIGJsb2Nrcyk7CisJCXJldHVybjsKKwl9CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgInJlcG9ydF9mZWF0dXJlcyIsIDAsIDAsCisJCQkgICAgJmkpOworCWlmICh2ZXJib3NlICYmIGkpIHsKKwkJbG9nX291dChjdHgsICJcbkZpbGVzeXN0ZW0gZmVhdHVyZXM6Iik7CisJCW1hc2sgPSAmY3R4LT5mcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQ7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIG1hc2srKykgeworCQkJZm9yIChqID0gMCwgbSA9IDE7IGogPCAzMjsgaisrLCBtIDw8PSAxKSB7CisJCQkJaWYgKCptYXNrICYgbSkgeworCQkJCQlsb2dfb3V0KGN0eCwgIiAlcyIsCisJCQkJCQllMnBfZmVhdHVyZTJzdHJpbmcoaSwgbSkpOworCQkJCQlwcmludGVkKys7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChwcmludGVkID09IDApCisJCQlsb2dfb3V0KGN0eCwgIiAobm9uZSkiKTsKKwkJbG9nX291dChjdHgsICJcbiIpOworCX0KKworCWxvZ19vdXQoY3R4LCBQXygiXG4lMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIsCisJCQkiXG4lMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iLAorCQkJaW5vZGVzX3VzZWQpLCBpbm9kZXNfdXNlZCwKKwkJMTAwLjAgKiBpbm9kZXNfdXNlZCAvIGlub2RlcywgaW5vZGVzKTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iLAorCQkJIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIiwKKwkJCWN0eC0+ZnNfZnJhZ21lbnRlZCksCisJCWN0eC0+ZnNfZnJhZ21lbnRlZCwgZnJhZ19wZXJjZW50X2ZpbGUgLyAxMCwKKwkJZnJhZ19wZXJjZW50X2ZpbGUgJSAxMCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iLAorCQkJIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIiwKKwkJCWN0eC0+ZnNfZnJhZ21lbnRlZF9kaXIpLAorCQljdHgtPmZzX2ZyYWdtZW50ZWRfZGlyLCBmcmFnX3BlcmNlbnRfZGlyIC8gMTAsCisJCWZyYWdfcGVyY2VudF9kaXIgJSAxMCk7CisJbG9nX291dChjdHgsIF8oIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAiCisJCSAgICAgICAiJXUvJXUvJXVcbiIpLAorCQljdHgtPmZzX2luZF9jb3VudCwgY3R4LT5mc19kaW5kX2NvdW50LCBjdHgtPmZzX3RpbmRfY291bnQpOworCisJZm9yIChqPU1BWF9FWFRFTlRfREVQVEhfQ09VTlQtMTsgaiA+PTA7IGotLSkKKwkJaWYgKGN0eC0+ZXh0ZW50X2RlcHRoX2NvdW50W2pdKQorCQkJYnJlYWs7CisJaWYgKCsraikgeworCQlsb2dfb3V0KGN0eCwgIiVzIiwgXygiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIpKTsKKwkJZm9yIChpPTA7IGkgPCBqOyBpKyspIHsKKwkJCWlmIChpKQorCQkJCWZwdXRjKCcvJywgc3Rkb3V0KTsKKwkJCWxvZ19vdXQoY3R4LCAiJXUiLCBjdHgtPmV4dGVudF9kZXB0aF9jb3VudFtpXSk7CisJCX0KKwkJbG9nX291dChjdHgsICJcbiIpOworCX0KKworCWxvZ19vdXQoY3R4LCBQXygiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIiwKKwkJCSIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIiwKKwkJICAgYmxvY2tzX3VzZWQpLAorCQlibG9ja3NfdXNlZCwgMTAwLjAgKiBibG9ja3NfdXNlZCAvIGJsb2NrcywgYmxvY2tzKTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgYmFkIGJsb2NrXG4iLCAiJTEydSBiYWQgYmxvY2tzXG4iLAorCQkJY3R4LT5mc19iYWRibG9ja3NfY291bnQpLCBjdHgtPmZzX2JhZGJsb2Nrc19jb3VudCk7CisJbG9nX291dChjdHgsIFBfKCIlMTJ1IGxhcmdlIGZpbGVcbiIsICIlMTJ1IGxhcmdlIGZpbGVzXG4iLAorCQkJY3R4LT5sYXJnZV9maWxlcyksIGN0eC0+bGFyZ2VfZmlsZXMpOworCWxvZ19vdXQoY3R4LCBQXygiXG4lMTJ1IHJlZ3VsYXIgZmlsZVxuIiwgIlxuJTEydSByZWd1bGFyIGZpbGVzXG4iLAorCQkJY3R4LT5mc19yZWd1bGFyX2NvdW50KSwgY3R4LT5mc19yZWd1bGFyX2NvdW50KTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgZGlyZWN0b3J5XG4iLCAiJTEydSBkaXJlY3Rvcmllc1xuIiwKKwkJCWN0eC0+ZnNfZGlyZWN0b3J5X2NvdW50KSwgY3R4LT5mc19kaXJlY3RvcnlfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIsCisJCQkiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iLCBjdHgtPmZzX2NoYXJkZXZfY291bnQpLAorCQljdHgtPmZzX2NoYXJkZXZfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIiwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iLAorCQkJY3R4LT5mc19ibG9ja2Rldl9jb3VudCksIGN0eC0+ZnNfYmxvY2tkZXZfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBmaWZvXG4iLCAiJTEydSBmaWZvc1xuIiwgY3R4LT5mc19maWZvX2NvdW50KSwKKwkJY3R4LT5mc19maWZvX2NvdW50KTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgbGlua1xuIiwgIiUxMnUgbGlua3NcbiIsIG51bV9saW5rcyksCisJCWN0eC0+ZnNfbGlua3NfY291bnQgLSBkaXJfbGlua3MpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBzeW1ib2xpYyBsaW5rIiwgIiUxMnUgc3ltYm9saWMgbGlua3MiLAorCQkJY3R4LT5mc19zeW1saW5rc19jb3VudCksIGN0eC0+ZnNfc3ltbGlua3NfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iLAorCQkJIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIsCisJCQljdHgtPmZzX2Zhc3Rfc3ltbGlua3NfY291bnQpLAorCQljdHgtPmZzX2Zhc3Rfc3ltbGlua3NfY291bnQpOworCWxvZ19vdXQoY3R4LCBQXygiJTEydSBzb2NrZXRcbiIsICIlMTJ1IHNvY2tldHNcbiIsCisJCQljdHgtPmZzX3NvY2tldHNfY291bnQpLAorCQljdHgtPmZzX3NvY2tldHNfY291bnQpOworCWxvZ19vdXQoY3R4LCAiLS0tLS0tLS0tLS0tXG4iKTsKKwlsb2dfb3V0KGN0eCwgUF8oIiUxMnUgZmlsZVxuIiwgIiUxMnUgZmlsZXNcbiIsIG51bV9maWxlcyksCisJCW51bV9maWxlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX21vdW50KGUyZnNja190IGN0eCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJY29udDsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLAorCQkJCQkgJmN0eC0+bW91bnRfZmxhZ3MpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX2NoZWNrX2lmX21vdW50IiwgcmV0dmFsLAorCQkJXygid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIpLAorCQkJY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBpc24ndCBtb3VudGVkLCBvciBpdCdzIHRoZSByb290CisJICogZmlsZXN5c3RlbSBhbmQgaXQncyBtb3VudGVkIHJlYWQtb25seSwgYW5kIHdlJ3JlIG5vdCBkb2luZworCSAqIGEgcmVhZC93cml0ZSBjaGVjaywgdGhlbiBldmVyeXRoaW5nJ3MgZmluZS4KKwkgKi8KKwlpZiAoKCEoY3R4LT5tb3VudF9mbGFncyAmIChFWFQyX01GX01PVU5URUQgfCBFWFQyX01GX0JVU1kpKSkgfHwKKwkgICAgKChjdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9JU1JPT1QpICYmCisJICAgICAoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpICYmCisJICAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfV1JJVEVDSEVDSykpKQorCQlyZXR1cm47CisKKwlpZiAoKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSB8fAorCSAgICAgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0ZPUkNFKSAmJgorCSAgICAgIChjdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkpKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfV1JJVEVDSEVDSykpIHsKKwkJbG9nX291dChjdHgsIF8oIldhcm5pbmchICAlcyBpcyAlcy5cbiIpLAorCQkJY3R4LT5maWxlc3lzdGVtX25hbWUsCisJCQljdHgtPm1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEID8KKwkJCQkibW91bnRlZCIgOiAiaW4gdXNlIik7CisJCXJldHVybjsKKwl9CisKKwlsb2dfb3V0KGN0eCwgXygiJXMgaXMgJXMuXG4iKSwgY3R4LT5maWxlc3lzdGVtX25hbWUsCisJCWN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQgPyAibW91bnRlZCIgOiAiaW4gdXNlIik7CisJaWYgKCFjdHgtPmludGVyYWN0aXZlIHx8IGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX0JVU1kpCisJCWZhdGFsX2Vycm9yKGN0eCwgXygiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cblxuIikpOworCXB1dHMoIlwwMDdcMDA3XDAwN1wwMDciKTsKKwlsb2dfb3V0KGN0eCwgIiVzIiwgXygiXG5cbldBUk5JTkchISEgICIKKwkJICAgICAgICJUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgICIKKwkJICAgICAgICJJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKwkJICAgICAgICJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG5cbiIpKTsKKwlwdXRzKCJcMDA3XDAwN1wwMDciKTsKKwljb250ID0gYXNrX3luKGN0eCwgXygiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIiksIDApOworCWlmICghY29udCkgeworCQlwcmludGYoIiVzIiwgXygiY2hlY2sgYWJvcnRlZC5cbiIpKTsKKwkJZXhpdCAoMCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBpc19vbl9iYXR0KHZvaWQpCit7CisJRklMRQkqZjsKKwlESVIJKmQ7CisJY2hhcgl0bXBbODBdLCB0bXAyWzgwXSwgZm5hbWVbODBdOworCXVuc2lnbmVkIGludAlhY2ZsYWc7CisJc3RydWN0IGRpcmVudCoJZGU7CisKKwlmID0gZm9wZW4oIi9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0FDL29ubGluZSIsICJyIik7CisJaWYgKGYpIHsKKwkJaWYgKGZzY2FuZihmLCAiJXVcbiIsICZhY2ZsYWcpID09IDEpIHsKKwkJCWZjbG9zZShmKTsKKwkJCXJldHVybiAoIWFjZmxhZyk7CisJCX0KKwkJZmNsb3NlKGYpOworCX0KKwlmID0gZm9wZW4oIi9wcm9jL2FwbSIsICJyIik7CisJaWYgKGYpIHsKKwkJaWYgKGZzY2FuZihmLCAiJXMgJXMgJXMgJXgiLCB0bXAsIHRtcCwgdG1wLCAmYWNmbGFnKSAhPSA0KQorCQkJYWNmbGFnID0gMTsKKwkJZmNsb3NlKGYpOworCQlyZXR1cm4gKGFjZmxhZyAhPSAxKTsKKwl9CisJZCA9IG9wZW5kaXIoIi9wcm9jL2FjcGkvYWNfYWRhcHRlciIpOworCWlmIChkKSB7CisJCXdoaWxlICgoZGU9cmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJuY21wKCIuIiwgZGUtPmRfbmFtZSwgMSkpCisJCQkJY29udGludWU7CisJCQlzbnByaW50ZihmbmFtZSwgODAsICIvcHJvYy9hY3BpL2FjX2FkYXB0ZXIvJXMvc3RhdGUiLAorCQkJCSBkZS0+ZF9uYW1lKTsKKwkJCWYgPSBmb3BlbihmbmFtZSwgInIiKTsKKwkJCWlmICghZikKKwkJCQljb250aW51ZTsKKwkJCWlmIChmc2NhbmYoZiwgIiVzICVzIiwgdG1wMiwgdG1wKSAhPSAyKQorCQkJCXRtcFswXSA9IDA7CisJCQlmY2xvc2UoZik7CisJCQlpZiAoc3RybmNtcCh0bXAsICJvZmYtbGluZSIsIDgpID09IDApIHsKKwkJCQljbG9zZWRpcihkKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCQljbG9zZWRpcihkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0gY2FuIGJlIHNraXBwZWQ7IGlmIHNvLAorICogaXQgd2lsbCBleGl0IHdpdGggRTJGU0NLX09LLiAgVW5kZXIgc29tZSBjb25kaXRpb25zIGl0IHdpbGwgcHJpbnQgYQorICogbWVzc2FnZSBleHBsYWluaW5nIHdoeSBhIGNoZWNrIGlzIGJlaW5nIGZvcmNlZC4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfaWZfc2tpcChlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworCXVuc2lnbmVkIGludCByZWFzb25fYXJnID0gMDsKKwlsb25nIG5leHRfY2hlY2s7CisJaW50IGJhdHQgPSBpc19vbl9iYXR0KCk7CisJaW50IGRlZmVyX2NoZWNrX29uX2JhdHRlcnk7CisJaW50IGJyb2tlbl9zeXN0ZW1fY2xvY2s7CisJdGltZV90IGxhc3RjaGVjazsKKworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJicm9rZW5fc3lzdGVtX2Nsb2NrIiwKKwkJCSAgICAwLCAwLCAmYnJva2VuX3N5c3RlbV9jbG9jayk7CisJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19USU1FX0lOU0FORSkKKwkJYnJva2VuX3N5c3RlbV9jbG9jayA9IDE7CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwKKwkJCSAgICAiZGVmZXJfY2hlY2tfb25fYmF0dGVyeSIsIDAsIDEsCisJCQkgICAgJmRlZmVyX2NoZWNrX29uX2JhdHRlcnkpOworCWlmICghZGVmZXJfY2hlY2tfb25fYmF0dGVyeSkKKwkJYmF0dCA9IDA7CisKKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfRk9SQ0UpIHx8IGJhZF9ibG9ja3NfZmlsZSB8fCBjZmxhZykKKwkJcmV0dXJuOworCisJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfSk9VUk5BTF9PTkxZKQorCQlnb3RvIHNraXA7CisKKwlsYXN0Y2hlY2sgPSBmcy0+c3VwZXItPnNfbGFzdGNoZWNrOworCWlmIChsYXN0Y2hlY2sgPiBjdHgtPm5vdykKKwkJbGFzdGNoZWNrIC09IGN0eC0+dGltZV9mdWRnZTsKKwlpZiAoKGZzLT5zdXBlci0+c19zdGF0ZSAmIEVYVDJfRVJST1JfRlMpIHx8CisJICAgICFleHQyZnNfdGVzdF92YWxpZChmcykpCisJCXJlYXNvbiA9IF8oIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIik7CisJZWxzZSBpZiAoKGZzLT5zdXBlci0+c19zdGF0ZSAmIEVYVDJfVkFMSURfRlMpID09IDApCisJCXJlYXNvbiA9IF8oIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIik7CisJZWxzZSBpZiAoY2hlY2tfYmFja3VwX3N1cGVyX2Jsb2NrKGN0eCkpCisJCXJlYXNvbiA9IF8oIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIik7CisJZWxzZSBpZiAoKGZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50ID4gMCkgJiYKKwkJIChmcy0+c3VwZXItPnNfbW50X2NvdW50ID49CisJCSAgKHVuc2lnbmVkKSBmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCkpIHsKKwkJcmVhc29uID0gXygiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIik7CisJCXJlYXNvbl9hcmcgPSBmcy0+c3VwZXItPnNfbW50X2NvdW50OworCQlpZiAoYmF0dCAmJiAoZnMtPnN1cGVyLT5zX21udF9jb3VudCA8CisJCQkgICAgICh1bnNpZ25lZCkgZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQqMikpCisJCQlyZWFzb24gPSAwOworCX0gZWxzZSBpZiAoIWJyb2tlbl9zeXN0ZW1fY2xvY2sgJiYgZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwgJiYKKwkJICAgKGN0eC0+bm93IDwgbGFzdGNoZWNrKSkgeworCQlyZWFzb24gPSBfKCIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIpOworCQlpZiAoYmF0dCkKKwkJCXJlYXNvbiA9IDA7CisJfSBlbHNlIGlmICghYnJva2VuX3N5c3RlbV9jbG9jayAmJiBmcy0+c3VwZXItPnNfY2hlY2tpbnRlcnZhbCAmJgorCQkgICAoKGN0eC0+bm93IC0gbGFzdGNoZWNrKSA+PQorCQkgICAgKCh0aW1lX3QpIGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsKSkpIHsKKwkJcmVhc29uID0gXygiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIik7CisJCXJlYXNvbl9hcmcgPSAoY3R4LT5ub3cgLSBmcy0+c3VwZXItPnNfbGFzdGNoZWNrKS8oMzYwMCoyNCk7CisJCWlmIChiYXR0ICYmICgoY3R4LT5ub3cgLSBmcy0+c3VwZXItPnNfbGFzdGNoZWNrKSA8CisJCQkgICAgIGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsKjIpKQorCQkJcmVhc29uID0gMDsKKwl9CisJaWYgKHJlYXNvbikgeworCQlsb2dfb3V0KGN0eCwgIiVzIiwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCWxvZ19vdXQoY3R4LCByZWFzb24sIHJlYXNvbl9hcmcpOworCQlsb2dfb3V0KGN0eCwgIiVzIiwgXygiLCBjaGVjayBmb3JjZWQuXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgZ2xvYmFsIGNvdW50cyBmcm9tIHRoZSBibG9jayBncm91cCBjb3VudHMuICBUaGlzCisJICogaXMgbmVlZGVkIHNpbmNlIG1vZGVybiBrZXJuZWxzIGRvbid0IHVwZGF0ZSB0aGUgZ2xvYmFsCisJICogY291bnRzIHNvIGFzIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGVudGlyZSBmaWxlIHN5c3RlbS4gIFNvCisJICogaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IHVubW91bnRlZCBjbGVhbmx5LCB0aGUgZ2xvYmFsCisJICogY291bnRzIG1heSBub3QgYmUgYWNjdXJhdGUuICBVcGRhdGUgdGhlbSBoZXJlIGlmIHdlIGNhbiwKKwkgKiBmb3IgdGhlIGJlbmVmaXQgb2YgdXNlcnMgd2hvIG1pZ2h0IGV4YW1pbmUgdGhlIGZpbGUgc3lzdGVtCisJICogdXNpbmcgZHVtcGUyZnMuICAoVGhpcyBpcyBmb3IgY29zbWV0aWMgcmVhc29ucyBvbmx5LikKKwkgKi8KKwljbGVhcl9wcm9ibGVtX2NvbnRleHQoJnBjdHgpOworCXBjdHguaW5vID0gZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50OworCXBjdHguaW5vMiA9IGN0eC0+ZnJlZV9pbm9kZXM7CisJaWYgKChwY3R4LmlubyAhPSBwY3R4LmlubzIpICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgJiYKKwkgICAgZml4X3Byb2JsZW0oY3R4LCBQUl8wX0ZSRUVfSU5PREVfQ09VTlQsICZwY3R4KSkgeworCQlmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjdHgtPmZyZWVfaW5vZGVzOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJcGN0eC5ibGsgPSBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwlwY3R4LmJsazIgPSBjdHgtPmZyZWVfYmxvY2tzOworCWlmICgocGN0eC5ibGsgIT0gcGN0eC5ibGsyKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpICYmCisJICAgIGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9GUkVFX0JMT0NLX0NPVU5ULCAmcGN0eCkpIHsKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIGN0eC0+ZnJlZV9ibG9ja3MpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCisJLyogUHJpbnQgdGhlIHN1bW1hcnkgbWVzc2FnZSB3aGVuIHdlJ3JlIHNraXBwaW5nIGEgZnVsbCBjaGVjayAqLworCWxvZ19vdXQoY3R4LCBfKCIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIiksCisJCWN0eC0+ZGV2aWNlX25hbWUsCisJCWZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgLSBmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQsCisJCWZzLT5zdXBlci0+c19pbm9kZXNfY291bnQsCisJCWV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLAorCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpOworCW5leHRfY2hlY2sgPSAxMDAwMDA7CisJaWYgKGZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50ID4gMCkgeworCQluZXh0X2NoZWNrID0gZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQgLSBmcy0+c3VwZXItPnNfbW50X2NvdW50OworCQlpZiAobmV4dF9jaGVjayA8PSAwKQorCQkJbmV4dF9jaGVjayA9IDE7CisJfQorCWlmICghYnJva2VuX3N5c3RlbV9jbG9jayAmJiBmcy0+c3VwZXItPnNfY2hlY2tpbnRlcnZhbCAmJgorCSAgICAoKGN0eC0+bm93IC0gZnMtPnN1cGVyLT5zX2xhc3RjaGVjaykgPj0gZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwpKQorCQluZXh0X2NoZWNrID0gMTsKKwlpZiAobmV4dF9jaGVjayA8PSA1KSB7CisJCWlmIChuZXh0X2NoZWNrID09IDEpIHsKKwkJCWlmIChiYXR0KQorCQkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCQlfKCIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIpKTsKKwkJCWVsc2UKKwkJCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCQkJXygiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIpKTsKKwkJfSBlbHNlCisJCQlsb2dfb3V0KGN0eCwgXygiIChjaGVjayBpbiAlbGQgbW91bnRzKSIpLAorCQkJCW5leHRfY2hlY2spOworCX0KKwlsb2dfb3V0KGN0eCwgIlxuIik7Citza2lwOgorCWV4dDJmc19jbG9zZShmcyk7CisJY3R4LT5mcyA9IE5VTEw7CisJZTJmc2NrX2ZyZWVfY29udGV4dChjdHgpOworCWV4aXQoRlNDS19PSyk7Cit9CisKKy8qCisgKiBGb3IgY29tcGxldGlvbiBub3RpY2UKKyAqLworc3RydWN0IHBlcmNlbnRfdGJsIHsKKwlpbnQJbWF4X3Bhc3M7CisJaW50CXRhYmxlWzMyXTsKK307CitzdGF0aWMgc3RydWN0IHBlcmNlbnRfdGJsIGUyZnNja190YmwgPSB7CisJNSwgeyAwLCA3MCwgOTAsIDkyLCAgOTUsIDEwMCB9Cit9Oworc3RhdGljIGNoYXIgYmFyWzEyOF0sIHNwYWNlc1sxMjhdOworCitzdGF0aWMgZmxvYXQgY2FsY19wZXJjZW50KHN0cnVjdCBwZXJjZW50X3RibCAqdGJsLCBpbnQgcGFzcywgaW50IGN1cnIsCisJCQkgIGludCBtYXgpCit7CisJZmxvYXQJcGVyY2VudDsKKworCWlmIChwYXNzIDw9IDApCisJCXJldHVybiAwLjA7CisJaWYgKHBhc3MgPiB0YmwtPm1heF9wYXNzIHx8IG1heCA9PSAwKQorCQlyZXR1cm4gMTAwLjA7CisJcGVyY2VudCA9ICgoZmxvYXQpIGN1cnIpIC8gKChmbG9hdCkgbWF4KTsKKwlyZXR1cm4gKChwZXJjZW50ICogKHRibC0+dGFibGVbcGFzc10gLSB0YmwtPnRhYmxlW3Bhc3MtMV0pKQorCQkrIHRibC0+dGFibGVbcGFzcy0xXSk7Cit9CisKK3ZvaWQgZTJmc2NrX2NsZWFyX3Byb2diYXIoZTJmc2NrX3QgY3R4KQoreworCWlmICghKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19QUk9HX0JBUikpCisJCXJldHVybjsKKworCXByaW50ZigiJXMlc1xyJXMiLCBjdHgtPnN0YXJ0X21ldGEsIHNwYWNlcyArIChzaXplb2Yoc3BhY2VzKSAtIDgwKSwKKwkgICAgICAgY3R4LT5zdG9wX21ldGEpOworCWZmbHVzaChzdGRvdXQpOworCWN0eC0+ZmxhZ3MgJj0gfkUyRl9GTEFHX1BST0dfQkFSOworfQorCitpbnQgZTJmc2NrX3NpbXBsZV9wcm9ncmVzcyhlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKmxhYmVsLCBmbG9hdCBwZXJjZW50LAorCQkJICAgdW5zaWduZWQgaW50IGRweW51bSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBzcGlubmVyW10gPSAiXFx8Ly0iOworCWludAlpOworCXVuc2lnbmVkIGludAl0aWNrOworCXN0cnVjdCB0aW1ldmFsCXR2OworCWludCBkcHl3aWR0aDsKKwlpbnQgZml4ZWRfcGVyY2VudDsKKworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfUFJPR19TVVBQUkVTUykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbmV3IHByb2dyZXNzIHBvc2l0aW9uLiAgSWYgdGhlCisJICogcGVyY2VudGFnZSBoYXNuJ3QgY2hhbmdlZCwgdGhlbiB3ZSBza2lwIG91dCByaWdodAorCSAqIGF3YXkuCisJICovCisJZml4ZWRfcGVyY2VudCA9IChpbnQpICgoMTAgKiBwZXJjZW50KSArIDAuNSk7CisJaWYgKGN0eC0+cHJvZ3Jlc3NfbGFzdF9wZXJjZW50ID09IGZpeGVkX3BlcmNlbnQpCisJCXJldHVybiAwOworCWN0eC0+cHJvZ3Jlc3NfbGFzdF9wZXJjZW50ID0gZml4ZWRfcGVyY2VudDsKKworCS8qCisJICogSWYgd2UndmUgYWxyZWFkeSB1cGRhdGVkIHRoZSBzcGlubmVyIG9uY2Ugd2l0aGluCisJICogdGhlIGxhc3QgMS84dGggb2YgYSBzZWNvbmQsIG5vIHBvaW50IGRvaW5nIGl0CisJICogYWdhaW4uCisJICovCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJdGljayA9ICh0di50dl9zZWMgPDwgMykgKyAodHYudHZfdXNlYyAvICgxMDAwMDAwIC8gOCkpOworCWlmICgodGljayA9PSBjdHgtPnByb2dyZXNzX2xhc3RfdGltZSkgJiYKKwkgICAgKGZpeGVkX3BlcmNlbnQgIT0gMCkgJiYgKGZpeGVkX3BlcmNlbnQgIT0gMTAwMCkpCisJCXJldHVybiAwOworCWN0eC0+cHJvZ3Jlc3NfbGFzdF90aW1lID0gdGljazsKKworCS8qCisJICogQWR2YW5jZSB0aGUgc3Bpbm5lciwgYW5kIG5vdGUgdGhhdCB0aGUgcHJvZ3Jlc3MgYmFyCisJICogd2lsbCBiZSBvbiB0aGUgc2NyZWVuCisJICovCisJY3R4LT5wcm9ncmVzc19wb3MgPSAoY3R4LT5wcm9ncmVzc19wb3MrMSkgJiAzOworCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUFJPR19CQVI7CisKKwlkcHl3aWR0aCA9IDY2IC0gc3RybGVuKGxhYmVsKTsKKwlkcHl3aWR0aCA9IDggKiAoZHB5d2lkdGggLyA4KTsKKwlpZiAoZHB5bnVtKQorCQlkcHl3aWR0aCAtPSA4OworCisJaSA9ICgocGVyY2VudCAqIGRweXdpZHRoKSArIDUwKSAvIDEwMDsKKwlwcmludGYoIiVzJXM6IHwlcyVzIiwgY3R4LT5zdGFydF9tZXRhLCBsYWJlbCwKKwkgICAgICAgYmFyICsgKHNpemVvZihiYXIpIC0gKGkrMSkpLAorCSAgICAgICBzcGFjZXMgKyAoc2l6ZW9mKHNwYWNlcykgLSAoZHB5d2lkdGggLSBpICsgMSkpKTsKKwlpZiAoZml4ZWRfcGVyY2VudCA9PSAxMDAwKQorCQlmcHV0YygnfCcsIHN0ZG91dCk7CisJZWxzZQorCQlmcHV0YyhzcGlubmVyW2N0eC0+cHJvZ3Jlc3NfcG9zICYgM10sIHN0ZG91dCk7CisJcHJpbnRmKCIgJTQuMWYlJSAgIiwgcGVyY2VudCk7CisJaWYgKGRweW51bSkKKwkJcHJpbnRmKCIldVxyIiwgZHB5bnVtKTsKKwllbHNlCisJCWZwdXRzKCIgXHIiLCBzdGRvdXQpOworCWZwdXRzKGN0eC0+c3RvcF9tZXRhLCBzdGRvdXQpOworCisJaWYgKGZpeGVkX3BlcmNlbnQgPT0gMTAwMCkKKwkJZTJmc2NrX2NsZWFyX3Byb2diYXIoY3R4KTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGUyZnNja191cGRhdGVfcHJvZ3Jlc3MoZTJmc2NrX3QgY3R4LCBpbnQgcGFzcywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgY3VyLCB1bnNpZ25lZCBsb25nIG1heCkKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKwlmbG9hdCBwZXJjZW50OworCisJaWYgKHBhc3MgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5wcm9ncmVzc19mZCkgeworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQgJWx1ICVsdSAlc1xuIiwKKwkJCSBwYXNzLCBjdXIsIG1heCwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCXdyaXRlX2FsbChjdHgtPnByb2dyZXNzX2ZkLCBidWYsIHN0cmxlbihidWYpKTsKKwl9IGVsc2UgeworCQlwZXJjZW50ID0gY2FsY19wZXJjZW50KCZlMmZzY2tfdGJsLCBwYXNzLCBjdXIsIG1heCk7CisJCWUyZnNja19zaW1wbGVfcHJvZ3Jlc3MoY3R4LCBjdHgtPmRldmljZV9uYW1lLAorCQkJCSAgICAgICBwZXJjZW50LCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUEFUSF9TRVQgIlBBVEg9L3NiaW4iCisKKy8qCisgKiBNYWtlIHN1cmUgMCwxLDIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgb3Blbiwgc28gdGhhdCB3ZSBkb24ndCBvcGVuCisgKiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IgYXMgc3Rkb3V0IG9yIHN0ZGVyci4KKyAqLworc3RhdGljIHZvaWQgcmVzZXJ2ZV9zdGRpb19mZHModm9pZCkKK3sKKwlpbnQJZmQgPSAwOworCisJd2hpbGUgKGZkIDw9IDIpIHsKKwkJZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCQlpZiAoZmQgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRVJST1I6IENvdWxkbid0IG9wZW4gIgorCQkJCSIvZGV2L251bGwgKCVzKVxuIiksCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorc3RhdGljIHZvaWQgc2lnbmFsX3Byb2dyZXNzX29uKGludCBzaWcgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWUyZnNja190IGN0eCA9IGUyZnNja19nbG9iYWxfY3R4OworCisJaWYgKCFjdHgpCisJCXJldHVybjsKKworCWN0eC0+cHJvZ3Jlc3MgPSBlMmZzY2tfdXBkYXRlX3Byb2dyZXNzOworfQorCitzdGF0aWMgdm9pZCBzaWduYWxfcHJvZ3Jlc3Nfb2ZmKGludCBzaWcgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWUyZnNja190IGN0eCA9IGUyZnNja19nbG9iYWxfY3R4OworCisJaWYgKCFjdHgpCisJCXJldHVybjsKKworCWUyZnNja19jbGVhcl9wcm9nYmFyKGN0eCk7CisJY3R4LT5wcm9ncmVzcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpZ25hbF9jYW5jZWwoaW50IHNpZyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJZTJmc2NrX3QgY3R4ID0gZTJmc2NrX2dsb2JhbF9jdHg7CisKKwlpZiAoIWN0eCkKKwkJZXhpdChGU0NLX0NBTkNFTEVEKTsKKworCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfQ0FOQ0VMOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHBhcnNlX2V4dGVuZGVkX29wdHMoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnAsICphcmc7CisJaW50CWVhX3ZlcjsKKwlpbnQJZXh0ZW5kZWRfdXNhZ2UgPSAwOworCisJYnVmID0gc3RyaW5nX2NvcHkoY3R4LCBvcHRzLCAwKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKwkJYXJnID0gc3RyY2hyKHRva2VuLCAnPScpOworCQlpZiAoYXJnKSB7CisJCQkqYXJnID0gMDsKKwkJCWFyZysrOworCQl9CisJCWlmIChzdHJjbXAodG9rZW4sICJlYV92ZXIiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCWV4dGVuZGVkX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQllYV92ZXIgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwIHx8CisJCQkgICAgKChlYV92ZXIgIT0gMSkgJiYgKGVhX3ZlciAhPSAyKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQkJXygiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIikpOworCQkJCWV4dGVuZGVkX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljdHgtPmV4dF9hdHRyX3ZlciA9IGVhX3ZlcjsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJmcmFnY2hlY2siKSA9PSAwKSB7CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9GUkFHQ0hFQ0s7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJqb3VybmFsX29ubHkiKSA9PSAwKSB7CisJCQlpZiAoYXJnKSB7CisJCQkJZXh0ZW5kZWRfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX0pPVVJOQUxfT05MWTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJkaXNjYXJkIikgPT0gMCkgeworCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfRElTQ0FSRDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIm5vZGlzY2FyZCIpID09IDApIHsKKwkJCWN0eC0+b3B0aW9ucyAmPSB+RTJGX09QVF9ESVNDQVJEOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAibG9nX2ZpbGVuYW1lIikgPT0gMCkgeworCQkJaWYgKCFhcmcpCisJCQkJZXh0ZW5kZWRfdXNhZ2UrKzsKKwkJCWVsc2UKKwkJCQljdHgtPmxvZ19mbiA9IHN0cmluZ19jb3B5KGN0eCwgYXJnLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIiksCisJCQkJdG9rZW4pOworCQkJZXh0ZW5kZWRfdXNhZ2UrKzsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7CisKKwlpZiAoZXh0ZW5kZWRfdXNhZ2UpIHsKKwkJZnB1dHMoKCJcbkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsICIKKwkJICAgICAgICJhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKwkJICAgICAgICJpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLiAgIgorCQkgICAgICAgIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIiksIHN0ZGVycik7CisJCWZwdXRzKCgiXHRlYV92ZXI9PGVhX3ZlcnNpb24gKDEgb3IgMik+XG4iKSwgc3RkZXJyKTsKKwkJZnB1dHMoKCJcdGZyYWdjaGVja1xuIiksIHN0ZGVycik7CisJCWZwdXRzKCgiXHRqb3VybmFsX29ubHlcbiIpLCBzdGRlcnIpOworCQlmcHV0cygoIlx0ZGlzY2FyZFxuIiksIHN0ZGVycik7CisJCWZwdXRzKCgiXHRub2Rpc2NhcmRcbiIpLCBzdGRlcnIpOworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgc3ludGF4X2Vycl9yZXBvcnQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGxvbmcgZXJyLCBpbnQgbGluZV9udW0pCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcblx0JXNcbiIpLAorCQlmaWxlbmFtZSwgbGluZV9udW0sIGVycm9yX21lc3NhZ2UoZXJyKSk7CisJZXhpdChGU0NLX0VSUk9SKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19mbltdID0geyBST09UX1NZU0NPTkZESVIgIi9lMmZzY2suY29uZiIsIDAgfTsKKworc3RhdGljIGVycmNvZGVfdCBQUlMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgZTJmc2NrX3QgKnJldF9jdHgpCit7CisJaW50CQlmbHVzaCA9IDA7CisJaW50CQljLCBmZDsKKyNpZmRlZiBNVFJBQ0UKKwlleHRlcm4gdm9pZAkqbWFsbHdhdGNoOworI2VuZGlmCisJZTJmc2NrX3QJY3R4OworCWVycmNvZGVfdAlyZXR2YWw7CisjaWZkZWYgSEFWRV9TSUdOQUxfSAorCXN0cnVjdCBzaWdhY3Rpb24Jc2E7CisjZW5kaWYKKwljaGFyCQkqZXh0ZW5kZWRfb3B0cyA9IDA7CisJY2hhcgkJKmNwOworCWludCAJCXJlczsJCS8qIHJlc3VsdCBvZiBzc2NhbmYgKi8KKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisJY2hhciAJCSpqYmRfZGVidWc7CisjZW5kaWYKKworCXJldHZhbCA9IGUyZnNja19hbGxvY2F0ZV9jb250ZXh0KCZjdHgpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkqcmV0X2N0eCA9IGN0eDsKKworCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9OQkYsIEJVRlNJWik7CisJc2V0dmJ1ZihzdGRlcnIsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlpZiAoaXNhdHR5KDApICYmIGlzYXR0eSgxKSkgeworCQljdHgtPmludGVyYWN0aXZlID0gMTsKKwl9IGVsc2UgeworCQljdHgtPnN0YXJ0X21ldGFbMF0gPSAnXDAwMSc7CisJCWN0eC0+c3RvcF9tZXRhWzBdID0gJ1wwMDInOworCX0KKwltZW1zZXQoYmFyLCAnPScsIHNpemVvZihiYXIpLTEpOworCW1lbXNldChzcGFjZXMsICcgJywgc2l6ZW9mKHNwYWNlcyktMSk7CisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X3Byb2ZfZXJyb3JfdGFibGUpOworCWJsa2lkX2dldF9jYWNoZSgmY3R4LT5ibGtpZCwgTlVMTCk7CisKKwlpZiAoYXJnYyAmJiAqYXJndikKKwkJY3R4LT5wcm9ncmFtX25hbWUgPSAqYXJndjsKKwllbHNlCisJCWN0eC0+cHJvZ3JhbV9uYW1lID0gImUyZnNjayI7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJwYW55cmNDOkI6ZEU6ZnZ0RlZNOmI6STpqOlA6bDpMOk46U3NEayIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICdDJzoKKwkJCWN0eC0+cHJvZ3Jlc3MgPSBlMmZzY2tfdXBkYXRlX3Byb2dyZXNzOworCQkJcmVzID0gc3NjYW5mKG9wdGFyZywgIiVkIiwgJmN0eC0+cHJvZ3Jlc3NfZmQpOworCQkJaWYgKHJlcyAhPSAxKQorCQkJCWdvdG8gc3NjYW5mX2VycjsKKworCQkJaWYgKGN0eC0+cHJvZ3Jlc3NfZmQgPCAwKSB7CisJCQkJY3R4LT5wcm9ncmVzcyA9IDA7CisJCQkJY3R4LT5wcm9ncmVzc19mZCA9IGN0eC0+cHJvZ3Jlc3NfZmQgKiAtMTsKKwkJCX0KKwkJCWlmICghY3R4LT5wcm9ncmVzc19mZCkKKwkJCQlicmVhazsKKwkJCS8qIFZhbGlkYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gYXZvaWQgZGlzYXN0ZXJzICovCisJCQlmZCA9IGR1cChjdHgtPnByb2dyZXNzX2ZkKTsKKwkJCWlmIChmZCA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIpLAorCQkJCQljdHgtPnByb2dyZXNzX2ZkLAorCQkJCQllcnJvcl9tZXNzYWdlKGVycm5vKSk7CisJCQkJZmF0YWxfZXJyb3IoY3R4LAorCQkJXygiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIpKTsKKwkJCX0gZWxzZQorCQkJCWNsb3NlKGZkKTsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX0NPTVBSRVNTX0RJUlM7CisJCQlicmVhazsKKwkJY2FzZSAnRSc6CisJCQlleHRlbmRlZF9vcHRzID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQljYXNlICdhJzoKKwkJCWlmIChjdHgtPm9wdGlvbnMgJiAoRTJGX09QVF9ZRVN8RTJGX09QVF9OTykpIHsKKwkJCWNvbmZsaWN0X29wdDoKKwkJCQlmYXRhbF9lcnJvcihjdHgsCisJXygiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIikpOworCQkJfQorCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfUFJFRU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlpZiAoY3R4LT5vcHRpb25zICYgKEUyRl9PUFRfWUVTfEUyRl9PUFRfUFJFRU4pKQorCQkJCWdvdG8gY29uZmxpY3Rfb3B0OworCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfTk87CisJCQlicmVhazsKKwkJY2FzZSAneSc6CisJCQlpZiAoY3R4LT5vcHRpb25zICYgKEUyRl9PUFRfUFJFRU58RTJGX09QVF9OTykpCisJCQkJZ290byBjb25mbGljdF9vcHQ7CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9ZRVM7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKKwkJCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1RJTUUpCisJCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfVElNRTI7CisJCQllbHNlCisJCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfVElNRTsKKyNlbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiVGhlIC10IG9wdGlvbiBpcyBub3QgIgorCQkJCSJzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJaWYgKGNmbGFnKyspCisJCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfV1JJVEVDSEVDSzsKKwkJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX0NIRUNLQkxPQ0tTOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJLyogV2hhdCB3ZSBkbyBieSBkZWZhdWx0LCBhbnl3YXkhICovCisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQlyZXMgPSBzc2NhbmYob3B0YXJnLCAiJWxsdSIsICZjdHgtPnVzZV9zdXBlcmJsb2NrKTsKKwkJCWlmIChyZXMgIT0gMSkKKwkJCQlnb3RvIHNzY2FuZl9lcnI7CisJCQljdHgtPmZsYWdzIHw9IEUyRl9GTEFHX1NCX1NQRUNJRklFRDsKKwkJCWJyZWFrOworCQljYXNlICdCJzoKKwkJCWN0eC0+YmxvY2tzaXplID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ0knOgorCQkJcmVzID0gc3NjYW5mKG9wdGFyZywgIiVkIiwgJmN0eC0+aW5vZGVfYnVmZmVyX2Jsb2Nrcyk7CisJCQlpZiAocmVzICE9IDEpCisJCQkJZ290byBzc2NhbmZfZXJyOworCQkJYnJlYWs7CisJCWNhc2UgJ2onOgorCQkJY3R4LT5qb3VybmFsX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShjdHgtPmJsa2lkLAorCQkJCQkJCSAgICAgIG9wdGFyZywgTlVMTCk7CisJCQlpZiAoIWN0eC0+am91cm5hbF9uYW1lKSB7CisJCQkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIpLAorCQkJCQlvcHRhcmcpOworCQkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnUCc6CisJCQlyZXMgPSBzc2NhbmYob3B0YXJnLCAiJWQiLCAmY3R4LT5wcm9jZXNzX2lub2RlX3NpemUpOworCQkJaWYgKHJlcyAhPSAxKQorCQkJCWdvdG8gc3NjYW5mX2VycjsKKwkJCWJyZWFrOworCQljYXNlICdMJzoKKwkJCXJlcGxhY2VfYmFkX2Jsb2NrcysrOworCQljYXNlICdsJzoKKwkJCWlmIChiYWRfYmxvY2tzX2ZpbGUpCisJCQkJZnJlZShiYWRfYmxvY2tzX2ZpbGUpOworCQkJYmFkX2Jsb2Nrc19maWxlID0gc3RyaW5nX2NvcHkoY3R4LCBvcHRhcmcsIDApOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJY3R4LT5vcHRpb25zIHw9IEUyRl9PUFRfREVCVUc7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQljdHgtPm9wdGlvbnMgfD0gRTJGX09QVF9GT1JDRTsKKwkJCWJyZWFrOworCQljYXNlICdGJzoKKwkJCWZsdXNoID0gMTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJc2hvd192ZXJzaW9uX29ubHkgPSAxOworCQkJYnJlYWs7CisjaWZkZWYgTVRSQUNFCisJCWNhc2UgJ00nOgorCQkJbWFsbHdhdGNoID0gKHZvaWQgKikgc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlICdOJzoKKwkJCWN0eC0+ZGV2aWNlX25hbWUgPSBzdHJpbmdfY29weShjdHgsIG9wdGFyZywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAnayc6CisJCQlrZWVwX2JhZF9ibG9ja3MrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoY3R4KTsKKwkJfQorCWlmIChzaG93X3ZlcnNpb25fb25seSkKKwkJcmV0dXJuIDA7CisJaWYgKG9wdGluZCAhPSBhcmdjIC0gMSkKKwkJdXNhZ2UoY3R4KTsKKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pICYmCisJICAgIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0NPTVBSRVNTX0RJUlMpKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iKSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCWlmICgoY3R4LT5vcHRpb25zICYgRTJGX09QVF9OTykgJiYgY2ZsYWcpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIpKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9CisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSAmJiBiYWRfYmxvY2tzX2ZpbGUpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIpKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9CisJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pCisJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1JFQURPTkxZOworCisJY3R4LT5pb19vcHRpb25zID0gc3RyY2hyKGFyZ3Zbb3B0aW5kXSwgJz8nKTsKKwlpZiAoY3R4LT5pb19vcHRpb25zKQorCQkqY3R4LT5pb19vcHRpb25zKysgPSAwOworCWN0eC0+ZmlsZXN5c3RlbV9uYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoY3R4LT5ibGtpZCwgYXJndltvcHRpbmRdLCAwKTsKKwlpZiAoIWN0eC0+ZmlsZXN5c3RlbV9uYW1lKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsIF8oIlVuYWJsZSB0byByZXNvbHZlICclcyciKSwKKwkJCWFyZ3Zbb3B0aW5kXSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCWlmIChleHRlbmRlZF9vcHRzKQorCQlwYXJzZV9leHRlbmRlZF9vcHRzKGN0eCwgZXh0ZW5kZWRfb3B0cyk7CisKKwlpZiAoKGNwID0gZ2V0ZW52KCJFMkZTQ0tfQ09ORklHIikpICE9IE5VTEwpCisJCWNvbmZpZ19mblswXSA9IGNwOworCXByb2ZpbGVfc2V0X3N5bnRheF9lcnJfY2Ioc3ludGF4X2Vycl9yZXBvcnQpOworCXByb2ZpbGVfaW5pdChjb25maWdfZm4sICZjdHgtPnByb2ZpbGUpOworCisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgInJlcG9ydF90aW1lIiwgMCwgMCwKKwkJCSAgICAmYyk7CisJaWYgKGMpCisJCWN0eC0+b3B0aW9ucyB8PSBFMkZfT1BUX1RJTUUgfCBFMkZfT1BUX1RJTUUyOworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4oY3R4LT5wcm9maWxlLCAib3B0aW9ucyIsICJyZXBvcnRfdmVyYm9zZSIsIDAsIDAsCisJCQkgICAgJmMpOworCWlmIChjKQorCQl2ZXJib3NlID0gMTsKKworCS8qIFR1cm4gb2ZmIGRpc2NhcmQgaW4gcmVhZC1vbmx5IG1vZGUgKi8KKwlpZiAoKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pICYmCisJICAgIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX0RJU0NBUkQpKQorCQljdHgtPm9wdGlvbnMgJj0gfkUyRl9PUFRfRElTQ0FSRDsKKworCWlmIChmbHVzaCkgeworCQlmZCA9IG9wZW4oY3R4LT5maWxlc3lzdGVtX25hbWUsIE9fUkRPTkxZLCAwKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJY29tX2Vycigib3BlbiIsIGVycm5vLAorCQkJCV8oIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIiksCisJCQkJY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQlpZiAoKHJldHZhbCA9IGV4dDJmc19zeW5jX2RldmljZShmZCwgMSkpKSB7CisJCQljb21fZXJyKCJleHQyZnNfc3luY19kZXZpY2UiLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIiksCisJCQkJY3R4LT5maWxlc3lzdGVtX25hbWUpOworCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQljbG9zZShmZCk7CisJfQorCWlmIChjZmxhZyAmJiBiYWRfYmxvY2tzX2ZpbGUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCAiCisJCQkJCSJiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIpKTsKKwkJZXhpdChGU0NLX1VTQUdFKTsKKwl9CisjaWZkZWYgSEFWRV9TSUdOQUxfSAorCS8qCisJICogU2V0IHVwIHNpZ25hbCBhY3Rpb24KKwkgKi8KKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc3RydWN0IHNpZ2FjdGlvbikpOworCXNhLnNhX2hhbmRsZXIgPSBzaWduYWxfY2FuY2VsOworCXNpZ2FjdGlvbihTSUdJTlQsICZzYSwgMCk7CisJc2lnYWN0aW9uKFNJR1RFUk0sICZzYSwgMCk7CisjaWZkZWYgU0FfUkVTVEFSVAorCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKyNlbmRpZgorCWUyZnNja19nbG9iYWxfY3R4ID0gY3R4OworCXNhLnNhX2hhbmRsZXIgPSBzaWduYWxfcHJvZ3Jlc3Nfb247CisJc2lnYWN0aW9uKFNJR1VTUjEsICZzYSwgMCk7CisJc2Euc2FfaGFuZGxlciA9IHNpZ25hbF9wcm9ncmVzc19vZmY7CisJc2lnYWN0aW9uKFNJR1VTUjIsICZzYSwgMCk7CisjZW5kaWYKKworCS8qIFVwZGF0ZSBvdXIgUEFUSCB0byBpbmNsdWRlIC9zYmluIGlmIHdlIG5lZWQgdG8gcnVuIGJhZGJsb2NrcyAgKi8KKwlpZiAoY2ZsYWcpIHsKKwkJY2hhciAqb2xkcGF0aCA9IGdldGVudigiUEFUSCIpOworCQljaGFyICpuZXdwYXRoOworCQlpbnQgbGVuID0gc2l6ZW9mKFBBVEhfU0VUKSArIDE7CisKKwkJaWYgKG9sZHBhdGgpCisJCQlsZW4gKz0gc3RybGVuKG9sZHBhdGgpOworCisJCW5ld3BhdGggPSBtYWxsb2MobGVuKTsKKwkJaWYgKCFuZXdwYXRoKQorCQkJZmF0YWxfZXJyb3IoY3R4LCAiQ291bGRuJ3QgbWFsbG9jKCkgbmV3cGF0aCIpOworCQlzdHJjcHkobmV3cGF0aCwgUEFUSF9TRVQpOworCisJCWlmIChvbGRwYXRoKSB7CisJCQlzdHJjYXQobmV3cGF0aCwgIjoiKTsKKwkJCXN0cmNhdChuZXdwYXRoLCBvbGRwYXRoKTsKKwkJfQorCQlwdXRlbnYobmV3cGF0aCk7CisJfQorI2lmZGVmIENPTkZJR19KQkRfREVCVUcKKwlqYmRfZGVidWcgPSBnZXRlbnYoIkUyRlNDS19KQkRfREVCVUciKTsKKwlpZiAoamJkX2RlYnVnKSB7CisJCXJlcyA9IHNzY2FuZihqYmRfZGVidWcsICIlZCIsICZqb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CisJCWlmIChyZXMgIT0gMSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkgICAgICAgIF8oIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG5cbiIpLAorCQkJICAgICAgICBqYmRfZGVidWcpOworCQkJZXhpdCAoMSk7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKKworc3NjYW5mX2VycjoKKwlmcHJpbnRmKHN0ZGVyciwgXygiXG5JbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuXG4iKSwKKwkgICAgICAgIGMsIG9wdGFyZyk7CisJZXhpdCAoMSk7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdHJ5X29wZW5fZnMoZTJmc2NrX3QgY3R4LCBpbnQgZmxhZ3MsIGlvX21hbmFnZXIgaW9fcHRyLAorCQkJICAgICBleHQyX2ZpbHN5cyAqcmV0X2ZzKQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwkqcmV0X2ZzID0gTlVMTDsKKwlpZiAoY3R4LT5zdXBlcmJsb2NrICYmIGN0eC0+YmxvY2tzaXplKSB7CisJCXJldHZhbCA9IGV4dDJmc19vcGVuMihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwgY3R4LT5pb19vcHRpb25zLAorCQkJCSAgICAgIGZsYWdzLCBjdHgtPnN1cGVyYmxvY2ssIGN0eC0+YmxvY2tzaXplLAorCQkJCSAgICAgIGlvX3B0ciwgcmV0X2ZzKTsKKwl9IGVsc2UgaWYgKGN0eC0+c3VwZXJibG9jaykgeworCQlpbnQgYmxvY2tzaXplOworCQlmb3IgKGJsb2Nrc2l6ZSA9IEVYVDJfTUlOX0JMT0NLX1NJWkU7CisJCSAgICAgYmxvY2tzaXplIDw9IEVYVDJfTUFYX0JMT0NLX1NJWkU7IGJsb2Nrc2l6ZSAqPSAyKSB7CisJCQlpZiAoKnJldF9mcykgeworCQkJCWV4dDJmc19mcmVlKCpyZXRfZnMpOworCQkJCSpyZXRfZnMgPSBOVUxMOworCQkJfQorCQkJcmV0dmFsID0gZXh0MmZzX29wZW4yKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLAorCQkJCQkgICAgICBjdHgtPmlvX29wdGlvbnMsIGZsYWdzLAorCQkJCQkgICAgICBjdHgtPnN1cGVyYmxvY2ssIGJsb2Nrc2l6ZSwKKwkJCQkJICAgICAgaW9fcHRyLCByZXRfZnMpOworCQkJaWYgKCFyZXR2YWwpCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcmV0dmFsID0gZXh0MmZzX29wZW4yKGN0eC0+ZmlsZXN5c3RlbV9uYW1lLCBjdHgtPmlvX29wdGlvbnMsCisJCQkJICAgICAgZmxhZ3MsIDAsIDAsIGlvX3B0ciwgcmV0X2ZzKTsKKworCWlmIChyZXR2YWwgPT0gMCkKKwkJZTJmc2NrX3NldF9iaXRtYXBfdHlwZSgqcmV0X2ZzLCBFWFQyRlNfQk1BUDY0X1JCVFJFRSwKKwkJCQkgICAgICAgImRlZmF1bHQiLCBOVUxMKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbXlfdmVyX3N0cmluZyA9IEUyRlNQUk9HU19WRVJTSU9OOworc3RhdGljIGNvbnN0IGNoYXIgKm15X3Zlcl9kYXRlID0gRTJGU1BST0dTX0RBVEU7CisKK3N0YXRpYyBlcnJjb2RlX3QgZTJmc2NrX2NoZWNrX21tcChleHQyX2ZpbHN5cyBmcywgZTJmc2NrX3QgY3R4KQoreworCXN0cnVjdCBtbXBfc3RydWN0ICptbXBfczsKKwl1bnNpZ25lZCBpbnQgbW1wX2NoZWNrX2ludGVydmFsOworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwl1bnNpZ25lZCBpbnQgd2FpdF90aW1lID0gMDsKKworCWNsZWFyX3Byb2JsZW1fY29udGV4dCgmcGN0eCk7CisJaWYgKGZzLT5tbXBfYnVmID09IE5VTEwpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmZzLT5tbXBfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2hlY2tfZXJyb3I7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX21tcF9yZWFkKGZzLCBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrLCBmcy0+bW1wX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBjaGVja19lcnJvcjsKKworCW1tcF9zID0gZnMtPm1tcF9idWY7CisKKwltbXBfY2hlY2tfaW50ZXJ2YWwgPSBmcy0+c3VwZXItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbDsKKwlpZiAobW1wX2NoZWNrX2ludGVydmFsIDwgRVhUNF9NTVBfTUlOX0NIRUNLX0lOVEVSVkFMKQorCQltbXBfY2hlY2tfaW50ZXJ2YWwgPSBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUw7CisKKwkvKgorCSAqIElmIGNoZWNrX2ludGVydmFsIGluIE1NUCBibG9jayBpcyBsYXJnZXIsIHVzZSB0aGF0IGluc3RlYWQgb2YKKwkgKiBjaGVja19pbnRlcnZhbCBmcm9tIHRoZSBzdXBlcmJsb2NrLgorCSAqLworCWlmIChtbXBfcy0+bW1wX2NoZWNrX2ludGVydmFsID4gbW1wX2NoZWNrX2ludGVydmFsKQorCQltbXBfY2hlY2tfaW50ZXJ2YWwgPSBtbXBfcy0+bW1wX2NoZWNrX2ludGVydmFsOworCisJd2FpdF90aW1lID0gbW1wX2NoZWNrX2ludGVydmFsICogMiArIDE7CisKKwlpZiAobW1wX3MtPm1tcF9zZXEgPT0gRVhUNF9NTVBfU0VRX0NMRUFOKQorCQlyZXR2YWwgPSAwOworCWVsc2UgaWYgKG1tcF9zLT5tbXBfc2VxID09IEVYVDRfTU1QX1NFUV9GU0NLKQorCQlyZXR2YWwgPSBFWFQyX0VUX01NUF9GU0NLX09OOworCWVsc2UgaWYgKG1tcF9zLT5tbXBfc2VxID4gRVhUNF9NTVBfU0VRX01BWCkKKwkJcmV0dmFsID0gRVhUMl9FVF9NTVBfVU5LTk9XTl9TRVE7CisKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNoZWNrX2Vycm9yOworCisJLyogUHJpbnQgd2FybmluZyBpZiBlMmZjayB3aWxsIHdhaXQgZm9yIG1vcmUgdGhhbiAyMCBzZWNzLiAqLworCWlmICh2ZXJib3NlIHx8IHdhaXRfdGltZSA+IEVYVDRfTU1QX01JTl9DSEVDS19JTlRFUlZBTCAqIDQpIHsKKwkJbG9nX291dChjdHgsIF8oIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0ICIKKwkJCSAgICAgICAidGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2Ugd2FpdC4uLlxuIiksCisJCQltbXBfY2hlY2tfaW50ZXJ2YWwsIHdhaXRfdGltZSAqIDIpOworCX0KKworCXJldHVybiAwOworCitjaGVja19lcnJvcjoKKworCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfQkFEX0JMT0NLKSB7CisJCWlmIChmaXhfcHJvYmxlbShjdHgsIFBSXzBfTU1QX0lOVkFMSURfQkxLLCAmcGN0eCkpIHsKKwkJCWZzLT5zdXBlci0+c19tbXBfYmxvY2sgPSAwOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCX0gZWxzZSBpZiAocmV0dmFsID09IEVYVDJfRVRfTU1QX0ZBSUxFRCkgeworCQljb21fZXJyKGN0eC0+cHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siKSk7CisJCWR1bXBfbW1wX21zZyhmcy0+bW1wX2J1ZiwgTlVMTCk7CisJfSBlbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfRlNDS19PTiB8fAorCQkgICByZXR2YWwgPT0gRVhUMl9FVF9NTVBfVU5LTk9XTl9TRVEpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIikpOworCQlkdW1wX21tcF9tc2coZnMtPm1tcF9idWYsCisJCQkgICAgIF8oIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgIgorCQkJICAgICAgICJpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKwkJCSAgICAgICAiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIikpOworCX0gZWxzZSBpZiAocmV0dmFsID09IEVYVDJfRVRfTU1QX01BR0lDX0lOVkFMSUQpIHsKKwkJaWYgKGZpeF9wcm9ibGVtKGN0eCwgUFJfMF9NTVBfSU5WQUxJRF9NQUdJQywgJnBjdHgpKSB7CisJCQlleHQyZnNfbW1wX2NsZWFyKGZzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDAsIHJldHZhbDIgPSAwLCBvcmlnX3JldHZhbCA9IDA7CisJaW50CQlleGl0X3ZhbHVlID0gRlNDS19PSzsKKwlleHQyX2ZpbHN5cwlmcyA9IDA7CisJaW9fbWFuYWdlcglpb19wdHI7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiOworCWNvbnN0IGNoYXIJKmxpYl92ZXJfZGF0ZTsKKwlpbnQJCW15X3ZlciwgbGliX3ZlcjsKKwllMmZzY2tfdAljdHg7CisJYmxrNjRfdAkJb3JpZ19zdXBlcmJsb2NrOworCXN0cnVjdCBwcm9ibGVtX2NvbnRleHQgcGN0eDsKKwlpbnQgZmxhZ3MsIHJ1bl9yZXN1bHQ7CisJaW50IGpvdXJuYWxfc2l6ZTsKKwlpbnQgc3lzdmFsLCBzeXNfcGFnZV9zaXplID0gNDA5NjsKKwlpbnQgb2xkX2JpdG1hcHM7CisJX191MzIgZmVhdHVyZXNbM107CisJY2hhciAqY3A7CisJaW50IHF0eXBlID0gLTk5OyAgLyogcXVvdGEgdHlwZSAqLworCisJY2xlYXJfcHJvYmxlbV9jb250ZXh0KCZwY3R4KTsKKwlzaWdjYXRjaGVyX3NldHVwKCk7CisjaWZkZWYgTVRSQUNFCisJbXRyYWNlKCk7CisjZW5kaWYKKyNpZmRlZiBNQ0hFQ0sKKwltY2hlY2soMCk7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJbXlfdmVyID0gZXh0MmZzX3BhcnNlX3ZlcnNpb25fc3RyaW5nKG15X3Zlcl9zdHJpbmcpOworCWxpYl92ZXIgPSBleHQyZnNfZ2V0X2xpYnJhcnlfdmVyc2lvbigwLCAmbGliX3Zlcl9kYXRlKTsKKwlpZiAobXlfdmVyID4gbGliX3ZlcikgeworCQlmcHJpbnRmKCBzdGRlcnIsICIlcyIsCisJCQkgXygiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iKSk7CisJCXNob3dfdmVyc2lvbl9vbmx5Kys7CisJfQorCisJcmV0dmFsID0gUFJTKGFyZ2MsIGFyZ3YsICZjdHgpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZTJmc2NrIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIpKTsKKwkJZXhpdChGU0NLX0VSUk9SKTsKKwl9CisJcmVzZXJ2ZV9zdGRpb19mZHMoKTsKKworCXNldF91cF9sb2dnaW5nKGN0eCk7CisJaWYgKGN0eC0+bG9nZikgeworCQlpbnQgaTsKKwkJZnB1dHMoIkUyZnNjayBydW46ICIsIGN0eC0+bG9nZik7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWlmIChpKQorCQkJCWZwdXRjKCcgJywgY3R4LT5sb2dmKTsKKwkJCWZwdXRzKGFyZ3ZbaV0sIGN0eC0+bG9nZik7CisJCX0KKwkJZnB1dGMoJ1xuJywgY3R4LT5sb2dmKTsKKwl9CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZjdHgtPmdsb2JhbF9ydHJhY2ssIE5VTEwpOworCWlmICghKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pIHx8IHNob3dfdmVyc2lvbl9vbmx5KQorCQlsb2dfZXJyKGN0eCwgImUyZnNjayAlcyAoJXMpXG4iLCBteV92ZXJfc3RyaW5nLAorCQkJIG15X3Zlcl9kYXRlKTsKKworCWlmIChzaG93X3ZlcnNpb25fb25seSkgeworCQlsb2dfZXJyKGN0eCwgXygiXHRVc2luZyAlcywgJXNcbiIpLAorCQkJZXJyb3JfbWVzc2FnZShFWFQyX0VUX0JBU0UpLCBsaWJfdmVyX2RhdGUpOworCQlleGl0KEZTQ0tfT0spOworCX0KKworCWNoZWNrX21vdW50KGN0eCk7CisKKwlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfTk8pICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ZRVMpKSB7CisJCWlmICghY3R4LT5pbnRlcmFjdGl2ZSkKKwkJCWZhdGFsX2Vycm9yKGN0eCwKKwkJCQkgICAgXygibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIpKTsKKwl9CisJY3R4LT5zdXBlcmJsb2NrID0gY3R4LT51c2Vfc3VwZXJibG9jazsKKworCWZsYWdzID0gRVhUMl9GTEFHX1NLSVBfTU1QOworcmVzdGFydDoKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCWZsYWdzIHw9IEVYVDJfRkxBR19OT0ZSRUVfT05fRVJST1I7CisJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwgIm9sZF9iaXRtYXBzIiwgMCwgMCwKKwkJCSAgICAmb2xkX2JpdG1hcHMpOworCWlmICghb2xkX2JpdG1hcHMpCisJCWZsYWdzIHw9IEVYVDJfRkxBR182NEJJVFM7CisJaWYgKChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1JFQURPTkxZKSA9PSAwKSB7CisJCWZsYWdzIHw9IEVYVDJfRkxBR19SVzsKKwkJaWYgKCEoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfSVNST09UICYmCisJCSAgICAgIGN0eC0+bW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkKKwkJCWZsYWdzIHw9IEVYVDJfRkxBR19FWENMVVNJVkU7CisJCWlmICgoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpICYmCisJCSAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9GT1JDRSkpCisJCQlmbGFncyAmPSB+RVhUMl9GTEFHX0VYQ0xVU0lWRTsKKwl9CisKKwlyZXR2YWwgPSB0cnlfb3Blbl9mcyhjdHgsIGZsYWdzLCBpb19wdHIsICZmcyk7CisKKwlpZiAoIWN0eC0+c3VwZXJibG9jayAmJiAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUFJFRU4pICYmCisJICAgICEoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NCX1NQRUNJRklFRCkgJiYKKwkgICAgKChyZXR2YWwgPT0gRVhUMl9FVF9CQURfTUFHSUMpIHx8CisJICAgICAocmV0dmFsID09IEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLKSB8fAorCSAgICAgKChyZXR2YWwgPT0gMCkgJiYgKHJldHZhbDIgPSBleHQyZnNfY2hlY2tfZGVzYyhmcykpKSkpIHsKKwkJaWYgKHJldHZhbCkgeworCQkJcGN0eC5lcnJjb2RlID0gcmV0dmFsOworCQkJZml4X3Byb2JsZW0oY3R4LCBQUl8wX09QRU5fRkFJTEVELCAmcGN0eCk7CisJCX0KKwkJaWYgKHJldHZhbDIpIHsKKwkJCXBjdHguZXJyY29kZSA9IHJldHZhbDI7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfQ0hFQ0tfREVTQ19GQUlMRUQsICZwY3R4KTsKKwkJfQorCQlwY3R4LmVycmNvZGUgPSAwOworCQlpZiAocmV0dmFsMiA9PSBFTk9NRU0gfHwgcmV0dmFsMiA9PSBFWFQyX0VUX05PX01FTU9SWSkgeworCQkJcmV0dmFsID0gcmV0dmFsMjsKKwkJCWdvdG8gZmFpbHVyZTsKKwkJfQorCQlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX05PRlJFRV9PTl9FUlJPUikgeworCQkJZXh0MmZzX2ZyZWUoZnMpOworCQkJZnMgPSBOVUxMOworCQl9CisJCWlmICghZnMgfHwgKGZzLT5ncm91cF9kZXNjX2NvdW50ID4gMSkpIHsKKwkJCWxvZ19vdXQoY3R4LCBfKCIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIpLAorCQkJCWN0eC0+cHJvZ3JhbV9uYW1lLAorCQkJCXJldHZhbCA/IF8oIlN1cGVyYmxvY2sgaW52YWxpZCwiKSA6CisJCQkJXygiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iKSk7CisJCQlvcmlnX3N1cGVyYmxvY2sgPSBjdHgtPnN1cGVyYmxvY2s7CisJCQlnZXRfYmFja3VwX3NiKGN0eCwgZnMsIGN0eC0+ZmlsZXN5c3RlbV9uYW1lLCBpb19wdHIpOworCQkJaWYgKGZzKQorCQkJCWV4dDJmc19jbG9zZShmcyk7CisJCQlvcmlnX3JldHZhbCA9IHJldHZhbDsKKwkJCXJldHZhbCA9IHRyeV9vcGVuX2ZzKGN0eCwgZmxhZ3MsIGlvX3B0ciwgJmZzKTsKKwkJCWlmICgob3JpZ19yZXR2YWwgPT0gMCkgJiYgcmV0dmFsICE9IDApIHsKKwkJCQlpZiAoZnMpCisJCQkJCWV4dDJmc19jbG9zZShmcyk7CisJCQkJbG9nX291dChjdHgsIF8oIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgIgorCQkJCQkgICAgICAgImJhY2t1cCBibG9ja3MiKSwKKwkJCQkJY3R4LT5wcm9ncmFtX25hbWUsCisJCQkJCWVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCQkJbG9nX291dChjdHgsIF8oIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsICIKKwkJCQkJICAgICAgICJzdXBlcmJsb2NrXG4iKSwKKwkJCQkJY3R4LT5wcm9ncmFtX25hbWUpOworCQkJCWN0eC0+c3VwZXJibG9jayA9IG9yaWdfc3VwZXJibG9jazsKKwkJCQlyZXR2YWwgPSB0cnlfb3Blbl9mcyhjdHgsIGZsYWdzLCBpb19wdHIsICZmcyk7CisJCQl9CisJCX0KKwl9CisJaWYgKCgocmV0dmFsID09IEVYVDJfRVRfVU5TVVBQX0ZFQVRVUkUpIHx8CisJICAgICAocmV0dmFsID09IEVYVDJfRVRfUk9fVU5TVVBQX0ZFQVRVUkUpKSAmJgorCSAgICBmcyAmJiBmcy0+c3VwZXIpIHsKKwkJc2IgPSBmcy0+c3VwZXI7CisJCWZlYXR1cmVzWzBdID0gKHNiLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkJCSAgICAgICB+RVhUMl9MSUJfRkVBVFVSRV9DT01QQVRfU1VQUCk7CisJCWZlYXR1cmVzWzFdID0gKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkJICAgICAgIH5FWFQyX0xJQl9GRUFUVVJFX0lOQ09NUEFUX1NVUFApOworCQlmZWF0dXJlc1syXSA9IChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCQkgICAgICAgfkVYVDJfTElCX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFApOworCQlpZiAoZmVhdHVyZXNbMF0gfHwgZmVhdHVyZXNbMV0gfHwgZmVhdHVyZXNbMl0pCisJCQlnb3RvIHByaW50X3Vuc3VwcF9mZWF0dXJlczsKKwl9CitmYWlsdXJlOgorCWlmIChyZXR2YWwpIHsKKwkJaWYgKG9yaWdfcmV0dmFsKQorCQkJcmV0dmFsID0gb3JpZ19yZXR2YWw7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX1JFVl9UT09fSElHSCkgeworCQkJbG9nX291dChjdHgsICIlcyIsCisJCQkJXygiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSAiCisJCQkJICAidG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisJCQkJICAiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgIgorCQkJCSAgImlzIGNvcnJ1cHQpXG5cbiIpKTsKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9TQl9DT1JSVVBULCAmcGN0eCk7CisJCX0gZWxzZSBpZiAocmV0dmFsID09IEVYVDJfRVRfU0hPUlRfUkVBRCkKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCV8oIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iKSk7CisJCWVsc2UgaWYgKChyZXR2YWwgPT0gRVBFUk0pIHx8IChyZXR2YWwgPT0gRUFDQ0VTKSkKKwkJCWxvZ19vdXQoY3R4LCBfKCJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgIgorCQkJCSAgICAgICAiZmlsZXN5c3RlbSBvciBiZSByb290XG4iKSwKKwkJCSAgICAgICAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkgPworCQkJICAgICAgICJyL28iIDogInIvdyIpOworCQllbHNlIGlmIChyZXR2YWwgPT0gRU5YSU8pCisJCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCQlfKCJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iKSk7CisJCWVsc2UgaWYgKHJldHZhbCA9PSBFQlVTWSkKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkICIKKwkJCQkJICJleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iKSk7CisJCWVsc2UgaWYgKHJldHZhbCA9PSBFTk9FTlQpCisJCQlsb2dfb3V0KGN0eCwgIiVzIiwKKwkJCQlfKCJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIikpOworI2lmZGVmIEVST0ZTCisJCWVsc2UgaWYgKHJldHZhbCA9PSBFUk9GUykKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCJEaXNrIHdyaXRlLXByb3RlY3RlZDsgdXNlIHRoZSAiCisJCQkJCSAgICAgIi1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorCQkJCQkgICAgICJjaGVjayBvZiB0aGUgZGV2aWNlLlxuIikpOworI2VuZGlmCisJCWVsc2UKKwkJCWZpeF9wcm9ibGVtKGN0eCwgUFJfMF9TQl9DT1JSVVBULCAmcGN0eCk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCS8qCisJICogV2Ugb25seSB1cGRhdGUgdGhlIG1hc3RlciBzdXBlcmJsb2NrIGJlY2F1c2UgKGEpIHBhcmFub2lhOworCSAqIHdlIGRvbid0IHdhbnQgdG8gY29ycnVwdCB0aGUgYmFja3VwIHN1cGVyYmxvY2tzLCBhbmQgKGIpIHdlCisJICogZG9uJ3QgbmVlZCB0byB1cGRhdGUgdGhlIG1vdW50IGNvdW50IGFuZCBsYXN0IGNoZWNrZWQKKwkgKiBmaWVsZHMgaW4gdGhlIGJhY2t1cCBzdXBlcmJsb2NrICh0aGUga2VybmVsIGRvZXNuJ3QgdXBkYXRlCisJICogdGhlIGJhY2t1cCBzdXBlcmJsb2NrcyBhbnl3YXkpLiAgV2l0aCBuZXdlciB2ZXJzaW9ucyBvZiB0aGUKKwkgKiBsaWJyYXJ5IHRoaXMgZmxhZyBpcyBzZXQgYnkgZXh0MmZzX29wZW4yKCksIGJ1dCB3ZSBzZXQgdGhpcworCSAqIGhlcmUganVzdCB0byBiZSBzdXJlLiAgKE5vLCB3ZSBkb24ndCBzdXBwb3J0IGUyZnNjayBydW5uaW5nCisJICogd2l0aCBzb21lIG90aGVyIGxpYmV4dDJmcyB0aGFuIHRoZSBvbmUgdGhhdCBpdCB3YXMgc2hpcHBlZAorCSAqIHdpdGgsIGJ1dCBqdXN0IGluIGNhc2UuLi4uKQorCSAqLworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisKKwlpZiAoIShjdHgtPmZsYWdzICYgRTJGX0ZMQUdfR09UX0RFVlNJWkUpKSB7CisJCV9fdTMyIGJsb2Nrc2l6ZSA9IEVYVDJfQkxPQ0tfU0laRShmcy0+c3VwZXIpOworCQlpbnQgbmVlZF9yZXN0YXJ0ID0gMDsKKworCQlwY3R4LmVycmNvZGUgPSBleHQyZnNfZ2V0X2RldmljZV9zaXplMihjdHgtPmZpbGVzeXN0ZW1fbmFtZSwKKwkJCQkJCSAgICAgICBibG9ja3NpemUsCisJCQkJCQkgICAgICAgJmN0eC0+bnVtX2Jsb2Nrcyk7CisJCS8qCisJCSAqIFRoZSBmbG9wcHkgZHJpdmVyIHJlZnVzZXMgdG8gYWxsb3cgYW55b25lIGVsc2UgdG8KKwkJICogb3BlbiB0aGUgZGV2aWNlIGlmIGhhcyBiZWVuIG9wZW5lZCB3aXRoIE9fRVhDTDsKKwkJICogdGhpcyBpcyB1bmxpa2Ugb3RoZXIgYmxvY2sgZGV2aWNlIGRyaXZlcnMgaW4gTGludXguCisJCSAqIFRvIGhhbmRsZSB0aGlzLCB3ZSBjbG9zZSB0aGUgZmlsZXN5c3RlbSBhbmQgdGhlbgorCQkgKiByZW9wZW4gdGhlIGZpbGVzeXN0ZW0gYWZ0ZXIgd2UgZ2V0IHRoZSBkZXZpY2Ugc2l6ZS4KKwkJICovCisJCWlmIChwY3R4LmVycmNvZGUgPT0gRUJVU1kpIHsKKwkJCWV4dDJmc19jbG9zZShmcyk7CisJCQluZWVkX3Jlc3RhcnQrKzsKKwkJCXBjdHguZXJyY29kZSA9CisJCQkJZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoY3R4LT5maWxlc3lzdGVtX25hbWUsCisJCQkJCQkJYmxvY2tzaXplLAorCQkJCQkJCSZjdHgtPm51bV9ibG9ja3MpOworCQl9CisJCWlmIChwY3R4LmVycmNvZGUgPT0gRVhUMl9FVF9VTklNUExFTUVOVEVEKQorCQkJY3R4LT5udW1fYmxvY2tzID0gMDsKKwkJZWxzZSBpZiAocGN0eC5lcnJjb2RlKSB7CisJCQlmaXhfcHJvYmxlbShjdHgsIFBSXzBfR0VUU0laRV9FUlJPUiwgJnBjdHgpOworCQkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwkJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19HT1RfREVWU0laRTsKKwkJaWYgKG5lZWRfcmVzdGFydCkKKwkJCWdvdG8gcmVzdGFydDsKKwl9CisKKwljdHgtPmZzID0gZnM7CisJZnMtPnByaXZfZGF0YSA9IGN0eDsKKwlmcy0+bm93ID0gY3R4LT5ub3c7CisJc2IgPSBmcy0+c3VwZXI7CisKKwlpZiAoc2ItPnNfcmV2X2xldmVsID4gRTJGU0NLX0NVUlJFTlRfUkVWKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIEVYVDJfRVRfUkVWX1RPT19ISUdILAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCWN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwlnZXRfbmV3ZXI6CisJCWZhdGFsX2Vycm9yKGN0eCwgXygiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIikpOworCX0KKworCS8qCisJICogU2V0IHRoZSBkZXZpY2UgbmFtZSwgd2hpY2ggaXMgdXNlZCB3aGVuZXZlciB3ZSBwcmludCBlcnJvcgorCSAqIG9yIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIHVzZXIuCisJICovCisJaWYgKGN0eC0+ZGV2aWNlX25hbWUgPT0gMCAmJgorCSAgICAoc2ItPnNfdm9sdW1lX25hbWVbMF0gIT0gMCkpIHsKKwkJY3R4LT5kZXZpY2VfbmFtZSA9IHN0cmluZ19jb3B5KGN0eCwgc2ItPnNfdm9sdW1lX25hbWUsCisJCQkJCSAgICAgICBzaXplb2Yoc2ItPnNfdm9sdW1lX25hbWUpKTsKKwl9CisJaWYgKGN0eC0+ZGV2aWNlX25hbWUgPT0gMCkKKwkJY3R4LT5kZXZpY2VfbmFtZSA9IHN0cmluZ19jb3B5KGN0eCwgY3R4LT5maWxlc3lzdGVtX25hbWUsIDApOworCWZvciAoY3AgPSBjdHgtPmRldmljZV9uYW1lOyAqY3A7IGNwKyspCisJCWlmIChpc3NwYWNlKCpjcCkgfHwgKmNwID09ICc6JykKKwkJCSpjcCA9ICdfJzsKKworCWVoYW5kbGVyX2luaXQoZnMtPmlvKTsKKworCWlmICgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSAmJgorCSAgICAoZmxhZ3MgJiBFWFQyX0ZMQUdfU0tJUF9NTVApKSB7CisJCWlmIChlMmZzY2tfY2hlY2tfbW1wKGZzLCBjdHgpKQorCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKworCQkvKgorCQkgKiBSZXN0YXJ0IGluIG9yZGVyIHRvIHJlb3BlbiBmcyBidXQgdGhpcyB0aW1lIHN0YXJ0IG1tcC4KKwkJICovCisJCWV4dDJmc19jbG9zZShmcyk7CisJCWN0eC0+ZnMgPSBOVUxMOworCQlmbGFncyAmPSB+RVhUMl9GTEFHX1NLSVBfTU1QOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCisJaWYgKGN0eC0+bG9nZikKKwkJZnByaW50ZihjdHgtPmxvZ2YsICJGaWxlc3lzdGVtIFVVSUQ6ICVzXG4iLAorCQkJZTJwX3V1aWQyc3RyKHNiLT5zX3V1aWQpKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBleHQzIHN1cGVyYmxvY2sgZmllbGRzIGFyZSBjb25zaXN0ZW50LgorCSAqLworCXJldHZhbCA9IGUyZnNja19jaGVja19leHQzX2pvdXJuYWwoY3R4KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCV8oIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZG8gZXh0My1zdHlsZSByZWNvdmVyeS4gIElmIHNvLAorCSAqIGRvIGl0LCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBmc2NrLgorCSAqLworCWlmIChzYi0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIpIHsKKwkJaWYgKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpIHsKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCV8oIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSAiCisJCQkJICAiZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSBjaGVjay5cbiIpKTsKKwkJCWlvX2NoYW5uZWxfZmx1c2goY3R4LT5mcy0+aW8pOworCQl9IGVsc2UgeworCQkJaWYgKGN0eC0+ZmxhZ3MgJiBFMkZfRkxBR19SRVNUQVJURUQpIHsKKwkJCQkvKgorCQkJCSAqIFdob29wcywgd2UgYXR0ZW1wdGVkIHRvIHJ1biB0aGUKKwkJCQkgKiBqb3VybmFsIHR3aWNlLiAgVGhpcyBzaG91bGQgbmV2ZXIKKwkJCQkgKiBoYXBwZW4sIHVubGVzcyB0aGUgaGFyZHdhcmUgb3IKKwkJCQkgKiBkZXZpY2UgZHJpdmVyIGlzIGJlaW5nIGJvZ3VzLgorCQkJCSAqLworCQkJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyAiCisJCQkJCSAgIm9uICVzXG4iKSwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJCX0KKwkJCXJldHZhbCA9IGUyZnNja19ydW5fZXh0M19qb3VybmFsKGN0eCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIiksCisJCQkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCQl9CisJCQlleHQyZnNfY2xvc2UoY3R4LT5mcyk7CisJCQljdHgtPmZzID0gMDsKKwkJCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfUkVTVEFSVEVEOworCQkJZ290byByZXN0YXJ0OworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmZWF0dXJlIHNldHMuICBXZSBuZWVkIHRvCisJICogYmUgbW9yZSBzdHJpbmdlbnQgdGhhbiBleHQyZnNfb3BlbigpLgorCSAqLworCWZlYXR1cmVzWzBdID0gc2ItPnNfZmVhdHVyZV9jb21wYXQgJiB+RVhUMl9MSUJfRkVBVFVSRV9DT01QQVRfU1VQUDsKKwlmZWF0dXJlc1sxXSA9IHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiB+RVhUMl9MSUJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQOworCWZlYXR1cmVzWzJdID0gKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICAgICAgIH5FWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQKTsKK3ByaW50X3Vuc3VwcF9mZWF0dXJlczoKKwlpZiAoZmVhdHVyZXNbMF0gfHwgZmVhdHVyZXNbMV0gfHwgZmVhdHVyZXNbMl0pIHsKKwkJaW50CWksIGo7CisJCV9fdTMyCSptYXNrID0gZmVhdHVyZXMsIG07CisKKwkJbG9nX2VycihjdHgsIF8oIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIpLAorCQkJY3R4LT5maWxlc3lzdGVtX25hbWUpOworCisJCWZvciAoaT0wOyBpIDwzOyBpKyssbWFzaysrKSB7CisJCQlmb3IgKGo9MCxtPTE7IGogPCAzMjsgaisrLCBtPDw9MSkgeworCQkJCWlmICgqbWFzayAmIG0pCisJCQkJCWxvZ19lcnIoY3R4LCAiICVzIiwKKwkJCQkJCWUycF9mZWF0dXJlMnN0cmluZyhpLCBtKSk7CisJCQl9CisJCX0KKwkJbG9nX2VycihjdHgsICJcbiIpOworCQlnb3RvIGdldF9uZXdlcjsKKwl9CisjaWZkZWYgRU5BQkxFX0NPTVBSRVNTSU9OCisJaWYgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQ09NUFJFU1NJT04pCisJCWxvZ19lcnIoY3R4LCBfKCIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCAiCisJCQkgICAgICAgImlzIGV4cGVyaW1lbnRhbC5cbiIpLAorCQkJY3R4LT5wcm9ncmFtX25hbWUpOworI2VuZGlmCisjaWZuZGVmIEVOQUJMRV9IVFJFRQorCWlmIChzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSB7CisJCWxvZ19lcnIoY3R4LCBfKCIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG5cdCIKKwkJCSAgImJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIpLAorCQkJY3R4LT5wcm9ncmFtX25hbWUsIGN0eC0+ZGV2aWNlX25hbWUpOworCQlnb3RvIGdldF9uZXdlcjsKKwl9CisjZW5kaWYKKworCS8qCisJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3BlY2lmaWMgc3VwZXJibG9jaywgcHJlc3VtYWJseSB0aGUKKwkgKiBtYXN0ZXIgc3VwZXJibG9jayBoYXMgYmVlbiB0cmFzaGVkLiAgU28gd2UgbWFyayB0aGUKKwkgKiBzdXBlcmJsb2NrIGFzIGRpcnR5LCBzbyBpdCBjYW4gYmUgd3JpdHRlbiBvdXQuCisJICovCisJaWYgKGN0eC0+c3VwZXJibG9jayAmJgorCSAgICAhKGN0eC0+b3B0aW9ucyAmIEUyRl9PUFRfUkVBRE9OTFkpKQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZpbGVzeXN0ZW0gYmxvY2tzIHBlciBwYWdlc2l6ZS4gIElmCisJICogZnMtPmJsb2Nrc2l6ZSA+IHBhZ2Vfc2l6ZSwgc2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzIHBlcgorCSAqIHBhZ2VzaXplIHRvIDEgdG8gYXZvaWQgZGl2aXNpb24gYnkgemVybyBlcnJvcnMuCisJICovCisjaWZkZWYgX1NDX1BBR0VTSVpFCisJc3lzdmFsID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCWlmIChzeXN2YWwgPiAwKQorCQlzeXNfcGFnZV9zaXplID0gc3lzdmFsOworI2VuZGlmIC8qIF9TQ19QQUdFU0laRSAqLworCWN0eC0+YmxvY2tzX3Blcl9wYWdlID0gc3lzX3BhZ2Vfc2l6ZSAvIGZzLT5ibG9ja3NpemU7CisJaWYgKGN0eC0+YmxvY2tzX3Blcl9wYWdlID09IDApCisJCWN0eC0+YmxvY2tzX3Blcl9wYWdlID0gMTsKKworCWlmIChjdHgtPnN1cGVyYmxvY2spCisJCXNldF9sYXRjaF9mbGFncyhQUl9MQVRDSF9SRUxPQywgUFJMX0xBVENIRUQsIDApOworCWV4dDJmc19tYXJrX3ZhbGlkKGZzKTsKKwljaGVja19zdXBlcl9ibG9jayhjdHgpOworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0lHTkFMX01BU0spCisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJY2hlY2tfaWZfc2tpcChjdHgpOworCWNoZWNrX3Jlc2l6ZV9pbm9kZShjdHgpOworCWlmIChiYWRfYmxvY2tzX2ZpbGUpCisJCXJlYWRfYmFkX2Jsb2Nrc19maWxlKGN0eCwgYmFkX2Jsb2Nrc19maWxlLCByZXBsYWNlX2JhZF9ibG9ja3MpOworCWVsc2UgaWYgKGNmbGFnKQorCQlyZWFkX2JhZF9ibG9ja3NfZmlsZShjdHgsIDAsICFrZWVwX2JhZF9ibG9ja3MpOyAvKiBUZXN0IGRpc2sgKi8KKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NJR05BTF9NQVNLKQorCQlmYXRhbF9lcnJvcihjdHgsIDApOworCisJLyoKKwkgKiBNYXJrIHRoZSBzeXN0ZW0gYXMgdmFsaWQsICd0aWwgcHJvdmVuIG90aGVyd2lzZQorCSAqLworCWV4dDJmc19tYXJrX3ZhbGlkKGZzKTsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX2lub2RlKGZzLCAmZnMtPmJhZGJsb2Nrcyk7CisJaWYgKHJldHZhbCkgeworCQlsb2dfb3V0KGN0eCwgXygiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIiksCisJCQljdHgtPnByb2dyYW1fbmFtZSwgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJcHJlZW5oYWx0KGN0eCk7CisJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCAiCisJCQkJICAgICAiYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIikpOworCX0KKworCS8qCisJICogU2F2ZSB0aGUgam91cm5hbCBzaXplIGluIG1lZ2FieXRlcy4KKwkgKiBUcnkgYW5kIHVzZSB0aGUgam91cm5hbCBzaXplIGZyb20gdGhlIGJhY2t1cCBlbHNlIGxldCBlMmZzY2sKKwkgKiBmaW5kIHRoZSBkZWZhdWx0IGpvdXJuYWwgc2l6ZS4KKwkgKi8KKwlpZiAoc2ItPnNfam5sX2JhY2t1cF90eXBlID09IEVYVDNfSk5MX0JBQ0tVUF9CTE9DS1MpCisJCWpvdXJuYWxfc2l6ZSA9IChzYi0+c19qbmxfYmxvY2tzWzE1XSA8PCAoMzIgLSAyMCkpIHwKKwkJCSAgICAgICAoc2ItPnNfam5sX2Jsb2Nrc1sxNl0gPj4gMjApOworCWVsc2UKKwkJam91cm5hbF9zaXplID0gLTE7CisKKwlpZiAoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSB7CisJCS8qIFF1b3RhcyB3ZXJlIGVuYWJsZWQuIERvIHF1b3RhIGFjY291bnRpbmcgZHVyaW5nIGZzY2suICovCisJCWlmICgoc2ItPnNfdXNyX3F1b3RhX2ludW0gJiYgc2ItPnNfZ3JwX3F1b3RhX2ludW0pIHx8CisJCSAgICAoIXNiLT5zX3Vzcl9xdW90YV9pbnVtICYmICFzYi0+c19ncnBfcXVvdGFfaW51bSkpCisJCQlxdHlwZSA9IC0xOworCQllbHNlCisJCQlxdHlwZSA9IHNiLT5zX3Vzcl9xdW90YV9pbnVtID8gVVNSUVVPVEEgOiBHUlBRVU9UQTsKKworCQlxdW90YV9pbml0X2NvbnRleHQoJmN0eC0+cWN0eCwgY3R4LT5mcywgcXR5cGUpOworCX0KKworCXJ1bl9yZXN1bHQgPSBlMmZzY2tfcnVuKGN0eCk7CisJZTJmc2NrX2NsZWFyX3Byb2diYXIoY3R4KTsKKworCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfSk9VUk5BTF9JTk9ERSkgeworCQlpZiAoZml4X3Byb2JsZW0oY3R4LCBQUl82X1JFQ1JFQVRFX0pPVVJOQUwsICZwY3R4KSkgeworCQkJaWYgKGpvdXJuYWxfc2l6ZSA8IDEwMjQpCisJCQkJam91cm5hbF9zaXplID0gZXh0MmZzX2RlZmF1bHRfam91cm5hbF9zaXplKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisJCQlpZiAoam91cm5hbF9zaXplIDwgMCkgeworCQkJCWZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmPQorCQkJCQl+RVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTDsKKwkJCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19NQVNURVJfU0JfT05MWTsKKwkJCQlsb2dfb3V0KGN0eCwgIiVzOiBDb3VsZG4ndCBkZXRlcm1pbmUgIgorCQkJCQkiam91cm5hbCBzaXplXG4iLCBjdHgtPnByb2dyYW1fbmFtZSk7CisJCQkJZ290byBub19qb3VybmFsOworCQkJfQorCQkJbG9nX291dChjdHgsIF8oIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIpLAorCQkJICAgICAgIGpvdXJuYWxfc2l6ZSk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9pbm9kZShmcywKKwkJCQkJCQkgIGpvdXJuYWxfc2l6ZSwgMCk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJbG9nX291dChjdHgsICIlczogd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAiCisJCQkJCSJqb3VybmFsXG4iLCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQkJCWdvdG8gbm9fam91cm5hbDsKKwkJCX0KKwkJCWxvZ19vdXQoY3R4LCAiJXMiLCBfKCIgRG9uZS5cbiIpKTsKKwkJCWxvZ19vdXQoY3R4LCAiJXMiLAorCQkJCV8oIlxuKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtICIKKwkJCQkgICJmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIikpOworCQl9CisJfQorbm9fam91cm5hbDoKKworCWlmIChjdHgtPnFjdHgpIHsKKwkJaW50IGksIG5lZWRzX3dyaXRlb3V0OworCQlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJCWlmIChxdHlwZSAhPSAtMSAmJiBxdHlwZSAhPSBpKQorCQkJCWNvbnRpbnVlOworCQkJbmVlZHNfd3JpdGVvdXQgPSAwOworCQkJcGN0eC5udW0gPSBpOworCQkJcmV0dmFsID0gcXVvdGFfY29tcGFyZV9hbmRfdXBkYXRlKGN0eC0+cWN0eCwgaSwKKwkJCQkJCQkgICZuZWVkc193cml0ZW91dCk7CisJCQlpZiAoKHJldHZhbCB8fCBuZWVkc193cml0ZW91dCkgJiYKKwkJCSAgICBmaXhfcHJvYmxlbShjdHgsIFBSXzZfVVBEQVRFX1FVT1RBUywgJnBjdHgpKQorCQkJCXF1b3RhX3dyaXRlX2lub2RlKGN0eC0+cWN0eCwgaSk7CisJCX0KKwkJcXVvdGFfcmVsZWFzZV9jb250ZXh0KCZjdHgtPnFjdHgpOworCX0KKworCWlmIChydW5fcmVzdWx0ID09IEUyRl9GTEFHX1JFU1RBUlQpIHsKKwkJbG9nX291dChjdHgsICIlcyIsCisJCQlfKCJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIpKTsKKwkJcmV0dmFsID0gZTJmc2NrX3Jlc2V0X2NvbnRleHQoY3R4KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IikpOworCQkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwkJfQorCQlleHQyZnNfY2xvc2UoZnMpOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCWlmIChydW5fcmVzdWx0ICYgRTJGX0ZMQUdfQ0FOQ0VMKSB7CisJCWxvZ19vdXQoY3R4LCBfKCIlczogZTJmc2NrIGNhbmNlbGVkLlxuIiksIGN0eC0+ZGV2aWNlX25hbWUgPworCQkJY3R4LT5kZXZpY2VfbmFtZSA6IGN0eC0+ZmlsZXN5c3RlbV9uYW1lKTsKKwkJZXhpdF92YWx1ZSB8PSBGU0NLX0NBTkNFTEVEOworCX0KKwlpZiAocnVuX3Jlc3VsdCAmIEUyRl9GTEFHX0FCT1JUKQorCQlmYXRhbF9lcnJvcihjdHgsIF8oImFib3J0ZWQiKSk7CisJaWYgKGNoZWNrX2JhY2t1cF9zdXBlcl9ibG9jayhjdHgpKSB7CisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCisjaWZkZWYgTVRSQUNFCisJbXRyYWNlX3ByaW50KCJDbGVhbnVwIik7CisjZW5kaWYKKwlpZiAoZXh0MmZzX3Rlc3RfY2hhbmdlZChmcykpIHsKKwkJZXhpdF92YWx1ZSB8PSBGU0NLX05PTkRFU1RSVUNUOworCQlpZiAoIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1BSRUVOKSkKKwkJCWxvZ19vdXQoY3R4LCBfKCJcbiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgIgorCQkJCSAgICAgICAiTU9ESUZJRUQgKioqKipcbiIpLAorCQkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlpZiAoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfSVNST09UKSB7CisJCQlsb2dfb3V0KGN0eCwgXygiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIiksCisJCQkJY3R4LT5kZXZpY2VfbmFtZSk7CisJCQlleGl0X3ZhbHVlIHw9IEZTQ0tfUkVCT09UOworCQl9CisJfQorCWlmICghZXh0MmZzX3Rlc3RfdmFsaWQoZnMpIHx8CisJICAgICgoZXhpdF92YWx1ZSAmIEZTQ0tfQ0FOQ0VMRUQpICYmCisJICAgICAoc2ItPnNfc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKSkpIHsKKwkJbG9nX291dChjdHgsIF8oIlxuJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgIgorCQkJICAgICAgICJlcnJvcnMgKioqKioqKioqKlxuXG4iKSwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCWV4aXRfdmFsdWUgfD0gRlNDS19VTkNPUlJFQ1RFRDsKKwkJZXhpdF92YWx1ZSAmPSB+RlNDS19OT05ERVNUUlVDVDsKKwl9CisJaWYgKGV4aXRfdmFsdWUgJiBGU0NLX0NBTkNFTEVEKSB7CisJCWludAlhbGxvd19jYW5jZWxsYXRpb247CisKKwkJcHJvZmlsZV9nZXRfYm9vbGVhbihjdHgtPnByb2ZpbGUsICJvcHRpb25zIiwKKwkJCQkgICAgImFsbG93X2NhbmNlbGxhdGlvbiIsIDAsIDAsCisJCQkJICAgICZhbGxvd19jYW5jZWxsYXRpb24pOworCQlleGl0X3ZhbHVlICY9IH5GU0NLX05PTkRFU1RSVUNUOworCQlpZiAoYWxsb3dfY2FuY2VsbGF0aW9uICYmIGV4dDJmc190ZXN0X3ZhbGlkKGZzKSAmJgorCQkgICAgKHNiLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykgJiYKKwkJICAgICEoc2ItPnNfc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKSkKKwkJCWV4aXRfdmFsdWUgPSAwOworCX0gZWxzZSB7CisJCXNob3dfc3RhdHMoY3R4KTsKKwkJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkpIHsKKwkJCWlmIChleHQyZnNfdGVzdF92YWxpZChmcykpIHsKKwkJCQlpZiAoIShzYi0+c19zdGF0ZSAmIEVYVDJfVkFMSURfRlMpKQorCQkJCQlleGl0X3ZhbHVlIHw9IEZTQ0tfTk9OREVTVFJVQ1Q7CisJCQkJc2ItPnNfc3RhdGUgPSBFWFQyX1ZBTElEX0ZTOworCQkJfSBlbHNlCisJCQkJc2ItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJCQlzYi0+c19tbnRfY291bnQgPSAwOworCQkJaWYgKCEoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1RJTUVfSU5TQU5FKSkKKwkJCQlzYi0+c19sYXN0Y2hlY2sgPSBjdHgtPm5vdzsKKwkJCW1lbXNldCgoKGNoYXIgKikgc2IpICsgRVhUNF9TX0VSUl9TVEFSVCwgMCwKKwkJCSAgICAgICBFWFQ0X1NfRVJSX0xFTik7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0KKwl9CisKKwlpZiAoKHJ1bl9yZXN1bHQgJiBFMkZfRkxBR19DQU5DRUwpID09IDAgJiYKKwkgICAgc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNICYmCisJICAgICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9SRUFET05MWSkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3NldF9nZHRfY3N1bShjdHgtPmZzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIpKTsKKwkJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJCX0KKwl9CisKKwllMmZzY2tfd3JpdGVfYml0bWFwcyhjdHgpOworCWlvX2NoYW5uZWxfZmx1c2goY3R4LT5mcy0+aW8pOworCXByaW50X3Jlc291cmNlX3RyYWNrKGN0eCwgTlVMTCwgJmN0eC0+Z2xvYmFsX3J0cmFjaywgY3R4LT5mcy0+aW8pOworCisJZXh0MmZzX2Nsb3NlKGZzKTsKKwljdHgtPmZzID0gTlVMTDsKKwlmcmVlKGN0eC0+am91cm5hbF9uYW1lKTsKKworCWUyZnNja19mcmVlX2NvbnRleHQoY3R4KTsKKwlyZW1vdmVfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfcHJvZl9lcnJvcl90YWJsZSk7CisJcmV0dXJuIGV4aXRfdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc2NrL3V0aWwuYyBiL2UyZnNwcm9ncy9lMmZzY2svdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmZmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc2NrL3V0aWwuYwpAQCAtMCwwICsxLDg0OCBAQAorLyoKKyAqIHV0aWwuYyAtLS0gbWlzY2VsbGFuZW91cyB1dGlsaXRpZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05JT19ICisjdW5kZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDxjb25pby5oPgorI2RlZmluZSByZWFkX2FfY2hhcigpCWdldGNoKCkKKyNlbHNlCisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJlMmZzY2suaCIKKworZXh0ZXJuIGUyZnNja190IGUyZnNja19nbG9iYWxfY3R4OyAgIC8qIFRyeSB5b3VyIHZlcnkgYmVzdCBub3QgdG8gdXNlIHRoaXMhICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKwordm9pZCBmYXRhbF9lcnJvcihlMmZzY2tfdCBjdHgsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGN0eC0+ZnM7CisJaW50IGV4aXRfdmFsdWUgPSBGU0NLX0VSUk9SOworCisJaWYgKG1zZykKKwkJZnByaW50ZiAoc3RkZXJyLCAiZTJmc2NrOiAlc1xuIiwgbXNnKTsKKwlpZiAoIWZzKQorCQlnb3RvIG91dDsKKwlpZiAoZnMtPmlvICYmIGZzLT5zdXBlcikgeworCQlleHQyZnNfbW1wX3N0b3AoY3R4LT5mcyk7CisJCWlmIChjdHgtPmZzLT5pby0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKQorCQkJaW9fY2hhbm5lbF9mbHVzaChjdHgtPmZzLT5pbyk7CisJCWVsc2UKKwkJCWxvZ19lcnIoY3R4LCAiZTJmc2NrOiBpbyBtYW5hZ2VyIG1hZ2ljIGJhZCFcbiIpOworCX0KKwlpZiAoZXh0MmZzX3Rlc3RfY2hhbmdlZChmcykpIHsKKwkJZXhpdF92YWx1ZSB8PSBGU0NLX05PTkRFU1RSVUNUOworCQlsb2dfb3V0KGN0eCwgXygiXG4lczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlpZiAoY3R4LT5tb3VudF9mbGFncyAmIEVYVDJfTUZfSVNST09UKQorCQkJZXhpdF92YWx1ZSB8PSBGU0NLX1JFQk9PVDsKKwl9CisJaWYgKCFleHQyZnNfdGVzdF92YWxpZChmcykpIHsKKwkJbG9nX291dChjdHgsIF8oIlxuJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgIgorCQkJICAgICAgICJlcnJvcnMgKioqKioqKioqKlxuXG4iKSwgY3R4LT5kZXZpY2VfbmFtZSk7CisJCWV4aXRfdmFsdWUgfD0gRlNDS19VTkNPUlJFQ1RFRDsKKwkJZXhpdF92YWx1ZSAmPSB+RlNDS19OT05ERVNUUlVDVDsKKwl9CitvdXQ6CisJY3R4LT5mbGFncyB8PSBFMkZfRkxBR19BQk9SVDsKKwlpZiAoY3R4LT5mbGFncyAmIEUyRl9GTEFHX1NFVEpNUF9PSykKKwkJbG9uZ2ptcChjdHgtPmFib3J0X2xvYywgMSk7CisJZXhpdChleGl0X3ZhbHVlKTsKK30KKwordm9pZCBsb2dfb3V0KGUyZnNja190IGN0eCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwdmFyOworCisJdmFfc3RhcnQocHZhciwgZm10KTsKKwl2cHJpbnRmKGZtdCwgcHZhcik7CisJdmFfZW5kKHB2YXIpOworCWlmIChjdHgtPmxvZ2YpIHsKKwkJdmFfc3RhcnQocHZhciwgZm10KTsKKwkJdmZwcmludGYoY3R4LT5sb2dmLCBmbXQsIHB2YXIpOworCQl2YV9lbmQocHZhcik7CisJfQorfQorCit2b2lkIGxvZ19lcnIoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHB2YXI7CisKKwl2YV9zdGFydChwdmFyLCBmbXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBwdmFyKTsKKwl2YV9lbmQocHZhcik7CisJaWYgKGN0eC0+bG9nZikgeworCQl2YV9zdGFydChwdmFyLCBmbXQpOworCQl2ZnByaW50ZihjdHgtPmxvZ2YsIGZtdCwgcHZhcik7CisJCXZhX2VuZChwdmFyKTsKKwl9Cit9CisKK3ZvaWQgKmUyZnNja19hbGxvY2F0ZV9tZW1vcnkoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCit7CisJdm9pZCAqcmV0OworCWNoYXIgYnVmWzI1Nl07CisKKyNpZmRlZiBERUJVR19BTExPQ0FURV9NRU1PUlkKKwlwcmludGYoIkFsbG9jYXRpbmcgJXUgYnl0ZXMgZm9yICVzLi4uXG4iLCBzaXplLCBkZXNjcmlwdGlvbik7CisjZW5kaWYKKwlyZXQgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFyZXQpIHsKKwkJc3ByaW50ZihidWYsICJDYW4ndCBhbGxvY2F0ZSAldSBieXRlcyBmb3IgJXNcbiIsCisJCQlzaXplLCBkZXNjcmlwdGlvbik7CisJCWZhdGFsX2Vycm9yKGN0eCwgYnVmKTsKKwl9CisJbWVtc2V0KHJldCwgMCwgc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworY2hhciAqc3RyaW5nX2NvcHkoZTJmc2NrX3QgY3R4IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJICBjb25zdCBjaGFyICpzdHIsIGludCBsZW4pCit7CisJY2hhcgkqcmV0OworCisJaWYgKCFzdHIpCisJCXJldHVybiBOVUxMOworCWlmICghbGVuKQorCQlsZW4gPSBzdHJsZW4oc3RyKTsKKwlyZXQgPSBtYWxsb2MobGVuKzEpOworCWlmIChyZXQpIHsKKwkJc3RybmNweShyZXQsIHN0ciwgbGVuKTsKKwkJcmV0W2xlbl0gPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCisjaWZuZGVmIEhBVkVfU1RSTkxFTgorLyoKKyAqIEluY3JlZGlibHksIGxpYmM1IGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgc3Rybmxlbi4gIFNvIHdlIGhhdmUgdG8KKyAqIHByb3ZpZGUgb3VyIG93bi4KKyAqLworaW50IGUyZnNja19zdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBpbnQgY291bnQpCit7CisJY29uc3QgY2hhciAqY3AgPSBzOworCisJd2hpbGUgKGNvdW50LS0gJiYgKmNwKQorCQljcCsrOworCXJldHVybiBjcCAtIHM7Cit9CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0NPTklPX0gKK3N0YXRpYyBpbnQgcmVhZF9hX2NoYXIodm9pZCkKK3sKKwljaGFyCWM7CisJaW50CXI7CisJaW50CWZhaWwgPSAwOworCisJd2hpbGUoMSkgeworCQlpZiAoZTJmc2NrX2dsb2JhbF9jdHggJiYKKwkJICAgIChlMmZzY2tfZ2xvYmFsX2N0eC0+ZmxhZ3MgJiBFMkZfRkxBR19DQU5DRUwpKSB7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlyID0gcmVhZCgwLCAmYywgMSk7CisJCWlmIChyID09IDEpCisJCQlyZXR1cm4gYzsKKwkJaWYgKGZhaWwrKyA+IDEwMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gRU9GOworfQorI2VuZGlmCisKK2ludCBhc2tfeW4oZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICogc3RyaW5nLCBpbnQgZGVmKQoreworCWludAkJYzsKKwljb25zdCBjaGFyCSpkZWZzdHI7CisJY29uc3QgY2hhcgkqc2hvcnRfeWVzID0gXygieVkiKTsKKwljb25zdCBjaGFyCSpzaG9ydF9ubyA9IF8oIm5OIik7CisKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorCXN0cnVjdCB0ZXJtaW9zCXRlcm1pb3MsIHRtcDsKKworCXRjZ2V0YXR0ciAoMCwgJnRlcm1pb3MpOworCXRtcCA9IHRlcm1pb3M7CisJdG1wLmNfbGZsYWcgJj0gfihJQ0FOT04gfCBFQ0hPKTsKKwl0bXAuY19jY1tWTUlOXSA9IDE7CisJdG1wLmNfY2NbVlRJTUVdID0gMDsKKwl0Y3NldGF0dHIgKDAsIFRDU0FOT1csICZ0bXApOworI2VuZGlmCisKKwlpZiAoZGVmID09IDEpCisJCWRlZnN0ciA9IF8oXygiPHk+IikpOworCWVsc2UgaWYgKGRlZiA9PSAwKQorCQlkZWZzdHIgPSBfKF8oIjxuPiIpKTsKKwllbHNlCisJCWRlZnN0ciA9IF8oIiAoeS9uKSIpOworCWxvZ19vdXQoY3R4LCAiJXMlcz8gIiwgc3RyaW5nLCBkZWZzdHIpOworCXdoaWxlICgxKSB7CisJCWZmbHVzaCAoc3Rkb3V0KTsKKwkJaWYgKChjID0gcmVhZF9hX2NoYXIoKSkgPT0gRU9GKQorCQkJYnJlYWs7CisJCWlmIChjID09IDMpIHsKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorCQkJdGNzZXRhdHRyICgwLCBUQ1NBTk9XLCAmdGVybWlvcyk7CisjZW5kaWYKKwkJCWlmIChjdHgtPmZsYWdzICYgRTJGX0ZMQUdfU0VUSk1QX09LKSB7CisJCQkJbG9nX291dChjdHgsICJcbiIpOworCQkJCWxvbmdqbXAoZTJmc2NrX2dsb2JhbF9jdHgtPmFib3J0X2xvYywgMSk7CisJCQl9CisJCQlsb2dfb3V0KGN0eCwgIiVzIiwgXygiY2FuY2VsbGVkIVxuIikpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHN0cmNocihzaG9ydF95ZXMsIChjaGFyKSBjKSkgeworCQkJZGVmID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKHN0cmNocihzaG9ydF9ubywgKGNoYXIpIGMpKSB7CisJCQlkZWYgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSBpZiAoKGMgPT0gMjcgfHwgYyA9PSAnICcgfHwgYyA9PSAnXG4nKSAmJiAoZGVmICE9IC0xKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoZGVmKQorCQlsb2dfb3V0KGN0eCwgIiVzIiwgXygieWVzXG4iKSk7CisJZWxzZQorCQlsb2dfb3V0KGN0eCwgIiVzIiwgXygibm9cbiIpKTsKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSAorCXRjc2V0YXR0ciAoMCwgVENTQU5PVywgJnRlcm1pb3MpOworI2VuZGlmCisJcmV0dXJuIGRlZjsKK30KKworaW50IGFzayAoZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICogc3RyaW5nLCBpbnQgZGVmKQoreworCWlmIChjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX05PKSB7CisJCWxvZ19vdXQoY3R4LCBfKCIlcz8gbm9cblxuIiksIHN0cmluZyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9ZRVMpIHsKKwkJbG9nX291dChjdHgsIF8oIiVzPyB5ZXNcblxuIiksIHN0cmluZyk7CisJCXJldHVybiAxOworCX0KKwlpZiAoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikgeworCQlsb2dfb3V0KGN0eCwgIiVzPyAlc1xuXG4iLCBzdHJpbmcsIGRlZiA/IF8oInllcyIpIDogXygibm8iKSk7CisJCXJldHVybiBkZWY7CisJfQorCXJldHVybiBhc2tfeW4oY3R4LCBzdHJpbmcsIGRlZik7Cit9CisKK3ZvaWQgZTJmc2NrX3JlYWRfYml0bWFwcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJY29uc3QgY2hhcgkqb2xkX29wOworCXVuc2lnbmVkIGludAlzYXZlX3R5cGU7CisKKwlpZiAoY3R4LT5pbnZhbGlkX2JpdG1hcHMpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgMCwKKwkJICAgIF8oImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIpLAorCQkJY3R4LT5kZXZpY2VfbmFtZSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorCisJb2xkX29wID0gZWhhbmRsZXJfb3BlcmF0aW9uKF8oInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiKSk7CisJZTJmc2NrX3NldF9iaXRtYXBfdHlwZShmcywgRVhUMkZTX0JNQVA2NF9SQlRSRUUsICJmc19iaXRtYXBzIiwKKwkJCSAgICAgICAmc2F2ZV90eXBlKTsKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzKGZzKTsKKwlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHNhdmVfdHlwZTsKKwllaGFuZGxlcl9vcGVyYXRpb24ob2xkX29wKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoY3R4LT5wcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCV8oIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiKSwKKwkJCWN0eC0+ZGV2aWNlX25hbWUpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KK30KKwordm9pZCBlMmZzY2tfd3JpdGVfYml0bWFwcyhlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJY29uc3QgY2hhcgkqb2xkX29wOworCisJb2xkX29wID0gZWhhbmRsZXJfb3BlcmF0aW9uKF8oIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiKSk7CisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2JpdG1hcHMoZnMpOworCWVoYW5kbGVyX29wZXJhdGlvbihvbGRfb3ApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihjdHgtPnByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJXygid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIpLAorCQkJY3R4LT5kZXZpY2VfbmFtZSk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorfQorCit2b2lkIHByZWVuaGFsdChlMmZzY2tfdCBjdHgpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBjdHgtPmZzOworCisJaWYgKCEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9QUkVFTikpCisJCXJldHVybjsKKwlsb2dfZXJyKGN0eCwgXygiXG5cbiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7ICIKKwkJIlJVTiBmc2NrIE1BTlVBTExZLlxuXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIiksCisJICAgICAgIGN0eC0+ZGV2aWNlX25hbWUpOworCWN0eC0+ZmxhZ3MgfD0gRTJGX0ZMQUdfRVhJVElORzsKKwlpZiAoZnMgIT0gTlVMTCkgeworCQlmcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9FUlJPUl9GUzsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlleHQyZnNfY2xvc2UoZnMpOworCX0KKwlleGl0KEZTQ0tfVU5DT1JSRUNURUQpOworfQorCisjaWZkZWYgUkVTT1VSQ0VfVFJBQ0sKK3ZvaWQgaW5pdF9yZXNvdXJjZV90cmFjayhzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLCBpb19jaGFubmVsIGNoYW5uZWwpCit7CisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKwlzdHJ1Y3QgcnVzYWdlIHI7CisjZW5kaWYKKwlpb19zdGF0cyBpb19zdGFydCA9IDA7CisKKwl0cmFjay0+YnJrX3N0YXJ0ID0gc2JyaygwKTsKKwlnZXR0aW1lb2ZkYXkoJnRyYWNrLT50aW1lX3N0YXJ0LCAwKTsKKyNpZmRlZiBIQVZFX0dFVFJVU0FHRQorI2lmZGVmIHN1bgorCW1lbXNldCgmciwgMCwgc2l6ZW9mKHN0cnVjdCBydXNhZ2UpKTsKKyNlbmRpZgorCWdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnIpOworCXRyYWNrLT51c2VyX3N0YXJ0ID0gci5ydV91dGltZTsKKwl0cmFjay0+c3lzdGVtX3N0YXJ0ID0gci5ydV9zdGltZTsKKyNlbHNlCisJdHJhY2stPnVzZXJfc3RhcnQudHZfc2VjID0gdHJhY2stPnVzZXJfc3RhcnQudHZfdXNlYyA9IDA7CisJdHJhY2stPnN5c3RlbV9zdGFydC50dl9zZWMgPSB0cmFjay0+c3lzdGVtX3N0YXJ0LnR2X3VzZWMgPSAwOworI2VuZGlmCisJdHJhY2stPmJ5dGVzX3JlYWQgPSAwOworCXRyYWNrLT5ieXRlc193cml0dGVuID0gMDsKKwlpZiAoY2hhbm5lbCAmJiBjaGFubmVsLT5tYW5hZ2VyICYmIGNoYW5uZWwtPm1hbmFnZXItPmdldF9zdGF0cykKKwkJY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKGNoYW5uZWwsICZpb19zdGFydCk7CisJaWYgKGlvX3N0YXJ0KSB7CisJCXRyYWNrLT5ieXRlc19yZWFkID0gaW9fc3RhcnQtPmJ5dGVzX3JlYWQ7CisJCXRyYWNrLT5ieXRlc193cml0dGVuID0gaW9fc3RhcnQtPmJ5dGVzX3dyaXR0ZW47CisJfQorfQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX0lOTElORV8gX19pbmxpbmVfXworI2Vsc2UKKyNkZWZpbmUgX0lOTElORV8KKyNlbmRpZgorCitzdGF0aWMgX0lOTElORV8gZmxvYXQgdGltZXZhbF9zdWJ0cmFjdChzdHJ1Y3QgdGltZXZhbCAqdHYxLAorCQkJCSAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYyKQoreworCXJldHVybiAoKHR2MS0+dHZfc2VjIC0gdHYyLT50dl9zZWMpICsKKwkJKChmbG9hdCkgKHR2MS0+dHZfdXNlYyAtIHR2Mi0+dHZfdXNlYykpIC8gMTAwMDAwMCk7Cit9CisKK3ZvaWQgcHJpbnRfcmVzb3VyY2VfdHJhY2soZTJmc2NrX3QgY3R4LCBjb25zdCBjaGFyICpkZXNjLAorCQkJICBzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLCBpb19jaGFubmVsIGNoYW5uZWwpCit7CisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKwlzdHJ1Y3QgcnVzYWdlIHI7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01BTExJTkZPCisJc3RydWN0IG1hbGxpbmZvCW1hbGxvY19pbmZvOworI2VuZGlmCisJc3RydWN0IHRpbWV2YWwgdGltZV9lbmQ7CisKKwlpZiAoKGRlc2MgJiYgIShjdHgtPm9wdGlvbnMgJiBFMkZfT1BUX1RJTUUyKSkgfHwKKwkgICAgKCFkZXNjICYmICEoY3R4LT5vcHRpb25zICYgRTJGX09QVF9USU1FKSkpCisJCXJldHVybjsKKworCWUyZnNja19jbGVhcl9wcm9nYmFyKGN0eCk7CisJZ2V0dGltZW9mZGF5KCZ0aW1lX2VuZCwgMCk7CisKKwlpZiAoZGVzYykKKwkJbG9nX291dChjdHgsICIlczogIiwgZGVzYyk7CisKKyNpZmRlZiBIQVZFX01BTExJTkZPCisjZGVmaW5lIGtieXRlcyh4KQkoKCh1bnNpZ25lZCBsb25nKSh4KSArIDEwMjMpIC8gMTAyNCkKKworCW1hbGxvY19pbmZvID0gbWFsbGluZm8oKTsKKwlsb2dfb3V0KGN0eCwgXygiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIiksCisJCWtieXRlcyhtYWxsb2NfaW5mby5hcmVuYSksIGtieXRlcyhtYWxsb2NfaW5mby5oYmxraGQpLAorCQlrYnl0ZXMobWFsbG9jX2luZm8udW9yZGJsa3MpLCBrYnl0ZXMobWFsbG9jX2luZm8uZm9yZGJsa3MpKTsKKyNlbHNlCisJbG9nX291dChjdHgsIF8oIk1lbW9yeSB1c2VkOiAlbHUsICIpLAorCQkodW5zaWduZWQgbG9uZykgKCgoY2hhciAqKSBzYnJrKDApKSAtCisJCQkJICgoY2hhciAqKSB0cmFjay0+YnJrX3N0YXJ0KSkpOworI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKwlnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZyKTsKKworCWxvZ19vdXQoY3R4LCBfKCJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIiksCisJCXRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3V0aW1lLCAmdHJhY2stPnVzZXJfc3RhcnQpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3N0aW1lLCAmdHJhY2stPnN5c3RlbV9zdGFydCkpOworI2Vsc2UKKwlsb2dfb3V0KGN0eCwgXygiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIiksCisJCXRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpKTsKKyNlbmRpZgorI2RlZmluZSBtYnl0ZXMoeCkJKCgoeCkgKyAxMDQ4NTc1KSAvIDEwNDg1NzYpCisJaWYgKGNoYW5uZWwgJiYgY2hhbm5lbC0+bWFuYWdlciAmJiBjaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMpIHsKKwkJaW9fc3RhdHMgZGVsdGEgPSAwOworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfcmVhZCA9IDA7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc193cml0dGVuID0gMDsKKworCQlpZiAoZGVzYykKKwkJCWxvZ19vdXQoY3R4LCAiJXM6ICIsIGRlc2MpOworCisJCWNoYW5uZWwtPm1hbmFnZXItPmdldF9zdGF0cyhjaGFubmVsLCAmZGVsdGEpOworCQlpZiAoZGVsdGEpIHsKKwkJCWJ5dGVzX3JlYWQgPSBkZWx0YS0+Ynl0ZXNfcmVhZCAtIHRyYWNrLT5ieXRlc19yZWFkOworCQkJYnl0ZXNfd3JpdHRlbiA9IGRlbHRhLT5ieXRlc193cml0dGVuIC0KKwkJCQl0cmFjay0+Ynl0ZXNfd3JpdHRlbjsKKwkJfQorCQlsb2dfb3V0KGN0eCwgIkkvTyByZWFkOiAlbGx1TUIsIHdyaXRlOiAlbGx1TUIsICIKKwkJCSJyYXRlOiAlLjJmTUIvc1xuIiwKKwkJCW1ieXRlcyhieXRlc19yZWFkKSwgbWJ5dGVzKGJ5dGVzX3dyaXR0ZW4pLAorCQkJKGRvdWJsZSltYnl0ZXMoYnl0ZXNfcmVhZCArIGJ5dGVzX3dyaXR0ZW4pIC8KKwkJCXRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpKTsKKwl9Cit9CisjZW5kaWYgLyogUkVTT1VSQ0VfVFJBQ0sgKi8KKwordm9pZCBlMmZzY2tfcmVhZF9pbm9kZShlMmZzY2tfdCBjdHgsIHVuc2lnbmVkIGxvbmcgaW5vLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqcHJvYykKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoY3R4LT5mcywgaW5vLCBpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9pbm9kZSIsIHJldHZhbCwKKwkJCV8oIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIiksIGlubywgcHJvYyk7CisJCWZhdGFsX2Vycm9yKGN0eCwgMCk7CisJfQorfQorCit2b2lkIGUyZnNja19yZWFkX2lub2RlX2Z1bGwoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGludCBidWZzaXplLAorCQkJICAgIGNvbnN0IGNoYXIgKnByb2MpCit7CisJZXJyY29kZV90IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoY3R4LT5mcywgaW5vLCBpbm9kZSwgYnVmc2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9pbm9kZV9mdWxsIiwgcmV0dmFsLAorCQkJXygid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiKSwgaW5vLCBwcm9jKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9Cit9CisKK3ZvaWQgZTJmc2NrX3dyaXRlX2lub2RlX2Z1bGwoZTJmc2NrX3QgY3R4LCB1bnNpZ25lZCBsb25nIGlubywKKwkJCSAgICAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgaW50IGJ1ZnNpemUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByb2MpCit7CisJZXJyY29kZV90IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKGN0eC0+ZnMsIGlubywgaW5vZGUsIGJ1ZnNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX3dyaXRlX2lub2RlIiwgcmV0dmFsLAorCQkJXygid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiKSwgaW5vLCBwcm9jKTsKKwkJZmF0YWxfZXJyb3IoY3R4LCAwKTsKKwl9Cit9CisKK3ZvaWQgZTJmc2NrX3dyaXRlX2lub2RlKGUyZnNja190IGN0eCwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpwcm9jKQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3R4LT5mcywgaW5vLCBpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfd3JpdGVfaW5vZGUiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIpLCBpbm8sIHByb2MpOworCQlmYXRhbF9lcnJvcihjdHgsIDApOworCX0KK30KKworI2lmZGVmIE1UUkFDRQordm9pZCBtdHJhY2VfcHJpbnQoY2hhciAqbWVzZykKK3sKKwlGSUxFCSptYWxsb2NfZ2V0X21hbGxzdHJlYW0oKTsKKwlGSUxFCSpmID0gbWFsbG9jX2dldF9tYWxsc3RyZWFtKCk7CisKKwlpZiAoZikKKwkJZnByaW50ZihmLCAiPT09PT09PT09PT09PSAlc1xuIiwgbWVzZyk7Cit9CisjZW5kaWYKKworYmxrNjRfdCBnZXRfYmFja3VwX3NiKGUyZnNja190IGN0eCwgZXh0Ml9maWxzeXMgZnMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGlvX21hbmFnZXIgbWFuYWdlcikKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJaW9fY2hhbm5lbAkJaW8gPSBOVUxMOworCXZvaWQJCQkqYnVmID0gTlVMTDsKKwlpbnQJCQlibG9ja3NpemU7CisJYmxrNjRfdAkJCXN1cGVyYmxvY2ssIHJldF9zYiA9IDgxOTM7CisKKwlpZiAoZnMgJiYgZnMtPnN1cGVyKSB7CisJCXJldF9zYiA9IChmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCArCisJCQkgIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkJaWYgKGN0eCkgeworCQkJY3R4LT5zdXBlcmJsb2NrID0gcmV0X3NiOworCQkJY3R4LT5ibG9ja3NpemUgPSBmcy0+YmxvY2tzaXplOworCQl9CisJCXJldHVybiByZXRfc2I7CisJfQorCisJaWYgKGN0eCkgeworCQlpZiAoY3R4LT5ibG9ja3NpemUpIHsKKwkJCXJldF9zYiA9IGN0eC0+YmxvY2tzaXplICogODsKKwkJCWlmIChjdHgtPmJsb2Nrc2l6ZSA9PSAxMDI0KQorCQkJCXJldF9zYisrOworCQkJY3R4LT5zdXBlcmJsb2NrID0gcmV0X3NiOworCQkJcmV0dXJuIHJldF9zYjsKKwkJfQorCQljdHgtPnN1cGVyYmxvY2sgPSByZXRfc2I7CisJCWN0eC0+YmxvY2tzaXplID0gMTAyNDsKKwl9CisKKwlpZiAoIW5hbWUgfHwgIW1hbmFnZXIpCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChtYW5hZ2VyLT5vcGVuKG5hbWUsIDAsICZpbykgIT0gMCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKGV4dDJmc19nZXRfbWVtKFNVUEVSQkxPQ0tfU0laRSwgJmJ1ZikpCisJCWdvdG8gY2xlYW51cDsKKwlzYiA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSBidWY7CisKKwlmb3IgKGJsb2Nrc2l6ZSA9IEVYVDJfTUlOX0JMT0NLX1NJWkU7CisJICAgICBibG9ja3NpemUgPD0gRVhUMl9NQVhfQkxPQ0tfU0laRSA7IGJsb2Nrc2l6ZSAqPSAyKSB7CisJCXN1cGVyYmxvY2sgPSBibG9ja3NpemUqODsKKwkJaWYgKGJsb2Nrc2l6ZSA9PSAxMDI0KQorCQkJc3VwZXJibG9jaysrOworCQlpb19jaGFubmVsX3NldF9ibGtzaXplKGlvLCBibG9ja3NpemUpOworCQlpZiAoaW9fY2hhbm5lbF9yZWFkX2JsazY0KGlvLCBzdXBlcmJsb2NrLAorCQkJCQktU1VQRVJCTE9DS19TSVpFLCBidWYpKQorCQkJY29udGludWU7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCWlmIChzYi0+c19tYWdpYyA9PSBleHQyZnNfc3dhYjE2KEVYVDJfU1VQRVJfTUFHSUMpKQorCQkJZXh0MmZzX3N3YXBfc3VwZXIoc2IpOworI2VuZGlmCisJCWlmICgoc2ItPnNfbWFnaWMgPT0gRVhUMl9TVVBFUl9NQUdJQykgJiYKKwkJICAgIChFWFQyX0JMT0NLX1NJWkUoc2IpID09IGJsb2Nrc2l6ZSkpIHsKKwkJCXJldF9zYiA9IHN1cGVyYmxvY2s7CisJCQlpZiAoY3R4KSB7CisJCQkJY3R4LT5zdXBlcmJsb2NrID0gc3VwZXJibG9jazsKKwkJCQljdHgtPmJsb2Nrc2l6ZSA9IGJsb2Nrc2l6ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCitjbGVhbnVwOgorCWlmIChpbykKKwkJaW9fY2hhbm5lbF9jbG9zZShpbyk7CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiAocmV0X3NiKTsKK30KKworLyoKKyAqIEdpdmVuIGEgbW9kZSwgcmV0dXJuIHRoZSBleHQyIGZpbGUgdHlwZQorICovCitpbnQgZXh0Ml9maWxlX3R5cGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKExJTlVYX1NfSVNSRUcobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1JFR19GSUxFOworCisJaWYgKExJTlVYX1NfSVNESVIobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0RJUjsKKworCWlmIChMSU5VWF9TX0lTQ0hSKG1vZGUpKQorCQlyZXR1cm4gRVhUMl9GVF9DSFJERVY7CisKKwlpZiAoTElOVVhfU19JU0JMSyhtb2RlKSkKKwkJcmV0dXJuIEVYVDJfRlRfQkxLREVWOworCisJaWYgKExJTlVYX1NfSVNMTksobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NZTUxJTks7CisKKwlpZiAoTElOVVhfU19JU0ZJRk8obW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX0ZJRk87CisKKwlpZiAoTElOVVhfU19JU1NPQ0sobW9kZSkpCisJCXJldHVybiBFWFQyX0ZUX1NPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggemVyb3Mgb3V0IF9udW1fIGJsb2NrcyBzdGFydGluZyBhdCBfYmxrXy4gIEluCisgKiBjYXNlIG9mIGFuIGVycm9yLCB0aGUgZGV0YWlscyBvZiB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgdmlhIF9yZXRfYmxrXworICogYW5kIF9yZXRfY291bnRfIGlmIHRoZXkgYXJlIG5vbi1OVUxMIHBvaW50ZXJzLiAgUmV0dXJucyAwIG9uCisgKiBzdWNjZXNzLCBhbmQgYW4gZXJyb3IgY29kZSBvbiBhbiBlcnJvci4KKyAqCisgKiBBcyBhIHNwZWNpYWwgY2FzZSwgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIE5VTEwsIHRoZW4gaXQgd2lsbAorICogYXR0ZW1wdCB0byBmcmVlIHRoZSBzdGF0aWMgemVyb2l6aW5nIGJ1ZmZlci4gIChUaGlzIGlzIHRvIGtlZXAKKyAqIHByb2dyYW1zIHRoYXQgY2hlY2sgZm9yIG1lbW9yeSBsZWFrcyBoYXBweS4pCisgKi8KK2VycmNvZGVfdCBlMmZzY2tfemVyb19ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgaW50IG51bSwKKwkJCSAgICAgYmxrX3QgKnJldF9ibGssIGludCAqcmV0X2NvdW50KQoreworCWludAkJaiwgY291bnQ7CisJc3RhdGljIGNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJLyogSWYgZnMgaXMgbnVsbCwgY2xlYW4gdXAgdGhlIHN0YXRpYyBidWZmZXIgYW5kIHJldHVybiAqLworCWlmICghZnMpIHsKKwkJaWYgKGJ1ZikgeworCQkJZnJlZShidWYpOworCQkJYnVmID0gMDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJLyogQWxsb2NhdGUgdGhlIHplcm9pemluZyBidWZmZXIgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCFidWYpIHsKKwkJYnVmID0gbWFsbG9jKGZzLT5ibG9ja3NpemUgKiBTVFJJREVfTEVOR1RIKTsKKwkJaWYgKCFidWYpIHsKKwkJCWNvbV9lcnIoIm1hbGxvYyIsIEVOT01FTSwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiKSk7CisJCQlleGl0KDEpOworCQl9CisJCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUgKiBTVFJJREVfTEVOR1RIKTsKKwl9CisJLyogT0ssIGRvIHRoZSB3cml0ZSBsb29wICovCisJZm9yIChqID0gMDsgaiA8IG51bTsgaiArPSBTVFJJREVfTEVOR1RILCBibGsgKz0gU1RSSURFX0xFTkdUSCkgeworCQljb3VudCA9IG51bSAtIGo7CisJCWlmIChjb3VudCA+IFNUUklERV9MRU5HVEgpCisJCQljb3VudCA9IFNUUklERV9MRU5HVEg7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIGNvdW50LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlpZiAocmV0X2NvdW50KQorCQkJCSpyZXRfY291bnQgPSBjb3VudDsKKwkJCWlmIChyZXRfYmxrKQorCQkJCSpyZXRfYmxrID0gYmxrOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0gaXMgaW4gL3Byb2MvZmlsZXN5c3RlbXMuCisgKiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90CisgKi8KK2ludCBmc19wcm9jX2NoZWNrKGNvbnN0IGNoYXIgKmZzX25hbWUpCit7CisJRklMRQkqZjsKKwljaGFyCWJ1Zls4MF0sICpjcCwgKnQ7CisKKwlmID0gZm9wZW4oIi9wcm9jL2ZpbGVzeXN0ZW1zIiwgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAoMCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpCisJCQlicmVhazsKKwkJY3AgPSBidWY7CisJCWlmICghaXNzcGFjZSgqY3ApKSB7CisJCQl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisJCQkJY3ArKzsKKwkJfQorCQl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJCWNwKys7CisJCWlmICgodCA9IHN0cmNocihjcCwgJ1xuJykpICE9IE5VTEwpCisJCQkqdCA9IDA7CisJCWlmICgodCA9IHN0cmNocihjcCwgJ1x0JykpICE9IE5VTEwpCisJCQkqdCA9IDA7CisJCWlmICgodCA9IHN0cmNocihjcCwgJyAnKSkgIT0gTlVMTCkKKwkJCSp0ID0gMDsKKwkJaWYgKCFzdHJjbXAoZnNfbmFtZSwgY3ApKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCWZjbG9zZShmKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSBpcyBhdmFpbGFibGUgYXMgYSBtb2R1bGUKKyAqIFJldHVybnMgMSBpZiBmb3VuZCwgMCBpZiBub3QKKyAqLworaW50IGNoZWNrX2Zvcl9tb2R1bGVzKGNvbnN0IGNoYXIgKmZzX25hbWUpCit7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IHV0c25hbWUJdXRzOworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsxMDI0XSwgKmNwLCAqdDsKKwlpbnQJCWk7CisKKwlpZiAodW5hbWUoJnV0cykpCisJCXJldHVybiAoMCk7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIi9saWIvbW9kdWxlcy8lcy9tb2R1bGVzLmRlcCIsIHV0cy5yZWxlYXNlKTsKKworCWYgPSBmb3BlbihidWYsICJyIik7CisJaWYgKCFmKQorCQlyZXR1cm4gKDApOworCXdoaWxlICghZmVvZihmKSkgeworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQkJYnJlYWs7CisJCWlmICgoY3AgPSBzdHJjaHIoYnVmLCAnOicpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJZWxzZQorCQkJY29udGludWU7CisJCWlmICgoY3AgPSBzdHJyY2hyKGJ1ZiwgJy8nKSkgIT0gTlVMTCkKKwkJCWNwKys7CisJCWVsc2UKKwkJCWNwID0gYnVmOworCQlpID0gc3RybGVuKGNwKTsKKwkJaWYgKGkgPiAzKSB7CisJCQl0ID0gY3AgKyBpIC0gMzsKKwkJCWlmICghc3RyY21wKHQsICIua28iKSkKKwkJCQkqdCA9IDA7CisJCX0KKwkJaWYgKCFzdHJjbXAoY3AsIGZzX25hbWUpKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCWZjbG9zZShmKTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKwlyZXR1cm4gKDApOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaWYgd3JpdGUgcmV0dXJucyBhCisgKiBwYXJ0aWFsIHdyaXRlLCBvciBhbiBFR0FJTi9FSU5UUiBlcnJvci4KKyAqLworaW50IHdyaXRlX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3QgcmV0OworCWludCBjID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY291bnQgLT0gcmV0OworCQlidWYgKz0gcmV0OworCQljICs9IHJldDsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3ZvaWQgZHVtcF9tbXBfbXNnKHN0cnVjdCBtbXBfc3RydWN0ICptbXAsIGNvbnN0IGNoYXIgKm1zZykKK3sKKworCWlmIChtc2cpCisJCXByaW50ZigiTU1QIGNoZWNrIGZhaWxlZDogJXNcbiIsIG1zZyk7CisJaWYgKG1tcCkgeworCQl0aW1lX3QgdCA9IG1tcC0+bW1wX3RpbWU7CisKKwkJcHJpbnRmKCJNTVAgZXJyb3IgaW5mbzogbGFzdCB1cGRhdGU6ICVzIG5vZGU6ICVzIGRldmljZTogJXNcbiIsCisJCSAgICAgICBjdGltZSgmdCksIG1tcC0+bW1wX25vZGVuYW1lLCBtbXAtPm1tcF9iZGV2bmFtZSk7CisJfQorfQorCitlcnJjb2RlX3QgZTJmc2NrX21tcF91cGRhdGUoZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19tbXBfdXBkYXRlKGZzKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfTU1QX0NIQU5HRV9BQk9SVCkKKwkJZHVtcF9tbXBfbXNnKGZzLT5tbXBfY21wLAorCQkJICAgICBfKCJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzICIKKwkJCSAgICAgICAiYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyBydW5uaW5nLlxuIikpOworCisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCBlMmZzY2tfc2V0X2JpdG1hcF90eXBlKGV4dDJfZmlsc3lzIGZzLCB1bnNpZ25lZCBpbnQgZGVmYXVsdF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVfbmFtZSwgdW5zaWduZWQgaW50ICpvbGRfdHlwZSkKK3sKKwl1bnNpZ25lZCB0eXBlOworCisJaWYgKG9sZF90eXBlKQorCQkqb2xkX3R5cGUgPSBmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZTsKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisJcHJvZmlsZV9nZXRfdWludChlMmZzY2tfZ2xvYmFsX2N0eC0+cHJvZmlsZSwgImJpdG1hcHMiLAorCQkJIHByb2ZpbGVfbmFtZSwgMCwgZGVmYXVsdF90eXBlLCAmdHlwZSk7CisJcHJvZmlsZV9nZXRfdWludChlMmZzY2tfZ2xvYmFsX2N0eC0+cHJvZmlsZSwgImJpdG1hcHMiLAorCQkJICJhbGwiLCAwLCB0eXBlLCAmdHlwZSk7CisJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSB0eXBlID8gdHlwZSA6IGRlZmF1bHRfdHlwZTsKKyNlbHNlCisJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBkZWZhdWx0X3R5cGU7CisjZW5kaWYKK30KKworZXJyY29kZV90IGUyZnNja19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCSAgICAgICBpbnQgZGVmdHlwZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCAqcmV0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJdW5zaWduZWQgaW50CXNhdmVfdHlwZTsKKworCWUyZnNja19zZXRfYml0bWFwX3R5cGUoZnMsIGRlZnR5cGUsIG5hbWUsICZzYXZlX3R5cGUpOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsIGRlc2NyLCByZXQpOworCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gc2F2ZV90eXBlOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBlMmZzY2tfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkgICAgICAgaW50IGRlZnR5cGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGludAlzYXZlX3R5cGU7CisKKwllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBkZWZ0eXBlLCBuYW1lLCAmc2F2ZV90eXBlKTsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCBkZXNjciwgcmV0KTsKKwlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHNhdmVfdHlwZTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZTJmc2NrX2FsbG9jYXRlX3N1YmNsdXN0ZXJfYml0bWFwKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkJICAgIGludCBkZWZ0eXBlLAorCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGludAlzYXZlX3R5cGU7CisKKwllMmZzY2tfc2V0X2JpdG1hcF90eXBlKGZzLCBkZWZ0eXBlLCBuYW1lLCAmc2F2ZV90eXBlKTsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXAoZnMsIGRlc2NyLCByZXQpOworCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gc2F2ZV90eXBlOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc3Byb2dzLmxzbSBiL2UyZnNwcm9ncy9lMmZzcHJvZ3MubHNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODBmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZTJmc3Byb2dzLmxzbQpAQCAtMCwwICsxLDE3IEBACitCZWdpbjMKK1RpdGxlOiAgICAgICAgICBFWFQyIEZpbGVzeXN0ZW0gdXRpbGl0aWVzCitWZXJzaW9uOiAgICAgICAgMS40Mi45CitFbnRlcmVkLWRhdGU6ICAgMjhEZWMyMDEzCitEZXNjcmlwdGlvbjogICAgVGhlIGZpbGVzeXN0ZW0gdXRpbGl0aWVzIGZvciB0aGUgRVhUMiwgRVhUMywgYW5kIEVYVDQKKwkJZmlsZXN5c3RlbXMsIGluY2x1ZGluZyBlMmZzY2ssIG1rZTJmcywgZHVtcGUyZnMsIGFuZCBvdGhlcnMuCitLZXl3b3JkczogICAgICAgdXRpbGl0aWVzLCBmaWxlc3lzdGVtLCBFeHQyZnMsIGV4dDMsIGV4dDQKK0F1dGhvcjogICAgICAgICB0eXRzb0BtaXQuZWR1IChUaGVvZG9yZSBUc28pCitNYWludGFpbmVkLWJ5OiAgdHl0c29AbWl0LmVkdSAoVGhlb2RvcmUgVHNvKQorUHJpbWFyeS1zaXRlOiAgIGRvd25sb2FkLnNvdXJjZWZvcmdlLm5ldCAvcHViL3NvdXJjZWZvcmdlL2UyZnNwcm9ncworICAgICAgICAgICAgICAgIDU5MjhrQiBlMmZzcHJvZ3MtMS40Mi45LnRhci5negorICAgICAgICAgICAgICAgIDU2NGtCICBlMmZzcHJvZ3MtbGlicy0xLjQyLjkudGFyLmd6CisgICAgICAgICAgICAgICAgMWtCICAgIGUyZnNwcm9ncy0xLjQyLjkubHNtCitBbHRlcm5hdGUtc2l0ZTogCitQbGF0Zm9ybXM6CWxpbnV4IDEuMi54LzEuMy54LzIuMC54LzIuMS54LzIuMi54LzIuMy54LzIuNC54LzIuNS54LzIuNi54LzMueAorQ29weWluZy1wb2xpY3k6IEdQTC0yL0xHUEwtMgorRW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZTJmc3Byb2dzLnNwZWMuaW4gYi9lMmZzcHJvZ3MvZTJmc3Byb2dzLnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4OGI3NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9lMmZzcHJvZ3Muc3BlYy5pbgpAQCAtMCwwICsxLDI0MiBAQAorJWRlZmluZQlfcm9vdF9zYmluZGlyCS9zYmluCislZGVmaW5lCV9yb290X2xpYmRpcgkvJXtfbGlifQorJWRlZmluZQlfcm9vdF9sb2NhbGVkaXIJL3Vzci9zaGFyZS9sb2NhbGUKKyVkZWZpbmUJX3Jvb3RfZXRjZGlyCS9ldGMKKworU3VtbWFyeTogVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtcworTmFtZTogZTJmc3Byb2dzCitWZXJzaW9uOiBARTJGU1BST0dTX1BLR1ZFUkAKK1JlbGVhc2U6IDAKK0xpY2Vuc2U6IEdQTHYyCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0Jhc2UKK1NvdXJjZTogIGZ0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9wdWIvc291cmNlZm9yZ2UvZTJmc3Byb2dzL2UyZnNwcm9ncy0le3ZlcnNpb259LnRhci5negorVXJsOiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK1ByZXJlcTogL3NiaW4vbGRjb25maWcKK0J1aWxkUm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS1yb290CisKKyVkZXNjcmlwdGlvbgorVGhlIGUyZnNwcm9ncyBwYWNrYWdlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsCitjaGVja2luZywgbW9kaWZ5aW5nLCBhbmQgY29ycmVjdGluZyBhbnkgaW5jb25zaXN0ZW5jaWVzIGluIGV4dDIsIGV4dDMsCithbmQgZXh0NCBmaWxlc3lzdGVtcy4gIEUyZnNwcm9ncyBjb250YWlucyBlMmZzY2sgKHVzZWQgdG8gcmVwYWlyCitmaWxlc3lzdGVtIGluY29uc2lzdGVuY2llcyBhZnRlciBhbiB1bmNsZWFuIHNodXRkb3duKSwgbWtlMmZzICh1c2VkIHRvCitpbml0aWFsaXplIGEgcGFydGl0aW9uIHRvIGNvbnRhaW4gYW4gZW1wdHkgZXh0MiBmaWxlc3lzdGVtKSwgZGVidWdmcworKHVzZWQgdG8gZXhhbWluZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIGEgZmlsZXN5c3RlbSwgdG8gbWFudWFsbHkKK3JlcGFpciBhIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIG9yIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZvciBlMmZzY2spLAordHVuZTJmcyAodXNlZCB0byBtb2RpZnkgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzKSwgcmVzaXplMmZzIHRvIGdyb3cgYW5kCitzaHJpbmsgdW5tb3VudGVkIGV4dDIgZmlsZXN5c3RlbXMsIGFuZCBtb3N0IG9mIHRoZSBvdGhlciBjb3JlIGV4dDJmcworZmlsZXN5c3RlbSB1dGlsaXRpZXMuCisKK1lvdSBzaG91bGQgaW5zdGFsbCB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgaWYgeW91IGFyZSB1c2luZyBhbnkgZXh0MiwKK2V4dDMsIG9yIGV4dDQgZmlsZXN5c3RlbXMgKGlmIHlvdSdyZSBub3Qgc3VyZSwgeW91IHByb2JhYmx5IHNob3VsZAoraW5zdGFsbCB0aGlzIHBhY2thZ2UpLiAgWW91IG1heSBhbHNvIG5lZWQgdG8gaW5zdGFsbCBpdCAoZXZlbiBpZiB5b3UKK2Rvbid0IHVzZSBleHQyL2V4dDMvZXh0NCkgZm9yIHRoZSBsaWJ1dWlkIGFuZCBsaWJibGtpZCBsaWJyYXJpZXMgYW5kCitmc2NrIHRvb2wgdGhhdCBhcmUgaW5jbHVkZWQgaGVyZS4KKworJXBhY2thZ2UgZGV2ZWwKK1N1bW1hcnk6IEV4dDIgZmlsZXN5c3RlbS1zcGVjaWZpYyBzdGF0aWMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorR3JvdXA6IERldmVsb3BtZW50L0xpYnJhcmllcworUmVxdWlyZXM6IGUyZnNwcm9ncyA9ICV7dmVyc2lvbn0KK1ByZXJlcTogL3NiaW4vaW5zdGFsbC1pbmZvCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorRTJmc3Byb2dzLWRldmVsIGNvbnRhaW5zIHRoZSBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcyBuZWVkZWQgdG8KK2RldmVsb3AgZXh0MiwgZXh0Mywgb3IgZXh0NCBmaWxlc3lzdGVtLXNwZWNpZmljIHByb2dyYW1zLgorCitZb3Ugc2hvdWxkIGluc3RhbGwgZTJmc3Byb2dzLWRldmVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AKK2V4dDIuIGV4dDMuIG9yIGV4dDQgZmlsZXN5c3RlbS1zcGVjaWZpYyBwcm9ncmFtcy4gIElmIHlvdSBpbnN0YWxsCitlMmZzcHJvZ3MtZGV2ZWwsIHlvdSdsbCBhbHNvIHdhbnQgdG8gaW5zdGFsbCBlMmZzcHJvZ3MuCisKKyVwYWNrYWdlIC1uIHV1aWRkCitTdW1tYXJ5OiBoZWxwZXIgZGFlbW9uIHRvIGd1YXJhbnRlZSB1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRHMKK0dyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucworTGljZW5zZTogR1BMdjIKK1JlcXVpcmVzOiBlMmZzcHJvZ3MgPSAle3ZlcnNpb259CitSZXF1aXJlcyhwcmUpOiBzaGFkb3ctdXRpbHMKKworJWRlc2NyaXB0aW9uIC1uIHV1aWRkCitUaGUgdXVpZGQgcGFja2FnZSBjb250YWlucyBhIHVzZXJzcGFjZSBkYWVtb24gKHV1aWRkKSB3aGljaCBndWFyYW50ZWVzCit1bmlxdWVuZXNzIG9mIHRpbWUtYmFzZWQgVVVJRCBnZW5lcmF0aW9uIGV2ZW4gYXQgdmVyeSBoaWdoIHJhdGVzIG9uCitTTVAgc3lzdGVtcy4KKworJXByZXAKKyVzZXR1cAorCislYnVpbGQKKyVjb25maWd1cmUgLS1lbmFibGUtZWxmLXNobGlicyAtLWVuYWJsZS1ubHMgXAorCSV7P2V4dHJhX2NvbmZpZ19mbGFnczolZXh0cmFfY29uZmlnX2ZsYWdzfQorbWFrZQorbWFrZSBjaGVjaworCislaW5zdGFsbAorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorZXhwb3J0IFBBVEg9L3NiaW46JFBBVEgKK21ha2UgaW5zdGFsbCBpbnN0YWxsLWxpYnMgREVTVERJUj0iJFJQTV9CVUlMRF9ST09UIiBcCisJcm9vdF9zYmluZGlyPSV7X3Jvb3Rfc2JpbmRpcn0gcm9vdF9saWJkaXI9JXtfcm9vdF9saWJkaXJ9Cisvc2Jpbi9sZGNvbmZpZyAtbiAke1JQTV9CVUlMRF9ST09UfSV7X2xpYmRpcn0KKworIyBBZGQgYSBkaXIgdGhhdCB1dWlkZCBuZWVkcyB0aGF0IHRoZSBNYWtlZmlsZXMgZG9uJ3QgY3JlYXRlCitpbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC92YXIvbGliL2xpYnV1aWQKKworJWZpbmRfbGFuZyAle25hbWV9CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZworCislcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCisKKyVwb3N0IGRldmVsCitpZiBbIC14IC9zYmluL2luc3RhbGwtaW5mbyAtYSAtZiAle19pbmZvZGlyfS9saWJleHQyZnMuaW5mby5neiBdOyB0aGVuCisgICAgL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcG9zdHVuIGRldmVsCitpZiBbICQxID0gMCAtYSAteCAvc2Jpbi9pbnN0YWxsLWluZm8gLWEgLWYgJXtfaW5mb2Rpcn0vbGliZXh0MmZzLmluZm8uZ3ogXTsgdGhlbgorICAgL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgorZmkKK2V4aXQgMAorCislcHJlIC1uIHV1aWRkCitnZXRlbnQgZ3JvdXAgdXVpZGQgPi9kZXYvbnVsbCB8fCBncm91cGFkZCAtciB1dWlkZAorZ2V0ZW50IHBhc3N3ZCB1dWlkZCA+L2Rldi9udWxsIHx8IFwKK3VzZXJhZGQgLXIgLWcgdXVpZGQgLWQgL3Zhci9saWIvbGlidXVpZCAtcyAvc2Jpbi9ub2xvZ2luIFwKKyAgICAtYyAiVVVJRCBnZW5lcmF0b3IgaGVscGVyIGRhZW1vbiIgdXVpZGQKK2V4aXQgMAorCislZmlsZXMgLWYgJXtuYW1lfS5sYW5nCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgUkVBRE1FIFJFTEVBU0UtTk9URVMKKworJXtfcm9vdF9zYmluZGlyfS9iYWRibG9ja3MKKyV7X3Jvb3Rfc2JpbmRpcn0vYmxraWQKKyV7X3Jvb3Rfc2JpbmRpcn0vZGVidWdmcworJXtfcm9vdF9zYmluZGlyfS9kdW1wZTJmcworJXtfcm9vdF9zYmluZGlyfS9lMmZzY2sKKyV7X3Jvb3Rfc2JpbmRpcn0vZTJpbWFnZQorJXtfcm9vdF9zYmluZGlyfS9lMmxhYmVsCisle19yb290X3NiaW5kaXJ9L2UydW5kbworJXtfcm9vdF9zYmluZGlyfS9maW5kZnMKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjaworJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vZnNjay5leHQzCisle19yb290X3NiaW5kaXJ9L2ZzY2suZXh0NAorJXtfcm9vdF9zYmluZGlyfS9mc2NrLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vbG9nc2F2ZQorJXtfcm9vdF9zYmluZGlyfS9ta2UyZnMKKyV7X3Jvb3RfZXRjZGlyfS9ta2UyZnMuY29uZgorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDIKKyV7X3Jvb3Rfc2JpbmRpcn0vbWtmcy5leHQzCisle19yb290X3NiaW5kaXJ9L21rZnMuZXh0NAorJXtfcm9vdF9zYmluZGlyfS9ta2ZzLmV4dDRkZXYKKyV7X3Jvb3Rfc2JpbmRpcn0vcmVzaXplMmZzCisle19yb290X3NiaW5kaXJ9L3R1bmUyZnMKKyV7X3NiaW5kaXJ9L2ZpbGVmcmFnCisle19zYmluZGlyfS9ta2xvc3QrZm91bmQKKyV7X3NiaW5kaXJ9L2UyZnJlZWZyYWcKKworJXtfcm9vdF9saWJkaXJ9L2xpYmJsa2lkLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJjb21fZXJyLnNvLioKKyV7X3Jvb3RfbGliZGlyfS9saWJlMnAuc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYmV4dDJmcy5zby4qCisle19yb290X2xpYmRpcn0vbGlic3Muc28uKgorJXtfcm9vdF9saWJkaXJ9L2xpYnV1aWQuc28uKgorCisle19saWJkaXJ9L2UyaW5pdHJkX2hlbHBlcgorCisle19iaW5kaXJ9L2NoYXR0cgorJXtfYmluZGlyfS9sc2F0dHIKKyV7X2JpbmRpcn0vdXVpZGdlbgorJXtfbWFuZGlyfS9tYW4xL2NoYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL2xzYXR0ci4xKgorJXtfbWFuZGlyfS9tYW4xL3V1aWRnZW4uMSoKKworJXtfbWFuZGlyfS9tYW41L2UyZnNjay5jb25mLjUqCisle19tYW5kaXJ9L21hbjUvbWtlMmZzLmNvbmYuNSoKKworJXtfbWFuZGlyfS9tYW44L2JhZGJsb2Nrcy44KgorJXtfbWFuZGlyfS9tYW44L2Jsa2lkLjgqCisle19tYW5kaXJ9L21hbjgvZGVidWdmcy44KgorJXtfbWFuZGlyfS9tYW44L2R1bXBlMmZzLjgqCisle19tYW5kaXJ9L21hbjgvZTJmc2NrLjgqCisle19tYW5kaXJ9L21hbjgvZmluZGZzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQyLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQzLjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0LjgqCisle19tYW5kaXJ9L21hbjgvZnNjay5leHQ0ZGV2LjgqCisle19tYW5kaXJ9L21hbjgvZTJpbWFnZS44KgorJXtfbWFuZGlyfS9tYW44L2UybGFiZWwuOCoKKyV7X21hbmRpcn0vbWFuOC9lMnVuZG8uOCoKKyV7X21hbmRpcn0vbWFuOC9mc2NrLjgqCisle19tYW5kaXJ9L21hbjgvbG9nc2F2ZS44KgorJXtfbWFuZGlyfS9tYW44L21rZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0Mi44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0My44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NC44KgorJXtfbWFuZGlyfS9tYW44L21rZnMuZXh0NGRldi44KgorJXtfbWFuZGlyfS9tYW44L21rbG9zdCtmb3VuZC44KgorJXtfbWFuZGlyfS9tYW44L3Jlc2l6ZTJmcy44KgorJXtfbWFuZGlyfS9tYW44L3R1bmUyZnMuOCoKKyV7X21hbmRpcn0vbWFuOC9maWxlZnJhZy44KgorJXtfbWFuZGlyfS9tYW44L2UyZnJlZWZyYWcuOCoKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2luZm9kaXJ9L2xpYmV4dDJmcy5pbmZvKgorJXtfYmluZGlyfS9jb21waWxlX2V0Cisle19iaW5kaXJ9L21rX2NtZHMKKworJXtfbGliZGlyfS9saWJibGtpZC5hCisle19saWJkaXJ9L2xpYmJsa2lkLnNvCisle19saWJkaXJ9L2xpYmNvbV9lcnIuYQorJXtfbGliZGlyfS9saWJjb21fZXJyLnNvCisle19saWJkaXJ9L2xpYmUycC5hCisle19saWJkaXJ9L2xpYmUycC5zbworJXtfbGliZGlyfS9saWJleHQyZnMuYQorJXtfbGliZGlyfS9saWJleHQyZnMuc28KKyV7X2xpYmRpcn0vbGlic3MuYQorJXtfbGliZGlyfS9saWJzcy5zbworJXtfbGliZGlyfS9saWJ1dWlkLmEKKyV7X2xpYmRpcn0vbGlidXVpZC5zbworCisle19saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworJXtfbGliZGlyfS9wa2djb25maWcvY29tX2Vyci5wYworJXtfbGliZGlyfS9wa2djb25maWcvZTJwLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9leHQyZnMucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL3NzLnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy91dWlkLnBjCisKKyV7X2RhdGFkaXJ9L2V0Cisle19kYXRhZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vYmxraWQKKyV7X2luY2x1ZGVkaXJ9L2UycAorJXtfaW5jbHVkZWRpcn0vZXQKKyV7X2luY2x1ZGVkaXJ9L2NvbV9lcnIuaAorJXtfaW5jbHVkZWRpcn0vZXh0MmZzCisle19pbmNsdWRlZGlyfS9zcworJXtfaW5jbHVkZWRpcn0vdXVpZAorJXtfbWFuZGlyfS9tYW4xL2NvbXBpbGVfZXQuMSoKKyV7X21hbmRpcn0vbWFuMS9ta19jbWRzLjEqCisle19tYW5kaXJ9L21hbjMvY29tX2Vyci4zKgorJXtfbWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZC4zKgorJXtfbWFuZGlyfS9tYW4zL3V1aWRfY2xlYXIuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvbXBhcmUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2NvcHkuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF9nZW5lcmF0ZV9yYW5kb20uMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2dlbmVyYXRlX3RpbWUuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX2lzX251bGwuMyoKKyV7X21hbmRpcn0vbWFuMy91dWlkX3BhcnNlLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF90aW1lLjMqCisle19tYW5kaXJ9L21hbjMvdXVpZF91bnBhcnNlLjMqCisKKyVmaWxlcyAtbiB1dWlkZAorJWRlZmF0dHIoLSxyb290LHJvb3QpCisjIGlmIHlvdSB3YW50IHRvIHJ1biB2aWEgaW5pdAorIyAvZXRjL2luaXQuZC91dWlkZAorJXtfbWFuZGlyfS9tYW44L3V1aWRkLjgqCislYXR0cig2NzU1LCB1dWlkZCwgdXVpZGQpICV7X3NiaW5kaXJ9L3V1aWRkCislZGlyICVhdHRyKDI3NzUsIHV1aWRkLCB1dWlkZCkgL3Zhci9saWIvbGlidXVpZAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL0NPUFlSSUdIVCBiL2UyZnNwcm9ncy9leHQyZWQvQ09QWVJJR0hUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODVlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL0NPUFlSSUdIVApAQCAtMCwwICsxLDM0NiBAQAorRVhUMkVEIGlzIGhlcmVieSBwbGFjZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvbGxvd3MgdGhlIEdOVSBsaWNlbnNlLgorCitHYWRpIE94bWFuLCBBdWd1c3QgMTk5NQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9leHQyZWQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwZjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NSBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gZXh0MmVkCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitQUk9HUz0JCWV4dDJlZAorTUFOUEFHRVM9CWV4dDJlZC44CisKK0RPQ19ESVIJCT0JJGRhdGFkaXIvZG9jL2V4dDJlZAorCitMSUJTCQk9CS1sbmN1cnNlcyAkKExJQkVYVDJGUykKKworU1JDUz0JJChzcmNkaXIpL21haW4uYyAkKHNyY2RpcikvaW5pdC5jICQoc3JjZGlyKS9nZW5lcmFsX2NvbS5jICAgICAgIFwKKwkkKHNyY2RpcikvaW5vZGVfY29tLmMgJChzcmNkaXIpL2Rpcl9jb20uYyAkKHNyY2Rpcikvc3VwZXJfY29tLmMgXAorCSQoc3JjZGlyKS9kaXNrLmMgJChzcmNkaXIpL3dpbi5jICQoc3JjZGlyKS9ncm91cF9jb20uYyAgICAgICAgICBcCisJJChzcmNkaXIpL2ZpbGVfY29tLmMgJChzcmNkaXIpL2Jsb2NrYml0bWFwX2NvbS5jICAgICAgICAgICAgICAgIFwKKwkkKHNyY2RpcikvZXh0Ml9jb20uYyAkKHNyY2RpcikvaW5vZGViaXRtYXBfY29tLmMKKworT0JKUz0JbWFpbi5vIGluaXQubyBnZW5lcmFsX2NvbS5vIGlub2RlX2NvbS5vIGRpcl9jb20ubyBzdXBlcl9jb20ubyAgICBcCisJZGlzay5vIHdpbi5vIGdyb3VwX2NvbS5vIGZpbGVfY29tLm8gYmxvY2tiaXRtYXBfY29tLm8gZXh0Ml9jb20ubyBcCisJaW5vZGViaXRtYXBfY29tLm8KKworRE9DUz0gICBkb2MvZXh0MmVkLWRlc2lnbi5wZGYgZG9jL3VzZXItZ3VpZGUucGRmIGRvYy9leHQyZnMtb3ZlcnZpZXcucGRmIFwKKwlkb2MvZXh0MmVkLWRlc2lnbi5odG1sIGRvYy91c2VyLWd1aWRlLmh0bWwgZG9jL2V4dDJmcy1vdmVydmlldy5odG1sCisKKy5jLm86CisJJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkPCAtbyAkQAorCSQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CisKKy5TVUZGSVhFUzogLnNnbWwgLnBzIC5wZGYgLmh0bWwKKworLnNnbWwucHM6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIHBzICQ8IAorCS1tdiBgZWNobyAkPCB8IHNlZCAtZSAncy8uc2dtbCQkLy5wcy8nYCAkQAorCisuc2dtbC5wZGY6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIHBkZiAkPCAKKwktbXYgYGVjaG8gJDwgfCBzZWQgLWUgJ3MvLnNnbWwkJC8ucGRmLydgICRACisKKy5zZ21sLmh0bWw6CisJbWtkaXIgLXAgZG9jCisJc2dtbHRvb2xzIC1iIG9uZWh0bWwgJDwgCisJLW12IGBlY2hvICQ8IHwgc2VkIC1lICdzLy5zZ21sJCQvLmh0bWwvJ2AgJEAKKworYWxsOjogJChQUk9HUykgJChNQU5QQUdFUykgZXh0MmVkLmNvbmYgCisKK2RvY3M6ICQoRE9DUykKKworZXh0MmVkOiAkKE9CSlMpCisJJChDQykgJChBTExfTERGTEFHUykgLW8gZXh0MmVkICQoT0JKUykgJChMSUJTKQorCitleHQyZWQuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2V4dDJlZC44LmluCisJJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2V4dDJlZC44LmluIGV4dDJlZC44CisKK2V4dDJlZC5jb25mOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZXh0MmVkLmNvbmYuaW4KKwkkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZXh0MmVkLmNvbmYuaW4gZXh0MmVkLmNvbmYKKworY2xlYW46CisJJChSTSkgLWYgZXh0MmVkICQoT0JKUykgJChET0NTKSBleHQyZWQuY29uZiBleHQyZWQuOAorCS1ybWRpciBkb2MKKworaW5zdGFsbDogZXh0MmVkCisJaW5zdGFsbCAtZCAkKHJvb3Rfc3lzY29uZmRpcikKKwlpbnN0YWxsIC1tIDc1NSBleHQyZWQgJChzYmluZGlyKQorCWluc3RhbGwgLW0gNjQ0ICQoc3JjZGlyKS9leHQyLmRlc2NyaXB0b3JzICQoZGF0YWRpcikKKwlpbnN0YWxsIC1tIDY0NCBleHQyZWQuY29uZiAkKHJvb3Rfc3lzY29uZmRpcikKKwlpbnN0YWxsIC1tIDY0NCBleHQyZWQuOCAkKG1hbjhkaXIpCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworbWFpbi5vOiAkKHNyY2RpcikvbWFpbi5jICQoc3JjZGlyKS9leHQyZWQuaAorZ2VuZXJhbF9jb20ubzogJChzcmNkaXIpL2dlbmVyYWxfY29tLmMgJChzcmNkaXIpL2V4dDJlZC5oCitpbm9kZV9jb20ubzogJChzcmNkaXIpL2lub2RlX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAorZGlyX2NvbS5vOiAkKHNyY2RpcikvZGlyX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAorc3VwZXJfY29tLm86ICQoc3JjZGlyKS9zdXBlcl9jb20uYyAkKHNyY2RpcikvZXh0MmVkLmgKK2Rpc2subzogJChzcmNkaXIpL2Rpc2suYyAkKHNyY2RpcikvZXh0MmVkLmgKK3dpbi5vOiAkKHNyY2Rpcikvd2luLmMgJChzcmNkaXIpL2V4dDJlZC5oCitncm91cF9jb20ubzogJChzcmNkaXIpL2dyb3VwX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAorZmlsZV9jb20ubzogJChzcmNkaXIpL2ZpbGVfY29tLmMgJChzcmNkaXIpL2V4dDJlZC5oCitibG9ja2JpdG1hcF9jb20ubzogJChzcmNkaXIpL2Jsb2NrYml0bWFwX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaAorZXh0Ml9jb20ubzogJChzcmNkaXIpL2V4dDJfY29tLmMgJChzcmNkaXIpL2V4dDJlZC5oCitpbm9kZWJpdG1hcF9jb20ubzogJChzcmNkaXIpL2lub2RlYml0bWFwX2NvbS5jICQoc3JjZGlyKS9leHQyZWQuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9SRUFETUUgYi9lMmZzcHJvZ3MvZXh0MmVkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE0Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9SRUFETUUKQEAgLTAsMCArMSwxNjAgQEAKK2V4dDJlZCAtIFRoZSBleHRlbmRlZC0yIGZpbGVzeXN0ZW0gZWRpdG9yLCB2ZXJzaW9uIGUyZnNwcm9ncworCisKK1RoaXMgdmVyc2lvbiBvZiBleHQyZWQgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIHVwZGF0ZWQgYnkgVGhlb2RvcmUgVHMnbworZm9yIGluY2x1c2lvbiB3aXRoIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4gIEl0IG5vdyBidWlsZHMgd2l0aCBtb2Rlcm4KK25jdXJzZXMgYW5kIEkndmUgZml4ZWQgdmFyaW91cyBzbWFsbCBidWdzLCBwYXJ0aWN1bGFyIGluIHRoZSByZWRyYXdpbmcKK2FuZCByZXNpemluZyBmdW5jdGlvbnMuCisKK0l0IGlzIGN1cnJlbnRseSBub3QgYnVpbHQgYnkgZGVmYXVsdCAtLSB0aGUgdG9wLWxldmVsIGUyZnNwcm9ncworTWFrZWZpbGUgZG9lc24ndCByZWN1cnNlIGludG8gdGhpcyBkaXJlY3RvcnkuICBUaGlzIGlzIGJlY2F1c2UgZXh0MmVkCitoYXMgYSBudW1iZXIgb2YgVkVSWSBTRVJJT1VTIHNob3J0Y29taW5nczoKKworMSkgIEl0IGRvZXNuJ3Qgd29yayBvbiBmaWxlc3lzdGVtcyBiaWdnZXIgdGhhbiAyR0IKKworMikgIEl0IGFzc3VtZXMgdGhhdCBhbGwncyB0aGUgd29ybGQgYW4gSW50ZWwsIGFuZCBhc3N1bWVzIHRoYXQKKwlldmVyeXRoaW5nIGlzIGluIEludGVsIChsaXR0bGUtZW5kaWFuKSBieXRlIG9yZGVyLgorCitGaXhpbmcgZWl0aGVyIG9mIHRoZXNlIHByb2JsZW1zIHdvdWxkIGJlIG5vbi10cml2aWFsLCBhbmQgc28gSSBhdCB0aGlzCitwb2ludCBETyBOT1QgUkVDT01NRU5EIHRoYXQgZGlzdHJpYnV0aW9ucyB0cnkgdG8gaW5jbHVkZSB0aGlzIHByb2dyYW0sCitldmVuIGFzIG1vZGlmaWVkIGFuZCB1cGRhdGVkIGluIGUyZnNwcm9ncy4gIFRoaXMgZXNwZWNpYWxseSBnb2VzIGZvcgorRGViaWFuLCB3aGVyZSB0aGUgRGViaWFuIG1haW50YWluZXIgZm9yIGUyZnNwcm9ncyBoYXMgYSBoaXN0b3J5IG9mCittYWtpbmcgYXV0aG9yaXplZCBjaGFuZ2VzIHRvIGUyZnNwcm9ncyB0byBpbmNsdWRlIHByb2dyYW1zIHRoYXQgYXJlbid0CitzdXBwb3J0ZWQsIGFuZCB0aGVuIHN0YXJ0cyBidWdnaW5nIG1lIHdpdGggYnVnIHJlcG9ydHMuICBZRVMgSSBLTk9XLgorVEhJUyBQUk9HUkFNIEhBUyBIT1JSSUJMRSBTSE9SVENPTUlOR1MuICBJVCBJUyBJTkNMVURFRCBIRVJFIE9OTFkKK0JFQ0FVU0UgSVQnUyBBIENPTlZFTklFTlQgV0FZIEZPUiAoRk9SIEUyRlNQUk9HUyBERVZFTE9QRVJTIE9OIElOVEVMCitNQUNISU5FUykgVE8gR0VORVJBVEUgVEVTVCBDQVNFUyBCWSBTRUxFQ1RJVkVMWSBDT1JSVVBUSU5HCitGSUxFU1lTVEVNUy4gIEkgV0lMTCBOT1QgU1VQUE9SVCBUSElTIFBST0dSQU0gRk9SIFVTRSBCWSBHRU5FUkFMIFVTRVJTCitTTyBQTEVBU0UgRE8gTk9UIElOQ0xVREUgSVQgSU4gQSBESVNUUklCVVRJT04uCisKK0kgaGF2ZSBjdXJyZW50bHkgZGlzYWJsZWQgdGhlIHVzZSBvZiBHTlUgUmVhZGxpbmUgaW4gdGhpcyBwcm9ncmFtLAorYmVjYXVzZSByZWFkbGluZSBhbmQgbmN1cnNlcyByZWFsbHkgZG9uJ3QgcGxheSB3ZWxsIHRvZ2V0aGVyIGF0IGFsbC4KK1JlYWRsaW5lIGFzc3VtZXMgdGhhdCBpdCBjYW4gd3JpdGUgYXJiaXRyYXJ5IHRleHQgdG8gdGhlIHNjcmVlbgorKGVzcGVjaWFsbHkgd2hlbiBpdCB0cmllcyB0byBwcmludCBvdXQgYSBjb21wbGV0aW9uIGxpc3QpLCB3aGljaCBqdXN0Citkb2Vzbid0IHdvcmsgd2l0aCBuY3Vyc2VzLiAgRml4aW5nIHRoaXMgc28gdGhleSB3b3VsZCB3b3JrIHRvZ2V0aGVyCit3b3VsZCByZXF1aXJlIHdob2xlc2FsZSBjaGFuZ2VzIHRvIHJlYWRsaW5lLiAgIAorCisJCQkJVGhlb2RvcmUgVHMnbworCQkJCXR5dHNvQE1JVC5FRFUKKwkJCQlNYXkgMTIsIDIwMDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHQyZWQgLSBUaGUgZXh0ZW5kZWQtMiBmaWxlc3lzdGVtIGVkaXRvciwgdmVyc2lvbiAwLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHZlcnNpb24gMC4yIG9mIGV4dDJlZCAtIFRoZSBleHRlbmRlZC0yIGZpbGVzeXN0ZW0gZWRpdG9yLgorCitNb2RpZmljYXRpb25zIG9uIEFwciA1IDIwMDEKK1RoaXMgaXMgbWlub3IgYnVnIGZpeGVzIHRvIGV4dDJlZCwgYXMgb2YgQXByaWwgMjAwMS4KK0l0IHN1cHBvcnRzIG1vZGVybiBleHQyIHZlcnNpb24gdGhhdCBoYXMgZmlsZSB0eXBlIGluIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK2FuZCBmaXhlcyB0aGUgbWlzc3VuZGVyc3RhbmRpbmcgYmV0d2VlbiBuY3Vyc2VzIGFuZAorcmVhZGxpbmUuCisKK0kgZmlyc3QgYXBwbGllZCBwYXRjaGVzIGZyb20gUmVkaGF0IGV4Y2VwdCB0aGUgb25lIGZvciByZWFkbGluZSB0aGF0IAorcmV3cm90ZSBhIHJlYWRsaW5lIGJlaGF2aW9yLgorCitHbG9iYWxzIGRpZmZzIGJldHdlZW4gdmVyc2lvbiAwLjEgYW5kIDAuMiBpcyBzdG9yZWQgaW4gZmlsZSA6CisJZGlmZi1leHQyZWQuMS4yCisKK0NocmlzdGlhbiBCYWMgPENocmlzdGlhbi5CYWNAbnQtZXZyeS5mcj4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKK2V4dDJlZCdzIGRvY3VtZW50YXRpb24gY29uc2lzdHMgb2YgdGhyZWUgZG9jdW1lbnRzOgorCisxLglUaGUgdXNlcidzIGd1aWRlLgorMi4JVGVjaG5pY2FsIG92ZXJ2aWV3IG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCiszLglUaGUgRVhUMkVEIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gZG9jdW1lbnQuCisKK1Rob3NlIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBkb2MgZGlyZWN0b3J5LCBpbiBsaW51eGRvYy1zZ21sIGFuZAorcG9zdHNjcmlwdCBmb3JtYXRzLgorCitUaGUgZG9jdW1lbnRhdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQ6CisKK2h0dHA6Ly90b2NobmFwYzIudGVjaG5pb24uYWMuaWwKKwordW5kZXIgdGhlIGV4dDJlZCBzZWN0aW9uLgorCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCitleHQyZWQgcmVxdWlyZXMgdGhlIGtlcm5lbCBzb3VyY2VzIGFuZCB0aGUgcmVhZGxpbmUgYW5kIG5jdXJzZXMgcGFja2FnZXMuCitQbGVhc2UgZWRpdCB0aGUgbWFrZWZpbGUgaWYgeW91IGFyZSB1c2luZyBhbiAib2xkIiB2ZXJzaW9uIG9mIG5jdXJzZXMgKFNlZSB0aGUKK2RldGFpbHMgYmVsb3cpIG9yIGlmIGdjYyBjYW4ndCBmaW5kIHRoZSB2YXJpb3VzIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzLgorCitUbyBpbnN0YWxsLCBzaW1wbHkgaXNzdWUgYSAnbWFrZScgY29tbWFuZCB0byBjb21waWxlIGFuZCBhICdtYWtlIGluc3RhbGwnCitjb21tYW5kIHRvIGluc3RhbGwuIEkgaGF2ZSBhbHNvIGluY2x1ZGVkIGFuIGFscmVhZHkgY29tcGlsZWQgbGludXggYS5vdXQKK2JpbmFyeS4KKworZXh0MmVkIGFuZCBuY3Vyc2VzCistLS0tLS0tLS0tLS0tLS0tLS0KKworZXh0MmVkIHVzZXMgdGhlIG5jdXJzZXMgbGlicmFyeSBmb3IgdGVybWluYWwgb3V0cHV0LiBJdCBpcyB2ZXJ5IGltcG9ydGFudAordGhhdCBuY3Vyc2VzIHdpbGwgYmUgcHJvcGVybHkgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtOgorCisxLglPbGQgdmVyc2lvbnMgb2YgbmN1cnNlcyAoYXJvdW5kIDEuOC41KSBuZWVkIHRoZSBPTERfTkNVUlNFUyBjb21waWxlCisJdGltZSBvcHRpb24gaW4gRVhUMkVELgorCisJQXQgbGVhc3QgZnJvbSAxLjkuMmMsIHRoaXMgZmxhZyBzaG91bGQgbm90IGJlIHVzZWQuIEkgd291bGQgcmVjb21tZW5kCisJdXBncmFkaW5nIHRoZSBuY3Vyc2VzIGxpYnJhcnkgdG8gdGhlIG5ld2VyIHZlcnNpb25zLgorCisyLgluY3Vyc2VzIHVzZXMgaXRzIG93biB0ZXJtaW5mbyBkYXRhYmFzZSByYXRoZXIgdGhlbiB0aGUgdGVybWNhcCBmaWxlLgorCUl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSB3aWxsIGJlIGZvdW5kIGJ5IG5jdXJzZXMuCisJSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHlvdSB3aWxsIHNlZSBvbiBzdGFydHVwIHNvbWUgbGluZXMgd2hpY2gKKwlyZWZlciB0byAvZXRjL3Rlcm1jYXAuIFRoaXMgd2lsbCBtZWFuIHRoYXQgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGgKKwl0aGUgdGVybWluZm8gZGF0YWJhc2UuCisKKzMuCU5ld2VyIHZlcnNpb25zIG9mIG5jdXJzZXMgKGFuZCB0aGUgMS4zIHNlcmllcyBvZiB0aGUga2VybmVsKSBkZXNjcmliZQorCXRoZSBsaW51eCBjb25zb2xlIGluIHRoZSBlbnRyeSAnbGludXgnIGFuZCBub3QgJ2NvbnNvbGUnLCBhcyBpdCB3YXMKKwliZWZvcmUuIElmIHlvdSBydW4gZXh0MmVkIGluIHRoZSBsaW51eCBjb25zb2xlLCB5b3Ugc2hvdWxkIGVpdGhlcgorCXNldCB5b3VyIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gJ2xpbnV4JyBvciBsaW5rCisJbC9saW51eCB0byBjL2NvbnNvbGUgaW4gdGhlIHRlcm1pbmZvIGRhdGFiYXNlLgorCis0LglUaGUgcGVyY29tcGlsZWQgYmluYXJ5IHdhcyBsaW5rZWQgd2l0aCBuY3Vyc2VzIDEuOS40IGFuZCB3aWxsIHNlYXJjaAorCWZvciB0aGUgdGVybWluZm8gZGF0YWJhc2Ugb24gL3Vzci9sb2NhbC9saWIvdGVybWluZm8uIElmIHlvdSBhcmUKKwl1c2luZyBpdCwgYW5kIHlvdXIgMS45LjQgY29tcGF0aWJsZSB0ZXJtaW5mbyBkYXRhYmFzZSBpcyBub3Qgb24gdGhlCisJZGlyZWN0b3J5IGFib3ZlLCB1c2UgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNwZWNpZnkKKwlhbiBhbHRlcm5hdGUgbG9jYXRpb24uCisKK1J1bm5pbmcgZXh0MmVkCistLS0tLS0tLS0tLS0tLQorCitGb3IgdGhvc2Ugb2YgeW91IHdobyBkb24ndCBsaWtlIHJlYWRpbmcgbGVuZ3RoeSBhcnRpY2xlcywgaGVyZSBhcmUgYSBmZXcKK2Jhc2ljIGd1aWRlbGluZXM6CisKKzEuCURvbid0IHVzZSBleHQyZWQgdG8gY2hhbmdlIGEgbW91bnRlZCBmaWxlc3lzdGVtICEKKworCVVzaW5nIGV4dDJlZCBpbiByZWFkLW9ubHkgbW9kZSBvbiBhIG1vdW50ZWQgZmlsZXN5c3RlbSBjYW4gYmUgYWxsb3dlZAorCWJ5IHVzaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uICdBbGxvd01vdW50ZWRSZWFkIG9uJy4gSG93ZXZlciwKKwlub3RlIHRoYXQgdGhlIGRpc3BsYXllZCBkYXRhIHdpbGwgYmUgdW5yZWxpYWJsZS4KKworMi4JZXh0MmVkIGN1cnJlbnRseSBjYW4ndCBoYW5kbGUgZmlsZXN5c3RlbXMgYmlnZ2VyIHRoYW4gMiBHQi4gSSBhbQorCXNvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZS4gVGhpcyB3aWxsIGhvcGVmdWxseSBiZSBmaXhlZCBpbiBmdXR1cmUKKwlyZWxlYXNlcy4KKworMy4gCUJlZm9yZSBydW5uaW5nIGV4dDJlZCwgZWRpdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisJL3Zhci9saWIvZXh0MmVkL2V4dDJlZC5jb25mIHRvIHN1aXQgeW91ciBuZWVkcy4gVGhlIHZhcmlvdXMKKwljb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgdGhlcmUuCisKKzQuCVVzZSB0aGUgJ3NldGRldmljZScgY29tbWFuZCB0byBvcGVuIGFuIGV4dDIgZmlsZXN5c3RlbS4KKwllLmcuICdzZXRkZXZpY2UgL2Rldi9oZGExJy4KKworNS4JSWYgdGhlIGZpbGVzeXN0ZW0gaXMgYW4gZXh0MiBmaWxlc3lzdGVtIGFuZCBleHQyZWQgZmFpbHMgdG8KKwlhdXRvZGV0ZWN0IHRoaXMsIHVzZSB0aGUgJ0ZvcmNlRXh0MiBvbicgY29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbi4KKworNi4JVGhlIGZpbGVzeXN0ZW0gd2lsbCBhbHdheXMgYmUgb3BlbmVkIGluIHJlYWQtb25seSBtb2RlLiBGZWVsIGZyZWUgdG8KKwlleHBlcmltZW50LCBidXQgdGFrZSBjYXJlIHdpdGggdGhlICdlbmFibGV3cml0ZScgY29tbWFuZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmVlbCBmcmVlIHRvIHNlbmQgbWUgZmVlZGJhY2sgd2l0aCBhbnl0aGluZyByZWdhcmRpbmcgdG8gZXh0MmVkLgorCitFbmpveSwKKworR2FkaSBPeG1hbiA8dGd1ZEB0b2NobmFwYzIudGVjaG5pb24uYWMuaWw+CitIYWlmYSwgQXVndXN0IDIzIDE5OTUKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9ibG9ja2JpdG1hcF9jb20uYyBiL2UyZnNwcm9ncy9leHQyZWQvYmxvY2tiaXRtYXBfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2YmJlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvYmxvY2tiaXRtYXBfY29tLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9ibG9ja2JpdG1hcF9jb20uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hhbmRsZXMgdGhlIGJsb2NrIGJpdG1hcC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGNvbW1hbmRzIHdoaWNoIGFyZSBzcGVjaWZpYyB0byB0aGUgYmxvY2tiaXRtYXAgdHlwZS4KKworRmlyc3Qgd3JpdHRlbiBvbjogSnVseSA1IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKworLyoKKworVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdXNlIHRoZSBmbG9iYWwgc3RydWN0dXJlIGJsb2NrX2JpdG1hcF9pbmZvLiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgY3VycmVudAorcG9zaXRpb24gaW4gdGhlIGJpdG1hcC4KKworKi8KKwordm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fZW50cnkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBjdXJyZW50IGVudHJ5IGluIHRoZSBiaXRtYXAuIEl0IGp1c3QgY2hhbmdlcyB0aGUgZW50cnlfbnVtIHZhcmlhYmxlIGluIGJsb2NrX2JpdG1hcF9pbmZvCithbmQgZGlzcGF0Y2hlcyBhIHNob3cgY29tbWFuZCB0byBzaG93IHRoZSBuZXcgZW50cnkuCisKKyovCisKK3sKKwl1bnNpZ25lZCBsb25nIGVudHJ5X251bTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOwkJCQkJLyogR2V0IHRoZSByZXF1ZXN0ZWQgZW50cnkgKi8KKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOwlyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWVudHJ5X251bT1hdG9sIChidWZmZXIpOworCisKKwlpZiAoZW50cnlfbnVtID49IGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwKSB7CS8qIENoZWNrIGlmIGl0IGlzIGEgdmFsaWQgZW50cnkgbnVtYmVyICovCisKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW50cnkgbnVtYmVyIG91dCBvZiBib3VuZHNcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKworCisJYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtPWVudHJ5X251bTsJCQkJCS8qIElmIGl0IGlzLCBqdXN0IGNoYW5nZSBlbnRyeV9udW0gYW5kICovCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsJCQkJLyogZGlzcGF0Y2ggYSBzaG93IGNvbW1hbmQgKi8KK30KKwordm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitUaGlzIGZ1bmN0aW9uIHBhc3NlcyB0byB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgYml0bWFwLiBXZSBqdXN0IGNhbGwgdGhlIGFib3ZlIGVudHJ5IGNvbW1hbmQuCisKKyovCisKK3sKKwlsb25nIGVudHJ5X29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWVudHJ5X29mZnNldD1hdG9sIChidWZmZXIpOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW0rZW50cnlfb2Zmc2V0KTsKKwlkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBlbnRyeV9vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQllbnRyeV9vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtLWVudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2FsbG9jYXRlIChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1RoaXMgZnVuY3Rpb24gc3RhcnRzIGFsbG9jYXRpbmcgYmxvY2sgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4gQWxsb2NhdGluZyBpbnZvbHZlcyBzZXR0aW5nIHRoZSBjb3JyZWN0IGJpdHMKK2luIHRoZSBiaXRtYXAuIFRoaXMgZnVuY3Rpb24gaXMgYSB2ZWN0b3IgdmVyc2lvbiBvZiBhbGxvY2F0ZV9ibG9jayBiZWxvdyAtIFdlIGp1c3QgcnVuIG9uIHRoZSBibG9ja3MgdGhhdAord2UgbmVlZCB0byBhbGxvY2F0ZSwgYW5kIGNhbGwgYWxsb2NhdGVfYmxvY2sgZm9yIGVhY2ggb25lLgorCisqLworCit7CisJbG9uZyBlbnRyeV9udW0sbnVtPTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOwkJCQkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGFsbG9jYXRlICovCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQludW09YXRvbCAoYnVmZmVyKTsKKwl9CisKKwllbnRyeV9udW09YmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtOworCQkJCQkJCQkJCS8qIENoZWNrIGZvciBsaW1pdHMgKi8KKwlpZiAobnVtID4gZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2Jsb2Nrc19wZXJfZ3JvdXAtZW50cnlfbnVtKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFRoZXJlIGFyZW4ndCB0aGF0IG11Y2ggYmxvY2tzIGluIHRoZSBncm91cFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCXdoaWxlIChudW0pIHsJCQkJCQkJCS8qIEFuZCBjYWxsIGFsbG9jYXRlX2Jsb2NrICovCisJCWFsbG9jYXRlX2Jsb2NrIChlbnRyeV9udW0pOwkJCQkJLyogZm9yIGVhY2ggYmxvY2sgKi8KKwkJbnVtLS07ZW50cnlfbnVtKys7CisJfQorCisJZGlzcGF0Y2ggKCJzaG93Iik7CQkJCQkJCS8qIFNob3cgdGhlIHJlc3VsdCAqLworfQorCit2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19kZWFsbG9jYXRlIChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZSBmdW5jdGlvbiAtIFdlIGNhbGwgZGVhbGxvY2F0ZV9ibG9jayBpbnN0ZWFkIG9mIGFsbG9jYXRlX2Jsb2NrICovCisKK3sKKwlsb25nIGVudHJ5X251bSxudW09MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQludW09YXRvbCAoYnVmZmVyKTsKKwl9CisKKwllbnRyeV9udW09YmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtOworCWlmIChudW0gPiBmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfYmxvY2tzX3Blcl9ncm91cC1lbnRyeV9udW0pIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVGhlcmUgYXJlbid0IHRoYXQgbXVjaCBibG9ja3MgaW4gdGhlIGdyb3VwXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJd2hpbGUgKG51bSkgeworCQlkZWFsbG9jYXRlX2Jsb2NrIChlbnRyeV9udW0pOworCQludW0tLTtlbnRyeV9udW0rKzsKKwl9CisKKwlkaXNwYXRjaCAoInNob3ciKTsKK30KKworCit2b2lkIGFsbG9jYXRlX2Jsb2NrIChsb25nIGVudHJ5X251bSkKKworLyogSW4gdGhpcyBmdW5jdGlvbiB3ZSBjb252ZXJ0IHRoZSBiaXQgbnVtYmVyIGludG8gdGhlIHJpZ2h0IGJ5dGUgYW5kIGlubmVyIGJpdCBwb3NpdGlvbnMuICovCisKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdF9tYXNrPTE7CisJaW50IGJ5dGVfb2Zmc2V0LGo7CisKKwlieXRlX29mZnNldD1lbnRyeV9udW0vODsJCQkJCS8qIEZpbmQgdGhlIGNvcnJlY3QgYnl0ZSAtIGVudHJ5X251bS84ICovCisJCQkJCQkJCQkvKiBUaGUgcG9zaXRpb24gaW5zaWRlIHRoZSBieXRlIGlzIGVudHJ5X251bSAlOCAqLworCWZvciAoaj0wO2o8ZW50cnlfbnVtJTg7aisrKQorCQliaXRfbWFzayo9MjsJCQkJCQkvKiBHZW5lcmF0ZSB0aGUgb3IgbWFzayAtIDEgYXQgdGhlIHJpZ2h0IHBsYWNlICovCisJdHlwZV9kYXRhLnUuYnVmZmVyIFtieXRlX29mZnNldF0gfD0gYml0X21hc2s7CQkJLyogQW5kIGFwcGx5IGl0ICovCit9CisKK3ZvaWQgZGVhbGxvY2F0ZV9ibG9jayAobG9uZyBlbnRyeV9udW0pCisKKy8qIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIGFsbG9jYXRlX2Jsb2NrIGFib3ZlLiBXZSB1c2UgYW4gYW5kIG1hc2sgaW5zdGVhZCBvZiBhbiBvciBtYXNrLiAqLworCit7CisJdW5zaWduZWQgY2hhciBiaXRfbWFzaz0xOworCWludCBieXRlX29mZnNldCxqOworCisJYnl0ZV9vZmZzZXQ9ZW50cnlfbnVtLzg7CisJZm9yIChqPTA7ajxlbnRyeV9udW0lODtqKyspCisJCWJpdF9tYXNrKj0yOworCWJpdF9tYXNrXj0weGZmOworCisJdHlwZV9kYXRhLnUuYnVmZmVyIFtieXRlX29mZnNldF0gJj0gYml0X21hc2s7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworV2Ugc2hvdyB0aGUgYml0bWFwIGFzIGEgc2VyaWVzIG9mIGJpdHMsIGdyb3VwZWQgYXQgOC1iaXQgaW50ZXJ2YWxzLiBXZSBkaXNwbGF5IDggc3VjaCBncm91cHMgb24gZWFjaCBsaW5lLgorVGhlIGN1cnJlbnQgcG9zaXRpb24gKGFzIGtub3duIGZyb20gYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtKSBpcyBoaWdobGlnaHRlZC4KKworKi8KKworeworCWludCBpLGo7CisJdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfbnVtLGVudHJ5X251bTsKKworCXB0cj10eXBlX2RhdGEudS5idWZmZXI7CisJc2hvd19wYWRfaW5mby5saW5lPTA7c2hvd19wYWRfaW5mby5tYXhfbGluZT0tMTsKKworCXdtb3ZlIChzaG93X3BhZCwwLDApOworCWZvciAoaT0wLGVudHJ5X251bT0wO2k8ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2Jsb2Nrc19wZXJfZ3JvdXAvODtpKysscHRyKyspIHsKKwkJZm9yIChqPTE7ajw9MTI4O2oqPTIpIHsJCQkJCQkvKiBqIGNvbnRhaW5zIHRoZSBhbmQgYml0IG1hc2sgKi8KKwkJCWlmIChlbnRyeV9udW09PWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bSkgewkJLyogSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGVudHJ5ICovCisJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfUkVWRVJTRSk7CisJCQkJc2hvd19wYWRfaW5mby5saW5lPXNob3dfcGFkX2luZm8ubWF4X2xpbmUtc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLzI7CisJCQl9CisKKwkJCWlmICgoKnB0cikgJiBqKQkJCQkJCS8qIEFwcGx5IHRoZSBtYXNrICovCisJCQkJd3ByaW50dyAoc2hvd19wYWQsIjEiKTsKKwkJCWVsc2UKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiMCIpOworCisJCQlpZiAoZW50cnlfbnVtPT1ibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW0pCisJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKworCQkJZW50cnlfbnVtKys7CQkJCQkJLyogUGFzcyB0byB0aGUgbmV4dCBlbnRyeSAqLworCQl9CisJCXdwcmludHcgKHNob3dfcGFkLCIgIik7CisJCWlmIChpJTg9PTcpIHsJCQkJCQkJLyogRGlzcGxheSA4IGdyb3VwcyBpbiBhIHJvdyAqLworCQkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7CisJCQlzaG93X3BhZF9pbmZvLm1heF9saW5lKys7CisJCX0KKwl9CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCXNob3dfaW5mbyAoKTsJCQkJCQkJCS8qIFNob3cgdGhlIHVzdWFsIGluZm9ybWF0aW9uICovCisKKwkJCQkJCQkJCQkvKiBTaG93IHRoZSBncm91cCBudW1iZXIgKi8KKwl3bW92ZSAoc2hvd193aW4sMSwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiQmxvY2sgYml0bWFwIG9mIGJsb2NrIGdyb3VwICVsZFxuIixibG9ja19iaXRtYXBfaW5mby5ncm91cF9udW0pOworCQkJCQkJCQkJCS8qIFNob3cgdGhlIGJsb2NrIG51bWJlciAqLworCisJYmxvY2tfbnVtPWJsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bStibG9ja19iaXRtYXBfaW5mby5ncm91cF9udW0qZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJYmxvY2tfbnVtKz1maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfZmlyc3RfZGF0YV9ibG9jazsKKworCXdwcmludHcgKHNob3dfd2luLCJTdGF0dXMgb2YgYmxvY2sgJWxkIC0gIixibG9ja19udW0pOwkJCS8qIGFuZCB0aGUgYWxsb2NhdGlvbiBzdGF0dXMgKi8KKwlwdHI9dHlwZV9kYXRhLnUuYnVmZmVyK2Jsb2NrX2JpdG1hcF9pbmZvLmVudHJ5X251bS84OworCWo9MTsKKwlmb3IgKGk9YmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtICUgODtpPjA7aS0tKQorCQlqKj0yOworCWlmICgoKnB0cikgJiBqKQorCQl3cHJpbnR3IChzaG93X3dpbiwiQWxsb2NhdGVkXG4iKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfd2luLCJGcmVlXG4iKTsKKwlyZWZyZXNoX3Nob3dfd2luICgpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9kaXJfY29tLmMgYi9lMmZzcHJvZ3MvZXh0MmVkL2Rpcl9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDIzZTdhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9kaXJfY29tLmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9kaXJfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLQorSGFuZGxlcyBkaXJlY3Rvcmllcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZXMgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIGhhbmRsZSBkaXJlY3Rvcmllcy4KKworTW9zdCBvZiB0aGUgZnVuY3Rpb25zIHVzZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIGZpbGVfaW5mbyAoYWxvbmcgd2l0aCB0aGUgc3BlY2lhbCBkaXJlY3RvcnkgZmllbGRzIHRoZXJlKSB0byBzYXZlCitpbmZvcm1hdGlvbiBhbmQgcGFzcyBpdCBiZXR3ZWVuIHRoZW0uCisKK1NpbmNlIGEgZGlyZWN0b3J5IGlzIGp1c3QgYSBiaWcgZmlsZSB3aGljaCBpcyBjb21wb3NlZCBvZiBkaXJlY3RvcnkgZW50cmllcywgeW91IHdpbGwgZmluZCB0aGF0Cit0aGUgZnVuY3Rpb25zIGhlcmUgYXJlIGEgc3VwZXJzZXQgb2YgdGhvc2UgaW4gdGhlIGZpbGVfY29tLmMgc291cmNlLgorCitXZSBhc3N1bWUgdGhhdCB0aGUgdXNlciByZWFjaGVkIGhlcmUgdXNpbmcgdGhlIGRpciBjb21tYW5kIG9mIHRoZSBpbm9kZSB0eXBlIGFuZCBub3QgYnkgdXNpbmcgc2V0dHlwZSBkaXIsIHNvCit0aGF0IGluaXRfZGlyX2luZm8gaXMgaW5kZWVkIGNhbGxlZCB0byBnYXRoZXIgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgorCit0eXBlX2RhdGEgaXMgbm90IGNoYW5nZWQhIEl0IHN0aWxsIGNvbnRhaW5zIHRoZSBpbm9kZSBvZiB0aGUgZmlsZSAtIFdlIGhhbmRsZSB0aGUgZGlyZWN0b3J5IGluIG91ciBvd24KK3ZhcmlhYmxlcywgc28gdGhhdCBzZXR0eXBlIGV4dDJfaW5vZGUgd2lsbCAiZ28gYmFjayIgdG8gdGhlIGlub2RlIG9mIHRoaXMgZGlyZWN0b3J5LgorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCAyOCAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK2NoYXIgbmFtZV9zZWFyY2ggWzgwXTsKK2xvbmcgZW50cnlfbnVtX3NlYXJjaDsKKworaW50IGluaXRfZGlyX2luZm8gKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvX3B0cikKKworLyoKKworVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGlub2RlIG9mIHRoZSBkaXJlY3Rvcnkgd2hlbiB0aGUgdXNlciBpc3N1ZXMgdGhlIGRpciBjb21tYW5kIGZyb20gdGhlIGlub2RlLgorSXQgaXMgdXNlZCB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGlub2RlIGFuZCB0byByZXNldCBzb21lIHZhcmlhYmxlcyB3aGljaCB3ZSBuZWVkIGluIG9yZGVyIHRvIGhhbmRsZQorZGlyZWN0b3JpZXMuCisKKyovCisKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqcHRyOworCisJcHRyPSZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGU7CQkJCQkvKiB0eXBlX2RhdGEgY29udGFpbnMgdGhlIGlub2RlICovCisKKwlpbmZvX3B0ci0+aW5vZGVfcHRyPXB0cjsKKwlpbmZvX3B0ci0+aW5vZGVfb2Zmc2V0PWRldmljZV9vZmZzZXQ7CQkJCS8qIGRldmljZSBvZmZzZXQgY29udGFpbnMgdGhlIGlub2RlJ3Mgb2Zmc2V0ICovCisKKwkJCQkJCQkJCS8qIFJlc2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBzdGFydCAqLworCisJaW5mb19wdHItPmdsb2JhbF9ibG9ja19udW09cHRyLT5pX2Jsb2NrIFswXTsKKwlpbmZvX3B0ci0+Z2xvYmFsX2Jsb2NrX29mZnNldD1wdHItPmlfYmxvY2sgWzBdKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlpbmZvX3B0ci0+YmxvY2tfbnVtPTA7CisJaW5mb19wdHItPmZpbGVfb2Zmc2V0PTA7CisJCQkJCQkJCQkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIGRpcmVjdG9yeSAqLworCisJaW5mb19wdHItPmJsb2Nrc19jb3VudD0ocHRyLT5pX3NpemUrZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLTEpL2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlpbmZvX3B0ci0+ZmlsZV9sZW5ndGg9cHRyLT5pX3NpemU7CisKKwlpbmZvX3B0ci0+bGV2ZWw9MDsJCQkJCQkvKiBXZSBzdGFydCB1c2luZyBkaXJlY3QgYmxvY2tzICovCisJaW5mb19wdHItPmRpc3BsYXk9SEVYOwkJCQkJCS8qIFRoaXMgaXMgbm90IGFjdHVhbGx5IHVzZWQgKi8KKworCWluZm9fcHRyLT5kaXJfZW50cnlfbnVtPTA7aW5mb19wdHItPmRpcl9lbnRyaWVzX2NvdW50PTA7CS8qIFdlJ2xsIHN0YXJ0IGF0IHRoZSBmaXJzdCBkaXJlY3RvcnkgZW50cnkgKi8KKwlpbmZvX3B0ci0+ZGlyX2VudHJ5X29mZnNldD0wOworCisJLyogRmluZCBkaXJfZW50cmllc19jb3VudCAqLworCisJaW5mb19wdHItPmRpcl9lbnRyaWVzX2NvdW50PWNvdW50X2Rpcl9lbnRyaWVzICgpOyAJCS8qIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgKi8KKworCXJldHVybiAoMSk7Cit9CisKK3N0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIHNlYXJjaF9kaXJfZW50cmllcyAoaW50ICgqYWN0aW9uKSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pLGludCAqc3RhdHVzKQorCisvKgorCVRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gaW4gdGhpcyBzb3VyY2UgZmlsZS4gVmFyaW91cyBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGlzIGJhc2ljIGZ1bmN0aW9uLgorCisJVGhpcyByb3V0aW5lIHJ1bnMgb24gYWxsIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwlGb3IgZWFjaCBlbnRyeSwgYWN0aW9uIGlzIGNhbGxlZC4gV2UnbGwgYWN0IGFjY29yZGluZyB0byB0aGUgcmV0dXJuIGNvZGUgb2YgYWN0aW9uOgorCisJCUFCT1JUCQktCUN1cnJlbnQgZGlyIGVudHJ5IGlzIHJldHVybmVkLgorCQlDT05USU5VRQktCUNvbnRpbnVlIHNlYXJjaGluZy4KKwkJRk9VTkQJCS0JQ3VycmVudCBkaXIgZW50cnkgaXMgcmV0dXJuZWQuCisKKwlJZiB0aGUgbGFzdCBlbnRyeSBpcyByZWFjaGVkLCBpdCBpcyByZXR1cm5lZCwgYWxvbmcgd2l0aCBhbiBBQk9SVCBzdGF0dXMuCisKKwlzdGF0dXMgaXMgdXBkYXRlZCB0byB0aGUgcmV0dXJuZWQgY29kZSBvZiBhY3Rpb24uCisqLworCit7CisJc3RydWN0IHN0cnVjdF9maWxlX2luZm8gaW5mbzsJCQkJCQkvKiBUZW1wb3JhcnkgdmFyaWFibGVzIHVzZWQgdG8gKi8KKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqZGlyX2VudHJ5X3B0cjsJCQkJCS8qIGNvbnRhaW4gdGhlIGN1cnJlbnQgc2VhcmNoIGVudHJpZXMgKi8KKwlpbnQgcmV0dXJuX2NvZGUsIG5leHQ7CisKKwlpbmZvPWZpcnN0X2ZpbGVfaW5mbzsJCQkJCQkJLyogU3RhcnQgZnJvbSB0aGUgZmlyc3QgZW50cnkgLSBSZWFkIGl0ICovCisJbG93X3JlYWQgKGluZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxpbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCWRpcl9lbnRyeV9wdHI9KHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIChpbmZvLmJ1ZmZlcitpbmZvLmRpcl9lbnRyeV9vZmZzZXQpOworCisJd2hpbGUgKGluZm8uZmlsZV9vZmZzZXQgPCBpbmZvLmZpbGVfbGVuZ3RoKSB7CQkJCS8qIFdoaWxlIHdlIGhhdmVuJ3QgcmVhY2hlZCB0aGUgZW5kICovCisKKwkJKnN0YXR1cz1yZXR1cm5fY29kZT1hY3Rpb24gKCZpbmZvKTsJCQkJLyogQ2FsbCB0aGUgY2xpZW50IGZ1bmN0aW9uIHRvIHRlc3QgKi8KKwkJCQkJCQkJCQkvKiB0aGUgY3VycmVudCBlbnRyeSAqLworCQlpZiAocmV0dXJuX2NvZGU9PUFCT1JUIHx8IHJldHVybl9jb2RlPT1GT1VORCkKKwkJCXJldHVybiAoaW5mbyk7CQkJCQkJLyogU3RvcCwgaWYgc28gYXNrZWQgKi8KKworCQkJCQkJCQkJCS8qIFBhc3MgdG8gdGhlIG5leHQgZW50cnkgKi8KKworCQlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoaW5mby5idWZmZXIraW5mby5kaXJfZW50cnlfb2Zmc2V0KTsKKworCQlpbmZvLmRpcl9lbnRyeV9udW0rKzsKKwkJbmV4dCA9IGRpcl9lbnRyeV9wdHItPnJlY19sZW47CisJCWlmICghbmV4dCkKKwkJCW5leHQgPSBmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUgLSBpbmZvLmRpcl9lbnRyeV9vZmZzZXQ7CisJCWluZm8uZGlyX2VudHJ5X29mZnNldCArPSBuZXh0OworCQlpbmZvLmZpbGVfb2Zmc2V0ICs9IG5leHQ7CisKKwkJaWYgKGluZm8uZmlsZV9vZmZzZXQgPj0gaW5mby5maWxlX2xlbmd0aCkgYnJlYWs7CisKKwkJaWYgKGluZm8uZGlyX2VudHJ5X29mZnNldCA+PSBmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpIHsJLyogV2UgY3Jvc3NlZCBhIGJsb2NrIGJvdW5kYXJ5ICovCisJCQkJCQkJCQkJLyogRmluZCB0aGUgbmV4dCBibG9jaywgKi8KKwkJCWluZm8uYmxvY2tfbnVtKys7CisJCQlpbmZvLmdsb2JhbF9ibG9ja19udW09ZmlsZV9ibG9ja190b19nbG9iYWxfYmxvY2sgKGluZm8uYmxvY2tfbnVtLCZpbmZvKTsKKwkJCWluZm8uZ2xvYmFsX2Jsb2NrX29mZnNldD1pbmZvLmdsb2JhbF9ibG9ja19udW0qZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCQkJaW5mby5maWxlX29mZnNldD1pbmZvLmJsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJCQlpbmZvLmRpcl9lbnRyeV9vZmZzZXQ9MDsKKwkJCQkJCQkJCQkvKiByZWFkIGl0IGFuZCB1cGRhdGUgdGhlIHBvaW50ZXIgKi8KKworCQkJbG93X3JlYWQgKGluZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxpbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCQkJZGlyX2VudHJ5X3B0cj0oc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKikgKGluZm8uYnVmZmVyK2luZm8uZGlyX2VudHJ5X29mZnNldCk7CisKKwkJfQorCisJfQorCisJKnN0YXR1cz1BQk9SVDtyZXR1cm4gKGluZm8pOwkJCQkJCS8qIFRoZXJlIHdhcyBubyBtYXRjaCAqLworfQorCitsb25nIGNvdW50X2Rpcl9lbnRyaWVzICh2b2lkKQorCisvKgorCitUaGlzIGZ1bmN0aW9uIGNvdW50cyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpcmVjdG9yeS4gV2UganVzdCBjYWxsIHNlYXJjaF9kaXJfZW50cmllcyB0aWxsIHRoZSBlbmQuCitUaGUgY2xpZW50IGZ1bmN0aW9uIGlzIGFjdGlvbl9jb3VudCwgd2hpY2gganVzdCB0ZWxsIHNlYXJjaF9kaXJfZW50cmllcyB0byBjb250aW51ZS4KKworKi8KKworeworCWludCBzdGF0dXM7CisKKwlyZXR1cm4gKHNlYXJjaF9kaXJfZW50cmllcyAoJmFjdGlvbl9jb3VudCwmc3RhdHVzKS5kaXJfZW50cnlfbnVtKTsKK30KKworaW50IGFjdGlvbl9jb3VudCAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pCisKKy8qCisKK1VzZWQgYnkgY291bnRfZGlyX2VudHJpZXMgYWJvdmUgLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBzZWFyY2hfZGlyX2VudHJpZXMsIGFuZCBpdCB0ZWxscyBpdCB0byBjb250aW51ZQorc2VhcmNoaW5nLCB1bnRpbCB3ZSBnZXQgdG8gdGhlIGxhc3QgZW50cnkuCisKKyovCisKK3sKKwlyZXR1cm4gKENPTlRJTlVFKTsJCQkJCQkJLyogSnVzdCBjb250aW51ZSBzZWFyY2hpbmcgKi8KK30KKwordm9pZCB0eXBlX2Rpcl9fX2NkIChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisJQ2hhbmdlcyB0byBhIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisJVGhpcyBpcyBhIGNvbXBsaWNhdGVkIG9wZXJhdGlvbiwgc28gSSB3b3VsZCByZXBlYXQgaGVyZSB0aGUgZXhwbGFuYXRpb24gZnJvbSB0aGUgZGVzaWduIGFuZAorCWltcGxlbWVudGF0aW9uIGRvY3VtZW50LgorCisxLglUaGUgcGF0aCBpcyBjaGVja2VkIHRoYXQgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGggKGZyb20gLykuIElmIGl0IGlzLCB3ZSBsZXQgdGhlIGdlbmVyYWwgY2QgdG8gZG8gdGhlIGpvYiBieQorCWNhbGxpbmcgZGlyZWN0bHkgdHlwZV9leHQyX19fY2QuCisKKzIuCVRoZSBwYXRoIGlzIGRpdmlkZWQgaW50byB0aGUgbmVhcmVzdCBwYXRoIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIGNkIDEvMi8zLzQgaXMgZGl2aWRlZCBpbnRvCisJMSBhbmQgaW50byAyLzMvNC4KKworMy4JSXQgaXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGggdGhhdCB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBXZSBzZWFyY2ggZm9yIGl0IHVzaW5nCisJc2VhcmNoX2Rpcl9lbnRyaWVzLCB3aGljaCBhY2NlcHRzIHRoZSBhY3Rpb25fbmFtZSBmdW5jdGlvbiBhcyB0aGUgY2xpZW50IGZ1bmN0aW9uLgorCis0LglzZWFyY2hfZGlyX2VudHJpZXMgd2lsbCBzY2FuIHRoZSBlbnRpcmUgZW50cmllcyBhbmQgd2lsbCBjYWxsIG91ciBhY3Rpb25fbmFtZSBmdW5jdGlvbiBmb3IgZWFjaCBlbnRyeS4KKwlJbiBhY3Rpb25fbmFtZSwgdGhlIHJlcXVpcmVkIG5hbWUgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZW50cnksIGFuZCBGT1VORCB3aWxsIGJlCisJcmV0dXJuZWQgd2hlbiBhIG1hdGNoIG9jY3Vycy4KKworNS4JSWYgdGhlIHJlcXVpcmVkIGVudHJ5IGlzIGZvdW5kLCB3ZSBkaXNwYXRjaCBhIHJlbWVtYmVyIGNvbW1hbmQgdG8gaW5zZXJ0IHRoZSBjdXJyZW50IGlub2RlIChyZW1lbWJlciB0aGF0CisJdHlwZV9kYXRhIGlzIHN0aWxsIGludGFjdCBhbmQgY29udGFpbnMgdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkgaW50byB0aGUgb2JqZWN0IG1lbW9yeS4KKwlUaGlzIGlzIHJlcXVpcmVkIHRvIGVhc2lseSBzdXBwb3J0IHN5bWJvbGljIGxpbmtzIC0gSWYgd2UgZmluZCBsYXRlciB0aGF0IHRoZSBpbm9kZSBwb2ludGVkIGJ5IHRoZSBlbnRyeSBpcworCWFjdHVhbGx5IGEgc3ltYm9saWMgbGluaywgd2UnbGwgbmVlZCB0byByZXR1cm4gdG8gdGhpcyBwb2ludCwgYW5kIHRoZSBhYm92ZSBpbm9kZSBkb2Vzbid0IGhhdmUgKGFuZCBjYW4ndCBoYXZlLAorCWJlY2F1c2Ugb2YgaGFyZCBsaW5rcykgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byAibW92ZSBiYWNrIi4KKworNi4JV2UgdGhlbiBkaXNwYXRjaCBhIGZvbGxvd2lub2RlIGNvbW1hbmQgdG8gcmVhY2ggdGhlIGlub2RlIHBvaW50ZWQgYnkgdGhlIHJlcXVpcmVkIGVudHJ5LiBUaGlzIGNvbW1hbmQgd2lsbAorCWF1dG9tYXRpY2FsbHkgY2hhbmdlIHRoZSB0eXBlIHRvIGV4dDJfaW5vZGUgLSBXZSBhcmUgbm93IGF0IGFuIGlub2RlLCBhbmQgYWxsIHRoZSBpbm9kZSBjb21tYW5kcyBhcmUgYXZhaWxhYmxlLgorCis3LglXZSBjaGVjayB0aGUgaW5vZGUncyB0eXBlIHRvIHNlZSBpZiBpdCBpcyBhIGRpcmVjdG9yeS4gSWYgaXQgaXMsIHdlIGRpc3BhdGNoIGEgZGlyIGNvbW1hbmQgdG8gImVudGVyIHRoZSBkaXJlY3RvcnkiLAorCWFuZCByZWN1cnNpdmVseSBjYWxsIG91cnNlbGYgKFRoZSB0eXBlIGlzIGRpciBhZ2FpbikgYnkgZGlzcGF0Y2hpbmcgYSBjZCBjb21tYW5kLCB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYXRoCisJYXMgYW4gYXJndW1lbnQuCisKKzguCUlmIHRoZSBpbm9kZSdzIHR5cGUgaXMgYSBzeW1ib2xpYyBsaW5rIChvbmx5IGZhc3Qgc3ltYm9saWMgbGluayB3ZXJlIG1lYW53aGlsZSBpbXBsZW1lbnRlZC4gSSBndWVzcyB0aGlzIGlzCisJdHlwaWNhbGx5IHRoZSBjYXNlLiksIHdlIG5vdGUgdGhlIHBhdGggaXQgaXMgcG9pbnRpbmcgYXQsIHRoZSBzYXZlZCBpbm9kZSBpcyByZWNhbGxlZCwgd2UgZGlzcGF0Y2ggZGlyIHRvCisJZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRpcmVjdG9yeSwgYW5kIHdlIGNhbGwgb3Vyc2VsZiBhZ2FpbiB3aXRoIHRoZSBsaW5rIHBhdGgvcmVzdCBvZiB0aGUgcGF0aCBhcmd1bWVudC4KKworOS4JSW4gYW55IG90aGVyIGNhc2UsIHdlIGp1c3Qgc3RvcCBhdCB0aGUgcmVzdWx0aW5nIGlub2RlLgorCisqLworCit7CisJaW50IHN0YXR1czsKKwljaGFyICpwdHIsZnVsbF9kaXJfbmFtZSBbNTAwXSxkaXJfbmFtZSBbNTAwXSx0ZW1wIFs1MDBdLHRlbXAyIFs1MDBdOworCXN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIGluZm87CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcl9lbnRyeV9wdHI7CisKKwlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoZmlsZV9pbmZvLmJ1ZmZlcitmaWxlX2luZm8uZGlyX2VudHJ5X29mZnNldCk7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGRpcl9uYW1lKTsKKworCWlmICgqcHRyPT0wKSB7CQkJCQkJLyogY2QgYWxvbmUgd2lsbCBlbnRlciB0aGUgaGlnaGxpZ2h0ZWQgZGlyZWN0b3J5ICovCisJCXN0cm5jcHkgKGZ1bGxfZGlyX25hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZSxkaXJfZW50cnlfcHRyLT5uYW1lX2xlbik7CisJCWZ1bGxfZGlyX25hbWUgW2Rpcl9lbnRyeV9wdHItPm5hbWVfbGVuXT0wOworCX0KKwllbHNlCisJCXB0cj1wYXJzZV93b3JkIChwdHIsZnVsbF9kaXJfbmFtZSk7CisKKwlwdHI9c3RyY2hyIChmdWxsX2Rpcl9uYW1lLCcvJyk7CisKKwlpZiAocHRyPT1mdWxsX2Rpcl9uYW1lKSB7CQkJCS8qIFBhdGhuYW1lIGlzIGZyb20gcm9vdCAtIExldCB0aGUgZ2VuZXJhbCBjZCBkbyB0aGUgam9iICovCisJCXNwcmludGYgKHRlbXAsImNkICVzIixmdWxsX2Rpcl9uYW1lKTt0eXBlX2V4dDJfX19jZCAodGVtcCk7cmV0dXJuOworCX0KKworCWlmIChwdHI9PU5VTEwpIHsKKwkJc3RyY3B5IChkaXJfbmFtZSxmdWxsX2Rpcl9uYW1lKTsKKwkJZnVsbF9kaXJfbmFtZSBbMF09MDsKKwl9CisKKwllbHNlIHsKKwkJc3RybmNweSAoZGlyX25hbWUsZnVsbF9kaXJfbmFtZSxwdHItZnVsbF9kaXJfbmFtZSk7CisJCWRpcl9uYW1lIFtwdHItZnVsbF9kaXJfbmFtZV09MDsKKwkJc3RyY3B5IChmdWxsX2Rpcl9uYW1lLCsrcHRyKTsKKwl9CisJCQkJCQkJCS8qIGRpcl9uYW1lIGNvbnRhaW5zIHRoZSBjdXJyZW50IGVudHJ5LCB3aGlsZSAqLworCQkJCQkJCQkvKiBmdWxsX2Rpcl9uYW1lIGNvbnRhaW5zIHRoZSByZXN0ICovCisKKwlzdHJjcHkgKG5hbWVfc2VhcmNoLGRpcl9uYW1lKTsJCQkJLyogbmFtZV9zZWFyY2ggaXMgdXNlZCB0byBob2xkIHRoZSByZXF1aXJlZCBlbnRyeSBuYW1lICovCisKKwlpZiAoZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4gIT0gc3RybGVuIChkaXJfbmFtZSkgfHwKKwkgICAgc3RybmNtcCAoZGlyX25hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZSxkaXJfZW50cnlfcHRyLT5uYW1lX2xlbikhPTApCisJCWluZm89c2VhcmNoX2Rpcl9lbnRyaWVzICgmYWN0aW9uX25hbWUsJnN0YXR1cyk7CS8qIFNlYXJjaCBmb3IgdGhlIGVudHJ5LiBBbnN3ZXIgaW4gaW5mby4gKi8KKwllbHNlIHsKKwkJc3RhdHVzPUZPVU5EO2luZm89ZmlsZV9pbmZvOworCX0KKworCWlmIChzdGF0dXM9PUZPVU5EKSB7CQkJCQkvKiBJZiBmb3VuZCAqLworCQlmaWxlX2luZm89aW5mbzsJCQkJCS8qIFN3aXRjaCB0byBpdCwgYnkgc2V0dGluZyB0aGUgZ2xvYmFsIGZpbGVfaW5mbyAqLworCQlkaXNwYXRjaCAoInJlbWVtYmVyIGludGVybmFsX3ZhcmlhYmxlIik7CS8qIE1vdmUgdGhlIGlub2RlIGludG8gdGhlIG9iamVjdHMgbWVtb3J5ICovCisKKwkJZGlzcGF0Y2ggKCJmb2xsb3dpbm9kZSIpOwkJCS8qIEdvIHRvIHRoZSBpbm9kZSBwb2ludGVkIGJ5IHRoaXMgZGlyZWN0b3J5IGVudHJ5ICovCisKKwkJaWYgKFNfSVNMTksgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKSB7LyogU3ltYm9saWMgbGluayA/ICovCisKKwkJCWlmICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9zaXplID4gNjApIHsJLyogSSdtIGxhenksIEkgZ3Vlc3MgOi0pICovCisJCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gU29ycnksIE9ubHkgZmFzdCBzeW1ib2xpYyBsaW5rIGZvbGxvd2luZyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkXG4iKTsKKwkJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCQkJCQkJLyogR2V0IHRoZSBwb2ludGVkIG5hbWUgYW5kIGFwcGVuZCB0aGUgcHJldmlvdXMgcGF0aCAqLworCisJCQlzdHJjcHkgKHRlbXAyLCh1bnNpZ25lZCBjaGFyICopICZ0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9ibG9jayk7CisJCQlzdHJjYXQgKHRlbXAyLCIvIik7CisJCQlzdHJjYXQgKHRlbXAyLGZ1bGxfZGlyX25hbWUpOworCisJCQlkaXNwYXRjaCAoInJlY2FsbCBpbnRlcm5hbF92YXJpYWJsZSIpOwkvKiBSZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGlub2RlICovCisJCQlkaXNwYXRjaCAoImRpciIpOwkJCS8qIGFuZCB0byB0aGUgZGlyZWN0b3J5ICovCisKKwkJCXNwcmludGYgKHRlbXAsImNkICVzIix0ZW1wMik7CQkvKiBBbmQgY29udGludWUgZnJvbSB0aGVyZSBieSBkaXNwYXRjaGluZyBhIGNkIGNvbW1hbmQgKi8KKwkJCWRpc3BhdGNoICh0ZW1wKTsJCQkvKiAod2hpY2ggY2FuIGNhbGwgb3Vyc2VsZiBvciB0aGUgZ2VuZXJhbCBjZCkgKi8KKworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKFNfSVNESVIgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKSB7IC8qIElzIGl0IGFuIGlub2RlIG9mIGEgZGlyZWN0b3J5ID8gKi8KKworCQkJZGlzcGF0Y2ggKCJkaXIiKTsJCQkvKiBZZXMgLSBQYXNzIHRvIHRoZSBwb2ludGVkIGRpcmVjdG9yeSAqLworCisJCQlpZiAoZnVsbF9kaXJfbmFtZSBbMF0gIT0gMCkgewkJLyogQW5kIGNhbGwgb3Vyc2VsZiB3aXRoIHRoZSByZXN0IG9mIHRoZSBwYXRobmFtZSAqLworCQkJCXNwcmludGYgKHRlbXAsImNkICVzIixmdWxsX2Rpcl9uYW1lKTsKKwkJCQlkaXNwYXRjaCAodGVtcCk7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCisJCWVsc2UgewkJCQkJCS8qIElmIHdlIGNhbid0IGNvbnRpbnVlIGZyb20gaGVyZSwgd2UnbGwganVzdCBzdG9wICovCisJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiQ2FuXCd0IGNvbnRpbnVlIC0gU3RvcHBpbmcgYXQgbGFzdCBpbm9kZVxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIERpcmVjdG9yeSBlbnRyeSAlcyBub3QgZm91bmQuXG4iLGRpcl9uYW1lKTsJLyogSG1tLCBhbiBpbnZhbGlkIHBhdGggc29tZXdoZXJlICovCisJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKK30KKworaW50IGFjdGlvbl9uYW1lIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbykKKworLyoKKworQ29tcGFyZXMgdGhlIGN1cnJlbnQgc2VhcmNoIGVudHJ5IG5hbWUgKHNvbWV3aGVyZSBpbnNpZGUgaW5mbykgd2l0aCB0aGUgcmVxdWlyZWQgbmFtZSAoaW4gbmFtZV9zZWFyY2gpLgorUmV0dXJucyBGT1VORCBpZiBmb3VuZCwgb3IgQ09OVElOVUUgaWYgbm90IGZvdW5kLgorCisqLworCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcl9lbnRyeV9wdHI7CisKKwlkaXJfZW50cnlfcHRyPShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqKSAoaW5mby0+YnVmZmVyK2luZm8tPmRpcl9lbnRyeV9vZmZzZXQpOworCisJaWYgKGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuICE9IHN0cmxlbiAobmFtZV9zZWFyY2gpKQorCQlyZXR1cm4gKENPTlRJTlVFKTsKKworCWlmIChzdHJuY21wIChkaXJfZW50cnlfcHRyLT5uYW1lLG5hbWVfc2VhcmNoLGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuKT09MCkKKwkJcmV0dXJuIChGT1VORCk7CisKKwlyZXR1cm4gKENPTlRJTlVFKTsKK30KKwordm9pZCB0eXBlX2Rpcl9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpCisKKy8qCisKK1NlbGVjdHMgYSBkaXJlY3RvcnkgZW50cnkgYWNjb3JkaW5nIHRvIGl0cyBudW1iZXIuCitzZWFyY2hfZGlyX2VudHJpZXMgaXMgdXNlZCBhbG9uZyB3aXRoIGFjdGlvbl9lbnRyeV9udW0sIGluIHRoZSBzYW1lIGZhc2hpb24gYXMgdGhlIHByZXZpb3VzIHVzYWdlIG9mIHNlYXJjaF9kaXJfZW50cmllcy4KKworKi8KKworeworCWludCBzdGF0dXM7CisJc3RydWN0IHN0cnVjdF9maWxlX2luZm8gaW5mbzsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQXJndW1lbnRfbm90X3NwZWNpZmllZFxuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJZW50cnlfbnVtX3NlYXJjaD1hdG9sIChidWZmZXIpOworCisJaWYgKGVudHJ5X251bV9zZWFyY2ggPCAwIHx8IGVudHJ5X251bV9zZWFyY2ggPj0gZmlsZV9pbmZvLmRpcl9lbnRyaWVzX2NvdW50KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG51bWJlciBvdXQgb2YgcmFuZ2VcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCXJldHVybjsKKwl9CisKKwlpbmZvPXNlYXJjaF9kaXJfZW50cmllcyAoJmFjdGlvbl9lbnRyeV9udW0sJnN0YXR1cyk7CisJaWYgKHN0YXR1cz09Rk9VTkQpIHsKKwkJZmlsZV9pbmZvPWluZm87CisJCWRpc3BhdGNoICgic2hvdyIpOworCQlyZXR1cm47CisJfQorI2lmZGVmIERFQlVHCisJaW50ZXJuYWxfZXJyb3IgKCJkaXJfY29tIiwidHlwZV9kaXJfX19lbnRyeSIsIkFjY29yZGluZyB0byBvdXIgZ2F0aGVyZWQgZGF0YSwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgdGhpcyBlbnRyeSIpOworI2VuZGlmCit9CisKK2ludCBhY3Rpb25fZW50cnlfbnVtIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbykKKworLyoKKworVXNlZCBieSB0aGUgYWJvdmUgZnVuY3Rpb24uIEp1c3QgY29tcGFyZXMgdGhlIGN1cnJlbnQgbnVtYmVyIChpbiBpbmZvKSB3aXRoIHRoZSByZXF1aXJlZCBvbmUuCisKKyovCisKK3sKKwlpZiAoaW5mby0+ZGlyX2VudHJ5X251bSA9PSBlbnRyeV9udW1fc2VhcmNoKQorCQlyZXR1cm4gKEZPVU5EKTsKKworCXJldHVybiAoQ09OVElOVUUpOworfQorCit2b2lkIHR5cGVfZGlyX19fZm9sbG93aW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworSGVyZSB3ZSBwYXNzIHRvIHRoZSBpbm9kZSBwb2ludGVkIGJ5IHRoZSBjdXJyZW50IGVudHJ5LgorSXQgaW52b2x2ZXMgY29tcHV0aW5nIHRoZSBkZXZpY2Ugb2Zmc2V0IG9mIHRoZSBpbm9kZSBhbmQgdXNpbmcgZGlyZWN0bHkgdGhlIHNldG9mZnNldCBhbmQgc2V0dHlwZSBjb21tYW5kcy4KKworKi8KK3sKKwlsb25nIGlub2RlX29mZnNldDsKKwljaGFyIGJ1ZmZlciBbODBdOworCisJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKmRpcl9lbnRyeV9wdHI7CisKKwlsb3dfcmVhZCAoZmlsZV9pbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCWRpcl9lbnRyeV9wdHI9KHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIChmaWxlX2luZm8uYnVmZmVyK2ZpbGVfaW5mby5kaXJfZW50cnlfb2Zmc2V0KTsKKworCWlub2RlX29mZnNldD1pbm9kZV9udW1fdG9faW5vZGVfb2Zmc2V0IChkaXJfZW50cnlfcHRyLT5pbm9kZSk7CQkJLyogQ29tcHV0ZSB0aGUgaW5vZGUncyBvZmZzZXQgKi8KKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGlub2RlX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CQkvKiBNb3ZlIHRvIGl0ICovCisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfaW5vZGUiKTtkaXNwYXRjaCAoYnVmZmVyKTsJCQkvKiBhbmQgc2V0IHRoZSB0eXBlIHRvIGFuIGlub2RlICovCit9CisKK3ZvaWQgdHlwZV9kaXJfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitSZXR1cm5zIHRvIHRoZSBwYXJlbnQgaW5vZGUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorVGhpcyBpcyB0cml2aWFsLCBhcyB3ZSB0eXBlX2RhdGEgaXMgc3RpbGwgaW50YWN0IGFuZCBjb250YWlucyB0aGUgcGFyZW50IGlub2RlICEKKworKi8KKworeworCWRpc3BhdGNoICgic2V0dHlwZSBleHQyX2lub2RlIik7Cit9CisKKwordm9pZCB0eXBlX2Rpcl9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworV2UgdXNlIHNlYXJjaF9kaXJfZW50cmllcyB0byBydW4gb24gYWxsIHRoZSBlbnRyaWVzLiBFYWNoIHRpbWUsIGFjdGlvbl9zaG93IHdpbGwgYmUgY2FsbGVkIHRvIHNob3cgb25lIGVudHJ5LgorCisqLworCit7CisJaW50IHN0YXR1czsKKworCXdtb3ZlIChzaG93X3BhZCwwLDApOworCXNob3dfcGFkX2luZm8ubWF4X2xpbmU9LTE7CisKKwlzZWFyY2hfZGlyX2VudHJpZXMgKCZhY3Rpb25fc2hvdywmc3RhdHVzKTsKKwlzaG93X3BhZF9pbmZvLmxpbmU9ZmlsZV9pbmZvLmRpcl9lbnRyeV9udW0tc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLzI7CisJcmVmcmVzaF9zaG93X3BhZCAoKTsKKwlzaG93X2Rpcl9zdGF0dXMgKCk7Cit9CisKK2ludCBhY3Rpb25fc2hvdyAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pCisKKy8qCisKK1Nob3cgdGhlIGN1cnJlbnQgc2VhcmNoIGVudHJ5IChpbmZvKSBpbiBvbmUgbGluZS4gSWYgdGhlIGVudHJ5IGhhcHBlbnMgdG8gYmUgdGhlIGN1cnJlbnQgZWRpdGVkIGVudHJ5LCBpdCBpcyBoaWdobGlnaHRlZC4KKworKi8KKworeworCXVuc2lnbmVkIGNoYXIgdGVtcCBbODBdOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJfZW50cnlfcHRyOworCisJZGlyX2VudHJ5X3B0cj0oc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKikgKGluZm8tPmJ1ZmZlcitpbmZvLT5kaXJfZW50cnlfb2Zmc2V0KTsKKworCWlmIChpbmZvLT5kaXJfZW50cnlfbnVtID09IGZpbGVfaW5mby5kaXJfZW50cnlfbnVtKQkJCQkvKiBIaWdobGlnaHQgdGhlIGN1cnJlbnQgZW50cnkgKi8KKwkJd2F0dHJzZXQgKHNob3dfcGFkLEFfUkVWRVJTRSk7CisKKwlzdHJuY3B5ICh0ZW1wLGRpcl9lbnRyeV9wdHItPm5hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pOwkJCS8qIFRoZSBuYW1lIGlzIG5vdCB0ZXJtaW5hdGVkICovCisJdGVtcCBbZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW5dPTA7CisJaWYgKGRpcl9lbnRyeV9wdHItPm5hbWVfbGVuID4gKENPTFMgLSA1NSkgJiYgQ09MUyA+IDU1KQorCQl0ZW1wIFtDT0xTLTU1XT0wOworCXdwcmludHcgKHNob3dfcGFkLCJpbm9kZSA9ICUtOGx1IHJlY19sZW4gPSAlLTRsdSBuYW1lX2xlbiA9ICUtM2x1IG5hbWUgPSAlc1xuIiwJLyogRGlzcGxheSB0aGUgdmFyaW91cyBmaWVsZHMgKi8KKwkJIGRpcl9lbnRyeV9wdHItPmlub2RlLGRpcl9lbnRyeV9wdHItPnJlY19sZW4sZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4sdGVtcCk7CisKKwlzaG93X3BhZF9pbmZvLm1heF9saW5lKys7CisKKwlpZiAoaW5mby0+ZGlyX2VudHJ5X251bSA9PSBmaWxlX2luZm8uZGlyX2VudHJ5X251bSkKKwkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKworCXJldHVybiAoQ09OVElOVUUpOwkJCQkJCQkJLyogQW5kIHBhc3MgdG8gdGhlIG5leHQgKi8KK30KKwordm9pZCB0eXBlX2Rpcl9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworVGhpcyBmdW5jdGlvbiBtb3ZlcyB0byB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkuIEl0IGp1c3QgdXNlcyB0aGUgY3VycmVudCBpbmZvcm1hdGlvbiBhbmQgdGhlIGVudHJ5IGNvbW1hbmQuCisKKyovCisKK3sKKwlpbnQgb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGZpbGVfaW5mby5kaXJfZW50cnlfbnVtK29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisKK30KKwordm9pZCB0eXBlX2Rpcl9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBvZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW9mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsZmlsZV9pbmZvLmRpcl9lbnRyeV9udW0tb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCBzaG93X2Rpcl9zdGF0dXMgKHZvaWQpCisKKy8qCisKK1ZhcmlvdXMgc3RhdGlzdGljcyBhYm91dCB0aGUgZGlyZWN0b3J5LgorCisqLworCit7CisJbG9uZyBpbm9kZV9udW07CisKKwl3bW92ZSAoc2hvd193aW4sMCwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRGlyZWN0b3J5IGxpc3RpbmcuIEJsb2NrICVsZC4gIixmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX251bSk7CisJd3ByaW50dyAoc2hvd193aW4sIkRpcmVjdG9yeSBlbnRyeSAlbGQgb2YgJWxkLlxuIixmaWxlX2luZm8uZGlyX2VudHJ5X251bSxmaWxlX2luZm8uZGlyX2VudHJpZXNfY291bnQtMSk7CisJd3ByaW50dyAoc2hvd193aW4sIkRpcmVjdG9yeSBPZmZzZXQgJWxkIG9mICVsZC4gIixmaWxlX2luZm8uZmlsZV9vZmZzZXQsZmlsZV9pbmZvLmZpbGVfbGVuZ3RoLTEpOworCisJaW5vZGVfbnVtPWlub2RlX29mZnNldF90b19pbm9kZV9udW0gKGZpbGVfaW5mby5pbm9kZV9vZmZzZXQpOworCXdwcmludHcgKHNob3dfd2luLCJGaWxlIGlub2RlICVsZC4gSW5kaXJlY3Rpb24gbGV2ZWwgJWxkLlxuIixpbm9kZV9udW0sZmlsZV9pbmZvLmxldmVsKTsKKworCXJlZnJlc2hfc2hvd193aW4gKCk7Cit9CisKK3ZvaWQgdHlwZV9kaXJfX19yZW1lbWJlciAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitUaGlzIGlzIG92ZXJyaWRlZCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgcmVtZW1iZXIgYSBkaXJlY3RvcnkgLSBJdCBpcyB0b28gY29tcGxpY2F0ZWQuIEluc3RlYWQsIHdlIHJlbWVtYmVyIHRoZQoraW5vZGUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisqLworCit7CisJaW50IGZvdW5kPTA7CisJbG9uZyBlbnRyeV9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZGVzY3JpcHRvcl9wdHI7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJZW50cnlfbnVtPXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudCsrOworCWlmIChlbnRyeV9udW0+UkVNRU1CRVJfQ09VTlQtMSkgeworCQllbnRyeV9udW09MDsKKwkJcmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50LS07CisJfQorCisJZGVzY3JpcHRvcl9wdHI9Zmlyc3RfdHlwZTsKKwl3aGlsZSAoZGVzY3JpcHRvcl9wdHIhPU5VTEwgJiYgIWZvdW5kKSB7CisJCWlmIChzdHJjbXAgKGRlc2NyaXB0b3JfcHRyLT5uYW1lLCJleHQyX2lub2RlIik9PTApCisJCQlmb3VuZD0xOworCQllbHNlCisJCQlkZXNjcmlwdG9yX3B0cj1kZXNjcmlwdG9yX3B0ci0+bmV4dDsKKwl9CisKKworCXJlbWVtYmVyX2xpZm8ub2Zmc2V0IFtlbnRyeV9udW1dPWRldmljZV9vZmZzZXQ7CisJcmVtZW1iZXJfbGlmby50eXBlIFtlbnRyeV9udW1dPWRlc2NyaXB0b3JfcHRyOworCXN0cmNweSAocmVtZW1iZXJfbGlmby5uYW1lIFtlbnRyeV9udW1dLGJ1ZmZlcik7CisKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiT2JqZWN0ICVzIGluIE9mZnNldCAlbGQgcmVtZW1iZXJlZCBhcyAlc1xuIixkZXNjcmlwdG9yX3B0ci0+bmFtZSxkZXZpY2Vfb2Zmc2V0LGJ1ZmZlcik7CisJd3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKK30KKwordm9pZCB0eXBlX2Rpcl9fX3NldCAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitTaW5jZSB0aGUgZGlyIG9iamVjdCBkb2Vzbid0IGhhdmUgdmFyaWFibGVzLCB3ZSBwcm92aWRlIHRoZSBpbXByZXNzaW9uIHRoYXQgaXQgaGFzIGhlcmUuIGV4dDJfZGlyX2VudHJ5IHdhcyBub3QgdXNlZAorYmVjYXVzZSBpdCBpcyBvZiB2YXJpYWJsZSBsZW5ndGguCisKKyovCisKK3sKKwlpbnQgZm91bmQ9MDsKKwl1bnNpZ25lZCBjaGFyICpwdHIsYnVmZmVyIFs4MF0sdmFyaWFibGUgWzgwXSx2YWx1ZSBbODBdLHRlbXAgWzgwXTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqZGlyX2VudHJ5X3B0cjsKKworCWRpcl9lbnRyeV9wdHI9KHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIChmaWxlX2luZm8uYnVmZmVyK2ZpbGVfaW5mby5kaXJfZW50cnlfb2Zmc2V0KTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBNaXNzaW5nIGFyZ3VtZW50c1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKwlwYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwlwdHI9c3RyY2hyIChidWZmZXIsJz0nKTsKKwlpZiAocHRyPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEJhZCBzeW50YXhcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlzdHJuY3B5ICh2YXJpYWJsZSxidWZmZXIscHRyLWJ1ZmZlcik7dmFyaWFibGUgW3B0ci1idWZmZXJdPTA7CisJc3RyY3B5ICh2YWx1ZSwrK3B0cik7CisKKwlpZiAoc3RyY2FzZWNtcCAoImlub2RlIix2YXJpYWJsZSk9PTApIHsKKwkJZm91bmQ9MTsKKwkJZGlyX2VudHJ5X3B0ci0+aW5vZGU9YXRvbCAodmFsdWUpOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiVmFyaWFibGUgJXMgc2V0IHRvICVsdVxuIix2YXJpYWJsZSxkaXJfZW50cnlfcHRyLT5pbm9kZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKworCX0KKworCWlmIChzdHJjYXNlY21wICgicmVjX2xlbiIsdmFyaWFibGUpPT0wKSB7CisJCWZvdW5kPTE7CisJCWRpcl9lbnRyeV9wdHItPnJlY19sZW49KHVuc2lnbmVkIGludCkgYXRvbCAodmFsdWUpOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiVmFyaWFibGUgJXMgc2V0IHRvICVsdVxuIix2YXJpYWJsZSxkaXJfZW50cnlfcHRyLT5yZWNfbGVuKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCisJfQorCisJaWYgKHN0cmNhc2VjbXAgKCJuYW1lX2xlbiIsdmFyaWFibGUpPT0wKSB7CisJCWZvdW5kPTE7CisJCWRpcl9lbnRyeV9wdHItPm5hbWVfbGVuPSh1bnNpZ25lZCBpbnQpIGF0b2wgKHZhbHVlKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlZhcmlhYmxlICVzIHNldCB0byAlbHVcbiIsdmFyaWFibGUsZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisKKwl9CisKKwlpZiAoc3RyY2FzZWNtcCAoIm5hbWUiLHZhcmlhYmxlKT09MCkgeworCQlmb3VuZD0xOworCQlpZiAoc3RybGVuICh2YWx1ZSkgPiBkaXJfZW50cnlfcHRyLT5uYW1lX2xlbikgeworCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTGVuZ3RoIG9mIG5hbWUgZ3JlYXRlciB0aGVuIG5hbWVfbGVuXG4iKTsKKwkJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCQl9CisJCXN0cm5jcHkgKGRpcl9lbnRyeV9wdHItPm5hbWUsdmFsdWUsc3RybGVuICh2YWx1ZSkpOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiVmFyaWFibGUgJXMgc2V0IHRvICVzXG4iLHZhcmlhYmxlLHZhbHVlKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCisJfQorCisJaWYgKGZvdW5kKSB7CisJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCQlzdHJuY3B5ICh0ZW1wLGRpcl9lbnRyeV9wdHItPm5hbWUsZGlyX2VudHJ5X3B0ci0+bmFtZV9sZW4pOworCQl0ZW1wIFtkaXJfZW50cnlfcHRyLT5uYW1lX2xlbl09MDsKKwkJd21vdmUgKHNob3dfcGFkLGZpbGVfaW5mby5kaXJfZW50cnlfbnVtLDApOworCQl3cHJpbnR3IChzaG93X3BhZCwiaW5vZGUgPSAlLThsdSByZWNfbGVuID0gJS00bHUgbmFtZV9sZW4gPSAlLTNsdSBuYW1lID0gJXNcbiIsCisJCQkgZGlyX2VudHJ5X3B0ci0+aW5vZGUsZGlyX2VudHJ5X3B0ci0+cmVjX2xlbixkaXJfZW50cnlfcHRyLT5uYW1lX2xlbix0ZW1wKTsKKwkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJc2hvd19wYWRfaW5mby5saW5lPWZpbGVfaW5mby5kaXJfZW50cnlfbnVtLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy8yOworCQlyZWZyZXNoX3Nob3dfcGFkICgpOworCQlzaG93X2Rpcl9zdGF0dXMgKCk7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFZhcmlhYmxlICVzIG5vdCBmb3VuZFxuIix2YXJpYWJsZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCit9CisKK3ZvaWQgdHlwZV9kaXJfX193cml0ZWRhdGEgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworLyoKKworV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIHNpbmNlIHRoZSBkYXRhIGlzIG5vdCBpbiB0eXBlX2RhdGEuIEluc3RlYWQsIHdlIGhhdmUgdG8gd3JpdGUgdGhlIGJ1ZmZlciB3aGljaCBjb3JyZXNwb25kcwordG8gdGhlIGN1cnJlbnQgYmxvY2suCisKKyovCisKK3sKKwlsb3dfd3JpdGUgKGZpbGVfaW5mby5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2Rpc2suYyBiL2UyZnNwcm9ncy9leHQyZWQvZGlzay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWNkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2Rpc2suYwpAQCAtMCwwICsxLDIzOCBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2Rpc2suYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmaWxlc3lzdGVtJ3MgZGlzayBhY3Rpdml0eSBwYXNzIHRocm91Z2ggaGVyZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGlzIGFjdGluZyBhcyBhIGZpbHRlciAtIEJlZm9yZSB3ZSBwYXNzIGFuIGFjdHVhbCByZWFkIG9yIHdyaXRlIHJlcXVlc3QgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0sIHdlCitkb3VibGUgY2hlY2sgdGhlIHZhcmlvdXMgcGVybWlzc2lvbnMgYW5kIHBvc3NpYmxlIGVycm9ycyBoZXJlLgorCitUaGUgbWFqb3IgdXBkYXRlIHdoaWNoIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSBpcyBzd2l0Y2hpbmcgdG8gdGhlIHVzZSBvZiB0aGUgbGxzZWVrIHN5c3RlbSBjYWxsLCBzbyB0aGF0IHdlIHdpbGwKK2JlIGFibGUgdG8gc3VwcG9ydCBleHQyIGZpbGVzeXN0ZW1zIHVwIHRvIDQgVEIuIEN1cnJlbnRseSwgZHVlIHRvIHRoZSBzdGFuZGFyZCBmc2VlayB1c2FnZSwgd2UgY2FuJ3QgaGFuZGxlCitmaWxlc3lzdGVtcyBiaWdnZXIgdGhhbiA0IEdCLiBUaGUgbGltaXQgaXMgYWN0dWFsbHkgMiBHQiBiZWNhdXNlIEkgdXNlZCBsb25nIHJhdGhlciB0aGFuIHVuc2lnbmVkIGxvbmcgbG9uZyBhdCB0b28KK21hbnkgcGxhY2VzIGluIHRoZSBwcm9ncmFtLiBUbyBjb25jbHVkZSAtIFRoaXMgdXBncmFkZSBuZWVkcyB0byBiZSBkb25lIGNhcmVmdWx5OyBUaGVyZSBhcmUgbWFueSBwbGFjZXMgdG8gY2hhbmdlLgorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCA5IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK2ludCB3cml0ZV9hY2Nlc3M7CisKK2ludCBsb3dfcmVhZCAodW5zaWduZWQgY2hhciAqYnVmZmVyLHVuc2lnbmVkIGxvbmcgbGVuZ3RoLHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorCisvKgorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiB3ZSBuZWVkIHRvIHJlYWQgc29tZXRoaW5nIGZyb20gdGhlIGZpbGVzeXN0ZW0uCisKKyovCisKK3sKKworI2lmZGVmIERFQlVHCisKKwljaGFyIHRlbXAgWzgwXTsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CQkJCQkvKiBDaGVjayB0aGF0IGEgZGV2aWNlIGlzIGluZGVlZCBvcGVuICovCisJCWludGVybmFsX2Vycm9yICgiTm8gZGV2aWNlIG9wZW5lZCB5ZXQgcmVhZCByZXF1ZXN0ZWQiLCJkaXNrIiwibG93X3JlYWQiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG9mZnNldCA+IGZpbGVfc3lzdGVtX2luZm8uZmlsZV9zeXN0ZW1fc2l6ZSkgewkJLyogQ2hlY2sgdGhhdCB0aGUgb2Zmc2V0IGlzIHdpdGhpbiBsaW1pdHMgKi8KKwkJc3ByaW50ZiAodGVtcCwiU2VlayBvZmZzZXQgJWxkIGlzIG91dCBvZiByYW5nZSIsb2Zmc2V0KTsKKwkJaW50ZXJuYWxfZXJyb3IgKHRlbXAsImRpc2siLCJsb3dfcmVhZCIpOworCQlyZXR1cm4gKDApOworCX0KKworI2VuZGlmCisKKwlpZiAoIChmc2VlayAoZGV2aWNlX2hhbmRsZSxvZmZzZXQsU0VFS19TRVQpKT09LTEpIHsJCS8qIFNlZWsgdG8gdGhlIHJlcXVpcmVkIG9mZnNldCAqLworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBGYWlsZWQgdG8gc2VlayB0byBvZmZzZXQgJWxkIGluIGRldmljZSAlc1xuIixvZmZzZXQsZGV2aWNlX25hbWUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm4gKDApOworCX07CisKKwlpZiAoIChmcmVhZCAoYnVmZmVyLDEsbGVuZ3RoLGRldmljZV9oYW5kbGUpKT09LTEpIHsJCS8qIEFuZCBkbyB0aGUgYWN0dWFsIHJlYWRpbmcgKi8KKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIHJlYWQgZnJvbSBvZmZzZXQgJWxkIGluIGRldmljZSAlc1xuIixvZmZzZXQsZGV2aWNlX25hbWUpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybiAoMCk7CisJfTsKKworCXJldHVybiAoMSk7Cit9CisKK2ludCBsb3dfd3JpdGUgKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcix1bnNpZ25lZCBsb25nIGxlbmd0aCx1bnNpZ25lZCBsb25nIG9mZnNldCkKKworLyoKKworVGhpcyBpcyB1c2VkIHRvIGNoYW5nZSBzb21ldGhpbmcgaW4gdGhlIGZpbGVzeXN0ZW0uCit3cml0ZV9hY2Nlc3MgaXMgY2hlY2tlZCB0byBzZWUgaWYgd2UgYXJlIGFsbG93ZWQgdG8gZG8gdGhlIGFjdHVhbCB3cml0aW5nLgorQXMgYSBkb3VibGUgc2FmZXR5IG1lYXN1cmUsIEFsbG93Q2hhbmdlcyBpcyByZWNoZWNrZWQgaGVyZS4KK0lmIGxvZ2dpbmcgaXMgZW5hYmxlZCwgd2UgbG9nIHRoZSBjaGFuZ2UgYmVmb3JlIHdyaXRpbmcgaXQgdG8gdGhlIGRldmljZS4KKworKi8KK3sKKwljaGFyIHRlbXAgWzgwXTsKKworCWlmICghd3JpdGVfYWNjZXNzKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFdyaXRlIGFjY2VzcyBub3QgYXZpYWJsZSAodXNlIGVuYWJsZXdyaXRlKVxuIik7CisJCXJldHVybiAoMCk7CisJfQorCisjaWZkZWYgREVCVUcKKworCWlmICghQWxsb3dDaGFuZ2VzKSB7CisJCWludGVybmFsX2Vycm9yICgiQWxsb3dDaGFuZ2VzPTAgeWV0IGVuYWJsZXdyaXRlIHN1Y2NlZWRlZCIsImRpc2siLCJsb3dfd3JpdGUiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoZGV2aWNlX2hhbmRsZT09TlVMTCkgeworCQlpbnRlcm5hbF9lcnJvciAoIk5vIGRldmljZSBvcGVuZWQgeWV0IHJlYWQgcmVxdWVzdGVkIiwiZGlzayIsImxvd193cml0ZSIpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChvZmZzZXQgPiBmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemUpIHsKKwkJc3ByaW50ZiAodGVtcCwiU2VlayBvZmZzZXQgJWxkIGlzIG91dCBvZiByYW5nZSIsb2Zmc2V0KTsKKwkJaW50ZXJuYWxfZXJyb3IgKHRlbXAsImRpc2siLCJsb3dfd3JpdGUiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKyNlbmRpZgorCisJaWYgKExvZ0NoYW5nZXMpCisJCWlmICghbG9nX2NoYW5nZXMgKGJ1ZmZlcixsZW5ndGgsb2Zmc2V0KSkKKwkJCXJldHVybiAoMCk7CisKKwlpZiAoIChmc2VlayAoZGV2aWNlX2hhbmRsZSxvZmZzZXQsU0VFS19TRVQpKT09LTEpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIHNlZWsgdG8gb2Zmc2V0ICVsZCBpbiBkZXZpY2UgJXNcbiIsb2Zmc2V0LGRldmljZV9uYW1lKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm4gKDApOworCX07CisKKworCWlmICggKGZ3cml0ZSAoYnVmZmVyLDEsbGVuZ3RoLGRldmljZV9oYW5kbGUpKT09LTEpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIHdyaXRlIHRvIG9mZnNldCAlbGQgaW4gZGV2aWNlICVzXG4iLG9mZnNldCxkZXZpY2VfbmFtZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuICgwKTsKKwl9OworCisJd3ByaW50dyAoY29tbWFuZF93aW4sIkRhdGEgd3JpdHRlbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJcmV0dXJuICgxKTsKK30KKworaW50IGxvZ19jaGFuZ2VzICh1bnNpZ25lZCBjaGFyICpidWZmZXIsdW5zaWduZWQgbG9uZyBsZW5ndGgsdW5zaWduZWQgbG9uZyBvZmZzZXQpCisKKy8qCisKK0xvZyB0aGUgY2hhbmdlIGluIGEgcHJpbWl0aXZlIGZvcm0gLSBBbiBoZXggZHVtcCBvZiB0aGUgZGF0YSBiZWZvcmUgdGhlIGNoYW5nZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZS4KK1RoZSBoZXggYnl0ZXMgYXJlIGNvbnZlcnRlZCB0byB0ZXh0LCBzbyB0aGF0IHRoZXkgd2lsbCBiZSByZWFkYWJsZSB3aXRoIGEgc3RhbmRhcmQgdGV4dCBlZGl0b3IuCisKKyovCisKK3sKKwl1bnNpZ25lZCBjaGFyICpvcmlnaW5hbDsKKworCWludCBpOworCXRpbWVfdCBjdXJyZW50X3RpbWU7CisJRklMRSAqZnA7CisKKwlpZiAoKGZwPWZvcGVuIChMb2dGaWxlLCJhKyIpKT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBVbmFibGUgdG8gb3BlbiBsb2cgZmlsZSAlc1xuIixMb2dGaWxlKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm4gKDApOworCX07CisKKwljdXJyZW50X3RpbWU9dGltZSAoTlVMTCk7CisKKwlmcHJpbnRmIChmcCwiXG4tLS0tLSBFWFQyRUQgbG9nIGJlZ2luIC0tLS0tXG5cbiIpOworCWZwcmludGYgKGZwLCJUaW1lOiAlc1xuRGV2aWNlOiAlc1xuIixjdGltZSAoKHRpbWVfdCAqKSAmY3VycmVudF90aW1lKSxkZXZpY2VfbmFtZSk7CisJZnByaW50ZiAoZnAsIk9mZnNldDogJWx1XG5MZW5ndGg6ICVsdVxuIixvZmZzZXQsbGVuZ3RoKTsKKworCW9yaWdpbmFsPSh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyAobGVuZ3RoKnNpemVvZiAodW5zaWduZWQgY2hhcikpOworCisJaWYgKG9yaWdpbmFsPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJGYXRhbCBlcnJvciAtIENhblwndCBhbGxvY2F0ZSAlbHUgYnl0ZXMhIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7ZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwl9CisKKwlpZiAoIWxvd19yZWFkIChvcmlnaW5hbCxsZW5ndGgsb2Zmc2V0KSkgeworCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCX0KKworCWZwcmludGYgKGZwLCJcbk9yaWdpbmFsIGRhdGE6XG5cbiIpOworCisJZm9yIChpPTA7aTxsZW5ndGg7aSsrKSB7CisJCWlmIChpJTE2PT0wICYmIGkhPTApIGZwcmludGYgKGZwLCJcbiIpOworCQlmcHJpbnRmIChmcCwiJTAyeCAiLG9yaWdpbmFsIFtpXSk7CisJfQorCisJZnByaW50ZiAoZnAsIlxuXG5OZXcgZGF0YTpcblxuIik7CisKKwlmb3IgKGk9MDtpPGxlbmd0aDtpKyspIHsKKwkJaWYgKGklMTY9PTAgJiYgaSE9MCkgZnByaW50ZiAoZnAsIlxuIik7CisJCWZwcmludGYgKGZwLCIlMDJ4ICIsYnVmZmVyIFtpXSk7CisJfQorCisJZnByaW50ZiAoZnAsIlxuLS0tLS0gRVhUMkVEIGxvZyBlbmQgIC0tLS0tXG4iKTsKKworCWZjbG9zZSAoZnApOworCXJldHVybiAoMSk7Cit9CisKK2ludCBsb2FkX3R5cGVfZGF0YSAodm9pZCkKKworLyoKKworSnVzdCByZWFkIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW50byB0eXBlIGRhdGEuCisKKyovCisKK3sKKwlpZiAoZGV2aWNlX2hhbmRsZT09TlVMTCkgeworCQlwcmludGYgKCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChkZXZpY2Vfb2Zmc2V0PT0tMSkgeworCQlwcmludGYgKCJFcnJvciAtIE5vIG9mZnNldCBzZXRcbiIpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChsb3dfcmVhZCAodHlwZV9kYXRhLnUuYnVmZmVyLEVYVDJfTUFYX0JMT0NLX1NJWkUsZGV2aWNlX29mZnNldCk9PTApCisJCXJldHVybiAoMCk7CisKKwlpZiAoY3VycmVudF90eXBlIT1OVUxMKQorCQlpZiAoc3RyY21wIChjdXJyZW50X3R5cGUtPm5hbWUsImV4dDJfZGlyX2VudHJ5Iik9PTApCisJCQljdXJyZW50X3R5cGUtPmxlbmd0aD10eXBlX2RhdGEudS50X2V4dDJfZGlyX2VudHJ5LnJlY19sZW47CisKKwlyZXR1cm4gKDEpOworfQorCitpbnQgd3JpdGVfdHlwZV9kYXRhICh2b2lkKQorCit7CisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKGRldmljZV9vZmZzZXQ9PS0xKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIG9mZnNldCBzZXRcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChsb3dfd3JpdGUgKHR5cGVfZGF0YS51LmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZGV2aWNlX29mZnNldCk9PTApCisJCXJldHVybiAoMCk7CisKKwlyZXR1cm4gKDEpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2RvYy9leHQyZWQtZGVzaWduLnNnbWwgYi9lMmZzcHJvZ3MvZXh0MmVkL2RvYy9leHQyZWQtZGVzaWduLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyZGY5NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvZG9jL2V4dDJlZC1kZXNpZ24uc2dtbApAQCAtMCwwICsxLDM0NTkgQEAKKzwhRE9DVFlQRSBBcnRpY2xlIFBVQkxJQyAiLS8vRGF2ZW5wb3J0Ly9EVEQgRG9jQm9vayBWMy4wLy9FTiI+CisKKzxBcnRpY2xlPgorCis8QXJ0SGVhZGVyPgorCis8VGl0bGU+RVhUMkVEIC0gVGhlIEV4dGVuZGVkLTIgZmlsZXN5c3RlbSBlZGl0b3IgLSBEZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uPC9UaXRsZT4KKzxBVVRIT1IKKz4KKzxGaXJzdE5hbWU+UHJvZ3JhbW1lZCBieSBHYWRpIE94bWFuLCB3aXRoIHRoZSBndWlkZSBvZiBBdm5lciBMb3R0ZW08L0ZpcnN0TmFtZT4KKzwvQVVUSE9SCis+Cis8UHViRGF0ZT52MC4xLCBBdWd1c3QgMyAxOTk1PC9QdWJEYXRlPgorCis8L0FydEhlYWRlcj4KKworPFNlY3QxPgorPFRpdGxlPkFib3V0IEVYVDJFRCBkb2N1bWVudGF0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgRVhUMkVEIGRvY3VtZW50YXRpb24gY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBleHQyIGZpbGVzeXN0ZW0gb3ZlcnZpZXcuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgRVhUMkVEIHVzZXIncyBndWlkZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBFWFQyRUQgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhpcyBkb2N1bWVudCBpcyBub3QgdGhlIHVzZXIncyBndWlkZS4gSWYgeW91IGp1c3QgaW50ZW5kIHRvIHVzZSBFWFQyRUQsIHlvdQorbWF5IG5vdCB3YW50IHRvIHJlYWQgaXQuCis8L1BhcmE+CisKKzxQYXJhPgorSG93ZXZlciwgaWYgeW91IGludGVuZCB0byBicm93c2UgYW5kIG1vZGlmeSB0aGUgc291cmNlIGNvZGUsIHRoaXMgZG9jdW1lbnQgaXMKK2ZvciB5b3UuCis8L1BhcmE+CisKKzxQYXJhPgorSW4gYW55IGNhc2UsIElmIHlvdSBpbnRlbmQgdG8gcmVhZCB0aGlzIGFydGljbGUsIEkgc3Ryb25nbHkgc3VnZ2VzdCB0aGF0IHlvdQord2lsbCBiZSBmYW1pbGlhciB3aXRoIHRoZSBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gdGhlIG90aGVyIHR3byBhcnRpY2xlcyBhcyB3ZWxsLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+UHJlZmFjZTwvVGl0bGU+CisKKzxQYXJhPgorSW4gdGhpcyBkb2N1bWVudCBJIHdpbGwgdHJ5IHRvIGV4cGxhaW4gaG93IEVYVDJFRCBpcyBjb25zdHJ1Y3RlZC4KK0F0IHRoaXMgdGltZSBvZiB3cml0aW5nLCB0aGUgaW5pdGlhbCB2ZXJzaW9uIGlzIGZpbmlzaGVkIGFuZCByZWFkeQorZm9yIGRpc3RyaWJ1dGlvbjsgSXQgaXMgZnVsbHkgZnVuY3Rpb25hbC4gSG93ZXZlciwgdGhpcyB3YXMgbm90IGFsd2F5cyB0aGUKK2Nhc2UuCis8L1BhcmE+CisKKzxQYXJhPgorQXQgZmlyc3QsIEkgZGlkbid0IGtub3cgbXVjaCBhYm91dCBVbml4LCBtdWNoIGxlc3MgYWJvdXQgVW5peCBmaWxlc3lzdGVtcywKK2FuZCBldmVuIGxlc3MgYWJvdXQgTGludXggYW5kIHRoZSBleHRlbmRlZC0yIGZpbGVzeXN0ZW0uIFdoaWxlIHdvcmtpbmcKK29uIHRoaXMgcHJvamVjdCwgSSBncmFkdWFsbHkgYWNxdWlyZWQga25vd2xlZGdlIGFib3V0IGFsbCBvZiB0aGUgYWJvdmUKK3N1YmplY3RzLiBJIGNhbiB0aGluayBvZiB0d28gd2F5cyBpbiB3aGljaCBJIGNvdWxkIGhhdmUgbWFkZSBteSBwcm9qZWN0OgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSAiRW5naW5lZXIiIHdheQorCitMZWFybiB0aGUgc3ViamVjdCB0aHJvdWdobHkgYmVmb3JlIEkgZ2V0IHRvIHRoZSBwcm9ncmFtbWluZyBpdHNlbGYuCitUaGVuLCBJIGNvdWxkIGVhc2lseSBzZWUgdGhlIGVudGlyZSBwaWN0dXJlIGFuZCBzZWxlY3QgdGhlIGJlc3QKK2NvdXJzZSBvZiBhY3Rpb24sIHRha2luZyBhbGwgdGhlIGZhY3RvcnMgaW50byBhY2NvdW50LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlICJFeHBsb3JlciAtIFByb2dyZXNzaXZlIiB3YXkuCisKK0p1bXAgaW1tZWRpYXRlbHkgaW50byB0aGUgY29sZCB3YXRlciAtIFN0YXJ0IHByb2dyYW1taW5nIGFuZAorbGVhcm5pbmcgdGhlIG1hdGVyaWFsIHBhcmFsbGVsbHkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorSSBndWVzcyB0aGF0IHRoZSBhYm92ZSBkaWxlbW1hIGlzIHR5cGljYWwgYW5kIGFwcGVhcnMgYWxsIHRocm91Z2ggc2NpZW5jZSBhbmQKK3RlY2hub2xvZ3kuCis8L1BhcmE+CisKKzxQYXJhPgorSG93ZXZlciwgSSBkaWRuJ3QgaGF2ZSB0aGUgbHV4dXJ5IG9mIGNob2ljZSB3aGVuIEkgc3RhcnRlZCBteSBwcm9qZWN0IC0KK0xpbnV4IGlzIGEgcmVsYXRpdmVseSBuZXcgKGFuZCBncmVhdCEpIG9wZXJhdGluZyBzeXN0ZW0uIFRoZSBleHRlbmRlZC0yCitmaWxlc3lzdGVtIGlzIGV2ZW4gbmV3ZXIgLSBJdHMgZmlyc3QgcmVsZWFzZSBsaWVzIHNvbWV3aGVyZSBpbiAxOTkzIC0gT25seQorcGFzc2VkIHR3byB5ZWFycyB1bnRpbCBJIHN0YXJ0ZWQgd29ya2luZyBvbiBteSBwcm9qZWN0LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzaXR1YXRpb24gSSBmb3VuZCBteXNlbGYgYXQgdGhlIGJlZ2lubmluZyB3YXMgdGhhdCBJIGRpZG4ndCBoYXZlIGEgZnVsbHkKK2RldGFpbGVkIGRvY3VtZW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgZXh0MiBmaWxlc3lzdGVtLiBJbiBmYWN0LCBJIGRpZG4ndAoraGF2ZSBhbnkgZXh0MiBkb2N1bWVudCBhdCBhbGwuIFdoZW4gSSBhc2tlZCBBdm5lciBhYm91dCBkb2N1bWVudGF0aW9uLCBoZQorc3VnZ2VzdGVkIHR3byByZWZlcmVuY2VzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBIGdlbmVyYWwgVW5peCBib29rIC0gVEhFIERFU0lHTiBPRiBUSEUgVU5JWCBPUEVSQVRJTkcgU1lTVEVNLCBieQorTWF1cmljZSBKLiBCYWNoLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGtlcm5lbCBzb3VyY2VzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0kgcmVhZCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGJvb2sgYmVmb3JlIEkgc3RhcnRlZCBteSBwcm9qZWN0IC0gSXQgaXMgYQorYml0IG9sZCBub3csIGJ1dCB0aGUgcHJpbmNpcGxlcyBhcmUgc3RpbGwgdGhlIHNhbWUuIEhvd2V2ZXIsIEkgbmVlZGVkCittb3JlIHRoYW4ganVzdCB0aGUgcHJpbmNpcGxlcy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUga2VybmVsIHNvdXJjZXMgYXJlIGEgcmFyZSBib251cyEgWW91IGRvbid0IGdldCBldmVyeWRheSB0aGUgZnVsbAorc291cmNlcyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhlcmUgaXMgc28gbXVjaCB0aGF0IGNhbiBiZSBsZWFybmVkIGZyb20KK3RoZW0sIGFuZCBpdCBpcyB0aGUgdWx0aW1hdGUgc291cmNlIC0gVGhlIGV4YWN0IGFuc3dlciBob3cgdGhlIGtlcm5lbAord29ya3MgaXMgdGhlcmUsIHdpdGggYWxsIHRoZSBmaW5lIGRldGFpbHMuIEF0IHRoZSBmaXJzdCB3ZWVrIEkgc3RhcnRlZCB0bworbG9vayBhdCByYW5kb20gYXQgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBzb3VyY2VzLiBIb3dldmVyLCBpdCBpcyBkaWZmaWN1bHQKK3RvIHVuZGVyc3RhbmQgdGhlIGdsb2JhbCBwaWN0dXJlIGZyb20gZGlyZWN0IHJlYWRpbmcgb2Ygb3ZlciBvbmUgaHVuZHJlZAorcGFnZSBzb3VyY2VzLiBUaGVuLCBJIHN0YXJ0ZWQgdG8gZG8gc29tZSBwcm9ncmFtbWluZy4gSSBkaWRuJ3Qga25vdworeWV0IHdoYXQgSSB3YXMgbG9va2luZyBmb3IsIGFuZCBJIHN0YXJ0ZWQgdG8gd29yayBvbiB0aGUgcHJvamVjdCBsaWtlIGEga2lkCit3aG8gc3RhcnRzIHRvIGJ1aWxkIGEgbGFyZ2UgcHV6emxlLgorPC9QYXJhPgorCis8UGFyYT4KK0hvd2V2ZXIsIHRoaXMgd2FzIGV4YWN0bHkgdGhlIGludGVyZXN0aW5nIHBhcnQhIEl0IGlzIGZydXN0cmF0aW5nIHRvIGtub3cKK2l0IGFsbCBmcm9tIGFkdmFuY2UgLSBJIHRoaW5rIHRoYXQgdGhlIGRpc2NvdmVyeSBpdHNlbGYsIGJpdCBieSBiaXQsIGlzIHRoZQora2V5IHRvIGEgdHJ1ZSBsZWFybmluZyBhbmQgdW5kZXJzdGFuZGluZy4KKzwvUGFyYT4KKworPFBhcmE+CitOb3csIGluIHRoaXMgZG9jdW1lbnQsIEkgYW0gdHJ5aW5nIHRvIHByZXNlbnQgdGhlIHN1YmplY3QuIEV2ZW4gdGhvdWdoIEkKK2RldmVsb3BlZCBFWFQyRUQgcHJvZ3Jlc3NpdmVseSwgSSBub3cgY2FuIHNlZSB0aGUgZW50aXJlIHN1YmplY3QgbXVjaAorYnJpZ2h0ZXIgdGhhbiBJIGRpZCBiZWZvcmUsIGFuZCB0aG91Z2ggSSBkbyBoYXZlIHRoZSBvcHRpb24gb2YgcHJlc2VudGluZyBpdAorb25seSBpbiB0aGUgImVuZ2luZWVyIiB3YXkuIEhvd2V2ZXIsIEkgd2lsbCBub3QgZG8gdGhhdC4KKzwvUGFyYT4KKworPFBhcmE+CitNeSBwcmVzZW50YXRpb24gd2lsbCBiZSBtaXhlZCAtIFNvbWV0aW1lcyBJIHdpbGwgcHJlc2VudCBhIHN1YmplY3Qgd2l0aCBhbgoraW5jcmVtZW50YWwgcGVyc3BlY3RpdmUsIGFuZCBzb21ldGltZXMgZnJvbSBhICJ0b3AgZG93biIgdmlldy4gSSdsbCBsZWF2ZQoreW91IHRvIGRlY2lkZSBpZiBteSBwcmVzZW50YXRpb24gY2hvaWNlIHdhcyB3aXNlIDotKQorPC9QYXJhPgorCis8UGFyYT4KK0luIGFkZGl0aW9uLCB5b3UnbGwgbm90aWNlIHRoYXQgdGhlIHNlY3Rpb25zIHRlbmQgdG8gZ2V0IHNob3J0ZXIgYXMgd2UgZ2V0CitjbG9zZXIgdG8gdGhlIGVuZC4gVGhlIHJlYXNvbiBpcyBzaW1wbHkgdGhhdCBJIHN0YXJ0ZWQgdG8gZmVlbCB0aGF0IEkgd2FzCityZXBlYXRpbmcgbXlzZWxmIHNvIEkgZGVjaWRlZCB0byBwcmVzZW50IG9ubHkgdGhlIG5ldyBpZGVhcy4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkdldHRpbmcgc3RhcnRlZCAuLi48L1RpdGxlPgorCis8UGFyYT4KK0dldHRpbmcgc3RhcnRlZCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBtb3N0IGRpZmZpY3VsdCB0YXNrLiBPbmNlIHlvdSBnZXQKK3N0YXJ0ZWQsIHRoaW5ncyBzdGFydCAicnVubmluZyIgLi4uCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5CZWZvcmUgdGhlIGFjdHVhbCBwcm9ncmFtbWluZzwvVGl0bGU+CisKKzxQYXJhPgorRnJvbSBtaW5lIHRhbGtpbmcgd2l0aCBBdm5lciwgSSB1bmRlcnN0b29kIHRoYXQgTGludXgsIGxpa2UgYW55IG90aGVyIFVuaXgKK3N5c3RlbSwgcHJvdmlkZXMgYWNjZXNzZXMgdG8gdGhlIGVudGlyZSBkaXNrIGFzIHRob3VnaCBpdCB3ZXJlIGEgZ2VuZXJhbAorZmlsZSAtIEFjY2Vzc2luZyB0aGUgZGV2aWNlLiBJdCBpcyBzdXJlbHkgYSBuaWNlIGlkZWEuIEF2bmVyIHN1Z2dlc3RlZCB0d28KK3dheXMgb2YgYWN0aW9uOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlPcGVuaW5nIHRoZSBkZXZpY2UgbGlrZSBhIHJlZ3VsYXIgZmlsZSBpbiB0aGUgdXNlciBzcGFjZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNvbnN0cnVjdGluZyBhIGRldmljZSBkcml2ZXIgd2hpY2ggd2lsbCBydW4gaW4gdGhlIGtlcm5lbCBzcGFjZSBhbmQKK3Byb3ZpZGUgaG9va3MgZm9yIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCBpdAord2lsbCBiZSBhIHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIHdvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBleHQyCitrZXJuZWwgZnVuY3Rpb25zIHRvIGRvIHNvbWUgb2YgdGhlIHdvcmsuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworSSBjaG9zZSB0aGUgZmlyc3Qgd2F5LiBJIHRoaW5rIHRoYXQgdGhlIGJhc2ljIHJlYXNvbiB3YXMgc2ltcGxpY2l0eSAtIExlYXJuaW5nCit0aGUgZXh0MiBmaWxlc3lzdGVtIHdhcyBjb21wbGljYXRlZCBlbm91Z2gsIGFuZCBhZGRpbmcgdG8gaXQgdGhlIHRhc2sgb2YKK2xlYXJuaW5nIGhvdyB0byBwcm9ncmFtIGluIHRoZSBrZXJuZWwgc3BhY2Ugd2FzIHRvbyBtdWNoLiBJIHN0aWxsIGRvbid0IGtub3cKK2hvdyB0byBwcm9ncmFtIGEgZGV2aWNlIGRyaXZlciwgYW5kIHRoaXMgaXMgcGVyaGFwcyB0aGUgYmFkIHBhcnQsIGJ1dAorY29uY2VybmluZyB0aGUgcHJvamVjdCBpbiBhIGJhY2stcGVyc3BlY3RpdmUsIEkgdGhpbmsgdGhhdCB0aGUgZmlyc3Qgd2F5IGlzCitzdXBlcmlvciB0byB0aGUgc2Vjb25kOyBJcm9uaWNhbGx5LCBiZWNhdXNlIG9mIHRoZSB2ZXJ5IHJlYXNvbiBJIGNob3NlIGl0IC0KK1NpbXBsaWNpdHkuIEVYVDJFRCBjYW4gbm93IHJ1biBlbnRpcmVseSBpbiB0aGUgdXNlciBzcGFjZSAod2hpY2ggSSB0aGluayBpcworYSBwb2ludCBpbiBmYXZvciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlcXVpcmUgdGhlIHVzZXIgdG8gcmVjb21waWxlIGl0cwora2VybmVsKSwgYW5kIHRoZSBlbnRpcmUgaGFyZCB3b3JrIGlzIG1pbmUsIHdoaWNoIGZpdHRlZCBuaWNlbHkgaW50byB0aGUKK2xlYXJuaW5nIGV4cGVyaWVuY2UgLSBJIGRpZG4ndCB1c2Ugb3RoZXIgY29kZSB0byBkbyB0aGUgam9iIChhc2lkZSBmcm9tCitsb29raW5nIGF0IHRoZSBzb3VyY2VzLCBvZi1jb3Vyc2UpLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+SnVtcGluZyBpbnRvIHRoZSBjb2xkIHdhdGVyPC9UaXRsZT4KKworPFBhcmE+CitJIGRpZG4ndCBrbm93IGFsbW9zdCBhbnl0aGluZyBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitSZWFkaW5nIHRoZSBzb3VyY2VzIHdhcyBub3QgZW5vdWdoIC0gSSBuZWVkZWQgdG8gZXhwZXJpbWVudC4gSG93ZXZlciwgYSB0b29sCitmb3IgZXhwZXJpbWVudHMgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbSB3YXMgZXhhY3RseSBteSBwcm9qZWN0ISAtIEtpbmQgb2YgYQorcGFyYWRveC4KKzwvUGFyYT4KKworPFBhcmE+CitJIHN0YXJ0ZWQgaW1tZWRpYXRlbHkgd2l0aCBjb25zdHJ1Y3RpbmcgYSBzaW1wbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5oZXggZWRpdG9yPC9MaXRlcmFsPiAtIEl0IHdvdWxkCitvcGVuIHRoZSBkZXZpY2UgYXMgYSByZWd1bGFyIGZpbGUsIHByb3ZpZGUgbWVhbnMgb2YgbW92aW5nIGluc2lkZSB0aGUKK2ZpbGVzeXN0ZW0gd2l0aCBhIHNpbXBsZSA8TGl0ZXJhbCByZW1hcD0idHQiPm9mZnNldDwvTGl0ZXJhbD4gbWV0aG9kLCBhbmQganVzdCBzaG93IGEKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+IGhleCBkdW1wPC9MaXRlcmFsPiBvZiB0aGUgY29udGVudHMgYXQgdGhpcyBwb2ludC4gUHJvZ3JhbW1pbmcgdGhpcyB3YXMgdHJpdmlhbGx5CitzaW1wbGUgb2YtY291cnNlLiBBdCB0aGlzIHBvaW50LCB0aGUgdXNlci1pbnRlcmZhY2UgZGlkbid0IG1hdHRlciB0byBtZSAtIEkKK3dhbnRlZCBhIGZhc3Qgd2F5IHRvIGludGVyYWN0LiBBcyBhIHJlc3VsdCwgSSBjaG9zZSBhIHNpbXBsZSBjb21tYW5kIGxpbmUKK3BhcnNlci4gT2YgY291cnNlLCB0aGVyZSB3aGVyZSBubyB3aW5kb3dzIGF0IHRoaXMgcG9pbnQuCis8L1BhcmE+CisKKzxQYXJhPgorQSBoZXggZWRpdG9yIGlzIG5pY2UsIGJ1dCBpcyBub3QgZW5vdWdoLiBJdCBpbmRlZWQgZW5hYmxlZCBtZSB0byBzZWUgZWFjaCBwYXJ0CitvZiB0aGUgZmlsZXN5c3RlbSwgYnV0IHRoZSBmb3JtYXQgb2YgdGhlIHZpZXdlZCBkYXRhIHdhcyBkaWZmaWN1bHQgdG8KK2FuYWx5emUuIEkgd2FudGVkIHRvIHNlZSB0aGUgZGF0YSBpbiBhIG1vcmUgaW50dWl0aXZlIHdheS4KKzwvUGFyYT4KKworPFBhcmE+CitBdCB0aGlzIHBvaW50IG9mIHRpbWUsIHRoZSBtb3N0IGhlbHBmdWwgZmlsZSBpbiB0aGUgc291cmNlcyB3YXMgdGhlIGV4dDIKK21haW4gaW5jbHVkZSBmaWxlIC0gPExpdGVyYWwgcmVtYXA9InR0Ij4vdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaDwvTGl0ZXJhbD4uIEFtb25nIGl0cyBjb250ZW50cwordGhlcmUgd2VyZSB2YXJpb3VzIHN0cnVjdHVyZXMgd2hpY2ggSSBhc3N1bWVkIHRoZXkgYXJlIGRpc2sgaW1hZ2VzIC0gQXBwZWFyCitleGFjdGx5IGxpa2UgdGhhdCBvbiB0aGUgZGlzay4KKzwvUGFyYT4KKworPFBhcmE+CitJIHdhbnRlZCBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cXVpY2s8L0xpdGVyYWw+IHdheSB0byBnZXQgZ29pbmcuIEkgZGlkbid0IGhhdmUgdGhlIHBhdGllbmNlIHRvIGxlYXJuCitlYWNoIG9mIHRoZSBzdHJ1Y3R1cmVzIHVzZSBpbiB0aGUgY29kZS4gUmF0aGVyLCBJIHdhbnRlZCB0byBzZWUgdGhlbSBpbiBhY3Rpb24sCitzbyB0aGF0IEkgY291bGQgZXhwbG9yZSB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiB0aGVtIC0gVGVzdCBteSBhc3N1bXB0aW9ucywKK2FuZCByZWFjaCBvdGhlciBhc3N1bXB0aW9ucy4KKzwvUGFyYT4KKworPFBhcmE+CitTbyBhZnRlciB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5oZXggZWRpdG9yPC9MaXRlcmFsPiwgRVhUMkVEIHByb2dyZXNzZWQgaW50byBhIHRvb2wgd2hpY2ggaGFzIHNvbWUKK2VsZW1lbnRzIG9mIGEgY29tcGlsZXIuIEkgcHJvZ3JhbW1lZCBFWFQyRUQgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5keW5hbWljYWxseSByZWFkIHRoZSBrZXJuZWwKK2V4dDIgbWFpbiBpbmNsdWRlIGZpbGUgaW4gcnVuIHRpbWU8L0xpdGVyYWw+LCBhbmQgcHJvY2VzcyB0aGUgaW5mb3JtYXRpb24uIFRoZSBnb2FsCit3YXMgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5pbXBseSBhIHN0cnVjdHVyZS1kZWZpbml0aW9uIG9uIHRoZSBjdXJyZW50IG9mZnNldCBhdCB0aGUKK2ZpbGVzeXN0ZW08L0xpdGVyYWw+LiBFWFQyRUQgd291bGQgdGhlbiBkaXNwbGF5IHRoZSBzdHJ1Y3R1cmUgYXMgYSBsaXN0IG9mIGl0cwordmFyaWFibGVzIG5hbWVzIGFuZCBjb250ZW50cywgaW5zdGVhZCBvZiBhIG1lYW5pbmdsZXNzIGhleCBkdW1wLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBmb3JtYXQgb2YgdGhlIGluY2x1ZGUgZmlsZSBpcyBub3QgdmVyeSBjb21wbGljYXRlZCAtIFRoZSBzdHJ1Y3R1cmVzCithcmUgbW9zdGx5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmxhdDwvTGl0ZXJhbD4gLSBEaWRuJ3QgY29udGFpbiBhIGxvdCBvZiByZWN1cnNpdmUgc3RydWN0dXJlOyBPbmx5IGEKK2dsb2JhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYW5kIHNvbWUgdmFyaWFibGVzLiBUaGVyZSB3ZXJlIGNhc2VzIG9mCitzdHJ1Y3R1cmVzIGluc2lkZSBzdHJ1Y3R1cmVzLCBJIHRyZWF0ZWQgdGhlbSBpbiBhIHNvbWV3aGF0IG5vbi1lbGVnYW50IHdheSAtIEkKK21hZGUgYWxsIHRoZSBzdHJ1Y3R1cmVzIGZsYXQsIGFuZCBleHBhbmRlZCB0aGUgYXJyYXlzLiBBcyBhIHJlc3VsdCwgdGhlIHBhcnNlcgord2FzIHZlcnkgc2ltcGxlLiBBZnRlciBhbGwsIHRoaXMgd2FzIG5vdCBhbiBleGVyY2lzZSBpbiBjb21waWxpbmcsIGFuZCBJCit3YW50ZWQgdG8gcXVpY2tseSBnZXQgc29tZSByZXN1bHRzLgorPC9QYXJhPgorCis8UGFyYT4KK1RvIGhhbmRsZSB0aGUgdGFzaywgSSBjb25zdHJ1Y3RlZCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2Rlc2NyaXB0b3I8L0xpdGVyYWw+IHN0cnVjdHVyZS4KK0VhY2ggPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2Rlc2NyaXB0b3IgaW5zdGFuY2U8L0xpdGVyYWw+IGNvbnRhaW5lZCBpbmZvcm1hdGlvbiB3aGljaCBpcyBuZWVkZWQKK2luIG9yZGVyIHRvIGZvcm1hdCBhIGJsb2NrIG9mIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBDIHN0cnVjdHVyZSBjb250YWluZWQgaW4gCit0aGUga2VybmVsIHNvdXJjZS4gVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZDoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGRlc2NyaXB0b3IgbmFtZSwgdXNlZCB0byByZWZlcmVuY2UgdG8gdGhlIHN0cnVjdHVyZSBpbiBFWFQyRUQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgbmFtZSBvZiBlYWNoIHZhcmlhYmxlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHJlbGF0aXZlIG9mZnNldCBvZiB0aGUgZWFjaCB2YXJpYWJsZSBpbiB0aGUgZGF0YSBibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBsZW5ndGgsIGluIGJ5dGVzLCBvZiBlYWNoIHZhcmlhYmxlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1NpbmNlIEkgZGlkbid0IHdhbnQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzLCBJIGNob3NlIGEgc2ltcGxlCitkb3VibGUgbGlua2VkIGxpc3QgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiBPbmUgdmFyaWFibGUgY29udGFpbmVkIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5jdXJyZW50IHN0cnVjdHVyZSB0eXBlPC9MaXRlcmFsPiAtIEEgcG9pbnRlciB0byB0aGUgcmVsZXZhbnQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitOb3cgRVhUMkVEIGNvbnRhaW5lZCBiYXNpY2FsbHkgdGhyZWUgY29tbWFuZCBsaW5lIG9wZXJhdGlvbnM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCXNldGRldmljZQorCitVc2VkIHRvIG9wZW4gYSBkZXZpY2UgZm9yIHJlYWRpbmcgb25seS4gV3JpdGUgYWNjZXNzIHdhcyBwb3N0cG9uZWQKK3RvIGEgdmVyeSBhZHZhbmNlZCBzdGF0ZSBpbiB0aGUgcHJvamVjdCwgc2ltcGx5IGJlY2F1c2UgSSBkaWRuJ3QKK2tub3cgYSB0aGluZyBvZiB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUsIGFuZCBJIGJlbGlldmVkIHRoYXQKK21ha2luZyBhY3R1YWwgY2hhbmdlcyB3b3VsZCBkbyBub3RoaW5nIGJ1dCBkYW1hZ2UgOi0pCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlzZXRvZmZzZXQKKworVXNlZCB0byBtb3ZlIGluIHRoZSBkZXZpY2UuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlzZXR0eXBlCisKK1VzZWQgdG8gaW1wbHkgYSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvbiB0aGUgY3VycmVudCBwbGFjZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCXNob3cKKworVXNlZCB0byBkaXNwbGF5IHRoZSBkYXRhLiBJdCBkaXNwbGF5ZWQgdGhlIGRhdGEgaW4gYSBzaW1wbGUgaGV4IGR1bXAKK2lmIHRoZXJlIHdhcyBubyB0eXBlIHNldCwgb3IgaW4gYSBuaWNlIGZvcm1hdHRlZCB3YXkgLSBBcyBhIGxpc3Qgb2YKK3RoZSB2YXJpYWJsZSBjb250ZW50cywgaWYgdGhlcmUgd2FzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitDb21tYW5kIGxpbmUgYW5hbHl6aW5nIHdhcyBwcmltaXRpdmUgYmFjayB0aGVuIC0gQSBzaW1wbGUgc3dpdGNoLCBhcyBmYXIgYXMKK0kgY2FuIHJlbWVtYmVyIC0gTm90aGluZyBhbGlrZSB0aGUgY3VycmVudCBmbG93IGNvbnRyb2wsIGJ1dCBpdCB3YXMgZW5vdWdoCithdCB0aGUgdGltZS4KKzwvUGFyYT4KKworPFBhcmE+CitBdCB0aGUgZW5kLCBJIGhhZCBzb21ldGhpbmcgdG8gc3RhcnQgd29ya2luZyB3aXRoLiBJdCBrbmV3IHRvIGZvcm1hdCBtYW55CitzdHJ1Y3R1cmVzIC0gTm9uZSBvZiB3aGljaCBJIHVuZGVyc3Rvb2QgLSBhbmQgcHJvdmlkZWQgbWUsIHdpdGhvdXQgdG9vIG11Y2gKK3dvcmssIHNvbWV0aGluZyB0byBzdGFydCB3aXRoLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+U3RhcnRpbmcgdG8gZXhwbG9yZTwvVGl0bGU+CisKKzxQYXJhPgorV2l0aCB0aGUgYWJvdmUgdG9vbCBpbiBteSBwb2NrZXQsIEkgc3RhcnRlZCB0byBleHBsb3JlIHRoZSBleHQyIGZpbGVzeXN0ZW0KK3N0cnVjdHVyZS4gRnJvbSB0aGUgYnJpZWYgcmVhZGluZyBpbiBCYWNoJ3MgYm9vaywgSSBnb3QgZmFtaWxpYXIgdG8gc29tZQorYmFzaWMgY29uY2VwdHMgLSBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcmJsb2NrPC9MaXRlcmFsPiwgZm9yIGV4YW1wbGUuIEl0IHNlZW1zIHRoYXQgdGhlCitzdXBlcmJsb2NrIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSBmaWxlc3lzdGVtLiBJIGRlY2lkZWQgdG8gc3RhcnQKK2V4cGxvcmluZyB3aXRoIHRoYXQuCis8L1BhcmE+CisKKzxQYXJhPgorSSByZWFsaXplZCB0aGF0IHRoZSBzdXBlcmJsb2NrIHNob3VsZCBiZSBhdCBhIGZpeGVkIGxvY2F0aW9uIGluIHRoZQorZmlsZXN5c3RlbSAtIFByb2JhYmx5IG5lYXIgdGhlIGJlZ2lubmluZy4gVGhlcmUgY2FuIGJlIG5vIG90aGVyIHdheSAtCitUaGUga2VybmVsIHNob3VsZCBzdGFydCBhdCBzb21lIHBsYWNlIHRvIGZpbmQgaXQuIEEgYnJpZWYgbG9va2luZyBpbgordGhlIGtlcm5lbCBzb3VyY2VzIHJldmVhbGVkIHRoYXQgdGhlIHN1cGVyYmxvY2sgaXMgc2lnbmVkIGJ5IGEgc3BlY2lhbAorc2lnbmF0dXJlIC0gQSA8TGl0ZXJhbCByZW1hcD0idHQiPm1hZ2ljIG51bWJlcjwvTGl0ZXJhbD4gLSBFWFQyJmxvd2JhcjtTVVBFUiZsb3diYXI7TUFHSUMgKDB4RUY1MyAtIEVGIHByb2JhYmx5CitzdGFuZHMgZm9yIEV4dGVuZGVkIEZpbGVzeXN0ZW0pLiBJIHF1aWNrbHkgZm91bmQgdGhlIHN1cGVyYmxvY2sgYXQgdGhlCitmaXhlZCBvZmZzZXQgMTAyNCBpbiB0aGUgZmlsZXN5c3RlbSAtIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO21hZ2ljPC9MaXRlcmFsPiB2YXJpYWJsZSBpbiB0aGUKK3N1cGVyYmxvY2sgd2FzIHNldCBleGFjdGx5IHRvIHRoZSBhYm92ZSB2YWx1ZS4KKzwvUGFyYT4KKworPFBhcmE+CitJdCBzZWVtcyB0aGF0IHN0YXJ0aW5nIHdpdGggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXJibG9jazwvTGl0ZXJhbD4gd2FzIGEgZ29vZCBiZXQgLSBKdXN0IGZyb20KK3RoZSBsaXN0IG9mIHZhcmlhYmxlcywgb25lIGNhbiBsZWFybiBhIGxvdC4gSSBkaWRuJ3QgdW5kZXJzdGFuZCBhbGwgb2YgdGhlbQorYXQgdGhlIHRpbWUsIGJ1dCBpdCBzZWVtZWQgdGhhdCB0aGUgZm9sbG93aW5nIGtleXdvcmRzIHdlcmUgcmVwZWF0aW5nIHRoZW1zZWxmCitpbiB2YXJpb3VzIHZhcmlhYmxlczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYmxvY2sKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWlub2RlCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlncm91cAorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0F0IHRoaXMgcG9pbnQsIEkgc3RhcnRlZCB0byBleHBsb3JlIHRoZSBibG9jayBncm91cHMuIEkgd2lsbCBub3QgZGV0YWlsIGhlcmUKK3RoZSB0ZWNobmljYWwgZGVzaWduIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uIEkgaGF2ZSB3cml0dGVuIGEgc3BlY2lhbAorYXJ0aWNsZSB3aGljaCBleHBsYWlucyBqdXN0IHRoYXQsIGluIHRoZSAiZW5naW5lZXJpbmciIHdheS4gUGxlYXNlIHJlZmVyIHRvIGl0CitpZiB5b3UgZmVlbCB0aGF0IHlvdSBhcmUgbGFja2luZyBrbm93bGVkZ2UgaW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0MgorZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitJIHdhcyBleHBsb3JpbmcgdGhlIGZpbGVzeXN0ZW0gaW4gdGhpcyB3YXkgZm9yIHNvbWUgdGltZSwgYWxvbmcgd2l0aCByZWFkaW5nCit0aGUgc291cmNlcy4gVGhpcyBsZWFkIG5hdHVyYWxseSB0byB0aGUgbmV4dCBzdGVwLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+T2JqZWN0IHNwZWNpZmljIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitXaGF0IGhhcyBiZWNvbWUgY2xlYXIgaXMgdGhhdCB0aGUgYWJvdmUgd2F5IG9mIGV4cGxvcmluZyBpcyBub3QgcG93ZXJmdWwKK2Vub3VnaCAtIEkgZm91bmQgbXlzZWxmIGRvaW5nIHZhcmlvdXMgY2FsY3VsYXRpb25zIG1hbnVhbGx5IGluIG9yZGVyIHRvIHBhc3MKK2JldHdlZW4gcmVsYXRlZCBzdHJ1Y3R1cmVzLiBJIG5lZWRlZCB0byByZXBsYWNlIHNvbWUgdGFza3Mgd2l0aCBhbiBhdXRvbWF0ZWQKK3Byb2NlZHVyZS4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBhZGRpdGlvbiwgaXQgYWxzbyBiZWNhbWUgY2xlYXIgdGhhdCAob2YtY291cnNlKSBlYWNoIGtleSBvYmplY3QgaW4gdGhlCitmaWxlc3lzdGVtIGhhcyBpdHMgc3BlY2lhbCBwbGFjZSBpbiByZWdhcmQgdG8gdGhlIG92ZXJhbGwgZXh0MiBmaWxlc3lzdGVtCitkZXNpZ24sIGFuZCBuZWVkcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmluZSB0dW5lZCBoYW5kbGluZzwvTGl0ZXJhbD4uIEl0IGlzIGF0IHRoaXMgcG9pbnQgdGhhdCB0aGUKK3N0cnVjdHVyZSBkZWZpbml0aW9ucyA8TGl0ZXJhbCByZW1hcD0idHQiPmNhbWUgdG8gbGlmZTwvTGl0ZXJhbD4gLSBUaGV5IGJlY2FtZSA8TGl0ZXJhbCByZW1hcD0idHQiPm9iamVjdAorZGVmaW5pdGlvbnM8L0xpdGVyYWw+LCBtYWtpbmcgRVhUMkVEIDxMaXRlcmFsIHJlbWFwPSJ0dCI+b2JqZWN0IG9yaWVudGVkPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIGJyZWF0aHRha2luZyB3b3JkcyBhYm92ZSwgaXMgdGhhdCBlYWNoIHN0cnVjdHVyZQorbm93IGhhZCBhIGxpc3Qgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5wcml2YXRlIGNvbW1hbmRzPC9MaXRlcmFsPiwgd2hpY2ggZW5kZWQgdXAgaW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2FsbGluZyBzcGVjaWFsIGZpbmUtdHVuZWQgQyBmdW5jdGlvbnM8L0xpdGVyYWw+LiBUaGlzIGFwcHJvYWNoIHdhcworZm91bmQgdG8gYmUgdmVyeSBwb3dlcmZ1bCBhbmQgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij50aGUgaGVhcnQgb2YgRVhUMkVEIGV2ZW4gbm93PC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGFib3ZlIGNvbmNlcHRzLCBJIGFkZGVkIHRoZSBzdHJ1Y3R1cmUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4uIFRoZSByb2xlIG9mIHRoaXMgc3RydWN0dXJlIGlzIHRvIGdyb3VwIHRvZ2V0aGVyIGEKK2dyb3VwIG9mIGNvbW1hbmRzLCB3aGljaCBjYW4gYmUgbGF0ZXIgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyB0eXBlLiBFYWNoCitzdHJ1Y3R1cmUgaGFkOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBIGxpc3Qgb2YgY29tbWFuZCBuYW1lcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUEgbGlzdCBvZiBwb2ludGVycyB0byBmdW5jdGlvbnMsIHdoaWNoIGJpbmRzIGVhY2ggY29tbWFuZCB0byBpdHMKK3NwZWNpYWwgZmluZS10dW5lZCBDIGZ1bmN0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0luIG9yZGVyIHRvIHJlbGF0ZSBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gYSB0eXBlIGRlZmluaXRpb24sIGVhY2gKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yPC9MaXRlcmFsPiBzdHJ1Y3R1cmUgKGV4cGxhaW5lZCBlYXJsaWVyKSB3YXMgYWRkZWQgYSBwcml2YXRlCis8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+IHN0cnVjdHVyZS4KKzwvUGFyYT4KKworPFBhcmE+CitGb2xsb3dzIHRoZSBjdXJyZW50IGRlZmluaXRpb25zIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yPC9MaXRlcmFsPiBhbmQgb2YKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2Jhcjtjb21tYW5kPC9MaXRlcmFsPjoKKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZSBbNjBdOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBmaWVsZHNfbnVtOworICAgICAgICB1bnNpZ25lZCBjaGFyIGZpZWxkX25hbWVzIFtNQVhfRklFTERTXVs4MF07CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGZpZWxkX2xlbmd0aHMgW01BWF9GSUVMRFNdOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBmaWVsZF9wb3NpdGlvbnMgW01BWF9GSUVMRFNdOworICAgICAgICBzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIHR5cGVfY29tbWFuZHM7CisgICAgICAgIHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqcHJldiwqbmV4dDsKK307CisKK3R5cGVkZWYgdm9pZCAoKlBGKSAoY2hhciAqKTsKKworc3RydWN0IHN0cnVjdF9jb21tYW5kcyB7CisgICAgICAgIGludCBsYXN0X2NvbW1hbmQ7CisgICAgICAgIGNoYXIgKm5hbWVzIFtNQVhfQ09NTUFORFNfTlVNXTsKKyAgICAgICAgY2hhciAqZGVzY3JpcHRpb25zIFtNQVhfQ09NTUFORFNfTlVNXTsKKyAgICAgICAgUEYgY2FsbGJhY2sgW01BWF9DT01NQU5EU19OVU1dOworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDEgaWQ9ImZsb3ctY29udHJvbCI+Cis8VGl0bGU+UHJvZ3JhbSBmbG93IGNvbnRyb2w8L1RpdGxlPgorCis8UGFyYT4KK09idmlvdXNseSB0aGUgYWJvdmUgYXBwcm9hY2ggbGVhZCB0byBhIG1ham9yIHJlZGVzaWduIG9mIEVYVDJFRC4gVGhlCittYWluIGVuZ2luZSBvZiB0aGUgcmVzdWx0aW5nIGRlc2lnbiBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgZXZlbiBub3cuCis8L1BhcmE+CisKKzxQYXJhPgorSSByZWRlc2lnbmVkIHRoZSBwcm9ncmFtIGZsb3cgY29udHJvbC4gVXAgdG8gbm93LCBJIGFuYWx5emVkIHRoZSB1c2VyIGNvbW1hbmQKK2xpbmUgd2l0aCB0aGUgc2ltcGxlIHN3aXRjaCBtZXRob2QuIE5vdyBJIHVzZWQgdGhlIGZhciBzdXBlcmlvciBjYWxsYmFjaworbWV0aG9kLgorPC9QYXJhPgorCis8UGFyYT4KK0kgZGl2aWRlZCB0aGUgYXZhaWxhYmxlIHVzZXIgY29tbWFuZHMgaW50byB0d28gZ3JvdXBzOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUdlbmVyYWwgY29tbWFuZHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUeXBlIHNwZWNpZmljIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworQXMgYSByZXN1bHQsIGF0IGVhY2ggcG9pbnQgaW4gdGltZSwgdGhlIHVzZXIgd2FzIGFibGUgdG8gZW50ZXIgYQorPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIGNvbW1hbmQ8L0xpdGVyYWw+LCBzZWxlY3RhYmxlIGZyb20gYSBsaXN0IG9mIGdlbmVyYWwgY29tbWFuZHMgd2hpY2ggd2FzCithbHdheXMgYXZhaWxhYmxlLCBvciBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSBzcGVjaWZpYyBjb21tYW5kPC9MaXRlcmFsPiwgc2VsZWN0YWJsZSBmcm9tIGEgbGlzdCBvZgorY29tbWFuZHMgd2hpY2ggPExpdGVyYWwgcmVtYXA9InR0Ij5jaGFuZ2VkIGluIHRpbWU8L0xpdGVyYWw+IGFjY29yZGluZyB0byB0aGUgY3VycmVudCB0eXBlIHRoYXQgdGhlCit1c2VyIHdhcyBlZGl0aW5nLiBUaGUgc3BlY2lhbCA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUgc3BlY2lmaWMgY29tbWFuZDwvTGl0ZXJhbD4gImtuZXciIGhvdyB0bworaGFuZGxlIHRoZSBvYmplY3QgaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5IC0gSXQgd2FzICJmaW5lIHR1bmVkIiBmb3IgdGhlCitvYmplY3QncyBwbGFjZSBpbiB0aGUgZXh0MiBmaWxlc3lzdGVtIGRlc2lnbi4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGFib3ZlIGlkZWEsIEkgY29uc3RydWN0ZWQgYSBnbG9iYWwgdmFyaWFibGUgb2YKK3R5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2NvbW1hbmRzPC9MaXRlcmFsPiwgd2hpY2ggY29udGFpbmVkIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgY29tbWFuZHM8L0xpdGVyYWw+LgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSBzcGVjaWZpYyBjb21tYW5kczwvTGl0ZXJhbD4gd2VyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0CitkZXNjcmlwdG9yczwvTGl0ZXJhbD4sIGFzIGV4cGxhaW5lZCBlYXJsaWVyLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBwcm9ncmFtIGZsb3cgd2FzIG5vdyBkb25lIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBc2sgdGhlIHVzZXIgZm9yIGEgY29tbWFuZCBsaW5lLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQW5hbHl6ZSB0aGUgdXNlciBjb21tYW5kIC0gU2VwYXJhdGUgaXQgaW50byA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmQ8L0xpdGVyYWw+IGFuZAorPExpdGVyYWwgcmVtYXA9InR0Ij5hcmd1bWVudHM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVHJhY2UgdGhlIGxpc3Qgb2Yga25vd24gb2JqZWN0cyB0byBtYXRjaCB0aGUgY29tbWFuZCBuYW1lIHRvIGEgdHlwZS4KK0lmIHRoZSB0eXBlIGlzIGZvdW5kLCBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2l0aCB0aGUgYXJndW1lbnRzCithcyBhIHBhcmFtZXRlci4gVGhlbiBnbyBiYWNrIHRvIHN0ZXAgKDEpLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSWYgdGhlIGNvbW1hbmQgaXMgbm90IHR5cGUgc3BlY2lmaWMsIHRyeSB0byBmaW5kIGl0IGluIHRoZSBnZW5lcmFsCitjb21tYW5kcywgYW5kIGNhbGwgaXQgaWYgZm91bmQuIEdvIGJhY2sgdG8gc3RlcCAoMSkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJZiB0aGUgY29tbWFuZCBpcyBub3QgZm91bmQsIGlzc3VlIGEgc2hvcnQgZXJyb3IgbWVzc2FnZSwgYW5kIHJldHVybgordG8gc3RlcCAoMSkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCitOb3RlIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm9yZGVyPC9MaXRlcmFsPiBvZiB0aGUgYWJvdmUgc3RlcHMuIEluIHBhcnRpY3VsYXIsIG5vdGUgdGhhdCBhIGNvbW1hbmQKK2lzIGZpcnN0IGFzc3VtZWQgdG8gYmUgYSB0eXBlLXNwZWNpZmljIGNvbW1hbmQgYW5kIG9ubHkgaWYgdGhpcyBmYWlscywgYQorZ2VuZXJhbCBjb21tYW5kIGlzIHNlYXJjaGVkLiBUaGUgIjxMaXRlcmFsIHJlbWFwPSJ0dCI+c2lkZS1lZmZlY3Q8L0xpdGVyYWw+IiAobWFpbiBlZmZlY3QsIGFjdHVhbGx5KQoraXMgdGhhdCB3aGVuIHdlIGhhdmUgdHdvIGNvbW1hbmRzIHdpdGggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2FtZSBuYW1lPC9MaXRlcmFsPiAtIE9uZSB0aGF0IGlzIGEgCit0eXBlIHNwZWNpZmljIGNvbW1hbmQsIGFuZCBvbmUgdGhhdCBpcyBhIGdlbmVyYWwgY29tbWFuZCwgdGhlIGRpc3BhdGNoaW5nCithbGdvcml0aG0gd2lsbCBjYWxsIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUgc3BlY2lmaWMgY29tbWFuZDwvTGl0ZXJhbD4uIFRoaXMgYWxsb3dzCis8TGl0ZXJhbCByZW1hcD0idHQiPm92ZXJyaWRpbmc8L0xpdGVyYWw+IG9mIGEgY29tbWFuZCB0byBwcm92aWRlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmluZS10dW5lZDwvTGl0ZXJhbD4gb3BlcmF0aW9uLgorRm9yIGV4YW1wbGUsIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgaXMgb3ZlcnJpZGRlbiBuZWFybHkgZXZlcnl3aGVyZSwKK3RvIGFjY29tbW9kYXRlIGZvciB0aGUgZGlmZmVyZW50IHdheXMgaW4gd2hpY2ggZGlmZmVyZW50IG9iamVjdHMgYXJlIGRpc3BsYXllZCwKK2luIG9yZGVyIHRvIHByb3ZpZGUgYW4gaW50dWl0aXZlIGZpbmUtdHVuZWQgZGlzcGxheS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgYWJvdmUgaXMgZG9uZSBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gZnVuY3Rpb24sIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbi5jPC9MaXRlcmFsPi4gU2luY2UKK2l0IGlzIGEgdmVyeSBpbXBvcnRhbnQgZnVuY3Rpb24gaW4gRVhUMkVELCBhbmQgaXQgaXMgcmVsYXRpdmVseSBzaG9ydCwgSSB3aWxsCitsaXN0IGl0IGVudGlyZWx5IGhlcmUuIE5vdGUgdGhhdCBhIHJlZGVzaWduIHdhcyBtYWRlIHNpbmNlIHRoZW4gLSBBbm90aGVyCitsZXZlbCB3YXMgYWRkZWQgYmV0d2VlbiB0aGUgdHdvIGRlc2NyaWJlZCwgYnV0IEknbGwgZWxhYm9yYXRlIG1vcmUgb24gdGhpcworbGF0ZXIuIEhvd2V2ZXIsIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgZm9sbG93cyB0aGUgZXhwbGFuYXRpb24gZGVzY3JpYmVkIGFib3ZlLgorCis8UHJvZ3JhbUxpc3Rpbmc+CitpbnQgZGlzcGF0Y2ggKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBpLGZvdW5kPTA7CisJY2hhciBjb21tYW5kIFs4MF07CisKKwlwYXJzZV93b3JkIChjb21tYW5kX2xpbmUsY29tbWFuZCk7CisJCQkKKwlpZiAoc3RyY21wIChjb21tYW5kLCJxdWl0Iik9PTApIHJldHVybiAoMSk7CQorCisJLyogMS4gU2VhcmNoIGZvciB0eXBlIHNwZWNpZmljIGNvbW1hbmRzIEZJUlNUIC0gQWxsb3dzIG92ZXJyaWRpbmcgb2YgYSBnZW5lcmFsIGNvbW1hbmQgKi8KKworCWlmIChjdXJyZW50X3R5cGUgIT0gTlVMTCkKKwkJZm9yIChpPTA7aSYjNjA7PWN1cnJlbnRfdHlwZS0mIzYyO3R5cGVfY29tbWFuZHMubGFzdF9jb21tYW5kICYjMzg7JiMzODsgIWZvdW5kO2krKykgeworCQkJaWYgKHN0cmNtcCAoY29tbWFuZCxjdXJyZW50X3R5cGUtJiM2Mjt0eXBlX2NvbW1hbmRzLm5hbWVzIFtpXSk9PTApIHsKKwkJCQkoKmN1cnJlbnRfdHlwZS0mIzYyO3R5cGVfY29tbWFuZHMuY2FsbGJhY2sgW2ldKSAoY29tbWFuZF9saW5lKTsKKwkJCQlmb3VuZD0xOworCQkJfQorCQl9CisKKwkvKiAyLiBOb3cgc2VhcmNoIGZvciBleHQyIGZpbGVzeXN0ZW0gZ2VuZXJhbCBjb21tYW5kcyAqLworCisJaWYgKCFmb3VuZCkKKwkJZm9yIChpPTA7aSYjNjA7PWV4dDJfY29tbWFuZHMubGFzdF9jb21tYW5kICYjMzg7JiMzODsgIWZvdW5kO2krKykgeworCQkJaWYgKHN0cmNtcCAoY29tbWFuZCxleHQyX2NvbW1hbmRzLm5hbWVzIFtpXSk9PTApIHsKKwkJCQkoKmV4dDJfY29tbWFuZHMuY2FsbGJhY2sgW2ldKSAoY29tbWFuZF9saW5lKTsKKwkJCQlmb3VuZD0xOworCQkJfQorCQl9CisKKwkKKwkvKiAzLiBJZiBub3QgZm91bmQsIHNlYXJjaCB0aGUgZ2VuZXJhbCBjb21tYW5kcyAqLworCQorCWlmICghZm91bmQpCisJCWZvciAoaT0wO2kmIzYwOz1nZW5lcmFsX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmIzM4OyYjMzg7ICFmb3VuZDtpKyspIHsKKwkJCWlmIChzdHJjbXAgKGNvbW1hbmQsZ2VuZXJhbF9jb21tYW5kcy5uYW1lcyBbaV0pPT0wKSB7CisJCQkJKCpnZW5lcmFsX2NvbW1hbmRzLmNhbGxiYWNrIFtpXSkgKGNvbW1hbmRfbGluZSk7CisJCQkJZm91bmQ9MTsKKwkJCX0KKwkJfQorCisJaWYgKCFmb3VuZCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3I6IFVua25vd24gY29tbWFuZFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCQorCXJldHVybiAoMCk7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5Tb3VyY2UgZmlsZXMgaW4gRVhUMkVEPC9UaXRsZT4KKworPFBhcmE+CitUaGUgcHJvamVjdCB3YXMgZ2V0dGluZyBsYXJnZSBlbm91Z2ggdG8gYmUgc3BsaXR0ZWQgaW50byBzZXZlcmFsIHNvdXJjZQorZmlsZXMuIEkgc3BsaXR0ZWQgdGhlIHNvdXJjZSBhcyBtdWNoIGFzIEkgY291bGQgaW50byBzZWxmLWNvbnRhaW5lZAorc291cmNlIGZpbGVzLiBUaGUgc291cmNlIGZpbGVzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBibG9ja3M6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+TWFpbiBpbmNsdWRlIGZpbGUgLSBleHQyZWQuaDwvTGl0ZXJhbD4KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgdmFyaW91cyBzdHJ1Y3R1cmVzLAordmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgdXNlZCBpbiBFWFQyRUQuIEl0IGlzIGluY2x1ZGVkIGJ5IGFsbCBzb3VyY2UKK2ZpbGVzIGluIEVYVDJFRC4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5NYWluIGJsb2NrIC0gbWFpbi5jPC9MaXRlcmFsPgorCis8TGl0ZXJhbCByZW1hcD0idHQiPm1haW4uYzwvTGl0ZXJhbD4gaGFuZGxlcyB0aGUgdXBwZXIgbGV2ZWwgb2YgdGhlIHByb2dyYW0gZmxvdyBjb250cm9sLgorSXQgY29udGFpbnMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGFyc2VyPC9MaXRlcmFsPiBhbmQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2hlcjwvTGl0ZXJhbD4uIEl0cyB0YXNrIGlzCit0byBhc2sgdGhlIHVzZXIgZm9yIGEgcmVxdWlyZWQgYWN0aW9uLCBhbmQgdG8gcGFzcyBjb250cm9sIHRvIG90aGVyCitsb3dlciBsZXZlbCBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gZG8gdGhlIGFjdHVhbCBqb2IuCisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+SW5pdGlhbGl6YXRpb24gLSBpbml0LmM8L0xpdGVyYWw+CisKK1RoZSBpbml0IHNvdXJjZSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHZhcmlvdXMgaW5pdGlhbGl6YXRpb24KK2FjdGlvbnMgd2hpY2ggbmVlZCB0byBiZSBkb25lIHRocm91Z2ggdGhlIHByb2dyYW0uIEZvciBleGFtcGxlLAorYXV0byBkZXRlY3Rpb24gb2YgYW4gZXh0MiBmaWxlc3lzdGVtIHdoZW4gc2VsZWN0aW5nIGEgZGV2aWNlIGFuZAoraW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgc3RydWN0dXJlcyBkZXNjcmliZWQKK2VhcmxpZXIuCisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+RGlzayBhY3Rpdml0eSAtIGRpc2suYzwvTGl0ZXJhbD4KKworPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNrLmM8L0xpdGVyYWw+IGlzIGhhbmRsZXMgdGhlIGxvd2VyIGxldmVsIGludGVyYWN0aW9uIHdpdGggdGhlCitkZXZpY2UuIEFsbCBkaXNrIGFjdGl2aXR5IGlzIHBhc3NlZCB0aHJvdWdoIHRoaXMgZmlsZSAtIFRoZSB2YXJpb3VzCitmdW5jdGlvbnMgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgcmVxdWVzdCBkaXNrIGFjdGlvbnMgZnJvbSB0aGUKK2Z1bmN0aW9ucyBpbiB0aGlzIGZpbGUuIEluIHRoaXMgd2F5LCBmb3IgZXhhbXBsZSwgd2UgY2FuIGVhc2lseSBibG9jawordGhlIHdyaXRlIGFjY2VzcyB0byB0aGUgZGV2aWNlLgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPkRpc3BsYXkgb3V0cHV0IGFjdGl2aXR5IC0gd2luLmM8L0xpdGVyYWw+CisJCitJbiBhIHNpbWlsYXIgd2F5IHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzay5jPC9MaXRlcmFsPiwgdGhlIHVzZXItaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQKK21vc3Qgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmN1cnNlcyBsaWJyYXJ5PC9MaXRlcmFsPiBhcmUgZG9uZQoraGVyZS4gTm90aGluZyB3aWxsIGJlIGFjdHVhbGx5IHdyaXR0ZW4gdG8gYSBzcGVjaWZpYyB3aW5kb3cgd2l0aG91dAorY2FsbGluZyBhIGZ1bmN0aW9uIGZyb20gdGhpcyBmaWxlLgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPkNvbW1hbmRzIGF2YWlsYWJsZSB0aHJvdWdoIGRpc3BhdGNoaW5nIC0gKiZsb3diYXI7Y29tLmMgPC9MaXRlcmFsPgorCitUaGUgYWJvdmUgZmlsZSBuYW1lIGlzIGdlbmVyaWMgLSBFYWNoIGZpbGUgd2hpY2ggZW5kcyB3aXRoCis8TGl0ZXJhbCByZW1hcD0idHQiPiZsb3diYXI7Y29tLmM8L0xpdGVyYWw+IGNvbnRhaW5zIGEgZ3JvdXAgb2YgcmVsYXRlZCBjb21tYW5kcyB3aGljaCBjYW4gYmUKK2NhbGxlZCB0aHJvdWdoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dGhlIGRpc3BhdGNoaW5nIGZ1bmN0aW9uPC9MaXRlcmFsPi4KKworRWFjaCBvYmplY3QgdHlwaWNhbGx5IGhhcyBpdHMgb3duIGZpbGUuIEEgc2VwYXJhdGUgZmlsZSBpcyBhbHNvCithdmFpbGFibGUgZm9yIHRoZSBnZW5lcmFsIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1RoZSBlbnRpcmUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgYXZhaWxhYmxlIGF0IHRoaXMgdGltZSBpczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYmxvY2tiaXRtYXAmbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlkaXImbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlkaXNrLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWV4dDImbG93YmFyO2NvbS5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlmaWxlJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJZ2VuZXJhbCZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWdyb3VwJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJaW5pdC5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlpbm9kZSZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWlub2RlYml0bWFwJmxvd2Jhcjtjb20uYworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJbWFpbi5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlzdXBlciZsb3diYXI7Y29tLmMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCXdpbi5jCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VXNlciBpbnRlcmZhY2U8L1RpdGxlPgorCis8UGFyYT4KK1RoZSB1c2VyIGludGVyZmFjZSBpcyB0ZXh0LWJhc2VkIG9ubHkgYW5kIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcKK2xpYnJhcmllczoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IGxpYnJhcnksIGRldmVsb3BlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPlpleWQgQmVuLUhhbGltPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPkdOVSByZWFkbGluZTwvTGl0ZXJhbD4gbGlicmFyeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHVzZXIgaW50ZXJhY3Rpb24gaXMgY29tbWFuZCBsaW5lIGJhc2VkIC0gVGhlIHVzZXIgZW50ZXJzIGEgY29tbWFuZAorbGluZSwgd2hpY2ggY29uc2lzdHMgb2YgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmQ8L0xpdGVyYWw+IGFuZCBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPmFyZ3VtZW50czwvTGl0ZXJhbD4uIFRoaXMgZml0cworbmljZWx5IHdpdGggdGhlIHByb2dyYW0gZmxvdyBjb250cm9sIGRlc2NyaWJlZCBlYXJsaWVyIC0gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZDwvTGl0ZXJhbD4KK2lzIHVzZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gdG8gc2VsZWN0IHRoZSByaWdodCBmdW5jdGlvbiwgYW5kIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5hcmd1bWVudHM8L0xpdGVyYWw+IGFyZSBpbnRlcnByZXRlZCBieSB0aGUgZnVuY3Rpb24gaXRzZWxmLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIG5jdXJzZXMgbGlicmFyeTwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmN1cnNlczwvTGl0ZXJhbD4gbGlicmFyeSBlbmFibGVzIG1lIHRvIGRpdmlkZSB0aGUgc2NyZWVuIGludG8gIndpbmRvd3MiLgorVGhlIG1haW4gYWR2YW50YWdlIGlzIHRoYXQgSSB0cmVhdCB0aGUgIndpbmRvdyIgaW4gYSB2aXJ0dWFsIHdheSwgYXNraW5nCit0aGUgbmN1cnNlcyBsaWJyYXJ5IHRvICJ3cml0ZSB0byBhIHdpbmRvdyIuIEhvd2V2ZXIsIHRoZSBuY3Vyc2VzCitsaWJyYXJ5IGludGVybmFsbHkgYnVmZmVycyB0aGUgcmVxdWVzdHMsIGFuZCBub3RoaW5nIGlzIGFjdHVhbGx5IHBhc3NlZCB0byB0aGUKK3Rlcm1pbmFsIHVudGlsIGFuIGV4cGxpY2l0IHJlZnJlc2ggaXMgcmVxdWVzdGVkLiBXaGVuIHRoZSByZWZyZXNoIHJlcXVlc3QgaXMKK21hZGUsIG5jdXJzZXMgY29tcGFyZXMgdGhlIGN1cnJlbnQgdGVybWluYWwgc3RhdGUgKGFzIGtub3duIGluIHRoZSBsYXN0IHRpbWUKK3RoYXQgYSByZWZyZXNoIHdhcyBkb25lKSB3aXRoIHRoZSBuZXcgdG8gYmUgc2hvd24gc3RhdGUsIGFuZCBwYXNzZXMgdG8gdGhlCit0ZXJtaW5hbCB0aGUgbWluaW1hbCBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXkuIEFzIGEKK3Jlc3VsdCwgdGhlIGRpc3BsYXkgb3V0cHV0IGlzIG9wdGltaXplZCBiZWhpbmQgdGhlIHNjZW5lcyBieSB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+bmN1cnNlczwvTGl0ZXJhbD4gbGlicmFyeSwgd2hpbGUgSSBjYW4gc3RpbGwgdHJlYXQgaXQgaW4gYSB2aXJ0dWFsIHdheS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGVyZSBhcmUgdHdvIGJhc2ljIGNvbmNlcHRzIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IGxpYnJhcnk6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUEgd2luZG93LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQSBwYWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworQSB3aW5kb3cgY2FuIGJlIG5vIGJpZ2dlciB0aGFuIHRoZSBhY3R1YWwgdGVybWluYWwgc2l6ZS4gQSBwYWQsIGhvd2V2ZXIsIGlzCitub3QgbGltaXRlZCBpbiBpdHMgc2l6ZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgdXNlciBzY3JlZW4gaXMgZGl2aWRlZCBieSBFWFQyRUQgaW50byB0aHJlZSB3aW5kb3dzIGFuZCBvbmUgcGFkOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaXRsZSB3aW5kb3cuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlTdGF0dXMgd2luZG93LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJTWFpbiBkaXNwbGF5IHBhZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNvbW1hbmQgd2luZG93LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij50aXRsZSB3aW5kb3c8L0xpdGVyYWw+IGlzIHN0YXRpYyAtIEl0IGp1c3QgZGlzcGxheXMgdGhlIGN1cnJlbnQgdmVyc2lvbgorb2YgRVhUMkVELgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSB1c2VyIGludGVyYWN0aW9uIGlzIGRvbmUgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZCB3aW5kb3c8L0xpdGVyYWw+LiBUaGUgdXNlciBlbnRlcnMgYQorPExpdGVyYWwgcmVtYXA9InR0Ij5jb21tYW5kIGxpbmU8L0xpdGVyYWw+LCBmZWVkYmFjayBpcyB1c3VhbGx5IGRpc3BsYXllZCB0aGVyZSwgYW5kIHRoZW4gcmVsZXZhbnQKK2RhdGEgaXMgdXN1YWxseSBkaXNwbGF5ZWQgaW4gdGhlIG1haW4gZGlzcGxheSBhbmQgaW4gdGhlIHN0YXR1cyB3aW5kb3cuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbiBkaXNwbGF5PC9MaXRlcmFsPiBpcyB1c2luZyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGFkPC9MaXRlcmFsPiBpbnN0ZWFkIG9mIGEgd2luZG93IGJlY2F1c2UKK3RoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gd2hpY2ggaXMgd3JpdHRlbiB0byBpdCBpcyBub3Qga25vd24gaW4gYWR2YW5jZS4KK1RoZXJlZm9yLCB0aGUgdXNlciB0cmVhdHMgdGhlIG1haW4gZGlzcGxheSBhcyBhICJ3aW5kb3ciIGludG8gYSBiaWdnZXIKK2Rpc3BsYXkgYW5kIGNhbiA8TGl0ZXJhbCByZW1hcD0idHQiPnNjcm9sbCB2ZXJ0aWNhbGx5PC9MaXRlcmFsPiB1c2luZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5wZ2RuPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5wZ3VwPC9MaXRlcmFsPgorY29tbWFuZHMuIEFsdGhvdWdoIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnBhZDwvTGl0ZXJhbD4gbWVjaGFuaXNtIGVuYWJsZXMgbWUgdG8gdXNlIGhvcml6b250YWwKK3Njcm9sbGluZywgSSBoYXZlIG5vdCB1dGlsaXplZCB0aGlzLgorPC9QYXJhPgorCis8UGFyYT4KK1doZW4gSSBuZWVkIHRvIHNob3cgc29tZXRoaW5nIHRvIHRoZSB1c2VyLCBJIHVzZSB0aGUgbmN1cnNlcyA8TGl0ZXJhbCByZW1hcD0idHQiPndwcmludHc8L0xpdGVyYWw+Citjb21tYW5kLiBUaGVuIGFuIGV4cGxpY2l0IHJlZnJlc2ggY29tbWFuZCBpcyByZXF1aXJlZC4gQXMgZXhwbGFpbmVkIGJlZm9yZSwKK3RoZSByZWZyZXNoIGNvbW1hbmRzIGlzIHBpcGVkIHRocm91Z2ggPExpdGVyYWwgcmVtYXA9InR0Ij53aW4uYzwvTGl0ZXJhbD4uIEZvciBleGFtcGxlLCB0byB1cGRhdGUKK3RoZSBjb21tYW5kIHdpbmRvdywgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWZyZXNoJmxvd2Jhcjtjb21tYW5kJmxvd2Jhcjt3aW4gKCk8L0xpdGVyYWw+IGlzIHVzZWQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgcmVhZGxpbmUgbGlicmFyeTwvVGl0bGU+CisKKzxQYXJhPgorQXZuZXIgc3VnZ2VzdGVkIG1lIHRvIGludGVncmF0ZSB0aGUgR05VIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVhZGxpbmU8L0xpdGVyYWw+IGxpYnJhcnkgaW4gbXkgcHJvamVjdC4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlYWRsaW5lPC9MaXRlcmFsPiBsaWJyYXJ5IGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgcHJvZ3JhbXMgd2hpY2ggdXNlCitjb21tYW5kIGxpbmUgaW50ZXJmYWNlLiBJdCBwcm92aWRlcyBhIG5pY2UgcGFja2FnZSBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbW1hbmQgbGluZSBlZGl0aW5nCit0b29sczwvTGl0ZXJhbD4gLSBJbnNlcnRpbmcsIGRlbGV0aW5nIHdvcmRzLCBhbmQgdGhlIHdob2xlIHBhY2thZ2Ugb2YgZWRpdGluZyB0b29scword2hpY2ggYXJlIG5vcm1hbGx5IGF2YWlsYWJsZSBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5iYXNoPC9MaXRlcmFsPiBzaGVsbCAoUmVmZXIgdG8gdGhlIHJlYWRsaW5lCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gSW4gYWRkaXRpb24sIEkgdXRpbGl6ZWQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGlzdG9yeTwvTGl0ZXJhbD4KK2ZlYXR1cmUgb2YgdGhlIHJlYWRsaW5lIGxpYnJhcnkgLSBUaGUgZW50ZXJlZCBjb21tYW5kcyBhcmUgc2F2ZWQgaW4gYQorPExpdGVyYWwgcmVtYXA9InR0Ij5jb21tYW5kIGhpc3Rvcnk8L0xpdGVyYWw+LCBhbmQgY2FuIGJlIGNhbGxlZCBsYXRlciBieSB3aGF0ZXZlciBtZWFucyB0aGF0IHRoZQorcmVhZGxpbmUgcGFja2FnZSBwcm92aWRlcy4gQ29tbWFuZCBjb21wbGV0aW9uIGlzIGFsc28gc3VwcG9ydGVkIC0gV2hlbiB0aGUKK3VzZXIgZW50ZXJzIGEgcGFydGlhbCBjb21tYW5kIG5hbWUsIEVYVDJFRCB3aWxsIHByb3ZpZGUgdGhlIHJlYWRsaW5lIGxpYnJhcnkKK3dpdGggdGhlIHBvc3NpYmxlIGNvbXBsZXRpb25zLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+UG9zc2libGUgc3VwcG9ydCBvZiBvdGhlciBmaWxlc3lzdGVtczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGVudGlyZSBleHQyIGxheWVyIGlzIHByb3ZpZGVkIHRocm91Z2ggc3BlY2lmaWMgb2JqZWN0cy4gR2l2ZW4gYW5vdGhlcgorc2V0IG9mIG9iamVjdHMsIHN1cHBvcnQgb2Ygb3RoZXIgZmlsZXN5c3RlbSBjYW4gYmUgcHJvdmlkZWQgdXNpbmcgdGhlIHNhbWUKK2Rpc3BhdGNoaW5nIG1lY2hhbmlzbS4gSW4gb3JkZXIgdG8gcHJlcGFyZSB0aGUgc3VyZmFjZSBmb3IgdGhpcyBvcHRpb24sIEkKK2FkZGVkIHlldCBhbm90aGVyIGxheWVyIHRvIHRoZSB0d28tbGF5ZXIgc3RydWN0dXJlIHByZXNlbnRlZCBlYXJsaWVyLiBFWFQyRUQKK2NvbW1hbmRzIG5vdyBjb25zaXN0IG9mIHRocmVlIGxheWVyczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGdlbmVyYWwgY29tbWFuZHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGV4dDIgb2JqZWN0IHNwZWNpZmljIGNvbW1hbmRzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK1RoZSBnZW5lcmFsIGNvbW1hbmRzIGFyZSBwcm92aWRlZCBieSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4gc291cmNlIGZpbGUsCithbmQgYXJlIGFsd2F5cyBhdmFpbGFibGUuIFRoZSB0d28gb3RoZXIgbGV2ZWxzIGFyZSBub3QgcHJlc2VudCB3aGVuIEVYVDJFRAorbG9hZHMgLSBUaGV5IGFyZSBkeW5hbWljYWxseSBhZGRlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQuYzwvTGl0ZXJhbD4gd2hlbiBFWFQyRUQgZGV0ZWN0cyBhbgorZXh0MiBmaWxlc3lzdGVtIG9uIHRoZSBkZXZpY2UuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGFic3RyYWN0aW9uIGxldmVscyBwcmVzZW50ZWQgYWJvdmUgaGVscHMgdG8gZXh0ZW5kIEVYVDJFRCB0byBmdWxseQorc3VwcG9ydCBhIG5ldyBmaWxlc3lzdGVtLCB3aXRoIGl0cyBvd24gc3BlY2lmaWMgdHlwZSBjb21tYW5kcy4gCis8L1BhcmE+CisKKzxQYXJhPgorRXZlbiB3aXRob3V0IGFueSBzb3VyY2UgY29kZSBtb2RpZmljYXRpb24sIHRoZSB1c2VyIGlzIGZyZWUgdG8gYWRkIHN0cnVjdHVyZQorZGVmaW5pdGlvbnMgaW4gYSBzZXBhcmF0ZSBmaWxlIChzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSksIAord2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb2JqZWN0cy4gVGhlIGFkZGVkIG9iamVjdHMgd2lsbAorY29uc2lzdCBvbmx5IG9mIHZhcmlhYmxlcywgb2YtY291cnNlLCBhbmQgd2lsbCBiZSB1c2VkIHRocm91Z2ggdGhlIG1vcmUKK3ByaW1pdGl2ZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldDwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0dHlwZTwvTGl0ZXJhbD4gY29tbWFuZHMuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5PbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgY29tbWFuZHM8L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgc2VjdGlvbiBwb2ludHMgb3V0IHNvbWUgdHlwaWNhbCBwcm9ncmFtbWluZyBzdHlsZSB0aGF0IEkgdXNlZCBpbiBtYW55CitwbGFjZXMgYXQgdGhlIGNvZGUuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgZXhwbGljaXQgdXNlIG9mIHRoZSBkaXNwYXRjaCBmdW5jdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHZhcmlvdXMgY29tbWFuZHMgYXJlIHJlYWNoZWQgYnkgdGhlIHVzZXIgdGhyb3VnaCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4KK2Z1bmN0aW9uLiBUaGlzIGlzIG5vdCBzdXJwcmlzaW5nLiBUaGUgZmFjdCB0aGF0IGNhbiBiZSBzdXJwcmlzaW5nLCBhdCBsZWFzdCBpbgorYSBmaXJzdCBsb29rLCBpcyB0aGF0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+eW91J2xsIGZpbmQgdGhlIGRpc3BhdGNoIGNhbGwgaW4gbWFueSBvZiBteQorb3duIGZ1bmN0aW9ucyE8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK0kgYW0gaW4gZmFjdCB1c2luZyBteSBvd24gaW1wbGVtZW50ZWQgZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBoaWdoZXIKK2xldmVsIG9wZXJhdGlvbnMuIEkgYW0gaGVhdmlseSB1c2luZyB0aGUgZmFjdCB0aGF0IHRoZSBkaXNwYXRjaGluZyBtZWNoYW5pc20KK2lzIG9iamVjdCBvcmllbnRlZCBhbnQgdGhhdCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5vdmVycmlkaW5nPC9MaXRlcmFsPiBwcmluY2lwbGUgdGFrZXMgcGxhY2UgYW5kCitzZWxlY3RzIHRoZSBwcm9wZXIgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNldmVyYWwgY29tbWFuZHMgd2l0aCB0aGUgc2FtZSBuYW1lCithcmUgYWNjZXNzaWJsZS4KKzwvUGFyYT4KKworPFBhcmE+CitTb21ldGltZXMsIGhvd2V2ZXIsIEkgY2FsbCB0aGUgZXhwbGljaXQgY29tbWFuZCBkaXJlY3RseSwgd2l0aG91dCBwYXNzaW5nCit0aHJvdWdoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2g8L0xpdGVyYWw+LiBUaGlzIGlzIHR5cGljYWxseSBkb25lIHdoZW4gSSB3YW50IHRvIGJ5cGFzcyB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+b3ZlcnJpZGluZzwvTGl0ZXJhbD4gZWZmZWN0LgorPC9QYXJhPgorCis8UGFyYT4KKworVGhpcyBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGdsb2JhbCBjZCBjb21tYW5kCithbmQgdGhlIGRpciBvYmplY3Qgc3BlY2lmaWMgY2QgY29tbWFuZC4gWW91IHdpbGwgc2VlIHRoZXJlIHRoYXQgaW4gb3JkZXIKK3RvIGltcGxlbWVudCB0aGUgImVudGlyZSIgY2QgY29tbWFuZCwgdGhlIHR5cGUgc3BlY2lmaWMgY2QgY29tbWFuZCB1c2VzIGJvdGgKK2EgZGlzcGF0Y2hpbmcgbWVjaGFuaXNtIHRvIGNhbGwgaXRzZWxmIHJlY3Vyc2l2ZWx5IGlmIGEgcmVsYXRpdmUgcGF0aCBpcwordXNlZCwgb3IgYSBkaXJlY3QgY2FsbCBvZiB0aGUgZ2VuZXJhbCBjZCBoYW5kbGluZyBmdW5jdGlvbiBpZiBhbiBleHBsaWNpdCBwYXRoCitpcyB1c2VkLgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5QYXNzaW5nIGluZm9ybWF0aW9uIGJldHdlZW4gaGFuZGxpbmcgZnVuY3Rpb25zPC9UaXRsZT4KKworPFBhcmE+CitUeXBpY2FsbHksIGV2ZXJ5IHNvdXJjZSBjb2RlIGZpbGUgd2hpY2ggaGFuZGxlcyBvbmUgb2JqZWN0IHR5cGUgaGFzIGEgZ2xvYmFsCitzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBpdCB3aGljaCBpcyB1c2VkIGJ5IG1vc3Qgb2YgdGhlCitmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLiBUaGlzIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSB2YXJpb3VzCitmdW5jdGlvbnMgdGhlcmUsIGFuZCB0byBwaHlzaWNhbGx5IHByb3ZpZGUgdGhlIGxpbmsgdG8gb3RoZXIgcmVsYXRlZAorb2JqZWN0cywgdHlwaWNhbGx5IGZvciBpbml0aWFsaXphdGlvbiB1c2UuCis8L1BhcmE+CisKKzxQYXJhPgorCitGb3IgZXhhbXBsZSwgaW4gb3JkZXIgdG8gZWRpdCBhIGZpbGUsIGluZm9ybWF0aW9uIGFib3V0IHRoZQoraW5vZGUgaXMgbmVlZGVkIC0gVGhlIGZpbGUgY29tbWFuZCBpcyBhdmFpbGFibGUgb25seSB3aGVuIGVkaXRpbmcgYW4KK2lub2RlLiBXaGVuIHRoZSBmaWxlIGNvbW1hbmQgaXMgaXNzdWVkLCB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gKGZvdW5kLAorYWNjb3JkaW5nIHRvIHRoZSBzb3VyY2UgZGl2aXNpb24gb3V0bGluZWQgYWJvdmUsIGluIGlub2RlX2NvbS5jKSB3aWxsCitzdG9yZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbm9kZSBpbiBhIHNwZWNpZmljIHN0cnVjdHVyZQorb2YgdHlwZSBzdHJ1Y3RfZmlsZV9pbmZvIHdoaWNoIHdpbGwgYmUgYXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIGZpbGVfY29tLmMKK2Z1bmN0aW9ucy4gT25seSB0aGVuIGl0IHdpbGwgc2V0IHRoZSB0eXBlIHRvIGZpbGUuIFRoaXMgaXMgYWxzbyB0aGUgcmVhc29uCit0aGF0IGEgZGlyZWN0IGFzeW5jaHJvbmljIHNldCBvZiB0aGUgb2JqZWN0IHR5cGUgdG8gYSBmaWxlIHRocm91Z2ggYSBzZXR0eXBlCitjb21tYW5kIHdpbGwgZmFpbCAtIFRoZSBhYm92ZSBkYXRhIHN0cnVjdHVyZSB3aWxsIG5vdCBiZSBpbml0aWFsaXplZAorcHJvcGVybHkgYmVjYXVzZSB0aGUgdXNlciBuZXZlciB3YXMgYXQgdGhlIGlub2RlIG9mIHRoZSBmaWxlLiAKKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+QSB2ZXJ5IHNpbXBsaWZpZWQgb3ZlcnZpZXcgb2YgYSB0eXBpY2FsIGNvbW1hbmQgaGFuZGxpbmcgZnVuY3Rpb248L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgaXMgYSB2ZXJ5IHNpbXBsaWZpZWQgb3ZlcnZpZXcuIERldGFpbGVkIGluZm9ybWF0aW9uIHdpbGwgZm9sbG93Cit3aGVyZSBhcHByb3ByaWF0ZS4KKzwvUGFyYT4KKworPFNlY3QzPgorPFRpdGxlPlRoZSBwcm90b3R5cGUgb2YgYSB0eXBpY2FsIGhhbmRsaW5nIGZ1bmN0aW9uPC9UaXRsZT4KKworPFBhcmE+CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisgCUkgY2hvc2UgYSB1bmlmaWVkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmFtaW5nIGNvbnZlbnRpb248L0xpdGVyYWw+IGZvciB0aGUgdmFyaW91cyBvYmplY3QKK3NwZWNpZmljIGNvbW1hbmRzLiBJdCBpcyBwZXJoYXBzIGJlc3Qgc2hvd2VkIHdpdGggYW4gZXhhbXBsZToKKworVGhlIHByb3RvdHlwZSBvZiB0aGUgaGFuZGxpbmcgZnVuY3Rpb24gb2YgdGhlIGNvbW1hbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPiBvZgordGhlIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiBpczoKKworPFNjcmVlbj4KKwkJZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKTsKKwkKKzwvU2NyZWVuPgorCisKK0ZvciBvdGhlciB0eXBlcyBhbmQgY29tbWFuZHMsIHRoZSB3b3JkcyA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQ8L0xpdGVyYWw+CitzaG91bGQgCWJlIHJlcGxhY2VkIGFjY29yZGluZ2x5LgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzIHN5bnRheCBpcyBzaW1pbGFyLiBGb3IgZXhhbXBsZSwgdGhlIGV4dDIKK2dlbmVyYWwgY29tbWFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyPC9MaXRlcmFsPiByZXN1bHRzIGluIGNhbGxpbmc6CisKKzxTY3JlZW4+CisJCWV4dGVybiB2b2lkIHR5cGVfZXh0Ml9fX3N1cGVyIChjaGFyICpjb21tYW5kX2xpbmUpOworCQorPC9TY3JlZW4+CisKK1Rob3NlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7Y29tLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGdlbmVyYWwgY29tbWFuZHMgc3ludGF4IGlzIGV2ZW4gc2ltcGxlciAtIFRoZSBuYW1lIG9mIHRoZQoraGFuZGxpbmcgZnVuY3Rpb24gaXMgZXhhY3RseSB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZHMuIFRob3NlCitmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwmbG93YmFyO2NvbS5jPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPFNlY3QzPgorPFRpdGxlPiJUeXBpY2FsIiBhbGdvcml0aG08L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgc2VjdGlvbiBjYW4ndCBvZi1jb3Vyc2UgcHJvdmlkZSBtZWFuaW5nZnVsIGluZm9ybWF0aW9uIC0gRWFjaAorY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LCBidXQgdGhlIGZvbGxvd2luZyBmcmFtZSBpcyB0eXBpY2FsOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGFuYWx5emUgdGhlbS4gUmV0dXJuIHdpdGggYW4gZXJyb3IKK21lc3NhZ2UgaWYgdGhlIHN5bnRheCBpcyB3cm9uZy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCSJBY3QgYWNjb3JkaW5nbHkiLCBwZXJoYXBzIG1ha2luZyB1c2Ugb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSBhdmFpbGFibGUKK3RvIHRoaXMgdHlwZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzZSBzb21lIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzcGF0Y2ggLyBkaXJlY3QgPC9MaXRlcmFsPiBjYWxscyBpbiBvcmRlciB0byBwYXNzIGNvbnRyb2wgdG8KK290aGVyIGxvd2VyLWxldmVsIHVzZXIgY29tbWFuZHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlTb21ldGltZXMgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gdG8gdGhlIG9iamVjdCdzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4gY29tbWFuZCB0bworZGlzcGxheSB0aGUgcmVzdWx0aW5nIGRhdGEgdG8gdGhlIHVzZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCitJIHRvbGQgeW91IGl0IGlzIG1lYW5pbmdsZXNzIDotKQorPC9QYXJhPgorCis8L1NlY3QzPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+SW5pdGlhbGl6YXRpb24gb3ZlcnZpZXc8L1RpdGxlPgorCis8UGFyYT4KK0luIHRoaXMgc2VjdGlvbiBJIHdpbGwgZGlzY3VzcyBzb21lIGFzcGVjdHMgb2YgdGhlIHZhcmlvdXMgaW5pdGlhbGl6YXRpb24KK3JvdXRpbmVzIGF2YWlsYWJsZSBpbiB0aGUgc291cmNlIGZpbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0LmM8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VXBvbiBzdGFydHVwPC9UaXRsZT4KKworPFBhcmE+CitGb2xsb3dzIHRoZSBmdW5jdGlvbiA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW48L0xpdGVyYWw+LCBhcHBlYXJpbmcgb2YtY291cnNlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbi5jPC9MaXRlcmFsPjoKKworCis8UHJvZ3JhbUxpc3Rpbmc+CitpbnQgbWFpbiAodm9pZCkKKworeworCWlmICghaW5pdCAoKSkgcmV0dXJuICgwKTsJLyogUGVyZm9ybSBzb21lIGluaXRpYWwgaW5pdGlhbGl6YXRpb24gKi8KKwkJCQkJLyogUXVpdCBpZiBmYWlsZWQgKi8KKworCXBhcnNlciAoKTsJCQkvKiBHZXQgYW5kIHBhcnNlIHVzZXIgY29tbWFuZHMgKi8KKwkKKwlwcmVwYXJlX3RvX2Nsb3NlICgpOwkJLyogRG8gc29tZSBjbGVhbnVwICovCisJcHJpbnRmICgiUXVpdHRpbmcgLi4uXG4iKTsKKwlyZXR1cm4gKDEpOwkJCS8qIEFuZCBxdWl0ICovCit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHR3byBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIHdoaWNoIGFyZSBjYWxsZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5tYWluPC9MaXRlcmFsPiwgYXJlOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlpbml0Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlwcmVwYXJlJmxvd2Jhcjt0byZsb3diYXI7Y2xvc2UKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgaW5pdCBmdW5jdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0PC9MaXRlcmFsPiBpcyBjYWxsZWQgZnJvbSA8TGl0ZXJhbCByZW1hcD0idHQiPm1haW48L0xpdGVyYWw+IHVwb24gc3RhcnR1cC4gSXQgaW5pdGlhbGl6ZXMgdGhlCitmb2xsb3dpbmcgdGFza3MgLyBzdWJzeXN0ZW1zOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVByb2Nlc3Npbmcgb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dXNlciBjb25maWd1cmF0aW9uIGZpbGU8L0xpdGVyYWw+LCBieSB1c2luZyB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cHJvY2VzcyZsb3diYXI7Y29uZmlndXJhdGlvbiZsb3diYXI7ZmlsZTwvTGl0ZXJhbD4gZnVuY3Rpb24uIEZhaWxpbmcgdG8gY29tcGxldGUgdGhlCitjb25maWd1cmF0aW9uIGZpbGUgcHJvY2Vzc2luZyBpcyBjb25zaWRlcmVkIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5mYXRhbCBlcnJvcjwvTGl0ZXJhbD4sCithbmQgRVhUMkVEIGlzIGFib3J0ZWQuIEkgZGlkIGl0IHRoaXMgd2F5IGJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24KK2ZpbGUgaGFzIHNvbWUgc2Vuc2l0aXZlIHVzZXIgb3B0aW9ucyBsaWtlIHdyaXRlIGFjY2VzcyBiZWhhdmlvciwgYW5kCitJIHdhbnRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHVzZXIgaXMgYXdhcmUgb2YgdGhlbS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVJlZ2lzdHJhdGlvbiBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIGNvbW1hbmRzPC9MaXRlcmFsPiB0aHJvdWdoIHRoZSB1c2Ugb2YKK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFkZCZsb3diYXI7Z2VuZXJhbCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+IGZ1bmN0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUmVzZXQgb2YgdGhlIG9iamVjdCBtZW1vcnkgcm90YXRpbmcgbGlmbyBzdHJ1Y3R1cmUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZXNldCBvZiB0aGUgZGV2aWNlIHBhcmFtZXRlcnMgYW5kIG9mIHRoZSBjdXJyZW50IHR5cGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbml0aWFsaXphdGlvbiBvZiB0aGUgd2luZG93cyBzdWJzeXN0ZW0gLSBUaGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlCituY3Vyc2VzIGxpYnJhcnkgYW5kIEVYVDJFRCwgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQmbG93YmFyO3dpbmRvd3M8L0xpdGVyYWw+CitmdW5jdGlvbiwgYXZhaWxhYmxlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+d2luLmM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5pdGlhbGl6YXRpb24gb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSByZWFkbGluZSBsaWJyYXJ5IGFuZAorRVhUMkVELCB0aHJvdWdoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdCZsb3diYXI7cmVhZGxpbmU8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5pdGlhbGl6YXRpb24gb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2lnbmFsczwvTGl0ZXJhbD4gc3Vic3lzdGVtLCB0aHJvdWdoCis8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQmbG93YmFyO3NpZ25hbHM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRGlzYWJsaW5nIHdyaXRlIGFjY2Vzcy4gV3JpdGUgYWNjZXNzIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZAordXNpbmcgYSB1c2VyIGNvbW1hbmQsIHRvIHByZXZlbnQgYWNjaWRlbnRhbCB1c2VyIG1pc3Rha2VzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworV2hlbiA8TGl0ZXJhbCByZW1hcD0idHQiPmluaXQ8L0xpdGVyYWw+IGlzIGZpbmlzaGVkLCBpdCBkaXNwYXRjaGVzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhlbHA8L0xpdGVyYWw+IGNvbW1hbmQgaW4gb3JkZXIKK3RvIHNob3cgdGhlIGF2YWlsYWJsZSBjb21tYW5kcyB0byB0aGUgdXNlci4gTm90ZSB0aGF0IHRoZSBleHQyIGxheWVyIGlzIHN0aWxsCitub3QgYWRkZWQ7IEl0IHdpbGwgYmUgYWRkZWQgaWYgYW5kIHdoZW4gRVhUMkVEIHdpbGwgZGV0ZWN0IGFuIGV4dDIKK2ZpbGVzeXN0ZW0gb24gYSBkZXZpY2UuCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgcHJlcGFyZSZsb3diYXI7dG8mbG93YmFyO2Nsb3NlIGZ1bmN0aW9uPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5wcmVwYXJlJmxvd2Jhcjt0byZsb3diYXI7Y2xvc2U8L0xpdGVyYWw+IGZ1bmN0aW9uIHJldmVyc2VzIHNvbWUgb2YgdGhlIGFjdGlvbnMgZG9uZQorZWFybGllciBpbiBFWFQyRUQgYW5kIGZyZWVpbmcgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkuCitTcGVjaWZpY2FsbHksIGl0OgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNsb3NlcyB0aGUgb3BlbiBkZXZpY2UsIGlmIGFueS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVJlbW92ZXMgdGhlIGZpcnN0IGxldmVsIC0gUmVtb3ZpbmcgdGhlIGdlbmVyYWwgY29tbWFuZHMsIHRocm91Z2gKK3RoZSB1c2Ugb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5mcmVlJmxvd2Jhcjt1c2VyJmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4sIHdpdGggYSBwb2ludGVyIHRvIHRoZQorZ2VuZXJhbCZsb3diYXI7Y29tbWFuZHMgc3RydWN0dXJlIGFzIGEgcGFyYW1ldGVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJUmVtb3ZlcyBvZiB0aGUgc2Vjb25kIGxldmVsIC0gUmVtb3ZpbmcgdGhlIGV4dDIgZXh0MiBnZW5lcmFsCitjb21tYW5kcywgaW4gbXVjaCB0aGUgc2FtZSB3YXkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZW1vdmVzIG9mIHRoZSB0aGlyZCBsZXZlbCAtIFJlbW92aW5nIHRoZSBvYmplY3RzIGFuZCB0aGUgb2JqZWN0CitzcGVjaWZpYyBjb21tYW5kcywgYnkgdXNpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij5mcmVlJmxvd2JhcjtzdHJ1Y3QmbG93YmFyO2Rlc2NyaXB0b3JzPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNsb3NlcyB0aGUgd2luZG93IHN1YnN5c3RlbSwgYW5kIGRlYXR0YWNoZXMgRVhUMkVEIGZyb20gdGhlIG5jdXJzZXMKK2xpYnJhcnksIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jbG9zZSZsb3diYXI7d2luZG93czwvTGl0ZXJhbD4gZnVuY3Rpb24sCithdmFpbGFibGUgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij53aW4uYzwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5SZWdpc3RyYXRpb24gb2YgY29tbWFuZHM8L1RpdGxlPgorCis8UGFyYT4KK0FkZGl0aW9uIG9mIGEgdXNlciBjb21tYW5kIGlzIGRvbmUgdGhyb3VnaCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hZGQmbG93YmFyO3VzZXImbG93YmFyO2NvbW1hbmQ8L0xpdGVyYWw+CitmdW5jdGlvbi4gVGhlIHByb3RvdHlwZSBpczoKKworPFNjcmVlbj4KK3ZvaWQgYWRkX3VzZXJfY29tbWFuZCAoc3RydWN0IHN0cnVjdF9jb21tYW5kcyAqcHRyLGNoYXIgKm5hbWUsY2hhcgorKmRlc2NyaXB0aW9uLFBGIGNhbGxiYWNrKTsKKzwvU2NyZWVuPgorCitUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9mIHR5cGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4sIGEgZGVzaXJlZCBuYW1lIGZvciB0aGUgY29tbWFuZCB3aGljaCB3aWxsIGJlIHVzZWQgYnkKK3RoZSB1c2VyIHRvIGlkZW50aWZ5IHRoZSBjb21tYW5kLCBhIHNob3J0IGRlc2NyaXB0aW9uIHdoaWNoIGlzIHV0aWxpemVkIGJ5IHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5oZWxwPC9MaXRlcmFsPiBzdWJzeXN0ZW0sIGFuZCBhIHBvaW50ZXIgdG8gYSBDIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGlmCis8TGl0ZXJhbCByZW1hcD0idHQiPmRpc3BhdGNoPC9MaXRlcmFsPiBkZWNpZGVzIHRoYXQgdGhpcyBjb21tYW5kIHdhcyByZXF1ZXN0ZWQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWRkJmxvd2Jhcjt1c2VyJmxvd2Jhcjtjb21tYW5kPC9MaXRlcmFsPiBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG93IGxldmVsIGZ1bmN0aW9uPC9MaXRlcmFsPiB1c2VkIGluIHRoZSB0aHJlZQorbGV2ZWxzIHRvIGFkZCB1c2VyIGNvbW1hbmRzLiBGb3IgZXhhbXBsZSwgYWRkaXRpb24gb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MgorZ2VuZXJhbCBjb21tYW5kcyBpcyBkb25lIGJ5OjwvTGl0ZXJhbD4KKworPFByb2dyYW1MaXN0aW5nPgordm9pZCBhZGRfZXh0Ml9nZW5lcmFsX2NvbW1hbmRzICh2b2lkKQorCit7CisJYWRkX3VzZXJfY29tbWFuZCAoJmFtcDtleHQyX2NvbW1hbmRzLCJzdXBlciIsIk1vdmVzIHRvIHRoZSBzdXBlcmJsb2NrIG9mIHRoZSBmaWxlc3lzdGVtIix0eXBlX2V4dDJfX19zdXBlcik7CisJYWRkX3VzZXJfY29tbWFuZCAoJmFtcDtleHQyX2NvbW1hbmRzLCJncm91cCIsIk1vdmVzIHRvIHRoZSBmaXJzdCBncm91cCBkZXNjcmlwdG9yIix0eXBlX2V4dDJfX19ncm91cCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmFtcDtleHQyX2NvbW1hbmRzLCJjZCIsIk1vdmVzIHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIix0eXBlX2V4dDJfX19jZCk7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5SZWdpc3RyYXRpb24gb2Ygb2JqZWN0czwvVGl0bGU+CisKKzxQYXJhPgorUmVnaXN0cmF0aW9uIG9mIG9iamVjdHMgaXMgYmFzZWQsIGFzIGV4cGxhaW5lZCBlYXJsaWVyLCBvbiB0aGUgImNvbXBpbGF0aW9uIgorb2YgYW4gZXh0ZXJuYWwgdXNlciBmaWxlLCB3aGljaCBoYXMgYSBzeW50YXggc2ltaWxhciB0byB0aGUgQyBsYW5ndWFnZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3Q8L0xpdGVyYWw+IGtleXdvcmQuIFRoZSBwcmltaXRpdmUgcGFyc2VyIEkgaGF2ZSBpbXBsZW1lbnRlZCBkZXRlY3RzIHRoZQorZGVmaW5pdGlvbiBvZiBzdHJ1Y3R1cmVzLCBhbmQgY2FsbHMgc29tZSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gYWN0dWFsbHkKK3JlZ2lzdGVyIHRoZSBuZXcgZGV0ZWN0ZWQgb2JqZWN0LiBUaGUgcGFyc2VyJ3MgcHJvdG90eXBlIGlzOgorCis8U2NyZWVuPgoraW50IHNldF9zdHJ1Y3RfZGVzY3JpcHRvcnMgKGNoYXIgKmZpbGVfbmFtZSkKKzwvU2NyZWVuPgorCitJdCBvcGVucyB0aGUgZ2l2ZW4gZmlsZSBuYW1lLCBhbmQgY2FsbHMsIHdoZW4gYXBwcm9wcmlhdGU6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWFkZCZsb3diYXI7bmV3Jmxvd2JhcjtkZXNjcmlwdG9yCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlhZGQmbG93YmFyO25ldyZsb3diYXI7dmFyaWFibGUKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8TGl0ZXJhbCByZW1hcD0idHQiPmFkZCZsb3diYXI7bmV3Jmxvd2JhcjtkZXNjcmlwdG9yPC9MaXRlcmFsPiBpcyBhIGxvdyBsZXZlbCBmdW5jdGlvbiB3aGljaCBhZGRzIGEgbmV3IGRlc2NyaXB0b3IKK3RvIHRoZSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBvYmplY3RzLiBJdCB3aWxsIHRoZW4gY2FsbAorPExpdGVyYWwgcmVtYXA9InR0Ij5maWxsJmxvd2Jhcjt0eXBlJmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4sIHdoaWNoIHdpbGwgYWRkIHNwZWNpZmljIGNvbW1hbmRzIHRvIHRoZSBvYmplY3QsCitpZiB0aGUgb2JqZWN0IGlzIGtub3duLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YWRkJmxvd2JhcjtuZXcmbG93YmFyO3ZhcmlhYmxlPC9MaXRlcmFsPiB3aWxsIGFkZCBhIG5ldyB2YXJpYWJsZSBvZiB0aGUgcmVxdWVzdGVkIGxlbmd0aCB0byB0aGUKK3NwZWNpZmllZCBkZXNjcmlwdG9yLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+SW5pdGlhbGl6YXRpb24gdXBvbiBzcGVjaWZpY2F0aW9uIG9mIGEgZGV2aWNlPC9UaXRsZT4KKworPFBhcmE+CitXaGVuIHRoZSBnZW5lcmFsIGNvbW1hbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRkZXZpY2U8L0xpdGVyYWw+IGlzIHVzZWQgdG8gb3BlbiBhIGRldmljZSwgc29tZQoraW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdGFrZXMgcGxhY2UsIHdoaWNoIGlzIGludGVuZGVkIHRvIGRldGVybWluZSB0d28KK2ZhY3RvcnM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUFyZSB3ZSBkZWFsaW5nIHdpdGggYW4gZXh0MiBmaWxlc3lzdGVtID8KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdoYXQgYXJlIHRoZSBiYXNpYyBmaWxlc3lzdGVtIHBhcmFtZXRlcnMsIHN1Y2ggYXMgaXRzIHRvdGFsIHNpemUgYW5kCitpdHMgYmxvY2sgc2l6ZSA/Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworVGhpcyBxdWVzdGlvbnMgYXJlIGFuc3dlcmVkIGJ5IHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldCZsb3diYXI7ZmlsZSZsb3diYXI7c3lzdGVtJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiwgcG9zc2libHkKK3VzaW5nIHNvbWUgPExpdGVyYWwgcmVtYXA9InR0Ij5oZWxwIGZyb20gdGhlIHVzZXI8L0xpdGVyYWw+LCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCitUaGUgYW5zd2VycyBhcmUgcGxhY2VkIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gc3RydWN0dXJlLCB3aGljaCBpcyBvZgordHlwZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7ZmlsZSZsb3diYXI7c3lzdGVtJmxvd2JhcjtpbmZvPC9MaXRlcmFsPjoKKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IHN0cnVjdF9maWxlX3N5c3RlbV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGZpbGVfc3lzdGVtX3NpemU7CisJdW5zaWduZWQgbG9uZyBzdXBlcl9ibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9ncm91cF9kZXNjX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGdyb3Vwc19jb3VudDsKKwl1bnNpZ25lZCBsb25nIGlub2Rlc19wZXJfYmxvY2s7CisJdW5zaWduZWQgbG9uZyBibG9ja3NfcGVyX2dyb3VwOwkJLyogVGhlIG5hbWUgaXMgbWlzbGVhZGluZzsgYmV3YXJlICovCisJdW5zaWduZWQgbG9uZyBub19ibG9ja3NfaW5fZ3JvdXA7CisJdW5zaWduZWQgc2hvcnQgYmxvY2tfc2l6ZTsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBzdXBlcl9ibG9jazsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorQXV0b2RldGVjdGlvbiBvZiBhbiBleHQyIGZpbGVzeXN0ZW0gaXMgdXN1YWxseSByZWNvbW1lbmRlZC4gSG93ZXZlciwgb24gYSBkYW1hZ2VkCitmaWxlc3lzdGVtIEkgY2FuJ3QgYXNzdXJlIGEgc3VjY2Vzcy4gVGhhdCdzIHdlcmUgdGhlIHVzZXIgY29tZXMgaW4gLSBIZSBjYW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+b3ZlcnJpZGU8L0xpdGVyYWw+IHRoZSBhdXRvIGRldGVjdGlvbiBwcm9jZWR1cmUgYW5kIGZvcmNlIGFuIGV4dDIgZmlsZXN5c3RlbSwgYnkKK3NlbGVjdGluZyB0aGUgcHJvcGVyIG9wdGlvbnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKzwvUGFyYT4KKworPFBhcmE+CitJZiBhdXRvIGRldGVjdGlvbiBzdWNjZWVkcywgdGhlIHNlY29uZCBxdWVzdGlvbiBhYm92ZSBpcyBhdXRvbWF0aWNhbGx5CithbnN3ZXJlZCAtIEkgZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBJbgorYW55IGNhc2UsIGRlZmF1bHQgcGFyYW1ldGVycyBjYW4gYmUgc3VwcGxpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQKK3RoZSB1c2VyIGNhbiBzZWxlY3QgdGhlIHJlcXVpcmVkIGJlaGF2aW9yLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHdlIGRlY2lkZSB0byB0cmVhdCB0aGUgZmlsZXN5c3RlbSBhcyBhbiBleHQyIGZpbGVzeXN0ZW0sIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVnaXN0cmF0aW9uIG9mCit0aGUgZXh0MiBzcGVjaWZpYyBvYmplY3RzPC9MaXRlcmFsPiBpcyBkb25lIGF0IHRoaXMgcG9pbnQsIGJ5IGNhbGxpbmcgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnNldCZsb3diYXI7c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yczwvTGl0ZXJhbD4gb3V0bGluZWQgZWFybGllciwgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZQord2hpY2ggZGVzY3JpYmVzIHRoZSBleHQyIG9iamVjdHMsIGFuZCBpcyBiYXNpY2FsbHkgYmFzZWQgb24gdGhlIGV4dDIgc291cmNlcworbWFpbiBpbmNsdWRlIGZpbGUuIEF0IHRoaXMgcG9pbnQsIEVYVDJFRCBjYW4gYmUgZnVsbHkgdXNlZCBieSB0aGUgdXNlci4KKzwvUGFyYT4KKworPFBhcmE+CitJZiB3ZSBkbyBub3QgcmVnaXN0ZXIgdGhlIGV4dDIgc3BlY2lmaWMgb2JqZWN0cywgdGhlIHVzZXIgY2FuIHN0aWxsIHByb3ZpZGUKK29iamVjdCBkZWZpbml0aW9ucyBpbiBhIHNlcGFyYXRlIGZpbGUsIGFuZCB3aWxsIGJlIGFibGUgdG8gdXNlIEVYVDJFRCBpbiBhCis8TGl0ZXJhbCByZW1hcD0idHQiPmxpbWl0ZWQgZm9ybTwvTGl0ZXJhbD4sIGJ1dCBtb3JlIHNvcGhpc3RpY2F0ZWQgdGhhbiBhIHNpbXBsZSBoZXggZWRpdG9yLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+bWFpbi5jPC9UaXRsZT4KKworPFBhcmE+CitBcyBkZXNjcmliZWQgZWFybGllciwgPExpdGVyYWwgcmVtYXA9InR0Ij5tYWluLmM8L0xpdGVyYWw+IGlzIHVzZWQgYXMgYSBmcm9udC1oZWFkIHRvIHRoZSBlbnRpcmUKK3Byb2dyYW0uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbi5jPC9MaXRlcmFsPiBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIG1haW4gcm91dGluZTwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbjwvTGl0ZXJhbD4gcm91dGluZSB3YXMgZGlzcGxheWVkIGFib3ZlLiBJdHMgdGFzayBpcyB0byBwYXNzIGNvbnRyb2wgdG8KK3RoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhbmQgdG8gdGhlIHBhcnNlci4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBwYXJzZXI8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBwYXJzZXIgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnBhcnNlcjwvTGl0ZXJhbD4gZnVuY3Rpb24sIHdoaWNoIHJlYWRzIHRoZSBjb21tYW5kIGxpbmUgZnJvbSB0aGUKK3VzZXIgYW5kIHNhdmVzIGl0IGluIHJlYWRsaW5lJ3MgaGlzdG9yeSBidWZmZXIgYW5kIGluIHRoZSBpbnRlcm5hbAorbGFzdC1jb21tYW5kIGJ1ZmZlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnBhcnNlJmxvd2Jhcjt3b3JkPC9MaXRlcmFsPiBmdW5jdGlvbiwgd2hpY2ggcmVjZWl2ZXMgYSBzdHJpbmcgYW5kIHBhcnNlcwordGhlIGZpcnN0IHdvcmQgZnJvbSBpdCwgaWdub3Jpbmcgd2hpdGVzcGFjZXMsIGFuZCByZXR1cm5zIGEgcG9pbnRlcgordG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNvbXBsZXRlJmxvd2Jhcjtjb21tYW5kPC9MaXRlcmFsPiBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZCBieSB0aGUgcmVhZGxpbmUKK2xpYnJhcnkgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4gSXQgc2NhbnMgdGhlIGF2YWlsYWJsZSBjb21tYW5kcyBhdAordGhpcyBwb2ludCBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9zc2libGUgY29tcGxldGlvbnMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGRpc3BhdGNoZXI8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBkaXNwYXRjaGVyIHdhcyBhbHJlYWR5IGV4cGxhaW5lZCBpbiB0aGUgZmxvdyBjb250cm9sIHNlY3Rpb24gLSBzZWN0aW9uCis8WFJlZiBMaW5rRW5kPSJmbG93LWNvbnRyb2wiPi4gSXRzIHRhc2sgaXMgdG8gcGFzcyBjb250cm9sIHRvIHRoZSBwcm9wZXIgY29tbWFuZAoraGFuZGxpbmcgZnVuY3Rpb24sIGJhc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUncyBjb21tYW5kLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHNlbGYtc2FuaXR5IGNvbnRyb2w8L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBnZW5lcmFsIGlkZWEgd2FzIHRvIHByb3ZpZGUgYSBjb250cm9sIHN5c3RlbSB3aGljaCB3aWxsIHN1cGVydmlzZSB0aGUKK2ludGVybmFsIHdvcmsgb2YgRVhUMkVELiBTaW5jZSBJIGFtIHByZXR0eSBzdXJlIHRoYXQgYnVncyBleGlzdCwgSSBoYXZlCitkb3VibGUgY2hlY2tlZCBteXNlbGYgaW4gYSBmZXcgaW5zdGFuY2VzLCBhbmQgaXNzdWVkIGFuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW50ZXJuYWwKK2Vycm9yPC9MaXRlcmFsPiB3YXJuaW5nIGlmIEkgcmVhY2hlZCB0aGUgY29uY2x1c2lvbiB0aGF0IHNvbWV0aGluZyBpcyBub3QgbG9naWNhbC4KK1RoZSBpbnRlcm5hbCBlcnJvciBpcyByZXBvcnRlZCBieSB0aGUgZnVuY3Rpb24gPExpdGVyYWwgcmVtYXA9InR0Ij5pbnRlcm5hbCZsb3diYXI7ZXJyb3I8L0xpdGVyYWw+LAorYXZhaWxhYmxlIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bWFpbi5jPC9MaXRlcmFsPi4gCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHNlbGYgc2FuaXR5IGNoZWNrIGlzIGNvbXBpbGVkIG9ubHkgaWYgdGhlIGNvbXBpbGUgdGltZSBvcHRpb24KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+REVCVUc8L0xpdGVyYWw+IGlzIHNlbGVjdGVkLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIHdpbmRvd3MgaW50ZXJmYWNlPC9UaXRsZT4KKworPFBhcmE+CitTY3JlZW4gaGFuZGxpbmcgYW5kIGludGVyZmFjaW5nIHRvIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IGxpYnJhcnkgaXMgZG9uZSBpbgorPExpdGVyYWwgcmVtYXA9InR0Ij53aW4uYzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5Jbml0aWFsaXphdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorT3BlbmluZyBvZiB0aGUgd2luZG93cyBpcyBkb25lIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdCZsb3diYXI7d2luZG93czwvTGl0ZXJhbD4uIEluCis8TGl0ZXJhbCByZW1hcD0idHQiPmNsb3NlJmxvd2Jhcjt3aW5kb3dzPC9MaXRlcmFsPiwgd2UganVzdCBjbG9zZSBvdXIgd2luZG93cy4gVGhlIHZhcmlvdXMgd2luZG93IGxlbmd0aHMKK3dpdGggYW4gZXhjZXB0aW9uIHRvIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3cgcGFkPC9MaXRlcmFsPiBhcmUgZGVmaW5lZCBpbiB0aGUgbWFpbiBoZWFkZXIgZmlsZS4KK1RoZSByZXN0IG9mIHRoZSBkaXNwbGF5IHdpbGwgYmUgdXNlZCBieSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93IHBhZDwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5EaXNwbGF5IG91dHB1dDwvVGl0bGU+CisKKzxQYXJhPgorRWFjaCBhY3R1YWwgcmVmcmVzaGluZyBvZiB0aGUgdGVybWluYWwgbW9uaXRvciBpcyBkb25lIGJ5IHVzaW5nIHRoZQorYXBwcm9wcmlhdGUgcmVmcmVzaCBmdW5jdGlvbiBmcm9tIHRoaXMgZmlsZTogPExpdGVyYWwgcmVtYXA9InR0Ij5yZWZyZXNoJmxvd2Jhcjt0aXRsZSZsb3diYXI7d2luPC9MaXRlcmFsPiwKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVmcmVzaCZsb3diYXI7c2hvdyZsb3diYXI7d2luPC9MaXRlcmFsPiwgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWZyZXNoJmxvd2JhcjtzaG93Jmxvd2JhcjtwYWQ8L0xpdGVyYWw+IGFuZAorPExpdGVyYWwgcmVtYXA9InR0Ij5yZWZyZXNoJmxvd2Jhcjtjb21tYW5kJmxvd2Jhcjt3aW48L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK1dpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93IHBhZDwvTGl0ZXJhbD4sIGVhY2ggZnVuY3Rpb24gc2ltcGx5IGNhbGxzIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5uY3Vyc2VzIHJlZnJlc2ggY29tbWFuZDwvTGl0ZXJhbD4uIEluIG9yZGVyIHRvIHByb3ZpZGUgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5zY3JvbGxpbmc8L0xpdGVyYWw+IGluCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93IHBhZDwvTGl0ZXJhbD4sIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgaXRzIHN0YXR1cyBpcyBjb25zdGFudGx5IHVwZGF0ZWQKK2J5IHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB3aGljaCBkaXNwbGF5IG91dHB1dCBpbiBpdC4gPExpdGVyYWwgcmVtYXA9InR0Ij5yZWZyZXNoJmxvd2JhcjtzaG93Jmxvd2JhcjtwYWQ8L0xpdGVyYWw+CitwYXNzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byA8TGl0ZXJhbCByZW1hcD0idHQiPm5jdXJzZXM8L0xpdGVyYWw+IHNvIHRoYXQgdGhlIGNvcnJlY3QgcGFydCBvZiB0aGUgcGFkCitpcyBhY3R1YWxseSBjb3BpZWQgdG8gdGhlIGRpc3BsYXkuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGFib3ZlIGluZm9ybWF0aW9uIGlzIHNhdmVkIGluIGEgZ2xvYmFsIHZhcmlhYmxlIG9mIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QKK3N0cnVjdCZsb3diYXI7cGFkJmxvd2JhcjtpbmZvPC9MaXRlcmFsPjoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfcGFkX2luZm8geworCWludCBkaXNwbGF5X2xpbmVzLGRpc3BsYXlfY29sczsKKwlpbnQgbGluZSxjb2w7CisJaW50IG1heF9saW5lLG1heF9jb2w7CisJaW50IGRpc2FibGVfb3V0cHV0OworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlNjcmVlbiByZWRyYXc8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlZHJhdyZsb3diYXI7YWxsPC9MaXRlcmFsPiBmdW5jdGlvbiB3aWxsIGp1c3QgcmVvcGVuIHRoZSB3aW5kb3dzLiBUaGlzIGFjdGlvbiBpcworbmVjZXNzYXJ5IGlmIHRoZSBkaXNwbGF5IGdldHMgZ2FyYmxlZCBmcm9tIHNvbWUgcmVhc29uLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGRpc2sgaW50ZXJmYWNlPC9UaXRsZT4KKworPFBhcmE+CitBbGwgdGhlIGRpc2sgYWN0aXZpdHkgd2l0aCByZWdhcmQgdG8gdGhlIGZpbGVzeXN0ZW0gcGFzc2VzIHRocm91Z2ggdGhlIGZpbGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzay5jPC9MaXRlcmFsPi4gVGhpcyBpcyBkb25lIHRoYXQgd2F5IHRvIHByb3ZpZGUgYWRkaXRpb25hbCBsZXZlbHMgb2Ygc2FmZXR5Citjb25jZXJuaW5nIHRoZSBkaXNrIGFjY2Vzcy4gVGhpcyB3YXksIGdsb2JhbCBkZWNpc2lvbnMgY29uc2lkZXJpbmcgdGhlIGRpc2sKK2NhbiBiZSBlYXNpbHkgYWNjb21wbGlzaGVkLiBUaGUgYmVuZWZpdHMgb2YgdGhpcyBpc29sYXRpb24gd2lsbCBiZWNvbWUgZXZlbgorY2xlYXJlciBpbiB0aGUgbmV4dCBzZWN0aW9ucy4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPkxvdyBsZXZlbCBmdW5jdGlvbnM8L1RpdGxlPgorCis8UGFyYT4KK1JlYWQgcmVxdWVzdHMgYXJlIHVsdGltYXRlbHkgaGFuZGxlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvdyZsb3diYXI7cmVhZDwvTGl0ZXJhbD4gYW5kIHdyaXRlIHJlcXVlc3RzCithcmUgaGFuZGxlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvdyZsb3diYXI7d3JpdGU8L0xpdGVyYWw+LiBUaGV5IGp1c3QgcmVjZWl2ZSB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhCitibG9jaywgdGhlIG9mZnNldCBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgYW5kIHBhc3MgdGhlCityZXF1ZXN0IHRvIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmZyZWFkPC9MaXRlcmFsPiBvciA8TGl0ZXJhbCByZW1hcD0idHQiPmZ3cml0ZTwvTGl0ZXJhbD4gc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5Nb3VudGVkIGZpbGVzeXN0ZW1zPC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgZGVzaWduIGFzc3VtZXMgdGhhdCB0aGUgZWRpdGVkIGZpbGVzeXN0ZW0gaXMgbm90IG1vdW50ZWQuIEV2ZW4gaWYKK2EgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWFzb25hYmx5IHNpbXBsZTwvTGl0ZXJhbD4gd2F5IHRvIGhhbmRsZSBtb3VudGVkIGZpbGVzeXN0ZW1zIGV4aXN0cywgaXQgaXMKK3Byb2JhYmx5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+dG9vIGNvbXBsaWNhdGVkPC9MaXRlcmFsPiA6LSkKKzwvUGFyYT4KKworPFBhcmE+CitXcml0ZSBhY2Nlc3MgdG8gYSBtb3VudGVkIGZpbGVzeXN0ZW0gd2lsbCBiZSBkZW5pZWQuIFJlYWQgYWNjZXNzIGNhbiBiZQorYWxsb3dlZCBieSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24uIFRoZSBtb3VudCBzdGF0dXMgaXMgZGV0ZXJtaW5lZAorYnkgcmVhZGluZyB0aGUgZmlsZSAvZXRjL210YWIuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5Xcml0ZSBhY2Nlc3M8L1RpdGxlPgorCis8UGFyYT4KK1dyaXRlIGFjY2VzcyBpcyB0aGUgbW9zdCBzZW5zaXRpdmUgcGFydCBpbiB0aGUgcHJvZ3JhbS4gVGhpcyBwcm9ncmFtIGlzCitpbnRlbmRlZCBmb3IgPExpdGVyYWwgcmVtYXA9InR0Ij5lZGl0aW5nIGZpbGVzeXN0ZW1zPC9MaXRlcmFsPi4gSXQgaXMgb2J2aW91cyB0aGF0IGEgc21hbGwgbWlzdGFrZQoraW4gdGhpcyByZWdhcmQgY2FuIG1ha2UgdGhlIGZpbGVzeXN0ZW0gbm90IHVzYWJsZSBhbnltb3JlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBmb2xsb3dpbmcgc2FmZXR5IG1lYXN1cmVzIGFyZSBhZGRlZCwgb2YtY291cnNlLCB0byB0aGUgZ2VuZXJhbCBVbml4CitwZXJtaXNzaW9uIHByb3RlY3Rpb24gLSBUaGUgdXNlciBjYW4gYWx3YXlzIGRpc2FibGUgd3JpdGUgYWNjZXNzIG9uIHRoZQorZGV2aWNlIGZpbGUgaXRzZWxmLgorPC9QYXJhPgorCis8UGFyYT4KK0NvbnNpZGVyaW5nIHRoZSB1c2VyLCB0aGUgZm9sbG93aW5nIHNhZmV0eSBtZWFzdXJlcyB3ZXJlIHRha2VuOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBmaWxlc3lzdGVtIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV2ZXI8L0xpdGVyYWw+IG9wZW5lZCB3aXRoIHdyaXRlLWFjY2VzcyBlbmFibGVzLgorUmF0aGVyLCB0aGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgcmVxdWVzdCB0byBlbmFibGUgd3JpdGUtYWNjZXNzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHVzZXIgY2FuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlzYWJsZTwvTGl0ZXJhbD4gd3JpdGUgYWNjZXNzIGVudGlyZWx5IGJ5IHVzaW5nIGEKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbjwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlDaGFuZ2VzIGFyZSBuZXZlciBkb25lIGF1dG9tYXRpY2FsbHkgLSBXaGVuZXZlciB0aGUgdXNlciBtYWtlcworY2hhbmdlcywgdGhleSBhcmUgZG9uZSBpbiBtZW1vcnkuIEFuIGV4cGxpY2l0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+d3JpdGVkYXRhPC9MaXRlcmFsPgorY29tbWFuZCBzaG91bGQgYmUgaXNzdWVkIHRvIG1ha2UgdGhlIGNoYW5nZXMgYWN0aXZlIGluIHRoZSBkaXNrLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworQ29uc2lkZXJpbmcgbXlzZWxmLCBJIHRyaWVkIHRvIHByb3RlY3QgYWdhaW5zdCBteSBidWdzIGJ5OgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlPcGVuaW5nIHRoZSBkZXZpY2UgaW4gcmVhZC1vbmx5IG1vZGUgdW50aWwgYSB3cml0ZSByZXF1ZXN0IGlzCitpc3N1ZWQgYnkgdGhlIHVzZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlMaW1pdGluZyA8TGl0ZXJhbCByZW1hcD0idHQiPmFjdHVhbDwvTGl0ZXJhbD4gZmlsZXN5c3RlbSBhY2Nlc3MgdG8gdHdvIGZ1bmN0aW9ucyBvbmx5IC0KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+bG93Jmxvd2JhcjtyZWFkPC9MaXRlcmFsPiBmb3IgcmVhZGluZywgYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG93Jmxvd2Jhcjt3cml0ZTwvTGl0ZXJhbD4gZm9yIHdyaXRpbmcuIFRob3NlCitmdW5jdGlvbnMgd2VyZSBwcm9ncmFtbWVkIGNhcmVmdWxseSwgYW5kIEkgYWRkZWQgdGhlIHNlbGYKK3Nhbml0eSBjaGVja3MgdGhlcmUuIEluIGFkZGl0aW9uLCB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIGluIHdoaWNoIEkKK25lZWQgdG8gY2hlY2sgdGhlIHVzZXIgb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUgLSBUaGVyZSBjYW4gYmUgbm8KK3BsYWNlIGluIHdoaWNoIEkgY2FuICJmb3JnZXQiIHRvIGNoZWNrIHRoZW0uCisKK05vdGUgdGhhdCBUaGUgZGlzYWJsaW5nIG9mIHdyaXRlLWFjY2VzcyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKK2lzIGRvdWJsZSBjaGVja2VkIGhlcmUgb25seSBhcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2VsZi1zYW5pdHk8L0xpdGVyYWw+IGNoZWNrIC0gSWYKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+REVCVUc8L0xpdGVyYWw+IGlzIHNlbGVjdGVkLCBzaW5jZSB3cml0ZSBlbmFibGUgc2hvdWxkIGhhdmUgYmVlbiByZWZ1c2VkCithbmQgd3JpdGUtYWNjZXNzIGlzIGFsd2F5cyBkaXNhYmxlZCBhdCBzdGFydHVwLCBoZW5jZSBmaW5kaW5nCis8TGl0ZXJhbCByZW1hcD0idHQiPmhlcmU8L0xpdGVyYWw+IHRoYXQgdGhlIHVzZXIgaGFzIHdyaXRlIGFjY2VzcyBkaXNhYmxlZCB0aHJvdWdoIHRoZQorY29uZmlndXJhdGlvbiBmaWxlIGNsZWFybHkgaW5kaWNhdGVzIHRoYXQgSSBoYXZlIGEgYnVnIHNvbWV3aGVyZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGZvbGxvd2luZyBzYWZldHkgbWVhc3VyZSBjYW4gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgPExpdGVyYWwgcmVtYXA9InR0Ij5ib3RoPC9MaXRlcmFsPiB1c2VyCittaXN0YWtlcyBhbmQgbXkgb3duIGJ1Z3M6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUkgYWRkZWQgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmxvZ2dpbmcgb3B0aW9uPC9MaXRlcmFsPiwgd2hpY2ggbG9ncyBldmVyeSBhY3R1YWwgd3JpdGUKK2FjY2VzcyB0byB0aGUgZGlzayBpbiB0aGUgbG93ZXN0IGxldmVsIC0gSW4gPExpdGVyYWwgcmVtYXA9InR0Ij5sb3cmbG93YmFyO3dyaXRlPC9MaXRlcmFsPiBpdHNlbGYuCisKK1RoZSBsb2dnaW5nIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgdHlwZSBhbmQgdGhlIHZhcmlvdXMKK290aGVyIGhpZ2hlciBsZXZlbCBvcGVyYXRpb25zIG9mIEVYVDJFRCAtIEl0IGlzIHNpbXBseSBhIGhleCBkdW1wIG9mCit0aGUgY29udGVudHMgd2hpY2ggd2lsbCBiZSBvdmVyd3JpdHRlbjsgQm90aCB0aGUgb3JpZ2luYWwgY29udGVudHMKK2FuZCB0aGUgbmV3IHdyaXR0ZW4gZGF0YS4KKworSW4gdGhhdCBjYXNlLCBldmVuIGlmIHRoZSB1c2VyIG1ha2VzIGEgCW1pc3Rha2UsIHRoZSBvcmlnaW5hbCBkYXRhCitjYW4gYmUgcmV0cmlldmVkLgorCitFdmVuIElmIEkgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUgd2hpY2ggY2F1c2VzIGluY29ycmVjdCBkYXRhIHRvIGJlCit3cml0dGVuIHRvIHRoZSBkaXNrLCB0aGUgbG9nZ2luZyBvcHRpb24gd2lsbCBzdGlsbCBsb2cgZXhhY3RseSB0aGUKK29yaWdpbmFsIGNvbnRlbnRzIGF0IHRoZSBwbGFjZSB3ZXJlIGRhdGEgd2FzIGluY29ycmVjdGx5IG92ZXJ3cml0dGVuLgorKFRoaXMgYXNzdW1lcywgb2YtY291cnNlLCB0aGF0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG93LXdyaXRlPC9MaXRlcmFsPiBhbmQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG9nZ2luZworaXRzZWxmPC9MaXRlcmFsPiB3b3JrIGNvcnJlY3RseS4gSSBoYXZlIGRvbmUgbXkgYmVzdCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzCitpbmRlZWQgdGhlIGNhc2UpLgorCitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5sb2dnaW5nPC9MaXRlcmFsPiBvcHRpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bG9nJmxvd2JhcjtjaGFuZ2VzPC9MaXRlcmFsPgorZnVuY3Rpb24uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+UmVhZGluZyAvIFdyaXRpbmcgb2JqZWN0czwvVGl0bGU+CisKKzxQYXJhPgorVXN1YWxseSA8TGl0ZXJhbCByZW1hcD0idHQiPihub3QgYWx3YXlzKTwvTGl0ZXJhbD4sIHRoZSBjdXJyZW50IG9iamVjdCBkYXRhIGlzIGF2YWlsYWJsZSBpbiB0aGUKK2dsb2JhbCB2YXJpYWJsZSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+LCB3aGljaCBpcyBvZiB0aGUgdHlwZToKKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IHN0cnVjdF90eXBlX2RhdGEgeworCWxvbmcgb2Zmc2V0X2luX2Jsb2NrOworCisJdW5pb24gdW5pb25fdHlwZV9kYXRhIHsKKwkJY2hhciBidWZmZXIgW0VYVDJfTUFYX0JMT0NLX1NJWkVdOworCQlzdHJ1Y3QgZXh0Ml9hY2xfaGVhZGVyIHRfZXh0Ml9hY2xfaGVhZGVyOworCQlzdHJ1Y3QgZXh0Ml9hY2xfZW50cnkgdF9leHQyX2FjbF9lbnRyeTsKKwkJc3RydWN0IGV4dDJfb2xkX2dyb3VwX2Rlc2MgdF9leHQyX29sZF9ncm91cF9kZXNjOworCQlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjIHRfZXh0Ml9ncm91cF9kZXNjOworCQlzdHJ1Y3QgZXh0Ml9pbm9kZSB0X2V4dDJfaW5vZGU7CisJCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHRfZXh0Ml9zdXBlcl9ibG9jazsKKwkJc3RydWN0IGV4dDJfZGlyX2VudHJ5IHRfZXh0Ml9kaXJfZW50cnk7CisJfSB1OworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKK1RoZSBhYm92ZSB1bmlvbiBlbmFibGVzIG1lLCBpbiB0aGUgcHJvZ3JhbSwgdG8gdHJlYXQgdGhlIGRhdGEgYXMgcmF3IGRhdGEgb3IKK2FzIGEgbWVhbmluZ2Z1bCBmaWxlc3lzdGVtIG9iamVjdC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgcmVhZGluZyBhbmQgd3JpdGluZywgaWYgZG9uZSB0byB0aGlzIGdsb2JhbCB2YXJpYWJsZSwgYXJlIGRvbmUgdGhyb3VnaAordGhlIGZ1bmN0aW9ucyA8TGl0ZXJhbCByZW1hcD0idHQiPmxvYWQmbG93YmFyO3R5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPndyaXRlJmxvd2Jhcjt0eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiwgYXZhaWxhYmxlIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPmRpc2suYzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgZ2VuZXJhbCBjb21tYW5kczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBjb21tYW5kczwvTGl0ZXJhbD4gYXJlIGhhbmRsZWQgaW4gdGhlIGZpbGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgaGVscCBzeXN0ZW08L1RpdGxlPgorCis8UGFyYT4KK1RoZSBoZWxwIGNvbW1hbmQgaXMgaGFuZGxlZCBieSB0aGUgZnVuY3Rpb24gPExpdGVyYWwgcmVtYXA9InR0Ij5oZWxwPC9MaXRlcmFsPi4gVGhlIGFsZ29yaXRobSBpcyBhcworZm9sbG93czoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQ2hlY2sgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIElmIHRoZXJlIGlzIGFuIGFyZ3VtZW50LCBwYXNzCitjb250cm9sIHRvIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRldGFpbGVkJmxvd2JhcjtoZWxwPC9MaXRlcmFsPiBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gcHJvdmlkZQoraGVscCBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlmIGdlbmVyYWwgaGVscCB3YXMgcmVxdWVzdGVkLCBkaXNwbGF5IGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlCitjb21tYW5kcyBhdCB0aGlzIHBvaW50LiBUaGUgdGhyZWUgbGV2ZWxzIGFyZSBkaXNwbGF5ZWQgaW4gcmV2ZXJzZQorb3JkZXIgLSBGaXJzdCB0aGUgY29tbWFuZHMgd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IHR5cGUKKyhJZiBhIGN1cnJlbnQgdHlwZSBpcyBkZWZpbmVkKSwgdGhlbiB0aGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzIChJZgord2UgZGVjaWRlZCB0aGF0IHRoZSBmaWxlc3lzdGVtIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgYW4gZXh0MgorZmlsZXN5c3RlbSksIHRoZW4gdGhlIGdlbmVyYWwgY29tbWFuZHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IEVYVDJFRCAtIEN1cnJlbnQgdmVyc2lvbiwgZ2VuZXJhbAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QsIGV0Yy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvT3JkZXJlZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzZXRkZXZpY2UgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0ZGV2aWNlPC9MaXRlcmFsPiBjb21tYW5kcyByZXN1bHQgaW4gY2FsbGluZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO2RldmljZTwvTGl0ZXJhbD4KK2Z1bmN0aW9uLiBUaGUgYWxnb3JpdGhtIGlzOgorPC9QYXJhPgorCis8UGFyYT4KKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBJZiBpdCBpc24ndCBhdmFpbGFibGUgcmVwb3J0IHRoZQorZXJyb3IgYW5kIHJldHVybi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNsb3NlIHRoZSBjdXJyZW50IG9wZW4gZGV2aWNlLCBpZiB0aGVyZSBpcyBvbmUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlPcGVuIHRoZSBuZXcgZGV2aWNlIGluIHJlYWQtb25seSBtb2RlLiBVcGRhdGUgdGhlIGdsb2JhbCB2YXJpYWJsZXMKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGV2aWNlJmxvd2JhcjtuYW1lPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5kZXZpY2UmbG93YmFyO2hhbmRsZTwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlEaXNhYmxlIHdyaXRlIGFjY2Vzcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUVtcHR5IHRoZSBvYmplY3QgbWVtb3J5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVW5yZWdpc3RlciB0aGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzLCB1c2luZworPExpdGVyYWwgcmVtYXA9InR0Ij5mcmVlJmxvd2Jhcjt1c2VyJmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVbnJlZ2lzdGVyIHRoZSBjdXJyZW50IG9iamVjdHMsIHVzaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZnJlZSZsb3diYXI7c3RydWN0Jmxvd2JhcjtkZXNjcmlwdG9yczwvTGl0ZXJhbD4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUNhbGwgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO2ZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gdG8gYXV0by1kZXRlY3QgYW4gZXh0MiBmaWxlc3lzdGVtCithbmQgc2V0IHRoZSBiYXNpYyBmaWxlc3lzdGVtIHZhbHVlcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUFkZCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hbHRlcm5hdGUgZGVzY3JpcHRvcnM8L0xpdGVyYWw+LCBzdXBwbGllZCBieSB0aGUgdXNlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVNldCB0aGUgZGV2aWNlIG9mZnNldCB0byB0aGUgZmlsZXN5c3RlbSBzdGFydCBieSBkaXNwYXRjaGluZworPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQgMDwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlTaG93IHRoZSBuZXcgYXZhaWxhYmxlIGNvbW1hbmRzIGJ5IGRpc3BhdGNoaW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhlbHA8L0xpdGVyYWw+Citjb21tYW5kLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+QmFzaWMgbWFuZXV2ZXJpbmc8L1RpdGxlPgorCis8UGFyYT4KK0Jhc2ljIG1hbmV1dmVyaW5nIGlzIGRvbmUgdXNpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0b2Zmc2V0PC9MaXRlcmFsPiBhbmQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0dHlwZTwvTGl0ZXJhbD4KK3VzZXIgY29tbWFuZHMuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO29mZnNldDwvTGl0ZXJhbD4gYWNjZXB0cyBzb21lIGFsdGVybmF0aXZlIGZvcm1zIG9mIHNwZWNpZnlpbmcgdGhlIG5ldworb2Zmc2V0LiBUaGV5IGFsbCB1bHRpbWF0ZWx5IGxlYWQgdG8gY2hhbmdpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGV2aWNlJmxvd2JhcjtvZmZzZXQ8L0xpdGVyYWw+CitnbG9iYWwgdmFyaWFibGUgYW5kIHNlZWtpbmcgdG8gdGhlIG5ldyBwb3NpdGlvbi4gPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO29mZnNldDwvTGl0ZXJhbD4gYWxzbworY2FsbHMgPExpdGVyYWwgcmVtYXA9InR0Ij5sb2FkJmxvd2Jhcjt0eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiB0byByZWFkIGEgYmxvY2sgYWhlYWQgb2YgdGhlIG5ldyBwb3NpdGlvbiBpbnRvCit0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtkYXRhPC9MaXRlcmFsPiBnbG9iYWwgdmFyaWFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQmbG93YmFyO3R5cGU8L0xpdGVyYWw+IHdpbGwgcG9pbnQgdGhlIGdsb2JhbCB2YXJpYWJsZSA8TGl0ZXJhbCByZW1hcD0idHQiPmN1cnJlbnQmbG93YmFyO3R5cGU8L0xpdGVyYWw+IHRvIHRoZQorY29ycmVjdCBlbnRyeSBpbiB0aGUgZG91YmxlIGxpbmtlZCBsaXN0IG9mIHRoZSBrbm93biBvYmplY3RzLiBJZiB0aGUKK3JlcXVlc3RlZCB0eXBlIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGV4PC9MaXRlcmFsPiBvciA8TGl0ZXJhbCByZW1hcD0idHQiPm5vbmU8L0xpdGVyYWw+LCA8TGl0ZXJhbCByZW1hcD0idHQiPmN1cnJlbnQmbG93YmFyO3R5cGU8L0xpdGVyYWw+IHdpbGwgYmUKK2luaXRpYWxpemVkIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+TlVMTDwvTGl0ZXJhbD4uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0Jmxvd2Jhcjt0eXBlPC9MaXRlcmFsPiB3aWxsIGFsc28gZGlzcGF0Y2ggPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiwKK3NvIHRoYXQgdGhlIG9iamVjdCBkYXRhIHdpbGwgYmUgcmUtZm9ybWF0dGVkIGluIHRoZSBuZXcgZm9ybWF0LgorPC9QYXJhPgorCis8UGFyYT4KK1doZW4gZWRpdGluZyBhbiBleHQyIGZpbGVzeXN0ZW0sIGl0IGlzIG5vdCBpbnRlbmRlZCB0aGF0IHRob3NlIGNvbW1hbmRzIHdpbGwKK2JlIHVzZWQgZGlyZWN0bHksIGFuZCBpdCBpcyB1c3VhbGx5IG5vdCByZXF1aXJlZC4gTXkgaW1wbGVtZW50YXRpb24gb2YgdGhlCitleHQyIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCwgdXNlcyB0aGlzIGxvd2VyIGxldmVsIGNvbW1hbmRzIG9uIGNvdW50bGVzcworb2NjYXNpb25zLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGRpc3BsYXkgZnVuY3Rpb25zPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZ2VuZXJhbCBjb21tYW5kIHZlcnNpb24gb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBpcyBoYW5kbGVkIGJ5IHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+CitmdW5jdGlvbi4gVGhpcyBjb21tYW5kIGlzIG92ZXJyaWRkZW4gYnkgdmFyaW91cyBvYmplY3RzIHRvIHByb3ZpZGUgYSBkaXNwbGF5Cit3aGljaCBpcyBiZXR0ZXIgc3VpdGVkIHRvIHRoZSBvYmplY3QuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGdlbmVyYWwgc2hvdyBjb21tYW5kIHdpbGwgZm9ybWF0IHRoZSBkYXRhIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4gYWNjb3JkaW5nCit0byB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgdHlwZSBhbmQgc2hvdyBpdCBvbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93CitwYWQ8L0xpdGVyYWw+LiBJZiB0aGVyZSBpcyBubyBjdXJyZW50IHR5cGUsIHRoZSBkYXRhIHdpbGwgYmUgc2hvd24gYXMgYSBzaW1wbGUgaGV4CitkdW1wOyBPdGhlcndpc2UsIHRoZSBsaXN0IG9mIHZhcmlhYmxlcywgYWxvbmcgd2l0aCB0aGVpciB2YWx1ZXMgd2lsbCBiZSBzaG93bi4KKzwvUGFyYT4KKworPFBhcmE+CitBIGNhbGwgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93Jmxvd2JhcjtpbmZvPC9MaXRlcmFsPiBpcyBhbHNvIG1hZGUgLSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3cmbG93YmFyO2luZm88L0xpdGVyYWw+IHdpbGwgcHJvdmlkZQorPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIHN0YXRpc3RpY3M8L0xpdGVyYWw+IG9uIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3cmbG93YmFyO3dpbmRvdzwvTGl0ZXJhbD4sIHN1Y2ggYXMgdGhlIGN1cnJlbnQKK2Jsb2NrLCBjdXJyZW50IHR5cGUsIGN1cnJlbnQgb2Zmc2V0IGFuZCBjdXJyZW50IHBhZ2UuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGd1cDwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGdkbjwvTGl0ZXJhbD4gZ2VuZXJhbCBjb21tYW5kcyBqdXN0IHVwZGF0ZSB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdyZsb3diYXI7cGFkJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiBnbG9iYWwgdmFyaWFibGUgLSBXZSBqdXN0IGluY3JlbWVudAorPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93Jmxvd2JhcjtwYWQmbG93YmFyO2luZm8ubGluZTwvTGl0ZXJhbD4gd2l0aCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBzY3JlZW4gLQorPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93Jmxvd2JhcjtwYWQmbG93YmFyO2luZm8uZGlzcGxheSZsb3diYXI7bGluZXM8L0xpdGVyYWw+LCB3aGljaCB3YXMgaW5pdGlhbGl6ZWQgaW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5pdCZsb3diYXI7d2luZG93czwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5DaGFuZ2luZyBkYXRhPC9UaXRsZT4KKworPFBhcmE+CitEYXRhIGNoYW5nZSBpcyBkb25lIGluIG1lbW9yeSBvbmx5LiBBbiB1cGRhdGUgdG8gdGhlIGRpc2sgaWYgZm9sbG93ZWQgYnkgYW4KK2V4cGxpY2l0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+d3JpdGVkYXRhPC9MaXRlcmFsPiBjb21tYW5kIHRvIHRoZSBkaXNrLiBUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij53cml0ZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4KK2Z1bmN0aW9uIHNpbXBsZSBjYWxscyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij53cml0ZSZsb3diYXI7dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4gZnVuY3Rpb24sIG91dGxpbmVkIGVhcmxpZXIuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0PC9MaXRlcmFsPiBjb21tYW5kIGlzIHVzZWQgZm9yIGNoYW5naW5nIHRoZSBkYXRhLgorPC9QYXJhPgorCis8UGFyYT4KK0lmIHRoZXJlIGlzIG5vIGN1cnJlbnQgdHlwZSwgY29udHJvbCBpcyBwYXNzZWQgdG8gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGV4Jmxvd2JhcjtzZXQ8L0xpdGVyYWw+IGZ1bmN0aW9uLAord2hpY2ggdHJlYXRzIHRoZSBkYXRhIGFzIGEgYmxvY2sgb2YgYnl0ZXMgYW5kIHVzZXMgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGEub2Zmc2V0Jmxvd2JhcjtpbiZsb3diYXI7YmxvY2s8L0xpdGVyYWw+IHZhcmlhYmxlIHRvIHdyaXRlIHRoZSBuZXcgdGV4dCBvciBoZXggc3RyaW5nCit0byB0aGUgY29ycmVjdCBwbGFjZSBpbiB0aGUgYmxvY2suCis8L1BhcmE+CisKKzxQYXJhPgorSWYgYSBjdXJyZW50IHR5cGUgaXMgZGVmaW5lZCwgdGhlIHJlcXVlc3RlZCB2YXJpYWJsZSBpcyBzZWFyY2hlZCBpbiB0aGUKK2N1cnJlbnQgb2JqZWN0LCBhbmQgdGhlIGRlc2lyZWQgbmV3IHZhbHVlZCBpcyBlbnRlcmVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmVuYWJsZXdyaXRlPC9MaXRlcmFsPiBjb21tYW5kcyBqdXN0IHNldHMgdGhlIGdsb2JhbCB2YXJpYWJsZQorPExpdGVyYWwgcmVtYXA9InR0Ij53cml0ZSZsb3diYXI7YWNjZXNzPC9MaXRlcmFsPiB0byA8TGl0ZXJhbCByZW1hcD0idHQiPjE8L0xpdGVyYWw+IGFuZCByZS1vcGVucyB0aGUgZmlsZXN5c3RlbSBpbiByZWFkLXdyaXRlCittb2RlLCBpZiBwb3NzaWJsZS4KKzwvUGFyYT4KKworPFBhcmE+CitJZiB0aGUgY3VycmVudCB0eXBlIGlzIE5VTEwsIGEgaGV4LW1vZGUgaXMgYXNzdW1lZCAtIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQ8L0xpdGVyYWw+IGFuZAorPExpdGVyYWwgcmVtYXA9InR0Ij5wcmV2PC9MaXRlcmFsPiBjb21tYW5kcyB3aWxsIGp1c3QgdXBkYXRlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZGF0YS5vZmZzZXQmbG93YmFyO2luJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBub3QgTlVMTCwgdGhlIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQ8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnByZXY8L0xpdGVyYWw+IGNvbW1hbmQKK2FyZSB1c3VhbGx5IG92ZXJyaWRkZW4gYW55d2F5LiBJZiB0aGV5IGFyZSBub3Qgb3ZlcnJpZGRlbiwgaXQgd2lsbCBiZSBhc3N1bWVkCit0aGF0IHRoZSB1c2VyIGlzIGVkaXRpbmcgYW4gYXJyYXkgb2Ygc3VjaCBvYmplY3RzLCBhbmQgdGhleSB3aWxsIGp1c3QgcGFzcwordG8gdGhlIG5leHQgLyBwcmV2IGVsZW1lbnQgYnkgZGlzcGF0Y2hpbmcgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQ8L0xpdGVyYWw+IHVzaW5nIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQgdHlwZSArIC8gLSBYPC9MaXRlcmFsPiBzeW50YXguCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzIGFyZSBjb250YWluZWQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7Z2VuZXJhbCZsb3diYXI7Y29tbWFuZHM8L0xpdGVyYWw+CitnbG9iYWwgdmFyaWFibGUgKHdoaWNoIGlzIG9mIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3Qgc3RydWN0Jmxvd2Jhcjtjb21tYW5kczwvTGl0ZXJhbD4pLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBoYW5kbGluZyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBzb3VyY2UgZmlsZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2NvbS5jPC9MaXRlcmFsPi4KK0kgd2lsbCBpbmNsdWRlIHRoZSBlbnRpcmUgc291cmNlIGNvZGUgc2luY2UgaXQgaXMgcmVsYXRpdmVseSBzaG9ydC4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBzdXBlciBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitUaGUgc3VwZXIgY29tbWFuZCBqdXN0ICJicmluZ3MgdGhlIHVzZXIiIHRvIHRoZSBtYWluIHN1cGVyYmxvY2sgYW5kIHNldCB0aGUKK3R5cGUgdG8gZXh0MiZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgdHJpdmlhbDoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgdHlwZV9leHQyX19fc3VwZXIgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgYnVmZmVyIFs4MF07CisJCisJc3VwZXJfaW5mby5jb3B5X251bT0wOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9ja19vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBleHQyX3N1cGVyX2Jsb2NrIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCitJdCBpbnZvbHZlcyBvbmx5IHNldHRpbmcgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29weSZsb3diYXI7bnVtPC9MaXRlcmFsPiB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0aGUgbWFpbgorY29weSwgZGlzcGF0Y2hpbmcgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldDwvTGl0ZXJhbD4gY29tbWFuZCB0byByZWFjaCB0aGUgc3VwZXJibG9jaywgYW5kCitkaXNwYXRjaGluZyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0dHlwZTwvTGl0ZXJhbD4gdG8gZW5hYmxlIHRoZSBzdXBlcmJsb2NrIHNwZWNpZmljIGNvbW1hbmRzLgorVGhpcyBsYXN0IGNvbW1hbmQgd2lsbCBhbHNvIGNhbGwgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2hvdzwvTGl0ZXJhbD4gY29tbWFuZCBvZiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrPC9MaXRlcmFsPiB0eXBlLCB0aHJvdWdoIGRpc3BhdGNoaW5nIGF0IHRoZSBnZW5lcmFsIGNvbW1hbmQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0dHlwZTwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgZ3JvdXAgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGdyb3VwIGNvbW1hbmQgd2lsbCBicmluZyB0aGUgdXNlciB0byB0aGUgc3BlY2lmaWVkIGdyb3VwIGRlc2NyaXB0b3IgaW4KK3RoZSBtYWluIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzLiBUaGUgdHlwZSB3aWxsIGJlIHNldCB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtncm91cCZsb3diYXI7ZGVzYzwvTGl0ZXJhbD46CisKKzxQcm9ncmFtTGlzdGluZz4KK3ZvaWQgdHlwZV9leHQyX19fZ3JvdXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZ3JvdXBfbnVtPTA7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCQorCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWdyb3VwX251bT1hdG9sIChidWZmZXIpOworCX0KKworCWdyb3VwX2luZm8uY29weV9udW09MDtncm91cF9pbmZvLmdyb3VwX251bT0wOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0ICVsZCIsZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfZ3JvdXBfZGVzYyIpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixncm91cF9udW0pO2Rpc3BhdGNoIChidWZmZXIpOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworVGhlIGltcGxlbWVudGF0aW9uIGlzIGFzIHRyaXZpYWwgYXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXI8L0xpdGVyYWw+IGltcGxlbWVudGF0aW9uLiBOb3RlCit0aGUgdXNlIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmVudHJ5PC9MaXRlcmFsPiBjb21tYW5kLCB3aGljaCBpcyBhIGNvbW1hbmQgb2YgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2dyb3VwJmxvd2JhcjtkZXNjPC9MaXRlcmFsPiBvYmplY3QsIHRvIHBhc3MgdG8gdGhlIGNvcnJlY3QgZ3JvdXAgZGVzY3JpcHRvci4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBjZCBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jZDwvTGl0ZXJhbD4gY29tbWFuZCBwZXJmb3JtcyB0aGUgdXN1YWwgY2QgZnVuY3Rpb24uIFRoZSBwYXRoIHRvIHRoZSBnbG9iYWwKK2NkIGNvbW1hbmQgaXMgYSBwYXRoIGZyb20gPExpdGVyYWwgcmVtYXA9InR0Ij4vPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPlRoaXMgaXMgb25lIG9mIHRoZSBiZXN0IGV4YW1wbGVzIG9mIHRoZSBwb3dlciBvZiB0aGUgb2JqZWN0IG9yaWVudGVkCitkZXNpZ24gYW5kIG9mIHRoZSBkaXNwYXRjaGluZyBtZWNoYW5pc20uIFRoZSBvcGVyYXRpb24gaXMgY29tcGxpY2F0ZWQsIHlldCB0aGUKK2ltcGxlbWVudGF0aW9uIGlzIHN1cnByaXNpbmdseSBzaG9ydCE8L0xpdGVyYWw+Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+Cit2b2lkIHR5cGVfZXh0Ml9fX2NkIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyIHRlbXAgWzgwXSxidWZmZXIgWzgwXSwqcHRyOworCQorCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQorCWlmIChidWZmZXIgWzBdICE9ICcvJykgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBVc2UgYSBmdWxsIHBhdGhuYW1lIChiZWdpbiB3aXRoICcvJylcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlkaXNwYXRjaCAoInN1cGVyIik7ZGlzcGF0Y2ggKCJncm91cCIpO2Rpc3BhdGNoICgiaW5vZGUiKTsKKwlkaXNwYXRjaCAoIm5leHQiKTtkaXNwYXRjaCAoImRpciIpOworCWlmIChidWZmZXIgWzFdICE9IDApIHsKKwkJc3ByaW50ZiAodGVtcCwiY2QgJXMiLGJ1ZmZlcisxKTtkaXNwYXRjaCAodGVtcCk7CisJfQorfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK05vdGUgdGhlIG51bWJlciBvZiB0aGUgZGlzcGF0Y2ggY2FsbHMhIAorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXI8L0xpdGVyYWw+IGlzIHVzZWQgdG8gZ2V0IHRvIHRoZSBzdXBlcmJsb2NrLiA8TGl0ZXJhbCByZW1hcD0idHQiPmdyb3VwPC9MaXRlcmFsPiB0byBnZXQgdG8gdGhlCitmaXJzdCBncm91cCBkZXNjcmlwdG9yLiA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPiBicmluZ3MgdXMgdG8gdGhlIGZpcnN0IGlub2RlIC0gVGhlIGJhZAorYmxvY2tzIGlub2RlLiBBIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dDwvTGl0ZXJhbD4gaXMgY29tbWFuZCB0byBwYXNzIHRvIHRoZSByb290IGRpcmVjdG9yeSBpbm9kZSwKK2EgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IGNvbW1hbmQgImVudGVycyIgdGhlIGRpcmVjdG9yeSwgYW5kIHRoZW4gd2UgbGV0IHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPm9iamVjdAorc3BlY2lmaWMgY2QgY29tbWFuZDwvTGl0ZXJhbD4gdG8gdGFrZSB1cyBmcm9tIHRoZXJlIChUaGUgb2JqZWN0IGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiwgc28KK3RoYXQgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gd2lsbCBjYWxsIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNkPC9MaXRlcmFsPiBjb21tYW5kIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4gdHlwZSkuCitOb3RlIHRoYXQgYSBzeW1ib2xpYyBsaW5rIGZvbGxvd2luZyBjb3VsZCBicmluZyB1cyBiYWNrIHRvIHRoZSByb290IGRpcmVjdG9yeSwKK3RodXMgdGhlIGlubm9jZW50IGNhbGxzIGFib3ZlIHRyZWF0cyBuaWNlbHkgc3VjaCBhIHJlY3Vyc2l2ZSBjYXNlIQorPC9QYXJhPgorCis8UGFyYT4KK0kgZmVlbCB0aGF0IHRoZSBhYm92ZSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPmludHVpdGl2ZTwvTGl0ZXJhbD4gLSBJIHdhcyBleHByZXNzaW5nIG15c2VsZiAiaW4gdGhlCitsYW5ndWFnZSIgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSAtIChHbyB0byB0aGUgaW5vZGUsIGV0YyksIGFuZCB0aGUgY29kZSB3YXMKK3dyaXR0ZW4gZXhhY3RseSBpbiB0aGlzIHNwaXJpdCEKKzwvUGFyYT4KKworPFBhcmE+CitJIGNhbiB3cml0ZSBtb3JlIGF0IHRoaXMgcG9pbnQsIGJ1dCBJIGd1ZXNzIEkgYW0gYWxyZWFkeSBhIGJpdCBjYXJyaWVkCithd2F5IHdpdGggdGhlIHNlbGYgY29tcGxpbWVudHMgOi0pCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgc3VwZXJibG9jazwvVGl0bGU+CisKKzxQYXJhPgorVGhpcyBzZWN0aW9uIGRldGFpbHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBzdXBlcmJsb2NrLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHN1cGVyYmxvY2sgdmFyaWFibGVzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgc3VwZXJibG9jayBvYmplY3QgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2JhcjtzdXBlciZsb3diYXI7YmxvY2s8L0xpdGVyYWw+LiBUaGUgZGVmaW5pdGlvbiBpcyBqdXN0Cit0YWtlbiBmcm9tIHRoZSBrZXJuZWwgZXh0MiBtYWluIGluY2x1ZGUgZmlsZSAtIC91c3IvaW5jbHVkZS9saW51eC9leHQyJmxvd2Jhcjtmcy5oLgorPEZPT1ROT1RFPgorCis8UGFyYT4KK1Rob3NlIGxpbmVzIG9mIHNvdXJjZSBhcmUgY29weXJpZ2h0ZWQgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5SZW15IENhcmQ8L0xpdGVyYWw+IC0gVGhlIGF1dGhvciBvZiB0aGUKK2V4dDIgZmlsZXN5c3RlbSwgYW5kIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXMgVG9ydmFsZHM8L0xpdGVyYWw+IC0gVGhlIGZpcnN0IGF1dGhvciBvZiB0aGUgTGludXgKK29wZXJhdGluZyBzeXN0ZW0uIFBsZWFzZSBjcm9zcyByZWZlcmVuY2UgdGhlIHNlY3Rpb24gQWNrbm93bGVkZ21lbnRzIGZvciB0aGUKK2Z1bGwgY29weXJpZ2h0LgorPC9QYXJhPgorCis8L0ZPT1ROT1RFPgorCisKKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworCV9fdTMyCXNfaW5vZGVzX2NvdW50OwkJLyogSW5vZGVzIGNvdW50ICovCisJX191MzIJc19ibG9ja3NfY291bnQ7CQkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMglzX3JfYmxvY2tzX2NvdW50OwkvKiBSZXNlcnZlZCBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX191MzIJc19maXJzdF9kYXRhX2Jsb2NrOwkvKiBGaXJzdCBEYXRhIEJsb2NrICovCisJX191MzIJc19sb2dfYmxvY2tfc2l6ZTsJLyogQmxvY2sgc2l6ZSAqLworCV9fczMyCXNfbG9nX2ZyYWdfc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fdTMyCXNfYmxvY2tzX3Blcl9ncm91cDsJLyogIyBCbG9ja3MgcGVyIGdyb3VwICovCisJX191MzIJc19mcmFnc19wZXJfZ3JvdXA7CS8qICMgRnJhZ21lbnRzIHBlciBncm91cCAqLworCV9fdTMyCXNfaW5vZGVzX3Blcl9ncm91cDsJLyogIyBJbm9kZXMgcGVyIGdyb3VwICovCisJX191MzIJc19tdGltZTsJCS8qIE1vdW50IHRpbWUgKi8KKwlfX3UzMglzX3d0aW1lOwkJLyogV3JpdGUgdGltZSAqLworCV9fdTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKwlfX3MxNglzX21heF9tbnRfY291bnQ7CS8qIE1heGltYWwgbW91bnQgY291bnQgKi8KKwlfX3UxNglzX21hZ2ljOwkJLyogTWFnaWMgc2lnbmF0dXJlICovCisJX191MTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCisJX191MTYJc19lcnJvcnM7CQkvKiBCZWhhdmlvciB3aGVuIGRldGVjdGluZyBlcnJvcnMgKi8KKwlfX3UxNglzX3BhZDsKKwlfX3UzMglzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCV9fdTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX191MzIJc19jcmVhdG9yX29zOwkJLyogT1MgKi8KKwlfX3UzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisJX191MTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTE2CXNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3UzMglzX3Jlc2VydmVkWzBdOwkJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCV9fdTMyCXNfcmVzZXJ2ZWRbMV07CQkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisJLgorCS4KKwkuCisJX191MzIJc19yZXNlcnZlZFsyMzRdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK05vdGUgdGhhdCBJIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXhwYW5kZWQ8L0xpdGVyYWw+IHRoZSBhcnJheSBkdWUgdG8gbXkgcHJpbWl0aXZlIHBhcnNlcgoraW1wbGVtZW50YXRpb24uIFRoZSB2YXJpb3VzIGZpZWxkcyBhcmUgZGVzY3JpYmVkIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnRlY2huaWNhbAorZG9jdW1lbnQ8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHN1cGVyYmxvY2sgY29tbWFuZHM8L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgY29tbWFuZHMgYXZhaWxhYmxlIGluIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO3N1cGVyJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4KK3R5cGUuIFRoZXkgYWxsIGFwcGVhciBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyJmxvd2Jhcjtjb20uYzwvTGl0ZXJhbD4KKzwvUGFyYT4KKworPFNlY3QzPgorPFRpdGxlPlRoZSBzaG93IGNvbW1hbmQ8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgaXMgb3ZlcnJpZGRlbiBoZXJlIGluIG9yZGVyIHRvIHByb3ZpZGUgbW9yZQoraW5mb3JtYXRpb24gdGhhbiBqdXN0IHRoZSBsaXN0IG9mIHZhcmlhYmxlcy4gQSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgd2lsbCBlbmQKK3VwIGluIGNhbGxpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtzdXBlciZsb3diYXI7YmxvY2smbG93YmFyOyZsb3diYXI7Jmxvd2JhcjtzaG93PC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZmlyc3QgdGhpbmcgdGhhdCB3ZSBkbyBpcyBjYWxsaW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgc2hvdyBjb21tYW5kPC9MaXRlcmFsPiBpbgorb3JkZXIgdG8gZGlzcGxheSB0aGUgbGlzdCBvZiB2YXJpYWJsZXMuCis8L1BhcmE+CisKKzxQYXJhPgorV2UgdGhlbiBhZGQgc29tZSBpbnRlcnByZXRhdGlvbiB0byB0aGUgdmFyaW91cyBsaW5lcyB0byBtYWtlIHRoZSBkYXRhCitzb21ld2hhdCBtb3JlIGludHVpdGl2ZSAoRXhwYW5zaW9uIG9mIHRoZSB0aW1lIHZhcmlhYmxlcyBhbmQgdGhlIGNyZWF0b3IKK29wZXJhdGluZyBzeXN0ZW0gY29kZSwgZm9yIGV4YW1wbGUpLgorPC9QYXJhPgorCis8UGFyYT4KK1dlIGFsc28gZGlzcGxheSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5iYWNrdXAgY29weSBudW1iZXI8L0xpdGVyYWw+IG9mIHRoZSBzdXBlcmJsb2NrIGluIHRoZSBzdGF0dXMKK3dpbmRvdy4gVGhpcyBjb3B5IG51bWJlciBpcyBzYXZlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlciZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gZ2xvYmFsIHZhcmlhYmxlIC0KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXImbG93YmFyO2luZm8uY29weSZsb3diYXI7bnVtPC9MaXRlcmFsPi4gQ3VycmVudGx5LCB0aGlzIGlzIHRoZSBvbmx5IHZhcmlhYmxlIHRoZXJlIC4uLgorYnV0IHRoaXMgdHlwZSBvZiBpbnRlcm5hbCB2YXJpYWJsZSBzYXZpbmcgaXMgdHlwaWNhbCB0aHJvdWdoIG15CitpbXBsZW1lbnRhdGlvbi4KKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPFNlY3QzPgorPFRpdGxlPlRoZSBiYWNrdXAgY29waWVzIGhhbmRsaW5nIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5jdXJyZW50IGNvcHkgbnVtYmVyPC9MaXRlcmFsPiBpcyBhdmFpbGFibGUgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlciZsb3diYXI7aW5mby5jb3B5Jmxvd2JhcjtudW08L0xpdGVyYWw+LiBJdAord2FzIGluaXRpYWxpemVkIGluIHRoZSBleHQyIGNvbW1hbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcjwvTGl0ZXJhbD4sIGFuZCBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzCitzdXBlcmJsb2NrIHJvdXRpbmVzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdvY29weTwvTGl0ZXJhbD4gcm91dGluZSB3aWxsIHBhc3MgdG8gYW5vdGhlciBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrLiBUaGUKK25ldyBkZXZpY2Ugb2Zmc2V0IHdpbGwgYmUgY29tcHV0ZWQgd2l0aCB0aGUgYWlkIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO3N5c3RlbSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gc3RydWN0dXJlLiBUaGVuIHRoZSByb3V0aW5lIHdpbGwgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNwYXRjaDwvTGl0ZXJhbD4gdG8KK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldDwvTGl0ZXJhbD4gYW5kIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IHJvdXRpbmVzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldGFjdGl2ZWNvcHk8L0xpdGVyYWw+IHJvdXRpbmUgd2lsbCBqdXN0IHNhdmUgdGhlIGN1cnJlbnQgc3VwZXJibG9jayBkYXRhCitpbiBhIHRlbXBvcmFyeSB2YXJpYWJsZSBvZiB0eXBlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrPC9MaXRlcmFsPiwgYW5kIHdpbGwgZGlzcGF0Y2gKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Z29jb3B5IDA8L0xpdGVyYWw+IHRvIHBhc3MgdG8gdGhlIG1haW4gc3VwZXJibG9jay4gVGhlbiBpdCB3aWxsIHBsYWNlIHRoZSBzYXZlZAorZGF0YSBpbiBwbGFjZSBvZiB0aGUgYWN0dWFsIGRhdGEuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGFib3ZlIHR3byBjb21tYW5kcyBjYW4gYmUgdXNlZCBpZiB0aGUgbWFpbiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHRlZC4KKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBncm91cCBkZXNjcmlwdG9yczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhbmRsaW5nIG1lY2hhbmlzbSBhbGxvd3MgdGhlIHVzZXIgdG8gdGFrZSBhIHRvdXIgaW4KK3RoZSBncm91cCBkZXNjcmlwdG9ycyB0YWJsZSwgc3RvcHBpbmcgYXQgZWFjaCBwb2ludCwgYW5kIGV4YW1pbmluZyB0aGUKK3JlbGV2YW50IGlub2RlIHRhYmxlLCBibG9jayBhbGxvY2F0aW9uIG1hcCBvciBpbm9kZSBhbGxvY2F0aW9uIG1hcCB0aHJvdWdoCitkaXNwYXRjaGluZyB0byB0aGUgcmVsZXZhbnQgb2JqZWN0cy4KKzwvUGFyYT4KKworPFBhcmE+CitTb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBncm91cCBkZXNjcmlwdG9ycyBpcyBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbAordmFyaWFibGUgPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cCZsb3diYXI7aW5mbzwvTGl0ZXJhbD4sIHdoaWNoIGlzIG9mIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2dyb3VwJmxvd2JhcjtpbmZvPC9MaXRlcmFsPjoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfZ3JvdXBfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjb3B5X251bTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX251bTsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cCZsb3diYXI7bnVtPC9MaXRlcmFsPiBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBpbiB0aGUgdGFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5jb3B5Jmxvd2JhcjtudW08L0xpdGVyYWw+IGlzIHRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgYmFja3VwIGNvcHkuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgZ3JvdXAgZGVzY3JpcHRvcidzIHZhcmlhYmxlczwvVGl0bGU+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CitzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCit7CisJX191MzIJYmdfYmxvY2tfYml0bWFwOwkJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fdTMyCWJnX2lub2RlX2JpdG1hcDsJCS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV90YWJsZTsJCQkvKiBJbm9kZXMgdGFibGUgYmxvY2sgKi8KKwlfX3UxNgliZ19mcmVlX2Jsb2Nrc19jb3VudDsJCS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MTYJYmdfZnJlZV9pbm9kZXNfY291bnQ7CQkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX3VzZWRfZGlyc19jb3VudDsJCS8qIERpcmVjdG9yaWVzIGNvdW50ICovCisJX191MTYJYmdfcGFkOworCV9fdTMyCWJnX3Jlc2VydmVkWzNdOworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZmlyc3QgdGhyZWUgdmFyaWFibGVzIGFyZSB1c2VkIHRvIHByb3ZpZGUgdGhlIGxpbmtzIHRvIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9ja2JpdG1hcCwgaW5vZGViaXRtYXAgYW5kIGlub2RlPC9MaXRlcmFsPiBvYmplY3RzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+TW92ZW1lbnQgaW4gdGhlIHRhYmxlPC9UaXRsZT4KKworPFBhcmE+CitNb3ZlbWVudCBpbiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgdGFibGUgaXMgZG9uZSB1c2luZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0LCBwcmV2IGFuZAorZW50cnk8L0xpdGVyYWw+IGNvbW1hbmRzLiBOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBjb21tYW5kcyA8TGl0ZXJhbCByZW1hcD0idHQiPm92ZXJyaWRlPC9MaXRlcmFsPiB0aGUKK2dlbmVyYWwgY29tbWFuZHMgb2YgdGhlIHNhbWUgbmFtZS4gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dCBhbmQgcHJldjwvTGl0ZXJhbD4gY29tbWFuZCBhcmUganVzdAorY2FsbGluZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5lbnRyeTwvTGl0ZXJhbD4gZnVuY3Rpb24gdG8gZG8gdGhlIGpvYi4gSSB3aWxsIHNob3cgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPiwKK2ZvciBleGFtcGxlOgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKyAKK3sKKwlsb25nIGVudHJ5X29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKwkKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQllbnRyeV9vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsZ3JvdXBfaW5mby5ncm91cF9udW0rZW50cnlfb2Zmc2V0KTsKKwlkaXNwYXRjaCAoYnVmZmVyKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmVudHJ5PC9MaXRlcmFsPiBmdW5jdGlvbiBpcyBhbHNvIHNpbXBsZSAtIEl0IGp1c3QgY2FsY3VsYXRlcyB0aGUgb2Zmc2V0Cit1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5ncm91cCZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gYW5kIGluIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZSZsb3diYXI7c3lzdGVtJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiwKK2FuZCB1c2VzIHRoZSB1c3VhbCA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldCAvIHNob3c8L0xpdGVyYWw+IHBhaXIuIAorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIHNob3cgY29tbWFuZDwvVGl0bGU+CisKKzxQYXJhPgorQXMgdXN1YWwsIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgaXMgb3ZlcnJpZGRlbi4gVGhlIGltcGxlbWVudGF0aW9uIGlzCitzaW1pbGFyIHRvIHRoZSBzdXBlcmJsb2NrJ3Mgc2hvdyBpbXBsZW1lbnRhdGlvbiAtIFdlIGp1c3QgY2FsbCB0aGUgZ2VuZXJhbAorc2hvdyBjb21tYW5kLCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gaW4gdGhlIHN0YXR1cyB3aW5kb3cgLSBUaGUgY29udGVudHMgb2YKK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdyb3VwJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiBzdHJ1Y3R1cmUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5Nb3ZpbmcgYmV0d2VlbiBiYWNrdXAgY29waWVzPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIGlzIGRvbmUgZXhhY3RseSBsaWtlIHRoZSBzdXBlcmJsb2NrIGNhc2UuIFBsZWFzZSByZWZlciB0byBleHBsYW5hdGlvbgordGhlcmUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5MaW5rcyB0byB0aGUgYXZhaWxhYmxlIGZyaWVuZHM8L1RpdGxlPgorCis8UGFyYT4KK0Zyb20gYSBncm91cCBkZXNjcmlwdG9yLCBvbmUgdHlwaWNhbGx5IHdhbnRzIHRvIHJlYWNoIGFuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGU8L0xpdGVyYWw+LCBvcgorb25lIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFsbG9jYXRpb24gYml0bWFwczwvTGl0ZXJhbD4uIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZSwKK2Jsb2NrYml0bWFwIG9yIGlub2RlYml0bWFwPC9MaXRlcmFsPiBjb21tYW5kcy4gVGhlIGltcGxlbWVudGF0aW9uIGlzIGFnYWluIHRyaXZpYWwKKy0gR2V0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ3JvdXAgZGVzY3JpcHRvciwgaW5pdGlhbGl6ZSB0aGUKK3N0cnVjdHVyZXMgb2YgdGhlIG5leHQgdHlwZSwgYW5kIGlzc3VlIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNldG9mZnNldCAvIHNldHR5cGU8L0xpdGVyYWw+IHBhaXIuCis8L1BhcmE+CisKKzxQYXJhPgorRm9yIGV4YW1wbGUsIGhlcmUgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrYml0bWFwPC9MaXRlcmFsPiBjb21tYW5kOgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2Jsb2NrYml0bWFwIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGJsb2NrX2JpdG1hcF9vZmZzZXQ7CisJY2hhciBidWZmZXIgWzgwXTsKKwkKKwlibG9ja19iaXRtYXBfaW5mby5lbnRyeV9udW09MDsKKwlibG9ja19iaXRtYXBfaW5mby5ncm91cF9udW09Z3JvdXBfaW5mby5ncm91cF9udW07CisKKwlibG9ja19iaXRtYXBfb2Zmc2V0PXR5cGVfZGF0YS51LnRfZXh0Ml9ncm91cF9kZXNjLmJnX2Jsb2NrX2JpdG1hcDsKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCBibG9jayAlbGQiLGJsb2NrX2JpdG1hcF9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBibG9ja19iaXRtYXAiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBpbm9kZSB0YWJsZTwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGlub2RlIGhhbmRsaW5nIGVuYWJsZXMgdGhlIHVzZXIgdG8gbW92ZSBpbiB0aGUgaW5vZGUgdGFibGUsIGVkaXQgdGhlCit2YXJpb3VzIGF0dHJpYnV0ZXMgb2YgdGhlIGlub2RlLCBhbmQgZm9sbG93IHRvIHRoZSBuZXh0IHN0YWdlIC0gQSBmaWxlIG9yIGEKK2RpcmVjdG9yeS4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBpbm9kZSB2YXJpYWJsZXM8L1RpdGxlPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IGV4dDJfaW5vZGUgeworCV9fdTE2CWlfbW9kZTsJCS8qIEZpbGUgbW9kZSAqLworCV9fdTE2CWlfdWlkOwkJLyogT3duZXIgVWlkICovCisJX191MzIJaV9zaXplOwkJLyogU2l6ZSBpbiBieXRlcyAqLworCV9fdTMyCWlfYXRpbWU7CS8qIEFjY2VzcyB0aW1lICovCisJX191MzIJaV9jdGltZTsJLyogQ3JlYXRpb24gdGltZSAqLworCV9fdTMyCWlfbXRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX191MzIJaV9kdGltZTsJLyogRGVsZXRpb24gVGltZSAqLworCV9fdTE2CWlfZ2lkOwkJLyogR3JvdXAgSWQgKi8KKwlfX3UxNglpX2xpbmtzX2NvdW50OwkvKiBMaW5rcyBjb3VudCAqLworCV9fdTMyCWlfYmxvY2tzOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMglpX2ZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MzIgIGxfaV9yZXNlcnZlZDE7CisJCX0gbGludXgxOworCQlzdHJ1Y3QgeworCQkJX191MzIgIGhfaV90cmFuc2xhdG9yOworCQl9IGh1cmQxOworCX0gb3NkMTsJCQkJLyogT1MgZGVwZW5kZW50IDEgKi8KKwlfX3UzMglpX2Jsb2NrW0VYVDJfTl9CTE9DS1NdOwkvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMglpX3ZlcnNpb247CQkvKiBGaWxlIHZlcnNpb24gKGZvciBORlMpICovCisJX191MzIJaV9maWxlX2FjbDsJCS8qIEZpbGUgQUNMICovCisJX191MzIJaV9kaXJfYWNsOwkJLyogRGlyZWN0b3J5IEFDTCAqLworCV9fdTMyCWlfZmFkZHI7CQkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191OAlsX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWxfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaV9wYWQxOworCQkJX191MzIJbF9pX3Jlc2VydmVkMlsyXTsKKwkJfSBsaW51eDI7CisJCXN0cnVjdCB7CisJCQlfX3U4CWhfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJaF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNgloX2lfbW9kZV9oaWdoOworCQkJX191MTYJaF9pX3VpZF9oaWdoOworCQkJX191MTYJaF9pX2dpZF9oaWdoOworCQkJX191MzIJaF9pX2F1dGhvcjsKKwkJfSBodXJkMjsKKwl9IG9zZDI7CQkJCS8qIE9TIGRlcGVuZGVudCAyICovCit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBhYm92ZSBpcyB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUgZGVmaW5pdGlvbi4gV2UgY2FuIHNlZSB0aGF0IHRoZSBpbm9kZQorc3VwcG9ydHMgPExpdGVyYWwgcmVtYXA9InR0Ij5PcGVyYXRpbmcgc3lzdGVtcyBzcGVjaWZpYyBzdHJ1Y3R1cmVzPC9MaXRlcmFsPi4gSW4gYWRkaXRpb24gdG8gdGhlCitleHBhbnNpb24gb2YgdGhlIGFycmF5cywgSSBoYXZlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ImZsYXR0ZW5lZDwvTGl0ZXJhbD4gdGhlIGlub2RlIHRvIHN1cHBvcnQgb25seQordGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+TGludXg8L0xpdGVyYWw+IGRlY2xhcmF0aW9uLiBJdCBzZWVtZWQgdGhhdCB0aGlzIG9uZSBvY2Nhc2lvbiBvZiBtdWx0aXBsZQordmFyaWFibGUgYWxpYXNlcyBkaWRuJ3QganVzdGlmeSB0aGUgY29tcGxpY2F0aW9uIG9mIGdlbmVyYWxseSBzdXBwb3J0aW5nCithbGlhc2VzLiBJbiBhbnkgY2FzZSwgdGhlIGFib3ZlIHN5c3RlbSBzcGVjaWZpYyB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkCitpbnRlcm5hbGx5IGJ5IEVYVDJFRCwgYW5kIHRoZSB1c2VyIGlzIGZyZWUgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDIuZGVzY3JpcHRvcnM8L0xpdGVyYWw+IHRvIGFjY29tbW9kYXRlIGZvciBoaXMgbmVlZHMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgaGFuZGxpbmcgZnVuY3Rpb25zPC9UaXRsZT4KKworPFBhcmE+CitUaGUgdXNlciBpbnRlcmZhY2UgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5tb3ZlbWVudDwvTGl0ZXJhbD4gaXMgdGhlIHVzdWFsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dCAvIHByZXYgLworZW50cnk8L0xpdGVyYWw+IGludGVyZmFjZS4gVGhlcmUgaXMgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCBpbiB0aG9zZSBmdW5jdGlvbnMgLSBUaGUKK3NpemUgb2YgdGhlIGlub2RlIGlzIGZpeGVkLCB0aGUgdG90YWwgbnVtYmVyIG9mIGlub2RlcyBpcyBrbm93biBmcm9tIHRoZQorc3VwZXJibG9jayBpbmZvcm1hdGlvbiwgYW5kIHRoZSBjdXJyZW50IGVudHJ5IGNhbiBiZSBmaWd1cmVkIHVwIGZyb20gdGhlCitkZXZpY2Ugb2Zmc2V0IGFuZCB0aGUgaW5vZGUgdGFibGUgc3RhcnQgb2Zmc2V0LCB3aGljaCBpcyBrbm93biBmcm9tIHRoZQorY29ycmVzcG9uZGluZyBncm91cCBkZXNjcmlwdG9yLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGEgYml0IG9sZGVyIHRoZW4gc29tZQorb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dDwvTGl0ZXJhbD4gYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cHJldjwvTGl0ZXJhbD4sIGFuZCB0aGV5IGRvIG5vdCBzYXZlCitpbmZvcm1hdGlvbiBpbiBhIHNwZWNpYWwgc3RydWN0dXJlLiBSYXRoZXIsIHRoZXkgcmVjb21wdXRlIGl0IHdoZW4KK25lY2Vzc2FyeS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4gaGVyZSwgYW5kIHByb3ZpZGVzIGEgbG90IG9mIGFkZGl0aW9uYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBpbm9kZSAtIEl0cyB0eXBlLCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcGVybWlzc2lvbnMsCitzcGVjaWFsIGV4dDIgYXR0cmlidXRlcyAoSW1tdXRhYmxlIGZpbGUsIGZvciBleGFtcGxlKSwgYW5kIGEgbG90IG1vcmUuCitBZ2FpbiwgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbCBzaG93PC9MaXRlcmFsPiBpcyBjYWxsZWQgZmlyc3QsIGFuZCB0aGVuIHRoZSBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBpcyB3cml0dGVuLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+QWNjZXNzaW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllczwvVGl0bGU+CisKKzxQYXJhPgorRnJvbSB0aGUgaW5vZGUsIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiBvciBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyZWN0b3J5PC9MaXRlcmFsPiBjYW4gdHlwaWNhbGx5IGJlIHJlYWNoZWQuCitJbiBvcmRlciB0byB0cmVhdCBhIGZpbGUsIGZvciBleGFtcGxlLCBpdHMgaW5vZGUgbmVlZHMgdG8gYmUgY29uc3RhbnRseQorYWNjZXNzZWQuIFRvIHNhdGlzZnkgdGhhdCBuZWVkLCB3aGVuIGVkaXRpbmcgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LCB0aGUKK2lub2RlIGlzIHN0aWxsIHNhdmVkIGluIG1lbW9yeSAtIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZGF0YTwvTGl0ZXJhbD4gaXMgbm90IG92ZXJ3cml0dGVuLgorUmF0aGVyLCB0aGUgZm9sbG93aW5nIHRha2VzIHBsYWNlOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlBbiBpbnRlcm5hbCBnbG9iYWwgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHR5cGVzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4KK2FuZCA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4gaGFuZGxpbmcgZnVuY3Rpb25zIGlzIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgdGhlCithcHByb3ByaWF0ZSBmdW5jdGlvbi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSB0eXBlIGlzIGNoYW5nZWQgYWNjb3JkaW5nbHkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworVGhlIHJlc3VsdCBpcyB0aGF0IGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXR0eXBlIGV4dDImbG93YmFyO2lub2RlPC9MaXRlcmFsPiBpcyB0aGUgb25seSBhY3Rpb24gbmVjZXNzYXJ5Cit0byByZXR1cm4gdG8gdGhlIGlub2RlIC0gV2UgYWN0dWFsbHkgbmV2ZXIgbGVmdCBpdC4KKzwvUGFyYT4KKworPFBhcmE+CitGb2xsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW5vZGUncyA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGU8L0xpdGVyYWw+IGNvbW1hbmQ6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+Cit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2ZpbGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgYnVmZmVyIFs4MF07CisJCisJaWYgKCFTX0lTUkVHICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBJbm9kZSB0eXBlIGlzIG5vdCBmaWxlXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsJcmV0dXJuOwkJCisJfQorCQorCWlmICghaW5pdF9maWxlX2luZm8gKCkpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVW5hYmxlIHRvIHNob3cgZmlsZVxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwkKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgZmlsZSIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK0FzIHdlIGNhbiBzZWUgLSBXZSBqdXN0IGNhbGwgPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0Jmxvd2JhcjtmaWxlJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiB0byBnZXQgdGhlIG5lY2Vzc2FyeQoraW5mb3JtYXRpb24gZnJvbSB0aGUgaW5vZGUsIGFuZCBzZXQgdGhlIHR5cGUgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPi4gVGhlIG5leHQgY2FsbAordG8gPExpdGVyYWwgcmVtYXA9InR0Ij5zaG93PC9MaXRlcmFsPiwgd2lsbCBkaXNwYXRjaCB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJ3Mgc2hvdzwvTGl0ZXJhbD4gaW1wbGVtZW50YXRpb24uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5WaWV3aW5nIGEgZmlsZTwvVGl0bGU+CisKKzxQYXJhPgorVGhlcmUgaXNuJ3QgYW4gZXh0MiBrZXJuZWwgc3RydWN0dXJlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZmlsZSAtIEEgZmlsZSBpcworanVzdCBhIHNlcmllcyBvZiBibG9ja3Mgd2hpY2ggYXJlIGRldGVybWluZWQgYnkgaXRzIGlub2RlLiBBcyBleHBsYWluZWQgaW4KK3RoZSBsYXN0IHNlY3Rpb24sIHRoZSBpbm9kZSBpcyBuZXZlciBhY3R1YWxseSBsZWZ0IC0gVGhlIHR5cGUgaXMgY2hhbmdlZCB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiAtIEEgdHlwZSB3aGljaCBjb250YWlucyBubyB2YXJpYWJsZXMsIGFuZCBhIHNwZWNpYWwgc3RydWN0dXJlIGlzCitpbml0aWFsaXplZDoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIHsKKworCXN0cnVjdCBleHQyX2lub2RlcyAqaW5vZGVfcHRyOworCQorCWxvbmcgaW5vZGVfb2Zmc2V0OworCWxvbmcgZ2xvYmFsX2Jsb2NrX251bSxnbG9iYWxfYmxvY2tfb2Zmc2V0OworCWxvbmcgYmxvY2tfbnVtLGJsb2Nrc19jb3VudDsKKwlsb25nIGZpbGVfb2Zmc2V0LGZpbGVfbGVuZ3RoOworCWxvbmcgbGV2ZWw7CisJdW5zaWduZWQgY2hhciBidWZmZXIgW0VYVDJfTUFYX0JMT0NLX1NJWkVdOworCWxvbmcgb2Zmc2V0X2luX2Jsb2NrOworCisJaW50IGRpc3BsYXk7CisJLyogVGhlIGZvbGxvd2luZyBpcyB1c2VkIGlmIHRoZSBmaWxlIGlzIGEgZGlyZWN0b3J5ICovCisJCisJbG9uZyBkaXJfZW50cnlfbnVtLGRpcl9lbnRyaWVzX2NvdW50OworCWxvbmcgZGlyX2VudHJ5X29mZnNldDsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUmbG93YmFyO3B0cjwvTGl0ZXJhbD4gd2lsbCBqdXN0IHBvaW50IHRvIHRoZSBpbm9kZSBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+LCB3aGljaAoraXMgbm90IG92ZXJ3cml0dGVuIHdoaWxlIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGhlIGZpbGUsIGFzIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5zZXRvZmZzZXQ8L0xpdGVyYWw+IGNvbW1hbmQgaXMgbm90IGludGVybmFsbHkgdXNlZC4gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YnVmZmVyPC9MaXRlcmFsPgord2lsbCBjb250YWluIHRoZSBjdXJyZW50IHZpZXdlZCBibG9jayBvZiB0aGUgZmlsZS4gVGhlIG90aGVyIHZhcmlhYmxlcworY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwbGFjZSBpbiB0aGUgZmlsZS4gRm9yIGV4YW1wbGUsCis8TGl0ZXJhbCByZW1hcD0idHQiPmdsb2JhbCZsb3diYXI7YmxvY2smbG93YmFyO251bTwvTGl0ZXJhbD4ganVzdCBjb250YWlucyB0aGUgY3VycmVudCBibG9jayBudW1iZXIuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHRoZSBhYm92ZSBkYXRhIHN0cnVjdHVyZSB3aWxsIHByb3ZpZGUgdGhlIGZpbGUKK2hhbmRsaW5nIGZ1bmN0aW9ucyBhbGwgdGhlIGFjY3VyYXRlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5lZWRlZCB0byBhY2NvbXBsaXNoCit0aGVpciB0YXNrLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBnbG9iYWwgc3RydWN0dXJlIG9mIHRoZSBhYm92ZSB0eXBlLCA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO2luZm88L0xpdGVyYWw+LCBpcyBpbml0aWFsaXplZCBieQorPExpdGVyYWwgcmVtYXA9InR0Ij5pbml0Jmxvd2JhcjtmaWxlJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGUmbG93YmFyO2NvbS5jPC9MaXRlcmFsPiwgd2hpY2ggaXMgY2FsbGVkIGJ5IHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij50eXBlJmxvd2JhcjtleHQyJmxvd2Jhcjtpbm9kZSZsb3diYXI7Jmxvd2JhcjsmbG93YmFyO2ZpbGU8L0xpdGVyYWw+IGZ1bmN0aW9uIHdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgdG8gd2F0Y2ggdGhlCitmaWxlLiA8TGl0ZXJhbCByZW1hcD0idHQiPkl0IGlzIHVwZGF0ZWQgYXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYWNjdXJhdGUgaW5mb3JtYXRpb24gYXMgbG9uZyBhcwordGhlIGZpbGUgaXMgZWRpdGVkLjwvTGl0ZXJhbD4KKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlJldHVybmluZyB0byB0aGUgZmlsZSdzIGlub2RlPC9UaXRsZT4KKworPFBhcmE+CitDb25jZXJuaW5nIHRoZSBtZXRob2QgSSB1c2VkIHRvIGhhbmRsZSBmaWxlcywgdGhlIGFib3ZlIHRhc2sgaXMgdHJpdmlhbDoKKworPFByb2dyYW1MaXN0aW5nPgordm9pZCB0eXBlX2ZpbGVfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJZGlzcGF0Y2ggKCJzZXR0eXBlIGV4dDJfaW5vZGUiKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkZpbGUgbW92ZW1lbnQ8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS4gTW92ZW1lbnQgaW5zaWRlIHRoZQorY3VycmVudCBibG9jayBpcyBkb25lIHVzaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dCwgcHJldiBhbmQgb2Zmc2V0PC9MaXRlcmFsPiAtIFRoZXkganVzdCBjaGFuZ2UKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZSZsb3diYXI7aW5mby5vZmZzZXQmbG93YmFyO2luJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorTW92ZW1lbnQgYmV0d2VlbiBibG9ja3MgaXMgZG9uZSB1c2luZyA8TGl0ZXJhbCByZW1hcD0idHQiPm5leHRibG9jaywgcHJldmJsb2NrIGFuZCBibG9jazwvTGl0ZXJhbD4uCitUbyBhY2NvbXBsaXNoIHRoaXMsIHRoZSBkaXJlY3QgYmxvY2tzLCBpbmRpcmVjdCBibG9ja3MsIGV0YywgbmVlZCB0byBiZQordHJhY2VkLiBUaGlzIGlzIGRvbmUgYnkgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlJmxvd2JhcjtibG9jayZsb3diYXI7dG8mbG93YmFyO2dsb2JhbCZsb3diYXI7YmxvY2s8L0xpdGVyYWw+LCB3aGljaCBhY2NlcHRzIGEKK2ZpbGUncyBpbnRlcm5hbCBibG9jayBudW1iZXIsIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgYWN0dWFsIGZpbGVzeXN0ZW0gYmxvY2sKK251bWJlci4KKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK2xvbmcgZmlsZV9ibG9ja190b19nbG9iYWxfYmxvY2sgKGxvbmcgZmlsZV9ibG9jayxzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqZmlsZV9pbmZvX3B0cikKKworeworCWxvbmcgbGFzdF9kaXJlY3QsbGFzdF9pbmRpcmVjdCxsYXN0X2RpbmRpcmVjdDsKKwlsb25nIGZfaW5kaXJlY3Qsc19pbmRpcmVjdDsKKwkKKwlsYXN0X2RpcmVjdD1FWFQyX05ESVJfQkxPQ0tTLTE7CisJbGFzdF9pbmRpcmVjdD1sYXN0X2RpcmVjdCtmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNDsKKwlsYXN0X2RpbmRpcmVjdD1sYXN0X2luZGlyZWN0KyhmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkgXAorCQkqKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KTsKKworCWlmIChmaWxlX2Jsb2NrICYjNjA7PSBsYXN0X2RpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLSYjNjI7bGV2ZWw9MDsKKwkJcmV0dXJuIChmaWxlX2luZm9fcHRyLSYjNjI7aW5vZGVfcHRyLSYjNjI7aV9ibG9jayBbZmlsZV9ibG9ja10pOworCX0KKwkKKwlpZiAoZmlsZV9ibG9jayAmIzYwOz0gbGFzdF9pbmRpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLSYjNjI7bGV2ZWw9MTsKKwkJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfZGlyZWN0LTE7CisJCXJldHVybiAocmV0dXJuX2luZGlyZWN0IChmaWxlX2luZm9fcHRyLSYjNjI7aW5vZGVfcHRyLSYjNjI7IFwKKwkJCWlfYmxvY2sgW0VYVDJfSU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7CisJfQorCisJaWYgKGZpbGVfYmxvY2sgJiM2MDs9IGxhc3RfZGluZGlyZWN0KSB7CisJCWZpbGVfaW5mb19wdHItJiM2MjtsZXZlbD0yOworCQlmaWxlX2Jsb2NrPWZpbGVfYmxvY2stbGFzdF9pbmRpcmVjdC0xOworCQlyZXR1cm4gKHJldHVybl9kaW5kaXJlY3QgKGZpbGVfaW5mb19wdHItJiM2Mjtpbm9kZV9wdHItJiM2MjsgXAorCQkJaV9ibG9jayBbRVhUMl9ESU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7CisJfQorCisJZmlsZV9pbmZvX3B0ci0mIzYyO2xldmVsPTM7CisJZmlsZV9ibG9jaz1maWxlX2Jsb2NrLWxhc3RfZGluZGlyZWN0LTE7CisJcmV0dXJuIChyZXR1cm5fdGluZGlyZWN0IChmaWxlX2luZm9fcHRyLSYjNjI7aW5vZGVfcHRyLSYjNjI7IFwKKwkJaV9ibG9jayBbRVhUMl9USU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7Cit9Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8TGl0ZXJhbCByZW1hcD0idHQiPmxhc3QmbG93YmFyO2RpcmVjdCwgbGFzdCZsb3diYXI7aW5kaXJlY3QsIGV0YzwvTGl0ZXJhbD4sIGNvbnRhaW4gdGhlIGxhc3QgaW50ZXJuYWwgYmxvY2sgbnVtYmVyCit3aGljaCBpcyBhY2Nlc3NlZCBieSB0aGlzIG1ldGhvZCAtIElmIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgc21hbGxlciB0aGVuCis8TGl0ZXJhbCByZW1hcD0idHQiPmxhc3QmbG93YmFyO2RpcmVjdDwvTGl0ZXJhbD4sIGZvciBleGFtcGxlLCBpdCBpcyBhIGRpcmVjdCBibG9jay4KKzwvUGFyYT4KKworPFBhcmE+CitJZiB0aGUgYmxvY2sgaXMgYSBkaXJlY3QgYmxvY2ssIGl0cyBudW1iZXIgaXMganVzdCB0YWtlbiBmcm9tIHRoZSBpbm9kZS4KK0Egbm9uLWRpcmVjdCBibG9jayBpcyBoYW5kbGVkIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmV0dXJuJmxvd2JhcjtpbmRpcmVjdCwgcmV0dXJuJmxvd2JhcjtkaW5kaXJlY3QgYW5kCityZXR1cm4mbG93YmFyO3RpbmRpcmVjdDwvTGl0ZXJhbD4sIHdoaWNoIGNvcnJlc3BvbmQgdG8gaW5kaXJlY3QsIGRvdWJsZS1pbmRpcmVjdCBhbmQKK3RyaXBsZS1pbmRpcmVjdC4gRWFjaCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBsb3dlcgorbGV2ZWwgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZSwgPExpdGVyYWwgcmVtYXA9InR0Ij5yZXR1cm4mbG93YmFyO2RpbmRpcmVjdDwvTGl0ZXJhbD4gaXMgY29uc3RydWN0ZWQgYXMKK2ZvbGxvd3M6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+Citsb25nIHJldHVybl9kaW5kaXJlY3QgKGxvbmcgdGFibGVfYmxvY2ssbG9uZyBibG9ja19udW0pCisKK3sKKwlsb25nIGZfaW5kaXJlY3Q7CisJCisJZl9pbmRpcmVjdD1ibG9ja19udW0vKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KTsKKwlmX2luZGlyZWN0PXJldHVybl9pbmRpcmVjdCAodGFibGVfYmxvY2ssZl9pbmRpcmVjdCk7CisJcmV0dXJuIChyZXR1cm5faW5kaXJlY3QgKGZfaW5kaXJlY3QsYmxvY2tfbnVtJShmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkpKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPk9iamVjdCBtZW1vcnk8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJlbWVtYmVyPC9MaXRlcmFsPiBjb21tYW5kIGlzIG92ZXJyaWRkZW4gaGVyZSBhbmQgaW4gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyPC9MaXRlcmFsPiB0eXBlIC0KK1dlIGp1c3QgcmVtZW1iZXIgdGhlIGlub2RlIG9mIHRoZSBmaWxlLiBJdCBpcyBqdXN0IHNpbXBsZXIgdG8gaW1wbGVtZW50LCBhbmQKK2RvZXNuJ3Qgc2VlbSBsaWtlIGEgYmlnIGxpbWl0YXRpb24uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5DaGFuZ2luZyBkYXRhPC9UaXRsZT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zZXQ8L0xpdGVyYWw+IGNvbW1hbmQgaXMgb3ZlcnJpZGRlbiwgYW5kIHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkKK2xpa2UgdGhlIHVzYWdlIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgc2V0PC9MaXRlcmFsPiBjb21tYW5kIHdpdGggbm8gdHlwZSBkZWNsYXJlZC4gVGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPndyaXRlZGF0YTwvTGl0ZXJhbD4gaXMgb3ZlcnJpZGRlbiBzbyB0aGF0IHdlJ2xsIHdyaXRlIHRoZSBlZGl0ZWQgYmxvY2sKKyhmaWxlJmxvd2JhcjtpbmZvLmJ1ZmZlcikgYW5kIG5vdCA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGUmbG93YmFyO2RhdGE8L0xpdGVyYWw+IChXaGljaCBjb250YWlucyB0aGUgaW5vZGUpLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+RGlyZWN0b3JpZXM8L1RpdGxlPgorCis8UGFyYT4KK0EgZGlyZWN0b3J5IGlzIGp1c3QgYSBmaWxlIHdoaWNoIGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gYSBzcGVjaWFsIGZvcm1hdC4KK0FzIHN1Y2gsIEVYVDJFRCBoYW5kbGVzIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBxdWl0ZSBhbGlrZS4gU3BlY2lmaWNhbGx5LCB0aGUKK3NhbWUgdmFyaWFibGUgb2YgdHlwZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN0cnVjdCZsb3diYXI7ZmlsZSZsb3diYXI7aW5mbzwvTGl0ZXJhbD4gd2hpY2ggaXMgdXNlZCBpbiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4sIGlzIHVzZWQgaGVyZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IHR5cGUgdXNlcyBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgYWJvdmUgc3RydWN0dXJlLCBhcworb3Bwb3NlZCB0byB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiB0eXBlLCB3aGljaCBkaWRuJ3QgdXNlIHRoZSBsYXN0IG9uZXMuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5UaGUgc2VhcmNoJmxvd2JhcjtkaXImbG93YmFyO2VudHJpZXMgZnVuY3Rpb248L1RpdGxlPgorCis8UGFyYT4KK1RoZSBlbnRpcmUgc2l0dWF0aW9uIGlzIHNpbWlsYXIgdG8gdGhhdCB3aGljaCB3YXMgZGVzY3JpYmVkIGluIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiB0eXBlLCB3aXRoIG9uZSBtYWluIGNoYW5nZToKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgbWFpbiBmdW5jdGlvbiBpbiA8TGl0ZXJhbCByZW1hcD0idHQiPmRpciZsb3diYXI7Y29tLmM8L0xpdGVyYWw+IGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2VhcmNoJmxvd2JhcjtkaXImbG93YmFyO2VudHJpZXM8L0xpdGVyYWw+LiBUaGlzCitmdW5jdGlvbiB3aWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+InJ1biI8L0xpdGVyYWw+IG9uIHRoZSBlbnRpcmUgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5LCBhbmQgd2lsbAorY2FsbCBhIGNsaWVudCdzIGZ1bmN0aW9uIGVhY2ggdGltZS4gVGhlIGNsaWVudCdzIGZ1bmN0aW9uIGlzIHN1cHBsaWVkIGFzIGFuCithcmd1bWVudCwgYW5kIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgZW50cnkgZm9yIGEgbWF0Y2gsIGJhc2VkIG9uIGl0cyBvd24KK2NyaXRlcmlvbi4gSXQgd2lsbCB0aGVuIHNpZ25hbCA8TGl0ZXJhbCByZW1hcD0idHQiPnNlYXJjaCZsb3diYXI7ZGlyJmxvd2JhcjtlbnRyaWVzPC9MaXRlcmFsPiB3aGV0aGVyIHRvCis8TGl0ZXJhbCByZW1hcD0idHQiPkFCT1JUPC9MaXRlcmFsPiB0aGUgc2VhcmNoLCB3aGV0aGVyIGl0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+Rk9VTkQ8L0xpdGVyYWw+IHRoZSBlbnRyeSBpdCB3YXMgbG9va2luZworZm9yLCBvciB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCBub3QgZm91bmQsIGFuZCB3ZSBzaG91bGQgPExpdGVyYWwgcmVtYXA9InR0Ij5DT05USU5VRTwvTGl0ZXJhbD4KK3NlYXJjaGluZy4gRm9sbG93cyB0aGUgZGVjbGFyYXRpb246CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIHNlYXJjaF9kaXJfZW50cmllcyBcIAorCShpbnQgKCphY3Rpb24pIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbyksaW50ICpzdGF0dXMpCisKKy8qCisJVGhpcyByb3V0aW5lIHJ1bnMgb24gYWxsIGRpcmVjdG9yeSBlbnRyaWVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwlGb3IgZWFjaCBlbnRyeSwgYWN0aW9uIGlzIGNhbGxlZC4gVGhlIHJldHVybiBjb2RlIG9mIGFjdGlvbiBpcyBvbmUgb2YKKwl0aGUgZm9sbG93aW5nOgorCQorCQlBQk9SVAkJLQlDdXJyZW50IGRpciBlbnRyeSBpcyByZXR1cm5lZC4KKwkJQ09OVElOVUUJLQlDb250aW51ZSBzZWFyY2hpbmcuCisJCUZPVU5ECQktCUN1cnJlbnQgZGlyIGVudHJ5IGlzIHJldHVybmVkLgorCQkKKwlJZiB0aGUgbGFzdCBlbnRyeSBpcyByZWFjaGVkLCBpdCBpcyByZXR1cm5lZCwgYWxvbmcgd2l0aCBhbiBBQk9SVCBzdGF0dXMuCisJCisJc3RhdHVzIGlzIHVwZGF0ZWQgdG8gdGhlIHJldHVybmVkIGNvZGUgb2YgYWN0aW9uLgkKKyovCis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorV2l0aCB0aGUgYWJvdmUgdG9vbCBpbiBoYW5kLCBtYW55IG9wZXJhdGlvbnMgYXJlIHNpbXBsZSB0byBwZXJmb3JtIC0gSGVyZSBpcwordGhlIHdheSBJIGNvdW50ZWQgdGhlIGVudHJpZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5OgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorbG9uZyBjb3VudF9kaXJfZW50cmllcyAodm9pZCkKKworeworCWludCBzdGF0dXM7CisJCisJcmV0dXJuIChzZWFyY2hfZGlyX2VudHJpZXMgKCZhbXA7YWN0aW9uX2NvdW50LCZhbXA7c3RhdHVzKS5kaXJfZW50cnlfbnVtKTsKK30KKworaW50IGFjdGlvbl9jb3VudCAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pCisKK3sKKwlyZXR1cm4gKENPTlRJTlVFKTsKK30KKzwvUHJvZ3JhbUxpc3Rpbmc+CisKK0l0IHdpbGwganVzdCA8TGl0ZXJhbCByZW1hcD0idHQiPkNPTlRJTlVFPC9MaXRlcmFsPiB1bnRpbCB0aGUgbGFzdCBlbnRyeS4gVGhlIHJldHVybmVkIHN0cnVjdHVyZQorKG9mIHR5cGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdHJ1Y3QmbG93YmFyO2ZpbGUmbG93YmFyO2luZm88L0xpdGVyYWw+KSB3aWxsIGhhdmUgaXRzIG51bWJlciBpbiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyJmxvd2JhcjtlbnRyeSZsb3diYXI7bnVtPC9MaXRlcmFsPiBmaWVsZCwgYW5kIHRoaXMgaXMgZXhhY3RseSB0aGUgcmVxdWlyZWQgbnVtYmVyIQorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIGNkIGNvbW1hbmQ8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmNkPC9MaXRlcmFsPiBjb21tYW5kIGFjY2VwdHMgYSByZWxhdGl2ZSBwYXRoLCBhbmQgbW92ZXMgdGhlcmUgLi4uCitUaGUgaW1wbGVtZW50YXRpb24gaXMgb2YtY291cnNlIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQ6CisKKzxPcmRlcmVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHBhdGggaXMgY2hlY2tlZCB0aGF0IGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIChmcm9tIDxMaXRlcmFsIHJlbWFwPSJ0dCI+LzwvTGl0ZXJhbD4pLgorSWYgaXQgaXMsIHdlIGxldCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5nZW5lcmFsIGNkPC9MaXRlcmFsPiB0byBkbyB0aGUgam9iIGJ5IGNhbGxpbmcKK2RpcmVjdGx5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+dHlwZSZsb3diYXI7ZXh0MiZsb3diYXI7Jmxvd2JhcjsmbG93YmFyO2NkPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBwYXRoIGlzIGRpdmlkZWQgaW50byB0aGUgbmVhcmVzdCBwYXRoIGFuZCB0aGUgcmVzdCBvZiB0aGUgcGF0aC4KK0ZvciBleGFtcGxlLCBjZCAxLzIvMy80IGlzIGRpdmlkZWQgaW50byA8TGl0ZXJhbCByZW1hcD0idHQiPjE8L0xpdGVyYWw+IGFuZCBpbnRvCis8TGl0ZXJhbCByZW1hcD0idHQiPjIvMy80PC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUl0IGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXRoIHRoYXQgd2UgbmVlZCB0byBzZWFyY2ggZm9yIGluIHRoZQorY3VycmVudCBkaXJlY3RvcnkuIFdlIHNlYXJjaCBmb3IgaXQgdXNpbmcgPExpdGVyYWwgcmVtYXA9InR0Ij5zZWFyY2gmbG93YmFyO2RpciZsb3diYXI7ZW50cmllczwvTGl0ZXJhbD4sCit3aGljaCBhY2NlcHRzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFjdGlvbiZsb3diYXI7bmFtZTwvTGl0ZXJhbD4gZnVuY3Rpb24gYXMgdGhlIHVzZXIgZGVmaW5lZAorZnVuY3Rpb24uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPnNlYXJjaCZsb3diYXI7ZGlyJmxvd2JhcjtlbnRyaWVzPC9MaXRlcmFsPiB3aWxsIHNjYW4gdGhlIGVudGlyZSBlbnRyaWVzIGFuZCB3aWxsIGNhbGwKK291ciA8TGl0ZXJhbCByZW1hcD0idHQiPmFjdGlvbiZsb3diYXI7bmFtZTwvTGl0ZXJhbD4gZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkuIEluCis8TGl0ZXJhbCByZW1hcD0idHQiPmFjdGlvbiZsb3diYXI7bmFtZTwvTGl0ZXJhbD4sIHRoZSByZXF1aXJlZCBuYW1lIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZQorbmFtZSBvZiB0aGUgY3VycmVudCBlbnRyeSwgYW5kIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Rk9VTkQ8L0xpdGVyYWw+IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBhCittYXRjaCBvY2N1cnMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJZiB0aGUgcmVxdWlyZWQgZW50cnkgaXMgZm91bmQsIHdlIGRpc3BhdGNoIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5yZW1lbWJlcjwvTGl0ZXJhbD4KK2NvbW1hbmQgdG8gaW5zZXJ0IHRoZSBjdXJyZW50IDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGU8L0xpdGVyYWw+IGludG8gdGhlIG9iamVjdCBtZW1vcnkuCitUaGlzIGlzIHJlcXVpcmVkIHRvIGVhc2lseSBzdXBwb3J0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3ltYm9saWMgbGlua3M8L0xpdGVyYWw+IC0gSWYgd2UKK2ZpbmQgbGF0ZXIgdGhhdCB0aGUgaW5vZGUgcG9pbnRlZCBieSB0aGUgZW50cnkgaXMgYWN0dWFsbHkgYQorc3ltYm9saWMgbGluaywgd2UnbGwgbmVlZCB0byByZXR1cm4gdG8gdGhpcyBwb2ludCwgYW5kIHRoZSBhYm92ZQoraW5vZGUgZG9lc24ndCBoYXZlIChhbmQgY2FuJ3QgaGF2ZSwgYmVjYXVzZSBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPmhhcmQgbGlua3M8L0xpdGVyYWw+KSB0aGUKK2luZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byAibW92ZSBiYWNrIi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdlIHRoZW4gZGlzcGF0Y2ggYSA8TGl0ZXJhbCByZW1hcD0idHQiPmZvbGxvd2lub2RlPC9MaXRlcmFsPiBjb21tYW5kIHRvIHJlYWNoIHRoZSBpbm9kZQorcG9pbnRlZCBieSB0aGUgcmVxdWlyZWQgZW50cnkuIFRoaXMgY29tbWFuZCB3aWxsIGF1dG9tYXRpY2FsbHkKK2NoYW5nZSB0aGUgdHlwZSB0byA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2lub2RlPC9MaXRlcmFsPiAtIFdlIGFyZSBub3cgYXQgYW4gaW5vZGUsIGFuZAorYWxsIHRoZSBpbm9kZSBjb21tYW5kcyBhcmUgYXZhaWxhYmxlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJV2UgY2hlY2sgdGhlIGlub2RlJ3MgdHlwZSB0byBzZWUgaWYgaXQgaXMgYSBkaXJlY3RvcnkuIElmIGl0IGlzLCB3ZQorZGlzcGF0Y2ggYSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4gY29tbWFuZCB0byAiZW50ZXIgdGhlIGRpcmVjdG9yeSIsIGFuZAorcmVjdXJzaXZlbHkgY2FsbCBvdXJzZWxmIChUaGUgdHlwZSBpcyA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4gYWdhaW4pIGJ5CitkaXNwYXRjaGluZyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2Q8L0xpdGVyYWw+IGNvbW1hbmQsIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHBhdGggYXMgYW4KK2FyZ3VtZW50LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSWYgdGhlIGlub2RlJ3MgdHlwZSBpcyBhIHN5bWJvbGljIGxpbmsgKG9ubHkgZmFzdCBzeW1ib2xpYyBsaW5rIHdlcmUKK21lYW53aGlsZSBpbXBsZW1lbnRlZC4gSSBndWVzcyB0aGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZS4pLCB3ZSBub3RlCit0aGUgcGF0aCBpdCBpcyBwb2ludGluZyBhdCwgdGhlCXNhdmVkIGlub2RlIGlzIHJlY2FsbGVkLCB3ZSBkaXNwYXRjaAorPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+IHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBkaXJlY3RvcnksIGFuZCB3ZSBjYWxsCitvdXJzZWxmIGFnYWluIHdpdGggdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bGluayBwYXRoL3Jlc3Qgb2YgdGhlIHBhdGg8L0xpdGVyYWw+IGFyZ3VtZW50LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW4gYW55IG90aGVyIGNhc2UsIHdlIGp1c3Qgc3RvcCBhdCB0aGUgcmVzdWx0aW5nIGlub2RlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGJsb2NrIGFuZCBpbm9kZSBhbGxvY2F0aW9uIGJpdG1hcHM8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBibG9jayBhbGxvY2F0aW9uIGJpdG1hcCBpcyByZWFjaGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwIGRlc2NyaXB0b3IuCitUaGUgZ3JvdXAgZGVzY3JpcHRvciBoYW5kbGluZyBmdW5jdGlvbnMgd2lsbCBzYXZlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24KK2ludG8gYSBzdHJ1Y3R1cmUgb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3RydWN0Jmxvd2JhcjtibG9jayZsb3diYXI7Yml0bWFwJmxvd2JhcjtpbmZvPC9MaXRlcmFsPiB0eXBlOgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IHN0cnVjdF9ibG9ja19iaXRtYXBfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBlbnRyeV9udW07CisJdW5zaWduZWQgbG9uZyBncm91cF9udW07Cit9OworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnNob3c8L0xpdGVyYWw+IGNvbW1hbmQgaXMgb3ZlcnJpZGRlbiwgYW5kIHdpbGwgc2hvdyB0aGUgYmxvY2sgYXMgYSBzZXJpZXMgb2YKK2JpdHMsIGVhY2ggYml0IGNvcnJlc3BvbmRpbmcgdG8gYSBibG9jay4gVGhlIG1haW4gdmFyaWFibGUgaXMgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmVudHJ5Jmxvd2JhcjtudW08L0xpdGVyYWw+IHZhcmlhYmxlLCBkZWNsYXJlZCBhYm92ZSwgd2hpY2ggaXMganVzdCB0aGUgY3VycmVudCBibG9jaworbnVtYmVyIGluIHRoaXMgYmxvY2sgZ3JvdXAuIFRoZSBjdXJyZW50IGVudHJ5IGlzIGhpZ2hsaWdodGVkLCBhbmQgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPm5leHQsIHByZXYgYW5kIGVudHJ5PC9MaXRlcmFsPiBjb21tYW5kcyBqdXN0IGNoYW5nZSB0aGUgYWJvdmUgdmFyaWFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWxsb2NhdGUgYW5kIGRlYWxsb2NhdGU8L0xpdGVyYWw+IGNoYW5nZSB0aGUgc3BlY2lmaWVkIGJpdHMuIE5vdGhpbmcKK3NwZWNpYWwgYWJvdXQgdGhlbSAtIFRoZXkganVzdCBjb250YWluIGNvZGUgd2hpY2ggY29udmVydHMgYmV0d2VlbiBiaXQgYW5kCitieXRlIGxvY2F0aW9ucy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZSBhbGxvY2F0aW9uIGJpdG1hcDwvTGl0ZXJhbD4gaXMgdHJlYXRlZCBpbiBtdWNoIHRoZSBzYW1lIGZhc2hpb24sIHdpdGgKK3RoZSBzYW1lIGNvbW1hbmRzIGF2YWlsYWJsZS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkZpbGVzeXN0ZW0gc2l6ZSBsaW1pdGF0aW9uPC9UaXRsZT4KKworPFBhcmE+CitXaGlsZSBhbiBleHQyIGZpbGVzeXN0ZW0gaGFzIGEgc2l6ZSBsaW1pdCBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPjQgVEI8L0xpdGVyYWw+LCBFWFQyRUQgY3VycmVudGx5Cis8TGl0ZXJhbCByZW1hcD0idHQiPmNhbid0PC9MaXRlcmFsPiBoYW5kbGUgZmlsZXN5c3RlbXMgd2hpY2ggYXJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmlnZ2VyIHRoYW4gMiBHQjwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorVGhpcyBsaW1pdGF0aW9uIHJlc3VsdHMgZnJvbSBteSB1c2FnZSBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPjMyIGJpdCBsb25nIHZhcmlhYmxlczwvTGl0ZXJhbD4gYW5kCitvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5mc2VlazwvTGl0ZXJhbD4gZmlsZXN5c3RlbSBjYWxsLCB3aGljaCBjYW4ndCBzZWVrIHVwIHRvIDQgVEIuCis8L1BhcmE+CisKKzxQYXJhPgorQnkgbG9va2luZyBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyIGxpYnJhcnk8L0xpdGVyYWw+IHNvdXJjZSBjb2RlIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+VGhlb2RvcmUgVHMnbzwvTGl0ZXJhbD4sCitJIGRpc2NvdmVyZWQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bGxzZWVrPC9MaXRlcmFsPiBzeXN0ZW0gY2FsbCB3aGljaCBjYW4gc2VlayB0byBhCis8TGl0ZXJhbCByZW1hcD0idHQiPjY0IGJpdCB1bnNpZ25lZCBsb25nIGxvbmc8L0xpdGVyYWw+IG9mZnNldC4gQ29ycmVjdGluZyB0aGUgc2l0dWF0aW9uIGlzIG5vdAorZGlmZmljdWx0IGluIGNvbmNlcHQgLSBJIG5lZWQgdG8gY2hhbmdlIGxvbmcgaW50byB1bnNpZ25lZCBsb25nIGxvbmcgd2hlcmUKK2FwcHJvcHJpYXRlIGFuZCBtb2RpZnkgPExpdGVyYWwgcmVtYXA9InR0Ij5kaXNrLmM8L0xpdGVyYWw+IHRvIHVzZSB0aGUgbGxzZWVrIHN5c3RlbSBjYWxsLgorPC9QYXJhPgorCis8UGFyYT4KK0hvd2V2ZXIsIGZpeGluZyB0aGUgYWJvdmUgbGltaXRhdGlvbiBpbnZvbHZlcyBtYWtpbmcgY2hhbmdlcyBpbiBtYW55IHBsYWNlcworaW4gdGhlIGNvZGUgYW5kIHdpbGwgb2J2aW91c2x5IG1ha2UgdGhlIGVudGlyZSBjb2RlIGxlc3Mgc3RhYmxlLiBGb3IgdGhhdAorcmVhc29uLCBJIGNob3NlIHRvIHJlbGVhc2UgRVhUMkVEIGFzIGl0IGlzIG5vdyBhbmQgdG8gcG9zdHBvbmUgdGhlIGFib3ZlIGZpeAordG8gdGhlIG5leHQgcmVsZWFzZS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkNvbmNsdXNpb248L1RpdGxlPgorCis8UGFyYT4KK0hhZCBJIGtub3duIGluIGFkdmFuY2UgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtLCBJIGZlZWwgdGhhdAordGhlIHJlc3VsdGluZyBkZXNpZ24gd291bGQgaGF2ZSBiZWVuIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBwcmVzZW50ZWQKK2Rlc2lnbiBhYm92ZS4KKzwvUGFyYT4KKworPFBhcmE+CitFWFQyRUQgaGFzIG5vdyB0d28gbGV2ZWxzIG9mIGFic3RyYWN0aW9uIC0gQSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWw8L0xpdGVyYWw+IGZpbGVzeXN0ZW0sIGFuZCBhbgorPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyPC9MaXRlcmFsPiBmaWxlc3lzdGVtLCBhbmQgdGhlIHN1cmZhY2UgaXMgbW9yZSBvciBsZXNzIHByZXBhcmVkIGZvciBhZGRpdGlvbnMKK29mIG90aGVyIGZpbGVzeXN0ZW1zLiBIYWQgSSBhcHByb2FjaGVkIHRoZSBkZXNpZ24gaW4gdGhlICJlbmdpbmVlcmluZyIgd2F5LAorSSBndWVzcyB0aGF0IHRoZSBmaXJzdCBsZXZlbCBhYm92ZSB3b3VsZCBub3QgaGF2ZSBleGlzdGVkLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+Q29weXJpZ2h0PC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgaXMgQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4uCis8L1BhcmE+CisKKzxQYXJhPgorRVhUMkVEIGlzIGhlcmVieSBwbGFjZWQgdW5kZXIgdGhlIEdQTCAtIEdudSBQdWJsaWMgTGljZW5zZS4gWW91IGFyZSBmcmVlIGFuZAord2VsY29tZSB0byBjb3B5LCB2aWV3IGFuZCBtb2RpZnkgdGhlIHNvdXJjZXMuIE15IG9ubHkgd2lzaCBpcyB0aGF0IG15Citjb3B5cmlnaHQgcHJlc2VudGVkIGFib3ZlIHdpbGwgYmUgbGVmdCBhbmQgdGhhdCBhIGxpc3Qgb2YgdGhlIGJ1ZyBmaXhlcywKK2FkZGVkIGZlYXR1cmVzLCBldGMsIHdpbGwgYmUgcHJvdmlkZWQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGVudGlyZSBFWFQyRUQgcHJvamVjdCBpcyBiYXNlZCwgb2YtY291cnNlLCBvbiB0aGUga2VybmVsIHNvdXJjZXMuIFRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyLmRlc2NyaXB0b3JzPC9MaXRlcmFsPiBkaXN0cmlidXRlZCB3aXRoIEVYVDJFRCBpcyBhIHNsaWdodGx5IG1vZGlmaWVkCit2ZXJzaW9uIG9mIHRoZSBtYWluIGV4dDIgaW5jbHVkZSBmaWxlLCAvdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaC4gRm9sbG93cwordGhlIG9yaWdpbmFsIGNvcHlyaWdodDoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogIGZyb20KKyAqCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9taW5peF9mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqLworCis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5BY2tub3dsZWRnbWVudHM8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCB3YXMgY29uc3RydWN0ZWQgYXMgYSBzdHVkZW50IHByb2plY3QgaW4gdGhlIHNvZnR3YXJlCitsYWJvcmF0b3J5IG9mIHRoZSBmYWN1bHR5IG9mIGVsZWN0cmljYWwtZW5naW5lZXJpbmcgaW4gdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPlRlY2huaW9uIC0gSXNyYWVsJ3MgaW5zdGl0dXRlIG9mIHRlY2hub2xvZ3k8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK0F0IGZpcnN0LCBJIHdvdWxkIGxpa2UgdG8gdGhhbmsgPExpdGVyYWwgcmVtYXA9InR0Ij5Bdm5lciBMb3R0ZW08L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPkRvY3RvciBJbGFuYQorRGF2aWQ8L0xpdGVyYWw+IGZvciB0aGVpciBpbnRlcmVzdCBhbmQgYXNzaXN0YW5jZSBpbiB0aGlzIHByb2plY3QuCis8L1BhcmE+CisKKzxQYXJhPgorSSB3b3VsZCBhbHNvIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUsIHdobyB3ZXJlIGludm9sdmVkIGluIHRoZQorZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIGtlcm5lbCBjb2RlIGFuZCBzdXBwb3J0Cit1dGlsaXRpZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPgorCitXaG8gZGVzaWduZWQsIGltcGxlbWVudGVkIGFuZCBtYWludGFpbnMgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwKK2NvZGUsIGFuZCBzb21lIG9mIHRoZSBleHQyIHV0aWxpdGllcy4gPExpdGVyYWwgcmVtYXA9InR0Ij5SZW15IENhcmQ8L0xpdGVyYWw+IGlzIGFsc28gdGhlCithdXRob3IgCW9mIHNldmVyYWwgaGVscGZ1bCBzbGlkZXMgY29uY2VybmluZyB0aGUgZXh0MiBmaWxlc3lzdGVtLgorU3BlY2lmaWNhbGx5LCBoZSBpcyB0aGUgYXV0aG9yIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+RmlsZSBNYW5hZ2VtZW50IGluIHRoZSBMaW51eAorS2VybmVsPC9MaXRlcmFsPiBhbmQgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5UaGUgU2Vjb25kIEV4dGVuZGVkIEZpbGUgU3lzdGVtIC0gQ3VycmVudAorU3RhdGUsIEZ1dHVyZSBEZXZlbG9wbWVudDwvTGl0ZXJhbD4uCisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+V2F5bmUgRGF2aXNvbjwvTGl0ZXJhbD4KKworV2hvIGRlc2lnbmVkIHRoZSBleHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlN0ZXBoZW4gVHdlZWRpZTwvTGl0ZXJhbD4KKworV2hvIGhlbHBlZCBkZXNpZ25pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwgY29kZSBhbmQgd3JvdGUgdGhlCitzbGlkZXMgPExpdGVyYWwgcmVtYXA9InR0Ij5PcHRpbWl6YXRpb25zIGluIEZpbGUgU3lzdGVtczwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlRoZW9kb3JlIFRzJ288L0xpdGVyYWw+CisKK1dobyBpcyB0aGUgYXV0aG9yIG9mIHNldmVyYWwgZXh0MiB1dGlsaXRpZXMgYW5kIG9mIHRoZSBleHQyIGxpYnJhcnkKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+bGliZXh0MmZzPC9MaXRlcmFsPiAod2hpY2ggSSBkaWRuJ3QgdXNlLCBzaW1wbHkgYmVjYXVzZSBJIGRpZG4ndCBrbm93CitpdCBleGlzdHMgd2hlbiBJIHN0YXJ0ZWQgdG8gd29yayBvbiBteSBwcm9qZWN0KS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorTGFzdGx5LCBJIHdvdWxkIGxpa2UgdG8gdGhhbmssIG9mLWNvdXJzZSwgPExpdGVyYWwgcmVtYXA9InR0Ij5MaW51cyBUb3J2YWxkczwvTGl0ZXJhbD4gYW5kIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5MaW51eCBjb21tdW5pdHk8L0xpdGVyYWw+IGZvciBwcm92aWRpbmcgYWxsIG9mIHVzIHdpdGggc3VjaCBhIGdyZWF0IG9wZXJhdGluZworc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1BsZWFzZSBjb250YWN0IG1lIGluIGEgY2FzZSBvZiBidWcgcmVwb3J0LCBzdWdnZXN0aW9ucywgb3IganVzdCBhYm91dAorYW55dGhpbmcgY29uY2VybmluZyBFWFQyRUQuCis8L1BhcmE+CisKKzxQYXJhPgorRW5qb3ksCis8L1BhcmE+CisKKzxQYXJhPgorR2FkaSBPeG1hbiAmbHQ7dGd1ZEB0b2NobmFwYzIudGVjaG5pb24uYWMuaWwmZ3Q7Cis8L1BhcmE+CisKKzxQYXJhPgorSGFpZmEsIEF1Z3VzdCA5NQorPC9QYXJhPgorCis8L1NlY3QxPgorCis8L0FydGljbGU+CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2RvYy9leHQyZnMtb3ZlcnZpZXcuc2dtbCBiL2UyZnNwcm9ncy9leHQyZWQvZG9jL2V4dDJmcy1vdmVydmlldy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZWJmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2RvYy9leHQyZnMtb3ZlcnZpZXcuc2dtbApAQCAtMCwwICsxLDE1NjkgQEAKKzwhRE9DVFlQRSBBcnRpY2xlIFBVQkxJQyAiLS8vRGF2ZW5wb3J0Ly9EVEQgRG9jQm9vayBWMy4wLy9FTiI+CisKKzxBcnRpY2xlPgorCis8QXJ0SGVhZGVyPgorCis8VGl0bGU+VGhlIGV4dGVuZGVkLTIgZmlsZXN5c3RlbSBvdmVydmlldzwvVGl0bGU+Cis8QVVUSE9SCis+Cis8Rmlyc3ROYW1lPkdhZGkgT3htYW4sIHRndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPC9GaXJzdE5hbWU+Cis8L0FVVEhPUgorPgorPFB1YkRhdGU+djAuMSwgQXVndXN0IDMgMTk5NTwvUHViRGF0ZT4KKworPC9BcnRIZWFkZXI+CisKKzxTZWN0MT4KKzxUaXRsZT5QcmVmYWNlPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIHByZXNlbnQgYW4gb3ZlcnZpZXcgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZgordGhlIGV4dDIgZmlsZXN5c3RlbS4gSXQgd2FzIHdyaXR0ZW4gaW4gc3VtbWVyIDk1LCB3aGlsZSBJIHdhcyB3b3JraW5nIG9uIHRoZSAKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiBmaWxlc3lzdGVtIGVkaXRvciBwcm9qZWN0IChFWFQyRUQpPC9MaXRlcmFsPi4gCis8L1BhcmE+CisKKzxQYXJhPgorSW4gdGhlIHByb2Nlc3Mgb2YgY29uc3RydWN0aW5nIEVYVDJFRCwgSSBhY3F1aXJlZCBrbm93bGVkZ2Ugb2YgdGhlIHZhcmlvdXMgCitkZXNpZ24gYXNwZWN0cyBvZiB0aGUgdGhlIGV4dDIgZmlsZXN5c3RlbS4gVGhpcyBkb2N1bWVudCBpcyBhIHJlc3VsdCBvZiBhbgorZWZmb3J0IHRvIGRvY3VtZW50IHRoaXMga25vd2xlZGdlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoaXMgaXMgb25seSB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQuIEl0IGlzIG9idmlvdXNseSBuZWl0aGVyCitlcnJvci1wcm9uZSBub3IgY29tcGxldGUsIGJ1dCBhdCBsZWFzdCBpdCBwcm92aWRlcyBhIHN0YXJ0aW5nIHBvaW50LgorPC9QYXJhPgorCis8UGFyYT4KK0luIHRoZSBwcm9jZXNzIG9mIGxlYXJuaW5nIHRoZSBzdWJqZWN0LCBJIGhhdmUgdXNlZCB0aGUgZm9sbG93aW5nIHNvdXJjZXMgLwordG9vbHM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUV4cGVyaW1lbnRpbmcgd2l0aCBFWFQyRUQsIGFzIGl0IHdhcyBkZXZlbG9wZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZXh0MiBrZXJuZWwgc291cmNlczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIG1haW4gZXh0MiBpbmNsdWRlIGZpbGUsCis8RklMRU5BTUU+L3Vzci9pbmNsdWRlL2xpbnV4L2V4dDImbG93YmFyO2ZzLmg8L0ZJTEVOQU1FPgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RvcnkgPEZJTEVOQU1FPi91c3Ivc3JjL2xpbnV4L2ZzL2V4dDI8L0ZJTEVOQU1FPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBWRlMgbGF5ZXIgc291cmNlcyAob25seSBhIGJpdCkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHNsaWRlczogVGhlIFNlY29uZCBFeHRlbmRlZCBGaWxlIFN5c3RlbSwgQ3VycmVudCBTdGF0ZSwgRnV0dXJlCitEZXZlbG9wbWVudCwgYnkgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5SZW15PC9maXJzdG5hbWU+IDxzdXJuYW1lPkNhcmQ8L3N1cm5hbWU+PC9wZXJzb25uYW1lPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBzbGlkZXM6IE9wdGltaXNhdGlvbiBpbiBGaWxlIFN5c3RlbXMsIGJ5IDxwZXJzb25uYW1lPjxmaXJzdG5hbWU+U3RlcGhlbjwvZmlyc3RuYW1lPiA8c3VybmFtZT5Ud2VlZGllPC9zdXJuYW1lPjwvcGVyc29ubmFtZT4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgdmFyaW91cyBleHQyIHV0aWxpdGllcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5JbnRyb2R1Y3Rpb248L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPlNlY29uZCBFeHRlbmRlZCBGaWxlIFN5c3RlbSAoRXh0MmZzKTwvTGl0ZXJhbD4gaXMgdmVyeSBwb3B1bGFyIGFtb25nIExpbnV4Cit1c2Vycy4gSWYgeW91IHVzZSBMaW51eCwgY2hhbmNlcyBhcmUgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorRXh0MmZzIHdhcyBkZXNpZ25lZCBieSA8cGVyc29ubmFtZT48Zmlyc3RuYW1lPlJlbXk8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+Q2FyZDwvc3VybmFtZT48L3BlcnNvbm5hbWU+IGFuZCA8cGVyc29ubmFtZT48Zmlyc3RuYW1lPldheW5lPC9maXJzdG5hbWU+IDxzdXJuYW1lPkRhdmlzb248L3N1cm5hbWU+PC9wZXJzb25uYW1lPi4gSXQgd2FzCitpbXBsZW1lbnRlZCBieSA8cGVyc29ubmFtZT48Zmlyc3RuYW1lPlJlbXk8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+Q2FyZDwvc3VybmFtZT48L3BlcnNvbm5hbWU+IGFuZCB3YXMgZnVydGhlciBlbmhhbmNlZCBieSA8cGVyc29ubmFtZT48Zmlyc3RuYW1lPlN0ZXBoZW48L2ZpcnN0bmFtZT4KKzxzdXJuYW1lPlR3ZWVkaWU8L3N1cm5hbWU+PC9wZXJzb25uYW1lPiBhbmQgPHBlcnNvbm5hbWU+PGZpcnN0bmFtZT5UaGVvZG9yZTwvZmlyc3RuYW1lPiA8c3VybmFtZT5UcydvPC9zdXJuYW1lPjwvcGVyc29ubmFtZT4uCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGV4dDIgZmlsZXN5c3RlbSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudC4gSSB3aWxsIGRvY3VtZW50IGhlcmUKK3ZlcnNpb24gMC41YSwgd2hpY2ggaXMgZGlzdHJpYnV0ZWQgYWxvbmcgd2l0aCBMaW51eCAxLjIueC4gQXQgdGhpcyB0aW1lIG9mCit3cml0aW5nLCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiBMaW51eCBpcyAxLjMuMTMsIGFuZCB0aGUgdmVyc2lvbiBvZiB0aGUKK2V4dDIga2VybmVsIHNvdXJjZSBpcyAwLjViLiBBIGxvdCBvZiBmYW5jeSBlbmhhbmNlbWVudHMgYXJlIHBsYW5uZWQgZm9yIHRoZQorZXh0MiBmaWxlc3lzdGVtIGluIExpbnV4IDEuMywgc28gc3RheSB0dW5lZC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkEgZmlsZXN5c3RlbSAtIFdoeSBkbyB3ZSBuZWVkIGl0PzwvVGl0bGU+CisKKzxQYXJhPgorSSB0aG91Z2h0IHRoYXQgYmVmb3JlIHdlIGRpdmUgaW50byB0aGUgdmFyaW91cyBzbWFsbCBkZXRhaWxzLCBJJ2xsIHJlc2VydmUgYQorZmV3IG1pbnV0ZXMgZm9yIHRoZSBkaXNjdXNzaW9uIG9mIGZpbGVzeXN0ZW1zIGZyb20gYSBnZW5lcmFsIHBvaW50IG9mIHZpZXcuCis8L1BhcmE+CisKKzxQYXJhPgorQSA8TGl0ZXJhbCByZW1hcD0idHQiPmZpbGVzeXN0ZW08L0xpdGVyYWw+IGNvbnNpc3RzIG9mIHR3byB3b3JkIC0gPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zeXN0ZW08L0xpdGVyYWw+LgorPC9QYXJhPgorCis8UGFyYT4KK0V2ZXJ5b25lIGtub3dzIHRoZSBtZWFuaW5nIG9mIHRoZSB3b3JkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gLSBBIGJ1bmNoIG9mIGRhdGEgcHV0Citzb21ld2hlcmUuIHdoZXJlPyBUaGlzIGlzIGFuIGltcG9ydGFudCBxdWVzdGlvbi4gSSwgZm9yIGV4YW1wbGUsIHVzdWFsbHkKK3Rocm93IGFsbW9zdCBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgZHJhd2VyLCBhbmQgaGF2ZSBkaWZmaWN1bHRpZXMgZmluZGluZworc29tZXRoaW5nIGxhdGVyLgorPC9QYXJhPgorCis8UGFyYT4KK1RoaXMgaXMgd2hlcmUgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3lzdGVtPC9MaXRlcmFsPiBjb21lcyBpbiAtIEluc3RlYWQgb2YganVzdCB0aHJvd2luZyB0aGUgZGF0YQordG8gdGhlIGRldmljZSwgd2UgZ2VuZXJhbGl6ZSBhbmQgY29uc3RydWN0IGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zeXN0ZW08L0xpdGVyYWw+IHdoaWNoIHdpbGwKK3ZpcnR1YWxpemUgZm9yIHVzIGEgbmljZSBhbmQgb3JkZXJlZCBzdHJ1Y3R1cmUgaW4gd2hpY2ggd2UgY291bGQgYXJyYW5nZSBvdXIKK2RhdGEgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgYm9va3MgYXJlIGFycmFuZ2VkIGluIGEgbGlicmFyeS4gVGhlIHB1cnBvc2Ugb2YKK3RoZSBmaWxlc3lzdGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG1ha2UgaXQgZWFzeSBmb3IgdXMgdG8gdXBkYXRlIGFuZAorbWFpbnRhaW4gb3VyIGRhdGEuCis8L1BhcmE+CisKKzxQYXJhPgorTm9ybWFsbHksIGJ5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+bW91bnRpbmc8L0xpdGVyYWw+IGZpbGVzeXN0ZW1zLCB3ZSBqdXN0IHVzZSB0aGUgbmljZSBhbmQgbG9naWNhbAordmlydHVhbCBzdHJ1Y3R1cmUuIEhvd2V2ZXIsIHRoZSBkaXNrIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhhdCAtIFRoZSBkZXZpY2UKK2RyaXZlciB2aWV3cyB0aGUgZGlzayBhcyBhIGxhcmdlIGNvbnRpbnVvdXMgcGFwZXIgaW4gd2hpY2ggd2UgY2FuIHdyaXRlIG5vdGVzCit3aGVyZXZlciB3ZSB3aXNoLiBJdCBpcyB0aGUgdGFzayBvZiB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VtZW50IGNvZGUgdG8gc3RvcmUKK2Jvb2trZWVwaW5nIGluZm9ybWF0aW9uIHdoaWNoIHdpbGwgc2VydmUgdGhlIGtlcm5lbCBmb3Igc2hvd2luZyB1cyB0aGUgbmljZQorYW5kIG9yZGVyZWQgdmlydHVhbCBzdHJ1Y3R1cmUuCis8L1BhcmE+CisKKzxQYXJhPgorSW4gdGhpcyBkb2N1bWVudCwgd2UgY29uc2lkZXIgb25lIHBhcnRpY3VsYXIgYWRtaW5pc3RyYXRpdmUgc3RydWN0dXJlIC0gVGhlCitTZWNvbmQgRXh0ZW5kZWQgRmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBMaW51eCBWRlMgbGF5ZXI8L1RpdGxlPgorCis8UGFyYT4KK1doZW4gTGludXggd2FzIGZpcnN0IGRldmVsb3BlZCwgaXQgc3VwcG9ydGVkIG9ubHkgb25lIGZpbGVzeXN0ZW0gLSBUaGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+TWluaXg8L0xpdGVyYWw+IGZpbGVzeXN0ZW0uIFRvZGF5LCBMaW51eCBoYXMgdGhlIGFiaWxpdHkgdG8gc3VwcG9ydCBzZXZlcmFsCitmaWxlc3lzdGVtcyBjb25jdXJyZW50bHkuIFRoaXMgd2FzIGRvbmUgYnkgdGhlIGludHJvZHVjdGlvbiBvZiBhbm90aGVyIGxheWVyCitiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSBmaWxlc3lzdGVtIGNvZGUgLSBUaGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUga2VybmVsICJzcGVha3MiIHdpdGggdGhlIFZGUyBsYXllci4gVGhlIFZGUyBsYXllciBwYXNzZXMgdGhlIGtlcm5lbCdzCityZXF1ZXN0IHRvIHRoZSBwcm9wZXIgZmlsZXN5c3RlbSBtYW5hZ2VtZW50IGNvZGUuIEkgaGF2ZW4ndCBsZWFybmVkIG11Y2ggb2YKK3RoZSBWRlMgbGF5ZXIgYXMgSSBkaWRuJ3QgbmVlZCBpdCBmb3IgdGhlIGNvbnN0cnVjdGlvbiBvZiBFWFQyRUQgc28gdGhhdCBJCitjYW4ndCBlbGFib3JhdGUgb24gaXQuIEp1c3QgYmUgYXdhcmUgdGhhdCBpdCBleGlzdHMuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5BYm91dCBibG9ja3MgYW5kIGJsb2NrIGdyb3VwczwvVGl0bGU+CisKKzxQYXJhPgorSW4gb3JkZXIgdG8gZWFzZSBtYW5hZ2VtZW50LCB0aGUgZXh0MiBmaWxlc3lzdGVtIGxvZ2ljYWxseSBkaXZpZGVzIHRoZSBkaXNrCitpbnRvIHNtYWxsIHVuaXRzIGNhbGxlZCA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrczwvTGl0ZXJhbD4uIEEgYmxvY2sgaXMgdGhlIHNtYWxsZXN0IHVuaXQgd2hpY2gKK2NhbiBiZSBhbGxvY2F0ZWQuIEVhY2ggYmxvY2sgaW4gdGhlIGZpbGVzeXN0ZW0gY2FuIGJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWxsb2NhdGVkPC9MaXRlcmFsPiBvcgorPExpdGVyYWwgcmVtYXA9InR0Ij5mcmVlPC9MaXRlcmFsPi4KKzxGT09UTk9URT4KKworPFBhcmE+CitUaGUgRXh0MmZzIHNvdXJjZSBjb2RlIHJlZmVycyB0byB0aGUgY29uY2VwdCBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPmZyYWdtZW50czwvTGl0ZXJhbD4sIHdoaWNoIEkKK2JlbGlldmUgYXJlIHN1cHBvc2VkIHRvIGJlIHN1Yi1ibG9jayBhbGxvY2F0aW9ucy4gQXMgZmFyIGFzIEkga25vdywKK2ZyYWdtZW50cyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkIGluIEV4dDJmcy4KKzwvUGFyYT4KKworPC9GT09UTk9URT4KKworVGhlIGJsb2NrIHNpemUgY2FuIGJlIHNlbGVjdGVkIHRvIGJlIDEwMjQsIDIwNDggb3IgNDA5NiBieXRlcyB3aGVuIGNyZWF0aW5nCit0aGUgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPFBhcmE+CitFeHQyZnMgZ3JvdXBzIHRvZ2V0aGVyIGEgZml4ZWQgbnVtYmVyIG9mIHNlcXVlbnRpYWwgYmxvY2tzIGludG8gYSA8TGl0ZXJhbCByZW1hcD0idHQiPmdyb3VwCitibG9jazwvTGl0ZXJhbD4uIFRoZSByZXN1bHRpbmcgc2l0dWF0aW9uIGlzIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgbWFuYWdlZCBhcyBhCitzZXJpZXMgb2YgZ3JvdXAgYmxvY2tzLiBUaGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8ga2VlcCByZWxhdGVkIGluZm9ybWF0aW9uCitwaHlzaWNhbGx5IGNsb3NlIG9uIHRoZSBkaXNrIGFuZCB0byBlYXNlIHRoZSBtYW5hZ2VtZW50IHRhc2suIEFzIGEgcmVzdWx0LAorbXVjaCBvZiB0aGUgZmlsZXN5c3RlbSBtYW5hZ2VtZW50IHJlZHVjZXMgdG8gbWFuYWdlbWVudCBvZiBhIHNpbmdsZSBibG9ja3MKK2dyb3VwLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIHZpZXcgb2YgaW5vZGVzIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYSBibG9ja3MgZ3JvdXA8L1RpdGxlPgorCis8UGFyYT4KK0VhY2ggZmlsZSBpbiB0aGUgZmlsZXN5c3RlbSBpcyByZXNlcnZlZCBhIHNwZWNpYWwgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZTwvTGl0ZXJhbD4uIEkgZG9uJ3Qgd2FudAordG8gZXhwbGFpbiBpbm9kZXMgbm93LiBSYXRoZXIsIEkgd291bGQgbGlrZSB0byB0cmVhdCBpdCBhcyBhbm90aGVyIHJlc291cmNlLAorbXVjaCBsaWtlIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jazwvTGl0ZXJhbD4gLSBFYWNoIGJsb2NrcyBncm91cCBjb250YWlucyBhIGxpbWl0ZWQgbnVtYmVyIG9mCitpbm9kZSwgd2hpbGUgYW55IHNwZWNpZmljIGlub2RlIGNhbiBiZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFsbG9jYXRlZDwvTGl0ZXJhbD4gb3IKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+dW5hbGxvY2F0ZWQ8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGdyb3VwIGRlc2NyaXB0b3JzPC9UaXRsZT4KKworPFBhcmE+CitFYWNoIGJsb2NrcyBncm91cCBpcyBhY2NvbXBhbmllZCBieSBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z3JvdXAgZGVzY3JpcHRvcjwvTGl0ZXJhbD4uIFRoZSBncm91cAorZGVzY3JpcHRvciBzdW1tYXJpemVzIHNvbWUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpYyBncm91cAorYmxvY2suIEZvbGxvd3MgdGhlIGRlZmluaXRpb24gb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3IsIGFzIGRlZmluZWQgaW4KKzxGSUxFTkFNRT4vdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaDwvRklMRU5BTUU+OgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IGV4dDJfZ3JvdXBfZGVzYworeworCV9fdTMyCWJnX2Jsb2NrX2JpdG1hcDsJLyogQmxvY2tzIGJpdG1hcCBibG9jayAqLworCV9fdTMyCWJnX2lub2RlX2JpdG1hcDsJLyogSW5vZGVzIGJpdG1hcCBibG9jayAqLworCV9fdTMyCWJnX2lub2RlX3RhYmxlOwkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX191MTYJYmdfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MTYJYmdfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX191MTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fdTE2CWJnX3BhZDsKKwlfX3UzMgliZ19yZXNlcnZlZFszXTsKK307Cis8L1Byb2dyYW1MaXN0aW5nPgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGxhc3QgdGhyZWUgdmFyaWFibGVzOiA8TGl0ZXJhbCByZW1hcD0idHQiPmJnJmxvd2JhcjtmcmVlJmxvd2JhcjtibG9ja3MmbG93YmFyO2NvdW50LCBiZyZsb3diYXI7ZnJlZSZsb3diYXI7aW5vZGVzJmxvd2Jhcjtjb3VudCBhbmQgYmcmbG93YmFyO3VzZWQmbG93YmFyO2RpcnMmbG93YmFyO2NvdW50PC9MaXRlcmFsPiBwcm92aWRlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHVzZSBvZiB0aGUgdGhyZWUKK3Jlc291cmNlcyBpbiBhIGJsb2NrcyBncm91cCAtIFRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrczwvTGl0ZXJhbD4sIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlczwvTGl0ZXJhbD4gYW5kIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5kaXJlY3RvcmllczwvTGl0ZXJhbD4uIEkgYmVsaWV2ZSB0aGF0IHRoZXkgYXJlIHVzZWQgYnkgdGhlIGtlcm5lbCBmb3IgYmFsYW5jaW5nCit0aGUgbG9hZCBiZXR3ZWVuIHRoZSB2YXJpb3VzIGJsb2NrcyBncm91cHMuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5iZyZsb3diYXI7YmxvY2smbG93YmFyO2JpdG1hcDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jayBhbGxvY2F0aW9uCitiaXRtYXAgYmxvY2s8L0xpdGVyYWw+LiBUaGlzIGlzIHVzZWQgdG8gYWxsb2NhdGUgLyBkZWFsbG9jYXRlIGVhY2ggYmxvY2sgaW4gdGhlCitzcGVjaWZpYyBibG9ja3MgZ3JvdXAuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5iZyZsb3diYXI7aW5vZGUmbG93YmFyO2JpdG1hcDwvTGl0ZXJhbD4gaXMgZnVsbHkgYW5hbG9nb3VzIHRvIHRoZSBwcmV2aW91cyB2YXJpYWJsZSAtIEl0Citjb250YWlucyB0aGUgYmxvY2sgbnVtYmVyIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlIGFsbG9jYXRpb24gYml0bWFwIGJsb2NrPC9MaXRlcmFsPiwgd2hpY2gKK2lzIHVzZWQgdG8gYWxsb2NhdGUgLyBkZWFsbG9jYXRlIGVhY2ggc3BlY2lmaWMgaW5vZGUgaW4gdGhlIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5iZyZsb3diYXI7aW5vZGUmbG93YmFyO3RhYmxlPC9MaXRlcmFsPiBjb250YWlucyB0aGUgYmxvY2sgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUgdGFibGUgb2YgdGhlIGN1cnJlbnQgYmxvY2tzIGdyb3VwPC9MaXRlcmFsPi4gVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUgdGFibGU8L0xpdGVyYWw+IGlzCitqdXN0IHRoZSBhY3R1YWwgaW5vZGVzIHdoaWNoIGFyZSByZXNlcnZlZCBmb3IgdGhlIGN1cnJlbnQgYmxvY2suCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGJsb2NrIGJpdG1hcCBibG9jaywgaW5vZGUgYml0bWFwIGJsb2NrIGFuZCB0aGUgaW5vZGUgdGFibGUgYXJlIGNyZWF0ZWQKK3doZW4gdGhlIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZ3JvdXAgZGVzY3JpcHRvcnMgYXJlIHBsYWNlZCBvbmUgYWZ0ZXIgdGhlIG90aGVyLiBUb2dldGhlciB0aGV5IG1ha2UgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmdyb3VwIGRlc2NyaXB0b3JzIHRhYmxlPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitFYWNoIGJsb2NrcyBncm91cCBjb250YWlucyB0aGUgZW50aXJlIHRhYmxlIG9mIGdyb3VwIGRlc2NyaXB0b3JzIGluIGl0cworc2Vjb25kIGJsb2NrLCByaWdodCBhZnRlciB0aGUgc3VwZXJibG9jay4gSG93ZXZlciwgb25seSB0aGUgZmlyc3QgY29weSAoaW4KK2dyb3VwIDApIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGtlcm5lbC4gVGhlIG90aGVyIGNvcGllcyBhcmUgdGhlcmUgZm9yCitiYWNrdXAgcHVycG9zZXMgYW5kIGNhbiBiZSBvZiB1c2UgaWYgdGhlIG1haW4gY29weSBnZXRzIGNvcnJ1cHRlZC4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBibG9jayBiaXRtYXAgYWxsb2NhdGlvbiBibG9jazwvVGl0bGU+CisKKzxQYXJhPgorRWFjaCBibG9ja3MgZ3JvdXAgY29udGFpbnMgb25lIHNwZWNpYWwgYmxvY2sgd2hpY2ggaXMgYWN0dWFsbHkgYSBtYXAgb2YgdGhlCitlbnRpcmUgYmxvY2tzIGluIHRoZSBncm91cCwgd2l0aCByZXNwZWN0IHRvIHRoZWlyIGFsbG9jYXRpb24gc3RhdHVzLiBFYWNoCis8TGl0ZXJhbCByZW1hcD0idHQiPmJpdDwvTGl0ZXJhbD4gaW4gdGhlIGJsb2NrIGJpdG1hcCBpbmRpY2F0ZWQgd2hldGhlciBhIHNwZWNpZmljIGJsb2NrIGluIHRoZQorZ3JvdXAgaXMgdXNlZCBvciBmcmVlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBmb3JtYXQgaXMgYWN0dWFsbHkgcXVpdGUgc2ltcGxlIC0gSnVzdCB2aWV3IHRoZSBlbnRpcmUgYmxvY2sgYXMgYSBzZXJpZXMKK29mIGJpdHMuIEZvciBleGFtcGxlLAorPC9QYXJhPgorCis8UGFyYT4KK1N1cHBvc2UgdGhlIGJsb2NrIHNpemUgaXMgMTAyNCBieXRlcy4gQXMgc3VjaCwgdGhlcmUgaXMgYSBwbGFjZSBmb3IKKzEwMjQqOD04MTkyIGJsb2NrcyBpbiBhIGdyb3VwIGJsb2NrLiBUaGlzIG51bWJlciBpcyBvbmUgb2YgdGhlIGZpZWxkcyBpbiB0aGUKK2ZpbGVzeXN0ZW0ncyA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyYmxvY2s8L0xpdGVyYWw+LCB3aGljaCB3aWxsIGJlIGV4cGxhaW5lZCBsYXRlci4KKzwvUGFyYT4KKworPFBhcmE+CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUJsb2NrIDAgaW4gdGhlIGJsb2NrcyBncm91cCBpcyBtYW5hZ2VkIGJ5IGJpdCAwIG9mIGJ5dGUgMCBpbiB0aGUgYml0bWFwCitibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUJsb2NrIDcgaW4gdGhlIGJsb2NrcyBncm91cCBpcyBtYW5hZ2VkIGJ5IGJpdCA3IG9mIGJ5dGUgMCBpbiB0aGUgYml0bWFwCitibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUJsb2NrIDggaW4gdGhlIGJsb2NrcyBncm91cCBpcyBtYW5hZ2VkIGJ5IGJpdCAwIG9mIGJ5dGUgMSBpbiB0aGUgYml0bWFwCitibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUJsb2NrIDgxOTEgaW4gdGhlIGJsb2NrcyBncm91cCBpcyBtYW5hZ2VkIGJ5IGJpdCA3IG9mIGJ5dGUgMTAyMyBpbiB0aGUKK2JpdG1hcCAJYmxvY2suCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0EgdmFsdWUgb2YgIjxMaXRlcmFsIHJlbWFwPSJ0dCI+MTwvTGl0ZXJhbD4iIGluIHRoZSBhcHByb3ByaWF0ZSBiaXQgc2lnbmFscyB0aGF0IHRoZSBibG9jayBpcworYWxsb2NhdGVkLCB3aGlsZSBhIHZhbHVlIG9mICI8TGl0ZXJhbCByZW1hcD0idHQiPjA8L0xpdGVyYWw+IiBzaWduYWxzIHRoYXQgdGhlIGJsb2NrIGlzCit1bmFsbG9jYXRlZC4KKzwvUGFyYT4KKworPFBhcmE+CitZb3Ugd2lsbCBwcm9iYWJseSBub3RpY2UgdGhhdCB0eXBpY2FsbHksIGFsbCB0aGUgYml0cyBpbiBhIGJ5dGUgY29udGFpbiB0aGUKK3NhbWUgdmFsdWUsIG1ha2luZyB0aGUgYnl0ZSdzIHZhbHVlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+MDwvTGl0ZXJhbD4gb3IgPExpdGVyYWwgcmVtYXA9InR0Ij4wZmZoPC9MaXRlcmFsPi4gVGhpcyBpcyBkb25lIGJ5Cit0aGUga2VybmVsIG9uIHB1cnBvc2UgaW4gb3JkZXIgdG8gZ3JvdXAgcmVsYXRlZCBkYXRhIGluIHBoeXNpY2FsbHkgY2xvc2UKK2Jsb2Nrcywgc2luY2UgdGhlIHBoeXNpY2FsIGRldmljZSBpcyB1c3VhbGx5IG9wdGltaXplZCB0byBoYW5kbGUgc3VjaCBhIGNsb3NlCityZWxhdGlvbnNoaXAuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5UaGUgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXA8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBmb3JtYXQgb2YgdGhlIGlub2RlIGFsbG9jYXRpb24gYml0bWFwIGJsb2NrIGlzIGV4YWN0bHkgbGlrZSB0aGUgZm9ybWF0IG9mCit0aGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAgYmxvY2suIFRoZSBleHBsYW5hdGlvbiBhYm92ZSBpcyB2YWxpZCBoZXJlLCB3aXRoCit0aGUgd29yayA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrPC9MaXRlcmFsPiByZXBsYWNlZCBieSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPi4gVHlwaWNhbGx5LCB0aGVyZSBhcmUgbXVjaCBsZXNzCitpbm9kZXMgdGhlbiBibG9ja3MgaW4gYSBibG9ja3MgZ3JvdXAgYW5kIHRodXMgb25seSBwYXJ0IG9mIHRoZSBpbm9kZSBiaXRtYXAKK2Jsb2NrIGlzIHVzZWQuIFRoZSBudW1iZXIgb2YgaW5vZGVzIGluIGEgYmxvY2tzIGdyb3VwIGlzIGFub3RoZXIgdmFyaWFibGUKK3doaWNoIGlzIGxpc3RlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zdXBlcmJsb2NrPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPk9uIHRoZSBpbm9kZSBhbmQgdGhlIGlub2RlIHRhYmxlczwvVGl0bGU+CisKKzxQYXJhPgorQW4gaW5vZGUgaXMgYSBtYWluIHJlc291cmNlIGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uIEl0IGlzIHVzZWQgZm9yIHZhcmlvdXMKK3B1cnBvc2VzLCBidXQgdGhlIG1haW4gdHdvIGFyZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU3VwcG9ydCBvZiBmaWxlcworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJU3VwcG9ydCBvZiBkaXJlY3RvcmllcworPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitFYWNoIGZpbGUsIGZvciBleGFtcGxlLCB3aWxsIGFsbG9jYXRlIG9uZSBpbm9kZSBmcm9tIHRoZSBmaWxlc3lzdGVtCityZXNvdXJjZXMuCis8L1BhcmE+CisKKzxQYXJhPgorQW4gZXh0MiBmaWxlc3lzdGVtIGhhcyBhIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgaW5vZGVzIHdoaWNoIGlzIGRldGVybWluZWQKK3doaWxlIGNyZWF0aW5nIHRoZSBmaWxlc3lzdGVtLiBXaGVuIGFsbCB0aGUgaW5vZGVzIGFyZSB1c2VkLCBmb3IgZXhhbXBsZSwgeW91Cit3aWxsIG5vdCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBhZGRpdGlvbmFsIGZpbGUgZXZlbiB0aG91Z2ggdGhlcmUgd2lsbCBzdGlsbAorYmUgZnJlZSBibG9ja3Mgb24gdGhlIGZpbGVzeXN0ZW0uIAorPC9QYXJhPgorCis8UGFyYT4KK0VhY2ggaW5vZGUgdGFrZXMgdXAgMTI4IGJ5dGVzIGluIHRoZSBmaWxlc3lzdGVtLiBCeSBkZWZhdWx0LCA8TGl0ZXJhbCByZW1hcD0idHQiPm1rZTJmczwvTGl0ZXJhbD4KK3Jlc2VydmVzIGFuIGlub2RlIGZvciBlYWNoIDQwOTYgYnl0ZXMgb2YgdGhlIGZpbGVzeXN0ZW0gc3BhY2UuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGlub2RlcyBhcmUgcGxhY2VkIGluIHNldmVyYWwgdGFibGVzLCBlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIHRoZSBzYW1lCitudW1iZXIgb2YgaW5vZGVzIGFuZCBpcyBwbGFjZWQgYXQgYSBkaWZmZXJlbnQgYmxvY2tzIGdyb3VwLiBUaGUgZ29hbCBpcyB0bworcGxhY2UgaW5vZGVzIGFuZCB0aGVpciByZWxhdGVkIGZpbGVzIGluIHRoZSBzYW1lIGJsb2NrcyBncm91cCBiZWNhdXNlIG9mCitsb2NhbGl0eSBhcmd1bWVudHMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG51bWJlciBvZiBpbm9kZXMgaW4gYSBibG9ja3MgZ3JvdXAgaXMgYXZhaWxhYmxlIGluIHRoZSBzdXBlcmJsb2NrIHZhcmlhYmxlCis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2lub2RlcyZsb3diYXI7cGVyJmxvd2Jhcjtncm91cDwvTGl0ZXJhbD4uIEZvciBleGFtcGxlLCBpZiB0aGVyZSBhcmUgMjAwMCBpbm9kZXMgcGVyIGdyb3VwLAorZ3JvdXAgMCB3aWxsIGNvbnRhaW4gdGhlIGlub2RlcyAxLTIwMDAsIGdyb3VwIDIgd2lsbCBjb250YWluIHRoZSBpbm9kZXMKKzIwMDEtNDAwMCwgYW5kIHNvIG9uLgorPC9QYXJhPgorCis8UGFyYT4KK0VhY2ggaW5vZGUgdGFibGUgaXMgYWNjZXNzZWQgZnJvbSB0aGUgZ3JvdXAgZGVzY3JpcHRvciBvZiB0aGUgc3BlY2lmaWMKK2Jsb2NrcyBncm91cCB3aGljaCBjb250YWlucyB0aGUgdGFibGUuCis8L1BhcmE+CisKKzxQYXJhPgorRm9sbG93cyB0aGUgc3RydWN0dXJlIG9mIGFuIGlub2RlIGluIEV4dDJmczoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX2lub2RlIHsKKwlfX3UxNglpX21vZGU7CQkvKiBGaWxlIG1vZGUgKi8KKwlfX3UxNglpX3VpZDsJCS8qIE93bmVyIFVpZCAqLworCV9fdTMyCWlfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgKi8KKwlfX3UzMglpX2F0aW1lOwkvKiBBY2Nlc3MgdGltZSAqLworCV9fdTMyCWlfY3RpbWU7CS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX3UzMglpX210aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fdTMyCWlfZHRpbWU7CS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX3UxNglpX2dpZDsJCS8qIEdyb3VwIElkICovCisJX191MTYJaV9saW5rc19jb3VudDsJLyogTGlua3MgY291bnQgKi8KKwlfX3UzMglpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJaV9mbGFnczsJLyogRmlsZSBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBsX2lfcmVzZXJ2ZWQxOworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBoX2lfdHJhbnNsYXRvcjsKKwkJfSBodXJkMTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBtX2lfcmVzZXJ2ZWQxOworCQl9IG1hc2l4MTsKKwl9IG9zZDE7CQkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJX191MzIJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMglpX3ZlcnNpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX3UzMglpX2ZpbGVfYWNsOwkvKiBGaWxlIEFDTCAqLworCV9fdTMyCWlfZGlyX2FjbDsJLyogRGlyZWN0b3J5IEFDTCAqLworCV9fdTMyCWlfZmFkZHI7CS8qIEZyYWdtZW50IGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3U4CWxfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwkJCV9fdTgJbF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX3UxNglpX3BhZDE7CisJCQlfX3UzMglsX2lfcmVzZXJ2ZWQyWzJdOworCQl9IGxpbnV4MjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJaF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAloX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CWhfaV9tb2RlX2hpZ2g7CisJCQlfX3UxNgloX2lfdWlkX2hpZ2g7CisJCQlfX3UxNgloX2lfZ2lkX2hpZ2g7CisJCQlfX3UzMgloX2lfYXV0aG9yOworCQl9IGh1cmQyOworCQlzdHJ1Y3QgeworCQkJX191OAltX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CW1faV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJbV9wYWQxOworCQkJX191MzIJbV9pX3Jlc2VydmVkMlsyXTsKKwkJfSBtYXNpeDI7CisJfSBvc2QyOwkJCQkvKiBPUyBkZXBlbmRlbnQgMiAqLworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBhbGxvY2F0ZWQgYmxvY2tzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiBhbiBpbm9kZSBpcyB0byBncm91cCB0b2dldGhlciBhIHNlcmllcyBvZgorYWxsb2NhdGVkIGJsb2Nrcy4gVGhlcmUgaXMgbm8gbGltaXRhdGlvbiBvbiB0aGUgYWxsb2NhdGVkIGJsb2NrcyAtIEVhY2gKK2Jsb2NrIGNhbiBiZSBhbGxvY2F0ZWQgdG8gZWFjaCBpbm9kZS4gTmV2ZXJ0aGVsZXNzLCBibG9jayBhbGxvY2F0aW9uIHdpbGwKK3VzdWFsbHkgYmUgZG9uZSBpbiBzZXJpZXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxvY2FsaXR5IHByaW5jaXBsZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgaW5vZGUgaXMgbm90IGFsd2F5cyB1c2VkIGluIHRoYXQgd2F5LiBJIHdpbGwgbm93IGV4cGxhaW4gdGhlIGFsbG9jYXRpb24KK29mIGJsb2NrcywgYXNzdW1pbmcgdGhhdCB0aGUgY3VycmVudCBpbm9kZSB0eXBlIGluZGVlZCByZWZlcnMgdG8gYSBsaXN0IG9mCithbGxvY2F0ZWQgYmxvY2tzLgorPC9QYXJhPgorCis8UGFyYT4KK0l0IHdhcyBmb3VuZCBleHBlcmltZW50bHkgdGhhdCBtYW55IG9mIHRoZSBmaWxlcyBpbiB0aGUgZmlsZXN5c3RlbSBhcmUKK2FjdHVhbGx5IHF1aXRlIHNtYWxsLiBUbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGVmZmVjdCwgdGhlIGtlcm5lbCBwcm92aWRlcworc3RvcmFnZSBvZiB1cCB0byAxMiBibG9jayBudW1iZXJzIGluIHRoZSBpbm9kZSBpdHNlbGYuIFRob3NlIGJsb2NrcyBhcmUKK2NhbGxlZCA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcmVjdCBibG9ja3M8L0xpdGVyYWw+LiBUaGUgYWR2YW50YWdlIGlzIHRoYXQgb25jZSB0aGUga2VybmVsIGhhcyB0aGUKK2lub2RlLCBpdCBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBmaWxlJ3MgYmxvY2tzLCB3aXRob3V0IGFuIGFkZGl0aW9uYWwgZGlzaworYWNjZXNzLiBUaG9zZSAxMiBibG9ja3MgYXJlIGRpcmVjdGx5IHNwZWNpZmllZCBpbiB0aGUgdmFyaWFibGVzCis8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2Jsb2NrWzBdIHRvIGkmbG93YmFyO2Jsb2NrWzExXTwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtibG9ja1sxMl08L0xpdGVyYWw+IGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmluZGlyZWN0IGJsb2NrPC9MaXRlcmFsPiAtIFRoZSBibG9jayBwb2ludGVkIGJ5CitpJmxvd2JhcjtibG9jayZsc3FiOzEyXSB3aWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bm90PC9MaXRlcmFsPiBiZSBhIGRhdGEgYmxvY2suIFJhdGhlciwgaXQgd2lsbCBqdXN0IGNvbnRhaW4gYQorbGlzdCBvZiBkaXJlY3QgYmxvY2tzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGJsb2NrIHNpemUgaXMgMTAyNCBieXRlcywgc2luY2UKK2VhY2ggYmxvY2sgbnVtYmVyIGlzIDQgYnl0ZXMgbG9uZywgdGhlcmUgd2lsbCBiZSBwbGFjZSBmb3IgMjU2IGluZGlyZWN0CitibG9ja3MuIFRoYXQgaXMsIGJsb2NrIDEzIHRpbGwgYmxvY2sgMjY4IGluIHRoZSBmaWxlIHdpbGwgYmUgYWNjZXNzZWQgYnkgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmluZGlyZWN0IGJsb2NrPC9MaXRlcmFsPiBtZXRob2QuIFRoZSBwZW5hbHR5IGluIHRoaXMgY2FzZSwgY29tcGFyZWQgdG8gdGhlCitkaXJlY3QgYmxvY2tzIGNhc2UsIGlzIHRoYXQgYW4gYWRkaXRpb25hbCBhY2Nlc3MgdG8gdGhlIGRldmljZSBpcyBuZWVkZWQgLQorV2UgbmVlZCA8TGl0ZXJhbCByZW1hcD0idHQiPnR3bzwvTGl0ZXJhbD4gYWNjZXNzZXMgdG8gcmVhY2ggdGhlIHJlcXVpcmVkIGRhdGEgYmxvY2suCis8L1BhcmE+CisKKzxQYXJhPgorSW4gbXVjaCB0aGUgc2FtZSB3YXksIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMTNdPC9MaXRlcmFsPiBpcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5kb3VibGUgaW5kaXJlY3QgYmxvY2s8L0xpdGVyYWw+CithbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtibG9ja1sxNF08L0xpdGVyYWw+IGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnRyaXBsZSBpbmRpcmVjdCBibG9jazwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtibG9ja1sxM108L0xpdGVyYWw+IHBvaW50cyB0byBhIGJsb2NrIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGluZGlyZWN0CitibG9ja3MuIEVhY2ggb25lIG9mIHRoZW0gaXMgaGFuZGxlZCBpbiB0aGUgd2F5IGRlc2NyaWJlZCBhYm92ZS4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBtdWNoIHRoZSBzYW1lIHdheSwgdGhlIHRyaXBsZSBpbmRpcmVjdCBibG9jayBpcyBqdXN0IGFuIGFkZGl0aW9uYWwgbGV2ZWwKK29mIGluZGlyZWN0aW9uIC0gSXQgd2lsbCBwb2ludCB0byBhIGxpc3Qgb2YgZG91YmxlIGluZGlyZWN0IGJsb2Nrcy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRoZSBpJmxvd2Jhcjttb2RlIHZhcmlhYmxlPC9UaXRsZT4KKworPFBhcmE+CitUaGUgaSZsb3diYXI7bW9kZSB2YXJpYWJsZSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pbm9kZSB0eXBlPC9MaXRlcmFsPiBhbmQgdGhlCithc3NvY2lhdGVkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cGVybWlzc2lvbnM8L0xpdGVyYWw+LiBJdCBpcyBiZXN0IGRlc2NyaWJlZCBieSByZXByZXNlbnRpbmcgaXQgYXMgYW4KK29jdGFsIG51bWJlci4gU2luY2UgaXQgaXMgYSAxNiBiaXQgdmFyaWFibGUsIHRoZXJlIHdpbGwgYmUgNiBvY3RhbCBkaWdpdHMuCitUaG9zZSBhcmUgZGl2aWRlZCBpbnRvIHR3byBwYXJ0cyAtIFRoZSByaWdodG1vc3QgNCBkaWdpdHMgYW5kIHRoZSBsZWZ0bW9zdCAyCitkaWdpdHMuCis8L1BhcmE+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgcmlnaHRtb3N0IDQgb2N0YWwgZGlnaXRzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgcmlnaHRtb3N0IDQgZGlnaXRzIGFyZSA8TGl0ZXJhbCByZW1hcD0idHQiPmJpdCBvcHRpb25zPC9MaXRlcmFsPiAtIEVhY2ggYml0IGhhcyBpdHMgb3duCitwdXJwb3NlLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBsYXN0IDMgZGlnaXRzIChPY3RhbCBkaWdpdHMgMCwxIGFuZCAyKSBhcmUganVzdCB0aGUgdXN1YWwgcGVybWlzc2lvbnMsCitpbiB0aGUga25vd24gZm9ybSA8TGl0ZXJhbCByZW1hcD0idHQiPnJ3eHJ3eHJ3eDwvTGl0ZXJhbD4uIERpZ2l0IDIgcmVmZXJzIHRvIHRoZSB1c2VyLCBkaWdpdCAxIHRvCit0aGUgZ3JvdXAgYW5kIGRpZ2l0IDIgdG8gZXZlcnlvbmUgZWxzZS4gVGhleSBhcmUgdXNlZCBieSB0aGUga2VybmVsIHRvIGdyYW50CitvciBkZW55IGFjY2VzcyB0byB0aGUgb2JqZWN0IHByZXNlbnRlZCBieSB0aGlzIGlub2RlLgorPEZPT1ROT1RFPgorCis8UGFyYT4KK0EgPExpdGVyYWwgcmVtYXA9InR0Ij5zbWFydGVyPC9MaXRlcmFsPiBwZXJtaXNzaW9ucyBjb250cm9sIGlzIG9uZSBvZiB0aGUgZW5oYW5jZW1lbnRzIHBsYW5uZWQgZm9yCitMaW51eCAxLjMgLSBUaGUgQUNMIChBY2Nlc3MgQ29udHJvbCBMaXN0cykuIEFjdHVhbGx5LCBmcm9tIGJyb3dzaW5nIG9mIHRoZQora2VybmVsIHNvdXJjZSwgc29tZSBvZiB0aGUgQUNMIGhhbmRsaW5nIGlzIGFscmVhZHkgZG9uZS4KKzwvUGFyYT4KKworPC9GT09UTk9URT4KKworPC9QYXJhPgorCis8UGFyYT4KK0JpdCBudW1iZXIgOSBzaWduYWxzIHRoYXQgdGhlIGZpbGUgKEknbGwgcmVmZXIgdG8gdGhlIG9iamVjdCBwcmVzZW50ZWQgYnkKK3RoZSBpbm9kZSBhcyBmaWxlIGV2ZW4gdGhvdWdoIGl0IGNhbiBiZSBhIHNwZWNpYWwgZGV2aWNlLCBmb3IgZXhhbXBsZSkgaXMKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0IFZUWDwvTGl0ZXJhbD4uIEkgc3RpbGwgZG9uJ3Qga25vdyB3aGF0IGlzIHRoZSBtZWFuaW5nIG9mICJWVFgiLgorPC9QYXJhPgorCis8UGFyYT4KK0JpdCBudW1iZXIgMTAgc2lnbmFscyB0aGF0IHRoZSBmaWxlIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0IGdyb3VwIGlkPC9MaXRlcmFsPiAtIEkgZG9uJ3Qga25vdworZXhhY3RseSB0aGUgbWVhbmluZyBvZiB0aGUgYWJvdmUgZWl0aGVyLgorPC9QYXJhPgorCis8UGFyYT4KK0JpdCBudW1iZXIgMTEgc2lnbmFscyB0aGF0IHRoZSBmaWxlIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c2V0IHVzZXIgaWQ8L0xpdGVyYWw+LCB3aGljaCBtZWFucyB0aGF0Cit0aGUgZmlsZSB3aWxsIHJ1biB3aXRoIGFuIGVmZmVjdGl2ZSB1c2VyIGlkIHJvb3QuCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT5UaGUgbGVmdG1vc3QgdHdvIG9jdGFsIGRpZ2l0czwvVGl0bGU+CisKKzxQYXJhPgorTm90ZSB0aGUgdGhlIGxlZnRtb3N0IG9jdGFsIGRpZ2l0IGNhbiBvbmx5IGJlIDAgb3IgMSwgc2luY2UgdGhlIHRvdGFsIG51bWJlcgorb2YgYml0cyBpcyAxNi4KKzwvUGFyYT4KKworPFBhcmE+CitUaG9zZSBkaWdpdHMsIGFzIG9wcG9zZWQgdG8gdGhlIHJpZ2h0bW9zdCA0IGRpZ2l0cywgYXJlIG5vdCBiaXQgbWFwcGVkCitvcHRpb25zLiBUaGV5IGRldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgImZpbGUiIHRvIHdoaWNoIHRoZSBpbm9kZSBiZWxvbmdzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPjAxPC9MaXRlcmFsPiAtIFRoZSBmaWxlIGlzIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5GSUZPPC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+MDI8L0xpdGVyYWw+IC0gVGhlIGZpbGUgaXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmNoYXJhY3RlciBkZXZpY2U8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij4wNDwvTGl0ZXJhbD4gLSBUaGUgZmlsZSBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyZWN0b3J5PC9MaXRlcmFsPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+MDY8L0xpdGVyYWw+IC0gVGhlIGZpbGUgaXMgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrIGRldmljZTwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPjEwPC9MaXRlcmFsPiAtIFRoZSBmaWxlIGlzIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5yZWd1bGFyIGZpbGU8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij4xMjwvTGl0ZXJhbD4gLSBUaGUgZmlsZSBpcyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+c3ltYm9saWMgbGluazwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPjE0PC9MaXRlcmFsPiAtIFRoZSBmaWxlIGlzIGEgPExpdGVyYWwgcmVtYXA9InR0Ij5zb2NrZXQ8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlRpbWUgYW5kIGRhdGU8L1RpdGxlPgorCis8UGFyYT4KK0xpbnV4IHJlY29yZHMgdGhlIGxhc3QgdGltZSBpbiB3aGljaCB2YXJpb3VzIG9wZXJhdGlvbnMgb2NjdXJlZCB3aXRoIHRoZQorZmlsZS4gVGhlIHRpbWUgYW5kIGRhdGUgYXJlIHNhdmVkIGluIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZm9ybWF0IC0gVGhlCitudW1iZXIgb2Ygc2Vjb25kcyB3aGljaCBwYXNzZWQgc2luY2UgMDA6MDA6MDAgR01ULCBKYW51YXJ5IDEsIDE5NzAuIFRoZQorZm9sbG93aW5nIHRpbWVzIGFyZSByZWNvcmRlZDoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtjdGltZTwvTGl0ZXJhbD4gLSBUaGUgdGltZSBpbiB3aGljaCB0aGUgaW5vZGUgd2FzIGxhc3QgYWxsb2NhdGVkLiBJbgorb3RoZXIgd29yZHMsIHRoZSB0aW1lIGluIHdoaWNoIHRoZSBmaWxlIHdhcyBjcmVhdGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjttdGltZTwvTGl0ZXJhbD4gLSBUaGUgdGltZSBpbiB3aGljaCB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YXRpbWU8L0xpdGVyYWw+IC0gVGhlIHRpbWUgaW4gd2hpY2ggdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2R0aW1lPC9MaXRlcmFsPiAtIFRoZSB0aW1lIGluIHdoaWNoIHRoZSBpbm9kZSB3YXMgZGVhbGxvY2F0ZWQuIEluCitvdGhlciB3b3JkcywgdGhlIHRpbWUgaW4gd2hpY2ggdGhlIGZpbGUgd2FzIGRlbGV0ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+aSZsb3diYXI7c2l6ZTwvVGl0bGU+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtzaXplPC9MaXRlcmFsPiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IHByZXNlbnRlZCBieQordGhlIGlub2RlLiBJZiB0aGUgaW5vZGUgY29ycmVzcG9uZHMgdG8gYSByZWd1bGFyIGZpbGUsIHRoaXMgaXMganVzdCB0aGUgc2l6ZQorb2YgdGhlIGZpbGUgaW4gYnl0ZXMuIEluIG90aGVyIGNhc2VzLCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHZhcmlhYmxlIGlzCitkaWZmZXJlbnQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5Vc2VyIGFuZCBncm91cCBpZDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIHVzZXIgYW5kIGdyb3VwIGlkIG9mIHRoZSBmaWxlIGFyZSBqdXN0IHNhdmVkIGluIHRoZSB2YXJpYWJsZXMKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7dWlkPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtnaWQ8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+SGFyZCBsaW5rczwvVGl0bGU+CisKKzxQYXJhPgorTGF0ZXIsIHdoZW4gd2UnbGwgZGlzY3VzcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGlyZWN0b3JpZXMsIGl0IHdpbGwgYmUKK2V4cGxhaW5lZCB0aGF0IGVhY2ggPExpdGVyYWwgcmVtYXA9InR0Ij5kaXJlY3RvcnkgZW50cnk8L0xpdGVyYWw+IHBvaW50cyB0byBhbiBpbm9kZS4gSXQgaXMgcXVpdGUKK3Bvc3NpYmxlIHRoYXQgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnNpbmdsZSBpbm9kZTwvTGl0ZXJhbD4gd2lsbCBiZSBwb2ludGVkIHRvIGZyb20gPExpdGVyYWwgcmVtYXA9InR0Ij5zZXZlcmFsPC9MaXRlcmFsPgorZGlyZWN0b3JpZXMuIEluIHRoYXQgY2FzZSwgd2Ugc2F5IHRoYXQgdGhlcmUgZXhpc3QgPExpdGVyYWwgcmVtYXA9InR0Ij5oYXJkIGxpbmtzPC9MaXRlcmFsPiB0byB0aGUKK2ZpbGUgLSBUaGUgZmlsZSBjYW4gYmUgYWNjZXNzZWQgZnJvbSBlYWNoIG9mIHRoZSBkaXJlY3Rvcmllcy4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUga2VybmVsIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaGFyZCBsaW5rcyBpbiB0aGUgdmFyaWFibGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7bGlua3MmbG93YmFyO2NvdW50PC9MaXRlcmFsPi4gVGhlIHZhcmlhYmxlIGlzIHNldCB0byAiMSIgd2hlbiBmaXJzdCBhbGxvY2F0aW5nIHRoZQoraW5vZGUsIGFuZCBpcyBpbmNyZW1lbnRlZCB3aXRoIGVhY2ggYWRkaXRpb25hbCBsaW5rLiBEZWxldGlvbiBvZiBhIGZpbGUgd2lsbAorZGVsZXRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBlbnRyeSBhbmQgd2lsbCBkZWNyZW1lbnQgdGhlIG51bWJlciBvZiBsaW5rcy4KK09ubHkgd2hlbiB0aGlzIG51bWJlciByZWFjaGVzIHplcm8sIHRoZSBpbm9kZSB3aWxsIGJlIGFjdHVhbGx5IGRlYWxsb2NhdGVkLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBuYW1lIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGFyZCBsaW5rPC9MaXRlcmFsPiBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGFsaWFzIG1ldGhvZAorZGVzY3JpYmVkIGFib3ZlLCB0byBhbm90aGVyIGFsaWFzIG1ldGhvZCBjYWxsZWQgPExpdGVyYWwgcmVtYXA9InR0Ij5zeW1ib2xpYyBsaW5raW5nPC9MaXRlcmFsPiwKK3doaWNoIHdpbGwgYmUgZGVzY3JpYmVkIGxhdGVyLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+VGhlIEV4dDJmcyBleHRlbmRlZCBmbGFnczwvVGl0bGU+CisKKzxQYXJhPgorVGhlIGV4dDIgZmlsZXN5c3RlbSBhc3NvY2lhdGVzIGFkZGl0aW9uYWwgZmxhZ3Mgd2l0aCBhbiBpbm9kZS4gVGhlIGV4dGVuZGVkCithdHRyaWJ1dGVzIGFyZSBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7ZmxhZ3M8L0xpdGVyYWw+LiA8TGl0ZXJhbCByZW1hcD0idHQiPmkmbG93YmFyO2ZsYWdzPC9MaXRlcmFsPiBpcyBhIDMyCitiaXQgdmFyaWFibGUuIE9ubHkgdGhlIDcgcmlnaHRtb3N0IGJpdHMgYXJlIGRlZmluZWQuIE9mIHRoZW0sIG9ubHkgNSBiaXRzCithcmUgdXNlZCBpbiB2ZXJzaW9uIDAuNWEgb2YgdGhlIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPnVuZGVsZXRlPC9MaXRlcmFsPiBhbmQgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tcHJlc3M8L0xpdGVyYWw+IGZlYXR1cmVzIGFyZSBub3QgaW1wbGVtZW50ZWQsIGFuZAorYXJlIHRvIGJlIGludHJvZHVjZWQgaW4gTGludXggMS4zIGRldmVsb3BtZW50LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZsYWdzIGFyZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYml0IDAgLSBTZWN1cmUgZGVsZXRpb24uCisKK1doZW4gdGhpcyBiaXQgaXMgb24sIHRoZSBmaWxlJ3MgYmxvY2tzIGFyZSB6ZXJvZWQgd2hlbiB0aGUgZmlsZSBpcworZGVsZXRlZC4gV2l0aCB0aGlzIGJpdCBvZmYsIHRoZXkgd2lsbCBqdXN0IGJlIGxlZnQgd2l0aCB0aGVpcgorb3JpZ2luYWwgZGF0YSB3aGVuIHRoZSBpbm9kZSBpcyBkZWFsbG9jYXRlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJpdCAxIC0gVW5kZWxldGUuCisJCitUaGlzIGJpdCBpcyBub3Qgc3VwcG9ydGVkIHlldC4gSXQgd2lsbCBiZSB1c2VkIHRvIHByb3ZpZGUgYW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+dW5kZWxldGU8L0xpdGVyYWw+IGZlYXR1cmUgaW4gZnV0dXJlIEV4dDJmcyBkZXZlbG9wbWVudHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwliaXQgMiAtIENvbXByZXNzIGZpbGUuCisKK1RoaXMgYml0IGlzIGFsc28gbm90IHN1cHBvcnRlZC4gVGhlIHBsYW4gaXMgdG8gb2ZmZXIgImNvbXByZXNzaW9uIG9uCit0aGUgZmx5IiBpbiBmdXR1cmUgcmVsZWFzZXMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwliaXQgMyAtIFN5bmNocm9ub3VzIHVwZGF0ZXMuCisKK1dpdGggdGhpcyBiaXQgb24sIHRoZSBtZXRhLWRhdGEgd2lsbCBiZSB3cml0dGVuIHN5bmNocm9ub3VzbHkgdG8gdGhlCitkaXNrLCBhcyBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCB3aXRoIHRoZSAic3luYyIgbW91bnQgb3B0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJYml0IDQgLSBJbW11dGFibGUgZmlsZS4KKworV2hlbiB0aGlzIGJpdCBpcyBvbiwgdGhlIGZpbGUgd2lsbCBzdGF5IGFzIGl0IGlzIC0gQ2FuIG5vdCBiZQorY2hhbmdlZCwgZGVsZXRlZCwgcmVuYW1lZCwgbm8gaGFyZCBsaW5rcywgZXRjLCBiZWZvcmUgdGhlIGJpdCBpcworY2xlYXJlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJpdCA1IC0gQXBwZW5kIG9ubHkgZmlsZS4KKwkKK1dpdGggdGhpcyBvcHRpb24gYWN0aXZlLCBkYXRhIHdpbGwgb25seSBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCWJpdCA2IC0gRG8gbm90IGR1bXAgdGhpcyBmaWxlLgorCitJIHRoaW5rIHRoYXQgdGhpcyBiaXQgaXMgdXNlZCBieSB0aGUgcG9ydCBvZiBkdW1wIHRvIGxpbnV4IChwb3J0ZWQgYnkKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPikgdG8gY2hlY2sgaWYgdGhlIGZpbGUgc2hvdWxkIG5vdCBiZSBkdW1wZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+U3ltYm9saWMgbGlua3M8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmhhcmQgbGlua3M8L0xpdGVyYWw+IHByZXNlbnRlZCBhYm92ZSBhcmUganVzdCBhbm90aGVyIHBvaW50ZXJzIHRvIHRoZSBzYW1lCitpbm9kZS4gVGhlIGltcG9ydGFudCBhc3BlY3QgaXMgdGhhdCB0aGUgaW5vZGUgbnVtYmVyIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Zml4ZWQ8L0xpdGVyYWw+IHdoZW4KK3RoZSBsaW5rIGlzIGNyZWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUKK2ZpbGVzeXN0ZW0gYXJlIHZpc2libGUgdG8gdGhlIHVzZXIgLSBJbiBhIHB1cmUgYWJzdHJhY3QgdXNhZ2Ugb2YgdGhlCitmaWxlc3lzdGVtLCB0aGUgdXNlciBzaG91bGQgbm90IGNhcmUgYWJvdXQgaW5vZGVzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBhYm92ZSBjYXVzZXMgc2V2ZXJhbCBsaW1pdGF0aW9uczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSGFyZCBsaW5rcyBjYW4gYmUgZG9uZSBvbmx5IGluIHRoZSBzYW1lIGZpbGVzeXN0ZW0uIFRoaXMgaXMgb2J2aW91cywKK3NpbmNlIGEgaGFyZCBsaW5rIGlzIGp1c3QgYW4gaW5vZGUgbnVtYmVyIGluIHNvbWUgZGlyZWN0b3J5IGVudHJ5LAorYW5kIHRoZSBhYm92ZSBlbGVtZW50cyBhcmUgZmlsZXN5c3RlbSBzcGVjaWZpYy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVlvdSBjYW4gbm90ICJyZXBsYWNlIiB0aGUgZmlsZSB3aGljaCBpcyBwb2ludGVkIHRvIGJ5IHRoZSBoYXJkIGxpbmsKK2FmdGVyIHRoZSBsaW5rIGNyZWF0aW9uLiAiUmVwbGFjaW5nIiB0aGUgZmlsZSBpbiBvbmUgZGlyZWN0b3J5IHdpbGwKK3N0aWxsIGxlYXZlIHRoZSBvcmlnaW5hbCBmaWxlIGluIHRoZSBvdGhlciBkaXJlY3RvcnkgLSBUaGUKKyJyZXBsYWNlbWVudCIgd2lsbCBub3QgZGVhbGxvY2F0ZSB0aGUgb3JpZ2luYWwgaW5vZGUsIGJ1dCByYXRoZXIKK2FsbG9jYXRlIGFub3RoZXIgaW5vZGUgZm9yIHRoZSBuZXcgdmVyc2lvbiwgYW5kIHRoZSBkaXJlY3RvcnkgZW50cnkKK2F0IHRoZSBvdGhlciBwbGFjZSB3aWxsIGp1c3QgcG9pbnQgdG8gdGhlIG9sZCBpbm9kZSBudW1iZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+U3ltYm9saWMgbGluazwvTGl0ZXJhbD4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBhbmFseXplZCBhdCA8TGl0ZXJhbCByZW1hcD0idHQiPnJ1biB0aW1lPC9MaXRlcmFsPi4gQQorc3ltYm9saWMgbGluayBpcyBqdXN0IGEgPExpdGVyYWwgcmVtYXA9InR0Ij5wYXRobmFtZTwvTGl0ZXJhbD4gd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIGFuIGlub2RlLgorQXMgc3VjaCwgaXQgInNwZWFrcyIgaW4gdGhlIGxhbmd1YWdlIG9mIHRoZSBhYnN0cmFjdCBmaWxlc3lzdGVtLiBXaGVuIHRoZQora2VybmVsIHJlYWNoZXMgYSBzeW1ib2xpYyBsaW5rLCBpdCB3aWxsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Zm9sbG93IGl0IGluIHJ1biB0aW1lPC9MaXRlcmFsPiB1c2luZworaXRzIG5vcm1hbCB3YXkgb2YgcmVhY2hpbmcgZGlyZWN0b3JpZXMuCis8L1BhcmE+CisKKzxQYXJhPgorQXMgc3VjaCwgc3ltYm9saWMgbGluayBjYW4gYmUgbWFkZSA8TGl0ZXJhbCByZW1hcD0idHQiPmFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXM8L0xpdGVyYWw+IGFuZCBhCityZXBsYWNlbWVudCBvZiBhIGZpbGUgd2l0aCBhIG5ldyB2ZXJzaW9uIHdpbGwgYXV0b21hdGljYWxseSBiZSBhY3RpdmUgb24gYWxsCitpdHMgc3ltYm9saWMgbGlua3MuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IGhhcmQgbGluayBkb2Vzbid0IGNvbnN1bWUgc3BhY2UgZXhjZXB0IHRvIGEgc21hbGwKK2RpcmVjdG9yeSBlbnRyeS4gU3ltYm9saWMgbGluaywgb24gdGhlIG90aGVyIGhhbmQsIGNvbnN1bWVzIGF0IGxlYXN0IGFuCitpbm9kZSwgYW5kIGNhbiBhbHNvIGNvbnN1bWUgb25lIGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK1doZW4gdGhlIGlub2RlIGlzIGlkZW50aWZpZWQgYXMgYSBzeW1ib2xpYyBsaW5rLCB0aGUga2VybmVsIG5lZWRzIHRvIGZpbmQKK3RoZSBwYXRoIHRvIHdoaWNoIGl0IHBvaW50cy4KKzwvUGFyYT4KKworPFNlY3QzPgorPFRpdGxlPkZhc3Qgc3ltYm9saWMgbGlua3M8L1RpdGxlPgorCis8UGFyYT4KK1doZW4gdGhlIHBhdGhuYW1lIGNvbnRhaW5zIHVwIHRvIDY0IGJ5dGVzLCBpdCBjYW4gYmUgc2F2ZWQgZGlyZWN0bHkgaW4gdGhlCitpbm9kZSwgb24gdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7YmxvY2tbMF0gLSBpJmxvd2JhcjtibG9ja1sxNV08L0xpdGVyYWw+IHZhcmlhYmxlcywgc2luY2UgdGhvc2UgYXJlIG5vdAorbmVlZGVkIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBjYWxsZWQgPExpdGVyYWwgcmVtYXA9InR0Ij5mYXN0PC9MaXRlcmFsPiBzeW1ib2xpYyBsaW5rLiBJdCBpcyBmYXN0CitiZWNhdXNlIHRoZSBwYXRobmFtZSByZXNvbHV0aW9uIGNhbiBiZSBkb25lIHVzaW5nIHRoZSBpbm9kZSBpdHNlbGYsIHdpdGhvdXQKK2FjY2Vzc2luZyBhZGRpdGlvbmFsIGJsb2Nrcy4gSXQgaXMgYWxzbyBlY29ub21pY2FsLCBzaW5jZSBpdCBhbGxvY2F0ZXMgb25seQorYW4gaW5vZGUuIFRoZSBsZW5ndGggb2YgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtzaXplPC9MaXRlcmFsPgordmFyaWFibGUuCis8L1BhcmE+CisKKzwvU2VjdDM+CisKKzxTZWN0Mz4KKzxUaXRsZT5TbG93IHN5bWJvbGljIGxpbmtzPC9UaXRsZT4KKworPFBhcmE+CitTdGFydGluZyBmcm9tIDY1IGJ5dGVzLCBhZGRpdGlvbmFsIGJsb2NrIGlzIGFsbG9jYXRlZCAoYnkgdGhlIHVzZSBvZgorPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtibG9ja1swXTwvTGl0ZXJhbD4pIGFuZCB0aGUgcGF0aG5hbWUgaXMgc3RvcmVkIGluIGl0LiBJdCBpcyBjYWxsZWQgc2xvdworYmVjYXVzZSB0aGUga2VybmVsIG5lZWRzIHRvIHJlYWQgYWRkaXRpb25hbCBibG9jayB0byByZXNvbHZlIHRoZSBwYXRobmFtZS4KK1RoZSBsZW5ndGggaXMgYWdhaW4gc2F2ZWQgaW4gPExpdGVyYWwgcmVtYXA9InR0Ij5pJmxvd2JhcjtzaXplPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmkmbG93YmFyO3ZlcnNpb248L1RpdGxlPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+aSZsb3diYXI7dmVyc2lvbjwvTGl0ZXJhbD4gaXMgdXNlZCB3aXRoIHJlZ2FyZCB0byBOZXR3b3JrIEZpbGUgU3lzdGVtLiBJIGRvbid0IGtub3cKK2l0cyBleGFjdCB1c2UuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5SZXNlcnZlZCB2YXJpYWJsZXM8L1RpdGxlPgorCis8UGFyYT4KK0FzIGZhciBhcyBJIGtub3csIHRoZSB2YXJpYWJsZXMgd2hpY2ggYXJlIGNvbm5lY3RlZCB0byBBQ0wgYW5kIGZyYWdtZW50cworYXJlIG5vdCBjdXJyZW50bHkgdXNlZC4gVGhleSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMuCis8L1BhcmE+CisKKzxQYXJhPgorRXh0MmZzIGlzIGJlaW5nIHBvcnRlZCB0byBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gQXMgZmFyIGFzIEkga25vdywKK2F0IGxlYXN0IGluIGxpbnV4LCB0aGUgb3MgZGVwZW5kZW50IHZhcmlhYmxlcyBhcmUgYWxzbyBub3QgdXNlZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPlNwZWNpYWwgcmVzZXJ2ZWQgaW5vZGVzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZmlyc3QgdGVuIGlub2RlcyBvbiB0aGUgZmlsZXN5c3RlbSBhcmUgc3BlY2lhbCBpbm9kZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlIDEgaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmFkIGJsb2NrcyBpbm9kZTwvTGl0ZXJhbD4gLSBJIGJlbGlldmUgdGhhdCBpdHMgZGF0YQorYmxvY2tzIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBiYWQgYmxvY2tzIGluIHRoZSBmaWxlc3lzdGVtLCB3aGljaAorc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlJbm9kZSAyIGlzIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnJvb3QgaW5vZGU8L0xpdGVyYWw+IC0gVGhlIGlub2RlIG9mIHRoZSByb290IGRpcmVjdG9yeS4KK0l0IGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVhY2hpbmcgYSBrbm93biBwYXRoIGluIHRoZSBmaWxlc3lzdGVtLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5vZGUgMyBpcyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5hY2wgaW5kZXggaW5vZGU8L0xpdGVyYWw+LiBBY2Nlc3MgY29udHJvbCBsaXN0cyBhcmUKK2N1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBleHQyIGZpbGVzeXN0ZW0sIHNvIEkgYmVsaWV2ZSB0aGlzCitpbm9kZSBpcyBub3QgdXNlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlIDQgaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YWNsIGRhdGEgaW5vZGU8L0xpdGVyYWw+LiBPZiBjb3Vyc2UsIHRoZSBhYm92ZSBhcHBsaWVzCitoZXJlIHRvby4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlIDUgaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Ym9vdCBsb2FkZXIgaW5vZGU8L0xpdGVyYWw+LiBJIGRvbid0IGtub3cgaXRzCit1c2FnZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlub2RlIDYgaXMgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+dW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPC9MaXRlcmFsPi4gSXQgaXMgYWxzbyBhCitmb3VuZGF0aW9uIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLCBhbmQgaXMgY3VycmVudGx5IG5vdCB1c2VkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSW5vZGVzIDctMTAgYXJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVzZXJ2ZWQ8L0xpdGVyYWw+IGFuZCBjdXJyZW50bHkgbm90IHVzZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+RGlyZWN0b3JpZXM8L1RpdGxlPgorCis8UGFyYT4KK0EgZGlyZWN0b3J5IGlzIGltcGxlbWVudGVkIGluIHRoZSBzYW1lIHdheSBhcyBmaWxlcyBhcmUgaW1wbGVtZW50ZWQgKHdpdGgKK3RoZSBkaXJlY3QgYmxvY2tzLCBpbmRpcmVjdCBibG9ja3MsIGV0YykgLSBJdCBpcyBqdXN0IGEgZmlsZSB3aGljaCBpcworZm9ybWF0dGVkIHdpdGggYSBzcGVjaWFsIGZvcm1hdCAtIEEgbGlzdCBvZiBkaXJlY3RvcnkgZW50cmllcy4KKzwvUGFyYT4KKworPFBhcmE+CitGb2xsb3dzIHRoZSBkZWZpbml0aW9uIG9mIGEgZGlyZWN0b3J5IGVudHJ5OgorPC9QYXJhPgorCis8UGFyYT4KKworPFByb2dyYW1MaXN0aW5nPgorc3RydWN0IGV4dDJfZGlyX2VudHJ5IHsKKwlfX3UzMglpbm9kZTsJCQkvKiBJbm9kZSBudW1iZXIgKi8KKwlfX3UxNglyZWNfbGVuOwkJLyogRGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCV9fdTE2CW5hbWVfbGVuOwkJLyogTmFtZSBsZW5ndGggKi8KKwljaGFyCW5hbWVbRVhUMl9OQU1FX0xFTl07CS8qIEZpbGUgbmFtZSAqLworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFBhcmE+CitFeHQyZnMgc3VwcG9ydHMgZmlsZSBuYW1lcyBvZiB2YXJ5aW5nIGxlbmd0aHMsIHVwIHRvIDI1NSBieXRlcy4gVGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPm5hbWU8L0xpdGVyYWw+IGZpZWxkIGFib3ZlIGp1c3QgY29udGFpbnMgdGhlIGZpbGUgbmFtZS4gTm90ZSB0aGF0IGl0IGlzCis8TGl0ZXJhbCByZW1hcD0idHQiPm5vdCB6ZXJvIHRlcm1pbmF0ZWQ8L0xpdGVyYWw+OyBJbnN0ZWFkLCB0aGUgdmFyaWFibGUgPExpdGVyYWwgcmVtYXA9InR0Ij5uYW1lJmxvd2JhcjtsZW48L0xpdGVyYWw+IGNvbnRhaW5zCit0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIG5hbWUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHZhcmlhYmxlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cmVjJmxvd2JhcjtsZW48L0xpdGVyYWw+IGlzIHByb3ZpZGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGFyZQorcGFkZGVkIHdpdGggemVyb2VzIHNvIHRoYXQgdGhlIG5leHQgZW50cnkgd2lsbCBiZSBpbiBhbiBvZmZzZXQgd2hpY2ggaXMKK2EgbXVsdGlwbGl0aW9uIG9mIDQuIFRoZSByZXN1bHRpbmcgZGlyZWN0b3J5IGVudHJ5IHNpemUgaXMgc3RvcmVkIGluCis8TGl0ZXJhbCByZW1hcD0idHQiPnJlYyZsb3diYXI7bGVuPC9MaXRlcmFsPi4gSWYgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyB0aGUgbGFzdCBpbiB0aGUgYmxvY2ssIGl0IGlzCitwYWRkZWQgd2l0aCB6ZXJvZXMgdGlsbCB0aGUgZW5kIG9mIHRoZSBibG9jaywgYW5kIHJlYyZsb3diYXI7bGVuIGlzIHVwZGF0ZWQKK2FjY29yZGluZ2x5LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPiB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGlub2RlIG9mIHRoZSBhYm92ZSBmaWxlLgorPC9QYXJhPgorCis8UGFyYT4KK0RlbGV0aW9uIG9mIGRpcmVjdG9yeSBlbnRyaWVzIGlzIGRvbmUgYnkgYXBwZW5kaW5nIG9mIHRoZSBkZWxldGVkIGVudHJ5CitzcGFjZSB0byB0aGUgcHJldmlvdXMgKG9yIG5leHQsIEkgYW0gbm90IHN1cmUpIGVudHJ5LgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIHN1cGVyYmxvY2s8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyYmxvY2s8L0xpdGVyYWw+IGlzIGEgYmxvY2sgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gd2hpY2ggZGVzY3JpYmVzCit0aGUgc3RhdGUgb2YgdGhlIGludGVybmFsIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHN1cGVyYmxvY2sgaXMgbG9jYXRlZCBhdCB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maXhlZCBvZmZzZXQgMTAyNDwvTGl0ZXJhbD4gaW4gdGhlIGRldmljZS4gSXRzCitsZW5ndGggaXMgMTAyNCBieXRlcyBhbHNvLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdXBlcmJsb2NrLCBsaWtlIHRoZSBncm91cCBkZXNjcmlwdG9ycywgaXMgY29waWVkIG9uIGVhY2ggYmxvY2tzIGdyb3VwCitib3VuZGFyeSBmb3IgYmFja3VwIHB1cnBvc2VzLiBIb3dldmVyLCBvbmx5IHRoZSBtYWluIGNvcHkgaXMgdXNlZCBieSB0aGUKK2tlcm5lbC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3VwZXJibG9jayBjb250YWluIHRocmVlIHR5cGVzIG9mIGluZm9ybWF0aW9uOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlGaWxlc3lzdGVtIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGZpeGVkIGFuZCB3aGljaCB3ZXJlIGRldGVybWluZWQgd2hlbgordGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkLiBTb21lIG9mIHRob3NlIHBhcmFtZXRlcnMgY2FuCitiZSBkaWZmZXJlbnQgaW4gZGlmZmVyZW50IGluc3RhbGxhdGlvbnMgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSwgYnV0CitjYW4gbm90IGJlIGNoYW5nZWQgb25jZSB0aGUgZmlsZXN5c3RlbSB3YXMgY3JlYXRlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUZpbGVzeXN0ZW0gcGFyYW1ldGVycyB3aGljaCBhcmUgdHVuYWJsZSAtIENhbiBhbHdheXMgYmUgY2hhbmdlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0gc3RhdGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0ZvbGxvd3MgdGhlIHN1cGVyYmxvY2sgZGVmaW5pdGlvbjoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxQcm9ncmFtTGlzdGluZz4KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMglzX2lub2Rlc19jb3VudDsJCS8qIElub2RlcyBjb3VudCAqLworCV9fdTMyCXNfYmxvY2tzX2NvdW50OwkJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fdTMyCXNfbG9nX2Jsb2NrX3NpemU7CS8qIEJsb2NrIHNpemUgKi8KKwlfX3MzMglzX2xvZ19mcmFnX3NpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwlfX3UzMglzX2Jsb2Nrc19wZXJfZ3JvdXA7CS8qICMgQmxvY2tzIHBlciBncm91cCAqLworCV9fdTMyCXNfZnJhZ3NfcGVyX2dyb3VwOwkvKiAjIEZyYWdtZW50cyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX2lub2Rlc19wZXJfZ3JvdXA7CS8qICMgSW5vZGVzIHBlciBncm91cCAqLworCV9fdTMyCXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisJX191MzIJc193dGltZTsJCS8qIFdyaXRlIHRpbWUgKi8KKwlfX3UxNglzX21udF9jb3VudDsJCS8qIE1vdW50IGNvdW50ICovCisJX19zMTYJc19tYXhfbW50X2NvdW50OwkvKiBNYXhpbWFsIG1vdW50IGNvdW50ICovCisJX191MTYJc19tYWdpYzsJCS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fdTE2CXNfc3RhdGU7CQkvKiBGaWxlIHN5c3RlbSBzdGF0ZSAqLworCV9fdTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycyAqLworCV9fdTE2CXNfcGFkOworCV9fdTMyCXNfbGFzdGNoZWNrOwkJLyogdGltZSBvZiBsYXN0IGNoZWNrICovCisJX191MzIJc19jaGVja2ludGVydmFsOwkvKiBtYXguIHRpbWUgYmV0d2VlbiBjaGVja3MgKi8KKwlfX3UzMglzX2NyZWF0b3Jfb3M7CQkvKiBPUyAqLworCV9fdTMyCXNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KKwlfX3UxNglzX2RlZl9yZXN1aWQ7CQkvKiBEZWZhdWx0IHVpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJX191MTYJc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTMyCXNfcmVzZXJ2ZWRbMjM1XTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworfTsKKzwvUHJvZ3JhbUxpc3Rpbmc+CisKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPnN1cGVyYmxvY2sgaWRlbnRpZmljYXRpb248L1RpdGxlPgorCis8UGFyYT4KK1RoZSBleHQyIGZpbGVzeXN0ZW0ncyBzdXBlcmJsb2NrIGlzIGlkZW50aWZpZWQgYnkgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bWFnaWM8L0xpdGVyYWw+IGZpZWxkLgorVGhlIGN1cnJlbnQgZXh0MiBtYWdpYyBudW1iZXIgaXMgMHhFRjUzLiBJIHByZXN1bWUgdGhhdCAiRUYiIG1lYW5zICJFeHRlbmRlZAorRmlsZXN5c3RlbSIuIEluIHZlcnNpb25zIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gcHJpb3IgdG8gMC4yQiwgdGhlIG1hZ2ljCitudW1iZXIgd2FzIDB4RUY1MS4gVGhvc2UgZmlsZXN5c3RlbXMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQKK3ZlcnNpb25zOyBTcGVjaWZpY2FsbHksIHRoZSBncm91cCBkZXNjcmlwdG9ycyBkZWZpbml0aW9uIGlzIGRpZmZlcmVudC4gSQorZG91YnQgaWYgdGhlcmUgc3RpbGwgZXhpc3RzIHN1Y2ggYSBpbnN0YWxsYXRpb24uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5GaWxlc3lzdGVtIGZpeGVkIHBhcmFtZXRlcnM8L1RpdGxlPgorCis8UGFyYT4KK0J5IHVzaW5nIHRoZSB3b3JkIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Zml4ZWQ8L0xpdGVyYWw+LCBJIG1lYW4gZml4ZWQgd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhcgoraW5zdGFsbGF0aW9uLiBUaG9zZSB2YXJpYWJsZXMgYXJlIHVzdWFsbHkgbm90IGZpeGVkIHdpdGggcmVzcGVjdCB0bworZGlmZmVyZW50IGluc3RhbGxhdGlvbnMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2sgc2l6ZTwvTGl0ZXJhbD4gaXMgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2Jhcjtsb2cmbG93YmFyO2Jsb2NrJmxvd2JhcjtzaXplPC9MaXRlcmFsPgordmFyaWFibGUuIFRoZSBibG9jayBzaXplIGlzIDEwMjQqcG93ICgyLHMmbG93YmFyO2xvZyZsb3diYXI7YmxvY2smbG93YmFyO3NpemUpIGFuZCBzaG91bGQgYmUKK2JldHdlZW4gMTAyNCBhbmQgNDA5Ni4gVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSAxMDI0LCAyMDQ4IGFuZCA0MDk2LgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7aW5vZGVzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgaW5vZGVzLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7YmxvY2tzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgYmxvY2tzLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7Zmlyc3QmbG93YmFyO2RhdGEmbG93YmFyO2Jsb2NrPC9MaXRlcmFsPiBzcGVjaWZpZXMgaW4gd2hpY2ggb2YgdGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGV2aWNlIGJsb2NrPC9MaXRlcmFsPiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+c3VwZXJibG9jazwvTGl0ZXJhbD4gaXMgcHJlc2VudC4gVGhlIHN1cGVyYmxvY2sgaXMgYWx3YXlzIHByZXNlbnQgYXQgdGhlIGZpeGVkCitvZmZzZXQgMTAyNCwgYnV0IHRoZSBkZXZpY2UgYmxvY2sgbnVtYmVyaW5nIGNhbiBkaWZmZXIuIEZvciBleGFtcGxlLCBpZiB0aGUKK2Jsb2NrIHNpemUgaXMgMTAyNCwgdGhlIHN1cGVyYmxvY2sgd2lsbCBiZSBhdCA8TGl0ZXJhbCByZW1hcD0idHQiPmJsb2NrIDE8L0xpdGVyYWw+IHdpdGggcmVzcGVjdCB0bwordGhlIGRldmljZS4gSG93ZXZlciwgaWYgdGhlIGJsb2NrIHNpemUgaXMgNDA5Niwgb2Zmc2V0IDEwMjQgaXMgaW5jbHVkZWQgaW4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2sgMDwvTGl0ZXJhbD4gb2YgdGhlIGRldmljZSwgYW5kIGluIHRoYXQgY2FzZSA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2ZpcnN0Jmxvd2JhcjtkYXRhJmxvd2JhcjtibG9jazwvTGl0ZXJhbD4KK3dpbGwgY29udGFpbiAwLiBBdCBsZWFzdCB0aGlzIGlzIGhvdyBJIHVuZGVyc3Rvb2QgdGhpcyB2YXJpYWJsZS4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2Jsb2NrcyZsb3diYXI7cGVyJmxvd2Jhcjtncm91cDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIG51bWJlciBvZiBibG9ja3Mgd2hpY2ggYXJlIGdyb3VwZWQKK3RvZ2V0aGVyIGFzIGEgYmxvY2tzIGdyb3VwLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7aW5vZGVzJmxvd2JhcjtwZXImbG93YmFyO2dyb3VwPC9MaXRlcmFsPiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGlub2RlcyBhdmFpbGFibGUgaW4gYSBncm91cAorYmxvY2suIEkgdGhpbmsgdGhhdCB0aGlzIGlzIGFsd2F5cyB0aGUgdG90YWwgbnVtYmVyIG9mIGlub2RlcyBkaXZpZGVkIGJ5IHRoZQorbnVtYmVyIG9mIGJsb2NrcyBncm91cHMuCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtjcmVhdG9yJmxvd2JhcjtvczwvTGl0ZXJhbD4gY29udGFpbnMgYSBjb2RlIG51bWJlciB3aGljaCBzcGVjaWZpZXMgdGhlIG9wZXJhdGluZworc3lzdGVtIHdoaWNoIGNyZWF0ZWQgdGhpcyBzcGVjaWZpYyBmaWxlc3lzdGVtOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPkxpbnV4PC9MaXRlcmFsPiA6LSkgaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZSA8TGl0ZXJhbCByZW1hcD0idHQiPjA8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPExpdGVyYWwgcmVtYXA9InR0Ij5IdXJkPC9MaXRlcmFsPiBpcyBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+MTwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPk1hc2l4PC9MaXRlcmFsPiBpcyBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+MjwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7cmV2Jmxvd2JhcjtsZXZlbDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIGV4dDIgZmlsZXN5c3RlbS4KK0N1cnJlbnRseSB0aGlzIGlzIGFsd2F5cyA8TGl0ZXJhbCByZW1hcD0idHQiPjA8L0xpdGVyYWw+LCBhcyB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBpcyAwLjVCLiBJdAord2lsbCBwcm9iYWJseSB0YWtlIHNvbWUgdGltZSB1bnRpbCB3ZSByZWFjaCB2ZXJzaW9uIDEuMC4KKzwvUGFyYT4KKworPFBhcmE+CitBcyBmYXIgYXMgSSBrbm93LCBmcmFnbWVudHMgKHN1Yi1ibG9jayBhbGxvY2F0aW9ucykgYXJlIGN1cnJlbnRseSBub3QKK3N1cHBvcnRlZCBhbmQgaGVuY2UgYSBibG9jayBpcyBlcXVhbCB0byBhIGZyYWdtZW50LiBBcyBhIHJlc3VsdCwKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bG9nJmxvd2JhcjtmcmFnJmxvd2JhcjtzaXplPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtmcmFncyZsb3diYXI7cGVyJmxvd2Jhcjtncm91cDwvTGl0ZXJhbD4gYXJlIGFsd2F5cyBlcXVhbCB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2Jhcjtsb2cmbG93YmFyO2Jsb2NrJmxvd2JhcjtzaXplPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtibG9ja3MmbG93YmFyO3BlciZsb3diYXI7Z3JvdXA8L0xpdGVyYWw+LCByZXNwZWN0aXZlbHkuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5FeHQyZnMgZXJyb3IgaGFuZGxpbmc8L1RpdGxlPgorCis8UGFyYT4KK1RoZSBleHQyIGZpbGVzeXN0ZW0gZXJyb3IgaGFuZGxpbmcgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBwaGlsb3NvcGh5OgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUlkZW50aWZpY2F0aW9uIG9mIHByb2JsZW1zIGlzIGRvbmUgYnkgdGhlIGtlcm5lbCBjb2RlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGNvcnJlY3Rpb24gdGFzayBpcyBsZWZ0IHRvIGFuIGV4dGVybmFsIHV0aWxpdHksIHN1Y2ggYXMKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZTJmc2NrIGJ5IFRoZW9kb3JlIFRzJ288L0xpdGVyYWw+IGZvciA8TGl0ZXJhbCByZW1hcD0idHQiPmF1dG9tYXRpYzwvTGl0ZXJhbD4gYW5hbHlzaXMgYW5kCitjb3JyZWN0aW9uLCBvciBwZXJoYXBzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGVidWdmcyBieSBUaGVvZG9yZSBUcydvPC9MaXRlcmFsPiBhbmQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+RVhUMkVEIGJ5IG15c2VsZjwvTGl0ZXJhbD4sIGZvciA8TGl0ZXJhbCByZW1hcD0idHQiPmhhbmQ8L0xpdGVyYWw+IGFuYWx5c2lzIGFuZCBjb3JyZWN0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9PcmRlcmVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO3N0YXRlPC9MaXRlcmFsPiB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcGFzcyB0aGUgaWRlbnRpZmljYXRpb24KK3Jlc3VsdCB0byB0aGlyZCBwYXJ0eSB1dGlsaXRpZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+Yml0IDA8L0xpdGVyYWw+IG9mIHMmbG93YmFyO3N0YXRlIGlzIHJlc2V0IHdoZW4gdGhlIHBhcnRpdGlvbiBpcyBtb3VudGVkIGFuZAorc2V0IHdoZW4gdGhlIHBhcnRpdGlvbiBpcyB1bm1vdW50ZWQuIFRodXMsIGEgdmFsdWUgb2YgMCBvbiBhbgordW5tb3VudGVkIGZpbGVzeXN0ZW0gbWVhbnMgdGhhdCB0aGUgZmlsZXN5c3RlbSB3YXMgbm90IHVubW91bnRlZAorcHJvcGVybHkgLSBUaGUgZmlsZXN5c3RlbSBpcyBub3QgImNsZWFuIiBhbmQgcHJvYmFibHkgY29udGFpbnMKK2Vycm9ycy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+Yml0IDE8L0xpdGVyYWw+IG9mIHMmbG93YmFyO3N0YXRlIGlzIHNldCBieSB0aGUga2VybmVsIHdoZW4gaXQgZGV0ZWN0cyBhbgorZXJyb3IgaW4gdGhlIGZpbGVzeXN0ZW0uIEEgdmFsdWUgb2YgMCBkb2Vzbid0IG1lYW4gdGhhdCB0aGVyZSBpc24ndAorYW4gZXJyb3IgaW4gdGhlIGZpbGVzeXN0ZW0sIGp1c3QgdGhhdCB0aGUga2VybmVsIGRpZG4ndCBmaW5kIGFueS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGtlcm5lbCBiZWhhdmlvciB3aGVuIGFuIGVycm9yIGlzIGZvdW5kIGlzIGRldGVybWluZWQgYnkgdGhlIHVzZXIgdHVuYWJsZQorcGFyYW1ldGVyIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZXJyb3JzPC9MaXRlcmFsPjoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGtlcm5lbCB3aWxsIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIGlmIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZXJyb3JzPTE8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGtlcm5lbCB3aWxsIHJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gaW4gcmVhZC1vbmx5IG1vZGUgaWYKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZXJyb3JzPTI8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJQSBrZXJuZWwgcGFuaWMgd2lsbCBiZSBpc3N1ZWQgaWYgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtlcnJvcnM9MzwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGUgZXJyb3IuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5BZGRpdGlvbmFsIHBhcmFtZXRlcnMgdXNlZCBieSBlMmZzY2s8L1RpdGxlPgorCis8UGFyYT4KK09mLWNvdXJzZSwgPExpdGVyYWwgcmVtYXA9InR0Ij5lMmZzY2s8L0xpdGVyYWw+IHdpbGwgY2hlY2sgdGhlIGZpbGVzeXN0ZW0gaWYgZXJyb3JzIHdlcmUgZGV0ZWN0ZWQKK29yIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBjbGVhbi4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBhZGRpdGlvbiwgZWFjaCB0aW1lIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bW50Jmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gaXMKK2luY3JlbWVudGVkLiBXaGVuIHMmbG93YmFyO21udCZsb3diYXI7Y291bnQgcmVhY2hlcyA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO21heCZsb3diYXI7bW50Jmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4sIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZTJmc2NrPC9MaXRlcmFsPgord2lsbCBmb3JjZSBhIGNoZWNrIG9uIHRoZSBmaWxlc3lzdGVtIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSBjbGVhbi4gSXQgd2lsbAordGhlbiB6ZXJvIHMmbG93YmFyO21udCZsb3diYXI7Y291bnQuIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bWF4Jmxvd2JhcjttbnQmbG93YmFyO2NvdW50PC9MaXRlcmFsPiBpcyBhIHR1bmFibGUgcGFyYW1ldGVyLgorPC9QYXJhPgorCis8UGFyYT4KK0UyZnNjayBhbHNvIHJlY29yZHMgdGhlIGxhc3QgdGltZSBpbiB3aGljaCB0aGUgZmlsZSBzeXN0ZW0gd2FzIGNoZWNrZWQgaW4KK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2xhc3RjaGVjazwvTGl0ZXJhbD4gdmFyaWFibGUuIFRoZSB1c2VyIHR1bmFibGUgcGFyYW1ldGVyCis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2NoZWNraW50ZXJ2YWw8L0xpdGVyYWw+IHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mIHNlY29uZHMgd2hpY2ggYXJlIGFsbG93ZWQKK3RvIHBhc3Mgc2luY2UgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtsYXN0Y2hlY2s8L0xpdGVyYWw+IHVudGlsIGEgY2hlY2sgaXMgcmVmb3JjZWQuIEEgdmFsdWUgb2YKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+MDwvTGl0ZXJhbD4gZGlzYWJsZXMgdGltZS1iYXNlZCBjaGVjay4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkFkZGl0aW9uYWwgdXNlciB0dW5hYmxlIHBhcmFtZXRlcnM8L1RpdGxlPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ciZsb3diYXI7YmxvY2tzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gY29udGFpbnMgdGhlIG51bWJlciBvZiBkaXNrIGJsb2NrcyB3aGljaCBhcmUKK3Jlc2VydmVkIGZvciByb290LCB0aGUgdXNlciB3aG9zZSBpZCBudW1iZXIgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtkZWYmbG93YmFyO3Jlc3VpZDwvTGl0ZXJhbD4gYW5kIHRoZQorZ3JvdXAgd2hvc2UgaWQgbnVtYmVyIGlzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ZGVnJmxvd2JhcjtyZXNnaWQ8L0xpdGVyYWw+LiBUaGUga2VybmVsIHdpbGwgcmVmdXNlIHRvCithbGxvY2F0ZSB0aG9zZSBsYXN0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7ciZsb3diYXI7YmxvY2tzJmxvd2Jhcjtjb3VudDwvTGl0ZXJhbD4gaWYgdGhlIHVzZXIgaXMgbm90IG9uZSBvZiB0aGUKK2Fib3ZlLiBUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGUgZmlsZXN5c3RlbSB3aWxsIHVzdWFsbHkgbm90IGJlIDEwMCZwZXJjbnQ7IGZ1bGwsCitzaW5jZSAxMDAmcGVyY250OyBmdWxsIGZpbGVzeXN0ZW1zIGNhbiBhZmZlY3QgdmFyaW91cyBhc3BlY3RzIG9mIG9wZXJhdGlvbi4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2RlZiZsb3diYXI7cmVzdWlkPC9MaXRlcmFsPiBhbmQgPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtkZWYmbG93YmFyO3Jlc2dpZDwvTGl0ZXJhbD4gY29udGFpbiB0aGUgaWQgb2YgdGhlIHVzZXIgYW5kCitvZiB0aGUgZ3JvdXAgd2hvIGNhbiB1c2UgdGhlIHJlc2VydmVkIGJsb2NrcyBpbiBhZGRpdGlvbiB0byByb290LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+RmlsZXN5c3RlbSBjdXJyZW50IHN0YXRlPC9UaXRsZT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO2ZyZWUmbG93YmFyO2Jsb2NrcyZsb3diYXI7Y291bnQ8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSBjdXJyZW50IG51bWJlciBvZiBmcmVlIGJsb2NrcworaW4gdGhlIGZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5zJmxvd2JhcjtmcmVlJmxvd2Jhcjtpbm9kZXMmbG93YmFyO2NvdW50PC9MaXRlcmFsPiBjb250YWlucyB0aGUgY3VycmVudCBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlCitmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KKzxMaXRlcmFsIHJlbWFwPSJ0dCI+cyZsb3diYXI7bXRpbWU8L0xpdGVyYWw+IGNvbnRhaW5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzeXN0ZW0gd2FzIGxhc3QgbW91bnRlZC4KKzwvUGFyYT4KKworPFBhcmE+Cis8TGl0ZXJhbCByZW1hcD0idHQiPnMmbG93YmFyO3d0aW1lPC9MaXRlcmFsPiBjb250YWlucyB0aGUgbGFzdCB0aW1lIGF0IHdoaWNoIHNvbWV0aGluZyB3YXMgY2hhbmdlZCBpbiB0aGUKK2ZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5Db3B5cmlnaHQ8L1RpdGxlPgorCis8UGFyYT4KK1RoaXMgZG9jdW1lbnQgY29udGFpbnMgc291cmNlIGNvZGUgd2hpY2ggd2FzIHRha2VuIGZyb20gdGhlIExpbnV4IGV4dDIKK2tlcm5lbCBzb3VyY2UgY29kZSwgbWFpbmx5IGZyb20gPEZJTEVOQU1FPi91c3IvaW5jbHVkZS9saW51eC9leHQyJmxvd2Jhcjtmcy5oPC9GSUxFTkFNRT4uIEZvbGxvd3MKK3RoZSBvcmlnaW5hbCBjb3B5cmlnaHQ6Cis8L1BhcmE+CisKKzxQYXJhPgorCis8UHJvZ3JhbUxpc3Rpbmc+CisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworPC9Qcm9ncmFtTGlzdGluZz4KKworPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+QWNrbm93bGVkZ21lbnRzPC9UaXRsZT4KKworPFBhcmE+CitJIHdvdWxkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUsIHdobyB3ZXJlIGludm9sdmVkIGluIHRoZQorZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0MiBmaWxlc3lzdGVtIGtlcm5lbCBjb2RlIGFuZCBzdXBwb3J0Cit1dGlsaXRpZXM6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+UmVteSBDYXJkPC9MaXRlcmFsPgorCitXaG8gZGVzaWduZWQsIGltcGxlbWVudGVkIGFuZCBtYWludGFpbnMgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwKK2NvZGUsIGFuZCBzb21lIG9mIHRoZSBleHQyIHV0aWxpdGllcy4gPExpdGVyYWwgcmVtYXA9InR0Ij5SZW15IENhcmQ8L0xpdGVyYWw+IGlzIGFsc28gdGhlCithdXRob3IgCW9mIHNldmVyYWwgaGVscGZ1bCBzbGlkZXMgY29uY2VybmluZyB0aGUgZXh0MiBmaWxlc3lzdGVtLgorU3BlY2lmaWNhbGx5LCBoZSBpcyB0aGUgYXV0aG9yIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+RmlsZSBNYW5hZ2VtZW50IGluIHRoZSBMaW51eAorS2VybmVsPC9MaXRlcmFsPiBhbmQgb2YgPExpdGVyYWwgcmVtYXA9InR0Ij5UaGUgU2Vjb25kIEV4dGVuZGVkIEZpbGUgU3lzdGVtIC0gQ3VycmVudAorU3RhdGUsIEZ1dHVyZSBEZXZlbG9wbWVudDwvTGl0ZXJhbD4uCisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCTxMaXRlcmFsIHJlbWFwPSJ0dCI+V2F5bmUgRGF2aXNvbjwvTGl0ZXJhbD4KKworV2hvIGRlc2lnbmVkIHRoZSBleHQyIGZpbGVzeXN0ZW0uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlN0ZXBoZW4gVHdlZWRpZTwvTGl0ZXJhbD4KKworV2hvIGhlbHBlZCBkZXNpZ25pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbSBrZXJuZWwgY29kZSBhbmQgd3JvdGUgdGhlCitzbGlkZXMgPExpdGVyYWwgcmVtYXA9InR0Ij5PcHRpbWl6YXRpb25zIGluIEZpbGUgU3lzdGVtczwvTGl0ZXJhbD4uCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwk8TGl0ZXJhbCByZW1hcD0idHQiPlRoZW9kb3JlIFRzJ288L0xpdGVyYWw+CisKK1dobyBpcyB0aGUgYXV0aG9yIG9mIHNldmVyYWwgZXh0MiB1dGlsaXRpZXMgYW5kIG9mIHRoZSBleHQyIGxpYnJhcnkKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+bGliZXh0MmZzPC9MaXRlcmFsPiAod2hpY2ggSSBkaWRuJ3QgdXNlLCBzaW1wbHkgYmVjYXVzZSBJIGRpZG4ndCBrbm93CitpdCBleGlzdHMgd2hlbiBJIHN0YXJ0ZWQgdG8gd29yayBvbiBteSBwcm9qZWN0KS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorTGFzdGx5LCBJIHdvdWxkIGxpa2UgdG8gdGhhbmssIG9mLWNvdXJzZSwgPExpdGVyYWwgcmVtYXA9InR0Ij5MaW51cyBUb3J2YWxkczwvTGl0ZXJhbD4gYW5kIHRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5MaW51eCBjb21tdW5pdHk8L0xpdGVyYWw+IGZvciBwcm92aWRpbmcgYWxsIG9mIHVzIHdpdGggc3VjaCBhIGdyZWF0IG9wZXJhdGluZworc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1BsZWFzZSBjb250YWN0IG1lIGluIGEgY2FzZSBvZiBhbiBlcnJvciByZXBvcnQsIHN1Z2dlc3Rpb25zLCBvciBqdXN0IGFib3V0Cithbnl0aGluZyBjb25jZXJuaW5nIHRoaXMgZG9jdW1lbnQuCis8L1BhcmE+CisKKzxQYXJhPgorRW5qb3ksCis8L1BhcmE+CisKKzxQYXJhPgorR2FkaSBPeG1hbiAmbHQ7dGd1ZEB0b2NobmFwYzIudGVjaG5pb24uYWMuaWwmZ3Q7Cis8L1BhcmE+CisKKzxQYXJhPgorSGFpZmEsIEF1Z3VzdCA5NQorPC9QYXJhPgorCis8L1NlY3QxPgorCis8L0FydGljbGU+CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2RvYy91c2VyLWd1aWRlLnNnbWwgYi9lMmZzcHJvZ3MvZXh0MmVkL2RvYy91c2VyLWd1aWRlLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4ODdlZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvZG9jL3VzZXItZ3VpZGUuc2dtbApAQCAtMCwwICsxLDIyNTggQEAKKzwhRE9DVFlQRSBBcnRpY2xlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFY0LjEvL0VOIj4KKworPEFydGljbGU+CisKKzxBcnRpY2xlSW5mbz4KKworPFRpdGxlPkVYVDJFRCAtIFRoZSBFeHRlbmRlZC0yIGZpbGVzeXN0ZW0gZWRpdG9yIC0gVXNlcidzIGd1aWRlPC9UaXRsZT4KKzxBVVRIT1I+Cis8Rmlyc3ROYW1lPkdhZGkgT3htYW4sIHRndWRAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPC9GaXJzdE5hbWU+Cis8L0FVVEhPUj4KKzxQdWJEYXRlPnYwLjEsIEF1Z3VzdCAzIDE5OTU8L1B1YkRhdGU+CisKKzxBYnN0cmFjdD4KKworPFBhcmE+CitUaGlzIGlzIG9ubHkgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LiBJdCBtYXkgYmUgdW5jbGVhciBhdAorc29tZSBwbGFjZXMuIFBsZWFzZSBzZW5kIG1lIGZlZWRiYWNrIHdpdGggYW55dGhpbmcgcmVnYXJkaW5nIHRvIGl0LgorPC9QYXJhPgorCis8L0Fic3RyYWN0PgorCis8L0FydGljbGVJbmZvPgorCis8U2VjdDE+Cis8VGl0bGU+QWJvdXQgRVhUMkVEIGRvY3VtZW50YXRpb248L1RpdGxlPgorCis8UGFyYT4KK1RoZSBFWFQyRUQgZG9jdW1lbnRhdGlvbiBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0czoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGV4dDIgZmlsZXN5c3RlbSBvdmVydmlldy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBFWFQyRUQgdXNlcidzIGd1aWRlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIEVYVDJFRCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFBhcmE+CitJZiB5b3UgaW50ZW5kIHRvIHVzZWQgRVhUMkVELCBJIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3Ugd291bGQgYmUgZmFtaWxpYXIKK3dpdGggdGhlIG1hdGVyaWFsIHByZXNlbnRlZCBpbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyIGZpbGVzeXN0ZW0gb3ZlcnZpZXc8L0xpdGVyYWw+IGFzIHdlbGwuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgeW91IGFsc28gaW50ZW5kIHRvIGJyb3dzZSBhbmQgbW9kaWZ5IHRoZSBzb3VyY2UgY29kZSwgSSBzdWdnZXN0IHRoYXQgeW91Cit3aWxsIGFsc28gcmVhZCB0aGUgYXJ0aWNsZSA8TGl0ZXJhbCByZW1hcD0idHQiPlRoZSBFWFQyRUQgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbjwvTGl0ZXJhbD4sIGFzIGl0Citwcm92aWRlcyBhIGdlbmVyYWwgb3ZlcnZpZXcgb2YgdGhlIHN0cnVjdHVyZSBvZiBteSBzb3VyY2UgY29kZS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkludHJvZHVjdGlvbjwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGlzIGEgImRpc2sgZWRpdG9yIiBmb3IgdGhlIGV4dDIgZmlsZXN5c3RlbS4gSXRzIHB1cnBvc2UgaXMgdG8gc2hvdworeW91IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gaW4gYW4gcmF0aGVyIGludHVpdGl2ZQorYW5kIGxvZ2ljYWwgd2F5LCBzbyB0aGF0IGl0IHdpbGwgYmUgZWFzaWVyIHRvICJ0cmF2ZWwiIGJldHdlZW4gdGhlIHZhcmlvdXMKK2ludGVybmFsIGZpbGVzeXN0ZW0gc3RydWN0dXJlcy4gCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5CYXNpYyBjb25jZXB0cyBpbiBFWFQyRUQ8L1RpdGxlPgorCis8UGFyYT4KK1R3byBiYXNpYyBjb25jZXB0cyBpbiBFWFQyRUQgYXJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZHM8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGVzPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitFWFQyRUQgaXMgb2JqZWN0LW9yaWVudGVkIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRlZmluZXMgb2JqZWN0cyBpbiB0aGUKK2ZpbGVzeXN0ZW0sIGxpa2UgYSA8TGl0ZXJhbCByZW1hcD0idHQiPnN1cGVyLWJsb2NrPC9MaXRlcmFsPiBvciBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGlyZWN0b3J5PC9MaXRlcmFsPi4gQW4gb2JqZWN0IGlzCitzb21ldGhpbmcgd2hpY2ggImtub3dzIiBob3cgdG8gaGFuZGxlIHNvbWUgYXNwZWN0IG9mIHRoZSBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1lvdXIgaW50ZXJhY3Rpb24gd2l0aCBFWFQyRUQgaXMgZG9uZSB0aHJvdWdoIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Y29tbWFuZHM8L0xpdGVyYWw+IHdoaWNoIEVYVDJFRAorYWNjZXB0cy4gVGhlcmUgYXJlIHRocmVlIGxldmVscyBvZiBjb21tYW5kczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJR2VuZXJhbCBDb21tYW5kcworPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRXh0ZW5kZWQtMiBGaWxlc3lzdGVtIGdlbmVyYWwgY29tbWFuZHMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVR5cGUgc3BlY2lmaWMgY29tbWFuZHMKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitUaGUgR2VuZXJhbCBjb21tYW5kcyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgZXh0MiBnZW5lcmFsIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUgb25seSB3aGVuIGVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBUeXBlIHNwZWNpZmljIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUgd2hlbiBlZGl0aW5nIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZQorZmlsZXN5c3RlbS4gRWFjaCBvYmplY3QgdHlwaWNhbGx5IGNvbWVzIHdpdGggaXRzIG93biBzZXQgb2YgaW50ZXJuYWwKK3ZhcmlhYmxlcywgYW5kIGl0cyBvd24gc2V0IG9mIGNvbW1hbmRzLCB3aGljaCBhcmUgZmluZSB0dW5lZCBoYW5kbGUgdGhlCitjb3JyZXNwb25kaW5nIHN0cnVjdHVyZSBpbiB0aGUgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlJ1bm5pbmcgRVhUMkVEPC9UaXRsZT4KKworPFBhcmE+CitSdW5uaW5nIEVYVDJFRCBpcyBhcyBzaW1wbGUgYXMgdHlwaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MmVkPC9MaXRlcmFsPiBmcm9tIHRoZSBzaGVsbCBwcm9tcHQuCitUaGVyZSBhcmUgbm8gY29tbWFuZCBsaW5lIHN3aXRjaGVzLgorPC9QYXJhPgorCis8UGFyYT4KK1doZW4gZmlyc3QgcnVuLCBFWFQyRUQgcGFyc2VzIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MmVkLmNvbmY8L0xpdGVyYWw+LgorVGhpcyBmaWxlIG11c3QgZXhpc3QuCis8L1BhcmE+CisKKzxQYXJhPgorV2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHByb2Nlc3NpbmcgaXMgZG9uZSwgRVhUMkVEIHNjcmVlbiBzaG91bGQgYXBwZWFyCitvbiB0aGUgc2NyZWVuLCB3aXRoIHRoZSBjb21tYW5kIHByb21wdCA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDJlZCYjNjI7PC9MaXRlcmFsPiBkaXNwbGF5ZWQuCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5FWFQyRUQgdXNlciBpbnRlcmZhY2U8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCB1c2VzIHRoZSA8RW1waGFzaXM+bmN1cnNlczwvRW1waGFzaXM+IGxpYnJhcnkgZm9yIHNjcmVlbiBtYW5hZ2VtZW50LiBZb3VyIHNjcmVlbgord2lsbCBiZSBkaXZpZGVkIGludG8gZm91ciBwYXJ0cywgZnJvbSB0b3AgdG8gYm90dG9tOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKyBUaXRsZSB3aW5kb3cKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIFN0YXR1cyB3aW5kb3cKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIE1haW4gZWRpdGluZyB3aW5kb3cKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIENvbW1hbmQgd2luZG93Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworVGhlIHRpdGxlIHdpbmRvdyBqdXN0IGRpc3BsYXlzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgRVhUMkVELgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdGF0dXMgd2luZG93IHdpbGwgZGlzcGxheSB2YXJpb3VzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgc3RhdGUgb2YKK3RoZSBlZGl0aW5nIGF0IHRoaXMgcG9pbnQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG1haW4gZWRpdGluZyB3aW5kb3cgaXMgdGhlIHBsYWNlIGF0IHdoaWNoIHRoZSBhY3R1YWwgZGF0YSB3aWxsIGJlIHNob3duLgorQWxtb3N0IGV2ZXJ5IGNvbW1hbmQgd2lsbCBjYXVzZSBzb21lIGRpc3BsYXkgYXQgdGhpcyB3aW5kb3cuIFRoaXMgd2luZG93LCBhcworb3Bwb3NlZCB0byB0aGUgdGhyZWUgb3RoZXJzLCBpcyBvZiB2YXJpYWJsZSBsZW5ndGggLSBZb3UgYWx3YXlzIGxvb2sgYXQgb25lCitwYWdlIG9mIGl0LiBUaGUgY3VycmVudCBwYWdlIGFuZCB0aGUgdG90YWwgbnVtYmVycyBvZiBwYWdlcyBhdCB0aGlzIG1vbWVudAoraXMgZGlzcGxheWVkIGF0IHRoZSBzdGF0dXMgd2luZG93LiBNb3ZpbmcgYmV0d2VlbiBwYWdlcyBpcyBkb25lIGJ5IHRoZSB1c2UKK29mIHRoZSA8Q29tbWFuZD5wZ2RuPC9Db21tYW5kPiBhbmQgPENvbW1hbmQ+cGd1cDwvQ29tbWFuZD4gY29tbWFuZHMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGNvbW1hbmQgd2luZG93IGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4gSXQgYWx3YXlzIGRpc3BsYXlzIGEKK2NvbW1hbmQgcHJvbXB0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MmVkJiM2Mjs8L0xpdGVyYWw+IGFuZCBhbGxvd3MgeW91IHRvIHR5cGUgYSBjb21tYW5kLiBGZWVkYmFjaworYWJvdXQgdGhlIGNvbW1hbmRzIGVudGVyZWQgaXMgZGlzcGxheWVkIHRvIHRoaXMgd2luZG93IGFsc28uCis8L1BhcmE+CisKKzxQYXJhPgorRVhUMkVEIHVzZXMgdGhlIDxFbXBoYXNpcz5yZWFkbGluZTwvRW1waGFzaXM+IGxpYnJhcnkgd2hpbGUgcHJvY2Vzc2luZyBhIGNvbW1hbmQgbGluZS4gQWxsCit0aGUgdXN1YWwgZWRpdGluZyBrZXlzIGFyZSBhdmFpbGFibGUuIEVhY2ggZW50ZXJlZCBjb21tYW5kIGlzIHBsYWNlZCBpbnRvIGEKK2hpc3Rvcnkgb2YgY29tbWFuZHMsIGFuZCBjYW4gYmUgcmVjYWxsZWQgbGF0ZXIuIENvbW1hbmQgQ29tcGxldGlvbiBpcyBhbHNvCitzdXBwb3J0ZWQgLSBKdXN0IHN0YXJ0IHRvIHR5cGUgYSBjb21tYW5kLCBhbmQgcHJlc3MgdGhlIGNvbXBsZXRpb24ga2V5LgorPC9QYXJhPgorCis8UGFyYT4KK1ByZXNzaW5nIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZW50ZXI8L0xpdGVyYWw+IGF0IHRoZSBjb21tYW5kIHdpbmRvdywgd2l0aG91dCBlbnRlcmluZyBhIGNvbW1hbmQsCityZWNhbGxzIHRoZSBsYXN0IGNvbW1hbmQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gbW92aW5nIGJldHdlZW4gY2xvc2UgZW50cmllcywKK2luIHRoZSA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBjb21tYW5kLCBmb3IgZXhhbXBsZS4KKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkdldHRpbmcgc3RhcnRlZDwvVGl0bGU+CisKKzxTZWN0Mj4KKzxUaXRsZT5BIGZldyBwcmVjYXV0aW9uczwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGlzIGEgdG9vbCBmb3IgZmlsZXN5c3RlbSA8TGl0ZXJhbCByZW1hcD0idHQiPmVkaXRpbmc8L0xpdGVyYWw+LiBBcyBzdWNoLCBpdCBjYW4gYmUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+ZGFuZ2Vyb3VzPC9MaXRlcmFsPi4gVGhlIHN1bW1hcnkgdG8gdGhlIHN1YnNlY3Rpb25zIGJlbG93IGlzIHRoYXQKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+WW91IG11c3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmc8L0xpdGVyYWw+LgorPC9QYXJhPgorCis8U2VjdDMgaWQ9Im1vdW50ZWQtcmVmIj4KKzxUaXRsZT5BIG1vdW50ZWQgZmlsZXN5c3RlbTwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIGlzIG5vdCBkZXNpZ25lZCB0byB3b3JrIG9uIGEgbW91bnRlZCBmaWxlc3lzdGVtIC0gSXQgaXMgY29tcGxpY2F0ZWQKK2Vub3VnaCBhcyBpdCBpczsgSSBkaWRuJ3QgZXZlbiB0cnkgdG8gdGhpbmsgb2YgaGFuZGxpbmcgdGhlIHZhcmlvdXMgcmFjZQorY29uZGl0aW9ucy4gQXMgc3VjaCwgcGxlYXNlIHJlc3BlY3QgdGhlIGZvbGxvd2luZyBhZHZpY2U6Cis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5EbyBub3QgdXNlIEVYVDJFRCBvbiBhIG1vdW50ZWQgZmlsZXN5c3RlbSAhPC9MaXRlcmFsPgorPC9QYXJhPgorCis8UGFyYT4KK0VYVDJFRCB3aWxsIG5vdCBhbGxvdyB3cml0ZSBhY2Nlc3MgdG8gYSBtb3VudGVkIGZpbGVzeXN0ZW0uIEFsdGhvdWdoIGl0IGlzCitmYWlybHkgZWFzeSB0byBjaGFuZ2UgRVhUMkVEIHNvIHRoYXQgaXQgd2lsbCBiZSBhbGxvd2VkLCBJIGhlcmVieSByZXF1ZXN0CithZ2Fpbi0gRVhUMkVEIGlzIG5vdCBkZXNpZ25lZCBmb3IgdGhhdCBhY3Rpb24sIGFuZCB3aWxsIG1vc3QgbGlrZWx5IGNvcnJ1cHQKK2RhdGEgaWYgdXNlZCB0aGF0IHdheS4gUGxlYXNlIGRvbid0IGRvIHRoYXQuCis8L1BhcmE+CisKKzxQYXJhPgorQ29uY2VybmluZyByZWFkIGFjY2VzcywgSSBjaG9zZSB0byBsZWF2ZSB0aGUgZGVjaXNpb24gZm9yIHRoZSB1c2VyIHRocm91Z2gKK3RoZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+QWxsb3dNb3VudGVkUmVhZDwvTGl0ZXJhbD4uIEFsdGhvdWdoIHJlYWQgYWNjZXNzCitvbiBhIG1vdW50ZWQgcGFydGl0aW9uIHdpbGwgbm90IGRvIGFueSBkYW1hZ2UgdG8gdGhlIGZpbGVzeXN0ZW0sIHRoZSBkYXRhCitkaXNwbGF5ZWQgdG8geW91IHdpbGwgbm90IGJlIHJlbGlhYmxlLCBhbmQgc2hvd2luZyB5b3UgaW5jb3JyZWN0IGluZm9ybWF0aW9uCittYXkgYmUgYXMgYmFkIGFzIGNvcnJ1cHRpbmcgdGhlIGZpbGVzeXN0ZW0uIEhvd2V2ZXIsIHlvdSBtYXkgc3RpbGwgd2lzaCB0bworZG8gdGhhdC4KKzwvUGFyYT4KKworPC9TZWN0Mz4KKworPFNlY3QzPgorPFRpdGxlPldyaXRlIGFjY2VzczwvVGl0bGU+CisKKzxQYXJhPgorQ29uc2lkZXJpbmcgdGhlIG9idmlvdXMgc2Vuc2l0aXZpdHkgb2YgdGhlIHN1YmplY3QsIEkgdG9vayB0aGUgZm9sbG93aW5nCithY3Rpb25zOgorPC9QYXJhPgorCis8UGFyYT4KKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFWFQyRUQgd2lsbCBhbHdheXMgc3RhcnQgd2l0aCBhIHJlYWQtb25seSBhY2Nlc3MuIFdyaXRlIGFjY2VzcyBtb2RlCituZWVkcyB0byBiZSBzcGVjaWZpY2FsbHkgZW50ZXJlZCBieSB0aGUgPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IGNvbW1hbmQuCitVbnRpbCB0aGlzIGlzIGRvbmUsIG5vIHdyaXRlIHdpbGwgYmUgYWxsb3dlZC4gV3JpdGUgYWNjZXNzIGNhbiBiZQorZGlzYWJsZWQgYXQgYW55IHRpbWUgd2l0aCA8Q29tbWFuZD5kaXNhYmxld3JpdGU8L0NvbW1hbmQ+LiBXaGVuCis8Q29tbWFuZD5lbmFibGV3cml0ZTwvQ29tbWFuZD4gaXMgaXNzdWVkLCB0aGUgZGV2aWNlIGlzIHJlb3BlbmVkIGluIHJlYWQtd3JpdGUKK21vZGUuIE5lZWRsZXNzIHRvIHNheSwgdGhlIGRldmljZSBwZXJtaXNzaW9ucyBzaG91bGQgYWxsb3cgdGhhdC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUFzIGEgc2Vjb25kIGxldmVsIG9mIHByb3RlY3Rpb24sIHlvdSBjYW4gZGlzYWxsb3cgd3JpdGUgYWNjZXNzIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlIGJ5IHVzaW5nIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPkFsbG93Q2hhbmdlcyBvZmY8L0xpdGVyYWw+Citjb25maWd1cmF0aW9uIG9wdGlvbi4gSW4gdGhpcyBjYXNlLCB0aGUgPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IGNvbW1hbmQKK3dpbGwgYmUgcmVmdXNlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdoZW4gd3JpdGUgYWNjZXNzIGlzIGVuYWJsZWQsIHRoZSBkYXRhIHdpbGwgbmV2ZXIgY2hhbmdlCitpbW1lZGlhdGVseS4gUmF0aGVyLCBhIHNwZWNpZmljIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZCBpcyBuZWVkZWQKK3RvIHVwZGF0ZSB0aGUgb2JqZWN0IGluIHRoZSBkaXNrIHdpdGggdGhlIGNoYW5nZWQgb2JqZWN0IGluIG1lbW9yeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIGFkZGl0aW9uLCBBIGxvZ2dpbmcgb3B0aW9uIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24KK2ZpbGUgb3B0aW9ucyA8TGl0ZXJhbCByZW1hcD0idHQiPkxvZ0NoYW5nZXM8L0xpdGVyYWw+IGFuZCA8TGl0ZXJhbCByZW1hcD0idHQiPkxvZ0ZpbGU8L0xpdGVyYWw+LiBXaXRoIGxvZ2dpbmcKK2VuYWJsZWQsIGVhY2ggY2hhbmdlIHRvIHRoZSBkaXNrIHdpbGwgYmUgbG9nZ2VkIGF0IGEgdmVyeSBwcmltaXRpdmUKK2xldmVsIC0gQSBoZXggZHVtcCBvZiB0aGUgb3JpZ2luYWwgZGF0YSBhbmQgb2YgdGhlIG5ldyB3cml0dGVuIGRhdGEuCitUaGUgbG9nIGZpbGUgd2lsbCBiZSBhIHRleHQgZmlsZSB3aGljaCBpcyBlYXNpbHkgcmVhZGFibGUsIGFuZCB5b3UKK2NhbiBtYWtlIHVzZSBvZiBpdCB0byB1bmRvIGFueSBjaGFuZ2VzIHdoaWNoIHlvdSBtYWRlIChFWFQyRUQgZG9lc24ndAorbWFrZSB1c2Ugb2YgdGhlIGxvZyBmaWxlIGZvciB0aGF0IHB1cnBvc2UsIGl0IGp1c3QgbG9ncyB0aGUgY2hhbmdlcykuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCitQbGVhc2UgcmVtZW1iZXIgdGhhdCB0aGlzIGlzIG9ubHkgdGhlIGluaXRpYWwgcmVsZWFzZSBvZiBFWFQyRUQsIGFuZCBpdCBpcworbm90IHZlcnkgbXVjaCB0ZXN0ZWQgLSBJdCBpcyByZWFzb25hYmxlIHRvIGFzc3VtZSB0aGF0IDxMaXRlcmFsIHJlbWFwPSJ0dCI+dGhlcmUgYXJlCitidWdzPC9MaXRlcmFsPi4KK0hvd2V2ZXIsIHRoZSBsb2dnaW5nIG9wdGlvbiBhYm92ZSBjYW4gb2ZmZXIgcHJvdGVjdGlvbiBldmVuIGZyb20gdGhpcwordW5mb3J0dW5hdGUgY2FzZS4gVGhlcmVmb3IsIEkgaGlnaGx5IHJlY29tbWVuZCB0aGF0IGF0IGxlYXN0IHdoZW4gZmlyc3QKK3dvcmtpbmcgd2l0aCBFWFQyRUQsIHRoZSBsb2dnaW5nIG9wdGlvbiB3aWxsIGJlIGVuYWJsZWQsIGRlc3BpdGUgdGhlIGRpc2sKK3NwYWNlIHdoaWNoIGl0IGNvbnN1bWVzLgorPC9QYXJhPgorCis8L1NlY3QzPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9ImhlbHAtcmVmIj4KKzxUaXRsZT5UaGUgaGVscCBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitXaGVuIGxvYWRlZCwgRVhUMkVEIHdpbGwgc2hvdyBhIHNob3J0IGhlbHAgc2NyZWVuLiBUaGlzIGhlbHAgc2NyZWVuIGNhbgorYWx3YXlzIGJlIHJldHJpZXZlZCBieSB0aGUgY29tbWFuZCA8Q29tbWFuZD5oZWxwPC9Db21tYW5kPi4gVGhlIGhlbHAgc2NyZWVuIGRpc3BsYXlzIGEKK2xpc3Qgb2YgYWxsIHRoZSBjb21tYW5kcyB3aGljaCBhcmUgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuIEF0IHN0YXJ0dXAsIG9ubHkKK3RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPkdlbmVyYWwgY29tbWFuZHM8L0xpdGVyYWw+IGFyZSBhdmFpbGFibGUuCitUaGlzIHdpbGwgY2hhbmdlIHdpdGggdGltZSwgc2luY2UgZWFjaCBvYmplY3QgaGFzIGl0cyBvd24gY29tbWFuZHMuIFRodXMsCitjb21tYW5kcyB3aGljaCBhcmUgYXZhaWxhYmxlIG5vdyBtYXkgbm90IGJlIGF2YWlsYWJsZSBsYXRlci4KK1VzaW5nIDxDb21tYW5kPmhlbHA8L0NvbW1hbmQ+IDxFbXBoYXNpcz5jb21tYW5kPC9FbXBoYXNpcz4gd2lsbCBkaXNwbGF5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBzcGVjaWZpYyBjb21tYW5kIDxFbXBoYXNpcz5jb21tYW5kPC9FbXBoYXNpcz4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0MiBpZD0ic2V0ZGV2aWNlLXJlZiI+Cis8VGl0bGU+VGhlIHNldGRldmljZSBjb21tYW5kPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZmlyc3QgY29tbWFuZCB0aGF0IGlzIHVzdWFsbHkgZW50ZXJlZCB0byBFWFQyRUQgaXMgdGhlIDxDb21tYW5kPnNldGRldmljZTwvQ29tbWFuZD4KK2NvbW1hbmQuIFRoaXMgY29tbWFuZCBzaW1wbHkgdGVsbHMgRVhUMkVEIG9uIHdoaWNoIGRldmljZSB0aGUgZmlsZXN5c3RlbSBpcworcHJlc2VudC4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgbXkgZXh0MiBmaWxlc3lzdGVtIGlzIG9uIHRoZSBmaXJzdCBwYXJ0aXRpb24KK29mIG15IGlkZSBkaXNrLiBUaGUgY29tbWFuZCB3aWxsIGJlOgorCis8U2NyZWVuPgorc2V0ZGV2aWNlIC9kZXYvaGRhMQorPC9TY3JlZW4+CisKK1RoZSBmb2xsb3dpbmcgYWN0aW9ucyB3aWxsIHRha2UgcGxhY2UgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKworPE9yZGVyZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlFWFQyRUQgd2lsbCBjaGVjayBpZiB0aGUgcGFydGl0aW9uIGlzIG1vdW50ZWQuCitJZiB0aGUgcGFydGl0aW9uIGlzIG1vdW50ZWQgKDxMaXRlcmFsIHJlbWFwPSJ0dCI+aGlnaGx5IG5vdCByZWNvbW1lbmRlZDwvTGl0ZXJhbD4pLAordGhlIGFjY2VwdC9yZWplY3QgYmVoYXZpb3Igd2lsbCBiZSBkZWNpZGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uCitmaWxlLiBDcm9zcyByZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJtb3VudGVkLXJlZiI+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHNwZWNpZmllZCBkZXZpY2Ugd2lsbCBiZSBvcGVuZWQgaW4gcmVhZC1vbmx5IG1vZGUuIFRoZQorcGVybWlzc2lvbnMgb2YgdGhlIGRldmljZSBzaG91bGQgYmUgc2V0IGluIGEgd2F5IHRoYXQgYWxsb3dzCit5b3UgdG8gb3BlbiB0aGUgZGV2aWNlIGZvciByZWFkIGFjY2Vzcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUF1dG9kZXRlY3Rpb24gb2YgYW4gZXh0MiBmaWxlc3lzdGVtIHdpbGwgYmUgbWFkZSBieSBzZWFyY2hpbmcgZm9yCit0aGUgZXh0MiBtYWdpYyBudW1iZXIgaW4gdGhlIG1haW4gc3VwZXJibG9jay4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCByZWNvZ25pdGlvbiBvZiBhbiBleHQyIGZpbGVzeXN0ZW0sIHRoZQorZXh0MiBmaWxlc3lzdGVtIHNwZWNpZmljIGNvbW1hbmRzIGFuZCB0aGUgZXh0MiBzcGVjaWZpYyBvYmplY3QKK2RlZmluaXRpb25zIHdpbGwgYmUgcmVnaXN0ZXJlZC4gVGhlIG9iamVjdCBkZWZpbml0aW9ucyB3aWxsIGJlIHJlYWQKK2F0IHJ1biB0aW1lIGZyb20gYSBmaWxlIHNwZWNpZmllZCBieSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitJbiBjYXNlIG9mIGEgY29ycnVwdGVkIGV4dDIgZmlsZXN5c3RlbSwgaXQgaXMgcXVpdGUgcG9zc2libGUgdGhhdAordGhlIG1haW4gc3VwZXJibG9jayBpcyBkYW1hZ2VkIGFuZCBhdXRvZGV0ZWN0aW9uIHdpbGwgZmFpbC4gSW4gdGhhdAorY2FzZSwgdXNlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiA8TGl0ZXJhbCByZW1hcD0idHQiPkZvcmNlRXh0MiBvbjwvTGl0ZXJhbD4uIFRoaXMgaXMgbm90Cit0aGUgZGVmYXVsdCBjYXNlIHNpbmNlIEVYVDJFRCBjYW4gYmUgdXNlZCBhdCBhIGxvd2VyIGxldmVsIHRvIGVkaXQgYQorbm9uLWV4dDIgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIGEgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgYXV0b2RldGVjdGlvbiwgZXNzZW50aWFsIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgZmlsZXN5c3RlbSBzdWNoIGFzIHRoZSBibG9jayBzaXplIHdpbGwgYmUgcmVhZCBmcm9tIHRoZQorc3VwZXJibG9jaywgdW5sZXNzIHRoZSB1c2VkIG92ZXJyaWRlcyB0aGlzIGJlaGF2aW9yIHdpdGggYW4KK2NvbmZpZ3VyYXRpb24gb3B0aW9uIChub3QgcmVjb21tZW5kZWQpLiBJbiB0aGF0IGNhc2UsIHRoZSBwYXJhbWV0ZXJzCit3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitJbiBhIGNhc2Ugb2YgYW4gYXV0b2RldGVjdGlvbiBmYWlsdXJlLCB0aGUgZXNzZW50aWFsIHBhcmFtZXRlcnMKK3dpbGwgYmUgcmVhZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCitBc3N1bWluZyB0aGF0IHlvdSBhcmUgZWRpdGluZyBhbiBleHQyIGZpbGVzeXN0ZW0gYW5kIHRoYXQgZXZlcnl0aGluZyBnb2VzCit3ZWxsLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCBhZGRpdGlvbmFsIGNvbW1hbmRzIGFyZSBub3cgYXZhaWxhYmxlIGluIHRoZSBoZWxwCitzY3JlZW4sIHVuZGVyIHRoZSBzZWN0aW9uIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiBmaWxlc3lzdGVtIGdlbmVyYWwgY29tbWFuZHM8L0xpdGVyYWw+LiBJbgorYWRkaXRpb24sIEVYVDJFRCBub3cgcmVjb2duaXplcyBhIGZldyBvYmplY3RzIHdoaWNoIGFyZSBlc3NlbnRpYWwgdG8gdGhlCitlZGl0aW5nIG9mIGFuIGV4dDIgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlR3byBsZXZlbHMgb2YgdXNhZ2U8L1RpdGxlPgorCis8U2VjdDI+Cis8VGl0bGU+TG93IGxldmVsIHVzYWdlPC9UaXRsZT4KKworPFBhcmE+CitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgd2hhdCBFWFQyRUQgcHJvdmlkZXMgZXZlbiB3aGVuIG5vdCBlZGl0aW5nIGFuIGV4dDIKK2ZpbGVzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorRXZlbiBhdCB0aGlzIGxldmVsLCBFWFQyRUQgaXMgbW9yZSB0aGFuIGp1c3QgYSBoZXggZWRpdG9yLiBJdCBzdGlsbCBhbGxvd3MKK2RlZmluaXRpb24gb2Ygb2JqZWN0cyBhbmQgdmFyaWFibGVzIGluIHJ1biB0aW1lIHRocm91Z2ggYSB1c2VyIGZpbGUsCithbHRob3VnaCBvZi1jb3Vyc2UgdGhlIG9iamVjdHMgd2lsbCBub3QgaGF2ZSBzcGVjaWFsIGZpbmUgdHVuZWQgZnVuY3Rpb25zCitjb25uZWN0ZWQgdG8gdGhlbS4gRVhUMkVEIHdpbGwgYWxsb3cgeW91IHRvIG1vdmUgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcKKzxDb21tYW5kPnNldG9mZnNldDwvQ29tbWFuZD4sIGFuZCB0byBhcHBseSBhbiBvYmplY3QgZGVmaW5pdGlvbiBvbiBhIHNwZWNpZmljIHBsYWNlCit1c2luZyA8Q29tbWFuZD5zZXR0eXBlPC9Db21tYW5kPiA8RW1waGFzaXM+dHlwZTwvRW1waGFzaXM+LiBGcm9tIHRoaXMgcG9pbnQgYW5kIG9uLCB0aGUgb2JqZWN0IHdpbGwKK2JlIHNob3duIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW4gaXRzIG5hdGl2ZSBmb3JtPC9MaXRlcmFsPiAtIFlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgdGhlCit2YXJpYWJsZXMgcmF0aGVyIHRoYW4ganVzdCBhIGhleCBkdW1wLCBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBjaGFuZ2UgZWFjaAordmFyaWFibGUgaW4gdGhlIGludHVpdGl2ZSBmb3JtIDxDb21tYW5kPnNldCB2YXJpYWJsZT12YWx1ZTwvQ29tbWFuZD4uCis8L1BhcmE+CisKKzxQYXJhPgorVG8gZGVmaW5lIG9iamVjdHMsIHVzZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gPExpdGVyYWwgcmVtYXA9InR0Ij5BbHRlcm5hdGVEZXNjcmlwdG9yczwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorVGhlcmUgYXJlIG5vdyB0d28gZm9ybXMgb2YgZWRpdGluZzoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJRWRpdGluZyB3aXRob3V0IGEgdHlwZS4gSW4gdGhpcyBjYXNlLCB0aGUgZGlzayBibG9jayB3aWxsIGJlIHNob3duCithcyBhIHRleHQraGV4IGR1bXAsIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdmUgYWxvbmcgYW5kIGNoYW5nZSBpdC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUVkaXRpbmcgd2l0aCBhIHR5cGUuIEluIHRoaXMgY2FzZSwgdGhlIG9iamVjdCdzIHZhcmlhYmxlcyB3aWxsIGJlCitzaG93biwgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gY2hhbmdlIGVhY2ggdmFyaWFibGUgaW4gaXRzIG5hdGl2ZSBmb3JtLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPkhpZ2ggbGV2ZWwgdXNhZ2U8L1RpdGxlPgorCis8UGFyYT4KK0VYVDJFRCB3YXMgZGVzaWduZWQgZm9yIHRoZSBlZGl0aW5nIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0uIEFzIHN1Y2gsIGl0CisidW5kZXJzdGFuZHMiIHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZSB0byBzb21lIGV4dGVudC4gRWFjaCBvYmplY3Qgbm93IGhhcworc3BlY2lhbCBmaW5lIHR1bmVkICdDJyBmdW5jdGlvbnMgY29ubmVjdGVkIHRvIGl0LCB3aGljaCBrbm93cyBob3cgdG8gZGlzcGxheQoraXQgaW4gYW4gaW50dWl0aXZlIGZvcm0sIGFuZCBob3cgdGhlIG9iamVjdCBmaXRzIGluIHRoZSBnZW5lcmFsIGRlc2lnbiBvZgordGhlIGV4dDIgZmlsZXN5c3RlbS4gSXQgaXMgb2YtY291cnNlIG11Y2ggZWFzaWVyIHRvIHVzZSB0aGlzIHR5cGUgb2YKK2VkaXRpbmcuIEZvciBleGFtcGxlOgorCis8U2NyZWVuPgorSXNzdWUgPEVtcGhhc2lzPmdyb3VwIDI8L0VtcGhhc2lzPiB0byBsb29rIGF0IHRoZSBtYWluIGNvcHkgb2YgdGhlIHRoaXJkIGdyb3VwIGJsb2NrCitkZXNjcmlwdG9yLiBXaXRoIDxFbXBoYXNpcz5nb2NvcHkgMTwvRW1waGFzaXM+IHlvdSBjYW4gbW92ZSB0byBpdHMgZmlyc3QgYmFja3VwIGNvcHksCithbmQgd2l0aCA8RW1waGFzaXM+aW5vZGU8L0VtcGhhc2lzPiB5b3UgY2FuIHN0YXJ0IGVkaXRpbmcgdGhlIGlub2RlIHRhYmxlIG9mIHRoZSBhYm92ZQorZ3JvdXAgYmxvY2suIEZyb20gaGVyZSwgaWYgdGhlIGlub2RlIGNvcnJlc3BvbmRzIHRvIGEgZmlsZSwgeW91IGNhbgordXNlIDxFbXBoYXNpcz5maWxlPC9FbXBoYXNpcz4gdG8gZWRpdCB0aGUgZmlsZSBpbiBhICJjb250aW51b3VzIiB3YXksIHVzaW5nCis8RW1waGFzaXM+bmV4dGJsb2NrPC9FbXBoYXNpcz4gdG8gcGFzcyB0byBpdHMgbmV4dCBibG9jaywgbGV0dGluZyBFWFQyRUQgZm9sbG93aW5nIGJ5CitpdHNlbGYgdGhlIGRpcmVjdCBibG9ja3MsIGluZGlyZWN0IGJsb2NrcywgLi4uLCB3aGlsZSBzdGlsbCBwcmVzZXJ2aW5nIHRoZQorYWN0dWFsIHZpZXcgb2YgdGhlIGV4YWN0IGJsb2NrIHVzYWdlIG9mIHRoZSBmaWxlLgorPC9TY3JlZW4+CisKK1RoZSBwb2ludCBpcyB0aGF0IHRoZSAidG91ciIgb2YgdGhlIGZpbGVzeXN0ZW0gd2lsbCBub3cgYmUgc3luY2hyb25pYyByYXRoZXIKK3RoYW4gYXN5bmNocm9uaWMgLSBFYWNoIG9iamVjdCBoYXMgdGhlICJsaW5rcyIgdG8gcGFzcyBiZXR3ZWVuIGNvbm5lY3RlZAorbG9naWNhbCBzdHJ1Y3R1cmVzLCBhbmQgc3BlY2lhbCBmaW5lLXR1bmVkIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggaXQuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5HZW5lcmFsIGNvbW1hbmRzPC9UaXRsZT4KKworPFBhcmE+CitJIHdpbGwgbm93IHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGV4cGxhbmF0aW9uIG9mIHRoZSBnZW5lcmFsIGNvbW1hbmRzLgorUGxlYXNlIGZlZWwgZnJlZSB0byBleHBlcmltZW50LCBidXQgdGFrZSBjYXJlIHdoZW4gdXNpbmcgdGhlCis8TGl0ZXJhbCByZW1hcD0idHQiPmVuYWJsZXdyaXRlPC9MaXRlcmFsPiBjb21tYW5kLgorPC9QYXJhPgorCis8UGFyYT4KK1doZW5ldmVyIGEgY29tbWFuZCBzeW50YXggaXMgc3BlY2lmaWVkLCBhcmd1bWVudHMgd2hpY2ggYXJlIG9wdGlvbmFsIGFyZQorZW5jbG9zZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMuCis8L1BhcmE+CisKKzxQYXJhPgorUGxlYXNlIG5vdGUgdGhhdCBpbiBFWFQyRUQsIGVhY2ggY29tbWFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHNwZWNpZmljCitvYmplY3QgdG8gcHJvdmlkZSBzcGVjaWFsIGZpbmUtdHVuZWQgZnVuY3Rpb25hbGl0eS4gSW4gZ2VuZXJhbCwgSSB3YXMKK2F0dGVtcHRpbmcgdG8gcHJlc2VydmUgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0aG9zZSBmdW5jdGlvbnMsIHdoaWNoIGFyZQorYWNjZXNzaWJsZSBieSB0aGUgc2FtZSBuYW1lLgorPC9QYXJhPgorCis8U2VjdDIgaWQ9ImRpc2FibGV3cml0ZS1yZWYiPgorPFRpdGxlPmRpc2FibGV3cml0ZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBkaXNhYmxld3JpdGUKKzwvU2NyZWVuPgorCis8Q29tbWFuZD5kaXNhYmxld3JpdGU8L0NvbW1hbmQ+IGlzIHVzZWQgdG8gcmVvcGVuIHRoZSBkZXZpY2Ugd2l0aCByZWFkLW9ubHkgYWNjZXNzLiBXaGVuCitmaXJzdCBydW5uaW5nIEVYVDJFRCwgdGhlIGRldmljZSBpcyBvcGVuZWQgaW4gcmVhZC1vbmx5IG1vZGUsIGFuZCBhbgorZXhwbGljaXQgPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IGlzIHJlcXVpcmVkIGZvciB3cml0ZSBhY2Nlc3MuIFdoZW4gZmluaXNoaW5nCit3aXRoIGNoYW5naW5nLCBhIDxDb21tYW5kPmRpc2FibGV3cml0ZTwvQ29tbWFuZD4gaXMgcmVjb21tZW5kZWQgZm9yIHNhZmV0eS4gQ3Jvc3MKK3JlZmVyZW5jZSBzZWN0aW9uIDxYUmVmIExpbmtFbmQ9ImRpc2FibGV3cml0ZS1yZWYiPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyIGlkPSJlbmFibGV3cml0ZS1yZWYiPgorPFRpdGxlPmVuYWJsZXdyaXRlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGVuYWJsZXdyaXRlCis8L1NjcmVlbj4KKworPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IGlzIHVzZWQgdG8gcmVvcGVuIHRoZSBkZXZpY2Ugd2l0aCByZWFkLXdyaXRlIGFjY2Vzcy4KK1doZW4gZmlyc3QgcnVubmluZyBFWFQyRUQsIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGluIHJlYWQtb25seSBtb2RlLCBhbmQgYW4KK2V4cGxpY2l0IDxDb21tYW5kPmVuYWJsZXdyaXRlPC9Db21tYW5kPiBpcyByZXF1aXJlZCBmb3Igd3JpdGUgYWNjZXNzLgorPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+IHdpbGwgZmFpbCBpZiB3cml0ZSBhY2Nlc3MgaXMgZGlzYWJsZWQgZnJvbSB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBieSB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5BbGxvd0NoYW5nZXMgb2ZmPC9MaXRlcmFsPiBjb25maWd1cmF0aW9uIG9wdGlvbi4KK0V2ZW4gYWZ0ZXIgPENvbW1hbmQ+ZW5hYmxld3JpdGU8L0NvbW1hbmQ+LCBhbiBleHBsaWNpdCA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+CitpcyByZXF1aXJlZCB0byBhY3R1YWxseSB3cml0ZSB0aGUgbmV3IGRhdGEgdG8gdGhlIGRpc2suCitXaGVuIGZpbmlzaGluZyB3aXRoIGNoYW5naW5nLCBhIDxDb21tYW5kPmRpc2FibGV3cml0ZTwvQ29tbWFuZD4gaXMgcmVjb21tZW5kZWQgZm9yIHNhZmV0eS4KK0Nyb3NzIHJlZmVyZW5jZSBzZWN0aW9uIDxYUmVmIExpbmtFbmQ9ImVuYWJsZXdyaXRlLXJlZiI+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+aGVscDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBoZWxwIFtjb21tYW5kXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5oZWxwPC9Db21tYW5kPiBjb21tYW5kIGlzIGRlc2NyaWJlZCBhdCBzZWN0aW9uIDxYUmVmIExpbmtFbmQ9ImhlbHAtcmVmIj4uIAorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9Im5leHQtcmVmIj4KKzxUaXRsZT5uZXh0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG5leHQgW251bWJlcl0KKzwvU2NyZWVuPgorCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSA8RW1waGFzaXM+Z2VuZXJhbCBjb21tYW5kPC9FbXBoYXNpcz4gPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4uIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+CitpcyBvdmVycmlkZGVuIGJ5IHNldmVyYWwgdHlwZXMgaW4gRVhUMkVELCB0byBwcm92aWRlIGZpbmUtdHVuZWQKK2Z1bmN0aW9uYWxpdHkuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+bmV4dCBnZW5lcmFsIGNvbW1hbmQ8L0xpdGVyYWw+IGJlaGF2aW9yIGlzIGRlcGVuZGVkIG9uIHdoZXRoZXIgeW91IGFyZSBlZGl0aW5nIGEKK3NwZWNpZmljIG9iamVjdCwgb3Igbm9uZS4KKzwvUGFyYT4KKworPFBhcmE+CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIHRoZSBjYXNlIHdoZXJlIFR5cGUgaXMgPExpdGVyYWwgcmVtYXA9InR0Ij5ub25lPC9MaXRlcmFsPiAoVGhlIGN1cnJlbnQgdHlwZSBpcyBzaG93ZWQKK29uIHRoZSBzdGF0dXMgd2luZG93IGJ5IHRoZSA8Q29tbWFuZD5zaG93PC9Db21tYW5kPiBjb21tYW5kKSwgPExpdGVyYWwgcmVtYXA9InR0Ij5uZXh0PC9MaXRlcmFsPgorcGFzc2VzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBieXRlcyBpbiB0aGUgY3VycmVudCBlZGl0ZWQgYmxvY2suCitJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgbm90IHNwZWNpZmllZCwgPEVtcGhhc2lzPm51bWJlcj0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIAlJbiB0aGUgY2FzZSB3aGVyZSBUeXBlIGlzIGRlZmluZWQsIHRoZSA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBjb21tYW5kcyBhc3N1bWVzCit0aGF0IHlvdSBhcmUgZWRpdGluZyBhbiBhcnJheSBvZiBvYmplY3RzIG9mIHRoYXQgdHlwZSwgYW5kIHRoZQorPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIGp1c3QgcGFzcyB0byB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgYXJyYXkuCitJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgZGVmaW5lZCwgaXQgd2lsbCBwYXNzIDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBlbnRyaWVzCithaGVhZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0MiBpZD0icGdkbi1yZWYiPgorPFRpdGxlPnBnZG48L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcGdkbgorPC9TY3JlZW4+CisKK1VzdWFsbHkgdGhlIGVkaXRlZCBkYXRhIGRvZXNuJ3QgZml0IGludG8gdGhlIHZpc2libGUgbWFpbiB3aW5kb3cuIEluIHRoaXMKK2Nhc2UsIHRoZSBzdGF0dXMgd2luZG93IHdpbGwgaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBtb3JlIHRvIHNlZSAiYmVsb3ciIGJ5Cit0aGUgbWVzc2FnZSA8TGl0ZXJhbCByZW1hcD0idHQiPlBhZ2UgeCBvZiB5PC9MaXRlcmFsPi4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSA8RW1waGFzaXM+eTwvRW1waGFzaXM+IHBhZ2VzCit0b3RhbCwgYW5kIHlvdSBhcmUgY3VycmVudGx5IHZpZXdpbmcgdGhlIDxFbXBoYXNpcz54PC9FbXBoYXNpcz4gcGFnZS4gV2l0aCB0aGUgPENvbW1hbmQ+cGdkbjwvQ29tbWFuZD4KK2NvbW1hbmQsIHlvdSBjYW4gcGFzcyB0byB0aGUgbmV4dCBhdmFpbGFibGUgcGFnZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnBndXA8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcGd1cAorPC9TY3JlZW4+CisKKzwvUGFyYT4KKworPFBhcmE+Cis8Q29tbWFuZD5wZ3VwPC9Db21tYW5kPiBpcyB0aGUgb3Bwb3NpdGUgb2YgPENvbW1hbmQ+cGdkbjwvQ29tbWFuZD4gLSBJdCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzCitwYWdlLiBDcm9zcyByZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJwZ2RuLXJlZiI+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+cHJldjwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBwcmV2IFtudW1iZXJdCis8L1NjcmVlbj4KKworPC9QYXJhPgorCis8UGFyYT4KKzxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGlzIHRoZSBvcHBvc2l0ZSBvZiA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPi4gQ3Jvc3MgcmVmZXJlbmNlIHNlY3Rpb24KKzxYUmVmIExpbmtFbmQ9Im5leHQtcmVmIj4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0MiBpZD0icmVjYWxsLXJlZiI+Cis8VGl0bGU+cmVjYWxsPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHJlY2FsbCBvYmplY3QKKzwvU2NyZWVuPgorCis8Q29tbWFuZD5yZWNhbGw8L0NvbW1hbmQ+IGlzIHRoZSBvcHBvc2l0ZSBvZiA8Q29tbWFuZD5yZW1lbWJlcjwvQ29tbWFuZD4uIEl0IHdpbGwgcGxhY2UgeW91IGF0IHRoZQorcGxhY2UgeW91IHdoZXJlIHdoZW4gc2F2aW5nIHRoZSBvYmplY3QgcG9zaXRpb24gYW5kIHR5cGUgaW5mb3JtYXRpb24uIENyb3NzCityZWZlcmVuY2Ugc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJyZW1lbWJlci1yZWYiPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnJlZHJhdzwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiByZWRyYXcKKzwvU2NyZWVuPgorCitTb21ldGltZXMgdGhlIHNjcmVlbiBkaXNwbGF5IGdldHMgY29ycnVwdGVkLiBJIHN0aWxsIGhhdmUgcHJvYmxlbXMgd2l0aAordGhpcy4gVGhlIDxDb21tYW5kPnJlZHJhdzwvQ29tbWFuZD4gY29tbWFuZCBzaW1wbHkgcmVkcmF3cyB0aGUgZW50aXJlIGRpc3BsYXkgc2NyZWVuLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDIgaWQ9InJlbWVtYmVyLXJlZiI+Cis8VGl0bGU+cmVtZW1iZXI8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcmVtZW1iZXIgb2JqZWN0Cis8L1NjcmVlbj4KKworRVhUMkVEIHByb3ZpZGVzIHlvdSA8TGl0ZXJhbCByZW1hcD0idHQiPm1lbW9yeTwvTGl0ZXJhbD4gb2Ygb2JqZWN0czsgV2hpbGUgZWRpdGluZywgeW91IG1heSByZWFjaCBhbgorb2JqZWN0IHdoaWNoIHlvdSB3aWxsIGxpa2UgdG8gcmV0dXJuIHRvIGxhdGVyLiBUaGUgPENvbW1hbmQ+cmVtZW1iZXI8L0NvbW1hbmQ+IGNvbW1hbmQKK3dpbGwgc3RvcmUgaW4gbWVtb3J5IHRoZSBjdXJyZW50IHBsYWNlIGFuZCB0eXBlIG9mIHRoZSBvYmplY3QuIFlvdSBjYW4KK3JldHVybiB0byB0aGUgb2JqZWN0IGJ5IHVzaW5nIHRoZSA8Q29tbWFuZD5yZWNhbGw8L0NvbW1hbmQ+IGNvbW1hbmQuIENyb3NzIHJlZmVyZW5jZQorc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJyZWNhbGwtcmVmIj4uCis8L1BhcmE+CisKKzxQYXJhPgorPExpdGVyYWwgcmVtYXA9InR0Ij5Ob3RlOjwvTGl0ZXJhbD4KKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJV2hlbiByZW1lbWJlcmluZyBhIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZmlsZTwvTGl0ZXJhbD4gb3IgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcmVjdG9yeTwvTGl0ZXJhbD4sIHRoZQorY29ycmVzcG9uZGluZyBpbm9kZSB3aWxsIGJlIHNhdmVkIGluIG1lbW9yeS4gVGhlIGJhc2ljIHJlYXNvbiBpcyB0aGF0Cit0aGUgaW5vZGUgaXMgZXNzZW50aWFsIGZvciBmaW5kaW5nIHRoZSBibG9ja3Mgb2YgdGhlIGZpbGUgb3IgdGhlCitkaXJlY3RvcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2V0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldCBbdGV4dCB8fCBoZXhdIGFyZzEgW2FyZzIgYXJnMyAuLi5dCisKK29yCisKK1N5bnRheDogc2V0IHZhcmlhYmxlPXZhbHVlCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNldDwvQ29tbWFuZD4gY29tbWFuZCBpcyB1c2VkIHRvIG1vZGlmeSB0aGUgY3VycmVudCBkYXRhLgorVGhlIDxDb21tYW5kPnNldCBnZW5lcmFsIGNvbW1hbmQ8L0NvbW1hbmQ+IGJlaGF2aW9yIGlzIGRlcGVuZGVkIG9uIHdoZXRoZXIgeW91IGFyZSBlZGl0aW5nIGEKK3NwZWNpZmljIG9iamVjdCwgb3Igbm9uZS4KKzwvUGFyYT4KKworPFBhcmE+CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIHRoZSBjYXNlIHdoZXJlIFR5cGUgaXMgPENvbW1hbmQ+bm9uZTwvQ29tbWFuZD4sIHRoZSBmaXJzdCBzeW50YXggc2hvdWxkIGJlCit1c2VkLiBUaGUgc2V0IGNvbW1hbmQgYWZmZWN0cyB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgY3VycmVudCAKK2hpZ2hsaWdodGVkIHBvc2l0aW9uIGluIHRoZSBlZGl0ZWQgYmxvY2suCisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdoZW4gdXNpbmcgdGhlIDxDb21tYW5kPnNldCBoZXg8L0NvbW1hbmQ+IGNvbW1hbmQsIGEgbGlzdCBvZgoraGV4YWRlY2ltYWwgYnl0ZXMgc2hvdWxkIGZvbGxvdy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVdoZW4gdXNpbmcgdGhlIDxDb21tYW5kPnNldCB0ZXh0PC9Db21tYW5kPiBjb21tYW5kLCBpdCBzaG91bGQgYmUgZm9sbG93ZWQKK2J5IGEgdGV4dCBzdHJpbmcuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworRXhhbXBsZXM6CisKKzxTY3JlZW4+CisJc2V0IGhleCAwOSAwYSAwYiAwYyAwZCAwZSAwZgorCXNldCB0ZXh0IExpbnV4IGlzIGp1c3QgZ3JlYXQgIQorCQorPC9TY3JlZW4+CisKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorIAlJbiB0aGUgY2FzZSB3aGVyZSBUeXBlIGlzIGRlZmluZWQsIHRoZSBzZWNvbmQgc3ludGF4IHNob3VsZCBiZSB1c2VkLgorVGhlIHNldCBjb21tYW5kcyBqdXN0IHNldHMgdGhlIHZhcmlhYmxlIDxFbXBoYXNpcz52YXJpYWJsZTwvRW1waGFzaXM+IHdpdGggdGhlCit2YWx1ZSA8RW1waGFzaXM+dmFsdWU8L0VtcGhhc2lzPi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCitJbiBhbnkgY2FzZSwgdGhlIGRhdGEgaXMgb25seSBjaGFuZ2VkIGluIG1lbW9yeS4gRm9yIGFuIGFjdHVhbCB1cGRhdGUgdG8gdGhlCitkaXNrLCB1c2UgdGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnNldGRldmljZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzZXRkZXZpY2UgZGV2aWNlCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNldGRldmljZTwvQ29tbWFuZD4gY29tbWFuZCBpcyBkZXNjcmliZWQgYXQgc2VjdGlvbiA8WFJlZiBMaW5rRW5kPSJzZXRkZXZpY2UtcmVmIj4uIAorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2V0b2Zmc2V0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldG9mZnNldCBbYmxvY2sgfHwgdHlwZV0gWyt8LV1vZmZzZXQKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+c2V0b2Zmc2V0PC9Db21tYW5kPiBjb21tYW5kIGlzIHVzZWQgdG8gbW92ZSBhc3luY2hyb25pY2FsbHkgaW5zaWRlIHRoZSBmaWxlCitzeXN0ZW0uIEl0IGlzIGNvbnNpZGVyZWQgYSBsb3cgbGV2ZWwgY29tbWFuZCwgYW5kIHVzdWFsbHkgc2hvdWxkIG5vdCBiZSB1c2VkCit3aGVuIGVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtLCBzaW1wbHkgYmVjYXVzZSBtb3ZlbWVudCBpcyBiZXR0ZXIKK3V0aWxpemVkIHRocm91Z2ggdGhlIHNwZWNpZmljIGV4dDIgY29tbWFuZHMuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxDb21tYW5kPm9mZnNldDwvQ29tbWFuZD4gaXMgaW4gYnl0ZXMsIGFuZCBtZWFud2hpbGUgc2hvdWxkIGJlIHBvc2l0aXZlIGFuZCBzbWFsbGVyCit0aGFuIDJHQi4KKzwvUGFyYT4KKworPFBhcmE+CitVc2Ugb2YgdGhlIDxDb21tYW5kPmJsb2NrPC9Db21tYW5kPiBtb2RpZmllciBjaGFuZ2VzIHRoZSBjb3VudGluZyB1bml0IHRvIGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK1VzZSBvZiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij4rIG9yIC08L0xpdGVyYWw+IG1vZGlmaWVycyBzaWduYWxzIHRoYXQgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0bwordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L1BhcmE+CisKKzxQYXJhPgordXNlIG9mIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGU8L0xpdGVyYWw+IG1vZGlmaWVyIGlzIGFsbG93ZWQgb25seSB3aXRoIHJlbGF0aXZlIG9mZnNldC4gVGhpcworbW9kaWZpZXIgd2lsbCBtdWx0aXBseSB0aGUgb2Zmc2V0IGJ5IHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHR5cGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5zZXR0eXBlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldHR5cGUgdHlwZSB8fCBbbm9uZSB8IGhleF0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+c2V0dHlwZTwvQ29tbWFuZD4gY29tbWFuZCBpcyB1c2VkIHRvIG1vdmUgYXBwbHkgdGhlIG9iamVjdCBkZWZpbml0aW9ucyBvZgordGhlIHR5cGUgPEVtcGhhc2lzPnR5cGU8L0VtcGhhc2lzPiBvbiB0aGUgY3VycmVudCBwb3NpdGlvbi4gSXQgaXMgY29uc2lkZXJlZCBhIGxvdyBsZXZlbAorY29tbWFuZCBhbmQgdXN1YWxseSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBlZGl0aW5nIGFuIGV4dDIgZmlsZXN5c3RlbSBzaW5jZQorRVhUMkVEIHByb3ZpZGVzIGJldHRlciB0b29scy4gSXQgaXMgb2YtY291cnNlIHZlcnkgdXNlZnVsIHdoZW4gZWRpdGluZyBhCitub24tZXh0MiBmaWxlc3lzdGVtIGFuZCB1c2luZyB1c2VyLWRlZmluZWQgb2JqZWN0cy4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIDxFbXBoYXNpcz50eXBlPC9FbXBoYXNpcz4gaXMgPEVtcGhhc2lzPmhleDwvRW1waGFzaXM+IG9yIDxFbXBoYXNpcz5ub25lPC9FbXBoYXNpcz4sIHRoZSBkYXRhIHdpbGwgYmUgZGlzcGxheWVkIGFzCithIGhleCBhbmQgdGV4dCBkdW1wLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+c2hvdzwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzaG93Cis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnNob3c8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBzaG93IHRoZSBkYXRhIG9mIHRoZSBjdXJyZW50IG9iamVjdCBhdCB0aGUKK2N1cnJlbnQgcG9zaXRpb24gb24gdGhlIG1haW4gZGlzcGxheSB3aW5kb3cuIEl0IHdpbGwgYWxzbyB1cGRhdGUgdGhlIHN0YXR1cword2luZG93IHdpdGggdHlwZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UKKzxDb21tYW5kPnBnZG48L0NvbW1hbmQ+IGFuZCA8Q29tbWFuZD5wZ3VwPC9Db21tYW5kPiB0byB2aWV3IHRoZSBlbnRpcmUgZGF0YS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPndyaXRlZGF0YTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiB3cml0ZWRhdGEKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgdXBkYXRlIHRoZSBkaXNrIHdpdGggdGhlIG9iamVjdCBkYXRhIHRoYXQKK2lzIGN1cnJlbnRseSBpbiBtZW1vcnkuIFRoaXMgaXMgdGhlIHBvaW50IGF0IHdoaWNoIGFjdHVhbCBjaGFuZ2UgaXMgbWFkZSB0bwordGhlIGZpbGVzeXN0ZW0uIFdpdGhvdXQgdGhpcyBjb21tYW5kLCB0aGUgZWRpdGVkIGRhdGEgd2lsbCBub3QgaGF2ZSBhbnkKK2VmZmVjdC4gV3JpdGUgYWNjZXNzIHNob3VsZCBiZSBhbGxvd2VkIGZvciBhIHN1Y2Nlc3NmdWwgdXBkYXRlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+RWRpdGluZyBhbiBleHQyIGZpbGVzeXN0ZW08L1RpdGxlPgorCis8UGFyYT4KK0luIG9yZGVyIHRvIGVkaXQgYW4gZXh0MiBmaWxlc3lzdGVtLCB5b3Ugc2hvdWxkLCBvZiBjb3Vyc2UsIGtub3cgdGhlIHN0cnVjdHVyZQorb2YgdGhlIGV4dDIgZmlsZXN5c3RlbS4gSWYgeW91IGZlZWwgdGhhdCB5b3UgbGFjayBzb21lIGtub3dsZWRnZSBpbiB0aGlzCithcmVhLCBJIHN1Z2dlc3QgdGhhdCB5b3UgZG8gc29tZSBvZiB0aGUgZm9sbG93aW5nOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlSZWFkIHRoZSBzdXBwbGllZCBleHQyIHRlY2huaWNhbCBpbmZvcm1hdGlvbi4gSSB0cmllZCB0byBzdW1tYXJpemUKK3RoZSBiYXNpYyBpbmZvcm1hdGlvbiB3aGljaCBpcyBuZWVkZWQgdG8gZ2V0IHlvdSBzdGFydGVkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJR2V0IHRoZSBzbGlkZXMgdGhhdCBSZW15IENhcmQgKFRoZSBhdXRob3Igb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSkKK3ByZXBhcmVkIGNvbmNlcm5pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVJlYWQgdGhlIGtlcm5lbCBzb3VyY2VzLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKK0F0IHRoaXMgcG9pbnQsIHlvdSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zOgorPExpdGVyYWwgcmVtYXA9InR0Ij5ibG9jaywgaW5vZGUsIHN1cGVyYmxvY2ssIGJsb2NrIGdyb3VwcywgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAsIGlub2RlCithbGxvY2F0aW9uIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvcnMsIGZpbGUsIGRpcmVjdG9yeS48L0xpdGVyYWw+TW9zdCBvZiB0aGUgYWJvdmUKK2FyZSBvYmplY3RzIGluIEVYVDJFRC4KKzwvUGFyYT4KKworPFBhcmE+CitXaGVuIGVkaXRpbmcgYW4gZXh0MiBmaWxlc3lzdGVtIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgZXh0Mgorc3BlY2lmaWMgY29tbWFuZHMsIHJhdGhlciB0aGVuIHRoZSBnZW5lcmFsIGNvbW1hbmRzICA8Q29tbWFuZD5zZXRvZmZzZXQ8L0NvbW1hbmQ+IGFuZAorPENvbW1hbmQ+c2V0dHlwZTwvQ29tbWFuZD4sIG1haW5seSBiZWNhdXNlOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUluIG1vc3QgY2FzZXMgaXQgd2lsbCBiZSB1bnJlbGlhYmxlLCBhbmQgd2lsbCBkaXNwbGF5IGluY29ycmVjdAoraW5mb3JtYXRpb24uCisKK1NvbWV0aW1lcyBpbiBvcmRlciB0byBlZGl0IGFuIG9iamVjdCwgRVhUMkVEIG5lZWRzIHRoZSBpbmZvcm1hdGlvbgorb2Ygc29tZSBvdGhlciByZWxhdGVkIG9iamVjdHMuIEZvciBleGFtcGxlLCB3aGVuIGVkaXRpbmcgYQorZGlyZWN0b3J5LCBFWFQyRUQgbmVlZHMgYWNjZXNzIHRvIHRoZSBpbm9kZSBvZiB0aGUgZWRpdGVkIGRpcmVjdG9yeS4KK1NpbXBseSBzZXR0aW5nIHRoZSB0eXBlIHRvIGEgZGlyZWN0b3J5IDxMaXRlcmFsIHJlbWFwPSJ0dCI+d2lsbCBiZSB1bnJlbGlhYmxlPC9MaXRlcmFsPiwKK3NpbmNlIHRoZSBvYmplY3QgYXNzdW1lcyB0aGF0IHlvdSBwYXNzZWQgdGhyb3VnaCBpdHMgaW5vZGUgdG8gcmVhY2gKK2l0LCBhbmQgZXhwZWN0cyB0aGlzIGluZm9ybWF0aW9uLCB3aGljaCBpc24ndCBpbml0aWFsaXplZCBpZiB5b3UKK2RpcmVjdGx5IHNldCB0aGUgdHlwZSB0byBhIGRpcmVjdG9yeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCUVYVDJFRCBvZmZlcnMgZmFyIGJldHRlciB0b29scyBmb3IgaGFuZGxpbmcgdGhlIGV4dDIgZmlsZXN5c3RlbQordXNpbmcgdGhlIGV4dDIgc3BlY2lmaWMgY29tbWFuZHMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzxTZWN0MT4KKzxUaXRsZT5leHQyIGdlbmVyYWwgY29tbWFuZHM8L1RpdGxlPgorCis8UGFyYT4KK1RoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDIgZ2VuZXJhbCBjb21tYW5kczwvTGl0ZXJhbD4gYXJlIGF2YWlsYWJsZSBvbmx5IHdoZW4geW91IGFyZSBlZGl0aW5nIGFuCitleHQyIGZpbGVzeXN0ZW0uIFRoZXkgYXJlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+Z2VuZXJhbDwvTGl0ZXJhbD4gaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBhcmUgbm90CitzcGVjaWZpYyB0byBzb21lIG9iamVjdCwgYW5kIGNhbiBiZSBpbnZva2VkIGFueXRpbWUuCis8L1BhcmE+CisKKzxTZWN0MiBpZD0iZ2VuZXJhbC1zdXBlcmJsb2NrIj4KKzxUaXRsZT5zdXBlcjwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBzdXBlcgorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5zdXBlcjwvQ29tbWFuZD4gY29tbWFuZCB3aWxsICJicmluZyB5b3UiIHRvIHRoZSBtYWluIHN1cGVyYmxvY2sgY29weS4gSXQKK3dpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIG9iamVjdCB0eXBlIHRvIDxMaXRlcmFsIHJlbWFwPSJ0dCI+ZXh0MiZsb3diYXI7c3VwZXImbG93YmFyO2Jsb2NrPC9MaXRlcmFsPi4gVGhlbiB5b3UKK3dpbGwgYmUgYWJsZSB0byB2aWV3IGFuZCBlZGl0IHRoZSBzdXBlcmJsb2NrLiBXaGVuIHlvdSBhcmUgaW4gdGhlCitzdXBlcmJsb2NrLCBvdGhlciBjb21tYW5kcyB3aWxsIGJlIGF2YWlsYWJsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmdyb3VwPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGdyb3VwIFtudW1iZXJdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmdyb3VwPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgImJyaW5nIHlvdSIgdG8gdGhlIG1haW4gY29weSBvZiB0aGUKKzxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBncm91cCBkZXNjcmlwdG9yLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBvYmplY3QgdHlwZSB0bworPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyJmxvd2Jhcjtncm91cCZsb3diYXI7ZGVzYzwvTGl0ZXJhbD4uIFRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB2aWV3IGFuZCBlZGl0IHRoZSBncm91cAorZGVzY3JpcHRvciBlbnRyeS4gV2hlbiB5b3UgYXJlIHRoZXJlLCBvdGhlciBjb21tYW5kcyB3aWxsIGJlIGF2YWlsYWJsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmNkPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGNkIHBhdGgKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+Y2Q8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBsZXQgeW91IHRyYXZlbCBpbiB0aGUgZmlsZXN5c3RlbSBpbiB0aGUgbmljZSB3YXkKK3RoYXQgdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSB3b3VsZCBoYXZlIGxldCB5b3UuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIDxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kIGlzIGEgY29tcGxpY2F0ZWQgY29tbWFuZC4gQWx0aG91Z2ggaXQgbWF5IHNvdW5kCitzaW1wbGUgYXQgZmlyc3QsIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgdHlwaWNhbCBjZCByZXF1aXJlcyBwYXNzaW5nIHRocm91Z2gKK3RoZSBncm91cCBkZXNjcmlwdG9ycywgaW5vZGVzLCBkaXJlY3RvcnkgZW50cmllcywgZXRjLiBGb3IgZXhhbXBsZToKKzwvUGFyYT4KKworPFBhcmE+CitUaGUgaW5ub2NlbnQgY2QgL3VzciBjb21tYW5kIGNhbiBiZSBkb25lIGJ5IHVzaW5nIG1vcmUgcHJpbWl0aXZlCitFWFQyRUQgY29tbWFuZHMgaW4gdGhlIGZvbGxvd2luZyB3YXkgKEl0IGlzIGltcGxlbWVudGVkIGV4YWN0bHkgdGhpcyB3YXkpOgorCis8T3JkZXJlZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPmdyb3VwIDA8L0NvbW1hbmQ+IHRvIGdvIHRvIHRoZSBmaXJzdCBncm91cCBkZXNjcmlwdG9yLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+aW5vZGU8L0NvbW1hbmQ+IHRvIGdldCB0byB0aGUgQmFkIGJsb2NrcyBpbm9kZS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IHRvIHBhc3MgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IGlub2RlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+ZGlyPC9Db21tYW5kPiB0byBzZWUgdGhlIGRpcmVjdG9yeS4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVVzaW5nIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IHVudGlsIHdlIGZpbmQgdGhlIGRpcmVjdG9yeSB1c3IuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5mb2xsb3dpbm9kZTwvQ29tbWFuZD4gdG8gcGFzcyB0byB0aGUgaW5vZGUgY29ycmVzcG9uZGluZyB0byB1c3IuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5kaXI8L0NvbW1hbmQ+IHRvIHNlZSB0aGUgZGlyZWN0b3J5IG9mIC91c3IuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L09yZGVyZWRMaXN0PgorCitBbmQgdGhvc2UgY29tbWFuZHMgYXJlbid0IHRoYXQgcHJpbWl0aXZlOyBGb3IgZXhhbXBsZSwgdGhlIHRyYWNpbmcgb2YgdGhlCitibG9ja3Mgd2hpY2ggYmVsb25nIHRvIHRoZSByb290IGRpcmVjdG9yeSBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGRpcgorY29tbWFuZCBiZWhpbmQgdGhlIHNjZW5lcywgYW5kIHRoZSBmb2xsb3dpbm9kZSBjb21tYW5kIHdpbGwgYXV0b21hdGljYWxseQorInJ1biIgdG8gdGhlIGNvcnJlY3QgZ3JvdXAgZGVzY3JpcHRvciBpbiBvcmRlciB0byBmaW5kIHRoZSByZXF1aXJlZCBpbm9kZS4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgcGF0aCB0byB0aGUgPENvbW1hbmQ+Z2VuZXJhbCBjZDwvQ29tbWFuZD4gY29tbWFuZCBuZWVkcyB0byBiZSBhIGZ1bGwgcGF0aG5hbWUgLQorU3RhcnRpbmcgZnJvbSA8RmlsZW5hbWU+LzwvRmlsZW5hbWU+LiBUaGUgPENvbW1hbmQ+Y2Q8L0NvbW1hbmQ+IGNvbW1hbmQgc3RvcHMgYXQgdGhlIGxhc3QgcmVhY2hhYmxlCitwb2ludCwgd2hpY2ggY2FuIGJlIGEgZGlyZWN0b3J5IGVudHJ5LCBpbiB3aGljaCBjYXNlIHRoZSB0eXBlIHdpbGwgYmUgc2V0IHRvCis8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4sIG9yIGFuIGlub2RlLCBpbiB3aGljaCBjYXNlIHRoZSB0eXBlIHdpbGwgYmUgc2V0IHRvCis8TGl0ZXJhbCByZW1hcD0idHQiPmV4dDImbG93YmFyO2lub2RlPC9MaXRlcmFsPi4gU3ltYm9saWMgbGlua3MgKE9ubHkgZmFzdCBzeW1ib2xpYyBsaW5rcywgbWVhbndoaWxlKSBhcmUKK2F1dG9tYXRpY2FsbHkgZm9sbG93ZWQgKGlmIHRoZXkgYXJlIG5vdCBhY3Jvc3MgZmlsZXN5c3RlbXMsIG9mLWNvdXJzZSkuIElmCit0aGUgdHlwZSBpcyBzZXQgdG8gPExpdGVyYWwgcmVtYXA9InR0Ij5kaXI8L0xpdGVyYWw+LCB5b3UgY2FuIHVzZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIAorImN1cnJlbnQgZGlyZWN0b3J5Ii4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBzdXBlcmJsb2NrPC9UaXRsZT4KKworPFBhcmE+CitUaGUgc3VwZXJibG9jayBjYW4gYWx3YXlzIGJlIHJlYWNoZWQgYnkgdGhlIGV4dDIgZ2VuZXJhbCBjb21tYW5kCis8Q29tbWFuZD5zdXBlcjwvQ29tbWFuZD4uIENyb3NzIHJlZmVyZW5jZSBzZWN0aW9uIDxYUmVmIExpbmtFbmQ9ImdlbmVyYWwtc3VwZXJibG9jayI+LgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdGF0dXMgd2luZG93IHdpbGwgc2hvdyB5b3Ugd2hpY2ggY29weSBvZiB0aGUgc3VwZXJibG9jayBjb3BpZXMgeW91IGFyZQorY3VycmVudGx5IGVkaXRpbmcuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG1haW4gZGF0YSB3aW5kb3cgd2lsbCBzaG93IHlvdSB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzIHN1cGVyYmxvY2sKK3ZhcmlhYmxlcywgYWxvbmcgd2l0aCBzb21lIGludGVycHJldGF0aW9uIG9mIHRoZSB2YWx1ZXMuCis8L1BhcmE+CisKKzxQYXJhPgorRGF0YSBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSA8Q29tbWFuZD5zZXQ8L0NvbW1hbmQ+IGFuZCA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmRzLgorCis8U2NyZWVuPgorRm9yIGV4YW1wbGUsIHNldCBzX3JfYmxvY2tzX2NvdW50PTE0MDAgd2lsbCByZXNlcnZlIDE0MDAgYmxvY2tzIGZvciByb290LgorPC9TY3JlZW4+CisKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPmdvY29weTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBnb2NvcHkgbnVtYmVyCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmdvY29weTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsICJicmluZyB5b3UiIHRvIHRoZSBiYWNrdXAgY29weSA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4KK29mIHRoZSBzdXBlcmJsb2NrIGNvcGllcy4gPENvbW1hbmQ+Z29jb3B5IDA8L0NvbW1hbmQ+LCBmb3IgZXhhbXBsZSwgd2lsbCBicmluZyB5b3UgdG8KK3RoZSBtYWluIGNvcHkuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5zZXRhY3RpdmVjb3B5PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHNldGFjdGl2ZWNvcHkKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+c2V0YWN0aXZlY29weTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50CitzdXBlcmJsb2NrIGNvcHkgb250byB0aGUgY29udGVudHMgb2YgdGhlIG1haW4gY29weS4gSXQgd2lsbCBhbHNvIHN3aXRjaCB0bworZWRpdGluZyBvZiB0aGUgbWFpbiBjb3B5LiBObyBhY3R1YWwgZGF0YSBpcyB3cml0dGVuIHRvIGRpc2ssIG9mLWNvdXJzZSwKK3VudGlsIHlvdSBpc3N1ZSB0aGUgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPiBjb21tYW5kLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGdyb3VwIGRlc2NyaXB0b3JzPC9UaXRsZT4KKworPFBhcmE+CitUaGUgZ3JvdXAgZGVzY3JpcHRvcnMgY2FuIGJlIGVkaXRlZCBieSB0aGUgPENvbW1hbmQ+Z3JvdXA8L0NvbW1hbmQ+IGNvbW1hbmQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHN0YXR1cyB3aW5kb3cgd2lsbCBpbmRpY2F0ZSB0aGUgY3VycmVudCBncm91cCBkZXNjcmlwdG9yLCB0aGUgdG90YWwKK251bWJlciBvZiBncm91cCBkZXNjcmlwdG9ycyAoYW5kIGhlbmNlIG9mIGdyb3VwIGJsb2NrcyksIGFuZCB0aGUgYmFja3VwIGNvcHkKK251bWJlci4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgbWFpbiBkYXRhIHdpbmRvdyB3aWxsIGp1c3Qgc2hvdyB5b3UgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyB2YXJpYWJsZXMuCis8L1BhcmE+CisKKzxQYXJhPgorQmFzaWNhbGx5LCB5b3UgY2FuIHVzZSB0aGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gYW5kIDxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGNvbW1hbmRzLCBhbG9uZyB3aXRoIHRoZQorPENvbW1hbmQ+c2V0PC9Db21tYW5kPiBjb21tYW5kLCB0byBtb2RpZnkgdGhlIGdyb3VwIGRlc2NyaXB0b3JzLgorPC9QYXJhPgorCis8UGFyYT4KK1RoZSBncm91cCBkZXNjcmlwdG9ycyBvYmplY3QgaXMgYSBqdW5jdGlvbiwgZnJvbSB3aGljaCB5b3UgY2FuIHJlYWNoOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgaW5vZGUgdGFibGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sgZ3JvdXAgKHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlPC9MaXRlcmFsPgorY29tbWFuZCkKKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBibG9jayBhbGxvY2F0aW9uIGJpdG1hcCAodGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2tiaXRtYXA8L0xpdGVyYWw+IGNvbW1hbmQpCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXAgKHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmlub2RlYml0bWFwPC9MaXRlcmFsPiBjb21tYW5kKQorPC9QYXJhPgorPC9MaXN0SXRlbT4KKworPC9JdGVtaXplZExpc3Q+CisKKzwvUGFyYT4KKworPFNlY3QyPgorPFRpdGxlPmJsb2NrYml0bWFwPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGJsb2NrYml0bWFwCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmJsb2NrYml0bWFwPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbGV0IHlvdSBlZGl0IHRoZSBibG9jayBiaXRtYXAgYWxsb2NhdGlvbgorYmxvY2sgb2YgdGhlIGN1cnJlbnQgZ3JvdXAgYmxvY2suCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5lbnRyeTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBlbnRyeSBudW1iZXIKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZW50cnk8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBtb3ZlIHlvdSB0byB0aGUgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGdyb3VwIGRlc2NyaXB0b3IgaW4gdGhlCitncm91cCBkZXNjcmlwdG9ycyB0YWJsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmlub2RlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGlub2RlCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmlub2RlPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB5b3UgdG8gdGhlIGZpcnN0IGlub2RlIGluIHRoZSBjdXJyZW50Citncm91cCBibG9jay4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmlub2RlYml0bWFwPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGlub2RlYml0bWFwCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmlub2RlYml0bWFwPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbGV0IHlvdSBlZGl0IHRoZSBpbm9kZSBiaXRtYXAgYWxsb2NhdGlvbgorYmxvY2sgb2YgdGhlIGN1cnJlbnQgZ3JvdXAgYmxvY2suCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5uZXh0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG5leHQgW251bWJlcl0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGdyb3VwCitkZXNjcmlwdG9yLiBJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgb21pdHRlZCwgPEVtcGhhc2lzPm51bWJlcj0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnByZXY8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcHJldiBbbnVtYmVyXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgcHJldmlvdXMgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGdyb3VwCitkZXNjcmlwdG9yLiBJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgb21pdHRlZCwgPEVtcGhhc2lzPm51bWJlcj0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnNldGFjdGl2ZWNvcHk8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogc2V0YWN0aXZlY29weQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5zZXRhY3RpdmVjb3B5PC9Db21tYW5kPiBjb21tYW5kIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgZ3JvdXAKK2Rlc2NyaXB0b3IsIHRvIGl0cyBtYWluIGNvcHkuIFRoZSB1cGRhdGVkIG1haW4gY29weSB3aWxsIHRoZW4gYmUgc2hvd24uIE5vCithY3R1YWwgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGRpc2sgdW50aWwgeW91IGlzc3VlIHRoZSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+Citjb21tYW5kLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGlub2RlPC9UaXRsZT4KKworPFBhcmE+CitBbiBpbm9kZSBjYW4gYmUgcmVhY2hlZCBieSB0aGUgZm9sbG93aW5nIHR3byB3YXlzOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyA8Q29tbWFuZD5pbm9kZTwvQ29tbWFuZD4gZnJvbSB0aGUgY29ycmVzcG9uZGluZyBncm91cCBkZXNjcmlwdG9yLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVXNpbmcgPENvbW1hbmQ+Zm9sbG93aW5vZGU8L0NvbW1hbmQ+IGZyb20gYSBkaXJlY3RvcnkgZW50cnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlVc2luZyB0aGUgPENvbW1hbmQ+Y2Q8L0NvbW1hbmQ+IGNvbW1hbmQgd2l0aCB0aGUgcGF0aG5hbWUgdG8gdGhlIGZpbGUuCisKK0ZvciBleGFtcGxlLCA8Q29tbWFuZD5jZCAvdXNyL3NyYy9leHQyZWQvZXh0MmVkLmg8L0NvbW1hbmQ+Cis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBzdGF0dXMgd2luZG93IHdpbGwgaW5kaWNhdGU6CisKKzxJdGVtaXplZExpc3Q+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBjdXJyZW50IGdsb2JhbCBpbm9kZSBudW1iZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgdG90YWwgdG90YWwgbnVtYmVyIG9mIGlub2Rlcy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCU9uIHdoaWNoIGJsb2NrIGdyb3VwIHRoZSBpbm9kZSBpcyBhbGxvY2F0ZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgdG90YWwgbnVtYmVyIG9mIGlub2RlcyBpbiB0aGlzIGdyb3VwIGJsb2NrLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGlub2RlIGluIHRoZSBjdXJyZW50IGdyb3VwIGJsb2NrLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIHR5cGUgb2YgdGhlIGlub2RlIChmaWxlLCBkaXJlY3RvcnksIHNwZWNpYWwsIGV0YykuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK1RoZSBtYWluIGRhdGEgd2luZG93LCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBvZiB2YXJpYWJsZXMsIHdpbGwgY29udGFpbgorc29tZSBpbnRlcnByZXRhdGlvbnMgb24gdGhlIHJpZ2h0IHNpZGUuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgdGhlIGlub2RlIGNvcnJlc3BvbmRzIHRvIGEgZmlsZSwgeW91IGNhbiB1c2UgdGhlIDxDb21tYW5kPmZpbGU8L0NvbW1hbmQ+IGNvbW1hbmQgdG8KK2VkaXQgdGhlIGZpbGUuCis8L1BhcmE+CisKKzxQYXJhPgorSWYgdGhlIGlub2RlIGlzIGFuIGlub2RlIG9mIGEgZGlyZWN0b3J5LCB5b3UgY2FuIHVzZSB0aGUgPENvbW1hbmQ+ZGlyPC9Db21tYW5kPiBjb21tYW5kCit0byBlZGl0IHRoZSBkaXJlY3RvcnkuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5kaXI8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZGlyCis8L1NjcmVlbj4KKworSWYgdGhlIGlub2RlIG1vZGUgY29ycmVzcG9uZHMgdG8gYSBkaXJlY3RvcnkgKHNob3duIG9uIHRoZSBzdGF0dXMgd2luZG93KSwKK3lvdSBjYW4gZW50ZXIgZGlyZWN0b3J5IG1vZGUgZWRpdGluZyBieSB1c2luZyA8TGl0ZXJhbCByZW1hcD0idHQiPmRpcjwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5lbnRyeTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBlbnRyeSBudW1iZXIKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZW50cnk8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBtb3ZlIHlvdSB0byB0aGUgPEVtcGhhc2lzPm51bWJlcjwvRW1waGFzaXM+IGlub2RlIGluIHRoZQorY3VycmVudCBpbm9kZSB0YWJsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmZpbGU8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogZmlsZQorPC9TY3JlZW4+CisKK0lmIHRoZSBpbm9kZSBtb2RlIGNvcnJlc3BvbmRzIHRvIGEgZmlsZSAoc2hvd24gb24gdGhlIHN0YXR1cyB3aW5kb3cpLAoreW91IGNhbiBlbnRlciBmaWxlIG1vZGUgZWRpdGluZyBieSB1c2luZyA8Q29tbWFuZD5maWxlPC9Db21tYW5kPi4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmdyb3VwPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGdyb3VwCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmdyb3VwPC9Db21tYW5kPiBjb21tYW5kIGlzIHVzZWQgdG8gZ28gdG8gdGhlIGdyb3VwIGRlc2NyaXB0b3Igb2YgdGhlCitjdXJyZW50IGdyb3VwIGJsb2NrLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+bmV4dDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0IFtudW1iZXJdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBpbm9kZS4KK0lmIDxFbXBoYXNpcz5udW1iZXI8L0VtcGhhc2lzPiBpcyBvbWl0dGVkLCA8RW1waGFzaXM+bnVtYmVyPTE8L0VtcGhhc2lzPiBpcyBhc3N1bWVkLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+cHJldjwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBwcmV2IFtudW1iZXJdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaW5vZGUuCitJZiA8RW1waGFzaXM+bnVtYmVyPC9FbXBoYXNpcz4gaXMgb21pdHRlZCwgPEVtcGhhc2lzPm51bWJlcj0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBmaWxlPC9UaXRsZT4KKworPFBhcmE+CitXaGVuIGVkaXRpbmcgYSBmaWxlLCBFWFQyRUQgb2ZmZXJzIHlvdSBhIGJvdGggYSBjb250aW51b3VzIGFuZCBhIHRydWUKK2ZyYWdtZW50ZWQgdmlldyBvZiB0aGUgZmlsZSAtIFRoZSBmaWxlIGlzIHN0aWxsIHNob3duIGJsb2NrIGJ5IGJsb2NrIHdpdGgKK3RoZSB0cnVlIGJsb2NrIG51bWJlciBhdCBlYWNoIHN0YWdlIGFuZCBFWFQyRUQgb2ZmZXJzIHlvdSBjb21tYW5kcyB3aGljaAorYWxsb3cgeW91IHRvIG1vdmUgYmV0d2VlbiB0aGUgPExpdGVyYWwgcmVtYXA9InR0Ij5maWxlIGJsb2NrczwvTGl0ZXJhbD4sIHdoaWxlIGZpbmRpbmcgdGhlCithbGxvY2F0ZWQgYmxvY2tzIGJ5IHVzaW5nIHRoZSBpbm9kZSBpbmZvcm1hdGlvbiBiZWhpbmQgdGhlIHNjZW5lcy4KKzwvUGFyYT4KKworPFBhcmE+CitBc2lkZSBmcm9tIHRoaXMsIHRoZSBlZGl0aW5nIGlzIGp1c3QgYSA8TGl0ZXJhbCByZW1hcD0idHQiPmhleCBlZGl0aW5nPC9MaXRlcmFsPiAtIFlvdSBtb3ZlIHRoZQorY3Vyc29yIGluIHRoZSBjdXJyZW50IGJsb2NrIG9mIHRoZSBmaWxlIGJ5IHVzaW5nIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGFuZAorPENvbW1hbmQ+cHJldjwvQ29tbWFuZD4sIG1vdmUgYmV0d2VlbiBibG9ja3MgYnkgPENvbW1hbmQ+bmV4dGJsb2NrPC9Db21tYW5kPiBhbmQgPENvbW1hbmQ+cHJldmJsb2NrPC9Db21tYW5kPiwKK2FuZCBtYWtlIGNoYW5nZXMgYnkgdGhlIDxDb21tYW5kPnNldDwvQ29tbWFuZD4gY29tbWFuZC4gTm90ZSB0aGF0IHRoZSBzZXQgY29tbWFuZCBpcworb3ZlcnJpZGRlbiBoZXJlIC0gVGhlcmUgYXJlIG5vIHZhcmlhYmxlcy4gVGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsCit1cGRhdGUgdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIGRpc2suCis8L1BhcmE+CisKKzxQYXJhPgorUmVhY2hpbmcgYSBmaWxlIGNhbiBiZSBkb25lIGJ5IHVzaW5nIHRoZSA8Q29tbWFuZD5maWxlPC9Db21tYW5kPiBjb21tYW5kIGZyb20gaXRzIGlub2RlLgorVGhlIGlub2RlIGNhbiBiZSByZWFjaGVkIGJ5IGFueSBvdGhlciBtZWFucywgZm9yIGV4YW1wbGUsIGJ5IHRoZQorPENvbW1hbmQ+Y2Q8L0NvbW1hbmQ+IGNvbW1hbmQsIGlmIHlvdSBrbm93IHRoZSBmaWxlIG5hbWUuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIHN0YXR1cyB3aW5kb3cgd2lsbCBpbmRpY2F0ZToKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGdsb2JhbCBibG9jayBudW1iZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgaW50ZXJuYWwgZmlsZSBibG9jayBudW1iZXIuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZmlsZSBvZmZzZXQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZmlsZSBzaXplLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGZpbGUgaW5vZGUgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGluZGlyZWN0aW9uIGxldmVsIC0gV2hldGhlciBpdCBpcyBhIGRpcmVjdCBibG9jayAoMCksIGluZGlyZWN0CisoMSksIGV0Yy4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIG1haW4gZGF0YSB3aW5kb3cgd2lsbCBkaXNwbGF5IHRoZSBmaWxlIGVpdGhlciBpbiBoZXggbW9kZSBvciBpbiB0ZXh0Cittb2RlLCBzZWxlY3QtYWJsZSBieSB0aGUgPENvbW1hbmQ+ZGlzcGxheTwvQ29tbWFuZD4gY29tbWFuZC4KKzwvUGFyYT4KKworPFBhcmE+CitJbiBoZXggbW9kZSwgRVhUMkVEIHdpbGwgZGlzcGxheSBvZmZzZXRzIGluIHRoZSBjdXJyZW50IGJsb2NrLCBhbG9uZyB3aXRoIGEKK3RleHQgYW5kIGhleCBkdW1wIG9mIHRoZSBjdXJyZW50IGJsb2NrLgorPC9QYXJhPgorCis8UGFyYT4KK0luIGVpdGhlciBjYXNlIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmN1cnJlbnQgcGxhY2U8L0xpdGVyYWw+IHdpbGwgYmUgaGlnaGxpZ2h0ZWQuIEluIHRoZSBoZXggbW9kZQoraXQgd2lsbCBiZSBhbHdheXMgaGlnaGxpZ2h0ZWQsIHdoaWxlIGluIHRoZSB0ZXh0IG1vZGUgaXQgd2lsbCBiZSBoaWdobGlnaHRlZAoraWYgdGhlIGNoYXJhY3RlciBpcyBkaXNwbGF5LWFibGUuCis8L1BhcmE+CisKKzxTZWN0Mj4KKzxUaXRsZT5ibG9jazwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBibG9jayBibG9ja19udW0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+YmxvY2s8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgdXNlZCB0byBtb3ZlIGluc2lkZSB0aGUgZmlsZS4gVGhlCis8RW1waGFzaXM+YmxvY2smbG93YmFyO251bTwvRW1waGFzaXM+IGFyZ3VtZW50IGlzIHRoZSByZXF1ZXN0ZWQgaW50ZXJuYWwgZmlsZSBibG9jayBudW1iZXIuIEEKK3ZhbHVlIG9mIDAgd2lsbCByZWFjaCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZGlzcGxheTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBkaXNwbGF5IFt0ZXh0IHx8IGhleF0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZGlzcGxheTwvQ29tbWFuZD4gY29tbWFuZCBjaGFuZ2VzIHRoZSBkaXNwbGF5IG1vZGUgb2YgdGhlIGZpbGUuIAorPENvbW1hbmQ+ZGlzcGxheQoraGV4PC9Db21tYW5kPiB3aWxsIHN3aXRjaCB0byA8Q29tbWFuZD5oZXggbW9kZTwvQ29tbWFuZD4sIHdoaWxlIDxDb21tYW5kPmRpc3BsYXkgdGV4dDwvQ29tbWFuZD4gd2lsbCBzd2l0Y2gKK3RvIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSB3aGVuIG5vIDxDb21tYW5kPmRpc3BsYXk8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgaXNzdWVkIGlzCis8Q29tbWFuZD5oZXggbW9kZTwvQ29tbWFuZD4uCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5pbm9kZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBpbm9kZQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5pbm9kZTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHJldHVybiB0byB0aGUgaW5vZGUgb2YgdGhlIGN1cnJlbnQgZmlsZS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPm5leHQ8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogbmV4dCBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5uZXh0PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgbmV4dCBieXRlIGluIHRoZSBmaWxlLiBJZgorPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGJ5dGVzLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+bmV4dGJsb2NrPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG5leHRibG9jayBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5uZXh0YmxvY2s8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IGJsb2NrIGluIHRoZSBmaWxlLiBJZgorPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGJsb2Nrcy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPnByZXY8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcHJldiBbbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5wcmV2PC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcGFzcyB0byB0aGUgcHJldmlvdXMgYnl0ZSBpbiB0aGUgZmlsZS4gSWYKKzxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gYnl0ZXMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wcmV2YmxvY2s8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogcHJldmJsb2NrIFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm5leHRibG9jazwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIGJsb2NrIGluIHRoZSBmaWxlLiBJZgorPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBibG9ja3MuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5vZmZzZXQ8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogb2Zmc2V0IGZpbGVfb2Zmc2V0Cis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm9mZnNldDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIG1vdmUgdG8gdGhlIHNwZWNpZmllZCBvZmZzZXQgaW4gdGhlIGZpbGUuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5zZXQ8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogc2V0IFt0ZXh0IHx8IGhleF0gYXJnMSBbYXJnMiBhcmczIC4uLl0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+ZmlsZSBzZXQ8L0NvbW1hbmQ+IGNvbW1hbmQgaXMgd29ya2luZyBsaWtlIHRoZSA8TGl0ZXJhbCByZW1hcD0idHQiPmdlbmVyYWwgc2V0IGNvbW1hbmQ8L0xpdGVyYWw+LAord2l0aCA8TGl0ZXJhbCByZW1hcD0idHQiPnR5cGU9bm9uZTwvTGl0ZXJhbD4uIFRoZXJlIGFyZSBubyB2YXJpYWJsZXMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT53cml0ZWRhdGE8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogd3JpdGVkYXRhCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHVwZGF0ZSB0aGUgY3VycmVudCBmaWxlIGJsb2NrIGluIHRoZSBkaXNrLgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+VGhlIGRpcmVjdG9yeTwvVGl0bGU+CisKKzxQYXJhPgorV2hlbiBlZGl0aW5nIGEgZmlsZSwgRVhUMkVEIGFuYWx5emVzIGZvciB5b3UgYm90aCB0aGUgYWxsb2NhdGlvbiBibG9ja3Mgb2YKK3RoZSBkaXJlY3RvcnkgZW50cmllcywgYW5kIHRoZSBkaXJlY3RvcnkgZW50cmllcy4KKzwvUGFyYT4KKworPFBhcmE+CitFYWNoIGRpcmVjdG9yeSBlbnRyeSBpcyBkaXNwbGF5ZWQgb24gb25lIHJvdy4gWW91IGNhbiBtb3ZlIHRoZSBoaWdobGlnaHRlZAorZW50cnkgd2l0aCB0aGUgdXN1YWwgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gYW5kIDxDb21tYW5kPnByZXY8L0NvbW1hbmQ+IGNvbW1hbmRzLCBhbmQgImRpdmUgaW4iCit3aXRoIHRoZSA8Q29tbWFuZD5mb2xsb3dpbm9kZTwvQ29tbWFuZD4gY29tbWFuZC4KKzwvUGFyYT4KKworPFBhcmE+CitUaGUgc3RhdHVzIHdpbmRvdyB3aWxsIGluZGljYXRlOgorCis8SXRlbWl6ZWRMaXN0PgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgZGlyZWN0b3J5IGVudHJ5IG51bWJlci4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSB0b3RhbCBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gdGhpcyBkaXJlY3RvcnkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlUaGUgY3VycmVudCBnbG9iYWwgYmxvY2sgbnVtYmVyLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGN1cnJlbnQgb2Zmc2V0IGluIHRoZSBlbnRpcmUgZGlyZWN0b3J5IC0gV2hlbiB2aWV3aW5nIHRoZQorZGlyZWN0b3J5IGFzIGEgY29udGludW91cyBmaWxlLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJVGhlIGlub2RlIG51bWJlciBvZiB0aGUgZGlyZWN0b3J5IGl0c2VsZi4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+Cis8TGlzdEl0ZW0+CisKKzxQYXJhPgorCVRoZSBpbmRpcmVjdGlvbiBsZXZlbCAtIFdoZXRoZXIgaXQgaXMgYSBkaXJlY3QgYmxvY2sgKDApLCBpbmRpcmVjdAorKDEpLCBldGMuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+Y2Q8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogY2QgW3BhdGhdCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmNkPC9Db21tYW5kPiBjb21tYW5kIGlzIHVzZWQgaW4gdGhlIHVzdWFsIG1lYW5pbmcsIGxpa2UgdGhlIGdsb2JhbCBjZAorY29tbWFuZC4KKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJSWYgPEVtcGhhc2lzPnBhdGg8L0VtcGhhc2lzPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgZW50cnkgaXMKK2ZvbGxvd2VkLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPEVtcGhhc2lzPnBhdGg8L0VtcGhhc2lzPiBjYW4gYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+CisJPEVtcGhhc2lzPnBhdGg8L0VtcGhhc2lzPiBjYW4gYWxzbyBlbmQgdXAgaW4gYSBmaWxlLCBpbiB3aGljaCBjYXNlIHRoZSBmaWxlIGlub2RlCit3aWxsIGJlIHJlYWNoZWQuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKwlTeW1ib2xpYyBsaW5rIChmYXN0IG9ubHksIG1lYW53aGlsZSkgaXMgYXV0b21hdGljYWxseSBmb2xsb3dlZC4KKzwvUGFyYT4KKzwvTGlzdEl0ZW0+CisKKzwvSXRlbWl6ZWRMaXN0PgorCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5lbnRyeTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBlbnRyeSBbZW50cnlfbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5lbnRyeTwvQ29tbWFuZD4gY29tbWFuZCBzZXRzIDxFbXBoYXNpcz5lbnRyeSZsb3diYXI7bnVtPC9FbXBoYXNpcz4gYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitlbnRyeS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmZvbGxvd2lub2RlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGZvbGxvd2lub2RlCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmZvbGxvd2lub2RlPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgbW92ZSB5b3UgdG8gdGhlIGlub2RlIHBvaW50ZWQgYnkgdGhlCitjdXJyZW50IGRpcmVjdG9yeSBlbnRyeS4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPmlub2RlPC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IGlub2RlCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmlub2RlPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgcmV0dXJuIHlvdSB0byB0aGUgcGFyZW50IGlub2RlIG9mIHRoZSB3aG9sZQorZGlyZWN0b3J5IGxpc3RpbmcuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5uZXh0PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IG5leHQgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+bmV4dDwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5LgorSWYgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIG5leHQgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGVudHJpZXMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wcmV2PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHByZXYgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+cHJldjwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIGRpcmVjdG9yeSBlbnRyeS4KK0lmIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBpcyBzdXBwbGllZCwgaXQgd2lsbCBwYXNzIHRvIHRoZSBwcmV2aW91cyA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gZW50cmllcy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPFNlY3QyPgorPFRpdGxlPndyaXRlZGF0YTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiB3cml0ZWRhdGEKKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+d3JpdGVkYXRhPC9Db21tYW5kPiBjb21tYW5kIHdpbGwgd3JpdGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGVudHJ5IHRvIHRoZQorZGlzay4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxIGlkPSJibG9jay1iaXRtYXAiPgorPFRpdGxlPlRoZSBibG9jayBhbGxvY2F0aW9uIGJpdG1hcDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+YmxvY2sgYWxsb2NhdGlvbiBiaXRtYXA8L0xpdGVyYWw+IG9mIGFueSBibG9jayBncm91cCBjYW4gYmUgcmVhY2hlZCBmcm9tCit0aGUgY29ycmVzcG9uZGluZyBncm91cCBkZXNjcmlwdG9yLgorPC9QYXJhPgorCis8UGFyYT4KK1lvdSB3aWxsIGJlIG9mZmVyZWQgYSBiaXQgbGlzdGluZyBvZiB0aGUgZW50aXJlIGJsb2NrcyBpbiB0aGUgZ3JvdXAuIFRoZQorY3VycmVudCBibG9jayB3aWxsIGJlIGhpZ2hsaWdodGVkIGFuZCBpdHMgbnVtYmVyIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorc3RhdHVzIHdpbmRvdy4KKzwvUGFyYT4KKworPFBhcmE+CitBIHZhbHVlIG9mICIxIiBtZWFucyB0aGF0IHRoZSBibG9jayBpcyBhbGxvY2F0ZWQsIHdoaWxlIGEgdmFsdWUgb2YgIjAiCitzaWduYWxzIHRoYXQgaXQgaXMgZnJlZS4gVGhlIHZhbHVlIGlzIGFsc28gaW50ZXJwcmV0ZWQgaW4gdGhlIHN0YXR1cword2luZG93LiBZb3UgY2FuIHVzZSB0aGUgdXN1YWwgPENvbW1hbmQ+bmV4dC9wcmV2PC9Db21tYW5kPiBjb21tYW5kcywgYWxvbmcgd2l0aCB0aGUKKzxDb21tYW5kPmFsbG9jYXRlL2RlYWxsb2NhdGU8L0NvbW1hbmQ+IGNvbW1hbmRzLgorPC9QYXJhPgorCis8U2VjdDI+Cis8VGl0bGU+YWxsb2NhdGU8L1RpdGxlPgorCis8UGFyYT4KKworPFNjcmVlbj4KK1N5bnRheDogYWxsb2NhdGUgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+YWxsb2NhdGU8L0NvbW1hbmQ+IGNvbW1hbmQgYWxsb2NhdGVzIDxFbXBoYXNpcz5udW08L0VtcGhhc2lzPiBibG9ja3MsIHN0YXJ0aW5nIGZyb20gdGhlCitoaWdobGlnaHRlZCBwb3NpdGlvbi4gSWYgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIG5vdCBzcGVjaWZpZWQsIDxFbXBoYXNpcz5udW09MTwvRW1waGFzaXM+IGlzIGFzc3VtZWQuCitPZi1jb3Vyc2UsIG5vIGFjdHVhbCBjaGFuZ2UgaXMgbWFkZSB1bnRpbCB5b3UgaXNzdWUgYSA8Q29tbWFuZD53cml0ZWRhdGE8L0NvbW1hbmQ+IGNvbW1hbmQuIAorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+ZGVhbGxvY2F0ZTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBkZWFsbG9jYXRlIFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPmRlYWxsb2NhdGU8L0NvbW1hbmQ+IGNvbW1hbmQgZGVhbGxvY2F0ZXMgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGJsb2Nrcywgc3RhcnRpbmcgZnJvbSB0aGUKK2hpZ2hsaWdodGVkIHBvc2l0aW9uLiBJZiA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gaXMgbm90IHNwZWNpZmllZCwgPEVtcGhhc2lzPm51bT0xPC9FbXBoYXNpcz4gaXMgYXNzdW1lZC4KK09mLWNvdXJzZSwgbm8gYWN0dWFsIGNoYW5nZSBpcyBtYWRlIHVudGlsIHlvdSBpc3N1ZSBhIDxDb21tYW5kPndyaXRlZGF0YTwvQ29tbWFuZD4gY29tbWFuZC4gCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5lbnRyeTwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBlbnRyeSBbZW50cnlfbnVtXQorPC9TY3JlZW4+CisKK1RoZSA8Q29tbWFuZD5lbnRyeTwvQ29tbWFuZD4gY29tbWFuZCBzZXRzIHRoZSBjdXJyZW50IGhpZ2hsaWdodGVkIGJsb2NrIHRvCis8RW1waGFzaXM+ZW50cnkmbG93YmFyO251bTwvRW1waGFzaXM+LgorPC9QYXJhPgorCis8L1NlY3QyPgorCis8U2VjdDI+Cis8VGl0bGU+bmV4dDwvVGl0bGU+CisKKzxQYXJhPgorCis8U2NyZWVuPgorU3ludGF4OiBuZXh0IFtudW1dCis8L1NjcmVlbj4KKworVGhlIDxDb21tYW5kPm5leHQ8L0NvbW1hbmQ+IGNvbW1hbmQgd2lsbCBwYXNzIHRvIHRoZSBuZXh0IGJpdCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCituZXh0IGJsb2NrLiBJZiA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gaXMgc3VwcGxpZWQsIGl0IHdpbGwgcGFzcyB0byB0aGUgbmV4dCA8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4KK2JpdHMuCis8L1BhcmE+CisKKzwvU2VjdDI+CisKKzxTZWN0Mj4KKzxUaXRsZT5wcmV2PC9UaXRsZT4KKworPFBhcmE+CisKKzxTY3JlZW4+CitTeW50YXg6IHByZXYgW251bV0KKzwvU2NyZWVuPgorCitUaGUgPENvbW1hbmQ+cHJldjwvQ29tbWFuZD4gY29tbWFuZCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzIGJpdCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCitwcmV2aW91cyBibG9jay4gSWYgPEVtcGhhc2lzPm51bTwvRW1waGFzaXM+IGlzIHN1cHBsaWVkLCBpdCB3aWxsIHBhc3MgdG8gdGhlIHByZXZpb3VzCis8RW1waGFzaXM+bnVtPC9FbXBoYXNpcz4gYml0cy4KKzwvUGFyYT4KKworPC9TZWN0Mj4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPlRoZSBpbm9kZSBhbGxvY2F0aW9uIGJpdG1hcDwvVGl0bGU+CisKKzxQYXJhPgorVGhlIDxMaXRlcmFsIHJlbWFwPSJ0dCI+aW5vZGUgYWxsb2NhdGlvbiBiaXRtYXA8L0xpdGVyYWw+IGlzIHZlcnkgc2ltaWxhciB0byB0aGUgYmxvY2sgYWxsb2NhdGlvbgorYml0bWFwIGV4cGxhaW5lZCBhYm92ZS4gSXQgaXMgYWxzbyByZWFjaGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAKK2Rlc2NyaXB0b3IuIFBsZWFzZSByZWZlciB0byBzZWN0aW9uIDxYUmVmIExpbmtFbmQ9ImJsb2NrLWJpdG1hcCI+LgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+RmlsZXN5c3RlbSBzaXplIGxpbWl0YXRpb248L1RpdGxlPgorCis8UGFyYT4KK1doaWxlIGFuIGV4dDIgZmlsZXN5c3RlbSBoYXMgYSBzaXplIGxpbWl0IG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+NCBUQjwvTGl0ZXJhbD4sIEVYVDJFRCBjdXJyZW50bHkKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+Y2FuJ3Q8L0xpdGVyYWw+IGhhbmRsZSBmaWxlc3lzdGVtcyB3aGljaCBhcmUgPExpdGVyYWwgcmVtYXA9InR0Ij5iaWdnZXIgdGhhbiAyIEdCPC9MaXRlcmFsPi4KKzwvUGFyYT4KKworPFBhcmE+CitJIGFtIHNvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZS4gVGhpcyB3aWxsIGhvcGVmdWxseSBiZSBmaXhlZCBpbiBmdXR1cmUKK3JlbGVhc2VzLgorPC9QYXJhPgorCis8L1NlY3QxPgorCis8U2VjdDE+Cis8VGl0bGU+Q29weXJpZ2h0PC9UaXRsZT4KKworPFBhcmE+CitFWFQyRUQgaXMgQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4uCis8L1BhcmE+CisKKzxQYXJhPgorRVhUMkVEIGlzIGhlcmVieSBwbGFjZWQgdW5kZXIgdGhlIEdQTCAtIEdudSBQdWJsaWMgTGljZW5zZS4gWW91IGFyZSBmcmVlIGFuZAord2VsY29tZSB0byBjb3B5LCB2aWV3IGFuZCBtb2RpZnkgdGhlIHNvdXJjZXMuIE15IG9ubHkgd2lzaCBpcyB0aGF0IG15Citjb3B5cmlnaHQgcHJlc2VudGVkIGFib3ZlIHdpbGwgYmUgbGVmdCBhbmQgdGhhdCBhIGxpc3Qgb2YgdGhlIGJ1ZyBmaXhlcywKK2FkZGVkIGZlYXR1cmVzLCBldGMsIHdpbGwgYmUgcHJvdmlkZWQuCis8L1BhcmE+CisKKzxQYXJhPgorVGhlIGVudGlyZSBFWFQyRUQgcHJvamVjdCBpcyBiYXNlZCwgb2YtY291cnNlLCBvbiB0aGUga2VybmVsIHNvdXJjZXMuIFRoZQorPExpdGVyYWwgcmVtYXA9InR0Ij5leHQyLmRlc2NyaXB0b3JzPC9MaXRlcmFsPiBkaXN0cmlidXRlZCB3aXRoIEVYVDJFRCBpcyBhIHNsaWdodGx5IG1vZGlmaWVkCit2ZXJzaW9uIG9mIHRoZSBtYWluIGV4dDIgaW5jbHVkZSBmaWxlLCAvdXNyL2luY2x1ZGUvbGludXgvZXh0MiZsb3diYXI7ZnMuaC4gRm9sbG93cwordGhlIG9yaWdpbmFsIGNvcHlyaWdodDoKKzwvUGFyYT4KKworPFBhcmE+CisKKzxTY3JlZW4+CisvKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworPC9TY3JlZW4+CisKKzwvUGFyYT4KKworPC9TZWN0MT4KKworPFNlY3QxPgorPFRpdGxlPkFja25vd2xlZGdtZW50czwvVGl0bGU+CisKKzxQYXJhPgorRVhUMkVEIHdhcyBjb25zdHJ1Y3RlZCBhcyBhIHN0dWRlbnQgcHJvamVjdCBpbiB0aGUgc29mdHdhcmUKK2xhYm9yYXRvcnkgb2YgdGhlIGZhY3VsdHkgb2YgZWxlY3RyaWNhbC1lbmdpbmVlcmluZyBpbiB0aGUKKzxMaXRlcmFsIHJlbWFwPSJ0dCI+VGVjaG5pb24gLSBJc3JhZWwncyBpbnN0aXR1dGUgb2YgdGVjaG5vbG9neTwvTGl0ZXJhbD4uCis8L1BhcmE+CisKKzxQYXJhPgorQXQgZmlyc3QsIEkgd291bGQgbGlrZSB0byB0aGFuayA8UGVyc29uTmFtZT48Rmlyc3ROYW1lPkF2bmVyPC9GaXJzdE5hbWU+IDxTdXJOYW1lPkxvdHRlbTwvU3VyTmFtZT48L1BlcnNvbk5hbWU+IGFuZCA8UGVyc29uTmFtZT48SG9ub3JpZmljPkRvY3RvcjwvSG9ub3JpZmljPiA8Rmlyc3ROYW1lPklsYW5hPC9GaXJzdE5hbWU+IDxTdXJOYW1lPkRhdmlkPC9TdXJuYW1lPjwvUGVyc29uTmFtZT4gZm9yIHRoZWlyIGludGVyZXN0IGFuZCBhc3Npc3RhbmNlIGluIHRoaXMgcHJvamVjdC4KKzwvUGFyYT4KKworPFBhcmE+CitJIHdvdWxkIGFsc28gbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSwgd2hvIHdlcmUgaW52b2x2ZWQgaW4gdGhlCitkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsIGNvZGUgYW5kIHN1cHBvcnQKK3V0aWxpdGllczoKKworPEl0ZW1pemVkTGlzdD4KKzxMaXN0SXRlbT4KKworPFBhcmE+Cis8UGVyc29uTmFtZT48Rmlyc3ROYW1lPlJlbXk8L0ZpcnN0TmFtZT4gPFN1ck5hbWU+Q2FyZDwvU3VyTmFtZT48L1BlcnNvbk5hbWU+CisKK1dobyBkZXNpZ25lZCwgaW1wbGVtZW50ZWQgYW5kIG1haW50YWlucyB0aGUgZXh0MiBmaWxlc3lzdGVtIGtlcm5lbAorY29kZSwgYW5kIHNvbWUgb2YgdGhlIGV4dDIgdXRpbGl0aWVzLiBSZW15IENhcmQgaXMgYWxzbyB0aGUgYXV0aG9yCitvZiBzZXZlcmFsIGhlbHBmdWwgc2xpZGVzIGNvbmNlcm5pbmcgdGhlIGV4dDIgZmlsZXN5c3RlbS4KK1NwZWNpZmljYWxseSwgaGUgaXMgdGhlIGF1dGhvciBvZiA8TGl0ZXJhbCByZW1hcD0idHQiPkZpbGUgTWFuYWdlbWVudCBpbiB0aGUgTGludXgKK0tlcm5lbDwvTGl0ZXJhbD4gYW5kIG9mIDxMaXRlcmFsIHJlbWFwPSJ0dCI+VGhlIFNlY29uZCBFeHRlbmRlZCBGaWxlIFN5c3RlbSAtIEN1cnJlbnQgU3RhdGUsCitGdXR1cmUgRGV2ZWxvcG1lbnQ8L0xpdGVyYWw+LgorCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorPExpc3RJdGVtPgorCis8UGFyYT4KKzxQZXJzb25OYW1lPjxGaXJzdE5hbWU+V2F5bmU8L0ZpcnN0TmFtZT4gPFN1ck5hbWU+RGF2aXNvbjwvU3VyTmFtZT48L1BlcnNvbk5hbWU+CisKK1dobyBkZXNpZ25lZCB0aGUgZXh0MiBmaWxlc3lzdGVtLgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+Cis8UGVyc29uTmFtZT48Rmlyc3ROYW1lPlN0ZXBoZW48L0ZpcnN0TmFtZT4gPFN1cm5hbWU+VHdlZWRpZTwvU3VyTmFtZT48L1BlcnNvbk5hbWU+CisKK1dobyBoZWxwZWQgZGVzaWduaW5nIHRoZSBleHQyIGZpbGVzeXN0ZW0ga2VybmVsIGNvZGUgYW5kIHdyb3RlIHRoZQorc2xpZGVzIDxMaXRlcmFsIHJlbWFwPSJ0dCI+T3B0aW1pemF0aW9ucyBpbiBGaWxlIFN5c3RlbXM8L0xpdGVyYWw+LgorPC9QYXJhPgorPC9MaXN0SXRlbT4KKzxMaXN0SXRlbT4KKworPFBhcmE+Cis8UGVyc29uTmFtZT48Rmlyc3ROYW1lPlRoZW9kb3JlPC9GaXJzdE5hbWU+IDxTdXJOYW1lPlRzJ288L1N1ck5hbWU+PC9QZXJzb25OYW1lPgorCitXaG8gaXMgdGhlIGF1dGhvciBvZiBzZXZlcmFsIGV4dDIgdXRpbGl0aWVzIGFuZCBvZiB0aGUgZXh0MiBsaWJyYXJ5Cis8TGl0ZXJhbCByZW1hcD0idHQiPmxpYmV4dDJmczwvTGl0ZXJhbD4gKHdoaWNoIEkgZGlkbid0IHVzZSwgc2ltcGx5IGJlY2F1c2UgSSBkaWRuJ3Qga25vdworaXQgZXhpc3RzIHdoZW4gSSBzdGFydGVkIHRvIHdvcmsgb24gbXkgcHJvamVjdCkuCis8L1BhcmE+Cis8L0xpc3RJdGVtPgorCis8L0l0ZW1pemVkTGlzdD4KKworPC9QYXJhPgorCis8UGFyYT4KK0xhc3RseSwgSSB3b3VsZCBsaWtlIHRvIHRoYW5rLCBvZi1jb3Vyc2UsIDxQZXJzb25OYW1lPjxGaXJzdE5hbWU+TGludXM8L0ZpcnN0TmFtZT4gPFN1ck5hbWU+VG9ydmFsZHM8L1N1ck5hbWU+PC9QZXJzb25OYW1lPiBhbmQgdGhlCitMaW51eCBjb21tdW5pdHkgZm9yIHByb3ZpZGluZyBhbGwgb2YgdXMgd2l0aCBzdWNoIGEgZ3JlYXQgb3BlcmF0aW5nCitzeXN0ZW0uCis8L1BhcmE+CisKKzxQYXJhPgorUGxlYXNlIGNvbnRhY3QgbWUgaW4gYSBjYXNlIG9mIGJ1ZyByZXBvcnQsIHN1Z2dlc3Rpb25zLCBvciBqdXN0IGFib3V0Cithbnl0aGluZyBjb25jZXJuaW5nIEVYVDJFRC4KKzwvUGFyYT4KKworPFBhcmE+CitFbmpveSwKKzwvUGFyYT4KKworPFBhcmE+CitHYWRpIE94bWFuICZsdDt0Z3VkQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbCZndDsKKzwvUGFyYT4KKworPFBhcmE+CitIYWlmYSwgQXVndXN0IDk1Cis8L1BhcmE+CisKKzwvU2VjdDE+CisKKzwvQXJ0aWNsZT4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9leHQyZWQvZXh0Mi5kZXNjcmlwdG9ycyBiL2UyZnNwcm9ncy9leHQyZWQvZXh0Mi5kZXNjcmlwdG9ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjkyN2IwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyLmRlc2NyaXB0b3JzCkBAIC0wLDAgKzEsOTc2IEBACitFeHRlbmRlZCAyIGZpbGVzeXN0ZW0gc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBleHQyZWQuCisKK01vc3Qgb2YgdGhpcyBmaWxlIGlzIGp1c3QgY29waWVkIGZyb20gdGhlIGV4dDIgbWFpbiBpbmNsdWRlIGZpbGUuCisKK015IHBhcnNlciBpcyB2ZXJ5IHByaW1pdGl2ZSAtIEl0IG9ubHkgc2VhcmNoZXMgZm9yIHRoZSBzdHJ1Y3Qga2V5d29yZHMsCithbmQgdXNlcyB0aGUgdmFyaWFibGVzIGluIHRoZXJlLiBUaGUgcmVzdCBvZiB0aGUgZmlsZSBpcyBqdXN0IGlnbm9yZWQuCisKK1lvdSB3aWxsIGZpbmQgYXQgdGhlIGVuZCBhIGZldyBhZGRpdGlvbmFsIHR5cGVzIHdoaWNoIGFyZSBub3QgYXZpYWJsZSBpbgordGhlIG9yaWdpbmFsIGluY2x1ZGUgZmlsZSwgc3VjaCBhcyB0aGUgdHlwZXMgImZpbGUiIGFuZCAiZGlyIi4gVGhleSBoYXZlCitubyB2YXJpYWJsZXMsIGJ1dCBhcmUgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgd2F5IGV4dDJlZCBiaW5kcyBDIGNvbW1hbmRzCit0byBzcGVjaWZpYyB0eXBlcy4KKworR2FkaSBPeG1hbiwgNy85NQorCitIZXJlIGlzIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQ6CisKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0ICBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKi8KKworCisvKgorICogQUNMIHN0cnVjdHVyZXMKKyAqLworc3RydWN0IGV4dDJfYWNsX2hlYWRlcgkvKiBIZWFkZXIgb2YgQWNjZXNzIENvbnRyb2wgTGlzdHMgKi8KK3sKKwl1bnNpZ25lZCBsb25nIGFjbGhfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFjbGhfZmlsZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGFjbGhfYWNsZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGFjbGhfZmlyc3RfYWNsZTsKK307CisKK3N0cnVjdCBleHQyX2FjbF9lbnRyeQkvKiBBY2Nlc3MgQ29udHJvbCBMaXN0IEVudHJ5ICovCit7CisJdW5zaWduZWQgbG9uZyAgYWNsZV9zaXplOworCXVuc2lnbmVkIHNob3J0IGFjbGVfcGVybXM7CS8qIEFjY2VzcyBwZXJtaXNzaW9ucyAqLworCXVuc2lnbmVkIHNob3J0IGFjbGVfdHlwZTsJLyogVHlwZSBvZiBlbnRyeSAqLworCXVuc2lnbmVkIHNob3J0IGFjbGVfdGFnOwkvKiBVc2VyIG9yIGdyb3VwIGlkZW50aXR5ICovCisJdW5zaWduZWQgc2hvcnQgYWNsZV9wYWQxOworCXVuc2lnbmVkIGxvbmcgIGFjbGVfbmV4dDsJLyogUG9pbnRlciBvbiBuZXh0IGVudHJ5IGZvciB0aGUgKi8KKwkJCQkJLyogc2FtZSBpbm9kZSBvciBvbiBuZXh0IGZyZWUgZW50cnkgKi8KK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBibG9ja3MgZ3JvdXAgZGVzY3JpcHRvcgorICovCisKK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKwlfX3UzMgliZ19ibG9ja19iaXRtYXA7CQkvKiBCbG9ja3MgYml0bWFwIGJsb2NrICovCisJX191MzIJYmdfaW5vZGVfYml0bWFwOwkJLyogSW5vZGVzIGJpdG1hcCBibG9jayAqLworCV9fdTMyCWJnX2lub2RlX3RhYmxlOwkJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCisJX191MTYJYmdfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX191MTYJYmdfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX191MTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLworCV9fdTE2CWJnX3BhZDsKKwlfX3UzMiAgIGJnX3Jlc2VydmVkWzBdOworCV9fdTMyICAgYmdfcmVzZXJ2ZWRbMV07CisJX191MzIgICBiZ19yZXNlcnZlZFsyXTsKK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaW5vZGUgb24gdGhlIGRpc2sKKyAqLworc3RydWN0IGV4dDJfaW5vZGUgeworCV9fdTE2IGlfbW9kZTsJCS8qIEZpbGUgbW9kZSAqLworCV9fdTE2IGlfdWlkOwkJLyogT3duZXIgVWlkICovCisJX191MzIgIGlfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgKi8KKwlfX3UzMiAgaV9hdGltZTsJCS8qIEFjY2VzcyB0aW1lICovCisJX191MzIgIGlfY3RpbWU7CQkvKiBDcmVhdGlvbiB0aW1lICovCisJX191MzIgIGlfbXRpbWU7CQkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fdTMyICBpX2R0aW1lOwkJLyogRGVsZXRpb24gVGltZSAqLworCV9fdTE2ICBpX2dpZDsJCS8qIEdyb3VwIElkICovCisJX191MTYgIGlfbGlua3NfY291bnQ7CS8qIExpbmtzIGNvdW50ICovCisJX191MzIgIGlfYmxvY2tzOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMiAgaV9mbGFnczsJCS8qIEZpbGUgZmxhZ3MgKi8KKwlfX3UzMiAgbF9pX3Jlc2VydmVkMTsKKwlfX3UzMiAgaV9ibG9ja1swXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbMV07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzJdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1szXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbNF07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzVdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1s2XTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbN107IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzhdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1s5XTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbMTBdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1sxMV07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX2Jsb2NrWzEyXTsgLyogUG9pbnRlcnMgdG8gYmxvY2tzICovCisJX191MzIgIGlfYmxvY2tbMTNdOyAvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMiAgaV9ibG9ja1sxNF07IC8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyICBpX3ZlcnNpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX3UzMiAgaV9maWxlX2FjbDsJLyogRmlsZSBBQ0wgKi8KKwlfX3UzMiAgaV9kaXJfYWNsOwkvKiBEaXJlY3RvcnkgQUNMICovCisJX191MzIgIGlfZmFkZHI7CQkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJX191OCAgIGxfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KKwlfX3U4ICAgbF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJX191MTYgIGlfcGFkMTsKKwlfX3UxNglsX2lfdWlkX2hpZ2g7CS8qIHRoZXNlIDIgZmllbGRzICAgICovCisJX191MTYJbF9pX2dpZF9oaWdoOwkvKiB3ZXJlIHJlc2VydmVkMlswXSAqLworCV9fdTMyICBsX2lfcmVzZXJ2ZWQyOworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiB0aGUgc3VwZXIgYmxvY2sKKyAqLworc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworCV9fdTMyCXNfaW5vZGVzX2NvdW50OwkJLyogSW5vZGVzIGNvdW50ICovCisJX191MzIJc19ibG9ja3NfY291bnQ7CQkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMglzX3JfYmxvY2tzX2NvdW50OwkvKiBSZXNlcnZlZCBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCisJX191MzIJc19maXJzdF9kYXRhX2Jsb2NrOwkvKiBGaXJzdCBEYXRhIEJsb2NrICovCisJX191MzIJc19sb2dfYmxvY2tfc2l6ZTsJLyogQmxvY2sgc2l6ZSAqLworCV9fczMyCXNfbG9nX2ZyYWdfc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fdTMyCXNfYmxvY2tzX3Blcl9ncm91cDsJLyogIyBCbG9ja3MgcGVyIGdyb3VwICovCisJX191MzIJc19mcmFnc19wZXJfZ3JvdXA7CS8qICMgRnJhZ21lbnRzIHBlciBncm91cCAqLworCV9fdTMyCXNfaW5vZGVzX3Blcl9ncm91cDsJLyogIyBJbm9kZXMgcGVyIGdyb3VwICovCisJX191MzIJc19tdGltZTsJCS8qIE1vdW50IHRpbWUgKi8KKwlfX3UzMglzX3d0aW1lOwkJLyogV3JpdGUgdGltZSAqLworCV9fdTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKwlfX3MxNglzX21heF9tbnRfY291bnQ7CS8qIE1heGltYWwgbW91bnQgY291bnQgKi8KKwlfX3UxNglzX21hZ2ljOwkJLyogTWFnaWMgc2lnbmF0dXJlICovCisJX191MTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCisJX191MTYJc19lcnJvcnM7CQkvKiBCZWhhdmlvdXIgd2hlbiBkZXRlY3RpbmcgZXJyb3JzICovCisJX191MTYJc19taW5vcl9yZXZfbGV2ZWw7IAkvKiBtaW5vciByZXZpc2lvbiBsZXZlbCAqLworCV9fdTMyCXNfbGFzdGNoZWNrOwkJLyogdGltZSBvZiBsYXN0IGNoZWNrICovCisJX191MzIJc19jaGVja2ludGVydmFsOwkvKiBtYXguIHRpbWUgYmV0d2VlbiBjaGVja3MgKi8KKwlfX3UzMglzX2NyZWF0b3Jfb3M7CQkvKiBPUyAqLworCV9fdTMyCXNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KKwlfX3UxNglzX2RlZl9yZXN1aWQ7CQkvKiBEZWZhdWx0IHVpZCBmb3IgcmVzZXJ2ZWQgYmxvY2tzICovCisJX191MTYJc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTMyCXNfZmlyc3RfaW5vOyAJCS8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSAqLworCV9fdTE2ICAgc19pbm9kZV9zaXplOyAJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisJX191MTYJc19ibG9ja19ncm91cF9ucjsgCS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisJX191MzIJc19mZWF0dXJlX2NvbXBhdDsgCS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfaW5jb21wYXQ7IAkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfcm9fY29tcGF0OyAJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCWNoYXJbMTZdIHNfdXVpZDsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCisJY2hhclsxNl0gc192b2x1bWVfbmFtZTsgCS8qIHZvbHVtZSBuYW1lICovCisJY2hhcls2NF0gc19sYXN0X21vdW50ZWQ7IAkvKiBkaXJlY3Rvcnkgd2hlcmUgbGFzdCBtb3VudGVkICovCisJX191MzIJc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwOyAvKiBGb3IgY29tcHJlc3Npb24gKi8KKwkvKgorCSAqIFBlcmZvcm1hbmNlIGhpbnRzLiAgRGlyZWN0b3J5IHByZWFsbG9jYXRpb24gc2hvdWxkIG9ubHkKKwkgKiBoYXBwZW4gaWYgdGhlIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIGZsYWcgaXMgb24uCisJICovCisJX191OAlzX3ByZWFsbG9jX2Jsb2NrczsJLyogTnIgb2YgYmxvY2tzIHRvIHRyeSB0byBwcmVhbGxvY2F0ZSovCisJX191OAlzX3ByZWFsbG9jX2Rpcl9ibG9ja3M7CS8qIE5yIHRvIHByZWFsbG9jYXRlIGZvciBkaXJzICovCisJX191MTYJc19wYWRkaW5nMTsKKwkvKiAKKwkgKiBKb3VybmFsaW5nIHN1cHBvcnQgdmFsaWQgaWYgRVhUMl9GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCBzZXQuCisJICovCisJY2hhclsxNl0gc19qb3VybmFsX3V1aWQ7CS8qIHV1aWQgb2Ygam91cm5hbCBzdXBlcmJsb2NrICovCisJX191MzIJc19qb3VybmFsX2ludW07CQkvKiBpbm9kZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19qb3VybmFsX2RldjsJCS8qIGRldmljZSBudW1iZXIgb2Ygam91cm5hbCBmaWxlICovCisJX191MzIJc19sYXN0X29ycGhhbjsJCS8qIHN0YXJ0IG9mIGxpc3Qgb2YgaW5vZGVzIHRvIGRlbGV0ZSAqLworCisKKwlfX3UzMiAgc19yZXNlcnZlZFswXTsJLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCV9fdTMyICBzX3Jlc2VydmVkWzFdOworCV9fdTMyICBzX3Jlc2VydmVkWzJdOworCV9fdTMyICBzX3Jlc2VydmVkWzNdOworCV9fdTMyICBzX3Jlc2VydmVkWzRdOworCV9fdTMyICBzX3Jlc2VydmVkWzVdOworCV9fdTMyICBzX3Jlc2VydmVkWzZdOworCV9fdTMyICBzX3Jlc2VydmVkWzddOworCV9fdTMyICBzX3Jlc2VydmVkWzhdOworCV9fdTMyICBzX3Jlc2VydmVkWzldOworCV9fdTMyICBzX3Jlc2VydmVkWzEwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTJdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTVdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxN107CisJX191MzIgIHNfcmVzZXJ2ZWRbMThdOworCV9fdTMyICBzX3Jlc2VydmVkWzE5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyMF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjFdOworCV9fdTMyICBzX3Jlc2VydmVkWzIyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyM107CisJX191MzIgIHNfcmVzZXJ2ZWRbMjRdOworCV9fdTMyICBzX3Jlc2VydmVkWzI1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyNl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMjddOworCV9fdTMyICBzX3Jlc2VydmVkWzI4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsyOV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzBdOworCV9fdTMyICBzX3Jlc2VydmVkWzMxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFszMl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzNdOworCV9fdTMyICBzX3Jlc2VydmVkWzM0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFszNV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzZdOworCV9fdTMyICBzX3Jlc2VydmVkWzM3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFszOF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMzldOworCV9fdTMyICBzX3Jlc2VydmVkWzQwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNDJdOworCV9fdTMyICBzX3Jlc2VydmVkWzQzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNDVdOworCV9fdTMyICBzX3Jlc2VydmVkWzQ2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs0N107CisJX191MzIgIHNfcmVzZXJ2ZWRbNDhdOworCV9fdTMyICBzX3Jlc2VydmVkWzQ5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTFdOworCV9fdTMyICBzX3Jlc2VydmVkWzUyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1M107CisJX191MzIgIHNfcmVzZXJ2ZWRbNTRdOworCV9fdTMyICBzX3Jlc2VydmVkWzU1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbNTddOworCV9fdTMyICBzX3Jlc2VydmVkWzU4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs1OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjBdOworCV9fdTMyICBzX3Jlc2VydmVkWzYxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjNdOworCV9fdTMyICBzX3Jlc2VydmVkWzY0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjZdOworCV9fdTMyICBzX3Jlc2VydmVkWzY3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs2OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNjldOworCV9fdTMyICBzX3Jlc2VydmVkWzcwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbNzJdOworCV9fdTMyICBzX3Jlc2VydmVkWzczXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbNzVdOworCV9fdTMyICBzX3Jlc2VydmVkWzc2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs3N107CisJX191MzIgIHNfcmVzZXJ2ZWRbNzhdOworCV9fdTMyICBzX3Jlc2VydmVkWzc5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbODFdOworCV9fdTMyICBzX3Jlc2VydmVkWzgyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4M107CisJX191MzIgIHNfcmVzZXJ2ZWRbODRdOworCV9fdTMyICBzX3Jlc2VydmVkWzg1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbODddOworCV9fdTMyICBzX3Jlc2VydmVkWzg4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs4OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTBdOworCV9fdTMyICBzX3Jlc2VydmVkWzkxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTNdOworCV9fdTMyICBzX3Jlc2VydmVkWzk0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTZdOworCV9fdTMyICBzX3Jlc2VydmVkWzk3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFs5OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbOTldOworCV9fdTMyICBzX3Jlc2VydmVkWzEwMF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTAxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDJdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwM107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTA0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDVdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwNl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTA3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMDhdOworCV9fdTMyICBzX3Jlc2VydmVkWzEwOV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTEwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMTFdOworCV9fdTMyICBzX3Jlc2VydmVkWzExMl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTEzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMTRdOworCV9fdTMyICBzX3Jlc2VydmVkWzExNV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTE2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMTddOworCV9fdTMyICBzX3Jlc2VydmVkWzExOF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTE5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjBdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyMV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTIyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjNdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyNF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTI1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjZdOworCV9fdTMyICBzX3Jlc2VydmVkWzEyN107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTI4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMjldOworCV9fdTMyICBzX3Jlc2VydmVkWzEzMF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTMxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzJdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzM107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTM0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzVdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzNl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTM3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxMzhdOworCV9fdTMyICBzX3Jlc2VydmVkWzEzOV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDFdOworCV9fdTMyICBzX3Jlc2VydmVkWzE0Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQzXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDRdOworCV9fdTMyICBzX3Jlc2VydmVkWzE0NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQ2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNDddOworCV9fdTMyICBzX3Jlc2VydmVkWzE0OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTQ5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTBdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTUyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTNdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTU1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTZdOworCV9fdTMyICBzX3Jlc2VydmVkWzE1N107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTU4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNTldOworCV9fdTMyICBzX3Jlc2VydmVkWzE2MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTYxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjJdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2M107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTY0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjVdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2Nl07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTY3XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNjhdOworCV9fdTMyICBzX3Jlc2VydmVkWzE2OV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTcwXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzFdOworCV9fdTMyICBzX3Jlc2VydmVkWzE3Ml07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTczXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzRdOworCV9fdTMyICBzX3Jlc2VydmVkWzE3NV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTc2XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxNzddOworCV9fdTMyICBzX3Jlc2VydmVkWzE3OF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTc5XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODBdOworCV9fdTMyICBzX3Jlc2VydmVkWzE4MV07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTgyXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODNdOworCV9fdTMyICBzX3Jlc2VydmVkWzE4NF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTg1XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODZdOworCV9fdTMyICBzX3Jlc2VydmVkWzE4N107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTg4XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxODldOworCV9fdTMyICBzX3Jlc2VydmVkWzE5MF07CisJX191MzIgIHNfcmVzZXJ2ZWRbMTkxXTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOTJdOworCV9fdTMyICBzX3Jlc2VydmVkWzE5M107CisJX191MzIgIHNfcmVzZXJ2ZWRbMTk0XTsKKwlfX3UzMiAgc19yZXNlcnZlZFsxOTVdOworCV9fdTMyICBzX3Jlc2VydmVkWzE5Nl07Cit9OworCitUaGUgZm9sbG93aW5nIGlzIGFjdHVhbGx5IG5vdCB1c2VkLCBkdWUgdG8gdGhlIHZhcmlhYmxlIGxlbmd0aCBvZiB0aGUKK25hbWUgZmllbGQuIEVYVDJFRCBoYW5kbGVzIGRpcmVjdG9yaWVzIHRocm91Z2ggdGhlIHR5cGUgImRpciIgYmVsb3cuCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYSBkaXJlY3RvcnkgZW50cnkKKyAqLworCisvKiBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgeyAqLworLyoKKwlfX3UzMiAgaW5vZGU7CQkJLyogSW5vZGUgbnVtYmVyICovCisJX191MTYgcmVjX2xlbjsJCQkvKiBEaXJlY3RvcnkgZW50cnkgbGVuZ3RoICovCisJX191MTYgbmFtZV9sZW47CQkvKiBOYW1lIGxlbmd0aCAqLworCWNoYXIgICAgICAgICAgIG5hbWVbRVhUMl9OQU1FX0xFTl07CS8qIEZpbGUgbmFtZSAqLworfTsKKyovCisKK3N0cnVjdCBmaWxlIHsKK307CisKK3N0cnVjdCBkaXIgeworfTsKKworc3RydWN0IGJsb2NrX2JpdG1hcCB7Cit9OworCitzdHJ1Y3QgaW5vZGVfYml0bWFwIHsKK307CisKK3N0cnVjdCBleHQyX2R4X3Jvb3Rfbm9kZSB7CisJX191MzIgZG90X2lub2RlOworCV9fdTE2IGRvdF9yZWNfbGVuOworCV9fdTggZG90X25hbWVfbGVuOworCV9fdTggZG90X2ZpbGVfdHlwZTsKKwljaGFyWzRdIGRvdF9uYW1lOworCV9fdTMyIGRvdF9kb3RfaW5vZGU7CisJX191MTYgZG90X2RvdF9yZWNfbGVuOworCV9fdTggZG90X2RvdF9uYW1lX2xlbjsKKwlfX3U4IGRvdF9kb3RfZmlsZV90eXBlOworCWNoYXJbNF0gZG90X2RvdF9uYW1lOworCV9fdTMyIHJlc2VydmVkX3plcm87CisJX191OCBoYXNoX3ZlcnNpb247IC8qIDAgbm93LCAxIGF0IHJlbGVhc2UgKi8KKwlfX3U4IGluZm9fbGVuZ3RoOyAvKiA4ICovCisJX191OCBpbmRpcmVjdF9sZXZlbHM7CisJX191OCB1bnVzZWRfZmxhZ3M7CisJX191MTYgbGltaXQ7CisJX191MTYgY291bnQ7CisJX191MzIgYmxvY2tbMF07CisJX191MzIgaGFzaFsxXTsKKwlfX3UzMiBibG9ja1sxXTsKKwlfX3UzMiBoYXNoWzJdOworCV9fdTMyIGJsb2NrWzJdOworCV9fdTMyIGhhc2hbM107CisJX191MzIgYmxvY2tbM107CisJX191MzIgaGFzaFs0XTsKKwlfX3UzMiBibG9ja1s0XTsKKwlfX3UzMiBoYXNoWzVdOworCV9fdTMyIGJsb2NrWzVdOworCV9fdTMyIGhhc2hbNl07CisJX191MzIgYmxvY2tbNl07CisJX191MzIgaGFzaFs3XTsKKwlfX3UzMiBibG9ja1s3XTsKKwlfX3UzMiBoYXNoWzhdOworCV9fdTMyIGJsb2NrWzhdOworCV9fdTMyIGhhc2hbOV07CisJX191MzIgYmxvY2tbOV07CisJX191MzIgaGFzaFsxMF07CisJX191MzIgYmxvY2tbMTBdOworCV9fdTMyIGhhc2hbMTFdOworCV9fdTMyIGJsb2NrWzExXTsKKwlfX3UzMiBoYXNoWzEyXTsKKwlfX3UzMiBibG9ja1sxMl07CisJX191MzIgaGFzaFsxM107CisJX191MzIgYmxvY2tbMTNdOworCV9fdTMyIGhhc2hbMTRdOworCV9fdTMyIGJsb2NrWzE0XTsKKwlfX3UzMiBoYXNoWzE1XTsKKwlfX3UzMiBibG9ja1sxNV07CisJX191MzIgaGFzaFsxNl07CisJX191MzIgYmxvY2tbMTZdOworCV9fdTMyIGhhc2hbMTddOworCV9fdTMyIGJsb2NrWzE3XTsKKwlfX3UzMiBoYXNoWzE4XTsKKwlfX3UzMiBibG9ja1sxOF07CisJX191MzIgaGFzaFsxOV07CisJX191MzIgYmxvY2tbMTldOworCV9fdTMyIGhhc2hbMjBdOworCV9fdTMyIGJsb2NrWzIwXTsKKwlfX3UzMiBoYXNoWzIxXTsKKwlfX3UzMiBibG9ja1syMV07CisJX191MzIgaGFzaFsyMl07CisJX191MzIgYmxvY2tbMjJdOworCV9fdTMyIGhhc2hbMjNdOworCV9fdTMyIGJsb2NrWzIzXTsKKwlfX3UzMiBoYXNoWzI0XTsKKwlfX3UzMiBibG9ja1syNF07CisJX191MzIgaGFzaFsyNV07CisJX191MzIgYmxvY2tbMjVdOworCV9fdTMyIGhhc2hbMjZdOworCV9fdTMyIGJsb2NrWzI2XTsKKwlfX3UzMiBoYXNoWzI3XTsKKwlfX3UzMiBibG9ja1syN107CisJX191MzIgaGFzaFsyOF07CisJX191MzIgYmxvY2tbMjhdOworCV9fdTMyIGhhc2hbMjldOworCV9fdTMyIGJsb2NrWzI5XTsKKwlfX3UzMiBoYXNoWzMwXTsKKwlfX3UzMiBibG9ja1szMF07CisJX191MzIgaGFzaFszMV07CisJX191MzIgYmxvY2tbMzFdOworCV9fdTMyIGhhc2hbMzJdOworCV9fdTMyIGJsb2NrWzMyXTsKKwlfX3UzMiBoYXNoWzMzXTsKKwlfX3UzMiBibG9ja1szM107CisJX191MzIgaGFzaFszNF07CisJX191MzIgYmxvY2tbMzRdOworCV9fdTMyIGhhc2hbMzVdOworCV9fdTMyIGJsb2NrWzM1XTsKKwlfX3UzMiBoYXNoWzM2XTsKKwlfX3UzMiBibG9ja1szNl07CisJX191MzIgaGFzaFszN107CisJX191MzIgYmxvY2tbMzddOworCV9fdTMyIGhhc2hbMzhdOworCV9fdTMyIGJsb2NrWzM4XTsKKwlfX3UzMiBoYXNoWzM5XTsKKwlfX3UzMiBibG9ja1szOV07CisJX191MzIgaGFzaFs0MF07CisJX191MzIgYmxvY2tbNDBdOworCV9fdTMyIGhhc2hbNDFdOworCV9fdTMyIGJsb2NrWzQxXTsKKwlfX3UzMiBoYXNoWzQyXTsKKwlfX3UzMiBibG9ja1s0Ml07CisJX191MzIgaGFzaFs0M107CisJX191MzIgYmxvY2tbNDNdOworCV9fdTMyIGhhc2hbNDRdOworCV9fdTMyIGJsb2NrWzQ0XTsKKwlfX3UzMiBoYXNoWzQ1XTsKKwlfX3UzMiBibG9ja1s0NV07CisJX191MzIgaGFzaFs0Nl07CisJX191MzIgYmxvY2tbNDZdOworCV9fdTMyIGhhc2hbNDddOworCV9fdTMyIGJsb2NrWzQ3XTsKKwlfX3UzMiBoYXNoWzQ4XTsKKwlfX3UzMiBibG9ja1s0OF07CisJX191MzIgaGFzaFs0OV07CisJX191MzIgYmxvY2tbNDldOworCV9fdTMyIGhhc2hbNTBdOworCV9fdTMyIGJsb2NrWzUwXTsKKwlfX3UzMiBoYXNoWzUxXTsKKwlfX3UzMiBibG9ja1s1MV07CisJX191MzIgaGFzaFs1Ml07CisJX191MzIgYmxvY2tbNTJdOworCV9fdTMyIGhhc2hbNTNdOworCV9fdTMyIGJsb2NrWzUzXTsKKwlfX3UzMiBoYXNoWzU0XTsKKwlfX3UzMiBibG9ja1s1NF07CisJX191MzIgaGFzaFs1NV07CisJX191MzIgYmxvY2tbNTVdOworCV9fdTMyIGhhc2hbNTZdOworCV9fdTMyIGJsb2NrWzU2XTsKKwlfX3UzMiBoYXNoWzU3XTsKKwlfX3UzMiBibG9ja1s1N107CisJX191MzIgaGFzaFs1OF07CisJX191MzIgYmxvY2tbNThdOworCV9fdTMyIGhhc2hbNTldOworCV9fdTMyIGJsb2NrWzU5XTsKKwlfX3UzMiBoYXNoWzYwXTsKKwlfX3UzMiBibG9ja1s2MF07CisJX191MzIgaGFzaFs2MV07CisJX191MzIgYmxvY2tbNjFdOworCV9fdTMyIGhhc2hbNjJdOworCV9fdTMyIGJsb2NrWzYyXTsKKwlfX3UzMiBoYXNoWzYzXTsKKwlfX3UzMiBibG9ja1s2M107CisJX191MzIgaGFzaFs2NF07CisJX191MzIgYmxvY2tbNjRdOworCV9fdTMyIGhhc2hbNjVdOworCV9fdTMyIGJsb2NrWzY1XTsKKwlfX3UzMiBoYXNoWzY2XTsKKwlfX3UzMiBibG9ja1s2Nl07CisJX191MzIgaGFzaFs2N107CisJX191MzIgYmxvY2tbNjddOworCV9fdTMyIGhhc2hbNjhdOworCV9fdTMyIGJsb2NrWzY4XTsKKwlfX3UzMiBoYXNoWzY5XTsKKwlfX3UzMiBibG9ja1s2OV07CisJX191MzIgaGFzaFs3MF07CisJX191MzIgYmxvY2tbNzBdOworCV9fdTMyIGhhc2hbNzFdOworCV9fdTMyIGJsb2NrWzcxXTsKKwlfX3UzMiBoYXNoWzcyXTsKKwlfX3UzMiBibG9ja1s3Ml07CisJX191MzIgaGFzaFs3M107CisJX191MzIgYmxvY2tbNzNdOworCV9fdTMyIGhhc2hbNzRdOworCV9fdTMyIGJsb2NrWzc0XTsKKwlfX3UzMiBoYXNoWzc1XTsKKwlfX3UzMiBibG9ja1s3NV07CisJX191MzIgaGFzaFs3Nl07CisJX191MzIgYmxvY2tbNzZdOworCV9fdTMyIGhhc2hbNzddOworCV9fdTMyIGJsb2NrWzc3XTsKKwlfX3UzMiBoYXNoWzc4XTsKKwlfX3UzMiBibG9ja1s3OF07CisJX191MzIgaGFzaFs3OV07CisJX191MzIgYmxvY2tbNzldOworCV9fdTMyIGhhc2hbODBdOworCV9fdTMyIGJsb2NrWzgwXTsKKwlfX3UzMiBoYXNoWzgxXTsKKwlfX3UzMiBibG9ja1s4MV07CisJX191MzIgaGFzaFs4Ml07CisJX191MzIgYmxvY2tbODJdOworCV9fdTMyIGhhc2hbODNdOworCV9fdTMyIGJsb2NrWzgzXTsKKwlfX3UzMiBoYXNoWzg0XTsKKwlfX3UzMiBibG9ja1s4NF07CisJX191MzIgaGFzaFs4NV07CisJX191MzIgYmxvY2tbODVdOworCV9fdTMyIGhhc2hbODZdOworCV9fdTMyIGJsb2NrWzg2XTsKKwlfX3UzMiBoYXNoWzg3XTsKKwlfX3UzMiBibG9ja1s4N107CisJX191MzIgaGFzaFs4OF07CisJX191MzIgYmxvY2tbODhdOworCV9fdTMyIGhhc2hbODldOworCV9fdTMyIGJsb2NrWzg5XTsKKwlfX3UzMiBoYXNoWzgwXTsKKwlfX3UzMiBibG9ja1s4MF07CisJX191MzIgaGFzaFs4MV07CisJX191MzIgYmxvY2tbODFdOworCV9fdTMyIGhhc2hbODJdOworCV9fdTMyIGJsb2NrWzgyXTsKKwlfX3UzMiBoYXNoWzgzXTsKKwlfX3UzMiBibG9ja1s4M107CisJX191MzIgaGFzaFs4NF07CisJX191MzIgYmxvY2tbODRdOworCV9fdTMyIGhhc2hbODVdOworCV9fdTMyIGJsb2NrWzg1XTsKKwlfX3UzMiBoYXNoWzg2XTsKKwlfX3UzMiBibG9ja1s4Nl07CisJX191MzIgaGFzaFs4N107CisJX191MzIgYmxvY2tbODddOworCV9fdTMyIGhhc2hbODhdOworCV9fdTMyIGJsb2NrWzg4XTsKKwlfX3UzMiBoYXNoWzg5XTsKKwlfX3UzMiBibG9ja1s4OV07CisJX191MzIgaGFzaFs5MF07CisJX191MzIgYmxvY2tbOTBdOworCV9fdTMyIGhhc2hbOTFdOworCV9fdTMyIGJsb2NrWzkxXTsKKwlfX3UzMiBoYXNoWzkyXTsKKwlfX3UzMiBibG9ja1s5Ml07CisJX191MzIgaGFzaFs5M107CisJX191MzIgYmxvY2tbOTNdOworCV9fdTMyIGhhc2hbOTRdOworCV9fdTMyIGJsb2NrWzk0XTsKKwlfX3UzMiBoYXNoWzk1XTsKKwlfX3UzMiBibG9ja1s5NV07CisJX191MzIgaGFzaFs5Nl07CisJX191MzIgYmxvY2tbOTZdOworCV9fdTMyIGhhc2hbOTddOworCV9fdTMyIGJsb2NrWzk3XTsKKwlfX3UzMiBoYXNoWzk4XTsKKwlfX3UzMiBibG9ja1s5OF07CisJX191MzIgaGFzaFs5OV07CisJX191MzIgYmxvY2tbOTldOworCV9fdTMyIGhhc2hbMTAwXTsKKwlfX3UzMiBibG9ja1sxMDBdOworCV9fdTMyIGhhc2hbMTAxXTsKKwlfX3UzMiBibG9ja1sxMDFdOworCV9fdTMyIGhhc2hbMTAyXTsKKwlfX3UzMiBibG9ja1sxMDJdOworCV9fdTMyIGhhc2hbMTAzXTsKKwlfX3UzMiBibG9ja1sxMDNdOworCV9fdTMyIGhhc2hbMTA0XTsKKwlfX3UzMiBibG9ja1sxMDRdOworCV9fdTMyIGhhc2hbMTA1XTsKKwlfX3UzMiBibG9ja1sxMDVdOworCV9fdTMyIGhhc2hbMTA2XTsKKwlfX3UzMiBibG9ja1sxMDZdOworCV9fdTMyIGhhc2hbMTA3XTsKKwlfX3UzMiBibG9ja1sxMDddOworCV9fdTMyIGhhc2hbMTA4XTsKKwlfX3UzMiBibG9ja1sxMDhdOworCV9fdTMyIGhhc2hbMTA5XTsKKwlfX3UzMiBibG9ja1sxMDldOworCV9fdTMyIGhhc2hbMTEwXTsKKwlfX3UzMiBibG9ja1sxMTBdOworCV9fdTMyIGhhc2hbMTExXTsKKwlfX3UzMiBibG9ja1sxMTFdOworCV9fdTMyIGhhc2hbMTEyXTsKKwlfX3UzMiBibG9ja1sxMTJdOworCV9fdTMyIGhhc2hbMTEzXTsKKwlfX3UzMiBibG9ja1sxMTNdOworCV9fdTMyIGhhc2hbMTE0XTsKKwlfX3UzMiBibG9ja1sxMTRdOworCV9fdTMyIGhhc2hbMTE1XTsKKwlfX3UzMiBibG9ja1sxMTVdOworCV9fdTMyIGhhc2hbMTE2XTsKKwlfX3UzMiBibG9ja1sxMTZdOworCV9fdTMyIGhhc2hbMTE3XTsKKwlfX3UzMiBibG9ja1sxMTddOworCV9fdTMyIGhhc2hbMTE4XTsKKwlfX3UzMiBibG9ja1sxMThdOworCV9fdTMyIGhhc2hbMTE5XTsKKwlfX3UzMiBibG9ja1sxMTldOworCV9fdTMyIGhhc2hbMTIwXTsKKwlfX3UzMiBibG9ja1sxMjBdOworCV9fdTMyIGhhc2hbMTIxXTsKKwlfX3UzMiBibG9ja1sxMjFdOworCV9fdTMyIGhhc2hbMTIyXTsKKwlfX3UzMiBibG9ja1sxMjJdOworCV9fdTMyIGhhc2hbMTIzXTsKKwlfX3UzMiBibG9ja1sxMjNdOworCV9fdTMyIGhhc2hbMTI0XTsKKwlfX3UzMiBibG9ja1sxMjRdOworCV9fdTMyIGhhc2hbMTI1XTsKKwlfX3UzMiBibG9ja1sxMjVdOworCV9fdTMyIGhhc2hbMTI2XTsKKwlfX3UzMiBibG9ja1sxMjZdOworCV9fdTMyIGhhc2hbMTI3XTsKKwlfX3UzMiBibG9ja1sxMjddOworfTsKKworc3RydWN0IGV4dDJfZHhfaW50X25vZGUgeworCV9fdTMyIGZha2VfaW5vZGU7CisJX191MTYgZmFrZV9yZWNfbGVuOworCV9fdTggZmFrZV9uYW1lX2xlbjsKKwlfX3U4IGZha2VfZmlsZV90eXBlOworCV9fdTE2IGxpbWl0OworCV9fdTE2IGNvdW50OworCV9fdTMyIGJsb2NrWzBdOworCV9fdTMyIGhhc2hbMV07CisJX191MzIgYmxvY2tbMV07CisJX191MzIgaGFzaFsyXTsKKwlfX3UzMiBibG9ja1syXTsKKwlfX3UzMiBoYXNoWzNdOworCV9fdTMyIGJsb2NrWzNdOworCV9fdTMyIGhhc2hbNF07CisJX191MzIgYmxvY2tbNF07CisJX191MzIgaGFzaFs1XTsKKwlfX3UzMiBibG9ja1s1XTsKKwlfX3UzMiBoYXNoWzZdOworCV9fdTMyIGJsb2NrWzZdOworCV9fdTMyIGhhc2hbN107CisJX191MzIgYmxvY2tbN107CisJX191MzIgaGFzaFs4XTsKKwlfX3UzMiBibG9ja1s4XTsKKwlfX3UzMiBoYXNoWzldOworCV9fdTMyIGJsb2NrWzldOworCV9fdTMyIGhhc2hbMTBdOworCV9fdTMyIGJsb2NrWzEwXTsKKwlfX3UzMiBoYXNoWzExXTsKKwlfX3UzMiBibG9ja1sxMV07CisJX191MzIgaGFzaFsxMl07CisJX191MzIgYmxvY2tbMTJdOworCV9fdTMyIGhhc2hbMTNdOworCV9fdTMyIGJsb2NrWzEzXTsKKwlfX3UzMiBoYXNoWzE0XTsKKwlfX3UzMiBibG9ja1sxNF07CisJX191MzIgaGFzaFsxNV07CisJX191MzIgYmxvY2tbMTVdOworCV9fdTMyIGhhc2hbMTZdOworCV9fdTMyIGJsb2NrWzE2XTsKKwlfX3UzMiBoYXNoWzE3XTsKKwlfX3UzMiBibG9ja1sxN107CisJX191MzIgaGFzaFsxOF07CisJX191MzIgYmxvY2tbMThdOworCV9fdTMyIGhhc2hbMTldOworCV9fdTMyIGJsb2NrWzE5XTsKKwlfX3UzMiBoYXNoWzIwXTsKKwlfX3UzMiBibG9ja1syMF07CisJX191MzIgaGFzaFsyMV07CisJX191MzIgYmxvY2tbMjFdOworCV9fdTMyIGhhc2hbMjJdOworCV9fdTMyIGJsb2NrWzIyXTsKKwlfX3UzMiBoYXNoWzIzXTsKKwlfX3UzMiBibG9ja1syM107CisJX191MzIgaGFzaFsyNF07CisJX191MzIgYmxvY2tbMjRdOworCV9fdTMyIGhhc2hbMjVdOworCV9fdTMyIGJsb2NrWzI1XTsKKwlfX3UzMiBoYXNoWzI2XTsKKwlfX3UzMiBibG9ja1syNl07CisJX191MzIgaGFzaFsyN107CisJX191MzIgYmxvY2tbMjddOworCV9fdTMyIGhhc2hbMjhdOworCV9fdTMyIGJsb2NrWzI4XTsKKwlfX3UzMiBoYXNoWzI5XTsKKwlfX3UzMiBibG9ja1syOV07CisJX191MzIgaGFzaFszMF07CisJX191MzIgYmxvY2tbMzBdOworCV9fdTMyIGhhc2hbMzFdOworCV9fdTMyIGJsb2NrWzMxXTsKKwlfX3UzMiBoYXNoWzMyXTsKKwlfX3UzMiBibG9ja1szMl07CisJX191MzIgaGFzaFszM107CisJX191MzIgYmxvY2tbMzNdOworCV9fdTMyIGhhc2hbMzRdOworCV9fdTMyIGJsb2NrWzM0XTsKKwlfX3UzMiBoYXNoWzM1XTsKKwlfX3UzMiBibG9ja1szNV07CisJX191MzIgaGFzaFszNl07CisJX191MzIgYmxvY2tbMzZdOworCV9fdTMyIGhhc2hbMzddOworCV9fdTMyIGJsb2NrWzM3XTsKKwlfX3UzMiBoYXNoWzM4XTsKKwlfX3UzMiBibG9ja1szOF07CisJX191MzIgaGFzaFszOV07CisJX191MzIgYmxvY2tbMzldOworCV9fdTMyIGhhc2hbNDBdOworCV9fdTMyIGJsb2NrWzQwXTsKKwlfX3UzMiBoYXNoWzQxXTsKKwlfX3UzMiBibG9ja1s0MV07CisJX191MzIgaGFzaFs0Ml07CisJX191MzIgYmxvY2tbNDJdOworCV9fdTMyIGhhc2hbNDNdOworCV9fdTMyIGJsb2NrWzQzXTsKKwlfX3UzMiBoYXNoWzQ0XTsKKwlfX3UzMiBibG9ja1s0NF07CisJX191MzIgaGFzaFs0NV07CisJX191MzIgYmxvY2tbNDVdOworCV9fdTMyIGhhc2hbNDZdOworCV9fdTMyIGJsb2NrWzQ2XTsKKwlfX3UzMiBoYXNoWzQ3XTsKKwlfX3UzMiBibG9ja1s0N107CisJX191MzIgaGFzaFs0OF07CisJX191MzIgYmxvY2tbNDhdOworCV9fdTMyIGhhc2hbNDldOworCV9fdTMyIGJsb2NrWzQ5XTsKKwlfX3UzMiBoYXNoWzUwXTsKKwlfX3UzMiBibG9ja1s1MF07CisJX191MzIgaGFzaFs1MV07CisJX191MzIgYmxvY2tbNTFdOworCV9fdTMyIGhhc2hbNTJdOworCV9fdTMyIGJsb2NrWzUyXTsKKwlfX3UzMiBoYXNoWzUzXTsKKwlfX3UzMiBibG9ja1s1M107CisJX191MzIgaGFzaFs1NF07CisJX191MzIgYmxvY2tbNTRdOworCV9fdTMyIGhhc2hbNTVdOworCV9fdTMyIGJsb2NrWzU1XTsKKwlfX3UzMiBoYXNoWzU2XTsKKwlfX3UzMiBibG9ja1s1Nl07CisJX191MzIgaGFzaFs1N107CisJX191MzIgYmxvY2tbNTddOworCV9fdTMyIGhhc2hbNThdOworCV9fdTMyIGJsb2NrWzU4XTsKKwlfX3UzMiBoYXNoWzU5XTsKKwlfX3UzMiBibG9ja1s1OV07CisJX191MzIgaGFzaFs2MF07CisJX191MzIgYmxvY2tbNjBdOworCV9fdTMyIGhhc2hbNjFdOworCV9fdTMyIGJsb2NrWzYxXTsKKwlfX3UzMiBoYXNoWzYyXTsKKwlfX3UzMiBibG9ja1s2Ml07CisJX191MzIgaGFzaFs2M107CisJX191MzIgYmxvY2tbNjNdOworCV9fdTMyIGhhc2hbNjRdOworCV9fdTMyIGJsb2NrWzY0XTsKKwlfX3UzMiBoYXNoWzY1XTsKKwlfX3UzMiBibG9ja1s2NV07CisJX191MzIgaGFzaFs2Nl07CisJX191MzIgYmxvY2tbNjZdOworCV9fdTMyIGhhc2hbNjddOworCV9fdTMyIGJsb2NrWzY3XTsKKwlfX3UzMiBoYXNoWzY4XTsKKwlfX3UzMiBibG9ja1s2OF07CisJX191MzIgaGFzaFs2OV07CisJX191MzIgYmxvY2tbNjldOworCV9fdTMyIGhhc2hbNzBdOworCV9fdTMyIGJsb2NrWzcwXTsKKwlfX3UzMiBoYXNoWzcxXTsKKwlfX3UzMiBibG9ja1s3MV07CisJX191MzIgaGFzaFs3Ml07CisJX191MzIgYmxvY2tbNzJdOworCV9fdTMyIGhhc2hbNzNdOworCV9fdTMyIGJsb2NrWzczXTsKKwlfX3UzMiBoYXNoWzc0XTsKKwlfX3UzMiBibG9ja1s3NF07CisJX191MzIgaGFzaFs3NV07CisJX191MzIgYmxvY2tbNzVdOworCV9fdTMyIGhhc2hbNzZdOworCV9fdTMyIGJsb2NrWzc2XTsKKwlfX3UzMiBoYXNoWzc3XTsKKwlfX3UzMiBibG9ja1s3N107CisJX191MzIgaGFzaFs3OF07CisJX191MzIgYmxvY2tbNzhdOworCV9fdTMyIGhhc2hbNzldOworCV9fdTMyIGJsb2NrWzc5XTsKKwlfX3UzMiBoYXNoWzgwXTsKKwlfX3UzMiBibG9ja1s4MF07CisJX191MzIgaGFzaFs4MV07CisJX191MzIgYmxvY2tbODFdOworCV9fdTMyIGhhc2hbODJdOworCV9fdTMyIGJsb2NrWzgyXTsKKwlfX3UzMiBoYXNoWzgzXTsKKwlfX3UzMiBibG9ja1s4M107CisJX191MzIgaGFzaFs4NF07CisJX191MzIgYmxvY2tbODRdOworCV9fdTMyIGhhc2hbODVdOworCV9fdTMyIGJsb2NrWzg1XTsKKwlfX3UzMiBoYXNoWzg2XTsKKwlfX3UzMiBibG9ja1s4Nl07CisJX191MzIgaGFzaFs4N107CisJX191MzIgYmxvY2tbODddOworCV9fdTMyIGhhc2hbODhdOworCV9fdTMyIGJsb2NrWzg4XTsKKwlfX3UzMiBoYXNoWzg5XTsKKwlfX3UzMiBibG9ja1s4OV07CisJX191MzIgaGFzaFs4MF07CisJX191MzIgYmxvY2tbODBdOworCV9fdTMyIGhhc2hbODFdOworCV9fdTMyIGJsb2NrWzgxXTsKKwlfX3UzMiBoYXNoWzgyXTsKKwlfX3UzMiBibG9ja1s4Ml07CisJX191MzIgaGFzaFs4M107CisJX191MzIgYmxvY2tbODNdOworCV9fdTMyIGhhc2hbODRdOworCV9fdTMyIGJsb2NrWzg0XTsKKwlfX3UzMiBoYXNoWzg1XTsKKwlfX3UzMiBibG9ja1s4NV07CisJX191MzIgaGFzaFs4Nl07CisJX191MzIgYmxvY2tbODZdOworCV9fdTMyIGhhc2hbODddOworCV9fdTMyIGJsb2NrWzg3XTsKKwlfX3UzMiBoYXNoWzg4XTsKKwlfX3UzMiBibG9ja1s4OF07CisJX191MzIgaGFzaFs4OV07CisJX191MzIgYmxvY2tbODldOworCV9fdTMyIGhhc2hbOTBdOworCV9fdTMyIGJsb2NrWzkwXTsKKwlfX3UzMiBoYXNoWzkxXTsKKwlfX3UzMiBibG9ja1s5MV07CisJX191MzIgaGFzaFs5Ml07CisJX191MzIgYmxvY2tbOTJdOworCV9fdTMyIGhhc2hbOTNdOworCV9fdTMyIGJsb2NrWzkzXTsKKwlfX3UzMiBoYXNoWzk0XTsKKwlfX3UzMiBibG9ja1s5NF07CisJX191MzIgaGFzaFs5NV07CisJX191MzIgYmxvY2tbOTVdOworCV9fdTMyIGhhc2hbOTZdOworCV9fdTMyIGJsb2NrWzk2XTsKKwlfX3UzMiBoYXNoWzk3XTsKKwlfX3UzMiBibG9ja1s5N107CisJX191MzIgaGFzaFs5OF07CisJX191MzIgYmxvY2tbOThdOworCV9fdTMyIGhhc2hbOTldOworCV9fdTMyIGJsb2NrWzk5XTsKKwlfX3UzMiBoYXNoWzEwMF07CisJX191MzIgYmxvY2tbMTAwXTsKKwlfX3UzMiBoYXNoWzEwMV07CisJX191MzIgYmxvY2tbMTAxXTsKKwlfX3UzMiBoYXNoWzEwMl07CisJX191MzIgYmxvY2tbMTAyXTsKKwlfX3UzMiBoYXNoWzEwM107CisJX191MzIgYmxvY2tbMTAzXTsKKwlfX3UzMiBoYXNoWzEwNF07CisJX191MzIgYmxvY2tbMTA0XTsKKwlfX3UzMiBoYXNoWzEwNV07CisJX191MzIgYmxvY2tbMTA1XTsKKwlfX3UzMiBoYXNoWzEwNl07CisJX191MzIgYmxvY2tbMTA2XTsKKwlfX3UzMiBoYXNoWzEwN107CisJX191MzIgYmxvY2tbMTA3XTsKKwlfX3UzMiBoYXNoWzEwOF07CisJX191MzIgYmxvY2tbMTA4XTsKKwlfX3UzMiBoYXNoWzEwOV07CisJX191MzIgYmxvY2tbMTA5XTsKKwlfX3UzMiBoYXNoWzExMF07CisJX191MzIgYmxvY2tbMTEwXTsKKwlfX3UzMiBoYXNoWzExMV07CisJX191MzIgYmxvY2tbMTExXTsKKwlfX3UzMiBoYXNoWzExMl07CisJX191MzIgYmxvY2tbMTEyXTsKKwlfX3UzMiBoYXNoWzExM107CisJX191MzIgYmxvY2tbMTEzXTsKKwlfX3UzMiBoYXNoWzExNF07CisJX191MzIgYmxvY2tbMTE0XTsKKwlfX3UzMiBoYXNoWzExNV07CisJX191MzIgYmxvY2tbMTE1XTsKKwlfX3UzMiBoYXNoWzExNl07CisJX191MzIgYmxvY2tbMTE2XTsKKwlfX3UzMiBoYXNoWzExN107CisJX191MzIgYmxvY2tbMTE3XTsKKwlfX3UzMiBoYXNoWzExOF07CisJX191MzIgYmxvY2tbMTE4XTsKKwlfX3UzMiBoYXNoWzExOV07CisJX191MzIgYmxvY2tbMTE5XTsKKwlfX3UzMiBoYXNoWzEyMF07CisJX191MzIgYmxvY2tbMTIwXTsKKwlfX3UzMiBoYXNoWzEyMV07CisJX191MzIgYmxvY2tbMTIxXTsKKwlfX3UzMiBoYXNoWzEyMl07CisJX191MzIgYmxvY2tbMTIyXTsKKwlfX3UzMiBoYXNoWzEyM107CisJX191MzIgYmxvY2tbMTIzXTsKKwlfX3UzMiBoYXNoWzEyNF07CisJX191MzIgYmxvY2tbMTI0XTsKKwlfX3UzMiBoYXNoWzEyNV07CisJX191MzIgYmxvY2tbMTI1XTsKKwlfX3UzMiBoYXNoWzEyNl07CisJX191MzIgYmxvY2tbMTI2XTsKKwlfX3UzMiBoYXNoWzEyN107CisJX191MzIgYmxvY2tbMTI3XTsKK307CisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9leHQyX2NvbS5jIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyX2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjBhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2V4dDJfY29tLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2V4dDJfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXh0ZW5kZWQtMiBmaWxlc3lzdGVtIEdlbmVyYWwgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kcyBoZXJlIHdpbGwgYmUgcmVnaXN0ZXJlZCB3aGVuIHdlIGFyZSBlZGl0aW5nIGFuIGV4dDIgZmlsZXN5c3RlbQorCitGaXJzdCB3cml0dGVuIG9uOiBKdWx5IDI4IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKwordm9pZCB0eXBlX2V4dDJfX19zdXBlciAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitXZSBhcmUgbW92aW5nIHRvIHRoZSBzdXBlcmJsb2NrIC0gSnVzdCB1c2Ugc2V0b2Zmc2V0IGFuZCBzZXR0eXBlLiBUaGUgb2Zmc2V0IHdhcyBnYXRoZXJlZCBpbiB0aGUKK2luaXRpYWxpemF0aW9uIHBoYXNlIChidXQgaXMgY29uc3RhbnQgLSAxMDI0KS4KKworKi8KKworeworCWNoYXIgYnVmZmVyIFs4MF07CisKKwlzdXBlcl9pbmZvLmNvcHlfbnVtPTA7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfc3VwZXJfYmxvY2siKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfX19jZCAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitBIGdsb2JhbCBjZCBjb21tYW5kIC0gVGhlIHBhdGggc2hvdWxkIHN0YXJ0IHdpdGggLy4KKworV2UgaW1wbGVtZW50IGl0IHRocm91Z2ggZGlzcGF0Y2hpbmcgdG8gb3VyIHByaW1pdGl2ZSBmdW5jdGlvbnMuCisKKyovCisKK3sKKwljaGFyIHRlbXAgWzgwXSxidWZmZXIgWzgwXSwqcHRyOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWlmIChidWZmZXIgWzBdICE9ICcvJykgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBVc2UgYSBmdWxsIHBhdGhuYW1lIChiZWdpbiB3aXRoICcvJylcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCS8qIE5vdGUgdGhlIHZhcmlvdXMgZGlzcGF0Y2hlcyBiZWxvdyAtIFRoZXkgc2hvdWxkIGJlIGludHVpdGl2ZSBpZiB5b3Uga25vdyB0aGUgZXh0MiBmaWxlc3lzdGVtIHN0cnVjdHVyZSAqLworCisJZGlzcGF0Y2ggKCJzdXBlciIpO2Rpc3BhdGNoICgiZ3JvdXAiKTtkaXNwYXRjaCAoImlub2RlIik7ZGlzcGF0Y2ggKCJuZXh0Iik7ZGlzcGF0Y2ggKCJkaXIiKTsKKwlpZiAoYnVmZmVyIFsxXSAhPSAwKSB7CisJCXNwcmludGYgKHRlbXAsImNkICVzIixidWZmZXIrMSk7ZGlzcGF0Y2ggKHRlbXApOworCX0KK30KKwordm9pZCB0eXBlX2V4dDJfX19ncm91cCAoY2hhciAqY29tbWFuZF9saW5lKQorCisvKgorCitXZSBnbyB0byB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMuCitGaXJzdCwgd2UgZ28gdG8gdGhlIGZpcnN0IGdyb3VwIGRlc2NyaXB0b3IgaW4gdGhlIG1haW4gY29weS4KK1RoZW4sIHdlIHVzZSB0aGUgZ3JvdXAncyBlbnRyeSBjb21tYW5kIHRvIHBhc3MgdG8gYW5vdGhlciBncm91cC4KKworKi8KKworeworCWxvbmcgZ3JvdXBfbnVtPTA7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZ3JvdXBfbnVtPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJZ3JvdXBfaW5mby5jb3B5X251bT0wO2dyb3VwX2luZm8uZ3JvdXBfbnVtPTA7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixmaWxlX3N5c3RlbV9pbmZvLmZpcnN0X2dyb3VwX2Rlc2Nfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgZXh0Ml9ncm91cF9kZXNjIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGdyb3VwX251bSk7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2V4dDJlZC44LmluIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyZWQuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ2YjMzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyZWQuOC5pbgpAQCAtMCwwICsxLDcyIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlRIIEVYVDJFRCA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitleHQyZWQgXC0gZXh0MiBmaWxlIHN5c3RlbSBlZGl0b3IKKy5TSCBTWU5PUFNJUworLkIgZXh0MmVkCisuU0ggREVTQ1JJUFRJT04KKy5CIGV4dDJlZAoraW4gYW4gCisuQiBlZGl0b3IKK2ZvciB0aGUKKy5CIHNlY29uZCBleHRlbmRlZCBmaWxlc3lzdGVtLgorSXRzIGFpbSBpcyB0byBzaG93IHlvdSB0aGUgdmFyaW91cyBpbnRlcm5hbCBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgaW4gYW4KK2ludHVpdGl2ZSBmb3JtIHNvIHRoYXQgeW91IHdvdWxkIGJlIGFibGUgdG8gZWFzaWx5IHVuZGVyc3RhbmQgYW5kIG1vZGlmeQordGhlbS4KKy5TSCBET0NVTUVOVEFUSU9OCitUaGUgZG9jdW1lbnRhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIG1hbiBwYWdlIGZvcm1hdC4gSW5zdGVhZCwgSSBoYXZlCit3cml0dGVuIHRocmVlIGFydGljbGVzIHdoaWNoIGFyZSByZWxhdGVkIHRvIGV4dDJlZDoKKworVGhlIGZpcnN0IGFydGljbGUgaXMKKy5CIFRoZSB1c2VyJ3MgZ3VpZGUuCitUaGlzIGFydGljbGUgZXhwbGFpbnMgaG93IHRvIHVzZSBleHQyZWQuCisKK1RoZSBzZWNvbmQgYXJ0aWNsZSBpcworLkIgVGhlIEV4dDJmcyBvdmVydmlldy4KK1RoaXMgYXJ0aWNsZSBnaXZlcyBhbiBvdmVydmlldyBvZiBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbS4KK1lvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFsIGxheW91dCBpbiBvcmRlciB0byBlZmZlY3RpdmVseSBlZGl0Cit5b3VyIGZpbGVzeXN0ZW0uCisKK1RoZSB0aGlyZCBhcnRpY2xlIGlzCisuQiBFWFQyRUQgLSBEZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLgorVGhpcyBhcnRpY2xlIGV4cGxhaW5zIGhvdyBJIGNvbnN0cnVjdGVkIGV4dDJlZC4gWW91IG1heSB3YW50IHRvIGhhdmUgYSBsb29rCitpbiBpdCBpZiB5b3UgcGxhbiB0byB2aWV3IG9yIG1vZGlmeSB0aGUgc291cmNlIGNvZGUuCisKKy5TSCBXQVJOSU5HCisKKy5CCitEbyBub3QgdXNlIGV4dDJlZCBvbiBhIG1vdW50ZWQgZmlsZXN5c3RlbS4KKworLlNIIEZJTEVTCisuVFAKKy5JIC91c3IvYmluL2V4dDJlZAorVGhlIHByb2dyYW0gaXRzZWxmLgorLlRQCisuSSBAcm9vdF9zeXNjb25mZGlyQC9leHQyZWQuY29uZgorZXh0MmVkJ3MgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuSSBAZGF0YWRpckAvZXh0Mi5kZXNjcmlwdG9ycworRGVmaW5pdGlvbiBvZiB0aGUgdmFyaW91cyBvYmplY3RzIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtLgorLlRQCisuSSAvdmFyL2xvZy9leHQyZWQubG9nCitMb2cgZmlsZSBvZiBhY3R1YWwgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlc3lzdGVtLgorLlRQCisuSSAvdXNyL21hbi9tYW44L2V4dDJlZC44CitUaGUgbWFudWFsIHBhZ2UuCisuVFAKKy5JIEBkYXRhZGlyQC9kb2MvZXh0MmVkL3VzZXItZ3VpZGUtMC4xLnBzCitUaGUgdXNlcidzIGd1aWRlLgorLlRQCisuSSBAZGF0YWRpckAvZG9jL2V4dDJlZC9FeHQyZnMtb3ZlcnZpZXctMC4xLnBzCitUZWNobmljYWwgb3ZlcnZpZXcgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbS4KKy5UUAorLkkgQGRhdGFkaXJAL2RvYy9leHQyZWQvZXh0MmVkLWRlc2lnbi0wLjEucHMKK0VYVDJFRCBkZXNpZ24gbm90ZXMuCisKKy5TSCBCVUdTCitGaWxlc3lzdGVtcyBiaWdnZXIgdGhhbiAyIEdCIGFyZW4ndCB5ZXQgc3VwcG9ydGVkLgorLlNIIEFVVEhPUgorR2FkaSBPeG1hbiA8dGd1ZEB0b2NobmFwYzIudGVjaG5pb24uYWMuaWw+CisuU0ggU0VFIEFMU08KKy5CUiBlMmZzY2sgKDgpLAorLkJSIGRlYnVnZnMgKDgpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2V4dDJlZC5jb25mLmluIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyZWQuY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTJhOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9leHQyZWQuY29uZi5pbgpAQCAtMCwwICsxLDc5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZXh0MmVkLmNvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGV4dGVuZGVkIDIgZmlsZSBzeXN0ZW0gZGlzayBlZGl0b3IuICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEV4dDJEZXNjcmlwdG9ycyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUKKyMgZGVmaW5pdGlvbnMuCisKKworRXh0MkRlc2NyaXB0b3JzCQlAZGF0YWRpckAvZXh0Mi5kZXNjcmlwdG9ycyAKKworCisjIFVzaW5nIEFsdGVybmF0ZURlc2NyaXB0b3JzIHlvdSBjYW4gZGVjbGFyZSBhZGRpdGlvbmFsIHN0cnVjdHVyZXMuIFRob3NlCisjIHN0cnVjdHVyZXMgY2FuIGNvbnRhaW4gb25seSB2YXJpYWJsZXMuIExpbmtpbmcgZnVuY3Rpb25zIHRvIHRoZSBvYmplY3RzIGlzCisjIHBvc3NpYmxlIG9ubHkgdGhyb3VnaCBzb3VyY2UgY29kZSBhZGRpdGlvbnMuCisKKworQWx0ZXJuYXRlRGVzY3JpcHRvcnMJCisKKworIyBMb2dGaWxlIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbG9nIGZpbGUuIEFjdHVhbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtCisjIGFyZSBsb2dnZWQgdGhlcmUuIFNlZSBhbHNvIExvZ0NoYW5nZXMuCisKKworTG9nRmlsZQkJCS92YXIvbG9nL2V4dDJlZC5sb2cKKworCisjIFRoZSBmb2xsb3dpbmcgc2VsZWN0cyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlCisjIGZpbGVzeXN0ZW0uIFdoZW4gb24sIGVhY2ggY2hhbmdlIHdpbGwgYmUgbG9nZ2VkIC0gQm90aCB0aGUgcHJldmlvdXMgZGF0YQorIyBhbmQgdGhlIG5ldyB3cml0dGVuIGRhdGEuCisKKworTG9nQ2hhbmdlcwkJb24KKworCisjIEFsbG93Q2hhbmdlcyBvZmYgd2lsbCBub3QgYWxsb3cgZXh0MmVkIHRvIGRvIGFueSBjaGFuZ2VzIHRvIHRoZQorIyBmaWxlc3lzdGVtIC0gVGhlICJlbmFibGV3cml0ZSIgY29tbWFuZCB3aWxsIG5vdCB3b3JrLiBXaGVuIG9uLCBlbmFibGV3cml0ZQorIyB3aWxsIHN0aWxsIGhhdmUgdG8gYmUgaXNzdWVkIHRvIGFsbG93IHdyaXRlIGFjY2Vzcy4KKworCitBbGxvd0NoYW5nZXMJCW9uCisKKworIyBXaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4gY2hvb3NlIHdoZXRoZXIgZXh0MmVkIHdpbGwgYWxsb3cgcmVhZC1vbmx5IG1vZGUgb24KKyMgYSBtb3VudGVkIGZpbGVzeXN0ZW0uIFJlYWQtV3JpdGUgbW9kZSBpcyBuZXZlciBhbGxvd2VkIG9uIGEgbW91bnRlZAorIyBmaWxlc3lzdGVtLgorCisKK0FsbG93TW91bnRlZFJlYWQJb24KKworCisjIFdoZW4gRm9yY2VFeHQyIGlzIHNldCB0byBvbiwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNzdW1lZCB0byBiZSBleHQyCisjIGZpbGVzeXN0ZW0sIGRlc3BpdGUgdGhlIHBvc3NpYmx5IGNvcnJ1cHQgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgcmVhZGluZy4KKyMgQWxsIHRoZSBleHQyIHNwZWNpZmljIGNvbW1hbmRzIHdpbGwgYmUgYXZpYWJsZSBkZXNwaXRlIHRoZSBwb3NzaWJsZQorIyBhdXRvZGV0ZWN0aW9uIGZhaWx0dXJlLgorCitGb3JjZUV4dDIJCW9mZgorCisKKyMgTm9ybWFsbHksIHRoZSB2YXJpb3VzIGZpbGVzeXN0ZW0gcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBibG9jayBzaXplIGFuZCB0aGUKKyMgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBhcmUgZ2F0aGVyZWQgZnJvbSB0aGUgZXh0MiBmaWxlc3lzdGVtIGl0c2VsZi4KKyMgSG93ZXZlciwgb24gYSBjb3JydXB0IGZpbGVzeXN0ZW0sIGV4dDJlZCBpcyB1bmFibGUgdG8gZ2V0IHRoZSByaWdodAorIyBwYXJhbWV0ZXJzLiBJbiB0aGlzIGNhc2UsIHRoZXkgd2lsbCBiZSB0YWtlbiBmcm9tIGhlcmUuIFNlZSBhbHNvCisjIEZvcmNlRGVmYXVsdC4KKworCitEZWZhdWx0QmxvY2tTaXplCTEwMjQKK0RlZmF1bHRUb3RhbEJsb2NrcwkyMDk3MTUxCQkjIH4yIEdCIHRvdGFsIHNpemUKK0RlZmF1bHRCbG9ja3NJbkdyb3VwCTgxOTIKKworIyBXaXRoIEZvcmNlRGVmYXVsdCBvbiwgeW91IGNhbiBmb3JjZSB0aGUgdXNlIG9mIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMKKyMgYWJvdmUuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBhcyBleHQyZWQgd2lsbCBmYWxsYmFjayBieSBkZWZhdWx0IHRvIHRob3NlCisjIHBhcmFtZXRlcnMgaWYgaXQgY2FuJ3QgZmlndXJlIHVwIHRoZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLgorCisKK0ZvcmNlRGVmYXVsdCAJCW9mZgorCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9leHQyZWQvZXh0MmVkLmggYi9lMmZzcHJvZ3MvZXh0MmVkL2V4dDJlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjQzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2V4dDJlZC5oCkBAIC0wLDAgKzEsNDM1IEBACisKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9leHQyZWQuaAorCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmNsdWRlIGZpbGUgZm9yIHRoZSBleHQyIGRpc2sgZWRpdG9yLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyB3aGljaCBhcmUgbmVlZGVkIGJ5IGFsbCB0aGUgZmlsZXMgaW4gZXh0MmVkLgorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCA5IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2lmbmRlZiBFWFQyRURfRURJVE9SX0gKKyNkZWZpbmUgRVhUMkVEX0VESVRPUl9ICisKKy8qCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVXNlciBkZWZpbmFibGUgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKi8KKworI2RlZmluZSBERUJVRwkJCQkJCS8qIEFjdGl2YXRlIHNlbGYtc2FuaXR5IGNoZWNrcyAqLworCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfZnMuaD4JCQkJLyogTWFpbiBrZXJuZWwgZXh0MiBpbmNsdWRlIGZpbGUgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8bmN1cnNlcy5oPgorCisjZGVmaW5lIE1BWF9GSUVMRFMgCQk0MDAKKworI2RlZmluZSBNQVhfQ09NTUFORF9MSU5FIAk4MQorI2RlZmluZSBNQVhfQ09NTUFORFNfTlVNCTMwCQkJLyogTWF4aW11bSBudW1iZXIgb2YgY29tbWFuZHMgb2Ygb25lIHR5cGUgKi8KKyNkZWZpbmUgUkVNRU1CRVJfQ09VTlQJCTMwCQkJLyogT2JqZWN0IG1lbW9yeSBzaXplICovCisKKy8qCisJVGhlIHVzZXIgc2NyZWVuIGNvbnNpc3RzIG9mIGZvdXIgcGFydHM6CisKKwkJMS4JVGl0bGUgd2luZG93ICh0aXRsZV93aW4pLgorCQkyLglTaG93IChzdGF0dXMpIHdpbmRvdyAoc2hvd193aW4pLgorCQkzLglNYWluIHNob3cgcGFkIChzaG93X3BhZCkuCisJCTQuCUNvbW1hbmQgd2luZG93IChjb21tYW5kX3dpbikuCisKKyovCisKKy8qCisKKyAgIFRoZSBzaG93IHBhZCBpcyBtYXBwZWQgdG8gdGhlIHNwYWNlIGxlZnQgYmV0d2VlbiB0aGUgb3RoZXIgdGhyZWUgd2luZG93cy4KKworICAgSWYgeW91IHdvbmRlcmVkIHdoeSBleHQyZWQgZ3JhYnMgc28gbWVtb3J5LCB0aGUgYW5zd2VyIGlzIHByb2JhYmx5IGJlbG93IC0gSSB3YW50ZWQgdG8gdHJlYXQKKyAgIHRoZSB2aXJ0dWFsIGRpc3BsYXkgYXMgaW5maW5pdGUuIERlY3JlYXNlIHRoZSBmb2xsb3dpbmcgZm9yIG1vcmUgcmVhbGlzdGljIG1lbW9yeSBjb25zdW1wdGlvbi4KKworKi8KKworI2RlZmluZSBTSE9XX1BBRF9MSU5FUyAzMDAwCisjZGVmaW5lIFNIT1dfUEFEX0NPTFMgKENPTFMgPiAxNDAgPyBDT0xTIDogMTQwKQorCisjZGVmaW5lIENPTU1BTkRfV0lOX0xJTkVTIDYJCQkJLyogQ2hhbmdlIHRoaXMgdG8geW91ciBwcmVmZXJlbmNlcyAqLworI2RlZmluZSBUSVRMRV9XSU5fTElORVMgMworI2RlZmluZSBTSE9XX1dJTl9MSU5FUyAzCisKKyNkZWZpbmUgSEVYIDEKKyNkZWZpbmUgVEVYVCAyCisKKyNpZm5kZWYgRVhUMl9QUkVfMDJCX01BR0lDCisJI2RlZmluZSBFWFQyX1BSRV8wMkJfTUFHSUMJMHhFRjUxCisjZW5kaWYKKworCit0eXBlZGVmIHZvaWQgKCpQRikgKGNoYXIgKik7CQkJCS8qIFVzZWQgdG8gcG9pbnQgdG8gdGhlIGRpc3BhdGNoZWQgZnVuY3Rpb25zICovCisKK3N0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgewkJCQkvKiBIb2xkcyBjb21tYW5kcyBvZiBhbiBvYmplY3QgKi8KKwlpbnQgbGFzdF9jb21tYW5kOworCWNoYXIgKm5hbWVzIFtNQVhfQ09NTUFORFNfTlVNXTsKKwljaGFyICpkZXNjcmlwdGlvbnMgW01BWF9DT01NQU5EU19OVU1dOworCVBGIGNhbGxiYWNrIFtNQVhfQ09NTUFORFNfTlVNXTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciB7CQkJCS8qIERlc2NyaWJlcyBhbiBvYmplY3QgKi8KKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIG5hbWUgWzYwXTsKKwl1bnNpZ25lZCBzaG9ydCBmaWVsZHNfbnVtOworCXVuc2lnbmVkIGNoYXIgZmllbGRfbmFtZXMgW01BWF9GSUVMRFNdWzgwXTsKKwl1bnNpZ25lZCBjaGFyIGZpZWxkX3R5cGVzIFtNQVhfRklFTERTXTsKKwl1bnNpZ25lZCBzaG9ydCBmaWVsZF9sZW5ndGhzIFtNQVhfRklFTERTXTsKKwl1bnNpZ25lZCBzaG9ydCBmaWVsZF9wb3NpdGlvbnMgW01BWF9GSUVMRFNdOworCXN0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgdHlwZV9jb21tYW5kczsKKwlzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnByZXYsKm5leHQ7Cit9OworCisjZGVmaW5lIEZJRUxEX1RZUEVfSU5UCSAgMQorI2RlZmluZSBGSUVMRF9UWVBFX1VJTlQgICAyCisjZGVmaW5lIEZJRUxEX1RZUEVfQ0hBUiAgIDMKKworc3RydWN0IHN0cnVjdF90eXBlX2RhdGEgewkJCQkvKiBUaGUgb2JqZWN0J3MgZGF0YSBpcyB1c3VhbGx5IGhlcmUgKi8KKwlsb25nIG9mZnNldF9pbl9ibG9jazsKKworCXVuaW9uIHVuaW9uX3R5cGVfZGF0YSB7CQkJCS8qIEZvcm1hdCBpdCBpbiB2YXJpb3VzIHdheXMgKi8KKwkJY2hhciBidWZmZXIgW0VYVDJfTUFYX0JMT0NLX1NJWkVdOworCQlzdHJ1Y3QgZXh0Ml9hY2xfaGVhZGVyIHRfZXh0Ml9hY2xfaGVhZGVyOworCQlzdHJ1Y3QgZXh0Ml9hY2xfZW50cnkgdF9leHQyX2FjbF9lbnRyeTsKKwkJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyB0X2V4dDJfZ3JvdXBfZGVzYzsKKwkJc3RydWN0IGV4dDJfaW5vZGUgdF9leHQyX2lub2RlOworCQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB0X2V4dDJfc3VwZXJfYmxvY2s7CisJCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSB0X2V4dDJfZGlyX2VudHJ5OworCX0gdTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfZmlsZV9zeXN0ZW1faW5mbyB7CQkJLyogSW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlc3lzdGVtICovCisJdW5zaWduZWQgbG9uZyBsb25nIGZpbGVfc3lzdGVtX3NpemU7CisJdW5zaWduZWQgbG9uZyBzdXBlcl9ibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9ncm91cF9kZXNjX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGdyb3Vwc19jb3VudDsKKwl1bnNpZ25lZCBsb25nIGlub2Rlc19wZXJfYmxvY2s7CisJdW5zaWduZWQgbG9uZyBibG9ja3NfcGVyX2dyb3VwOwkJCS8qIFRoZSBuYW1lIGlzIG1pc2xlYWRpbmc7IGJld2FyZSAqLworCXVuc2lnbmVkIGxvbmcgbm9fYmxvY2tzX2luX2dyb3VwOworCXVuc2lnbmVkIHNob3J0IGJsb2NrX3NpemU7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc3VwZXJfYmxvY2s7Cit9OworCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyB7CQkJCS8qIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAqLworCisJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlX3B0cjsKKworCWxvbmcgaW5vZGVfb2Zmc2V0OworCWxvbmcgZ2xvYmFsX2Jsb2NrX251bSxnbG9iYWxfYmxvY2tfb2Zmc2V0OworCWxvbmcgYmxvY2tfbnVtLGJsb2Nrc19jb3VudDsKKwlsb25nIGZpbGVfb2Zmc2V0LGZpbGVfbGVuZ3RoOworCWxvbmcgbGV2ZWw7CisJdW5zaWduZWQgY2hhciBidWZmZXIgW0VYVDJfTUFYX0JMT0NLX1NJWkVdOworCWxvbmcgb2Zmc2V0X2luX2Jsb2NrOworCisJaW50IGRpc3BsYXk7CisJLyogVGhlIGZvbGxvd2luZyBpcyB1c2VkIGlmIHRoZSBmaWxlIGlzIGEgZGlyZWN0b3J5ICovCisKKwlsb25nIGRpcl9lbnRyeV9udW0sZGlyX2VudHJpZXNfY291bnQ7CisJbG9uZyBkaXJfZW50cnlfb2Zmc2V0OworfTsKKworc3RydWN0IHN0cnVjdF9zdXBlcl9pbmZvIHsJCQkJLyogVXNlZCB0byBoYW5kbGUgdGhlIHN1cGVyYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIGNvcHlfbnVtOworfTsKKworc3RydWN0IHN0cnVjdF9ncm91cF9pbmZvIHsJCQkJLyogVXNlZCB0byBoYW5kbGUgdGhlIGdyb3VwIGRlc2NyaXB0b3JzICovCisJdW5zaWduZWQgbG9uZyBjb3B5X251bTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX251bTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfYmxvY2tfYml0bWFwX2luZm8gewkJCS8qIFVzZWQgaW4gYmxvY2tiaXRtYXBfY29tLmMgKi8KKwl1bnNpZ25lZCBsb25nIGVudHJ5X251bTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX251bTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfaW5vZGVfYml0bWFwX2luZm8gewkJCS8qIFVzZWQgaW4gaW5vZGViaXRtYXBfY29tLmMgKi8KKwl1bnNpZ25lZCBsb25nIGVudHJ5X251bTsKKwl1bnNpZ25lZCBsb25nIGdyb3VwX251bTsKK307CisKK3N0cnVjdCBzdHJ1Y3RfcmVtZW1iZXJfbGlmbyB7CQkJCS8qIEltcGxlbWVudHMgdGhlIG9iamVjdHMgY2lyY3VsYXIgbWVtb3J5ICovCisJbG9uZyBlbnRyaWVzX2NvdW50OworCisJbG9uZyBvZmZzZXQgW1JFTUVNQkVSX0NPVU5UXTsKKwlzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnR5cGUgW1JFTUVNQkVSX0NPVU5UXTsKKwljaGFyIG5hbWUgW1JFTUVNQkVSX0NPVU5UXVs4MF07Cit9OworCitzdHJ1Y3Qgc3RydWN0X3BhZF9pbmZvIHsJCQkJLyogVXNlZCB0byB6b29tIGludG8gdGhlIHBhZCB3aW5kb3cgKi8KKwlpbnQgZGlzcGxheV9saW5lcyxkaXNwbGF5X2NvbHM7CisJaW50IGxpbmUsY29sOworCWludCBtYXhfbGluZSxtYXhfY29sOworCWludCBkaXNhYmxlX291dHB1dDsKK307CisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKGRlZmluZWQgbW9zdGx5IGluIG1haW4uYykgKi8KKworLyogQ29uZmlndXJhYmxlIHZhcmlhYmxlcyAoVGhyb3VnaCBjb25maWd1cmF0aW9uIGZpbGUpICovCisKK2V4dGVybiBjaGFyIEFsdGVybmF0ZURlc2NyaXB0b3JzIFsyMDBdOworZXh0ZXJuIGNoYXIgRXh0MkRlc2NyaXB0b3JzIFsyMDBdOworZXh0ZXJuIGNoYXIgTG9nRmlsZSBbMjAwXTsKK2V4dGVybiBpbnQgTG9nQ2hhbmdlczsKK2V4dGVybiBpbnQgQWxsb3dDaGFuZ2VzOworZXh0ZXJuIGludCBBbGxvd01vdW50ZWRSZWFkOworZXh0ZXJuIGludCBGb3JjZUV4dDI7CitleHRlcm4gaW50IERlZmF1bHRCbG9ja1NpemU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBEZWZhdWx0VG90YWxCbG9ja3M7CitleHRlcm4gdW5zaWduZWQgbG9uZyBEZWZhdWx0QmxvY2tzSW5Hcm91cDsKK2V4dGVybiBpbnQgRm9yY2VEZWZhdWx0OworCitleHRlcm4gY2hhciBkZXZpY2VfbmFtZSBbODBdOworZXh0ZXJuIGNoYXIgbGFzdF9jb21tYW5kX2xpbmUgWzgwXTsKK2V4dGVybiBGSUxFICpkZXZpY2VfaGFuZGxlOworZXh0ZXJuIGxvbmcgZGV2aWNlX29mZnNldDsKK2V4dGVybiBpbnQgIG1vdW50ZWQ7CisKK2V4dGVybiBzaG9ydCBibG9ja19zaXplOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgZ2VuZXJhbF9jb21tYW5kczsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzIGV4dDJfY29tbWFuZHM7CitleHRlcm4gc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpmaXJzdF90eXBlOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqbGFzdF90eXBlOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqY3VycmVudF90eXBlOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfdHlwZV9kYXRhIHR5cGVfZGF0YTsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2ZpbGVfc3lzdGVtX2luZm8gZmlsZV9zeXN0ZW1faW5mbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBmaWxlX2luZm8sZmlyc3RfZmlsZV9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfZ3JvdXBfaW5mbyBncm91cF9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3Rfc3VwZXJfaW5mbyBzdXBlcl9pbmZvOworZXh0ZXJuIHN0cnVjdCBzdHJ1Y3RfYmxvY2tfYml0bWFwX2luZm8gYmxvY2tfYml0bWFwX2luZm87CitleHRlcm4gc3RydWN0IHN0cnVjdF9pbm9kZV9iaXRtYXBfaW5mbyBpbm9kZV9iaXRtYXBfaW5mbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X3JlbWVtYmVyX2xpZm8gcmVtZW1iZXJfbGlmbzsKK2V4dGVybiBzdHJ1Y3Qgc3RydWN0X3BhZF9pbmZvIHNob3dfcGFkX2luZm87CitleHRlcm4gaW50IHdyaXRlX2FjY2VzczsKKworZXh0ZXJuIGludCByZWRyYXdfcmVxdWVzdDsKK2V4dGVybiBjaGFyIGxpbmVzX3MgWzgwXTsKK2V4dGVybiBjaGFyIGNvbHNfcyBbODBdOworCisKKy8qIGluaXQuYyAqLworCitleHRlcm4gaW50IGluaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJlcGFyZV90b19jbG9zZSAodm9pZCk7CitleHRlcm4gaW50IHNldF9zdHJ1Y3RfZGVzY3JpcHRvcnMgKGNoYXIgKmZpbGVfbmFtZSk7CitleHRlcm4gdm9pZCBmcmVlX3N0cnVjdF9kZXNjcmlwdG9ycyAodm9pZCk7CitleHRlcm4gc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICphZGRfbmV3X2Rlc2NyaXB0b3IgKGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgYWRkX25ld192YXJpYWJsZSAoc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpkZXNjcmlwdG9yLGNoYXIgKnZfdHlwZSxjaGFyICp2X25hbWUpOworZXh0ZXJuIHZvaWQgZmlsbF90eXBlX2NvbW1hbmRzIChzdHJ1Y3Qgc3RydWN0X2Rlc2NyaXB0b3IgKnB0cik7CitleHRlcm4gdm9pZCBhZGRfdXNlcl9jb21tYW5kIChzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzICpwdHIsY2hhciAqbmFtZSxjaGFyICpkZXNjcmlwdGlvbixQRiBjYWxsYmFjayk7CitleHRlcm4gdm9pZCBmcmVlX3VzZXJfY29tbWFuZHMgKHN0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgKnB0cik7CitleHRlcm4gaW50IHNldF9maWxlX3N5c3RlbV9pbmZvICh2b2lkKTsKK2V4dGVybiBpbnQgcHJvY2Vzc19jb25maWd1cmF0aW9uX2ZpbGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX2dlbmVyYWxfY29tbWFuZHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX2V4dDJfZ2VuZXJhbF9jb21tYW5kcyAodm9pZCk7CitleHRlcm4gdm9pZCBjaGVja19tb3VudGVkIChjaGFyICpuYW1lKTsKKworaW50IGdldF9uZXh0X29wdGlvbiAoRklMRSAqZnAsY2hhciAqb3B0aW9uLGNoYXIgKnZhbHVlKTsKK3ZvaWQgaW5pdF9yZWFkbGluZSAodm9pZCk7Cit2b2lkIGluaXRfc2lnbmFscyAodm9pZCk7Cit2b2lkIHNpZ25hbF9TSUdXSU5DSF9oYW5kbGVyIChpbnQgc2lnX251bSk7Cit2b2lkIHNpZ25hbF9TSUdURVJNX2hhbmRsZXIgKGludCBzaWdfbnVtKTsKK3ZvaWQgc2lnbmFsX1NJR1NFR1ZfaGFuZGxlciAoaW50IHNpZ19udW0pOworCisvKiBnZW5lcmFsX2NvbS5jICovCisKKy8qIEdlbmVyYWwgY29tbWFuZHMgd2hpY2ggYXJlIGF2aWFibGUgYWx3YXlzICovCisKK2V4dGVybiB2b2lkIGhlbHAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBzZXRfZGV2aWNlIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgc2V0X29mZnNldCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHNldF90eXBlIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHBndXAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBwZ2RuIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgcmVkcmF3IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCByZWNhbGwgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCBjZCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIGVuYWJsZV93cml0ZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfd3JpdGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB3cml0ZV9kYXRhIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKK3ZvaWQgaGV4X3NldCAoY2hhciAqY29tbWFuZF9saW5lKTsKK3ZvaWQgZGV0YWlsZWRfaGVscCAoY2hhciAqdGV4dCk7CisKKworLyogZXh0Ml9jb20uYyAqLworCisvKiBFeHRlbmRlZDIgZmlsZXN5c3RlbSBnZW5lcmVhbCBjb21tYW5kcyAtIEF2aWFibGUgb25seSB3aGVuIGVkaXRpbmcgYW4KKyAgIGV4dDIgZmlsZXN5c3RlbSAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfX19zdXBlciAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9fX2dyb3VwIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX19fY2QgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKKworLyogbWFpbi5jICovCisKK2V4dGVybiBpbnQgdmVyc2lvbl9tYWpvcix2ZXJzaW9uX21pbm9yOworZXh0ZXJuIGNoYXIgcmV2aXNpb25fZGF0ZSBbODBdOworZXh0ZXJuIGNoYXIgZW1haWxfYWRkcmVzcyBbODBdOworCisjaWZkZWYgREVCVUcKK2V4dGVybiB2b2lkIGludGVybmFsX2Vycm9yIChjaGFyICpkZXNjcmlwdGlvbixjaGFyICpzb3VyY2VfbmFtZSxjaGFyICpmdW5jdGlvbl9uYW1lKTsKKyNlbmRpZgorCit2b2lkIHBhcnNlciAodm9pZCk7CitleHRlcm4gaW50IGRpc3BhdGNoIChjaGFyICpjb21tYW5kX2xpbmUpOworY2hhciAqcGFyc2Vfd29yZCAoY2hhciAqc291cmNlLGNoYXIgKmRlc3QpOworY2hhciAqY29tcGxldGVfY29tbWFuZCAoY2hhciAqdGV4dCxpbnQgc3RhdGUpOworY2hhciAqZHVwc3RyIChjaGFyICpzcmMpOworCisKKworLyogZGlzay5jICovCisKK2V4dGVybiBpbnQgbG9hZF90eXBlX2RhdGEgKHZvaWQpOworZXh0ZXJuIGludCB3cml0ZV90eXBlX2RhdGEgKHZvaWQpOworZXh0ZXJuIGludCBsb3dfcmVhZCAodW5zaWduZWQgY2hhciAqYnVmZmVyLHVuc2lnbmVkIGxvbmcgbGVuZ3RoLHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKK2V4dGVybiBpbnQgbG93X3dyaXRlICh1bnNpZ25lZCBjaGFyICpidWZmZXIsdW5zaWduZWQgbG9uZyBsZW5ndGgsdW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIGludCBsb2dfY2hhbmdlcyAodW5zaWduZWQgY2hhciAqYnVmZmVyLHVuc2lnbmVkIGxvbmcgbGVuZ3RoLHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworLyogZmlsZV9jb20uYyAqLworCitleHRlcm4gaW50IGluaXRfZmlsZV9pbmZvICh2b2lkKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX2Rpc3BsYXkgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX29mZnNldCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX3ByZXZibG9jayAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX25leHRibG9jayAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZmlsZV9fX2Jsb2NrIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9maWxlX19fcmVtZW1iZXIgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX19zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2ZpbGVfX193cml0ZWRhdGEgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKK2V4dGVybiBsb25nIGZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChsb25nIGZpbGVfYmxvY2ssc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmZpbGVfaW5mb19wdHIpOworZXh0ZXJuIGxvbmcgcmV0dXJuX2luZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKTsKK2V4dGVybiBsb25nIHJldHVybl9kaW5kaXJlY3QgKGxvbmcgdGFibGVfYmxvY2ssbG9uZyBibG9ja19udW0pOworZXh0ZXJuIGxvbmcgcmV0dXJuX3RpbmRpcmVjdCAobG9uZyB0YWJsZV9ibG9jayxsb25nIGJsb2NrX251bSk7CisKK3ZvaWQgZmlsZV9zaG93X2hleCAodm9pZCk7Cit2b2lkIGZpbGVfc2hvd190ZXh0ICh2b2lkKTsKK3ZvaWQgc2hvd19zdGF0dXMgKHZvaWQpOworCisvKiBpbm9kZV9jb20uYyAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfX19ncm91cCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX19fZmlsZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2RpciAoY2hhciAqY29tbWFuZF9saW5lKTsKKworZXh0ZXJuIGxvbmcgaW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAobG9uZyBpbm9kZV9vZmZzZXQpOworZXh0ZXJuIGxvbmcgaW50IGlub2RlX29mZnNldF90b19pbm9kZV9udW0gKGxvbmcgaW5vZGVfb2Zmc2V0KTsKK2V4dGVybiBsb25nIGludCBpbm9kZV9udW1fdG9faW5vZGVfb2Zmc2V0IChsb25nIGlub2RlX251bSk7CisKKy8qIGRpcl9jb20uYyAqLworCitleHRlcm4gaW50IGluaXRfZGlyX2luZm8gKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKTsKK2V4dGVybiB2b2lkIHR5cGVfZGlyX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZGlyX19faW5vZGUgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX3BnZG4gKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX3BndXAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX2ZvbGxvd2lub2RlIChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX19yZW1lbWJlciAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZGlyX19fY2QgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9kaXJfX193cml0ZWRhdGEgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2Rpcl9fX3NldCAoY2hhciAqY29tbWFuZF9saW5lKTsKKworI2RlZmluZSBIRVggMQorI2RlZmluZSBURVhUIDIKKworI2RlZmluZSBBQk9SVAkJMAorI2RlZmluZSBDT05USU5VRQkxCisjZGVmaW5lIEZPVU5ECQkyCisKK3N0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvIHNlYXJjaF9kaXJfZW50cmllcyAoaW50ICgqYWN0aW9uKSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pLGludCAqc3RhdHVzKTsKK2ludCBhY3Rpb25fY291bnQgKHN0cnVjdCBzdHJ1Y3RfZmlsZV9pbmZvICppbmZvKTsKK3ZvaWQgc2hvd19kaXJfc3RhdHVzICh2b2lkKTsKK2xvbmcgY291bnRfZGlyX2VudHJpZXMgKHZvaWQpOworaW50IGFjdGlvbl9uYW1lIChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbyk7CitpbnQgYWN0aW9uX2VudHJ5X251bSAoc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmluZm8pOworaW50IGFjdGlvbl9zaG93IChzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyAqaW5mbyk7CisKKy8qIHN1cGVyX2NvbS5jICovCisKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19nb2NvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19zZXRhY3RpdmVjb3B5IChjaGFyICpjb21tYW5kX2xpbmUpOworCisvKiBncm91cF9jb20uYyAqLworCitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fZ29jb3B5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19ibG9ja2JpdG1hcCAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19faW5vZGViaXRtYXAgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3NldGFjdGl2ZWNvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSk7CisKKy8qIGJsb2NrYml0bWFwX2NvbS5jICovCisKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19hbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19kZWFsbG9jYXRlIChjaGFyICpjb21tYW5kX2xpbmUpOwordm9pZCBhbGxvY2F0ZV9ibG9jayAobG9uZyBlbnRyeV9udW0pOwordm9pZCBkZWFsbG9jYXRlX2Jsb2NrIChsb25nIGVudHJ5X251bSk7CisKKy8qIGlub2RlYml0bWFwX2JvbS5jICovCisKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpOworZXh0ZXJuIHZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSk7CitleHRlcm4gdm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19hbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKTsKK2V4dGVybiB2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19kZWFsbG9jYXRlIChjaGFyICpjb21tYW5kX2xpbmUpOwordm9pZCBhbGxvY2F0ZV9pbm9kZSAobG9uZyBlbnRyeV9udW0pOwordm9pZCBkZWFsbG9jYXRlX2lub2RlIChsb25nIGVudHJ5X251bSk7CisKKy8qIHdpbi5jICovCisKK2V4dGVybiBXSU5ET1cgKnRpdGxlX3dpbiwqc2hvd193aW4sKmNvbW1hbmRfd2luLCpzaG93X3BhZDsKKworZXh0ZXJuIHZvaWQgaW5pdF93aW5kb3dzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlZnJlc2hfdGl0bGVfd2luICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlZnJlc2hfc2hvd193aW4gKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVmcmVzaF9zaG93X3BhZCAodm9pZCk7CitleHRlcm4gdm9pZCByZWZyZXNoX2NvbW1hbmRfd2luICh2b2lkKTsKK2V4dGVybiB2b2lkIHNob3dfaW5mbyAodm9pZCk7CitleHRlcm4gdm9pZCByZWRyYXdfYWxsICh2b2lkKTsKK2V4dGVybiB2b2lkIGNsb3NlX3dpbmRvd3MgKHZvaWQpOworCisjZW5kaWYgLyogRVhUMkVEX0VESVRPUl9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2ZpbGVfY29tLmMgYi9lMmZzcHJvZ3MvZXh0MmVkL2ZpbGVfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MmY2NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvZmlsZV9jb20uYwpAQCAtMCwwICsxLDU2NCBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2ZpbGVfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tYW5kcyB3aGljaCBoYW5kbGUgYSBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IHdyaXR0ZW4gb246IEFwcmlsIDE4IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKworaW50IGluaXRfZmlsZV9pbmZvICh2b2lkKQorCit7CisJc3RydWN0IGV4dDJfaW5vZGUgKnB0cjsKKworCXB0cj0mdHlwZV9kYXRhLnUudF9leHQyX2lub2RlOworCisJZmlsZV9pbmZvLmlub2RlX3B0cj1wdHI7CisJZmlsZV9pbmZvLmlub2RlX29mZnNldD1kZXZpY2Vfb2Zmc2V0OworCisJZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19udW09cHRyLT5pX2Jsb2NrIFswXTsKKwlmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldD1wdHItPmlfYmxvY2sgWzBdKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlmaWxlX2luZm8uYmxvY2tfbnVtPTA7CisJZmlsZV9pbmZvLmJsb2Nrc19jb3VudD0ocHRyLT5pX3NpemUrZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLTEpL2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlmaWxlX2luZm8uZmlsZV9vZmZzZXQ9MDsKKwlmaWxlX2luZm8uZmlsZV9sZW5ndGg9cHRyLT5pX3NpemU7CisJZmlsZV9pbmZvLmxldmVsPTA7CisJZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaz0wOworCisJZmlsZV9pbmZvLmRpc3BsYXk9SEVYOworCisJbG93X3JlYWQgKGZpbGVfaW5mby5idWZmZXIsZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLGZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0KTsKKworCXJldHVybiAoMSk7Cit9CisKKwordm9pZCB0eXBlX2ZpbGVfX19pbm9kZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJZGlzcGF0Y2ggKCJzZXR0eXBlIGV4dDJfaW5vZGUiKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlpZiAoZmlsZV9pbmZvLmRpc3BsYXk9PUhFWCkKKwkJZmlsZV9zaG93X2hleCAoKTsKKwlpZiAoZmlsZV9pbmZvLmRpc3BsYXk9PVRFWFQpCisJCWZpbGVfc2hvd190ZXh0ICgpOworfQorCit2b2lkIHR5cGVfZmlsZV9fX25leHRibG9jayAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBibG9ja19vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWJsb2NrX29mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlpZiAoZmlsZV9pbmZvLmJsb2NrX251bStibG9ja19vZmZzZXQgPj0gZmlsZV9pbmZvLmJsb2Nrc19jb3VudCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBCbG9jayBvZmZzZXQgb3V0IG9mIHJhbmdlXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJZmlsZV9pbmZvLmJsb2NrX251bSs9YmxvY2tfb2Zmc2V0OworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtPWZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChmaWxlX2luZm8uYmxvY2tfbnVtLCZmaWxlX2luZm8pOworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0PWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlmaWxlX2luZm8uZmlsZV9vZmZzZXQ9ZmlsZV9pbmZvLmJsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlsb3dfcmVhZCAoZmlsZV9pbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19uZXh0IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlpbnQgb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQqPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2srb2Zmc2V0IDwgZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2srPW9mZnNldDsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE9mZnNldCBvdXQgb2YgYmxvY2tcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHR5cGVfZmlsZV9fX29mZnNldCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQlvZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEFyZ3VtZW50IG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2Zmc2V0IDwgZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9b2Zmc2V0OworCQlzcHJpbnRmIChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gT2Zmc2V0IG91dCBvZiBibG9ja1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgdHlwZV9maWxlX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJaW50IG9mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJb2Zmc2V0Kj1hdG9sIChidWZmZXIpOworCX0KKworCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrLW9mZnNldCA+PSAwKSB7CisJCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2stPW9mZnNldDsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE9mZnNldCBvdXQgb2YgYmxvY2tcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHR5cGVfZmlsZV9fX3ByZXZibG9jayAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBibG9ja19vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWJsb2NrX29mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlpZiAoZmlsZV9pbmZvLmJsb2NrX251bS1ibG9ja19vZmZzZXQgPCAwKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEJsb2NrIG9mZnNldCBvdXQgb2YgcmFuZ2VcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCXJldHVybjsKKwl9CisKKwlmaWxlX2luZm8uYmxvY2tfbnVtLT1ibG9ja19vZmZzZXQ7CisJZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19udW09ZmlsZV9ibG9ja190b19nbG9iYWxfYmxvY2sgKGZpbGVfaW5mby5ibG9ja19udW0sJmZpbGVfaW5mbyk7CisJZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQ9ZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19udW0qZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCWZpbGVfaW5mby5maWxlX29mZnNldD1maWxlX2luZm8uYmxvY2tfbnVtKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWxvd19yZWFkIChmaWxlX2luZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldCk7CisKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZmlsZV9fX2Jsb2NrIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGJsb2NrX29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEludmFsaWQgYXJndW1lbnRzXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCWJsb2NrX29mZnNldD1hdG9sIChidWZmZXIpOworCisJaWYgKGJsb2NrX29mZnNldCA8IDAgfHwgYmxvY2tfb2Zmc2V0ID49IGZpbGVfaW5mby5ibG9ja3NfY291bnQpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQmxvY2sgb2Zmc2V0IG91dCBvZiByYW5nZVxuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwkJcmV0dXJuOworCX0KKworCWZpbGVfaW5mby5ibG9ja19udW09YmxvY2tfb2Zmc2V0OworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtPWZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChmaWxlX2luZm8uYmxvY2tfbnVtLCZmaWxlX2luZm8pOworCWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfb2Zmc2V0PWZpbGVfaW5mby5nbG9iYWxfYmxvY2tfbnVtKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlmaWxlX2luZm8uZmlsZV9vZmZzZXQ9ZmlsZV9pbmZvLmJsb2NrX251bSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlsb3dfcmVhZCAoZmlsZV9pbmZvLmJ1ZmZlcixmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19vZmZzZXQpOworCisJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19kaXNwbGF5IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApCisJCXN0cmNweSAoYnVmZmVyLCJoZXgiKTsKKwllbHNlCisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWlmIChzdHJjYXNlY21wIChidWZmZXIsImhleCIpPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJEaXNwbGF5IHNldCB0byBoZXhcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCWZpbGVfaW5mby5kaXNwbGF5PUhFWDsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSBpZiAoc3RyY2FzZWNtcCAoYnVmZmVyLCJ0ZXh0Iik9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkRpc3BsYXkgc2V0IHRvIHRleHRcbiIpO3dyZWZyZXNoIChjb21tYW5kX3dpbik7CisJCWZpbGVfaW5mby5kaXNwbGF5PVRFWFQ7CisJCXNwcmludGYgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBJbnZhbGlkIGFyZ3VtZW50c1xuIik7d3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKKwl9Cit9CisKK3ZvaWQgZmlsZV9zaG93X2hleCAodm9pZCkKKworeworCWxvbmcgb2Zmc2V0PTAsbCxpOworCXVuc2lnbmVkIGNoYXIgKmNoX3B0cjsKKworCS8qIGRldmljZV9vZmZzZXQgYW5kIHR5cGVfZGF0YSBwb2ludHMgdG8gdGhlIGlub2RlICovCisKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDsKKworCXdtb3ZlIChzaG93X3BhZCwwLDApOworCWNoX3B0cj1maWxlX2luZm8uYnVmZmVyOworCWZvciAobD0wO2w8ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLzE2O2wrKykgeworCQlpZiAoZmlsZV9pbmZvLmZpbGVfb2Zmc2V0K29mZnNldD5maWxlX2luZm8uZmlsZV9sZW5ndGgtMSkgYnJlYWs7CisJCXdwcmludHcgKHNob3dfcGFkLCIlMDhsZCA6ICAiLG9mZnNldCk7CisJCWZvciAoaT0wO2k8MTY7aSsrKSB7CisKKwkJCWlmIChmaWxlX2luZm8uZmlsZV9vZmZzZXQrb2Zmc2V0K2k+ZmlsZV9pbmZvLmZpbGVfbGVuZ3RoLTEpIHsKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiICIpOworCQkJfQorCisJCQllbHNlIHsKKwkJCQlpZiAoZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaz09b2Zmc2V0K2kpCisJCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCisJCQkJaWYgKGNoX3B0ciBbaV0+PScgJyAmJiBjaF9wdHIgW2ldPD0neicpCisJCQkJCXdwcmludHcgKHNob3dfcGFkLCIlYyIsY2hfcHRyIFtpXSk7CisJCQkJZWxzZQorCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiLiIpOworCisJCQkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKQorCQkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9OT1JNQUwpOworCQkJfQorCQl9CisKKwkJd3ByaW50dyAoc2hvd19wYWQsIiAgICIpOworCQlmb3IgKGk9MDtpPDE2O2krKykgeworCQkJaWYgKGZpbGVfaW5mby5maWxlX29mZnNldCtvZmZzZXQraT5maWxlX2luZm8uZmlsZV9sZW5ndGgtMSkgYnJlYWs7CisJCQlpZiAoZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaz09b2Zmc2V0K2kpCisJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfUkVWRVJTRSk7CisKKwkJCXdwcmludHcgKHNob3dfcGFkLCIlMDJ4IixjaF9wdHIgW2ldKTsKKworCQkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKSB7CisJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJCQlzaG93X3BhZF9pbmZvLmxpbmU9bC1sICUgc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzOworCQkJfQorCisJCQl3cHJpbnR3IChzaG93X3BhZCwiICIpOworCisJCX0KKworCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJb2Zmc2V0Kz1pOworCQljaF9wdHIrPWk7CisJfQorCisJc2hvd19wYWRfaW5mby5tYXhfbGluZT1sLTE7CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCisJc2hvd19zdGF0dXMgKCk7Cit9CisKK3ZvaWQgZmlsZV9zaG93X3RleHQgKHZvaWQpCisKK3sKKwlsb25nIG9mZnNldD0wLGxhc3Rfb2Zmc2V0LGw9MCxjb2xzPTA7CisJdW5zaWduZWQgY2hhciAqY2hfcHRyOworCisJLyogZGV2aWNlX29mZnNldCBhbmQgdHlwZV9kYXRhIHBvaW50cyB0byB0aGUgaW5vZGUgKi8KKworCXNob3dfcGFkX2luZm8ubGluZT0wOworCXdtb3ZlIChzaG93X3BhZCwwLDApOworCWNoX3B0cj1maWxlX2luZm8uYnVmZmVyOworCisJbGFzdF9vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplLTE7CisKKwlpZiAoZmlsZV9pbmZvLmZpbGVfb2Zmc2V0K2xhc3Rfb2Zmc2V0ID4gZmlsZV9pbmZvLmZpbGVfbGVuZ3RoLTEpCisJCWxhc3Rfb2Zmc2V0PWZpbGVfaW5mby5maWxlX2xlbmd0aC0xLWZpbGVfaW5mby5maWxlX29mZnNldDsKKworCXdoaWxlICggKG9mZnNldCA8PSBsYXN0X29mZnNldCkgJiYgbDxTSE9XX1BBRF9MSU5FUykgeworCisJCWlmIChjb2xzPT1TSE9XX1BBRF9DT0xTLTEpIHsKKwkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpOworCQkJbCsrO2NvbHM9MDsKKwkJfQorCisKKwkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCkKKwkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCisJCWlmICgqY2hfcHRyID49ICcgJyAmJiAqY2hfcHRyIDw9ICd6JykKKwkJCXdwcmludHcgKHNob3dfcGFkLCIlYyIsKmNoX3B0cik7CisKKworCQllbHNlIHsKKwkJCWlmICgqY2hfcHRyID09IDB4YSkgeworCQkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpOworCQkJCWwrKztjb2xzPTA7CisJCQl9CisKKwkJCWVsc2UgaWYgKCpjaF9wdHIgPT0gMHg5KQorCQkJCXdwcmludHcgKHNob3dfcGFkLCIgICAgIik7CisKKwkJCWVsc2UKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiLiIpOworCQl9CisKKwkJaWYgKGZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCkgeworCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJCXNob3dfcGFkX2luZm8ubGluZT1sLWwgJSBzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXM7CisJCX0KKworCisJCW9mZnNldCsrO2NvbHMrKztjaF9wdHIrKzsKKwl9CisKKwl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwlzaG93X3BhZF9pbmZvLm1heF9saW5lPWw7CisKKwlyZWZyZXNoX3Nob3dfcGFkICgpOworCisJc2hvd19zdGF0dXMgKCk7Cit9CisKK3ZvaWQgc2hvd19zdGF0dXMgKHZvaWQpCisKK3sKKwlsb25nIGlub2RlX251bTsKKworCXdlcmFzZSAoc2hvd193aW4pO3dtb3ZlIChzaG93X3dpbiwwLDApOworCXdwcmludHcgKHNob3dfd2luLCJGaWxlIGNvbnRlbnRzLiBCbG9jayAlbGQuICIsZmlsZV9pbmZvLmdsb2JhbF9ibG9ja19udW0pOworCXdwcmludHcgKHNob3dfd2luLCJGaWxlIGJsb2NrICVsZCBvZiAlbGQuICIsZmlsZV9pbmZvLmJsb2NrX251bSxmaWxlX2luZm8uYmxvY2tzX2NvdW50LTEpOworCXdwcmludHcgKHNob3dfd2luLCJGaWxlIE9mZnNldCAlbGQgb2YgJWxkLiIsZmlsZV9pbmZvLmZpbGVfb2Zmc2V0LGZpbGVfaW5mby5maWxlX2xlbmd0aC0xKTsKKworCXdtb3ZlIChzaG93X3dpbiwxLDApOworCWlub2RlX251bT1pbm9kZV9vZmZzZXRfdG9faW5vZGVfbnVtIChmaWxlX2luZm8uaW5vZGVfb2Zmc2V0KTsKKwl3cHJpbnR3IChzaG93X3dpbiwiRmlsZSBpbm9kZSAlbGQuIEluZGlyZWN0aW9uIGxldmVsICVsZC4iLGlub2RlX251bSxmaWxlX2luZm8ubGV2ZWwpOworCisJcmVmcmVzaF9zaG93X3dpbiAoKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19yZW1lbWJlciAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJaW50IGZvdW5kPTA7CisJbG9uZyBlbnRyeV9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCXN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZGVzY3JpcHRvcl9wdHI7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTt3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJZW50cnlfbnVtPXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudCsrOworCWlmIChlbnRyeV9udW0+UkVNRU1CRVJfQ09VTlQtMSkgeworCQllbnRyeV9udW09MDsKKwkJcmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50LS07CisJfQorCisJZGVzY3JpcHRvcl9wdHI9Zmlyc3RfdHlwZTsKKwl3aGlsZSAoZGVzY3JpcHRvcl9wdHIhPU5VTEwgJiYgIWZvdW5kKSB7CisJCWlmIChzdHJjbXAgKGRlc2NyaXB0b3JfcHRyLT5uYW1lLCJleHQyX2lub2RlIik9PTApCisJCQlmb3VuZD0xOworCQllbHNlCisJCQlkZXNjcmlwdG9yX3B0cj1kZXNjcmlwdG9yX3B0ci0+bmV4dDsKKwl9CisKKworCXJlbWVtYmVyX2xpZm8ub2Zmc2V0IFtlbnRyeV9udW1dPWRldmljZV9vZmZzZXQ7CisJcmVtZW1iZXJfbGlmby50eXBlIFtlbnRyeV9udW1dPWRlc2NyaXB0b3JfcHRyOworCXN0cmNweSAocmVtZW1iZXJfbGlmby5uYW1lIFtlbnRyeV9udW1dLGJ1ZmZlcik7CisKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiT2JqZWN0ICVzIGluIE9mZnNldCAlbGQgcmVtZW1iZXJlZCBhcyAlc1xuIixkZXNjcmlwdG9yX3B0ci0+bmFtZSxkZXZpY2Vfb2Zmc2V0LGJ1ZmZlcik7CisJd3JlZnJlc2ggKGNvbW1hbmRfd2luKTsKK30KKwordm9pZCB0eXBlX2ZpbGVfX19zZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGNoYXIgdG1wOworCWNoYXIgKnB0cixidWZmZXIgWzgwXSwqY2hfcHRyOworCWludCBtb2RlPUhFWDsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBBcmd1bWVudCBub3Qgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlpZiAoc3RyY2FzZWNtcCAoYnVmZmVyLCJ0ZXh0Iik9PTApIHsKKwkJbW9kZT1URVhUOworCQlzdHJjcHkgKGJ1ZmZlcixwdHIpOworCX0KKworCWVsc2UgaWYgKHN0cmNhc2VjbXAgKGJ1ZmZlciwiaGV4Iik9PTApIHsKKwkJbW9kZT1IRVg7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwl9CisKKwlpZiAoKmJ1ZmZlcj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBEYXRhIG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCWlmIChtb2RlPT1IRVgpIHsKKwkJZG8geworCQkJdG1wPSh1bnNpZ25lZCBjaGFyKSBzdHJ0b2wgKGJ1ZmZlcixOVUxMLDE2KTsKKwkJCWZpbGVfaW5mby5idWZmZXIgW2ZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2tdPXRtcDsKKwkJCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2srKzsKKwkJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJCWlmIChmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrPT1maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpIHsKKwkJCQlpZiAoKnB0cikgeworCQkJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBFbmRpbmcgb2Zmc2V0IG91dHNpZGUgYmxvY2ssIG9ubHkgcGFydGlhbCBzdHJpbmcgY2hhbmdlZFxuIik7CisJCQkJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQkJfQorCQkJCWZpbGVfaW5mby5vZmZzZXRfaW5fYmxvY2stLTsKKwkJCX0KKwkJfSB3aGlsZSAoKmJ1ZmZlcikgOworCX0KKworCWVsc2UgeworCQljaF9wdHI9YnVmZmVyOworCQl3aGlsZSAoKmNoX3B0cikgeworCQkJdG1wPSh1bnNpZ25lZCBjaGFyKSAqY2hfcHRyKys7CisJCQlmaWxlX2luZm8uYnVmZmVyIFtmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrXT10bXA7CisJCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrKys7CisJCQlpZiAoZmlsZV9pbmZvLm9mZnNldF9pbl9ibG9jaz09ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCQkJaWYgKCpjaF9wdHIpIHsKKwkJCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW5kaW5nIG9mZnNldCBvdXRzaWRlIGJsb2NrLCBvbmx5IHBhcnRpYWwgc3RyaW5nIGNoYW5nZWRcbiIpOworCQkJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJCX0KKwkJCQlmaWxlX2luZm8ub2Zmc2V0X2luX2Jsb2NrLS07CisJCQl9CisJCX0KKwl9CisKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZmlsZV9fX3dyaXRlZGF0YSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG93X3dyaXRlIChmaWxlX2luZm8uYnVmZmVyLGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSxmaWxlX2luZm8uZ2xvYmFsX2Jsb2NrX29mZnNldCk7CisJcmV0dXJuOworfQorCitsb25nIGZpbGVfYmxvY2tfdG9fZ2xvYmFsX2Jsb2NrIChsb25nIGZpbGVfYmxvY2ssc3RydWN0IHN0cnVjdF9maWxlX2luZm8gKmZpbGVfaW5mb19wdHIpCisKK3sKKwlsb25nIGxhc3RfZGlyZWN0LGxhc3RfaW5kaXJlY3QsbGFzdF9kaW5kaXJlY3Q7CisKKwlsYXN0X2RpcmVjdD1FWFQyX05ESVJfQkxPQ0tTLTE7CisJbGFzdF9pbmRpcmVjdD1sYXN0X2RpcmVjdCtmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNDsKKwlsYXN0X2RpbmRpcmVjdD1sYXN0X2luZGlyZWN0KyhmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkqKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KTsKKworCWlmIChmaWxlX2Jsb2NrIDw9IGxhc3RfZGlyZWN0KSB7CisJCWZpbGVfaW5mb19wdHItPmxldmVsPTA7CisJCXJldHVybiAoZmlsZV9pbmZvX3B0ci0+aW5vZGVfcHRyLT5pX2Jsb2NrIFtmaWxlX2Jsb2NrXSk7CisJfQorCisJaWYgKGZpbGVfYmxvY2sgPD0gbGFzdF9pbmRpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLT5sZXZlbD0xOworCQlmaWxlX2Jsb2NrPWZpbGVfYmxvY2stbGFzdF9kaXJlY3QtMTsKKwkJcmV0dXJuIChyZXR1cm5faW5kaXJlY3QgKGZpbGVfaW5mb19wdHItPmlub2RlX3B0ci0+aV9ibG9jayBbRVhUMl9JTkRfQkxPQ0tdLGZpbGVfYmxvY2spKTsKKwl9CisKKwlpZiAoZmlsZV9ibG9jayA8PSBsYXN0X2RpbmRpcmVjdCkgeworCQlmaWxlX2luZm9fcHRyLT5sZXZlbD0yOworCQlmaWxlX2Jsb2NrPWZpbGVfYmxvY2stbGFzdF9pbmRpcmVjdC0xOworCQlyZXR1cm4gKHJldHVybl9kaW5kaXJlY3QgKGZpbGVfaW5mb19wdHItPmlub2RlX3B0ci0+aV9ibG9jayBbRVhUMl9ESU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7CisJfQorCisJZmlsZV9pbmZvX3B0ci0+bGV2ZWw9MzsKKwlmaWxlX2Jsb2NrPWZpbGVfYmxvY2stbGFzdF9kaW5kaXJlY3QtMTsKKwlyZXR1cm4gKHJldHVybl90aW5kaXJlY3QgKGZpbGVfaW5mb19wdHItPmlub2RlX3B0ci0+aV9ibG9jayBbRVhUMl9USU5EX0JMT0NLXSxmaWxlX2Jsb2NrKSk7Cit9CisKK2xvbmcgcmV0dXJuX2luZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKQorCit7CisJbG9uZyBibG9ja190YWJsZSBbRVhUMl9NQVhfQkxPQ0tfU0laRS80XTsKKworCWxvd19yZWFkICgoY2hhciAqKSBibG9ja190YWJsZSxmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUsdGFibGVfYmxvY2sqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKTsKKwlyZXR1cm4gKGJsb2NrX3RhYmxlIFtibG9ja19udW1dKTsKK30KKworbG9uZyByZXR1cm5fZGluZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKQorCit7CisJbG9uZyBmX2luZGlyZWN0OworCisJZl9pbmRpcmVjdD1ibG9ja19udW0vKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KTsKKwlmX2luZGlyZWN0PXJldHVybl9pbmRpcmVjdCAodGFibGVfYmxvY2ssZl9pbmRpcmVjdCk7CisJcmV0dXJuIChyZXR1cm5faW5kaXJlY3QgKGZfaW5kaXJlY3QsYmxvY2tfbnVtJShmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkpKTsKK30KKworbG9uZyByZXR1cm5fdGluZGlyZWN0IChsb25nIHRhYmxlX2Jsb2NrLGxvbmcgYmxvY2tfbnVtKQorCit7CisJbG9uZyBzX2luZGlyZWN0OworCisJc19pbmRpcmVjdD1ibG9ja19udW0vKChmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkqKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KSk7CisJc19pbmRpcmVjdD1yZXR1cm5faW5kaXJlY3QgKHRhYmxlX2Jsb2NrLHNfaW5kaXJlY3QpOworCXJldHVybiAocmV0dXJuX2RpbmRpcmVjdCAoc19pbmRpcmVjdCxibG9ja19udW0lKChmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvNCkqKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZS80KSkpKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9leHQyZWQvZ2VuZXJhbF9jb20uYyBiL2UyZnNwcm9ncy9leHQyZWQvZ2VuZXJhbF9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RjMjYxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9nZW5lcmFsX2NvbS5jCkBAIC0wLDAgKzEsOTA2IEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvZ2VuZXJhbF9jb20uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhbCB1c2VyIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorCit2b2lkIGhlbHAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWludCBpLG1heF9saW5lPTA7CisJY2hhciBhcmd1bWVudCBbODBdLCpwdHI7CisKKwl3ZXJhc2UgKHNob3dfcGFkKTt3bW92ZSAoc2hvd19wYWQsMCwwKTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYXJndW1lbnQpOworCisJaWYgKCpwdHIhPTApIHsKKwkJIHB0cj1wYXJzZV93b3JkIChwdHIsYXJndW1lbnQpOworCQkgaWYgKCphcmd1bWVudCE9MCkgeworCQkJIGRldGFpbGVkX2hlbHAgKGFyZ3VtZW50KTsKKwkJCSByZXR1cm47CisJCX0KKwl9CisKKwlpZiAoY3VycmVudF90eXBlIT1OVUxMKSB7CisKKwkJd3ByaW50dyAoc2hvd19wYWQsIlR5cGUgJXMgc3BlY2lmaWMgY29tbWFuZHM6XG4iLGN1cnJlbnRfdHlwZS0+bmFtZSk7bWF4X2xpbmUrKzsKKworCQlpZiAoY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLmxhc3RfY29tbWFuZD09LTEpIHsKKwkJCXdwcmludHcgKHNob3dfcGFkLCJcbm5vbmVcbiIpO21heF9saW5lKz0yOworCQl9CisJCWVsc2UKKwkJCWZvciAoaT0wO2k8PWN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCQkJaWYgKGklNT09MCkgeworCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTttYXhfbGluZSsrOworCQkJCX0KKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiJS0xM3MiLGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5uYW1lcyBbaV0pOworCQkJCWlmIChpJTUhPTQpCisJCQkJCXdwcmludHcgKHNob3dfcGFkLCI7ICAiKTsKKwkJCX0KKworCQl3cHJpbnR3IChzaG93X3BhZCwiXG5cbiIpO21heF9saW5lKz0yOworCX0KKworCWlmIChleHQyX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAhPSAtMSkgeworCQl3cHJpbnR3IChzaG93X3BhZCwiZXh0MiBmaWxlc3lzdGVtIGdlbmVyYWwgY29tbWFuZHM6IFxuIik7bWF4X2xpbmUrKzsKKwkJZm9yIChpPTA7aTw9ZXh0Ml9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCQlpZiAoaSU1PT0wKSB7CisJCQkJd3ByaW50dyAoc2hvd19wYWQsIlxuIik7bWF4X2xpbmUrKzsKKwkJCX0KKwkJCXdwcmludHcgKHNob3dfcGFkLCIlLTEzcyIsZXh0Ml9jb21tYW5kcy5uYW1lcyBbaV0pOworCQkJaWYgKGklNSE9NCkKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiOyAgIik7CisKKwkJfQorCQl3cHJpbnR3IChzaG93X3BhZCwiXG5cbiIpO21heF9saW5lKz0yOworCX0KKworCXdwcmludHcgKHNob3dfcGFkLCJHZW5lcmFsIGNvbW1hbmRzOiBcbiIpOworCisJZm9yIChpPTA7aTw9Z2VuZXJhbF9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCWlmIChpJTU9PTApIHsKKwkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpO21heF9saW5lKys7CisJCX0KKwkJd3ByaW50dyAoc2hvd19wYWQsIiUtMTNzIixnZW5lcmFsX2NvbW1hbmRzLm5hbWVzIFtpXSk7CisJCWlmIChpJTUhPTQpCisJCQl3cHJpbnR3IChzaG93X3BhZCwiOyAgIik7CisJfQorCisJd3ByaW50dyAoc2hvd19wYWQsIlxuXG4iKTttYXhfbGluZSs9MjsKKworCXdwcmludHcgKHNob3dfcGFkLCJFWFQyRUQgdmVyICVzICglcylcbiIsRTJGU1BST0dTX1ZFUlNJT04sIEUyRlNQUk9HU19EQVRFKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW5cbiIpOworCXdwcmludHcgKHNob3dfcGFkLCJSZXZpZXdlZCAyMDAxIENocmlzdGlhbiBCYWNcbiIpOworCXdwcmludHcgKHNob3dfcGFkLCJNb2RpZmllZCBhbmQgZW5jaGFuY2VkIGJ5IFRoZW9kb3JlIFRzJ28sIDIwMDJcbiIpOworCXdwcmludHcgKHNob3dfcGFkLCJFWFQyRUQgaXMgaGVyZWJ5IHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwiRVhUMkVEIHdhcyBwcm9ncmFtbWVkIGFzIGEgc3R1ZGVudCBwcm9qZWN0IGluIHRoZSBzb2Z0d2FyZSBsYWJvcmF0b3J5XG4iKTsKKwl3cHJpbnR3IChzaG93X3BhZCwib2YgdGhlIGZhY3VsdHkgb2YgZWxlY3RyaWNhbCBlbmdpbmVlcmluZyBpbiB0aGVcbiIpOworCXdwcmludHcgKHNob3dfcGFkLCJUZWNobmlvbiAtIElzcmFlbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neVxuIik7CisJd3ByaW50dyAoc2hvd19wYWQsIndpdGggdGhlIGd1aWRlIG9mIEF2bmVyIExvdHRlbSBhbmQgRHIuIElsYW5hIERhdmlkLlxuIik7CisKKwltYXhfbGluZSs9MTA7CisKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDtzaG93X3BhZF9pbmZvLm1heF9saW5lPW1heF9saW5lOworCisJd2VyYXNlIChzaG93X3dpbik7d21vdmUgKHNob3dfd2luLDAsMCk7CisJd3ByaW50dyAoc2hvd193aW4sIkVYVDJFRCBoZWxwIik7CisKKwlyZWZyZXNoX3Nob3dfd2luICgpOworCXJlZnJlc2hfc2hvd19wYWQgKCk7Cit9CisKK3ZvaWQgZGV0YWlsZWRfaGVscCAoY2hhciAqdGV4dCkKKworeworCWludCBpOworCisJaWYgKGN1cnJlbnRfdHlwZSAhPSBOVUxMKQorCQlmb3IgKGk9MDtpPD1jdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubGFzdF9jb21tYW5kO2krKykgeworCQkJaWYgKHN0cmNtcCAoY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLm5hbWVzIFtpXSx0ZXh0KT09MCkgeworCQkJCXdwcmludHcgKHNob3dfcGFkLCIlcyAtICVzXG4iLHRleHQsY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLmRlc2NyaXB0aW9ucyBbaV0pOworCQkJCXJlZnJlc2hfc2hvd19wYWQgKCk7cmV0dXJuOworCQkJfQorCQl9CisKKwlmb3IgKGk9MDtpPD1leHQyX2NvbW1hbmRzLmxhc3RfY29tbWFuZDtpKyspIHsKKwkJaWYgKHN0cmNtcCAoZXh0Ml9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCk9PTApIHsKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiJXMgLSAlc1xuIix0ZXh0LGV4dDJfY29tbWFuZHMuZGVzY3JpcHRpb25zIFtpXSk7CisJCQkJcmVmcmVzaF9zaG93X3BhZCAoKTtyZXR1cm47CisJCX0KKwl9CisKKwlmb3IgKGk9MDtpPD1nZW5lcmFsX2NvbW1hbmRzLmxhc3RfY29tbWFuZDtpKyspIHsKKwkJaWYgKHN0cmNtcCAoZ2VuZXJhbF9jb21tYW5kcy5uYW1lcyBbaV0sdGV4dCk9PTApIHsKKwkJCQl3cHJpbnR3IChzaG93X3BhZCwiJXMgLSAlc1xuIix0ZXh0LGdlbmVyYWxfY29tbWFuZHMuZGVzY3JpcHRpb25zIFtpXSk7CisJCQkJcmVmcmVzaF9zaG93X3BhZCAoKTtyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoc3RyY21wICgicXVpdCIsdGV4dCk9PTApIHsKKwkJd3ByaW50dyAoc2hvd19wYWQsInF1aXQgLSBFeGlzdHMgRVhUMkVEIik7CisJCXJlZnJlc2hfc2hvd19wYWQgKCk7cmV0dXJuOworCX0KKworCXdwcmludHcgKHNob3dfcGFkLCJFcnJvciAtIENvbW1hbmQgJXMgbm90IGF2aWFibGUgbm93XG4iLHRleHQpOworCXJlZnJlc2hfc2hvd19wYWQgKCk7cmV0dXJuOworfQorCisKKwordm9pZCBzZXRfZGV2aWNlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyICpwdHIsbmV3X2RldmljZSBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxuZXdfZGV2aWNlKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBEZXZpY2UgbmFtZSBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXBhcnNlX3dvcmQgKHB0cixuZXdfZGV2aWNlKTsKKwljaGVja19tb3VudGVkIChuZXdfZGV2aWNlKTsKKwlpZiAobW91bnRlZCAmJiAhQWxsb3dNb3VudGVkUmVhZCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBGaWxlc3lzdGVtIGlzIG1vdW50ZWQsIGFib3J0aW5nXG4iKTsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIllvdSBtYXkgd2lzaCB0byB1c2UgdGhlIEFsbG93TW91bnRlZFJlYWQgb24gY29uZmlndXJhdGlvbiBvcHRpb25cbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlpZiAobW91bnRlZCAmJiBBbGxvd01vdW50ZWRSZWFkKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJXYXJuaW5nIC0gRmlsZXN5c3RlbSBpcyBtb3VudGVkLiBEaXNwbGF5ZWQgZGF0YSBtYXkgYmUgdW5yZWxpYWJsZS5cbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KKworCWlmIChkZXZpY2VfaGFuZGxlIT1OVUxMKQorCQlmY2xvc2UgKGRldmljZV9oYW5kbGUpOworCisJaWYgKCAoZGV2aWNlX2hhbmRsZT1mb3BlbiAobmV3X2RldmljZSwicmIiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ2FuIG5vdCBvcGVuIGRldmljZSAlc1xuIixuZXdfZGV2aWNlKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCWVsc2UgeworCQlzdHJjcHkgKGRldmljZV9uYW1lLG5ld19kZXZpY2UpOworCQl3cml0ZV9hY2Nlc3M9MDsJCQkJLyogV3JpdGUgYWNjZXNzIGRpc2FibGVkICovCisJCWN1cnJlbnRfdHlwZT1OVUxMOwkJCS8qIFRoZXJlIGlzIG5vIHR5cGUgbm93ICovCisJCXJlbWVtYmVyX2xpZm8uZW50cmllc19jb3VudD0wOwkJLyogRW1wdHkgT2JqZWN0IG1lbW9yeSAqLworCQlmcmVlX3VzZXJfY29tbWFuZHMgKCZleHQyX2NvbW1hbmRzKTsJLyogRnJlZSBmaWxlc3lzdGVtIHNwZWNpZmljIG9iamVjdHMgKi8KKwkJZnJlZV9zdHJ1Y3RfZGVzY3JpcHRvcnMgKCk7CisJCWlmICghc2V0X2ZpbGVfc3lzdGVtX2luZm8gKCkpIHsJCS8qIEVycm9yIHdoaWxlIGdldHRpbmcgaW5mbyAtLT4gYWJvcnQgKi8KKwkJCWZyZWVfdXNlcl9jb21tYW5kcyAoJmV4dDJfY29tbWFuZHMpOworCQkJZnJlZV9zdHJ1Y3RfZGVzY3JpcHRvcnMgKCk7CisJCQlmY2xvc2UgKGRldmljZV9oYW5kbGUpOworCQkJZGV2aWNlX2hhbmRsZT1OVUxMOwkJLyogTm90aWNlIHRoYXQgb3VyIGRldmljZSBpcyBzdGlsbCBub3Qgc2V0IHVwICovCisJCQlkZXZpY2Vfb2Zmc2V0PS0xOworCQkJcmV0dXJuOworCQl9CisJCWlmICgqQWx0ZXJuYXRlRGVzY3JpcHRvcnMpCQkvKiBDaGVjayBpZiB1c2VyIGRlZmluZWQgb2JqZWN0cyBleGlzdCAqLworCQkJc2V0X3N0cnVjdF9kZXNjcmlwdG9ycyAoQWx0ZXJuYXRlRGVzY3JpcHRvcnMpOworCQlkaXNwYXRjaCAoInNldG9mZnNldCAwIik7CisJCWRpc3BhdGNoICgiaGVscCIpOwkJCS8qIFNob3cgaGVscCBzY3JlZW4gKi8KKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkRldmljZSBjaGFuZ2VkIHRvICVzIixkZXZpY2VfbmFtZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgc2V0X29mZnNldCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBtdWx0PTE7CisJbG9uZyBuZXdfb2Zmc2V0OworCWNoYXIgKnB0cixuZXdfb2Zmc2V0X2J1ZmZlciBbODBdOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsbmV3X29mZnNldF9idWZmZXIpOworCisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gYXJndW1lbnQgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKHB0cixuZXdfb2Zmc2V0X2J1ZmZlcik7CisKKwlpZiAoc3RyY21wIChuZXdfb2Zmc2V0X2J1ZmZlciwiYmxvY2siKT09MCkgeworCQltdWx0PWZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixuZXdfb2Zmc2V0X2J1ZmZlcik7CisJfQorCisJaWYgKHN0cmNtcCAobmV3X29mZnNldF9idWZmZXIsInR5cGUiKT09MCkgeworCQlpZiAoY3VycmVudF90eXBlPT1OVUxMKSB7CisJCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyB0eXBlIHNldFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCXJldHVybjsKKwkJfQorCisJCW11bHQ9Y3VycmVudF90eXBlLT5sZW5ndGg7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsbmV3X29mZnNldF9idWZmZXIpOworCX0KKworCWlmICgqbmV3X29mZnNldF9idWZmZXI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gb2Zmc2V0IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChuZXdfb2Zmc2V0X2J1ZmZlciBbMF09PScrJykgeworCQlpZiAoZGV2aWNlX29mZnNldD09LTEpIHsKKwkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFNlbGVjdCBhIGZpeGVkIG9mZnNldCBmaXJzdFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCXJldHVybjsKKwkJfQorCQluZXdfb2Zmc2V0PWRldmljZV9vZmZzZXQrYXRvbCAobmV3X29mZnNldF9idWZmZXIrMSkqbXVsdDsKKwl9CisKKwllbHNlIGlmIChuZXdfb2Zmc2V0X2J1ZmZlciBbMF09PSctJykgeworCQlpZiAoZGV2aWNlX29mZnNldD09LTEpIHsKKwkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFNlbGVjdCBhIGZpeGVkIG9mZnNldCBmaXJzdFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCXJldHVybjsKKwkJfQorCQluZXdfb2Zmc2V0PWRldmljZV9vZmZzZXQtYXRvbCAobmV3X29mZnNldF9idWZmZXIrMSkqbXVsdDsKKwkJaWYgKG5ld19vZmZzZXQ8MCkgbmV3X29mZnNldD0wOworCX0KKworCWVsc2UKKwkJbmV3X29mZnNldD1hdG9sIChuZXdfb2Zmc2V0X2J1ZmZlcikqbXVsdDsKKworCWlmICggKGZzZWVrIChkZXZpY2VfaGFuZGxlLG5ld19vZmZzZXQsU0VFS19TRVQpKT09LTEpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIHNlZWsgdG8gb2Zmc2V0ICVsZCBpbiBkZXZpY2UgJXNcbiIsbmV3X29mZnNldCxkZXZpY2VfbmFtZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9OworCWRldmljZV9vZmZzZXQ9bmV3X29mZnNldDsKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiRGV2aWNlIG9mZnNldCBjaGFuZ2VkIHRvICVsZFxuIixkZXZpY2Vfb2Zmc2V0KTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCWxvYWRfdHlwZV9kYXRhICgpOworCXR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2s9MDsKK30KKwordm9pZCBzZXRfaW50KHNob3J0IGxlbiwgdm9pZCAqcHRyLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwljaGFyCSpjaGFyX3B0cjsKKwlzaG9ydAkqc2hvcnRfcHRyOworCWxvbmcJKmxvbmdfcHRyOworCWxvbmcJdjsKKwljaGFyCSp0bXA7CisKKwl2ID0gc3RydG9sKHZhbHVlLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQl3cHJpbnR3KCBjb21tYW5kX3dpbiwgIkJhZCB2YWx1ZSAtICVzXG4iLCB2YWx1ZSk7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCWNoYXJfcHRyID0gKGNoYXIgKikgcHRyOworCQkqY2hhcl9wdHIgPSB2OworCQlicmVhazsKKwljYXNlIDI6CisJCXNob3J0X3B0ciA9IChzaG9ydCAqKSBwdHI7CisJCSpzaG9ydF9wdHIgPSB2OworCQlicmVhazsKKwljYXNlIDQ6CisJCWxvbmdfcHRyID0gKGxvbmcgKikgcHRyOworCQkqbG9uZ19wdHIgPSB2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwKKwkJCSAic2V0X2ludDogdW5zdXBwb3J0ZWQgbGVuZ3RoOiAlZFxuIiwgbGVuKTsKKwkJcmV0dXJuOworCX0KKwl3cHJpbnR3IChjb21tYW5kX3dpbiwgIlZhcmlhYmxlICVzIHNldCB0byAlc1xuIiwKKwkJIG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBzZXRfdWludChzaG9ydCBsZW4sIHZvaWQgKnB0ciwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJdW5zaWduZWQgY2hhcgkqY2hhcl9wdHI7CisJdW5zaWduZWQgc2hvcnQJKnNob3J0X3B0cjsKKwl1bnNpZ25lZCBsb25nCSpsb25nX3B0cjsKKwl1bnNpZ25lZCBsb25nCXY7CisJY2hhcgkJKnRtcDsKKworCXYgPSBzdHJ0b3VsKHZhbHVlLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQl3cHJpbnR3KCBjb21tYW5kX3dpbiwgIkJhZCB2YWx1ZSAtICVzXG4iLCB2YWx1ZSk7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCWNoYXJfcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOworCQkqY2hhcl9wdHIgPSB2OworCQlicmVhazsKKwljYXNlIDI6CisJCXNob3J0X3B0ciA9ICh1bnNpZ25lZCBzaG9ydCAqKSBwdHI7CisJCSpzaG9ydF9wdHIgPSB2OworCQlicmVhazsKKwljYXNlIDQ6CisJCWxvbmdfcHRyID0gKHVuc2lnbmVkIGxvbmcgKikgcHRyOworCQkqbG9uZ19wdHIgPSB2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwKKwkJCSAic2V0X3VpbnQ6IHVuc3VwcG9ydGVkIGxlbmd0aDogJWRcbiIsIGxlbik7CisJCXJldHVybjsKKwl9CisJd3ByaW50dyAoY29tbWFuZF93aW4sICJWYXJpYWJsZSAlcyBzZXQgdG8gJXNcbiIsCisJCSBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgc2V0X2NoYXIoc2hvcnQgbGVuLCB2b2lkICpwdHIsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCWlmIChzdHJsZW4odmFsdWUpKzEgPiBsZW4pIHsKKwkJd3ByaW50dyggY29tbWFuZF93aW4sICJWYWx1ZSAlcyB0b28gYmlnIGZvciBmaWVsZFxuIiwKKwkJCW5hbWUsIGxlbik7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KHB0ciwgMCwgbGVuKTsKKwlzdHJjcHkoKGNoYXIgKikgcHRyLCB2YWx1ZSk7CisJd3ByaW50dyAoY29tbWFuZF93aW4sICJWYXJpYWJsZSAlcyBzZXQgdG8gJXNcbiIsCisJCSBuYW1lLCB2YWx1ZSk7Cit9CisKKwordm9pZCBzZXQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIHNob3J0ICppbnRfcHRyOworCXVuc2lnbmVkIGNoYXIgKmNoYXJfcHRyOworCXVuc2lnbmVkIGxvbmcgKmxvbmdfcHRyLG9mZnNldD0wOworCWludCBpLGxlbiwgZm91bmQ9MDsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF0sdmFyaWFibGUgWzgwXSx2YWx1ZSBbODBdOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjdXJyZW50X3R5cGU9PU5VTEwpIHsKKwkJaGV4X3NldCAoY29tbWFuZF9saW5lKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAocHRyPT1OVUxMIHx8ICpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTWlzc2luZyBhcmd1bWVudHNcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisJcGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJcHRyPXN0cmNociAoYnVmZmVyLCc9Jyk7CisJaWYgKHB0cj09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBCYWQgc3ludGF4XG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJc3RybmNweSAodmFyaWFibGUsYnVmZmVyLHB0ci1idWZmZXIpO3ZhcmlhYmxlIFtwdHItYnVmZmVyXT0wOworCXN0cmNweSAodmFsdWUsKytwdHIpOworCisJaWYgKGN1cnJlbnRfdHlwZT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiU29ycnksIG5vdCB5ZXQgc3VwcG9ydGVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlmb3IgKGk9MDtpPGN1cnJlbnRfdHlwZS0+ZmllbGRzX251bSAmJiAhZm91bmQ7aSsrKSB7CisJCWlmIChzdHJjbXAgKGN1cnJlbnRfdHlwZS0+ZmllbGRfbmFtZXMgW2ldLHZhcmlhYmxlKT09MCkgeworCQkJZm91bmQ9MTsKKwkJCXB0cj10eXBlX2RhdGEudS5idWZmZXIrb2Zmc2V0OworCQkJbGVuID0gY3VycmVudF90eXBlLT5maWVsZF9sZW5ndGhzIFtpXTsKKwkJCXN3aXRjaCAoY3VycmVudF90eXBlLT5maWVsZF90eXBlcyBbaV0pIHsKKwkJCWNhc2UgRklFTERfVFlQRV9JTlQ6CisJCQkJc2V0X2ludChsZW4sIHB0ciwgdmFyaWFibGUsIHZhbHVlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRklFTERfVFlQRV9VSU5UOgorCQkJCXNldF91aW50KGxlbiwgcHRyLCB2YXJpYWJsZSwgdmFsdWUpOworCQkJCWJyZWFrOworCQkJY2FzZSBGSUVMRF9UWVBFX0NIQVI6CisJCQkJc2V0X2NoYXIobGVuLCBwdHIsIHZhcmlhYmxlLCB2YWx1ZSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXdwcmludHcgKGNvbW1hbmRfd2luLAorCQkJCQkgInNldDogdW5oYW5kbGVkIHR5cGUgJWRcbiIsCisJCQkJCSBjdXJyZW50X3R5cGUtPmZpZWxkX3R5cGVzIFtpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQl9CisJCW9mZnNldCs9Y3VycmVudF90eXBlLT5maWVsZF9sZW5ndGhzIFtpXTsKKwl9CisJaWYgKGZvdW5kKQorCQlkaXNwYXRjaCAoInNob3ciKTsKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gVmFyaWFibGUgJXMgbm90IGZvdW5kXG4iLHZhcmlhYmxlKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgaGV4X3NldCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJdW5zaWduZWQgY2hhciB0bXA7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdLCpjaF9wdHI7CisJaW50IG1vZGU9SEVYOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEFyZ3VtZW50IG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWlmIChzdHJjYXNlY21wIChidWZmZXIsInRleHQiKT09MCkgeworCQltb2RlPVRFWFQ7CisJCXN0cmNweSAoYnVmZmVyLHB0cik7CisJfQorCisJZWxzZSBpZiAoc3RyY2FzZWNtcCAoYnVmZmVyLCJoZXgiKT09MCkgeworCQltb2RlPUhFWDsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCX0KKworCWlmICgqYnVmZmVyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIERhdGEgbm90IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCisJaWYgKG1vZGU9PUhFWCkgeworCQlkbyB7CisJCQl0bXA9KHVuc2lnbmVkIGNoYXIpIHN0cnRvbCAoYnVmZmVyLE5VTEwsMTYpOworCQkJdHlwZV9kYXRhLnUuYnVmZmVyIFt0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrXT10bXA7CisJCQl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrKys7CisJCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCQlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaz09ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCQkJaWYgKCpwdHIpIHsKKwkJCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW5kaW5nIG9mZnNldCBvdXRzaWRlIGJsb2NrLCBvbmx5IHBhcnRpYWwgc3RyaW5nIGNoYW5nZWRcbiIpOworCQkJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJCX0KKwkJCQl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrLS07CisJCQl9CisJCX0gd2hpbGUgKCpidWZmZXIpIDsKKwl9CisKKwllbHNlIHsKKwkJY2hfcHRyPWJ1ZmZlcjsKKwkJd2hpbGUgKCpjaF9wdHIpIHsKKwkJCXRtcD0odW5zaWduZWQgY2hhcikgKmNoX3B0cisrOworCQkJdHlwZV9kYXRhLnUuYnVmZmVyIFt0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrXT10bXA7CisJCQl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrKys7CisJCQlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaz09ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKSB7CisJCQkJaWYgKCpjaF9wdHIpIHsKKwkJCQkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW5kaW5nIG9mZnNldCBvdXRzaWRlIGJsb2NrLCBvbmx5IHBhcnRpYWwgc3RyaW5nIGNoYW5nZWRcbiIpOworCQkJCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQkJCX0KKwkJCQl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrLS07CisJCQl9CisJCX0KKwl9CisKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCisKKwordm9pZCBzZXRfdHlwZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpkZXNjcmlwdG9yX3B0cjsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF0sdG1wX2J1ZmZlciBbODBdOworCXNob3J0IGZvdW5kPTA7CisKKwlpZiAoIWxvYWRfdHlwZV9kYXRhICgpKQorCQlyZXR1cm47CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJcGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwlpZiAoc3RyY21wIChidWZmZXIsIm5vbmUiKT09MCB8fCBzdHJjbXAgKGJ1ZmZlciwiaGV4Iik9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkRhdGEgd2lsbCBiZSBzaG93biBhcyBoZXggZHVtcFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJY3VycmVudF90eXBlPU5VTEw7CisJCXNwcmludGYgKHRtcF9idWZmZXIsInNob3ciKTtkaXNwYXRjaCAodG1wX2J1ZmZlcik7CisJCXJldHVybjsKKwl9CisKKwlkZXNjcmlwdG9yX3B0cj1maXJzdF90eXBlOworCXdoaWxlIChkZXNjcmlwdG9yX3B0ciE9TlVMTCAmJiAhZm91bmQpIHsKKwkJaWYgKHN0cmNtcCAoZGVzY3JpcHRvcl9wdHItPm5hbWUsYnVmZmVyKT09MCkKKwkJCWZvdW5kPTE7CisJCWVsc2UKKwkJCWRlc2NyaXB0b3JfcHRyPWRlc2NyaXB0b3JfcHRyLT5uZXh0OworCX0KKwlpZiAoZm91bmQpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlN0cnVjdHVyZSB0eXBlIHNldCB0byAlc1xuIixidWZmZXIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCWN1cnJlbnRfdHlwZT1kZXNjcmlwdG9yX3B0cjsKKwkJc3ByaW50ZiAodG1wX2J1ZmZlciwic2hvdyIpO2Rpc3BhdGNoICh0bXBfYnVmZmVyKTsKKwl9CisJZWxzZSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtICVzIGlzIG5vdCBhIHZhbGlkIHR5cGVcbiIsYnVmZmVyKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KK30KKwordm9pZCBzaG93X2ludChzaG9ydCBsZW4sIHZvaWQgKnB0cikKK3sKKwlsb25nCXRlbXA7CisJY2hhcgkqZm9ybWF0OworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCXRlbXAgPSAqKChjaGFyICopIHB0cik7CisJCWZvcm1hdCA9ICIlM2QgKDB4JTAyeClcbiI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdGVtcCA9ICooKHNob3J0ICopIHB0cik7CisJCWZvcm1hdCA9ICIlZCAoMHgleClcbiI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdGVtcCA9ICooKGxvbmcgKikgcHRyKTsKKwkJZm9ybWF0ID0gIiVkXG4iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3cHJpbnR3IChzaG93X3BhZCwgInVuaW1wbGVtZW50ZWRcbiIpOworCQlyZXR1cm47CisJfQorCXdwcmludHcoc2hvd19wYWQsIGZvcm1hdCwgdGVtcCwgdGVtcCk7Cit9CisKK3ZvaWQgc2hvd191aW50KHNob3J0IGxlbiwgdm9pZCAqcHRyKQoreworCXVuc2lnbmVkIGxvbmcJdGVtcDsKKwljaGFyCQkqZm9ybWF0OworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCXRlbXAgPSAqKCh1bnNpZ25lZCBjaGFyICopIHB0cik7CisJCXRlbXAgPSB0ZW1wICYgMHhGRjsKKwkJZm9ybWF0ID0gIiUzdSAoMHglMDJ4KVxuIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0ZW1wID0gKigodW5zaWduZWQgc2hvcnQgKikgcHRyKTsKKwkJdGVtcCA9IHRlbXAgJiAweEZGRkY7CisJCWZvcm1hdCA9ICIldSAoMHgleClcbiI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdGVtcCA9ICh1bnNpZ25lZCBsb25nKSAqKCh1bnNpZ25lZCBsb25nICopIHB0cik7CisJCWZvcm1hdCA9ICIldVxuIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3ByaW50dyAoc2hvd19wYWQsICJ1bmltcGxlbWVudGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwl3cHJpbnR3KHNob3dfcGFkLCBmb3JtYXQsIHRlbXAsIHRlbXApOworfQorCit2b2lkIHNob3dfY2hhcihzaG9ydCBsZW4sIHZvaWQgKnB0cikKK3sKKwl1bnNpZ25lZCBjaGFyCSpjcCA9ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKKwl1bnNpZ25lZCBjaGFyCWNoOworCWludAkJaSxqOworCisJd3ByaW50dyhzaG93X3BhZCwgIlwiIik7CisKKwlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJCWNoID0gKmNwKys7CisJCWlmIChjaCA9PSAwKSB7CisJCQlmb3IgKGo9aSsxOyBqIDwgbGVuOyBqKyspCisJCQkJaWYgKGNwW2otaV0pCisJCQkJCWJyZWFrOworCQkJaWYgKGogPT0gbGVuKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChjaCA+IDEyOCkgeworCQkJd3ByaW50dyhzaG93X3BhZCwgIk0tIik7CisJCQljaCAtPSAxMjg7CisJCX0KKwkJaWYgKChjaCA8IDMyKSB8fCAoY2ggPT0gMHg3ZikpIHsKKwkJCXdwcmludHcoc2hvd19wYWQsICJeIik7CisJCQljaCBePSAweDQwOyAvKiBeQCwgXkEsIF5COyBePyBmb3IgREVMICovCisJCX0KKwkJd3ByaW50dyhzaG93X3BhZCwgIiVjIiwgY2gpOworCX0KKworCXdwcmludHcoc2hvd19wYWQsICJcIlxuIik7Cit9CisKKworCit2b2lkIHNob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGludCBpLGwsbGVuLHRlbXBfaW50OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0PTAsdGVtcF9sb25nOworCXVuc2lnbmVkIGNoYXIgdGVtcF9jaGFyLCpjaF9wdHI7CisJdm9pZCAqcHRyOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpCisJCXJldHVybjsKKworCXNob3dfcGFkX2luZm8ubGluZT0wOworCisJaWYgKGN1cnJlbnRfdHlwZT09TlVMTCkgeworCQl3bW92ZSAoc2hvd19wYWQsMCwwKTsKKwkJY2hfcHRyPXR5cGVfZGF0YS51LmJ1ZmZlcjsKKwkJZm9yIChsPTA7bDxmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvMTY7bCsrKSB7CisJCQl3cHJpbnR3IChzaG93X3BhZCwiJTA4bGQgOiAgIixvZmZzZXQpOworCQkJZm9yIChpPTA7aTwxNjtpKyspIHsKKwkJCQlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaz09b2Zmc2V0K2kpCisJCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX1JFVkVSU0UpOworCisJCQkJaWYgKGNoX3B0ciBbaV0+PScgJyAmJiBjaF9wdHIgW2ldPD0neicpCisJCQkJCXdwcmludHcgKHNob3dfcGFkLCIlYyIsY2hfcHRyIFtpXSk7CisJCQkJZWxzZQorCQkJCQl3cHJpbnR3IChzaG93X3BhZCwiLiIpOworCQkJCWlmICh0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQraSkKKwkJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfTk9STUFMKTsKKwkJCX0KKwkJCXdwcmludHcgKHNob3dfcGFkLCIgICAiKTsKKwkJCWZvciAoaT0wO2k8MTY7aSsrKSB7CisJCQkJaWYgKHR5cGVfZGF0YS5vZmZzZXRfaW5fYmxvY2s9PW9mZnNldCtpKQorCQkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9SRVZFUlNFKTsKKworCQkJCXdwcmludHcgKHNob3dfcGFkLCIlMDJ4IixjaF9wdHIgW2ldKTsKKworCQkJCWlmICh0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrPT1vZmZzZXQraSkgeworCQkJCQl3YXR0cnNldCAoc2hvd19wYWQsQV9OT1JNQUwpOworCQkJCQlzaG93X3BhZF9pbmZvLmxpbmU9bC1sICUgc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzOworCQkJCX0KKworCQkJCXdwcmludHcgKHNob3dfcGFkLCIgIik7CisJCQl9CisJCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJCW9mZnNldCs9MTY7CisJCQljaF9wdHIrPTE2OworCQl9CisJCXNob3dfcGFkX2luZm8ubWF4X2xpbmU9bC0xO3Nob3dfcGFkX2luZm8ubWF4X2NvbD1DT0xTLTE7CisJCXJlZnJlc2hfc2hvd19wYWQgKCk7c2hvd19pbmZvICgpOworCX0KKwllbHNlIHsKKwkJd21vdmUgKHNob3dfcGFkLDAsMCk7bD0wOworCQlmb3IgKGk9MDtpPGN1cnJlbnRfdHlwZS0+ZmllbGRzX251bTtpKyspIHsKKwkJCXdwcmludHcgKHNob3dfcGFkLCIlLTIwcyA9ICIsY3VycmVudF90eXBlLT5maWVsZF9uYW1lcyBbaV0pOworCQkJcHRyPXR5cGVfZGF0YS51LmJ1ZmZlcitvZmZzZXQ7CisJCQlsZW4gPSBjdXJyZW50X3R5cGUtPmZpZWxkX2xlbmd0aHNbaV07CisJCQlzd2l0Y2ggKGN1cnJlbnRfdHlwZS0+ZmllbGRfdHlwZXNbaV0pIHsKKwkJCWNhc2UgRklFTERfVFlQRV9JTlQ6CisJCQkJc2hvd19pbnQobGVuLCBwdHIpOworCQkJCWJyZWFrOworCQkJY2FzZSBGSUVMRF9UWVBFX1VJTlQ6CisJCQkJc2hvd191aW50KGxlbiwgcHRyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRklFTERfVFlQRV9DSEFSOgorCQkJCXNob3dfY2hhcihsZW4sIHB0cik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXdwcmludHcgKHNob3dfcGFkLCAidW5pbXBsZW1lbnRlZFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZzZXQrPWxlbjsKKwkJCWwrKzsKKwkJfQorCQljdXJyZW50X3R5cGUtPmxlbmd0aD1vZmZzZXQ7CisJCXNob3dfcGFkX2luZm8ubWF4X2xpbmU9bC0xOworCQlyZWZyZXNoX3Nob3dfcGFkICgpO3Nob3dfaW5mbyAoKTsKKwl9Cit9CisKK3ZvaWQgbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBvZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW9mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlpZiAoY3VycmVudF90eXBlIT1OVUxMKSB7CisJCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0IHR5cGUgKyVsZCIsb2Zmc2V0KTsKKwkJZGlzcGF0Y2ggKGJ1ZmZlcik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jaytvZmZzZXQgPCBmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpIHsKKwkJdHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jays9b2Zmc2V0OworCQlzcHJpbnRmIChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gT2Zmc2V0IG91dCBvZiBibG9ja1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKK3ZvaWQgcHJldiAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBvZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW9mZnNldCo9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlpZiAoY3VycmVudF90eXBlIT1OVUxMKSB7CisJCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0IHR5cGUgLSVsZCIsb2Zmc2V0KTsKKwkJZGlzcGF0Y2ggKGJ1ZmZlcik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodHlwZV9kYXRhLm9mZnNldF9pbl9ibG9jay1vZmZzZXQgPj0gMCkgeworCQl0eXBlX2RhdGEub2Zmc2V0X2luX2Jsb2NrLT1vZmZzZXQ7CisJCXNwcmludGYgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworCX0KKworCWVsc2UgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBPZmZzZXQgb3V0IG9mIGJsb2NrXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCX0KK30KKwordm9pZCBwZ2RuIChjaGFyICpjb21tbmFkX2xpbmUpCisKK3sKKwlzaG93X3BhZF9pbmZvLmxpbmUrPXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lczsKKwlyZWZyZXNoX3Nob3dfcGFkICgpO3JlZnJlc2hfc2hvd193aW4gKCk7Cit9CisKK3ZvaWQgcGd1cCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJc2hvd19wYWRfaW5mby5saW5lLT1zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXM7CisJcmVmcmVzaF9zaG93X3BhZCAoKTtyZWZyZXNoX3Nob3dfd2luICgpOworfQorCit2b2lkIHJlZHJhdyAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJcmVkcmF3X2FsbCAoKTsKKwlkaXNwYXRjaCAoInNob3ciKTsKK30KKwordm9pZCByZW1lbWJlciAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBlbnRyeV9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEFyZ3VtZW50IG5vdCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwllbnRyeV9udW09cmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50Kys7CisJaWYgKGVudHJ5X251bT5SRU1FTUJFUl9DT1VOVC0xKSB7CisJCWVudHJ5X251bT0wOworCQlyZW1lbWJlcl9saWZvLmVudHJpZXNfY291bnQtLTsKKwl9CisKKwlyZW1lbWJlcl9saWZvLm9mZnNldCBbZW50cnlfbnVtXT1kZXZpY2Vfb2Zmc2V0OworCXJlbWVtYmVyX2xpZm8udHlwZSBbZW50cnlfbnVtXT1jdXJyZW50X3R5cGU7CisJc3RyY3B5IChyZW1lbWJlcl9saWZvLm5hbWUgW2VudHJ5X251bV0sYnVmZmVyKTsKKworCWlmIChjdXJyZW50X3R5cGUhPU5VTEwpCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJPYmplY3QgJXMgaW4gT2Zmc2V0ICVsZCByZW1lbWJlcmVkIGFzICVzXG4iLGN1cnJlbnRfdHlwZS0+bmFtZSxkZXZpY2Vfb2Zmc2V0LGJ1ZmZlcik7CisJZWxzZQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiT2Zmc2V0ICVsZCByZW1lbWJlcmVkIGFzICVzXG4iLGRldmljZV9vZmZzZXQsYnVmZmVyKTsKKworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7Cit9CisKK3ZvaWQgcmVjYWxsIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisJbG9uZyBlbnRyeV9udW07CisKKwlpZiAoZGV2aWNlX2hhbmRsZT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBkZXZpY2Ugb3BlbmVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQXJndW1lbnQgbm90IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCisJZm9yIChlbnRyeV9udW09cmVtZW1iZXJfbGlmby5lbnRyaWVzX2NvdW50LTE7ZW50cnlfbnVtPj0wO2VudHJ5X251bS0tKSB7CisJCWlmIChzdHJjbXAgKHJlbWVtYmVyX2xpZm8ubmFtZSBbZW50cnlfbnVtXSxidWZmZXIpPT0wKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVudHJ5X251bT09LTEpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ2FuIG5vdCByZWNhbGwgJXNcbiIsYnVmZmVyKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixyZW1lbWJlcl9saWZvLm9mZnNldCBbZW50cnlfbnVtXSk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJaWYgKHJlbWVtYmVyX2xpZm8udHlwZSBbZW50cnlfbnVtXSAhPSBOVUxMKSB7CisJCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSAlcyIscmVtZW1iZXJfbGlmby50eXBlIFtlbnRyeV9udW1dLT5uYW1lKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIG5vbmUiKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiT2JqZWN0ICVzIGluIE9mZnNldCAlbGQgcmVjYWxsZWRcbiIsY3VycmVudF90eXBlLT5uYW1lLGRldmljZV9vZmZzZXQpOworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7Cit9CisKK3ZvaWQgZW5hYmxlX3dyaXRlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlGSUxFICpmcDsKKworCWlmIChkZXZpY2VfaGFuZGxlPT1OVUxMKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGRldmljZSBvcGVuZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIUFsbG93Q2hhbmdlcykgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiU29ycnksIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZFxuIik7CisgICAgCQlyZXR1cm47CisgICAgCX0KKworICAgIAlpZiAobW91bnRlZCkgeworICAgIAkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmlsZXN5c3RlbSBpcyBtb3VudGVkXG4iKTsKKwkJcmV0dXJuOworICAgIAl9CisKKwlpZiAoIChmcD1mb3BlbiAoZGV2aWNlX25hbWUsInIrYiIpKT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBDYW4gbm90IG9wZW4gZGV2aWNlICVzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nXG4iLGRldmljZV9uYW1lKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCWZjbG9zZSAoZGV2aWNlX2hhbmRsZSk7CisJZGV2aWNlX2hhbmRsZT1mcDt3cml0ZV9hY2Nlc3M9MTsKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiV3JpdGUgYWNjZXNzIGVuYWJsZWQgLSBCZSBjYXJlZnVsXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworfQorCit2b2lkIGRpc2FibGVfd3JpdGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCUZJTEUgKmZwOworCisJaWYgKGRldmljZV9oYW5kbGU9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gZGV2aWNlIG9wZW5lZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICggKGZwPWZvcGVuIChkZXZpY2VfbmFtZSwicmIiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gQ2FuIG5vdCBvcGVuIGRldmljZSAlc1xuIixkZXZpY2VfbmFtZSk7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJcmV0dXJuOworCX0KKworCWZjbG9zZSAoZGV2aWNlX2hhbmRsZSk7CisJZGV2aWNlX2hhbmRsZT1mcDt3cml0ZV9hY2Nlc3M9MDsKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiV3JpdGUgYWNjZXNzIGRpc2FibGVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworfQorCit2b2lkIHdyaXRlX2RhdGEgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXdyaXRlX3R5cGVfZGF0YSAoKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9leHQyZWQvZ3JvdXBfY29tLmMgYi9lMmZzcHJvZ3MvZXh0MmVkL2dyb3VwX2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MzI1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2dyb3VwX2NvbS5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorCisvdXNyL3NyYy9leHQyZWQvZ3JvdXBfY29tLmMKKworQSBwYXJ0IG9mIHRoZSBleHRlbmRlZCBmaWxlIHN5c3RlbSAyIGRpc2sgZWRpdG9yLgorCitHZW5lcmFsIHVzZXIgY29tbWFuZHMKKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgMTcgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCit2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fbmV4dCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBlbnRyeV9vZmZzZXQ9MTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQllbnRyeV9vZmZzZXQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsImVudHJ5ICVsZCIsZ3JvdXBfaW5mby5ncm91cF9udW0rZW50cnlfb2Zmc2V0KTsKKwlkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3ByZXYgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZW50cnlfb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGdyb3VwX2luZm8uZ3JvdXBfbnVtLWVudHJ5X29mZnNldCk7CisJZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBncm91cF9udW07CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWdyb3VwX251bT1hdG9sIChidWZmZXIpOworCisJaWYgKGdyb3VwX251bSA8IDAgfHwgZ3JvdXBfbnVtID49IGZpbGVfc3lzdGVtX2luZm8uZ3JvdXBzX2NvdW50KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG51bWJlciBvdXQgb2YgYm91bmRzXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlkZXZpY2Vfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGRldmljZV9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJZ3JvdXBfaW5mby5ncm91cF9udW09Z3JvdXBfbnVtOworfQorCisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19nb2NvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXVuc2lnbmVkIGxvbmcgY29weV9udW0sb2Zmc2V0OworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBObyBhcmd1bWVudCBzcGVjaWZpZWRcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKwlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisKKwljb3B5X251bT1hdG9sIChidWZmZXIpOworCisJb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrY29weV9udW0qZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2Jsb2Nrc19wZXJfZ3JvdXAqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJaWYgKG9mZnNldCA+IGZpbGVfc3lzdGVtX2luZm8uZmlsZV9zeXN0ZW1fc2l6ZSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBDb3B5IG51bWJlciBvdXQgb2YgYm91bmRzXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlncm91cF9pbmZvLmNvcHlfbnVtPWNvcHlfbnVtOworCWRldmljZV9vZmZzZXQ9b2Zmc2V0K2dyb3VwX2luZm8uZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGRldmljZV9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZ3JvdXBfbnVtLHRlbXA7CisKKwl0ZW1wPShkZXZpY2Vfb2Zmc2V0LWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQpICUgKGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19ibG9ja3NfcGVyX2dyb3VwKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSk7CisJZ3JvdXBfbnVtPXRlbXAvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKworCXNob3cgKGNvbW1hbmRfbGluZSk7CisKKwl3bW92ZSAoc2hvd193aW4sMSwwKTt3cHJpbnR3IChzaG93X3dpbiwiXG4iKTt3bW92ZSAoc2hvd193aW4sMiwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiR3JvdXAgJWxkIG9mICVsZCAiLGdyb3VwX251bSxmaWxlX3N5c3RlbV9pbmZvLmdyb3Vwc19jb3VudC0xKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiaW4gY29weSAlbGQgIixncm91cF9pbmZvLmNvcHlfbnVtKTsKKwlpZiAoZ3JvdXBfaW5mby5jb3B5X251bT09MCkgd3ByaW50dyAoc2hvd193aW4sIihNYWluIGNvcHkpIik7CisJd3ByaW50dyAoc2hvd193aW4sIlxuIik7cmVmcmVzaF9zaG93X3dpbiAoKTsKKworCWlmIChncm91cF9udW09PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlJlYWNoZWQgZmlyc3QgZ3JvdXAgZGVzY3JpcHRvclxuIik7CisJCXdyZWZyZXNoIChjb21tYW5kX3dpbik7CisJfQorCisJaWYgKGdyb3VwX251bT09ZmlsZV9zeXN0ZW1faW5mby5ncm91cHNfY291bnQtMSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiUmVhY2hlZCBsYXN0IGdyb3VwIGRlc2NyaXB0b3JcbiIpOworCQl3cmVmcmVzaCAoY29tbWFuZF93aW4pOworCX0KK30KKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2lub2RlIChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGlub2RlX29mZnNldDsKKwljaGFyIGJ1ZmZlciBbODBdOworCisJaW5vZGVfb2Zmc2V0PXR5cGVfZGF0YS51LnRfZXh0Ml9ncm91cF9kZXNjLmJnX2lub2RlX3RhYmxlOworCXNwcmludGYgKGJ1ZmZlciwic2V0b2Zmc2V0IGJsb2NrICVsZCIsaW5vZGVfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgZXh0Ml9pbm9kZSIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fYmxvY2tiaXRtYXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgYmxvY2tfYml0bWFwX29mZnNldDsKKwljaGFyIGJ1ZmZlciBbODBdOworCisJYmxvY2tfYml0bWFwX2luZm8uZW50cnlfbnVtPTA7CisJYmxvY2tfYml0bWFwX2luZm8uZ3JvdXBfbnVtPWdyb3VwX2luZm8uZ3JvdXBfbnVtOworCisJYmxvY2tfYml0bWFwX29mZnNldD10eXBlX2RhdGEudS50X2V4dDJfZ3JvdXBfZGVzYy5iZ19ibG9ja19iaXRtYXA7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgYmxvY2sgJWxkIixibG9ja19iaXRtYXBfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgYmxvY2tfYml0bWFwIik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19pbm9kZWJpdG1hcCAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBpbm9kZV9iaXRtYXBfb2Zmc2V0OworCWNoYXIgYnVmZmVyIFs4MF07CisKKwlpbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW09MDsKKwlpbm9kZV9iaXRtYXBfaW5mby5ncm91cF9udW09Z3JvdXBfaW5mby5ncm91cF9udW07CisKKwlpbm9kZV9iaXRtYXBfb2Zmc2V0PXR5cGVfZGF0YS51LnRfZXh0Ml9ncm91cF9kZXNjLmJnX2lub2RlX2JpdG1hcDsKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCBibG9jayAlbGQiLGlub2RlX2JpdG1hcF9vZmZzZXQpO2Rpc3BhdGNoIChidWZmZXIpOworCXNwcmludGYgKGJ1ZmZlciwic2V0dHlwZSBpbm9kZV9iaXRtYXAiKTtkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX3NldGFjdGl2ZWNvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZ2Q7CisKKwlnZD10eXBlX2RhdGEudS50X2V4dDJfZ3JvdXBfZGVzYzsKKwlkaXNwYXRjaCAoImdvY29weSAwIik7CisJdHlwZV9kYXRhLnUudF9leHQyX2dyb3VwX2Rlc2M9Z2Q7CisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2luaXQuYyBiL2UyZnNwcm9ncy9leHQyZWQvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzAzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL2luaXQuYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2luaXQuYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWYXJpb3VzIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIEhBVkVfUkVBRExJTkUKKyNpbmNsdWRlIDxyZWFkbGluZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJleHQyZWQuaCIKKworY2hhciBsaW5lc19zIFs4MF0sY29sc19zIFs4MF07CisKK3ZvaWQgc2lnbmFsX2hhbmRsZXIgKHZvaWQpOworCit2b2lkIHByZXBhcmVfdG9fY2xvc2UgKHZvaWQpCisKK3sKKwljbG9zZV93aW5kb3dzICgpOworCWlmIChkZXZpY2VfaGFuZGxlIT1OVUxMKQorCQlmY2xvc2UgKGRldmljZV9oYW5kbGUpOworCWZyZWVfdXNlcl9jb21tYW5kcyAoJmdlbmVyYWxfY29tbWFuZHMpOworCWZyZWVfdXNlcl9jb21tYW5kcyAoJmV4dDJfY29tbWFuZHMpOworCWZyZWVfc3RydWN0X2Rlc2NyaXB0b3JzICgpOworfQorCitpbnQgaW5pdCAodm9pZCkKKworeworCXByaW50ZiAoIkluaXRpYWxpemluZyAuLi5cbiIpOworCisJaWYgKCFwcm9jZXNzX2NvbmZpZ3VyYXRpb25fZmlsZSAoKSkgeworCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gVW5hYmxlIHRvIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24uIFF1aXR0aW5nLlxuIik7CisJCXJldHVybiAoMCk7CisJfTsKKworCWdlbmVyYWxfY29tbWFuZHMubGFzdF9jb21tYW5kPS0xOwkvKiBObyBjb21tYW5kcyB3aGF0c29ldmVyIG1lYW53aGlsZSAqLworCWV4dDJfY29tbWFuZHMubGFzdF9jb21tYW5kPS0xOworCWFkZF9nZW5lcmFsX2NvbW1hbmRzICgpOwkJLyogQWRkIHRoZSBnZW5lcmFsIGNvbW1hbmRzLCBhdmlhYmxlIGFsd2F5cyAqLworCWRldmljZV9oYW5kbGU9TlVMTDsJCQkvKiBOb3RpY2UgdGhhdCBvdXIgZGV2aWNlIGlzIHN0aWxsIG5vdCBzZXQgdXAgKi8KKwlkZXZpY2Vfb2Zmc2V0PS0xOworCWN1cnJlbnRfdHlwZT1OVUxMOwkJCS8qIE5vIGZpbGVzeXN0ZW0gc3BlY2lmaWMgdHlwZXMgeWV0ICovCisKKwlyZW1lbWJlcl9saWZvLmVudHJpZXNfY291bnQ9MDsJCS8qIE9iamVjdCBtZW1vcnkgaXMgZW1wdHkgKi8KKworCWluaXRfd2luZG93cyAoKTsJCQkvKiBJbml0aWFsaXplIHRoZSBOQ1VSU0VTIGludGVyZmFjZSAqLworCWluaXRfcmVhZGxpbmUgKCk7CQkJLyogSW5pdGlhbGl6ZSB0aGUgUkVBRExJTkUgaW50ZXJmYWNlICovCisJaW5pdF9zaWduYWxzICgpOwkJCS8qIEluaXRpYWxpemUgdGhlIHNpZ25hbCBoYW5kbGVycyAqLworCXdyaXRlX2FjY2Vzcz0wOwkJCQkvKiBXcml0ZSBhY2Nlc3MgZGlzYWJsZWQgKi8KKworCXN0cmNweSAobGFzdF9jb21tYW5kX2xpbmUsImhlbHAiKTsJLyogU2hvdyB0aGUgaGVscCBzY3JlZW4gdG8gdGhlIHVzZXIgKi8KKwlkaXNwYXRjaCAoImhlbHAiKTsKKwlyZXR1cm4gKDEpOwkJCQkvKiBTdWNjZXNzICovCit9CisKK3ZvaWQgYWRkX2dlbmVyYWxfY29tbWFuZHMgKHZvaWQpCisKK3sKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywiaGVscCIsIkVYVDJFRCBoZWxwIHN5c3RlbSIsaGVscCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInNldCIsIkNoYW5nZXMgYSB2YXJpYWJsZSBpbiB0aGUgY3VycmVudCBvYmplY3QiLHNldCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInNldGRldmljZSIsIlNlbGVjdHMgdGhlIGZpbGVzeXN0ZW0gYmxvY2sgZGV2aWNlIChlLmcuIC9kZXYvaGRhMSkiLHNldF9kZXZpY2UpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJzZXRvZmZzZXQiLCJNb3ZlcyBhc3luY2hyb25pY2x5IGluIHRoZSBmaWxlc3lzdGVtIixzZXRfb2Zmc2V0KTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywic2V0dHlwZSIsIlRlbGxzIEVYVDJFRCBob3cgdG8gaW50ZXJwZXJ0IHRoZSBjdXJyZW50IG9iamVjdCIsc2V0X3R5cGUpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJzaG93IiwiRGlzcGxheXMgdGhlIGN1cnJlbnQgb2JqZWN0IixzaG93KTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywicGd1cCIsIlNjcm9sbHMgZGF0YSBvbmUgcGFnZSB1cCIscGd1cCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInBnZG4iLCJTY3JvbGxzIGRhdGEgb25lIHBhZ2UgZG93biIscGdkbik7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInJlZHJhdyIsIlJlZGlzcGxheSB0aGUgc2NyZWVuIixyZWRyYXcpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJyZW1lbWJlciIsIlNhdmVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBkYXRhIGluZm9ybWF0aW9uIixyZW1lbWJlcik7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsInJlY2FsbCIsIkdldHMgYmFjayB0byB0aGUgc2F2ZWQgb2JqZWN0IHBvc2l0aW9uIixyZWNhbGwpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJlbmFibGV3cml0ZSIsIkVudGVycyBSZWFkL1dyaXRlIG1vZGUgLSBBbGxvd3MgY2hhbmdpbmcgdGhlIGZpbGVzeXN0ZW0iLGVuYWJsZV93cml0ZSk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsImRpc2FibGV3cml0ZSIsIkVudGVycyByZWFkIG9ubHkgbW9kZSIsZGlzYWJsZV93cml0ZSk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmdlbmVyYWxfY29tbWFuZHMsIndyaXRlZGF0YSIsIldyaXRlIGRhdGEgYmFjayB0byBkaXNrIix3cml0ZV9kYXRhKTsKKwlhZGRfdXNlcl9jb21tYW5kICgmZ2VuZXJhbF9jb21tYW5kcywibmV4dCIsIk1vdmVzIHRvIHRoZSBuZXh0IGJ5dGUgaW4gaGV4IG1vZGUiLG5leHQpOworCWFkZF91c2VyX2NvbW1hbmQgKCZnZW5lcmFsX2NvbW1hbmRzLCJwcmV2IiwiTW92ZXMgdG8gdGhlIHByZXZpb3VzIGJ5dGUgaW4gaGV4IG1vZGUiLHByZXYpOworfQorCit2b2lkIGFkZF9leHQyX2dlbmVyYWxfY29tbWFuZHMgKHZvaWQpCisKK3sKKwlhZGRfdXNlcl9jb21tYW5kICgmZXh0Ml9jb21tYW5kcywic3VwZXIiLCJNb3ZlcyB0byB0aGUgc3VwZXJibG9jayBvZiB0aGUgZmlsZXN5c3RlbSIsdHlwZV9leHQyX19fc3VwZXIpOworCWFkZF91c2VyX2NvbW1hbmQgKCZleHQyX2NvbW1hbmRzLCJncm91cCIsIk1vdmVzIHRvIHRoZSBmaXJzdCBncm91cCBkZXNjcmlwdG9yIix0eXBlX2V4dDJfX19ncm91cCk7CisJYWRkX3VzZXJfY29tbWFuZCAoJmV4dDJfY29tbWFuZHMsImNkIiwiTW92ZXMgdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQiLHR5cGVfZXh0Ml9fX2NkKTsKK30KKworaW50IHNldF9zdHJ1Y3RfZGVzY3JpcHRvcnMgKGNoYXIgKmZpbGVfbmFtZSkKKworeworCUZJTEUgKmZwOworCWNoYXIgY3VycmVudF9saW5lIFs1MDBdLGN1cnJlbnRfd29yZCBbNTBdLCpjaDsKKwljaGFyIHZhcmlhYmxlX25hbWUgWzUwXSx2YXJpYWJsZV90eXBlIFsyMF07CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpjdXJyZW50X2Rlc2NyaXB0b3I7CisKKwlpZiAoIChmcD1mb3BlbiAoZmlsZV9uYW1lLCJydCIpKT09TlVMTCkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBGYWlsZWQgdG8gb3BlbiBkZXNjcmlwdG9ycyBmaWxlICVzXG4iLGZpbGVfbmFtZSk7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CXJldHVybiAoMCk7CisJfTsKKworCXdoaWxlICghZmVvZiAoZnApKSB7CisJCWZnZXRzIChjdXJyZW50X2xpbmUsNTAwLGZwKTsKKwkJaWYgKGZlb2YgKGZwKSkgYnJlYWs7CisJCWNoPXBhcnNlX3dvcmQgKGN1cnJlbnRfbGluZSxjdXJyZW50X3dvcmQpOworCQlpZiAoc3RyY21wIChjdXJyZW50X3dvcmQsInN0cnVjdCIpPT0wKSB7CisJCQljaD1wYXJzZV93b3JkIChjaCxjdXJyZW50X3dvcmQpOworCQkJY3VycmVudF9kZXNjcmlwdG9yPWFkZF9uZXdfZGVzY3JpcHRvciAoY3VycmVudF93b3JkKTsKKworCQkJd2hpbGUgKHN0cmNociAoY3VycmVudF9saW5lLCd7Jyk9PU5VTEwpIHsKKwkJCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisJCQkJaWYgKGZlb2YgKGZwKSkgYnJlYWs7CisJCQl9OworCQkJaWYgKGZlb2YgKGZwKSkgYnJlYWs7CisKKwkJCWZnZXRzIChjdXJyZW50X2xpbmUsNTAwLGZwKTsKKworCQkJd2hpbGUgKHN0cmNociAoY3VycmVudF9saW5lLCd9Jyk9PU5VTEwpIHsKKwkJCQl3aGlsZSAoc3RyY2hyIChjdXJyZW50X2xpbmUsJzsnKT09TlVMTCkgeworCQkJCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisJCQkJCWlmIChzdHJjaHIgKGN1cnJlbnRfbGluZSwnfScpIT1OVUxMKSBicmVhazsKKwkJCQl9OworCQkJCWlmIChzdHJjaHIgKGN1cnJlbnRfbGluZSwnfScpICE9TlVMTCkgYnJlYWs7CisJCQkJY2g9cGFyc2Vfd29yZCAoY3VycmVudF9saW5lLHZhcmlhYmxlX3R5cGUpOworCQkJCWNoPXBhcnNlX3dvcmQgKGNoLHZhcmlhYmxlX25hbWUpOworCQkJCXdoaWxlICh2YXJpYWJsZV9uYW1lIFtzdHJsZW4gKHZhcmlhYmxlX25hbWUpLTFdIT0nOycpIHsKKwkJCQkJc3RyY3B5ICh2YXJpYWJsZV90eXBlLHZhcmlhYmxlX25hbWUpOworCQkJCQljaD1wYXJzZV93b3JkIChjaCx2YXJpYWJsZV9uYW1lKTsKKwkJCQl9OworCQkJCXZhcmlhYmxlX25hbWUgW3N0cmxlbiAodmFyaWFibGVfbmFtZSktMV09MDsKKwkJCQlhZGRfbmV3X3ZhcmlhYmxlIChjdXJyZW50X2Rlc2NyaXB0b3IsdmFyaWFibGVfdHlwZSx2YXJpYWJsZV9uYW1lKTsKKwkJCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisJCQl9OworCQl9OworCX07CisKKwlmY2xvc2UgKGZwKTsKKwlyZXR1cm4gKDEpOworfQorCit2b2lkIGZyZWVfc3RydWN0X2Rlc2NyaXB0b3JzICh2b2lkKQorCit7CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpwdHIsKm5leHQ7CisKKwlwdHI9Zmlyc3RfdHlwZTsKKwl3aGlsZSAocHRyIT1OVUxMKSB7CisJCW5leHQ9cHRyLT5uZXh0OworCQlmcmVlX3VzZXJfY29tbWFuZHMgKCZwdHItPnR5cGVfY29tbWFuZHMpOworCQlmcmVlIChwdHIpOworCQlwdHI9bmV4dDsKKwl9CisJZmlyc3RfdHlwZT1sYXN0X3R5cGU9Y3VycmVudF90eXBlPU5VTEw7Cit9CisKK3ZvaWQgZnJlZV91c2VyX2NvbW1hbmRzIChzdHJ1Y3Qgc3RydWN0X2NvbW1hbmRzICpwdHIpCisKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wO2k8PXB0ci0+bGFzdF9jb21tYW5kO2krKykgeworCQlmcmVlIChwdHItPm5hbWVzIFtpXSk7CisJCWZyZWUgKHB0ci0+ZGVzY3JpcHRpb25zIFtpXSk7CisJfQorCisJcHRyLT5sYXN0X2NvbW1hbmQ9LTE7Cit9CisKK3N0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqYWRkX25ld19kZXNjcmlwdG9yIChjaGFyICpuYW1lKQorCit7CisJc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yICpwdHI7CisKKwlwdHIgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yKSk7CisJaWYgKHB0ciA9PSBOVUxMKSB7CisJCXByaW50ZiAoIkVycm9yIC0gQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgLSBRdWl0dGluZ1xuIik7CisJCWV4aXQgKDEpOworCX0KKwltZW1zZXQocHRyLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9kZXNjcmlwdG9yKSk7CisJcHRyLT5wcmV2ID0gcHRyLT5uZXh0ID0gTlVMTDsKKwlzdHJjcHkgKHB0ci0+bmFtZSxuYW1lKTsKKwlwdHItPmxlbmd0aD0wOworCXB0ci0+ZmllbGRzX251bT0wOworCWlmIChmaXJzdF90eXBlPT1OVUxMKSB7CisJCWZpcnN0X3R5cGUgPSBsYXN0X3R5cGUgPSBwdHI7CisJfSBlbHNlIHsKKwkJcHRyLT5wcmV2ID0gbGFzdF90eXBlOyBsYXN0X3R5cGUtPm5leHQgPSBwdHI7IGxhc3RfdHlwZT1wdHI7CisJfQorCXB0ci0+dHlwZV9jb21tYW5kcy5sYXN0X2NvbW1hbmQ9LTE7CisJZmlsbF90eXBlX2NvbW1hbmRzIChwdHIpOworCXJldHVybiAocHRyKTsKK30KKworc3RydWN0IHR5cGVfdGFibGUgeworCWNoYXIgCSpuYW1lOworCWludAlmaWVsZF90eXBlOworCWludAlsZW47Cit9OworCitzdHJ1Y3QgdHlwZV90YWJsZSB0eXBlX3RhYmxlW10gPSB7CisJeyAibG9uZyIsICAgRklFTERfVFlQRV9JTlQsCTQgfSwKKwl7ICJzaG9ydCIsICBGSUVMRF9UWVBFX0lOVCwJMiB9LAorCXsgImNoYXIiLCAgIEZJRUxEX1RZUEVfQ0hBUiwJMSB9LAorCXsgIl9fdTMyIiwgIEZJRUxEX1RZUEVfVUlOVCwJNCB9LAorCXsgIl9fczMyIiwgIEZJRUxEX1RZUEVfSU5ULAk0IH0sCisJeyAiX191MTYiLCAgRklFTERfVFlQRV9VSU5ULAkyIH0sCisJeyAiX19zMTYiLCAgRklFTERfVFlQRV9JTlQsCTIgfSwKKwl7ICJfX3U4IiwgICBGSUVMRF9UWVBFX1VJTlQsCTEgfSwKKwl7ICJfX3M4IiwgICBGSUVMRF9UWVBFX0lOVCwJMSB9LAorCXsgIDAsICAgICAgIDAsICAgICAgICAgICAgICAgICAgMCB9Cit9OworCit2b2lkIGFkZF9uZXdfdmFyaWFibGUgKHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqcHRyLGNoYXIgKnZfdHlwZSxjaGFyICp2X25hbWUpCisKK3sKKwlzaG9ydAlsZW49MTsKKwljaGFyCWZpZWxkX3R5cGU9RklFTERfVFlQRV9JTlQ7CisJc3RydWN0IHR5cGVfdGFibGUgKnA7CisKKwlzdHJjcHkgKHB0ci0+ZmllbGRfbmFtZXMgW3B0ci0+ZmllbGRzX251bV0sdl9uYW1lKTsKKwlwdHItPmZpZWxkX3Bvc2l0aW9ucyBbcHRyLT5maWVsZHNfbnVtXT1wdHItPmxlbmd0aDsKKworCWZvciAocCA9IHR5cGVfdGFibGU7IHAtPm5hbWU7IHArKykgeworCQlpZiAoc3RyY21wKHZfdHlwZSwgcC0+bmFtZSkgPT0gMCkgeworCQkJbGVuID0gcC0+bGVuOworCQkJZmllbGRfdHlwZSA9IHAtPmZpZWxkX3R5cGU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocC0+bmFtZSA9PSAwKSB7CisJCWlmIChzdHJuY21wKHZfdHlwZSwgImNoYXJbIiwgNSkgPT0gMCkgeworCQkJbGVuID0gYXRvaSh2X3R5cGUrNSk7CisJCQlmaWVsZF90eXBlID0gRklFTERfVFlQRV9DSEFSOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJVbmtub3duIHR5cGUgJXMgZm9yIGZpZWxkICVzXG4iLCB2X3R5cGUsIHZfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJcHRyLT5maWVsZF9sZW5ndGhzIFtwdHItPmZpZWxkc19udW1dID0gbGVuOworCXB0ci0+ZmllbGRfdHlwZXMgW3B0ci0+ZmllbGRzX251bV0gPSBmaWVsZF90eXBlOworCisJcHRyLT5sZW5ndGgrPWxlbjsKKwlwdHItPmZpZWxkc19udW0rKzsKK30KKwordm9pZCBmaWxsX3R5cGVfY29tbWFuZHMgKHN0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqcHRyKQorCisvKgorCitTZXQgc3BlY2lmaWMgdHlwZSB1c2VyIGNvbW1hbmRzLgorCisqLworCit7CisKKwlpZiAoc3RyY21wICgocHRyLT5uYW1lKSwiZmlsZSIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJTaG93cyBmaWxlIGRhdGEiLHR5cGVfZmlsZV9fX3Nob3cpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJpbm9kZSIsIlJldHVybnMgdG8gdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IGZpbGUiLHR5cGVfZmlsZV9fX2lub2RlKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZGlzcGxheSIsIlNwZWNpZmllcyBkYXRhIGZvcm1hdCAtIHRleHQgb3IgaGV4Iix0eXBlX2ZpbGVfX19kaXNwbGF5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywibmV4dCIsIlBhc3MgdG8gbmV4dCBieXRlIix0eXBlX2ZpbGVfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIlBhc3MgdG8gdGhlIHByZXZpb3VzIGJ5dGUiLHR5cGVfZmlsZV9fX3ByZXYpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJvZmZzZXQiLCJQYXNzIHRvIGEgc3BlY2lmaWVkIGJ5dGUgaW4gdGhlIGN1cnJlbnQgYmxvY2siLHR5cGVfZmlsZV9fX29mZnNldCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHRibG9jayIsIlBhc3MgdG8gbmV4dCBmaWxlIGJsb2NrIix0eXBlX2ZpbGVfX19uZXh0YmxvY2spOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJwcmV2YmxvY2siLCJQYXNzIHRvIHRoZSBwcmV2aW91cyBmaWxlIGJsb2NrIix0eXBlX2ZpbGVfX19wcmV2YmxvY2spOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJibG9jayIsIlNwZWNpZnkgd2hpY2ggZmlsZSBibG9jayB0byBlZGl0Iix0eXBlX2ZpbGVfX19ibG9jayk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInJlbWVtYmVyIiwiU2F2ZXMgdGhlIGZpbGVcJ3MgaW5vZGUgcG9zaXRpb24gZm9yIGxhdGVyIHJlZmVyZW5jZSIsdHlwZV9maWxlX19fcmVtZW1iZXIpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzZXQiLCJTZXRzIHRoZSBjdXJyZW50IGJ5dGUiLHR5cGVfZmlsZV9fX3NldCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIndyaXRlZGF0YSIsIldyaXRlcyB0aGUgY3VycmVudCBibG9jayB0byB0aGUgZGlzayIsdHlwZV9maWxlX19fd3JpdGVkYXRhKTsKKwl9CisKKwlpZiAoc3RyY21wICgocHRyLT5uYW1lKSwiZXh0Ml9pbm9kZSIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJTaG93cyBpbm9kZSBkYXRhIix0eXBlX2V4dDJfaW5vZGVfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywibmV4dCIsIk1vdmUgdG8gbmV4dCBpbm9kZSBpbiBjdXJyZW50IGJsb2NrIGdyb3VwIix0eXBlX2V4dDJfaW5vZGVfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIk1vdmUgdG8gbmV4dCBpbm9kZSBpbiBjdXJyZW50IGJsb2NrIGdyb3VwIix0eXBlX2V4dDJfaW5vZGVfX19wcmV2KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZ3JvdXAiLCJNb3ZlIHRvIHRoZSBncm91cCBkZXNjcmlwdG9ycyBvZiB0aGUgY3VycmVudCBpbm9kZSB0YWJsZSIsdHlwZV9leHQyX2lub2RlX19fZ3JvdXApOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJlbnRyeSIsIk1vdmUgdG8gYSBzcGVjaWZpZWQgZW50cnkgaW4gdGhlIGN1cnJlbnQgaW5vZGUgdGFibGUiLHR5cGVfZXh0Ml9pbm9kZV9fX2VudHJ5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZmlsZSIsIkRpc3BsYXkgZmlsZSBkYXRhIG9mIHRoZSBjdXJyZW50IGlub2RlIix0eXBlX2V4dDJfaW5vZGVfX19maWxlKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZGlyIiwiRGlzcGxheSBkaXJlY3RvcnkgZGF0YSBvZiB0aGUgY3VycmVudCBpbm9kZSIsdHlwZV9leHQyX2lub2RlX19fZGlyKTsKKwl9CisKKwlpZiAoc3RyY21wICgocHRyLT5uYW1lKSwiZGlyIik9PTApIHsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2hvdyIsIlNob3dzIGN1cnJlbnQgZGlyZWN0b3J5IGRhdGEiLHR5cGVfZGlyX19fc2hvdyk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImlub2RlIiwiUmV0dXJucyB0byB0aGUgaW5vZGUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iix0eXBlX2Rpcl9fX2lub2RlKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywibmV4dCIsIlBhc3MgdG8gdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5Iix0eXBlX2Rpcl9fX25leHQpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJwcmV2IiwiUGFzcyB0byB0aGUgcHJldmlvdXMgZGlyZWN0b3J5IGVudHJ5Iix0eXBlX2Rpcl9fX3ByZXYpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJmb2xsb3dpbm9kZSIsIkZvbGxvd3MgdGhlIGlub2RlIHNwZWNpZmllZCBpbiB0aGlzIGRpcmVjdG9yeSBlbnRyeSIsdHlwZV9kaXJfX19mb2xsb3dpbm9kZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInJlbWVtYmVyIiwiUmVtZW1iZXIgdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBlbnRyeSIsdHlwZV9kaXJfX19yZW1lbWJlcik7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImNkIiwiQ2hhbmdlcyBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Iix0eXBlX2Rpcl9fX2NkKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZW50cnkiLCJNb3ZlcyB0byBhIHNwZWNpZmllZCBlbnRyeSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkiLHR5cGVfZGlyX19fZW50cnkpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJ3cml0ZWRhdGEiLCJXcml0ZXMgdGhlIGN1cnJlbnQgZW50cnkgdG8gdGhlIGRpc2siLHR5cGVfZGlyX19fd3JpdGVkYXRhKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2V0IiwiQ2hhbmdlcyBhIHZhcmlhYmxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBlbnRyeSIsdHlwZV9kaXJfX19zZXQpOworCX0KKworCWlmIChzdHJjbXAgKChwdHItPm5hbWUpLCJleHQyX3N1cGVyX2Jsb2NrIik9PTApIHsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywic2hvdyIsIkRpc3BsYXlzIHRoZSBzdXBlciBibG9jayBkYXRhIix0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZ29jb3B5IiwiTW92ZSB0byBhbm90aGVyIGJhY2t1cCBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrIix0eXBlX2V4dDJfc3VwZXJfYmxvY2tfX19nb2NvcHkpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzZXRhY3RpdmVjb3B5IiwiQ29waWVzIHRoZSBjdXJyZW50IHN1cGVyYmxvY2sgdG8gdGhlIG1haW4gc3VwZXJibG9jayIsdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fc2V0YWN0aXZlY29weSk7CisJfQorCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImV4dDJfZ3JvdXBfZGVzYyIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsIm5leHQiLCJQYXNzIHRvIHRoZSBuZXh0IGJsb2NrIGdyb3VwIGRlY3JpcHRvciIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19uZXh0KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywicHJldiIsIlBhc3MgdG8gdGhlIHByZXZpb3VzIGdyb3VwIGRlc2NyaXB0b3IiLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fcHJldik7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImVudHJ5IiwiUGFzcyB0byBhIHNwZWNpZmljIGdyb3VwIGRlc2NyaXB0b3IiLHR5cGVfZXh0Ml9ncm91cF9kZXNjX19fZW50cnkpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJzaG93IiwiU2hvd3MgdGhlIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvciIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiaW5vZGUiLCJQYXNzIHRvIHRoZSBpbm9kZSB0YWJsZSBvZiB0aGUgY3VycmVudCBncm91cCBibG9jayIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19pbm9kZSk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsImdvY29weSIsIk1vdmUgdG8gYW5vdGhlciBiYWNrdXAgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvciIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19nb2NvcHkpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJibG9ja2JpdG1hcCIsIlNob3cgdGhlIGJsb2NrIGFsbG9jYXRpb24gYml0bWFwIG9mIHRoZSBjdXJyZW50IGdyb3VwIGJsb2NrIix0eXBlX2V4dDJfZ3JvdXBfZGVzY19fX2Jsb2NrYml0bWFwKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiaW5vZGViaXRtYXAiLCJTaG93IHRoZSBpbm9kZSBhbGxvY2F0aW9uIGJpdG1hcCBvZiB0aGUgY3VycmVudCBncm91cCBibG9jayIsdHlwZV9leHQyX2dyb3VwX2Rlc2NfX19pbm9kZWJpdG1hcCk7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNldGFjdGl2ZWNvcHkiLCJDb3BpZXMgdGhlIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvciB0byB0aGUgbWFpbiB0YWJsZSIsdHlwZV9leHQyX3N1cGVyX2Jsb2NrX19fc2V0YWN0aXZlY29weSk7CisJfQorCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImJsb2NrX2JpdG1hcCIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJEaXNwbGF5cyB0aGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAiLHR5cGVfZXh0Ml9ibG9ja19iaXRtYXBfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZW50cnkiLCJNb3ZlcyB0byBhIHNwZWNpZmljIGJpdCIsdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2VudHJ5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywibmV4dCIsIk1vdmVzIHRvIHRoZSBuZXh0IGJpdCIsdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX25leHQpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJwcmV2IiwiTW92ZXMgdG8gdGhlIHByZXZpb3VzIGJpdCIsdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX3ByZXYpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJhbGxvY2F0ZSIsIkFsbG9jYXRlcyB0aGUgY3VycmVudCBibG9jayIsdHlwZV9leHQyX2Jsb2NrX2JpdG1hcF9fX2FsbG9jYXRlKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZGVhbGxvY2F0ZSIsIkRlYWxsb2NhdGVzIHRoZSBjdXJyZW50IGJsb2NrIix0eXBlX2V4dDJfYmxvY2tfYml0bWFwX19fZGVhbGxvY2F0ZSk7CisJfQorCisJaWYgKHN0cmNtcCAoKHB0ci0+bmFtZSksImlub2RlX2JpdG1hcCIpPT0wKSB7CisJCWFkZF91c2VyX2NvbW1hbmQgKCZwdHItPnR5cGVfY29tbWFuZHMsInNob3ciLCJEaXNwbGF5cyB0aGUgaW5vZGUgYWxsb2NhdGlvbiBiaXRtYXAiLHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19zaG93KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZW50cnkiLCJNb3ZlcyB0byBhIHNwZWNpZmljIGJpdCIsdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2VudHJ5KTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywibmV4dCIsIk1vdmVzIHRvIHRoZSBuZXh0IGJpdCIsdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX25leHQpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJwcmV2IiwiTW92ZXMgdG8gdGhlIHByZXZpb3VzIGJpdCIsdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX3ByZXYpOworCQlhZGRfdXNlcl9jb21tYW5kICgmcHRyLT50eXBlX2NvbW1hbmRzLCJhbGxvY2F0ZSIsIkFsbG9jYXRlcyB0aGUgY3VycmVudCBpbm9kZSIsdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2FsbG9jYXRlKTsKKwkJYWRkX3VzZXJfY29tbWFuZCAoJnB0ci0+dHlwZV9jb21tYW5kcywiZGVhbGxvY2F0ZSIsIkRlYWxsb2NhdGVzIHRoZSBjdXJyZW50IGlub2RlIix0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fZGVhbGxvY2F0ZSk7CisJfQorCit9CisKK3ZvaWQgYWRkX3VzZXJfY29tbWFuZCAoc3RydWN0IHN0cnVjdF9jb21tYW5kcyAqcHRyLGNoYXIgKm5hbWUsY2hhciAqZGVzY3JpcHRpb24sUEYgY2FsbGJhY2spCisKK3sKKwlpbnQgbnVtOworCisJbnVtPXB0ci0+bGFzdF9jb21tYW5kOworCWlmIChudW0rMT09TUFYX0NPTU1BTkRTX05VTSkgeworCQlwcmludGYgKCJJbnRlcm5hbCBFcnJvciAtIENhbid0IGFkZCBjb21tYW5kICVzXG4iLG5hbWUpOworCQlyZXR1cm47CisJfQorCisJcHRyLT5sYXN0X2NvbW1hbmQ9KytudW07CisKKwlwdHItPm5hbWVzIFtudW1dPShjaGFyICopIG1hbGxvYyAoc3RybGVuIChuYW1lKSsxKTsKKwlzdHJjcHkgKHB0ci0+bmFtZXMgW251bV0sbmFtZSk7CisKKwlpZiAoKmRlc2NyaXB0aW9uIT0wKSB7CisJCXB0ci0+ZGVzY3JpcHRpb25zIFtudW1dPShjaGFyICopIG1hbGxvYyAoc3RybGVuIChkZXNjcmlwdGlvbikrMSk7CisJCXN0cmNweSAocHRyLT5kZXNjcmlwdGlvbnMgW251bV0sZGVzY3JpcHRpb24pOworCX0KKworCXB0ci0+Y2FsbGJhY2sgW251bV09Y2FsbGJhY2s7Cit9CisKK2ludCBzZXRfZmlsZV9zeXN0ZW1faW5mbyAodm9pZCkKKworeworCWludCBleHQyX2RldGVjdGVkPTA7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiOworCisJZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9ja19vZmZzZXQ9MTAyNDsKKwlmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemU9RGVmYXVsdFRvdGFsQmxvY2tzKkRlZmF1bHRCbG9ja1NpemU7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2ssc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayksZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9ja19vZmZzZXQpOworCisJc2I9JmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2s7CisKKwlpZiAoc2ItPnNfbWFnaWMgPT0gRVhUMl9TVVBFUl9NQUdJQykKKwkJZXh0Ml9kZXRlY3RlZD0xOworCisJaWYgKGV4dDJfZGV0ZWN0ZWQpCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJEZXRlY3RlZCBleHRlbmRlZCAyIGZpbGUgc3lzdGVtIG9uIGRldmljZSAlc1xuIixkZXZpY2VfbmFtZSk7CisJZWxzZQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiV2FybmluZyAtIEV4dGVuZGVkIDIgZmlsZXN5c3RlbSBub3QgZGV0ZWN0ZWQgb24gZGV2aWNlICVzXG4iLGRldmljZV9uYW1lKTsKKworCWlmICghZXh0Ml9kZXRlY3RlZCAmJiAhRm9yY2VFeHQyKQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiWW91IG1heSB3aXNoIHRvIHVzZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gRm9yY2VFeHQyIG9uXG4iKTsKKworCWlmIChGb3JjZUV4dDIgJiYgIWV4dDJfZGV0ZWN0ZWQpCisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJGb3JjaW5nIGV4dGVuZGVkIDIgZmlsZXN5c3RlbVxuIik7CisKKwlpZiAoRm9yY2VEZWZhdWx0IHx8ICFleHQyX2RldGVjdGVkKQorCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRm9yY2luZyBkZWZhdWx0IHBhcmFtZXRlcnNcbiIpOworCisJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKworCWlmIChleHQyX2RldGVjdGVkIHx8IEZvcmNlRXh0MikgeworCQlhZGRfZXh0Ml9nZW5lcmFsX2NvbW1hbmRzICgpOworCQlpZiAoIXNldF9zdHJ1Y3RfZGVzY3JpcHRvcnMgKEV4dDJEZXNjcmlwdG9ycykpCisJCQlyZXR1cm4gKDApOworCX0KKworCWlmICghRm9yY2VEZWZhdWx0ICYmIGV4dDJfZGV0ZWN0ZWQpIHsKKworCQlmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU9RVhUMl9NSU5fQkxPQ0tfU0laRSA8PCBzYi0+c19sb2dfYmxvY2tfc2l6ZTsKKwkJaWYgKGZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSA9PSBFWFQyX01JTl9CTE9DS19TSVpFKQorCQkJZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldD0yKkVYVDJfTUlOX0JMT0NLX1NJWkU7CisJCWVsc2UKKwkJCWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCQlmaWxlX3N5c3RlbV9pbmZvLmdyb3Vwc19jb3VudCA9IGV4dDJmc19kaXY2NF9jZWlsKGV4dDJmc19ibG9ja3NfY291bnQoc2IpLAorCQkJCQkJIHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCisJCWZpbGVfc3lzdGVtX2luZm8uaW5vZGVzX3Blcl9ibG9jaz1maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSk7CisJCWZpbGVfc3lzdGVtX2luZm8uYmxvY2tzX3Blcl9ncm91cD1zYi0+c19pbm9kZXNfcGVyX2dyb3VwL2ZpbGVfc3lzdGVtX2luZm8uaW5vZGVzX3Blcl9ibG9jazsKKwkJZmlsZV9zeXN0ZW1faW5mby5ub19ibG9ja3NfaW5fZ3JvdXA9c2ItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJZmlsZV9zeXN0ZW1faW5mby5maWxlX3N5c3RlbV9zaXplPShleHQyZnNfYmxvY2tzX2NvdW50KHNiKS0xKSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisJfQorCisJZWxzZSB7CisJCWZpbGVfc3lzdGVtX2luZm8uZmlsZV9zeXN0ZW1fc2l6ZT1EZWZhdWx0VG90YWxCbG9ja3MqRGVmYXVsdEJsb2NrU2l6ZTsKKwkJZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplPURlZmF1bHRCbG9ja1NpemU7CisJCWZpbGVfc3lzdGVtX2luZm8ubm9fYmxvY2tzX2luX2dyb3VwPURlZmF1bHRCbG9ja3NJbkdyb3VwOworCX0KKworCWlmIChmaWxlX3N5c3RlbV9pbmZvLmZpbGVfc3lzdGVtX3NpemUgPiAyMTQ3NDgzNjQ3KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJTb3JyeSwgZmlsZXN5c3RlbXMgYmlnZ2VyIHRoYW4gMiBHQiBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gKDEpOworfQorCit2b2lkIGluaXRfcmVhZGxpbmUgKHZvaWQpCisKK3sKKyNpZmRlZiBIQVZFX1JFQURMSU5FCisJcmxfY29tcGxldGlvbl9lbnRyeV9mdW5jdGlvbj0oRnVuY3Rpb24gKikgY29tcGxldGVfY29tbWFuZDsKKyNlbmRpZgorfQorCit2b2lkIGluaXRfc2lnbmFscyAodm9pZCkKKworeworCXNpZ25hbCAoU0lHV0lOQ0gsIHNpZ25hbF9TSUdXSU5DSF9oYW5kbGVyKTsJLyogQ2F0Y2ggU0lHV0lOQ0ggKi8KKwlzaWduYWwgKFNJR1RFUk0sIHNpZ25hbF9TSUdURVJNX2hhbmRsZXIpOworCXNpZ25hbCAoU0lHU0VHViwgc2lnbmFsX1NJR1NFR1ZfaGFuZGxlcik7CisKK30KKwordm9pZCBzaWduYWxfU0lHV0lOQ0hfaGFuZGxlciAoaW50IHNpZ19udW0pCisKK3sKKwlyZWRyYXdfcmVxdWVzdD0xOwkvKiBXZSB3aWxsIGhhbmRsZSBpdCBpbiBtYWluLmMgKi8KKworCS8qIFJlc2V0IHNpZ25hbCBoYW5kbGVyICovCisJc2lnbmFsIChTSUdXSU5DSCwgc2lnbmFsX1NJR1dJTkNIX2hhbmRsZXIpOworCit9CisKK3ZvaWQgc2lnbmFsX1NJR1RFUk1faGFuZGxlciAoaW50IHNpZ19udW0pCisKK3sKKwlwcmVwYXJlX3RvX2Nsb3NlICgpOworCXByaW50ZiAoIlRlcm1pbmF0ZWQgZHVlIHRvIHNpZ25hbCAlZFxuIixzaWdfbnVtKTsKKwlleGl0ICgxKTsKK30KKwordm9pZCBzaWduYWxfU0lHU0VHVl9oYW5kbGVyIChpbnQgc2lnX251bSkKKworeworCXByZXBhcmVfdG9fY2xvc2UgKCk7CisJcHJpbnRmICgiS2lsbGVkIGJ5IHNpZ25hbCAlZCFcbiIsc2lnX251bSk7CisJZXhpdCAoMSk7Cit9CisKK2ludCBwcm9jZXNzX2NvbmZpZ3VyYXRpb25fZmlsZSAodm9pZCkKKworeworCWNoYXIgYnVmZmVyIFszMDBdOworCWNoYXIgb3B0aW9uIFs4MF0sdmFsdWUgWzgwXTsKKwlGSUxFICpmcDsKKworCXN0cmNweSAoYnVmZmVyLCBST09UX1NZU0NPTkZESVIpOworCXN0cmNhdCAoYnVmZmVyLCIvZXh0MmVkLmNvbmYiKTsKKworCWlmICgoZnA9Zm9wZW4gKGJ1ZmZlciwicnQiKSk9PU5VTEwpIHsKKwkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIFVuYWJsZSB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xuIixidWZmZXIpOworCQlyZXR1cm4gKDApOworCX0KKworCXdoaWxlIChnZXRfbmV4dF9vcHRpb24gKGZwLG9wdGlvbix2YWx1ZSkpIHsKKwkJaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiRXh0MkRlc2NyaXB0b3JzIik9PTApIHsKKwkJCXN0cmNweSAoRXh0MkRlc2NyaXB0b3JzLHZhbHVlKTsKKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiQWx0ZXJuYXRlRGVzY3JpcHRvcnMiKT09MCkgeworCQkJc3RyY3B5IChBbHRlcm5hdGVEZXNjcmlwdG9ycyx2YWx1ZSk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkxvZ0ZpbGUiKT09MCkgeworCQkJc3RyY3B5IChMb2dGaWxlLHZhbHVlKTsKKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiTG9nQ2hhbmdlcyIpPT0wKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9uIik9PTApCisJCQkJTG9nQ2hhbmdlcyA9IDE7CisJCQllbHNlIGlmIChzdHJjYXNlY21wICh2YWx1ZSwib2ZmIik9PTApCisJCQkJTG9nQ2hhbmdlcyA9IDA7CisJCQllbHNlIHsKKwkJCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gSWxsZWdhbCB2YWx1ZTogJXMgJXNcbiIsb3B0aW9uLHZhbHVlKTsKKwkJCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCQkJfQorCQl9CisKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcCAob3B0aW9uLCJBbGxvd0NoYW5nZXMiKT09MCkgeworCQkJaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvbiIpPT0wKQorCQkJCUFsbG93Q2hhbmdlcyA9IDE7CisJCQllbHNlIGlmIChzdHJjYXNlY21wICh2YWx1ZSwib2ZmIik9PTApCisJCQkJQWxsb3dDaGFuZ2VzID0gMDsKKwkJCWVsc2UgeworCQkJCWZwcmludGYgKHN0ZGVyciwiRXJyb3IgLSBJbGxlZ2FsIHZhbHVlOiAlcyAlc1xuIixvcHRpb24sdmFsdWUpOworCQkJCWZjbG9zZSAoZnApO3JldHVybiAoMCk7CisJCQl9CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkFsbG93TW91bnRlZFJlYWQiKT09MCkgeworCQkJaWYgKHN0cmNhc2VjbXAgKHZhbHVlLCJvbiIpPT0wKQorCQkJCUFsbG93TW91bnRlZFJlYWQgPSAxOworCQkJZWxzZSBpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9mZiIpPT0wKQorCQkJCUFsbG93TW91bnRlZFJlYWQgPSAwOworCQkJZWxzZSB7CisJCQkJZnByaW50ZiAoc3RkZXJyLCJFcnJvciAtIElsbGVnYWwgdmFsdWU6ICVzICVzXG4iLG9wdGlvbix2YWx1ZSk7CisJCQkJZmNsb3NlIChmcCk7cmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiRm9yY2VFeHQyIik9PTApIHsKKwkJCWlmIChzdHJjYXNlY21wICh2YWx1ZSwib24iKT09MCkKKwkJCQlGb3JjZUV4dDIgPSAxOworCQkJZWxzZSBpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9mZiIpPT0wKQorCQkJCUZvcmNlRXh0MiA9IDA7CisJCQllbHNlIHsKKwkJCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gSWxsZWdhbCB2YWx1ZTogJXMgJXNcbiIsb3B0aW9uLHZhbHVlKTsKKwkJCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCQkJfQorCQl9CisKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcCAob3B0aW9uLCJEZWZhdWx0QmxvY2tTaXplIik9PTApIHsKKwkJCURlZmF1bHRCbG9ja1NpemUgPSBhdG9pICh2YWx1ZSk7CisJCX0KKworCQllbHNlIGlmIChzdHJjYXNlY21wIChvcHRpb24sIkRlZmF1bHRUb3RhbEJsb2NrcyIpPT0wKSB7CisJCQlEZWZhdWx0VG90YWxCbG9ja3MgPSBzdHJ0b3VsICh2YWx1ZSxOVUxMLDEwKTsKKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiRGVmYXVsdEJsb2Nrc0luR3JvdXAiKT09MCkgeworCQkJRGVmYXVsdEJsb2Nrc0luR3JvdXAgPSBzdHJ0b3VsICh2YWx1ZSxOVUxMLDEwKTsKKwkJfQorCisJCWVsc2UgaWYgKHN0cmNhc2VjbXAgKG9wdGlvbiwiRm9yY2VEZWZhdWx0Iik9PTApIHsKKwkJCWlmIChzdHJjYXNlY21wICh2YWx1ZSwib24iKT09MCkKKwkJCQlGb3JjZURlZmF1bHQgPSAxOworCQkJZWxzZSBpZiAoc3RyY2FzZWNtcCAodmFsdWUsIm9mZiIpPT0wKQorCQkJCUZvcmNlRGVmYXVsdCA9IDA7CisJCQllbHNlIHsKKwkJCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gSWxsZWdhbCB2YWx1ZTogJXMgJXNcbiIsb3B0aW9uLHZhbHVlKTsKKwkJCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCQkJfQorCQl9CisKKwkJZWxzZSB7CisJCQlmcHJpbnRmIChzdGRlcnIsIkVycm9yIC0gVW5rbm93biBvcHRpb246ICVzXG4iLG9wdGlvbik7CisJCQlmY2xvc2UgKGZwKTtyZXR1cm4gKDApOworCQl9CisJfQorCisJcHJpbnRmICgiQ29uZmlndXJhdGlvbiBjb21wbGV0ZWRcbiIpOworCWZjbG9zZSAoZnApOworCXJldHVybiAoMSk7Cit9CisKK2ludCBnZXRfbmV4dF9vcHRpb24gKEZJTEUgKmZwLGNoYXIgKm9wdGlvbixjaGFyICp2YWx1ZSkKKworeworCWNoYXIgKnB0cjsKKwljaGFyIGJ1ZmZlciBbNjAwXTsKKworCWlmIChmZW9mIChmcCkpIHJldHVybiAoMCk7CisJZG97CisJCWlmIChmZW9mIChmcCkpIHJldHVybiAoMCk7CisJCWZnZXRzIChidWZmZXIsNTAwLGZwKTsKKwl9IHdoaWxlIChidWZmZXIgWzBdPT0nIycgfHwgYnVmZmVyIFswXT09J1xuJyk7CisKKwlwdHI9cGFyc2Vfd29yZCAoYnVmZmVyLG9wdGlvbik7CisJcHRyPXBhcnNlX3dvcmQgKHB0cix2YWx1ZSk7CisJcmV0dXJuICgxKTsKK30KKwordm9pZCBjaGVja19tb3VudGVkIChjaGFyICpuYW1lKQorCit7CisJRklMRSAqZnA7CisJY2hhciAqcHRyOworCWNoYXIgY3VycmVudF9saW5lIFs1MDBdLGN1cnJlbnRfd29yZCBbMjAwXTsKKworCW1vdW50ZWQ9MDsKKworCWlmICggKGZwPWZvcGVuICgiL2V0Yy9tdGFiIiwicnQiKSk9PU5VTEwpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRmFpbGVkIHRvIG9wZW4gL2V0Yy9tdGFiLiBBc3N1bWluZyBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTttb3VudGVkPTE7cmV0dXJuOworCX07CisKKwl3aGlsZSAoIWZlb2YgKGZwKSkgeworCQlmZ2V0cyAoY3VycmVudF9saW5lLDUwMCxmcCk7CisJCWlmIChmZW9mIChmcCkpIGJyZWFrOworCQlwdHI9cGFyc2Vfd29yZCAoY3VycmVudF9saW5lLGN1cnJlbnRfd29yZCk7CisJCWlmIChzdHJjYXNlY21wIChjdXJyZW50X3dvcmQsbmFtZSk9PTApIHsKKwkJCW1vdW50ZWQ9MTtmY2xvc2UgKGZwKTtyZXR1cm47CisJCX0KKwl9OworCisJZmNsb3NlIChmcCk7CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL2lub2RlX2NvbS5jIGIvZTJmc3Byb2dzL2V4dDJlZC9pbm9kZV9jb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRiOWYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC9pbm9kZV9jb20uYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL2lub2RlX2NvbS5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworQ29tbWFuZHMgcmVsZXZhbnQgdG8gZXh0Ml9pbm9kZSB0eXBlLgorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCA5IDE5OTUKKworQ29weXJpZ2h0IChDKSAxOTk1IEdhZGkgT3htYW4KKworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX19fcHJldiAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlsb25nIGdyb3VwX251bSxncm91cF9vZmZzZXQsZW50cnlfbnVtLGJsb2NrX251bSxmaXJzdF9lbnRyeSxsYXN0X2VudHJ5OworCWxvbmcgaW5vZGVfbnVtLG11bHQ9MTsKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjIGRlc2M7CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW11bHQ9YXRvbCAoYnVmZmVyKTsKKwl9CisKKwlibG9ja19udW09ZGV2aWNlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoZGV2aWNlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJZW50cnlfbnVtPShkZXZpY2Vfb2Zmc2V0LWRlc2MuYmdfaW5vZGVfdGFibGUqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKS9zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKTsKKworCWZpcnN0X2VudHJ5PTA7bGFzdF9lbnRyeT1maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC0xOworCWlub2RlX251bT0wOworCisJaWYgKGVudHJ5X251bS1tdWx0KzE+MCkgeworCQlkZXZpY2Vfb2Zmc2V0LT1zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSptdWx0OworCQllbnRyeV9udW0tPW11bHQ7CisKKwkJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixkZXZpY2Vfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwkJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW50cnkgb3V0IG9mIGxpbWl0c1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9CisKKwlpZiAoZW50cnlfbnVtPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJSZWFjaGVkIGZpcnN0IGlub2RlIGluIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvclxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJbG9uZyBncm91cF9udW0sZ3JvdXBfb2Zmc2V0LGVudHJ5X251bSxibG9ja19udW0sZmlyc3RfZW50cnksbGFzdF9lbnRyeTsKKwlsb25nIGlub2RlX251bSxtdWx0PTE7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBkZXNjOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCisJaWYgKCpwdHIhPTApIHsKKwkJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCQltdWx0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisKKwlibG9ja19udW09ZGV2aWNlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoZGV2aWNlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJZW50cnlfbnVtPShkZXZpY2Vfb2Zmc2V0LWRlc2MuYmdfaW5vZGVfdGFibGUqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplKS9zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKTsKKworCWZpcnN0X2VudHJ5PTA7bGFzdF9lbnRyeT1maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC0xOworCWlub2RlX251bT0wOworCisJaWYgKGVudHJ5X251bSttdWx0LTE8bGFzdF9lbnRyeSkgeworCQlkZXZpY2Vfb2Zmc2V0Kz1zaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSptdWx0OworCQllbnRyeV9udW0rPW11bHQ7CisKKwkJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixkZXZpY2Vfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwkJc3RyY3B5IChidWZmZXIsInNob3ciKTtkaXNwYXRjaCAoYnVmZmVyKTsKKwl9CisKKwllbHNlIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gRW50cnkgb3V0IG9mIGxpbWl0c1xuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9CisKKwlpZiAoZW50cnlfbnVtPT1sYXN0X2VudHJ5KSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJSZWFjaGVkIGxhc3QgaW5vZGUgaW4gY3VycmVudCBncm91cCBkZXNjcmlwdG9yXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9Cit9CisKKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19zaG93IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGVfcHRyOworCisJdW5zaWduZWQgc2hvcnQgdGVtcDsKKwlpbnQgaTsKKworCWxvbmcgZ3JvdXBfbnVtLGdyb3VwX29mZnNldCxlbnRyeV9udW0sYmxvY2tfbnVtLGZpcnN0X2VudHJ5LGxhc3RfZW50cnksaW5vZGVfbnVtOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCWJsb2NrX251bT1kZXZpY2Vfb2Zmc2V0L2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWdyb3VwX251bT1pbm9kZV9vZmZzZXRfdG9fZ3JvdXBfbnVtIChkZXZpY2Vfb2Zmc2V0KTsKKwlncm91cF9vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCtncm91cF9udW0qc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKworCWxvd19yZWFkICgoY2hhciAqKSAmZGVzYyxzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLGdyb3VwX29mZnNldCk7CisKKwllbnRyeV9udW09KGRldmljZV9vZmZzZXQtZGVzYy5iZ19pbm9kZV90YWJsZSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpL3NpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpOworCWZpcnN0X2VudHJ5PTA7bGFzdF9lbnRyeT1maWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC0xOworCWlub2RlX251bT1ncm91cF9udW0qZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXArMTsKKwlpbm9kZV9udW0rPWVudHJ5X251bTsKKworCWlub2RlX3B0cj0mdHlwZV9kYXRhLnUudF9leHQyX2lub2RlOworCisJc2hvdyAoY29tbWFuZF9saW5lKTsKKworCXdtb3ZlIChzaG93X3BhZCwwLDQwKTt3cHJpbnR3IChzaG93X3BhZCwib2N0YWwgPSAlMDZvICIsaW5vZGVfcHRyLT5pX21vZGUpOworCWZvciAoaT02O2k+PTA7aS09MykgeworCQl0ZW1wPWlub2RlX3B0ci0+aV9tb2RlICYgMHgxZmY7CisJCXRlbXA9dGVtcCA+PiBpOworCQlpZiAodGVtcCAmIDQpCisJCQl3cHJpbnR3IChzaG93X3BhZCwiciIpOworCQllbHNlCisJCQl3cHJpbnR3IChzaG93X3BhZCwiLSIpOworCisJCWlmICh0ZW1wICYgMikKKwkJCXdwcmludHcgKHNob3dfcGFkLCJ3Iik7CisJCWVsc2UKKwkJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKwkJaWYgKHRlbXAgJiAxKQorCQkJd3ByaW50dyAoc2hvd19wYWQsIngiKTsKKwkJZWxzZQorCQkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKwl9CisJd21vdmUgKHNob3dfcGFkLDMsNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX2F0aW1lKSk7CisJd21vdmUgKHNob3dfcGFkLDQsNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX2N0aW1lKSk7CisJd21vdmUgKHNob3dfcGFkLDUsNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX210aW1lKSk7CisJd21vdmUgKHNob3dfcGFkLDYsNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX2R0aW1lKSk7CisKKwl3bW92ZSAoc2hvd19wYWQsMTAsNDApOworCXRlbXA9aW5vZGVfcHRyLT5pX2ZsYWdzOworCisJaWYgKHRlbXAgJiBFWFQyX1NFQ1JNX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwicyIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCisJaWYgKHRlbXAgJiBFWFQyX1VOUk1fRkwpCisJCXdwcmludHcgKHNob3dfcGFkLCJ1Iik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3BhZCwiLSIpOworCisJaWYgKHRlbXAgJiBFWFQyX0NPTVBSX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwiYyIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCWlmICh0ZW1wICYgRVhUMl9TWU5DX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwiUyIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCWlmICh0ZW1wICYgRVhUMl9JTU1VVEFCTEVfRkwpCisJCXdwcmludHcgKHNob3dfcGFkLCJpIik7CisJZWxzZQorCQl3cHJpbnR3IChzaG93X3BhZCwiLSIpOworCisJaWYgKHRlbXAgJiBFWFQyX0FQUEVORF9GTCkKKwkJd3ByaW50dyAoc2hvd19wYWQsImEiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCItIik7CisKKwlpZiAodGVtcCAmIEVYVDJfTk9EVU1QX0ZMKQorCQl3cHJpbnR3IChzaG93X3BhZCwiZCIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd19wYWQsIi0iKTsKKworCXJlZnJlc2hfc2hvd19wYWQgKCk7CisKKwl3bW92ZSAoc2hvd193aW4sMSwwKTsKKworCXdwcmludHcgKHNob3dfd2luLCJJbm9kZSAlbGQgb2YgJWxkLiBFbnRyeSAlbGQgb2YgJWxkIGluIGdyb3VwIGRlc2NyaXB0b3IgJWxkLlxuIgorCQksaW5vZGVfbnVtLGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfY291bnQsZW50cnlfbnVtLGxhc3RfZW50cnksZ3JvdXBfbnVtKTsKKworCXdwcmludHcgKHNob3dfd2luLCJJbm9kZSB0eXBlOiAiKTsKKworCWlmIChpbm9kZV9udW0gPCBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTykgeworCQlzd2l0Y2ggKGlub2RlX251bSkgeworCQkJY2FzZSBFWFQyX0JBRF9JTk86CisJCQkJd3ByaW50dyAoc2hvd193aW4sIkJhZCBibG9ja3MgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUMl9ST09UX0lOTzoKKwkJCQl3cHJpbnR3IChzaG93X3dpbiwiUm9vdCBpbm9kZSAtICIpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWFQ0X1VTUl9RVU9UQV9JTk86CisJCQkJd3ByaW50dyAoc2hvd193aW4sIlVzZXIgcXVvdGEgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUNF9HUlBfUVVPVEFfSU5POgorCQkJCXdwcmludHcgKHNob3dfd2luLCJHcm91cCBxdW90YSBpbm9kZSAtICIpOworCQkJCWJyZWFrOworCQkJY2FzZSBFWFQyX0JPT1RfTE9BREVSX0lOTzoKKwkJCQl3cHJpbnR3IChzaG93X3dpbiwiQm9vdCBsb2FkZXIgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVhUMl9VTkRFTF9ESVJfSU5POgorCQkJCXdwcmludHcgKHNob3dfd2luLCJVbmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGUgLSAiKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJd3ByaW50dyAoc2hvd193aW4sIlJlc2VydmVkIGlub2RlIC0gIik7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGU9PTApCisJCXdwcmludHcgKHNob3dfd2luLCJGcmVlLiAgICAgICAgICAgICIpOworCisJaWYgKFNfSVNSRUcgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKQorCQl3cHJpbnR3IChzaG93X3dpbiwiRmlsZS4gICAgICAgICAgICAiKTsKKworCWlmIChTX0lTRElSICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkKKwkJd3ByaW50dyAoc2hvd193aW4sIkRpcmVjdG9yeS4gICAgICAgIik7CisKKwlpZiAoU19JU0xOSyAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfbW9kZSkpIHsKKwkJd3ByaW50dyAoc2hvd193aW4sIlN5bWJvbGljIGxpbmsuICAgIik7CisJCXdtb3ZlIChzaG93X3BhZCwxMiw0MCk7CisKKwkJaWYgKGlub2RlX3B0ci0+aV9zaXplIDw9IDYwKQorCQkJd3ByaW50dyAoc2hvd19wYWQsIi0+ICVzIiwoY2hhciAqKSAmdHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfYmxvY2sgWzBdKTsKKwkJZWxzZQorCQkJd3ByaW50dyAoc2hvd19wYWQsIlNsb3cgc3ltYm9saWMgbGlua1xuIik7CisJCXJlZnJlc2hfc2hvd19wYWQgKCk7CisJfQorCisJaWYgKFNfSVNDSFIgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKQorCQl3cHJpbnR3IChzaG93X3dpbiwiQ2hhcmFjdGVyIGRldmljZS4iKTsKKworCWlmIChTX0lTQkxLICh0eXBlX2RhdGEudS50X2V4dDJfaW5vZGUuaV9tb2RlKSkKKwkJd3ByaW50dyAoc2hvd193aW4sIkJsb2NrIGRldmljZS4gICAgIik7CisKKwl3cHJpbnR3IChzaG93X3dpbiwiXG4iKTtyZWZyZXNoX3Nob3dfd2luICgpOworCisJaWYgKGVudHJ5X251bT09bGFzdF9lbnRyeSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiUmVhY2hlZCBsYXN0IGlub2RlIGluIGN1cnJlbnQgZ3JvdXAgZGVzY3JpcHRvclxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJfQorCisJaWYgKGVudHJ5X251bT09Zmlyc3RfZW50cnkpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIlJlYWNoZWQgZmlyc3QgaW5vZGUgaW4gY3VycmVudCBncm91cCBkZXNjcmlwdG9yXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9CisKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfX19lbnRyeSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJbG9uZyBncm91cF9udW0sZ3JvdXBfb2Zmc2V0LGVudHJ5X251bSxibG9ja19udW0sd2FudGVkX2VudHJ5OworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgZGVzYzsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0cj09MCkgcmV0dXJuOworCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwl3YW50ZWRfZW50cnk9YXRvbCAoYnVmZmVyKTsKKworCWJsb2NrX251bT1kZXZpY2Vfb2Zmc2V0L2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKworCWdyb3VwX251bT1pbm9kZV9vZmZzZXRfdG9fZ3JvdXBfbnVtIChkZXZpY2Vfb2Zmc2V0KTsKKwlncm91cF9vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCtncm91cF9udW0qc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKworCWxvd19yZWFkICgoY2hhciAqKSAmZGVzYyxzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLGdyb3VwX29mZnNldCk7CisKKwllbnRyeV9udW09KGRldmljZV9vZmZzZXQtZGVzYy5iZ19pbm9kZV90YWJsZSpmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemUpL3NpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpOworCisJaWYgKHdhbnRlZF9lbnRyeSA+IGVudHJ5X251bSkgeworCQlzcHJpbnRmIChidWZmZXIsIm5leHQgJWxkIix3YW50ZWRfZW50cnktZW50cnlfbnVtKTsKKwkJZGlzcGF0Y2ggKGJ1ZmZlcik7CisJfQorCisJZWxzZSBpZiAod2FudGVkX2VudHJ5IDwgZW50cnlfbnVtKSB7CisJCXNwcmludGYgKGJ1ZmZlciwicHJldiAlbGQiLGVudHJ5X251bS13YW50ZWRfZW50cnkpOworCQlkaXNwYXRjaCAoYnVmZmVyKTsKKwl9Cit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX19fZ3JvdXAgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgYnVmZmVyIFs4MF07CisKKwlsb25nIGdyb3VwX251bSxncm91cF9vZmZzZXQ7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoZGV2aWNlX29mZnNldCk7CisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQrZ3JvdXBfbnVtKnNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyk7CisKKwlzcHJpbnRmIChidWZmZXIsInNldG9mZnNldCAlbGQiLGdyb3VwX29mZnNldCk7ZGlzcGF0Y2ggKGJ1ZmZlcik7CisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGV4dDJfZ3JvdXBfZGVzYyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2ZpbGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWNoYXIgYnVmZmVyIFs4MF07CisKKwlpZiAoIVNfSVNSRUcgKHR5cGVfZGF0YS51LnRfZXh0Ml9pbm9kZS5pX21vZGUpKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIElub2RlIHR5cGUgaXMgbm90IGZpbGVcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWluaXRfZmlsZV9pbmZvICgpKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFVuYWJsZSB0byBzaG93IGZpbGVcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlzcHJpbnRmIChidWZmZXIsInNldHR5cGUgZmlsZSIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9fX2RpciAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJY2hhciBidWZmZXIgWzgwXTsKKworCWlmICghU19JU0RJUiAodHlwZV9kYXRhLnUudF9leHQyX2lub2RlLmlfbW9kZSkpIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gSW5vZGUgdHlwZSBpcyBub3QgZGlyZWN0b3J5XG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCQlyZXR1cm47CisJfQorCisvKiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBpbml0IGZpcnN0X2ZpbGVfaW5mbyBmaXJzdCwgYXMgc2VhcmNoX2Rpcl9lbnRyaWVzIHJlbGllcyBvbiBpdCAqLworCisJaWYgKCFpbml0X2Rpcl9pbmZvICgmZmlyc3RfZmlsZV9pbmZvKSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBVbmFibGUgdG8gc2hvdyBkaXJlY3RvcnlcbiIpO3JlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCXJldHVybjsKKwl9CisKKwlmaWxlX2luZm89Zmlyc3RfZmlsZV9pbmZvOworCisJc3ByaW50ZiAoYnVmZmVyLCJzZXR0eXBlIGRpciIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCitsb25nIGlub2RlX29mZnNldF90b19ncm91cF9udW0gKGxvbmcgaW5vZGVfb2Zmc2V0KQorCit7CisJaW50IGZvdW5kPTA7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBkZXNjOworCisJbG9uZyBibG9ja19udW0sZ3JvdXBfb2Zmc2V0LGdyb3VwX251bTsKKworCWJsb2NrX251bT1pbm9kZV9vZmZzZXQvZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJZ3JvdXBfb2Zmc2V0PWZpbGVfc3lzdGVtX2luZm8uZmlyc3RfZ3JvdXBfZGVzY19vZmZzZXQ7CisJZ3JvdXBfbnVtPShncm91cF9vZmZzZXQtZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCkvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKworCXdoaWxlICghZm91bmQgJiYgZ3JvdXBfbnVtPj0wICYmIGdyb3VwX251bTxmaWxlX3N5c3RlbV9pbmZvLmdyb3Vwc19jb3VudCkgeworCQlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCQlpZiAoYmxvY2tfbnVtPj1kZXNjLmJnX2lub2RlX3RhYmxlICYmIGJsb2NrX251bTxkZXNjLmJnX2lub2RlX3RhYmxlK2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tzX3Blcl9ncm91cCkKKwkJCWZvdW5kPTE7CisJCWVsc2UKKwkJCWdyb3VwX29mZnNldCs9c2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKwkJZ3JvdXBfbnVtPShncm91cF9vZmZzZXQtZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCkvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKwl9CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoZ3JvdXBfbnVtKTsKK30KKworCisKK2xvbmcgaW50IGlub2RlX29mZnNldF90b19pbm9kZV9udW0gKGxvbmcgaW5vZGVfb2Zmc2V0KQorCit7CisJbG9uZyBncm91cF9udW0sZ3JvdXBfb2Zmc2V0LGVudHJ5X251bSxibG9ja19udW0sZmlyc3RfZW50cnksbGFzdF9lbnRyeSxpbm9kZV9udW07CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBkZXNjOworCisJYmxvY2tfbnVtPWlub2RlX29mZnNldC9maWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwlncm91cF9udW09aW5vZGVfb2Zmc2V0X3RvX2dyb3VwX251bSAoaW5vZGVfb2Zmc2V0KTsKKwlncm91cF9vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCtncm91cF9udW0qc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKworCWxvd19yZWFkICgoY2hhciAqKSAmZGVzYyxzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpLGdyb3VwX29mZnNldCk7CisKKwllbnRyeV9udW09KGlub2RlX29mZnNldC1kZXNjLmJnX2lub2RlX3RhYmxlKmZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZSkvc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9pbm9kZSk7CisJZmlyc3RfZW50cnk9MDtsYXN0X2VudHJ5PWZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwLTE7CisJaW5vZGVfbnVtPWdyb3VwX251bSpmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cCsxOworCWlub2RlX251bSs9ZW50cnlfbnVtOworCisJcmV0dXJuIChpbm9kZV9udW0pOworfQorCitsb25nIGludCBpbm9kZV9udW1fdG9faW5vZGVfb2Zmc2V0IChsb25nIGlub2RlX251bSkKKworeworCWxvbmcgZ3JvdXBfbnVtLGdyb3VwX29mZnNldCxpbm9kZV9vZmZzZXQsaW5vZGVfZW50cnk7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyBkZXNjOworCisJaW5vZGVfbnVtLS07CisKKwlncm91cF9udW09aW5vZGVfbnVtL2ZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwOworCWlub2RlX2VudHJ5PWlub2RlX251bSVmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cDsKKwlncm91cF9vZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5maXJzdF9ncm91cF9kZXNjX29mZnNldCtncm91cF9udW0qc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKTsKKwlsb3dfcmVhZCAoKGNoYXIgKikgJmRlc2Msc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSxncm91cF9vZmZzZXQpOworCisJaW5vZGVfb2Zmc2V0PWRlc2MuYmdfaW5vZGVfdGFibGUqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplK2lub2RlX2VudHJ5KnNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpOworCisJcmV0dXJuIChpbm9kZV9vZmZzZXQpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9pbm9kZWJpdG1hcF9jb20uYyBiL2UyZnNwcm9ncy9leHQyZWQvaW5vZGViaXRtYXBfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwMjIzNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvaW5vZGViaXRtYXBfY29tLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9pbm9kZWJpdG1hcF9jb20uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hhbmRsZXMgdGhlIGlub2RlIGJpdG1hcC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGluIGJsb2NrYml0bWFwX2NvbS5jIC0gVGhvc2UgdHdvIGZpbGVzIGFyZSBhbG1vc3QgZXF1YWwuCisKK0ZpcnN0IHdyaXR0ZW4gb246IEp1bHkgMjUgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX2VudHJ5IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwl1bnNpZ25lZCBsb25nIGVudHJ5X251bTsKKwljaGFyICpwdHIsYnVmZmVyIFs4MF07CisKKwlwdHI9cGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGJ1ZmZlcik7CisJaWYgKCpwdHI9PTApIHsKKwkJd3ByaW50dyAoY29tbWFuZF93aW4sIkVycm9yIC0gTm8gYXJndW1lbnQgc3BlY2lmaWVkXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisJcHRyPXBhcnNlX3dvcmQgKHB0cixidWZmZXIpOworCisJZW50cnlfbnVtPWF0b2wgKGJ1ZmZlcik7CisKKwlpZiAoZW50cnlfbnVtID49IGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIEVudHJ5IG51bWJlciBvdXQgb2YgYm91bmRzXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlpbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW09ZW50cnlfbnVtOworCXN0cmNweSAoYnVmZmVyLCJzaG93Iik7ZGlzcGF0Y2ggKGJ1ZmZlcik7Cit9CisKK3ZvaWQgdHlwZV9leHQyX2lub2RlX2JpdG1hcF9fX25leHQgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfb2Zmc2V0PTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJZW50cnlfb2Zmc2V0PWF0b2wgKGJ1ZmZlcik7CisJfQorCisJc3ByaW50ZiAoYnVmZmVyLCJlbnRyeSAlbGQiLGlub2RlX2JpdG1hcF9pbmZvLmVudHJ5X251bStlbnRyeV9vZmZzZXQpOworCWRpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9pbm9kZV9iaXRtYXBfX19wcmV2IChjaGFyICpjb21tYW5kX2xpbmUpCisKK3sKKwlsb25nIGVudHJ5X29mZnNldD0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCWVudHJ5X29mZnNldD1hdG9sIChidWZmZXIpOworCX0KKworCXNwcmludGYgKGJ1ZmZlciwiZW50cnkgJWxkIixpbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW0tZW50cnlfb2Zmc2V0KTsKKwlkaXNwYXRjaCAoYnVmZmVyKTsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fYWxsb2NhdGUgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCWxvbmcgZW50cnlfbnVtLG51bT0xOworCWNoYXIgKnB0cixidWZmZXIgWzgwXTsKKworCXB0cj1wYXJzZV93b3JkIChjb21tYW5kX2xpbmUsYnVmZmVyKTsKKwlpZiAoKnB0ciE9MCkgeworCQlwdHI9cGFyc2Vfd29yZCAocHRyLGJ1ZmZlcik7CisJCW51bT1hdG9sIChidWZmZXIpOworCX0KKworCWVudHJ5X251bT1pbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW07CisJaWYgKG51bSA+IGZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwLWVudHJ5X251bSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBUaGVyZSBhcmVuJ3QgdGhhdCBtdWNoIGlub2RlcyBpbiB0aGUgZ3JvdXBcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwl3aGlsZSAobnVtKSB7CisJCWFsbG9jYXRlX2lub2RlIChlbnRyeV9udW0pOworCQludW0tLTtlbnRyeV9udW0rKzsKKwl9CisKKwlkaXNwYXRjaCAoInNob3ciKTsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fZGVhbGxvY2F0ZSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJbG9uZyBlbnRyeV9udW0sbnVtPTE7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyIT0wKSB7CisJCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKwkJbnVtPWF0b2wgKGJ1ZmZlcik7CisJfQorCisJZW50cnlfbnVtPWlub2RlX2JpdG1hcF9pbmZvLmVudHJ5X251bTsKKwlpZiAobnVtID4gZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9jay5zX2lub2Rlc19wZXJfZ3JvdXAtZW50cnlfbnVtKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIFRoZXJlIGFyZW4ndCB0aGF0IG11Y2ggaW5vZGVzIGluIHRoZSBncm91cFxuIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7cmV0dXJuOworCX0KKworCXdoaWxlIChudW0pIHsKKwkJZGVhbGxvY2F0ZV9pbm9kZSAoZW50cnlfbnVtKTsKKwkJbnVtLS07ZW50cnlfbnVtKys7CisJfQorCisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CisKKwordm9pZCBhbGxvY2F0ZV9pbm9kZSAobG9uZyBlbnRyeV9udW0pCisKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdF9tYXNrPTE7CisJaW50IGJ5dGVfb2Zmc2V0LGo7CisKKwlieXRlX29mZnNldD1lbnRyeV9udW0vODsKKwlmb3IgKGo9MDtqPGVudHJ5X251bSU4O2orKykKKwkJYml0X21hc2sqPTI7CisJdHlwZV9kYXRhLnUuYnVmZmVyIFtieXRlX29mZnNldF0gfD0gYml0X21hc2s7Cit9CisKK3ZvaWQgZGVhbGxvY2F0ZV9pbm9kZSAobG9uZyBlbnRyeV9udW0pCisKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdF9tYXNrPTE7CisJaW50IGJ5dGVfb2Zmc2V0LGo7CisKKwlieXRlX29mZnNldD1lbnRyeV9udW0vODsKKwlmb3IgKGo9MDtqPGVudHJ5X251bSU4O2orKykKKwkJYml0X21hc2sqPTI7CisJYml0X21hc2tePTB4ZmY7CisKKwl0eXBlX2RhdGEudS5idWZmZXIgW2J5dGVfb2Zmc2V0XSAmPSBiaXRfbWFzazsKK30KKwordm9pZCB0eXBlX2V4dDJfaW5vZGVfYml0bWFwX19fc2hvdyAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJaW50IGksajsKKwl1bnNpZ25lZCBjaGFyICpwdHI7CisJdW5zaWduZWQgbG9uZyBpbm9kZV9udW0sZW50cnlfbnVtOworCisJcHRyPXR5cGVfZGF0YS51LmJ1ZmZlcjsKKwlzaG93X3BhZF9pbmZvLmxpbmU9MDtzaG93X3BhZF9pbmZvLm1heF9saW5lPS0xOworCisJd21vdmUgKHNob3dfcGFkLDAsMCk7CisJZm9yIChpPTAsZW50cnlfbnVtPTA7aTxmaWxlX3N5c3RlbV9pbmZvLnN1cGVyX2Jsb2NrLnNfaW5vZGVzX3Blcl9ncm91cC84O2krKyxwdHIrKykgeworCQlmb3IgKGo9MTtqPD0xMjg7aio9MikgeworCQkJaWYgKGVudHJ5X251bT09aW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtKSB7CisJCQkJd2F0dHJzZXQgKHNob3dfcGFkLEFfUkVWRVJTRSk7CisJCQkJc2hvd19wYWRfaW5mby5saW5lPXNob3dfcGFkX2luZm8ubWF4X2xpbmUtc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLzI7CisJCQl9CisKKwkJCWlmICgoKnB0cikgJiBqKQorCQkJCXdwcmludHcgKHNob3dfcGFkLCIxIik7CisJCQllbHNlCisJCQkJd3ByaW50dyAoc2hvd19wYWQsIjAiKTsKKworCQkJaWYgKGVudHJ5X251bT09aW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtKQorCQkJCXdhdHRyc2V0IChzaG93X3BhZCxBX05PUk1BTCk7CisKKwkJCWVudHJ5X251bSsrOworCQl9CisJCXdwcmludHcgKHNob3dfcGFkLCIgIik7CisJCWlmIChpJTg9PTcpIHsKKwkJCXdwcmludHcgKHNob3dfcGFkLCJcbiIpOworCQkJc2hvd19wYWRfaW5mby5tYXhfbGluZSsrOworCQl9CisJfQorCisJaWYgKGklOCE9NykgeworCQl3cHJpbnR3IChzaG93X3BhZCwiXG4iKTsKKwkJc2hvd19wYWRfaW5mby5tYXhfbGluZSsrOworCX0KKworCXJlZnJlc2hfc2hvd19wYWQgKCk7CisJc2hvd19pbmZvICgpOworCXdtb3ZlIChzaG93X3dpbiwxLDApO3dwcmludHcgKHNob3dfd2luLCJJbm9kZSBiaXRtYXAgb2YgYmxvY2sgZ3JvdXAgJWxkXG4iLGlub2RlX2JpdG1hcF9pbmZvLmdyb3VwX251bSk7CisKKwlpbm9kZV9udW09MStpbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW0raW5vZGVfYml0bWFwX2luZm8uZ3JvdXBfbnVtKmZpbGVfc3lzdGVtX2luZm8uc3VwZXJfYmxvY2suc19pbm9kZXNfcGVyX2dyb3VwOworCXdwcmludHcgKHNob3dfd2luLCJTdGF0dXMgb2YgaW5vZGUgJWxkIC0gIixpbm9kZV9udW0pOworCXB0cj10eXBlX2RhdGEudS5idWZmZXIraW5vZGVfYml0bWFwX2luZm8uZW50cnlfbnVtLzg7CisJaj0xOworCWZvciAoaT1pbm9kZV9iaXRtYXBfaW5mby5lbnRyeV9udW0gJSA4O2k+MDtpLS0pCisJCWoqPTI7CisJaWYgKCgqcHRyKSAmIGopCisJCXdwcmludHcgKHNob3dfd2luLCJBbGxvY2F0ZWRcbiIpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd193aW4sIkZyZWVcbiIpOworCXJlZnJlc2hfc2hvd193aW4gKCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL21haW4uYyBiL2UyZnNwcm9ncy9leHQyZWQvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTNmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvZXh0MmVkL21haW4uYwpAQCAtMCwwICsxLDU0NSBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL21haW4uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLQorTWFpbiBwcm9ncmFtCistLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIG1vc3RseSBjb250YWluczoKKworMS4JQSBsaXN0IG9mIGdsb2JhbCB2YXJpYWJsZXMgdXNlZCB0aHJvdWdoIHRoZSBlbnRpcmUgcHJvZ3JhbS4KKzIuCVRoZSBwYXJzZXIsIHdoaWNoIGFza3MgdGhlIGNvbW1hbmQgbGluZSBmcm9tIHRoZSB1c2VyLgorMy4JVGhlIGRpc3BhdGNoZXIsIHdoaWNoIGFuYWx5emVzIHRoZSBjb21tYW5kIGxpbmUgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGZ1bmN0aW9uLgorNC4JQSBjb21tYW5kIHBhdHRlcm4gbWF0Y2hlciB3aGljaCBpcyB1c2VkIGFsb25nIHdpdGggdGhlIHJlYWRsaW5lIGNvbXBsZXRpb24gZmVhdHVyZS4KKzUuCUEgZnVuY3Rpb24gd2hpY2ggdGVsbHMgdGhlIHVzZXIgdGhhdCBhbiBpbnRlcm5hbCBlcnJvciBoYXMgb2NjdXJlZC4KKworRmlyc3Qgd3JpdHRlbiBvbjogTWFyY2ggMzAgMTk5NQorCitDb3B5cmlnaHQgKEMpIDE5OTUgR2FkaSBPeG1hbgorCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmZGVmIEhBVkVfUkVBRExJTkUKKyNpbmNsdWRlIDxyZWFkbGluZS5oPgorI2luY2x1ZGUgPGhpc3RvcnkuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBpbnQgb3B0aW5kOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0MmVkLmgiCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KKworLyoKKworQ29uZmlndXJhdGlvbiBmaWxlIG9wdGlvbnMKKworVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgd2lsbCBiZSBzZXQgYnkgaW5pdC5jIHRvIHRoZSB2YWx1ZXMgc2VsZWN0ZWQgaW4gdGhlIHVzZXIgY29uZmlndXJhdGlvbiBmaWxlLgorVGhleSBhcmUgaW5pdGlhbGl6ZWQgYmVsb3cgdG8gc29tZSBsb2dpY2FsIGRlZmF1bHRzLgorCisqLworCisKK2NoYXIgRXh0MkRlc2NyaXB0b3JzIFsyMDBdPSJleHQyLmRlc2NyaXB0b3JzIjsJLyogVGhlIGxvY2F0aW9uIG9mIHRoZSBleHQyIGZpbGVzeXN0ZW0gb2JqZWN0IGRlZmluaXRpb24gKi8KK2NoYXIgQWx0ZXJuYXRlRGVzY3JpcHRvcnMgWzIwMF09IiI7CQkvKiBXZSBhbGxvdyB0aGUgdXNlciB0byBkZWZpbmUgYWRkaXRpb25hbCBzdHJ1Y3R1cmVzICovCitjaGFyIExvZ0ZpbGUgWzIwMF09ImV4dDJlZC5sb2ciOwkJLyogVGhlIGxvY2F0aW9uIG9mIHRoZSBsb2cgZmlsZSAtIEVhY2ggd3JpdGUgd2lsbCBiZSBsb2dnZWQgdGhlcmUgKi8KK2ludCBMb2dDaGFuZ2VzPTE7CQkJCS8qIDEgZW5hYmxlcyBsb2dnaW5nLCAwIGRpYWJsZXMgbG9nZ2luZyAqLworaW50IEFsbG93Q2hhbmdlcz0wOwkJCQkvKiBXaGVuIHNldCwgdGhlIGVuYWJsZXdyaXRlIGNvbW1hbmQgd2lsbCBmYWlsICovCitpbnQgQWxsb3dNb3VudGVkUmVhZD0wOwkJCQkvKiBCZWhhdmlvciB3aGVuIHRyeWluZyB0byBvcGVuIGEgbW91bnRlZCBmaWxlc3lzdGVtIHJlYWQtb25seSAqLworaW50IEZvcmNlRXh0Mj0wOwkJCQkvKiBXaGVuIHNldCwgZXh0MiBhdXRvZGV0ZWN0aW9uIGlzIG92ZXJyaWRkZW4gKi8KK2ludCBEZWZhdWx0QmxvY2tTaXplPTEwMjQ7Cit1bnNpZ25lZCBsb25nIERlZmF1bHRUb3RhbEJsb2Nrcz0yMDk3MTUxOwordW5zaWduZWQgbG9uZyBEZWZhdWx0QmxvY2tzSW5Hcm91cD04MTkyOwkvKiBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQgd2hlbiBhbiBleHQyIGZpbGVzeXN0ZW0gaXMgbm90ICovCitpbnQgRm9yY2VEZWZhdWx0PTA7CQkJCS8qIGRldGVjdGVkLCBvciBGb3JjZURlZmF1bHQgaXMgc2V0ICovCisKK2NoYXIgbGFzdF9jb21tYW5kX2xpbmUgWzgwXTsJCQkvKiBBIHNpbXBsZSBvbmUgY29tbWFuZCBjYWNoZSwgaW4gYWRkaXRpb24gdG8gdGhlIHJlYWRsaW5lIGhpc3RvcnkgKi8KKworY2hhciBkZXZpY2VfbmFtZSBbODBdOwkJCQkvKiBUaGUgbG9jYXRpb24gb2YgdGhlIGZpbGVzeXN0ZW0gKi8KK0ZJTEUgKmRldmljZV9oYW5kbGU9TlVMTDsJCQkvKiBUaGlzIGlzIHBhc3NlZCB0byB0aGUgZm9wZW4gLyBmcmVhZCAuLi4gY29tbWFuZHMgKi8KK2xvbmcgZGV2aWNlX29mZnNldDsJCQkJLyogVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0gKi8KKwkJCQkJCS8qIE5vdGUgdGhhdCB3ZSBoYXZlIGEgMiBHQiBsaW1pdGF0aW9uICovCisKK2ludCBtb3VudGVkPTA7CQkJCQkvKiBUaGlzIGlzIHNldCB3aGVuIHdlIGZpbmQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkICovCisKK3N0cnVjdCBzdHJ1Y3RfY29tbWFuZHMgZ2VuZXJhbF9jb21tYW5kcyxleHQyX2NvbW1hbmRzOwkJLyogVXNlZCB0byBkZWZpbmUgdGhlIGdlbmVyYWwgYW5kIGV4dDIgY29tbWFuZHMgKi8KK3N0cnVjdCBzdHJ1Y3RfZGVzY3JpcHRvciAqZmlyc3RfdHlwZSwqbGFzdF90eXBlLCpjdXJyZW50X3R5cGU7CS8qIFVzZWQgdG8gYWNjZXNzIHRoZSBkb3VibGUgbGlua2VkIGxpc3QgKi8KK3N0cnVjdCBzdHJ1Y3RfdHlwZV9kYXRhIHR5cGVfZGF0YTsJCQkJLyogVGhlIGN1cnJlbnQgZGF0YSBpcyBzb21ldGltZXMgc3RvcmVkIGhlcmUgKi8KK3N0cnVjdCBzdHJ1Y3RfZmlsZV9zeXN0ZW1faW5mbyBmaWxlX3N5c3RlbV9pbmZvOwkJLyogRXNzZW50aWFsIGluZm9ybWF0aW9uIG9uIHRoZSBmaWxlc3lzdGVtICovCitzdHJ1Y3Qgc3RydWN0X2ZpbGVfaW5mbyBmaWxlX2luZm8sZmlyc3RfZmlsZV9pbmZvOwkJLyogVXNlZCBieSBmaWxlX2NvbS5jIHRvIGFjY2VzcyBmaWxlcyAqLworc3RydWN0IHN0cnVjdF9ncm91cF9pbmZvIGdyb3VwX2luZm87CQkJCS8qIFVzZWQgYnkgZ3JvdXBfY29tLmMgKi8KK3N0cnVjdCBzdHJ1Y3Rfc3VwZXJfaW5mbyBzdXBlcl9pbmZvOwkJCQkvKiBVc2VkIGJ5IHN1cGVyX2NvbS5jICovCitzdHJ1Y3Qgc3RydWN0X3JlbWVtYmVyX2xpZm8gcmVtZW1iZXJfbGlmbzsJCQkvKiBBIGNpcmN1bGFyIG1lbW9yeSBvZiBvYmplY3RzICovCitzdHJ1Y3Qgc3RydWN0X2Jsb2NrX2JpdG1hcF9pbmZvIGJsb2NrX2JpdG1hcF9pbmZvOwkJLyogVXNlZCBieSBibG9ja2JpdG1hcF9jb20uYyAqLworc3RydWN0IHN0cnVjdF9pbm9kZV9iaXRtYXBfaW5mbyBpbm9kZV9iaXRtYXBfaW5mbzsJCS8qIFVzZWQgYnkgaW5vZGViaXRtYXBfY29tLmMgKi8KKworaW50IHJlZHJhd19yZXF1ZXN0PTA7CQkJCQkJLyogSXMgc2V0IGJ5IGEgc2lnbmFsIGhhbmRsZXIgdG8gaGFuZGxlIHRlcm1pbmFsICovCisJCQkJCQkJCS8qIHNjcmVlbiBzaXplIGNoYW5nZS4gKi8KKworCisvKgorICogV2UganVzdCBjYWxsIHRoZSBwYXJzZXIgdG8gZ2V0IGNvbW1hbmRzIGZyb20gdGhlIHVzZXIuIFdlIHF1aXQgd2hlbgorICogcGFyc2VyIHJldHVybnMuCisgKi8KK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CXdyaXRlX3ByaXYgPSAwOworCWludAljOworCWNoYXIJKmJ1ZjsKKworCWlmICghaW5pdCAoKSkKKwkJcmV0dXJuICgxKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ3IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAndyc6CisJCQl3cml0ZV9wcml2Kys7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlidWYgPSBtYWxsb2Moc3RybGVuKGFyZ3Zbb3B0aW5kXSkgKyAzMik7CisJCWlmICghYnVmKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGFsbG9jYXRlIGZpbGVuYW1lIGJ1ZmZlclxuIik7CisJCQlleGl0KDEpOworCQl9CisJCXN0cmNweShidWYsICJzZXRfZGV2aWNlICIpOworCQlzdHJjYXQoYnVmLCBhcmd2W29wdGluZF0pOworCQlzZXRfZGV2aWNlKGJ1Zik7CisJCWZyZWUoYnVmKTsKKwkJaWYgKHdyaXRlX3ByaXYpIHsKKwkJCXdwcmludHcgKGNvbW1hbmRfd2luLCJcbiIpOworCQkJZW5hYmxlX3dyaXRlKCJlbmFibGVfd3JpdGUiKTsKKwkJfQorCX0KKwlwYXJzZXIgKCk7CQkJLyogR2V0IGFuZCBwYXJzZSB1c2VyIGNvbW1hbmRzICovCisJcHJlcGFyZV90b19jbG9zZSgpOwkJLyogRG8gc29tZSBjbGVhbnVwICovCisJcHJpbnRmKCJRdWl0dGluZyAuLi5cbiIpOworCXJldHVybigwKTsKK30KKworCisvKgorICogUmVhZCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb21tYW5kIHdpbmRvdworICovCitpbnQgY29tbWFuZF9yZWFkX2tleSgpCit7CisJaW50CWtleSA9IDA7CisKKwl3aGlsZSAoIWtleSkgeworCQlpZiAocmVkcmF3X3JlcXVlc3QpIHsKKwkJCXJlZHJhd19hbGwoKTsKKwkJCXJlZHJhd19yZXF1ZXN0PTA7CisJCX0KKwkJa2V5ID0gd2dldGNoKGNvbW1hbmRfd2luKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAweDFBOgorCQkJa2V5ID0gMDsKKwkJCWtpbGwoZ2V0cGlkKCksIFNJR1RTVFApOworCQkJYnJlYWs7CisKKwkJY2FzZSBLRVlfTlBBR0U6CisJCQlwZ2RuKCIiKTsKKwkJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisJCQlicmVhazsKKworCQljYXNlIEtFWV9QUEFHRToKKwkJCXBndXAoIiIpOworCQkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwkJCWJyZWFrOworCQljYXNlIEVSUjoKKwkJCWtleSA9IDA7CisJCQlicmVhazsKKworCQljYXNlIEtFWV9CQUNLU1BBQ0U6CisJCQlrZXkgPSAnXGInOworCQl9CisJCWlmICgoa2V5IDwgMzIgJiYga2V5ICE9ICdcYicgJiYga2V5ICE9ICdcbicpIHx8CisJCSAgICAoa2V5ID4gMTI3KSkKKwkJCWtleSA9IDA7CisJfQorCXJldHVybiBrZXk7Cit9CisKKyNpZmRlZiBIQVZFX1JFQURMSU5FCitpbnQgcmxfZ2V0Y19yZXBsYWNlbWVudChGSUxFICpmKQoreworCWludAlrZXkgPSBjb21tYW5kX3JlYWRfa2V5KCk7CisKKwlpZiAoa2V5ID09ICdcYicpIHsKKwkJaWYgKHJsX3BvaW50ID4gMCkKKwkJCXdwcmludHcoY29tbWFuZF93aW4sICJcYiBcYiIpOworCX0gZWxzZQorCQl3cHJpbnR3KGNvbW1hbmRfd2luLCAiJWMiLCBrZXkpOworCXJldHVybiBrZXk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFza3MgdGhlIHVzZXIgZm9yIGEgY29tbWFuZCBhbmQgY2FsbHMgdGhlIGRpc3BhdGNoZXIKKyAqIGZ1bmN0aW9uLCBkaXNwYXRjaCwgdG8gYW5hbHl6ZSBpdC4gIFdlIHVzZSB0aGUgcmVhZGxpbmUgbGlicmFyeQorICogZnVuY3Rpb24gcmVhZGxpbmUgdG8gcmVhZCB0aGUgY29tbWFuZCwgaGVuY2UgYWxsIHRoZSB1c3VhbCByZWFkbGluZQorICoga2V5cyBhcmUgYXZhaWxhYmxlLiAgVGhlIG5ldyBjb21tYW5kIGlzIHNhdmVkIGJvdGggaW4gdGhlCisgKiByZWFkbGluZSdzIGhpc3RvcnkgYW5kIGluIG91ciB0aW55IG9uZS1jb21tYW5kIGNhY2hlLCBzbyB0aGF0IG9ubHkKKyAqIHRoZSBlbnRlciBrZXkgaXMgbmVlZGVkIHRvIHJldHlwZSBpdC4KKyAqLwordm9pZCBwYXJzZXIgKHZvaWQpCit7CisJY2hhciAqcHRyLGNvbW1hbmRfbGluZSBbODBdOworCWludCBxdWl0PTA7CisKKyNpZiAwCisJbm9lY2hvKCk7CisJY2JyZWFrKCk7CisJa2V5cGFkKGNvbW1hbmRfd2luLCAxKTsKKwl3dGltZW91dChjb21tYW5kX3dpbiwgMTAwKTsKKworCXJsX2dldGNfZnVuY3Rpb24gPSBybF9nZXRjX3JlcGxhY2VtZW50OworI2VuZGlmCisKKwl3aGlsZSAoIXF1aXQpIHsKKwkJLyogVGVybWluYWwgc2NyZWVuIHNpemUgaGFzIGNoYW5nZWQgKi8KKwkJaWYgKHJlZHJhd19yZXF1ZXN0KSB7CisJCQlyZWRyYXdfYWxsKCk7CisJCQlyZWRyYXdfcmVxdWVzdD0wOworCQl9CisKKwkJd21vdmUgKGNvbW1hbmRfd2luLDAsMCk7CisJCXdjbHJ0b2VvbCAoY29tbWFuZF93aW4pOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiZXh0MmVkID4gIik7CisJCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7CisKKwkJLyoKKwkJICogVGhlIG5jdXJzZXMgbGlicmFyeSBvcHRpbWl6ZXMgY3Vyc29yIG1vdmVtZW50IGJ5CisJCSAqIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGN1cnNvciBwb3NpdGlvbi4gSG93ZXZlciwgYnkKKwkJICogdXNpbmcgdGhlIHJlYWRsaW5lIGxpYnJhcnkgSSdtIGJyZWFraW5nIGl0cworCQkgKiBhc3N1bXB0aW9ucy4gVGhlIGRvdWJsZSAtMSBhcmd1bWVudHMgdGVsbCBuY3Vyc2VzCisJCSAqIHRvIGRpc2FibGUgY3Vyc29yIG1vdmVtZW50IG9wdGltaXphdGlvbiB0aGlzCisJCSAqIHRpbWUuCisJCSAqLworCQltdmN1ciAoLTEsLTEsTElORVMtQ09NTUFORF9XSU5fTElORVMsMCk7CisKKwkJLyogZWNobyAoKTsgKi8KKwkJcHRyPXJlYWRsaW5lICgiZXh0MmVkID4gIik7CisJCS8qIG5vZWNobyAoKTsgKi8KKworCQkvKgorCQkgKiBSZWFkbGluZSBhbGxvY2F0ZWQgdGhlIGJ1ZmZlciAtIENvcHkgdGhlIHN0cmluZworCQkgKiBhbmQgZnJlZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgorCQkgKiBYWFggV0hZPz8/CisJCSAqLworCQlzdHJjcHkgKGNvbW1hbmRfbGluZSxwdHIpOworCQlmcmVlIChwdHIpOworCisJCWlmICgqY29tbWFuZF9saW5lICE9IDApCisJCQlhZGRfaGlzdG9yeSAoY29tbWFuZF9saW5lKTsKKworCQkvKiBJZiBvbmx5IGVudGVyIHdhcyBwcmVzc2VkLCByZWNhbGwgdGhlIGxhc3QgY29tbWFuZCAqLworCQlpZiAoKmNvbW1hbmRfbGluZT09MCkKKwkJCXN0cmNweSAoY29tbWFuZF9saW5lLGxhc3RfY29tbWFuZF9saW5lKTsKKworCQkvKiBFbXVsYXRlIHJlYWRsaW5lJ3MgYWN0aW9ucyBmb3IgbmN1cnNlcyAqLworCQltdmN1ciAoLTEsLTEsTElORVMtQ09NTUFORF9XSU5fTElORVMsMCk7CisJCXdlcmFzZSAoY29tbWFuZF93aW4pOworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiZXh0MmVkID4gIik7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLGNvbW1hbmRfbGluZSk7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJcbiIpOworCQlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworCisJCS8qIFNhdmUgdGhpcyBjb21tYW5kIGluIG91ciB0aW55IGNhY2hlICovCisJCXN0cmNweSAobGFzdF9jb21tYW5kX2xpbmUsY29tbWFuZF9saW5lKTsKKworCQkvKiBBbmQgY2FsbCBkaXNwYXRjaCB0byBkbyB0aGUgYWN0dWFsIGpvYiAqLworCQlxdWl0PWRpc3BhdGNoIChjb21tYW5kX2xpbmUpOworCX0KK30KKyNlbHNlCit2b2lkIHJlYWRfbGluZShjaGFyICogZm9vKSB7CisJY2hhciAqIGNocHRyID0gZm9vOworCWludCBjaDsKKwlpbnQgZG9uZSA9IDA7CisKKwl3aGlsZSAoIWRvbmUgJiYgKGNoID0gY29tbWFuZF9yZWFkX2tleSgpKSkgeworCQlzd2l0Y2ggKGNoKSB7CisJCWNhc2UgJ1xuJzoKKwkJCWRvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAnXGInOgorCQkJaWYgKGNocHRyID4gZm9vKSB7CisJCQkJd3ByaW50dyhjb21tYW5kX3dpbiwgIlxiIFxiIik7CisJCQkJY2hwdHItLTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpZiAoY2ggPiAyNTYpCisJCQkJYnJlYWs7CisJCQlpZiAoY2ggPT0gJ1xuJykgYnJlYWs7CisJCQkqY2hwdHIrKyA9IGNoOworCQkJd3ByaW50dyhjb21tYW5kX3dpbiwgIiVjIiwgY2gpOworCQkJYnJlYWs7CisJCX0KKwl9CisJKmNocHRyID0gJ1wwJzsKK30KKwordm9pZCBwYXJzZXIgKHZvaWQpCit7CisJY2hhciBjb21tYW5kX2xpbmUgWzgwXTsKKwlpbnQgcXVpdD0wOworCisJbm9lY2hvKCk7CisJY2JyZWFrKCk7CisJd3RpbWVvdXQoY29tbWFuZF93aW4sIDEwMCk7CisJa2V5cGFkKGNvbW1hbmRfd2luLCAxKTsKKworCXdoaWxlICghcXVpdCkgeworCQkvKiBUZXJtaW5hbCBzY3JlZW4gc2l6ZSBoYXMgY2hhbmdlZCAqLworCQlpZiAocmVkcmF3X3JlcXVlc3QpIHsKKwkJCXJlZHJhd19hbGwoKTsKKwkJCXJlZHJhd19yZXF1ZXN0PTA7CisJCX0KKworCQl3bW92ZSAoY29tbWFuZF93aW4sMCwwKTt3Y2xydG9lb2wgKGNvbW1hbmRfd2luKTsKKworCQl3bW92ZShjb21tYW5kX3dpbiwgMCwgMCk7CisJCXdwcmludHcoY29tbWFuZF93aW4sICJleHQyZWQgPiAiKTsKKwkJcmVhZF9saW5lKGNvbW1hbmRfbGluZSk7CisKKwkJLyogSWYgb25seSBlbnRlciB3YXMgcHJlc3NlZCwgcmVjYWxsIHRoZSBsYXN0IGNvbW1hbmQgKi8KKyAJCWlmICgqY29tbWFuZF9saW5lPT0wKQorIAkJCXN0cmNweSAoY29tbWFuZF9saW5lLGxhc3RfY29tbWFuZF9saW5lKTsKKworCQltdmN1ciAoLTEsLTEsTElORVMtQ09NTUFORF9XSU5fTElORVMgKyAxLDApOworCisgCQlzdHJjcHkgKGxhc3RfY29tbWFuZF9saW5lLGNvbW1hbmRfbGluZSk7CS8qIFNhdmUgdGhpcyBjb21tYW5kIGluIG91ciB0aW55IGNhY2hlICovCisKKwkJLyogQW5kIGNhbGwgZGlzcGF0Y2ggdG8gZG8gdGhlIGFjdHVhbCBqb2IgKi8KKwkJcXVpdD1kaXNwYXRjaCAoY29tbWFuZF9saW5lKTsKKwl9Cit9CisjZW5kaWYKKworCisvKgorICogVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IGZ1bmN0aW9uLiBJdHMgdGFzayBpcyB0byByZWNpZXZlIGEgY29tbWFuZAorICogbmFtZSBhbmQgbGluayBpdCB0byBhIEMgZnVuY3Rpb24uICBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgY29tbWFuZHM6CisgKgorICogMS4JR2VuZXJhbCBjb21tYW5kcyAtIEFsd2F5cyBhdmFpbGFibGUgYW5kIGFjY2Vzc2VkIHRocm91Z2gKKyAqIGdlbmVyYWxfY29tbWFuZHMuCisgKiAyLglFeHQyIHNwZWNpZmljIGNvbW1hbmRzIC0gQXZhaWxhYmxlIHdoZW4gZWRpdGluZyBhbiBleHQyCisgKiBmaWxlc3lzdGVtLCBhY2Nlc3NlZCB0aHJvdWdoIGV4dDJfY29tbWFuZHMuCisgKiAzLglUeXBlIHNwZWNpZmljIGNvbW1hbmRzIC0gVGhvc2UgYXJlIGNoYW5naW5nIGFjY29yZGluZyB0byB0aGUKKyAqIGN1cnJlbnQgdHlwZS4gVGhlIGdsb2JhbCB2YXJpYWJsZSBjdXJyZW50X3R5cGUgcG9pbnRzIHRvIHRoZQorICogY3VycmVudCBvYmplY3QgZGVmaW5pdGlvbiAob2YgdHlwZSBzdHJ1Y3RfZGVzY3JpcHRvcikuIEluIGl0LCB0aGUKKyAqIHN0cnVjdF9jb21tYW5kcyBlbnRyeSBjb250YWlucyB0aGUgdHlwZSBzcGVjaWZpYyBjb21tYW5kcyBsaW5rcy4KKyAqCisgKiBPdmVycmlkaW5nIGlzIGFuIGltcG9ydGFudCBmZWF0dXJlIC0gTXVjaCBsaWtlIGluIEMrKyA6IFRoZSBzYW1lCisgKiBjb21tYW5kIG5hbWUgY2FuIGRpc3BhdGNoIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMuIFRoZSBvdmVycmlkaW5nCisgKiBwcmlvcml0eSBpcyAzLDIsMTsgVGhhdCBpcyAtIEEgdHlwZSBzcGVjaWZpYyBjb21tYW5kIHdpbGwgYWx3YXlzCisgKiBvdmVycmlkZSBhIGdlbmVyYWwgY29tbWFuZC4gVGhpcyBpcyB1c2VkIHRocm91Z2ggdGhlIHByb2dyYW0gdG8KKyAqIGFsbG93IGZpbmUgdHVuZWQgb3BlcmF0aW9uLgorICoKKyAqIFdoZW4gYW4gaGFuZGxpbmcgZnVuY3Rpb24gaXMgZm91bmQsIGl0IGlzIGNhbGxlZCBhbG9uZyB3aXRoIHRoZQorICogY29tbWFuZCBsaW5lIHRoYXQgd2FzIHBhc3NlZCB0byB1cy4gVGhlIGhhbmRsaW5nIGZ1bmN0aW9uIGlzIHRoZW4KKyAqIGZyZWUgdG8gaW50ZXJwZXJ0IHRoZSBhcmd1bWVudHMgaW4gaXRzIG93biBzdHlsZS4KKyAqLworaW50IGRpc3BhdGNoIChjaGFyICpjb21tYW5kX2xpbmUpCit7CisJaW50IGksZm91bmQ9MDsKKworCWNoYXIgY29tbWFuZCBbODBdOworCisJcGFyc2Vfd29yZCAoY29tbWFuZF9saW5lLGNvbW1hbmQpOworCisJaWYgKHN0cmNhc2VjbXAgKGNvbW1hbmQsInF1aXQiKT09MCkgcmV0dXJuICgxKTsKKworCS8qIDEuIFNlYXJjaCBmb3IgdHlwZSBzcGVjaWZpYyBjb21tYW5kcyBGSVJTVCAtIEFsbG93cworCW92ZXJyaWRpbmcgb2YgYSBnZW5lcmFsIGNvbW1hbmQgKi8KKworCWlmIChjdXJyZW50X3R5cGUgIT0gTlVMTCkKKwkJZm9yIChpPTA7CisJCSAgICAgaTw9Y3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLmxhc3RfY29tbWFuZCAmJiAhZm91bmQ7CisJCSAgICAgaSsrKSB7CisJCQlpZiAoc3RyY2FzZWNtcCAoY29tbWFuZCxjdXJyZW50X3R5cGUtPnR5cGVfY29tbWFuZHMubmFtZXMgW2ldKT09MCkgeworCQkJCSgqY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLmNhbGxiYWNrIFtpXSkgKGNvbW1hbmRfbGluZSk7CisJCQkJZm91bmQ9MTsKKwkJCX0KKwkJfQorCisJLyogMi4gTm93IHNlYXJjaCBmb3IgZXh0MiBmaWxlc3lzdGVtIGdlbmVyYWwgY29tbWFuZHMgKi8KKworCWlmICghZm91bmQpCisJCWZvciAoaT0wO2k8PWV4dDJfY29tbWFuZHMubGFzdF9jb21tYW5kICYmICFmb3VuZDtpKyspIHsKKwkJCWlmIChzdHJjYXNlY21wIChjb21tYW5kLGV4dDJfY29tbWFuZHMubmFtZXMgW2ldKT09MCkgeworCQkJCSgqZXh0Ml9jb21tYW5kcy5jYWxsYmFjayBbaV0pIChjb21tYW5kX2xpbmUpOworCQkJCWZvdW5kPTE7CisJCQl9CisJCX0KKworCisJLyogMy4gSWYgbm90IGZvdW5kLCBzZWFyY2ggdGhlIGdlbmVyYWwgY29tbWFuZHMgKi8KKworCWlmICghZm91bmQpCisJCWZvciAoaT0wO2k8PWdlbmVyYWxfY29tbWFuZHMubGFzdF9jb21tYW5kICYmICFmb3VuZDtpKyspIHsKKwkJCWlmIChzdHJjYXNlY21wIChjb21tYW5kLGdlbmVyYWxfY29tbWFuZHMubmFtZXMgW2ldKT09MCkgeworCQkJCSgqZ2VuZXJhbF9jb21tYW5kcy5jYWxsYmFjayBbaV0pIChjb21tYW5kX2xpbmUpOworCQkJCWZvdW5kPTE7CisJCQl9CisJCX0KKworCS8qIDQuIElmIG5vdCBmb3VuZCwgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuICovCisKKwlpZiAoIWZvdW5kKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvcjogVW5rbm93biBjb21tYW5kXG4iKTsKKwkJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCisKKy8qCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIG5leHQgd29yZCBpbiBzb3VyY2UgdG8gdGhlIHZhcmlhYmxlIGRlc3QsCisgKiBpZ25vcmluZyB3aGl0ZXNwYWNlcy4gIEl0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IHdvcmQgaW4KKyAqIHNvdXJjZS4gIEl0IGlzIHVzZWQgdG8gc3BsaXQgdGhlIGNvbW1hbmQgbGluZSBpbnRvIGNvbW1hbmQgYW5kIGFyZ3VtZW50cy4KKyAqLworY2hhciAqcGFyc2Vfd29yZCAoY2hhciAqc291cmNlLGNoYXIgKmRlc3QpCit7CisJY2hhciBjaCwqc291cmNlX3B0ciwqdGFyZ2V0X3B0cjsKKworCWlmICgqc291cmNlPT0wKSB7CisJCSpkZXN0PTA7CisJCXJldHVybiAoc291cmNlKTsKKwl9OworCisJc291cmNlX3B0cj1zb3VyY2U7dGFyZ2V0X3B0cj1kZXN0OworCWRvIHsKKwkJY2g9KnNvdXJjZV9wdHIrKzsKKwl9IHdoaWxlICghIChjaD4nICcgJiYgY2g8PSd6JykgJiYgY2ghPTApOworCisJd2hpbGUgKGNoPicgJyAmJiBjaDw9J3onKSB7CisJCSp0YXJnZXRfcHRyKys9Y2g7CisJCWNoPSpzb3VyY2VfcHRyKys7CisJfQorCisJKnRhcmdldF9wdHI9MDsKKworCXNvdXJjZV9wdHItLTsKKwlkbyB7CisJCWNoPSpzb3VyY2VfcHRyKys7CisJfSB3aGlsZSAoISAoY2g+JyAnICYmIGNoPD0neicpICYmIGNoIT0wKTsKKworCXJldHVybiAoLS1zb3VyY2VfcHRyKTsKK30KKworLyoKKyAqIHRleHQgaXMgdGhlIHBhcnRpYWwgY29tbWFuZCBlbnRlcmVkIGJ5IHRoZSB1c2VyOyBXZSBhc3N1bWUgdGhhdCBpdAorICogaXMgYSBwYXJ0IG9mIGEgY29tbWFuZCAtIEkgZGlkbid0IHdyaXRlIGNvZGUgZm9yIHNtYXJ0ZXIgY29tcGxldGlvbi4KKyAqCisgKiBUaGUgc3RhdGUgdmFyaWFibGUgaXMgYW4gaW5kZXggd2hpY2ggdGVsbHMgdXMgaG93IG1hbnkgcG9zc2libGUKKyAqIGNvbXBsZXRpb25zIHdlIGFscmVhZHkgcmV0dXJuZWQgdG8gcmVhZGxpbmUuCisgKgorICogV2UgcmV0dXJuIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gb3IgKGNoYXIgKikgTlVMTCBpZiB0aGVyZQorICogYXJlIG5vIG1vcmUgY29tcGxldGlvbnMuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgcmVhZGxpbmUKKyAqIG92ZXIgYW5kIG92ZXIgdW50aWwgd2UgdGVsbCBpdCB0byBzdG9wLgorICoKKyAqIFdoaWxlIHNjYW5uaW5nIGZvciBwb3NzaWJsZSBjb21wbGV0aW9ucywgd2UgdXNlIHRoZSBzYW1lIHByaW9yaXR5CisgKiBkZWZpbml0aW9uIHdoaWNoIHdhcyB1c2VkIGluIGRpc3BhdGNoLgorICovCisjaWYgSEFWRV9SRUFETElORQorY2hhciAqY29tcGxldGVfY29tbWFuZCAoY2hhciAqdGV4dCxpbnQgc3RhdGUpCit7CisJaW50IHN0YXRlX2luZGV4PS0xOworCWludCBpLGxlbjsKKworCWxlbj1zdHJsZW4gKHRleHQpOworCisJLyogSXMgdGhlIGNvbW1hbmQgdHlwZSBzcGVjaWZpYyA/ICovCisKKwlpZiAoY3VycmVudF90eXBlICE9IE5VTEwpCisJCWZvciAoaT0wO2k8PWN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCQlpZiAoc3RybmNtcCAoY3VycmVudF90eXBlLT50eXBlX2NvbW1hbmRzLm5hbWVzIFtpXSx0ZXh0LGxlbik9PTApIHsKKwkJCQlzdGF0ZV9pbmRleCsrOworCQkJCWlmIChzdGF0ZT09c3RhdGVfaW5kZXgpIHsKKwkJCQkJcmV0dXJuIChkdXBzdHIgKGN1cnJlbnRfdHlwZS0+dHlwZV9jb21tYW5kcy5uYW1lcyBbaV0pKTsKKwkJCQl9CisJCQl9CisJCX0KKworCS8qIE5vLCBwZWhhcHMgZXh0MiBzcGVjaWZpYyBjb21tYW5kIHRoZW4gPyAqLworCisJZm9yIChpPTA7aTw9ZXh0Ml9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCWlmIChzdHJuY21wIChleHQyX2NvbW1hbmRzLm5hbWVzIFtpXSx0ZXh0LGxlbik9PTApIHsKKwkJCXN0YXRlX2luZGV4Kys7CisJCQlpZiAoc3RhdGU9PXN0YXRlX2luZGV4KQorCQkJcmV0dXJuIChkdXBzdHIgKGV4dDJfY29tbWFuZHMubmFtZXMgW2ldKSk7CisJCX0KKwl9CisKKworCS8qIENoZWNrIGZvciBhIGdlbmVyYWwgY29tbWFuZCAqLworCisJZm9yIChpPTA7aTw9Z2VuZXJhbF9jb21tYW5kcy5sYXN0X2NvbW1hbmQ7aSsrKSB7CisJCWlmIChzdHJuY21wIChnZW5lcmFsX2NvbW1hbmRzLm5hbWVzIFtpXSx0ZXh0LGxlbik9PTApIHsKKwkJCQlzdGF0ZV9pbmRleCsrOworCQkJCWlmIChzdGF0ZT09c3RhdGVfaW5kZXgpCisJCQkJCXJldHVybiAoZHVwc3RyIChnZW5lcmFsX2NvbW1hbmRzLm5hbWVzIFtpXSkpOworCQl9CisJfQorCisJLyogcXVpdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5ICovCisKKwlpZiAoc3RybmNtcCAoInF1aXQiLHRleHQsbGVuKT09MCkgeworCQlzdGF0ZV9pbmRleCsrOworCQlpZiAoc3RhdGU9PXN0YXRlX2luZGV4KQorCQkJcmV0dXJuIChkdXBzdHIgKCJxdWl0IikpOworCX0KKworCS8qIE5vIG1vcmUgY29tcGxldGlvbnMgKi8KKworCXJldHVybiAoKGNoYXIgKikgTlVMTCk7Cit9CisjZW5kaWYKKworCisvKgorICogTm90aGluZyBzcGVjaWFsIC0gSnVzdCBhbGxvY2F0ZXMgZW5vdWdoIHNwYWNlIGFuZCBjb3B5IHRoZSBzdHJpbmcuCisgKi8KK2NoYXIgKmR1cHN0ciAoY2hhciAqc3JjKQoreworCWNoYXIgKnB0cjsKKworCXB0cj0oY2hhciAqKSBtYWxsb2MgKHN0cmxlbiAoc3JjKSsxKTsKKwlzdHJjcHkgKHB0cixzcmMpOworCXJldHVybiAocHRyKTsKK30KKworI2lmZGVmIERFQlVHCisvKgorICogVGhpcyBmdW5jdGlvbiByZXBvcnRzIGFuIGludGVybmFsIGVycm9yLiBJdCBpcyBhbG1vc3Qgbm90IHVzZWQuIE9uZQorICogcGxhY2UgaW4gd2hpY2ggSSBkbyBjaGVjayBmb3IgaW50ZXJuYWwgZXJyb3JzIGlzIGRpc2suYy4KKyAqCisgKiBXZSBqdXN0IHJlcG9ydCB0aGUgZXJyb3IsIGFuZCB0cnkgdG8gY29udGludWUgLi4uCisgKi8KK3ZvaWQgaW50ZXJuYWxfZXJyb3IgKGNoYXIgKmRlc2NyaXB0aW9uLGNoYXIgKnNvdXJjZV9uYW1lLGNoYXIgKmZ1bmN0aW9uX25hbWUpCit7CisJd3ByaW50dyAoY29tbWFuZF93aW4sIkludGVybmFsIGVycm9yIC0gRm91bmQgYnkgc291cmNlOiAlcy5jICwgZnVuY3Rpb246ICVzXG4iLHNvdXJjZV9uYW1lLGZ1bmN0aW9uX25hbWUpOworCXdwcmludHcgKGNvbW1hbmRfd2luLCJcdCVzXG4iLGRlc2NyaXB0aW9uKTsKKwl3cHJpbnR3IChjb21tYW5kX3dpbiwiUHJlc3MgZW50ZXIgdG8gKGhvcGVmdWxseSkgY29udGludWVcbiIpOworCXJlZnJlc2hfY29tbWFuZF93aW4gKCk7Z2V0Y2ggKCk7d2VyYXNlIChjb21tYW5kX3dpbik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2V4dDJlZC9zdXBlcl9jb20uYyBiL2UyZnNwcm9ncy9leHQyZWQvc3VwZXJfY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NTNhYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9leHQyZWQvc3VwZXJfY29tLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisKKy91c3Ivc3JjL2V4dDJlZC9zdXBlcl9jb20uYworCitBIHBhcnQgb2YgdGhlIGV4dGVuZGVkIGZpbGUgc3lzdGVtIDIgZGlzayBlZGl0b3IuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hhbmRsZXMgdGhlIHN1cGVyYmxvY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3Qgd3JpdHRlbiBvbjogQXByaWwgOSAxOTk1CisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorCit2b2lkIHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX3Nob3cgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcjsKKwlzdXBlcj0mdHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrOworCisJc2hvdyAoY29tbWFuZF9saW5lKTsKKworCWlmIChleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAhPSAwKSB7CisJCXdtb3ZlIChzaG93X3BhZCwyLDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJTIuMmYlJSIsMTAwKihmbG9hdCkgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHN1cGVyKS8gKGZsb2F0KSBleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSk7CisJCXdtb3ZlIChzaG93X3BhZCwzLDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJTIuMmYlJSIsMTAwKihmbG9hdCkgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KHN1cGVyKS8gKGZsb2F0KSBleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSk7CisJfQorCisJaWYgKHN1cGVyLT5zX2lub2Rlc19jb3VudCAhPSAwKSB7CisJCXdtb3ZlIChzaG93X3BhZCw0LDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJTIuMmYlJSIsMTAwKihmbG9hdCkgc3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQvIChmbG9hdCkgc3VwZXItPnNfaW5vZGVzX2NvdW50KTsKKwl9CisKKwl3bW92ZSAoc2hvd19wYWQsNiw0MCk7CisJc3dpdGNoIChzdXBlci0+c19sb2dfYmxvY2tfc2l6ZSkgeworCQljYXNlIDA6CXdwcmludHcgKHNob3dfcGFkLCIxMDI0IGJ5dGVzIik7YnJlYWs7CisJCWNhc2UgMTogd3ByaW50dyAoc2hvd19wYWQsIjIwNDggYnl0ZXMiKTticmVhazsKKwkJY2FzZSAyOiB3cHJpbnR3IChzaG93X3BhZCwiNDA5NiBieXRlcyIpO2JyZWFrOworCX0KKwl3bW92ZSAoc2hvd19wYWQsMTEsNDApO3dwcmludHcgKHNob3dfcGFkLCIlcyIsY3RpbWUgKCh0aW1lX3QgKikgJnR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX210aW1lKSk7CisJd21vdmUgKHNob3dfcGFkLDEyLDQwKTt3cHJpbnR3IChzaG93X3BhZCwiJXMiLGN0aW1lICgodGltZV90ICopICZ0eXBlX2RhdGEudS50X2V4dDJfc3VwZXJfYmxvY2suc193dGltZSkpOworCXdtb3ZlIChzaG93X3BhZCwxOSw0MCk7d3ByaW50dyAoc2hvd19wYWQsIiVzIixjdGltZSAoKHRpbWVfdCAqKSAmdHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfbGFzdGNoZWNrKSk7CisJd21vdmUgKHNob3dfcGFkLDE1LDQwKTsKKworCXN3aXRjaCAodHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfbWFnaWMpIHsKKwkJY2FzZSBFWFQyX1NVUEVSX01BR0lDOgorCQkJd3ByaW50dyAoc2hvd19wYWQsImV4dDIgPj0gMC4yQiIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUMl9QUkVfMDJCX01BR0lDOgorCQkJd3ByaW50dyAoc2hvd19wYWQsImV4dDIgPCAwLjJCIChub3Qgc3VwcG9ydGVkKSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3cHJpbnR3IChzaG93X3BhZCwiVW5rbm93biIpOworCQkJYnJlYWs7CisJfQorCisJd21vdmUgKHNob3dfcGFkLDE2LDQwKTsKKwlpZiAodHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfc3RhdGUgJiAweDEpCisJCXdwcmludHcgKHNob3dfcGFkLCJjbGVhbiAiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCJub3QgY2xlYW4gIik7CisKKwlpZiAodHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfc3RhdGUgJiAweDIpCisJCXdwcmludHcgKHNob3dfcGFkLCJ3aXRoIGVycm9ycyAiKTsKKwllbHNlCisJCXdwcmludHcgKHNob3dfcGFkLCJ3aXRoIG5vIGVycm9ycyIpOworCisJd21vdmUgKHNob3dfcGFkLDE3LDQwKTsKKworCXN3aXRjaCAodHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrLnNfZXJyb3JzKSB7CisJCWNhc2UgRVhUMl9FUlJPUlNfQ09OVElOVUU6CisJCQl3cHJpbnR3IChzaG93X3BhZCwiQ29udGludWUiKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVDJfRVJST1JTX1JPOgorCQkJd3ByaW50dyAoc2hvd19wYWQsIlJlbW91bnQgcmVhZCBvbmx5Iik7CisJCQlicmVhazsKKwkJY2FzZSBFWFQyX0VSUk9SU19QQU5JQzoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJJc3N1ZSBrZXJuZWwgcGFuaWMiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd3ByaW50dyAoc2hvd19wYWQsIlVua25vd24iKTsKKwkJCWJyZWFrOworCX0KKworCXdtb3ZlIChzaG93X3BhZCwyMSw0MCk7CisKKwlzd2l0Y2ggKHR5cGVfZGF0YS51LnRfZXh0Ml9zdXBlcl9ibG9jay5zX2NyZWF0b3Jfb3MpIHsKKworCQljYXNlIEVYVDJfT1NfTElOVVg6CisJCQl3cHJpbnR3IChzaG93X3BhZCwiTGludXggOi0pIik7CisJCQlicmVhazsKKworCQljYXNlIEVYVDJfT1NfSFVSRDoKKwkJCXdwcmludHcgKHNob3dfcGFkLCJIdXJkIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJd3ByaW50dyAoc2hvd19wYWQsIlVua25vd24iKTsKKwkJCWJyZWFrOworCX0KKworCXJlZnJlc2hfc2hvd19wYWQgKCk7CisKKwl3bW92ZSAoc2hvd193aW4sMSwwKTt3cHJpbnR3IChzaG93X3dpbiwiXG4iKTt3bW92ZSAoc2hvd193aW4sMiwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiU3VwZXJibG9jayBjb3B5ICVsZCAiLHN1cGVyX2luZm8uY29weV9udW0pOworCWlmIChzdXBlcl9pbmZvLmNvcHlfbnVtPT0wKQorCQl3cHJpbnR3IChzaG93X3dpbiwiKG1haW4gY29weSkiKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiXG4iKTsKKwlyZWZyZXNoX3Nob3dfd2luICgpOworfQorCit2b2lkIHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX2dvY29weSAoY2hhciAqY29tbWFuZF9saW5lKQorCit7CisJdW5zaWduZWQgbG9uZyBjb3B5X251bSxvZmZzZXQ7CisJY2hhciAqcHRyLGJ1ZmZlciBbODBdOworCisJcHRyPXBhcnNlX3dvcmQgKGNvbW1hbmRfbGluZSxidWZmZXIpOworCWlmICgqcHRyPT0wKSB7CisJCXdwcmludHcgKGNvbW1hbmRfd2luLCJFcnJvciAtIE5vIGFyZ3VtZW50IHNwZWNpZmllZFxuIik7cmVmcmVzaF9jb21tYW5kX3dpbiAoKTtyZXR1cm47CisJfQorCXB0cj1wYXJzZV93b3JkIChwdHIsYnVmZmVyKTsKKworCWNvcHlfbnVtPWF0b2wgKGJ1ZmZlcik7CisKKwlvZmZzZXQ9ZmlsZV9zeXN0ZW1faW5mby5zdXBlcl9ibG9ja19vZmZzZXQrY29weV9udW0qZmlsZV9zeXN0ZW1faW5mby5ub19ibG9ja3NfaW5fZ3JvdXAqZmlsZV9zeXN0ZW1faW5mby5ibG9ja19zaXplOworCisJaWYgKG9mZnNldCA+IGZpbGVfc3lzdGVtX2luZm8uZmlsZV9zeXN0ZW1fc2l6ZSkgeworCQl3cHJpbnR3IChjb21tYW5kX3dpbiwiRXJyb3IgLSBDb3B5IG51bWJlciBvdXQgb2YgYm91bmRzXG4iKTtyZWZyZXNoX2NvbW1hbmRfd2luICgpO3JldHVybjsKKwl9CisKKwlzdXBlcl9pbmZvLmNvcHlfbnVtPWNvcHlfbnVtOworCWRldmljZV9vZmZzZXQ9b2Zmc2V0OworCisJc3ByaW50ZiAoYnVmZmVyLCJzZXRvZmZzZXQgJWxkIixkZXZpY2Vfb2Zmc2V0KTtkaXNwYXRjaCAoYnVmZmVyKTsKKwlzdHJjcHkgKGJ1ZmZlciwic2hvdyIpO2Rpc3BhdGNoIChidWZmZXIpOworfQorCit2b2lkIHR5cGVfZXh0Ml9zdXBlcl9ibG9ja19fX3NldGFjdGl2ZWNvcHkgKGNoYXIgKmNvbW1hbmRfbGluZSkKKworeworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworCisJc2I9dHlwZV9kYXRhLnUudF9leHQyX3N1cGVyX2Jsb2NrOworCWRpc3BhdGNoICgiZ29jb3B5IDAiKTsKKwl0eXBlX2RhdGEudS50X2V4dDJfc3VwZXJfYmxvY2s9c2I7CisJZGlzcGF0Y2ggKCJzaG93Iik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvZXh0MmVkL3dpbi5jIGIvZTJmc3Byb2dzL2V4dDJlZC93aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNhMjhmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2V4dDJlZC93aW4uYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKworL3Vzci9zcmMvZXh0MmVkL3dpbi5jCisKK0EgcGFydCBvZiB0aGUgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gMiBkaXNrIGVkaXRvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpbmRvdyBtYW5hZ2VtZW50IC0gSW50ZXJmYWNpbmcgd2l0aCB0aGUgbmN1cnNlcyBsaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCB3cml0dGVuIG9uOiBBcHJpbCAxNyAxOTk1CitNb2RpZmllZCBvbiA6IEFwcmlsIDA1IDIwMDEgQ2hyaXN0aWFuLkJhY0BpbnQtZXZyeS5mcgoraXQgbG9va3MgbGlrZSByZWFkbGluZSBkb2VzIG5vdCBsaWtlIHRoYXQgaW5pdHNjciBkZWNpZGVzIHRvIHNldCB0aGUgdHR5IHRvCitub2VjaG8uCisKK0NvcHlyaWdodCAoQykgMTk5NSBHYWRpIE94bWFuCisKKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgImV4dDJlZC5oIgorI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKworc3RydWN0IHN0cnVjdF9wYWRfaW5mbyBzaG93X3BhZF9pbmZvOworV0lORE9XICp0aXRsZV93aW4sKnNob3dfd2luLCpjb21tYW5kX3dpbiwqbXRfd2luMSwqbXRfd2luMiwqc2hvd19wYWQ7CisKKy8qIHRvIHJlbWVtYmVyIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgaW5pdHNjcgorICogYW5kIG1vZGlmeSBpdAorICovCitzdHJ1Y3QgdGVybWlvcyB0ZXJtaW9Jbml0LCB0ZXJtaW9DdXJyZW50OworCit2b2lkIGRyYXdfdGl0bGVfd2luICh2b2lkKQoreworCWNoYXIgdGl0bGVfc3RyaW5nIFsxMjhdOworCisJd2VyYXNlKHRpdGxlX3dpbik7CisJYm94ICh0aXRsZV93aW4sMCwwKTsKKwlzcHJpbnRmICh0aXRsZV9zdHJpbmcsIkVYVDJFRCAtIEV4dGVuZGVkLTIgRmlsZSBTeXN0ZW0gZWRpdG9yIHZlciAlcyAoJXMpIiwgRTJGU1BST0dTX1ZFUlNJT04sIEUyRlNQUk9HU19EQVRFKTsKKwl3bW92ZSAodGl0bGVfd2luLFRJVExFX1dJTl9MSU5FUy8yLChDT0xTLXN0cmxlbiAodGl0bGVfc3RyaW5nKSkvMik7CisJd3ByaW50dyAodGl0bGVfd2luLHRpdGxlX3N0cmluZyk7CisJd3JlZnJlc2godGl0bGVfd2luKTsKK30KKwordm9pZCBzZXR1cF9zaG93X3dpbih2b2lkKQoreworCXdia2dkc2V0IChzaG93X3dpbixBX1JFVkVSU0UpO3dlcmFzZSAoc2hvd193aW4pOworCXNob3dfcGFkX2luZm8ubGluZT0wOworCXNob3dfcGFkX2luZm8uY29sPTA7CisJc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzPUxJTkVTLVRJVExFX1dJTl9MSU5FUy1TSE9XX1dJTl9MSU5FUy1DT01NQU5EX1dJTl9MSU5FUy0yOworCXNob3dfcGFkX2luZm8uZGlzcGxheV9jb2xzPUNPTFM7CisJc2hvd19wYWRfaW5mby5tYXhfbGluZT1zaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMtMTtzaG93X3BhZF9pbmZvLm1heF9jb2w9c2hvd19wYWRfaW5mby5kaXNwbGF5X2NvbHMtMTsKKwlzaG93X3BhZF9pbmZvLmRpc2FibGVfb3V0cHV0PTA7Cit9CisKK3ZvaWQgaW5pdF93aW5kb3dzICh2b2lkKQoreworCWluaXRzY3IgKCk7CisJdGNnZXRhdHRyKDAsJnRlcm1pb0luaXQpOyAvKiBzYXZlIGluaXRpYWwgY29uZmlnICovCisJdGVybWlvQ3VycmVudCA9IHRlcm1pb0luaXQ7CisJdGVybWlvQ3VycmVudC5jX2xmbGFnIHw9IEVDSE87IC8qIHNldCBlY2hvIG9uICovCisJdGNzZXRhdHRyKDAsVENTQU5PVywmdGVybWlvQ3VycmVudCk7CisKKwlpZiAoTElORVM8VElUTEVfV0lOX0xJTkVTK1NIT1dfV0lOX0xJTkVTK0NPTU1BTkRfV0lOX0xJTkVTKzMpIHsKKwkJcHJpbnRmICgiU29ycnksIHlvdXIgdGVybWluYWwgc2NyZWVuIGlzIHRvbyBzbWFsbFxuIik7CisJCXByaW50ZiAoIkVycm9yIC0gQ2FuIG5vdCBpbml0aWFsaXplIHdpbmRvd3NcbiIpOworCQlleGl0ICgxKTsKKwl9CisKKwl0aXRsZV93aW49bmV3d2luIChUSVRMRV9XSU5fTElORVMsQ09MUywwLDApOworCXNob3dfd2luPW5ld3dpbiAoU0hPV19XSU5fTElORVMsQ09MUyxUSVRMRV9XSU5fTElORVMsMCk7CisJc2hvd19wYWQ9bmV3cGFkIChTSE9XX1BBRF9MSU5FUyxTSE9XX1BBRF9DT0xTKTsKKwltdF93aW4xPW5ld3dpbiAoMSxDT0xTLFRJVExFX1dJTl9MSU5FUytTSE9XX1dJTl9MSU5FUywwKTsKKwltdF93aW4yPW5ld3dpbiAoMSxDT0xTLExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLTEsMCk7CisJY29tbWFuZF93aW49bmV3d2luIChDT01NQU5EX1dJTl9MSU5FUyxDT0xTLExJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLDApOworCisJaWYgKHRpdGxlX3dpbj09TlVMTCB8fCBzaG93X3dpbj09TlVMTCB8fCBzaG93X3BhZD09TlVMTCB8fCBjb21tYW5kX3dpbj09TlVMTCkgeworCQlwcmludGYgKCJFcnJvciAtIE5vdCBlbm91Z2ggbWVtb3J5IC0gQ2FuIG5vdCBpbml0aWFsaXplIHdpbmRvd3NcbiIpO2V4aXQgKDEpOworCX0KKworCWRyYXdfdGl0bGVfd2luKCk7CisKKwlzZXR1cF9zaG93X3dpbigpOworCisJc2Nyb2xsb2sgKGNvbW1hbmRfd2luLFRSVUUpOworCisJcmVmcmVzaF90aXRsZV93aW4gKCk7CisJcmVmcmVzaF9zaG93X3dpbiAoKTsKKwlyZWZyZXNoX3Nob3dfcGFkKCk7CisJcmVmcmVzaF9jb21tYW5kX3dpbiAoKTsKKwl3cmVmcmVzaChtdF93aW4xKTsKKwl3cmVmcmVzaChtdF93aW4yKTsKK30KKwordm9pZCByZWZyZXNoX3RpdGxlX3dpbiAodm9pZCkKK3sKKwl3cmVmcmVzaCAodGl0bGVfd2luKTsKK30KKwordm9pZCByZWZyZXNoX3Nob3dfd2luICh2b2lkKQoreworCWludCBjdXJyZW50X3BhZ2UsdG90YWxfcGFnZXM7CisKKwljdXJyZW50X3BhZ2U9c2hvd19wYWRfaW5mby5saW5lL3Nob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcysxOworCWlmIChzaG93X3BhZF9pbmZvLmxpbmUlc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzKQorCQljdXJyZW50X3BhZ2UrKzsKKwl0b3RhbF9wYWdlcz1zaG93X3BhZF9pbmZvLm1heF9saW5lL3Nob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcysxOworCisJd21vdmUgKHNob3dfd2luLDIsQ09MUy0xOCk7CisJd3ByaW50dyAoc2hvd193aW4sIlBhZ2UgJWQgb2YgJWRcbiIsY3VycmVudF9wYWdlLHRvdGFsX3BhZ2VzKTsKKworCXdtb3ZlIChzaG93X3dpbiwyLENPTFMtMTgpOworCXdyZWZyZXNoIChzaG93X3dpbik7Cit9CisKKwordm9pZCByZWZyZXNoX3Nob3dfcGFkICh2b2lkKQorCit7CisJaW50IGxlZnQsdG9wLHJpZ2h0LGJvdHRvbSxpOworCisJaWYgKHNob3dfcGFkX2luZm8uZGlzYWJsZV9vdXRwdXQpCisJCXJldHVybjsKKworCWlmIChzaG93X3BhZF9pbmZvLm1heF9saW5lIDwgc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzLTEpIHsKKwkJZm9yIChpPXNob3dfcGFkX2luZm8ubWF4X2xpbmUrMTtpPHNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcztpKyspIHsKKwkJCXdtb3ZlIChzaG93X3BhZCxpLDApO3dwcmludHcgKHNob3dfcGFkLCJcbiIpOworCQl9CisJfQorCWxlZnQ9MDtyaWdodD1zaG93X3BhZF9pbmZvLmRpc3BsYXlfY29scy0xOworCXRvcD1USVRMRV9XSU5fTElORVMrU0hPV19XSU5fTElORVMrMTtib3R0b209dG9wK3Nob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy0xOworCisJaWYgKHNob3dfcGFkX2luZm8ubGluZSA+IHNob3dfcGFkX2luZm8ubWF4X2xpbmUtc2hvd19wYWRfaW5mby5kaXNwbGF5X2xpbmVzKzEpCisJCXNob3dfcGFkX2luZm8ubGluZT1zaG93X3BhZF9pbmZvLm1heF9saW5lLXNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcysxOworCisJaWYgKHNob3dfcGFkX2luZm8ubGluZSA8IDApCisJCXNob3dfcGFkX2luZm8ubGluZT0wOworCisjaWZkZWYgT0xEX05DVVJTRVMKKwlwcmVmcmVzaCAoc2hvd19wYWQsc2hvd19wYWRfaW5mby5saW5lLHNob3dfcGFkX2luZm8uY29sLHRvcCxsZWZ0LHNob3dfcGFkX2luZm8uZGlzcGxheV9saW5lcy0xLHNob3dfcGFkX2luZm8uZGlzcGxheV9jb2xzLTEpOworI2Vsc2UKKwlwcmVmcmVzaCAoc2hvd19wYWQsc2hvd19wYWRfaW5mby5saW5lLHNob3dfcGFkX2luZm8uY29sLHRvcCxsZWZ0LHRvcCtzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXMtMSxsZWZ0K3Nob3dfcGFkX2luZm8uZGlzcGxheV9jb2xzLTEpOworI2VuZGlmCit9CisKK3ZvaWQgcmVmcmVzaF9jb21tYW5kX3dpbiAodm9pZCkKK3sKKwl3cmVmcmVzaCAoY29tbWFuZF93aW4pOworfQorCit2b2lkIGNsb3NlX3dpbmRvd3MgKHZvaWQpCit7CisvLwllY2hvICgpOworCXRjc2V0YXR0cigwLFRDU0FOT1csJnRlcm1pb0luaXQpOworCisJZGVsd2luICh0aXRsZV93aW4pOworCWRlbHdpbiAoY29tbWFuZF93aW4pOworCWRlbHdpbiAoc2hvd193aW4pOworCWRlbHdpbiAoc2hvd19wYWQpOworCisJZW5kd2luICgpOworfQorCit2b2lkIHNob3dfaW5mbyAodm9pZCkKK3sKKwlpbnQgYmxvY2tfbnVtLGJsb2NrX29mZnNldDsKKworCWJsb2NrX251bT1kZXZpY2Vfb2Zmc2V0L2ZpbGVfc3lzdGVtX2luZm8uYmxvY2tfc2l6ZTsKKwlibG9ja19vZmZzZXQ9ZGV2aWNlX29mZnNldCVmaWxlX3N5c3RlbV9pbmZvLmJsb2NrX3NpemU7CisKKwl3bW92ZSAoc2hvd193aW4sMCwwKTsKKwl3cHJpbnR3IChzaG93X3dpbiwiT2Zmc2V0ICUtM2xkIGluIGJsb2NrICVsZC4gIixibG9ja19vZmZzZXQsYmxvY2tfbnVtKTsKKwlpZiAoY3VycmVudF90eXBlICE9IE5VTEwpCisJCXdwcmludHcgKHNob3dfd2luLCJUeXBlOiAlc1xuIixjdXJyZW50X3R5cGUtPm5hbWUpOworCWVsc2UKKwkJd3ByaW50dyAoc2hvd193aW4sIlR5cGU6ICVzXG4iLCJub25lIik7CisKKwlyZWZyZXNoX3Nob3dfd2luICgpOworfQorCisKK3ZvaWQgcmVkcmF3X2FsbCAodm9pZCkKK3sKKwlpbnQgbWluX2xpbmVzID0gVElUTEVfV0lOX0xJTkVTK1NIT1dfV0lOX0xJTkVTK0NPTU1BTkRfV0lOX0xJTkVTKzM7CisJc3RydWN0IHdpbnNpemUgd3M7CisJaW50CXNhdmVfY29sLCBzYXZlX2xpbmVzOworCisJLyogZ2V0IHRoZSBzaXplIG9mIHRoZSB0ZXJtaW5hbCBjb25uZWN0ZWQgdG8gc3Rkb3V0ICovCisJaW9jdGwoMSwgVElPQ0dXSU5TWiwgJndzKTsKKwkvKgorCSAqIERvIGl0IGFnYWluIGJlY2F1c2UgR0RCIGRvZXNuJ3Qgc3RvcCBiZWZvcmUgdGhlIGZpcnN0IGlvY3RsCisJICogY2FsbCwgd2Ugd2FudCBhbiB1cC10by1kYXRlIHNpemUgd2hlbiB3ZSdyZQorCSAqIHNpbmdsZS1zdGVwcGluZy4KKwkgKi8KKwlpZiAoaW9jdGwoMSwgVElPQ0dXSU5TWiwgJndzKSA9PSAwKSB7CisJCWlmICh3cy53c19yb3cgPCBtaW5fbGluZXMpCisJCQl3cy53c19yb3cgPSBtaW5fbGluZXM7CisJCWlmICgod3Mud3Nfcm93ICE9IExJTkVTKSB8fCAod3Mud3NfY29sICE9IENPTFMpKSB7CisJCQl3bW92ZSAoc2hvd193aW4sMixDT0xTLTE4KTsKKwkJCXdjbHJ0b2VvbChzaG93X3dpbik7CisJCQl3cmVmcmVzaChzaG93X3dpbik7CisJCQlyZXNpemV0ZXJtKHdzLndzX3Jvdywgd3Mud3NfY29sKTsKKwkJCXdyZXNpemUodGl0bGVfd2luLCBUSVRMRV9XSU5fTElORVMsQ09MUyk7CisJCQl3cmVzaXplKHNob3dfd2luLCBTSE9XX1dJTl9MSU5FUyxDT0xTKTsKKwkJCXdyZXNpemUoY29tbWFuZF93aW4sIENPTU1BTkRfV0lOX0xJTkVTLENPTFMpOworCQkJd3Jlc2l6ZShtdF93aW4xLCAxLENPTFMpOworCQkJd3Jlc2l6ZShtdF93aW4yLCAxLENPTFMpOworCQkJbXZ3aW4obXRfd2luMiwgTElORVMtQ09NTUFORF9XSU5fTElORVMtMSwwKTsKKwkJCW12d2luKGNvbW1hbmRfd2luLCBMSU5FUy1DT01NQU5EX1dJTl9MSU5FUywwKTsKKwkJCWRyYXdfdGl0bGVfd2luKCk7CisJCQlzaG93X3BhZF9pbmZvLmRpc3BsYXlfbGluZXM9TElORVMtVElUTEVfV0lOX0xJTkVTLVNIT1dfV0lOX0xJTkVTLUNPTU1BTkRfV0lOX0xJTkVTLTI7CisJCQlzaG93X3BhZF9pbmZvLmRpc3BsYXlfY29scz1DT0xTOworCQl9CisJfQorCWNsZWFyb2sodGl0bGVfd2luLCAxKTsKKwljbGVhcm9rKHNob3dfd2luLCAxKTsKKwljbGVhcm9rKGNvbW1hbmRfd2luLCAxKTsKKwljbGVhcm9rKG10X3dpbjEsIDEpOworCWNsZWFyb2sobXRfd2luMiwgMSk7CisJd3JlZnJlc2gobXRfd2luMSk7CisJd3JlZnJlc2gobXRfd2luMik7CisJcmVmcmVzaF9zaG93X3BhZCgpOworCXJlZnJlc2hfc2hvd193aW4oKTsKKwlyZWZyZXNoX3RpdGxlX3dpbiAoKTsKKwlyZWZyZXNoX2NvbW1hbmRfd2luICgpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9hc20vdHlwZXMuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvYXNtL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYzg4OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvYXNtL3R5cGVzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIi4uL2xpbnV4L3R5cGVzLmgiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2NvbmZpZy5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY5ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisKKyNkZWZpbmUgX0lOT19UX0RFRklORUQgMQorCisjZGVmaW5lIEhBVkVfU1RETElCX0ggIDEKKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAgMQorI2RlZmluZSBIQVZFX0dFVE9QVF9IICAxCisjZGVmaW5lIEhBVkVfRVJSTk9fSCAgIDEKKyNkZWZpbmUgSEFWRV9TRVRKTVBfSCAgMQorCisjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisjZGVmaW5lIHN0cmNhc2VjbXAgICAgIF9zdHJpY21wCisjZGVmaW5lIHN0cm5jYXNlY21wICAgICBfc3RybmljbXAKKworI2RlZmluZSBIQVZFX0NPTklPX0ggICAxCisKKyNkZWZpbmUgSEFWRV9FWFQyX0lOT0RFX1ZFUlNJT04gMQorCisjZGVmaW5lIGlubGluZSBfX2ZvcmNlaW5saW5lCisKKyNkZWZpbmUgX0NUWVBFX0RJU0FCTEVfTUFDUk9TCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvZGlyZW50LmggYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2RpcmVudC5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2dldG9wdC5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9nZXRvcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2FkNDZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9nZXRvcHQuaApAQCAtMCwwICsxLDEzNSBAQAorLyogRGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisgICBDb3B5cmlnaHQgKEMpIDE5ODksOTAsOTEsOTIsOTMsOTQsOTYsOTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisgICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVE9QVF9ICisjZGVmaW5lIF9HRVRPUFRfSCAxCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBHRVRPUFRfVkFSSUFCTEUKKyNkZWZpbmUgR0VUT1BUX1ZBUklBQkxFCisjZW5kaWYKKworLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorICAgV2hlbiBgZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKyAgIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyByZXR1cm5lZCBoZXJlLgorICAgQWxzbywgd2hlbiBgb3JkZXJpbmcnIGlzIFJFVFVSTl9JTl9PUkRFUiwKKyAgIGVhY2ggbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgaXMgcmV0dXJuZWQgaGVyZS4gICovCisKK2V4dGVybiBHRVRPUFRfVkFSSUFCTEUgY2hhciAqb3B0YXJnOworCisvKiBJbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGVsZW1lbnQgdG8gYmUgc2Nhbm5lZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB0byBhbmQgZnJvbSB0aGUgY2FsbGVyCisgICBhbmQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGBnZXRvcHQnLgorCisgICBPbiBlbnRyeSB0byBgZ2V0b3B0JywgemVybyBtZWFucyB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsOyBpbml0aWFsaXplLgorCisgICBXaGVuIGBnZXRvcHQnIHJldHVybnMgLTEsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKK2V4dGVybiBHRVRPUFRfVkFSSUFCTEUgaW50IG9wdGluZDsKKworLyogQ2FsbGVycyBzdG9yZSB6ZXJvIGhlcmUgdG8gaW5oaWJpdCB0aGUgZXJyb3IgbWVzc2FnZSBgZ2V0b3B0JyBwcmludHMKKyAgIGZvciB1bnJlY29nbml6ZWQgb3B0aW9ucy4gICovCisKK2V4dGVybiBHRVRPUFRfVkFSSUFCTEUgaW50IG9wdGVycjsKKworLyogU2V0IHRvIGFuIG9wdGlvbiBjaGFyYWN0ZXIgd2hpY2ggd2FzIHVucmVjb2duaXplZC4gICovCisKK2V4dGVybiBHRVRPUFRfVkFSSUFCTEUgaW50IG9wdG9wdDsKKworLyogRGVzY3JpYmUgdGhlIGxvbmctbmFtZWQgb3B0aW9ucyByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhlIExPTkdfT1BUSU9OUyBhcmd1bWVudCB0byBnZXRvcHRfbG9uZyBvciBnZXRvcHRfbG9uZ19vbmx5IGlzIGEgdmVjdG9yCisgICBvZiBgc3RydWN0IG9wdGlvbicgdGVybWluYXRlZCBieSBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzCisgICB6ZXJvLgorCisgICBUaGUgZmllbGQgYGhhc19hcmcnIGlzOgorICAgbm9fYXJndW1lbnQJCShvciAwKSBpZiB0aGUgb3B0aW9uIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQsCisgICByZXF1aXJlZF9hcmd1bWVudAkob3IgMSkgaWYgdGhlIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCwKKyAgIG9wdGlvbmFsX2FyZ3VtZW50IAkob3IgMikgaWYgdGhlIG9wdGlvbiB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudC4KKworICAgSWYgdGhlIGZpZWxkIGBmbGFnJyBpcyBub3QgTlVMTCwgaXQgcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCBpcyBzZXQKKyAgIHRvIHRoZSB2YWx1ZSBnaXZlbiBpbiB0aGUgZmllbGQgYHZhbCcgd2hlbiB0aGUgb3B0aW9uIGlzIGZvdW5kLCBidXQKKyAgIGxlZnQgdW5jaGFuZ2VkIGlmIHRoZSBvcHRpb24gaXMgbm90IGZvdW5kLgorCisgICBUbyBoYXZlIGEgbG9uZy1uYW1lZCBvcHRpb24gZG8gc29tZXRoaW5nIG90aGVyIHRoYW4gc2V0IGFuIGBpbnQnIHRvCisgICBhIGNvbXBpbGVkLWluIGNvbnN0YW50LCBzdWNoIGFzIHNldCBhIHZhbHVlIGZyb20gYG9wdGFyZycsIHNldCB0aGUKKyAgIG9wdGlvbidzIGBmbGFnJyBmaWVsZCB0byB6ZXJvIGFuZCBpdHMgYHZhbCcgZmllbGQgdG8gYSBub256ZXJvCisgICB2YWx1ZSAodGhlIGVxdWl2YWxlbnQgc2luZ2xlLWxldHRlciBvcHRpb24gY2hhcmFjdGVyLCBpZiB0aGVyZSBpcworICAgb25lKS4gIEZvciBsb25nIG9wdGlvbnMgdGhhdCBoYXZlIGEgemVybyBgZmxhZycgZmllbGQsIGBnZXRvcHQnCisgICByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgYHZhbCcgZmllbGQuICAqLworCitzdHJ1Y3Qgb3B0aW9uCit7CisjaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCisgIGNvbnN0IGNoYXIgKm5hbWU7CisjZWxzZQorICBjaGFyICpuYW1lOworI2VuZGlmCisgIC8qIGhhc19hcmcgY2FuJ3QgYmUgYW4gZW51bSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0CisgICAgIHR5cGUgbWlzbWF0Y2hlcyBpbiBhbGwgdGhlIGNvZGUgdGhhdCBhc3N1bWVzIGl0IGlzIGFuIGludC4gICovCisgIGludCBoYXNfYXJnOworICBpbnQgKmZsYWc7CisgIGludCB2YWw7Cit9OworCisvKiBOYW1lcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgYGhhc19hcmcnIGZpZWxkIG9mIGBzdHJ1Y3Qgb3B0aW9uJy4gICovCisKKyNkZWZpbmUJbm9fYXJndW1lbnQJCTAKKyNkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQJMQorI2RlZmluZSBvcHRpb25hbF9hcmd1bWVudAkyCisKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKy8qIE1hbnkgb3RoZXIgbGlicmFyaWVzIGhhdmUgY29uZmxpY3RpbmcgcHJvdG90eXBlcyBmb3IgZ2V0b3B0LCB3aXRoCisgICBkaWZmZXJlbmNlcyBpbiB0aGUgY29uc3RzLCBpbiBzdGRsaWIuaC4gIFRvIGF2b2lkIGNvbXBpbGF0aW9uCisgICBlcnJvcnMsIG9ubHkgcHJvdG90eXBlIGdldG9wdCBmb3IgdGhlIEdOVSBDIGxpYnJhcnkuICAqLworZXh0ZXJuIGludCBnZXRvcHQgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzKTsKKyNlbHNlIC8qIG5vdCBfX0dOVV9MSUJSQVJZX18gKi8KK2V4dGVybiBpbnQgZ2V0b3B0ICgpOworI2VuZGlmIC8qIF9fR05VX0xJQlJBUllfXyAqLworZXh0ZXJuIGludCBnZXRvcHRfbG9uZyAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpzaG9ydG9wdHMsCisJCSAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CitleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqc2hvcnRvcHRzLAorCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CisKKy8qIEludGVybmFsIG9ubHkuICBVc2VycyBzaG91bGQgbm90IGNhbGwgdGhpcyBkaXJlY3RseS4gICovCitleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwKKwkJCSAgICAgY29uc3QgY2hhciAqc2hvcnRvcHRzLAorCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCwKKwkJCSAgICAgaW50IGxvbmdfb25seSk7CisjZWxzZSAvKiBub3QgX19TVERDX18gKi8KK2V4dGVybiBpbnQgZ2V0b3B0ICgpOworZXh0ZXJuIGludCBnZXRvcHRfbG9uZyAoKTsKK2V4dGVybiBpbnQgZ2V0b3B0X2xvbmdfb25seSAoKTsKKworZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsICgpOworI2VuZGlmIC8qIF9fU1REQ19fICovCisKKyNpZmRlZglfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0VUT1BUX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvZ3JwLmggYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2dycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDE5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2dycC5oCkBAIC0wLDAgKzEsMTcgQEAKKworI3ByYWdtYSBvbmNlCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19naWRfdDsKK19faW5saW5lIF9fZ2lkX3QgZ2V0Z2lkKHZvaWQpe3JldHVybiAwO30KK19faW5saW5lIHN0cnVjdCBncm91cCAqIGdldGdybmFtKGNoYXIqIGcpe3JldHVybiAwO30KKworc3RydWN0IGdyb3VwCisgIHsKKyAgICBjaGFyICpncl9uYW1lOworICAgIGNoYXIgKmdyX3Bhc3N3ZDsKKyAgICBfX2dpZF90IGdyX2dpZDsKKyAgICBjaGFyICoqZ3JfbWVtOworICB9OworCisjZGVmaW5lIGdldGdyZ2lkKGkpIE5VTEwKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9saW51eC90eXBlcy5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9saW51eC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWJjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L2xpbnV4L3R5cGVzLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfTElOVVhfVFlQRVNfSAorI2RlZmluZSBfTElOVVhfVFlQRVNfSAorCisjaWZuZGVmIF9NU0NfVkVSCisjZXJyb3IgIF9NU0NfVkVSIG5vdCBkZWZpbmVkCisjZW5kaWYKKworCit0eXBlZGVmIHVuc2lnbmVkIF9faW50OCBfX3U4OwordHlwZWRlZiBzaWduZWQgX19pbnQ4IF9fczg7CisKK3R5cGVkZWYgc2lnbmVkICAgX19pbnQ2NCBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBfX3U2NDsKKwordHlwZWRlZglzaWduZWQgICBfX2ludDE2CV9fczE2OwordHlwZWRlZgl1bnNpZ25lZCBfX2ludDE2CV9fdTE2OworCit0eXBlZGVmCXNpZ25lZCAgIF9faW50MzIJX19zMzI7Cit0eXBlZGVmCXVuc2lnbmVkIF9faW50MzIJX191MzI7CisKK3R5cGVkZWYJc2lnbmVkICAgX19pbnQ2NAlfX3M2NDsKK3R5cGVkZWYJdW5zaWduZWQgX19pbnQ2NAlfX3U2NDsKKworCit0eXBlZGVmIF9fdTMyIGlub190OworCisKKyNlbmRpZiAvKiBMSU5VWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3B3ZC5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9wd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI0ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9wd2QuaApAQCAtMCwwICsxLDIyIEBACisKKyNwcmFnbWEgb25jZQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdWlkX3Q7CitfX2lubGluZSBfX3VpZF90IGdldHVpZCh2b2lkKXtyZXR1cm4gMDt9CitfX2lubGluZSBpbnQgZ2V0ZXVpZCh2b2lkKXtyZXR1cm4gMTt9CitfX2lubGluZSBzdHJ1Y3QgcGFzc3dkKiBnZXRwd25hbSAoY2hhciogZyl7cmV0dXJuIDA7fQorCisKK3N0cnVjdCBwYXNzd2QKK3sKKyAgY2hhciAqcHdfbmFtZTsKKyAgY2hhciAqcHdfcGFzc3dkOworICBfX3VpZF90IHB3X3VpZDsKKyAgX19naWRfdCBwd19naWQ7CisgIGNoYXIgKnB3X2dlY29zOworICBjaGFyICpwd19kaXI7CisgIGNoYXIgKnB3X3NoZWxsOworfTsKKworI2RlZmluZSBnZXRwd3VpZChpKSBOVUxMCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL2ZpbGUuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvZmlsZS5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy9pb2N0bC5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvaW9jdGwuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvcGFyYW0uaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3BhcmFtLmgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3Jlc291cmNlLmggYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy9yZXNvdXJjZS5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy9zb2NrZXQuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy9zb2NrZXQuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvdGltZS5oIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmQxODcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3N5cy90aW1lLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHRpbWUuaD4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3dhaXQuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvc3lzL3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC9zeXMvd2FpdC5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3Rlcm1pb3MuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3Rlcm1pb3MuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luY2x1ZGUvbm9udW5peC91bmlzdGQuaCBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1MzU4NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvdW5pc3RkLmgKQEAgLTAsMCArMSw0OSBAQAorCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2luY2x1ZGUgPGlvLmg+CisKKyNkZWZpbmUgRU9QTk9UU1VQUCAgOTUKKworI2RlZmluZSBPX05PTkJMT0NLICAwCisjZGVmaW5lIE9fUkRPTkxZICAgIF9PX1JET05MWQorI2RlZmluZSBPX1JEV1IgICAgICBfT19SRFdSCisKKyNkZWZpbmUgcG9wZW4gICBfcG9wZW4KKyNkZWZpbmUgcGNsb3NlICBfcGNsb3NlCisjZGVmaW5lIHNsZWVwICAgX3NsZWVwCisjZGVmaW5lIHN0YXQgICAgX3N0YXQKKyNkZWZpbmUgb3BlbiAgICBfb3BlbgorI2RlZmluZSBjbG9zZSAgIF9jbG9zZQorI2RlZmluZSBmc3RhdCAgIF9mc3RhdAorI2RlZmluZSByZWFkICAgIF9yZWFkCisjZGVmaW5lIHdyaXRlICAgX3dyaXRlCisjZGVmaW5lIG9mZl90ICAgX29mZl90CisjZGVmaW5lIGxzZWVrICAgX2xzZWVrCisjZGVmaW5lIHB1dGVudiAgX3B1dGVudgorI2RlZmluZSBnZXRwaWQgIF9nZXRwaWQKKyNkZWZpbmUgdXRpbWJ1ZiBfdXRpbWJ1ZgorI2RlZmluZSBzeXNfbmVyciBfc3lzX25lcnIKKyNkZWZpbmUgc3lzX2Vycmxpc3QgX3N5c19lcnJsaXN0CisjZGVmaW5lIGlzYXR0eSBfaXNhdHR5CisjZGVmaW5lIGdldGNoIF9nZXRjaAorCisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8cHdkLmg+CisKKworLy8gbm8tb3BlZCBzeW5jCitfX2lubGluZSB2b2lkIHN5bmModm9pZCl7fTsKKworCisKKyNkZWZpbmUgZ2V0dGltZW9mZGF5KHAsIHYpICgocCktPnR2X3NlYyA9IChwKS0+dHZfdXNlYyA9IDApCisKKworI2RlZmluZSBzdHJjYXNlY21wIF9zdHJpY21wCisKKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3V0aW1lLmggYi9lMmZzcHJvZ3MvaW5jbHVkZS9ub251bml4L3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4NWYzOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbmNsdWRlL25vbnVuaXgvdXRpbWUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c3lzL3V0aW1lLmg+CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5zdGFsbC11dGlscy9jb21waWxlX21hbnBhZ2VzIGIvZTJmc3Byb2dzL2luc3RhbGwtdXRpbHMvY29tcGlsZV9tYW5wYWdlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNiYmRiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2luc3RhbGwtdXRpbHMvY29tcGlsZV9tYW5wYWdlcwpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworTUFOOD0iZGVidWdmcyBiYWRibG9ja3MgZTJmc2NrIG1rZTJmcyBkdW1wZTJmcyBta2xvc3QrZm91bmQgXAorCWZzY2sgdHVuZTJmcyIKK01BTjE9ImxzYXR0ciBjaGF0dHIiCisKK2ZvciBpIGluICRNQU44CitkbworCW1hbiAtUyA4ICRpID4gL2Rldi9udWxsCitkb25lCisKKworZm9yIGkgaW4gJE1BTjEKK2RvCisJbWFuIC1TIDEgJGkgPiAvZGV2L251bGwKK2RvbmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW5zdGFsbC11dGlscy9jb252ZnN0YWIgYi9lMmZzcHJvZ3MvaW5zdGFsbC11dGlscy9jb252ZnN0YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExNjBiZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnN0YWxsLXV0aWxzL2NvbnZmc3RhYgpAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKyMgIE1ha2UgL2V0Yy9mc3RhYiBzdGFuZGFyZCBjb21wbGlhbnQuCisjICBNLldlbGxlciAoZW93bW9iQGV4cC1tYXRoLnVuaS1lc3Nlbi5kZSkgMTMuMTEuMTk5NC4KKyMgIFRoaXMgc2NyaXB0IGlzIHB1YmxpYyBkb21haW4uIFN0aWxsIGlmIG9ubHkgc2xpZ2h0bHkKKyMgIG1vZGlmaWVkIGEgY3JlZGl0IHRvIG1lIG1pZ2h0IGJlIG5pY2UuCisKK1JPT1RfUEFTUz0xCQkjIFBhc3MgZm9yIHJvb3QgZmlsZSBzeXN0ZW0KK05PTl9ST09UX1BBU1M9MgkJIyBQYXNzIGZvciBub24gcm9vdCBmaWxlIHN5c3RlbXMKK0RFRl9GTEFHUz0iZGVmYXVsdHMiCSMgRGVmYXVsdCBmaWxlc3lzZmxhZ3MKK0RFRl9EVU1QPTAJCSMgRGVmYXVsdCBkdW1wZnJlcS4KKwkKK3doaWxlIHJlYWQgTElORQorZG8KKyAgc2V0IC0tICRMSU5FCisgIGlmIFsgJCMgIT0gMCBdCisgIHRoZW4KKyAgICBjYXNlICQxIGluCisgICAgICBcIyogfCAhKiApCisJZWNobyAiJExJTkUiCisJIyAgQWN0dWFsbHkgdGhlcmUgYXJlIG5vIGNvbW1lbnRzIGFsbG93ZWQgaW4gL2V0Yy9mc3RhYgorCWVjaG8gIldhcm5pbmc6IGNvbW1lbnQgaW4gL2V0Yy9mc3RhYiBkZXRlY3RlZC4iID4mMgorCWVjaG8gIlBsZWFzZSByZW1vdmUgaXQgYnkgaGFuZC4iID4mMgorCTs7CisgICAgICAqICkKKwlpZiBbICQjIC1ndCA2IF0gfHwgWyAkIyAtbHQgMyBdCisJdGhlbgorCSAgZWNobyAiRG9uJ3QgaGF2ZSBhIGNsdWUgYWJvdXQgXCIkTElORVwiLiIgPiYyCisJICBlY2hvICIkTElORSIKKwllbHNlCisJICBjYXNlICQyIGluCisJICAgIC8gKQorCSAgICAgIFBBU1M9JFJPT1RfUEFTUworCSAgICAgIDs7CisJICAgIG5vbmUgKQorCSAgICAgIFBBU1M9MAorCSAgICAgIDs7CisJICAgICogKQorCSAgICAgIFBBU1M9JE5PTl9ST09UX1BBU1MKKwkgICAgICA7OworCSAgZXNhYworCSAgRFVNUD0kREVGX0RVTVAKKwkgIGNhc2UgJDMgaW4KKwkgICAgaWdub3JlIHwgaXNvOTY2MCB8IG1zZG9zIHwgaHBmcyB8IHN5c3YgfCBcCisJCSAgeGVuaXggfCBjb2hlcmVudCB8IG5mcyB8IHByb2MgfCBzdyB8IHN3YXAgKQorCSAgICAgIERVTVA9MDsKKwkgICAgICBQQVNTPTA7CisJICAgICAgOzsKKwkgIGVzYWMKKwkgIGNhc2UgJCMgaW4KKwkgICAgMyApCisJICAgICAgZWNobyAiJExJTkUJJERFRl9GTEFHUwkkRFVNUAkkUEFTUyIKKwkgICAgICA7OworCSAgICA0ICkKKwkgICAgICBlY2hvICIkTElORQkkRFVNUAkkUEFTUyIKKwkgICAgICA7OworCSAgICA1ICkKKwkgICAgICBlY2hvICIkTElORQkkUEFTUyIKKwkgICAgICA7OworCSAgICA2KQorCSAgICAgIGVjaG8gIiRMSU5FIgorCSAgICAgIDs7CisJICBlc2FjCisJZmkKKwk7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGVjaG8gIldhcm5pbmc6IE9uZSBlbXB0eSBsaW5lIHJlbW92ZWQuIiA+JjIKKyAgZmkKK2RvbmUgPC9ldGMvZnN0YWIgPi90bXAvbmV3ZnN0YWIuJCQKK212IC1mIC9ldGMvZnN0YWIgL2V0Yy9mc3RhYi5iYWsKK212IC1mIC90bXAvbmV3ZnN0YWIuJCQgL2V0Yy9mc3RhYgoraWYgWyAkPyAhPSAwIF0KK3RoZW4KKyAgZWNobyAiSW5zdGFsbGF0aW9uIG9mIHBhdGNoZWQgL2V0Yy9mc3RhYiBmYWlsZWQuIgorICBlY2hvICJJdCB3b3VsZCBoYXZlIGJlZW46IgorICBjYXQgL3RtcC9uZXdmc3RhYi4kJAorICBybSAtZiAvdG1wL25ld2ZzdGFiLiQkCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2luc3RhbGwtdXRpbHMvcmVtb3ZlX3ByZWZvcm1hdF9tYW5wYWdlcyBiL2UyZnNwcm9ncy9pbnN0YWxsLXV0aWxzL3JlbW92ZV9wcmVmb3JtYXRfbWFucGFnZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkZmZmOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnN0YWxsLXV0aWxzL3JlbW92ZV9wcmVmb3JtYXRfbWFucGFnZXMKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKK1BSRUZPUk1BVF9ST09UPS91c3IvbWFuL3ByZWZvcm1hdAorQ09NUElMRURfUk9PVD0vdXNyL21hbgorCitNQU44PSJkZWJ1Z2ZzLjggYmFkYmxvY2tzLjggZTJmc2NrLjggbWtlMmZzLjggZHVtcGUyZnMuOCBta2xvc3QrZm91bmQuOCBcCisJZnNjay44IHR1bmUyZnMuOCBlMmxhYmVsLjgiCitNQU4xPSJsc2F0dHIuMSBjaGF0dHIuMSIKKworZm9yIGkgaW4gJE1BTjgKK2RvCisJcm0gLWYgJFBSRUZPUk1BVF9ST09UL2NhdDgvJGkgJENPTVBJTEVEX1JPT1QvY2F0OC8kaSBcCisJCSRQUkVGT1JNQVRfUk9PVC9jYXQ4LyRpLmd6ICRDT01QSUxFRF9ST09UL2NhdDgvJGkuZ3oKK2RvbmUKKworCitmb3IgaSBpbiAkTUFOMQorZG8KKwlybSAtZiAkUFJFRk9STUFUX1JPT1QvY2F0MS8kaSAkQ09NUElMRURfUk9PVC9jYXQxLyRpIFwKKwkJJFBSRUZPUk1BVF9ST09UL2NhdDEvJGkuZ3ogJENPTVBJTEVEX1JPT1QvY2F0MS8kaS5negorZG9uZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvaW50bC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjI0ZjYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1MjUgQEAKKyMgTWFrZWZpbGUgZm9yIGRpcmVjdG9yeSB3aXRoIG1lc3NhZ2UgY2F0YWxvZyBoYW5kbGluZyBsaWJyYXJ5IG9mIEdOVSBnZXR0ZXh0CisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyBVU0EuCisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKKworU0hFTEwgPSAvYmluL3NoCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorVlBBVEggPSAkKHNyY2RpcikKKworcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACit0cmFuc2Zvcm0gPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK2xpYmRpciA9IEBsaWJkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitsb2NhbGVkaXIgPSAkKGRhdGFkaXIpL2xvY2FsZQorZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9pbnRsCithbGlhc3BhdGggPSAkKGxvY2FsZWRpcikKK3N1YmRpciA9IGludGwKKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisKK0BTRVRfTUFLRUAKKworQGlmR05VbWFrZUAgViA9CitAaWZHTlVtYWtlQCBpZmVxICgkKHN0cmlwICQoVikpLCkKK0BpZkdOVW1ha2VAICMgIEUgPSBAZWNobworQGlmR05VbWFrZUAgIyAgUSA9IEAKK0BpZkdOVW1ha2VAICAgIEUgPSBARUAKK0BpZkdOVW1ha2VAICAgIFEgPSBAUUAKK0BpZkdOVW1ha2VAIGVsc2UKK0BpZkdOVW1ha2VAICAgIEUgPSBAXCMKK0BpZkdOVW1ha2VAICAgIFEgPQorQGlmR05VbWFrZUAgZW5kaWYKKworQGlmTm90R05VbWFrZUAgRSA9IEBFQAorQGlmTm90R05VbWFrZUAgUSA9IEBRQAorCitsID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorCitBUiA9IGFyCitDQyA9IEBDQ0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK1JBTkxJQiA9IEBSQU5MSUJACitZQUNDID0gQElOVExCSVNPTkAgLXkgLWQKK1lGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CisKK0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCistRExJQkRJUj1cIiQobGliZGlyKVwiIC1ESU5fTElCSU5UTCBcCistREVOQUJMRV9SRUxPQ0FUQUJMRT0xIC1ESU5fTElCUkFSWSAtRElOU1RBTExESVI9XCIkKGxpYmRpcilcIiAtRE5PX1hNQUxMT0MgXAorLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorLURyZWxvY2F0ZT1saWJpbnRsX3JlbG9jYXRlIFwKKy1EREVQRU5EU19PTl9MSUJJQ09OVj0xIC1ESEFWRV9DT05GSUdfSAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDRkxBR1MgPSBAQ0ZMQUdTQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCUyA9IEBMSUJTQAorCitDT01QSUxFID0gJChDQykgLWMgJChERUZTKSAkKElOQ0xVREVTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgJChYQ0ZMQUdTKQorCitIRUFERVJTID0gXAorICBnbW8uaCBcCisgIGdldHRleHRQLmggXAorICBoYXNoLXN0cmluZy5oIFwKKyAgbG9hZGluZm8uaCBcCisgIHBsdXJhbC1leHAuaCBcCisgIGV2YWwtcGx1cmFsLmggXAorICBsb2NhbGNoYXJzZXQuaCBcCisgIHJlbG9jYXRhYmxlLmggXAorICB4c2l6ZS5oIFwKKyAgcHJpbnRmLWFyZ3MuaCBwcmludGYtYXJncy5jIFwKKyAgcHJpbnRmLXBhcnNlLmggd3ByaW50Zi1wYXJzZS5oIHByaW50Zi1wYXJzZS5jIFwKKyAgdmFzbnByaW50Zi5oIHZhc253cHJpbnRmLmggdmFzbnByaW50Zi5jIFwKKyAgb3MyY29tcGF0LmggXAorICBsaWJnbnVpbnRsLmguaW4KK1NPVVJDRVMgPSBcCisgIGJpbmR0ZXh0ZG9tLmMgXAorICBkY2dldHRleHQuYyBcCisgIGRnZXR0ZXh0LmMgXAorICBnZXR0ZXh0LmMgXAorICBmaW5kZG9tYWluLmMgXAorICBsb2FkbXNnY2F0LmMgXAorICBsb2NhbGVhbGlhcy5jIFwKKyAgdGV4dGRvbWFpbi5jIFwKKyAgbDEwbmZsaXN0LmMgXAorICBleHBsb2RlbmFtZS5jIFwKKyAgZGNpZ2V0dGV4dC5jIFwKKyAgZGNuZ2V0dGV4dC5jIFwKKyAgZG5nZXR0ZXh0LmMgXAorICBuZ2V0dGV4dC5jIFwKKyAgcGx1cmFsLnkgXAorICBwbHVyYWwtZXhwLmMgXAorICBsb2NhbGNoYXJzZXQuYyBcCisgIHJlbG9jYXRhYmxlLmMgXAorICBsb2NhbGVuYW1lLmMgXAorICBsb2cuYyBcCisgIHByaW50Zi5jIFwKKyAgb3NkZXAuYyBcCisgIG9zMmNvbXBhdC5jIFwKKyAgaW50bC1jb21wYXQuYworT0JKRUNUUyA9IFwKKyAgYmluZHRleHRkb20uJGxvIFwKKyAgZGNnZXR0ZXh0LiRsbyBcCisgIGRnZXR0ZXh0LiRsbyBcCisgIGdldHRleHQuJGxvIFwKKyAgZmluZGRvbWFpbi4kbG8gXAorICBsb2FkbXNnY2F0LiRsbyBcCisgIGxvY2FsZWFsaWFzLiRsbyBcCisgIHRleHRkb21haW4uJGxvIFwKKyAgbDEwbmZsaXN0LiRsbyBcCisgIGV4cGxvZGVuYW1lLiRsbyBcCisgIGRjaWdldHRleHQuJGxvIFwKKyAgZGNuZ2V0dGV4dC4kbG8gXAorICBkbmdldHRleHQuJGxvIFwKKyAgbmdldHRleHQuJGxvIFwKKyAgcGx1cmFsLiRsbyBcCisgIHBsdXJhbC1leHAuJGxvIFwKKyAgbG9jYWxjaGFyc2V0LiRsbyBcCisgIHJlbG9jYXRhYmxlLiRsbyBcCisgIGxvY2FsZW5hbWUuJGxvIFwKKyAgbG9nLiRsbyBcCisgIHByaW50Zi4kbG8gXAorICBvc2RlcC4kbG8gXAorICBpbnRsLWNvbXBhdC4kbG8KK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbiBcCitjb25maWcuY2hhcnNldCBsb2NhbGUuYWxpYXMgcmVmLWFkZC5zaW4gcmVmLWRlbC5zaW4gJChIRUFERVJTKSAkKFNPVVJDRVMpCitESVNURklMRVMuZ2VuZXJhdGVkID0gcGx1cmFsLmMKK0RJU1RGSUxFUy5ub3JtYWwgPSBWRVJTSU9OCitESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBcCitsaWJnbnVpbnRsLmhfdm1zIE1ha2VmaWxlLnZtcyBcCitsaWJnbnVpbnRsLmgubXN2Yy1zdGF0aWMgbGliZ251aW50bC5oLm1zdmMtc2hhcmVkIFJFQURNRS53b2UzMiBNYWtlZmlsZS5tc3ZjCitESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorQ09QWUlORy5MSUItMiBnZXR0ZXh0LmggbGliZ2V0dGV4dC5oIHBsdXJhbC1ldmFsLmMgbGliZ251aW50bC5oCisKK2FsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKK2FsbC15ZXM6IGxpYmludGwuJGxhIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCithbGwtbm86IGFsbC1uby1AQlVJTERfSU5DTFVERURfTElCSU5UTEAKK2FsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCithbGwtbm8tbm86CisKK2xpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKwkkKFEpIHJtIC1mICRACisJJChFKSAiCUFSICRAIgorCSQoUSkgJChBUikgY3J1ICRAICQoT0JKRUNUUykKKwkkKEUpICIJUkFOTElCICRAIgorCSQoUSkgJChSQU5MSUIpICRACisKK2xpYmludGwubGEgbGliZ251aW50bC5sYTogJChPQkpFQ1RTKQorCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgXAorCSAgJChDQykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCisJICAkKE9CSkVDVFMpIEBMVExJQklDT05WQCAkKExJQlMpIC1sYyBcCisJICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKwkgIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgLW5vLXVuZGVmaW5lZAorCisjIExpYnRvb2wncyBsaWJyYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGxpYmludGwuCisjIEJlZm9yZSBtYWtpbmcgYSBnZXR0ZXh0IHJlbGVhc2UsIHRoZSBnZXR0ZXh0IG1haW50YWluZXIgbXVzdCBjaGFuZ2UgdGhpcworIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorIyBNYWludGFpbmVycyBvZiBvdGhlciBwYWNrYWdlcyB0aGF0IGluY2x1ZGUgdGhlIGludGwgZGlyZWN0b3J5IG11c3QgKm5vdCoKKyMgY2hhbmdlIHRoZXNlIHZhbHVlcy4KK0xUVl9DVVJSRU5UPTcKK0xUVl9SRVZJU0lPTj0wCitMVFZfQUdFPTQKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAueSAubyAubG8gLnNpbiAuc2VkCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDT01QSUxFKSAkPAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKKworLnkuYzoKKwkkKFlBQ0MpICQoWUZMQUdTKSAtLW91dHB1dCAkQCAkPAorCXJtIC1mICQqLmgKKworYmluZHRleHRkb20ubG86ICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCitkY2dldHRleHQubG86ICQoc3JjZGlyKS9kY2dldHRleHQuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKK2RnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGdldHRleHQuYworZ2V0dGV4dC5sbzogJChzcmNkaXIpL2dldHRleHQuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCitmaW5kZG9tYWluLmxvOiAkKHNyY2RpcikvZmluZGRvbWFpbi5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9maW5kZG9tYWluLmMKK2xvYWRtc2djYXQubG86ICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvYWRtc2djYXQuYworbG9jYWxlYWxpYXMubG86ICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCit0ZXh0ZG9tYWluLmxvOiAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS90ZXh0ZG9tYWluLmMKK2wxMG5mbGlzdC5sbzogJChzcmNkaXIpL2wxMG5mbGlzdC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sMTBuZmxpc3QuYworZXhwbG9kZW5hbWUubG86ICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCitkY2lnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2lnZXR0ZXh0LmMKK2RjbmdldHRleHQubG86ICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjbmdldHRleHQuYworZG5nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZG5nZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RuZ2V0dGV4dC5jCituZ2V0dGV4dC5sbzogJChzcmNkaXIpL25nZXR0ZXh0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL25nZXR0ZXh0LmMKK3BsdXJhbC5sbzogJChzcmNkaXIpL3BsdXJhbC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wbHVyYWwuYworcGx1cmFsLWV4cC5sbzogJChzcmNkaXIpL3BsdXJhbC1leHAuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCitsb2NhbGNoYXJzZXQubG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKK3JlbG9jYXRhYmxlLmxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworbG9jYWxlbmFtZS5sbzogJChzcmNkaXIpL2xvY2FsZW5hbWUuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCitsb2cubG86ICQoc3JjZGlyKS9sb2cuYworCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9nLmMKK3ByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wcmludGYuYworb3NkZXAubG86ICQoc3JjZGlyKS9vc2RlcC5jCisJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCitpbnRsLWNvbXBhdC5sbzogJChzcmNkaXIpL2ludGwtY29tcGF0LmMKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ludGwtY29tcGF0LmMKKworcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorCSQoRSkgIglTRUQgcmVmLWFkZC5zZWQiCisJJChRKSBzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCisJJChRKSBtdiB0LXJlZi1hZGQuc2VkIHJlZi1hZGQuc2VkCityZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCisJJChFKSAiCVNFRCByZWYtZGVsLnNlZCIKKwkkKFEpIHNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKwkkKFEpIG12IHQtcmVmLWRlbC5zZWQgcmVmLWRlbC5zZWQKKworSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkuLiAtSSQodG9wX2J1aWxkZGlyKS9saWIKKworbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCisJJChFKSAiCVNFRCBsaWJnbnVpbnRsLmggIgorCSQoUSkgc2VkIC1lICdzLEAnJ0hBVkVfUE9TSVhfUFJJTlRGJydALEBIQVZFX1BPU0lYX1BSSU5URkAsZycgXAorCSAgICAtZSAncyxAJydIQVZFX0FTUFJJTlRGJydALEBIQVZFX0FTUFJJTlRGQCxnJyBcCisJICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKwkgICAgLWUgJ3MsQCcnSEFWRV9XUFJJTlRGJydALEBIQVZFX1dQUklOVEZALGcnIFwKKwkgIDwgJChzcmNkaXIpL2xpYmdudWludGwuaC5pbiA+IGxpYmdudWludGwuaCAKKworbGliaW50bC5oOiBsaWJnbnVpbnRsLmgKKwkkKEUpICIJQ1AgbGliaW50bC5oIgorCSQoUSkgY3AgbGliZ251aW50bC5oIGxpYmludGwuaAorCitjaGFyc2V0LmFsaWFzOiAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQKKwkkKEUpICIJQ09ORklHLkNIQVJTRVQgJEAiCisJJChRKSAkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACisJJChRKSBtdiB0LSRAICRACisKK2NoZWNrOiBhbGwKKworIyBXZSBtdXN0IG5vdCBpbnN0YWxsIHRoZSBsaWJpbnRsLmgvbGliaW50bC5hIGZpbGVzIGlmIHdlIGFyZSBvbiBhCisjIHN5c3RlbSB3aGljaCBoYXMgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaW4gaXRzIEMgbGlicmFyeSBvciBpbiBhCisjIHNlcGFyYXRlIGxpYnJhcnkuCisjIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgb25lIHdoaWNoIGNvbWVzIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZQorIyBwYWNrYWdlLCB5b3UgaGF2ZSB0byB1c2UgYGNvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCcuCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6IGFsbAorCSQoUSkgaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQoaW5jbHVkZWRpcik7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisJICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKwkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKwkgIGlmIHRlc3QgIkBSRUxPQ0FUQUJMRUAiID0geWVzOyB0aGVuIFwKKwkgICAgZGVwZW5kZW5jaWVzPWBzZWQgLW4gLWUgJ3MsXmRlcGVuZGVuY3lfbGlicz1cKC4qXCksXDEscCcgPCAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGEgfCBzZWQgLWUgInMsXicsLCIgLWUgInMsJ1wkJCwsImA7IFwKKwkgICAgaWYgdGVzdCAtbiAiJCRkZXBlbmRlbmNpZXMiOyB0aGVuIFwKKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJJChRKSBpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKwkgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorCSAgICAkKElOU1RBTExfREFUQSkgbGliZ251aW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisJICAkKElOU1RBTExfREFUQSkgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLnNvICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorCSAgdGVtcD0kKERFU1RESVIpJChsaWJkaXIpL3QtY2hhcnNldC5hbGlhczsgXAorCSAgZGVzdD0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKwkgICAgb3JpZz0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKwkgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorCSAgICBybSAtZiAkJHRlbXA7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0IEBHTElCQzIxQCA9IG5vOyB0aGVuIFwKKwkgICAgICBvcmlnPWNoYXJzZXQuYWxpYXM7IFwKKwkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKwkgICAgICBybSAtZiAkJHRlbXA7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxvY2FsZWRpcik7IFwKKwkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorCSAgICAmJiBvcmlnPSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzIFwKKwkgICAgfHwgb3JpZz0kKHNyY2RpcikvbG9jYWxlLmFsaWFzOyBcCisJICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKwkgIGRlc3Q9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IFwKKwkgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisJICBybSAtZiAkJHRlbXA7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGwtZGF0YTogYWxsCisJJChRKSBpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCisJICAkKElOU1RBTExfREFUQSkgQ2hhbmdlTG9nLmluc3QgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvQ2hhbmdlTG9nOyBcCisJICBkaXN0cz0iQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSAkKERJU1RGSUxFUy5jb21tb24pIjsgXAorCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSBcCisJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJICBjaG1vZCBhK3ggJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvY29uZmlnLmNoYXJzZXQ7IFwKKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCisJICBmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisKK2luc3RhbGxkaXJzOgorCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCisJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxvY2FsZWRpcik7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisKKyMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KK2luc3RhbGxjaGVjazoKKworaW5zdGFsbC1zaGxpYnM6CisKK3VuaW5zdGFsbC1zaGxpYnM6CisKK2luc3RhbGwtc2hsaWJzLXN0cmlwOgorCit1bmluc3RhbGw6CisJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKwkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisJICBybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJpbnRsLmg7IFwKKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisJICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisJICAgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKwkgICAgZGVzdD0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAgIHJtIC1mICQkZGVzdDsgXAorCSAgICBlbHNlIFwKKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorCSAgICBmaTsgXAorCSAgICBybSAtZiAkJHRlbXA7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyB0aGVuIFwKKwkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisJICAgIGRlc3Q9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IFwKKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAgIHJtIC1mICQkZGVzdDsgXAorCSAgICBlbHNlIFwKKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorCSAgICBmaTsgXAorCSAgICBybSAtZiAkJHRlbXA7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZm9yIGZpbGUgaW4gVkVSU0lPTiBDaGFuZ2VMb2cgQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCk7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisKK2luZm8gZHZpIHBzIHBkZiBodG1sOgorCiskKE9CSkVDVFMpOiBsaWJnbnVpbnRsLmgKK2JpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKK2RjaWdldHRleHQuJGxvIGxvYWRtc2djYXQuJGxvOiAkKHNyY2RpcikvaGFzaC1zdHJpbmcuaAorZXhwbG9kZW5hbWUuJGxvIGwxMG5mbGlzdC4kbG86ICQoc3JjZGlyKS9sb2FkaW5mby5oCitkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCitkY2lnZXR0ZXh0LiRsbzogJChzcmNkaXIpL2V2YWwtcGx1cmFsLmgKK2xvY2FsY2hhcnNldC4kbG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuaAorbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorcHJpbnRmLiRsbzogJChzcmNkaXIpL3ByaW50Zi1hcmdzLmggJChzcmNkaXIpL3ByaW50Zi1hcmdzLmMgJChzcmNkaXIpL3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS93cHJpbnRmLXBhcnNlLmggJChzcmNkaXIpL3hzaXplLmggJChzcmNkaXIpL3ByaW50Zi1wYXJzZS5jICQoc3JjZGlyKS92YXNucHJpbnRmLmggJChzcmNkaXIpL3Zhc253cHJpbnRmLmggJChzcmNkaXIpL3Zhc25wcmludGYuYworCit0YWdzOiBUQUdTCisKK1RBR1M6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKworY3RhZ3M6IENUQUdTCisKK0NUQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKwloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgY3RhZ3MgLW8gJCRoZXJlL0NUQUdTICQoSEVBREVSUykgJChTT1VSQ0VTKQorCitpZDogSUQKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBta2lkIC1mJCRoZXJlL0lEICQoSEVBREVSUykgJChTT1VSQ0VTKQorCisKK21vc3RseWNsZWFuOgorCXJtIC1mICouYSAqLmxhICoubyAqLm9iaiAqLmxvIGNvcmUgY29yZS4qCisJcm0gLWYgbGliZ251aW50bC5oIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCisJcm0gLWYgLXIgLmxpYnMgX2xpYnMKKworY2xlYW46IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBybSAtZiBDaGFuZ2VMb2cuaW5zdCAkKERJU1RGSUxFUy5ub3JtYWwpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCSQoRSkgIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKwkkKEUpICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKworCisjIEdOVSBnZXR0ZXh0IG5lZWRzIG5vdCBjb250YWluIHRoZSBmaWxlIGBWRVJTSU9OJyBidXQgY29udGFpbnMgc29tZQorIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorZGlzdGRpciA9IC4uLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjogTWFrZWZpbGUKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICA6IDsgXAorCWVsc2UgXAorCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLmdldHRleHQpIjsgXAorCSAgZWxzZSBcCisJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisJICBmaTsgXAorCSAgJChNQUtFKSAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCkgJCRhZGRpdGlvbmFsOyBcCisJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorCSAgICBjcCAtcCAkJGRpci8kJGZpbGUgJChkaXN0ZGlyKTsgXAorCSAgZG9uZTsgXAorCWZpCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyMJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworIyBUaGlzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBidXQgZG9lc24ndCB3b3JrIGFueSBtb3JlIHdpdGggYXV0b2NvbmYtMi41NywKKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9ICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9WRVJTSU9OIGIvZTJmc3Byb2dzL2ludGwvVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI4NDZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvVkVSU0lPTgpAQCAtMCwwICsxIEBACitHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2JpbmR0ZXh0ZG9tLmMgYi9lMmZzcHJvZ3MvaW50bC9iaW5kdGV4dGRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9iaW5kdGV4dGRvbS5jCkBAIC0wLDAgKzEsMzYyIEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorCisjaWZkZWYgX0xJQkMKKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisjZWxzZQorLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUoQ0xBU1MsIE5BTUUpCisjIGRlZmluZSBfX2xpYmNfcndsb2NrX3dybG9jayhOQU1FKQorIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKyNlbmRpZgorCisvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworICAgdXNpbmcgbGliaW50bC5hIGNhbm5vdCBiZSBsaW5rZWQgc3RhdGljYWxseS4gICovCisjaWYgIWRlZmluZWQgX0xJQkMKKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKyMgZGVmaW5lIF9ubF9kb21haW5fYmluZGluZ3MgbGliaW50bF9ubF9kb21haW5fYmluZGluZ3MKKyNlbmRpZgorCisvKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCisjaWZuZGVmIG9mZnNldG9mCisjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKyNpZmRlZiBfTElCQworZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZV9pbnRlcm5hbFtdIGF0dHJpYnV0ZV9oaWRkZW47CisjZWxzZQorIyBkZWZpbmUgSU5UVVNFKG5hbWUpIG5hbWUKKyNlbmRpZgorCisvKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucy4gICovCitleHRlcm4gc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CisKKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIF9fYmluZHRleHRkb21haW4KKyMgZGVmaW5lIEJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIF9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyMgaWZuZGVmIHN0cmR1cAorIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgQklORFRFWFRET01BSU4gbGliaW50bF9iaW5kdGV4dGRvbWFpbgorIyBkZWZpbmUgQklORF9URVhURE9NQUlOX0NPREVTRVQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorI2VuZGlmCisKKy8qIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IG5hbWUgKkRJUk5BTUVQIGFuZCB0aGUgb3V0cHV0IGNvZGVzZXQgKkNPREVTRVRQCisgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisgICBJZiAqRElSTkFNRVAgb3IgKkNPREVTRVRQIGlzIE5VTEwsIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBub3QKKyAgIG1vZGlmaWVkLCBvbmx5IHRoZSBjdXJyZW50IHZhbHVlIGlzIHJldHVybmVkLgorICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKyAgIG1vZGlmaWVkIG5vciByZXR1cm5lZC4gICovCitzdGF0aWMgdm9pZAorc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkgICAgY29uc3QgY2hhciAqKmRpcm5hbWVwLCBjb25zdCBjaGFyICoqY29kZXNldHApCit7CisgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworICBpbnQgbW9kaWZpZWQ7CisKKyAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCB8fCBkb21haW5uYW1lWzBdID09ICdcMCcpCisgICAgeworICAgICAgaWYgKGRpcm5hbWVwKQorCSpkaXJuYW1lcCA9IE5VTEw7CisgICAgICBpZiAoY29kZXNldHApCisJKmNvZGVzZXRwID0gTlVMTDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKworICBtb2RpZmllZCA9IDA7CisKKyAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgY29tcGFyZSA9IHN0cmNtcCAoZG9tYWlubmFtZSwgYmluZGluZy0+ZG9tYWlubmFtZSk7CisgICAgICBpZiAoY29tcGFyZSA9PSAwKQorCS8qIFdlIGZvdW5kIGl0ISAgKi8KKwlicmVhazsKKyAgICAgIGlmIChjb21wYXJlIDwgMCkKKwl7CisJICAvKiBJdCBpcyBub3QgaW4gdGhlIGxpc3QuICAqLworCSAgYmluZGluZyA9IE5VTEw7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIGlmIChiaW5kaW5nICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKGRpcm5hbWVwKQorCXsKKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisKKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKwkgICAgKmRpcm5hbWVwID0gYmluZGluZy0+ZGlybmFtZTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZSBkb21haW4gaXMgYWxyZWFkeSBib3VuZC4gIElmIHRoZSBuZXcgdmFsdWUgYW5kIHRoZSBvbGQKKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKwkJIG9sZCBiaW5kaW5nLiAgKi8KKwkgICAgICBjaGFyICpyZXN1bHQgPSBiaW5kaW5nLT5kaXJuYW1lOworCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKwkJeworCQkgIGlmIChzdHJjbXAgKGRpcm5hbWUsIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkgPT0gMCkKKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKwkJICBlbHNlCisJCSAgICB7CisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisjZWxzZQorCQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CisJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKwkJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKwkJCW1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworI2VuZGlmCisJCSAgICB9CisKKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorCQkgICAgeworCQkgICAgICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKworCQkgICAgICBiaW5kaW5nLT5kaXJuYW1lID0gcmVzdWx0OworCQkgICAgICBtb2RpZmllZCA9IDE7CisJCSAgICB9CisJCX0KKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChjb2Rlc2V0cCkKKwl7CisJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworCisJICBpZiAoY29kZXNldCA9PSBOVUxMKQorCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisJCSBvbmUgYXJlIGVxdWFsIHdlIHNpbXBseSBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlIHJlcGxhY2UgdGhlCisJCSBvbGQgYmluZGluZy4gICovCisJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKwkgICAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgc3RyY21wIChjb2Rlc2V0LCByZXN1bHQpICE9IDApCisJCXsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKwkJICByZXN1bHQgPSBzdHJkdXAgKGNvZGVzZXQpOworI2Vsc2UKKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKyNlbmRpZgorCisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKwkJICAgIHsKKwkJICAgICAgZnJlZSAoYmluZGluZy0+Y29kZXNldCk7CisKKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKwkJICAgICAgYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisJCSAgICAgIG1vZGlmaWVkID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICAgICpjb2Rlc2V0cCA9IHJlc3VsdDsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorCSAgICYmIChjb2Rlc2V0cCA9PSBOVUxMIHx8ICpjb2Rlc2V0cCA9PSBOVUxMKSkKKyAgICB7CisgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisgICAgICBpZiAoZGlybmFtZXApCisJKmRpcm5hbWVwID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworICAgICAgaWYgKGNvZGVzZXRwKQorCSpjb2Rlc2V0cCA9IE5VTEw7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogV2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgYmluZGluZy4gICovCisgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CisgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorCShzdHJ1Y3QgYmluZGluZyAqKSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3QgYmluZGluZywgZG9tYWlubmFtZSkgKyBsZW4pOworCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAobmV3X2JpbmRpbmcgPT0gTlVMTCwgMCkpCisJZ290byBmYWlsZWQ7CisKKyAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisKKyAgICAgIGlmIChkaXJuYW1lcCkKKwl7CisJICBjb25zdCBjaGFyICpkaXJuYW1lID0gKmRpcm5hbWVwOworCisJICBpZiAoZGlybmFtZSA9PSBOVUxMKQorCSAgICAvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gICovCisJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisJCWRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisJICAgICAgZWxzZQorCQl7CisJCSAgY2hhciAqcmVzdWx0OworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorCQkgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisjZWxzZQorCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKwkJICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisJCSAgbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisjZW5kaWYKKwkJICBkaXJuYW1lID0gcmVzdWx0OworCQl9CisJICAgIH0KKwkgICpkaXJuYW1lcCA9IGRpcm5hbWU7CisJICBuZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIGRpcm5hbWU7CisJfQorICAgICAgZWxzZQorCS8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKworICAgICAgbmV3X2JpbmRpbmctPmNvZGVzZXRfY250ciA9IDA7CisKKyAgICAgIGlmIChjb2Rlc2V0cCkKKwl7CisJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworCisJICBpZiAoY29kZXNldCAhPSBOVUxMKQorCSAgICB7CisJICAgICAgY2hhciAqcmVzdWx0OworCisjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCisJICAgICAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworI2Vsc2UKKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisJICAgICAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisJICAgICAgbWVtY3B5IChyZXN1bHQsIGNvZGVzZXQsIGxlbik7CisjZW5kaWYKKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworCSAgICAgIG5ld19iaW5kaW5nLT5jb2Rlc2V0X2NudHIrKzsKKwkgICAgfQorCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKwkgIG5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gKGNoYXIgKikgY29kZXNldDsKKwl9CisgICAgICBlbHNlCisJbmV3X2JpbmRpbmctPmNvZGVzZXQgPSBOVUxMOworCisgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICBpZiAoX25sX2RvbWFpbl9iaW5kaW5ncyA9PSBOVUxMCisJICB8fCBzdHJjbXAgKGRvbWFpbm5hbWUsIF9ubF9kb21haW5fYmluZGluZ3MtPmRvbWFpbm5hbWUpIDwgMCkKKwl7CisJICBuZXdfYmluZGluZy0+bmV4dCA9IF9ubF9kb21haW5fYmluZGluZ3M7CisJICBfbmxfZG9tYWluX2JpbmRpbmdzID0gbmV3X2JpbmRpbmc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOworCSAgd2hpbGUgKGJpbmRpbmctPm5leHQgIT0gTlVMTAorCQkgJiYgc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5uZXh0LT5kb21haW5uYW1lKSA+IDApCisJICAgIGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0OworCisJICBuZXdfYmluZGluZy0+bmV4dCA9IGJpbmRpbmctPm5leHQ7CisJICBiaW5kaW5nLT5uZXh0ID0gbmV3X2JpbmRpbmc7CisJfQorCisgICAgICBtb2RpZmllZCA9IDE7CisKKyAgICAgIC8qIEhlcmUgd2UgZGVhbCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgKi8KKyAgICAgIGlmICgwKQorCXsKKwlmYWlsZWRfY29kZXNldDoKKwkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKwlmYWlsZWRfZGlybmFtZToKKwkgIGZyZWUgKG5ld19iaW5kaW5nKTsKKwlmYWlsZWQ6CisJICBpZiAoZGlybmFtZXApCisJICAgICpkaXJuYW1lcCA9IE5VTEw7CisJICBpZiAoY29kZXNldHApCisJICAgICpjb2Rlc2V0cCA9IE5VTEw7CisJfQorICAgIH0KKworICAvKiBJZiB3ZSBtb2RpZmllZCBhbnkgYmluZGluZywgd2UgZmx1c2ggdGhlIGNhY2hlcy4gICovCisgIGlmIChtb2RpZmllZCkKKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisKKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKK30KKworLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCitjaGFyICoKK0JJTkRURVhURE9NQUlOIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQoreworICBzZXRfYmluZGluZ192YWx1ZXMgKGRvbWFpbm5hbWUsICZkaXJuYW1lLCBOVUxMKTsKKyAgcmV0dXJuIChjaGFyICopIGRpcm5hbWU7Cit9CisKKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworY2hhciAqCitCSU5EX1RFWFRET01BSU5fQ09ERVNFVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqY29kZXNldCkKK3sKKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCBOVUxMLCAmY29kZXNldCk7CisgIHJldHVybiAoY2hhciAqKSBjb2Rlc2V0OworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19iaW5kdGV4dGRvbWFpbiwgYmluZHRleHRkb21haW4pOword2Vha19hbGlhcyAoX19iaW5kX3RleHRkb21haW5fY29kZXNldCwgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9jb25maWcuY2hhcnNldCBiL2UyZnNwcm9ncy9pbnRsL2NvbmZpZy5jaGFyc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDQ1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9jb25maWcuY2hhcnNldApAQCAtMCwwICsxLDYwOCBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisjICAgVVNBLgorIworIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKyMgICAgQUxJQVMgIENBTk9OSUNBTAorIworIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKyMgQUxJQVMgaXMgY29tcGFyZWQgaW4gYSBjYXNlIHNlbnNpdGl2ZSB3YXkuCisjCisjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKyMgSXQgbXVzdCBiZSBhbiBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgbGliaWNvbnYuIFN1cHBvcnQgYnkgR05VIGxpYmMgaXMKKyMgYWxzbyBkZXNpcmFibGUuIENBTk9OSUNBTCBpcyBjYXNlIGluc2Vuc2l0aXZlLiBVc3VhbGx5IGFuIHVwcGVyIGNhc2UKKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorIyBUaGUgY3VycmVudCBsaXN0IG9mIEdOVSBjYW5vbmljYWwgY2hhcnNldCBuYW1lcyBpcyBhcyBmb2xsb3dzLgorIworIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKyMgICBBU0NJSSwgQU5TSV9YMy40LTE5NjggICAgICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIElTTy04ODU5LTEgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBJU08tODg1OS0zICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcworIyAgIElTTy04ODU5LTQgICAgICAgICAgICAgIFkgICBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSVNPLTg4NTktNiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IHNvbGFyaXMKKyMgICBJU08tODg1OS03ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworIyAgIElTTy04ODU5LTkgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisjICAgSVNPLTg4NTktMTMgICAgICAgICAgICAgICAgIGdsaWJjCisjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisjICAgSVNPLTg4NTktMTUgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBmcmVlYnNkCisjICAgS09JOC1SICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKyMgICBLT0k4LVQgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBDUDQzNyAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODUwICAgICAgICAgICAgICAgICAgICAgICBhaXggb3NmIGRvcworIyAgIENQODUyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NTYgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQODU3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjIgICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQODY0ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisjICAgQ1A4NjYgICAgICAgICAgICAgICAgICAgICAgIGZyZWVic2QgZGFyd2luIGRvcworIyAgIENQODY5ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisjICAgQ1A5MjIgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTMyICAgICAgICAgICAgICAgICAgICAgICBhaXggd29lMzIgZG9zCisjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorIyAgIENQOTQ5ICAgICAgICAgICAgICAgICAgICAgICBvc2Ygd29lMzIgZG9zCisjICAgQ1A5NTAgICAgICAgICAgICAgICAgICAgICAgIHdvZTMyIGRvcworIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDExMjQgICAgICAgICAgICAgICAgICAgICAgYWl4CisjICAgQ1AxMTI1ICAgICAgICAgICAgICAgICAgICAgIGRvcworIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKyMgICBDUDEyNTAgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKyMgICBDUDEyNTEgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyBkYXJ3aW4gd29lMzIKKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisjICAgQ1AxMjUzICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU0ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisjICAgQ1AxMjU2ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgQ1AxMjU3ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIEVVQy1KUCAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgRVVDLUtSICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworIyAgIEJJRzUgICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorIyAgIEJJRzUtSEtTQ1MgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzCisjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKyMgICBHQjE4MDMwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcworIyAgIFNISUZUX0pJUyAgICAgICAgICAgICAgIFkgICBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKyMgICBUSVMtNjIwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKyMgICBWSVNDSUkgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMKKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBHRU9SR0lBTi1QUyAgICAgICAgICAgICAgICAgZ2xpYmMKKyMgICBIUC1ST01BTjggICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtR1JFRUs4ICAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBIUC1IRUJSRVc4ICAgICAgICAgICAgICAgICAgaHB1eAorIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisjICAgSFAtS0FOQTggICAgICAgICAgICAgICAgICAgIGhwdXgKKyMgICBERUMtS0FOSkkgICAgICAgICAgICAgICAgICAgb3NmCisjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorIyAgIFVURi04ICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworIworIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKyMgSW50ZXJuZXQgcHJvdG9jb2xzIGZvciBpbmZvcm1hdGlvbiBpbnRlcmNoYW5nZSAobWFpbCwgbmV3cywgZXRjLikuCisjCisjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworIyBtdXN0IHVuZGVyc3RhbmQgYm90aCBuYW1lcyBhbmQgdHJlYXQgdGhlbSBhcyBlcXVpdmFsZW50LgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisKK2hvc3Q9IiQxIgorb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorZWNobyAiIyBUaGlzIGZpbGUgY29udGFpbnMgYSB0YWJsZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmcgYWxpYXNlcywiCitlY2hvICIjIHN1aXRhYmxlIGZvciBvcGVyYXRpbmcgc3lzdGVtICcke29zfScuIgorZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisjIExpc3Qgb2YgcmVmZXJlbmNlcywgdXBkYXRlZCBkdXJpbmcgaW5zdGFsbGF0aW9uOgorZWNobyAiIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICIKK2Nhc2UgIiRvcyIgaW4KKyAgICBsaW51eC1nbnVsaWJjMSopCisJIyBMaW51eCBsaWJjNSBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCWVjaG8gIkMgQVNDSUkiCisJZWNobyAiUE9TSVggQVNDSUkiCisJZm9yIGwgaW4gYWYgYWZfWkEgY2EgY2FfRVMgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgXAorCSAgICAgICAgIGVuIGVuX0FVIGVuX0JXIGVuX0NBIGVuX0RLIGVuX0dCIGVuX0lFIGVuX05aIGVuX1VTIGVuX1pBIFwKKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisJICAgICAgICAgZXNfSE4gZXNfTVggZXNfUEEgZXNfUEUgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgXAorCSAgICAgICAgIGV0X0VFIGV1IGV1X0VTIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIFwKKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisJICAgICAgICAgaXRfSVQga2wga2xfR0wgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gcHQgcHRfQlIgcHRfUFQgc3YgXAorCSAgICAgICAgIHN2X0ZJIHN2X1NFOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTEgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTE1IElTTy04ODU5LTE1IgorCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKwkgIGVjaG8gIiRsQGV1cm8gSVNPLTg4NTktMTUiCisJICBlY2hvICIkbC5jcC00MzcgQ1A0MzciCisJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisJICBlY2hvICIkbC5jcC0xMjUyIENQMTI1MiIKKwkgIGVjaG8gIiRsLmNwLTEyNTJAZXVybyBDUDEyNTIiCisJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBjcyBjc19DWiBociBocl9IUiBodSBodV9IVSBwbCBwbF9QTCBybyByb19STyBzayBza19TSyBzbCBcCisJICAgICAgICAgc2xfU0kgc3Igc3JfQ1Mgc3JfWVU7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS0yIgorCSAgZWNobyAiJGwuaXNvLTg4NTktMiBJU08tODg1OS0yIgorCSAgZWNobyAiJGwuY3AtODUyIENQODUyIgorCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS01IgorCSAgZWNobyAiJGwuaXNvLTg4NTktNSBJU08tODg1OS01IgorCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKwkgIGVjaG8gIiRsLmNwLTg2NiBDUDg2NiIKKwkgIGVjaG8gIiRsLmNwLTEyNTEgQ1AxMjUxIgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJZG9uZQorCWZvciBsIGluIGFyIGFyX1NBOyBkbworCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKwkgIGVjaG8gIiRsLmlzby04ODU5LTYgSVNPLTg4NTktNiIKKwkgIGVjaG8gIiRsLmNwLTg2NCBDUDg2NCIKKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworCSAgZWNobyAiJGwuY3AtMTI1NiBDUDEyNTYiCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJZm9yIGwgaW4gZWwgZWxfR1IgZ3IgZ3JfR1I7IGRvCisJICBlY2hvICIkbCBJU08tODg1OS03IgorCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorCSAgZWNobyAiJGwuY3AtODY5IENQODY5IgorCSAgZWNobyAiJGwuY3AtMTI1MyBDUDEyNTMiCisJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisJICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBoZSBoZV9JTCBpdyBpd19JTDsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTgiCisJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisJICBlY2hvICIkbC5jcC04NjIgQ1A4NjIiCisJICBlY2hvICIkbC5jcC0xMjU1IENQMTI1NSIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiB0ciB0cl9UUjsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisJICBlY2hvICIkbC5pc28tODg1OS05IElTTy04ODU5LTkiCisJICBlY2hvICIkbC5jcC04NTcgQ1A4NTciCisJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorCWRvbmUKKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKwkgICNlY2hvICIkbCBCQUxUSUMiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorCSAgZWNobyAiJGwgSVNPLTg4NTktMTMiCisJZG9uZQorCWZvciBsIGluIHJ1X1VBIHVrIHVrX1VBOyBkbworCSAgZWNobyAiJGwgS09JOC1VIgorCWRvbmUKKwlmb3IgbCBpbiB6aCB6aF9DTjsgZG8KKwkgICNlY2hvICIkbCBHQl8yMzEyLTgwIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKwkgIGVjaG8gIiRsIEdCMjMxMiIKKwlkb25lCisJZm9yIGwgaW4gamEgamFfSlAgamFfSlAuRVVDOyBkbworCSAgZWNobyAiJGwgRVVDLUpQIgorCWRvbmUKKwlmb3IgbCBpbiBrbyBrb19LUjsgZG8KKwkgIGVjaG8gIiRsIEVVQy1LUiIKKwlkb25lCisJZm9yIGwgaW4gdGggdGhfVEg7IGRvCisJICBlY2hvICIkbCBUSVMtNjIwIgorCWRvbmUKKwlmb3IgbCBpbiBmYSBmYV9JUjsgZG8KKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKwlkb25lCisJOzsKKyAgICBsaW51eCogfCAqLWdudSopCisJIyBXaXRoIGdsaWJjLTIuMSBvciBuZXdlciwgd2UgZG9uJ3QgbmVlZCBhbnkgY2Fub25pY2FsaXphdGlvbiwKKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorCSMgR05VIGNhbm9uaWNhbCBuYW1lcyBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGUgTWFrZWZpbGUgZG9lcyBub3QKKwkjIG5lZWQgdG8gaW5zdGFsbCB0aGUgYWxpYXMgZmlsZSBhdCBhbGwuCisJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisJZWNobyAiSVNPXzY0Ni5JUlY6MTk4MyBBU0NJSSIKKwk7OworICAgIGFpeCopCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS02IElTTy04ODU5LTYiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKwllY2hvICJJQk0tODUwIENQODUwIgorCWVjaG8gIklCTS04NTYgQ1A4NTYiCisJZWNobyAiSUJNLTkyMSBJU08tODg1OS0xMyIKKwllY2hvICJJQk0tOTIyIENQOTIyIgorCWVjaG8gIklCTS05MzIgQ1A5MzIiCisJZWNobyAiSUJNLTk0MyBDUDk0MyIKKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisJZWNobyAiSUJNLTExMjQgQ1AxMTI0IgorCWVjaG8gIklCTS0xMTI5IENQMTEyOSIKKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisJZWNobyAiSUJNLWV1Y0NOIEdCMjMxMiIKKwllY2hvICJJQk0tZXVjSlAgRVVDLUpQIgorCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisJZWNobyAiSUJNLWV1Y1RXIEVVQy1UVyIKKwllY2hvICJiaWc1IEJJRzUiCisJZWNobyAiR0JLIEdCSyIKKwllY2hvICJUSVMtNjIwIFRJUy02MjAiCisJZWNobyAiVVRGLTggVVRGLTgiCisJOzsKKyAgICBocHV4KikKKwllY2hvICJpc284ODU5MSBJU08tODg1OS0xIgorCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisJZWNobyAiaXNvODg1OTUgSVNPLTg4NTktNSIKKwllY2hvICJpc284ODU5NiBJU08tODg1OS02IgorCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisJZWNobyAiaXNvODg1OTggSVNPLTg4NTktOCIKKwllY2hvICJpc284ODU5OSBJU08tODg1OS05IgorCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKwllY2hvICJyb21hbjggSFAtUk9NQU44IgorCWVjaG8gImFyYWJpYzggSFAtQVJBQklDOCIKKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorCWVjaG8gImhlYnJldzggSFAtSEVCUkVXOCIKKwllY2hvICJ0dXJraXNoOCBIUC1UVVJLSVNIOCIKKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKwllY2hvICJ0aXM2MjAgVElTLTYyMCIKKwllY2hvICJiaWc1IEJJRzUiCisJZWNobyAiZXVjSlAgRVVDLUpQIgorCWVjaG8gImV1Y0tSIEVVQy1LUiIKKwllY2hvICJldWNUVyBFVUMtVFciCisJZWNobyAiaHAxNUNOIEdCMjMxMiIKKwkjZWNobyAiY2NkYyA/IiAjIHdoYXQgaXMgdGhpcz8KKwllY2hvICJTSklTIFNISUZUX0pJUyIKKwllY2hvICJ1dGY4IFVURi04IgorCTs7CisgICAgaXJpeCopCisJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisJZWNobyAiSVNPODg1OS05IElTTy04ODU5LTkiCisJZWNobyAiZXVjQ04gR0IyMzEyIgorCWVjaG8gImV1Y0pQIEVVQy1KUCIKKwllY2hvICJldWNLUiBFVUMtS1IiCisJZWNobyAiZXVjVFcgRVVDLVRXIgorCTs7CisgICAgb3NmKikKKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKwllY2hvICJJU084ODU5LTggSVNPLTg4NTktOCIKKwllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImNwODUwIENQODUwIgorCWVjaG8gImJpZzUgQklHNSIKKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisJZWNobyAiZGVjaGFuemkgR0IyMzEyIgorCWVjaG8gImRlY2thbmppIERFQy1LQU5KSSIKKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorCWVjaG8gImV1Y0pQIEVVQy1KUCIKKwllY2hvICJldWNLUiBFVUMtS1IiCisJZWNobyAiZXVjVFcgRVVDLVRXIgorCWVjaG8gIkdCSyBHQksiCisJZWNobyAiS1NDNTYwMSBDUDk0OSIKKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorCWVjaG8gIlRBQ1RJUyBUSVMtNjIwIgorCWVjaG8gIlVURi04IFVURi04IgorCTs7CisgICAgc29sYXJpcyopCisJZWNobyAiNjQ2IEFTQ0lJIgorCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorCWVjaG8gIklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisJZWNobyAia29pOC1yIEtPSTgtUiIKKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorCWVjaG8gIkJJRzUgQklHNSIKKwllY2hvICJCaWc1LUhLU0NTIEJJRzUtSEtTQ1MiCisJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKwllY2hvICJHQksgR0JLIgorCWVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisJZWNobyAiNTYwMSBFVUMtS1IiCisJZWNobyAia29fS1Iuam9oYXA5MiBKT0hBQiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiUENLIFNISUZUX0pJUyIKKwllY2hvICJUSVM2MjAuMjUzMyBUSVMtNjIwIgorCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisJZWNobyAiVVRGLTggVVRGLTgiCisJOzsKKyAgICBmcmVlYnNkKiB8IG9zMiopCisJIyBGcmVlQlNEIDQuMiBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCSMgTGlrZXdpc2UgZm9yIE9TLzIuIE9TLzIgaGFzIFhGcmVlODYganVzdCBsaWtlIEZyZWVCU0QuIEp1c3QKKwkjIHJldXNlIEZyZWVCU0QncyBsb2NhbGUgZGF0YSBmb3IgT1MvMi4KKwllY2hvICJDIEFTQ0lJIgorCWVjaG8gIlVTLUFTQ0lJIEFTQ0lJIgorCWZvciBsIGluIGxhX0xOIGx0X0xOOyBkbworCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisJZG9uZQorCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisJICAgICAgICAgbHRfTE4gbmxfQkUgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisJICBlY2hvICIkbC5JU09fODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKwlkb25lCisJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gbHRfTE4gcGxfUEwgc2xfU0k7IGRvCisJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisJZG9uZQorCWZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorCWRvbmUKKwlmb3IgbCBpbiBydV9SVSBydV9TVTsgZG8KKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisJICBlY2hvICIkbC5JU09fODg1OS01IElTTy04ODU5LTUiCisJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKwlkb25lCisJZWNobyAidWtfVUEuS09JOC1VIEtPSTgtVSIKKwllY2hvICJ6aF9UVy5CSUc1IEJJRzUiCisJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorCWVjaG8gInpoX0NOLkVVQyBHQjIzMTIiCisJZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKwllY2hvICJqYV9KUC5TaGlmdF9KSVMgU0hJRlRfSklTIgorCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCisJOzsKKyAgICBuZXRic2QqKQorCWVjaG8gIjY0NiBBU0NJSSIKKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorCWVjaG8gImV1Y0NOIEdCMjMxMiIKKwllY2hvICJldWNKUCBFVUMtSlAiCisJZWNobyAiZXVjS1IgRVVDLUtSIgorCWVjaG8gImV1Y1RXIEVVQy1UVyIKKwllY2hvICJCSUc1IEJJRzUiCisJZWNobyAiU0pJUyBTSElGVF9KSVMiCisJOzsKKyAgICBkYXJ3aW4qKQorCSMgRGFyd2luIDYuOCBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCWVjaG8gIkMgQVNDSUkiCisJZm9yIGwgaW4gZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgbGFfTE47IGRvCisJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKwlkb25lCisJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKwkgICAgICAgICBubF9OTCBub19OTyBwdF9QVCBzdl9TRTsgZG8KKwkgIGVjaG8gIiRsIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisJZG9uZQorCWZvciBsIGluIGxhX0xOOyBkbworCSAgZWNobyAiJGwuSVNPODg1OS0xIElTTy04ODU5LTEiCisJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorCWRvbmUKKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBwbF9QTCBzbF9TSTsgZG8KKwkgIGVjaG8gIiRsLklTTzg4NTktMiBJU08tODg1OS0yIgorCWRvbmUKKwlmb3IgbCBpbiBsYV9MTiBsdF9MVDsgZG8KKwkgIGVjaG8gIiRsLklTTzg4NTktNCBJU08tODg1OS00IgorCWRvbmUKKwlmb3IgbCBpbiBydV9SVTsgZG8KKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorCWRvbmUKKwlmb3IgbCBpbiBiZ19CRzsgZG8KKwkgIGVjaG8gIiRsLkNQMTI1MSBDUDEyNTEiCisJZG9uZQorCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisJZWNobyAiemhfVFcuQklHNSBCSUc1IgorCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorCWVjaG8gImphX0pQLkVVQyBFVUMtSlAiCisJZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCisJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKwk7OworICAgIGJlb3MqKQorCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorCWVjaG8gIiogVVRGLTgiCisJOzsKKyAgICBtc2Rvc2RqZ3BwKikKKwkjIERKR1BQIDIuMDMgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKwkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwllY2hvICIjIgorCWVjaG8gIiMgVGhlIGVuY29kaW5ncyBnaXZlbiBoZXJlIG1heSBub3QgYWxsIGJlIGNvcnJlY3QuIgorCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorCWVjaG8gIiMgY291bnRyeSBpcyBub3QgdGhlIG9uZSB5b3VyIERPUyBtYWNoaW5lIGFjdHVhbGx5IHVzZXMsIGp1c3QiCisJZWNobyAiIyBjb3JyZWN0IGl0IGluIHRoaXMgZmlsZSwgYW5kIHNlbmQgYSBtYWlsIHRvIgorCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisJZWNobyAiIyBhbmQgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiIKKwllY2hvICIjIgorCWVjaG8gIkMgQVNDSUkiCisJIyBJU08tODg1OS0xIGxhbmd1YWdlcworCWVjaG8gImNhIENQODUwIgorCWVjaG8gImNhX0VTIENQODUwIgorCWVjaG8gImRhIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gImRhX0RLIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gImRlIENQODUwIgorCWVjaG8gImRlX0FUIENQODUwIgorCWVjaG8gImRlX0NIIENQODUwIgorCWVjaG8gImRlX0RFIENQODUwIgorCWVjaG8gImVuIENQODUwIgorCWVjaG8gImVuX0FVIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImVuX0NBIENQODUwIgorCWVjaG8gImVuX0dCIENQODUwIgorCWVjaG8gImVuX05aIENQNDM3IgorCWVjaG8gImVuX1VTIENQNDM3IgorCWVjaG8gImVuX1pBIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImVzIENQODUwIgorCWVjaG8gImVzX0FSIENQODUwIgorCWVjaG8gImVzX0JPIENQODUwIgorCWVjaG8gImVzX0NMIENQODUwIgorCWVjaG8gImVzX0NPIENQODUwIgorCWVjaG8gImVzX0NSIENQODUwIgorCWVjaG8gImVzX0NVIENQODUwIgorCWVjaG8gImVzX0RPIENQODUwIgorCWVjaG8gImVzX0VDIENQODUwIgorCWVjaG8gImVzX0VTIENQODUwIgorCWVjaG8gImVzX0dUIENQODUwIgorCWVjaG8gImVzX0hOIENQODUwIgorCWVjaG8gImVzX01YIENQODUwIgorCWVjaG8gImVzX05JIENQODUwIgorCWVjaG8gImVzX1BBIENQODUwIgorCWVjaG8gImVzX1BZIENQODUwIgorCWVjaG8gImVzX1BFIENQODUwIgorCWVjaG8gImVzX1NWIENQODUwIgorCWVjaG8gImVzX1VZIENQODUwIgorCWVjaG8gImVzX1ZFIENQODUwIgorCWVjaG8gImV0IENQODUwIgorCWVjaG8gImV0X0VFIENQODUwIgorCWVjaG8gImV1IENQODUwIgorCWVjaG8gImV1X0VTIENQODUwIgorCWVjaG8gImZpIENQODUwIgorCWVjaG8gImZpX0ZJIENQODUwIgorCWVjaG8gImZyIENQODUwIgorCWVjaG8gImZyX0JFIENQODUwIgorCWVjaG8gImZyX0NBIENQODUwIgorCWVjaG8gImZyX0NIIENQODUwIgorCWVjaG8gImZyX0ZSIENQODUwIgorCWVjaG8gImdhIENQODUwIgorCWVjaG8gImdhX0lFIENQODUwIgorCWVjaG8gImdkIENQODUwIgorCWVjaG8gImdkX0dCIENQODUwIgorCWVjaG8gImdsIENQODUwIgorCWVjaG8gImdsX0VTIENQODUwIgorCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworCWVjaG8gImlkX0lEIENQODUwIiAjIG5vdCBDUDQzNyA/PworCWVjaG8gImlzIENQODYxIiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIml0IENQODUwIgorCWVjaG8gIml0X0NIIENQODUwIgorCWVjaG8gIml0X0lUIENQODUwIgorCWVjaG8gImx0IENQNzc1IgorCWVjaG8gImx0X0xUIENQNzc1IgorCWVjaG8gImx2IENQNzc1IgorCWVjaG8gImx2X0xWIENQNzc1IgorCWVjaG8gIm5iIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5sIENQODUwIgorCWVjaG8gIm5sX0JFIENQODUwIgorCWVjaG8gIm5sX05MIENQODUwIgorCWVjaG8gIm5uIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5uX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworCWVjaG8gIm5vX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworCWVjaG8gInB0IENQODUwIgorCWVjaG8gInB0X0JSIENQODUwIgorCWVjaG8gInB0X1BUIENQODUwIgorCWVjaG8gInN2IENQODUwIgorCWVjaG8gInN2X1NFIENQODUwIgorCSMgSVNPLTg4NTktMiBsYW5ndWFnZXMKKwllY2hvICJjcyBDUDg1MiIKKwllY2hvICJjc19DWiBDUDg1MiIKKwllY2hvICJociBDUDg1MiIKKwllY2hvICJocl9IUiBDUDg1MiIKKwllY2hvICJodSBDUDg1MiIKKwllY2hvICJodV9IVSBDUDg1MiIKKwllY2hvICJwbCBDUDg1MiIKKwllY2hvICJwbF9QTCBDUDg1MiIKKwllY2hvICJybyBDUDg1MiIKKwllY2hvICJyb19STyBDUDg1MiIKKwllY2hvICJzayBDUDg1MiIKKwllY2hvICJza19TSyBDUDg1MiIKKwllY2hvICJzbCBDUDg1MiIKKwllY2hvICJzbF9TSSBDUDg1MiIKKwllY2hvICJzcSBDUDg1MiIKKwllY2hvICJzcV9BTCBDUDg1MiIKKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworCWVjaG8gInNyX0NTIENQODUyIiAjIENQODUyIG9yIENQODY2IG9yIENQODU1ID8/CisJZWNobyAic3JfWVUgQ1A4NTIiICMgQ1A4NTIgb3IgQ1A4NjYgb3IgQ1A4NTUgPz8KKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisJZWNobyAibXQgQ1A4NTAiCisJZWNobyAibXRfTVQgQ1A4NTAiCisJIyBJU08tODg1OS01IGxhbmd1YWdlcworCWVjaG8gImJlIENQODY2IgorCWVjaG8gImJlX0JFIENQODY2IgorCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworCWVjaG8gImJnX0JHIENQODY2IiAjIG5vdCBDUDg1NSA/PworCWVjaG8gIm1rIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworCWVjaG8gInJ1IENQODY2IgorCWVjaG8gInJ1X1JVIENQODY2IgorCWVjaG8gInVrIENQMTEyNSIKKwllY2hvICJ1a19VQSBDUDExMjUiCisJIyBJU08tODg1OS02IGxhbmd1YWdlcworCWVjaG8gImFyIENQODY0IgorCWVjaG8gImFyX0FFIENQODY0IgorCWVjaG8gImFyX0RaIENQODY0IgorCWVjaG8gImFyX0VHIENQODY0IgorCWVjaG8gImFyX0lRIENQODY0IgorCWVjaG8gImFyX0lSIENQODY0IgorCWVjaG8gImFyX0pPIENQODY0IgorCWVjaG8gImFyX0tXIENQODY0IgorCWVjaG8gImFyX01BIENQODY0IgorCWVjaG8gImFyX09NIENQODY0IgorCWVjaG8gImFyX1FBIENQODY0IgorCWVjaG8gImFyX1NBIENQODY0IgorCWVjaG8gImFyX1NZIENQODY0IgorCSMgSVNPLTg4NTktNyBsYW5ndWFnZXMKKwllY2hvICJlbCBDUDg2OSIKKwllY2hvICJlbF9HUiBDUDg2OSIKKwkjIElTTy04ODU5LTggbGFuZ3VhZ2VzCisJZWNobyAiaGUgQ1A4NjIiCisJZWNobyAiaGVfSUwgQ1A4NjIiCisJIyBJU08tODg1OS05IGxhbmd1YWdlcworCWVjaG8gInRyIENQODU3IgorCWVjaG8gInRyX1RSIENQODU3IgorCSMgSmFwYW5lc2UKKwllY2hvICJqYSBDUDkzMiIKKwllY2hvICJqYV9KUCBDUDkzMiIKKwkjIENoaW5lc2UKKwllY2hvICJ6aF9DTiBHQksiCisJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisJIyBLb3JlYW4KKwllY2hvICJrciBDUDk0OSIgICAgIyBub3QgQ1A5MzQgPz8KKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKwkjIFRoYWkKKwllY2hvICJ0aCBDUDg3NCIKKwllY2hvICJ0aF9USCBDUDg3NCIKKwkjIE90aGVyCisJZWNobyAiZW8gQ1A4NTAiCisJZWNobyAiZW9fRU8gQ1A4NTAiCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2RjZ2V0dGV4dC5jIGIvZTJmc3Byb2dzL2ludGwvZGNnZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwYWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2RjZ2V0dGV4dC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBEQ0dFVFRFWFQgX19kY2dldHRleHQKKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisjZWxzZQorIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorICAgbG9jYWxlLiAgKi8KK2NoYXIgKgorRENHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQoreworICByZXR1cm4gRENJR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIE5VTEwsIDAsIDAsIGNhdGVnb3J5KTsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK0lOVERFRihfX2RjZ2V0dGV4dCkKK3dlYWtfYWxpYXMgKF9fZGNnZXR0ZXh0LCBkY2dldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9kY2lnZXR0ZXh0LmMgYi9lMmZzcHJvZ3MvaW50bC9kY2lnZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2NzhjZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2RjaWdldHRleHQuYwpAQCAtMCwwICsxLDEyMjIgQEAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbCBkY2lnZXR0ZXh0IGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBjcHkoKS4KKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIF9fR05VQ19fCisjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorI2Vsc2UKKyMgaWZkZWYgX01TQ19WRVIKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsc2UKKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisjICBlbHNlCisjICAgaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZm5kZWYgYWxsb2NhCitjaGFyICphbGxvY2EgKCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIGVycm5vCitleHRlcm4gaW50IGVycm5vOworI2VuZGlmCisjaWZuZGVmIF9fc2V0X2Vycm5vCisjIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBfTElCQworICAvKiBHdWVzcyB3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS4KKyAgICAgU2V0IHRvIDEgb25seSBpZiB5b3Uga25vdyBmb3Igc3VyZS4gIEluIGNhc2Ugb2YgZG91YnQsIHNldCB0byAwLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX2FybV9fIHx8IGRlZmluZWQgX19pMzg2X18gXAorICAgICB8fCBkZWZpbmVkIF9fbTY4a19fIHx8IGRlZmluZWQgX19zMzkwX18KKyMgIGRlZmluZSBJTlRESVYwX1JBSVNFU19TSUdGUEUgMQorIyBlbHNlCisjICBkZWZpbmUgSU5URElWMF9SQUlTRVNfU0lHRlBFIDAKKyMgZW5kaWYKKyNlbmRpZgorI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKyMgaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKyNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorCisvKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyNlbHNlCisvKiBQcm92aWRlIGR1bW15IGltcGxlbWVudGF0aW9uIGlmIHRoaXMgaXMgb3V0c2lkZSBnbGliYy4gICovCisjIGRlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpCisjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKENMQVNTLCBOQU1FKQorIyBkZWZpbmUgX19saWJjX3J3bG9ja19yZGxvY2soTkFNRSkKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisjZW5kaWYKKworLyogQWxpZ25tZW50IG9mIHR5cGVzLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZUEUpCisjZWxzZQorIyBkZWZpbmUgYWxpZ25vZihUWVBFKSBcCisgICAgKChpbnQpICYoKHN0cnVjdCB7IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQorI2VuZGlmCisKKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKyAgIG5hbWVzIHRoYW4gdGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiBHTlUgbGliYywgb3RoZXJ3aXNlIHByb2dyYW1zCisgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKyNpZiAhZGVmaW5lZCBfTElCQworIyBkZWZpbmUgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4gbGliaW50bF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluCisjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKyMgZGVmaW5lIF9ubF9kb21haW5fYmluZGluZ3MgbGliaW50bF9ubF9kb21haW5fYmluZGluZ3MKKyNlbmRpZgorCisvKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCisjaWZuZGVmIG9mZnNldG9mCisjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKyNpZmRlZiBfTElCQworLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CisgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisjIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKyMgaWZuZGVmIHN0cGNweQorIyAgZGVmaW5lIHN0cGNweSBfX3N0cGNweQorIyBlbmRpZgorIyBkZWZpbmUgdGZpbmQgX190ZmluZAorI2Vsc2UKKyMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKK2NoYXIgKmdldHdkICgpOworIyAgZGVmaW5lIGdldGN3ZChidWYsIG1heCkgZ2V0d2QgKGJ1ZikKKyMgZWxzZQorIyAgaWYgVk1TCisjICAgZGVmaW5lIGdldGN3ZChidWYsIG1heCkgKGdldGN3ZCkgKGJ1ZiwgbWF4LCAwKQorIyAgZWxzZQorY2hhciAqZ2V0Y3dkICgpOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIEhBVkVfU1RQQ1BZCisjZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIG15X3N0cGNweShkZXN0LCBzcmMpCitzdGF0aWMgY2hhciAqc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworIyBlbmRpZgorIyBpZm5kZWYgSEFWRV9NRU1QQ1BZCitzdGF0aWMgdm9pZCAqbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKyNkZWZpbmUgUEFUSF9JTkNSIDMyCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCisgICBQQVRIX01BWCBidXQgbWlnaHQgY2F1c2UgcmVkZWZpbml0aW9uIHdhcm5pbmdzIHdoZW4gc3lzL3BhcmFtLmggaXMKKyAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKyNpZiBkZWZpbmVkIF9QT1NJWF9WRVJTSU9OIHx8IChkZWZpbmVkIEhBVkVfTElNSVRTX0ggJiYgIWRlZmluZWQgX19HTlVDX18pCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX1BBVEhfTUFYCisjIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CisjZW5kaWYKKworI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCisjIGRlZmluZSBQQVRIX01BWCAocGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSA8IDEgPyAxMDI0IDogcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKSkKKyNlbmRpZgorCisvKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworI2lmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCAmJiAhZGVmaW5lZCBQQVRIX01BWCAmJiAhZGVmaW5lZCBNQVhQQVRITEVOCisjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKyMgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfTUFYCisjIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyNlbmRpZgorCisvKiBQYXRobmFtZSBzdXBwb3J0LgorICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IG1heSBiZSBjb25jYXRlbmF0ZWQgdG8gYSBkaXJlY3RvcnkgcGF0aG5hbWUuCisgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorICAgICAmJiAoUClbMV0gPT0gJzonKQorIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSAoSVNTTEFTSCAoKFApWzBdKSB8fCBIQVNfREVWSUNFIChQKSkKKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorICAgIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkpCisjZWxzZQorICAvKiBVbml4ICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSBJU1NMQVNIICgoUClbMF0pCisjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKyAgIGFyZSBzdG9yZWQuICAqLworc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QKK3sKKyAgLyogRG9tYWluIGluIHdoaWNoIHRvIHNlYXJjaC4gICovCisgIGNoYXIgKmRvbWFpbm5hbWU7CisKKyAgLyogVGhlIGNhdGVnb3J5LiAgKi8KKyAgaW50IGNhdGVnb3J5OworCisgIC8qIFN0YXRlIG9mIHRoZSBjYXRhbG9nIGNvdW50ZXIgYXQgdGhlIHBvaW50IHRoZSBzdHJpbmcgd2FzIGZvdW5kLiAgKi8KKyAgaW50IGNvdW50ZXI7CisKKyAgLyogQ2F0YWxvZyB3aGVyZSB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKworICAvKiBBbmQgZmluYWxseSB0aGUgdHJhbnNsYXRpb24uICAqLworICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbjsKKyAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKworICAvKiBQb2ludGVyIHRvIHRoZSBzdHJpbmcgaW4gcXVlc3Rpb24uICAqLworICBjaGFyIG1zZ2lkW1pFUk9dOworfTsKKworLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKKyAgIG9ubHkgaWYgdGhlIHN5c3RlbSBwcm92aWRlcyB0aGUgYHRzZWFyY2gnIGZ1bmN0aW9uIGZhbWlseS4gICovCisjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzZWFyY2guaD4KKworc3RhdGljIHZvaWQgKnJvb3Q7CisKKyMgaWZkZWYgX0xJQkMKKyMgIGRlZmluZSB0c2VhcmNoIF9fdHNlYXJjaAorIyBlbmRpZgorCisvKiBGdW5jdGlvbiB0byBjb21wYXJlIHR3byBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBrbm93biB0cmFuc2xhdGlvbnMuICAqLworc3RhdGljIGludAordHJhbnNjbXAgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworICBjb25zdCBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqczI7CisgIGludCByZXN1bHQ7CisKKyAgczEgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDE7CisgIHMyID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAyOworCisgIHJlc3VsdCA9IHN0cmNtcCAoczEtPm1zZ2lkLCBzMi0+bXNnaWQpOworICBpZiAocmVzdWx0ID09IDApCisgICAgeworICAgICAgcmVzdWx0ID0gc3RyY21wIChzMS0+ZG9tYWlubmFtZSwgczItPmRvbWFpbm5hbWUpOworICAgICAgaWYgKHJlc3VsdCA9PSAwKQorCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorCSAgIG9wZXJhdGlvbikgc2luY2UgaXQgaXMgaG9wZWZ1bGx5IGFsd2F5cyB0aGUgc2FtZSAobmFtZWx5CisJICAgTENfTUVTU0FHRVMpLiAgKi8KKwlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBJTlRWQVJERUYKKyMgZGVmaW5lIElOVFZBUkRFRihuYW1lKQorI2VuZGlmCisjaWZuZGVmIElOVFVTRQorIyBkZWZpbmUgSU5UVVNFKG5hbWUpIG5hbWUKKyNlbmRpZgorCisvKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGRvbWFpbiB1c2VkIGZvciBnZXR0ZXh0KDMpIHByaW9yIGFueSBjYWxsIHRvCisgICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCitjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gYXR0cmlidXRlX2hpZGRlbiA9ICJtZXNzYWdlcyI7CisKKy8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KK2NvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW4KKyAgICAgPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKworLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworI2lmIGRlZmluZWQgX19FTVhfXworZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworI2Vsc2UKK2NvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdID0gTE9DQUxFRElSOworSU5UVkFSREVGIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorI2VuZGlmCisKKy8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorICAgY2FsbHMuICAqLworc3RydWN0IGJpbmRpbmcgKl9ubF9kb21haW5fYmluZGluZ3M7CisKKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgY2hhciAqcGx1cmFsX2xvb2t1cCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCisJCQkgICAgY29uc3QgY2hhciAqdHJhbnNsYXRpb24sIHNpemVfdCB0cmFuc2xhdGlvbl9sZW4pCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCisJCQkJCSBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2lmZGVmIF9MSUJDCisjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisjIGRlZmluZSBjYXRlZ29yeV90b19uYW1lKGNhdGVnb3J5KQlfbmxfY2F0ZWdvcnlfbmFtZXNbY2F0ZWdvcnldCisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgKmNhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkgaW50ZXJuYWxfZnVuY3Rpb247CisjZW5kaWYKKworCisvKiBGb3IgdGhvc2UgbG9vc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisjaWZkZWYgSEFWRV9BTExPQ0EKKy8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKyMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpIC8qIG5vdGhpbmcgKi8KKyNlbHNlCitzdHJ1Y3QgYmxvY2tfbGlzdAoreworICB2b2lkICphZGRyZXNzOworICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKK307CisjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCisgICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCisgICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKyAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKyAgICB9CQkJCQkJCQkJICAgICAgXAorICB9IHdoaWxlICgwKQorIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKyAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorICAgICAgZnJlZSAob2xkLT5hZGRyZXNzKTsJCQkJCQkgICAgICBcCisgICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCisgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyMgdW5kZWYgYWxsb2NhCisjIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCisjIGRlZmluZSBmcmVlYShwKSBmcmVlIChwKQorI2VuZGlmCS8qIGhhdmUgYWxsb2NhICovCisKKworI2lmZGVmIF9MSUJDCisvKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCit0eXBlZGVmIHN0cnVjdCB0cmFuc21lbV9saXN0Cit7CisgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworICBjaGFyIGRhdGFbWkVST107Cit9IHRyYW5zbWVtX2Jsb2NrX3Q7CitzdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHRyYW5zbWVtX2Jsb2NrX3Q7CisjZW5kaWYKKworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisjZWxzZQorIyBkZWZpbmUgRENJR0VUVEVYVCBsaWJpbnRsX2RjaWdldHRleHQKKyNlbmRpZgorCisvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKyNpZmRlZiBfTElCQworX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKCwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKyNlbmRpZgorCisvKiBDaGVja2luZyB3aGV0aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRlcworICAgZWFzaWVyIG1ldGhvZHMgdGhlcmVmb3JlIHdlIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2VjdXJlCisjIGRlZmluZSBERVRFUk1JTkVfU0VDVVJFCisjZWxzZQorIyBpZm5kZWYgSEFWRV9HRVRVSUQKKyMgIGRlZmluZSBnZXR1aWQoKSAwCisjIGVuZGlmCisjIGlmbmRlZiBIQVZFX0dFVEdJRAorIyAgZGVmaW5lIGdldGdpZCgpIDAKKyMgZW5kaWYKKyMgaWZuZGVmIEhBVkVfR0VURVVJRAorIyAgZGVmaW5lIGdldGV1aWQoKSBnZXR1aWQoKQorIyBlbmRpZgorIyBpZm5kZWYgSEFWRV9HRVRFR0lECisjICBkZWZpbmUgZ2V0ZWdpZCgpIGdldGdpZCgpCisjIGVuZGlmCitzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CisjIGRlZmluZSBFTkFCTEVfU0VDVVJFIChlbmFibGVfc2VjdXJlID09IDEpCisjIGRlZmluZSBERVRFUk1JTkVfU0VDVVJFIFwKKyAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCisgICAgewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGlmIChnZXR1aWQgKCkgIT0gZ2V0ZXVpZCAoKSB8fCBnZXRnaWQgKCkgIT0gZ2V0ZWdpZCAoKSkJCSAgICAgIFwKKwllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAgICBcCisgICAgICBlbHNlCQkJCQkJCQkgICAgICBcCisJZW5hYmxlX3NlY3VyZSA9IC0xOwkJCQkJCSAgICAgIFwKKyAgICB9CisjZW5kaWYKKworLyogR2V0IHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24uICAqLworI2luY2x1ZGUgImV2YWwtcGx1cmFsLmgiCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgQ0FURUdPUlkgbG9jYWxlIGFuZCwgaWYgUExVUkFMIGlzIG5vbnplcm8sIHNlYXJjaCBvdmVyIHN0cmluZworICAgZGVwZW5kaW5nIG9uIHRoZSBwbHVyYWwgZm9ybSBkZXRlcm1pbmVkIGJ5IE4uICAqLworY2hhciAqCitEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKwkgICAgaW50IHBsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgbiwgaW50IGNhdGVnb3J5KQoreworI2lmbmRlZiBIQVZFX0FMTE9DQQorICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CisjZW5kaWYKKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworICBzdHJ1Y3QgYmluZGluZyAqYmluZGluZzsKKyAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworICBjb25zdCBjaGFyICpjYXRlZ29yeXZhbHVlOworICBjaGFyICpkaXJuYW1lLCAqeGRvbWFpbm5hbWU7CisgIGNoYXIgKnNpbmdsZV9sb2NhbGU7CisgIGNoYXIgKnJldHZhbDsKKyAgc2l6ZV90IHJldGxlbjsKKyAgaW50IHNhdmVkX2Vycm5vOworI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnNlYXJjaDsKKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKipmb3VuZHAgPSBOVUxMOworICBzaXplX3QgbXNnaWRfbGVuOworI2VuZGlmCisgIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKworICAvKiBJZiBubyByZWFsIE1TR0lEIGlzIGdpdmVuIHJldHVybiBOVUxMLiAgKi8KKyAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisjaWZkZWYgX0xJQkMKKyAgaWYgKGNhdGVnb3J5IDwgMCB8fCBjYXRlZ29yeSA+PSBfX0xDX0xBU1QgfHwgY2F0ZWdvcnkgPT0gTENfQUxMKQorICAgIC8qIEJvZ3VzLiAgKi8KKyAgICByZXR1cm4gKHBsdXJhbCA9PSAwCisJICAgID8gKGNoYXIgKikgbXNnaWQxCisJICAgIC8qIFVzZSB0aGUgR2VybWFuaWMgcGx1cmFsIHJ1bGUuICAqLworCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisjZW5kaWYKKworICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworCisgIC8qIElmIERPTUFJTk5BTUUgaXMgTlVMTCwgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHQgZG9tYWluLiAgSWYKKyAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCisgICAgIGRlZmluaXRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCisgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworCisgIC8qIE9TLzIgc3BlY2lmaWM6IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsaWJpbnRsIHZlcnNpb25zICAqLworI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorICBpZiAoY2F0ZWdvcnkgPT0gTENfTUVTU0FHRVNfQ09NUEFUKQorICAgIGNhdGVnb3J5ID0gTENfTUVTU0FHRVM7CisjZW5kaWYKKworI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKyAgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZDEpICsgMTsKKworICAvKiBUcnkgdG8gZmluZCB0aGUgdHJhbnNsYXRpb24gYW1vbmcgdGhvc2Ugd2hpY2ggd2UgZm91bmQgYXQKKyAgICAgc29tZSB0aW1lLiAgKi8KKyAgc2VhcmNoID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopCisJICAgYWxsb2NhIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKSArIG1zZ2lkX2xlbik7CisgIG1lbWNweSAoc2VhcmNoLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworICBzZWFyY2gtPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBkb21haW5uYW1lOworICBzZWFyY2gtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisKKyAgZm91bmRwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKSB0ZmluZCAoc2VhcmNoLCAmcm9vdCwgdHJhbnNjbXApOworICBmcmVlYSAoc2VhcmNoKTsKKyAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorICAgIHsKKyAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKyAgICAgIGlmIChwbHVyYWwpCisJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoKCpmb3VuZHApLT5kb21haW4sIG4sICgqZm91bmRwKS0+dHJhbnNsYXRpb24sCisJCQkJKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGgpOworICAgICAgZWxzZQorCXJldHZhbCA9IChjaGFyICopICgqZm91bmRwKS0+dHJhbnNsYXRpb247CisKKyAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KKyNlbmRpZgorCisgIC8qIFByZXNlcnZlIHRoZSBgZXJybm8nIHZhbHVlLiAgKi8KKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgb3Igbm90LiAgKi8KKyAgREVURVJNSU5FX1NFQ1VSRTsKKworICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKyAgICAgIGlmIChjb21wYXJlID09IDApCisJLyogV2UgZm91bmQgaXQhICAqLworCWJyZWFrOworICAgICAgaWYgKGNvbXBhcmUgPCAwKQorCXsKKwkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCisJICBiaW5kaW5nID0gTlVMTDsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKyAgICBkaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworICBlbHNlIGlmIChJU19BQlNPTFVURV9QQVRIIChiaW5kaW5nLT5kaXJuYW1lKSkKKyAgICBkaXJuYW1lID0gYmluZGluZy0+ZGlybmFtZTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdlIGhhdmUgYSByZWxhdGl2ZSBwYXRoLiAgTWFrZSBpdCBhYnNvbHV0ZSBub3cuICAqLworICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CisgICAgICBzaXplX3QgcGF0aF9tYXg7CisgICAgICBjaGFyICpyZXQ7CisKKyAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkIGludCkgUEFUSF9NQVg7CisgICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKworICAgICAgZm9yICg7OykKKwl7CisJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKwkgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgZGlybmFtZSk7CisKKwkgIF9fc2V0X2Vycm5vICgwKTsKKwkgIHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpOworCSAgaWYgKHJldCAhPSBOVUxMIHx8IGVycm5vICE9IEVSQU5HRSkKKwkgICAgYnJlYWs7CisKKwkgIHBhdGhfbWF4ICs9IHBhdGhfbWF4IC8gMjsKKwkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKwl9CisKKyAgICAgIGlmIChyZXQgPT0gTlVMTCkKKwkvKiBXZSBjYW5ub3QgZ2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRG9uJ3Qgc2lnbmFsIGFuCisJICAgZXJyb3IgYnV0IHNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgc3RyaW5nLiAgKi8KKwlnb3RvIHJldHVybl91bnRyYW5zbGF0ZWQ7CisKKyAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKyAgICB9CisKKyAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKyAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworICBjYXRlZ29yeXZhbHVlID0gZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpOworCisgIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKyAgeGRvbWFpbm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnluYW1lKQorCQkJCSArIGRvbWFpbm5hbWVfbGVuICsgNSk7CisgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworCisgIHN0cGNweSAobWVtcGNweSAoc3RwY3B5IChzdHBjcHkgKHhkb21haW5uYW1lLCBjYXRlZ29yeW5hbWUpLCAiLyIpLAorCQkgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKwkgICIubW8iKTsKKworICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworICBzaW5nbGVfbG9jYWxlID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5dmFsdWUpICsgMSk7CisgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CisKKworICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKyAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKyAgICAgIHdoaWxlIChjYXRlZ29yeXZhbHVlWzBdICE9ICdcMCcgJiYgY2F0ZWdvcnl2YWx1ZVswXSA9PSAnOicpCisJKytjYXRlZ29yeXZhbHVlOworICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKwl7CisJICAvKiBUaGUgd2hvbGUgY29udGVudHMgb2YgQ0FURUdPUllWQUxVRSBoYXMgYmVlbiBzZWFyY2hlZCBidXQKKwkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKwkgICAgIGJ5IGltcGxpY2l0bHkgYXBwZW5kaW5nIGEgIkMiIGVudHJ5LCBpLmUuIG5vIHRyYW5zbGF0aW9uCisJICAgICB3aWxsIHRha2UgcGxhY2UuICAqLworCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKwkgIHNpbmdsZV9sb2NhbGVbMV0gPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjaGFyICpjcCA9IHNpbmdsZV9sb2NhbGU7CisJICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorCSAgICAqY3ArKyA9ICpjYXRlZ29yeXZhbHVlKys7CisJICAqY3AgPSAnXDAnOworCisJICAvKiBXaGVuIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSB3ZSBtdXN0IG5vdCBhbGxvdyBhY2Nlc3NpbmcgZmlsZXMKKwkgICAgIG91dHNpZGUgdGhlIGRlZGljYXRlZCBkaXJlY3Rvcmllcy4gICovCisJICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKwkgICAgLyogSW5nb3JlIHRoaXMgZW50cnkuICAqLworCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIElmIHRoZSBjdXJyZW50IGxvY2FsZSB2YWx1ZSBpcyBDIChvciBQT1NJWCkgd2UgZG9uJ3QgbG9hZCBhCisJIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCisJICB8fCBzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJQT1NJWCIpID09IDApCisJYnJlYWs7CisKKyAgICAgIC8qIEZpbmQgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBtYXRjaGluZyB0aGUKKwkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworICAgICAgZG9tYWluID0gX25sX2ZpbmRfZG9tYWluIChkaXJuYW1lLCBzaW5nbGVfbG9jYWxlLCB4ZG9tYWlubmFtZSwgYmluZGluZyk7CisKKyAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKwl7CisJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgbXNnaWQxLCAmcmV0bGVuKTsKKworCSAgaWYgKHJldHZhbCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgaW50IGNudDsKKworCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKwkJeworCQkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLT5zdWNjZXNzb3JbY250XSwgYmluZGluZywKKwkJCQkJIG1zZ2lkMSwgJnJldGxlbik7CisKKwkJICBpZiAocmV0dmFsICE9IE5VTEwpCisJCSAgICB7CisJCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorCSAgICB7CisJICAgICAgLyogRm91bmQgdGhlIHRyYW5zbGF0aW9uIG9mIE1TR0lEMSBpbiBkb21haW4gRE9NQUlOOgorCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworCSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMKQorCQl7CisJCSAgLyogQ3JlYXRlIGEgbmV3IGVudHJ5IGFuZCBhZGQgaXQgdG8gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKwkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3cDsKKworCQkgIG5ld3AgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikKKwkJICAgIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKwkJCSAgICArIG1zZ2lkX2xlbiArIGRvbWFpbm5hbWVfbGVuICsgMSk7CisJCSAgaWYgKG5ld3AgIT0gTlVMTCkKKwkJICAgIHsKKwkJICAgICAgbmV3cC0+ZG9tYWlubmFtZSA9CisJCQltZW1wY3B5IChuZXdwLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CisJCSAgICAgIG5ld3AtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CisJCSAgICAgIG5ld3AtPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CisJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uID0gcmV0dmFsOworCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisKKwkJICAgICAgLyogSW5zZXJ0IHRoZSBlbnRyeSBpbiB0aGUgc2VhcmNoIHRyZWUuICAqLworCQkgICAgICBmb3VuZHAgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKiopCisJCQl0c2VhcmNoIChuZXdwLCAmcm9vdCwgdHJhbnNjbXApOworCQkgICAgICBpZiAoZm91bmRwID09IE5VTEwKKwkJCSAgfHwgX19idWlsdGluX2V4cGVjdCAoKmZvdW5kcCAhPSBuZXdwLCAwKSkKKwkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAgKi8KKwkJCWZyZWUgKG5ld3ApOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogV2UgY2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLworCQkgICgqZm91bmRwKS0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisJCSAgKCpmb3VuZHApLT5kb21haW4gPSBkb21haW47CisJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKwkJICAoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKwkJfQorI2VuZGlmCisJICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKworCSAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKwkgICAgICBpZiAocGx1cmFsKQorCQlyZXR2YWwgPSBwbHVyYWxfbG9va3VwIChkb21haW4sIG4sIHJldHZhbCwgcmV0bGVuKTsKKworCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisJICAgICAgcmV0dXJuIHJldHZhbDsKKwkgICAgfQorCX0KKyAgICB9CisKKyByZXR1cm5fdW50cmFuc2xhdGVkOgorICAvKiBSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCBNU0dJRC4gICovCisgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyNpZiAwCQkJCS8qIERvZXNuJ3Qgd29yayB3aXRoIGRpZXQgbGliYyAtLSBUWVQgKi8KKyNpZm5kZWYgX0xJQkMKKyAgaWYgKCFFTkFCTEVfU0VDVVJFKQorICAgIHsKKyAgICAgIGV4dGVybiB2b2lkIF9ubF9sb2dfdW50cmFuc2xhdGVkIChjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwKKwkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkJCQkJY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisJCQkJCWludCBwbHVyYWwpOworICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKworICAgICAgaWYgKGxvZ2ZpbGVuYW1lICE9IE5VTEwgJiYgbG9nZmlsZW5hbWVbMF0gIT0gJ1wwJykKKwlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworICAgIH0KKyNlbmRpZgorI2VuZGlmCisgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisgIHJldHVybiAocGx1cmFsID09IDAKKwkgID8gKGNoYXIgKikgbXNnaWQxCisJICAvKiBVc2UgdGhlIEdlcm1hbmljIHBsdXJhbCBydWxlLiAgKi8KKwkgIDogbiA9PSAxID8gKGNoYXIgKikgbXNnaWQxIDogKGNoYXIgKikgbXNnaWQyKTsKK30KKworCitjaGFyICoKK2ludGVybmFsX2Z1bmN0aW9uCitfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKwkgICAgICBzaXplX3QgKmxlbmd0aHApCit7CisgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisgIG5sc191aW50MzIgbnN0cmluZ3M7CisgIHNpemVfdCBhY3Q7CisgIGNoYXIgKnJlc3VsdDsKKyAgc2l6ZV90IHJlc3VsdGxlbjsKKworICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKyAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nKTsKKworICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisKKyAgbnN0cmluZ3MgPSBkb21haW4tPm5zdHJpbmdzOworCisgIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCisgIGlmIChkb21haW4tPmhhc2hfdGFiICE9IE5VTEwpCisgICAgeworICAgICAgLyogVXNlIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKyAgICAgIG5sc191aW50MzIgbGVuID0gc3RybGVuIChtc2dpZCk7CisgICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKyAgICAgIG5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKyAgICAgIG5sc191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CisKKyAgICAgIHdoaWxlICgxKQorCXsKKwkgIG5sc191aW50MzIgbnN0ciA9CisJICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiLCBkb21haW4tPmhhc2hfdGFiW2lkeF0pOworCisJICBpZiAobnN0ciA9PSAwKQorCSAgICAvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKwkgICAgcmV0dXJuIE5VTEw7CisKKwkgIG5zdHItLTsKKworCSAgLyogQ29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci4KKwkgICAgIFdlIGNvbXBhcmUgdGhlIGxlbmd0aHMgd2l0aCA+PSwgbm90ID09LCBiZWNhdXNlIHBsdXJhbCBlbnRyaWVzCisJICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgc3RyaW5ncyB3aXRoIGFuIGVtYmVkZGVkIE5VTC4gICovCisJICBpZiAobnN0ciA8IG5zdHJpbmdzCisJICAgICAgPyBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5vcmlnX3RhYltuc3RyXS5sZW5ndGgpID49IGxlbgorCQkmJiAoc3RyY21wIChtc2dpZCwKKwkJCSAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKwkJCQkJICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyXS5vZmZzZXQpKQorCQkgICAgPT0gMCkKKwkgICAgICA6IGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ubGVuZ3RoID4gbGVuCisJCSYmIChzdHJjbXAgKG1zZ2lkLAorCQkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ucG9pbnRlcikKKwkJICAgID09IDApKQorCSAgICB7CisJICAgICAgYWN0ID0gbnN0cjsKKwkgICAgICBnb3RvIGZvdW5kOworCSAgICB9CisKKwkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorCSAgICBpZHggLT0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyOworCSAgZWxzZQorCSAgICBpZHggKz0gaW5jcjsKKwl9CisgICAgICAvKiBOT1RSRUFDSEVEICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgorCSBtZXNzYWdlcy4gICovCisgICAgICBzaXplX3QgdG9wLCBib3R0b207CisKKyAgICAgIGJvdHRvbSA9IDA7CisgICAgICB0b3AgPSBuc3RyaW5nczsKKyAgICAgIHdoaWxlIChib3R0b20gPCB0b3ApCisJeworCSAgaW50IGNtcF92YWw7CisKKwkgIGFjdCA9IChib3R0b20gKyB0b3ApIC8gMjsKKwkgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCAoZG9tYWluLT5kYXRhCisJCQkJICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisJCQkJCSBkb21haW4tPm9yaWdfdGFiW2FjdF0ub2Zmc2V0KSkpOworCSAgaWYgKGNtcF92YWwgPCAwKQorCSAgICB0b3AgPSBhY3Q7CisJICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKwkgICAgYm90dG9tID0gYWN0ICsgMTsKKwkgIGVsc2UKKwkgICAgZ290byBmb3VuZDsKKwl9CisgICAgICAvKiBObyB0cmFuc2xhdGlvbiB3YXMgZm91bmQuICAqLworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgZm91bmQ6CisgIC8qIFRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQgYXQgaW5kZXggQUNULiAgSWYgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZQorICAgICBzdHJpbmcgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJhY3RlciBzZXQsIHRoaXMgaXMgdGhlIHRpbWUuICAqLworICBpZiAoYWN0IDwgbnN0cmluZ3MpCisgICAgeworICAgICAgcmVzdWx0ID0gKGNoYXIgKikKKwkoZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW2FjdF0ub2Zmc2V0KSk7CisgICAgICByZXN1bHRsZW4gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbYWN0XS5sZW5ndGgpICsgMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZXN1bHQgPSAoY2hhciAqKSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLnBvaW50ZXI7CisgICAgICByZXN1bHRsZW4gPSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLmxlbmd0aDsKKyAgICB9CisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYKKyAgaWYgKGRvbWFpbi0+Y29kZXNldF9jbnRyCisgICAgICAhPSAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCkpCisgICAgeworICAgICAgLyogVGhlIGRvbWFpbidzIGNvZGVzZXQgaGFzIGNoYW5nZWQgdGhyb3VnaCBiaW5kX3RleHRkb21haW5fY29kZXNldCgpCisJIHNpbmNlIHRoZSBtZXNzYWdlIGNhdGFsb2cgd2FzIGluaXRpYWxpemVkIG9yIGxhc3QgYWNjZXNzZWQuICBXZQorCSBoYXZlIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY29udmVydGVyLiAgKi8KKyAgICAgIF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOworICAgICAgX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworICAgIH0KKworICBpZiAoCisjIGlmZGVmIF9MSUJDCisgICAgICBkb21haW4tPmNvbnYgIT0gKF9fZ2NvbnZfdCkgLTEKKyMgZWxzZQorIyAgaWYgSEFWRV9JQ09OVgorICAgICAgZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMQorIyAgZW5kaWYKKyMgZW5kaWYKKyAgICAgICkKKyAgICB7CisgICAgICAvKiBXZSBhcmUgc3VwcG9zZWQgdG8gZG8gYSBjb252ZXJzaW9uLiAgRmlyc3QgYWxsb2NhdGUgYW4KKwkgYXBwcm9wcmlhdGUgdGFibGUgd2l0aCB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIHRhYmxlCisJIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKwkgdG8gdGhlIGNvbnZlcnRlZCBzdHJpbmdzIGluLgorCSBUaGVyZSBpcyBhIHNsaWdodCBjb21wbGljYXRpb24gd2l0aCBwbHVyYWwgZW50cmllcy4gIFRoZXkKKwkgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorCSBoYW5kbGUgdGhpcyBjYXNlIGJ5IGNvbnZlcnRpbmcgUkVTVUxUTEVOIGJ5dGVzLCBpbmNsdWRpbmcKKwkgTlVMcy4gICovCisKKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiID09IE5VTEwKKwkgICYmICgoZG9tYWluLT5jb252X3RhYiA9CisJCSAoY2hhciAqKikgY2FsbG9jIChuc3RyaW5ncyArIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncywKKwkJCQkgICBzaXplb2YgKGNoYXIgKikpKQorCSAgICAgID09IE5VTEwpKQorCS8qIE1hcmsgdGhhdCB3ZSBkaWRuJ3Qgc3VjY2VlZCBhbGxvY2F0aW5nIGEgdGFibGUuICAqLworCWRvbWFpbi0+Y29udl90YWIgPSAoY2hhciAqKikgLTE7CisKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkb21haW4tPmNvbnZfdGFiID09IChjaGFyICoqKSAtMSwgMCkpCisJLyogTm90aGluZyB3ZSBjYW4gZG8sIG5vIG1vcmUgbWVtb3J5LiAgKi8KKwlnb3RvIGNvbnZlcnRlZDsKKworICAgICAgaWYgKGRvbWFpbi0+Y29udl90YWJbYWN0XSA9PSBOVUxMKQorCXsKKwkgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorCSAgICAgdHJhbnNsYXRlZCB5ZXQuICBEbyB0aGlzIG5vdy4gICovCisJICAvKiBXZSB1c2UgYSBiaXQgbW9yZSBlZmZpY2llbnQgbWVtb3J5IGhhbmRsaW5nLgorCSAgICAgV2UgYWxsb2NhdGUgYWx3YXlzIGxhcmdlciBibG9ja3Mgd2hpY2ggZ2V0IHVzZWQgb3ZlcgorCSAgICAgdGltZS4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWFueSBzbWFsbCBhbGxvY2F0aW9ucy4gICAqLworCSAgX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spCisjIGRlZmluZSBJTklUSUFMX0JMT0NLX1NJWkUJNDA4MAorCSAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZyZWVtZW07CisJICBzdGF0aWMgc2l6ZV90IGZyZWVtZW1fc2l6ZTsKKworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWY7CisJICB1bnNpZ25lZCBjaGFyICpvdXRidWY7CisJICBpbnQgbWFsbG9jX2NvdW50OworIyBpZm5kZWYgX0xJQkMKKwkgIHRyYW5zbWVtX2Jsb2NrX3QgKnRyYW5zbWVtX2xpc3QgPSBOVUxMOworIyBlbmRpZgorCisJICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKworCSAgaW5idWYgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZXN1bHQ7CisJICBvdXRidWYgPSBmcmVlbWVtICsgc2l6ZW9mIChzaXplX3QpOworCisJICBtYWxsb2NfY291bnQgPSAwOworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICB0cmFuc21lbV9ibG9ja190ICpuZXdtZW07CisjIGlmZGVmIF9MSUJDCisJICAgICAgc2l6ZV90IG5vbl9yZXZlcnNpYmxlOworCSAgICAgIGludCByZXM7CisKKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorCQlnb3RvIHJlc2l6ZV9mcmVlbWVtOworCisJICAgICAgcmVzID0gX19nY29udiAoZG9tYWluLT5jb252LAorCQkJICAgICAmaW5idWYsIGluYnVmICsgcmVzdWx0bGVuLAorCQkJICAgICAmb3V0YnVmLAorCQkJICAgICBvdXRidWYgKyBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCksCisJCQkgICAgICZub25fcmV2ZXJzaWJsZSk7CisKKwkgICAgICBpZiAocmVzID09IF9fR0NPTlZfT0sgfHwgcmVzID09IF9fR0NPTlZfRU1QVFlfSU5QVVQpCisJCWJyZWFrOworCisJICAgICAgaWYgKHJlcyAhPSBfX0dDT05WX0ZVTExfT1VUUFVUKQorCQl7CisJCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKwkJICBnb3RvIGNvbnZlcnRlZDsKKwkJfQorCisJICAgICAgaW5idWYgPSByZXN1bHQ7CisjIGVsc2UKKyMgIGlmIEhBVkVfSUNPTlYKKwkgICAgICBjb25zdCBjaGFyICppbnB0ciA9IChjb25zdCBjaGFyICopIGluYnVmOworCSAgICAgIHNpemVfdCBpbmxlZnQgPSByZXN1bHRsZW47CisJICAgICAgY2hhciAqb3V0cHRyID0gKGNoYXIgKikgb3V0YnVmOworCSAgICAgIHNpemVfdCBvdXRsZWZ0OworCisJICAgICAgaWYgKGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKKwkJZ290byByZXNpemVfZnJlZW1lbTsKKworCSAgICAgIG91dGxlZnQgPSBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCk7CisJICAgICAgaWYgKGljb252IChkb21haW4tPmNvbnYsCisJCQkgKElDT05WX0NPTlNUIGNoYXIgKiopICZpbnB0ciwgJmlubGVmdCwKKwkJCSAmb3V0cHRyLCAmb3V0bGVmdCkKKwkJICAhPSAoc2l6ZV90KSAoLTEpKQorCQl7CisJCSAgb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKikgb3V0cHRyOworCQkgIGJyZWFrOworCQl9CisJICAgICAgaWYgKGVycm5vICE9IEUyQklHKQorCQl7CisJCSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKwkJICBnb3RvIGNvbnZlcnRlZDsKKwkJfQorIyAgZW5kaWYKKyMgZW5kaWYKKworCSAgICByZXNpemVfZnJlZW1lbToKKwkgICAgICAvKiBXZSBtdXN0IGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBvciByZXNpemUgdGhlIG9sZCBvbmUuICAqLworCSAgICAgIGlmIChtYWxsb2NfY291bnQgPiAwKQorCQl7CisJCSAgKyttYWxsb2NfY291bnQ7CisJCSAgZnJlZW1lbV9zaXplID0gbWFsbG9jX2NvdW50ICogSU5JVElBTF9CTE9DS19TSVpFOworCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9ja190ICopIHJlYWxsb2MgKHRyYW5zbWVtX2xpc3QsCisJCQkJCQkJIGZyZWVtZW1fc2l6ZSk7CisjIGlmZGVmIF9MSUJDCisJCSAgaWYgKG5ld21lbSAhPSBOVUxMKQorCQkgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBzdHJ1Y3QgdHJhbnNtZW1fbGlzdCAqb2xkID0gdHJhbnNtZW1fbGlzdDsKKworCQkgICAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKwkJICAgICAgZnJlZSAob2xkKTsKKwkJICAgIH0KKyMgZW5kaWYKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIG1hbGxvY19jb3VudCA9IDE7CisJCSAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworCQkgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9ja190ICopIG1hbGxvYyAoZnJlZW1lbV9zaXplKTsKKwkJfQorCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdtZW0gPT0gTlVMTCwgMCkpCisJCXsKKwkJICBmcmVlbWVtID0gTlVMTDsKKwkJICBmcmVlbWVtX3NpemUgPSAwOworCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisJCSAgZ290byBjb252ZXJ0ZWQ7CisJCX0KKworIyBpZmRlZiBfTElCQworCSAgICAgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorICAgICAgICAgICAgICAgICBhdCBzb21lIHBvaW50LiAgKi8KKwkgICAgICBuZXdtZW0tPm5leHQgPSB0cmFuc21lbV9saXN0OworCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisKKwkgICAgICBmcmVlbWVtID0gbmV3bWVtLT5kYXRhOworCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvZmZzZXRvZiAoc3RydWN0IHRyYW5zbWVtX2xpc3QsIGRhdGEpOworIyBlbHNlCisJICAgICAgdHJhbnNtZW1fbGlzdCA9IG5ld21lbTsKKwkgICAgICBmcmVlbWVtID0gbmV3bWVtOworIyBlbmRpZgorCisJICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKwkgICAgfQorCisJICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCisJICAgICBpbnRvIHRoZSB0YWJsZSBvZiBjb252ZXJzaW9ucy4gICovCisJICAqKHNpemVfdCAqKSBmcmVlbWVtID0gb3V0YnVmIC0gZnJlZW1lbSAtIHNpemVvZiAoc2l6ZV90KTsKKwkgIGRvbWFpbi0+Y29udl90YWJbYWN0XSA9IChjaGFyICopIGZyZWVtZW07CisJICAvKiBTaHJpbmsgZnJlZW1lbSwgYnV0IGtlZXAgaXQgYWxpZ25lZC4gICovCisJICBmcmVlbWVtX3NpemUgLT0gb3V0YnVmIC0gZnJlZW1lbTsKKwkgIGZyZWVtZW0gPSBvdXRidWY7CisJICBmcmVlbWVtICs9IGZyZWVtZW1fc2l6ZSAmIChhbGlnbm9mIChzaXplX3QpIC0gMSk7CisJICBmcmVlbWVtX3NpemUgPSBmcmVlbWVtX3NpemUgJiB+IChhbGlnbm9mIChzaXplX3QpIC0gMSk7CisKKwkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisJfQorCisgICAgICAvKiBOb3cgZG9tYWluLT5jb252X3RhYlthY3RdIGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwKKwkgdGhlIHBsdXJhbCB2YXJpYW50cy4gICovCisgICAgICByZXN1bHQgPSBkb21haW4tPmNvbnZfdGFiW2FjdF0gKyBzaXplb2YgKHNpemVfdCk7CisgICAgICByZXN1bHRsZW4gPSAqKHNpemVfdCAqKSBkb21haW4tPmNvbnZfdGFiW2FjdF07CisgICAgfQorCisgY29udmVydGVkOgorICAvKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBjb252ZXJ0ZWQuICAqLworCisjZW5kaWYgLyogX0xJQkMgfHwgSEFWRV9JQ09OViAqLworCisgICpsZW5ndGhwID0gcmVzdWx0bGVuOworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIExvb2sgdXAgYSBwbHVyYWwgdmFyaWFudC4gICovCitzdGF0aWMgY2hhciAqCitpbnRlcm5hbF9mdW5jdGlvbgorcGx1cmFsX2xvb2t1cCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGludCBuLAorCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKK3sKKyAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbmRhdGEgPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluLT5kYXRhOworICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKyAgY29uc3QgY2hhciAqcDsKKworICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworICBpZiAoaW5kZXggPj0gZG9tYWluZGF0YS0+bnBsdXJhbHMpCisgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCB0aGUKKyAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCisgICAgaW5kZXggPSAwOworCisgIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCisgIHAgPSB0cmFuc2xhdGlvbjsKKyAgd2hpbGUgKGluZGV4LS0gPiAwKQorICAgIHsKKyNpZmRlZiBfTElCQworICAgICAgcCA9IF9fcmF3bWVtY2hyIChwLCAnXDAnKTsKKyNlbHNlCisgICAgICBwID0gc3RyY2hyIChwLCAnXDAnKTsKKyNlbmRpZgorICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworICAgICAgcCsrOworCisgICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24KKwkgICBldmFsdWF0ZWQgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHZhcmlhbnRzCisJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworCXJldHVybiAoY2hhciAqKSB0cmFuc2xhdGlvbjsKKyAgICB9CisgIHJldHVybiAoY2hhciAqKSBwOworfQorCisjaWZuZGVmIF9MSUJDCisvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbnRlcm5hbF9mdW5jdGlvbgorY2F0ZWdvcnlfdG9fbmFtZSAoaW50IGNhdGVnb3J5KQoreworICBjb25zdCBjaGFyICpyZXR2YWw7CisKKyAgc3dpdGNoIChjYXRlZ29yeSkKKyAgeworI2lmZGVmIExDX0NPTExBVEUKKyAgY2FzZSBMQ19DT0xMQVRFOgorICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX0NUWVBFCisgIGNhc2UgTENfQ1RZUEU6CisgICAgcmV0dmFsID0gIkxDX0NUWVBFIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX01PTkVUQVJZCisgIGNhc2UgTENfTU9ORVRBUlk6CisgICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX05VTUVSSUMKKyAgY2FzZSBMQ19OVU1FUklDOgorICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX1RJTUUKKyAgY2FzZSBMQ19USU1FOgorICAgIHJldHZhbCA9ICJMQ19USU1FIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX01FU1NBR0VTCisgIGNhc2UgTENfTUVTU0FHRVM6CisgICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX1JFU1BPTlNFCisgIGNhc2UgTENfUkVTUE9OU0U6CisgICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIExDX0FMTAorICBjYXNlIExDX0FMTDoKKyAgICAvKiBUaGlzIG1pZ2h0IG5vdCBtYWtlIHNlbnNlIGJ1dCBpcyBwZXJoYXBzIGJldHRlciB0aGFuIGFueSBvdGhlcgorICAgICAgIHZhbHVlLiAgKi8KKyAgICByZXR2YWwgPSAiTENfQUxMIjsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIC8qIElmIHlvdSBoYXZlIGEgYmV0dGVyIGlkZWEgZm9yIGEgZGVmYXVsdCB2YWx1ZSBsZXQgbWUga25vdy4gICovCisgICAgcmV0dmFsID0gIkxDX1hYWCI7CisgIH0KKworICByZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisKKy8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbnRlcm5hbF9mdW5jdGlvbgorZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQoreworICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKyAgY29uc3QgY2hhciAqcmV0dmFsOworCisgIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CisgICAgIHZhcmlhYmxlLiAgQnV0IHdlIGRvbid0IHVzZSB0aGUgdmFsdWUgaWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorICAgICBsb2NhbGUgaXMgdGhlIEMgbG9jYWxlLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uICAqLworICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CisgIGlmIChsYW5ndWFnZSAhPSBOVUxMICYmIGxhbmd1YWdlWzBdID09ICdcMCcpCisgICAgbGFuZ3VhZ2UgPSBOVUxMOworCisgIC8qIFdlIGhhdmUgdG8gcHJvY2VlZCB3aXRoIHRoZSBQT1NJWCBtZXRob2RzIG9mIGxvb2tpbmcgdG8gYExDX0FMTCcsCisgICAgIGBMQ194eHgnLCBhbmQgYExBTkcnLiAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlCisgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisjaWZkZWYgX0xJQkMKKyAgcmV0dmFsID0gX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSk7CisjZWxzZQorICByZXR2YWwgPSBfbmxfbG9jYWxlX25hbWUgKGNhdGVnb3J5LCBjYXRlZ29yeW5hbWUpOworI2VuZGlmCisKKyAgLyogSWdub3JlIExBTkdVQUdFIGlmIHRoZSBsb2NhbGUgaXMgc2V0IHRvICJDIiBiZWNhdXNlCisgICAgIDEuICJDIiBsb2NhbGUgdXN1YWxseSB1c2VzIHRoZSBBU0NJSSBlbmNvZGluZywgYW5kIG1vc3QgaW50ZXJuYXRpb25hbAorCW1lc3NhZ2VzIHVzZSBub24tQVNDSUkgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyBnZXQgZGlzcGxheWVkCisJYXMgcXVlc3Rpb24gbWFya3MgKGlmIHVzaW5nIGdsaWJjJ3MgaWNvbnYoKSkgb3IgYXMgaW52YWxpZCA4LWJpdAorCWNoYXJhY3RlcnMgKGJlY2F1c2Ugb3RoZXIgaWNvbnYoKXMgcmVmdXNlIHRvIGNvbnZlcnQgbW9zdCBub24tQVNDSUkKKwljaGFyYWN0ZXJzIHRvIEFTQ0lJKS4gSW4gYW55IGNhc2UsIHRoZSBvdXRwdXQgaXMgdWdseS4KKyAgICAgMi4gVGhlIHByZWNpc2Ugb3V0cHV0IG9mIHNvbWUgcHJvZ3JhbXMgaW4gdGhlICJDIiBsb2NhbGUgaXMgc3BlY2lmaWVkCisJYnkgUE9TSVggYW5kIHNob3VsZCBub3QgZGVwZW5kIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlCisJIkxBTkdVQUdFIi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMgdG8gdXNlIGdldHRleHQoKS4gICovCisgIHJldHVybiBsYW5ndWFnZSAhPSBOVUxMICYmIHN0cmNtcCAocmV0dmFsLCAiQyIpICE9IDAgPyBsYW5ndWFnZSA6IHJldHZhbDsKK30KKworLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCisKKy8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCisgICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworICAgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCB0aG91Z2guICBBbHNvIGFsbG93IHRoZSBzeW1ib2wgSEFWRV9TVFBDUFkKKyAgIHRvIGJlIGRlZmluZWQuICAqLworI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKK3N0YXRpYyBjaGFyICoKK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQoreworICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpCisgICAgLyogRG8gbm90aGluZy4gKi8gOworICByZXR1cm4gZGVzdCAtIDE7Cit9CisjZW5kaWYKKworI2lmICFfTElCQyAmJiAhSEFWRV9NRU1QQ1BZCitzdGF0aWMgdm9pZCAqCittZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNweSAoZGVzdCwgc3JjLCBuKSArIG4pOworfQorI2VuZGlmCisKKworI2lmZGVmIF9MSUJDCisvKiBJZiB3ZSB3YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAorICAgcHJvZ3JhbSdzIGVuZC4gICovCitsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQoreworICB2b2lkICpvbGQ7CisKKyAgd2hpbGUgKF9ubF9kb21haW5fYmluZGluZ3MgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdHJ1Y3QgYmluZGluZyAqb2xkcCA9IF9ubF9kb21haW5fYmluZGluZ3M7CisgICAgICBfbmxfZG9tYWluX2JpbmRpbmdzID0gX25sX2RvbWFpbl9iaW5kaW5ncy0+bmV4dDsKKyAgICAgIGlmIChvbGRwLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKwkvKiBZZXMsIHRoaXMgaXMgYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworICAgICAgZnJlZSAob2xkcC0+Y29kZXNldCk7CisgICAgICBmcmVlIChvbGRwKTsKKyAgICB9CisKKyAgaWYgKF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluICE9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKQorICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworICAgIGZyZWUgKChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluKTsKKworICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisgIF9fdGRlc3Ryb3kgKHJvb3QsIGZyZWUpOworICByb290ID0gTlVMTDsKKworICB3aGlsZSAodHJhbnNtZW1fbGlzdCAhPSBOVUxMKQorICAgIHsKKyAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CisgICAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKyAgICAgIGZyZWUgKG9sZCk7CisgICAgfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9kY25nZXR0ZXh0LmMgYi9lMmZzcHJvZ3MvaW50bC9kY25nZXR0ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhM2UwOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2RjbmdldHRleHQuYwpAQCAtMCwwICsxLDU3IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorI2Vsc2UKKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisjIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorICAgbG9jYWxlLiAgKi8KK2NoYXIgKgorRENOR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisJICAgIGludCBjYXRlZ29yeSkKK3sKKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7Cit9CisKKyNpZmRlZiBfTElCQworLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCit3ZWFrX2FsaWFzIChfX2RjbmdldHRleHQsIGRjbmdldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9kZ2V0dGV4dC5jIGIvZTJmc3Byb2dzL2ludGwvZGdldHRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjRiMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvZGdldHRleHQuYwpAQCAtMCwwICsxLDU4IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2lmZGVmIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyNlbHNlCisjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyNpZmRlZiBfTElCQworIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyNlbHNlCisjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisjIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKyNlbmRpZgorCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KK2NoYXIgKgorREdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gRENHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19kZ2V0dGV4dCwgZGdldHRleHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9kbmdldHRleHQuYyBiL2UyZnNwcm9ncy9pbnRsL2RuZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTU2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9kbmdldHRleHQuYwpAQCAtMCwwICsxLDU5IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjZWxzZQorIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKyNlbHNlCisjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZSBhbmQgc2tpcCBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUgcGx1cmFsIGZvcm0uICAqLworY2hhciAqCitETkdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBEQ05HRVRURVhUIChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2V2YWwtcGx1cmFsLmggYi9lMmZzcHJvZ3MvaW50bC9ldmFsLXBsdXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYmQ1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9ldmFsLXBsdXJhbC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBQbHVyYWwgZXhwcmVzc2lvbiBldmFsdWF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIFNUQVRJQworI2RlZmluZSBTVEFUSUMgc3RhdGljCisjZW5kaWYKKworLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworU1RBVElDCit1bnNpZ25lZCBsb25nIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3BsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwgdW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisJeworCWNhc2UgdmFyOgorCSAgcmV0dXJuIG47CisJY2FzZSBudW06CisJICByZXR1cm4gcGV4cC0+dmFsLm51bTsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgICAgLyogTk9UUkVBQ0hFRCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgeworCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIGxub3QuICAqLworCXVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisJcmV0dXJuICEgYXJnOworICAgICAgfQorICAgIGNhc2UgMjoKKyAgICAgIHsKKwl1bnNpZ25lZCBsb25nIGludCBsZWZ0YXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKwlpZiAocGV4cC0+b3BlcmF0aW9uID09IGxvcikKKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisJZWxzZSBpZiAocGV4cC0+b3BlcmF0aW9uID09IGxhbmQpCisJICByZXR1cm4gbGVmdGFyZyAmJiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworCWVsc2UKKwkgIHsKKwkgICAgdW5zaWduZWQgbG9uZyBpbnQgcmlnaHRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworCisJICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQorCSAgICAgIHsKKwkgICAgICBjYXNlIG11bHQ6CisJCXJldHVybiBsZWZ0YXJnICogcmlnaHRhcmc7CisJICAgICAgY2FzZSBkaXZpZGU6CisjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorCQlpZiAocmlnaHRhcmcgPT0gMCkKKwkJICByYWlzZSAoU0lHRlBFKTsKKyNlbmRpZgorCQlyZXR1cm4gbGVmdGFyZyAvIHJpZ2h0YXJnOworCSAgICAgIGNhc2UgbW9kdWxlOgorI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKwkJaWYgKHJpZ2h0YXJnID09IDApCisJCSAgcmFpc2UgKFNJR0ZQRSk7CisjZW5kaWYKKwkJcmV0dXJuIGxlZnRhcmcgJSByaWdodGFyZzsKKwkgICAgICBjYXNlIHBsdXM6CisJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisJICAgICAgY2FzZSBtaW51czoKKwkJcmV0dXJuIGxlZnRhcmcgLSByaWdodGFyZzsKKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKwkJcmV0dXJuIGxlZnRhcmcgPCByaWdodGFyZzsKKwkgICAgICBjYXNlIGdyZWF0ZXJfdGhhbjoKKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKwkgICAgICBjYXNlIGxlc3Nfb3JfZXF1YWw6CisJCXJldHVybiBsZWZ0YXJnIDw9IHJpZ2h0YXJnOworCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKwkJcmV0dXJuIGxlZnRhcmcgPj0gcmlnaHRhcmc7CisJICAgICAgY2FzZSBlcXVhbDoKKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisJICAgICAgY2FzZSBub3RfZXF1YWw6CisJCXJldHVybiBsZWZ0YXJnICE9IHJpZ2h0YXJnOworCSAgICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KKwkvKiBOT1RSRUFDSEVEICovCisJYnJlYWs7CisgICAgICB9CisgICAgY2FzZSAzOgorICAgICAgeworCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworCXVuc2lnbmVkIGxvbmcgaW50IGJvb2xhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworCXJldHVybiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbYm9vbGFyZyA/IDEgOiAyXSwgbik7CisgICAgICB9CisgICAgfQorICAvKiBOT1RSRUFDSEVEICovCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvZXhwbG9kZW5hbWUuYyBiL2UyZnNwcm9ncy9pbnRsL2V4cGxvZGVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMjVlNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2V4cGxvZGVuYW1lLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJsb2FkaW5mby5oIgorCisvKiBPbiBzb21lIHN0cmFuZ2Ugc3lzdGVtcyBzdGlsbCBubyBkZWZpbml0aW9uIG9mIE5VTEwgaXMgZm91bmQuICBTaWdoISAgKi8KKyNpZm5kZWYgTlVMTAorIyBpZiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisjICBkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKyMgZWxzZQorIyAgZGVmaW5lIE5VTEwgMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworY2hhciAqCitfbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgd2hpbGUgKG5hbWVbMF0gIT0gJ1wwJyAmJiBuYW1lWzBdICE9ICdfJyAmJiBuYW1lWzBdICE9ICdAJworCSAmJiBuYW1lWzBdICE9ICcrJyAmJiBuYW1lWzBdICE9ICcsJykKKyAgICArK25hbWU7CisKKyAgcmV0dXJuIChjaGFyICopIG5hbWU7Cit9CisKKworaW50CitfbmxfZXhwbG9kZV9uYW1lIChjaGFyICpuYW1lLAorCQkgIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwgY29uc3QgY2hhciAqKm1vZGlmaWVyLAorCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorCQkgIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2NvZGVzZXQsIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorCQkgIGNvbnN0IGNoYXIgKipzcG9uc29yLCBjb25zdCBjaGFyICoqcmV2aXNpb24pCit7CisgIGVudW0geyB1bmRlY2lkZWQsIHhwZywgY2VuIH0gc3ludGF4OworICBjaGFyICpjcDsKKyAgaW50IG1hc2s7CisKKyAgKm1vZGlmaWVyID0gTlVMTDsKKyAgKnRlcnJpdG9yeSA9IE5VTEw7CisgICpjb2Rlc2V0ID0gTlVMTDsKKyAgKm5vcm1hbGl6ZWRfY29kZXNldCA9IE5VTEw7CisgICpzcGVjaWFsID0gTlVMTDsKKyAgKnNwb25zb3IgPSBOVUxMOworICAqcmV2aXNpb24gPSBOVUxMOworCisgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorICAgICBsb29rIGZvciB0aGUgbGFuZ3VhZ2UuICBUZXJtaW5hdGlvbiBzeW1ib2xzIGFyZSBgXycgYW5kIGBAJyBpZgorICAgICB3ZSB1c2UgWFBHNCBzdHlsZSwgYW5kIGBfJywgYCsnLCBhbmQgYCwnIGlmIHdlIHVzZSBDRU4gc3ludGF4LiAgKi8KKyAgbWFzayA9IDA7CisgIHN5bnRheCA9IHVuZGVjaWRlZDsKKyAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworICBjcCA9IF9ubF9maW5kX2xhbmd1YWdlICgqbGFuZ3VhZ2UpOworCisgIGlmICgqbGFuZ3VhZ2UgPT0gY3ApCisgICAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIHNlbnNlOiBsYW5ndWFnZSBoYXMgdG8gYmUgc3BlY2lmaWVkLiAgVXNlCisgICAgICAgdGhpcyBlbnRyeSBhcyBpdCBpcyB3aXRob3V0IGV4cGxvZGluZy4gIFBlcmhhcHMgaXQgaXMgYW4gYWxpYXMuICAqLworICAgIGNwID0gc3RyY2hyICgqbGFuZ3VhZ2UsICdcMCcpOworICBlbHNlIGlmIChjcFswXSA9PSAnXycpCisgICAgeworICAgICAgLyogTmV4dCBpcyB0aGUgdGVycml0b3J5LiAgKi8KKyAgICAgIGNwWzBdID0gJ1wwJzsKKyAgICAgICp0ZXJyaXRvcnkgPSArK2NwOworCisgICAgICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnLicgJiYgY3BbMF0gIT0gJ0AnCisJICAgICAmJiBjcFswXSAhPSAnKycgJiYgY3BbMF0gIT0gJywnICYmIGNwWzBdICE9ICdfJykKKwkrK2NwOworCisgICAgICBtYXNrIHw9IFRFUlJJVE9SWTsKKworICAgICAgaWYgKGNwWzBdID09ICcuJykKKwl7CisJICAvKiBOZXh0IGlzIHRoZSBjb2Rlc2V0LiAgKi8KKwkgIHN5bnRheCA9IHhwZzsKKwkgIGNwWzBdID0gJ1wwJzsKKwkgICpjb2Rlc2V0ID0gKytjcDsKKworCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ0AnKQorCSAgICArK2NwOworCisJICBtYXNrIHw9IFhQR19DT0RFU0VUOworCisJICBpZiAoKmNvZGVzZXQgIT0gY3AgJiYgKCpjb2Rlc2V0KVswXSAhPSAnXDAnKQorCSAgICB7CisJICAgICAgKm5vcm1hbGl6ZWRfY29kZXNldCA9IF9ubF9ub3JtYWxpemVfY29kZXNldCAoKmNvZGVzZXQsCisJCQkJCQkJICAgY3AgLSAqY29kZXNldCk7CisJICAgICAgaWYgKHN0cmNtcCAoKmNvZGVzZXQsICpub3JtYWxpemVkX2NvZGVzZXQpID09IDApCisJCWZyZWUgKChjaGFyICopICpub3JtYWxpemVkX2NvZGVzZXQpOworCSAgICAgIGVsc2UKKwkJbWFzayB8PSBYUEdfTk9STV9DT0RFU0VUOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoY3BbMF0gPT0gJ0AnIHx8IChzeW50YXggIT0geHBnICYmIGNwWzBdID09ICcrJykpCisgICAgeworICAgICAgLyogTmV4dCBpcyB0aGUgbW9kaWZpZXIuICAqLworICAgICAgc3ludGF4ID0gY3BbMF0gPT0gJ0AnID8geHBnIDogY2VuOworICAgICAgY3BbMF0gPSAnXDAnOworICAgICAgKm1vZGlmaWVyID0gKytjcDsKKworICAgICAgd2hpbGUgKHN5bnRheCA9PSBjZW4gJiYgY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnKycKKwkgICAgICYmIGNwWzBdICE9ICcsJyAmJiBjcFswXSAhPSAnXycpCisJKytjcDsKKworICAgICAgbWFzayB8PSBYUEdfTU9ESUZJRVIgfCBDRU5fQVVESUVOQ0U7CisgICAgfQorCisgIGlmIChzeW50YXggIT0geHBnICYmIChjcFswXSA9PSAnKycgfHwgY3BbMF0gPT0gJywnIHx8IGNwWzBdID09ICdfJykpCisgICAgeworICAgICAgc3ludGF4ID0gY2VuOworCisgICAgICBpZiAoY3BbMF0gPT0gJysnKQorCXsKKyAJICAvKiBOZXh0IGlzIHNwZWNpYWwgYXBwbGljYXRpb24gKENFTiBzeW50YXgpLiAgKi8KKwkgIGNwWzBdID0gJ1wwJzsKKwkgICpzcGVjaWFsID0gKytjcDsKKworCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJywnICYmIGNwWzBdICE9ICdfJykKKwkgICAgKytjcDsKKworCSAgbWFzayB8PSBDRU5fU1BFQ0lBTDsKKwl9CisKKyAgICAgIGlmIChjcFswXSA9PSAnLCcpCisJeworIAkgIC8qIE5leHQgaXMgc3BvbnNvciAoQ0VOIHN5bnRheCkuICAqLworCSAgY3BbMF0gPSAnXDAnOworCSAgKnNwb25zb3IgPSArK2NwOworCisJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnXycpCisJICAgICsrY3A7CisKKwkgIG1hc2sgfD0gQ0VOX1NQT05TT1I7CisJfQorCisgICAgICBpZiAoY3BbMF0gPT0gJ18nKQorCXsKKyAJICAvKiBOZXh0IGlzIHJldmlzaW9uIChDRU4gc3ludGF4KS4gICovCisJICBjcFswXSA9ICdcMCc7CisJICAqcmV2aXNpb24gPSArK2NwOworCisJICBtYXNrIHw9IENFTl9SRVZJU0lPTjsKKwl9CisgICAgfQorCisgIC8qIEZvciBDRU4gc3ludGF4IHZhbHVlcyBpdCBtaWdodCBiZSBpbXBvcnRhbnQgdG8gaGF2ZSB0aGUKKyAgICAgc2VwYXJhdG9yIGNoYXJhY3RlciBpbiB0aGUgZmlsZSBuYW1lLCBub3QgZm9yIFhQRyBzeW50YXguICAqLworICBpZiAoc3ludGF4ID09IHhwZykKKyAgICB7CisgICAgICBpZiAoKnRlcnJpdG9yeSAhPSBOVUxMICYmICgqdGVycml0b3J5KVswXSA9PSAnXDAnKQorCW1hc2sgJj0gflRFUlJJVE9SWTsKKworICAgICAgaWYgKCpjb2Rlc2V0ICE9IE5VTEwgJiYgKCpjb2Rlc2V0KVswXSA9PSAnXDAnKQorCW1hc2sgJj0gflhQR19DT0RFU0VUOworCisgICAgICBpZiAoKm1vZGlmaWVyICE9IE5VTEwgJiYgKCptb2RpZmllcilbMF0gPT0gJ1wwJykKKwltYXNrICY9IH5YUEdfTU9ESUZJRVI7CisgICAgfQorCisgIHJldHVybiBtYXNrOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvZmluZGRvbWFpbi5jIGIvZTJmc3Byb2dzL2ludGwvZmluZGRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OTJhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9maW5kZG9tYWluLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy8qIExpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucy4gICovCitzdGF0aWMgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2xvYWRlZF9kb21haW5zOworCisKKy8qIFJldHVybiBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgY2F0YWxvZyBkZXNjcmliZWQgYnkKKyAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICBlc3RhYmxpc2hlZCBiaW5kaW5ncy4gICovCitzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoKK2ludGVybmFsX2Z1bmN0aW9uCitfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKwkJIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQoreworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgIGNvbnN0IGNoYXIgKmxhbmd1YWdlOworICBjb25zdCBjaGFyICptb2RpZmllcjsKKyAgY29uc3QgY2hhciAqdGVycml0b3J5OworICBjb25zdCBjaGFyICpjb2Rlc2V0OworICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CisgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CisgIGNvbnN0IGNoYXIgKnNwb25zb3I7CisgIGNvbnN0IGNoYXIgKnJldmlzaW9uOworICBjb25zdCBjaGFyICphbGlhc192YWx1ZTsKKyAgaW50IG1hc2s7CisKKyAgLyogTE9DQUxFIGNhbiBjb25zaXN0IG9mIHVwIHRvIGZvdXIgcmVjb2duaXplZCBwYXJ0cyBmb3IgdGhlIFhQRyBzeW50YXg6CisKKwkJbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKworICAgICBhbmQgc2l4IHBhcnRzIGZvciB0aGUgQ0VOIHN5bnRheDoKKworCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKworICAgICBCZXNpZGUgdGhlIGZpcnN0IHBhcnQgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmCisgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisgICAgIGxvb2tlZCBmb3IuICBUaGUgdmFyaW91cyBwYXJ0cyB3aWxsIGJlIHN0cmlwcGVkIG9mZiBhY2NvcmRpbmcgdG8KKyAgICAgdGhlIGZvbGxvd2luZyBvcmRlcjoKKwkJKDEpIHJldmlzaW9uCisJCSgyKSBzcG9uc29yCisJCSgzKSBzcGVjaWFsCisJCSg0KSBjb2Rlc2V0CisJCSg1KSBub3JtYWxpemVkIGNvZGVzZXQKKwkJKDYpIHRlcnJpdG9yeQorCQkoNykgYXVkaWVuY2UvbW9kaWZpZXIKKyAgICovCisKKyAgLyogSWYgd2UgaGF2ZSBhbHJlYWR5IHRlc3RlZCBmb3IgdGhpcyBsb2NhbGUgZW50cnkgdGhlcmUgaGFzIHRvCisgICAgIGJlIG9uZSBkYXRhIHNldCBpbiB0aGUgbGlzdCBvZiBsb2FkZWQgZG9tYWlucy4gICovCisgIHJldHZhbCA9IF9ubF9tYWtlX2wxMG5mbGlzdCAoJl9ubF9sb2FkZWRfZG9tYWlucywgZGlybmFtZSwKKwkJCSAgICAgICBzdHJsZW4gKGRpcm5hbWUpICsgMSwgMCwgbG9jYWxlLCBOVUxMLCBOVUxMLAorCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGRvbWFpbm5hbWUsIDApOworICBpZiAocmV0dmFsICE9IE5VTEwpCisgICAgeworICAgICAgLyogV2Uga25vdyBzb21ldGhpbmcgYWJvdXQgdGhpcyBsb2NhbGUuICAqLworICAgICAgaW50IGNudDsKKworICAgICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKworICAgICAgaWYgKHJldHZhbC0+ZGF0YSAhPSBOVUxMKQorCXJldHVybiByZXR2YWw7CisKKyAgICAgIGZvciAoY250ID0gMDsgcmV0dmFsLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKwl7CisJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworCisJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorCSAgICBicmVhazsKKwl9CisgICAgICByZXR1cm4gY250ID49IDAgPyByZXR2YWwgOiBOVUxMOworICAgICAgLyogTk9UUkVBQ0hFRCAqLworICAgIH0KKworICAvKiBTZWUgd2hldGhlciB0aGUgbG9jYWxlIHZhbHVlIGlzIGFuIGFsaWFzLiAgSWYgeWVzIGl0cyB2YWx1ZQorICAgICAqb3ZlcndyaXRlcyogdGhlIGFsaWFzIG5hbWUuICBObyB0ZXN0IGZvciB0aGUgb3JpZ2luYWwgdmFsdWUgaXMKKyAgICAgZG9uZS4gICovCisgIGFsaWFzX3ZhbHVlID0gX25sX2V4cGFuZF9hbGlhcyAobG9jYWxlKTsKKyAgaWYgKGFsaWFzX3ZhbHVlICE9IE5VTEwpCisgICAgeworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorICAgICAgbG9jYWxlID0gc3RyZHVwIChhbGlhc192YWx1ZSk7CisgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisjZWxzZQorICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgIGxvY2FsZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKworICAgICAgbWVtY3B5IChsb2NhbGUsIGFsaWFzX3ZhbHVlLCBsZW4pOworI2VuZGlmCisgICAgfQorCisgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorICAgICBsb29rIGZvciB0aGUgbGFuZ3VhZ2UuICBUZXJtaW5hdGlvbiBzeW1ib2xzIGFyZSBgXycgYW5kIGBAJyBpZgorICAgICB3ZSB1c2UgWFBHNCBzdHlsZSwgYW5kIGBfJywgYCsnLCBhbmQgYCwnIGlmIHdlIHVzZSBDRU4gc3ludGF4LiAgKi8KKyAgbWFzayA9IF9ubF9leHBsb2RlX25hbWUgKGxvY2FsZSwgJmxhbmd1YWdlLCAmbW9kaWZpZXIsICZ0ZXJyaXRvcnksCisJCQkgICAmY29kZXNldCwgJm5vcm1hbGl6ZWRfY29kZXNldCwgJnNwZWNpYWwsCisJCQkgICAmc3BvbnNvciwgJnJldmlzaW9uKTsKKworICAvKiBDcmVhdGUgYWxsIHBvc3NpYmxlIGxvY2FsZSBlbnRyaWVzIHdoaWNoIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4KKyAgICAgZ2VuZXJhbGl6YXRpb24uICAqLworICByZXR2YWwgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKCZfbmxfbG9hZGVkX2RvbWFpbnMsIGRpcm5hbWUsCisJCQkgICAgICAgc3RybGVuIChkaXJuYW1lKSArIDEsIG1hc2ssIGxhbmd1YWdlLCB0ZXJyaXRvcnksCisJCQkgICAgICAgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKwkJCSAgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZG9tYWlubmFtZSwgMSk7CisgIGlmIChyZXR2YWwgPT0gTlVMTCkKKyAgICAvKiBUaGlzIG1lYW5zIHdlIGFyZSBvdXQgb2YgY29yZS4gICovCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgaWYgKHJldHZhbC0+ZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGludCBjbnQ7CisgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisJeworCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKwkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKwkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLyogVGhlIHJvb20gZm9yIGFuIGFsaWFzIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICBGcmVlIGl0IG5vdy4gICovCisgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgIGZyZWUgKGxvY2FsZSk7CisKKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisgIGlmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkKKyAgICBmcmVlICgodm9pZCAqKSBub3JtYWxpemVkX2NvZGVzZXQpOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKworI2lmZGVmIF9MSUJDCitsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQoreworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpydW5wID0gX25sX2xvYWRlZF9kb21haW5zOworCisgIHdoaWxlIChydW5wICE9IE5VTEwpCisgICAgeworICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisgICAgICBpZiAocnVucC0+ZGF0YSAhPSBOVUxMKQorCV9ubF91bmxvYWRfZG9tYWluICgoc3RydWN0IGxvYWRlZF9kb21haW4gKikgcnVucC0+ZGF0YSk7CisgICAgICBydW5wID0gcnVucC0+bmV4dDsKKyAgICAgIGZyZWUgKChjaGFyICopIGhlcmUtPmZpbGVuYW1lKTsKKyAgICAgIGZyZWUgKGhlcmUpOworICAgIH0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvZ2V0dGV4dC5jIGIvZTJmc3Byb2dzL2ludGwvZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzQyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9nZXR0ZXh0LmMKQEAgLTAsMCArMSw2MyBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBfX25lZWRfTlVMTAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBHRVRURVhUIF9fZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyNlbHNlCisjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICB0ZXh0KS4gICovCitjaGFyICoKK0dFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gRENHRVRURVhUIChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpOworfQorCisjaWZkZWYgX0xJQkMKKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLword2Vha19hbGlhcyAoX19nZXR0ZXh0LCBnZXR0ZXh0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvZ2V0dGV4dFAuaCBiL2UyZnNwcm9ncy9pbnRsL2dldHRleHRQLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2NmMzZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2dldHRleHRQLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBsaWJpbnRsIGxpYnJhcnkuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVFRFWFRQX0gKKyNkZWZpbmUgX0dFVFRFWFRQX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKyNlbHNlCisjIGlmIEhBVkVfSUNPTlYKKyMgIGluY2x1ZGUgPGljb252Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImxvYWRpbmZvLmgiCisKKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorI2VuZGlmCisKKyNpZm5kZWYgYXR0cmlidXRlX2hpZGRlbgorIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorI2VuZGlmCisKKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKyNpZm5kZWYgSEFWRV9CVUlMVElOX0VYUEVDVAorIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorI2VuZGlmCisKKyNpZm5kZWYgVworIyBkZWZpbmUgVyhmbGFnLCBkYXRhKSAoKGZsYWcpID8gU1dBUCAoZGF0YSkgOiAoZGF0YSkpCisjZW5kaWYKKworCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisjZWxzZQorc3RhdGljIGlubGluZSBubHNfdWludDMyCitTV0FQIChpKQorICAgICBubHNfdWludDMyIGk7Cit7CisgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKK30KKyNlbmRpZgorCisKKy8qIEluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCitzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCit7CisgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisgIHNpemVfdCBsZW5ndGg7CisgIC8qIFBvaW50ZXIgdG8gYWRkcmVzc2VkIHN0cmluZy4gICovCisgIGNvbnN0IGNoYXIgKnBvaW50ZXI7Cit9OworCisvKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4gICovCitzdHJ1Y3QgbG9hZGVkX2RvbWFpbgoreworICAvKiBQb2ludGVyIHRvIG1lbW9yeSBjb250YWluaW5nIHRoZSAubW8gZmlsZS4gICovCisgIGNvbnN0IGNoYXIgKmRhdGE7CisgIC8qIDEgaWYgdGhlIG1lbW9yeSBpcyBtbWFwKCllZCwgMCBpZiB0aGUgbWVtb3J5IGlzIG1hbGxvYygpZWQuICAqLworICBpbnQgdXNlX21tYXA7CisgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKyAgc2l6ZV90IG1tYXBfc2l6ZTsKKyAgLyogMSBpZiB0aGUgLm1vIGZpbGUgdXNlcyBhIGRpZmZlcmVudCBlbmRpYW5uZXNzIHRoYW4gdGhpcyBtYWNoaW5lLiAgKi8KKyAgaW50IG11c3Rfc3dhcDsKKyAgLyogUG9pbnRlciB0byBhZGRpdGlvbmFsIG1hbGxvYygpZWQgbWVtb3J5LiAgKi8KKyAgdm9pZCAqbWFsbG9jZWQ7CisKKyAgLyogTnVtYmVyIG9mIHN0YXRpYyBzdHJpbmdzIHBhaXJzLiAgKi8KKyAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKyAgY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIGZpbGUuICAqLworICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKworICAvKiBOdW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN5c2RlcCBzdHJpbmdzLiAgKi8KKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqb3JpZ19zeXNkZXBfdGFiOworICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICp0cmFuc19zeXNkZXBfdGFiOworCisgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgIG5sc191aW50MzIgaGFzaF9zaXplOworICAvKiBQb2ludGVyIHRvIGhhc2ggdGFibGUuICAqLworICBjb25zdCBubHNfdWludDMyICpoYXNoX3RhYjsKKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICBpbnQgbXVzdF9zd2FwX2hhc2hfdGFiOworCisgIGludCBjb2Rlc2V0X2NudHI7CisjaWZkZWYgX0xJQkMKKyAgX19nY29udl90IGNvbnY7CisjZWxzZQorIyBpZiBIQVZFX0lDT05WCisgIGljb252X3QgY29udjsKKyMgZW5kaWYKKyNlbmRpZgorICBjaGFyICoqY29udl90YWI7CisKKyAgc3RydWN0IGV4cHJlc3Npb24gKnBsdXJhbDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnBsdXJhbHM7Cit9OworCisvKiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdC4gIEJ1dCBJU08gQworICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIFpFUk8gMAorI2Vsc2UKKyMgZGVmaW5lIFpFUk8gMQorI2VuZGlmCisKKy8qIEEgc2V0IG9mIHNldHRpbmdzIGJvdW5kIHRvIGEgbWVzc2FnZSBkb21haW4uICBVc2VkIHRvIHN0b3JlIHNldHRpbmdzCisgICBmcm9tIGJpbmR0ZXh0ZG9tYWluKCkgYW5kIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkuICAqLworc3RydWN0IGJpbmRpbmcKK3sKKyAgc3RydWN0IGJpbmRpbmcgKm5leHQ7CisgIGNoYXIgKmRpcm5hbWU7CisgIGludCBjb2Rlc2V0X2NudHI7CS8qIEluY3JlbWVudGVkIGVhY2ggdGltZSBjb2Rlc2V0IGNoYW5nZXMuICAqLworICBjaGFyICpjb2Rlc2V0OworICBjaGFyIGRvbWFpbm5hbWVbWkVST107Cit9OworCisvKiBBIGNvdW50ZXIgd2hpY2ggaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHNvbWUgcHJldmlvdXMgdHJhbnNsYXRpb25zCisgICBiZWNvbWUgaW52YWxpZC4KKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisKKyNpZm5kZWYgX0xJQkMKK2NvbnN0IGNoYXIgKl9ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpOworI2VuZGlmCisKK3N0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9maW5kX2RvbWFpbiAoY29uc3QgY2hhciAqX19kaXJuYW1lLCBjaGFyICpfX2xvY2FsZSwKKwkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOwordm9pZCBfbmxfbG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluLAorCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3ZvaWQgX25sX3VubG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Citjb25zdCBjaGFyICpfbmxfaW5pdF9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW5fZmlsZSwKKwkJCQkgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbiwKKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOwordm9pZCBfbmxfZnJlZV9kb21haW5fY29udiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKworY2hhciAqX25sX2ZpbmRfbXNnIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKwkJICAgIHNpemVfdCAqbGVuZ3RocCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZmRlZiBfTElCQworZXh0ZXJuIGNoYXIgKl9fZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCk7CitleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKK2V4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorCQkJICBpbnQgX19jYXRlZ29yeSk7CitleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7CitleHRlcm4gY2hhciAqX19kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICB1bnNpZ25lZCBsb25nIGludCBuKTsKK2V4dGVybiBjaGFyICpfX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpOworZXh0ZXJuIGNoYXIgKl9fZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICAgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisJCQkgICBpbnQgX19jYXRlZ29yeSk7CitleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworZXh0ZXJuIGNoYXIgKl9fYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkJY29uc3QgY2hhciAqX19jb2Rlc2V0KTsKKyNlbHNlCisvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworICAgY2FsbCB0aGVtIHVuZGVyIHRoZWlyIHJlYWwgbmFtZS4gICovCisjIHVuZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCitleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCQkgaW50IF9fcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBfX24sCisJCQkJIGludCBfX2NhdGVnb3J5KTsKKyNlbmRpZgorCisvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKworI2VuZGlmIC8qIGdldHRleHRQLmggICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9nbW8uaCBiL2UyZnNwcm9ncy9pbnRsL2dtby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzljYzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9nbW8uaApAQCAtMCwwICsxLDE0OSBAQAorLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IGdlbmVyYWwgZmlsZSBsYXlvdXQuCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0dFVFRFWFRfSAorI2RlZmluZSBfR0VUVEVYVF9IIDEKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKyNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKyNkZWZpbmUgX01BR0lDX1NXQVBQRUQgMHhkZTEyMDQ5NQorCisvKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCisjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUiAwCisjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKworLyogVGhlIGZvbGxvd2luZyBjb250b3J0aW9ucyBhcmUgYW4gYXR0ZW1wdCB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yCisgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisgICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorICAgYXMgb2YgdmVyc2lvbiBhdXRvY29uZi0yLjEzLCB0aGUgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvIGRvZXNuJ3Qgd29yaworICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworCisjaWYgX19TVERDX18KKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKyNlbHNlCisjIGRlZmluZSBVSU5UX01BWF8zMl9CSVRTIDB4RkZGRkZGRkYKKyNlbmRpZgorCisvKiBJZiBVSU5UX01BWCBpc24ndCBkZWZpbmVkLCBhc3N1bWUgaXQncyBhIDMyLWJpdCB0eXBlLgorICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisgICB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAxNi1iaXQgc3lzdGVtcywgYW5kIG9ubHkgbW9kZXJuIHN5c3RlbXMKKyAgICh0aGF0IGNlcnRhaW5seSBoYXZlIDxsaW1pdHMuaD4pIGhhdmUgNjQrLWJpdCBpbnRlZ3JhbCB0eXBlcy4gICovCisKKyNpZm5kZWYgVUlOVF9NQVgKKyMgZGVmaW5lIFVJTlRfTUFYIFVJTlRfTUFYXzMyX0JJVFMKKyNlbmRpZgorCisjaWYgVUlOVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUwordHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworI2Vsc2UKKyMgaWYgVVNIUlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKyMgZWxzZQorIyAgaWYgVUxPTkdfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworIyAgZWxzZQorICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW50ZW5kZWQgdG8gdGhyb3cgYW4gZXJyb3IuICBVc2luZyAjZXJyb3IgaXMKKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisgICJDYW5ub3QgZGV0ZXJtaW5lIHVuc2lnbmVkIDMyLWJpdCBkYXRhIHR5cGUuIgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIEhlYWRlciBmb3IgYmluYXJ5IC5tbyBmaWxlIGZvcm1hdC4gICovCitzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIKK3sKKyAgLyogVGhlIG1hZ2ljIG51bWJlci4gICovCisgIG5sc191aW50MzIgbWFnaWM7CisgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKyAgbmxzX3VpbnQzMiByZXZpc2lvbjsKKworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKworICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworICBubHNfdWludDMyIG5zdHJpbmdzOworICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CisgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKyAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2ggdGFibGUgZW50cnkuICAqLworICBubHNfdWludDMyIGhhc2hfdGFiX29mZnNldDsKKworICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCisKKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKyAgLyogT2Zmc2V0IG9mIHRhYmxlIGRlc2NyaWJpbmcgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CisgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworICBubHNfdWludDMyIG9yaWdfc3lzZGVwX3RhYl9vZmZzZXQ7CisgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRlZCBzeXNkZXAgc3RyaW5ncy4gICovCisgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7Cit9OworCisvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KK3N0cnVjdCBzdHJpbmdfZGVzYworeworICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKyAgbmxzX3VpbnQzMiBsZW5ndGg7CisgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisgIG5sc191aW50MzIgb2Zmc2V0OworfTsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworCisvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgKi8KK3N0cnVjdCBzeXNkZXBfc2VnbWVudAoreworICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworICBubHNfdWludDMyIGxlbmd0aDsKKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKyAgbmxzX3VpbnQzMiBvZmZzZXQ7Cit9OworCisvKiBEZXNjcmlwdG9yIGZvciBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZy4gICovCitzdHJ1Y3Qgc3lzZGVwX3N0cmluZworeworICAvKiBPZmZzZXQgb2Ygc3RhdGljIHN0cmluZyBzZWdtZW50cyBpbiBmaWxlLiAgKi8KKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisgIC8qIEFsdGVybmF0aW5nIHNlcXVlbmNlIG9mIHN0YXRpYyBhbmQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4KKyAgICAgVGhlIGxhc3Qgc2VnbWVudCBpcyBhIHN0YXRpYyBzZWdtZW50LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisgIHN0cnVjdCBzZWdtZW50X3BhaXIKKyAgeworICAgIC8qIFNpemUgb2Ygc3RhdGljIHNlZ21lbnQuICAqLworICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKyAgICAvKiBSZWZlcmVuY2UgdG8gc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudCwgb3IgfjAgYXQgdGhlIGVuZC4gICovCisgICAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisgIH0gc2VnbWVudHNbMV07Cit9OworCisvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKyAgIHJlZ2FyZGxlc3Mgd2hldGhlciAnaW50JyBpcyAxNiBiaXQsIDMyIGJpdCwgb3IgNjQgYml0LiAgKi8KKyNkZWZpbmUgU0VHTUVOVFNfRU5EICgobmxzX3VpbnQzMikgfjApCisKKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworCisjZW5kaWYJLyogZ2V0dGV4dC5oICAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvaGFzaC1zdHJpbmcuaCBiL2UyZnNwcm9ncy9pbnRsL2hhc2gtc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2hhc2gtc3RyaW5nLmgKQEAgLTAsMCArMSw0OCBAQAorLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IHN0cmluZyBoYXNoaW5nIGZ1bmN0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogV2UgYXNzdW1lIHRvIGhhdmUgYHVuc2lnbmVkIGxvbmcgaW50JyB2YWx1ZSB3aXRoIGF0IGxlYXN0IDMyIGJpdHMuICAqLworI2RlZmluZSBIQVNIV09SREJJVFMgMzIKKworCisvKiBEZWZpbmVzIHRoZSBzbyBjYWxsZWQgYGhhc2hwancnIGZ1bmN0aW9uIGJ5IFAuSi4gV2VpbmJlcmdlcgorICAgW3NlZSBBaG8vU2V0aGkvVWxsbWFuLCBDT01QSUxFUlM6IFByaW5jaXBsZXMsIFRlY2huaXF1ZXMgYW5kIFRvb2xzLAorICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGludAoraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgaHZhbCwgZzsKKyAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworCisgIC8qIENvbXB1dGUgdGhlIGhhc2ggdmFsdWUgZm9yIHRoZSBnaXZlbiBzdHJpbmcuICAqLworICBodmFsID0gMDsKKyAgd2hpbGUgKCpzdHIgIT0gJ1wwJykKKyAgICB7CisgICAgICBodmFsIDw8PSA0OworICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworICAgICAgZyA9IGh2YWwgJiAoKHVuc2lnbmVkIGxvbmcgaW50KSAweGYgPDwgKEhBU0hXT1JEQklUUyAtIDQpKTsKKyAgICAgIGlmIChnICE9IDApCisJeworCSAgaHZhbCBePSBnID4+IChIQVNIV09SREJJVFMgLSA4KTsKKwkgIGh2YWwgXj0gZzsKKwl9CisgICAgfQorICByZXR1cm4gaHZhbDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2ludGwtY29tcGF0LmMgYi9lMmZzcHJvZ3MvaW50bC9pbnRsLWNvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9pbnRsLWNvbXBhdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICBMaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTk1LCAyMDAwLTIwMDMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorICAgZGVmaW5lZCBpbiB0aGUgaW5jbHVkZWQgR05VIGxpYmludGwgbGlicmFyeSAod2l0aCAibGliaW50bF8iIHByZWZpeCkuCisgICBJdCBpcyBjb21waWxlZCBpbnRvIGxpYmludGwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgQU1fR05VX0dFVFRFWFQgdGVzdAorICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisgICBoYXMgdGhlIHJlZGlyZWN0aW9ucyBwcmltYXJpbHkgaW4gdGhlIDxsaWJpbnRsLmg+IGluY2x1ZGUgZmlsZS4KKyAgIEl0IGlzIGFsc28gY29tcGlsZWQgaW50byBsaWJnbnVpbnRsIHNvIHRoYXQgbGliZ251aW50bC5zbyBjYW4gYmUgdXNlZAorICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorICAgZmVhdHVyZXMgdGhhdCB0aGUgZnVuY3Rpb25zIGluIHRoZSBsaWJjIGRvbid0IGhhdmUgKG5hbWVseSwgbG9nZ2luZykuICAqLworCisKKyN1bmRlZiBnZXR0ZXh0CisjdW5kZWYgZGdldHRleHQKKyN1bmRlZiBkY2dldHRleHQKKyN1bmRlZiBuZ2V0dGV4dAorI3VuZGVmIGRuZ2V0dGV4dAorI3VuZGVmIGRjbmdldHRleHQKKyN1bmRlZiB0ZXh0ZG9tYWluCisjdW5kZWYgYmluZHRleHRkb21haW4KKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorCisKKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKyAgIHRoZSBmdW5jdGlvbnMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgYmluYXJ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlCisgICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisjIGRlZmluZSBETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyBkZWZpbmUgRExMX0VYUE9SVEVECisjZW5kaWYKKworCitETExfRVhQT1JURUQKK2NoYXIgKgorZ2V0dGV4dCAoY29uc3QgY2hhciAqbXNnaWQpCit7CisgIHJldHVybiBsaWJpbnRsX2dldHRleHQgKG1zZ2lkKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorZGdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQoreworICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkY2dldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCit7CisgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gbGliaW50bF9uZ2V0dGV4dCAobXNnaWQxLCBtc2dpZDIsIG4pOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkbmdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4pOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCitkY25nZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLAorCSAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKwkgICAgaW50IGNhdGVnb3J5KQoreworICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgY2F0ZWdvcnkpOworfQorCisKK0RMTF9FWFBPUlRFRAorY2hhciAqCit0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChkb21haW5uYW1lKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKK30KKworCitETExfRVhQT1JURUQKK2NoYXIgKgorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCit7CisgIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChkb21haW5uYW1lLCBjb2Rlc2V0KTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2wxMG5mbGlzdC5jIGIvZTJmc3Byb2dzL2ludGwvbDEwbmZsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5M2VjYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2wxMG5mbGlzdC5jCkBAIC0wLDAgKzEsNDIyIEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9BUkdaX0gKKyMgaW5jbHVkZSA8YXJnei5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImxvYWRpbmZvLmgiCisKKy8qIE9uIHNvbWUgc3RyYW5nZSBzeXN0ZW1zIHN0aWxsIG5vIGRlZmluaXRpb24gb2YgTlVMTCBpcyBmb3VuZC4gIFNpZ2ghICAqLworI2lmbmRlZiBOVUxMCisjIGlmIGRlZmluZWQgX19TVERDX18gJiYgX19TVERDX18KKyMgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorIyBlbHNlCisjICBkZWZpbmUgTlVMTCAwCisjIGVuZGlmCisjZW5kaWYKKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisjaWZkZWYgX0xJQkMKKy8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworIyBpZm5kZWYgc3RwY3B5CisjICBkZWZpbmUgc3RwY3B5KGRlc3QsIHNyYykgX19zdHBjcHkoZGVzdCwgc3JjKQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIEhBVkVfU1RQQ1BZCisjZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIG15X3N0cGNweShkZXN0LCBzcmMpCitzdGF0aWMgY2hhciAqc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgIElTX0FCU09MVVRFX1BBVEgoUCkgIHRlc3RzIHdoZXRoZXIgUCBpcyBhbiBhYnNvbHV0ZSBwYXRoLiAgSWYgaXQgaXMgbm90LAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKyAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorICAgICAmJiAoUClbMV0gPT0gJzonKQorIyBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChQKSAoSVNTTEFTSCAoKFApWzBdKSB8fCBIQVNfREVWSUNFIChQKSkKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKyNlbmRpZgorCisvKiBEZWZpbmUgZnVuY3Rpb24gd2hpY2ggYXJlIHVzdWFsbHkgbm90IGF2YWlsYWJsZS4gICovCisKKyNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9DT1VOVAorLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gQVJHWi4gICovCitzdGF0aWMgc2l6ZV90Cithcmd6X2NvdW50X18gKGNvbnN0IGNoYXIgKmFyZ3osIHNpemVfdCBsZW4pCit7CisgIHNpemVfdCBjb3VudCA9IDA7CisgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgIHNpemVfdCBwYXJ0X2xlbiA9IHN0cmxlbiAoYXJneik7CisgICAgICBhcmd6ICs9IHBhcnRfbGVuICsgMTsKKyAgICAgIGxlbiAtPSBwYXJ0X2xlbiArIDE7CisgICAgICBjb3VudCsrOworICAgIH0KKyAgcmV0dXJuIGNvdW50OworfQorIyB1bmRlZiBfX2FyZ3pfY291bnQKKyMgZGVmaW5lIF9fYXJnel9jb3VudChhcmd6LCBsZW4pIGFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorI2Vsc2UKKyMgaWZkZWYgX0xJQkMKKyMgIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBJTlRVU0UoX19hcmd6X2NvdW50KSAoYXJneiwgbGVuKQorIyBlbmRpZgorI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKworI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX1NUUklOR0lGWQorLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgZXhjZXB0IHRoZSBsYXN0IGludG8gdGhlIGNoYXJhY3RlciBTRVAuICAqLworc3RhdGljIHZvaWQKK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCit7CisgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgIHNpemVfdCBwYXJ0X2xlbiA9IHN0cmxlbiAoYXJneik7CisgICAgICBhcmd6ICs9IHBhcnRfbGVuOworICAgICAgbGVuIC09IHBhcnRfbGVuICsgMTsKKyAgICAgIGlmIChsZW4gPiAwKQorCSphcmd6KysgPSBzZXA7CisgICAgfQorfQorIyB1bmRlZiBfX2FyZ3pfc3RyaW5naWZ5CisjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKyNlbHNlCisjIGlmZGVmIF9MSUJDCisjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorICBJTlRVU0UoX19hcmd6X3N0cmluZ2lmeSkgKGFyZ3osIGxlbiwgc2VwKQorIyBlbmRpZgorI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisKKyNpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX19fQVJHWl9ORVhUCitzdGF0aWMgY2hhciAqCithcmd6X25leHRfXyAoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBjb25zdCBjaGFyICplbnRyeSkKK3sKKyAgaWYgKGVudHJ5KQorICAgIHsKKyAgICAgIGlmIChlbnRyeSA8IGFyZ3ogKyBhcmd6X2xlbikKKyAgICAgICAgZW50cnkgPSBzdHJjaHIgKGVudHJ5LCAnXDAnKSArIDE7CisKKyAgICAgIHJldHVybiBlbnRyeSA+PSBhcmd6ICsgYXJnel9sZW4gPyBOVUxMIDogKGNoYXIgKikgZW50cnk7CisgICAgfQorICBlbHNlCisgICAgaWYgKGFyZ3pfbGVuID4gMCkKKyAgICAgIHJldHVybiBhcmd6OworICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworfQorIyB1bmRlZiBfX2FyZ3pfbmV4dAorIyBkZWZpbmUgX19hcmd6X25leHQoYXJneiwgbGVuLCBlbnRyeSkgYXJnel9uZXh0X18gKGFyZ3osIGxlbiwgZW50cnkpCisjZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX19fQVJHWl9ORVhUICovCisKKworLyogUmV0dXJuIG51bWJlciBvZiBiaXRzIHNldCBpbiBYLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citwb3AgKGludCB4KQoreworICAvKiBXZSBhc3N1bWUgdGhhdCBubyBtb3JlIHRoYW4gMTYgYml0cyBhcmUgdXNlZC4gICovCisgIHggPSAoKHggJiB+MHg1NTU1KSA+PiAxKSArICh4ICYgMHg1NTU1KTsKKyAgeCA9ICgoeCAmIH4weDMzMzMpID4+IDIpICsgKHggJiAweDMzMzMpOworICB4ID0gKCh4ID4+IDQpICsgeCkgJiAweDBmMGY7CisgIHggPSAoKHggPj4gOCkgKyB4KSAmIDB4ZmY7CisKKyAgcmV0dXJuIHg7Cit9CisKKworc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCitfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLAorCQkgICAgaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksCisJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKwkJICAgIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLAorCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKK3sKKyAgY2hhciAqYWJzX2ZpbGVuYW1lOworICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbGFzdHA7CisgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgY2hhciAqY3A7CisgIHNpemVfdCBkaXJsaXN0X2NvdW50OworICBzaXplX3QgZW50cmllczsKKyAgaW50IGNudDsKKworICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisgICAgIERJUkxJU1QuICAqLworICBpZiAoSVNfQUJTT0xVVEVfUEFUSCAobGFuZ3VhZ2UpKQorICAgIGRpcmxpc3RfbGVuID0gMDsKKworICAvKiBBbGxvY2F0ZSByb29tIGZvciB0aGUgZnVsbCBmaWxlIG5hbWUuICAqLworICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisJCQkJICArIHN0cmxlbiAobGFuZ3VhZ2UpCisJCQkJICArICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMAorCQkJCSAgICAgPyBzdHJsZW4gKHRlcnJpdG9yeSkgKyAxIDogMCkKKwkJCQkgICsgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDAKKwkJCQkgICAgID8gc3RybGVuIChjb2Rlc2V0KSArIDEgOiAwKQorCQkJCSAgKyAoKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwCisJCQkJICAgICA/IHN0cmxlbiAobm9ybWFsaXplZF9jb2Rlc2V0KSArIDEgOiAwKQorCQkJCSAgKyAoKChtYXNrICYgWFBHX01PRElGSUVSKSAhPSAwCisJCQkJICAgICAgfHwgKG1hc2sgJiBDRU5fQVVESUVOQ0UpICE9IDApCisJCQkJICAgICA/IHN0cmxlbiAobW9kaWZpZXIpICsgMSA6IDApCisJCQkJICArICgobWFzayAmIENFTl9TUEVDSUFMKSAhPSAwCisJCQkJICAgICA/IHN0cmxlbiAoc3BlY2lhbCkgKyAxIDogMCkKKwkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisJCQkJICAgICAgfHwgKG1hc2sgJiBDRU5fUkVWSVNJT04pICE9IDApCisJCQkJICAgICA/ICgxICsgKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDAKKwkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgOiAwKQorCQkJCQkrICgobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMAorCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisJCQkJICArIDEgKyBzdHJsZW4gKGZpbGVuYW1lKSArIDEpOworCisgIGlmIChhYnNfZmlsZW5hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBDb25zdHJ1Y3QgZmlsZSBuYW1lLiAgKi8KKyAgY3AgPSBhYnNfZmlsZW5hbWU7CisgIGlmIChkaXJsaXN0X2xlbiA+IDApCisgICAgeworICAgICAgbWVtY3B5IChjcCwgZGlybGlzdCwgZGlybGlzdF9sZW4pOworICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisgICAgICBjcCArPSBkaXJsaXN0X2xlbjsKKyAgICAgIGNwWy0xXSA9ICcvJzsKKyAgICB9CisKKyAgY3AgPSBzdHBjcHkgKGNwLCBsYW5ndWFnZSk7CisKKyAgaWYgKChtYXNrICYgVEVSUklUT1JZKSAhPSAwKQorICAgIHsKKyAgICAgICpjcCsrID0gJ18nOworICAgICAgY3AgPSBzdHBjcHkgKGNwLCB0ZXJyaXRvcnkpOworICAgIH0KKyAgaWYgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDApCisgICAgeworICAgICAgKmNwKysgPSAnLic7CisgICAgICBjcCA9IHN0cGNweSAoY3AsIGNvZGVzZXQpOworICAgIH0KKyAgaWYgKChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkKKyAgICB7CisgICAgICAqY3ArKyA9ICcuJzsKKyAgICAgIGNwID0gc3RwY3B5IChjcCwgbm9ybWFsaXplZF9jb2Rlc2V0KTsKKyAgICB9CisgIGlmICgobWFzayAmIChYUEdfTU9ESUZJRVIgfCBDRU5fQVVESUVOQ0UpKSAhPSAwKQorICAgIHsKKyAgICAgIC8qIFRoaXMgY29tcG9uZW50IGNhbiBiZSBwYXJ0IG9mIGJvdGggc3ludGFjZXMgYnV0IGhhcyBkaWZmZXJlbnQKKwkgbGVhZGluZyBjaGFyYWN0ZXJzLiAgRm9yIENFTiB3ZSB1c2UgYCsnLCBlbHNlIGBAJy4gICovCisgICAgICAqY3ArKyA9IChtYXNrICYgQ0VOX0FVRElFTkNFKSAhPSAwID8gJysnIDogJ0AnOworICAgICAgY3AgPSBzdHBjcHkgKGNwLCBtb2RpZmllcik7CisgICAgfQorICBpZiAoKG1hc2sgJiBDRU5fU1BFQ0lBTCkgIT0gMCkKKyAgICB7CisgICAgICAqY3ArKyA9ICcrJzsKKyAgICAgIGNwID0gc3RwY3B5IChjcCwgc3BlY2lhbCk7CisgICAgfQorICBpZiAoKG1hc2sgJiAoQ0VOX1NQT05TT1IgfCBDRU5fUkVWSVNJT04pKSAhPSAwKQorICAgIHsKKyAgICAgICpjcCsrID0gJywnOworICAgICAgaWYgKChtYXNrICYgQ0VOX1NQT05TT1IpICE9IDApCisJY3AgPSBzdHBjcHkgKGNwLCBzcG9uc29yKTsKKyAgICAgIGlmICgobWFzayAmIENFTl9SRVZJU0lPTikgIT0gMCkKKwl7CisJICAqY3ArKyA9ICdfJzsKKwkgIGNwID0gc3RwY3B5IChjcCwgcmV2aXNpb24pOworCX0KKyAgICB9CisKKyAgKmNwKysgPSAnLyc7CisgIHN0cGNweSAoY3AsIGZpbGVuYW1lKTsKKworICAvKiBMb29rIGluIGxpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucyB3aGV0aGVyIGl0IGlzIGFscmVhZHkKKyAgICAgYXZhaWxhYmxlLiAgKi8KKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICBmb3IgKHJldHZhbCA9ICpsMTBuZmlsZV9saXN0OyByZXR2YWwgIT0gTlVMTDsgcmV0dmFsID0gcmV0dmFsLT5uZXh0KQorICAgIGlmIChyZXR2YWwtPmZpbGVuYW1lICE9IE5VTEwpCisgICAgICB7CisJaW50IGNvbXBhcmUgPSBzdHJjbXAgKHJldHZhbC0+ZmlsZW5hbWUsIGFic19maWxlbmFtZSk7CisJaWYgKGNvbXBhcmUgPT0gMCkKKwkgIC8qIFdlIGZvdW5kIGl0ISAgKi8KKwkgIGJyZWFrOworCWlmIChjb21wYXJlIDwgMCkKKwkgIHsKKwkgICAgLyogSXQncyBub3QgaW4gdGhlIGxpc3QuICAqLworCSAgICByZXR2YWwgPSBOVUxMOworCSAgICBicmVhazsKKwkgIH0KKworCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgIH0KKworICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKKyAgICB7CisgICAgICBmcmVlIChhYnNfZmlsZW5hbWUpOworICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICB9CisKKyAgZGlybGlzdF9jb3VudCA9IChkaXJsaXN0X2xlbiA+IDAgPyBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA6IDEpOworCisgIC8qIEFsbG9jYXRlIGEgbmV3IGxvYWRlZF9sMTBuZmlsZS4gICovCisgIHJldHZhbCA9CisgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKyAgICBtYWxsb2MgKHNpemVvZiAoKnJldHZhbCkKKwkgICAgKyAoKChkaXJsaXN0X2NvdW50IDw8IHBvcCAobWFzaykpICsgKGRpcmxpc3RfY291bnQgPiAxID8gMSA6IDApKQorCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dmFsLT5maWxlbmFtZSA9IGFic19maWxlbmFtZTsKKworICAvKiBXZSBzZXQgcmV0dmFsLT5kYXRhIHRvIE5VTEwgaGVyZTsgaXQgaXMgZmlsbGVkIGluIGxhdGVyLgorICAgICBTZXR0aW5nIHJldHZhbC0+ZGVjaWRlZCB0byAxIGhlcmUgbWVhbnMgdGhhdCByZXR2YWwgZG9lcyBub3QKKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorICAgICBsb29raW5nIHVwIChpZiBhbiB1bm5vcm1hbGl6ZWQgY29kZXNldCB3YXMgc3BlY2lmaWVkKS4gICovCisgIHJldHZhbC0+ZGVjaWRlZCA9IChkaXJsaXN0X2NvdW50ID4gMQorCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisJCQkgJiYgKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwKSk7CisgIHJldHZhbC0+ZGF0YSA9IE5VTEw7CisKKyAgcmV0dmFsLT5uZXh0ID0gKmxhc3RwOworICAqbGFzdHAgPSByZXR2YWw7CisKKyAgZW50cmllcyA9IDA7CisgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IChpLmUuIERJUkxJU1RfQ09VTlQgPiAxKSwgdGhlIFJFVFZBTAorICAgICBlbnRyeSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgcmVhbCBmaWxlOyByZXR2YWwtPmZpbGVuYW1lIGNvbnRhaW5zCisgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKyAgICAgYWNyb3NzIGFsbCBiaXQgcGF0dGVybnMgZG9taW5hdGVkIGJ5IE1BU0suCisgICAgIElmIHRoZSBESVJMSVNUIGlzIGEgc2luZ2xlIGRpcmVjdG9yeSBvciBlbnRpcmVseSByZWR1bmRhbnQgKGkuZS4KKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKyAgICAgTUFTSywgZXhjbHVkaW5nIE1BU0sgaXRzZWxmLgorICAgICBJbiBlaXRoZXIgY2FzZSwgd2UgbG9vcCBkb3duIGZyb20gTUFTSyB0byAwLiAgVGhpcyBoYXMgdGhlIGVmZmVjdAorICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorICAgICBmaXJzdCB0aGUgbW9kaWZpZXIsIHRoZW4gdGhlIHRlcnJpdG9yeSwgdGhlbiB0aGUgY29kZXNldCwgdGhlbiB0aGUKKyAgICAgbm9ybWFsaXplZF9jb2Rlc2V0LiAgKi8KKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgIGlmICgoY250ICYgfm1hc2spID09IDAKKwkmJiAoKGNudCAmIENFTl9TUEVDSUZJQykgPT0gMCB8fCAoY250ICYgWFBHX1NQRUNJRklDKSA9PSAwKQorCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgeworCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKwkgIHsKKwkgICAgLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCisJICAgIGNoYXIgKmRpciA9IE5VTEw7CisKKwkgICAgd2hpbGUgKChkaXIgPSBfX2FyZ3pfbmV4dCAoKGNoYXIgKikgZGlybGlzdCwgZGlybGlzdF9sZW4sIGRpcikpCisJCSAgICE9IE5VTEwpCisJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorCQk9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlyLCBzdHJsZW4gKGRpcikgKyAxLAorCQkJCSAgICAgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorCQkJCSAgICAgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisJICB9CisJZWxzZQorCSAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorCSAgICA9IF9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sCisJCQkJICBjbnQsIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCisJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorCQkJCSAgc3BvbnNvciwgcmV2aXNpb24sIGZpbGVuYW1lLCAxKTsKKyAgICAgIH0KKyAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllc10gPSBOVUxMOworCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgIG5hbWVzLiAgTm9ybWFsaXphdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIGFueSBvZiB0aGUgY29tbW9uCisgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKyAgIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworY29uc3QgY2hhciAqCitfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKK3sKKyAgaW50IGxlbiA9IDA7CisgIGludCBvbmx5X2RpZ2l0ID0gMTsKKyAgY2hhciAqcmV0dmFsOworICBjaGFyICp3cDsKKyAgc2l6ZV90IGNudDsKKworICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKyAgICBpZiAoaXNhbG51bSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgICAgICB7CisJKytsZW47CisKKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisJICBvbmx5X2RpZ2l0ID0gMDsKKyAgICAgIH0KKworICByZXR2YWwgPSAoY2hhciAqKSBtYWxsb2MgKChvbmx5X2RpZ2l0ID8gMyA6IDApICsgbGVuICsgMSk7CisKKyAgaWYgKHJldHZhbCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChvbmx5X2RpZ2l0KQorCXdwID0gc3RwY3B5IChyZXR2YWwsICJpc28iKTsKKyAgICAgIGVsc2UKKwl3cCA9IHJldHZhbDsKKworICAgICAgZm9yIChjbnQgPSAwOyBjbnQgPCBuYW1lX2xlbjsgKytjbnQpCisJaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKwllbHNlIGlmIChpc2RpZ2l0ICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKSkKKwkgICp3cCsrID0gY29kZXNldFtjbnRdOworCisgICAgICAqd3AgPSAnXDAnOworICAgIH0KKworICByZXR1cm4gKGNvbnN0IGNoYXIgKikgcmV0dmFsOworfQorCisKKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworCisvKiBXZSBkb24ndCB3YW50IGxpYmludGwuYSB0byBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcnkuICBTbyB3ZQorICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKyAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCisgICB0byBiZSBkZWZpbmVkLiAgKi8KKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCitzdGF0aWMgY2hhciAqCitzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKyAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgIC8qIERvIG5vdGhpbmcuICovIDsKKyAgcmV0dXJuIGRlc3QgLSAxOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9saWJnZXR0ZXh0LmggYi9lMmZzcHJvZ3MvaW50bC9saWJnZXR0ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5Mjk2MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2xpYmdldHRleHQuaApAQCAtMCwwICsxLDE4MiBAQAorLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKy8qIEJlY2F1c2Ugb24gc29tZSBzeXN0ZW1zIChlLmcuIFNvbGFyaXMpIHdlIHNvbWV0aW1lcyBoYXZlIHRvIGluY2x1ZGUKKyAgIHRoZSBzeXN0ZW1zIGxpYmludGwuaCBhcyB3ZWxsIGFzIHRoaXMgZmlsZSB3ZSBoYXZlIG1vcmUgY29tcGxleAorICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKyAgIGRlZmluZSBfTElCSU5UTF9IIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBwcm90ZWN0IHRoZSBkZWZpbml0aW9uIGhlcmUuICAqLworCisjaWYgIWRlZmluZWQgX0xJQklOVExfSCB8fCAhZGVmaW5lZCBfTElCR0VUVEVYVF9ICisjaWZuZGVmIF9MSUJJTlRMX0gKKyMgZGVmaW5lIF9MSUJJTlRMX0gJMQorI2VuZGlmCisjZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorCisvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKyAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworI2RlZmluZSBfX1VTRV9HTlVfR0VUVEVYVCAxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIEhBVkVfTE9DQUxFX0gKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworI2lmbmRlZiBQQVJBTVMKKyMgaWYgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCisjIGVsc2UKKyMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyMgaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX0dOVUNfXworIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCisjIGVsc2UKKyMgIGRlZmluZSBOVUxMICgwKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiAhSEFWRV9MQ19NRVNTQUdFUworLyogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGdldHRleHQoKSBhbmQgZGdldHRleHQoKQorICAgZnVuY3Rpb24uICBCdXQgc29tZSBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGlzIGRlZmluZWQuICBEZWZpbmUgaXQKKyAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCisjIGRlZmluZSBMQ19NRVNTQUdFUyAoLTEpCisjZW5kaWYKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuICBEZXJpdmVkIGZyb20KKyAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCitzdHJ1Y3QgX21zZ19lbnQKK3sKKyAgY29uc3QgY2hhciAqX21zZzsKKyAgaW50IF9tc2dfbnVtYmVyOworfTsKKworCisjaWYgSEFWRV9DQVRHRVRTCisvKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKyAgIGdlbmVyYXRlZCBmaWxlIGBjYXQtaWQtdGJsLmMnLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXTsKK2V4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworI2VuZGlmCisKKworLyogRm9yIGF1dG9tYXRpY2FsIGV4dHJhY3Rpb24gb2YgbWVzc2FnZXMgc29tZXRpbWVzIG5vIHJlYWwKKyAgIHRyYW5zbGF0aW9uIGlzIG5lZWRlZC4gIEluc3RlYWQgdGhlIHN0cmluZyBpdHNlbGYgaXMgdGhlIHJlc3VsdC4gICovCisjZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorICAgdGV4dCkuICAqLworZXh0ZXJuIGNoYXIgKmdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19tc2dpZCkpOworZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KK2V4dGVybiBjaGFyICpkZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpKTsKK2V4dGVybiBjaGFyICpkZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKyAgIGxvY2FsZS4gICovCitleHRlcm4gY2hhciAqZGNnZXR0ZXh0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKwkJCQlpbnQgX19jYXRlZ29yeSkpOworZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSk7CisKKworLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCitleHRlcm4gY2hhciAqdGV4dGRvbWFpbiBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CisKKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkpOworZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluX18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKworI2lmIEVOQUJMRV9OTFMKKworLyogU29sYXJpcyAyLjMgaGFzIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGJ1dCBkY2dldHRleHQgaXMgbWlzc2luZy4KKyAgIFNvIHdlIG9taXQgdGhpcyBvcHRpbWl6YXRpb24gZm9yIFNvbGFyaXMgMi4zLiAgQlRXLCBTb2xhcmlzIDIuNAorICAgaGFzIGRjZ2V0dGV4dC4gICovCisjIGlmICFIQVZFX0NBVEdFVFMgJiYgKCFIQVZFX0dFVFRFWFQgfHwgSEFWRV9EQ0dFVFRFWFQpCisKKyMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKyAgICAgZGdldHRleHQgKE5VTEwsIE1zZ2lkKQorCisjICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCisgICAgIGRjZ2V0dGV4dCAoRG9tYWlubmFtZSwgTXNnaWQsIExDX01FU1NBR0VTKQorCisjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiBsb2FkbXNnY2F0LmMuICBXZSBuZWVkIGEgc2lnbiwKKyAgIHdoZXRoZXIgYSBuZXcgY2F0YWxvZyB3YXMgbG9hZGVkLCB3aGljaCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGFsbAorICAgdHJhbnNsYXRpb25zLiAgKi8KK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKworIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKyAgKF9fZXh0ZW5zaW9uX18JCQkJCQkJICAgICAgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCisgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoTXNnaWQpKQkJCQkJICAgICAgXAorICAgICAgIHsJCQkJCQkJCSAgICAgIFwKKwkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKwkgc3RhdGljIGludCBfX2NhdGFsb2dfY291bnRlcl9fOwkJCQkgICAgICBcCisJIGlmICghIF9fdHJhbnNsYXRpb25fXyB8fCBfX2NhdGFsb2dfY291bnRlcl9fICE9IF9ubF9tc2dfY2F0X2NudHIpICAgIFwKKwkgICB7CQkJCQkJCQkgICAgICBcCisJICAgICBfX3RyYW5zbGF0aW9uX18gPQkJCQkJCSAgICAgIFwKKwkgICAgICAgZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCisJICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCisJICAgfQkJCQkJCQkJICAgICAgXAorCSBfX3Jlc3VsdCA9IF9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKyAgICAgICB9CQkJCQkJCQkgICAgICBcCisgICAgIGVsc2UJCQkJCQkJCSAgICAgIFwKKyAgICAgICBfX3Jlc3VsdCA9IGRjZ2V0dGV4dF9fIChEb21haW5uYW1lLCBNc2dpZCwgQ2F0ZWdvcnkpOwkJICAgICAgXAorICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKyAgICB9KSkKKyMgIGVuZGlmCisjIGVuZGlmCisKKyNlbHNlCisKKyMgZGVmaW5lIGdldHRleHQoTXNnaWQpIChNc2dpZCkKKyMgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkKSAoTXNnaWQpCisjIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCisjIGRlZmluZSB0ZXh0ZG9tYWluKERvbWFpbm5hbWUpICgoY2hhciAqKSBEb21haW5uYW1lKQorIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgKChjaGFyICopIERpcm5hbWUpCisKKyNlbmRpZgorCisvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9saWJnbnVpbnRsLmguaW4gYi9lMmZzcHJvZ3MvaW50bC9saWJnbnVpbnRsLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlN2ViOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2xpYmdudWludGwuaC5pbgpAQCAtMCwwICsxLDM4MyBAQAorLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCSU5UTF9ICisjZGVmaW5lIF9MSUJJTlRMX0gJMQorCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKy8qIFRoZSBMQ19NRVNTQUdFUyBsb2NhbGUgY2F0ZWdvcnkgaXMgdGhlIGNhdGVnb3J5IHVzZWQgYnkgdGhlIGZ1bmN0aW9ucworICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKyAgIE9uIHN5c3RlbXMgdGhhdCBkb24ndCBkZWZpbmUgaXQsIHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgaW5zdGVhZC4KKyAgIE9uIFNvbGFyaXMsIDxsb2NhbGUuaD4gZGVmaW5lcyBfX0xPQ0FMRV9IIChvciBfTE9DQUxFX0ggaW4gU29sYXJpcyAyLjUpCisgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworICAgTENfTUVTU0FHRVMuICBUbyBhdm9pZCBhIHJlZGVmaW5pdGlvbiB3YXJuaW5nLCBkb24ndCBkZWZpbmUgTENfTUVTU0FHRVMKKyAgIGluIHRoaXMgY2FzZS4gICovCisjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorIyBkZWZpbmUgTENfTUVTU0FHRVMgMTcyOQorI2VuZGlmCisKKy8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorICAgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dC4gICovCisjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKworLyogUHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwcG9ydGVkIGZpbGUgZm9ybWF0cy4gIFJldHVybnMgdGhlCisgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgXAorICAoKG1ham9yKSA9PSAwID8gMSA6IC0xKQorCisvKiBSZXNvbHZlIGEgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmxpY3Qgb24gREpHUFAuICBHTlUgZ2V0dGV4dCB0YWtlcworICAgcHJlY2VkZW5jZSBvdmVyIF9jb25pb19nZXR0ZXh0LiAgKi8KKyNpZmRlZiBfX0RKR1BQX18KKyMgdW5kZWYgZ2V0dGV4dAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKyAgIG5lY2Vzc2FyeSwgYmVjYXVzZSBzb21lIHN5c3RlbXMgZGVmaW5lIGdldHRleHQvdGV4dGRvbWFpbi8uLi4gaW4gdGhlIEMKKyAgIGxpYnJhcnkgKG5hbWVseSwgU29sYXJpcyAyLjQgYW5kIG5ld2VyLCBhbmQgR05VIGxpYmMgMi4wIGFuZCBuZXdlcikuCisgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKyAgIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIHRoZSBsaWJpbnRsLnNvCisgICBzaGFyZWQgbGlicmFyeS4gIFJlY2FsbCB0aGF0IG9uIEVMRiBzeXN0ZW1zLCB0aGUgc3ltYm9scyBhcmUgbG9va2VkCisgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICAgICAxLiBpbiB0aGUgZXhlY3V0YWJsZSwKKyAgICAgMi4gaW4gdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSwgaW4gb3JkZXIsCisgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisgICAgICAgIGNvbW1hbmQgbGluZSwKKyAgICAgNC4gaW4gdGhlIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcmllcywgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQorICAgICAgICBkbG9wZW4oKWVkLgorICAgVGhlIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIGxpYmludGwuc28gaWYKKyAgIGVpdGhlcgorICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKyAgICAgKiAtbGMgaXMgZ2l2ZW4gb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lIGJlZm9yZSAtbGludGwsIG9yCisgICAgICogbGliaW50bC5zbyBpcyBhIGRlcGVuZGVuY3kgb2YgYSBkbG9wZW4oKWVkIHNoYXJlZCBsaWJyYXJ5IGJ1dCBub3QKKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorICAgU2luY2UgU29sYXJpcyBnZXR0ZXh0KCkgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuIEdOVSBnZXR0ZXh0KCksIHRoaXMKKyAgIHdvdWxkIGJlIHVuYWNjZXB0YWJsZS4KKworICAgVGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgYnkgZGVmYXVsdCB0aHJvdWdoIG1hY3JvcyBpbiBDLCBzbyB0aGF0ICZnZXR0ZXh0CisgICBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRocm91Z2ggaW5saW5lIGZ1bmN0aW9ucyBpbgorICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisgICBjbGFzcyBtZXRob2RzIGNhbGxlZCAnZ2V0dGV4dCcuICAqLworCisvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisgICBJZiBoZSBkb2Vzbid0LCB3ZSBjaG9vc2UgdGhlIG1ldGhvZC4gIEEgdGhpcmQgcG9zc2libGUgbWV0aG9kIGlzCisgICBfSU5UTF9SRURJUkVDVF9BU00sIHN1cHBvcnRlZCBvbmx5IGJ5IEdDQy4gICovCisjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKyMgaWYgX19HTlVDX18gPj0gMiAmJiAhZGVmaW5lZCBfX0FQUExFX0NDX18gJiYgIWRlZmluZWQgX19NSU5HVzMyX18gJiYgIShfX0dOVUNfXyA9PSAyICYmIGRlZmluZWQgX0FJWCkgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9BU00KKyMgZWxzZQorIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisjICBlbHNlCisjICAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorLyogQXV4aWxpYXJ5IG1hY3Jvcy4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpIF9fYXNtX18gKF9JTlRMX0FTTU5BTUUgKF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgI2NuYW1lKSkKKyMgZGVmaW5lIF9JTlRMX0FTTU5BTUUocHJlZml4LGNuYW1lc3RyaW5nKSBfSU5UTF9TVFJJTkdJRlkgKHByZWZpeCkgY25hbWVzdHJpbmcKKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKyNlbHNlCisjIGRlZmluZSBfSU5UTF9BU00oY25hbWUpCisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisgICB0ZXh0KS4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCitleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCkKK3sKKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7Cit9CisjZWxzZQorI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBkZWZpbmUgZ2V0dGV4dCBsaWJpbnRsX2dldHRleHQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2dldHRleHQpOworI2VuZGlmCisKKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2RnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpOworc3RhdGljIGlubGluZSBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQoreworICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkZ2V0dGV4dCBsaWJpbnRsX2RnZXR0ZXh0CisjZW5kaWYKK2V4dGVybiBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kZ2V0dGV4dCk7CisjZW5kaWYKKworLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICBsb2NhbGUuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisJCQkJaW50IF9fY2F0ZWdvcnkpOworc3RhdGljIGlubGluZSBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKwkJCSAgICAgICBpbnQgX19jYXRlZ29yeSkKK3sKKyAgcmV0dXJuIGxpYmludGxfZGNnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQsIF9fY2F0ZWdvcnkpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIGRjZ2V0dGV4dCBsaWJpbnRsX2RjZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisJCQlpbnQgX19jYXRlZ29yeSkKKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKyNlbmRpZgorCisKKy8qIFNpbWlsYXIgdG8gYGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICBudW1iZXIgTi4gICovCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCitleHRlcm4gY2hhciAqbGliaW50bF9uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbik7CitzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCit7CisgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7Cit9CisjZWxzZQorI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworIyBkZWZpbmUgbmdldHRleHQgbGliaW50bF9uZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfbmdldHRleHQpOworI2VuZGlmCisKKy8qIFNpbWlsYXIgdG8gYGRnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgbnVtYmVyIE4uICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworc3RhdGljIGlubGluZSBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisJCQkgICAgICAgY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKK3sKKyAgcmV0dXJuIGxpYmludGxfZG5nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkbmdldHRleHQgbGliaW50bF9kbmdldHRleHQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kbmdldHRleHQpOworI2VuZGlmCisKKy8qIFNpbWlsYXIgdG8gYGRjZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIG51bWJlciBOLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQoreworICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uLCBfX2NhdGVnb3J5KTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorI2VuZGlmCitleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kY25nZXR0ZXh0KTsKKyNlbmRpZgorCisKKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorICAgSWYgRE9NQUlOTkFNRSBpcyBudWxsLCByZXR1cm4gdGhlIGN1cnJlbnQgZGVmYXVsdC4KKyAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKK3N0YXRpYyBpbmxpbmUgY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQoreworICByZXR1cm4gbGliaW50bF90ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIHRleHRkb21haW4gbGliaW50bF90ZXh0ZG9tYWluCisjZW5kaWYKK2V4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX3RleHRkb21haW4pOworI2VuZGlmCisKKy8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CitzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKK3sKKyAgcmV0dXJuIGxpYmludGxfYmluZHRleHRkb21haW4gKF9fZG9tYWlubmFtZSwgX19kaXJuYW1lKTsKK30KKyNlbHNlCisjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisjIGRlZmluZSBiaW5kdGV4dGRvbWFpbiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluCisjZW5kaWYKK2V4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX2Rpcm5hbWUpCisgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluKTsKKyNlbmRpZgorCisvKiBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlCisgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKK2V4dGVybiBjaGFyICpsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7CitzdGF0aWMgaW5saW5lIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJCSAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQoreworICByZXR1cm4gbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCAoX19kb21haW5uYW1lLCBfX2NvZGVzZXQpOworfQorI2Vsc2UKKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKyMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisJCQkJICAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisjZW5kaWYKKworCisvKiBTdXBwb3J0IGZvciBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucyBpbiAqcHJpbnRmKCksIGZvbGxvd2luZyB0aGUKKyAgIFBPU0lYL1hTSSBzcGVjaWZpY2F0aW9uLgorICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisgICBpbiBzb3VyY2UgZmlsZXMgdGhhdCAjaW5jbHVkZSA8bGliaW50bC5oPiBvciAjaW5jbHVkZSAiZ2V0dGV4dC5oIi4KKyAgIFBhY2thZ2VzIHRoYXQgdXNlICpwcmludGYoKSBpbiBzb3VyY2UgZmlsZXMgdGhhdCBkb24ndCByZWZlciB0byBfKCkKKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKyAgIG9mIF8oKSBvciBnZXR0ZXh0KCkgbmVlZCB0byBhZGQgdGhpcyAjaW5jbHVkZS4gIE9oIHdlbGwuICAqLworCisjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCB2YV9saXN0LiAgKi8KKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKyMgaW5jbHVkZSA8c3RkYXJnLmg+CisjZWxzZQorIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisjZW5kaWYKKworI3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnByaW50ZiBsaWJpbnRsX2ZwcmludGYKK2V4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CisjdW5kZWYgdmZwcmludGYKKyNkZWZpbmUgdmZwcmludGYgbGliaW50bF92ZnByaW50ZgorZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworCisjdW5kZWYgcHJpbnRmCisjZGVmaW5lIHByaW50ZiBsaWJpbnRsX3ByaW50ZgorZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKyN1bmRlZiB2cHJpbnRmCisjZGVmaW5lIHZwcmludGYgbGliaW50bF92cHJpbnRmCitleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyN1bmRlZiBzcHJpbnRmCisjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCitleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworI3VuZGVmIHZzcHJpbnRmCisjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKK2V4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKworI2lmIEBIQVZFX1NOUFJJTlRGQAorCisjdW5kZWYgc25wcmludGYKKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKKyN1bmRlZiB2c25wcmludGYKKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCitleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjaWYgQEhBVkVfQVNQUklOVEZACisKKyN1bmRlZiBhc3ByaW50ZgorI2RlZmluZSBhc3ByaW50ZiBsaWJpbnRsX2FzcHJpbnRmCitleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisjdW5kZWYgdmFzcHJpbnRmCisjZGVmaW5lIHZhc3ByaW50ZiBsaWJpbnRsX3Zhc3ByaW50ZgorZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjaWYgQEhBVkVfV1BSSU5URkAKKworI3VuZGVmIGZ3cHJpbnRmCisjZGVmaW5lIGZ3cHJpbnRmIGxpYmludGxfZndwcmludGYKK2V4dGVybiBpbnQgZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworI3VuZGVmIHZmd3ByaW50ZgorI2RlZmluZSB2ZndwcmludGYgbGliaW50bF92ZndwcmludGYKK2V4dGVybiBpbnQgdmZ3cHJpbnRmIChGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisKKyN1bmRlZiB3cHJpbnRmCisjZGVmaW5lIHdwcmludGYgbGliaW50bF93cHJpbnRmCitleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKyN1bmRlZiB2d3ByaW50ZgorI2RlZmluZSB2d3ByaW50ZiBsaWJpbnRsX3Z3cHJpbnRmCitleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworCisjdW5kZWYgc3dwcmludGYKKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKyN1bmRlZiB2c3dwcmludGYKKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCitleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CisKKyNlbmRpZgorCisjZW5kaWYKKworCisvKiBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBwYWNrYWdlcy4gICovCisKKy8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorICAgUmVsb2NhdGlvbiBzaW1wbHkgcmVwbGFjZXMgYSBwYXRobmFtZSBzdGFydGluZyB3aXRoIHRoZSBvcmlnaW5hbCBwcmVmaXgKKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisgICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCisgICBpbnN0ZWFkIG9mICIvIikuICAqLworI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorZXh0ZXJuIHZvaWQKKyAgICAgICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBsaWJpbnRsLmggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2xvYWRpbmZvLmggYi9lMmZzcHJvZ3MvaW50bC9sb2FkaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTVlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9sb2FkaW5mby5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX0xPQURJTkZPX0gKKyNkZWZpbmUgX0xPQURJTkZPX0gJMQorCisvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisgICBJbXBsZW1lbnRlZCBpbgorCisgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisgICAgIGV4cGxvZGVuYW1lLmMgICAgU3BsaXQgYSBsb2NhbGUgbmFtZSBpbnRvIGl0cyB2YXJpb3VzIGZpZWxkcy4KKyAgICAgbDEwbmZsaXN0LmMgICAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmlsZW5hbWVzIG9mIHBvc3NpYmxlIG1lc3NhZ2UgY2F0YWxvZ3MuCisgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKworICAgVGhlIG1haW4gZnVuY3Rpb24gX25sX2ZpbmRfZG9tYWluKCkgaW4gZmluZGRvbWFpbi5jIGlzIGRlY2xhcmVkCisgICBpbiBnZXR0ZXh0UC5oLgorICovCisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworICAgYWxtb3N0IGFsd2F5cyB0cnVlIG9yIGFsbW9zdCBhbHdheXMgZmFsc2UuICAqLworI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisjZW5kaWYKKworLyogU2VwYXJhdG9yIGluIFBBVEggbGlrZSBsaXN0cyBvZiBwYXRobmFtZXMuICAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOycKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKy8qIEVuY29kaW5nIG9mIGxvY2FsZSBuYW1lIHBhcnRzLiAgKi8KKyNkZWZpbmUgQ0VOX1JFVklTSU9OCQkxCisjZGVmaW5lIENFTl9TUE9OU09SCQkyCisjZGVmaW5lIENFTl9TUEVDSUFMCQk0CisjZGVmaW5lIFhQR19OT1JNX0NPREVTRVQJOAorI2RlZmluZSBYUEdfQ09ERVNFVAkJMTYKKyNkZWZpbmUgVEVSUklUT1JZCQkzMgorI2RlZmluZSBDRU5fQVVESUVOQ0UJCTY0CisjZGVmaW5lIFhQR19NT0RJRklFUgkJMTI4CisKKyNkZWZpbmUgQ0VOX1NQRUNJRklDCShDRU5fUkVWSVNJT058Q0VOX1NQT05TT1J8Q0VOX1NQRUNJQUx8Q0VOX0FVRElFTkNFKQorI2RlZmluZSBYUEdfU1BFQ0lGSUMJKFhQR19DT0RFU0VUfFhQR19OT1JNX0NPREVTRVR8WFBHX01PRElGSUVSKQorCisKK3N0cnVjdCBsb2FkZWRfbDEwbmZpbGUKK3sKKyAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgIGludCBkZWNpZGVkOworCisgIGNvbnN0IHZvaWQgKmRhdGE7CisKKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqbmV4dDsKKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqc3VjY2Vzc29yWzFdOworfTsKKworCisvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorICAgbmFtZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlCisgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsCisJCQkJCSAgc2l6ZV90IG5hbWVfbGVuKTsKKworLyogTG9va3VwIGEgbG9jYWxlIGRlcGVuZGVudCBmaWxlLgorICAgKkwxME5GSUxFX0xJU1QgZGVub3RlcyBhIHBvb2wgb2YgbG9va3VwIHJlc3VsdHMgb2YgbG9jYWxlIGRlcGVuZGVudAorICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKyAgIERJUkxJU1QgYW5kIERJUkxJU1RfTEVOIGFyZSBhbiBhcmd6IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gd2hpY2ggdG8KKyAgIGxvb2ssIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSAoaS5lLiBESVJMSVNUX0xFTiA+IDApLgorICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKyAgIFNQRUNJQUwsIFNQT05TT1IsIFJFVklTSU9OIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBsb2NhbGUgbmFtZSwgYXMKKyAgIHByb2R1Y2VkIGJ5IF9ubF9leHBsb2RlX25hbWUoKS4gIEZJTEVOQU1FIGlzIHRoZSBmaWxlbmFtZSBzdWZmaXguCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisgICBvciAtIGlmIERPX0FMTE9DQVRFIGlzIG5vbnplcm8gLSBmcmVzaGx5IGFsbG9jYXRlZCwgb3IgcG9zc2libHkgTlVMTC4KKyAgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLU5VTEwsIGl0IGlzIGFkZGVkIHRvICpMMTBORklMRV9MSVNULCBhbmQKKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKyAgIGZ1cnRoZXJtb3JlIGl0cyAtPnN1Y2Nlc3NvcltdIGZpZWxkIGNvbnRhaW5zIGEgbGlzdCBvZiBvdGhlciBsb29rdXAKKyAgIHJlc3VsdHMgZnJvbSB3aGljaCB0aGlzIGxvb2t1cCByZXN1bHQgaW5oZXJpdHMuICAqLworZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorX25sX21ha2VfbDEwbmZsaXN0IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisJCSAgICBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisJCSAgICBjb25zdCBjaGFyICpzcG9uc29yLCBjb25zdCBjaGFyICpyZXZpc2lvbiwKKwkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpOworCisvKiBMb29rdXAgdGhlIHJlYWwgbG9jYWxlIG5hbWUgZm9yIGEgbG9jYWxlIGFsaWFzIE5BTUUsIG9yIE5VTEwgaWYKKyAgIE5BTUUgaXMgbm90IGEgbG9jYWxlIGFsaWFzIChidXQgcG9zc2libHkgYSByZWFsIGxvY2FsZSBuYW1lKS4KKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpuYW1lKTsKKworLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gaXRzIHBpZWNlczogbGFuZ3VhZ2UsIG1vZGlmaWVyLAorICAgdGVycml0b3J5LCBjb2Rlc2V0LCBzcGVjaWFsLCBzcG9uc29yLCByZXZpc2lvbi4KKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisgICB0aGVyZS4gICpMQU5HVUFHRSBnZXRzIGFzc2lnbmVkIE5BTUUuICBFYWNoIG9mICpNT0RJRklFUiwgKlRFUlJJVE9SWSwKKyAgICpDT0RFU0VULCAqU1BFQ0lBTCwgKlNQT05TT1IsICpSRVZJU0lPTiBnZXRzIGFzc2lnbmVkIGVpdGhlciBhCisgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKyAgIGdldHMgYXNzaWduZWQgdGhlIGV4cGFuZGVkICpDT0RFU0VULCBpZiBpdCBpcyBkaWZmZXJlbnQgZnJvbSAqQ09ERVNFVDsKKyAgIHRoaXMgb25lIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisgICBmaWxsZWQtaW4gdmFsdWU6CisgICAgIFhQR19NT0RJRklFUiwgQ0VOX0FVRElFTkNFICBmb3IgKk1PRElGSUVSLAorICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisgICAgIFhQR19DT0RFU0VUICAgICAgICAgICAgICAgICBmb3IgKkNPREVTRVQsCisgICAgIFhQR19OT1JNX0NPREVTRVQgICAgICAgICAgICBmb3IgKk5PUk1BTElaRURfQ09ERVNFVCwKKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKyAgICAgQ0VOX1NQT05TT1IgICAgICAgICAgICAgICAgIGZvciAqU1BPTlNPUiwKKyAgICAgQ0VOX1JFVklTSU9OICAgICAgICAgICAgICAgIGZvciAqUkVWSVNJT04uCisgKi8KK2V4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmxhbmd1YWdlLAorCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksCisJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorCQkJICAgICBjb25zdCBjaGFyICoqc3BlY2lhbCwgY29uc3QgY2hhciAqKnNwb25zb3IsCisJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisKKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisgICByZXN0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYW5ndWFnZSwKKyAgIGkuZS4gdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3QuICAqLworZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKworI2VuZGlmCS8qIGxvYWRpbmZvLmggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2xvYWRtc2djYXQuYyBiL2UyZnNwcm9ncy9pbnRsL2xvYWRtc2djYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmFiNzFhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvbG9hZG1zZ2NhdC5jCkBAIC0wLDAgKzEsMTQxOCBAQAorLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIF9fR05VQ19fCisjIHVuZGVmICBhbGxvY2EKKyMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisjZWxzZQorIyBpZmRlZiBfTVNDX1ZFUgorIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgZWxzZQorIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKyMgIGVsc2UKKyMgICBpZmRlZiBfQUlYCisgI3ByYWdtYSBhbGxvY2EKKyMgICBlbHNlCisjICAgIGlmbmRlZiBhbGxvY2EKK2NoYXIgKmFsbG9jYSAoKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKyAgICB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9QT1NJWF9NQVBQRURfRklMRVMpCisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjIHVuZGVmIEhBVkVfTU1BUAorIyBkZWZpbmUgSEFWRV9NTUFQCTEKKyNlbHNlCisjIHVuZGVmIEhBVkVfTU1BUAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdtby5oIgorI2luY2x1ZGUgImdldHRleHRQLmgiCisjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorI2VuZGlmCisKKy8qIFByb3ZpZGUgZmFsbGJhY2sgdmFsdWVzIGZvciBtYWNyb3MgdGhhdCBvdWdodCB0byBiZSBkZWZpbmVkIGluIDxpbnR0eXBlcy5oPi4KKyAgIE5vdGUgdGhhdCBvdXIgZmFsbGJhY2sgdmFsdWVzIG5lZWQgbm90IGJlIGxpdGVyYWwgc3RyaW5ncywgYmVjYXVzZSB3ZSBkb24ndAorICAgdXNlIHRoZW0gd2l0aCBwcmVwcm9jZXNzb3Igc3RyaW5nIGNvbmNhdGVuYXRpb24uICAqLworI2lmICFkZWZpbmVkIFBSSWQ4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWQ4CisjIGRlZmluZSBQUklkOCAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWk4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWk4CisjIGRlZmluZSBQUklpOCAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW84IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSW84CisjIGRlZmluZSBQUklvOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXU4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXU4CisjIGRlZmluZSBQUkl1OCAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXg4CisjIGRlZmluZSBQUkl4OCAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSVg4CisjIGRlZmluZSBQUklYOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWQxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklkMTYKKyMgZGVmaW5lIFBSSWQxNiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWkxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklpMTYKKyMgZGVmaW5lIFBSSWkxNiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW8xNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklvMTYKKyMgZGVmaW5lIFBSSW8xNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXUxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl1MTYKKyMgZGVmaW5lIFBSSXUxNiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl4MTYKKyMgZGVmaW5lIFBSSXgxNiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklYMTYKKyMgZGVmaW5lIFBSSVgxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWQzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklkMzIKKyMgZGVmaW5lIFBSSWQzMiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklpMzIKKyMgZGVmaW5lIFBSSWkzMiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW8zMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklvMzIKKyMgZGVmaW5lIFBSSW8zMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXUzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl1MzIKKyMgZGVmaW5lIFBSSXUzMiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl4MzIKKyMgZGVmaW5lIFBSSXgzMiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklYMzIKKyMgZGVmaW5lIFBSSVgzMiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWQ2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklkNjQKKyMgZGVmaW5lIFBSSWQ2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxkIiA6ICJsbGQiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJaTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWk2NAorIyBkZWZpbmUgUFJJaTY0IChzaXplb2YgKGxvbmcpID09IDggPyAibGkiIDogImxsaSIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklvNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJbzY0CisjIGRlZmluZSBQUklvNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsbyIgOiAibGxvIikKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXU2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl1NjQKKyMgZGVmaW5lIFBSSXU2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImx1IiA6ICJsbHUiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJeDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXg2NAorIyBkZWZpbmUgUFJJeDY0IChzaXplb2YgKGxvbmcpID09IDggPyAibHgiIDogImxseCIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklYNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJWDY0CisjIGRlZmluZSBQUklYNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsWCIgOiAibGxYIikKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZExFQVNUOAorIyBkZWZpbmUgUFJJZExFQVNUOCAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJaUxFQVNUOAorIyBkZWZpbmUgUFJJaUxFQVNUOCAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9MRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJb0xFQVNUOAorIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdUxFQVNUOAorIyBkZWZpbmUgUFJJdUxFQVNUOCAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJeExFQVNUOAorIyBkZWZpbmUgUFJJeExFQVNUOCAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJWExFQVNUOAorIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWRMRUFTVDE2CisjIGRlZmluZSBQUklkTEVBU1QxNiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWlMRUFTVDE2CisjIGRlZmluZSBQUklpTEVBU1QxNiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9MRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSW9MRUFTVDE2CisjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXVMRUFTVDE2CisjIGRlZmluZSBQUkl1TEVBU1QxNiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXhMRUFTVDE2CisjIGRlZmluZSBQUkl4TEVBU1QxNiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSVhMRUFTVDE2CisjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWRMRUFTVDMyCisjIGRlZmluZSBQUklkTEVBU1QzMiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWlMRUFTVDMyCisjIGRlZmluZSBQUklpTEVBU1QzMiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9MRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSW9MRUFTVDMyCisjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXVMRUFTVDMyCisjIGRlZmluZSBQUkl1TEVBU1QzMiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXhMRUFTVDMyCisjIGRlZmluZSBQUkl4TEVBU1QzMiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSVhMRUFTVDMyCisjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWRMRUFTVDY0CisjIGRlZmluZSBQUklkTEVBU1Q2NCBQUklkNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWlMRUFTVDY0CisjIGRlZmluZSBQUklpTEVBU1Q2NCBQUklpNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9MRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSW9MRUFTVDY0CisjIGRlZmluZSBQUklvTEVBU1Q2NCBQUklvNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXVMRUFTVDY0CisjIGRlZmluZSBQUkl1TEVBU1Q2NCBQUkl1NjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXhMRUFTVDY0CisjIGRlZmluZSBQUkl4TEVBU1Q2NCBQUkl4NjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSVhMRUFTVDY0CisjIGRlZmluZSBQUklYTEVBU1Q2NCBQUklYNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklkRkFTVDgKKyMgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklpRkFTVDgKKyMgZGVmaW5lIFBSSWlGQVNUOCAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9GQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklvRkFTVDgKKyMgZGVmaW5lIFBSSW9GQVNUOCAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl1RkFTVDgKKyMgZGVmaW5lIFBSSXVGQVNUOCAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUkl4RkFTVDgKKyMgZGVmaW5lIFBSSXhGQVNUOCAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklYRkFTVDgKKyMgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZEZBU1QxNgorIyBkZWZpbmUgUFJJZEZBU1QxNiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJaUZBU1QxNgorIyBkZWZpbmUgUFJJaUZBU1QxNiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9GQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJb0ZBU1QxNgorIyBkZWZpbmUgUFJJb0ZBU1QxNiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdUZBU1QxNgorIyBkZWZpbmUgUFJJdUZBU1QxNiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJeEZBU1QxNgorIyBkZWZpbmUgUFJJeEZBU1QxNiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJWEZBU1QxNgorIyBkZWZpbmUgUFJJWEZBU1QxNiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZEZBU1QzMgorIyBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJaUZBU1QzMgorIyBkZWZpbmUgUFJJaUZBU1QzMiAiaSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9GQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJb0ZBU1QzMgorIyBkZWZpbmUgUFJJb0ZBU1QzMiAibyIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdUZBU1QzMgorIyBkZWZpbmUgUFJJdUZBU1QzMiAidSIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJeEZBU1QzMgorIyBkZWZpbmUgUFJJeEZBU1QzMiAieCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJWEZBU1QzMgorIyBkZWZpbmUgUFJJWEZBU1QzMiAiWCIKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZEZBU1Q2NAorIyBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWlGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJaUZBU1Q2NAorIyBkZWZpbmUgUFJJaUZBU1Q2NCBQUklpNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSW9GQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJb0ZBU1Q2NAorIyBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdUZBU1Q2NAorIyBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJeEZBU1Q2NAorIyBkZWZpbmUgUFJJeEZBU1Q2NCBQUkl4NjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSVhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJWEZBU1Q2NAorIyBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZE1BWAorIyBkZWZpbmUgUFJJZE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGQiIDogImxsZCIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWlNQVgKKyMgZGVmaW5lIFBSSWlNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxpIiA6ICJsbGkiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb01BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklvTUFYCisjIGRlZmluZSBQUklvTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiAibGxvIikKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdU1BWAorIyBkZWZpbmUgUFJJdU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHUiIDogImxsdSIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXhNQVgKKyMgZGVmaW5lIFBSSXhNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx4IiA6ICJsbHgiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklYTUFYCisjIGRlZmluZSBQUklYTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiAibGxYIikKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSWRQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJZFBUUgorIyBkZWZpbmUgUFJJZFBUUiBcCisgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsZCIgOiBcCisgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImQiIDogXAorICAgImxsZCIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSWlQVFIKKyMgZGVmaW5lIFBSSWlQVFIgXAorICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGkiIDogXAorICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJpIiA6IFwKKyAgICJsbGkiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJb1BUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklvUFRSCisjIGRlZmluZSBQUklvUFRSIFwKKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxvIiA6IFwKKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAibyIgOiBcCisgICAibGxvIikKKyNlbmRpZgorI2lmICFkZWZpbmVkIFBSSXVQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKyMgdW5kZWYgUFJJdVBUUgorIyBkZWZpbmUgUFJJdVBUUiBcCisgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsdSIgOiBcCisgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gInUiIDogXAorICAgImxsdSIpCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBQUkl4UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisjIHVuZGVmIFBSSXhQVFIKKyMgZGVmaW5lIFBSSXhQVFIgXAorICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHgiIDogXAorICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJ4IiA6IFwKKyAgICJsbHgiKQorI2VuZGlmCisjaWYgIWRlZmluZWQgUFJJWFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorIyB1bmRlZiBQUklYUFRSCisjIGRlZmluZSBQUklYUFRSIFwKKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxYIiA6IFwKKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiWCIgOiBcCisgICAibGxYIikKKyNlbmRpZgorCisvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisKKyNpZmRlZiBfTElCQworLyogUmVuYW1lIHRoZSBub24gSVNPIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKyAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworIyBkZWZpbmUgb3BlbiAgIF9fb3BlbgorIyBkZWZpbmUgY2xvc2UgIF9fY2xvc2UKKyMgZGVmaW5lIHJlYWQgICBfX3JlYWQKKyMgZGVmaW5lIG1tYXAgICBfX21tYXAKKyMgZGVmaW5lIG11bm1hcCBfX211bm1hcAorI2VuZGlmCisKKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworI2lmZGVmIEhBVkVfQUxMT0NBCisjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisjZWxzZQorIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisjZW5kaWYKKworLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisgICBPX0JJTkFSWSBpcyB1c3VhbGx5IGRlY2xhcmVkIGluIDxmY250bC5oPi4gKi8KKyNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJTkFSWQorICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKyMgZGVmaW5lIE9fQklOQVJZIF9PX0JJTkFSWQorIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKyNlbmRpZgorI2lmZGVmIF9fQkVPU19fCisgIC8qIEJlT1MgNSBoYXMgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBubyBlZmZlY3QuICAqLworIyB1bmRlZiBPX0JJTkFSWQorIyB1bmRlZiBPX1RFWFQKKyNlbmRpZgorLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBkZWZhdWx0LiAgKi8KKyNpZm5kZWYgT19CSU5BUlkKKyMgZGVmaW5lIE9fQklOQVJZIDAKKyNlbmRpZgorCisKKy8qIFdlIG5lZWQgYSBzaWduLCB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQKKyAgIHdpdGggYWxsIHRyYW5zbGF0aW9ucy4gIFRoaXMgaXMgaW1wb3J0YW50IGlmIHRoZSB0cmFuc2xhdGlvbnMgYXJlCisgICBjYWNoZWQgYnkgb25lIG9mIEdDQydzIGZlYXR1cmVzLiAgKi8KK2ludCBfbmxfbXNnX2NhdF9jbnRyOworCisKKy8qIEV4cGFuZCBhIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICBSZXR1cm4gTlVMTCBpZiB1bnN1cHBvcnRlZC4gICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIC8qIFRlc3QgZm9yIGFuIElTTyBDIDk5IHNlY3Rpb24gNy44LjEgZm9ybWF0IHN0cmluZyBkaXJlY3RpdmUuCisgICAgIFN5bnRheDoKKyAgICAgUCBSIEkgeyBkIHwgaSB8IG8gfCB1IHwgeCB8IFggfQorICAgICB7IHsgfCBMRUFTVCB8IEZBU1QgfSB7IDggfCAxNiB8IDMyIHwgNjQgfSB8IE1BWCB8IFBUUiB9ICAqLworICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorICAgICBkYXRhIHJlbG9jYXRpb25zIGNvc3Qgc3RhcnR1cCB0aW1lLiAgKi8KKyAgaWYgKG5hbWVbMF0gPT0gJ1AnICYmIG5hbWVbMV0gPT0gJ1InICYmIG5hbWVbMl0gPT0gJ0knKQorICAgIHsKKyAgICAgIGlmIChuYW1lWzNdID09ICdkJyB8fCBuYW1lWzNdID09ICdpJyB8fCBuYW1lWzNdID09ICdvJyB8fCBuYW1lWzNdID09ICd1JworCSAgfHwgbmFtZVszXSA9PSAneCcgfHwgbmFtZVszXSA9PSAnWCcpCisJeworCSAgaWYgKG5hbWVbNF0gPT0gJzgnICYmIG5hbWVbNV0gPT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKwkJcmV0dXJuIFBSSWQ4OworCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKwkJcmV0dXJuIFBSSWk4OworCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKwkJcmV0dXJuIFBSSW84OworCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKwkJcmV0dXJuIFBSSXU4OworCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKwkJcmV0dXJuIFBSSXg4OworCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKwkJcmV0dXJuIFBSSVg4OworCSAgICAgIGFib3J0ICgpOworCSAgICB9CisJICBpZiAobmFtZVs0XSA9PSAnMScgJiYgbmFtZVs1XSA9PSAnNicgJiYgbmFtZVs2XSA9PSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQlyZXR1cm4gUFJJZDE2OworCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKwkJcmV0dXJuIFBSSWkxNjsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisJCXJldHVybiBQUklvMTY7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQlyZXR1cm4gUFJJdTE2OworCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKwkJcmV0dXJuIFBSSXgxNjsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisJCXJldHVybiBQUklYMTY7CisJICAgICAgYWJvcnQgKCk7CisJICAgIH0KKwkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnZCcpCisJCXJldHVybiBQUklkMzI7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorCQlyZXR1cm4gUFJJaTMyOworCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKwkJcmV0dXJuIFBSSW8zMjsKKwkgICAgICBpZiAobmFtZVszXSA9PSAndScpCisJCXJldHVybiBQUkl1MzI7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorCQlyZXR1cm4gUFJJeDMyOworCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKwkJcmV0dXJuIFBSSVgzMjsKKwkgICAgICBhYm9ydCAoKTsKKwkgICAgfQorCSAgaWYgKG5hbWVbNF0gPT0gJzYnICYmIG5hbWVbNV0gPT0gJzQnICYmIG5hbWVbNl0gPT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKwkJcmV0dXJuIFBSSWQ2NDsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisJCXJldHVybiBQUklpNjQ7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ28nKQorCQlyZXR1cm4gUFJJbzY0OworCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKwkJcmV0dXJuIFBSSXU2NDsKKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisJCXJldHVybiBQUkl4NjQ7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ1gnKQorCQlyZXR1cm4gUFJJWDY0OworCSAgICAgIGFib3J0ICgpOworCSAgICB9CisJICBpZiAobmFtZVs0XSA9PSAnTCcgJiYgbmFtZVs1XSA9PSAnRScgJiYgbmFtZVs2XSA9PSAnQScKKwkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKwkgICAgeworCSAgICAgIGlmIChuYW1lWzldID09ICc4JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorCQl7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQkgICAgcmV0dXJuIFBSSWRMRUFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorCQkgICAgcmV0dXJuIFBSSWlMRUFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQkgICAgcmV0dXJuIFBSSXVMRUFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorCQkgICAgcmV0dXJuIFBSSXhMRUFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CisJCSAgYWJvcnQgKCk7CisJCX0KKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCisJCXsKKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisJCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorCQkgICAgcmV0dXJuIFBSSWlMRUFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICdvJykKKwkJICAgIHJldHVybiBQUklvTEVBU1QxNjsKKwkJICBpZiAobmFtZVszXSA9PSAndScpCisJCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorCQkgICAgcmV0dXJuIFBSSXhMRUFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICdYJykKKwkJICAgIHJldHVybiBQUklYTEVBU1QxNjsKKwkJICBhYm9ydCAoKTsKKwkJfQorCSAgICAgIGlmIChuYW1lWzldID09ICczJyAmJiBuYW1lWzEwXSA9PSAnMicgJiYgbmFtZVsxMV0gPT0gJ1wwJykKKwkJeworCQkgIGlmIChuYW1lWzNdID09ICdkJykKKwkJICAgIHJldHVybiBQUklkTEVBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisJCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CisJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorCQkgICAgcmV0dXJuIFBSSW9MRUFTVDMyOworCQkgIGlmIChuYW1lWzNdID09ICd1JykKKwkJICAgIHJldHVybiBQUkl1TEVBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisJCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CisJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorCQkgICAgcmV0dXJuIFBSSVhMRUFTVDMyOworCQkgIGFib3J0ICgpOworCQl9CisJICAgICAgaWYgKG5hbWVbOV0gPT0gJzYnICYmIG5hbWVbMTBdID09ICc0JyAmJiBuYW1lWzExXSA9PSAnXDAnKQorCQl7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQkgICAgcmV0dXJuIFBSSWRMRUFTVDY0OworCQkgIGlmIChuYW1lWzNdID09ICdpJykKKwkJICAgIHJldHVybiBQUklpTEVBU1Q2NDsKKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisJCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQkgICAgcmV0dXJuIFBSSXVMRUFTVDY0OworCQkgIGlmIChuYW1lWzNdID09ICd4JykKKwkJICAgIHJldHVybiBQUkl4TEVBU1Q2NDsKKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisJCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CisJCSAgYWJvcnQgKCk7CisJCX0KKwkgICAgfQorCSAgaWYgKG5hbWVbNF0gPT0gJ0YnICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1MnCisJICAgICAgJiYgbmFtZVs3XSA9PSAnVCcpCisJICAgIHsKKwkgICAgICBpZiAobmFtZVs4XSA9PSAnOCcgJiYgbmFtZVs5XSA9PSAnXDAnKQorCQl7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQkgICAgcmV0dXJuIFBSSWRGQVNUODsKKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisJCSAgICByZXR1cm4gUFJJaUZBU1Q4OworCQkgIGlmIChuYW1lWzNdID09ICdvJykKKwkJICAgIHJldHVybiBQUklvRkFTVDg7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQkgICAgcmV0dXJuIFBSSXVGQVNUODsKKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisJCSAgICByZXR1cm4gUFJJeEZBU1Q4OworCQkgIGlmIChuYW1lWzNdID09ICdYJykKKwkJICAgIHJldHVybiBQUklYRkFTVDg7CisJCSAgYWJvcnQgKCk7CisJCX0KKwkgICAgICBpZiAobmFtZVs4XSA9PSAnMScgJiYgbmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKwkJeworCQkgIGlmIChuYW1lWzNdID09ICdkJykKKwkJICAgIHJldHVybiBQUklkRkFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICdpJykKKwkJICAgIHJldHVybiBQUklpRkFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICdvJykKKwkJICAgIHJldHVybiBQUklvRkFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICd1JykKKwkJICAgIHJldHVybiBQUkl1RkFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICd4JykKKwkJICAgIHJldHVybiBQUkl4RkFTVDE2OworCQkgIGlmIChuYW1lWzNdID09ICdYJykKKwkJICAgIHJldHVybiBQUklYRkFTVDE2OworCQkgIGFib3J0ICgpOworCQl9CisJICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCisJCXsKKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisJCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisJCSAgICByZXR1cm4gUFJJaUZBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisJCSAgICByZXR1cm4gUFJJb0ZBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAndScpCisJCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisJCSAgICByZXR1cm4gUFJJeEZBU1QzMjsKKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisJCSAgICByZXR1cm4gUFJJWEZBU1QzMjsKKwkJICBhYm9ydCAoKTsKKwkJfQorCSAgICAgIGlmIChuYW1lWzhdID09ICc2JyAmJiBuYW1lWzldID09ICc0JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorCQl7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQkgICAgcmV0dXJuIFBSSWRGQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorCQkgICAgcmV0dXJuIFBSSW9GQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQkgICAgcmV0dXJuIFBSSXVGQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CisJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorCQkgICAgcmV0dXJuIFBSSVhGQVNUNjQ7CisJCSAgYWJvcnQgKCk7CisJCX0KKwkgICAgfQorCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCisJICAgICAgJiYgbmFtZVs3XSA9PSAnXDAnKQorCSAgICB7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorCQlyZXR1cm4gUFJJZE1BWDsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnaScpCisJCXJldHVybiBQUklpTUFYOworCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKwkJcmV0dXJuIFBSSW9NQVg7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorCQlyZXR1cm4gUFJJdU1BWDsKKwkgICAgICBpZiAobmFtZVszXSA9PSAneCcpCisJCXJldHVybiBQUkl4TUFYOworCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKwkJcmV0dXJuIFBSSVhNQVg7CisJICAgICAgYWJvcnQgKCk7CisJICAgIH0KKwkgIGlmIChuYW1lWzRdID09ICdQJyAmJiBuYW1lWzVdID09ICdUJyAmJiBuYW1lWzZdID09ICdSJworCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKwkgICAgeworCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKwkJcmV0dXJuIFBSSWRQVFI7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorCQlyZXR1cm4gUFJJaVBUUjsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisJCXJldHVybiBQUklvUFRSOworCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKwkJcmV0dXJuIFBSSXVQVFI7CisJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorCQlyZXR1cm4gUFJJeFBUUjsKKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisJCXJldHVybiBQUklYUFRSOworCSAgICAgIGFib3J0ICgpOworCSAgICB9CisJfQorICAgIH0KKyAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworICBpZiAobmFtZVswXSA9PSAnSScgJiYgbmFtZVsxXSA9PSAnXDAnKQorICAgIHsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorICAgICAgLyogVGhlICdJJyBmbGFnLCBpbiBudW1lcmljIGZvcm1hdCBkaXJlY3RpdmVzLCByZXBsYWNlcyBBU0NJSSBkaWdpdHMKKwkgd2l0aCB0aGUgJ291dGRpZ2l0cycgZGVmaW5lZCBpbiB0aGUgTENfQ1RZUEUgbG9jYWxlIGZhY2V0LiAgVGhpcyBpcworCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCisgICAgICByZXR1cm4gIkkiOworI2Vsc2UKKyAgICAgIHJldHVybiAiIjsKKyNlbmRpZgorICAgIH0KKyAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworICByZXR1cm4gTlVMTDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgY29kZXNldCBkZXBlbmRlbnQgcGFydHMgb2YgYW4gb3BlbmVkIG1lc3NhZ2UgY2F0YWxvZy4KKyAgIFJldHVybiB0aGUgaGVhZGVyIGVudHJ5LiAgKi8KK2NvbnN0IGNoYXIgKgoraW50ZXJuYWxfZnVuY3Rpb24KK19ubF9pbml0X2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKwkJICAgICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbiwKKwkJICAgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcpCit7CisgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4KKyAgICAgVGhpcyBjYW4gYmUgZm91bmQgKGluIHRleHR1YWwgZm9ybSkgaW4gdGhlIGVudHJ5ICIiLiAgSWYgdGhpcworICAgICBlbnRyeSBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGlzIGRvZXMgbm90IGNvbnRhaW4gdGhlIGBjaGFyc2V0PScKKyAgICAgaW5mb3JtYXRpb24sIHdlIHdpbGwgYXNzdW1lIHRoZSBjaGFyc2V0IG1hdGNoZXMgdGhlIG9uZSB0aGUKKyAgICAgY3VycmVudCBsb2NhbGUgYW5kIHdlIGRvbid0IGhhdmUgdG8gcGVyZm9ybSBhbnkgY29udmVyc2lvbi4gICovCisgIGNoYXIgKm51bGxlbnRyeTsKKyAgc2l6ZV90IG51bGxlbnRyeWxlbjsKKworICAvKiBQcmVpbml0aWFsaXplIGZpZWxkcywgdG8gYXZvaWQgcmVjdXJzaW9uIGR1cmluZyBfbmxfZmluZF9tc2cuICAqLworICBkb21haW4tPmNvZGVzZXRfY250ciA9CisgICAgKGRvbWFpbmJpbmRpbmcgIT0gTlVMTCA/IGRvbWFpbmJpbmRpbmctPmNvZGVzZXRfY250ciA6IDApOworI2lmZGVmIF9MSUJDCisgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworI2Vsc2UKKyMgaWYgSEFWRV9JQ09OVgorICBkb21haW4tPmNvbnYgPSAoaWNvbnZfdCkgLTE7CisjIGVuZGlmCisjZW5kaWYKKyAgZG9tYWluLT5jb252X3RhYiA9IE5VTEw7CisKKyAgLyogR2V0IHRoZSBoZWFkZXIgZW50cnkuICAqLworICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgJm51bGxlbnRyeWxlbik7CisKKyAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorICAgIHsKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYKKyAgICAgIGNvbnN0IGNoYXIgKmNoYXJzZXRzdHI7CisKKyAgICAgIGNoYXJzZXRzdHIgPSBzdHJzdHIgKG51bGxlbnRyeSwgImNoYXJzZXQ9Iik7CisgICAgICBpZiAoY2hhcnNldHN0ciAhPSBOVUxMKQorCXsKKwkgIHNpemVfdCBsZW47CisJICBjaGFyICpjaGFyc2V0OworCSAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKworCSAgY2hhcnNldHN0ciArPSBzdHJsZW4gKCJjaGFyc2V0PSIpOworCSAgbGVuID0gc3RyY3NwbiAoY2hhcnNldHN0ciwgIiBcdFxuIik7CisKKwkgIGNoYXJzZXQgPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEpOworIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorCSAgKigoY2hhciAqKSBtZW1wY3B5IChjaGFyc2V0LCBjaGFyc2V0c3RyLCBsZW4pKSA9ICdcMCc7CisjIGVsc2UKKwkgIG1lbWNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKTsKKwkgIGNoYXJzZXRbbGVuXSA9ICdcMCc7CisjIGVuZGlmCisKKwkgIC8qIFRoZSBvdXRwdXQgY2hhcnNldCBzaG91bGQgbm9ybWFsbHkgYmUgZGV0ZXJtaW5lZCBieSB0aGUKKwkgICAgIGxvY2FsZS4gIEJ1dCBzb21ldGltZXMgdGhlIGxvY2FsZSBpcyBub3QgdXNlZCBvciBub3QgY29ycmVjdGx5CisJICAgICBzZXQgdXAsIHNvIHdlIHByb3ZpZGUgYSBwb3NzaWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKKwkgICAgIHRoaXMuICBNb3Jlb3ZlciwgdGhlIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoCisJICAgICBiaW5kX3RleHRkb21haW5fY29kZXNldCBvdmVycmlkZXMgYm90aC4gICovCisJICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKwkgICAgb3V0Y2hhcnNldCA9IGRvbWFpbmJpbmRpbmctPmNvZGVzZXQ7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBvdXRjaGFyc2V0ID0gZ2V0ZW52ICgiT1VUUFVUX0NIQVJTRVQiKTsKKwkgICAgICBpZiAob3V0Y2hhcnNldCA9PSBOVUxMIHx8IG91dGNoYXJzZXRbMF0gPT0gJ1wwJykKKwkJeworIyBpZmRlZiBfTElCQworCQkgIG91dGNoYXJzZXQgPSBfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIENPREVTRVQpOworIyBlbHNlCisjICBpZiBIQVZFX0lDT05WCisJCSAgZXh0ZXJuIGNvbnN0IGNoYXIgKmxvY2FsZV9jaGFyc2V0ICh2b2lkKTsKKwkJICBvdXRjaGFyc2V0ID0gbG9jYWxlX2NoYXJzZXQgKCk7CisjICBlbmRpZgorIyBlbmRpZgorCQl9CisJICAgIH0KKworIyBpZmRlZiBfTElCQworCSAgLyogV2UgYWx3YXlzIHdhbnQgdG8gdXNlIHRyYW5zbGl0ZXJhdGlvbi4gICovCisJICBvdXRjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAob3V0Y2hhcnNldCwgIlRSQU5TTElUIik7CisJICBjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAoY2hhcnNldCwgTlVMTCk7CisJICBpZiAoX19nY29udl9vcGVuIChvdXRjaGFyc2V0LCBjaGFyc2V0LCAmZG9tYWluLT5jb252LAorCQkJICAgIEdDT05WX0FWT0lEX05PQ09OVikKKwkgICAgICAhPSBfX0dDT05WX09LKQorCSAgICBkb21haW4tPmNvbnYgPSAoX19nY29udl90KSAtMTsKKyMgZWxzZQorIyAgaWYgSEFWRV9JQ09OVgorCSAgLyogV2hlbiB1c2luZyBHTlUgbGliYyA+PSAyLjIgb3IgR05VIGxpYmljb252ID49IDEuNSwKKwkgICAgIHdlIHdhbnQgdG8gdXNlIHRyYW5zbGl0ZXJhdGlvbi4gICovCisjICAgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSB8fCBfX0dMSUJDX18gPiAyIFwKKyAgICAgICB8fCBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDUKKwkgIGlmIChzdHJjaHIgKG91dGNoYXJzZXQsICcvJykgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIGNoYXIgKnRtcDsKKworCSAgICAgIGxlbiA9IHN0cmxlbiAob3V0Y2hhcnNldCk7CisJICAgICAgdG1wID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxMCArIDEpOworCSAgICAgIG1lbWNweSAodG1wLCBvdXRjaGFyc2V0LCBsZW4pOworCSAgICAgIG1lbWNweSAodG1wICsgbGVuLCAiLy9UUkFOU0xJVCIsIDEwICsgMSk7CisJICAgICAgb3V0Y2hhcnNldCA9IHRtcDsKKworCSAgICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworCisJICAgICAgZnJlZWEgKG91dGNoYXJzZXQpOworCSAgICB9CisJICBlbHNlCisjICAgZW5kaWYKKwkgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisjICBlbmRpZgorIyBlbmRpZgorCisJICBmcmVlYSAoY2hhcnNldCk7CisJfQorI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKyAgICB9CisKKyAgcmV0dXJuIG51bGxlbnRyeTsKK30KKworLyogRnJlZXMgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLwordm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK19ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQoreworICBpZiAoZG9tYWluLT5jb252X3RhYiAhPSBOVUxMICYmIGRvbWFpbi0+Y29udl90YWIgIT0gKGNoYXIgKiopIC0xKQorICAgIGZyZWUgKGRvbWFpbi0+Y29udl90YWIpOworCisjaWZkZWYgX0xJQkMKKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKyAgICBfX2djb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworI2Vsc2UKKyMgaWYgSEFWRV9JQ09OVgorICBpZiAoZG9tYWluLT5jb252ICE9IChpY29udl90KSAtMSkKKyAgICBpY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKyMgZW5kaWYKKyNlbmRpZgorfQorCisvKiBMb2FkIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHNwZWNpZmllZCBieSBGSUxFTkFNRS4gIElmIGl0IGlzIG5vIHZhbGlkCisgICBtZXNzYWdlIGNhdGFsb2cgZG8gbm90aGluZy4gICovCit2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKwkJIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQoreworICBpbnQgZmQ7CisgIHNpemVfdCBzaXplOworI2lmZGVmIF9MSUJDCisgIHN0cnVjdCBzdGF0NjQgc3Q7CisjZWxzZQorICBzdHJ1Y3Qgc3RhdCBzdDsKKyNlbmRpZgorICBzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKmRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xOworICBpbnQgdXNlX21tYXAgPSAwOworICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluOworICBpbnQgcmV2aXNpb247CisgIGNvbnN0IGNoYXIgKm51bGxlbnRyeTsKKworICBkb21haW5fZmlsZS0+ZGVjaWRlZCA9IDE7CisgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKworICAvKiBOb3RlIHRoYXQgaXQgd291bGQgYmUgdXNlbGVzcyB0byBzdG9yZSBkb21haW5iaW5kaW5nIGluIGRvbWFpbl9maWxlCisgICAgIGJlY2F1c2UgZG9tYWluYmluZGluZyBtaWdodCBiZSA9PSBOVUxMIG5vdyBidXQgIT0gTlVMTCBsYXRlciAoYWZ0ZXIKKyAgICAgYSBjYWxsIHRvIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KS4gICovCisKKyAgLyogSWYgdGhlIHJlY29yZCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsb2NhbGUgdGhlIEZJTEVOQU1FCisgICAgIG1pZ2h0IGJlIE5VTEwuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCisgICAgIHNwZWNpZmljYXRpb24gdGhlIGxvY2FsZSBmaWxlIG5hbWUgaXMgZGlmZmVyZW50IGZvciBYUEcgYW5kIENFTgorICAgICBzeW50YXguICAqLworICBpZiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIFRyeSB0byBvcGVuIHRoZSBhZGRyZXNzZWQgZmlsZS4gICovCisgIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKyAgaWYgKGZkID09IC0xKQorICAgIHJldHVybjsKKworICAvKiBXZSBtdXN0IGtub3cgYWJvdXQgdGhlIHNpemUgb2YgdGhlIGZpbGUuICAqLworICBpZiAoCisjaWZkZWYgX0xJQkMKKyAgICAgIF9fYnVpbHRpbl9leHBlY3QgKGZzdGF0NjQgKGZkLCAmc3QpICE9IDAsIDApCisjZWxzZQorICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQgKGZkLCAmc3QpICE9IDAsIDApCisjZW5kaWYKKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKChzaXplID0gKHNpemVfdCkgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSwgMCkKKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPCBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlciksIDApKQorICAgIHsKKyAgICAgIC8qIFNvbWV0aGluZyB3ZW50IHdyb25nLiAgKi8KKyAgICAgIGNsb3NlIChmZCk7CisgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYgSEFWRV9NTUFQCisgIC8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gbG9hZCB0aGUgZmlsZS4gIElmIG1tYXAoKSBpcyBhdmFpbGFibGUgd2UgdHJ5CisgICAgIHRoaXMgZmlyc3QuICBJZiBub3QgYXZhaWxhYmxlIG9yIGl0IGZhaWxlZCB3ZSB0cnkgdG8gbG9hZCBpdC4gICovCisgIGRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIG1tYXAgKE5VTEwsIHNpemUsIFBST1RfUkVBRCwKKwkJCQkJIE1BUF9QUklWQVRFLCBmZCwgMCk7CisKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSwgMSkpCisgICAgeworICAgICAgLyogbW1hcCgpIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworICAgICAgY2xvc2UgKGZkKTsKKyAgICAgIHVzZV9tbWFwID0gMTsKKyAgICB9CisjZW5kaWYKKworICAvKiBJZiB0aGUgZGF0YSBpcyBub3QgeWV0IGF2YWlsYWJsZSAoaS5lLiBtbWFwJ2VkKSB3ZSB0cnkgdG8gbG9hZAorICAgICBpdCBtYW51YWxseS4gICovCisgIGlmIChkYXRhID09IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTEpCisgICAgeworICAgICAgc2l6ZV90IHRvX3JlYWQ7CisgICAgICBjaGFyICpyZWFkX3B0cjsKKworICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzaXplKTsKKyAgICAgIGlmIChkYXRhID09IE5VTEwpCisJcmV0dXJuOworCisgICAgICB0b19yZWFkID0gc2l6ZTsKKyAgICAgIHJlYWRfcHRyID0gKGNoYXIgKikgZGF0YTsKKyAgICAgIGRvCisJeworCSAgbG9uZyBpbnQgbmIgPSAobG9uZyBpbnQpIHJlYWQgKGZkLCByZWFkX3B0ciwgdG9fcmVhZCk7CisJICBpZiAobmIgPD0gMCkKKwkgICAgeworI2lmZGVmIEVJTlRSCisJICAgICAgaWYgKG5iID09IC0xICYmIGVycm5vID09IEVJTlRSKQorCQljb250aW51ZTsKKyNlbmRpZgorCSAgICAgIGNsb3NlIChmZCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICByZWFkX3B0ciArPSBuYjsKKwkgIHRvX3JlYWQgLT0gbmI7CisJfQorICAgICAgd2hpbGUgKHRvX3JlYWQgPiAwKTsKKworICAgICAgY2xvc2UgKGZkKTsKKyAgICB9CisKKyAgLyogVXNpbmcgdGhlIG1hZ2ljIG51bWJlciB3ZSBjYW4gdGVzdCB3aGV0aGVyIGl0IHJlYWxseSBpcyBhIG1lc3NhZ2UKKyAgICAgY2F0YWxvZyBmaWxlLiAgKi8KKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCwKKwkJCTApKQorICAgIHsKKyAgICAgIC8qIFRoZSBtYWdpYyBudW1iZXIgaXMgd3Jvbmc6IG5vdCBhIG1lc3NhZ2UgY2F0YWxvZyBmaWxlLiAgKi8KKyNpZmRlZiBIQVZFX01NQVAKKyAgICAgIGlmICh1c2VfbW1hcCkKKwltdW5tYXAgKCh2b2lkICopIGRhdGEsIHNpemUpOworICAgICAgZWxzZQorI2VuZGlmCisJZnJlZSAoZGF0YSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKyAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgZG9tYWluX2ZpbGUtPmRhdGEgPSBkb21haW47CisKKyAgZG9tYWluLT5kYXRhID0gKGNoYXIgKikgZGF0YTsKKyAgZG9tYWluLT51c2VfbW1hcCA9IHVzZV9tbWFwOworICBkb21haW4tPm1tYXBfc2l6ZSA9IHNpemU7CisgIGRvbWFpbi0+bXVzdF9zd2FwID0gZGF0YS0+bWFnaWMgIT0gX01BR0lDOworICBkb21haW4tPm1hbGxvY2VkID0gTlVMTDsKKworICAvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXZhaWxhYmxlIHRhYmxlcy4gICovCisgIHJldmlzaW9uID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnJldmlzaW9uKTsKKyAgLyogV2Ugc3VwcG9ydCBvbmx5IHRoZSBtYWpvciByZXZpc2lvbnMgMCBhbmQgMS4gICovCisgIHN3aXRjaCAocmV2aXNpb24gPj4gMTYpCisgICAgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICBkb21haW4tPm5zdHJpbmdzID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm5zdHJpbmdzKTsKKyAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CisgICAgICBkb21haW4tPnRyYW5zX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKwkoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT50cmFuc190YWJfb2Zmc2V0KSk7CisgICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKyAgICAgIGRvbWFpbi0+aGFzaF90YWIgPQorCShkb21haW4tPmhhc2hfc2l6ZSA+IDIKKwkgPyAoY29uc3QgbmxzX3VpbnQzMiAqKQorCSAgICgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPmhhc2hfdGFiX29mZnNldCkpCisJIDogTlVMTCk7CisgICAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IGRvbWFpbi0+bXVzdF9zd2FwOworCisgICAgICAvKiBOb3cgZGlzcGF0Y2ggb24gdGhlIG1pbm9yIHJldmlzaW9uLiAgKi8KKyAgICAgIHN3aXRjaCAocmV2aXNpb24gJiAweGZmZmYpCisJeworCWNhc2UgMDoKKwkgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CisJICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IE5VTEw7CisJICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworCSAgYnJlYWs7CisJY2FzZSAxOgorCWRlZmF1bHQ6CisJICB7CisJICAgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKworCSAgICBpZiAoZG9tYWluLT5oYXNoX3RhYiA9PSBOVUxMKQorCSAgICAgIC8qIFRoaXMgaXMgaW52YWxpZC4gIFRoZXNlIG1pbm9yIHJldmlzaW9ucyBuZWVkIGEgaGFzaCB0YWJsZS4gICovCisJICAgICAgZ290byBpbnZhbGlkOworCisJICAgIG5fc3lzZGVwX3N0cmluZ3MgPQorCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zdHJpbmdzKTsKKwkgICAgaWYgKG5fc3lzZGVwX3N0cmluZ3MgPiAwKQorCSAgICAgIHsKKwkJbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKwkJY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICpzeXNkZXBfc2VnbWVudHM7CisJCWNvbnN0IGNoYXIgKipzeXNkZXBfc2VnbWVudF92YWx1ZXM7CisJCWNvbnN0IG5sc191aW50MzIgKm9yaWdfc3lzZGVwX3RhYjsKKwkJY29uc3QgbmxzX3VpbnQzMiAqdHJhbnNfc3lzZGVwX3RhYjsKKwkJbmxzX3VpbnQzMiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOworCQlzaXplX3QgbWVtbmVlZDsKKwkJY2hhciAqbWVtOworCQlzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICppbm1lbV9vcmlnX3N5c2RlcF90YWI7CisJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisJCW5sc191aW50MzIgKmlubWVtX2hhc2hfdGFiOworCQl1bnNpZ25lZCBpbnQgaSwgajsKKworCQkvKiBHZXQgdGhlIHZhbHVlcyBvZiB0aGUgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCisJCW5fc3lzZGVwX3NlZ21lbnRzID0KKwkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc2VnbWVudHMpOworCQlzeXNkZXBfc2VnbWVudHMgPSAoY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICopCisJCSAgKChjaGFyICopIGRhdGEKKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+c3lzZGVwX3NlZ21lbnRzX29mZnNldCkpOworCQlzeXNkZXBfc2VnbWVudF92YWx1ZXMgPQorCQkgIGFsbG9jYSAobl9zeXNkZXBfc2VnbWVudHMgKiBzaXplb2YgKGNvbnN0IGNoYXIgKikpOworCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKwkJICB7CisJCSAgICBjb25zdCBjaGFyICpuYW1lID0KKwkJICAgICAgKGNoYXIgKikgZGF0YQorCQkgICAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ub2Zmc2V0KTsKKwkJICAgIG5sc191aW50MzIgbmFtZWxlbiA9CisJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKworCQkgICAgaWYgKCEobmFtZWxlbiA+IDAgJiYgbmFtZVtuYW1lbGVuIC0gMV0gPT0gJ1wwJykpCisJCSAgICAgIHsKKwkJCWZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgICB9CisKKwkJICAgIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tpXSA9IGdldF9zeXNkZXBfc2VnbWVudF92YWx1ZSAobmFtZSk7CisJCSAgfQorCisJCW9yaWdfc3lzZGVwX3RhYiA9IChjb25zdCBubHNfdWludDMyICopCisJCSAgKChjaGFyICopIGRhdGEKKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ19zeXNkZXBfdGFiX29mZnNldCkpOworCQl0cmFuc19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKwkJICAoKGNoYXIgKikgZGF0YQorCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT50cmFuc19zeXNkZXBfdGFiX29mZnNldCkpOworCisJCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorCQkgICBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgYW5kIHRoZSBhdWdtZW50ZWQgaGFzaCB0YWJsZS4KKwkJICAgQXQgdGhlIHNhbWUgdGltZSwgYWxzbyBkcm9wIHN0cmluZyBwYWlycyB3aGljaCByZWZlciB0bworCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKwkJbl9pbm1lbV9zeXNkZXBfc3RyaW5ncyA9IDA7CisJCW1lbW5lZWQgPSBkb21haW4tPmhhc2hfc2l6ZSAqIHNpemVvZiAobmxzX3VpbnQzMik7CisJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisJCSAgeworCQkgICAgaW50IHZhbGlkID0gMTsKKwkJICAgIHNpemVfdCBuZWVkc1syXTsKKworCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKwkJICAgICAgeworCQkJY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKwkJCSAgKChjaGFyICopIGRhdGEKKwkJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisJCQkJaiA9PSAwCisJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKwkJCQk6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKwkJCXNpemVfdCBuZWVkID0gMDsKKwkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKworCQkJaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpICE9IFNFR01FTlRTX0VORCkKKwkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisJCQkgICAgeworCQkJICAgICAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisKKwkJCSAgICAgIG5lZWQgKz0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworCisJCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKwkJCSAgICAgIGlmIChzeXNkZXByZWYgPT0gU0VHTUVOVFNfRU5EKQorCQkJCWJyZWFrOworCisJCQkgICAgICBpZiAoc3lzZGVwcmVmID49IG5fc3lzZGVwX3NlZ21lbnRzKQorCQkJCXsKKwkJCQkgIC8qIEludmFsaWQuICAqLworCQkJCSAgZnJlZWEgKHN5c2RlcF9zZWdtZW50X3ZhbHVlcyk7CisJCQkJICBnb3RvIGludmFsaWQ7CisJCQkJfQorCisJCQkgICAgICBpZiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0gPT0gTlVMTCkKKwkJCQl7CisJCQkJICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMgaW52YWxpZC4gICovCisJCQkJICB2YWxpZCA9IDA7CisJCQkJICBicmVhazsKKwkJCQl9CisKKwkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisJCQkgICAgfQorCisJCQluZWVkc1tqXSA9IG5lZWQ7CisJCQlpZiAoIXZhbGlkKQorCQkJICBicmVhazsKKwkJICAgICAgfQorCisJCSAgICBpZiAodmFsaWQpCisJCSAgICAgIHsKKwkJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MrKzsKKwkJCW1lbW5lZWQgKz0gbmVlZHNbMF0gKyBuZWVkc1sxXTsKKwkJICAgICAgfQorCQkgIH0KKwkJbWVtbmVlZCArPSAyICogbl9pbm1lbV9zeXNkZXBfc3RyaW5ncworCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworCisJCWlmIChuX2lubWVtX3N5c2RlcF9zdHJpbmdzID4gMCkKKwkJICB7CisJCSAgICB1bnNpZ25lZCBpbnQgazsKKworCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworCQkgICAgbWVtID0gKGNoYXIgKikgbWFsbG9jIChtZW1uZWVkKTsKKwkJICAgIGlmIChtZW0gPT0gTlVMTCkKKwkJICAgICAgZ290byBpbnZhbGlkOworCisJCSAgICBkb21haW4tPm1hbGxvY2VkID0gbWVtOworCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKwkJCSAgICogc2l6ZW9mIChzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjKTsKKwkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisJCSAgICBtZW0gKz0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncworCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CisJCSAgICBtZW0gKz0gZG9tYWluLT5oYXNoX3NpemUgKiBzaXplb2YgKG5sc191aW50MzIpOworCisJCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworCQkgICAgayA9IDA7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc3RyaW5nczsgaSsrKQorCQkgICAgICB7CisJCQlpbnQgdmFsaWQgPSAxOworCisJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorCQkJICB7CisJCQkgICAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisJCQkgICAgICAoKGNoYXIgKikgZGF0YQorCQkJICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisJCQkJICAgIGogPT0gMAorCQkJCSAgICA/IG9yaWdfc3lzZGVwX3RhYltpXQorCQkJCSAgICA6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKwkJCSAgICAgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworCisJCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisJCQkJIT0gU0VHTUVOVFNfRU5EKQorCQkJICAgICAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisJCQkJeworCQkJCSAgbmxzX3VpbnQzMiBzeXNkZXByZWY7CisKKwkJCQkgIHN5c2RlcHJlZiA9CisJCQkJICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworCQkJCSAgaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisJCQkJICAgIGJyZWFrOworCisJCQkJICBpZiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0gPT0gTlVMTCkKKwkJCQkgICAgeworCQkJCSAgICAgIC8qIFRoaXMgcGFydGljdWxhciBzdHJpbmcgcGFpciBpcworCQkJCQkgaW52YWxpZC4gICovCisJCQkJICAgICAgdmFsaWQgPSAwOworCQkJCSAgICAgIGJyZWFrOworCQkJCSAgICB9CisJCQkJfQorCisJCQkgICAgaWYgKCF2YWxpZCkKKwkJCSAgICAgIGJyZWFrOworCQkJICB9CisKKwkJCWlmICh2YWxpZCkKKwkJCSAgeworCQkJICAgIGZvciAoaiA9IDA7IGogPCAyOyBqKyspCisJCQkgICAgICB7CisJCQkJY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKnN5c2RlcF9zdHJpbmcgPQorCQkJCSAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisJCQkJICAoKGNoYXIgKikgZGF0YQorCQkJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisJCQkJCWogPT0gMAorCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorCQkJCQk6IHRyYW5zX3N5c2RlcF90YWJbaV0pKTsKKwkJCQljb25zdCBjaGFyICpzdGF0aWNfc2VnbWVudHMgPQorCQkJCSAgKGNoYXIgKikgZGF0YQorCQkJCSAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3N0cmluZy0+b2Zmc2V0KTsKKwkJCQljb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKwkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworCisJCQkJLyogQ29uY2F0ZW5hdGUgdGhlIHNlZ21lbnRzLCBhbmQgZmlsbAorCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCisJCQkJICAgaW5tZW1fdHJhbnNfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMSkuICAqLworCisJCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKwkJCQkgIChqID09IDAKKwkJCQkgICA/IGlubWVtX29yaWdfc3lzZGVwX3RhYgorCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKwkJCQkgICsgazsKKworCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorCQkJCSAgICA9PSBTRUdNRU5UU19FTkQpCisJCQkJICB7CisJCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5sZW5ndGggPQorCQkJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworCQkJCSAgfQorCQkJCWVsc2UKKwkJCQkgIHsKKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gbWVtOworCisJCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorCQkJCSAgICAgIHsKKwkJCQkJbmxzX3VpbnQzMiBzZWdzaXplID0KKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisJCQkJCW5sc191aW50MzIgc3lzZGVwcmVmID0KKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKwkJCQkJc2l6ZV90IG47CisKKwkJCQkJaWYgKHNlZ3NpemUgPiAwKQorCQkJCQkgIHsKKwkJCQkJICAgIG1lbWNweSAobWVtLCBzdGF0aWNfc2VnbWVudHMsIHNlZ3NpemUpOworCQkJCQkgICAgbWVtICs9IHNlZ3NpemU7CisJCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKwkJCQkJICB9CisKKwkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisJCQkJCSAgYnJlYWs7CisKKwkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworCQkJCQltZW1jcHkgKG1lbSwgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0sIG4pOworCQkJCQltZW0gKz0gbjsKKwkJCQkgICAgICB9CisKKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5sZW5ndGggPQorCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKwkJCQkgIH0KKwkJCSAgICAgIH0KKworCQkJICAgIGsrKzsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgICBpZiAoayAhPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzKQorCQkgICAgICBhYm9ydCAoKTsKKworCQkgICAgLyogQ29tcHV0ZSB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuICAqLworCQkgICAgZm9yIChpID0gMDsgaSA8IGRvbWFpbi0+aGFzaF9zaXplOyBpKyspCisJCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKwkJCVcgKGRvbWFpbi0+bXVzdF9zd2FwX2hhc2hfdGFiLCBkb21haW4tPmhhc2hfdGFiW2ldKTsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOyBpKyspCisJCSAgICAgIHsKKwkJCWNvbnN0IGNoYXIgKm1zZ2lkID0gaW5tZW1fb3JpZ19zeXNkZXBfdGFiW2ldLnBvaW50ZXI7CisJCQlubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKwkJCW5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKwkJCW5sc191aW50MzIgaW5jciA9CisJCQkgIDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CisKKwkJCWZvciAoOzspCisJCQkgIHsKKwkJCSAgICBpZiAoaW5tZW1faGFzaF90YWJbaWR4XSA9PSAwKQorCQkJICAgICAgeworCQkJCS8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICBVc2UgaXQuICAqLworCQkJCWlubWVtX2hhc2hfdGFiW2lkeF0gPSAxICsgZG9tYWluLT5uc3RyaW5ncyArIGk7CisJCQkJYnJlYWs7CisJCQkgICAgICB9CisKKwkJCSAgICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKwkJCSAgICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7CisJCQkgICAgZWxzZQorCQkJICAgICAgaWR4ICs9IGluY3I7CisJCQkgIH0KKwkJICAgICAgfQorCisJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzOworCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWI7CisJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBpbm1lbV90cmFuc19zeXNkZXBfdGFiOworCisJCSAgICBkb21haW4tPmhhc2hfdGFiID0gaW5tZW1faGFzaF90YWI7CisJCSAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IDA7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gMDsKKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKwkJICAgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CisJCSAgfQorCisJCWZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gMDsKKwkJZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworCQlkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiBUaGlzIGlzIGFuIGludmFsaWQgcmV2aXNpb24uICAqLworICAgIGludmFsaWQ6CisgICAgICAvKiBUaGlzIGlzIGFuIGludmFsaWQgLm1vIGZpbGUuICAqLworICAgICAgZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisjaWZkZWYgSEFWRV9NTUFQCisgICAgICBpZiAodXNlX21tYXApCisJbXVubWFwICgodm9pZCAqKSBkYXRhLCBzaXplKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorCWZyZWUgKGRhdGEpOworICAgICAgZnJlZSAoZG9tYWluKTsKKyAgICAgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogTm93IGluaXRpYWxpemUgdGhlIGNoYXJhY3RlciBzZXQgY29udmVydGVyIGZyb20gdGhlIGNoYXJhY3RlciBzZXQKKyAgICAgdGhlIGZpbGUgaXMgZW5jb2RlZCB3aXRoIChmb3VuZCBpbiB0aGUgaGVhZGVyIGVudHJ5KSB0byB0aGUgZG9tYWluJ3MKKyAgICAgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgb3IgdGhlIGxvY2FsZSdzIGNoYXJhY3RlciBzZXQuICAqLworICBudWxsZW50cnkgPSBfbmxfaW5pdF9kb21haW5fY29udiAoZG9tYWluX2ZpbGUsIGRvbWFpbiwgZG9tYWluYmluZGluZyk7CisKKyAgLyogQWxzbyBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKyAgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiAobnVsbGVudHJ5LCAmZG9tYWluLT5wbHVyYWwsICZkb21haW4tPm5wbHVyYWxzKTsKK30KKworCisjaWZkZWYgX0xJQkMKK3ZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbikKK3sKKyAgaWYgKGRvbWFpbi0+cGx1cmFsICE9ICZfX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsKQorICAgIF9fZ2V0dGV4dF9mcmVlX2V4cCAoZG9tYWluLT5wbHVyYWwpOworCisgIF9ubF9mcmVlX2RvbWFpbl9jb252IChkb21haW4pOworCisgIGZyZWUgKGRvbWFpbi0+bWFsbG9jZWQpOworCisjIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKyAgaWYgKGRvbWFpbi0+dXNlX21tYXApCisgICAgbXVubWFwICgodm9pZCAqKSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKyAgZWxzZQorIyBlbmRpZgkvKiBfUE9TSVhfTUFQUEVEX0ZJTEVTICovCisgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKworICBmcmVlIChkb21haW4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9sb2NhbGNoYXJzZXQuYyBiL2UyZnNwcm9ncy9pbnRsL2xvY2FsY2hhcnNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTNhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9sb2NhbGNoYXJzZXQuYwpAQCAtMCwwICsxLDM5NyBAQAorLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorCisjaWYgSEFWRV9TVERERUZfSAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NUUklOR19ICisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKyMgZGVmaW5lIFdJTjMyCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19FTVhfXworLyogQXNzdW1lIEVNWCBwcm9ncmFtIHJ1bnMgb24gT1MvMiwgZXZlbiBpZiBjb21waWxlZCB1bmRlciBET1MuICAqLworIyBkZWZpbmUgT1MyCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFdJTjMyCisjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorIyAgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyMgZWxzZQorIyAgaWYgSEFWRV9TRVRMT0NBTEUKKyMgICBpbmNsdWRlIDxsb2NhbGUuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIFdJTjMyCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQgT1MyCisjIGRlZmluZSBJTkNMX0RPUworIyBpbmNsdWRlIDxvczIuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisjZWxzZQorIyBkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisjZW5kaWYKKworI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisjIGRlZmluZSBESVJFQ1RPUllfU0VQQVJBVE9SICcvJworI2VuZGlmCisKKyNpZm5kZWYgSVNTTEFTSAorIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCisjZW5kaWYKKworI2lmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECisjIHVuZGVmIGdldGMKKyMgZGVmaW5lIGdldGMgZ2V0Y191bmxvY2tlZAorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RhdGljIHZhcmlhYmxlIGlzIGRlY2xhcmVkICd2b2xhdGlsZScgdG8gYXZvaWQgYQorICAgcG9zc2libGUgbXVsdGl0aHJlYWQgcHJvYmxlbSBpbiB0aGUgZnVuY3Rpb24gZ2V0X2NoYXJzZXRfYWxpYXNlcy4gSWYgd2UKKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisgICAnY2hhcnNldF9hbGlhc2VzJyBzaW11bHRhbmVvdXNseSwgYm90aCB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgdmFsdWUsCisgICBhbmQgZXZlcnl0aGluZyB3aWxsIGJlIG9rIGlmIHRoZSB0d28gYXNzaWdubWVudHMgdG8gJ2NoYXJzZXRfYWxpYXNlcycKKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisjaWYgX19TVERDX18gIT0gMQorIyBkZWZpbmUgdm9sYXRpbGUgLyogZW1wdHkgKi8KKyNlbmRpZgorLyogUG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgdGhlIGNoYXJzZXQuYWxpYXMgZmlsZSwgaWYgaXQgaGFzIGFscmVhZHkgYmVlbgorICAgcmVhZCwgZWxzZSBOVUxMLiAgSXRzIGZvcm1hdCBpczoKKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworc3RhdGljIGNvbnN0IGNoYXIgKiB2b2xhdGlsZSBjaGFyc2V0X2FsaWFzZXM7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKQoreworICBjb25zdCBjaGFyICpjcDsKKworICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKyAgaWYgKGNwID09IE5VTEwpCisgICAgeworI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKyAgICAgIEZJTEUgKmZwOworICAgICAgY29uc3QgY2hhciAqZGlyID0gcmVsb2NhdGUgKExJQkRJUik7CisgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworICAgICAgY2hhciAqZmlsZV9uYW1lOworCisgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworICAgICAgeworCXNpemVfdCBkaXJfbGVuID0gc3RybGVuIChkaXIpOworCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisJaW50IGFkZF9zbGFzaCA9IChkaXJfbGVuID4gMCAmJiAhSVNTTEFTSCAoZGlyW2Rpcl9sZW4gLSAxXSkpOworCWZpbGVfbmFtZSA9IChjaGFyICopIG1hbGxvYyAoZGlyX2xlbiArIGFkZF9zbGFzaCArIGJhc2VfbGVuICsgMSk7CisJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorCSAgeworCSAgICBtZW1jcHkgKGZpbGVfbmFtZSwgZGlyLCBkaXJfbGVuKTsKKwkgICAgaWYgKGFkZF9zbGFzaCkKKwkgICAgICBmaWxlX25hbWVbZGlyX2xlbl0gPSBESVJFQ1RPUllfU0VQQVJBVE9SOworCSAgICBtZW1jcHkgKGZpbGVfbmFtZSArIGRpcl9sZW4gKyBhZGRfc2xhc2gsIGJhc2UsIGJhc2VfbGVuICsgMSk7CisJICB9CisgICAgICB9CisKKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorCS8qIE91dCBvZiBtZW1vcnkgb3IgZmlsZSBub3QgZm91bmQsIHRyZWF0IGl0IGFzIGVtcHR5LiAgKi8KKwljcCA9ICIiOworICAgICAgZWxzZQorCXsKKwkgIC8qIFBhcnNlIHRoZSBmaWxlJ3MgY29udGVudHMuICAqLworCSAgaW50IGM7CisJICBjaGFyIGJ1ZjFbNTArMV07CisJICBjaGFyIGJ1ZjJbNTArMV07CisJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKwkgIHNpemVfdCByZXNfc2l6ZSA9IDA7CisJICBzaXplX3QgbDEsIGwyOworCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgYyA9IGdldGMgKGZwKTsKKwkgICAgICBpZiAoYyA9PSBFT0YpCisJCWJyZWFrOworCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljb250aW51ZTsKKwkgICAgICBpZiAoYyA9PSAnIycpCisJCXsKKwkJICAvKiBTa2lwIGNvbW1lbnQsIHRvIGVuZCBvZiBsaW5lLiAgKi8KKwkJICBkbworCQkgICAgYyA9IGdldGMgKGZwKTsKKwkJICB3aGlsZSAoIShjID09IEVPRiB8fCBjID09ICdcbicpKTsKKwkJICBpZiAoYyA9PSBFT0YpCisJCSAgICBicmVhazsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICAgIHVuZ2V0YyAoYywgZnApOworCSAgICAgIGlmIChmc2NhbmYgKGZwLCAiJTUwcyAlNTBzIiwgYnVmMSwgYnVmMikgPCAyKQorCQlicmVhazsKKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisJICAgICAgbDIgPSBzdHJsZW4gKGJ1ZjIpOworCSAgICAgIGlmIChyZXNfc2l6ZSA9PSAwKQorCQl7CisJCSAgcmVzX3NpemUgPSBsMSArIDEgKyBsMiArIDE7CisJCSAgcmVzX3B0ciA9IChjaGFyICopIG1hbGxvYyAocmVzX3NpemUgKyAxKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKwkJICByZXNfcHRyID0gKGNoYXIgKikgcmVhbGxvYyAocmVzX3B0ciwgcmVzX3NpemUgKyAxKTsKKwkJfQorCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisJCXsKKwkJICAvKiBPdXQgb2YgbWVtb3J5LiAqLworCQkgIHJlc19zaXplID0gMDsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisJICAgICAgc3RyY3B5IChyZXNfcHRyICsgcmVzX3NpemUgLSAobDIgKyAxKSwgYnVmMik7CisJICAgIH0KKwkgIGZjbG9zZSAoZnApOworCSAgaWYgKHJlc19zaXplID09IDApCisJICAgIGNwID0gIiI7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqKHJlc19wdHIgKyByZXNfc2l6ZSkgPSAnXDAnOworCSAgICAgIGNwID0gcmVzX3B0cjsKKwkgICAgfQorCX0KKworICAgICAgZnJlZSAoZmlsZV9uYW1lKTsKKworI2Vsc2UKKworIyBpZiBkZWZpbmVkIFZNUworICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCisJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisgICAgICAvKiBUaGUgbGlzdCBvZiBlbmNvZGluZ3MgaXMgdGFrZW4gZnJvbSB0aGUgT3BlblZNUyA3LjMtMSBkb2N1bWVudGF0aW9uCisJICJDb21wYXEgQyBSdW4tVGltZSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwgZm9yIE9wZW5WTVMgc3lzdGVtcyIKKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKyAgICAgIGNwID0gIklTTzg4NTktMSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorCSAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisJICAgIklTTzg4NTktNyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorCSAgICJJU084ODU5LTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgLyogSmFwYW5lc2UgKi8KKwkgICAiZXVjSlAiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKwkgICAiREVDS0FOSkkiICJcMCIgIkRFQy1LQU5KSSIgIlwwIgorCSAgICJTREVDS0FOSkkiICJcMCIgIkVVQy1KUCIgIlwwIgorCSAgIC8qIENoaW5lc2UgKi8KKwkgICAiZXVjVFciICJcMCIgIkVVQy1UVyIgIlwwIgorCSAgICJERUNIQU5ZVSIgIlwwIiAiREVDLUhBTllVIiAiXDAiCisJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKwkgICAvKiBLb3JlYW4gKi8KKwkgICAiREVDS09SRUFOIiAiXDAiICJFVUMtS1IiICJcMCI7CisjIGVuZGlmCisKKyMgaWYgZGVmaW5lZCBXSU4zMgorICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisJIGRpcmVjdG9yeSBhcyB0aGUgRExMIGFuZCBvZiByZXRyaWV2aW5nIHRoZSBETEwncyBkaXJlY3RvcnkgYXQKKwkgcnVudGltZSwgc2ltcGx5IGlubGluZSB0aGUgYWxpYXNlcyBoZXJlLiAgKi8KKworICAgICAgY3AgPSAiQ1A5MzYiICJcMCIgIkdCSyIgIlwwIgorCSAgICJDUDEzNjEiICJcMCIgIkpPSEFCIiAiXDAiCisJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisJICAgIkNQMjA4NjYiICJcMCIgIktPSTgtUiIgIlwwIgorCSAgICJDUDIxODY2IiAiXDAiICJLT0k4LVJVIiAiXDAiCisJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKwkgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorCSAgICJDUDI4NTkzIiAiXDAiICJJU08tODg1OS0zIiAiXDAiCisJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKwkgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorCSAgICJDUDI4NTk2IiAiXDAiICJJU08tODg1OS02IiAiXDAiCisJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKwkgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorCSAgICJDUDI4NTk5IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworIyBlbmRpZgorI2VuZGlmCisKKyAgICAgIGNoYXJzZXRfYWxpYXNlcyA9IGNwOworICAgIH0KKworICByZXR1cm4gY3A7Cit9CisKKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisgICBuYW1lLiAgKi8KKworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZW5kaWYKK2NvbnN0IGNoYXIgKgorbG9jYWxlX2NoYXJzZXQgKCkKK3sKKyAgY29uc3QgY2hhciAqY29kZXNldDsKKyAgY29uc3QgY2hhciAqYWxpYXNlczsKKworI2lmICEoZGVmaW5lZCBXSU4zMiB8fCBkZWZpbmVkIE9TMikKKworIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKworICAvKiBNb3N0IHN5c3RlbXMgc3VwcG9ydCBubF9sYW5naW5mbyAoQ09ERVNFVCkgbm93YWRheXMuICAqLworICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworCisjIGVsc2UKKworICAvKiBPbiBvbGQgc3lzdGVtcyB3aGljaCBsYWNrIGl0LCB1c2Ugc2V0bG9jYWxlIG9yIGdldGVudi4gICovCisgIGNvbnN0IGNoYXIgKmxvY2FsZSA9IE5VTEw7CisKKyAgLyogQnV0IG1vc3Qgb2xkIHN5c3RlbXMgZG9uJ3QgaGF2ZSBhIGNvbXBsZXRlIHNldCBvZiBsb2NhbGVzLiAgU29tZQorICAgICAobGlrZSBTdW5PUyA0IG9yIERKR1BQKSBoYXZlIG9ubHkgdGhlIEMgbG9jYWxlLiAgVGhlcmVmb3JlIHdlIGRvbid0CisgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKyAgICAgbG9jYWxlIG5hbWUgdGhlIHVzZXIgaGFzIHNldC4gICovCisjICBpZiBIQVZFX1NFVExPQ0FMRSAmJiAwCisgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworIyAgZW5kaWYKKyAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorICAgIHsKKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorCXsKKwkgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisJICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKwl9CisgICAgfQorCisgIC8qIE9uIHNvbWUgb2xkIHN5c3RlbXMsIG9uZSB1c2VkIHRvIHNldCBsb2NhbGUgPSAiaXNvODg1OV8xIi4gT24gb3RoZXJzLAorICAgICB5b3Ugc2V0IGl0IHRvICJsYW5ndWFnZV9DT1VOVFJZLmNoYXJzZXQiLiBJbiBhbnkgY2FzZSwgd2UgcmVzb2x2ZSBpdAorICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworICBjb2Rlc2V0ID0gbG9jYWxlOworCisjIGVuZGlmCisKKyNlbGlmIGRlZmluZWQgV0lOMzIKKworICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CisKKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBHZXRBQ1AgKCkpOworICBjb2Rlc2V0ID0gYnVmOworCisjZWxpZiBkZWZpbmVkIE9TMgorCisgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworICBVTE9ORyBjcFszXTsKKyAgVUxPTkcgY3BsZW47CisKKyAgLyogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgY29kZXNldCwgYXMgc2V0IGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAorICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisgIGxvY2FsZSA9IGdldGVudiAoIkxDX0FMTCIpOworICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisgICAgeworICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKyAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisgICAgfQorICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCisgICAgeworICAgICAgLyogSWYgdGhlIGxvY2FsZSBuYW1lIGNvbnRhaW5zIGFuIGVuY29kaW5nIGFmdGVyIHRoZSBkb3QsIHJldHVybiBpdC4gICovCisgICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKworICAgICAgaWYgKGRvdCAhPSBOVUxMKQorCXsKKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworCisJICBkb3QrKzsKKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKwkgIG1vZGlmaWVyID0gc3RyY2hyIChkb3QsICdAJyk7CisJICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIGRvdDsKKwkgIGlmIChtb2RpZmllciAtIGRvdCA8IHNpemVvZiAoYnVmKSkKKwkgICAgeworCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKwkgICAgICBidWYgW21vZGlmaWVyIC0gZG90XSA9ICdcMCc7CisJICAgICAgcmV0dXJuIGJ1ZjsKKwkgICAgfQorCX0KKworICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworICAgICAgY29kZXNldCA9IGxvY2FsZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBPUy8yIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKwljb2Rlc2V0ID0gIiI7CisgICAgICBlbHNlCisJeworCSAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIGNwWzBdKTsKKwkgIGNvZGVzZXQgPSBidWY7CisJfQorICAgIH0KKworI2VuZGlmCisKKyAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworICAgIGNvZGVzZXQgPSAiIjsKKworICAvKiBSZXNvbHZlIGFsaWFzLiAqLworICBmb3IgKGFsaWFzZXMgPSBnZXRfY2hhcnNldF9hbGlhc2VzICgpOworICAgICAgICphbGlhc2VzICE9ICdcMCc7CisgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKyAgICBpZiAoc3RyY21wIChjb2Rlc2V0LCBhbGlhc2VzKSA9PSAwCisJfHwgKGFsaWFzZXNbMF0gPT0gJyonICYmIGFsaWFzZXNbMV0gPT0gJ1wwJykpCisgICAgICB7CisJY29kZXNldCA9IGFsaWFzZXMgKyBzdHJsZW4gKGFsaWFzZXMpICsgMTsKKwlicmVhazsKKyAgICAgIH0KKworICAvKiBEb24ndCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAgR05VIGxpYmMgYW5kIEdOVSBsaWJpY29udiBpbnRlcnByZXQKKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisgICAgIHRodXMgR05VIGxpYmljb252IHdvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhIHNlY29uZCB0aW1lLiAgKi8KKyAgaWYgKGNvZGVzZXRbMF0gPT0gJ1wwJykKKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKworICByZXR1cm4gY29kZXNldDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2xvY2FsY2hhcnNldC5oIGIvZTJmc3Byb2dzL2ludGwvbG9jYWxjaGFyc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMzdlNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL2xvY2FsY2hhcnNldC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTE9DQUxDSEFSU0VUX0gKKyNkZWZpbmUgX0xPQ0FMQ0hBUlNFVF9ICisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKyAgIGludG8gb25lIG9mIHRoZSBjYW5vbmljYWwgbmFtZXMgbGlzdGVkIGluIGNvbmZpZy5jaGFyc2V0LgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisgICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCisgICBuYW1lLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9MT0NBTENIQVJTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvbG9jYWxlLmFsaWFzIGIvZTJmc3Byb2dzL2ludGwvbG9jYWxlLmFsaWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmJiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9sb2NhbGUuYWxpYXMKQEAgLTAsMCArMSw3OCBAQAorIyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyBVU0EuCisKKyMgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb2YKKyMgdGhlIFggV2luZG93IFN5c3RlbSwgd2hpY2ggbm9ybWFsbHkgY2FuIGJlIGZvdW5kIGluCisjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisjIEEgc2luZ2xlIGxpbmUgY29udGFpbnMgdHdvIGZpZWxkczogYW4gYWxpYXMgYW5kIGEgc3Vic3RpdHV0aW9uIHZhbHVlLgorIyBBbGwgZW50cmllcyBhcmUgY2FzZSBpbmRlcGVuZGVudC4KKworIyBOb3RlOiBUaGlzIGZpbGUgaXMgZmFyIGZyb20gYmVpbmcgY29tcGxldGUuICBJZiB5b3UgaGF2ZSBhIHZhbHVlIGZvcgorIyB5b3VyIG93biBzaXRlIHdoaWNoIHlvdSB0aGluayBtaWdodCBiZSB1c2VmdWwgZm9yIG90aGVycyB0b28sIHNoYXJlCisjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworIyBidWdzQGdudS5vcmcuCisKKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKworYm9rbWFsCQluYl9OTy5JU08tODg1OS0xCitib2tt5WwJCW5iX05PLklTTy04ODU5LTEKK2NhdGFsYW4JCWNhX0VTLklTTy04ODU5LTEKK2Nyb2F0aWFuCWhyX0hSLklTTy04ODU5LTIKK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCitkYW5pc2ggICAgICAgICAgZGFfREsuSVNPLTg4NTktMQorZGFuc2sJCWRhX0RLLklTTy04ODU5LTEKK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKK2R1dGNoCQlubF9OTC5JU08tODg1OS0xCitlZXN0aQkJZXRfRUUuSVNPLTg4NTktMQorZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorZmlubmlzaCAgICAgICAgIGZpX0ZJLklTTy04ODU5LTEKK2ZyYW7nYWlzCWZyX0ZSLklTTy04ODU5LTEKK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorZ2FsZWdvCQlnbF9FUy5JU08tODg1OS0xCitnYWxpY2lhbglnbF9FUy5JU08tODg1OS0xCitnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKK2dyZWVrICAgICAgICAgICBlbF9HUi5JU08tODg1OS03CitoZWJyZXcgICAgICAgICAgaGVfSUwuSVNPLTg4NTktOAoraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgoraHVuZ2FyaWFuICAgICAgIGh1X0hVLklTTy04ODU5LTIKK2ljZWxhbmRpYyAgICAgICBpc19JUy5JU08tODg1OS0xCitpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQoramFwYW5lc2UJamFfSlAuZXVjSlAKK2phcGFuZXNlLmV1YwlqYV9KUC5ldWNKUAoramFfSlAJCWphX0pQLmV1Y0pQCitqYV9KUC51amlzCWphX0pQLmV1Y0pQCitqYXBhbmVzZS5zamlzCWphX0pQLlNKSVMKK2tvcmVhbgkJa29fS1IuZXVjS1IKK2tvcmVhbi5ldWMgCWtvX0tSLmV1Y0tSCitrb19LUgkJa29fS1IuZXVjS1IKK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworbm9fTk8JCW5iX05PLklTTy04ODU5LTEKK25vX05PLklTTy04ODU5LTEgbmJfTk8uSVNPLTg4NTktMQorbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKK255bm9yc2sJCW5uX05PLklTTy04ODU5LTEKK3BvbGlzaCAgICAgICAgICBwbF9QTC5JU08tODg1OS0yCitwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorcm9tYW5pYW4gICAgICAgIHJvX1JPLklTTy04ODU5LTIKK3J1c3NpYW4gICAgICAgICBydV9SVS5JU08tODg1OS01CitzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorc2xvdmVuZSAgICAgICAgIHNsX1NJLklTTy04ODU5LTIKK3Nsb3ZlbmlhbiAgICAgICBzbF9TSS5JU08tODg1OS0yCitzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorc3dlZGlzaCAgICAgICAgIHN2X1NFLklTTy04ODU5LTEKK3RoYWkJCXRoX1RILlRJUy02MjAKK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9sb2NhbGVhbGlhcy5jIGIvZTJmc3Byb2dzL2ludGwvbG9jYWxlYWxpYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFmODgxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvbG9jYWxlYWxpYXMuYwpAQCAtMCwwICsxLDQxNCBAQAorLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX19fRlNFVExPQ0tJTkcKKyMgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIF9fR05VQ19fCisjIHVuZGVmIGFsbG9jYQorIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyNlbHNlCisjIGlmZGVmIF9NU0NfVkVSCisjICBpbmNsdWRlIDxtYWxsb2MuaD4KKyMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorIyBlbHNlCisjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyAgZWxzZQorIyAgIGlmZGVmIF9BSVgKKyAjcHJhZ21hIGFsbG9jYQorIyAgIGVsc2UKKyMgICAgaWZuZGVmIGFsbG9jYQorY2hhciAqYWxsb2NhICgpOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImdldHRleHRQLmgiCisKKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKyNlbHNlCisjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworI2lmZGVmIF9MSUJDCisvKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKyAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKyMgZGVmaW5lIHN0cmNhc2VjbXAgX19zdHJjYXNlY21wCisKKyMgaWZuZGVmIG1lbXBjcHkKKyMgIGRlZmluZSBtZW1wY3B5IF9fbWVtcGNweQorIyBlbmRpZgorIyBkZWZpbmUgSEFWRV9NRU1QQ1BZCTEKKyMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCisKKy8qIFdlIG5lZWQgbG9ja2luZyBoZXJlIHNpbmNlIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSBkaWZmZXJlbnQgcGxhY2VzLiAgKi8KKyMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKworX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworI2VuZGlmCisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworLyogU29tZSBvcHRpbWl6YXRpb25zIGZvciBnbGliYy4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mX3VubG9ja2VkIChmcCkKKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzX3VubG9ja2VkIChidWYsIG4sIGZwKQorI2Vsc2UKKyMgZGVmaW5lIEZFT0YoZnApCQlmZW9mIChmcCkKKyMgZGVmaW5lIEZHRVRTKGJ1ZiwgbiwgZnApCWZnZXRzIChidWYsIG4sIGZwKQorI2VuZGlmCisKKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworI2lmZGVmIEhBVkVfQUxMT0NBCisjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisjZWxzZQorIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisjZW5kaWYKKworI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorIyB1bmRlZiBmZ2V0cworIyBkZWZpbmUgZmdldHMoYnVmLCBsZW4sIHMpIGZnZXRzX3VubG9ja2VkIChidWYsIGxlbiwgcykKKyNlbmRpZgorI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisjIHVuZGVmIGZlb2YKKyMgZGVmaW5lIGZlb2YocykgZmVvZl91bmxvY2tlZCAocykKKyNlbmRpZgorCisKK3N0cnVjdCBhbGlhc19tYXAKK3sKKyAgY29uc3QgY2hhciAqYWxpYXM7CisgIGNvbnN0IGNoYXIgKnZhbHVlOworfTsKKworCisjaWZuZGVmIF9MSUJDCisjIGRlZmluZSBsaWJjX2ZyZWVyZXNfcHRyKGRlY2wpIGRlY2wKKyNlbmRpZgorCitsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgY2hhciAqc3RyaW5nX3NwYWNlKTsKK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX2FjdDsKK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKK2xpYmNfZnJlZXJlc19wdHIgKHN0YXRpYyBzdHJ1Y3QgYWxpYXNfbWFwICptYXApOworc3RhdGljIHNpemVfdCBubWFwOworc3RhdGljIHNpemVfdCBtYXhtYXA7CisKKworLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGV4dGVuZF9hbGlhc190YWJsZSAodm9pZCk7CitzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisJCQkgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpOworCisKK2NvbnN0IGNoYXIgKgorX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoOworICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisgIGNvbnN0IGNoYXIgKnJlc3VsdCA9IE5VTEw7CisgIHNpemVfdCBhZGRlZDsKKworI2lmZGVmIF9MSUJDCisgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworI2VuZGlmCisKKyAgaWYgKGxvY2FsZV9hbGlhc19wYXRoID09IE5VTEwpCisgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKworICBkbworICAgIHsKKyAgICAgIHN0cnVjdCBhbGlhc19tYXAgaXRlbTsKKworICAgICAgaXRlbS5hbGlhcyA9IG5hbWU7CisKKyAgICAgIGlmIChubWFwID4gMCkKKwlyZXR2YWwgPSAoc3RydWN0IGFsaWFzX21hcCAqKSBic2VhcmNoICgmaXRlbSwgbWFwLCBubWFwLAorCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKwkJCQkJICAgICAgIChpbnQgKCopIChjb25zdCB2b2lkICosCisJCQkJCQkJIGNvbnN0IHZvaWQgKikKKwkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICBlbHNlCisJcmV0dmFsID0gTlVMTDsKKworICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGFuIGFsaWFzLiAgUmV0dXJuIHRoZSB2YWx1ZS4gICovCisgICAgICBpZiAocmV0dmFsICE9IE5VTEwpCisJeworCSAgcmVzdWx0ID0gcmV0dmFsLT52YWx1ZTsKKwkgIGJyZWFrOworCX0KKworICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgYWRkZWQgPSAwOworICAgICAgd2hpbGUgKGFkZGVkID09IDAgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJykKKwl7CisJICBjb25zdCBjaGFyICpzdGFydDsKKworCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09IFBBVEhfU0VQQVJBVE9SKQorCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworCSAgc3RhcnQgPSBsb2NhbGVfYWxpYXNfcGF0aDsKKworCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcKKwkJICYmIGxvY2FsZV9hbGlhc19wYXRoWzBdICE9IFBBVEhfU0VQQVJBVE9SKQorCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworCisJICBpZiAoc3RhcnQgPCBsb2NhbGVfYWxpYXNfcGF0aCkKKwkgICAgYWRkZWQgPSByZWFkX2FsaWFzX2ZpbGUgKHN0YXJ0LCBsb2NhbGVfYWxpYXNfcGF0aCAtIHN0YXJ0KTsKKwl9CisgICAgfQorICB3aGlsZSAoYWRkZWQgIT0gMCk7CisKKyNpZmRlZiBfTElCQworICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgc2l6ZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKK3sKKyAgRklMRSAqZnA7CisgIGNoYXIgKmZ1bGxfZm5hbWU7CisgIHNpemVfdCBhZGRlZDsKKyAgc3RhdGljIGNvbnN0IGNoYXIgYWxpYXNmaWxlW10gPSAiL2xvY2FsZS5hbGlhcyI7CisKKyAgZnVsbF9mbmFtZSA9IChjaGFyICopIGFsbG9jYSAoZm5hbWVfbGVuICsgc2l6ZW9mIGFsaWFzZmlsZSk7CisjaWZkZWYgSEFWRV9NRU1QQ1BZCisgIG1lbXBjcHkgKG1lbXBjcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pLAorCSAgIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisjZWxzZQorICBtZW1jcHkgKGZ1bGxfZm5hbWUsIGZuYW1lLCBmbmFtZV9sZW4pOworICBtZW1jcHkgKCZmdWxsX2ZuYW1lW2ZuYW1lX2xlbl0sIGFsaWFzZmlsZSwgc2l6ZW9mIGFsaWFzZmlsZSk7CisjZW5kaWYKKworICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisgIGZyZWVhIChmdWxsX2ZuYW1lKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyNpZmRlZiBIQVZFX19fRlNFVExPQ0tJTkcKKyAgLyogTm8gdGhyZWFkcyBwcmVzZW50LiAgKi8KKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKyNlbmRpZgorCisgIGFkZGVkID0gMDsKKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgeworICAgICAgLyogSXQgaXMgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIHVzZSBhIGZpeCBidWZmZXIgaGVyZSBiZWNhdXNlCisJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKwkgYikgdGhlc2UgZmllbGRzIG11c3QgYmUgdXNhYmxlIGFzIGZpbGUgbmFtZXMgYW5kIHNvIG11c3Qgbm90CisJICAgIGJlIHRoYXQgbG9uZworCSBXZSBhdm9pZCBhIG11bHRpLWtpbG9ieXRlIGJ1ZmZlciBoZXJlIHNpbmNlIHRoaXMgd291bGQgdXNlIHVwCisJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKwkgbWVtb3J5LiAgKi8KKyAgICAgIGNoYXIgYnVmWzQwMF07CisgICAgICBjaGFyICphbGlhczsKKyAgICAgIGNoYXIgKnZhbHVlOworICAgICAgY2hhciAqY3A7CisKKyAgICAgIGlmIChGR0VUUyAoYnVmLCBzaXplb2YgYnVmLCBmcCkgPT0gTlVMTCkKKwkvKiBFT0YgcmVhY2hlZC4gICovCisJYnJlYWs7CisKKyAgICAgIGNwID0gYnVmOworICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisJKytjcDsKKworICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgIGlmIChjcFswXSAhPSAnXDAnICYmIGNwWzBdICE9ICcjJykKKwl7CisJICBhbGlhcyA9IGNwKys7CisJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKwkgICAgKytjcDsKKwkgIC8qIFRlcm1pbmF0ZSBhbGlhcyBuYW1lLiAgKi8KKwkgIGlmIChjcFswXSAhPSAnXDAnKQorCSAgICAqY3ArKyA9ICdcMCc7CisKKwkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCisJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKwkgICAgKytjcDsKKworCSAgaWYgKGNwWzBdICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworCSAgICAgIHNpemVfdCB2YWx1ZV9sZW47CisKKwkgICAgICB2YWx1ZSA9IGNwKys7CisJICAgICAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisJCSsrY3A7CisJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKwkgICAgICBpZiAoY3BbMF0gPT0gJ1xuJykKKwkJeworCQkgIC8qIFRoaXMgaGFzIHRvIGJlIGRvbmUgdG8gbWFrZSB0aGUgZm9sbG93aW5nIHRlc3QKKwkJICAgICBmb3IgdGhlIGVuZCBvZiBsaW5lIHBvc3NpYmxlLiAgV2UgYXJlIGxvb2tpbmcgZm9yCisJCSAgICAgdGhlIHRlcm1pbmF0aW5nICdcbicgd2hpY2ggZG8gbm90IG92ZXJ3cml0ZSBoZXJlLiAgKi8KKwkJICAqY3ArKyA9ICdcMCc7CisJCSAgKmNwID0gJ1xuJzsKKwkJfQorCSAgICAgIGVsc2UgaWYgKGNwWzBdICE9ICdcMCcpCisJCSpjcCsrID0gJ1wwJzsKKworCSAgICAgIGlmIChubWFwID49IG1heG1hcCkKKwkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKGV4dGVuZF9hbGlhc190YWJsZSAoKSwgMCkpCisJCSAgcmV0dXJuIGFkZGVkOworCisJICAgICAgYWxpYXNfbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworCSAgICAgIHZhbHVlX2xlbiA9IHN0cmxlbiAodmFsdWUpICsgMTsKKworCSAgICAgIGlmIChzdHJpbmdfc3BhY2VfYWN0ICsgYWxpYXNfbGVuICsgdmFsdWVfbGVuID4gc3RyaW5nX3NwYWNlX21heCkKKwkJeworCQkgIC8qIEluY3JlYXNlIHNpemUgb2YgbWVtb3J5IHBvb2wuICAqLworCQkgIHNpemVfdCBuZXdfc2l6ZSA9IChzdHJpbmdfc3BhY2VfbWF4CisJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisJCQkJCT8gYWxpYXNfbGVuICsgdmFsdWVfbGVuIDogMTAyNCkpOworCQkgIGNoYXIgKm5ld19wb29sID0gKGNoYXIgKikgcmVhbGxvYyAoc3RyaW5nX3NwYWNlLCBuZXdfc2l6ZSk7CisJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisJCSAgICByZXR1cm4gYWRkZWQ7CisKKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKwkJICAgIHsKKwkJICAgICAgc2l6ZV90IGk7CisKKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG5tYXA7IGkrKykKKwkJCXsKKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworCQkJICBtYXBbaV0udmFsdWUgKz0gbmV3X3Bvb2wgLSBzdHJpbmdfc3BhY2U7CisJCQl9CisJCSAgICB9CisKKwkJICBzdHJpbmdfc3BhY2UgPSBuZXdfcG9vbDsKKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisJCX0KKworCSAgICAgIG1hcFtubWFwXS5hbGlhcyA9IG1lbWNweSAoJnN0cmluZ19zcGFjZVtzdHJpbmdfc3BhY2VfYWN0XSwKKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSBhbGlhc19sZW47CisKKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisJCQkJCXZhbHVlLCB2YWx1ZV9sZW4pOworCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gdmFsdWVfbGVuOworCisJICAgICAgKytubWFwOworCSAgICAgICsrYWRkZWQ7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorCSB0aGUgcmVzdCBvZiB0aGUgbGluZS4gICovCisgICAgICB3aGlsZSAoc3RyY2hyIChidWYsICdcbicpID09IE5VTEwpCisJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorCSAgLyogTWFrZSBzdXJlIHRoZSBpbm5lciBsb29wIHdpbGwgYmUgbGVmdC4gIFRoZSBvdXRlciBsb29wCisJICAgICB3aWxsIGV4aXQgYXQgdGhlIGBmZW9mJyB0ZXN0LiAgKi8KKwkgIGJyZWFrOworICAgIH0KKworICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCisgICAgIGVycm9ycy4gIC0tZHJlcHBlciAgKi8KKyAgZmNsb3NlIChmcCk7CisKKyAgaWYgKGFkZGVkID4gMCkKKyAgICBxc29ydCAobWFwLCBubWFwLCBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorCSAgIChpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIGFsaWFzX2NvbXBhcmUpOworCisgIHJldHVybiBhZGRlZDsKK30KKworCitzdGF0aWMgaW50CitleHRlbmRfYWxpYXNfdGFibGUgKCkKK3sKKyAgc2l6ZV90IG5ld19zaXplOworICBzdHJ1Y3QgYWxpYXNfbWFwICpuZXdfbWFwOworCisgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworICBuZXdfbWFwID0gKHN0cnVjdCBhbGlhc19tYXAgKikgcmVhbGxvYyAobWFwLCAobmV3X3NpemUKKwkJCQkJCSogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSkpOworICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgIC8qIFNpbXBseSBkb24ndCBleHRlbmQ6IHdlIGRvbid0IGhhdmUgYW55IG1vcmUgY29yZS4gICovCisgICAgcmV0dXJuIC0xOworCisgIG1hcCA9IG5ld19tYXA7CisgIG1heG1hcCA9IG5ld19zaXplOworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CithbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQoreworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkNBU0VDTVAKKyAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CisjZWxzZQorICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1hcDEtPmFsaWFzOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1hcDItPmFsaWFzOworICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworICBpZiAocDEgPT0gcDIpCisgICAgcmV0dXJuIDA7CisKKyAgZG8KKyAgICB7CisgICAgICAvKiBJIGtub3cgdGhpcyBzZWVtcyB0byBiZSBvZGQgYnV0IHRoZSB0b2xvd2VyKCkgZnVuY3Rpb24gaW4KKwkgc29tZSBzeXN0ZW1zIGxpYmMgY2Fubm90IGhhbmRsZSBub25hbHBoYSBjaGFyYWN0ZXJzLiAgKi8KKyAgICAgIGMxID0gaXN1cHBlciAoKnAxKSA/IHRvbG93ZXIgKCpwMSkgOiAqcDE7CisgICAgICBjMiA9IGlzdXBwZXIgKCpwMikgPyB0b2xvd2VyICgqcDIpIDogKnAyOworICAgICAgaWYgKGMxID09ICdcMCcpCisJYnJlYWs7CisgICAgICArK3AxOworICAgICAgKytwMjsKKyAgICB9CisgIHdoaWxlIChjMSA9PSBjMik7CisKKyAgcmV0dXJuIGMxIC0gYzI7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL2xvY2FsZW5hbWUuYyBiL2UyZnNwcm9ncy9pbnRsL2xvY2FsZW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjYyZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvbG9jYWxlbmFtZS5jCkBAIC0wLDAgKzEsMTE0MiBAQAorLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKy8qIFdpbjMyIGNvZGUgd3JpdHRlbiBieSBUb3IgTGlsbHF2aXN0IDx0bWxAaWtpLmZpPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIHVuZGVmIFdJTjMyICAgLyogYXZvaWQgd2FybmluZyBvbiBtaW5ndzMyICovCisjIGRlZmluZSBXSU4zMgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisgICAweDAxIExBTkdfQVJBQklDCisgICAweDAyIExBTkdfQlVMR0FSSUFOCisgICAweDAzIExBTkdfQ0FUQUxBTgorICAgMHgwNCBMQU5HX0NISU5FU0UKKyAgIDB4MDUgTEFOR19DWkVDSAorICAgMHgwNiBMQU5HX0RBTklTSAorICAgMHgwNyBMQU5HX0dFUk1BTgorICAgMHgwOCBMQU5HX0dSRUVLCisgICAweDA5IExBTkdfRU5HTElTSAorICAgMHgwYSBMQU5HX1NQQU5JU0gKKyAgIDB4MGIgTEFOR19GSU5OSVNICisgICAweDBjIExBTkdfRlJFTkNICisgICAweDBkIExBTkdfSEVCUkVXCisgICAweDBlIExBTkdfSFVOR0FSSUFOCisgICAweDBmIExBTkdfSUNFTEFORElDCisgICAweDEwIExBTkdfSVRBTElBTgorICAgMHgxMSBMQU5HX0pBUEFORVNFCisgICAweDEyIExBTkdfS09SRUFOCisgICAweDEzIExBTkdfRFVUQ0gKKyAgIDB4MTQgTEFOR19OT1JXRUdJQU4KKyAgIDB4MTUgTEFOR19QT0xJU0gKKyAgIDB4MTYgTEFOR19QT1JUVUdVRVNFCisgICAweDE3IExBTkdfUkhBRVRPX1JPTUFOQ0UKKyAgIDB4MTggTEFOR19ST01BTklBTgorICAgMHgxOSBMQU5HX1JVU1NJQU4KKyAgIDB4MWEgTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKyAgIDB4MWIgTEFOR19TTE9WQUsKKyAgIDB4MWMgTEFOR19BTEJBTklBTgorICAgMHgxZCBMQU5HX1NXRURJU0gKKyAgIDB4MWUgTEFOR19USEFJCisgICAweDFmIExBTkdfVFVSS0lTSAorICAgMHgyMCBMQU5HX1VSRFUKKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisgICAweDIyIExBTkdfVUtSQUlOSUFOCisgICAweDIzIExBTkdfQkVMQVJVU0lBTgorICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorICAgMHgyNSBMQU5HX0VTVE9OSUFOCisgICAweDI2IExBTkdfTEFUVklBTgorICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKyAgIDB4MjggTEFOR19UQUpJSworICAgMHgyOSBMQU5HX0ZBUlNJCisgICAweDJhIExBTkdfVklFVE5BTUVTRQorICAgMHgyYiBMQU5HX0FSTUVOSUFOCisgICAweDJjIExBTkdfQVpFUkkKKyAgIDB4MmQgTEFOR19CQVNRVUUKKyAgIDB4MmUgTEFOR19TT1JCSUFOCisgICAweDJmIExBTkdfTUFDRURPTklBTgorICAgMHgzMCBMQU5HX1NVVFUKKyAgIDB4MzEgTEFOR19UU09OR0EKKyAgIDB4MzIgTEFOR19UU1dBTkEKKyAgIDB4MzMgTEFOR19WRU5EQQorICAgMHgzNCBMQU5HX1hIT1NBCisgICAweDM1IExBTkdfWlVMVQorICAgMHgzNiBMQU5HX0FGUklLQUFOUworICAgMHgzNyBMQU5HX0dFT1JHSUFOCisgICAweDM4IExBTkdfRkFFUk9FU0UKKyAgIDB4MzkgTEFOR19ISU5ESQorICAgMHgzYSBMQU5HX01BTFRFU0UKKyAgIDB4M2IgTEFOR19TQUFNSQorICAgMHgzYyBMQU5HX0dBRUxJQworICAgMHgzZCBMQU5HX1lJRERJU0gKKyAgIDB4M2UgTEFOR19NQUxBWQorICAgMHgzZiBMQU5HX0tBWkFLCisgICAweDQwIExBTkdfS1lSR1laCisgICAweDQxIExBTkdfU1dBSElMSQorICAgMHg0MiBMQU5HX1RVUktNRU4KKyAgIDB4NDMgTEFOR19VWkJFSworICAgMHg0NCBMQU5HX1RBVEFSCisgICAweDQ1IExBTkdfQkVOR0FMSQorICAgMHg0NiBMQU5HX1BVTkpBQkkKKyAgIDB4NDcgTEFOR19HVUpBUkFUSQorICAgMHg0OCBMQU5HX09SSVlBCisgICAweDQ5IExBTkdfVEFNSUwKKyAgIDB4NGEgTEFOR19URUxVR1UKKyAgIDB4NGIgTEFOR19LQU5OQURBCisgICAweDRjIExBTkdfTUFMQVlBTEFNCisgICAweDRkIExBTkdfQVNTQU1FU0UKKyAgIDB4NGUgTEFOR19NQVJBVEhJCisgICAweDRmIExBTkdfU0FOU0tSSVQKKyAgIDB4NTAgTEFOR19NT05HT0xJQU4KKyAgIDB4NTEgTEFOR19USUJFVEFOCisgICAweDUyIExBTkdfV0VMU0gKKyAgIDB4NTMgTEFOR19DQU1CT0RJQU4KKyAgIDB4NTQgTEFOR19MQU8KKyAgIDB4NTUgTEFOR19CVVJNRVNFCisgICAweDU2IExBTkdfR0FMSUNJQU4KKyAgIDB4NTcgTEFOR19LT05LQU5JCisgICAweDU4IExBTkdfTUFOSVBVUkkKKyAgIDB4NTkgTEFOR19TSU5ESEkKKyAgIDB4NWEgTEFOR19TWVJJQUMKKyAgIDB4NWIgTEFOR19TSU5IQUxFU0UKKyAgIDB4NWMgTEFOR19DSEVST0tFRQorICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorICAgMHg1ZSBMQU5HX0FNSEFSSUMKKyAgIDB4NWYgTEFOR19UQU1BWklHSFQKKyAgIDB4NjAgTEFOR19LQVNITUlSSQorICAgMHg2MSBMQU5HX05FUEFMSQorICAgMHg2MiBMQU5HX0ZSSVNJQU4KKyAgIDB4NjMgTEFOR19QQVNIVE8KKyAgIDB4NjQgTEFOR19UQUdBTE9HCisgICAweDY1IExBTkdfRElWRUhJCisgICAweDY2IExBTkdfRURPCisgICAweDY3IExBTkdfRlVMRlVMREUKKyAgIDB4NjggTEFOR19IQVVTQQorICAgMHg2OSBMQU5HX0lCSUJJTworICAgMHg2YSBMQU5HX1lPUlVCQQorICAgMHg3MCBMQU5HX0lHQk8KKyAgIDB4NzEgTEFOR19LQU5VUkkKKyAgIDB4NzIgTEFOR19PUk9NTworICAgMHg3MyBMQU5HX1RJR1JJTllBCisgICAweDc0IExBTkdfR1VBUkFOSQorICAgMHg3NSBMQU5HX0hBV0FJSUFOCisgICAweDc2IExBTkdfTEFUSU4KKyAgIDB4NzcgTEFOR19TT01BTEkKKyAgIDB4NzggTEFOR19ZSQorICAgMHg3OSBMQU5HX1BBUElBTUVOVFUKKyovCisvKiBNaW5ndyBoZWFkZXJzIGRvbid0IGhhdmUgbGF0ZXN0IGxhbmd1YWdlIGFuZCBzdWJsYW5ndWFnZSBjb2Rlcy4gICovCisjIGlmbmRlZiBMQU5HX0FGUklLQUFOUworIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19BTEJBTklBTgorIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FNSEFSSUMKKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FSQUJJQworIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19BUk1FTklBTgorIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0FTU0FNRVNFCisjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQVpFUkkKKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19CQVNRVUUKKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQkVMQVJVU0lBTgorIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQkVOR0FMSQorIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQlVSTUVTRQorIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfQ0FNQk9ESUFOCisjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0NBVEFMQU4KKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0NIRVJPS0VFCisjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfRElWRUhJCisjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0VETworIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19FU1RPTklBTgorIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0ZBRVJPRVNFCisjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfRkFSU0kKKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19GUklTSUFOCisjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19GVUxGVUxERQorIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0dBRUxJQworIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19HQUxJQ0lBTgorIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0dFT1JHSUFOCisjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfR1VBUkFOSQorIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfR1VKQVJBVEkKKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19IQVVTQQorIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0hBV0FJSUFOCisjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfSEVCUkVXCisjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0hJTkRJCisjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfSUJJQklPCisjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lHQk8KKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lORE9ORVNJQU4KKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0lOVUtUSVRVVAorIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQU5OQURBCisjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQU5VUkkKKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfS0FTSE1JUkkKKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19LQVpBSworIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0tPTktBTkkKKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX0tZUkdZWgorIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MQU8KKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfTEFUSU4KKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MQVRWSUFOCisjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19MSVRIVUFOSUFOCisjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUNFRE9OSUFOCisjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUxBWQorIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01BTEFZQUxBTQorIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQUxURVNFCisjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19NQU5JUFVSSQorIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01BUkFUSEkKKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX01PTkdPTElBTgorIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19ORVBBTEkKKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfT1JJWUEKKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19PUk9NTworIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1BBUElBTUVOVFUKKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1BBU0hUTworIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19QVU5KQUJJCisjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19SSEFFVE9fUk9NQU5DRQorIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1NBQU1JCisjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU0FOU0tSSVQKKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TRVJCSUFOCisjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TSU5ESEkKKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU0lOSEFMRVNFCisjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1NMT1ZBSworIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19TT01BTEkKKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU09SQklBTgorIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1VUVQorIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1dBSElMSQorIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfU1lSSUFDCisjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBR0FMT0cKKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBSklLCisjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEFNQVpJR0hUCisjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RBTUlMCisjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEFUQVIKKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19URUxVR1UKKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVEhBSQorIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVElCRVRBTgorIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVElHUklOWUEKKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworIyBlbmRpZgorIyBpZm5kZWYgTEFOR19UU09OR0EKKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVFNXQU5BCisjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1RVUktNRU4KKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1VLUkFJTklBTgorIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19VUkRVCisjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19VWkJFSworIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1ZFTkRBCisjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfVklFVE5BTUVTRQorIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfV0VMU0gKKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorIyBlbmRpZgorIyBpZm5kZWYgTEFOR19YSE9TQQorIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1lJCisjIGRlZmluZSBMQU5HX1lJIDB4NzgKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfWUlERElTSAorIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKyMgZW5kaWYKKyMgaWZuZGVmIExBTkdfWU9SVUJBCisjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisjIGVuZGlmCisjIGlmbmRlZiBMQU5HX1pVTFUKKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19JUkFRCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0VHWVBUCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19MSUJZQQorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQUxHRVJJQQorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1RVTklTSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfT01BTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19ZRU1FTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfU1lSSUEKKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0pPUkRBTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xFQkFOT04KKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfS1VXQUlUCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVUFFCisjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfQkFIUkFJTgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19RQVRBUgorIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19BWkVSSV9MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0NZUklMTElDCisjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNICisjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0NISU5FU0VfTUFDQVUKKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9KQU1BSUNBCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1RSSU5JREFECisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQQorIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSE9OR0tPTkcKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ESUEKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUEKKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFCisjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcKKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTU9OQUNPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUworIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPTkdPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NBTUVST09OCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRQorIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTUFMSQorIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0hBSVRJCisjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHCisjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4KKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19LQVNITUlSSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX01BTEFZX01BTEFZU0lBCisjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0KKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19ORVBBTElfSU5ESUEKKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9JTkRJQQorIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTgorIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fUk9NQU5JQQorIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQQorIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQworIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX0lORElBCisjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTgorIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09TVEFfUklDQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BBTkFNQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NPTE9NQklBCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1BFUlUKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VDVUFET1IKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DSElMRQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9VUlVHVUFZCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVkKKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0hPTkRVUkFTCisjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQQorIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUFVFUlRPX1JJQ08KKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1NXRURJU0hfRklOTEFORAorIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDCisjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19UQU1BWklHSFRfTEFUSU4KKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKyMgZW5kaWYKKyMgaWZuZGVmIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEKKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBCisjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VUkRVX1BBS0lTVEFOCisjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VUkRVX0lORElBCisjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorIyBlbmRpZgorIyBpZm5kZWYgU1VCTEFOR19VWkJFS19MQVRJTgorIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisjIGVuZGlmCisjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0NZUklMTElDCisjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBYUEczIGRlZmluZXMgdGhlIHJlc3VsdCBvZiAnc2V0bG9jYWxlIChjYXRlZ29yeSwgTlVMTCknIGFzOgorICAgIkRpcmVjdHMgJ3NldGxvY2FsZSgpJyB0byBxdWVyeSAnY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorICAgSG93ZXZlciBpdCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBleGFjdCBmb3JtYXQuICBOZWl0aGVyIGRvIFNVU1YyIGFuZAorICAgSVNPIEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3RlbXMgKGUuZy4KKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKyNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIF9fR05VX0xJQlJBUllfXyAmJiBfX0dOVV9MSUJSQVJZX18gPj0gMikKKyMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbmFtZSwgYW5kIGNhbm9uaWNhbGl6ZSBpdCBpbnRvIFhQRyBzeW50YXgKKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKyAgIFRoZSBjb2Rlc2V0IHBhcnQgaW4gdGhlIHJlc3VsdCBpcyBub3QgcmVsaWFibGU7IHRoZSBsb2NhbGVfY2hhcnNldCgpCisgICBzaG91bGQgYmUgdXNlZCBmb3IgY29kZXNldCBpbmZvcm1hdGlvbiBpbnN0ZWFkLgorICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworCitjb25zdCBjaGFyICoKK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCit7CisgIGNvbnN0IGNoYXIgKnJldHZhbDsKKworI2lmbmRlZiBXSU4zMgorCisgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKyAgICAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlICdzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisjIGlmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKyMgZWxzZQorICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCisgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisgICAgeworICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisgICAgICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CisgICAgICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisJeworCSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCisJICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CisJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisJICAgIC8qIFdlIHVzZSBDIGFzIHRoZSBkZWZhdWx0IGRvbWFpbi4gIFBPU0lYIHNheXMgdGhpcyBpcworCSAgICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgKi8KKwkgICAgcmV0dmFsID0gIkMiOworCX0KKyAgICB9CisjIGVuZGlmCisKKyAgcmV0dXJuIHJldHZhbDsKKworI2Vsc2UgLyogV0lOMzIgKi8KKworICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisgICAgIERvbid0IGV2ZW4gYm90aGVyIGRldGVybWluaW5nIHRoZSBjb2Rlc2V0OyBpdCdzIG5vdCB1c2VmdWwgaW4gdGhpcworICAgICBjb250ZXh0LCBiZWNhdXNlIG1lc3NhZ2UgY2F0YWxvZ3MgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHNpbmdsZQorICAgICBjb2Rlc2V0LiAgKi8KKworICBMQ0lEIGxjaWQ7CisgIExBTkdJRCBsYW5naWQ7CisgIGludCBwcmltYXJ5LCBzdWI7CisKKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorICAgICB2YXJpYWJsZXMsIGFzIG9uIFBPU0lYIHN5c3RlbXMuICAqLworICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisgIHJldHZhbCA9IGdldGVudiAoY2F0ZWdvcnluYW1lKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorICAgIHJldHVybiByZXR2YWw7CisKKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKyAgbGNpZCA9IEdldFRocmVhZExvY2FsZSAoKTsKKworICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisgIGxhbmdpZCA9IExBTkdJREZST01MQ0lEIChsY2lkKTsKKworICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisgIHByaW1hcnkgPSBQUklNQVJZTEFOR0lEIChsYW5naWQpOworICBzdWIgPSBTVUJMQU5HSUQgKGxhbmdpZCk7CisKKyAgLyogRGlzcGF0Y2ggb24gbGFuZ3VhZ2UuCisgICAgIFNlZSBhbHNvIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9vbmxpbmVkYXQvbGFuZ3VhZ2VzLmh0bWwgLgorICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworICBzd2l0Y2ggKHByaW1hcnkpCisgICAgeworICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworICAgIGNhc2UgTEFOR19BTEJBTklBTjogcmV0dXJuICJzcV9BTCI7CisgICAgY2FzZSBMQU5HX0FNSEFSSUM6IHJldHVybiAiYW1fRVQiOworICAgIGNhc2UgTEFOR19BUkFCSUM6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfSVJBUTogcmV0dXJuICJhcl9JUSI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19FR1lQVDogcmV0dXJuICJhcl9FRyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19BTEdFUklBOiByZXR1cm4gImFyX0RaIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX01PUk9DQ086IHJldHVybiAiYXJfTUEiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19PTUFOOiByZXR1cm4gImFyX09NIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX1lFTUVOOiByZXR1cm4gImFyX1lFIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX0pPUkRBTjogcmV0dXJuICJhcl9KTyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OOiByZXR1cm4gImFyX0xCIjsKKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19VQUU6IHJldHVybiAiYXJfQUUiOworCWNhc2UgU1VCTEFOR19BUkFCSUNfQkFIUkFJTjogcmV0dXJuICJhcl9CSCI7CisJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisJfQorICAgICAgcmV0dXJuICJhciI7CisgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKyAgICBjYXNlIExBTkdfQVNTQU1FU0U6IHJldHVybiAiYXNfSU4iOworICAgIGNhc2UgTEFOR19BWkVSSToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBBemVyYmFpamFuaSBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworCWNhc2UgU1VCTEFOR19BWkVSSV9DWVJJTExJQzogcmV0dXJuICJhel9BWkBjeXJpbGxpYyI7CisJfQorICAgICAgcmV0dXJuICJheiI7CisgICAgY2FzZSBMQU5HX0JBU1FVRToKKyAgICAgIHJldHVybiAiZXUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJldV9FUyIgb3IgImV1X0ZSIi4gICovCisgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworICAgIGNhc2UgTEFOR19CRU5HQUxJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19CRU5HQUxJX0lORElBOiByZXR1cm4gImJuX0lOIjsKKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9CQU5HTEFERVNIOiByZXR1cm4gImJuX0JEIjsKKwl9CisgICAgICByZXR1cm4gImJuIjsKKyAgICBjYXNlIExBTkdfQlVMR0FSSUFOOiByZXR1cm4gImJnX0JHIjsKKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisgICAgY2FzZSBMQU5HX0NBTUJPRElBTjogcmV0dXJuICJrbV9LSCI7CisgICAgY2FzZSBMQU5HX0NBVEFMQU46IHJldHVybiAiY2FfRVMiOworICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworICAgIGNhc2UgTEFOR19DSElORVNFOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19DSElORVNFX1RSQURJVElPTkFMOiByZXR1cm4gInpoX1RXIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVEOiByZXR1cm4gInpoX0NOIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisJY2FzZSBTVUJMQU5HX0NISU5FU0VfU0lOR0FQT1JFOiByZXR1cm4gInpoX1NHIjsKKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVTogcmV0dXJuICJ6aF9NTyI7CisJfQorICAgICAgcmV0dXJuICJ6aCI7CisgICAgY2FzZSBMQU5HX0NST0FUSUFOOgkJLyogTEFOR19DUk9BVElBTiA9PSBMQU5HX1NFUkJJQU4KKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisJCQkJICogc2hvdWxkIHJlYWxseSBub3cgYmUgdHdvIHNlcGFyYXRlCisJCQkJICogbGFuZ3VhZ2VzIGJlY2F1c2Ugb2YgcG9saXRpY2FsIHJlYXNvbnMuCisJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisJCQkJICogb3IgQ3JvYXRpYW4uKQorCQkJCSAqIChJIGNhbiBmZWVsIHRob3NlIGZsYW1lcyBjb21pbmcgYWxyZWFkeS4pCisJCQkJICovCisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworCWNhc2UgU1VCTEFOR19TRVJCSUFOX0xBVElOOiByZXR1cm4gInNyX0NTIjsKKwljYXNlIFNVQkxBTkdfU0VSQklBTl9DWVJJTExJQzogcmV0dXJuICJzcl9DU0BjeXJpbGxpYyI7CisJfQorICAgICAgcmV0dXJuICJociI7CisgICAgY2FzZSBMQU5HX0NaRUNIOiByZXR1cm4gImNzX0NaIjsKKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKyAgICBjYXNlIExBTkdfRElWRUhJOiByZXR1cm4gImR2X01WIjsKKyAgICBjYXNlIExBTkdfRFVUQ0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RVVENIOiByZXR1cm4gIm5sX05MIjsKKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworCX0KKyAgICAgIHJldHVybiAibmwiOworICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKyAgICBjYXNlIExBTkdfRU5HTElTSDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBTVUJMQU5HX0VOR0xJU0hfVVMgPT0gU1VCTEFOR19ERUZBVUxULiBIZWguIEkgdGhvdWdodAorCSAqIEVuZ2xpc2ggd2FzIHRoZSBsYW5ndWFnZSBzcG9rZW4gaW4gRW5nbGFuZC4KKwkgKiBPaCB3ZWxsLgorCSAqLworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1VTOiByZXR1cm4gImVuX1VTIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQVVTOiByZXR1cm4gImVuX0FVIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQU46IHJldHVybiAiZW5fQ0EiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9FSVJFOiByZXR1cm4gImVuX0lFIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0E6IHJldHVybiAiZW5fWkEiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTjogcmV0dXJuICJlbl9HRCI7IC8qIEdyZW5hZGE/ICovCisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFOiByZXR1cm4gImVuX0JaIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0U6IHJldHVybiAiZW5fWlciOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTOiByZXR1cm4gImVuX1BIIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HOiByZXR1cm4gImVuX0hLIjsKKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRJQTogcmV0dXJuICJlbl9JTiI7CisJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRTogcmV0dXJuICJlbl9TRyI7CisJfQorICAgICAgcmV0dXJuICJlbiI7CisgICAgY2FzZSBMQU5HX0VTVE9OSUFOOiByZXR1cm4gImV0X0VFIjsKKyAgICBjYXNlIExBTkdfRkFFUk9FU0U6IHJldHVybiAiZm9fRk8iOworICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisgICAgY2FzZSBMQU5HX0ZJTk5JU0g6IHJldHVybiAiZmlfRkkiOworICAgIGNhc2UgTEFOR19GUkVOQ0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSDogcmV0dXJuICJmcl9GUiI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ0FOQURJQU46IHJldHVybiAiZnJfQ0EiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfU1dJU1M6IHJldHVybiAiZnJfQ0giOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ086IHJldHVybiAiZnJfTUMiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUzogcmV0dXJuICJmciI7IC8qIENhcmliYmVhbj8gKi8KKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09OR086IHJldHVybiAiZnJfQ0ciOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfU0VORUdBTDogcmV0dXJuICJmcl9TTiI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DT1RFRElWT0lSRTogcmV0dXJuICJmcl9DSSI7CisJY2FzZSBTVUJMQU5HX0ZSRU5DSF9NQUxJOiByZXR1cm4gImZyX01MIjsKKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworCWNhc2UgU1VCTEFOR19GUkVOQ0hfSEFJVEk6IHJldHVybiAiZnJfSFQiOworCX0KKyAgICAgIHJldHVybiAiZnIiOworICAgIGNhc2UgTEFOR19GUklTSUFOOiByZXR1cm4gImZ5X05MIjsKKyAgICBjYXNlIExBTkdfRlVMRlVMREU6CisgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworICAgICAgcmV0dXJuICJmZl9ORyI7CisgICAgY2FzZSBMQU5HX0dBRUxJQzoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIDB4MDE6IC8qIFNDT1RUSVNIICovIHJldHVybiAiZ2RfR0IiOworCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisJfQorICAgICAgcmV0dXJuICJDIjsKKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworICAgIGNhc2UgTEFOR19HRU9SR0lBTjogcmV0dXJuICJrYV9HRSI7CisgICAgY2FzZSBMQU5HX0dFUk1BTjoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfR0VSTUFOOiByZXR1cm4gImRlX0RFIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX0FVU1RSSUFOOiByZXR1cm4gImRlX0FUIjsKKwljYXNlIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkc6IHJldHVybiAiZGVfTFUiOworCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisJfQorICAgICAgcmV0dXJuICJkZSI7CisgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKyAgICBjYXNlIExBTkdfR1VBUkFOSTogcmV0dXJuICJnbl9QWSI7CisgICAgY2FzZSBMQU5HX0dVSkFSQVRJOiByZXR1cm4gImd1X0lOIjsKKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworICAgIGNhc2UgTEFOR19IQVdBSUlBTjoKKyAgICAgIC8qIEZJWE1FOiBEbyB0aGV5IG1lYW4gSGF3YWlpYW4gKCJoYXdfVVMiLCAxMDAwIHNwZWFrZXJzKQorCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKyAgICAgIHJldHVybiAiY3BlX1VTIjsKKyAgICBjYXNlIExBTkdfSEVCUkVXOiByZXR1cm4gImhlX0lMIjsKKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworICAgIGNhc2UgTEFOR19IVU5HQVJJQU46IHJldHVybiAiaHVfSFUiOworICAgIGNhc2UgTEFOR19JQklCSU86IHJldHVybiAibmljX05HIjsKKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKyAgICBjYXNlIExBTkdfSUdCTzogcmV0dXJuICJpZ19ORyI7CisgICAgY2FzZSBMQU5HX0lORE9ORVNJQU46IHJldHVybiAiaWRfSUQiOworICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworICAgIGNhc2UgTEFOR19JVEFMSUFOOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19JVEFMSUFOOiByZXR1cm4gIml0X0lUIjsKKwljYXNlIFNVQkxBTkdfSVRBTElBTl9TV0lTUzogcmV0dXJuICJpdF9DSCI7CisJfQorICAgICAgcmV0dXJuICJpdCI7CisgICAgY2FzZSBMQU5HX0pBUEFORVNFOiByZXR1cm4gImphX0pQIjsKKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisgICAgY2FzZSBMQU5HX0tBTlVSSTogcmV0dXJuICJrcl9ORyI7CisgICAgY2FzZSBMQU5HX0tBU0hNSVJJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImtzX1BLIjsKKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworCX0KKyAgICAgIHJldHVybiAia3MiOworICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisgICAgY2FzZSBMQU5HX0tPTktBTkk6CisgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworICAgICAgcmV0dXJuICJrb2tfSU4iOworICAgIGNhc2UgTEFOR19LT1JFQU46IHJldHVybiAia29fS1IiOworICAgIGNhc2UgTEFOR19LWVJHWVo6IHJldHVybiAia3lfS0ciOworICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworICAgIGNhc2UgTEFOR19MQVRJTjogcmV0dXJuICJsYV9WQSI7CisgICAgY2FzZSBMQU5HX0xBVFZJQU46IHJldHVybiAibHZfTFYiOworICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKyAgICBjYXNlIExBTkdfTUFDRURPTklBTjogcmV0dXJuICJta19NSyI7CisgICAgY2FzZSBMQU5HX01BTEFZOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19NQUxBWV9NQUxBWVNJQTogcmV0dXJuICJtc19NWSI7CisJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKwl9CisgICAgICByZXR1cm4gIm1zIjsKKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKyAgICBjYXNlIExBTkdfTUFMVEVTRTogcmV0dXJuICJtdF9NVCI7CisgICAgY2FzZSBMQU5HX01BTklQVVJJOgorICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKyAgICAgIHJldHVybiAibW5pX0lOIjsKKyAgICBjYXNlIExBTkdfTUFSQVRISTogcmV0dXJuICJtcl9JTiI7CisgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKyAgICAgIHJldHVybiAibW4iOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJtbl9DTiIgb3IgIm1uX01OIi4gICovCisgICAgY2FzZSBMQU5HX05FUEFMSToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJuZV9OUCI7CisJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisJfQorICAgICAgcmV0dXJuICJuZSI7CisgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisJY2FzZSBTVUJMQU5HX05PUldFR0lBTl9OWU5PUlNLOiByZXR1cm4gIm5uX05PIjsKKwl9CisgICAgICByZXR1cm4gIm5vIjsKKyAgICBjYXNlIExBTkdfT1JJWUE6IHJldHVybiAib3JfSU4iOworICAgIGNhc2UgTEFOR19PUk9NTzogcmV0dXJuICJvbV9FVCI7CisgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKyAgICBjYXNlIExBTkdfUEFTSFRPOgorICAgICAgcmV0dXJuICJwcyI7IC8qIEFtYmlndW91czogY291bGQgYmUgInBzX1BLIiBvciAicHNfQUYiLiAgKi8KKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKyAgICBjYXNlIExBTkdfUE9SVFVHVUVTRToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRTogcmV0dXJuICJwdF9QVCI7CisJLyogSG1tLiBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOID09IFNVQkxBTkdfREVGQVVMVC4KKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKwljYXNlIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU46IHJldHVybiAicHRfQlIiOworCX0KKyAgICAgIHJldHVybiAicHQiOworICAgIGNhc2UgTEFOR19QVU5KQUJJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19QVU5KQUJJX0lORElBOiByZXR1cm4gInBhX0lOIjsgLyogR3VybXVraGkgc2NyaXB0ICovCisJY2FzZSBTVUJMQU5HX1BVTkpBQklfUEFLSVNUQU46IHJldHVybiAicGFfUEsiOyAvKiBBcmFiaWMgc2NyaXB0ICovCisJfQorICAgICAgcmV0dXJuICJwYSI7CisgICAgY2FzZSBMQU5HX1JIQUVUT19ST01BTkNFOiByZXR1cm4gInJtX0NIIjsKKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworCWNhc2UgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBOiByZXR1cm4gInJvX01EIjsKKwl9CisgICAgICByZXR1cm4gInJvIjsKKyAgICBjYXNlIExBTkdfUlVTU0lBTjoKKyAgICAgIHJldHVybiAicnUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJydV9SVSIgb3IgInJ1X1VBIiBvciAicnVfTUQiLiAgKi8KKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisgICAgY2FzZSBMQU5HX1NBTlNLUklUOiByZXR1cm4gInNhX0lOIjsKKyAgICBjYXNlIExBTkdfU0lOREhJOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19TSU5ESElfSU5ESUE6IHJldHVybiAic2RfSU4iOworCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworCX0KKyAgICAgIHJldHVybiAic2QiOworICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworICAgIGNhc2UgTEFOR19TTE9WQUs6IHJldHVybiAic2tfU0siOworICAgIGNhc2UgTEFOR19TTE9WRU5JQU46IHJldHVybiAic2xfU0kiOworICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworICAgIGNhc2UgTEFOR19TT1JCSUFOOgorICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKyAgICAgIHJldHVybiAid2VuX0RFIjsKKyAgICBjYXNlIExBTkdfU1BBTklTSDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfU1BBTklTSDogcmV0dXJuICJlc19FUyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTUVYSUNBTjogcmV0dXJuICJlc19NWCI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorCSAgcmV0dXJuICJlc19FU0Btb2Rlcm4iOwkvKiBub3Qgc2VlbiBvbiBVbml4ICovCisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBOiByZXR1cm4gImVzX0dUIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QQU5BTUE6IHJldHVybiAiZXNfUEEiOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQzogcmV0dXJuICJlc19ETyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQTogcmV0dXJuICJlc19DTyI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEVSVTogcmV0dXJuICJlc19QRSI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SOiByZXR1cm4gImVzX0VDIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DSElMRTogcmV0dXJuICJlc19DTCI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVk6IHJldHVybiAiZXNfUFkiOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0JPTElWSUE6IHJldHVybiAiZXNfQk8iOworCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUzogcmV0dXJuICJlc19ITiI7CisJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBOiByZXR1cm4gImVzX05JIjsKKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisJfQorICAgICAgcmV0dXJuICJlcyI7CisgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKyAgICBjYXNlIExBTkdfU1dBSElMSTogcmV0dXJuICJzd19LRSI7CisgICAgY2FzZSBMQU5HX1NXRURJU0g6CisgICAgICBzd2l0Y2ggKHN1YikKKwl7CisJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAic3ZfU0UiOworCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworCX0KKyAgICAgIHJldHVybiAic3YiOworICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisgICAgY2FzZSBMQU5HX1RBR0FMT0c6IHJldHVybiAidGxfUEgiOworICAgIGNhc2UgTEFOR19UQUpJSzogcmV0dXJuICJ0Z19USiI7CisgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUM6IHJldHVybiAiYmVyX01BQGFyYWJpYyI7CisJY2FzZSBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTjogcmV0dXJuICJiZXJfTUFAbGF0aW4iOworCX0KKyAgICAgIHJldHVybiAiYmVyX01BIjsKKyAgICBjYXNlIExBTkdfVEFNSUw6CisgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisgICAgY2FzZSBMQU5HX1RBVEFSOiByZXR1cm4gInR0X1JVIjsKKyAgICBjYXNlIExBTkdfVEVMVUdVOiByZXR1cm4gInRlX0lOIjsKKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisgICAgY2FzZSBMQU5HX1RJQkVUQU46IHJldHVybiAiYm9fQ04iOworICAgIGNhc2UgTEFOR19USUdSSU5ZQToKKyAgICAgIHN3aXRjaCAoc3ViKQorCXsKKwljYXNlIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUE6IHJldHVybiAidGlfRVQiOworCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKwl9CisgICAgICByZXR1cm4gInRpIjsKKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKyAgICBjYXNlIExBTkdfVFNXQU5BOiByZXR1cm4gInRuX0JXIjsKKyAgICBjYXNlIExBTkdfVFVSS0lTSDogcmV0dXJuICJ0cl9UUiI7CisgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworICAgIGNhc2UgTEFOR19VS1JBSU5JQU46IHJldHVybiAidWtfVUEiOworICAgIGNhc2UgTEFOR19VUkRVOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19VUkRVX1BBS0lTVEFOOiByZXR1cm4gInVyX1BLIjsKKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisJfQorICAgICAgcmV0dXJuICJ1ciI7CisgICAgY2FzZSBMQU5HX1VaQkVLOgorICAgICAgc3dpdGNoIChzdWIpCisJeworCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisJY2FzZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDOiByZXR1cm4gInV6X1VaQGN5cmlsbGljIjsKKwl9CisgICAgICByZXR1cm4gInV6IjsKKyAgICBjYXNlIExBTkdfVkVOREE6IHJldHVybiAidmVfWkEiOworICAgIGNhc2UgTEFOR19WSUVUTkFNRVNFOiByZXR1cm4gInZpX1ZOIjsKKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworICAgIGNhc2UgTEFOR19YSE9TQTogcmV0dXJuICJ4aF9aQSI7CisgICAgY2FzZSBMQU5HX1lJOiByZXR1cm4gInNpdF9DTiI7CisgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworICAgIGNhc2UgTEFOR19ZT1JVQkE6IHJldHVybiAieW9fTkciOworICAgIGNhc2UgTEFOR19aVUxVOiByZXR1cm4gInp1X1pBIjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworICAgIH0KKworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9sb2cuYyBiL2UyZnNwcm9ncy9pbnRsL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjA3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9sb2cuYwpAQCAtMCwwICsxLDk4IEBACisvKiBMb2cgZmlsZSBvdXRwdXQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBQcmludCBhbiBBU0NJSSBzdHJpbmcgd2l0aCBxdW90ZXMgYW5kIGVzY2FwZSBzZXF1ZW5jZXMgd2hlcmUgbmVlZGVkLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF9lc2NhcGVkIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgcHV0YyAoJyInLCBzdHJlYW0pOworICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykKKyAgICBpZiAoKnN0ciA9PSAnXG4nKQorICAgICAgeworCWZwdXRzICgiXFxuXCIiLCBzdHJlYW0pOworCWlmIChzdHJbMV0gPT0gJ1wwJykKKwkgIHJldHVybjsKKwlmcHV0cyAoIlxuXCIiLCBzdHJlYW0pOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlpZiAoKnN0ciA9PSAnIicgfHwgKnN0ciA9PSAnXFwnKQorCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKwlwdXRjICgqc3RyLCBzdHJlYW0pOworICAgICAgfQorICBwdXRjICgnIicsIHN0cmVhbSk7Cit9CisKKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLwordm9pZAorX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLCBjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKK3sKKyAgc3RhdGljIGNoYXIgKmxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKyAgRklMRSAqbG9nZmlsZTsKKworICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworICBpZiAobGFzdF9sb2dmaWxlbmFtZSA9PSBOVUxMIHx8IHN0cmNtcCAobG9nZmlsZW5hbWUsIGxhc3RfbG9nZmlsZW5hbWUpICE9IDApCisgICAgeworICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lICE9IE5VTEwpCisJeworCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorCSAgICB7CisJICAgICAgZmNsb3NlIChsYXN0X2xvZ2ZpbGUpOworCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisJICAgIH0KKwkgIGZyZWUgKGxhc3RfbG9nZmlsZW5hbWUpOworCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisJfQorICAgICAgLyogT3BlbiB0aGUgbG9nZmlsZS4gICovCisgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworICAgICAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKyAgICAgIGxhc3RfbG9nZmlsZSA9IGZvcGVuIChsb2dmaWxlbmFtZSwgImEiKTsKKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGUgPT0gTlVMTCkKKwlyZXR1cm47CisgICAgfQorICBsb2dmaWxlID0gbGFzdF9sb2dmaWxlOworCisgIGZwcmludGYgKGxvZ2ZpbGUsICJkb21haW4gIik7CisgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIGRvbWFpbm5hbWUpOworICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgbXNnaWQxKTsKKyAgaWYgKHBsdXJhbCkKKyAgICB7CisgICAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZF9wbHVyYWwgIik7CisgICAgICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDIpOworICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworICAgIH0KKyAgZWxzZQorICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKyAgcHV0YyAoJ1xuJywgbG9nZmlsZSk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9uZ2V0dGV4dC5jIGIvZTJmc3Byb2dzL2ludGwvbmdldHRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzNlMDBjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvbmdldHRleHQuYwpAQCAtMCwwICsxLDY1IEBACisvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBfX25lZWRfTlVMTAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCisjZW5kaWYKKworI2luY2x1ZGUgImdldHRleHRQLmgiCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisjZWxzZQorIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKyNlbmRpZgorCisvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgIHRleHQpLiAgKi8KK2NoYXIgKgorTkdFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gRENOR0VUVEVYVCAoTlVMTCwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvb3MyY29tcGF0LmMgYi9lMmZzcHJvZ3MvaW50bC9vczJjb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGRjMzNlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvb3MyY29tcGF0LmMKQEAgLTAsMCArMSw5OCBAQAorLyogT1MvMiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2RlZmluZSBPUzJfQVdBUkUKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisvKiBBIHZlcnNpb24gb2YgZ2V0ZW52KCkgdGhhdCB3b3JrcyBmcm9tIERMTHMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIERvc1NjYW5FbnYgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzek5hbWUsIHVuc2lnbmVkIGNoYXIgKipwcHN6VmFsdWUpOworCitjaGFyICoKK19ubF9nZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworICBpZiAoRG9zU2NhbkVudiAobmFtZSwgJnZhbHVlKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiB2YWx1ZTsKK30KKworLyogQSBmaXhlZCBzaXplIGJ1ZmZlci4gICovCitjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisKK2NoYXIgKl9ubG9zMl9saWJkaXIgPSBOVUxMOworY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CitjaGFyICpfbmxvczJfbG9jYWxlZGlyID0gTlVMTDsKKworc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorbmxvczJfaW5pdGlhbGl6ZSAoKQoreworICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKyAgY2hhciAqZ251bG9jYWxlZGlyID0gZ2V0ZW52ICgiR05VTE9DQUxFRElSIik7CisKKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKyAgaWYgKCFfbmxvczJfbGliZGlyKQorICAgIHsKKyAgICAgIGlmIChyb290KQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciArIHNsLCBMSUJESVIsIHN0cmxlbiAoTElCRElSKSArIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9saWJkaXIgPSBMSUJESVI7CisgICAgfQorCisgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBnbnVsb2NhbGVkaXI7CisgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKyAgICB7CisgICAgICBpZiAocm9vdCkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CisgICAgICAgICAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRV9BTElBU19QQVRIKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCArIHNsLCBMT0NBTEVfQUxJQVNfUEFUSCwgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKyAgICAgICAgfQorICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKyAgICB9CisKKyAgX25sb3MyX2xvY2FsZWRpciA9IGdudWxvY2FsZWRpcjsKKyAgaWYgKCFfbmxvczJfbG9jYWxlZGlyKQorICAgIHsKKyAgICAgIGlmIChyb290KQorICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKyAgICAgICAgICBfbmxvczJfbG9jYWxlZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciwgcm9vdCwgc2wpOworICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisgICAgfQorCisgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisgICAgc3RyY3B5IChsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZSwgX25sb3MyX2xvY2FsZWRpcik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9vczJjb21wYXQuaCBiL2UyZnNwcm9ncy9pbnRsL29zMmNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzRlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9vczJjb21wYXQuaApAQCAtMCwwICsxLDQ2IEBACisvKiBPUy8yIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4KKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKyNpZm5kZWYgT1MyX0FXQVJFCisKKyN1bmRlZiBMSUJESVIKKyNkZWZpbmUgTElCRElSCQkJX25sb3MyX2xpYmRpcgorZXh0ZXJuIGNoYXIgKl9ubG9zMl9saWJkaXI7CisKKyN1bmRlZiBMT0NBTEVESVIKKyNkZWZpbmUgTE9DQUxFRElSCQlfbmxvczJfbG9jYWxlZGlyCitleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKworI3VuZGVmIExPQ0FMRV9BTElBU19QQVRICisjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKK2V4dGVybiBjaGFyICpfbmxvczJfbG9jYWxlYWxpYXNwYXRoOworCisjZW5kaWYKKworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorI2RlZmluZSBzdHJjYXNlY21wIHN0cmljbXAKKyNkZWZpbmUgc3RybmNhc2VjbXAgc3RybmljbXAKKworLyogV2UgaGF2ZSBvdXIgb3duIGdldGVudigpIHdoaWNoIHdvcmtzIGV2ZW4gaWYgbGlicmFyeSBpcyBjb21waWxlZCBhcyBETEwgKi8KKyNkZWZpbmUgZ2V0ZW52IF9ubF9nZXRlbnYKKworLyogT2xkZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dCB1c2VkIC0xIGFzIHRoZSB2YWx1ZSBvZiBMQ19NRVNTQUdFUyAqLworI2RlZmluZSBMQ19NRVNTQUdFU19DT01QQVQgKC0xKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvb3NkZXAuYyBiL2UyZnNwcm9ncy9pbnRsL29zZGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3MjU5OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL29zZGVwLmMKQEAgLTAsMCArMSwyNCBAQAorLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZiBkZWZpbmVkIF9fRU1YX18KKyMgaW5jbHVkZSAib3MyY29tcGF0LmMiCisjZWxzZQorLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLwordHlwZWRlZiBpbnQgZHVtbXk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC1leHAuYyBiL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC1leHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA0ZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcGx1cmFsLWV4cC5jCkBAIC0wLDAgKzEsMTU0IEBACisvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorCisjaWYgKGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fKSBcCisgICAgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisKKy8qIFRoZXNlIHN0cnVjdHMgYXJlIHRoZSBjb25zdGFudCBleHByZXNzaW9uIGZvciB0aGUgZ2VybWFuaWMgcGx1cmFsCisgICBmb3JtIGRldGVybWluYXRpb24uICBJdCByZXByZXNlbnRzIHRoZSBleHByZXNzaW9uICAibiAhPSAxIi4gICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQoreworICAubmFyZ3MgPSAwLAorICAub3BlcmF0aW9uID0gdmFyLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwcmVzc2lvbiBwbG9uZSA9Cit7CisgIC5uYXJncyA9IDAsCisgIC5vcGVyYXRpb24gPSBudW0sCisgIC52YWwgPQorICB7CisgICAgLm51bSA9IDEKKyAgfQorfTsKK3N0cnVjdCBleHByZXNzaW9uIEdFUk1BTklDX1BMVVJBTCA9Cit7CisgIC5uYXJncyA9IDIsCisgIC5vcGVyYXRpb24gPSBub3RfZXF1YWwsCisgIC52YWwgPQorICB7CisgICAgLmFyZ3MgPQorICAgIHsKKyAgICAgIFswXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGx2YXIsCisgICAgICBbMV0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsb25lCisgICAgfQorICB9Cit9OworCisjIGRlZmluZSBJTklUX0dFUk1BTklDX1BMVVJBTCgpCisKKyNlbHNlCisKKy8qIEZvciBjb21waWxlcnMgd2l0aG91dCBzdXBwb3J0IGZvciBJU08gQyA5OSBzdHJ1Y3QvdW5pb24gaW5pdGlhbGl6ZXJzOgorICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGx2YXI7CitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7CitzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUw7CisKK3N0YXRpYyB2b2lkCitpbml0X2dlcm1hbmljX3BsdXJhbCAoKQoreworICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorICAgIHsKKyAgICAgIHBsdmFyLm5hcmdzID0gMDsKKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKworICAgICAgcGxvbmUubmFyZ3MgPSAwOworICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworICAgICAgcGxvbmUudmFsLm51bSA9IDE7CisKKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisgICAgICBHRVJNQU5JQ19QTFVSQUwub3BlcmF0aW9uID0gbm90X2VxdWFsOworICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzBdID0gJnBsdmFyOworICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworICAgIH0KK30KKworIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKSBpbml0X2dlcm1hbmljX3BsdXJhbCAoKQorCisjZW5kaWYKKwordm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK0VYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKGNvbnN0IGNoYXIgKm51bGxlbnRyeSwgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorCQkJICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKK3sKKyAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKyAgICAgIGNvbnN0IGNoYXIgKm5wbHVyYWxzOworCisgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKyAgICAgIG5wbHVyYWxzID0gc3Ryc3RyIChudWxsZW50cnksICJucGx1cmFscz0iKTsKKyAgICAgIGlmIChwbHVyYWwgPT0gTlVMTCB8fCBucGx1cmFscyA9PSBOVUxMKQorCWdvdG8gbm9fcGx1cmFsOworICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmVuZHA7CisJICB1bnNpZ25lZCBsb25nIGludCBuOworCSAgc3RydWN0IHBhcnNlX2FyZ3MgYXJnczsKKworCSAgLyogRmlyc3QgZ2V0IHRoZSBudW1iZXIuICAqLworCSAgbnBsdXJhbHMgKz0gOTsKKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKwkgICAgKytucGx1cmFsczsKKwkgIGlmICghKCpucGx1cmFscyA+PSAnMCcgJiYgKm5wbHVyYWxzIDw9ICc5JykpCisJICAgIGdvdG8gbm9fcGx1cmFsOworI2lmIGRlZmluZWQgSEFWRV9TVFJUT1VMIHx8IGRlZmluZWQgX0xJQkMKKwkgIG4gPSBzdHJ0b3VsIChucGx1cmFscywgJmVuZHAsIDEwKTsKKyNlbHNlCisJICBmb3IgKGVuZHAgPSBucGx1cmFscywgbiA9IDA7ICplbmRwID49ICcwJyAmJiAqZW5kcCA8PSAnOSc7IGVuZHArKykKKwkgICAgbiA9IG4gKiAxMCArICgqZW5kcCAtICcwJyk7CisjZW5kaWYKKwkgIGlmIChucGx1cmFscyA9PSBlbmRwKQorCSAgICBnb3RvIG5vX3BsdXJhbDsKKwkgICpucGx1cmFsc3AgPSBuOworCisJICAvKiBEdWUgdG8gdGhlIHJlc3RyaWN0aW9ucyBiaXNvbiBpbXBvc2VzIG9udG8gdGhlIGludGVyZmFjZSBvZiB0aGUKKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorCSAgICAgcGFzc2VkIHVwIGZyb20gdGhlIHBhcnNlciBpbnRvIHRoZSBzYW1lIHN0cnVjdHVyZSB3aGljaCBhZGRyZXNzCisJICAgICBpcyBwYXNzZWQgZG93biB0byB0aGUgcGFyc2VyLiAgKi8KKwkgIHBsdXJhbCArPSA3OworCSAgYXJncy5jcCA9IHBsdXJhbDsKKwkgIGlmIChQTFVSQUxfUEFSU0UgKCZhcmdzKSAhPSAwKQorCSAgICBnb3RvIG5vX3BsdXJhbDsKKwkgICpwbHVyYWxwID0gYXJncy5yZXM7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKyAgICAgICAgIGZvciBgb25lJywgdGhlIHBsdXJhbCBmb3JtIG90aGVyd2lzZS4gIFllcywgdGhpcyBpcyBhbHNvIHdoYXQKKyAgICAgICAgIEVuZ2xpc2ggaXMgdXNpbmcgc2luY2UgRW5nbGlzaCBpcyBhIEdlcm1hbmljIGxhbmd1YWdlLiAgKi8KKyAgICBub19wbHVyYWw6CisgICAgICBJTklUX0dFUk1BTklDX1BMVVJBTCAoKTsKKyAgICAgICpwbHVyYWxwID0gJkdFUk1BTklDX1BMVVJBTDsKKyAgICAgICpucGx1cmFsc3AgPSAyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC1leHAuaCBiL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC1leHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWUyYzViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcGx1cmFsLWV4cC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiBFeHByZXNzaW9uIHBhcnNpbmcgYW5kIGV2YWx1YXRpb24gZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX1BMVVJBTF9FWFBfSAorI2RlZmluZSBfUExVUkFMX0VYUF9ICisKKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisjZW5kaWYKKworI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisjZW5kaWYKKworCisvKiBUaGlzIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbnMgdG8gZGV0ZXJtaW5lIHRoZQorICAgcGx1cmFsIGZvcm0uICAqLworc3RydWN0IGV4cHJlc3Npb24KK3sKKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBlbnVtIG9wZXJhdG9yCisgIHsKKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisgICAgdmFyLAkJCS8qIFRoZSB2YXJpYWJsZSAibiIuICAqLworICAgIG51bSwJCQkvKiBEZWNpbWFsIG51bWJlci4gICovCisgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKyAgICBsbm90LAkJCS8qIExvZ2ljYWwgTk9ULiAgKi8KKyAgICAvKiBCaW5hcnkgb3BlcmF0b3JzOiAgKi8KKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKyAgICBkaXZpZGUsCQkJLyogRGl2aXNpb24uICAqLworICAgIG1vZHVsZSwJCQkvKiBNb2R1bG8gb3BlcmF0aW9uLiAgKi8KKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKyAgICBtaW51cywJCQkvKiBTdWJ0cmFjdGlvbi4gICovCisgICAgbGVzc190aGFuLAkJCS8qIENvbXBhcmlzb24uICAqLworICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworICAgIGxlc3Nfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKyAgICBncmVhdGVyX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworICAgIG5vdF9lcXVhbCwJCQkvKiBDb21wYXJpc29uIGZvciBpbmVxdWFsaXR5LiAgKi8KKyAgICBsYW5kLAkJCS8qIExvZ2ljYWwgQU5ELiAgKi8KKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisgICAgLyogVGVybmFyeSBvcGVyYXRvcnM6ICAqLworICAgIHFtb3AJCQkvKiBRdWVzdGlvbiBtYXJrIG9wZXJhdG9yLiAgKi8KKyAgfSBvcGVyYXRpb247CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworICAgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOwkvKiBVcCB0byB0aHJlZSBhcmd1bWVudHMuICAqLworICB9IHZhbDsKK307CisKKy8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlciBhbmQgZ2V0CisgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KK3N0cnVjdCBwYXJzZV9hcmdzCit7CisgIGNvbnN0IGNoYXIgKmNwOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmVzOworfTsKKworCisvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGlzIHNvdXJjZSBjb2RlIGlzIHVzZWQKKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisgICAyLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSwKKyAgIDMuIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scy4KKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisgICBiaW5hcnkgaW5jb21wYXRpYmxlIGNoYW5nZXMgaW4gJ3N0cnVjdCBleHByZXNzaW9uJy4gIEZ1cnRoZXJtb3JlLAorICAgMS4gaW4gdGhlIEdOVSBDIExpYnJhcnkgbGlicmFyeSwgdGhlIG5hbWVzIGhhdmUgYSBfXyBwcmVmaXgsCisgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKyAgICAgICAgIG11c3QgZm9sbG93IEFOU0kgQyBhbmQgbm90IHN0YXJ0IHdpdGggX18uCisgICBTbyB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIHRoZSB0aHJlZSBjYXNlcy4gICovCisjaWZkZWYgX0xJQkMKKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBfX2dldHRleHRfZnJlZV9leHAKKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBfX2dldHRleHRwYXJzZQorIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gX19nZXR0ZXh0X2V4dHJhY3RfcGx1cmFsCisjZWxpZiBkZWZpbmVkIChJTl9MSUJJTlRMKQorIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorIyBkZWZpbmUgUExVUkFMX1BBUlNFIGxpYmludGxfZ2V0dGV4dHBhcnNlCisjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgbGliaW50bF9nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbAorIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKyNlbHNlCisjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gZnJlZV9wbHVyYWxfZXhwcmVzc2lvbgorIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisjIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgZ2VybWFuaWNfcGx1cmFsCisjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIGV4dHJhY3RfcGx1cmFsX2V4cHJlc3Npb24KKyNlbmRpZgorCitleHRlcm4gdm9pZCBGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworZXh0ZXJuIGludCBQTFVSQUxfUEFSU0UgKHZvaWQgKmFyZyk7CitleHRlcm4gc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMIGF0dHJpYnV0ZV9oaWRkZW47CitleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisJCQkJICAgICAgIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZiAhZGVmaW5lZCAoX0xJQkMpICYmICFkZWZpbmVkIChJTl9MSUJJTlRMKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBuKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1BMVVJBTF9FWFBfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvcGx1cmFsLmMgYi9lMmZzcHJvZ3MvaW50bC9wbHVyYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUzMDViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcGx1cmFsLmMKQEAgLTAsMCArMSwxNDkwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisgICBieSBHTlUgYmlzb24gMS4zNS4gICovCisKKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworCisjZGVmaW5lIHl5cGFyc2UgX19nZXR0ZXh0cGFyc2UKKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisjZGVmaW5lIHl5ZXJyb3IgX19nZXR0ZXh0ZXJyb3IKKyNkZWZpbmUgeXlsdmFsIF9fZ2V0dGV4dGx2YWwKKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKyNkZWZpbmUgeXlkZWJ1ZyBfX2dldHRleHRkZWJ1ZworI2RlZmluZSB5eW5lcnJzIF9fZ2V0dGV4dG5lcnJzCisjIGRlZmluZQlFUVVPUDIJMjU3CisjIGRlZmluZQlDTVBPUDIJMjU4CisjIGRlZmluZQlBRERPUDIJMjU5CisjIGRlZmluZQlNVUxPUDIJMjYwCisjIGRlZmluZQlOVU1CRVIJMjYxCisKKyNsaW5lIDEgInBsdXJhbC55IgorCisvKiBFeHByZXNzaW9uIHBhcnNpbmcgZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisgICBkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGRlY2xhcmF0aW9uIGluIGJpc29uJ3MKKyAgIHNrZWxldG9uIGZpbGUgY29tZXMgdG9vIGxhdGUuICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPgorICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fCisgI3ByYWdtYSBhbGxvY2EKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorCisvKiBUaGUgbWFpbiBmdW5jdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciBpcyBjYWxsZWQgX19nZXR0ZXh0cGFyc2UsCisgICBidXQgd2Ugd2FudCBpdCB0byBiZSBjYWxsZWQgUExVUkFMX1BBUlNFLiAgKi8KKyNpZm5kZWYgX0xJQkMKKyMgZGVmaW5lIF9fZ2V0dGV4dHBhcnNlIFBMVVJBTF9QQVJTRQorI2VuZGlmCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0JJigoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+Y3AKKyNkZWZpbmUgWVlQQVJTRV9QQVJBTQlhcmcKKworI2xpbmUgNDkgInBsdXJhbC55IgorI2lmbmRlZiBZWVNUWVBFCit0eXBlZGVmIHVuaW9uIHsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworICBlbnVtIG9wZXJhdG9yIG9wOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworfSB5eXN0eXBlOworIyBkZWZpbmUgWVlTVFlQRSB5eXN0eXBlCisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisjbGluZSA1NSAicGx1cmFsLnkiCisKKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCk7CitzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworCisvKiBBbGxvY2F0aW9uIG9mIGV4cHJlc3Npb25zLiAgKi8KKworc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHAgKGludCBuYXJncywgZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKiBjb25zdCAqYXJncykKK3sKKyAgaW50IGk7CisgIHN0cnVjdCBleHByZXNzaW9uICpuZXdwOworCisgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKyAgICAgIGdvdG8gZmFpbDsKKworICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKyAgaWYgKG5ld3AgIT0gTlVMTCkKKyAgICB7CisgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworICAgICAgbmV3cC0+b3BlcmF0aW9uID0gb3A7CisgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKworIGZhaWw6CisgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCit7CisgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCit7CisgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworCisgIGFyZ3NbMF0gPSByaWdodDsKKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKK30KKworc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisKKyAgYXJnc1swXSA9IGxlZnQ7CisgIGFyZ3NbMV0gPSByaWdodDsKKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzMgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpiZXhwLAorCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CisKKyAgYXJnc1swXSA9IGJleHA7CisgIGFyZ3NbMV0gPSB0YnJhbmNoOworICBhcmdzWzJdID0gZmJyYW5jaDsKKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKK30KKworI2lmbmRlZiBZWURFQlVHCisjIGRlZmluZSBZWURFQlVHIDAKKyNlbmRpZgorCisKKworI2RlZmluZQlZWUZJTkFMCQkyNworI2RlZmluZQlZWUZMQUcJCS0zMjc2OAorI2RlZmluZQlZWU5UQkFTRQkxNgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICovCisjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNSwgICAgIDIsCisgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgIDEzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMQorfTsKKworI2lmIFlZREVCVUcKK3N0YXRpYyBjb25zdCBzaG9ydCB5eXByaHNbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgICAyLCAgICAgOCwgICAgMTIsICAgIDE2LCAgICAyMCwgICAgMjQsICAgIDI4LCAgICAzMiwKKyAgICAgIDM1LCAgICAzNywgICAgMzkKK307CitzdGF0aWMgY29uc3Qgc2hvcnQgeXlyaHNbXSA9Cit7CisgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKyAgICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA1LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNiwgICAgMTcsICAgICAwLAorICAgICAgMTcsICAgICA3LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOCwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDksCisgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKyAgICAgIDE3LCAgICAxNSwgICAgIDAKK307CisKKyNlbmRpZgorCisjaWYgWVlERUJVRworLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gKi8KK3N0YXRpYyBjb25zdCBzaG9ydCB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTUwLCAgIDE1OCwgICAxNjIsICAgMTY2LCAgIDE3MCwgICAxNzQsICAgMTc4LCAgIDE4MiwgICAxODYsCisgICAgIDE5MCwgICAxOTQsICAgMTk5Cit9OworI2VuZGlmCisKKworI2lmIChZWURFQlVHKSB8fCBkZWZpbmVkIFlZRVJST1JfVkVSQk9TRQorCisvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwKKyAgIkFERE9QMiIsICJNVUxPUDIiLCAiJyEnIiwgIk5VTUJFUiIsICInOiciLCAiJ24nIiwgIicoJyIsICInKSciLAorICAic3RhcnQiLCAiZXhwIiwgMAorfTsKKyNlbmRpZgorCisvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAqLworc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgMTYsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywKKyAgICAgIDE3LCAgICAxNywgICAgMTcKK307CisKKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworc3RhdGljIGNvbnN0IHNob3J0IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKyAgICAgICAxLCAgICAgMSwgICAgIDMKK307CisKKy8qIFlZREVGQUNUW1NdIC0tIGRlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZSBTIHdoZW4gWVlUQUJMRQorICAgZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybyBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbgorICAgZXJyb3IuICovCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDAsICAgICAwCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPQoreworICAgICAgMjUsICAgICA1Cit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgeXlwYWN0W10gPQoreworICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisgICAgICAtOSwgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksLTMyNzY4LCAgICAyNCwgICAgMzksICAgIDQzLCAgICAxNiwKKyAgICAgIDI2LCAgICAtMywtMzI3NjgsICAgIC05LCAgICAzNCwgICAgMjEsICAgIDUzLC0zMjc2OAorfTsKKworc3RhdGljIGNvbnN0IHNob3J0IHl5cGdvdG9bXSA9Cit7CisgIC0zMjc2OCwgICAgLTEKK307CisKKworI2RlZmluZQlZWUxBU1QJCTUzCisKKworc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9Cit7CisgICAgICAgNiwgICAgIDEsICAgICAyLCAgICAgNywgICAgIDMsICAgICA0LCAgICAxNCwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTMsICAgIDE0LCAgICAyMywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQoreworICAgICAgIDEsICAgIDEwLCAgICAxMSwgICAgIDQsICAgIDEzLCAgICAxNCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAgMCwgICAgMjMsICAgICA3LCAgICAgOCwgICAgIDksICAgIDE1LCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgICA4LCAgICAgOSwgICAgMTIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgICAwCit9OworI2RlZmluZSBZWVBVUkUgMQorCisvKiAtKi1DLSotICBOb3RlIHNvbWUgY29tcGlsZXJzIGNob2tlIG9uIGNvbW1lbnRzIG9uIGAjbGluZScgbGluZXMuICAqLworI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisKKy8qIFNrZWxldG9uIG91dHB1dCBwYXJzZXIgZm9yIGJpc29uLAorCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgY29waWVkIGJ5IEJpc29uIGludG8gYQorICAgQmlzb24gb3V0cHV0IGZpbGUsIHlvdSBtYXkgdXNlIHRoYXQgb3V0cHV0IGZpbGUgd2l0aG91dCByZXN0cmljdGlvbi4KKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgIGluIHZlcnNpb24gMS4yNCBvZiBCaXNvbi4gICovCisKKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKyAgIHRoZSAlc2VtYW50aWNfcGFyc2VyIGRlY2xhcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGdyYW1tYXIuCisgICBJdCB3YXMgd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuIGJ5IHNpbXBsaWZ5aW5nIHRoZSBoYWlyeSBwYXJzZXIKKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjIGVsc2UKKyMgIGlmbmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZiBkZWZpbmVkIChhbGxvY2EpIHx8IGRlZmluZWQgKF9BTExPQ0FfSCkKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZmRlZiBfX0dOVUNfXworIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2FybmluZy4gKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorIyBlbHNlCisjICBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjICBlbmRpZgorIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgbWFsbG9jCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkgKi8KKworCisjaWYgKCEgZGVmaW5lZCAoeXlvdmVyZmxvdykgXAorICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorCSB8fCAoWVlMVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgc2hvcnQgeXlzczsKKyAgWVlTVFlQRSB5eXZzOworIyBpZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxzOworIyBlbmRpZgorfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWCAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGlmIFlZTFNQX05FRURFRAorIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSArIHNpemVvZiAoWVlMVFlQRSkpCVwKKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVgpCisjIGVuZGlmCisKKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiAxIDwgX19HTlVDX18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7CQkJCQlcCisJICByZWdpc3RlciBZWVNJWkVfVCB5eWk7CQlcCisJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisJICAgIChUbylbeXlpXSA9IChGcm9tKVt5eWldOwkJXAorCX0JCQkJCVwKKyAgICAgIHdoaWxlICgwKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisJeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoMCkKKworI2VuZGlmCisKKworI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKF9fU0laRV9UWVBFX18pCisjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjZW5kaWYKKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKSAmJiBkZWZpbmVkIChzaXplX3QpCisjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyNlbmRpZgorI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVuZGlmCisjZW5kaWYKKyNpZiAhIGRlZmluZWQgKFlZU0laRV9UKQorIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkJCS0yCisjZGVmaW5lIFlZRU9GCQkwCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVCAJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0s7CQkJCQkJXAorICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQlcCisgICAgeyAJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKK3doaWxlICgwKQorCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworICAgYXJlIHJ1bikuCisKKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisgICBmaXJzdCB0b2tlbi4gIEJ5IGRlZmF1bHQsIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciByYW5nZXMsIGV4dGVuZAorICAgaXRzIHJhbmdlIHRvIHRoZSBsYXN0IHN5bWJvbC4gICovCisKKyNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKyMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgCVwKKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisgICBDdXJyZW50Lmxhc3RfY29sdW1uID0gUmhzW05dLmxhc3RfY29sdW1uOworI2VuZGlmCisKKworLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCisKKyNpZiBZWVBVUkUKKyMgaWYgWVlMU1BfTkVFREVECisjICBpZmRlZiBZWUxFWF9QQVJBTQorIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MsIFlZTEVYX1BBUkFNKQorIyAgZWxzZQorIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisjICBlbmRpZgorIyBlbHNlIC8qICFZWUxTUF9ORUVERUQgKi8KKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjICBlbHNlCisjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKyMgIGVuZGlmCisjIGVuZGlmIC8qICFZWUxTUF9ORUVERUQgKi8KKyNlbHNlIC8qICFZWVBVUkUgKi8KKyMgZGVmaW5lIFlZTEVYCQkJeXlsZXggKCkKKyNlbmRpZiAvKiAhWVlQVVJFICovCisKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKK30gd2hpbGUgKDApCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLworI2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKworLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorICAgU0laRV9NQVggPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZiBZWU1BWERFUFRIID09IDAKKyMgdW5kZWYgWVlNQVhERVBUSAorI2VuZGlmCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKQorIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAorIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKKyMgICBlbHNlCit5eXN0cmxlbiAoeXlzdHIpCisgICAgIGNvbnN0IGNoYXIgKnl5c3RyOworIyAgIGVuZGlmCit7CisgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3RyOworCisgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBlbHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworc3RhdGljIGNoYXIgKgorIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKK3l5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQorIyAgIGVsc2UKK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorICAgICBjaGFyICp5eWRlc3Q7CisgICAgIGNvbnN0IGNoYXIgKnl5c3JjOworIyAgIGVuZGlmCit7CisgIHJlZ2lzdGVyIGNoYXIgKnl5ZCA9IHl5ZGVzdDsKKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisKKworLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorICAgaW50byB5eXBhcnNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBoYXZlIHR5cGUgdm9pZCAqLgorICAgSXQgc2hvdWxkIGFjdHVhbGx5IHBvaW50IHRvIGFuIG9iamVjdC4KKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisgICB0byB0aGUgcHJvcGVyIHBvaW50ZXIgdHlwZS4gICovCisKKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyB2b2lkICpZWVBBUlNFX1BBUkFNCisjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisjIGVsc2UKKyMgIGRlZmluZSBZWVBBUlNFX1BBUkFNX0FSRyBZWVBBUlNFX1BBUkFNCisjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisjIGVuZGlmCisjZWxzZSAvKiAhWVlQQVJTRV9QQVJBTSAqLworIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKyMgZGVmaW5lIFlZUEFSU0VfUEFSQU1fREVDTAorI2VuZGlmIC8qICFZWVBBUlNFX1BBUkFNICovCisKKy8qIFByZXZlbnQgd2FybmluZyBpZiAtV3N0cmljdC1wcm90b3R5cGVzLiAgKi8KKyNpZmRlZiBfX0dOVUNfXworIyBpZmRlZiBZWVBBUlNFX1BBUkFNCitpbnQgeXlwYXJzZSAodm9pZCAqKTsKKyMgZWxzZQoraW50IHl5cGFyc2UgKHZvaWQpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIFlZX0RFQ0xfVkFSSUFCTEVTIC0tIGRlcGVuZGluZyB3aGV0aGVyIHdlIHVzZSBhIHB1cmUgcGFyc2VyLAorICAgdmFyaWFibGVzIGFyZSBnbG9iYWwsIG9yIGxvY2FsIHRvIFlZUEFSU0UuICAqLworCisjZGVmaW5lIFlZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMJCQlcCisvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCQkJCVwKK2ludCB5eWNoYXI7CQkJCQkJXAorCQkJCQkJCVwKKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gKi8JXAorWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorCQkJCQkJCVwKKy8qIE51bWJlciBvZiBwYXJzZSBlcnJvcnMgc28gZmFyLiAgKi8JCQlcCitpbnQgeXluZXJyczsKKworI2lmIFlZTFNQX05FRURFRAorIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCitZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorCQkJCQkJXAorLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCitZWUxUWVBFIHl5bGxvYzsKKyNlbHNlCisjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKK1lZX0RFQ0xfTk9OX0xTUF9WQVJJQUJMRVMKKyNlbmRpZgorCisKKy8qIElmIG5vbnJlZW50cmFudCwgZ2VuZXJhdGUgdGhlIHZhcmlhYmxlcyBoZXJlLiAqLworCisjaWYgIVlZUFVSRQorWVlfREVDTF9WQVJJQUJMRVMKKyNlbmRpZiAgLyogIVlZUFVSRSAqLworCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorICAgICBZWVBBUlNFX1BBUkFNX0RFQ0wKK3sKKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisjaWYgWVlQVVJFCisgIFlZX0RFQ0xfVkFSSUFCTEVTCisjZW5kaWYgIC8qICFZWVBVUkUgKi8KKworICByZWdpc3RlciBpbnQgeXlzdGF0ZTsKKyAgcmVnaXN0ZXIgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50IHl5ZXJyc3RhdHVzOworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eWNoYXIxID0gMDsKKworICAvKiBUaHJlZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICBgeXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLAorICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorICAgICBgeXlscyc6IHJlbGF0ZWQgdG8gbG9jYXRpb25zLgorCisgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisgIHNob3J0CXl5c3NhW1lZSU5JVERFUFRIXTsKKyAgc2hvcnQgKnl5c3MgPSB5eXNzYTsKKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5eXZzID0geXl2c2E7CisgIHJlZ2lzdGVyIFlZU1RZUEUgKnl5dnNwOworCisjaWYgWVlMU1BfTkVFREVECisgIC8qIFRoZSBsb2NhdGlvbiBzdGFjay4gICovCisgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworICBZWUxUWVBFICp5eWxzID0geXlsc2E7CisgIFlZTFRZUEUgKnl5bHNwOworI2VuZGlmCisKKyNpZiBZWUxTUF9ORUVERUQKKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKyNlbHNlCisjIGRlZmluZSBZWVBPUFNUQUNLICAgKHl5dnNwLS0sIHl5c3NwLS0pCisjZW5kaWYKKworICBZWVNJWkVfVCB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKyNpZiBZWUxTUF9ORUVERUQKKyAgWVlMVFlQRSB5eWxvYzsKKyNlbmRpZgorCisgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisgICAgIHJ1bGUuICovCisgIGludCB5eWxlbjsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisjaWYgWVlMU1BfTkVFREVECisgIHl5bHNwID0geXlsczsKKyNlbmRpZgorICBnb3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuIHNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuCisgICAgICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJc2hvcnQgKnl5c3MxID0geXlzczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgKi8KKyMgaWYgWVlMU1BfTkVFREVECisJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworCS8qIFRoaXMgdXNlZCB0byBiZSBhIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywKKwkgICBidXQgdGhhdCBtaWdodCBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisJeXlscyA9IHl5bHMxOworIyBlbHNlCisJeXlvdmVyZmxvdyAoInBhcnNlciBzdGFjayBvdmVyZmxvdyIsCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5c3RhY2tzaXplKTsKKyMgZW5kaWYKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eW92ZXJmbG93bGFiOworIyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+PSBZWU1BWERFUFRIKQorCWdvdG8geXlvdmVyZmxvd2xhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoeXlzdGFja3NpemUgPiBZWU1BWERFUFRIKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXNob3J0ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlvdmVyZmxvd2xhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKyMgaWYgWVlMU1BfTkVFREVECisJWVlTVEFDS19SRUxPQ0FURSAoeXlscyk7CisjIGVuZGlmCisjIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworI2lmIFlZTFNQX05FRURFRAorICAgICAgeXlsc3AgPSB5eWxzICsgeXlzaXplIC0gMTsKKyNlbmRpZgorCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisgICAgICBpZiAoeXlzc3AgPj0geXlzcyArIHl5c3RhY2tzaXplIC0gMSkKKwlZWUFCT1JUOworICAgIH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworCisgIGdvdG8geXliYWNrdXA7CisKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLworeXliYWNrdXA6CisKKy8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiB5eXJlc3VtZTogKi8KKworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gWVlGTEFHKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogeXljaGFyIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GCisgICAgIG9yIGEgdmFsaWQgdG9rZW4gaW4gZXh0ZXJuYWwgZm9ybS4gICovCisKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7CisgICAgfQorCisgIC8qIENvbnZlcnQgdG9rZW4gdG8gaW50ZXJuYWwgZm9ybSAoaW4geXljaGFyMSkgZm9yIGluZGV4aW5nIHRhYmxlcyB3aXRoICovCisKKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisgICAgeworICAgICAgeXljaGFyMSA9IDA7CisgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisKKyNpZiBZWURFQlVHCisgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKwl3aGljaCBhcmUgZGVmaW5lZCBvbmx5IGlmIGBZWURFQlVHJyBpcyBzZXQuICAqLworICAgICAgaWYgKHl5ZGVidWcpCisJeworCSAgWVlGUFJJTlRGIChzdGRlcnIsICJOZXh0IHRva2VuIGlzICVkICglcyIsCisJCSAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKTsKKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisJICAgICBtZWFuaW5nIG9mIGEgdG9rZW4sIGZvciBmdXJ0aGVyIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyMgaWZkZWYgWVlQUklOVAorCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisjIGVuZGlmCisJICBZWUZQUklOVEYgKHN0ZGVyciwgIilcbiIpOworCX0KKyNlbmRpZgorICAgIH0KKworICB5eW4gKz0geXljaGFyMTsKKyAgaWYgKHl5biA8IDAgfHwgeXluID4gWVlMQVNUIHx8IHl5Y2hlY2tbeXluXSAhPSB5eWNoYXIxKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIHl5biA9IHl5dGFibGVbeXluXTsKKworICAvKiB5eW4gaXMgd2hhdCB0byBkbyBmb3IgdGhpcyB0b2tlbiB0eXBlIGluIHRoaXMgc3RhdGUuCisgICAgIE5lZ2F0aXZlID0+IHJlZHVjZSwgLXl5biBpcyBydWxlIG51bWJlci4KKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisgICAgICAgTmV3IHN0YXRlIGlzIGZpbmFsIHN0YXRlID0+IGRvbid0IGJvdGhlciB0byBzaGlmdCwKKyAgICAgICBqdXN0IHJldHVybiBzdWNjZXNzLgorICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisKKyAgaWYgKHl5biA8IDApCisgICAgeworICAgICAgaWYgKHl5biA9PSBZWUZMQUcpCisJZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKyAgZWxzZSBpZiAoeXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKworICBpZiAoeXluID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIHRva2VuICVkICglcyksICIsCisJICAgICAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisKKyAgLyogRGlzY2FyZCB0aGUgdG9rZW4gYmVpbmcgc2hpZnRlZCB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KKyAgaWYgKHl5Y2hhciAhPSBZWUVPRikKKyAgICB5eWNoYXIgPSBZWUVNUFRZOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisgICAgIHRoZSBsb29rYWhlYWQgdG9rZW4uICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKyNpZiBZWUxTUF9ORUVERUQKKyAgLyogU2ltaWxhcmx5IGZvciB0aGUgZGVmYXVsdCBsb2NhdGlvbi4gIExldCB0aGUgdXNlciBydW4gYWRkaXRpb25hbAorICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworICB5eWxvYyA9IHl5bHNwWzEteXlsZW5dOworICBZWUxMT0NfREVGQVVMVCAoeXlsb2MsICh5eWxzcCAtIHl5bGVuKSwgeXlsZW4pOworI2VuZGlmCisKKyNpZiBZWURFQlVHCisgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKyAgICAgYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgaW50IHl5aTsKKworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisJCSB5eW4sIHl5cmxpbmVbeXluXSk7CisKKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworICAgICAgZm9yICh5eWkgPSB5eXByaHNbeXluXTsgeXlyaHNbeXlpXSA+IDA7IHl5aSsrKQorCVlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZVt5eXJoc1t5eWldXSk7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKyAgICB9CisjZW5kaWYKKworICBzd2l0Y2ggKHl5bikgeworCitjYXNlIDE6CisjbGluZSAxNTEgInBsdXJhbC55IgoreworCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisJICAgICAgWVlBQk9SVDsKKwkgICAgKChzdHJ1Y3QgcGFyc2VfYXJncyAqKSBhcmcpLT5yZXMgPSB5eXZzcFswXS5leHA7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDI6CisjbGluZSAxNTkgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzMgKHFtb3AsIHl5dnNwWy00XS5leHAsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDM6CisjbGluZSAxNjMgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKGxvciwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgNDoKKyNsaW5lIDE2NyAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobGFuZCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgNToKKyNsaW5lIDE3MSAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSA2OgorI2xpbmUgMTc1ICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisJICB9CisgICAgYnJlYWs7CitjYXNlIDc6CisjbGluZSAxNzkgInBsdXJhbC55IgoreworCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgODoKKyNsaW5lIDE4MyAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSA5OgorI2xpbmUgMTg3ICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8xIChsbm90LCB5eXZzcFswXS5leHApOworCSAgfQorICAgIGJyZWFrOworY2FzZSAxMDoKKyNsaW5lIDE5MSAicGx1cmFsLnkiCit7CisJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMCAodmFyKTsKKwkgIH0KKyAgICBicmVhazsKK2Nhc2UgMTE6CisjbGluZSAxOTUgInBsdXJhbC55IgoreworCSAgICBpZiAoKHl5dmFsLmV4cCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisJICB9CisgICAgYnJlYWs7CitjYXNlIDEyOgorI2xpbmUgMjAwICJwbHVyYWwueSIKK3sKKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKwkgIH0KKyAgICBicmVhazsKK30KKworI2xpbmUgNzA1ICIvdXNyL2xvY2FsL3NoYXJlL2Jpc29uL2Jpc29uLnNpbXBsZSIKKworCisgIHl5dnNwIC09IHl5bGVuOworICB5eXNzcCAtPSB5eWxlbjsKKyNpZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AgLT0geXlsZW47CisjZW5kaWYKKworI2lmIFlZREVCVUcKKyAgaWYgKHl5ZGVidWcpCisgICAgeworICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisgICorK3l5dnNwID0geXl2YWw7CisjaWYgWVlMU1BfTkVFREVECisgICorK3l5bHNwID0geXlsb2M7CisjZW5kaWYKKworICAvKiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UQkFTRV0gKyAqeXlzc3A7CisgIGlmICh5eXN0YXRlID49IDAgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRCQVNFXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgICAgICBpZiAoeXluID4gWVlGTEFHICYmIHl5biA8IFlZTEFTVCkKKwl7CisJICBZWVNJWkVfVCB5eXNpemUgPSAwOworCSAgY2hhciAqeXltc2c7CisJICBpbnQgeXl4LCB5eWNvdW50OworCisJICB5eWNvdW50ID0gMDsKKwkgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgICAgIFlZQ0hFQ0suICAqLworCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsgeXl4KyspCisJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorCSAgICAgIHl5c2l6ZSArPSB5eXN0cmxlbiAoeXl0bmFtZVt5eXhdKSArIDE1LCB5eWNvdW50Kys7CisJICB5eXNpemUgKz0geXlzdHJsZW4gKCJwYXJzZSBlcnJvciwgdW5leHBlY3RlZCAiKSArIDE7CisJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKwkgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlzaXplKTsKKwkgIGlmICh5eW1zZyAhPSAwKQorCSAgICB7CisJICAgICAgY2hhciAqeXlwID0geXlzdHBjcHkgKHl5bXNnLCAicGFyc2UgZXJyb3IsIHVuZXhwZWN0ZWQgIik7CisJICAgICAgeXlwID0geXlzdHBjcHkgKHl5cCwgeXl0bmFtZVtZWVRSQU5TTEFURSAoeXljaGFyKV0pOworCisJICAgICAgaWYgKHl5Y291bnQgPCA1KQorCQl7CisJCSAgeXljb3VudCA9IDA7CisJCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7CisJCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7CisJCSAgICAgICB5eXgrKykKKwkJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorCQkgICAgICB7CisJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5cSk7CisJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW3l5eF0pOworCQkJeXljb3VudCsrOworCQkgICAgICB9CisJCX0KKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisJICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeXllcnJvciAoInBhcnNlIGVycm9yOyBhbHNvIHZpcnR1YWwgbWVtb3J5IGV4aGF1c3RlZCIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBkZWZpbmVkIChZWUVSUk9SX1ZFUkJPU0UpICovCisJeXllcnJvciAoInBhcnNlIGVycm9yIik7CisgICAgfQorICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYjEgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgYW4gYWN0aW9uIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICAvKiByZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQgKi8KKyAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJWVlBQk9SVDsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkRpc2NhcmRpbmcgdG9rZW4gJWQgKCVzKS5cbiIsCisJCSAgeXljaGFyLCB5eXRuYW1lW3l5Y2hhcjFdKSk7CisgICAgICB5eWNoYXIgPSBZWUVNUFRZOworICAgIH0KKworICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworCisgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworCisgIGdvdG8geXllcnJoYW5kbGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorfCBlcnJvciB0b2tlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJkZWZhdWx0OgorI2lmIDAKKyAgLyogVGhpcyBpcyB3cm9uZzsgb25seSBzdGF0ZXMgdGhhdCBleHBsaWNpdGx5IHdhbnQgZXJyb3IgdG9rZW5zCisgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKworICAvKiBJZiBpdHMgZGVmYXVsdCBpcyB0byBhY2NlcHQgYW55IHRva2VuLCBvay4gIE90aGVyd2lzZSBwb3AgaXQuICAqLworICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5bikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycnBvcCAtLSBwb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSB8Cit8IGVycm9yIHRva2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJwb3A6CisgIGlmICh5eXNzcCA9PSB5eXNzKQorICAgIFlZQUJPUlQ7CisgIHl5dnNwLS07CisgIHl5c3RhdGUgPSAqLS15eXNzcDsKKyNpZiBZWUxTUF9ORUVERUQKKyAgeXlsc3AtLTsKKyNlbmRpZgorCisjaWYgWVlERUJVRworICBpZiAoeXlkZWJ1ZykKKyAgICB7CisgICAgICBzaG9ydCAqeXlzc3AxID0geXlzcyAtIDE7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIkVycm9yOiBzdGF0ZSBzdGFjayBub3ciKTsKKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmhhbmRsZS4gIHwKK2AtLS0tLS0tLS0tLS0tLSovCit5eWVycmhhbmRsZToKKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZRkxBRykKKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKworICB5eW4gKz0gWVlURVJST1I7CisgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisgICAgZ290byB5eWVycmRlZmF1bHQ7CisKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXluIDwgMCkKKyAgICB7CisgICAgICBpZiAoeXluID09IFlZRkxBRykKKwlnb3RvIHl5ZXJycG9wOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7CisgICAgfQorICBlbHNlIGlmICh5eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJycG9wOworCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIikpOworCisgICorK3l5dnNwID0geXlsdmFsOworI2lmIFlZTFNQX05FRURFRAorICAqKyt5eWxzcCA9IHl5bGxvYzsKKyNlbmRpZgorCisgIHl5c3RhdGUgPSB5eW47CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW92ZXJmbG93YWIgLS0gcGFyc2VyIG92ZXJmbG93IGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5b3ZlcmZsb3dsYWI6CisgIHl5ZXJyb3IgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworCit5eXJldHVybjoKKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisgIHJldHVybiB5eXJlc3VsdDsKK30KKyNsaW5lIDIwNSAicGx1cmFsLnkiCisKKwordm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK0ZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKK3sKKyAgaWYgKGV4cCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBIYW5kbGUgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgKi8KKyAgc3dpdGNoIChleHAtPm5hcmdzKQorICAgIHsKKyAgICBjYXNlIDM6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMl0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDI6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMV0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBjYXNlIDE6CisgICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMF0pOworICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgIGZyZWUgKGV4cCk7Cit9CisKKworc3RhdGljIGludAoreXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKQoreworICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKyAgaW50IHJlc3VsdDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoZXhwWzBdID09ICdcMCcpCisJeworCSAgKnBleHAgPSBleHA7CisJICByZXR1cm4gWVlFT0Y7CisJfQorCisgICAgICBpZiAoZXhwWzBdICE9ICcgJyAmJiBleHBbMF0gIT0gJ1x0JykKKwlicmVhazsKKworICAgICAgKytleHA7CisgICAgfQorCisgIHJlc3VsdCA9ICpleHArKzsKKyAgc3dpdGNoIChyZXN1bHQpCisgICAgeworICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICB7CisJdW5zaWduZWQgbG9uZyBpbnQgbiA9IHJlc3VsdCAtICcwJzsKKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorCSAgeworCSAgICBuICo9IDEwOworCSAgICBuICs9IGV4cFswXSAtICcwJzsKKwkgICAgKytleHA7CisJICB9CisJbHZhbC0+bnVtID0gbjsKKwlyZXN1bHQgPSBOVU1CRVI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJz0nOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IGVxdWFsOworCSAgcmVzdWx0ID0gRVFVT1AyOworCX0KKyAgICAgIGVsc2UKKwlyZXN1bHQgPSBZWUVSUkNPREU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyEnOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IG5vdF9lcXVhbDsKKwkgIHJlc3VsdCA9IEVRVU9QMjsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyYnOgorICAgIGNhc2UgJ3wnOgorICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisJKytleHA7CisgICAgICBlbHNlCisJcmVzdWx0ID0gWVlFUlJDT0RFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc8JzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBsZXNzX29yX2VxdWFsOworCX0KKyAgICAgIGVsc2UKKwlsdmFsLT5vcCA9IGxlc3NfdGhhbjsKKyAgICAgIHJlc3VsdCA9IENNUE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnPic6CisgICAgICBpZiAoZXhwWzBdID09ICc9JykKKwl7CisJICArK2V4cDsKKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKwl9CisgICAgICBlbHNlCisJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisgICAgICByZXN1bHQgPSBDTVBPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJyonOgorICAgICAgbHZhbC0+b3AgPSBtdWx0OworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcvJzoKKyAgICAgIGx2YWwtPm9wID0gZGl2aWRlOworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICclJzoKKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworICAgICAgcmVzdWx0ID0gTVVMT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcrJzoKKyAgICAgIGx2YWwtPm9wID0gcGx1czsKKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnLSc6CisgICAgICBsdmFsLT5vcCA9IG1pbnVzOworICAgICAgcmVzdWx0ID0gQURET1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICduJzoKKyAgICBjYXNlICc/JzoKKyAgICBjYXNlICc6JzoKKyAgICBjYXNlICcoJzoKKyAgICBjYXNlICcpJzoKKyAgICAgIC8qIE5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc7JzoKKyAgICBjYXNlICdcbic6CisgICAgY2FzZSAnXDAnOgorICAgICAgLyogQmUgc2FmZSBhbmQgbGV0IHRoZSB1c2VyIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gICovCisgICAgICAtLWV4cDsKKyAgICAgIHJlc3VsdCA9IFlZRU9GOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0ID0gWVlFUlJDT0RFOworI2lmIFlZREVCVUcgIT0gMAorICAgICAgLS1leHA7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIH0KKworICAqcGV4cCA9IGV4cDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkCit5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCit7CisgIC8qIERvIG5vdGhpbmcuICBXZSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBoZXJlLiAgKi8KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC55IGIvZTJmc3Byb2dzL2ludGwvcGx1cmFsLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzM2JkNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL3BsdXJhbC55CkBAIC0wLDAgKzEsMzgxIEBACisleworLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisvKiBUaGUgYmlzb24gZ2VuZXJhdGVkIHBhcnNlciB1c2VzIGFsbG9jYS4gIEFJWCAzIGZvcmNlcyB1cyB0byBwdXQgdGhpcworICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisgICBza2VsZXRvbiBmaWxlIGNvbWVzIHRvbyBsYXRlLiAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4KKyAgIGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZSBhcmJpdHJhcnkgc3lzdGVtIGhlYWRlcnMuICAqLworI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworICNwcmFnbWEgYWxsb2NhCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKworLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorICAgYnV0IHdlIHdhbnQgaXQgdG8gYmUgY2FsbGVkIFBMVVJBTF9QQVJTRS4gICovCisjaWZuZGVmIF9MSUJDCisjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKyNlbmRpZgorCisjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0JYXJnCislfQorJXB1cmVfcGFyc2VyCislZXhwZWN0IDcKKworJXVuaW9uIHsKKyAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOworICBlbnVtIG9wZXJhdG9yIG9wOworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworfQorCisleworLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisKKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQoreworICBpbnQgaTsKKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisKKyAgLyogSWYgYW55IG9mIHRoZSBhcmd1bWVudCBjb3VsZCBub3QgYmUgbWFsbG9jJ2VkLCBqdXN0IHJldHVybiBOVUxMLiAgKi8KKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorICAgICAgZ290byBmYWlsOworCisgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworICBuZXdwID0gKHN0cnVjdCBleHByZXNzaW9uICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOworICBpZiAobmV3cCAhPSBOVUxMKQorICAgIHsKKyAgICAgIG5ld3AtPm5hcmdzID0gbmFyZ3M7CisgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisJbmV3cC0+dmFsLmFyZ3NbaV0gPSBhcmdzW2ldOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorCisgZmFpbDoKKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKyAgICBGUkVFX0VYUFJFU1NJT04gKGFyZ3NbaV0pOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMCAoZW51bSBvcGVyYXRvciBvcCkKK3sKKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCituZXdfZXhwXzEgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisKKyAgYXJnc1swXSA9IHJpZ2h0OworICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorbmV3X2V4cF8yIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqbGVmdCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKworICBhcmdzWzBdID0gbGVmdDsKKyAgYXJnc1sxXSA9IHJpZ2h0OworICByZXR1cm4gbmV3X2V4cCAoMiwgb3AsIGFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKworICBhcmdzWzBdID0gYmV4cDsKKyAgYXJnc1sxXSA9IHRicmFuY2g7CisgIGFyZ3NbMl0gPSBmYnJhbmNoOworICByZXR1cm4gbmV3X2V4cCAoMywgb3AsIGFyZ3MpOworfQorCislfQorCisvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorICAgcHJlY2VkZW5jZSBvcmRlciBhcyBpbiBDLiAgU2VlIFtIYXJiaXNvbiwgU3RlZWxlOiBDLCBBIFJlZmVyZW5jZSBNYW51YWxdLgorICAgVGhlcmUgaXMgbm8gdW5hcnkgbWludXMgYW5kIG5vIGJpdHdpc2Ugb3BlcmF0b3JzLgorICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKyAgIHRva2VuLCB0byBzYXZlIHNwYWNlIGluIHRoZSBhcnJheSBnZW5lcmF0ZWQgYnkgYmlzb24uICAqLworJXJpZ2h0ICc/JwkJLyogICA/CQkqLworJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworJWxlZnQgJyYnCQkvKiAgICYmCQkqLworJWxlZnQgRVFVT1AyCQkvKiAgID09ICE9CSovCislbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCislbGVmdCBBRERPUDIJCS8qICAgKyAtCSovCislbGVmdCBNVUxPUDIJCS8qICAgKiAvICUJKi8KKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKworJXRva2VuIDxvcD4gRVFVT1AyIENNUE9QMiBBRERPUDIgTVVMT1AyCisldG9rZW4gPG51bT4gTlVNQkVSCisldHlwZSA8ZXhwPiBleHAKKworJSUKKworc3RhcnQ6CSAgZXhwCisJICB7CisJICAgIGlmICgkMSA9PSBOVUxMKQorCSAgICAgIFlZQUJPUlQ7CisJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisJICB9CisJOworCitleHA6CSAgZXhwICc/JyBleHAgJzonIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisJICB9CisJfCBleHAgJ3wnIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAobG9yLCAkMSwgJDMpOworCSAgfQorCXwgZXhwICcmJyBleHAKKwkgIHsKKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxhbmQsICQxLCAkMyk7CisJICB9CisJfCBleHAgRVFVT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgQ01QT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgQURET1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCBleHAgTVVMT1AyIGV4cAorCSAgeworCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisJICB9CisJfCAnIScgZXhwCisJICB7CisJICAgICQkID0gbmV3X2V4cF8xIChsbm90LCAkMik7CisJICB9CisJfCAnbicKKwkgIHsKKwkgICAgJCQgPSBuZXdfZXhwXzAgKHZhcik7CisJICB9CisJfCBOVU1CRVIKKwkgIHsKKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKwkgICAgICAkJC0+dmFsLm51bSA9ICQxOworCSAgfQorCXwgJygnIGV4cCAnKScKKwkgIHsKKwkgICAgJCQgPSAkMjsKKwkgIH0KKwk7CisKKyUlCisKK3ZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCit7CisgIGlmIChleHAgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisgIHN3aXRjaCAoZXhwLT5uYXJncykKKyAgICB7CisgICAgY2FzZSAzOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzJdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAyOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzFdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSAxOgorICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzBdKTsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICBmcmVlIChleHApOworfQorCisKK3N0YXRpYyBpbnQKK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKK3sKKyAgY29uc3QgY2hhciAqZXhwID0gKnBleHA7CisgIGludCByZXN1bHQ7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGV4cFswXSA9PSAnXDAnKQorCXsKKwkgICpwZXhwID0gZXhwOworCSAgcmV0dXJuIFlZRU9GOworCX0KKworICAgICAgaWYgKGV4cFswXSAhPSAnICcgJiYgZXhwWzBdICE9ICdcdCcpCisJYnJlYWs7CisKKyAgICAgICsrZXhwOworICAgIH0KKworICByZXN1bHQgPSAqZXhwKys7CisgIHN3aXRjaCAocmVzdWx0KQorICAgIHsKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorICAgICAgeworCXVuc2lnbmVkIGxvbmcgaW50IG4gPSByZXN1bHQgLSAnMCc7CisJd2hpbGUgKGV4cFswXSA+PSAnMCcgJiYgZXhwWzBdIDw9ICc5JykKKwkgIHsKKwkgICAgbiAqPSAxMDsKKwkgICAgbiArPSBleHBbMF0gLSAnMCc7CisJICAgICsrZXhwOworCSAgfQorCWx2YWwtPm51bSA9IG47CisJcmVzdWx0ID0gTlVNQkVSOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICc9JzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBlcXVhbDsKKwkgIHJlc3VsdCA9IEVRVU9QMjsKKwl9CisgICAgICBlbHNlCisJcmVzdWx0ID0gWVlFUlJDT0RFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICchJzoKKyAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorCXsKKwkgICsrZXhwOworCSAgbHZhbC0+b3AgPSBub3RfZXF1YWw7CisJICByZXN1bHQgPSBFUVVPUDI7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcmJzoKKyAgICBjYXNlICd8JzoKKyAgICAgIGlmIChleHBbMF0gPT0gcmVzdWx0KQorCSsrZXhwOworICAgICAgZWxzZQorCXJlc3VsdCA9IFlZRVJSQ09ERTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnPCc6CisgICAgICBpZiAoZXhwWzBdID09ICc9JykKKwl7CisJICArK2V4cDsKKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKwl9CisgICAgICBlbHNlCisJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisgICAgICByZXN1bHQgPSBDTVBPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJz4nOgorICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisJeworCSAgKytleHA7CisJICBsdmFsLT5vcCA9IGdyZWF0ZXJfb3JfZXF1YWw7CisJfQorICAgICAgZWxzZQorCWx2YWwtPm9wID0gZ3JlYXRlcl90aGFuOworICAgICAgcmVzdWx0ID0gQ01QT1AyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcqJzoKKyAgICAgIGx2YWwtPm9wID0gbXVsdDsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnLyc6CisgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnJSc6CisgICAgICBsdmFsLT5vcCA9IG1vZHVsZTsKKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnKyc6CisgICAgICBsdmFsLT5vcCA9IHBsdXM7CisgICAgICByZXN1bHQgPSBBRERPUDI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJy0nOgorICAgICAgbHZhbC0+b3AgPSBtaW51czsKKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnbic6CisgICAgY2FzZSAnPyc6CisgICAgY2FzZSAnOic6CisgICAgY2FzZSAnKCc6CisgICAgY2FzZSAnKSc6CisgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnOyc6CisgICAgY2FzZSAnXG4nOgorICAgIGNhc2UgJ1wwJzoKKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworICAgICAgLS1leHA7CisgICAgICByZXN1bHQgPSBZWUVPRjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKyNpZiBZWURFQlVHICE9IDAKKyAgICAgIC0tZXhwOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICB9CisKKyAgKnBleHAgPSBleHA7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZAoreXllcnJvciAoY29uc3QgY2hhciAqc3RyKQoreworICAvKiBEbyBub3RoaW5nLiAgV2UgZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgaGVyZS4gICovCit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9wcmludGYtYXJncy5jIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLWFyZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmYzMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLWFyZ3MuYwpAQCAtMCwwICsxLDExOSBAQAorLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZW5kaWYKK2ludAorcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCit7CisgIHNpemVfdCBpOworICBhcmd1bWVudCAqYXA7CisKKyAgZm9yIChpID0gMCwgYXAgPSAmYS0+YXJnWzBdOyBpIDwgYS0+Y291bnQ7IGkrKywgYXArKykKKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorICAgICAgeworICAgICAgY2FzZSBUWVBFX1NDSEFSOgorCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX1VDSEFSOgorCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9JTlQ6CisJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfVUlOVDoKKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKwlhcC0+YS5hX2xvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50KTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisJYXAtPmEuYV91bG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOworCWJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFRZUEVfRE9VQkxFOgorCWFwLT5hLmFfZG91YmxlID0gdmFfYXJnIChhcmdzLCBkb3VibGUpOworCWJyZWFrOworI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKyAgICAgIGNhc2UgVFlQRV9MT05HRE9VQkxFOgorCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworCWJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIFRZUEVfQ0hBUjoKKwlhcC0+YS5hX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9XSU5UX1QKKyAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisJYXAtPmEuYV93aWRlX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIHdpbnRfdCk7CisJYnJlYWs7CisjZW5kaWYKKyAgICAgIGNhc2UgVFlQRV9TVFJJTkc6CisJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9XQ0hBUl9UCisgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisJYXAtPmEuYV93aWRlX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3Qgd2NoYXJfdCAqKTsKKwlicmVhazsKKyNlbmRpZgorICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisJYXAtPmEuYV9wb2ludGVyID0gdmFfYXJnIChhcmdzLCB2b2lkICopOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI6CisJYXAtPmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaWduZWQgY2hhciAqKTsKKwlicmVhazsKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorCWFwLT5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgc2hvcnQgKik7CisJYnJlYWs7CisgICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisJYXAtPmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgaW50ICopOworCWJyZWFrOworICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKwlhcC0+YS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQgKik7CisJYnJlYWs7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOgorCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKwlicmVhazsKKyNlbmRpZgorICAgICAgZGVmYXVsdDoKKwkvKiBVbmtub3duIHR5cGUuICAqLworCXJldHVybiAtMTsKKyAgICAgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9wcmludGYtYXJncy5oIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLWFyZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFlNjRjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLWFyZ3MuaApAQCAtMCwwICsxLDEzNyBAQAorLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorI2RlZmluZSBfUFJJTlRGX0FSR1NfSAorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IHdjaGFyX3QuICAqLworI2lmZGVmIEhBVkVfV0NIQVJfVAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisvKiBHZXQgd2ludF90LiAgKi8KKyNpZmRlZiBIQVZFX1dJTlRfVAorIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIEdldCB2YV9saXN0LiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworCisvKiBBcmd1bWVudCB0eXBlcyAqLwordHlwZWRlZiBlbnVtCit7CisgIFRZUEVfTk9ORSwKKyAgVFlQRV9TQ0hBUiwKKyAgVFlQRV9VQ0hBUiwKKyAgVFlQRV9TSE9SVCwKKyAgVFlQRV9VU0hPUlQsCisgIFRZUEVfSU5ULAorICBUWVBFX1VJTlQsCisgIFRZUEVfTE9OR0lOVCwKKyAgVFlQRV9VTE9OR0lOVCwKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICBUWVBFX0xPTkdMT05HSU5ULAorICBUWVBFX1VMT05HTE9OR0lOVCwKKyNlbmRpZgorICBUWVBFX0RPVUJMRSwKKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisgIFRZUEVfTE9OR0RPVUJMRSwKKyNlbmRpZgorICBUWVBFX0NIQVIsCisjaWZkZWYgSEFWRV9XSU5UX1QKKyAgVFlQRV9XSURFX0NIQVIsCisjZW5kaWYKKyAgVFlQRV9TVFJJTkcsCisjaWZkZWYgSEFWRV9XQ0hBUl9UCisgIFRZUEVfV0lERV9TVFJJTkcsCisjZW5kaWYKKyAgVFlQRV9QT0lOVEVSLAorICBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVIsCisgIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUiwKKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKyAgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVIKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKyNlbmRpZgorfSBhcmdfdHlwZTsKKworLyogUG9seW1vcnBoaWMgYXJndW1lbnQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGFyZ190eXBlIHR5cGU7CisgIHVuaW9uCisgIHsKKyAgICBzaWduZWQgY2hhcgkJCWFfc2NoYXI7CisgICAgdW5zaWduZWQgY2hhcgkJYV91Y2hhcjsKKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQJCWFfdXNob3J0OworICAgIGludAkJCQlhX2ludDsKKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKyAgICBsb25nIGludAkJCWFfbG9uZ2ludDsKKyAgICB1bnNpZ25lZCBsb25nIGludAkJYV91bG9uZ2ludDsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGxvbmcgbG9uZyBpbnQJCWFfbG9uZ2xvbmdpbnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGludAlhX3Vsb25nbG9uZ2ludDsKKyNlbmRpZgorICAgIGZsb2F0CQkJYV9mbG9hdDsKKyAgICBkb3VibGUJCQlhX2RvdWJsZTsKKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisgICAgbG9uZyBkb3VibGUJCQlhX2xvbmdkb3VibGU7CisjZW5kaWYKKyAgICBpbnQJCQkJYV9jaGFyOworI2lmZGVmIEhBVkVfV0lOVF9UCisgICAgd2ludF90CQkJYV93aWRlX2NoYXI7CisjZW5kaWYKKyAgICBjb25zdCBjaGFyKgkJCWFfc3RyaW5nOworI2lmZGVmIEhBVkVfV0NIQVJfVAorICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworI2VuZGlmCisgICAgdm9pZCoJCQlhX3BvaW50ZXI7CisgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworICAgIHNob3J0ICoJCQlhX2NvdW50X3Nob3J0X3BvaW50ZXI7CisgICAgaW50ICoJCQlhX2NvdW50X2ludF9wb2ludGVyOworICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGxvbmcgbG9uZyBpbnQgKgkJYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyOworI2VuZGlmCisgIH0KKyAgYTsKK30KK2FyZ3VtZW50OworCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgY291bnQ7CisgIGFyZ3VtZW50ICphcmc7Cit9Cithcmd1bWVudHM7CisKKworLyogRmV0Y2ggdGhlIGFyZ3VtZW50cywgcHV0dGluZyB0aGVtIGludG8gYS4gKi8KKyNpZmRlZiBTVEFUSUMKK1NUQVRJQworI2Vsc2UKK2V4dGVybgorI2VuZGlmCitpbnQgcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpOworCisjZW5kaWYgLyogX1BSSU5URl9BUkdTX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3ByaW50Zi1wYXJzZS5jIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2ZGVkYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL3ByaW50Zi1wYXJzZS5jCkBAIC0wLDAgKzEsNTM1IEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworLyogU3BlY2lmaWNhdGlvbi4gICovCisjaWYgV0lERV9DSEFSX1ZFUlNJT04KKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorI2Vsc2UKKyMgaW5jbHVkZSAicHJpbnRmLXBhcnNlLmgiCisjZW5kaWYKKworLyogR2V0IHNpemVfdCwgTlVMTC4gICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEdldCBpbnRtYXhfdC4gICovCisjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworLyogbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLiAgKi8KKyNpbmNsdWRlICJ4c2l6ZS5oIgorCisjaWYgV0lERV9DSEFSX1ZFUlNJT04KKyMgZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCisjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorIyBkZWZpbmUgRElSRUNUSVZFIHdjaGFyX3RfZGlyZWN0aXZlCisjIGRlZmluZSBESVJFQ1RJVkVTIHdjaGFyX3RfZGlyZWN0aXZlcworI2Vsc2UKKyMgZGVmaW5lIFBSSU5URl9QQVJTRSBwcmludGZfcGFyc2UKKyMgZGVmaW5lIENIQVJfVCBjaGFyCisjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKyMgZGVmaW5lIERJUkVDVElWRVMgY2hhcl9kaXJlY3RpdmVzCisjZW5kaWYKKworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZW5kaWYKK2ludAorUFJJTlRGX1BBUlNFIChjb25zdCBDSEFSX1QgKmZvcm1hdCwgRElSRUNUSVZFUyAqZCwgYXJndW1lbnRzICphKQoreworICBjb25zdCBDSEFSX1QgKmNwID0gZm9ybWF0OwkJLyogcG9pbnRlciBpbnRvIGZvcm1hdCAqLworICBzaXplX3QgYXJnX3Bvc24gPSAwOwkJLyogbnVtYmVyIG9mIHJlZ3VsYXIgYXJndW1lbnRzIGNvbnN1bWVkICovCisgIHNpemVfdCBkX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgZC0+ZGlyICovCisgIHNpemVfdCBhX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgYS0+YXJnICovCisgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoID0gMDsKKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKworICBkLT5jb3VudCA9IDA7CisgIGRfYWxsb2NhdGVkID0gMTsKKyAgZC0+ZGlyID0gbWFsbG9jIChkX2FsbG9jYXRlZCAqIHNpemVvZiAoRElSRUNUSVZFKSk7CisgIGlmIChkLT5kaXIgPT0gTlVMTCkKKyAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKyAgICByZXR1cm4gLTE7CisKKyAgYS0+Y291bnQgPSAwOworICBhX2FsbG9jYXRlZCA9IDA7CisgIGEtPmFyZyA9IE5VTEw7CisKKyNkZWZpbmUgUkVHSVNURVJfQVJHKF9pbmRleF8sX3R5cGVfKSBcCisgIHsJCQkJCQkJCQlcCisgICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorICAgIGlmIChuID49IGFfYWxsb2NhdGVkKQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKwlhcmd1bWVudCAqbWVtb3J5OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCisJaWYgKGFfYWxsb2NhdGVkIDw9IG4pCQkJCQkJXAorCSAgYV9hbGxvY2F0ZWQgPSB4c3VtIChuLCAxKTsJCQkJCVwKKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCVwKKwkgIC8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLwkJCVwKKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKwltZW1vcnkgPSAoYS0+YXJnCQkJCQkJXAorCQkgID8gcmVhbGxvYyAoYS0+YXJnLCBtZW1vcnlfc2l6ZSkJCQlcCisJCSAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJCVwKKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJXAorCSAgLyogT3V0IG9mIG1lbW9yeS4gICovCQkJCQkJXAorCSAgZ290byBlcnJvcjsJCQkJCQkJXAorCWEtPmFyZyA9IG1lbW9yeTsJCQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKyAgICAgIGEtPmFyZ1thLT5jb3VudCsrXS50eXBlID0gVFlQRV9OT05FOwkJCQlcCisgICAgaWYgKGEtPmFyZ1tuXS50eXBlID09IFRZUEVfTk9ORSkJCQkJCVwKKyAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCisgICAgZWxzZSBpZiAoYS0+YXJnW25dLnR5cGUgIT0gKF90eXBlXykpCQkJCVwKKyAgICAgIC8qIEFtYmlndW91cyB0eXBlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8JCQlcCisgICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCisgIH0KKworICB3aGlsZSAoKmNwICE9ICdcMCcpCisgICAgeworICAgICAgQ0hBUl9UIGMgPSAqY3ArKzsKKyAgICAgIGlmIChjID09ICclJykKKwl7CisJICBzaXplX3QgYXJnX2luZGV4ID0gQVJHX05PTkU7CisJICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07LyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXh0IGRpcmVjdGl2ZS4gICovCisJICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOworCSAgZHAtPmZsYWdzID0gMDsKKwkgIGRwLT53aWR0aF9zdGFydCA9IE5VTEw7CisJICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKKwkgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBBUkdfTk9ORTsKKwkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBOVUxMOworCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOworCSAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBBUkdfTk9ORTsKKwkgIGRwLT5hcmdfaW5kZXggPSBBUkdfTk9ORTsKKworCSAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisJICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorCSAgICB7CisJICAgICAgY29uc3QgQ0hBUl9UICpucDsKKworCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorCQk7CisJICAgICAgaWYgKCpucCA9PSAnJCcpCisJCXsKKwkJICBzaXplX3QgbiA9IDA7CisKKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKwkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKwkJICBpZiAobiA9PSAwKQorCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKwkJICAgIGdvdG8gZXJyb3I7CisJCSAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCisJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKwkJICAgIGdvdG8gZXJyb3I7CisJCSAgYXJnX2luZGV4ID0gbiAtIDE7CisJCSAgY3AgPSBucCArIDE7CisJCX0KKwkgICAgfQorCisJICAvKiBSZWFkIHRoZSBmbGFncy4gICovCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgaWYgKCpjcCA9PSAnXCcnKQorCQl7CisJCSAgZHAtPmZsYWdzIHw9IEZMQUdfR1JPVVA7CisJCSAgY3ArKzsKKwkJfQorCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisJCXsKKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19MRUZUOworCQkgIGNwKys7CisJCX0KKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJysnKQorCQl7CisJCSAgZHAtPmZsYWdzIHw9IEZMQUdfU0hPV1NJR047CisJCSAgY3ArKzsKKwkJfQorCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnICcpCisJCXsKKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TUEFDRTsKKwkJICBjcCsrOworCQl9CisJICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKwkJeworCQkgIGRwLT5mbGFncyB8PSBGTEFHX0FMVDsKKwkJICBjcCsrOworCQl9CisJICAgICAgZWxzZSBpZiAoKmNwID09ICcwJykKKwkJeworCQkgIGRwLT5mbGFncyB8PSBGTEFHX1pFUk87CisJCSAgY3ArKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJYnJlYWs7CisJICAgIH0KKworCSAgLyogUGFyc2UgdGhlIGZpZWxkIHdpZHRoLiAgKi8KKwkgIGlmICgqY3AgPT0gJyonKQorCSAgICB7CisJICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7CisJICAgICAgY3ArKzsKKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisJICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCAxKQorCQltYXhfd2lkdGhfbGVuZ3RoID0gMTsKKworCSAgICAgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworCSAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisJCXsKKwkJICBjb25zdCBDSEFSX1QgKm5wOworCisJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisJCSAgICA7CisJCSAgaWYgKCpucCA9PSAnJCcpCisJCSAgICB7CisJCSAgICAgIHNpemVfdCBuID0gMDsKKworCQkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKwkJCW4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKwkJICAgICAgaWYgKG4gPT0gMCkKKwkJCS8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisJCQlnb3RvIGVycm9yOworCQkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKwkJCS8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkgbGF0ZXIuICAqLworCQkJZ290byBlcnJvcjsKKwkJICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworCQkgICAgICBjcCA9IG5wICsgMTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorCQl7CisJCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisJCSAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisJCSAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisJCSAgICBnb3RvIGVycm9yOworCQl9CisJICAgICAgUkVHSVNURVJfQVJHIChkcC0+d2lkdGhfYXJnX2luZGV4LCBUWVBFX0lOVCk7CisJICAgIH0KKwkgIGVsc2UgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKwkgICAgeworCSAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisKKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKwkgICAgICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorCQk7CisJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworCSAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisJICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCB3aWR0aF9sZW5ndGgpCisJCW1heF93aWR0aF9sZW5ndGggPSB3aWR0aF9sZW5ndGg7CisJICAgIH0KKworCSAgLyogUGFyc2UgdGhlIHByZWNpc2lvbi4gICovCisJICBpZiAoKmNwID09ICcuJykKKwkgICAgeworCSAgICAgIGNwKys7CisJICAgICAgaWYgKCpjcCA9PSAnKicpCisJCXsKKwkJICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOworCQkgIGNwKys7CisJCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBjcDsKKwkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCAyKQorCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworCisJCSAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisJCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKwkJICAgIHsKKwkJICAgICAgY29uc3QgQ0hBUl9UICpucDsKKworCQkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKwkJCTsKKwkJICAgICAgaWYgKCpucCA9PSAnJCcpCisJCQl7CisJCQkgIHNpemVfdCBuID0gMDsKKworCQkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKwkJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisJCQkgIGlmIChuID09IDApCisJCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKwkJCSAgICBnb3RvIGVycm9yOworCQkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKwkJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5CisJCQkgICAgICAgbGF0ZXIuICAqLworCQkJICAgIGdvdG8gZXJyb3I7CisJCQkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gbiAtIDE7CisJCQkgIGNwID0gbnAgKyAxOworCQkJfQorCQkgICAgfQorCQkgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKwkJICAgIHsKKwkJICAgICAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBhcmdfcG9zbisrOworCQkgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPT0gQVJHX05PTkUpCisJCQkvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisJCQlnb3RvIGVycm9yOworCQkgICAgfQorCQkgIFJFR0lTVEVSX0FSRyAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHNpemVfdCBwcmVjaXNpb25fbGVuZ3RoOworCisJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKwkJICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorCQkgICAgOworCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisJCSAgcHJlY2lzaW9uX2xlbmd0aCA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKwkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCBwcmVjaXNpb25fbGVuZ3RoKQorCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOworCQl9CisJICAgIH0KKworCSAgeworCSAgICBhcmdfdHlwZSB0eXBlOworCisJICAgIC8qIFBhcnNlIGFyZ3VtZW50IHR5cGUvc2l6ZSBzcGVjaWZpZXJzLiAgKi8KKwkgICAgeworCSAgICAgIGludCBmbGFncyA9IDA7CisKKwkgICAgICBmb3IgKDs7KQorCQl7CisJCSAgaWYgKCpjcCA9PSAnaCcpCisJCSAgICB7CisJCSAgICAgIGZsYWdzIHw9ICgxIDw8IChmbGFncyAmIDEpKTsKKwkJICAgICAgY3ArKzsKKwkJICAgIH0KKwkJICBlbHNlIGlmICgqY3AgPT0gJ0wnKQorCQkgICAgeworCQkgICAgICBmbGFncyB8PSA0OworCQkgICAgICBjcCsrOworCQkgICAgfQorCQkgIGVsc2UgaWYgKCpjcCA9PSAnbCcpCisJCSAgICB7CisJCSAgICAgIGZsYWdzICs9IDg7CisJCSAgICAgIGNwKys7CisJCSAgICB9CisjaWZkZWYgSEFWRV9JTlRNQVhfVAorCQkgIGVsc2UgaWYgKCpjcCA9PSAnaicpCisJCSAgICB7CisJCSAgICAgIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAobG9uZykpCisJCQl7CisJCQkgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisJCQkgIGZsYWdzICs9IDE2OworCQkJfQorCQkgICAgICBlbHNlIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAoaW50KSkKKwkJCXsKKwkJCSAgLyogaW50bWF4X3QgPSBsb25nICovCisJCQkgIGZsYWdzICs9IDg7CisJCQl9CisJCSAgICAgIGNwKys7CisJCSAgICB9CisjZW5kaWYKKwkJICBlbHNlIGlmICgqY3AgPT0gJ3onIHx8ICpjcCA9PSAnWicpCisJCSAgICB7CisJCSAgICAgIC8qICd6JyBpcyBzdGFuZGFyZGl6ZWQgaW4gSVNPIEMgOTksIGJ1dCBnbGliYyB1c2VzICdaJworCQkJIGJlY2F1c2UgdGhlIHdhcm5pbmcgZmFjaWxpdHkgaW4gZ2NjLTIuOTUuMiB1bmRlcnN0YW5kcworCQkJIG9ubHkgJ1onIChzZWUgZ2NjLTIuOTUuMi9nY2MvYy1jb21tb24uYzoxNzg0KS4gICovCisJCSAgICAgIGlmIChzaXplb2YgKHNpemVfdCkgPiBzaXplb2YgKGxvbmcpKQorCQkJeworCQkJICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKwkJCSAgZmxhZ3MgKz0gMTY7CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkKKwkJCXsKKwkJCSAgLyogc2l6ZV90ID0gbG9uZyAqLworCQkJICBmbGFncyArPSA4OworCQkJfQorCQkgICAgICBjcCsrOworCQkgICAgfQorCQkgIGVsc2UgaWYgKCpjcCA9PSAndCcpCisJCSAgICB7CisJCSAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorCQkJeworCQkJICAvKiBwdHJkaWZmX3QgPSBsb25nIGxvbmcgKi8KKwkJCSAgZmxhZ3MgKz0gMTY7CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAocHRyZGlmZl90KSA+IHNpemVvZiAoaW50KSkKKwkJCXsKKwkJCSAgLyogcHRyZGlmZl90ID0gbG9uZyAqLworCQkJICBmbGFncyArPSA4OworCQkJfQorCQkgICAgICBjcCsrOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGJyZWFrOworCQl9CisKKwkgICAgICAvKiBSZWFkIHRoZSBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisJICAgICAgYyA9ICpjcCsrOworCSAgICAgIHN3aXRjaCAoYykKKwkJeworCQljYXNlICdkJzogY2FzZSAnaSc6CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisJCSAgICB0eXBlID0gVFlQRV9MT05HTE9OR0lOVDsKKwkJICBlbHNlCisjZW5kaWYKKwkJICBpZiAoZmxhZ3MgPj0gOCkKKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorCQkgICAgdHlwZSA9IFRZUEVfU0NIQVI7CisJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorCQkgICAgdHlwZSA9IFRZUEVfU0hPUlQ7CisJCSAgZWxzZQorCQkgICAgdHlwZSA9IFRZUEVfSU5UOworCQkgIGJyZWFrOworCQljYXNlICdvJzogY2FzZSAndSc6IGNhc2UgJ3gnOiBjYXNlICdYJzoKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HTE9OR0lOVDsKKwkJICBlbHNlCisjZW5kaWYKKwkJICBpZiAoZmxhZ3MgPj0gOCkKKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKwkJICAgIHR5cGUgPSBUWVBFX1VDSEFSOworCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKwkJICAgIHR5cGUgPSBUWVBFX1VTSE9SVDsKKwkJICBlbHNlCisJCSAgICB0eXBlID0gVFlQRV9VSU5UOworCQkgIGJyZWFrOworCQljYXNlICdmJzogY2FzZSAnRic6IGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorCQljYXNlICdhJzogY2FzZSAnQSc6CisjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisJCSAgZWxzZQorI2VuZGlmCisJCSAgdHlwZSA9IFRZUEVfRE9VQkxFOworCQkgIGJyZWFrOworCQljYXNlICdjJzoKKwkJICBpZiAoZmxhZ3MgPj0gOCkKKyNpZmRlZiBIQVZFX1dJTlRfVAorCQkgICAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworI2Vsc2UKKwkJICAgIGdvdG8gZXJyb3I7CisjZW5kaWYKKwkJICBlbHNlCisJCSAgICB0eXBlID0gVFlQRV9DSEFSOworCQkgIGJyZWFrOworI2lmZGVmIEhBVkVfV0lOVF9UCisJCWNhc2UgJ0MnOgorCQkgIHR5cGUgPSBUWVBFX1dJREVfQ0hBUjsKKwkJICBjID0gJ2MnOworCQkgIGJyZWFrOworI2VuZGlmCisJCWNhc2UgJ3MnOgorCQkgIGlmIChmbGFncyA+PSA4KQorI2lmZGVmIEhBVkVfV0NIQVJfVAorCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisjZWxzZQorCQkgICAgZ290byBlcnJvcjsKKyNlbmRpZgorCQkgIGVsc2UKKwkJICAgIHR5cGUgPSBUWVBFX1NUUklORzsKKwkJICBicmVhazsKKyNpZmRlZiBIQVZFX1dDSEFSX1QKKwkJY2FzZSAnUyc6CisJCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisJCSAgYyA9ICdzJzsKKwkJICBicmVhazsKKyNlbmRpZgorCQljYXNlICdwJzoKKwkJICB0eXBlID0gVFlQRV9QT0lOVEVSOworCQkgIGJyZWFrOworCQljYXNlICduJzoKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI7CisJCSAgZWxzZQorI2VuZGlmCisJCSAgaWYgKGZsYWdzID49IDgpCisJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI7CisJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjsKKwkJICBlbHNlIGlmIChmbGFncyAmIDEpCisJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworCQkgIGVsc2UKKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOworCQkgIGJyZWFrOworCQljYXNlICclJzoKKwkJICB0eXBlID0gVFlQRV9OT05FOworCQkgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgIC8qIFVua25vd24gY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworCQkgIGdvdG8gZXJyb3I7CisJCX0KKwkgICAgfQorCisJICAgIGlmICh0eXBlICE9IFRZUEVfTk9ORSkKKwkgICAgICB7CisJCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisJCWlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorCQkgIHsKKwkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworCQkgICAgaWYgKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpCisJCSAgICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKwkJICAgICAgZ290byBlcnJvcjsKKwkJICB9CisJCVJFR0lTVEVSX0FSRyAoZHAtPmFyZ19pbmRleCwgdHlwZSk7CisJICAgICAgfQorCSAgICBkcC0+Y29udmVyc2lvbiA9IGM7CisJICAgIGRwLT5kaXJfZW5kID0gY3A7CisJICB9CisKKwkgIGQtPmNvdW50Kys7CisJICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCisJICAgIHsKKwkgICAgICBzaXplX3QgbWVtb3J5X3NpemU7CisJICAgICAgRElSRUNUSVZFICptZW1vcnk7CisKKwkgICAgICBkX2FsbG9jYXRlZCA9IHh0aW1lcyAoZF9hbGxvY2F0ZWQsIDIpOworCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKwkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCisJCS8qIE92ZXJmbG93LCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkuICAqLworCQlnb3RvIGVycm9yOworCSAgICAgIG1lbW9yeSA9IHJlYWxsb2MgKGQtPmRpciwgbWVtb3J5X3NpemUpOworCSAgICAgIGlmIChtZW1vcnkgPT0gTlVMTCkKKwkJLyogT3V0IG9mIG1lbW9yeS4gICovCisJCWdvdG8gZXJyb3I7CisJICAgICAgZC0+ZGlyID0gbWVtb3J5OworCSAgICB9CisJfQorICAgIH0KKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKworICBkLT5tYXhfd2lkdGhfbGVuZ3RoID0gbWF4X3dpZHRoX2xlbmd0aDsKKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKyAgcmV0dXJuIDA7CisKK2Vycm9yOgorICBmcmVlIChhLT5hcmcpOworICBmcmVlIChkLT5kaXIpOworICByZXR1cm4gLTE7Cit9CisKKyN1bmRlZiBESVJFQ1RJVkVTCisjdW5kZWYgRElSRUNUSVZFCisjdW5kZWYgQ0hBUl9UCisjdW5kZWYgUFJJTlRGX1BBUlNFCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9wcmludGYtcGFyc2UuaCBiL2UyZnNwcm9ncy9pbnRsL3ByaW50Zi1wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZWM1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9wcmludGYtcGFyc2UuaApAQCAtMCwwICsxLDc1IEBACisvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKyNkZWZpbmUgX1BSSU5URl9QQVJTRV9ICisKKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorCisKKy8qIEZsYWdzICovCisjZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCisjZGVmaW5lIEZMQUdfTEVGVAkgMgkvKiAtIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCisjZGVmaW5lIEZMQUdfQUxUCTE2CS8qICMgZmxhZyAqLworI2RlZmluZSBGTEFHX1pFUk8JMzIKKworLyogYXJnX2luZGV4IHZhbHVlIGluZGljYXRpbmcgdGhhdCBubyBhcmd1bWVudCBpcyBjb25zdW1lZC4gICovCisjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorCisvKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgY2hhciogZGlyX3N0YXJ0OworICBjb25zdCBjaGFyKiBkaXJfZW5kOworICBpbnQgZmxhZ3M7CisgIGNvbnN0IGNoYXIqIHdpZHRoX3N0YXJ0OworICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisgIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CisgIGNvbnN0IGNoYXIqIHByZWNpc2lvbl9zdGFydDsKKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKyAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CisgIGNoYXIgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBlIEUgZyBHIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCisgIHNpemVfdCBhcmdfaW5kZXg7Cit9CitjaGFyX2RpcmVjdGl2ZTsKKworLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBzaXplX3QgY291bnQ7CisgIGNoYXJfZGlyZWN0aXZlICpkaXI7CisgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGg7Cit9CitjaGFyX2RpcmVjdGl2ZXM7CisKKworLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CisgICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQorICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisjaWZkZWYgU1RBVElDCitTVEFUSUMKKyNlbHNlCitleHRlcm4KKyNlbmRpZgoraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisKKyNlbmRpZiAvKiBfUFJJTlRGX1BBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3ByaW50Zi5jIGIvZTJmc3Byb2dzL2ludGwvcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4NjQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL3ByaW50Zi5jCkBAIC0wLDAgKzEsMzcxIEBACisvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MsIHVzaW5nIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorI2Vsc2UKKyMgaWZkZWYgX01TQ19WRVIKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjIGVsc2UKKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisjICBlbHNlCisjICAgaWZkZWYgX0FJWAorICNwcmFnbWEgYWxsb2NhCisjICAgZWxzZQorIyAgICBpZm5kZWYgYWxsb2NhCitjaGFyICphbGxvY2EgKCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCisgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorICAgZG9uJ3QgbmVlZCB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGluIGFueSBjYXNlLiAgKi8KKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyMgZGVmaW5lIERMTF9FWFBPUlRFRAorI2VuZGlmCisKKyNkZWZpbmUgU1RBVElDIHN0YXRpYworCisvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLWFyZ3MuaCIuICAqLworI2luY2x1ZGUgInByaW50Zi1hcmdzLmMiCisKKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJwcmludGYtcGFyc2UuaCIuICAqLworI2luY2x1ZGUgInByaW50Zi1wYXJzZS5jIgorCisvKiBEZWZpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ2YXNucHJpbnRmLmgiLiAgKi8KKyNkZWZpbmUgdmFzbnByaW50ZiBsaWJpbnRsX3Zhc25wcmludGYKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisjaWYgMCAvKiBub3QgbmVlZGVkICovCisjZGVmaW5lIGFzbnByaW50ZiBsaWJpbnRsX2FzbnByaW50ZgorI2luY2x1ZGUgImFzbnByaW50Zi5jIgorI2VuZGlmCisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ZmcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKyAgICByZXR1cm4gdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgICAgICBpbnQgcmV0dmFsID0gLTE7CisgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpCisJeworCSAgaWYgKGZ3cml0ZSAocmVzdWx0LCAxLCBsZW5ndGgsIHN0cmVhbSkgPT0gbGVuZ3RoKQorCSAgICByZXR2YWwgPSBsZW5ndGg7CisJICBmcmVlIChyZXN1bHQpOworCX0KKyAgICAgIHJldHVybiByZXR2YWw7CisgICAgfQorfQorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF9mcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGludCByZXR2YWw7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJldHZhbCA9IGxpYmludGxfdmZwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIHJldHVybiBsaWJpbnRsX3ZmcHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7Cit9CisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF92c3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisgICAgcmV0dXJuIHZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisgIGVsc2UKKyAgICB7CisgICAgICBzaXplX3QgbGVuZ3RoID0gKHNpemVfdCkgfjAgLyAoNCAqIHNpemVvZiAoY2hhcikpOworICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKwl7CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpbnQgcmV0dmFsOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICByZXR2YWwgPSBsaWJpbnRsX3ZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXR2YWw7Cit9CisKKyNpZiBIQVZFX1NOUFJJTlRGCisKKyMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorICAgLyogV2luZG93cy4gICovCisjICBkZWZpbmUgc3lzdGVtX3ZzbnByaW50ZiBfdnNucHJpbnRmCisjIGVsc2UKKyAgIC8qIFVuaXguICAqLworIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgdnNucHJpbnRmCisjIGVuZGlmCisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICBlbHNlCisgICAgeworICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKyAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisJeworCSAgaWYgKG1heGxlbmd0aCA+IDApCisJICAgIHsKKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorCQlhYm9ydCAoKTsKKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCBtYXhsZW5ndGggLSAxKTsKKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworCSAgICB9CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworI2lmIEhBVkVfQVNQUklOVEYKKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdmFzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIHNpemVfdCBsZW5ndGg7CisgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIHJldHVybiAtMTsKKyAgKnJlc3VsdHAgPSByZXN1bHQ7CisgIHJldHVybiBsZW5ndGg7Cit9CisKK0RMTF9FWFBPUlRFRAoraW50CitsaWJpbnRsX2FzcHJpbnRmIChjaGFyICoqcmVzdWx0cCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92YXNwcmludGYgKHJlc3VsdHAsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZgorCisjaWYgSEFWRV9GV1BSSU5URgorCisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2RlZmluZSBXSURFX0NIQVJfVkVSU0lPTiAxCisKKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKyNpbmNsdWRlICJwcmludGYtcGFyc2UuYyIKKworLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisjZGVmaW5lIHZhc253cHJpbnRmIGxpYmludGxfdmFzbndwcmludGYKKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisjaWYgMCAvKiBub3QgbmVlZGVkICovCisjZGVmaW5lIGFzbndwcmludGYgbGliaW50bF9hc253cHJpbnRmCisjaW5jbHVkZSAiYXNucHJpbnRmLmMiCisjZW5kaWYKKworIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorICAgLyogV2luZG93cy4gICovCisjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiBfdnNud3ByaW50ZgorIyBlbHNlCisgICAvKiBVbml4LiAgKi8KKyMgIGRlZmluZSBzeXN0ZW1fdnN3cHJpbnRmIHZzd3ByaW50ZgorIyBlbmRpZgorCitETExfRVhQT1JURUQKK2ludAorbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisgIGlmICh3Y3NjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHNpemVfdCBsZW5ndGg7CisgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaW50IHJldHZhbCA9IC0xOworICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorCXsKKwkgIHNpemVfdCBpOworCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCSAgICBpZiAoZnB1dHdjIChyZXN1bHRbaV0sIHN0cmVhbSkgPT0gV0VPRikKKwkgICAgICBicmVhazsKKwkgIGlmIChpID09IGxlbmd0aCkKKwkgICAgcmV0dmFsID0gbGVuZ3RoOworCSAgZnJlZSAocmVzdWx0KTsKKwl9CisgICAgICByZXR1cm4gcmV0dmFsOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdndwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICByZXR1cm4gbGliaW50bF92ZndwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKyAgcmV0dXJuIHJldHZhbDsKK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfdnN3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKyAgICByZXR1cm4gc3lzdGVtX3Zzd3ByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisgIGVsc2UKKyAgICB7CisgICAgICBzaXplX3QgbWF4bGVuZ3RoID0gbGVuZ3RoOworICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisJeworCSAgaWYgKG1heGxlbmd0aCA+IDApCisJICAgIHsKKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorCQlhYm9ydCAoKTsKKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAwOworCSAgICB9CisJICBmcmVlIChyZXN1bHQpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gbGVuZ3RoOworICAgIH0KK30KKworRExMX0VYUE9SVEVECitpbnQKK2xpYmludGxfc3dwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaW50IHJldHZhbDsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgcmV0dmFsID0gbGliaW50bF92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gcmV0dmFsOworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9yZWYtYWRkLnNpbiBiL2UyZnNwcm9ncy9pbnRsL3JlZi1hZGQuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzM3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9yZWYtYWRkLnNpbgpAQCAtMCwwICsxLDMxIEBACisjIEFkZCB0aGlzIHBhY2thZ2UgdG8gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyAgIFVTQS4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICB0YQorICA6YQorICBzLyBAUEFDS0FHRUAgLyBAUEFDS0FHRUAgLworICB0YgorICBzLyAkLyBAUEFDS0FHRUAgLworICA6YgorICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2ludGwvcmVmLWRlbC5zaW4gYi9lMmZzcHJvZ3MvaW50bC9yZWYtZGVsLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNjZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcmVmLWRlbC5zaW4KQEAgLTAsMCArMSwyNiBAQAorIyBSZW1vdmUgdGhpcyBwYWNrYWdlIGZyb20gYSBsaXN0IG9mIHJlZmVyZW5jZXMgc3RvcmVkIGluIGEgdGV4dCBmaWxlLgorIworIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyMgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjICAgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorIyAgIFVTQS4KKyMKKyMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCisjCisvXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKyAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworICBzLyBAUEFDS0FHRUAgLyAvCisgIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC9yZWxvY2F0YWJsZS5jIGIvZTJmc3Byb2dzL2ludGwvcmVsb2NhdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjdjNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvcmVsb2NhdGFibGUuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworCisvKiBUZWxsIGdsaWJjJ3MgPHN0ZGlvLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIGdldGxpbmUoKS4KKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisKKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBOT19YTUFMTE9DCisjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworI2Vsc2UKKyMgaW5jbHVkZSAieGFsbG9jLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaWYgREVQRU5EU19PTl9MSUJDSEFSU0VUCisjIGluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKyNlbmRpZgorI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OVgorIyBpbmNsdWRlIDxpY29udi5oPgorI2VuZGlmCisjaWYgREVQRU5EU19PTl9MSUJJTlRMICYmIEVOQUJMRV9OTFMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2VuZGlmCisKKy8qIEZha2VkIGNoZWFwICdib29sJy4gICovCisjdW5kZWYgYm9vbAorI3VuZGVmIGZhbHNlCisjdW5kZWYgdHJ1ZQorI2RlZmluZSBib29sIGludAorI2RlZmluZSBmYWxzZSAwCisjZGVmaW5lIHRydWUgMQorCisvKiBQYXRobmFtZSBzdXBwb3J0LgorICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCisgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorICAgICAmJiAoUClbMV0gPT0gJzonKQorIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSBcCisgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAoSEFTX0RFVklDRSAoUCkgPyAyIDogMCkKKyNlbHNlCisgIC8qIFVuaXggKi8KKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCisjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisjZW5kaWYKKworLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCitzdGF0aWMgY2hhciAqb3JpZ19wcmVmaXg7CitzdGF0aWMgc2l6ZV90IG9yaWdfcHJlZml4X2xlbjsKKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCitzdGF0aWMgY2hhciAqY3Vycl9wcmVmaXg7CitzdGF0aWMgc2l6ZV90IGN1cnJfcHJlZml4X2xlbjsKKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKyAgIHRvIHRoZW0gbXVzdCBzdGFydCB3aXRoIGEgc2xhc2guICAqLworCisvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKyAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CisgICBieSB0aGUgY29ycmVzcG9uZGluZyBwYXRobmFtZSB3aXRoIHRoZSBjdXJyZW50IHByZWZpeCBpbnN0ZWFkLiAgQm90aAorICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KK3N0YXRpYyB2b2lkCitzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorCQkJICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2FyZykKK3sKKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisgICAgICAvKiBPcHRpbWl6YXRpb246IGlmIG9yaWdfcHJlZml4IGFuZCBjdXJyX3ByZWZpeCBhcmUgZXF1YWwsIHRoZQorCSByZWxvY2F0aW9uIGlzIGEgbm9wLiAgKi8KKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisgICAgeworICAgICAgLyogRHVwbGljYXRlIHRoZSBhcmd1bWVudCBzdHJpbmdzLiAgKi8KKyAgICAgIGNoYXIgKm1lbW9yeTsKKworICAgICAgb3JpZ19wcmVmaXhfbGVuID0gc3RybGVuIChvcmlnX3ByZWZpeF9hcmcpOworICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworICAgICAgbWVtb3J5ID0gKGNoYXIgKikgeG1hbGxvYyAob3JpZ19wcmVmaXhfbGVuICsgMSArIGN1cnJfcHJlZml4X2xlbiArIDEpOworI2lmZGVmIE5PX1hNQUxMT0MKKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKyNlbmRpZgorCXsKKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworCSAgb3JpZ19wcmVmaXggPSBtZW1vcnk7CisJICBtZW1vcnkgKz0gb3JpZ19wcmVmaXhfbGVuICsgMTsKKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworCSAgY3Vycl9wcmVmaXggPSBtZW1vcnk7CisJICByZXR1cm47CisJfQorICAgIH0KKyAgb3JpZ19wcmVmaXggPSBOVUxMOworICBjdXJyX3ByZWZpeCA9IE5VTEw7CisgIC8qIERvbid0IHdvcnJ5IGFib3V0IHdhc3RlZCBtZW1vcnkgaGVyZSAtIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5CisgICAgIGNhbGxlZCBvbmNlLiAgKi8KK30KKworLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCit2b2lkCitzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4X2FyZywgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYXJnKQoreworICBzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworCisgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorICBsaWJjaGFyc2V0X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworI2VuZGlmCisjaWYgREVQRU5EU19PTl9MSUJJQ09OViAmJiBIQVZFX0lDT05WICYmIF9MSUJJQ09OVl9WRVJTSU9OID49IDB4MDEwOQorICBsaWJpY29udl9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKyNlbmRpZgorI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTICYmIGRlZmluZWQgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXgKKyAgbGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKyNlbmRpZgorfQorCisjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbjoKKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorICAgaW5zdGFsbGF0aW9uIHByZWZpeCwgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYXJ0aWN1bGFyCisgICBmaWxlLCBhbmQgdGhlIGN1cnJlbnQgcGF0aG5hbWUgb2YgdGhpcyBmaWxlLiAgUmV0dXJucyBOVUxMIHVwb24gZmFpbHVyZS4gICovCisjaWZkZWYgSU5fTElCUkFSWQorI2RlZmluZSBjb21wdXRlX2N1cnJfcHJlZml4IGxvY2FsX2NvbXB1dGVfY3Vycl9wcmVmaXgKK3N0YXRpYworI2VuZGlmCitjb25zdCBjaGFyICoKK2NvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisJCSAgICAgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSkKK3sKKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworICBjb25zdCBjaGFyICpyZWxfaW5zdGFsbGRpcjsKKworICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKyAgICAgVGhpcyBpcyBzaW1wbHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnX2luc3RhbGxwcmVmaXggYW5kCisgICAgIG9yaWdfaW5zdGFsbGRpci4gICovCisgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorICAgICAgIT0gMCkKKyAgICAvKiBTaG91bGRuJ3QgaGFwcGVuIC0gbm90aGluZyBzaG91bGQgYmUgaW5zdGFsbGVkIG91dHNpZGUgJChwcmVmaXgpLiAgKi8KKyAgICByZXR1cm4gTlVMTDsKKyAgcmVsX2luc3RhbGxkaXIgPSBvcmlnX2luc3RhbGxkaXIgKyBzdHJsZW4gKG9yaWdfaW5zdGFsbHByZWZpeCk7CisKKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworICB7CisgICAgY29uc3QgY2hhciAqcF9iYXNlID0gY3Vycl9wYXRobmFtZSArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9wYXRobmFtZSk7CisgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworICAgIGNoYXIgKnE7CisKKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKyAgICAgIHsKKwlwLS07CisJaWYgKElTU0xBU0ggKCpwKSkKKwkgIGJyZWFrOworICAgICAgfQorCisgICAgcSA9IChjaGFyICopIHhtYWxsb2MgKHAgLSBjdXJyX3BhdGhuYW1lICsgMSk7CisjaWZkZWYgTk9fWE1BTExPQworICAgIGlmIChxID09IE5VTEwpCisgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworICAgIHFbcCAtIGN1cnJfcGF0aG5hbWVdID0gJ1wwJzsKKyAgICBjdXJyX2luc3RhbGxkaXIgPSBxOworICB9CisKKyAgLyogQ29tcHV0ZSB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IGJ5IHJlbW92aW5nIHRoZSB0cmFpbGluZworICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKyAgeworICAgIGNvbnN0IGNoYXIgKnJwID0gcmVsX2luc3RhbGxkaXIgKyBzdHJsZW4gKHJlbF9pbnN0YWxsZGlyKTsKKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKyAgICBjb25zdCBjaGFyICpjcF9iYXNlID0KKyAgICAgIGN1cnJfaW5zdGFsbGRpciArIEZJTEVTWVNURU1fUFJFRklYX0xFTiAoY3Vycl9pbnN0YWxsZGlyKTsKKworICAgIHdoaWxlIChycCA+IHJlbF9pbnN0YWxsZGlyICYmIGNwID4gY3BfYmFzZSkKKyAgICAgIHsKKwlib29sIHNhbWUgPSBmYWxzZTsKKwljb25zdCBjaGFyICpycGkgPSBycDsKKwljb25zdCBjaGFyICpjcGkgPSBjcDsKKworCXdoaWxlIChycGkgPiByZWxfaW5zdGFsbGRpciAmJiBjcGkgPiBjcF9iYXNlKQorCSAgeworCSAgICBycGktLTsKKwkgICAgY3BpLS07CisJICAgIGlmIChJU1NMQVNIICgqcnBpKSB8fCBJU1NMQVNIICgqY3BpKSkKKwkgICAgICB7CisJCWlmIChJU1NMQVNIICgqcnBpKSAmJiBJU1NMQVNIICgqY3BpKSkKKwkJICBzYW1lID0gdHJ1ZTsKKwkJYnJlYWs7CisJICAgICAgfQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKwkgICAgaWYgKCgqcnBpID49ICdhJyAmJiAqcnBpIDw9ICd6JyA/ICpycGkgLSAnYScgKyAnQScgOiAqcnBpKQorCQkhPSAoKmNwaSA+PSAnYScgJiYgKmNwaSA8PSAneicgPyAqY3BpIC0gJ2EnICsgJ0EnIDogKmNwaSkpCisJICAgICAgYnJlYWs7CisjZWxzZQorCSAgICBpZiAoKnJwaSAhPSAqY3BpKQorCSAgICAgIGJyZWFrOworI2VuZGlmCisJICB9CisJaWYgKCFzYW1lKQorCSAgYnJlYWs7CisJLyogVGhlIGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IHdhcyB0aGUgc2FtZS4gIG9waSBhbmQgY3BpIG5vdyBwb2ludAorCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworCXJwID0gcnBpOworCWNwID0gY3BpOworICAgICAgfQorCisgICAgaWYgKHJwID4gcmVsX2luc3RhbGxkaXIpCisgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKyAgICAgIHJldHVybiBOVUxMOworCisgICAgeworICAgICAgc2l6ZV90IGN1cnJfcHJlZml4X2xlbiA9IGNwIC0gY3Vycl9pbnN0YWxsZGlyOworICAgICAgY2hhciAqY3Vycl9wcmVmaXg7CisKKyAgICAgIGN1cnJfcHJlZml4ID0gKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgMSk7CisjaWZkZWYgTk9fWE1BTExPQworICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKyAgICAgIGN1cnJfcHJlZml4W2N1cnJfcHJlZml4X2xlbl0gPSAnXDAnOworCisgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisgICAgfQorICB9Cit9CisKKyNlbmRpZiAvKiAhSU5fTElCUkFSWSB8fCBQSUMgKi8KKworI2lmIGRlZmluZWQgUElDICYmIGRlZmluZWQgSU5TVEFMTERJUgorCisvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KK3N0YXRpYyBjaGFyICpzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisKKy8qIERldGVybWluZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgd2hlbiBpdCBpcyBsb2FkZWQuICAqLworCitCT09MIFdJTkFQSQorRGxsTWFpbiAoSElOU1RBTkNFIG1vZHVsZV9oYW5kbGUsIERXT1JEIGV2ZW50LCBMUFZPSUQgcmVzZXJ2ZWQpCit7CisgICh2b2lkKSByZXNlcnZlZDsKKworICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorICAgIHsKKyAgICAgIC8qIFRoZSBETEwgaXMgYmVpbmcgbG9hZGVkIGludG8gYW4gYXBwbGljYXRpb24ncyBhZGRyZXNzIHJhbmdlLiAgKi8KKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKworICAgICAgaWYgKCFHZXRNb2R1bGVGaWxlTmFtZSAobW9kdWxlX2hhbmRsZSwgbG9jYXRpb24sIHNpemVvZiAobG9jYXRpb24pKSkKKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKwlyZXR1cm4gRkFMU0U7CisKKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorCS8qIFNob3VsZG4ndCBoYXBwZW4uICAqLworCXJldHVybiBGQUxTRTsKKworICAgICAgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBzdHJkdXAgKGxvY2F0aW9uKTsKKyAgICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNlbHNlIC8qIFVuaXggKi8KKworc3RhdGljIHZvaWQKK2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKK3sKKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorICAvKiBMaW51eCBoYXMgL3Byb2Mvc2VsZi9tYXBzLiBnbGliYyAyIGhhcyB0aGUgZ2V0bGluZSgpIGZ1bmN0aW9uLiAgKi8KKyAgRklMRSAqZnA7CisKKyAgLyogT3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJyBtYXBzIGZpbGUuICBJdCBkZXNjcmliZXMgb25lIFZNQSBwZXIgbGluZS4gICovCisgIGZwID0gZm9wZW4gKCIvcHJvYy9zZWxmL21hcHMiLCAiciIpOworICBpZiAoZnApCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworICAgICAgZm9yICg7OykKKwl7CisJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJICBpbnQgYzsKKworCSAgaWYgKGZzY2FuZiAoZnAsICIlbHgtJWx4IiwgJnN0YXJ0LCAmZW5kKSAhPSAyKQorCSAgICBicmVhazsKKwkgIGlmIChhZGRyZXNzID49IHN0YXJ0ICYmIGFkZHJlc3MgPD0gZW5kIC0gMSkKKwkgICAgeworCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisJICAgICAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcvJykKKwkJY29udGludWU7CisJICAgICAgaWYgKGMgPT0gJy8nKQorCQl7CisJCSAgc2l6ZV90IHNpemU7CisJCSAgaW50IGxlbjsKKworCQkgIHVuZ2V0YyAoYywgZnApOworCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisJCSAgbGVuID0gZ2V0bGluZSAoJnNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLCAmc2l6ZSwgZnApOworCQkgIGlmIChsZW4gPj0gMCkKKwkJICAgIHsKKwkJICAgICAgLyogU3VjY2VzczogZmlsbGVkIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLiAgKi8KKwkJICAgICAgaWYgKGxlbiA+IDAgJiYgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKwkJICAgIH0KKwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9CisJICB3aGlsZSAoYyA9IGdldGMgKGZwKSwgYyAhPSBFT0YgJiYgYyAhPSAnXG4nKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgICBmY2xvc2UgKGZwKTsKKyAgICB9CisjZW5kaWYKK30KKworI2VuZGlmIC8qIFdJTjMyIC8gVW5peCAqLworCisvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisgICBSZXR1cm4gTlVMTCBpZiB1bmtub3duLgorICAgR3VhcmFudGVlZCB0byB3b3JrIG9ubHkgb24gTGludXggYW5kIFdvZTMyLiAgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKQoreworI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisgIHN0YXRpYyBib29sIHRyaWVkX2ZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisgIGlmICghdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSkKKyAgICB7CisgICAgICBmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpOworICAgICAgdHJpZWRfZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgIHJldHVybiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKK30KKworI2VuZGlmIC8qIFBJQyAqLworCisvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKyAgIGRpcmVjdG9yeS4gICovCitjb25zdCBjaGFyICoKK3JlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKyAgc3RhdGljIGludCBpbml0aWFsaXplZDsKKworICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKyAgaWYgKCFpbml0aWFsaXplZCkKKyAgICB7CisgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisJIHNldCB0aHJvdWdoIHRoZSBtYWluIHByb2dyYW0ncyBzZXRfcHJvZ3JhbV9uYW1lX2FuZF9pbnN0YWxsZGlyCisJIGZ1bmN0aW9uLiAgVGhpcyBpcyBzdWZmaWNpZW50IGluIHRoZSBjYXNlIHRoYXQgdGhlIGxpYnJhcnkgaGFzCisJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKwkgYmV0dGVyLCB0byBhbHNvIGNvdmVyIHRoZSBjYXNlcyB0aGF0IDEuIGl0IGhhcyBiZWVuIGluc3RhbGxlZAorCSBpbiBhIGRpZmZlcmVudCBwcmVmaXggYmVmb3JlIGJlaW5nIG1vdmVkIHRvIG9yaWdfcHJlZml4IGFuZCAobGF0ZXIpCisJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisJIG9yaWdfcHJlZml4LiAgKi8KKyAgICAgIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCA9IElOU1RBTExQUkVGSVg7CisgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXhfYmV0dGVyOworCisgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorCWNvbXB1dGVfY3Vycl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgb3JpZ19pbnN0YWxsZGlyLAorCQkJICAgICBnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkpOworICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorCWN1cnJfcHJlZml4X2JldHRlciA9IGN1cnJfcHJlZml4OworCisgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKworICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIH0KKyNlbmRpZgorCisgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKyAgICAgZXZlbiBmb3IgRE9TLWxpa2UgZmlsZXN5c3RlbXMsIGJlY2F1c2UgdGhlIHBhdGhuYW1lIGFyZ3VtZW50IHdhcworICAgICB0eXBpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIE1ha2VmaWxlIHZhcmlhYmxlIGFzIG9yaWdfcHJlZml4IGNhbWUKKyAgICAgZnJvbS4gICovCisgIGlmIChvcmlnX3ByZWZpeCAhPSBOVUxMICYmIGN1cnJfcHJlZml4ICE9IE5VTEwKKyAgICAgICYmIHN0cm5jbXAgKHBhdGhuYW1lLCBvcmlnX3ByZWZpeCwgb3JpZ19wcmVmaXhfbGVuKSA9PSAwKQorICAgIHsKKyAgICAgIGlmIChwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dID09ICdcMCcpCisJLyogcGF0aG5hbWUgZXF1YWxzIG9yaWdfcHJlZml4LiAgKi8KKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisgICAgICBpZiAoSVNTTEFTSCAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSkpCisJeworCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworCSAgY29uc3QgY2hhciAqcGF0aG5hbWVfdGFpbCA9ICZwYXRobmFtZVtvcmlnX3ByZWZpeF9sZW5dOworCSAgY2hhciAqcmVzdWx0ID0KKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworCisjaWZkZWYgTk9fWE1BTExPQworCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorI2VuZGlmCisJICAgIHsKKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisJICAgICAgc3RyY3B5IChyZXN1bHQgKyBjdXJyX3ByZWZpeF9sZW4sIHBhdGhuYW1lX3RhaWwpOworCSAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH0KKwl9CisgICAgfQorICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKyAgcmV0dXJuIHBhdGhuYW1lOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3JlbG9jYXRhYmxlLmggYi9lMmZzcHJvZ3MvaW50bC9yZWxvY2F0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzViNzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC9yZWxvY2F0YWJsZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIFByb3ZpZGUgcmVsb2NhdGFibGUgcGFja2FnZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAgIFVTQS4gICovCisKKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKyNkZWZpbmUgX1JFTE9DQVRBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIFRoaXMgY2FuIGJlIGVuYWJsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJlIC0tZW5hYmxlLXJlbG9jYXRhYmxlIG9wdGlvbi4gICovCisjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisKKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgaW4gYW55IGNhc2UuICAqLworI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQorIyBkZWZpbmUgUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVECisjZW5kaWYKKworLyogU2V0cyB0aGUgb3JpZ2luYWwgYW5kIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggb2YgdGhlIHBhY2thZ2UuCisgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKyAgIHByZWZpeGVzIHNob3VsZCBiZSBkaXJlY3RvcnkgbmFtZXMgd2l0aG91dCB0cmFpbGluZyBzbGFzaCAoaS5lLiB1c2UgIiIKKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCitleHRlcm4gUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIHZvaWQKKyAgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfcHJlZml4LAorCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworCisvKiBSZXR1cm5zIHRoZSBwYXRobmFtZSwgcmVsb2NhdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24KKyAgIGRpcmVjdG9yeS4gICovCitleHRlcm4gY29uc3QgY2hhciAqIHJlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSk7CisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisgICBhIGZyZXNoIHBhdGhuYW1lLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSB5b3VyIHByb2dyYW0gY2FsbHMKKyAgIHJlbG9jYXRlKCkgZnJlcXVlbnRseSwgdGhpbmsgYWJvdXQgY2FjaGluZyB0aGUgcmVzdWx0LiAgKi8KKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb246CisgICBDb21wdXRlcyB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorICAgZmlsZSwgYW5kIHRoZSBjdXJyZW50IHBhdGhuYW1lIG9mIHRoaXMgZmlsZS4gIFJldHVybnMgTlVMTCB1cG9uIGZhaWx1cmUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb21wdXRlX2N1cnJfcHJlZml4IChjb25zdCBjaGFyICpvcmlnX2luc3RhbGxwcmVmaXgsCisJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisJCQkJCSBjb25zdCBjaGFyICpjdXJyX3BhdGhuYW1lKTsKKworI2Vsc2UKKworLyogQnkgZGVmYXVsdCwgd2UgdXNlIHRoZSBoYXJkd2lyZWQgcGF0aG5hbWVzLiAgKi8KKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvaW50bC90ZXh0ZG9tYWluLmMgYi9lMmZzcHJvZ3MvaW50bC90ZXh0ZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0NWE4NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9pbnRsL3RleHRkb21haW4uYwpAQCAtMCwwICsxLDE0MSBAQAorLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHRleHRkb21haW4oMykgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorI2VuZGlmCisjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKworI2lmZGVmIF9MSUJDCisvKiBXZSBoYXZlIHRvIGhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorI2Vsc2UKKy8qIFByb3ZpZGUgZHVtbXkgaW1wbGVtZW50YXRpb24gaWYgdGhpcyBpcyBvdXRzaWRlIGdsaWJjLiAgKi8KKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorIyBkZWZpbmUgX19saWJjX3J3bG9ja193cmxvY2soTkFNRSkKKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfdW5sb2NrKE5BTUUpCisjZW5kaWYKKworLyogVGhlIGludGVybmFsIHZhcmlhYmxlcyBpbiB0aGUgc3RhbmRhbG9uZSBsaWJpbnRsLmEgbXVzdCBoYXZlIGRpZmZlcmVudAorICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworI2lmICFkZWZpbmVkIF9MSUJDCisjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorI2VuZGlmCisKKy8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKworLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCitleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisKKy8qIERlZmF1bHQgdGV4dCBkb21haW4gaW4gd2hpY2ggZW50cmllcyBmb3IgZ2V0dGV4dCgzKSBhcmUgdG8gYmUgZm91bmQuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW47CisKKworLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworI2lmZGVmIF9MSUJDCisjIGRlZmluZSBURVhURE9NQUlOIF9fdGV4dGRvbWFpbgorIyBpZm5kZWYgc3RyZHVwCisjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBURVhURE9NQUlOIGxpYmludGxfdGV4dGRvbWFpbgorI2VuZGlmCisKKy8qIExvY2sgdmFyaWFibGUgdG8gcHJvdGVjdCB0aGUgZ2xvYmFsIGRhdGEgaW4gdGhlIGdldHRleHQgaW1wbGVtZW50YXRpb24uICAqLworX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKworLyogU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIHRvIERPTUFJTk5BTUUuCisgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCitjaGFyICoKK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisgIGNoYXIgKm5ld19kb21haW47CisgIGNoYXIgKm9sZF9kb21haW47CisKKyAgLyogQSBOVUxMIHBvaW50ZXIgcmVxdWVzdHMgdGhlIGN1cnJlbnQgc2V0dGluZy4gICovCisgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworCisgIF9fbGliY19yd2xvY2tfd3Jsb2NrIChfbmxfc3RhdGVfbG9jayk7CisKKyAgb2xkX2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworCisgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgIGlmIChkb21haW5uYW1lWzBdID09ICdcMCcKKyAgICAgIHx8IHN0cmNtcCAoZG9tYWlubmFtZSwgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pID09IDApCisgICAgeworICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKyAgICAgIG5ld19kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcCAoZG9tYWlubmFtZSwgb2xkX2RvbWFpbikgPT0gMCkKKyAgICAvKiBUaGlzIGNhbiBoYXBwZW4gYW5kIHBlb3BsZSB3aWxsIHVzZSBpdCB0byBzaWduYWwgdGhhdCBzb21lCisgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisgICAgbmV3X2RvbWFpbiA9IG9sZF9kb21haW47CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBJZiB0aGUgZm9sbG93aW5nIG1hbGxvYyBmYWlscyBgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4nCisJIHdpbGwgYmUgTlVMTC4gIFRoaXMgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBhbmQgc28gc2lnbmFscyB3ZQorCSBhcmUgb3V0IG9mIGNvcmUuICAqLworI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisjZWxzZQorICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisJbWVtY3B5IChuZXdfZG9tYWluLCBkb21haW5uYW1lLCBsZW4pOworI2VuZGlmCisKKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisJX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBuZXdfZG9tYWluOworICAgIH0KKworICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworICAgICBzaW5jZSB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBjYXNlIGFuZCB0aGVyZSBpcyBubyBvdGhlciBlYXN5IHdlCisgICAgIHRvIGRvIGl0LiAgRG8gaXQgb25seSB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgKi8KKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKyAgICB7CisgICAgICArK19ubF9tc2dfY2F0X2NudHI7CisKKyAgICAgIGlmIChvbGRfZG9tYWluICE9IG5ld19kb21haW4gJiYgb2xkX2RvbWFpbiAhPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikKKwlmcmVlIChvbGRfZG9tYWluKTsKKyAgICB9CisKKyAgX19saWJjX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKworICByZXR1cm4gbmV3X2RvbWFpbjsKK30KKworI2lmZGVmIF9MSUJDCisvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KK3dlYWtfYWxpYXMgKF9fdGV4dGRvbWFpbiwgdGV4dGRvbWFpbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3Zhc25wcmludGYuYyBiL2UyZnNwcm9ncy9pbnRsL3Zhc25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJmYjllCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvdmFzbnByaW50Zi5jCkBAIC0wLDAgKzEsODg0IEBACisvKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworLyogVGVsbCBnbGliYydzIDxzdGRpby5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzbnByaW50ZigpLgorICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpZm5kZWYgSU5fTElCSU5UTAorIyBpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbmRpZgorCisvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorIyBpbmNsdWRlICJ2YXNud3ByaW50Zi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAidmFzbnByaW50Zi5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgkvKiBzbnByaW50ZigpLCBzcHJpbnRmKCkgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4JLyogYWJvcnQoKSwgbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLworI2luY2x1ZGUgPGVycm5vLmg+CS8qIGVycm5vICovCisjaW5jbHVkZSA8bGltaXRzLmg+CS8qIENIQVJfQklUICovCisjaW5jbHVkZSA8ZmxvYXQuaD4JLyogREJMX01BWF9FWFAsIExEQkxfTUFYX0VYUCAqLworI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisjIGluY2x1ZGUgIndwcmludGYtcGFyc2UuaCIKKyNlbHNlCisjIGluY2x1ZGUgInByaW50Zi1wYXJzZS5oIgorI2VuZGlmCisKKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisjaW5jbHVkZSAieHNpemUuaCIKKworI2lmZGVmIEhBVkVfV0NIQVJfVAorIyBpZmRlZiBIQVZFX1dDU0xFTgorIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKyMgZWxzZQorICAgLyogU29sYXJpcyAyLjUuMSBoYXMgd2NzbGVuKCkgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5IGxpYncuc28uIFRvIGF2b2lkCisgICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorICAgICAgRGVmaW5lIHRoaXMgc3Vic3RpdHV0ZSBvbmx5IG9uY2UsIGV2ZW4gaWYgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisgICAgICB0d2ljZSBpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LiAgKi8KKyMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorIyAgIGRlZmluZSBsb2NhbF93Y3NsZW5fZGVmaW5lZCAxCitzdGF0aWMgc2l6ZV90Citsb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCit7CisgIGNvbnN0IHdjaGFyX3QgKnB0cjsKKworICBmb3IgKHB0ciA9IHM7ICpwdHIgIT0gKHdjaGFyX3QpIDA7IHB0cisrKQorICAgIDsKKyAgcmV0dXJuIHB0ciAtIHM7Cit9CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorIyBkZWZpbmUgVkFTTlBSSU5URiB2YXNud3ByaW50ZgorIyBkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorIyBkZWZpbmUgRElSRUNUSVZFUyB3Y2hhcl90X2RpcmVjdGl2ZXMKKyMgZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCisjIGRlZmluZSBVU0VfU05QUklOVEYgMQorIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorICAgLyogT24gV2luZG93cywgdGhlIGZ1bmN0aW9uIHN3cHJpbnRmKCkgaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZSB0aGFuCisgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIF9zbndwcmludGYoKSBmdW5jdGlvbiBpbnN0ZWFkLiAgKi8KKyMgIGRlZmluZSBTTlBSSU5URiBfc253cHJpbnRmCisjIGVsc2UKKyAgIC8qIFVuaXguICAqLworIyAgZGVmaW5lIFNOUFJJTlRGIHN3cHJpbnRmCisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgVkFTTlBSSU5URiB2YXNucHJpbnRmCisjIGRlZmluZSBDSEFSX1QgY2hhcgorIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHByaW50Zl9wYXJzZQorIyBkZWZpbmUgVVNFX1NOUFJJTlRGIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpCisjIGlmIEhBVkVfREVDTF9fU05QUklOVEYKKyAgIC8qIFdpbmRvd3MuICAqLworIyAgZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorIyBlbHNlCisgICAvKiBVbml4LiAgKi8KKyMgIGRlZmluZSBTTlBSSU5URiBzbnByaW50ZgorIyBlbmRpZgorI2VuZGlmCisKK0NIQVJfVCAqCitWQVNOUFJJTlRGIChDSEFSX1QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBDSEFSX1QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBESVJFQ1RJVkVTIGQ7CisgIGFyZ3VtZW50cyBhOworCisgIGlmIChQUklOVEZfUEFSU0UgKGZvcm1hdCwgJmQsICZhKSA8IDApCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNkZWZpbmUgQ0xFQU5VUCgpIFwKKyAgZnJlZSAoZC5kaXIpOwkJCQkJCQkJXAorICBpZiAoYS5hcmcpCQkJCQkJCQlcCisgICAgZnJlZSAoYS5hcmcpOworCisgIGlmIChwcmludGZfZmV0Y2hhcmdzIChhcmdzLCAmYSkgPCAwKQorICAgIHsKKyAgICAgIENMRUFOVVAgKCk7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICB7CisgICAgc2l6ZV90IGJ1Zl9uZWVkZWRsZW5ndGg7CisgICAgQ0hBUl9UICpidWY7CisgICAgQ0hBUl9UICpidWZfbWFsbG9jZWQ7CisgICAgY29uc3QgQ0hBUl9UICpjcDsKKyAgICBzaXplX3QgaTsKKyAgICBESVJFQ1RJVkUgKmRwOworICAgIC8qIE91dHB1dCBzdHJpbmcgYWNjdW11bGF0b3IuICAqLworICAgIENIQVJfVCAqcmVzdWx0OworICAgIHNpemVfdCBhbGxvY2F0ZWQ7CisgICAgc2l6ZV90IGxlbmd0aDsKKworICAgIC8qIEFsbG9jYXRlIGEgc21hbGwgYnVmZmVyIHRoYXQgd2lsbCBob2xkIGEgZGlyZWN0aXZlIHBhc3NlZCB0bworICAgICAgIHNwcmludGYgb3Igc25wcmludGYuICAqLworICAgIGJ1Zl9uZWVkZWRsZW5ndGggPQorICAgICAgeHN1bTQgKDcsIGQubWF4X3dpZHRoX2xlbmd0aCwgZC5tYXhfcHJlY2lzaW9uX2xlbmd0aCwgNik7CisjaWYgSEFWRV9BTExPQ0EKKyAgICBpZiAoYnVmX25lZWRlZGxlbmd0aCA8IDQwMDAgLyBzaXplb2YgKENIQVJfVCkpCisgICAgICB7CisJYnVmID0gKENIQVJfVCAqKSBhbGxvY2EgKGJ1Zl9uZWVkZWRsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOworCWJ1Zl9tYWxsb2NlZCA9IE5VTEw7CisgICAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisJc2l6ZV90IGJ1Zl9tZW1zaXplID0geHRpbWVzIChidWZfbmVlZGVkbGVuZ3RoLCBzaXplb2YgKENIQVJfVCkpOworCWlmIChzaXplX292ZXJmbG93X3AgKGJ1Zl9tZW1zaXplKSkKKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworCWJ1ZiA9IChDSEFSX1QgKikgbWFsbG9jIChidWZfbWVtc2l6ZSk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCSAgZ290byBvdXRfb2ZfbWVtb3J5XzE7CisJYnVmX21hbGxvY2VkID0gYnVmOworICAgICAgfQorCisgICAgaWYgKHJlc3VsdGJ1ZiAhPSBOVUxMKQorICAgICAgeworCXJlc3VsdCA9IHJlc3VsdGJ1ZjsKKwlhbGxvY2F0ZWQgPSAqbGVuZ3RocDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJcmVzdWx0ID0gTlVMTDsKKwlhbGxvY2F0ZWQgPSAwOworICAgICAgfQorICAgIGxlbmd0aCA9IDA7CisgICAgLyogSW52YXJpYW50czoKKyAgICAgICByZXN1bHQgaXMgZWl0aGVyID09IHJlc3VsdGJ1ZiBvciA9PSBOVUxMIG9yIG1hbGxvYy1hbGxvY2F0ZWQuCisgICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCisKKyAgICAvKiBFbnN1cmVzIHRoYXQgYWxsb2NhdGVkID49IG5lZWRlZC4gIEFib3J0cyB0aHJvdWdoIGEganVtcCB0bworICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKyNkZWZpbmUgRU5TVVJFX0FMTE9DQVRJT04obmVlZGVkKSBcCisgICAgaWYgKChuZWVkZWQpID4gYWxsb2NhdGVkKQkJCQkJCSAgICAgXAorICAgICAgewkJCQkJCQkJCSAgICAgXAorCXNpemVfdCBtZW1vcnlfc2l6ZTsJCQkJCQkgICAgIFwKKwlDSEFSX1QgKm1lbW9yeTsJCQkJCQkJICAgICBcCisJCQkJCQkJCQkgICAgIFwKKwlhbGxvY2F0ZWQgPSAoYWxsb2NhdGVkID4gMCA/IHh0aW1lcyAoYWxsb2NhdGVkLCAyKSA6IDEyKTsJICAgICBcCisJaWYgKChuZWVkZWQpID4gYWxsb2NhdGVkKQkJCQkJICAgICBcCisJICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYWxsb2NhdGVkLCBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQkgICAgIFwKKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkJCQkgICAgIFwKKwkgIG1lbW9yeSA9IChDSEFSX1QgKikgbWFsbG9jIChtZW1vcnlfc2l6ZSk7CQkJICAgICBcCisJZWxzZQkJCQkJCQkJICAgICBcCisJICBtZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgbWVtb3J5X3NpemUpOwkJICAgICBcCisJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCSAgICAgXAorCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorCWlmIChyZXN1bHQgPT0gcmVzdWx0YnVmICYmIGxlbmd0aCA+IDApCQkJCSAgICAgXAorCSAgbWVtY3B5IChtZW1vcnksIHJlc3VsdCwgbGVuZ3RoICogc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQkgICAgIFwKKyAgICAgIH0KKworICAgIGZvciAoY3AgPSBmb3JtYXQsIGkgPSAwLCBkcCA9ICZkLmRpclswXTsgOyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspCisgICAgICB7CisJaWYgKGNwICE9IGRwLT5kaXJfc3RhcnQpCisJICB7CisJICAgIHNpemVfdCBuID0gZHAtPmRpcl9zdGFydCAtIGNwOworCSAgICBzaXplX3QgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgbik7CisKKwkgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgY3AsIG4gKiBzaXplb2YgKENIQVJfVCkpOworCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworCSAgfQorCWlmIChpID09IGQuY291bnQpCisJICBicmVhazsKKworCS8qIEV4ZWN1dGUgYSBzaW5nbGUgZGlyZWN0aXZlLiAgKi8KKwlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJyUnKQorCSAgeworCSAgICBzaXplX3QgYXVnbWVudGVkX2xlbmd0aDsKKworCSAgICBpZiAoIShkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKSkKKwkgICAgICBhYm9ydCAoKTsKKwkgICAgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgMSk7CisJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKwkgICAgcmVzdWx0W2xlbmd0aF0gPSAnJSc7CisJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoIShkcC0+YXJnX2luZGV4ICE9IEFSR19OT05FKSkKKwkgICAgICBhYm9ydCAoKTsKKworCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ24nKQorCSAgICAgIHsKKwkJc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKQorCQkgIHsKKwkJICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IGxlbmd0aDsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gbGVuZ3RoOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IGxlbmd0aDsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKwkJICAgIGJyZWFrOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CisJCSAgICBicmVhazsKKyNlbmRpZgorCQkgIGRlZmF1bHQ6CisJCSAgICBhYm9ydCAoKTsKKwkJICB9CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKKwkJQ0hBUl9UICpwOworCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworCQlpbnQgcHJlZml4ZXNbMl07CisjaWYgIVVTRV9TTlBSSU5URgorCQlzaXplX3QgdG1wX2xlbmd0aDsKKwkJQ0hBUl9UIHRtcGJ1Zls3MDBdOworCQlDSEFSX1QgKnRtcDsKKworCQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIGZvciBjYWxsaW5nCisJCSAgIHNwcmludGYuICAqLworCQl7CisJCSAgc2l6ZV90IHdpZHRoOworCQkgIHNpemVfdCBwcmVjaXNpb247CisKKwkJICB3aWR0aCA9IDA7CisJCSAgaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKQorCQkgICAgeworCQkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKwkJCXsKKwkJCSAgaW50IGFyZzsKKworCQkJICBpZiAoIShhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKwkJCSAgICBhYm9ydCAoKTsKKwkJCSAgYXJnID0gYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0uYS5hX2ludDsKKwkJCSAgd2lkdGggPSAoYXJnIDwgMCA/ICh1bnNpZ25lZCBpbnQpICgtYXJnKSA6IGFyZyk7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisKKwkJCSAgZG8KKwkJCSAgICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKwkJCSAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKwkJCX0KKwkJICAgIH0KKworCQkgIHByZWNpc2lvbiA9IDY7CisJCSAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisJCSAgICB7CisJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKwkJCXsKKwkJCSAgaW50IGFyZzsKKworCQkJICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisJCQkgICAgYWJvcnQgKCk7CisJCQkgIGFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworCQkJICBwcmVjaXNpb24gPSAoYXJnIDwgMCA/IDAgOiBhcmcpOworCQkJfQorCQkgICAgICBlbHNlCisJCQl7CisJCQkgIGNvbnN0IENIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CisKKwkJCSAgcHJlY2lzaW9uID0gMDsKKwkJCSAgZG8KKwkJCSAgICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKTsKKwkJCX0KKwkJICAgIH0KKworCQkgIHN3aXRjaCAoZHAtPmNvbnZlcnNpb24pCisJCSAgICB7CisKKwkJICAgIGNhc2UgJ2QnOiBjYXNlICdpJzogY2FzZSAndSc6CisjIGlmZGVmIEhBVkVfTE9OR19MT05HCisJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKwkJCXRtcF9sZW5ndGggPQorCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKwkJCQkJICkKKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisJCSAgICAgIGVsc2UKKyMgZW5kaWYKKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKwkJCXRtcF9sZW5ndGggPQorCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisJCQkJCSApCisJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworCQkgICAgICBlbHNlCisJCQl0bXBfbGVuZ3RoID0KKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisJCQkJCSApCisJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworCQkgICAgICBicmVhazsKKworCQkgICAgY2FzZSAnbyc6CisjIGlmZGVmIEhBVkVfTE9OR19MT05HCisJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKwkJCXRtcF9sZW5ndGggPQorCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworCQkJCQkgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKwkJICAgICAgZWxzZQorIyBlbmRpZgorCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorCQkJdG1wX2xlbmd0aCA9CisJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworCQkJCQkgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKwkJICAgICAgZWxzZQorCQkJdG1wX2xlbmd0aCA9CisJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorCQkJCQkgICogMC4zMzMzMzQgLyogYmluYXJ5IC0+IG9jdGFsICovCisJCQkJCSApCisJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworCQkgICAgICBicmVhazsKKworCQkgICAgY2FzZSAneCc6IGNhc2UgJ1gnOgorIyBpZmRlZiBIQVZFX0xPTkdfTE9ORworCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisJCQl0bXBfbGVuZ3RoID0KKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUCisJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworCQkJCQkgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKwkJICAgICAgZWxzZQorIyBlbmRpZgorCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorCQkJdG1wX2xlbmd0aCA9CisJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisJCQkJCSApCisJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworCQkgICAgICBlbHNlCisJCQl0bXBfbGVuZ3RoID0KKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworCQkJCQkgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKwkJICAgICAgYnJlYWs7CisKKwkJICAgIGNhc2UgJ2YnOiBjYXNlICdGJzoKKyMgaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisJCQl0bXBfbGVuZ3RoID0KKwkJCSAgKHVuc2lnbmVkIGludCkgKExEQkxfTUFYX0VYUAorCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworCQkJCQkgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCisJCSAgICAgIGVsc2UKKyMgZW5kaWYKKwkJCXRtcF9sZW5ndGggPQorCQkJICAodW5zaWduZWQgaW50KSAoREJMX01BWF9FWFAKKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKwkJCQkJICkKKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworCQkgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgcHJlY2lzaW9uKTsKKwkJICAgICAgYnJlYWs7CisKKwkJICAgIGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorCQkgICAgICB0bXBfbGVuZ3RoID0KKwkJCTEyOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50LCBleHBvbmVudCBldGMuICovCisJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworCQkgICAgICBicmVhazsKKworCQkgICAgY2FzZSAnYyc6CisjIGlmIGRlZmluZWQgSEFWRV9XSU5UX1QgJiYgIVdJREVfQ0hBUl9WRVJTSU9OCisJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9DSEFSKQorCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CisJCSAgICAgIGVsc2UKKyMgZW5kaWYKKwkJCXRtcF9sZW5ndGggPSAxOworCQkgICAgICBicmVhazsKKworCQkgICAgY2FzZSAncyc6CisjIGlmZGVmIEhBVkVfV0NIQVJfVAorCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX1dJREVfU1RSSU5HKQorCQkJeworCQkJICB0bXBfbGVuZ3RoID0KKwkJCSAgICBsb2NhbF93Y3NsZW4gKGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX3N0cmluZyk7CisKKyMgIGlmICFXSURFX0NIQVJfVkVSU0lPTgorCQkJICB0bXBfbGVuZ3RoID0geHRpbWVzICh0bXBfbGVuZ3RoLCBNQl9DVVJfTUFYKTsKKyMgIGVuZGlmCisJCQl9CisJCSAgICAgIGVsc2UKKyMgZW5kaWYKKwkJCXRtcF9sZW5ndGggPSBzdHJsZW4gKGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmcpOworCQkgICAgICBicmVhazsKKworCQkgICAgY2FzZSAncCc6CisJCSAgICAgIHRtcF9sZW5ndGggPQorCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCisJCQkJCSogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKwkJCQkgICAgICAgKQorCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIDB4ICovCisJCSAgICAgIGJyZWFrOworCisJCSAgICBkZWZhdWx0OgorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIH0KKworCQkgIGlmICh0bXBfbGVuZ3RoIDwgd2lkdGgpCisJCSAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisKKwkJICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMSk7IC8qIGFjY291bnQgZm9yIHRyYWlsaW5nIE5VTCAqLworCQl9CisKKwkJaWYgKHRtcF9sZW5ndGggPD0gc2l6ZW9mICh0bXBidWYpIC8gc2l6ZW9mIChDSEFSX1QpKQorCQkgIHRtcCA9IHRtcGJ1ZjsKKwkJZWxzZQorCQkgIHsKKwkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKworCQkgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorCQkgICAgICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworCQkgICAgdG1wID0gKENIQVJfVCAqKSBtYWxsb2MgKHRtcF9tZW1zaXplKTsKKwkJICAgIGlmICh0bXAgPT0gTlVMTCkKKwkJICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCisJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKwkJICB9CisjZW5kaWYKKworCQkvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKKwkJICAgc3ByaW50Zi4gICovCisJCXAgPSBidWY7CisJCSpwKysgPSAnJSc7CisJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0dST1VQKQorCQkgICpwKysgPSAnXCcnOworCQlpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQorCQkgICpwKysgPSAnLSc7CisJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKQorCQkgICpwKysgPSAnKyc7CisJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1NQQUNFKQorCQkgICpwKysgPSAnICc7CisJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKKwkJICAqcCsrID0gJyMnOworCQlpZiAoZHAtPmZsYWdzICYgRkxBR19aRVJPKQorCQkgICpwKysgPSAnMCc7CisJCWlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKwkJICB7CisJCSAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisJCSAgICBtZW1jcHkgKHAsIGRwLT53aWR0aF9zdGFydCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisJCSAgICBwICs9IG47CisJCSAgfQorCQlpZiAoZHAtPnByZWNpc2lvbl9zdGFydCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKwkJICB7CisJCSAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKwkJICAgIG1lbWNweSAocCwgZHAtPnByZWNpc2lvbl9zdGFydCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisJCSAgICBwICs9IG47CisJCSAgfQorCisJCXN3aXRjaCAodHlwZSkKKwkJICB7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKwkJICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CisJCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKwkJICAgICpwKysgPSAnbCc7CisJCSAgICAvKkZBTExUSFJPVUdIKi8KKyNlbmRpZgorCQkgIGNhc2UgVFlQRV9MT05HSU5UOgorCQkgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKyNpZmRlZiBIQVZFX1dJTlRfVAorCQkgIGNhc2UgVFlQRV9XSURFX0NIQVI6CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dDSEFSX1QKKwkJICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisjZW5kaWYKKwkJICAgICpwKysgPSAnbCc7CisJCSAgICBicmVhazsKKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisJCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisJCSAgICAqcCsrID0gJ0wnOworCQkgICAgYnJlYWs7CisjZW5kaWYKKwkJICBkZWZhdWx0OgorCQkgICAgYnJlYWs7CisJCSAgfQorCQkqcCA9IGRwLT5jb252ZXJzaW9uOworI2lmIFVTRV9TTlBSSU5URgorCQlwWzFdID0gJyUnOworCQlwWzJdID0gJ24nOworCQlwWzNdID0gJ1wwJzsKKyNlbHNlCisJCXBbMV0gPSAnXDAnOworI2VuZGlmCisKKwkJLyogQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgZm9yIGNhbGxpbmcgc25wcmludGYgb3Igc3ByaW50Zi4gICovCisJCXByZWZpeF9jb3VudCA9IDA7CisJCWlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorCQkgIHsKKwkJICAgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisJCSAgfQorCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisJCSAgeworCQkgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworCQkgIH0KKworI2lmIFVTRV9TTlBSSU5URgorCQkvKiBQcmVwYXJlIGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmV0dXJucyB0aGUgY291bnQKKwkJICAgdmlhICVuLiAgKi8KKwkJRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworCQlyZXN1bHRbbGVuZ3RoXSA9ICdcMCc7CisjZW5kaWYKKworCQlmb3IgKDs7KQorCQkgIHsKKwkJICAgIHNpemVfdCBtYXhsZW47CisJCSAgICBpbnQgY291bnQ7CisJCSAgICBpbnQgcmV0Y291bnQ7CisKKwkJICAgIG1heGxlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKwkJICAgIGNvdW50ID0gLTE7CisJCSAgICByZXRjb3VudCA9IDA7CisKKyNpZiBVU0VfU05QUklOVEYKKyMgZGVmaW5lIFNOUFJJTlRGX0JVRihhcmcpIFwKKwkJICAgIHN3aXRjaCAocHJlZml4X2NvdW50KQkJCQkgICAgXAorCQkgICAgICB7CQkJCQkJCSAgICBcCisJCSAgICAgIGNhc2UgMDoJCQkJCQkgICAgXAorCQkJcmV0Y291bnQgPSBTTlBSSU5URiAocmVzdWx0ICsgbGVuZ3RoLCBtYXhsZW4sIGJ1ZiwgIFwKKwkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorCQkJYnJlYWs7CQkJCQkJICAgIFwKKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorCQkJCQkgICAgIHByZWZpeGVzWzBdLCBhcmcsICZjb3VudCk7CSAgICBcCisJCQlicmVhazsJCQkJCQkgICAgXAorCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKwkJCXJldGNvdW50ID0gU05QUklOVEYgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLCBidWYsICBcCisJCQkJCSAgICAgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLCBhcmcsIFwKKwkJCQkJICAgICAmY291bnQpOwkJCSAgICBcCisJCQlicmVhazsJCQkJCQkgICAgXAorCQkgICAgICBkZWZhdWx0OgkJCQkJCSAgICBcCisJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisJCSAgICAgIH0KKyNlbHNlCisjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisJCSAgICBzd2l0Y2ggKHByZWZpeF9jb3VudCkJCQkJICAgIFwKKwkJICAgICAgewkJCQkJCQkgICAgXAorCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIGFyZyk7CQkgICAgXAorCQkJYnJlYWs7CQkJCQkJICAgIFwKKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBwcmVmaXhlc1swXSwgYXJnKTsJICAgIFwKKwkJCWJyZWFrOwkJCQkJCSAgICBcCisJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLFwKKwkJCQkJIGFyZyk7CQkJCSAgICBcCisJCQlicmVhazsJCQkJCQkgICAgXAorCQkgICAgICBkZWZhdWx0OgkJCQkJCSAgICBcCisJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisJCSAgICAgIH0KKyNlbmRpZgorCisJCSAgICBzd2l0Y2ggKHR5cGUpCisJCSAgICAgIHsKKwkJICAgICAgY2FzZSBUWVBFX1NDSEFSOgorCQkJeworCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3NjaGFyOworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKwkJICAgICAgY2FzZSBUWVBFX1VDSEFSOgorCQkJeworCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VjaGFyOworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKwkJICAgICAgY2FzZSBUWVBFX1NIT1JUOgorCQkJeworCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Nob3J0OworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKwkJICAgICAgY2FzZSBUWVBFX1VTSE9SVDoKKwkJCXsKKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91c2hvcnQ7CisJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIFRZUEVfSU5UOgorCQkJeworCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2ludDsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisJCSAgICAgIGNhc2UgVFlQRV9VSU5UOgorCQkJeworCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VpbnQ7CisJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKwkJCXsKKwkJCSAgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdpbnQ7CisJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6CisJCQl7CisJCQkgIHVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2ludDsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKwkJICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorCQkJeworCQkJICBsb25nIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nbG9uZ2ludDsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisJCQl7CisJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Vsb25nbG9uZ2ludDsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKwkJICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKwkJCXsKKwkJCSAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKwkJICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisJCQl7CisJCQkgIGxvbmcgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25nZG91YmxlOworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZgorCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKwkJCXsKKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jaGFyOworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKyNpZmRlZiBIQVZFX1dJTlRfVAorCQkgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorCQkJeworCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKwkJICAgICAgY2FzZSBUWVBFX1NUUklORzoKKwkJCXsKKwkJCSAgY29uc3QgY2hhciAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZzsKKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworCQkJfQorCQkJYnJlYWs7CisjaWZkZWYgSEFWRV9XQ0hBUl9UCisJCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKwkJCXsKKwkJCSAgY29uc3Qgd2NoYXJfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nOworCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZgorCQkgICAgICBjYXNlIFRZUEVfUE9JTlRFUjoKKwkJCXsKKwkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CisJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBkZWZhdWx0OgorCQkJYWJvcnQgKCk7CisJCSAgICAgIH0KKworI2lmIFVTRV9TTlBSSU5URgorCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKwkJICAgICAgIGFyZSBJU08gQyA5OSBjb21wbGlhbnQuICBEZXRlcm1pbmUgdGhlIG51bWJlciBvZgorCQkgICAgICAgYnl0ZXMgdGhhdCBzbnByaW50ZigpIGhhcyBwcm9kdWNlZCBvciB3b3VsZCBoYXZlCisJCSAgICAgICBwcm9kdWNlZC4gICovCisJCSAgICBpZiAoY291bnQgPj0gMCkKKwkJICAgICAgeworCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCisJCQkgICByZXN1bHQuICAqLworCQkJaWYgKGNvdW50IDwgbWF4bGVuICYmIHJlc3VsdFtsZW5ndGggKyBjb3VudF0gIT0gJ1wwJykKKwkJCSAgYWJvcnQgKCk7CisJCQkvKiBQb3J0YWJpbGl0eSBoYWNrLiAgKi8KKwkJCWlmIChyZXRjb3VudCA+IGNvdW50KQorCQkJICBjb3VudCA9IHJldGNvdW50OworCQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHsKKwkJCS8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCisJCQkgICBkaXJlY3RpdmUuICAqLworCQkJaWYgKHBbMV0gIT0gJ1wwJykKKwkJCSAgeworCQkJICAgIC8qIERvbid0IHVzZSB0aGUgJyVuJyBkaXJlY3RpdmU7IGluc3RlYWQsIGxvb2sKKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworCQkJICAgIHBbMV0gPSAnXDAnOworCQkJICAgIGNvbnRpbnVlOworCQkJICB9CisJCQllbHNlCisJCQkgIHsKKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisJCQkgICAgaWYgKHJldGNvdW50IDwgMCkKKwkJCSAgICAgIHsKKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisJCQkJICAgSXQgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nIGRpcmVjdGl2ZSwKKwkJCQkgICAqYW5kKiBpdCByZXR1cm5zIC0xIChyYXRoZXIgdGhhbiB0aGUgbGVuZ3RoCisJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisJCQkJICAgYnVmZmVyIGlzIHRvbyBzbWFsbC4gICovCisJCQkJc2l6ZV90IGJpZ2dlcl9uZWVkID0KKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworCQkJCUVOU1VSRV9BTExPQ0FUSU9OIChiaWdnZXJfbmVlZCk7CisJCQkJY29udGludWU7CisJCQkgICAgICB9CisJCQkgICAgZWxzZQorCQkJICAgICAgY291bnQgPSByZXRjb3VudDsKKwkJCSAgfQorCQkgICAgICB9CisjZW5kaWYKKworCQkgICAgLyogQXR0ZW1wdCB0byBoYW5kbGUgZmFpbHVyZS4gICovCisJCSAgICBpZiAoY291bnQgPCAwKQorCQkgICAgICB7CisJCQlpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKwkJCSAgZnJlZSAocmVzdWx0KTsKKwkJCWZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisJCQlDTEVBTlVQICgpOworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gTlVMTDsKKwkJICAgICAgfQorCisjaWYgIVVTRV9TTlBSSU5URgorCQkgICAgaWYgKGNvdW50ID49IHRtcF9sZW5ndGgpCisJCSAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCisJCQkgY29kZSBhYm92ZSEgICovCisJCSAgICAgIGFib3J0ICgpOworI2VuZGlmCisKKwkJICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCisJCSAgICBpZiAoY291bnQgPj0gbWF4bGVuKQorCQkgICAgICB7CisJCQkvKiBOZWVkIGF0IGxlYXN0IGNvdW50IGJ5dGVzLiAgQnV0IGFsbG9jYXRlCisJCQkgICBwcm9wb3J0aW9uYWxseSwgdG8gYXZvaWQgbG9vcGluZyBldGVybmFsbHkgaWYKKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisJCQlzaXplX3QgbiA9CisJCQkgIHhtYXggKHhzdW0gKGxlbmd0aCwgY291bnQpLCB4dGltZXMgKGFsbG9jYXRlZCwgMikpOworCisJCQlFTlNVUkVfQUxMT0NBVElPTiAobik7CisjaWYgVVNFX1NOUFJJTlRGCisJCQljb250aW51ZTsKKyNlbmRpZgorCQkgICAgICB9CisKKyNpZiBVU0VfU05QUklOVEYKKwkJICAgIC8qIFRoZSBzbnByaW50ZigpIHJlc3VsdCBkaWQgZml0LiAgKi8KKyNlbHNlCisJCSAgICAvKiBBcHBlbmQgdGhlIHNwcmludGYoKSByZXN1bHQuICAqLworCQkgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIHRtcCwgY291bnQgKiBzaXplb2YgKENIQVJfVCkpOworCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisJCSAgICAgIGZyZWUgKHRtcCk7CisjZW5kaWYKKworCQkgICAgbGVuZ3RoICs9IGNvdW50OworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgIC8qIEFkZCB0aGUgZmluYWwgTlVMLiAgKi8KKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisgICAgcmVzdWx0W2xlbmd0aF0gPSAnXDAnOworCisgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKyAgICAgIHsKKwkvKiBTaHJpbmsgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaWYgcG9zc2libGUuICAqLworCUNIQVJfVCAqbWVtb3J5OworCisJbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIChsZW5ndGggKyAxKSAqIHNpemVvZiAoQ0hBUl9UKSk7CisJaWYgKG1lbW9yeSAhPSBOVUxMKQorCSAgcmVzdWx0ID0gbWVtb3J5OworICAgICAgfQorCisgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgICBDTEVBTlVQICgpOworICAgICpsZW5ndGhwID0gbGVuZ3RoOworICAgIHJldHVybiByZXN1bHQ7CisKKyAgb3V0X29mX21lbW9yeToKKyAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKyAgICAgIGZyZWUgKHJlc3VsdCk7CisgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKyAgb3V0X29mX21lbW9yeV8xOgorICAgIENMRUFOVVAgKCk7CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworI3VuZGVmIFNOUFJJTlRGCisjdW5kZWYgVVNFX1NOUFJJTlRGCisjdW5kZWYgUFJJTlRGX1BBUlNFCisjdW5kZWYgRElSRUNUSVZFUworI3VuZGVmIERJUkVDVElWRQorI3VuZGVmIENIQVJfVAorI3VuZGVmIFZBU05QUklOVEYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3Zhc25wcmludGYuaCBiL2UyZnNwcm9ncy9pbnRsL3Zhc25wcmludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWYxYmMxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvdmFzbnByaW50Zi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKyNkZWZpbmUgX1ZBU05QUklOVEZfSAorCisvKiBHZXQgdmFfbGlzdC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIEdldCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBfX1NUUklDVF9BTlNJX18KKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisjIGVuZGlmCisvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpCisjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZglfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKyAgIHNpemUgaW4gKkxFTkdUSFA7IG90aGVyd2lzZSB5b3UgcGFzcyBSRVNVTFRCVUYgPSBOVUxMLgorICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisgICBudW1iZXIgb2YgcmVzdWx0aW5nIGJ5dGVzLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gIFVwb24gZXJyb3IsIHNldAorICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CitleHRlcm4gY2hhciAqIHZhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKworI2lmZGVmCV9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3Zhc253cHJpbnRmLmggYi9lMmZzcHJvZ3MvaW50bC92YXNud3ByaW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2VmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC92YXNud3ByaW50Zi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIHZzd3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfVkFTTldQUklOVEZfSAorI2RlZmluZSBfVkFTTldQUklOVEZfSAorCisvKiBHZXQgdmFfbGlzdC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIEdldCB3Y2hhcl90LCBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYJX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQgdG8gYSBzdHJpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkuCisgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKyAgIElmIHN1Y2Nlc3NmdWwsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nICh0aGlzIG1heSBiZSA9IFJFU1VMVEJVRgorICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKyAgIGVycm5vIGFuZCByZXR1cm4gTlVMTC4gICovCitleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CitleHRlcm4gd2NoYXJfdCAqIHZhc253cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpOworCisjaWZkZWYJX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1ZBU05XUFJJTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3dwcmludGYtcGFyc2UuaCBiL2UyZnNwcm9ncy9pbnRsL3dwcmludGYtcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGEyY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2ludGwvd3ByaW50Zi1wYXJzZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgICBVU0EuICAqLworCisjaWZuZGVmIF9XUFJJTlRGX1BBUlNFX0gKKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorCisjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKworCisvKiBGbGFncyAqLworI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworI2RlZmluZSBGTEFHX0xFRlQJIDIJLyogLSBmbGFnICovCisjZGVmaW5lIEZMQUdfU0hPV1NJR04JIDQJLyogKyBmbGFnICovCisjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworI2RlZmluZSBGTEFHX0FMVAkxNgkvKiAjIGZsYWcgKi8KKyNkZWZpbmUgRkxBR19aRVJPCTMyCisKKy8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworI2RlZmluZSBBUkdfTk9ORQkofihzaXplX3QpMCkKKworLyogQSBwYXJzZWQgZGlyZWN0aXZlLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IHdjaGFyX3QqIGRpcl9zdGFydDsKKyAgY29uc3Qgd2NoYXJfdCogZGlyX2VuZDsKKyAgaW50IGZsYWdzOworICBjb25zdCB3Y2hhcl90KiB3aWR0aF9zdGFydDsKKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfZW5kOworICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fc3RhcnQ7CisgIGNvbnN0IHdjaGFyX3QqIHByZWNpc2lvbl9lbmQ7CisgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworICB3Y2hhcl90IGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgZSBFIGcgRyBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworICBzaXplX3QgYXJnX2luZGV4OworfQord2NoYXJfdF9kaXJlY3RpdmU7CisKKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2l6ZV90IGNvdW50OworICB3Y2hhcl90X2RpcmVjdGl2ZSAqZGlyOworICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aDsKKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworfQord2NoYXJfdF9kaXJlY3RpdmVzOworCisKKy8qIFBhcnNlcyB0aGUgZm9ybWF0IHN0cmluZy4gIEZpbGxzIGluIHRoZSBudW1iZXIgTiBvZiBkaXJlY3RpdmVzLCBhbmQgZmlsbHMKKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorICAgdG8gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIEFsc28gZmlsbHMgaW4gdGhlIGFyZ190eXBlIGZpZWxkcyBvZiB0aGUKKyAgIGFyZ3VtZW50cyBhbmQgdGhlIG5lZWRlZCBjb3VudCBvZiBhcmd1bWVudHMuICAqLworI2lmZGVmIFNUQVRJQworU1RBVElDCisjZWxzZQorZXh0ZXJuCisjZW5kaWYKK2ludCB3cHJpbnRmX3BhcnNlIChjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHdjaGFyX3RfZGlyZWN0aXZlcyAqZCwgYXJndW1lbnRzICphKTsKKworI2VuZGlmIC8qIF9XUFJJTlRGX1BBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9pbnRsL3hzaXplLmggYi9lMmZzcHJvZ3MvaW50bC94c2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmUyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvaW50bC94c2l6ZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiB4c2l6ZS5oIC0tIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4KKworICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfWFNJWkVfSAorI2RlZmluZSBfWFNJWkVfSAorCisvKiBHZXQgc2l6ZV90LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IFNJWkVfTUFYLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKy8qIFRoZSBzaXplIG9mIG1lbW9yeSBvYmplY3RzIGlzIG9mdGVuIGNvbXB1dGVkIHRocm91Z2ggZXhwcmVzc2lvbnMgb2YKKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorICAgICAgdm9pZCogcCA9IG1hbGxvYyAoaGVhZGVyX3NpemUgKyBuICogZWxlbWVudF9zaXplKS4KKyAgIFRoZXNlIGNvbXB1dGF0aW9ucyBjYW4gbGVhZCB0byBvdmVyZmxvdy4gIFdoZW4gdGhpcyBoYXBwZW5zLCBtYWxsb2MoKQorICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisgICBjcmFzaGVzIHdoaWxlIGF0dGVtcHRpbmcgdG8gZmlsbCB0aGUgbWVtb3J5LgorICAgVG8gYXZvaWQgdGhpcywgdGhlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGluIHRoaXMgZmlsZSBjaGVjayBmb3Igb3ZlcmZsb3cuCisgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisgICBtYWxsb2MgKFNJWkVfTUFYKSBpcyBub3QgZ3VhcmFudGVlZCB0byBmYWlsIC0tIHRoaW5rIG9mIGEgbWFsbG9jCisgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbW1hcCAtLSwgaXQncyByZWNvbW1lbmRlZCB0byB1c2Ugc2l6ZV9vdmVyZmxvd19wKCkKKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisgICBUaGUgZXhhbXBsZSB0aHVzIGJlY29tZXM6CisgICAgICBzaXplX3Qgc2l6ZSA9IHhzdW0gKGhlYWRlcl9zaXplLCB4dGltZXMgKG4sIGVsZW1lbnRfc2l6ZSkpOworICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKyovCisKKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworI2RlZmluZSB4Y2FzdF9zaXplX3QoTikgXAorICAoKE4pIDw9IFNJWkVfTUFYID8gKHNpemVfdCkgKE4pIDogU0laRV9NQVgpCisKKy8qIFN1bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKK3sKKyAgc2l6ZV90IHN1bSA9IHNpemUxICsgc2l6ZTI7CisgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworfQorCisvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtMyAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMykKK3sKKyAgcmV0dXJuIHhzdW0gKHhzdW0gKHNpemUxLCBzaXplMiksIHNpemUzKTsKK30KKworLyogU3VtIG9mIGZvdXIgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworc3RhdGljIGlubGluZSBzaXplX3QKKyNpZiBfX0dOVUNfXyA+PSAzCitfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCit4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQoreworICByZXR1cm4geHN1bSAoeHN1bSAoeHN1bSAoc2l6ZTEsIHNpemUyKSwgc2l6ZTMpLCBzaXplNCk7Cit9CisKKy8qIE1heGltdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisjaWYgX19HTlVDX18gPj0gMworX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbmRpZgoreG1heCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIpCit7CisgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKyAgICAgbWF4IChTSVpFX01BWCwgbikgPT0gU0laRV9NQVggYW5kIG1heCAobiwgU0laRV9NQVgpID09IFNJWkVfTUFYLiAgKi8KKyAgcmV0dXJuIChzaXplMSA+PSBzaXplMiA/IHNpemUxIDogc2l6ZTIpOworfQorCisvKiBNdWx0aXBsaWNhdGlvbiBvZiBhIGNvdW50IHdpdGggYW4gZWxlbWVudCBzaXplLCB3aXRoIG92ZXJmbG93IGNoZWNrLgorICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKyAgIFRoaXMgaXMgYSBtYWNybywgbm90IGFuIGlubGluZSBmdW5jdGlvbiwgc28gdGhhdCBpdCB3b3JrcyBjb3JyZWN0bHkgZXZlbgorICAgd2hlbiBOIGlzIG9mIGEgd2lkZXIgdHVwZSBhbmQgTiA+IFNJWkVfTUFYLiAgKi8KKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorICAoKE4pIDw9IFNJWkVfTUFYIC8gKEVMU0laRSkgPyAoc2l6ZV90KSAoTikgKiAoRUxTSVpFKSA6IFNJWkVfTUFYKQorCisvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworI2RlZmluZSBzaXplX292ZXJmbG93X3AoU0laRSkgXAorICAoKFNJWkUpID09IFNJWkVfTUFYKQorLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisjZGVmaW5lIHNpemVfaW5fYm91bmRzX3AoU0laRSkgXAorICAoKFNJWkUpICE9IFNJWkVfTUFYKQorCisjZW5kaWYgLyogX1hTSVpFX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvQW5kcm9pZC5tayBiL2UyZnNwcm9ncy9saWIvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDUzZTdkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUgJChjYWxsIGFsbC1zdWJkaXItbWFrZWZpbGVzKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5ic2QtbGliIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5ic2QtbGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTA5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL01ha2VmaWxlLmJzZC1saWIKQEAgLTAsMCArMSw0NyBAQAorIworIyBUaGlzIGlzIGEgTWFrZWZpbGUgc3R1YiB3aGljaCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBCU0Qgc2hhcmVkCisjIGxpYnJhcmllcy4KKyMKKyMgSW4gb3JkZXIgdG8gdXNlIHRoaXMgc3R1YiwgdGhlIGZvbGxvd2luZyBtYWtlZmlsZSB2YXJpYWJsZXMgbXVzdCBiZSBkZWZpbmVkLgorIyAKKyMgQlNETElCX1ZFUlNJT04gPSAxLjAKKyMgQlNETElCX0lNQUdFID0gbGliY2UKKyMgQlNETElCX01ZRElSID0gZXQKKyMgQlNETElCX0lOU1RBTExfRElSID0gJChTSExJQkRJUikKKyMKKworYWxsOjogaW1hZ2UKKworcmVhbC1zdWJkaXJzOjogTWFrZWZpbGUKKwlAZWNobyAiCU1LRElSIHBpYyIKKwlAbWtkaXIgLXAgcGljCisKK0JTRF9MSUIgPSAkKEJTRExJQl9JTUFHRSkuc28uJChCU0RMSUJfVkVSU0lPTikKK0JTRExJQl9QSUNfRkxBRyA9IC1mcGljCisKK2ltYWdlOgkJJChCU0RfTElCKQorCiskKEJTRF9MSUIpOiAkKE9CSlMpCisJKGNkIHBpYzsgbGQgLUJzaGFyZWFibGUgLW8gJChCU0RfTElCKSAkKExERkxBR1MpICQoT0JKUykpCisJJChNVikgcGljLyQoQlNEX0xJQikgLgorCSQoUk0pIC1mIC4uLyQoQlNEX0xJQikKKwkoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgXAorCQlgZWNobyAkKG15X2RpcikgfCBzZWQgLWUgJ3M7bGliLzs7J2AvJChCU0RfTElCKSAkKEJTRF9MSUIpKQorCitpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChCU0RfTElCKQorCUBlY2hvICIJSU5TVEFMTF9QUk9HUkFNICQoQlNETElCX0lOU1RBTExfRElSKS8kKEJTRF9MSUIpIgorCUAkKElOU1RBTExfUFJPR1JBTSkgJChCU0RfTElCKSBcCisJCSQoREVTVERJUikkKEJTRExJQl9JTlNUQUxMX0RJUikvJChCU0RfTElCKQorCUAtJChMRENPTkZJRykKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsLXNobGlicy1zdHJpcDogaW5zdGFsbC1zaGxpYnMKKwordW5pbnN0YWxsLXNobGlicyB1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKEJTRExJQl9JTlNUQUxMX0RJUikvJChCU0RfTElCKQorCitjbGVhbjo6CisJJChSTSkgLXJmIHBpYworCSQoUk0pIC1mICQoQlNEX0xJQikKKwkkKFJNKSAtZiAuLi8kKEJTRF9MSUIpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL01ha2VmaWxlLmNoZWNrZXIgYi9lMmZzcHJvZ3MvbGliL01ha2VmaWxlLmNoZWNrZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmZjBmNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUuY2hlY2tlcgpAQCAtMCwwICsxLDE3IEBACithbGw6OiAkKExJQlJBUlkpX2Noay5hCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIGNoZWNrZXIiCisJJChRKSBta2RpciAtcCBjaGVja2VyCisKK2NsZWFuOjoKKwkkKFJNKSAtcmYgY2hlY2tlcgorCiskKExJQlJBUlkpX2Noay5hOiAkKE9CSlMpCisJJChFKSAiCUdFTl9DSEVDS0VSX0xJQiAkQCIKKwkkKFEpICh0ZXN0IC1yICRAICYmICQoUk0pIC1mICRALmJhayAmJiAkKE1WKSAkQCAkQC5iYWspCisJJChRKSAoY2QgY2hlY2tlcjsgJChBUkdFTikgJEAgJChPQkpTKSkKKwktJChRKSAkKFJBTkxJQikgJEAKKwkkKFEpICQoUk0pIC1mIC4uLyRACisJJChRKSAoY2QgLi4gOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpIFwKKwkgICAgIGBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kQCAkQCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUuZGFyd2luLWxpYiBiL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUuZGFyd2luLWxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRhNWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5kYXJ3aW4tbGliCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgVGhpcyBpcyBhIE1ha2VmaWxlIHN0dWIgd2hpY2ggaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgRGFyd2luIEJTRCBzaGFyZWQKKyMgbGlicmFyaWVzLgorIworIyBJbiBvcmRlciB0byB1c2UgdGhpcyBzdHViLCB0aGUgZm9sbG93aW5nIG1ha2VmaWxlIHZhcmlhYmxlcyBtdXN0IGJlIGRlZmluZWQuCisjCisjIEJTRExJQl9WRVJTSU9OID0gMS4wCisjIEJTRExJQl9JTUFHRSA9IGxpYmNlCisjIEJTRExJQl9NWURJUiA9IGV0CisjIEJTRExJQl9JTlNUQUxMX0RJUiA9ICQoU0hMSUJESVIpCisjCisKK2FsbDo6IGltYWdlCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIHBpYyIKKwkkKFEpIG1rZGlyIC1wIHBpYworCitCU0RfTElCID0gJChCU0RMSUJfSU1BR0UpLiQoQlNETElCX1ZFUlNJT04pLmR5bGliCitCU0RMSUJfUElDX0ZMQUcgPSAtZlBJQworCitpbWFnZToJCSQoQlNEX0xJQikKKworJChCU0RfTElCKTogJChPQkpTKQorCSQoRSkgIglHRU5fQlNEX1NPTElCICQoQlNEX0xJQikiCisJJChRKSAoY2QgcGljOyAkKENDKSAtZHluYW1pY2xpYiAtY29tcGF0aWJpbGl0eV92ZXJzaW9uIDEuMCAtY3VycmVudF92ZXJzaW9uICQoQlNETElCX1ZFUlNJT04pIFwKKwkJLWZsYXRfbmFtZXNwYWNlIC11bmRlZmluZWQgd2FybmluZyAtbyAkKEJTRF9MSUIpICQoT0JKUykpCisJJChRKSAkKE1WKSBwaWMvJChCU0RfTElCKSAuCisJJChRKSAkKFJNKSAtZiAuLi8kKEJTRF9MSUIpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgXAorCQlgZWNobyAkKG15X2RpcikgfCBzZWQgLWUgJ3M7bGliLzs7J2AvJChCU0RfTElCKSAkKEJTRF9MSUIpKQorCSQoUSkgKGNkIC4uOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpICQoQlNEX0xJQikgJChCU0RMSUJfSU1BR0UpLmR5bGliKQorCitpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChCU0RfTElCKQorCSQoRSkgIglJTlNUQUxMX1BST0dSQU0gJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikiCisJJChRKSAkKElOU1RBTExfUFJPR1JBTSkgJChCU0RfTElCKSBcCisJCSQoREVTVERJUikkKEJTRExJQl9JTlNUQUxMX0RJUikvJChCU0RfTElCKQorCS0kKFEpICQoTERDT05GSUcpCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbC1zaGxpYnMtc3RyaXA6IGluc3RhbGwtc2hsaWJzCisKK3VuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChCU0RMSUJfSU5TVEFMTF9ESVIpLyQoQlNEX0xJQikKKworY2xlYW46OgorCSQoUk0pIC1yZiBwaWMKKwkkKFJNKSAtZiAkKEJTRF9MSUIpCisJJChSTSkgLWYgLi4vJChCU0RfTElCKQorCSQoUk0pIC1mIC4uLyQoQlNETElCX0lNQUdFKS5keWxpYgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5lbGYtbGliIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5lbGYtbGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDc5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL01ha2VmaWxlLmVsZi1saWIKQEAgLTAsMCArMSw3NSBAQAorIworIyBUaGlzIGlzIGEgTWFrZWZpbGUgc3R1YiB3aGljaCBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBMaW51eCBFTEYgc2hhcmVkCisjIGxpYnJhcmllcy4KKyMKKyMgSW4gb3JkZXIgdG8gdXNlIHRoaXMgc3R1YiwgdGhlIGZvbGxvd2luZyBtYWtlZmlsZSB2YXJpYWJsZXMgbXVzdCBiZSBkZWZpbmVkLgorIyAKKyMgRUxGX1ZFUlNJT04gPSAxLjAKKyMgRUxGX1NPX1ZFUlNJT04gPSAxCisjIEVMRl9JTUFHRSA9IGxpYmNlCisjIEVMRl9NWURJUiA9IGV0CisjIEVMRl9JTlNUQUxMX0RJUiA9ICQoU0hMSUJESVIpCisjIEVMRl9PVEhFUl9MSUJTID0gLWxjCisKK2FsbDo6IGltYWdlCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIGVsZnNoYXJlZCIKKwkkKFEpIG1rZGlyIC1wIGVsZnNoYXJlZAorCitFTEZfTElCID0gJChFTEZfSU1BR0UpLnNvLiQoRUxGX1ZFUlNJT04pCitFTEZfU09OQU1FID0gJChFTEZfSU1BR0UpLnNvLiQoRUxGX1NPX1ZFUlNJT04pCisKK2ltYWdlOgkJJChFTEZfTElCKQorCiskKEVMRl9MSUIpOiAkKE9CSlMpCisJJChFKSAiCUdFTl9FTEZfU09MSUIgJChFTEZfTElCKSIKKwkkKFEpIChjZCBlbGZzaGFyZWQ7ICQoQ0MpIC0tc2hhcmVkIC1vICQoRUxGX0xJQikgXAorCQktTCQodG9wX2J1aWxkZGlyKS8uLi9saWIgJChMREZMQUdTKSBcCisJCS1XbCwtc29uYW1lLCQoRUxGX1NPTkFNRSkgJChPQkpTKSAkKEVMRl9PVEhFUl9MSUJTKSkKKwkkKFEpICQoTVYpIGVsZnNoYXJlZC8kKEVMRl9MSUIpIC4KKwkkKFEpICQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kKEVMRl9MSUIpICQoRUxGX0xJQikpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9JTUFHRSkuc28pCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9TT05BTUUpKQorCitpbnN0YWxsZGlycy1lbGYtbGliOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKEVMRl9JTlNUQUxMX0RJUikgJChsaWJkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpIFwKKwkJJChERVNURElSKSQobGliZGlyKQorCitpbnN0YWxsZGlyczo6IGluc3RhbGxkaXJzLWVsZi1saWIKKworaW5zdGFsbC1zaGxpYnMgaW5zdGFsbDo6ICQoRUxGX0xJQikgaW5zdGFsbGRpcnMtZWxmLWxpYiAkKERFUF9JTlNUQUxMX1NZTUxJTkspCisJJChFKSAiCUlOU1RBTEwtRUxGLUxJQiAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSIKKwkkKFEpICQoSU5TVEFMTF9QUk9HUkFNKSAkKEVMRl9MSUIpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCSQoRSkgIglTWU1MSU5LICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIgorCSQoUSkgJChJTlNUQUxMX1NZTUxJTkspICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKwkJJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgJChERVNURElSKQorCSQoRSkgIglTWU1MSU5LICQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28iCisJJChRKSAkKElOU1RBTExfU1lNTElOSykgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorCQkkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvICQoREVTVERJUikKKwkkKEUpICIJTERDT05GSUciCisJJChRKSAtJChMRENPTkZJRykKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCSQoRSkgIglTVFJJUC1MSUIgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikiCisJJChRKSAkKFNUUklQKSAtLXN0cmlwLXVubmVlZGVkIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgXAorCQktLXJlbW92ZS1zZWN0aW9uPS5ub3RlICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCitpbnN0YWxsLXNobGlicy1zdHJpcDogaW5zdGFsbC1zaGxpYnMKKwkkKEUpICIJU1RSSVAtTElCICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIgorCSQoUSkgJChTVFJJUCkgLS1zdHJpcC11bm5lZWRlZCAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50IFwKKwkJLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikKKwordW5pbnN0YWxsLXNobGlicyB1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSBcCisJCSQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisJCSQoREVTVERJUikkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvCisJLSQoTERDT05GSUcpCisKK2NsZWFuOjoKKwkkKFJNKSAtcmYgZWxmc2hhcmVkCisJJChSTSkgLWYgJChFTEZfTElCKQorCSQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUubGlicmFyeSBiL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUubGlicmFyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg2YjAyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5saWJyYXJ5CkBAIC0wLDAgKzEsMjUgQEAKK2FsbDo6IHN1YmRpcnMgJChMSUJSQVJZKS5hCisKK2luc3RhbGwtc2hsaWJzOjoKKwordW5pbnN0YWxsLXNobGliczo6CisKK3JlYWwtc3ViZGlyczo6CisKK3N1YmRpcnM6OiBNYWtlZmlsZQorCSQoUSkgJChNQUtFKSAtcyByZWFsLXN1YmRpcnMKKwkkKFEpIHRvdWNoIHN1YmRpcnMKKworY2xlYW46OgorCSQoUSkgJChSTSkgLWYgc3ViZGlycworCiskKExJQlJBUlkpLmE6ICQoT0JKUykKKwkkKEUpICIJR0VOX0xJQiAkQCIKKwkkKFEpIChpZiB0ZXN0IC1yICRAOyB0aGVuICQoUk0pIC1mICRALmJhayAmJiAkKE1WKSAkQCAkQC5iYWs7IGZpKQorCSQoUSkgJChBUkdFTikgJEAgJChPQkpTKQorCS1AJChSQU5MSUIpICRACisJJChRKSAkKFJNKSAtZiAuLi8kQAorCSQoUSkgKGNkIC4uOyAkKExOKSAkKExJTktfQlVJTERfRkxBR1MpIFwKKwkJYGVjaG8gJChteV9kaXIpIHwgc2VkIC1lICdzO2xpYi87OydgLyRAICRAKQorCiskKExJQikvJChMSUJSQVJZKS5hOiAkKExJQlJBUlkpLmEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUucHJvZmlsZSBiL2UyZnNwcm9ncy9saWIvTWFrZWZpbGUucHJvZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBmNWJjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5wcm9maWxlCkBAIC0wLDAgKzEsMjcgQEAKK2FsbDo6ICQoTElCUkFSWSlfcC5hCisKK3JlYWwtc3ViZGlyczo6IE1ha2VmaWxlCisJJChFKSAiCU1LRElSIHByb2ZpbGVkIgorCSQoUSkgbWtkaXIgLXAgcHJvZmlsZWQKKworY2xlYW46OgorCSQoUk0pIC1yZiBwcm9maWxlZAorCSQoUk0pIC1mICQoTElCUkFSWSlfcC5hIC4uLyQoTElCUkFSWSlfcC5hCisKKyQoTElCUkFSWSlfcC5hOiAkKE9CSlMpCisJJChFKSAiCUdFTl9QUk9GSUxFRF9MSUIgJChFTEZfTElCKSIKKwkkKFEpIChpZiB0ZXN0IC1yICRAOyB0aGVuICQoUk0pIC1mICRALmJhayAmJiAkKE1WKSAkQCAkQC5iYWs7IGZpKQorCSQoUSkgKGNkIHByb2ZpbGVkOyAkKEFSVVBEKSAuLi8kQCAkKE9CSlMpKQorCS0kKFEpICQoUkFOTElCKSAkQAorCSQoUSkgJChSTSkgLWYgLi4vJEAKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kQCAkQCkKKworaW5zdGFsbDo6ICQoTElCUkFSWSlfcC5hIGluc3RhbGxkaXJzCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvJChMSUJSQVJZKV9wLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgJChMSUJSQVJZKV9wLmEgJChERVNURElSKSQobGliZGlyKS8kKExJQlJBUlkpX3AuYQorCS0kKFEpICQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCUkFSWSlfcC5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvJChMSUJSQVJZKV9wLmEKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCUkFSWSlfcC5hCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL01ha2VmaWxlLnNvbGFyaXMtbGliIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5zb2xhcmlzLWxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkwYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9NYWtlZmlsZS5zb2xhcmlzLWxpYgpAQCAtMCwwICsxLDY1IEBACisjCisjIFRoaXMgaXMgYSBNYWtlZmlsZSBzdHViIHdoaWNoIGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIExpbnV4IEVMRiBzaGFyZWQKKyMgbGlicmFyaWVzLgorIworIyBJbiBvcmRlciB0byB1c2UgdGhpcyBzdHViLCB0aGUgZm9sbG93aW5nIG1ha2VmaWxlIHZhcmlhYmxlcyBtdXN0IGJlIGRlZmluZWQuCisjIAorIyBFTEZfVkVSU0lPTiA9IDEuMAorIyBFTEZfU09fVkVSU0lPTiA9IDEKKyMgRUxGX0lNQUdFID0gbGliY2UKKyMgRUxGX01ZRElSID0gZXQKKyMgRUxGX0lOU1RBTExfRElSID0gJChTSExJQkRJUikKKyMgRUxGX09USEVSX0xJQlMgPSAtbGMKKworYWxsOjogaW1hZ2UKKworcmVhbC1zdWJkaXJzOjogTWFrZWZpbGUKKwkkKEUpICIJTUtESVIgZWxmc2hhcmVkIgorCSQoUSkgbWtkaXIgLXAgZWxmc2hhcmVkCisKK0VMRl9MSUIgPSAkKEVMRl9JTUFHRSkuc28uJChFTEZfVkVSU0lPTikKK0VMRl9TT05BTUUgPSAkKEVMRl9JTUFHRSkuc28uJChFTEZfU09fVkVSU0lPTikKKworaW1hZ2U6CQkkKEVMRl9MSUIpCisKKyQoRUxGX0xJQik6ICQoT0JKUykKKwkkKEUpICIJR0VOX0VMRl9TT0xJQiAkKEVMRl9MSUIpIgorCSQoUSkgKGNkIGVsZnNoYXJlZDsgJChDQykgLS1zaGFyZWQgLW8gJChFTEZfTElCKSBcCisJCS1MJCh0b3BfYnVpbGRkaXIpLy4uL2xpYiAkKExERkxBR1MpIFwKKwkJLVdsLC1oLCQoRUxGX1NPTkFNRSkgJChPQkpTKSAkKEVMRl9PVEhFUl9MSUJTKSkKKwkkKFEpICQoTVYpIGVsZnNoYXJlZC8kKEVMRl9MSUIpIC4KKwkkKFEpICQoUk0pIC1mIC4uLyQoRUxGX0xJQikgLi4vJChFTEZfSU1BR0UpLnNvIC4uLyQoRUxGX1NPTkFNRSkKKwkkKFEpIChjZCAuLjsgJChMTikgJChMSU5LX0JVSUxEX0ZMQUdTKSBcCisJCWBlY2hvICQobXlfZGlyKSB8IHNlZCAtZSAncztsaWIvOzsnYC8kKEVMRl9MSUIpICQoRUxGX0xJQikpCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9JTUFHRSkuc28pCisJJChRKSAoY2QgLi47ICQoTE4pICQoTElOS19CVUlMRF9GTEFHUykgJChFTEZfTElCKSAkKEVMRl9TT05BTUUpKQorCitpbnN0YWxsZGlycy1lbGYtbGliOjoKKwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikgXAorCQkkKERFU1RESVIpJChsaWJkaXIpCisKK2luc3RhbGxkaXJzOjogaW5zdGFsbGRpcnMtZWxmLWxpYgorCitpbnN0YWxsLXNobGlicyBpbnN0YWxsOjogJChFTEZfTElCKSBpbnN0YWxsZGlycy1lbGYtbGliCisJJChJTlNUQUxMX1BST0dSQU0pICQoRUxGX0xJQikgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpCisJJChMTl9TKSAtZiAkKEVMRl9MSUIpICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKQorCSQoTE5fUykgLWYgJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX1NPTkFNRSkgXAorCQkkKERFU1RESVIpJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbworCS0kKExEQ09ORklHKQorCitpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisJJChTVFJJUCkgLXggJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpCisKK2luc3RhbGwtc2hsaWJzLXN0cmlwOiBpbnN0YWxsLXNobGlicworCSQoU1RSSVApIC14ICQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKQorCit1bmluc3RhbGwtc2hsaWJzIHVuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKwkJJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIFwKKwkJJChERVNURElSKSQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28KKwktJChMRENPTkZJRykKKworY2xlYW46OgorCSQoUk0pIC1yZiBlbGZzaGFyZWQKKwkkKFJNKSAtZiAkKEVMRl9MSUIpCisJJChSTSkgLWYgLi4vJChFTEZfTElCKSAuLi8kKEVMRl9JTUFHRSkuc28gLi4vJChFTEZfU09OQU1FKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC9BbmRyb2lkLm1rIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDU5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL0FuZHJvaWQubWsKQEAgLTAsMCArMSw5MyBAQAorTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorCitsaWJleHQyX2Jsa2lkX3NyY19maWxlcyA6PSBcCisJY2FjaGUuYyBcCisJZGV2LmMgXAorCWRldm5hbWUuYyBcCisJZGV2bm8uYyBcCisJZ2V0c2l6ZS5jIFwKKwlsbHNlZWsuYyBcCisJcHJvYmUuYyBcCisJcmVhZC5jIFwKKwlyZXNvbHZlLmMgXAorCXNhdmUuYyBcCisJdGFnLmMgXAorCXZlcnNpb24uYyBcCisKKworbGliZXh0Ml9ibGtpZF9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmV4dDJfdXVpZAorCitsaWJleHQyX2Jsa2lkX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmMKKworbGliZXh0Ml9ibGtpZF9zdGF0aWNfbGlicmFyaWVzIDo9IGxpYmV4dDJfdXVpZF9zdGF0aWMKKworbGliZXh0Ml9ibGtpZF9zeXN0ZW1fc3RhdGljX2xpYnJhcmllcyA6PSBsaWJjCisKK2xpYmV4dDJfYmxraWRfY19pbmNsdWRlcyA6PSBleHRlcm5hbC9lMmZzcHJvZ3MvbGliCisKK2xpYmV4dDJfYmxraWRfY2ZsYWdzIDo9IC1PMiAtZyAtVyAtV2FsbCAtZm5vLXN0cmljdC1hbGlhc2luZyBcCisJLURIQVZFX1VOSVNURF9IIFwKKwktREhBVkVfRVJSTk9fSCBcCisJLURIQVZFX05FVElORVRfSU5fSCBcCisJLURIQVZFX1NZU19JT0NUTF9IIFwKKwktREhBVkVfU1lTX01NQU5fSCBcCisJLURIQVZFX1NZU19NT1VOVF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkRVUCBcCisJLURIQVZFX01NQVAgXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfR0VUUEFHRVNJWkUgXAorCS1ESEFWRV9FWFQyX0lPQ1RMUyBcCisJLURIQVZFX1RZUEVfU1NJWkVfVCBcCisJLURIQVZFX1NZU19USU1FX0ggXAorICAgICAgICAtREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GIFwKKwktV25vLXVudXNlZC1wYXJhbWV0ZXIKKworbGliZXh0Ml9ibGtpZF9jZmxhZ3NfbGludXggOj0gXAorCS1ESEFWRV9MSU5VWF9GRF9IIFwKKwktREhBVkVfU1lTX1BSQ1RMX0ggXAorCS1ESEFWRV9MU0VFSzY0IFwKKwktREhBVkVfTFNFRUs2NF9QUk9UT1RZUEUKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfYmxraWRfc3JjX2ZpbGVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChsaWJleHQyX2Jsa2lkX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGxpYmV4dDJfYmxraWRfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX2Jsa2lkX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2Jsa2lkX2NmbGFncykgJChsaWJleHQyX2Jsa2lkX2NmbGFnc19saW51eCkgLWZuby1zdHJpY3QtYWxpYXNpbmcKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX2Jsa2lkCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyX2Jsa2lkX3NyY19maWxlcykKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gJChsaWJleHQyX2Jsa2lkX3N0YXRpY19saWJyYXJpZXMpICQobGliZXh0Ml9ibGtpZF9zeXN0ZW1fc3RhdGljX2xpYnJhcmllcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX2Jsa2lkX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2Jsa2lkX2NmbGFncykgJChsaWJleHQyX2Jsa2lkX2NmbGFnc19saW51eCkgLWZuby1zdHJpY3QtYWxpYXNpbmcKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX2Jsa2lkCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyX2Jsa2lkX3NyY19maWxlcykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChhZGRzdWZmaXggLWhvc3QsICQobGliZXh0Ml9ibGtpZF9zaGFyZWRfbGlicmFyaWVzKSkKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX2Jsa2lkX2NfaW5jbHVkZXMpCitpZmVxICgkKEhPU1RfT1MpLGxpbnV4KQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9ibGtpZF9jZmxhZ3MpICQobGliZXh0Ml9ibGtpZF9jZmxhZ3NfbGludXgpCitlbHNlCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2Jsa2lkX2NmbGFncykKK2VuZGlmCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9ibGtpZC1ob3N0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfSE9TVF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTVjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjIzIEBACisjIE1ha2VmaWxlIGZvciBsaWJibGtpZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEgVGhlb2RvcmUgVHMnbyAodHl0c29AbWl0LmVkdSkKKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorbXlfZGlyID0gbGliL2Jsa2lkCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCithbGw6OiAKKworU01BTlBBR0VTPQlsaWJibGtpZC4zCisKK09CSlM9IGNhY2hlLm8gZGV2Lm8gZGV2bmFtZS5vIGRldm5vLm8gZ2V0c2l6ZS5vIGxsc2Vlay5vIHByb2JlLm8gXAorIHJlYWQubyByZXNvbHZlLm8gc2F2ZS5vIHRhZy5vIHZlcnNpb24ubyAKKworU1JDUz0gJChzcmNkaXIpL2NhY2hlLmMgJChzcmNkaXIpL2Rldi5jICQoc3JjZGlyKS9kZXZuYW1lLmMgJChzcmNkaXIpL2Rldm5vLmMgXAorICQoc3JjZGlyKS9nZXRzaXplLmMgJChzcmNkaXIpL2xsc2Vlay5jICQoc3JjZGlyKS9wcm9iZS5jIFwKKyAkKHNyY2RpcikvcmVhZC5jICQoc3JjZGlyKS9yZXNvbHZlLmMgJChzcmNkaXIpL3NhdmUuYyAkKHNyY2RpcikvdGFnLmMgXAorICQoc3JjZGlyKS92ZXJzaW9uLmMKKworSEZJTEVTX0lOPQlibGtpZC5oIGJsa2lkX3R5cGVzLmgKKworTElCUkFSWT0gbGliYmxraWQKK0xJQkRJUj0gYmxraWQKKworRUxGX1ZFUlNJT04gPSAxLjAKK0VMRl9TT19WRVJTSU9OID0gMQorRUxGX0lNQUdFID0gbGliYmxraWQKK0VMRl9NWURJUiA9IGJsa2lkCitFTEZfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorRUxGX09USEVSX0xJQlMgPSAtbHV1aWQKKworQlNETElCX1ZFUlNJT04gPSAyLjAKK0JTRExJQl9JTUFHRSA9IGxpYmJsa2lkCitCU0RMSUJfTVlESVIgPSBibGtpZAorQlNETElCX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKworQE1BS0VGSUxFX0xJQlJBUllACitATUFLRUZJTEVfRUxGQAorQE1BS0VGSUxFX0JTRExJQkAKK0BNQUtFRklMRV9QUk9GSUxFQAorQE1BS0VGSUxFX0NIRUNLRVJACisKK0xJQlNfQkxLSUQ9CSQoU1RBVElDX0xJQkJMS0lEKSAkKFNUQVRJQ19MSUJVVUlEKQorREVQTElCU19CTEtJRD0JJChERVBTVEFUSUNfTElCQkxLSUQpICQoREVQU1RBVElDX0xJQlVVSUQpCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC8kKi5vIC1jICQ8CitAQ0hFQ0tFUl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtY2hlY2tlciAtZyAtbyBjaGVja2VyLyQqLm8gLWMgJDwKK0BFTEZfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWZQSUMgLW8gZWxmc2hhcmVkLyQqLm8gLWMgJDwKK0BCU0RMSUJfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgJChCU0RMSUJfUElDX0ZMQUcpIC1vIHBpYy8kKi5vIC1jICQ8CisKK2FsbDo6ICQoU01BTlBBR0VTKSBibGtpZC5wYworCitibGtpZF90eXBlcy5oOiAkKHNyY2RpcikvYmxraWRfdHlwZXMuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBcCisJCUNPTkZJR19GSUxFUz0kKG15X2RpcikvYmxraWRfdHlwZXMuaCAuL2NvbmZpZy5zdGF0dXMKKworYmxraWQuaDogJChzcmNkaXIpL2Jsa2lkLmguaW4KKwkkKEUpICIJQ1AgJEAiCisJJChRKSBjcCAkKHNyY2RpcikvYmxraWQuaC5pbiBibGtpZC5oCisKK2xpYmJsa2lkLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9saWJibGtpZC4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2xpYmJsa2lkLjMuaW4gbGliYmxraWQuMworCit0c3RfY2FjaGU6ICQoc3JjZGlyKS9jYWNoZS5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfY2FjaGUgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL2NhY2hlLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF9kZXY6ICQoc3JjZGlyKS9kZXYuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2RldiAtRFRFU1RfUFJPR1JBTSAkKHNyY2RpcikvZGV2LmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF9kZXZuYW1lOiAkKHNyY2RpcikvZGV2bmFtZS5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfZGV2bmFtZSAtRFRFU1RfUFJPR1JBTSAkKHNyY2RpcikvZGV2bmFtZS5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfZGV2bm86ICQoc3JjZGlyKS9kZXZuby5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfZGV2bm8gLURURVNUX1BST0dSQU0gJChzcmNkaXIpL2Rldm5vLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF9nZXRzaXplOiAkKHNyY2RpcikvZ2V0c2l6ZS5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfZ2V0c2l6ZSAtRFRFU1RfUFJPR1JBTSAkKHNyY2RpcikvZ2V0c2l6ZS5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfcHJvYmU6ICQoc3JjZGlyKS9wcm9iZS5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfcHJvYmUgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL3Byb2JlLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF9yZWFkOiAkKHNyY2RpcikvcmVhZC5jICQoREVQTElCU19CTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfcmVhZCAtRFRFU1RfUFJPR1JBTSAkKHNyY2RpcikvcmVhZC5jICQoTElCU19CTEtJRCkgJChBTExfQ0ZMQUdTKQorCit0c3RfcmVzb2x2ZTogJChzcmNkaXIpL3Jlc29sdmUuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3Jlc29sdmUgLURURVNUX1BST0dSQU0gJChzcmNkaXIpL3Jlc29sdmUuYyAkKExJQlNfQkxLSUQpICQoQUxMX0NGTEFHUykKKwordHN0X3NhdmU6ICQoc3JjZGlyKS9zYXZlLmMgJChERVBMSUJTX0JMS0lEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9zYXZlIC1EVEVTVF9QUk9HUkFNICQoc3JjZGlyKS9zYXZlLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF90YWc6ICQoc3JjZGlyKS90YWcuYyAkKERFUExJQlNfQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X3RhZyAtRFRFU1RfUFJPR1JBTSAkKHNyY2RpcikvdGFnLmMgJChMSUJTX0JMS0lEKSAkKEFMTF9DRkxBR1MpCisKK3RzdF90eXBlczogdHN0X3R5cGVzLm8gYmxraWRfdHlwZXMuaCAKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfdHlwZXMgdHN0X3R5cGVzLm8gCisKKy4uLy4uL21pc2MvYmxraWQubzogJCh0b3Bfc3JjZGlyKS9taXNjL2Jsa2lkLmMgYmxraWQuaAorCSQoRSkgIglDQyAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJCh0b3Bfc3JjZGlyKS9taXNjL2Jsa2lkLmMgXAorCQktbyAuLi8uLi9taXNjL2Jsa2lkLm8KKworYmxraWQ6IC4uLy4uL21pc2MvYmxraWQubyBsaWJibGtpZC5hICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyBibGtpZCAuLi8uLi9taXNjL2Jsa2lkLm8gbGliYmxraWQuYSAkKExJQlVVSUQpCisKK3Rlc3RfcHJvYmU6IHRlc3RfcHJvYmUuaW4gTWFrZWZpbGUKKwkkKEUpICJDcmVhdGluZyB0ZXN0X3Byb2JlLi4uIgorCSQoRSkgIiMhL2Jpbi9zaCIgPiB0ZXN0X3Byb2JlCisJJChFKSAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X3Byb2JlCisJJChRKSBjYXQgJChzcmNkaXIpL3Rlc3RfcHJvYmUuaW4gPj4gdGVzdF9wcm9iZQorCSQoUSkgY2htb2QgK3ggdGVzdF9wcm9iZQorCitjaGVjazo6IGFsbCB0c3RfY2FjaGUgdHN0X2RldiB0c3RfZGV2bmFtZSB0c3RfZGV2bm8gdHN0X2dldHNpemUgdHN0X3Byb2JlIFwKKyB0c3RfcmVhZCB0c3RfcmVzb2x2ZSB0c3Rfc2F2ZSB0c3RfdGFnIHRlc3RfcHJvYmUgdHN0X3R5cGVzCisJLi90ZXN0X3Byb2JlCisJLi90c3RfdHlwZXMKKworYmxraWQucGM6ICQoc3JjZGlyKS9ibGtpZC5wYy5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL2Jsa2lkL2Jsa2lkLnBjIC4vY29uZmlnLnN0YXR1cworCitpbnN0YWxsZGlyczo6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChsaWJkaXIpICQoaW5jbHVkZWRpcikvYmxraWQiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgXAorCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ibGtpZCAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZworCitpbnN0YWxsOjogYWxsIGluc3RhbGxkaXJzIAorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL2xpYmJsa2lkLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGliYmxraWQuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmJsa2lkLmEKKwktJChRKSAkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJibGtpZC5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGliYmxraWQuYQorCSQoUSkgc2V0IC1lOyBmb3IgaSBpbiAkKEhGSUxFU19JTik7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2Jsa2lkLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ibGtpZC8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKG1hbjNkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW4zZGlyKS8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvcGtnY29uZmlnL2Jsa2lkLnBjIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGJsa2lkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL2Jsa2lkLnBjCisKK3VuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQobGliZGlyKS9saWJibGtpZC5hIFwKKwkJJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvYmxraWQucGMKKwkkKFJNKSAtcmYgJChERVNURElSKSQoaW5jbHVkZWRpcikvYmxraWQKKwlmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuM2RpcikvJCRpOyBcCisJZG9uZQorCitjbGVhbjo6CisJJChSTSkgLWYgXCMqICoucyAqLm8gKi5vcmlnICouYSAqfiAqLmJhayB0c3RfY2FjaGUgdHN0X2RldiB0c3RfZGV2bmFtZSBcCisJCXRzdF9kZXZubyB0c3RfZ2V0c2l6ZSB0c3RfcHJvYmUgdHN0X3JlYWQgdHN0X3Jlc29sdmUgdHN0X3NhdmUgXAorCQl0c3RfdGFnIHRzdF90eXBlcyB0ZXN0cy8qLm91dCB0ZXN0cy8qLm9rIFwKKwkJdGVzdHMvKi5pbWcgcmVzdWx0cyB0ZXN0X3Byb2JlIGNvcmUgcHJvZmlsZWQvKiBcCisJCWNoZWNrZXIvKiBibGtpZC5oIGJsa2lkX3R5cGVzLmggLi4vbGliYmxraWQuYSAuLi9saWJibGtpZF9wLmEgXAorCQkkKFNNQU5QQUdFUykgYmxraWQKKwlAZWNobyBybWRpciB0ZXN0cy90bXAgdGVzdHMKKwlAKHJtZGlyIHRlc3RzL3RtcCB0ZXN0cyAyPiAvZGV2L251bGwgOyBleGl0IDApCisKK21vc3RseWNsZWFuOjogY2xlYW4KK2Rpc3RjbGVhbjo6IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSBibGtpZC5wYyBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworJChPQkpTKTogc3ViZGlycyAkKEhGSUxFU19JTikKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitjYWNoZS5vOiAkKHNyY2RpcikvY2FjaGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2Jsa2lkUC5oICQoc3JjZGlyKS9saXN0LmgKK2Rldi5vOiAkKHNyY2RpcikvZGV2LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitkZXZuYW1lLm86ICQoc3JjZGlyKS9kZXZuYW1lLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitkZXZuby5vOiAkKHNyY2RpcikvZGV2bm8uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2Jsa2lkUC5oICQoc3JjZGlyKS9saXN0LmgKK2dldHNpemUubzogJChzcmNkaXIpL2dldHNpemUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2Jsa2lkUC5oICQoc3JjZGlyKS9saXN0LmgKK2xsc2Vlay5vOiAkKHNyY2RpcikvbGxzZWVrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitwcm9iZS5vOiAkKHNyY2RpcikvcHJvYmUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2Jsa2lkUC5oICQoc3JjZGlyKS9saXN0LmggXAorICQoc3JjZGlyKS9wcm9iZS5oCityZWFkLm86ICQoc3JjZGlyKS9yZWFkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCityZXNvbHZlLm86ICQoc3JjZGlyKS9yZXNvbHZlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCitzYXZlLm86ICQoc3JjZGlyKS9zYXZlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ibGtpZFAuaCAkKHNyY2RpcikvbGlzdC5oCit0YWcubzogJChzcmNkaXIpL3RhZy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvYmxraWRQLmggJChzcmNkaXIpL2xpc3QuaAordmVyc2lvbi5vOiAkKHNyY2RpcikvdmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC9ibGtpZC5oIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9ibGtpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjMwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBibGtpZC5oIC0gSW50ZXJmYWNlIGZvciBsaWJibGtpZCwgYSBsaWJyYXJ5IHRvIGlkZW50aWZ5IGJsb2NrIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9CTEtJRF9CTEtJRF9ICisjZGVmaW5lIF9CTEtJRF9CTEtJRF9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxibGtpZC9ibGtpZF90eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgQkxLSURfVkVSU0lPTgkiMS4wLjAiCisjZGVmaW5lIEJMS0lEX0RBVEUJIjEyLUZlYi0yMDAzIgorCit0eXBlZGVmIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2ICpibGtpZF9kZXY7Cit0eXBlZGVmIHN0cnVjdCBibGtpZF9zdHJ1Y3RfY2FjaGUgKmJsa2lkX2NhY2hlOwordHlwZWRlZiBfX3M2NCBibGtpZF9sb2ZmX3Q7CisKK3R5cGVkZWYgc3RydWN0IGJsa2lkX3N0cnVjdF90YWdfaXRlcmF0ZSAqYmxraWRfdGFnX2l0ZXJhdGU7Cit0eXBlZGVmIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2X2l0ZXJhdGUgKmJsa2lkX2Rldl9pdGVyYXRlOworCisvKgorICogRmxhZ3MgZm9yIGJsa2lkX2dldF9kZXYKKyAqCisgKiBCTEtJRF9ERVZfQ1JFQVRFCUNyZWF0ZSBhbiBlbXB0eSBkZXZpY2Ugc3RydWN0dXJlIGlmIG5vdCBmb3VuZAorICogCQkJaW4gdGhlIGNhY2hlLgorICogQkxLSURfREVWX1ZFUklGWQlNYWtlIHN1cmUgdGhlIGRldmljZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMKKyAqIAkJCXdpdGggcmVhbGl0eS4KKyAqIEJMS0lEX0RFVl9GSU5ECUp1c3QgbG9vayB1cCBhIGRldmljZSBlbnRyeSwgYW5kIHJldHVybiBOVUxMCisgKiAJCQlpZiBpdCBpcyBub3QgZm91bmQuCisgKiBCTEtJRF9ERVZfTk9STUFMCUdldCBhIHZhbGlkIGRldmljZSBzdHJ1Y3R1cmUsIGVpdGhlciBmcm9tIHRoZQorICogCQkJY2FjaGUgb3IgYnkgcHJvYmluZyB0aGUgZGV2aWNlLgorICovCisjZGVmaW5lIEJMS0lEX0RFVl9GSU5ECQkweDAwMDAKKyNkZWZpbmUgQkxLSURfREVWX0NSRUFURQkweDAwMDEKKyNkZWZpbmUgQkxLSURfREVWX1ZFUklGWQkweDAwMDIKKyNkZWZpbmUgQkxLSURfREVWX05PUk1BTAkoQkxLSURfREVWX0NSRUFURSB8IEJMS0lEX0RFVl9WRVJJRlkpCisKKy8qIGNhY2hlLmMgKi8KK2V4dGVybiB2b2lkIGJsa2lkX3B1dF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSk7CitleHRlcm4gaW50IGJsa2lkX2dldF9jYWNoZShibGtpZF9jYWNoZSAqY2FjaGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2V4dGVybiB2b2lkIGJsa2lkX2djX2NhY2hlKGJsa2lkX2NhY2hlIGNhY2hlKTsKKworLyogZGV2LmMgKi8KK2V4dGVybiBjb25zdCBjaGFyICpibGtpZF9kZXZfZGV2bmFtZShibGtpZF9kZXYgZGV2KTsKKworZXh0ZXJuIGJsa2lkX2Rldl9pdGVyYXRlIGJsa2lkX2Rldl9pdGVyYXRlX2JlZ2luKGJsa2lkX2NhY2hlIGNhY2hlKTsKK2V4dGVybiBpbnQgYmxraWRfZGV2X3NldF9zZWFyY2goYmxraWRfZGV2X2l0ZXJhdGUgaXRlciwKKwkJCQljaGFyICpzZWFyY2hfdHlwZSwgY2hhciAqc2VhcmNoX3ZhbHVlKTsKK2V4dGVybiBpbnQgYmxraWRfZGV2X25leHQoYmxraWRfZGV2X2l0ZXJhdGUgaXRlcmF0ZSwgYmxraWRfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgYmxraWRfZGV2X2l0ZXJhdGVfZW5kKGJsa2lkX2Rldl9pdGVyYXRlIGl0ZXJhdGUpOworCisvKiBkZXZuby5jICovCitleHRlcm4gY2hhciAqYmxraWRfZGV2bm9fdG9fZGV2bmFtZShkZXZfdCBkZXZubyk7CisKKy8qIGRldm5hbWUuYyAqLworZXh0ZXJuIGludCBibGtpZF9wcm9iZV9hbGwoYmxraWRfY2FjaGUgY2FjaGUpOworZXh0ZXJuIGludCBibGtpZF9wcm9iZV9hbGxfbmV3KGJsa2lkX2NhY2hlIGNhY2hlKTsKK2V4dGVybiBibGtpZF9kZXYgYmxraWRfZ2V0X2RldihibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqZGV2bmFtZSwKKwkJCSAgICAgICBpbnQgZmxhZ3MpOworCisvKiBnZXRzaXplLmMgKi8KK2V4dGVybiBibGtpZF9sb2ZmX3QgYmxraWRfZ2V0X2Rldl9zaXplKGludCBmZCk7CisKKy8qIHByb2JlLmMgKi8KK2ludCBibGtpZF9rbm93bl9mc3R5cGUoY29uc3QgY2hhciAqZnN0eXBlKTsKK2V4dGVybiBibGtpZF9kZXYgYmxraWRfdmVyaWZ5KGJsa2lkX2NhY2hlIGNhY2hlLCBibGtpZF9kZXYgZGV2KTsKKworLyogcmVhZC5jICovCisKKy8qIHJlc29sdmUuYyAqLworZXh0ZXJuIGNoYXIgKmJsa2lkX2dldF90YWdfdmFsdWUoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKnRhZ25hbWUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUpOworZXh0ZXJuIGNoYXIgKmJsa2lkX2dldF9kZXZuYW1lKGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICp0b2tlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qIHRhZy5jICovCitleHRlcm4gYmxraWRfdGFnX2l0ZXJhdGUgYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW4oYmxraWRfZGV2IGRldik7CitleHRlcm4gaW50IGJsa2lkX3RhZ19uZXh0KGJsa2lkX3RhZ19pdGVyYXRlIGl0ZXJhdGUsCisJCQkgICAgICBjb25zdCBjaGFyICoqdHlwZSwgY29uc3QgY2hhciAqKnZhbHVlKTsKK2V4dGVybiB2b2lkIGJsa2lkX3RhZ19pdGVyYXRlX2VuZChibGtpZF90YWdfaXRlcmF0ZSBpdGVyYXRlKTsKK2V4dGVybiBpbnQgYmxraWRfZGV2X2hhc190YWcoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqdHlwZSwKKwkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIGJsa2lkX2RldiBibGtpZF9maW5kX2Rldl93aXRoX3RhZyhibGtpZF9jYWNoZSBjYWNoZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJCSBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gaW50IGJsa2lkX3BhcnNlX3RhZ19zdHJpbmcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKipyZXRfdHlwZSwKKwkJCQkgIGNoYXIgKipyZXRfdmFsKTsKKworLyogdmVyc2lvbi5jICovCitleHRlcm4gaW50IGJsa2lkX3BhcnNlX3ZlcnNpb25fc3RyaW5nKGNvbnN0IGNoYXIgKnZlcl9zdHJpbmcpOworZXh0ZXJuIGludCBibGtpZF9nZXRfbGlicmFyeV92ZXJzaW9uKGNvbnN0IGNoYXIgKip2ZXJfc3RyaW5nLAorCQkJCSAgICAgY29uc3QgY2hhciAqKmRhdGVfc3RyaW5nKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9CTEtJRF9CTEtJRF9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkLmguaW4gYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmMzA5OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWQuaC5pbgpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIGJsa2lkLmggLSBJbnRlcmZhY2UgZm9yIGxpYmJsa2lkLCBhIGxpYnJhcnkgdG8gaWRlbnRpZnkgYmxvY2sgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX0JMS0lEX0JMS0lEX0gKKyNkZWZpbmUgX0JMS0lEX0JMS0lEX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGJsa2lkL2Jsa2lkX3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBCTEtJRF9WRVJTSU9OCSIxLjAuMCIKKyNkZWZpbmUgQkxLSURfREFURQkiMTItRmViLTIwMDMiCisKK3R5cGVkZWYgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYgKmJsa2lkX2RldjsKK3R5cGVkZWYgc3RydWN0IGJsa2lkX3N0cnVjdF9jYWNoZSAqYmxraWRfY2FjaGU7Cit0eXBlZGVmIF9fczY0IGJsa2lkX2xvZmZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZ19pdGVyYXRlICpibGtpZF90YWdfaXRlcmF0ZTsKK3R5cGVkZWYgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXZfaXRlcmF0ZSAqYmxraWRfZGV2X2l0ZXJhdGU7CisKKy8qCisgKiBGbGFncyBmb3IgYmxraWRfZ2V0X2RldgorICoKKyAqIEJMS0lEX0RFVl9DUkVBVEUJQ3JlYXRlIGFuIGVtcHR5IGRldmljZSBzdHJ1Y3R1cmUgaWYgbm90IGZvdW5kCisgKiAJCQlpbiB0aGUgY2FjaGUuCisgKiBCTEtJRF9ERVZfVkVSSUZZCU1ha2Ugc3VyZSB0aGUgZGV2aWNlIHN0cnVjdHVyZSBjb3JyZXNwb25kcworICogCQkJd2l0aCByZWFsaXR5LgorICogQkxLSURfREVWX0ZJTkQJSnVzdCBsb29rIHVwIGEgZGV2aWNlIGVudHJ5LCBhbmQgcmV0dXJuIE5VTEwKKyAqIAkJCWlmIGl0IGlzIG5vdCBmb3VuZC4KKyAqIEJMS0lEX0RFVl9OT1JNQUwJR2V0IGEgdmFsaWQgZGV2aWNlIHN0cnVjdHVyZSwgZWl0aGVyIGZyb20gdGhlCisgKiAJCQljYWNoZSBvciBieSBwcm9iaW5nIHRoZSBkZXZpY2UuCisgKi8KKyNkZWZpbmUgQkxLSURfREVWX0ZJTkQJCTB4MDAwMAorI2RlZmluZSBCTEtJRF9ERVZfQ1JFQVRFCTB4MDAwMQorI2RlZmluZSBCTEtJRF9ERVZfVkVSSUZZCTB4MDAwMgorI2RlZmluZSBCTEtJRF9ERVZfTk9STUFMCShCTEtJRF9ERVZfQ1JFQVRFIHwgQkxLSURfREVWX1ZFUklGWSkKKworLyogY2FjaGUuYyAqLworZXh0ZXJuIHZvaWQgYmxraWRfcHV0X2NhY2hlKGJsa2lkX2NhY2hlIGNhY2hlKTsKK2V4dGVybiBpbnQgYmxraWRfZ2V0X2NhY2hlKGJsa2lkX2NhY2hlICpjYWNoZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworZXh0ZXJuIHZvaWQgYmxraWRfZ2NfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpOworCisvKiBkZXYuYyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmJsa2lkX2Rldl9kZXZuYW1lKGJsa2lkX2RldiBkZXYpOworCitleHRlcm4gYmxraWRfZGV2X2l0ZXJhdGUgYmxraWRfZGV2X2l0ZXJhdGVfYmVnaW4oYmxraWRfY2FjaGUgY2FjaGUpOworZXh0ZXJuIGludCBibGtpZF9kZXZfc2V0X3NlYXJjaChibGtpZF9kZXZfaXRlcmF0ZSBpdGVyLAorCQkJCWNoYXIgKnNlYXJjaF90eXBlLCBjaGFyICpzZWFyY2hfdmFsdWUpOworZXh0ZXJuIGludCBibGtpZF9kZXZfbmV4dChibGtpZF9kZXZfaXRlcmF0ZSBpdGVyYXRlLCBibGtpZF9kZXYgKmRldik7CitleHRlcm4gdm9pZCBibGtpZF9kZXZfaXRlcmF0ZV9lbmQoYmxraWRfZGV2X2l0ZXJhdGUgaXRlcmF0ZSk7CisKKy8qIGRldm5vLmMgKi8KK2V4dGVybiBjaGFyICpibGtpZF9kZXZub190b19kZXZuYW1lKGRldl90IGRldm5vKTsKKworLyogZGV2bmFtZS5jICovCitleHRlcm4gaW50IGJsa2lkX3Byb2JlX2FsbChibGtpZF9jYWNoZSBjYWNoZSk7CitleHRlcm4gaW50IGJsa2lkX3Byb2JlX2FsbF9uZXcoYmxraWRfY2FjaGUgY2FjaGUpOworZXh0ZXJuIGJsa2lkX2RldiBibGtpZF9nZXRfZGV2KGJsa2lkX2NhY2hlIGNhY2hlLCBjb25zdCBjaGFyICpkZXZuYW1lLAorCQkJICAgICAgIGludCBmbGFncyk7CisKKy8qIGdldHNpemUuYyAqLworZXh0ZXJuIGJsa2lkX2xvZmZfdCBibGtpZF9nZXRfZGV2X3NpemUoaW50IGZkKTsKKworLyogcHJvYmUuYyAqLworaW50IGJsa2lkX2tub3duX2ZzdHlwZShjb25zdCBjaGFyICpmc3R5cGUpOworZXh0ZXJuIGJsa2lkX2RldiBibGtpZF92ZXJpZnkoYmxraWRfY2FjaGUgY2FjaGUsIGJsa2lkX2RldiBkZXYpOworCisvKiByZWFkLmMgKi8KKworLyogcmVzb2x2ZS5jICovCitleHRlcm4gY2hhciAqYmxraWRfZ2V0X3RhZ192YWx1ZShibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqdGFnbmFtZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZGV2bmFtZSk7CitleHRlcm4gY2hhciAqYmxraWRfZ2V0X2Rldm5hbWUoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKnRva2VuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworLyogdGFnLmMgKi8KK2V4dGVybiBibGtpZF90YWdfaXRlcmF0ZSBibGtpZF90YWdfaXRlcmF0ZV9iZWdpbihibGtpZF9kZXYgZGV2KTsKK2V4dGVybiBpbnQgYmxraWRfdGFnX25leHQoYmxraWRfdGFnX2l0ZXJhdGUgaXRlcmF0ZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKip0eXBlLCBjb25zdCBjaGFyICoqdmFsdWUpOworZXh0ZXJuIHZvaWQgYmxraWRfdGFnX2l0ZXJhdGVfZW5kKGJsa2lkX3RhZ19pdGVyYXRlIGl0ZXJhdGUpOworZXh0ZXJuIGludCBibGtpZF9kZXZfaGFzX3RhZyhibGtpZF9kZXYgZGV2LCBjb25zdCBjaGFyICp0eXBlLAorCQkJICAgICBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gYmxraWRfZGV2IGJsa2lkX2ZpbmRfZGV2X3dpdGhfdGFnKGJsa2lkX2NhY2hlIGNhY2hlLAorCQkJCQkgY29uc3QgY2hhciAqdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2V4dGVybiBpbnQgYmxraWRfcGFyc2VfdGFnX3N0cmluZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqKnJldF90eXBlLAorCQkJCSAgY2hhciAqKnJldF92YWwpOworCisvKiB2ZXJzaW9uLmMgKi8KK2V4dGVybiBpbnQgYmxraWRfcGFyc2VfdmVyc2lvbl9zdHJpbmcoY29uc3QgY2hhciAqdmVyX3N0cmluZyk7CitleHRlcm4gaW50IGJsa2lkX2dldF9saWJyYXJ5X3ZlcnNpb24oY29uc3QgY2hhciAqKnZlcl9zdHJpbmcsCisJCQkJICAgICBjb25zdCBjaGFyICoqZGF0ZV9zdHJpbmcpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0JMS0lEX0JMS0lEX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWQucGMuaW4gYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGZlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBibGtpZAorRGVzY3JpcHRpb246IEJsb2NrIGRldmljZSBpZCBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlcy5wcml2YXRlOiB1dWlkCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9ibGtpZCAtSSR7aW5jbHVkZWRpcn0KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYmxraWQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWRQLmggYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZjExYTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Jsa2lkUC5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogYmxraWRQLmggLSBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciBsaWJibGtpZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX0JMS0lEX0JMS0lEUF9ICisjZGVmaW5lIF9CTEtJRF9CTEtJRFBfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisKKyNpbmNsdWRlIDxibGtpZC9saXN0Lmg+CisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX0JMS0lEX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgX19CTEtJRF9BVFRSKHgpCisjZW5kaWYKKworCisvKgorICogVGhpcyBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBzcGVjaWZpYyBkZXZpY2UuCisgKiBXZSBjYW4gdHJhdmVyc2UgYWxsIG9mIHRoZSB0YWdzIGJ5IGJpZF90YWdzIChsaW5raW5nIHRvIHRoZSB0YWcgYml0X25hbWVzKS4KKyAqIFRoZSBiaWRfbGFiZWwgYW5kIGJpZF91dWlkIGZpZWxkcyBhcmUgc2hvcnRjdXRzIHRvIHRoZSBMQUJFTCBhbmQgVVVJRCB0YWcKKyAqIHZhbHVlcywgaWYgdGhleSBleGlzdC4KKyAqLworc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJpZF9kZXZzOwkvKiBBbGwgZGV2aWNlcyBpbiB0aGUgY2FjaGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJpZF90YWdzOwkvKiBBbGwgdGFncyBmb3IgdGhpcyBkZXZpY2UgKi8KKwlibGtpZF9jYWNoZQkJYmlkX2NhY2hlOwkvKiBEZXYgYmVsb25ncyB0byB0aGlzIGNhY2hlICovCisJY2hhcgkJCSpiaWRfbmFtZTsJLyogRGV2aWNlIGlub2RlIHBhdGhuYW1lICovCisJY2hhcgkJCSpiaWRfdHlwZTsJLyogUHJlZmVycmVkIGRldmljZSBUWVBFICovCisJaW50CQkJYmlkX3ByaTsJLyogRGV2aWNlIHByaW9yaXR5ICovCisJZGV2X3QJCQliaWRfZGV2bm87CS8qIERldmljZSBtYWpvci9taW5vciBudW1iZXIgKi8KKwl0aW1lX3QJCQliaWRfdGltZTsJLyogTGFzdCB1cGRhdGUgdGltZSBvZiBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQJCWJpZF9mbGFnczsJLyogRGV2aWNlIHN0YXR1cyBiaXRmbGFncyAqLworCWNoYXIJCQkqYmlkX2xhYmVsOwkvKiBTaG9ydGN1dCB0byBkZXZpY2UgTEFCRUwgKi8KKwljaGFyCQkJKmJpZF91dWlkOwkvKiBTaG9ydGN1dCB0byBiaW5hcnkgVVVJRCAqLworfTsKKworI2RlZmluZSBCTEtJRF9CSURfRkxfVkVSSUZJRUQJMHgwMDAxCS8qIERldmljZSBkYXRhIHZhbGlkYXRlZCBmcm9tIGRpc2sgKi8KKyNkZWZpbmUgQkxLSURfQklEX0ZMX0lOVkFMSUQJMHgwMDA0CS8qIERldmljZSBpcyBpbnZhbGlkICovCisKKy8qCisgKiBFYWNoIHRhZyBkZWZpbmVzIGEgTkFNRT12YWx1ZSBwYWlyIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlLiAgVGhlIHRhZ3MKKyAqIGFyZSBsaW5rZWQgdmlhIGJpdF9uYW1lcyBmb3IgYSBzaW5nbGUgZGV2aWNlLCBzbyB0aGF0IHRyYXZlcnNpbmcgdGhlCisgKiBuYW1lcyBsaXN0IHdpbGwgZ2V0IHlvdSBhIGxpc3Qgb2YgYWxsIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlLgorICogVGhleSBhcmUgYWxzbyBsaW5rZWQgdmlhIGJpdF92YWx1ZXMgZm9yIGFsbCBkZXZpY2VzLCBzbyBvbmUgY2FuIGVhc2lseQorICogc2VhcmNoIGFsbCB0YWdzIHdpdGggYSBnaXZlbiBOQU1FIGZvciBhIHNwZWNpZmljIHZhbHVlLgorICovCitzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZworeworCXN0cnVjdCBsaXN0X2hlYWQJYml0X3RhZ3M7CS8qIEFsbCB0YWdzIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJYml0X25hbWVzOwkvKiBBbGwgdGFncyB3aXRoIGdpdmVuIE5BTUUgKi8KKwljaGFyCQkJKmJpdF9uYW1lOwkvKiBOQU1FIG9mIHRhZyAoc2hhcmVkKSAqLworCWNoYXIJCQkqYml0X3ZhbDsJLyogdmFsdWUgb2YgdGFnICovCisJYmxraWRfZGV2CQliaXRfZGV2OwkvKiBwb2ludGVyIHRvIGRldmljZSAqLworfTsKK3R5cGVkZWYgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcgKmJsa2lkX3RhZzsKKworLyoKKyAqIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBkZXZpY2UgcHJvYmVzLCBldmVuIHdoZW4gcmVhZGluZworICogZnJvbSB0aGUgY2FjaGUuICBUaGlzIGlzIHRvIGF2b2lkIHJlLXByb2JpbmcgYWxsIGRldmljZXMgd2hpY2ggd2VyZQorICoganVzdCBwcm9iZWQgYnkgYW5vdGhlciBwcm9ncmFtIHRoYXQgZG9lcyBub3Qgc2hhcmUgdGhlIGNhY2hlLgorICovCisjZGVmaW5lIEJMS0lEX1BST0JFX01JTgkJMgorCisvKgorICogVGltZSBpbiBzZWNvbmRzIGFuIGVudHJ5IHJlbWFpbnMgdmVyaWZpZWQgaW4gdGhlIGluLW1lbW9yeSBjYWNoZQorICogYmVmb3JlIGJlaW5nIHJldmVyaWZpZWQgKGluIGNhc2Ugb2YgbG9uZy1ydW5uaW5nIHByb2Nlc3NlcyB0aGF0CisgKiBrZWVwIGEgY2FjaGUgaW4gbWVtb3J5IGFuZCBjb250aW51ZSB0byB1c2UgaXQgZm9yIGEgbG9uZyB0aW1lKS4KKyAqLworI2RlZmluZSBCTEtJRF9QUk9CRV9JTlRFUlZBTAkyMDAKKworLyogVGhpcyBkZXNjcmliZXMgYW4gZW50aXJlIGJsa2lkIGNhY2hlIGZpbGUgYW5kIHByb2JlZCBkZXZpY2VzLgorICogV2UgY2FuIHRyYXZlcnNlIGFsbCBvZiB0aGUgZm91bmQgZGV2aWNlcyB2aWEgYmljX2xpc3QuCisgKiBXZSBjYW4gdHJhdmVyc2UgYWxsIG9mIHRoZSB0YWcgdHlwZXMgYnkgYmljX3RhZ3MsIHdoaWNoIGhvbGQgZW1wdHkgdGFncworICogZm9yIGVhY2ggdGFnIHR5cGUuICBUaG9zZSB0YWdzIGNhbiBiZSB1c2VkIGFzIGxpc3RfaGVhZHMgZm9yIGl0ZXJhdGluZworICogdGhyb3VnaCBhbGwgZGV2aWNlcyB3aXRoIGEgc3BlY2lmaWMgdGFnIHR5cGUgKGUuZy4gTEFCRUwpLgorICovCitzdHJ1Y3QgYmxraWRfc3RydWN0X2NhY2hlCit7CisJc3RydWN0IGxpc3RfaGVhZAliaWNfZGV2czsJLyogTGlzdCBoZWFkIG9mIGFsbCBkZXZpY2VzICovCisJc3RydWN0IGxpc3RfaGVhZAliaWNfdGFnczsJLyogTGlzdCBoZWFkIG9mIGFsbCB0YWcgdHlwZXMgKi8KKwl0aW1lX3QJCQliaWNfdGltZTsJLyogTGFzdCBwcm9iZSB0aW1lICovCisJdGltZV90CQkJYmljX2Z0aW1lOyAJLyogTW9kIHRpbWUgb2YgdGhlIGNhY2hlZmlsZSAqLworCXVuc2lnbmVkIGludAkJYmljX2ZsYWdzOwkvKiBTdGF0dXMgZmxhZ3Mgb2YgdGhlIGNhY2hlICovCisJY2hhcgkJCSpiaWNfZmlsZW5hbWU7CS8qIGZpbGVuYW1lIG9mIGNhY2hlICovCit9OworCisjZGVmaW5lIEJMS0lEX0JJQ19GTF9QUk9CRUQJMHgwMDAyCS8qIFdlIHByb2JlZCAvcHJvYy9wYXJ0aXRpb24gZGV2aWNlcyAqLworI2RlZmluZSBCTEtJRF9CSUNfRkxfQ0hBTkdFRAkweDAwMDQJLyogQ2FjaGUgaGFzIGNoYW5nZWQgZnJvbSBkaXNrICovCisKK2V4dGVybiBjaGFyICpibGtpZF9zdHJkdXAoY29uc3QgY2hhciAqcyk7CitleHRlcm4gY2hhciAqYmxraWRfc3RybmR1cChjb25zdCBjaGFyICpzLCBjb25zdCBpbnQgbGVuZ3RoKTsKKworI2RlZmluZSBCTEtJRF9DQUNIRV9GSUxFICIvZXRjL2Jsa2lkLnRhYiIKKworI2RlZmluZSBCTEtJRF9FUlJfSU8JIDUKKyNkZWZpbmUgQkxLSURfRVJSX1BST0MJIDkKKyNkZWZpbmUgQkxLSURfRVJSX01FTQkxMgorI2RlZmluZSBCTEtJRF9FUlJfQ0FDSEUJMTQKKyNkZWZpbmUgQkxLSURfRVJSX0RFVgkxOQorI2RlZmluZSBCTEtJRF9FUlJfUEFSQU0JMjIKKyNkZWZpbmUgQkxLSURfRVJSX0JJRwkyNworCisvKgorICogUHJpb3JpdHkgc2V0dGluZ3MgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgQkxLSURfUFJJX0RNCTQwCisjZGVmaW5lIEJMS0lEX1BSSV9FVk1TCTMwCisjZGVmaW5lIEJMS0lEX1BSSV9MVk0JMjAKKyNkZWZpbmUgQkxLSURfUFJJX01ECTEwCisKKyNpZiBkZWZpbmVkKFRFU1RfUFJPR1JBTSkgJiYgIWRlZmluZWQoQ09ORklHX0JMS0lEX0RFQlVHKQorI2RlZmluZSBDT05GSUdfQkxLSURfREVCVUcKKyNlbmRpZgorCisjZGVmaW5lIERFQlVHX0NBQ0hFCTB4MDAwMQorI2RlZmluZSBERUJVR19EVU1QCTB4MDAwMgorI2RlZmluZSBERUJVR19ERVYJMHgwMDA0CisjZGVmaW5lIERFQlVHX0RFVk5BTUUJMHgwMDA4CisjZGVmaW5lIERFQlVHX0RFVk5PCTB4MDAxMAorI2RlZmluZSBERUJVR19QUk9CRQkweDAwMjAKKyNkZWZpbmUgREVCVUdfUkVBRAkweDAwNDAKKyNkZWZpbmUgREVCVUdfUkVTT0xWRQkweDAwODAKKyNkZWZpbmUgREVCVUdfU0FWRQkweDAxMDAKKyNkZWZpbmUgREVCVUdfVEFHCTB4MDIwMAorI2RlZmluZSBERUJVR19JTklUCTB4ODAwMAorI2RlZmluZSBERUJVR19BTEwJMHhGRkZGCisKKyNpZmRlZiBDT05GSUdfQkxLSURfREVCVUcKKyNpbmNsdWRlIDxzdGRpby5oPgorZXh0ZXJuIGludAlibGtpZF9kZWJ1Z19tYXNrOworI2RlZmluZSBEQkcobSx4KQlpZiAoKG0pICYgYmxraWRfZGVidWdfbWFzaykgeDsKKyNlbHNlCisjZGVmaW5lIERCRyhtLHgpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CTEtJRF9ERUJVRworZXh0ZXJuIHZvaWQgYmxraWRfZGVidWdfZHVtcF9kZXYoYmxraWRfZGV2IGRldik7CitleHRlcm4gdm9pZCBibGtpZF9kZWJ1Z19kdW1wX3RhZyhibGtpZF90YWcgdGFnKTsKKyNlbmRpZgorCisvKiBkZXZuby5jICovCitzdHJ1Y3QgZGlyX2xpc3QgeworCWNoYXIJKm5hbWU7CisJc3RydWN0IGRpcl9saXN0ICpuZXh0OworfTsKK2V4dGVybiB2b2lkIGJsa2lkX19zY2FuX2RpcihjaGFyICosIGRldl90LCBzdHJ1Y3QgZGlyX2xpc3QgKiosIGNoYXIgKiopOworCisvKiBsc2Vlay5jICovCitleHRlcm4gYmxraWRfbG9mZl90IGJsa2lkX2xsc2VlayhpbnQgZmQsIGJsa2lkX2xvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpOworCisvKiByZWFkLmMgKi8KK2V4dGVybiB2b2lkIGJsa2lkX3JlYWRfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpOworCisvKiBzYXZlLmMgKi8KK2V4dGVybiBpbnQgYmxraWRfZmx1c2hfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpOworCisvKgorICogRnVuY3Rpb25zIHRvIGNyZWF0ZSBhbmQgZmluZCBhIHNwZWNpZmljIHRhZyB0eXBlOiB0YWcuYworICovCitleHRlcm4gdm9pZCBibGtpZF9mcmVlX3RhZyhibGtpZF90YWcgdGFnKTsKK2V4dGVybiBibGtpZF90YWcgYmxraWRfZmluZF90YWdfZGV2KGJsa2lkX2RldiBkZXYsIGNvbnN0IGNoYXIgKnR5cGUpOworZXh0ZXJuIGludCBibGtpZF9zZXRfdGFnKGJsa2lkX2RldiBkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGludCB2bGVuZ3RoKTsKKworLyoKKyAqIEZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kIGZpbmQgYSBzcGVjaWZpYyB0YWcgdHlwZTogZGV2LmMKKyAqLworZXh0ZXJuIGJsa2lkX2RldiBibGtpZF9uZXdfZGV2KHZvaWQpOworZXh0ZXJuIHZvaWQgYmxraWRfZnJlZV9kZXYoYmxraWRfZGV2IGRldik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQkxLSURfQkxLSURQX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWRfdHlwZXMuaCBiL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWRfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmZhZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9ibGtpZF90eXBlcy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiAKKyAqIElmIGxpbnV4L3R5cGVzLmggaXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLCBhc3N1bWUgaXQgaGFzIGRlZmluZWQKKyAqIGV2ZXJ5dGhpbmcgd2UgbmVlZC4gIChjcm9zcyBmaW5nZXJzKSAgT3RoZXIgaGVhZGVyIGZpbGVzIG1heSBoYXZlIAorICogYWxzbyBkZWZpbmVkIHRoZSB0eXBlcyB0aGF0IHdlIG5lZWQuCisgKi8KKyNpZiAoIWRlZmluZWQoX0xJTlVYX1RZUEVTX0gpICYmICFkZWZpbmVkKF9CTEtJRF9UWVBFU19IKSAmJiBcCisJIWRlZmluZWQoX0VYVDJfVFlQRVNfSCkpCisjZGVmaW5lIF9CTEtJRF9UWVBFU19ICisKKworI2lmZGVmIF9fVThfVFlQRURFRgordHlwZWRlZiBfX1U4X1RZUEVERUYgX191ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKyNlbmRpZgorCisjaWZkZWYgX19TOF9UWVBFREVGCit0eXBlZGVmIF9fUzhfVFlQRURFRiBfX3M4OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgX19zODsKKyNlbmRpZgorCisjaWZkZWYgX19VMTZfVFlQRURFRgordHlwZWRlZiBfX1UxNl9UWVBFREVGIF9fdTE2OworI2Vsc2UKKyNpZiAoNCA9PSAyKQordHlwZWRlZgl1bnNpZ25lZCBpbnQJX191MTY7CisjZWxzZQorI2lmICgyID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTE2OworI2Vsc2UKKyAgPz09ZXJyb3I6IHVuZGVmaW5lZCAxNiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSAyICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSAyICovCisjZW5kaWYgLyogX19VMTZfVFlQRURFRiAqLworCisjaWZkZWYgX19TMTZfVFlQRURFRgordHlwZWRlZiBfX1MxNl9UWVBFREVGIF9fczE2OworI2Vsc2UKKyNpZiAoNCA9PSAyKQordHlwZWRlZglpbnQJCV9fczE2OworI2Vsc2UKKyNpZiAoMiA9PSAyKQordHlwZWRlZglzaG9ydAkJX19zMTY7CisjZWxzZQorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDIgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDIgKi8KKyNlbmRpZiAvKiBfX1MxNl9UWVBFREVGICovCisKKworI2lmZGVmIF9fVTMyX1RZUEVERUYKK3R5cGVkZWYgX19VMzJfVFlQRURFRiBfX3UzMjsKKyNlbHNlCisjaWYgKDQgPT0gNCkKK3R5cGVkZWYJdW5zaWduZWQgaW50CV9fdTMyOworI2Vsc2UKKyNpZiAoNCA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBsb25nCV9fdTMyOworI2Vsc2UKKyNpZiAoMiA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlfX3UzMjsKKyNlbHNlCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1UzMl9UWVBFREVGICovCisKKyNpZmRlZiBfX1MzMl9UWVBFREVGCit0eXBlZGVmIF9fUzMyX1RZUEVERUYgX19zMzI7CisjZWxzZQorI2lmICg0ID09IDQpCit0eXBlZGVmCWludAkJX19zMzI7CisjZWxzZQorI2lmICg0ID09IDQpCit0eXBlZGVmCWxvbmcJCV9fczMyOworI2Vsc2UKKyNpZiAoMiA9PSA0KQordHlwZWRlZglzaG9ydAkJX19zMzI7CisjZWxzZQorID89PSBlcnJvcjogdW5kZWZpbmVkIDMyIGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA0ICovCisjZW5kaWYgLyogX19TMzJfVFlQRURFRiAqLworCisjaWZkZWYgX19VNjRfVFlQRURFRgordHlwZWRlZiBfX1U2NF9UWVBFREVGIF9fdTY0OworI2Vsc2UKKyNpZiAoNCA9PSA4KQordHlwZWRlZiB1bnNpZ25lZCBpbnQJX191NjQ7CisjZWxzZQorI2lmICg4ID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlfX3U2NDsKKyNlbHNlCisjaWYgKDQgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX3U2NDsKKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA4ICovCisjZW5kaWYgLyogX19VNjRfVFlQRURFRiAqLworCisjaWZkZWYgX19TNjRfVFlQRURFRgordHlwZWRlZiBfX1M2NF9UWVBFREVGIF9fczY0OworI2Vsc2UKKyNpZiAoNCA9PSA4KQordHlwZWRlZiBpbnQJCV9fczY0OworI2Vsc2UKKyNpZiAoOCA9PSA4KQorI2lmIGRlZmluZWQoX19HTlVDX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIAlfX3M2NDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgCV9fczY0OworI2VuZGlmIC8qIF9fR05VQ19fICovCisjZWxzZQorI2lmICg0ID09IDgpCit0eXBlZGVmIGxvbmcJCV9fczY0OworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfTE9OR19MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDggKi8KKyNlbmRpZiAvKiBfX1M2NF9UWVBFREVGICovCisKKyN1bmRlZiBfX1M4X1RZUEVERUYKKyN1bmRlZiBfX1U4X1RZUEVERUYKKyN1bmRlZiBfX1MxNl9UWVBFREVGCisjdW5kZWYgX19VMTZfVFlQRURFRgorI3VuZGVmIF9fUzMyX1RZUEVERUYKKyN1bmRlZiBfX1UzMl9UWVBFREVGCisjdW5kZWYgX19TNjRfVFlQRURFRgorI3VuZGVmIF9fVTY0X1RZUEVERUYKKworI2VuZGlmIC8qIF8qX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWRfdHlwZXMuaC5pbiBiL2UyZnNwcm9ncy9saWIvYmxraWQvYmxraWRfdHlwZXMuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWRjMGRhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9ibGtpZF90eXBlcy5oLmluCkBAIC0wLDAgKzEsMTM0IEBACisvKiAKKyAqIElmIGxpbnV4L3R5cGVzLmggaXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLCBhc3N1bWUgaXQgaGFzIGRlZmluZWQKKyAqIGV2ZXJ5dGhpbmcgd2UgbmVlZC4gIChjcm9zcyBmaW5nZXJzKSAgT3RoZXIgaGVhZGVyIGZpbGVzIG1heSBoYXZlIAorICogYWxzbyBkZWZpbmVkIHRoZSB0eXBlcyB0aGF0IHdlIG5lZWQuCisgKi8KKyNpZiAoIWRlZmluZWQoX0xJTlVYX1RZUEVTX0gpICYmICFkZWZpbmVkKF9CTEtJRF9UWVBFU19IKSAmJiBcCisJIWRlZmluZWQoX0VYVDJfVFlQRVNfSCkpCisjZGVmaW5lIF9CTEtJRF9UWVBFU19ICisKK0BBU01fVFlQRVNfSEVBREVSQAorCisjaWZkZWYgX19VOF9UWVBFREVGCit0eXBlZGVmIF9fVThfVFlQRURFRiBfX3U4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworI2VuZGlmCisKKyNpZmRlZiBfX1M4X1RZUEVERUYKK3R5cGVkZWYgX19TOF9UWVBFREVGIF9fczg7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBfX3M4OworI2VuZGlmCisKKyNpZmRlZiBfX1UxNl9UWVBFREVGCit0eXBlZGVmIF9fVTE2X1RZUEVERUYgX191MTY7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gMikKK3R5cGVkZWYJdW5zaWduZWQgaW50CV9fdTE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9TSE9SVEAgPT0gMikKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJX191MTY7CisjZWxzZQorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDIgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDIgKi8KKyNlbmRpZiAvKiBfX1UxNl9UWVBFREVGICovCisKKyNpZmRlZiBfX1MxNl9UWVBFREVGCit0eXBlZGVmIF9fUzE2X1RZUEVERUYgX19zMTY7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gMikKK3R5cGVkZWYJaW50CQlfX3MxNjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDIpCit0eXBlZGVmCXNob3J0CQlfX3MxNjsKKyNlbHNlCisgID89PWVycm9yOiB1bmRlZmluZWQgMTYgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gMiAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gMiAqLworI2VuZGlmIC8qIF9fUzE2X1RZUEVERUYgKi8KKworCisjaWZkZWYgX19VMzJfVFlQRURFRgordHlwZWRlZiBfX1UzMl9UWVBFREVGIF9fdTMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIGludAlfX3UzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gNCkKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwlfX3UzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTMyOworI2Vsc2UKKyA/PT0gZXJyb3I6IHVuZGVmaW5lZCAzMiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gNCAqLworI2VuZGlmIC8qIF9fVTMyX1RZUEVERUYgKi8KKworI2lmZGVmIF9fUzMyX1RZUEVERUYKK3R5cGVkZWYgX19TMzJfVFlQRURFRiBfX3MzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA0KQordHlwZWRlZglpbnQJCV9fczMyOworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA0KQordHlwZWRlZglsb25nCQlfX3MzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDQpCit0eXBlZGVmCXNob3J0CQlfX3MzMjsKKyNlbHNlCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1MzMl9UWVBFREVGICovCisKKyNpZmRlZiBfX1U2NF9UWVBFREVGCit0eXBlZGVmIF9fVTY0X1RZUEVERUYgX191NjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fdTY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HX0xPTkdAID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwlfX3U2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwlfX3U2NDsKKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA4ICovCisjZW5kaWYgLyogX19VNjRfVFlQRURFRiAqLworCisjaWZkZWYgX19TNjRfVFlQRURFRgordHlwZWRlZiBfX1M2NF9UWVBFREVGIF9fczY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDgpCit0eXBlZGVmIGludAkJX19zNjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdfTE9OR0AgPT0gOCkKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyAJX19zNjQ7CisjZWxzZQordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIAlfX3M2NDsKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HQCA9PSA4KQordHlwZWRlZiBsb25nCQlfX3M2NDsKKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA4ICovCisjZW5kaWYgLyogX19TNjRfVFlQRURFRiAqLworCisjdW5kZWYgX19TOF9UWVBFREVGCisjdW5kZWYgX19VOF9UWVBFREVGCisjdW5kZWYgX19TMTZfVFlQRURFRgorI3VuZGVmIF9fVTE2X1RZUEVERUYKKyN1bmRlZiBfX1MzMl9UWVBFREVGCisjdW5kZWYgX19VMzJfVFlQRURFRgorI3VuZGVmIF9fUzY0X1RZUEVERUYKKyN1bmRlZiBfX1U2NF9UWVBFREVGCisKKyNlbmRpZiAvKiBfKl9UWVBFU19IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL2NhY2hlLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjY2FmZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvY2FjaGUuYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIGNhY2hlLmMgLSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uL2ZyZWUgcm91dGluZXMgZm9yIGNhY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmIEhBVkVfU0VDVVJFX0dFVEVOVgorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlICJibGtpZFAuaCIKKworaW50IGJsa2lkX2RlYnVnX21hc2sgPSAwOworCisKK3N0YXRpYyBjaGFyICpzYWZlX2dldGVudihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKChnZXR1aWQoKSAhPSBnZXRldWlkKCkpIHx8IChnZXRnaWQoKSAhPSBnZXRlZ2lkKCkpKQorCQlyZXR1cm4gTlVMTDsKKyNpZiBIQVZFX1BSQ1RMCisJaWYgKHByY3RsKFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorI2lmIChkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKFNZU19wcmN0bCkpCisJaWYgKHN5c2NhbGwoU1lTX3ByY3RsLCBQUl9HRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IDApCisJCXJldHVybiBOVUxMOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TRUNVUkVfR0VURU5WKQorCXJldHVybiBzZWN1cmVfZ2V0ZW52KGFyZyk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX19TRUNVUkVfR0VURU5WKQorCXJldHVybiBfX3NlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbHNlCisJcmV0dXJuIGdldGVudihhcmcpOworI2VuZGlmCit9CisKKyNpZiAwIC8qIGlmZGVmIENPTkZJR19CTEtJRF9ERUJVRyAqLworc3RhdGljIGJsa2lkX2RlYnVnX2R1bXBfY2FjaGUoaW50IG1hc2ssIGJsa2lkX2NhY2hlIGNhY2hlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwlpZiAoIWNhY2hlKSB7CisJCXByaW50ZigiY2FjaGU6IE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCJjYWNoZTogdGltZSA9ICVsdVxuIiwgY2FjaGUtPmJpY190aW1lKTsKKwlwcmludGYoImNhY2hlOiBmbGFncyA9IDB4JTA4WFxuIiwgY2FjaGUtPmJpY19mbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJYmxraWRfZGV2IGRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsIGJpZF9kZXZzKTsKKwkJYmxraWRfZGVidWdfZHVtcF9kZXYoZGV2KTsKKwl9Cit9CisjZW5kaWYKKworaW50IGJsa2lkX2dldF9jYWNoZShibGtpZF9jYWNoZSAqcmV0X2NhY2hlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlibGtpZF9jYWNoZSBjYWNoZTsKKworI2lmZGVmIENPTkZJR19CTEtJRF9ERUJVRworCWlmICghKGJsa2lkX2RlYnVnX21hc2sgJiBERUJVR19JTklUKSkgeworCQljaGFyICpkc3RyID0gZ2V0ZW52KCJCTEtJRF9ERUJVRyIpOworCisJCWlmIChkc3RyKQorCQkJYmxraWRfZGVidWdfbWFzayA9IHN0cnRvdWwoZHN0ciwgMCwgMCk7CisJCWJsa2lkX2RlYnVnX21hc2sgfD0gREVCVUdfSU5JVDsKKwl9CisjZW5kaWYKKworCURCRyhERUJVR19DQUNIRSwgcHJpbnRmKCJjcmVhdGluZyBibGtpZCBjYWNoZSAodXNpbmcgJXMpXG4iLAorCQkJCWZpbGVuYW1lID8gZmlsZW5hbWUgOiAiZGVmYXVsdCBjYWNoZSIpKTsKKworCWlmICghKGNhY2hlID0gKGJsa2lkX2NhY2hlKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBibGtpZF9zdHJ1Y3RfY2FjaGUpKSkpCisJCXJldHVybiAtQkxLSURfRVJSX01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+YmljX2RldnMpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+YmljX3RhZ3MpOworCisJaWYgKGZpbGVuYW1lICYmICFzdHJsZW4oZmlsZW5hbWUpKQorCQlmaWxlbmFtZSA9IDA7CisJaWYgKCFmaWxlbmFtZSkKKwkJZmlsZW5hbWUgPSBzYWZlX2dldGVudigiQkxLSURfRklMRSIpOworCWlmICghZmlsZW5hbWUpCisJCWZpbGVuYW1lID0gQkxLSURfQ0FDSEVfRklMRTsKKwljYWNoZS0+YmljX2ZpbGVuYW1lID0gYmxraWRfc3RyZHVwKGZpbGVuYW1lKTsKKworCWJsa2lkX3JlYWRfY2FjaGUoY2FjaGUpOworCisJKnJldF9jYWNoZSA9IGNhY2hlOworCXJldHVybiAwOworfQorCit2b2lkIGJsa2lkX3B1dF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSkKK3sKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm47CisKKwkodm9pZCkgYmxraWRfZmx1c2hfY2FjaGUoY2FjaGUpOworCisJREJHKERFQlVHX0NBQ0hFLCBwcmludGYoImZyZWVpbmcgY2FjaGUgc3RydWN0XG4iKSk7CisKKwkvKiBEQkcoREVCVUdfQ0FDSEUsIGJsa2lkX2RlYnVnX2R1bXBfY2FjaGUoY2FjaGUpKTsgKi8KKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2FjaGUtPmJpY19kZXZzKSkgeworCQlibGtpZF9kZXYgZGV2ID0gbGlzdF9lbnRyeShjYWNoZS0+YmljX2RldnMubmV4dCwKKwkJCQkJICAgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsCisJCQkJCSAgICBiaWRfZGV2cyk7CisJCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWNoZS0+YmljX3RhZ3MpKSB7CisJCWJsa2lkX3RhZyB0YWcgPSBsaXN0X2VudHJ5KGNhY2hlLT5iaWNfdGFncy5uZXh0LAorCQkJCQkgICBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywKKwkJCQkJICAgYml0X3RhZ3MpOworCisJCXdoaWxlICghbGlzdF9lbXB0eSgmdGFnLT5iaXRfbmFtZXMpKSB7CisJCQlibGtpZF90YWcgYmFkID0gbGlzdF9lbnRyeSh0YWctPmJpdF9uYW1lcy5uZXh0LAorCQkJCQkJICAgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsCisJCQkJCQkgICBiaXRfbmFtZXMpOworCisJCQlEQkcoREVCVUdfQ0FDSEUsIHByaW50Zigid2FybmluZzogdW5mcmVlZCB0YWcgJXM9JXNcbiIsCisJCQkJCQliYWQtPmJpdF9uYW1lLCBiYWQtPmJpdF92YWwpKTsKKwkJCWJsa2lkX2ZyZWVfdGFnKGJhZCk7CisJCX0KKwkJYmxraWRfZnJlZV90YWcodGFnKTsKKwl9CisJZnJlZShjYWNoZS0+YmljX2ZpbGVuYW1lKTsKKworCWZyZWUoY2FjaGUpOworfQorCit2b2lkIGJsa2lkX2djX2NhY2hlKGJsa2lkX2NhY2hlIGNhY2hlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpwbmV4dDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghY2FjaGUpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBwbmV4dCwgJmNhY2hlLT5iaWNfZGV2cykgeworCQlibGtpZF9kZXYgZGV2ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiwgYmlkX2RldnMpOworCQlpZiAoIXApCisJCQlicmVhazsKKwkJaWYgKHN0YXQoZGV2LT5iaWRfbmFtZSwgJnN0KSA8IDApIHsKKwkJCURCRyhERUJVR19DQUNIRSwKKwkJCSAgICBwcmludGYoImZyZWVpbmcgJXNcbiIsIGRldi0+YmlkX25hbWUpKTsKKwkJCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJCQljYWNoZS0+YmljX2ZsYWdzIHw9IEJMS0lEX0JJQ19GTF9DSEFOR0VEOworCQl9IGVsc2UgeworCQkJREJHKERFQlVHX0NBQ0hFLAorCQkJICAgIHByaW50ZigiRGV2aWNlICVzIGV4aXN0c1xuIiwgZGV2LT5iaWRfbmFtZSkpOworCQl9CisJfQorfQorCisKKyNpZmRlZiBURVNUX1BST0dSQU0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKwlibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisJaW50IHJldDsKKworCWJsa2lkX2RlYnVnX21hc2sgPSBERUJVR19BTEw7CisJaWYgKChhcmdjID4gMikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgW2ZpbGVuYW1lXSBcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCWlmICgocmV0ID0gYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgYXJndlsxXSkpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yICVkIHBhcnNpbmcgY2FjaGUgZmlsZSAlc1xuIiwgcmV0LAorCQkJYXJndlsxXSA/IGFyZ3ZbMV0gOiBCTEtJRF9DQUNIRV9GSUxFKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCAiL2Rldi9udWxsIikpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCWlmICgocmV0ID0gYmxraWRfcHJvYmVfYWxsKGNhY2hlKSA8IDApKQorCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIHByb2JpbmcgZGV2aWNlc1xuIik7CisKKwlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC9kZXYuYyBiL2UyZnNwcm9ncy9saWIvYmxraWQvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4YTg2OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvZGV2LmMKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBkZXYuYyAtIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24vZnJlZSByb3V0aW5lcyBmb3IgZGV2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiYmxraWRQLmgiCisKK2Jsa2lkX2RldiBibGtpZF9uZXdfZGV2KHZvaWQpCit7CisJYmxraWRfZGV2IGRldjsKKworCWlmICghKGRldiA9IChibGtpZF9kZXYpIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYpKSkpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+YmlkX2RldnMpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmJpZF90YWdzKTsKKworCXJldHVybiBkZXY7Cit9CisKK3ZvaWQgYmxraWRfZnJlZV9kZXYoYmxraWRfZGV2IGRldikKK3sKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJREJHKERFQlVHX0RFViwKKwkgICAgcHJpbnRmKCIgIGZyZWVpbmcgZGV2ICVzICglcylcbiIsIGRldi0+YmlkX25hbWUsIGRldi0+YmlkX3R5cGUgPworCQkgICBkZXYtPmJpZF90eXBlIDogIihudWxsKSIpKTsKKwlEQkcoREVCVUdfREVWLCBibGtpZF9kZWJ1Z19kdW1wX2RldihkZXYpKTsKKworCWxpc3RfZGVsKCZkZXYtPmJpZF9kZXZzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+YmlkX3RhZ3MpKSB7CisJCWJsa2lkX3RhZyB0YWcgPSBsaXN0X2VudHJ5KGRldi0+YmlkX3RhZ3MubmV4dCwKKwkJCQkJICAgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsCisJCQkJCSAgIGJpdF90YWdzKTsKKwkJYmxraWRfZnJlZV90YWcodGFnKTsKKwl9CisJZnJlZShkZXYtPmJpZF9uYW1lKTsKKwlmcmVlKGRldik7Cit9CisKKy8qCisgKiBHaXZlbiBhIGJsa2lkIGRldmljZSwgcmV0dXJuIGl0cyBuYW1lCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICpibGtpZF9kZXZfZGV2bmFtZShibGtpZF9kZXYgZGV2KQoreworCXJldHVybiBkZXYtPmJpZF9uYW1lOworfQorCisjaWZkZWYgQ09ORklHX0JMS0lEX0RFQlVHCit2b2lkIGJsa2lkX2RlYnVnX2R1bXBfZGV2KGJsa2lkX2RldiBkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCWlmICghZGV2KSB7CisJCXByaW50ZigiICBkZXY6IE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKCIgIGRldjogbmFtZSA9ICVzXG4iLCBkZXYtPmJpZF9uYW1lKTsKKwlwcmludGYoIiAgZGV2OiBERVZOTz1cIjB4JTBsbHhcIlxuIiwgKGxvbmcgbG9uZylkZXYtPmJpZF9kZXZubyk7CisJcHJpbnRmKCIgIGRldjogVElNRT1cIiVsZFwiXG4iLCAobG9uZylkZXYtPmJpZF90aW1lKTsKKwlwcmludGYoIiAgZGV2OiBQUkk9XCIlZFwiXG4iLCBkZXYtPmJpZF9wcmkpOworCXByaW50ZigiICBkZXY6IGZsYWdzID0gMHglMDhYXG4iLCBkZXYtPmJpZF9mbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZkZXYtPmJpZF90YWdzKSB7CisJCWJsa2lkX3RhZyB0YWcgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnLCBiaXRfdGFncyk7CisJCWlmICh0YWcpCisJCQlwcmludGYoIiAgICB0YWc6ICVzPVwiJXNcIlxuIiwgdGFnLT5iaXRfbmFtZSwKKwkJCSAgICAgICB0YWctPmJpdF92YWwpOworCQllbHNlCisJCQlwcmludGYoIiAgICB0YWc6IE5VTExcbiIpOworCX0KKwlwcmludGYoIlxuIik7Cit9CisjZW5kaWYKKworLyoKKyAqIGRldiBpdGVyYXRpb24gcm91dGluZXMgZm9yIHRoZSBwdWJsaWMgbGliYmxraWQgaW50ZXJmYWNlLgorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGRvIG5vdCBleHBvc2UgdGhlIGxpc3QuaCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggYXJlIGEKKyAqIGNvbnRhbWluYXRpb24gb2YgdGhlIG5hbWVzcGFjZSwgYW5kIHdoaWNoIGZvcmNlIHVzIHRvIHJldmVhbCBmYXIsIGZhcgorICogdG9vIG11Y2ggb2Ygb3VyIGludGVybmFsIGltcGxlbWVuYXRpb24uICBJJ20gbm90IGNvbnZpbmNlZCBJIHdhbnQKKyAqIHRvIGtlZXAgbGlzdC5oIGluIHRoZSBsb25nIHRlcm0sIGFueXdheS4gIEl0J3MgZmluZSBmb3Iga2VybmVsCisgKiBwcm9ncmFtbWluZywgYnV0IHBlcmZvcm1hbmNlIGlzIG5vdCB0aGUgIzEgcHJpb3JpdHkgZm9yIHRoaXMKKyAqIGxpYnJhcnksIGFuZCBJIHJlYWxseSBkb24ndCBsaWtlIHRoZSB0cmFkZW9mZiBvZiB0eXBlLXNhZmV0eSBmb3IKKyAqIHBlcmZvcm1hbmNlIGZvciB0aGlzIGFwcGxpY2F0aW9uLiAgW3R5dHNvOjIwMDMwMTI1LjIwMDdFU1RdCisgKi8KKworLyoKKyAqIFRoaXMgc2VyaWVzIG9mIGZ1bmN0aW9ucyBpdGVyYXRlIG92ZXIgYWxsIGRldmljZXMgaW4gYSBibGtpZCBjYWNoZQorICovCisjZGVmaW5lIERFVl9JVEVSQVRFX01BR0lDCTB4MDFhNTI4NGMKKworc3RydWN0IGJsa2lkX3N0cnVjdF9kZXZfaXRlcmF0ZSB7CisJaW50CQkJbWFnaWM7CisJYmxraWRfY2FjaGUJCWNhY2hlOworCWNoYXIJCQkqc2VhcmNoX3R5cGU7CisJY2hhcgkJCSpzZWFyY2hfdmFsdWU7CisJc3RydWN0IGxpc3RfaGVhZAkqcDsKK307CisKK2V4dGVybiBibGtpZF9kZXZfaXRlcmF0ZSBibGtpZF9kZXZfaXRlcmF0ZV9iZWdpbihibGtpZF9jYWNoZSBjYWNoZSkKK3sKKwlibGtpZF9kZXZfaXRlcmF0ZQlpdGVyOworCisJaXRlciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGJsa2lkX3N0cnVjdF9kZXZfaXRlcmF0ZSkpOworCWlmIChpdGVyKSB7CisJCWl0ZXItPm1hZ2ljID0gREVWX0lURVJBVEVfTUFHSUM7CisJCWl0ZXItPmNhY2hlID0gY2FjaGU7CisJCWl0ZXItPnAJPSBjYWNoZS0+YmljX2RldnMubmV4dDsKKwkJaXRlci0+c2VhcmNoX3R5cGUgPSAwOworCQlpdGVyLT5zZWFyY2hfdmFsdWUgPSAwOworCX0KKwlyZXR1cm4gKGl0ZXIpOworfQorCitleHRlcm4gaW50IGJsa2lkX2Rldl9zZXRfc2VhcmNoKGJsa2lkX2Rldl9pdGVyYXRlIGl0ZXIsCisJCQkJIGNoYXIgKnNlYXJjaF90eXBlLCBjaGFyICpzZWFyY2hfdmFsdWUpCit7CisJY2hhciAqbmV3X3R5cGUsICpuZXdfdmFsdWU7CisKKwlpZiAoIWl0ZXIgfHwgaXRlci0+bWFnaWMgIT0gREVWX0lURVJBVEVfTUFHSUMgfHwgIXNlYXJjaF90eXBlIHx8CisJICAgICFzZWFyY2hfdmFsdWUpCisJCXJldHVybiAtMTsKKwluZXdfdHlwZSA9IG1hbGxvYyhzdHJsZW4oc2VhcmNoX3R5cGUpKzEpOworCW5ld192YWx1ZSA9IG1hbGxvYyhzdHJsZW4oc2VhcmNoX3ZhbHVlKSsxKTsKKwlpZiAoIW5ld190eXBlIHx8ICFuZXdfdmFsdWUpIHsKKwkJZnJlZShuZXdfdHlwZSk7CisJCWZyZWUobmV3X3ZhbHVlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJjcHkobmV3X3R5cGUsIHNlYXJjaF90eXBlKTsKKwlzdHJjcHkobmV3X3ZhbHVlLCBzZWFyY2hfdmFsdWUpOworCWZyZWUoaXRlci0+c2VhcmNoX3R5cGUpOworCWZyZWUoaXRlci0+c2VhcmNoX3ZhbHVlKTsKKwlpdGVyLT5zZWFyY2hfdHlwZSA9IG5ld190eXBlOworCWl0ZXItPnNlYXJjaF92YWx1ZSA9IG5ld192YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgKi8KK2V4dGVybiBpbnQgYmxraWRfZGV2X25leHQoYmxraWRfZGV2X2l0ZXJhdGUgaXRlciwKKwkJCSAgYmxraWRfZGV2ICpyZXRfZGV2KQoreworCWJsa2lkX2RldgkJZGV2OworCisJKnJldF9kZXYgPSAwOworCWlmICghaXRlciB8fCBpdGVyLT5tYWdpYyAhPSBERVZfSVRFUkFURV9NQUdJQykKKwkJcmV0dXJuIC0xOworCXdoaWxlIChpdGVyLT5wICE9ICZpdGVyLT5jYWNoZS0+YmljX2RldnMpIHsKKwkJZGV2ID0gbGlzdF9lbnRyeShpdGVyLT5wLCBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiwgYmlkX2RldnMpOworCQlpdGVyLT5wID0gaXRlci0+cC0+bmV4dDsKKwkJaWYgKGl0ZXItPnNlYXJjaF90eXBlICYmCisJCSAgICAhYmxraWRfZGV2X2hhc190YWcoZGV2LCBpdGVyLT5zZWFyY2hfdHlwZSwKKwkJCQkgICAgICAgaXRlci0+c2VhcmNoX3ZhbHVlKSkKKwkJCWNvbnRpbnVlOworCQkqcmV0X2RldiA9IGRldjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworZXh0ZXJuIHZvaWQgYmxraWRfZGV2X2l0ZXJhdGVfZW5kKGJsa2lkX2Rldl9pdGVyYXRlIGl0ZXIpCit7CisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IERFVl9JVEVSQVRFX01BR0lDKQorCQlyZXR1cm47CisJaXRlci0+bWFnaWMgPSAwOworCWZyZWUoaXRlcik7Cit9CisKKyNpZmRlZiBURVNUX1BST0dSQU0KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisKK3ZvaWQgdXNhZ2UoY2hhciAqcHJvZykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbLWYgYmxraWRfZmlsZV0gWy1tIGRlYnVnX21hc2tdXG4iLCBwcm9nKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0TGlzdCBhbGwgZGV2aWNlcyBhbmQgZXhpdFxuIik7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJsa2lkX2Rldl9pdGVyYXRlCWl0ZXI7CisJYmxraWRfY2FjaGUgCQljYWNoZSA9IE5VTEw7CisJYmxraWRfZGV2CQlkZXY7CisJaW50CQkJYywgcmV0OworCWNoYXIJCQkqdG1wOworCWNoYXIJCQkqZmlsZSA9IE5VTEw7CisJY2hhcgkJCSpzZWFyY2hfdHlwZSA9IE5VTEw7CisJY2hhcgkJCSpzZWFyY2hfdmFsdWUgPSBOVUxMOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAibTpmOiIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICdmJzoKKwkJCWZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlibGtpZF9kZWJ1Z19tYXNrID0gc3RydG91bCAob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGRlYnVnIG1hc2s6ICVzXG4iLAorCQkJCQlvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQl1c2FnZShhcmd2WzBdKTsKKwkJfQorCWlmIChhcmdjID49IG9wdGluZCsyKSB7CisJCXNlYXJjaF90eXBlID0gYXJndltvcHRpbmRdOworCQlzZWFyY2hfdmFsdWUgPSBhcmd2W29wdGluZCsxXTsKKwkJb3B0aW5kICs9IDI7CisJfQorCWlmIChhcmdjICE9IG9wdGluZCkKKwkJdXNhZ2UoYXJndlswXSk7CisKKwlpZiAoKHJldCA9IGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsIGZpbGUpKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIGNyZWF0aW5nIGNhY2hlICglZClcbiIsCisJCQlhcmd2WzBdLCByZXQpOworCQlleGl0KDEpOworCX0KKworCWl0ZXIgPSBibGtpZF9kZXZfaXRlcmF0ZV9iZWdpbihjYWNoZSk7CisJaWYgKHNlYXJjaF90eXBlKQorCQlibGtpZF9kZXZfc2V0X3NlYXJjaChpdGVyLCBzZWFyY2hfdHlwZSwgc2VhcmNoX3ZhbHVlKTsKKwl3aGlsZSAoYmxraWRfZGV2X25leHQoaXRlciwgJmRldikgPT0gMCkgeworCQlwcmludGYoIkRldmljZTogJXNcbiIsIGJsa2lkX2Rldl9kZXZuYW1lKGRldikpOworCX0KKwlibGtpZF9kZXZfaXRlcmF0ZV9lbmQoaXRlcik7CisKKworCWJsa2lkX3B1dF9jYWNoZShjYWNoZSk7CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC9kZXZuYW1lLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Rldm5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTUxMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9kZXZuYW1lLmMKQEAgLTAsMCArMSw1NTggQEAKKy8qCisgKiBkZXZuYW1lLmMgLSBnZXQgYSBkZXYgYnkgaXRzIGRldmljZSBpbm9kZSBuYW1lCisgKgorICogQ29weXJpZ2h0IChDKSBBbmRyaWVzIEJyb3V3ZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBUaGVvZG9yZSBUcydvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUtERVZfSAorI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiYmxraWRQLmgiCisKKy8qCisgKiBGaW5kIGEgZGV2IHN0cnVjdCBpbiB0aGUgY2FjaGUgYnkgZGV2aWNlIG5hbWUsIGlmIGF2YWlsYWJsZS4KKyAqCisgKiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aXRoIHRoZSBzcGVjaWZpZWQgZGV2aWNlIG5hbWUsIGFuZCB0aGUgY3JlYXRlCisgKiBmbGFnIGlzIHNldCwgdGhlbiBjcmVhdGUgYW4gZW1wdHkgZGV2aWNlIGVudHJ5LgorICovCitibGtpZF9kZXYgYmxraWRfZ2V0X2RldihibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqZGV2bmFtZSwgaW50IGZsYWdzKQoreworCWJsa2lkX2RldiBkZXYgPSBOVUxMLCB0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnBuZXh0OworCisJaWYgKCFjYWNoZSB8fCAhZGV2bmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiwgYmlkX2RldnMpOworCQlpZiAoc3RyY21wKHRtcC0+YmlkX25hbWUsIGRldm5hbWUpKQorCQkJY29udGludWU7CisKKwkJREJHKERFQlVHX0RFVk5BTUUsCisJCSAgICBwcmludGYoImZvdW5kIGRldm5hbWUgJXMgaW4gY2FjaGVcbiIsIHRtcC0+YmlkX25hbWUpKTsKKwkJZGV2ID0gdG1wOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRldiAmJiAoZmxhZ3MgJiBCTEtJRF9ERVZfQ1JFQVRFKSkgeworCQlpZiAoYWNjZXNzKGRldm5hbWUsIEZfT0spIDwgMCkKKwkJCXJldHVybiBOVUxMOworCQlkZXYgPSBibGtpZF9uZXdfZGV2KCk7CisJCWlmICghZGV2KQorCQkJcmV0dXJuIE5VTEw7CisJCWRldi0+YmlkX3RpbWUgPSBJTlRfTUlOOworCQlkZXYtPmJpZF9uYW1lID0gYmxraWRfc3RyZHVwKGRldm5hbWUpOworCQlkZXYtPmJpZF9jYWNoZSA9IGNhY2hlOworCQlsaXN0X2FkZF90YWlsKCZkZXYtPmJpZF9kZXZzLCAmY2FjaGUtPmJpY19kZXZzKTsKKwkJY2FjaGUtPmJpY19mbGFncyB8PSBCTEtJRF9CSUNfRkxfQ0hBTkdFRDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBCTEtJRF9ERVZfVkVSSUZZKSB7CisJCWRldiA9IGJsa2lkX3ZlcmlmeShjYWNoZSwgZGV2KTsKKwkJaWYgKCFkZXYgfHwgIShkZXYtPmJpZF9mbGFncyAmIEJMS0lEX0JJRF9GTF9WRVJJRklFRCkpCisJCQlyZXR1cm4gZGV2OworCQkvKgorCQkgKiBJZiB0aGUgZGV2aWNlIGlzIHZlcmlmaWVkLCB0aGVuIHNlYXJjaCB0aGUgYmxraWQKKwkJICogY2FjaGUgZm9yIGFueSBlbnRyaWVzIHRoYXQgbWF0Y2ggb24gdGhlIHR5cGUsIHV1aWQsCisJCSAqIGFuZCBsYWJlbCwgYW5kIHZlcmlmeSB0aGVtOyBpZiBhIGNhY2hlIGVudHJ5IGNhbgorCQkgKiBub3QgYmUgdmVyaWZpZWQsIHRoZW4gaXQncyBzdGFsZSBhbmQgc28gd2UgcmVtb3ZlCisJCSAqIGl0LgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHBuZXh0LCAmY2FjaGUtPmJpY19kZXZzKSB7CisJCQlibGtpZF9kZXYgZGV2MjsKKwkJCWlmICghcCkKKwkJCQlicmVhazsKKwkJCWRldjIgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2LCBiaWRfZGV2cyk7CisJCQlpZiAoZGV2Mi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFkZXYtPmJpZF90eXBlIHx8ICFkZXYyLT5iaWRfdHlwZSB8fAorCQkJICAgIHN0cmNtcChkZXYtPmJpZF90eXBlLCBkZXYyLT5iaWRfdHlwZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoZGV2LT5iaWRfbGFiZWwgJiYgZGV2Mi0+YmlkX2xhYmVsICYmCisJCQkgICAgc3RyY21wKGRldi0+YmlkX2xhYmVsLCBkZXYyLT5iaWRfbGFiZWwpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRldi0+YmlkX3V1aWQgJiYgZGV2Mi0+YmlkX3V1aWQgJiYKKwkJCSAgICBzdHJjbXAoZGV2LT5iaWRfdXVpZCwgZGV2Mi0+YmlkX3V1aWQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKChkZXYtPmJpZF9sYWJlbCAmJiAhZGV2Mi0+YmlkX2xhYmVsKSB8fAorCQkJICAgICghZGV2LT5iaWRfbGFiZWwgJiYgZGV2Mi0+YmlkX2xhYmVsKSB8fAorCQkJICAgIChkZXYtPmJpZF91dWlkICYmICFkZXYyLT5iaWRfdXVpZCkgfHwKKwkJCSAgICAoIWRldi0+YmlkX3V1aWQgJiYgZGV2Mi0+YmlkX3V1aWQpKQorCQkJCWNvbnRpbnVlOworCQkJZGV2MiA9IGJsa2lkX3ZlcmlmeShjYWNoZSwgZGV2Mik7CisJCQlpZiAoZGV2MiAmJiAhKGRldjItPmJpZF9mbGFncyAmIEJMS0lEX0JJRF9GTF9WRVJJRklFRCkpCisJCQkJYmxraWRfZnJlZV9kZXYoZGV2Mik7CisJCX0KKwl9CisJcmV0dXJuIGRldjsKK30KKworLyogRGlyZWN0b3JpZXMgd2hlcmUgd2Ugd2lsbCB0cnkgdG8gc2VhcmNoIGZvciBkZXZpY2UgbmFtZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkaXJsaXN0W10gPSB7ICIvZGV2IiwgIi9kZXZmcyIsICIvZGV2aWNlcyIsIE5VTEwgfTsKKworc3RhdGljIGludCBpc19kbV9sZWFmKGNvbnN0IGNoYXIgKmRldm5hbWUpCit7CisJc3RydWN0IGRpcmVudAkqZGUsICpkX2RlOworCURJUgkJKmRpciwgKmRfZGlyOworCWNoYXIJCXBhdGhbMjU2XTsKKwlpbnQJCXJldCA9IDE7CisKKwlpZiAoKGRpciA9IG9wZW5kaXIoIi9zeXMvYmxvY2siKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikgfHwKKwkJICAgICFzdHJjbXAoZGUtPmRfbmFtZSwgZGV2bmFtZSkgfHwKKwkJICAgIHN0cm5jbXAoZGUtPmRfbmFtZSwgImRtLSIsIDMpIHx8CisJCSAgICBzdHJsZW4oZGUtPmRfbmFtZSkgPiBzaXplb2YocGF0aCktMzIpCisJCQljb250aW51ZTsKKwkJc3ByaW50ZihwYXRoLCAiL3N5cy9ibG9jay8lcy9zbGF2ZXMiLCBkZS0+ZF9uYW1lKTsKKwkJaWYgKChkX2RpciA9IG9wZW5kaXIocGF0aCkpID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKChkX2RlID0gcmVhZGRpcihkX2RpcikpICE9IE5VTEwpIHsKKwkJCWlmICghc3RyY21wKGRfZGUtPmRfbmFtZSwgZGV2bmFtZSkpIHsKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWNsb3NlZGlyKGRfZGlyKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2luY2UgMi42LjI5IChwYXRjaCA3ODRhYWU3MzVkOWIwYmJhM2Y4YjlmYWVmNGM4YjMwZGYzYmYwMTI4KSBrZXJuZWwgc3lzZnMKKyAqIHByb3ZpZGVzIHRoZSByZWFsIERNIGRldmljZSBuYW1lcyBpbiAvc3lzL2Jsb2NrLzxwdG5hbWU+L2RtL25hbWUKKyAqLworc3RhdGljIGNoYXIgKmdldF9kbV9uYW1lKGNvbnN0IGNoYXIgKnB0bmFtZSkKK3sKKwlGSUxFCSpmOworCXNpemVfdAlzejsKKwljaGFyCXBhdGhbMjU2XSwgbmFtZVsyNTZdLCAqcmVzID0gTlVMTDsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9zeXMvYmxvY2svJXMvZG0vbmFtZSIsIHB0bmFtZSk7CisJaWYgKChmID0gZm9wZW4ocGF0aCwgInIiKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiByZWFkICI8bmFtZT5cbiIgZnJvbSBzeXNmcyAqLworCWlmIChmZ2V0cyhuYW1lLCBzaXplb2YobmFtZSksIGYpICYmIChzeiA9IHN0cmxlbihuYW1lKSkgPiAxKSB7CisJCW5hbWVbc3ogLSAxXSA9ICdcMCc7CisJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9kZXYvbWFwcGVyLyVzIiwgbmFtZSk7CisJCXJlcyA9IGJsa2lkX3N0cmR1cChwYXRoKTsKKwl9CisJZmNsb3NlKGYpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBQcm9iZSBhIHNpbmdsZSBibG9jayBkZXZpY2UgdG8gYWRkIHRvIHRoZSBkZXZpY2UgY2FjaGUuCisgKi8KK3N0YXRpYyB2b2lkIHByb2JlX29uZShibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqcHRuYW1lLAorCQkgICAgICBkZXZfdCBkZXZubywgaW50IHByaSwgaW50IG9ubHlfaWZfbmV3KQoreworCWJsa2lkX2RldiBkZXYgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpwbmV4dDsKKwljb25zdCBjaGFyICoqZGlyOworCWNoYXIgKmRldm5hbWUgPSBOVUxMOworCisJLyogU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGRldmljZSBudW1iZXIgaW4gdGhlIGNhY2hlLiAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBwbmV4dCwgJmNhY2hlLT5iaWNfZGV2cykgeworCQlibGtpZF9kZXYgdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X2RldiwKKwkJCQkJICAgYmlkX2RldnMpOworCQlpZiAodG1wLT5iaWRfZGV2bm8gPT0gZGV2bm8pIHsKKwkJCWlmIChvbmx5X2lmX25ldyAmJiAhYWNjZXNzKHRtcC0+YmlkX25hbWUsIEZfT0spKQorCQkJCXJldHVybjsKKwkJCWRldiA9IGJsa2lkX3ZlcmlmeShjYWNoZSwgdG1wKTsKKwkJCWlmIChkZXYgJiYgKGRldi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKSkKKwkJCQlicmVhazsKKwkJCWRldiA9IDA7CisJCX0KKwl9CisJaWYgKGRldiAmJiBkZXYtPmJpZF9kZXZubyA9PSBkZXZubykKKwkJZ290byBzZXRfcHJpOworCisJLyogVHJ5IHRvIHRyYW5zbGF0ZSBwcml2YXRlIGRldmljZS1tYXBwZXIgZG0tPE4+IG5hbWVzCisJICogdG8gc3RhbmRhcmQgL2Rldi9tYXBwZXIvPG5hbWU+LgorCSAqLworCWlmICghc3RybmNtcChwdG5hbWUsICJkbS0iLCAzKSAmJiBpc2RpZ2l0KHB0bmFtZVszXSkpIHsKKwkJZGV2bmFtZSA9IGdldF9kbV9uYW1lKHB0bmFtZSk7CisJCWlmICghZGV2bmFtZSkKKwkJCWJsa2lkX19zY2FuX2RpcigiL2Rldi9tYXBwZXIiLCBkZXZubywgMCwgJmRldm5hbWUpOworCQlpZiAoZGV2bmFtZSkKKwkJCWdvdG8gZ2V0X2RldjsKKwl9CisKKwkvKgorCSAqIFRha2UgYSBxdWljayBsb29rIGF0IC9kZXYvcHRuYW1lIGZvciB0aGUgZGV2aWNlIG51bWJlci4gIFdlIGNoZWNrCisJICogYWxsIG9mIHRoZSBsaWtlbHkgZGV2aWNlIGRpcmVjdG9yaWVzLiAgSWYgd2UgZG9uJ3QgZmluZCBpdCwgb3IgaWYKKwkgKiB0aGUgc3RhdCBpbmZvcm1hdGlvbiBkb2Vzbid0IGNoZWNrIG91dCwgdXNlIGJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoKQorCSAqIHRvIGZpbmQgaXQgdmlhIGFuIGV4aGF1c3RpdmUgc2VhcmNoIGZvciB0aGUgZGV2aWNlIG1ham9yL21pbm9yLgorCSAqLworCWZvciAoZGlyID0gZGlybGlzdDsgKmRpcjsgZGlyKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYXIgZGV2aWNlWzI1Nl07CisKKwkJc3ByaW50ZihkZXZpY2UsICIlcy8lcyIsICpkaXIsIHB0bmFtZSk7CisJCWlmICgoZGV2ID0gYmxraWRfZ2V0X2RldihjYWNoZSwgZGV2aWNlLCBCTEtJRF9ERVZfRklORCkpICYmCisJCSAgICBkZXYtPmJpZF9kZXZubyA9PSBkZXZubykKKwkJCWdvdG8gc2V0X3ByaTsKKworCQlpZiAoc3RhdChkZXZpY2UsICZzdCkgPT0gMCAmJiBTX0lTQkxLKHN0LnN0X21vZGUpICYmCisJCSAgICBzdC5zdF9yZGV2ID09IGRldm5vKSB7CisJCQlkZXZuYW1lID0gYmxraWRfc3RyZHVwKGRldmljZSk7CisJCQlnb3RvIGdldF9kZXY7CisJCX0KKwl9CisJLyogRG8gYSBzaG9ydC1jdXQgc2NhbiBvZiAvZGV2L21hcHBlciBmaXJzdCAqLworCWlmICghZGV2bmFtZSkKKwkJZGV2bmFtZSA9IGdldF9kbV9uYW1lKHB0bmFtZSk7CisJaWYgKCFkZXZuYW1lKQorCQlibGtpZF9fc2Nhbl9kaXIoIi9kZXYvbWFwcGVyIiwgZGV2bm8sIDAsICZkZXZuYW1lKTsKKwlpZiAoIWRldm5hbWUpIHsKKwkJZGV2bmFtZSA9IGJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoZGV2bm8pOworCQlpZiAoIWRldm5hbWUpCisJCQlyZXR1cm47CisJfQorZ2V0X2RldjoKKwlkZXYgPSBibGtpZF9nZXRfZGV2KGNhY2hlLCBkZXZuYW1lLCBCTEtJRF9ERVZfTk9STUFMKTsKKwlmcmVlKGRldm5hbWUpOworc2V0X3ByaToKKwlpZiAoZGV2KSB7CisJCWlmIChwcmkpCisJCQlkZXYtPmJpZF9wcmkgPSBwcmk7CisJCWVsc2UgaWYgKCFzdHJuY21wKGRldi0+YmlkX25hbWUsICIvZGV2L21hcHBlci8iLCAxMSkpIHsKKwkJCWRldi0+YmlkX3ByaSA9IEJMS0lEX1BSSV9ETTsKKwkJCWlmIChpc19kbV9sZWFmKHB0bmFtZSkpCisJCQkJZGV2LT5iaWRfcHJpICs9IDU7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAocHRuYW1lLCAibWQiLCAyKSkKKwkJCWRldi0+YmlkX3ByaSA9IEJMS0lEX1BSSV9NRDsKKyAJfQorCXJldHVybjsKK30KKworI2RlZmluZSBQUk9DX1BBUlRJVElPTlMgIi9wcm9jL3BhcnRpdGlvbnMiCisjZGVmaW5lIFZHX0RJUgkJIi9wcm9jL2x2bS9WR3MiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBVVUlEIGNhY2hlIHdpdGggZGV2aWNlcyBmcm9tIHRoZSBMVk0KKyAqIHByb2MgaGllcmFyY2h5LiAgV2UgY3VycmVudGx5IGRlcGVuZCBvbiB0aGUgbmFtZXMgb2YgdGhlIExWTQorICogaGllcmFyY2h5IGdpdmluZyB1cyB0aGUgZGV2aWNlIHN0cnVjdHVyZSBpbiAvZGV2LiAgKFhYWCBpcyB0aGlzIGEKKyAqIHNhZmUgdGhpbmcgdG8gZG8/KQorICovCisjaWZkZWYgVkdfRElSCitzdGF0aWMgZGV2X3QgbHZtX2dldF9kZXZubyhjb25zdCBjaGFyICpsdm1fZGV2aWNlKQoreworCUZJTEUgKmx2ZjsKKwljaGFyIGJ1ZlsxMDI0XTsKKwlpbnQgbWEsIG1pOworCWRldl90IHJldCA9IDA7CisKKwlEQkcoREVCVUdfREVWTkFNRSwgcHJpbnRmKCJvcGVuaW5nICVzXG4iLCBsdm1fZGV2aWNlKSk7CisJaWYgKChsdmYgPSBmb3Blbihsdm1fZGV2aWNlLCAiciIpKSA9PSBOVUxMKSB7CisJCURCRyhERUJVR19ERVZOQU1FLCBwcmludGYoIiVzOiAoJWQpICVzXG4iLCBsdm1fZGV2aWNlLCBlcnJubywKKwkJCQkJICBzdHJlcnJvcihlcnJubykpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGx2ZikpIHsKKwkJaWYgKHNzY2FuZihidWYsICJkZXZpY2U6ICVkOiVkIiwgJm1hLCAmbWkpID09IDIpIHsKKwkJCXJldCA9IG1ha2VkZXYobWEsIG1pKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZjbG9zZShsdmYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbHZtX3Byb2JlX2FsbChibGtpZF9jYWNoZSBjYWNoZSwgaW50IG9ubHlfaWZfbmV3KQoreworCURJUgkJKnZnX2xpc3Q7CisJc3RydWN0IGRpcmVudAkqdmdfaXRlcjsKKwlpbnQJCXZnX2xlbiA9IHN0cmxlbihWR19ESVIpOworCWRldl90CQlkZXY7CisKKwlpZiAoKHZnX2xpc3QgPSBvcGVuZGlyKFZHX0RJUikpID09IE5VTEwpCisJCXJldHVybjsKKworCURCRyhERUJVR19ERVZOQU1FLCBwcmludGYoInByb2JpbmcgTFZNIGRldmljZXMgdW5kZXIgJXNcbiIsIFZHX0RJUikpOworCisJd2hpbGUgKCh2Z19pdGVyID0gcmVhZGRpcih2Z19saXN0KSkgIT0gTlVMTCkgeworCQlESVIJCSpsdl9saXN0OworCQljaGFyCQkqdmRpcm5hbWU7CisJCWNoYXIJCSp2Z19uYW1lOworCQlzdHJ1Y3QgZGlyZW50CSpsdl9pdGVyOworCisJCXZnX25hbWUgPSB2Z19pdGVyLT5kX25hbWU7CisJCWlmICghc3RyY21wKHZnX25hbWUsICIuIikgfHwgIXN0cmNtcCh2Z19uYW1lLCAiLi4iKSkKKwkJCWNvbnRpbnVlOworCQl2ZGlybmFtZSA9IG1hbGxvYyh2Z19sZW4gKyBzdHJsZW4odmdfbmFtZSkgKyA4KTsKKwkJaWYgKCF2ZGlybmFtZSkKKwkJCWdvdG8gZXhpdDsKKwkJc3ByaW50Zih2ZGlybmFtZSwgIiVzLyVzL0xWcyIsIFZHX0RJUiwgdmdfbmFtZSk7CisKKwkJbHZfbGlzdCA9IG9wZW5kaXIodmRpcm5hbWUpOworCQlmcmVlKHZkaXJuYW1lKTsKKwkJaWYgKGx2X2xpc3QgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlICgobHZfaXRlciA9IHJlYWRkaXIobHZfbGlzdCkpICE9IE5VTEwpIHsKKwkJCWNoYXIJCSpsdl9uYW1lLCAqbHZtX2RldmljZTsKKworCQkJbHZfbmFtZSA9IGx2X2l0ZXItPmRfbmFtZTsKKwkJCWlmICghc3RyY21wKGx2X25hbWUsICIuIikgfHwgIXN0cmNtcChsdl9uYW1lLCAiLi4iKSkKKwkJCQljb250aW51ZTsKKworCQkJbHZtX2RldmljZSA9IG1hbGxvYyh2Z19sZW4gKyBzdHJsZW4odmdfbmFtZSkgKworCQkJCQkgICAgc3RybGVuKGx2X25hbWUpICsgOCk7CisJCQlpZiAoIWx2bV9kZXZpY2UpIHsKKwkJCQljbG9zZWRpcihsdl9saXN0KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQlzcHJpbnRmKGx2bV9kZXZpY2UsICIlcy8lcy9MVnMvJXMiLCBWR19ESVIsIHZnX25hbWUsCisJCQkJbHZfbmFtZSk7CisJCQlkZXYgPSBsdm1fZ2V0X2Rldm5vKGx2bV9kZXZpY2UpOworCQkJc3ByaW50Zihsdm1fZGV2aWNlLCAiJXMvJXMiLCB2Z19uYW1lLCBsdl9uYW1lKTsKKwkJCURCRyhERUJVR19ERVZOQU1FLCBwcmludGYoIkxWTSBkZXYgJXM6IGRldm5vIDB4JTA0WFxuIiwKKwkJCQkJCSAgbHZtX2RldmljZSwKKwkJCQkJCSAgKHVuc2lnbmVkIGludCkgZGV2KSk7CisJCQlwcm9iZV9vbmUoY2FjaGUsIGx2bV9kZXZpY2UsIGRldiwgQkxLSURfUFJJX0xWTSwKKwkJCQkgIG9ubHlfaWZfbmV3KTsKKwkJCWZyZWUobHZtX2RldmljZSk7CisJCX0KKwkJY2xvc2VkaXIobHZfbGlzdCk7CisJfQorZXhpdDoKKwljbG9zZWRpcih2Z19saXN0KTsKK30KKyNlbmRpZgorCisjZGVmaW5lIFBST0NfRVZNU19WT0xVTUVTICIvcHJvYy9ldm1zL3ZvbHVtZXMiCisKK3N0YXRpYyBpbnQKK2V2bXNfcHJvYmVfYWxsKGJsa2lkX2NhY2hlIGNhY2hlLCBpbnQgb25seV9pZl9uZXcpCit7CisJY2hhciBsaW5lWzEwMF07CisJaW50IG1hLCBtaSwgc3osIG51bSA9IDA7CisJRklMRSAqcHJvY3B0OworCWNoYXIgZGV2aWNlWzExMF07CisKKwlwcm9jcHQgPSBmb3BlbihQUk9DX0VWTVNfVk9MVU1FUywgInIiKTsKKwlpZiAoIXByb2NwdCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgcHJvY3B0KSkgeworCQlpZiAoc3NjYW5mIChsaW5lLCAiICVkICVkICVkICUqcyAlKnMgJVteXG4gXSIsCisJCQkgICAgJm1hLCAmbWksICZzeiwgZGV2aWNlKSAhPSA0KQorCQkJY29udGludWU7CisKKwkJREJHKERFQlVHX0RFVk5BTUUsIHByaW50ZigiQ2hlY2tpbmcgcGFydGl0aW9uICVzICglZCwgJWQpXG4iLAorCQkJCQkgIGRldmljZSwgbWEsIG1pKSk7CisKKwkJcHJvYmVfb25lKGNhY2hlLCBkZXZpY2UsIG1ha2VkZXYobWEsIG1pKSwgQkxLSURfUFJJX0VWTVMsCisJCQkgIG9ubHlfaWZfbmV3KTsKKwkJbnVtKys7CisJfQorCWZjbG9zZShwcm9jcHQpOworCXJldHVybiBudW07Cit9CisKKy8qCisgKiBSZWFkIHRoZSBkZXZpY2UgZGF0YSBmb3IgYWxsIGF2YWlsYWJsZSBibG9jayBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgcHJvYmVfYWxsKGJsa2lkX2NhY2hlIGNhY2hlLCBpbnQgb25seV9pZl9uZXcpCit7CisJRklMRSAqcHJvYzsKKwljaGFyIGxpbmVbMTAyNF07CisJY2hhciBwdG5hbWUwWzEyOF0sIHB0bmFtZTFbMTI4XSwgKnB0bmFtZSA9IDA7CisJY2hhciAqcHRuYW1lc1syXTsKKwlkZXZfdCBkZXZzWzJdOworCWludCBtYSwgbWk7CisJdW5zaWduZWQgbG9uZyBsb25nIHN6OworCWludCBsZW5zWzJdID0geyAwLCAwIH07CisJaW50IHdoaWNoID0gMCwgbGFzdCA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnBuZXh0OworCisJcHRuYW1lc1swXSA9IHB0bmFtZTA7CisJcHRuYW1lc1sxXSA9IHB0bmFtZTE7CisKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmIChjYWNoZS0+YmljX2ZsYWdzICYgQkxLSURfQklDX0ZMX1BST0JFRCAmJgorCSAgICB0aW1lKDApIC0gY2FjaGUtPmJpY190aW1lIDwgQkxLSURfUFJPQkVfSU5URVJWQUwpCisJCXJldHVybiAwOworCisJYmxraWRfcmVhZF9jYWNoZShjYWNoZSk7CisJZXZtc19wcm9iZV9hbGwoY2FjaGUsIG9ubHlfaWZfbmV3KTsKKyNpZmRlZiBWR19ESVIKKwlsdm1fcHJvYmVfYWxsKGNhY2hlLCBvbmx5X2lmX25ldyk7CisjZW5kaWYKKworCXByb2MgPSBmb3BlbihQUk9DX1BBUlRJVElPTlMsICJyIik7CisJaWYgKCFwcm9jKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QUk9DOworCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgcHJvYykpIHsKKwkJbGFzdCA9IHdoaWNoOworCQl3aGljaCBePSAxOworCQlwdG5hbWUgPSBwdG5hbWVzW3doaWNoXTsKKworCQlpZiAoc3NjYW5mKGxpbmUsICIgJWQgJWQgJWxsdSAlMTI4W15cbiBdIiwKKwkJCSAgICZtYSwgJm1pLCAmc3osIHB0bmFtZSkgIT0gNCkKKwkJCWNvbnRpbnVlOworCQlkZXZzW3doaWNoXSA9IG1ha2VkZXYobWEsIG1pKTsKKworCQlEQkcoREVCVUdfREVWTkFNRSwgcHJpbnRmKCJyZWFkIHBhcnRpdGlvbiBuYW1lICVzXG4iLCBwdG5hbWUpKTsKKworCQkvKiBTa2lwIHdob2xlIGRpc2sgZGV2cyB1bmxlc3MgdGhleSBoYXZlIG5vIHBhcnRpdGlvbnMuCisJCSAqIElmIGJhc2UgbmFtZSBvZiBkZXZpY2UgaGFzIGNoYW5nZWQsIGFsc28KKwkJICogY2hlY2sgcHJldmlvdXMgZGV2IHRvIHNlZSBpZiBpdCBkaWRuJ3QgaGF2ZSBhIHBhcnRuLgorCQkgKiBoZXVyaXN0aWM6IHBhcnRpdGlvbiBuYW1lIGVuZHMgaW4gYSBkaWdpdCwgJiBwYXJ0aXRpb24KKwkJICogbmFtZXMgY29udGFpbiB3aG9sZSBkZXZpY2UgbmFtZSBhcyBzdWJzdHJpbmcuCisJCSAqCisJCSAqIFNraXAgZXh0ZW5kZWQgcGFydGl0aW9ucy4KKwkJICogaGV1cmlzdGljOiBzaXplIGlzIDEKKwkJICoKKwkJICogRklYTUU6IHNraXAgL2Rldi97aWRhLGNjaXNzLHJkfSB3aG9sZS1kaXNrIGRldnMKKwkJICovCisKKwkJbGVuc1t3aGljaF0gPSBzdHJsZW4ocHRuYW1lKTsKKworCQkvKiBlbmRzIGluIGEgZGlnaXQsIGNsZWFybHkgYSBwYXJ0aXRpb24sIHNvIGNoZWNrICovCisJCWlmIChpc2RpZ2l0KHB0bmFtZVtsZW5zW3doaWNoXSAtIDFdKSkgeworCQkJREJHKERFQlVHX0RFVk5BTUUsCisJCQkgICAgcHJpbnRmKCJwYXJ0aXRpb24gZGV2ICVzLCBkZXZubyAweCUwNFhcbiIsCisJCQkJICAgcHRuYW1lLCAodW5zaWduZWQgaW50KSBkZXZzW3doaWNoXSkpOworCisJCQlpZiAoc3ogPiAxKQorCQkJCXByb2JlX29uZShjYWNoZSwgcHRuYW1lLCBkZXZzW3doaWNoXSwgMCwKKwkJCQkJICBvbmx5X2lmX25ldyk7CisJCQlsZW5zW3doaWNoXSA9IDA7CS8qIG1hcmsgYXMgY2hlY2tlZCAqLworCQl9CisKKwkJLyoKKwkJICogSWYgbGFzdCB3YXMgYSB3aG9sZSBkaXNrIGFuZCB3ZSBqdXN0IGZvdW5kIGEgcGFydGl0aW9uCisJCSAqIG9uIGl0LCByZW1vdmUgdGhlIHdob2xlLWRpc2sgZGV2IGZyb20gdGhlIGNhY2hlIGlmCisJCSAqIGl0IGV4aXN0cy4KKwkJICovCisJCWlmIChsZW5zW2xhc3RdICYmICFzdHJuY21wKHB0bmFtZXNbbGFzdF0sIHB0bmFtZSwgbGVuc1tsYXN0XSkpIHsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBwbmV4dCwgJmNhY2hlLT5iaWNfZGV2cykgeworCQkJCWJsa2lkX2RldiB0bXA7CisKKwkJCQkvKiBmaW5kIGJsa2lkIGRldiBmb3IgdGhlIHdob2xlLWRpc2sgZGV2bm8gKi8KKwkJCQl0bXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfZGV2LAorCQkJCQkJIGJpZF9kZXZzKTsKKwkJCQlpZiAodG1wLT5iaWRfZGV2bm8gPT0gZGV2c1tsYXN0XSkgeworCQkJCQlEQkcoREVCVUdfREVWTkFNRSwKKwkJCQkJCXByaW50ZigiZnJlZWluZyAlc1xuIiwKKwkJCQkJCSAgICAgICB0bXAtPmJpZF9uYW1lKSk7CisJCQkJCWJsa2lkX2ZyZWVfZGV2KHRtcCk7CisJCQkJCWNhY2hlLT5iaWNfZmxhZ3MgfD0gQkxLSURfQklDX0ZMX0NIQU5HRUQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWxlbnNbbGFzdF0gPSAwOworCQl9CisJCS8qCisJCSAqIElmIGxhc3Qgd2FzIG5vdCBjaGVja2VkIGJlY2F1c2UgaXQgbG9va2VkIGxpa2UgYSB3aG9sZS1kaXNrCisJCSAqIGRldiwgYW5kIHRoZSBkZXZpY2UncyBiYXNlIG5hbWUgaGFzIGNoYW5nZWQsCisJCSAqIGNoZWNrIGxhc3QgYXMgd2VsbC4KKwkJICovCisJCWlmIChsZW5zW2xhc3RdICYmIHN0cm5jbXAocHRuYW1lc1tsYXN0XSwgcHRuYW1lLCBsZW5zW2xhc3RdKSkgeworCQkJREJHKERFQlVHX0RFVk5BTUUsCisJCQkgICAgcHJpbnRmKCJ3aG9sZSBkZXYgJXMsIGRldm5vIDB4JTA0WFxuIiwKKwkJCQkgICBwdG5hbWVzW2xhc3RdLCAodW5zaWduZWQgaW50KSBkZXZzW2xhc3RdKSk7CisJCQlwcm9iZV9vbmUoY2FjaGUsIHB0bmFtZXNbbGFzdF0sIGRldnNbbGFzdF0sIDAsCisJCQkJICBvbmx5X2lmX25ldyk7CisJCQlsZW5zW2xhc3RdID0gMDsKKwkJfQorCX0KKworCS8qIEhhbmRsZSB0aGUgbGFzdCBkZXZpY2UgaWYgaXQgd2Fzbid0IHBhcnRpdGlvbmVkICovCisJaWYgKGxlbnNbd2hpY2hdKQorCQlwcm9iZV9vbmUoY2FjaGUsIHB0bmFtZSwgZGV2c1t3aGljaF0sIDAsIG9ubHlfaWZfbmV3KTsKKworCWZjbG9zZShwcm9jKTsKKwlibGtpZF9mbHVzaF9jYWNoZShjYWNoZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBibGtpZF9wcm9iZV9hbGwoYmxraWRfY2FjaGUgY2FjaGUpCit7CisJaW50IHJldDsKKworCURCRyhERUJVR19QUk9CRSwgcHJpbnRmKCJCZWdpbiBibGtpZF9wcm9iZV9hbGwoKVxuIikpOworCXJldCA9IHByb2JlX2FsbChjYWNoZSwgMCk7CisJY2FjaGUtPmJpY190aW1lID0gdGltZSgwKTsKKwljYWNoZS0+YmljX2ZsYWdzIHw9IEJMS0lEX0JJQ19GTF9QUk9CRUQ7CisJREJHKERFQlVHX1BST0JFLCBwcmludGYoIkVuZCBibGtpZF9wcm9iZV9hbGwoKVxuIikpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBibGtpZF9wcm9iZV9hbGxfbmV3KGJsa2lkX2NhY2hlIGNhY2hlKQoreworCWludCByZXQ7CisKKwlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigiQmVnaW4gYmxraWRfcHJvYmVfYWxsX25ldygpXG4iKSk7CisJcmV0ID0gcHJvYmVfYWxsKGNhY2hlLCAxKTsKKwlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigiRW5kIGJsa2lkX3Byb2JlX2FsbF9uZXcoKVxuIikpOworCXJldHVybiByZXQ7Cit9CisKKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJsa2lkX2NhY2hlIGNhY2hlID0gTlVMTDsKKwlpbnQgcmV0OworCisJYmxraWRfZGVidWdfbWFzayA9IERFQlVHX0FMTDsKKwlpZiAoYXJnYyAhPSAxKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzXG4iCisJCQkiUHJvYmUgYWxsIGRldmljZXMgYW5kIGV4aXRcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAoKHJldCA9IGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsICIvZGV2L251bGwiKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciBjcmVhdGluZyBjYWNoZSAoJWQpXG4iLAorCQkJYXJndlswXSwgcmV0KTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKGJsa2lkX3Byb2JlX2FsbChjYWNoZSkgPCAwKQorCQlwcmludGYoIiVzOiBlcnJvciBwcm9iaW5nIGRldmljZXNcbiIsIGFyZ3ZbMF0pOworCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Rldm5vLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2Rldm5vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNWM5MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvZGV2bm8uYwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIGRldm5vLmMgLSBmaW5kIGEgcGFydGljdWxhciBkZXZpY2UgYnkgaXRzIGRldmljZSBudW1iZXIgKG1ham9yL21pbm9yKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMyBUaGVvZG9yZSBUcydvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQW5kcmVhcyBEaWxnZXIKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUtERVZfSAorI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJibGtpZFAuaCIKKworY2hhciAqYmxraWRfc3RybmR1cChjb25zdCBjaGFyICpzLCBpbnQgbGVuZ3RoKQoreworCWNoYXIgKnJldDsKKworCWlmICghcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWxlbmd0aCkKKwkJbGVuZ3RoID0gc3RybGVuKHMpOworCisJcmV0ID0gbWFsbG9jKGxlbmd0aCArIDEpOworCWlmIChyZXQpIHsKKwkJc3RybmNweShyZXQsIHMsIGxlbmd0aCk7CisJCXJldFtsZW5ndGhdID0gJ1wwJzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworY2hhciAqYmxraWRfc3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIGJsa2lkX3N0cm5kdXAocywgMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYW4gZW50cnkgdG8gdGhlIGRpcmVjdG9yeSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGFkZF90b19kaXJsaXN0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGRpcl9saXN0ICpkcDsKKworCWRwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyX2xpc3QpKTsKKwlpZiAoIWRwKQorCQlyZXR1cm47CisJZHAtPm5hbWUgPSBibGtpZF9zdHJkdXAobmFtZSk7CisJaWYgKCFkcC0+bmFtZSkgeworCQlmcmVlKGRwKTsKKwkJcmV0dXJuOworCX0KKwlkcC0+bmV4dCA9ICpsaXN0OworCSpsaXN0ID0gZHA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGEgZGlyZWN0b3J5IGxpc3QKKyAqLworc3RhdGljIHZvaWQgZnJlZV9kaXJsaXN0KHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGRpcl9saXN0ICpkcCwgKm5leHQ7CisKKwlmb3IgKGRwID0gKmxpc3Q7IGRwOyBkcCA9IG5leHQpIHsKKwkJbmV4dCA9IGRwLT5uZXh0OworCQlmcmVlKGRwLT5uYW1lKTsKKwkJZnJlZShkcCk7CisJfQorCSpsaXN0ID0gTlVMTDsKK30KKwordm9pZCBibGtpZF9fc2Nhbl9kaXIoY2hhciAqZGlybmFtZSwgZGV2X3QgZGV2bm8sIHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QsCisJCSAgICAgY2hhciAqKmRldm5hbWUpCit7CisJRElSCSpkaXI7CisJc3RydWN0IGRpcmVudCAqZHA7CisJY2hhcglwYXRoWzEwMjRdOworCWludAlkaXJsZW47CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoKGRpciA9IG9wZW5kaXIoZGlybmFtZSkpID09IE5VTEwpCisJCXJldHVybjsKKwlkaXJsZW4gPSBzdHJsZW4oZGlybmFtZSkgKyAyOworCXdoaWxlICgoZHAgPSByZWFkZGlyKGRpcikpICE9IDApIHsKKwkJaWYgKGRpcmxlbiArIHN0cmxlbihkcC0+ZF9uYW1lKSA+PSBzaXplb2YocGF0aCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZHAtPmRfbmFtZVswXSA9PSAnLicgJiYKKwkJICAgICgoZHAtPmRfbmFtZVsxXSA9PSAwKSB8fAorCQkgICAgICgoZHAtPmRfbmFtZVsxXSA9PSAnLicpICYmIChkcC0+ZF9uYW1lWzJdID09IDApKSkpCisJCQljb250aW51ZTsKKworCQlzcHJpbnRmKHBhdGgsICIlcy8lcyIsIGRpcm5hbWUsIGRwLT5kX25hbWUpOworCQlpZiAoc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChTX0lTQkxLKHN0LnN0X21vZGUpICYmIHN0LnN0X3JkZXYgPT0gZGV2bm8pIHsKKwkJCSpkZXZuYW1lID0gYmxraWRfc3RyZHVwKHBhdGgpOworCQkJREJHKERFQlVHX0RFVk5PLAorCQkJICAgIHByaW50ZigiZm91bmQgMHglbGx4IGF0ICVzICglcClcbiIsIChsb25nIGxvbmcpZGV2bm8sCisJCQkJICAgcGF0aCwgKmRldm5hbWUpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChsaXN0ICYmIFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIWxzdGF0KHBhdGgsICZzdCkgJiYKKwkJICAgIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQlhZGRfdG9fZGlybGlzdChwYXRoLCBsaXN0KTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm47Cit9CisKKy8qIERpcmVjdG9yaWVzIHdoZXJlIHdlIHdpbGwgdHJ5IHRvIHNlYXJjaCBmb3IgZGV2aWNlIG51bWJlcnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZXZkaXJzW10gPSB7ICIvZGV2aWNlcyIsICIvZGV2ZnMiLCAiL2RldiIsIE5VTEwgfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIHBhdGhuYW1lIHRvIGEgYmxvY2sgZGV2aWNlIHdpdGggYSBnaXZlbgorICogZGV2aWNlIG51bWJlci4gIEl0IHJldHVybnMgYSBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgdG8gdGhlCisgKiBwYXRobmFtZSBvbiBzdWNjZXNzLCBhbmQgTlVMTCBvbiBmYWlsdXJlLgorICovCitjaGFyICpibGtpZF9kZXZub190b19kZXZuYW1lKGRldl90IGRldm5vKQoreworCXN0cnVjdCBkaXJfbGlzdCAqbGlzdCA9IE5VTEwsICpuZXdfbGlzdCA9IE5VTEw7CisJY2hhciAqZGV2bmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqKmRpcjsKKworCS8qCisJICogQWRkIHRoZSBzdGFydGluZyBkaXJlY3RvcmllcyB0byBzZWFyY2ggaW4gcmV2ZXJzZSBvcmRlciBvZgorCSAqIGltcG9ydGFuY2UsIHNpbmNlIHdlIGFyZSB1c2luZyBhIHN0YWNrLi4uCisJICovCisJZm9yIChkaXIgPSBkZXZkaXJzOyAqZGlyOyBkaXIrKykKKwkJYWRkX3RvX2Rpcmxpc3QoKmRpciwgJmxpc3QpOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGRpcl9saXN0ICpjdXJyZW50ID0gbGlzdDsKKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJREJHKERFQlVHX0RFVk5PLCBwcmludGYoImRpcmVjdG9yeSAlc1xuIiwgY3VycmVudC0+bmFtZSkpOworCQlibGtpZF9fc2Nhbl9kaXIoY3VycmVudC0+bmFtZSwgZGV2bm8sICZuZXdfbGlzdCwgJmRldm5hbWUpOworCQlmcmVlKGN1cnJlbnQtPm5hbWUpOworCQlmcmVlKGN1cnJlbnQpOworCQlpZiAoZGV2bmFtZSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBJZiB3ZSdyZSBkb25lIGNoZWNraW5nIGF0IHRoaXMgbGV2ZWwsIGRlc2NlbmQgdG8KKwkJICogdGhlIG5leHQgbGV2ZWwgb2Ygc3ViZGlyZWN0b3JpZXMuIChicmVhZHRoLWZpcnN0KQorCQkgKi8KKwkJaWYgKGxpc3QgPT0gTlVMTCkgeworCQkJbGlzdCA9IG5ld19saXN0OworCQkJbmV3X2xpc3QgPSBOVUxMOworCQl9CisJfQorCWZyZWVfZGlybGlzdCgmbGlzdCk7CisJZnJlZV9kaXJsaXN0KCZuZXdfbGlzdCk7CisKKwlpZiAoIWRldm5hbWUpIHsKKwkJREJHKERFQlVHX0RFVk5PLAorCQkgICAgcHJpbnRmKCJibGtpZDogY291bGRuJ3QgZmluZCBkZXZubyAweCUwNGx4XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIGRldm5vKSk7CisJfSBlbHNlIHsKKwkJREJHKERFQlVHX0RFVk5PLAorCQkgICAgcHJpbnRmKCJmb3VuZCBkZXZubyAweCUwNGxseCBhcyAlc1xuIiwgKGxvbmcgbG9uZylkZXZubywgZGV2bmFtZSkpOworCX0KKworCisJcmV0dXJuIGRldm5hbWU7Cit9CisKKyNpZmRlZiBURVNUX1BST0dSQU0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKwljaGFyCSpkZXZuYW1lLCAqdG1wOworCWludAltYWpvciwgbWlub3I7CisJZGV2X3QJZGV2bm87CisJY29uc3QgY2hhciAqZXJybXNnID0gIkNvdWxkbid0IHBhcnNlICVzOiAlc1xuIjsKKworCWJsa2lkX2RlYnVnX21hc2sgPSBERUJVR19BTEw7CisJaWYgKChhcmdjICE9IDIpICYmIChhcmdjICE9IDMpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XHQlcyBkZXZpY2VfbnVtYmVyXG5cdCVzIG1ham9yIG1pbm9yXG4iCisJCQkiUmVzb2x2ZSBhIGRldmljZSBudW1iZXIgdG8gYSBkZXZpY2UgbmFtZVxuIiwKKwkJCWFyZ3ZbMF0sIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAoYXJnYyA9PSAyKSB7CisJCWRldm5vID0gc3RydG91bChhcmd2WzFdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBlcnJtc2csICJkZXZpY2UgbnVtYmVyIiwgYXJndlsxXSk7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlIHsKKwkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbMV0sICZ0bXAsIDApOworCQlpZiAoKnRtcCkgeworCQkJZnByaW50ZihzdGRlcnIsIGVycm1zZywgIm1ham9yIG51bWJlciIsIGFyZ3ZbMV0pOworCQkJZXhpdCgxKTsKKwkJfQorCQltaW5vciA9IHN0cnRvdWwoYXJndlsyXSwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgZXJybXNnLCAibWlub3IgbnVtYmVyIiwgYXJndlsyXSk7CisJCQlleGl0KDEpOworCQl9CisJCWRldm5vID0gbWFrZWRldihtYWpvciwgbWlub3IpOworCX0KKwlwcmludGYoIkxvb2tpbmcgZm9yIGRldmljZSAweCUwNGxseFxuIiwgKGxvbmcgbG9uZylkZXZubyk7CisJZGV2bmFtZSA9IGJsa2lkX2Rldm5vX3RvX2Rldm5hbWUoZGV2bm8pOworCWZyZWUoZGV2bmFtZSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvZ2V0c2l6ZS5jIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9nZXRzaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MTc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvZ2V0c2l6ZS5jCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogZ2V0c2l6ZS5jIC0tLSBnZXQgdGhlIHNpemUgb2YgYSBwYXJ0aXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk1IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworLyogaW5jbHVkZSB0aGlzIGJlZm9yZSBzeXMvcXVldWVzLmghICovCisjaW5jbHVkZSAiYmxraWRQLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0RJU0tfSAorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4gLyogZm9yIExJU1RfSEVBRCAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2Rpc2suaD4KKyNlbmRpZgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykgJiYgIWRlZmluZWQoQkxLR0VUU0laRSkKKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikJLyogcmV0dXJuIGRldmljZSBzaXplICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JT1IpICYmICFkZWZpbmVkKEJMS0dFVFNJWkU2NCkKKyNkZWZpbmUgQkxLR0VUU0laRTY0IF9JT1IoMHgxMiwxMTQsc2l6ZV90KQkvKiByZXR1cm4gZGV2aWNlIHNpemUgaW4gYnl0ZXMgKHU2NCAqYXJnKSAqLworI2VuZGlmCisKKyNpZmRlZiBBUFBMRV9EQVJXSU4KKyNkZWZpbmUgQkxLR0VUU0laRSBES0lPQ0dFVEJMT0NLQ09VTlQzMgorI2VuZGlmIC8qIEFQUExFX0RBUldJTiAqLworCitzdGF0aWMgaW50IHZhbGlkX29mZnNldChpbnQgZmQsIGJsa2lkX2xvZmZfdCBvZmZzZXQpCit7CisJY2hhciBjaDsKKworCWlmIChibGtpZF9sbHNlZWsoZmQsIG9mZnNldCwgMCkgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAocmVhZChmZCwgJmNoLCAxKSA8IDEpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgcGFydGl0aW9uCisgKi8KK2Jsa2lkX2xvZmZfdCBibGtpZF9nZXRfZGV2X3NpemUoaW50IGZkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplNjQ7CisJYmxraWRfbG9mZl90IGhpZ2gsIGxvdzsKKworI2lmZGVmIERLSU9DR0VUQkxPQ0tDT1VOVAkvKiBGb3IgQXBwbGUgRGFyd2luICovCisJaWYgKGlvY3RsKGZkLCBES0lPQ0dFVEJMT0NLQ09VTlQsICZzaXplNjQpID49IDApIHsKKwkJaWYgKHNpemVvZihibGtpZF9sb2ZmX3QpIDwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgJiYKKwkJICAgIChzaXplNjQgPDwgOSkgPiAweEZGRkZGRkZGKQorCQkJcmV0dXJuIDA7IC8qIEVGQklHICovCisJCXJldHVybiAoYmxraWRfbG9mZl90KXNpemU2NCA8PCA5OworCX0KKyNlbmRpZgorCisjaWZkZWYgQkxLR0VUU0laRTY0CisJeworCQlpbnQgdmFsaWRfYmxrZ2V0c2l6ZTY0ID0gMTsKKyNpZmRlZiBfX2xpbnV4X18KKwkJc3RydWN0CQl1dHNuYW1lIHV0OworCisJCWlmICgodW5hbWUoJnV0KSA9PSAwKSAmJgorCQkgICAgKCh1dC5yZWxlYXNlWzBdID09ICcyJykgJiYgKHV0LnJlbGVhc2VbMV0gPT0gJy4nKSAmJgorCQkgICAgICh1dC5yZWxlYXNlWzJdIDwgJzYnKSAmJiAodXQucmVsZWFzZVszXSA9PSAnLicpKSkKKwkJCXZhbGlkX2Jsa2dldHNpemU2NCA9IDA7CisjZW5kaWYKKwkJaWYgKHZhbGlkX2Jsa2dldHNpemU2NCAmJgorCQkgICAgaW9jdGwoZmQsIEJMS0dFVFNJWkU2NCwgJnNpemU2NCkgPj0gMCkgeworCQkJaWYgKHNpemVvZihibGtpZF9sb2ZmX3QpIDwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgJiYKKwkJCSAgICAoc2l6ZTY0ID4gMHhGRkZGRkZGRikpCisJCQkJcmV0dXJuIDA7IC8qIEVGQklHICovCisJCQlyZXR1cm4gc2l6ZTY0OworCQl9CisJfQorI2VuZGlmIC8qIEJMS0dFVFNJWkU2NCAqLworCisjaWZkZWYgQkxLR0VUU0laRQorCXsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCWlmIChpb2N0bChmZCwgQkxLR0VUU0laRSwgJnNpemUpID49IDApCisJCQlyZXR1cm4gKGJsa2lkX2xvZmZfdClzaXplIDw8IDk7CisJfQorI2VuZGlmCisKKy8qIHRlc3RlZCBvbiBGcmVlQlNEIDYuMS1SRUxFQVNFIGkzODYgKi8KKyNpZmRlZiBESU9DR01FRElBU0laRQorCWlmIChpb2N0bChmZCwgRElPQ0dNRURJQVNJWkUsICZzaXplNjQpID49IDApCisJCXJldHVybiAob2ZmX3Qpc2l6ZTY0OworI2VuZGlmIC8qIERJT0NHTUVESUFTSVpFICovCisKKyNpZmRlZiBGREdFVFBSTQorCXsKKwkJc3RydWN0IGZsb3BweV9zdHJ1Y3QgdGhpc19mbG9wcHk7CisKKwkJaWYgKGlvY3RsKGZkLCBGREdFVFBSTSwgJnRoaXNfZmxvcHB5KSA+PSAwKQorCQkJcmV0dXJuIChibGtpZF9sb2ZmX3QpdGhpc19mbG9wcHkuc2l6ZSA8PCA5OworCX0KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICisJeworCQlpbnQgcGFydCA9IC0xOworCQlzdHJ1Y3QgZGlza2xhYmVsIGxhYjsKKwkJc3RydWN0IHBhcnRpdGlvbiAqcHA7CisJCWNoYXIgY2g7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCS8qCisJCSAqIFRoaXMgY29kZSB3b3JrcyBmb3IgRnJlZUJTRCA0LjExIGkzODYsIGV4Y2VwdCBmb3IgdGhlIGZ1bGwKKwkJICogZGV2aWNlIChzdWNoIGFzIC9kZXYvYWQwKS4gSXQgZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvcgorCQkgKiBuZXdlciBGcmVlQlNEIHRob3VnaC4gRnJlZUJTRCA+PSA1LjAgc2hvdWxkIGJlIGNvdmVyZWQgYnkKKwkJICogdGhlIERJT0NHTUVESUFTSVpFIGFib3ZlIGhvd2V2ZXIuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBGcmVlQlNEID49IDQuMCBoYXMgZGlzayBkZXZpY2VzIGFzIHVuYnVmZmVyZWQgKHJhdywKKwkJICogY2hhcmFjdGVyKSBkZXZpY2VzLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBTX0lTQ0hSLCB0b28uCisJCSAqLworCQlpZiAoZnN0YXQoZmQsICZzdCkgPj0gMCAmJgorCQkgICAgKFNfSVNCTEsoc3Quc3RfbW9kZSkgfHwgU19JU0NIUihzdC5zdF9tb2RlKSkpCisJCQlwYXJ0ID0gc3Quc3RfcmRldiAmIDc7CisKKwkJaWYgKHBhcnQgPj0gMCAmJiAoaW9jdGwoZmQsIERJT0NHRElORk8sIChjaGFyICopJmxhYikgPj0gMCkpIHsKKwkJCXBwID0gJmxhYi5kX3BhcnRpdGlvbnNbcGFydF07CisJCQlpZiAocHAtPnBfc2l6ZSkKKwkJCQlyZXR1cm4gcHAtPnBfc2l6ZSA8PCA5OworCQl9CisJfQorI2VuZGlmIC8qIEhBVkVfU1lTX0RJU0tMQUJFTF9IICovCisJeworI2lmIGRlZmluZWQoSEFWRV9GU1RBVDY0KSAmJiAhZGVmaW5lZChfX09TWF9BVkFJTEFCTEVfQlVUX0RFUFJFQ0FURUQpCisJCXN0cnVjdCBzdGF0NjQgICBzdDsKKwkJaWYgKGZzdGF0NjQoZmQsICZzdCkgPT0gMCkKKyNlbHNlCisJCXN0cnVjdCBzdGF0CXN0OworCQlpZiAoZnN0YXQoZmQsICZzdCkgPT0gMCkKKyNlbmRpZgorCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQkJcmV0dXJuIHN0LnN0X3NpemU7CisJfQorCisJLyoKKwkgKiBPSywgd2UgY291bGRuJ3QgZmlndXJlIGl0IG91dCBieSB1c2luZyBhIHNwZWNpYWxpemVkIGlvY3RsLAorCSAqIHdoaWNoIGlzIGdlbmVyYWxseSB0aGUgYmVzdCB3YXkuICBTbyBkbyBiaW5hcnkgc2VhcmNoIHRvCisJICogZmluZCB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLgorCSAqLworCWxvdyA9IDA7CisJZm9yIChoaWdoID0gMTAyNDsgdmFsaWRfb2Zmc2V0KGZkLCBoaWdoKTsgaGlnaCAqPSAyKQorCQlsb3cgPSBoaWdoOworCXdoaWxlIChsb3cgPCBoaWdoIC0gMSkgeworCQljb25zdCBibGtpZF9sb2ZmX3QgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKKworCQlpZiAodmFsaWRfb2Zmc2V0KGZkLCBtaWQpKQorCQkJbG93ID0gbWlkOworCQllbHNlCisJCQloaWdoID0gbWlkOworCX0KKwlyZXR1cm4gbG93ICsgMTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWxvbmcgbG9uZyBieXRlczsKKwlpbnQJZmQ7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iCisJCQkiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGEgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRE9OTFkpKSA8IDApCisJCXBlcnJvcihhcmd2WzBdKTsKKworCWJ5dGVzID0gYmxraWRfZ2V0X2Rldl9zaXplKGZkKTsKKwlwcmludGYoIkRldmljZSAlcyBoYXMgJWxsZCAxayBibG9ja3MuXG4iLCBhcmd2WzFdLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzID4+IDEwKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL2xpYmJsa2lkLjMuaW4gYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2xpYmJsa2lkLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNGNiMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvbGliYmxraWQuMy5pbgpAQCAtMCwwICsxLDgwIEBACisuXCIgQ29weXJpZ2h0IDIwMDEgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAdHVyYm9saW51eC5jb20pCisuXCIKKy5cIiBUaGlzIG1hbiBwYWdlIHdhcyBjcmVhdGVkIGZvciBsaWJibGtpZC5zby4xLjAgZnJvbSBlMmZzcHJvZ3MtMS4yNC4KKy5cIgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuXCIgQ3JlYXRlZCAgV2VkIFNlcCAxNCAxMjowMjoxMiAyMDAxLCBBbmRyZWFzIERpbGdlcgorLlRIIExJQkJMS0lEIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2xpYmJsa2lkIFwtIGJsb2NrIGRldmljZSBpZGVudGlmaWNhdGlvbiBsaWJyYXJ5CisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxibGtpZC9ibGtpZC5oPgorLnNwCisuQiBjYworLkkgZmlsZS5jCisuQiBcLWxibGtpZAorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIGxpYmJsa2lkCitsaWJyYXJ5IGlzIHVzZWQgdG8gaWRlbnRpZnkgYmxvY2sgZGV2aWNlcyAoZGlza3MpIGFzIHRvIHRoZWlyIGNvbnRlbnQgKGUuZy4KK2ZpbGVzeXN0ZW0gdHlwZSkgYXMgd2VsbCBhcyBleHRyYWN0aW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcworZmlsZXN5c3RlbSBsYWJlbHMvdm9sdW1lIG5hbWVzLCB1bmlxdWUgaWRlbnRpZmllcnMvc2VyaWFsIG51bWJlcnMsIGV0Yy4KK0EgY29tbW9uIHVzZSBpcyB0byBhbGxvdyB1c2Ugb2YgTEFCRUw9IGFuZCBVVUlEPSB0YWdzIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcKK3NwZWNpZmljIGJsb2NrIGRldmljZSBuYW1lcyBpbnRvIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisuUAorQmxvY2sgZGV2aWNlIGluZm9ybWF0aW9uIGlzIG5vcm1hbGx5IGtlcHQgaW4gYSBjYWNoZSBmaWxlCisuSSAvZXRjL2Jsa2lkLnRhYgorYW5kIGlzIHZlcmlmaWVkIHRvIHN0aWxsIGJlIHZhbGlkIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGUgdXNlcgorKGlmIHRoZSB1c2VyIGhhcyByZWFkIHBlcm1pc3Npb24gb24gdGhlIHJhdyBibG9jayBkZXZpY2UsIG90aGVyd2lzZSBub3QpLgorVGhlIGNhY2hlIGZpbGUgYWxzbyBhbGxvd3MgdW5wcml2aWxlZ2VkIHVzZXJzIChub3JtYWxseSBhbnlvbmUgb3RoZXIKK3RoYW4gcm9vdCwgb3IgdGhvc2Ugbm90IGluIHRoZSAiZGlzayIgZ3JvdXApIHRvIGxvY2F0ZSBkZXZpY2VzIGJ5IGxhYmVsL2lkLgorVGhlIHN0YW5kYXJkIGxvY2F0aW9uIG9mIHRoZSBjYWNoZSBmaWxlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgQkxLSURfRklMRS4KKy5QCitJbiBzaXR1YXRpb25zIHdoZXJlIG9uZSBpcyBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGtub3duIGRldmljZSwKK2l0IGRvZXMgbm90IGltcGFjdCBwZXJmb3JtYW5jZSB3aGV0aGVyIHRoZSBjYWNoZSBpcyB1c2VkIG9yIG5vdCAodW5sZXNzIHlvdQorYXJlIG5vdCBhYmxlIHRvIHJlYWQgdGhlIGJsb2NrIGRldmljZSBkaXJlY3RseSkuICBJZiB5b3UgYXJlIGRlYWxpbmcgd2l0aAorbXVsdGlwbGUgZGV2aWNlcywgdXNlIG9mIHRoZSBjYWNoZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgKGV2ZW4gaWYgZW1wdHkpIGFzCitkZXZpY2VzIHdpbGwgYmUgc2Nhbm5lZCBhdCBtb3N0IG9uZSB0aW1lIGFuZCB0aGUgb24tZGlzayBjYWNoZSB3aWxsIGJlCit1cGRhdGVkIGlmIHBvc3NpYmxlLiAgVGhlcmUgaXMgcmFyZWx5IGEgcmVhc29uIG5vdCB0byB1c2UgdGhlIGNhY2hlLgorLlAKK0luIHNvbWUgY2FzZXMgKG1vZHVsYXIga2VybmVscyksIGJsb2NrIGRldmljZXMgYXJlIG5vdCBldmVuIHZpc2libGUgdW50aWwKK2FmdGVyIHRoZXkgYXJlIGFjY2Vzc2VkIHRoZSBmaXJzdCB0aW1lLCBzbyBpdCBpcyBjcml0aWNhbCB0aGF0IHRoZXJlIGlzCitzb21lIHdheSB0byBsb2NhdGUgdGhlc2UgZGV2aWNlcyB3aXRob3V0IGVudW1lcmF0aW5nIG9ubHkgdmlzaWJsZSBkZXZpY2VzLAorc28gdGhlIHVzZSBvZiB0aGUgY2FjaGUgZmlsZSBpcworLkIgcmVxdWlyZWQKK2luIHRoaXMgc2l0dWF0aW9uLgorLlNIIEFVVEhPUgorLkIgbGliYmxraWQKK3dhcyB3cml0dGVuIGJ5IEFuZHJlYXMgRGlsZ2VyIGZvciB0aGUgZXh0MiBmaWxlc3lzdGVtIHV0aWx0aWVzLCB3aXRoIGlucHV0Citmcm9tIFRlZCBUcydvLiAgVGhlIGxpYnJhcnkgd2FzIHN1YnNlcXVlbnRseSBoZWF2aWx5IG1vZGlmaWVkIGJ5IFRlZCBUcydvLgorLlNIIEZJTEVTCisuVFAKKy5JIC9ldGMvYmxraWQudGFiCitDYWNoZXMgZGF0YSBleHRyYWN0ZWQgZnJvbSBlYWNoIHJlY29nbml6ZWQgYmxvY2sgZGV2aWNlLgorLlNIIEFWQUlMQUJJTElUWQorLkIgbGliYmxraWQKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIHNpbmNlIHZlcnNpb24gMS4zMyBhbmQgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIENPUFlJTkcKKy5CIGxpYmJsa2lkCitpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKSwKK3ZlcnNpb24gMiAob3IgYXQgeW91ciBkaXNjcmV0aW9uIGFueSBsYXRlciB2ZXJzaW9uKS4gIEEgY29weSBvZiB0aGUgTEdQTAorc2hvdWxkIGJlIGluY2x1ZGVkIHdpdGggdGhpcyBsaWJyYXJ5IGluIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisuUlMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLmJyCis1MSBGcmFua2xpbiBTdAorLmJyCitGaWZ0aCBGbG9vcgorLmJyCitCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKy5SRQorLlBQCitvciB2aXNpdAorLlVSIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0xHUEwKK2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0xHUEwKKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiBibGtpZCAoOCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvbGlzdC5oIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhNWFjMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvbGlzdC5oCkBAIC0wLDAgKzEsMTc2IEBACisjaWYgIWRlZmluZWQoX0JMS0lEX0xJU1RfSCkgJiYgIWRlZmluZWQoTElTVF9IRUFEX0lOSVQpCisjZGVmaW5lIF9CTEtJRF9MSVNUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX0lOTElORV8gc3RhdGljIF9faW5saW5lX18KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBXYXRjb20gQyAqLworI2RlZmluZSBfSU5MSU5FXyBzdGF0aWMgaW5saW5lCisjZW5kaWYKKworLyoKKyAqIFNpbXBsZSBkb3VibHkgbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24uCisgKgorICogU29tZSBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zICgiX194eHgiKSBhcmUgdXNlZnVsIHdoZW4KKyAqIG1hbmlwdWxhdGluZyB3aG9sZSBsaXN0cyByYXRoZXIgdGhhbiBzaW5nbGUgZW50cmllcywgYXMKKyAqIHNvbWV0aW1lcyB3ZSBhbHJlYWR5IGtub3cgdGhlIG5leHQvcHJldiBlbnRyaWVzIGFuZCB3ZSBjYW4KKyAqIGdlbmVyYXRlIGJldHRlciBjb2RlIGJ5IHVzaW5nIHRoZW0gZGlyZWN0bHkgcmF0aGVyIHRoYW4KKyAqIHVzaW5nIHRoZSBnZW5lcmljIHNpbmdsZS1lbnRyeSByb3V0aW5lcy4KKyAqLworCitzdHJ1Y3QgbGlzdF9oZWFkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKK307CisKKyNkZWZpbmUgTElTVF9IRUFEX0lOSVQobmFtZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0KKworI2RlZmluZSBJTklUX0xJU1RfSEVBRChwdHIpIGRvIHsgXAorCShwdHIpLT5uZXh0ID0gKHB0cik7IChwdHIpLT5wcmV2ID0gKHB0cik7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitfSU5MSU5FXyB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqIGFkZCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwlzdHJ1Y3QgbGlzdF9oZWFkICogbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gYWRkOworCWFkZC0+bmV4dCA9IG5leHQ7CisJYWRkLT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gYWRkOworfQorCisvKioKKyAqIGxpc3RfYWRkIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAYWRkOgluZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOglsaXN0IGhlYWQgdG8gYWRkIGl0IGFmdGVyCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KKyAqLworX0lOTElORV8gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICphZGQsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChhZGQsIGhlYWQsIGhlYWQtPm5leHQpOworfQorCisvKioKKyAqIGxpc3RfYWRkX3RhaWwgLSBhZGQgYSBuZXcgZW50cnkKKyAqIEBhZGQ6CW5ldyBlbnRyeSB0byBiZSBhZGRlZAorICogQGhlYWQ6CWxpc3QgaGVhZCB0byBhZGQgaXQgYmVmb3JlCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHF1ZXVlcy4KKyAqLworX0lOTElORV8gdm9pZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKmFkZCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xpc3RfYWRkKGFkZCwgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSBsaXN0IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMKKyAqIHBvaW50IHRvIGVhY2ggb3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLworX0lOTElORV8gdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCit7CisJbmV4dC0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5leHQ7Cit9CisKKy8qKgorICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KKyAqIEBlbnRyeToJdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKgorICogbGlzdF9lbXB0eSgpIG9uIEBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCBAZW50cnkgaXMKKyAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAqLworX0lOTElORV8gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7Cit9CisKKy8qKgorICogbGlzdF9kZWxfaW5pdCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0IGFuZCByZWluaXRpYWxpemUgaXQuCisgKiBAZW50cnk6CXRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICovCitfSU5MSU5FXyB2b2lkIGxpc3RfZGVsX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworCUlOSVRfTElTVF9IRUFEKGVudHJ5KTsKK30KKworLyoqCisgKiBsaXN0X2VtcHR5IC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkKKyAqIEBoZWFkOgl0aGUgbGlzdCB0byB0ZXN0LgorICovCitfSU5MSU5FXyBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2UgLSBqb2luIHR3byBsaXN0cworICogQGxpc3Q6CXRoZSBuZXcgbGlzdCB0byBhZGQuCisgKiBAaGVhZDoJdGhlIHBsYWNlIHRvIGFkZCBpdCBpbiB0aGUgZmlyc3QgbGlzdC4KKyAqLworX0lOTElORV8gdm9pZCBsaXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0gbGlzdC0+bmV4dDsKKworCWlmIChmaXJzdCAhPSBsaXN0KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxhc3QgPSBsaXN0LT5wcmV2OworCQlzdHJ1Y3QgbGlzdF9oZWFkICphdCA9IGhlYWQtPm5leHQ7CisKKwkJZmlyc3QtPnByZXYgPSBoZWFkOworCQloZWFkLT5uZXh0ID0gZmlyc3Q7CisKKwkJbGFzdC0+bmV4dCA9IGF0OworCQlhdC0+cHJldiA9IGxhc3Q7CisJfQorfQorCisvKioKKyAqIGxpc3RfZW50cnkgLSBnZXQgdGhlIHN0cnVjdCBmb3IgdGhpcyBlbnRyeQorICogQHB0cjoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHBvaW50ZXIuCisgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwkoKHR5cGUgKikoKGNoYXIgKikocHRyKS0odW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iZXIpKSkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoIC0gaXRlcmF0ZSBvdmVyIGVsZW1lbnRzIGluIGEgbGlzdAorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBsaXN0X2Zvcl9lYWNoX3NhZmUgLSBpdGVyYXRlIG92ZXIgZWxlbWVudHMgaW4gYSBsaXN0LCBidXQgZG9uJ3QgZGVyZWZlcmVuY2UKKyAqICAgICAgICAgICAgICAgICAgICAgIHBvcyBhZnRlciB0aGUgYm9keSBpcyBkb25lIChpbiBjYXNlIGl0IGlzIGZyZWVkKQorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBwbmV4dDoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgaXRlbS4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0IChub3QgaW5jbHVkZWQgaW4gaXRlcmF0aW9uKS4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwbmV4dCwgaGVhZCkgXAorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0LCBwbmV4dCA9IHBvcy0+bmV4dDsgcG9zICE9IChoZWFkKTsgXAorCSAgICAgcG9zID0gcG5leHQsIHBuZXh0ID0gcG9zLT5uZXh0KQorCisjdW5kZWYgX0lOTElORV8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9CTEtJRF9MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvbGxzZWVrLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2xsc2Vlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL2xsc2Vlay5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogbGxzZWVrLmMgLS0gc3R1YiBjYWxsaW5nIHRoZSBsbHNlZWsgc3lzdGVtIGNhbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX19NU0RPU19fCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiYmxraWRQLmgiCisKKyNpZmRlZiBfX2xpbnV4X18KKworI2lmIGRlZmluZWQoSEFWRV9MU0VFSzY0KSAmJiBkZWZpbmVkKEhBVkVfTFNFRUs2NF9QUk9UT1RZUEUpCisKKyNkZWZpbmUgbXlfbGxzZWVrIGxzZWVrNjQKKworI2VsaWYgZGVmaW5lZChIQVZFX0xMU0VFSykKKyNpbmNsdWRlIDxzeXNjYWxsLmg+CisKKyNpZm5kZWYgSEFWRV9MTFNFRUtfUFJPVE9UWVBFCitleHRlcm4gbG9uZyBsb25nIGxsc2VlayhpbnQgZmQsIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnaW4pOworI2VuZGlmCisKKyNkZWZpbmUgbXlfbGxzZWVrIGxsc2VlaworCisjZWxzZQkvKiAhIEhBVkVfTExTRUVLICovCisKKyNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfTE9OR19MT05HCisKKyNkZWZpbmUgbGxzZWVrIGxzZWVrCisKKyNlbHNlIC8qIFNJWkVPRl9MT05HICE9IFNJWkVPRl9MT05HX0xPTkcgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjaWZuZGVmIF9fTlJfX2xsc2VlaworI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAxNDAKKyNlbmRpZgorCisjaWZuZGVmIF9faTM4Nl9fCitzdGF0aWMgaW50IF9sbHNlZWsodW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkgICBibGtpZF9sb2ZmX3QgKiwgdW5zaWduZWQgaW50KTsKKworc3RhdGljIF9zeXNjYWxsNShpbnQsIF9sbHNlZWssIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGxvbmcsIG9mZnNldF9oaWdoLAorCQkgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdywgYmxraWRfbG9mZl90ICosIHJlc3VsdCwKKwkJIHVuc2lnbmVkIGludCwgb3JpZ2luKQorI2VuZGlmCisKK3N0YXRpYyBibGtpZF9sb2ZmX3QgbXlfbGxzZWVrKGludCBmZCwgYmxraWRfbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3sKKwlibGtpZF9sb2ZmX3QgcmVzdWx0OworCWludCByZXR2YWw7CisKKyNpZm5kZWYgX19pMzg2X18KKwlyZXR2YWwgPSBfbGxzZWVrKGZkLCAoKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KSA+PiAzMiwKKwkJCSAoKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQpICYgMHhmZmZmZmZmZiwKKwkJCSAmcmVzdWx0LCBvcmlnaW4pOworI2Vsc2UKKwlyZXR2YWwgPSBzeXNjYWxsKF9fTlJfX2xsc2VlaywgZmQsICgodW5zaWduZWQgbG9uZyBsb25nKSBvZmZzZXQpID4+IDMyLAorCQkJICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorCQkJICZyZXN1bHQsIG9yaWdpbik7CisjZW5kaWYKKwlyZXR1cm4gKHJldHZhbCA9PSAtMSA/IChibGtpZF9sb2ZmX3QpIHJldHZhbCA6IHJlc3VsdCk7Cit9CisKKyNlbmRpZgkvKiBfX2FscGhhX18gfHwgX19pYTY0X18gKi8KKworI2VuZGlmIC8qIEhBVkVfTExTRUVLICovCisKK2Jsa2lkX2xvZmZfdCBibGtpZF9sbHNlZWsoaW50IGZkLCBibGtpZF9sb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCWJsa2lkX2xvZmZfdCByZXN1bHQ7CisJc3RhdGljIGludCBkb19jb21wYXQgPSAwOworCisJaWYgKChzaXplb2Yob2ZmX3QpID49IHNpemVvZihibGtpZF9sb2ZmX3QpKSB8fAorCSAgICAob2Zmc2V0IDwgKChibGtpZF9sb2ZmX3QpIDEgPDwgKChzaXplb2Yob2ZmX3QpKjgpIC0xKSkpKQorCQlyZXR1cm4gbHNlZWsoZmQsIChvZmZfdCkgb2Zmc2V0LCB3aGVuY2UpOworCisJaWYgKGRvX2NvbXBhdCkgeworCQllcnJubyA9IEVPVkVSRkxPVzsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlc3VsdCA9IG15X2xsc2VlayhmZCwgb2Zmc2V0LCB3aGVuY2UpOworCWlmIChyZXN1bHQgPT0gLTEgJiYgZXJybm8gPT0gRU5PU1lTKSB7CisJCS8qCisJCSAqIEp1c3QgaW4gY2FzZSB0aGlzIGNvZGUgcnVucyBvbiB0b3Agb2YgYW4gb2xkIGtlcm5lbAorCQkgKiB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsbHNlZWsgc3lzdGVtIGNhbGwKKwkJICovCisJCWRvX2NvbXBhdCsrOworCQllcnJubyA9IEVPVkVSRkxPVzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworI2Vsc2UgLyogIWxpbnV4ICovCisKKyNpZm5kZWYgRU9WRVJGTE9XCisjaWZkZWYgRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UCisjZGVmaW5lIEVPVkVSRkxPVyBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQKKyNlbHNlCisjZGVmaW5lIEVPVkVSRkxPVyAxMTIKKyNlbmRpZgorI2VuZGlmCisKK2Jsa2lkX2xvZmZfdCBibGtpZF9sbHNlZWsoaW50IGZkLCBibGtpZF9sb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworI2lmIGRlZmluZWQoSEFWRV9MU0VFSzY0KSAmJiBkZWZpbmVkKEhBVkVfTFNFRUs2NF9QUk9UT1RZUEUpCisJcmV0dXJuIGxzZWVrNjQgKGZkLCBvZmZzZXQsIG9yaWdpbik7CisjZWxzZQorCWlmICgoc2l6ZW9mKG9mZl90KSA8IHNpemVvZihibGtpZF9sb2ZmX3QpKSAmJgorCSAgICAob2Zmc2V0ID49ICgoYmxraWRfbG9mZl90KSAxIDw8ICgoc2l6ZW9mKG9mZl90KSo4KSAtIDEpKSkpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGxzZWVrKGZkLCAob2ZmX3QpIG9mZnNldCwgb3JpZ2luKTsKKyNlbmRpZgorfQorCisjZW5kaWYJLyogbGludXggKi8KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Byb2JlLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Byb2JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxNTc2OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvcHJvYmUuYwpAQCAtMCwwICsxLDE2OTQgQEAKKy8qCisgKiBwcm9iZS5jIC0gaWRlbnRpZnkgYSBibG9jayBkZXZpY2UgYnkgaXRzIGNvbnRlbnRzLCBhbmQgcmV0dXJuIGEgZGV2CisgKiAgICAgICAgICAgc3RydWN0IHdpdGggdGhlIGRldGFpbHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgQW5kcmllcyBCcm91d2VyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworICogQ29weXJpZ2h0IChDKSAyMDAxIGJ5IEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NS0RFVl9ICisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CisjZW5kaWYKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgImJsa2lkUC5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgInByb2JlLmgiCisKK3N0YXRpYyBpbnQgZmlndXJlX2xhYmVsX2xlbihjb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCwgaW50IGxlbikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICplbmQgPSBsYWJlbCArIGxlbiAtIDE7CisKKwl3aGlsZSAoKCplbmQgPT0gJyAnIHx8ICplbmQgPT0gMCkgJiYgZW5kID49IGxhYmVsKQorCQktLWVuZDsKKwlpZiAoZW5kID49IGxhYmVsKQorCQlyZXR1cm4gZW5kIC0gbGFiZWwgKyAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X2J1ZmZlcihzdHJ1Y3QgYmxraWRfcHJvYmUgKnByLAorCQkJICBibGtpZF9sb2ZmX3Qgb2ZmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QJCXJldF9yZWFkOworCXVuc2lnbmVkIGNoYXIJKm5ld2J1ZjsKKworCWlmIChvZmYgKyBsZW4gPD0gU0JfQlVGRkVSX1NJWkUpIHsKKwkJaWYgKCFwci0+c2JidWYpIHsKKwkJCXByLT5zYmJ1ZiA9IG1hbGxvYyhTQl9CVUZGRVJfU0laRSk7CisJCQlpZiAoIXByLT5zYmJ1ZikKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChsc2Vlayhwci0+ZmQsIDAsIFNFRUtfU0VUKSA8IDApCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZXRfcmVhZCA9IHJlYWQocHItPmZkLCBwci0+c2JidWYsIFNCX0JVRkZFUl9TSVpFKTsKKwkJCWlmIChyZXRfcmVhZCA8IDApCisJCQkJcmV0X3JlYWQgPSAwOworCQkJcHItPnNiX3ZhbGlkID0gcmV0X3JlYWQ7CisJCX0KKwkJaWYgKG9mZitsZW4gPiBwci0+c2JfdmFsaWQpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHByLT5zYmJ1ZiArIG9mZjsKKwl9IGVsc2UgeworCQlpZiAobGVuID4gcHItPmJ1Zl9tYXgpIHsKKwkJCW5ld2J1ZiA9IHJlYWxsb2MocHItPmJ1ZiwgbGVuKTsKKwkJCWlmIChuZXdidWYgPT0gTlVMTCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXByLT5idWYgPSBuZXdidWY7CisJCQlwci0+YnVmX21heCA9IGxlbjsKKwkJfQorCQlpZiAoYmxraWRfbGxzZWVrKHByLT5mZCwgb2ZmLCBTRUVLX1NFVCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJCXJldF9yZWFkID0gcmVhZChwci0+ZmQsIHByLT5idWYsIGxlbik7CisJCWlmIChyZXRfcmVhZCAhPSAoc3NpemVfdCkgbGVuKQorCQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBwci0+YnVmOworCX0KK30KKworCisvKgorICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBjb2RlIHRvIGNoZWNrIGZvciBhbiBNRFJBSUQgZGV2aWNlLiAgV2UgZG8KKyAqIHRoaXMgc3BlY2lhbCBzaW5jZSBpdCByZXF1aXJlcyBjaGVja2luZyBmb3IgYSBzdXBlcmJsb2NrIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbWRyYWlkKGludCBmZCwgdW5zaWduZWQgY2hhciAqcmV0X3V1aWQpCit7CisJc3RydWN0IG1kcF9zdXBlcmJsb2NrX3MgKm1kOworCWJsa2lkX2xvZmZfdAkJb2Zmc2V0OworCWNoYXIJCQlidWZbNDA5Nl07CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCW9mZnNldCA9IChibGtpZF9nZXRfZGV2X3NpemUoZmQpICYgfigoYmxraWRfbG9mZl90KTY1NTM1KSkgLSA2NTUzNjsKKworCWlmIChibGtpZF9sbHNlZWsoZmQsIG9mZnNldCwgMCkgPCAwIHx8CisJICAgIHJlYWQoZmQsIGJ1ZiwgNDA5NikgIT0gNDA5NikKKwkJcmV0dXJuIC1CTEtJRF9FUlJfSU87CisKKwkvKiBDaGVjayBmb3IgbWFnaWMgbnVtYmVyICovCisJaWYgKG1lbWNtcCgiXDI1MStOXDM3NCIsIGJ1ZiwgNCkgJiYgbWVtY21wKCJcMzc0TitcMjUxIiwgYnVmLCA0KSkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwlpZiAoIXJldF91dWlkKQorCQlyZXR1cm4gMDsKKwkqcmV0X3V1aWQgPSAwOworCisJLyogVGhlIE1EIFVVSUQgaXMgbm90IGNvbnRpZ3VvdXMgaW4gdGhlIHN1cGVyYmxvY2ssIG1ha2UgaXQgc28gKi8KKwltZCA9IChzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyAqKWJ1ZjsKKwlpZiAobWQtPnNldF91dWlkMCB8fCBtZC0+c2V0X3V1aWQxIHx8IG1kLT5zZXRfdXVpZDIgfHwgbWQtPnNldF91dWlkMykgeworCQltZW1jcHkocmV0X3V1aWQsICZtZC0+c2V0X3V1aWQwLCA0KTsKKwkJbWVtY3B5KHJldF91dWlkICsgNCwgJm1kLT5zZXRfdXVpZDEsIDEyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91dWlkKGJsa2lkX2RldiBkZXYsIHV1aWRfdCB1dWlkLCBjb25zdCBjaGFyICp0YWcpCit7CisJY2hhcglzdHJbMzddOworCisJaWYgKCF1dWlkX2lzX251bGwodXVpZCkpIHsKKwkJdXVpZF91bnBhcnNlKHV1aWQsIHN0cik7CisJCWJsa2lkX3NldF90YWcoZGV2LCB0YWcgPyB0YWcgOiAiVVVJRCIsIHN0ciwgc2l6ZW9mKHN0cikpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2V4dDJfaW5mbyhibGtpZF9kZXYgZGV2LCBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkJICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopIGJ1ZjsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigiZXh0Ml9zYi5jb21wYXQgPSAlMDhYOiUwOFg6JTA4WFxuIiwKKwkJICAgYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2NvbXBhdCksCisJCSAgIGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCksCisJCSAgIGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9yb19jb21wYXQpKSk7CisKKwlpZiAoc3RybGVuKGVzLT5zX3ZvbHVtZV9uYW1lKSkKKwkJbGFiZWwgPSBlcy0+c192b2x1bWVfbmFtZTsKKwlibGtpZF9zZXRfdGFnKGRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihlcy0+c192b2x1bWVfbmFtZSkpOworCisJc2V0X3V1aWQoZGV2LCBlcy0+c191dWlkLCAwKTsKKworCWlmICgoZXMtPnNfZmVhdHVyZV9jb21wYXQgJiBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSAmJgorCSAgICAhdXVpZF9pc19udWxsKGVzLT5zX2pvdXJuYWxfdXVpZCkpCisJCXNldF91dWlkKGRldiwgZXMtPnNfam91cm5hbF91dWlkLCAiRVhUX0pPVVJOQUwiKTsKKworCWlmIChzdHJjbXAoaWQtPmJpbV90eXBlLCAiZXh0MiIpICYmCisJICAgICgoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1VOU1VQUE9SVEVEKSA9PSAwKSkKKwkJYmxraWRfc2V0X3RhZyhkZXYsICJTRUNfVFlQRSIsICJleHQyIiwgc2l6ZW9mKCJleHQyIikpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSBpcyBpbiAvcHJvYy9maWxlc3lzdGVtcy4KKyAqIFJldHVybnMgMSBpZiBmb3VuZCwgMCBpZiBub3QKKyAqLworc3RhdGljIGludCBmc19wcm9jX2NoZWNrKGNvbnN0IGNoYXIgKmZzX25hbWUpCit7CisJRklMRQkqZjsKKwljaGFyCWJ1Zls4MF0sICpjcCwgKnQ7CisKKwlmID0gZm9wZW4oIi9wcm9jL2ZpbGVzeXN0ZW1zIiwgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAoMCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpCisJCQlicmVhazsKKwkJY3AgPSBidWY7CisJCWlmICghaXNzcGFjZSgqY3ApKSB7CisJCQl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisJCQkJY3ArKzsKKwkJfQorCQl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJCWNwKys7CisJCWlmICgodCA9IHN0cmNocihjcCwgJ1xuJykpICE9IE5VTEwpCisJCQkqdCA9IDA7CisJCWlmICgodCA9IHN0cmNocihjcCwgJ1x0JykpICE9IE5VTEwpCisJCQkqdCA9IDA7CisJCWlmICgodCA9IHN0cmNocihjcCwgJyAnKSkgIT0gTlVMTCkKKwkJCSp0ID0gMDsKKwkJaWYgKCFzdHJjbXAoZnNfbmFtZSwgY3ApKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCWZjbG9zZShmKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgZmlsZXN5c3RlbSBpcyBhdmFpbGFibGUgYXMgYSBtb2R1bGUKKyAqIFJldHVybnMgMSBpZiBmb3VuZCwgMCBpZiBub3QKKyAqLworc3RhdGljIGludCBjaGVja19mb3JfbW9kdWxlcyhjb25zdCBjaGFyICpmc19uYW1lKQoreworI2lmZGVmIF9fbGludXhfXworCXN0cnVjdCB1dHNuYW1lCXV0czsKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMTAyNF0sICpjcDsKKwlpbnQJCW5hbWVzejsKKworCWlmICh1bmFtZSgmdXRzKSkKKwkJcmV0dXJuICgwKTsKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL2xpYi9tb2R1bGVzLyVzL21vZHVsZXMuZGVwIiwgdXRzLnJlbGVhc2UpOworCisJZiA9IGZvcGVuKGJ1ZiwgInIiKTsKKwlpZiAoIWYpCisJCXJldHVybiAoMCk7CisKKwluYW1lc3ogPSBzdHJsZW4oZnNfbmFtZSk7CisKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkKKwkJCWJyZWFrOworCQlpZiAoKGNwID0gc3RyY2hyKGJ1ZiwgJzonKSkgIT0gTlVMTCkKKwkJCSpjcCA9IDA7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCQlpZiAoKGNwID0gc3RycmNocihidWYsICcvJykpICE9IE5VTEwpCisJCQljcCsrOworCQllbHNlCisJCQljcCA9IGJ1ZjsKKwkJaWYgKCFzdHJuY21wKGNwLCBmc19uYW1lLCBuYW1lc3opICYmCisJCSAgICAoIXN0cmNtcChjcCArIG5hbWVzeiwgIi5rbyIpIHx8CisJCSAgICAgIXN0cmNtcChjcCArIG5hbWVzeiwgIi5rby5neiIpKSkgeworCQkJZmNsb3NlKGYpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlmY2xvc2UoZik7CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IGxpbnV4X3ZlcnNpb25fY29kZSgpCit7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IHV0c25hbWUJdXQ7CisJc3RhdGljIGludAl2ZXJzaW9uX2NvZGUgPSAtMTsKKwlpbnQJCW1ham9yLCBtaW5vciwgcmV2OworCWNoYXIJCSplbmRwdHI7CisJY29uc3QgY2hhciAJKmNwOworCisJaWYgKHZlcnNpb25fY29kZSA+IDApCisJCXJldHVybiB2ZXJzaW9uX2NvZGU7CisKKwlpZiAodW5hbWUoJnV0KSkKKwkJcmV0dXJuIDA7CisJY3AgPSB1dC5yZWxlYXNlOworCisJbWFqb3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJbWlub3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJcmV2ID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CisJaWYgKGNwID09IGVuZHB0cikKKwkJcmV0dXJuIDA7CisJdmVyc2lvbl9jb2RlID0gKCgobWFqb3IgKiAyNTYpICsgbWlub3IpICogMjU2KSArIHJldjsKKwlyZXR1cm4gdmVyc2lvbl9jb2RlOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisjZGVmaW5lIEVYVDRfU1VQUE9SVFNfRVhUMiAoMiAqIDY1NTM2ICsgNioyNTYgKyAyOSkKKworc3RhdGljIGludCBzeXN0ZW1fc3VwcG9ydHNfZXh0Mih2b2lkKQoreworCXN0YXRpYyB0aW1lX3QJbGFzdF9jaGVjayA9IDA7CisJc3RhdGljIGludAlyZXQgPSAtMTsKKwl0aW1lX3QJCW5vdyA9IHRpbWUoMCk7CisKKwlpZiAocmV0ICE9IC0xIHx8IChub3cgLSBsYXN0X2NoZWNrKSA8IDUpCisJCXJldHVybiByZXQ7CisJbGFzdF9jaGVjayA9IG5vdzsKKwlyZXQgPSAoZnNfcHJvY19jaGVjaygiZXh0MiIpIHx8IGNoZWNrX2Zvcl9tb2R1bGVzKCJleHQyIikpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX3N1cHBvcnRzX2V4dDQodm9pZCkKK3sKKwlzdGF0aWMgdGltZV90CWxhc3RfY2hlY2sgPSAwOworCXN0YXRpYyBpbnQJcmV0ID0gLTE7CisJdGltZV90CQlub3cgPSB0aW1lKDApOworCisJaWYgKHJldCAhPSAtMSB8fCAobm93IC0gbGFzdF9jaGVjaykgPCA1KQorCQlyZXR1cm4gcmV0OworCWxhc3RfY2hlY2sgPSBub3c7CisJcmV0ID0gKGZzX3Byb2NfY2hlY2soImV4dDQiKSB8fCBjaGVja19mb3JfbW9kdWxlcygiZXh0NCIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN5c3RlbV9zdXBwb3J0c19leHQ0ZGV2KHZvaWQpCit7CisJc3RhdGljIHRpbWVfdAlsYXN0X2NoZWNrID0gMDsKKwlzdGF0aWMgaW50CXJldCA9IC0xOworCXRpbWVfdAkJbm93ID0gdGltZSgwKTsKKworCWlmIChyZXQgIT0gLTEgfHwgKG5vdyAtIGxhc3RfY2hlY2spIDwgNSkKKwkJcmV0dXJuIHJldDsKKwlsYXN0X2NoZWNrID0gbm93OworCXJldCA9IChmc19wcm9jX2NoZWNrKCJleHQ0ZGV2IikgfHwgY2hlY2tfZm9yX21vZHVsZXMoImV4dDRkZXYiKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcm9iZV9leHQ0ZGV2KHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCQkgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJCSB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzOworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggZnJvbSBqYmQgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkvKiAKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgam91cm5hbCBhbmQgZXh0MiBhbmQgZXh0NAorCSAqIGlzIG5vdCBwcmVzZW50LCB0aGVuIGZvcmNlIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYXMgYW4KKwkgKiBleHQ0ZGV2IGZpbGVzeXN0ZW0uCisJICovCisJaWYgKCEoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2NvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICFzeXN0ZW1fc3VwcG9ydHNfZXh0MigpICYmICFzeXN0ZW1fc3VwcG9ydHNfZXh0NCgpICYmCisJICAgIHN5c3RlbV9zdXBwb3J0c19leHQ0ZGV2KCkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlnb3RvIGZvcmNlX2V4dDRkZXY7CisKKwkvKgorCSAqIElmIHRoZSBmaWxlc3lzdGVtIGlzIG1hcmtlZCBhcyBPSyBmb3IgdXNlIGJ5IGluLWRldmVsb3BtZW50CisJICogZmlsZXN5c3RlbSBjb2RlLCBidXQgZXh0NGRldiBpcyBub3Qgc3VwcG9ydGVkLCBhbmQgZXh0NCBpcywKKwkgKiB0aGVuIGRvbid0IGNhbGwgb3Vyc2VsdmVzIGV4dDRkZXYsIHNpbmNlIHdlIHNob3VsZCBiZQorCSAqIGRldGVjdGVkIGFzIGV4dDQgaW4gdGhhdCBjYXNlLgorCSAqCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGFzIGluIHVzZSBieSBwcm9kdWN0aW9uCisJICogZmlsZXN5c3RlbSwgdGhlbiBpdCBjYW4gb25seSBiZSB1c2VkIGJ5IGV4dDQgYW5kIE5PVCBieQorCSAqIGV4dDRkZXYsIHNvIGFsd2F5cyBkaXNjbGFpbSB3ZSBhcmUgZXh0NGRldiBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKGJsa2lkX2xlMzIoZXMtPnNfZmxhZ3MpICYgRVhUMl9GTEFHU19URVNUX0ZJTEVTWVMpIHsKKwkJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfZXh0NGRldigpICYmIHN5c3RlbV9zdXBwb3J0c19leHQ0KCkpCisJCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKK2ZvcmNlX2V4dDRkZXY6CisgICAgCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZXh0NChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLCBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzOworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggZnJvbSBqYmQgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkvKiAKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgam91cm5hbCBhbmQgZXh0MiBpcyBub3QKKwkgKiBwcmVzZW50LCB0aGVuIGZvcmNlIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYXMgYW4gZXh0MgorCSAqIGZpbGVzeXN0ZW0uCisJICovCisJaWYgKCEoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2NvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJICAgICFzeXN0ZW1fc3VwcG9ydHNfZXh0MigpICYmIHN5c3RlbV9zdXBwb3J0c19leHQ0KCkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlnb3RvIGZvcmNlX2V4dDQ7CisKKwkvKiBFeHQ0IGhhcyBhdCBsZWFzdCBvbmUgZmVhdHVyZSB3aGljaCBleHQzIGRvZXNuJ3QgdW5kZXJzdGFuZCAqLworCWlmICghKGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9yb19jb21wYXQpICYKKwkgICAgICBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSAmJgorCSAgICAhKGJsa2lkX2xlMzIoZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCkgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9VTlNVUFBPUlRFRCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCitmb3JjZV9leHQ0OgorCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gaXMgYSBPSyBmb3IgdXNlIGJ5IGluLWRldmVsb3BtZW50CisJICogZmlsZXN5c3RlbSBjb2RlLCBhbmQgZXh0NGRldiBpcyBzdXBwb3J0ZWQgb3IgZXh0NCBpcyBub3QKKwkgKiBzdXBwb3J0ZWQsIHRoZW4gZG9uJ3QgY2FsbCBvdXJzZWx2ZXMgZXh0NCwgc28gd2UgY2FuIHJlZG8KKwkgKiB0aGUgZGV0ZWN0aW9uIGFuZCBtYXJrIHRoZSBmaWxlc3lzdGVtIGFzIGV4dDRkZXYuCisJICoKKwkgKiBJZiB0aGUgZmlsZXN5c3RlbSBpcyBtYXJrZWQgYXMgaW4gdXNlIGJ5IHByb2R1Y3Rpb24KKwkgKiBmaWxlc3lzdGVtLCB0aGVuIGl0IGNhbiBvbmx5IGJlIHVzZWQgYnkgZXh0NCBhbmQgTk9UIGJ5CisJICogZXh0NGRldi4KKwkgKi8KKwlpZiAoYmxraWRfbGUzMihlcy0+c19mbGFncykgJiBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUykgeworCQlpZiAoc3lzdGVtX3N1cHBvcnRzX2V4dDRkZXYoKSB8fCAhc3lzdGVtX3N1cHBvcnRzX2V4dDQoKSkKKwkJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCX0KKyAgICAJZ2V0X2V4dDJfaW5mbyhwcm9iZS0+ZGV2LCBpZCwgYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9leHQzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqZXM7CisJZXMgPSAoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKilidWY7CisKKwkvKiBleHQzIHJlcXVpcmVzIGpvdXJuYWwgKi8KKwlpZiAoIShibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfY29tcGF0KSAmCisJICAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJLyogQW55IGZlYXR1cmVzIHdoaWNoIGV4dDMgZG9lc24ndCB1bmRlcnN0YW5kICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfcm9fY29tcGF0KSAmCisJICAgICBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSB8fAorCSAgICAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworICAgIAlnZXRfZXh0Ml9pbmZvKHByb2JlLT5kZXYsIGlkLCBidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2V4dDIoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplczsKKworCWVzID0gKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICopYnVmOworCisJLyogRGlzdGluZ3Vpc2ggYmV0d2VlbiBleHQzIGFuZCBleHQyICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfY29tcGF0KSAmCisJICAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJLyogQW55IGZlYXR1cmVzIHdoaWNoIGV4dDIgZG9lc24ndCB1bmRlcnN0YW5kICovCisJaWYgKChibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfcm9fY29tcGF0KSAmCisJICAgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEKSB8fAorCSAgICAoYmxraWRfbGUzMihlcy0+c19mZWF0dXJlX2luY29tcGF0KSAmCisJICAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCS8qIAorCSAqIElmIGV4dDIgaXMgbm90IHByZXNlbnQsIGJ1dCBleHQ0IG9yIGV4dDRkZXYgYXJlLCB0aGVuCisJICogZGlzY2xhaW0gd2UgYXJlIGV4dDIKKwkgKi8KKwlpZiAoIXN5c3RlbV9zdXBwb3J0c19leHQyKCkgJiYKKwkgICAgKHN5c3RlbV9zdXBwb3J0c19leHQ0KCkgfHwgc3lzdGVtX3N1cHBvcnRzX2V4dDRkZXYoKSkgJiYKKwkgICAgbGludXhfdmVyc2lvbl9jb2RlKCkgPj0gRVhUNF9TVVBQT1JUU19FWFQyKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfamJkKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyA9IChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqKSBidWY7CisKKwlpZiAoIShibGtpZF9sZTMyKGVzLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYKKwkgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWdldF9leHQyX2luZm8ocHJvYmUtPmRldiwgaWQsIGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBGQVRfQVRUUl9WT0xVTUVfSUQJCTB4MDgKKyNkZWZpbmUgRkFUX0FUVFJfRElSCQkJMHgxMAorI2RlZmluZSBGQVRfQVRUUl9MT05HX05BTUUJCTB4MGYKKyNkZWZpbmUgRkFUX0FUVFJfTUFTSwkJCTB4M2YKKyNkZWZpbmUgRkFUX0VOVFJZX0ZSRUUJCQkweGU1CisKK3N0YXRpYyBjb25zdCBjaGFyICpub19uYW1lID0gIk5PIE5BTUUgICAgIjsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnNlYXJjaF9mYXRfbGFiZWwoc3RydWN0IHZmYXRfZGlyX2VudHJ5ICpkaXIsIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChkaXJbaV0ubmFtZVswXSA9PSAweDAwKQorCQkJYnJlYWs7CisKKwkJaWYgKChkaXJbaV0ubmFtZVswXSA9PSBGQVRfRU5UUllfRlJFRSkgfHwKKwkJICAgIChkaXJbaV0uY2x1c3Rlcl9oaWdoICE9IDAgfHwgZGlyW2ldLmNsdXN0ZXJfbG93ICE9IDApIHx8CisJCSAgICAoKGRpcltpXS5hdHRyICYgRkFUX0FUVFJfTUFTSykgPT0gRkFUX0FUVFJfTE9OR19OQU1FKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoZGlyW2ldLmF0dHIgJiAoRkFUX0FUVFJfVk9MVU1FX0lEIHwgRkFUX0FUVFJfRElSKSkgPT0KKwkJICAgIEZBVF9BVFRSX1ZPTFVNRV9JRCkgeworCQkJcmV0dXJuIGRpcltpXS5uYW1lOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBGQVQgbGFiZWwgZXh0cmFjdGlvbiBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0YWtlbiBmcm9tIEtheQorICogU2lldmVycydzIHZvbHVtZV9pZCBsaWJyYXJ5ICovCitzdGF0aWMgaW50IHByb2JlX2ZhdChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmZhdF9zdXBlcl9ibG9jayAqdnMgPSAoc3RydWN0IHZmYXRfc3VwZXJfYmxvY2sgKikgYnVmOworCXN0cnVjdCBtc2Rvc19zdXBlcl9ibG9jayAqbXMgPSAoc3RydWN0IG1zZG9zX3N1cGVyX2Jsb2NrICopIGJ1ZjsKKwlzdHJ1Y3QgdmZhdF9kaXJfZW50cnkgKmRpcjsKKwljaGFyIHNlcm5vWzEwXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCA9IDAsICp2b2xfbGFiZWwgPSAwLCAqdG1wOworCXVuc2lnbmVkIGNoYXIJKnZvbF9zZXJubzsKKwlpbnQgbGFiZWxfbGVuID0gMCwgbWF4bG9vcCA9IDEwMDsKKwlfX3UxNiBzZWN0b3Jfc2l6ZSwgZGlyX2VudHJpZXMsIHJlc2VydmVkOworCV9fdTMyIHNlY3RfY291bnQsIGZhdF9zaXplLCBkaXJfc2l6ZSwgY2x1c3Rlcl9jb3VudCwgZmF0X2xlbmd0aDsKKwlfX3UzMiBidWZfc2l6ZSwgc3RhcnRfZGF0YV9zZWN0LCBuZXh0LCByb290X3N0YXJ0LCByb290X2Rpcl9lbnRyaWVzOworCisJLyogc2VjdG9yIHNpemUgY2hlY2sgKi8KKwl0bXAgPSAodW5zaWduZWQgY2hhciAqKSZtcy0+bXNfc2VjdG9yX3NpemU7CisJc2VjdG9yX3NpemUgPSB0bXBbMF0gKyAodG1wWzFdIDw8IDgpOworCWlmIChzZWN0b3Jfc2l6ZSAhPSAweDIwMCAmJiBzZWN0b3Jfc2l6ZSAhPSAweDQwMCAmJgorCSAgICBzZWN0b3Jfc2l6ZSAhPSAweDgwMCAmJiBzZWN0b3Jfc2l6ZSAhPSAweDEwMDApCisJCXJldHVybiAxOworCisJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikmbXMtPm1zX2Rpcl9lbnRyaWVzOworCWRpcl9lbnRyaWVzID0gdG1wWzBdICsgKHRtcFsxXSA8PCA4KTsKKwlyZXNlcnZlZCA9ICBibGtpZF9sZTE2KG1zLT5tc19yZXNlcnZlZCk7CisJdG1wID0gKHVuc2lnbmVkIGNoYXIgKikmbXMtPm1zX3NlY3RvcnM7CisJc2VjdF9jb3VudCA9IHRtcFswXSArICh0bXBbMV0gPDwgOCk7CisJaWYgKHNlY3RfY291bnQgPT0gMCkKKwkJc2VjdF9jb3VudCA9IGJsa2lkX2xlMzIobXMtPm1zX3RvdGFsX3NlY3QpOworCisJZmF0X2xlbmd0aCA9IGJsa2lkX2xlMTYobXMtPm1zX2ZhdF9sZW5ndGgpOworCWlmIChmYXRfbGVuZ3RoID09IDApCisJCWZhdF9sZW5ndGggPSBibGtpZF9sZTMyKHZzLT52c19mYXQzMl9sZW5ndGgpOworCisJZmF0X3NpemUgPSBmYXRfbGVuZ3RoICogbXMtPm1zX2ZhdHM7CisJZGlyX3NpemUgPSAoKGRpcl9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCB2ZmF0X2Rpcl9lbnRyeSkpICsKKwkJCShzZWN0b3Jfc2l6ZS0xKSkgLyBzZWN0b3Jfc2l6ZTsKKworCWNsdXN0ZXJfY291bnQgPSBzZWN0X2NvdW50IC0gKHJlc2VydmVkICsgZmF0X3NpemUgKyBkaXJfc2l6ZSk7CisJaWYgKG1zLT5tc19jbHVzdGVyX3NpemUgPT0gMCkKKwkJcmV0dXJuIDE7CisJY2x1c3Rlcl9jb3VudCAvPSBtcy0+bXNfY2x1c3Rlcl9zaXplOworCisJaWYgKGNsdXN0ZXJfY291bnQgPiBGQVQzMl9NQVgpCisJCXJldHVybiAxOworCisJaWYgKG1zLT5tc19mYXRfbGVuZ3RoKSB7CisJCS8qIHRoZSBsYWJlbCBtYXkgYmUgYW4gYXR0cmlidXRlIGluIHRoZSByb290IGRpcmVjdG9yeSAqLworCQlyb290X3N0YXJ0ID0gKHJlc2VydmVkICsgZmF0X3NpemUpICogc2VjdG9yX3NpemU7CisJCXJvb3RfZGlyX2VudHJpZXMgPSB2cy0+dnNfZGlyX2VudHJpZXNbMF0gKworCQkJKHZzLT52c19kaXJfZW50cmllc1sxXSA8PCA4KTsKKworCQlidWZfc2l6ZSA9IHJvb3RfZGlyX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHZmYXRfZGlyX2VudHJ5KTsKKwkJZGlyID0gKHN0cnVjdCB2ZmF0X2Rpcl9lbnRyeSAqKSBnZXRfYnVmZmVyKHByb2JlLCByb290X3N0YXJ0LAorCQkJCQkJCSAgIGJ1Zl9zaXplKTsKKwkJaWYgKGRpcikKKwkJCXZvbF9sYWJlbCA9IHNlYXJjaF9mYXRfbGFiZWwoZGlyLCByb290X2Rpcl9lbnRyaWVzKTsKKworCQlpZiAoIXZvbF9sYWJlbCB8fCAhbWVtY21wKHZvbF9sYWJlbCwgbm9fbmFtZSwgMTEpKQorCQkJdm9sX2xhYmVsID0gbXMtPm1zX2xhYmVsOworCQl2b2xfc2Vybm8gPSBtcy0+bXNfc2Vybm87CisKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiU0VDX1RZUEUiLCAibXNkb3MiLAorCQkJICAgICAgc2l6ZW9mKCJtc2RvcyIpKTsKKwl9IGVsc2UgeworCQkvKiBTZWFyY2ggdGhlIEZBVDMyIHJvb3QgZGlyIGZvciB0aGUgbGFiZWwgYXR0cmlidXRlICovCisJCWJ1Zl9zaXplID0gdnMtPnZzX2NsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworCQlzdGFydF9kYXRhX3NlY3QgPSByZXNlcnZlZCArIGZhdF9zaXplOworCisJCW5leHQgPSBibGtpZF9sZTMyKHZzLT52c19yb290X2NsdXN0ZXIpOworCQl3aGlsZSAobmV4dCAmJiAtLW1heGxvb3ApIHsKKwkJCV9fdTMyIG5leHRfc2VjdF9vZmY7CisJCQlfX3U2NCBuZXh0X29mZiwgZmF0X2VudHJ5X29mZjsKKwkJCWludCBjb3VudDsKKworCQkJbmV4dF9zZWN0X29mZiA9IChuZXh0IC0gMikgKiB2cy0+dnNfY2x1c3Rlcl9zaXplOworCQkJbmV4dF9vZmYgPSAoc3RhcnRfZGF0YV9zZWN0ICsgbmV4dF9zZWN0X29mZikgKgorCQkJCXNlY3Rvcl9zaXplOworCisJCQlkaXIgPSAoc3RydWN0IHZmYXRfZGlyX2VudHJ5ICopCisJCQkJZ2V0X2J1ZmZlcihwcm9iZSwgbmV4dF9vZmYsIGJ1Zl9zaXplKTsKKwkJCWlmIChkaXIgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJY291bnQgPSBidWZfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgdmZhdF9kaXJfZW50cnkpOworCisJCQl2b2xfbGFiZWwgPSBzZWFyY2hfZmF0X2xhYmVsKGRpciwgY291bnQpOworCQkJaWYgKHZvbF9sYWJlbCkKKwkJCQlicmVhazsKKworCQkJLyogZ2V0IEZBVCBlbnRyeSAqLworCQkJZmF0X2VudHJ5X29mZiA9IChyZXNlcnZlZCAqIHNlY3Rvcl9zaXplKSArCisJCQkJKG5leHQgKiBzaXplb2YoX191MzIpKTsKKwkJCWJ1ZiA9IGdldF9idWZmZXIocHJvYmUsIGZhdF9lbnRyeV9vZmYsIGJ1Zl9zaXplKTsKKwkJCWlmIChidWYgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogc2V0IG5leHQgY2x1c3RlciAqLworCQkJbmV4dCA9IGJsa2lkX2xlMzIoKigoX191MzIgKikgYnVmKSAmIDB4MGZmZmZmZmYpOworCQl9CisKKwkJaWYgKCF2b2xfbGFiZWwgfHwgIW1lbWNtcCh2b2xfbGFiZWwsIG5vX25hbWUsIDExKSkKKwkJCXZvbF9sYWJlbCA9IHZzLT52c19sYWJlbDsKKwkJdm9sX3Nlcm5vID0gdnMtPnZzX3Nlcm5vOworCX0KKworCWlmICh2b2xfbGFiZWwgJiYgbWVtY21wKHZvbF9sYWJlbCwgbm9fbmFtZSwgMTEpKSB7CisJCWlmICgobGFiZWxfbGVuID0gZmlndXJlX2xhYmVsX2xlbih2b2xfbGFiZWwsIDExKSkpCisJCQlsYWJlbCA9IHZvbF9sYWJlbDsKKwl9CisKKwkvKiBXZSBjYW4ndCBqdXN0IHByaW50IHRoZW0gYXMgJTA0WCwgYmVjYXVzZSB0aGV5IGFyZSB1bmFsaWduZWQgKi8KKwlzcHJpbnRmKHNlcm5vLCAiJTAyWCUwMlgtJTAyWCUwMlgiLCB2b2xfc2Vybm9bM10sIHZvbF9zZXJub1syXSwKKwkJdm9sX3Nlcm5vWzFdLCB2b2xfc2Vybm9bMF0pOworCisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCAoY29uc3QgY2hhciAqKSBsYWJlbCwgbGFiZWxfbGVuKTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgc2Vybm8sIHNpemVvZihzZXJubyktMSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBGQVQgZmlsZXN5c3RlbSBjb3VsZCBiZSB3aXRob3V0IGEgbWFnaWMgc3RyaW5nIGluIHN1cGVyYmxvY2sKKyAqIChlLmcuIG9sZCBmbG9wcGllcykuICBUaGlzIGhldXJpc3RpYyBmb3IgRkFUIGRldGVjdGlvbiBpcyBpbnNwaXJlZAorICogYnkgaHR0cDovL3ZyZnkub3JnL3Byb2plY3RzL3ZvbHVtZV9pZC8gYW5kIExpbnV4IGtlcm5lbC4KKyAqIFs3LUp1bC0yMDA1LCBLYXJlbCBaYWsgPGt6YWtAcmVkaGF0LmNvbT5dCisgKi8KK3N0YXRpYyBpbnQgcHJvYmVfZmF0X25vbWFnaWMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IG1zZG9zX3N1cGVyX2Jsb2NrICptczsKKworCW1zID0gKHN0cnVjdCBtc2Rvc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCS8qIGhlYWRzIGNoZWNrICovCisJaWYgKG1zLT5tc19oZWFkcyA9PSAwKQorCQlyZXR1cm4gMTsKKworCS8qIGNsdXN0ZXIgc2l6ZSBjaGVjayovCisJaWYgKG1zLT5tc19jbHVzdGVyX3NpemUgPT0gMCB8fAorCSAgICAobXMtPm1zX2NsdXN0ZXJfc2l6ZSAmIChtcy0+bXNfY2x1c3Rlcl9zaXplLTEpKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBtZWRpYSBjaGVjayAqLworCWlmIChtcy0+bXNfbWVkaWEgPCAweGY4ICYmIG1zLT5tc19tZWRpYSAhPSAweGYwKQorCQlyZXR1cm4gMTsKKworCS8qIGZhdCBjb3VudHMoTGludXgga2VybmVsIGV4cGVjdHMgYXQgbGVhc3QgMSBGQVQgdGFibGUpICovCisJaWYgKCFtcy0+bXNfZmF0cykKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIE9TLzIgYW5kIGFwcGFyZW50bHkgREZTZWUgd2lsbCBwbGFjZSBhIEZBVDEyLzE2LWxpa2UKKwkgKiBwc2V1ZG8tc3VwZXJibG9jayBpbiB0aGUgZmlyc3QgNTEyIGJ5dGVzIG9mIG5vbi1GQVQKKwkgKiBmaWxlc3lzdGVtcyAtLS0gYXQgbGVhc3QgSkZTIGFuZCBIUEZTLCBhbmQgcG9zc2libHkgb3RoZXJzLgorCSAqIFNvIHdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRob3NlIGZpbGVzeXN0ZW1zIGF0IHRoZQorCSAqIEZBVDEyLzE2IGZpbGVzeXN0ZW0gbWFnaWMgZmllbGQgaWRlbnRpZmllciwgYW5kIGlmIHRoZXkgYXJlCisJICogcHJlc2VudCwgd2UgcnVsZSB0aGlzIG91dCBhcyBhIEZBVCBmaWxlc3lzdGVtLCBkZXNwaXRlIHRoZQorCSAqIEZBVC1saWtlIHBzZXVkby1oZWFkZXIuCisgICAgICAgICAqLworCWlmICgobWVtY21wKG1zLT5tc19tYWdpYywgIkpGUyAgICAgIiwgOCkgPT0gMCkgfHwKKwkgICAgKG1lbWNtcChtcy0+bXNfbWFnaWMsICJIUEZTICAgICIsIDgpID09IDApKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBwcm9iZV9mYXQocHJvYmUsIGlkLCBidWYpOworfQorCitzdGF0aWMgaW50IHByb2JlX250ZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IG50ZnNfc3VwZXJfYmxvY2sgKm5zOworCXN0cnVjdCBtYXN0ZXJfZmlsZV90YWJsZV9yZWNvcmQgKm1mdDsKKwlzdHJ1Y3QgZmlsZV9hdHRyaWJ1dGUgKmF0dHI7CisJY2hhcgkJdXVpZF9zdHJbMTddLCBsYWJlbF9zdHJbMTI5XSwgKmNwOworCWludAkJYnl0ZXNfcGVyX3NlY3Rvciwgc2VjdG9yc19wZXJfY2x1c3RlcjsKKwlpbnQJCW1mdF9yZWNvcmRfc2l6ZSwgYXR0cl9vZmYsIGF0dHJfbGVuOworCXVuc2lnbmVkIGludAlpLCBhdHRyX3R5cGUsIHZhbF9sZW47CisJaW50CQl2YWxfb2ZmOworCV9fdTY0CQlucl9jbHVzdGVyczsKKwlibGtpZF9sb2ZmX3Qgb2ZmOworCXVuc2lnbmVkIGNoYXIgKmJ1Zl9tZnQsICp2YWw7CisKKwlucyA9IChzdHJ1Y3QgbnRmc19zdXBlcl9ibG9jayAqKSBidWY7CisKKwlieXRlc19wZXJfc2VjdG9yID0gbnMtPmJpb3NfcGFyYW1ldGVyX2Jsb2NrWzBdICsKKwkJKG5zLT5iaW9zX3BhcmFtZXRlcl9ibG9ja1sxXSAgPDwgOCk7CisJc2VjdG9yc19wZXJfY2x1c3RlciA9IG5zLT5iaW9zX3BhcmFtZXRlcl9ibG9ja1syXTsKKworCWlmICgoYnl0ZXNfcGVyX3NlY3RvciA8IDUxMikgfHwgKHNlY3RvcnNfcGVyX2NsdXN0ZXIgPT0gMCkpCisJCXJldHVybiAxOworCisJaWYgKG5zLT5jbHVzdGVyX3Blcl9tZnRfcmVjb3JkIDwgMCkKKwkJbWZ0X3JlY29yZF9zaXplID0gMSA8PCAoMC1ucy0+Y2x1c3Rlcl9wZXJfbWZ0X3JlY29yZCk7CisJZWxzZQorCQltZnRfcmVjb3JkX3NpemUgPSBucy0+Y2x1c3Rlcl9wZXJfbWZ0X3JlY29yZCAqCisJCQlzZWN0b3JzX3Blcl9jbHVzdGVyICogYnl0ZXNfcGVyX3NlY3RvcjsKKwlucl9jbHVzdGVycyA9IGJsa2lkX2xlNjQobnMtPm51bWJlcl9vZl9zZWN0b3JzKSAvIHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisKKwlpZiAoKGJsa2lkX2xlNjQobnMtPm1mdF9jbHVzdGVyX2xvY2F0aW9uKSA+IG5yX2NsdXN0ZXJzKSB8fAorCSAgICAoYmxraWRfbGU2NChucy0+bWZ0X21pcnJvcl9jbHVzdGVyX2xvY2F0aW9uKSA+IG5yX2NsdXN0ZXJzKSkKKwkJcmV0dXJuIDE7CisKKwlvZmYgPSBibGtpZF9sZTY0KG5zLT5tZnRfbWlycm9yX2NsdXN0ZXJfbG9jYXRpb24pICoKKwkJYnl0ZXNfcGVyX3NlY3RvciAqIHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisKKwlidWZfbWZ0ID0gZ2V0X2J1ZmZlcihwcm9iZSwgb2ZmLCBtZnRfcmVjb3JkX3NpemUpOworCWlmICghYnVmX21mdCkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWVtY21wKGJ1Zl9tZnQsICJGSUxFIiwgNCkpCisJCXJldHVybiAxOworCisJb2ZmID0gYmxraWRfbGU2NChucy0+bWZ0X2NsdXN0ZXJfbG9jYXRpb24pICogYnl0ZXNfcGVyX3NlY3RvciAqCisJCXNlY3RvcnNfcGVyX2NsdXN0ZXI7CisKKwlidWZfbWZ0ID0gZ2V0X2J1ZmZlcihwcm9iZSwgb2ZmLCBtZnRfcmVjb3JkX3NpemUpOworCWlmICghYnVmX21mdCkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWVtY21wKGJ1Zl9tZnQsICJGSUxFIiwgNCkpCisJCXJldHVybiAxOworCisJb2ZmICs9IE1GVF9SRUNPUkRfVk9MVU1FICogbWZ0X3JlY29yZF9zaXplOworCisJYnVmX21mdCA9IGdldF9idWZmZXIocHJvYmUsIG9mZiwgbWZ0X3JlY29yZF9zaXplKTsKKwlpZiAoIWJ1Zl9tZnQpCisJCXJldHVybiAxOworCisJaWYgKG1lbWNtcChidWZfbWZ0LCAiRklMRSIsIDQpKQorCQlyZXR1cm4gMTsKKworCW1mdCA9IChzdHJ1Y3QgbWFzdGVyX2ZpbGVfdGFibGVfcmVjb3JkICopIGJ1Zl9tZnQ7CisKKwlhdHRyX29mZiA9IGJsa2lkX2xlMTYobWZ0LT5hdHRyc19vZmZzZXQpOworCWxhYmVsX3N0clswXSA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlhdHRyID0gKHN0cnVjdCBmaWxlX2F0dHJpYnV0ZSAqKSAoYnVmX21mdCArIGF0dHJfb2ZmKTsKKwkJYXR0cl9sZW4gPSBibGtpZF9sZTE2KGF0dHItPmxlbik7CisJCWF0dHJfdHlwZSA9IGJsa2lkX2xlMzIoYXR0ci0+dHlwZSk7CisJCXZhbF9vZmYgPSBibGtpZF9sZTE2KGF0dHItPnZhbHVlX29mZnNldCk7CisJCXZhbF9sZW4gPSBibGtpZF9sZTMyKGF0dHItPnZhbHVlX2xlbik7CisKKwkJYXR0cl9vZmYgKz0gYXR0cl9sZW47CisKKwkJaWYgKChhdHRyX29mZiA+IG1mdF9yZWNvcmRfc2l6ZSkgfHwKKwkJICAgIChhdHRyX2xlbiA9PSAwKSkKKwkJCWJyZWFrOworCisJCWlmIChhdHRyX3R5cGUgPT0gTUZUX1JFQ09SRF9BVFRSX0VORCkKKwkJCWJyZWFrOworCisJCWlmIChhdHRyX3R5cGUgPT0gTUZUX1JFQ09SRF9BVFRSX1ZPTFVNRV9OQU1FKSB7CisJCQlpZiAodmFsX2xlbiA+IHNpemVvZihsYWJlbF9zdHIpKQorCQkJCXZhbF9sZW4gPSBzaXplb2YobGFiZWxfc3RyKS0xOworCisJCQlmb3IgKGk9MCwgY3A9bGFiZWxfc3RyOyBpIDwgdmFsX2xlbjsgaSs9MixjcCsrKSB7CisJCQkJdmFsID0gKChfX3U4ICopIGF0dHIpICsgdmFsX29mZiArIGk7CisJCQkJKmNwID0gdmFsWzBdOworCQkJCWlmICh2YWxbMV0pCisJCQkJCSpjcCA9ICc/JzsKKwkJCX0KKwkJCSpjcCA9IDA7CisJCX0KKwl9CisKKwlzcHJpbnRmKHV1aWRfc3RyLCAiJTAxNmxsWCIsIGJsa2lkX2xlNjQobnMtPnZvbHVtZV9zZXJpYWwpKTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgdXVpZF9zdHIsIDApOworCWlmIChsYWJlbF9zdHJbMF0pCisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWxfc3RyLCAwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHByb2JlX3hmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IHhmc19zdXBlcl9ibG9jayAqeHM7CisJY29uc3QgY2hhciAqbGFiZWwgPSAwOworCisJeHMgPSAoc3RydWN0IHhmc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCWlmIChzdHJsZW4oeHMtPnhzX2ZuYW1lKSkKKwkJbGFiZWwgPSB4cy0+eHNfZm5hbWU7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgc2l6ZW9mKHhzLT54c19mbmFtZSkpOworCXNldF91dWlkKHByb2JlLT5kZXYsIHhzLT54c191dWlkLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9yZWlzZXJmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICpycyA9IChzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKikgYnVmOworCXVuc2lnbmVkIGludCBibG9ja3NpemU7CisJY29uc3QgY2hhciAqbGFiZWwgPSAwOworCisJYmxvY2tzaXplID0gYmxraWRfbGUxNihycy0+cnNfYmxvY2tzaXplKTsKKworCS8qIFRoZSBibG9ja3NpemUgbXVzdCBiZSBhdCBsZWFzdCAxayAqLworCWlmICgoYmxvY2tzaXplID4+IDEwKSA9PSAwKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCS8qIElmIHRoZSBzdXBlcmJsb2NrIGlzIGluc2lkZSB0aGUgam91cm5hbCwgd2UgaGF2ZSB0aGUgd3Jvbmcgb25lICovCisJaWYgKGlkLT5iaW1fa2JvZmYvKGJsb2Nrc2l6ZT4+MTApID4gYmxraWRfbGUzMihycy0+cnNfam91cm5hbF9ibG9jaykpCisJCXJldHVybiAtQkxLSURfRVJSX0JJRzsKKworCS8qIExBQkVML1VVSUQgYXJlIG9ubHkgdmFsaWQgZm9yIGxhdGVyIHZlcnNpb25zIG9mIFJlaXNlcmZzIHYzLjYuICovCisJaWYgKGlkLT5iaW1fbWFnaWNbNl0gPT0gJzInIHx8IGlkLT5iaW1fbWFnaWNbNl0gPT0gJzMnKSB7CisJCWlmIChzdHJsZW4ocnMtPnJzX2xhYmVsKSkKKwkJCWxhYmVsID0gcnMtPnJzX2xhYmVsOworCQlzZXRfdXVpZChwcm9iZS0+ZGV2LCBycy0+cnNfdXVpZCwgMCk7CisJfQorCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihycy0+cnNfbGFiZWwpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX3JlaXNlcmZzNChzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWlzZXI0X3N1cGVyX2Jsb2NrICpyczQgPSAoc3RydWN0IHJlaXNlcjRfc3VwZXJfYmxvY2sgKikgYnVmOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsID0gMDsKKworCWlmIChzdHJsZW4oKGNoYXIgKikgcnM0LT5yczRfbGFiZWwpKQorCQlsYWJlbCA9IHJzNC0+cnM0X2xhYmVsOworCXNldF91dWlkKHByb2JlLT5kZXYsIHJzNC0+cnM0X3V1aWQsIDApOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgKGNvbnN0IGNoYXIgKikgbGFiZWwsCisJCSAgICAgIHNpemVvZihyczQtPnJzNF9sYWJlbCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfamZzKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgamZzX3N1cGVyX2Jsb2NrICpqczsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlqcyA9IChzdHJ1Y3QgamZzX3N1cGVyX2Jsb2NrICopYnVmOworCisJaWYgKGJsa2lkX2xlMzIoanMtPmpzX2JzaXplKSAhPSAoMSA8PCBibGtpZF9sZTE2KGpzLT5qc19sMmJzaXplKSkpCisJCXJldHVybiAxOworCisJaWYgKGJsa2lkX2xlMzIoanMtPmpzX3Bic2l6ZSkgIT0gKDEgPDwgYmxraWRfbGUxNihqcy0+anNfbDJwYnNpemUpKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGJsa2lkX2xlMTYoanMtPmpzX2wyYnNpemUpIC0gYmxraWRfbGUxNihqcy0+anNfbDJwYnNpemUpKSAhPQorCSAgICBibGtpZF9sZTE2KGpzLT5qc19sMmJmYWN0b3IpKQorCQlyZXR1cm4gMTsKKworCWlmIChzdHJsZW4oKGNoYXIgKikganMtPmpzX2xhYmVsKSkKKwkJbGFiZWwgPSAoY2hhciAqKSBqcy0+anNfbGFiZWw7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgc2l6ZW9mKGpzLT5qc19sYWJlbCkpOworCXNldF91dWlkKHByb2JlLT5kZXYsIGpzLT5qc191dWlkLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV96ZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisjaWYgMAorCWNoYXIgKnZkZXZfbGFiZWw7CisJY29uc3QgY2hhciAqcG9vbF9uYW1lID0gMDsKKworCS8qIHJlYWQgbnZwYWlyIGRhdGEgZm9yIHBvb2wgbmFtZSwgcG9vbCBHVUlEIChjb21wbGV4KSAqLworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgcG9vbF9uYW1lLCBzaXplb2YocG9vbF9uYW1lKSk7CisJc2V0X3V1aWQocHJvYmUtPmRldiwgcG9vbF9ndWlkLCAwKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2x1a3Moc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwljaGFyIHV1aWRbNDBdOworCisJLyogMTY4IGlzIHRoZSBvZmZzZXQgdG8gdGhlIDQwIGNoYXJhY3RlciB1dWlkOgorCSAqIGh0dHA6Ly9sdWtzLmVuZG9ycGhpbi5vcmcvTFVLUy1vbi1kaXNrLWZvcm1hdC5wZGYgKi8KKwlzdHJuY3B5KHV1aWQsIChjaGFyICopIGJ1ZisxNjgsIDQwKTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJVVUlEIiwgdXVpZCwgc2l6ZW9mKHV1aWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9yb21mcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCByb21mc19zdXBlcl9ibG9jayAqcm9zOworCWNvbnN0IGNoYXIgKmxhYmVsID0gMDsKKworCXJvcyA9IChzdHJ1Y3Qgcm9tZnNfc3VwZXJfYmxvY2sgKilidWY7CisKKwlpZiAoc3RybGVuKChjaGFyICopIHJvcy0+cm9zX3ZvbHVtZSkpCisJCWxhYmVsID0gKGNoYXIgKikgcm9zLT5yb3Nfdm9sdW1lOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2NyYW1mcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkJc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCBjcmFtZnNfc3VwZXJfYmxvY2sgKmNzYjsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwljc2IgPSAoc3RydWN0IGNyYW1mc19zdXBlcl9ibG9jayAqKWJ1ZjsKKworCWlmIChzdHJsZW4oKGNoYXIgKikgY3NiLT5uYW1lKSkKKwkJbGFiZWwgPSAoY2hhciAqKSBjc2ItPm5hbWU7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfc3dhcDAoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiBfX0JMS0lEX0FUVFIoKHVudXNlZCkpKQoreworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIlVVSUQiLCAwLCAwKTsKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX3N3YXAxKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCSAgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmIF9fQkxLSURfQVRUUigodW51c2VkKSkpCit7CisJc3RydWN0IHN3YXBfaWRfYmxvY2sgKnN3czsKKworCXByb2JlX3N3YXAwKHByb2JlLCBpZCwgYnVmKTsKKwkvKgorCSAqIFZlcnNpb24gMSBzd2FwIGhlYWRlcnMgYXJlIGFsd2F5cyBsb2NhdGVkIGF0IG9mZnNldCBvZiAxMDI0CisJICogYnl0ZXMsIGFsdGhvdWdoIHRoZSBzd2FwIHNpZ25hdHVyZSBpdHNlbGYgaXMgbG9jYXRlZCBhdCB0aGUKKwkgKiBlbmQgb2YgdGhlIHBhZ2UgKHdoaWNoIG1heSB2YXJ5IGRlcGVuZGluZyBvbiBoYXJkd2FyZQorCSAqIHBhZ2VzaXplKS4KKwkgKi8KKwlzd3MgPSAoc3RydWN0IHN3YXBfaWRfYmxvY2sgKikgZ2V0X2J1ZmZlcihwcm9iZSwgMTAyNCwgMTAyNCk7CisJaWYgKCFzd3MpCisJCXJldHVybiAxOworCisJLyogY2hlY2sgZm9yIHdyb25nIHZlcnNpb24gb3IgemVyb2VkIHBhZ2Vjb3VudCwgZm9yIHNhbml0eSAqLworCWlmICghbWVtY21wKGlkLT5iaW1fbWFnaWMsICJTV0FQU1BBQ0UyIiwgaWQtPmJpbV9sZW4pICYmCisJCQkoc3dzLT5zd3NfdmVyc2lvbiAhPSAxIHx8IHN3cy0+c3dzX2xhc3RwYWdlID09IDApKQorCQlyZXR1cm4gMTsKKworCS8qIGFyYml0cmFyeSBzYW5pdHkgY2hlY2suLiBpcyB0aGVyZSBhbnkgZ2FyYmFnZSBkb3duIHRoZXJlPyAqLworCWlmIChzd3MtPnN3c19wYWRbMzJdID09IDAgJiYgc3dzLT5zd3NfcGFkWzMzXSA9PSAwKSAgeworCQlpZiAoc3dzLT5zd3Nfdm9sdW1lWzBdKQorCQkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBzd3MtPnN3c192b2x1bWUsCisJCQkJICAgICAgc2l6ZW9mKHN3cy0+c3dzX3ZvbHVtZSkpOworCQlpZiAoc3dzLT5zd3NfdXVpZFswXSkKKwkJCXNldF91dWlkKHByb2JlLT5kZXYsIHN3cy0+c3dzX3V1aWQsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9pc285NjYwKHN0cnVjdCBibGtpZF9wcm9iZSAqcHJvYmUsCisJCQkgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXNvX3ZvbHVtZV9kZXNjcmlwdG9yICppc287CisJY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWw7CisKKwlpc28gPSAoc3RydWN0IGlzb192b2x1bWVfZGVzY3JpcHRvciAqKSBidWY7CisJbGFiZWwgPSBpc28tPnZvbHVtZV9pZDsKKworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgKGNvbnN0IGNoYXIgKikgbGFiZWwsCisJCSAgICAgIGZpZ3VyZV9sYWJlbF9sZW4obGFiZWwsIDMyKSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIKKyp1ZGZfbWFnaWNbXSA9IHsgIkJFQTAxIiwgIkJPT1QyIiwgIkNEMDAxIiwgIkNEVzAyIiwgIk5TUjAyIiwKKwkJICJOU1IwMyIsICJURUEwMSIsIDAgfTsKKworc3RhdGljIGludCBwcm9iZV91ZGYoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmIF9fQkxLSURfQVRUUigodW51c2VkKSkpCit7CisJaW50IGosIGJzOworCXN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKmlzb3NiOworCWNvbnN0IGNoYXIgKiogbTsKKworCS8qIGRldGVybWluZSB0aGUgYmxvY2sgc2l6ZSBieSBzY2FubmluZyBpbiAySyBpbmNyZW1lbnRzCisJICAgKGJsb2NrIHNpemVzIGxhcmdlciB0aGFuIDJLIHdpbGwgYmUgbnVsbCBwYWRkZWQpICovCisJZm9yIChicyA9IDE7IGJzIDwgMTY7IGJzKyspIHsKKwkJaXNvc2IgPSAoc3RydWN0IGlzb192b2x1bWVfZGVzY3JpcHRvciAqKQorCQkJZ2V0X2J1ZmZlcihwcm9iZSwgYnMqMjA0OCszMjc2OCwgc2l6ZW9mKGlzb3NiKSk7CisJCWlmICghaXNvc2IpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGlzb3NiLT52ZF9pZFswXSkKKwkJCWJyZWFrOworCX0KKworCS8qIFNjYW4gdXAgdG8gYW5vdGhlciA2NCBibG9ja3MgbG9va2luZyBmb3IgYWRkaXRpb25hbCBWU0QncyAqLworCWZvciAoaiA9IDE7IGogPCA2NDsgaisrKSB7CisJCWlmIChqID4gMSkgeworCQkJaXNvc2IgPSAoc3RydWN0IGlzb192b2x1bWVfZGVzY3JpcHRvciAqKQorCQkJCWdldF9idWZmZXIocHJvYmUsIGoqYnMqMjA0OCszMjc2OCwKKwkJCQkJICAgc2l6ZW9mKGlzb3NiKSk7CisJCQlpZiAoIWlzb3NiKQorCQkJCXJldHVybiAxOworCQl9CisJCS8qIElmIHdlIGZpbmQgTlNSMHggdGhlbiBjYWxsIGl0IHVkZjoKKwkJICAgTlNSMDEgZm9yIFVERiAxLjAwCisJCSAgIE5TUjAyIGZvciBVREYgMS41MAorCQkgICBOU1IwMyBmb3IgVURGIDIuMDAgKi8KKwkJaWYgKCFtZW1jbXAoaXNvc2ItPnZkX2lkLCAiTlNSMCIsIDQpKQorCQkJcmV0dXJuIHByb2JlX2lzbzk2NjAocHJvYmUsIGlkLCBidWYpOworCQlmb3IgKG0gPSB1ZGZfbWFnaWM7ICptOyBtKyspCisJCQlpZiAoIW1lbWNtcCgqbSwgaXNvc2ItPnZkX2lkLCA1KSkKKwkJCQlicmVhazsKKwkJaWYgKCptID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfb2NmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgICBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb2Nmc192b2x1bWVfaGVhZGVyIG92aDsKKwlzdHJ1Y3Qgb2Nmc192b2x1bWVfbGFiZWwgb3ZsOworCV9fdTMyIG1ham9yOworCisJbWVtY3B5KCZvdmgsIGJ1Ziwgc2l6ZW9mKG92aCkpOworCW1lbWNweSgmb3ZsLCBidWYrNTEyLCBzaXplb2Yob3ZsKSk7CisKKwltYWpvciA9IG9jZnNtYWpvcihvdmgpOworCWlmIChtYWpvciA9PSAxKQorCQlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsIlNFQ19UWVBFIiwib2NmczEiLHNpemVvZigib2NmczEiKSk7CisJZWxzZSBpZiAobWFqb3IgPj0gOSkKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCJTRUNfVFlQRSIsIm50b2NmcyIsc2l6ZW9mKCJudG9jZnMiKSk7CisKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIG92bC5sYWJlbCwgb2Nmc2xhYmVsbGVuKG92bCkpOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIk1PVU5UIiwgb3ZoLm1vdW50LCBvY2ZzbW91bnRsZW4ob3ZoKSk7CisJc2V0X3V1aWQocHJvYmUtPmRldiwgb3ZsLnZvbF9pZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfb2NmczIoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJICAgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXJfYmxvY2sgKm9zYjsKKworCW9zYiA9IChzdHJ1Y3Qgb2NmczJfc3VwZXJfYmxvY2sgKilidWY7CisKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIG9zYi0+c19sYWJlbCwgc2l6ZW9mKG9zYi0+c19sYWJlbCkpOworCXNldF91dWlkKHByb2JlLT5kZXYsIG9zYi0+c191dWlkLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9iZV9vcmFjbGVhc20oc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb3JhY2xlX2FzbV9kaXNrX2xhYmVsICpkbDsKKworCWRsID0gKHN0cnVjdCBvcmFjbGVfYXNtX2Rpc2tfbGFiZWwgKilidWY7CisKKwlibGtpZF9zZXRfdGFnKHByb2JlLT5kZXYsICJMQUJFTCIsIGRsLT5kbF9pZCwgc2l6ZW9mKGRsLT5kbF9pZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2JlX2dmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGdmczJfc2IgKnNiZDsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlzYmQgPSAoc3RydWN0IGdmczJfc2IgKilidWY7CisKKwlpZiAoYmxraWRfYmUzMihzYmQtPnNiX2ZzX2Zvcm1hdCkgPT0gR0ZTX0ZPUk1BVF9GUyAmJgorCSAgICBibGtpZF9iZTMyKHNiZC0+c2JfbXVsdGlob3N0X2Zvcm1hdCkgPT0gR0ZTX0ZPUk1BVF9NVUxUSSkKKwl7CisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIlVVSUQiLCAwLCAwKTsKKworCQlpZiAoc3RybGVuKHNiZC0+c2JfbG9ja3RhYmxlKSkKKwkJCWxhYmVsID0gc2JkLT5zYl9sb2NrdGFibGU7CisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihzYmQtPnNiX2xvY2t0YWJsZSkpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZ2ZzMihzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorCQkgICAgIHN0cnVjdCBibGtpZF9tYWdpYyAqaWQgX19CTEtJRF9BVFRSKCh1bnVzZWQpKSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGdmczJfc2IgKnNiZDsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlzYmQgPSAoc3RydWN0IGdmczJfc2IgKilidWY7CisKKwlpZiAoYmxraWRfYmUzMihzYmQtPnNiX2ZzX2Zvcm1hdCkgPT0gR0ZTMl9GT1JNQVRfRlMgJiYKKwkgICAgYmxraWRfYmUzMihzYmQtPnNiX211bHRpaG9zdF9mb3JtYXQpID09IEdGUzJfRk9STUFUX01VTFRJKQorCXsKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIDAsIDApOworCisJCWlmIChzdHJsZW4oc2JkLT5zYl9sb2NrdGFibGUpKQorCQkJbGFiZWwgPSBzYmQtPnNiX2xvY2t0YWJsZTsKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgc2l6ZW9mKHNiZC0+c2JfbG9ja3RhYmxlKSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdW5pY29kZV8xNmJlX3RvX3V0ZjgodW5zaWduZWQgY2hhciAqc3RyLCBpbnQgb3V0X2xlbiwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgaW5fbGVuKQoreworCWludCBpLCBqOworCXVuc2lnbmVkIGludCBjOworCisJZm9yIChpID0gaiA9IDA7IGkgKyAyIDw9IGluX2xlbjsgaSArPSAyKSB7CisJCWMgPSAoYnVmW2ldIDw8IDgpIHwgYnVmW2krMV07CisJCWlmIChjID09IDApIHsKKwkJCXN0cltqXSA9ICdcMCc7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChjIDwgMHg4MCkgeworCQkJaWYgKGorMSA+PSBvdXRfbGVuKQorCQkJCWJyZWFrOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgYzsKKwkJfSBlbHNlIGlmIChjIDwgMHg4MDApIHsKKwkJCWlmIChqKzIgPj0gb3V0X2xlbikKKwkJCQlicmVhazsKKwkJCXN0cltqKytdID0gKHVuc2lnbmVkIGNoYXIpICgweGMwIHwgKGMgPj4gNikpOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgKDB4ODAgfCAoYyAmIDB4M2YpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChqKzMgPj0gb3V0X2xlbikKKwkJCQlicmVhazsKKwkJCXN0cltqKytdID0gKHVuc2lnbmVkIGNoYXIpICgweGUwIHwgKGMgPj4gMTIpKTsKKwkJCXN0cltqKytdID0gKHVuc2lnbmVkIGNoYXIpICgweDgwIHwgKChjID4+IDYpICYgMHgzZikpOworCQkJc3RyW2orK10gPSAodW5zaWduZWQgY2hhcikgKDB4ODAgfCAoYyAmIDB4M2YpKTsKKwkJfQorCX0KKwlzdHJbal0gPSAnXDAnOworfQorCitzdGF0aWMgaW50IHByb2JlX2hmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlIF9fQkxLSURfQVRUUigodW51c2VkKSksCisJCQkgc3RydWN0IGJsa2lkX21hZ2ljICppZCBfX0JMS0lEX0FUVFIoKHVudXNlZCkpLAorCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGZzX21kYiAqaGZzID0gKHN0cnVjdCBoZnNfbWRiICopYnVmOworCXVuc2lnbmVkIGxvbmcgbG9uZyAqdXVpZF9wdHI7CisJY2hhcgl1dWlkX3N0clsxN107CisJX191NjQJdXVpZDsKKworCWlmICgobWVtY21wKGhmcy0+ZW1iZWRfc2lnLCAiSCsiLCAyKSA9PSAwKSB8fAorCSAgICAobWVtY21wKGhmcy0+ZW1iZWRfc2lnLCAiSFgiLCAyKSA9PSAwKSkKKwkJcmV0dXJuIDE7CS8qIE5vdCBoZnMsIGJ1dCBhbiBlbWJlZGRlZCBIRlMrICovCisKKwl1dWlkX3B0ciA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKiloZnMtPmZpbmRlcl9pbmZvLmlkOworCXV1aWQgPSBibGtpZF9sZTY0KCp1dWlkX3B0cik7CisJaWYgKHV1aWQpIHsKKwkJc3ByaW50Zih1dWlkX3N0ciwgIiUwMTZsbFgiLCB1dWlkKTsKKwkJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHV1aWRfc3RyLCAwKTsKKwl9CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCAoY2hhciAqKWhmcy0+bGFiZWwsIGhmcy0+bGFiZWxfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHByb2JlX2hmc3BsdXMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSBzdHJ1Y3QgYmxraWRfbWFnaWMgKmlkLAorCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGZzcGx1c19leHRlbnQgZXh0ZW50c1tIRlNQTFVTX0VYVEVOVF9DT1VOVF07CisJc3RydWN0IGhmc3BsdXNfYm5vZGVfZGVzY3JpcHRvciAqZGVzY3I7CisJc3RydWN0IGhmc3BsdXNfYmhlYWRlcl9yZWNvcmQgKmJub2RlOworCXN0cnVjdCBoZnNwbHVzX2NhdGFsb2dfa2V5ICprZXk7CisJc3RydWN0IGhmc3BsdXNfdm9sX2hlYWRlciAqaGZzcGx1czsKKwlzdHJ1Y3QgaGZzX21kYiAqc2JkID0gKHN0cnVjdCBoZnNfbWRiICopIGJ1ZjsKKwl1bnNpZ25lZCBpbnQgYWxsb2NfYmxvY2tfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYWxsb2NfZmlyc3RfYmxvY2s7CisJdW5zaWduZWQgaW50IGVtYmVkX2ZpcnN0X2Jsb2NrOworCXVuc2lnbmVkIGludCBvZmYgPSAwOworCXVuc2lnbmVkIGludCBibG9ja3NpemU7CisJdW5zaWduZWQgaW50IGNhdF9ibG9jazsKKwl1bnNpZ25lZCBpbnQgZXh0X2Jsb2NrX3N0YXJ0OworCXVuc2lnbmVkIGludCBleHRfYmxvY2tfY291bnQ7CisJdW5zaWduZWQgaW50IHJlY29yZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVhZl9ub2RlX2hlYWQ7CisJdW5zaWduZWQgaW50IGxlYWZfbm9kZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVhZl9ub2RlX3NpemU7CisJdW5zaWduZWQgaW50IGxlYWZfYmxvY2s7CisJdW5zaWduZWQgaW50IGxhYmVsX2xlbjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgKnV1aWRfcHRyOworCV9fdTY0IGxlYWZfb2ZmLCB1dWlkOworCWNoYXIJdXVpZF9zdHJbMTddLCBsYWJlbFs1MTJdOworCWludCBleHQ7CisKKwkvKiBDaGVjayBmb3IgYSBIRlMrIHZvbHVtZSBlbWJlZGRlZCBpbiBhIEhGUyB2b2x1bWUgKi8KKwlpZiAobWVtY21wKHNiZC0+c2lnbmF0dXJlLCAiQkQiLCAyKSA9PSAwKSB7CisJCWlmICgobWVtY21wKHNiZC0+ZW1iZWRfc2lnLCAiSCsiLCAyKSAhPSAwKSAmJgorCQkgICAgKG1lbWNtcChzYmQtPmVtYmVkX3NpZywgIkhYIiwgMikgIT0gMCkpCisJCQkvKiBUaGlzIG11c3QgYmUgYW4gSEZTIHZvbHVtZSwgc28gZmFpbCAqLworCQkJcmV0dXJuIDE7CisKKwkJYWxsb2NfYmxvY2tfc2l6ZSA9IGJsa2lkX2JlMzIoc2JkLT5hbF9ibGtfc2l6ZSk7CisJCWFsbG9jX2ZpcnN0X2Jsb2NrID0gYmxraWRfYmUxNihzYmQtPmFsX2JsX3N0KTsKKwkJZW1iZWRfZmlyc3RfYmxvY2sgPSBibGtpZF9iZTE2KHNiZC0+ZW1iZWRfc3RhcnRibG9jayk7CisJCW9mZiA9IChhbGxvY19maXJzdF9ibG9jayAqIDUxMikgKworCQkJKGVtYmVkX2ZpcnN0X2Jsb2NrICogYWxsb2NfYmxvY2tfc2l6ZSk7CisJCWJ1ZiA9IGdldF9idWZmZXIocHJvYmUsIG9mZiArIChpZC0+YmltX2tib2ZmICogMTAyNCksCisJCQkJIHNpemVvZihzYmQpKTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gMTsKKworCQloZnNwbHVzID0gKHN0cnVjdCBoZnNwbHVzX3ZvbF9oZWFkZXIgKikgYnVmOworCX0KKworCWhmc3BsdXMgPSAoc3RydWN0IGhmc3BsdXNfdm9sX2hlYWRlciAqKSBidWY7CisKKwlpZiAoKG1lbWNtcChoZnNwbHVzLT5zaWduYXR1cmUsICJIKyIsIDIpICE9IDApICYmCisJICAgIChtZW1jbXAoaGZzcGx1cy0+c2lnbmF0dXJlLCAiSFgiLCAyKSAhPSAwKSkKKwkJcmV0dXJuIDE7CisKKwl1dWlkX3B0ciA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKiloZnNwbHVzLT5maW5kZXJfaW5mby5pZDsKKwl1dWlkID0gYmxraWRfbGU2NCgqdXVpZF9wdHIpOworCWlmICh1dWlkKSB7CisJCXNwcmludGYodXVpZF9zdHIsICIlMDE2bGxYIiwgdXVpZCk7CisJCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIlVVSUQiLCB1dWlkX3N0ciwgMCk7CisJfQorCisJYmxvY2tzaXplID0gYmxraWRfYmUzMihoZnNwbHVzLT5ibG9ja3NpemUpOworCW1lbWNweShleHRlbnRzLCBoZnNwbHVzLT5jYXRfZmlsZS5leHRlbnRzLCBzaXplb2YoZXh0ZW50cykpOworCWNhdF9ibG9jayA9IGJsa2lkX2JlMzIoZXh0ZW50c1swXS5zdGFydF9ibG9jayk7CisKKwlidWYgPSBnZXRfYnVmZmVyKHByb2JlLCBvZmYgKyAoY2F0X2Jsb2NrICogYmxvY2tzaXplKSwgMHgyMDAwKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlibm9kZSA9IChzdHJ1Y3QgaGZzcGx1c19iaGVhZGVyX3JlY29yZCAqKQorCQkmYnVmW3NpemVvZihzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yKV07CisKKwlsZWFmX25vZGVfaGVhZCA9IGJsa2lkX2JlMzIoYm5vZGUtPmxlYWZfaGVhZCk7CisJbGVhZl9ub2RlX3NpemUgPSBibGtpZF9iZTE2KGJub2RlLT5ub2RlX3NpemUpOworCWxlYWZfbm9kZV9jb3VudCA9IGJsa2lkX2JlMzIoYm5vZGUtPmxlYWZfY291bnQpOworCWlmIChsZWFmX25vZGVfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZWFmX2Jsb2NrID0gKGxlYWZfbm9kZV9oZWFkICogbGVhZl9ub2RlX3NpemUpIC8gYmxvY2tzaXplOworCisJLyogZ2V0IHBoeXNpY2FsIGxvY2F0aW9uICovCisJZm9yIChleHQgPSAwOyBleHQgPCBIRlNQTFVTX0VYVEVOVF9DT1VOVDsgZXh0KyspIHsKKwkJZXh0X2Jsb2NrX3N0YXJ0ID0gYmxraWRfYmUzMihleHRlbnRzW2V4dF0uc3RhcnRfYmxvY2spOworCQlleHRfYmxvY2tfY291bnQgPSBibGtpZF9iZTMyKGV4dGVudHNbZXh0XS5ibG9ja19jb3VudCk7CisJCWlmIChleHRfYmxvY2tfY291bnQgPT0gMCkKKwkJCXJldHVybiAwOworCisJCS8qIHRoaXMgaXMgb3VyIGV4dGVudCAqLworCQlpZiAobGVhZl9ibG9jayA8IGV4dF9ibG9ja19jb3VudCkKKwkJCWJyZWFrOworCisJCWxlYWZfYmxvY2sgLT0gZXh0X2Jsb2NrX2NvdW50OworCX0KKwlpZiAoZXh0ID09IEhGU1BMVVNfRVhURU5UX0NPVU5UKQorCQlyZXR1cm4gMDsKKworCWxlYWZfb2ZmID0gKGV4dF9ibG9ja19zdGFydCArIGxlYWZfYmxvY2spICogYmxvY2tzaXplOworCisJYnVmID0gZ2V0X2J1ZmZlcihwcm9iZSwgb2ZmICsgbGVhZl9vZmYsIGxlYWZfbm9kZV9zaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlkZXNjciA9IChzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yICopIGJ1ZjsKKwlyZWNvcmRfY291bnQgPSBibGtpZF9iZTE2KGRlc2NyLT5udW1fcmVjcyk7CisJaWYgKHJlY29yZF9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXNjci0+dHlwZSAhPSBIRlNfTk9ERV9MRUFGKQorCQlyZXR1cm4gMDsKKworCWtleSA9IChzdHJ1Y3QgaGZzcGx1c19jYXRhbG9nX2tleSAqKQorCQkmYnVmW3NpemVvZihzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yKV07CisKKwlpZiAoYmxraWRfYmUzMihrZXktPnBhcmVudF9pZCkgIT0gSEZTUExVU19QT1JfQ05JRCkKKwkJcmV0dXJuIDA7CisKKwlsYWJlbF9sZW4gPSBibGtpZF9iZTE2KGtleS0+dW5pY29kZV9sZW4pICogMjsKKwl1bmljb2RlXzE2YmVfdG9fdXRmOCgodW5zaWduZWQgY2hhciAqKWxhYmVsLCBzaXplb2YobGFiZWwpLAorCQkJICAgICBrZXktPnVuaWNvZGUsIGxhYmVsX2xlbik7CisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiTEFCRUwiLCBsYWJlbCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTFZNMl9MQUJFTF9TSVpFIDUxMgorc3RhdGljIHVuc2lnbmVkIGludCBsdm0yX2NhbGNfY3JjKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjcmN0YWJbXSA9IHsKKwkJMHgwMDAwMDAwMCwgMHgxZGI3MTA2NCwgMHgzYjZlMjBjOCwgMHgyNmQ5MzBhYywKKwkJMHg3NmRjNDE5MCwgMHg2YjZiNTFmNCwgMHg0ZGIyNjE1OCwgMHg1MDA1NzEzYywKKwkJMHhlZGI4ODMyMCwgMHhmMDBmOTM0NCwgMHhkNmQ2YTNlOCwgMHhjYjYxYjM4YywKKwkJMHg5YjY0YzJiMCwgMHg4NmQzZDJkNCwgMHhhMDBhZTI3OCwgMHhiZGJkZjIxYworCX07CisJdW5zaWduZWQgaW50IGksIGNyYyA9IDB4ZjU5N2E2Y2Y7CisJY29uc3QgX191OCAqZGF0YSA9IChjb25zdCBfX3U4ICopIGJ1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJY3JjIF49ICpkYXRhKys7CisJCWNyYyA9IChjcmMgPj4gNCkgXiBjcmN0YWJbY3JjICYgMHhmXTsKKwkJY3JjID0gKGNyYyA+PiA0KSBeIGNyY3RhYltjcmMgJiAweGZdOworCX0KKwlyZXR1cm4gY3JjOworfQorCitzdGF0aWMgaW50IHByb2JlX2x2bTIoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCXN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCQl1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaW50IHNlY3RvciA9IChpZC0+YmltX2tib2ZmKSA8PCAxOworCXN0cnVjdCBsdm0yX3B2X2xhYmVsX2hlYWRlciAqbGFiZWw9IChzdHJ1Y3QgbHZtMl9wdl9sYWJlbF9oZWFkZXIgKilidWY7CisJY2hhciAqcCwgKnEsIHV1aWRbNDBdOworCXVuc2lnbmVkIGludCBpLCBiOworCisJLyogYnVmIGlzIGF0IDBrIG9yIDFrIG9mZnNldDsgZmluZCBsYWJlbCBpbnNpZGUgKi8KKwlpZiAobWVtY21wKGJ1ZiwgIkxBQkVMT05FIiwgOCkgPT0gMCkgeworCQlsYWJlbCA9IChzdHJ1Y3QgbHZtMl9wdl9sYWJlbF9oZWFkZXIgKilidWY7CisJfSBlbHNlIGlmIChtZW1jbXAoYnVmICsgNTEyLCAiTEFCRUxPTkUiLCA4KSA9PSAwKSB7CisJCWxhYmVsID0gKHN0cnVjdCBsdm0yX3B2X2xhYmVsX2hlYWRlciAqKShidWYgKyA1MTIpOworCQlzZWN0b3IrKzsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYmxraWRfbGU2NChsYWJlbC0+c2VjdG9yX3hsKSAhPSAodW5zaWduZWQpIHNlY3RvcikgeworCQlEQkcoREVCVUdfUFJPQkUsCisJCSAgICBwcmludGYoIkxWTTI6IGxhYmVsIGZvciBzZWN0b3IgJWxsdSBmb3VuZCBhdCBzZWN0b3IgJWRcbiIsCisJCQkgICBibGtpZF9sZTY0KGxhYmVsLT5zZWN0b3JfeGwpLCBzZWN0b3IpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGx2bTJfY2FsY19jcmMoJmxhYmVsLT5vZmZzZXRfeGwsIExWTTJfTEFCRUxfU0laRSAtCisJCQkgICgoY2hhciAqKSZsYWJlbC0+b2Zmc2V0X3hsIC0gKGNoYXIgKilsYWJlbCkpICE9CisJCQlibGtpZF9sZTMyKGxhYmVsLT5jcmNfeGwpKSB7CisJCURCRyhERUJVR19QUk9CRSwKKwkJICAgIHByaW50ZigiTFZNMjogbGFiZWwgY2hlY2tzdW0gaW5jb3JyZWN0IGF0IHNlY3RvciAlZFxuIiwKKwkJCSAgIHNlY3RvcikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGk9MCwgYj0xLCBwPXV1aWQsIHE9IChjaGFyICopIGxhYmVsLT5wdl91dWlkOyBpIDw9IDMyOworCSAgICAgaSsrLCBiIDw8PSAxKSB7CisJCWlmIChiICYgMHg0NDQ0NDQwKQorCQkJKnArKyA9ICctJzsKKwkJKnArKyA9ICpxKys7CisJfQorCisJYmxraWRfc2V0X3RhZyhwcm9iZS0+ZGV2LCAiVVVJRCIsIHV1aWQsIExWTTJfSURfTEVOKzYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfYnRyZnMoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCXN0cnVjdCBibGtpZF9tYWdpYyAqaWQsCisJCQl1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpiczsKKwljb25zdCBjaGFyICpsYWJlbCA9IDA7CisKKwlicyA9IChzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKilidWY7CisKKwlpZiAoc3RybGVuKGJzLT5sYWJlbCkpCisJCWxhYmVsID0gYnMtPmxhYmVsOworCWJsa2lkX3NldF90YWcocHJvYmUtPmRldiwgIkxBQkVMIiwgbGFiZWwsIHNpemVvZihicy0+bGFiZWwpKTsKKwlzZXRfdXVpZChwcm9iZS0+ZGV2LCBicy0+ZnNpZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfZjJmcyhzdHJ1Y3QgYmxraWRfcHJvYmUgKnByb2JlLAorICAgICAgICAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgICBzdHJ1Y3QgZjJmc19zdXBlcl9ibG9jayAqYnM7CisKKyAgICBicyA9IChzdHJ1Y3QgZjJmc19zdXBlcl9ibG9jayAqKWJ1ZjsKKyAgICBzZXRfdXVpZChwcm9iZS0+ZGV2LCBicy0+dXVpZCwgMCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWYXJpb3VzIGZpbGVzeXN0ZW0gbWFnaWNzIHRoYXQgd2UgY2FuIGNoZWNrIGZvci4gIE5vdGUgdGhhdCBrYm9mZiBhbmQKKyAqIHNib2ZmIGFyZSBpbiBraWxvYnl0ZXMgYW5kIGJ5dGVzIHJlc3BlY3RpdmVseS4gIEFsbCBtYWdpY3MgYXJlIGluCisgKiBieXRlIHN0cmluZ3Mgc28gd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZW5kaWFuIGlzc3Vlcy4KKyAqLworc3RhdGljIHN0cnVjdCBibGtpZF9tYWdpYyB0eXBlX2FycmF5W10gPSB7CisvKiAgdHlwZSAgICAga2JvZmYgICBzYm9mZiBsZW4gIG1hZ2ljCQkJcHJvYmUgKi8KKyAgeyAib3JhY2xlYXNtIiwgMCwJMzIsICA4LCAiT1JDTERJU0siLAkJcHJvYmVfb3JhY2xlYXNtIH0sCisgIHsgIm50ZnMiLAkgMCwJIDMsICA4LCAiTlRGUyAgICAiLAkJcHJvYmVfbnRmcyB9LAorICB7ICJqYmQiLAkgMSwgICAweDM4LCAgMiwgIlwxMjNcMzU3IiwJCXByb2JlX2piZCB9LAorICB7ICJleHQ0ZGV2IiwJIDEsICAgMHgzOCwgIDIsICJcMTIzXDM1NyIsCQlwcm9iZV9leHQ0ZGV2IH0sCisgIHsgImV4dDQiLAkgMSwgICAweDM4LCAgMiwgIlwxMjNcMzU3IiwJCXByb2JlX2V4dDQgfSwKKyAgeyAiZXh0MyIsCSAxLCAgIDB4MzgsICAyLCAiXDEyM1wzNTciLAkJcHJvYmVfZXh0MyB9LAorICB7ICJleHQyIiwJIDEsICAgMHgzOCwgIDIsICJcMTIzXDM1NyIsCQlwcm9iZV9leHQyIH0sCisgIHsgInJlaXNlcmZzIiwJIDgsICAgMHgzNCwgIDgsICJSZUlzRXJGcyIsCQlwcm9iZV9yZWlzZXJmcyB9LAorICB7ICJyZWlzZXJmcyIsIDY0LCAgIDB4MzQsICA5LCAiUmVJc0VyMkZzIiwJCXByb2JlX3JlaXNlcmZzIH0sCisgIHsgInJlaXNlcmZzIiwgNjQsICAgMHgzNCwgIDksICJSZUlzRXIzRnMiLAkJcHJvYmVfcmVpc2VyZnMgfSwKKyAgeyAicmVpc2VyZnMiLCA2NCwgICAweDM0LCAgOCwgIlJlSXNFckZzIiwJCXByb2JlX3JlaXNlcmZzIH0sCisgIHsgInJlaXNlcmZzIiwJIDgsCTIwLCAgOCwgIlJlSXNFckZzIiwJCXByb2JlX3JlaXNlcmZzIH0sCisgIHsgInJlaXNlcjQiLCAgNjQsCSAwLCAgNywgIlJlSXNFcjQiLAkJcHJvYmVfcmVpc2VyZnM0IH0sCisgIHsgImdmczIiLCAgICAgNjQsICAgICAgMCwgIDQsICJceDAxXHgxNlx4MTlceDcwIiwgICAgIHByb2JlX2dmczIgfSwKKyAgeyAiZ2ZzIiwgICAgICA2NCwgICAgICAwLCAgNCwgIlx4MDFceDE2XHgxOVx4NzAiLCAgICAgcHJvYmVfZ2ZzIH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAgMHg1MiwgIDUsICJNU1dJTiIsICAgICAgICAgICAgICAgIHByb2JlX2ZhdCB9LAorICB7ICJ2ZmF0IiwgICAgICAwLCAgIDB4NTIsICA4LCAiRkFUMzIgICAiLCAgICAgICAgICAgICBwcm9iZV9mYXQgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgICAweDM2LCAgNSwgIk1TRE9TIiwgICAgICAgICAgICAgICAgcHJvYmVfZmF0IH0sCisgIHsgInZmYXQiLCAgICAgIDAsICAgMHgzNiwgIDgsICJGQVQxNiAgICIsICAgICAgICAgICAgIHByb2JlX2ZhdCB9LAorICB7ICJ2ZmF0IiwgICAgICAwLCAgIDB4MzYsICA4LCAiRkFUMTIgICAiLCAgICAgICAgICAgICBwcm9iZV9mYXQgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgICAgICAwLCAgMSwgIlwzNTMiLCAgICAgICAgICAgICAgICAgcHJvYmVfZmF0X25vbWFnaWMgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgICAgICAwLCAgMSwgIlwzNTEiLCAgICAgICAgICAgICAgICAgcHJvYmVfZmF0X25vbWFnaWMgfSwKKyAgeyAidmZhdCIsICAgICAgMCwgIDB4MWZlLCAgMiwgIlwxMjVcMjUyIiwgICAgICAgICAgICAgcHJvYmVfZmF0X25vbWFnaWMgfSwKKyAgeyAibWluaXgiLCAgICAgMSwgICAweDEwLCAgMiwgIlwxNzdcMDIzIiwgICAgICAgICAgICAgMCB9LAorICB7ICJtaW5peCIsICAgICAxLCAgIDB4MTAsICAyLCAiXDIxN1wwMjMiLCAgICAgICAgICAgICAwIH0sCisgIHsgIm1pbml4IiwJIDEsICAgMHgxMCwgIDIsICJcMTUwXDA0NCIsCQkwIH0sCisgIHsgIm1pbml4IiwJIDEsICAgMHgxMCwgIDIsICJcMTcwXDA0NCIsCQkwIH0sCisgIHsgInZ4ZnMiLAkgMSwJIDAsICA0LCAiXDM2NVwzNzRcMDAxXDI0NSIsCTAgfSwKKyAgeyAieGZzIiwJIDAsCSAwLCAgNCwgIlhGU0IiLAkJCXByb2JlX3hmcyB9LAorICB7ICJyb21mcyIsCSAwLAkgMCwgIDgsICItcm9tMWZzLSIsCQlwcm9iZV9yb21mcyB9LAorICB7ICJiZnMiLAkgMCwJIDAsICA0LCAiXDMxNlwzNzJcMTczXDAzMyIsCTAgfSwKKyAgeyAiY3JhbWZzIiwJIDAsCSAwLCAgNCwgIkU9XDMxNVwwNTAiLAkJcHJvYmVfY3JhbWZzIH0sCisgIHsgInFueDQiLAkgMCwJIDQsICA2LCAiUU5YNEZTIiwJCTAgfSwKKyAgeyAidWRmIiwJMzIsCSAxLCAgNSwgIkJFQTAxIiwJCXByb2JlX3VkZiB9LAorICB7ICJ1ZGYiLAkzMiwJIDEsICA1LCAiQk9PVDIiLAkJcHJvYmVfdWRmIH0sCisgIHsgInVkZiIsCTMyLAkgMSwgIDUsICJDRDAwMSIsCQlwcm9iZV91ZGYgfSwKKyAgeyAidWRmIiwJMzIsCSAxLCAgNSwgIkNEVzAyIiwJCXByb2JlX3VkZiB9LAorICB7ICJ1ZGYiLAkzMiwJIDEsICA1LCAiTlNSMDIiLAkJcHJvYmVfdWRmIH0sCisgIHsgInVkZiIsCTMyLAkgMSwgIDUsICJOU1IwMyIsCQlwcm9iZV91ZGYgfSwKKyAgeyAidWRmIiwJMzIsCSAxLCAgNSwgIlRFQTAxIiwJCXByb2JlX3VkZiB9LAorICB7ICJpc285NjYwIiwJMzIsCSAxLCAgNSwgIkNEMDAxIiwJCXByb2JlX2lzbzk2NjAgfSwKKyAgeyAiaXNvOTY2MCIsCTMyLAkgOSwgIDUsICJDRFJPTSIsCQlwcm9iZV9pc285NjYwIH0sCisgIHsgImpmcyIsCTMyLAkgMCwgIDQsICJKRlMxIiwJCQlwcm9iZV9qZnMgfSwKKyAgeyAiemZzIiwgICAgICAgOCwJIDAsICA4LCAiXDBcMFx4MDJceGY1XHhiMFx4MDdceGIxXHgwYyIsIHByb2JlX3pmcyB9LAorICB7ICJ6ZnMiLCAgICAgICA4LAkgMCwgIDgsICJceDBjXHhiMVx4MDdceGIwXHhmNVx4MDJcMFwwIiwgcHJvYmVfemZzIH0sCisgIHsgInpmcyIsICAgICAyNjQsCSAwLCAgOCwgIlwwXDBceDAyXHhmNVx4YjBceDA3XHhiMVx4MGMiLCBwcm9iZV96ZnMgfSwKKyAgeyAiemZzIiwgICAgIDI2NCwJIDAsICA4LCAiXHgwY1x4YjFceDA3XHhiMFx4ZjVceDAyXDBcMCIsIHByb2JlX3pmcyB9LAorICB7ICJoZnNwbHVzIiwJIDEsCSAwLCAgMiwgIkJEIiwJCQlwcm9iZV9oZnNwbHVzIH0sCisgIHsgImhmc3BsdXMiLAkgMSwJIDAsICAyLCAiSCsiLAkJCXByb2JlX2hmc3BsdXMgfSwKKyAgeyAiaGZzcGx1cyIsCSAxLAkgMCwgIDIsICJIWCIsCQkJcHJvYmVfaGZzcGx1cyB9LAorICB7ICJoZnMiLAkgMSwJIDAsICAyLCAiQkQiLAkJCXByb2JlX2hmcyB9LAorICB7ICJ1ZnMiLAkgOCwgIDB4NTVjLCAgNCwgIlRcMDMxXDAwMVwwMDAiLAkwIH0sCisgIHsgImhwZnMiLAkgOCwJIDAsICA0LCAiSVwzNTBcMjI1XDM3MSIsCTAgfSwKKyAgeyAic3lzdiIsCSAwLCAgMHgzZjgsICA0LCAiXDAyMH5cMDMwXDM3NSIsCTAgfSwKKyAgeyAic3dhcCIsCSAwLCAgMHhmZjYsIDEwLCAiU1dBUC1TUEFDRSIsCQlwcm9iZV9zd2FwMCB9LAorICB7ICJzd2FwIiwJIDAsICAweGZmNiwgMTAsICJTV0FQU1BBQ0UyIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsICAweGZmNiwgIDksICJTMVNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgIDB4ZmY2LCAgOSwgIlMyU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAgMHhmZjYsICA5LCAiVUxTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3YXAiLAkgMCwgMHgxZmY2LCAxMCwgIlNXQVAtU1BBQ0UiLAkJcHJvYmVfc3dhcDAgfSwKKyAgeyAic3dhcCIsCSAwLCAweDFmZjYsIDEwLCAiU1dBUFNQQUNFMiIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDFmZjYsICA5LCAiUzFTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4MWZmNiwgIDksICJTMlNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHgxZmY2LCAgOSwgIlVMU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd2FwIiwJIDAsIDB4M2ZmNiwgMTAsICJTV0FQLVNQQUNFIiwJCXByb2JlX3N3YXAwIH0sCisgIHsgInN3YXAiLAkgMCwgMHgzZmY2LCAxMCwgIlNXQVBTUEFDRTIiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHgzZmY2LCAgOSwgIlMxU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDNmZjYsICA5LCAiUzJTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4M2ZmNiwgIDksICJVTFNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dhcCIsCSAwLCAweDdmZjYsIDEwLCAiU1dBUC1TUEFDRSIsCQlwcm9iZV9zd2FwMCB9LAorICB7ICJzd2FwIiwJIDAsIDB4N2ZmNiwgMTAsICJTV0FQU1BBQ0UyIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4N2ZmNiwgIDksICJTMVNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHg3ZmY2LCAgOSwgIlMyU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweDdmZjYsICA5LCAiVUxTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3YXAiLAkgMCwgMHhmZmY2LCAxMCwgIlNXQVAtU1BBQ0UiLAkJcHJvYmVfc3dhcDAgfSwKKyAgeyAic3dhcCIsCSAwLCAweGZmZjYsIDEwLCAiU1dBUFNQQUNFMiIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJzd3N1c3BlbmQiLCAwLCAweGZmZjYsICA5LCAiUzFTVVNQRU5EIiwJCXByb2JlX3N3YXAxIH0sCisgIHsgInN3c3VzcGVuZCIsIDAsIDB4ZmZmNiwgIDksICJTMlNVU1BFTkQiLAkJcHJvYmVfc3dhcDEgfSwKKyAgeyAic3dzdXNwZW5kIiwgMCwgMHhmZmY2LCAgOSwgIlVMU1VTUEVORCIsCQlwcm9iZV9zd2FwMSB9LAorICB7ICJvY2ZzIiwJIDAsCSA4LCAgOSwJIk9yYWNsZUNGUyIsCQlwcm9iZV9vY2ZzIH0sCisgIHsgIm9jZnMyIiwJIDEsCSAwLCAgNiwJIk9DRlNWMiIsCQlwcm9iZV9vY2ZzMiB9LAorICB7ICJvY2ZzMiIsCSAyLAkgMCwgIDYsCSJPQ0ZTVjIiLAkJcHJvYmVfb2NmczIgfSwKKyAgeyAib2NmczIiLAkgNCwJIDAsICA2LAkiT0NGU1YyIiwJCXByb2JlX29jZnMyIH0sCisgIHsgIm9jZnMyIiwJIDgsCSAwLCAgNiwJIk9DRlNWMiIsCQlwcm9iZV9vY2ZzMiB9LAorICB7ICJjcnlwdF9MVUtTIiwgMCwJIDAsICA2LAkiTFVLU1x4YmFceGJlIiwJCXByb2JlX2x1a3MgfSwKKyAgeyAic3F1YXNoZnMiLAkgMCwJIDAsICA0LAkic3FzaCIsCQkJMCB9LAorICB7ICJzcXVhc2hmcyIsCSAwLAkgMCwgIDQsCSJoc3FzIiwJCQkwIH0sCisgIHsgImx2bTJwdiIsCSAwLCAgMHgyMTgsICA4LCAiTFZNMiAwMDEiLAkJcHJvYmVfbHZtMiB9LAorICB7ICJsdm0ycHYiLAkgMCwgIDB4MDE4LCAgOCwgIkxWTTIgMDAxIiwJCXByb2JlX2x2bTIgfSwKKyAgeyAibHZtMnB2IiwJIDEsICAweDAxOCwgIDgsICJMVk0yIDAwMSIsCQlwcm9iZV9sdm0yIH0sCisgIHsgImx2bTJwdiIsCSAxLCAgMHgyMTgsICA4LCAiTFZNMiAwMDEiLAkJcHJvYmVfbHZtMiB9LAorICB7ICJidHJmcyIsCSA2NCwgIDB4NDAsICA4LCAiX0JIUmZTX00iLAkJcHJvYmVfYnRyZnMgfSwKKyAgeyAiZjJmcyIsCSAxLCAgICAgIDAsICA0LCAiXHgxMFx4MjBceGY1XHhmMiIsCXByb2JlX2YyZnMgfSwKKyAgeyAgIE5VTEwsCSAwLAkgMCwgIDAsIE5VTEwsCQkJTlVMTCB9Cit9OworCisvKgorICogVmVyaWZ5IHRoYXQgdGhlIGRhdGEgaW4gZGV2IGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGlzIG9uIHRoZSBhY3R1YWwKKyAqIGJsb2NrIGRldmljZSAodXNpbmcgdGhlIGRldm5hbWUgZmllbGQgb25seSkuICBOb3JtYWxseSB0aGlzIHdpbGwgYmUKKyAqIGNhbGxlZCB3aGVuIGZpbmRpbmcgaXRlbXMgaW4gdGhlIGNhY2hlLCBidXQgZm9yIGxvbmcgcnVubmluZyBwcm9jZXNzZXMKKyAqIGlzIGFsc28gZGVzaXJhYmxlIHRvIHJldmFsaWRhdGUgYW4gaXRlbSBiZWZvcmUgdXNlLgorICoKKyAqIElmIHdlIGFyZSB1bmFibGUgdG8gcmV2YWxpZGF0ZSB0aGUgZGF0YSwgd2UgcmV0dXJuIHRoZSBvbGQgZGF0YSBhbmQKKyAqIGRvIG5vdCBzZXQgdGhlIEJMS0lEX0JJRF9GTF9WRVJJRklFRCBmbGFnIG9uIGl0LgorICovCitibGtpZF9kZXYgYmxraWRfdmVyaWZ5KGJsa2lkX2NhY2hlIGNhY2hlLCBibGtpZF9kZXYgZGV2KQoreworCXN0cnVjdCBibGtpZF9tYWdpYyAqaWQ7CisJc3RydWN0IGJsa2lkX3Byb2JlIHByb2JlOworCWJsa2lkX3RhZ19pdGVyYXRlIGl0ZXI7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWNvbnN0IGNoYXIgKnR5cGUsICp2YWx1ZTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl0aW1lX3Qgbm93OworCWRvdWJsZSBkaWZmOworCWludCBpZHg7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlub3cgPSB0aW1lKDApOworCWRpZmYgPSBkaWZmdGltZShub3csIGRldi0+YmlkX3RpbWUpOworCisJaWYgKHN0YXQoZGV2LT5iaWRfbmFtZSwgJnN0KSA8IDApIHsKKwkJREJHKERFQlVHX1BST0JFLAorCQkgICAgcHJpbnRmKCJibGtpZF92ZXJpZnk6IGVycm9yICVzICglZCkgd2hpbGUgIgorCQkJICAgInRyeWluZyB0byBzdGF0ICVzXG4iLCBzdHJlcnJvcihlcnJubyksIGVycm5vLAorCQkJICAgZGV2LT5iaWRfbmFtZSkpOworCW9wZW5fZXJyOgorCQlpZiAoKGVycm5vID09IEVQRVJNKSB8fCAoZXJybm8gPT0gRUFDQ0VTKSB8fCAoZXJybm8gPT0gRU5PRU5UKSkgeworCQkJLyogV2UgZG9uJ3QgaGF2ZSByZWFkIHBlcm1pc3Npb24sIGp1c3QgcmV0dXJuIGNhY2hlIGRhdGEuICovCisJCQlEQkcoREVCVUdfUFJPQkUsIHByaW50ZigicmV0dXJuaW5nIHVudmVyaWZpZWQgZGF0YSBmb3IgJXNcbiIsCisJCQkJCQlkZXYtPmJpZF9uYW1lKSk7CisJCQlyZXR1cm4gZGV2OworCQl9CisJCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICgobm93ID49IGRldi0+YmlkX3RpbWUpICYmCisJICAgIChzdC5zdF9tdGltZSA8PSBkZXYtPmJpZF90aW1lKSAmJgorCSAgICAoKGRpZmYgPCBCTEtJRF9QUk9CRV9NSU4pIHx8CisJICAgICAoZGV2LT5iaWRfZmxhZ3MgJiBCTEtJRF9CSURfRkxfVkVSSUZJRUQgJiYKKwkgICAgICBkaWZmIDwgQkxLSURfUFJPQkVfSU5URVJWQUwpKSkKKwkJcmV0dXJuIGRldjsKKworCURCRyhERUJVR19QUk9CRSwKKwkgICAgcHJpbnRmKCJuZWVkIHRvIHJldmFsaWRhdGUgJXMgKGNhY2hlIHRpbWUgJWx1LCBzdGF0IHRpbWUgJWx1LFxuXHQiCisJCSAgICJ0aW1lIHNpbmNlIGxhc3QgY2hlY2sgJWx1KVxuIiwKKwkJICAgZGV2LT5iaWRfbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGV2LT5iaWRfdGltZSwKKwkJICAgKHVuc2lnbmVkIGxvbmcpc3Quc3RfbXRpbWUsICh1bnNpZ25lZCBsb25nKWRpZmYpKTsKKworCWlmICgocHJvYmUuZmQgPSBvcGVuKGRldi0+YmlkX25hbWUsIE9fUkRPTkxZKSkgPCAwKSB7CisJCURCRyhERUJVR19QUk9CRSwgcHJpbnRmKCJibGtpZF92ZXJpZnk6IGVycm9yICVzICglZCkgd2hpbGUgIgorCQkJCQkib3BlbmluZyAlc1xuIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubywKKwkJCQkJZGV2LT5iaWRfbmFtZSkpOworCQlnb3RvIG9wZW5fZXJyOworCX0KKworCXByb2JlLmNhY2hlID0gY2FjaGU7CisJcHJvYmUuZGV2ID0gZGV2OworCXByb2JlLnNiYnVmID0gMDsKKwlwcm9iZS5idWYgPSAwOworCXByb2JlLmJ1Zl9tYXggPSAwOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhlIHR5cGUgYXJyYXkuICBJZiB3ZSBhbHJlYWR5IGtub3cgdGhlIHR5cGUsCisJICogdGhlbiB0cnkgdGhhdCBmaXJzdC4gIElmIGl0IGRvZXNuJ3Qgd29yaywgdGhlbiBibG93IGF3YXkKKwkgKiB0aGUgdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHRyeSBhZ2Fpbi4KKwkgKgorCSAqLwordHJ5X2FnYWluOgorCXR5cGUgPSAwOworCWlmICghZGV2LT5iaWRfdHlwZSB8fCAhc3RyY21wKGRldi0+YmlkX3R5cGUsICJtZHJhaWQiKSkgeworCQl1dWlkX3QJdXVpZDsKKworCQlpZiAoY2hlY2tfbWRyYWlkKHByb2JlLmZkLCB1dWlkKSA9PSAwKSB7CisJCQlzZXRfdXVpZChkZXYsIHV1aWQsIDApOworCQkJdHlwZSA9ICJtZHJhaWQiOworCQkJZ290byBmb3VuZF90eXBlOworCQl9CisJfQorCWZvciAoaWQgPSB0eXBlX2FycmF5OyBpZC0+YmltX3R5cGU7IGlkKyspIHsKKwkJaWYgKGRldi0+YmlkX3R5cGUgJiYKKwkJICAgIHN0cmNtcChpZC0+YmltX3R5cGUsIGRldi0+YmlkX3R5cGUpKQorCQkJY29udGludWU7CisKKwkJaWR4ID0gaWQtPmJpbV9rYm9mZiArIChpZC0+YmltX3Nib2ZmID4+IDEwKTsKKwkJYnVmID0gZ2V0X2J1ZmZlcigmcHJvYmUsIGlkeCA8PCAxMCwgMTAyNCk7CisJCWlmICghYnVmKQorCQkJY29udGludWU7CisKKwkJaWYgKG1lbWNtcChpZC0+YmltX21hZ2ljLCBidWYgKyAoaWQtPmJpbV9zYm9mZiAmIDB4M2ZmKSwKKwkJCSAgIGlkLT5iaW1fbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPmJpbV9wcm9iZSA9PSBOVUxMKSB8fAorCQkgICAgKGlkLT5iaW1fcHJvYmUoJnByb2JlLCBpZCwgYnVmKSA9PSAwKSkgeworCQkJdHlwZSA9IGlkLT5iaW1fdHlwZTsKKwkJCWdvdG8gZm91bmRfdHlwZTsKKwkJfQorCX0KKworCWlmICghaWQtPmJpbV90eXBlICYmIGRldi0+YmlkX3R5cGUpIHsKKwkJLyoKKwkJICogWmFwIHRoZSBkZXZpY2UgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbiBhbmQgdHJ5IGFnYWluCisJCSAqLworCQlEQkcoREVCVUdfUFJPQkUsCisJCSAgICBwcmludGYoInByZXZpb3VzIGZzIHR5cGUgJXMgbm90IHZhbGlkLCAiCisJCQkgICAidHJ5aW5nIGZ1bGwgcHJvYmVcbiIsIGRldi0+YmlkX3R5cGUpKTsKKwkJaXRlciA9IGJsa2lkX3RhZ19pdGVyYXRlX2JlZ2luKGRldik7CisJCXdoaWxlIChibGtpZF90YWdfbmV4dChpdGVyLCAmdHlwZSwgJnZhbHVlKSA9PSAwKQorCQkJYmxraWRfc2V0X3RhZyhkZXYsIHR5cGUsIDAsIDApOworCQlibGtpZF90YWdfaXRlcmF0ZV9lbmQoaXRlcik7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghZGV2LT5iaWRfdHlwZSkgeworCQlibGtpZF9mcmVlX2RldihkZXYpOworCQlkZXYgPSAwOworCQlnb3RvIGZvdW5kX3R5cGU7CisJfQorCitmb3VuZF90eXBlOgorCWlmIChkZXYgJiYgdHlwZSkgeworCQlkZXYtPmJpZF9kZXZubyA9IHN0LnN0X3JkZXY7CisJCWRldi0+YmlkX3RpbWUgPSB0aW1lKDApOworCQlkZXYtPmJpZF9mbGFncyB8PSBCTEtJRF9CSURfRkxfVkVSSUZJRUQ7CisJCWNhY2hlLT5iaWNfZmxhZ3MgfD0gQkxLSURfQklDX0ZMX0NIQU5HRUQ7CisKKwkJYmxraWRfc2V0X3RhZyhkZXYsICJUWVBFIiwgdHlwZSwgMCk7CisKKwkJREJHKERFQlVHX1BST0JFLCBwcmludGYoIiVzOiBkZXZubyAweCUwNGxseCwgdHlwZSAlc1xuIiwKKwkJCSAgIGRldi0+YmlkX25hbWUsIChsb25nIGxvbmcpc3Quc3RfcmRldiwgdHlwZSkpOworCX0KKworCWZyZWUocHJvYmUuc2JidWYpOworCWZyZWUocHJvYmUuYnVmKTsKKwlpZiAocHJvYmUuZmQgPj0gMCkKKwkJY2xvc2UocHJvYmUuZmQpOworCisJcmV0dXJuIGRldjsKK30KKworaW50IGJsa2lkX2tub3duX2ZzdHlwZShjb25zdCBjaGFyICpmc3R5cGUpCit7CisJc3RydWN0IGJsa2lkX21hZ2ljICppZDsKKworCWZvciAoaWQgPSB0eXBlX2FycmF5OyBpZC0+YmltX3R5cGU7IGlkKyspIHsKKwkJaWYgKHN0cmNtcChmc3R5cGUsIGlkLT5iaW1fdHlwZSkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWJsa2lkX2RldiBkZXY7CisJYmxraWRfY2FjaGUgY2FjaGU7CisJaW50IHJldDsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iCisJCQkiUHJvYmUgYSBzaW5nbGUgZGV2aWNlIHRvIGRldGVybWluZSB0eXBlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCAiL2Rldi9udWxsIikpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCWRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIGFyZ3ZbMV0sIEJMS0lEX0RFVl9OT1JNQUwpOworCWlmICghZGV2KSB7CisJCXByaW50ZigiJXM6ICVzIGhhcyBhbiB1bnN1cHBvcnRlZCB0eXBlXG4iLCBhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJcHJpbnRmKCJUWVBFPSclcydcbiIsIGRldi0+YmlkX3R5cGUgPyBkZXYtPmJpZF90eXBlIDogIihudWxsKSIpOworCWlmIChkZXYtPmJpZF9sYWJlbCkKKwkJcHJpbnRmKCJMQUJFTD0nJXMnXG4iLCBkZXYtPmJpZF9sYWJlbCk7CisJaWYgKGRldi0+YmlkX3V1aWQpCisJCXByaW50ZigiVVVJRD0nJXMnXG4iLCBkZXYtPmJpZF91dWlkKTsKKworCWJsa2lkX2ZyZWVfZGV2KGRldik7CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC9wcm9iZS5oIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9wcm9iZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZWYzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Byb2JlLmgKQEAgLTAsMCArMSw4NTIgQEAKKy8qCisgKiBwcm9iZS5oIC0gY29uc3RhbnRzIGFuZCBvbi1kaXNrIHN0cnVjdHVyZXMgZm9yIGV4dHJhY3RpbmcgZGV2aWNlIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgQW5kcmllcyBCcm91d2VyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworICogQ29weXJpZ2h0IChDKSAyMDAxIGJ5IEFuZHJlYXMgRGlsZ2VyCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9CTEtJRF9QUk9CRV9ICisjZGVmaW5lIF9CTEtJRF9QUk9CRV9ICisKKyNpbmNsdWRlIDxibGtpZC9ibGtpZF90eXBlcy5oPgorCitzdHJ1Y3QgYmxraWRfbWFnaWM7CisKKyNkZWZpbmUgU0JfQlVGRkVSX1NJWkUJCTB4MTEwMDAKKworc3RydWN0IGJsa2lkX3Byb2JlIHsKKwlpbnQJCQlmZDsKKwlibGtpZF9jYWNoZQkJY2FjaGU7CisJYmxraWRfZGV2CQlkZXY7CisJdW5zaWduZWQgY2hhcgkJKnNiYnVmOworCXNpemVfdAkJCXNiX3ZhbGlkOworCXVuc2lnbmVkIGNoYXIJCSpidWY7CisJc2l6ZV90CQkJYnVmX21heDsKK307CisKK3R5cGVkZWYgaW50ICgqYmxraWRfcHJvYmVfdCkoc3RydWN0IGJsa2lkX3Byb2JlICpwcm9iZSwKKwkJCSAgICAgc3RydWN0IGJsa2lkX21hZ2ljICppZCwgdW5zaWduZWQgY2hhciAqYnVmKTsKKworc3RydWN0IGJsa2lkX21hZ2ljIHsKKwljb25zdCBjaGFyCSpiaW1fdHlwZTsJLyogdHlwZSBuYW1lIGZvciB0aGlzIG1hZ2ljICovCisJbG9uZwkJYmltX2tib2ZmOwkvKiBraWxvYnl0ZSBvZmZzZXQgb2Ygc3VwZXJibG9jayAqLworCXVuc2lnbmVkCWJpbV9zYm9mZjsJLyogYnl0ZSBvZmZzZXQgd2l0aGluIHN1cGVyYmxvY2sgKi8KKwl1bnNpZ25lZAliaW1fbGVuOwkvKiBsZW5ndGggb2YgbWFnaWMgKi8KKwljb25zdCBjaGFyCSpiaW1fbWFnaWM7CS8qIG1hZ2ljIHN0cmluZyAqLworCWJsa2lkX3Byb2JlX3QJYmltX3Byb2JlOwkvKiBwcm9iZSBmdW5jdGlvbiAqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZXMgZm9yIGVhY2ggb2YgdGhlIGNvbnRlbnQgdHlwZXMgd2Ugd2FudCB0byBleHRyYWN0IGluZm9ybWF0aW9uCisgKiBmcm9tLiAgV2UgZG8gbm90IG5lY2Vzc2FyaWx5IG5lZWQgdGhlIG1hZ2ljIGZpZWxkIGhlcmUsIGJlY2F1c2Ugd2UgaGF2ZQorICogYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBjb250ZW50IHR5cGUgYmVmb3JlIHdlIGdldCB0aGlzIGZhci4gIEl0IG1heSBzdGlsbAorICogYmUgdXNlZnVsIGlmIHRoZXJlIGFyZSBwcm9iZSBmdW5jdGlvbnMgd2hpY2ggaGFuZGxlIG11bHRpcGxlIGNvbnRlbnQgdHlwZXMuCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMgkJc19pbm9kZXNfY291bnQ7CisJX191MzIJCXNfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX3JfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX2ZyZWVfYmxvY2tzX2NvdW50OworCV9fdTMyCQlzX2ZyZWVfaW5vZGVzX2NvdW50OworCV9fdTMyCQlzX2ZpcnN0X2RhdGFfYmxvY2s7CisJX191MzIJCXNfbG9nX2Jsb2NrX3NpemU7CisJX191MzIJCXNfZHVtbXkzWzddOworCXVuc2lnbmVkIGNoYXIJc19tYWdpY1syXTsKKwlfX3UxNgkJc19zdGF0ZTsKKwlfX3UzMgkJc19kdW1teTVbOF07CisJX191MzIJCXNfZmVhdHVyZV9jb21wYXQ7CisJX191MzIJCXNfZmVhdHVyZV9pbmNvbXBhdDsKKwlfX3UzMgkJc19mZWF0dXJlX3JvX2NvbXBhdDsKKwl1bnNpZ25lZCBjaGFyICAgc191dWlkWzE2XTsKKwljaGFyCSAgIHNfdm9sdW1lX25hbWVbMTZdOworCWNoYXIJc19sYXN0X21vdW50ZWRbNjRdOworCV9fdTMyCXNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsKKwlfX3U4CXNfcHJlYWxsb2NfYmxvY2tzOworCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOworCV9fdTE2CXNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlfX3U4CXNfam91cm5hbF91dWlkWzE2XTsKKwlfX3UzMglzX2pvdXJuYWxfaW51bTsKKwlfX3UzMglzX2pvdXJuYWxfZGV2OworCV9fdTMyCXNfbGFzdF9vcnBoYW47CisJX191MzIJc19oYXNoX3NlZWRbNF07CisJX191OAlzX2RlZl9oYXNoX3ZlcnNpb247CisJX191OAlzX2pubF9iYWNrdXBfdHlwZTsKKwlfX3UxNglzX3Jlc2VydmVkX3dvcmRfcGFkOworCV9fdTMyCXNfZGVmYXVsdF9tb3VudF9vcHRzOworCV9fdTMyCXNfZmlyc3RfbWV0YV9iZzsKKwlfX3UzMglzX21rZnNfdGltZTsKKwlfX3UzMglzX2pubF9ibG9ja3NbMTddOworCV9fdTMyCXNfYmxvY2tzX2NvdW50X2hpOworCV9fdTMyCXNfcl9ibG9ja3NfY291bnRfaGk7CisJX191MzIJc19mcmVlX2Jsb2Nrc19oaTsKKwlfX3UxNglzX21pbl9leHRyYV9pc2l6ZTsKKwlfX3UxNglzX3dhbnRfZXh0cmFfaXNpemU7CisJX191MzIJc19mbGFnczsKKwlfX3UxNiAgIHNfcmFpZF9zdHJpZGU7CisJX191MTYgICBzX21tcF9pbnRlcnZhbDsKKwlfX3U2NCAgIHNfbW1wX2Jsb2NrOworCV9fdTMyICAgc19yYWlkX3N0cmlwZV93aWR0aDsKKwlfX3UzMiAgIHNfcmVzZXJ2ZWRbMTYzXTsKK307CisKKy8qIGZvciBzX2ZsYWdzICovCisjZGVmaW5lIEVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTCQkweDAwMDQKKworLyogZm9yIHNfZmVhdHVyZV9jb21wYXQgKi8KKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTAkJMHgwMDA0CisKKy8qIGZvciBzX2ZlYXR1cmVfcm9fY29tcGF0ICovCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUJMHgwMDAyCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSCTB4MDAwNAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRQkweDAwMDgKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTQkJMHgwMDEwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LCTB4MDAyMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFCTB4MDA0MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBCQkweDAxMDAKKworLyogZm9yIHNfZmVhdHVyZV9pbmNvbXBhdCAqLworI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUJCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUgkJMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVgkweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcJCTB4MDAxMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUwkJMHgwMDQwIC8qIGV4dGVudHMgc3VwcG9ydCAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQJCTB4MDA4MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QCQkweDAxMDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcJCTB4MDIwMAorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfVU5TVVBQT1JURUQJfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8IFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgXAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8IFwKKwkJCQkJIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSfCBcCisJCQkJCSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1VOU1VQUE9SVEVECX5FWFQzX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVECX5FWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAKKworCitzdHJ1Y3QgeGZzX3N1cGVyX2Jsb2NrIHsKKwl1bnNpZ25lZCBjaGFyCXhzX21hZ2ljWzRdOworCV9fdTMyCQl4c19ibG9ja3NpemU7CisJX191NjQJCXhzX2RibG9ja3M7CisJX191NjQJCXhzX3JibG9ja3M7CisJX191MzIJCXhzX2R1bW15MVsyXTsKKwl1bnNpZ25lZCBjaGFyCXhzX3V1aWRbMTZdOworCV9fdTMyCQl4c19kdW1teTJbMTVdOworCWNoYXIJCXhzX2ZuYW1lWzEyXTsKKwlfX3UzMgkJeHNfZHVtbXkzWzJdOworCV9fdTY0CQl4c19pY291bnQ7CisJX191NjQJCXhzX2lmcmVlOworCV9fdTY0CQl4c19mZGJsb2NrczsKK307CisKK3N0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayB7CisJX191MzIJCXJzX2Jsb2Nrc19jb3VudDsKKwlfX3UzMgkJcnNfZnJlZV9ibG9ja3M7CisJX191MzIJCXJzX3Jvb3RfYmxvY2s7CisJX191MzIJCXJzX2pvdXJuYWxfYmxvY2s7CisJX191MzIJCXJzX2pvdXJuYWxfZGV2OworCV9fdTMyCQlyc19vcmlnX2pvdXJuYWxfc2l6ZTsKKwlfX3UzMgkJcnNfZHVtbXkyWzVdOworCV9fdTE2CQlyc19ibG9ja3NpemU7CisJX191MTYJCXJzX2R1bW15M1szXTsKKwl1bnNpZ25lZCBjaGFyCXJzX21hZ2ljWzEyXTsKKwlfX3UzMgkJcnNfZHVtbXk0WzVdOworCXVuc2lnbmVkIGNoYXIJcnNfdXVpZFsxNl07CisJY2hhcgkJcnNfbGFiZWxbMTZdOworfTsKKworc3RydWN0IHJlaXNlcjRfc3VwZXJfYmxvY2sgeworCXVuc2lnbmVkIGNoYXIJcnM0X21hZ2ljWzE2XTsKKwlfX3UxNgkJcnM0X2R1bW15WzJdOworCXVuc2lnbmVkIGNoYXIJcnM0X3V1aWRbMTZdOworCXVuc2lnbmVkIGNoYXIJcnM0X2xhYmVsWzE2XTsKKwlfX3U2NAkJcnM0X2R1bW15MjsKK307CisKK3N0cnVjdCBqZnNfc3VwZXJfYmxvY2sgeworCXVuc2lnbmVkIGNoYXIJanNfbWFnaWNbNF07CisJX191MzIJCWpzX3ZlcnNpb247CisJX191NjQJCWpzX3NpemU7CisJX191MzIJCWpzX2JzaXplOwkvKiA0OiBhZ2dyZWdhdGUgYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCV9fdTE2CQlqc19sMmJzaXplOwkvKiAyOiBsb2cyIG9mIHNfYnNpemUgKi8KKwlfX3UxNgkJanNfbDJiZmFjdG9yOwkvKiAyOiBsb2cyKHNfYnNpemUvaGFyZHdhcmUgYmxvY2sgc2l6ZSkgKi8KKwlfX3UzMgkJanNfcGJzaXplOwkvKiA0OiBoYXJkd2FyZS9MVk0gYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCV9fdTE2CQlqc19sMnBic2l6ZTsJLyogMjogbG9nMiBvZiBzX3Bic2l6ZSAqLworCV9fdTE2IAkJanNfcGFkOwkJLyogMjogcGFkZGluZyBuZWNlc3NhcnkgZm9yIGFsaWdubWVudCAqLworCV9fdTMyCQlqc19kdW1teTJbMjZdOworCXVuc2lnbmVkIGNoYXIJanNfdXVpZFsxNl07CisJdW5zaWduZWQgY2hhcglqc19sYWJlbFsxNl07CisJdW5zaWduZWQgY2hhcglqc19sb2d1dWlkWzE2XTsKK307CisKK3N0cnVjdCByb21mc19zdXBlcl9ibG9jayB7CisJdW5zaWduZWQgY2hhcglyb3NfbWFnaWNbOF07CisJX191MzIJCXJvc19kdW1teTFbMl07CisJdW5zaWduZWQgY2hhcglyb3Nfdm9sdW1lWzE2XTsKK307CisKK3N0cnVjdCBjcmFtZnNfc3VwZXJfYmxvY2sgeworCV9fdTgJCW1hZ2ljWzRdOworCV9fdTMyCQlzaXplOworCV9fdTMyCQlmbGFnczsKKwlfX3UzMgkJZnV0dXJlOworCV9fdTgJCXNpZ25hdHVyZVsxNl07CisJc3RydWN0IGNyYW1mc19pbmZvIHsKKwkJX191MzIJCWNyYzsKKwkJX191MzIJCWVkaXRpb247CisJCV9fdTMyCQlibG9ja3M7CisJCV9fdTMyCQlmaWxlczsKKwl9IGluZm87CisJX191OAkJbmFtZVsxNl07Cit9OworCitzdHJ1Y3Qgc3dhcF9pZF9ibG9jayB7CisvKgl1bnNpZ25lZCBjaGFyCXN3c19ib290WzEwMjRdOyAqLworCV9fdTMyCQlzd3NfdmVyc2lvbjsKKwlfX3UzMgkJc3dzX2xhc3RwYWdlOworCV9fdTMyCQlzd3NfbnJiYWQ7CisJdW5zaWduZWQgY2hhcglzd3NfdXVpZFsxNl07CisJY2hhcgkJc3dzX3ZvbHVtZVsxNl07CisJdW5zaWduZWQgY2hhcglzd3NfcGFkWzExN107CisJX191MzIJCXN3c19iYWRwZzsKK307CisKKy8qIFl1Y2t5IG1pc2FsaWduZWQgdmFsdWVzICovCitzdHJ1Y3QgdmZhdF9zdXBlcl9ibG9jayB7CisvKiAwMCovCXVuc2lnbmVkIGNoYXIJdnNfaWdub3JlZFszXTsKKy8qIDAzKi8JdW5zaWduZWQgY2hhcgl2c19zeXNpZFs4XTsKKy8qIDBiKi8JdW5zaWduZWQgY2hhcgl2c19zZWN0b3Jfc2l6ZVsyXTsKKy8qIDBkKi8JX191OAkJdnNfY2x1c3Rlcl9zaXplOworLyogMGUqLwlfX3UxNgkJdnNfcmVzZXJ2ZWQ7CisvKiAxMCovCV9fdTgJCXZzX2ZhdHM7CisvKiAxMSovCXVuc2lnbmVkIGNoYXIJdnNfZGlyX2VudHJpZXNbMl07CisvKiAxMyovCXVuc2lnbmVkIGNoYXIJdnNfc2VjdG9yc1syXTsKKy8qIDE1Ki8JdW5zaWduZWQgY2hhcgl2c19tZWRpYTsKKy8qIDE2Ki8JX191MTYJCXZzX2ZhdF9sZW5ndGg7CisvKiAxOCovCV9fdTE2CQl2c19zZWNzX3RyYWNrOworLyogMWEqLwlfX3UxNgkJdnNfaGVhZHM7CisvKiAxYyovCV9fdTMyCQl2c19oaWRkZW47CisvKiAyMCovCV9fdTMyCQl2c190b3RhbF9zZWN0OworLyogMjQqLwlfX3UzMgkJdnNfZmF0MzJfbGVuZ3RoOworLyogMjgqLwlfX3UxNgkJdnNfZmxhZ3M7CisvKiAyYSovCV9fdTgJCXZzX3ZlcnNpb25bMl07CisvKiAyYyovCV9fdTMyCQl2c19yb290X2NsdXN0ZXI7CisvKiAzMCovCV9fdTE2CQl2c19pbnNmb19zZWN0b3I7CisvKiAzMiovCV9fdTE2CQl2c19iYWNrdXBfYm9vdDsKKy8qIDM0Ki8JX191MTYJCXZzX3Jlc2VydmVkMls2XTsKKy8qIDQwKi8JdW5zaWduZWQgY2hhcgl2c191bmtub3duWzNdOworLyogNDMqLwl1bnNpZ25lZCBjaGFyCXZzX3Nlcm5vWzRdOworLyogNDcqLwl1bnNpZ25lZCBjaGFyCXZzX2xhYmVsWzExXTsKKy8qIDUyKi8JdW5zaWduZWQgY2hhciAgIHZzX21hZ2ljWzhdOworLyogNWEqLwl1bnNpZ25lZCBjaGFyCXZzX2R1bW15MlsxNjRdOworLyoxZmUqLwl1bnNpZ25lZCBjaGFyCXZzX3BtYWdpY1syXTsKK307CisKKy8qIFl1Y2t5IG1pc2FsaWduZWQgdmFsdWVzICovCitzdHJ1Y3QgbXNkb3Nfc3VwZXJfYmxvY2sgeworLyogMDAqLwl1bnNpZ25lZCBjaGFyCW1zX2lnbm9yZWRbM107CisvKiAwMyovCXVuc2lnbmVkIGNoYXIJbXNfc3lzaWRbOF07CisvKiAwYiovCXVuc2lnbmVkIGNoYXIJbXNfc2VjdG9yX3NpemVbMl07CisvKiAwZCovCV9fdTgJCW1zX2NsdXN0ZXJfc2l6ZTsKKy8qIDBlKi8JX191MTYJCW1zX3Jlc2VydmVkOworLyogMTAqLwlfX3U4CQltc19mYXRzOworLyogMTEqLwl1bnNpZ25lZCBjaGFyCW1zX2Rpcl9lbnRyaWVzWzJdOworLyogMTMqLwl1bnNpZ25lZCBjaGFyCW1zX3NlY3RvcnNbMl07CisvKiAxNSovCXVuc2lnbmVkIGNoYXIJbXNfbWVkaWE7CisvKiAxNiovCV9fdTE2CQltc19mYXRfbGVuZ3RoOworLyogMTgqLwlfX3UxNgkJbXNfc2Vjc190cmFjazsKKy8qIDFhKi8JX191MTYJCW1zX2hlYWRzOworLyogMWMqLwlfX3UzMgkJbXNfaGlkZGVuOworLyogMjAqLwlfX3UzMgkJbXNfdG90YWxfc2VjdDsKKy8qIDI0Ki8JdW5zaWduZWQgY2hhcgltc191bmtub3duWzNdOworLyogMjcqLwl1bnNpZ25lZCBjaGFyCW1zX3Nlcm5vWzRdOworLyogMmIqLwl1bnNpZ25lZCBjaGFyCW1zX2xhYmVsWzExXTsKKy8qIDM2Ki8JdW5zaWduZWQgY2hhciAgIG1zX21hZ2ljWzhdOworLyogM2QqLwl1bnNpZ25lZCBjaGFyCW1zX2R1bW15MlsxOTJdOworLyoxZmUqLwl1bnNpZ25lZCBjaGFyCW1zX3BtYWdpY1syXTsKK307CisKK3N0cnVjdCB2ZmF0X2Rpcl9lbnRyeSB7CisJX191OAluYW1lWzExXTsKKwlfX3U4CWF0dHI7CisJX191MTYJdGltZV9jcmVhdDsKKwlfX3UxNglkYXRlX2NyZWF0OworCV9fdTE2CXRpbWVfYWNjOworCV9fdTE2CWRhdGVfYWNjOworCV9fdTE2CWNsdXN0ZXJfaGlnaDsKKwlfX3UxNgl0aW1lX3dyaXRlOworCV9fdTE2CWRhdGVfd3JpdGU7CisJX191MTYJY2x1c3Rlcl9sb3c7CisJX191MzIJc2l6ZTsKK307CisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGNsdXN0ZXJzICovCisjZGVmaW5lIEZBVDEyX01BWCAweEZGNAorI2RlZmluZSBGQVQxNl9NQVggMHhGRkY0CisjZGVmaW5lIEZBVDMyX01BWCAweDBGRkZGRkY2CisKK3N0cnVjdCBtaW5peF9zdXBlcl9ibG9jayB7CisJX191MTYJCW1zX25pbm9kZXM7CisJX191MTYJCW1zX256b25lczsKKwlfX3UxNgkJbXNfaW1hcF9ibG9ja3M7CisJX191MTYJCW1zX3ptYXBfYmxvY2tzOworCV9fdTE2CQltc19maXJzdGRhdGF6b25lOworCV9fdTE2CQltc19sb2dfem9uZV9zaXplOworCV9fdTMyCQltc19tYXhfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyCW1zX21hZ2ljWzJdOworCV9fdTE2CQltc19zdGF0ZTsKKwlfX3UzMgkJbXNfem9uZXM7Cit9OworCitzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7CisJX191MzIgbWRfbWFnaWM7CisJX191MzIgbWFqb3JfdmVyc2lvbjsKKwlfX3UzMiBtaW5vcl92ZXJzaW9uOworCV9fdTMyIHBhdGNoX3ZlcnNpb247CisJX191MzIgZ3ZhbGlkX3dvcmRzOworCV9fdTMyIHNldF91dWlkMDsKKwlfX3UzMiBjdGltZTsKKwlfX3UzMiBsZXZlbDsKKwlfX3UzMiBzaXplOworCV9fdTMyIG5yX2Rpc2tzOworCV9fdTMyIHJhaWRfZGlza3M7CisJX191MzIgbWRfbWlub3I7CisJX191MzIgbm90X3BlcnNpc3RlbnQ7CisJX191MzIgc2V0X3V1aWQxOworCV9fdTMyIHNldF91dWlkMjsKKwlfX3UzMiBzZXRfdXVpZDM7Cit9OworCitzdHJ1Y3QgaGZzX3N1cGVyX2Jsb2NrIHsKKwljaGFyCWhfbWFnaWNbMl07CisJY2hhcgloX2R1bW15WzE4XTsKKwlfX3UzMgloX2Jsa3NpemU7Cit9OworCitzdHJ1Y3Qgb2Nmc192b2x1bWVfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyCW1pbm9yX3ZlcnNpb25bNF07CisJdW5zaWduZWQgY2hhcgltYWpvcl92ZXJzaW9uWzRdOworCXVuc2lnbmVkIGNoYXIJc2lnbmF0dXJlWzEyOF07CisJY2hhcgkJbW91bnRbMTI4XTsKKwl1bnNpZ25lZCBjaGFyICAgbW91bnRfbGVuWzJdOworfTsKKworc3RydWN0IG9jZnNfdm9sdW1lX2xhYmVsIHsKKwl1bnNpZ25lZCBjaGFyCWRpc2tfbG9ja1s0OF07CisJY2hhcgkJbGFiZWxbNjRdOworCXVuc2lnbmVkIGNoYXIJbGFiZWxfbGVuWzJdOworCXVuc2lnbmVkIGNoYXIgIHZvbF9pZFsxNl07CisJdW5zaWduZWQgY2hhciAgdm9sX2lkX2xlblsyXTsKK307CisKKyNkZWZpbmUgb2Nmc21ham9yKG8pICgoX191MzIpby5tYWpvcl92ZXJzaW9uWzBdIFwKKyAgICAgICAgICAgICAgICAgICArICgoKF9fdTMyKSBvLm1ham9yX3ZlcnNpb25bMV0pIDw8IDgpIFwKKyAgICAgICAgICAgICAgICAgICArICgoKF9fdTMyKSBvLm1ham9yX3ZlcnNpb25bMl0pIDw8IDE2KSBcCisgICAgICAgICAgICAgICAgICAgKyAoKChfX3UzMikgby5tYWpvcl92ZXJzaW9uWzNdKSA8PCAyNCkpCisjZGVmaW5lIG9jZnNsYWJlbGxlbihvKQkoKF9fdTMyKW8ubGFiZWxfbGVuWzBdICsgKCgoX191MzIpIG8ubGFiZWxfbGVuWzFdKSA8PCA4KSkKKyNkZWZpbmUgb2Nmc21vdW50bGVuKG8pCSgoX191MzIpby5tb3VudF9sZW5bMF0gKyAoKChfX3UzMikgby5tb3VudF9sZW5bMV0pPDw4KSkKKworI2RlZmluZSBPQ0ZTX01BR0lDICJPcmFjbGVDRlMiCisKK3N0cnVjdCBvY2ZzMl9zdXBlcl9ibG9jayB7CisJdW5zaWduZWQgY2hhciAgc2lnbmF0dXJlWzhdOworCXVuc2lnbmVkIGNoYXIgIHNfZHVtbXkxWzE4NF07CisJdW5zaWduZWQgY2hhciAgc19kdW1teTJbODBdOworCWNoYXIJICAgICAgIHNfbGFiZWxbNjRdOworCXVuc2lnbmVkIGNoYXIgIHNfdXVpZFsxNl07Cit9OworCisjZGVmaW5lIE9DRlMyX01JTl9CTE9DS1NJWkUgICAgICAgICAgICAgNTEyCisjZGVmaW5lIE9DRlMyX01BWF9CTE9DS1NJWkUgICAgICAgICAgICAgNDA5NgorCisjZGVmaW5lIE9DRlMyX1NVUEVSX0JMT0NLX0JMS05PICAgICAgICAgMgorCisjZGVmaW5lIE9DRlMyX1NVUEVSX0JMT0NLX1NJR05BVFVSRSAgICAgIk9DRlNWMiIKKworc3RydWN0IG9yYWNsZV9hc21fZGlza19sYWJlbCB7CisJY2hhciBkdW1teVszMl07CisJY2hhciBkbF90YWdbOF07CisJY2hhciBkbF9pZFsyNF07Cit9OworCisjZGVmaW5lIE9SQUNMRV9BU01fRElTS19MQUJFTF9NQVJLRUQgICAgIk9SQ0xESVNLIgorI2RlZmluZSBPUkFDTEVfQVNNX0RJU0tfTEFCRUxfT0ZGU0VUICAgIDMyCisKK3N0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgeworCXVuc2lnbmVkIGNoYXIJdmRfdHlwZTsKKwl1bnNpZ25lZCBjaGFyCXZkX2lkWzVdOworCXVuc2lnbmVkIGNoYXIJdmRfdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJc3lzdGVtX2lkWzMyXTsKKwl1bnNpZ25lZCBjaGFyCXZvbHVtZV9pZFszMl07CisJdW5zaWduZWQgY2hhcgl1bnVzZWRbOF07CisJdW5zaWduZWQgY2hhcglzcGFjZV9zaXplWzhdOworCXVuc2lnbmVkIGNoYXIJZXNjYXBlX3NlcXVlbmNlc1s4XTsKK307CisKKy8qIENvbW1vbiBnZnMvZ2ZzMiBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGU19NQUdJQyAgICAgICAgICAgICAgIDB4MDExNjE5NzAKKyNkZWZpbmUgR0ZTX0RFRkFVTFRfQlNJWkUgICAgICAgNDA5NgorI2RlZmluZSBHRlNfU1VQRVJCTE9DS19PRkZTRVQJKDB4MTAgKiBHRlNfREVGQVVMVF9CU0laRSkKKyNkZWZpbmUgR0ZTX01FVEFUWVBFX1NCICAgICAgICAgMQorI2RlZmluZSBHRlNfRk9STUFUX1NCICAgICAgICAgICAxMDAKKyNkZWZpbmUgR0ZTX0xPQ0tOQU1FX0xFTiAgICAgICAgNjQKKworLyogZ2ZzMSBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGU19GT1JNQVRfRlMgICAgICAgICAgIDEzMDkKKyNkZWZpbmUgR0ZTX0ZPUk1BVF9NVUxUSSAgICAgICAgMTQwMQorLyogZ2ZzMiBjb25zdGFudHM6ICovCisjZGVmaW5lIEdGUzJfRk9STUFUX0ZTICAgICAgICAgIDE4MDEKKyNkZWZpbmUgR0ZTMl9GT1JNQVRfTVVMVEkgICAgICAgMTkwMAorCitzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciB7CisJX191MzIgbWhfbWFnaWM7CisJX191MzIgbWhfdHlwZTsKKwlfX3U2NCBfX3BhZDA7ICAgICAgICAgIC8qIFdhcyBnZW5lcmF0aW9uIG51bWJlciBpbiBnZnMxICovCisJX191MzIgbWhfZm9ybWF0OworCV9fdTMyIF9fcGFkMTsgICAgICAgICAgLyogV2FzIGluY2FybmF0aW9uIG51bWJlciBpbiBnZnMxICovCit9OworCitzdHJ1Y3QgZ2ZzMl9pbnVtIHsKKwlfX3U2NCBub19mb3JtYWxfaW5vOworCV9fdTY0IG5vX2FkZHI7Cit9OworCitzdHJ1Y3QgZ2ZzMl9zYiB7CisJc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgc2JfaGVhZGVyOworCisJX191MzIgc2JfZnNfZm9ybWF0OworCV9fdTMyIHNiX211bHRpaG9zdF9mb3JtYXQ7CisJX191MzIgIF9fcGFkMDsgIC8qIFdhcyBzdXBlcmJsb2NrIGZsYWdzIGluIGdmczEgKi8KKworCV9fdTMyIHNiX2JzaXplOworCV9fdTMyIHNiX2JzaXplX3NoaWZ0OworCV9fdTMyIF9fcGFkMTsgICAvKiBXYXMgam91cm5hbCBzZWdtZW50IHNpemUgaW4gZ2ZzMSAqLworCisJc3RydWN0IGdmczJfaW51bSBzYl9tYXN0ZXJfZGlyOyAvKiBXYXMgamluZGV4IGRpbm9kZSBpbiBnZnMxICovCisJc3RydWN0IGdmczJfaW51bSBfX3BhZDI7IC8qIFdhcyByaW5kZXggZGlub2RlIGluIGdmczEgKi8KKwlzdHJ1Y3QgZ2ZzMl9pbnVtIHNiX3Jvb3RfZGlyOworCisJY2hhciBzYl9sb2NrcHJvdG9bR0ZTX0xPQ0tOQU1FX0xFTl07CisJY2hhciBzYl9sb2NrdGFibGVbR0ZTX0xPQ0tOQU1FX0xFTl07CisJLyogSW4gZ2ZzMSwgcXVvdGEgYW5kIGxpY2Vuc2UgZGlub2RlcyBmb2xsb3dlZCAqLworfTsKKworc3RydWN0IG50ZnNfc3VwZXJfYmxvY2sgeworCV9fdTgJanVtcFszXTsKKwlfX3U4CW9lbV9pZFs4XTsKKwlfX3U4CWJpb3NfcGFyYW1ldGVyX2Jsb2NrWzI1XTsKKwlfX3UxNgl1bnVzZWRbMl07CisJX191NjQJbnVtYmVyX29mX3NlY3RvcnM7CisJX191NjQJbWZ0X2NsdXN0ZXJfbG9jYXRpb247CisJX191NjQJbWZ0X21pcnJvcl9jbHVzdGVyX2xvY2F0aW9uOworCV9fczgJY2x1c3Rlcl9wZXJfbWZ0X3JlY29yZDsKKwlfX3U4CXJlc2VydmVkMVszXTsKKwlfX3M4CWNsdXN0ZXJfcGVyX2luZGV4X3JlY29yZDsKKwlfX3U4CXJlc2VydmVkMlszXTsKKwlfX3U2NAl2b2x1bWVfc2VyaWFsOworCV9fdTE2CWNoZWNrc3VtOworfTsKKworc3RydWN0IG1hc3Rlcl9maWxlX3RhYmxlX3JlY29yZCB7CisJX191MzIJbWFnaWM7CisJX191MTYJdXNhX29mczsKKwlfX3UxNgl1c2FfY291bnQ7CisJX191NjQJbHNuOworCV9fdTE2CXNlcXVlbmNlX251bWJlcjsKKwlfX3UxNglsaW5rX2NvdW50OworCV9fdTE2CWF0dHJzX29mZnNldDsKKwlfX3UxNglmbGFnczsKKwlfX3UzMglieXRlc19pbl91c2U7CisJX191MzIJYnl0ZXNfYWxsb2NhdGVkOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBmaWxlX2F0dHJpYnV0ZSB7CisJX191MzIJdHlwZTsKKwlfX3UzMglsZW47CisJX191OAlub25fcmVzaWRlbnQ7CisJX191OAluYW1lX2xlbjsKKwlfX3UxNgluYW1lX29mZnNldDsKKwlfX3UxNglmbGFnczsKKwlfX3UxNglpbnN0YW5jZTsKKwlfX3UzMgl2YWx1ZV9sZW47CisJX191MTYJdmFsdWVfb2Zmc2V0OworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgTUZUX1JFQ09SRF9WT0xVTUUJCQkzCisjZGVmaW5lIE1GVF9SRUNPUkRfQVRUUl9WT0xVTUVfTkFNRQkJMHg2MAorI2RlZmluZSBNRlRfUkVDT1JEX0FUVFJfVk9MVU1FX0lORk8JCTB4NzAKKyNkZWZpbmUgTUZUX1JFQ09SRF9BVFRSX09CSkVDVF9JRAkJMHg0MAorI2RlZmluZSBNRlRfUkVDT1JEX0FUVFJfRU5ECQkJMHhmZmZmZmZmZnUKKworLyogSEZTIC8gSEZTKyAqLworc3RydWN0IGhmc19maW5kZXJfaW5mbyB7CisgICAgICAgIF9fdTMyICAgICAgICBib290X2ZvbGRlcjsKKyAgICAgICAgX191MzIgICAgICAgIHN0YXJ0X2FwcDsKKyAgICAgICAgX191MzIgICAgICAgIG9wZW5fZm9sZGVyOworICAgICAgICBfX3UzMiAgICAgICAgb3M5X2ZvbGRlcjsKKyAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkOworICAgICAgICBfX3UzMiAgICAgICAgb3N4X2ZvbGRlcjsKKyAgICAgICAgX191OCAgICAgICAgIGlkWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc19tZGIgeworICAgICAgICBfX3U4ICAgICAgICAgc2lnbmF0dXJlWzJdOworICAgICAgICBfX3UzMiAgICAgICAgY3JfZGF0ZTsKKyAgICAgICAgX191MzIgICAgICAgIGxzX01vZDsKKyAgICAgICAgX191MTYgICAgICAgIGF0cmI7CisgICAgICAgIF9fdTE2ICAgICAgICBubV9mbHM7CisgICAgICAgIF9fdTE2ICAgICAgICB2Ym1fc3Q7CisgICAgICAgIF9fdTE2ICAgICAgICBhbGxvY19wdHI7CisgICAgICAgIF9fdTE2ICAgICAgICBubV9hbF9ibGtzOworICAgICAgICBfX3UzMiAgICAgICAgYWxfYmxrX3NpemU7CisgICAgICAgIF9fdTMyICAgICAgICBjbHBfc2l6ZTsKKyAgICAgICAgX191MTYgICAgICAgIGFsX2JsX3N0OworICAgICAgICBfX3UzMiAgICAgICAgbnh0X2NuaWQ7CisgICAgICAgIF9fdTE2ICAgICAgICBmcmVlX2JrczsKKyAgICAgICAgX191OCAgICAgICAgIGxhYmVsX2xlbjsKKyAgICAgICAgX191OCAgICAgICAgIGxhYmVsWzI3XTsKKyAgICAgICAgX191MzIgICAgICAgIHZvbF9ia3VwOworICAgICAgICBfX3UxNiAgICAgICAgdm9sX3NlcV9udW07CisgICAgICAgIF9fdTMyICAgICAgICB3cl9jbnQ7CisgICAgICAgIF9fdTMyICAgICAgICB4dF9jbHVtcF9zaXplOworICAgICAgICBfX3UzMiAgICAgICAgY3RfY2x1bXBfc2l6ZTsKKyAgICAgICAgX191MTYgICAgICAgIG51bV9yb290X2RpcnM7CisgICAgICAgIF9fdTMyICAgICAgICBmaWxlX2NvdW50OworICAgICAgICBfX3UzMiAgICAgICAgZGlyX2NvdW50OworICAgICAgICBzdHJ1Y3QgaGZzX2ZpbmRlcl9pbmZvIGZpbmRlcl9pbmZvOworICAgICAgICBfX3U4ICAgICAgICAgZW1iZWRfc2lnWzJdOworICAgICAgICBfX3UxNiAgICAgICAgZW1iZWRfc3RhcnRibG9jazsKKyAgICAgICAgX191MTYgICAgICAgIGVtYmVkX2Jsb2NrY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNkZWZpbmUgSEZTX05PREVfTEVBRgkJCTB4ZmYKKyNkZWZpbmUgSEZTUExVU19QT1JfQ05JRAkJMQorCitzdHJ1Y3QgaGZzcGx1c19ibm9kZV9kZXNjcmlwdG9yIHsKKwlfX3UzMgkJbmV4dDsKKwlfX3UzMgkJcHJldjsKKwlfX3U4CQl0eXBlOworCV9fdTgJCWhlaWdodDsKKwlfX3UxNgkJbnVtX3JlY3M7CisJX191MTYJCXJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc3BsdXNfYmhlYWRlcl9yZWNvcmQgeworCV9fdTE2CQlkZXB0aDsKKwlfX3UzMgkJcm9vdDsKKwlfX3UzMgkJbGVhZl9jb3VudDsKKwlfX3UzMgkJbGVhZl9oZWFkOworCV9fdTMyCQlsZWFmX3RhaWw7CisJX191MTYJCW5vZGVfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoZnNwbHVzX2NhdGFsb2dfa2V5IHsKKwlfX3UxNglrZXlfbGVuOworCV9fdTMyCXBhcmVudF9pZDsKKwlfX3UxNgl1bmljb2RlX2xlbjsKKwlfX3U4CQl1bmljb2RlWzI1NSAqIDJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKKwlfX3UzMgkJc3RhcnRfYmxvY2s7CisJX191MzIJCWJsb2NrX2NvdW50OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBIRlNQTFVTX0VYVEVOVF9DT1VOVAkJOAorc3RydWN0IGhmc3BsdXNfZm9yayB7CisJX191NjQJCXRvdGFsX3NpemU7CisJX191MzIJCWNsdW1wX3NpemU7CisJX191MzIJCXRvdGFsX2Jsb2NrczsKKwlzdHJ1Y3QgaGZzcGx1c19leHRlbnQgZXh0ZW50c1tIRlNQTFVTX0VYVEVOVF9DT1VOVF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGZzcGx1c192b2xfaGVhZGVyIHsKKwlfX3U4CQlzaWduYXR1cmVbMl07CisJX191MTYJCXZlcnNpb247CisJX191MzIJCWF0dHJpYnV0ZXM7CisJX191MzIJCWxhc3RfbW91bnRfdmVyczsKKwlfX3UzMgkJcmVzZXJ2ZWQ7CisJX191MzIJCWNyZWF0ZV9kYXRlOworCV9fdTMyCQltb2RpZnlfZGF0ZTsKKwlfX3UzMgkJYmFja3VwX2RhdGU7CisJX191MzIJCWNoZWNrZWRfZGF0ZTsKKwlfX3UzMgkJZmlsZV9jb3VudDsKKwlfX3UzMgkJZm9sZGVyX2NvdW50OworCV9fdTMyCQlibG9ja3NpemU7CisJX191MzIJCXRvdGFsX2Jsb2NrczsKKwlfX3UzMgkJZnJlZV9ibG9ja3M7CisJX191MzIJCW5leHRfYWxsb2M7CisJX191MzIJCXJzcmNfY2x1bXBfc3o7CisJX191MzIJCWRhdGFfY2x1bXBfc3o7CisJX191MzIJCW5leHRfY25pZDsKKwlfX3UzMgkJd3JpdGVfY291bnQ7CisJX191NjQJCWVuY29kaW5nc19ibXA7CisJc3RydWN0IGhmc19maW5kZXJfaW5mbyBmaW5kZXJfaW5mbzsKKwlzdHJ1Y3QgaGZzcGx1c19mb3JrIGFsbG9jX2ZpbGU7CisJc3RydWN0IGhmc3BsdXNfZm9yayBleHRfZmlsZTsKKwlzdHJ1Y3QgaGZzcGx1c19mb3JrIGNhdF9maWxlOworCXN0cnVjdCBoZnNwbHVzX2ZvcmsgYXR0cl9maWxlOworCXN0cnVjdCBoZnNwbHVzX2Zvcmsgc3RhcnRfZmlsZTsKK30gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qIHRoaXMgaXMgbHZtJ3MgbGFiZWxfaGVhZGVyICYgcHZfaGVhZGVyIGNvbWJpbmVkLiAqLworCisjZGVmaW5lIExWTTJfSURfTEVOIDMyCisKK3N0cnVjdCBsdm0yX3B2X2xhYmVsX2hlYWRlciB7CisJLyogbGFiZWxfaGVhZGVyICovCisJX191OAlpZFs4XTsJCS8qIExBQkVMT05FICovCisJX191NjQJc2VjdG9yX3hsOwkvKiBTZWN0b3IgbnVtYmVyIG9mIHRoaXMgbGFiZWwgKi8KKwlfX3UzMgljcmNfeGw7CQkvKiBGcm9tIG5leHQgZmllbGQgdG8gZW5kIG9mIHNlY3RvciAqLworCV9fdTMyCW9mZnNldF94bDsJLyogT2Zmc2V0IGZyb20gc3RhcnQgb2Ygc3RydWN0IHRvIGNvbnRlbnRzICovCisJX191OAl0eXBlWzhdOwkvKiBMVk0yIDAwMSAqLworCS8qIHB2X2hlYWRlciAqLworCV9fdTgJcHZfdXVpZFtMVk0yX0lEX0xFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogdGhpcyBpcyBhIHZlcnkgZ2VuZXJvdXMgcG9ydGlvbiBvZiB0aGUgc3VwZXIgYmxvY2ssIGdpdmluZyB1cworICogcm9vbSB0byB0cmFuc2xhdGUgMTQgY2h1bmtzIHdpdGggMyBzdHJpcGVzIGVhY2guCisgKi8KKyNkZWZpbmUgQlRSRlNfU1lTVEVNX0NIVU5LX0FSUkFZX1NJWkUgMjA0OAorI2RlZmluZSBCVFJGU19MQUJFTF9TSVpFIDI1NgorI2RlZmluZSBCVFJGU19VVUlEX1NJWkUgMTYKKyNkZWZpbmUgQlRSRlNfRlNJRF9TSVpFIDE2CisjZGVmaW5lIEJUUkZTX0NTVU1fU0laRSAzMgorCitzdHJ1Y3QgYnRyZnNfZGV2X2l0ZW0geworCS8qIHRoZSBpbnRlcm5hbCBidHJmcyBkZXZpY2UgaWQgKi8KKwlfX3U2NCBkZXZpZDsKKworCS8qIHNpemUgb2YgdGhlIGRldmljZSAqLworCV9fdTY0IHRvdGFsX2J5dGVzOworCisJLyogYnl0ZXMgdXNlZCAqLworCV9fdTY0IGJ5dGVzX3VzZWQ7CisKKwkvKiBvcHRpbWFsIGlvIGFsaWdubWVudCBmb3IgdGhpcyBkZXZpY2UgKi8KKwlfX3UzMiBpb19hbGlnbjsKKworCS8qIG9wdGltYWwgaW8gd2lkdGggZm9yIHRoaXMgZGV2aWNlICovCisJX191MzIgaW9fd2lkdGg7CisKKwkvKiBtaW5pbWFsIGlvIHNpemUgZm9yIHRoaXMgZGV2aWNlICovCisJX191MzIgc2VjdG9yX3NpemU7CisKKwkvKiB0eXBlIGFuZCBpbmZvIGFib3V0IHRoaXMgZGV2aWNlICovCisJX191NjQgdHlwZTsKKworCS8qIGV4cGVjdGVkIGdlbmVyYXRpb24gZm9yIHRoaXMgZGV2aWNlICovCisJX191NjQgZ2VuZXJhdGlvbjsKKworCS8qCisJICogc3RhcnRpbmcgYnl0ZSBvZiB0aGlzIHBhcnRpdGlvbiBvbiB0aGUgZGV2aWNlLAorCSAqIHRvIGFsbG93ciBmb3Igc3RyaXBlIGFsaWdubWVudCBpbiB0aGUgZnV0dXJlCisJICovCisJX191NjQgc3RhcnRfb2Zmc2V0OworCisJLyogZ3JvdXBpbmcgaW5mb3JtYXRpb24gZm9yIGFsbG9jYXRpb24gZGVjaXNpb25zICovCisJX191MzIgZGV2X2dyb3VwOworCisJLyogc2VlayBzcGVlZCAwLTEwMCB3aGVyZSAxMDAgaXMgZmFzdGVzdCAqLworCV9fdTggc2Vla19zcGVlZDsKKworCS8qIGJhbmR3aWR0aCAwLTEwMCB3aGVyZSAxMDAgaXMgZmFzdGVzdCAqLworCV9fdTggYmFuZHdpZHRoOworCisJLyogYnRyZnMgZ2VuZXJhdGVkIHV1aWQgZm9yIHRoaXMgZGV2aWNlICovCisJX191OCB1dWlkW0JUUkZTX1VVSURfU0laRV07CisKKwkvKiB1dWlkIG9mIEZTIHdobyBvd25zIHRoaXMgZGV2aWNlICovCisJX191OCBmc2lkW0JUUkZTX1VVSURfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiB0aGUgc3VwZXIgYmxvY2sgYmFzaWNhbGx5IGxpc3RzIHRoZSBtYWluIHRyZWVzIG9mIHRoZSBGUworICogaXQgY3VycmVudGx5IGxhY2tzIGFueSBibG9jayBjb3VudCBldGMgZXRjCisgKi8KK3N0cnVjdCBidHJmc19zdXBlcl9ibG9jayB7CisJX191OCBjc3VtW0JUUkZTX0NTVU1fU0laRV07CisJLyogdGhlIGZpcnN0IDMgZmllbGRzIG11c3QgbWF0Y2ggc3RydWN0IGJ0cmZzX2hlYWRlciAqLworCV9fdTggZnNpZFtCVFJGU19GU0lEX1NJWkVdOyAgICAvKiBGUyBzcGVjaWZpYyB1dWlkICovCisJX191NjQgYnl0ZW5yOyAvKiB0aGlzIGJsb2NrIG51bWJlciAqLworCV9fdTY0IGZsYWdzOworCisJLyogYWxsb3dlZCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgYnRyZnNfaGVhZGVyIGZyb20gaGVyZSBvd24gZG93biAqLworCV9fdTY0IG1hZ2ljOworCV9fdTY0IGdlbmVyYXRpb247CisJX191NjQgcm9vdDsKKwlfX3U2NCBjaHVua19yb290OworCV9fdTY0IGxvZ19yb290OworCisJLyogdGhpcyB3aWxsIGhlbHAgZmluZCB0aGUgbmV3IHN1cGVyIGJhc2VkIG9uIHRoZSBsb2cgcm9vdCAqLworCV9fdTY0IGxvZ19yb290X3RyYW5zaWQ7CisJX191NjQgdG90YWxfYnl0ZXM7CisJX191NjQgYnl0ZXNfdXNlZDsKKwlfX3U2NCByb290X2Rpcl9vYmplY3RpZDsKKwlfX3U2NCBudW1fZGV2aWNlczsKKwlfX3UzMiBzZWN0b3JzaXplOworCV9fdTMyIG5vZGVzaXplOworCV9fdTMyIGxlYWZzaXplOworCV9fdTMyIHN0cmlwZXNpemU7CisJX191MzIgc3lzX2NodW5rX2FycmF5X3NpemU7CisJX191NjQgY2h1bmtfcm9vdF9nZW5lcmF0aW9uOworCV9fdTY0IGNvbXBhdF9mbGFnczsKKwlfX3U2NCBjb21wYXRfcm9fZmxhZ3M7CisJX191NjQgaW5jb21wYXRfZmxhZ3M7CisJX191MTYgY3N1bV90eXBlOworCV9fdTggcm9vdF9sZXZlbDsKKwlfX3U4IGNodW5rX3Jvb3RfbGV2ZWw7CisJX191OCBsb2dfcm9vdF9sZXZlbDsKKwlzdHJ1Y3QgYnRyZnNfZGV2X2l0ZW0gZGV2X2l0ZW07CisKKwljaGFyIGxhYmVsW0JUUkZTX0xBQkVMX1NJWkVdOworCisJLyogZnV0dXJlIGV4cGFuc2lvbiAqLworCV9fdTY0IHJlc2VydmVkWzMyXTsKKwlfX3U4IHN5c19jaHVua19hcnJheVtCVFJGU19TWVNURU1fQ0hVTktfQVJSQVlfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKyNkZWZpbmUgRjJGU19NQVhfRVhURU5TSU9OICAgICAgNjQgIC8qICMgb2YgZXh0ZW5zaW9uIGVudHJpZXMgKi8KKworc3RydWN0IGYyZnNfc3VwZXJfYmxvY2sgeworICAgIF9fdTMyIG1hZ2ljOyAgICAgICAgICAgLyogTWFnaWMgTnVtYmVyICovCisgICAgX191MTYgbWFqb3JfdmVyOyAgICAgICAvKiBNYWpvciBWZXJzaW9uICovCisgICAgX191MTYgbWlub3JfdmVyOyAgICAgICAvKiBNaW5vciBWZXJzaW9uICovCisgICAgX191MzIgbG9nX3NlY3RvcnNpemU7ICAgICAgLyogbG9nMiBzZWN0b3Igc2l6ZSBpbiBieXRlcyAqLworICAgIF9fdTMyIGxvZ19zZWN0b3JzX3Blcl9ibG9jazsgICAvKiBsb2cyICMgb2Ygc2VjdG9ycyBwZXIgYmxvY2sgKi8KKyAgICBfX3UzMiBsb2dfYmxvY2tzaXplOyAgICAgICAvKiBsb2cyIGJsb2NrIHNpemUgaW4gYnl0ZXMgKi8KKyAgICBfX3UzMiBsb2dfYmxvY2tzX3Blcl9zZWc7ICAvKiBsb2cyICMgb2YgYmxvY2tzIHBlciBzZWdtZW50ICovCisgICAgX191MzIgc2Vnc19wZXJfc2VjOyAgICAgICAgLyogIyBvZiBzZWdtZW50cyBwZXIgc2VjdGlvbiAqLworICAgIF9fdTMyIHNlY3NfcGVyX3pvbmU7ICAgICAgIC8qICMgb2Ygc2VjdGlvbnMgcGVyIHpvbmUgKi8KKyAgICBfX3UzMiBjaGVja3N1bV9vZmZzZXQ7ICAgICAvKiBjaGVja3N1bSBvZmZzZXQgaW5zaWRlIHN1cGVyIGJsb2NrICovCisgICAgX191NjQgYmxvY2tfY291bnQ7ICAgICAvKiB0b3RhbCAjIG9mIHVzZXIgYmxvY2tzICovCisgICAgX191MzIgc2VjdGlvbl9jb3VudDsgICAgICAgLyogdG90YWwgIyBvZiBzZWN0aW9ucyAqLworICAgIF9fdTMyIHNlZ21lbnRfY291bnQ7ICAgICAgIC8qIHRvdGFsICMgb2Ygc2VnbWVudHMgKi8KKyAgICBfX3UzMiBzZWdtZW50X2NvdW50X2NrcHQ7ICAvKiAjIG9mIHNlZ21lbnRzIGZvciBjaGVja3BvaW50ICovCisgICAgX191MzIgc2VnbWVudF9jb3VudF9zaXQ7ICAgLyogIyBvZiBzZWdtZW50cyBmb3IgU0lUICovCisgICAgX191MzIgc2VnbWVudF9jb3VudF9uYXQ7ICAgLyogIyBvZiBzZWdtZW50cyBmb3IgTkFUICovCisgICAgX191MzIgc2VnbWVudF9jb3VudF9zc2E7ICAgLyogIyBvZiBzZWdtZW50cyBmb3IgU1NBICovCisgICAgX191MzIgc2VnbWVudF9jb3VudF9tYWluOyAgLyogIyBvZiBzZWdtZW50cyBmb3IgbWFpbiBhcmVhICovCisgICAgX191MzIgc2VnbWVudDBfYmxrYWRkcjsgICAgLyogc3RhcnQgYmxvY2sgYWRkcmVzcyBvZiBzZWdtZW50IDAgKi8KKyAgICBfX3UzMiBjcF9ibGthZGRyOyAgICAgIC8qIHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgY2hlY2twb2ludCAqLworICAgIF9fdTMyIHNpdF9ibGthZGRyOyAgICAgLyogc3RhcnQgYmxvY2sgYWRkcmVzcyBvZiBTSVQgKi8KKyAgICBfX3UzMiBuYXRfYmxrYWRkcjsgICAgIC8qIHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgTkFUICovCisgICAgX191MzIgc3NhX2Jsa2FkZHI7ICAgICAvKiBzdGFydCBibG9jayBhZGRyZXNzIG9mIFNTQSAqLworICAgIF9fdTMyIG1haW5fYmxrYWRkcjsgICAgICAgIC8qIHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgbWFpbiBhcmVhICovCisgICAgX191MzIgcm9vdF9pbm87ICAgICAgICAvKiByb290IGlub2RlIG51bWJlciAqLworICAgIF9fdTMyIG5vZGVfaW5vOyAgICAgICAgLyogbm9kZSBpbm9kZSBudW1iZXIgKi8KKyAgICBfX3UzMiBtZXRhX2lubzsgICAgICAgIC8qIG1ldGEgaW5vZGUgbnVtYmVyICovCisgICAgX191OCB1dWlkWzE2XTsgICAgICAgICAgLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKyAgICBfX3UxNiB2b2x1bWVfbmFtZVs1MTJdOyAgICAvKiB2b2x1bWUgbmFtZSAqLworICAgIF9fdTMyIGV4dGVuc2lvbl9jb3VudDsgICAgIC8qICMgb2YgZXh0ZW5zaW9ucyBiZWxvdyAqLworICAgIF9fdTggZXh0ZW5zaW9uX2xpc3RbRjJGU19NQVhfRVhURU5TSU9OXVs4XTsgLyogZXh0ZW5zaW9uIGFycmF5ICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoKKyAqIEJ5dGUgc3dhcCBmdW5jdGlvbnMKKyAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIHN0YXRpYyBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gc3RhdGljIGlubGluZQorI2VuZGlmCisKK3N0YXRpYyBfX3UxNiBibGtpZF9zd2FiMTYoX191MTYgdmFsKTsKK3N0YXRpYyBfX3UzMiBibGtpZF9zd2FiMzIoX191MzIgdmFsKTsKK3N0YXRpYyBfX3U2NCBibGtpZF9zd2FiNjQoX191NjQgdmFsKTsKKworI2lmICgoZGVmaW5lZCBfX0dOVUNfXykgJiYgXAorICAgICAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2k0ODZfXykgfHwgZGVmaW5lZChfX2k1ODZfXykpKQorCisjZGVmaW5lIF9CTEtJRF9IQVZFX0FTTV9CSVRPUFNfCisKK19JTkxJTkVfIF9fdTMyIGJsa2lkX3N3YWIzMihfX3UzMiB2YWwpCit7CisjaWZkZWYgRVhUMkZTX1JFUVVJUkVfNDg2CisJX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAodmFsKSA6ICIwIiAodmFsKSk7CisjZWxzZQorCV9fYXNtX18oInhjaGdiICViMCwlaDBcblx0IgkvKiBzd2FwIGxvd2VyIGJ5dGVzCSovCisJCSJyb3JsICQxNiwlMFxuXHQiCS8qIHN3YXAgd29yZHMJCSovCisJCSJ4Y2hnYiAlYjAsJWgwIgkJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KKwkJOiI9cSIgKHZhbCkKKwkJOiAiMCIgKHZhbCkpOworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworX0lOTElORV8gX191MTYgYmxraWRfc3dhYjE2KF9fdTE2IHZhbCkKK3sKKwlfX2FzbV9fKCJ4Y2hnYiAlYjAsJWgwIgkJLyogc3dhcCBieXRlcwkJKi8gXAorCQk6ICI9cSIgKHZhbCkgXAorCQk6ICAiMCIgKHZhbCkpOyBcCisJCXJldHVybiB2YWw7Cit9CisKK19JTkxJTkVfIF9fdTY0IGJsa2lkX3N3YWI2NChfX3U2NCB2YWwpCit7CisJcmV0dXJuIChibGtpZF9zd2FiMzIodmFsID4+IDMyKSB8CisJCSgoKF9fdTY0KSBibGtpZF9zd2FiMzIodmFsICYgMHhGRkZGRkZGRlVMKSkgPDwgMzIpKTsKK30KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0JMS0lEX0hBVkVfQVNNX0JJVE9QU18pCisKK19JTkxJTkVfICBfX3UxNiBibGtpZF9zd2FiMTYoX191MTYgdmFsKQoreworCXJldHVybiAodmFsID4+IDgpIHwgKHZhbCA8PCA4KTsKK30KKworX0lOTElORV8gX191MzIgYmxraWRfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlyZXR1cm4gKCh2YWw+PjI0KSB8ICgodmFsPj44KSYweEZGMDApIHwKKwkJKCh2YWw8PDgpJjB4RkYwMDAwKSB8ICh2YWw8PDI0KSk7Cit9CisKK19JTkxJTkVfIF9fdTY0IGJsa2lkX3N3YWI2NChfX3U2NCB2YWwpCit7CisJcmV0dXJuIChibGtpZF9zd2FiMzIodmFsID4+IDMyKSB8CisJCSgoKF9fdTY0KSBibGtpZF9zd2FiMzIodmFsICYgMHhGRkZGRkZGRlVMKSkgPDwgMzIpKTsKK30KKyNlbmRpZgorCisKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBibGtpZF9sZTE2KHgpIGJsa2lkX3N3YWIxNih4KQorI2RlZmluZSBibGtpZF9sZTMyKHgpIGJsa2lkX3N3YWIzMih4KQorI2RlZmluZSBibGtpZF9sZTY0KHgpIGJsa2lkX3N3YWI2NCh4KQorI2RlZmluZSBibGtpZF9iZTE2KHgpICh4KQorI2RlZmluZSBibGtpZF9iZTMyKHgpICh4KQorI2RlZmluZSBibGtpZF9iZTY0KHgpICh4KQorI2Vsc2UKKyNkZWZpbmUgYmxraWRfbGUxNih4KSAoeCkKKyNkZWZpbmUgYmxraWRfbGUzMih4KSAoeCkKKyNkZWZpbmUgYmxraWRfbGU2NCh4KSAoeCkKKyNkZWZpbmUgYmxraWRfYmUxNih4KSBibGtpZF9zd2FiMTYoeCkKKyNkZWZpbmUgYmxraWRfYmUzMih4KSBibGtpZF9zd2FiMzIoeCkKKyNkZWZpbmUgYmxraWRfYmU2NCh4KSBibGtpZF9zd2FiNjQoeCkKKyNlbmRpZgorCisjdW5kZWYgX0lOTElORV8KKworI2VuZGlmIC8qIF9CTEtJRF9QUk9CRV9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3JlYWQuYyBiL2UyZnNwcm9ncy9saWIvYmxraWQvcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjc5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3JlYWQuYwpAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIHJlYWQuYyAtIHJlYWQgdGhlIGJsa2lkIGNhY2hlIGZyb20gZGlzaywgdG8gYXZvaWQgc2Nhbm5pbmcgYWxsIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgVGhlb2RvcmUgWS4gVHMnbworICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIC8qIGZvciBpbmNsdXNpb24gb2Ygc3RydG91bGwgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImJsa2lkUC5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorCisjaWZkZWYgSEFWRV9TVFJUT1VMTAorI2RlZmluZSBTVFJUT1VMTCBzdHJ0b3VsbCAvKiBkZWZpbmVkIGluIHN0ZGxpYi5oIGlmIHlvdSB0cnkgaGFyZCBlbm91Z2ggKi8KKyNlbHNlCisvKiBGSVhNRTogbmVlZCB0byBzdXBwb3J0IHJlYWwgc3RydG91bGwgaGVyZSAqLworI2RlZmluZSBTVFJUT1VMTCBzdHJ0b3VsCisjZW5kaWYKKworI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWZkZWYgVEVTVF9QUk9HUkFNCisjZGVmaW5lIGJsa2lkX2RlYnVnX2R1bXBfZGV2KGRldikJKGRlYnVnX2R1bXBfZGV2KGRldikpCitzdGF0aWMgdm9pZCBkZWJ1Z19kdW1wX2RldihibGtpZF9kZXYgZGV2KTsKKyNlbmRpZgorCisvKgorICogRmlsZSBmb3JtYXQ6CisgKgorICoJPGRldmljZSBbPE5BTUU9InZhbHVlIj4gLi4uXT5kZXZpY2VfbmFtZTwvZGV2aWNlPgorICoKKyAqCVRoZSBmb2xsb3dpbmcgdGFncyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggZW50cnk6CisgKgk8SUQ9ImlkIj4JdW5pcXVlICh3aXRoaW4gdGhpcyBmaWxlKSBJRCBudW1iZXIgb2YgdGhpcyBkZXZpY2UKKyAqCTxUSU1FPSJ0aW1lIj4JKGFzY2lpIHRpbWVfdCkgdGltZSB0aGlzIGVudHJ5IHdhcyBsYXN0IHJlYWQgZnJvbSBkaXNrCisgKgk8VFlQRT0idHlwZSI+CShkZXRlY3RlZCkgdHlwZSBvZiBmaWxlc3lzdGVtL2RhdGEgZm9yIHRoaXMgcGFydGl0aW9uCisgKgorICoJVGhlIGZvbGxvd2luZyB0YWdzIG1heSBiZSBwcmVzZW50LCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBjb250ZW50cworICoJPExBQkVMPSJsYWJlbCI+CSh1c2VyIHN1cHBsaWVkKSBsYWJlbCAodm9sdW1lIG5hbWUsIGV0YykKKyAqCTxVVUlEPSJ1dWlkIj4JKGdlbmVyYXRlZCkgdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKHNlcmlhbCBubykKKyAqLworCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX2JsYW5rKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl93b3JkKGNoYXIgKmNwKQoreworCWNoYXIgY2g7CisKKwl3aGlsZSAoKGNoID0gKmNwKSkgeworCQkvKiBJZiB3ZSBzZWUgYSBiYWNrc2xhc2gsIHNraXAgdGhlIG5leHQgY2hhcmFjdGVyICovCisJCWlmIChjaCA9PSAnXFwnKSB7CisJCQljcCsrOworCQkJaWYgKCpjcCA9PSAnXDAnKQorCQkJCWJyZWFrOworCQkJY3ArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpc3NwYWNlKGNoKSB8fCBjaCA9PSAnPCcgfHwgY2ggPT0gJz4nKQorCQkJYnJlYWs7CisJCWNwKys7CisJfQorCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnN0cmlwX2xpbmUoY2hhciAqbGluZSkKK3sKKwljaGFyCSpwOworCisJbGluZSA9IHNraXBfb3Zlcl9ibGFuayhsaW5lKTsKKworCXAgPSBsaW5lICsgc3RybGVuKGxpbmUpIC0gMTsKKworCXdoaWxlICgqbGluZSkgeworCQlpZiAoaXNzcGFjZSgqcCkpCisJCQkqcC0tID0gJ1wwJzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxpbmU7Cit9CisKKyNpZiAwCitzdGF0aWMgY2hhciAqcGFyc2Vfd29yZChjaGFyICoqYnVmKQoreworCWNoYXIgKndvcmQsICpuZXh0OworCisJd29yZCA9ICpidWY7CisJaWYgKCp3b3JkID09ICdcMCcpCisJCXJldHVybiBOVUxMOworCisJd29yZCA9IHNraXBfb3Zlcl9ibGFuayh3b3JkKTsKKwluZXh0ID0gc2tpcF9vdmVyX3dvcmQod29yZCk7CisJaWYgKCpuZXh0KSB7CisJCWNoYXIgKmVuZCA9IG5leHQgLSAxOworCQlpZiAoKmVuZCA9PSAnIicgfHwgKmVuZCA9PSAnXCcnKQorCQkJKmVuZCA9ICdcMCc7CisJCSpuZXh0KysgPSAnXDAnOworCX0KKwkqYnVmID0gbmV4dDsKKworCWlmICgqd29yZCA9PSAnIicgfHwgKndvcmQgPT0gJ1wnJykKKwkJd29yZCsrOworCXJldHVybiB3b3JkOworfQorI2VuZGlmCisKKy8qCisgKiBTdGFydCBwYXJzaW5nIGEgbmV3IGxpbmUgZnJvbSB0aGUgY2FjaGUuCisgKgorICogbGluZSBzdGFydHMgd2l0aCAiPGRldmljZSIgcmV0dXJuIDEgLT4gY29udGludWUgcGFyc2luZyBsaW5lCisgKiBsaW5lIHN0YXJ0cyB3aXRoICI8Zm9vIiwgZW1wdHksIG9yICMgcmV0dXJuIDAgLT4gc2tpcCBsaW5lCisgKiBsaW5lIHN0YXJ0cyB3aXRoIG90aGVyLCByZXR1cm4gLUJMS0lEX0VSUl9DQUNIRSAtPiBlcnJvcgorICovCitzdGF0aWMgaW50IHBhcnNlX3N0YXJ0KGNoYXIgKipjcCkKK3sKKwljaGFyICpwOworCisJcCA9IHN0cmlwX2xpbmUoKmNwKTsKKworCS8qIFNraXAgY29tbWVudCBvciBibGFuayBsaW5lcy4gIFdlIGNhbid0IGp1c3QgTlVMIHRoZSBmaXJzdCAnIycgY2hhciwKKwkgKiBpbiBjYXNlIGl0IGlzIGluc2lkZSBxdW90ZXMsIG9yIGVzY2FwZWQuCisJICovCisJaWYgKCpwID09ICdcMCcgfHwgKnAgPT0gJyMnKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RybmNtcChwLCAiPGRldmljZSIsIDcpKSB7CisJCURCRyhERUJVR19SRUFELCBwcmludGYoImZvdW5kIGRldmljZSBoZWFkZXI6ICU4c1xuIiwgcCkpOworCQlwICs9IDc7CisKKwkJKmNwID0gcDsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCpwID09ICc8JykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUJMS0lEX0VSUl9DQUNIRTsKK30KKworLyogQ29uc3VtZSB0aGUgcmVtYWluaW5nIFhNTCBvbiB0aGUgbGluZSAoY29zbWV0aWMgb25seSkgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZW5kKGNoYXIgKipjcCkKK3sKKwkqY3AgPSBza2lwX292ZXJfYmxhbmsoKmNwKTsKKworCWlmICghc3RybmNtcCgqY3AsICI8L2RldmljZT4iLCA5KSkgeworCQlEQkcoREVCVUdfUkVBRCwgcHJpbnRmKCJmb3VuZCBkZXZpY2UgdHJhaWxlciAlOXNcbiIsICpjcCkpOworCQkqY3AgKz0gOTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1CTEtJRF9FUlJfQ0FDSEU7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBkZXZpY2Ugc3RydWN0IHdpdGggZGV2aWNlIG5hbWUgZmlsbGVkIGluLiAgV2lsbCBoYW5kbGUKKyAqIGZpbmRpbmcgdGhlIGRldmljZSBvbiBsaW5lcyBvZiB0aGUgZm9ybToKKyAqIDxkZXZpY2UgZm9vPWJhcj5kZXZuYW1lPC9kZXZpY2U+CisgKiA8ZGV2aWNlPmRldm5hbWU8Zm9vPmJhcjwvZm9vPjwvZGV2aWNlPgorICovCitzdGF0aWMgaW50IHBhcnNlX2RldihibGtpZF9jYWNoZSBjYWNoZSwgYmxraWRfZGV2ICpkZXYsIGNoYXIgKipjcCkKK3sKKwljaGFyICpzdGFydCwgKnRtcCwgKmVuZCwgKm5hbWU7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gcGFyc2Vfc3RhcnQoY3ApKSA8PSAwKQorCQlyZXR1cm4gcmV0OworCisJc3RhcnQgPSB0bXAgPSBzdHJjaHIoKmNwLCAnPicpOworCWlmICghc3RhcnQpIHsKKwkJREJHKERFQlVHX1JFQUQsCisJCSAgICBwcmludGYoImJsa2lkOiBzaG9ydCBsaW5lIHBhcnNpbmcgZGV2OiAlc1xuIiwgKmNwKSk7CisJCXJldHVybiAtQkxLSURfRVJSX0NBQ0hFOworCX0KKwlzdGFydCA9IHNraXBfb3Zlcl9ibGFuayhzdGFydCArIDEpOworCWVuZCA9IHNraXBfb3Zlcl93b3JkKHN0YXJ0KTsKKworCURCRyhERUJVR19SRUFELCBwcmludGYoImRldmljZSBzaG91bGQgYmUgJSpzXG4iLAorCQkJICAgICAgIChpbnQpKGVuZCAtIHN0YXJ0KSwgc3RhcnQpKTsKKworCWlmICgqKmNwID09ICc+JykKKwkJKmNwID0gZW5kOworCWVsc2UKKwkJKCpjcCkrKzsKKworCSp0bXAgPSAnXDAnOworCisJaWYgKCEodG1wID0gc3RycmNocihlbmQsICc8JykpIHx8IHBhcnNlX2VuZCgmdG1wKSA8IDApIHsKKwkJREJHKERFQlVHX1JFQUQsCisJCSAgICBwcmludGYoImJsa2lkOiBtaXNzaW5nIDwvZGV2aWNlPiBlbmRpbmc6ICVzXG4iLCBlbmQpKTsKKwl9IGVsc2UgaWYgKHRtcCkKKwkJKnRtcCA9ICdcMCc7CisKKwlpZiAoZW5kIC0gc3RhcnQgPD0gMSkgeworCQlEQkcoREVCVUdfUkVBRCwgcHJpbnRmKCJibGtpZDogZW1wdHkgZGV2aWNlIG5hbWU6ICVzXG4iLCAqY3ApKTsKKwkJcmV0dXJuIC1CTEtJRF9FUlJfQ0FDSEU7CisJfQorCisJbmFtZSA9IGJsa2lkX3N0cm5kdXAoc3RhcnQsIGVuZC1zdGFydCk7CisJaWYgKG5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfTUVNOworCisJREJHKERFQlVHX1JFQUQsIHByaW50ZigiZm91bmQgZGV2ICVzXG4iLCBuYW1lKSk7CisKKwlpZiAoISgqZGV2ID0gYmxraWRfZ2V0X2RldihjYWNoZSwgbmFtZSwgQkxLSURfREVWX0NSRUFURSkpKSB7CisJCWZyZWUobmFtZSk7CisJCXJldHVybiAtQkxLSURfRVJSX01FTTsKKwl9CisKKwlmcmVlKG5hbWUpOworCXJldHVybiAxOworfQorCisvKgorICogRXh0cmFjdCBhIHRhZyBvZiB0aGUgZm9ybSBOQU1FPSJ2YWx1ZSIgZnJvbSB0aGUgbGluZS4KKyAqLworc3RhdGljIGludCBwYXJzZV90b2tlbihjaGFyICoqbmFtZSwgY2hhciAqKnZhbHVlLCBjaGFyICoqY3ApCit7CisJY2hhciAqZW5kOworCisJaWYgKCFuYW1lIHx8ICF2YWx1ZSB8fCAhY3ApCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJaWYgKCEoKnZhbHVlID0gc3RyY2hyKCpjcCwgJz0nKSkpCisJCXJldHVybiAwOworCisJKip2YWx1ZSA9ICdcMCc7CisJKm5hbWUgPSBzdHJpcF9saW5lKCpjcCk7CisJKnZhbHVlID0gc2tpcF9vdmVyX2JsYW5rKCp2YWx1ZSArIDEpOworCisJaWYgKCoqdmFsdWUgPT0gJyInKSB7CisJCWVuZCA9IHN0cmNocigqdmFsdWUgKyAxLCAnIicpOworCQlpZiAoIWVuZCkgeworCQkJREJHKERFQlVHX1JFQUQsCisJCQkgICAgcHJpbnRmKCJ1bmJhbGFuY2VkIHF1b3RlcyBhdDogJXNcbiIsICp2YWx1ZSkpOworCQkJKmNwID0gKnZhbHVlOworCQkJcmV0dXJuIC1CTEtJRF9FUlJfQ0FDSEU7CisJCX0KKwkJKCp2YWx1ZSkrKzsKKwkJKmVuZCA9ICdcMCc7CisJCWVuZCsrOworCX0gZWxzZSB7CisJCWVuZCA9IHNraXBfb3Zlcl93b3JkKCp2YWx1ZSk7CisJCWlmICgqZW5kKSB7CisJCQkqZW5kID0gJ1wwJzsKKwkJCWVuZCsrOworCQl9CisJfQorCSpjcCA9IGVuZDsKKworCXJldHVybiAxOworfQorCisvKgorICogRXh0cmFjdCBhIHRhZyBvZiB0aGUgZm9ybSA8TkFNRT52YWx1ZTwvTkFNRT4gZnJvbSB0aGUgbGluZS4KKyAqLworLyoKK3N0YXRpYyBpbnQgcGFyc2VfeG1sKGNoYXIgKipuYW1lLCBjaGFyICoqdmFsdWUsIGNoYXIgKipjcCkKK3sKKwljaGFyICplbmQ7CisKKwlpZiAoIW5hbWUgfHwgIXZhbHVlIHx8ICFjcCkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfUEFSQU07CisKKwkqbmFtZSA9IHN0cmlwX2xpbmUoKmNwKTsKKworCWlmICgoKm5hbWUpWzBdICE9ICc8JyB8fCAoKm5hbWUpWzFdID09ICcvJykKKwkJcmV0dXJuIDA7CisKKwlGSVhNRTogZmluaXNoIHRoaXMuCit9CisqLworCisvKgorICogRXh0cmFjdCBhIHRhZyBmcm9tIHRoZSBsaW5lLgorICoKKyAqIFJldHVybiAxIGlmIGEgdmFsaWQgdGFnIHdhcyBmb3VuZC4KKyAqIFJldHVybiAwIGlmIG5vIHRhZyBmb3VuZC4KKyAqIFJldHVybiAtdmUgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBwYXJzZV90YWcoYmxraWRfY2FjaGUgY2FjaGUsIGJsa2lkX2RldiBkZXYsIGNoYXIgKipjcCkKK3sKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOworCWludCByZXQ7CisKKwlpZiAoIWNhY2hlIHx8ICFkZXYpCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJaWYgKChyZXQgPSBwYXJzZV90b2tlbigmbmFtZSwgJnZhbHVlLCBjcCkpIDw9IDAgLyogJiYKKwkgICAgKHJldCA9IHBhcnNlX3htbCgmbmFtZSwgJnZhbHVlLCBjcCkpIDw9IDAgKi8pCisJCXJldHVybiByZXQ7CisKKwkvKiBTb21lIHRhZ3MgYXJlIHN0b3JlZCBkaXJlY3RseSBpbiB0aGUgZGV2aWNlIHN0cnVjdCAqLworCWlmICghc3RyY21wKG5hbWUsICJERVZOTyIpKQorCQlkZXYtPmJpZF9kZXZubyA9IFNUUlRPVUxMKHZhbHVlLCAwLCAwKTsKKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJQUkkiKSkKKwkJZGV2LT5iaWRfcHJpID0gc3RydG9sKHZhbHVlLCAwLCAwKTsKKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJUSU1FIikpCisJCWRldi0+YmlkX3RpbWUgPSBTVFJUT1VMTCh2YWx1ZSwgMCwgMCk7CisJZWxzZQorCQlyZXQgPSBibGtpZF9zZXRfdGFnKGRldiwgbmFtZSwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOworCisJREJHKERFQlVHX1JFQUQsIHByaW50ZigiICAgIHRhZzogJXM9XCIlc1wiXG4iLCBuYW1lLCB2YWx1ZSkpOworCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAxOworfQorCisvKgorICogUGFyc2UgYSBzaW5nbGUgbGluZSBvZiBkYXRhLCBhbmQgcmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIGRldiBzdHJ1Y3QuCisgKiBBZGQgdGhlIG5ldyBkZXZpY2UgdG8gdGhlIGNhY2hlIHN0cnVjdCwgaWYgb25lIHdhcyByZWFkLgorICoKKyAqIExpbmVzIGFyZSBvZiB0aGUgZm9ybSA8ZGV2aWNlIFtUQUc9InZhbHVlIiAuLi5dPi9kZXYvZm9vPC9kZXZpY2U+CisgKgorICogUmV0dXJucyAtdmUgdmFsdWUgb24gZXJyb3IuCisgKiBSZXR1cm5zIDAgb3RoZXJ3aXNlLgorICogSWYgYSB2YWxpZCBkZXZpY2Ugd2FzIHJlYWQsICpkZXZfcCBpcyBub24tTlVMTCwgb3RoZXJ3aXNlIGl0IGlzIE5VTEwKKyAqIChlLmcuIGNvbW1lbnQgbGluZXMsIHVua25vd24gWE1MIGNvbnRlbnQsIGV0YykuCisgKi8KK3N0YXRpYyBpbnQgYmxraWRfcGFyc2VfbGluZShibGtpZF9jYWNoZSBjYWNoZSwgYmxraWRfZGV2ICpkZXZfcCwgY2hhciAqY3ApCit7CisJYmxraWRfZGV2IGRldjsKKwlpbnQgcmV0OworCisJaWYgKCFjYWNoZSB8fCAhZGV2X3ApCisJCXJldHVybiAtQkxLSURfRVJSX1BBUkFNOworCisJKmRldl9wID0gTlVMTDsKKworCURCRyhERUJVR19SRUFELCBwcmludGYoImxpbmU6ICVzXG4iLCBjcCkpOworCisJaWYgKChyZXQgPSBwYXJzZV9kZXYoY2FjaGUsIGRldl9wLCAmY3ApKSA8PSAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2ID0gKmRldl9wOworCisJd2hpbGUgKChyZXQgPSBwYXJzZV90YWcoY2FjaGUsIGRldiwgJmNwKSkgPiAwKSB7CisJCTsKKwl9CisKKwlpZiAoZGV2LT5iaWRfdHlwZSA9PSBOVUxMKSB7CisJCURCRyhERUJVR19SRUFELAorCQkgICAgcHJpbnRmKCJibGtpZDogZGV2aWNlICVzIGhhcyBubyBUWVBFXG4iLGRldi0+YmlkX25hbWUpKTsKKwkJYmxraWRfZnJlZV9kZXYoZGV2KTsKKwl9CisKKwlEQkcoREVCVUdfUkVBRCwgYmxraWRfZGVidWdfZHVtcF9kZXYoZGV2KSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGFyc2UgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwgYW5kIHJldHVybiB0aGUgZGF0YSBpbiB0aGUgc3VwcGxpZWQgb3IKKyAqIGEgbmV3bHkgYWxsb2NhdGVkIGNhY2hlIHN0cnVjdC4gIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIHJldHVybiBhCisgKiBuZXcgZW1wdHkgY2FjaGUgc3RydWN0LgorICovCit2b2lkIGJsa2lkX3JlYWRfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUpCit7CisJRklMRSAqZmlsZTsKKwljaGFyIGJ1Zls0MDk2XTsKKwlpbnQgZmQsIGxpbmVubyA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIHRoZW4gd2UganVzdCByZXR1cm4gYW4gZW1wdHkKKwkgKiBzdHJ1Y3Qgc28gdGhhdCB0aGUgY2FjaGUgY2FuIGJlIHBvcHVsYXRlZC4KKwkgKi8KKwlpZiAoKGZkID0gb3BlbihjYWNoZS0+YmljX2ZpbGVuYW1lLCBPX1JET05MWSkpIDwgMCkKKwkJcmV0dXJuOworCWlmIChmc3RhdChmZCwgJnN0KSA8IDApCisJCWdvdG8gZXJyb3V0OworCWlmICgoc3Quc3RfbXRpbWUgPT0gY2FjaGUtPmJpY19mdGltZSkgfHwKKwkgICAgKGNhY2hlLT5iaWNfZmxhZ3MgJiBCTEtJRF9CSUNfRkxfQ0hBTkdFRCkpIHsKKwkJREJHKERFQlVHX0NBQ0hFLCBwcmludGYoInNraXBwaW5nIHJlLXJlYWQgb2YgJXNcbiIsCisJCQkJCWNhY2hlLT5iaWNfZmlsZW5hbWUpKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJREJHKERFQlVHX0NBQ0hFLCBwcmludGYoInJlYWRpbmcgY2FjaGUgZmlsZSAlc1xuIiwKKwkJCQljYWNoZS0+YmljX2ZpbGVuYW1lKSk7CisKKwlmaWxlID0gZmRvcGVuKGZkLCAiciIpOworCWlmICghZmlsZSkKKwkJZ290byBlcnJvdXQ7CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZmlsZSkpIHsKKwkJYmxraWRfZGV2IGRldjsKKwkJdW5zaWduZWQgaW50IGVuZDsKKworCQlsaW5lbm8rKzsKKwkJaWYgKGJ1ZlswXSA9PSAwKQorCQkJY29udGludWU7CisJCWVuZCA9IHN0cmxlbihidWYpIC0gMTsKKwkJLyogQ29udGludWUgcmVhZGluZyBuZXh0IGxpbmUgaWYgaXQgZW5kcyB3aXRoIGEgYmFja3NsYXNoICovCisJCXdoaWxlIChidWZbZW5kXSA9PSAnXFwnICYmIGVuZCA8IHNpemVvZihidWYpIC0gMiAmJgorCQkgICAgICAgZmdldHMoYnVmICsgZW5kLCBzaXplb2YoYnVmKSAtIGVuZCwgZmlsZSkpIHsKKwkJCWVuZCA9IHN0cmxlbihidWYpIC0gMTsKKwkJCWxpbmVubysrOworCQl9CisKKwkJaWYgKGJsa2lkX3BhcnNlX2xpbmUoY2FjaGUsICZkZXYsIGJ1ZikgPCAwKSB7CisJCQlEQkcoREVCVUdfUkVBRCwKKwkJCSAgICBwcmludGYoImJsa2lkOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWRcbiIsIGxpbmVubykpOworCQkJY29udGludWU7CisJCX0KKwl9CisJZmNsb3NlKGZpbGUpOworCisJLyoKKwkgKiBJbml0aWFsbHkgd2UgZG8gbm90IG5lZWQgdG8gd3JpdGUgb3V0IHRoZSBjYWNoZSBmaWxlLgorCSAqLworCWNhY2hlLT5iaWNfZmxhZ3MgJj0gfkJMS0lEX0JJQ19GTF9DSEFOR0VEOworCWNhY2hlLT5iaWNfZnRpbWUgPSBzdC5zdF9tdGltZTsKKworCXJldHVybjsKK2Vycm91dDoKKwljbG9zZShmZCk7CisJcmV0dXJuOworfQorCisjaWZkZWYgVEVTVF9QUk9HUkFNCitzdGF0aWMgdm9pZCBkZWJ1Z19kdW1wX2RldihibGtpZF9kZXYgZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwlpZiAoIWRldikgeworCQlwcmludGYoIiAgZGV2OiBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZigiICBkZXY6IG5hbWUgPSAlc1xuIiwgZGV2LT5iaWRfbmFtZSk7CisJcHJpbnRmKCIgIGRldjogREVWTk89XCIweCUwbGx4XCJcbiIsIChsb25nIGxvbmcpZGV2LT5iaWRfZGV2bm8pOworCXByaW50ZigiICBkZXY6IFRJTUU9XCIlbGxkXCJcbiIsIChsb25nIGxvbmcpZGV2LT5iaWRfdGltZSk7CisJcHJpbnRmKCIgIGRldjogUFJJPVwiJWRcIlxuIiwgZGV2LT5iaWRfcHJpKTsKKwlwcmludGYoIiAgZGV2OiBmbGFncyA9IDB4JTA4WFxuIiwgZGV2LT5iaWRfZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaChwLCAmZGV2LT5iaWRfdGFncykgeworCQlibGtpZF90YWcgdGFnID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywgYml0X3RhZ3MpOworCQlpZiAodGFnKQorCQkJcHJpbnRmKCIgICAgdGFnOiAlcz1cIiVzXCJcbiIsIHRhZy0+Yml0X25hbWUsCisJCQkgICAgICAgdGFnLT5iaXRfdmFsKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIgICAgdGFnOiBOVUxMXG4iKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqYXJndikKK3sKKwlibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisJaW50IHJldDsKKworCWJsa2lkX2RlYnVnX21hc2sgPSBERUJVR19BTEw7CisJaWYgKGFyZ2MgPiAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFtmaWxlbmFtZV1cbiIKKwkJCSJUZXN0IHBhcnNpbmcgb2YgdGhlIGNhY2hlIChmaWxlbmFtZSlcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAoKHJldCA9IGJsa2lkX2dldF9jYWNoZSgmY2FjaGUsIGFyZ3ZbMV0pKSA8IDApCisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgJWQgcmVhZGluZyBjYWNoZSBmaWxlICVzXG4iLCByZXQsCisJCQlhcmd2WzFdID8gYXJndlsxXSA6IEJMS0lEX0NBQ0hFX0ZJTEUpOworCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvcmVzb2x2ZS5jIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC9yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyZTI2OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvcmVzb2x2ZS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogcmVzb2x2ZS5jIC0gcmVzb2x2ZSBuYW1lcyBhbmQgdGFncyBpbnRvIHNwZWNpZmljIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgVGhlb2RvcmUgVHMnby4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgImJsa2lkUC5oIgorCisvKgorICogRmluZCBhIHRhZ25hbWUgKGUuZy4gTEFCRUwgb3IgVVVJRCkgb24gYSBzcGVjaWZpYyBkZXZpY2UuCisgKi8KK2NoYXIgKmJsa2lkX2dldF90YWdfdmFsdWUoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKnRhZ25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmRldm5hbWUpCit7CisJYmxraWRfdGFnIGZvdW5kOworCWJsa2lkX2RldiBkZXY7CisJYmxraWRfY2FjaGUgYyA9IGNhY2hlOworCWNoYXIgKnJldCA9IE5VTEw7CisKKwlEQkcoREVCVUdfUkVTT0xWRSwgcHJpbnRmKCJsb29raW5nIGZvciAlcyBvbiAlc1xuIiwgdGFnbmFtZSwgZGV2bmFtZSkpOworCisJaWYgKCFkZXZuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghY2FjaGUpIHsKKwkJaWYgKGJsa2lkX2dldF9jYWNoZSgmYywgTlVMTCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKChkZXYgPSBibGtpZF9nZXRfZGV2KGMsIGRldm5hbWUsIEJMS0lEX0RFVl9OT1JNQUwpKSAmJgorCSAgICAoZm91bmQgPSBibGtpZF9maW5kX3RhZ19kZXYoZGV2LCB0YWduYW1lKSkpCisJCXJldCA9IGJsa2lkX3N0cmR1cChmb3VuZC0+Yml0X3ZhbCk7CisKKwlpZiAoIWNhY2hlKQorCQlibGtpZF9wdXRfY2FjaGUoYyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTG9jYXRlIGEgZGV2aWNlIG5hbWUgZnJvbSBhIHRva2VuIChOQU1FPXZhbHVlIHN0cmluZyksIG9yIChuYW1lLCB2YWx1ZSkKKyAqIHBhaXIuICBJbiB0aGUgY2FzZSBvZiBhIHRva2VuLCB2YWx1ZSBpcyBpZ25vcmVkLiAgSWYgdGhlICJ0b2tlbiIgaXMgbm90CisgKiBvZiB0aGUgZm9ybSAiTkFNRT12YWx1ZSIgYW5kIHRoZXJlIGlzIG5vIHZhbHVlIGdpdmVuLCB0aGVuIGl0IGlzIGFzc3VtZWQKKyAqIHRvIGJlIHRoZSBhY3R1YWwgZGV2bmFtZSBhbmQgYSBjb3B5IGlzIHJldHVybmVkLgorICovCitjaGFyICpibGtpZF9nZXRfZGV2bmFtZShibGtpZF9jYWNoZSBjYWNoZSwgY29uc3QgY2hhciAqdG9rZW4sCisJCQljb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlibGtpZF9kZXYgZGV2OworCWJsa2lkX2NhY2hlIGMgPSBjYWNoZTsKKwljaGFyICp0ID0gMCwgKnYgPSAwOworCWNoYXIgKnJldCA9IE5VTEw7CisKKwlpZiAoIXRva2VuKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghY2FjaGUpIHsKKwkJaWYgKGJsa2lkX2dldF9jYWNoZSgmYywgTlVMTCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJREJHKERFQlVHX1JFU09MVkUsCisJICAgIHByaW50ZigibG9va2luZyBmb3IgJXMlcyVzICVzXG4iLCB0b2tlbiwgdmFsdWUgPyAiPSIgOiAiIiwKKwkJICAgdmFsdWUgPyB2YWx1ZSA6ICIiLCBjYWNoZSA/ICJpbiBjYWNoZSIgOiAiZnJvbSBkaXNrIikpOworCisJaWYgKCF2YWx1ZSkgeworCQlpZiAoIXN0cmNocih0b2tlbiwgJz0nKSkgeworCQkJcmV0ID0gYmxraWRfc3RyZHVwKHRva2VuKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJsa2lkX3BhcnNlX3RhZ19zdHJpbmcodG9rZW4sICZ0LCAmdik7CisJCWlmICghdCB8fCAhdikKKwkJCWdvdG8gb3V0OworCQl0b2tlbiA9IHQ7CisJCXZhbHVlID0gdjsKKwl9CisKKwlkZXYgPSBibGtpZF9maW5kX2Rldl93aXRoX3RhZyhjLCB0b2tlbiwgdmFsdWUpOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCXJldCA9IGJsa2lkX3N0cmR1cChibGtpZF9kZXZfZGV2bmFtZShkZXYpKTsKKworb3V0OgorCWZyZWUodCk7CisJZnJlZSh2KTsKKwlpZiAoIWNhY2hlKSB7CisJCWJsa2lkX3B1dF9jYWNoZShjKTsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCisjaWZkZWYgVEVTVF9QUk9HUkFNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqdmFsdWU7CisJYmxraWRfY2FjaGUgY2FjaGU7CisKKwlibGtpZF9kZWJ1Z19tYXNrID0gREVCVUdfQUxMOworCWlmIChhcmdjICE9IDIgJiYgYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6XHQlcyB0YWduYW1lPXZhbHVlXG4iCisJCQkiXHQlcyB0YWduYW1lIGRldm5hbWVcbiIKKwkJCSJGaW5kIHdoaWNoIGRldmljZSBob2xkcyBhIGdpdmVuIHRva2VuIG9yXG4iCisJCQkiRmluZCB3aGF0IHRoZSB2YWx1ZSBvZiBhIHRhZyBpcyBpbiBhIGRldmljZVxuIiwKKwkJCWFyZ3ZbMF0sIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAoYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgIi9kZXYvbnVsbCIpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCBibGtpZCBjYWNoZVxuIik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFyZ3ZbMl0pIHsKKwkJdmFsdWUgPSBibGtpZF9nZXRfdGFnX3ZhbHVlKGNhY2hlLCBhcmd2WzFdLCBhcmd2WzJdKTsKKwkJcHJpbnRmKCIlcyBoYXMgdGFnICVzPSVzXG4iLCBhcmd2WzJdLCBhcmd2WzFdLAorCQkgICAgICAgdmFsdWUgPyB2YWx1ZSA6ICI8bWlzc2luZz4iKTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IGJsa2lkX2dldF9kZXZuYW1lKGNhY2hlLCBhcmd2WzFdLCBOVUxMKTsKKwkJcHJpbnRmKCIlcyBoYXMgdGFnICVzXG4iLCB2YWx1ZSA/IHZhbHVlIDogIjxub25lPiIsIGFyZ3ZbMV0pOworCX0KKwlibGtpZF9wdXRfY2FjaGUoY2FjaGUpOworCXJldHVybiB2YWx1ZSA/IDAgOiAxOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3NhdmUuYyBiL2UyZnNwcm9ncy9saWIvYmxraWQvc2F2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3NhdmUuYwpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIHNhdmUuYyAtIHdyaXRlIHRoZSBjYWNoZSBzdHJ1Y3QgdG8gZGlzaworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBieSBBbmRyZWFzIERpbGdlcgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NS0RFVl9ICisjaW5jbHVkZSA8c3lzL21rZGV2Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSAiYmxraWRQLmgiCisKK3N0YXRpYyBpbnQgc2F2ZV9kZXYoYmxraWRfZGV2IGRldiwgRklMRSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaWYgKCFkZXYgfHwgZGV2LT5iaWRfbmFtZVswXSAhPSAnLycpCisJCXJldHVybiAwOworCisJREJHKERFQlVHX1NBVkUsCisJICAgIHByaW50ZigiZGV2aWNlICVzLCB0eXBlICVzXG4iLCBkZXYtPmJpZF9uYW1lLCBkZXYtPmJpZF90eXBlID8KKwkJICAgZGV2LT5iaWRfdHlwZSA6ICIobnVsbCkiKSk7CisKKwlmcHJpbnRmKGZpbGUsCisJCSI8ZGV2aWNlIERFVk5PPVwiMHglMDRseFwiIFRJTUU9XCIlbGRcIiIsCisJCSh1bnNpZ25lZCBsb25nKSBkZXYtPmJpZF9kZXZubywgKGxvbmcpIGRldi0+YmlkX3RpbWUpOworCWlmIChkZXYtPmJpZF9wcmkpCisJCWZwcmludGYoZmlsZSwgIiBQUkk9XCIlZFwiIiwgZGV2LT5iaWRfcHJpKTsKKwlsaXN0X2Zvcl9lYWNoKHAsICZkZXYtPmJpZF90YWdzKSB7CisJCWJsa2lkX3RhZyB0YWcgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnLCBiaXRfdGFncyk7CisJCWZwcmludGYoZmlsZSwgIiAlcz1cIiVzXCIiLCB0YWctPmJpdF9uYW1lLHRhZy0+Yml0X3ZhbCk7CisJfQorCWZwcmludGYoZmlsZSwgIj4lczwvZGV2aWNlPlxuIiwgZGV2LT5iaWRfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIG91dCB0aGUgY2FjaGUgc3RydWN0IHRvIHRoZSBjYWNoZSBmaWxlIG9uIGRpc2suCisgKi8KK2ludCBibGtpZF9mbHVzaF9jYWNoZShibGtpZF9jYWNoZSBjYWNoZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCWNoYXIgKnRtcCA9IE5VTEw7CisJY29uc3QgY2hhciAqb3BlbmVkID0gTlVMTDsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlGSUxFICpmaWxlID0gTlVMTDsKKwlpbnQgZmQsIHJldCA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmIChsaXN0X2VtcHR5KCZjYWNoZS0+YmljX2RldnMpIHx8CisJICAgICEoY2FjaGUtPmJpY19mbGFncyAmIEJMS0lEX0JJQ19GTF9DSEFOR0VEKSkgeworCQlEQkcoREVCVUdfU0FWRSwgcHJpbnRmKCJza2lwcGluZyBjYWNoZSBmaWxlIHdyaXRlXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCWZpbGVuYW1lID0gY2FjaGUtPmJpY19maWxlbmFtZSA/IGNhY2hlLT5iaWNfZmlsZW5hbWU6IEJMS0lEX0NBQ0hFX0ZJTEU7CisKKwkvKiBJZiB3ZSBjYW4ndCB3cml0ZSB0byB0aGUgY2FjaGUgZmlsZSwgdGhlbiBkb24ndCBldmVuIHRyeSAqLworCWlmICgoKHJldCA9IHN0YXQoZmlsZW5hbWUsICZzdCkpIDwgMCAmJiBlcnJubyAhPSBFTk9FTlQpIHx8CisJICAgIChyZXQgPT0gMCAmJiBhY2Nlc3MoZmlsZW5hbWUsIFdfT0spIDwgMCkpIHsKKwkJREJHKERFQlVHX1NBVkUsCisJCSAgICBwcmludGYoImNhbid0IHdyaXRlIHRvIGNhY2hlIGZpbGUgJXNcbiIsIGZpbGVuYW1lKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVHJ5IGFuZCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgc28KKwkgKiB0aGF0IGluIGNhc2Ugb2YgZXJyb3Igd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBjYWNoZSBmaWxlLgorCSAqIElmIHRoZSBjYWNoZSBmaWxlIGRvZXNuJ3QgeWV0IGV4aXN0LCBpdCBpc24ndCBhIHJlZ3VsYXIKKwkgKiBmaWxlIChlLmcuIC9kZXYvbnVsbCBvciBhIHNvY2tldCksIG9yIHdlIGNvdWxkbid0IGNyZWF0ZQorCSAqIGEgdGVtcG9yYXJ5IGZpbGUgdGhlbiB3ZSBvcGVuIGl0IGRpcmVjdGx5LgorCSAqLworCWlmIChyZXQgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCXRtcCA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgOCk7CisJCWlmICh0bXApIHsKKwkJCXNwcmludGYodG1wLCAiJXMtWFhYWFhYIiwgZmlsZW5hbWUpOworCQkJZmQgPSBta3N0ZW1wKHRtcCk7CisJCQlpZiAoZmQgPj0gMCkgeworCQkJCWZpbGUgPSBmZG9wZW4oZmQsICJ3Iik7CisJCQkJb3BlbmVkID0gdG1wOworCQkJfQorCQkJZmNobW9kKGZkLCAwNjQ0KTsKKwkJfQorCX0KKworCWlmICghZmlsZSkgeworCQlmaWxlID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJCW9wZW5lZCA9IGZpbGVuYW1lOworCX0KKworCURCRyhERUJVR19TQVZFLAorCSAgICBwcmludGYoIndyaXRpbmcgY2FjaGUgZmlsZSAlcyAocmVhbGx5ICVzKVxuIiwKKwkJICAgZmlsZW5hbWUsIG9wZW5lZCkpOworCisJaWYgKCFmaWxlKSB7CisJCXJldCA9IGVycm5vOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZS0+YmljX2RldnMpIHsKKwkJYmxraWRfZGV2IGRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF9kZXYsIGJpZF9kZXZzKTsKKwkJaWYgKCFkZXYtPmJpZF90eXBlKQorCQkJY29udGludWU7CisJCWlmICgocmV0ID0gc2F2ZV9kZXYoZGV2LCBmaWxlKSkgPCAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCA+PSAwKSB7CisJCWNhY2hlLT5iaWNfZmxhZ3MgJj0gfkJMS0lEX0JJQ19GTF9DSEFOR0VEOworCQlyZXQgPSAxOworCX0KKworCWZjbG9zZShmaWxlKTsKKwlpZiAob3BlbmVkICE9IGZpbGVuYW1lKSB7CisJCWlmIChyZXQgPCAwKSB7CisJCQl1bmxpbmsob3BlbmVkKTsKKwkJCURCRyhERUJVR19TQVZFLAorCQkJICAgIHByaW50ZigidW5saW5rZWQgdGVtcCBjYWNoZSAlc1xuIiwgb3BlbmVkKSk7CisJCX0gZWxzZSB7CisJCQljaGFyICpiYWNrdXA7CisKKwkJCWJhY2t1cCA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgNSk7CisJCQlpZiAoYmFja3VwKSB7CisJCQkJc3ByaW50ZihiYWNrdXAsICIlcy5vbGQiLCBmaWxlbmFtZSk7CisJCQkJdW5saW5rKGJhY2t1cCk7CisJCQkJbGluayhmaWxlbmFtZSwgYmFja3VwKTsKKwkJCQlmcmVlKGJhY2t1cCk7CisJCQl9CisJCQlyZW5hbWUob3BlbmVkLCBmaWxlbmFtZSk7CisJCQlEQkcoREVCVUdfU0FWRSwKKwkJCSAgICBwcmludGYoIm1vdmVkIHRlbXAgY2FjaGUgJXNcbiIsIG9wZW5lZCkpOworCQl9CisJfQorCitlcnJvdXQ6CisJZnJlZSh0bXApOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBURVNUX1BST0dSQU0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisJaW50IHJldDsKKworCWJsa2lkX2RlYnVnX21hc2sgPSBERUJVR19BTEw7CisJaWYgKGFyZ2MgPiAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFtmaWxlbmFtZV1cbiIKKwkJCSJUZXN0IGxvYWRpbmcvc2F2aW5nIGEgY2FjaGUgKGZpbGVuYW1lKVxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKChyZXQgPSBibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCAiL2Rldi9udWxsIikpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCWlmICgocmV0ID0gYmxraWRfcHJvYmVfYWxsKGNhY2hlKSkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgKCVkKSBwcm9iaW5nIGRldmljZXNcbiIsIHJldCk7CisJCWV4aXQoMSk7CisJfQorCWNhY2hlLT5iaWNfZmlsZW5hbWUgPSBibGtpZF9zdHJkdXAoYXJndlsxXSk7CisKKwlpZiAoKHJldCA9IGJsa2lkX2ZsdXNoX2NhY2hlKGNhY2hlKSkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgKCVkKSBzYXZpbmcgY2FjaGVcbiIsIHJldCk7CisJCWV4aXQoMSk7CisJfQorCisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGFnLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3RhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWVmODkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3RhZy5jCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogdGFnLmMgLSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uL2ZyZWUgcm91dGluZXMgZm9yIHRhZyBzdHJ1Y3RzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIEFuZHJlYXMgRGlsZ2VyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJibGtpZFAuaCIKKworc3RhdGljIGJsa2lkX3RhZyBibGtpZF9uZXdfdGFnKHZvaWQpCit7CisJYmxraWRfdGFnIHRhZzsKKworCWlmICghKHRhZyA9IChibGtpZF90YWcpIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJsa2lkX3N0cnVjdF90YWcpKSkpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnRhZy0+Yml0X3RhZ3MpOworCUlOSVRfTElTVF9IRUFEKCZ0YWctPmJpdF9uYW1lcyk7CisKKwlyZXR1cm4gdGFnOworfQorCisjaWZkZWYgQ09ORklHX0JMS0lEX0RFQlVHCit2b2lkIGJsa2lkX2RlYnVnX2R1bXBfdGFnKGJsa2lkX3RhZyB0YWcpCit7CisJaWYgKCF0YWcpIHsKKwkJcHJpbnRmKCIgICAgdGFnOiBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZigiICAgIHRhZzogJXM9XCIlc1wiXG4iLCB0YWctPmJpdF9uYW1lLCB0YWctPmJpdF92YWwpOworfQorI2VuZGlmCisKK3ZvaWQgYmxraWRfZnJlZV90YWcoYmxraWRfdGFnIHRhZykKK3sKKwlpZiAoIXRhZykKKwkJcmV0dXJuOworCisJREJHKERFQlVHX1RBRywgcHJpbnRmKCIgICAgZnJlZWluZyB0YWcgJXM9JXNcbiIsIHRhZy0+Yml0X25hbWUsCisJCSAgIHRhZy0+Yml0X3ZhbCA/IHRhZy0+Yml0X3ZhbCA6ICIoTlVMTCkiKSk7CisJREJHKERFQlVHX1RBRywgYmxraWRfZGVidWdfZHVtcF90YWcodGFnKSk7CisKKwlsaXN0X2RlbCgmdGFnLT5iaXRfdGFncyk7CS8qIGxpc3Qgb2YgdGFncyBmb3IgdGhpcyBkZXZpY2UgKi8KKwlsaXN0X2RlbCgmdGFnLT5iaXRfbmFtZXMpOwkvKiBsaXN0IG9mIHRhZ3Mgd2l0aCB0aGlzIHR5cGUgKi8KKworCWZyZWUodGFnLT5iaXRfbmFtZSk7CisJZnJlZSh0YWctPmJpdF92YWwpOworCisJZnJlZSh0YWcpOworfQorCisvKgorICogRmluZCB0aGUgZGVzaXJlZCB0YWcgb24gYSBkZXZpY2UuICBJZiB2YWx1ZSBpcyBOVUxMLCB0aGVuIHRoZQorICogZmlyc3Qgc3VjaCB0YWcgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSByZXR1cm4gb25seSBleGFjdCB0YWcgaWYgZm91bmQuCisgKi8KK2Jsa2lkX3RhZyBibGtpZF9maW5kX3RhZ19kZXYoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCisJaWYgKCFkZXYgfHwgIXR5cGUpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaChwLCAmZGV2LT5iaWRfdGFncykgeworCQlibGtpZF90YWcgdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmxraWRfc3RydWN0X3RhZywKKwkJCQkJICAgYml0X3RhZ3MpOworCisJCWlmICghc3RyY21wKHRtcC0+Yml0X25hbWUsIHR5cGUpKQorCQkJcmV0dXJuIHRtcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2V4dGVybiBpbnQgYmxraWRfZGV2X2hhc190YWcoYmxraWRfZGV2IGRldiwgY29uc3QgY2hhciAqdHlwZSwKKwkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJYmxraWRfdGFnCQl0YWc7CisKKwlpZiAoIWRldiB8fCAhdHlwZSkKKwkJcmV0dXJuIC0xOworCisJdGFnID0gYmxraWRfZmluZF90YWdfZGV2KGRldiwgdHlwZSk7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuICh0YWcgIT0gTlVMTCk7CisJaWYgKCF0YWcgfHwgc3RyY21wKHRhZy0+Yml0X3ZhbCwgdmFsdWUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGRlc2lyZWQgdGFnIHR5cGUgaW4gdGhlIGNhY2hlLgorICogV2UgcmV0dXJuIHRoZSBoZWFkIHRhZyBmb3IgdGhpcyB0YWcgdHlwZS4KKyAqLworc3RhdGljIGJsa2lkX3RhZyBibGtpZF9maW5kX2hlYWRfY2FjaGUoYmxraWRfY2FjaGUgY2FjaGUsIGNvbnN0IGNoYXIgKnR5cGUpCit7CisJYmxraWRfdGFnIGhlYWQgPSBOVUxMLCB0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCWlmICghY2FjaGUgfHwgIXR5cGUpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaChwLCAmY2FjaGUtPmJpY190YWdzKSB7CisJCXRtcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsIGJpdF90YWdzKTsKKwkJaWYgKCFzdHJjbXAodG1wLT5iaXRfbmFtZSwgdHlwZSkpIHsKKwkJCURCRyhERUJVR19UQUcsCisJCQkgICAgcHJpbnRmKCIgICAgZm91bmQgY2FjaGUgdGFnIGhlYWQgJXNcbiIsIHR5cGUpKTsKKwkJCWhlYWQgPSB0bXA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gaGVhZDsKK30KKworLyoKKyAqIFNldCBhIHRhZyBvbiBhbiBleGlzdGluZyBkZXZpY2UuCisgKgorICogSWYgdmFsdWUgaXMgTlVMTCwgdGhlbiBkZWxldGUgdGhlIHRhZ3Nmcm9tIHRoZSBkZXZpY2UuCisgKi8KK2ludCBibGtpZF9zZXRfdGFnKGJsa2lkX2RldiBkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGludCB2bGVuZ3RoKQoreworCWJsa2lkX3RhZwl0ID0gMCwgaGVhZCA9IDA7CisJY2hhcgkJKnZhbCA9IDA7CisJY2hhcgkJKipkZXZfdmFyID0gMDsKKworCWlmICghZGV2IHx8ICFuYW1lKQorCQlyZXR1cm4gLUJMS0lEX0VSUl9QQVJBTTsKKworCWlmICghKHZhbCA9IGJsa2lkX3N0cm5kdXAodmFsdWUsIHZsZW5ndGgpKSAmJiB2YWx1ZSkKKwkJcmV0dXJuIC1CTEtJRF9FUlJfTUVNOworCisJLyoKKwkgKiBDZXJ0YWluIGNvbW1vbiB0YWdzIGFyZSBsaW5rZWQgZGlyZWN0bHkgdG8gdGhlIGRldmljZSBzdHJ1Y3QKKwkgKiBXZSBuZWVkIHRvIGtub3cgd2hhdCB0aGV5IGFyZSBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSBiZWNhdXNlCisJICogdGhlIGZ1bmN0aW9uIG5hbWUgcGFyYW1ldGVyIG1pZ2h0IGdldCBmcmVlZCBsYXRlciBvbi4KKwkgKi8KKwlpZiAoIXN0cmNtcChuYW1lLCAiVFlQRSIpKQorCQlkZXZfdmFyID0gJmRldi0+YmlkX3R5cGU7CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiTEFCRUwiKSkKKwkJZGV2X3ZhciA9ICZkZXYtPmJpZF9sYWJlbDsKKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJVVUlEIikpCisJCWRldl92YXIgPSAmZGV2LT5iaWRfdXVpZDsKKworCXQgPSBibGtpZF9maW5kX3RhZ19kZXYoZGV2LCBuYW1lKTsKKwlpZiAoIXZhbHVlKSB7CisJCWlmICh0KQorCQkJYmxraWRfZnJlZV90YWcodCk7CisJfSBlbHNlIGlmICh0KSB7CisJCWlmICghc3RyY21wKHQtPmJpdF92YWwsIHZhbCkpIHsKKwkJCS8qIFNhbWUgdGhpbmcsIGV4aXQgKi8KKwkJCWZyZWUodmFsKTsKKwkJCXJldHVybiAwOworCQl9CisJCWZyZWUodC0+Yml0X3ZhbCk7CisJCXQtPmJpdF92YWwgPSB2YWw7CisJfSBlbHNlIHsKKwkJLyogRXhpc3RpbmcgdGFnIG5vdCBwcmVzZW50LCBhZGQgdG8gZGV2aWNlICovCisJCWlmICghKHQgPSBibGtpZF9uZXdfdGFnKCkpKQorCQkJZ290byBlcnJvdXQ7CisJCXQtPmJpdF9uYW1lID0gYmxraWRfc3RyZHVwKG5hbWUpOworCQl0LT5iaXRfdmFsID0gdmFsOworCQl0LT5iaXRfZGV2ID0gZGV2OworCisJCWxpc3RfYWRkX3RhaWwoJnQtPmJpdF90YWdzLCAmZGV2LT5iaWRfdGFncyk7CisKKwkJaWYgKGRldi0+YmlkX2NhY2hlKSB7CisJCQloZWFkID0gYmxraWRfZmluZF9oZWFkX2NhY2hlKGRldi0+YmlkX2NhY2hlLAorCQkJCQkJICAgICB0LT5iaXRfbmFtZSk7CisJCQlpZiAoIWhlYWQpIHsKKwkJCQloZWFkID0gYmxraWRfbmV3X3RhZygpOworCQkJCWlmICghaGVhZCkKKwkJCQkJZ290byBlcnJvdXQ7CisKKwkJCQlEQkcoREVCVUdfVEFHLAorCQkJCSAgICBwcmludGYoIiAgICBjcmVhdGluZyBuZXcgY2FjaGUgdGFnIGhlYWQgJXNcbiIsIG5hbWUpKTsKKwkJCQloZWFkLT5iaXRfbmFtZSA9IGJsa2lkX3N0cmR1cChuYW1lKTsKKwkJCQlpZiAoIWhlYWQtPmJpdF9uYW1lKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCQlsaXN0X2FkZF90YWlsKCZoZWFkLT5iaXRfdGFncywKKwkJCQkJICAgICAgJmRldi0+YmlkX2NhY2hlLT5iaWNfdGFncyk7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKCZ0LT5iaXRfbmFtZXMsICZoZWFkLT5iaXRfbmFtZXMpOworCQl9CisJfQorCisJLyogTGluayBjb21tb24gdGFncyBkaXJlY3RseSB0byB0aGUgZGV2aWNlIHN0cnVjdCAqLworCWlmIChkZXZfdmFyKQorCQkqZGV2X3ZhciA9IHZhbDsKKworCWlmIChkZXYtPmJpZF9jYWNoZSkKKwkJZGV2LT5iaWRfY2FjaGUtPmJpY19mbGFncyB8PSBCTEtJRF9CSUNfRkxfQ0hBTkdFRDsKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCWlmICh0KQorCQlibGtpZF9mcmVlX3RhZyh0KTsKKwllbHNlIGZyZWUodmFsKTsKKwlpZiAoaGVhZCkKKwkJYmxraWRfZnJlZV90YWcoaGVhZCk7CisJcmV0dXJuIC1CTEtJRF9FUlJfTUVNOworfQorCisKKy8qCisgKiBQYXJzZSBhICJOQU1FPXZhbHVlIiBzdHJpbmcuICBUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuCisgKiBwYXJzZV90b2tlbiwgYmVjYXVzZSB0aGF0IHdpbGwgZW5kIGFuIHVucXVvdGVkIHZhbHVlIGF0IGEgc3BhY2UsIHdoaWxlCisgKiB0aGlzIHdpbGwgYXNzdW1lIHRoYXQgYW4gdW5xdW90ZWQgdmFsdWUgaXMgdGhlIHJlc3Qgb2YgdGhlIHRva2VuIChlLmcuCisgKiBpZiB3ZSBhcmUgcGFzc2VkIGFuIGFscmVhZHkgcXVvdGVkIHN0cmluZyBmcm9tIHRoZSBjb21tYW5kLWxpbmUgd2UgZG9uJ3QKKyAqIGhhdmUgdG8gYm90aCBxdW90ZSBhbmQgZXNjYXBlIHF1b3RlIHNvIHRoYXQgdGhlIHF1b3RlcyBtYWtlIGl0IHRvCisgKiB1cykuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgYmxraWRfcGFyc2VfdGFnX3N0cmluZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqKnJldF90eXBlLCBjaGFyICoqcmV0X3ZhbCkKK3sKKwljaGFyICpuYW1lLCAqdmFsdWUsICpjcDsKKworCURCRyhERUJVR19UQUcsIHByaW50ZigidHJ5aW5nIHRvIHBhcnNlICclcycgYXMgYSB0YWdcbiIsIHRva2VuKSk7CisKKwlpZiAoIXRva2VuIHx8ICEoY3AgPSBzdHJjaHIodG9rZW4sICc9JykpKQorCQlyZXR1cm4gLTE7CisKKwluYW1lID0gYmxraWRfc3RyZHVwKHRva2VuKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IG5hbWUgKyAoY3AgLSB0b2tlbik7CisJKnZhbHVlKysgPSAnXDAnOworCWlmICgqdmFsdWUgPT0gJyInIHx8ICp2YWx1ZSA9PSAnXCcnKSB7CisJCWNoYXIgYyA9ICp2YWx1ZSsrOworCQlpZiAoIShjcCA9IHN0cnJjaHIodmFsdWUsIGMpKSkKKwkJCWdvdG8gZXJyb3V0OyAvKiBtaXNzaW5nIGNsb3NpbmcgcXVvdGUgKi8KKwkJKmNwID0gJ1wwJzsKKwl9CisJdmFsdWUgPSBibGtpZF9zdHJkdXAodmFsdWUpOworCWlmICghdmFsdWUpCisJCWdvdG8gZXJyb3V0OworCisJKnJldF90eXBlID0gbmFtZTsKKwkqcmV0X3ZhbCA9IHZhbHVlOworCisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlmcmVlKG5hbWUpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRhZyBpdGVyYXRpb24gcm91dGluZXMgZm9yIHRoZSBwdWJsaWMgbGliYmxraWQgaW50ZXJmYWNlLgorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGRvIG5vdCBleHBvc2UgdGhlIGxpc3QuaCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggYXJlIGEKKyAqIGNvbnRhbWluYXRpb24gb2YgdGhlIG5hbWVzcGFjZSwgYW5kIHdoaWNoIGZvcmNlIHVzIHRvIHJldmVhbCBmYXIsIGZhcgorICogdG9vIG11Y2ggb2Ygb3VyIGludGVybmFsIGltcGxlbWVuYXRpb24uICBJJ20gbm90IGNvbnZpbmNlZCBJIHdhbnQKKyAqIHRvIGtlZXAgbGlzdC5oIGluIHRoZSBsb25nIHRlcm0sIGFueXdheS4gIEl0J3MgZmluZSBmb3Iga2VybmVsCisgKiBwcm9ncmFtbWluZywgYnV0IHBlcmZvcm1hbmNlIGlzIG5vdCB0aGUgIzEgcHJpb3JpdHkgZm9yIHRoaXMKKyAqIGxpYnJhcnksIGFuZCBJIHJlYWxseSBkb24ndCBsaWtlIHRoZSB0cmFkZW9mZiBvZiB0eXBlLXNhZmV0eSBmb3IKKyAqIHBlcmZvcm1hbmNlIGZvciB0aGlzIGFwcGxpY2F0aW9uLiAgW3R5dHNvOjIwMDMwMTI1LjIwMDdFU1RdCisgKi8KKworLyoKKyAqIFRoaXMgc2VyaWVzIG9mIGZ1bmN0aW9ucyBpdGVyYXRlIG92ZXIgYWxsIHRhZ3MgaW4gYSBkZXZpY2UKKyAqLworI2RlZmluZSBUQUdfSVRFUkFURV9NQUdJQwkweDAxYTUyODRjCisKK3N0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnX2l0ZXJhdGUgeworCWludAkJCW1hZ2ljOworCWJsa2lkX2RldgkJZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJKnA7Cit9OworCitleHRlcm4gYmxraWRfdGFnX2l0ZXJhdGUgYmxraWRfdGFnX2l0ZXJhdGVfYmVnaW4oYmxraWRfZGV2IGRldikKK3sKKwlibGtpZF90YWdfaXRlcmF0ZQlpdGVyOworCisJaXRlciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGJsa2lkX3N0cnVjdF90YWdfaXRlcmF0ZSkpOworCWlmIChpdGVyKSB7CisJCWl0ZXItPm1hZ2ljID0gVEFHX0lURVJBVEVfTUFHSUM7CisJCWl0ZXItPmRldiA9IGRldjsKKwkJaXRlci0+cAk9IGRldi0+YmlkX3RhZ3MubmV4dDsKKwl9CisJcmV0dXJuIChpdGVyKTsKK30KKworLyoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisgKi8KK2V4dGVybiBpbnQgYmxraWRfdGFnX25leHQoYmxraWRfdGFnX2l0ZXJhdGUgaXRlciwKKwkJCSAgY29uc3QgY2hhciAqKnR5cGUsIGNvbnN0IGNoYXIgKip2YWx1ZSkKK3sKKwlibGtpZF90YWcgdGFnOworCisJKnR5cGUgPSAwOworCSp2YWx1ZSA9IDA7CisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IFRBR19JVEVSQVRFX01BR0lDIHx8CisJICAgIGl0ZXItPnAgPT0gJml0ZXItPmRldi0+YmlkX3RhZ3MpCisJCXJldHVybiAtMTsKKwl0YWcgPSBsaXN0X2VudHJ5KGl0ZXItPnAsIHN0cnVjdCBibGtpZF9zdHJ1Y3RfdGFnLCBiaXRfdGFncyk7CisJKnR5cGUgPSB0YWctPmJpdF9uYW1lOworCSp2YWx1ZSA9IHRhZy0+Yml0X3ZhbDsKKwlpdGVyLT5wID0gaXRlci0+cC0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgYmxraWRfdGFnX2l0ZXJhdGVfZW5kKGJsa2lkX3RhZ19pdGVyYXRlIGl0ZXIpCit7CisJaWYgKCFpdGVyIHx8IGl0ZXItPm1hZ2ljICE9IFRBR19JVEVSQVRFX01BR0lDKQorCQlyZXR1cm47CisJaXRlci0+bWFnaWMgPSAwOworCWZyZWUoaXRlcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkZXZpY2Ugd2hpY2ggbWF0Y2hlcyBhIHBhcnRpY3VsYXIKKyAqIHR5cGUvdmFsdWUgcGFpci4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUKKyAqIHNlYXJjaCBzcGVjaWZpY2F0aW9uLCBpdCByZXR1cm5zIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eQorICogdmFsdWUuICBUaGlzIGFsbG93cyB1cyB0byBnaXZlIHByZWZlcmVuY2UgdG8gRVZNUyBvciBMVk0gZGV2aWNlcy4KKyAqLworZXh0ZXJuIGJsa2lkX2RldiBibGtpZF9maW5kX2Rldl93aXRoX3RhZyhibGtpZF9jYWNoZSBjYWNoZSwKKwkJCQkJIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJCSBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlibGtpZF90YWcJaGVhZDsKKwlibGtpZF9kZXYJZGV2OworCWludAkJcHJpOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJaW50CQlwcm9iZV9uZXcgPSAwOworCisJaWYgKCFjYWNoZSB8fCAhdHlwZSB8fCAhdmFsdWUpCisJCXJldHVybiBOVUxMOworCisJYmxraWRfcmVhZF9jYWNoZShjYWNoZSk7CisKKwlEQkcoREVCVUdfVEFHLCBwcmludGYoImxvb2tpbmcgZm9yICVzPSVzIGluIGNhY2hlXG4iLCB0eXBlLCB2YWx1ZSkpOworCit0cnlfYWdhaW46CisJcHJpID0gLTE7CisJZGV2ID0gMDsKKwloZWFkID0gYmxraWRfZmluZF9oZWFkX2NhY2hlKGNhY2hlLCB0eXBlKTsKKworCWlmIChoZWFkKSB7CisJCWxpc3RfZm9yX2VhY2gocCwgJmhlYWQtPmJpdF9uYW1lcykgeworCQkJYmxraWRfdGFnIHRtcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJsa2lkX3N0cnVjdF90YWcsCisJCQkJCQkgICBiaXRfbmFtZXMpOworCisJCQlpZiAoIXN0cmNtcCh0bXAtPmJpdF92YWwsIHZhbHVlKSAmJgorCQkJICAgICh0bXAtPmJpdF9kZXYtPmJpZF9wcmkgPiBwcmkpICYmCisJCQkgICAgIWFjY2Vzcyh0bXAtPmJpdF9kZXYtPmJpZF9uYW1lLCBGX09LKSkgeworCQkJCWRldiA9IHRtcC0+Yml0X2RldjsKKwkJCQlwcmkgPSBkZXYtPmJpZF9wcmk7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldiAmJiAhKGRldi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKSkgeworCQlkZXYgPSBibGtpZF92ZXJpZnkoY2FjaGUsIGRldik7CisJCWlmICghZGV2IHx8IChkZXYgJiYgKGRldi0+YmlkX2ZsYWdzICYgQkxLSURfQklEX0ZMX1ZFUklGSUVEKSkpCisJCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisKKwlpZiAoIWRldiAmJiAhcHJvYmVfbmV3KSB7CisJCWlmIChibGtpZF9wcm9iZV9hbGxfbmV3KGNhY2hlKSA8IDApCisJCQlyZXR1cm4gTlVMTDsKKwkJcHJvYmVfbmV3Kys7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghZGV2ICYmICEoY2FjaGUtPmJpY19mbGFncyAmIEJMS0lEX0JJQ19GTF9QUk9CRUQpKSB7CisJCWlmIChibGtpZF9wcm9iZV9hbGwoY2FjaGUpIDwgMCkKKwkJCXJldHVybiBOVUxMOworCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisJcmV0dXJuIGRldjsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKwordm9pZCB1c2FnZShjaGFyICpwcm9nKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstZiBibGtpZF9maWxlXSBbLW0gZGVidWdfbWFza10gZGV2aWNlICIKKwkJIlt0eXBlIHZhbHVlXVxuIiwKKwkJcHJvZyk7CisJZnByaW50ZihzdGRlcnIsICJcdExpc3QgYWxsIHRhZ3MgZm9yIGEgZGV2aWNlIGFuZCBleGl0XG4iKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmxraWRfdGFnX2l0ZXJhdGUJaXRlcjsKKwlibGtpZF9jYWNoZSAJCWNhY2hlID0gTlVMTDsKKwlibGtpZF9kZXYJCWRldjsKKwlpbnQJCQljLCByZXQsIGZvdW5kOworCWludAkJCWZsYWdzID0gQkxLSURfREVWX0ZJTkQ7CisJY2hhcgkJCSp0bXA7CisJY2hhcgkJCSpmaWxlID0gTlVMTDsKKwljaGFyCQkJKmRldm5hbWUgPSBOVUxMOworCWNoYXIJCQkqc2VhcmNoX3R5cGUgPSBOVUxMOworCWNoYXIJCQkqc2VhcmNoX3ZhbHVlID0gTlVMTDsKKwljb25zdCBjaGFyCQkqdHlwZSwgKnZhbHVlOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAibTpmOiIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICdmJzoKKwkJCWZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlibGtpZF9kZWJ1Z19tYXNrID0gc3RydG91bCAob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGRlYnVnIG1hc2s6ICVzXG4iLAorCQkJCQlvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQl1c2FnZShhcmd2WzBdKTsKKwkJfQorCWlmIChhcmdjID4gb3B0aW5kKQorCQlkZXZuYW1lID0gYXJndltvcHRpbmQrK107CisJaWYgKGFyZ2MgPiBvcHRpbmQpCisJCXNlYXJjaF90eXBlID0gYXJndltvcHRpbmQrK107CisJaWYgKGFyZ2MgPiBvcHRpbmQpCisJCXNlYXJjaF92YWx1ZSA9IGFyZ3Zbb3B0aW5kKytdOworCWlmICghZGV2bmFtZSB8fCAoYXJnYyAhPSBvcHRpbmQpKQorCQl1c2FnZShhcmd2WzBdKTsKKworCWlmICgocmV0ID0gYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgZmlsZSkpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogZXJyb3IgY3JlYXRpbmcgY2FjaGUgKCVkKVxuIiwKKwkJCWFyZ3ZbMF0sIHJldCk7CisJCWV4aXQoMSk7CisJfQorCisJZGV2ID0gYmxraWRfZ2V0X2RldihjYWNoZSwgZGV2bmFtZSwgZmxhZ3MpOworCWlmICghZGV2KSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IENhbiBub3QgZmluZCBkZXZpY2UgaW4gYmxraWQgY2FjaGVcbiIsCisJCQlkZXZuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNlYXJjaF90eXBlKSB7CisJCWZvdW5kID0gYmxraWRfZGV2X2hhc190YWcoZGV2LCBzZWFyY2hfdHlwZSwgc2VhcmNoX3ZhbHVlKTsKKwkJcHJpbnRmKCJEZXZpY2UgJXM6ICglcywgJXMpICVzXG4iLCBibGtpZF9kZXZfZGV2bmFtZShkZXYpLAorCQkgICAgICAgc2VhcmNoX3R5cGUsIHNlYXJjaF92YWx1ZSA/IHNlYXJjaF92YWx1ZSA6ICJOVUxMIiwKKwkJICAgICAgIGZvdW5kID8gIkZPVU5EIiA6ICJOT1QgRk9VTkQiKTsKKwkJcmV0dXJuKCFmb3VuZCk7CisJfQorCXByaW50ZigiRGV2aWNlICVzLi4uXG4iLCBibGtpZF9kZXZfZGV2bmFtZShkZXYpKTsKKworCWl0ZXIgPSBibGtpZF90YWdfaXRlcmF0ZV9iZWdpbihkZXYpOworCXdoaWxlIChibGtpZF90YWdfbmV4dChpdGVyLCAmdHlwZSwgJnZhbHVlKSA9PSAwKSB7CisJCXByaW50ZigiXHRUYWcgJXMgaGFzIHZhbHVlICVzXG4iLCB0eXBlLCB2YWx1ZSk7CisJfQorCWJsa2lkX3RhZ19pdGVyYXRlX2VuZChpdGVyKTsKKworCWJsa2lkX3B1dF9jYWNoZShjYWNoZSk7CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0X3Byb2JlLmluIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0X3Byb2JlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2VkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RfcHJvYmUuaW4KQEAgLTAsMCArMSw2MiBAQAorCitURVNUUz0kKgorCitpZiB0ZXN0ICIkVEVTVFMieCA9IHggOyB0aGVuCisJZm9yIGkgaW4gJFNSQ0RJUi90ZXN0cy8qLmltZy5iejIKKwlkbworCQlURVNUUz0iJFRFU1RTIGBiYXNlbmFtZSAkaSAuaW1nLmJ6MmAiCisJZG9uZQorZmkKKworbWtkaXIgLXAgdGVzdHMvdG1wCisKK2ZvciBpIGluICRURVNUUworZG8KKwlwcmludGYgIiVzOiAiICRpCisJUkVTVUxUUz0kU1JDRElSL3Rlc3RzLyRpLnJlc3VsdHMKKwlJTUFHRV9CWjI9JFNSQ0RJUi90ZXN0cy8kaS5pbWcuYnoyCisJSU1BR0U9dGVzdHMvdG1wLyRpLmltZy4kJAorCWlmIHRlc3QgISAtZiAkSU1BR0VfQloyIC1hICEgLWYgJFJFU1VMVFMgOworCXRoZW4KKwkJZWNobyAibm9uLWV4aXN0ZW50IgorCQljb250aW51ZQorCWZpCisJaWYgWyAiJGkiID0gInN3YXAwIiBdOyB0aGVuCisJCSMgc3dhcCBpcyBuYXRpdmUtZW5kaWFuLCBzbyByZWdlbmVyYXRlIGJlZm9yZSB0ZXN0aW5nCisJCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTZrIGNvdW50PTY0IDI+IC9kZXYvbnVsbAorCQlta3N3YXAgLXYwICRJTUFHRSA+IC9kZXYvbnVsbAorCWVsaWYgWyAiJGkiID0gInN3YXAxIiBdOyB0aGVuCisJCSMgc3dhcCBpcyBuYXRpdmUtZW5kaWFuLCBzbyByZWdlbmVyYXRlIGJlZm9yZSB0ZXN0aW5nCisJCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTZrIGNvdW50PTY0IDI+IC9kZXYvbnVsbAorCQkjIGNoZWNrIGlmIG1rc3dhcCBzdXBwb3J0cyB0aGUgIi1VIiBvcHRpb24KKwkJaWYgbWtzd2FwIC1oIDI+JjEgfCBncmVwIC1xIC0tICctVSc7IHRoZW4KKwkJCVVVSUQ9Ii1VIDhmZjhlNzdmLTg1NTMtNDg1ZS04NjU2LTU4YmU2N2E4MTY2NiIKKwkJZWxzZQorCQkJUk1VVUlEPSJ8IGdyZXAgLXYgVVVJRCIKKwkJCVJFU19UTVA9JFNSQ0RJUi90ZXN0cy90bXAvJGkucmVzdWx0cworCQkJZ3JlcCAtdiBVVUlEICRSRVNVTFRTID4gJFJFU19UTVAKKwkJCVJFU1VMVFM9JFJFU19UTVAKKwkJZmkKKwkJbWtzd2FwIC12MSAtTCBTV0FQLVRFU1QgJFVVSUQgJElNQUdFID4vZGV2L251bGwKKwllbHNlCisJCWJ1bnppcDIgPCAkSU1BR0VfQloyID4gJElNQUdFCisJZmkKKwlldmFsIC4vdHN0X3Byb2JlICRJTUFHRSAkUk1VVUlEID4gdGVzdHMvJGkub3V0CisJcm0gLWYgJElNQUdFIHRlc3RzLyRpLm9rIHRlc3RzLyRpLmZhaWxlZAorCWNtcCAtcyB0ZXN0cy8kaS5vdXQgJFJFU1VMVFMKKwl1bnNldCBSTVVVSUQKKwlpZiBbICQ/ID0gMCBdOyAgdGhlbgorCQllY2hvIG9rCisJCXRvdWNoIHRlc3RzLyRpLm9rCisJZWxzZQkKKwkJZWNobyBmYWlsZWQKKwkJZGlmZiAtYyB0ZXN0cy8kaS5vdXQgJFJFU1VMVFMgPiB0ZXN0cy8kaS5mYWlsZWQKKwlmaQorZG9uZQorCitudW1fb2s9YGxzIHRlc3RzLyoub2sgMj4vZGV2L251bGwgfCB3YyAtbGAKK251bV9mYWlsZWQ9YGxzIHRlc3RzLyouZmFpbGVkIDI+L2Rldi9udWxsIHwgd2MgLWxgCisKK2VjaG8gIiRudW1fb2sgdGVzdHMgc3VjY2VlZGVkCSRudW1fZmFpbGVkIHRlc3RzIGZhaWxlZCIKKwordGVzdCAiJG51bV9mYWlsZWQiIC1lcSAwIHx8IGV4aXQgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9jcmFtZnMuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvY3JhbWZzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzODExNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvY3JhbWZzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9jcmFtZnMucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvY3JhbWZzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ZDllMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvY3JhbWZzLnJlc3VsdHMKQEAgLTAsMCArMSwyIEBACitUWVBFPSdjcmFtZnMnCitMQUJFTD0ndGVzdC1jcmFtJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQyLmltZy5iejIgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2V4dDIuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTgxMWNlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQyLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQyLnJlc3VsdHMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2V4dDIucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE3YTJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQyLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSdleHQyJworTEFCRUw9J3Rlc3QtZXh0MicKK1VVSUQ9JzIyZjBlYWMzLTVjODktNGVjMS05MDc2LTYwNzk5MTE5YWFlYScKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZXh0My5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5NDU5OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZXh0My5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZXh0My5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9leHQzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMjI1MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZXh0My5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0nZXh0MycKK0xBQkVMPSd0ZXN0LWV4dDMnCitVVUlEPSczNWY2NmRhYi00NzdlLTQwOTAtYTg3Mi05NWVlMGU0OTNhZDYnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdC5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9mYXQuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE3ZjJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9mYXQuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdC5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9mYXQucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQxODcyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9mYXQucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J3ZmYXQnCitMQUJFTD0nVEVTVC1GQVQnCitVVUlEPSdERUFELUJFRUYnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdDMyX2xhYmVsXzY0TUIuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzYyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdDMyX2xhYmVsXzY0TUIuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdDMyX2xhYmVsXzY0TUIucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvZmF0MzJfbGFiZWxfNjRNQi5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjU2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2ZhdDMyX2xhYmVsXzY0TUIucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J3ZmYXQnCitMQUJFTD0nQklOR08nCitVVUlEPSc4Q0I1LUJBNDknCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2lzby5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9pc28uaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZiNmFkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9pc28uaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2lzby5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9pc28ucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVkMWRjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9pc28ucmVzdWx0cwpAQCAtMCwwICsxLDIgQEAKK1RZUEU9J2lzbzk2NjAnCitMQUJFTD0ndGVzdC1pc28nCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2piZC5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9qYmQuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ3ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9qYmQuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2piZC5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9qYmQucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQzMDg5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9qYmQucmVzdWx0cwpAQCAtMCwwICsxLDIgQEAKK1RZUEU9J2piZCcKK1VVSUQ9JzBkN2EwN2RmLTdiMDYtNDgyOS1iY2U3LTNiOWMzZWNlNTcwYycKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvamZzLmltZy5iejIgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2pmcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2pmcy5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvamZzLnJlc3VsdHMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2pmcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzUyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL2pmcy5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0namZzJworTEFCRUw9J3Rlc3QtamZzJworVVVJRD0nOWJmN2I4MmUtNzU4My00Yzc0LTk5YTQtMTg5YTY5MWYyN2I1JwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9taW5peC5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9taW5peC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMWYzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL21pbml4LmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9taW5peC5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9taW5peC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjQ0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL21pbml4LnJlc3VsdHMKQEAgLTAsMCArMSBAQAorVFlQRT0nbWluaXgnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLmltZy5iejIgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhZDkxNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvb2NmczIuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLnJlc3VsdHMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL29jZnMyLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YWZhMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvb2NmczIucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J29jZnMyJworTEFCRUw9J3Rlc3Qtb2NmczInCitVVUlEPSc2YjZiZmJlYS0zYTc5LTRmMGMtYjE2Ni1hMjA3NzYxMDI0NDUnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjMuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDJiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjMuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjMucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvcmVpc2VyMy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2JiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjMucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J3JlaXNlcmZzJworTEFCRUw9J1RFU1RSRUlTRVInCitVVUlEPSc5ZWZlNzg2My1iMTI0LTQ2ZGMtYWQ2OC04ZWNkMDQyMzBhN2InCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjQuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGQxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjQuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjQucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvcmVpc2VyNC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTIyODkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JlaXNlcjQucmVzdWx0cwpAQCAtMCwwICsxLDMgQEAKK1RZUEU9J3JlaXNlcjQnCitMQUJFTD0nVEVTVFI0JworVVVJRD0nOTcyMjYzM2MtZDY5YS00ODgxLWIxYzgtYmVkZWNiYmYzOWQyJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTMxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JvbWZzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9yb21mcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTg2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3JvbWZzLnJlc3VsdHMKQEAgLTAsMCArMSwyIEBACitUWVBFPSdyb21mcycKK0xBQkVMPSd0ZXN0LXJvbWZzJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTBmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3NtYWxsLWZhdDMyLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zbWFsbC1mYXQzMi5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWViZjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3NtYWxsLWZhdDMyLnJlc3VsdHMKQEAgLTAsMCArMSwzIEBACitUWVBFPSd2ZmF0JworTEFCRUw9J1RFU1RWRkFUJworVVVJRD0nMTQyMy1BQUUxJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWUzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3N3YXAwLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMC5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDJhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3N3YXAwLnJlc3VsdHMKQEAgLTAsMCArMSBAQAorVFlQRT0nc3dhcCcKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvc3dhcDEuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvc3dhcDEuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmFiOWVkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMS5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvc3dhcDEucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvc3dhcDEucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTA0ZTVkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy9zd2FwMS5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0nc3dhcCcKK0xBQkVMPSdTV0FQLVRFU1QnCitVVUlEPSc4ZmY4ZTc3Zi04NTUzLTQ4NWUtODY1Ni01OGJlNjdhODE2NjYnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3VkZi5pbWcuYnoyIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy91ZGYuaW1nLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDJkZWIwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy91ZGYuaW1nLmJ6MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3VkZi5yZXN1bHRzIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy91ZGYucmVzdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdhYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy91ZGYucmVzdWx0cwpAQCAtMCwwICsxLDIgQEAKK1RZUEU9J3VkZicKK0xBQkVMPSd0ZXN0LXVkZicKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMveGZzLmltZy5iejIgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3hmcy5pbWcuYnoyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjk4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3hmcy5pbWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMveGZzLnJlc3VsdHMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3hmcy5yZXN1bHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZThkODgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3Rlc3RzL3hmcy5yZXN1bHRzCkBAIC0wLDAgKzEsMyBAQAorVFlQRT0neGZzJworTEFCRUw9J3Rlc3QteGZzJworVVVJRD0nOGM4YTBhNWEtOWY1Ny00OTJlLTk2MTAtNDVhNjFmMzhmNThhJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy96ZnMuaW1nLmJ6MiBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvemZzLmltZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNDQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvemZzLmltZy5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90ZXN0cy96ZnMucmVzdWx0cyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvemZzLnJlc3VsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmOGZiOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdGVzdHMvemZzLnJlc3VsdHMKQEAgLTAsMCArMSBAQAorVFlQRT0nemZzJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC90c3RfdHlwZXMuYyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdHN0X3R5cGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwM2M4YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvYmxraWQvdHN0X3R5cGVzLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgdGhlIGJsa2lkX3R5cGVzIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAiYmxraWQvYmxraWRfdHlwZXMuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoc2l6ZW9mKF9fdTgpICE9IDEpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191OCkgaXMgJWQgc2hvdWxkIGJlIDFcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3U4KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zOCkgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfczgpIGlzICVkIHNob3VsZCBiZSAxXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zOCkpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fdTE2KSAhPSAyKSB7CisJCXByaW50ZigiU2l6ZW9mKF9fdTE2KSBpcyAlZCBzaG91bGQgYmUgMlxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fdTE2KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zMTYpICE9IDIpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19zMTYpIGlzICVkIHNob3VsZCBiZSAyXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zMTYpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3UzMikgIT0gNCkgeworCQlwcmludGYoIlNpemVvZihfX3UzMikgaXMgJWQgc2hvdWxkIGJlIDRcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3UzMikpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fczMyKSAhPSA0KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fczMyKSBpcyAlZCBzaG91bGQgYmUgNFxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fczMyKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX191NjQpICE9IDgpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191NjQpIGlzICVkIHNob3VsZCBiZSA4XG4iLAorCQkgICAgICAgKGludClzaXplb2YoX191NjQpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3M2NCkgIT0gOCkgeworCQlwcmludGYoIlNpemVvZihfX3M2NCkgaXMgJWQgc2hvdWxkIGJlIDhcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3M2NCkpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIlRoZSBibGtpZF90eXBlcy5oIHR5cGVzIGFyZSBjb3JyZWN0LlxuIik7CisJZXhpdCgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ibGtpZC92ZXJzaW9uLmMgYi9lMmZzcHJvZ3MvbGliL2Jsa2lkL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc1NGZhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ibGtpZC92ZXJzaW9uLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIHZlcnNpb24uYyAtLS0gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBibGtpZCBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8YmxraWQvYmxraWQuaD4KKyNpbmNsdWRlICIuLi8uLi92ZXJzaW9uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJfdmVyc2lvbiA9IEUyRlNQUk9HU19WRVJTSU9OOworc3RhdGljIGNvbnN0IGNoYXIgKmxpYl9kYXRlID0gRTJGU1BST0dTX0RBVEU7CisKK2ludCBibGtpZF9wYXJzZV92ZXJzaW9uX3N0cmluZyhjb25zdCBjaGFyICp2ZXJfc3RyaW5nKQoreworCWNvbnN0IGNoYXIgKmNwOworCWludCB2ZXJzaW9uID0gMDsKKworCWZvciAoY3AgPSB2ZXJfc3RyaW5nOyAqY3A7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnLicpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2RpZ2l0KCpjcCkpCisJCQlicmVhazsKKwkJdmVyc2lvbiA9ICh2ZXJzaW9uICogMTApICsgKCpjcCAtICcwJyk7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCitpbnQgYmxraWRfZ2V0X2xpYnJhcnlfdmVyc2lvbihjb25zdCBjaGFyICoqdmVyX3N0cmluZywKKwkJCSAgICAgICBjb25zdCBjaGFyICoqZGF0ZV9zdHJpbmcpCit7CisJaWYgKHZlcl9zdHJpbmcpCisJCSp2ZXJfc3RyaW5nID0gbGliX3ZlcnNpb247CisJaWYgKGRhdGVfc3RyaW5nKQorCQkqZGF0ZV9zdHJpbmcgPSBsaWJfZGF0ZTsKKworCXJldHVybiBibGtpZF9wYXJzZV92ZXJzaW9uX3N0cmluZyhsaWJfdmVyc2lvbik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2NvbmZpZy5oLmluIGIvZTJmc3Byb2dzL2xpYi9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTAwYTJjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9jb25maWcuaC5pbgpAQCAtMCwwICsxLDYyMyBAQAorLyogbGliL2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisjdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisKKy8qIERlZmluZSB0byAxIGlmIGRlYnVnZ2luZyB0aGUgYmxraWQgbGlicmFyeSAqLworI3VuZGVmIENPTkZJR19CTEtJRF9ERUJVRworCisvKiBEZWZpbmUgdG8gMSB0byBjb21waWxlIGZpbmRmcyAqLworI3VuZGVmIENPTkZJR19CVUlMRF9GSU5ERlMKKworLyogRGVmaW5lIHRvIDEgaWYgZGVidWdnaW5nIGV4dDMvNCBqb3VybmFsIGNvZGUgKi8KKyN1bmRlZiBDT05GSUdfSkJEX0RFQlVHCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBxdW90YSBzdXBwb3J0ICovCisjdW5kZWYgQ09ORklHX1FVT1RBCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0ZXN0aW8gSS9PIG1hbmFnZXIgc2hvdWxkIGJlIGVuYWJsZWQgKi8KKyN1bmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcnLCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMuIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9zZSBzeXN0ZW1zLgorICAgKi8KKyN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORAorCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworI3VuZGVmIENfQUxMT0NBCisKKy8qIERlZmluZSB0byAxIHRvIGRpc2FibGUgdXNlIG9mIGJhY2t0cmFjZSAqLworI3VuZGVmIERJU0FCTEVfQkFDS1RSQUNFCisKKy8qIERlZmluZSB0byAxIGlmIGV4dDIgY29tcHJlc3Npb24gZW5hYmxlZCAqLworI3VuZGVmIEVOQUJMRV9DT01QUkVTU0lPTgorCisvKiBEZWZpbmUgdG8gMSBpZiBleHQzLzQgaHRyZWUgc3VwcG9ydCBlbmFibGVkICovCisjdW5kZWYgRU5BQkxFX0hUUkVFCisKKy8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyN1bmRlZiBFTkFCTEVfTkxTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGBhbGxvY2EnLCBhcyBhIGZ1bmN0aW9uIG9yIG1hY3JvLiAqLworI3VuZGVmIEhBVkVfQUxMT0NBCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIDxhbGxvY2EuaD4gYW5kIGl0IHNob3VsZCBiZSB1c2VkIChub3Qgb24gVWx0cml4KS4KKyAgICovCisjdW5kZWYgSEFWRV9BTExPQ0FfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFyZ3ouaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BUkdaX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc3ByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BU1BSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJhY2t0cmFjZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CQUNLVFJBQ0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBibGtpZF9wcm9iZV9nZXRfdG9wb2xvZ3knIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQkxLSURfUFJPQkVfR0VUX1RPUE9MT0dZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hmbGFncycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DSEZMQUdTCisKKy8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCisgICAqLworI3VuZGVmIEhBVkVfRENHRVRURVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZmVvZl91bmxvY2tlZCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBmZ2V0c191bmxvY2tlZCcsIGFuZCB0byAwIGlmCisgICB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgZ2V0Y191bmxvY2tlZCcsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBfc25wcmludGYnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9fU05QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBfc253cHJpbnRmJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RJUkVOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIGRsb3Blbi9saWJkbCBleGlzdHMgKi8KKyN1bmRlZiBIQVZFX0RMT1BFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgZG9uJ3QgaGF2ZSBgdnByaW50ZicgYnV0IGRvIGhhdmUgYF9kb3BybnQuJyAqLworI3VuZGVmIEhBVkVfRE9QUk5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FUlJOT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXhlY2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FWEVDSU5GT19ICisKKy8qIERlZmluZSB0byAxIGlmIEV4dDIgaW9jdGxzIHByZXNlbnQgKi8KKyN1bmRlZiBIQVZFX0VYVDJfSU9DVExTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmFsbG9jYXRlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZBTExPQ0FURQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZhbGxvY2F0ZTY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZBTExPQ0FURTY0CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZDSE9XTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZkYXRhc3luYycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GREFUQVNZTkMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmc3RhdDY0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZTVEFUNjQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdHJ1bmNhdGU2NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GVFJVTkNBVEU2NAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ3cHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZXUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVENXRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGR0YWJsZXNpemUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURFRBQkxFU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGVnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURUdJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGV1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURVVJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRtbnRpbmZvJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVE1OVElORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9HRVRPUFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHd1aWRfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQV1VJRF9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJMSU1JVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJ1c2FnZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRSVVNBR0UKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCisjdW5kZWYgSEFWRV9HRVRURVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVJRAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JQ09OVgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4gKi8KKyN1bmRlZiBIQVZFX0lOVE1BWF9UCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnRwdHJfdCcuICovCisjdW5kZWYgSEFWRV9JTlRQVFJfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZAorICAgZGVjbGFyZXMgdWludG1heF90LiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBqcmFuZDQ4JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0pSQU5ENDgKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuICovCisjdW5kZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisKKy8qIERlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLiAqLworI3VuZGVmIEhBVkVfTENfTUVTU0FHRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU1JVFNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2ZhbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0ZBTExPQ19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvZmQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9GRF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbWFqb3IuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9NQUpPUl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGxzZWVrJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xMU0VFSworCisvKiBEZWZpbmUgdG8gMSBpZiBsbHNlZWsgZGVjbGFyZWQgaW4gdW5pc3RkLmggKi8KKyN1bmRlZiBIQVZFX0xMU0VFS19QUk9UT1RZUEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MT0NBTEVfSAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX0xPTkdfRE9VQkxFCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2xvbmcgbG9uZycgdHlwZS4gKi8KKyN1bmRlZiBIQVZFX0xPTkdfTE9ORworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxzZWVrNjQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTFNFRUs2NAorCisvKiBEZWZpbmUgdG8gMSBpZiBsc2VlazY0IGRlY2xhcmVkIGluIHVuaXN0ZC5oICovCisjdW5kZWYgSEFWRV9MU0VFSzY0X1BST1RPVFlQRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1hbGxpbmZvJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01BTExJTkZPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUFMTE9DX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYnN0b3djcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NQlNUT1dDUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWFsaWduJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTUFMSUdOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1wY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTVBDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtbWFwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01NQVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtbnRlbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NTlRFTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1zeW5jJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01TWU5DCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXVubWFwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01VTk1BUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5hbm9zbGVlcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9OQU5PU0xFRVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmX2RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUX0lGX0RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5sX3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkxfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW42NCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9PUEVONjQKKworLyogRGVmaW5lIHRvIDEgaWYgb3B0cmVzZXQgZm9yIGdldG9wdCBpcyBwcmVzZW50ICovCisjdW5kZWYgSEFWRV9PUFRSRVNFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBhdGhjb25mJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BBVEhDT05GCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGF0aHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QQVRIU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfZmFkdmlzZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT1NJWF9GQURWSVNFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfTUVNQUxJR04KKworLyogRGVmaW5lIGlmIHlvdXIgcHJpbnRmKCkgZnVuY3Rpb24gc3VwcG9ydHMgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuICovCisjdW5kZWYgSEFWRV9QT1NJWF9QUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmN0bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QUkNUTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dGVudicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QVVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgZGlyZW50IGhhcyBkX3JlY2xlbiAqLworI3VuZGVmIEhBVkVfUkVDTEVOX0RJUkVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiBpZiBzdHJ1Y3Qgc29ja2FkZHIgY29udGFpbnMgc2FfbGVuICovCisjdW5kZWYgSEFWRV9TQV9MRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWN1cmVfZ2V0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFQ1VSRV9HRVRFTlYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZW1hcGhvcmUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TRU1BUEhPUkVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiBzZW1faW5pdCgpIGV4aXN0cyAqLworI3VuZGVmIEhBVkVfU0VNX0lOSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2V0am1wLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0VUSk1QX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUTE9DQUxFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bW50ZW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVE1OVEVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlc2dpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRSRVNHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXN1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVTVUlECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0lHTkFMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzbnByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TTlBSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNyYW5kb20nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1JBTkRPTQorCisvKiBEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgc3RfZmxhZ3MgKi8KKyN1bmRlZiBIQVZFX1NUQVRfRkxBR1MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhcmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERBUkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGRlZi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURERFRl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzCisgICB1aW50bWF4X3QuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cGNweScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFBDUFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRFVQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybmxlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RycHRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSUFRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlRPVUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN5bmNfZmlsZV9yYW5nZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TWU5DX0ZJTEVfUkFOR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeXNjb25mJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NZU0NPTkYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGlza2xhYmVsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Rpc2suaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRElTS19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRklMRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbWtkZXYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfTUtERVZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX01NQU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tb3VudC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19NT1VOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcHJjdGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfUFJDVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9xdWV1ZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19RVUVVRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzY2FsbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TWVNDQUxMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzbWFjcm9zLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NZU01BQ1JPU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1dBSVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9TX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9URVJNSU9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRzZWFyY2gnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVFNFQVJDSAorCisvKiBEZWZpbmUgdG8gMSBpZiBzc2l6ZV90IGRlY2xhcmVkICovCisjdW5kZWYgSEFWRV9UWVBFX1NTSVpFX1QKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndWludG1heF90JyB0eXBlIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LiAqLworI3VuZGVmIEhBVkVfVUlOVE1BWF9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVU5JU1REX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLiAqLworI3VuZGVmIEhBVkVfVU5TSUdORURfTE9OR19MT05HCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXNsZWVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VTTEVFUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmFsbG9jJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1ZBTExPQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZwcmludGYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVlBSSU5URgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLiAqLworI3VuZGVmIEhBVkVfV0NIQVJfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc2xlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XQ1NMRU4KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLiAqLworI3VuZGVmIEhBVkVfV0lOVF9UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX19hcmd6X2NvdW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fQVJHWl9DT1VOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9fYXJnel9uZXh0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fQVJHWl9ORVhUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX19hcmd6X3N0cmluZ2lmeScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX0FSR1pfU1RSSU5HSUZZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX19mc2V0bG9ja2luZycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fX0ZTRVRMT0NLSU5HCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX19zZWN1cmVfZ2V0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19fU0VDVVJFX0dFVEVOVgorCisvKiBEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuICovCisjdW5kZWYgSUNPTlZfQ09OU1QKKworLyogRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS4gKi8KKyN1bmRlZiBJTlRESVYwX1JBSVNFU19TSUdGUEUKKworLyogcGFja2FnZSBuYW1lIGZvciBnZXR0ZXh0ICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuICovCisjdW5kZWYgUFJJX01BQ1JPU19CUk9LRU4KKworLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfSU5UCisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9MT05HCisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX09GRl9UCisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0hPUlQKKworLyogRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUKKyAgIGl0LiAqLworI3VuZGVmIFNJWkVfTUFYCisKKy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQorICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCisgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVudGltZS4KKwlTVEFDS19ESVJFQ1RJT04gPiAwID0+IGdyb3dzIHRvd2FyZCBoaWdoZXIgYWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OIDwgMCA9PiBncm93cyB0b3dhcmQgbG93ZXIgYWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVua25vd24gKi8KKyN1bmRlZiBTVEFDS19ESVJFQ1RJT04KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIFRMUyBzdG9yYWdlIGNsYXNzIGRlZmluZSBpdCB0byB0aGF0IGhlcmUgKi8KKyN1bmRlZiBUTFMKKworLyogRGVmaW5lIHRvIDEgdG8gYnVpbGQgdXVpZGQgKi8KKyN1bmRlZiBVU0VfVVVJREQKKworLyogdmVyc2lvbiBmb3IgZ2V0dGV4dCAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIEFwcGxlIERhcndpbiBsaWJpbnRsIHdvcmthcm91bmQgaXMgbmVlZGVkICovCisjdW5kZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgaW5saW5lCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGBsb25nIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgb2ZmX3QKKworLyogRGVmaW5lIGFzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLCBpZiB0aGUgc3lzdGVtCisgICBkb2Vzbid0IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBwdHJkaWZmX3QKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBDIGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGtleXdvcmQuICovCisjdW5kZWYgc2lnbmVkCisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nIGlmIDxzdGRpbnQuaD4gYW5kCisgICA8aW50dHlwZXMuaD4gZG9uJ3QgZGVmaW5lLiAqLworI3VuZGVmIHVpbnRtYXhfdAorCisjaW5jbHVkZSAiZGlycGF0aHMuaCIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZGlycGF0aHMuaC5pbiBiL2UyZnNwcm9ncy9saWIvZGlycGF0aHMuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NiNTViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9kaXJwYXRocy5oLmluCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBhdGggbmFtZXMgZm9yIHZhcmlvdXMgZGlyZWN0b3JpZXMgYXMKKyAqIGNvbnRyb2xsZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgKi8KKworLyogV2hlcmUgdG8gcHV0IHRoZSBtZXNzYWdlcyBmaWxlIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIExPQ0FMRURJUgkJIkBkYXRhZGlyQC9sb2NhbGUiCisKKy8qIFdoZXJlIHRvIGZpbmQgdGhlIG1rZTJmcy5jb25mIGFuZCBlMmZzY2suY29uZiBmaWxlcyAqLworI2RlZmluZSBST09UX1NZU0NPTkZESVIJCSJAcm9vdF9zeXNjb25mZGlyQCIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL0FuZHJvaWQubWsgYi9lMmZzcHJvZ3MvbGliL2UycC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWI3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsODcgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworbGliZXh0Ml9lMnBfc3JjX2ZpbGVzIDo9IFwKKwlmZWF0dXJlLmMgXAorCWZnZXRmbGFncy5jIFwKKwlmc2V0ZmxhZ3MuYyBcCisJZmdldHZlcnNpb24uYyBcCisJZnNldHZlcnNpb24uYyBcCisJZ2V0ZmxhZ3MuYyBcCisJZ2V0dmVyc2lvbi5jIFwKKwloYXNoc3RyLmMgXAorCWlvZC5jIFwKKwlscy5jIFwKKwltbnRvcHRzLmMgXAorCXBhcnNlX251bS5jIFwKKwlwZS5jIFwKKwlwZi5jIFwKKwlwcy5jIFwKKwlzZXRmbGFncy5jIFwKKwlzZXR2ZXJzaW9uLmMgXAorCXV1aWQuYyBcCisJb3N0eXBlLmMgXAorCXBlcmNlbnQuYworCitsaWJleHQyX2UycF9jX2luY2x1ZGVzIDo9IGV4dGVybmFsL2UyZnNwcm9ncy9saWIKKworbGliZXh0Ml9lMnBfY2ZsYWdzIDo9IC1PMiAtZyAtVyAtV2FsbCBcCisJLURIQVZFX1VOSVNURF9IIFwKKwktREhBVkVfRVJSTk9fSCBcCisJLURIQVZFX05FVElORVRfSU5fSCBcCisJLURIQVZFX1NZU19JT0NUTF9IIFwKKwktREhBVkVfU1lTX01NQU5fSCBcCisJLURIQVZFX1NZU19NT1VOVF9IIFwKKwktREhBVkVfU1lTX1BSQ1RMX0ggXAorCS1ESEFWRV9TWVNfUkVTT1VSQ0VfSCBcCisJLURIQVZFX1NZU19TRUxFQ1RfSCBcCisJLURIQVZFX1NZU19TVEFUX0ggXAorCS1ESEFWRV9TWVNfVFlQRVNfSCBcCisJLURIQVZFX1NURExJQl9IIFwKKwktREhBVkVfU1RSRFVQIFwKKwktREhBVkVfTU1BUCBcCisJLURIQVZFX1VUSU1FX0ggXAorCS1ESEFWRV9HRVRQQUdFU0laRSBcCisJLURIQVZFX0xTRUVLNjQgXAorCS1ESEFWRV9MU0VFSzY0X1BST1RPVFlQRSBcCisJLURIQVZFX0VYVDJfSU9DVExTIFwKKwktREhBVkVfTElOVVhfRkRfSCBcCisJLURIQVZFX1RZUEVfU1NJWkVfVCBcCisJLURIQVZFX1NZU19USU1FX0ggXAorICAgICAgICAtREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GCisKK2xpYmV4dDJfZTJwX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmMKKworbGliZXh0Ml9lMnBfc3lzdGVtX3N0YXRpY19saWJyYXJpZXMgOj0gbGliYworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9lMnBfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmV4dDJfZTJwX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2UycF9jZmxhZ3MpCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSAkKGxpYmV4dDJfZTJwX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmV4dDJfZTJwCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyX2UycF9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml9lMnBfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJfZTJwX2NmbGFncykKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gJChsaWJleHQyX2UycF9zeXN0ZW1fc3RhdGljX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX2UycAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9lMnBfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmV4dDJfZTJwX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2UycF9jZmxhZ3MpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9lMnAtaG9zdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9saWIvZTJwL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTkyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE4NSBAQAorIyBNYWtlZmlsZSBmb3IgdGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSB1dGlsaXR5IGZ1bmN0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDE5OTMgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorIworIyBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZQorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9lMnAKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK2FsbDo6CWUycC5wYworCitPQkpTPQkJZmVhdHVyZS5vIGZnZXRmbGFncy5vIGZzZXRmbGFncy5vIGZnZXR2ZXJzaW9uLm8gZnNldHZlcnNpb24ubyBcCisJCWdldGZsYWdzLm8gZ2V0dmVyc2lvbi5vIGhhc2hzdHIubyBpb2QubyBscy5vIG1udG9wdHMubyBcCisJCXBhcnNlX251bS5vIHBlLm8gcGYubyBwcy5vIHNldGZsYWdzLm8gc2V0dmVyc2lvbi5vIHV1aWQubyBcCisJCW9zdHlwZS5vIHBlcmNlbnQubworCitTUkNTPQkJJChzcmNkaXIpL2ZlYXR1cmUuYyAkKHNyY2RpcikvZmdldGZsYWdzLmMgXAorCQkkKHNyY2RpcikvZnNldGZsYWdzLmMgJChzcmNkaXIpL2ZnZXR2ZXJzaW9uLmMgXAorCQkkKHNyY2RpcikvZnNldHZlcnNpb24uYyAkKHNyY2RpcikvZ2V0ZmxhZ3MuYyBcCisJCSQoc3JjZGlyKS9nZXR2ZXJzaW9uLmMgJChzcmNkaXIpL2hhc2hzdHIuYyAkKHNyY2RpcikvaW9kLmMgXAorCQkkKHNyY2RpcikvbHMuYyAkKHNyY2RpcikvbW50b3B0cy5jICQoc3JjZGlyKS9wYXJzZV9udW0uYyBcCisJCSQoc3JjZGlyKS9wZS5jICQoc3JjZGlyKS9wZi5jICQoc3JjZGlyKS9wcy5jIFwKKwkJJChzcmNkaXIpL3NldGZsYWdzLmMgJChzcmNkaXIpL3NldHZlcnNpb24uYyAkKHNyY2RpcikvdXVpZC5jIFwKKwkJJChzcmNkaXIpL29zdHlwZS5jICQoc3JjZGlyKS9wZXJjZW50LmMKK0hGSUxFUz0gZTJwLmgKKworTElCUkFSWT0gbGliZTJwCitMSUJESVI9IGUycAorCitFTEZfVkVSU0lPTiA9IDIuMworRUxGX1NPX1ZFUlNJT04gPSAyCitFTEZfSU1BR0UgPSBsaWJlMnAKK0VMRl9NWURJUiA9IGUycAorRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0KKworQlNETElCX1ZFUlNJT04gPSAyLjEKK0JTRExJQl9JTUFHRSA9IGxpYmUycAorQlNETElCX01ZRElSID0gZTJwCitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACitATUFLRUZJTEVfQ0hFQ0tFUkAKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKK0BDSEVDS0VSX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jaGVja2VyIC1nIC1vIGNoZWNrZXIvJCoubyAtYyAkPAorQEVMRl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZlBJQyAtbyBlbGZzaGFyZWQvJCoubyAtYyAkPAorQEJTRExJQl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEJTRExJQl9QSUNfRkxBRykgLW8gcGljLyQqLm8gLWMgJDwKKworZTJwLnBjOiAkKHNyY2RpcikvZTJwLnBjLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvZTJwL2UycC5wYyAuL2NvbmZpZy5zdGF0dXMKKwordHN0X29zdHlwZTogJChzcmNkaXIpL29zdHlwZS5jCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLURURVNUX1BST0dSQU0gLUkkKHRvcF9zcmNkaXIpL2xpYiAtbyB0c3Rfb3N0eXBlIFwKKwkJJChzcmNkaXIpL29zdHlwZS5jICQoQUxMX0NGTEFHUykKKwordHN0X2ZlYXR1cmU6ICQoc3JjZGlyKS9mZWF0dXJlLmMKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtRFRFU1RfUFJPR1JBTSAtSSQodG9wX3NyY2RpcikvbGliIC1vIHRzdF9mZWF0dXJlIFwKKwkJJChzcmNkaXIpL2ZlYXR1cmUuYyAkKEFMTF9DRkxBR1MpCisKK2NoZWNrOjoJdHN0X29zdHlwZSB0c3RfZmVhdHVyZQorCS4vdHN0X29zdHlwZQorCS4vdHN0X2ZlYXR1cmUKKworaW5zdGFsbGRpcnM6OgorCSQoRSkgIglNS0lOU1RBTExESVJTICQobGliZGlyKSAkKGluY2x1ZGVkaXIpL2UycCIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQobGliZGlyKSBcCisJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2UycCAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZworCitpbnN0YWxsOjogYWxsIGluc3RhbGxkaXJzIAorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL2xpYmUycC5hIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGxpYmUycC5hICQoREVTVERJUikkKGxpYmRpcikvbGliZTJwLmEKKwktJChRKSAkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJlMnAuYQorCSQoUSkgJChDSE1PRCkgJChMSUJNT0RFKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmUycC5hCisJJChRKSBzZXQgLWU7IGZvciBpIGluICQoSEZJTEVTKTsgZG8gXAorCSAgZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2UycC8kJGkiOyBcCisJICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9lMnAvJCRpOyBcCisJZG9uZQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL3BrZ2NvbmZpZy9lMnAucGMiCisJJChRKSAkKElOU1RBTExfREFUQSkgZTJwLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL2UycC5wYworCit1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZTJwLmEgXAorCQkkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy9lMnAucGMKKwkkKFJNKSAtcmYgJChERVNURElSKSQoaW5jbHVkZWRpcikvZTJwCisKK2NsZWFuOjoKKwkkKFJNKSAtZiBcIyogKi5zICoubyAqLmEgKn4gKi5iYWsgY29yZSBwcm9maWxlZC8qIGNoZWNrZXIvKgorCSQoUk0pIC1mIC4uL2xpYmUycC5hIC4uL2xpYmUycF9wLmEgdHN0X29zdHlwZSB0c3RfZmVhdHVyZQorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgZTJwLnBjIFwKKwkJJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCiskKE9CSlMpOiBzdWJkaXJzCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworZmVhdHVyZS5vOiAkKHNyY2RpcikvZmVhdHVyZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfdXNlci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmgKK2ZnZXRmbGFncy5vOiAkKHNyY2RpcikvZmdldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2ZzZXRmbGFncy5vOiAkKHNyY2RpcikvZnNldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2ZnZXR2ZXJzaW9uLm86ICQoc3JjZGlyKS9mZ2V0dmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitmc2V0dmVyc2lvbi5vOiAkKHNyY2RpcikvZnNldHZlcnNpb24uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorZ2V0ZmxhZ3MubzogJChzcmNkaXIpL2dldGZsYWdzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK2dldHZlcnNpb24ubzogJChzcmNkaXIpL2dldHZlcnNpb24uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAoraGFzaHN0ci5vOiAkKHNyY2RpcikvaGFzaHN0ci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitpb2QubzogJChzcmNkaXIpL2lvZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitscy5vOiAkKHNyY2RpcikvbHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorbW50b3B0cy5vOiAkKHNyY2RpcikvbW50b3B0cy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitwYXJzZV9udW0ubzogJChzcmNkaXIpL3BhcnNlX251bS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitwZS5vOiAkKHNyY2RpcikvcGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorcGYubzogJChzcmNkaXIpL3BmLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK3BzLm86ICQoc3JjZGlyKS9wcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCitzZXRmbGFncy5vOiAkKHNyY2Rpcikvc2V0ZmxhZ3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaAorc2V0dmVyc2lvbi5vOiAkKHNyY2Rpcikvc2V0dmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCit1dWlkLm86ICQoc3JjZGlyKS91dWlkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJChzcmNkaXIpL2UycC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmgKK29zdHlwZS5vOiAkKHNyY2Rpcikvb3N0eXBlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9lMnAuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmgKK3BlcmNlbnQubzogJChzcmNkaXIpL3BlcmNlbnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2UycC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvZTJwLmggYi9lMmZzcHJvZ3MvbGliL2UycC9lMnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTY4ZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvZTJwLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIGUycC5oIC0tLSBoZWFkZXIgZmlsZSBmb3IgdGhlIGUycCBsaWJyYXJ5CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkvKiBOZWVkZWQgYnkgZGlyZW50Lmggb24gbmV0YnNkICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CisKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfQ09NUEFUCTAKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfSU5DT01QQVQJMQorI2RlZmluZSBFMlBfRkVBVFVSRV9ST19JTkNPTVBBVAkyCisjZGVmaW5lIEUyUF9GRUFUVVJFX1RZUEVfTUFTSwkweDAzCisKKyNkZWZpbmUgRTJQX0ZFQVRVUkVfTkVHQVRFX0ZMQUcJMHg4MAorCisjZGVmaW5lIEUyUF9GU19GRUFUVVJFCQkwCisjZGVmaW5lIEUyUF9KT1VSTkFMX0ZFQVRVUkUJMQorCisvKiBgb3B0aW9ucycgZm9yIHByaW50X2ZsYWdzKCkgKi8KKworI2RlZmluZSBQRk9QVF9MT05HICAxIC8qIE11c3QgYmUgMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGBpbnQgbG9uZ19mb3JtYXQnLiAqLworCisKK2ludCBmZ2V0ZmxhZ3MgKGNvbnN0IGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nICogZmxhZ3MpOworaW50IGZnZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pOworaW50IGZzZXRmbGFncyAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworaW50IGZzZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyB2ZXJzaW9uKTsKK2ludCBnZXRmbGFncyAoaW50IGZkLCB1bnNpZ25lZCBsb25nICogZmxhZ3MpOworaW50IGdldHZlcnNpb24gKGludCBmZCwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pOworaW50IGl0ZXJhdGVfb25fZGlyIChjb25zdCBjaGFyICogZGlyX25hbWUsCisJCSAgICBpbnQgKCpmdW5jKSAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGlyZW50ICosIHZvaWQgKiksCisJCSAgICB2b2lkICogcHJpdmF0ZSk7Cit2b2lkIGxpc3Rfc3VwZXIoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzKTsKK3ZvaWQgbGlzdF9zdXBlcjIoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzLCBGSUxFICpmKTsKK3ZvaWQgcHJpbnRfZnNfZXJyb3JzIChGSUxFICogZiwgdW5zaWduZWQgc2hvcnQgZXJyb3JzKTsKK3ZvaWQgcHJpbnRfZmxhZ3MgKEZJTEUgKiBmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBvcHRpb25zKTsKK3ZvaWQgcHJpbnRfZnNfc3RhdGUgKEZJTEUgKiBmLCB1bnNpZ25lZCBzaG9ydCBzdGF0ZSk7CitpbnQgc2V0ZmxhZ3MgKGludCBmZCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgc2V0dmVyc2lvbiAoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZlcnNpb24pOworCitjb25zdCBjaGFyICplMnBfZmVhdHVyZTJzdHJpbmcoaW50IGNvbXBhdCwgdW5zaWduZWQgaW50IG1hc2spOworY29uc3QgY2hhciAqZTJwX2pybmxfZmVhdHVyZTJzdHJpbmcoaW50IGNvbXBhdCwgdW5zaWduZWQgaW50IG1hc2spOworaW50IGUycF9zdHJpbmcyZmVhdHVyZShjaGFyICpzdHJpbmcsIGludCAqY29tcGF0LCB1bnNpZ25lZCBpbnQgKm1hc2spOworaW50IGUycF9qcm5sX3N0cmluZzJmZWF0dXJlKGNoYXIgKnN0cmluZywgaW50ICpjb21wYXRfdHlwZSwgdW5zaWduZWQgaW50ICptYXNrKTsKK2ludCBlMnBfZWRpdF9mZWF0dXJlKGNvbnN0IGNoYXIgKnN0ciwgX191MzIgKmNvbXBhdF9hcnJheSwgX191MzIgKm9rX2FycmF5KTsKK2ludCBlMnBfZWRpdF9mZWF0dXJlMihjb25zdCBjaGFyICpzdHIsIF9fdTMyICpjb21wYXRfYXJyYXksIF9fdTMyICpva19hcnJheSwKKwkJICAgICAgX191MzIgKmNsZWFyX29rX2FycmF5LCBpbnQgKnR5cGVfZXJyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgKm1hc2tfZXJyKTsKKworaW50IGUycF9pc19udWxsX3V1aWQodm9pZCAqdXUpOwordm9pZCBlMnBfdXVpZF90b19zdHIodm9pZCAqdXUsIGNoYXIgKm91dCk7Citjb25zdCBjaGFyICplMnBfdXVpZDJzdHIodm9pZCAqdXUpOworCitjb25zdCBjaGFyICplMnBfaGFzaDJzdHJpbmcoaW50IG51bSk7CitpbnQgZTJwX3N0cmluZzJoYXNoKGNoYXIgKnN0cmluZyk7CisKK2NvbnN0IGNoYXIgKmUycF9tbnRvcHQyc3RyaW5nKHVuc2lnbmVkIGludCBtYXNrKTsKK2ludCBlMnBfc3RyaW5nMm1udG9wdChjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGludCAqbWFzayk7CitpbnQgZTJwX2VkaXRfbW50b3B0cyhjb25zdCBjaGFyICpzdHIsIF9fdTMyICptbnRvcHRzLCBfX3UzMiBvayk7CisKK3Vuc2lnbmVkIGxvbmcgcGFyc2VfbnVtX2Jsb2Nrcyhjb25zdCBjaGFyICphcmcsIGludCBsb2dfYmxvY2tfc2l6ZSk7Cit1bnNpZ25lZCBsb25nIGxvbmcgcGFyc2VfbnVtX2Jsb2NrczIoY29uc3QgY2hhciAqYXJnLCBpbnQgbG9nX2Jsb2NrX3NpemUpOworCitjaGFyICplMnBfb3Myc3RyaW5nKGludCBvc190eXBlKTsKK2ludCBlMnBfc3RyaW5nMm9zKGNoYXIgKnN0cik7CisKK3Vuc2lnbmVkIGludCBlMnBfcGVyY2VudChpbnQgcGVyY2VudCwgdW5zaWduZWQgaW50IGJhc2UpOwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvZTJwLnBjLmluIGIvZTJmc3Byb2dzL2xpYi9lMnAvZTJwLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNzFhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9lMnAucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IGUycAorRGVzY3JpcHRpb246IEV4dDJmcyB1c2VycGFjZSBwcm9ncmFtcyB1dGlsaXR5IGxpYnJhcnkKK1ZlcnNpb246IEBFMkZTUFJPR1NfVkVSU0lPTkAKK1JlcXVpcmVzOiAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L2UycCAtSSR7aW5jbHVkZWRpcn0KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZTJwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9mZWF0dXJlLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9mZWF0dXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkZjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL2ZlYXR1cmUuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIGZlYXR1cmUuYyAtLS0gY29udmVydCBiZXR3ZWVuIGZlYXR1cmVzIGFuZCBzdHJpbmdzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9qZnNfdXNlci5oPgorCitzdHJ1Y3QgZmVhdHVyZSB7CisJaW50CQljb21wYXQ7CisJdW5zaWduZWQgaW50CW1hc2s7CisJY29uc3QgY2hhcgkqc3RyaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBmZWF0dXJlIGZlYXR1cmVfbGlzdFtdID0geworCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQywKKwkJCSJkaXJfcHJlYWxsb2MiIH0sCisJewlFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwsCisJCQkiaGFzX2pvdXJuYWwiIH0sCisJewlFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDJfRkVBVFVSRV9DT01QQVRfSU1BR0lDX0lOT0RFUywKKwkJCSJpbWFnaWNfaW5vZGVzIiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSLAorCQkJImV4dF9hdHRyIiB9LAorCXsJRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCwKKwkJCSJkaXJfaW5kZXgiIH0sCisJewlFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFLAorCQkJInJlc2l6ZV9pbm9kZSIgfSwKKwl7CUUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUMl9GRUFUVVJFX0NPTVBBVF9MQVpZX0JHLAorCQkJImxhenlfYmciIH0sCisJewlFMlBfRkVBVFVSRV9DT01QQVQsIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhDTFVERV9CSVRNQVAsCisJCQkic25hcHNob3RfYml0bWFwIiB9LAorCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIsCisJCQkic3BhcnNlX3N1cGVyIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSwKKwkJCSJsYXJnZV9maWxlIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFLAorCQkJImh1Z2VfZmlsZSIgfSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNLAorCQkJInVuaW5pdF9iZyIgfSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNLAorCQkJInVuaW5pdF9ncm91cHMiIH0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTkssCisJCQkiZGlyX25saW5rIiB9LAorCXsJRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkUsCisJCQkiZXh0cmFfaXNpemUiIH0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSwKKwkJCSJxdW90YSIgfSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DLAorCQkJImJpZ2FsbG9jIn0sCisJewlFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9NRVRBREFUQV9DU1VNLAorCQkJIm1ldGFkYXRhX2NzdW0ifSwKKwl7CUUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1JFUExJQ0EsCisJCQkicmVwbGljYSIgfSwKKworCXsJRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTiwKKwkJCSJjb21wcmVzc2lvbiIgfSwKKwl7CUUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUsCisJCQkiZmlsZXR5cGUiIH0sCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIsCisJCQkibmVlZHNfcmVjb3ZlcnkiIH0sCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWLAorCQkJImpvdXJuYWxfZGV2IiB9LAorCXsJRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTLAorCQkJImV4dGVudCIgfSwKKwl7CUUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUywKKwkJCSJleHRlbnRzIiB9LAorCXsJRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHLAorCQkJIm1ldGFfYmciIH0sCisJewlFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklULAorCQkJIjY0Yml0IiB9LAorCXsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAsCisJCQkibW1wIiB9LAorCXsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHLAorCQkJImZsZXhfYmcifSwKKwl7ICAgICAgIEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUsCisJCQkiZWFfaW5vZGUifSwKKwl7ICAgICAgIEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRElSREFUQSwKKwkJCSJkaXJkYXRhIn0sCisJeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0xBUkdFRElSLAorCQkJImxhcmdlX2RpciJ9LAorCXsgICAgICAgRTJQX0ZFQVRVUkVfSU5DT01QQVQsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVEQVRBLAorCQkJImlubGluZV9kYXRhIn0sCisJeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQsCisJCQkiZW5jcnlwdCJ9LAorCXsJMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBmZWF0dXJlIGpybmxfZmVhdHVyZV9saXN0W10gPSB7CisgICAgICAgeyAgICAgICBFMlBfRkVBVFVSRV9DT01QQVQsIEpGU19GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwKKyAgICAgICAgICAgICAgICAgICAgICAgImpvdXJuYWxfY2hlY2tzdW0iIH0sCisKKyAgICAgICB7ICAgICAgIEUyUF9GRUFUVVJFX0lOQ09NUEFULCBKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0UsCisgICAgICAgICAgICAgICAgICAgICAgICJqb3VybmFsX2luY29tcGF0X3Jldm9rZSIgfSwKKyAgICAgICB7ICAgICAgIEUyUF9GRUFUVVJFX0lOQ09NUEFULCBKRlNfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImpvdXJuYWxfNjRiaXQiIH0sCisgICAgICAgeyAgICAgICBFMlBfRkVBVFVSRV9JTkNPTVBBVCwgSkZTX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlULAorICAgICAgICAgICAgICAgICAgICAgICAiam91cm5hbF9hc3luY19jb21taXQiIH0sCisgICAgICAgeyAgICAgICAwLCAwLCAwIH0sCit9OworCitjb25zdCBjaGFyICplMnBfZmVhdHVyZTJzdHJpbmcoaW50IGNvbXBhdCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJc3RydWN0IGZlYXR1cmUgICpmOworCXN0YXRpYyBjaGFyIGJ1ZlsyMF07CisJY2hhcglmY2hhcjsKKwlpbnQJZm51bTsKKworCWZvciAoZiA9IGZlYXR1cmVfbGlzdDsgZi0+c3RyaW5nOyBmKyspIHsKKwkJaWYgKChjb21wYXQgPT0gZi0+Y29tcGF0KSAmJgorCQkgICAgKG1hc2sgPT0gZi0+bWFzaykpCisJCQlyZXR1cm4gZi0+c3RyaW5nOworCX0KKwlzd2l0Y2ggKGNvbXBhdCkgeworCWNhc2UgIEUyUF9GRUFUVVJFX0NPTVBBVDoKKwkJZmNoYXIgPSAnQyc7CisJCWJyZWFrOworCWNhc2UgRTJQX0ZFQVRVUkVfSU5DT01QQVQ6CisJCWZjaGFyID0gJ0knOworCQlicmVhazsKKwljYXNlIEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFUOgorCQlmY2hhciA9ICdSJzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmNoYXIgPSAnPyc7CisJCWJyZWFrOworCX0KKwlmb3IgKGZudW0gPSAwOyBtYXNrID4+PSAxOyBmbnVtKyspOworCXNwcmludGYoYnVmLCAiRkVBVFVSRV8lYyVkIiwgZmNoYXIsIGZudW0pOworCXJldHVybiBidWY7Cit9CisKK2ludCBlMnBfc3RyaW5nMmZlYXR1cmUoY2hhciAqc3RyaW5nLCBpbnQgKmNvbXBhdF90eXBlLCB1bnNpZ25lZCBpbnQgKm1hc2spCit7CisJc3RydWN0IGZlYXR1cmUgICpmOworCWNoYXIJCSplcHRyOworCWludAkJbnVtOworCisJZm9yIChmID0gZmVhdHVyZV9saXN0OyBmLT5zdHJpbmc7IGYrKykgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RyaW5nLCBmLT5zdHJpbmcpKSB7CisJCQkqY29tcGF0X3R5cGUgPSBmLT5jb21wYXQ7CisJCQkqbWFzayA9IGYtPm1hc2s7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoc3RybmNhc2VjbXAoc3RyaW5nLCAiRkVBVFVSRV8iLCA4KSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHN0cmluZ1s4XSkgeworCWNhc2UgJ2MnOgorCWNhc2UgJ0MnOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9DT01QQVQ7CisJCWJyZWFrOworCWNhc2UgJ2knOgorCWNhc2UgJ0knOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9JTkNPTVBBVDsKKwkJYnJlYWs7CisJY2FzZSAncic6CisJY2FzZSAnUic6CisJCSpjb21wYXRfdHlwZSA9IEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisJaWYgKHN0cmluZ1s5XSA9PSAwKQorCQlyZXR1cm4gMTsKKwludW0gPSBzdHJ0b2woc3RyaW5nKzksICZlcHRyLCAxMCk7CisJaWYgKG51bSA+IDMyIHx8IG51bSA8IDApCisJCXJldHVybiAxOworCWlmICgqZXB0cikKKwkJcmV0dXJuIDE7CisJKm1hc2sgPSAxIDw8IG51bTsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqZTJwX2pybmxfZmVhdHVyZTJzdHJpbmcoaW50IGNvbXBhdCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJc3RydWN0IGZlYXR1cmUgICpmOworCXN0YXRpYyBjaGFyIGJ1ZlsyMF07CisJY2hhcglmY2hhcjsKKwlpbnQJZm51bTsKKworCWZvciAoZiA9IGpybmxfZmVhdHVyZV9saXN0OyBmLT5zdHJpbmc7IGYrKykgeworCQlpZiAoKGNvbXBhdCA9PSBmLT5jb21wYXQpICYmCisJCSAgICAobWFzayA9PSBmLT5tYXNrKSkKKwkJCXJldHVybiBmLT5zdHJpbmc7CisJfQorCXN3aXRjaCAoY29tcGF0KSB7CisJY2FzZSAgRTJQX0ZFQVRVUkVfQ09NUEFUOgorCQlmY2hhciA9ICdDJzsKKwkJYnJlYWs7CisJY2FzZSBFMlBfRkVBVFVSRV9JTkNPTVBBVDoKKwkJZmNoYXIgPSAnSSc7CisJCWJyZWFrOworCWNhc2UgRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQ6CisJCWZjaGFyID0gJ1InOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY2hhciA9ICc/JzsKKwkJYnJlYWs7CisJfQorCWZvciAoZm51bSA9IDA7IG1hc2sgPj49IDE7IGZudW0rKyk7CisJc3ByaW50ZihidWYsICJGRUFUVVJFXyVjJWQiLCBmY2hhciwgZm51bSk7CisJcmV0dXJuIGJ1ZjsKK30KKworaW50IGUycF9qcm5sX3N0cmluZzJmZWF0dXJlKGNoYXIgKnN0cmluZywgaW50ICpjb21wYXRfdHlwZSwgdW5zaWduZWQgaW50ICptYXNrKQoreworCXN0cnVjdCBmZWF0dXJlICAqZjsKKwljaGFyCQkqZXB0cjsKKwlpbnQJCW51bTsKKworCWZvciAoZiA9IGpybmxfZmVhdHVyZV9saXN0OyBmLT5zdHJpbmc7IGYrKykgeworCQlpZiAoIXN0cmNhc2VjbXAoc3RyaW5nLCBmLT5zdHJpbmcpKSB7CisJCQkqY29tcGF0X3R5cGUgPSBmLT5jb21wYXQ7CisJCQkqbWFzayA9IGYtPm1hc2s7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoc3RybmNhc2VjbXAoc3RyaW5nLCAiRkVBVFVSRV8iLCA4KSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHN0cmluZ1s4XSkgeworCWNhc2UgJ2MnOgorCWNhc2UgJ0MnOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9DT01QQVQ7CisJCWJyZWFrOworCWNhc2UgJ2knOgorCWNhc2UgJ0knOgorCQkqY29tcGF0X3R5cGUgPSBFMlBfRkVBVFVSRV9JTkNPTVBBVDsKKwkJYnJlYWs7CisJY2FzZSAncic6CisJY2FzZSAnUic6CisJCSpjb21wYXRfdHlwZSA9IEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisJaWYgKHN0cmluZ1s5XSA9PSAwKQorCQlyZXR1cm4gMTsKKwludW0gPSBzdHJ0b2woc3RyaW5nKzksICZlcHRyLCAxMCk7CisJaWYgKG51bSA+IDMyIHx8IG51bSA8IDApCisJCXJldHVybiAxOworCWlmICgqZXB0cikKKwkJcmV0dXJuIDE7CisJKm1hc2sgPSAxIDw8IG51bTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmtzKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl93b3JkKGNoYXIgKmNwKQoreworCXdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSAmJiAqY3AgIT0gJywnKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworLyoKKyAqIEVkaXQgYSBmZWF0dXJlIHNldCBhcnJheSBhcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICBUaGUgb2tfYXJyYXksCisgKiBpZiBzZXQsIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gbGltaXQgd2hhdCBmZWF0dXJlcyB0aGUgdXNlciBpcworICogYWxsb3dlZCB0byBzZXQgb3IgY2xlYXIgdXNpbmcgdGhpcyBmdW5jdGlvbi4gIElmIGNsZWFyX29rX2FycmF5IGlzIHNldCwKKyAqIHRoZW4gdXNlIGl0IHRlbGwgd2hldGhlciBvciBub3QgaXQgaXMgT0sgdG8gY2xlYXIgYSBmaWxlc3lzdGVtIGZlYXR1cmUuCisgKi8KK2ludCBlMnBfZWRpdF9mZWF0dXJlMihjb25zdCBjaGFyICpzdHIsIF9fdTMyICpjb21wYXRfYXJyYXksIF9fdTMyICpva19hcnJheSwKKwkJICAgICAgX191MzIgKmNsZWFyX29rX2FycmF5LCBpbnQgKnR5cGVfZXJyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgKm1hc2tfZXJyKQoreworCWNoYXIJCSpjcCwgKmJ1ZiwgKm5leHQ7CisJaW50CQluZWc7CisJdW5zaWduZWQgaW50CW1hc2s7CisJaW50CQljb21wYXRfdHlwZTsKKwlpbnQJCXJjID0gMDsKKworCWlmICghY2xlYXJfb2tfYXJyYXkpCisJCWNsZWFyX29rX2FycmF5ID0gb2tfYXJyYXk7CisKKwlpZiAodHlwZV9lcnIpCisJCSp0eXBlX2VyciA9IDA7CisJaWYgKG1hc2tfZXJyKQorCQkqbWFza19lcnIgPSAwOworCisJYnVmID0gbWFsbG9jKHN0cmxlbihzdHIpKzEpOworCWlmICghYnVmKQorCQlyZXR1cm4gMTsKKwlzdHJjcHkoYnVmLCBzdHIpOworCWZvciAoY3AgPSBidWY7IGNwICYmICpjcDsgY3AgPSBuZXh0ID8gbmV4dCsxIDogMCkgeworCQluZWcgPSAwOworCQljcCA9IHNraXBfb3Zlcl9ibGFua3MoY3ApOworCQluZXh0ID0gc2tpcF9vdmVyX3dvcmQoY3ApOworCisJCWlmICgqbmV4dCA9PSAwKQorCQkJbmV4dCA9IDA7CisJCWVsc2UKKwkJCSpuZXh0ID0gMDsKKworCQlpZiAoKHN0cmNhc2VjbXAoY3AsICJub25lIikgPT0gMCkgfHwKKwkJICAgIChzdHJjYXNlY21wKGNwLCAiY2xlYXIiKSA9PSAwKSkgeworCQkJY29tcGF0X2FycmF5WzBdID0gMDsKKwkJCWNvbXBhdF9hcnJheVsxXSA9IDA7CisJCQljb21wYXRfYXJyYXlbMl0gPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2ggKCpjcCkgeworCQljYXNlICctJzoKKwkJY2FzZSAnXic6CisJCQluZWcrKzsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgJysnOgorCQkJY3ArKzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlMnBfc3RyaW5nMmZlYXR1cmUoY3AsICZjb21wYXRfdHlwZSwgJm1hc2spKSB7CisJCQlyYyA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAobmVnKSB7CisJCQlpZiAoY2xlYXJfb2tfYXJyYXkgJiYKKwkJCSAgICAhKGNsZWFyX29rX2FycmF5W2NvbXBhdF90eXBlXSAmIG1hc2spKSB7CisJCQkJcmMgPSAxOworCQkJCWlmICh0eXBlX2VycikKKwkJCQkJKnR5cGVfZXJyID0gKGNvbXBhdF90eXBlIHwKKwkJCQkJCSAgICAgRTJQX0ZFQVRVUkVfTkVHQVRFX0ZMQUcpOworCQkJCWlmIChtYXNrX2VycikKKwkJCQkJKm1hc2tfZXJyID0gbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbXBhdF9hcnJheVtjb21wYXRfdHlwZV0gJj0gfm1hc2s7CisJCX0gZWxzZSB7CisJCQlpZiAob2tfYXJyYXkgJiYgIShva19hcnJheVtjb21wYXRfdHlwZV0gJiBtYXNrKSkgeworCQkJCXJjID0gMTsKKwkJCQlpZiAodHlwZV9lcnIpCisJCQkJCSp0eXBlX2VyciA9IGNvbXBhdF90eXBlOworCQkJCWlmIChtYXNrX2VycikKKwkJCQkJKm1hc2tfZXJyID0gbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbXBhdF9hcnJheVtjb21wYXRfdHlwZV0gfD0gbWFzazsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitpbnQgZTJwX2VkaXRfZmVhdHVyZShjb25zdCBjaGFyICpzdHIsIF9fdTMyICpjb21wYXRfYXJyYXksIF9fdTMyICpva19hcnJheSkKK3sKKwlyZXR1cm4gZTJwX2VkaXRfZmVhdHVyZTIoc3RyLCBjb21wYXRfYXJyYXksIG9rX2FycmF5LCAwLCAwLCAwKTsKK30KKworI2lmZGVmIFRFU1RfUFJPR1JBTQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjb21wYXQsIGNvbXBhdDIsIGk7CisJdW5zaWduZWQgaW50IG1hc2ssIG1hc2syOworCWNvbnN0IGNoYXIgKnN0cjsKKwlzdHJ1Y3QgZmVhdHVyZSAqZjsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGkgPT0gMCkgeworCQkJZiA9IGZlYXR1cmVfbGlzdDsKKwkJCXByaW50ZigiRmVhdHVyZSBsaXN0OlxuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlxuSm91cm5hbCBmZWF0dXJlIGxpc3Q6XG4iKTsKKwkJCWYgPSBqcm5sX2ZlYXR1cmVfbGlzdDsKKwkJfQorCQlmb3IgKDsgZi0+c3RyaW5nOyBmKyspIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQllMnBfc3RyaW5nMmZlYXR1cmUoKGNoYXIgKilmLT5zdHJpbmcsICZjb21wYXQsCisJCQkJCQkgICAmbWFzayk7CisJCQkJc3RyID0gZTJwX2ZlYXR1cmUyc3RyaW5nKGNvbXBhdCwgbWFzayk7CisJCQl9IGVsc2UgeworCQkJCWUycF9qcm5sX3N0cmluZzJmZWF0dXJlKChjaGFyICopZi0+c3RyaW5nLAorCQkJCQkJCSZjb21wYXQsICZtYXNrKTsKKwkJCQlzdHIgPSBlMnBfanJubF9mZWF0dXJlMnN0cmluZyhjb21wYXQsIG1hc2spOworCQkJfQorCisJCQlwcmludGYoIlx0Q29tcGF0ID0gJWQsIE1hc2sgPSAldSwgJXNcbiIsCisJCQkgICAgICAgY29tcGF0LCBtYXNrLCBmLT5zdHJpbmcpOworCQkJaWYgKHN0cmNtcChmLT5zdHJpbmcsIHN0cikpIHsKKwkJCQlpZiAoZTJwX3N0cmluZzJmZWF0dXJlKChjaGFyICopIHN0ciwgJmNvbXBhdDIsCisJCQkJCQkgICAgICAgJm1hc2syKSB8fAorCQkJCSAgICAoY29tcGF0MiAhPSBjb21wYXQpIHx8CisJCQkJICAgIChtYXNrMiAhPSBtYXNrKSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWx1cmUhXG4iKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZXhpdCgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvZmdldGZsYWdzLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9mZ2V0ZmxhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNlYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvZmdldGZsYWdzLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGZnZXRmbGFncy5jCQktIEdldCBhIGZpbGUgZmxhZ3Mgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImUycC5oIgorCisjaWZkZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT1BFTl9GTEFHUyAoT19SRE9OTFl8T19OT05CTE9DS3xPX0xBUkdFRklMRSkKKyNlbHNlCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0spCisjZW5kaWYKKworaW50IGZnZXRmbGFncyAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGxvbmcgKiBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisjaWYgSEFWRV9TVEFUX0ZMQUdTICYmICEoQVBQTEVfREFSV0lOICYmIEhBVkVfRVhUMl9JT0NUTFMpCisKKwlpZiAoc3RhdCAobmFtZSwgJmJ1ZikgPT0gLTEpCisJCXJldHVybiAtMTsKKworCSpmbGFncyA9IDA7CisjaWZkZWYgVUZfSU1NVVRBQkxFCisJaWYgKGJ1Zi5zdF9mbGFncyAmIFVGX0lNTVVUQUJMRSkKKwkJKmZsYWdzIHw9IEVYVDJfSU1NVVRBQkxFX0ZMOworI2VuZGlmCisjaWZkZWYgVUZfQVBQRU5ECisJaWYgKGJ1Zi5zdF9mbGFncyAmIFVGX0FQUEVORCkKKwkJKmZsYWdzIHw9IEVYVDJfQVBQRU5EX0ZMOworI2VuZGlmCisjaWZkZWYgVUZfTk9EVU1QCisJaWYgKGJ1Zi5zdF9mbGFncyAmIFVGX05PRFVNUCkKKwkJKmZsYWdzIHw9IEVYVDJfTk9EVU1QX0ZMOworI2VuZGlmCisKKwlyZXR1cm4gMDsKKyNlbHNlIC8qICFIQVZFX1NUQVRfRkxBR1MgfHwgKEFQUExFX0RBUldJTiAmJiBIQVZFX0VYVDJfSU9DVExTKSAqLworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwlpbnQgZmQsIHIsIGYsIHNhdmVfZXJybm8gPSAwOworCisJaWYgKCFsc3RhdChuYW1lLCAmYnVmKSAmJgorCSAgICAhU19JU1JFRyhidWYuc3RfbW9kZSkgJiYgIVNfSVNESVIoYnVmLnN0X21vZGUpKSB7CisJCWdvdG8gbm90c3VwcDsKKwl9CisjaWYgIUFQUExFX0RBUldJTgorCWZkID0gb3BlbiAobmFtZSwgT1BFTl9GTEFHUyk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gLTE7CisJciA9IGlvY3RsIChmZCwgRVhUMl9JT0NfR0VURkxBR1MsICZmKTsKKwlpZiAociA9PSAtMSkKKwkJc2F2ZV9lcnJubyA9IGVycm5vOworCSpmbGFncyA9IGY7CisJY2xvc2UgKGZkKTsKKwlpZiAoc2F2ZV9lcnJubykKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByOworI2Vsc2UgLyogQVBQTEVfREFSV0lOICovCisgICBmID0gLTE7CisgICBzYXZlX2Vycm5vID0gc3lzY2FsbChTWVNfZnNjdGwsIG5hbWUsIEVYVDJfSU9DX0dFVEZMQUdTLCAmZiwgMCk7CisgICAqZmxhZ3MgPSBmOworICAgcmV0dXJuIChzYXZlX2Vycm5vKTsKKyNlbmRpZiAvKiAhQVBQTEVfREFSV0lOICovCitub3RzdXBwOgorI2VuZGlmIC8qIEhBVkVfRVhUMl9JT0NUTFMgKi8KKyNlbmRpZgorCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9mZ2V0dmVyc2lvbi5jIGIvZTJmc3Byb2dzL2xpYi9lMnAvZmdldHZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk0NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvZmdldHZlcnNpb24uYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogZmdldHZlcnNpb24uYwktIEdldCBhIGZpbGUgdmVyc2lvbiBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgImUycC5oIgorCisjaWZkZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT1BFTl9GTEFHUyAoT19SRE9OTFl8T19OT05CTE9DS3xPX0xBUkdFRklMRSkKKyNlbHNlCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0spCisjZW5kaWYKKworaW50IGZnZXR2ZXJzaW9uIChjb25zdCBjaGFyICogbmFtZSwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pCit7CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2lmICFBUFBMRV9EQVJXSU4KKwlpbnQgZmQsIHIsIHZlciwgc2F2ZV9lcnJubyA9IDA7CisKKwlmZCA9IG9wZW4gKG5hbWUsIE9QRU5fRkxBR1MpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXIgPSBpb2N0bCAoZmQsIEVYVDJfSU9DX0dFVFZFUlNJT04sICZ2ZXIpOworCWlmIChyID09IC0xKQorCQlzYXZlX2Vycm5vID0gZXJybm87CisJKnZlcnNpb24gPSB2ZXI7CisJY2xvc2UgKGZkKTsKKwlpZiAoc2F2ZV9lcnJubykKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworCXJldHVybiByOworI2Vsc2UKKyAgIGludCB2ZXI9LTEsIGVycjsKKyAgIGVyciA9IHN5c2NhbGwoU1lTX2ZzY3RsLCBuYW1lLCBFWFQyX0lPQ19HRVRWRVJTSU9OLCAmdmVyLCAwKTsKKyAgICp2ZXJzaW9uID0gdmVyOworICAgcmV0dXJuKGVycik7CisjZW5kaWYKKyNlbHNlIC8qICEgSEFWRV9FWFQyX0lPQ1RMUyAqLworCWV4dGVybiBpbnQgZXJybm87CisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKKyNlbmRpZiAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL2ZzZXRmbGFncy5jIGIvZTJmc3Byb2dzL2xpYi9lMnAvZnNldGZsYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkZDExNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL2ZzZXRmbGFncy5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogZnNldGZsYWdzLmMJCS0gU2V0IGEgZmlsZSBmbGFncyBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZTJwLmgiCisKKy8qCisgKiBEZWFsIHdpdGggbGFtZSBnbGliYydzIHRoYXQgZGVmaW5lIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBhY3R1YWxseQorICogaW1wbGVtZW50aW5nIGl0LiAgQ2FuIHlvdSBzYXkgImF0dHJhY3RpdmUgbnVpc2FuY2UiLCBib3lzIGFuZCBnaXJscz8KKyAqIEkga25ldyB5b3UgY291bGQhCisgKi8KKyNpZmRlZiBfX2xpbnV4X18KKyN1bmRlZiBIQVZFX0NIRkxBR1MKKyNlbmRpZgorCisjaWZkZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT1BFTl9GTEFHUyAoT19SRE9OTFl8T19OT05CTE9DS3xPX0xBUkdFRklMRSkKKyNlbHNlCisjZGVmaW5lIE9QRU5fRkxBR1MgKE9fUkRPTkxZfE9fTk9OQkxPQ0spCisjZW5kaWYKKworaW50IGZzZXRmbGFncyAoY29uc3QgY2hhciAqIG5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWYgSEFWRV9DSEZMQUdTICYmICEoQVBQTEVfREFSV0lOICYmIEhBVkVfRVhUMl9JT0NUTFMpCisJdW5zaWduZWQgbG9uZyBic2RfZmxhZ3MgPSAwOworCisjaWZkZWYgVUZfSU1NVVRBQkxFCisJaWYgKGZsYWdzICYgRVhUMl9JTU1VVEFCTEVfRkwpCisJCWJzZF9mbGFncyB8PSBVRl9JTU1VVEFCTEU7CisjZW5kaWYKKyNpZmRlZiBVRl9BUFBFTkQKKwlpZiAoZmxhZ3MgJiBFWFQyX0FQUEVORF9GTCkKKwkJYnNkX2ZsYWdzIHw9IFVGX0FQUEVORDsKKyNlbmRpZgorI2lmZGVmIFVGX05PRFVNUAorCWlmIChmbGFncyAmIEVYVDJfTk9EVU1QX0ZMKQorCQlic2RfZmxhZ3MgfD0gVUZfTk9EVU1QOworI2VuZGlmCisKKwlyZXR1cm4gY2hmbGFncyAobmFtZSwgYnNkX2ZsYWdzKTsKKyNlbHNlIC8qICFIQVZFX0NIRkxBR1MgfHwgKEFQUExFX0RBUldJTiAmJiBIQVZFX0VYVDJfSU9DVExTKSAqLworI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwlpbnQgZmQsIHIsIGYsIHNhdmVfZXJybm8gPSAwOworCXN0cnVjdCBzdGF0IGJ1ZjsKKworCWlmICghbHN0YXQobmFtZSwgJmJ1ZikgJiYKKwkgICAgIVNfSVNSRUcoYnVmLnN0X21vZGUpICYmICFTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgeworCQlnb3RvIG5vdHN1cHA7CisJfQorI2lmICFBUFBMRV9EQVJXSU4KKwlmZCA9IG9wZW4gKG5hbWUsIE9QRU5fRkxBR1MpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCWYgPSAoaW50KSBmbGFnczsKKwlyID0gaW9jdGwgKGZkLCBFWFQyX0lPQ19TRVRGTEFHUywgJmYpOworCWlmIChyID09IC0xKQorCQlzYXZlX2Vycm5vID0gZXJybm87CisJY2xvc2UgKGZkKTsKKwlpZiAoc2F2ZV9lcnJubykKKwkJZXJybm8gPSBzYXZlX2Vycm5vOworI2Vsc2UgLyogQVBQTEVfREFSV0lOICovCisJZiA9IChpbnQpIGZsYWdzOworCXJldHVybiBzeXNjYWxsKFNZU19mc2N0bCwgbmFtZSwgRVhUMl9JT0NfU0VURkxBR1MsICZmLCAwKTsKKyNlbmRpZiAvKiAhQVBQTEVfREFSV0lOICovCisJcmV0dXJuIHI7CisKK25vdHN1cHA6CisjZW5kaWYgLyogSEFWRV9FWFQyX0lPQ1RMUyAqLworI2VuZGlmCisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL2ZzZXR2ZXJzaW9uLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9mc2V0dmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTBjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9mc2V0dmVyc2lvbi5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBmc2V0dmVyc2lvbi5jCS0gU2V0IGEgZmlsZSB2ZXJzaW9uIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKKyNpZmRlZiBPX0xBUkdFRklMRQorI2RlZmluZSBPUEVOX0ZMQUdTIChPX1JET05MWXxPX05PTkJMT0NLfE9fTEFSR0VGSUxFKQorI2Vsc2UKKyNkZWZpbmUgT1BFTl9GTEFHUyAoT19SRE9OTFl8T19OT05CTE9DSykKKyNlbmRpZgorCitpbnQgZnNldHZlcnNpb24gKGNvbnN0IGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nIHZlcnNpb24pCit7CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworI2lmICFBUFBMRV9EQVJXSU4KKwlpbnQgZmQsIHIsIHZlciwgc2F2ZV9lcnJubyA9IDA7CisKKwlmZCA9IG9wZW4gKG5hbWUsIE9QRU5fRkxBR1MpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXZlciA9IChpbnQpIHZlcnNpb247CisJciA9IGlvY3RsIChmZCwgRVhUMl9JT0NfU0VUVkVSU0lPTiwgJnZlcik7CisJaWYgKHIgPT0gLTEpCisJCXNhdmVfZXJybm8gPSBlcnJubzsKKwljbG9zZSAoZmQpOworCWlmIChzYXZlX2Vycm5vKQorCQllcnJubyA9IHNhdmVfZXJybm87CisJcmV0dXJuIHI7CisjZWxzZQorICAgaW50IHZlciA9IChpbnQpdmVyc2lvbjsKKyAgIHJldHVybiBzeXNjYWxsKFNZU19mc2N0bCwgbmFtZSwgRVhUMl9JT0NfU0VUVkVSU0lPTiwgJnZlciwgMCk7CisjZW5kaWYKKyNlbHNlIC8qICEgSEFWRV9FWFQyX0lPQ1RMUyAqLworCWV4dGVybiBpbnQgZXJybm87CisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKKyNlbmRpZiAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL2dldGZsYWdzLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9nZXRmbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzE2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9nZXRmbGFncy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBnZXRmbGFncy5jCQktIEdldCBhIGZpbGUgZmxhZ3Mgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImUycC5oIgorCitpbnQgZ2V0ZmxhZ3MgKGludCBmZCwgdW5zaWduZWQgbG9uZyAqIGZsYWdzKQoreworCXN0cnVjdCBzdGF0IGJ1ZjsKKyNpZiBIQVZFX1NUQVRfRkxBR1MKKworCWlmIChmc3RhdCAoZmQsICZidWYpID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwkqZmxhZ3MgPSAwOworI2lmZGVmIFVGX0lNTVVUQUJMRQorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9JTU1VVEFCTEUpCisJCSpmbGFncyB8PSBFWFQyX0lNTVVUQUJMRV9GTDsKKyNlbmRpZgorI2lmZGVmIFVGX0FQUEVORAorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9BUFBFTkQpCisJCSpmbGFncyB8PSBFWFQyX0FQUEVORF9GTDsKKyNlbmRpZgorI2lmZGVmIFVGX05PRFVNUAorCWlmIChidWYuc3RfZmxhZ3MgJiBVRl9OT0RVTVApCisJCSpmbGFncyB8PSBFWFQyX05PRFVNUF9GTDsKKyNlbmRpZgorCisJcmV0dXJuIDA7CisjZWxzZQorI2lmIEhBVkVfRVhUMl9JT0NUTFMKKwlpbnQgciwgZjsKKworCWlmICghZnN0YXQoZmQsICZidWYpICYmCisJICAgICFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSAmJiAhU19JU0RJUihidWYuc3RfbW9kZSkpCisJCWdvdG8gbm90c3VwcDsKKwlyID0gaW9jdGwoZmQsIEVYVDJfSU9DX0dFVEZMQUdTLCAmZik7CisJKmZsYWdzID0gZjsKKworCXJldHVybiByOworbm90c3VwcDoKKyNlbmRpZiAvKiBIQVZFX0VYVDJfSU9DVExTICovCisjZW5kaWYKKwllcnJubyA9IEVPUE5PVFNVUFA7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvZ2V0dmVyc2lvbi5jIGIvZTJmc3Byb2dzL2xpYi9lMnAvZ2V0dmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjYyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9nZXR2ZXJzaW9uLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGdldHZlcnNpb24uYwkJLSBHZXQgYSBmaWxlIHZlcnNpb24gb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworaW50IGdldHZlcnNpb24gKGludCBmZCwgdW5zaWduZWQgbG9uZyAqIHZlcnNpb24pCit7CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCWludAlyLCB2ZXI7CisKKwlyID0gaW9jdGwgKGZkLCBFWFQyX0lPQ19HRVRWRVJTSU9OLCAmdmVyKTsKKwkqdmVyc2lvbiA9IHZlcjsKKwlyZXR1cm4gcjsKKyNlbHNlIC8qICEgSEFWRV9FWFQyX0lPQ1RMUyAqLworCWV4dGVybiBpbnQgZXJybm87CisJZXJybm8gPSBFT1BOT1RTVVBQOworCXJldHVybiAtMTsKKyNlbmRpZiAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL2hhc2hzdHIuYyBiL2UyZnNwcm9ncy9saWIvZTJwL2hhc2hzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWU2MjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvaGFzaHN0ci5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBmZWF0dXJlLmMgLS0tIGNvbnZlcnQgYmV0d2VlbiBmZWF0dXJlcyBhbmQgc3RyaW5ncworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImUycC5oIgorCitzdHJ1Y3QgaGFzaCB7CisJaW50CQludW07CisJY29uc3QgY2hhcgkqc3RyaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBoYXNoIGhhc2hfbGlzdFtdID0geworCXsJRVhUMl9IQVNIX0xFR0FDWSwgCSJsZWdhY3kiIH0sCisJewlFWFQyX0hBU0hfSEFMRl9NRDQsIAkiaGFsZl9tZDQiIH0sCisJewlFWFQyX0hBU0hfVEVBLCAJCSJ0ZWEiIH0sCisJewkwLCAwIH0sCit9OworCitjb25zdCBjaGFyICplMnBfaGFzaDJzdHJpbmcoaW50IG51bSkKK3sKKwlzdHJ1Y3QgaGFzaCAgKnA7CisJc3RhdGljIGNoYXIgYnVmWzIwXTsKKworCWZvciAocCA9IGhhc2hfbGlzdDsgcC0+c3RyaW5nOyBwKyspIHsKKwkJaWYgKG51bSA9PSBwLT5udW0pCisJCQlyZXR1cm4gcC0+c3RyaW5nOworCX0KKwlzcHJpbnRmKGJ1ZiwgIkhBU0hBTEdfJWQiLCBudW0pOworCXJldHVybiBidWY7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBoYXNoIGFsZ29yaXRobSwgb3IgLTEgb24gZXJyb3IKKyAqLworaW50IGUycF9zdHJpbmcyaGFzaChjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IGhhc2gJKnA7CisJY2hhcgkJKmVwdHI7CisJaW50CQludW07CisKKwlmb3IgKHAgPSBoYXNoX2xpc3Q7IHAtPnN0cmluZzsgcCsrKSB7CisJCWlmICghc3RyY2FzZWNtcChzdHJpbmcsIHAtPnN0cmluZykpIHsKKwkJCXJldHVybiBwLT5udW07CisJCX0KKwl9CisJaWYgKHN0cm5jYXNlY21wKHN0cmluZywgIkhBU0hBTEdfIiwgOCkpCisJCXJldHVybiAtMTsKKworCWlmIChzdHJpbmdbOF0gPT0gMCkKKwkJcmV0dXJuIC0xOworCW51bSA9IHN0cnRvbChzdHJpbmcrOCwgJmVwdHIsIDEwKTsKKwlpZiAobnVtID4gMjU1IHx8IG51bSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoKmVwdHIpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gbnVtOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9pb2QuYyBiL2UyZnNwcm9ncy9saWIvZTJwL2lvZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2FhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9pb2QuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogaW9kLmMJCS0gSXRlcmF0ZSBhIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgYSBkaXJlY3RvcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSAiZTJwLmgiCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBpdGVyYXRlX29uX2RpciAoY29uc3QgY2hhciAqIGRpcl9uYW1lLAorCQkgICAgaW50ICgqZnVuYykgKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRpcmVudCAqLCB2b2lkICopLAorCQkgICAgdm9pZCAqIHByaXZhdGUpCit7CisJRElSICogZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlLCAqZGVwOworCWludAltYXhfbGVuID0gLTEsIGxlbiwgcmV0ID0gMDsKKworI2lmIEhBVkVfUEFUSENPTkYgJiYgZGVmaW5lZChfUENfTkFNRV9NQVgpCisJbWF4X2xlbiA9IHBhdGhjb25mKGRpcl9uYW1lLCBfUENfTkFNRV9NQVgpOworI2VuZGlmCisJaWYgKG1heF9sZW4gPT0gLTEpIHsKKyNpZmRlZiBfUE9TSVhfTkFNRV9NQVgKKwkJbWF4X2xlbiA9IF9QT1NJWF9OQU1FX01BWDsKKyNlbHNlCisjaWZkZWYgTkFNRV9NQVgKKwkJbWF4X2xlbiA9IE5BTUVfTUFYOworI2Vsc2UKKwkJbWF4X2xlbiA9IDI1NjsKKyNlbmRpZiAvKiBOQU1FX01BWCAqLworI2VuZGlmIC8qIF9QT1NJWF9OQU1FX01BWCAqLworCX0KKwltYXhfbGVuICs9IHNpemVvZihzdHJ1Y3QgZGlyZW50KTsKKworCWRlID0gbWFsbG9jKG1heF9sZW4rMSk7CisJaWYgKCFkZSkKKwkJcmV0dXJuIC0xOworCW1lbXNldChkZSwgMCwgbWF4X2xlbisxKTsKKworCWRpciA9IG9wZW5kaXIgKGRpcl9uYW1lKTsKKwlpZiAoZGlyID09IE5VTEwpIHsKKwkJZnJlZShkZSk7CisJCXJldHVybiAtMTsKKwl9CisJd2hpbGUgKChkZXAgPSByZWFkZGlyIChkaXIpKSkgeworI2lmZGVmIEhBVkVfUkVDTEVOX0RJUkVOVAorCQlsZW4gPSBkZXAtPmRfcmVjbGVuOworCQlpZiAobGVuID4gbWF4X2xlbikKKwkJCWxlbiA9IG1heF9sZW47CisjZWxzZQorCQlsZW4gPSBzaXplb2Yoc3RydWN0IGRpcmVudCk7CisjZW5kaWYKKwkJbWVtY3B5KGRlLCBkZXAsIGxlbik7CisJCWlmICgoKmZ1bmMpKGRpcl9uYW1lLCBkZSwgcHJpdmF0ZSkpCisJCQlyZXQrKzsKKwl9CisJZnJlZShkZSk7CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvbHMuYyBiL2UyZnNwcm9ncy9saWIvZTJwL2xzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjZDMzNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL2xzLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBscy5jCQkJLSBMaXN0IHRoZSBjb250ZW50cyBvZiBhbiBleHQyZnMgc3VwZXJibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgIFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworc3RhdGljIHZvaWQgcHJpbnRfdXNlciAodW5zaWduZWQgc2hvcnQgdWlkLCBGSUxFICpmKQoreworCXN0cnVjdCBwYXNzd2QgKnB3OworCisJZnByaW50ZihmLCAiJXUgIiwgdWlkKTsKKwlwdyA9IGdldHB3dWlkICh1aWQpOworCWlmIChwdyA9PSBOVUxMKQorCQlmcHJpbnRmKGYsICIodXNlciB1bmtub3duKVxuIik7CisJZWxzZQorCQlmcHJpbnRmKGYsICIodXNlciAlcylcbiIsIHB3LT5wd19uYW1lKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZ3JvdXAgKHVuc2lnbmVkIHNob3J0IGdpZCwgRklMRSAqZikKK3sKKwlzdHJ1Y3QgZ3JvdXAgKmdyOworCisJZnByaW50ZihmLCAiJXUgIiwgZ2lkKTsKKwlnciA9IGdldGdyZ2lkIChnaWQpOworCWlmIChnciA9PSBOVUxMKQorCQlmcHJpbnRmKGYsICIoZ3JvdXAgdW5rbm93bilcbiIpOworCWVsc2UKKwkJZnByaW50ZihmLCAiKGdyb3VwICVzKVxuIiwgZ3ItPmdyX25hbWUpOworfQorCisjZGVmaW5lIE1PTlRIX0lOVCAoODY0MDAgKiAzMCkKKyNkZWZpbmUgV0VFS19JTlQgKDg2NDAwICogNykKKyNkZWZpbmUgREFZX0lOVAkoODY0MDApCisjZGVmaW5lIEhPVVJfSU5UICg2MCAqIDYwKQorI2RlZmluZSBNSU5VVEVfSU5UICg2MCkKKworc3RhdGljIGNvbnN0IGNoYXIgKmludGVydmFsX3N0cmluZyh1bnNpZ25lZCBpbnQgc2VjcykKK3sKKwlzdGF0aWMgY2hhciBidWZbMjU2XSwgdG1wWzgwXTsKKwlpbnQJCWhyLCBtaW4sIG51bTsKKworCWJ1ZlswXSA9IDA7CisKKwlpZiAoc2VjcyA9PSAwKQorCQlyZXR1cm4gIjxub25lPiI7CisKKwlpZiAoc2VjcyA+PSBNT05USF9JTlQpIHsKKwkJbnVtID0gc2VjcyAvIE1PTlRIX0lOVDsKKwkJc2VjcyAtPSBudW0qTU9OVEhfSU5UOworCQlzcHJpbnRmKGJ1ZiwgIiVkIG1vbnRoJXMiLCBudW0sIChudW0+MSkgPyAicyIgOiAiIik7CisJfQorCWlmIChzZWNzID49IFdFRUtfSU5UKSB7CisJCW51bSA9IHNlY3MgLyBXRUVLX0lOVDsKKwkJc2VjcyAtPSBudW0qV0VFS19JTlQ7CisJCXNwcmludGYodG1wLCAiJXMlZCB3ZWVrJXMiLCBidWZbMF0gPyAiLCAiIDogIiIsCisJCQludW0sIChudW0+MSkgPyAicyIgOiAiIik7CisJCXN0cmNhdChidWYsIHRtcCk7CisJfQorCWlmIChzZWNzID49IERBWV9JTlQpIHsKKwkJbnVtID0gc2VjcyAvIERBWV9JTlQ7CisJCXNlY3MgLT0gbnVtKkRBWV9JTlQ7CisJCXNwcmludGYodG1wLCAiJXMlZCBkYXklcyIsIGJ1ZlswXSA/ICIsICIgOiAiIiwKKwkJCW51bSwgKG51bT4xKSA/ICJzIiA6ICIiKTsKKwkJc3RyY2F0KGJ1ZiwgdG1wKTsKKwl9CisJaWYgKHNlY3MgPiAwKSB7CisJCWhyID0gc2VjcyAvIEhPVVJfSU5UOworCQlzZWNzIC09IGhyKkhPVVJfSU5UOworCQltaW4gPSBzZWNzIC8gTUlOVVRFX0lOVDsKKwkJc2VjcyAtPSBtaW4qTUlOVVRFX0lOVDsKKwkJc3ByaW50Zih0bXAsICIlcyVkOiUwMmQ6JTAyZCIsIGJ1ZlswXSA/ICIsICIgOiAiIiwKKwkJCWhyLCBtaW4sIHNlY3MpOworCQlzdHJjYXQoYnVmLCB0bXApOworCX0KKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBwcmludF9mZWF0dXJlcyhzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHMsIEZJTEUgKmYpCit7CisjaWZkZWYgRVhUMl9EWU5BTUlDX1JFVgorCWludAlpLCBqLCBwcmludGVkPTA7CisJX191MzIJKm1hc2sgPSAmcy0+c19mZWF0dXJlX2NvbXBhdCwgbTsKKworCWZwcmludGYoZiwgIkZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAiKTsKKwlmb3IgKGk9MDsgaSA8MzsgaSsrLG1hc2srKykgeworCQlmb3IgKGo9MCxtPTE7IGogPCAzMjsgaisrLCBtPDw9MSkgeworCQkJaWYgKCptYXNrICYgbSkgeworCQkJCWZwcmludGYoZiwgIiAlcyIsIGUycF9mZWF0dXJlMnN0cmluZyhpLCBtKSk7CisJCQkJcHJpbnRlZCsrOworCQkJfQorCQl9CisJfQorCWlmIChwcmludGVkID09IDApCisJCWZwcmludGYoZiwgIiAobm9uZSkiKTsKKwlmcHJpbnRmKGYsICJcbiIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW50X21udG9wdHMoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzLCBGSUxFICpmKQoreworI2lmZGVmIEVYVDJfRFlOQU1JQ19SRVYKKwlpbnQJaSwgcHJpbnRlZD0wOworCV9fdTMyCW1hc2sgPSBzLT5zX2RlZmF1bHRfbW91bnRfb3B0cywgbTsKKworCWZwcmludGYoZiwgIkRlZmF1bHQgbW91bnQgb3B0aW9uczogICAiKTsKKwlpZiAobWFzayAmIEVYVDNfREVGTV9KTU9ERSkgeworCQlmcHJpbnRmKGYsICIgJXMiLCBlMnBfbW50b3B0MnN0cmluZyhtYXNrICYgRVhUM19ERUZNX0pNT0RFKSk7CisJCXByaW50ZWQrKzsKKwl9CisJZm9yIChpPTAsbT0xOyBpIDwgMzI7IGkrKywgbTw8PTEpIHsKKwkJaWYgKG0gJiBFWFQzX0RFRk1fSk1PREUpCisJCQljb250aW51ZTsKKwkJaWYgKG1hc2sgJiBtKSB7CisJCQlmcHJpbnRmKGYsICIgJXMiLCBlMnBfbW50b3B0MnN0cmluZyhtKSk7CisJCQlwcmludGVkKys7CisJCX0KKwl9CisJaWYgKHByaW50ZWQgPT0gMCkKKwkJZnByaW50ZihmLCAiIChub25lKSIpOworCWZwcmludGYoZiwgIlxuIik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3VwZXJfZmxhZ3Moc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzLCBGSUxFICpmKQoreworCWludAlmbGFnc19mb3VuZCA9IDA7CisKKwlpZiAocy0+c19mbGFncyA9PSAwKQorCQlyZXR1cm47CisKKwlmcHV0cygiRmlsZXN5c3RlbSBmbGFnczogICAgICAgICAiLCBmKTsKKwlpZiAocy0+c19mbGFncyAmIEVYVDJfRkxBR1NfU0lHTkVEX0hBU0gpIHsKKwkJZnB1dHMoInNpZ25lZF9kaXJlY3RvcnlfaGFzaCAiLCBmKTsKKwkJZmxhZ3NfZm91bmQrKzsKKwl9CisJaWYgKHMtPnNfZmxhZ3MgJiBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gpIHsKKwkJZnB1dHMoInVuc2lnbmVkX2RpcmVjdG9yeV9oYXNoICIsIGYpOworCQlmbGFnc19mb3VuZCsrOworCX0KKwlpZiAocy0+c19mbGFncyAmIEVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTKSB7CisJCWZwdXRzKCJ0ZXN0X2ZpbGVzeXN0ZW0gIiwgZik7CisJCWZsYWdzX2ZvdW5kKys7CisJfQorCWlmIChmbGFnc19mb3VuZCkKKwkJZnB1dHMoIlxuIiwgZik7CisJZWxzZQorCQlmcHV0cygiKG5vbmUpXG4iLCBmKTsKK30KKworc3RhdGljIF9fdTY0IGUycF9ibG9ja3NfY291bnQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyKQoreworCXJldHVybiBzdXBlci0+c19ibG9ja3NfY291bnQgfAorCQkoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCShfX3U2NCkgc3VwZXItPnNfYmxvY2tzX2NvdW50X2hpIDw8IDMyIDogMCk7Cit9CisKK3N0YXRpYyBfX3U2NCBlMnBfcl9ibG9ja3NfY291bnQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyKQoreworCXJldHVybiBzdXBlci0+c19yX2Jsb2Nrc19jb3VudCB8CisJCShzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJKF9fdTY0KSBzdXBlci0+c19yX2Jsb2Nrc19jb3VudF9oaSA8PCAzMiA6IDApOworfQorCitzdGF0aWMgX191NjQgZTJwX2ZyZWVfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlyZXR1cm4gc3VwZXItPnNfZnJlZV9ibG9ja3NfY291bnQgfAorCQkoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCShfX3U2NCkgc3VwZXItPnNfZnJlZV9ibG9ja3NfaGkgPDwgMzIgOiAwKTsKK30KKworI2lmbmRlZiBFWFQyX0lOT0RFX1NJWkUKKyNkZWZpbmUgRVhUMl9JTk9ERV9TSVpFKHMpIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkKKyNlbmRpZgorCisjaWZuZGVmIEVYVDJfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDJfR09PRF9PTERfUkVWIDAKKyNlbmRpZgorCit2b2lkIGxpc3Rfc3VwZXIyKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc2IsIEZJTEUgKmYpCit7CisJaW50IGlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJY2hhciBidWZbODBdLCAqc3RyOworCXRpbWVfdAl0bTsKKworCWlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgPSAoKChzYi0+c19pbm9kZXNfcGVyX2dyb3VwICoKKwkJCQkgICAgRVhUMl9JTk9ERV9TSVpFKHNiKSkgKworCQkJCSAgIEVYVDJfQkxPQ0tfU0laRShzYikgLSAxKSAvCisJCQkJICBFWFQyX0JMT0NLX1NJWkUoc2IpKTsKKwlpZiAoc2ItPnNfdm9sdW1lX25hbWVbMF0pIHsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCQlzdHJuY3B5KGJ1Ziwgc2ItPnNfdm9sdW1lX25hbWUsIHNpemVvZihzYi0+c192b2x1bWVfbmFtZSkpOworCX0gZWxzZQorCQlzdHJjcHkoYnVmLCAiPG5vbmU+Iik7CisJZnByaW50ZihmLCAiRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICAlc1xuIiwgYnVmKTsKKwlpZiAoc2ItPnNfbGFzdF9tb3VudGVkWzBdKSB7CisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwkJc3RybmNweShidWYsIHNiLT5zX2xhc3RfbW91bnRlZCwgc2l6ZW9mKHNiLT5zX2xhc3RfbW91bnRlZCkpOworCX0gZWxzZQorCQlzdHJjcHkoYnVmLCAiPG5vdCBhdmFpbGFibGU+Iik7CisJZnByaW50ZihmLCAiTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICAlc1xuIiwgYnVmKTsKKwlmcHJpbnRmKGYsICJGaWxlc3lzdGVtIFVVSUQ6ICAgICAgICAgICVzXG4iLCBlMnBfdXVpZDJzdHIoc2ItPnNfdXVpZCkpOworCWZwcmludGYoZiwgIkZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHglMDRYXG4iLCBzYi0+c19tYWdpYyk7CisJZnByaW50ZihmLCAiRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAlZCIsIHNiLT5zX3Jldl9sZXZlbCk7CisJaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgeworCQlmcHJpbnRmKGYsICIgKG9yaWdpbmFsKVxuIik7CisjaWZkZWYgRVhUMl9EWU5BTUlDX1JFVgorCX0gZWxzZSBpZiAoc2ItPnNfcmV2X2xldmVsID09IEVYVDJfRFlOQU1JQ19SRVYpIHsKKwkJZnByaW50ZihmLCAiIChkeW5hbWljKVxuIik7CisjZW5kaWYKKwl9IGVsc2UKKwkJZnByaW50ZihmLCAiICh1bmtub3duKVxuIik7CisJcHJpbnRfZmVhdHVyZXMoc2IsIGYpOworCXByaW50X3N1cGVyX2ZsYWdzKHNiLCBmKTsKKwlwcmludF9tbnRvcHRzKHNiLCBmKTsKKwlpZiAoc2ItPnNfbW91bnRfb3B0c1swXSkKKwkJZnByaW50ZihmLCAiTW91bnQgb3B0aW9uczogICAgICAgICAgICAlc1xuIiwgc2ItPnNfbW91bnRfb3B0cyk7CisJZnByaW50ZihmLCAiRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICIpOworCXByaW50X2ZzX3N0YXRlIChmLCBzYi0+c19zdGF0ZSk7CisJZnByaW50ZihmLCAiXG4iKTsKKwlmcHJpbnRmKGYsICJFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgICIpOworCXByaW50X2ZzX2Vycm9ycyhmLCBzYi0+c19lcnJvcnMpOworCWZwcmludGYoZiwgIlxuIik7CisJc3RyID0gZTJwX29zMnN0cmluZyhzYi0+c19jcmVhdG9yX29zKTsKKwlmcHJpbnRmKGYsICJGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgICVzXG4iLCBzdHIpOworCWZyZWUoc3RyKTsKKwlmcHJpbnRmKGYsICJJbm9kZSBjb3VudDogICAgICAgICAgICAgICV1XG4iLCBzYi0+c19pbm9kZXNfY291bnQpOworCWZwcmludGYoZiwgIkJsb2NrIGNvdW50OiAgICAgICAgICAgICAgJWxsdVxuIiwgZTJwX2Jsb2Nrc19jb3VudChzYikpOworCWZwcmludGYoZiwgIlJlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgJWxsdVxuIiwgZTJwX3JfYmxvY2tzX2NvdW50KHNiKSk7CisJaWYgKHNiLT5zX292ZXJoZWFkX2Jsb2NrcykKKwkJZnByaW50ZihmLCAiT3ZlcmhlYWQgYmxvY2tzOiAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX292ZXJoZWFkX2Jsb2Nrcyk7CisJZnByaW50ZihmLCAiRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAlbGx1XG4iLCBlMnBfZnJlZV9ibG9ja3NfY291bnQoc2IpKTsKKwlmcHJpbnRmKGYsICJGcmVlIGlub2RlczogICAgICAgICAgICAgICV1XG4iLCBzYi0+c19mcmVlX2lub2Rlc19jb3VudCk7CisJZnByaW50ZihmLCAiRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAldVxuIiwgc2ItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJZnByaW50ZihmLCAiQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAldVxuIiwgRVhUMl9CTE9DS19TSVpFKHNiKSk7CisJaWYgKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykKKwkJZnByaW50ZihmLCAiQ2x1c3RlciBzaXplOiAgICAgICAgICAgICAldVxuIiwKKwkJCUVYVDJfQ0xVU1RFUl9TSVpFKHNiKSk7CisJZWxzZQorCQlmcHJpbnRmKGYsICJGcmFnbWVudCBzaXplOiAgICAgICAgICAgICV1XG4iLAorCQkJRVhUMl9DTFVTVEVSX1NJWkUoc2IpKTsKKwlpZiAoc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZnByaW50ZihmLCAiR3JvdXAgZGVzY3JpcHRvciBzaXplOiAgICAldVxuIiwgc2ItPnNfZGVzY19zaXplKTsKKwlpZiAoc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykKKwkJZnByaW50ZihmLCAiUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAldVxuIiwKKwkJCXNiLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpOworCWZwcmludGYoZiwgIkJsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgJXVcbiIsIHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpCisJCWZwcmludGYoZiwgIkNsdXN0ZXJzIHBlciBncm91cDogICAgICAgJXVcbiIsCisJCQlzYi0+c19jbHVzdGVyc19wZXJfZ3JvdXApOworCWVsc2UKKwkJZnByaW50ZihmLCAiRnJhZ21lbnRzIHBlciBncm91cDogICAgICAldVxuIiwKKwkJCXNiLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCk7CisJZnByaW50ZihmLCAiSW5vZGVzIHBlciBncm91cDogICAgICAgICAldVxuIiwgc2ItPnNfaW5vZGVzX3Blcl9ncm91cCk7CisJZnByaW50ZihmLCAiSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAldVxuIiwgaW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJaWYgKHNiLT5zX3JhaWRfc3RyaWRlKQorCQlmcHJpbnRmKGYsICJSQUlEIHN0cmlkZTogICAgICAgICAgICAgICV1XG4iLAorCQkJc2ItPnNfcmFpZF9zdHJpZGUpOworCWlmIChzYi0+c19yYWlkX3N0cmlwZV93aWR0aCkKKwkJZnByaW50ZihmLCAiUkFJRCBzdHJpcGUgd2lkdGg6ICAgICAgICAldVxuIiwKKwkJCXNiLT5zX3JhaWRfc3RyaXBlX3dpZHRoKTsKKwlpZiAoc2ItPnNfZmlyc3RfbWV0YV9iZykKKwkJZnByaW50ZihmLCAiRmlyc3QgbWV0YSBibG9jayBncm91cDogICAldVxuIiwKKwkJCXNiLT5zX2ZpcnN0X21ldGFfYmcpOworCWlmIChzYi0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KQorCQlmcHJpbnRmKGYsICJGbGV4IGJsb2NrIGdyb3VwIHNpemU6ICAgICV1XG4iLAorCQkJMSA8PCBzYi0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KTsKKwlpZiAoc2ItPnNfbWtmc190aW1lKSB7CisJCXRtID0gc2ItPnNfbWtmc190aW1lOworCQlmcHJpbnRmKGYsICJGaWxlc3lzdGVtIGNyZWF0ZWQ6ICAgICAgICVzIiwgY3RpbWUoJnRtKSk7CisJfQorCXRtID0gc2ItPnNfbXRpbWU7CisJZnByaW50ZihmLCAiTGFzdCBtb3VudCB0aW1lOiAgICAgICAgICAlcyIsCisJCXNiLT5zX210aW1lID8gY3RpbWUoJnRtKSA6ICJuL2FcbiIpOworCXRtID0gc2ItPnNfd3RpbWU7CisJZnByaW50ZihmLCAiTGFzdCB3cml0ZSB0aW1lOiAgICAgICAgICAlcyIsIGN0aW1lKCZ0bSkpOworCWZwcmludGYoZiwgIk1vdW50IGNvdW50OiAgICAgICAgICAgICAgJXVcbiIsIHNiLT5zX21udF9jb3VudCk7CisJZnByaW50ZihmLCAiTWF4aW11bSBtb3VudCBjb3VudDogICAgICAlZFxuIiwgc2ItPnNfbWF4X21udF9jb3VudCk7CisJdG0gPSBzYi0+c19sYXN0Y2hlY2s7CisJZnByaW50ZihmLCAiTGFzdCBjaGVja2VkOiAgICAgICAgICAgICAlcyIsIGN0aW1lKCZ0bSkpOworCWZwcmludGYoZiwgIkNoZWNrIGludGVydmFsOiAgICAgICAgICAgJXUgKCVzKVxuIiwgc2ItPnNfY2hlY2tpbnRlcnZhbCwKKwkgICAgICAgaW50ZXJ2YWxfc3RyaW5nKHNiLT5zX2NoZWNraW50ZXJ2YWwpKTsKKwlpZiAoc2ItPnNfY2hlY2tpbnRlcnZhbCkKKwl7CisJCXRpbWVfdCBuZXh0OworCisJCW5leHQgPSBzYi0+c19sYXN0Y2hlY2sgKyBzYi0+c19jaGVja2ludGVydmFsOworCQlmcHJpbnRmKGYsICJOZXh0IGNoZWNrIGFmdGVyOiAgICAgICAgICVzIiwgY3RpbWUoJm5leHQpKTsKKwl9CisjZGVmaW5lIFBPVzIoeCkgKChfX3U2NCkgMSA8PCAoeCkpCisJaWYgKHNiLT5zX2tieXRlc193cml0dGVuKSB7CisJCWZwcmludGYoZiwgIkxpZmV0aW1lIHdyaXRlczogICAgICAgICAgIik7CisJCWlmIChzYi0+c19rYnl0ZXNfd3JpdHRlbiA8IFBPVzIoMTMpKQorCQkJZnByaW50ZihmLCAiJWxsdSBrQlxuIiwgc2ItPnNfa2J5dGVzX3dyaXR0ZW4pOworCQllbHNlIGlmIChzYi0+c19rYnl0ZXNfd3JpdHRlbiA8IFBPVzIoMjMpKQorCQkJZnByaW50ZihmLCAiJWxsdSBNQlxuIiwKKwkJCQkoc2ItPnNfa2J5dGVzX3dyaXR0ZW4gKyBQT1cyKDkpKSA+PiAxMCk7CisJCWVsc2UgaWYgKHNiLT5zX2tieXRlc193cml0dGVuIDwgUE9XMigzMykpCisJCQlmcHJpbnRmKGYsICIlbGx1IEdCXG4iLAorCQkJCShzYi0+c19rYnl0ZXNfd3JpdHRlbiArIFBPVzIoMTkpKSA+PiAyMCk7CisJCWVsc2UgaWYgKHNiLT5zX2tieXRlc193cml0dGVuIDwgUE9XMig0MykpCisJCQlmcHJpbnRmKGYsICIlbGx1IFRCXG4iLAorCQkJCShzYi0+c19rYnl0ZXNfd3JpdHRlbiArIFBPVzIoMjkpKSA+PiAzMCk7CisJCWVsc2UKKwkJCWZwcmludGYoZiwgIiVsbHUgUEJcbiIsCisJCQkJKHNiLT5zX2tieXRlc193cml0dGVuICsgUE9XMigzOSkpID4+IDQwKTsKKwl9CisJZnByaW50ZihmLCAiUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAiKTsKKwlwcmludF91c2VyKHNiLT5zX2RlZl9yZXN1aWQsIGYpOworCWZwcmludGYoZiwgIlJlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgIik7CisJcHJpbnRfZ3JvdXAoc2ItPnNfZGVmX3Jlc2dpZCwgZik7CisJaWYgKHNiLT5zX3Jldl9sZXZlbCA+PSBFWFQyX0RZTkFNSUNfUkVWKSB7CisJCWZwcmludGYoZiwgIkZpcnN0IGlub2RlOiAgICAgICAgICAgICAgJWRcbiIsIHNiLT5zX2ZpcnN0X2lubyk7CisJCWZwcmludGYoZiwgIklub2RlIHNpemU6CSAgICAgICAgICAlZFxuIiwgc2ItPnNfaW5vZGVfc2l6ZSk7CisJCWlmIChzYi0+c19taW5fZXh0cmFfaXNpemUpCisJCQlmcHJpbnRmKGYsICJSZXF1aXJlZCBleHRyYSBpc2l6ZTogICAgICVkXG4iLAorCQkJCXNiLT5zX21pbl9leHRyYV9pc2l6ZSk7CisJCWlmIChzYi0+c193YW50X2V4dHJhX2lzaXplKQorCQkJZnByaW50ZihmLCAiRGVzaXJlZCBleHRyYSBpc2l6ZTogICAgICAlZFxuIiwKKwkJCQlzYi0+c193YW50X2V4dHJhX2lzaXplKTsKKwl9CisJaWYgKCFlMnBfaXNfbnVsbF91dWlkKHNiLT5zX2pvdXJuYWxfdXVpZCkpCisJCWZwcmludGYoZiwgIkpvdXJuYWwgVVVJRDogICAgICAgICAgICAgJXNcbiIsCisJCQllMnBfdXVpZDJzdHIoc2ItPnNfam91cm5hbF91dWlkKSk7CisJaWYgKHNiLT5zX2pvdXJuYWxfaW51bSkKKwkJZnByaW50ZihmLCAiSm91cm5hbCBpbm9kZTogICAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX2pvdXJuYWxfaW51bSk7CisJaWYgKHNiLT5zX2pvdXJuYWxfZGV2KQorCQlmcHJpbnRmKGYsICJKb3VybmFsIGRldmljZToJICAgICAgICAgIDB4JTA0eFxuIiwKKwkJCXNiLT5zX2pvdXJuYWxfZGV2KTsKKwlpZiAoc2ItPnNfbGFzdF9vcnBoYW4pCisJCWZwcmludGYoZiwgIkZpcnN0IG9ycGhhbiBpbm9kZTogICAgICAgJXVcbiIsCisJCQlzYi0+c19sYXN0X29ycGhhbik7CisJaWYgKChzYi0+c19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSB8fAorCSAgICBzYi0+c19kZWZfaGFzaF92ZXJzaW9uKQorCQlmcHJpbnRmKGYsICJEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgICVzXG4iLAorCQkJZTJwX2hhc2gyc3RyaW5nKHNiLT5zX2RlZl9oYXNoX3ZlcnNpb24pKTsKKwlpZiAoIWUycF9pc19udWxsX3V1aWQoc2ItPnNfaGFzaF9zZWVkKSkKKwkJZnByaW50ZihmLCAiRGlyZWN0b3J5IEhhc2ggU2VlZDogICAgICAlc1xuIiwKKwkJCWUycF91dWlkMnN0cihzYi0+c19oYXNoX3NlZWQpKTsKKwlpZiAoc2ItPnNfam5sX2JhY2t1cF90eXBlKSB7CisJCWZwcmludGYoZiwgIkpvdXJuYWwgYmFja3VwOiAgICAgICAgICAgIik7CisJCXN3aXRjaCAoc2ItPnNfam5sX2JhY2t1cF90eXBlKSB7CisJCWNhc2UgMToKKwkJCWZwcmludGYoZiwgImlub2RlIGJsb2Nrc1xuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoZiwgInR5cGUgJXVcbiIsIHNiLT5zX2pubF9iYWNrdXBfdHlwZSk7CisJCX0KKwl9CisJaWYgKHNiLT5zX3NuYXBzaG90X2ludW0pIHsKKwkJZnByaW50ZihmLCAiU25hcHNob3QgaW5vZGU6ICAgICAgICAgICAldVxuIiwKKwkJCXNiLT5zX3NuYXBzaG90X2ludW0pOworCQlmcHJpbnRmKGYsICJTbmFwc2hvdCBJRDogICAgICAgICAgICAgICV1XG4iLAorCQkJc2ItPnNfc25hcHNob3RfaWQpOworCQlmcHJpbnRmKGYsICJTbmFwc2hvdCByZXNlcnZlZCBibG9ja3M6ICVsbHVcbiIsCisJCQlzYi0+c19zbmFwc2hvdF9yX2Jsb2Nrc19jb3VudCk7CisJfQorCWlmIChzYi0+c19zbmFwc2hvdF9saXN0KQorCQlmcHJpbnRmKGYsICJTbmFwc2hvdCBsaXN0IGhlYWQ6ICAgICAgICV1XG4iLAorCQkJc2ItPnNfc25hcHNob3RfbGlzdCk7CisJaWYgKHNiLT5zX2Vycm9yX2NvdW50KQorCQlmcHJpbnRmKGYsICJGUyBFcnJvciBjb3VudDogICAgICAgICAgICV1XG4iLAorCQkJc2ItPnNfZXJyb3JfY291bnQpOworCWlmIChzYi0+c19maXJzdF9lcnJvcl90aW1lKSB7CisJCXRtID0gc2ItPnNfZmlyc3RfZXJyb3JfdGltZTsKKwkJZnByaW50ZihmLCAiRmlyc3QgZXJyb3IgdGltZTogICAgICAgICAlcyIsIGN0aW1lKCZ0bSkpOworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJCXN0cm5jcHkoYnVmLCAoY2hhciAqKXNiLT5zX2ZpcnN0X2Vycm9yX2Z1bmMsCisJCQlzaXplb2Yoc2ItPnNfZmlyc3RfZXJyb3JfZnVuYykpOworCQlmcHJpbnRmKGYsICJGaXJzdCBlcnJvciBmdW5jdGlvbjogICAgICVzXG4iLCBidWYpOworCQlmcHJpbnRmKGYsICJGaXJzdCBlcnJvciBsaW5lICM6ICAgICAgICV1XG4iLAorCQkJc2ItPnNfZmlyc3RfZXJyb3JfbGluZSk7CisJCWZwcmludGYoZiwgIkZpcnN0IGVycm9yIGlub2RlICM6ICAgICAgJXVcbiIsCisJCQlzYi0+c19maXJzdF9lcnJvcl9pbm8pOworCQlmcHJpbnRmKGYsICJGaXJzdCBlcnJvciBibG9jayAjOiAgICAgICVsbHVcbiIsCisJCQlzYi0+c19maXJzdF9lcnJvcl9ibG9jayk7CisJfQorCWlmIChzYi0+c19sYXN0X2Vycm9yX3RpbWUpIHsKKwkJdG0gPSBzYi0+c19sYXN0X2Vycm9yX3RpbWU7CisJCWZwcmludGYoZiwgIkxhc3QgZXJyb3IgdGltZTogICAgICAgICAgJXMiLCBjdGltZSgmdG0pKTsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCQlzdHJuY3B5KGJ1ZiwgKGNoYXIgKilzYi0+c19sYXN0X2Vycm9yX2Z1bmMsCisJCQlzaXplb2Yoc2ItPnNfbGFzdF9lcnJvcl9mdW5jKSk7CisJCWZwcmludGYoZiwgIkxhc3QgZXJyb3IgZnVuY3Rpb246ICAgICAgJXNcbiIsIGJ1Zik7CisJCWZwcmludGYoZiwgIkxhc3QgZXJyb3IgbGluZSAjOiAgICAgICAgJXVcbiIsCisJCQlzYi0+c19sYXN0X2Vycm9yX2xpbmUpOworCQlmcHJpbnRmKGYsICJMYXN0IGVycm9yIGlub2RlICM6ICAgICAgICV1XG4iLAorCQkJc2ItPnNfbGFzdF9lcnJvcl9pbm8pOworCQlmcHJpbnRmKGYsICJMYXN0IGVycm9yIGJsb2NrICM6ICAgICAgICVsbHVcbiIsCisJCQlzYi0+c19sYXN0X2Vycm9yX2Jsb2NrKTsKKwl9CisJaWYgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSB7CisJCWZwcmludGYoZiwgIk1NUCBibG9jayBudW1iZXI6ICAgICAgICAgJWxsdVxuIiwKKwkJCShsb25nIGxvbmcpc2ItPnNfbW1wX2Jsb2NrKTsKKwkJZnByaW50ZihmLCAiTU1QIHVwZGF0ZSBpbnRlcnZhbDogICAgICAldVxuIiwKKwkJCXNiLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwpOworCX0KKwlpZiAoc2ItPnNfdXNyX3F1b3RhX2ludW0pCisJCWZwcmludGYoZiwgIlVzZXIgcXVvdGEgaW5vZGU6ICAgICAgICAgJXVcbiIsCisJCQlzYi0+c191c3JfcXVvdGFfaW51bSk7CisJaWYgKHNiLT5zX2dycF9xdW90YV9pbnVtKQorCQlmcHJpbnRmKGYsICJHcm91cCBxdW90YSBpbm9kZTogICAgICAgICV1XG4iLAorCQkJc2ItPnNfZ3JwX3F1b3RhX2ludW0pOworCisJaWYgKHNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9NRVRBREFUQV9DU1VNKQorCQlmcHJpbnRmKGYsICJDaGVja3N1bTogICAgICAgICAgICAgICAgIDB4JTA4eFxuIiwKKwkJCXNiLT5zX2NoZWNrc3VtKTsKK30KKwordm9pZCBsaXN0X3N1cGVyIChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIHMpCit7CisJbGlzdF9zdXBlcjIocywgc3Rkb3V0KTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvbW50b3B0cy5jIGIvZTJmc3Byb2dzL2xpYi9lMnAvbW50b3B0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzg3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9tbnRvcHRzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBtb3VudG9wdHMuYyAtLS0gY29udmVydCBiZXR3ZWVuIGRlZmF1bHQgbW91bnQgb3B0aW9ucyBhbmQgc3RyaW5ncworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImUycC5oIgorCitzdHJ1Y3QgbW50b3B0IHsKKwl1bnNpZ25lZCBpbnQJbWFzazsKKwljb25zdCBjaGFyCSpzdHJpbmc7Cit9OworCitzdGF0aWMgc3RydWN0IG1udG9wdCBtbnRvcHRfbGlzdFtdID0geworCXsgRVhUMl9ERUZNX0RFQlVHLAkiZGVidWciIH0sCisJeyBFWFQyX0RFRk1fQlNER1JPVVBTLAkiYnNkZ3JvdXBzIiB9LAorCXsgRVhUMl9ERUZNX1hBVFRSX1VTRVIsCSJ1c2VyX3hhdHRyIiB9LAorCXsgRVhUMl9ERUZNX0FDTCwJImFjbCIgfSwKKwl7IEVYVDJfREVGTV9VSUQxNiwJInVpZDE2IiB9LAorCXsgRVhUM19ERUZNX0pNT0RFX0RBVEEsICJqb3VybmFsX2RhdGEiIH0sCisJeyBFWFQzX0RFRk1fSk1PREVfT1JERVJFRCwgImpvdXJuYWxfZGF0YV9vcmRlcmVkIiB9LAorCXsgRVhUM19ERUZNX0pNT0RFX1dCQUNLLCAiam91cm5hbF9kYXRhX3dyaXRlYmFjayIgfSwKKwl7IEVYVDRfREVGTV9OT0JBUlJJRVIsCSJub2JhcnJpZXIiIH0sCisJeyBFWFQ0X0RFRk1fQkxPQ0tfVkFMSURJVFksICJibG9ja192YWxpZGl0eSIgfSwKKwl7IEVYVDRfREVGTV9ESVNDQVJELAkiZGlzY2FyZCJ9LAorCXsgRVhUNF9ERUZNX05PREVMQUxMT0MsCSJub2RlbGFsbG9jIn0sCisJeyAwLCAwIH0sCit9OworCitjb25zdCBjaGFyICplMnBfbW50b3B0MnN0cmluZyh1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgbW50b3B0ICAqZjsKKwlzdGF0aWMgY2hhciBidWZbMjBdOworCWludAlmbnVtOworCisJZm9yIChmID0gbW50b3B0X2xpc3Q7IGYtPnN0cmluZzsgZisrKSB7CisJCWlmIChtYXNrID09IGYtPm1hc2spCisJCQlyZXR1cm4gZi0+c3RyaW5nOworCX0KKwlmb3IgKGZudW0gPSAwOyBtYXNrID4+PSAxOyBmbnVtKyspOworCXNwcmludGYoYnVmLCAiTU5UT1BUXyVkIiwgZm51bSk7CisJcmV0dXJuIGJ1ZjsKK30KKworaW50IGUycF9zdHJpbmcybW50b3B0KGNoYXIgKnN0cmluZywgdW5zaWduZWQgaW50ICptYXNrKQoreworCXN0cnVjdCBtbnRvcHQgICpmOworCWNoYXIJCSplcHRyOworCWludAkJbnVtOworCisJZm9yIChmID0gbW50b3B0X2xpc3Q7IGYtPnN0cmluZzsgZisrKSB7CisJCWlmICghc3RyY2FzZWNtcChzdHJpbmcsIGYtPnN0cmluZykpIHsKKwkJCSptYXNrID0gZi0+bWFzazsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChzdHJuY2FzZWNtcChzdHJpbmcsICJNTlRPUFRfIiwgNykpCisJCXJldHVybiAxOworCisJaWYgKHN0cmluZ1s4XSA9PSAwKQorCQlyZXR1cm4gMTsKKwludW0gPSBzdHJ0b2woc3RyaW5nKzgsICZlcHRyLCAxMCk7CisJaWYgKG51bSA+IDMyIHx8IG51bSA8IDApCisJCXJldHVybiAxOworCWlmICgqZXB0cikKKwkJcmV0dXJuIDE7CisJKm1hc2sgPSAxIDw8IG51bTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFua3MoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX3dvcmQoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApICYmICpjcCAhPSAnLCcpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCisvKgorICogRWRpdCBhIG1udG9wdCBzZXQgYXJyYXkgYXMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiAgVGhlIG9rCisgKiBwYXJhbWV0ZXIsIGlmIG5vbi16ZXJvLCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGxpbWl0IHdoYXQKKyAqIG1udG9wdHMgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBzZXQgb3IgY2xlYXIgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworaW50IGUycF9lZGl0X21udG9wdHMoY29uc3QgY2hhciAqc3RyLCBfX3UzMiAqbW50b3B0cywgX191MzIgb2spCit7CisJY2hhcgkqY3AsICpidWYsICpuZXh0OworCWludAluZWc7CisJdW5zaWduZWQgaW50CW1hc2s7CisJaW50CXJjID0gMDsKKworCWJ1ZiA9IG1hbGxvYyhzdHJsZW4oc3RyKSsxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDE7CisJc3RyY3B5KGJ1Ziwgc3RyKTsKKwljcCA9IGJ1ZjsKKwl3aGlsZSAoY3AgJiYgKmNwKSB7CisJCW5lZyA9IDA7CisJCWNwID0gc2tpcF9vdmVyX2JsYW5rcyhjcCk7CisJCW5leHQgPSBza2lwX292ZXJfd29yZChjcCk7CisJCWlmICgqbmV4dCA9PSAwKQorCQkJbmV4dCA9IDA7CisJCWVsc2UKKwkJCSpuZXh0ID0gMDsKKwkJc3dpdGNoICgqY3ApIHsKKwkJY2FzZSAnLSc6CisJCWNhc2UgJ14nOgorCQkJbmVnKys7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlICcrJzoKKwkJCWNwKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZTJwX3N0cmluZzJtbnRvcHQoY3AsICZtYXNrKSkgeworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9rICYmICEob2sgJiBtYXNrKSkgeworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1hc2sgJiBFWFQzX0RFRk1fSk1PREUpCisJCQkqbW50b3B0cyAmPSB+RVhUM19ERUZNX0pNT0RFOworCQlpZiAobmVnKQorCQkJKm1udG9wdHMgJj0gfm1hc2s7CisJCWVsc2UKKwkJCSptbnRvcHRzIHw9IG1hc2s7CisJCWNwID0gbmV4dCA/IG5leHQrMSA6IDA7CisJfQorCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9vc3R5cGUuYyBiL2UyZnNwcm9ncy9saWIvZTJwL29zdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODMxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9vc3R5cGUuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogZ2V0b3N0eXBlLmMgICAgICAgICAgLSBHZXQgdGhlIEZpbGVzeXN0ZW0gT1MgdHlwZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImUycC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqb3NfdGFiW10gPQorCXsgIkxpbnV4IiwKKwkgICJIdXJkIiwKKwkgICJNYXNpeCIsCisJICAiRnJlZUJTRCIsCisJICAiTGl0ZXMiLAorCSAgMCB9OworCisvKgorICogQ29udmVydCBhbiBvc190eXBlIHRvIGEgc3RyaW5nCisgKi8KK2NoYXIgKmUycF9vczJzdHJpbmcoaW50IG9zX3R5cGUpCit7CisgICAgICAgIGNvbnN0IGNoYXIJKm9zOworCWNoYXIgCQkqcmV0OworCisJaWYgKG9zX3R5cGUgPD0gRVhUMl9PU19MSVRFUykKKwkJb3MgPSBvc190YWJbb3NfdHlwZV07CisJZWxzZQorCQlvcyA9ICIodW5rbm93biBvcykiOworCisgICAgICAgIHJldCA9IG1hbGxvYyhzdHJsZW4ob3MpKzEpOworCWlmIChyZXQpCisJCXN0cmNweShyZXQsIG9zKTsKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvbnZlcnQgYW4gb3NfdHlwZSB0byBhIHN0cmluZworICovCitpbnQgZTJwX3N0cmluZzJvcyhjaGFyICpzdHIpCit7CisJY29uc3QgY2hhcgkqKmNwcDsKKwlpbnQJCWkgPSAwOworCisJZm9yIChjcHAgPSBvc190YWI7ICpjcHA7IGNwcCsrLCBpKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKHN0ciwgKmNwcCkpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYgVEVTVF9QUk9HUkFNCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAJKnM7CisJaW50CWksIG9zOworCisJZm9yIChpPTA7IGkgPD0gRVhUMl9PU19MSVRFUzsgaSsrKSB7CisJCXMgPSBlMnBfb3Myc3RyaW5nKGkpOworCQlvcyA9IGUycF9zdHJpbmcyb3Mocyk7CisJCXByaW50ZigiJWQ6ICVzICglZClcbiIsIGksIHMsIG9zKTsKKwkJaWYgKGkgIT0gb3MpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbHVyZSFcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlleGl0KDApOworfQorI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvcGFyc2VfbnVtLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9wYXJzZV9udW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FhM2EzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvcGFyc2VfbnVtLmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHBhcnNlX251bS5jCQktIFBhcnNlIHRoZSBudW1iZXIgb2YgYmxvY2tzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiZTJwLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordW5zaWduZWQgbG9uZyBsb25nIHBhcnNlX251bV9ibG9ja3MyKGNvbnN0IGNoYXIgKmFyZywgaW50IGxvZ19ibG9ja19zaXplKQoreworCWNoYXIgKnA7CisJdW5zaWduZWQgbG9uZyBsb25nIG51bTsKKworCW51bSA9IHN0cnRvdWxsKGFyZywgJnAsIDApOworCisJaWYgKHBbMF0gJiYgcFsxXSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKCpwKSB7CQkvKiBVc2luZyBmYWxsLXRocm91Z2ggbG9naWMgKi8KKwljYXNlICdUJzogY2FzZSAndCc6CisJCW51bSA8PD0gMTA7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSAnRyc6IGNhc2UgJ2cnOgorCQludW0gPDw9IDEwOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgJ00nOiBjYXNlICdtJzoKKwkJbnVtIDw8PSAxMDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlICdLJzogY2FzZSAnayc6CisJCWlmIChsb2dfYmxvY2tfc2l6ZSA8IDApCisJCQludW0gPDw9IDEwOworCQllbHNlCisJCQludW0gPj49IGxvZ19ibG9ja19zaXplOworCQlicmVhazsKKwljYXNlICdzJzoKKwkJaWYgKGxvZ19ibG9ja19zaXplIDwgMCkKKwkJCW51bSA8PD0gOTsKKwkJZWxzZQorCQkJbnVtID4+PSAoMStsb2dfYmxvY2tfc2l6ZSk7CisJCWJyZWFrOworCWNhc2UgJ1wwJzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBudW07Cit9CisKK3Vuc2lnbmVkIGxvbmcgcGFyc2VfbnVtX2Jsb2Nrcyhjb25zdCBjaGFyICphcmcsIGludCBsb2dfYmxvY2tfc2l6ZSkKK3sKKwlyZXR1cm4gcGFyc2VfbnVtX2Jsb2NrczIoYXJnLCBsb2dfYmxvY2tfc2l6ZSk7Cit9CisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWludCBsb2dfYmxvY2tfc2l6ZSA9IDA7CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBhcmcgW2xvZ19ibG9ja19zaXplXVxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFyZ2MgPT0gMykgeworCQljaGFyICpwOworCisJCWxvZ19ibG9ja19zaXplID0gc3RydG9sKGFyZ3ZbMl0sICZwLCAwKTsKKwkJaWYgKCpwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJhZCBsb2dfYmxvY2tfc2l6ZTogJXNcbiIsIGFyZ3ZbMl0pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCW51bSA9IHBhcnNlX251bV9ibG9ja3MoYXJndlsxXSwgbG9nX2Jsb2NrX3NpemUpOworCisJcHJpbnRmKCJQYXJzZWQgbnVtYmVyOiAlbHVcbiIsIG51bSk7CisJZXhpdCgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvcGUuYyBiL2UyZnNwcm9ncy9saWIvZTJwL3BlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjODA5OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL3BlLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIHBlLmMJCQktIFByaW50IGEgc2Vjb25kIGV4dGVuZGVkIGZpbGVzeXN0ZW0gZXJyb3JzIGJlaGF2aW9yCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5NC8wMS8wOQktIENyZWF0aW9uCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKwordm9pZCBwcmludF9mc19lcnJvcnMgKEZJTEUgKiBmLCB1bnNpZ25lZCBzaG9ydCBlcnJvcnMpCit7CisJc3dpdGNoIChlcnJvcnMpCisJeworCQljYXNlIEVYVDJfRVJST1JTX0NPTlRJTlVFOgorCQkJZnByaW50ZiAoZiwgIkNvbnRpbnVlIik7CisJCQlicmVhazsKKwkJY2FzZSBFWFQyX0VSUk9SU19STzoKKwkJCWZwcmludGYgKGYsICJSZW1vdW50IHJlYWQtb25seSIpOworCQkJYnJlYWs7CisJCWNhc2UgRVhUMl9FUlJPUlNfUEFOSUM6CisJCQlmcHJpbnRmIChmLCAiUGFuaWMiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZiAoZiwgIlVua25vd24gKGNvbnRpbnVlKSIpOworCX0KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL3BlcmNlbnQuYyBiL2UyZnNwcm9ncy9saWIvZTJwL3BlcmNlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE3MDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvcGVyY2VudC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBwZXJjZW50LmMJCS0gVGFrZSBwZXJjZW50YWdlIG9mIGEgbnVtYmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgImUycC5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBXZSB3b3JrIHJlYWxseSBoYXJkIHRvIGNhbGN1bGF0ZSB0aGlzIGFjY3VyYXRlbHksIHdoaWxlIGF2b2lkaW5nCisgKiBhbiBvdmVyZmxvdy4gICJJcyB0aGVyZSBhIGh5cGhlbiBpbiBhbmFsLXJldGVudGl2ZT8iICA6LSkKKyAqLwordW5zaWduZWQgaW50IGUycF9wZXJjZW50KGludCBwZXJjZW50LCB1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IH4oKDEgPDwgKHNpemVvZih1bnNpZ25lZCBpbnQpIC0gMSkgKiA4KSAtIDEpOworCisJaWYgKCFwZXJjZW50KQorCQlyZXR1cm4gMDsKKwlpZiAoMTAwICUgcGVyY2VudCA9PSAwKQorCQlyZXR1cm4gYmFzZSAvICgxMDAgLyBwZXJjZW50KTsKKwlpZiAobWFzayAmIGJhc2UpCisJCXJldHVybiAoYmFzZSAvIDEwMCkgKiBwZXJjZW50OworCXJldHVybiBiYXNlICogcGVyY2VudCAvIDEwMDsKK30KKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGJhc2U7CisJaW50IHBlcmNlbnQ7CisJY2hhciAqcDsKKwlpbnQgbG9nX2Jsb2NrX3NpemUgPSAwOworCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBwZXJjZW50IGJhc2VcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCXBlcmNlbnQgPSBzdHJ0b3VsKGFyZ3ZbMV0sICZwLCAwKTsKKwlpZiAocFswXSAmJiBwWzFdKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQmFkIHBlcmNlbnQ6ICVzXG4iLCBhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwliYXNlID0gc3RydG91bChhcmd2WzJdLCAmcCwgMCk7CisJaWYgKHBbMF0gJiYgcFsxXSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkJhZCBiYXNlOiAlc1xuIiwgYXJndlsyXSk7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCIlZCBwZXJjZW50IG9mICV1IGlzICV1LlxuIiwgcGVyY2VudCwgYmFzZSwKKwkgICAgICAgZTJwX3BlcmNlbnQocGVyY2VudCwgYmFzZSkpOworCisJZXhpdCgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9lMnAvcGYuYyBiL2UyZnNwcm9ncy9saWIvZTJwL3BmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiNWM4YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL3BmLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIHBmLmMJCQktIFByaW50IGZpbGUgYXR0cmlidXRlcyBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIEhpc3Rvcnk6CisgKiA5My8xMC8zMAktIENyZWF0aW9uCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJlMnAuaCIKKworc3RydWN0IGZsYWdzX25hbWUgeworCXVuc2lnbmVkIGxvbmcJZmxhZzsKKwljb25zdCBjaGFyCSpzaG9ydF9uYW1lOworCWNvbnN0IGNoYXIJKmxvbmdfbmFtZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhZ3NfbmFtZSBmbGFnc19hcnJheVtdID0geworCXsgRVhUMl9TRUNSTV9GTCwgInMiLCAiU2VjdXJlX0RlbGV0aW9uIiB9LAorCXsgRVhUMl9VTlJNX0ZMLCAidSIgLCAiVW5kZWxldGUiIH0sCisJeyBFWFQyX1NZTkNfRkwsICJTIiwgIlN5bmNocm9ub3VzX1VwZGF0ZXMiIH0sCisJeyBFWFQyX0RJUlNZTkNfRkwsICJEIiwgIlN5bmNocm9ub3VzX0RpcmVjdG9yeV9VcGRhdGVzIiB9LAorCXsgRVhUMl9JTU1VVEFCTEVfRkwsICJpIiwgIkltbXV0YWJsZSIgfSwKKwl7IEVYVDJfQVBQRU5EX0ZMLCAiYSIsICJBcHBlbmRfT25seSIgfSwKKwl7IEVYVDJfTk9EVU1QX0ZMLCAiZCIsICJOb19EdW1wIiB9LAorCXsgRVhUMl9OT0FUSU1FX0ZMLCAiQSIsICJOb19BdGltZSIgfSwKKwl7IEVYVDJfQ09NUFJfRkwsICJjIiwgIkNvbXByZXNzaW9uX1JlcXVlc3RlZCIgfSwKKyNpZmRlZiBFTkFCTEVfQ09NUFJFU1NJT04KKwl7IEVYVDJfQ09NUFJCTEtfRkwsICJCIiwgIkNvbXByZXNzZWRfRmlsZSIgfSwKKwl7IEVYVDJfRElSVFlfRkwsICJaIiwgIkNvbXByZXNzZWRfRGlydHlfRmlsZSIgfSwKKwl7IEVYVDJfTk9DT01QUl9GTCwgIlgiLCAiQ29tcHJlc3Npb25fUmF3X0FjY2VzcyIgfSwKKwl7IEVYVDJfRUNPTVBSX0ZMLCAiRSIsICJDb21wcmVzc2lvbl9FcnJvciIgfSwKKyNlbHNlCisJeyBFWFQ0X0VOQ1JZUFRfRkwsICJFIiwgIkVuY3J5cHRlZCIgfSwKKyNlbmRpZgorCXsgRVhUM19KT1VSTkFMX0RBVEFfRkwsICJqIiwgIkpvdXJuYWxlZF9EYXRhIiB9LAorCXsgRVhUMl9JTkRFWF9GTCwgIkkiLCAiSW5kZXhlZF9kaXJlY3RvcnkiIH0sCisJeyBFWFQyX05PVEFJTF9GTCwgInQiLCAiTm9fVGFpbG1lcmdpbmciIH0sCisJeyBFWFQyX1RPUERJUl9GTCwgIlQiLCAiVG9wX29mX0RpcmVjdG9yeV9IaWVyYXJjaGllcyIgfSwKKwl7IEVYVDRfRVhURU5UU19GTCwgImUiLCAiRXh0ZW50cyIgfSwKKwl7IEVYVDRfSFVHRV9GSUxFX0ZMLCAiaCIsICJIdWdlX2ZpbGUiIH0sCisJeyBGU19OT0NPV19GTCwgIkMiLCAiTm9fQ09XIiB9LAorCXsgMCwgTlVMTCwgTlVMTCB9Cit9OworCit2b2lkIHByaW50X2ZsYWdzIChGSUxFICogZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgb3B0aW9ucykKK3sKKwlpbnQgbG9uZ19vcHQgPSAob3B0aW9ucyAmIFBGT1BUX0xPTkcpOworCXN0cnVjdCBmbGFnc19uYW1lICpmcDsKKwlpbnQJZmlyc3QgPSAxOworCisJZm9yIChmcCA9IGZsYWdzX2FycmF5OyBmcC0+ZmxhZyAhPSAwOyBmcCsrKSB7CisJCWlmIChmbGFncyAmIGZwLT5mbGFnKSB7CisJCQlpZiAobG9uZ19vcHQpIHsKKwkJCQlpZiAoZmlyc3QpCisJCQkJCWZpcnN0ID0gMDsKKwkJCQllbHNlCisJCQkJCWZwdXRzKCIsICIsIGYpOworCQkJCWZwdXRzKGZwLT5sb25nX25hbWUsIGYpOworCQkJfSBlbHNlCisJCQkJZnB1dHMoZnAtPnNob3J0X25hbWUsIGYpOworCQl9IGVsc2UgeworCQkJaWYgKCFsb25nX29wdCkKKwkJCQlmcHV0cygiLSIsIGYpOworCQl9CisJfQorCWlmIChsb25nX29wdCAmJiBmaXJzdCkKKwkJZnB1dHMoIi0tLSIsIGYpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC9wcy5jIGIvZTJmc3Byb2dzL2xpYi9lMnAvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFkNjBhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvcHMuYwpAQCAtMCwwICsxLDMxIEBACisvKgorICogcHMuYwkJCS0gUHJpbnQgZmlsZXN5c3RlbSBzdGF0ZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTIvMjIJLSBDcmVhdGlvbgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK3ZvaWQgcHJpbnRfZnNfc3RhdGUgKEZJTEUgKiBmLCB1bnNpZ25lZCBzaG9ydCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgJiBFWFQyX1ZBTElEX0ZTKQorCQlmcHJpbnRmIChmLCAiIGNsZWFuIik7CisJZWxzZQorCQlmcHJpbnRmIChmLCAiIG5vdCBjbGVhbiIpOworCWlmIChzdGF0ZSAmIEVYVDJfRVJST1JfRlMpCisJCWZwcmludGYgKGYsICIgd2l0aCBlcnJvcnMiKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL3NldGZsYWdzLmMgYi9lMmZzcHJvZ3MvbGliL2UycC9zZXRmbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDM2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2UycC9zZXRmbGFncy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBzZXRmbGFncy5jCQktIFNldCBhIGZpbGUgZmxhZ3Mgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMTAvMzAJLSBDcmVhdGlvbgorICovCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImUycC5oIgorCisvKgorICogRGVhbCB3aXRoIGxhbWUgZ2xpYmMncyB0aGF0IGRlZmluZSB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgYWN0dWFsbHkKKyAqIGltcGxlbWVudGluZyBpdC4gIENhbiB5b3Ugc2F5ICJhdHRyYWN0aXZlIG51aXNhbmNlIiwgYm95cyBhbmQgZ2lybHM/CisgKiBJIGtuZXcgeW91IGNvdWxkIQorICovCisjaWZkZWYgX19saW51eF9fCisjdW5kZWYgSEFWRV9DSEZMQUdTCisjZW5kaWYKKworaW50IHNldGZsYWdzIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWYgSEFWRV9DSEZMQUdTCisJdW5zaWduZWQgbG9uZyBic2RfZmxhZ3MgPSAwOworCisjaWZkZWYgVUZfSU1NVVRBQkxFCisJaWYgKGZsYWdzICYgRVhUMl9JTU1VVEFCTEVfRkwpCisJCWJzZF9mbGFncyB8PSBVRl9JTU1VVEFCTEU7CisjZW5kaWYKKyNpZmRlZiBVRl9BUFBFTkQKKwlpZiAoZmxhZ3MgJiBFWFQyX0FQUEVORF9GTCkKKwkJYnNkX2ZsYWdzIHw9IFVGX0FQUEVORDsKKyNlbmRpZgorI2lmZGVmIFVGX05PRFVNUAorCWlmIChmbGFncyAmIEVYVDJfTk9EVU1QX0ZMKQorCQlic2RfZmxhZ3MgfD0gVUZfTk9EVU1QOworI2VuZGlmCisKKwlyZXR1cm4gZmNoZmxhZ3MgKGZkLCBic2RfZmxhZ3MpOworI2Vsc2UgLyogISBIQVZFX0NIRkxBR1MgKi8KKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJc3RydWN0IHN0YXQgYnVmOworCWludAlmOworCisJaWYgKCFmc3RhdChmZCwgJmJ1ZikgJiYKKwkgICAgIVNfSVNSRUcoYnVmLnN0X21vZGUpICYmICFTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgeworCQllcnJubyA9IEVPUE5PVFNVUFA7CisJCXJldHVybiAtMTsKKwl9CisJZiA9IChpbnQpIGZsYWdzOworCisJcmV0dXJuIGlvY3RsKGZkLCBFWFQyX0lPQ19TRVRGTEFHUywgJmYpOworI2Vsc2UKKwllcnJubyA9IEVPUE5PVFNVUFA7CisJcmV0dXJuIC0xOworI2VuZGlmIC8qIEhBVkVfRVhUMl9JT0NUTFMgKi8KKyNlbmRpZiAvKiBIQVZFX0NIRkxBR1MgKi8KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZTJwL3NldHZlcnNpb24uYyBiL2UyZnNwcm9ncy9saWIvZTJwL3NldHZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzIyNzBiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9lMnAvc2V0dmVyc2lvbi5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBzZXR2ZXJzaW9uLmMJCS0gU2V0IGEgZmlsZSB2ZXJzaW9uIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqLworCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK2ludCBzZXR2ZXJzaW9uIChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgdmVyc2lvbikKK3sKKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJaW50IHZlcjsKKworCXZlciA9IChpbnQpIHZlcnNpb247CisJcmV0dXJuIGlvY3RsIChmZCwgRVhUMl9JT0NfU0VUVkVSU0lPTiwgJnZlcik7CisjZWxzZSAvKiAhIEhBVkVfRVhUMl9JT0NUTFMgKi8KKwlleHRlcm4gaW50IGVycm5vOworCWVycm5vID0gRU9QTk9UU1VQUDsKKwlyZXR1cm4gLTE7CisjZW5kaWYgLyogISBIQVZFX0VYVDJfSU9DVExTICovCit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2UycC91dWlkLmMgYi9lMmZzcHJvZ3MvbGliL2UycC91dWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwYjAxZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZTJwL3V1aWQuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogdXVpZC5jIC0tIHV0aWxpdHkgcm91dGluZXMgZm9yIG1hbmlwdWxhdGluZyBVVUlEJ3MuCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml90eXBlcy5oPgorCisjaW5jbHVkZSAiZTJwLmgiCisKK3N0cnVjdCB1dWlkIHsKKwlfX3UzMgl0aW1lX2xvdzsKKwlfX3UxNgl0aW1lX21pZDsKKwlfX3UxNgl0aW1lX2hpX2FuZF92ZXJzaW9uOworCV9fdTE2CWNsb2NrX3NlcTsKKwlfX3U4CW5vZGVbNl07Cit9OworCisvKiBSZXR1cm5zIDEgaWYgdGhlIHV1aWQgaXMgdGhlIE5VTEwgdXVpZCAqLworaW50IGUycF9pc19udWxsX3V1aWQodm9pZCAqdXUpCit7CisJX191OCAJKmNwOworCWludAlpOworCisJZm9yIChpPTAsIGNwID0gdXU7IGkgPCAxNjsgaSsrKQorCQlpZiAoKmNwKyspCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZTJwX3VucGFja191dWlkKHZvaWQgKmluLCBzdHJ1Y3QgdXVpZCAqdXUpCit7CisJX191OAkqcHRyID0gaW47CisJX191MzIJdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2xvdyA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX21pZCA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2hpX2FuZF92ZXJzaW9uID0gdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPmNsb2NrX3NlcSA9IHRtcDsKKworCW1lbWNweSh1dS0+bm9kZSwgcHRyLCA2KTsKK30KKwordm9pZCBlMnBfdXVpZF90b19zdHIodm9pZCAqdXUsIGNoYXIgKm91dCkKK3sKKwlzdHJ1Y3QgdXVpZCB1dWlkOworCisJZTJwX3VucGFja191dWlkKHV1LCAmdXVpZCk7CisJc3ByaW50ZihvdXQsCisJCSIlMDh4LSUwNHgtJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLAorCQl1dWlkLnRpbWVfbG93LCB1dWlkLnRpbWVfbWlkLCB1dWlkLnRpbWVfaGlfYW5kX3ZlcnNpb24sCisJCXV1aWQuY2xvY2tfc2VxID4+IDgsIHV1aWQuY2xvY2tfc2VxICYgMHhGRiwKKwkJdXVpZC5ub2RlWzBdLCB1dWlkLm5vZGVbMV0sIHV1aWQubm9kZVsyXSwKKwkJdXVpZC5ub2RlWzNdLCB1dWlkLm5vZGVbNF0sIHV1aWQubm9kZVs1XSk7Cit9CisKK2NvbnN0IGNoYXIgKmUycF91dWlkMnN0cih2b2lkICp1dSkKK3sKKwlzdGF0aWMgY2hhciBidWZbODBdOworCisJaWYgKGUycF9pc19udWxsX3V1aWQodXUpKQorCQlyZXR1cm4gIjxub25lPiI7CisJZTJwX3V1aWRfdG9fc3RyKHV1LCBidWYpOworCXJldHVybiBidWY7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvQW5kcm9pZC5tayBiL2UyZnNwcm9ncy9saWIvZXQvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTlkOGZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNzYgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworbGliZXh0Ml9jb21fZXJyX3NyY19maWxlcyA6PSBcCisJZXJyb3JfbWVzc2FnZS5jIFwKKwlldF9uYW1lLmMgXAorCWluaXRfZXQuYyBcCisJY29tX2Vyci5jIFwKKwljb21fcmlnaHQuYworCitsaWJleHQyX2NvbV9lcnJfY19pbmNsdWRlcyA6PSBleHRlcm5hbC9lMmZzcHJvZ3MvbGliCisKK2xpYmV4dDJfY29tX2Vycl9jZmxhZ3MgOj0gLU8yIC1nIC1XIC1XYWxsIFwKKwktREhBVkVfVU5JU1REX0ggXAorCS1ESEFWRV9FUlJOT19IIFwKKwktREhBVkVfTkVUSU5FVF9JTl9IIFwKKwktREhBVkVfU1lTX0lPQ1RMX0ggXAorCS1ESEFWRV9TWVNfTU1BTl9IIFwKKwktREhBVkVfU1lTX01PVU5UX0ggXAorCS1ESEFWRV9TWVNfUkVTT1VSQ0VfSCBcCisJLURIQVZFX1NZU19TRUxFQ1RfSCBcCisJLURIQVZFX1NZU19TVEFUX0ggXAorCS1ESEFWRV9TWVNfVFlQRVNfSCBcCisJLURIQVZFX1NURExJQl9IIFwKKwktREhBVkVfU1RSRFVQIFwKKwktREhBVkVfTU1BUCBcCisJLURIQVZFX1VUSU1FX0ggXAorCS1ESEFWRV9HRVRQQUdFU0laRSBcCisJLURIQVZFX0VYVDJfSU9DVExTIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfU1lTX1RJTUVfSCBcCisgICAgICAgIC1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYKKworbGliZXh0Ml9jb21fZXJyX2NmbGFnc19saW51eCA6PSBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9TWVNfUFJDVExfSCBcCisJLURIQVZFX0xTRUVLNjQgXAorCS1ESEFWRV9MU0VFSzY0X1BST1RPVFlQRQorCitsaWJleHQyX2NvbV9lcnJfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMgOj0gbGliYworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9jb21fZXJyX3NyY19maWxlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX2NvbV9lcnJfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJfY29tX2Vycl9jZmxhZ3MpICQobGliZXh0Ml9jb21fZXJyX2NmbGFnc19saW51eCkKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX2NvbV9lcnIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfY29tX2Vycl9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml9jb21fZXJyX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX2NvbV9lcnJfY2ZsYWdzKSAkKGxpYmV4dDJfY29tX2Vycl9jZmxhZ3NfbGludXgpCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmMKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX2NvbV9lcnIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfY29tX2Vycl9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml9jb21fZXJyX2NfaW5jbHVkZXMpCitpZmVxICgkKEhPU1RfT1MpLGxpbnV4KQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9jb21fZXJyX2NmbGFncykgJChsaWJleHQyX2NvbV9lcnJfY2ZsYWdzX2xpbnV4KQorZWxzZQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9jb21fZXJyX2NmbGFncykKK2VuZGlmCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9jb21fZXJyLWhvc3QKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9saWIvZXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5OWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxODUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIGxpYi9ldAorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9ldAorSU5TVEFMTCA9IEBJTlNUQUxMQAorCitERVBfTUFLRUZJTEUgPSAkKERFUF9MSUJfTUFLRUZJTEVTKQorCitATUNPTkZJR0AKKworYWxsOjogY29tcGlsZV9ldCBjb21fZXJyLnBjCisKK09CSlM9IGVycm9yX21lc3NhZ2UubyBldF9uYW1lLm8gaW5pdF9ldC5vIGNvbV9lcnIubyBjb21fcmlnaHQubworU1JDUyA9ICQoc3JjZGlyKS9lcnJvcl9tZXNzYWdlLmMgJChzcmNkaXIpL2V0X25hbWUuYyAkKHNyY2RpcikvaW5pdF9ldC5jIFwKKwkkKHNyY2RpcikvY29tX2Vyci5jICQoc3JjZGlyKS9jb21fcmlnaHQuYworCitIRklMRVM9IGNvbV9lcnIuaAorU0hBUkVfRklMRVM9IGV0X2MuYXdrIGV0X2guYXdrCisKK0xJQlJBUlk9IGxpYmNvbV9lcnIKK0xJQkRJUj0gZXQKKworRUxGX1ZFUlNJT04gPSAyLjEKK0VMRl9TT19WRVJTSU9OID0gMgorRUxGX0lNQUdFID0gbGliY29tX2VycgorRUxGX01ZRElSID0gZXQKK0VMRl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCitFTEZfT1RIRVJfTElCUyA9IEBTRU1fSU5JVF9MSUJACisKK0JTRExJQl9WRVJTSU9OID0gMS4xCitCU0RMSUJfSU1BR0UgPSBsaWJjb21fZXJyCitCU0RMSUJfTVlESVIgPSBldAorQlNETElCX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKKworIworIyB3aGF0IHRvIGJ1aWxkLi4uCisjCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CitAUFJPRklMRV9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZyAtcGcgLW8gcHJvZmlsZWQvJCoubyAtYyAkPAorQENIRUNLRVJfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWNoZWNrZXIgLWcgLW8gY2hlY2tlci8kKi5vIC1jICQ8CitARUxGX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CitAQlNETElCX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACitATUFLRUZJTEVfQ0hFQ0tFUkAKKworY29tcGlsZV9ldDogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2NvbXBpbGVfZXQuc2guaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEUpICQoc3JjZGlyKS9jb21waWxlX2V0LnNoLmluIGNvbXBpbGVfZXQKKwkkKFEpICQoQ0hNT0QpICt4IGNvbXBpbGVfZXQKKworRFZJPXRleGkyZHZpCitEVklQUz1kdmlwcyAtbyAiJEAiCitJTkZPPUBNQUtFSU5GT0AKK0hUTUw9bWFrZWluZm8gLS1odG1sIC0tbm8tc3BsaXQKK1BTMlBERj1wczJwZGYKKworY29tX2Vyci5wcyA6IGNvbV9lcnIuZHZpCitjb21fZXJyLmR2aTogY29tX2Vyci50ZXhpbmZvCisKK2NvbV9lcnIuaW5mbzogJChzcmNkaXIpL2NvbV9lcnIudGV4aW5mbworCSQoRSkgIglNQUtFSU5GTyAkQCIKKwktJChRKSAkKElORk8pICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKworY29tX2Vyci5kdmk6ICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKwkkKEUpICIJVEVYSTJEVkkgJEAiCisJLSQoUSkgJChEVkkpICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKworY29tX2Vyci5wczogY29tX2Vyci5kdmkKKwkkKEUpICIJRFZJUFMgJEAiCisJLSQoUSkgJChEVklQUykgY29tX2Vyci5kdmkKKworY29tX2Vyci5wZGY6IGNvbV9lcnIucHMKKwkkKEUpICIJUFMyUERGICRAIgorCS0kKFEpICQoUFMyUERGKSBjb21fZXJyLnBzCisKK2NvbV9lcnIuaHRtbDogJChzcmNkaXIpL2NvbV9lcnIudGV4aW5mbworCSQoRSkgIglNQUtFSU5GTyAkQCIKKwktJChRKSAkKEhUTUwpICQoc3JjZGlyKS9jb21fZXJyLnRleGluZm8KKworY29tX2Vyci5wYzogJChzcmNkaXIpL2NvbV9lcnIucGMuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEUpICIJQ09ORklHLlNUQVRVUyAkQCIKKwkkKFEpIGNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPWxpYi9ldC9jb21fZXJyLnBjIC4vY29uZmlnLnN0YXR1cworCisjbGliY29tX2Vyci5vOgkkKExJQk9CSlMpCisjCSQoTEQpIC1yIC1zIC1vIGxpYmNvbV9lcnIubyAkKExJQk9CSlMpCisjCWNobW9kIC14IGxpYmNvbV9lcnIubworCitUQUdTOgkkKFNSQ1MpCisJJChUQUdTKSAkKFNSQ1MpCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS9ldCAkKGRhdGFkaXIpL2V0ICQoYmluZGlyKSAkKG1hbjFkaXIpICQobWFuM2RpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgXAorCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ldCAkKERFU1RESVIpJChkYXRhZGlyKS9ldCBcCisJCSQoREVTVERJUikkKGJpbmRpcikgJChERVNURElSKSQobWFuMWRpcikgXAorCQkkKERFU1RESVIpJChtYW4zZGlyKSAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZworCitpbnN0YWxsOjogY29tcGlsZV9ldCBsaWJjb21fZXJyLmEgJChIRklMRVMpIGluc3RhbGxkaXJzIGNvbV9lcnIucGMKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9saWJjb21fZXJyLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGliY29tX2Vyci5hICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJLSQoUSkgJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hCisJJChRKSBmb3IgaSBpbiAkKEhGSUxFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2V0LyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZXQvJCRpOyBcCisJZG9uZQorCSQoUSkgKGNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpIDtcCisJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSBldC9jb21fZXJyLmggLiApCisJJChRKSBmb3IgaSBpbiAkKFNIQVJFX0ZJTEVTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTF9EQVRBICQoZGF0YWRpcikvZXQvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpJChkYXRhZGlyKS9ldC8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTExfU0NSSVBUICQoYmluZGlyKS9jb21waWxlX2V0IgorCSQoUSkgJChJTlNUQUxMX1NDUklQVCkgY29tcGlsZV9ldCAkKERFU1RESVIpJChiaW5kaXIpL2NvbXBpbGVfZXQKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobWFuM2RpcikvY29tX2Vyci4zIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9jb21fZXJyLjMgJChERVNURElSKSQobWFuM2RpcikvY29tX2Vyci4zCisJJChFKSAiCUlOU1RBTExfREFUQSAkKG1hbjFkaXIpL2NvbXBpbGVfZXQuMSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvY29tcGlsZV9ldC4xIFwKKwkJCSQoREVTVERJUikkKG1hbjFkaXIpL2NvbXBpbGVfZXQuMQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL3BrZ2NvbmZpZy9jb21fZXJyLnBjIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGNvbV9lcnIucGMgJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvY29tX2Vyci5wYworCit1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliY29tX2Vyci5hIFwKKwkJJChERVNURElSKSQoYmluZGlyKS9jb21waWxlX2V0IFwKKwkJJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvY29tX2Vyci5wYworCSQoUk0pIC1yZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9ldCAkKERFU1RESVIpJChkYXRhZGlyKS9ldAorCitjaGVjazo6IGNvbXBpbGVfZXQKKwlmb3IgaSBpbiAkKHNyY2RpcikvdGVzdF9jYXNlcy8qLmV0IDsgZG8gXAorCQl0PWBiYXNlbmFtZSAkJGkgfCBzZWQgLWUgJ3MvLmV0Ly8nYDsgXAorCQkuL2NvbXBpbGVfZXQgLS1idWlsZC10cmVlICQkaSA7IFwKKwkJZGlmZiAtYyAkKHNyY2RpcikvdGVzdF9jYXNlcy8kJHQuYyAkJHQuYyA+ICQkdC5mYWlsZWQ7IFwKKwkJaWYgWyAkJD8gLW5lIDAgXTsgdGhlbiBlY2hvIFRlc3QgY2FzZSAkJHQgZmFpbGVkOyBleGl0IDEgOyBmaSA7IFwKKwkJZGlmZiAtYyAkKHNyY2RpcikvdGVzdF9jYXNlcy8kJHQuaCAkJHQuaCA+PiAkJHQuZmFpbGVkOyBcCisJCWlmIFsgJCQ/IC1uZSAwIF07IHRoZW4gZWNobyBUZXN0IGNhc2UgJCR0IGZhaWxlZDsgZXhpdCAxIDsgZmkgOyBcCisJCSQoUk0pIC1mICQkdC5jICQkdC5oICQkdC5mYWlsZWQ7IFwKKwkJZWNobyAiVGVzdCBjYXNlICQkdCBzdWNjZWVkZWQiIDsgXAorCWRvbmUKKworY2xlYW46OgorCSQoUk0pIC1mIGNvbXBpbGVfZXQgbGliY29tX2Vyci5hIGxpYmNvbV9lcnJfcC5hIGNvbV9lcnIuaW5mbworCSQoUk0pIC1mICQoT0JKUykgcHJvZmlsZWQvKgorCSQoUk0pIC1mICp+IFwjKiAqLmJhayAqLm90bCAqLmF1eCAqLnRvYyAqLlBTICouZHZpICoucHMgVEFHUyAqLmxuIFwKKwkJKi5odG1sICouY3AgKi5mbiAqLmZucyAqLmt5ICoubG9nICoucGMgKi5wZyAqLnRvYyAqLnRwICoudnIgXAorCQkqLnBkZgorCSQoUk0pIC1mIC4uL2xpYmNvbV9lcnIuYSAuLi9saWJjb21fZXJyX3AuYQorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgY29tX2Vyci5wYyBcCisJCSQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworJChPQkpTKTogc3ViZGlycworCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2Vycm9yX21lc3NhZ2UubzogJChzcmNkaXIpL2Vycm9yX21lc3NhZ2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaCBcCisgJChzcmNkaXIpL2ludGVybmFsLmgKK2V0X25hbWUubzogJChzcmNkaXIpL2V0X25hbWUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaCBcCisgJChzcmNkaXIpL2ludGVybmFsLmgKK2luaXRfZXQubzogJChzcmNkaXIpL2luaXRfZXQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaAorY29tX2Vyci5vOiAkKHNyY2RpcikvY29tX2Vyci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvY29tX2Vyci5oICQoc3JjZGlyKS9lcnJvcl90YWJsZS5oIFwKKyAkKHNyY2RpcikvaW50ZXJuYWwuaAorY29tX3JpZ2h0Lm86ICQoc3JjZGlyKS9jb21fcmlnaHQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbV9lcnIuaCAkKHNyY2RpcikvZXJyb3JfdGFibGUuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9jb21fZXJyLjMgYi9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTI1ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21fZXJyLjMKQEAgLTAsMCArMSw4NyBAQAorLlwiIENvcHlyaWdodCAoYykgMTk4OCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LAorLlwiIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZC4gIAorLlwiCisuVEggQ09NX0VSUiAzICIyMiBOb3YgMTk4OCIgU0lQQgorLlNIIE5BTUUKK2NvbV9lcnIgXC0gY29tbW9uIGVycm9yIGRpc3BsYXkgcm91dGluZQorLlNIIFNZTk9QU0lTCisubmYKKyAjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgordm9pZCAoKlxmSXByb2NcZlIpIChjb25zdCBjaGFyICosIGxvbmcsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisuUFAKK3ZvaWQgY29tX2VyciAoY29uc3QgY2hhciAqd2hvYW1pLCBsb25nIGNvZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKy5QUAorcHJvYyA9IHNldF9jb21fZXJyX2hvb2sgKHByb2MpOworLlBQCitwcm9jID0gcmVzZXRfY29tX2Vycl9ob29rICgpOworLlBQCit2b2lkIGluaXRpYWxpemVfWFhYWF9lcnJvcl90YWJsZSAoKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCisuSSBDb21fZXJyCitkaXNwbGF5cyBhbiBlcnJvciBtZXNzYWdlIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKy5JIHN0ZGVycgorKHNlZQorLklSIHN0ZGlvICgzUykpCitjb21wb3NlZCBvZiB0aGUKKy5JIHdob2FtaQorc3RyaW5nLCB3aGljaCBzaG91bGQgc3BlY2lmeSB0aGUgcHJvZ3JhbSBuYW1lIG9yIHNvbWUgc3VicG9ydGlvbiBvZgorYSBwcm9ncmFtLCBmb2xsb3dlZCBieSBhbiBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmcm9tIHRoZQorLkkgY29kZQordmFsdWUgKGRlcml2ZWQgZnJvbQorLklSIGNvbXBpbGVfZXQgKDEpKSwKK2FuZCBhIHN0cmluZyBwcm9kdWNlZCB1c2luZyB0aGUKKy5JIGZvcm1hdAorc3RyaW5nIGFuZCBhbnkgZm9sbG93aW5nIGFyZ3VtZW50cywgaW4gdGhlIHNhbWUgc3R5bGUgYXMKKy5JUiBmcHJpbnRmICgzKS4KKworVGhlIGJlaGF2aW9yIG9mCisuSSBjb21fZXJyCitjYW4gYmUgbW9kaWZpZWQgdXNpbmcKKy5JIHNldF9jb21fZXJyX2hvb2s7Cit0aGlzIGRlZmluZXMgYSBwcm9jZWR1cmUgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8KKy5JIGNvbV9lcnIsCitpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGludGVybmFsIHByb2NlZHVyZSB3aGljaCBzZW5kcyB0aGUgZm9ybWF0dGVkCit0ZXh0IHRvIGVycm9yIG91dHB1dC4gIFRodXMgdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gYSBwcm9ncmFtIGNhbiBhbGwKK2Vhc2lseSBiZSBkaXZlcnRlZCB0byBhbm90aGVyIGZvcm0gb2YgZGlhZ25vc3RpYyBsb2dnaW5nLCBzdWNoIGFzCisuSVIgc3lzbG9nICgzKS4KKy5JIFJlc2V0X2NvbV9lcnJfaG9vaworbWF5IGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgYmVoYXZpb3Igb2YKKy5JIGNvbV9lcnIKK3RvIGl0cyBkZWZhdWx0IGZvcm0uICBCb3RoIHByb2NlZHVyZXMgcmV0dXJuIHRoZSBwcmV2aW91cyBgYGhvb2snJwordmFsdWUuICBUaGVzZSBgYGhvb2snJyBwcm9jZWR1cmVzIG11c3QgaGF2ZSB0aGUgZGVjbGFyYXRpb24gZ2l2ZW4gZm9yCisuSSBwcm9jCithYm92ZSBpbiB0aGUgc3lub3BzaXMuCisKK1RoZQorLkkgaW5pdGlhbGl6ZV9YWFhYX2Vycm9yX3RhYmxlCityb3V0aW5lIGlzIGdlbmVyYXRlZCBtZWNoYW5pY2FsbHkgYnkKKy5JUiBjb21waWxlX2V0ICgxKQorZnJvbSBhIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgbmFtZXMgYW5kIGFzc29jaWF0ZWQgc3RyaW5ncy4gIEVhY2gKK3RhYmxlIGhhcyBhIG5hbWUgb2YgdXAgdG8gZm91ciBjaGFyYWN0ZXJzLCB3aGljaCBpcyB1c2VkIGluIHBsYWNlIG9mCit0aGUKKy5CIFhYWFgKK2luIHRoZSBuYW1lIG9mIHRoZSByb3V0aW5lLiAgVGhlc2Ugcm91dGluZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKK2FueSBvZiB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBjb2RlcyBhcmUgdXNlZCwgc28gdGhhdCB0aGUKKy5JIGNvbV9lcnIKK2xpYnJhcnkgd2lsbCByZWNvZ25pemUgZXJyb3IgY29kZXMgZnJvbSB0aGVzZSB0YWJsZXMgd2hlbiB0aGV5IGFyZQordXNlZC4KKworVGhlCisuQiBjb21fZXJyLmgKK2hlYWRlciBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBhbnkgc291cmNlIGZpbGUgdGhhdCB1c2VzIHJvdXRpbmVzCitmcm9tIHRoZQorLkkgY29tX2VycgorbGlicmFyeTsgZXhlY3V0YWJsZSBmaWxlcyBtdXN0IGJlIGxpbmtlZCB1c2luZworLkkgYGAtbGNvbV9lcnInJworaW4gb3JkZXIgdG8gY2F1c2UgdGhlCisuSSBjb21fZXJyCitsaWJyYXJ5IHRvIGJlIGluY2x1ZGVkLgorCisuXCIgLklSIGZvciBtYW51YWwgZW50cmllcworLlwiIC5QUCBmb3IgcGFyYWdyYXBoIGJyZWFrcworCisuU0ggIlNFRSBBTFNPIgorY29tcGlsZV9ldCAoMSksIHN5c2xvZyAoMykuCisKK0tlbiBSYWVidXJuLCAiQSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gTGlicmFyeSBmb3IgVU5JWCIuCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIuYyBiL2UyZnNwcm9ncy9saWIvZXQvY29tX2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzVjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9jb21fZXJyX3Byb2MgKGNvbnN0IGNoYXIgKndob2FtaSwgZXJyY29kZV90IGNvZGUsIGNvbnN0CisJCSAgICAgIGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQorCUNPTV9FUlJfQVRUUigoZm9ybWF0KHByaW50ZiwgMywgMCkpKTsKKworc3RhdGljIHZvaWQKK2RlZmF1bHRfY29tX2Vycl9wcm9jIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdAorCQkgICAgICBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKyAgICBpbnQgZG9fY3IgPSAxLCBmZCA9IGZpbGVubyhzdGRlcnIpOworCisgICAgaWYgKHdob2FtaSkgeworCWZwdXRzKHdob2FtaSwgc3RkZXJyKTsKKwlmcHV0cygiOiAiLCBzdGRlcnIpOworICAgIH0KKyAgICBpZiAoY29kZSkgeworCWZwdXRzKGVycm9yX21lc3NhZ2UoY29kZSksIHN0ZGVycik7CisJZnB1dHMoIiAiLCBzdGRlcnIpOworICAgIH0KKyAgICBpZiAoZm10KSB7CisgICAgICAgIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgfQorICAgIGlmICghaXNhdHR5KGZkKSkKKwlkb19jciA9IDA7CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyAgICBlbHNlIHsKKwlzdHJ1Y3QgdGVybWlvcyB0OworCisJaWYgKCh0Y2dldGF0dHIoZmQsICZ0KSkgPT0gMCAmJgorCSAgICAodC5jX29mbGFnICYgT1BPU1QpICYmICh0LmNfb2ZsYWcgJiBPTkxDUikpCisJZG9fY3IgPSAwOworICAgIH0KKyNlbmRpZgorICAgIGlmIChkb19jcikKKwlmcHV0YygnXHInLCBzdGRlcnIpOworICAgIGZwdXRjKCdcbicsIHN0ZGVycik7CisgICAgZmZsdXNoKHN0ZGVycik7Cit9CisKK3R5cGVkZWYgdm9pZCAoKmVycmYpIChjb25zdCBjaGFyICosIGVycmNvZGVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKworZXJyZiBjb21fZXJyX2hvb2sgPSBkZWZhdWx0X2NvbV9lcnJfcHJvYzsKKwordm9pZCBjb21fZXJyX3ZhIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdCBjaGFyICpmbXQsCisJCSB2YV9saXN0IGFyZ3MpCit7CisgICAgKCpjb21fZXJyX2hvb2spICh3aG9hbWksIGNvZGUsIGZtdCwgYXJncyk7Cit9CisKK3ZvaWQgY29tX2VyciAoY29uc3QgY2hhciAqd2hvYW1pLAorCSAgICAgIGVycmNvZGVfdCBjb2RlLAorCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgcHZhcjsKKworICAgIGlmICghY29tX2Vycl9ob29rKQorCWNvbV9lcnJfaG9vayA9IGRlZmF1bHRfY29tX2Vycl9wcm9jOworICAgIHZhX3N0YXJ0KHB2YXIsIGZtdCk7CisgICAgY29tX2Vycl92YSAod2hvYW1pLCBjb2RlLCBmbXQsIHB2YXIpOworICAgIHZhX2VuZChwdmFyKTsKK30KKworZXJyZiBzZXRfY29tX2Vycl9ob29rKGVycmYgbmV3X3Byb2MpCit7CisgICAgZXJyZiB4ID0gY29tX2Vycl9ob29rOworCisgICAgaWYgKG5ld19wcm9jKQorCWNvbV9lcnJfaG9vayA9IG5ld19wcm9jOworICAgIGVsc2UKKwljb21fZXJyX2hvb2sgPSBkZWZhdWx0X2NvbV9lcnJfcHJvYzsKKworICAgIHJldHVybiB4OworfQorCitlcnJmIHJlc2V0X2NvbV9lcnJfaG9vayh2b2lkKSB7CisgICAgZXJyZiB4ID0gY29tX2Vycl9ob29rOworICAgIGNvbV9lcnJfaG9vayA9IGRlZmF1bHRfY29tX2Vycl9wcm9jOworICAgIHJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9jb21fZXJyLmggYi9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2EzNmVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21fZXJyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEhlYWRlciBmaWxlIGZvciBjb21tb24gZXJyb3IgZGVzY3JpcHRpb24gbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgMTk4OCwgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkIG9mIHRoZQorICogTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqCisgKiBGb3IgY29weXJpZ2h0IGFuZCBkaXN0cmlidXRpb24gaW5mbywgc2VlIHRoZSBkb2N1bWVudGF0aW9uIHN1cHBsaWVkCisgKiB3aXRoIHRoaXMgcGFja2FnZS4KKyAqLworCisjaWYgIWRlZmluZWQoX19DT01fRVJSX0gpICYmICFkZWZpbmVkKF9fQ09NX0VSUl9IX18pCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBDT01fRVJSX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgQ09NX0VSUl9BVFRSKHgpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCit0eXBlZGVmIGxvbmcgZXJyY29kZV90OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworCWNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisJbG9uZyBiYXNlOworCWludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3Q7CisKK2V4dGVybiB2b2lkIGNvbV9lcnIgKGNvbnN0IGNoYXIgKiwgbG9uZywgY29uc3QgY2hhciAqLCAuLi4pCisJQ09NX0VSUl9BVFRSKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOworCitleHRlcm4gdm9pZCBjb21fZXJyX3ZhIChjb25zdCBjaGFyICp3aG9hbWksIGVycmNvZGVfdCBjb2RlLCBjb25zdCBjaGFyICpmbXQsCisJCSB2YV9saXN0IGFyZ3MpCisJQ09NX0VSUl9BVFRSKChmb3JtYXQocHJpbnRmLCAzLCAwKSkpOworCitleHRlcm4gY2hhciBjb25zdCAqZXJyb3JfbWVzc2FnZSAobG9uZyk7CitleHRlcm4gdm9pZCAoKmNvbV9lcnJfaG9vaykgKGNvbnN0IGNoYXIgKiwgbG9uZywgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKK2V4dGVybiB2b2lkICgqc2V0X2NvbV9lcnJfaG9vayAodm9pZCAoKikgKGNvbnN0IGNoYXIgKiwgbG9uZywKKwkJCQkJICBjb25zdCBjaGFyICosIHZhX2xpc3QpKSkKKwkoY29uc3QgY2hhciAqLCBsb25nLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworZXh0ZXJuIHZvaWQgKCpyZXNldF9jb21fZXJyX2hvb2sgKHZvaWQpKSAoY29uc3QgY2hhciAqLCBsb25nLAorCQkJCQkgIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gaW50IGluaXRfZXJyb3JfdGFibGUoY29uc3QgY2hhciAqIGNvbnN0ICptc2dzLCBsb25nIGJhc2UsIGludCBjb3VudCk7CitleHRlcm4gY2hhciAqKCpzZXRfY29tX2Vycl9nZXR0ZXh0IChjaGFyICooKikgKGNvbnN0IGNoYXIgKikpKQorCShjb25zdCBjaGFyICopOworCitleHRlcm4gZXJyY29kZV90IGFkZF9lcnJvcl90YWJsZShjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiBldCk7CitleHRlcm4gZXJyY29kZV90IHJlbW92ZV9lcnJvcl90YWJsZShjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiBldCk7CitleHRlcm4gdm9pZCBhZGRfdG9fZXJyb3JfdGFibGUoc3RydWN0IGV0X2xpc3QgKm5ld190YWJsZSk7CisKKy8qIFByb3ZpZGVkIGZvciBIZWltZGFsbCBjb21wYXRpYmlsaXR5ICovCitleHRlcm4gY29uc3QgY2hhciAqY29tX3JpZ2h0KHN0cnVjdCBldF9saXN0ICpsaXN0LCBsb25nIGNvZGUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbV9yaWdodF9yKHN0cnVjdCBldF9saXN0ICpsaXN0LCBsb25nIGNvZGUsIGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0LAorCQkJCSAgICAgY29uc3QgY2hhciAqKm1lc3NhZ2VzLAorCQkJCSAgICAgaW50IG51bV9lcnJvcnMsCisJCQkJICAgICBsb25nIGJhc2UpOworZXh0ZXJuIHZvaWQgZnJlZV9lcnJvcl90YWJsZShzdHJ1Y3QgZXRfbGlzdCAqZXQpOworCisvKiBQcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbV9lcnIgbGlicmFyaWVzICovCitleHRlcm4gaW50IGV0X2xpc3RfbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgZXRfbGlzdF91bmxvY2sodm9pZCk7CisKKyNkZWZpbmUgX19DT01fRVJSX0gKKyNkZWZpbmUgX19DT01fRVJSX0hfXworI2VuZGlmIC8qICFkZWZpbmVkKF9fQ09NX0VSUl9IKSAmJiAhZGVmaW5lZChfX0NPTV9FUlJfSF9fKSovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIucGMuaW4gYi9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkZjhhMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvY29tX2Vyci5wYy5pbgpAQCAtMCwwICsxLDEyIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogY29tX2VycgorRGVzY3JpcHRpb246IENvbW1vbiBlcnJvciBkZXNjcmlwdGlvbiBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlczoKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L2V0IC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxjb21fZXJyCitMaWJzLnByaXZhdGU6IEBTRU1fSU5JVF9MSUJACmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIudGV4aW5mbyBiL2UyZnNwcm9ncy9saWIvZXQvY29tX2Vyci50ZXhpbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDNmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L2NvbV9lcnIudGV4aW5mbwpAQCAtMCwwICsxLDUzMiBAQAorXGlucHV0IHRleGluZm8gQGMgLSotdGV4aW5mby0qLQorCitAYyAkSGVhZGVyJAorQGMgJFNvdXJjZSQKK0BjICRMb2NrZXIkCisKK0BjIE5vdGUgdGhhdCBhbHRob3VnaCB0aGlzIHNvdXJjZSBmaWxlIGlzIGluIHRleGluZm8gZm9ybWF0IChtb3JlCitAYyBvciBsZXNzKSwgaXQgaXMgbm90IHlldCBzdWl0YWJsZSBmb3IgdHVybmluZyBpbnRvIGFuIGBgaW5mbycnCitAYyBmaWxlLiAgU29ycnksIG1heWJlIG5leHQgdGltZS4KK0BjCitAYyBJbiBvcmRlciB0byBwcm9kdWNlIGhhcmRjb3B5IGRvY3VtZW50YXRpb24gZnJvbSBhIHRleGluZm8gZmlsZSwKK0BjIHJ1biBgYHRleCBjb21fZXJyLnRleGluZm8nJyB3aGljaCB3aWxsIGxvYWQgaW4gdGV4aW5mby50ZXgsCitAYyBwcm92aWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4gICh0ZXhpbmZvLnRleCBpcyBmcm9tIHRoZSBGcmVlCitAYyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgaXMgdW5kZXIgZGlmZmVyZW50IGNvcHlyaWdodCByZXN0cmljdGlvbnMKK0BjIGZyb20gdGhlIHJlc3Qgb2YgdGhpcyBwYWNrYWdlLikKKworQHNldGZpbGVuYW1lIGNvbV9lcnIuaW5mbworQHNldHRpdGxlIEEgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIExpYnJhcnkgZm9yIFVOSVgKKworQGlmaW5mbworQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogQ29tX2VycjogKGNvbV9lcnIpLiAgIEEgQ29tbW9uIEVycm9yIERlc2NyaXB0aW9uIExpYnJhcnkgZm9yIFVOSVguCitAZW5kIGRpcmVudHJ5CitAZW5kIGlmaW5mbworCitAYyBzbWFsbGJvb2sKKworQGlmdGV4CitAZmluYWxvdXQKK0BlbmQgaWZ0ZXgKKworQGlmaW5mbworVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdXNlIG9mIHRoZSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gbGlicmFyeS4KKworQ29weXJpZ2h0IChDKSAxOTg3LCAxOTg4IFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZCBvZiB0aGUKK01hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAordGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLgorbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKK05vdGUgdGhhdCB0aGUgZmlsZSB0ZXhpbmZvLnRleCwgcHJvdmlkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgZnJvbQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIGlzIHVuZGVyIGRpZmZlcmVudCBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zCitmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhpcyBwYWNrYWdlLgorCitAaWdub3JlCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUgdGhyb3VnaCBUZXggYW5kIHByaW50IHRoZQorcmVzdWx0cywgcHJvdmlkZWQgdGhlIHByaW50ZWQgZG9jdW1lbnQgY2FycmllcyBjb3B5aW5nIHBlcm1pc3Npb24KK25vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUgZXhjZXB0IGZvciB0aGUgcmVtb3ZhbCBvZiB0aGlzIHBhcmFncmFwaAorKHRoaXMgcGFyYWdyYXBoIG5vdCBiZWluZyByZWxldmFudCB0byB0aGUgcHJpbnRlZCBtYW51YWwpLgorCitAZW5kIGlnbm9yZQorQGVuZCBpZmluZm8KKworQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAorCitAdGl0bGVwYWdlCitAY2VudGVyIEB0aXRsZWZvbnR7QSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb259CitAY2VudGVyIEB0aXRsZWZvbnR7TGlicmFyeSBmb3IgVU5JWH0KK0BzcCAyCitAY2VudGVyIEtlbiBSYWVidXJuCitAY2VudGVyIEJpbGwgU29tbWVyZmVsZAorQHNwIDEKK0BjZW50ZXIgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorQHNwIDMKK0BjZW50ZXIgbGFzdCB1cGRhdGVkIDEgSmFudWFyeSAxOTg5CitAY2VudGVyIGZvciB2ZXJzaW9uIDEuMgorQGNlbnRlciAqKipEUkFGVCBDT1BZIE9OTFkqKioKKworQHZza2lwIDJpbgorCitAY2VudGVyIEBie0Fic3RyYWN0fQorCitVTklYIGhhcyBhbHdheXMgaGFkIGEgY2xlYW4gYW5kIHNpbXBsZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UsIHdpdGggYQorc3RhbmRhcmQgc2V0IG9mIGVycm9yIGNvZGVzIHBhc3NlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXIKK3Byb2dyYW1zLiAgVW5mb3J0dW5hdGVseSwgdGhlIHNhbWUgY2Fubm90IGJlIHNhaWQgb2YgbWFueSBvZiB0aGUKK2xpYnJhcmllcyBsYXllcmVkIG9uIHRvcCBvZiB0aGUgcHJpbWl0aXZlcyBwcm92aWRlZCBieSB0aGUga2VybmVsLgorVHlwaWNhbGx5LCBlYWNoIG9uZSBoYXMgdXNlZCBhIGRpZmZlcmVudCBzdHlsZSBvZiBpbmRpY2F0aW5nIGVycm9ycyB0bwordGhlaXIgY2FsbGVycywgbGVhZGluZyB0byBhIHRvdGFsIGhvZGdlcG9kZ2Ugb2YgZXJyb3IgaGFuZGxpbmcsIGFuZAorY29uc2lkZXJhYmxlIGFtb3VudHMgb2Ygd29yayBmb3IgdGhlIHByb2dyYW1tZXIuICBUaGlzIHBhcGVyIGRlc2NyaWJlcworYSBsaWJyYXJ5IGFuZCBhc3NvY2lhdGVkIHV0aWxpdGllcyB3aGljaCBhbGxvd3MgYSBtb3JlIHVuaWZvcm0gd2F5IGZvcgorbGlicmFyaWVzIHRvIHJldHVybiBlcnJvcnMgdG8gdGhlaXIgY2FsbGVycywgYW5kIGZvciBwcm9ncmFtcyB0bworZGVzY3JpYmUgZXJyb3JzIGFuZCBleGNlcHRpb25hbCBjb25kaXRpb25zIHRvIHRoZWlyIHVzZXJzLgorCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5ODcsIDE5ODggYnkgdGhlIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZworQm9hcmQgb2YgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAordGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLgorbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKK05vdGUgdGhhdCB0aGUgZmlsZSB0ZXhpbmZvLnRleCwgcHJvdmlkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgZnJvbQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIGlzIHVuZGVyIGRpZmZlcmVudCBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zCitmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhpcyBwYWNrYWdlLgorCitAZW5kIHRpdGxlcGFnZQorCitAbm9kZSBUb3AsIFdoeSBjb21fZXJyPywgKGRpciksIChkaXIpCisKK0B0b3AgQSBDb21tb24gRXJyb3IgRGVzY3JpcHRpb24gTGlicmFyeSBmb3IgVU5JWAorCitUaGlzIG1hbnVhbCBkb2N1bWVudHMgdGhlIGNvbV9lcnIgbGlicmFyeS4KKworQG1lbnUKKyogV2h5IGNvbV9lcnI/OjogICAgICAgICAgICAgICAgCisqIEVycm9yIGNvZGVzOjogICAgICAgICAgICAgICAgIAorKiBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZTo6ICAgICAKKyogVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyOjogICAgCisqIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXM6OiAgIAorKiBDb2RpbmcgQ29udmVudGlvbnM6OiAgICAgICAgICAKKyogQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbjo6ICAgCisqIEJ1ZyBSZXBvcnRzOjogICAgICAgICAgICAgICAgIAorKiBBY2tub3dsZWRnZW1lbnRzOjogICAgICAgICAgICAKK0BlbmQgbWVudQorCitAcGFnZQorCitAbm9kZSBXaHkgY29tX2Vycj8sIEVycm9yIGNvZGVzLCBUb3AsIFRvcAorQGNoYXB0ZXIgV2h5IGNvbV9lcnI/CisKK0luIGJ1aWxkaW5nIGFwcGxpY2F0aW9uIHNvZnR3YXJlIHBhY2thZ2VzLCBhIHByb2dyYW1tZXIgb2Z0ZW4gaGFzIHRvCitkZWFsIHdpdGggYSBudW1iZXIgb2YgbGlicmFyaWVzLCBlYWNoIG9mIHdoaWNoIGNhbiB1c2UgYSBkaWZmZXJlbnQKK2Vycm9yLXJlcG9ydGluZyBtZWNoYW5pc20uICBTb21ldGltZXMgb25lIG9mIHR3byB2YWx1ZXMgaXMgcmV0dXJuZWQsCitpbmRpY2F0aW5nIHNpbXBseSBTVUNDRVNTIG9yIEZBSUxVUkUsIHdpdGggbm8gZGVzY3JpcHRpb24gb2YgZXJyb3JzCitlbmNvdW50ZXJlZC4gIFNvbWV0aW1lcyBpdCBpcyBhbiBpbmRleCBpbnRvIGEgdGFibGUgb2YgdGV4dCBzdHJpbmdzLAord2hlcmUgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIHVzZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBsaWJyYXJ5IGJlaW5nCit1c2VkIHdoZW4gdGhlIGVycm9yIGlzIGdlbmVyYXRlZDsgc2luY2UgZWFjaCB0YWJsZSBzdGFydHMgbnVtYmVyaW5nIGF0CiswIG9yIDEsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYXMgdG8gdGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgY29kZSBpcworbmVlZGVkIHRvIGRldGVybWluZSB3aGljaCB0YWJsZSB0byBsb29rIGF0LiAgU29tZXRpbWVzIG5vIHRleHQgbWVzc2FnZXMgYXJlCitzdXBwbGllZCBhdCBhbGwsIGFuZCB0aGUgcHJvZ3JhbW1lciBtdXN0IHN1cHBseSB0aGVtIGF0IGFueSBwb2ludCBhdCB3aGljaAoraGUgbWF5IHdpc2ggdG8gcmVwb3J0IGVycm9yIGNvbmRpdGlvbnMuCitPZnRlbiwgYSBnbG9iYWwgdmFyaWFibGUgaXMgYXNzaWduZWQgc29tZSB2YWx1ZSBkZXNjcmliaW5nIHRoZSBlcnJvciwgYnV0Cit0aGUgcHJvZ3JhbW1lciBoYXMgdG8ga25vdyBpbiBlYWNoIGNhc2Ugd2hldGhlciB0byBsb29rIGF0IEBjb2Rle2Vycm5vfSwKK0Bjb2Rle2hfZXJybm99LCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQGNvZGV7aGVzX2VycigpfSwgb3Igd2hhdGV2ZXIgb3RoZXIKK3ZhcmlhYmxlcyBvciByb3V0aW5lcyBhcmUgc3BlY2lmaWVkLgorQW5kIHdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcKK2luIHRoZSBwcm9jZWR1cmUgb2YKK2V4YW1pbmluZyBvciByZXBvcnRpbmcgdGhlIGVycm9yIGNoYW5nZXMgdGhlIHNhbWUgdmFyaWFibGU/CisKK1RoZSBwYWNrYWdlIHdlIGhhdmUgZGV2ZWxvcGVkIGlzIGFuIGF0dGVtcHQgdG8gcHJlc2VudCBhIGNvbW1vbgorZXJyb3ItaGFuZGxpbmcgbWVjaGFuaXNtIHRvIG1hbmlwdWxhdGUgdGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgZXJyb3IgY29kZQoraW4gYSBmYXNoaW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvYmxlbXMgbGlzdGVkIGFib3ZlLgorCitBIGxpc3Qgb2YgdXAgdG8gMjU2IHRleHQgbWVzc2FnZXMgaXMgc3VwcGxpZWQgdG8gYSB0cmFuc2xhdG9yIHdlIGhhdmUKK3dyaXR0ZW4sIGFsb25nIHdpdGggdGhlIHRocmVlLSB0byBmb3VyLWNoYXJhY3RlciBgYG5hbWUnJyBvZiB0aGUgZXJyb3IKK3RhYmxlLiAgVGhlIGxpYnJhcnkgdXNpbmcgdGhpcyBlcnJvciB0YWJsZSBuZWVkIG9ubHkgY2FsbCBhIHJvdXRpbmUKK2dlbmVyYXRlZCBmcm9tIHRoaXMgZXJyb3ItdGFibGUgc291cmNlIHRvIG1ha2UgdGhlIHRhYmxlIGBga25vd24nJyB0byB0aGUKK2NvbV9lcnIgbGlicmFyeSwgYW5kIGFueSBlcnJvciBjb2RlIHRoZSBsaWJyYXJ5IGdlbmVyYXRlcyBjYW4gYmUgY29udmVydGVkCit0byB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLiAgVGhlcmUgaXMgYWxzbyBhIGRlZmF1bHQgZm9ybWF0IGZvcgorZXJyb3IgY29kZXMgYWNjaWRlbnRhbGx5IHJldHVybmVkIGJlZm9yZSBtYWtpbmcgdGhlIHRhYmxlIGtub3duLCB3aGljaCBpcworb2YgdGhlIGZvcm0gQHNhbXB7dW5rbm93biBjb2RlIGZvbyAzMn0sIHdoZXJlIEBzYW1we2Zvb30gd291bGQgYmUgdGhlIG5hbWUKK29mIHRoZSB0YWJsZS4KKworQG5vZGUgRXJyb3IgY29kZXMsIEVycm9yIHRhYmxlIHNvdXJjZSBmaWxlLCBXaHkgY29tX2Vycj8sIFRvcAorQGNoYXB0ZXIgRXJyb3IgY29kZXMKKworRXJyb3IgY29kZXMgdGhlbXNlbHZlcyBhcmUgMzIgYml0IChzaWduZWQpIGludGVnZXJzLCBvZiB3aGljaCB0aGUgaGlnaAorb3JkZXIgMjQgYml0cyBhcmUgYW4gaWRlbnRpZmllciBvZiB3aGljaCBlcnJvciB0YWJsZSB0aGUgZXJyb3IgY29kZSBpcworZnJvbSwgYW5kIHRoZSBsb3cgb3JkZXIgOCBiaXRzIGFyZSBhIHNlcXVlbnRpYWwgZXJyb3IgbnVtYmVyIHdpdGhpbgordGhlIHRhYmxlLiAgQW4gZXJyb3IgY29kZSBtYXkgdGh1cyBiZSBlYXNpbHkgZGVjb21wb3NlZCBpbnRvIGl0cyBjb21wb25lbnQKK3BhcnRzLiAgT25seSB0aGUgbG93ZXN0IDMyIGJpdHMgb2YgYW4gZXJyb3IgY29kZSBhcmUgY29uc2lkZXJlZCBzaWduaWZpY2FudAorb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IHdpZGVyIHZhbHVlcy4KKworRXJyb3IgdGFibGUgMCBpcyBkZWZpbmVkIHRvIG1hdGNoIHRoZSBVTklYIHN5c3RlbSBjYWxsIGVycm9yIHRhYmxlCisoQGNvZGV7c3lzX2Vycmxpc3R9KTsgdGhpcyBhbGxvd3MgQGNvZGV7ZXJybm99IHZhbHVlcyB0byBiZSB1c2VkIGRpcmVjdGx5CitpbiB0aGUgbGlicmFyeSAoYXNzdW1pbmcgdGhhdCBAY29kZXtlcnJub30gaXMgb2YgYSB0eXBlIHdpdGggdGhlIHNhbWUgd2lkdGgKK2FzIEB0e2xvbmd9KS4gIE90aGVyIGVycm9yIHRhYmxlIG51bWJlcnMgYXJlIGZvcm1lZCBieSBjb21wYWN0aW5nIHRvZ2V0aGVyCit0aGUgZmlyc3QgZm91ciBjaGFyYWN0ZXJzIG9mIHRoZSBlcnJvciB0YWJsZSBuYW1lLiAgVGhlIG1hcHBpbmcgYmV0d2VlbgorY2hhcmFjdGVycyBpbiB0aGUgbmFtZSBhbmQgbnVtZXJpYyB2YWx1ZXMgaW4gdGhlIGVycm9yIGNvZGUgYXJlIGRlZmluZWQgaW4KK2Egc3lzdGVtLWluZGVwZW5kZW50IGZhc2hpb24sIHNvIHRoYXQgdHdvIHN5c3RlbXMgdGhhdCBjYW4gcGFzcyBpbnRlZ3JhbAordmFsdWVzIGJldHdlZW4gdGhlbSBjYW4gcmVsaWFibHkgcGFzcyBlcnJvciBjb2RlcyB3aXRob3V0IGxvc3Mgb2YgbWVhbmluZzsKK3RoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgY2hhcmFjdGVyIHNldHMgdXNlZCBhcmUgbm90IHRoZSBzYW1lLgorKEhvd2V2ZXIsIGlmIHRoaXMgaXMgdG8gYmUgZG9uZSwgZXJyb3IgdGFibGUgMCBzaG91bGQgYmUgYXZvaWRlZCwgc2luY2UgdGhlCitsb2NhbCBzeXN0ZW0gY2FsbCBlcnJvciB0YWJsZXMgbWF5IGRpZmZlci4pCisKK0FueSB2YXJpYWJsZSB3aGljaCBpcyB0byBjb250YWluIGFuIGVycm9yIGNvZGUgc2hvdWxkIGJlIGRlY2xhcmVkIEB0e2xvbmd9LgorVGhlIGRyYWZ0IHByb3Bvc2VkIEFtZXJpY2FuIE5hdGlvbmFsIFN0YW5kYXJkIGZvciBDIChhcyBvZiBNYXksIDE5ODgpCityZXF1aXJlcyB0aGF0IEB0e2xvbmd9IHZhcmlhYmxlcyBiZSBhdCBsZWFzdCAzMiBiaXRzOyBhbnkgc3lzdGVtIHdoaWNoIGRvZXMKK25vdCBzdXBwb3J0IDMyLWJpdCBAdHtsb25nfSB2YWx1ZXMgY2Fubm90IG1ha2UgdXNlIG9mIHRoaXMgcGFja2FnZSAobm9yCittdWNoIG90aGVyIHNvZnR3YXJlIHRoYXQgYXNzdW1lcyBhbiBBTlNJLUMgZW52aXJvbm1lbnQgYmFzZSkgd2l0aG91dAorc2lnbmlmaWNhbnQgZWZmb3J0LgorCitAbm9kZSBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZSwgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBFcnJvciBjb2RlcywgVG9wCitAY2hhcHRlciBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZQorCitUaGUgZXJyb3IgdGFibGUgc291cmNlIGZpbGUgYmVnaW5zIHdpdGggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSB0YWJsZSBuYW1lLAorYXMKKworQGV4YW1wbGUKK2Vycm9yX3RhYmxlIEB2YXJ7dGFibGVuYW1lfQorQGVuZCBleGFtcGxlCisKK0luZGl2aWR1YWwgZXJyb3IgY29kZXMgYXJlCitzcGVjaWZpZWQgd2l0aAorCitAZXhhbXBsZQorZXJyb3JfY29kZSBAdmFye0VSUk9SX05BTUV9LCBAdmFyeyJ0ZXh0IG1lc3NhZ2UifQorQGVuZCBleGFtcGxlCisKK3doZXJlIEBzYW1we2VjfSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgc2hvcnQgZm9ybSBvZiBAc2FtcHtlcnJvcl9jb2RlfS4gIFRvCitpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSB0YWJsZSwgdXNlIEBzYW1we2VuZH0uICBUaHVzLCBhIChzaG9ydCkgc2FtcGxlCitlcnJvciB0YWJsZSBtaWdodCBiZToKKworQGV4YW1wbGUKKworICAgICAgICBlcnJvcl90YWJsZSAgICAgZHNjCisKKyAgICAgICAgZXJyb3JfY29kZSAgICAgIERTQ19EVVBfTVRHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAiTWVldGluZyBhbHJlYWR5IGV4aXN0cyIKKworICAgICAgICBlYyAgICAgICAgICAgICAgRFNDX0JBRF9QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgIkEgYmFkIG1lZXRpbmcgcGF0aG5hbWUgd2FzIGdpdmVuIgorCisgICAgICAgIGVjICAgICAgICAgICAgICBEU0NfQkFEX01PREVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgbW9kZSBmb3IgdGhpcyBhY2Nlc3MgY29udHJvbCBsaXN0IgorCisgICAgICAgIGVuZAorCitAZW5kIGV4YW1wbGUKKworQG5vZGUgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBSdW4tdGltZSBzdXBwb3J0IHJvdXRpbmVzLCBFcnJvciB0YWJsZSBzb3VyY2UgZmlsZSwgVG9wCitAY2hhcHRlciBUaGUgZXJyb3ItdGFibGUgY29tcGlsZXIKKworVGhlIGVycm9yIHRhYmxlIGNvbXBpbGVyIGlzIG5hbWVkIEBjb2Rle2NvbXBpbGVfZXR9LiAgSXQgdGFrZXMgb25lCithcmd1bWVudCwgdGhlIHBhdGhuYW1lIG9mIGEgZmlsZSAoZW5kaW5nIGluIEBzYW1wey5ldH0sIGUuZy4sCitAc2FtcHtkc2NfZXJyLmV0fSkgY29udGFpbmluZyBhbiBlcnJvciB0YWJsZSBzb3VyY2UgZmlsZS4gIEl0IHBhcnNlcyB0aGUKK2Vycm9yIHRhYmxlLCBhbmQgZ2VuZXJhdGVzIHR3byBvdXRwdXQgZmlsZXMgLS0gYSBDIGhlYWRlciBmaWxlCisoQHNhbXB7ZGlzY3Vzc19lcnIuaH0pIHdoaWNoIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIHRoZSBudW1lcmljYWwgdmFsdWVzCitvZiB0aGUgZXJyb3IgY29kZXMgZGVmaW5lZCBpbiB0aGUgZXJyb3IgdGFibGUsIGFuZCBhIEMgc291cmNlIGZpbGUgd2hpY2gKK3Nob3VsZCBiZSBjb21waWxlZCBhbmQgbGlua2VkIHdpdGggdGhlIGV4ZWN1dGFibGUuICBUaGUgaGVhZGVyIGZpbGUgbXVzdCBiZQoraW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZSB3aGljaCB3aXNoZXMgdG8gcmVmZXJlbmNlIHRoZSBlcnJvcgorY29kZXMgZGVmaW5lZDsgdGhlIG9iamVjdCBtb2R1bGUgZ2VuZXJhdGVkIGZyb20gdGhlIEMgY29kZSBtYXkgYmUgbGlua2VkIGluCit0byBhIHByb2dyYW0gd2hpY2ggd2lzaGVzIHRvIHVzZSB0aGUgcHJpbnRlZCBmb3JtcyBvZiB0aGUgZXJyb3IgY29kZXMuCisKK0Bub2RlIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXMsIENvZGluZyBDb252ZW50aW9ucywgVGhlIGVycm9yLXRhYmxlIGNvbXBpbGVyLCBUb3AKK0BjaGFwdGVyIFJ1bi10aW1lIHN1cHBvcnQgcm91dGluZXMKKworQW55IHNvdXJjZSBmaWxlIHdoaWNoIHVzZXMgdGhlIHJvdXRpbmVzIHN1cHBsaWVkIHdpdGggb3IgcHJvZHVjZWQgYnkgdGhlCitjb21fZXJyIHBhY2thZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlIEBmaWxlezxjb21fZXJyLmg+fS4gIEl0Citjb250YWlucyBkZWNsYXJhdGlvbnMgYW5kIGRlZmluaXRpb25zIHdoaWNoIG1heSBiZSBuZWVkZWQgb24gc29tZSBzeXN0ZW1zLgorKFNvbWUgZnVuY3Rpb25zIGNhbm5vdCBiZSByZWZlcmVuY2VkIHByb3Blcmx5IHdpdGhvdXQgdGhlIHJldHVybiB0eXBlCitkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlLiAgU29tZSBmdW5jdGlvbnMgbWF5IHdvcmsgcHJvcGVybHkgb24gbW9zdAorYXJjaGl0ZWN0dXJlcyBldmVuIHdpdGhvdXQgdGhlIGhlYWRlciBmaWxlLCBidXQgcmVseWluZyBvbiB0aGlzIGlzIG5vdAorcmVjb21tZW5kZWQuKQorCitUaGUgcnVuLXRpbWUgc3VwcG9ydCByb3V0aW5lcyBhbmQgdmFyaWFibGVzIHByb3ZpZGVkIHZpYSB0aGlzIHBhY2thZ2UKK2luY2x1ZGUgdGhlIGZvbGxvd2luZzoKKworQGV4YW1wbGUKK3ZvaWQgaW5pdGlhbGl6ZV9AdmFye3h4eHh9X2Vycm9yX3RhYmxlICh2b2lkKTsKK0BlbmQgZXhhbXBsZQorCitPbmUgb2YgdGhlc2Ugcm91dGluZXMgaXMgYnVpbHQgYnkgdGhlIGVycm9yIGNvbXBpbGVyIGZvciBlYWNoIGVycm9yIHRhYmxlLgorSXQgbWFrZXMgdGhlIEB2YXJ7eHh4eH0gZXJyb3IgdGFibGUgYGBrbm93bicnIHRvIHRoZSBlcnJvciByZXBvcnRpbmcKK3N5c3RlbS4gIEJ5IGNvbnZlbnRpb24sIHRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBpbml0aWFsaXphdGlvbgorcm91dGluZSBvZiB0aGUgQHZhcnt4eHh4fSBsaWJyYXJ5LiAgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGluaXRpYWxpemF0aW9uCityb3V0aW5lLCBzb21lIGNvbWJpbmF0aW9uIG9mIHJvdXRpbmVzIHdoaWNoIGZvcm0gdGhlIGNvcmUgb2YgdGhlIGxpYnJhcnkKK3Nob3VsZCBlbnN1cmUgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLiAgSXQgaXMgbm90IGFkdmlzZWQgdG8gbGVhdmUgaXQKK3RoZSBjYWxsZXIgdG8gbWFrZSB0aGlzIGNhbGwuCisKK1RoZXJlIGlzIG5vIGhhcm0gaW4gY2FsbGluZyB0aGlzIHJvdXRpbmUgbW9yZSB0aGFuIG9uY2UuCisKK0BleGFtcGxlCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0VfQHZhcnt4eHh4fSBAdmFye25ubm5ufUwKK0BlbmQgZXhhbXBsZQorCitUaGlzIHN5bWJvbCBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVycm9yIGNvZGUgZW50cnkgaW4gdGhlCitzcGVjaWZpZWQgdGFibGUuCitUaGlzIHJhcmVseSBuZWVkcyBiZSB1c2VkIGJ5IHRoZQorcHJvZ3JhbW1lci4KKworQGRlZnR5cGVmdW4gY29uc3QgY2hhciAqZXJyb3JfbWVzc2FnZSAobG9uZyBAdmFye2NvZGV9KTsKKworVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGNoYXJhY3RlciBzdHJpbmcgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkCit3aXRoIEBjb2Rle2NvZGV9OyBpZiB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiB1bmtub3duIGVycm9yIHRhYmxlLCBvcgoraWYgdGhlIGNvZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEga25vd24gZXJyb3IgdGFibGUgYnV0IHRoZSBjb2RlIGlzIG5vdAoraW4gdGhlIHRhYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybSBAc2FtcHtVbmtub3duIGNvZGUgQHZhcnt4eHh4IG5ufX0gaXMKK3JldHVybmVkLCB3aGVyZSBAdmFye3h4eHh9IGlzIHRoZSBlcnJvciB0YWJsZSBuYW1lIHByb2R1Y2VkIGJ5CityZXZlcnNpbmcgdGhlIGNvbXBhY3Rpb24gcGVyZm9ybWVkIG9uIHRoZSBlcnJvciB0YWJsZSBudW1iZXIgaW1wbGllZAorYnkgdGhhdCBlcnJvciBjb2RlLCBhbmQgQHZhcntubn0gaXMgdGhlIG9mZnNldCBmcm9tIHRoYXQgYmFzZSB2YWx1ZS4KKworQWx0aG91Z2ggdGhpcyByb3V0aW5lIGlzIGF2YWlsYWJsZSBmb3IgdXNlIHdoZW4gbmVlZGVkLCBpdHMgdXNlIHNob3VsZCBiZQorbGVmdCB0byBjaXJjdW1zdGFuY2VzIHdoaWNoIHJlbmRlciBAY29kZXtjb21fZXJyfSAoYmVsb3cpIHVudXNhYmxlLgorCitAZW5kIGRlZnR5cGVmdW4KKworQGRlZnR5cGVmdW4gdm9pZCBjb21fZXJyIChjb25zdCBjaGFyICpAdmFye3dob2FtaX0sIGxvbmcgQHZhcntlcnJvcl9jb2RlfSwgY29uc3QgY2hhciAqQHZhcntmb3JtYXR9LCAuLi4pOyAgICAgICAgICAgICAKKworVGhpcyByb3V0aW5lIHByb3ZpZGVzIGFuIGFsdGVybmF0ZSB3YXkgdG8gcHJpbnQgZXJyb3IgbWVzc2FnZXMgdG8KK3N0YW5kYXJkIGVycm9yOyBpdCBhbGxvd3MgdGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgcGFzc2VkIGluIGFzIGEKK3BhcmFtZXRlciwgcmF0aGVyIHRoYW4gaW4gYW4gZXh0ZXJuYWwgdmFyaWFibGUuICBAZW1waHtQcm92aWRlIGdyYW1tYXRpY2FsCitjb250ZXh0IGZvciBgYG1lc3NhZ2UuJyd9CisKK1RoZSBtb2R1bGUgcmVwb3J0aW5nIHRoZSBlcnJvciBzaG91bGQgYmUgcGFzc2VkIGluIHZpYSBAdmFye3dob2FtaX0uCitJZiBAdmFye2Zvcm1hdH0gaXMgQGNvZGV7KGNoYXIgKilOVUxMfSwgdGhlIGZvcm1hdHRlZCBtZXNzYWdlIHdpbGwgbm90IGJlCitwcmludGVkLiAgQHZhcntmb3JtYXR9IG1heSBub3QgYmUgb21pdHRlZC4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgY29tX2Vycl92YSAoY29uc3QgY2hhciAqQHZhcnt3aG9hbWl9LCBsb25nIEB2YXJ7ZXJyb3JfY29kZX0sIGNvbnN0IGNoYXIgKkB2YXJ7Zm9ybWF0fSwgdmFfbGlzdCBAdmFye2FyZ3N9KTsKKworVGhpcyByb3V0aW5lIHByb3ZpZGVzIGFuIGludGVyZmFjZSwgZXF1aXZhbGVudCB0byBAY29kZXtjb21fZXJyfSBhYm92ZSwKK3doaWNoIG1heSBiZSB1c2VkIGJ5IGhpZ2hlci1sZXZlbCB2YXJpYWRpYyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyB3aGljaAorYWNjZXB0IHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzKS4KKworQGVuZCBkZWZ0eXBlZnVuCisKK0BkZWZ0eXBlZnVuIHZvaWQgKnNldF9jb21fZXJyX2hvb2sgKHZvaWQgKCpAdmFye3Byb2N9KSAoY29uc3QgY2hhciAqQHZhcnt3aG9hbWl9LCBsb25nIEB2YXJ7ZXJyb3JfY29kZX0sIHZhX2xpc3QgQHZhcnthcmdzfSkgKGNvbnN0IGNoYXIgKkB2YXJ7d2hvYW1pfSwgbG9uZyBAdmFye2Vycm9yX2NvZGV9LCB2YV9saXN0IEB2YXJ7YXJnc30pKTsKKworQGRlZnR5cGVmdW54IHZvaWQgcmVzZXRfY29tX2Vycl9ob29rICgpOworCitUaGVzZSB0d28gcm91dGluZXMgYWxsb3cgYSByb3V0aW5lIHRvIGJlIGR5bmFtaWNhbGx5IHN1YnN0aXR1dGVkIGZvcgorQHNhbXB7Y29tX2Vycn0uICBBZnRlciBAc2FtcHtzZXRfY29tX2Vycl9ob29rfSBoYXMgYmVlbiBjYWxsZWQsCitjYWxscyB0byBAc2FtcHtjb21fZXJyfSB3aWxsIHR1cm4gaW50byBjYWxscyB0byB0aGUgbmV3IGhvb2sgcm91dGluZS4KK0BzYW1we3Jlc2V0X2NvbV9lcnJfaG9va30gdHVybnMgb2ZmIHRoaXMgaG9vay4gIFRoaXMgbWF5IGludGVuZGVkIHRvCitiZSB1c2VkIGluIGRhZW1vbnMgKHRvIHVzZSBhIHJvdXRpbmUgd2hpY2ggY2FsbHMgQGNpdGV7c3lzbG9nKDMpfSksIG9yCitpbiBhIHdpbmRvdyBzeXN0ZW0gYXBwbGljYXRpb24gKHdoaWNoIGNvdWxkIHBvcCB1cCBhIGRpYWxvZ3VlIGJveCkuCisKK0lmIGEgcHJvZ3JhbSBpcyB0byBiZSB1c2VkIGluIGFuIGVudmlyb25tZW50IGluIHdoaWNoIHNpbXBseSBwcmludGluZworbWVzc2FnZXMgdG8gdGhlIEBjb2Rle3N0ZGVycn0gc3RyZWFtIHdvdWxkIGJlIGluYXBwcm9wcmlhdGUgKHN1Y2ggYXMgaW4gYQorZGFlbW9uIHByb2dyYW0gd2hpY2ggcnVucyB3aXRob3V0IGEgdGVybWluYWwgYXR0YWNoZWQpLAorQGNvZGV7c2V0X2NvbV9lcnJfaG9va30gbWF5IGJlIHVzZWQgdG8gcmVkaXJlY3Qgb3V0cHV0IGZyb20gQGNvZGV7Y29tX2Vycn0uCitUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXJyb3IgaGFuZGxlciB3aGljaCB1c2VzIEBjaXRle3N5c2xvZygzKX0KK2FzIHN1cHBsaWVkIGluIEJTRCA0LjM6CisKK0BleGFtcGxlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworLyogZXh0ZXJuIG9wZW5sb2cgKGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbG9nb3B0LCBpbnQgZmFjaWxpdHkpOyAqLworLyogZXh0ZXJuIHN5c2xvZyAoaW50IHByaW9yaXR5LCBjaGFyICogbWVzc2FnZSwgLi4uKTsgKi8KKwordm9pZCBob29rIChjb25zdCBjaGFyICogd2hvYW1pLCBsb25nIGNvZGUsCisgICAgICAgICAgIGNvbnN0IGNoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK0B7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKyAgICBpZiAoIWluaXRpYWxpemVkKSBAeworICAgICAgICBvcGVubG9nICh3aG9hbWksCisgICAgICAgICAgICAgICAgIExPR19OT1dBSVR8TE9HX0NPTlN8TE9HX1BJRHxMT0dfTkRFTEFZLAorICAgICAgICAgICAgICAgICBMT0dfREFFTU9OKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIEB9CisgICAgdnNwcmludGYgKGJ1ZmZlciwgZm9ybWF0LCBhcmdzKTsKKyAgICBzeXNsb2cgKExPR19FUlIsICIlcyAlcyIsIGVycm9yX21lc3NhZ2UgKGNvZGUpLCBidWZmZXIpOworQH0KK0BlbmQgZXhhbXBsZQorCitBZnRlciBtYWtpbmcgdGhlIGNhbGwKK0Bjb2Rle3NldF9jb21fZXJyX2hvb2sgKGhvb2spO30sCithbnkgY2FsbHMgdG8gQGNvZGV7Y29tX2Vycn0gd2lsbCByZXN1bHQgaW4gbWVzc2FnZXMgYmVpbmcgc2VudCB0byB0aGUKK0B2YXJ7c3lzbG9nZH0gZGFlbW9uIGZvciBsb2dnaW5nLgorVGhlIG5hbWUgb2YgdGhlIHByb2dyYW0sIEBzYW1we3dob2FtaX0sIGlzIHN1cHBsaWVkIHRvIHRoZQorQHNhbXB7b3BlbmxvZygpfSBjYWxsLCBhbmQgdGhlIG1lc3NhZ2UgaXMgZm9ybWF0dGVkIGludG8gYSBidWZmZXIgYW5kCitwYXNzZWQgdG8gQGNvZGV7c3lzbG9nfS4KKworTm90ZSB0aGF0IHNpbmNlIHRoZSBleHRyYSBhcmd1bWVudHMgdG8gQGNvZGV7Y29tX2Vycn0gYXJlIHBhc3NlZCBieQorcmVmZXJlbmNlIHZpYSB0aGUgQGNvZGV7dmFfbGlzdH0gdmFsdWUgQGNvZGV7YXJnc30sIHRoZSBob29rIHJvdXRpbmUgbWF5CitwbGFjZSBhbnkgZm9ybSBvZiBpbnRlcnByZXRhdGlvbiBvbiB0aGVtLCBpbmNsdWRpbmcgaWdub3JpbmcgdGhlbS4gIEZvcgorY29uc2lzdGVuY3ksIEBjb2Rle3ByaW50Zn0tc3R5bGUgaW50ZXJwcmV0YXRpb24gaXMgc3VnZ2VzdGVkLCB2aWEKK0Bjb2Rle3ZzcHJpbnRmfSAob3IgQGNvZGV7X2RvcHJudH0gb24gQlNEIHN5c3RlbXMgd2l0aG91dCBmdWxsIHN1cHBvcnQgZm9yCit0aGUgQU5TSSBDIGxpYnJhcnkpLgorCitAZW5kIGRlZnR5cGVmdW4KKworQG5vZGUgQ29kaW5nIENvbnZlbnRpb25zLCBCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uLCBSdW4tdGltZSBzdXBwb3J0IHJvdXRpbmVzLCBUb3AKK0BjaGFwdGVyIENvZGluZyBDb252ZW50aW9ucworCitUaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFyZSBqdXN0IHNvbWUgZ2VuZXJhbCBzdHlsaXN0aWMgY29udmVudGlvbnMKK3RvIGZvbGxvdyB3aGVuIHdyaXRpbmcgcm9idXN0IGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMuICBDb252ZW50aW9ucworc2ltaWxhciB0byB0aGlzIGFyZSBnZW5lcmFsbHkgZm9sbG93ZWQgaW5zaWRlIHRoZSBVTklYIGtlcm5lbCBhbmQgbW9zdAorcm91dGluZXMgaW4gdGhlIE11bHRpY3Mgb3BlcmF0aW5nIHN5c3RlbS4gIEluIGdlbmVyYWwsIGEgcm91dGluZQorZWl0aGVyIHN1Y2NlZWRzIChyZXR1cm5pbmcgYSB6ZXJvIGVycm9yIGNvZGUsIGFuZCBkb2luZyBzb21lIHNpZGUKK2VmZmVjdHMgaW4gdGhlIHByb2Nlc3MpLCBvciBpdCBmYWlscywgZG9pbmcgbWluaW1hbCBzaWRlIGVmZmVjdHM7IGluCithbnkgZXZlbnQsIGFueSBpbnZhcmlhbnQgd2hpY2ggdGhlIGxpYnJhcnkgYXNzdW1lcyBtdXN0IGJlIG1haW50YWluZWQuCisKK0luIGdlbmVyYWwsIGl0IGlzIG5vdCBpbiB0aGUgZG9tYWluIG9mIG5vbiB1c2VyLWludGVyZmFjZSBsaWJyYXJ5Cityb3V0aW5lcyB0byB3cml0ZSBlcnJvciBtZXNzYWdlcyB0byB0aGUgdXNlcidzIHRlcm1pbmFsLCBvciBoYWx0IHRoZQorcHJvY2Vzcy4gIFN1Y2ggZm9ybXMgb2YgYGBlcnJvciBoYW5kbGluZycnIHNob3VsZCBiZSByZXNlcnZlZCBmb3IKK2ZhaWx1cmVzIG9mIGludGVybmFsIGludmFyaWFudHMgYW5kIGNvbnNpc3RhbmN5IGNoZWNrcyBvbmx5LCBhcyBpdAorcHJvdmlkZXMgdGhlIHVzZXIgb2YgdGhlIGxpYnJhcnkgbm8gd2F5IHRvIGNsZWFuIHVwIGZvciBoaW1zZWxmIGluIHRoZQorZXZlbnQgb2YgdG90YWwgZmFpbHVyZS4KKworTGlicmFyeSByb3V0aW5lcyB3aGljaCBjYW4gZmFpbCBzaG91bGQgYmUgc2V0IHVwIHRvIHJldHVybiBhbiBlcnJvcgorY29kZS4gIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgZG9uZSBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQorZnVuY3Rpb247IGlmIHRoaXMgaXMgbm90IGFjY2VwdGFibGUsIHRoZSByb3V0aW5lIHNob3VsZCByZXR1cm4gYQorYGBudWxsJycgdmFsdWUsIGFuZCBwdXQgdGhlIGVycm9yIGNvZGUgaW50byBhIHBhcmFtZXRlciBwYXNzZWQgYnkKK3JlZmVyZW5jZS4KKworUm91dGluZXMgd2hpY2ggdXNlIHRoZSBmaXJzdCBzdHlsZSBvZiBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZnJvbQordXNlci1pbnRlcmZhY2UgbGV2ZWxzIG9mIGEgcHJvZ3JhbSBhcyBmb2xsb3dzOgorCitAZXhhbXBsZQorQHsKKyAgICBpZiAoKGNvZGUgPSBpbml0aWFsaXplX3dvcmxkKGdldHVpZCgpLCByYW5kb20oKSkpICE9IDApIEB7CisgICAgICAgIGNvbV9lcnIoImRlbW8iLCBjb2RlLAorICAgICAgICAgICAgICAgICJ3aGVuIHRyeWluZyB0byBpbml0aWFsaXplIHdvcmxkIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgQH0KKyAgICBpZiAoKGRhdGFiYXNlID0gb3Blbl9kYXRhYmFzZSgibXlfc2VjcmV0cyIsICZjb2RlKSk9PU5VTEwpIEB7CisgICAgICAgIGNvbV9lcnIoImRlbW8iLCBjb2RlLAorICAgICAgICAgICAgICAgICJ3aGlsZSBvcGVuaW5nIG15X3NlY3JldHMiKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICBAfQorQH0KK0BlbmQgZXhhbXBsZQorCitBIGNhbGxlciB3aGljaCBmYWlscyB0byBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cyBpcyBpbiBlcnJvci4gIEl0IGlzCitwb3NzaWJsZSB0byBsb29rIGZvciBjb2RlIHdoaWNoIGlnbm9yZXMgZXJyb3IgcmV0dXJucyBieSB1c2luZyBsaW50OworbG9vayBmb3IgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIGZvcm0gYGBmb29iYXIgcmV0dXJucyB2YWx1ZSB3aGljaCBpcworc29tZXRpbWVzIGlnbm9yZWQnJyBvciBgYGZvb2JhciByZXR1cm5zIHZhbHVlIHdoaWNoIGlzIGFsd2F5cworaWdub3JlZC4nJworCitTaW5jZSBsaWJyYXJpZXMgbWF5IGJlIGJ1aWx0IG91dCBvZiBvdGhlciBsaWJyYXJpZXMsIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeQorZm9yIHRoZSBzdWNjZXNzIG9mIG9uZSByb3V0aW5lIHRvIGRlcGVuZCBvbiBhbm90aGVyLiAgV2hlbiBhIGxvd2VyIGxldmVsCityb3V0aW5lIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIG1pZGRsZSBsZXZlbCByb3V0aW5lIGhhcyBhIGZldyBwb3NzaWJsZQorb3B0aW9ucy4gIEl0IGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIHRvIGl0cyBjYWxsZXIgYWZ0ZXIgZG9pbmcKK3NvbWUgZm9ybSBvZiBjbGVhbnVwLCBpdCBjYW4gc3Vic3RpdHV0ZSBvbmUgb2YgaXRzIG93biwgb3IgaXQgY2FuIHRha2UKK2NvcnJlY3RpdmUgYWN0aW9uIG9mIGl0cyBvd24gYW5kIGNvbnRpbnVlIG5vcm1hbGx5LiAgRm9yIGluc3RhbmNlLCBhCitsaWJyYXJ5IHJvdXRpbmUgd2hpY2ggbWFrZXMgYSBgYGNvbm5lY3QnJyBzeXN0ZW0gY2FsbCB0byBtYWtlIGEgbmV0d29yaworY29ubmVjdGlvbiBtYXkgcmVmbGVjdCB0aGUgc3lzdGVtIGVycm9yIGNvZGUgQGNvZGV7RUNPTk5SRUZVU0VEfQorKENvbm5lY3Rpb24gcmVmdXNlZCkgdG8gaXRzIGNhbGxlciwgb3IgaXQgbWF5IHJldHVybiBhIGBgc2VydmVyIG5vdAorYXZhaWxhYmxlLCB0cnkgYWdhaW4gbGF0ZXIsJycgb3IgaXQgbWF5IHRyeSBhIGRpZmZlcmVudCBzZXJ2ZXIuCisKK0NsZWFudXAgd2hpY2ggaXMgdHlwaWNhbGx5IG5lY2Vzc2FyeSBtYXkgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkCit0bywgZnJlZWluZyBhbGxvY2F0ZWQgbWVtb3J5IHdoaWNoIHdpbGwgbm90IGJlIG5lZWRlZCBhbnkgbW9yZSwKK3VubG9ja2luZyBjb25jdXJyYW5jeSBsb2NrcywgZHJvcHBpbmcgcmVmZXJlbmNlIGNvdW50cywgY2xvc2luZyBmaWxlCitkZXNjcmlwdG9ycywgb3Igb3RoZXJ3aXNlIHVuZG9pbmcgYW55dGhpbmcgd2hpY2ggdGhlIHByb2NlZHVyZSBkaWQgdXAKK3RvIHRoaXMgcG9pbnQuICBXaGVuIHRoZXJlIGFyZSBhIGxvdCBvZiB0aGluZ3Mgd2hpY2ggY2FuIGdvIHdyb25nLCBpdAoraXMgZ2VuZXJhbGx5IGdvb2QgdG8gd3JpdGUgb25lIGJsb2NrIG9mIGVycm9yLWhhbmRsaW5nIGNvZGUgd2hpY2ggaXMKK2JyYW5jaGVkIHRvLCB1c2luZyBhIGdvdG8sIGluIHRoZSBldmVudCBvZiBmYWlsdXJlLiAgQSBjb21tb24gc291cmNlCitvZiBlcnJvcnMgaW4gVU5JWCBwcm9ncmFtcyBpcyBmYWlsaW5nIHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgb24KK2Vycm9yIHJldHVybnM7IHRoaXMgbGVhdmVzIGEgbnVtYmVyIG9mIGBgem9tYmllZCcnIGZpbGUgZGVzY3JpcHRvcnMKK29wZW4sIHdoaWNoIGV2ZW50dWFsbHkgY2F1c2VzIHRoZSBwcm9jZXNzIHRvIHJ1biBvdXQgb2YgZmlsZQorZGVzY3JpcHRvcnMgYW5kIGZhbGwgb3Zlci4KKworQGV4YW1wbGUKK0B7CisgICAgRklMRSAqZjE9TlVMTCwgKmYyPU5VTEwsICpmMz1OVUxMOworICAgIGludCBzdGF0dXMgPSAwOworCisgICAgaWYgKCAoZjEgPSBmb3BlbihGSUxFMSwgInIiKSkgPT0gTlVMTCkgQHsKKyAgICAgICAgc3RhdHVzID0gZXJybm87CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgQH0KKworICAgIC8qCisgICAgICogQ3J1bmNoIGZvciBhIHdoaWxlCisgICAgICovCisKKyAgICBpZiAoIChmMiA9IGZvcGVuKEZJTEUyLCAidyIpKSA9PSBOVUxMKSBAeworICAgICAgICBzdGF0dXMgPSBlcnJubzsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBAfQorCisgICAgaWYgKCAoZjMgPSBmb3BlbihGSUxFMywgImErIikpID09IE5VTEwpIEB7CisgICAgICAgIHN0YXR1cyA9IGVycm5vOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBAfQorCisgICAgLyoKKyAgICAgKiBEbyBtb3JlIHByb2Nlc3NpbmcuCisgICAgICovCisgICAgZmNsb3NlKGYxKTsKKyAgICBmY2xvc2UoZjIpOworICAgIGZjbG9zZShmMyk7CisgICAgcmV0dXJuIDA7CisKK2Vycm9yOgorICAgIGlmIChmMSkgZmNsb3NlKGYxKTsKKyAgICBpZiAoZjIpIGZjbG9zZShmMik7CisgICAgaWYgKGYzKSBmY2xvc2UoZjMpOworICAgIHJldHVybiBzdGF0dXM7CitAfQorQGVuZCBleGFtcGxlCisKK0Bub2RlIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24sIEJ1ZyBSZXBvcnRzLCBDb2RpbmcgQ29udmVudGlvbnMsIFRvcAorQGNoYXB0ZXIgQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgorCitUaGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSB3aWxsIHByb2JhYmx5IGJlIGRvbmUgYXMgYSBjb21wcmVzc2VkCitgYHRhcicnLWZvcm1hdCBmaWxlIGF2YWlsYWJsZSB2aWEgYW5vbnltb3VzIEZUUCBmcm9tIFNJUEIuTUlULkVEVS4KK1JldHJpZXZlIEBzYW1we3B1Yi9jb21fZXJyLnRhci5afSBhbmQgZXh0cmFjdCB0aGUgY29udGVudHMuICBBIHN1YmRpcmVjdG9yeQorQHR7cHJvZmlsZWR9IHNob3VsZCBiZSBjcmVhdGVkIHRvIGhvbGQgb2JqZWN0cyBjb21waWxlZCBmb3IgcHJvZmlsaW5nLgorUnVubmluZyBgYG1ha2UgYWxsJycgc2hvdWxkIHRoZW4gYmUgc3VmZmljaWVudCB0byBidWlsZCB0aGUgbGlicmFyeSBhbmQKK2Vycm9yLXRhYmxlIGNvbXBpbGVyLiAgVGhlIGZpbGVzIEBzYW1we2xpYmNvbV9lcnIuYX0sCitAc2FtcHtsaWJjb21fZXJyX3AuYX0sIEBzYW1we2NvbV9lcnIuaH0sIGFuZCBAc2FtcHtjb21waWxlX2V0fSBzaG91bGQgYmUKK2luc3RhbGxlZCBmb3IgdXNlOyBAc2FtcHtjb21fZXJyLjN9IGFuZCBAc2FtcHtjb21waWxlX2V0LjF9IGNhbiBhbHNvIGJlCitpbnN0YWxsZWQgYXMgbWFudWFsIHBhZ2VzLgorCitAbm9kZSBCdWcgUmVwb3J0cywgQWNrbm93bGVkZ2VtZW50cywgQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbiwgVG9wCitAY2hhcHRlciBCdWcgUmVwb3J0cworCitUaGUgcHJpbmNpcGFsIGF1dGhvciBvZiB0aGlzIGxpYnJhcnkgaXM6IEtlbgorUmFlYnVybiwgQHR7cmFlYnVybkBATUlULkVEVX0uICAKKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBjb21fZXJyIGxpYnJhcnkgaXMgYmVpbmcgbWFpbnRhaW5lZCBieSBUaGVvZG9yZQorVHMnbywgYW5kIHNvIGJ1Z3MgYW5kIGNvbW1lbnRzIHNob3VsZCBiZSBzZW50IHRvIEB0e3R5dHNvQEB0aHVuay5vcmd9LgorCisKK0Bub2RlIEFja25vd2xlZGdlbWVudHMsICAsIEJ1ZyBSZXBvcnRzLCBUb3AKK0BjaGFwdGVyIEFja25vd2xlZGdlbWVudHMKKworSSB3b3VsZCBsaWtlIHRvIHRoYW5rOiBCaWxsIFNvbW1lcmZlbGQsIGZvciBoaXMgaGVscCB3aXRoIHNvbWUgb2YgdGhpcworZG9jdW1lbnRhdGlvbiwgYW5kIGNhdGNoaW5nIHNvbWUgb2YgdGhlIGJ1Z3MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kOworSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMsIGZvciBub3Qga2lsbGluZyBvZmYgdGhlIEBlbXBoe011bHRpY3N9CitvcGVyYXRpbmcgc3lzdGVtIGJlZm9yZSBJIGhhZCBhbiBvcHBvcnR1bml0eSB0byB1c2UgaXQ7IEhvbmV5d2VsbCdzCitjdXN0b21lcnMsIHdobyBwZXJzdWFkZWQgdGhlbSBub3QgdG8gZG8gc28sIGZvciBhIHdoaWxlOyBUZWQgQW5kZXJzb24gb2YKK0NNVSwgZm9yIGNhdGNoaW5nIHNvbWUgcHJvYmxlbXMgYmVmb3JlIHZlcnNpb24gMS4yIGxlZnQgdGhlIG5lc3Q7IFN0YW4KK1phbmFyb3R0aSBhbmQgc2V2ZXJhbCBvdGhlcnMgb2YgTUlUJ3MgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkLAorZm9yIGdldHRpbmcgdXMgc3RhcnRlZCB3aXRoIGBgZGlzY3VzcywnJyBmb3Igd2hpY2ggdGhpcyBwYWNrYWdlIHdhcworb3JpZ2luYWxseSB3cml0dGVuOyBhbmQgZXZlcnlvbmUgSSd2ZSB0YWxrZWQgaW50byAtLS0gSSBtZWFuLCBhc2tlZCB0byByZWFkCit0aGlzIGRvY3VtZW50IGFuZCB0aGUgYGBtYW4nJyBwYWdlcy4KKworQGNvbnRlbnRzCitAYnllCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2NvbV9yaWdodC5jIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21fcmlnaHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDBlOTEwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21fcmlnaHQuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIGNvbV9yaWdodC5jIC0tIHByb3ZpZGUgSGVpbWRhbGwgLyBLZXJiZXJvczRrdGggY29tX2VyciBpbnRlcmZhY2VzCisgKiAJZm9yIGJhY2t3YXJkcyBjb21wYXRiaWxpdHkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqIFRha2VuIGZyb20gbGliL2NvbV9lcnIvZXJyb3IuYyBmcm9tIEtlcmJlcm9zNGt0aCBkaXN0cmlidXRpb24uCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAyMDAxIEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgorICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKworY29uc3QgY2hhciAqCitjb21fcmlnaHQoc3RydWN0IGV0X2xpc3QgKmxpc3QsIGxvbmcgY29kZSkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqcDsKKyAgICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCWlmIChjb2RlID49IHAtPnRhYmxlLT5iYXNlICYmIGNvZGUgPCBwLT50YWJsZS0+YmFzZSArIHAtPnRhYmxlLT5uX21zZ3MpCisJICAgIHJldHVybiBwLT50YWJsZS0+bXNnc1tjb2RlIC0gcC0+dGFibGUtPmJhc2VdOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqCitjb21fcmlnaHRfcihzdHJ1Y3QgZXRfbGlzdCAqbGlzdCwgbG9uZyBjb2RlLCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisgICAgc3RydWN0IGV0X2xpc3QgKnA7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwlpZiAoKGNvZGUgPj0gcC0+dGFibGUtPmJhc2UpICYmCisJICAgIChjb2RlIDwgcC0+dGFibGUtPmJhc2UgKyBwLT50YWJsZS0+bl9tc2dzKSkgeworICAgICAgICAgICAgc3RybmNweShzdHIsIHAtPnRhYmxlLT5tc2dzW2NvZGUgLSBwLT50YWJsZS0+YmFzZV0sIGxlbik7CisgICAgICAgICAgICBzdHJbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBmb29iYXIgeworICAgIHN0cnVjdCBldF9saXN0IGV0bDsKKyAgICBzdHJ1Y3QgZXJyb3JfdGFibGUgdGFiOworfTsKKworLyoKKyAqIFdlIHByb3ZpZGUgdGhpcyByb3V0aW5lIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbGwgZ2VuZXJhdGVkCisgKiBmb29fZXJyLmMgZmlsZXMsIGJ1dCB3ZSBkb24ndCB1c2UgdGhpcyBvdXJzZWx2ZXMgZm9yIGZvb19lcnIuYworICogZmlsZXMgZ2VuZXJhdGVkIGJ5IG91ciBjb21waWxlX2V0LiAgVGhpcyBpcyBzbyBvdXIgZm9vX2Vyci5jCisgKiBmaWxlcyBjYW4gYmUgdXNlZCB3aXRoIG9sZGVyIGNvbV9lcnIgbGlicmFyaWVzIHdpdGhvdXQgcnVubmluZworICogYWZvdWwgb2YgZGVwZW5kZW5jaWVzLgorICovCit2b2lkCitpbml0aWFsaXplX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0LAorCQkJIGNvbnN0IGNoYXIgKiptZXNzYWdlcywKKwkJCSBpbnQgbnVtX2Vycm9ycywKKwkJCSBsb25nIGJhc2UpCit7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0LCAqKmVuZDsKKyAgICBzdHJ1Y3QgZXJyb3JfdGFibGUgKnRhYjsKKyAgICBzdHJ1Y3QgZm9vYmFyICpmOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IG1lc3NhZ2VzKQorICAgICAgICAgICAgcmV0dXJuOworICAgIGYgPSBtYWxsb2Moc2l6ZW9mKCpmKSk7CisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGV0ID0gJmYtPmV0bDsKKyAgICBldC0+dGFibGUgPSB0YWIgPSAmZi0+dGFiOworICAgIHRhYi0+bXNncyA9IG1lc3NhZ2VzOworICAgIHRhYi0+bl9tc2dzID0gbnVtX2Vycm9yczsKKyAgICB0YWItPmJhc2UgPSBiYXNlOworICAgIGV0LT5uZXh0ID0gTlVMTDsKKyAgICAqZW5kID0gZXQ7Cit9CisKKwordm9pZAorZnJlZV9lcnJvcl90YWJsZShzdHJ1Y3QgZXRfbGlzdCAqZXQpCit7CisgICAgd2hpbGUoZXQpeworCXN0cnVjdCBldF9saXN0ICpwID0gZXQ7CisJZXQgPSBldC0+bmV4dDsKKwlmcmVlKHApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvY29tcGlsZV9ldC4xIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21waWxlX2V0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxOTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvY29tcGlsZV9ldC4xCkBAIC0wLDAgKzEsODIgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDE5ODggTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKKy5cIiBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgJEhlYWRlciQKKy5cIgorLlRIIENPTVBJTEVfRVQgMSAiMzAgTWFyIDE5OTgiIFNJUEIKKy5TSCBOQU1FCitjb21waWxlX2V0IFwtIGVycm9yIHRhYmxlIGNvbXBpbGVyCisuU0ggU1lOT1BTSVMKKy5CIGNvbXBpbGVfZXQKK2ZpbGUKKy5TSCBERVNDUklQVElPTgorLkIgQ29tcGlsZV9ldAorY29udmVydHMgYSB0YWJsZSBsaXN0aW5nIGVycm9yLWNvZGUgbmFtZXMgYW5kIGFzc29jaWF0ZWQgbWVzc2FnZXMgaW50bworYSBDIHNvdXJjZSBmaWxlIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUKKy5JUiBjb21fZXJyICgzKQorbGlicmFyeS4KKworVGhlIHNvdXJjZSBmaWxlIG5hbWUgbXVzdCBlbmQgd2l0aCBhIHN1ZmZpeCBvZiBgYC5ldCcnOyB0aGUgZmlsZQorY29uc2lzdHMgb2YgYSBkZWNsYXJhdGlvbiBzdXBwbHlpbmcgdGhlIG5hbWUgKHVwIHRvIGZvdXIgY2hhcmFjdGVycworbG9uZykgb2YgdGhlIGVycm9yLWNvZGUgdGFibGU6CisKKy5CIGVycm9yX3RhYmxlCisuSSBuYW1lCisKK2ZvbGxvd2VkIGJ5IHVwIHRvIDI1NiBlbnRyaWVzIG9mIHRoZSBmb3JtOgorCisuQiBlcnJvcl9jb2RlCisuSSBuYW1lLAorIgorLkkgc3RyaW5nCisiCisKK2FuZCBhIGZpbmFsCisKKy5CIGVuZAorCit0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KKworVGhlIG5hbWUgb2YgdGhlIHRhYmxlIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBuYW1lIG9mIGEgc3Vicm91dGluZQorLkkgaW5pdGlhbGl6ZV9YWFhYX2Vycm9yX3RhYmxlCit3aGljaCBtdXN0IGJlIGNhbGxlZCBpbiBvcmRlciBmb3IgdGhlCisuSSBjb21fZXJyCitsaWJyYXJ5IHRvIHJlY29nbml6ZSB0aGUgZXJyb3IgdGFibGUuCisKK1RoZSB2YXJpb3VzIGVycm9yIGNvZGVzIGRlZmluZWQgYXJlIGFzc2lnbmVkIHNlcXVlbnRpYWxseSBpbmNyZWFzaW5nCitudW1iZXJzIChzdGFydGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIGNvbXB1dGVkIGFzIGEgaGFzaCBmdW5jdGlvbiBvZgordGhlIG5hbWUgb2YgdGhlIHRhYmxlKTsgdGh1cyBmb3IgY29tcGF0aWJpbGl0eSBpdCBpcyBzdWdnZXN0ZWQgdGhhdAorbmV3IGNvZGVzIGJlIGFkZGVkIG9ubHkgdG8gdGhlIGVuZCBvZiBhbiBleGlzdGluZyB0YWJsZSwgYW5kIHRoYXQgbm8KK2NvZGVzIGJlIHJlbW92ZWQgZnJvbSB0YWJsZXMuCisKK1RoZSBuYW1lcyBkZWZpbmVkIGluIHRoZSB0YWJsZSBhcmUgcGxhY2VkIGludG8gYSBDIGhlYWRlciBmaWxlIHdpdGgKK3ByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGRlZmluaW5nIHRoZW0gYXMgaW50ZWdlciBjb25zdGFudHMgb2YgdXAgdG8KKzMyIGJpdHMgaW4gbWFnbml0dWRlLgorCitBIEMgc291cmNlIGZpbGUgaXMgYWxzbyBnZW5lcmF0ZWQgd2hpY2ggc2hvdWxkIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQKK3dpdGggdGhlIG9iamVjdCBmaWxlcyB3aGljaCByZWZlcmVuY2UgdGhlc2UgZXJyb3IgY29kZXM7IGl0IGNvbnRhaW5zCit0aGUgdGV4dCBvZiB0aGUgbWVzc2FnZXMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBzdWJyb3V0aW5lLiAgQm90aCBDCitmaWxlcyBoYXZlIG5hbWVzIGRlcml2ZWQgZnJvbSB0aGF0IG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgd2l0aAordGhlIGBgLmV0Jycgc3VmZml4IHJlcGxhY2VkIGJ5IGBgLmMnJyBhbmQgYGAuaCcnLgorCitBIGBgIycnIGluIHRoZSBzb3VyY2UgZmlsZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCBjaGFyYWN0ZXIsIGFuZCBhbGwKK3JlbWFpbmluZyB0ZXh0IHRvIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBsaW5lIHdpbGwgYmUgaWdub3JlZC4KKworLlNIIEJVR1MKKworU2luY2UgdGhlIG9yaWdpbmFsCisuQiBjb21waWxlX2V0Cit1c2VzIGEgdmVyeSBzaW1wbGUgcGFyc2VyIGJhc2VkIG9uCisuSVIgeWFjYyAoMSksIAorYW5kIHRoaXMgY3VycmVudCB2ZXJzaW9uIG9mIAorLkIgY29tcGlsZV9ldAordXNlcyBhbiBhd2svc2VkIGNvbWJpbmF0aW9uIG9mIHNjcmlwdHMsIAoraXRzIGVycm9yIHJlY292ZXJ5IGxlYXZlcyBtdWNoIHRvIGJlIGRlc2lyZWQuCisKKy5cIiAuSVIgZm9yIG1hbnVhbCBlbnRyaWVzCisuXCIgLlBQIGZvciBwYXJhZ3JhcGggYnJlYWtzCisKKy5TSCAiU0VFIEFMU08iCitjb21fZXJyICgzKS4KKworS2VuIFJhZWJ1cm4sICJBIENvbW1vbiBFcnJvciBEZXNjcmlwdGlvbiBMaWJyYXJ5IGZvciBVTklYIi4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvY29tcGlsZV9ldC5zaC5pbiBiL2UyZnNwcm9ncy9saWIvZXQvY29tcGlsZV9ldC5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njc3MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9jb21waWxlX2V0LnNoLmluCkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorIworIworCitkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACitBV0s9QEFXS0AKK0RJUj0iJHtESVItQGRhdGFkaXJAL2V0fSIKK0VUX0RJUj0iQEVUX0RJUkAiCisKK2lmIHRlc3QgIiQxIiA9ICItLWJ1aWxkLXRyZWUiIDsgdGhlbgorICAgIHNoaWZ0OworICAgIERJUj0iJEVUX0RJUiIKK2ZpCisKK2lmIHRlc3QgIngkMSIgPSB4IDsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiBjb21waWxlX2V0IGZpbGUiCisgICAgZXhpdCAxCitmaQorCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCitpZiB0ZXN0ICEgLWYgIiRESVIvZXRfaC5hd2siIHx8IHRlc3QgISAtZiAiJERJUi9ldF9jLmF3ayIgOyB0aGVuCisgICAgRElSPSIkRVRfRElSIgorIyAgICBlY2hvICJGYWxsaW5nIGJhY2sgdG8gJERJUi4uLiIKKyAgICBpZiB0ZXN0ICEgLWYgIiRESVIvZXRfaC5hd2siIHx8IHRlc3QgISAtZiAiJERJUi9ldF9jLmF3ayIgOyB0aGVuCisJZWNobyAiY29tcGlsZV9ldDogQ291bGRuJ3QgZmluZCBjb21waWxlX2V0J3MgdGVtcGxhdGUgZmlsZXMuIgorCWV4aXQgMQorICAgIGZpCitmaQorCitST09UPWBlY2hvICQxIHwgc2VkIC1lIHMvLmV0JC8vYAorQkFTRT1gYmFzZW5hbWUgJFJPT1RgCisKK2lmIHRlc3QgISAtZiAiJFJPT1QuZXQiIDsgdGhlbgorICAgIGVjaG8gImNvbXBpbGVfZXQ6ICRST09ULmV0OiBGaWxlIG5vdCBmb3VuZCIKKyAgICBleGl0IDE7CitmaQorCiskQVdLIC1mICIke0RJUn0vZXRfaC5hd2siICJvdXRmaWxlPSR7QkFTRX0uaC4kJCIgIm91dGZuPSR7QkFTRX0uaCIgIiRST09ULmV0IgoraWYgdGVzdCAtZiAke0JBU0V9LmggJiYgY21wIC1zICR7QkFTRX0uaC4kJCAke0JBU0V9LmggOyB0aGVuCisgICAgcm0gLWYgJHtCQVNFfS5oLiQkCitlbHNlCisgICAgbXYgLWYgJHtCQVNFfS5oLiQkICR7QkFTRX0uaAorICAgIGNobW9kIC13ICR7QkFTRX0uaAorZmkKKyRBV0sgLWYgIiR7RElSfS9ldF9jLmF3ayIgIm91dGZpbGU9JHtCQVNFfS5jLiQkIiAib3V0Zm49JHtCQVNFfS5jIiAiJFJPT1QuZXQiCitpZiB0ZXN0IC1mICR7QkFTRX0uYyAmJiBjbXAgLXMgJHtCQVNFfS5jLiQkICR7QkFTRX0uYyA7IHRoZW4KKyAgICBybSAtZiAke0JBU0V9LmMuJCQKK2Vsc2UKKyAgICBtdiAtZiAke0JBU0V9LmMuJCQgJHtCQVNFfS5jCisgICAgY2htb2QgLXcgJHtCQVNFfS5jCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9lcnJvcl9tZXNzYWdlLmMgYi9lMmZzcHJvZ3MvbGliL2V0L2Vycm9yX21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE0YmNmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9lcnJvcl9tZXNzYWdlLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiAkSGVhZGVyJAorICogJFNvdXJjZSQKKyAqICRMb2NrZXIkCisgKgorICogQ29weXJpZ2h0IDE5ODcgYnkgdGhlIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICogb2YgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWYgSEFWRV9TRUNVUkVfR0VURU5WCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9TWVNfUFJDVExfSAorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2Vsc2UKKyNkZWZpbmUgUFJfR0VUX0RVTVBBQkxFIDMKKyNlbmRpZgorI2lmICghZGVmaW5lZChIQVZFX1BSQ1RMKSAmJiBkZWZpbmVkKGxpbnV4KSkKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TRU1BUEhPUkVfSAorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaWZkZWYgVExTCisjZGVmaW5lIFRIUkVBRF9MT0NBTCBzdGF0aWMgVExTCisjZWxzZQorI2RlZmluZSBUSFJFQURfTE9DQUwgc3RhdGljCisjZW5kaWYKKworVEhSRUFEX0xPQ0FMIGNoYXIgYnVmZmVyWzI1XTsKKworc3RydWN0IGV0X2xpc3QgKiBfZXRfbGlzdCA9IChzdHJ1Y3QgZXRfbGlzdCAqKSBOVUxMOworc3RydWN0IGV0X2xpc3QgKiBfZXRfZHluYW1pY19saXN0ID0gKHN0cnVjdCBldF9saXN0ICopIE5VTEw7CisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBDT01FUlJfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBDT01FUlJfQVRUUih4KQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFTV9JTklUCitzdGF0aWMgc2VtX3QgX2V0X2xvY2s7CitzdGF0aWMgaW50IF9ldF9sb2NrX2luaXRpYWxpemVkOworCitzdGF0aWMgdm9pZCBDT01FUlJfQVRUUigoY29uc3RydWN0b3IpKSBzZXR1cF9ldF9sb2NrKHZvaWQpCit7CisJc2VtX2luaXQoJl9ldF9sb2NrLCAwLCAxKTsKKwlfZXRfbG9ja19pbml0aWFsaXplZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIENPTUVSUl9BVFRSKChkZXN0cnVjdG9yKSkgZmluaV9ldF9sb2NrKHZvaWQpCit7CisJc2VtX2Rlc3Ryb3koJl9ldF9sb2NrKTsKKwlfZXRfbG9ja19pbml0aWFsaXplZCA9IDA7Cit9CisjZW5kaWYKKworCitpbnQgZXRfbGlzdF9sb2NrKHZvaWQpCit7CisjaWZkZWYgSEFWRV9TRU1fSU5JVAorCWlmICghX2V0X2xvY2tfaW5pdGlhbGl6ZWQpCisJCXNldHVwX2V0X2xvY2soKTsKKwlyZXR1cm4gc2VtX3dhaXQoJl9ldF9sb2NrKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworaW50IGV0X2xpc3RfdW5sb2NrKHZvaWQpCit7CisjaWZkZWYgSEFWRV9TRU1fSU5JVAorCWlmIChfZXRfbG9ja19pbml0aWFsaXplZCkKKwkJcmV0dXJuIHNlbV9wb3N0KCZfZXRfbG9jayk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBjaGFyICooKmdldHRleHRmKSAoY29uc3QgY2hhciAqKTsKKworc3RhdGljIGdldHRleHRmIGNvbV9lcnJfZ2V0dGV4dCA9IE5VTEw7CisKK2dldHRleHRmIHNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dGYgbmV3X3Byb2MpCit7CisgICAgZ2V0dGV4dGYgeCA9IGNvbV9lcnJfZ2V0dGV4dDsKKworICAgIGNvbV9lcnJfZ2V0dGV4dCA9IG5ld19wcm9jOworCisgICAgcmV0dXJuIHg7Cit9CisKKworY29uc3QgY2hhciAqIGVycm9yX21lc3NhZ2UgKGVycmNvZGVfdCBjb2RlKQoreworICAgIGludCBvZmZzZXQ7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0OworICAgIGVycmNvZGVfdCB0YWJsZV9udW07CisgICAgaW50IHN0YXJ0ZWQgPSAwOworICAgIGNoYXIgKmNwOworCisgICAgb2Zmc2V0ID0gKGludCkgKGNvZGUgJiAoKDE8PEVSUkNPREVfUkFOR0UpLTEpKTsKKyAgICB0YWJsZV9udW0gPSBjb2RlIC0gb2Zmc2V0OworICAgIGlmICghdGFibGVfbnVtKSB7CisjaWZkZWYgSEFTX1NZU19FUlJMSVNUCisJaWYgKG9mZnNldCA8IHN5c19uZXJyKQorCSAgICByZXR1cm4oc3lzX2Vycmxpc3Rbb2Zmc2V0XSk7CisJZWxzZQorCSAgICBnb3RvIG9vcHM7CisjZWxzZQorCWNwID0gc3RyZXJyb3Iob2Zmc2V0KTsKKwlpZiAoY3ApCisJICAgIHJldHVybihjcCk7CisJZWxzZQorCSAgICBnb3RvIG9vcHM7CisjZW5kaWYKKyAgICB9CisgICAgZXRfbGlzdF9sb2NrKCk7CisgICAgZm9yIChldCA9IF9ldF9saXN0OyBldDsgZXQgPSBldC0+bmV4dCkgeworCWlmICgoZXQtPnRhYmxlLT5iYXNlICYgMHhmZmZmZmZMKSA9PSAodGFibGVfbnVtICYgMHhmZmZmZmZMKSkgeworCSAgICAvKiBUaGlzIGlzIHRoZSByaWdodCB0YWJsZSAqLworCSAgICBpZiAoZXQtPnRhYmxlLT5uX21zZ3MgPD0gb2Zmc2V0KSB7CisJCWJyZWFrOworCSAgICB9IGVsc2UgeworCQljb25zdCBjaGFyICptc2cgPSBldC0+dGFibGUtPm1zZ3Nbb2Zmc2V0XTsKKwkJZXRfbGlzdF91bmxvY2soKTsKKwkJaWYgKGNvbV9lcnJfZ2V0dGV4dCkKKwkJICAgIHJldHVybiAoKmNvbV9lcnJfZ2V0dGV4dCkobXNnKTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIG1zZzsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZm9yIChldCA9IF9ldF9keW5hbWljX2xpc3Q7IGV0OyBldCA9IGV0LT5uZXh0KSB7CisJaWYgKChldC0+dGFibGUtPmJhc2UgJiAweGZmZmZmZkwpID09ICh0YWJsZV9udW0gJiAweGZmZmZmZkwpKSB7CisJICAgIC8qIFRoaXMgaXMgdGhlIHJpZ2h0IHRhYmxlICovCisJICAgIGlmIChldC0+dGFibGUtPm5fbXNncyA8PSBvZmZzZXQpIHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKm1zZyA9IGV0LT50YWJsZS0+bXNnc1tvZmZzZXRdOworCQlldF9saXN0X3VubG9jaygpOworCQlpZiAoY29tX2Vycl9nZXR0ZXh0KQorCQkgICAgcmV0dXJuICgqY29tX2Vycl9nZXR0ZXh0KShtc2cpOworCQllbHNlCisJCSAgICByZXR1cm4gbXNnOworCSAgICB9CisJfQorICAgIH0KKyAgICBldF9saXN0X3VubG9jaygpOworb29wczoKKyAgICBzdHJjcHkgKGJ1ZmZlciwgIlVua25vd24gY29kZSAiKTsKKyAgICBpZiAodGFibGVfbnVtKSB7CisJc3RyY2F0IChidWZmZXIsIGVycm9yX3RhYmxlX25hbWUgKHRhYmxlX251bSkpOworCXN0cmNhdCAoYnVmZmVyLCAiICIpOworICAgIH0KKyAgICBmb3IgKGNwID0gYnVmZmVyOyAqY3A7IGNwKyspCisJOworICAgIGlmIChvZmZzZXQgPj0gMTAwKSB7CisJKmNwKysgPSAnMCcgKyBvZmZzZXQgLyAxMDA7CisJb2Zmc2V0ICU9IDEwMDsKKwlzdGFydGVkKys7CisgICAgfQorICAgIGlmIChzdGFydGVkIHx8IG9mZnNldCA+PSAxMCkgeworCSpjcCsrID0gJzAnICsgb2Zmc2V0IC8gMTA7CisJb2Zmc2V0ICU9IDEwOworICAgIH0KKyAgICAqY3ArKyA9ICcwJyArIG9mZnNldDsKKyAgICAqY3AgPSAnXDAnOworICAgIHJldHVybihidWZmZXIpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgb25seSByZXR1cm4gYSB2YWx1ZSBpZiB0aGUgd2UgYXJlIG5vdCBydW5uaW5nIGFzCisgKiBhIHByaXZpbGVnZWQgcHJvY2Vzcy4KKyAqLworc3RhdGljIGNoYXIgKnNhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSkpCisJCXJldHVybiBOVUxMOworI2lmIEhBVkVfUFJDVEwKKwlpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbHNlCisjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoU1lTX3ByY3RsKSkKKwlpZiAoc3lzY2FsbChTWVNfcHJjdGwsIFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIHNlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIF9fc2VjdXJlX2dldGVudihhcmcpOworI2Vsc2UKKwlyZXR1cm4gZ2V0ZW52KGFyZyk7CisjZW5kaWYKK30KKworI2RlZmluZSBERUJVR19JTklUCTB4ODAwMAorI2RlZmluZSBERUJVR19BRERSRU1PVkUgMHgwMDAxCisKK3N0YXRpYyBpbnQgZGVidWdfbWFzayA9IDA7CitzdGF0aWMgRklMRSAqZGVidWdfZiA9IDA7CisKK3N0YXRpYyB2b2lkIGluaXRfZGVidWcodm9pZCkKK3sKKwljaGFyCSpkc3RyLCAqZm4sICp0bXA7CisJaW50CWZkLCBmbGFnczsKKworCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfSU5JVCkKKwkJcmV0dXJuOworCisJZHN0ciA9IGdldGVudigiQ09NRVJSX0RFQlVHIik7CisJaWYgKGRzdHIpIHsKKwkJZGVidWdfbWFzayA9IHN0cnRvdWwoZHN0ciwgJnRtcCwgMCk7CisJCWlmICgqdG1wIHx8IGVycm5vKQorCQkJZGVidWdfbWFzayA9IDA7CisJfQorCisJZGVidWdfbWFzayB8PSBERUJVR19JTklUOworCWlmIChkZWJ1Z19tYXNrID09IERFQlVHX0lOSVQpCisJCXJldHVybjsKKworCWZuID0gc2FmZV9nZXRlbnYoIkNPTUVSUl9ERUJVR19GSUxFIik7CisJaWYgKGZuKQorCQlkZWJ1Z19mID0gZm9wZW4oZm4sICJhIik7CisJaWYgKCFkZWJ1Z19mKQorCQlkZWJ1Z19mID0gZm9wZW4oIi9kZXYvdHR5IiwgImEiKTsKKwlpZiAoZGVidWdfZikgeworCQlmZCA9IGZpbGVubyhkZWJ1Z19mKTsKKwkJaWYgKGZkID49IDApIHsKKwkJCWZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworCQkJaWYgKGZsYWdzID49IDApCisJCQkJZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisJCX0KKwl9IGVsc2UKKwkJZGVidWdfbWFzayA9IERFQlVHX0lOSVQ7CisKK30KKworLyoKKyAqIE5ldyBpbnRlcmZhY2UgcHJvdmlkZWQgYnkga3JiNSdzIGNvbV9lcnIgbGlicmFyeQorICovCitlcnJjb2RlX3QgYWRkX2Vycm9yX3RhYmxlKGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIGV0KQoreworCXN0cnVjdCBldF9saXN0ICplbDsKKworCWlmICghKGVsID0gKHN0cnVjdCBldF9saXN0ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKSkpCisJCXJldHVybiBFTk9NRU07CisKKwlpZiAoZXRfbGlzdF9sb2NrKCkgIT0gMCkgeworCQlmcmVlKGVsKTsKKwkJcmV0dXJuIGVycm5vOworCX0KKworCWVsLT50YWJsZSA9IGV0OworCWVsLT5uZXh0ID0gX2V0X2R5bmFtaWNfbGlzdDsKKwlfZXRfZHluYW1pY19saXN0ID0gZWw7CisKKwlpbml0X2RlYnVnKCk7CisJaWYgKGRlYnVnX21hc2sgJiBERUJVR19BRERSRU1PVkUpCisJCWZwcmludGYoZGVidWdfZiwgImFkZF9lcnJvcl90YWJsZTogJXMgKDB4JXApXG4iLAorCQkJZXJyb3JfdGFibGVfbmFtZShldC0+YmFzZSksCisJCQkoY29uc3Qgdm9pZCAqKSBldCk7CisKKwlldF9saXN0X3VubG9jaygpOworCXJldHVybiAwOworfQorCisvKgorICogTmV3IGludGVyZmFjZSBwcm92aWRlZCBieSBrcmI1J3MgY29tX2VyciBsaWJyYXJ5CisgKi8KK2VycmNvZGVfdCByZW1vdmVfZXJyb3JfdGFibGUoY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogZXQpCit7CisJc3RydWN0IGV0X2xpc3QgKmVsOworCXN0cnVjdCBldF9saXN0ICplbDIgPSAwOworCisJaWYgKGV0X2xpc3RfbG9jaygpICE9IDApCisJCXJldHVybiBFTk9FTlQ7CisKKwllbCA9IF9ldF9keW5hbWljX2xpc3Q7CisJaW5pdF9kZWJ1ZygpOworCXdoaWxlIChlbCkgeworCQlpZiAoZWwtPnRhYmxlLT5iYXNlID09IGV0LT5iYXNlKSB7CisJCQlpZiAoZWwyKQkvKiBOb3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLworCQkJCWVsMi0+bmV4dCA9IGVsLT5uZXh0OworCQkJZWxzZQorCQkJCV9ldF9keW5hbWljX2xpc3QgPSBlbC0+bmV4dDsKKwkJCSh2b2lkKSBmcmVlKGVsKTsKKwkJCWlmIChkZWJ1Z19tYXNrICYgREVCVUdfQUREUkVNT1ZFKQorCQkJCWZwcmludGYoZGVidWdfZiwKKwkJCQkJInJlbW92ZV9lcnJvcl90YWJsZTogJXMgKDB4JXApXG4iLAorCQkJCQllcnJvcl90YWJsZV9uYW1lKGV0LT5iYXNlKSwKKwkJCQkJKGNvbnN0IHZvaWQgKikgZXQpOworCQkJZXRfbGlzdF91bmxvY2soKTsKKwkJCXJldHVybiAwOworCQl9CisJCWVsMiA9IGVsOworCQllbCA9IGVsLT5uZXh0OworCX0KKwlpZiAoZGVidWdfbWFzayAmIERFQlVHX0FERFJFTU9WRSkKKwkJZnByaW50ZihkZWJ1Z19mLCAicmVtb3ZlX2Vycm9yX3RhYmxlIEZBSUxFRDogJXMgKDB4JXApXG4iLAorCQkJZXJyb3JfdGFibGVfbmFtZShldC0+YmFzZSksCisJCQkoY29uc3Qgdm9pZCAqKSBldCk7CisJZXRfbGlzdF91bmxvY2soKTsKKwlyZXR1cm4gRU5PRU5UOworfQorCisvKgorICogVmFyaWFudCBvZiB0aGUgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IEhlaW1kYWwncyBjb21fZXJyIGxpYnJhcnkKKyAqLwordm9pZAorYWRkX3RvX2Vycm9yX3RhYmxlKHN0cnVjdCBldF9saXN0ICpuZXdfdGFibGUpCit7CisJYWRkX2Vycm9yX3RhYmxlKG5ld190YWJsZS0+dGFibGUpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9lcnJvcl90YWJsZS5oIGIvZTJmc3Byb2dzL2xpYi9ldC9lcnJvcl90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTQ3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L2Vycm9yX3RhYmxlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg4IGJ5IHRoZSBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQgb2YgdGhlCisgKiBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZm5kZWYgX0VUX0gKKworc3RydWN0IGV0X2xpc3QgeworICAgIHN0cnVjdCBldF9saXN0ICpuZXh0OworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdCwgKl9ldF9keW5hbWljX2xpc3Q7CisKKyNkZWZpbmUJRVJSQ09ERV9SQU5HRQk4CS8qICMgb2YgYml0cyB0byBzaGlmdCB0YWJsZSBudW1iZXIgKi8KKyNkZWZpbmUJQklUU19QRVJfQ0hBUgk2CS8qICMgYml0cyB0byBzaGlmdCBwZXIgY2hhcmFjdGVyIGluIG5hbWUgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmVycm9yX3RhYmxlX25hbWUoZXJyY29kZV90IG51bSk7CisKKyNkZWZpbmUgX0VUX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9ldF9jLmF3ayBiL2UyZnNwcm9ncy9saWIvZXQvZXRfYy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljMzNiYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvZXRfYy5hd2sKQEAgLTAsMCArMSwyNjkgQEAKK0JFR0lOIHsgCitpZiAoIGxlbmd0aChvdXRmbikgPT0gMCkgeworCW91dGZuID0gb3V0ZmlsZQorfQorY2hhcl9zaGlmdD02NAorIyMgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XyI7CitjMm5bIkEiXT0xCitjMm5bIkIiXT0yCitjMm5bIkMiXT0zCitjMm5bIkQiXT00CitjMm5bIkUiXT01CitjMm5bIkYiXT02CitjMm5bIkciXT03CitjMm5bIkgiXT04CitjMm5bIkkiXT05CitjMm5bIkoiXT0xMAorYzJuWyJLIl09MTEKK2MyblsiTCJdPTEyCitjMm5bIk0iXT0xMworYzJuWyJOIl09MTQKK2MyblsiTyJdPTE1CitjMm5bIlAiXT0xNgorYzJuWyJRIl09MTcKK2MyblsiUiJdPTE4CitjMm5bIlMiXT0xOQorYzJuWyJUIl09MjAKK2MyblsiVSJdPTIxCitjMm5bIlYiXT0yMgorYzJuWyJXIl09MjMKK2MyblsiWCJdPTI0CitjMm5bIlkiXT0yNQorYzJuWyJaIl09MjYKK2MyblsiYSJdPTI3CitjMm5bImIiXT0yOAorYzJuWyJjIl09MjkKK2MyblsiZCJdPTMwCitjMm5bImUiXT0zMQorYzJuWyJmIl09MzIKK2MyblsiZyJdPTMzCitjMm5bImgiXT0zNAorYzJuWyJpIl09MzUKK2MyblsiaiJdPTM2CitjMm5bImsiXT0zNworYzJuWyJsIl09MzgKK2MyblsibSJdPTM5CitjMm5bIm4iXT00MAorYzJuWyJvIl09NDEKK2MyblsicCJdPTQyCitjMm5bInEiXT00MworYzJuWyJyIl09NDQKK2MyblsicyJdPTQ1CitjMm5bInQiXT00NgorYzJuWyJ1Il09NDcKK2MyblsidiJdPTQ4CitjMm5bInciXT00OQorYzJuWyJ4Il09NTAKK2MyblsieSJdPTUxCitjMm5bInoiXT01MgorYzJuWyIwIl09NTMKK2MyblsiMSJdPTU0CitjMm5bIjIiXT01NQorYzJuWyIzIl09NTYKK2MyblsiNCJdPTU3CitjMm5bIjUiXT01OAorYzJuWyI2Il09NTkKK2MyblsiNyJdPTYwCitjMm5bIjgiXT02MQorYzJuWyI5Il09NjIKK2MyblsiXyJdPTYzCit9CisvXiMvIHsgbmV4dCB9CisvXlsgXHRdKihlcnJvcl90YWJsZXxldClbIFx0XStbYS16QS1aXVthLXpBLVowLTlfXSsvIHsKKwl0YWJsZV9udW1iZXIgPSAwCisJbW9kX2Jhc2UgPSAxMDAwMDAwCisJaWYgKE5GID4gMikgeworCSAgICB0YWJsZV9uYW1lID0gJDMKKwkgICAgYmFzZV9uYW1lID0gJDIKKwl9IGVsc2UgeworCSAgICB0YWJsZV9uYW1lID0gJDIKKwkgICAgYmFzZV9uYW1lID0gdGFibGVfbmFtZQorCX0KKwlmb3IoaT0xOyBpPD1sZW5ndGgoYmFzZV9uYW1lKTsgaSsrKSB7CisJICAgIHRhYmxlX251bWJlcj0odGFibGVfbnVtYmVyKmNoYXJfc2hpZnQpK2MybltzdWJzdHIoYmFzZV9uYW1lLGksMSldCisJfQorCisJIyBXZSBzdGFydCBwbGF5aW5nICpfaGlnaCwgKmxvdyBnYW1lcyBoZXJlIGJlY2F1c2UgdGhlIHNvbWUKKwkjIGF3ayBwcm9ncmFtcyBkbyBub3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IHByZWNpc2lvbiAoc2lnaCkKKwl0YWJfYmFzZV9sb3cgPSB0YWJsZV9udW1iZXIgJSBtb2RfYmFzZQorCWlmICh0YWJfYmFzZV9sb3cgPCAwKSB7CisJCSMgV29yayBhcm91bmQgc3R1cGlkIGJ1ZyBpbiB0aGUgQVJNIGxpYm0KKwkJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICsgbW9kX2Jhc2UKKwl9CisJdGFiX2Jhc2VfaGlnaCA9IGludCh0YWJsZV9udW1iZXIgLyBtb2RfYmFzZSkKKwl0YWJfYmFzZV9zaWduID0gMTsKKworCSMgZmlndXJlIG91dDogdGFibGVfbnVtYmVyX2Jhc2U9dGFibGVfbnVtYmVyKjI1NgorCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyAqIDI1NgorCXRhYl9iYXNlX2hpZ2ggPSAodGFiX2Jhc2VfaGlnaCAqIDI1NikgKyBcCisJCQlpbnQodGFiX2Jhc2VfbG93IC8gbW9kX2Jhc2UpCisJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICUgbW9kX2Jhc2UKKwlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkjIFdvcmsgYXJvdW5kIHN0dXBpZCBidWcgaW4gdGhlIEFSTSBsaWJtCisJCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyArIG1vZF9iYXNlCisJfQorCisJaWYgKHRhYmxlX251bWJlciA+IDEyOCoyNTYqMjU2KSB7CisJCSMgZmlndXJlIG91dDogIHRhYmxlX251bWJlcl9iYXNlIC09IDI1NioyNTYqMjU2KjI1NgorCQkjIHN1Yl9oaWdoLCBzdWJfbG93IGlzIDI1NioyNTYqMjU2KjI1NgorCQlzdWJfbG93ID0gMjU2KjI1NioyNTYgJSBtb2RfYmFzZQorCQlzdWJfaGlnaCA9IGludCgyNTYqMjU2KjI1NiAvIG1vZF9iYXNlKQorCisJCXN1Yl9sb3cgPSBzdWJfbG93ICogMjU2CisJCXN1Yl9oaWdoID0gKHN1Yl9oaWdoICogMjU2KSArIGludChzdWJfbG93IC8gbW9kX2Jhc2UpCisJCXN1Yl9sb3cgPSBzdWJfbG93ICUgbW9kX2Jhc2UKKworCQl0YWJfYmFzZV9sb3cgPSBzdWJfbG93IC0gdGFiX2Jhc2VfbG93OworCQl0YWJfYmFzZV9oaWdoID0gc3ViX2hpZ2ggLSB0YWJfYmFzZV9oaWdoOworCQl0YWJfYmFzZV9zaWduID0gLTE7CisJCWlmICh0YWJfYmFzZV9sb3cgPCAwKSB7CisJCQl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKyBtb2RfYmFzZQorCQkJdGFiX2Jhc2VfaGlnaC0tCisJCX0KKwl9CisJcHJpbnQgIi8qIiA+IG91dGZpbGUKKwlwcmludCAiICogIiBvdXRmbiAiOiIgPiBvdXRmaWxlCisJcHJpbnQgIiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LiIgPiBvdXRmaWxlCisJcHJpbnQgIiAqLyIgPiBvdXRmaWxlCisKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiI2luY2x1ZGUgPHN0ZGxpYi5oPiIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgIiNkZWZpbmUgTl8oYSkgYSIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJcHJpbnQgInN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geyIgPiBvdXRmaWxlCisJdGFibGVfaXRlbV9jb3VudCA9IDAKK30KKworKGNvbnRpbnVhdGlvbiA9PSAxKSAmJiAoJDAgfiAvXFxbIFx0XSokLykgeworCXRleHQ9c3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKTsKKyMJcHJpbnRmICJcdFx0XCIlc1wiXG4iLCB0ZXh0ID4gb3V0ZmlsZQorCWNvbnRfYnVmPWNvbnRfYnVmIHRleHQ7Cit9CisKKyhjb250aW51YXRpb24gPT0gMSkgJiYgKCQwIH4gLyJbIFx0XSokLykgeworIwlwcmludGYgIlx0XHRcIiVzLFxuIiwgJDAgPiBvdXRmaWxlCisJcHJpbnRmICJcdE5fKCVzKSxcbiIsIGNvbnRfYnVmICQwID4gb3V0ZmlsZQorCWNvbnRpbnVhdGlvbiA9IDA7Cit9CisKKy9eWyBcdF0qKGVycm9yX2NvZGV8ZWMpWyBcdF0rW0EtWl8wLTldKyxbXiBcdF0vIHsKKwkjIEJlIHRvbGVyYW50IHRvIG1pc3Npbmcgd2hpdGVzcGFjZSBhZnRlciBgLCcgLi4uCisJc3ViKC8sLywgIiwgIikKK30KKworL15bIFx0XSooZXJyb3JfY29kZXxlYylbIFx0XStbQS1aXzAtOV0rLFsgXHRdKiQvIHsKKwl0YWJsZV9pdGVtX2NvdW50KysKKwlza2lwb25lPTEKKwluZXh0Cit9CisKKy9eWyBcdF0qKGVycm9yX2NvZGV8ZWMpWyBcdF0rW0EtWl8wLTldKyxbIFx0XSoiLioiWyBcdF0qJC8geworCXRleHQ9IiIKKwlmb3IgKGk9MzsgaTw9TkY7IGkrKykgeyAKKwkgICAgdGV4dCA9IHRleHQgRlMgJGkKKwl9CisJdGV4dD1zdWJzdHIodGV4dCwyLGxlbmd0aCh0ZXh0KS0xKTsKKwlwcmludGYgIlx0Tl8oJXMpLFxuIiwgdGV4dCA+IG91dGZpbGUKKwl0YWJsZV9pdGVtX2NvdW50KysKK30KKworL15bIFx0XSooZXJyb3JfY29kZXxlYylbIFx0XStbQS1aXzAtOV0rLFsgXHRdKiIuKlxcWyBcdF0qJC8geworCXRleHQ9IiIKKwlmb3IgKGk9MzsgaTw9TkY7IGkrKykgeyAKKwkgICAgdGV4dCA9IHRleHQgRlMgJGkKKwl9CisJdGV4dD1zdWJzdHIodGV4dCwyLGxlbmd0aCh0ZXh0KS0yKTsKKyMJcHJpbnRmICJcdCVzXCJcbiIsIHRleHQgPiBvdXRmaWxlCisJY29udF9idWY9dGV4dAorCXRhYmxlX2l0ZW1fY291bnQrKworCWNvbnRpbnVhdGlvbisrOworfQorCisvXlsgXHRdKiIuKlxcWyBcdF0qJC8geworCWlmIChza2lwb25lKSB7CisJICAgIHRleHQ9c3Vic3RyKCQwLDEsbGVuZ3RoKCQwKS0xKTsKKyMJICAgIHByaW50ZiAiXHQlc1wiXG4iLCB0ZXh0ID4gb3V0ZmlsZQorCSAgICBjb250X2J1Zj10ZXh0CisJICAgIGNvbnRpbnVhdGlvbisrOworCX0KKwlza2lwb25lPTAKK30KKworeyAKKwlpZiAoc2tpcG9uZSkgeworCSAgICBwcmludGYgIlx0Tl8oJXMpLFxuIiwgJDAgPiBvdXRmaWxlCisJfQorCXNraXBvbmU9MAorfQorCisvXlsgXHRdKihwcmVmaXgpJC8geworCXByZWZpeF9zdHIgPSAiIgorfQorCisvXlsgXHRdKihwcmVmaXgpWyBcdF0rW0EtWl8wLTldKy8geworCXByZWZpeF9zdHIgPSAkMiAiXyIKK30KKworL15bIFx0XSooaW5kZXgpWyBcdF0rW0EtWl8wLTldKy8geworCW5ld19pZHggPSAkMgorCWZvciAoaSA9IHRhYmxlX2l0ZW1fY291bnQgOyBpIDwgbmV3X2lkeDsgaSsrKSB7CisJCXByaW50ZiAiXHROXyhcIlJlc2VydmVkICVzIGVycm9yICglZClcIiksXG4iLCBcCisJCQl0YWJsZV9uYW1lLCB0YWJsZV9pdGVtX2NvdW50KysgPiBvdXRmaWxlCisJfQorfQorCitFTkQgeworCXByaW50ICIgICAgMCIgPiBvdXRmaWxlCisJcHJpbnQgIn07IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAic3RydWN0IGVycm9yX3RhYmxlIHsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgbG9uZyBiYXNlOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBpbnQgbl9tc2dzOyIgPiBvdXRmaWxlCisJcHJpbnQgIn07IiA+IG91dGZpbGUKKwlwcmludCAic3RydWN0IGV0X2xpc3QgeyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7IiA+IG91dGZpbGUKKwlwcmludCAifTsiID4gb3V0ZmlsZQorCXByaW50ICJleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OyIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCisJaWYgKHRhYl9iYXNlX2hpZ2ggPT0gMCkgeworCQlwcmludCAiY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0XyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlID0geyB0ZXh0LCAiIFwKKwkJc3ByaW50ZigiJWRMLCAlZCB9OyIsIHRhYl9iYXNlX3NpZ24qdGFiX2Jhc2VfbG93LCBcCisJCXRhYmxlX2l0ZW1fY291bnQpID4gb3V0ZmlsZQorCX0gZWxzZSB7CisJCXByaW50ICJjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGUgPSB7IHRleHQsICIgXAorCQlzcHJpbnRmKCIlZCUwNmRMLCAlZCB9OyIsIHRhYl9iYXNlX3NpZ24qdGFiX2Jhc2VfaGlnaCwgXAorCQl0YWJfYmFzZV9sb3csIHRhYmxlX2l0ZW1fY291bnQpID4gb3V0ZmlsZQorCX0KKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAic3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsiID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCXByaW50ICJ2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOyIgPiBvdXRmaWxlCisJcHJpbnQgInZvaWQgaW5pdGlhbGl6ZV8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZSh2b2lkKTsiID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCXByaW50ICJ2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGUodm9pZCkgeyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBpbml0aWFsaXplXyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlX3IoJl9ldF9saXN0KTsiID4gb3V0ZmlsZQorCXByaW50ICJ9IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiLyogRm9yIEhlaW1kYWwgY29tcGF0aWJpbGl0eSAqLyIgPiBvdXRmaWxlCisJcHJpbnQgInZvaWQgaW5pdGlhbGl6ZV8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkiID4gb3V0ZmlsZQorCXByaW50ICJ7IiA+IG91dGZpbGUKKwlwcmludCAiICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiICAgIGZvciAoZW5kID0gbGlzdCwgZXQgPSAqbGlzdDsgZXQ7IGVuZCA9ICZldC0+bmV4dCwgZXQgPSBldC0+bmV4dCkiID4gb3V0ZmlsZQorCXByaW50ICIgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkiID4gb3V0ZmlsZQorCXByaW50ICIgICAgICAgICAgICByZXR1cm47IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGV0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRfbGlzdCkpOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICBpZiAoZXQgPT0gMCkgeyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICAgICAgaWYgKCFsaW5rLnRhYmxlKSIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICAgICAgICAgIGV0ID0gJmxpbms7IiA+IG91dGZpbGUKKwlwcmludCAiICAgICAgICBlbHNlIiA+IG91dGZpbGUKKwlwcmludCAiICAgICAgICAgICAgcmV0dXJuOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICB9IiA+IG91dGZpbGUKKwlwcmludCAiICAgIGV0LT50YWJsZSA9ICZldF8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZTsiID4gb3V0ZmlsZQorCXByaW50ICIgICAgZXQtPm5leHQgPSAwOyIgPiBvdXRmaWxlCisJcHJpbnQgIiAgICAqZW5kID0gZXQ7IiA+IG91dGZpbGUKKwlwcmludCAifSIgPiBvdXRmaWxlCit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2V0X2guYXdrIGIvZTJmc3Byb2dzL2xpYi9ldC9ldF9oLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzM3MTIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9ldF9oLmF3awpAQCAtMCwwICsxLDIwNCBAQAorQkVHSU4geyAKK2lmICggbGVuZ3RoKG91dGZuKSA9PSAwKSB7CisJb3V0Zm4gPSBvdXRmaWxlCit9CitjaGFyX3NoaWZ0PTY0CisjIyAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlfIjsKK2MyblsiQSJdPTEKK2MyblsiQiJdPTIKK2MyblsiQyJdPTMKK2MyblsiRCJdPTQKK2MyblsiRSJdPTUKK2MyblsiRiJdPTYKK2MyblsiRyJdPTcKK2MyblsiSCJdPTgKK2MyblsiSSJdPTkKK2MyblsiSiJdPTEwCitjMm5bIksiXT0xMQorYzJuWyJMIl09MTIKK2MyblsiTSJdPTEzCitjMm5bIk4iXT0xNAorYzJuWyJPIl09MTUKK2MyblsiUCJdPTE2CitjMm5bIlEiXT0xNworYzJuWyJSIl09MTgKK2MyblsiUyJdPTE5CitjMm5bIlQiXT0yMAorYzJuWyJVIl09MjEKK2MyblsiViJdPTIyCitjMm5bIlciXT0yMworYzJuWyJYIl09MjQKK2MyblsiWSJdPTI1CitjMm5bIloiXT0yNgorYzJuWyJhIl09MjcKK2MyblsiYiJdPTI4CitjMm5bImMiXT0yOQorYzJuWyJkIl09MzAKK2MyblsiZSJdPTMxCitjMm5bImYiXT0zMgorYzJuWyJnIl09MzMKK2MyblsiaCJdPTM0CitjMm5bImkiXT0zNQorYzJuWyJqIl09MzYKK2MyblsiayJdPTM3CitjMm5bImwiXT0zOAorYzJuWyJtIl09MzkKK2MyblsibiJdPTQwCitjMm5bIm8iXT00MQorYzJuWyJwIl09NDIKK2MyblsicSJdPTQzCitjMm5bInIiXT00NAorYzJuWyJzIl09NDUKK2MyblsidCJdPTQ2CitjMm5bInUiXT00NworYzJuWyJ2Il09NDgKK2MyblsidyJdPTQ5CitjMm5bIngiXT01MAorYzJuWyJ5Il09NTEKK2MyblsieiJdPTUyCitjMm5bIjAiXT01MworYzJuWyIxIl09NTQKK2MyblsiMiJdPTU1CitjMm5bIjMiXT01NgorYzJuWyI0Il09NTcKK2MyblsiNSJdPTU4CitjMm5bIjYiXT01OQorYzJuWyI3Il09NjAKK2MyblsiOCJdPTYxCitjMm5bIjkiXT02MgorYzJuWyJfIl09NjMKK30KKy9eIy8geyBuZXh0IH0KKy9eWyBcdF0qKGVycm9yX3RhYmxlfGV0KVsgXHRdK1thLXpBLVpdW2EtekEtWjAtOV9dKy8geworCXRhYmxlX251bWJlciA9IDAKKwltb2RfYmFzZSA9IDEwMDAwMDAKKwlpZiAoTkYgPiAyKSB7CisJICAgIHRhYmxlX25hbWUgPSAkMworCSAgICBiYXNlX25hbWUgPSAkMgorCX0gZWxzZSB7CisJICAgIHRhYmxlX25hbWUgPSAkMgorCSAgICBiYXNlX25hbWUgPSB0YWJsZV9uYW1lCisJfQorCWZvcihpPTE7IGk8PWxlbmd0aChiYXNlX25hbWUpOyBpKyspIHsKKwkgICAgdGFibGVfbnVtYmVyPSh0YWJsZV9udW1iZXIqY2hhcl9zaGlmdCkrYzJuW3N1YnN0cihiYXNlX25hbWUsaSwxKV0KKwl9CisJIyBXZSBzdGFydCBwbGF5aW5nICpfaGlnaCwgKmxvdyBnYW1lcyBoZXJlIGJlY2F1c2UgdGhlIHNvbWUKKwkjIGF3ayBwcm9ncmFtcyBkbyBub3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IHByZWNpc2lvbiAoc2lnaCkKKwl0YWJfYmFzZV9sb3cgPSB0YWJsZV9udW1iZXIgJSBtb2RfYmFzZQorCWlmICh0YWJfYmFzZV9sb3cgPCAwKSB7CisJCSMgV29yayBhcm91bmQgc3R1cGlkIGJ1ZyBpbiB0aGUgQVJNIGxpYm0KKwkJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICsgbW9kX2Jhc2UKKwl9CisJdGFiX2Jhc2VfaGlnaCA9IGludCh0YWJsZV9udW1iZXIgLyBtb2RfYmFzZSkKKwl0YWJfYmFzZV9zaWduID0gMTsKKworCSMgZmlndXJlIG91dDogdGFibGVfbnVtYmVyX2Jhc2U9dGFibGVfbnVtYmVyKjI1NgorCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyAqIDI1NgorCXRhYl9iYXNlX2hpZ2ggPSAodGFiX2Jhc2VfaGlnaCAqIDI1NikgKyBcCisJCQlpbnQodGFiX2Jhc2VfbG93IC8gbW9kX2Jhc2UpCisJdGFiX2Jhc2VfbG93ID0gdGFiX2Jhc2VfbG93ICUgbW9kX2Jhc2UKKwlpZiAodGFiX2Jhc2VfbG93IDwgMCkgeworCQkjIFdvcmsgYXJvdW5kIHN0dXBpZCBidWcgaW4gdGhlIEFSTSBsaWJtCisJCXRhYl9iYXNlX2xvdyA9IHRhYl9iYXNlX2xvdyArIG1vZF9iYXNlCisJfQorCisJaWYgKHRhYmxlX251bWJlciA+IDEyOCoyNTYqMjU2KSB7CisJCSMgZmlndXJlIG91dDogIHRhYmxlX251bWJlcl9iYXNlIC09IDI1NioyNTYqMjU2KjI1NgorCQkjIHN1Yl9oaWdoLCBzdWJfbG93IGlzIDI1NioyNTYqMjU2KjI1NgorCQlzdWJfbG93ID0gMjU2KjI1NioyNTYgJSBtb2RfYmFzZQorCQlzdWJfaGlnaCA9IGludCgyNTYqMjU2KjI1NiAvIG1vZF9iYXNlKQorCisJCXN1Yl9sb3cgPSBzdWJfbG93ICogMjU2CisJCXN1Yl9oaWdoID0gKHN1Yl9oaWdoICogMjU2KSArIGludChzdWJfbG93IC8gbW9kX2Jhc2UpCisJCXN1Yl9sb3cgPSBzdWJfbG93ICUgbW9kX2Jhc2UKKworCQl0YWJfYmFzZV9sb3cgPSBzdWJfbG93IC0gdGFiX2Jhc2VfbG93OworCQl0YWJfYmFzZV9oaWdoID0gc3ViX2hpZ2ggLSB0YWJfYmFzZV9oaWdoOworCQl0YWJfYmFzZV9zaWduID0gLTE7CisJCWlmICh0YWJfYmFzZV9sb3cgPCAwKSB7CisJCQl0YWJfYmFzZV9sb3cgPSB0YWJfYmFzZV9sb3cgKyBtb2RfYmFzZQorCQkJdGFiX2Jhc2VfaGlnaC0tCisJCX0KKwl9CisJcHJlZml4X3N0ciA9ICIiCisJY3Vycl9pZHggPSAwCisJY3Vycl9sb3cgPSB0YWJfYmFzZV9sb3cKKwljdXJyX2hpZ2ggPSB0YWJfYmFzZV9oaWdoCisJY3Vycl9zaWduID0gdGFiX2Jhc2Vfc2lnbgorCXByaW50ICIvKiIgPiBvdXRmaWxlCisJcHJpbnQgIiAqICIgb3V0Zm4gIjoiID4gb3V0ZmlsZQorCXByaW50ICIgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4iID4gb3V0ZmlsZQorCXByaW50ICIgKi8iID4gb3V0ZmlsZQorCXByaW50ICIiID4gb3V0ZmlsZQorCXByaW50ICIjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPiIgPiBvdXRmaWxlCisJcHJpbnQgIiIgPiBvdXRmaWxlCit9CisKKy9eWyBcdF0qKGVycm9yX2NvZGV8ZWMpWyBcdF0rW0EtWl8wLTldKywvIHsKKwkjIEJlIHRvbGVyYW50IHRvIG1pc3Npbmcgd2hpdGVzcGFjZSBhZnRlciBgLCcgLi4uCisJc3ViKC8sLywgIiwgIikKKworCXRhZz1wcmVmaXhfc3RyIHN1YnN0cigkMiwxLGxlbmd0aCgkMiktMSkKKwlpZiAoY3Vycl9oaWdoID09IDApIHsKKwkJcHJpbnRmICIjZGVmaW5lICUtNDBzICglZEwpXG4iLCB0YWcsIFwKKwkJCWN1cnJfc2lnbipjdXJyX2xvdyA+IG91dGZpbGUKKwl9IGVsc2UgeworCQlwcmludGYgIiNkZWZpbmUgJS00MHMgKCVkJTA2ZEwpXG4iLCB0YWcsIGN1cnJfaGlnaCpjdXJyX3NpZ24sIFwKKwkJCWN1cnJfbG93ID4gb3V0ZmlsZQorCX0KKwljdXJyX2xvdyArPSBjdXJyX3NpZ247CisJY3Vycl9pZHgrKzsKKwlpZiAoY3Vycl9sb3cgPj0gbW9kX2Jhc2UpIHsKKwkJY3Vycl9sb3cgLT0gbW9kX2Jhc2U7CisJCWN1cnJfaGlnaCsrCisJfQorCWlmIChjdXJyX2xvdyA8IDApIHsKKwkJY3VyX2xvdyArPSBtb2RfYmFzZQorCQljdXJfaGlnaC0tCisJfQorfQorCisvXlsgXHRdKihwcmVmaXgpJC8geworCXByZWZpeF9zdHIgPSAiIgorfQorCisvXlsgXHRdKihwcmVmaXgpWyBcdF0rW0EtWl8wLTldKy8geworCXByZWZpeF9zdHIgPSAkMiAiXyIKK30KKworL15bIFx0XSooaW5kZXgpWyBcdF0rW0EtWl8wLTldKy8geworCW5ld19pZHggPSAkMgorCWN1cnJfbG93ICs9IGN1cnJfc2lnbiAqIChuZXdfaWR4IC0gY3Vycl9pZHgpCisJY3Vycl9pZHggPSBuZXdfaWR4CisJaWYgKGN1cnJfbG93ID49IG1vZF9iYXNlKSB7CisJCWN1cnJfbG93IC09IG1vZF9iYXNlOworCQljdXJyX2hpZ2grKworCX0KKwlpZiAoY3Vycl9sb3cgPCAwKSB7CisJCWN1cl9sb3cgKz0gbW9kX2Jhc2UKKwkJY3VyX2hpZ2gtLQorCX0KK30KKworCitFTkQgeworCXByaW50ICJleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0XyIgdGFibGVfbmFtZSAiX2Vycm9yX3RhYmxlOyIgPiBvdXRmaWxlCisJcHJpbnQgImV4dGVybiB2b2lkIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGUodm9pZCk7IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBIZWltZGFsICovIiA+IG91dGZpbGUKKwlwcmludCAiZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV8iIHRhYmxlX25hbWUgIl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlpZiAodGFiX2Jhc2VfaGlnaCA9PSAwKSB7CisJCXByaW50ICIjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0VfIiB0YWJsZV9uYW1lICIgKCIgXAorCQkJc3ByaW50ZigiJWQiLCB0YWJfYmFzZV9zaWduKnRhYl9iYXNlX2xvdykgXAorCQkJIkwpIiA+IG91dGZpbGUKKwl9IGVsc2UgeworCQlwcmludCAiI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFXyIgdGFibGVfbmFtZSAiICgiIFwKKwkJCXNwcmludGYoIiVkJTA2ZCIsIHRhYl9iYXNlX3NpZ24qdGFiX2Jhc2VfaGlnaCwgXAorCQkJdGFiX2Jhc2VfbG93KSAiTCkiID4gb3V0ZmlsZQorCX0KKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludCAiLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4uLiAqLyIgPiBvdXRmaWxlCisJcHJpbnQgIiNkZWZpbmUgaW5pdF8iIHRhYmxlX25hbWUgIl9lcnJfdGJsIGluaXRpYWxpemVfIiB0YWJsZV9uYW1lICJfZXJyb3JfdGFibGUiID4gb3V0ZmlsZQorCXByaW50ICIjZGVmaW5lICIgdGFibGVfbmFtZSAiX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0VfIiB0YWJsZV9uYW1lID4gb3V0ZmlsZQorfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC9ldF9uYW1lLmMgYi9lMmZzcHJvZ3MvbGliL2V0L2V0X25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA3OTBlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9ldF9uYW1lLmMKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiY29tX2Vyci5oIgorI2luY2x1ZGUgImVycm9yX3RhYmxlLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY2hhcl9zZXRbXSA9CisJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XyI7CisKK3N0YXRpYyBjaGFyIGJ1Zls2XTsKKworY29uc3QgY2hhciAqIGVycm9yX3RhYmxlX25hbWUoZXJyY29kZV90IG51bSkKK3sKKyAgICBpbnQgY2g7CisgICAgaW50IGk7CisgICAgY2hhciAqcDsKKworICAgIC8qIG51bSA9IGFhIGFhYSBhYmIgYmJiIGJjYyBjY2MgY2RkIGRkZCBkPz8gPz8/ID8/PyAqLworICAgIHAgPSBidWY7CisgICAgbnVtID4+PSBFUlJDT0RFX1JBTkdFOworICAgIC8qIG51bSA9ID8/ID8/PyA/Pz8gYWFhIGFhYSBiYmIgYmJiIGNjYyBjY2MgZGRkIGRkZCAqLworICAgIG51bSAmPSAwNzc3Nzc3NzdMOworICAgIC8qIG51bSA9IDAwIDAwMCAwMDAgYWFhIGFhYSBiYmIgYmJiIGNjYyBjY2MgZGRkIGRkZCAqLworICAgIGZvciAoaSA9IDQ7IGkgPj0gMDsgaS0tKSB7CisJY2ggPSAoaW50KSgobnVtID4+IEJJVFNfUEVSX0NIQVIgKiBpKSAmICgoMSA8PCBCSVRTX1BFUl9DSEFSKSAtIDEpKTsKKwlpZiAoY2ggIT0gMCkKKwkgICAgKnArKyA9IGNoYXJfc2V0W2NoLTFdOworICAgIH0KKyAgICAqcCA9ICdcMCc7CisgICAgcmV0dXJuKGJ1Zik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L2luaXRfZXQuYyBiL2UyZnNwcm9ncy9saWIvZXQvaW5pdF9ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMjdkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L2luaXRfZXQuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogJEhlYWRlciQKKyAqICRTb3VyY2UkCisgKiAkTG9ja2VyJAorICoKKyAqIENvcHlyaWdodCAxOTg2LCAxOTg3LCAxOTg4IGJ5IE1JVCBJbmZvcm1hdGlvbiBTeXN0ZW1zIGFuZAorICoJdGhlIE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXJyb3JfdGFibGUuaCIKKworc3RydWN0IGZvb2JhciB7CisgICAgc3RydWN0IGV0X2xpc3QgZXRsOworICAgIHN0cnVjdCBlcnJvcl90YWJsZSBldDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqIF9ldF9keW5hbWljX2xpc3Q7CisKK2ludCBpbml0X2Vycm9yX3RhYmxlKGNvbnN0IGNoYXIgKiBjb25zdCAqbXNncywgbG9uZyBiYXNlLCBpbnQgY291bnQpCit7CisgICAgc3RydWN0IGZvb2JhciAqIG5ld19ldDsKKworICAgIGlmICghYmFzZSB8fCAhY291bnQgfHwgIW1zZ3MpCisJcmV0dXJuIDA7CisKKyAgICBuZXdfZXQgPSAoc3RydWN0IGZvb2JhciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb29iYXIpKTsKKyAgICBpZiAoIW5ld19ldCkKKwlyZXR1cm4gRU5PTUVNOwkvKiBvb3BzICovCisgICAgbmV3X2V0LT5ldGwudGFibGUgPSAmbmV3X2V0LT5ldDsKKyAgICBuZXdfZXQtPmV0Lm1zZ3MgPSBtc2dzOworICAgIG5ld19ldC0+ZXQuYmFzZSA9IGJhc2U7CisgICAgbmV3X2V0LT5ldC5uX21zZ3M9IGNvdW50OworCisgICAgbmV3X2V0LT5ldGwubmV4dCA9IF9ldF9keW5hbWljX2xpc3Q7CisgICAgX2V0X2R5bmFtaWNfbGlzdCA9ICZuZXdfZXQtPmV0bDsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvaW50ZXJuYWwuaCBiL2UyZnNwcm9ncy9saWIvZXQvaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZmMzczCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBpbnRlcm5hbCBpbmNsdWRlIGZpbGUgZm9yIGNvbV9lcnIgcGFja2FnZQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZkZWYgTkVFRF9TWVNfRVJSTElTVAorZXh0ZXJuIGNoYXIgY29uc3QgKiBjb25zdCBzeXNfZXJybGlzdFtdOworZXh0ZXJuIGNvbnN0IGludCBzeXNfbmVycjsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2NvbnRpbnVhdGlvbi5jIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2NvbnRpbnVhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDc4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGNvbnRpbnVhdGlvbi5jOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5fKGEpIGEKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0W10gPSB7CisJTl8oIk5ldyBwYXNzd29yZCB3YXMgZm91bmQgaW4gYSBkaWN0aW9uYXJ5IG9mIHBvc3NpYmxlIHBhc3N3b3JkcyBhbmRcbnRoZXJlZm9yZSBtYXkgYmUgZWFzaWx5IGd1ZXNzZWQuIFBsZWFzZSBjaG9vc2UgYW5vdGhlciBwYXNzd29yZC5cblNlZSB0aGUgb3ZwYXNzd2QgbWFuIHBhZ2UgZm9yIGhlbHAgaW4gY2hvb3NpbmcgYSBnb29kIHBhc3N3b3JkLiIpLAorICAgIDAKK307CisKK3N0cnVjdCBlcnJvcl90YWJsZSB7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsKKyAgICBsb25nIGJhc2U7CisgICAgaW50IG5fbXNnczsKK307CitzdHJ1Y3QgZXRfbGlzdCB7CisgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7CisgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsKKworY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X292a19lcnJvcl90YWJsZSA9IHsgdGV4dCwgNDM3ODc1MjBMLCAxIH07CisKK3N0YXRpYyBzdHJ1Y3QgZXRfbGlzdCBsaW5rID0geyAwLCAwIH07CisKK3ZvaWQgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX292a19lcnJvcl90YWJsZSh2b2lkKTsKKwordm9pZCBpbml0aWFsaXplX292a19lcnJvcl90YWJsZSh2b2lkKSB7CisgICAgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfb3ZrX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KQoreworICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7CisKKyAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpCisgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsKKyAgICBpZiAoZXQgPT0gMCkgeworICAgICAgICBpZiAoIWxpbmsudGFibGUpCisgICAgICAgICAgICBldCA9ICZsaW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV0LT50YWJsZSA9ICZldF9vdmtfZXJyb3JfdGFibGU7CisgICAgZXQtPm5leHQgPSAwOworICAgICplbmQgPSBldDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9jb250aW51YXRpb24uZXQgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDE2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmV0CkBAIC0wLDAgKzEsOCBAQAorCWVycm9yX3RhYmxlCW92aworCitlcnJvcl9jb2RlIENIUEFTU19VVElMX1BBU1NXT1JEX0lOX0RJQ1RJT05BUlksCisiTmV3IHBhc3N3b3JkIHdhcyBmb3VuZCBpbiBhIGRpY3Rpb25hcnkgb2YgcG9zc2libGUgcGFzc3dvcmRzIGFuZFxuXAordGhlcmVmb3JlIG1heSBiZSBlYXNpbHkgZ3Vlc3NlZC4gUGxlYXNlIGNob29zZSBhbm90aGVyIHBhc3N3b3JkLlxuXAorU2VlIHRoZSBvdnBhc3N3ZCBtYW4gcGFnZSBmb3IgaGVscCBpbiBjaG9vc2luZyBhIGdvb2QgcGFzc3dvcmQuIgorCisJZW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmggYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvY29udGludWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmZTYwMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9jb250aW51YXRpb24uaApAQCAtMCwwICsxLDE5IEBACisvKgorICogY29udGludWF0aW9uLmg6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorCisjZGVmaW5lIENIUEFTU19VVElMX1BBU1NXT1JEX0lOX0RJQ1RJT05BUlkgICAgICAgKDQzNzg3NTIwTCkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfb3ZrX2Vycm9yX3RhYmxlOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGUodm9pZCk7CisKKy8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbCAqLworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9vdmtfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOworCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0Vfb3ZrICg0Mzc4NzUyMEwpCisKKy8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuLi4gKi8KKyNkZWZpbmUgaW5pdF9vdmtfZXJyX3RibCBpbml0aWFsaXplX292a19lcnJvcl90YWJsZQorI2RlZmluZSBvdmtfZXJyX2Jhc2UgRVJST1JfVEFCTEVfQkFTRV9vdmsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsLmMgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmU0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogaGVpbWRhbC5jOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIE5fKGEpIGEKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0W10gPSB7CisJTl8oIktlcmJlcm9zIHN1Y2Nlc3NmdWwiKSwKKwlOXygiS2VyYmVyb3MgcHJpbmNpcGFsIGV4cGlyZWQiKSwKKwlOXygiS2VyYmVyb3Mgc2VydmljZSBleHBpcmVkIiksCisJTl8oIktlcmJlcm9zIGF1dGggZXhwaXJlZCIpLAorCU5fKCJJbmNvcnJlY3Qga2VyYmVyb3MgbWFzdGVyIGtleSB2ZXJzaW9uIiksCisJTl8oIkluY29ycmVjdCBrZXJiZXJvcyBtYXN0ZXIga2V5IHZlcnNpb24iKSwKKwlOXygiSW5jb3JyZWN0IGtlcmJlcm9zIG1hc3RlciBrZXkgdmVyc2lvbiIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogYnl0ZSBvcmRlciB1bmtub3duIiksCisJTl8oIktlcmJlcm9zIHByaW5jaXBhbCB1bmtub3duIiksCisJTl8oIktlcmJlcm9zIHByaW5jaXBhbCBub3QgdW5pcXVlIiksCisJTl8oIktlcmJlcm9zIHByaW5jaXBhbCBoYXMgbnVsbCBrZXkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxMSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxMikiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxMykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxNCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxNSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxNikiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxNykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxOCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICgxOSkiKSwKKwlOXygiR2VuZXJpYyBlcnJvciBmcm9tIEtlcmJlcm9zIEtEQyIpLAorCU5fKCJDYW4ndCByZWFkIEtlcmJlcm9zIHRpY2tldCBmaWxlIiksCisJTl8oIkNhbid0IGZpbmQgS2VyYmVyb3MgdGlja2V0IG9yIFRHVCIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDIzKSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDI0KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDI1KSIpLAorCU5fKCJLZXJiZXJvcyBUR1QgRXhwaXJlZCIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDI3KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDI4KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDI5KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDMwKSIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogQ2FuJ3QgZGVjb2RlIGF1dGhlbnRpY2F0b3IiKSwKKwlOXygiS2VyYmVyb3MgdGlja2V0IGV4cGlyZWQiKSwKKwlOXygiS2VyYmVyb3MgdGlja2V0IG5vdCB5ZXQgdmFsaWQiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IFJlcGVhdGVkIHJlcXVlc3QiKSwKKwlOXygiVGhlIGtlcmJlcm9zIHRpY2tldCBpc24ndCBmb3IgdXMiKSwKKwlOXygiS2VyYmVyb3MgcmVxdWVzdCBpbmNvbnNpc3RlbnQiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IGRlbHRhX3QgdG9vIGJpZyIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogaW5jb3JyZWN0IG5ldCBhZGRyZXNzIiksCisJTl8oIktlcmJlcm9zIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2giKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IGludmFsaWQgbXNnIHR5cGUiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IG1lc3NhZ2Ugc3RyZWFtIG1vZGlmaWVkIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBtZXNzYWdlIG91dCBvZiBvcmRlciIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogdW5hdXRob3JpemVkIHJlcXVlc3QiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0NCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0NSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0NikiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0NykiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0OCkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg0OSkiKSwKKwlOXygiUmVzZXJ2ZWQga3JiIGVycm9yICg1MCkiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IGN1cnJlbnQgUFcgaXMgbnVsbCIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogSW5jb3JyZWN0IGN1cnJlbnQgcGFzc3dvcmQiKSwKKwlOXygiS2VyYmVyb3MgcHJvdG9jb2wgZXJyb3IiKSwKKwlOXygiRXJyb3IgcmV0dXJuZWQgYnkgS2VyYmVyb3MgS0RDIiksCisJTl8oIk51bGwgS2VyYmVyb3MgdGlja2V0IHJldHVybmVkIGJ5IEtEQyIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogUmV0cnkgY291bnQgZXhjZWVkZWQiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IENhbid0IHNlbmQgcmVxdWVzdCIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDU4KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDU5KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDYwKSIpLAorCU5fKCJLZXJiZXJvcyBlcnJvcjogbm90IGFsbCB0aWNrZXRzIHJldHVybmVkIiksCisJTl8oIktlcmJlcm9zIGVycm9yOiBpbmNvcnJlY3QgcGFzc3dvcmQiKSwKKwlOXygiS2VyYmVyb3MgZXJyb3I6IFByb3RvY29sIEVycm9yIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjQpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjUpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjYpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjcpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjgpIiksCisJTl8oIlJlc2VydmVkIGtyYiBlcnJvciAoNjkpIiksCisJTl8oIk90aGVyIGVycm9yIiksCisJTl8oIkRvbid0IGhhdmUgS2VyYmVyb3MgdGlja2V0LWdyYW50aW5nIHRpY2tldCIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDcyKSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDczKSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDc0KSIpLAorCU5fKCJSZXNlcnZlZCBrcmIgZXJyb3IgKDc1KSIpLAorCU5fKCJObyB0aWNrZXQgZmlsZSBmb3VuZCIpLAorCU5fKCJDb3VsZG4ndCBhY2Nlc3MgdGlja2V0IGZpbGUiKSwKKwlOXygiQ291bGRuJ3QgbG9jayB0aWNrZXQgZmlsZSIpLAorCU5fKCJCYWQgdGlja2V0IGZpbGUgZm9ybWF0IiksCisJTl8oInRmX2luaXQgbm90IGNhbGxlZCBmaXJzdCIpLAorCU5fKCJCYWQgS2VyYmVyb3MgbmFtZSBmb3JtYXQiKSwKKyAgICAwCit9OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisgICAgbG9uZyBiYXNlOworICAgIGludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3QgeworICAgIHN0cnVjdCBldF9saXN0ICpuZXh0OworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIHRhYmxlOworfTsKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqX2V0X2xpc3Q7CisKK2NvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9rcmJfZXJyb3JfdGFibGUgPSB7IHRleHQsIDM5NTI1Mzc2TCwgODIgfTsKKworc3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsKKwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7Cit2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlKHZvaWQpOworCit2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlKHZvaWQpIHsKKyAgICBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZV9yKCZfZXRfbGlzdCk7Cit9CisKKy8qIEZvciBIZWltZGFsIGNvbXBhdGliaWxpdHkgKi8KK3ZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpCit7CisgICAgc3RydWN0IGV0X2xpc3QgKmV0LCAqKmVuZDsKKworICAgIGZvciAoZW5kID0gbGlzdCwgZXQgPSAqbGlzdDsgZXQ7IGVuZCA9ICZldC0+bmV4dCwgZXQgPSBldC0+bmV4dCkKKyAgICAgICAgaWYgKGV0LT50YWJsZS0+bXNncyA9PSB0ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgIGV0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRfbGlzdCkpOworICAgIGlmIChldCA9PSAwKSB7CisgICAgICAgIGlmICghbGluay50YWJsZSkKKyAgICAgICAgICAgIGV0ID0gJmxpbms7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXQtPnRhYmxlID0gJmV0X2tyYl9lcnJvcl90YWJsZTsKKyAgICBldC0+bmV4dCA9IDA7CisgICAgKmVuZCA9IGV0OworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuZXQgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGNlMTkyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuZXQKQEAgLTAsMCArMSw2NSBAQAorIwlDb3B5cmlnaHQgMTk4NywxOTg4IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyMKKyMJRm9yIGNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlCisjCSJtaXQtY29weXJpZ2h0LmgiLgorIyAKKyMgVGhpcyBtaWdodCBsb29rIGxpa2UgYSBjb21fZXJyIGZpbGUsIGJ1dCBpcyBub3QKKyMKK2lkICIkSWQ6IGtyYl9lcnIuZXQsdiAxLjcgMTk5OC8wMy8yOSAxNDoxOTo1MiBiZyBFeHAgJCIKKworZXJyb3JfdGFibGUga3JiCisKK3ByZWZpeCBLUkJFVAorZWMgS1NVQ0NFU1MsCQkiS2VyYmVyb3Mgc3VjY2Vzc2Z1bCIKK2VjIEtEQ19OQU1FX0VYUCwJIktlcmJlcm9zIHByaW5jaXBhbCBleHBpcmVkIgorZWMgS0RDX1NFUlZJQ0VfRVhQLAkiS2VyYmVyb3Mgc2VydmljZSBleHBpcmVkIgorZWMgS0RDX0FVVEhfRVhQLAkiS2VyYmVyb3MgYXV0aCBleHBpcmVkIgorZWMgS0RDX1BLVF9WRVIsCQkiSW5jb3JyZWN0IGtlcmJlcm9zIG1hc3RlciBrZXkgdmVyc2lvbiIKK2VjIEtEQ19QX01LRVlfVkVSLAkiSW5jb3JyZWN0IGtlcmJlcm9zIG1hc3RlciBrZXkgdmVyc2lvbiIKK2VjIEtEQ19TX01LRVlfVkVSLAkiSW5jb3JyZWN0IGtlcmJlcm9zIG1hc3RlciBrZXkgdmVyc2lvbiIKK2VjIEtEQ19CWVRFX09SREVSLAkiS2VyYmVyb3MgZXJyb3I6IGJ5dGUgb3JkZXIgdW5rbm93biIKK2VjIEtEQ19QUl9VTktOT1dOLAkiS2VyYmVyb3MgcHJpbmNpcGFsIHVua25vd24iCitlYyBLRENfUFJfTl9VTklRVUUsCSJLZXJiZXJvcyBwcmluY2lwYWwgbm90IHVuaXF1ZSIKK2VjIEtEQ19OVUxMX0tFWSwJIktlcmJlcm9zIHByaW5jaXBhbCBoYXMgbnVsbCBrZXkiCitpbmRleCAyMAorZWMgS0RDX0dFTl9FUlIsCQkiR2VuZXJpYyBlcnJvciBmcm9tIEtlcmJlcm9zIEtEQyIKK2VjIEdDX1RLRklMLAkJIkNhbid0IHJlYWQgS2VyYmVyb3MgdGlja2V0IGZpbGUiCitlYyBHQ19OT1RLVCwJCSJDYW4ndCBmaW5kIEtlcmJlcm9zIHRpY2tldCBvciBUR1QiCitpbmRleCAyNgorZWMgTUtfQVBfVEdURVhQLAkiS2VyYmVyb3MgVEdUIEV4cGlyZWQiCitpbmRleCAzMQorZWMgUkRfQVBfVU5ERUMsCQkiS2VyYmVyb3MgZXJyb3I6IENhbid0IGRlY29kZSBhdXRoZW50aWNhdG9yIgorZWMgUkRfQVBfRVhQLAkJIktlcmJlcm9zIHRpY2tldCBleHBpcmVkIgorZWMgUkRfQVBfTllWLAkJIktlcmJlcm9zIHRpY2tldCBub3QgeWV0IHZhbGlkIgorZWMgUkRfQVBfUkVQRUFULAkiS2VyYmVyb3MgZXJyb3I6IFJlcGVhdGVkIHJlcXVlc3QiCitlYyBSRF9BUF9OT1RfVVMsCSJUaGUga2VyYmVyb3MgdGlja2V0IGlzbid0IGZvciB1cyIKK2VjIFJEX0FQX0lOQ09OLAkJIktlcmJlcm9zIHJlcXVlc3QgaW5jb25zaXN0ZW50IgorZWMgUkRfQVBfVElNRSwJCSJLZXJiZXJvcyBlcnJvcjogZGVsdGFfdCB0b28gYmlnIgorZWMgUkRfQVBfQkFERCwJCSJLZXJiZXJvcyBlcnJvcjogaW5jb3JyZWN0IG5ldCBhZGRyZXNzIgorZWMgUkRfQVBfVkVSU0lPTiwJIktlcmJlcm9zIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2giCitlYyBSRF9BUF9NU0dfVFlQRSwJIktlcmJlcm9zIGVycm9yOiBpbnZhbGlkIG1zZyB0eXBlIgorZWMgUkRfQVBfTU9ESUZJRUQsCSJLZXJiZXJvcyBlcnJvcjogbWVzc2FnZSBzdHJlYW0gbW9kaWZpZWQiCitlYyBSRF9BUF9PUkRFUiwJCSJLZXJiZXJvcyBlcnJvcjogbWVzc2FnZSBvdXQgb2Ygb3JkZXIiCitlYyBSRF9BUF9VTkFVVEhPUiwJIktlcmJlcm9zIGVycm9yOiB1bmF1dGhvcml6ZWQgcmVxdWVzdCIKK2luZGV4IDUxCitlYyBHVF9QV19OVUxMLAkJIktlcmJlcm9zIGVycm9yOiBjdXJyZW50IFBXIGlzIG51bGwiCitlYyBHVF9QV19CQURQVywJCSJLZXJiZXJvcyBlcnJvcjogSW5jb3JyZWN0IGN1cnJlbnQgcGFzc3dvcmQiCitlYyBHVF9QV19QUk9ULAkJIktlcmJlcm9zIHByb3RvY29sIGVycm9yIgorZWMgR1RfUFdfS0RDRVJSLAkiRXJyb3IgcmV0dXJuZWQgYnkgS2VyYmVyb3MgS0RDIgorZWMgR1RfUFdfTlVMTFRLVCwJIk51bGwgS2VyYmVyb3MgdGlja2V0IHJldHVybmVkIGJ5IEtEQyIKK2VjIFNLRENfUkVUUlksCQkiS2VyYmVyb3MgZXJyb3I6IFJldHJ5IGNvdW50IGV4Y2VlZGVkIgorZWMgU0tEQ19DQU5ULAkJIktlcmJlcm9zIGVycm9yOiBDYW4ndCBzZW5kIHJlcXVlc3QiCitpbmRleCA2MQorZWMgSU5US19XX05PVEFMTCwJIktlcmJlcm9zIGVycm9yOiBub3QgYWxsIHRpY2tldHMgcmV0dXJuZWQiCitlYyBJTlRLX0JBRFBXLAkJIktlcmJlcm9zIGVycm9yOiBpbmNvcnJlY3QgcGFzc3dvcmQiCitlYyBJTlRLX1BST1QsCQkiS2VyYmVyb3MgZXJyb3I6IFByb3RvY29sIEVycm9yIgoraW5kZXggNzAKK2VjIElOVEtfRVJSLAkJIk90aGVyIGVycm9yIgorZWMgQURfTk9UR1QsCQkiRG9uJ3QgaGF2ZSBLZXJiZXJvcyB0aWNrZXQtZ3JhbnRpbmcgdGlja2V0IgoraW5kZXggNzYKK2VjIE5PX1RLVF9GSUwsCQkiTm8gdGlja2V0IGZpbGUgZm91bmQiCitlYyBUS1RfRklMX0FDQywJCSJDb3VsZG4ndCBhY2Nlc3MgdGlja2V0IGZpbGUiCitlYyBUS1RfRklMX0xDSywJCSJDb3VsZG4ndCBsb2NrIHRpY2tldCBmaWxlIgorZWMgVEtUX0ZJTF9GTVQsCQkiQmFkIHRpY2tldCBmaWxlIGZvcm1hdCIKK2VjIFRLVF9GSUxfSU5JLAkJInRmX2luaXQgbm90IGNhbGxlZCBmaXJzdCIKK2VjIEtOQU1FX0ZNVCwJCSJCYWQgS2VyYmVyb3MgbmFtZSBmb3JtYXQiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbC5oIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzk0MzU0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogaGVpbWRhbC5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBLUkJFVF9LU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3NkwpCisjZGVmaW5lIEtSQkVUX0tEQ19OQU1FX0VYUCAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzc3TCkKKyNkZWZpbmUgS1JCRVRfS0RDX1NFUlZJQ0VfRVhQICAgICAgICAgICAgICAgICAgICAoMzk1MjUzNzhMKQorI2RlZmluZSBLUkJFVF9LRENfQVVUSF9FWFAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3OUwpCisjZGVmaW5lIEtSQkVUX0tEQ19QS1RfVkVSICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgwTCkKKyNkZWZpbmUgS1JCRVRfS0RDX1BfTUtFWV9WRVIgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODFMKQorI2RlZmluZSBLUkJFVF9LRENfU19NS0VZX1ZFUiAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4MkwpCisjZGVmaW5lIEtSQkVUX0tEQ19CWVRFX09SREVSICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgzTCkKKyNkZWZpbmUgS1JCRVRfS0RDX1BSX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODRMKQorI2RlZmluZSBLUkJFVF9LRENfUFJfTl9VTklRVUUgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4NUwpCisjZGVmaW5lIEtSQkVUX0tEQ19OVUxMX0tFWSAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg2TCkKKyNkZWZpbmUgS1JCRVRfS0RDX0dFTl9FUlIgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTZMKQorI2RlZmluZSBLUkJFVF9HQ19US0ZJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5N0wpCisjZGVmaW5lIEtSQkVUX0dDX05PVEtUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzk4TCkKKyNkZWZpbmUgS1JCRVRfTUtfQVBfVEdURVhQICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MDJMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9VTkRFQyAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQwN0wpCisjZGVmaW5lIEtSQkVUX1JEX0FQX0VYUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDA4TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfTllWICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MDlMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9SRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxMEwpCisjZGVmaW5lIEtSQkVUX1JEX0FQX05PVF9VUyAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDExTCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfSU5DT04gICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTJMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxM0wpCisjZGVmaW5lIEtSQkVUX1JEX0FQX0JBREQgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDE0TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MTVMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9NU0dfVFlQRSAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxNkwpCisjZGVmaW5lIEtSQkVUX1JEX0FQX01PRElGSUVEICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDE3TCkKKyNkZWZpbmUgS1JCRVRfUkRfQVBfT1JERVIgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MThMKQorI2RlZmluZSBLUkJFVF9SRF9BUF9VTkFVVEhPUiAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQxOUwpCisjZGVmaW5lIEtSQkVUX0dUX1BXX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDI3TCkKKyNkZWZpbmUgS1JCRVRfR1RfUFdfQkFEUFcgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MjhMKQorI2RlZmluZSBLUkJFVF9HVF9QV19QUk9UICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQyOUwpCisjZGVmaW5lIEtSQkVUX0dUX1BXX0tEQ0VSUiAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDMwTCkKKyNkZWZpbmUgS1JCRVRfR1RfUFdfTlVMTFRLVCAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MzFMKQorI2RlZmluZSBLUkJFVF9TS0RDX1JFVFJZICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQzMkwpCisjZGVmaW5lIEtSQkVUX1NLRENfQ0FOVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDMzTCkKKyNkZWZpbmUgS1JCRVRfSU5US19XX05PVEFMTCAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0MzdMKQorI2RlZmluZSBLUkJFVF9JTlRLX0JBRFBXICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQzOEwpCisjZGVmaW5lIEtSQkVUX0lOVEtfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDM5TCkKKyNkZWZpbmUgS1JCRVRfSU5US19FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NDZMKQorI2RlZmluZSBLUkJFVF9BRF9OT1RHVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQ0N0wpCisjZGVmaW5lIEtSQkVUX05PX1RLVF9GSUwgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDUyTCkKKyNkZWZpbmUgS1JCRVRfVEtUX0ZJTF9BQ0MgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NTNMKQorI2RlZmluZSBLUkJFVF9US1RfRklMX0xDSyAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQ1NEwpCisjZGVmaW5lIEtSQkVUX1RLVF9GSUxfRk1UICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1NDU1TCkKKyNkZWZpbmUgS1JCRVRfVEtUX0ZJTF9JTkkgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjU0NTZMKQorI2RlZmluZSBLUkJFVF9LTkFNRV9GTVQgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTQ1N0wpCitleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2tyYl9lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKKworI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX2tyYiAoMzk1MjUzNzZMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfa3JiX2Vycl90YmwgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGUKKyNkZWZpbmUga3JiX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0Vfa3JiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuYyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDRjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIGhlaW1kYWwyLmM6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTl8oYSkgYQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRbXSA9IHsKKwlOXygiJElkOiBrYWRtX2Vyci5ldCx2IDEuNSAxOTk4LzAxLzE2IDIzOjExOjI3IGpvZGEgRXhwICQiKSwKKwlOXygiQ2Fubm90IGZldGNoIGxvY2FsIHJlYWxtIiksCisJTl8oIlVuYWJsZSB0byBmZXRjaCBjcmVkZW50aWFscyIpLAorCU5fKCJCYWQga2V5IHN1cHBsaWVkIiksCisJTl8oIkNhbid0IGVuY3J5cHQgZGF0YSIpLAorCU5fKCJDYW5ub3QgZW5jb2RlL2RlY29kZSBhdXRoZW50aWNhdGlvbiBpbmZvIiksCisJTl8oIlByaW5jaXBhbCBhdHRlbXBpbmcgY2hhbmdlIGlzIGluIHdyb25nIHJlYWxtIiksCisJTl8oIlBhY2tldCBpcyB0b28gbGFyZ2UiKSwKKwlOXygiVmVyc2lvbiBudW1iZXIgaXMgaW5jb3JyZWN0IiksCisJTl8oIkNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIiksCisJTl8oIlVuc2VhbGluZyBwcml2YXRlIGRhdGEgZmFpbGVkIiksCisJTl8oIlVuc3VwcG9ydGVkIG9wZXJhdGlvbiIpLAorCU5fKCJDb3VsZCBub3QgZmluZCBhZG1pbmlzdHJhdGluZyBob3N0IiksCisJTl8oIkFkbWluaXN0cmF0aW5nIGhvc3QgbmFtZSBpcyB1bmtub3duIiksCisJTl8oIkNvdWxkIG5vdCBmaW5kIHNlcnZpY2UgbmFtZSBpbiBzZXJ2aWNlcyBkYXRhYmFzZSIpLAorCU5fKCJDb3VsZCBub3QgY3JlYXRlIHNvY2tldCIpLAorCU5fKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiKSwKKwlOXygiQ291bGQgbm90IGZldGNoIGxvY2FsIHNvY2tldCBhZGRyZXNzIiksCisJTl8oIkNvdWxkIG5vdCBmZXRjaCBtYXN0ZXIga2V5IiksCisJTl8oIkNvdWxkIG5vdCB2ZXJpZnkgbWFzdGVyIGtleSIpLAorCU5fKCJFbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBkYXRhYmFzZSIpLAorCU5fKCJEYXRhYmFzZSBzdG9yZSBlcnJvciIpLAorCU5fKCJEYXRhYmFzZSByZWFkIGVycm9yIiksCisJTl8oIkluc3VmZmljaWVudCBhY2Nlc3MgdG8gcGVyZm9ybSByZXF1ZXN0ZWQgb3BlcmF0aW9uIiksCisJTl8oIkRhdGEgaXMgYXZhaWxhYmxlIGZvciByZXR1cm4gdG8gY2xpZW50IiksCisJTl8oIk5vIHN1Y2ggZW50cnkgaW4gdGhlIGRhdGFiYXNlIiksCisJTl8oIk1lbW9yeSBleGhhdXN0ZWQiKSwKKwlOXygiQ291bGQgbm90IGZldGNoIHN5c3RlbSBob3N0bmFtZSIpLAorCU5fKCJDb3VsZCBub3QgYmluZCBwb3J0IiksCisJTl8oIkxlbmd0aCBtaXNtYXRjaCBwcm9ibGVtIiksCisJTl8oIklsbGVnYWwgdXNlIG9mIHdpbGRjYXJkIiksCisJTl8oIkRhdGFiYXNlIGlzIGxvY2tlZCBvciBpbiB1c2UtLXRyeSBhZ2FpbiBsYXRlciIpLAorCU5fKCJJbnNlY3VyZSBwYXNzd29yZCByZWplY3RlZCIpLAorCU5fKCJDbGVhcnRleHQgcGFzc3dvcmQgYW5kIERFUyBrZXkgZGlkIG5vdCBtYXRjaCIpLAorCU5fKCJJbnZhbGlkIHByaW5jaXBhbCBmb3IgY2hhbmdlIHNydnRhYiByZXF1ZXN0IiksCisJTl8oIkF0dGVtcHQgZG8gZGVsZXRlIGltbXV0YWJsZSBwcmluY2lwYWwiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoMzYpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDM3KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICgzOCkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoMzkpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQwKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0MSkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDIpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQzKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0NCkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDUpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQ2KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg0NykiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNDgpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDQ5KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1MCkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTEpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDUyKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1MykiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTQpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDU1KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1NikiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNTcpIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDU4KSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg1OSkiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNjApIiksCisJTl8oIlJlc2VydmVkIGthZG0gZXJyb3IgKDYxKSIpLAorCU5fKCJSZXNlcnZlZCBrYWRtIGVycm9yICg2MikiKSwKKwlOXygiUmVzZXJ2ZWQga2FkbSBlcnJvciAoNjMpIiksCisJTl8oIk51bGwgcGFzc3dvcmRzIGFyZSBub3QgYWxsb3dlZCIpLAorCU5fKCJQYXNzd29yZCBpcyB0b28gc2hvcnQiKSwKKwlOXygiVG9vIGZldyBjaGFyYWN0ZXIgY2xhc3NlcyBpbiBwYXNzd29yZCIpLAorCU5fKCJQYXNzd29yZCBpcyBpbiB0aGUgcGFzc3dvcmQgZGljdGlvbmFyeSIpLAorICAgIDAKK307CisKK3N0cnVjdCBlcnJvcl90YWJsZSB7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICogbXNnczsKKyAgICBsb25nIGJhc2U7CisgICAgaW50IG5fbXNnczsKK307CitzdHJ1Y3QgZXRfbGlzdCB7CisgICAgc3RydWN0IGV0X2xpc3QgKm5leHQ7CisgICAgY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlICogdGFibGU7Cit9OworZXh0ZXJuIHN0cnVjdCBldF9saXN0ICpfZXRfbGlzdDsKKworY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2thZG1fZXJyb3JfdGFibGUgPSB7IHRleHQsIC0xNzgzMTI2MjcyTCwgNjggfTsKKworc3RhdGljIHN0cnVjdCBldF9saXN0IGxpbmsgPSB7IDAsIDAgfTsKKwordm9pZCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9rYWRtX2Vycm9yX3RhYmxlKHZvaWQpIHsKKyAgICBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfa2FkbV9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfa2FkbV9lcnJvcl90YWJsZTsKKyAgICBldC0+bmV4dCA9IDA7CisgICAgKmVuZCA9IGV0OworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmV0IGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjQ3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuZXQKQEAgLTAsMCArMSw2NSBAQAorIyAkSWQ6IGthZG1fZXJyLmV0LHYgMS41IDE5OTgvMDEvMTYgMjM6MTE6Mjcgam9kYSBFeHAgJAorIworIyBDb3B5cmlnaHQgMTk4OCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyMKKyMgRm9yIGNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgZmlsZQorIyA8bWl0LWNvcHlyaWdodC5oPi4KKyMKKyMgS2VyYmVyb3MgYWRtaW5pc3RyYXRpb24gc2VydmVyIGVycm9yIHRhYmxlCisjCisJZXQJa2FkbQorCisjIEtBRE1fU1VDQ0VTUywgYXMgYWxsIHN1Y2Nlc3MgY29kZXMgc2hvdWxkIGJlLCBpcyB6ZXJvCisKK2VjIEtBRE1fUkNTSUQsCQkiJElkOiBrYWRtX2Vyci5ldCx2IDEuNSAxOTk4LzAxLzE2IDIzOjExOjI3IGpvZGEgRXhwICQiCisjIC8qIEJ1aWxkaW5nIGFuZCB1bmJ1aWxkaW5nIHRoZSBwYWNrZXQgZXJyb3JzICovCitlYyBLQURNX05PX1JFQUxNLAkiQ2Fubm90IGZldGNoIGxvY2FsIHJlYWxtIgorZWMgS0FETV9OT19DUkVELAkiVW5hYmxlIHRvIGZldGNoIGNyZWRlbnRpYWxzIgorZWMgS0FETV9CQURfS0VZLAkiQmFkIGtleSBzdXBwbGllZCIKK2VjIEtBRE1fTk9fRU5DUllQVCwJIkNhbid0IGVuY3J5cHQgZGF0YSIKK2VjIEtBRE1fTk9fQVVUSCwJIkNhbm5vdCBlbmNvZGUvZGVjb2RlIGF1dGhlbnRpY2F0aW9uIGluZm8iCitlYyBLQURNX1dST05HX1JFQUxNLAkiUHJpbmNpcGFsIGF0dGVtcGluZyBjaGFuZ2UgaXMgaW4gd3JvbmcgcmVhbG0iCitlYyBLQURNX05PX1JPT00sCSJQYWNrZXQgaXMgdG9vIGxhcmdlIgorZWMgS0FETV9CQURfVkVSLAkiVmVyc2lvbiBudW1iZXIgaXMgaW5jb3JyZWN0IgorZWMgS0FETV9CQURfQ0hLLAkiQ2hlY2tzdW0gZG9lcyBub3QgbWF0Y2giCitlYyBLQURNX05PX1JFQUQsCSJVbnNlYWxpbmcgcHJpdmF0ZSBkYXRhIGZhaWxlZCIKK2VjIEtBRE1fTk9fT1BDT0RFLAkiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIgorZWMgS0FETV9OT19IT1NULAkiQ291bGQgbm90IGZpbmQgYWRtaW5pc3RyYXRpbmcgaG9zdCIKK2VjIEtBRE1fVU5LX0hPU1QsCSJBZG1pbmlzdHJhdGluZyBob3N0IG5hbWUgaXMgdW5rbm93biIKK2VjIEtBRE1fTk9fU0VSViwJIkNvdWxkIG5vdCBmaW5kIHNlcnZpY2UgbmFtZSBpbiBzZXJ2aWNlcyBkYXRhYmFzZSIKK2VjIEtBRE1fTk9fU09DSywJIkNvdWxkIG5vdCBjcmVhdGUgc29ja2V0IgorZWMgS0FETV9OT19DT05OLAkiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgorZWMgS0FETV9OT19IRVJFLAkiQ291bGQgbm90IGZldGNoIGxvY2FsIHNvY2tldCBhZGRyZXNzIgorZWMgS0FETV9OT19NQVNULAkiQ291bGQgbm90IGZldGNoIG1hc3RlciBrZXkiCitlYyBLQURNX05PX1ZFUkksCSJDb3VsZCBub3QgdmVyaWZ5IG1hc3RlciBrZXkiCisKKyMgLyogRnJvbSB0aGUgc2VydmVyIHNpZGUgcm91dGluZXMgKi8KK2VjIEtBRE1fSU5VU0UsCQkiRW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UiCitlYyBLQURNX1VLX1NFUlJPUiwJIkRhdGFiYXNlIHN0b3JlIGVycm9yIgorZWMgS0FETV9VS19SRVJST1IsCSJEYXRhYmFzZSByZWFkIGVycm9yIgorZWMgS0FETV9VTkFVVEgsCQkiSW5zdWZmaWNpZW50IGFjY2VzcyB0byBwZXJmb3JtIHJlcXVlc3RlZCBvcGVyYXRpb24iCisjIEtBRE1fREFUQSBpc24ndCByZWFsbHkgYW4gZXJyb3IsIGJ1dC4uLgorZWMgS0FETV9EQVRBLAkJIkRhdGEgaXMgYXZhaWxhYmxlIGZvciByZXR1cm4gdG8gY2xpZW50IgorZWMgS0FETV9OT0VOVFJZLAkiTm8gc3VjaCBlbnRyeSBpbiB0aGUgZGF0YWJhc2UiCisKK2VjIEtBRE1fTk9NRU0sCQkiTWVtb3J5IGV4aGF1c3RlZCIKK2VjIEtBRE1fTk9fSE9TVE5BTUUsCSJDb3VsZCBub3QgZmV0Y2ggc3lzdGVtIGhvc3RuYW1lIgorZWMgS0FETV9OT19CSU5ELAkiQ291bGQgbm90IGJpbmQgcG9ydCIKK2VjIEtBRE1fTEVOR1RIX0VSUk9SLAkiTGVuZ3RoIG1pc21hdGNoIHByb2JsZW0iCitlYyBLQURNX0lMTF9XSUxEQ0FSRCwJIklsbGVnYWwgdXNlIG9mIHdpbGRjYXJkIgorCitlYyBLQURNX0RCX0lOVVNFLAkiRGF0YWJhc2UgaXMgbG9ja2VkIG9yIGluIHVzZS0tdHJ5IGFnYWluIGxhdGVyIgorCitlYyBLQURNX0lOU0VDVVJFX1BXLCAgICAiSW5zZWN1cmUgcGFzc3dvcmQgcmVqZWN0ZWQiCitlYyBLQURNX1BXX01JU01BVENILCAgICAiQ2xlYXJ0ZXh0IHBhc3N3b3JkIGFuZCBERVMga2V5IGRpZCBub3QgbWF0Y2giCisKK2VjIEtBRE1fTk9UX1NFUlZfUFJJTkMsICJJbnZhbGlkIHByaW5jaXBhbCBmb3IgY2hhbmdlIHNydnRhYiByZXF1ZXN0IgorZWMgS0FETV9JTU1VVEFCTEUsCSJBdHRlbXB0IGRvIGRlbGV0ZSBpbW11dGFibGUgcHJpbmNpcGFsIgorIyBwYXNzd29yZCBxdWFsaXR5IGJhc2ljYWxseSBzdG9sZW4gZnJvbSBPViBsaWJrYWRtNQoraW5kZXggNjQKK3ByZWZpeCBLQURNX1BBU1NfUQorZWMgTlVMTCwJCSJOdWxsIHBhc3N3b3JkcyBhcmUgbm90IGFsbG93ZWQiCitlYyBUT09TSE9SVCwJCSJQYXNzd29yZCBpcyB0b28gc2hvcnQiCitlYyBDTEFTUywJCSJUb28gZmV3IGNoYXJhY3RlciBjbGFzc2VzIGluIHBhc3N3b3JkIgorZWMgRElDVCwJCSJQYXNzd29yZCBpcyBpbiB0aGUgcGFzc3dvcmQgZGljdGlvbmFyeSIKK2VuZApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmggYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJjYjdkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIGhlaW1kYWwyLmg6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorCisjZGVmaW5lIEtBRE1fUkNTSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjcyTCkKKyNkZWZpbmUgS0FETV9OT19SRUFMTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNzFMKQorI2RlZmluZSBLQURNX05PX0NSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI3MEwpCisjZGVmaW5lIEtBRE1fQkFEX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjY5TCkKKyNkZWZpbmUgS0FETV9OT19FTkNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjhMKQorI2RlZmluZSBLQURNX05PX0FVVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2N0wpCisjZGVmaW5lIEtBRE1fV1JPTkdfUkVBTE0gICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjY2TCkKKyNkZWZpbmUgS0FETV9OT19ST09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjVMKQorI2RlZmluZSBLQURNX0JBRF9WRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2NEwpCisjZGVmaW5lIEtBRE1fQkFEX0NISyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjYzTCkKKyNkZWZpbmUgS0FETV9OT19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNjJMKQorI2RlZmluZSBLQURNX05PX09QQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI2MUwpCisjZGVmaW5lIEtBRE1fTk9fSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjYwTCkKKyNkZWZpbmUgS0FETV9VTktfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTlMKQorI2RlZmluZSBLQURNX05PX1NFUlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1OEwpCisjZGVmaW5lIEtBRE1fTk9fU09DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjU3TCkKKyNkZWZpbmUgS0FETV9OT19DT05OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTZMKQorI2RlZmluZSBLQURNX05PX0hFUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1NUwpCisjZGVmaW5lIEtBRE1fTk9fTUFTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjU0TCkKKyNkZWZpbmUgS0FETV9OT19WRVJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTNMKQorI2RlZmluZSBLQURNX0lOVVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI1MkwpCisjZGVmaW5lIEtBRE1fVUtfU0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjUxTCkKKyNkZWZpbmUgS0FETV9VS19SRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNTBMKQorI2RlZmluZSBLQURNX1VOQVVUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0OUwpCisjZGVmaW5lIEtBRE1fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQ4TCkKKyNkZWZpbmUgS0FETV9OT0VOVFJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDdMKQorI2RlZmluZSBLQURNX05PTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0NkwpCisjZGVmaW5lIEtBRE1fTk9fSE9TVE5BTUUgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQ1TCkKKyNkZWZpbmUgS0FETV9OT19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDRMKQorI2RlZmluZSBLQURNX0xFTkdUSF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0M0wpCisjZGVmaW5lIEtBRE1fSUxMX1dJTERDQVJEICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjQyTCkKKyNkZWZpbmUgS0FETV9EQl9JTlVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyNDFMKQorI2RlZmluZSBLQURNX0lOU0VDVVJFX1BXICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjI0MEwpCisjZGVmaW5lIEtBRE1fUFdfTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjM5TCkKKyNkZWZpbmUgS0FETV9OT1RfU0VSVl9QUklOQyAgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyMzhMKQorI2RlZmluZSBLQURNX0lNTVVUQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjIzN0wpCisjZGVmaW5lIEtBRE1fUEFTU19RX05VTEwgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjA4TCkKKyNkZWZpbmUgS0FETV9QQVNTX1FfVE9PU0hPUlQgICAgICAgICAgICAgICAgICAgICAoLTE3ODMxMjYyMDdMKQorI2RlZmluZSBLQURNX1BBU1NfUV9DTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICgtMTc4MzEyNjIwNkwpCisjZGVmaW5lIEtBRE1fUEFTU19RX0RJQ1QgICAgICAgICAgICAgICAgICAgICAgICAgKC0xNzgzMTI2MjA1TCkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfa2FkbV9lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfa2FkbV9lcnJvcl90YWJsZSh2b2lkKTsKKworLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBIZWltZGFsICovCitleHRlcm4gdm9pZCBpbml0aWFsaXplX2thZG1fZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOworCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0Vfa2FkbSAoLTE3ODMxMjYyNzJMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfa2FkbV9lcnJfdGJsIGluaXRpYWxpemVfa2FkbV9lcnJvcl90YWJsZQorI2RlZmluZSBrYWRtX2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0Vfa2FkbQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwzLmMgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI5YjczCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2hlaW1kYWwzLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIGhlaW1kYWwzLmM6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTl8oYSkgYQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRbXSA9IHsKKwlOXygiVGVzdCBtZXNzYWdlIDEiKSwKKwlOXygiVGVzdCBtZXNzYWdlIDIiKSwKKyAgICAwCit9OworCitzdHJ1Y3QgZXJyb3JfdGFibGUgeworICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIG1zZ3M7CisgICAgbG9uZyBiYXNlOworICAgIGludCBuX21zZ3M7Cit9Oworc3RydWN0IGV0X2xpc3QgeworICAgIHN0cnVjdCBldF9saXN0ICpuZXh0OworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSAqIHRhYmxlOworfTsKK2V4dGVybiBzdHJ1Y3QgZXRfbGlzdCAqX2V0X2xpc3Q7CisKK2NvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9oM3Rlc3RfZXJyb3JfdGFibGUgPSB7IHRleHQsIDQzNzg3NTIwTCwgMiB9OworCitzdGF0aWMgc3RydWN0IGV0X2xpc3QgbGluayA9IHsgMCwgMCB9OworCit2b2lkIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKK3ZvaWQgaW5pdGlhbGl6ZV9oM3Rlc3RfZXJyb3JfdGFibGUodm9pZCk7CisKK3ZvaWQgaW5pdGlhbGl6ZV9oM3Rlc3RfZXJyb3JfdGFibGUodm9pZCkgeworICAgIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlX3IoJl9ldF9saXN0KTsKK30KKworLyogRm9yIEhlaW1kYWwgY29tcGF0aWJpbGl0eSAqLwordm9pZCBpbml0aWFsaXplX2gzdGVzdF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCkKK3sKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqZXQsICoqZW5kOworCisgICAgZm9yIChlbmQgPSBsaXN0LCBldCA9ICpsaXN0OyBldDsgZW5kID0gJmV0LT5uZXh0LCBldCA9IGV0LT5uZXh0KQorICAgICAgICBpZiAoZXQtPnRhYmxlLT5tc2dzID09IHRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgZXQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBldF9saXN0KSk7CisgICAgaWYgKGV0ID09IDApIHsKKyAgICAgICAgaWYgKCFsaW5rLnRhYmxlKQorICAgICAgICAgICAgZXQgPSAmbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBldC0+dGFibGUgPSAmZXRfaDN0ZXN0X2Vycm9yX3RhYmxlOworICAgIGV0LT5uZXh0ID0gMDsKKyAgICAqZW5kID0gZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuZXQgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiZDVjMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMy5ldApAQCAtMCwwICsxLDUgQEAKK2Vycm9yX3RhYmxlIG92ayBoM3Rlc3QKK3ByZWZpeCBIM1RFU1QKK2VjIFRFU1QxLAkiVGVzdCBtZXNzYWdlIDEiCitlYyBURVNUMiwJIlRlc3QgbWVzc2FnZSAyIgorZW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuaCBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9oZWltZGFsMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDJjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaGVpbWRhbDMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogaGVpbWRhbDMuaDoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisKKyNkZWZpbmUgSDNURVNUX1RFU1QxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNDM3ODc1MjBMKQorI2RlZmluZSBIM1RFU1RfVEVTVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0Mzc4NzUyMUwpCitleHRlcm4gY29uc3Qgc3RydWN0IGVycm9yX3RhYmxlIGV0X2gzdGVzdF9lcnJvcl90YWJsZTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfaDN0ZXN0X2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KTsKKworI2RlZmluZSBFUlJPUl9UQUJMRV9CQVNFX2gzdGVzdCAoNDM3ODc1MjBMKQorCisvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLi4uICovCisjZGVmaW5lIGluaXRfaDN0ZXN0X2Vycl90YmwgaW5pdGlhbGl6ZV9oM3Rlc3RfZXJyb3JfdGFibGUKKyNkZWZpbmUgaDN0ZXN0X2Vycl9iYXNlIEVSUk9SX1RBQkxFX0JBU0VfaDN0ZXN0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuYyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNTc2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICogaW1hcF9lcnIuYzoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOXyhhKSBhCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geworCU5fKCAgICJTeXN0ZW0gSS9PIGVycm9yIiksCisJTl8oICAgIlBlcm1pc3Npb24gZGVuaWVkIiksCisJTl8oICAgIk92ZXIgcXVvdGEiKSwKKwlOXyggICAiVG9vIG1hbnkgdXNlciBmbGFncyBpbiBtYWlsYm94IiksCisJTl8oICAgIk1haWxib3ggaGFzIGFuIGludmFsaWQgZm9ybWF0IiksCisJTl8oICAgIk9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIG1haWxib3giKSwKKwlOXyggICAiTWFpbGJveCBkb2VzIG5vdCBleGlzdCIpLAorCU5fKCAgICJNYWlsYm94IGFscmVhZHkgZXhpc3RzIiksCisJTl8oICAgIkludmFsaWQgbWFpbGJveCBuYW1lIiksCisJTl8oICAgIk1haWxib3ggaXMgbG9ja2VkIGJ5IFBPUCBzZXJ2ZXIiKSwKKwlOXyggICAiVW5rbm93bi9pbnZhbGlkIHBhcnRpdGlvbiIpLAorCU5fKCAgICJJbnZhbGlkIGlkZW50aWZpZXIiKSwKKwlOXyggICAiTWVzc2FnZSBjb250YWlucyBOVUwgY2hhcmFjdGVycyIpLAorCU5fKCAgICJNZXNzYWdlIGNvbnRhaW5zIGJhcmUgbmV3bGluZXMiKSwKKwlOXyggICAiTWVzc2FnZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBoZWFkZXJzIiksCisJTl8oICAgIk1lc3NhZ2UgY29udGFpbnMgaW52YWxpZCBoZWFkZXIiKSwKKwlOXyggICAiTWVzc2FnZSBoYXMgbm8gaGVhZGVyL2JvZHkgc2VwYXJhdG9yIiksCisJTl8oICAgIlF1b3RhIHJvb3QgZG9lcyBub3QgZXhpc3QiKSwKKwlOXyggICAiVW5yZWNvZ25pemVkIGNoYXJhY3RlciBzZXQiKSwKKwlOXyggICAiSW52YWxpZCB1c2VyIiksCisJTl8oICAgIkxvZ2luIGluY29ycmVjdCIpLAorCU5fKCAgICJBbm9ueW1vdXMgbG9naW4gaXMgbm90IHBlcm1pdHRlZCIpLAorCU5fKCAgICJVbnN1cHBvcnRlZCBxdW90YSByZXNvdXJjZSIpLAorCU5fKCAgICJNYWlsYm94IGlzIG92ZXIgcXVvdGEiKSwKKwlOXyggICAiTWFpbGJveCBpcyBhdCAlZCUlIG9mIHF1b3RhIiksCisJTl8oICAgIk1lc3NhZ2UgJWQgbm8gbG9uZ2VyIGV4aXN0cyIpLAorCU5fKCAgICJVbmFibGUgdG8gY2hlY2twb2ludCBcXFNlZW4gc3RhdGUiKSwKKwlOXyggICAiVW5hYmxlIHRvIHByZXNlcnZlIFxcU2VlbiBzdGF0ZSIpLAorCU5fKCAgICJMT0dPVVQgcmVjZWl2ZWQiKSwKKwlOXyggICAiQ29tcGxldGVkIiksCisgICAgMAorfTsKKworc3RydWN0IGVycm9yX3RhYmxlIHsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKiBtc2dzOworICAgIGxvbmcgYmFzZTsKKyAgICBpbnQgbl9tc2dzOworfTsKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiB0YWJsZTsKK307CitleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OworCitjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfaW1hcF9lcnJvcl90YWJsZSA9IHsgdGV4dCwgLTE5MDQ4MDk0NzJMLCAzMCB9OworCitzdGF0aWMgc3RydWN0IGV0X2xpc3QgbGluayA9IHsgMCwgMCB9OworCit2b2lkIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7Cit2b2lkIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZSh2b2lkKTsKKwordm9pZCBpbml0aWFsaXplX2ltYXBfZXJyb3JfdGFibGUodm9pZCkgeworICAgIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZV9yKCZfZXRfbGlzdCk7Cit9CisKKy8qIEZvciBIZWltZGFsIGNvbXBhdGliaWxpdHkgKi8KK3ZvaWQgaW5pdGlhbGl6ZV9pbWFwX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KQoreworICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7CisKKyAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpCisgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsKKyAgICBpZiAoZXQgPT0gMCkgeworICAgICAgICBpZiAoIWxpbmsudGFibGUpCisgICAgICAgICAgICBldCA9ICZsaW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV0LT50YWJsZSA9ICZldF9pbWFwX2Vycm9yX3RhYmxlOworICAgIGV0LT5uZXh0ID0gMDsKKyAgICAqZW5kID0gZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuZXQgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvaW1hcF9lcnIuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmNWJiYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5ldApAQCAtMCwwICsxLDEyNyBAQAorIyBpbWFwX2Vyci5ldCAtLSBFcnJvciBjb2RlcyBmb3IgQ3lydXMgSU1BUCBzZXJ2ZXIgcHJvZ3JhbXMKKyMKKyMgQ29weXJpZ2h0IDE5OTggQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyMgCisjIE5vIHdhcnJhbnRpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgYXJlIG1hZGUgcmVnYXJkaW5nIHRoZQorIyBvcGVyYXRpb24sIHVzZSwgb3IgcmVzdWx0cyBvZiB0aGUgc29mdHdhcmUuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIG9ubHkKKyMgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCBpbgorIyBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisjCisjIFBlcm1pc3Npb24gaXMgYWxzbyBncmFudGVkIHRvIEludGVybmV0IFNlcnZpY2UgUHJvdmlkZXJzIGFuZCBvdGhlcnMKKyMgZW50aXRpZXMgdG8gdXNlIHRoZSBzb2Z0d2FyZSBmb3IgaW50ZXJuYWwgcHVycG9zZXMuCisjCisjIFRoZSBkaXN0cmlidXRpb24sIG1vZGlmaWNhdGlvbiBvciBzYWxlIG9mIGEgcHJvZHVjdCB3aGljaCB1c2VzIG9yIGlzCisjIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgb3IKKyMgYmVuZWZpdHMgcmVxdWlyZXMgc3BlY2lmaWMsIGFkZGl0aW9uYWwgcGVybWlzc2lvbiBmcm9tOgorIworIyAgT2ZmaWNlIG9mIFRlY2hub2xvZ3kgVHJhbnNmZXIKKyMgIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisjICA1MDAwIEZvcmJlcyBBdmVudWUKKyMgIFBpdHRzYnVyZ2gsIFBBICAxNTIxMy0zODkwCisjICAoNDEyKSAyNjgtNDM4NywgZmF4OiAoNDEyKSAyNjgtNzM5NQorIyAgdGVjaC10cmFuc2ZlckBhbmRyZXcuY211LmVkdQorIyAKK2Vycm9yX3RhYmxlIGltYXAKKworZWMgSU1BUF9JT0VSUk9SLAorICAgIlN5c3RlbSBJL08gZXJyb3IiCisKK2VjIElNQVBfUEVSTUlTU0lPTl9ERU5JRUQsCisgICAiUGVybWlzc2lvbiBkZW5pZWQiCisKK2VjIElNQVBfUVVPVEFfRVhDRUVERUQsCisgICAiT3ZlciBxdW90YSIKKworZWMgSU1BUF9VU0VSRkxBR19FWEhBVVNURUQsCisgICAiVG9vIG1hbnkgdXNlciBmbGFncyBpbiBtYWlsYm94IgorCitlYyBJTUFQX01BSUxCT1hfQkFERk9STUFULAorICAgIk1haWxib3ggaGFzIGFuIGludmFsaWQgZm9ybWF0IgorCitlYyBJTUFQX01BSUxCT1hfTk9UU1VQUE9SVEVELAorICAgIk9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIG1haWxib3giCisKK2VjIElNQVBfTUFJTEJPWF9OT05FWElTVEVOVCwKKyAgICJNYWlsYm94IGRvZXMgbm90IGV4aXN0IgorCitlYyBJTUFQX01BSUxCT1hfRVhJU1RTLAorICAgIk1haWxib3ggYWxyZWFkeSBleGlzdHMiCisKK2VjIElNQVBfTUFJTEJPWF9CQUROQU1FLAorICAgIkludmFsaWQgbWFpbGJveCBuYW1lIgorCitlYyBJTUFQX01BSUxCT1hfUE9QTE9DS0VELAorICAgIk1haWxib3ggaXMgbG9ja2VkIGJ5IFBPUCBzZXJ2ZXIiCisKK2VjIElNQVBfUEFSVElUSU9OX1VOS05PV04sCisgICAiVW5rbm93bi9pbnZhbGlkIHBhcnRpdGlvbiIKKworZWMgSU1BUF9JTlZBTElEX0lERU5USUZJRVIsCisgICAiSW52YWxpZCBpZGVudGlmaWVyIgorCitlYyBJTUFQX01FU1NBR0VfQ09OVEFJTlNOVUxMLAorICAgIk1lc3NhZ2UgY29udGFpbnMgTlVMIGNoYXJhY3RlcnMiCisKK2VjIElNQVBfTUVTU0FHRV9DT05UQUlOU05MLAorICAgIk1lc3NhZ2UgY29udGFpbnMgYmFyZSBuZXdsaW5lcyIKKworZWMgSU1BUF9NRVNTQUdFX0NPTlRBSU5TOEJJVCwKKyAgICJNZXNzYWdlIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGhlYWRlcnMiCisKK2VjIElNQVBfTUVTU0FHRV9CQURIRUFERVIsCisgICAiTWVzc2FnZSBjb250YWlucyBpbnZhbGlkIGhlYWRlciIKKworZWMgSU1BUF9NRVNTQUdFX05PQkxBTktMSU5FLAorICAgIk1lc3NhZ2UgaGFzIG5vIGhlYWRlci9ib2R5IHNlcGFyYXRvciIKKworZWMgSU1BUF9RVU9UQVJPT1RfTk9ORVhJU1RFTlQsCisgICAiUXVvdGEgcm9vdCBkb2VzIG5vdCBleGlzdCIKKworIyBGb2xsb3dpbmcgb25seSB1c2VkIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcworCitlYyBJTUFQX1VOUkVDT0dOSVpFRF9DSEFSU0VULAorICAgIlVucmVjb2duaXplZCBjaGFyYWN0ZXIgc2V0IgorCitlYyBJTUFQX0lOVkFMSURfVVNFUiwKKyAgICJJbnZhbGlkIHVzZXIiCisKK2VjIElNQVBfSU5WQUxJRF9MT0dJTiwKKyAgICJMb2dpbiBpbmNvcnJlY3QiCisKK2VjIElNQVBfQU5PTllNT1VTX05PVF9QRVJNSVRURUQsCisgICAiQW5vbnltb3VzIGxvZ2luIGlzIG5vdCBwZXJtaXR0ZWQiCisKK2VjIElNQVBfVU5TVVBQT1JURURfUVVPVEEsCisgICAiVW5zdXBwb3J0ZWQgcXVvdGEgcmVzb3VyY2UiCisKKyMgRm9sbG93aW5nIHVzZWQgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIG9mIHVudGFnZ2VkIE9LL05PIHJlc3BvbnNlcworCitlYyBJTUFQX05PX09WRVJRVU9UQSwKKyAgICJNYWlsYm94IGlzIG92ZXIgcXVvdGEiCisKK2VjIElNQVBfTk9fQ0xPU0VRVU9UQSwKKyAgICJNYWlsYm94IGlzIGF0ICVkJSUgb2YgcXVvdGEiCisKK2VjIElNQVBfTk9fTVNHR09ORSwKKyAgICJNZXNzYWdlICVkIG5vIGxvbmdlciBleGlzdHMiCisKK2VjIElNQVBfTk9fQ0hFQ0tTRUVOLAorICAgIlVuYWJsZSB0byBjaGVja3BvaW50IFxcU2VlbiBzdGF0ZSIKKworZWMgSU1BUF9OT19DSEVDS1BSRVNFUlZFLAorICAgIlVuYWJsZSB0byBwcmVzZXJ2ZSBcXFNlZW4gc3RhdGUiCisKKyMgRm9sbG93aW5nIHVzZWQgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIG9mIHVudGFnZ2VkIEJZRSByZXNwb25zZQorCitlYyBJTUFQX0JZRV9MT0dPVVQsCisgICAiTE9HT1VUIHJlY2VpdmVkIgorCisjIEZvbGxvd2luZyB1c2VkIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiB0YWdnZWQgT0sgcmVzcG9uc2UKKworZWMgSU1BUF9PS19DT01QTEVURUQsCisgICAiQ29tcGxldGVkIgorCitlbmQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5oIGIvZTJmc3Byb2dzL2xpYi9ldC90ZXN0X2Nhc2VzL2ltYXBfZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NjRjNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9pbWFwX2Vyci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBpbWFwX2Vyci5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBJTUFQX0lPRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ3MkwpCisjZGVmaW5lIElNQVBfUEVSTUlTU0lPTl9ERU5JRUQgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDcxTCkKKyNkZWZpbmUgSU1BUF9RVU9UQV9FWENFRURFRCAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NzBMKQorI2RlZmluZSBJTUFQX1VTRVJGTEFHX0VYSEFVU1RFRCAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2OUwpCisjZGVmaW5lIElNQVBfTUFJTEJPWF9CQURGT1JNQVQgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDY4TCkKKyNkZWZpbmUgSU1BUF9NQUlMQk9YX05PVFNVUFBPUlRFRCAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjdMKQorI2RlZmluZSBJTUFQX01BSUxCT1hfTk9ORVhJU1RFTlQgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2NkwpCisjZGVmaW5lIElNQVBfTUFJTEJPWF9FWElTVFMgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDY1TCkKKyNkZWZpbmUgSU1BUF9NQUlMQk9YX0JBRE5BTUUgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjRMKQorI2RlZmluZSBJTUFQX01BSUxCT1hfUE9QTE9DS0VEICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2M0wpCisjZGVmaW5lIElNQVBfUEFSVElUSU9OX1VOS05PV04gICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDYyTCkKKyNkZWZpbmUgSU1BUF9JTlZBTElEX0lERU5USUZJRVIgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NjFMKQorI2RlZmluZSBJTUFQX01FU1NBR0VfQ09OVEFJTlNOVUxMICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ2MEwpCisjZGVmaW5lIElNQVBfTUVTU0FHRV9DT05UQUlOU05MICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDU5TCkKKyNkZWZpbmUgSU1BUF9NRVNTQUdFX0NPTlRBSU5TOEJJVCAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NThMKQorI2RlZmluZSBJTUFQX01FU1NBR0VfQkFESEVBREVSICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1N0wpCisjZGVmaW5lIElNQVBfTUVTU0FHRV9OT0JMQU5LTElORSAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDU2TCkKKyNkZWZpbmUgSU1BUF9RVU9UQVJPT1RfTk9ORVhJU1RFTlQgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NTVMKQorI2RlZmluZSBJTUFQX1VOUkVDT0dOSVpFRF9DSEFSU0VUICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ1NEwpCisjZGVmaW5lIElNQVBfSU5WQUxJRF9VU0VSICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDUzTCkKKyNkZWZpbmUgSU1BUF9JTlZBTElEX0xPR0lOICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NTJMKQorI2RlZmluZSBJTUFQX0FOT05ZTU9VU19OT1RfUEVSTUlUVEVEICAgICAgICAgICAgICgtMTkwNDgwOTQ1MUwpCisjZGVmaW5lIElNQVBfVU5TVVBQT1JURURfUVVPVEEgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDUwTCkKKyNkZWZpbmUgSU1BUF9OT19PVkVSUVVPVEEgICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NDlMKQorI2RlZmluZSBJTUFQX05PX0NMT1NFUVVPVEEgICAgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ0OEwpCisjZGVmaW5lIElNQVBfTk9fTVNHR09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDQ3TCkKKyNkZWZpbmUgSU1BUF9OT19DSEVDS1NFRU4gICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NDZMKQorI2RlZmluZSBJTUFQX05PX0NIRUNLUFJFU0VSVkUgICAgICAgICAgICAgICAgICAgICgtMTkwNDgwOTQ0NUwpCisjZGVmaW5lIElNQVBfQllFX0xPR09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xOTA0ODA5NDQ0TCkKKyNkZWZpbmUgSU1BUF9PS19DT01QTEVURUQgICAgICAgICAgICAgICAgICAgICAgICAoLTE5MDQ4MDk0NDNMKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9pbWFwX2Vycm9yX3RhYmxlOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9pbWFwX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfaW1hcF9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7CisKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9pbWFwICgtMTkwNDgwOTQ3MkwpCisKKy8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuLi4gKi8KKyNkZWZpbmUgaW5pdF9pbWFwX2Vycl90YmwgaW5pdGlhbGl6ZV9pbWFwX2Vycm9yX3RhYmxlCisjZGVmaW5lIGltYXBfZXJyX2Jhc2UgRVJST1JfVEFCTEVfQkFTRV9pbWFwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmMgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhYjFhMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuYwpAQCAtMCwwICsxLDc2IEBACisvKgorICogc2ltcGxlLmM6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTl8oYSkgYQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRbXSA9IHsKKwlOXygJCQkiQ2FuJ3QgcmVhZCB0aWNrZXQgZmlsZSIpLAorCU5fKAkJCSJDYW4ndCBmaW5kIHRpY2tldCBvciBUR1QiKSwKKwlOXygJCQkiVEdUIGV4cGlyZWQiKSwKKwlOXygJCQkiQ2FuJ3QgZGVjb2RlIGF1dGhlbnRpY2F0b3IiKSwKKwlOXygJCQkiVGlja2V0IGV4cGlyZWQiKSwKKwlOXygJCQkiUmVwZWF0ZWQgcmVxdWVzdCIpLAorCU5fKAkJCSJUaGUgdGlja2V0IGlzbid0IGZvciB1cyIpLAorCU5fKAkJCSJSZXF1ZXN0IGlzIGluY29uc2lzdGVudCIpLAorCU5fKAkJCSJEZWx0YS1UIHRvbyBiaWciKSwKKwlOXygJCQkiSW5jb3JyZWN0IG5ldCBhZGRyZXNzIiksCisJTl8oCQkJIlByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2giKSwKKwlOXygJCQkiSW52YWxpZCBtZXNzYWdlIHR5cGUiKSwKKwlOXygJCQkiTWVzc2FnZSBzdHJlYW0gbW9kaWZpZWQiKSwKKwlOXygJCQkiTWVzc2FnZSBvdXQgb2Ygb3JkZXIiKSwKKwlOXygJCQkiVW5hdXRob3JpemVkIHJlcXVlc3QiKSwKKwlOXygJCQkiQ3VycmVudCBwYXNzd29yZCBpcyBudWxsIiksCisJTl8oCQkJIkluY29ycmVjdCBjdXJyZW50IHBhc3N3b3JkIiksCisJTl8oCQkJIlByb3RvY29sIGVycm9yIiksCisJTl8oCQkJIkVycm9yIHJldHVybmVkIGJ5IEtEQyIpLAorCU5fKAkJCSJOdWxsIHRpY2tldCByZXR1cm5lZCBieSBLREMiKSwKKwlOXygJCQkiUmV0cnkgY291bnQgZXhjZWVkZWQiKSwKKwlOXygJCQkiQ2FuJ3Qgc2VuZCByZXF1ZXN0IiksCisgICAgMAorfTsKKworc3RydWN0IGVycm9yX3RhYmxlIHsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKiBtc2dzOworICAgIGxvbmcgYmFzZTsKKyAgICBpbnQgbl9tc2dzOworfTsKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiB0YWJsZTsKK307CitleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OworCitjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfa3JiX2Vycm9yX3RhYmxlID0geyB0ZXh0LCAzOTUyNTM3NkwsIDIyIH07CisKK3N0YXRpYyBzdHJ1Y3QgZXRfbGlzdCBsaW5rID0geyAwLCAwIH07CisKK3ZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZSh2b2lkKTsKKwordm9pZCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZSh2b2lkKSB7CisgICAgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcigmX2V0X2xpc3QpOworfQorCisvKiBGb3IgSGVpbWRhbCBjb21wYXRpYmlsaXR5ICovCit2b2lkIGluaXRpYWxpemVfa3JiX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KQoreworICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7CisKKyAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpCisgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsKKyAgICBpZiAoZXQgPT0gMCkgeworICAgICAgICBpZiAoIWxpbmsudGFibGUpCisgICAgICAgICAgICBldCA9ICZsaW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV0LT50YWJsZSA9ICZldF9rcmJfZXJyb3JfdGFibGU7CisgICAgZXQtPm5leHQgPSAwOworICAgICplbmQgPSBldDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuZXQgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2I3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmV0CkBAIC0wLDAgKzEsNjkgQEAKKwllcnJvcl90YWJsZQlrcmIKKworCWVycm9yX2NvZGUJS1JCX01LX0FQX1RLRklMLAorCQkJIkNhbid0IHJlYWQgdGlja2V0IGZpbGUiCisKKwllYwkJS1JCX01LX0FQX05PVEtULAorCQkJIkNhbid0IGZpbmQgdGlja2V0IG9yIFRHVCIKKworCWVjCQlLUkJfTUtfQVBfVEdURVhQLAorCQkJIlRHVCBleHBpcmVkIgorCisJZWMJCUtSQl9SRF9BUF9VTkRFQywKKwkJCSJDYW4ndCBkZWNvZGUgYXV0aGVudGljYXRvciIKKworCWVjCQlLUkJfUkRfQVBfRVhQLAorCQkJIlRpY2tldCBleHBpcmVkIgorCisJZWMJCUtSQl9SRF9BUF9SRVBFQVQsCisJCQkiUmVwZWF0ZWQgcmVxdWVzdCIKKworCWVjCQlLUkJfUkRfQVBfTk9UX1VTLAorCQkJIlRoZSB0aWNrZXQgaXNuJ3QgZm9yIHVzIgorCisJZWMJCUtSQl9SRF9BUF9JTkNPTiwKKwkJCSJSZXF1ZXN0IGlzIGluY29uc2lzdGVudCIKKworCWVjCQlLUkJfUkRfQVBfVElNRSwKKwkJCSJEZWx0YS1UIHRvbyBiaWciCisKKwllYwkJS1JCX1JEX0FQX0JBREQsCisJCQkiSW5jb3JyZWN0IG5ldCBhZGRyZXNzIgorCisJZWMJCUtSQl9SRF9BUF9WRVJTSU9OLAorCQkJIlByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2giCisKKwllYwkJS1JCX1JEX0FQX01TR19UWVBFLAorCQkJIkludmFsaWQgbWVzc2FnZSB0eXBlIgorCisJZWMJCUtSQl9SRF9BUF9NT0RJRklFRCwKKwkJCSJNZXNzYWdlIHN0cmVhbSBtb2RpZmllZCIKKworCWVjCQlLUkJfUkRfQVBfT1JERVIsCisJCQkiTWVzc2FnZSBvdXQgb2Ygb3JkZXIiCisKKwllYwkJS1JCX1JEX0FQX1VOQVVUSE9SLAorCQkJIlVuYXV0aG9yaXplZCByZXF1ZXN0IgorCisJZWMJCUtSQl9HVF9QV19OVUxMLAorCQkJIkN1cnJlbnQgcGFzc3dvcmQgaXMgbnVsbCIKKworCWVjCQlLUkJfR1RfUFdfQkFEUFcsCisJCQkiSW5jb3JyZWN0IGN1cnJlbnQgcGFzc3dvcmQiCisKKwllYwkJS1JCX0dUX1BXX1BST1QsCisJCQkiUHJvdG9jb2wgZXJyb3IiCisKKwllYwkJS1JCX0dUX1BXX0tEQ0VSUiwKKwkJCSJFcnJvciByZXR1cm5lZCBieSBLREMiCisKKwllYwkJS1JCX0dUX1BXX05VTExUS1QsCisJCQkiTnVsbCB0aWNrZXQgcmV0dXJuZWQgYnkgS0RDIgorCisJZWMJCUtSQl9TS0RDX1JFVFJZLAorCQkJIlJldHJ5IGNvdW50IGV4Y2VlZGVkIgorCisJZWMJCUtSQl9TS0RDX0NBTlQsCisJCQkiQ2FuJ3Qgc2VuZCByZXF1ZXN0IgorCisJZW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmggYi9lMmZzcHJvZ3MvbGliL2V0L3Rlc3RfY2FzZXMvc2ltcGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4MDBiNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXQvdGVzdF9jYXNlcy9zaW1wbGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogc2ltcGxlLmg6CisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkbyBub3QgZWRpdCBpdC4KKyAqLworCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorCisjZGVmaW5lIEtSQl9NS19BUF9US0ZJTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzc2TCkKKyNkZWZpbmUgS1JCX01LX0FQX05PVEtUICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzNzdMKQorI2RlZmluZSBLUkJfTUtfQVBfVEdURVhQICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM3OEwpCisjZGVmaW5lIEtSQl9SRF9BUF9VTkRFQyAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzc5TCkKKyNkZWZpbmUgS1JCX1JEX0FQX0VYUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODBMKQorI2RlZmluZSBLUkJfUkRfQVBfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4MUwpCisjZGVmaW5lIEtSQl9SRF9BUF9OT1RfVVMgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzgyTCkKKyNkZWZpbmUgS1JCX1JEX0FQX0lOQ09OICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODNMKQorI2RlZmluZSBLUkJfUkRfQVBfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4NEwpCisjZGVmaW5lIEtSQl9SRF9BUF9CQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg1TCkKKyNkZWZpbmUgS1JCX1JEX0FQX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODZMKQorI2RlZmluZSBLUkJfUkRfQVBfTVNHX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM4N0wpCisjZGVmaW5lIEtSQl9SRF9BUF9NT0RJRklFRCAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzg4TCkKKyNkZWZpbmUgS1JCX1JEX0FQX09SREVSICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzODlMKQorI2RlZmluZSBLUkJfUkRfQVBfVU5BVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5MEwpCisjZGVmaW5lIEtSQl9HVF9QV19OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1MzkxTCkKKyNkZWZpbmUgS1JCX0dUX1BXX0JBRFBXICAgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTJMKQorI2RlZmluZSBLUkJfR1RfUFdfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5M0wpCisjZGVmaW5lIEtSQl9HVF9QV19LRENFUlIgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzk0TCkKKyNkZWZpbmUgS1JCX0dUX1BXX05VTExUS1QgICAgICAgICAgICAgICAgICAgICAgICAoMzk1MjUzOTVMKQorI2RlZmluZSBLUkJfU0tEQ19SRVRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICgzOTUyNTM5NkwpCisjZGVmaW5lIEtSQl9TS0RDX0NBTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM5NTI1Mzk3TCkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfa3JiX2Vycm9yX3RhYmxlOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGUodm9pZCk7CisKKy8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggSGVpbWRhbCAqLworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9rcmJfZXJyb3JfdGFibGVfcihzdHJ1Y3QgZXRfbGlzdCAqKmxpc3QpOworCisjZGVmaW5lIEVSUk9SX1RBQkxFX0JBU0Vfa3JiICgzOTUyNTM3NkwpCisKKy8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMuLi4gKi8KKyNkZWZpbmUgaW5pdF9rcmJfZXJyX3RibCBpbml0aWFsaXplX2tyYl9lcnJvcl90YWJsZQorI2RlZmluZSBrcmJfZXJyX2Jhc2UgRVJST1JfVEFCTEVfQkFTRV9rcmIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXQvdGV4aW5mby50ZXggYi9lMmZzcHJvZ3MvbGliL2V0L3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3RleGluZm8udGV4CkBAIC0wLDAgKzEsNzIyNiBAQAorJSB0ZXhpbmZvLnRleCAtLSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgorJQorJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCitcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQorJQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDA2LTAyLTEzLjE2fQorJQorJSBDb3B5cmlnaHQgKEMpIDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZQorJSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorJSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCislCislIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCislIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKKyUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislCislIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIHJlYWQgYnkgVGVYIHdoZW4gcHJvY2Vzc2luZworJSBhIFRleGluZm8gc291cmNlIGRvY3VtZW50LCB5b3UgbWF5IHVzZSB0aGUgcmVzdWx0IHdpdGhvdXQKKyUgcmVzdHJpY3Rpb24uICAoVGhpcyBoYXMgYmVlbiBvdXIgaW50ZW50IHNpbmNlIFRleGluZm8gd2FzIGludmVudGVkLikKKyUKKyUgUGxlYXNlIHRyeSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGV4aW5mby50ZXggYmVmb3JlIHN1Ym1pdHRpbmcgYnVnCislIHJlcG9ydHM7IHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tOgorJSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyAodGhlIFRleGluZm8gaG9tZSBwYWdlKSwgb3IKKyUgICBmdHA6Ly90dWcub3JnL3RleC90ZXhpbmZvLnRleAorJSAgICAgKGFuZCBhbGwgQ1RBTiBtaXJyb3JzLCBzZWUgaHR0cDovL3d3dy5jdGFuLm9yZykuCislIFRoZSB0ZXhpbmZvLnRleCBpbiBhbnkgZ2l2ZW4gZGlzdHJpYnV0aW9uIGNvdWxkIHdlbGwgYmUgb3V0CislIG9mIGRhdGUsIHNvIGlmIHRoYXQncyB3aGF0IHlvdSdyZSB1c2luZywgcGxlYXNlIGNoZWNrLgorJQorJSBTZW5kIGJ1ZyByZXBvcnRzIHRvIGJ1Zy10ZXhpbmZvQGdudS5vcmcuICBQbGVhc2UgaW5jbHVkZSBpbmNsdWRpbmcgYQorJSBjb21wbGV0ZSBkb2N1bWVudCBpbiBlYWNoIGJ1ZyByZXBvcnQgd2l0aCB3aGljaCB3ZSBjYW4gcmVwcm9kdWNlIHRoZQorJSBwcm9ibGVtLiAgUGF0Y2hlcyBhcmUsIG9mIGNvdXJzZSwgZ3JlYXRseSBhcHByZWNpYXRlZC4KKyUKKyUgVG8gcHJvY2VzcyBhIFRleGluZm8gbWFudWFsIHdpdGggVGVYLCBpdCdzIG1vc3QgcmVsaWFibGUgdG8gdXNlIHRoZQorJSB0ZXhpMmR2aSBzaGVsbCBzY3JpcHQgdGhhdCBjb21lcyB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgYSBzaW1wbGUKKyUgbWFudWFsIGZvby50ZXhpLCBob3dldmVyLCB5b3UgY2FuIGdldCBhd2F5IHdpdGggdGhpczoKKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXhpbmRleCBmb28uPz8KKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXggZm9vLnRleGkKKyUgICBkdmlwcyBmb28uZHZpIC1vICAjIG9yIHdoYXRldmVyOyB0aGlzIG1ha2VzIGZvby5wcy4KKyUgVGhlIGV4dHJhIFRlWCBydW5zIGdldCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGluZm9ybWF0aW9uIGNvcnJlY3QuCislIFNvbWV0aW1lcyBvbmUgcnVuIGFmdGVyIHRleGluZGV4IHN1ZmZpY2VzLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIG1vcmUKKyUgdGhhbiB0d287IHRleGkyZHZpIGRvZXMgaXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCislCislIEl0IGlzIHBvc3NpYmxlIHRvIGFkYXB0IHRleGluZm8udGV4IGZvciBvdGhlciBsYW5ndWFnZXMsIHRvIHNvbWUKKyUgZXh0ZW50LiAgWW91IGNhbiBnZXQgdGhlIGV4aXN0aW5nIGxhbmd1YWdlLXNwZWNpZmljIGZpbGVzIGZyb20gdGhlCislIGZ1bGwgVGV4aW5mbyBkaXN0cmlidXRpb24uCislCislIFRoZSBHTlUgVGV4aW5mbyBob21lIHBhZ2UgaXMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8uCisKKworXG1lc3NhZ2V7TG9hZGluZyB0ZXhpbmZvIFt2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl06fQorCislIElmIGluIGEgLmZtdCBmaWxlLCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIKKyUgYW5kIHR1cm4gb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCB3ZSBjb3VsZG4ndCBkbyBlYXJsaWVyIGJlY2F1c2UKKyUgdGhleSBtaWdodCBoYXZlIGFwcGVhcmVkIGluIHRoZSBpbnB1dCBmaWxlIG5hbWUuCitcZXZlcnlqb2J7XG1lc3NhZ2V7W1RleGluZm8gdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dfSUKKyAgXGNhdGNvZGVgKz1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmV9CisKK1xtZXNzYWdle0Jhc2ljcyx9CitcY2hhcmRlZlxvdGhlcj0xMgorCislIFdlIG5ldmVyIHdhbnQgcGxhaW4ncyBcb3V0ZXIgZGVmaW5pdGlvbiBvZiBcKyBpbiBUZXhpbmZvLgorJSBGb3IgQHRleCwgd2UgY2FuIHVzZSBcdGFiYWxpZ24uCitcbGV0XCsgPSBccmVsYXgKKworJSBTYXZlIHNvbWUgcGxhaW4gdGV4IG1hY3JvcyB3aG9zZSBuYW1lcyB3ZSB3aWxsIHJlZGVmaW5lLgorXGxldFxwdGV4Yj1cYgorXGxldFxwdGV4YnVsbGV0PVxidWxsZXQKK1xsZXRccHRleGM9XGMKK1xsZXRccHRleGNvbW1hPVwsCitcbGV0XHB0ZXhkb3Q9XC4KK1xsZXRccHRleGRvdHM9XGRvdHMKK1xsZXRccHRleGVuZD1cZW5kCitcbGV0XHB0ZXhlcXVpdj1cZXF1aXYKK1xsZXRccHRleGV4Y2xhbT1cIQorXGxldFxwdGV4Zm9vdG5vdGU9XGZvb3Rub3RlCitcbGV0XHB0ZXhndHI9PgorXGxldFxwdGV4aGF0PV4KK1xsZXRccHRleGk9XGkKK1xsZXRccHRleGluZGVudD1caW5kZW50CitcbGV0XHB0ZXhpbnNlcnQ9XGluc2VydAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCitcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorCislIElmIHRoaXMgY2hhcmFjdGVyIGFwcGVhcnMgaW4gYW4gZXJyb3IgbWVzc2FnZSBvciBoZWxwIHN0cmluZywgaXQKKyUgc3RhcnRzIGEgbmV3IGxpbmUgaW4gdGhlIG91dHB1dC4KK1xuZXdsaW5lY2hhciA9IGBeXkoKKworJSBVc2UgVGVYIDMuMCdzIFxpbnB1dGxpbmVubyB0byBnZXQgdGhlIGxpbmUgbnVtYmVyLCBmb3IgYmV0dGVyIGVycm9yCislIG1lc3NhZ2VzLCBidXQgaWYgd2UncmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4KKyUKK1xpZnhcaW5wdXRsaW5lbm9cdGhpc2lzdW5kZWZpbmVkCisgIFxsZXRcbGluZW51bWJlciA9IFxlbXB0eSAlIFByZS0zLjAuCitcZWxzZQorICBcZGVmXGxpbmVudW1iZXJ7bC5cdGhlXGlucHV0bGluZW5vOlxzcGFjZX0KK1xmaQorCislIFNldCB1cCBmaXhlZCB3b3JkcyBmb3IgRW5nbGlzaCBpZiBub3QgYWxyZWFkeSBzZXQuCitcaWZ4XHB1dHdvcmRBcHBlbmRpeFx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRBcHBlbmRpeHtBcHBlbmRpeH1cZmkKK1xpZnhccHV0d29yZENoYXB0ZXJcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZENoYXB0ZXJ7Q2hhcHRlcn1cZmkKK1xpZnhccHV0d29yZGZpbGVcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZGZpbGV7ZmlsZX1cZmkKK1xpZnhccHV0d29yZGluXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZGlue2lufVxmaQorXGlmeFxwdXR3b3JkSW5kZXhJc0VtcHR5XHVuZGVmaW5lZCAgICAgXGdkZWZccHV0d29yZEluZGV4SXNFbXB0eXsoSW5kZXggaXMgZW1wdHkpfVxmaQorXGlmeFxwdXR3b3JkSW5kZXhOb25leGlzdGVudFx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluZGV4Tm9uZXhpc3RlbnR7KEluZGV4IGlzIG5vbmV4aXN0ZW50KX1cZmkKK1xpZnhccHV0d29yZEluZm9cdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZEluZm97SW5mb31cZmkKK1xpZnhccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZlx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZntJbnN0YW5jZSBWYXJpYWJsZSBvZn1cZmkKK1xpZnhccHV0d29yZE1ldGhvZG9uXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZE1ldGhvZG9ue01ldGhvZCBvbn1cZmkKK1xpZnhccHV0d29yZE5vVGl0bGVcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZE5vVGl0bGV7Tm8gVGl0bGV9XGZpCitcaWZ4XHB1dHdvcmRvZlx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvZntvZn1cZmkKK1xpZnhccHV0d29yZG9uXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9ue29ufVxmaQorXGlmeFxwdXR3b3JkcGFnZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkcGFnZXtwYWdlfVxmaQorXGlmeFxwdXR3b3Jkc2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3Jkc2VjdGlvbntzZWN0aW9ufVxmaQorXGlmeFxwdXR3b3JkU2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkU2VjdGlvbntTZWN0aW9ufVxmaQorXGlmeFxwdXR3b3Jkc2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3Jkc2Vle3NlZX1cZmkKK1xpZnhccHV0d29yZFNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFNlZXtTZWV9XGZpCitcaWZ4XHB1dHdvcmRTaG9ydFRPQ1x1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRTaG9ydFRPQ3tTaG9ydCBDb250ZW50c31cZmkKK1xpZnhccHV0d29yZFRPQ1x1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFRPQ3tUYWJsZSBvZiBDb250ZW50c31cZmkKKyUKK1xpZnhccHV0d29yZE1KYW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSmFue0phbnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNRmViXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUZlYntGZWJydWFyeX1cZmkKK1xpZnhccHV0d29yZE1NYXJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWFye01hcmNofVxmaQorXGlmeFxwdXR3b3JkTUFwclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BcHJ7QXByaWx9XGZpCitcaWZ4XHB1dHdvcmRNTWF5XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1heXtNYXl9XGZpCitcaWZ4XHB1dHdvcmRNSnVuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bntKdW5lfVxmaQorXGlmeFxwdXR3b3JkTUp1bFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdWx7SnVseX1cZmkKK1xpZnhccHV0d29yZE1BdWdcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXVne0F1Z3VzdH1cZmkKK1xpZnhccHV0d29yZE1TZXBcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNU2Vwe1NlcHRlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1PY3RcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNT2N0e09jdG9iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNTm92XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU5vdntOb3ZlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1EZWNcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRGVje0RlY2VtYmVyfVxmaQorJQorXGlmeFxwdXR3b3JkRGVmbWFjXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmbWFje01hY3JvfVxmaQorXGlmeFxwdXR3b3JkRGVmc3BlY1x1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkRGVmc3BlY3tTcGVjaWFsIEZvcm19XGZpCitcaWZ4XHB1dHdvcmREZWZ2YXJcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZ2YXJ7VmFyaWFibGV9XGZpCitcaWZ4XHB1dHdvcmREZWZvcHRcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZvcHR7VXNlciBPcHRpb259XGZpCitcaWZ4XHB1dHdvcmREZWZmdW5jXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZmdW5je0Z1bmN0aW9ufVxmaQorCislIFNpbmNlIHRoZSBjYXRlZ29yeSBvZiBzcGFjZSBpcyBub3Qga25vd24sIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bC4KK1xjaGFyZGVmXHNwYWNlY2F0ID0gMTAKK1xkZWZcc3BhY2Vpc3NwYWNle1xjYXRjb2RlYFwgPVxzcGFjZWNhdH0KKworJSBJZ25vcmUgYSB0b2tlbi4KKyUKK1xkZWZcZ29iYmxlIzF7fQorCislIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBpbnNpZGUgc2V2ZXJhbCBcZWRlZidzLgorXGRlZlxtYWtlY3NuYW1lIzF7XGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZSMxXGVuZGNzbmFtZX0KKworJSBIeXBoZW5hdGlvbiBmaXhlcy4KK1xoeXBoZW5hdGlvbnsKKyAgRmxvci1pLWRhIEdob3N0LXNjcmlwdCBHaG9zdC12aWV3IE1hYy1PUyBQb3N0LVNjcmlwdAorICBhcC1wZW4tZGl4IGJpdC1tYXAgYml0LW1hcHMKKyAgZGF0YS1iYXNlIGRhdGEtYmFzZXMgZXNoZWxsIGZhbGwtaW5nIGhhbGYtd2F5IGxvbmctZXN0IG1hbi11LXNjcmlwdAorICBtYW4tdS1zY3JpcHRzIG1pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzIG92ZXItdmlldyBwYXItYS1kaWdtCisgIHBhci1hLWRpZ21zIHJhdGgtZXIgcmVjLXRhbi1ndS1sYXIgcm8tYm90LWljcyBzZS12ZXJlLWx5IHNldC11cCBzcGEtY2VzCisgIHNwZWxsLWluZyBzcGVsbC1pbmdzCisgIHN0YW5kLWFsb25lIHN0cm9uZy1lc3QgdGltZS1zdGFtcCB0aW1lLXN0YW1wcyB3aGljaC1ldmVyIHdoaXRlLXNwYWNlCisgIHdpZGUtc3ByZWFkIHdyYXAtYXJvdW5kCit9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEB8IGluc2VydHMgYSBjaGFuZ2ViYXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIEl0IHNob3VsZAorJSBzdXJyb3VuZCBhbnkgY2hhbmdlZCB0ZXh0LiAgVGhpcyBhcHByb2FjaCBkb2VzICpub3QqIHdvcmsgaWYgdGhlCislIGNoYW5nZSBzcGFucyBtb3JlIHRoYW4gdHdvIGxpbmVzIG9mIG91dHB1dC4gIFRvIGhhbmRsZSB0aGF0LCB3ZSB3b3VsZAorJSBoYXZlIGFkb3B0IGEgbXVjaCBtb3JlIGRpZmZpY3VsdCBhcHByb2FjaCAocHV0dGluZyBtYXJrcyBpbnRvIHRoZSBtYWluCislIHZlcnRpY2FsIGxpc3QgZm9yIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBlYWNoIGNoYW5nZSkuCislCitcZGVmXHx7JQorICAlIFx2YWRqdXN0IGNhbiBvbmx5IGJlIHVzZWQgaW4gaG9yaXpvbnRhbCBtb2RlLgorICBcbGVhdmV2bW9kZQorICAlCisgICUgQXBwZW5kIHRoaXMgdmVydGljYWwgbW9kZSBtYXRlcmlhbCBhZnRlciB0aGUgY3VycmVudCBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx2YWRqdXN0eyUKKyAgICAlIFdlIHdhbnQgdG8gaW5zZXJ0IGEgcnVsZSB3aXRoIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBjdXJyZW50CisgICAgJSBsZWFkaW5nOyB0aGF0IGlzIGV4YWN0bHkgd2hhdCBcc3RydXRib3ggaXMgc3VwcG9zZWQgdG8gcmVjb3JkLgorICAgIFx2c2tpcC1cYmFzZWxpbmVza2lwCisgICAgJQorICAgICUgXHZhZGp1c3QtaXRlbXMgYXJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHR5cGUuICBTbworICAgICUgdGhlIFxsbGFwIGhlcmUgbW92ZXMgb3V0IGludG8gdGhlIGxlZnQtaGFuZCBtYXJnaW4uCisgICAgXGxsYXB7JQorICAgICAgJQorICAgICAgJSBGb3IgYSB0aGlja2VyIG9yIHRoaW5uZXIgYmFyLCBjaGFuZ2UgdGhlIGAxcHQnLgorICAgICAgXHZydWxlIGhlaWdodFxiYXNlbGluZXNraXAgd2lkdGgxcHQKKyAgICAgICUKKyAgICAgICUgVGhpcyBpcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdGV4dC4KKyAgICAgIFxoc2tpcCAxMnB0CisgICAgfSUKKyAgfSUKK30KKworJSBTb21ldGltZXMgaXQgaXMgY29udmVuaWVudCB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gdGhlIHRyYW5zY3JpcHQgZmlsZQorJSBhbmQgbm90aGluZyBvbiB0aGUgdGVybWluYWwuICBXZSBkb24ndCBqdXN0IGNhbGwgXHRyYWNpbmdhbGwgaGVyZSwKKyUgc2luY2UgdGhhdCBwcm9kdWNlcyBzb21lIHVzZWxlc3Mgb3V0cHV0IG9uIHRoZSB0ZXJtaW5hbC4gIFdlIGFsc28gbWFrZQorJSBzb21lIGVmZm9ydCB0byBvcmRlciB0aGUgdHJhY2luZyBjb21tYW5kcyB0byByZWR1Y2Ugb3V0cHV0IGluIHRoZSBsb2cKKyUgZmlsZTsgY2YuIHRyYWNlLnN0eSBpbiBMYVRlWC4KKyUKK1xkZWZcZ2xvZ2dpbmdhbGx7XGJlZ2luZ3JvdXAgXGdsb2JhbGRlZnMgPSAxIFxsb2dnaW5nYWxsIFxlbmRncm91cH0lCitcZGVmXGxvZ2dpbmdhbGx7JQorICBcdHJhY2luZ3N0YXRzMgorICBcdHJhY2luZ3BhZ2VzMQorICBcdHJhY2luZ2xvc3RjaGFyczIgICUgMiBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXHRyYWNpbmdwYXJhZ3JhcGhzMQorICBcdHJhY2luZ291dHB1dDEKKyAgXHRyYWNpbmdtYWNyb3MyCisgIFx0cmFjaW5ncmVzdG9yZXMxCisgIFxzaG93Ym94YnJlYWR0aFxtYXhkaW1lbiBcc2hvd2JveGRlcHRoXG1heGRpbWVuCisgIFxpZnhcZVRlWHZlcnNpb25cdW5kZWZpbmVkXGVsc2UgJSBldGV4IGdpdmVzIHVzIG1vcmUgbG9nZ2luZworICAgIFx0cmFjaW5nc2NhbnRva2VuczEKKyAgICBcdHJhY2luZ2lmczEKKyAgICBcdHJhY2luZ2dyb3VwczEKKyAgICBcdHJhY2luZ25lc3RpbmcyCisgICAgXHRyYWNpbmdhc3NpZ25zMQorICBcZmkKKyAgXHRyYWNpbmdjb21tYW5kczMgICUgMyBnaXZlcyB1cyBtb3JlIGluIGV0ZXgKKyAgXGVycm9yY29udGV4dGxpbmVzMTYKK30lCisKKyUgYWRkIGNoZWNrIGZvciBcbGFzdHBlbmFsdHkgdG8gcGxhaW4ncyBkZWZpbml0aW9ucy4gIElmIHRoZSBsYXN0IHRoaW5nCislIHdlIGRpZCB3YXMgYSBcbm9icmVhaywgd2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQgbW9yZSBzcGFjZS4KKyUKK1xkZWZcc21hbGxicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxzbWFsbHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktNTBcc21hbGxza2lwXGZpXGZpfQorXGRlZlxtZWRicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxtZWRza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTEwMFxtZWRza2lwXGZpXGZpfQorXGRlZlxiaWdicmVha3tcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDBccGFyXGlmZGltXGxhc3Rza2lwPFxiaWdza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTIwMFxiaWdza2lwXGZpXGZpfQorCislIEZvciBAY3JvcG1hcmtzIGNvbW1hbmQuCislIERvIEBjcm9wbWFya3MgdG8gZ2V0IGNyb3AgbWFya3MuCislCitcbmV3aWZcaWZjcm9wbWFya3MKK1xsZXRcY3JvcG1hcmtzID0gXGNyb3BtYXJrc3RydWUKKyUKKyUgRGltZW5zaW9ucyB0byBhZGQgY3JvcG1hcmtzIGF0IGNvcm5lcnMuCislIEFkZGVkIGJ5IFAuIEEuIE1hY0theSwgMTIgTm92LiAxOTg2CislCitcbmV3ZGltZW5cb3V0ZXJoc2l6ZSBcbmV3ZGltZW5cb3V0ZXJ2c2l6ZSAlIHNldCBieSB0aGUgcGFwZXIgc2l6ZSByb3V0aW5lcworXG5ld2RpbWVuXGNvcm5lcmxvbmcgIFxjb3JuZXJsb25nPTFwYworXG5ld2RpbWVuXGNvcm5lcnRoaWNrIFxjb3JuZXJ0aGljaz0uM3B0CitcbmV3ZGltZW5cdG9wYW5kYm90dG9tbWFyZ2luIFx0b3BhbmRib3R0b21tYXJnaW49Ljc1aW4KKworJSBNYWluIG91dHB1dCByb3V0aW5lLgorXGNoYXJkZWZcUEFHRSA9IDI1NQorXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fQorCitcbmV3Ym94XGhlYWRsaW5lYm94CitcbmV3Ym94XGZvb3RsaW5lYm94CisKKyUgXG9uZXBhZ2VvdXQgdGFrZXMgYSB2Ym94IGFzIGFuIGFyZ3VtZW50LiAgTm90ZSB0aGF0IFxwYWdlY29udGVudHMKKyUgZG9lcyBpbnNlcnRpb25zLCBidXQgeW91IGhhdmUgdG8gY2FsbCBpdCB5b3Vyc2VsZi4KK1xkZWZcb25lcGFnZW91dCMxeyUKKyAgXGlmY3JvcG1hcmtzIFxob2Zmc2V0PTBwdCBcZWxzZSBcaG9mZnNldD1cbm9ybWFsb2Zmc2V0IFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8gIFxhZHZhbmNlXGhvZmZzZXQgYnkgXGJpbmRpbmdvZmZzZXQKKyAgXGVsc2UgXGFkdmFuY2VcaG9mZnNldCBieSAtXGJpbmRpbmdvZmZzZXRcZmkKKyAgJQorICAlIERvIHRoaXMgb3V0c2lkZSBvZiB0aGUgXHNoaXBvdXQgc28gQGNvZGUgZXRjLiB3aWxsIGJlIGV4cGFuZGVkIGluCisgICUgdGhlIGhlYWRsaW5lIGFzIHRoZXkgc2hvdWxkIGJlLCBub3QgdGFrZW4gbGl0ZXJhbGx5IChvdXRwdXR0aW5nICcnY29kZSkuCisgIFxzZXRib3hcaGVhZGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2VoZWFkbGluZX0lCisgIFxzZXRib3hcZm9vdGxpbmVib3ggPSBcdmJveHtcbGV0XGhzaXplPVxwYWdld2lkdGggXG1ha2Vmb290bGluZX0lCisgICUKKyAgeyUKKyAgICAlIEhhdmUgdG8gZG8gdGhpcyBzdHVmZiBvdXRzaWRlIHRoZSBcc2hpcG91dCBiZWNhdXNlIHdlIHdhbnQgaXQgdG8KKyAgICAlIHRha2UgZWZmZWN0IGluIFx3cml0ZSdzLCB5ZXQgdGhlIGdyb3VwIGRlZmluZWQgYnkgdGhlIFx2Ym94IGVuZHMKKyAgICAlIGJlZm9yZSB0aGUgXHNoaXBvdXQgcnVucy4KKyAgICAlCisgICAgXGluZGV4ZHVtbWllcyAgICAgICAgICUgZG9uJ3QgZXhwYW5kIGNvbW1hbmRzIGluIHRoZSBvdXRwdXQuCisgICAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgXCBpbiBpbmRleCBlbnRyaWVzIG11c3Qgbm90IHN0YXkgXCwgZS5nLiwgaWYKKyAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAlIFdlIGRvbid0IHdhbnQgLnZyIChvciB3aGF0ZXZlcikgZW50cmllcyBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAlIFxlbnRyeXt7XHR0IFxpbmRleGJhY2tzbGFzaCB9YWNyb255bX17MzJ9e1xjb2RlIHtcYWNyb255bX19CisgICAgICAgICAgICAgICAlICJcYWNyb255bSIgd29uJ3Qgd29yayB3aGVuIGl0J3MgcmVhZCBiYWNrIGluOworICAgICAgICAgICAgICAgJSBpdCBuZWVkcyB0byBiZSAKKyAgICAgICAgICAgICAgICUge1xjb2RlIHt7XHR0IFxiYWNrc2xhc2hjdXJmb250IH1hY3JvbnltfQorICAgIFxzaGlwb3V0XHZib3h7JQorICAgICAgJSBEbyB0aGlzIGVhcmx5IHNvIHBkZiByZWZlcmVuY2VzIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuCisgICAgICBcaWZwZGZtYWtlcGFnZWRlc3QgXHBkZmRlc3QgbmFtZXtcdGhlXHBhZ2Vub30geHl6XGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MgXHZib3ggdG8gXG91dGVydnNpemVcYmdyb3VwCisgICAgICAgIFxoc2l6ZSA9IFxvdXRlcmhzaXplCisgICAgICAgIFx2c2tpcC1cdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFx2dG9wIHRvMHB0eyUKKyAgICAgICAgICBcbGluZXtcZXd0b3BcaGZpbFxld3RvcH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXHZzc30lCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXGxpbmVcYmdyb3VwCisgICAgICAgICAgXGhmaWwgJSBjZW50ZXIgdGhlIHBhZ2Ugd2l0aGluIHRoZSBvdXRlciAocGFnZSkgaHNpemUuCisgICAgICAgICAgXGlmb2RkXHBhZ2Vub1xoc2tpcFxiaW5kaW5nb2Zmc2V0XGZpCisgICAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFx1bnZib3hcaGVhZGxpbmVib3gKKyAgICAgIFxwYWdlYm9keXsjMX0lCisgICAgICBcaWZkaW1caHRcZm9vdGxpbmVib3ggPiAwcHQKKyAgICAgICAgJSBPbmx5IGxlYXZlIHRoaXMgc3BhY2UgaWYgdGhlIGZvb3RsaW5lIGlzIG5vbmVtcHR5LgorICAgICAgICAlIChXZSBsZXNzZW5lZCBcdnNpemUgZm9yIGl0IGluIFxvZGRmb290aW5neHh4LikKKyAgICAgICAgJSBUaGUgXGJhc2VsaW5lc2tpcD0yNHB0IGluIHBsYWluJ3MgXG1ha2Vmb290bGluZSBoYXMgbm8gZWZmZWN0LgorICAgICAgICBcdnNraXAgMlxiYXNlbGluZXNraXAKKyAgICAgICAgXHVudmJveFxmb290bGluZWJveAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MKKyAgICAgICAgICBcZWdyb3VwICUgZW5kIG9mIFx2Ym94XGJncm91cAorICAgICAgICBcaGZpbFxlZ3JvdXAgJSBlbmQgb2YgKGNlbnRlcmluZykgXGxpbmVcYmdyb3VwCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4gcGx1czFmaWxsIG1pbnVzMWZpbGwKKyAgICAgICAgXGJveG1heGRlcHRoID0gXGNvcm5lcnRoaWNrCisgICAgICAgIFx2Ym94IHRvMHB0e1x2c3MKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXtcZXdib3RcaGZpbFxld2JvdH0lCisgICAgICAgIH0lCisgICAgICBcZWdyb3VwICUgXHZib3ggZnJvbSBmaXJzdCBjcm9wbWFya3MgY2xhdXNlCisgICAgICBcZmkKKyAgICB9JSBlbmQgb2YgXHNoaXBvdXRcdmJveAorICB9JSBlbmQgb2YgZ3JvdXAgd2l0aCBcaW5kZXhkdW1taWVzCisgIFxhZHZhbmNlcGFnZW5vCisgIFxpZm51bVxvdXRwdXRwZW5hbHR5Pi0yMDAwMCBcZWxzZVxkb3N1cGVyZWplY3RcZmkKK30KKworXG5ld2luc2VydFxtYXJnaW4gXGRpbWVuXG1hcmdpbj1cbWF4ZGltZW4KKworXGRlZlxwYWdlYm9keSMxe1x2Ym94IHRvXHBhZ2VoZWlnaHR7XGJveG1heGRlcHRoPVxtYXhkZXB0aCAjMX19Cit7XGNhdGNvZGVgXEAgPTExCitcZ2RlZlxwYWdlY29udGVudHMjMXtcaWZ2b2lkXHRvcGluc1xlbHNlXHVudmJveFx0b3BpbnNcZmkKKyUgbWFyZ2luYWwgaGFja3MsIGp1aGFAdmlpc2EudXVjcCAoSnVoYSBUYWthbGEpCitcaWZ2b2lkXG1hcmdpblxlbHNlICUgbWFyZ2luYWwgaW5mbyBpcyBwcmVzZW50CisgIFxybGFwe1xrZXJuXGhzaXplXHZib3ggdG9cekB7XGtlcm4xcHRcYm94XG1hcmdpbiBcdnNzfX1cZmkKK1xkaW1lbkA9XGRwIzEgXHVudmJveCMxCitcaWZ2b2lkXGZvb3RpbnNcZWxzZVx2c2tpcFxza2lwXGZvb3RpbnNcZm9vdG5vdGVydWxlIFx1bnZib3hcZm9vdGluc1xmaQorXGlmckBnZ2VkYm90dG9tIFxrZXJuLVxkaW1lbkAgXHZmaWwgXGZpfQorfQorCislIEhlcmUgYXJlIHRoZSBydWxlcyBmb3IgdGhlIGNyb3BtYXJrcy4gIE5vdGUgdGhhdCB0aGV5IGFyZQorJSBvZmZzZXQgc28gdGhhdCB0aGUgc3BhY2UgYmV0d2VlbiB0aGVtIGlzIHRydWx5IFxvdXRlcmhzaXplIG9yIFxvdXRlcnZzaXplCislIChQLiBBLiBNYWNLYXksIDEyIE5vdmVtYmVyLCAxOTg2KQorJQorXGRlZlxld3RvcHtcdnJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoMHB0IHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zdG9we1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoXGNvcm5lcmxvbmcgd2lkdGhcY29ybmVydGhpY2t9fQorXGRlZlxld2JvdHtcdnJ1bGUgaGVpZ2h0MHB0IGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zYm90e1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcmxvbmcgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVydGhpY2t9fQorCislIFBhcnNlIGFuIGFyZ3VtZW50LCB0aGVuIHBhc3MgaXQgdG8gIzEuICBUaGUgYXJndW1lbnQgaXMgdGhlIHJlc3Qgb2YKKyUgdGhlIGlucHV0IGxpbmUgKGV4Y2VwdCB3ZSByZW1vdmUgYSB0cmFpbGluZyBjb21tZW50KS4gICMxIHNob3VsZCBiZSBhCislIG1hY3JvIHdoaWNoIGV4cGVjdHMgYW4gb3JkaW5hcnkgdW5kZWxpbWl0ZWQgVGVYIGFyZ3VtZW50LgorJQorXGRlZlxwYXJzZWFyZ3tccGFyc2Vhcmd1c2luZ3t9fQorXGRlZlxwYXJzZWFyZ3VzaW5nIzEjMnslCisgIFxkZWZcbmV4dHsjMn0lCisgIFxiZWdpbmdyb3VwCisgICAgXG9iZXlsaW5lcworICAgIFxzcGFjZWlzc3BhY2UKKyAgICAjMSUKKyAgICBccGFyc2VhcmdsaW5lXGVtcHR5JSBJbnNlcnQgdGhlIFxlbXB0eSB0b2tlbiwgc2VlIFxmaW5pc2hwYXJzZWFyZyBiZWxvdy4KK30KKwore1xvYmV5bGluZXMgJQorICBcZ2RlZlxwYXJzZWFyZ2xpbmUjMV5eTXslCisgICAgXGVuZGdyb3VwICUgRW5kIG9mIHRoZSBncm91cCBzdGFydGVkIGluIFxwYXJzZWFyZy4KKyAgICBcYXJncmVtb3ZlY29tbWVudCAjMVxjb21tZW50XEFyZ1Rlcm0lCisgIH0lCit9CisKKyUgRmlyc3QgcmVtb3ZlIGFueSBAY29tbWVudCwgdGhlbiBhbnkgQGMgY29tbWVudC4KK1xkZWZcYXJncmVtb3ZlY29tbWVudCMxXGNvbW1lbnQjMlxBcmdUZXJte1xhcmdyZW1vdmVjICMxXGNcQXJnVGVybX0KK1xkZWZcYXJncmVtb3ZlYyMxXGMjMlxBcmdUZXJte1xhcmdjaGVja3NwYWNlcyMxXF5eTVxBcmdUZXJtfQorCislIEVhY2ggb2NjdXJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBXZSBjYW5ub3QgdXNlIFxuZXh0IGhlcmUsIGFzIGl0IGhvbGRzIHRoZSBtYWNybyB0byBydW47CisgICAgJSB0aHVzIHdlIHJldXNlIFx0ZW1wLgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcbmV4dC4KKyUgKFNpbWlsYXJpbHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxuZXh0XGV4cGFuZGFmdGVyeyMxfX0KKworJSBccGFyc2VhcmdkZWZcZm9vey4uLn0KKyUJaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCislIFxkZWZcZm9ve1xwYXJzZWFyZ1xYZm9vfQorJSBcZGVmXFhmb28jMXsuLi59CislCislIEFjdHVhbGx5LCBJIHVzZSBcY3NuYW1lXHN0cmluZ1xmb29cZW5kY3NuYW1lLCBpZS4gXFxmb28sIGFzIGl0IGlzIG15CislIGZhdm91cml0ZSBUZVggdHJpY2suICAtLWthc2FsLCAxNm5vdjAzCisKK1xkZWZccGFyc2VhcmdkZWYjMXslCisgIFxleHBhbmRhZnRlciBcZG9wYXJzZWFyZ2RlZiBcY3NuYW1lXHN0cmluZyMxXGVuZGNzbmFtZSAjMSUKK30KK1xkZWZcZG9wYXJzZWFyZ2RlZiMxIzJ7JQorICBcZGVmIzJ7XHBhcnNlYXJnIzF9JQorICBcZGVmIzEjIzElCit9CisKKyUgU2V2ZXJhbCB1dGlsaXR5IGRlZmluaXRpb25zIHdpdGggYWN0aXZlIHNwYWNlOgoreworICBcb2JleXNwYWNlcworICBcZ2RlZlxvYmV5ZWRzcGFjZXsgfQorCisgICUgTWFrZSBlYWNoIHNwYWNlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgcHJvZHVjZSBhIG5vcm1hbCBpbnRlcndvcmQKKyAgJSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgRG9uJ3QgYWxsb3cgYSBsaW5lIGJyZWFrIGF0IHRoaXMgc3BhY2UsIGFzIHRoaXMKKyAgJSBpcyB1c2VkIG9ubHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgQGV4YW1wbGUsIHdoZXJlIGVhY2ggbGluZSBvZiBpbnB1dAorICAlIHNob3VsZCBwcm9kdWNlIGEgbGluZSBvZiBvdXRwdXQgYW55d2F5LgorICAlCisgIFxnZGVmXHNlcHNwYWNlc3tcb2JleXNwYWNlc1xsZXQgPVx0aWV9CisKKyAgJSBJZiBhbiBpbmRleCBjb21tYW5kIGlzIHVzZWQgaW4gYW4gQGV4YW1wbGUgZW52aXJvbm1lbnQsIGFueSBzcGFjZXMKKyAgJSB0aGVyZWluIHNob3VsZCBiZWNvbWUgcmVndWxhciBzcGFjZXMgaW4gdGhlIHJhdyBpbmRleCBmaWxlLCBub3QgdGhlCisgICUgZXhwYW5zaW9uIG9mIFx0aWUgKFxsZWF2ZXZtb2RlIFxwZW5hbHR5IFxATSBcICkuCisgIFxnZGVmXHVuc2Vwc3BhY2Vze1xsZXQgPVxzcGFjZX0KK30KKworCitcZGVmXGZsdXNoY3J7XGlmeFxwYXJcbGlzcHBhciBcZGVmXG5leHQjIzF7fVxlbHNlIFxsZXRcbmV4dD1ccmVsYXggXGZpIFxuZXh0fQorCislIERlZmluZSB0aGUgZnJhbWV3b3JrIGZvciBlbnZpcm9ubWVudHMgaW4gdGV4aW5mby50ZXguICBJdCdzIHVzZWQgbGlrZSB0aGlzOgorJQorJSAgIFxlbnZkZWZcZm9vey4uLn0KKyUgICBcZGVmXEVmb297Li4ufQorJQorJSBJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBcZW52ZGVmIHRvIGluc2VydCBcYmVnaW5ncm91cCBiZWZvcmUgdGhlCislIGFjdHVhbCBib2R5OyBAZW5kIGNsb3NlcyB0aGUgZ3JvdXAgYWZ0ZXIgY2FsbGluZyBcRWZvby4gIFxlbnZkZWYgYWxzbworJSBkZWZpbmVzIFx0aGlzZW52LCBzbyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBrbm93bjsgQGVuZCBjaGVja3MKKyUgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgbmFtZSBtYXRjaGVzLiAgVGhlIFxjaGVja2VudiBtYWNybyBjYW4gYWxzbyBiZQorJSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgdGhlIG9uZSBleHBlY3RlZC4KKyUKKyUgTm9uLWZhbHNlIGNvbmRpdGlvbmFscyAoQGlmdGV4LCBAaWZzZXQpIGRvbid0IGZpdCBpbnRvIHRoaXMsIHNvIHRoZXkKKyUgYXJlIG5vdCB0cmVhdGVkIGFzIGVudmlyb21lbnRzOyB0aGV5IGRvbid0IG9wZW4gYSBncm91cC4gIChUaGUKKyUgaW1wbGVtZW50YXRpb24gb2YgQGVuZCB0YWtlcyBjYXJlIG5vdCB0byBjYWxsIFxlbmRncm91cCBpbiB0aGlzCislIHNwZWNpYWwgY2FzZS4pCisKKworJSBBdCBydW50aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgorXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQorJSBpbml0aWFsaXplCitcbGV0XHRoaXNlbnZcZW1wdHkKKworJSAuLi4gYnV0IHRoZXkgZ2V0IGRlZmluZWQgdmlhIGBgXGVudmRlZlxmb297Li4ufScnOgorXGxvbmdcZGVmXGVudmRlZiMxIzJ7XGRlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CitcZGVmXGVudnBhcnNlYXJnZGVmIzEjMntccGFyc2VhcmdkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorCislIENoZWNrIHdoZXRoZXIgd2UncmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorXGRlZlxjaGVja2VudiMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgXGVsc2UKKyAgICBcYmFkZW52ZXJyCisgIFxmaQorfQorCislIEV2aXJvbm1lbnQgbWlzbWF0Y2gsICMxIGV4cGVjdGVkOgorXGRlZlxiYWRlbnZlcnJ7JQorICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgY2FuIGFwcGVhciBvbmx5IFxpbmVudmlyb25tZW50XHRlbXAsCisgICAgbm90IFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorfQorXGRlZlxpbmVudmlyb25tZW50IzF7JQorICBcaWZ4IzFcZW1wdHkKKyAgICBvdXQgb2YgYW55IGVudmlyb25tZW50JQorICBcZWxzZQorICAgIGluIGVudmlyb25tZW50IFxleHBhbmRhZnRlclxzdHJpbmcjMSUKKyAgXGZpCit9CisKKyUgQGVuZCBmb28gZXhlY3V0ZXMgdGhlIGRlZmluaXRpb24gb2YgXEVmb28uCislIEJ1dCBmaXJzdCwgaXQgZXhlY3V0ZXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIFxjaGVja2VudgorJQorXHBhcnNlYXJnZGVmXGVuZHslCisgIFxpZiAxXGNzbmFtZSBpc2NvbmQuIzFcZW5kY3NuYW1lCisgIFxlbHNlCisgICAgJSBUaGUgZ2VuZXJhbCB3b3JkaW5nIG9mIFxiYWRlbnZlcnIgbWF5IG5vdCBiZSBpZGVhbCwgYnV0Li4uIC0ta2FzYWwsIDA2bm92MDMKKyAgICBcZXhwYW5kYWZ0ZXJcY2hlY2tlbnZcY3NuYW1lIzFcZW5kY3NuYW1lCisgICAgXGNzbmFtZSBFIzFcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCitcbmV3aGVscFxFTXNpbXBsZXtQcmVzcyBSRVRVUk4gdG8gY29udGludWUufQorCisKKyUlIFNpbXBsZSBzaW5nbGUtY2hhcmFjdGVyIEAgY29tbWFuZHMKKworJSBAQCBwcmludHMgYW4gQAorJSBLbHVkZ2UgdGhpcyB1bnRpbCB0aGUgZm9udHMgYXJlIHJpZ2h0IChncnIpLgorXGRlZlxAe3tcdHRcY2hhcjY0fX0KKworJSBUaGlzIGlzIHR1cm5lZCBvZmYgYmVjYXVzZSBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZAorJSBhbmQgeW91IGNhbiB1c2UgQHd7Li4ufSBhcm91bmQgYSBxdW90ZSB0byBzdXBwcmVzcyBsaWdhdHVyZXMuCislJSBEZWZpbmUgQGAgYW5kIEAnIHRvIGJlIHRoZSBzYW1lIGFzIGAgYW5kICcKKyUlIGJ1dCBzdXBwcmVzc2luZyBsaWdhdHVyZXMuCislXGRlZlxge3tgfX0KKyVcZGVmXCd7eyd9fQorCislIFVzZWQgdG8gZ2VuZXJhdGUgcXVvdGVkIGJyYWNlcy4KK1xkZWZcbXlsYnJhY2Uge3tcdHRcY2hhcjEyM319CitcZGVmXG15cmJyYWNlIHt7XHR0XGNoYXIxMjV9fQorXGxldFx7PVxteWxicmFjZQorXGxldFx9PVxteXJicmFjZQorXGJlZ2luZ3JvdXAKKyAgJSBEZWZpbml0aW9ucyB0byBwcm9kdWNlIFx7IGFuZCBcfSBjb21tYW5kcyBmb3IgaW5kaWNlcywKKyAgJSBhbmQgQHsgYW5kIEB9IGZvciB0aGUgYXV4L3RvYyBmaWxlcy4KKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgXGNhdGNvZGVgXFsgPSAxIFxjYXRjb2RlYFxdID0gMgorICBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcb3RoZXIKKyAgIWdkZWYhbGJyYWNlY21kW1x7XSUKKyAgIWdkZWYhcmJyYWNlY21kW1x9XSUKKyAgIWdkZWYhbGJyYWNlYXRjbWRbQHtdJQorICAhZ2RlZiFyYnJhY2VhdGNtZFtAfV0lCishZW5kZ3JvdXAKKworJSBAY29tbWF7fSB0byBhdm9pZCAsIHBhcnNpbmcgcHJvYmxlbXMuCitcbGV0XGNvbW1hID0gLAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBcYworXGxldFxkb3RhY2NlbnQgPSBcLgorXGRlZlxyaW5nYWNjZW50IzF7e1xhY2NlbnQyMyAjMX19CitcbGV0XHRpZWFjY2VudCA9IFx0CitcbGV0XHViYXJhY2NlbnQgPSBcYgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24gQG9yZGYgQG9yZG0KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CitcZGVmXG9yZGZ7XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7YX19fQorXGRlZlxvcmRte1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye299fX0KKworJSBEb3RsZXNzIGkgYW5kIGRvdGxlc3MgaiwgdXNlZCBmb3IgYWNjZW50cy4KK1xkZWZcaW1hY3Jve2l9CitcZGVmXGptYWNyb3tqfQorXGRlZlxkb3RsZXNzIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcaW1hY3JvIFxwdGV4aQorICBcZWxzZVxpZnhcdGVtcFxqbWFjcm8gXGoKKyAgXGVsc2UgXGVycm1lc3NhZ2V7QGRvdGxlc3MgY2FuIGJlIHVzZWQgb25seSB3aXRoIGkgb3Igan0lCisgIFxmaVxmaQorfQorCislIFRoZSBcVGVYe30gbG9nbywgYXMgaW4gcGxhaW4sIGJ1dCByZXNldHRpbmcgdGhlIHNwYWNpbmcgc28gdGhhdCBhCislIHBlcmlvZCBmb2xsb3dpbmcgY291bnRzIGFzIGVuZGluZyBhIHNlbnRlbmNlLiAgKElkZWEgZm91bmQgaW4gbGF0ZXguKQorJQorXGVkZWZcVGVYe1xUZVggXHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEBMYVRlWHt9IGxvZ28uICBOb3QgcXVpdGUgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgZGVmaW5pdGlvbiBpbgorJSBsYXRleC5sdHgsIHNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudCBmb250IGZvciB0aGUgcmFpc2VkIEE7IGl0J3MgbW9zdAorJSBjb252ZW5pZW50IGZvciB1cyB0byB1c2UgYW4gZXhwbGljaXRseSBzbWFsbGVyIGZvbnQsIHJhdGhlciB0aGFuIHVzaW5nCislIHRoZSBcc2NyaXB0c3R5bGUgZm9udCAoc2luY2Ugd2UgZG9uJ3QgcmVzZXQgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUpLgorJQorXGRlZlxMYVRlWHslCisgIExca2Vybi0uMzZlbQorICB7XHNldGJveDA9XGhib3h7VH0lCisgICBcdmJveCB0byBcaHQwe1xoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIEF9XHZzc319JQorICBca2Vybi0uMTVlbQorICBcVGVYCit9CisKKyUgQmUgc3VyZSB3ZSdyZSBpbiBob3Jpem9udGFsIG1vZGUgd2hlbiBkb2luZyBhIHRpZSwgc2luY2Ugd2UgbWFrZSBzcGFjZQorJSBlcXVpdmFsZW50IHRvIHRoaXMgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMuIE90aGVyd2lzZSwgYSBzcGFjZQorJSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aWxsIHN0YXJ0IHdpdGggXHBlbmFsdHkgLS0gYW5kCislIHNpbmNlIFxwZW5hbHR5IGlzIHZhbGlkIGluIHZlcnRpY2FsIG1vZGUsIHdlJ2QgZW5kIHVwIHB1dHRpbmcgdGhlCislIHBlbmFsdHkgb24gdGhlIHZlcnRpY2FsIGxpc3QgaW5zdGVhZCBvZiBpbiB0aGUgbmV3IHBhcmFncmFwaC4KK3tcY2F0Y29kZWBAID0gMTEKKyAlIEF2b2lkIHVzaW5nIFxATSBkaXJlY3RseSwgYmVjYXVzZSB0aGF0IGNhdXNlcyB0cm91YmxlCisgJSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB3cml0dGVuIGludG8gYW4gaW5kZXggZmlsZS4KKyBcZ2xvYmFsXGxldFx0aWVwZW5hbHR5ID0gXEBNCisgXGdkZWZcdGlle1xsZWF2ZXZtb2RlXHBlbmFsdHlcdGllcGVuYWx0eVwgfQorfQorCislIEA6IGZvcmNlcyBub3JtYWwgc2l6ZSB3aGl0ZXNwYWNlIGZvbGxvd2luZy4KK1xkZWZcOntcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQCogZm9yY2VzIGEgbGluZSBicmVhay4KK1xkZWZcKntcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQorCislIEAvIGFsbG93cyBhIGxpbmUgYnJlYWsuCitcbGV0XC89XGFsbG93YnJlYWsKKworJSBALiBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcGVyaW9kLgorXGRlZlwuey5cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAISBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgYmFuZy4KK1xkZWZcIXshXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQD8gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHF1ZXJ5LgorXGRlZlw/ez9cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAZnJlbmNoc3BhY2luZyBvbnxvZmYgIHNheXMgd2hldGhlciB0byBwdXQgZXh0cmEgc3BhY2UgYWZ0ZXIgcHVuY3R1YXRpb24uCislIAorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJQorXGRlZlxpbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcaW5jbHVkZXp6en0KK1xkZWZcaW5jbHVkZXp6eiMxeyUKKyAgXHB1c2h0aGlzZmlsZXN0YWNrCisgIFxkZWZcdGhpc2ZpbGV7IzF9JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1we1xpbnB1dCAjMSB9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAKKyAgXHBvcHRoaXNmaWxlc3RhY2sKK30KK1xkZWZcZmlsZW5hbWVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWB+PVxvdGhlcgorICBcY2F0Y29kZWBePVxvdGhlcgorICBcY2F0Y29kZWBfPVxvdGhlcgorICBcY2F0Y29kZWB8PVxvdGhlcgorICBcY2F0Y29kZWA8PVxvdGhlcgorICBcY2F0Y29kZWA+PVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlcgorICBcY2F0Y29kZWAtPVxvdGhlcgorfQorCitcZGVmXHB1c2h0aGlzZmlsZXN0YWNreyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWFxwb3B0aGlzZmlsZXN0YWNrXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1h7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tZXHRoaXNmaWxlXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1kgIzFcU3RhY2tUZXJtICMyXFN0YWNrVGVybSB7JQorICBcZ2RlZlxwb3B0aGlzZmlsZXN0YWNre1xnZGVmXHRoaXNmaWxleyMxfVxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7IzJ9fSUKK30KKworXGRlZlxwb3B0aGlzZmlsZXN0YWNre1xlcnJ0aGlzZmlsZXN0YWNrZW1wdHl9CitcZGVmXGVycnRoaXNmaWxlc3RhY2tlbXB0eXtcZXJybWVzc2FnZXtJbnRlcm5hbCBlcnJvcjoKKyAgdGhlIHN0YWNrIG9mIGZpbGVuYW1lcyBpcyBlbXB0eS59fQorCitcZGVmXHRoaXNmaWxle30KKworJSBAY2VudGVyIGxpbmUKKyUgb3V0cHV0cyB0aGF0IGxpbmUsIGNlbnRlcmVkLgorJQorXHBhcnNlYXJnZGVmXGNlbnRlcnslCisgIFxpZmhtb2RlCisgICAgXGxldFxuZXh0XGNlbnRlckgKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcY2VudGVyVgorICBcZmkKKyAgXG5leHR7XGhmaWwgXGlnbm9yZXNwYWNlcyMxXHVuc2tpcCBcaGZpbH0lCit9CitcZGVmXGNlbnRlckgjMXslCisgIHslCisgICAgXGhmaWxcYnJlYWsKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgICBcbGluZXsjMX0lCisgICAgXGJyZWFrCisgIH0lCit9CitcZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CisKKyUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKKworXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CisKKyUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCislIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CislIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKKworXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQorXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCitcY29tbWVudHh4eH0KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KKworXGxldFxjPVxjb21tZW50CisKKyUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTLCBjbG9zZSBlbm91Z2guCislIE5DSEFSUyBjYW4gYWxzbyBiZSB0aGUgd29yZCBgYXNpcycgb3IgYG5vbmUnLgorJSBXZSBjYW5ub3QgZmVhc2libHkgaW1wbGVtZW50IEBwYXJhZ3JhcGhpbmRlbnQgYXNpcywgdGhvdWdoLgorJQorXGRlZlxhc2lzd29yZHthc2lzfSAlIG5vIHRyYW5zbGF0aW9uLCB0aGVzZSBhcmUga2V5d29yZHMKK1xkZWZcbm9uZXdvcmR7bm9uZX0KKyUKK1xwYXJzZWFyZ2RlZlxwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gIzFlbQorICAgIFxmaQorICBcZmkKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50Cit9CisKKyUgQGV4YW1wbGVpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUyBsaWtlIEBwYXJhZ3JhcGhpbmRlbnQuCislIEl0IHNlZW1zIEBleGFtcGxlaW5kZW50IGFzaXMgaXNuJ3QgbmVjZXNzYXJ5LCBidXQKKyUgSSBwcmVzZXJ2ZSBpdCB0byBtYWtlIGl0IHNpbWlsYXIgdG8gQHBhcmFncmFwaGluZGVudC4KK1xwYXJzZWFyZ2RlZlxleGFtcGxlaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcbGlzcG5hcnJvd2luZyA9IDBwdAorICAgIFxlbHNlCisgICAgICBcbGlzcG5hcnJvd2luZyA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCit9CisKKyUgQGZpcnN0cGFyYWdyYXBoaW5kZW50IFdPUkQKKyUgSWYgV09SRCBpcyBgbm9uZScsIHRoZW4gc3VwcHJlc3MgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcmFncmFwaAorJSBhZnRlciBhIHNlY3Rpb24gaGVhZGluZy4gIElmIFdPUkQgaXMgYGluc2VydCcsIHRoZW4gZG8gaW5kZW50IGF0IHN1Y2gKKyUgcGFyYWdyYXBocy4KKyUKKyUgVGhlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBpcyBzdXBwcmVzc2VkIG9yIG5vdCBieSBjYWxsaW5nCislIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50LCB3aGljaCB0aGUgc2VjdGlvbmluZyBjb21tYW5kcyBkby4KKyUgV2Ugc3dpdGNoIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYmFjayBhbmQgZm9ydGggYWNjb3JkaW5nIHRvIFdPUkQuCislIEJ5IGRlZmF1bHQsIHdlIHN1cHByZXNzIGluZGVudGF0aW9uLgorJQorXGRlZlxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50e1xkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXHBhcnNlYXJnZGVmXGZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgIFxnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGRlZl97XGlmbnVtXGZhbT1cc2xmYW0gXF9cZWxzZVxzYlxmaX0lCisgIH0KK30KKyUgQW5vdGhlciBjb21wbGljYXRpb246IHdlIHdhbnQgXFwgKGFuZCBAXCkgdG8gb3V0cHV0IGEgXCBjaGFyYWN0ZXIuCislIEZZSSwgcGxhaW4udGV4IHVzZXMgXFwgYXMgYSB0ZW1wb3JhcnkgY29udHJvbCBzZXF1ZW5jZSAod2h5PyksIGJ1dAorJSB0aGlzIGlzIG5vdCBhZHZlcnRpc2VkIGFuZCB3ZSBkb24ndCBjYXJlLiAgVGV4aW5mbyBkb2VzIG5vdAorJSBvdGhlcndpc2UgZGVmaW5lIEBcLgorJQorJSBUaGUgXG1hdGhjaGFyIGlzIGNsYXNzPTA9b3JkaW5hcnksIGZhbWlseT03PXR0ZmFtLCBwb3NpdGlvbj01Qz1cLgorXGRlZlxtYXRoYmFja3NsYXNoe1xpZm51bVxmYW09XHR0ZmFtIFxtYXRoY2hhciIwNzVDIFxlbHNlXGJhY2tzbGFzaCBcZml9CislCitcZGVmXG1hdGh7JQorICBcdGV4CisgIFxtYXRodW5kZXJzY29yZQorICBcbGV0XFwgPSBcbWF0aGJhY2tzbGFzaAorICBcbWF0aGFjdGl2ZQorICAkXGZpbmlzaG1hdGgKK30KK1xkZWZcZmluaXNobWF0aCMxeyMxJFxlbmRncm91cH0gICUgQ2xvc2UgdGhlIGdyb3VwIG9wZW5lZCBieSBcdGV4LgorCislIFNvbWUgYWN0aXZlIGNoYXJhY3RlcnMgKHN1Y2ggYXMgPCkgYXJlIHNwYWNlZCBkaWZmZXJlbnRseSBpbiBtYXRoLgorJSBXZSBoYXZlIHRvIHJlc2V0IHRoZWlyIGRlZmluaXRpb25zIGluIGNhc2UgdGhlIEBtYXRoIHdhcyBhbiBhcmd1bWVudAorJSB0byBhIGNvbW1hbmQgd2hpY2ggc2V0cyB0aGUgY2F0Y29kZXMgKHN1Y2ggYXMgQGl0ZW0gb3IgQHNlY3Rpb24pLgorJQoreworICBcY2F0Y29kZWBeID0gXGFjdGl2ZQorICBcY2F0Y29kZWA8ID0gXGFjdGl2ZQorICBcY2F0Y29kZWA+ID0gXGFjdGl2ZQorICBcY2F0Y29kZWArID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRoYWN0aXZleyUKKyAgICBcbGV0XiA9IFxwdGV4aGF0CisgICAgXGxldDwgPSBccHRleGxlc3MKKyAgICBcbGV0PiA9IFxwdGV4Z3RyCisgICAgXGxldCsgPSBccHRleHBsdXMKKyAgfQorfQorCislIEBidWxsZXQgYW5kIEBtaW51cyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudCBhcyBAbWF0aCwganVzdCBhYm92ZS4KK1xkZWZcYnVsbGV0eyRccHRleGJ1bGxldCR9CitcZGVmXG1pbnVzeyQtJH0KKworJSBAZG90c3t9IG91dHB1dHMgYW4gZWxsaXBzaXMgdXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KKyUgV2UgZG8gLjVlbSBwZXIgcGVyaW9kIHNvIHRoYXQgaXQgaGFzIHRoZSBzYW1lIHNwYWNpbmcgaW4gYSB0eXBld3JpdGVyCislIGZvbnQgYXMgdGhyZWUgYWN0dWFsIHBlcmlvZCBjaGFyYWN0ZXJzLgorJQorXGRlZlxkb3RzeyUKKyAgXGxlYXZldm1vZGUKKyAgXGhib3ggdG8gMS41ZW17JQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjI1ZmlsCisgICAgLlxoZmlsLlxoZmlsLiUKKyAgICBcaHNraXAgMHB0IHBsdXMgMC41ZmlsCisgIH0lCit9CisKKyUgQGVuZGRvdHN7fSBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgZWxsaXBzaXMuCislCitcZGVmXGVuZGRvdHN7JQorICBcZG90cworICBcc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcgorfQorCislIEBjb21tYXt9IGlzIHNvIGNvbW1hcyBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0ZXh0IHdpdGhvdXQgbWVzc2luZyB1cAorJSBUZXhpbmZvJ3MgcGFyc2luZy4KKyUKK1xsZXRcY29tbWEgPSAsCisKKyUgQHJlZmlsbCBpcyBhIG5vLW9wLgorXGxldFxyZWZpbGw9XHJlbGF4CisKKyUgSWYgd29ya2luZyBvbiBhIGxhcmdlIGRvY3VtZW50IGluIGNoYXB0ZXJzLCBpdCBpcyBjb252ZW5pZW50IHRvCislIGJlIGFibGUgdG8gZGlzYWJsZSBpbmRleGluZywgY3Jvc3MtcmVmZXJlbmNpbmcsIGFuZCBjb250ZW50cywgZm9yIHRlc3QgcnVucy4KKyUgVGhpcyBpcyBkb25lIHdpdGggQG5vdmFsaWRhdGUgKGJlZm9yZSBAc2V0ZmlsZW5hbWUpLgorJQorXG5ld2lmXGlmbGlua3MgXGxpbmtzdHJ1ZSAlIGJ5IGRlZmF1bHQgd2Ugd2FudCB0aGUgYXV4IGZpbGVzLgorXGxldFxub3ZhbGlkYXRlID0gXGxpbmtzZmFsc2UKKworJSBAc2V0ZmlsZW5hbWUgaXMgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHRleGluZm8gZmlsZS4KKyUgU28gb3BlbiBoZXJlIHRoZSBmaWxlcyB3ZSBuZWVkIHRvIGhhdmUgb3BlbiB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dC4KKyUgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBtYWtlIGEgLmZtdCBmaWxlIGZvciB0ZXhpbmZvLgorXGRlZlxzZXRmaWxlbmFtZXslCisgICBcZml4YmFja3NsYXNoICAlIFR1cm4gb2ZmIGhhY2sgdG8gc3dhbGxvdyBgXGlucHV0IHRleGluZm8nLgorICAgXGlmbGlua3MKKyAgICAgXHRyeWF1eGZpbGUKKyAgICAgJSBPcGVuIHRoZSBuZXcgYXV4IGZpbGUuICBUZVggd2lsbCBjbG9zZSBpdCBhdXRvbWF0aWNhbGx5IGF0IGV4aXQuCisgICAgIFxpbW1lZGlhdGVcb3Blbm91dFxhdXhmaWxlPVxqb2JuYW1lLmF1eAorICAgXGZpICUgXG9wZW5pbmRpY2VzIG5lZWRzIHRvIGRvIHNvbWUgd29yayBpbiBhbnkgY2FzZS4KKyAgIFxvcGVuaW5kaWNlcworICAgXGxldFxzZXRmaWxlbmFtZT1cY29tbWVudCAlIElnbm9yZSBleHRyYSBAc2V0ZmlsZW5hbWUgY21kcy4KKyAgICUKKyAgICUgSWYgdGV4aW5mby5jbmYgaXMgcHJlc2VudCBvbiB0aGUgc3lzdGVtLCByZWFkIGl0LgorICAgJSBVc2VmdWwgZm9yIHNpdGUtd2lkZSBAYWZvdXJwYXBlciwgZXRjLgorICAgXG9wZW5pbiAxIHRleGluZm8uY25mCisgICBcaWZlb2YgMSBcZWxzZSBcaW5wdXQgdGV4aW5mby5jbmYgXGZpCisgICBcY2xvc2VpbiAxCisgICAlCisgICBcY29tbWVudCAlIElnbm9yZSB0aGUgYWN0dWFsIGZpbGVuYW1lLgorfQorCislIENhbGxlZCBmcm9tIFxzZXRmaWxlbmFtZS4KKyUKK1xkZWZcb3BlbmluZGljZXN7JQorICBcbmV3aW5kZXh7Y3B9JQorICBcbmV3Y29kZWluZGV4e2ZufSUKKyAgXG5ld2NvZGVpbmRleHt2cn0lCisgIFxuZXdjb2RlaW5kZXh7dHB9JQorICBcbmV3Y29kZWluZGV4e2t5fSUKKyAgXG5ld2NvZGVpbmRleHtwZ30lCit9CisKKyUgQGJ5ZS4KK1xvdXRlclxkZWZcYnlle1xwYWdlYWxpZ25tYWNyb1x0cmFjaW5nc3RhdHM9MVxwdGV4ZW5kfQorCisKK1xtZXNzYWdle3BkZix9CislIGFkb2JlIGBwb3J0YWJsZScgZG9jdW1lbnQgZm9ybWF0CitcbmV3Y291bnRcdGVtcG51bQorXG5ld2NvdW50XGxua2NvdW50CitcbmV3dG9rc1xmaWxlbmFtZQorXG5ld2NvdW50XGZpbGVuYW1lbGVuZ3RoCitcbmV3Y291bnRccGduCitcbmV3dG9rc1x0b2tzQQorXG5ld3Rva3NcdG9rc0IKK1xuZXd0b2tzXHRva3NDCitcbmV3dG9rc1x0b2tzRAorXG5ld2JveFxib3hBCitcbmV3Y291bnRcY291bnRBCitcbmV3aWZcaWZwZGYKK1xuZXdpZlxpZnBkZm1ha2VwYWdlZGVzdAorCislIHdoZW4gcGRmdGV4IGlzIHJ1biBpbiBkdmkgbW9kZSwgXHBkZm91dHB1dCBpcyBkZWZpbmVkIChzbyBccGRmb3V0cHV0PTEKKyUgY2FuIGJlIHNldCkuICBTbyB3ZSB0ZXN0IGZvciBccmVsYXggYW5kIDAgYXMgd2VsbCBhcyBcdW5kZWZpbmVkLAorJSBib3Jyb3dlZCBmcm9tIGlmcGRmLnN0eS4KK1xpZnhccGRmb3V0cHV0XHVuZGVmaW5lZAorXGVsc2UKKyAgXGlmeFxwZGZvdXRwdXRccmVsYXgKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBkZm91dHB1dAorICAgIFxlbHNlCisgICAgICBccGRmdHJ1ZQorICAgIFxmaQorICBcZmkKK1xmaQorCislIFBERiB1c2VzIFBvc3RTY3JpcHQgc3RyaW5nIGNvbnN0YW50cyBmb3IgdGhlIG5hbWVzIG9mIHhyZWYgdGFyZ2V0cywKKyUgZm9yIGRpc3BsYXkgaW4gdGhlIG91dGxpbmVzLCBhbmQgaW4gb3RoZXIgcGxhY2VzLiAgVGh1cywgd2UgaGF2ZSB0bworJSBkb3VibGUgYW55IGJhY2tzbGFzaGVzLiAgT3RoZXJ3aXNlLCBhIG5hbWUgbGlrZSAiXG5vZGUiIHdpbGwgYmUKKyUgaW50ZXJwcmV0ZWQgYXMgYSBuZXdsaW5lIChcbiksIGZvbGxvd2VkIGJ5IG8sIGQsIGUuICBOb3QgZ29vZC4KKyUgaHR0cDovL3d3dy5udGcubmwvcGlwZXJtYWlsL250Zy1wZGZ0ZXgvMjAwNC1KdWx5LzAwMDY1NC5odG1sCislIChhbmQgcmVsYXRlZCBtZXNzYWdlcywgdGhlIGZpbmFsIG91dGNvbWUgaXMgdGhhdCBpdCBpcyB1cCB0byB0aGUgVGVYCislIHVzZXIgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXJ3aXNlIG1ha2UgdGhlIHN0cmluZyB2YWxpZCwgc28KKyUgdGhhdCdzIHdoYXQgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislIAore1xjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaGRvdWJsZXslCisgICBAY2F0Y29kZWBAXD1AYWN0aXZlCisgICBAbGV0XD1AZG91YmxlYmFja3NsYXNofQorfQorCislIFRvIGhhbmRsZSBwYXJlbnMsIHdlIG11c3QgYWRvcHQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIHNpbmNlIHBhcmVucyBhcmUKKyUgbm90IGFjdGl2ZSBjaGFyYWN0ZXJzLiAgaHlwZXJyZWYuZHR4ICh3aGljaCBoYXMgdGhlIHNhbWUgcHJvYmxlbSBhcworJSB1cykgaGFuZGxlcyBpdCB3aXRoIHRoaXMgYW1hemluZyBtYWNybyB0byByZXBsYWNlIHRva2Vucy4gIEkndmUKKyUgdGlua2VyZWQgd2l0aCBpdCBhIGxpdHRsZSBmb3IgdGV4aW5mbywgYnV0IGl0J3MgZGVmaW5pdGVseSBmcm9tIHRoZXJlLgorJSAKKyUgIzEgaXMgdGhlIHRva2VucyB0byByZXBsYWNlLgorJSAjMiBpcyB0aGUgcmVwbGFjZW1lbnQuCislICMzIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdpdGggdGhlIHN0cmluZy4KKyUgCitcZGVmXEh5UHNkU3Vic3QjMSMyIzN7JQorICBcZGVmXEh5UHNkUmVwbGFjZSMjMSMxIyMyXEVORHslCisgICAgIyMxJQorICAgIFxpZnhcXCMjMlxcJQorICAgIFxlbHNlCisgICAgICAjMiUKKyAgICAgIFxIeVJldHVybkFmdGVyRml7JQorICAgICAgICBcSHlQc2RSZXBsYWNlIyMyXEVORAorICAgICAgfSUKKyAgICBcZmkKKyAgfSUKKyAgXHhkZWYjM3tcZXhwYW5kYWZ0ZXJcSHlQc2RSZXBsYWNlIzMjMVxFTkR9JQorfQorXGxvbmdcZGVmXEh5UmV0dXJuQWZ0ZXJGaSMxXGZpe1xmaSMxfQorCislICMxIGlzIGEgY29udHJvbCBzZXF1ZW5jZSBpbiB3aGljaCB0byBkbyB0aGUgcmVwbGFjZW1lbnRzLgorXGRlZlxiYWNrc2xhc2hwYXJlbnMjMXslCisgIFx4ZGVmIzF7IzF9JSByZWRlZmluZSBpdCBhcyBpdHMgZXhwYW5zaW9uOyB0aGUgZGVmaW5pdGlvbiBpcyBzaW1wbHkKKyAgICAgICAgICAgICAlIFxsYXN0bm9kZSB3aGVuIGNhbGxlZCBmcm9tIFxzZXRyZWYgLT4gXHBkZm1rZGVzdC4KKyAgXEh5UHNkU3Vic3R7KH17XHJlYWxiYWNrc2xhc2gofXsjMX0lCisgIFxIeVBzZFN1YnN0eyl9e1xyZWFsYmFja3NsYXNoKX17IzF9JQorfQorCitcaWZwZGYKKyAgXGlucHV0IHBkZmNvbG9yCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9JQorICBcZGVmXGRvcGRmaW1hZ2UjMSMyIzN7JQorICAgIFxkZWZcaW1hZ2V3aWR0aHsjMn0lCisgICAgXGRlZlxpbWFnZWhlaWdodHsjM30lCisgICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICAlIGluY2x1ZGVkIHR3aWNlLiAgKFZlcnNpb24gMy4xNDE1OS1wcmUtMS4wLXVub2ZmaWNpYWwtMjAwMTA3MDQuKQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICAgIFxpbW1lZGlhdGVccGRmaW1hZ2UKKyAgICBcZWxzZQorICAgICAgXGltbWVkaWF0ZVxwZGZ4aW1hZ2UKKyAgICBcZmkKKyAgICAgIFxpZnhcZW1wdHlcaW1hZ2V3aWR0aFxlbHNlIHdpZHRoIFxpbWFnZXdpZHRoIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZWhlaWdodFxlbHNlIGhlaWdodCBcaW1hZ2VoZWlnaHQgXGZpCisgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMworICAgICAgICAgIzEucGRmJQorICAgICAgIFxlbHNlCisgICAgICAgICB7IzEucGRmfSUKKyAgICAgICBcZmkKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0IFxlbHNlCisgICAgICBccGRmcmVmeGltYWdlIFxwZGZsYXN0eGltYWdlCisgICAgXGZpfQorICBcZGVmXHBkZm1rZGVzdCMxe3slCisgICAgJSBXZSBoYXZlIHRvIHNldCBkdW1taWVzIHNvIGNvbW1hbmRzIHN1Y2ggYXMgQGNvZGUsIGFuZCBjaGFyYWN0ZXJzCisgICAgJSBzdWNoIGFzIFwsIGFyZW4ndCBleHBhbmRlZCB3aGVuIHByZXNlbnQgaW4gYSBzZWN0aW9uIHRpdGxlLgorICAgIFxhdGR1bW1pZXMKKyAgICBcYWN0aXZlYmFja3NsYXNoZG91YmxlCisgICAgXGRlZlxwZGZkZXN0bmFtZXsjMX0lCisgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZkZXN0bmFtZQorICAgIFxwZGZkZXN0IG5hbWV7XHBkZmRlc3RuYW1lfSB4eXolCisgIH19JQorICAlCisgICUgdXNlZCB0byBtYXJrIHRhcmdldCBuYW1lczsgbXVzdCBiZSBleHBhbmRhYmxlLgorICBcZGVmXHBkZm1rcGduIzF7IzF9JQorICAlCisgIFxsZXRcbGlua2NvbG9yID0gXEJsdWUgICUgd2FzIEN5YW4sIGJ1dCB0aGF0IHNlZW1zIGxpZ2h0PworICBcZGVmXGVuZGxpbmt7XEJsYWNrXHBkZmVuZGxpbmt9CisgICUgQWRkaW5nIG91dGxpbmVzIHRvIFBERjsgbWFjcm9zIGZvciBjYWxjdWxhdGluZyBzdHJ1Y3R1cmUgb2Ygb3V0bGluZXMKKyAgJSBjb21lIGZyb20gUGV0ciBPbHNhaworICBcZGVmXGV4cG51bWJlciMxe1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIzFcZW5kY3NuYW1lXHJlbGF4IDAlCisgICAgXGVsc2UgXGNzbmFtZSMxXGVuZGNzbmFtZSBcZml9CisgIFxkZWZcYWR2YW5jZW51bWJlciMxe1x0ZW1wbnVtPVxleHBudW1iZXJ7IzF9XHJlbGF4CisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFcZW5kY3NuYW1le1x0aGVcdGVtcG51bX19CisgICUKKyAgJSAjMSBpcyB0aGUgc2VjdGlvbiB0ZXh0LCB3aGljaCBpcyB3aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZQorICAlIG91dGxpbmUgYnkgdGhlIHBkZiB2aWV3ZXIuICAjMiBpcyB0aGUgcGRmIGV4cHJlc3Npb24gZm9yIHRoZSBudW1iZXIKKyAgJSBvZiBzdWJlbnRyaWVzIChvciBlbXB0eSwgZm9yIHN1YnN1YnNlY3Rpb25zKS4gICMzIGlzIHRoZSBub2RlIHRleHQsCisgICUgd2hpY2ggbWlnaHQgYmUgZW1wdHkgaWYgdGhpcyB0b2MgZW50cnkgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbm9kZS4KKyAgJSAjNCBpcyB0aGUgcGFnZSBudW1iZXIKKyAgJQorICBcZGVmXGRvcGRmb3V0bGluZSMxIzIjMyM0eyUKKyAgICAlIEdlbmVyYXRlIGEgbGluayB0byB0aGUgbm9kZSB0ZXh0IGlmIHRoYXQgZXhpc3RzOyBlbHNlLCB1c2UgdGhlCisgICAgJSBwYWdlIG51bWJlci4gIFdlIGNvdWxkIGdlbmVyYXRlIGEgZGVzdGluYXRpb24gZm9yIHRoZSBzZWN0aW9uCisgICAgJSB0ZXh0IGluIHRoZSBjYXNlIHdoZXJlIGEgc2VjdGlvbiBoYXMgbm8gbm9kZSwgYnV0IGl0IGRvZXNuJ3QKKyAgICAlIHNlZW0gd29ydGggdGhlIHRyb3VibGUsIHNpbmNlIG1vc3QgZG9jdW1lbnRzIGFyZSBub3JtYWxseSBzdHJ1Y3R1cmVkLgorICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgIFxpZnhccGRmb3V0bGluZWRlc3RcZW1wdHkKKyAgICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzR9JQorICAgIFxlbHNlCisgICAgICAlIERvdWJsZWQgYmFja3NsYXNoZXMgaW4gdGhlIG5hbWUuCisgICAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5lZGVzdH0lCisgICAgXGZpCisgICAgJQorICAgICUgQWxzbyBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGluIHRoZSBkaXNwbGF5IHN0cmluZy4KKyAgICB7XGFjdGl2ZWJhY2tzbGFzaGRvdWJsZSBceGRlZlxwZGZvdXRsaW5ldGV4dHsjMX0lCisgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmb3V0bGluZXRleHR9JQorICAgICUKKyAgICBccGRmb3V0bGluZSBnb3RvIG5hbWV7XHBkZm1rcGdue1xwZGZvdXRsaW5lZGVzdH19IzJ7XHBkZm91dGxpbmV0ZXh0fSUKKyAgfQorICAlCisgIFxkZWZccGRmbWFrZW91dGxpbmVzeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBUaGFuaCdzIGhhY2sgLyBwcm9wZXIgYnJhY2VzIGluIGJvb2ttYXJrcworICAgICAgXGVkZWZcbXlsYnJhY2V7XGlmdHJ1ZSBcc3RyaW5ne1xlbHNlfVxmaX1cbGV0XHs9XG15bGJyYWNlCisgICAgICBcZWRlZlxteXJicmFjZXtcaWZmYWxzZXtcZWxzZVxzdHJpbmd9XGZpfVxsZXRcfT1cbXlyYnJhY2UKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2lsZW50bHksIHRvIGdldCBjb3VudHMgb2Ygc3ViZW50cmllcyBmb3IgXHBkZm91dGxpbmUuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisJXGRlZlx0aGlzY2hhcG51bXsjIzJ9JQorCVxkZWZcdGhpc3NlY251bXswfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7Y2hhcFx0aGlzY2hhcG51bX0lCisJXGRlZlx0aGlzc2VjbnVteyMjMn0lCisJXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3NlY1x0aGlzc2VjbnVtfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17IyMyfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntzdWJzZWNcdGhpc3N1YnNlY251bX0lCisgICAgICB9JQorICAgICAgXGRlZlx0aGlzY2hhcG51bXswfSUKKyAgICAgIFxkZWZcdGhpc3NlY251bXswfSUKKyAgICAgIFxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgICUKKyAgICAgICUgdXNlIFxkZWYgcmF0aGVyIHRoYW4gXGxldCBoZXJlIGJlY2F1c2Ugd2UgcmVkZWZpbmUgXGNoYXBlbnRyeSBldAorICAgICAgJSBhbC4gYSBzZWNvbmQgdGltZSwgYmVsb3cuCisgICAgICBcZGVmXGFwcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlxhcHBzZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5jaGFwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXHVubnNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBccmVhZGRhdGFmaWxle3RvY30lCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNlY29uZCB0aW1lLCB0aGlzIHRpbWUgYWN0dWFsbHkgcHJvZHVjaW5nIHRoZSBvdXRsaW5lcy4KKyAgICAgICUgVGhlIGAtJyBtZWFucyB0YWtlIHRoZSBcZXhwbnVtYmVyIGFzIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YKKyAgICAgICUgc3ViZW50cmllcywgd2hpY2ggd2UgY2FsY3VsYXRlZCBvbiBvdXIgZmlyc3QgcmVhZCBvZiB0aGUgLnRvYyBhYm92ZS4KKyAgICAgICUKKyAgICAgICUgV2UgdXNlIHRoZSBub2RlIG5hbWVzIGFzIHRoZSBkZXN0aW5hdGlvbnMuCisgICAgICBcZGVmXG51bWNoYXBlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye2NoYXAjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3NlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c3Vic2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JSBjb3VudCBpcyBhbHdheXMgemVybworICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17fXsjIzN9eyMjNH19JQorICAgICAgJQorICAgICAgJSBQREYgb3V0bGluZXMgYXJlIGRpc3BsYXllZCB1c2luZyBzeXN0ZW0gZm9udHMsIGluc3RlYWQgb2YKKyAgICAgICUgZG9jdW1lbnQgZm9udHMuICBUaGVyZWZvcmUgd2UgY2Fubm90IHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAlIHNpbmNlIHRoZSBlbmNvZGluZyBpcyB1bmtub3duLiAgRm9yIGV4YW1wbGUsIHRoZSBlb2dvbmVrIGZyb20KKyAgICAgICUgTGF0aW4gMiAoMHhlYSkgZ2V0cyB0cmFuc2xhdGVkIHRvIGEgfCBjaGFyYWN0ZXIuICBJbmZvIGZyb20KKyAgICAgICUgU3Rhc3playBXYXdyeWtpZXdpY3osIDE5IEphbiAyMDA0IDA0OjA5OjI0ICswMTAwLgorICAgICAgJQorICAgICAgJSB4eCB0byBkbyB0aGlzIHJpZ2h0LCB3ZSBoYXZlIHRvIHRyYW5zbGF0ZSA4LWJpdCBjaGFyYWN0ZXJzIHRvCisgICAgICAlIHRoZWlyICJiZXN0IiBlcXVpdmFsZW50LCBiYXNlZCBvbiB0aGUgQGRvY3VtZW50ZW5jb2RpbmcuICBSaWdodAorICAgICAgJSBub3csIEkgZ3Vlc3Mgd2UnbGwganVzdCBsZXQgdGhlIHBkZiByZWFkZXIgaGF2ZSBpdHMgd2F5LgorICAgICAgXGluZGV4bm9mb250cworICAgICAgXHNldHVwZGF0YWZpbGUKKyAgICAgIFxjYXRjb2RlYFxcPVxhY3RpdmUgXG90aGVyYmFja3NsYXNoCisgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgXGVuZGdyb3VwCisgIH0KKyAgJQorICBcZGVmXHNraXBzcGFjZXMjMXtcZGVmXFBQeyMxfVxkZWZcRHt8fSUKKyAgICBcaWZ4XFBQXERcbGV0XG5leHRzcFxyZWxheAorICAgIFxlbHNlXGxldFxuZXh0c3Bcc2tpcHNwYWNlcworICAgICAgXGlmeFxwXHNwYWNlXGVsc2VcYWRkdG9rZW5ze1xmaWxlbmFtZX17XFBQfSUKKyAgICAgICAgXGFkdmFuY2VcZmlsZW5hbWVsZW5ndGggYnkgMQorICAgICAgXGZpCisgICAgXGZpCisgICAgXG5leHRzcH0KKyAgXGRlZlxnZXRmaWxlbmFtZSMxe1xmaWxlbmFtZWxlbmd0aD0wXGV4cGFuZGFmdGVyXHNraXBzcGFjZXMjMXxccmVsYXh9CisgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZmFubm90bGluaworICBcZWxzZQorICAgIFxsZXQgXHN0YXJ0bGluayBccGRmc3RhcnRsaW5rCisgIFxmaQorICAlIG1ha2UgYSBsaXZlIHVybCBpbiBwZGYgb3V0cHV0LgorICBcZGVmXHBkZnVybCMxeyUKKyAgICBcYmVnaW5ncm91cAorICAgICAgJSBpdCBzZWVtcyB3ZSByZWFsbHkgbmVlZCB5ZXQgYW5vdGhlciBzZXQgb2YgZHVtbWllczsgaGF2ZSBub3QKKyAgICAgICUgdHJpZWQgdG8gZmlndXJlIG91dCB3aGF0IGVhY2ggY29tbWFuZCBzaG91bGQgZG8gaW4gdGhlIGNvbnRleHQKKyAgICAgICUgb2YgQHVybC4gIGZvciBub3csIGp1c3QgbWFrZSBALyBhIG5vLW9wLCB0aGF0J3MgdGhlIG9ubHkgb25lCisgICAgICAlIHBlb3BsZSBoYXZlIGFjdHVhbGx5IHJlcG9ydGVkIGEgcHJvYmxlbSB3aXRoLgorICAgICAgJSAKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICAgICBcZGVmXEB7QH0lCisgICAgICBcbGV0XC89XGVtcHR5CisgICAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgICAgXGxlYXZldm1vZGVcUmVkCisgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgdXNlcnsvU3VidHlwZSAvTGluayAvQSA8PCAvUyAvVVJJIC9VUkkgKCMxKSA+Pn0lCisgICAgXGVuZGdyb3VwfQorICBcZGVmXHBkZmdldHRva3MjMS57XHNldGJveFxib3hBPVxoYm94e1x0b2tzQT17IzEufVx0b2tzQj17fVxtYWtldG9rc319CisgIFxkZWZcYWRkdG9rZW5zIzEjMntcZWRlZlxhZGR0b2tze1xub2V4cGFuZCMxPXtcdGhlIzEjMn19XGFkZHRva3N9CisgIFxkZWZcYWRuIzF7XGFkZHRva2Vuc3tcdG9rc0N9eyMxfVxnbG9iYWxcY291bnRBPTFcbGV0XG5leHQ9XG1ha2V0b2tzfQorICBcZGVmXHBvcHRva3MjMSMyfEVORFRPS1N8e1xsZXRcZmlyc3Q9IzFcdG9rc0Q9eyMxfVx0b2tzQT17IzJ9fQorICBcZGVmXG1ha2V0b2tzeyUKKyAgICBcZXhwYW5kYWZ0ZXJccG9wdG9rc1x0aGVcdG9rc0F8RU5EVE9LU3xccmVsYXgKKyAgICBcaWZ4XGZpcnN0MFxhZG4wCisgICAgXGVsc2VcaWZ4XGZpcnN0MVxhZG4xIFxlbHNlXGlmeFxmaXJzdDJcYWRuMiBcZWxzZVxpZnhcZmlyc3QzXGFkbjMKKyAgICBcZWxzZVxpZnhcZmlyc3Q0XGFkbjQgXGVsc2VcaWZ4XGZpcnN0NVxhZG41IFxlbHNlXGlmeFxmaXJzdDZcYWRuNgorICAgIFxlbHNlXGlmeFxmaXJzdDdcYWRuNyBcZWxzZVxpZnhcZmlyc3Q4XGFkbjggXGVsc2VcaWZ4XGZpcnN0OVxhZG45CisgICAgXGVsc2UKKyAgICAgIFxpZm51bTA9XGNvdW50QVxlbHNlXG1ha2VsaW5rXGZpCisgICAgICBcaWZ4XGZpcnN0LlxsZXRcbmV4dD1cZG9uZVxlbHNlCisgICAgICAgIFxsZXRcbmV4dD1cbWFrZXRva3MKKyAgICAgICAgXGFkZHRva2Vuc3tcdG9rc0J9e1x0aGVcdG9rc0R9CisgICAgICAgIFxpZnhcZmlyc3QsXGFkZHRva2Vuc3tcdG9rc0J9e1xzcGFjZX1cZmkKKyAgICAgIFxmaQorICAgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaQorICAgIFxuZXh0fQorICBcZGVmXG1ha2VsaW5re1xhZGR0b2tlbnN7XHRva3NCfSUKKyAgICB7XG5vZXhwYW5kXHBkZmxpbmt7XHRoZVx0b2tzQ319XHRva3NDPXt9XGdsb2JhbFxjb3VudEE9MH0KKyAgXGRlZlxwZGZsaW5rIzF7JQorICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19IGdvdG8gbmFtZXtccGRmbWtwZ257IzF9fQorICAgIFxsaW5rY29sb3IgIzFcZW5kbGlua30KKyAgXGRlZlxkb25le1xlZGVmXHN0e1xnbG9iYWxcbm9leHBhbmRcdG9rc0E9e1x0aGVcdG9rc0J9fVxzdH0KK1xlbHNlCisgIFxsZXRccGRmbWtkZXN0ID0gXGdvYmJsZQorICBcbGV0XHBkZnVybCA9IFxnb2JibGUKKyAgXGxldFxlbmRsaW5rID0gXHJlbGF4CisgIFxsZXRcbGlua2NvbG9yID0gXHJlbGF4CisgIFxsZXRccGRmbWFrZW91dGxpbmVzID0gXHJlbGF4CitcZmkgICUgXGlmeFxwZGZvdXRwdXQKKworCitcbWVzc2FnZXtmb250cyx9CisKKyUgQ2hhbmdlIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUgdG8gIzEsIHJlbWVtYmVyaW5nIGl0IGluIFxjdXJmb250c3R5bGUuCislIEZvciBub3csIHdlIGRvIG5vdCBhY2N1bXVsYXRlIGZvbnQgc3R5bGVzOiBAYntAaXtmb299fSBwcmludHMgZm9vIGluCislIGl0YWxpY3MsIG5vdCBib2xkIGl0YWxpY3MuCislCitcZGVmXHNldGZvbnRzdHlsZSMxeyUKKyAgXGRlZlxjdXJmb250c3R5bGV7IzF9JSBub3QgYXMgYSBjb250cm9sIHNlcXVlbmNlLCBiZWNhdXNlIHdlIGFyZSBcZWRlZidkLgorICBcY3NuYW1lIHRlbiMxXGVuZGNzbmFtZSAgJSBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udAorfQorCislIFNlbGVjdCAjMSBmb250cyB3aXRoIHRoZSBjdXJyZW50IHN0eWxlLgorJQorXGRlZlxzZWxlY3Rmb250cyMxe1xjc25hbWUgIzFmb250c1xlbmRjc25hbWUgXGNzbmFtZVxjdXJmb250c3R5bGVcZW5kY3NuYW1lfQorCitcZGVmXHJte1xmYW09MCBcc2V0Zm9udHN0eWxle3JtfX0KK1xkZWZcaXR7XGZhbT1caXRmYW0gXHNldGZvbnRzdHlsZXtpdH19CitcZGVmXHNse1xmYW09XHNsZmFtIFxzZXRmb250c3R5bGV7c2x9fQorXGRlZlxiZntcZmFtPVxiZmZhbSBcc2V0Zm9udHN0eWxle2JmfX1cZGVmXGJmc3R5bGVuYW1le2JmfQorXGRlZlx0dHtcZmFtPVx0dGZhbSBcc2V0Zm9udHN0eWxle3R0fX0KKworJSBUZXhpbmZvIHNvcnQgb2Ygc3VwcG9ydHMgdGhlIHNhbnMgc2VyaWYgZm9udCBzdHlsZSwgd2hpY2ggcGxhaW4gVGVYIGRvZXMgbm90LgorJSBTbyB3ZSBzZXQgdXAgYSBcc2YuCitcbmV3ZmFtXHNmZmFtCitcZGVmXHNme1xmYW09XHNmZmFtIFxzZXRmb250c3R5bGV7c2Z9fQorXGxldFxsaSA9IFxzZiAlIFNvbWV0aW1lcyB3ZSBjYWxsIGl0IFxsaSwgbm90IFxzZi4KKworJSBXZSBkb24ndCBuZWVkIG1hdGggZm9yIHRoaXMgZm9udCBzdHlsZS4KK1xkZWZcdHRzbHtcc2V0Zm9udHN0eWxle3R0c2x9fQorCislIERlZmF1bHQgbGVhZGluZy4KK1xuZXdkaW1lblx0ZXh0bGVhZGluZyAgXHRleHRsZWFkaW5nID0gMTMuMnB0CisKKyUgU2V0IHRoZSBiYXNlbGluZXNraXAgdG8gIzEsIGFuZCB0aGUgbGluZXNraXAgYW5kIHN0cnV0IHNpemUKKyUgY29ycmVzcG9uZGluZ2x5LiAgVGhlcmUgaXMgbm8gZGVlcCBtZWFuaW5nIGJlaGluZCB0aGVzZSBtYWdpYyBudW1iZXJzCislIHVzZWQgYXMgZmFjdG9yczsgdGhleSBqdXN0IG1hdGNoIChjbG9zZWx5IGVub3VnaCkgd2hhdCBLbnV0aCBkZWZpbmVkLgorJQorXGRlZlxsaW5lc2tpcGZhY3RvcnsuMDgzMzN9CitcZGVmXHN0cnV0aGVpZ2h0cGVyY2VudHsuNzA4MzN9CitcZGVmXHN0cnV0ZGVwdGhwZXJjZW50IHsuMjkxNjd9CislCitcZGVmXHNldGxlYWRpbmcjMXslCisgIFxub3JtYWxiYXNlbGluZXNraXAgPSAjMVxyZWxheAorICBcbm9ybWFsbGluZXNraXAgPSBcbGluZXNraXBmYWN0b3Jcbm9ybWFsYmFzZWxpbmVza2lwCisgIFxub3JtYWxiYXNlbGluZXMKKyAgXHNldGJveFxzdHJ1dGJveCA9XGhib3h7JQorICAgIFx2cnVsZSB3aWR0aDBwdCBoZWlnaHRcc3RydXRoZWlnaHRwZXJjZW50XGJhc2VsaW5lc2tpcAorICAgICAgICAgICAgICAgICAgICBkZXB0aCBcc3RydXRkZXB0aHBlcmNlbnQgXGJhc2VsaW5lc2tpcAorICB9JQorfQorCislIFNldCB0aGUgZm9udCBtYWNybyAjMSB0byB0aGUgZm9udCBuYW1lZCAjMiwgYWRkaW5nIG9uIHRoZQorJSBzcGVjaWZpZWQgZm9udCBwcmVmaXggKG5vcm1hbGx5IGBjbScpLgorJSAjMyBpcyB0aGUgZm9udCdzIGRlc2lnbiBzaXplLCAjNCBpcyBhIHNjYWxlIGZhY3RvcgorXGRlZlxzZXRmb250IzEjMiMzIzR7XGZvbnQjMT1cZm9udHByZWZpeCMyIzMgc2NhbGVkICM0fQorCislIFVzZSBjbSBhcyB0aGUgZGVmYXVsdCBmb250IHByZWZpeC4KKyUgVG8gc3BlY2lmeSB0aGUgZm9udCBwcmVmaXgsIHlvdSBtdXN0IGRlZmluZSBcZm9udHByZWZpeAorJSBiZWZvcmUgeW91IHJlYWQgaW4gdGV4aW5mby50ZXguCitcaWZ4XGZvbnRwcmVmaXhcdW5kZWZpbmVkCitcZGVmXGZvbnRwcmVmaXh7Y219CitcZmkKKyUgU3VwcG9ydCBmb250IGZhbWlsaWVzIHRoYXQgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWluZyBzY2hlbWUgYXMgQ00uCitcZGVmXHJtc2hhcGV7cn0KK1xkZWZccm1ic2hhcGV7Ynh9ICAgICAgICAgICAgICAgJXdoZXJlIHRoZSBub3JtYWwgZmFjZSBpcyBib2xkCitcZGVmXGJmc2hhcGV7Yn0KK1xkZWZcYnhzaGFwZXtieH0KK1xkZWZcdHRzaGFwZXt0dH0KK1xkZWZcdHRic2hhcGV7dHR9CitcZGVmXHR0c2xzaGFwZXtzbHR0fQorXGRlZlxpdHNoYXBle3RpfQorXGRlZlxpdGJzaGFwZXtieHRpfQorXGRlZlxzbHNoYXBle3NsfQorXGRlZlxzbGJzaGFwZXtieHNsfQorXGRlZlxzZnNoYXBle3NzfQorXGRlZlxzZmJzaGFwZXtzc30KK1xkZWZcc2NzaGFwZXtjc2N9CitcZGVmXHNjYnNoYXBle2NzY30KKworJSBUZXh0IGZvbnRzICgxMS4ycHQsIG1hZ3N0ZXAxKS4KK1xkZWZcdGV4dG5vbWluYWxzaXplezExcHR9CitcZWRlZlxtYWlubWFnc3RlcHtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0XHR0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRiZlxiZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0aXRcaXRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNsXHNsc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzZlxzZnNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Ncc2NzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHR0c2xcdHRzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9CitcZm9udFx0ZXh0aT1jbW1pMTAgc2NhbGVkIFxtYWlubWFnc3RlcAorXGZvbnRcdGV4dHN5PWNtc3kxMCBzY2FsZWQgXG1haW5tYWdzdGVwCisKKyUgQSBmZXcgZm9udHMgZm9yIEBkZWZ1biBuYW1lcyBhbmQgYXJncy4KK1xzZXRmb250XGRlZmJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0XHR0c2hhcGV7MTB9e1xtYWdzdGVwMX0KK1xzZXRmb250XGRlZnR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDF9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGxldFx0ZW50dHNsPVxkZWZ0dHNsIFxiZn0KKworJSBGb250cyBmb3IgaW5kaWNlcywgZm9vdG5vdGVzLCBzbWFsbCBleGFtcGxlcyAoOXB0KS4KK1xkZWZcc21hbGxub21pbmFsc2l6ZXs5cHR9Citcc2V0Zm9udFxzbWFsbHJtXHJtc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsdHRcdHRzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxiZlxiZnNoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbGl0XGl0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2xcc2xzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzZlxzZnNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNjXHNjc2hhcGV7MTB9ezkwMH0KK1xzZXRmb250XHNtYWxsdHRzbFx0dHNsc2hhcGV7MTB9ezkwMH0KK1xmb250XHNtYWxsaT1jbW1pOQorXGZvbnRcc21hbGxzeT1jbXN5OQorCislIEZvbnRzIGZvciBzbWFsbCBleGFtcGxlcyAoOHB0KS4KK1xkZWZcc21hbGxlcm5vbWluYWxzaXplezhwdH0KK1xzZXRmb250XHNtYWxsZXJybVxybXNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVydHRcdHRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcmJmXGJmc2hhcGV7MTB9ezgwMH0KK1xzZXRmb250XHNtYWxsZXJpdFxpdHNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2xcc2xzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNmXHNmc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzY1xzY3NoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVydHRzbFx0dHNsc2hhcGV7MTB9ezgwMH0KK1xmb250XHNtYWxsZXJpPWNtbWk4CitcZm9udFxzbWFsbGVyc3k9Y21zeTgKKworJSBGb250cyBmb3IgdGl0bGUgcGFnZSAoMjAuNHB0KToKK1xkZWZcdGl0bGVub21pbmFsc2l6ZXsyMHB0fQorXHNldGZvbnRcdGl0bGVybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGVpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGV0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAzfQorXHNldGZvbnRcdGl0bGV0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXHNldGZvbnRcdGl0bGVzZlxzZmJzaGFwZXsxN317XG1hZ3N0ZXAxfQorXGxldFx0aXRsZWJmPVx0aXRsZXJtCitcc2V0Zm9udFx0aXRsZXNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDR9CitcZm9udFx0aXRsZWk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDMKK1xmb250XHRpdGxlc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDQKK1xkZWZcYXV0aG9ycm17XHNlY3JtfQorXGRlZlxhdXRob3J0dHtcc2VjdHR9CisKKyUgQ2hhcHRlciAoYW5kIHVubnVtYmVyZWQpIGZvbnRzICgxNy4yOHB0KS4KK1xkZWZcY2hhcG5vbWluYWxzaXplezE3cHR9Citcc2V0Zm9udFxjaGFwcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXBpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDN9Citcc2V0Zm9udFxjaGFwdHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwMn0KK1xzZXRmb250XGNoYXB0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHNmXHNmYnNoYXBlezE3fXsxMDAwfQorXGxldFxjaGFwYmY9XGNoYXBybQorXHNldGZvbnRcY2hhcHNjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDN9CitcZm9udFxjaGFwaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMgorXGZvbnRcY2hhcHN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXAzCisKKyUgU2VjdGlvbiBmb250cyAoMTQuNHB0KS4KK1xkZWZcc2Vjbm9taW5hbHNpemV7MTRwdH0KK1xzZXRmb250XHNlY3JtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWNpdFxpdGJzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxzZWN0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXHNldGZvbnRcc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwMX0KK1xsZXRcc2VjYmZcc2Vjcm0KK1xzZXRmb250XHNlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDJ9CitcZm9udFxzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAxCitcZm9udFxzZWNzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMgorCislIFN1YnNlY3Rpb24gZm9udHMgKDEzLjE1cHQpLgorXGRlZlxzc2Vjbm9taW5hbHNpemV7MTNwdH0KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXsxMzE1fQorXGZvbnRcc3NlY2k9Y21taTEyIHNjYWxlZCBcbWFnc3RlcGhhbGYKK1xmb250XHNzZWNzeT1jbXN5MTAgc2NhbGVkIDEzMTUKKworJSBSZWR1Y2VkIGZvbnRzIGZvciBAYWNybyBpbiB0ZXh0ICgxMHB0KS4KK1xkZWZccmVkdWNlZG5vbWluYWxzaXplezEwcHR9Citcc2V0Zm9udFxyZWR1Y2Vkcm1ccm1zaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dFx0dHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGJmXGJmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkaXRcaXRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzbFxzbHNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNmXHNmc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2Ncc2NzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWR0dHNsXHR0c2xzaGFwZXsxMH17MTAwMH0KK1xmb250XHJlZHVjZWRpPWNtbWkxMAorXGZvbnRccmVkdWNlZHN5PWNtc3kxMAorCislIEluIG9yZGVyIGZvciB0aGUgZm9udCBjaGFuZ2VzIHRvIGFmZmVjdCBtb3N0IG1hdGggc3ltYm9scyBhbmQgbGV0dGVycywKKyUgd2UgaGF2ZSB0byBkZWZpbmUgdGhlIFx0ZXh0Zm9udCBvZiB0aGUgc3RhbmRhcmQgZmFtaWxpZXMuICBTaW5jZQorJSB0ZXhpbmZvIGRvZXNuJ3QgYWxsb3cgZm9yIHByb2R1Y2luZyBzdWJzY3JpcHRzIGFuZCBzdXBlcnNjcmlwdHMgZXhjZXB0CislIGluIHRoZSBtYWluIHRleHQsIHdlIGRvbid0IGJvdGhlciB0byByZXNldCBcc2NyaXB0Zm9udCBhbmQKKyUgXHNjcmlwdHNjcmlwdGZvbnQgKHdoaWNoIHdvdWxkIGFsc28gcmVxdWlyZSBsb2FkaW5nIGEgbG90IG1vcmUgZm9udHMpLgorJQorXGRlZlxyZXNldG1hdGhmb250c3slCisgIFx0ZXh0Zm9udDA9XHRlbnJtIFx0ZXh0Zm9udDE9XHRlbmkgXHRleHRmb250Mj1cdGVuc3kKKyAgXHRleHRmb250XGl0ZmFtPVx0ZW5pdCBcdGV4dGZvbnRcc2xmYW09XHRlbnNsIFx0ZXh0Zm9udFxiZmZhbT1cdGVuYmYKKyAgXHRleHRmb250XHR0ZmFtPVx0ZW50dCBcdGV4dGZvbnRcc2ZmYW09XHRlbnNmCit9CisKKyUgVGhlIGZvbnQtY2hhbmdpbmcgY29tbWFuZHMgcmVkZWZpbmUgdGhlIG1lYW5pbmdzIG9mIFx0ZW5TVFlMRSwgaW5zdGVhZAorJSBvZiBqdXN0IFxTVFlMRS4gIFdlIGRvIHRoaXMgYmVjYXVzZSBcU1RZTEUgbmVlZHMgdG8gYWxzbyBzZXQgdGhlCislIGN1cnJlbnQgXGZhbSBmb3IgbWF0aCBtb2RlLiAgT3VyIFxTVFlMRSAoZS5nLiwgXHJtKSBjb21tYW5kcyBoYXJkd2lyZQorJSBcdGVuU1RZTEUgdG8gc2V0IHRoZSBjdXJyZW50IGZvbnQuCislCislIEVhY2ggZm9udC1jaGFuZ2luZyBjb21tYW5kIGFsc28gc2V0cyB0aGUgbmFtZXMgXGxzaXplIChvbmUgc2l6ZSBsb3dlcikKKyUgYW5kIFxsbGxzaXplICh0aHJlZSBzaXplcyBsb3dlcikuICBUaGVzZSByZWxhdGl2ZSBjb21tYW5kcyBhcmUgdXNlZCBpbgorJSB0aGUgTGFUZVggbG9nbyBhbmQgYWNyb255bXMuCislCislIFRoaXMgYWxsIG5lZWRzIGdlbmVyYWxpemluZywgYmFkbHkuCislCitcZGVmXHRleHRmb250c3slCisgIFxsZXRcdGVucm09XHRleHRybSBcbGV0XHRlbml0PVx0ZXh0aXQgXGxldFx0ZW5zbD1cdGV4dHNsCisgIFxsZXRcdGVuYmY9XHRleHRiZiBcbGV0XHRlbnR0PVx0ZXh0dHQgXGxldFxzbWFsbGNhcHM9XHRleHRzYworICBcbGV0XHRlbnNmPVx0ZXh0c2YgXGxldFx0ZW5pPVx0ZXh0aSBcbGV0XHRlbnN5PVx0ZXh0c3kKKyAgXGxldFx0ZW50dHNsPVx0ZXh0dHRzbAorICBcZGVmXGN1cmZvbnRzaXple3RleHR9JQorICBcZGVmXGxzaXple3JlZHVjZWR9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfX0KK1xkZWZcdGl0bGVmb250c3slCisgIFxsZXRcdGVucm09XHRpdGxlcm0gXGxldFx0ZW5pdD1cdGl0bGVpdCBcbGV0XHRlbnNsPVx0aXRsZXNsCisgIFxsZXRcdGVuYmY9XHRpdGxlYmYgXGxldFx0ZW50dD1cdGl0bGV0dCBcbGV0XHNtYWxsY2Fwcz1cdGl0bGVzYworICBcbGV0XHRlbnNmPVx0aXRsZXNmIFxsZXRcdGVuaT1cdGl0bGVpIFxsZXRcdGVuc3k9XHRpdGxlc3kKKyAgXGxldFx0ZW50dHNsPVx0aXRsZXR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0aXRsZX0lCisgIFxkZWZcbHNpemV7Y2hhcH1cZGVmXGxsbHNpemV7c3Vic2VjfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezI1cHR9fQorXGRlZlx0aXRsZWZvbnQjMXt7XHRpdGxlZm9udHNccm0gIzF9fQorXGRlZlxjaGFwZm9udHN7JQorICBcbGV0XHRlbnJtPVxjaGFwcm0gXGxldFx0ZW5pdD1cY2hhcGl0IFxsZXRcdGVuc2w9XGNoYXBzbAorICBcbGV0XHRlbmJmPVxjaGFwYmYgXGxldFx0ZW50dD1cY2hhcHR0IFxsZXRcc21hbGxjYXBzPVxjaGFwc2MKKyAgXGxldFx0ZW5zZj1cY2hhcHNmIFxsZXRcdGVuaT1cY2hhcGkgXGxldFx0ZW5zeT1cY2hhcHN5CisgIFxsZXRcdGVudHRzbD1cY2hhcHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtjaGFwfSUKKyAgXGRlZlxsc2l6ZXtzZWN9XGRlZlxsbGxzaXple3RleHR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTlwdH19CitcZGVmXHNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc2Vjcm0gXGxldFx0ZW5pdD1cc2VjaXQgXGxldFx0ZW5zbD1cc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc2VjYmYgXGxldFx0ZW50dD1cc2VjdHQgXGxldFxzbWFsbGNhcHM9XHNlY3NjCisgIFxsZXRcdGVuc2Y9XHNlY3NmIFxsZXRcdGVuaT1cc2VjaSBcbGV0XHRlbnN5PVxzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzZWN9JQorICBcZGVmXGxzaXple3N1YnNlY31cZGVmXGxsbHNpemV7cmVkdWNlZH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNnB0fX0KK1xkZWZcc3Vic2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzc2Vjcm0gXGxldFx0ZW5pdD1cc3NlY2l0IFxsZXRcdGVuc2w9XHNzZWNzbAorICBcbGV0XHRlbmJmPVxzc2VjYmYgXGxldFx0ZW50dD1cc3NlY3R0IFxsZXRcc21hbGxjYXBzPVxzc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc3NlY3NmIFxsZXRcdGVuaT1cc3NlY2kgXGxldFx0ZW5zeT1cc3NlY3N5CisgIFxsZXRcdGVudHRzbD1cc3NlY3R0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzc2VjfSUKKyAgXGRlZlxsc2l6ZXt0ZXh0fVxkZWZcbGxsc2l6ZXtzbWFsbH0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNXB0fX0KK1xsZXRcc3Vic3Vic2VjZm9udHMgPSBcc3Vic2VjZm9udHMKK1xkZWZccmVkdWNlZGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1ccmVkdWNlZHJtIFxsZXRcdGVuaXQ9XHJlZHVjZWRpdCBcbGV0XHRlbnNsPVxyZWR1Y2Vkc2wKKyAgXGxldFx0ZW5iZj1ccmVkdWNlZGJmIFxsZXRcdGVudHQ9XHJlZHVjZWR0dCBcbGV0XHJlZHVjZWRjYXBzPVxyZWR1Y2Vkc2MKKyAgXGxldFx0ZW5zZj1ccmVkdWNlZHNmIFxsZXRcdGVuaT1ccmVkdWNlZGkgXGxldFx0ZW5zeT1ccmVkdWNlZHN5CisgIFxsZXRcdGVudHRzbD1ccmVkdWNlZHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtyZWR1Y2VkfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbH1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc21hbGxybSBcbGV0XHRlbml0PVxzbWFsbGl0IFxsZXRcdGVuc2w9XHNtYWxsc2wKKyAgXGxldFx0ZW5iZj1cc21hbGxiZiBcbGV0XHRlbnR0PVxzbWFsbHR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbHNjCisgIFxsZXRcdGVuc2Y9XHNtYWxsc2YgXGxldFx0ZW5pPVxzbWFsbGkgXGxldFx0ZW5zeT1cc21hbGxzeQorICBcbGV0XHRlbnR0c2w9XHNtYWxsdHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZXJmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxsZXJybSBcbGV0XHRlbml0PVxzbWFsbGVyaXQgXGxldFx0ZW5zbD1cc21hbGxlcnNsCisgIFxsZXRcdGVuYmY9XHNtYWxsZXJiZiBcbGV0XHRlbnR0PVxzbWFsbGVydHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsZXJzYworICBcbGV0XHRlbnNmPVxzbWFsbGVyc2YgXGxldFx0ZW5pPVxzbWFsbGVyaSBcbGV0XHRlbnN5PVxzbWFsbGVyc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbGVydHRzbAorICBcZGVmXGN1cmZvbnRzaXple3NtYWxsZXJ9JQorICBcZGVmXGxzaXple3NtYWxsZXJ9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7OS41cHR9fQorCislIFNldCB0aGUgZm9udHMgdG8gdXNlIHdpdGggdGhlIEBzbWFsbC4uLiBlbnZpcm9ubWVudHMuCitcbGV0XHNtYWxsZXhhbXBsZWZvbnRzID0gXHNtYWxsZm9udHMKKworJSBBYm91dCBcc21hbGxleGFtcGxlZm9udHMuICBJZiB3ZSB1c2UgXHNtYWxsZm9udHMgKDlwdCksIEBzbWFsbGV4YW1wbGUKKyUgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9ODYgICBzbWFsbGJvb2s9NzIgIGE0PTkwICBhNT02OQorJSBJZiB3ZSB1c2UgXHNjcmlwdGZvbnRzICg4cHQpLCB0aGVuIHdlIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTkwKyAgc21hbGxib29rPTgwICBhND05MCsgIGE1PTc3CislIEZvciBtZSwgc3ViamVjdGl2ZWx5LCB0aGUgZmV3IGV4dHJhIGNoYXJhY3RlcnMgdGhhdCBmaXQgYXJlbid0IHdvcnRoCislIHRoZSBhZGRpdGlvbmFsIHNtYWxsbmVzcyBvZiA4cHQuICBTbyBJJ20gbWFraW5nIHRoZSBkZWZhdWx0IDlwdC4KKyUKKyUgQnkgdGhlIHdheSwgZm9yIGNvbXBhcmlzb24sIGhlcmUncyB3aGF0IGZpdHMgd2l0aCBAZXhhbXBsZSAoMTBwdCk6CislICAgOC41eDExPTcxICBzbWFsbGJvb2s9NjAgIGE0PTc1ICBhNT01OAorJQorJSBJIHdpc2ggdGhlIFVTQSB1c2VkIEE0IHBhcGVyLgorJSAtLWthcmwsIDI0amFuMDMuCisKKworJSBTZXQgdXAgdGhlIGRlZmF1bHQgZm9udHMsIHNvIHdlIGNhbiB1c2UgdGhlbSBmb3IgY3JlYXRpbmcgYm94ZXMuCislCitcdGV4dGZvbnRzIFxybQorCislIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSBGb250cyBmb3Igc2hvcnQgdGFibGUgb2YgY29udGVudHMuCitcc2V0Zm9udFxzaG9ydGNvbnRybVxybXNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250YmZcYmZzaGFwZXsxMH17XG1hZ3N0ZXAxfSAgJSBubyBjbWIxMgorXHNldGZvbnRcc2hvcnRjb250c2xcc2xzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udHR0XHR0c2hhcGV7MTJ9ezEwMDB9CisKKyUlIEFkZCBzY3JpYmUtbGlrZSBmb250IGVudmlyb25tZW50cywgcGx1cyBAbCBmb3IgaW5saW5lIGxpc3AgKHVzdWFsbHkgc2FucworJSUgc2VyaWYpIGFuZCBAaWkgZm9yIFRlWCBpdGFsaWMKKworJSBcc21hcnRpdGFsaWN7QVJHfSBvdXRwdXRzIGFyZyBpbiBpdGFsaWNzLCBmb2xsb3dlZCBieSBhbiBpdGFsaWMgY29ycmVjdGlvbgorJSB1bmxlc3MgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgc3VjaCBhcyBub3QgdG8gbmVlZCBvbmUuCitcZGVmXHNtYXJ0aXRhbGljeHtcaWZ4XG5leHQsXGVsc2VcaWZ4XG5leHQtXGVsc2VcaWZ4XG5leHQuXGVsc2UKKyAgICAgICAgICAgICAgICAgICAgXHB0ZXhzbGFzaFxmaVxmaVxmaX0KK1xkZWZcc21hcnRzbGFudGVkIzF7e1xpZnVzaW5ndHRcdHRzbFxzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorXGRlZlxzbWFydGl0YWxpYyMxe3tcaWZ1c2luZ3R0XHR0c2xcaXQgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLgorJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCitcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX1cZnV0dXJlbGV0XG5leHRcc21hcnRpdGFsaWN4fQorCislIGxpa2UgXHNtYXJ0c2xhbnRlZCBleGNlcHQgdW5jb25kaXRpb25hbGx5IHVzZSBcc2wuICBXZSBuZXZlciB3YW50CislIHR0c2wgZm9yIGJvb2sgdGl0bGVzLCBkbyB3ZT8KK1xkZWZcY2l0ZSMxe3tcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworXGxldFxpPVxzbWFydGl0YWxpYworXGxldFxzbGFudGVkPVxzbWFydHNsYW50ZWQKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKKworJSBAYiwgZXhwbGljaXQgYm9sZC4KK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBAc2Fuc3NlcmlmLCBleHBsaWNpdCBzYW5zLgorXGRlZlxzYW5zc2VyaWYjMXt7XHNmICMxfX0KKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjaGFyZGVmXGNvbG9uQ2hhciA9IGBcOgorXGNoYXJkZWZcY29tbWFDaGFyID0gYFwsCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGV4Y2xhbUNoYXI9IGBcIQorXGNoYXJkZWZccXVlc3RDaGFyID0gYFw/CitcY2hhcmRlZlxzZW1pQ2hhciAgPSBgXDsKKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxwbGFpbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVcZG90Q2hhciAgPVxAbSBcc2Zjb2RlXHF1ZXN0Q2hhcj1cQG0gXHNmY29kZVxleGNsYW1DaGFyPVxAbQorICAgIFxzZmNvZGVcY29sb25DaGFyPVxAbSBcc2Zjb2RlXHNlbWlDaGFyID1cQG0gXHNmY29kZVxjb21tYUNoYXIgPVxAbQorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezEwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorICBcZGVmXHBsYWlubm9uZnJlbmNoc3BhY2luZ3slCisgICAgXHNmY29kZWBcLjMwMDBcc2Zjb2RlYFw/MzAwMFxzZmNvZGVgXCEzMDAwCisgICAgXHNmY29kZWBcOjIwMDBcc2Zjb2RlYFw7MTUwMFxzZmNvZGVgXCwxMjUwCisgICAgXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGZvciBALiBhbmQgZnJpZW5kcworICB9CitcY2F0Y29kZWBAPVxvdGhlcgorXGRlZlxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3J7MzAwMH0lIGRlZmF1bHQKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxudWxsCit9CitcZGVmXHNhbXAjMXtgXHRjbG9zZXsjMX0nXG51bGx9Citcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9CitcZm9udFxrZXlzeT1jbXN5OQorXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCisgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKKyAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAorICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKKyAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorJSBUaGUgb2xkIGRlZmluaXRpb24sIHdpdGggbm8gbG96ZW5nZToKKyVcZGVmXGtleSAjMXt7XHR0c2wgXG5vaHlwaGVuYXRpb24gXHVwcGVyY2FzZXsjMX19XG51bGx9CitcZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9CisKKyUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgorXGxldFxmaWxlPVxzYW1wCitcbGV0XG9wdGlvbj1cc2FtcAorCislIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAorJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCitcZGVmXHRjbG9zZSMxeyUKKyAgeyUKKyAgICAlIENoYW5nZSBub3JtYWwgaW50ZXJ3b3JkIHNwYWNlIHRvIGJlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IGZvbnQuCisgICAgXHNwYWNlc2tpcCA9IFxmb250ZGltZW4yXGZvbnQKKyAgICAlCisgICAgJSBTd2l0Y2ggdG8gdHlwZXdyaXRlci4KKyAgICBcdHQKKyAgICAlCisgICAgJSBCdXQgYFwgJyBwcm9kdWNlcyB0aGUgbGFyZ2UgdHlwZXdyaXRlciBpbnRlcndvcmQgc3BhY2UuCisgICAgXGRlZlwge3tcc3BhY2Vza2lwID0gMHB0e30gfX0lCisgICAgJQorICAgICUgVHVybiBvZmYgaHlwaGVuYXRpb24uCisgICAgXG5vaHlwaGVuYXRpb24KKyAgICAlCisgICAgXHJhd2JhY2tzbGFzaAorICAgIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgICAjMSUKKyAgfSUKKyAgXG51bGwKK30KKworJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBAY29kZS4KKyUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKKyUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCisKKyUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKKyUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCislIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCislIGFuZCBhcnJhbmdlIGV4cGxpY2l0bHkgdG8gaHlwaGVuYXRlIGF0IGEgZGFzaC4KKyUgIC0tIHJtcy4KK3sKKyAgXGNhdGNvZGVgXC09XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFwtPVxhY3RpdmUgIFxjYXRjb2RlYFxfPVxhY3RpdmUKKyAgICBcaWZhbGxvd2NvZGVicmVha3MKKyAgICAgXGxldC1cY29kZWRhc2gKKyAgICAgXGxldF9cY29kZXVuZGVyCisgICAgXGVsc2UKKyAgICAgXGxldC1ccmVhbGRhc2gKKyAgICAgXGxldF9ccmVhbHVuZGVyCisgICAgXGZpCisgICAgXGNvZGV4CisgIH0KK30KKworXGRlZlxyZWFsZGFzaHstfQorXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CitcZGVmXGNvZGV1bmRlcnslCisgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCisgICUgaXMgImFjdGl2ZSIgKG1hdGhjb2RlIjgwMDApIGFuZCBcbm9ybWFsdW5kZXJzY29yZSAob3IgXGNoYXI5NSwgZXRjLikKKyAgJSB3aWxsIHRoZXJlZm9yZSBleHBhbmQgdGhlIGFjdGl2ZSBkZWZpbml0aW9uIG9mIF8sIHdoaWNoIGlzIHVzCisgICUgKGluc2lkZSBAY29kZSB0aGF0IGlzKSwgdGhlcmVmb3JlIGFuIGVuZGxlc3MgbG9vcC4KKyAgXGlmdXNpbmd0dHtcaWZtbW9kZQorICAgICAgICAgICAgICAgXG1hdGhjaGFyIjA3NUYgJSBjbGFzcyAwPW9yZGluYXJ5LCBmYW1pbHkgNz10dGZhbSwgcG9zIDB4NUY9Xy4KKyAgICAgICAgICAgICBcZWxzZVxub3JtYWx1bmRlcnNjb3JlIFxmaQorICAgICAgICAgICAgIFxkaXNjcmV0aW9uYXJ5e317fXt9fSUKKyAgICAgICAgICAgIHtcX30lCit9CitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCislIEFuIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uOiB0aGUgYWJvdmUgd2lsbCBhbGxvdyBicmVha3MgYWZ0ZXIsIGUuZy4sCislIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgdW5kZXNpcmFibGUgaW4KKyUgc29tZSBtYW51YWxzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBsb25nIGlkZW50aWZpZXJzIGluCislIGdlbmVyYWwuICBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KKyUgCitcbmV3aWZcaWZhbGxvd2NvZGVicmVha3MgIFxhbGxvd2NvZGVicmVha3N0cnVlCisKK1xkZWZca2V5d29yZHRydWV7dHJ1ZX0KK1xkZWZca2V5d29yZGZhbHNle2ZhbHNlfQorCitccGFyc2VhcmdkZWZcYWxsb3djb2RlYnJlYWtzeyUKKyAgXGRlZlx0eGlhcmd7IzF9JQorICBcaWZ4XHR4aWFyZ1xrZXl3b3JkdHJ1ZQorICAgIFxhbGxvd2NvZGVicmVha3N0cnVlCisgIFxlbHNlXGlmeFx0eGlhcmdca2V5d29yZGZhbHNlCisgICAgXGFsbG93Y29kZWJyZWFrc2ZhbHNlCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBhbGxvd2NvZGVicmVha3Mgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaQorfQorCislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCisKKyUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCislICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCislICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCitccGFyc2VhcmdkZWZca2JkaW5wdXRzdHlsZXslCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdcd29yZGRpc3RpbmN0CisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHRzbH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGV4YW1wbGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlXGlmeFx0eGlhcmdcd29yZGNvZGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHR9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAa2JkaW5wdXRzdHlsZSBvcHRpb24gYFx0eGlhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KK1xkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KK1xkZWZcd29yZGNvZGV7Y29kZX0KKworJSBEZWZhdWx0IGlzIGBkaXN0aW5jdC4nCitca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAorCitcZGVmXHhrZXl7XGtleX0KK1xkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKK1xpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKK1xlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaX0KKworJSBGb3IgQGluZGljYXRldXJsLCBAZW52LCBAY29tbWFuZCBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwgc28gdXNlIFxjb2RlLgorXGxldFxpbmRpY2F0ZXVybD1cY29kZQorXGxldFxlbnY9XGNvZGUKK1xsZXRcY29tbWFuZD1cY29kZQorCislIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQorJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAorJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCislIGl0c2VsZi4gIEZpcnN0IChtYW5kYXRvcnkpIGFyZyBpcyB0aGUgdXJsLiAgUGVyaGFwcyBldmVudHVhbGx5IHB1dCBpbgorJSBhIGh5cGVydGV4IFxzcGVjaWFsIGhlcmUuCislCitcZGVmXHVyZWYjMXtcZG91cmVmICMxLCwsXGZpbmlzaH0KK1xkZWZcZG91cmVmIzEsIzIsIzMsIzRcZmluaXNoe1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBccGRmdXJseyMxfSUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfSUKKyAgXGlmZGltXHdkMCA+IDBwdAorICAgIFx1bmhib3gwICUgdGhpcmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgdGhhdAorICBcZWxzZQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGlmZGltXHdkMCA+IDBwdAorICAgICAgXGlmcGRmCisgICAgICAgIFx1bmhib3gwICAgICAgICAgICAgICUgUERGOiAybmQgYXJnIGdpdmVuLCBzaG93IG9ubHkgaXQKKyAgICAgIFxlbHNlCisgICAgICAgIFx1bmhib3gwXCAoXGNvZGV7IzF9KSUgRFZJOiAybmQgYXJnIGdpdmVuLCBzaG93IGJvdGggaXQgYW5kIHVybAorICAgICAgXGZpCisgICAgXGVsc2UKKyAgICAgIFxjb2RleyMxfSUgb25seSB1cmwgZ2l2ZW4sIHNvIHNob3cgaXQKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgQHVybCBzeW5vbnltIGZvciBAdXJlZiwgc2luY2UgdGhhdCdzIGhvdyBldmVyeW9uZSB1c2VzIGl0LgorJQorXGxldFx1cmw9XHVyZWYKKworJSBybXMgZG9lcyBub3QgbGlrZSBhbmdsZSBicmFja2V0cyAtLWthcmwsIDE3bWF5OTcuCislIFNvIG5vdyBAZW1haWwgaXMganVzdCBsaWtlIEB1cmVmLCB1bmxlc3Mgd2UgYXJlIHBkZi4KKyUKKyVcZGVmXGVtYWlsIzF7XGFuZ2xlbGVmdHtcdHQgIzF9XGFuZ2xlcmlnaHR9CitcaWZwZGYKKyAgXGRlZlxlbWFpbCMxe1xkb2VtYWlsIzEsLFxmaW5pc2h9CisgIFxkZWZcZG9lbWFpbCMxLCMyLCMzXGZpbmlzaHtcYmVnaW5ncm91cAorICAgIFx1bnNlcHNwYWNlcworICAgIFxwZGZ1cmx7bWFpbHRvOiMxfSUKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDA+MHB0XHVuaGJveDBcZWxzZVxjb2RleyMxfVxmaQorICAgIFxlbmRsaW5rCisgIFxlbmRncm91cH0KK1xlbHNlCisgIFxsZXRcZW1haWw9XHVyZWYKK1xmaQorCislIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCislIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCislIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCislIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZm1vbm9zcGFjZXtcaWZkaW1cZm9udGRpbWVuM1xmb250PTBwdCB9CisKKyUgVHlwZXNldCBhIGRpbWVuc2lvbiwgZS5nLiwgYGluJyBvciBgcHQnLiAgVGhlIG9ubHkgcmVhc29uIGZvciB0aGUKKyUgYXJndW1lbnQgaXMgdG8gbWFrZSB0aGUgaW5wdXQgbG9vayByaWdodDogQGRtbntwdH0gaW5zdGVhZCBvZiBAZG1ue31wdC4KKyUKK1xkZWZcZG1uIzF7XHRoaW5zcGFjZSAjMX0KKworXGRlZlxrYmQjMXtcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfQorCislIEBsIHdhcyBuZXZlciBkb2N1bWVudGVkIHRvIG1lYW4gYGBzd2l0Y2ggdG8gdGhlIExpc3AgZm9udCcnLAorJSBhbmQgaXQgaXMgbm90IHVzZWQgYXMgc3VjaCBpbiBhbnkgbWFudWFsIEkgY2FuIGZpbmQuICBXZSBuZWVkIGl0IGZvcgorJSBQb2xpc2ggc3VwcHJlc3NlZC1sLiAgLS1rYXJsLCAyMnNlcDk2LgorJVxkZWZcbCMxe3tcbGkgIzF9XG51bGx9CisKKyUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgorXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKK1xkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAorXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250CisKKyUgQGFjcm9ueW0gZm9yICJGQkkiLCAiTkFUTyIsIGFuZCB0aGUgbGlrZS4KKyUgV2UgcHJpbnQgdGhpcyBvbmUgcG9pbnQgc2l6ZSBzbWFsbGVyLCBzaW5jZSBpdCdzIGludGVuZGVkIGZvcgorJSBhbGwtdXBwZXJjYXNlLgorJSAKK1xkZWZcYWNyb255bSMxe1xkb2Fjcm9ueW0gIzEsLFxmaW5pc2h9CitcZGVmXGRvYWNyb255bSMxLCMyLCMzXGZpbmlzaHslCisgIHtcc2VsZWN0Zm9udHNcbHNpemUgIzF9JQorICBcZGVmXHRlbXB7IzJ9JQorICBcaWZ4XHRlbXBcZW1wdHkgXGVsc2UKKyAgICBcc3BhY2UgKHtcdW5zZXBzcGFjZXMgXGlnbm9yZXNwYWNlcyBcdGVtcCBcdW5za2lwfSklCisgIFxmaQorfQorCislIEBhYmJyIGZvciAiQ29tcHV0LiBKLiIgYW5kIHRoZSBsaWtlLgorJSBObyBmb250IGNoYW5nZSwgYnV0IGRvbid0IGRvIGVuZC1vZi1zZW50ZW5jZSBzcGFjaW5nLgorJSAKK1xkZWZcYWJiciMxe1xkb2FiYnIgIzEsLFxmaW5pc2h9CitcZGVmXGRvYWJiciMxLCMyLCMzXGZpbmlzaHslCisgIHtccGxhaW5mcmVuY2hzcGFjaW5nICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLCB3aGljaCBLbnV0aCBwdXQgaW4gdGhlIENNIGl0YWxpYyBmb250LgorJQorXGRlZlxwb3VuZHN7e1xpdFwkfX0KKworJSBAZXVyb3t9IGNvbWVzIGZyb20gYSBzZXBhcmF0ZSBmb250LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3R5bGUuCislIFdlIHVzZSB0aGUgZnJlZSBmZXltKiBmb250cyBmcm9tIHRoZSBldXJvc3ltIHBhY2thZ2UgYnkgSGVucmlrCislIFRoZWlsaW5nLCB3aGljaCBzdXBwb3J0IHJlZ3VsYXIsIHNsYW50ZWQsIGJvbGQgYW5kIGJvbGQgc2xhbnRlZCAoYW5kCislICJvdXRsaW5lZCIgKGJsYWNrYm9hcmQgYm9hcmQsIHNvcnQgb2YpIHZlcnNpb25zLCB3aGljaCB3ZSBkb24ndCBuZWVkKS4KKyUgSXQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9mb250cy9ldXJvc3ltLgorJSAKKyUgQWx0aG91Z2ggb25seSByZWd1bGFyIGlzIHRoZSB0cnVseSBvZmZpY2lhbCBFdXJvIHN5bWJvbCwgd2UgaWdub3JlCislIHRoYXQuICBUaGUgRXVybyBpcyBkZXNpZ25lZCB0byBiZSBzbGlnaHRseSB0YWxsZXIgdGhhbiB0aGUgcmVndWxhcgorJSBmb250IGhlaWdodC4KKyUgCislIGZleW1yIC0gcmVndWxhcgorJSBmZXltbyAtIHNsYW50ZWQKKyUgZmV5YnIgLSBib2xkCislIGZleWJvIC0gYm9sZCBzbGFudGVkCislIAorJSBUaGVyZSBpcyBubyBnb29kIChmcmVlKSB0eXBld3JpdGVyIHZlcnNpb24sIHRvIG15IGtub3dsZWRnZS4KKyUgQSBmZXltcjEwIGV1cm8gaXMgfjcuM3B0IHdpZGUsIHdoaWxlIGEgbm9ybWFsIGNtdHQxMCBjaGFyIGlzIH41LjI1cHQgd2lkZS4KKyUgSG1tLgorJSAKKyUgQWxzbyBkb2Vzbid0IHdvcmsgaW4gbWF0aC4gIERvIHdlIG5lZWQgdG8gZG8gbWF0aCB3aXRoIGV1cm8gc3ltYm9scz8KKyUgSG9wZSBub3QuCislIAorJSAKK1xkZWZcZXVyb3t7XGV1cm9mb250IGV9fQorXGRlZlxldXJvZm9udHslCisgICUgV2Ugc2V0IHRoZSBmb250IGF0IGVhY2ggY29tbWFuZCwgcmF0aGVyIHRoYW4gcHJlZGVmaW5pbmcgaXQgaW4KKyAgJSBcdGV4dGZvbnRzIGFuZCB0aGUgb3RoZXIgZm9udC1zd2l0Y2hpbmcgY29tbWFuZHMsIHNvIHRoYXQKKyAgJSBpbnN0YWxsYXRpb25zIHdoaWNoIG5ldmVyIG5lZWQgdGhlIHN5bWJvbCBkb24ndCBoYXZlIHRvIGhhdmUgdGhlCisgICUgZm9udCBpbnN0YWxsZWQuCisgICUgCisgICUgVGhlcmUgaXMgb25seSBvbmUgZGVzaWduZWQgc2l6ZSAobm9taW5hbCAxMHB0KSwgc28gd2UgYWx3YXlzIHNjYWxlCisgICUgdGhhdCB0byB0aGUgY3VycmVudCBub21pbmFsIHNpemUuCisgICUgCisgICUgQnkgdGhlIHdheSwgc2ltcGx5IHVzaW5nICJhdCAxZW0iIHdvcmtzIGZvciBjbXIxMCBhbmQgdGhlIGxpa2UsIGJ1dAorICAlIGRvZXMgbm90IHdvcmsgZm9yIGNtYngxMCBhbmQgb3RoZXIgZXh0ZW5kZWQvc2hydW5rZW4gZm9udHMuCisgICUgCisgIFxkZWZcZXVyb3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQorICAlCisgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lIAorICAgICUgYm9sZDoKKyAgICBcZm9udFx0aGlzZXVyb2ZvbnQgPSBcaWZ1c2luZ2l0e2ZleWJvMTB9e2ZleWJyMTB9IGF0IFxldXJvc2l6ZQorICBcZWxzZSAKKyAgICAlIHJlZ3VsYXI6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXltbzEwfXtmZXltcjEwfSBhdCBcZXVyb3NpemUKKyAgXGZpCisgIFx0aGlzZXVyb2ZvbnQKK30KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBUaGUgZm9udCBmb3IgdGhlIFIgc2hvdWxkIHJlYWxseQorJSBiZSBzbWFsbGVyIHlldCwgYnV0IGxsbHNpemUgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgUn0lCisgICAgICAgICAgICAgICBcaGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCislIExhdXJlbnQgU2llYmVubWFubiByZXBvcnRzIFxPcmIgdW5kZWZpbmVkIHdpdGg6CislICBUZXh0dXJlcyAxLjcuNyAocHJlbG9hZGVkIGZvcm1hdD1wbGFpbiA5My4xMC4xNCkgICg2OEspICAxNiBBUFIgMjAwNCAwMjozOAorJSBzbyB3ZSdsbCBkZWZpbmUgaXQgaWYgbmVjZXNzYXJ5LgorJSAKK1xpZnhcT3JiXHVuZGVmaW5lZAorXGRlZlxPcmJ7XG1hdGhoZXhib3gyMER9CitcZmkKKworCitcbWVzc2FnZXtwYWdlIGhlYWRpbmdzLH0KKworXG5ld3NraXBcdGl0bGVwYWdldG9wZ2x1ZSBcdGl0bGVwYWdldG9wZ2x1ZSA9IDEuNWluCitcbmV3c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlIFx0aXRsZXBhZ2Vib3R0b21nbHVlID0gMnBjCisKKyUgRmlyc3QgdGhlIHRpdGxlIHBhZ2UuICBNdXN0IGRvIEBzZXR0aXRsZSBiZWZvcmUgQHRpdGxlcGFnZS4KK1xuZXdpZlxpZnNlZW5hdXRob3IKK1xuZXdpZlxpZmZpbmlzaGVkdGl0bGVwYWdlCisKKyUgRG8gYW4gaW1wbGljaXQgQGNvbnRlbnRzIG9yIEBzaG9ydGNvbnRlbnRzIGFmdGVyIEBlbmQgdGl0bGVwYWdlIGlmIHRoZQorJSB1c2VyIHNheXMgQHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2Ugb3IgQHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZS4KKyUKK1xuZXdpZlxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKK1xuZXdpZlxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZXRydWUKKworXHBhcnNlYXJnZGVmXHNob3J0dGl0bGVwYWdle1xiZWdpbmdyb3VwXGhib3h7fVx2c2tpcCAxLjVpbiBcY2hhcHJtIFxjZW50ZXJsaW5leyMxfSUKKyAgICAgICAgXGVuZGdyb3VwXHBhZ2VcaGJveHt9XHBhZ2V9CisKK1xlbnZkZWZcdGl0bGVwYWdleyUKKyAgJSBPcGVuIG9uZSBleHRyYSBncm91cCwgYXMgd2Ugd2FudCB0byBjbG9zZSBpdCBpbiB0aGUgbWlkZGxlIG9mIFxFdGl0bGVwYWdlLgorICBcYmVnaW5ncm91cAorICAgIFxwYXJpbmRlbnQ9MHB0IFx0ZXh0Zm9udHMKKyAgICAlIExlYXZlIHNvbWUgc3BhY2UgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBwYWdlLgorICAgIFx2Z2x1ZVx0aXRsZXBhZ2V0b3BnbHVlCisgICAgJSBObyBydWxlIGF0IHBhZ2UgYm90dG9tIHVubGVzcyB3ZSBwcmludCBvbmUgYXQgdGhlIHRvcCB3aXRoIEB0aXRsZS4KKyAgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCisgICAgJQorICAgICUgTW9zdCB0aXRsZSBgYHBhZ2VzJycgYXJlIGFjdHVhbGx5IHR3byBwYWdlcyBsb25nLCB3aXRoIHNwYWNlCisgICAgJSBhdCB0aGUgdG9wIG9mIHRoZSBzZWNvbmQuICBXZSBkb24ndCB3YW50IHRoZSByYWdnZWQgbGVmdCBvbiB0aGUgc2Vjb25kLgorICAgIFxsZXRcb2xkcGFnZSA9IFxwYWdlCisgICAgXGRlZlxwYWdleyUKKyAgICAgIFxpZmZpbmlzaGVkdGl0bGVwYWdlXGVsc2UKKwkgXGZpbmlzaHRpdGxlcGFnZQorICAgICAgXGZpCisgICAgICBcbGV0XHBhZ2UgPSBcb2xkcGFnZQorICAgICAgXHBhZ2UKKyAgICAgIFxudWxsCisgICAgfSUKK30KKworXGRlZlxFdGl0bGVwYWdleyUKKyAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJXGZpbmlzaHRpdGxlcGFnZQorICAgIFxmaQorICAgICUgSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoZSBwYWdlIGJyZWFrIGJlZm9yZSBlbmRpbmcgdGhlIGdyb3VwLAorICAgICUgYmVjYXVzZSB0aGUgaGVhZGxpbmUgYW5kIGZvb3RsaW5lIGFyZSBvbmx5IGVtcHR5IGluc2lkZSB0aGUgZ3JvdXAuCisgICAgJSBJZiB3ZSB1c2UgdGhlIG5ldyBkZWZpbml0aW9uIG9mIFxwYWdlLCB3ZSBhbHdheXMgZ2V0IGEgYmxhbmsgcGFnZQorICAgICUgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2UsIHdoaWNoIHdlIGNlcnRhaW5seSBkb24ndCB3YW50LgorICAgIFxvbGRwYWdlCisgIFxlbmRncm91cAorICAlCisgICUgTmVlZCB0aGlzIGJlZm9yZSB0aGUgXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyBzbyB0aGF0IGlmIHRoZXkgYXJlCisgICUgaW4gZWZmZWN0IHRoZSB0b2MgcGFnZXMgd2lsbCBjb21lIG91dCB3aXRoIHBhZ2UgbnVtYmVycy4KKyAgXEhFQURJTkdTb24KKyAgJQorICAlIElmIHRoZXkgd2FudCBzaG9ydCwgdGhleSBjZXJ0YWlubHkgd2FudCBsb25nIHRvby4KKyAgXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgICAgXHNob3J0Y29udGVudHMKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxzaG9ydGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgXGZpCisgICUKKyAgXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxjb250ZW50cworICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICBcZmkKK30KKworXGRlZlxmaW5pc2h0aXRsZXBhZ2V7JQorICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCAycHQgd2lkdGggXGhzaXplCisgIFx2c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlCisgIFxmaW5pc2hlZHRpdGxlcGFnZXRydWUKK30KKworJSUlIE1hY3JvcyB0byBiZSB1c2VkIHdpdGhpbiBAdGl0bGVwYWdlOgorCitcbGV0XHN1YnRpdGxlcm09XHRlbnJtCitcZGVmXHN1YnRpdGxlZm9udHtcc3VidGl0bGVybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTNwdCBcbm9ybWFsYmFzZWxpbmVzfQorCitcZGVmXGF1dGhvcmZvbnR7XGF1dGhvcnJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxNnB0IFxub3JtYWxiYXNlbGluZXMKKwkJXGxldFx0dD1cYXV0aG9ydHR9CisKK1xwYXJzZWFyZ2RlZlx0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgXGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtICMxfQorICAlIHByaW50IGEgcnVsZSBhdCB0aGUgcGFnZSBib3R0b20gYWxzby4KKyAgXGZpbmlzaGVkdGl0bGVwYWdlZmFsc2UKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgNHB0IHdpZHRoIFxoc2l6ZSBcdnNraXA0cHQKK30KKworXHBhcnNlYXJnZGVmXHN1YnRpdGxleyUKKyAgXGNoZWNrZW52XHRpdGxlcGFnZQorICB7XHN1YnRpdGxlZm9udCBccmlnaHRsaW5leyMxfX0lCit9CisKKyUgQGF1dGhvciBzaG91bGQgY29tZSBsYXN0LCBidXQgbWF5IGNvbWUgbWFueSB0aW1lcy4KKyUgSXQgY2FuIGFsc28gYmUgdXNlZCBpbnNpZGUgQHF1b3RhdGlvbi4KKyUKK1xwYXJzZWFyZ2RlZlxhdXRob3J7JQorICBcZGVmXHRlbXB7XHF1b3RhdGlvbn0lCisgIFxpZnhcdGhpc2Vudlx0ZW1wCisgICAgXGRlZlxxdW90YXRpb25hdXRob3J7IzF9JSBwcmludGVkIGluIFxFcXVvdGF0aW9uLgorICBcZWxzZQorICAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAgICBcaWZzZWVuYXV0aG9yXGVsc2UgXHZza2lwIDBwdCBwbHVzIDFmaWxsbCBcc2VlbmF1dGhvcnRydWUgXGZpCisgICAge1xhdXRob3Jmb250IFxsZWZ0bGluZXsjMX19JQorICBcZmkKK30KKworCislJSUgU2V0IHVwIHBhZ2UgaGVhZGluZ3MgYW5kIGZvb3RpbmdzLgorCitcbGV0XHRoaXNwYWdlPVxmb2xpbworCitcbmV3dG9rc1xldmVuaGVhZGxpbmUgICAgJSBoZWFkbGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRoZWFkbGluZSAgICAgJSBoZWFkbGluZSBvbiBvZGQgcGFnZXMKK1xuZXd0b2tzXGV2ZW5mb290bGluZSAgICAlIGZvb3RsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGZvb3RsaW5lICAgICAlIGZvb3RsaW5lIG9uIG9kZCBwYWdlcworCislIE5vdyBtYWtlIFRlWCB1c2UgdGhvc2UgdmFyaWFibGVzCitcaGVhZGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRoZWFkbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmhlYWRsaW5lIFxmaX19CitcZm9vdGxpbmU9e3tcdGV4dGZvbnRzXHJtIFxpZm9kZFxwYWdlbm8gXHRoZVxvZGRmb290bGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbHNlIFx0aGVcZXZlbmZvb3RsaW5lIFxmaX1cSEVBRElOR1Nob29rfQorXGxldFxIRUFESU5HU2hvb2s9XHJlbGF4CisKKyUgQ29tbWFuZHMgdG8gc2V0IHRob3NlIHZhcmlhYmxlcy4KKyUgRm9yIGV4YW1wbGUsIHRoaXMgaXMgd2hhdCAgQGhlYWRpbmdzIG9uICBkb2VzCislIEBldmVuaGVhZGluZyBAdGhpc3RpdGxlfEB0aGlzcGFnZXxAdGhpc2NoYXB0ZXIKKyUgQG9kZGhlYWRpbmcgQHRoaXNjaGFwdGVyfEB0aGlzcGFnZXxAdGhpc3RpdGxlCislIEBldmVuZm9vdGluZyBAdGhpc2ZpbGV8fAorJSBAb2RkZm9vdGluZyB8fEB0aGlzZmlsZQorCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxldmVuaGVhZGluZ3h4eCAjMXtcZXZlbmhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5oZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGhlYWRpbmd7XHBhcnNlYXJnXG9kZGhlYWRpbmd4eHh9CitcZGVmXG9kZGhlYWRpbmd4eHggIzF7XG9kZGhlYWRpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGhlYWRpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXHBhcnNlYXJnZGVmXGV2ZXJ5aGVhZGluZ3tcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXGV2ZW5mb290aW5neHh4ICMxe1xldmVuZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcZXZlbmZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xkZWZcb2RkZm9vdGluZ3tccGFyc2Vhcmdcb2RkZm9vdGluZ3h4eH0KK1xkZWZcb2RkZm9vdGluZ3h4eCAjMXtcb2RkZm9vdGluZ3l5eSAjMVx8XHxcfFx8XGZpbmlzaH0KK1xkZWZcb2RkZm9vdGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorICBcZ2xvYmFsXG9kZGZvb3RsaW5lID0ge1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fSUKKyAgJQorICAlIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBmb290bGluZS4gIEhvcGVmdWxseSBvayB0byBhc3N1bWUKKyAgJSBAZXZlbmZvb3Rpbmcgd2lsbCBub3QgYmUgdXNlZCBieSBpdHNlbGYuCisgIFxnbG9iYWxcYWR2YW5jZVxwYWdlaGVpZ2h0IGJ5IC1cYmFzZWxpbmVza2lwCisgIFxnbG9iYWxcYWR2YW5jZVx2c2l6ZSBieSAtXGJhc2VsaW5lc2tpcAorfQorCitccGFyc2VhcmdkZWZcZXZlcnlmb290aW5ne1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CisKKworJSBAaGVhZGluZ3MgZG91YmxlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIGRvdWJsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIHNpbmdsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBvZmYgICAgICAgICB0dXJucyB0aGVtIG9mZi4KKyUgQGhlYWRpbmdzIG9uICAgICAgICAgIHNhbWUgYXMgQGhlYWRpbmdzIGRvdWJsZSwgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCislIEBoZWFkaW5ncyBhZnRlciAgICAgICB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3MgZG91YmxlYWZ0ZXIgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIHNpbmdsZWFmdGVyIHR1cm5zIG9uIHNpbmdsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEJ5IGRlZmF1bHQsIHRoZXkgYXJlIG9mZiBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudCwKKyUgYW5kIHR1cm5lZCBgb24nIGFmdGVyIEBlbmQgdGl0bGVwYWdlLgorCitcZGVmXGhlYWRpbmdzICMxIHtcY3NuYW1lIEhFQURJTkdTIzFcZW5kY3NuYW1lfQorCitcZGVmXEhFQURJTkdTb2ZmeyUKK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfX0KK1xIRUFESU5HU29mZgorJSBXaGVuIHdlIHR1cm4gaGVhZGluZ3Mgb24sIHNldCB0aGUgcGFnZSBudW1iZXIgdG8gMS4KKyUgRm9yIGRvdWJsZS1zaWRlZCBwcmludGluZywgcHV0IGN1cnJlbnQgZmlsZSBuYW1lIGluIGxvd2VyIGxlZnQgY29ybmVyLAorJSBjaGFwdGVyIG5hbWUgb24gaW5zaWRlIHRvcCBvZiByaWdodCBoYW5kIHBhZ2VzLCBkb2N1bWVudAorJSB0aXRsZSBvbiBpbnNpZGUgdG9wIG9mIGxlZnQgaGFuZCBwYWdlcywgYW5kIHBhZ2UgbnVtYmVycyBvbiBvdXRzaWRlIHRvcAorJSBlZGdlIG9mIGFsbCBwYWdlcy4KK1xkZWZcSEVBRElOR1Nkb3VibGV7JQorXGdsb2JhbFxwYWdlbm89MQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCisKKyUgRm9yIHNpbmdsZS1zaWRlZCBwcmludGluZywgY2hhcHRlciB0aXRsZSBnb2VzIGFjcm9zcyB0b3AgbGVmdCBvZiBwYWdlLAorJSBwYWdlIG51bWJlciBvbiB0b3AgcmlnaHQuCitcZGVmXEhFQURJTkdTc2luZ2xleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KK1xkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9CisKK1xkZWZcSEVBRElOR1NhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1Nkb3VibGV4fQorXGxldFxIRUFESU5HU2RvdWJsZWFmdGVyPVxIRUFESU5HU2FmdGVyCitcZGVmXEhFQURJTkdTZG91YmxleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CisKK1xkZWZcSEVBRElOR1NzaW5nbGVhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1NzaW5nbGV4fQorXGRlZlxIRUFESU5HU3NpbmdsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorCislIFN1YnJvdXRpbmVzIHVzZWQgaW4gZ2VuZXJhdGluZyBoZWFkaW5ncworJSBUaGlzIHByb2R1Y2VzIERheSBNb250aCBZZWFyIHN0eWxlIG9mIG91dHB1dC4KKyUgT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZCwgaW4gY2FzZSBhIHR4aS0/Py50ZXggZmlsZSBoYXMgc2V0CislIHVwIGEgZGlmZmVyZW50IGZvcm1hdCAoZS5nLiwgdHhpLWNzLnRleCBkb2VzIHRoaXMpLgorXGlmeFx0b2RheVx1bmRlZmluZWQKK1xkZWZcdG9kYXl7JQorICBcbnVtYmVyXGRheVxzcGFjZQorICBcaWZjYXNlXG1vbnRoCisgIFxvclxwdXR3b3JkTUphblxvclxwdXR3b3JkTUZlYlxvclxwdXR3b3JkTU1hclxvclxwdXR3b3JkTUFwcgorICBcb3JccHV0d29yZE1NYXlcb3JccHV0d29yZE1KdW5cb3JccHV0d29yZE1KdWxcb3JccHV0d29yZE1BdWcKKyAgXG9yXHB1dHdvcmRNU2VwXG9yXHB1dHdvcmRNT2N0XG9yXHB1dHdvcmRNTm92XG9yXHB1dHdvcmRNRGVjCisgIFxmaQorICBcc3BhY2VcbnVtYmVyXHllYXJ9CitcZmkKKworJSBAc2V0dGl0bGUgbGluZS4uLiAgc3BlY2lmaWVzIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciBoZWFkaW5ncy4KKyUgSXQgZ2VuZXJhdGVzIG5vIG91dHB1dCBvZiBpdHMgb3duLgorXGRlZlx0aGlzdGl0bGV7XHB1dHdvcmROb1RpdGxlfQorXGRlZlxzZXR0aXRsZXtccGFyc2Vhcmd7XGdkZWZcdGhpc3RpdGxlfX0KKworCitcbWVzc2FnZXt0YWJsZXMsfQorJSBUYWJsZXMgLS0gQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLCBAaXRlbSh4KS4KKworJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIHRhYmxlIHRleHQKK1xuZXdkaW1lblx0YWJsZWluZGVudCBcdGFibGVpbmRlbnQ9LjhpbgorJSBkZWZhdWx0IGluZGVudGF0aW9uIG9mIEBpdGVtaXplIGFuZCBAZW51bWVyYXRlIHRleHQKK1xuZXdkaW1lblxpdGVtaW5kZW50ICBcaXRlbWluZGVudD0uM2luCislIG1hcmdpbiBiZXR3ZWVuIGVuZCBvZiB0YWJsZSBpdGVtIGFuZCBzdGFydCBvZiB0YWJsZSB0ZXh0LgorXG5ld2RpbWVuXGl0ZW1tYXJnaW4gIFxpdGVtbWFyZ2luPS4xaW4KKworJSB1c2VkIGludGVybmFsbHkgZm9yIFxpdGVtaW5kZW50IG1pbnVzIFxpdGVtbWFyZ2luCitcbmV3ZGltZW5caXRlbW1heAorCislIE5vdGUgQHRhYmxlLCBAZnRhYmxlLCBhbmQgQHZ0YWJsZSBkZWZpbmUgQGl0ZW0sIEBpdGVteCwgZXRjLiwgd2l0aAorJSB0aGVzZSBkZWZzLgorJSBUaGV5IGFsc28gZGVmaW5lIFxpdGVtaW5kZXgKKyUgdG8gaW5kZXggdGhlIGl0ZW0gbmFtZSBpbiB3aGF0ZXZlciBtYW5uZXIgaXMgZGVzaXJlZCAocGVyaGFwcyBub25lKS4KKworXG5ld2lmXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXAKKworXGRlZlxpdGVteHBhcntccGFyXGlmaXRlbXhuZWVkc25lZ2F0aXZldnNraXBcbm9icmVha1x2c2tpcC1ccGFyc2tpcFxub2JyZWFrXGZpfQorCitcZGVmXGludGVybmFsQml0ZW17XHNtYWxsYnJlYWsgXHBhcnNlYXJnXGl0ZW16enp9CitcZGVmXGludGVybmFsQml0ZW14e1xpdGVteHBhciBccGFyc2VhcmdcaXRlbXp6en0KKworXGRlZlxpdGVtenp6ICMxe1xiZWdpbmdyb3VwICUKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVx0YWJsZWluZGVudAorICBcc2V0Ym94MD1caGJveHtcaXRlbWluZGljYXRleyMxfX0lCisgIFxpdGVtaW5kZXh7IzF9JQorICBcbm9icmVhayAlIFRoaXMgcHJldmVudHMgYSBicmVhayBiZWZvcmUgQGl0ZW14LgorICAlCisgICUgSWYgdGhlIGl0ZW0gdGV4dCBkb2VzIG5vdCBmaXQgaW4gdGhlIHNwYWNlIHdlIGhhdmUsIHB1dCBpdCBvbiBhIGxpbmUKKyAgJSBieSBpdHNlbGYsIGFuZCBkbyBub3QgYWxsb3cgYSBwYWdlIGJyZWFrIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhhdAorICAlIGxpbmUuICBXZSBkbyBub3Qgc3RhcnQgYSBwYXJhZ3JhcGggaGVyZSBiZWNhdXNlIHRoZW4gaWYgdGhlIG5leHQKKyAgJSBjb21tYW5kIGlzLCBlLmcuLCBAa2luZGV4LCB0aGUgd2hhdHNpdCB3b3VsZCBnZXQgcHV0IGludG8gdGhlCisgICUgaG9yaXpvbnRhbCBsaXN0IG9uIGEgbGluZSBieSBpdHNlbGYsIHJlc3VsdGluZyBpbiBleHRyYSBibGFuayBzcGFjZS4KKyAgXGlmZGltIFx3ZDA+XGl0ZW1tYXgKKyAgICAlCisgICAgJSBNYWtlIHRoaXMgYSBwYXJhZ3JhcGggc28gd2UgZ2V0IHRoZSBccGFyc2tpcCBnbHVlIGFuZCB3cmFwcGluZywKKyAgICAlIGJ1dCBsZWF2ZSBpdCByYWdnZWQtcmlnaHQuCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5LVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VcaHNpemUgYnlcdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieTBwdCBwbHVzMWZpbAorICAgICAgXGxlYXZldm1vZGVcdW5oYm94MFxwYXIKKyAgICBcZW5kZ3JvdXAKKyAgICAlCisgICAgJSBXZSdyZSBnb2luZyB0byBiZSBzdGFydGluZyBhIHBhcmFncmFwaCwgYnV0IHdlIGRvbid0IHdhbnQgdGhlCisgICAgJSBccGFyc2tpcCBnbHVlIC0tIGxvZ2ljYWxseSBpdCdzIHBhcnQgb2YgdGhlIEBpdGVtIHdlIGp1c3Qgc3RhcnRlZC4KKyAgICBcbm9icmVhayBcdnNraXAtXHBhcnNraXAKKyAgICAlCisgICAgJSBTdG9wIGEgcGFnZSBicmVhayBhdCB0aGUgXHBhcnNraXAgZ2x1ZSBjb21pbmcgdXAuICBIb3dldmVyLCBpZgorICAgICUgd2hhdCBmb2xsb3dzIGlzIGFuIGVudmlyb25tZW50IHN1Y2ggYXMgQGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgbm8KKyAgICAlIFxwYXJza2lwIGdsdWU7IHRoZW4gdGhlIG5lZ2F0aXZlIHZza2lwIHdlIGp1c3QgaW5zZXJ0ZWQgd291bGQKKyAgICAlIGNhdXNlIHRoZSBleGFtcGxlIGFuZCB0aGUgaXRlbSB0byBjcmFzaCB0b2dldGhlci4gIFNvIHdlIHVzZSB0aGlzCisgICAgJSBiaXphcnJlIHZhbHVlIG9mIDEwMDAxIGFzIGEgc2lnbmFsIHRvIFxhYm92ZWVudmJyZWFrIHRvIGluc2VydAorICAgICUgXHBhcnNraXAgZ2x1ZSBhZnRlciBhbGwuICBTZWN0aW9uIHRpdGxlcyBhcmUgaGFuZGxlZCB0aGlzIHdheSBhbHNvLgorICAgICUgCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CitcZGVmXGl0ZW14e1xlcnJtZXNzYWdle0BpdGVteCB3aGlsZSBub3QgaW4gYSBsaXN0IGVudmlyb25tZW50fX0KKworJSBAdGFibGUsIEBmdGFibGUsIEB2dGFibGUuCitcZW52ZGVmXHRhYmxleyUKKyAgXGxldFxpdGVtaW5kZXhcZ29iYmxlCisgIFx0YWJsZWNoZWNre3RhYmxlfSUKK30KK1xlbnZkZWZcZnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7Zm59e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7ZnRhYmxlfSUKK30KK1xlbnZkZWZcdnRhYmxleyUKKyAgXGRlZlxpdGVtaW5kZXggIyMxe1xkb2luZCB7dnJ9e1xjb2RleyMjMX19fSUKKyAgXHRhYmxlY2hlY2t7dnRhYmxlfSUKK30KK1xkZWZcdGFibGVjaGVjayMxeyUKKyAgXGlmbnVtIFx0aGVcY2F0Y29kZWBcXl5NPVxhY3RpdmUKKyAgICBcZW5kZ3JvdXAKKyAgICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgd29uJ3Qgd29yayBpbiB0aGlzIGNvbnRleHQ7IHBlcmhhcHMgdGhlIHByb2JsZW0gaXMKKyAgICAgIHRoYXQgd2UgYXJlIFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorICAgIFxkZWZcbmV4dHtcZG9pZ25vcmV7IzF9fSUKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcdGFibGV4CisgIFxmaQorICBcbmV4dAorfQorXGRlZlx0YWJsZXgjMXslCisgIFxkZWZcaXRlbWluZGljYXRleyMxfSUKKyAgXHBhcnNlYXJnXHRhYmxleQorfQorXGRlZlx0YWJsZXkjMXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZWRlZlx0ZW1we1xub2V4cGFuZFx0YWJsZXogIzFcc3BhY2Vcc3BhY2Vcc3BhY2V9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAgXGVuZHRhYmxlegorfQorXGRlZlx0YWJsZXogIzEgIzIgIzMgIzRcZW5kdGFibGV6eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGlmbnVtIDAjMT4wIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSAjMVxtaWwgXGZpCisgIFxpZm51bSAwIzI+MCBcdGFibGVpbmRlbnQ9IzJcbWlsIFxmaQorICBcaWZudW0gMCMzPjAgXGFkdmFuY2UgXHJpZ2h0c2tpcCBieSAjM1xtaWwgXGZpCisgIFxpdGVtbWF4PVx0YWJsZWluZGVudAorICBcYWR2YW5jZSBcaXRlbW1heCBieSAtXGl0ZW1tYXJnaW4KKyAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFx0YWJsZWluZGVudAorICBcZXhkZW50YW1vdW50PVx0YWJsZWluZGVudAorICBccGFyaW5kZW50ID0gMHB0CisgIFxwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW0gXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGxldFxpdGVtID0gXGludGVybmFsQml0ZW0KKyAgXGxldFxpdGVteCA9IFxpbnRlcm5hbEJpdGVteAorfQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha30KK1xsZXRcRWZ0YWJsZVxFdGFibGUKK1xsZXRcRXZ0YWJsZVxFdGFibGUKK1xsZXRcRWl0ZW1pemVcRXRhYmxlCitcbGV0XEVlbnVtZXJhdGVcRXRhYmxlCisKKyUgVGhpcyBpcyB0aGUgY291bnRlciB1c2VkIGJ5IEBlbnVtZXJhdGUsIHdoaWNoIGlzIHJlYWxseSBAaXRlbWl6ZQorCitcbmV3Y291bnQgXGl0ZW1ubworCitcZW52ZGVmXGl0ZW1pemV7XHBhcnNlYXJnXGRvaXRlbWl6ZX0KKworXGRlZlxkb2l0ZW1pemUjMXslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpdGVtbWF4PVxpdGVtaW5kZW50CisgIFxhZHZhbmNlXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxpdGVtaW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGl0ZW1pbmRlbnQKKyAgXHBhcmluZGVudD0wcHQKKyAgXHBhcnNraXA9XHNtYWxsc2tpcGFtb3VudAorICBcaWZkaW1ccGFyc2tpcD0wcHQgXHBhcnNraXA9MnB0IFxmaQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZS4KKyUKK1xkZWZcaXRlbWl6ZWl0ZW17JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgMSAgJSBmb3IgZW51bWVyYXRpb25zCisgIHtcbGV0XHBhcj1cZW5kZ3JhZiBcc21hbGxicmVha30lIHJlYXNvbmFibGUgcGxhY2UgdG8gYnJlYWsKKyAgeyUKKyAgICUgSWYgdGhlIGRvY3VtZW50IGhhcyBhbiBAaXRlbWl6ZSBkaXJlY3RseSBhZnRlciBhIHNlY3Rpb24gdGl0bGUsIGEKKyAgICUgXG5vYnJlYWsgd2lsbCBiZSBsYXN0IG9uIHRoZSBsaXN0LCBhbmQgXHNlY3Rpb25oZWFkaW5nIHdpbGwgaGF2ZQorICAgJSBkb25lIGEgXHZza2lwLVxwYXJza2lwLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHplcm8KKyAgICUgcGFyc2tpcCwgb3IgdGhlIGl0ZW0gdGV4dCB3aWxsIGNyYXNoIHdpdGggdGhlIGhlYWRpbmcuICBPbiB0aGUKKyAgICUgb3RoZXIgaGFuZCwgd2hlbiB0aGVyZSBpcyBub3JtYWwgdGV4dCBwcmVjZWRpbmcgdGhlIGl0ZW0gKGFzIHRoZXJlCisgICAlIHVzdWFsbHkgaXMpLCB3ZSBkbyB3YW50IHRvIHplcm8gcGFyc2tpcCwgb3IgdGhlcmUgd291bGQgYmUgdG9vIG11Y2gKKyAgICUgc3BhY2UuICBJbiB0aGF0IGNhc2UsIHdlIHdvbid0IGhhdmUgYSBcbm9icmVhayBiZWZvcmUuICBBdCBsZWFzdAorICAgJSB0aGF0J3MgdGhlIHRoZW9yeS4KKyAgIFxpZm51bVxsYXN0cGVuYWx0eTwxMDAwMCBccGFyc2tpcD0waW4gXGZpCisgICBcbm9pbmRlbnQKKyAgIFxoYm94IHRvIDBwdHtcaHNzIFxpdGVtY29udGVudHMgXGtlcm5caXRlbW1hcmdpbn0lCisgICBcdmFkanVzdHtccGVuYWx0eSAxMjAwfX0lIG5vdCBnb29kIHRvIGJyZWFrIGFmdGVyIGZpcnN0IGxpbmUgb2YgaXRlbS4KKyAgXGZsdXNoY3IKK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGVudnBhcnNlYXJnZGVmXGVudW1lcmF0ZXtcZW51bWVyYXRleSAjMSAgXGVuZGVudW1lcmF0ZXl9CitcZGVmXGVudW1lcmF0ZXkgIzEgIzJcZW5kZW51bWVyYXRleXslCisgICUgSWYgd2Ugd2VyZSBnaXZlbiBubyBhcmd1bWVudCwgcHJldGVuZCB3ZSB3ZXJlIGdpdmVuIGAxJy4KKyAgXGRlZlx0aGVhcmd7IzF9JQorICBcaWZ4XHRoZWFyZ1xlbXB0eSBcZGVmXHRoZWFyZ3sxfVxmaQorICAlCisgICUgRGV0ZWN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpbmdsZSB0b2tlbi4gIElmIHNvLCBpdCBtaWdodCBiZSBhCisgICUgbGV0dGVyLiAgT3RoZXJ3aXNlLCB0aGUgb25seSB2YWxpZCB0aGluZyBpdCBjYW4gYmUgaXMgYSBudW1iZXIuCisgICUgKFdlIHdpbGwgYWx3YXlzIGhhdmUgb25lIHRva2VuLCBiZWNhdXNlIG9mIHRoZSB0ZXN0IHdlIGp1c3QgbWFkZS4KKyAgJSBUaGlzIGlzIGEgZ29vZCB0aGluZywgc2luY2UgXHNwbGl0b2ZmIGRvZXNuJ3Qgd29yayBnaXZlbiBub3RoaW5nIGF0CisgICUgYWxsIC0tIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdW5kZWxpbWl0ZWQuKQorICBcZXhwYW5kYWZ0ZXJcc3BsaXRvZmZcdGhlYXJnXGVuZG1hcmsKKyAgXGlmeFxyZXN0XGVtcHR5CisgICAgJSBPbmx5IG9uZSB0b2tlbiBpbiB0aGUgYXJndW1lbnQuICBJdCBjb3VsZCBzdGlsbCBiZSBhbnl0aGluZy4KKyAgICAlIEEgYGBsb3dlcmNhc2UgbGV0dGVyJycgaXMgb25lIHdob3NlIFxsY2NvZGUgaXMgbm9uemVyby4KKyAgICAlIEFuIGBgdXBwZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIGJvdGggbm9uemVybywgYW5kCisgICAgJSAgIG5vdCBlcXVhbCB0byBpdHNlbGYuCisgICAgJSBPdGhlcndpc2UsIHdlIGFzc3VtZSBpdCdzIGEgbnVtYmVyLgorICAgICUKKyAgICAlIFdlIG5lZWQgdGhlIFxyZWxheCBhdCB0aGUgZW5kIG9mIHRoZSBcaWZudW0gbGluZXMgdG8gc3RvcCBUZVggZnJvbQorICAgICUgY29udGludWluZyB0byBsb29rIGZvciBhIDxudW1iZXI+LgorICAgICUKKyAgICBcaWZudW1cbGNjb2RlXGV4cGFuZGFmdGVyYFx0aGVhcmc9MFxyZWxheAorICAgICAgXG51bWVyaWNlbnVtZXJhdGUgJSBhIG51bWJlciAod2UgaG9wZSkKKyAgICBcZWxzZQorICAgICAgJSBJdCdzIGEgbGV0dGVyLgorICAgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPVxleHBhbmRhZnRlcmBcdGhlYXJnXHJlbGF4CisgICAgICAgIFxsb3dlcmNhc2VlbnVtZXJhdGUgJSBsb3dlcmNhc2UgbGV0dGVyCisgICAgICBcZWxzZQorICAgICAgICBcdXBwZXJjYXNlZW51bWVyYXRlICUgdXBwZXJjYXNlIGxldHRlcgorICAgICAgXGZpCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBNdWx0aXBsZSB0b2tlbnMgaW4gdGhlIGFyZ3VtZW50LiAgV2UgaG9wZSBpdCdzIGEgbnVtYmVyLgorICAgIFxudW1lcmljZW51bWVyYXRlCisgIFxmaQorfQorCislIEFuIEBlbnVtZXJhdGUgd2hvc2UgbGFiZWxzIGFyZSBpbnRlZ2Vycy4gIFRoZSBzdGFydGluZyBpbnRlZ2VyIGlzCislIGdpdmVuIGluIFx0aGVhcmcuCislCitcZGVmXG51bWVyaWNlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXHRoZWFyZworICBcc3RhcnRlbnVtZXJhdGlvbntcdGhlXGl0ZW1ub30lCit9CisKKyUgVGhlIHN0YXJ0aW5nIChsb3dlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlxsb3dlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSBsb3dlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fSUKKyAgICBcZmkKKyAgICBcY2hhclxsY2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgVGhlIHN0YXJ0aW5nICh1cHBlcmNhc2UpIGxldHRlciBpcyBpbiBcdGhlYXJnLgorXGRlZlx1cHBlcmNhc2VlbnVtZXJhdGV7JQorICBcaXRlbW5vID0gXGV4cGFuZGFmdGVyYFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257JQorICAgICUgQmUgc3VyZSB3ZSdyZSBub3QgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFscGhhYmV0LgorICAgIFxpZm51bVxpdGVtbm89MAorICAgICAgXGVycm1lc3NhZ2V7Tm8gbW9yZSB1cHBlcmNhc2UgbGV0dGVycyBpbiBAZW51bWVyYXRlOyBnZXQgYSBiaWdnZXIKKyAgICAgICAgICAgICAgICAgIGFscGhhYmV0fQorICAgIFxmaQorICAgIFxjaGFyXHVjY29kZVxpdGVtbm8KKyAgfSUKK30KKworJSBDYWxsIFxkb2l0ZW1pemUsIGFkZGluZyBhIHBlcmlvZCB0byB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHN1cHBseWluZyB0aGUKKyUgY29tbW9uIGxhc3QgdHdvIGFyZ3VtZW50cy4gIEFsc28gc3VidHJhY3Qgb25lIGZyb20gdGhlIGluaXRpYWwgdmFsdWUgaW4KKyUgXGl0ZW1ubywgc2luY2UgQGl0ZW0gaW5jcmVtZW50cyBcaXRlbW5vLgorJQorXGRlZlxzdGFydGVudW1lcmF0aW9uIzF7JQorICBcYWR2YW5jZVxpdGVtbm8gYnkgLTEKKyAgXGRvaXRlbWl6ZXsjMS59XGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCisKKyUgRWFjaCBuZXcgdGFibGUgbGluZSBzdGFydHMgd2l0aCBAaXRlbSwgZWFjaCBzdWJzZXF1ZW50IG5ldyBjb2x1bW4KKyUgc3RhcnRzIHdpdGggQHRhYi4gRW1wdHkgY29sdW1ucyBtYXkgYmUgcHJvZHVjZWQgYnkgc3VwcGx5aW5nIEB0YWIncworJSB3aXRoIG5vdGhpbmcgYmV0d2VlbiB0aGVtIGZvciBhcyBtYW55IHRpbWVzIGFzIGVtcHR5IGNvbHVtbnMgYXJlIG5lZWRlZCwKKyUgaWUsIEB0YWJAdGFiQHRhYiB3aWxsIHByb2R1Y2UgdHdvIGVtcHR5IGNvbHVtbnMuCisKKyUgQGl0ZW0sIEB0YWIgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydAorJSBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIEBjb2x1bW5mcmFjdGlvbiwgdXN1YWxseSBhIGRlY2ltYWwgbnVtYmVyIGxpa2UgLjUsIGJ1dCBtaWdodAorJSBiZSBqdXN0IDEuICBXZSBqdXN0IHVzZSBpdCwgd2hhdGV2ZXIgaXQgaXMuCislCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMSB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7IzFcaHNpemV9JQorICBcc2V0dXB0YWJsZQorfQorCitcbmV3Y291bnRcY29sY291bnQKK1xkZWZcc2V0dXB0YWJsZSMxeyUKKyAgXGRlZlxmaXJzdGFyZ3sjMX0lCisgIFxpZnhcZmlyc3RhcmdceGVuZHNldHVwdGFibGUKKyAgICBcbGV0XGdvID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGlmeFxmaXJzdGFyZ1x4Y29sdW1uZnJhY3Rpb25zCisgICAgICBcZ2xvYmFsXHNldHBlcmNlbnR0cnVlCisgICAgXGVsc2UKKyAgICAgIFxpZnNldHBlcmNlbnQKKyAgICAgICAgIFxsZXRcZ29ccGlja3Vwd2hvbGVmcmFjdGlvbgorICAgICAgXGVsc2UKKyAgICAgICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgICAgICBcc2V0Ym94MD1caGJveHsjMVx1bnNraXBcc3BhY2V9JSBBZGQgYSBub3JtYWwgd29yZCBzcGFjZSBhcyBhCisgICAgICAgICAgICAgICAgICAgJSBzZXBhcmF0b3I7IHR5cGljYWxseSB0aGF0IGlzIGFsd2F5cyBpbiB0aGUgaW5wdXQsIGFueXdheS4KKyAgICAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZXtcdGhlXHdkMH0lCisgICAgICBcZmkKKyAgICBcZmkKKyAgICBcaWZ4XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgICUgUHV0IHRoZSBhcmd1bWVudCBiYWNrIGZvciB0aGUgXHBpY2t1cHdob2xlZnJhY3Rpb24gY2FsbCwgc28KKyAgICAgICUgd2UnbGwgYWx3YXlzIGhhdmUgYSBwZXJpb2QgdGhlcmUgdG8gYmUgcGFyc2VkLgorICAgICAgXGRlZlxnb3tccGlja3Vwd2hvbGVmcmFjdGlvbiMxfSUKKyAgICBcZWxzZQorICAgICAgXGxldFxnbyA9IFxzZXR1cHRhYmxlCisgICAgXGZpJQorICBcZmkKKyAgXGdvCit9CisKKyUgbXVsdGl0YWJsZS1vbmx5IGNvbW1hbmRzLgorJQorJSBAaGVhZGl0ZW0gc3RhcnRzIGEgaGVhZGluZyByb3csIHdoaWNoIHdlIHR5cGVzZXQgaW4gYm9sZC4KKyUgQXNzaWdubWVudHMgaGF2ZSB0byBiZSBnbG9iYWwgc2luY2Ugd2UgYXJlIGluc2lkZSB0aGUgaW1wbGljaXQgZ3JvdXAKKyUgb2YgYW4gYWxpZ25tZW50IGVudHJ5LiAgTm90ZSB0aGF0IFxldmVyeWNyIHJlc2V0cyBcZXZlcnl0YWIuCitcZGVmXGhlYWRpdGVte1xjaGVja2VudlxtdWx0aXRhYmxlIFxjcmNyIFxnbG9iYWxcZXZlcnl0YWI9e1xiZn1cdGhlXGV2ZXJ5dGFifSUKKyUKKyUgQSBcdGFiIHVzZWQgdG8gaW5jbHVkZSBcaHNraXAxc3AuICBCdXQgdGhlbiB0aGUgc3BhY2UgaW4gYSB0ZW1wbGF0ZQorJSBsaW5lIGlzIG5vdCBlbm91Z2guICBUaGF0IGlzIGJhZC4gIFNvIGxldCdzIGdvIGJhY2sgdG8ganVzdCBgJicgdW50aWwKKyUgd2UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhZ2Fpbi4KKyUJCQkJCS0ta2FybCwgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCitcZGVmXHRhYntcY2hlY2tlbnZcbXVsdGl0YWJsZSAmXHRoZVxldmVyeXRhYn0lCisKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSBkZWZpbml0aW9uczoKKyUKK1xuZXd0b2tzXGV2ZXJ5dGFiICAlIGluc2VydCBhZnRlciBldmVyeSB0YWIuCislCitcZW52ZGVmXG11bHRpdGFibGV7JQorICBcdnNraXBccGFyc2tpcAorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBAaXRlbSB3aXRoaW4gYSBtdWx0aXRhYmxlIHN0YXJ0cyBhIG5vcm1hbCByb3cuCisgICUgV2UgdXNlIFxkZWYgaW5zdGVhZCBvZiBcbGV0IHNvIHRoYXQgaWYgb25lIG9mIHRoZSBtdWx0aXRhYmxlIGVudHJpZXMKKyAgJSBjb250YWlucyBhbiBAaXRlbWl6ZSwgd2UgZG9uJ3QgY2hva2Ugb24gdGhlIFxpdGVtIChzZWVuIGFzIFxjcmNyIGFrYQorICAlIFxlbmR0ZW1wbGF0ZSkgZXhwYW5kaW5nIFxkb2l0ZW1pemUuCisgIFxkZWZcaXRlbXtcY3Jjcn0lCisgICUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgJQorICBcZXZlcnljciA9IHslCisgICAgXG5vYWxpZ257JQorICAgICAgXGdsb2JhbFxldmVyeXRhYj17fSUKKyAgICAgIFxnbG9iYWxcY29sY291bnQ9MCAlIFJlc2V0IHRoZSBjb2x1bW4gY291bnRlci4KKyAgICAgICUgQ2hlY2sgZm9yIHNhdmVkIGZvb3Rub3RlcywgZXRjLgorICAgICAgXGNoZWNraW5zZXJ0cworICAgICAgJSBLZWVwcyB1bmRlcmZ1bGwgYm94IG1lc3NhZ2VzIG9mZiB3aGVuIHRhYmxlIGJyZWFrcyBvdmVyIHBhZ2VzLgorICAgICAgJVxmaWxicmVhaworCSUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlCisJJSB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4gV291bGRuJ3QgXHZmaWwgYmUgYmV0dGVyPyAgV2FpdCB1bnRpbCB0aGUKKwklIHByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZiwgc28gaXQgY2FuIGJlIGZpeGVkIGZvciByZWFsIC0ta2FybC4KKyAgICB9JQorICB9JQorICAlCisgIFxwYXJzZWFyZ1xkb211bHRpdGFibGUKK30KK1xkZWZcZG9tdWx0aXRhYmxlIzF7JQorICAlIFRvIHBhcnNlIGV2ZXJ5dGhpbmcgYmV0d2VlbiBAbXVsdGl0YWJsZSBhbmQgQGl0ZW06CisgIFxzZXR1cHRhYmxlIzEgXGVuZHNldHVwdGFibGUKKyAgJQorICAlIFRoaXMgcHJlYW1ibGUgc2V0cyB1cCBhIGdlbmVyaWMgY29sdW1uIGRlZmluaXRpb24sIHdoaWNoIHdpbGwKKyAgJSBiZSB1c2VkIGFzIG1hbnkgdGltZXMgYXMgdXNlciBjYWxscyBmb3IgY29sdW1ucy4KKyAgJSBcdnRvcCB3aWxsIHNldCBhIHNpbmdsZSBsaW5lIGFuZCB3aWxsIGFsc28gbGV0IHRleHQgd3JhcCBhbmQKKyAgJSBjb250aW51ZSBmb3IgbWFueSBwYXJhZ3JhcGhzIGlmIGRlc2lyZWQuCisgIFxoYWxpZ25cYmdyb3VwICYlCisgICAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgICBcbXVsdGlzdHJ1dAorICAgIFx2dG9weyUKKyAgICAgICUgVXNlIHRoZSBjdXJyZW50IFxjb2xjb3VudCB0byBmaW5kIHRoZSBjb3JyZWN0IGNvbHVtbiB3aWR0aDoKKyAgICAgIFxoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICAgICAlCisgICAgICAlIEluIG9yZGVyIHRvIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyCisgICAgICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgICAgICUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICUKKyAgICAgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICAgICAlIHRvIHRoZSB3aWR0aCBvZiBlYWNoIHRlbXBsYXRlIGVudHJ5LgorICAgICAgJQorICAgICAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgICAgICUgdXNlIHRoYXQgZGltZW5zaW9uIGFzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uLCBhbmQgdGhlIFxsZWZ0c2tpcAorICAgICAgJSB3aWxsIGtlZXAgZW50cmllcyBmcm9tIGJ1bXBpbmcgaW50byBlYWNoIG90aGVyLiAgVGFibGUgd2lsbCBzdGFydCBhdAorICAgICAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICAgICAlCisgICAgICAlIE1ha2Ugc3VyZSB3ZSBkb24ndCBpbmhlcml0IFxyaWdodHNraXAgZnJvbSB0aGUgb3V0ZXIgZW52aXJvbm1lbnQuCisgICAgICBccmlnaHRza2lwPTBwdAorICAgICAgXGlmbnVtXGNvbGNvdW50PTEKKwklIFRoZSBmaXJzdCBjb2x1bW4gd2lsbCBiZSBpbmRlbnRlZCB3aXRoIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorCVxhZHZhbmNlXGhzaXplIGJ5XGxlZnRza2lwCisgICAgICBcZWxzZQorCVxpZnNldHBlcmNlbnQgXGVsc2UKKwkgICUgSWYgdXNlciBoYXMgbm90IHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZQorCSAgJSB3ZSB3aWxsIGFkdmFuY2UgXGhzaXplIGJ5IFxtdWx0aXRhYmxlY29sc3BhY2UuCisJICBcYWR2YW5jZVxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlCisJXGZpCisgICAgICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgICAgICBcbGVmdHNraXA9XG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgXGZpCisgICAgICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAgICAgJSBibGFuayBsaW5lLCB3aGVuIFRlWCBkZWNpZGVzIHRvIGJyZWFrIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBiZWZvcmUgdGhlCisgICAgICAlIGJveCBmcm9tIHRoZSBtdWx0aXN0cnV0LCBzbyB0aGUgc3RydXQgZW5kcyB1cCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgJSBGb3IgZXhhbXBsZToKKyAgICAgICUgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMTEgLjg5CisgICAgICAlIEBpdGVtIEBjb2RleyN9CisgICAgICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgICAgICUgSXMgYXV0b21hdGljYWxseSBwcm92aWRlZCB3aXRoIGhpZ2hsaWdodGluZyBzZXF1ZW5jZXMgcmVzcGVjdGl2ZWx5CisgICAgICAlIG1hcmtpbmcgY2hhcmFjdGVycy4KKyAgICAgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dAorICAgIH1cY3IKK30KK1xkZWZcRW11bHRpdGFibGV7JQorICBcY3JjcgorICBcZWdyb3VwICUgZW5kIHRoZSBcaGFsaWduCisgIFxnbG9iYWxcc2V0cGVyY2VudGZhbHNlCit9CisKK1xkZWZcc2V0bXVsdGl0YWJsZXNwYWNpbmd7JQorICBcZGVmXG11bHRpc3RydXR7XHN0cnV0fSUganVzdCB1c2UgdGhlIHN0YW5kYXJkIGxpbmUgc3BhY2luZworICAlCisgICUgQ29tcHV0ZSBcbXVsdGl0YWJsZWxpbmVzcGFjZSAoaWYgbm90IGRlZmluZWQgYnkgdXNlcikgZm9yIHVzZSBpbgorICAlIFxtdWx0aXRhYmxlcGFyc2tpcCBjYWxjdWxhdGlvbi4gIFdlIHVzZWQgZGVmaW5lIFxtdWx0aXN0cnV0IGJhc2VkIG9uCisgICUgdGhpcywgYnV0IChpcm9uaWNhbGx5KSB0aGF0IGNhdXNlZCB0aGUgc3BhY2luZyB0byBiZSBvZmYuCisgICUgU2VlIGJ1Zy10ZXhpbmZvIHJlcG9ydCBmcm9tIFdlcm5lciBMZW1iZXJnLCAzMSBPY3QgMjAwNCAxMjo1MjoyMCArMDEwMC4KK1xpZmRpbVxtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorXHNldGJveDA9XHZib3h7WH1cZ2xvYmFsXG11bHRpdGFibGVsaW5lc3BhY2U9XHRoZVxiYXNlbGluZXNraXAKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlbGluZXNwYWNlIGJ5LVxodDAKK1xmaQorJSUgVGVzdCB0byBzZWUgaWYgcGFyc2tpcCBpcyBsYXJnZXIgdGhhbiBzcGFjZSBiZXR3ZWVuIGxpbmVzIG9mCislJSB0YWJsZS4gSWYgbm90LCBkbyBub3RoaW5nLgorJSUgICAgICAgIElmIHNvLCBzZXQgdG8gc2FtZSBkaW1lbnNpb24gYXMgbXVsdGl0YWJsZWxpbmVzcGFjZS4KK1xpZmRpbVxtdWx0aXRhYmxlcGFyc2tpcD5cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZmklCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA9MHB0CitcZ2xvYmFsXG11bHRpdGFibGVwYXJza2lwPVxtdWx0aXRhYmxlbGluZXNwYWNlCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZXBhcnNraXAtN3B0ICUlIHRvIGtlZXAgcGFyc2tpcCBzb21ld2hhdCBzbWFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIHRoYW4gc2tpcCBiZXR3ZWVuIGxpbmVzIGluIHRoZSB0YWJsZS4KK1xmaX0KKworCitcbWVzc2FnZXtjb25kaXRpb25hbHMsfQorCislIEBpZnRleCwgQGlmbm90ZG9jYm9vaywgQGlmbm90aHRtbCwgQGlmbm90aW5mbywgQGlmbm90cGxhaW50ZXh0LAorJSBAaWZub3R4bWwgYWx3YXlzIHN1Y2NlZWQuICBUaGV5IGN1cnJlbnRseSBkbyBub3RoaW5nOyB3ZSBkb24ndAorJSBhdHRlbXB0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFscyBhcmUgcHJvcGVybHkgbmVzdGVkLiAgQnV0IHdlCislIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB0aGV5IGFyZSBjb25kaXRpb25hbHMsIHNvIHRoYXQgQGVuZCBkb2Vzbid0CislIGF0dGVtcHQgdG8gY2xvc2UgYW4gZW52aXJvbm1lbnQgZ3JvdXAuCislCitcZGVmXG1ha2Vjb25kIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSAjMVxlbmRjc25hbWUgPSBccmVsYXgKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNjb25kLiMxXGVuZGNzbmFtZSA9IDEKK30KK1xtYWtlY29uZHtpZnRleH0KK1xtYWtlY29uZHtpZm5vdGRvY2Jvb2t9CitcbWFrZWNvbmR7aWZub3RodG1sfQorXG1ha2Vjb25ke2lmbm90aW5mb30KK1xtYWtlY29uZHtpZm5vdHBsYWludGV4dH0KK1xtYWtlY29uZHtpZm5vdHhtbH0KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcZG9jYm9va3tcZG9pZ25vcmV7ZG9jYm9va319CitcZGVmXGh0bWx7XGRvaWdub3Jle2h0bWx9fQorXGRlZlxpZmRvY2Jvb2t7XGRvaWdub3Jle2lmZG9jYm9va319CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgU2NhbiBpbiBgYHZlcmJhdGltJycgbW9kZToKKyAgXG9iZXlsaW5lcworICBcY2F0Y29kZWBcQCA9IFxvdGhlcgorICBcY2F0Y29kZWBceyA9IFxvdGhlcgorICBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICAlCisgICUgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIHR1cm4gaW50byB0b2tlbnMgdGhhdCBtYXRjaCB3aGF0IFxkb2lnbm9yZXRleHQgd2FudHMuCisgIFxzcGFjZWlzc3BhY2UKKyAgJQorICAlIENvdW50IG51bWJlciBvZiAjMSdzIHRoYXQgd2UndmUgc2Vlbi4KKyAgXGRvaWdub3JlY291bnQgPSAwCisgICUKKyAgJSBTd2FsbG93IHRleHQgdW50aWwgd2UgcmVhY2ggdGhlIG1hdGNoaW5nIGBAZW5kICMxJy4KKyAgXGRvZG9pZ25vcmV7IzF9JQorfQorCit7IFxjYXRjb2RlYF89MTEgJSBXZSB3YW50IHRvIHVzZSBcX1NUT1BfIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gdGV4aW5mbyBzb3VyY2UuCisgIFxvYmV5bGluZXMgJQorICAlCisgIFxnZGVmXGRvZG9pZ25vcmUjMXslCisgICAgJSAjMSBjb250YWlucyB0aGUgY29tbWFuZCBuYW1lIGFzIGEgc3RyaW5nLCBlLmcuLCBgaWZpbmZvJy4KKyAgICAlCisgICAgJSBEZWZpbmUgYSBjb21tYW5kIHRvIGZpbmQgdGhlIG5leHQgYEBlbmQgIzEnLgorICAgIFxsb25nXGRlZlxkb2lnbm9yZXRleHQjIzFeXk1AZW5kICMxeyUKKyAgICAgIFxkb2lnbm9yZXRleHR5eXkjIzFeXk1AIzFcX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NQCMxIyMyXF9TVE9QX3tcZG9pZ25vcmV5eXl7IyMyfVxfU1RPUF99JQorICAgICUKKyAgICAlIEFuZCBub3cgZXhwYW5kIHRoYXQgY29tbWFuZC4KKyAgICBcZG9pZ25vcmV0ZXh0IF5eTSUKKyAgfSUKK30KKworXGRlZlxkb2lnbm9yZXl5eSMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CQkJJSBOb3RoaW5nIGZvdW5kLgorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHR6enoKKyAgXGVsc2UJCQkJCSUgRm91bmQgYSBuZXN0ZWQgY29uZGl0aW9uLCAuLi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IDEKKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0eXl5CQklIC4uLiwgbG9vayBmb3IgYW5vdGhlci4KKyAgICAlIElmIHdlJ3JlIGhlcmUsICMxIGVuZHMgd2l0aCBeXk1caWZpbmZvIChmb3IgZXhhbXBsZSkuCisgIFxmaQorICBcbmV4dCAjMSUgdGhlIHRva2VuIFxfU1RPUF8gaXMgcHJlc2VudCBqdXN0IGFmdGVyIHRoaXMgbWFjcm8uCit9CisKKyUgV2UgaGF2ZSB0byBzd2FsbG93IHRoZSByZW1haW5pbmcgIlxfU1RPUF8iLgorJQorXGRlZlxkb2lnbm9yZXRleHR6enojMXslCisgIFxpZm51bVxkb2lnbm9yZWNvdW50ID0gMAklIFdlIGhhdmUganVzdCBmb3VuZCB0aGUgb3V0ZXJtb3N0IEBlbmQuCisgICAgXGxldFxuZXh0XGVuZGRvaWdub3JlCisgIFxlbHNlCQkJCSUgU3RpbGwgaW5zaWRlIGEgbmVzdGVkIGNvbmRpdGlvbi4KKyAgICBcYWR2YW5jZVxkb2lnbm9yZWNvdW50IGJ5IC0xCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dCAgICAgICUgTG9vayBmb3IgdGhlIG5leHQgQGVuZC4KKyAgXGZpCisgIFxuZXh0Cit9CisKKyUgRmluaXNoIG9mZiBpZ25vcmVkIHRleHQuCit7IFxvYmV5bGluZXMlCisgICUgSWdub3JlIGFueXRoaW5nIGFmdGVyIHRoZSBsYXN0IGBAZW5kICMxJzsgdGhpcyBtYXR0ZXJzIGluIHZlcmJhdGltCisgICUgZW52aXJvbm1lbnRzLCB3aGVyZSBvdGhlcndpc2UgdGhlIG5ld2xpbmUgYWZ0ZXIgYW4gaWdub3JlZCBjb25kaXRpb25hbAorICAlIHdvdWxkIHJlc3VsdCBpbiBhIGJsYW5rIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZW5kZG9pZ25vcmUjMV5eTXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfSUKK30KKworCislIEBzZXQgVkFSIHNldHMgdGhlIHZhcmlhYmxlIFZBUiB0byBhbiBlbXB0eSB2YWx1ZS4KKyUgQHNldCBWQVIgUkVTVC1PRi1MSU5FIHNldHMgVkFSIHRvIHRoZSB2YWx1ZSBSRVNULU9GLUxJTkUuCislCislIFNpbmNlIHdlIHdhbnQgdG8gc2VwYXJhdGUgVkFSIGZyb20gUkVTVC1PRi1MSU5FICh3aGljaCBtaWdodCBiZQorJSBlbXB0eSksIHdlIGNhbid0IGp1c3QgdXNlIFxwYXJzZWFyZzsgd2UgaGF2ZSB0byBpbnNlcnQgYSBzcGFjZSBvZiBvdXIKKyUgb3duIHRvIGRlbGltaXQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGFuZCB0aGVuIHRha2UgaXQgb3V0IGFnYWluIGlmIHdlCislIGRpZG4ndCBuZWVkIGl0LgorJSBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgXHBhcnNlYXJnIHNldHMgXGNhdGNvZGVgXCA9MTAuCislCitccGFyc2VhcmdkZWZcc2V0e1xzZXR5eXkjMSBcZW5kc2V0eXl5fQorXGRlZlxzZXR5eXkjMSAjMlxlbmRzZXR5eXl7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1weyMyfSUKKyAgICBcZWRlZlxuZXh0e1xnZGVmXG1ha2Vjc25hbWV7U0VUIzF9fSUKKyAgICBcaWZ4XHRlbXBcZW1wdHkKKyAgICAgIFxuZXh0e30lCisgICAgXGVsc2UKKyAgICAgIFxzZXR6enojMlxlbmRzZXR6enoKKyAgICBcZmkKKyAgfSUKK30KKyUgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSBcc2V0eHh4IGluc2VydGVkLgorXGRlZlxzZXR6enojMSBcZW5kc2V0enp6e1xuZXh0eyMxfX0KKworJSBAY2xlYXIgVkFSIGNsZWFycyAoaS5lLiwgdW5zZXRzKSB0aGUgdmFyaWFibGUgVkFSLgorJQorXHBhcnNlYXJnZGVmXGNsZWFyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBTRVQjMVxlbmRjc25hbWU9XHJlbGF4CisgIH0lCit9CisKKyUgQHZhbHVle2Zvb30gZ2V0cyB0aGUgdGV4dCBzYXZlZCBpbiB2YXJpYWJsZSBmb28uCitcZGVmXHZhbHVle1xiZWdpbmdyb3VwXG1ha2V2YWx1ZWV4cGFuZGFibGVcdmFsdWV4eHh9CitcZGVmXHZhbHVleHh4IzF7XGV4cGFuZGFibGV2YWx1ZXsjMX1cZW5kZ3JvdXB9Cit7CisgIFxjYXRjb2RlYFwtID0gXGFjdGl2ZSBcY2F0Y29kZWBcXyA9IFxhY3RpdmUKKyAgJQorICBcZ2RlZlxtYWtldmFsdWVleHBhbmRhYmxleyUKKyAgICBcbGV0XHZhbHVlID0gXGV4cGFuZGFibGV2YWx1ZQorICAgICUgV2UgZG9uJ3Qgd2FudCB0aGVzZSBjaGFyYWN0ZXJzIGFjdGl2ZSwgLi4uCisgICAgXGNhdGNvZGVgXC09XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcgorICAgICUgLi4uLCBidXQgd2UgbWlnaHQgZW5kIHVwIHdpdGggYWN0aXZlIG9uZXMgaW4gdGhlIGFyZ3VtZW50IGlmCisgICAgJSB3ZSdyZSBjYWxsZWQgZnJvbSBAY29kZSwgYXMgQGNvZGV7QHZhbHVle2Zvby1iYXJffX0sIHRob3VnaC4KKyAgICAlIFNvIFxsZXQgdGhlbSB0byB0aGVpciBub3JtYWwgZXF1aXZhbGVudHMuCisgICAgXGxldC1ccmVhbGRhc2ggXGxldF9cbm9ybWFsdW5kZXJzY29yZQorICB9Cit9CisKKyUgV2UgaGF2ZSB0aGlzIHN1YnJvdXRpbmUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHNvbWUgQHZhbHVlJ3MKKyUgcHJvcGVybHkgaW4gaW5kZXhlcyAod2UgY2FsbCBcbWFrZXZhbHVlZXhwYW5kYWJsZSBpbiBcaW5kZXhkdW1taWVzKS4KKyUgVGhlIGNvbW1hbmQgaGFzIHRvIGJlIGZ1bGx5IGV4cGFuZGFibGUgKGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQpLCBzaW5jZQorJSB0aGUgcmVzdWx0IHdpbmRzIHVwIGluIHRoZSBpbmRleCBmaWxlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZQorJSB2YXJpYWJsZSdzIHZhbHVlIGNvbnRhaW5zIG90aGVyIFRleGluZm8gY29tbWFuZHMsIGl0J3MgYWxtb3N0IGNlcnRhaW4KKyUgaXQgd2lsbCBmYWlsIChhbHRob3VnaCBwZXJoYXBzIHdlIGNvdWxkIGZpeCB0aGF0IHdpdGggc3VmZmljaWVudCB3b3JrCislIHRvIGRvIGEgb25lLWxldmVsIGV4cGFuc2lvbiBvbiB0aGUgcmVzdWx0LCBpbnN0ZWFkIG9mIGNvbXBsZXRlKS4KKyUKK1xkZWZcZXhwYW5kYWJsZXZhbHVlIzF7JQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMVxlbmRjc25hbWVccmVsYXgKKyAgICB7W05vIHZhbHVlIGZvciBgYCMxJyddfSUKKyAgICBcbWVzc2FnZXtWYXJpYWJsZSBgIzEnLCB1c2VkIGluIEB2YWx1ZSwgaXMgbm90IHNldC59JQorICBcZWxzZQorICAgIFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lCisgIFxmaQorfQorCislIEBpZnNldCBWQVIgLi4uIEBlbmQgaWZzZXQgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIGJlZW4gZGVmaW5lZAorJSB3aXRoIEBzZXQuCislCislIFRvIGdldCBzcGVjaWFsIHRyZWF0bWVudCBvZiBgQGVuZCBpZnNldCwnIGNhbGwgXG1ha2VvbmQgYW5kIHRoZSByZWRlZmluZS4KKyUKK1xtYWtlY29uZHtpZnNldH0KK1xkZWZcaWZzZXR7XHBhcnNlYXJne1xkb2lmc2V0e1xsZXRcbmV4dD1caWZzZXRmYWlsfX19CitcZGVmXGRvaWZzZXQjMSMyeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxsZXRcbmV4dD1cZW1wdHkKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVQjMlxlbmRjc25hbWVccmVsYXgKKyAgICAgICMxJSBJZiBub3Qgc2V0LCByZWRlZmluZSBcbmV4dC4KKyAgICBcZmkKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVxuZXh0Cit9CitcZGVmXGlmc2V0ZmFpbHtcZG9pZ25vcmV7aWZzZXR9fQorCislIEBpZmNsZWFyIFZBUiAuLi4gQGVuZCBpZmNsZWFyIHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCislIGRlZmluZWQgd2l0aCBAc2V0LCBvciBoYXMgYmVlbiB1bmRlZmluZWQgd2l0aCBAY2xlYXIuCislCislIFRoZSBgXGVsc2UnIGluc2lkZSB0aGUgYFxkb2lmc2V0JyBwYXJhbWV0ZXIgaXMgYSB0cmljayB0byByZXVzZSB0aGUKKyUgYWJvdmUgY29kZTogaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGRvIG5vdGhpbmcsIGlmIGl0IGlzIHNldCwKKyUgdGhlbiByZWRlZmluZSBcbmV4dCB0byBcaWZjbGVhcmZhaWwuCislCitcbWFrZWNvbmR7aWZjbGVhcn0KK1xkZWZcaWZjbGVhcntccGFyc2Vhcmd7XGRvaWZzZXR7XGVsc2UgXGxldFxuZXh0PVxpZmNsZWFyZmFpbH19fQorXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CisKKyUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCislIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgorXGxldFxkaXJjYXRlZ29yeT1cY29tbWVudAorCislIEBkZWZpbmluZm9lbmNsb3NlLgorXGxldFxkZWZpbmZvZW5jbG9zZT1cY29tbWVudAorCisKK1xtZXNzYWdle2luZGV4aW5nLH0KKyUgSW5kZXggZ2VuZXJhdGlvbiBmYWNpbGl0aWVzCisKKyUgRGVmaW5lIFxuZXd3cml0ZSB0byBiZSBpZGVudGljYWwgdG8gcGxhaW4gdGV4J3MgXG5ld3dyaXRlCislIGV4Y2VwdCBub3QgXG91dGVyLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gbWFjcm9zIGFuZCBcaWYncy4KK1xlZGVmXG5ld3dyaXRle1xtYWtlY3NuYW1le3B0ZXhuZXd3cml0ZX19CisKKyUgXG5ld2luZGV4IHtmb299IGRlZmluZXMgYW4gaW5kZXggbmFtZWQgZm9vLgorJSBJdCBhdXRvbWF0aWNhbGx5IGRlZmluZXMgXGZvb2luZGV4IHN1Y2ggdGhhdAorJSBcZm9vaW5kZXggLi4ucmVzdCBvZiBsaW5lLi4uIHB1dHMgYW4gZW50cnkgaW4gdGhlIGluZGV4IGZvby4KKyUgSXQgYWxzbyBkZWZpbmVzIFxmb29pbmRmaWxlIHRvIGJlIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCBjaGFubmVsIGZvcgorJSB0aGUgZmlsZSB0aGF0IGFjY3VtdWxhdGVzIHRoaXMgaW5kZXguICBUaGUgZmlsZSdzIGV4dGVuc2lvbiBpcyBmb28uCislIFRoZSBuYW1lIG9mIGFuIGluZGV4IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMiBjaGFyYWN0ZXJzIGxvbmcKKyUgZm9yIHRoZSBzYWtlIG9mIHZtcy4KKyUKK1xkZWZcbmV3aW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEgJSBPcGVuIHRoZSBmaWxlCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslICAgICAlIERlZmluZSBAIzFpbmRleAorICAgIFxub2V4cGFuZFxkb2luZGV4eyMxfX0KK30KKworJSBAZGVmaW5kZXggZm9vICA9PSAgXG5ld2luZGV4e2Zvb30KKyUKK1xkZWZcZGVmaW5kZXh7XHBhcnNlYXJnXG5ld2luZGV4fQorCislIERlZmluZSBAZGVmY29kZWluZGV4LCBsaWtlIEBkZWZpbmRleCBleGNlcHQgcHV0IGFsbCBlbnRyaWVzIGluIEBjb2RlLgorJQorXGRlZlxkZWZjb2RlaW5kZXh7XHBhcnNlYXJnXG5ld2NvZGVpbmRleH0KKyUKK1xkZWZcbmV3Y29kZWluZGV4IzF7JQorICBcaWZsaW5rcworICAgIFxleHBhbmRhZnRlclxuZXd3cml0ZSBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxvcGVub3V0IFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lIFxqb2JuYW1lLiMxCisgIFxmaQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMWluZGV4XGVuZGNzbmFtZXslCisgICAgXG5vZXhwYW5kXGRvY29kZWluZGV4eyMxfX0lCit9CisKKworJSBAc3luaW5kZXggZm9vIGJhciAgICBtYWtlcyBpbmRleCBmb28gZmVlZCBpbnRvIGluZGV4IGJhci4KKyUgRG8gdGhpcyBpbnN0ZWFkIG9mIEBkZWZpbmRleCBmb28gaWYgeW91IGRvbid0IHdhbnQgaXQgYXMgYSBzZXBhcmF0ZSBpbmRleC4KKyUKKyUgQHN5bmNvZGVpbmRleCBmb28gYmFyICAgc2ltaWxhciwgYnV0IHB1dCBhbGwgZW50cmllcyBtYWRlIGZvciBpbmRleCBmb28KKyUgaW5zaWRlIEBjb2RlLgorJQorXGRlZlxzeW5pbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2luZGV4eyMxfXsjMn19CitcZGVmXHN5bmNvZGVpbmRleCMxICMyIHtcZG9zeW5pbmRleFxkb2NvZGVpbmRleHsjMX17IzJ9fQorCislICMxIGlzIFxkb2luZGV4IG9yIFxkb2NvZGVpbmRleCwgIzIgdGhlIGluZGV4IGdldHRpbmcgcmVkZWZpbmVkIChmb28pLAorJSAjMyB0aGUgdGFyZ2V0IGluZGV4IChiYXIpLgorXGRlZlxkb3N5bmluZGV4IzEjMiMzeyUKKyAgJSBPbmx5IGRvIFxjbG9zZW91dCBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBpdCwgZWxzZSB3ZSdsbCBlbmQgdXAKKyAgJSBjbG9zaW5nIHRoZSB0YXJnZXQgaW5kZXguCisgIFxleHBhbmRhZnRlciBcaWZ4XGNzbmFtZSBkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgXHVuZGVmaW5lZAorICAgICUgVGhlIFxjbG9zZW91dCBoZWxwcyByZWR1Y2UgdW5uZWNlc3Nhcnkgb3BlbiBmaWxlczsgdGhlIGxpbWl0IG9uIHRoZQorICAgICUgQWNvcm4gUklTQyBPUyBpcyBhIG1lcmUgMTYgZmlsZXMuCisgICAgXGV4cGFuZGFmdGVyXGNsb3Nlb3V0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZVxkb25lc3luaW5kZXgjMlxlbmRjc25hbWUgPSAxCisgIFxmaQorICAlIHJlZGVmaW5lIFxmb29pbmRmaWxlOgorICBcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRlbXBcZXhwYW5kYWZ0ZXI9XGNzbmFtZSMzaW5kZmlsZVxlbmRjc25hbWUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUjMmluZGZpbGVcZW5kY3NuYW1lPVx0ZW1wCisgICUgcmVkZWZpbmUgXGZvb2luZGV4OgorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMmluZGV4XGVuZGNzbmFtZXtcbm9leHBhbmQjMXsjM319JQorfQorCislIERlZmluZSBcZG9pbmRleCwgdGhlIGRyaXZlciBmb3IgYWxsIFxmb29pbmRleCBtYWNyb3MuCislIEFyZ3VtZW50ICMxIGlzIGdlbmVyYXRlZCBieSB0aGUgY2FsbGluZyBcZm9vaW5kZXggbWFjcm8sCislICBhbmQgaXQgaXMgImZvbyIsIHRoZSBuYW1lIG9mIHRoZSBpbmRleC4KKworJSBcZG9pbmRleCBqdXN0IHVzZXMgXHBhcnNlYXJnOyBpdCBjYWxscyBcZG9pbmQgZm9yIHRoZSBhY3R1YWwgd29yay4KKyUgVGhpcyBpcyBiZWNhdXNlIFxkb2luZCBpcyBtb3JlIHVzZWZ1bCB0byBjYWxsIGZyb20gb3RoZXIgbWFjcm9zLgorCislIFRoZXJlIGlzIGFsc28gXGRvc3ViaW5kIHtpbmRleH17dG9waWN9e3N1YnRvcGljfQorJSB3aGljaCBtYWtlcyBhbiBlbnRyeSBpbiBhIHR3by1sZXZlbCBpbmRleCBzdWNoIGFzIHRoZSBvcGVyYXRpb24gaW5kZXguCisKK1xkZWZcZG9pbmRleCMxe1xlZGVmXGluZGV4bmFtZXsjMX1ccGFyc2Vhcmdcc2luZ2xlaW5kZXhlcn0KK1xkZWZcc2luZ2xlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17IzF9fQorCislIGxpa2UgdGhlIHByZXZpb3VzIHR3bywgYnV0IHRoZXkgcHV0IEBjb2RlIGFyb3VuZCB0aGUgYXJndW1lbnQuCitcZGVmXGRvY29kZWluZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVjb2RlaW5kZXhlcn0KK1xkZWZcc2luZ2xlY29kZWluZGV4ZXIgIzF7XGRvaW5ke1xpbmRleG5hbWV9e1xjb2RleyMxfX19CisKKyUgVGFrZSBjYXJlIG9mIFRleGluZm8gY29tbWFuZHMgdGhhdCBjYW4gYXBwZWFyIGluIGFuIGluZGV4IGVudHJ5LgorJSBTaW5jZSB0aGVyZSBhcmUgc29tZSBjb21tYW5kcyB3ZSB3YW50IHRvIGV4cGFuZCwgYW5kIG90aGVycyB3ZSBkb24ndCwKKyUgd2UgaGF2ZSB0byBsYWJvcmlvdXNseSBwcmV2ZW50IGV4cGFuc2lvbiBmb3IgdGhvc2UgdGhhdCB3ZSBkb24ndC4KKyUKK1xkZWZcaW5kZXhkdW1taWVzeyUKKyAgXGVzY2FwZWNoYXIgPSBgXFwgICAgICUgdXNlIGJhY2tzbGFzaCBpbiBvdXRwdXQgZmlsZXMuCisgIFxkZWZcQHtAfSUgY2hhbmdlIHRvIEBAIHdoZW4gd2Ugc3dpdGNoIHRvIEAgYXMgZXNjYXBlIGNoYXIgaW4gaW5kZXggZmlsZXMuCisgIFxkZWZcIHtccmVhbGJhY2tzbGFzaFxzcGFjZSB9JQorICAlIE5lZWQgdGhlc2UgaW4gY2FzZSBcdGV4IGlzIGluIGVmZmVjdCBhbmQgXHsgaXMgYSBcZGVsaW1pdGVyIGFnYWluLgorICAlIEJ1dCBjYW4ndCB1c2UgXGxicmFjZWNtZCBhbmQgXHJicmFjZWNtZCBiZWNhdXNlIHRleGluZGV4IGFzc3VtZXMKKyAgJSBicmFjZXMgYW5kIGJhY2tzbGFzaGVzIGFyZSB1c2VkIG9ubHkgYXMgZGVsaW1pdGVycy4KKyAgXGxldFx7ID0gXG15bGJyYWNlCisgIFxsZXRcfSA9IFxteXJicmFjZQorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCit9CisKKyUgRm9yIHRoZSBhdXggYW5kIHRvYyBmaWxlcywgQCBpcyB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gIFNvIHdlIHdhbnQgdG8KKyUgcmVkZWZpbmUgZXZlcnl0aGluZyB1c2luZyBAIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChpbnN0ZWFkIG9mCislIFxyZWFsYmFja3NsYXNoLCBzdGlsbCB1c2VkIGZvciBpbmRleCBmaWxlcykuICBXaGVuIGV2ZXJ5dGhpbmcgdXNlcyBALAorJSB0aGlzIHdpbGwgYmUgc2ltcGxlci4KKyUKK1xkZWZcYXRkdW1taWVzeyUKKyAgXGRlZlxAe0BAfSUKKyAgXGRlZlwge0AgfSUKKyAgXGxldFx7ID0gXGxicmFjZWF0Y21kCisgIFxsZXRcfSA9IFxyYnJhY2VhdGNtZAorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCisgIFxvdGhlcmJhY2tzbGFzaAorfQorCislIENhbGxlZCBmcm9tIFxpbmRleGR1bW1pZXMgYW5kIFxhdGR1bW1pZXMuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgICUgXGRlZmluZWR1bW15d29yZCBkZWZpbmVzIFwjMSBhcyBcc3RyaW5nXCMxXHNwYWNlLCB0aHVzIGVmZmVjdGl2ZWx5CisgICUgcHJldmVudGluZyBpdHMgZXhwYW5zaW9uLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGNvbnRyb2wlIHdvcmRzLAorICAlIG5vdCBjb250cm9sIGxldHRlcnMsIGJlY2F1c2UgdGhlIFxzcGFjZSB3b3VsZCBiZSBpbmNvcnJlY3QgZm9yCisgICUgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHRoZSBjb250cm9sIHdvcmQKKyAgJSBmcm9tIHdoYXRldmVyIGZvbGxvd3MuCisgICUKKyAgJSBGb3IgY29udHJvbCBsZXR0ZXJzLCB3ZSBoYXZlIFxkZWZpbmVkdW1teWxldHRlciwgd2hpY2ggb21pdHMgdGhlCisgICUgc3BhY2UuCisgICUKKyAgJSBUaGVzZSBjYW4gYmUgdXNlZCBib3RoIGZvciBjb250cm9sIHdvcmRzIHRoYXQgdGFrZSBhbiBhcmd1bWVudCBhbmQKKyAgJSB0aG9zZSB0aGF0IGRvIG5vdC4gIElmIGl0IGlzIGZvbGxvd2VkIGJ5IHthcmd9IGluIHRoZSBpbnB1dCwgdGhlbgorICAlIHRoYXQgd2lsbCBkdXRpZnVsbHkgZ2V0IHdyaXR0ZW4gdG8gdGhlIGluZGV4IChvciB3aGVyZXZlcikuCisgICUKKyAgXGRlZlxkZWZpbmVkdW1teXdvcmQgICMjMXtcZGVmIyMxe1xzdHJpbmcjIzFcc3BhY2V9fSUKKyAgXGRlZlxkZWZpbmVkdW1teWxldHRlciMjMXtcZGVmIyMxe1xzdHJpbmcjIzF9fSUKKyAgXGxldFxkZWZpbmVkdW1teWFjY2VudFxkZWZpbmVkdW1teWxldHRlcgorICAlCisgIFxjb21tb25kdW1taWVzbm9mb250cworICAlCisgIFxkZWZpbmVkdW1teWxldHRlclxfJQorICAlCisgICUgTm9uLUVuZ2xpc2ggbGV0dGVycy4KKyAgXGRlZmluZWR1bW15d29yZFxBQQorICBcZGVmaW5lZHVtbXl3b3JkXEFFCisgIFxkZWZpbmVkdW1teXdvcmRcTAorICBcZGVmaW5lZHVtbXl3b3JkXE9FCisgIFxkZWZpbmVkdW1teXdvcmRcTworICBcZGVmaW5lZHVtbXl3b3JkXGFhCisgIFxkZWZpbmVkdW1teXdvcmRcYWUKKyAgXGRlZmluZWR1bW15d29yZFxsCisgIFxkZWZpbmVkdW1teXdvcmRcb2UKKyAgXGRlZmluZWR1bW15d29yZFxvCisgIFxkZWZpbmVkdW1teXdvcmRcc3MKKyAgXGRlZmluZWR1bW15d29yZFxleGNsYW1kb3duCisgIFxkZWZpbmVkdW1teXdvcmRccXVlc3Rpb25kb3duCisgIFxkZWZpbmVkdW1teXdvcmRcb3JkZgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZG0KKyAgJQorICAlIEFsdGhvdWdoIHRoZXNlIGludGVybmFsIGNvbW1hbmRzIHNob3VsZG4ndCBzaG93IHVwLCBzb21ldGltZXMgdGhleSBkby4KKyAgXGRlZmluZWR1bW15d29yZFxiZgorICBcZGVmaW5lZHVtbXl3b3JkXGd0cgorICBcZGVmaW5lZHVtbXl3b3JkXGhhdAorICBcZGVmaW5lZHVtbXl3b3JkXGxlc3MKKyAgXGRlZmluZWR1bW15d29yZFxzZgorICBcZGVmaW5lZHVtbXl3b3JkXHNsCisgIFxkZWZpbmVkdW1teXdvcmRcdGNsb3NlCisgIFxkZWZpbmVkdW1teXdvcmRcdHQKKyAgJQorICBcZGVmaW5lZHVtbXl3b3JkXExhVGVYCisgIFxkZWZpbmVkdW1teXdvcmRcVGVYCisgICUKKyAgJSBBc3NvcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcYnVsbGV0CisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWEKKyAgXGRlZmluZWR1bW15d29yZFxjb3B5cmlnaHQKKyAgXGRlZmluZWR1bW15d29yZFxyZWdpc3RlcmVkc3ltYm9sCisgIFxkZWZpbmVkdW1teXdvcmRcZG90cworICBcZGVmaW5lZHVtbXl3b3JkXGVuZGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlcXVpdgorICBcZGVmaW5lZHVtbXl3b3JkXGVycm9yCisgIFxkZWZpbmVkdW1teXdvcmRcZXVybworICBcZGVmaW5lZHVtbXl3b3JkXGV4cGFuc2lvbgorICBcZGVmaW5lZHVtbXl3b3JkXG1pbnVzCisgIFxkZWZpbmVkdW1teXdvcmRccG91bmRzCisgIFxkZWZpbmVkdW1teXdvcmRccG9pbnQKKyAgXGRlZmluZWR1bW15d29yZFxwcmludAorICBcZGVmaW5lZHVtbXl3b3JkXHJlc3VsdAorICAlCisgICUgV2Ugd2FudCB0byBkaXNhYmxlIGFsbCBtYWNyb3Mgc28gdGhhdCB0aGV5IGFyZSBub3QgZXhwYW5kZWQgYnkgXHdyaXRlLgorICBcbWFjcm9saXN0CisgICUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgJQorICAlIEhhbmRsZSBzb21lIGNhc2VzIG9mIEB2YWx1ZSAtLSB3aGVyZSBpdCBkb2VzIG5vdCBjb250YWluIGFueQorICAlIChub24tZnVsbHktZXhwYW5kYWJsZSkgY29tbWFuZHMuCisgIFxtYWtldmFsdWVleHBhbmRhYmxlCit9CisKKyUgXGNvbW1vbmR1bW1pZXNub2ZvbnRzOiBjb21tb24gdG8gXGNvbW1vbmR1bW1pZXMgYW5kIFxpbmRleG5vZm9udHMuCislCitcZGVmXGNvbW1vbmR1bW1pZXNub2ZvbnRzeyUKKyAgJSBDb250cm9sIGxldHRlcnMgYW5kIGFjY2VudHMuCisgIFxkZWZpbmVkdW1teWxldHRlclwhJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcIiUKKyAgXGRlZmluZWR1bW15YWNjZW50XCclCisgIFxkZWZpbmVkdW1teWxldHRlclwqJQorICBcZGVmaW5lZHVtbXlhY2NlbnRcLCUKKyAgXGRlZmluZWR1bW15bGV0dGVyXC4lCisgIFxkZWZpbmVkdW1teWxldHRlclwvJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcOiUKKyAgXGRlZmluZWR1bW15YWNjZW50XD0lCisgIFxkZWZpbmVkdW1teWxldHRlclw/JQorICBcZGVmaW5lZHVtbXlhY2NlbnRcXiUKKyAgXGRlZmluZWR1bW15YWNjZW50XGAlCisgIFxkZWZpbmVkdW1teWFjY2VudFx+JQorICBcZGVmaW5lZHVtbXl3b3JkXHUKKyAgXGRlZmluZWR1bW15d29yZFx2CisgIFxkZWZpbmVkdW1teXdvcmRcSAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdGFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXHJpbmdhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx0aWVhY2NlbnQKKyAgXGRlZmluZWR1bW15d29yZFx1YmFyYWNjZW50CisgIFxkZWZpbmVkdW1teXdvcmRcdWRvdGFjY2VudAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdGxlc3MKKyAgJQorICAlIFRleGluZm8gZm9udCBjb21tYW5kcy4KKyAgXGRlZmluZWR1bW15d29yZFxiCisgIFxkZWZpbmVkdW1teXdvcmRcaQorICBcZGVmaW5lZHVtbXl3b3JkXHIKKyAgXGRlZmluZWR1bW15d29yZFxzYworICBcZGVmaW5lZHVtbXl3b3JkXHQKKyAgJQorICAlIENvbW1hbmRzIHRoYXQgdGFrZSBhcmd1bWVudHMuCisgIFxkZWZpbmVkdW1teXdvcmRcYWNyb255bQorICBcZGVmaW5lZHVtbXl3b3JkXGNpdGUKKyAgXGRlZmluZWR1bW15d29yZFxjb2RlCisgIFxkZWZpbmVkdW1teXdvcmRcY29tbWFuZAorICBcZGVmaW5lZHVtbXl3b3JkXGRmbgorICBcZGVmaW5lZHVtbXl3b3JkXGVtcGgKKyAgXGRlZmluZWR1bW15d29yZFxlbnYKKyAgXGRlZmluZWR1bW15d29yZFxmaWxlCisgIFxkZWZpbmVkdW1teXdvcmRca2JkCisgIFxkZWZpbmVkdW1teXdvcmRca2V5CisgIFxkZWZpbmVkdW1teXdvcmRcbWF0aAorICBcZGVmaW5lZHVtbXl3b3JkXG9wdGlvbgorICBcZGVmaW5lZHVtbXl3b3JkXHB4cmVmCisgIFxkZWZpbmVkdW1teXdvcmRccmVmCisgIFxkZWZpbmVkdW1teXdvcmRcc2FtcAorICBcZGVmaW5lZHVtbXl3b3JkXHN0cm9uZworICBcZGVmaW5lZHVtbXl3b3JkXHRpZQorICBcZGVmaW5lZHVtbXl3b3JkXHVyZWYKKyAgXGRlZmluZWR1bW15d29yZFx1cmwKKyAgXGRlZmluZWR1bW15d29yZFx2YXIKKyAgXGRlZmluZWR1bW15d29yZFx2ZXJiCisgIFxkZWZpbmVkdW1teXdvcmRcdworICBcZGVmaW5lZHVtbXl3b3JkXHhyZWYKK30KKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4bm9mb250c3slCisgICUgQWNjZW50IGNvbW1hbmRzIHNob3VsZCBiZWNvbWUgQGFzaXMuCisgIFxkZWZcZGVmaW5lZHVtbXlhY2NlbnQjIzF7XGxldCMjMVxhc2lzfSUKKyAgJSBXZSBjYW4ganVzdCBpZ25vcmUgb3RoZXIgY29udHJvbCBsZXR0ZXJzLgorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xsZXQjIzFcZW1wdHl9JQorICAlIEhvcGVmdWxseSwgYWxsIGNvbnRyb2wgd29yZHMgY2FuIGJlY29tZSBAYXNpcy4KKyAgXGxldFxkZWZpbmVkdW1teXdvcmRcZGVmaW5lZHVtbXlhY2NlbnQKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICAlIERvbid0IG5vLW9wIFx0dCwgc2luY2UgaXQgaXNuJ3QgYSB1c2VyLWxldmVsIGNvbW1hbmQKKyAgJSBhbmQgaXMgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGFjdGl2ZSBjaGFycyBsaWtlIDwsID4sIHwsIGV0Yy4KKyAgJSBMaWtld2lzZSB3aXRoIHRoZSBvdGhlciBwbGFpbiB0ZXggZm9udCBjb21tYW5kcy4KKyAgJVxsZXRcdHQ9XGFzaXMKKyAgJQorICBcZGVmXCB7IH0lCisgIFxkZWZcQHtAfSUKKyAgJSBob3cgdG8gaGFuZGxlIGJyYWNlcz8KKyAgXGRlZlxfe1xub3JtYWx1bmRlcnNjb3JlfSUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxMe0x9JQorICBcZGVmXE9Fe09FfSUKKyAgXGRlZlxPe099JQorICBcZGVmXGFhe2FhfSUKKyAgXGRlZlxhZXthZX0lCisgIFxkZWZcbHtsfSUKKyAgXGRlZlxvZXtvZX0lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxzc3tzc30lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgIFxkZWZcb3JkZnthfSUKKyAgXGRlZlxvcmRte299JQorICAlCisgIFxkZWZcTGFUZVh7TGFUZVh9JQorICBcZGVmXFRlWHtUZVh9JQorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAlIChUaGUgZm9sbG93aW5nIHt9IHdpbGwgZW5kIHVwIGluIHRoZSBzb3J0IHN0cmluZywgYnV0IHRoYXQncyBvay4pCisgIFxkZWZcYnVsbGV0e2J1bGxldH0lCisgIFxkZWZcY29tbWF7LH0lCisgIFxkZWZcY29weXJpZ2h0e2NvcHlyaWdodH0lCisgIFxkZWZccmVnaXN0ZXJlZHN5bWJvbHtSfSUKKyAgXGRlZlxkb3Rzey4uLn0lCisgIFxkZWZcZW5kZG90c3suLi59JQorICBcZGVmXGVxdWl2ez09fSUKKyAgXGRlZlxlcnJvcntlcnJvcn0lCisgIFxkZWZcZXVyb3tldXJvfSUKKyAgXGRlZlxleHBhbnNpb257PT0+fSUKKyAgXGRlZlxtaW51c3stfSUKKyAgXGRlZlxwb3VuZHN7cG91bmRzfSUKKyAgXGRlZlxwb2ludHsufSUKKyAgXGRlZlxwcmludHstfH0lCisgIFxkZWZccmVzdWx0ez0+fSUKKyAgJQorICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCisgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCisgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCisgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CisgICUgdGhhdCBzdGFydHMgd2l0aCBcLgorICAlIAorICAlIFNpbmNlIG1hY3JvIGludm9jYXRpb25zIGFyZSBmb2xsb3dlZCBieSBicmFjZXMsIHdlIGNhbiBqdXN0IHJlZGVmaW5lIHRoZW0KKyAgJSB0byB0YWtlIGEgc2luZ2xlIFRlWCBhcmd1bWVudC4gIFRoZSBjYXNlIG9mIGEgbWFjcm8gaW52b2NhdGlvbiB0aGF0CisgICUgZ29lcyB0byBlbmQtb2YtbGluZSBpcyBub3QgaGFuZGxlZC4KKyAgJSAKKyAgXG1hY3JvbGlzdAorfQorCitcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KK1xsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPworCislIE1vc3QgaW5kZXggZW50cmllcyBnbyB0aHJvdWdoIGhlcmUsIGJ1dCBcZG9zdWJpbmQgaXMgdGhlIGdlbmVyYWwgY2FzZS4KKyUgIzEgaXMgdGhlIGluZGV4IG5hbWUsICMyIGlzIHRoZSBlbnRyeSB0ZXh0LgorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBlbXB0eSBpZiBjYWxsZWQgZnJvbSBcZG9pbmQsIGFzIHdlIHVzdWFsbHkgYXJlICh0aGUgbWFpbiBleGNlcHRpb24KKyUgaXMgd2l0aCBtb3N0IGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseSkuCislCitcZGVmXGRvc3ViaW5kIzEjMiMzeyUKKyAgXGlmbGlua3MKKyAgeyUKKyAgICAlIFN0b3JlIHRoZSBtYWluIGluZGV4IGVudHJ5IHRleHQgKGluY2x1ZGluZyB0aGUgdGhpcmQgYXJnKS4KKyAgICBcdG9rczAgPSB7IzJ9JQorICAgICUgSWYgdGhpcmQgYXJnIGlzIHByZXNlbnQsIHByZWNlZGUgaXQgd2l0aCBhIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcaWZ2bW9kZQorICAgICAgXGRvc3ViaW5kc2FuaXRpemUKKyAgICBcZWxzZQorICAgICAgXGRvc3ViaW5kd3JpdGUKKyAgICBcZmkKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IGluIFx0b2tzMCB0byB0aGUgaW5kZXggZmlsZToKKyUKK1xkZWZcZG9zdWJpbmR3cml0ZXslCisgICUgUHV0IHRoZSBpbmRleCBlbnRyeSBpbiB0aGUgbWFyZ2luIGlmIGRlc2lyZWQuCisgIFxpZnhcU0VUbWFyZ2luaW5kZXhccmVsYXhcZWxzZQorICAgIFxpbnNlcnRcbWFyZ2lue1xoYm94e1x2cnVsZSBoZWlnaHQ4cHQgZGVwdGgzcHQgd2lkdGgwcHQgXHRoZVx0b2tzMH19JQorICBcZmkKKyAgJQorICAlIFJlbWVtYmVyLCB3ZSBhcmUgd2l0aGluIGEgZ3JvdXAuCisgIFxpbmRleGR1bW1pZXMgJSBNdXN0IGRvIHRoaXMgaGVyZSwgc2luY2UgXGJmLCBldGMgZXhwYW5kIGF0IHRoaXMgc3RhZ2UKKyAgXGRlZlxiYWNrc2xhc2hjdXJmb250e1xpbmRleGJhY2tzbGFzaH0lIFxpbmRleGJhY2tzbGFzaCBpc24ndCBkZWZpbmVkIG5vdworICAgICAgJSBzbyBpdCB3aWxsIGJlIG91dHB1dCBhcyBpczsgYW5kIGl0IHdpbGwgcHJpbnQgYXMgYmFja3NsYXNoLgorICAlCisgICUgUHJvY2VzcyB0aGUgaW5kZXggZW50cnkgd2l0aCBhbGwgZm9udCBjb21tYW5kcyB0dXJuZWQgb2ZmLCB0bworICAlIGdldCB0aGUgc3RyaW5nIHRvIHNvcnQgYnkuCisgIHtcaW5kZXhub2ZvbnRzCisgICBcZWRlZlx0ZW1we1x0aGVcdG9rczB9JSBuZWVkIGZ1bGwgZXhwYW5zaW9uCisgICBceGRlZlxpbmRleHNvcnR0bXB7XHRlbXB9JQorICB9JQorICAlCisgICUgU2V0IHVwIHRoZSBjb21wbGV0ZSBpbmRleCBlbnRyeSwgd2l0aCBib3RoIHRoZSBzb3J0IGtleSBhbmQKKyAgJSB0aGUgb3JpZ2luYWwgdGV4dCwgaW5jbHVkaW5nIGFueSBmb250IGNvbW1hbmRzLiAgV2Ugd3JpdGUKKyAgJSB0aHJlZSBhcmd1bWVudHMgdG8gXGVudHJ5IHRvIHRoZSAuPz8gZmlsZSAoZm91ciBpbiB0aGUKKyAgJSBzdWJlbnRyeSBjYXNlKSwgdGV4aW5kZXggcmVkdWNlcyB0byB0d28gd2hlbiB3cml0aW5nIHRoZSAuPz9zCisgICUgc29ydGVkIHJlc3VsdC4KKyAgXGVkZWZcdGVtcHslCisgICAgXHdyaXRlXHdyaXRldG97JQorICAgICAgXHN0cmluZ1xlbnRyeXtcaW5kZXhzb3J0dG1wfXtcbm9leHBhbmRcZm9saW99e1x0aGVcdG9rczB9fSUKKyAgfSUKKyAgXHRlbXAKK30KKworJSBUYWtlIGNhcmUgb2YgdW53YW50ZWQgcGFnZSBicmVha3M6CislCislIElmIGEgc2tpcCBpcyB0aGUgbGFzdCB0aGluZyBvbiB0aGUgbGlzdCBub3csIHByZXNlcnZlIGl0CislIGJ5IGJhY2tpbmcgdXAgYnkgXGxhc3Rza2lwLCBkb2luZyB0aGUgXHdyaXRlLCB0aGVuIGluc2VydGluZworJSB0aGUgc2tpcCBhZ2Fpbi4gIE90aGVyd2lzZSwgdGhlIHdoYXRzaXQgZ2VuZXJhdGVkIGJ5IHRoZQorJSBcd3JpdGUgd2lsbCBtYWtlIFxsYXN0c2tpcCB6ZXJvLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHNlcXVlbmNlcworJSBsaWtlIHRoaXM6CislIEBlbmQgZGVmdW4KKyUgQHRpbmRleCB3aGF0ZXZlcgorJSBAZGVmdW4gLi4uCislIHdpbGwgaGF2ZSBleHRyYSBzcGFjZSBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgXG1lZGJyZWFrIGluIHRoZQorJSBzdGFydCBvZiB0aGUgQGRlZnVuIHdvbid0IHNlZSB0aGUgc2tpcCBpbnNlcnRlZCBieSB0aGUgQGVuZCBvZgorJSB0aGUgcHJldmlvdXMgZGVmdW4uCislCislIEJ1dCBkb24ndCBkbyBhbnkgb2YgdGhpcyBpZiB3ZSdyZSBub3QgaW4gdmVydGljYWwgbW9kZS4gIFdlCislIGRvbid0IHdhbnQgdG8gZG8gYSBcdnNraXAgYW5kIHByZW1hdHVyZWx5IGVuZCBhIHBhcmFncmFwaC4KKyUKKyUgQXZvaWQgcGFnZSBicmVha3MgZHVlIHRvIHRoZXNlIGV4dHJhIHNraXBzLCB0b28uCislCislIEJ1dCB3YWl0LCB0aGVyZSBpcyBhIGNhdGNoIHRoZXJlOgorJSBXZSdsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgXGxhc3Rza2lwIGlzIHplcm8gc2tpcC4gIFxpZmRpbSBpcyBub3QKKyUgc3VmZmljaWVudCBmb3IgdGhpcyBwdXJwb3NlLCBhcyBpdCBpZ25vcmVzIHN0cmV0Y2ggYW5kIHNocmluayBwYXJ0cworJSBvZiB0aGUgc2tpcC4gIFRoZSBvbmx5IHdheSBzZWVtcyB0byBiZSB0byBjaGVjayB0aGUgdGV4dHVhbAorJSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2tpcC4KKyUKKyUgVGhlIGZvbGxvd2luZyBpcyBhbG1vc3QgbGlrZSBcZGVmXHplcm9za2lwbWFjcm97MC4wcHR9IGV4Y2VwdCB0aGF0CislIHRoZSBgYHAnJyBhbmQgYGB0JycgY2hhcmFjdGVycyBoYXZlIGNhdGNvZGUgXG90aGVyLCBub3QgMTEgKGxldHRlcikuCislCitcZWRlZlx6ZXJvc2tpcG1hY3Jve1xleHBhbmRhZnRlclx0aGVcY3NuYW1lIHpAc2tpcFxlbmRjc25hbWV9CislCislIC4uLiwgcmVhZHksIEdPOgorJQorXGRlZlxkb3N1YmluZHNhbml0aXpleyUKKyAgJSBcbGFzdHNraXAgYW5kIFxsYXN0cGVuYWx0eSBjYW5ub3QgYm90aCBiZSBub256ZXJvIHNpbXVsdGFuZW91c2x5LgorICBcc2tpcDAgPSBcbGFzdHNraXAKKyAgXGVkZWZcbGFzdHNraXBtYWNyb3tcdGhlXGxhc3Rza2lwfSUKKyAgXGNvdW50MjU1ID0gXGxhc3RwZW5hbHR5CisgICUKKyAgJSBJZiBcbGFzdHNraXAgaXMgbm9uemVybywgdGhhdCBtZWFucyB0aGUgbGFzdCBpdGVtIHdhcyBhCisgICUgc2tpcC4gIEFuZCBzaW5jZSBhIHNraXAgaXMgZGlzY2FyZGFibGUsIHRoYXQgbWVhbnMgdGhpcworICAlIC1cc2tpcDAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQorICAlIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCB0aGVyZWZvcmUgaXQgaXMgbm90IGEgcG90ZW50aWFsCisgICUgYnJlYWtwb2ludCwgdGhlcmVmb3JlIG5vIFxub2JyZWFrIG5lZWRlZC4KKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgXGVsc2UKKyAgICBcdnNraXAtXHNraXAwCisgIFxmaQorICAlCisgIFxkb3N1YmluZHdyaXRlCisgICUKKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgICAlIElmIFxsYXN0c2tpcCB3YXMgemVybywgcGVyaGFwcyB0aGUgbGFzdCBpdGVtIHdhcyBhIHBlbmFsdHksIGFuZAorICAgICUgcGVyaGFwcyBpdCB3YXMgPj0xMDAwMCwgZS5nLiwgYSBcbm9icmVhay4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgICUgdG8gcmUtaW5zZXJ0IHRoZSBzYW1lIHBlbmFsdHkgKHZhbHVlcyA+MTAwMDAgYXJlIHVzZWQgZm9yIHZhcmlvdXMKKyAgICAlIHNpZ25hbHMpOyBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIGFueQorICAgICUgZm9sbG93aW5nIGdsdWUgKHN1Y2ggYXMgYSBccGFyc2tpcCkgd291bGQgYmUgYSBicmVha3BvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgJSAKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVxjb3VudDI1NT45OTk5IFxwZW5hbHR5XGNvdW50MjU1IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcc2tpcDAKKyAgXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgJQorICAlIFNlZSBpZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LgorICAlIENoYW5nZSBjYXRjb2RlIG9mIEAgaGVyZSBzbyB0aGF0IGlmIHRoZSBpbmRleCBmaWxlIGNvbnRhaW5zCisgICUgXGluaXRpYWwge0B9CisgICUgYXMgaXRzIGZpcnN0IGxpbmUsIFRlWCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IG1pc21hdGNoZWQgYnJhY2VzCisgICUgKGJlY2F1c2UgaXQgdGhpbmtzIEB9IGlzIGEgY29udHJvbCBzZXF1ZW5jZSkuCisgIFxjYXRjb2RlYFxAID0gMTEKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLiMxcworICBcaWZlb2YgMQorICAgICUgXGVuZGRvdWJsZWNvbHVtbnMgZ2V0cyBjb25mdXNlZCBpZiB0aGVyZSBpcyBubyB0ZXh0IGluIHRoZSBpbmRleCwKKyAgICAlIGFuZCBpdCBsb3NlcyB0aGUgY2hhcHRlciB0aXRsZSBhbmQgdGhlIGF1eCBmaWxlIGVudHJpZXMgZm9yIHRoZQorICAgICUgaW5kZXguICBUaGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIHByb2JsZW0gaXMgdG8gbWFrZSBzdXJlCisgICAgJSB0aGVyZSBpcyBzb21lIHRleHQuCisgICAgXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50CisgIFxlbHNlCisgICAgJQorICAgICUgSWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgdGhlbiBcb3BlbmluIGxlYXZlcyBcaWZlb2YKKyAgICAlIGZhbHNlLiAgV2UgaGF2ZSB0byBtYWtlIFRlWCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgZnJvbSB0aGUgZmlsZSwgc28KKyAgICAlIGl0IGNhbiBkaXNjb3ZlciBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiBpdC4KKyAgICBccmVhZCAxIHRvIFx0ZW1wCisgICAgXGlmZW9mIDEKKyAgICAgIFxwdXR3b3JkSW5kZXhJc0VtcHR5CisgICAgXGVsc2UKKyAgICAgICUgSW5kZXggZmlsZXMgYXJlIGFsbW9zdCBUZXhpbmZvIHNvdXJjZSwgYnV0IHdlIHVzZSBcIGFzIHRoZSBlc2NhcGUKKyAgICAgICUgY2hhcmFjdGVyLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBALCBidXQgdGhhdCdzIHRvbyBiaWcgYSBjaGFuZ2UKKyAgICAgICUgdG8gbWFrZSByaWdodCBub3cuCisgICAgICBcZGVmXGluZGV4YmFja3NsYXNoe1xiYWNrc2xhc2hjdXJmb250fSUKKyAgICAgIFxjYXRjb2RlYFxcID0gMAorICAgICAgXGVzY2FwZWNoYXIgPSBgXFwKKyAgICAgIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgICAgIFxpbnB1dCBcam9ibmFtZS4jMXMKKyAgICAgIFxlbmRkb3VibGVjb2x1bW5zCisgICAgXGZpCisgIFxmaQorICBcY2xvc2VpbiAxCitcZW5kZ3JvdXB9CisKKyUgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBzb3J0ZWQgaW5kZXggZmlsZSBpdHNlbGYuCislIENoYW5nZSB0aGVtIHRvIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGluZGV4LgorCitcZGVmXGluaXRpYWwjMXt7JQorICAlIFNvbWUgbWlub3IgZm9udCBjaGFuZ2VzIGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHR0PVxzZWN0dCBcbGV0XHNmPVxzZWN0dAorICAlCisgICUgUmVtb3ZlIGFueSBnbHVlIHdlIG1heSBoYXZlLCB3ZSdsbCBiZSBpbnNlcnRpbmcgb3VyIG93bi4KKyAgXHJlbW92ZWxhc3Rza2lwCisgICUKKyAgJSBXZSBsaWtlIGJyZWFrcyBiZWZvcmUgdGhlIGluZGV4IGluaXRpYWxzLCBzbyBpbnNlcnQgYSBib251cy4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIDBwdCBwbHVzIDNcYmFzZWxpbmVza2lwCisgIFxwZW5hbHR5IDAKKyAgXHZza2lwIDBwdCBwbHVzIC0zXGJhc2VsaW5lc2tpcAorICAlCisgICUgVHlwZXNldCB0aGUgaW5pdGlhbC4gIE1ha2luZyB0aGlzIGFkZCB1cCB0byBhIHdob2xlIG51bWJlciBvZgorICAlIGJhc2VsaW5lc2tpcHMgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgdGhlIGRvdHMgbGluaW5nIHVwIGZyb20gY29sdW1uCisgICUgdG8gY29sdW1uLiAgSXQgc3RpbGwgd29uJ3Qgb2Z0ZW4gYmUgcGVyZmVjdCwgYmVjYXVzZSBvZiB0aGUgc3RyZXRjaAorICAlIHdlIG5lZWQgYmVmb3JlIGVhY2ggZW50cnksIGJ1dCBpdCdzIGJldHRlci4KKyAgJQorICAlIE5vIHNocmluayBiZWNhdXNlIGl0IGNvbmZ1c2VzIFxiYWxhbmNlY29sdW1ucy4KKyAgXHZza2lwIDEuNjdcYmFzZWxpbmVza2lwIHBsdXMgLjVcYmFzZWxpbmVza2lwCisgIFxsZWZ0bGluZXtcc2VjYmYgIzF9JQorICAlIERvIG91ciBiZXN0IG5vdCB0byBicmVhayBhZnRlciB0aGUgaW5pdGlhbC4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIC4zM1xiYXNlbGluZXNraXAgcGx1cyAuMVxiYXNlbGluZXNraXAKK319CisKKyUgXGVudHJ5IHR5cGVzZXRzIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgdGhlIHRleHQgKCMxKSwgZG90IGxlYWRlcnMsIGFuZAorJSB0aGVuIHBhZ2UgbnVtYmVyICgjMikgZmx1c2hlZCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgSXQgaXMgdXNlZCBmb3IgaW5kZXgKKyUgYW5kIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJpZXMuICBUaGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IFxsZWZ0c2tpcC4KKyUKKyUgQSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gd291bGQgc3RhcnQgbGlrZSB0aGlzOgorJQlcZGVmXGVudHJ5IzEjMnsuLi4KKyUgQnV0IHRoaXMgZnJvemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxkZWZcdGVtcGF7e1xybSB9fSUKKyAgICBcZGVmXHRlbXBieyMxfSUKKyAgICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICAgIFxlZGVmXHRlbXBke1x0ZW1wYn0lCisgICAgXGlmeFx0ZW1wY1x0ZW1wZAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBcZG90ZmlsbCBleGNlcHQgdGFrZXMgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUgJHtcaXQgLn0kIFxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CisKK1xkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KKworXG5ld3NraXBcc2Vjb25kYXJ5aW5kZW50IFxzZWNvbmRhcnlpbmRlbnQ9MC41Y20KK1xkZWZcc2Vjb25kYXJ5IzEjMnt7JQorICBccGFyZmlsbHNraXA9MGluCisgIFxwYXJza2lwPTBpbgorICBcaGFuZ2luZGVudD0xaW4KKyAgXGhhbmdhZnRlcj0xCisgIFxub2luZGVudFxoc2tpcFxzZWNvbmRhcnlpbmRlbnRcaGJveHsjMX1caW5kZXhkb3RmaWxsCisgIFxpZnBkZgorICAgIFxwZGZnZXR0b2tzIzIuXCBcdGhlXHRva3NBICUgVGhlIHBhZ2UgbnVtYmVyIGVuZHMgdGhlIHBhcmFncmFwaC4KKyAgXGVsc2UKKyAgICAjMgorICBcZmkKKyAgXHBhcgorfX0KKworJSBEZWZpbmUgdHdvLWNvbHVtbiBtb2RlLCB3aGljaCB3ZSB1c2UgdG8gdHlwZXNldCBpbmRleGVzLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2ssIHBhZ2UgNDE2LCB3aGljaCBpcyB0byBzYXksCislIHRoZSBtYW5tYWMudGV4IGZvcm1hdCB1c2VkIHRvIHByaW50IHRoZSBUZVhib29rIGl0c2VsZi4KK1xjYXRjb2RlYFxAPTExCisKK1xuZXdib3hccGFydGlhbHBhZ2UKK1xuZXdkaW1lblxkb3VibGVjb2x1bW5oc2l6ZQorCitcZGVmXGJlZ2luZG91YmxlY29sdW1uc3tcYmVnaW5ncm91cCAlIGVuZGVkIGJ5IFxlbmRkb3VibGVjb2x1bW5zCisgICUgR3JhYiBhbnkgc2luZ2xlLWNvbHVtbiBtYXRlcmlhbCBhYm92ZSB1cy4KKyAgXG91dHB1dCA9IHslCisgICAgJQorICAgICUgSGVyZSBpcyBhIHBvc3NpYmlsaXR5IG5vdCBmb3Jlc2VlbiBpbiBtYW5tYWM6IGlmIHdlIGFjY3VtdWxhdGUgYQorICAgICUgd2hvbGUgbG90IG9mIG1hdGVyaWFsLCB3ZSBtaWdodCBlbmQgdXAgY2FsbGluZyB0aGlzIFxvdXRwdXQKKyAgICAlIHJvdXRpbmUgdHdpY2UgaW4gYSByb3cgKHNlZSB0aGUgZG91YmxlY29sLWxvc2UgdGVzdCwgd2hpY2ggaXMKKyAgICAlIGVzc2VudGlhbGx5IGEgY291cGxlIG9mIGluZGV4ZXMgd2l0aCBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmKS4gIEluCisgICAgJSB0aGF0IGNhc2Ugd2UganVzdCBzaGlwIG91dCB3aGF0IGlzIGluIFxwYXJ0aWFscGFnZSB3aXRoIHRoZSBub3JtYWwKKyAgICAlIG91dHB1dCByb3V0aW5lLiAgR2VuZXJhbGx5LCBccGFydGlhbHBhZ2Ugd2lsbCBiZSBlbXB0eSB3aGVuIHRoaXMKKyAgICAlIHJ1bnMgYW5kIHRoaXMgd2lsbCBiZSBhIG5vLW9wLiAgU2VlIHRoZSBpbmRleHNwcmVhZC50ZXggdGVzdCBjYXNlLgorICAgIFxpZnZvaWRccGFydGlhbHBhZ2UgXGVsc2UKKyAgICAgIFxvbmVwYWdlb3V0e1xwYWdlY29udGVudHNccGFydGlhbHBhZ2V9JQorICAgIFxmaQorICAgICUKKyAgICBcZ2xvYmFsXHNldGJveFxwYXJ0aWFscGFnZSA9IFx2Ym94eyUKKyAgICAgICUgVW52Ym94IHRoZSBtYWluIG91dHB1dCBwYWdlLgorICAgICAgXHVudmJveFxQQUdFCisgICAgICBca2Vybi1cdG9wc2tpcCBca2VyblxiYXNlbGluZXNraXAKKyAgICB9JQorICB9JQorICBcZWplY3QgJSBydW4gdGhhdCBvdXRwdXQgcm91dGluZSB0byBzZXQgXHBhcnRpYWxwYWdlCisgICUKKyAgJSBVc2UgdGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIHN1YnNlcXVlbnQgcGFnZXMuCisgIFxvdXRwdXQgPSB7XGRvdWJsZWNvbHVtbm91dH0lCisgICUKKyAgJSBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLiAgV2UgY291bGQgZG8gdGhpcyBvbmNlIG91dHNpZGUgdGhpcworICAlIHJvdXRpbmUsIGluIGVhY2ggb2YgQHNtYWxsYm9vaywgQGFmb3VycGFwZXIsIGFuZCB0aGUgZGVmYXVsdCA4LjV4MTEKKyAgJSBmb3JtYXQsIGJ1dCB0aGVuIHdlIHJlcGVhdCB0aGUgc2FtZSBjb21wdXRhdGlvbi4gIFJlcGVhdGluZyBhIGNvdXBsZQorICAlIG9mIGFzc2lnbm1lbnRzIG9uY2UgcGVyIGluZGV4IGlzIGNsZWFybHkgbWVhbmluZ2xlc3MgZm9yIHRoZQorICAlIGV4ZWN1dGlvbiB0aW1lLCBzbyB3ZSBtYXkgYXMgd2VsbCBkbyBpdCBpbiBvbmUgcGxhY2UuCisgICUKKyAgJSBGaXJzdCB3ZSBoYWx2ZSB0aGUgbGluZSBsZW5ndGgsIGxlc3MgYSBsaXR0bGUgZm9yIHRoZSBndXR0ZXIgYmV0d2VlbgorICAlIHRoZSBjb2x1bW5zLiAgV2UgY29tcHV0ZSB0aGUgZ3V0dGVyIGJhc2VkIG9uIHRoZSBsaW5lIGxlbmd0aCwgc28gaXQKKyAgJSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgcGFwZXIgZm9ybWF0LiAgVGhlIG1hZ2ljIGNvbnN0YW50CisgICUgYmVsb3cgaXMgY2hvc2VuIHNvIHRoYXQgdGhlIGd1dHRlciBoYXMgdGhlIHNhbWUgdmFsdWUgKHdlbGwsICstPDFwdCkKKyAgJSBhcyBpdCBkaWQgd2hlbiB3ZSBoYXJkLWNvZGVkIGl0LgorICAlCisgICUgV2UgcHV0IHRoZSByZXN1bHQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlciwgXGRvdWJsZWNvbHVtaHNpemUsIHNvIHdlCisgICUgY2FuIHJlc3RvcmUgaXQgaW4gXHBhZ2Vzb2ZhciwgYWZ0ZXIgXGhzaXplIGl0c2VsZiBoYXMgKHBvdGVudGlhbGx5KQorICAlIGJlZW4gY2xvYmJlcmVkLgorICAlCisgIFxkb3VibGVjb2x1bW5oc2l6ZSA9IFxoc2l6ZQorICAgIFxhZHZhbmNlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IC0uMDQxNTRcaHNpemUKKyAgICBcZGl2aWRlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IDIKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgICUKKyAgJSBEb3VibGUgdGhlIFx2c2l6ZSBhcyB3ZWxsLiAgKFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSByZWdpc3RlciBoZXJlLAorICAlIHNpbmNlIG5vYm9keSBjbG9iYmVycyBcdnNpemUuKQorICBcdnNpemUgPSAyXHZzaXplCit9CisKKyUgVGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIGFsbCBkb3VibGUtY29sdW1uIHBhZ2VzIGV4Y2VwdAorJSB0aGUgbGFzdC4KKyUKK1xkZWZcZG91YmxlY29sdW1ub3V0eyUKKyAgXHNwbGl0dG9wc2tpcD1cdG9wc2tpcCBcc3BsaXRtYXhkZXB0aD1cbWF4ZGVwdGgKKyAgJSBHZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb2x1bW5zIC0tIHRoZSBub3JtYWwKKyAgJSAodW5kb3VibGVkKSBwYWdlIGhlaWdodCBtaW51cyBhbnkgbWF0ZXJpYWwgbGVmdCBvdmVyIGZyb20gdGhlCisgICUgcHJldmlvdXMgcGFnZS4KKyAgXGRpbWVuQCA9IFx2c2l6ZQorICBcZGl2aWRlXGRpbWVuQCBieSAyCisgIFxhZHZhbmNlXGRpbWVuQCBieSAtXGh0XHBhcnRpYWxwYWdlCisgICUKKyAgJSBib3gwIHdpbGwgYmUgdGhlIGxlZnQtaGFuZCBjb2x1bW4sIGJveDIgdGhlIHJpZ2h0LgorICBcc2V0Ym94MD1cdnNwbGl0MjU1IHRvXGRpbWVuQCBcc2V0Ym94Mj1cdnNwbGl0MjU1IHRvXGRpbWVuQAorICBcb25lcGFnZW91dFxwYWdlc29mYXIKKyAgXHVudmJveDI1NQorICBccGVuYWx0eVxvdXRwdXRwZW5hbHR5Cit9CislCislIFJlLW91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBwYWdlIC0tIGFueSBwcmV2aW91cyBtYXRlcmlhbCwKKyUgZm9sbG93ZWQgYnkgdGhlIHR3byBib3hlcyB3ZSBqdXN0IHNwbGl0LCBpbiBib3gwIGFuZCBib3gyLgorXGRlZlxwYWdlc29mYXJ7JQorICBcdW52Ym94XHBhcnRpYWxwYWdlCisgICUKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgIFx3ZDA9XGhzaXplIFx3ZDI9XGhzaXplCisgIFxoYm94IHRvXHBhZ2V3aWR0aHtcYm94MFxoZmlsXGJveDJ9JQorfQorJQorJSBBbGwgZG9uZSB3aXRoIGRvdWJsZSBjb2x1bW5zLgorXGRlZlxlbmRkb3VibGVjb2x1bW5zeyUKKyAgXG91dHB1dCA9IHslCisgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQorICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KKyAgICBcYmFsYW5jZWNvbHVtbnMKKyAgICAlCisgICAgJSBJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHRvbyBtdWNoIG1hdGVyaWFsIGZvciB0aGUgY3VycmVudCBwYWdlLAorICAgICUgdGhvdWdoLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIFxvdXRwdXQKKyAgICAlIGludm9jYXRpb24gZW5kcy4gIEhhdmluZyBjYWxsZWQgXGJhbGFuY2Vjb2x1bW5zIG9uY2UsIHdlIGRvIG5vdAorICAgICUgd2FudCB0byBjYWxsIGl0IGFnYWluLiAgVGhlcmVmb3JlLCByZXNldCBcb3V0cHV0IHRvIGl0cyBub3JtYWwKKyAgICAlIGRlZmluaXRpb24gcmlnaHQgYXdheS4gIChXZSBob3BlIFxiYWxhbmNlY29sdW1ucyB3aWxsIG5ldmVyIGJlCisgICAgJSBjYWxsZWQgb24gdG8gYmFsYW5jZSB0b28gbXVjaCBtYXRlcmlhbCwgYnV0IGlmIGl0IGlzLCB0aGlzIG1ha2VzCisgICAgJSB0aGUgb3V0cHV0IHNvbWV3aGF0IG1vcmUgcGFsYXRhYmxlLikKKyAgICBcZ2xvYmFsXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fSUKKyAgfSUKKyAgXGVqZWN0CisgIFxlbmRncm91cCAlIHN0YXJ0ZWQgaW4gXGJlZ2luZG91YmxlY29sdW1ucworICAlCisgICUgXHBhZ2Vnb2FsIHdhcyBzZXQgdG8gdGhlIGRvdWJsZWQgXHZzaXplIGFib3ZlLCBzaW5jZSB3ZSByZXN0YXJ0ZWQKKyAgJSB0aGUgY3VycmVudCBwYWdlLiAgV2UncmUgbm93IGJhY2sgdG8gbm9ybWFsIHNpbmdsZS1jb2x1bW4KKyAgJSB0eXBlc2V0dGluZywgc28gcmVzZXQgXHBhZ2Vnb2FsIHRvIHRoZSBub3JtYWwgXHZzaXplIChhZnRlciB0aGUKKyAgJSBcZW5kZ3JvdXAgd2hlcmUgXHZzaXplIGdvdCByZXN0b3JlZCkuCisgIFxwYWdlZ29hbCA9IFx2c2l6ZQorfQorJQorJSBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG91YmxlIGNvbHVtbiBtYXRlcmlhbC4KK1xkZWZcYmFsYW5jZWNvbHVtbnN7JQorICBcc2V0Ym94MCA9IFx2Ym94e1x1bnZib3gyNTV9JSBsaWtlIFxib3gyNTUgYnV0IG1vcmUgZWZmaWNpZW50LCBzZWUgcC4xMjAuCisgIFxkaW1lbkAgPSBcaHQwCisgIFxhZHZhbmNlXGRpbWVuQCBieSBcdG9wc2tpcAorICBcYWR2YW5jZVxkaW1lbkAgYnktXGJhc2VsaW5lc2tpcAorICBcZGl2aWRlXGRpbWVuQCBieSAyICUgdGFyZ2V0IHRvIHNwbGl0IHRvCisgICVkZWJ1Z1xtZXNzYWdle2ZpbmFsIDItY29sdW1uIG1hdGVyaWFsIGhlaWdodD1cdGhlXGh0MCwgdGFyZ2V0PVx0aGVcZGltZW5ALn0lCisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlIExvb3AgdW50aWwgd2UgZ2V0IGEgZGVjZW50IGJyZWFrcG9pbnQuCisgIHslCisgICAgXHZiYWRuZXNzID0gMTAwMDAKKyAgICBcbG9vcAorICAgICAgXGdsb2JhbFxzZXRib3gzID0gXGNvcHkwCisgICAgICBcZ2xvYmFsXHNldGJveDEgPSBcdnNwbGl0MyB0byBcZGltZW5ACisgICAgXGlmZGltXGh0Mz5cZGltZW5ACisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZGltZW5AIGJ5IDFwdAorICAgIFxyZXBlYXQKKyAgfSUKKyAgJWRlYnVnXG1lc3NhZ2V7c3BsaXQgdG8gXHRoZVxkaW1lbkAsIGNvbHVtbiBoZWlnaHRzOiBcdGhlXGh0MSwgXHRoZVxodDMufSUKKyAgXHNldGJveDA9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gxfSUKKyAgXHNldGJveDI9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gzfSUKKyAgJQorICBccGFnZXNvZmFyCit9CitcY2F0Y29kZWBcQCA9IFxvdGhlcgorCisKK1xtZXNzYWdle3NlY3Rpb25pbmcsfQorJSBDaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4KKworJSBcdW5udW1iZXJlZG5vIGlzIGFuIG94eW1vcm9uLCBvZiBjb3Vyc2UuICBCdXQgd2UgY291bnQgdGhlIHVubnVtYmVyZWQKKyUgc2VjdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhlbSB1bmFtYmlndW91c2x5IGluIHRoZSBwZGYKKyUgb3V0bGluZXMgYnkgdGhlaXIgInNlY3Rpb24gbnVtYmVyIi4gIFdlIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBjaGFwdGVyCislIG51bWJlcnMgYnkgc3RhcnRpbmcgdGhlbSBhdCAxMDAwMC4gIChJZiBhIGRvY3VtZW50IGV2ZXIgaGFzIDEwMDAwCislIGNoYXB0ZXJzLCB3ZSdyZSBpbiB0cm91YmxlIGFueXdheSwgSSdtIHN1cmUuKQorXG5ld2NvdW50XHVubnVtYmVyZWRubyBcdW5udW1iZXJlZG5vID0gMTAwMDAKK1xuZXdjb3VudFxjaGFwbm8KK1xuZXdjb3VudFxzZWNubyAgICAgICAgXHNlY25vPTAKK1xuZXdjb3VudFxzdWJzZWNubyAgICAgXHN1YnNlY25vPTAKK1xuZXdjb3VudFxzdWJzdWJzZWNubyAgXHN1YnN1YnNlY25vPTAKKworJSBUaGlzIGNvdW50ZXIgaXMgZnVubnkgc2luY2UgaXQgY291bnRzIHRocm91Z2ggY2hhcmNvZGVzIG9mIGxldHRlcnMgQSwgQiwgLi4uCitcbmV3Y291bnRcYXBwZW5kaXhubyAgXGFwcGVuZGl4bm8gPSBgXEAKKyUKKyUgXGRlZlxhcHBlbmRpeGxldHRlcntcY2hhclx0aGVcYXBwZW5kaXhub30KKyUgV2UgZG8gdGhlIGZvbGxvd2luZyB1Z2x5IGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgdGhlIGFib3ZlIHNpbXBsZQorJSBjb25zdHJ1Y3QgZm9yIHRoZSBzYWtlIG9mIHBkZnRleCwgd2hpY2ggbmVlZHMgdGhlIGFjdHVhbAorJSBsZXR0ZXIgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdHlwZXNldC4KKyUKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KKyUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCislIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCitcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc3NlY3Rpb257fQorCitcbmV3Y291bnRcYWJzc2VjbGV2ZWwgJSB1c2VkIHRvIGNhbGN1bGF0ZSBwcm9wZXIgaGVhZGluZyBsZXZlbAorXG5ld2NvdW50XHNlY2Jhc2Vcc2VjYmFzZT0wICUgQHJhaXNlc2VjdGlvbnMvQGxvd2Vyc2VjdGlvbnMgbW9kaWZ5IHRoaXMgY291bnQKKworJSBAcmFpc2VzZWN0aW9uczogdHJlYXQgQHNlY3Rpb24gYXMgY2hhcHRlciwgQHN1YnNlY3Rpb24gYXMgc2VjdGlvbiwgZXRjLgorXGRlZlxyYWlzZXNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IC0xfQorXGxldFx1cD1ccmFpc2VzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIEBsb3dlcnNlY3Rpb25zOiB0cmVhdCBAY2hhcHRlciBhcyBzZWN0aW9uLCBAc2VjdGlvbiBhcyBzdWJzZWN0aW9uLCBldGMuCitcZGVmXGxvd2Vyc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgMX0KK1xsZXRcZG93bj1cbG93ZXJzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIHdlIG9ubHkgaGF2ZSBzdWJzdWIuCitcY2hhcmRlZlxtYXhzZWNsZXZlbCA9IDMKKyUKKyUgQSBudW1iZXJlZCBzZWN0aW9uIHdpdGhpbiBhbiB1bm51bWJlcmVkIGNoYW5nZXMgdG8gdW5udW1iZXJlZCB0b28uCislIFRvIGFjaGl2ZSB0aGlzLCByZW1lbWJlciB0aGUgImJpZ2dlc3QiIHVubnVtLiBzZWMuIHdlIGFyZSBjdXJyZW50bHkgaW46CitcY2hhcmRlZlx1bm1sZXZlbCA9IFxtYXhzZWNsZXZlbAorJQorJSBUcmFjZSB3aGV0aGVyIHRoZSBjdXJyZW50IGNoYXB0ZXIgaXMgYW4gYXBwZW5kaXggb3Igbm90OgorJSBcY2hhcGhlYWR0eXBlIGlzICJOIiBvciAiQSIsIHVubnVtYmVyZWQgY2hhcHRlcnMgYXJlIGlnbm9yZWQuCitcZGVmXGNoYXBoZWFkdHlwZXtOfQorCislIENob29zZSBhIGhlYWRpbmcgbWFjcm8KKyUgIzEgaXMgaGVhZGluZyB0eXBlCislICMyIGlzIGhlYWRpbmcgbGV2ZWwKKyUgIzMgaXMgdGV4dCBmb3IgaGVhZGluZworXGRlZlxnZW5oZWFkIzEjMiMzeyUKKyAgJSBDb21wdXRlIHRoZSBhYnMuIHNlYy4gbGV2ZWw6CisgIFxhYnNzZWNsZXZlbD0jMgorICBcYWR2YW5jZVxhYnNzZWNsZXZlbCBieSBcc2VjYmFzZQorICAlIE1ha2Ugc3VyZSBcYWJzc2VjbGV2ZWwgZG9lc24ndCBmYWxsIG91dHNpZGUgdGhlIHJhbmdlOgorICBcaWZudW0gXGFic3NlY2xldmVsIDwgMAorICAgIFxhYnNzZWNsZXZlbCA9IDAKKyAgXGVsc2UKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gMworICAgICAgXGFic3NlY2xldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBUaGUgaGVhZGluZyB0eXBlOgorICBcZGVmXGhlYWR0eXBleyMxfSUKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCBcdW5tbGV2ZWwKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gXGFic3NlY2xldmVsCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBDaGVjayBmb3IgYXBwZW5kaXggc2VjdGlvbnM6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA9IDAKKyAgICAgIFxlZGVmXGNoYXBoZWFkdHlwZXtcaGVhZHR5cGV9JQorICAgIFxlbHNlCisgICAgICBcaWYgXGhlYWR0eXBlIEFcaWYgXGNoYXBoZWFkdHlwZSBOJQorCVxlcnJtZXNzYWdle0BhcHBlbmRpeC4uLiB3aXRoaW4gYSBub24tYXBwZW5kaXggY2hhcHRlcn0lCisgICAgICBcZmlcZmkKKyAgICBcZmkKKyAgICAlIENoZWNrIGZvciBudW1iZXJlZCB3aXRoaW4gdW5udW1iZXJlZDoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gXHVubWxldmVsCisgICAgICBcZGVmXGhlYWR0eXBle1V9JQorICAgIFxlbHNlCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgTm93IHByaW50IHRoZSBoZWFkaW5nOgorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCVx1bm51bWJlcmVkenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWYgXGhlYWR0eXBlIEElCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcYXBwZW5kaXh6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHNlY3Rpb256enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcY2hhcHRlcnp6ensjM30lCisgICAgICBcb3IgXHNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIGFuIGludGVyZmFjZToKK1xkZWZcbnVtaGVhZHtcZ2VuaGVhZCBOfQorXGRlZlxhcHBoZWFke1xnZW5oZWFkIEF9CitcZGVmXHVubm1oZWFke1xnZW5oZWFkIFV9CisKKyUgQGNoYXB0ZXIsIEBhcHBlbmRpeCwgQHVubnVtYmVyZWQuICBJbmNyZW1lbnQgdG9wLWxldmVsIGNvdW50ZXIsIHJlc2V0CislIGFsbCBsb3dlci1sZXZlbCBzZWN0aW9uaW5nIGNvdW50ZXJzIHRvIHplcm8uCislCislIEFsc28gc2V0IFxjaGFwbGV2ZWxwcmVmaXgsIHdoaWNoIHdlIHByZXBlbmQgdG8gQGZsb2F0IHNlcXVlbmNlIG51bWJlcnMKKyUgKGUuZy4sIGZpZ3VyZXMpLCBxLnYuICBCeSBkZWZhdWx0IChiZWZvcmUgYW55IGNoYXB0ZXIpLCB0aGF0IGlzIGVtcHR5LgorXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyUKK1xvdXRlclxwYXJzZWFyZ2RlZlxjaGFwdGVye1xudW1oZWFkMHsjMX19ICUgbm9ybWFsbHkgbnVtaGVhZDAgY2FsbHMgY2hhcHRlcnp6egorXGRlZlxjaGFwdGVyenp6IzF7JQorICAlIHNlY3Rpb24gcmVzZXR0aW5nIGlzIFxnbG9iYWwgaW4gY2FzZSB0aGUgY2hhcHRlciBpcyBpbiBhIGdyb3VwLCBzdWNoCisgICUgYXMgYW4gQGluY2x1ZGUgZmlsZS4KKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcY2hhcG5vIGJ5IDEKKyAgJQorICAlIFVzZWQgZm9yIFxmbG9hdC4KKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1x0aGVcY2hhcG5vLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXG1lc3NhZ2V7XHB1dHdvcmRDaGFwdGVyXHNwYWNlIFx0aGVcY2hhcG5vfSUKKyAgJQorICAlIFdyaXRlIHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgXGNoYXBtYWNyb3sjMX17WW51bWJlcmVkfXtcdGhlXGNoYXBub30lCisgICUKKyAgJSBTbyBAc2VjdGlvbiBhbmQgdGhlIGxpa2UgYXJlIG51bWJlcmVkIHVuZGVybmVhdGggdGhpcyBjaGFwdGVyLgorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXh7XGFwcGhlYWQweyMxfX0gJSBub3JtYWxseSBhcHBoZWFkMCBjYWxscyBhcHBlbmRpeHp6egorXGRlZlxhcHBlbmRpeHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcYXBwZW5kaXhsZXR0ZXIufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcZGVmXGFwcGVuZGl4bnVte1xwdXR3b3JkQXBwZW5kaXhcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKKyAgXG1lc3NhZ2V7XGFwcGVuZGl4bnVtfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxhcHBlbmRpeHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWR7XHVubm1oZWFkMHsjMX19ICUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6enoKK1xkZWZcdW5udW1iZXJlZHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcdW5udW1iZXJlZG5vIGJ5IDEKKyAgJQorICAlIFNpbmNlIGFuIHVubnVtYmVyZWQgaGFzIG5vIG51bWJlciwgbm8gcHJlZml4IGZvciBmaWd1cmVzLgorICBcZ2xvYmFsXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICAlIFRoaXMgdXNlZCB0byBiZSBzaW1wbHkgXG1lc3NhZ2V7IzF9LCBidXQgVGVYIGZ1bGx5IGV4cGFuZHMgdGhlCisgICUgYXJndW1lbnQgdG8gXG1lc3NhZ2UuICBUaGVyZWZvcmUsIGlmICMxIGNvbnRhaW5lZCBALWNvbW1hbmRzLCBUZVgKKyAgJSBleHBhbmRlZCB0aGVtLiAgRm9yIGV4YW1wbGUsIGluIGBAdW5udW1iZXJlZCBUaGUgQGNpdGV7Qm9va30nLCBUZVgKKyAgJSBleHBhbmRlZCBAY2l0ZSAod2hpY2ggdHVybnMgb3V0IHRvIGNhdXNlIGVycm9ycyBiZWNhdXNlIFxjaXRlIGlzIG1lYW50CisgICUgdG8gYmUgZXhlY3V0ZWQsIG5vdCBleHBhbmRlZCkuCisgICUKKyAgJSBBbnl3YXksIHdlIGRvbid0IHdhbnQgdGhlIGZ1bGx5LWV4cGFuZGVkIGRlZmluaXRpb24gb2YgQGNpdGUgdG8gYXBwZWFyCisgICUgYXMgYSByZXN1bHQgb2YgdGhlIFxtZXNzYWdlLCB3ZSBqdXN0IHdhbnQgYEBjaXRlJyBpdHNlbGYuICBXZSB1c2UKKyAgJSBcdGhlPHRva3MgcmVnaXN0ZXI+IHRvIGFjaGlldmUgdGhpczogVGVYIGV4cGFuZHMgXHRoZTx0b2tzPiBvbmx5IG9uY2UsCisgICUgc2ltcGx5IHlpZWxkaW5nIHRoZSBjb250ZW50cyBvZiA8dG9rcyByZWdpc3Rlcj4uICAoV2UgYWxzbyBkbyB0aGlzIGZvcgorICAlIHRoZSB0b2MgZW50cmllcy4pCisgIFx0b2tzMCA9IHsjMX0lCisgIFxtZXNzYWdleyhcdGhlXHRva3MwKX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXHVubnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnN1YnNlYworfQorCislIEBjZW50ZXJjaGFwIGlzIGxpa2UgQHVubnVtYmVyZWQsIGJ1dCB0aGUgaGVhZGluZyBpcyBjZW50ZXJlZC4KK1xvdXRlclxwYXJzZWFyZ2RlZlxjZW50ZXJjaGFweyUKKyAgJSBXZWxsLCB3ZSBjb3VsZCBkbyB0aGUgZm9sbG93aW5nIGluIGEgZ3JvdXAsIGJ1dCB0aGF0IHdvdWxkIGJyZWFrCisgICUgYW4gYXNzdW1wdGlvbiB0aGF0IFxjaGFwbWFjcm8gaXMgY2FsbGVkIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwuCisgICUgVGh1cyB3ZSBhcmUgc2FmZXIgdGhpcyB3YXk6CQktLWthc2FsLCAyNGZlYjA0CisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXGNlbnRlcnBhcmFtZXRlcnMKKyAgXHVubm1oZWFkMHsjMX0lCisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4Cit9CisKKyUgQHRvcCBpcyBsaWtlIEB1bm51bWJlcmVkLgorXGxldFx0b3BcdW5udW1iZXJlZAorCislIFNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc2Vje1xudW1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgc2Vjenp6CitcZGVmXHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHNlY3Rpb257XGFwcGhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHNlY3Rpb256enoKK1xkZWZcYXBwZW5kaXhzZWN0aW9uenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNub30lCit9CitcbGV0XGFwcGVuZGl4c2VjXGFwcGVuZGl4c2VjdGlvbgorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHNlY3tcdW5ubWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc2Vjenp6CitcZGVmXHVubnVtYmVyZWRzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNub30lCit9CisKKyUgU3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzZWN7XGFwcGhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnNlY3tcdW5ubWhlYWQyeyMxfX0gJW5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworJSBTdWJzdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnN1YnNlY3tcbnVtaGVhZDN7IzF9fSAlIG5vcm1hbGx5IG51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic3Vic2Vje1xhcHBoZWFkM3sjMX19ICUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN7XHVubm1oZWFkM3sjMX19ICVub3JtYWxseSB1bm51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGNvbnRyb2wgd2hhdCB0aGUgc2VjdGlvbiBjb21tYW5kcyBkbywgYWNjb3JkaW5nCislIHRvIHdoYXQga2luZCBvZiBjaGFwdGVyIHdlIGFyZSBpbiAob3JkaW5hcnksIGFwcGVuZGl4LCBvciB1bm51bWJlcmVkKS4KKyUgRGVmaW5lIHRoZW0gYnkgZGVmYXVsdCBmb3IgYSBudW1iZXJlZCBjaGFwdGVyLgorXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCitcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKK1xsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworCislIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKKworJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6CislICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKKyUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KKyUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQorJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgorJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCislICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KKworCitcZGVmXG1ham9yaGVhZGluZ3slCisgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCisgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egorfQorCitcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQorXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKKyAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXHBhcnNlYXJnZGVmXGhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3Vic3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworJSUlIERlZmluZSBwbGFpbiBjaGFwdGVyIHN0YXJ0cywgYW5kIHBhZ2Ugb24vb2ZmIHN3aXRjaGluZyBmb3IgaXQKKyUgUGFyYW1ldGVyIGNvbnRyb2xsaW5nIHNraXAgYmVmb3JlIGNoYXB0ZXIgaGVhZGluZ3MgKGlmIG5lZWRlZCkKKworXG5ld3NraXBcY2hhcGhlYWRpbmdza2lwCisKK1xkZWZcY2hhcGJyZWFre1xkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXAgey00MDAwfX0KK1xkZWZcY2hhcHBhZ2Vye1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KK1xkZWZcY2hhcG9kZHBhZ2V7XGNoYXBwYWdlciBcaWZvZGRccGFnZW5vIFxlbHNlIFxoYm94IHRvIDBwdHt9IFxjaGFwcGFnZXJcZml9CisKK1xkZWZcc2V0Y2hhcHRlcm5ld3BhZ2UgIzEge1xjc25hbWUgQ0hBUFBBRyMxXGVuZGNzbmFtZX0KKworXGRlZlxDSEFQUEFHb2ZmeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBicmVhaworXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcn0KKworXGRlZlxDSEFQUEFHb257JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU3NpbmdsZX19CisKK1xkZWZcQ0hBUFBBR29kZHslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfX0KKworXENIQVBQQUdvbgorCislIENoYXB0ZXIgb3BlbmluZy4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIHR5cGUgKFludW1iZXJlZCwgWW5vdGhpbmcsCislIFlhcHBlbmRpeCwgWW9taXRmcm9tdG9jKSwgIzMgdGhlIGNoYXB0ZXIgbnVtYmVyLgorJQorJSBUbyB0ZXN0IGFnYWluc3Qgb3VyIGFyZ3VtZW50LgorXGRlZlxZbm90aGluZ2tleXdvcmR7WW5vdGhpbmd9CitcZGVmXFlvbWl0ZnJvbXRvY2tleXdvcmR7WW9taXRmcm9tdG9jfQorXGRlZlxZYXBwZW5kaXhrZXl3b3Jke1lhcHBlbmRpeH0KKyUKK1xkZWZcY2hhcG1hY3JvIzEjMiMzeyUKKyAgXHBjaGFwc2VwbWFjcm8KKyAgeyUKKyAgICBcY2hhcGZvbnRzIFxybQorICAgICUKKyAgICAlIEhhdmUgdG8gZGVmaW5lIFx0aGlzc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBcZG9ub2RlcmVmLCBiZWNhdXNlIHRoZQorICAgICUgeHJlZiBjb2RlIGV2ZW50dWFsbHkgdXNlcyBpdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBoYXMgdG8gYmUgY2FsbGVkCisgICAgJSBhZnRlciBccGNoYXBzZXBtYWNybywgb3IgdGhlIGhlYWRsaW5lIHdpbGwgY2hhbmdlIHRvbyBzb29uLgorICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZ2RlZlx0aGlzY2hhcHRlcm5hbWV7IzF9JQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzZXBhcmF0aW5nIHNwYWNlIGlmIHdlIGhhdmUgYSBjaGFwdGVyL2FwcGVuZGl4CisgICAgJSBudW1iZXIsIGFuZCBkb24ndCBwcmludCB0aGUgdW5udW1iZXJlZCBgYG51bWJlcicnLgorICAgIFxkZWZcdGVtcHR5cGV7IzJ9JQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5uY2hhcH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUgY29udGVudHMgbGlrZSB1bm51bWJlcmVkLCBidXQgbm8gdG9jIGVudHJ5CisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnt9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgJSBXZSBkb24ndCBzdWJzdGl0dXRlIHRoZSBhY3R1YWwgY2hhcHRlciBuYW1lIGludG8gXHRoaXNjaGFwdGVyCisgICAgICAlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpdHMgbWFjcm9zIGV2YWx1YXRlZCBub3cuICBBbmQgd2UgZG9uJ3QKKyAgICAgICUgdXNlIFx0aGlzc2VjdGlvbiBiZWNhdXNlIHRoYXQgY2hhbmdlcyB3aXRoIGVhY2ggc2VjdGlvbi4KKyAgICAgICUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQXBwZW5kaXh7fSBcYXBwZW5kaXhsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW1jaGFwfSUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQ2hhcHRlcnt9IFx0aGVcY2hhcG5vOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSBmb3IgdGhpcyBjaGFwdGVyLiAgTXVzdCBjb21lIGJlZm9yZSB0aGUKKyAgICAlIFxkb25vZGVyZWYsIGJlY2F1c2Ugd2UgaW5jbHVkZSB0aGUgY3VycmVudCBub2RlIG5hbWUgaW4gdGhlIHRvYworICAgICUgZW50cnksIGFuZCBcZG9ub2RlcmVmIHJlc2V0cyBpdCB0byBlbXB0eS4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZX17IzF9eyMzfSUKKyAgICAlCisgICAgJSBGb3IgcGRmdGV4LCB3ZSBoYXZlIHRvIHdyaXRlIG91dCB0aGUgbm9kZSBkZWZpbml0aW9uIChha2EsIG1ha2UKKyAgICAlIHRoZSBwZGZkZXN0KSBhZnRlciBhbnkgcGFnZSBicmVhaywgYnV0IGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgaGFzCisgICAgJSBiZWVuIHR5cGVzZXQuICBJZiB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBwZGYgb3V0bGluZSBpcyBhZnRlciB0aGUKKyAgICAlIHRleHQsIHRoZW4ganVtcGluZyBmcm9tIHRoZSBvdXRsaW5lIG1heSB3aW5kIHVwIHdpdGggdGhlIHRleHQgbm90CisgICAgJSBiZWluZyB2aXNpYmxlLCBmb3IgaW5zdGFuY2UgdW5kZXIgaGlnaCBtYWduaWZpY2F0aW9uLgorICAgIFxkb25vZGVyZWZ7IzJ9JQorICAgICUKKyAgICAlIFR5cGVzZXQgdGhlIGFjdHVhbCBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKKyAgICAgICAgICBcdW5oYm94MCAjMVxwYXJ9JQorICB9JQorICBcbm9icmVha1xiaWdza2lwICUgbm8gcGFnZSBicmVhayBhZnRlciBhIGNoYXB0ZXIgdGl0bGUKKyAgXG5vYnJlYWsKK30KKworJSBAY2VudGVyY2hhcCAtLSBjZW50ZXJlZCBhbmQgdW5udW1iZXJlZC4KK1xsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4CitcZGVmXGNlbnRlcnBhcmFtZXRlcnN7JQorICBcYWR2YW5jZVxyaWdodHNraXAgYnkgM1xyaWdodHNraXAKKyAgXGxlZnRza2lwID0gXHJpZ2h0c2tpcAorICBccGFyZmlsbHNraXAgPSAwcHQKK30KKworCislIEkgZG9uJ3QgdGhpbmsgdGhpcyBjaGFwdGVyIHN0eWxlIGlzIHN1cHBvcnRlZCBhbnkgbW9yZSwgc28gSSdtIG5vdAorJSB1cGRhdGluZyBpdCB3aXRoIHRoZSBuZXcgbm9kZXJlZiBzdHVmZi4gIFdlJ2xsIHNlZS4gIC0ta2FybCwgMTFhdWcwMy4KKyUKK1xkZWZcc2V0Y2hhcHRlcnN0eWxlICMxIHtcY3NuYW1lIENIQVBGIzFcZW5kY3NuYW1lfQorJQorXGRlZlx1bm5jaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAorICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybSAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxDSEFQRm9wZW57JQorICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KKyAgXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUKK1xuZXdza2lwXHNlY2hlYWRpbmdza2lwCitcZGVmXHNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc2VjaGVhZGluZ3NraXB7LTEwMDB9fQorCislIFN1YnNlY3Rpb24gdGl0bGVzLgorXG5ld3NraXBcc3Vic2VjaGVhZGluZ3NraXAKK1xkZWZcc3Vic2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzdWJzZWNoZWFkaW5nc2tpcHstNTAwfX0KKworJSBTdWJzdWJzZWN0aW9uIHRpdGxlcy4KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ3NraXB7XHN1YnNlY2hlYWRpbmdza2lwfQorXGRlZlxzdWJzdWJzZWNoZWFkaW5nYnJlYWt7XHN1YnNlY2hlYWRpbmdicmVha30KKworCislIFByaW50IGFueSBzaXplLCBhbnkgdHlwZSwgc2VjdGlvbiB0aXRsZS4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIGxldmVsIChzZWMvc3Vic2VjL3N1YnN1YnNlYyksICMzIGlzCislIHRoZSBzZWN0aW9uIHR5cGUgZm9yIHhyZWZzIChZbnVtYmVyZWQsIFlub3RoaW5nLCBZYXBwZW5kaXgpLCAjNCBpcyB0aGUKKyUgc2VjdGlvbiBudW1iZXIuCislCitcZGVmXHNlY3Rpb25oZWFkaW5nIzEjMiMzIzR7JQorICB7JQorICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCisgICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICAlCisgICAgJSBJbnNlcnQgc3BhY2UgYWJvdmUgdGhlIGhlYWRpbmcuCisgICAgXGNzbmFtZSAjMmhlYWRpbmdicmVha1xlbmRjc25hbWUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGRlZlxzZWN0aW9ubGV2ZWx7IzJ9JQorICAgIFxkZWZcdGVtcHR5cGV7IzN9JQorICAgICUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bX0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGFwbWFjcm8uCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGVcc2VjdGlvbmxldmVsfXsjMX17IzR9JQorICAgICUKKyAgICAlIFdyaXRlIHRoZSBub2RlIHJlZmVyZW5jZSAoPSBwZGYgZGVzdGluYXRpb24gZm9yIHBkZnRleCkuCisgICAgJSBBZ2Fpbiwgc2VlIGNvbW1lbnRzIGluIFxjaGFwbWFjcm8uCisgICAgXGRvbm9kZXJlZnsjM30lCisgICAgJQorICAgICUgSW50ZXJsaW5lIGdsdWUgd2lsbCBiZSBpbnNlcnRlZCB3aGVuIHRoZSB2Ym94IGlzIGNvbXBsZXRlZC4KKyAgICAlIFRoYXQgZ2x1ZSB3aWxsIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBmb3IgdGhlIHBhZ2UsIHNpbmNlIGl0J2xsIGJlCisgICAgJSBwcmVjZWRlZCBieSBhIHdoYXRzaXQgKHVzdWFsbHkgZnJvbSB0aGUgXGRvbm9kZXJlZiwgb3IgZnJvbSB0aGUKKyAgICAlIFx3cml0ZXRvY2VudHJ5IGlmIHRoZXJlIHdhcyBubyBub2RlKS4gIFdlIGRvbid0IHdhbnQgdG8gYWxsb3cgdGhhdAorICAgICUgYnJlYWssIHNpbmNlIHRoZW4gdGhlIHdoYXRzaXRzIGNvdWxkIGVuZCB1cCBvbiBwYWdlIG4gd2hpbGUgdGhlCisgICAgJSBzZWN0aW9uIGlzIG9uIHBhZ2UgbisxLCB0aHVzIHRvYy9ldGMuIGFyZSB3cm9uZy4gIERlYmlhbiBidWcgMjc2MDAwLgorICAgIFxub2JyZWFrCisgICAgJQorICAgICUgT3V0cHV0IHRoZSBhY3R1YWwgc2VjdGlvbiBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwICAlIHplcm8gaWYgbm8gc2VjdGlvbiBudW1iZXIKKyAgICAgICAgICBcdW5oYm94MCAjMX0lCisgIH0lCisgICUgQWRkIGV4dHJhIHNwYWNlIGFmdGVyIHRoZSBoZWFkaW5nIC0tIGhhbGYgb2Ygd2hhdGV2ZXIgY2FtZSBhYm92ZSBpdC4KKyAgJSBEb24ndCBhbGxvdyBzdHJldGNoLCB0aG91Z2guCisgIFxrZXJuIC41IFxjc25hbWUgIzJoZWFkaW5nc2tpcFxlbmRjc25hbWUKKyAgJQorICAlIERvIG5vdCBsZXQgdGhlIGtlcm4gYmUgYSBwb3RlbnRpYWwgYnJlYWtwb2ludCwgYXMgaXQgd291bGQgYmUgaWYgaXQKKyAgJSB3YXMgZm9sbG93ZWQgYnkgZ2x1ZS4KKyAgXG5vYnJlYWsKKyAgJQorICAlIFdlJ2xsIGFsbW9zdCBjZXJ0YWlubHkgc3RhcnQgYSBwYXJhZ3JhcGggbmV4dCwgc28gZG9uJ3QgbGV0IHRoYXQKKyAgJSBnbHVlIGFjY3VtdWxhdGUuICAoTm90IGEgYnJlYWtwb2ludCBiZWNhdXNlIGl0J3MgcHJlY2VkZWQgYnkgYQorICAlIGRpc2NhcmRhYmxlIGl0ZW0uKQorICBcdnNraXAtXHBhcnNraXAKKyAgJSAKKyAgJSBUaGlzIGlzIHB1cmVseSBzbyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGlzIGEga25vd24gXHBlbmFsdHkgPgorICAlIDEwMDAwLiAgVGhpcyBpcyBzbyBcc3RhcnRkZWZ1biBjYW4gYXZvaWQgYWxsb3dpbmcgYnJlYWtwb2ludHMgYWZ0ZXIKKyAgJSBzZWN0aW9uIGhlYWRpbmdzLiAgT3RoZXJ3aXNlLCBpdCB3b3VsZCBpbnNlcnQgYSB2YWxpZCBicmVha3BvaW50IGJldHdlZW46CisgICUgCisgICUgICBAc2VjdGlvbiBzZWMtd2hhdGV2ZXIKKyAgJSAgIEBkZWZmbiBkZWYtd2hhdGV2ZXIKKyAgXHBlbmFsdHkgMTAwMDEKK30KKworCitcbWVzc2FnZXt0b2MsfQorJSBUYWJsZSBvZiBjb250ZW50cy4KK1xuZXd3cml0ZVx0b2NmaWxlCisKKyUgV3JpdGUgYW4gZW50cnkgdG8gdGhlIHRvYyBmaWxlLCBvcGVuaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKyUgQ2FsbGVkIGZyb20gQGNoYXB0ZXIsIGV0Yy4KKyUKKyUgRXhhbXBsZSB1c2FnZTogXHdyaXRldG9jZW50cnl7c2VjfXtTZWN0aW9uIE5hbWV9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99CislIFdlIGFwcGVuZCB0aGUgY3VycmVudCBub2RlIG5hbWUgKGlmIGFueSkgYW5kIHBhZ2UgbnVtYmVyIGFzIGFkZGl0aW9uYWwKKyUgYXJndW1lbnRzIGZvciB0aGUgXHtjaGFwLHNlYywuLi59ZW50cnkgbWFjcm9zIHdoaWNoIHdpbGwgZXZlbnR1YWxseQorJSByZWFkIHRoaXMuICBUaGUgbm9kZSBuYW1lIGlzIHVzZWQgaW4gdGhlIHBkZiBvdXRsaW5lcyBhcyB0aGUKKyUgZGVzdGluYXRpb24gdG8ganVtcCB0by4KKyUKKyUgV2Ugb3BlbiB0aGUgLnRvYyBmaWxlIGZvciB3cml0aW5nIGhlcmUgaW5zdGVhZCBvZiBhdCBAc2V0ZmlsZW5hbWUgKG9yCislIGFueSBvdGhlciBmaXhlZCB0aW1lKSBzbyB0aGF0IEBjb250ZW50cyBjYW4gYmUgYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorJSBCdXQgaWYgIzEgaXMgYG9taXQnLCB0aGVuIHdlIGRvbid0IGRvIGFueXRoaW5nLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUKKyUgdGFibGUgb2YgY29udGVudHMgY2hhcHRlciBvcGVuaW5ncyB0aGVtc2VsdmVzLgorJQorXG5ld2lmXGlmdG9jZmlsZW9wZW5lZAorXGRlZlxvbWl0a2V5d29yZHtvbWl0fSUKKyUKK1xkZWZcd3JpdGV0b2NlbnRyeSMxIzIjM3slCisgIFxlZGVmXHdyaXRldG9jdHlwZXsjMX0lCisgIFxpZnhcd3JpdGV0b2N0eXBlXG9taXRrZXl3b3JkIFxlbHNlCisgICAgXGlmdG9jZmlsZW9wZW5lZFxlbHNlCisgICAgICBcaW1tZWRpYXRlXG9wZW5vdXRcdG9jZmlsZSA9IFxqb2JuYW1lLnRvYworICAgICAgXGdsb2JhbFx0b2NmaWxlb3BlbmVkdHJ1ZQorICAgIFxmaQorICAgICUKKyAgICBcaWZsaW5rcworICAgICAge1xhdGR1bW1pZXMKKyAgICAgICBcZWRlZlx0ZW1weyUKKyAgICAgICAgIFx3cml0ZVx0b2NmaWxle0AjMWVudHJ5eyMyfXsjM317XGxhc3Rub2RlfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICAgXHRlbXAKKyAgICAgIH0lCisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJSAKK1xkZWZcYWN0aXZlY2F0Y29kZXN7JQorICBcY2F0Y29kZWBcIj1cYWN0aXZlCisgIFxjYXRjb2RlYFwkPVxhY3RpdmUKKyAgXGNhdGNvZGVgXDw9XGFjdGl2ZQorICBcY2F0Y29kZWBcPj1cYWN0aXZlCisgIFxjYXRjb2RlYFxcPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF49XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgIFxjYXRjb2RlYFx8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXH49XGFjdGl2ZQorfQorCisKKyUgUmVhZCB0aGUgdG9jIGZpbGUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IFRleGluZm8gaW5wdXQuCitcZGVmXHJlYWR0b2NmaWxleyUKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGFjdGl2ZWNhdGNvZGVzCisgIFxpbnB1dCBcam9ibmFtZS50b2MKK30KKworXG5ld3NraXBcY29udGVudHNyaWdodG1hcmdpbiBcY29udGVudHNyaWdodG1hcmdpbj0xaW4KK1xuZXdjb3VudFxzYXZlcGFnZW5vCitcbmV3Y291bnRcbGFzdG5lZ2F0aXZlcGFnZW5vIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSAtMQorCislIFByZXBhcmUgdG8gcmVhZCB3aGF0IHdlJ3ZlIHdyaXR0ZW4gdG8gXHRvY2ZpbGUuCislCitcZGVmXHN0YXJ0Y29udGVudHMjMXslCisgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAlIHN0YXJ0IG9uIGFuIG9kZCBwYWdlLCB1bmxpa2UgY2hhcHRlcnMuICBUaHVzLCB3ZSBtYWludGFpbgorICAlIFxjb250ZW50c2FsaWdubWFjcm8gaW4gcGFyYWxsZWwgd2l0aCBccGFnZWFsaWdubWFjcm8uCisgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICBcY29udGVudHNhbGlnbm1hY3JvCisgIFxpbW1lZGlhdGVcY2xvc2VvdXRcdG9jZmlsZQorICAlCisgICUgRG9uJ3QgbmVlZCB0byBwdXQgYENvbnRlbnRzJyBvciBgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KKyAgJSBJdCBpcyBhYnVuZGFudGx5IGNsZWFyIHdoYXQgdGhleSBhcmUuCisgIFxkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgXGNoYXBtYWNyb3sjMX17WW9taXRmcm9tdG9jfXt9JQorICAlCisgIFxzYXZlcGFnZW5vID0gXHBhZ2VubworICBcYmVnaW5ncm91cCAgICAgICAgICAgICAgICAgICUgU2V0IHVwIHRvIGhhbmRsZSBjb250ZW50cyBmaWxlcyBwcm9wZXJseS4KKyAgICBccmFnZ2VkYm90dG9tICAgICAgICAgICAgICAlIFdvcnJ5IG1vcmUgYWJvdXQgYnJlYWtwb2ludHMgdGhhbiB0aGUgYm90dG9tLgorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cY29udGVudHNyaWdodG1hcmdpbiAlIERvbid0IHVzZSB0aGUgZnVsbCBsaW5lIGxlbmd0aC4KKyAgICAlCisgICAgJSBSb21hbiBudW1lcmFscyBmb3IgcGFnZSBudW1iZXJzLgorICAgIFxpZm51bSBccGFnZW5vPjAgXGdsb2JhbFxwYWdlbm8gPSBcbGFzdG5lZ2F0aXZlcGFnZW5vIFxmaQorfQorCisKKyUgTm9ybWFsIChsb25nKSB0b2MuCitcZGVmXGNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxwZGZtYWtlb3V0bGluZXMKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CisKKyUgQW5kIGp1c3QgdGhlIGNoYXB0ZXJzLgorXGRlZlxzdW1tYXJ5Y29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFNob3J0VE9DfSUKKyAgICAlCisgICAgXGxldFxudW1jaGFwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XGFwcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFx1bm5jaGFwZW50cnkgPSBcc2hvcnR1bm5jaGFwZW50cnkKKyAgICAlIFdlIHdhbnQgYSB0cnVlIHJvbWFuIGhlcmUgZm9yIHRoZSBwYWdlIG51bWJlcnMuCisgICAgXHNlY2ZvbnRzCisgICAgXGxldFxybT1cc2hvcnRjb250cm0gXGxldFxiZj1cc2hvcnRjb250YmYKKyAgICBcbGV0XHNsPVxzaG9ydGNvbnRzbCBcbGV0XHR0PVxzaG9ydGNvbnR0dAorICAgIFxybQorICAgIFxoeXBoZW5wZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxiYXNlbGluZXNraXAgYnkgMXB0ICUgT3BlbiBpdCB1cCBhIGxpdHRsZS4KKyAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0e30KKyAgICBcbGV0XGFwcHNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlCisgICUgV2UnZCBsaWtlIHRvIHJpZ2h0LWp1c3RpZnkgY2hhcHRlciBudW1iZXJzLCBidXQgdGhhdCBsb29rcyBzdHJhbmdlCisgICUgd2l0aCBhcHBlbmRpeCBsZXR0ZXJzLiAgQW5kIHJpZ2h0LWp1c3RpZnlpbmcgbnVtYmVycyBhbmQKKyAgJSBsZWZ0LWp1c3RpZnlpbmcgbGV0dGVycyBsb29rcyBzdHJhbmdlIHdoZW4gdGhlcmUgaXMgbGVzcyB0aGFuIDEwCisgICUgY2hhcHRlcnMuICBIYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRvYyBvbmNlIHRvIGtub3cgaG93IG1hbnkgY2hhcHRlcnMKKyAgJSB0aGVyZSBhcmUgYmVmb3JlIGRlY2lkaW5nIC4uLgorICBcaGJveCB0byAxZW17IzFcaHNzfSUKK30KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4KKyUgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjaGFwdGVyIG9yIHNlY3Rpb24gbmFtZS4KKyUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgorJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgorCislIENoYXB0ZXJzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KK1xkZWZcbnVtY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorJQorJSBDaGFwdGVycywgaW4gdGhlIHNob3J0IHRvYy4KKyUgU2VlIGNvbW1lbnRzIGluIFxkb2NoYXBlbnRyeSByZSB2Ym94IGFuZCByZWxhdGVkIHNldHRpbmdzLgorXGRlZlxzaG9ydGNoYXBlbnRyeSMxIzIjMyM0eyUKKyAgXHRvY2VudHJ5e1xzaG9ydGNoYXBsYWJlbHsjMn1cbGFiZWxzcGFjZSAjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfSUKK30KKworJSBBcHBlbmRpY2VzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KKyUgTmVlZCB0aGUgd29yZCBBcHBlbmRpeCwgYW5kIGEgZml4ZWQtc2l6ZSBib3guCislCitcZGVmXGFwcGVuZGl4Ym94IzF7JQorICAlIFdlIHVzZSBNIHNpbmNlIGl0J3MgcHJvYmFibHkgdGhlIHdpZGVzdCBsZXR0ZXIuCisgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9IE19JQorICBcaGJveCB0byBcd2Qwe1xwdXR3b3JkQXBwZW5kaXh7fSAjMVxoc3N9fQorJQorXGRlZlxhcHBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXtcYXBwZW5kaXhib3h7IzJ9XGxhYmVsc3BhY2UjMX17IzR9fQorCislIFVubnVtYmVyZWQgY2hhcHRlcnMuCitcZGVmXHVubmNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMX17IzR9fQorXGRlZlxzaG9ydHVubmNoYXBlbnRyeSMxIzIjMyM0e1x0b2NlbnRyeXsjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfX0KKworJSBTZWN0aW9ucy4KK1xkZWZcbnVtc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc2VjZW50cnk9XG51bXNlY2VudHJ5CitcZGVmXHVubnNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzF9eyM0fX0KKworJSBTdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic2VjZW50cnk9XG51bXN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBBbmQgc3Vic3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnN1YnNlY2VudHJ5PVxudW1zdWJzdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGxldmVscy4KKyUgU2FtZSBhcyBcZGVmYXVsdHBhcmluZGVudC4KK1xuZXdkaW1lblx0b2NpbmRlbnQgXHRvY2luZGVudCA9IDE1cHQKKworJSBOb3cgZm9yIHRoZSBhY3R1YWwgdHlwZXNldHRpbmcuIEluIGFsbCB0aGVzZSwgIzEgaXMgdGhlIHRleHQgYW5kICMyIGlzIHRoZQorJSBwYWdlIG51bWJlci4KKyUKKyUgSWYgdGhlIHRvYyBoYXMgdG8gYmUgYnJva2VuIG92ZXIgcGFnZXMsIHdlIHdhbnQgaXQgdG8gYmUgYXQgY2hhcHRlcnMKKyUgaWYgYXQgYWxsIHBvc3NpYmxlOyBoZW5jZSB0aGUgXHBlbmFsdHkuCitcZGVmXGRvY2hhcGVudHJ5IzEjMnslCisgICBccGVuYWx0eS0zMDAgXHZza2lwMVxiYXNlbGluZXNraXAgcGx1cy4zM1xiYXNlbGluZXNraXAgbWludXMuMjVcYmFzZWxpbmVza2lwCisgICBcYmVnaW5ncm91cAorICAgICBcY2hhcGVudHJ5Zm9udHMKKyAgICAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKKyAgIFxlbmRncm91cAorICAgXG5vYnJlYWtcdnNraXAgLjI1XGJhc2VsaW5lc2tpcCBwbHVzLjFcYmFzZWxpbmVza2lwCit9CisKK1xkZWZcZG9zZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPVx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9Mlx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnN1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9M1x0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworJSBXZSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIGFzIGZvciB0aGUgaW5kZXggZW50cmllcy4KK1xsZXRcdG9jZW50cnkgPSBcZW50cnkKKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQorCislIFRoZSBAZXJyb3J7fSBjb21tYW5kLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCislCitcbmV3Ym94XGVycm9yYm94CislCit7XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KK1xkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcworJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQorXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0CisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CisKKyUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCislCitcbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZvcm1hdC9Ac21hbGxmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXG1ha2VkaXNwZW52e2Zvcm1hdH17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZsdXNobGVmdDogc2FtZSBhcyBAZm9ybWF0LCBidXQgZG9lc24ndCBvYmV5IFxTRVRkaXNwZW52c2l6ZS4KK1xlbnZkZWZcZmx1c2hsZWZ0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hsZWZ0ID0gXGFmdGVyZW52YnJlYWsKKworJSBAZmx1c2hyaWdodC4KKyUKK1xlbnZkZWZcZmx1c2hyaWdodHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNocmlnaHQgPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQorJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQorJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAorJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgorJQorXGVudmRlZlxxdW90YXRpb257JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCit9CisKKyUgV2UgaGF2ZSByZXRhaW5lZCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZQorJSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRXF1b3RhdGlvbnslCisgIFxwYXIKKyAgXGlmeFxxdW90YXRpb25hdXRob3JcdW5kZWZpbmVkXGVsc2UKKyAgICAlIGluZGVudCBhIGJpdC4KKyAgICBcbGVmdGxpbmV7XGtlcm4gMlxsZWZ0c2tpcCBcc2wgLS0tXHF1b3RhdGlvbmF1dGhvcn0lCisgIFxmaQorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KKworJSBJZiB3ZSdyZSBnaXZlbiBhbiBhcmd1bWVudCwgdHlwZXNldCBpdCBpbiBib2xkIHdpdGggYSBjb2xvbiBhZnRlci4KK1xkZWZccXVvdGF0aW9ubGFiZWwjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIHtcYmYgIzE6IH0lCisgIFxmaQorfQorCisKKyUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CislIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCislIHdlIG5lZWQgdGhlIGN1cmx5IGJyYWNlcyBzbyB0aGF0IG1ha2VpbmZvIHNlZXMgdGhlIEB2ZXJiIGNvbW1hbmQsIGVnOgorJSBgQHZlcmJ4Li4ueCcgd291bGQgbG9vayBsaWtlIHRoZSAnQHZlcmJ4JyBjb21tYW5kLiAgLS1qYW5uZWtlQGdudS5vcmcKKyUKKyUgW0tudXRoXTogRG9uYWxkIEVydmluIEtudXRoLCAxOTk2LiAgVGhlIFRlWGJvb2suCislCislIFtLbnV0aF0gcC4zNDQ7IG9ubHkgd2UgbmVlZCB0byBkbyB0aGUgb3RoZXIgY2hhcmFjdGVycyBUZXhpbmZvIHNldHMKKyUgYWN0aXZlIHRvby4gIE90aGVyd2lzZSwgdGhleSBnZXQgbG9zdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKKyUgdmVyYmF0aW0gbGluZS4KK1xkZWZcZG9zcGVjaWFsc3slCisgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKKyAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQorICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxCislIERpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcYD1cYWN0aXZlXGdkZWZge1xyZWxheFxscX0KK1xlbmRncm91cAorJQorJSBTZXR1cCBmb3IgdGhlIEB2ZXJiIGNvbW1hbmQuCislCislIEVpZ2h0IHNwYWNlcyBmb3IgYSB0YWIKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJlaWdodHNwYWNlc3tcY2F0Y29kZWBcXl5JPVxhY3RpdmVcZGVmXl5Je1wgXCBcIFwgXCBcIFwgXCB9fQorXGVuZGdyb3VwCislCitcZGVmXHNldHVwdmVyYnslCisgIFx0dCAgJSBlYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmVpZ2h0c3BhY2VzCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCit9CisKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYmF0aW0gZW52aXJvbm1lbnQKKyUKKyUgUmVhbCB0YWIgZXhwYW5zaW9uCitcbmV3ZGltZW5cdGFidyBcc2V0Ym94MD1caGJveHtcdHRcc3BhY2V9IFx0YWJ3PThcd2QwICUgdGFiIGFtb3VudAorJQorXGRlZlxzdGFydHRhYmJveHtcc2V0Ym94MD1caGJveFxiZ3JvdXB9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZXhwYW5keyUKKyAgICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgICBcZGVmXl5Je1xsZWF2ZXZtb2RlXGVncm91cAorICAgICAgXGRpbWVuMD1cd2QwICUgdGhlIHdpZHRoIHNvIGZhciwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHRhYgorICAgICAgXGRpdmlkZVxkaW1lbjAgYnlcdGFidworICAgICAgXG11bHRpcGx5XGRpbWVuMCBieVx0YWJ3ICUgY29tcHV0ZSBwcmV2aW91cyBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXGFkdmFuY2VcZGltZW4wIGJ5XHRhYncgICUgYWR2YW5jZSB0byBuZXh0IG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcd2QwPVxkaW1lbjAgXGJveDAgXHN0YXJ0dGFiYm94CisgICAgfSUKKyAgfQorXGVuZGdyb3VwCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworICBcZXZlcnlwYXJ7XHN0YXJ0dGFiYm94fSUKK30KKworJSBEbyB0aGUgQHZlcmIgbWFnaWM6IHZlcmJhdGltIHRleHQgaXMgcXVvdGVkIGJ5IHVuaXF1ZQorJSBkZWxpbWl0ZXIgY2hhcmFjdGVycy4gIEJlZm9yZSBmaXJzdCBkZWxpbWl0ZXIgZXhwZWN0IGEKKyUgcmlnaHQgYnJhY2UsIGFmdGVyIGxhc3QgZGVsaW1pdGVyIGV4cGVjdCBjbG9zaW5nIGJyYWNlOgorJQorJSAgICBcZGVmXGRvdmVyYid7JzxjaGFyPiMxPGNoYXI+J30neyMxfQorJQorJSBbS251dGhdIHAuIDM4Mjsgb25seSBlYXQgb3V0ZXIge30KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFs9MVxjYXRjb2RlYF09MlxjYXRjb2RlYFx7PVxvdGhlclxjYXRjb2RlYFx9PVxvdGhlcgorICBcZ2RlZlxkb3ZlcmJ7IzFbXGRlZlxuZXh0IyMxIzF9WyMjMVxlbmRncm91cF1cbmV4dF0KK1xlbmRncm91cAorJQorXGRlZlx2ZXJie1xiZWdpbmdyb3VwXHNldHVwdmVyYlxkb3ZlcmJ9CislCislCislIERvIHRoZSBAdmVyYmF0aW0gbWFnaWM6IGRlZmluZSB0aGUgbWFjcm8gXGRvdmVyYmF0aW0gc28gdGhhdAorJSB0aGUgKGZpcnN0KSBhcmd1bWVudCBlbmRzIHdoZW4gJ0BlbmQgdmVyYmF0aW0nIGlzIHJlYWNoZWQsIGllOgorJQorJSAgICAgXGRlZlxkb3ZlcmJhdGltIzFAZW5kIHZlcmJhdGlteyMxfQorJQorJSBGb3IgVGV4aW5mbyBpdCdzIGEgbG90IGVhc2llciB0aGFuIGZvciBMYVRlWCwKKyUgYmVjYXVzZSB0ZXhpbmZvJ3MgXHZlcmJhdGltIGRvZXNuJ3Qgc3RvcCBhdCAnXGVuZHt2ZXJiYXRpbX0nOgorJSB3ZSBuZWVkIG5vdCByZWRlZmluZSAnXCcsICd7JyBhbmQgJ30nLgorJQorJSBJbnNwaXJlZCBieSBMYVRlWCdzIHZlcmJhdGltIGNvbW1hbmQgc2V0IFtsYXRleC5sdHhdCislCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcID1cYWN0aXZlCisgIFxvYmV5bGluZXMgJQorICAlIGlnbm9yZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBmaXJzdCBeXk0sIHRoYXQncyB0aGUgbmV3bGluZSBhdCB0aGUgZW5kCisgICUgb2YgdGhlIEB2ZXJiYXRpbSBpbnB1dCBsaW5lIGl0c2VsZi4gIE90aGVyd2lzZSB3ZSBnZXQgYW4gZXh0cmEgYmxhbmsKKyAgJSBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx4ZGVmXGRvdmVyYmF0aW0jMV5eTSMyQGVuZCB2ZXJiYXRpbXsjMlxub2V4cGFuZFxlbmRcZ29iYmxlIHZlcmJhdGltfSUKKyAgJSBXZSByZWFsbHkgd2FudCB7Li4uXGVuZCB2ZXJiYXRpbX0gaW4gdGhlIGJvZHkgb2YgdGhlIG1hY3JvLCBidXQKKyAgJSB3aXRob3V0IHRoZSBhY3RpdmUgc3BhY2U7IHRodXMgd2UgaGF2ZSB0byB1c2UgXHhkZWYgYW5kIFxnb2JibGUuCitcZW5kZ3JvdXAKKyUKK1xlbnZkZWZcdmVyYmF0aW17JQorICAgIFxzZXR1cHZlcmJhdGltXGRvdmVyYmF0aW0KK30KK1xsZXRcRXZlcmJhdGltID0gXGFmdGVyZW52YnJlYWsKKworCislIEB2ZXJiYXRpbWluY2x1ZGUgRklMRSAtIGluc2VydCB0ZXh0IG9mIGZpbGUgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnQuCislCitcZGVmXHZlcmJhdGltaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGRvdmVyYmF0aW1pbmNsdWRlfQorJQorXGRlZlxkb3ZlcmJhdGltaW5jbHVkZSMxeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxzZXR1cHZlcmJhdGltCisgICAgXGlucHV0ICMxCisgICAgXGFmdGVyZW52YnJlYWsKKyAgfSUKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLgorJQorJSBXZSBzYXZlIHRoZSB1bmludGVycHJldGVkIHRva2VucywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBib3guCislIFNhdmluZyB0aGUgdGV4dCBpbiBhIGJveCB3b3VsZCBiZSBtdWNoIGVhc2llciwgYnV0IHRoZW4gYWxsIHRoZQorJSB0eXBlc2V0dGluZyBjb21tYW5kcyAoQHNtYWxsYm9vaywgZm9udCBjaGFuZ2VzLCBldGMuKSBoYXZlIHRvIGJlIGRvbmUKKyUgYmVmb3JlaGFuZCAtLSBhbmQgYSkgd2Ugd2FudCBAY29weWluZyB0byBiZSBkb25lIGZpcnN0IGluIHRoZSBzb3VyY2UKKyUgZmlsZTsgYikgbGV0dGluZyB1c2VycyBkZWZpbmUgdGhlIGZyb250bWF0dGVyIGluIGFzIGZsZXhpYmxlIG9yZGVyIGFzCislIHBvc3NpYmxlIGlzIHZlcnkgZGVzaXJhYmxlLgorJQorXGRlZlxjb3B5aW5ne1xjaGVja2Vudnt9XGJlZ2luZ3JvdXBcc2NhbmFyZ2N0eHRcZG9jb3B5aW5nfQorXGRlZlxkb2NvcHlpbmcjMUBlbmQgY29weWluZ3tcZW5kZ3JvdXBcZGVmXGNvcHlpbmd0ZXh0eyMxfX0KKyUKK1xkZWZcaW5zZXJ0Y29weWluZ3slCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudCA9IDBwdCAgJSBwYXJhZ3JhcGggaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgb24gdGl0bGUgcGFnZQorICAgIFxzY2FuZXhwXGNvcHlpbmd0ZXh0CisgIFxlbmRncm91cAorfQorCitcbWVzc2FnZXtkZWZ1bnMsfQorJSBAZGVmdW4gZXRjLgorCitcbmV3c2tpcFxkZWZib2R5aW5kZW50IFxkZWZib2R5aW5kZW50PS40aW4KK1xuZXdza2lwXGRlZmFyZ3NpbmRlbnQgXGRlZmFyZ3NpbmRlbnQ9NTBwdAorXG5ld3NraXBcZGVmbGFzdGFyZ21hcmdpbiBcZGVmbGFzdGFyZ21hcmdpbj0xOHB0CisKKyUgU3RhcnQgdGhlIHByb2Nlc3Npbmcgb2YgQGRlZmZuOgorXGRlZlxzdGFydGRlZnVueyUKKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwCisgICAgXG1lZGJyZWFrCisgIFxlbHNlCisgICAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgICAlIHdoaWNoIGlzIHRoZXJlIHRvIGtlZXAgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvZ2V0aGVyIHdpdGggaXRzCisgICAgJSBoZWFkZXIuICBCdXQgaWYgdGhlcmUncyBub3RoaW5nIGJ1dCBoZWFkZXJzLCB3ZSBuZWVkIHRvIGFsbG93IGEKKyAgICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIHNwZWNpZmljYWxseSBmb3IgcGVuYWx0eSAxMDAwMiwgaW5zZXJ0ZWQKKyAgICAlIGJ5IFxkZWZhcmdzY29tbW9uZW5kaW5nLCBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAgICUgY29tbWFuZHMgYWxzbyBpbnNlcnQgYSBub2JyZWFrIHBlbmFsdHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93CisgICAgJSBhIGJyZWFrIGJldHdlZW4gYSBzZWN0aW9uIGhlYWRpbmcgYW5kIGEgZGVmdW4uCisgICAgJSAKKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZmkKKyAgJQorICAlIEFuZCBub3csIGl0J3MgdGltZSB0byByZXVzZSB0aGUgYm9keSBvZiB0aGUgb3JpZ2luYWwgZGVmdW46CisgIFxleHBhbmRhZnRlclxnb2JibGVkZWZ1biMxJQorfQorXGRlZlxnb2JibGVkZWZ1biMxXHN0YXJ0ZGVmdW57fQorCislIFxwcmludGRlZnVubGluZSBcZGVmZm5oZWFkZXJ7dGV4dH0KKyUKK1xkZWZccHJpbnRkZWZ1bmxpbmUjMSMyeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlIGNhbGwgXGRlZmZuaGVhZGVyOgorICAgICMxIzIgXGVuZGhlYWRlcgorICAgICUgY29tbW9uIGVuZGluZzoKKyAgICBcaW50ZXJsaW5lcGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgICBcZW5kZ3JhZgorICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAorICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUKKyAgICAlIEkndmUgdmVyaWZpZWQgdGhhdCBpdCBpcyBuZWNlc3NhcnkgYm90aCBmb3IgZS1UZVggYW5kIGZvciBvcmRpbmFyeSBUZVgKKyAgICAlCQkJCQkJCS0ta2FzYWwsIDI5bm92MDMKKyAgICBcc2NhbnRva2Vuc3sjMVxlbmRpbnB1dH0lCisgIFxlbmRncm91cAorfQorCitcZGVmXHNjYW5leHAjMXslCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHNjYW5tYWNyb3sjMX19JQorICBcdGVtcAorfQorCitcbmV3Y291bnRccGFyYW1ubyAgICUgQ291bnQgb2YgcGFyYW1ldGVycworXG5ld3Rva3NcbWFjbmFtZSAgICAlIE1hY3JvIG5hbWUKK1xuZXdpZlxpZnJlY3Vyc2l2ZSAgJSBJcyBpdCByZWN1cnNpdmU/CisKKyUgTGlzdCBvZiBhbGwgZGVmaW5lZCBtYWNyb3MgaW4gdGhlIGZvcm0KKyUgICAgXGRlZmluZWR1bW15d29yZFxtYWNybzFcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMi4uLgorJSBDdXJyZW50bHkgaXMgYWxzbyBjb250YWlucyBhbGwgQGFsaWFzZXM7IHRoZSBsaXN0IGNhbiBiZSBzcGxpdAorJSBpZiB0aGVyZSBpcyBhIG5lZWQuCitcZGVmXG1hY3JvbGlzdHt9CisKKyUgQWRkIHRoZSBtYWNybyB0byBcbWFjcm9saXN0CitcZGVmXGFkZHRvbWFjcm9saXN0IzF7XGV4cGFuZGFmdGVyIFxhZGR0b21hY3JvbGlzdHh4eCBcY3NuYW1lIzFcZW5kY3NuYW1lfQorXGRlZlxhZGR0b21hY3JvbGlzdHh4eCMxeyUKKyAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xtYWNyb2xpc3RcZGVmaW5lZHVtbXl3b3JkIzF9JQorICAgICBceGRlZlxtYWNyb2xpc3R7XHRoZVx0b2tzMH0lCit9CisKKyUgVXRpbGl0eSByb3V0aW5lcy4KKyUgVGhpcyBkb2VzIFxsZXQgIzEgPSAjMiwgd2l0aCBcY3NuYW1lczsgdGhhdCBpcywKKyUgICBcbGV0IFxjc25hbWUjMVxlbmRjc25hbWUgPSBcY3NuYW1lIzJcZW5kY3NuYW1lCislIChleGNlcHQgb2YgY291cnNlIHdlIGhhdmUgdG8gcGxheSBleHBhbnNpb24gZ2FtZXMpLgorJSAKK1xkZWZcY3NsZXQjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGxldAorICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCisgIFxjc25hbWUjMlxlbmRjc25hbWUKK30KKworJSBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgYSBzdHJpbmcuCislIENvbmNlcHRzIGZyb20gYXJvLWJlbmQgcHJvYmxlbSAxNSAoc2VlIENUQU4pLgore1xjYXRjb2RlYFxAPTExCitcZ2RlZlxlYXRzcGFjZXMgIzF7XGV4cGFuZGFmdGVyXHRyaW1AXGV4cGFuZGFmdGVyeyMxIH19CitcZ2RlZlx0cmltQCAjMXtcdHJpbUBAIEAjMSBAICMxIEAgQEB9CitcZ2RlZlx0cmltQEAgIzFAICMyQCAjM0BAe1x0cmltQEBAXGVtcHR5ICMyIEB9CitcZGVmXHVuYnJhY2UjMXsjMX0KK1x1bmJyYWNle1xnZGVmXHRyaW1AQEAgIzEgfSAjMkB7IzF9Cit9CisKKyUgVHJpbSBhIHNpbmdsZSB0cmFpbGluZyBeXk0gb2ZmIGEgc3RyaW5nLgore1xjYXRjb2RlYFxeXk09XG90aGVyIFxjYXRjb2RlYFxRPTMlCitcZ2RlZlxlYXRjciAjMXtcZWF0Y3JhICMxUV5eTVF9JQorXGdkZWZcZWF0Y3JhIzFeXk1Re1xlYXRjcmIjMVF9JQorXGdkZWZcZWF0Y3JiIzFRIzJReyMxfSUKK30KKworJSBNYWNybyBib2RpZXMgYXJlIGFic29yYmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgY29udGV4dCB3aGVyZQorJSBhbGwgY2hhcmFjdGVycyBhcmUgY2F0Y29kZSAxMCwgMTEgb3IgMTIsIGV4Y2VwdCBcIHdoaWNoIGlzIGFjdGl2ZQorJSAoYXMgaW4gbm9ybWFsIHRleGluZm8pLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIFwuCisKKyUgSXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBoYXJkIENScyB3aGVuIHRoZSBtYWNybyBpcyBleGVjdXRlZC4gVGhpcyBpcworJSBkb25lIGJ5ICBtYWtpbmcgXl5NIChcZW5kbGluZWNoYXIpIGNhdGNvZGUgMTIgd2hlbiByZWFkaW5nIHRoZSBtYWNybworJSBib2R5LCBhbmQgdGhlbiBtYWtpbmcgaXQgdGhlIFxuZXdsaW5lY2hhciBpbiBcc2Nhbm1hY3JvLgorCitcZGVmXHNjYW5jdHh0eyUKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFwrPVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcfj1cb3RoZXIKK30KKworXGRlZlxzY2FuYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKK30KKworXGRlZlxtYWNyb2JvZHljdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFx7PVxvdGhlcgorICBcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKKyAgXHVzZW1ib2R5YmFja3NsYXNoCit9CisKK1xkZWZcbWFjcm9hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorfQorCislIFxtYm9keWJhY2tzbGFzaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBcIGluIEBtYWNybyBib2RpZXMuCislIEl0IG1hcHMgXGZvb1wgPT4gXGNzbmFtZSBtYWNhcmcuZm9vXGVuZGNzbmFtZSA9PiAjTgorJSB3aGVyZSBOIGlzIHRoZSBtYWNybyBwYXJhbWV0ZXIgbnVtYmVyLgorJSBXZSBkZWZpbmUgXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZSB0byBiZSBccmVhbGJhY2tzbGFzaCwgc28KKyUgXFwgaW4gbWFjcm8gcmVwbGFjZW1lbnQgdGV4dCBnZXRzIHlvdSBhIGJhY2tzbGFzaC4KKwore1xjYXRjb2RlYEA9MCBAY2F0Y29kZWBAXD1AYWN0aXZlCisgQGdkZWZAdXNlbWJvZHliYWNrc2xhc2h7QGxldFw9QG1ib2R5YmFja3NsYXNofQorIEBnZGVmQG1ib2R5YmFja3NsYXNoIzFce0Bjc25hbWUgbWFjYXJnLiMxQGVuZGNzbmFtZX0KK30KK1xleHBhbmRhZnRlclxkZWZcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1le1xyZWFsYmFja3NsYXNofQorCitcZGVmXG1hY3Jve1xyZWN1cnNpdmVmYWxzZVxwYXJzZWFyZ1xtYWNyb3h4eH0KK1xkZWZccm1hY3Jve1xyZWN1cnNpdmV0cnVlXHBhcnNlYXJnXG1hY3JveHh4fQorCitcZGVmXG1hY3JveHh4IzF7JQorICBcZ2V0YXJnc3sjMX0lICAgICAgICAgICBub3cgXG1hY25hbWUgaXMgdGhlIG1hY25hbWUgYW5kIFxhcmdsIHRoZSBhcmdsaXN0CisgIFxpZnhcYXJnbFxlbXB0eSAgICAgICAlIG5vIGFyZ3VtZW50cworICAgICBccGFyYW1ubz0wJQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJccGFyc2VtYXJnZGVmIFxhcmdsOyUKKyAgXGZpCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZQorICAgICBcbWVzc2FnZXtXYXJuaW5nOiByZWRlZmluaW5nIFx0aGVcbWFjbmFtZX0lCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFx0aGVcbWFjbmFtZVxlbmRjc25hbWUgXHJlbGF4CisgICAgIFxlbHNlIFxlcnJtZXNzYWdle01hY3JvIG5hbWUgXHRoZVxtYWNuYW1lXHNwYWNlIGFscmVhZHkgZGVmaW5lZH1cZmkKKyAgICAgXGdsb2JhbFxjc2xldHttYWNzYXZlLlx0aGVcbWFjbmFtZX17XHRoZVxtYWNuYW1lfSUKKyAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZT0xJQorICAgICBcYWRkdG9tYWNyb2xpc3R7XHRoZVxtYWNuYW1lfSUKKyAgXGZpCisgIFxiZWdpbmdyb3VwIFxtYWNyb2JvZHljdHh0CisgIFxpZnJlY3Vyc2l2ZSBcZXhwYW5kYWZ0ZXJccGFyc2VybWFjYm9keQorICBcZWxzZSBcZXhwYW5kYWZ0ZXJccGFyc2VtYWNib2R5CisgIFxmaX0KKworXHBhcnNlYXJnZGVmXHVubWFjcm97JQorICBcaWYxXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZQorICAgIFxnbG9iYWxcY3NsZXR7IzF9e21hY3NhdmUuIzF9JQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0IFxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWU9MCUKKyAgICAlIFJlbW92ZSB0aGUgbWFjcm8gbmFtZSBmcm9tIFxtYWNyb2xpc3Q6CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzFcZW5kY3NuYW1lIFxyZWxheAorICAgICAgXGxldFxkZWZpbmVkdW1teXdvcmRcdW5tYWNyb2RvCisgICAgICBceGRlZlxtYWNyb2xpc3R7XG1hY3JvbGlzdH0lCisgICAgXGVuZGdyb3VwCisgIFxlbHNlCisgICAgXGVycm1lc3NhZ2V7TWFjcm8gIzEgbm90IGRlZmluZWR9JQorICBcZmkKK30KKworJSBDYWxsZWQgYnkgXGRvIGZyb20gXGRvdW5tYWNybyBvbiBlYWNoIG1hY3JvLiAgVGhlIGlkZWEgaXMgdG8gb21pdCBhbnkKKyUgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCB0byBccmVsYXguCislCitcZGVmXHVubWFjcm9kbyMxeyUKKyAgXGlmeCAjMVxyZWxheAorICAgICUgcmVtb3ZlIHRoaXMKKyAgXGVsc2UKKyAgICBcbm9leHBhbmRcZGVmaW5lZHVtbXl3b3JkIFxub2V4cGFuZCMxJQorICBcZmkKK30KKworJSBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgb2JzY3VyZSBmZWF0dXJlIHRoYXQgaWYgdGhlIGxhc3QgdG9rZW4gb2YgYQorJSA8cGFyYW1ldGVyIGxpc3Q+IGlzICMsIHRoZW4gdGhlIHByZWNlZGluZyBhcmd1bWVudCBpcyBkZWxpbWl0ZWQgYnkKKyUgYW4gb3BlbmluZyBicmFjZSwgYW5kIHRoYXQgb3BlbmluZyBicmFjZSBpcyBub3QgY29uc3VtZWQuCitcZGVmXGdldGFyZ3MjMXtcZ2V0YXJnc3h4eCMxe319CitcZGVmXGdldGFyZ3N4eHgjMSN7XGdldG1hY25hbWUgIzEgXHJlbGF4XGdldG1hY2FyZ3N9CitcZGVmXGdldG1hY25hbWUgIzEgIzJccmVsYXh7XG1hY25hbWU9eyMxfX0KK1xkZWZcZ2V0bWFjYXJncyMxe1xkZWZcYXJnbHsjMX19CisKKyUgUGFyc2UgdGhlIG9wdGlvbmFsIHtwYXJhbXN9IGxpc3QuICBTZXQgdXAgXHBhcmFtbm8gYW5kIFxwYXJhbWxpc3QKKyUgc28gXGRlZm1hY3JvIGtub3dzIHdoYXQgdG8gZG8uICBEZWZpbmUgXG1hY2FyZy5ibGFoIGZvciBlYWNoIGJsYWgKKyUgaW4gdGhlIHBhcmFtcyBsaXN0LCB0byBiZSAjI04gd2hlcmUgTiBpcyB0aGUgcG9zaXRpb24gaW4gdGhhdCBsaXN0LgorJSBUaGF0IGdldHMgdXNlZCBieSBcbWJvZHliYWNrc2xhc2ggKGFib3ZlKS4KKworJSBXZSBuZWVkIHRvIGdldCBgbWFjcm8gcGFyYW1ldGVyIGNoYXIgIycgaW50byBzZXZlcmFsIGRlZmluaXRpb25zLgorJSBUaGUgdGVjaG5pcXVlIHVzZWQgaXMgc3RvbGVuIGZyb20gTGFUZVg6ICBsZXQgXGhhc2ggYmUgc29tZXRoaW5nCislIHVuZXhwYW5kYWJsZSwgaW5zZXJ0IHRoYXQgd2hlcmV2ZXIgeW91IG5lZWQgYSAjLCBhbmQgdGhlbiByZWRlZmluZQorJSBpdCB0byAjIGp1c3QgYmVmb3JlIHVzaW5nIHRoZSB0b2tlbiBsaXN0IHByb2R1Y2VkLgorJQorJSBUaGUgc2FtZSB0ZWNobmlxdWUgaXMgdXNlZCB0byBwcm90ZWN0IFxlYXRzcGFjZXMgdGlsbCBqdXN0IGJlZm9yZQorJSB0aGUgbWFjcm8gaXMgdXNlZC4KKworXGRlZlxwYXJzZW1hcmdkZWYjMTt7XHBhcmFtbm89MFxkZWZccGFyYW1saXN0e30lCisgICAgICAgIFxsZXRcaGFzaFxyZWxheFxsZXRceGVhdHNwYWNlc1xyZWxheFxwYXJzZW1hcmdkZWZ4eHgjMSw7LH0KK1xkZWZccGFyc2VtYXJnZGVmeHh4IzEseyUKKyAgXGlmIzE7XGxldFxuZXh0PVxyZWxheAorICBcZWxzZSBcbGV0XG5leHQ9XHBhcnNlbWFyZ2RlZnh4eAorICAgIFxhZHZhbmNlXHBhcmFtbm8gYnkgMSUKKyAgICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgbWFjYXJnLlxlYXRzcGFjZXN7IzF9XGVuZGNzbmFtZQorICAgICAgICB7XHhlYXRzcGFjZXN7XGhhc2hcdGhlXHBhcmFtbm99fSUKKyAgICBcZWRlZlxwYXJhbWxpc3R7XHBhcmFtbGlzdFxoYXNoXHRoZVxwYXJhbW5vLH0lCisgIFxmaVxuZXh0fQorCislIFRoZXNlIHR3byBjb21tYW5kcyByZWFkIHJlY3Vyc2l2ZSBhbmQgbm9ucmVjdXJzaXZlIG1hY3JvIGJvZGllcy4KKyUgKFRoZXkncmUgZGlmZmVyZW50IHNpbmNlIHJlYyBhbmQgbm9ucmVjIG1hY3JvcyBlbmQgZGlmZmVyZW50bHkuKQorCitcbG9uZ1xkZWZccGFyc2VtYWNib2R5IzFAZW5kIG1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorXGxvbmdcZGVmXHBhcnNlcm1hY2JvZHkjMUBlbmQgcm1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorCislIFRoaXMgZGVmaW5lcyB0aGUgbWFjcm8gaXRzZWxmLiBUaGVyZSBhcmUgc2l4IGNhc2VzOiByZWN1cnNpdmUgYW5kCislIG5vbnJlY3Vyc2l2ZSBtYWNyb3Mgb2YgemVybywgb25lLCBhbmQgbWFueSBhcmd1bWVudHMuCislIE11Y2ggbWFnaWMgd2l0aCBcZXhwYW5kYWZ0ZXIgaGVyZS4KKyUgXHhkZWYgaXMgdXNlZCBzbyB0aGF0IG1hY3JvIGRlZmluaXRpb25zIHdpbGwgc3Vydml2ZSB0aGUgZmlsZQorJSB0aGV5J3JlIGRlZmluZWQgaW47IEBpbmNsdWRlIHJlYWRzIHRoZSBmaWxlIGluc2lkZSBhIGdyb3VwLgorXGRlZlxkZWZtYWNyb3slCisgIFxsZXRcaGFzaD0jIyUgY29udmVydCBwbGFjZWhvbGRlcnMgdG8gbWFjcm8gcGFyYW1ldGVyIGNoYXJzCisgIFxpZnJlY3Vyc2l2ZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICBcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICAgIFxwYXJhbWxpc3R7XGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICBcZWdyb3VwCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICBccGFyYW1saXN0eyUKKyAgICAgICAgICBcZWdyb3VwCisgICAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGZpCisgIFxmaX0KKworXGRlZlxub3JlY3Vyc2UjMXtcYmdyb3VwXGNzbGV0eyMxfXttYWNzYXZlLiMxfX0KKworJSBcYnJhY2VvcmxpbmUgZGVjaWRlcyB3aGV0aGVyIHRoZSBuZXh0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEKKyUgey4gIElmIHNvIGl0IHJlYWRzIHVwIHRvIHRoZSBjbG9zaW5nIH0sIGlmIG5vdCwgaXQgcmVhZHMgdGhlIHdob2xlCislIGxpbmUuICBXaGF0ZXZlciB3YXMgcmVhZCBpcyB0aGVuIGZlZCB0byB0aGUgbmV4dCBjb250cm9sIHNlcXVlbmNlCislIGFzIGFuIGFyZ3VtZW50IChieSBccGFyc2VicmFjZSBvciBccGFyc2VhcmcpCitcZGVmXGJyYWNlb3JsaW5lIzF7XGxldFxuZXh0PSMxXGZ1dHVyZWxldFxuY2hhclxicmFjZW9ybGluZXh4eH0KK1xkZWZcYnJhY2VvcmxpbmV4eHh7JQorICBcaWZ4XG5jaGFyXGJncm91cFxlbHNlCisgICAgXGV4cGFuZGFmdGVyXHBhcnNlYXJnCisgIFxmaSBcbmV4dH0KKworCislIEBhbGlhcy4KKyUgV2UgbmVlZCBzb21lIHRyaWNrZXJ5IHRvIHJlbW92ZSB0aGUgb3B0aW9uYWwgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWwKKyUgc2lnbi4gIEp1c3QgbWFrZSB0aGVtIGFjdGl2ZSBhbmQgdGhlbiBleHBhbmQgdGhlbSBhbGwgdG8gbm90aGluZy4KK1xkZWZcYWxpYXN7XHBhcnNlYXJndXNpbmdcb2JleXNwYWNlc1xhbGlhc3h4eH0KK1xkZWZcYWxpYXN4eHggIzF7XGFsaWFzeXl5IzFccmVsYXh9CitcZGVmXGFsaWFzeXl5ICMxPSMyXHJlbGF4eyUKKyAgeyUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XG9iZXllZHNwYWNlPVxlbXB0eQorICAgIFxhZGR0b21hY3JvbGlzdHsjMX0lCisgICAgXHhkZWZcbmV4dHtcZ2xvYmFsXGxldFxtYWtlY3NuYW1leyMxfT1cbWFrZWNzbmFtZXsjMn19JQorICB9JQorICBcbmV4dAorfQorCisKK1xtZXNzYWdle2Nyb3NzIHJlZmVyZW5jZXMsfQorCitcbmV3d3JpdGVcYXV4ZmlsZQorCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXHRoaXNzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGlzc2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFx3cml0ZXhyZGVme3BnfXtcZm9saW99JSB3aWxsIGJlIHdyaXR0ZW4gbGF0ZXIsIGR1cmluZyBcc2hpcG91dAorICAgIH0lCisgIFxmaQorfQorCislIEB4cmVmLCBAcHhyZWYsIGFuZCBAcmVmIGdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jZXMuICBGb3IgXHhyZWZYLCAjMSBpcworJSB0aGUgbm9kZSBuYW1lLCAjMiB0aGUgbmFtZSBvZiB0aGUgSW5mbyBjcm9zcy1yZWZlcmVuY2UsICMzIHRoZSBwcmludGVkCislIG5vZGUgbmFtZSwgIzQgdGhlIG5hbWUgb2YgdGhlIEluZm8gZmlsZSwgIzUgdGhlIG5hbWUgb2YgdGhlIHByaW50ZWQKKyUgbWFudWFsLiAgQWxsIGJ1dCB0aGUgbm9kZSBuYW1lIGNhbiBiZSBvbWl0dGVkLgorJQorXGRlZlxweHJlZiMxe1xwdXR3b3Jkc2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWYjMXtccHV0d29yZFNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlxyZWYjMXtceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZlhbIzEsIzIsIzMsIzQsIzUsIzZde1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxzZXRib3gxPVxoYm94e1xwcmludGVkbWFudWFsXHVuc2tpcH0lCisgIFxzZXRib3gwPVxoYm94e1xwcmludGVkcmVmbmFtZVx1bnNraXB9JQorICBcaWZkaW0gXHdkMCA9IDBwdAorICAgICUgTm8gcHJpbnRlZCBub2RlIG5hbWUgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uCisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZVxlbmRjc25hbWVccmVsYXgKKyAgICAgICUgVXNlIHRoZSBub2RlIG5hbWUgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgIFxlbHNlCisgICAgICAlIFVzZSB0aGUgYWN0dWFsIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBhcHBlYXIgaW5zaWRlCisgICAgICAlIHRoZSBzcXVhcmUgYnJhY2tldHMuICBVc2UgdGhlIHJlYWwgc2VjdGlvbiB0aXRsZSBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgICAgJSBJdCBpcyBpbiBhbm90aGVyIG1hbnVhbCwgc28gd2UgZG9uJ3QgaGF2ZSBpdC4KKyAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICAgICUgV2Uga25vdyB0aGUgcmVhbCB0aXRsZSBpZiB3ZSBoYXZlIHRoZSB4cmVmIHZhbHVlcy4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xyZWZ4eyMxLXRpdGxlfXt9fSUKKyAgICAgICAgXGVsc2UKKyAgICAgICAgICAlIE90aGVyd2lzZSBqdXN0IGNvcHkgdGhlIEluZm8gbm9kZSBuYW1lLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICAgIFxmaSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIE1ha2UgbGluayBpbiBwZGYgb3V0cHV0LgorICBcaWZwZGYKKyAgICBcbGVhdmV2bW9kZQorICAgIFxnZXRmaWxlbmFtZXsjNH0lCisgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICUgU2VlIGNvbW1lbnRzIGF0IFxhY3RpdmViYWNrc2xhc2hkb3VibGUuCisgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZnhyZWZkZXN0eyMxfSUKKyAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmeHJlZmRlc3R9JQorICAgICAlCisgICAgIFxpZm51bVxmaWxlbmFtZWxlbmd0aD4wCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZnhyZWZkZXN0fX0lCisgICAgIFxmaQorICAgIH0lCisgICAgXGxpbmtjb2xvcgorICBcZmkKKyAgJQorICAlIEZsb2F0IHJlZmVyZW5jZXMgYXJlIHByaW50ZWQgY29tcGxldGVseSBkaWZmZXJlbnRseTogIkZpZ3VyZSAxLjIiCisgICUgaW5zdGVhZCBvZiAiW3NvbWVub2RlXSwgcC4zIi4gIFdlIGRpc3Rpbmd1aXNoIHRoZW0gYnkgdGhlCisgICUgTEFCRUwtdGl0bGUgYmVpbmcgc2V0IHRvIGEgbWFnaWMgc3RyaW5nLgorICB7JQorICAgICUgSGF2ZSB0byBvdGhlcmlmeSBldmVyeXRoaW5nIHNwZWNpYWwgdG8gYWxsb3cgdGhlIFxjc25hbWUgdG8KKyAgICAlIGluY2x1ZGUgYW4gXyBpbiB0aGUgeHJlZiBuYW1lLCBldGMuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcWHRoaXNyZWZ0aXRsZQorICAgICAgXGNzbmFtZSBYUiMxLXRpdGxlXGVuZGNzbmFtZQorICB9JQorICBcaWZmbG9hdFxYdGhpc3JlZnRpdGxlCisgICAgJSBJZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIHByaW50IG5hbWUgKHRoaXJkIGFyZykgdG8gdGhlIHJlZiwKKyAgICAlIHByaW50IGl0IGluc3RlYWQgb2Ygb3VyIHVzdWFsICJGaWd1cmUgMS4yIi4KKyAgICBcaWZkaW1cd2QwID0gMHB0CisgICAgICBccmVmeHsjMS1zbnR9e30lCisgICAgXGVsc2UKKyAgICAgIFxwcmludGVkcmVmbmFtZQorICAgIFxmaQorICAgICUKKyAgICAlIGlmIHRoZSB1c2VyIGFsc28gZ2F2ZSB0aGUgcHJpbnRlZCBtYW51YWwgbmFtZSAoZmlmdGggYXJnKSwgYXBwZW5kCisgICAgJSAiaW4gTUFOVUFMTkFNRSIuCisgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgIFxzcGFjZSBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxmaQorICBcZWxzZQorICAgICUgbm9kZS9hbmNob3IgKG5vbi1mbG9hdCkgcmVmZXJlbmNlcy4KKyAgICAlCisgICAgJSBJZiB3ZSB1c2UgXHVuaGJveDAgYW5kIFx1bmhib3gxIHRvIHByaW50IHRoZSBub2RlIG5hbWVzLCBUZVggZG9lcyBub3QKKyAgICAlIGluc2VydCBlbXB0eSBkaXNjcmV0aW9uYXJpZXMgYWZ0ZXIgaHlwaGVucywgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsCisgICAgJSBub3QgZmluZCBhIGxpbmUgYnJlYWsgYXQgYSBoeXBoZW4gaW4gYSBub2RlIG5hbWVzLiAgU2luY2Ugc29tZSBtYW51YWxzCisgICAgJSBhcmUgYmVzdCB3cml0dGVuIHdpdGggZmFpcmx5IGxvbmcgbm9kZSBuYW1lcywgY29udGFpbmluZyBoeXBoZW5zLCB0aGlzCisgICAgJSBpcyBhIGxvc3MuICBUaGVyZWZvcmUsIHdlIGdpdmUgdGhlIHRleHQgb2YgdGhlIG5vZGUgbmFtZSBhZ2Fpbiwgc28gaXQKKyAgICAlIGlzIGFzIGlmIFRlWCBpcyBzZWVpbmcgaXQgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBccHV0d29yZHNlY3Rpb257fSBgYFxwcmludGVkcmVmbmFtZScnIFxwdXR3b3JkaW57fSBcY2l0ZXtccHJpbnRlZG1hbnVhbH0lCisgICAgXGVsc2UKKyAgICAgICUgXyAoZm9yIGV4YW1wbGUpIGhhcyB0byBiZSB0aGUgY2hhcmFjdGVyIF8gZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUKKyAgICAgICUgY29udHJvbCBzZXF1ZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlLCBidXQgaXQgaGFzIHRvIGV4cGFuZAorICAgICAgJSBpbnRvIHRoZSB1c3VhbCBcbGVhdmV2bW9kZS4uLlx2cnVsZSBzdHVmZiBmb3IgcHVycG9zZXMgb2YKKyAgICAgICUgcHJpbnRpbmcuIFNvIHdlIFx0dXJub2ZmYWN0aXZlIGZvciB0aGUgXHJlZngtc250LCBiYWNrIG9uIGZvciB0aGUKKyAgICAgICUgcHJpbnRpbmcsIGJhY2sgb2ZmIGZvciB0aGUgXHJlZngtcGcuCisgICAgICB7XHR1cm5vZmZhY3RpdmUKKyAgICAgICAlIE9ubHkgb3V0cHV0IGEgZm9sbG93aW5nIHNwYWNlIGlmIHRoZSAtc250IHJlZiBpcyBub25lbXB0eTsgZm9yCisgICAgICAgJSBAdW5udW1iZXJlZCBhbmQgQGFuY2hvciwgaXQgd29uJ3QgYmUuCisgICAgICAgXHNldGJveDIgPSBcaGJveHtcaWdub3Jlc3BhY2VzIFxyZWZ4eyMxLXNudH17fX0lCisgICAgICAgXGlmZGltIFx3ZDIgPiAwcHQgXHJlZnh7IzEtc250fVxzcGFjZVxmaQorICAgICAgfSUKKyAgICAgICUgb3V0cHV0IHRoZSBgW215bm9kZV0nIHZpYSBhIG1hY3JvIHNvIGl0IGNhbiBiZSBvdmVycmlkZGVuLgorICAgICAgXHhyZWZwcmludG5vZGVuYW1lXHByaW50ZWRyZWZuYW1lCisgICAgICAlCisgICAgICAlIEJ1dCB3ZSBhbHdheXMgd2FudCBhIGNvbW1hIGFuZCBhIHNwYWNlOgorICAgICAgLFxzcGFjZQorICAgICAgJQorICAgICAgJSBvdXRwdXQgdGhlIGBwYWdlIDMnLgorICAgICAgXHR1cm5vZmZhY3RpdmUgXHB1dHdvcmRwYWdlXHRpZVxyZWZ4eyMxLXBnfXt9JQorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBmcm9tIFx4cmVmWCBmb3IgdGhlIGBbbm9kZW5hbWVdJyBwYXJ0IG9mIHhyZWYKKyUgb3V0cHV0LiAgSXQncyBhIHNlcGFyYXRlIG1hY3JvIG9ubHkgc28gaXQgY2FuIGJlIGNoYW5nZWQgbW9yZSBlYXNpbHksCislIHNpbmNlIHNxdWFyZSBicmFja2V0cyBkb24ndCB3b3JrIHdlbGwgaW4gc29tZSBkb2N1bWVudHMuICBQYXJ0aWN1bGFybHkKKyUgb25lIHRoYXQgQm9iIGlzIHdvcmtpbmcgb24gOikuCislCitcZGVmXHhyZWZwcmludG5vZGVuYW1lIzF7WyMxXX0KKworJSBUaGluZ3MgcmVmZXJyZWQgdG8gYnkgXHNldHJlZi4KKyUKK1xkZWZcWW5vdGhpbmd7fQorXGRlZlxZb21pdGZyb210b2N7fQorXGRlZlxZbnVtYmVyZWR7JQorICBcaWZudW1cc2Vjbm89MAorICAgIFxwdXR3b3JkQ2hhcHRlckB0aWUgXHRoZVxjaGFwbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CitcZGVmXFlhcHBlbmRpeHslCisgIFxpZm51bVxzZWNubz0wCisgICAgIFxwdXR3b3JkQXBwZW5kaXhAdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5ve30lCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNubworICBcZWxzZSBcaWZudW1cc3Vic3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vCisgIFxlbHNlCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZQorICAgICAgQGNoYXJcdGhlXGFwcGVuZGl4bm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vLlx0aGVcc3Vic3Vic2Vjbm8KKyAgXGZpXGZpXGZpCit9CisKKyUgRGVmaW5lIFxyZWZ4e05BTUV9e1NVRkZJWH0gdG8gcmVmZXJlbmNlIGEgY3Jvc3MtcmVmZXJlbmNlIHN0cmluZyBuYW1lZCBOQU1FLgorJSBJZiBpdHMgdmFsdWUgaXMgbm9uZW1wdHksIFNVRkZJWCBpcyBvdXRwdXQgYWZ0ZXJ3YXJkLgorJQorXGRlZlxyZWZ4IzEjMnslCisgIHslCisgICAgXGluZGV4bm9mb250cworICAgIFxvdGhlcmJhY2tzbGFzaAorICAgIFxleHBhbmRhZnRlclxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0XGV4cGFuZGFmdGVyXHRoaXNyZWZYCisgICAgICBcY3NuYW1lIFhSIzFcZW5kY3NuYW1lCisgIH0lCisgIFxpZnhcdGhpc3JlZlhccmVsYXgKKyAgICAlIElmIG5vdCBkZWZpbmVkLCBzYXkgc29tZXRoaW5nIGF0IGxlYXN0LgorICAgIFxhbmdsZWxlZnQgdW5cLWRlXC1maW5lZFxhbmdsZXJpZ2h0CisgICAgXGlmbGlua3MKKyAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICBcbWVzc2FnZXtcbGluZW51bWJlciBVbmRlZmluZWQgY3Jvc3MgcmVmZXJlbmNlIGAjMScufSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZndhcm5lZHhyZWZzXGVsc2UKKyAgICAgICAgICBcZ2xvYmFsXHdhcm5lZHhyZWZzdHJ1ZQorICAgICAgICAgIFxtZXNzYWdle0Nyb3NzIHJlZmVyZW5jZSB2YWx1ZXMgdW5rbm93bjsgeW91IG11c3QgcnVuIFRlWCBhZ2Fpbi59JQorICAgICAgICBcZmkKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgSXQncyBkZWZpbmVkLCBzbyBqdXN0IHVzZSBpdC4KKyAgICBcdGhpc3JlZlgKKyAgXGZpCisgICMyJSBPdXRwdXQgdGhlIHN1ZmZpeCBpbiBhbnkgY2FzZS4KK30KKworJSBUaGlzIGlzIHRoZSBtYWNybyBpbnZva2VkIGJ5IGVudHJpZXMgaW4gdGhlIGF1eCBmaWxlLiAgVXN1YWxseSBpdCdzCislIGp1c3QgYSBcZGVmICh3ZSBwcmVwZW5kIFhSIHRvIHRoZSBjb250cm9sIHNlcXVlbmNlIG5hbWUgdG8gYXZvaWQKKyUgY29sbGlzaW9ucykuICBCdXQgaWYgdGhpcyBpcyBhIGZsb2F0IHR5cGUsIHdlIGhhdmUgbW9yZSB3b3JrIHRvIGRvLgorJQorXGRlZlx4cmRlZiMxIzJ7JQorICBcZXhwYW5kYWZ0ZXJcZ2RlZlxjc25hbWUgWFIjMVxlbmRjc25hbWV7IzJ9JSByZW1lbWJlciB0aGlzIHhyZWYgdmFsdWUuCisgICUKKyAgJSBXYXMgdGhhdCB4cmVmIGNvbnRyb2wgc2VxdWVuY2UgdGhhdCB3ZSBqdXN0IGRlZmluZWQgZm9yIGEgZmxvYXQ/CisgIFxleHBhbmRhZnRlclxpZmZsb2F0XGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICAgICUgaXQgd2FzIGEgZmxvYXQsIGFuZCB3ZSBoYXZlIHRoZSAoc2FmZSkgZmxvYXQgdHlwZSBpbiBcaWZmbG9hdHR5cGUuCisgICAgXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclxmbG9hdGxpc3QKKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZQorICAgICUKKyAgICAlIElzIHRoaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiB0aGlzIGZsb2F0IHR5cGU/CisgICAgXGV4cGFuZGFmdGVyXGlmeFxmbG9hdGxpc3RccmVsYXgKKyAgICAgIFx0b2tzMCA9IHtcZG99JSB5ZXMsIHNvIGp1c3QgXGRvCisgICAgXGVsc2UKKyAgICAgICUgaGFkIGl0IGJlZm9yZSwgc28gcHJlc2VydmUgcHJldmlvdXMgZWxlbWVudHMgaW4gbGlzdC4KKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcZmxvYXRsaXN0XGRvfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBSZW1lbWJlciB0aGlzIHhyZWYgaW4gdGhlIGNvbnRyb2wgc2VxdWVuY2UgXGZsb2F0bGlzdEZMT0FUVFlQRSwKKyAgICAlIGZvciBsYXRlciB1c2UgaW4gXGxpc3RvZmZsb2F0cy4KKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgZmxvYXRsaXN0XGlmZmxvYXR0eXBlXGVuZGNzbmFtZXtcdGhlXHRva3MweyMxfX0lCisgIFxmaQorfQorCislIFJlYWQgdGhlIGxhc3QgZXhpc3RpbmcgYXV4IGZpbGUsIGlmIGFueS4gIE5vIGVycm9yIGlmIG5vbmUgZXhpc3RzLgorJQorXGRlZlx0cnlhdXhmaWxleyUKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLmF1eAorICBcaWZlb2YgMSBcZWxzZQorICAgIFxyZWFkZGF0YWZpbGV7YXV4fSUKKyAgICBcZ2xvYmFsXGhhdmV4cmVmc3RydWUKKyAgXGZpCisgIFxjbG9zZWluIDEKK30KKworXGRlZlxzZXR1cGRhdGFmaWxleyUKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgVGhpcyBpcyB0byBzdXBwb3J0IFwgaW4gbm9kZSBuYW1lcyBhbmQgdGl0bGVzLCBzaW5jZSB0aGUgXAorICAlIGNoYXJhY3RlcnMgZW5kIHVwIGluIGEgXGNzbmFtZS4gIEl0J3MgZWFzaWVyIHRoYW4KKyAgJSBsZWF2aW5nIGl0IGFjdGl2ZSBhbmQgbWFraW5nIGl0cyBhY3RpdmUgZGVmaW5pdGlvbiBhbiBhY3R1YWwgXAorICAlIGNoYXJhY3Rlci4gIFdoYXQgSSBkb24ndCB1bmRlcnN0YW5kIGlzIHdoeSBpdCB3b3JrcyBpbiB0aGUgKnZhbHVlKgorICAlIG9mIHRoZSB4cmRlZi4gIFNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgY2F0Y29kZTEyIFwsIGFuZCB0aGF0CisgICUgc2hvdWxkIG5vdCB0eXBlc2V0IHByb3Blcmx5LiAgQnV0IGl0IHdvcmtzLCBzbyBJJ20gbW92aW5nIG9uIGZvcgorICAlIG5vdy4gIC0ta2FybCwgMTVqYW4wNC4KKyAgXGNhdGNvZGVgXFw9XG90aGVyCisgICUKKyAgJSBNYWtlIHRoZSBjaGFyYWN0ZXJzIDEyOC0yNTUgYmUgcHJpbnRpbmcgY2hhcmFjdGVycy4KKyAgeyUKKyAgICBcY291bnQxPTEyOAorICAgIFxkZWZcbG9vcHslCisgICAgICBcY2F0Y29kZVxjb3VudDE9XG90aGVyCisgICAgICBcYWR2YW5jZVxjb3VudDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudDE8MjU2IFxsb29wIFxmaQorICAgIH0lCisgIH0lCisgICUKKyAgJSBAIGlzIG91ciBlc2NhcGUgY2hhcmFjdGVyIGluIC5hdXggZmlsZXMsIGFuZCB3ZSBuZWVkIGJyYWNlcy4KKyAgXGNhdGNvZGVgXHs9MQorICBcY2F0Y29kZWBcfT0yCisgIFxjYXRjb2RlYFxAPTAKK30KKworXGRlZlxyZWFkZGF0YWZpbGUjMXslCitcYmVnaW5ncm91cAorICBcc2V0dXBkYXRhZmlsZQorICBcaW5wdXRcam9ibmFtZS4jMQorXGVuZGdyb3VwfQorCitcbWVzc2FnZXtpbnNlcnRpb25zLH0KKyUgaW5jbHVkaW5nIGZvb3Rub3Rlcy4KKworXG5ld2NvdW50IFxmb290bm90ZW5vCisKKyUgVGhlIHRyYWlsaW5nIHNwYWNlIGluIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBmb3Igc3VwZXJlamVjdCBpcworJSB2aXRhbCBmb3IgcHJvcGVyIGZpbGxpbmc7IHBhZ2VzIGNvbWUgb3V0IHVuYWxpZ25lZCB3aGVuIHlvdSBkbyBhCislIHBhZ2VhbGlnbm1hY3JvIGNhbGwgaWYgdGhhdCBzcGFjZSBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2UgaXMKKyUgcmVtb3ZlZC4gKEdlbmVyYWxseSwgbnVtZXJpYyBjb25zdGFudHMgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSBhCislIHNwYWNlIHRvIHByZXZlbnQgc3RyYW5nZSBleHBhbnNpb24gZXJyb3JzLikKK1xkZWZcc3VwZXJlamVjdHtccGFyXHBlbmFsdHkgLTIwMDAwXGZvb3Rub3Rlbm8gPTAgfQorCislIEBmb290bm90ZXN0eWxlIGlzIG1lYW5pbmdmdWwgZm9yIGluZm8gb3V0cHV0IG9ubHkuCitcbGV0XGZvb3Rub3Rlc3R5bGU9XGNvbW1lbnQKKwore1xjYXRjb2RlIGBcQD0xMQorJQorJSBBdXRvLW51bWJlciBmb290bm90ZXMuICBPdGhlcndpc2UgbGlrZSBwbGFpbi4KK1xnZGVmXGZvb3Rub3RleyUKKyAgXGxldFxpbmRlbnQ9XHB0ZXhpbmRlbnQKKyAgXGxldFxub2luZGVudD1ccHRleG5vaW5kZW50CisgIFxnbG9iYWxcYWR2YW5jZVxmb290bm90ZW5vIGJ5IFxAbmUKKyAgXGVkZWZcdGhpc2Zvb3Rub3skXntcdGhlXGZvb3Rub3Rlbm99JH0lCisgICUKKyAgJSBJbiBjYXNlIHRoZSBmb290bm90ZSBjb21lcyBhdCB0aGUgZW5kIG9mIGEgc2VudGVuY2UsIHByZXNlcnZlIHRoZQorICAlIGV4dHJhIHNwYWNpbmcgYWZ0ZXIgd2UgZG8gdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXGxldFxAc2ZcZW1wdHkKKyAgXGlmaG1vZGVcZWRlZlxAc2Z7XHNwYWNlZmFjdG9yXHRoZVxzcGFjZWZhY3Rvcn1ccHRleHNsYXNoXGZpCisgICUKKyAgJSBSZW1vdmUgaW5hZHZlcnRlbnQgYmxhbmsgc3BhY2UgYmVmb3JlIHR5cGVzZXR0aW5nIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFx1bnNraXAKKyAgXHRoaXNmb290bm9cQHNmCisgIFxkb2Zvb3Rub3RlCit9JQorCislIERvbid0IGJvdGhlciB3aXRoIHRoZSB0cmlja2VyeSBpbiBwbGFpbi50ZXggdG8gbm90IHJlcXVpcmUgdGhlCislIGZvb3Rub3RlIHRleHQgYXMgYSBwYXJhbWV0ZXIuICBPdXIgZm9vdG5vdGVzIGRvbid0IG5lZWQgdG8gYmUgc28gZ2VuZXJhbC4KKyUKKyUgT2ggeWVzLCB0aGV5IGRvOyBvdGhlcndpc2UsIEBpZnNldCAoYW5kIGFueXRoaW5nIGVsc2UgdGhhdCB1c2VzCislIFxwYXJzZWFyZ2xpbmUpIGZhaWxzIGluc2lkZSBmb290bm90ZXMgYmVjYXVzZSB0aGUgdG9rZW5zIGFyZSBmaXhlZCB3aGVuCislIHRoZSBmb290bm90ZSBpcyByZWFkLiAgLS1rYXJsLCAxNm5vdjk2LgorJQorXGdkZWZcZG9mb290bm90ZXslCisgIFxpbnNlcnRcZm9vdGluc1xiZ3JvdXAKKyAgJSBXZSB3YW50IHRvIHR5cGVzZXQgdGhpcyB0ZXh0IGFzIGEgbm9ybWFsIHBhcmFncmFwaCwgZXZlbiBpZiB0aGUKKyAgJSBmb290bm90ZSByZWZlcmVuY2Ugb2NjdXJzIGluIChmb3IgZXhhbXBsZSkgYSBkaXNwbGF5IGVudmlyb25tZW50LgorICAlIFNvIHJlc2V0IHNvbWUgcGFyYW1ldGVycy4KKyAgXGhzaXplPVxwYWdld2lkdGgKKyAgXGludGVybGluZXBlbmFsdHlcaW50ZXJmb290bm90ZWxpbmVwZW5hbHR5CisgIFxzcGxpdHRvcHNraXBcaHRcc3RydXRib3ggJSB0b3AgYmFzZWxpbmUgZm9yIGJyb2tlbiBmb290bm90ZXMKKyAgXHNwbGl0bWF4ZGVwdGhcZHBcc3RydXRib3gKKyAgXGZsb2F0aW5ncGVuYWx0eVxATU0KKyAgXGxlZnRza2lwXHpAc2tpcAorICBccmlnaHRza2lwXHpAc2tpcAorICBcc3BhY2Vza2lwXHpAc2tpcAorICBceHNwYWNlc2tpcFx6QHNraXAKKyAgXHBhcmluZGVudFxkZWZhdWx0cGFyaW5kZW50CisgICUKKyAgXHNtYWxsZm9udHMgXHJtCisgICUKKyAgJSBCZWNhdXNlIHdlIHVzZSBoYW5naW5nIGluZGVudGF0aW9uIGluIGZvb3Rub3RlcywgYSBAbm9pbmRlbnQgYXBwZWFycworICAlIHRvIGV4ZGVudCB0aGlzIHRleHQsIHNvIG1ha2UgaXQgYmUgYSBuby1vcC4gIG1ha2VpbmZvIGRvZXMgbm90IHVzZQorICAlIGhhbmdpbmcgaW5kZW50YXRpb24gc28gQG5vaW5kZW50IGNhbiBzdGlsbCBiZSBuZWVkZWQgd2l0aGluIGZvb3Rub3RlCisgICUgdGV4dCBhZnRlciBhbiBAZXhhbXBsZSBvciB0aGUgbGlrZSAobm90IHRoYXQgdGhpcyBpcyBnb29kIHN0eWxlKS4KKyAgXGxldFxub2luZGVudCA9IFxyZWxheAorICAlCisgICUgSGFuZyB0aGUgZm9vdG5vdGUgdGV4dCBvZmYgdGhlIG51bWJlci4gIFVzZSBcZXZlcnlwYXIgaW4gY2FzZSB0aGUKKyAgJSBmb290bm90ZSBleHRlbmRzIGZvciBtb3JlIHRoYW4gb25lIHBhcmFncmFwaC4KKyAgXGV2ZXJ5cGFyID0ge1xoYW5nfSUKKyAgXHRleHRpbmRlbnR7XHRoaXNmb290bm99JQorICAlCisgICUgRG9uJ3QgY3Jhc2ggaW50byB0aGUgbGluZSBhYm92ZSB0aGUgZm9vdG5vdGUgdGV4dC4gIFNpbmNlIHRoaXMKKyAgJSBleHBhbmRzIGludG8gYSBib3gsIGl0IG11c3QgY29tZSB3aXRoaW4gdGhlIHBhcmFncmFwaCwgbGVzdCBpdAorICAlIHByb3ZpZGUgYSBwbGFjZSB3aGVyZSBUZVggY2FuIHNwbGl0IHRoZSBmb290bm90ZS4KKyAgXGZvb3RzdHJ1dAorICBcZnV0dXJlbGV0XG5leHRcZm9AdAorfQorfSVlbmQgXGNhdGNvZGUgYFxAPTExCisKKyUgSW4gY2FzZSBhIEBmb290bm90ZSBhcHBlYXJzIGluIGEgdmJveCwgc2F2ZSB0aGUgZm9vdG5vdGUgdGV4dCBhbmQgY3JlYXRlCislIHRoZSByZWFsIFxpbnNlcnQganVzdCBhZnRlciB0aGUgdmJveCBmaW5pc2hlZC4gIE90aGVyd2lzZSwgdGhlIGluc2VydGlvbgorJSB3b3VsZCBiZSBsb3N0LgorJSBTaW1pbGFyaWx5LCBpZiBhIEBmb290bm90ZSBhcHBlYXJzIGluc2lkZSBhbiBhbGlnbm1lbnQsIHNhdmUgdGhlIGZvb3Rub3RlCislIHRleHQgdG8gYSBib3ggYW5kIG1ha2UgdGhlIFxpbnNlcnQgd2hlbiBhIHJvdyBvZiB0aGUgdGFibGUgaXMgZmluaXNoZWQuCislIEFuZCB0aGUgc2FtZSBjYW4gYmUgZG9uZSBmb3Igb3RoZXIgaW5zZXJ0IGNsYXNzZXMuICAtLWthc2FsLCAxNm5vdjAzLgorCislIFJlcGxhY2UgdGhlIFxpbnNlcnQgcHJpbWl0aXZlIGJ5IGEgY2hlYXRpbmcgbWFjcm8uCislIERlZXBlciBpbnNpZGUsIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHNhdmVkIGluc2VydGlvbnMgYXJlIG5vdCBzcGlsbGVkCislIG91dCBwcmVtYXR1cmVseS4KKyUKK1xkZWZcc3RhcnRzYXZpbmdpbnNlcnRzeyUKKyAgXGlmeCBcaW5zZXJ0XHB0ZXhpbnNlcnQKKyAgICBcbGV0XGluc2VydFxzYXZlaW5zZXJ0CisgIFxlbHNlCisgICAgXGxldFxjaGVja2luc2VydHNccmVsYXgKKyAgXGZpCit9CisKKyUgVGhpcyBcaW5zZXJ0IHJlcGxhY2VtZW50IHdvcmtzIGZvciBib3RoIFxpbnNlcnRcZm9vdGluc3tmb299IGFuZAorJSBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwIGZvb1xlZ3JvdXAsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIFxpbnNlcnQyN3tmb299LgorJQorXGRlZlxzYXZlaW5zZXJ0IzF7JQorICBcZWRlZlxuZXh0e1xub2V4cGFuZFxzYXZldG9ib3ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXGFmdGVyYXNzaWdubWVudFxuZXh0CisgICUgc3dhbGxvdyB0aGUgbGVmdCBicmFjZQorICBcbGV0XHRlbXAgPQorfQorXGRlZlxtYWtlU0FWRW5hbWUjMXtcbWFrZWNzbmFtZXtTQVZFXGV4cGFuZGFmdGVyXGdvYmJsZVxzdHJpbmcjMX19CitcZGVmXHNhdmV0b2JveCMxe1xnbG9iYWxcc2V0Ym94IzEgPSBcdmJveFxiZ3JvdXAgXHVudmJveCMxfQorCitcZGVmXGNoZWNrc2F2ZWlucyMxe1xpZnZvaWQjMVxlbHNlIFxwbGFjZXNhdmVpbnMjMVxmaX0KKworXGRlZlxwbGFjZXNhdmVpbnMjMXslCisgIFxwdGV4aW5zZXJ0IFxjc25hbWVcZXhwYW5kYWZ0ZXJcZ29iYmxlc2F2ZVxzdHJpbmcjMVxlbmRjc25hbWUKKyAgICB7XGJveCMxfSUKK30KKworJSBlYXQgQFNBVkUgLS0gYmV3YXJlLCBhbGwgb2YgdGhlbSBoYXZlIGNhdGNvZGUgXG90aGVyOgoreworICBcZGVmXGRvc3BlY2lhbHN7XGRvIFNcZG8gQVxkbyBWXGRvIEV9IFx1bmNhdGNvZGVzcGVjaWFscyAgJSAgOy0pCisgIFxnZGVmXGdvYmJsZXNhdmUgQFNBVkV7fQorfQorCislIGluaXRpYWxpemF0aW9uOgorXGRlZlxuZXdzYXZlaW5zICMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcbmV3c2F2ZWluc1ggXG1ha2VTQVZFbmFtZSMxfSUKKyAgXG5leHQKK30KK1xkZWZcbmV3c2F2ZWluc1ggIzF7JQorICBcY3NuYW1lIG5ld2JveFxlbmRjc25hbWUgIzElCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXJcY2hlY2tpbnNlcnRzXGV4cGFuZGFmdGVye1xjaGVja2luc2VydHMKKyAgICBcY2hlY2tzYXZlaW5zICMxfSUKK30KKworJSBpbml0aWFsaXplOgorXGxldFxjaGVja2luc2VydHNcZW1wdHkKK1xuZXdzYXZlaW5zXGZvb3RpbnMKK1xuZXdzYXZlaW5zXG1hcmdpbgorCisKKyUgQGltYWdlLiAgV2UgdXNlIHRoZSBtYWNyb3MgZnJvbSBlcHNmLnRleCB0byBzdXBwb3J0IHRoaXMuCislIElmIGVwc2YudGV4IGlzIG5vdCBpbnN0YWxsZWQgYW5kIEBpbWFnZSBpcyB1c2VkLCB3ZSBjb21wbGFpbi4KKyUKKyUgQ2hlY2sgZm9yIGFuZCByZWFkIGVwc2YudGV4IHVwIGZyb250LiAgSWYgd2UgcmVhZCBpdCBvbmx5IGF0IEBpbWFnZQorJSB0aW1lLCB3ZSBtaWdodCBiZSBpbnNpZGUgYSBncm91cCwgYW5kIHRoZW4gaXRzIGRlZmluaXRpb25zIHdvdWxkIGdldAorJSB1bmRvbmUgYW5kIHRoZSBuZXh0IGltYWdlIHdvdWxkIGZhaWwuCitcb3BlbmluIDEgPSBlcHNmLnRleAorXGlmZW9mIDEgXGVsc2UKKyAgJSBEbyBub3QgYm90aGVyIHNob3dpbmcgYmFubmVyIHdpdGggZXBzZi50ZXggdjIuN2sgKGF2YWlsYWJsZSBpbgorICAlIGRvYy9lcHNmLnRleCBhbmQgb24gY3RhbikuCisgIFxkZWZcZXBzZmFubm91bmNle1x0b2tzMCA9IH0lCisgIFxpbnB1dCBlcHNmLnRleAorXGZpCitcY2xvc2VpbiAxCislCislIFdlIHdpbGwgb25seSBjb21wbGFpbiBvbmNlIGFib3V0IGxhY2sgb2YgZXBzZi50ZXguCitcbmV3aWZcaWZ3YXJuZWRub2Vwc2YKK1xuZXdoZWxwXG5vZXBzZmhlbHB7ZXBzZi50ZXggbXVzdCBiZSBpbnN0YWxsZWQgZm9yIGltYWdlcyB0bworICB3b3JrLiAgSXQgaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgVGV4aW5mbyBkaXN0cmlidXRpb24sIG9yIHlvdSBjYW4gZ2V0CisgIGl0IGZyb20gZnRwOi8vdHVnLm9yZy90ZXgvZXBzZi50ZXgufQorJQorXGRlZlxpbWFnZSMxeyUKKyAgXGlmeFxlcHNmYm94XHVuZGVmaW5lZAorICAgIFxpZndhcm5lZG5vZXBzZiBcZWxzZQorICAgICAgXGVycmhlbHAgPSBcbm9lcHNmaGVscAorICAgICAgXGVycm1lc3NhZ2V7ZXBzZi50ZXggbm90IGZvdW5kLCBpbWFnZXMgd2lsbCBiZSBpZ25vcmVkfSUKKyAgICAgIFxnbG9iYWxcd2FybmVkbm9lcHNmdHJ1ZQorICAgIFxmaQorICBcZWxzZQorICAgIFxpbWFnZXh4eCAjMSwsLCwsXGZpbmlzaAorICBcZmkKK30KKyUKKyUgQXJndW1lbnRzIHRvIEBpbWFnZToKKyUgIzEgaXMgKG1hbmRhdG9yeSkgaW1hZ2UgZmlsZW5hbWU7IHdlIHRhY2sgb24gLmVwcyBleHRlbnNpb24uCislICMyIGlzIChvcHRpb25hbCkgd2lkdGgsICMzIGlzIChvcHRpb25hbCkgaGVpZ2h0LgorJSAjNCBpcyAoaWdub3JlZCBvcHRpb25hbCkgaHRtbCBhbHQgdGV4dC4KKyUgIzUgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGV4dGVuc2lvbi4KKyUgIzYgaXMganVzdCB0aGUgdXN1YWwgZXh0cmEgaWdub3JlZCBhcmcgZm9yIHBhcnNpbmcgdGhpcyBzdHVmZi4KK1xuZXdpZlxpZmltYWdldm1vZGUKK1xkZWZcaW1hZ2V4eHgjMSwjMiwjMywjNCwjNSwjNlxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eTSA9IDUgICAgICUgaW4gY2FzZSB3ZSdyZSBpbnNpZGUgYW4gZXhhbXBsZQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBhbGxvdyBfIGV0IGFsLiBpbiBuYW1lcworICAlIElmIHRoZSBpbWFnZSBpcyBieSBpdHNlbGYsIGNlbnRlciBpdC4KKyAgXGlmdm1vZGUKKyAgICBcaW1hZ2V2bW9kZXRydWUKKyAgICBcbm9icmVha1xiaWdza2lwCisgICAgJSBVc3VhbGx5IHdlJ2xsIGhhdmUgdGV4dCBhZnRlciB0aGUgaW1hZ2Ugd2hpY2ggd2lsbCBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUsIHNvIGluc2VydCBpdCBoZXJlIHRvbyB0byBlcXVhbGl6ZSB0aGUgc3BhY2UKKyAgICAlIGFib3ZlIGFuZCBiZWxvdy4KKyAgICBcbm9icmVha1x2c2tpcFxwYXJza2lwCisgICAgXG5vYnJlYWsKKyAgICBcbGluZVxiZ3JvdXAKKyAgXGZpCisgICUKKyAgJSBPdXRwdXQgdGhlIGltYWdlLgorICBcaWZwZGYKKyAgICBcZG9wZGZpbWFnZXsjMX17IzJ9eyMzfSUKKyAgXGVsc2UKKyAgICAlIFxlcHNmYm94IGl0c2VsZiByZXNldHMgXGVwc2Y/c2l6ZSBhdCBlYWNoIGZpZ3VyZS4KKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnhzaXplPSMyXHJlbGF4IFxmaQorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM31caWZkaW1cd2QwID4gMHB0IFxlcHNmeXNpemU9IzNccmVsYXggXGZpCisgICAgXGVwc2Zib3h7IzEuZXBzfSUKKyAgXGZpCisgICUKKyAgXGlmaW1hZ2V2bW9kZSBcZWdyb3VwIFxiaWdicmVhayBcZmkgICUgc3BhY2UgYWZ0ZXIgdGhlIGltYWdlCitcZW5kZ3JvdXB9CisKKworJSBAZmxvYXQgRkxPQVRUWVBFLExBQkVMLExPQyAuLi4gQGVuZCBmbG9hdCBmb3IgZGlzcGxheWVkIGZpZ3VyZXMsIHRhYmxlcywKKyUgZXRjLiAgV2UgZG9uJ3QgYWN0dWFsbHkgaW1wbGVtZW50IGZsb2F0aW5nIHlldCwgd2UgYWx3YXlzIGluY2x1ZGUgdGhlCislIGZsb2F0ICJoZXJlIi4gIEJ1dCBpdCBzZWVtZWQgdGhlIGJlc3QgbmFtZSBmb3IgdGhlIGZ1dHVyZS4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxmbG9hdHtcZWF0Y29tbWFzcGFjZVxlYXRjb21tYXNwYWNlXGRvZmxvYXQjMSwgLCAsXGZpbmlzaH0KKworJSBUaGVyZSBtYXkgYmUgYSBzcGFjZSBiZWZvcmUgc2Vjb25kIGFuZC9vciB0aGlyZCBwYXJhbWV0ZXI7IGRlbGV0ZSBpdC4KK1xkZWZcZWF0Y29tbWFzcGFjZSMxLCB7IzEsfQorCislICMxIGlzIHRoZSBvcHRpb25hbCBGTE9BVFRZUEUsIHRoZSB0ZXh0IGxhYmVsIGZvciB0aGlzIGZsb2F0LCB0eXBpY2FsbHkKKyUgIkZpZ3VyZSIsICJUYWJsZSIsICJFeGFtcGxlIiwgZXRjLiAgQ2FuJ3QgY29udGFpbiBjb21tYXMuICBJZiBvbWl0dGVkLAorJSB0aGlzIGZsb2F0IHdpbGwgbm90IGJlIG51bWJlcmVkIGFuZCBjYW5ub3QgYmUgcmVmZXJyZWQgdG8uCislCislICMyIGlzIHRoZSBvcHRpb25hbCB4cmVmIGxhYmVsLiAgQWxzbyBtdXN0IGJlIHByZXNlbnQgZm9yIHRoZSBmbG9hdCB0bworJSBiZSByZWZlcmFibGUuCislCislICMzIGlzIHRoZSBvcHRpb25hbCBwb3NpdGlvbmluZyBhcmd1bWVudDsgZm9yIG5vdywgaXQgaXMgaWdub3JlZC4gIEl0CislIHdpbGwgc29tZWhvdyBzcGVjaWZ5IHRoZSBwb3NpdGlvbnMgYWxsb3dlZCB0byBmbG9hdCB0byAoaGVyZSwgdG9wLCBib3R0b20pLgorJQorJSBXZSBrZWVwIGEgc2VwYXJhdGUgY291bnRlciBmb3IgZWFjaCBGTE9BVFRZUEUsIHdoaWNoIHdlIHJlc2V0IGF0IGVhY2gKKyUgY2hhcHRlci1sZXZlbCBjb21tYW5kLgorXGxldFxyZXNldGFsbGZsb2F0bm9zPVxlbXB0eQorJQorXGRlZlxkb2Zsb2F0IzEsIzIsIzMsIzRcZmluaXNoeyUKKyAgXGxldFx0aGlzY2FwdGlvbj1cZW1wdHkKKyAgXGxldFx0aGlzc2hvcnRjYXB0aW9uPVxlbXB0eQorICAlCisgICUgZG9uJ3QgbG9zZSBmb290bm90ZXMgaW5zaWRlIEBmbG9hdC4KKyAgJQorICAlIEJFV0FSRTogd2hlbiB0aGUgZmxvYXRzIHN0YXJ0IGZsb2F0LCB3ZSBoYXZlIHRvIGlzc3VlIHdhcm5pbmcgd2hlbmV2ZXIgYW4KKyAgJSBpbnNlcnQgYXBwZWFycyBpbnNpZGUgYSBmbG9hdCB3aGljaCBjb3VsZCBwb3NzaWJseSBmbG9hdC4gLS1rYXNhbCwgMjZtYXkwNAorICAlCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgJQorICAlIFdlIGNhbid0IGJlIHVzZWQgaW5zaWRlIGEgcGFyYWdyYXBoLgorICBccGFyCisgICUKKyAgXHZ0b3BcYmdyb3VwCisgICAgXGRlZlxmbG9hdHR5cGV7IzF9JQorICAgIFxkZWZcZmxvYXRsYWJlbHsjMn0lCisgICAgXGRlZlxmbG9hdGxvY3sjM30lIHdlIGRvIG5vdGhpbmcgd2l0aCB0aGlzIHlldC4KKyAgICAlCisgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkKKyAgICAgIFxsZXRcc2FmZWZsb2F0dHlwZT1cZW1wdHkKKyAgICBcZWxzZQorICAgICAgeyUKKyAgICAgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgICAgICUgYnV0IHdlIG5lZWQgdG8gdXNlIGl0IGluIGEgY29udHJvbCBzZXF1ZW5jZSBuYW1lLgorICAgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICAgIFx0dXJub2ZmYWN0aXZlCisgICAgICAgIFx4ZGVmXHNhZmVmbG9hdHR5cGV7XGZsb2F0dHlwZX0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIGxhYmVsIGlzIGdpdmVuIGJ1dCBubyB0eXBlLCB3ZSBoYW5kbGUgdGhhdCBhcyB0aGUgZW1wdHkgdHlwZS4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgICUgV2Ugd2FudCBlYWNoIEZMT0FUVFlQRSB0byBiZSBudW1iZXJlZCBzZXBhcmF0ZWx5IChGaWd1cmUgMSwKKyAgICAgICUgVGFibGUgMSwgRmlndXJlIDIsIC4uLikuICAoQW5kIGlmIG5vIGxhYmVsLCBubyBudW1iZXIuKQorICAgICAgJQorICAgICAgXGV4cGFuZGFmdGVyXGdldGZsb2F0bm9cY3NuYW1lXHNhZmVmbG9hdHR5cGUgZmxvYXRub1xlbmRjc25hbWUKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxmbG9hdG5vIGJ5IDEKKyAgICAgICUKKyAgICAgIHslCisgICAgICAgICUgVGhpcyBtYWdpYyB2YWx1ZSBmb3IgXHRoaXNzZWN0aW9uIGlzIG91dHB1dCBieSBcc2V0cmVmIGFzIHRoZQorICAgICAgICAlIFhSRUZMQUJFTC10aXRsZSB2YWx1ZS4gIFx4cmVmWCB1c2VzIGl0IHRvIGRpc3Rpbmd1aXNoIGZsb2F0CisgICAgICAgICUgbGFiZWxzICh3aGljaCBoYXZlIGEgY29tcGxldGVseSBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdCkgZnJvbQorICAgICAgICAlIG5vZGUgYW5kIGFuY2hvciBsYWJlbHMuICBBbmQgXHhyZGVmIHVzZXMgaXQgdG8gY29uc3RydWN0IHRoZQorICAgICAgICAlIGxpc3RzIG9mIGZsb2F0cy4KKyAgICAgICAgJQorICAgICAgICBcZWRlZlx0aGlzc2VjdGlvbntcZmxvYXRtYWdpYz1cc2FmZWZsb2F0dHlwZX0lCisgICAgICAgIFxzZXRyZWZ7XGZsb2F0bGFiZWx9e1lmbG9hdH0lCisgICAgICB9JQorICAgIFxmaQorICAgICUKKyAgICAlIHN0YXJ0IHdpdGggXHBhcnNraXAgZ2x1ZSwgSSBndWVzcy4KKyAgICBcdnNraXBccGFyc2tpcAorICAgICUKKyAgICAlIERvbid0IHN1cHByZXNzIGluZGVudGF0aW9uIGlmIGEgZmxvYXQgaGFwcGVucyB0byBzdGFydCBhIHNlY3Rpb24uCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIHdlIGhhdmUgdGhlc2UgcG9zc2liaWxpdGllczoKKyUgQGZsb2F0IEZvbyxsYmwgJiBAY2FwdGlvbntDYXB9OiBGb28gMS4xOiBDYXAKKyUgQGZsb2F0IEZvbyxsYmwgJiBubyBjYXB0aW9uOiAgICBGb28gMS4xCislIEBmbG9hdCBGb28gJiBAY2FwdGlvbntDYXB9OiAgICAgRm9vOiBDYXAKKyUgQGZsb2F0IEZvbyAmIG5vIGNhcHRpb246ICAgICAgICBGb28KKyUgQGZsb2F0ICxsYmwgJiBDYXB0aW9ue0NhcH06ICAgICAxLjE6IENhcAorJSBAZmxvYXQgLGxibCAmIG5vIGNhcHRpb246ICAgICAgIDEuMQorJSBAZmxvYXQgJiBAY2FwdGlvbntDYXB9OiAgICAgICAgIENhcAorJSBAZmxvYXQgJiBubyBjYXB0aW9uOgorJQorXGRlZlxFZmxvYXR7JQorICAgIFxsZXRcZmxvYXRpZGVudCA9IFxlbXB0eQorICAgICUKKyAgICAlIEluIGFsbCBjYXNlcywgaWYgd2UgaGF2ZSBhIGZsb2F0IHR5cGUsIGl0IGNvbWVzIGZpcnN0LgorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlIFxkZWZcZmxvYXRpZGVudHtcZmxvYXR0eXBlfVxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW4geHJlZiBsYWJlbCwgdGhlIG51bWJlciBjb21lcyBuZXh0LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdHR5cGVcZW1wdHkgXGVsc2UgJSBpZiBhbHNvIGhhZCBmbG9hdCB0eXBlLCBuZWVkIHRpZSBmaXJzdC4KKyAgICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcdGllfSUKKyAgICAgIFxmaQorICAgICAgJSB0aGUgbnVtYmVyLgorICAgICAgXGFwcGVuZHRvbWFjcm9cZmxvYXRpZGVudHtcY2hhcGxldmVscHJlZml4XHRoZVxmbG9hdG5vfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBTdGFydCB0aGUgcHJpbnRlZCBjYXB0aW9uIHdpdGggd2hhdCB3ZSd2ZSBjb25zdHJ1Y3RlZCBpbgorICAgICUgXGZsb2F0aWRlbnQsIGJ1dCBrZWVwIGl0IHNlcGFyYXRlOyB3ZSBuZWVkIFxmbG9hdGlkZW50IGFnYWluLgorICAgIFxsZXRcY2FwdGlvbmxpbmUgPSBcZmxvYXRpZGVudAorICAgICUKKyAgICBcaWZ4XHRoaXNjYXB0aW9uXGVtcHR5IFxlbHNlCisgICAgICBcaWZ4XGZsb2F0aWRlbnRcZW1wdHkgXGVsc2UKKwlcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXs6IH0lIGhhZCBpZGVudCwgc28gbmVlZCBhIGNvbG9uIGJldHdlZW4KKyAgICAgIFxmaQorICAgICAgJQorICAgICAgJSBjYXB0aW9uIHRleHQuCisgICAgICBcYXBwZW5kdG9tYWNyb1xjYXB0aW9ubGluZXtcc2NhbmV4cFx0aGlzY2FwdGlvbn0lCisgICAgXGZpCisgICAgJQorICAgICUgSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBwcmludCwgcHJpbnQgaXQsIHdpdGggc3BhY2UgYmVmb3JlLgorICAgICUgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhbiBcaW5zZXJ0LgorICAgIFxpZnhcY2FwdGlvbmxpbmVcZW1wdHkgXGVsc2UKKyAgICAgIFx2c2tpcC41XHBhcnNraXAKKyAgICAgIFxjYXB0aW9ubGluZQorICAgICAgJQorICAgICAgJSBTcGFjZSBiZWxvdyBjYXB0aW9uLgorICAgICAgXHZza2lwXHBhcnNraXAKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBoYXZlIGFuIHhyZWYgbGFiZWwsIHdyaXRlIHRoZSBsaXN0IG9mIGZsb2F0cyBpbmZvLiAgRG8gdGhpcworICAgICUgYWZ0ZXIgdGhlIGNhcHRpb24sIHRvIGF2b2lkIGNoYW5jZSBvZiBpdCBiZWluZyBhIGJyZWFrcG9pbnQuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdyaXRlIHRoZSB0ZXh0IHRoYXQgZ29lcyBpbiB0aGUgbG9mIHRvIHRoZSBhdXggZmlsZSBhcworICAgICAgJSBcZmxvYXRsYWJlbC1sb2YuICBCZXNpZGVzIFxmbG9hdGlkZW50LCB3ZSBpbmNsdWRlIHRoZSBzaG9ydAorICAgICAgJSBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSB0aGUgZnVsbCBjYXB0aW9uIGlmIHNwZWNpZmllZCwgZWxzZSBub3RoaW5nLgorICAgICAgeyUKKyAgICAgICAgXGF0ZHVtbWllcworICAgICAgICAlCisgICAgICAgICUgc2luY2Ugd2UgcmVhZCB0aGUgY2FwdGlvbiB0ZXh0IGluIHRoZSBtYWNybyB3b3JsZCwgd2hlcmUgXl5NCisgICAgICAgICUgaXMgdHVybmVkIGludG8gYSBub3JtYWwgY2hhcmFjdGVyLCB3ZSBoYXZlIHRvIHNjYW4gaXQgYmFjaywgc28KKyAgICAgICAgJSB3ZSBkb24ndCB3cml0ZSB0aGUgbGl0ZXJhbCB0aHJlZSBjaGFyYWN0ZXJzICJeXk0iIGludG8gdGhlIGF1eCBmaWxlLgorCVxzY2FuZXhweyUKKwkgIFx4ZGVmXG5vZXhwYW5kXGd0ZW1weyUKKwkgICAgXGlmeFx0aGlzc2hvcnRjYXB0aW9uXGVtcHR5CisJICAgICAgXHRoaXNjYXB0aW9uCisJICAgIFxlbHNlCisJICAgICAgXHRoaXNzaG9ydGNhcHRpb24KKwkgICAgXGZpCisJICB9JQorCX0lCisgICAgICAgIFxpbW1lZGlhdGVcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7XGZsb2F0bGFiZWwtbG9mfXtcZmxvYXRpZGVudAorCSAgXGlmeFxndGVtcFxlbXB0eSBcZWxzZSA6IFxndGVtcCBcZml9fSUKKyAgICAgIH0lCisgICAgXGZpCisgIFxlZ3JvdXAgICUgZW5kIG9mIFx2dG9wCisgICUKKyAgJSBwbGFjZSB0aGUgY2FwdHVyZWQgaW5zZXJ0cworICAlCisgICUgQkVXQVJFOiB3aGVuIHRoZSBmbG9hdHMgc3RhcnQgZmxvYXRpbmcsIHdlIGhhdmUgdG8gaXNzdWUgd2FybmluZworICAlIHdoZW5ldmVyIGFuIGluc2VydCBhcHBlYXJzIGluc2lkZSBhIGZsb2F0IHdoaWNoIGNvdWxkIHBvc3NpYmx5CisgICUgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcY2hlY2tpbnNlcnRzCit9CisKKyUgQXBwZW5kIHRoZSB0b2tlbnMgIzIgdG8gdGhlIGRlZmluaXRpb24gb2YgbWFjcm8gIzEsIG5vdCBleHBhbmRpbmcgZWl0aGVyLgorJQorXGRlZlxhcHBlbmR0b21hY3JvIzEjMnslCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXIjMVxleHBhbmRhZnRlcnsjMSMyfSUKK30KKworJSBAY2FwdGlvbiwgQHNob3J0Y2FwdGlvbgorJQorXGRlZlxjYXB0aW9ue1xkb2NhcHRpb25cdGhpc2NhcHRpb259CitcZGVmXHNob3J0Y2FwdGlvbntcZG9jYXB0aW9uXHRoaXNzaG9ydGNhcHRpb259CitcZGVmXGRvY2FwdGlvbntcY2hlY2tlbnZcZmxvYXQgXGJncm91cFxzY2FuYXJnY3R4dFxkZWZjYXB0aW9ufQorXGRlZlxkZWZjYXB0aW9uIzEjMntcZWdyb3VwIFxkZWYjMXsjMn19CisKKyUgVGhlIHBhcmFtZXRlciBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSBpZGVudGlmeWluZyB0aGUgY291bnRlciB3ZSBhcmUKKyUgZ29pbmcgdG8gdXNlLiAgQ3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIGFzc2lnbiBpdCB0byBcZmxvYXRuby4KK1xkZWZcZ2V0ZmxvYXRubyMxeyUKKyAgXGlmeCMxXHJlbGF4CisgICAgICAlIEhhdmVuJ3Qgc2VlbiB0aGlzIGZpZ3VyZSB0eXBlIGJlZm9yZS4KKyAgICAgIFxjc25hbWUgbmV3Y291bnRcZW5kY3NuYW1lICMxJQorICAgICAgJQorICAgICAgJSBSZW1lbWJlciB0byByZXNldCB0aGlzIGZsb2F0bm8gYXQgdGhlIG5leHQgY2hhcC4KKyAgICAgIFxleHBhbmRhZnRlclxnZGVmXGV4cGFuZGFmdGVyXHJlc2V0YWxsZmxvYXRub3MKKyAgICAgICAgXGV4cGFuZGFmdGVye1xyZXNldGFsbGZsb2F0bm9zICMxPTAgfSUKKyAgXGZpCisgIFxsZXRcZmxvYXRubyMxJQorfQorCislIFxzZXRyZWYgY2FsbHMgdGhpcyB0byBnZXQgdGhlIFhSRUZMQUJFTC1zbnQgdmFsdWUuICBXZSB3YW50IGFuIEB4cmVmCislIHRvIHRoZSBGTE9BVExBQkVMIHRvIGV4cGFuZCB0byAiRmlndXJlIDMuMSIuICBXZSBjYWxsIFxzZXRyZWYgd2hlbiB3ZQorJSBmaXJzdCByZWFkIHRoZSBAZmxvYXQgY29tbWFuZC4KKyUKK1xkZWZcWWZsb2F0e1xmbG9hdHR5cGVAdGllIFxjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorCislIE1hZ2ljIHN0cmluZyB1c2VkIGZvciB0aGUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLCBzbyBceHJlZlggY2FuCislIGRpc3Rpbmd1aXNoIGZsb2F0cyBmcm9tIG90aGVyIHhyZWYgdHlwZXMuCitcZGVmXGZsb2F0bWFnaWN7ISFmbG9hdCEhfQorCislICMxIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdlIGFyZSBwYXNzZWQ7IHdlIGV4cGFuZCBpbnRvIGEgY29uZGl0aW9uYWwKKyUgd2hpY2ggaXMgdHJ1ZSBpZiAjMSByZXByZXNlbnRzIGEgZmxvYXQgcmVmLiAgVGhhdCBpcywgdGhlIG1hZ2ljCislIFx0aGlzc2VjdGlvbiB2YWx1ZSB3aGljaCB3ZSBcc2V0cmVmIGFib3ZlLgorJQorXGRlZlxpZmZsb2F0IzF7XGV4cGFuZGFmdGVyXGRvaWZmbG9hdCMxPT1cZmluaXNofQorJQorJSAjMSBpcyAobWF5YmUpIHRoZSBcZmxvYXRtYWdpYyBzdHJpbmcuICBJZiBzbywgIzIgd2lsbCBiZSB0aGUKKyUgKHNhZmUpIGZsb2F0IHR5cGUgZm9yIHRoaXMgZmxvYXQuICBXZSBzZXQgXGlmZmxvYXR0eXBlIHRvICMyLgorJQorXGRlZlxkb2lmZmxvYXQjMT0jMj0jM1xmaW5pc2h7JQorICBcZGVmXHRlbXB7IzF9JQorICBcZGVmXGlmZmxvYXR0eXBleyMyfSUKKyAgXGlmeFx0ZW1wXGZsb2F0bWFnaWMKK30KKworJSBAbGlzdG9mZmxvYXRzIEZMT0FUVFlQRSAtIHByaW50IGEgbGlzdCBvZiBmbG9hdHMgbGlrZSBhIHRhYmxlIG9mIGNvbnRlbnRzLgorJQorXHBhcnNlYXJnZGVmXGxpc3RvZmZsb2F0c3slCisgIFxkZWZcZmxvYXR0eXBleyMxfSUgZmxvYXR0eXBlCisgIHslCisgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgfSUKKyAgJQorICAlIFx4cmRlZiBzYXZlcyB0aGUgZmxvYXRzIGFzIGEgXGRvLWxpc3QgaW4gXGZsb2F0bGlzdFNBRkVGTE9BVFRZUEUuCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZSBccmVsYXgKKyAgICBcaWZoYXZleHJlZnMKKyAgICAgICUgaWYgdGhlIHVzZXIgc2FpZCBAbGlzdG9mZmxvYXRzIGZvbyBidXQgbmV2ZXIgQGZsb2F0IGZvby4KKyAgICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIE5vIGBcc2FmZWZsb2F0dHlwZScgZmxvYXRzIHRvIGxpc3QufSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGxlZnRza2lwPVx0b2NpbmRlbnQgICUgaW5kZW50IHRoZXNlIGVudHJpZXMgbGlrZSBhIHRvYworICAgICAgXGxldFxkbz1cbGlzdG9mZmxvYXRzZG8KKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCislIFRoaXMgaXMgY2FsbGVkIG9uIGVhY2ggZW50cnkgaW4gYSBsaXN0IG9mIGZsb2F0cy4gIFdlJ3JlIHBhc3NlZCB0aGUKKyUgeHJlZiBsYWJlbCwgaW4gdGhlIGZvcm0gTEFCRUwtdGl0bGUsIHdoaWNoIGlzIGhvdyB3ZSBzYXZlIGl0IGluIHRoZQorJSBhdXggZmlsZS4gIFdlIHN0cmlwIG9mZiB0aGUgLXRpdGxlIGFuZCBsb29rIHVwIFxYUkxBQkVMLWxvZiwgd2hpY2gKKyUgaGFzIHRoZSB0ZXh0IHdlJ3JlIHN1cHBvc2VkIHRvIHR5cGVzZXQgaGVyZS4KKyUKKyUgRmlndXJlcyB3aXRob3V0IHhyZWYgbGFiZWxzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IChzaW5jZQorJSB0aGV5IHdvbid0IGFwcGVhciBpbiB0aGUgYXV4IGZpbGUpLgorJQorXGRlZlxsaXN0b2ZmbG9hdHNkbyMxe1xsaXN0b2ZmbG9hdHNkb2VudHJ5IzFcZmluaXNofQorXGRlZlxsaXN0b2ZmbG9hdHNkb2VudHJ5IzEtdGl0bGVcZmluaXNoe3slCisgICUgQ2FuJ3QgZnVsbHkgZXhwYW5kIFhSIzEtbG9mIGJlY2F1c2UgaXQgY2FuIGNvbnRhaW4gYW55dGhpbmcuICBKdXN0CisgICUgcGFzcyB0aGUgY29udHJvbCBzZXF1ZW5jZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBYUiMxLXBnIGlzIGp1c3QgdGhlCisgICUgcGFnZSBudW1iZXIsIGFuZCB3ZSB3YW50IHRvIGZ1bGx5IGV4cGFuZCB0aGF0IHNvIHdlIGNhbiBnZXQgYSBsaW5rCisgICUgaW4gcGRmIG91dHB1dC4KKyAgXHRva3NBID0gXGV4cGFuZGFmdGVye1xjc25hbWUgWFIjMS1sb2ZcZW5kY3NuYW1lfSUKKyAgJQorICAlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gd2UgdXNlIHRvIGdlbmVyYXRlIHRoZSBUT0MgYW5kIGluZGV4LgorICBcZWRlZlx3cml0ZWVudHJ5e1xub2V4cGFuZFxlbnRyeXtcdGhlXHRva3NBfXtcY3NuYW1lIFhSIzEtcGdcZW5kY3NuYW1lfX0lCisgIFx3cml0ZWVudHJ5Cit9fQorCitcbWVzc2FnZXtsb2NhbGl6YXRpb24sfQorJSBhbmQgaTE4bi4KKworJSBAZG9jdW1lbnRsYW5ndWFnZSBpcyB1c3VhbGx5IGdpdmVuIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIKKyUgQHNldGZpbGVuYW1lLiAgSWYgZG9uZSB0b28gbGF0ZSwgaXQgbWF5IG5vdCBvdmVycmlkZSBldmVyeXRoaW5nCislIHByb3Blcmx5LiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uCislIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgc2V0IHVwIGEgaHlwaGVuYXRpb24gZmlsZSBoZXJlLgorJQorXHBhcnNlYXJnZGVmXGRvY3VtZW50bGFuZ3VhZ2V7JQorICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgorICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgXG9wZW5pbiAxIHR4aS0jMS50ZXgKKyAgICBcaWZlb2YgMQorICAgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcZWxzZQorICAgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKworJSBAZG9jdW1lbnRlbmNvZGluZyBzaG91bGQgY2hhbmdlIHNvbWV0aGluZyBpbiBUZVggZXZlbnR1YWxseSwgbW9zdAorJSBsaWtlbHksIGJ1dCBmb3Igbm93IGp1c3QgcmVjb2duaXplIGl0LgorXGxldFxkb2N1bWVudGVuY29kaW5nID0gXGNvbW1lbnQKKworCislIFBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLgorJQorXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCitcd2lkb3dwZW5hbHR5PTEwMDAwCitcY2x1YnBlbmFsdHk9MTAwMDAKKworJSBVc2UgVGVYIDMuMCdzIFxlbWVyZ2VuY3lzdHJldGNoIHRvIGhlbHAgbGluZSBicmVha2luZywgYnV0IGlmIHdlJ3JlCislIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuICBXZSB3YW50IHRoZSBhbW91bnQgb2YKKyUgc3RyZXRjaCBhZGRlZCB0byBkZXBlbmQgb24gdGhlIGxpbmUgbGVuZ3RoLCBoZW5jZSB0aGUgZGVwZW5kZW5jZSBvbgorJSBcaHNpemUuICBXZSBjYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIHBhcGVyIHNpemUgaXMgc2V0LgorJQorXGRlZlxzZXRlbWVyZ2VuY3lzdHJldGNoeyUKKyAgXGlmeFxlbWVyZ2VuY3lzdHJldGNoXHRoaXNpc3VuZGVmaW5lZAorICAgICUgQWxsb3cgdXMgdG8gYXNzaWduIHRvIFxlbWVyZ2VuY3lzdHJldGNoIGFueXdheS4KKyAgICBcZGVmXGVtZXJnZW5jeXN0cmV0Y2h7XGRpbWVuMH0lCisgIFxlbHNlCisgICAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAuMTVcaHNpemUKKyAgXGZpCit9CisKKyUgUGFyYW1ldGVycyBpbiBvcmRlcjogMSkgdGV4dGhlaWdodDsgMikgdGV4dHdpZHRoOworJSAzKSB2b2Zmc2V0OyA0KSBob2Zmc2V0OyA1KSBiaW5kaW5nIG9mZnNldDsgNikgdG9wc2tpcDsKKyUgNykgcGh5c2ljYWwgcGFnZSBoZWlnaHQ7IDgpIHBoeXNpY2FsIHBhZ2Ugd2lkdGguCislCislIFdlIGFsc28gY2FsbCBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBkZWZpbmUKKyUgXHRleHRsZWFkaW5nLiAgVGhlIGNhbGxlciBzaG91bGQgYWxzbyBzZXQgXHBhcnNraXAuCislCitcZGVmXGludGVybmFscGFnZXNpemVzIzEjMiMzIzQjNSM2IzcjOHslCisgIFx2b2Zmc2V0ID0gIzNccmVsYXgKKyAgXHRvcHNraXAgPSAjNlxyZWxheAorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJQorICBcdnNpemUgPSAjMVxyZWxheAorICBcYWR2YW5jZVx2c2l6ZSBieSBcdG9wc2tpcAorICBcb3V0ZXJ2c2l6ZSA9IFx2c2l6ZQorICBcYWR2YW5jZVxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luCisgIFxwYWdlaGVpZ2h0ID0gXHZzaXplCisgICUKKyAgXGhzaXplID0gIzJccmVsYXgKKyAgXG91dGVyaHNpemUgPSBcaHNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJoc2l6ZSBieSAwLjVpbgorICBccGFnZXdpZHRoID0gXGhzaXplCisgICUKKyAgXG5vcm1hbG9mZnNldCA9ICM0XHJlbGF4CisgIFxiaW5kaW5nb2Zmc2V0ID0gIzVccmVsYXgKKyAgJQorICBcaWZwZGYKKyAgICBccGRmcGFnZWhlaWdodCAjN1xyZWxheAorICAgIFxwZGZwYWdld2lkdGggIzhccmVsYXgKKyAgXGZpCisgICUKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQorICAlCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorICBcc2V0ZW1lcmdlbmN5c3RyZXRjaAorfQorCislIEBsZXR0ZXJwYXBlciAodGhlIGRlZmF1bHQpLgorXGRlZlxsZXR0ZXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIElmIHBhZ2UgaXMgbm90aGluZyBidXQgdGV4dCwgbWFrZSBpdCBjb21lIG91dCBldmVuLgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NDZcYmFzZWxpbmVza2lwfXs2aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKK319CisKKyUgVXNlIEBzbWFsbGJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgN3g5LjI1IHRyaW0gc2l6ZS4KK1xkZWZcc21hbGxib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjVpbn17NWlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MTZwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5LjI1aW59ezdpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjNpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC41Y20KK319CisKKyUgVXNlIEBzbWFsbGVyYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA2eDkgdHJpbSBzaXplLgorJSAoSnVzdCB0ZXN0aW5nLCBwYXJhbWV0ZXJzIHN0aWxsIGluIGZsdXguKQorXGRlZlxzbWFsbGVyYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMS41cHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjRpbn17NC44aW59JQorICAgICAgICAgICAgICAgICAgICB7LS4yaW59ey0uNGlufSUKKyAgICAgICAgICAgICAgICAgICAgezBwdH17MTRwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5aW59ezZpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjI1aW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNGNtCit9fQorCislIFVzZSBAYWZvdXJwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNCBwYXBlci4KK1xkZWZcYWZvdXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIERvdWJsZS1zaWRlIHByaW50aW5nIHZpYSBwb3N0c2NyaXB0IG9uIExhc2VyamV0IDQwNTAKKyAgJSBwcmludHMgZG91YmxlLXNpZGVkIG5pY2VseSB3aGVuIFxiaW5kaW5nb2Zmc2V0PTEwbW0gYW5kIFxob2Zmc2V0PS02bW0uCisgICUgVG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmb3IgYSBkaWZmZXJlbnQgcHJpbnRlciBvciBzaXR1YXRpb24sIGFkanVzdAorICAlIFxub3JtYWxvZmZzZXQgdW50aWwgdGhlIGZyb250LXNpZGUgYW5kIGJhY2stc2lkZSB0ZXh0cyBhbGlnbi4gIFRoZW4KKyAgJSBkbyB0aGUgc2FtZSBmb3IgXGJpbmRpbmdvZmZzZXQuICBZb3UgY2FuIHNldCB0aGVzZSBmb3IgdGVzdGluZyBpbgorICAlIHlvdXIgdGV4aW5mbyBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisgICUgQHRleAorICAlIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0gLTZtbQorICAlIFxnbG9iYWxcYmluZGluZ29mZnNldCA9IDEwbW0KKyAgJSBAZW5kIHRleAorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NTFcYmFzZWxpbmVza2lwfXsxNjBtbX0KKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gNW1tCit9fQorCislIFVzZSBAYWZpdmVwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNSBwYXBlci4KKyUgRnJvbSByb21pbGRvQHVyYW5vLmljZWIudWZvcC5iciwgMiBKdWx5IDIwMDAuCislIEhlIGFsc28gcmVjb21tZW5kcyBtYWtpbmcgQGV4YW1wbGUgYW5kIEBsaXNwIGJlIHNtYWxsLgorXGRlZlxhZml2ZXBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQgbWludXMgMC4xcHQKKyAgXHRleHRsZWFkaW5nID0gMTIuNXB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezE2MG1tfXsxMjBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezhwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyMTBtbX17MTQ4bW19JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yaW4KKyAgXHRvbGVyYW5jZSA9IDgwMAorICBcaGZ1enogPSAxLjJwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDJtbQorICBcdGFibGVpbmRlbnQgPSAxMm1tCit9fQorCislIEEgc3BlY2lmaWMgdGV4dCBsYXlvdXQsIDI0eDE1Y20gb3ZlcmFsbCwgaW50ZW5kZWQgZm9yIEE0IHBhcGVyLgorXGRlZlxhZm91cmxhdGV4e3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezIzN21tfXsxNTBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17NC42bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgICUgTXVzdCBleHBsaWNpdGx5IHJlc2V0IHRvIDAgYmVjYXVzZSB3ZSBjYWxsIFxhZm91cnBhcGVyLgorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgVXNlIEBhZm91cndpZGUgdG8gcHJpbnQgb24gQTQgcGFwZXIgaW4gbGFuZHNjYXBlIGZvcm1hdC4KK1xkZWZcYWZvdXJ3aWRle3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezI0MW1tfXsxNjVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LTIuOTVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBAcGFnZXNpemVzIFRFWFRIRUlHSFRbLFRFWFRXSURUSF0KKyUgUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgc2V0dGluZyB0aGUgbWFyZ2lucywgXHRvcHNraXAsIFxwYXJza2lwLAorJSBhbmQvb3IgbGVhZGluZywgYWxzby4gT3IgcGVyaGFwcyB3ZSBzaG91bGQgY29tcHV0ZSB0aGVtIHNvbWVob3cuCislCitccGFyc2VhcmdkZWZccGFnZXNpemVze1xwYWdlc2l6ZXN5eXkgIzEsLFxmaW5pc2h9CitcZGVmXHBhZ2VzaXplc3l5eSMxLCMyLCMzXGZpbmlzaHt7JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcaHNpemU9IzJccmVsYXggXGZpCisgIFxnbG9iYWxkZWZzID0gMQorICAlCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9JQorICAlCisgIFxkaW1lbjAgPSAjMQorICBcYWR2YW5jZVxkaW1lbjAgYnkgXHZvZmZzZXQKKyAgJQorICBcZGltZW4yID0gXGhzaXplCisgIFxhZHZhbmNlXGRpbWVuMiBieSBcbm9ybWFsb2Zmc2V0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzeyMxfXtcaHNpemV9JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xub3JtYWxvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7XGRpbWVuMH17XGRpbWVuMn0lCit9fQorCislIFNldCBkZWZhdWx0IHRvIGxldHRlci4KKyUKK1xsZXR0ZXJwYXBlcgorCisKK1xtZXNzYWdle2FuZCB0dXJuaW5nIG9uIHRleGluZm8gaW5wdXQgZm9ybWF0Ln0KKworJSBEZWZpbmUgbWFjcm9zIHRvIG91dHB1dCB2YXJpb3VzIGNoYXJhY3RlcnMgd2l0aCBjYXRjb2RlIGZvciBub3JtYWwgdGV4dC4KK1xjYXRjb2RlYFwiPVxvdGhlcgorXGNhdGNvZGVgXH49XG90aGVyCitcY2F0Y29kZWBcXj1cb3RoZXIKK1xjYXRjb2RlYFxfPVxvdGhlcgorXGNhdGNvZGVgXHw9XG90aGVyCitcY2F0Y29kZWBcPD1cb3RoZXIKK1xjYXRjb2RlYFw+PVxvdGhlcgorXGNhdGNvZGVgXCs9XG90aGVyCitcY2F0Y29kZWBcJD1cb3RoZXIKK1xkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xkZWZcbm9ybWFsdGlsZGV7fn0KK1xkZWZcbm9ybWFsY2FyZXR7Xn0KK1xkZWZcbm9ybWFsdW5kZXJzY29yZXtffQorXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGRlZlxub3JtYWxsZXNzezx9CitcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xkZWZcbm9ybWFscGx1c3srfQorXGRlZlxub3JtYWxkb2xsYXJ7JH0lJCBmb250LWxvY2sgZml4CisKKyUgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnQgb25lIHdheSBpbiBcdHQKKyUgKHdoZXJlIGl0IGNhbiBwcm9iYWJseSBiZSBvdXRwdXQgYXMtaXMpLCBhbmQgYW5vdGhlciB3YXkgaW4gb3RoZXIgZm9udHMsCislIHdoZXJlIHNvbWV0aGluZyBoYWlyaWVyIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUuCislCislICMxIGlzIHdoYXQgdG8gcHJpbnQgaWYgd2UgYXJlIGluZGVlZCB1c2luZyBcdHQ7ICMyIGlzIHdoYXQgdG8gcHJpbnQKKyUgb3RoZXJ3aXNlLiAgU2luY2UgYWxsIHRoZSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8KKyUgaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZCBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsCislIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZSB0aGlzLCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZ1c2luZ3R0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjNcZm9udD0wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgZm9yIGl0YWxpYyBmb250LiAgQWN0dWFsbHkgdGhpcyBhbHNvIGNhdGNoZXMKKyUgbm9uLWl0YWxpYyBzbGFudGVkIGZvbnRzIHNpbmNlIGl0IGlzIGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCislIGl0YWxpYyBmb250cy4gIEJ1dCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSAkIGFuZCBpdCB1c2VzIFxzbCBhbnl3YXkKKyUgdGhpcyBpcyBub3QgYSBwcm9ibGVtLgorXGRlZlxpZnVzaW5naXQjMSMye1xpZmRpbSBcZm9udGRpbWVuMVxmb250PjBwdCAjMVxlbHNlICMyXGZpfQorCislIFR1cm4gb2ZmIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0IEAKKyUgKGFuZCB0aG9zZSB3aGljaCB0aGUgdXNlciBjYW4gdXNlIGFzIGlmIHRoZXkgd2VyZSBvcmRpbmFyeSkuCislIE1vc3Qgb2YgdGhlc2Ugd2Ugc2ltcGx5IHByaW50IGZyb20gdGhlIFx0dCBmb250LCBidXQgZm9yIHNvbWUsIHdlIGNhbgorJSB1c2UgbWF0aCBvciBvdGhlciB2YXJpYW50cyB0aGF0IGxvb2sgYmV0dGVyIGluIG5vcm1hbCB0ZXh0LgorCitcY2F0Y29kZWBcIj1cYWN0aXZlCitcZGVmXGFjdGl2ZWRvdWJsZXF1b3Rle3tcdHRcY2hhcjM0fX0KK1xsZXQiPVxhY3RpdmVkb3VibGVxdW90ZQorXGNhdGNvZGVgXH49XGFjdGl2ZQorXGRlZn57e1x0dFxjaGFyMTI2fX0KK1xjaGFyZGVmXGhhdD1gXF4KK1xjYXRjb2RlYFxePVxhY3RpdmUKK1xkZWZee3tcdHQgXGhhdH19CisKK1xjYXRjb2RlYFxfPVxhY3RpdmUKK1xkZWZfe1xpZnVzaW5ndHRcbm9ybWFsdW5kZXJzY29yZVxffQorXGxldFxyZWFsdW5kZXI9XworJSBTdWJyb3V0aW5lIGZvciB0aGUgcHJldmlvdXMgbWFjcm8uCitcZGVmXF97XGxlYXZldm1vZGUgXGtlcm4uMDdlbSBcdmJveHtcaHJ1bGUgd2lkdGguM2VtIGhlaWdodC4xZXh9XGtlcm4gLjA3ZW0gfQorCitcY2F0Y29kZWBcfD1cYWN0aXZlCitcZGVmfHt7XHR0XGNoYXIxMjR9fQorXGNoYXJkZWYgXGxlc3M9YFw8CitcY2F0Y29kZWBcPD1cYWN0aXZlCitcZGVmPHt7XHR0IFxsZXNzfX0KK1xjaGFyZGVmIFxndHI9YFw+CitcY2F0Y29kZWBcPj1cYWN0aXZlCitcZGVmPnt7XHR0IFxndHJ9fQorXGNhdGNvZGVgXCs9XGFjdGl2ZQorXGRlZit7e1x0dCBcY2hhciA0M319CitcY2F0Y29kZWBcJD1cYWN0aXZlCitcZGVmJHtcaWZ1c2luZ2l0e3tcc2xcJH19XG5vcm1hbGRvbGxhcn0lJCBmb250LWxvY2sgZml4CisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiBhIGZpbGUKKyUgbmFtZSBjYW5ub3QgYmUgYWN0aXZlIHVudGlsIHdlIGhhdmUgcGFyc2VkIHRoZSBjb21tYW5kIGxpbmUuCislIFNvIHR1cm4gdGhlbSBvZmYgYWdhaW4sIGFuZCBoYXZlIFxldmVyeWpvYiAob3IgQHNldGZpbGVuYW1lKSB0dXJuIHRoZW0gb24uCislIFxvdGhlcmlmeWFjdGl2ZSBpcyBjYWxsZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK1xkZWZcb3RoZXJpZnlhY3RpdmV7XGNhdGNvZGVgKz1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyfQorCislIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzIGV2ZW4gYWZ0ZXIKKyUgcGFyc2luZyB0aGVtLgorXGRlZlx0dXJub2ZmYWN0aXZleyUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgXG90aGVyYmFja3NsYXNoCit9CisKK1xjYXRjb2RlYFxAPTAKKworJSBcYmFja3NsYXNoY3VyZm9udCBvdXRwdXRzIG9uZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIGN1cnJlbnQgZm9udCwKKyUgYXMgaW4gXGNoYXJgXFwuCitcZ2xvYmFsXGNoYXJkZWZcYmFja3NsYXNoY3VyZm9udD1gXFwKK1xnbG9iYWxcbGV0XHJhd2JhY2tzbGFzaHh4PVxiYWNrc2xhc2hjdXJmb250ICAlIGxldCBleGlzdGluZyAuPz9zIGZpbGVzIHdvcmsKKworJSBccmVhbGJhY2tzbGFzaCBpcyBhbiBhY3R1YWwgY2hhcmFjdGVyIGBcJyB3aXRoIGNhdGNvZGUgb3RoZXIsIGFuZAorJSBcZG91YmxlYmFja3NsYXNoIGlzIHR3byBvZiB0aGVtIChmb3IgdGhlIHBkZiBvdXRsaW5lcykuCit7XGNhdGNvZGVgXFw9XG90aGVyIEBnZGVmQHJlYWxiYWNrc2xhc2h7XH0gQGdkZWZAZG91YmxlYmFja3NsYXNoe1xcfX0KKworJSBJbiB0ZXhpbmZvLCBiYWNrc2xhc2ggaXMgYW4gYWN0aXZlIGNoYXJhY3RlcjsgaXQgcHJpbnRzIHRoZSBiYWNrc2xhc2gKKyUgaW4gZml4ZWQgd2lkdGggZm9udC4KK1xjYXRjb2RlYFxcPVxhY3RpdmUKK0BkZWZAbm9ybWFsYmFja3NsYXNoe3tAdHRAYmFja3NsYXNoY3VyZm9udH19CislIE9uIHN0YXJ0dXAsIEBmaXhiYWNrc2xhc2ggYXNzaWduczoKKyUgIEBsZXQgXCA9IEBub3JtYWxiYWNrc2xhc2gKKworJSBccmF3YmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gZG8gXGJhY2tzbGFzaGN1cmZvbnQuCislIFxvdGhlcmJhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGJlIGEgbGl0ZXJhbCBgXCcgY2hhcmFjdGVyIHdpdGgKKyUgY2F0Y29kZSBvdGhlci4KK0BnZGVmQHJhd2JhY2tzbGFzaHtAbGV0XD1AYmFja3NsYXNoY3VyZm9udH0KK0BnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQorCislIFNhbWUgYXMgQHR1cm5vZmZhY3RpdmUgZXhjZXB0IG91dHB1dHMgXCBhcyB7XHR0XGNoYXJgXFx9IGluc3RlYWQgb2YKKyUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGBcJy4KKyUgCitAZGVmQG5vcm1hbHR1cm5vZmZhY3RpdmV7JQorICBAbGV0XD1Abm9ybWFsYmFja3NsYXNoCisgIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQorICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgQGxldF49QG5vcm1hbGNhcmV0CisgIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCisgIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgorICBAbGV0PD1Abm9ybWFsbGVzcworICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgorICBAbGV0Kz1Abm9ybWFscGx1cworICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKKyAgQHVuc2Vwc3BhY2VzCit9CisKKyUgTWFrZSBfIGFuZCArIFxvdGhlciBjaGFyYWN0ZXJzLCB0ZW1wb3JhcmlseS4KKyUgVGhpcyBpcyBjYW5jZWxlZCBieSBAZml4YmFja3NsYXNoLgorQG90aGVyaWZ5YWN0aXZlCisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgd2UgZG9uJ3Qgd2FudCB0aGUgYFxpbnB1dCB0ZXhpbmZvJyB0byBzaG93IHVwLgorJSBUaGF0IGlzIHdoYXQgXGVhdGlucHV0IGlzIGZvcjsgYWZ0ZXIgdGhhdCwgdGhlIGBcJyBzaG91bGQgcmV2ZXJ0IHRvIHByaW50aW5nCislIGEgYmFja3NsYXNoLgorJQorQGdkZWZAZWF0aW5wdXQgaW5wdXQgdGV4aW5mb3tAZml4YmFja3NsYXNofQorQGdsb2JhbEBsZXRcID0gQGVhdGlucHV0CisKKyUgT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMgdGhlIGZpbGUgZGlkIG5vdCBoYXZlIGEgYFxpbnB1dCB0ZXhpbmZvJy4gVGhlbgorJSB0aGUgZmlyc3QgYFwnIGluIHRoZSBmaWxlIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIG1hY3JvIHRyaWVzIHRvIGZpeAorJSB0aGF0LCBhc3N1bWluZyBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBgXCcgY291bGQgcGxhdXNpYmx5IG9jY3VyLgorJSBBbHNvIHR1cm4gYmFjayBvbiBhY3RpdmUgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiB0aGUgaW5wdXQKKyUgZmlsZSBuYW1lLCBpbiBjYXNlIG5vdCB1c2luZyBhIHByZS1kdW1wZWQgZm9ybWF0LgorJQorQGdkZWZAZml4YmFja3NsYXNoeyUKKyAgQGlmeFxAZWF0aW5wdXQgQGxldFwgPSBAbm9ybWFsYmFja3NsYXNoIEBmaQorICBAY2F0Y29kZWArPUBhY3RpdmUKKyAgQGNhdGNvZGVgQF89QGFjdGl2ZQorfQorCislIFNheSBAZm9vLCBub3QgXGZvbywgaW4gZXJyb3IgbWVzc2FnZXMuCitAZXNjYXBlY2hhciA9IGBAQAorCislIFRoZXNlIGxvb2sgb2sgaW4gYWxsIGZvbnRzLCBzbyBqdXN0IG1ha2UgdGhlbSBub3Qgc3BlY2lhbC4KK0BjYXRjb2RlYEAmID0gQG90aGVyCitAY2F0Y29kZWBAIyA9IEBvdGhlcgorQGNhdGNvZGVgQCUgPSBAb3RoZXIKKworCitAYyBMb2NhbCB2YXJpYWJsZXM6CitAYyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCitAYyBwYWdlLWRlbGltaXRlcjogIl5cXFxcbWVzc2FnZSIKK0BjIHRpbWUtc3RhbXAtc3RhcnQ6ICJkZWZcXFxcdGV4aW5mb3ZlcnNpb257IgorQGMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCitAYyB0aW1lLXN0YW1wLWVuZDogIn0iCitAYyBFbmQ6CisKK0BjIHZpbTpzdz0yOgorCitAaWdub3JlCisgICBhcmNoLXRhZzogZTFiMzZlMzItYzk2ZS00MTM1LWE0MWEtMGIyZWZhMmVhMTE1CitAZW5kIGlnbm9yZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9ldC92ZnByaW50Zi5jIGIvZTJmc3Byb2dzL2xpYi9ldC92ZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGMxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V0L3ZmcHJpbnRmLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlCisgKiBkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGZvcm1zIGFuZCB0aGF0IGFueSBkb2N1bWVudGF0aW9uLAorICogYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzLCBhbmQgb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaAorICogZGlzdHJpYnV0aW9uIGFuZCB1c2UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgc29mdHdhcmUgd2FzIGRldmVsb3BlZAorICogYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkuICBUaGUgbmFtZSBvZiB0aGUKKyAqIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdmZwcmludGYuYwk1LjIgKEJlcmtlbGV5KSA2LzI3Lzg4IjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpZiAhSEFWRV9WUFJJTlRGICYmIEhBVkVfRE9QUk5UCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx2YXJhcmdzLmg+CisKK2ludAordmZwcmludGYoaW9wLCBmbXQsIGFwKQorCUZJTEUgKmlvcDsKKwljaGFyICpmbXQ7CisJdmFfbGlzdCBhcDsKK3sKKwlpbnQgbGVuOworCWNoYXIgbG9jYWxidWZbQlVGU0laXTsKKworCWlmIChpb3AtPl9mbGFnICYgX0lPTkJGKSB7CisJCWlvcC0+X2ZsYWcgJj0gfl9JT05CRjsKKwkJaW9wLT5fcHRyID0gaW9wLT5fYmFzZSA9IGxvY2FsYnVmOworCQlsZW4gPSBfZG9wcm50KGZtdCwgYXAsIGlvcCk7CisJCSh2b2lkKSBmZmx1c2goaW9wKTsKKwkJaW9wLT5fZmxhZyB8PSBfSU9OQkY7CisJCWlvcC0+X2Jhc2UgPSBOVUxMOworCQlpb3AtPl9idWZzaXogPSAwOworCQlpb3AtPl9jbnQgPSAwOworCX0gZWxzZQorCQlsZW4gPSBfZG9wcm50KGZtdCwgYXAsIGlvcCk7CisKKwlyZXR1cm4gKGZlcnJvcihpb3ApID8gRU9GIDogbGVuKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9WUFJJTlRGICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9BbmRyb2lkLm1rIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTYwZWYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDE2NCBAQAorTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorCitsaWJleHQyZnNfc3JjX2ZpbGVzIDo9IFwKKwlleHQyX2Vyci5jIFwKKwlhbGxvYy5jIFwKKwlhbGxvY19zYi5jIFwKKwlhbGxvY19zdGF0cy5jIFwKKwlhbGxvY190YWJsZXMuYyBcCisJYmFkYmxvY2tzLmMgXAorCWJiX2lub2RlLmMgXAorCWJpdG1hcHMuYyBcCisJYml0b3BzLmMgXAorCWJsa21hcDY0X2JhLmMgXAorCWJsa21hcDY0X3JiLmMgXAorCWJsa251bS5jIFwKKwlibG9jay5jIFwKKwlibWFwLmMgXAorCWNoZWNrX2Rlc2MuYyBcCisJY2xvc2Vmcy5jIFwKKwljcmMxNi5jIFwKKwljc3VtLmMgXAorCWRibGlzdC5jIFwKKwlkYmxpc3RfZGlyLmMgXAorCWRpcmJsb2NrLmMgXAorCWRpcmhhc2guYyBcCisJZGlyX2l0ZXJhdGUuYyBcCisJZHVwZnMuYyBcCisJZXhwYW5kZGlyLmMgXAorCWV4dF9hdHRyLmMgXAorCWV4dGVudC5jIFwKKwlmaWxlaW8uYyBcCisJZmluZGRldi5jIFwKKwlmbHVzaGIuYyBcCisJZnJlZWZzLmMgXAorCWdlbl9iaXRtYXAuYyBcCisJZ2VuX2JpdG1hcDY0LmMgXAorCWdldF9wYXRobmFtZS5jIFwKKwlnZXRzaXplLmMgXAorCWdldHNlY3RzaXplLmMgXAorCWlfYmxvY2suYyBcCisJaWNvdW50LmMgXAorCWluZF9ibG9jay5jIFwKKwlpbml0aWFsaXplLmMgXAorCWlubGluZS5jIFwKKwlpbm9kZS5jIFwKKwlpb19tYW5hZ2VyLmMgXAorCWlzbW91bnRlZC5jIFwKKwlsaW5rLmMgXAorCWxsc2Vlay5jIFwKKwlsb29rdXAuYyBcCisJbWtkaXIuYyBcCisJbWtqb3VybmFsLmMgXAorCW1tcC5jIFwKKwluYW1laS5jIFwKKwluYXRpdmUuYyBcCisJbmV3ZGlyLmMgXAorCW9wZW5mcy5jIFwKKwlwcm9ncmVzcy5jIFwKKwlwdW5jaC5jIFwKKwlxY293Mi5jIFwKKwlyZWFkX2JiLmMgXAorCXJlYWRfYmJfZmlsZS5jIFwKKwlyZXNfZ2R0LmMgXAorCXJ3X2JpdG1hcHMuYyBcCisJc3dhcGZzLmMgXAorCXN5bWxpbmsuYyBcCisJdGRiLmMgXAorCXVuZG9faW8uYyBcCisJdW5peF9pby5jIFwKKwl1bmxpbmsuYyBcCisJdmFsaWRfYmxrLmMgXAorCXZlcnNpb24uYyBcCisJcmJ0cmVlLmMKKworIyBnZXQgcmlkIG9mIHRoaXM/IQorbGliZXh0MmZzX3NyY19maWxlcyArPSB0ZXN0X2lvLmMKKworbGliZXh0MmZzX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorCWxpYmV4dDJfY29tX2VyciBcCisJbGliZXh0Ml91dWlkIFwKKwlsaWJleHQyX2Jsa2lkIFwKKwlsaWJleHQyX2UycAorCitsaWJleHQyZnNfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMgOj0gbGliYworCitsaWJleHQyZnNfc3RhdGljX2xpYnJhcmllcyA6PSBcCisJbGliZXh0Ml9jb21fZXJyIFwKKwlsaWJleHQyX3V1aWRfc3RhdGljIFwKKwlsaWJleHQyX2Jsa2lkIFwKKwlsaWJleHQyX2UycAorCitsaWJleHQyZnNfc3lzdGVtX3N0YXRpY19saWJyYXJpZXMgOj0gbGliYworCitsaWJleHQyZnNfY19pbmNsdWRlcyA6PSBleHRlcm5hbC9lMmZzcHJvZ3MvbGliCisKK2xpYmV4dDJmc19jZmxhZ3MgOj0gLU8yIC1nIC1XIC1XYWxsIFwKKwktREhBVkVfVU5JU1REX0ggXAorCS1ESEFWRV9FUlJOT19IIFwKKwktREhBVkVfTkVUSU5FVF9JTl9IIFwKKwktREhBVkVfU1lTX0lPQ1RMX0ggXAorCS1ESEFWRV9TWVNfTU1BTl9IIFwKKwktREhBVkVfU1lTX01PVU5UX0ggXAorCS1ESEFWRV9TWVNfUkVTT1VSQ0VfSCBcCisJLURIQVZFX1NZU19TRUxFQ1RfSCBcCisJLURIQVZFX1NZU19TVEFUX0ggXAorCS1ESEFWRV9TWVNfVFlQRVNfSCBcCisJLURIQVZFX1NURExJQl9IIFwKKwktREhBVkVfU1RSRFVQIFwKKwktREhBVkVfTU1BUCBcCisJLURIQVZFX1VUSU1FX0ggXAorCS1ESEFWRV9HRVRQQUdFU0laRSBcCisJLURIQVZFX0VYVDJfSU9DVExTIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfU1lTX1RJTUVfSCBcCisgICAgICAgIC1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYgXAorCS1Xbm8tdW51c2VkLXBhcmFtZXRlcgorCitsaWJleHQyZnNfY2ZsYWdzX2xpbnV4IDo9IFwKKwktREhBVkVfTElOVVhfRkRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyZnNfc3JjX2ZpbGVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChsaWJleHQyZnNfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMpCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9ICQobGliZXh0MmZzX3NoYXJlZF9saWJyYXJpZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0MmZzX2NfaW5jbHVkZXMpCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChsaWJleHQyZnNfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJmc19jZmxhZ3MpICQobGliZXh0MmZzX2NmbGFnc19saW51eCkKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyZnMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJmc19zcmNfZmlsZXMpCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9ICQobGliZXh0MmZzX3N0YXRpY19saWJyYXJpZXMpICQobGliZXh0MmZzX3N5c3RlbV9zdGF0aWNfbGlicmFyaWVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmV4dDJmc19jX2luY2x1ZGVzKQorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQobGliZXh0MmZzX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyZnNfY2ZsYWdzKSAkKGxpYmV4dDJmc19jZmxhZ3NfbGludXgpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0MmZzCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyZnNfc3JjX2ZpbGVzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGFkZHN1ZmZpeCAtaG9zdCwgJChsaWJleHQyZnNfc2hhcmVkX2xpYnJhcmllcykpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0MmZzX2NfaW5jbHVkZXMpCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChsaWJleHQyZnNfY19pbmNsdWRlcykKK2lmZXEgKCQoSE9TVF9PUyksbGludXgpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyZnNfY2ZsYWdzKSAkKGxpYmV4dDJmc19jZmxhZ3NfbGludXgpCitlbHNlCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyZnNfY2ZsYWdzKQorZW5kaWYKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyZnMtaG9zdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Njc4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDk3NCBAQAorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3RvcF9idWlsZGRpciA9IC4uLy4uCitteV9kaXIgPSBsaWIvZXh0MmZzCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitAREVCVUdGU19DTVRAREVCVUdGU19MSUJfT0JKUyA9IGJiX2NvbXBhdC5vIGlub2RlX2lvLm8gd3JpdGVfYmJfZmlsZS5vCisKK01LX0NNRFM9CV9TU19ESVJfT1ZFUlJJREU9Li4vc3MgLi4vc3MvbWtfY21kcworCitAUkVTSVpFUl9DTVRAUkVTSVpFX0xJQl9PQkpTID0gZHVwZnMubworQFRFU1RfSU9fQ01UQFRFU1RfSU9fTElCX09CSlMgPSB0ZXN0X2lvLm8KK0BJTUFHRVJfQ01UQEUySU1BR0VfTElCX09CSlMgPSBpbWFnZXIubworCitPQkpTPSAkKERFQlVHRlNfTElCX09CSlMpICQoUkVTSVpFX0xJQl9PQkpTKSAkKEUySU1BR0VfTElCX09CSlMpIFwKKwkkKFRFU1RfSU9fTElCX09CSlMpIFwKKwlleHQyX2Vyci5vIFwKKwlhbGxvYy5vIFwKKwlhbGxvY19zYi5vIFwKKwlhbGxvY19zdGF0cy5vIFwKKwlhbGxvY190YWJsZXMubyBcCisJYmFkYmxvY2tzLm8gXAorCWJiX2lub2RlLm8gXAorCWJpdG1hcHMubyBcCisJYml0b3BzLm8gXAorCWJsa21hcDY0X2JhLm8gXAorCWJsa21hcDY0X3JiLm8gXAorCWJsa251bS5vIFwKKwlibG9jay5vIFwKKwlibWFwLm8gXAorCWNoZWNrX2Rlc2MubyBcCisJY2xvc2Vmcy5vIFwKKwljcmMxNi5vIFwKKwljcmMzMmMubyBcCisJY3N1bS5vIFwKKwlkYmxpc3QubyBcCisJZGJsaXN0X2Rpci5vIFwKKwlkaXJibG9jay5vIFwKKwlkaXJoYXNoLm8gXAorCWRpcl9pdGVyYXRlLm8gXAorCWV4cGFuZGRpci5vIFwKKwlleHRfYXR0ci5vIFwKKwlleHRlbnQubyBcCisJZmlsZWlvLm8gXAorCWZpbmRkZXYubyBcCisJZmx1c2hiLm8gXAorCWZyZWVmcy5vIFwKKwlnZW5fYml0bWFwLm8gXAorCWdlbl9iaXRtYXA2NC5vIFwKKwlnZXRfcGF0aG5hbWUubyBcCisJZ2V0c2l6ZS5vIFwKKwlnZXRzZWN0c2l6ZS5vIFwKKwlpX2Jsb2NrLm8gXAorCWljb3VudC5vIFwKKwlpbmRfYmxvY2subyBcCisJaW5pdGlhbGl6ZS5vIFwKKwlpbmxpbmUubyBcCisJaW5vZGUubyBcCisJaW9fbWFuYWdlci5vIFwKKwlpc21vdW50ZWQubyBcCisJbGluay5vIFwKKwlsbHNlZWsubyBcCisJbG9va3VwLm8gXAorCW1rZGlyLm8gXAorCW1ram91cm5hbC5vIFwKKwltbXAubyBcCisJbmFtZWkubyBcCisJbmF0aXZlLm8gXAorCW5ld2Rpci5vIFwKKwlvcGVuZnMubyBcCisJcHJvZ3Jlc3MubyBcCisJcHVuY2gubyBcCisJcWNvdzIubyBcCisJcmVhZF9iYi5vIFwKKwlyZWFkX2JiX2ZpbGUubyBcCisJcmVzX2dkdC5vIFwKKwlyd19iaXRtYXBzLm8gXAorCXN3YXBmcy5vIFwKKwlzeW1saW5rLm8gXAorCXRkYi5vIFwKKwl1bmRvX2lvLm8gXAorCXVuaXhfaW8ubyBcCisJdW5saW5rLm8gXAorCXZhbGlkX2Jsay5vIFwKKwl2ZXJzaW9uLm8gXAorCXJidHJlZS5vCisKK1NSQ1M9IGV4dDJfZXJyLmMgXAorCSQoc3JjZGlyKS9hbGxvYy5jIFwKKwkkKHNyY2RpcikvYWxsb2Nfc2IuYyBcCisJJChzcmNkaXIpL2FsbG9jX3N0YXRzLmMgXAorCSQoc3JjZGlyKS9hbGxvY190YWJsZXMuYyBcCisJJChzcmNkaXIpL2JhZGJsb2Nrcy5jIFwKKwkkKHNyY2RpcikvYmJfY29tcGF0LmMgXAorCSQoc3JjZGlyKS9iYl9pbm9kZS5jIFwKKwkkKHNyY2RpcikvYml0bWFwcy5jIFwKKwkkKHNyY2RpcikvYml0b3BzLmMgXAorCSQoc3JjZGlyKS9ibGttYXA2NF9iYS5jIFwKKwkkKHNyY2RpcikvYmxrbWFwNjRfcmIuYyBcCisJJChzcmNkaXIpL2Jsb2NrLmMgXAorCSQoc3JjZGlyKS9ibWFwLmMgXAorCSQoc3JjZGlyKS9jaGVja19kZXNjLmMgXAorCSQoc3JjZGlyKS9jbG9zZWZzLmMgXAorCSQoc3JjZGlyKS9jcmMxNi5jIFwKKwkkKHNyY2RpcikvY3JjMzJjLmMgXAorCSQoc3JjZGlyKS9nZW5fY3JjMzJjdGFibGUuYyBcCisJJChzcmNkaXIpL2NzdW0uYyBcCisJJChzcmNkaXIpL2RibGlzdC5jIFwKKwkkKHNyY2RpcikvZGJsaXN0X2Rpci5jIFwKKwkkKHNyY2RpcikvZGlyYmxvY2suYyBcCisJJChzcmNkaXIpL2Rpcmhhc2guYyBcCisJJChzcmNkaXIpL2Rpcl9pdGVyYXRlLmMgXAorCSQoc3JjZGlyKS9kdXBmcy5jIFwKKwkkKHNyY2RpcikvZXhwYW5kZGlyLmMgXAorCSQoc3JjZGlyKS9leHRfYXR0ci5jIFwKKwkkKHNyY2RpcikvZXh0ZW50LmMgXAorCSQoc3JjZGlyKS9maWxlaW8uYyBcCisJJChzcmNkaXIpL2ZpbmRkZXYuYyBcCisJJChzcmNkaXIpL2ZsdXNoYi5jIFwKKwkkKHNyY2RpcikvZnJlZWZzLmMgXAorCSQoc3JjZGlyKS9nZW5fYml0bWFwLmMgXAorCSQoc3JjZGlyKS9nZW5fYml0bWFwNjQuYyBcCisJJChzcmNkaXIpL2dldF9wYXRobmFtZS5jIFwKKwkkKHNyY2RpcikvZ2V0c2l6ZS5jIFwKKwkkKHNyY2RpcikvZ2V0c2VjdHNpemUuYyBcCisJJChzcmNkaXIpL2lfYmxvY2suYyBcCisJJChzcmNkaXIpL2ljb3VudC5jIFwKKwkkKHNyY2RpcikvaW5kX2Jsb2NrLmMgXAorCSQoc3JjZGlyKS9pbml0aWFsaXplLmMgXAorCSQoc3JjZGlyKS9pbmxpbmUuYyBcCisJJChzcmNkaXIpL2lub2RlLmMgXAorCSQoc3JjZGlyKS9pbm9kZV9pby5jIFwKKwkkKHNyY2RpcikvaW1hZ2VyLmMgXAorCSQoc3JjZGlyKS9pb19tYW5hZ2VyLmMgXAorCSQoc3JjZGlyKS9pc21vdW50ZWQuYyBcCisJJChzcmNkaXIpL2xpbmsuYyBcCisJJChzcmNkaXIpL2xsc2Vlay5jIFwKKwkkKHNyY2RpcikvbG9va3VwLmMgXAorCSQoc3JjZGlyKS9ta2Rpci5jIFwKKwkkKHNyY2RpcikvbWtqb3VybmFsLmMgXAorCSQoc3JjZGlyKS9tbXAuYwlcCisJJChzcmNkaXIpL25hbWVpLmMgXAorCSQoc3JjZGlyKS9uYXRpdmUuYyBcCisJJChzcmNkaXIpL25ld2Rpci5jIFwKKwkkKHNyY2Rpcikvb3BlbmZzLmMgXAorCSQoc3JjZGlyKS9wcm9ncmVzcy5jIFwKKwkkKHNyY2RpcikvcHVuY2guYyBcCisJJChzcmNkaXIpL3Fjb3cyLmMgXAorCSQoc3JjZGlyKS9yZWFkX2JiLmMgXAorCSQoc3JjZGlyKS9yZWFkX2JiX2ZpbGUuYyBcCisJJChzcmNkaXIpL3Jlc19nZHQuYyBcCisJJChzcmNkaXIpL3J3X2JpdG1hcHMuYyBcCisJJChzcmNkaXIpL3N3YXBmcy5jIFwKKwkkKHNyY2Rpcikvc3ltbGluay5jIFwKKwkkKHNyY2RpcikvdGRiLmMgXAorCSQoc3JjZGlyKS90ZXN0X2lvLmMgXAorCSQoc3JjZGlyKS90c3RfYmFkYmxvY2tzLmMgXAorCSQoc3JjZGlyKS90c3RfYml0b3BzLmMgXAorCSQoc3JjZGlyKS90c3RfYnl0ZXN3YXAuYyBcCisJJChzcmNkaXIpL3RzdF9nZXRzaXplLmMgXAorCSQoc3JjZGlyKS90c3RfaXNjYW4uYyBcCisJJChzcmNkaXIpL3VuZG9faW8uYyBcCisJJChzcmNkaXIpL3VuaXhfaW8uYyBcCisJJChzcmNkaXIpL3VubGluay5jIFwKKwkkKHNyY2RpcikvdmFsaWRfYmxrLmMgXAorCSQoc3JjZGlyKS92ZXJzaW9uLmMgXAorCSQoc3JjZGlyKS93cml0ZV9iYl9maWxlLmMgXAorCSQoc3JjZGlyKS9yYnRyZWUuYyBcCisKK0hGSUxFUz0gYml0b3BzLmggZXh0MmZzLmggZXh0Ml9pby5oIGV4dDJfZnMuaCBleHQyX2V4dF9hdHRyLmggZXh0M19leHRlbnRzLmggXAorCXRkYi5oIHFjb3cyLmgKK0hGSUxFU19JTj0gIGV4dDJfZXJyLmggZXh0Ml90eXBlcy5oCisKK0xJQlJBUlk9IGxpYmV4dDJmcworTElCRElSPSBleHQyZnMKKworRUxGX1ZFUlNJT04gPSAyLjQKK0VMRl9TT19WRVJTSU9OID0gMgorRUxGX0lNQUdFID0gbGliZXh0MmZzCitFTEZfTVlESVIgPSBleHQyZnMKK0VMRl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCitFTEZfT1RIRVJfTElCUyA9IC1sY29tX2VycgorCitCU0RMSUJfVkVSU0lPTiA9IDIuMQorQlNETElCX0lNQUdFID0gbGliZXh0MmZzCitCU0RMSUJfTVlESVIgPSBleHQyZnMKK0JTRExJQl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCisKK0BNQUtFRklMRV9MSUJSQVJZQAorQE1BS0VGSUxFX0VMRkAKK0BNQUtFRklMRV9CU0RMSUJACitATUFLRUZJTEVfUFJPRklMRUAKK0BNQUtFRklMRV9DSEVDS0VSQAorCithbGw6OiBleHQyZnMucGMKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKK0BDSEVDS0VSX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jaGVja2VyIC1nIC1vIGNoZWNrZXIvJCoubyAtYyAkPAorQEVMRl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZlBJQyAtbyBlbGZzaGFyZWQvJCoubyAtYyAkPAorQEJTRExJQl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEJTRExJQl9QSUNfRkxBRykgLW8gcGljLyQqLm8gLWMgJDwKKworQ09NUElMRV9FVD0uLi9ldC9jb21waWxlX2V0IC0tYnVpbGQtdHJlZQorCitESVNURklMRVM9IE1ha2VmaWxlICouYyAqLmggaW1hZ2UKKworZXh0Ml9lcnIuZXQ6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9leHQyX2Vyci5ldC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURSkgJChzcmNkaXIpL2V4dDJfZXJyLmV0LmluIGV4dDJfZXJyLmV0CisKK2V4dDJfZXJyLmMgZXh0Ml9lcnIuaDogZXh0Ml9lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBleHQyX2Vyci5ldCIKKwkkKFEpICQoQ09NUElMRV9FVCkgZXh0Ml9lcnIuZXQKKworZXh0MmZzLnBjOiAkKHNyY2RpcikvZXh0MmZzLnBjLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvZXh0MmZzL2V4dDJmcy5wYyAuL2NvbmZpZy5zdGF0dXMKKwordHN0X2JhZGJsb2NrczogdHN0X2JhZGJsb2Nrcy5vICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfYmFkYmxvY2tzIHRzdF9iYWRibG9ja3MubyAkKFNUQVRJQ19MSUJFWFQyRlMpIFwKKwkJJChTVEFUSUNfTElCQ09NX0VSUikKKwordHN0X2ljb3VudDogJChzcmNkaXIpL2ljb3VudC5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfaWNvdW50ICQoc3JjZGlyKS9pY291bnQuYyAtRERFQlVHICQoQUxMX0NGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpCisKK3RzdF9pc2NhbjogdHN0X2lzY2FuLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9pc2NhbiB0c3RfaXNjYW4ubyAkKFNUQVRJQ19MSUJFWFQyRlMpIFwKKwkJJChTVEFUSUNfTElCQ09NX0VSUikKKwordHN0X2dldHNpemU6IHRzdF9nZXRzaXplLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9nZXRzaXplIHRzdF9nZXRzaXplLm8gJChTVEFUSUNfTElCRVhUMkZTKSBcCisJCSQoU1RBVElDX0xJQkNPTV9FUlIpCisKK3RzdF9pc21vdW50ZWQ6ICQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKFNUQVRJQ19MSUJFWFQyRlMpIFwKKwkJJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfaXNtb3VudGVkICQoc3JjZGlyKS9pc21vdW50ZWQuYyBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgLURERUJVRyAkKEFMTF9DRkxBR1MpIFwKKwkJJChTVEFUSUNfTElCQ09NX0VSUikKKwordHN0X2J5dGVzd2FwOiB0c3RfYnl0ZXN3YXAubyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2J5dGVzd2FwIHRzdF9ieXRlc3dhcC5vICQoU1RBVElDX0xJQkVYVDJGUykgXAorCQkkKFNUQVRJQ19MSUJDT01fRVJSKQorCit0c3RfYml0b3BzOiB0c3RfYml0b3BzLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9iaXRvcHMgdHN0X2JpdG9wcy5vICQoQUxMX0NGTEFHUykgXAorCQkkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpCisKK3RzdF9nZXRzZWN0c2l6ZTogdHN0X2dldHNlY3RzaXplLm8gJChTVEFUSUNfTElCRVhUMkZTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9zZWN0Z2V0c2l6ZSB0c3RfZ2V0c2VjdHNpemUubyBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCQ09NX0VSUikKKwordHN0X3R5cGVzLm86ICQoc3JjZGlyKS90c3RfdHlwZXMuYyBleHQyX3R5cGVzLmggCisKK3RzdF90eXBlczogdHN0X3R5cGVzLm8gZXh0Ml90eXBlcy5oIAorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF90eXBlcyB0c3RfdHlwZXMubyAKKwordHN0X3N1cGVyX3NpemUubzogJChzcmNkaXIpL3RzdF9zdXBlcl9zaXplLmMgJChzcmNkaXIpL2V4dDJfZnMuaAorCit0c3Rfc3VwZXJfc2l6ZTogdHN0X3N1cGVyX3NpemUubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9zdXBlcl9zaXplIHRzdF9zdXBlcl9zaXplLm8gCisKK3RzdF9mc19zdHJ1Y3QubzogJChzcmNkaXIpL3RzdF9mc19zdHJ1Y3QuYyAkKHNyY2RpcikvZXh0MmZzLmgKKwordHN0X2ZzX3N0cnVjdDogdHN0X2ZzX3N0cnVjdC5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2ZzX3N0cnVjdCB0c3RfZnNfc3RydWN0Lm8gCisKK3RzdF9pbm9kZV9zaXplLm86ICQoc3JjZGlyKS90c3RfaW5vZGVfc2l6ZS5jICQoc3JjZGlyKS9leHQyX2ZzLmgKKwordHN0X2lub2RlX3NpemU6IHRzdF9pbm9kZV9zaXplLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAtbyB0c3RfaW5vZGVfc2l6ZSB0c3RfaW5vZGVfc2l6ZS5vIAorCitleHQyX3RkYnRvb2w6IHRkYnRvb2wubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIGV4dDJfdGRidG9vbCB0ZGJ0b29sLm8gdGRiLm8KKworZXh0ZW50X2RiZy5jOiAkKHNyY2RpcikvZXh0ZW50X2RiZy5jdAorCSQoRSkgIglNS19DTURTICQ8IgorCSQoUSkgJChNS19DTURTKSAkKHNyY2RpcikvZXh0ZW50X2RiZy5jdAorCitkZWJ1Z19jbWRzLmMgZGVidWdfY21kcy5oOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdfY21kcy5jdAorCSQoRSkgIglNS19DTURTICQ8IgorCSQoUSkgJChNS19DTURTKSAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZGVidWdfY21kcy5jdAorCitleHRlbnRfY21kcy5jIGV4dGVudF9jbWRzLmg6ICQodG9wX3NyY2RpcikvZGVidWdmcy9leHRlbnRfY21kcy5jdAorCSQoRSkgIglNS19DTURTICQ8IgorCSQoUSkgJChNS19DTURTKSAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZXh0ZW50X2NtZHMuY3QKKworREVCVUdfT0JKUz0gZGVidWdfY21kcy5vIGRlYnVnZnMubyB1dGlsLm8gbmNoZWNrLm8gaWNoZWNrLm8gbHMubyBcCisJbHNkZWwubyBkdW1wLm8gc2V0X2ZpZWxkcy5vIGxvZ2R1bXAubyBodHJlZS5vIHVudXNlZC5vIFwKKwllMmZyZWVmcmFnLm8gZmlsZWZyYWcubyBleHRlbnRfaW5vZGUubyBleHRlbnRfY21kcy5vIHphcC5vCisKK2RlYnVnZnMubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2RlYnVnZnMuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworZXh0ZW50X2lub2RlLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9leHRlbnRfaW5vZGUuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwordXRpbC5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvdXRpbC5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCituY2hlY2subzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL25jaGVjay5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitpY2hlY2subzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2ljaGVjay5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitscy5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvbHMuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworbHNkZWwubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2xzZGVsLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK2R1bXAubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL2R1bXAuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKworc2V0X2ZpZWxkcy5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvc2V0X2ZpZWxkcy5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitsb2dkdW1wLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9sb2dkdW1wLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisKK2h0cmVlLm86ICQodG9wX3NyY2RpcikvZGVidWdmcy9odHJlZS5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCit1bnVzZWQubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3VudXNlZC5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCit6YXAubzogJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzL3phcC5jCisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCitlMmZyZWVmcmFnLm86ICQodG9wX3NyY2RpcikvbWlzYy9lMmZyZWVmcmFnLmMKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1EREVCVUdGUyAtSSQodG9wX3NyY2RpcikvZGVidWdmcyAtYyAkPCAtbyAkQAorCitmaWxlZnJhZy5vOiAkKHRvcF9zcmNkaXIpL2RlYnVnZnMvZmlsZWZyYWcuYworCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwordHN0X2JpdG1hcHNfY21kLmM6IHRzdF9iaXRtYXBzX2NtZC5jdAorCSQoRSkgIglNS19DTURTICRAIgorCSQoUSkgRElSPSQoc3JjZGlyKSAkKE1LX0NNRFMpICQoc3JjZGlyKS90c3RfYml0bWFwc19jbWQuY3QKKwordHN0X2JpdG1hcHM6IHRzdF9iaXRtYXBzLm8gdHN0X2JpdG1hcHNfY21kLm8gJChTVEFUSUNfTElCRVhUMkZTKSBcCisJCSQoREVQU1RBVElDX0xJQlNTKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vICRAIHRzdF9iaXRtYXBzLm8gdHN0X2JpdG1hcHNfY21kLm8gJChBTExfQ0ZMQUdTKSBcCisJCSQoU1RBVElDX0xJQkVYVDJGUykgJChTVEFUSUNfTElCU1MpICQoU1RBVElDX0xJQkNPTV9FUlIpCisKK3RzdF9leHRlbnRzOiAkKHNyY2RpcikvZXh0ZW50LmMgJChERUJVR19PQkpTKSAkKERFUFNUQVRJQ19MSUJTUykgXAorCSQoU1RBVElDX0xJQkUyUCkgJChERVBMSUJVVUlEKSAkKERFUExJQkJMS0lEKSAkKERFUFNUQVRJQ19MSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9leHRlbnRzICQoc3JjZGlyKS9leHRlbnQuYyBcCisJCSQoQUxMX0NGTEFHUykgLURERUJVRyAkKERFQlVHX09CSlMpICQoU1RBVElDX0xJQlNTKSBcCisJCSQoU1RBVElDX0xJQkUyUCkgJChTVEFUSUNfTElCRVhUMkZTKSAkKExJQkJMS0lEKSAkKExJQlVVSUQpIFwKKwkJJChTVEFUSUNfTElCQ09NX0VSUikgLUkgJCh0b3Bfc3JjZGlyKS9kZWJ1Z2ZzCisKK3RzdF9pbmxpbmU6ICQoc3JjZGlyKS9pbmxpbmUuYyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgLW8gdHN0X2lubGluZSAkKHNyY2RpcikvaW5saW5lLmMgJChBTExfQ0ZMQUdTKSAtRERFQlVHIFwKKwkJJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJDT01fRVJSKQorCit0c3RfY3N1bTogY3N1bS5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikgJChTVEFUSUNfTElCRTJQKSBcCisJCSQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIHRzdF9jc3VtICQoc3JjZGlyKS9jc3VtLmMgLURERUJVRyBcCisJCSQoQUxMX0NGTEFHUykgJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJDT01fRVJSKSBcCisJCSQoU1RBVElDX0xJQkUyUCkKKwordHN0X2NyYzMyYzogJChzcmNkaXIpL2NyYzMyYy5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBTVEFUSUNfTElCQ09NX0VSUikKKwkkKFEpICQoQ0MpICQoQlVJTERfTERGTEFHUykgJChBTExfQ0ZMQUdTKSAtbyB0c3RfY3JjMzJjICQoc3JjZGlyKS9jcmMzMmMuYyBcCisJCS1EVU5JVFRFU1QgJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJDT01fRVJSKQorCitta2pvdXJuYWw6IG1ram91cm5hbC5jICQoU1RBVElDX0xJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vIG1ram91cm5hbCAkKHNyY2RpcikvbWtqb3VybmFsLmMgLURERUJVRyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoTElCQ09NX0VSUikgJChBTExfQ0ZMQUdTKQorCitjaGVjazo6IHRzdF9iaXRvcHMgdHN0X2JhZGJsb2NrcyB0c3RfaXNjYW4gdHN0X3R5cGVzIHRzdF9pY291bnQgXAorICAgIHRzdF9zdXBlcl9zaXplIHRzdF90eXBlcyB0c3RfaW5vZGVfc2l6ZSB0c3RfY3N1bSB0c3RfY3JjMzJjIHRzdF9iaXRtYXBzIFwKKyAgICB0c3RfaW5saW5lCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfYml0b3BzCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfYmFkYmxvY2tzCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfaXNjYW4KKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3RzdF90eXBlcworCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIC4vdHN0X2ljb3VudAorCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIC4vdHN0X3N1cGVyX3NpemUKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3RzdF9pbm9kZV9zaXplCisJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfY3N1bQorCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIC4vdHN0X2lubGluZQorCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIC4vdHN0X2NyYzMyYworCUxEX0xJQlJBUllfUEFUSD0kKExJQikgRFlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIFwKKwkJLi90c3RfYml0bWFwcyAtZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfY21kcyA+IHRzdF9iaXRtYXBzX291dAorCWRpZmYgJChzcmNkaXIpL3RzdF9iaXRtYXBzX2V4cCB0c3RfYml0bWFwc19vdXQKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSBcCisJCS4vdHN0X2JpdG1hcHMgLXQgMiAtZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfY21kcyA+IHRzdF9iaXRtYXBzX291dAorCWRpZmYgJChzcmNkaXIpL3RzdF9iaXRtYXBzX2V4cCB0c3RfYml0bWFwc19vdXQKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSBcCisJCS4vdHN0X2JpdG1hcHMgLXQgMyAtZiAkKHNyY2RpcikvdHN0X2JpdG1hcHNfY21kcyA+IHRzdF9iaXRtYXBzX291dAorCWRpZmYgJChzcmNkaXIpL3RzdF9iaXRtYXBzX2V4cCB0c3RfYml0bWFwc19vdXQKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSBcCisJCS4vdHN0X2JpdG1hcHMgLWwgLWYgJChzcmNkaXIpL3RzdF9iaXRtYXBzX2NtZHMgPiB0c3RfYml0bWFwc19vdXQKKwlkaWZmICQoc3JjZGlyKS90c3RfYml0bWFwc19leHAgdHN0X2JpdG1hcHNfb3V0CisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS9leHQyZnMiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgXAorCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9leHQyZnMgJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcKKworaW5zdGFsbDo6IGFsbCAkKEhGSUxFUykgJChIRklMRVNfSU4pIGluc3RhbGxkaXJzIGV4dDJmcy5wYworCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL2xpYmV4dDJmcy5hIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGxpYmV4dDJmcy5hICQoREVTVERJUikkKGxpYmRpcikvbGliZXh0MmZzLmEKKwktJChRKSAkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJleHQyZnMuYQorCSQoUSkgJChDSE1PRCkgJChMSUJNT0RFKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmV4dDJmcy5hCisJJChRKSBmb3IgaSBpbiAkKEhGSUxFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2V4dDJmcy8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2V4dDJmcy8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKEhGSUxFU19JTik7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKGluY2x1ZGVkaXIpL2V4dDJmcy8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoaW5jbHVkZWRpcikvZXh0MmZzLyQkaTsgXAorCWRvbmUKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9wa2djb25maWcvZXh0MmZzLnBjIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGV4dDJmcy5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy9leHQyZnMucGMKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmV4dDJmcy5hIFwKKwkJJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvZXh0MmZzLnBjCisJJChSTSkgLXJmICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2V4dDJmcyAKKworY2xlYW46OgorCSQoUk0pIC1mIFwjKiAqLnMgKi5vICouYSAqfiAqLmJhayBjb3JlIHByb2ZpbGVkLyogY2hlY2tlci8qIFwKKwkJdHN0X2JhZGJsb2NrcyB0c3RfaXNjYW4gZXh0Ml9lcnIuZXQgZXh0Ml9lcnIuYyBleHQyX2Vyci5oIFwKKwkJdHN0X2J5dGVzd2FwIHRzdF9pc21vdW50ZWQgdHN0X2dldHNpemUgdHN0X3NlY3RnZXRzaXplIFwKKwkJdHN0X2JpdG9wcyB0c3RfdHlwZXMgdHN0X2ljb3VudCB0c3Rfc3VwZXJfc2l6ZSB0c3RfY3N1bSBcCisJCXRzdF9iaXRtYXBzIHRzdF9iaXRtYXBzX291dCB0c3RfZXh0ZW50cyB0c3RfaW5saW5lIFwKKwkJdHN0X2lubGluZV9kYXRhIHRzdF9pbm9kZV9zaXplIHRzdF9iaXRtYXBzX2NtZC5jIFwKKwkJZXh0Ml90ZGJ0b29sIG1ram91cm5hbCBkZWJ1Z19jbWRzLmMgZXh0ZW50X2NtZHMuYyBcCisJCS4uL2xpYmV4dDJmcy5hIC4uL2xpYmV4dDJmc19wLmEgLi4vbGliZXh0MmZzX2Noay5hIFwKKwkJY3JjMzJjX3RhYmxlLmggZ2VuX2NyYzMyY3RhYmxlIHRzdF9jcmMzMmMKKworbW9zdGx5Y2xlYW46OiBjbGVhbgorZGlzdGNsZWFuOjogY2xlYW4KKwkkKFJNKSAtZiAuZGVwZW5kIGV4dDJfZXJyLmMgZXh0Ml9lcnIuaCBNYWtlZmlsZSBleHQyZnMucGMgXAorCQkkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisjCisjIEhhY2sgdG8gcGFyYWxsZWwgbWFrZXMgcmVjb2duaXplIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuCisjCiskKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oOiBleHQyX2Vyci5oCisKKyQoT0JKUyk6IHN1YmRpcnMKKworZ2VuX2NyYzMyY3RhYmxlOiAkKHNyY2RpcikvZ2VuX2NyYzMyY3RhYmxlLmMKKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKEJVSUxEX0NDKSAkKEJVSUxEX0NGTEFHUykgJChCVUlMRF9MREZMQUdTKSAtbyBnZW5fY3JjMzJjdGFibGUgXAorCQkkKHNyY2RpcikvZ2VuX2NyYzMyY3RhYmxlLmMKKworY3JjMzJjX3RhYmxlLmg6IGdlbl9jcmMzMmN0YWJsZQorCSQoRSkgIglHRU4zMkNUQUJMRSAkQCIKKwkkKFEpIC4vZ2VuX2NyYzMyY3RhYmxlID4gY3JjMzJjX3RhYmxlLmgKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitleHQyX2Vyci5vOiBleHQyX2Vyci5jCithbGxvYy5vOiAkKHNyY2RpcikvYWxsb2MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY19zYi5vOiAkKHNyY2RpcikvYWxsb2Nfc2IuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY19zdGF0cy5vOiAkKHNyY2RpcikvYWxsb2Nfc3RhdHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCithbGxvY190YWJsZXMubzogJChzcmNkaXIpL2FsbG9jX3RhYmxlcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2V4dDJmc1AuaAorYmFkYmxvY2tzLm86ICQoc3JjZGlyKS9iYWRibG9ja3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitiYl9jb21wYXQubzogJChzcmNkaXIpL2JiX2NvbXBhdC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2JiX2lub2RlLm86ICQoc3JjZGlyKS9iYl9pbm9kZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2JpdG1hcHMubzogJChzcmNkaXIpL2JpdG1hcHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9ibWFwNjQuaAorYml0b3BzLm86ICQoc3JjZGlyKS9iaXRvcHMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitibGttYXA2NF9iYS5vOiAkKHNyY2RpcikvYmxrbWFwNjRfYmEuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9ibWFwNjQuaAorYmxrbWFwNjRfcmIubzogJChzcmNkaXIpL2Jsa21hcDY0X3JiLmMgJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9ibWFwNjQuaCAkKHNyY2RpcikvcmJ0cmVlLmgKK2Jsb2NrLm86ICQoc3JjZGlyKS9ibG9jay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2JtYXAubzogJChzcmNkaXIpL2JtYXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitjaGVja19kZXNjLm86ICQoc3JjZGlyKS9jaGVja19kZXNjLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorY2xvc2Vmcy5vOiAkKHNyY2RpcikvY2xvc2Vmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2NyYzE2Lm86ICQoc3JjZGlyKS9jcmMxNi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQoc3JjZGlyKS9jcmMxNi5oCitjcmMzMmMubzogJChzcmNkaXIpL2NyYzMyYy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvY3JjMzJjX2RlZnMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oIGNyYzMyY190YWJsZS5oCitnZW5fY3JjMzJjdGFibGUubzogJChzcmNkaXIpL2dlbl9jcmMzMmN0YWJsZS5jICQoc3JjZGlyKS9jcmMzMmNfZGVmcy5oCitjc3VtLm86ICQoc3JjZGlyKS9jc3VtLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvY3JjMTYuaAorZGJsaXN0Lm86ICQoc3JjZGlyKS9kYmxpc3QuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitkYmxpc3RfZGlyLm86ICQoc3JjZGlyKS9kYmxpc3RfZGlyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzUC5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaAorZGlyYmxvY2subzogJChzcmNkaXIpL2RpcmJsb2NrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZGlyaGFzaC5vOiAkKHNyY2RpcikvZGlyaGFzaC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2Rpcl9pdGVyYXRlLm86ICQoc3JjZGlyKS9kaXJfaXRlcmF0ZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2R1cGZzLm86ICQoc3JjZGlyKS9kdXBmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2V4cGFuZGRpci5vOiAkKHNyY2RpcikvZXhwYW5kZGlyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZXh0X2F0dHIubzogJChzcmNkaXIpL2V4dF9hdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvZXh0MmZzLmggJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaAorZXh0ZW50Lm86ICQoc3JjZGlyKS9leHRlbnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9lMmltYWdlLmgKK2ZpbGVpby5vOiAkKHNyY2RpcikvZmlsZWlvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorZmluZGRldi5vOiAkKHNyY2RpcikvZmluZGRldi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2V4dDJmc1AuaAorZmx1c2hiLm86ICQoc3JjZGlyKS9mbHVzaGIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitmcmVlZnMubzogJChzcmNkaXIpL2ZyZWVmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmgKK2dlbl9iaXRtYXAubzogJChzcmNkaXIpL2dlbl9iaXRtYXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCitnZW5fYml0bWFwNjQubzogJChzcmNkaXIpL2dlbl9iaXRtYXA2NC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmc1AuaCBcCisgJChzcmNkaXIpL2V4dDJmcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2JtYXA2NC5oCitnZXRfcGF0aG5hbWUubzogJChzcmNkaXIpL2dldF9wYXRobmFtZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2dldHNpemUubzogJChzcmNkaXIpL2dldHNpemUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitnZXRzZWN0c2l6ZS5vOiAkKHNyY2RpcikvZ2V0c2VjdHNpemUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpX2Jsb2NrLm86ICQoc3JjZGlyKS9pX2Jsb2NrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAoraWNvdW50Lm86ICQoc3JjZGlyKS9pY291bnQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS90ZGIuaAoraW5kX2Jsb2NrLm86ICQoc3JjZGlyKS9pbmRfYmxvY2suYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpbml0aWFsaXplLm86ICQoc3JjZGlyKS9pbml0aWFsaXplLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAoraW5saW5lLm86ICQoc3JjZGlyKS9pbmxpbmUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitpbm9kZS5vOiAkKHNyY2RpcikvaW5vZGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnNQLmggXAorICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9lMmltYWdlLmgKK2lub2RlX2lvLm86ICQoc3JjZGlyKS9pbm9kZV9pby5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2ltYWdlci5vOiAkKHNyY2RpcikvaW1hZ2VyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAoraW9fbWFuYWdlci5vOiAkKHNyY2RpcikvaW9fbWFuYWdlci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2lzbW91bnRlZC5vOiAkKHNyY2RpcikvaXNtb3VudGVkLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorbGluay5vOiAkKHNyY2RpcikvbGluay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK2xsc2Vlay5vOiAkKHNyY2RpcikvbGxzZWVrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaAorbG9va3VwLm86ICQoc3JjZGlyKS9sb29rdXAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitta2Rpci5vOiAkKHNyY2RpcikvbWtkaXIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitta2pvdXJuYWwubzogJChzcmNkaXIpL21ram91cm5hbC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQyZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHNyY2RpcikvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggXAorICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvamZzX3VzZXIuaCAkKHNyY2Rpcikva2VybmVsLWpiZC5oIFwKKyAkKHNyY2RpcikvamZzX2NvbXBhdC5oICQoc3JjZGlyKS9rZXJuZWwtbGlzdC5oCittbXAubzogJChzcmNkaXIpL21tcC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQoc3JjZGlyKS9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCBcCisgJChzcmNkaXIpL2JpdG9wcy5oCituYW1laS5vOiAkKHNyY2RpcikvbmFtZWkuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oICQoc3JjZGlyKS9leHQyZnNQLmgKK25hdGl2ZS5vOiAkKHNyY2RpcikvbmF0aXZlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorbmV3ZGlyLm86ICQoc3JjZGlyKS9uZXdkaXIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCitvcGVuZnMubzogJChzcmNkaXIpL29wZW5mcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2UyaW1hZ2UuaAorcHJvZ3Jlc3MubzogJChzcmNkaXIpL3Byb2dyZXNzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL2V4dDJmc1AuaAorcHVuY2gubzogJChzcmNkaXIpL3B1bmNoLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAorcWNvdzIubzogJChzcmNkaXIpL3Fjb3cyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJChzcmNkaXIpL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oIFwKKyAkKHNyY2RpcikvYml0b3BzLmggJChzcmNkaXIpL3Fjb3cyLmgKK3JlYWRfYmIubzogJChzcmNkaXIpL3JlYWRfYmIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCityZWFkX2JiX2ZpbGUubzogJChzcmNkaXIpL3JlYWRfYmJfZmlsZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3Jlc19nZHQubzogJChzcmNkaXIpL3Jlc19nZHQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCityd19iaXRtYXBzLm86ICQoc3JjZGlyKS9yd19iaXRtYXBzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaCAkKHNyY2RpcikvZTJpbWFnZS5oCitzd2FwZnMubzogJChzcmNkaXIpL3N3YXBmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3N5bWxpbmsubzogJChzcmNkaXIpL3N5bWxpbmsuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit0ZGIubzogJChzcmNkaXIpL3RkYi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdGRiLmgKK3Rlc3RfaW8ubzogJChzcmNkaXIpL3Rlc3RfaW8uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit0c3RfYmFkYmxvY2tzLm86ICQoc3JjZGlyKS90c3RfYmFkYmxvY2tzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordHN0X2JpdG9wcy5vOiAkKHNyY2RpcikvdHN0X2JpdG9wcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3RzdF9ieXRlc3dhcC5vOiAkKHNyY2RpcikvdHN0X2J5dGVzd2FwLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordHN0X2dldHNpemUubzogJChzcmNkaXIpL3RzdF9nZXRzaXplLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordHN0X2lzY2FuLm86ICQoc3JjZGlyKS90c3RfaXNjYW4uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit1bmRvX2lvLm86ICQoc3JjZGlyKS91bmRvX2lvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS90ZGIuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3VuaXhfaW8ubzogJChzcmNkaXIpL3VuaXhfaW8uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCit1bmxpbmsubzogJChzcmNkaXIpL3VubGluay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmgKK3ZhbGlkX2Jsay5vOiAkKHNyY2RpcikvdmFsaWRfYmxrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHNyY2RpcikvZXh0MmZzLmggXAorICQoc3JjZGlyKS9leHQyX2ZzLmggJChzcmNkaXIpL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9leHRfYXR0ci5oICQoc3JjZGlyKS9iaXRvcHMuaAordmVyc2lvbi5vOiAkKHNyY2RpcikvdmVyc2lvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJChzcmNkaXIpL2V4dDJmcy5oIFwKKyAkKHNyY2RpcikvZXh0Ml9mcy5oICQoc3JjZGlyKS9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJChzcmNkaXIpL2V4dDJfZXh0X2F0dHIuaCAkKHNyY2RpcikvYml0b3BzLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmgKK3dyaXRlX2JiX2ZpbGUubzogJChzcmNkaXIpL3dyaXRlX2JiX2ZpbGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQoc3JjZGlyKS9leHQyZnMuaCBcCisgJChzcmNkaXIpL2V4dDJfZnMuaCAkKHNyY2RpcikvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHNyY2RpcikvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQoc3JjZGlyKS9leHQyX2V4dF9hdHRyLmggJChzcmNkaXIpL2JpdG9wcy5oCityYnRyZWUubzogJChzcmNkaXIpL3JidHJlZS5jICQoc3JjZGlyKS9yYnRyZWUuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvTWFrZWZpbGUucHEgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9NYWtlZmlsZS5wcQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjdiNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvTWFrZWZpbGUucHEKQEAgLTAsMCArMSw0OSBAQAorVE9QU1JDPS4uXC4uCitMSUJOQU1FPUVYVDIuTElCCitPQkpGSUxFPUVYVDIuTFNUCisKK09CSlM9IAlhbGxvYy5vYmogXAorCWFsbG9jX3RhYmxlcy5vYmogXAorCWJhZGJsb2Nrcy5vYmogXAorCWJiX2NvbXBhdC5vYmogXAorCWJiX2lub2RlLm9iaiBcCisJYml0bWFwcy5vYmogXAorCWJpdG9wcy5vYmogXAorCWJsb2NrLm9iaiBcCisJYm1hcC5vYmogXAorCWJtb3ZlLm9iaiBcCisJY2hlY2tfZGVzYy5vYmogXAorCWNsb3NlZnMub2JqIFwKKwljbXBfYml0bWFwcy5vYmogXAorCWRibGlzdC5vYmogXAorCWRibGlzdF9kaXIub2JqIFwKKwlkaXJibG9jay5vYmogXAorCWRpcl9pdGVyYXRlLm9iaiBcCisJZHVwZnMub2JqIFwKKwlleHBhbmRkaXIub2JqIFwKKwlmaWxlaW8ub2JqIFwKKwlmcmVlZnMub2JqIFwKKwlnZXRfcGF0aG5hbWUub2JqIFwKKwlpY291bnQub2JqIFwKKwlpbml0aWFsaXplLm9iaiBcCisJaW5saW5lLm9iaiBcCisJaW5vZGUub2JqIFwKKwlpc21vdW50ZWQub2JqIFwKKwlsaW5rLm9iaiBcCisJbG9va3VwLm9iaiBcCisJbWtkaXIub2JqIFwKKwluYW1laS5vYmogXAorCW5hdGl2ZS5vYmogXAorCW5ld2Rpci5vYmogXAorCW9wZW5mcy5vYmogXAorCXJlYWRfYmIub2JqIFwKKwlyZWFkX2JiX2ZpbGUub2JqIFwKKwlyc19iaXRtYXAub2JqIFwKKwlyd19iaXRtYXBzLm9iaiBcCisJc3dhcGZzLm9iaiBcCisJdW5saW5rLm9iaiBcCisJdmFsaWRfYmxrLm9iaiBcCisJdmVyc2lvbi5vYmoKKworIWluY2x1ZGUgJChUT1BTUkMpXHBvd2VycXVlc3RcTUNPTkZJRworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9hbGxvYy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQzZTVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYWxsb2MuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIGFsbG9jLmMgLS0tIGFsbG9jYXRlIG5ldyBpbm9kZXMsIGJsb2NrcyBmb3IgZXh0MmZzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogQ2hlY2sgZm9yIHVuaW5pdCBibG9jayBiaXRtYXBzIGFuZCBkZWFsIHdpdGggdGhlbSBhcHByb3ByaWF0ZWx5CisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2NrX3VuaW5pdChleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtYXAsCisJCQkgICAgICAgZGdycF90IGdyb3VwKQoreworCWJsa190CQlpOworCWJsazY0X3QJCWJsaywgc3VwZXJfYmxrLCBvbGRfZGVzY19ibGssIG5ld19kZXNjX2JsazsKKwlpbnQJCW9sZF9kZXNjX2Jsb2NrczsKKworCWlmICghKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB8fAorCSAgICAhKGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpKSkKKwkJcmV0dXJuOworCisJYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCisJZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMihmcywgZ3JvdXAsICZzdXBlcl9ibGssCisJCQkJICAmb2xkX2Rlc2NfYmxrLCAmbmV3X2Rlc2NfYmxrLCAwKTsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrcyArIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJZm9yIChpPTA7IGkgPCBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsgaSsrLCBibGsrKykKKwkJZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcDIobWFwLCBibGspOworCisJYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCWZvciAoaT0wOyBpIDwgZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7IGkrKywgYmxrKyspIHsKKwkJaWYgKChibGsgPT0gc3VwZXJfYmxrKSB8fAorCQkgICAgKG9sZF9kZXNjX2JsayAmJiBvbGRfZGVzY19ibG9ja3MgJiYKKwkJICAgICAoYmxrID49IG9sZF9kZXNjX2JsaykgJiYKKwkJICAgICAoYmxrIDwgb2xkX2Rlc2NfYmxrICsgb2xkX2Rlc2NfYmxvY2tzKSkgfHwKKwkJICAgIChuZXdfZGVzY19ibGsgJiYgKGJsayA9PSBuZXdfZGVzY19ibGspKSB8fAorCQkgICAgKGJsayA9PSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB8fAorCQkgICAgKGJsayA9PSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB8fAorCQkgICAgKGJsayA+PSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBncm91cCkgJiYKKwkJICAgICAoYmxrIDwgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgZ3JvdXApCisJCSAgICAgICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApKSkKKwkJCWV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihtYXAsIGJsayk7CisJfQorCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdW5pbml0IGlub2RlIGJpdG1hcHMgYW5kIGRlYWwgd2l0aCB0aGVtIGFwcHJvcHJpYXRlbHkKKyAqLworc3RhdGljIHZvaWQgY2hlY2tfaW5vZGVfdW5pbml0KGV4dDJfZmlsc3lzIGZzLCBleHQyZnNfaW5vZGVfYml0bWFwIG1hcCwKKwkJCSAgZGdycF90IGdyb3VwKQoreworCWV4dDJfaW5vX3QJaSwgaW5vOworCisJaWYgKCEoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHx8CisJICAgICEoZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkpKQorCQlyZXR1cm47CisKKwlpbm8gPSAoZ3JvdXAgKiBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCkgKyAxOworCWZvciAoaT0wOyBpIDwgZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXA7IGkrKywgaW5vKyspCisJCWV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAyKG1hcCwgaW5vKTsKKworCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJY2hlY2tfYmxvY2tfdW5pbml0KGZzLCBmcy0+YmxvY2tfbWFwLCBncm91cCk7Cit9CisKKy8qCisgKiBSaWdodCBub3csIGp1c3Qgc2VhcmNoIGZvcndhcmQgZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSdzIGJsb2NrCisgKiBncm91cCB0byBmaW5kIHRoZSBuZXh0IGZyZWUgaW5vZGUuCisgKgorICogU2hvdWxkIGhhdmUgYSBzcGVjaWFsIHBvbGljeSBmb3IgZGlyZWN0b3JpZXMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwKKwkJCSAgIGludCBtb2RlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGV4dDJmc19pbm9kZV9iaXRtYXAgbWFwLCBleHQyX2lub190ICpyZXQpCit7CisJZXh0Ml9pbm9fdAlzdGFydF9pbm9kZSA9IDA7CisJZXh0Ml9pbm9fdAlpLCBpbm9faW5fZ3JvdXAsIHVwdG8sIGZpcnN0X3plcm87CisJZXJyY29kZV90CXJldHZhbDsKKwlkZ3JwX3QJCWdyb3VwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbWFwKQorCQltYXAgPSBmcy0+aW5vZGVfbWFwOworCWlmICghbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19JTk9ERV9CSVRNQVA7CisKKwlpZiAoZGlyID4gMCkgeworCQlncm91cCA9IChkaXIgLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCQlzdGFydF9pbm9kZSA9IChncm91cCAqIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSArIDE7CisJfQorCWlmIChzdGFydF9pbm9kZSA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkKKwkJc3RhcnRfaW5vZGUgPSBFWFQyX0ZJUlNUX0lOT0RFKGZzLT5zdXBlcik7CisJaWYgKHN0YXJ0X2lub2RlID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkKKwkJcmV0dXJuIEVYVDJfRVRfSU5PREVfQUxMT0NfRkFJTDsKKwlpID0gc3RhcnRfaW5vZGU7CisJZG8geworCQlpbm9faW5fZ3JvdXAgPSAoaSAtIDEpICUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcik7CisJCWdyb3VwID0gKGkgLSAxKSAvIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCisJCWNoZWNrX2lub2RlX3VuaW5pdChmcywgbWFwLCBncm91cCk7CisJCXVwdG8gPSBpICsgKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC0gaW5vX2luX2dyb3VwKTsKKwkJaWYgKGkgPCBzdGFydF9pbm9kZSAmJiB1cHRvID49IHN0YXJ0X2lub2RlKQorCQkJdXB0byA9IHN0YXJ0X2lub2RlIC0gMTsKKwkJaWYgKHVwdG8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQkJdXB0byA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisKKwkJcmV0dmFsID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19pbm9kZV9iaXRtYXAyKG1hcCwgaSwgdXB0bywKKwkJCQkJCQkgICAgICAmZmlyc3RfemVybyk7CisJCWlmIChyZXR2YWwgPT0gMCkgeworCQkJaSA9IGZpcnN0X3plcm87CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0dmFsICE9IEVOT0VOVCkKKwkJCXJldHVybiBFWFQyX0VUX0lOT0RFX0FMTE9DX0ZBSUw7CisJCWkgPSB1cHRvICsgMTsKKwkJaWYgKGkgPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQkJaSA9IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKTsKKwl9IHdoaWxlIChpICE9IHN0YXJ0X2lub2RlKTsKKworCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKG1hcCwgaSkpCisJCXJldHVybiBFWFQyX0VUX0lOT0RFX0FMTE9DX0ZBSUw7CisJKnJldCA9IGk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICogZ29hbC4gIFNob3VsZCBwdXQgaW4gYSBzbWFydGVyIG9uZSBzb21lZGF5Li4uLgorICovCitlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgZ29hbCwKKwkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWFwLCBibGs2NF90ICpyZXQpCit7CisJYmxrNjRfdAlpOworCWludAljX3JhdGlvOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbWFwKQorCQltYXAgPSBmcy0+YmxvY2tfbWFwOworCWlmICghbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisJaWYgKCFnb2FsIHx8IChnb2FsID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpCisJCWdvYWwgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlpID0gZ29hbDsKKwljX3JhdGlvID0gMSA8PCBleHQyZnNfZ2V0X2JpdG1hcF9ncmFudWxhcml0eShtYXApOworCWlmIChjX3JhdGlvID4gMSkKKwkJZ29hbCAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJY2hlY2tfYmxvY2tfdW5pbml0KGZzLCBtYXAsCisJCQkgICAoaSAtIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAvCisJCQkgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSk7CisJZG8geworCQlpZiAoKChpIC0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICUKKwkJICAgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSkgPT0gMCkKKwkJCWNoZWNrX2Jsb2NrX3VuaW5pdChmcywgbWFwLAorCQkJCQkgICAoaSAtIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAvCisJCQkJCSAgIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpKTsKKworCQlpZiAoIWV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwMihtYXAsIGkpKSB7CisJCQkqcmV0ID0gaTsKKwkJCXJldHVybiAwOworCQl9CisJCWkgPSAoaSArIGNfcmF0aW8pICYgfihjX3JhdGlvIC0gMSk7CisJCWlmIChpID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCWkgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwl9IHdoaWxlIChpICE9IGdvYWwpOworCXJldHVybiBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBnb2FsLAorCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtYXAsIGJsa190ICpyZXQpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90IHZhbDsKKwlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgZ29hbCwgbWFwLCAmdmFsKTsKKwlpZiAoIXJldHZhbCkKKwkJKnJldCA9IChibGtfdCkgdmFsOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHplcm9zIG91dCB0aGUgYWxsb2NhdGVkIGJsb2NrLCBhbmQgdXBkYXRlcyBhbGwgb2YgdGhlCisgKiBhcHByb3ByaWF0ZSBmaWxlc3lzdGVtIHJlY29yZHMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWxsb2NfYmxvY2syKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGdvYWwsCisJCQkgICAgIGNoYXIgKmJsb2NrX2J1ZiwgYmxrNjRfdCAqcmV0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJYmxvY2s7CisJY2hhcgkJKmJ1ZiA9IDA7CisKKwlpZiAoIWJsb2NrX2J1ZikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWJsb2NrX2J1ZiA9IGJ1ZjsKKwl9CisJbWVtc2V0KGJsb2NrX2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisKKwlpZiAoZnMtPmdldF9hbGxvY19ibG9jaykgeworCQlyZXR2YWwgPSAoZnMtPmdldF9hbGxvY19ibG9jaykoZnMsIGdvYWwsICZibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGZhaWw7CisJfSBlbHNlIHsKKwkJaWYgKCFmcy0+YmxvY2tfbWFwKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZnMpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGZhaWw7CisJCX0KKworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgZ29hbCwgMCwgJmJsb2NrKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxvY2ssIDEsIGJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsOworCisJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxvY2ssICsxKTsKKwkqcmV0ID0gYmxvY2s7CisKK2ZhaWw6CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYWxsb2NfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGdvYWwsCisJCQkgICAgIGNoYXIgKmJsb2NrX2J1ZiwgYmxrX3QgKnJldCkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWJsazY0X3QJdmFsOworCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jazIoZnMsIGdvYWwsIGJsb2NrX2J1ZiwgJnZhbCk7CisJaWYgKCFyZXR2YWwpCisJCSpyZXQgPSAoYmxrX3QpIHZhbDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3Qgc3RhcnQsIGJsazY0X3QgZmluaXNoLAorCQkJCSBpbnQgbnVtLCBleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwgYmxrNjRfdCAqcmV0KQoreworCWJsazY0X3QJYiA9IHN0YXJ0OworCWludAljX3JhdGlvOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghbWFwKQorCQltYXAgPSBmcy0+YmxvY2tfbWFwOworCWlmICghbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisJaWYgKCFiKQorCQliID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJaWYgKCFmaW5pc2gpCisJCWZpbmlzaCA9IHN0YXJ0OworCWlmICghbnVtKQorCQludW0gPSAxOworCWNfcmF0aW8gPSAxIDw8IGV4dDJmc19nZXRfYml0bWFwX2dyYW51bGFyaXR5KG1hcCk7CisJYiAmPSB+KGNfcmF0aW8gLSAxKTsKKwlmaW5pc2ggJj0gfihjX3JhdGlvIC0xKTsKKwlkbyB7CisJCWlmIChiK251bS0xID4gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQkJYiA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCQlpZiAoZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKG1hcCwgYiwgbnVtKSkgeworCQkJKnJldCA9IGI7CisJCQlyZXR1cm4gMDsKKwkJfQorCQliICs9IGNfcmF0aW87CisJfSB3aGlsZSAoYiAhPSBmaW5pc2gpOworCXJldHVybiBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBzdGFydCwgYmxrX3QgZmluaXNoLAorCQkJCSBpbnQgbnVtLCBleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwgYmxrX3QgKnJldCkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWJsazY0X3QgdmFsOworCXJldHZhbCA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydCwgZmluaXNoLCBudW0sIG1hcCwgJnZhbCk7CisJaWYoIXJldHZhbCkKKwkJKnJldCA9IChibGtfdCkgdmFsOworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgIGVycmNvZGVfdCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgICAgIGJsazY0X3QgZ29hbCwKKwkJCQkJCSAgICAgICBibGs2NF90ICpyZXQpLAorCQkJCSAgICAgZXJyY29kZV90ICgqKm9sZCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgICAgICAgYmxrNjRfdCBnb2FsLAorCQkJCQkJICAgICAgIGJsazY0X3QgKnJldCkpCit7CisJaWYgKCFmcyB8fCBmcy0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKQorCQlyZXR1cm47CisKKwlpZiAob2xkKQorCQkqb2xkID0gZnMtPmdldF9hbGxvY19ibG9jazsKKworCWZzLT5nZXRfYWxsb2NfYmxvY2sgPSBmdW5jOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYWxsb2Nfc2IuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2FsbG9jX3NiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlZjJjZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2FsbG9jX3NiLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIGFsbG9jX3NiLmMgLS0tIEFsbG9jYXRlIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBmb3IgYQorICogbmV3bHkgaW5pdGlhbGl6ZWQgZmlsZXN5c3RlbS4gIFVzZWQgYnkgbWtlMmZzIHdoZW4gaW5pdGlhbGl6aW5nIGEgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMjAwMyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXNlcnZlcyB0aGUgc3VwZXJibG9jayBhbmQgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKKyAqIGZvciBhIGdpdmVuIGJsb2NrIGdyb3VwLiAgSXQgY3VycmVudGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlCisgKiBibG9ja3MgYXNzdW1pbmcgdGhhdCBpbm9kZSB0YWJsZSBhbmQgYWxsb2NhdGlvbiBiaXRtYXBzIHdpbGwgYmUgaW4KKyAqIHRoZSBncm91cC4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBjYXNlIHdoZW4gdGhlIGZsZXhfYmcKKyAqIGZlYXR1cmUgaXMgZW5hYmxlZCwgc28gY2FsbGVycyBzaG91bGQgdGFrZSBjYXJlISAgSXQgd2FzIG9ubHkKKyAqIHJlYWxseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IG1rZTJmcywgYW5kIGV2ZW4gdGhlcmUgaXQncyBub3QgdGhhdAorICogdXNlZnVsLiAgSW4gdGhlIGZ1dHVyZSwgd2hlbiB3ZSByZWRvIHRoaXMgZnVuY3Rpb24gZm9yIDY0LWJpdCBibG9jaworICogbnVtYmVycywgd2Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZQorICogc3VwZXIgYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzIGluc3RlYWQuCisgKgorICogU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYygpCisgKi8KK2ludCBleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkKGV4dDJfZmlsc3lzIGZzLAorCQkJCSBkZ3JwX3QgZ3JvdXAsCisJCQkJIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCkKK3sKKwlibGs2NF90CXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisJYmxrX3QJdXNlZF9ibGtzOworCWludAlvbGRfZGVzY19ibG9ja3MsIG51bV9ibG9ja3M7CisKKwlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncm91cCwgJnN1cGVyX2JsaywKKwkJCQkgICZvbGRfZGVzY19ibGssICZuZXdfZGVzY19ibGssICZ1c2VkX2Jsa3MpOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0KKwkJCWZzLT5kZXNjX2Jsb2NrcyArIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJaWYgKHN1cGVyX2JsayB8fCAoZ3JvdXAgPT0gMCkpCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgc3VwZXJfYmxrKTsKKwlpZiAoKGdyb3VwID09IDApICYmIChmcy0+YmxvY2tzaXplID09IDEwMjQpICYmCisJICAgIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSA+IDEpCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgMCk7CisKKwlpZiAob2xkX2Rlc2NfYmxrKSB7CisJCWlmIChmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAmJiBmcy0+YmxvY2tfbWFwID09IGJtYXApCisJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyb3VwLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCW51bV9ibG9ja3MgPSBvbGRfZGVzY19ibG9ja3M7CisJCWlmIChvbGRfZGVzY19ibGsgKyBudW1fYmxvY2tzID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCW51bV9ibG9ja3MgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJCW9sZF9kZXNjX2JsazsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihibWFwLCBvbGRfZGVzY19ibGssIG51bV9ibG9ja3MpOworCX0KKwlpZiAobmV3X2Rlc2NfYmxrKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIG5ld19kZXNjX2Jsayk7CisKKwludW1fYmxvY2tzID0gZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChmcywgZ3JvdXApOworCW51bV9ibG9ja3MgLT0gMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsgdXNlZF9ibGtzOworCisJcmV0dXJuIG51bV9ibG9ja3MgIDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2FsbG9jX3N0YXRzLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9hbGxvY19zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjY5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9hbGxvY19zdGF0cy5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogYWxsb2Nfc3RhdHMuYyAtLS0gVXBkYXRlIGFsbG9jYXRpb24gc3RhdGlzdGljcyBmb3IgZXh0MmZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKwordm9pZCBleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICAgICBpbnQgaW51c2UsIGludCBpc2RpcikKK3sKKwlpbnQJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfaW5vKGZzLCBpbm8pOworCisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCWlmIChpbm8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KSB7CisJCWNvbV9lcnIoImV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIiLCAwLAorCQkJIklsbGVnYWwgaW5vZGUgbnVtYmVyOiAlbHUiLCAodW5zaWduZWQgbG9uZykgaW5vKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmIChpbnVzZSA+IDApCisJCWV4dDJmc19tYXJrX2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKTsKKwllbHNlCisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihmcy0+aW5vZGVfbWFwLCBpbm8pOworCWV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZnMsIGdyb3VwLCBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGdyb3VwKSAtIGludXNlKTsKKwlpZiAoaXNkaXIpCisJCWV4dDJmc19iZ191c2VkX2RpcnNfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgZ3JvdXApICsgaW51c2UpOworCisJLyogV2UgZG9uJ3Qgc3RyaWN0bHkgbmVlZCB0byBiZSBjbGVhcmluZyB0aGUgdW5pbml0IGZsYWcgaWYgaW51c2UgPCAwCisJICogKGkuZS4gZnJlZWluZyBpbm9kZXMpIGJ1dCBpdCBhbHNvIG1lYW5zIHNvbWV0aGluZyBpcyBiYWQuICovCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB7CisJCWV4dDJfaW5vX3QgZmlyc3RfdW51c2VkX2lub2RlID0JZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgLQorCQkJZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGdyb3VwKSArCisJCQlncm91cCAqIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICsgMTsKKworCQlpZiAoaW5vID49IGZpcnN0X3VudXNlZF9pbm9kZSkKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgZ3JvdXAsIGdyb3VwICogZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgKyBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAtIGlubyk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJfQorCisJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50IC09IGludXNlOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7Cit9CisKK3ZvaWQgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywgaW50IGludXNlKQoreworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgaW51c2UsIDApOworfQorCit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpCit7CisJaW50CWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2JsazIoZnMsIGJsayk7CisKKyNpZm5kZWYgT01JVF9DT01fRVJSCisJaWYgKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHsKKwkJY29tX2VycigiZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzIiwgMCwKKwkJCSJJbGxlZ2FsIGJsb2NrIG51bWJlcjogJWx1IiwgKHVuc2lnbmVkIGxvbmcpIGJsayk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoaW51c2UgPiAwKQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGJsayk7CisJZWxzZQorCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKTsKKwlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncm91cCkgLSBpbnVzZSk7CisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfYWRkKGZzLT5zdXBlciwKKwkJCQkgICAgIC1pbnVzZSAqIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSk7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KGZzKTsKKwlpZiAoZnMtPmJsb2NrX2FsbG9jX3N0YXRzKQorCQkoZnMtPmJsb2NrX2FsbG9jX3N0YXRzKShmcywgKGJsazY0X3QpIGJsaywgaW51c2UpOworfQorCit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0cyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCBpbnQgaW51c2UpCit7CisJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCBpbnVzZSk7Cit9CisKK3ZvaWQgZXh0MmZzX3NldF9ibG9ja19hbGxvY19zdGF0c19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgdm9pZCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJCWJsazY0X3QgYmxrLAorCQkJCQkJCWludCBpbnVzZSksCisJCQkJCSAgIHZvaWQgKCoqb2xkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQlibGs2NF90IGJsaywKKwkJCQkJCQlpbnQgaW51c2UpKQoreworCWlmICghZnMgfHwgZnMtPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUykKKwkJcmV0dXJuOworCWlmIChvbGQpCisJCSpvbGQgPSBmcy0+YmxvY2tfYWxsb2Nfc3RhdHM7CisKKwlmcy0+YmxvY2tfYWxsb2Nfc3RhdHMgPSBmdW5jOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYWxsb2NfdGFibGVzLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9hbGxvY190YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVkMmIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYWxsb2NfdGFibGVzLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBhbGxvY190YWJsZXMuYyAtLS0gQWxsb2NhdGUgdGFibGVzIGZvciBhIG5ld2x5IGluaXRpYWxpemVkCisgKiBmaWxlc3lzdGVtLiAgVXNlZCBieSBta2UyZnMgd2hlbiBpbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCisvKgorICogVGhpcyByb3V0aW5lIHNlYXJjaGVzIGZvciBmcmVlIGJsb2NrcyB0aGF0IGNhbiBhbGxvY2F0ZSBhIGZ1bGwKKyAqIGdyb3VwIG9mIGJpdG1hcHMgb3IgaW5vZGUgdGFibGVzIGZvciBhIGZsZXhiZyBncm91cC4gIFJldHVybnMgdGhlCisgKiBibG9jayBudW1iZXIgd2l0aCBhIGNvcnJlY3Qgb2Zmc2V0IHdlcmUgdGhlIGJpdG1hcHMgYW5kIGlub2RlCisgKiB0YWJsZXMgY2FuIGJlIGFsbG9jYXRlZCBjb250aW5vdXNseSBhbmQgaW4gb3JkZXIuCisgKi8KK3N0YXRpYyBibGs2NF90IGZsZXhiZ19vZmZzZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgYmxrNjRfdCBzdGFydF9ibGssCisJCQkgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwgaW50IHJlbV9ncnAsCisJCQkgICAgIGludCBlbGVtX3NpemUpCit7CisJaW50CQlmbGV4YmcsIGZsZXhiZ19zaXplLCBzaXplOworCWJsazY0X3QJCWxhc3RfYmxrLCBmaXJzdF9mcmVlID0gMDsKKwlkZ3JwX3QJICAgICAgIAlsYXN0X2dycDsKKworCWZsZXhiZ19zaXplID0gMSA8PCBmcy0+c3VwZXItPnNfbG9nX2dyb3Vwc19wZXJfZmxleDsKKwlmbGV4YmcgPSBncm91cCAvIGZsZXhiZ19zaXplOworCXNpemUgPSByZW1fZ3JwICogZWxlbV9zaXplOworCisJaWYgKHNpemUgPiAoaW50KSAoZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgLyA4KSkKKwkJc2l6ZSA9IChpbnQpIGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwIC8gODsKKworCS8qCisJICogRG9uJ3QgZG8gYSBsb25nIHNlYXJjaCBpZiB0aGUgcHJldmlvdXMgYmxvY2sKKwkgKiBzZWFyY2ggaXMgc3RpbGwgdmFsaWQuCisJICovCisJaWYgKHN0YXJ0X2JsayAmJiBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKGJtYXAsIHN0YXJ0X2JsaywKKwkJCQkJCQkgZWxlbV9zaXplKSkKKwkJcmV0dXJuIHN0YXJ0X2JsazsKKworCXN0YXJ0X2JsayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGZsZXhiZ19zaXplICogZmxleGJnKTsKKwlsYXN0X2dycCA9IGdyb3VwIHwgKGZsZXhiZ19zaXplIC0gMSk7CisJaWYgKGxhc3RfZ3JwID4gZnMtPmdyb3VwX2Rlc2NfY291bnQtMSkKKwkJbGFzdF9ncnAgPSBmcy0+Z3JvdXBfZGVzY19jb3VudC0xOworCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBsYXN0X2dycCk7CisKKwkvKiBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgYmxvY2sgKi8KKwlpZiAoZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIHN0YXJ0X2JsaywgbGFzdF9ibGssIHNpemUsCisJCQkJICAgIGJtYXAsICZmaXJzdF9mcmVlKSA9PSAwKQorCQlyZXR1cm4gZmlyc3RfZnJlZTsKKworCWlmIChleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgc3RhcnRfYmxrLCBsYXN0X2JsaywgZWxlbV9zaXplLAorCQkJCSAgIGJtYXAsICZmaXJzdF9mcmVlKSA9PSAwKQorCQlyZXR1cm4gZmlyc3RfZnJlZTsKKworCWlmIChleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgMCwgbGFzdF9ibGssIGVsZW1fc2l6ZSwgYm1hcCwKKwkJCQkgICAgJmZpcnN0X2ZyZWUpID09IDApCisJCXJldHVybiBmaXJzdF9mcmVlOworCisJcmV0dXJuIGZpcnN0X2ZyZWU7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwKKwkJCQkgICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisJdW5zaWduZWQgaW50CWo7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlncm91cF9ibGssIHN0YXJ0X2JsaywgbGFzdF9ibGssIG5ld19ibGssIGJsazsKKwlkZ3JwX3QJCWxhc3RfZ3JwID0gMDsKKwlpbnQJCXJlbV9ncnBzID0gMCwgZmxleGJnX3NpemUgPSAwOworCisJZ3JvdXBfYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBncm91cCk7CisKKwlpZiAoIWJtYXApCisJCWJtYXAgPSBmcy0+YmxvY2tfbWFwOworCisJaWYgKEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSAmJgorCSAgICBmcy0+c3VwZXItPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgeworCQlmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJCWxhc3RfZ3JwID0gZ3JvdXAgfCAoZmxleGJnX3NpemUgLSAxKTsKKwkJaWYgKGxhc3RfZ3JwID4gZnMtPmdyb3VwX2Rlc2NfY291bnQtMSkKKwkJCWxhc3RfZ3JwID0gZnMtPmdyb3VwX2Rlc2NfY291bnQtMTsKKwkJcmVtX2dycHMgPSBsYXN0X2dycCAtIGdyb3VwICsgMTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBibG9jayBhbmQgaW5vZGUgYml0bWFwcywgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKGZzLT5zdHJpZGUpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIGdyb3VwX2JsaywgbGFzdF9ibGssCisJCQkJCQkgMSwgYm1hcCwgJnN0YXJ0X2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlzdGFydF9ibGsgKz0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCXN0YXJ0X2JsayArPSAoKGZzLT5zdHJpZGUgKiBncm91cCkgJQorCQkJICAgICAgKGxhc3RfYmxrIC0gc3RhcnRfYmxrICsgMSkpOworCQlpZiAoc3RhcnRfYmxrID49IGxhc3RfYmxrKQorCQkJc3RhcnRfYmxrID0gZ3JvdXBfYmxrOworCX0gZWxzZQorCQlzdGFydF9ibGsgPSBncm91cF9ibGs7CisKKwlpZiAoZmxleGJnX3NpemUpIHsKKwkJYmxrNjRfdCBwcmV2X2Jsb2NrID0gMDsKKworCQlpZiAoZ3JvdXAgJSBmbGV4Ymdfc2l6ZSkKKwkJCXByZXZfYmxvY2sgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXAgLSAxKSArIDE7CisJCXN0YXJ0X2JsayA9IGZsZXhiZ19vZmZzZXQoZnMsIGdyb3VwLCBwcmV2X2Jsb2NrLCBibWFwLAorCQkJCQkgIHJlbV9ncnBzLCAxKTsKKwkJbGFzdF9ibGsgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGxhc3RfZ3JwKTsKKwl9CisKKwlpZiAoIWV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBncm91cCkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9mcmVlX2Jsb2NrczIoZnMsIHN0YXJ0X2JsaywgbGFzdF9ibGssCisJCQkJCQkgMSwgYm1hcCwgJm5ld19ibGspOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfQkxPQ0tfQUxMT0NfRkFJTCkKKwkJCXJldHZhbCA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBncm91cF9ibGssCisJCQkJCWxhc3RfYmxrLCAxLCBibWFwLCAmbmV3X2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIG5ld19ibGspOworCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGdyb3VwLCBuZXdfYmxrKTsKKwkJaWYgKGZsZXhiZ19zaXplKSB7CisJCQlkZ3JwX3QgZ3IgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgbmV3X2Jsayk7CisJCQlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBnciwgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncikgLSAxKTsKKwkJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9hZGQoZnMtPnN1cGVyLCAtMSk7CisJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGdyLCBFWFQyX0JHX0JMT0NLX1VOSU5JVCk7CisJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3IpOworCQl9CisJfQorCisJaWYgKGZsZXhiZ19zaXplKSB7CisJCWJsazY0X3QgcHJldl9ibG9jayA9IDA7CisJCWlmIChncm91cCAlIGZsZXhiZ19zaXplKQorCQkJcHJldl9ibG9jayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBncm91cCAtIDEpICsgMTsKKwkJZWxzZQorCQkJcHJldl9ibG9jayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBncm91cCkgKworCQkJCWZsZXhiZ19zaXplOworCQlzdGFydF9ibGsgPSBmbGV4Ymdfb2Zmc2V0KGZzLCBncm91cCwgcHJldl9ibG9jaywgYm1hcCwKKwkJCQkJICByZW1fZ3JwcywgMSk7CisJCWxhc3RfYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBsYXN0X2dycCk7CisJfQorCisJaWYgKCFleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGZzLCBzdGFydF9ibGssIGxhc3RfYmxrLAorCQkJCQkJIDEsIGJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUwpCisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgZ3JvdXBfYmxrLAorCQkJCQkgbGFzdF9ibGssIDEsIGJtYXAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgbmV3X2Jsayk7CisJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jX3NldChmcywgZ3JvdXAsIG5ld19ibGspOworCQlpZiAoZmxleGJnX3NpemUpIHsKKwkJCWRncnBfdCBnciA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBuZXdfYmxrKTsKKwkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGdyLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyKSAtIDEpOworCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChmcy0+c3VwZXIsIC0xKTsKKwkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3IsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncik7CisJCX0KKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHRoZSBpbm9kZSB0YWJsZQorCSAqLworCWlmIChmbGV4Ymdfc2l6ZSkgeworCQlibGs2NF90IHByZXZfYmxvY2sgPSAwOworCisJCWlmIChncm91cCAlIGZsZXhiZ19zaXplKQorCQkJcHJldl9ibG9jayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwIC0gMSkgKworCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQllbHNlCisJCQlwcmV2X2Jsb2NrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSArCisJCQkJZmxleGJnX3NpemU7CisKKwkJZ3JvdXBfYmxrID0gZmxleGJnX29mZnNldChmcywgZ3JvdXAsIHByZXZfYmxvY2ssIGJtYXAsCisJCQkJCSAgcmVtX2dycHMsIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwkJbGFzdF9ibGsgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGxhc3RfZ3JwKTsKKwl9CisKKwlpZiAoIWV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzMihmcywgZ3JvdXBfYmxrLCBsYXN0X2JsaywKKwkJCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLAorCQkJCQkJYm1hcCwgJm5ld19ibGspOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJZm9yIChqPTAsIGJsayA9IG5ld19ibGs7CisJCSAgICAgaiA8IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQkgICAgIGorKywgYmxrKyspIHsKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKTsKKwkJCWlmIChmbGV4Ymdfc2l6ZSkgeworCQkJCWRncnBfdCBnciA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCQkJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGdyLCBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyKSAtIDEpOworCQkJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9hZGQoZnMtPnN1cGVyLCAtMSk7CisJCQkJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGZzLCBnciwKKwkJCQkJCSAgICAgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncik7CisJCQl9CisJCX0KKwkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGdyb3VwLCBuZXdfYmxrKTsKKwl9CisJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV90YWJsZXMoZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlkZ3JwX3QJCWk7CisJc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCBwcm9ncmVzczsKKworCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZnMsICZwcm9ncmVzcywgTlVMTCwKKwkJCQkgICAgIGZzLT5ncm91cF9kZXNjX2NvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX3VwZGF0ZShmcywgJnByb2dyZXNzLCBpKTsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlKGZzLCBpLCBmcy0+YmxvY2tfbWFwKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2Nsb3NlKGZzLCAmcHJvZ3Jlc3MsIE5VTEwpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iYWRibG9ja3MuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JhZGJsb2Nrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTJlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iYWRibG9ja3MuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIGJhZGJsb2Nrcy5jIC0tLSByb3V0aW5lcyB0byBtYW5pcHVsYXRlIHRoZSBiYWQgYmxvY2sgc3RydWN0dXJlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBtYWtpbmcgYSBiYWRibG9ja3MgbGlzdAorICovCitzdGF0aWMgZXJyY29kZV90IG1ha2VfdTMyX2xpc3QoaW50IHNpemUsIGludCBudW0sIF9fdTMyICpsaXN0LAorCQkJICAgICAgIGV4dDJfdTMyX2xpc3QgKnJldCkKK3sKKwlleHQyX3UzMl9saXN0CWJiOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X3UzMl9saXN0KSwgJmJiKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChiYiwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX3N0cnVjdF91MzJfbGlzdCkpOworCWJiLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1Q7CisJYmItPnNpemUgPSBzaXplID8gc2l6ZSA6IDEwOworCWJiLT5udW0gPSBudW07CisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShiYi0+c2l6ZSwgc2l6ZW9mKGJsa190KSwgJmJiLT5saXN0KTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmYmIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAobGlzdCkKKwkJbWVtY3B5KGJiLT5saXN0LCBsaXN0LCBiYi0+c2l6ZSAqIHNpemVvZihibGtfdCkpOworCWVsc2UKKwkJbWVtc2V0KGJiLT5saXN0LCAwLCBiYi0+c2l6ZSAqIHNpemVvZihibGtfdCkpOworCSpyZXQgPSBiYjsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogVGhpcyBwcm9jZWR1cmUgY3JlYXRlcyBhbiBlbXB0eSB1MzIgbGlzdC4KKyAqLworZXJyY29kZV90IGV4dDJmc191MzJfbGlzdF9jcmVhdGUoZXh0Ml91MzJfbGlzdCAqcmV0LCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gbWFrZV91MzJfbGlzdChzaXplLCAwLCAwLCByZXQpOworfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgY3JlYXRlcyBhbiBlbXB0eSBiYWRibG9ja3MgbGlzdC4KKyAqLworZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUoZXh0Ml9iYWRibG9ja3NfbGlzdCAqcmV0LCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gbWFrZV91MzJfbGlzdChzaXplLCAwLCAwLCAoZXh0Ml9iYWRibG9ja3NfbGlzdCAqKSByZXQpOworfQorCisKKy8qCisgKiBUaGlzIHByb2NlZHVyZSBjb3BpZXMgYSBiYWRibG9ja3MgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX3UzMl9jb3B5KGV4dDJfdTMyX2xpc3Qgc3JjLCBleHQyX3UzMl9saXN0ICpkZXN0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBtYWtlX3UzMl9saXN0KHNyYy0+c2l6ZSwgc3JjLT5udW0sIHNyYy0+bGlzdCwgZGVzdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwkoKmRlc3QpLT5iYWRibG9ja3NfZmxhZ3MgPSBzcmMtPmJhZGJsb2Nrc19mbGFnczsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfY29weShleHQyX2JhZGJsb2Nrc19saXN0IHNyYywKKwkJCQlleHQyX2JhZGJsb2Nrc19saXN0ICpkZXN0KQoreworCXJldHVybiBleHQyZnNfdTMyX2NvcHkoKGV4dDJfdTMyX2xpc3QpIHNyYywKKwkJCSAgICAgICAoZXh0Ml91MzJfbGlzdCAqKSBkZXN0KTsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGZyZWVzIGEgYmFkYmxvY2tzIGxpc3QuCisgKgorICogKG5vdGU6IG1vdmVkIHRvIGNsb3NlZnMuYykKKyAqLworCisKKy8qCisgKiBUaGlzIHByb2NlZHVyZSBhZGRzIGEgYmxvY2sgdG8gYSBiYWRibG9ja3MgbGlzdC4KKyAqLworZXJyY29kZV90IGV4dDJmc191MzJfbGlzdF9hZGQoZXh0Ml91MzJfbGlzdCBiYiwgX191MzIgYmxrKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlpLCBqOworCXVuc2lnbmVkIGxvbmcJb2xkX3NpemU7CisKKwlFWFQyX0NIRUNLX01BR0lDKGJiLCBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKTsKKworCWlmIChiYi0+bnVtID49IGJiLT5zaXplKSB7CisJCW9sZF9zaXplID0gYmItPnNpemUgKiBzaXplb2YoX191MzIpOworCQliYi0+c2l6ZSArPSAxMDA7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfbWVtKG9sZF9zaXplLCBiYi0+c2l6ZSAqIHNpemVvZihfX3UzMiksCisJCQkJCSAgICZiYi0+bGlzdCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWJiLT5zaXplIC09IDEwMDsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwkvKgorCSAqIEFkZCBzcGVjaWFsIGNhc2UgY29kZSBmb3IgYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKKwkgKi8KKwlpID0gYmItPm51bS0xOworCWlmICgoYmItPm51bSAhPSAwKSAmJiAoYmItPmxpc3RbaV0gPT0gYmxrKSkKKwkJcmV0dXJuIDA7CisJaWYgKChiYi0+bnVtID09IDApIHx8IChiYi0+bGlzdFtpXSA8IGJsaykpIHsKKwkJYmItPmxpc3RbYmItPm51bSsrXSA9IGJsazsKKwkJcmV0dXJuIDA7CisJfQorCisJaiA9IGJiLT5udW07CisJZm9yIChpPTA7IGkgPCBiYi0+bnVtOyBpKyspIHsKKwkJaWYgKGJiLT5saXN0W2ldID09IGJsaykKKwkJCXJldHVybiAwOworCQlpZiAoYmItPmxpc3RbaV0gPiBibGspIHsKKwkJCWogPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZm9yIChpPWJiLT5udW07IGkgPiBqOyBpLS0pCisJCWJiLT5saXN0W2ldID0gYmItPmxpc3RbaS0xXTsKKwliYi0+bGlzdFtqXSA9IGJsazsKKwliYi0+bnVtKys7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkKGV4dDJfYmFkYmxvY2tzX2xpc3QgYmIsIGJsa190IGJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX3UzMl9saXN0X2FkZCgoZXh0Ml91MzJfbGlzdCkgYmIsIChfX3UzMikgYmxrKTsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGZpbmRzIGEgcGFydGljdWxhciBibG9jayBpcyBvbiBhIGJhZGJsb2NrcworICogbGlzdC4KKyAqLworaW50IGV4dDJmc191MzJfbGlzdF9maW5kKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsaykKK3sKKwlpbnQJbG93LCBoaWdoLCBtaWQ7CisKKwlpZiAoYmItPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1QpCisJCXJldHVybiAtMTsKKworCWlmIChiYi0+bnVtID09IDApCisJCXJldHVybiAtMTsKKworCWxvdyA9IDA7CisJaGlnaCA9IGJiLT5udW0tMTsKKwlpZiAoYmxrID09IGJiLT5saXN0W2xvd10pCisJCXJldHVybiBsb3c7CisJaWYgKGJsayA9PSBiYi0+bGlzdFtoaWdoXSkKKwkJcmV0dXJuIGhpZ2g7CisKKwl3aGlsZSAobG93IDwgaGlnaCkgeworCQltaWQgPSAoKHVuc2lnbmVkKWxvdyArICh1bnNpZ25lZCloaWdoKS8yOworCQlpZiAobWlkID09IGxvdyB8fCBtaWQgPT0gaGlnaCkKKwkJCWJyZWFrOworCQlpZiAoYmxrID09IGJiLT5saXN0W21pZF0pCisJCQlyZXR1cm4gbWlkOworCQlpZiAoYmxrIDwgYmItPmxpc3RbbWlkXSkKKwkJCWhpZ2ggPSBtaWQ7CisJCWVsc2UKKwkJCWxvdyA9IG1pZDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBwcm9jZWR1cmUgdGVzdHMgdG8gc2VlIGlmIGEgcGFydGljdWxhciBibG9jayBpcyBvbiBhIGJhZGJsb2NrcworICogbGlzdC4KKyAqLworaW50IGV4dDJmc191MzJfbGlzdF90ZXN0KGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsaykKK3sKKwlpZiAoZXh0MmZzX3UzMl9saXN0X2ZpbmQoYmIsIGJsaykgPCAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitpbnQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoZXh0Ml9iYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgYmxrKQoreworCXJldHVybiBleHQyZnNfdTMyX2xpc3RfdGVzdCgoZXh0Ml91MzJfbGlzdCkgYmIsIChfX3UzMikgYmxrKTsKK30KKworCisvKgorICogUmVtb3ZlIGEgYmxvY2sgZnJvbSB0aGUgYmFkYmxvY2sgbGlzdAorICovCitpbnQgZXh0MmZzX3UzMl9saXN0X2RlbChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspCit7CisJaW50CXJlbWxvYywgaTsKKworCWlmIChiYi0+bnVtID09IDApCisJCXJldHVybiAtMTsKKworCXJlbWxvYyA9IGV4dDJmc191MzJfbGlzdF9maW5kKGJiLCBibGspOworCWlmIChyZW1sb2MgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSByZW1sb2MgOyBpIDwgYmItPm51bS0xOyBpKyspCisJCWJiLT5saXN0W2ldID0gYmItPmxpc3RbaSsxXTsKKwliYi0+bnVtLS07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2RlbChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspCit7CisJZXh0MmZzX3UzMl9saXN0X2RlbChiYiwgYmxrKTsKK30KKworZXJyY29kZV90IGV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2JlZ2luKGV4dDJfdTMyX2xpc3QgYmIsCisJCQkJCWV4dDJfdTMyX2l0ZXJhdGUgKnJldCkKK3sKKwlleHQyX3UzMl9pdGVyYXRlIGl0ZXI7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGJiLCBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2l0ZXJhdGUpLCAmaXRlcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWl0ZXItPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfSVRFUkFURTsKKwlpdGVyLT5iYiA9IGJiOworCWl0ZXItPnB0ciA9IDA7CisJKnJldCA9IGl0ZXI7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihleHQyX2JhZGJsb2Nrc19saXN0IGJiLAorCQkJCQkgICAgICBleHQyX2JhZGJsb2Nrc19pdGVyYXRlICpyZXQpCit7CisJcmV0dXJuIGV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2JlZ2luKChleHQyX3UzMl9saXN0KSBiYiwKKwkJCQkJICAgICAgKGV4dDJfdTMyX2l0ZXJhdGUgKikgcmV0KTsKK30KKworCitpbnQgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGUoZXh0Ml91MzJfaXRlcmF0ZSBpdGVyLCBfX3UzMiAqYmxrKQoreworCWV4dDJfdTMyX2xpc3QJYmI7CisKKwlpZiAoaXRlci0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19CQURCTE9DS1NfSVRFUkFURSkKKwkJcmV0dXJuIDA7CisKKwliYiA9IGl0ZXItPmJiOworCisJaWYgKGJiLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKQorCQlyZXR1cm4gMDsKKworCWlmIChpdGVyLT5wdHIgPCBiYi0+bnVtKSB7CisJCSpibGsgPSBiYi0+bGlzdFtpdGVyLT5wdHIrK107CisJCXJldHVybiAxOworCX0KKwkqYmxrID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlKGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgaXRlciwgYmxrX3QgKmJsaykKK3sKKwlyZXR1cm4gZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGUoKGV4dDJfdTMyX2l0ZXJhdGUpIGl0ZXIsCisJCQkJICAgICAgIChfX3UzMiAqKSBibGspOworfQorCisKK3ZvaWQgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGVfZW5kKGV4dDJfdTMyX2l0ZXJhdGUgaXRlcikKK3sKKwlpZiAoIWl0ZXIgfHwgKGl0ZXItPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0lURVJBVEUpKQorCQlyZXR1cm47CisKKwlpdGVyLT5iYiA9IDA7CisJZXh0MmZzX2ZyZWVfbWVtKCZpdGVyKTsKK30KKwordm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBpdGVyKQoreworCWV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2VuZCgoZXh0Ml91MzJfaXRlcmF0ZSkgaXRlcik7Cit9CisKKworaW50IGV4dDJmc191MzJfbGlzdF9lcXVhbChleHQyX3UzMl9saXN0IGJiMSwgZXh0Ml91MzJfbGlzdCBiYjIpCit7CisJRVhUMl9DSEVDS19NQUdJQyhiYjEsIEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1QpOworCUVYVDJfQ0hFQ0tfTUFHSUMoYmIyLCBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKTsKKworCWlmIChiYjEtPm51bSAhPSBiYjItPm51bSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobWVtY21wKGJiMS0+bGlzdCwgYmIyLT5saXN0LCBiYjEtPm51bSAqIHNpemVvZihibGtfdCkpICE9IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQgZXh0MmZzX2JhZGJsb2Nrc19lcXVhbChleHQyX2JhZGJsb2Nrc19saXN0IGJiMSwgZXh0Ml9iYWRibG9ja3NfbGlzdCBiYjIpCit7CisJcmV0dXJuIGV4dDJmc191MzJfbGlzdF9lcXVhbCgoZXh0Ml91MzJfbGlzdCkgYmIxLAorCQkJCSAgICAgKGV4dDJfdTMyX2xpc3QpIGJiMik7Cit9CisKK2ludCBleHQyZnNfdTMyX2xpc3RfY291bnQoZXh0Ml91MzJfbGlzdCBiYikKK3sKKwlyZXR1cm4gYmItPm51bTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JiX2NvbXBhdC5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmJfY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0ZTNlNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JiX2NvbXBhdC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBiYl9jb21wYXQuYyAtLS0gY29tcGF0aWJpbGl0eSBiYWRibG9ja3Mgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK2VycmNvZGVfdCBiYWRibG9ja3NfbGlzdF9jcmVhdGUoYmFkYmxvY2tzX2xpc3QgKnJldCwgaW50IHNpemUpCit7CisJcmV0dXJuIGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUocmV0LCBzaXplKTsKK30KKwordm9pZCBiYWRibG9ja3NfbGlzdF9mcmVlKGJhZGJsb2Nrc19saXN0IGJiKQoreworCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiKTsKK30KKworZXJyY29kZV90IGJhZGJsb2Nrc19saXN0X2FkZChiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgYmxrKQoreworCXJldHVybiBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkKGJiLCBibGspOworfQorCitpbnQgYmFkYmxvY2tzX2xpc3RfdGVzdChiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgYmxrKQoreworCXJldHVybiBleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYiwgYmxrKTsKK30KKworZXJyY29kZV90IGJhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmFkYmxvY2tzX2xpc3QgYmIsCisJCQkJICAgICAgIGJhZGJsb2Nrc19pdGVyYXRlICpyZXQpCit7CisJcmV0dXJuIGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2JlZ2luKGJiLCByZXQpOworfQorCitpbnQgYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShiYWRibG9ja3NfaXRlcmF0ZSBpdGVyLCBibGtfdCAqYmxrKQoreworCXJldHVybiBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShpdGVyLCBibGspOworfQorCit2b2lkIGJhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGJhZGJsb2Nrc19pdGVyYXRlIGl0ZXIpCit7CisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGl0ZXIpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmJfaW5vZGUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JiX2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2YzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JiX2lub2RlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBiYl9pbm9kZS5jIC0tLSByb3V0aW5lcyB0byB1cGRhdGUgdGhlIGJhZCBibG9jayBpbm9kZS4KKyAqCisgKiBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgbW9kaWZpZXMgYSBsb3Qgb2Ygc3RhdGUgaW4gdGhlIGZpbGVzeXN0ZW07IGlmCisgKiB0aGlzIHJvdXRpbmUgcmV0dXJucyBhbiBlcnJvciwgdGhlIGJhZCBibG9jayBpbm9kZSBtYXkgYmUgaW4gYW4KKyAqIGluY29uc2lzdGVudCBzdGF0ZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworc3RydWN0IHNldF9iYWRibG9ja19yZWNvcmQgeworCWV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUJYmJfaXRlcjsKKwlpbnQJCWJhZF9ibG9ja19jb3VudDsKKwlibGtfdAkJKmluZF9ibG9ja3M7CisJaW50CQltYXhfaW5kX2Jsb2NrczsKKwlpbnQJCWluZF9ibG9ja3Nfc2l6ZTsKKwlpbnQJCWluZF9ibG9ja3NfcHRyOworCWNoYXIJCSpibG9ja19idWY7CisJZXJyY29kZV90CWVycjsKK307CisKK3N0YXRpYyBpbnQgc2V0X2JhZF9ibG9ja19wcm9jKGV4dDJfZmlsc3lzIGZzLCBibGtfdCAqYmxvY2tfbnIsCisJCQkgICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCwKKwkJCSAgICAgIGJsa190IHJlZl9ibG9jaywgaW50IHJlZl9vZmZzZXQsCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpOworc3RhdGljIGludCBjbGVhcl9iYWRfYmxvY2tfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrX25yLAorCQkJCWUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJCWJsa190IHJlZl9ibG9jaywgaW50IHJlZl9vZmZzZXQsCisJCQkJdm9pZCAqcHJpdl9kYXRhKTsKKworLyoKKyAqIEdpdmVuIGEgYmFkIGJsb2NrcyBiaXRtYXAsIHVwZGF0ZSB0aGUgYmFkIGJsb2NrcyBpbm9kZSB0byByZWZsZWN0CisgKiB0aGUgbWFwLgorICovCitlcnJjb2RlX3QgZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9iYWRibG9ja3NfbGlzdCBiYl9saXN0KQoreworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlzdHJ1Y3Qgc2V0X2JhZGJsb2NrX3JlY29yZCAJcmVjOworCXN0cnVjdCBleHQyX2lub2RlCQlpbm9kZTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoIWZzLT5ibG9ja19tYXApCisJCXJldHVybiBFWFQyX0VUX05PX0JMT0NLX0JJVE1BUDsKKworCW1lbXNldCgmcmVjLCAwLCBzaXplb2YocmVjKSk7CisJcmVjLm1heF9pbmRfYmxvY2tzID0gMTA7CisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShyZWMubWF4X2luZF9ibG9ja3MsIHNpemVvZihibGtfdCksCisJCQkJJnJlYy5pbmRfYmxvY2tzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChyZWMuaW5kX2Jsb2NrcywgMCwgcmVjLm1heF9pbmRfYmxvY2tzICogc2l6ZW9mKGJsa190KSk7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJnJlYy5ibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQocmVjLmJsb2NrX2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJcmVjLmVyciA9IDA7CisKKwkvKgorCSAqIEZpcnN0IGNsZWFyIHRoZSBvbGQgYmFkIGJsb2NrcyAod2hpbGUgc2F2aW5nIHRoZSBpbmRpcmVjdCBibG9ja3MpCisJICovCisJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKGZzLCBFWFQyX0JBRF9JTk8sCisJCQkJICAgICAgIEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UsIDAsCisJCQkJICAgICAgIGNsZWFyX2JhZF9ibG9ja19wcm9jLCAmcmVjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJaWYgKHJlYy5lcnIpIHsKKwkJcmV0dmFsID0gcmVjLmVycjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogTm93IHNldCB0aGUgYmFkIGJsb2NrcyEKKwkgKgorCSAqIEZpcnN0LCBtYXJrIHRoZSBiYWQgYmxvY2tzIGFzIHVzZWQuICBUaGlzIHByZXZlbnRzIGEgYmFkCisJICogYmxvY2sgZnJvbSBiZWluZyB1c2VkIGFzIGFuIGluZGlyZWN0byBibG9jayBmb3IgdGhlIGJhZAorCSAqIGJsb2NrIGlub2RlICghKS4KKwkgKi8KKwlpZiAoYmJfbGlzdCkgeworCQlyZXR2YWwgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYl9saXN0LAorCQkJCQkJCSAgICAgJnJlYy5iYl9pdGVyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKGZzLCBFWFQyX0JBRF9JTk8sCisJCQkJCSAgICAgICBCTE9DS19GTEFHX0FQUEVORCwgMCwKKwkJCQkJICAgICAgIHNldF9iYWRfYmxvY2tfcHJvYywgJnJlYyk7CisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChyZWMuYmJfaXRlcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCWlmIChyZWMuZXJyKSB7CisJCQlyZXR2YWwgPSByZWMuZXJyOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJLyoKKwkgKiBVcGRhdGUgdGhlIGJhZCBibG9jayBpbm9kZSdzIG1vZCB0aW1lIGFuZCBibG9jayBjb3VudAorCSAqIGZpZWxkLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBFWFQyX0JBRF9JTk8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfbXRpbWUgPSBmcy0+bm93ID8gZnMtPm5vdyA6IHRpbWUoMCk7CisJaWYgKCFpbm9kZS5pX2N0aW1lKQorCQlpbm9kZS5pX2N0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCByZWMuYmFkX2Jsb2NrX2NvdW50KTsKKwlpbm9kZS5pX3NpemUgPSByZWMuYmFkX2Jsb2NrX2NvdW50ICogZnMtPmJsb2Nrc2l6ZTsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgRVhUMl9CQURfSU5PLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworY2xlYW51cDoKKwlleHQyZnNfZnJlZV9tZW0oJnJlYy5pbmRfYmxvY2tzKTsKKwlleHQyZnNfZnJlZV9tZW0oJnJlYy5ibG9ja19idWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0ZV9iYl9pbm9kZSgpCisgKgorICogQ2xlYXIgdGhlIGJhZCBibG9ja3MgaW4gdGhlIGJhZCBibG9jayBpbm9kZSwgd2hpbGUgc2F2aW5nIHRoZQorICogaW5kaXJlY3QgYmxvY2tzLgorICovCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBjbGVhcl9iYWRfYmxvY2tfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrX25yLAorCQkJCWUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJCWJsa190IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2V0X2JhZGJsb2NrX3JlY29yZCAqcmVjID0gKHN0cnVjdCBzZXRfYmFkYmxvY2tfcmVjb3JkICopCisJCXByaXZfZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgCW9sZF9zaXplOworCisJaWYgKCEqYmxvY2tfbnIpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgYmxvY2sgbnVtYmVyIGlzIG91dHJhZ2VvdXMsIGNsZWFyIGl0IGFuZCBpZ25vcmUgaXQuCisJICovCisJaWYgKCpibG9ja19uciA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgfHwKKwkgICAgKmJsb2NrX25yIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHsKKwkJKmJsb2NrX25yID0gMDsKKwkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7CisJfQorCisJaWYgKGJsb2NrY250IDwgMCkgeworCQlpZiAocmVjLT5pbmRfYmxvY2tzX3NpemUgPj0gcmVjLT5tYXhfaW5kX2Jsb2NrcykgeworCQkJb2xkX3NpemUgPSByZWMtPm1heF9pbmRfYmxvY2tzICogc2l6ZW9mKGJsa190KTsKKwkJCXJlYy0+bWF4X2luZF9ibG9ja3MgKz0gMTA7CisJCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfc2l6ZSwKKwkJCQkgICByZWMtPm1heF9pbmRfYmxvY2tzICogc2l6ZW9mKGJsa190KSwKKwkJCQkgICAmcmVjLT5pbmRfYmxvY2tzKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlyZWMtPm1heF9pbmRfYmxvY2tzIC09IDEwOworCQkJCXJlYy0+ZXJyID0gcmV0dmFsOworCQkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJCX0KKwkJfQorCQlyZWMtPmluZF9ibG9ja3NbcmVjLT5pbmRfYmxvY2tzX3NpemUrK10gPSAqYmxvY2tfbnI7CisJfQorCisJLyoKKwkgKiBNYXJrIHRoZSBibG9jayBhcyB1bnVzZWQsIGFuZCB1cGRhdGUgYWNjb3VudGluZyBpbmZvcm1hdGlvbgorCSAqLworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsICpibG9ja19uciwgLTEpOworCisJKmJsb2NrX25yID0gMDsKKwlyZXR1cm4gQkxPQ0tfQ0hBTkdFRDsKK30KKworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciB1cGRhdGVfYmJfaW5vZGUoKQorICoKKyAqIFNldCB0aGUgYmxvY2sgbGlzdCBpbiB0aGUgYmFkIGJsb2NrIGlub2RlLCB1c2luZyB0aGUgc3VwcGxpZWQgYml0bWFwLgorICovCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBzZXRfYmFkX2Jsb2NrX3Byb2MoZXh0Ml9maWxzeXMgZnMsIGJsa190ICpibG9ja19uciwKKwkJCSAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgICAgYmxrX3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2V0X2JhZGJsb2NrX3JlY29yZCAqcmVjID0gKHN0cnVjdCBzZXRfYmFkYmxvY2tfcmVjb3JkICopCisJCXByaXZfZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsa190CQlibGs7CisKKwlpZiAoYmxvY2tjbnQgPj0gMCkgeworCQkvKgorCQkgKiBHZXQgdGhlIG5leHQgYmFkIGJsb2NrLgorCQkgKi8KKwkJaWYgKCFleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShyZWMtPmJiX2l0ZXIsICZibGspKQorCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQlyZWMtPmJhZF9ibG9ja19jb3VudCsrOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEFuIGluZGlyZWN0IGJsb2NrOyBmZXRjaCBhIGJsb2NrIGZyb20gdGhlCisJCSAqIHByZXZpb3VzbHkgdXNlZCBpbmRpcmVjdCBibG9jayBsaXN0LiAgVGhlIGJsb2NrCisJCSAqIG1vc3QgYmUgbm90IG1hcmtlZCBhcyB1c2VkOyBpZiBzbywgZ2V0IGFub3RoZXIgb25lLgorCQkgKiBJZiB3ZSBydW4gb3V0IG9mIHJlc2VydmVkIGluZGlyZWN0IGJsb2NrcywgYWxsb2NhdGUKKwkJICogYSBuZXcgb25lLgorCQkgKi8KKwlyZXRyeToKKwkJaWYgKHJlYy0+aW5kX2Jsb2Nrc19wdHIgPCByZWMtPmluZF9ibG9ja3Nfc2l6ZSkgeworCQkJYmxrID0gcmVjLT5pbmRfYmxvY2tzW3JlYy0+aW5kX2Jsb2Nrc19wdHIrK107CisJCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspKQorCQkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrKGZzLCAwLCAwLCAmYmxrKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlyZWMtPmVyciA9IHJldHZhbDsKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCQl9CisJCX0KKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsaywgMSwgcmVjLT5ibG9ja19idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlyZWMtPmVyciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCX0KKworCS8qCisJICogVXBkYXRlIGJsb2NrIGNvdW50cworCSAqLworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCisJKmJsb2NrX25yID0gYmxrOworCXJldHVybiBCTE9DS19DSEFOR0VEOworfQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYml0bWFwcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYml0bWFwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTUxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iaXRtYXBzLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBiaXRtYXBzLmMgLS0tIHJvdXRpbmVzIHRvIHJlYWQsIHdyaXRlLCBhbmQgbWFuaXB1bGF0ZSB0aGUgaW5vZGUgYW5kCisgKiBibG9jayBiaXRtYXBzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKyNpbmNsdWRlICJibWFwNjQuaCIKKwordm9pZCBleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApCit7CisJZXh0MmZzX2ZyZWVfZ2VuZXJpY19ibWFwKGJpdG1hcCk7Cit9CisKK3ZvaWQgZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcChiaXRtYXApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NvcHlfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqZGVzdCkKK3sKKwlyZXR1cm4gKGV4dDJmc19jb3B5X2dlbmVyaWNfYm1hcChzcmMsIGRlc3QpKTsKK30KK3ZvaWQgZXh0MmZzX3NldF9iaXRtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgbWFwKQoreworCWV4dDJmc19zZXRfZ2VuZXJpY19ibWFwX3BhZGRpbmcobWFwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCSAgICAgICBleHQyZnNfaW5vZGVfYml0bWFwICpyZXQpCit7CisJX191NjQJCXN0YXJ0LCBlbmQsIHJlYWxfZW5kOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWZzLT53cml0ZV9iaXRtYXBzID0gZXh0MmZzX3dyaXRlX2JpdG1hcHM7CisKKwlzdGFydCA9IDE7CisJZW5kID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsKKwlyZWFsX2VuZCA9IChFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAqIGZzLT5ncm91cF9kZXNjX2NvdW50KTsKKworCS8qIEFyZSB3ZSBwZXJtaXR0ZWQgdG8gdXNlIG5ldy1zdHlsZSBiaXRtYXBzPyAqLworCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfNjRCSVRTKQorCQlyZXR1cm4gKGV4dDJmc19hbGxvY19nZW5lcmljX2JtYXAoZnMsCisJCQkJRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVA2NCwKKwkJCQlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSwKKwkJCQlzdGFydCwgZW5kLCByZWFsX2VuZCwgZGVzY3IsIHJldCkpOworCisJLyogT3RoZXJ3aXNlLCBjaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgc3lzdGVtIGlzIHNtYWxsIGVub3VnaAorCSAqIHRvIHVzZSBvbGQtc3R5bGUgMzItYml0IGJpdG1hcHMgKi8KKwlpZiAoKGVuZCA+IH4wVSkgfHwgKHJlYWxfZW5kID4gfjBVKSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FOVF9VU0VfTEVHQUNZX0JJVE1BUFM7CisKKwlyZXR1cm4gKGV4dDJmc19tYWtlX2dlbmVyaWNfYml0bWFwKEVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQLCBmcywKKwkJCQkJIHN0YXJ0LCBlbmQsIHJlYWxfZW5kLAorCQkJCQkgZGVzY3IsIDAsCisJCQkJCSAoZXh0MmZzX2dlbmVyaWNfYml0bWFwICopIHJldCkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJICAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCkKK3sKKwlfX3U2NAkJc3RhcnQsIGVuZCwgcmVhbF9lbmQ7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJZnMtPndyaXRlX2JpdG1hcHMgPSBleHQyZnNfd3JpdGVfYml0bWFwczsKKworCXN0YXJ0ID0gRVhUMkZTX0IyQyhmcywgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWVuZCA9IEVYVDJGU19CMkMoZnMsIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKTsKKwlyZWFsX2VuZCA9ICgoX191NjQpIEVYVDJfQ0xVU1RFUlNfUEVSX0dST1VQKGZzLT5zdXBlcikKKwkJICAgICogKF9fdTY0KSBmcy0+Z3JvdXBfZGVzY19jb3VudCktMSArIHN0YXJ0OworCisJaWYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR182NEJJVFMpCisJCXJldHVybiAoZXh0MmZzX2FsbG9jX2dlbmVyaWNfYm1hcChmcywKKwkJCQlFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDY0LAorCQkJCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlLAorCQkJCXN0YXJ0LCBlbmQsIHJlYWxfZW5kLCBkZXNjciwgcmV0KSk7CisKKwlpZiAoKGVuZCA+IH4wVSkgfHwgKHJlYWxfZW5kID4gfjBVKSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FOVF9VU0VfTEVHQUNZX0JJVE1BUFM7CisKKwlyZXR1cm4gKGV4dDJmc19tYWtlX2dlbmVyaWNfYml0bWFwKEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQLCBmcywKKwkJCQkJICAgc3RhcnQsIGVuZCwgcmVhbF9lbmQsCisJCQkJCSAgIGRlc2NyLCAwLAorCQkJCQkgICAoZXh0MmZzX2dlbmVyaWNfYml0bWFwICopIHJldCkpOworfQorCisvKgorICogZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcCgpIHJlYWxseSBhbGxvY2F0ZXMgYSBwZXItY2x1c3RlcgorICogYml0bWFwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEKKyAqIGJsb2NrIGJpdG1hcCB3aGljaCBpcyB0cnVseSBwZXItYmxvY2ssIGV2ZW4gaWYgY2x1c3RlcnMvYmlnYWxsb2MKKyAqIGFyZSBlbmFibGVkLiAgbWtlMmZzIGFuZCBlMmZzY2sgbmVlZCB0aGlzIGZvciB0cmFja2luZyB0aGUKKyAqIGFsbG9jYXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIG1ldGFkYXRhIGJsb2Nrcy4KKyAqLworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqcmV0KQoreworCV9fdTY0CQkJc3RhcnQsIGVuZCwgcmVhbF9lbmQ7CisJZXh0MmZzX2dlbmVyaWNfYml0bWFwCWJtYXA7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJZnMtPndyaXRlX2JpdG1hcHMgPSBleHQyZnNfd3JpdGVfYml0bWFwczsKKworCWlmICghZnMtPmNsdXN0ZXJfcmF0aW9fYml0cykKKwkJcmV0dXJuIGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsIGRlc2NyLCByZXQpOworCisJaWYgKChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfNjRCSVRTKSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9DQU5UX1VTRV9MRUdBQ1lfQklUTUFQUzsKKworCXN0YXJ0ID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJZW5kID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTE7CisJcmVhbF9lbmQgPSAoKF9fdTY0KSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKQorCQkgICAgKiAoX191NjQpIGZzLT5ncm91cF9kZXNjX2NvdW50KS0xICsgc3RhcnQ7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NfZ2VuZXJpY19ibWFwKGZzLCBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDY0LAorCQkJCQkgICBmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSwgc3RhcnQsCisJCQkJCSAgIGVuZCwgcmVhbF9lbmQsIGRlc2NyLCAmYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlibWFwLT5jbHVzdGVyX2JpdHMgPSAwOworCSpyZXQgPSBibWFwOworCXJldHVybiAwOworfQorCitpbnQgZXh0MmZzX2dldF9iaXRtYXBfZ3JhbnVsYXJpdHkoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAgPSBiaXRtYXA7CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJtYXAtPmNsdXN0ZXJfYml0czsKK30KKworZXJyY29kZV90IGV4dDJmc19mdWRnZV9pbm9kZV9iaXRtYXBfZW5kKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQlleHQyX2lub190IGVuZCwgZXh0Ml9pbm9fdCAqb2VuZCkKK3sKKwlfX3U2NCB0bXBfb2VuZDsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYm1hcF9lbmQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkgICAgICAgRVhUMl9FVF9GVURHRV9JTk9ERV9CSVRNQVBfRU5ELAorCQkJCQkgICAgICAgZW5kLCAmdG1wX29lbmQpOworCWlmIChvZW5kKQorCQkqb2VuZCA9IHRtcF9vZW5kOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZnVkZ2VfYmxvY2tfYml0bWFwX2VuZChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJYmxrX3QgZW5kLCBibGtfdCAqb2VuZCkKK3sKKwlyZXR1cm4gKGV4dDJmc19mdWRnZV9nZW5lcmljX2JpdG1hcF9lbmQoYml0bWFwLAorCQkJCQkJRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVAsCisJCQkJCQlFWFQyX0VUX0ZVREdFX0JMT0NLX0JJVE1BUF9FTkQsCisJCQkJCQllbmQsIG9lbmQpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJIGJsazY0X3QgZW5kLCBibGs2NF90ICpvZW5kKQoreworCXJldHVybiAoZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYm1hcF9lbmQoYml0bWFwLAorCQkJCQkgICAgICBFWFQyX0VUX0ZVREdFX0JMT0NLX0JJVE1BUF9FTkQsCisJCQkJCSAgICAgIGVuZCwgb2VuZCkpOworfQorCit2b2lkIGV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApCit7CisJZXh0MmZzX2NsZWFyX2dlbmVyaWNfYm1hcChiaXRtYXApOworfQorCit2b2lkIGV4dDJmc19jbGVhcl9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJZXh0MmZzX2NsZWFyX2dlbmVyaWNfYm1hcChiaXRtYXApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAoX191MzIgbmV3X2VuZCwgX191MzIgbmV3X3JlYWxfZW5kLAorCQkJCSAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwKQoreworCXJldHVybiAoZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcChFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCwKKwkJCQkJICAgICBuZXdfZW5kLCBuZXdfcmVhbF9lbmQsIGJtYXApKTsKK30KKworZXJyY29kZV90IGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwMihfX3U2NCBuZXdfZW5kLCBfX3U2NCBuZXdfcmVhbF9lbmQsCisJCQkJICAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwKQoreworCXJldHVybiAoZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JtYXAoYm1hcCwgbmV3X2VuZCwgbmV3X3JlYWxfZW5kKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcChfX3UzMiBuZXdfZW5kLCBfX3UzMiBuZXdfcmVhbF9lbmQsCisJCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisJcmV0dXJuIChleHQyZnNfcmVzaXplX2dlbmVyaWNfYml0bWFwKEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQLAorCQkJCQkgICAgIG5ld19lbmQsIG5ld19yZWFsX2VuZCwgYm1hcCkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9ibG9ja19iaXRtYXAyKF9fdTY0IG5ld19lbmQsIF9fdTY0IG5ld19yZWFsX2VuZCwKKwkJCQkgICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisJcmV0dXJuIChleHQyZnNfcmVzaXplX2dlbmVyaWNfYm1hcChibWFwLCBuZXdfZW5kLCBuZXdfcmVhbF9lbmQpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19jb21wYXJlX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJtMSwKKwkJCQkgICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtMikKK3sKKwlyZXR1cm4gKGV4dDJmc19jb21wYXJlX2dlbmVyaWNfYm1hcChFWFQyX0VUX05FUV9CTE9DS19CSVRNQVAsCisJCQkJCSAgICBibTEsIGJtMikpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYm0xLAorCQkJCSAgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm0yKQoreworCXJldHVybiAoZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19ibWFwKEVYVDJfRVRfTkVRX0lOT0RFX0JJVE1BUCwKKwkJCQkJICAgIGJtMSwgYm0yKSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZShleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCWV4dDJfaW5vX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKmluKQoreworCXJldHVybiAoZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9yYW5nZShibWFwLAorCQkJCQkJRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVAsCisJCQkJCQlzdGFydCwgbnVtLCBpbikpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2UyKGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCwKKwkJCQkJIF9fdTY0IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqaW4pCit7CisJcmV0dXJuIChleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShibWFwLCBzdGFydCwgbnVtLCBpbikpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UoZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwLAorCQkJCQlleHQyX2lub190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICpvdXQpCit7CisJcmV0dXJuIChleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGJtYXAsCisJCQkJCQlFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCwKKwkJCQkJCXN0YXJ0LCBudW0sIG91dCkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UyKGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCwKKwkJCQkJIF9fdTY0IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqb3V0KQoreworCXJldHVybiAoZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgc3RhcnQsIG51bSwgb3V0KSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCWJsa190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICppbikKK3sKKwlyZXR1cm4gKGV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoYm1hcCwKKwkJCQkJCUVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQLAorCQkJCQkJc3RhcnQsIG51bSwgaW4pKTsKK30KKworZXJyY29kZV90IGV4dDJmc19zZXRfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCSBibGs2NF90IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqaW4pCit7CisJcmV0dXJuIChleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShibWFwLCBzdGFydCwgbnVtLCBpbikpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCQlibGtfdCBzdGFydCwgdW5zaWduZWQgaW50IG51bSwKKwkJCQkJdm9pZCAqb3V0KQoreworCXJldHVybiAoZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9yYW5nZShibWFwLAorCQkJCQkJRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVAsCisJCQkJCQlzdGFydCwgbnVtLCBvdXQpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCSBibGs2NF90IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqb3V0KQoreworCXJldHVybiAoZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgc3RhcnQsIG51bSwgb3V0KSk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iaXRvcHMuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JpdG9wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzI4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iaXRvcHMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIGJpdG9wcy5jIC0tLSBCaXRtYXAgZnJvYmJpbmcgY29kZS4gIFNlZSBiaXRvcHMuaCBmb3IgdGhlIGlubGluZWQKKyAqIAlyb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWZuZGVmIF9FWFQyX0hBVkVfQVNNX0JJVE9QU18KKworLyoKKyAqIEZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB3aG8gYXJlIHRyeWluZyB0byBwb3J0IExpbnV4IHRvIGFub3RoZXIKKyAqIGFyY2hpdGVjdHVyZSwgaGVyZSBhcmUgc29tZSBDLWxhbmd1YWdlIGVxdWl2YWxlbnRzLiAgWW91IHNob3VsZAorICogcmVjb2RlIHRoZXNlIGluIHRoZSBuYXRpdmUgYXNzbWVibHkgbGFuZ3VhZ2UsIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAqCisgKiBDIGxhbmd1YWdlIGVxdWl2YWxlbnRzIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbywgOS8yNi85Mi4KKyAqIE1vZGlmaWVkIGJ5IFBldGUgQS4gWmFpdGNldiA3LzE0Lzk1IHRvIGJlIHBvcnRhYmxlIHRvIGJpZyBlbmRpYW4KKyAqIHN5c3RlbXMsIGFzIHdlbGwgYXMgbm9uLTMyIGJpdCBzeXN0ZW1zLgorICovCisKK2ludCBleHQyZnNfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gbWFzayAmICpBRERSOworCSpBRERSIHw9IG1hc2s7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGV4dDJmc19jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcikKK3sKKwlpbnQJCW1hc2ssIHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR2YWwgPSBtYXNrICYgKkFERFI7CisJKkFERFIgJj0gfm1hc2s7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGV4dDJmc190ZXN0X2JpdCh1bnNpZ25lZCBpbnQgbnIsIGNvbnN0IHZvaWQgKiBhZGRyKQoreworCWludAkJCW1hc2s7CisJY29uc3QgdW5zaWduZWQgY2hhcgkqQUREUiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dXJuIChtYXNrICYgKkFERFIpOworfQorCisjZW5kaWYJLyogIV9FWFQyX0hBVkVfQVNNX0JJVE9QU18gKi8KKwordm9pZCBleHQyZnNfd2Fybl9iaXRtYXAoZXJyY29kZV90IGVycmNvZGUsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJY29uc3QgY2hhciAqZGVzY3JpcHRpb24pCit7CisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCWlmIChkZXNjcmlwdGlvbikKKwkJY29tX2VycigwLCBlcnJjb2RlLCAiIyVsdSBmb3IgJXMiLCBhcmcsIGRlc2NyaXB0aW9uKTsKKwllbHNlCisJCWNvbV9lcnIoMCwgZXJyY29kZSwgIiMlbHUiLCBhcmcpOworI2VuZGlmCit9CisKKy8qCisgKiBDLW9ubHkgNjQgYml0IG9wcy4KKyAqLworCitpbnQgZXh0MmZzX3NldF9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gbWFzayAmICpBRERSOworCSpBRERSIHw9IG1hc2s7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGV4dDJmc19jbGVhcl9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJaW50CQltYXNrLCByZXR2YWw7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CisJcmV0dmFsID0gbWFzayAmICpBRERSOworCSpBRERSICY9IH5tYXNrOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBleHQyZnNfdGVzdF9iaXQ2NChfX3U2NCBuciwgY29uc3Qgdm9pZCAqIGFkZHIpCit7CisJaW50CQkJbWFzazsKKwljb25zdCB1bnNpZ25lZCBjaGFyCSpBRERSID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwltYXNrID0gMSA8PCAobnIgJiAweDA3KTsKKwlyZXR1cm4gKG1hc2sgJiAqQUREUik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9wY291bnQ4KHVuc2lnbmVkIGludCB3KQoreworCXVuc2lnbmVkIGludCByZXMgPSB3IC0gKCh3ID4+IDEpICYgMHg1NSk7CisJcmVzID0gKHJlcyAmIDB4MzMpICsgKChyZXMgPj4gMikgJiAweDMzKTsKKwlyZXR1cm4gKHJlcyArIChyZXMgPj4gNCkpICYgMHgwRjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwb3Bjb3VudDMyKHVuc2lnbmVkIGludCB3KQoreworCXVuc2lnbmVkIGludCByZXMgPSB3IC0gKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CisJcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKKwlyZXMgPSAocmVzICsgKHJlcyA+PiA0KSkgJiAweDBGMEYwRjBGOworCXJlcyA9IHJlcyArIChyZXMgPj4gOCk7CisJcmV0dXJuIChyZXMgKyAocmVzID4+IDE2KSkgJiAweDAwMDAwMEZGOworfQorCit1bnNpZ25lZCBpbnQgZXh0MmZzX2JpdGNvdW50KGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBhZGRyOworCWNvbnN0IF9fdTMyICpwOworCXVuc2lnbmVkIGludCByZXMgPSAwOworCisJd2hpbGUgKCgoKCh1bnNpZ25lZCBsb25nKSBjcCkgJiAzKSAhPSAwKSAmJiAobmJ5dGVzID4gMCkpIHsKKwkJcmVzICs9IHBvcGNvdW50OCgqY3ArKyk7CisJCW5ieXRlcy0tOworCX0KKwlwID0gKGNvbnN0IF9fdTMyICopIGNwOworCisJd2hpbGUgKG5ieXRlcyA+IDQpIHsKKwkJcmVzICs9IHBvcGNvdW50MzIoKnArKyk7CisJCW5ieXRlcyAtPSA0OworCX0KKwljcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHA7CisKKwl3aGlsZSAobmJ5dGVzID4gMCkgeworCQlyZXMgKz0gcG9wY291bnQ4KCpjcCsrKTsKKwkJbmJ5dGVzLS07CisJfQorCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iaXRvcHMuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlODEzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9iaXRvcHMuaApAQCAtMCwwICsxLDY2MCBAQAorLyoKKyAqIGJpdG9wcy5oIC0tLSBCaXRtYXAgZnJvYmJpbmcgY29kZS4gIFRoZSBieXRlIHN3YXBwaW5nIHJvdXRpbmVzIGFyZQorICogCWFsc28gaW5jbHVkZWQgaGVyZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgZXh0MmZzX2NwdV90b19sZTY0KHgpIGV4dDJmc19zd2FiNjQoKHgpKQorI2RlZmluZSBleHQyZnNfbGU2NF90b19jcHUoeCkgZXh0MmZzX3N3YWI2NCgoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fbGUzMih4KSBleHQyZnNfc3dhYjMyKCh4KSkKKyNkZWZpbmUgZXh0MmZzX2xlMzJfdG9fY3B1KHgpIGV4dDJmc19zd2FiMzIoKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2xlMTYoeCkgZXh0MmZzX3N3YWIxNigoeCkpCisjZGVmaW5lIGV4dDJmc19sZTE2X3RvX2NwdSh4KSBleHQyZnNfc3dhYjE2KCh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19iZTY0KHgpICgoX191NjQpKHgpKQorI2RlZmluZSBleHQyZnNfYmU2NF90b19jcHUoeCkgKChfX3U2NCkoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fYmUzMih4KSAoKF9fdTMyKSh4KSkKKyNkZWZpbmUgZXh0MmZzX2JlMzJfdG9fY3B1KHgpICgoX191MzIpKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2JlMTYoeCkgKChfX3UxNikoeCkpCisjZGVmaW5lIGV4dDJmc19iZTE2X3RvX2NwdSh4KSAoKF9fdTE2KSh4KSkKKyNlbHNlCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fbGU2NCh4KSAoKF9fdTY0KSh4KSkKKyNkZWZpbmUgZXh0MmZzX2xlNjRfdG9fY3B1KHgpICgoX191NjQpKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2xlMzIoeCkgKChfX3UzMikoeCkpCisjZGVmaW5lIGV4dDJmc19sZTMyX3RvX2NwdSh4KSAoKF9fdTMyKSh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19sZTE2KHgpICgoX191MTYpKHgpKQorI2RlZmluZSBleHQyZnNfbGUxNl90b19jcHUoeCkgKChfX3UxNikoeCkpCisjZGVmaW5lIGV4dDJmc19jcHVfdG9fYmU2NCh4KSBleHQyZnNfc3dhYjY0KCh4KSkKKyNkZWZpbmUgZXh0MmZzX2JlNjRfdG9fY3B1KHgpIGV4dDJmc19zd2FiNjQoKHgpKQorI2RlZmluZSBleHQyZnNfY3B1X3RvX2JlMzIoeCkgZXh0MmZzX3N3YWIzMigoeCkpCisjZGVmaW5lIGV4dDJmc19iZTMyX3RvX2NwdSh4KSBleHQyZnNfc3dhYjMyKCh4KSkKKyNkZWZpbmUgZXh0MmZzX2NwdV90b19iZTE2KHgpIGV4dDJmc19zd2FiMTYoKHgpKQorI2RlZmluZSBleHQyZnNfYmUxNl90b19jcHUoeCkgZXh0MmZzX3N3YWIxNigoeCkpCisjZW5kaWYKKworLyoKKyAqIEVYVDJGUyBiaXRtYXAgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorICovCisKKy8qIFN1cHBvcnQgZm9yIHNlbmRpbmcgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRoZSBpbmxpbmUgc3Vicm91dGluZXMgKi8KK2V4dGVybiBjb25zdCBjaGFyICpleHQyZnNfYmxvY2tfc3RyaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4dDJmc19pbm9kZV9zdHJpbmc7CitleHRlcm4gY29uc3QgY2hhciAqZXh0MmZzX21hcmtfc3RyaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4dDJmc191bm1hcmtfc3RyaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4dDJmc190ZXN0X3N0cmluZzsKK2V4dGVybiB2b2lkIGV4dDJmc193YXJuX2JpdG1hcChlcnJjb2RlX3QgZXJyY29kZSwgdW5zaWduZWQgbG9uZyBhcmcsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOworZXh0ZXJuIHZvaWQgZXh0MmZzX3dhcm5fYml0bWFwMihleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCWludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3NldF9iaXQodW5zaWduZWQgaW50IG5yLHZvaWQgKiBhZGRyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgbnIsIHZvaWQgKiBhZGRyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3NldF9iaXQ2NChfX3U2NCBucix2b2lkICogYWRkcik7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpOworZXh0ZXJuIF9fdTE2IGV4dDJmc19zd2FiMTYoX191MTYgdmFsKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfc3dhYjMyKF9fdTMyIHZhbCk7CitleHRlcm4gX191NjQgZXh0MmZzX3N3YWI2NChfX3U2NCB2YWwpOworCitleHRlcm4gaW50IGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwgYmxrX3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgYmxrX3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsIGJsa190IGJsb2NrKTsKKworZXh0ZXJuIGludCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwgZXh0Ml9pbm9fdCBpbm9kZSk7CisKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgIGJsa190IGJsb2NrKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBibGtfdCBibG9jayk7CitleHRlcm4gaW50IGV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgYmxrX3QgYmxvY2spOworCitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBleHQyX2lub190IGlub2RlKTsKK2V4dGVybiBibGtfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfZW5kKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBleHQyX2lub190IGV4dDJmc19nZXRfaW5vZGVfYml0bWFwX2VuZChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCk7CisKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJYmxrX3QgYmxvY2ssIGludCBudW0pOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgYmxrX3QgYmxvY2ssIGludCBudW0pOworZXh0ZXJuIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKKyNlbmRpZgorCisvKiBUaGVzZSBmdW5jdGlvbnMgcm91dGluZXMgbW92ZWQgdG8gZ2VuX2JpdG1hcC5jICovCitleHRlcm4gdm9pZCBleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgIGJsa190IGJsb2NrLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwX3JhbmdlKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgIGlub190IGlub2RlLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJIF9fdTMyIGJpdG5vKTsKK2V4dGVybiBpbnQgZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGtfdCBiaXRubyk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgYmxrX3QgYml0bm8pOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgYmxrX3QgYmxvY2ssIGludCBudW0pOworZXh0ZXJuIHZvaWQgZXh0MmZzX3NldF9iaXRtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgbWFwKTsKK2V4dGVybiBfX3UzMiBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3N0YXJ0KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIF9fdTMyIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworCisvKiA2NC1iaXQgdmVyc2lvbnMgKi8KKworI2lmZGVmIE5PX0lOTElORV9GVU5DUworZXh0ZXJuIGludCBleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgYmxrNjRfdCBibG9jayk7CitleHRlcm4gaW50IGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgYmxrNjRfdCBibG9jayk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICBibGs2NF90IGJsb2NrKTsKKworZXh0ZXJuIGludCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gaW50IGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICBleHQyX2lub190IGlub2RlKTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGs2NF90IGJsb2NrKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgIGJsazY0X3QgYmxvY2spOworZXh0ZXJuIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgYmxrNjRfdCBibG9jayk7CisKK2V4dGVybiB2b2lkIGV4dDJmc19mYXN0X21hcmtfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGV4dDJfaW5vX3QgaW5vZGUpOworZXh0ZXJuIGludCBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgZXh0Ml9pbm9fdCBpbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgIGJsazY0X3Qgc3RhcnQsCisJCQkJCQkgICAgICBibGs2NF90IGVuZCwKKwkJCQkJCSAgICAgIGJsazY0X3QgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9faW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgICAgIGV4dDJfaW5vX3Qgc3RhcnQsCisJCQkJCQkgICAgICBleHQyX2lub190IGVuZCwKKwkJCQkJCSAgICAgIGV4dDJfaW5vX3QgKm91dCk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19nZXRfYmxvY2tfYml0bWFwX2VuZDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCk7CisKK2V4dGVybiBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJYmxrNjRfdCBibG9jaywKKwkJCQkJCXVuc2lnbmVkIGludCBudW0pOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgdW5zaWduZWQgaW50IG51bSk7CitleHRlcm4gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtKTsKKyNlbmRpZgorCisvKiBUaGVzZSByb3V0aW5lcyBtb3ZlZCB0byBnZW5fYml0bWFwNjQuYyAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX2NsZWFyX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19ibWFwKGVycmNvZGVfdCBuZXEsCisJCQkJCSAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtMSwKKwkJCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0yKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zZXRfZ2VuZXJpY19ibWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApOworZXh0ZXJuIGludCBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgYmxrNjRfdCBiaXRubyk7CitleHRlcm4gaW50IGV4dDJmc191bm1hcmtfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgYmxrNjRfdCBiaXRubyk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICBibGs2NF90IGJpdG5vKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgaW50IG51bSk7CitleHRlcm4gX191NjQgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfc3RhcnQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gX191NjQgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICBibGs2NF90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBibGs2NF90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgaW50IG51bSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsCisJCQkJCQkgICAgIF9fdTY0ICpvdXQpOworCisvKgorICogVGhlIGlubGluZSByb3V0aW5lcyB0aGVtc2VsdmVzLi4uCisgKgorICogSWYgTk9fSU5MSU5FX0ZVTkNTIGlzIGRlZmluZWQsIHRoZW4gd2Ugd29uJ3QgdHJ5IHRvIGRvIGlubGluZQorICogZnVuY3Rpb25zIGF0IGFsbDsgdGhleSB3aWxsIGJlIGluY2x1ZGVkIGFzIG5vcm1hbCBmdW5jdGlvbnMgaW4KKyAqIGlubGluZS5jCisgKi8KKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKKyNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pNDg2X18pIHx8IFwKKwkJCSAgIGRlZmluZWQoX19pNTg2X18pKSkKKwkvKiBUaGlzIHByZXZlbnRzIGJpdG9wcy5jIGZyb20gdHJ5aW5nIHRvIGluY2x1ZGUgdGhlIEMgKi8KKwkvKiBmdW5jdGlvbiB2ZXJzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyAqLworI2RlZmluZSBfRVhUMl9IQVZFX0FTTV9CSVRPUFNfCisjZW5kaWYKKyNlbmRpZiAvKiBOT19JTkxJTkVfRlVOQ1MgKi8KKworI2lmIChkZWZpbmVkKElOQ0xVREVfSU5MSU5FX0ZVTkNTKSB8fCAhZGVmaW5lZChOT19JTkxJTkVfRlVOQ1MpKQorI2lmZGVmIElOQ0xVREVfSU5MSU5FX0ZVTkNTCisjaWYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2Vsc2UKKyNkZWZpbmUgX0lOTElORV8gaW5saW5lCisjZW5kaWYKKyNlbHNlIC8qICFJTkNMVURFX0lOTElORSBGVU5DUyAqLworI2lmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjZGVmaW5lIF9JTkxJTkVfIGlubGluZQorI2Vsc2UgLyogbm90IEM5OSAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybiBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisjZW5kaWYgLyogSU5DTFVERV9JTkxJTkVfRlVOQ1MgKi8KKworLyoKKyAqIEZhc3QgYml0IHNldC9jbGVhciBmdW5jdGlvbnMgdGhhdCBkb2Vzbid0IG5lZWQgdG8gcmV0dXJuIHRoZQorICogcHJldmlvdXMgYml0IHZhbHVlLgorICovCisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3Rfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgfD0gKHVuc2lnbmVkIGNoYXIpICgxIDw8IChuciAmIDB4MDcpKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyCSpBRERSID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKworCUFERFIgKz0gbnIgPj4gMzsKKwkqQUREUiAmPSAodW5zaWduZWQgY2hhcikgfigxIDw8IChuciAmIDB4MDcpKTsKK30KKworCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3NldF9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgfD0gKHVuc2lnbmVkIGNoYXIpICgxIDw8IChuciAmIDB4MDcpKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NChfX3U2NCBuciwgdm9pZCAqIGFkZHIpCit7CisJdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7CisKKwlBRERSICs9IG5yID4+IDM7CisJKkFERFIgJj0gKHVuc2lnbmVkIGNoYXIpIH4oMSA8PCAobnIgJiAweDA3KSk7Cit9CisKKworI2lmICgoZGVmaW5lZCBfX0dOVUNfXykgJiYgIWRlZmluZWQoX0VYVDJfVVNFX0NfVkVSU0lPTlNfKSAmJiBcCisgICAgIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTQ4Nl9fKSB8fCBkZWZpbmVkKF9faTU4Nl9fKSkpCisKKyNkZWZpbmUgX0VYVDJfSEFWRV9BU01fQklUT1BTXworI2RlZmluZSBfRVhUMl9IQVZFX0FTTV9TV0FCXworCisvKgorICogVGhlc2UgYXJlIGRvbmUgYnkgaW5saW5lIGFzc2VtYmx5IGZvciBzcGVlZCByZWFzb25zLi4uLi4KKyAqCisgKiBBbGwgYml0b3BlcmF0aW9ucyByZXR1cm4gMCBpZiB0aGUgYml0IHdhcyBjbGVhcmVkIGJlZm9yZSB0aGUKKyAqIG9wZXJhdGlvbiBhbmQgIT0gMCBpZiBpdCB3YXMgbm90LiAgQml0IDAgaXMgdGhlIExTQiBvZiBhZGRyOyBiaXQgMzIKKyAqIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCisgKi8KKworLyoKKyAqIFNvbWUgaGFja3MgdG8gZGVmZWF0IGdjYyBvdmVyLW9wdGltaXphdGlvbnMuLgorICovCitzdHJ1Y3QgX19kdW1teV9oIHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIEVYVDJGU19BRERSICgqKHN0cnVjdCBfX2R1bW15X2ggKikgYWRkcikKKyNkZWZpbmUgRVhUMkZTX0NPTlNUX0FERFIgKCooY29uc3Qgc3RydWN0IF9fZHVtbXlfaCAqKSBhZGRyKQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3NldF9iaXQodW5zaWduZWQgaW50IG5yLCB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYWRkciA9ICh2b2lkICopICgoKHVuc2lnbmVkIGNoYXIgKikgYWRkcikgKyAobnIgPj4gMykpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisJCToiPXIiIChvbGRiaXQpLCIrbSIgKEVYVDJGU19BRERSKQorCQk6InIiIChuciAmIDcpKTsKKwlyZXR1cm4gb2xkYml0OworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX2NsZWFyX2JpdCh1bnNpZ25lZCBpbnQgbnIsIHZvaWQgKiBhZGRyKQoreworCWludCBvbGRiaXQ7CisKKwlhZGRyID0gKHZvaWQgKikgKCgodW5zaWduZWQgY2hhciAqKSBhZGRyKSArIChuciA+PiAzKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCksIittIiAoRVhUMkZTX0FERFIpCisJCToiciIgKG5yICYgNykpOworCXJldHVybiBvbGRiaXQ7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB2b2lkICogYWRkcikKK3sKKwlpbnQgb2xkYml0OworCisJYWRkciA9IChjb25zdCB2b2lkICopICgoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYWRkcikgKyAobnIgPj4gMykpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCkKKwkJOiJtIiAoRVhUMkZTX0NPTlNUX0FERFIpLCJyIiAobnIgJiA3KSk7CisJcmV0dXJuIG9sZGJpdDsKK30KKworX0lOTElORV8gX191MzIgZXh0MmZzX3N3YWIzMihfX3UzMiB2YWwpCit7CisjaWZkZWYgRVhUMkZTX1JFUVVJUkVfNDg2CisJX19hc21fXygiYnN3YXAgJTAiIDogIj1yIiAodmFsKSA6ICIwIiAodmFsKSk7CisjZWxzZQorCV9fYXNtX18oInhjaGdiICViMCwlaDBcblx0IgkvKiBzd2FwIGxvd2VyIGJ5dGVzCSovCisJCSJyb3JsICQxNiwlMFxuXHQiCS8qIHN3YXAgd29yZHMJCSovCisJCSJ4Y2hnYiAlYjAsJWgwIgkJLyogc3dhcCBoaWdoZXIgYnl0ZXMJKi8KKwkJOiI9cSIgKHZhbCkKKwkJOiAiMCIgKHZhbCkpOworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworX0lOTElORV8gX191MTYgZXh0MmZzX3N3YWIxNihfX3UxNiB2YWwpCit7CisJX19hc21fXygieGNoZ2IgJWIwLCVoMCIJCS8qIHN3YXAgYnl0ZXMJCSovIFwKKwkJOiAiPXEiICh2YWwpIFwKKwkJOiAgIjAiICh2YWwpKTsgXAorCQlyZXR1cm4gdmFsOworfQorCisjdW5kZWYgRVhUMkZTX0FERFIKKworI2VuZGlmCS8qIGkzODYgKi8KKworCisjaWYgIWRlZmluZWQoX0VYVDJfSEFWRV9BU01fU1dBQl8pCisKK19JTkxJTkVfIF9fdTE2IGV4dDJmc19zd2FiMTYoX191MTYgdmFsKQoreworCXJldHVybiAodmFsID4+IDgpIHwgKF9fdTE2KSAodmFsIDw8IDgpOworfQorCitfSU5MSU5FXyBfX3UzMiBleHQyZnNfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlyZXR1cm4gKCh2YWw+PjI0KSB8ICgodmFsPj44KSYweEZGMDApIHwKKwkJKCh2YWw8PDgpJjB4RkYwMDAwKSB8ICh2YWw8PDI0KSk7Cit9CisKKyNlbmRpZiAvKiAhX0VYVDJfSEFWRV9BU01fU1dBQiAqLworCitfSU5MSU5FXyBfX3U2NCBleHQyZnNfc3dhYjY0KF9fdTY0IHZhbCkKK3sKKwlyZXR1cm4gKGV4dDJmc19zd2FiMzIoKF9fdTMyKSAodmFsID4+IDMyKSkgfAorCQkoKChfX3U2NClleHQyZnNfc3dhYjMyKHZhbCAmIDB4RkZGRkZGRkZVTCkpIDw8IDMyKSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfbWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBibGtfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgICBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgaW5vZGUpOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkgICAgIGlub2RlKTsKK30KKworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkgIGlub2RlKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGJsa190IGJsb2NrKQoreworCWV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwgYmxvY2spOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3VubWFya19ibG9ja19iaXRtYXAoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgIGJsa190IGJsb2NrKQoreworCWV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGJsa190IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgYmxvY2spOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGlub2RlKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICBleHQyX2lub190IGlub2RlKQoreworCWV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBpbm9kZSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkgIGlub2RlKTsKK30KKworX0lOTElORV8gYmxrX3QgZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfc3RhcnQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfc3RhcnQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9zdGFydChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCkKK3sKKwlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9zdGFydCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXApOworfQorCitfSU5MSU5FXyBibGtfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfZW5kKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX2VuZCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXApOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX2Zhc3RfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgYmxrX3QgYmxvY2ssIGludCBudW0pCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZShiaXRtYXAsIGJsb2NrLCBudW0pOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICBibGtfdCBibG9jaywgaW50IG51bSkKK3sKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UoYml0bWFwLCBibG9jaywgbnVtKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkJICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKQoreworCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKKy8qIDY0LWJpdCB2ZXJzaW9ucyAqLworCitfSU5MSU5FXyBpbnQgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgYmxrNjRfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJYmxvY2spOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgYmxrNjRfdCBibG9jaykKK3sKKwlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBibGs2NF90IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgICBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlpbm9kZSk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSBleHQyX2lub190IGlub2RlKQoreworCXJldHVybiBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCSAgaW5vZGUpOworfQorCitfSU5MSU5FXyBpbnQgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJaW5vZGUpOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X21hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICBibGs2NF90IGJsb2NrKQoreworCWV4dDJmc19tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGJsb2NrKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF91bm1hcmtfYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIGJsazY0X3QgYmxvY2spCit7CisJZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLCBibG9jayk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICBibGs2NF90IGJsb2NrKQoreworCXJldHVybiBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQlibG9jayk7Cit9CisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3RfbWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgIGV4dDJfaW5vX3QgaW5vZGUpCit7CisJZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwgaW5vZGUpOworfQorCitfSU5MSU5FXyB2b2lkIGV4dDJmc19mYXN0X3VubWFya19pbm9kZV9iaXRtYXAyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgZXh0Ml9pbm9fdCBpbm9kZSkKK3sKKwlleHQyZnNfdW5tYXJrX2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsIGlub2RlKTsKK30KKworX0lOTElORV8gaW50IGV4dDJmc19mYXN0X3Rlc3RfaW5vZGVfYml0bWFwMihleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgIGV4dDJfaW5vX3QgaW5vZGUpCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcCgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBiaXRtYXAsCisJCQkJCWlub2RlKTsKK30KKworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJCQlibGs2NF90IHN0YXJ0LAorCQkJCQkJCWJsazY0X3QgZW5kLAorCQkJCQkJCWJsazY0X3QgKm91dCkKK3sKKwlfX3U2NCBvOworCWVycmNvZGVfdCBydjsKKworCXJ2ID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwLAorCQkJCQkJIHN0YXJ0LCBlbmQsICZvKTsKKwlpZiAoIXJ2KQorCQkqb3V0ID0gbzsKKwlyZXR1cm4gcnY7Cit9CisKK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkJZXh0Ml9pbm9fdCBzdGFydCwKKwkJCQkJCQlleHQyX2lub190IGVuZCwKKwkJCQkJCQlleHQyX2lub190ICpvdXQpCit7CisJX191NjQgbzsKKwllcnJjb2RlX3QgcnY7CisKKwlydiA9IGV4dDJmc19maW5kX2ZpcnN0X3plcm9fZ2VuZXJpY19ibWFwKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCwKKwkJCQkJCSBzdGFydCwgZW5kLCAmbyk7CisJaWYgKCFydikKKwkJKm91dCA9IChleHQyX2lub190KSBvOworCXJldHVybiBydjsKK30KKworX0lOTElORV8gYmxrNjRfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9zdGFydDIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApCit7CisJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3N0YXJ0KChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfc3RhcnQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiAoZXh0Ml9pbm9fdCkgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfc3RhcnQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gYmxrNjRfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9lbmQyKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKQoreworCXJldHVybiBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9lbmQoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYml0bWFwKTsKK30KKworX0lOTElORV8gZXh0Ml9pbm9fdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9lbmQyKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKQoreworCXJldHVybiAoZXh0Ml9pbm9fdCkgZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJpdG1hcCk7Cit9CisKK19JTkxJTkVfIGludCBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgIHVuc2lnbmVkIGludCBudW0pCit7CisJcmV0dXJuIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoYml0bWFwLCBibG9jaywgbnVtKTsKK30KKworX0lOTElORV8gdm9pZCBleHQyZnNfZmFzdF9tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICBibGs2NF90IGJsb2NrLAorCQkJCQkJICAgdW5zaWduZWQgaW50IG51bSkKK3sKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKK19JTkxJTkVfIHZvaWQgZXh0MmZzX2Zhc3RfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgIGJsazY0X3QgYmxvY2ssCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGJpdG1hcCwgYmxvY2ssIG51bSk7Cit9CisKKyN1bmRlZiBfSU5MSU5FXworI2VuZGlmCisKKyNpZm5kZWYgX0VYVDJfSEFWRV9BU01fQklUT1BTXworZXh0ZXJuIGludCBleHQyZnNfc2V0X2JpdCh1bnNpZ25lZCBpbnQgbnIsdm9pZCAqIGFkZHIpOworZXh0ZXJuIGludCBleHQyZnNfY2xlYXJfYml0KHVuc2lnbmVkIGludCBuciwgdm9pZCAqIGFkZHIpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB2b2lkICogYWRkcik7CisjZW5kaWYKKworZXh0ZXJuIGludCBleHQyZnNfc2V0X2JpdDY0KF9fdTY0IG5yLHZvaWQgKiBhZGRyKTsKK2V4dGVybiBpbnQgZXh0MmZzX2NsZWFyX2JpdDY0KF9fdTY0IG5yLCB2b2lkICogYWRkcik7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2JpdDY0KF9fdTY0IG5yLCBjb25zdCB2b2lkICogYWRkcik7CitleHRlcm4gdW5zaWduZWQgaW50IGV4dDJmc19iaXRjb3VudChjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Jsa21hcDY0X2JhLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibGttYXA2NF9iYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWYzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibGttYXA2NF9iYS5jCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogYmxrbWFwNjRfYmEuYyAtLS0gU2ltcGxlIGJpdGFycmF5IGltcGxlbWVudGF0aW9uIGZvciBiaXRtYXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorI2luY2x1ZGUgImJtYXA2NC5oIgorCisvKgorICogUHJpdmF0ZSBkYXRhIGZvciBiaXQgYXJyYXkgaW1wbGVtZW50YXRpb24gb2YgYml0bWFwIG9wcy4KKyAqIEN1cnJlbnRseSwgdGhpcyBpcyBqdXN0IGEgcG9pbnRlciB0byBvdXIgYmlnIGZsYXQgaHVuayBvZiBtZW1vcnksCisgKiBleGFjdGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZC1za29vbCBjaGFyICogYml0bWFwIG1lbWJlci4KKyAqLworCitzdHJ1Y3QgZXh0MmZzX2JhX3ByaXZhdGVfc3RydWN0IHsKKwljaGFyICpiaXRhcnJheTsKK307CisKK3R5cGVkZWYgc3RydWN0IGV4dDJmc19iYV9wcml2YXRlX3N0cnVjdCAqZXh0MmZzX2JhX3ByaXZhdGU7CisKK3N0YXRpYyBlcnJjb2RlX3QgYmFfYWxsb2NfcHJpdmF0ZV9kYXRhIChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwOworCWVycmNvZGVfdAlyZXR2YWw7CisJc2l6ZV90CQlzaXplOworCisJLyoKKwkgKiBTaW5jZSB3ZSBvbmx5IGhhdmUgdGhlIG9uZSBwb2ludGVyLCB3ZSBjb3VsZCBqdXN0IHNob3ZlIG91cgorCSAqIHByaXZhdGUgZGF0YSBpbiB0aGUgdm9pZCAqcHJpdmF0ZSBmaWVsZCBpdHNlbGYsIGJ1dCB0aGVuCisJICogd2UnZCBoYXZlIHRvIGRvIGEgZmFpciBiaXQgb2YgcmV3cml0aW5nIGlmIHdlIGV2ZXIgYWRkZWQgYQorCSAqIGZpZWxkLiAgSSdtIGFnbm9zdGljLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZiAoZXh0MmZzX2JhX3ByaXZhdGUpLCAmYnApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlzaXplID0gKHNpemVfdCkgKCgoYml0bWFwLT5yZWFsX2VuZCAtIGJpdG1hcC0+c3RhcnQpIC8gOCkgKyAxKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemUsICZicC0+Yml0YXJyYXkpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZicCk7CisJCWJwID0gMDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJYml0bWFwLT5wcml2YXRlID0gKHZvaWQgKikgYnA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYmFfbmV3X2JtYXAoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwOworCWVycmNvZGVfdAlyZXR2YWw7CisJc2l6ZV90CQlzaXplOworCisJcmV0dmFsID0gYmFfYWxsb2NfcHJpdmF0ZV9kYXRhIChiaXRtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlicCA9IChleHQyZnNfYmFfcHJpdmF0ZSkgYml0bWFwLT5wcml2YXRlOworCXNpemUgPSAoc2l6ZV90KSAoKChiaXRtYXAtPnJlYWxfZW5kIC0gYml0bWFwLT5zdGFydCkgLyA4KSArIDEpOworCW1lbXNldChicC0+Yml0YXJyYXksIDAsIHNpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJhX2ZyZWVfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwID0gKGV4dDJmc19iYV9wcml2YXRlKSBiaXRtYXAtPnByaXZhdGU7CisKKwlpZiAoIWJwKQorCQlyZXR1cm47CisKKwlpZiAoYnAtPmJpdGFycmF5KSB7CisJCWV4dDJmc19mcmVlX21lbSAoJmJwLT5iaXRhcnJheSk7CisJCWJwLT5iaXRhcnJheSA9IDA7CisJfQorCWV4dDJmc19mcmVlX21lbSAoJmJwKTsKKwlicCA9IDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYmFfY29weV9ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgZGVzdCkKK3sKKwlleHQyZnNfYmFfcHJpdmF0ZSBzcmNfYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIHNyYy0+cHJpdmF0ZTsKKwlleHQyZnNfYmFfcHJpdmF0ZSBkZXN0X2JwOworCWVycmNvZGVfdCByZXR2YWw7CisJc2l6ZV90IHNpemU7CisKKwlyZXR2YWwgPSBiYV9hbGxvY19wcml2YXRlX2RhdGEgKGRlc3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlkZXN0X2JwID0gKGV4dDJmc19iYV9wcml2YXRlKSBkZXN0LT5wcml2YXRlOworCisJc2l6ZSA9IChzaXplX3QpICgoKHNyYy0+cmVhbF9lbmQgLSBzcmMtPnN0YXJ0KSAvIDgpICsgMSk7CisJbWVtY3B5IChkZXN0X2JwLT5iaXRhcnJheSwgc3JjX2JwLT5iaXRhcnJheSwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBiYV9yZXNpemVfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQlfX3U2NCBuZXdfZW5kLCBfX3U2NCBuZXdfcmVhbF9lbmQpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJtYXAtPnByaXZhdGU7CisJZXJyY29kZV90CXJldHZhbDsKKwlzaXplX3QJCXNpemUsIG5ld19zaXplOworCV9fdTY0CQliaXRubzsKKworCS8qCisJICogSWYgd2UncmUgZXhwYW5kaW5nIHRoZSBiaXRtYXAsIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIG5ldworCSAqIHBhcnRzIG9mIHRoZSBiaXRtYXAgYXJlIHplcm8uCisJICovCisJaWYgKG5ld19lbmQgPiBibWFwLT5lbmQpIHsKKwkJYml0bm8gPSBibWFwLT5yZWFsX2VuZDsKKwkJaWYgKGJpdG5vID4gbmV3X2VuZCkKKwkJCWJpdG5vID0gbmV3X2VuZDsKKwkJZm9yICg7IGJpdG5vID4gYm1hcC0+ZW5kOyBiaXRuby0tKQorCQkJZXh0MmZzX2NsZWFyX2JpdDY0KGJpdG5vIC0gYm1hcC0+c3RhcnQsIGJwLT5iaXRhcnJheSk7CisJfQorCWlmIChuZXdfcmVhbF9lbmQgPT0gYm1hcC0+cmVhbF9lbmQpIHsKKwkJYm1hcC0+ZW5kID0gbmV3X2VuZDsKKwkJcmV0dXJuIDA7CisJfQorCisJc2l6ZSA9ICgoYm1hcC0+cmVhbF9lbmQgLSBibWFwLT5zdGFydCkgLyA4KSArIDE7CisJbmV3X3NpemUgPSAoKG5ld19yZWFsX2VuZCAtIGJtYXAtPnN0YXJ0KSAvIDgpICsgMTsKKworCWlmIChzaXplICE9IG5ld19zaXplKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfbWVtKHNpemUsIG5ld19zaXplLCAmYnAtPmJpdGFycmF5KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChuZXdfc2l6ZSA+IHNpemUpCisJCW1lbXNldChicC0+Yml0YXJyYXkgKyBzaXplLCAwLCBuZXdfc2l6ZSAtIHNpemUpOworCisJYm1hcC0+ZW5kID0gbmV3X2VuZDsKKwlibWFwLT5yZWFsX2VuZCA9IG5ld19yZWFsX2VuZDsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGJhX21hcmtfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJpdG1hcC0+cHJpdmF0ZTsKKwlibGs2NF90IGJpdG5vID0gKGJsazY0X3QpIGFyZzsKKworCXJldHVybiBleHQyZnNfc2V0X2JpdDY0KGJpdG5vIC0gYml0bWFwLT5zdGFydCwgYnAtPmJpdGFycmF5KTsKK30KKworc3RhdGljIGludCBiYV91bm1hcmtfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJpdG1hcC0+cHJpdmF0ZTsKKwlibGs2NF90IGJpdG5vID0gKGJsazY0X3QpIGFyZzsKKworCXJldHVybiBleHQyZnNfY2xlYXJfYml0NjQoYml0bm8gLSBiaXRtYXAtPnN0YXJ0LCBicC0+Yml0YXJyYXkpOworfQorCitzdGF0aWMgaW50IGJhX3Rlc3RfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJpdG1hcC0+cHJpdmF0ZTsKKwlibGs2NF90IGJpdG5vID0gKGJsazY0X3QpIGFyZzsKKworCXJldHVybiBleHQyZnNfdGVzdF9iaXQ2NChiaXRubyAtIGJpdG1hcC0+c3RhcnQsIGJwLT5iaXRhcnJheSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhX21hcmtfYm1hcF9leHRlbnQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnLAorCQkJCXVuc2lnbmVkIGludCBudW0pCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJpdG1hcC0+cHJpdmF0ZTsKKwlibGs2NF90IGJpdG5vID0gKGJsazY0X3QpIGFyZzsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0KGJpdG5vICsgaSAtIGJpdG1hcC0+c3RhcnQsIGJwLT5iaXRhcnJheSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhX3VubWFya19ibWFwX2V4dGVudChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcsCisJCQkJICB1bnNpZ25lZCBpbnQgbnVtKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwID0gKGV4dDJmc19iYV9wcml2YXRlKSBiaXRtYXAtPnByaXZhdGU7CisJYmxrNjRfdCBiaXRubyA9IChibGs2NF90KSBhcmc7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCWV4dDJmc19mYXN0X2NsZWFyX2JpdDY0KGJpdG5vICsgaSAtIGJpdG1hcC0+c3RhcnQsIGJwLT5iaXRhcnJheSk7Cit9CisKK3N0YXRpYyBpbnQgYmFfdGVzdF9jbGVhcl9ibWFwX2V4dGVudChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpIGJpdG1hcC0+cHJpdmF0ZTsKKwlfX3U2NCBzdGFydF9ieXRlLCBsZW5fYnl0ZSA9IGxlbiA+PiAzOworCXVuc2lnbmVkIGludCBzdGFydF9iaXQsIGxlbl9iaXQgPSBsZW4gJSA4OworCXVuc2lnbmVkIGludCBmaXJzdF9iaXQgPSAwOworCXVuc2lnbmVkIGludCBsYXN0X2JpdCAgPSAwOworCWludCBtYXJrX2NvdW50ID0gMDsKKwlpbnQgbWFya19iaXQgPSAwOworCWludCBpOworCWNvbnN0IGNoYXIgKkFERFI7CisKKwlBRERSID0gYnAtPmJpdGFycmF5OworCXN0YXJ0IC09IGJpdG1hcC0+c3RhcnQ7CisJc3RhcnRfYnl0ZSA9IHN0YXJ0ID4+IDM7CisJc3RhcnRfYml0ID0gc3RhcnQgJSA4OworCisJaWYgKHN0YXJ0X2JpdCAhPSAwKSB7CisJCS8qCisJCSAqIFRoZSBjb21wYXJlZCBzdGFydCBibG9jayBudW1iZXIgb3Igc3RhcnQgaW5vZGUgbnVtYmVyCisJCSAqIGlzIG5vdCB0aGUgZmlyc3QgYml0IGluIGEgYnl0ZS4KKwkJICovCisJCW1hcmtfY291bnQgPSA4IC0gc3RhcnRfYml0OworCQlpZiAobGVuIDwgOCAtIHN0YXJ0X2JpdCkgeworCQkJbWFya19jb3VudCA9IChpbnQpbGVuOworCQkJbWFya19iaXQgPSBsZW4gKyBzdGFydF9iaXQgLSAxOworCQl9IGVsc2UKKwkJCW1hcmtfYml0ID0gNzsKKworCQlmb3IgKGkgPSBtYXJrX2NvdW50OyBpID4gMDsgaS0tLCBtYXJrX2JpdC0tKQorCQkJZmlyc3RfYml0IHw9IDEgPDwgbWFya19iaXQ7CisKKwkJLyoKKwkJICogQ29tcGFyZSBibG9ja3Mgb3IgaW5vZGVzIGluIHRoZSBmaXJzdCBieXRlLgorCQkgKiBJZiB0aGVyZSBpcyBhbnkgbWFya2VkIGJpdCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCisJCSAqLworCQlpZiAoZmlyc3RfYml0ICYgQUREUltzdGFydF9ieXRlXSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChsZW4gPD0gOCAtIHN0YXJ0X2JpdCkKKwkJCXJldHVybiAxOworCisJCXN0YXJ0X2J5dGUrKzsKKwkJbGVuX2JpdCA9IChsZW4gLSBtYXJrX2NvdW50KSAlIDg7CisJCWxlbl9ieXRlID0gKGxlbiAtIG1hcmtfY291bnQpID4+IDM7CisJfQorCisJLyoKKwkgKiBUaGUgY29tcGFyZWQgc3RhcnQgYmxvY2sgbnVtYmVyIG9yIHN0YXJ0IGlub2RlIG51bWJlciBpcworCSAqIHRoZSBmaXJzdCBiaXQgaW4gYSBieXRlLgorCSAqLworCWlmIChsZW5fYml0ICE9IDApIHsKKwkJLyoKKwkJICogVGhlIGNvbXBhcmVkIGVuZCBibG9jayBudW1iZXIgb3IgZW5kIGlub2RlIG51bWJlciBpcworCQkgKiBub3QgdGhlIGxhc3QgYml0IGluIGEgYnl0ZS4KKwkJICovCisJCWZvciAobWFya19iaXQgPSBsZW5fYml0IC0gMTsgbWFya19iaXQgPj0gMDsgbWFya19iaXQtLSkKKwkJCWxhc3RfYml0IHw9IDEgPDwgbWFya19iaXQ7CisKKwkJLyoKKwkJICogQ29tcGFyZSBibG9ja3Mgb3IgaW5vZGVzIGluIHRoZSBsYXN0IGJ5dGUuCisJCSAqIElmIHRoZXJlIGlzIGFueSBtYXJrZWQgYml0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4KKwkJICovCisJCWlmIChsYXN0X2JpdCAmIEFERFJbc3RhcnRfYnl0ZSArIGxlbl9ieXRlXSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChsZW5fYnl0ZSA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBhbGwgYnl0ZXMgYXJlIDAgKi8KKwlyZXR1cm4gZXh0MmZzX21lbV9pc196ZXJvKEFERFIgKyBzdGFydF9ieXRlLCBsZW5fYnl0ZSk7Cit9CisKKworc3RhdGljIGVycmNvZGVfdCBiYV9zZXRfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgX191NjQgc3RhcnQsIHNpemVfdCBudW0sIHZvaWQgKmluKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwID0gKGV4dDJmc19iYV9wcml2YXRlKSBiaXRtYXAtPnByaXZhdGU7CisKKwltZW1jcHkgKGJwLT5iaXRhcnJheSArIChzdGFydCA+PiAzKSwgaW4sIChudW0gKyA3KSA+PiAzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJhX2dldF9ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwgdm9pZCAqb3V0KQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwID0gKGV4dDJmc19iYV9wcml2YXRlKSBiaXRtYXAtPnByaXZhdGU7CisKKwltZW1jcHkgKG91dCwgYnAtPmJpdGFycmF5ICsgKHN0YXJ0ID4+IDMpLCAobnVtICsgNykgPj4gMyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmFfY2xlYXJfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWV4dDJmc19iYV9wcml2YXRlIGJwID0gKGV4dDJmc19iYV9wcml2YXRlKSBiaXRtYXAtPnByaXZhdGU7CisKKwltZW1zZXQoYnAtPmJpdGFycmF5LCAwLAorCSAgICAgICAoc2l6ZV90KSAoKChiaXRtYXAtPnJlYWxfZW5kIC0gYml0bWFwLT5zdGFydCkgLyA4KSArIDEpKTsKK30KKworc3RhdGljIHZvaWQgYmFfcHJpbnRfc3RhdHMoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiUxNmxsdSBCeXRlcyB1c2VkIGJ5IGJpdGFycmF5XG4iLAorCQkoKGJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KSA+PiAzKSArIDEgKworCQlzaXplb2Yoc3RydWN0IGV4dDJmc19iYV9wcml2YXRlX3N0cnVjdCkpOworfQorCisvKiBGaW5kIHRoZSBmaXJzdCB6ZXJvIGJpdCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQsIGluY2x1c2l2ZS4gKi8KK3N0YXRpYyBlcnJjb2RlX3QgYmFfZmluZF9maXJzdF96ZXJvKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsIF9fdTY0ICpvdXQpCit7CisJZXh0MmZzX2JhX3ByaXZhdGUgYnAgPSAoZXh0MmZzX2JhX3ByaXZhdGUpYml0bWFwLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgYml0cG9zID0gc3RhcnQgLSBiaXRtYXAtPnN0YXJ0OworCXVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisJaW50IGJ5dGVfZm91bmQgPSAwOyAvKiB3aGV0aGVyIGEgIT0gMHhmZiBieXRlIGhhcyBiZWVuIGZvdW5kICovCisJY29uc3QgdW5zaWduZWQgY2hhciAqcG9zOworCXVuc2lnbmVkIGxvbmcgbWF4X2xvb3BfY291bnQsIGk7CisKKwlpZiAoc3RhcnQgPCBiaXRtYXAtPnN0YXJ0IHx8IGVuZCA+IGJpdG1hcC0+ZW5kIHx8IHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKGJpdG1hcC0+Y2x1c3Rlcl9iaXRzKQorCQlyZXR1cm4gRUlOVkFMOworCisJLyogc2NhbiBiaXRzIHVudGlsIHdlIGhpdCBhIGJ5dGUgYm91bmRhcnkgKi8KKwl3aGlsZSAoKGJpdHBvcyAmIDB4NykgIT0gMCAmJiBjb3VudCA+IDApIHsKKwkJaWYgKCFleHQyZnNfdGVzdF9iaXQ2NChiaXRwb3MsIGJwLT5iaXRhcnJheSkpIHsKKwkJCSpvdXQgPSBiaXRwb3MgKyBiaXRtYXAtPnN0YXJ0OworCQkJcmV0dXJuIDA7CisJCX0KKwkJYml0cG9zKys7CisJCWNvdW50LS07CisJfQorCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIEVOT0VOVDsKKworCXBvcyA9ICgodW5zaWduZWQgY2hhciAqKWJwLT5iaXRhcnJheSkgKyAoYml0cG9zID4+IDMpOworCS8qIHNjYW4gYnl0ZXMgdW50aWwgOC1ieXRlICg2NC1iaXQpIGFsaWduZWQgKi8KKwl3aGlsZSAoY291bnQgPj0gOCAmJiAoKCh1bnNpZ25lZCBsb25nKXBvcykgJiAweDA3KSkgeworCQlpZiAoKnBvcyAhPSAweGZmKSB7CisJCQlieXRlX2ZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXBvcysrOworCQljb3VudCAtPSA4OworCQliaXRwb3MgKz0gODsKKwl9CisKKwlpZiAoIWJ5dGVfZm91bmQpIHsKKwkJbWF4X2xvb3BfY291bnQgPSBjb3VudCA+PiA2OyAvKiA4LWJ5dGUgYmxvY2tzICovCisJCWkgPSBtYXhfbG9vcF9jb3VudDsKKwkJd2hpbGUgKGkpIHsKKwkJCWlmICgqKChjb25zdCBfX3U2NCAqKXBvcykgIT0gKChfX3U2NCktMSkpCisJCQkJYnJlYWs7CisJCQlwb3MgKz0gODsKKwkJCWktLTsKKwkJfQorCQljb3VudCAtPSA2NCAqIChtYXhfbG9vcF9jb3VudCAtIGkpOworCQliaXRwb3MgKz0gNjQgKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKworCQltYXhfbG9vcF9jb3VudCA9IGNvdW50ID4+IDM7CisJCWkgPSBtYXhfbG9vcF9jb3VudDsKKwkJd2hpbGUgKGkpIHsKKwkJCWlmICgqcG9zICE9IDB4ZmYpIHsKKwkJCQlieXRlX2ZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBvcysrOworCQkJaS0tOworCQl9CisJCWNvdW50IC09IDggKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKwkJYml0cG9zICs9IDggKiAobWF4X2xvb3BfY291bnQgLSBpKTsKKwl9CisKKwkvKiBIZXJlIGVpdGhlciBjb3VudCA8IDggb3IgYnl0ZV9mb3VuZCA9PSAxLiAqLworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoIWV4dDJmc190ZXN0X2JpdDY0KGJpdHBvcywgYnAtPmJpdGFycmF5KSkgeworCQkJKm91dCA9IGJpdHBvcyArIGJpdG1hcC0+c3RhcnQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQliaXRwb3MrKzsKKwl9CisKKwlyZXR1cm4gRU5PRU5UOworfQorCitzdHJ1Y3QgZXh0Ml9iaXRtYXBfb3BzIGV4dDJmc19ibGttYXA2NF9iaXRhcnJheSA9IHsKKwkudHlwZSA9IEVYVDJGU19CTUFQNjRfQklUQVJSQVksCisJLm5ld19ibWFwID0gYmFfbmV3X2JtYXAsCisJLmZyZWVfYm1hcCA9IGJhX2ZyZWVfYm1hcCwKKwkuY29weV9ibWFwID0gYmFfY29weV9ibWFwLAorCS5yZXNpemVfYm1hcCA9IGJhX3Jlc2l6ZV9ibWFwLAorCS5tYXJrX2JtYXAgPSBiYV9tYXJrX2JtYXAsCisJLnVubWFya19ibWFwID0gYmFfdW5tYXJrX2JtYXAsCisJLnRlc3RfYm1hcCA9IGJhX3Rlc3RfYm1hcCwKKwkudGVzdF9jbGVhcl9ibWFwX2V4dGVudCA9IGJhX3Rlc3RfY2xlYXJfYm1hcF9leHRlbnQsCisJLm1hcmtfYm1hcF9leHRlbnQgPSBiYV9tYXJrX2JtYXBfZXh0ZW50LAorCS51bm1hcmtfYm1hcF9leHRlbnQgPSBiYV91bm1hcmtfYm1hcF9leHRlbnQsCisJLnNldF9ibWFwX3JhbmdlID0gYmFfc2V0X2JtYXBfcmFuZ2UsCisJLmdldF9ibWFwX3JhbmdlID0gYmFfZ2V0X2JtYXBfcmFuZ2UsCisJLmNsZWFyX2JtYXAgPSBiYV9jbGVhcl9ibWFwLAorCS5wcmludF9zdGF0cyA9IGJhX3ByaW50X3N0YXRzLAorCS5maW5kX2ZpcnN0X3plcm8gPSBiYV9maW5kX2ZpcnN0X3plcm8KK307CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibGttYXA2NF9yYi5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmxrbWFwNjRfcmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjI2ODJlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmxrbWFwNjRfcmIuYwpAQCAtMCwwICsxLDg4NiBAQAorLyoKKyAqIGJsa21hcDY0X3JiLmMgLS0tIFNpbXBsZSByYi10cmVlIGltcGxlbWVudGF0aW9uIGZvciBiaXRtYXBzCisgKgorICogKEMpMjAxMCBSZWQgSGF0LCBJbmMuLCBMdWthcyBDemVybmVyIDxsY3plcm5lckByZWRoYXQuY29tPgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKyNpbmNsdWRlICJibWFwNjQuaCIKKyNpbmNsdWRlICJyYnRyZWUuaCIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCitzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgeworCXN0cnVjdCByYl9ub2RlIG5vZGU7CisJX191NjQgc3RhcnQ7CisJX191NjQgY291bnQ7Cit9OworCitzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgeworCXN0cnVjdCByYl9yb290IHJvb3Q7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICp3Y3Vyc29yOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqcmN1cnNvcjsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKnJjdXJzb3JfbmV4dDsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCV9fdTY0IG1hcmtfaGl0OworCV9fdTY0IHRlc3RfaGl0OworI2VuZGlmCit9OworCitpbmxpbmUgc3RhdGljIHN0cnVjdCBibWFwX3JiX2V4dGVudCAqbm9kZV90b19leHRlbnQoc3RydWN0IHJiX25vZGUgKm5vZGUpCit7CisJLyoKKwkgKiBUaGlzIGRlcGVuZHMgb24gdGhlIGZhY3QgdGhlIHN0cnVjdCByYl9ub2RlIGlzIGF0IHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgYm1hcF9yYl9leHRlbnQgc3RydWN0dXJlLiAgV2UgdXNlIHRoaXMKKwkgKiBpbnN0ZWFkIG9mIHRoZSBleHQyZnNfcmJfZW50cnkgbWFjcm8gYmVjYXVzZSBpdCBjYXVzZXMgZ2NjCisJICogLVdhbGwgdG8gZ2VuZXJhdGUgYSBodWdlIGFtb3VudCBvZiBub2lzZS4KKwkgKi8KKwlyZXR1cm4gKHN0cnVjdCBibWFwX3JiX2V4dGVudCAqKSBub2RlOworfQorCitzdGF0aWMgaW50IHJiX2luc2VydF9leHRlbnQoX191NjQgc3RhcnQsIF9fdTY0IGNvdW50LAorCQkJICAgIHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKTsKK3N0YXRpYyB2b2lkIHJiX2dldF9uZXdfZXh0ZW50KHN0cnVjdCBibWFwX3JiX2V4dGVudCAqKiwgX191NjQsIF9fdTY0KTsKKworLyogI2RlZmluZSBERUJVR19SQiAqLworCisjaWZkZWYgREVCVUdfUkIKK3N0YXRpYyB2b2lkIHByaW50X3RyZWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSBOVUxMOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCisJcHJpbnRmKCJcdFx0XHQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCW5vZGUgPSBleHQyZnNfcmJfZmlyc3Qocm9vdCk7CisJZm9yIChub2RlID0gZXh0MmZzX3JiX2ZpcnN0KHJvb3QpOyBub2RlICE9IE5VTEw7IAorCSAgICAgbm9kZSA9IGV4dDJmc19yYl9uZXh0KG5vZGUpKSB7CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KG5vZGUpOworCQlwcmludGYoIlx0XHRcdC0tPiAoJWxsdSAtPiAlbGx1KVxuIiwKKwkJCWV4dC0+c3RhcnQsIGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KTsKKwl9CisJcHJpbnRmKCJcdFx0XHQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworfQorCitzdGF0aWMgdm9pZCBjaGVja190cmVlKHN0cnVjdCByYl9yb290ICpyb290LCBjb25zdCBjaGFyICptc2cpCit7CisJc3RydWN0IHJiX25vZGUgKm5ld19ub2RlLCAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpleHQsICpvbGQgPSBOVUxMOworCisJZm9yIChub2RlID0gZXh0MmZzX3JiX2ZpcnN0KHJvb3QpOyBub2RlOworCSAgICAgbm9kZSA9IGV4dDJmc19yYl9uZXh0KG5vZGUpKSB7CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KG5vZGUpOworCQlpZiAoZXh0LT5jb3VudCA8PSAwKSB7CisJCQlwcmludGYoIlRyZWUgRXJyb3I6IGNvdW50IGlzIGNyYXp5XG4iKTsKKwkJCXByaW50ZigiZXh0ZW50OiAlbGx1IC0+ICVsbHUgKCV1KVxuIiwgZXh0LT5zdGFydCwKKwkJCQlleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCwgZXh0LT5jb3VudCk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKGV4dC0+c3RhcnQgPCAwKSB7CisJCQlwcmludGYoIlRyZWUgRXJyb3I6IHN0YXJ0IGlzIGNyYXp5XG4iKTsKKwkJCXByaW50ZigiZXh0ZW50OiAlbGx1IC0+ICVsbHUgKCV1KVxuIiwgZXh0LT5zdGFydCwKKwkJCQlleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCwgZXh0LT5jb3VudCk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlpZiAob2xkKSB7CisJCQlpZiAob2xkLT5zdGFydCA+IGV4dC0+c3RhcnQpIHsKKwkJCQlwcmludGYoIlRyZWUgRXJyb3I6IHN0YXJ0IGlzIGNyYXp5XG4iKTsKKwkJCQlwcmludGYoImV4dGVudDogJWxsdSAtPiAlbGx1ICgldSlcbiIsCisJCQkJCW9sZC0+c3RhcnQsIG9sZC0+c3RhcnQgKyBvbGQtPmNvdW50LAorCQkJCQlvbGQtPmNvdW50KTsKKwkJCQlwcmludGYoImV4dGVudCBuZXh0OiAlbGx1IC0+ICVsbHUgKCV1KVxuIiwKKwkJCQkJZXh0LT5zdGFydCwgZXh0LT5zdGFydCArIGV4dC0+Y291bnQsCisJCQkJCWV4dC0+Y291bnQpOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJCWlmICgob2xkLT5zdGFydCArIG9sZC0+Y291bnQpID49IGV4dC0+c3RhcnQpIHsKKwkJCQlwcmludGYoIlRyZWUgRXJyb3I6IGV4dGVudCBpcyBjcmF6eVxuIik7CisJCQkJcHJpbnRmKCJleHRlbnQ6ICVsbHUgLT4gJWxsdSAoJXUpXG4iLAorCQkJCQlvbGQtPnN0YXJ0LCBvbGQtPnN0YXJ0ICsgb2xkLT5jb3VudCwKKwkJCQkJb2xkLT5jb3VudCk7CisJCQkJcHJpbnRmKCJleHRlbnQgbmV4dDogJWxsdSAtPiAlbGx1ICgldSlcbiIsCisJCQkJCWV4dC0+c3RhcnQsIGV4dC0+c3RhcnQgKyBleHQtPmNvdW50LAorCQkJCQlleHQtPmNvdW50KTsKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCX0KKwkJb2xkID0gZXh0OworCX0KKwlyZXR1cm47CisKK2Vycl9vdXQ6CisJcHJpbnRmKCIlc1xuIiwgbXNnKTsKKwlwcmludF90cmVlKHJvb3QpOworCWV4aXQoMSk7Cit9CisjZWxzZQorI2RlZmluZSBjaGVja190cmVlKHJvb3QsIG1zZykgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHByaW50X3RyZWUocm9vdCwgbXNnKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCByYl9nZXRfbmV3X2V4dGVudChzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKipleHQsIF9fdTY0IHN0YXJ0LAorCQkJICAgICBfX3U2NCBjb3VudCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKm5ld19leHQ7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZiAoc3RydWN0IGJtYXBfcmJfZXh0ZW50KSwKKwkJCQkmbmV3X2V4dCk7CisJaWYgKHJldHZhbCkgeworCQlwZXJyb3IoImV4dDJmc19nZXRfbWVtIik7CisJCWV4aXQoMSk7CisJfQorCisJbmV3X2V4dC0+c3RhcnQgPSBzdGFydDsKKwluZXdfZXh0LT5jb3VudCA9IGNvdW50OworCSpleHQgPSBuZXdfZXh0OworfQorCitpbmxpbmUKK3N0YXRpYyB2b2lkIHJiX2ZyZWVfZXh0ZW50KHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnAsCisJCQkgICBzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dCkKK3sKKwlpZiAoYnAtPndjdXJzb3IgPT0gZXh0KQorCQlicC0+d2N1cnNvciA9IE5VTEw7CisJaWYgKGJwLT5yY3Vyc29yID09IGV4dCkKKwkJYnAtPnJjdXJzb3IgPSBOVUxMOworCWlmIChicC0+cmN1cnNvcl9uZXh0ID09IGV4dCkKKwkJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisJZXh0MmZzX2ZyZWVfbWVtKCZleHQpOworfQorCitzdGF0aWMgZXJyY29kZV90IHJiX2FsbG9jX3ByaXZhdGVfZGF0YSAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2YgKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSksICZicCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWJwLT5yb290ID0gUkJfUk9PVDsKKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisJYnAtPndjdXJzb3IgPSBOVUxMOworCisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwlicC0+dGVzdF9oaXQgPSAwOworCWJwLT5tYXJrX2hpdCA9IDA7CisjZW5kaWYKKworCWJpdG1hcC0+cHJpdmF0ZSA9ICh2b2lkICopIGJwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHJiX25ld19ibWFwKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gcmJfYWxsb2NfcHJpdmF0ZV9kYXRhIChiaXRtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmJfZnJlZV90cmVlKHN0cnVjdCByYl9yb290ICpyb290KQoreworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCXN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDsKKworCWZvciAobm9kZSA9IGV4dDJmc19yYl9maXJzdChyb290KTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKKwkJbmV4dCA9IGV4dDJmc19yYl9uZXh0KG5vZGUpOworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKwkJZXh0MmZzX3JiX2VyYXNlKG5vZGUsIHJvb3QpOworCQlleHQyZnNfZnJlZV9tZW0oJmV4dCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByYl9mcmVlX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKworCXJiX2ZyZWVfdHJlZSgmYnAtPnJvb3QpOworCWV4dDJmc19mcmVlX21lbSgmYnApOworCWJwID0gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYl9jb3B5X2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBkZXN0KQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqc3JjX2JwLCAqZGVzdF9icDsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKnNyY19leHQsICpkZXN0X2V4dDsKKwlzdHJ1Y3QgcmJfbm9kZSAqZGVzdF9ub2RlLCAqc3JjX25vZGUsICpkZXN0X2xhc3QsICoqbjsKKwllcnJjb2RlX3QgcmV0dmFsID0gMDsKKworCXJldHZhbCA9IHJiX2FsbG9jX3ByaXZhdGVfZGF0YSAoZGVzdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXNyY19icCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgc3JjLT5wcml2YXRlOworCWRlc3RfYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGRlc3QtPnByaXZhdGU7CisJc3JjX2JwLT5yY3Vyc29yID0gTlVMTDsKKwlkZXN0X2JwLT5yY3Vyc29yID0gTlVMTDsKKworCXNyY19ub2RlID0gZXh0MmZzX3JiX2ZpcnN0KCZzcmNfYnAtPnJvb3QpOworCXdoaWxlIChzcmNfbm9kZSkgeworCQlzcmNfZXh0ID0gbm9kZV90b19leHRlbnQoc3JjX25vZGUpOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2YgKHN0cnVjdCBibWFwX3JiX2V4dGVudCksCisJCQkJCSZkZXN0X2V4dCk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKworCQltZW1jcHkoZGVzdF9leHQsIHNyY19leHQsIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKTsKKworCQlkZXN0X25vZGUgPSAmZGVzdF9leHQtPm5vZGU7CisJCW4gPSAmZGVzdF9icC0+cm9vdC5yYl9ub2RlOworCisJCWRlc3RfbGFzdCA9IE5VTEw7CisJCWlmICgqbikgeworCQkJZGVzdF9sYXN0ID0gZXh0MmZzX3JiX2xhc3QoJmRlc3RfYnAtPnJvb3QpOworCQkJbiA9ICYoZGVzdF9sYXN0KS0+cmJfcmlnaHQ7CisJCX0KKworCQlleHQyZnNfcmJfbGlua19ub2RlKGRlc3Rfbm9kZSwgZGVzdF9sYXN0LCBuKTsKKwkJZXh0MmZzX3JiX2luc2VydF9jb2xvcihkZXN0X25vZGUsICZkZXN0X2JwLT5yb290KTsKKworCQlzcmNfbm9kZSA9IGV4dDJmc19yYl9uZXh0KHNyY19ub2RlKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCByYl90cnVuY2F0ZShfX3U2NCBuZXdfbWF4LCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCW5vZGUgPSBleHQyZnNfcmJfbGFzdChyb290KTsKKwl3aGlsZSAobm9kZSkgeworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKworCQlpZiAoKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50IC0gMSkgPD0gbmV3X21heCkKKwkJCWJyZWFrOworCQllbHNlIGlmIChleHQtPnN0YXJ0ID4gbmV3X21heCkgeworCQkJZXh0MmZzX3JiX2VyYXNlKG5vZGUsIHJvb3QpOworCQkJZXh0MmZzX2ZyZWVfbWVtKCZleHQpOworCQkJbm9kZSA9IGV4dDJmc19yYl9sYXN0KHJvb3QpOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJZXh0LT5jb3VudCA9IG5ld19tYXggLSBleHQtPnN0YXJ0ICsgMTsKKwl9Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcmJfcmVzaXplX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJX191NjQgbmV3X2VuZCwgX191NjQgbmV3X3JlYWxfZW5kKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisKKwlpZiAobmV3X3JlYWxfZW5kID49IGJtYXAtPnJlYWxfZW5kKSB7CisJCWJtYXAtPmVuZCA9IG5ld19lbmQ7CisJCWJtYXAtPnJlYWxfZW5kID0gbmV3X3JlYWxfZW5kOworCQlyZXR1cm4gMDsKKwl9CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYm1hcC0+cHJpdmF0ZTsKKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPndjdXJzb3IgPSBOVUxMOworCisJLyogdHJ1bmNhdGUgdHJlZSB0byBuZXdfcmVhbF9lbmQgc2l6ZSAqLworCXJiX3RydW5jYXRlKG5ld19yZWFsX2VuZCwgJmJwLT5yb290KTsKKworCWJtYXAtPmVuZCA9IG5ld19lbmQ7CisJYm1hcC0+cmVhbF9lbmQgPSBuZXdfcmVhbF9lbmQ7CisJcmV0dXJuIDA7CisKK30KKworaW5saW5lIHN0YXRpYyBpbnQKK3JiX3Rlc3RfYml0KHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnAsIF9fdTY0IGJpdCkKK3sKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKnJjdXJzb3IsICpuZXh0X2V4dCA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICpuZXh0OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZicC0+cm9vdC5yYl9ub2RlOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCisJcmN1cnNvciA9IGJwLT5yY3Vyc29yOworCWlmICghcmN1cnNvcikKKwkJZ290byBzZWFyY2hfdHJlZTsKKworCWlmIChiaXQgPj0gcmN1cnNvci0+c3RhcnQgJiYgYml0IDwgcmN1cnNvci0+c3RhcnQgKyByY3Vyc29yLT5jb3VudCkgeworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJCWJwLT50ZXN0X2hpdCsrOworI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCW5leHRfZXh0ID0gYnAtPnJjdXJzb3JfbmV4dDsKKwlpZiAoIW5leHRfZXh0KSB7CisJCW5leHQgPSBleHQyZnNfcmJfbmV4dCgmcmN1cnNvci0+bm9kZSk7CisJCWlmIChuZXh0KQorCQkJbmV4dF9leHQgPSBub2RlX3RvX2V4dGVudChuZXh0KTsKKwkJYnAtPnJjdXJzb3JfbmV4dCA9IG5leHRfZXh0OworCX0KKwlpZiAobmV4dF9leHQpIHsKKwkJaWYgKChiaXQgPj0gcmN1cnNvci0+c3RhcnQgKyByY3Vyc29yLT5jb3VudCkgJiYKKwkJICAgIChiaXQgPCBuZXh0X2V4dC0+c3RhcnQpKSB7CisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwkJCWJwLT50ZXN0X2hpdCsrOworI2VuZGlmCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlicC0+cmN1cnNvciA9IE5VTEw7CisJYnAtPnJjdXJzb3JfbmV4dCA9IE5VTEw7CisKKwlyY3Vyc29yID0gYnAtPndjdXJzb3I7CisJaWYgKCFyY3Vyc29yKQorCQlnb3RvIHNlYXJjaF90cmVlOworCisJaWYgKGJpdCA+PSByY3Vyc29yLT5zdGFydCAmJiBiaXQgPCByY3Vyc29yLT5zdGFydCArIHJjdXJzb3ItPmNvdW50KQorCQlyZXR1cm4gMTsKKworc2VhcmNoX3RyZWU6CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KHBhcmVudCk7CisJCWlmIChiaXQgPCBleHQtPnN0YXJ0KQorCQkJbiA9ICYoKm4pLT5yYl9sZWZ0OworCQllbHNlIGlmIChiaXQgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkKKwkJCW4gPSAmKCpuKS0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJYnAtPnJjdXJzb3IgPSBleHQ7CisJCQlicC0+cmN1cnNvcl9uZXh0ID0gTlVMTDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJiX2luc2VydF9leHRlbnQoX191NjQgc3RhcnQsIF9fdTY0IGNvdW50LAorCQkJICAgIHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnApCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmYnAtPnJvb3Q7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICoqbiA9ICZyb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpuZXdfbm9kZSwgKm5vZGUsICpuZXh0OworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqbmV3X2V4dDsKKwlzdHJ1Y3QgYm1hcF9yYl9leHRlbnQgKmV4dDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWJwLT5yY3Vyc29yX25leHQgPSBOVUxMOworCWV4dCA9IGJwLT53Y3Vyc29yOworCWlmIChleHQpIHsKKwkJaWYgKHN0YXJ0ID49IGV4dC0+c3RhcnQgJiYKKwkJICAgIHN0YXJ0IDw9IChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkpIHsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCQkJYnAtPm1hcmtfaGl0Kys7CisjZW5kaWYKKwkJCWdvdG8gZ290X2V4dGVudDsKKwkJfQorCX0KKworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQocGFyZW50KTsKKworCQlpZiAoc3RhcnQgPCBleHQtPnN0YXJ0KSB7CisJCQluID0gJigqbiktPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAoc3RhcnQgPiAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQl9IGVsc2UgeworZ290X2V4dGVudDoKKwkJCWlmICgoc3RhcnQgKyBjb3VudCkgPD0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkKKwkJCQlyZXR1cm4gMTsKKworCQkJaWYgKChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkgPT0gc3RhcnQpCisJCQkJcmV0dmFsID0gMDsKKwkJCWVsc2UKKwkJCQlyZXR2YWwgPSAxOworCisJCQljb3VudCArPSAoc3RhcnQgLSBleHQtPnN0YXJ0KTsKKwkJCXN0YXJ0ID0gZXh0LT5zdGFydDsKKwkJCW5ld19leHQgPSBleHQ7CisJCQluZXdfbm9kZSA9ICZleHQtPm5vZGU7CisKKwkJCWdvdG8gc2tpcF9pbnNlcnQ7CisJCX0KKwl9CisKKwlyYl9nZXRfbmV3X2V4dGVudCgmbmV3X2V4dCwgc3RhcnQsIGNvdW50KTsKKworCW5ld19ub2RlID0gJm5ld19leHQtPm5vZGU7CisJZXh0MmZzX3JiX2xpbmtfbm9kZShuZXdfbm9kZSwgcGFyZW50LCBuKTsKKwlleHQyZnNfcmJfaW5zZXJ0X2NvbG9yKG5ld19ub2RlLCByb290KTsKKwlicC0+d2N1cnNvciA9IG5ld19leHQ7CisKKwlub2RlID0gZXh0MmZzX3JiX3ByZXYobmV3X25vZGUpOworCWlmIChub2RlKSB7CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KG5vZGUpOworCQlpZiAoKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSA9PSBzdGFydCkgeworCQkJc3RhcnQgPSBleHQtPnN0YXJ0OworCQkJY291bnQgKz0gZXh0LT5jb3VudDsKKwkJCWV4dDJmc19yYl9lcmFzZShub2RlLCByb290KTsKKwkJCXJiX2ZyZWVfZXh0ZW50KGJwLCBleHQpOworCQl9CisJfQorCitza2lwX2luc2VydDoKKwkvKiBTZWUgaWYgd2UgY2FuIG1lcmdlIGV4dGVudCB0byB0aGUgcmlnaHQgKi8KKwlmb3IgKG5vZGUgPSBleHQyZnNfcmJfbmV4dChuZXdfbm9kZSk7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IG5leHQpIHsKKwkJbmV4dCA9IGV4dDJmc19yYl9uZXh0KG5vZGUpOworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKworCQlpZiAoKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIG1vcmUgbWVyZ2luZyAqLworCQlpZiAoKHN0YXJ0ICsgY291bnQpIDwgZXh0LT5zdGFydCkKKwkJCWJyZWFrOworCisJCS8qIGV4dCBpcyBlbWJlZGRlZCBpbiBuZXdfZXh0IGludGVydmFsICovCisJCWlmICgoc3RhcnQgKyBjb3VudCkgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkgeworCQkJZXh0MmZzX3JiX2VyYXNlKG5vZGUsIHJvb3QpOworCQkJcmJfZnJlZV9leHRlbnQoYnAsIGV4dCk7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJLyogbWVyZ2UgZXh0IHdpdGggbmV3X2V4dCAqLworCQkJY291bnQgKz0gKChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkgLQorCQkJCSAgKHN0YXJ0ICsgY291bnQpKTsKKwkJCWV4dDJmc19yYl9lcmFzZShub2RlLCByb290KTsKKwkJCXJiX2ZyZWVfZXh0ZW50KGJwLCBleHQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwluZXdfZXh0LT5zdGFydCA9IHN0YXJ0OworCW5ld19leHQtPmNvdW50ID0gY291bnQ7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJiX3JlbW92ZV9leHRlbnQoX191NjQgc3RhcnQsIF9fdTY0IGNvdW50LAorCQkJICAgIHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnApCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmYnAtPnJvb3Q7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICoqbiA9ICZyb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCV9fdTY0IG5ld19zdGFydCwgbmV3X2NvdW50OworCWludCByZXR2YWwgPSAwOworCisJaWYgKEVYVDJGU19SQl9FTVBUWV9ST09UKHJvb3QpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQocGFyZW50KTsKKwkJaWYgKHN0YXJ0IDwgZXh0LT5zdGFydCkgeworCQkJbiA9ICYoKm4pLT5yYl9sZWZ0OworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RhcnQgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkgeworCQkJbiA9ICYoKm4pLT5yYl9yaWdodDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChzdGFydCA+IGV4dC0+c3RhcnQpICYmCisJCSAgICAoc3RhcnQgKyBjb3VudCkgPCAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQkvKiBXZSBoYXZlIHRvIHNwbGl0IGV4dGVudCBpbnRvIHR3byAqLworCQkJbmV3X3N0YXJ0ID0gc3RhcnQgKyBjb3VudDsKKwkJCW5ld19jb3VudCA9IChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkgLSBuZXdfc3RhcnQ7CisKKwkJCWV4dC0+Y291bnQgPSBzdGFydCAtIGV4dC0+c3RhcnQ7CisKKwkJCXJiX2luc2VydF9leHRlbnQobmV3X3N0YXJ0LCBuZXdfY291bnQsIGJwKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaWYgKChzdGFydCArIGNvdW50KSA+PSAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQlleHQtPmNvdW50ID0gc3RhcnQgLSBleHQtPnN0YXJ0OworCQkJcmV0dmFsID0gMTsKKwkJfQorCisJCWlmICgwID09IGV4dC0+Y291bnQpIHsKKwkJCXBhcmVudCA9IGV4dDJmc19yYl9uZXh0KCZleHQtPm5vZGUpOworCQkJZXh0MmZzX3JiX2VyYXNlKCZleHQtPm5vZGUsIHJvb3QpOworCQkJcmJfZnJlZV9leHRlbnQoYnAsIGV4dCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGFydCA9PSBleHQtPnN0YXJ0KSB7CisJCQlleHQtPnN0YXJ0ICs9IGNvdW50OworCQkJZXh0LT5jb3VudCAtPSBjb3VudDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogU2VlIGlmIHdlIHNob3VsZCBkZWxldGUgb3IgdHJ1bmNhdGUgZXh0ZW50IG9uIHRoZSByaWdodCAqLworCWZvciAoOyBwYXJlbnQgIT0gTlVMTDsgcGFyZW50ID0gbm9kZSkgeworCQlub2RlID0gZXh0MmZzX3JiX25leHQocGFyZW50KTsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQocGFyZW50KTsKKwkJaWYgKChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBObyBtb3JlIGV4dGVudHMgdG8gYmUgcmVtb3ZlZC90cnVuY2F0ZWQgKi8KKwkJaWYgKChzdGFydCArIGNvdW50KSA8IGV4dC0+c3RhcnQpCisJCQlicmVhazsKKworCQkvKiBUaGUgZW50aXJlIGV4dGVudCBpcyB3aXRoaW4gdGhlIHJlZ2lvbiB0byBiZSByZW1vdmVkICovCisJCWlmICgoc3RhcnQgKyBjb3VudCkgPj0gKGV4dC0+c3RhcnQgKyBleHQtPmNvdW50KSkgeworCQkJZXh0MmZzX3JiX2VyYXNlKHBhcmVudCwgcm9vdCk7CisJCQlyYl9mcmVlX2V4dGVudChicCwgZXh0KTsKKwkJCXJldHZhbCA9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCS8qIG1vZGlmeSB0aGUgbGFzdCBleHRlbnQgaW4gcmVpZ29uIHRvIGJlIHJlbW92ZWQgKi8KKwkJCWV4dC0+Y291bnQgLT0gKChzdGFydCArIGNvdW50KSAtIGV4dC0+c3RhcnQpOworCQkJZXh0LT5zdGFydCA9IHN0YXJ0ICsgY291bnQ7CisJCQlyZXR2YWwgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJiX21hcmtfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisJYXJnIC09IGJpdG1hcC0+c3RhcnQ7CisKKwlyZXR1cm4gcmJfaW5zZXJ0X2V4dGVudChhcmcsIDEsIGJwKTsKK30KKworc3RhdGljIGludCByYl91bm1hcmtfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLCBfX3U2NCBhcmcpCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKwlpbnQgcmV0dmFsOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKwlhcmcgLT0gYml0bWFwLT5zdGFydDsKKworCXJldHZhbCA9IHJiX3JlbW92ZV9leHRlbnQoYXJnLCAxLCBicCk7CisJY2hlY2tfdHJlZSgmYnAtPnJvb3QsIF9fZnVuY19fKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2lubGluZQorc3RhdGljIGludCByYl90ZXN0X2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCWFyZyAtPSBiaXRtYXAtPnN0YXJ0OworCisJcmV0dXJuIHJiX3Rlc3RfYml0KGJwLCBhcmcpOworfQorCitzdGF0aWMgdm9pZCByYl9tYXJrX2JtYXBfZXh0ZW50KGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIF9fdTY0IGFyZywKKwkJCQl1bnNpZ25lZCBpbnQgbnVtKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCWFyZyAtPSBiaXRtYXAtPnN0YXJ0OworCisJcmJfaW5zZXJ0X2V4dGVudChhcmcsIG51bSwgYnApOworfQorCitzdGF0aWMgdm9pZCByYl91bm1hcmtfYm1hcF9leHRlbnQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnLAorCQkJCSAgdW5zaWduZWQgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKwlhcmcgLT0gYml0bWFwLT5zdGFydDsKKworCXJiX3JlbW92ZV9leHRlbnQoYXJnLCBudW0sIGJwKTsKKwljaGVja190cmVlKCZicC0+cm9vdCwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHJiX3Rlc3RfY2xlYXJfYm1hcF9leHRlbnQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgIF9fdTY0IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMLCAqKm47CisJc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpleHQ7CisJaW50IHJldHZhbCA9IDE7CisKKwlicCA9IChzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKikgYml0bWFwLT5wcml2YXRlOworCW4gPSAmYnAtPnJvb3QucmJfbm9kZTsKKwlzdGFydCAtPSBiaXRtYXAtPnN0YXJ0OworCisJaWYgKChsZW4gPT0gMCkgfHwgRVhUMkZTX1JCX0VNUFRZX1JPT1QoJmJwLT5yb290KSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIElmIHdlIGZpbmQgbm90aGluZywgd2Ugc2hvdWxkIGV4YW1pbmUgd2hvbGUgZXh0ZW50LCBidXQKKwkgKiB3aGVuIHdlIGZpbmQgbWF0Y2gsIHRoZSBleHRlbnQgaXMgbm90IGNsZWFuLCB0aHVzIGJlIHJldHVybgorCSAqIGZhbHNlLgorCSAqLworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQocGFyZW50KTsKKwkJaWYgKHN0YXJ0IDwgZXh0LT5zdGFydCkgeworCQkJbiA9ICYoKm4pLT5yYl9sZWZ0OworCQl9IGVsc2UgaWYgKHN0YXJ0ID49IChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkpIHsKKwkJCW4gPSAmKCpuKS0+cmJfcmlnaHQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgZm91bmQgZXh0ZW50IGludCB0aGUgdHJlZSAtPiBleHRlbnQgaXMgbm90CisJCQkgKiBjbGVhbgorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCW5vZGUgPSBwYXJlbnQ7CisJd2hpbGUgKG5vZGUpIHsKKwkJbmV4dCA9IGV4dDJmc19yYl9uZXh0KG5vZGUpOworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKwkJbm9kZSA9IG5leHQ7CisKKwkJaWYgKChleHQtPnN0YXJ0ICsgZXh0LT5jb3VudCkgPD0gc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKiBObyBtb3JlIG1lcmdpbmcgKi8KKwkJaWYgKChzdGFydCArIGxlbikgPD0gZXh0LT5zdGFydCkKKwkJCWJyZWFrOworCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHJiX3NldF9ibWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgICBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwgdm9pZCAqaW4pCit7CisJc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICpicDsKKwl1bnNpZ25lZCBjaGFyICpjcCA9IGluOworCXNpemVfdCBpOworCWludCBmaXJzdF9zZXQgPSAtMTsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKChpICYgNykgPT0gMCkgeworCQkJdW5zaWduZWQgY2hhciBjID0gY3BbaS84XTsKKwkJCWlmIChjID09IDB4RkYpIHsKKwkJCQlpZiAoZmlyc3Rfc2V0ID09IC0xKQorCQkJCQlmaXJzdF9zZXQgPSBpOworCQkJCWkgKz0gNzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoYyA9PSAweDAwKSAmJiAoZmlyc3Rfc2V0ID09IC0xKSkgeworCQkJCWkgKz0gNzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAoZXh0MmZzX3Rlc3RfYml0KGksIGluKSkgeworCQkJaWYgKGZpcnN0X3NldCA9PSAtMSkKKwkJCQlmaXJzdF9zZXQgPSBpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZpcnN0X3NldCA9PSAtMSkKKwkJCWNvbnRpbnVlOworCisJCXJiX2luc2VydF9leHRlbnQoc3RhcnQgKyBmaXJzdF9zZXQgLSBiaXRtYXAtPnN0YXJ0LAorCQkJCSBpIC0gZmlyc3Rfc2V0LCBicCk7CisJCWZpcnN0X3NldCA9IC0xOworCX0KKwlpZiAoZmlyc3Rfc2V0ICE9IC0xKQorCQlyYl9pbnNlcnRfZXh0ZW50KHN0YXJ0ICsgZmlyc3Rfc2V0IC0gYml0bWFwLT5zdGFydCwKKwkJCQkgbnVtIC0gZmlyc3Rfc2V0LCBicCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYl9nZXRfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCSAgICAgX191NjQgc3RhcnQsIHNpemVfdCBudW0sIHZvaWQgKm91dCkKK3sKKworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMLCAqbmV4dCwgKipuOworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisJc3RydWN0IGJtYXBfcmJfZXh0ZW50ICpleHQ7CisJaW50IGNvdW50OworCV9fdTY0IHBvczsKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisJbiA9ICZicC0+cm9vdC5yYl9ub2RlOworCXN0YXJ0IC09IGJpdG1hcC0+c3RhcnQ7CisKKwlpZiAoRVhUMkZTX1JCX0VNUFRZX1JPT1QoJmJwLT5yb290KSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWV4dCA9IG5vZGVfdG9fZXh0ZW50KHBhcmVudCk7CisJCWlmIChzdGFydCA8IGV4dC0+c3RhcnQpIHsKKwkJCW4gPSAmKCpuKS0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChzdGFydCA+PSAoZXh0LT5zdGFydCArIGV4dC0+Y291bnQpKSB7CisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCW1lbXNldChvdXQsIDAsIChudW0gKyA3KSA+PiAzKTsKKworCWZvciAoOyBwYXJlbnQgIT0gTlVMTDsgcGFyZW50ID0gbmV4dCkgeworCQluZXh0ID0gZXh0MmZzX3JiX25leHQocGFyZW50KTsKKwkJZXh0ID0gbm9kZV90b19leHRlbnQocGFyZW50KTsKKworCQlwb3MgPSBleHQtPnN0YXJ0OworCQljb3VudCA9IGV4dC0+Y291bnQ7CisJCWlmIChwb3MgPj0gc3RhcnQgKyBudW0pCisJCQlicmVhazsKKwkJaWYgKHBvcyA8IHN0YXJ0KSB7CisJCQljb3VudCAtPSBzdGFydCAtIHBvczsKKwkJCWlmIChjb3VudCA8IDApCisJCQkJY29udGludWU7CisJCQlwb3MgPSBzdGFydDsKKwkJfQorCQlpZiAocG9zICsgY291bnQgPiBzdGFydCArIG51bSkKKwkJCWNvdW50ID0gc3RhcnQgKyBudW0gLSBwb3M7CisKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJaWYgKChjb3VudCA+PSA4KSAmJgorCQkJICAgICgocG9zIC0gc3RhcnQpICUgOCkgPT0gMCkgeworCQkJCWludCBuYnl0ZXMgPSBjb3VudCA+PiAzOworCQkJCWludCBvZmZzZXQgPSAocG9zIC0gc3RhcnQpID4+IDM7CisKKwkJCQltZW1zZXQoKChjaGFyICopIG91dCkgKyBvZmZzZXQsIDB4RkYsIG5ieXRlcyk7CisJCQkJcG9zICs9IG5ieXRlcyA8PCAzOworCQkJCWNvdW50IC09IG5ieXRlcyA8PCAzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0KChwb3MgLSBzdGFydCksIG91dCk7CisJCQlwb3MrKzsKKwkJCWNvdW50LS07CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJiX2NsZWFyX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0MmZzX3JiX3ByaXZhdGUgKmJwOworCisJYnAgPSAoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlICopIGJpdG1hcC0+cHJpdmF0ZTsKKworCXJiX2ZyZWVfdHJlZSgmYnAtPnJvb3QpOworCWJwLT5yY3Vyc29yID0gTlVMTDsKKwlicC0+cmN1cnNvcl9uZXh0ID0gTlVMTDsKKwlicC0+d2N1cnNvciA9IE5VTEw7Cit9CisKKyNpZmRlZiBCTUFQX1NUQVRTCitzdGF0aWMgdm9pZCByYl9wcmludF9zdGF0cyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCXN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqYnA7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSBOVUxMOworCXN0cnVjdCBibWFwX3JiX2V4dGVudCAqZXh0OworCV9fdTY0IGNvdW50ID0gMDsKKwlfX3U2NCBtYXhfc2l6ZSA9IDA7CisJX191NjQgbWluX3NpemUgPSBVTE9OR19NQVg7CisJX191NjQgc2l6ZSA9IDAsIGF2Z19zaXplID0gMDsKKwlkb3VibGUgZWZmOworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJX191NjQgbWFya19hbGwsIHRlc3RfYWxsOworCWRvdWJsZSBtX2hpdCA9IDAuMCwgdF9oaXQgPSAwLjA7CisjZW5kaWYKKworCWJwID0gKHN0cnVjdCBleHQyZnNfcmJfcHJpdmF0ZSAqKSBiaXRtYXAtPnByaXZhdGU7CisKKwlub2RlID0gZXh0MmZzX3JiX2ZpcnN0KCZicC0+cm9vdCk7CisJZm9yIChub2RlID0gZXh0MmZzX3JiX2ZpcnN0KCZicC0+cm9vdCk7IG5vZGUgIT0gTlVMTDsKKwkgICAgIG5vZGUgPSBleHQyZnNfcmJfbmV4dChub2RlKSkgeworCQlleHQgPSBub2RlX3RvX2V4dGVudChub2RlKTsKKwkJY291bnQrKzsKKwkJaWYgKGV4dC0+Y291bnQgPiBtYXhfc2l6ZSkKKwkJCW1heF9zaXplID0gZXh0LT5jb3VudDsKKwkJaWYgKGV4dC0+Y291bnQgPCBtaW5fc2l6ZSkKKwkJCW1pbl9zaXplID0gZXh0LT5jb3VudDsKKwkJc2l6ZSArPSBleHQtPmNvdW50OworCX0KKworCWlmIChjb3VudCkKKwkJYXZnX3NpemUgPSBzaXplIC8gY291bnQ7CisJaWYgKG1pbl9zaXplID09IFVMT05HX01BWCkKKwkJbWluX3NpemUgPSAwOworCWVmZiA9IChkb3VibGUpKChjb3VudCAqIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKSA8PCAzKSAvCisJICAgICAgKGJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KTsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCW1hcmtfYWxsID0gYml0bWFwLT5zdGF0cy5tYXJrX2NvdW50ICsgYml0bWFwLT5zdGF0cy5tYXJrX2V4dF9jb3VudDsKKwl0ZXN0X2FsbCA9IGJpdG1hcC0+c3RhdHMudGVzdF9jb3VudCArIGJpdG1hcC0+c3RhdHMudGVzdF9leHRfY291bnQ7CisJaWYgKG1hcmtfYWxsKQorCQltX2hpdCA9ICgoZG91YmxlKWJwLT5tYXJrX2hpdCAvIG1hcmtfYWxsKSAqIDEwMDsKKwlpZiAodGVzdF9hbGwpCisJCXRfaGl0ID0gKChkb3VibGUpYnAtPnRlc3RfaGl0IC8gdGVzdF9hbGwpICogMTAwOworCisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgY2FjaGUgaGl0cyBvbiB0ZXN0ICglLjJmJSUpXG4iCisJCSIlMTZsbHUgY2FjaGUgaGl0cyBvbiBtYXJrICglLjJmJSUpXG4iLAorCQlicC0+dGVzdF9oaXQsIHRfaGl0LCBicC0+bWFya19oaXQsIG1faGl0KTsKKyNlbmRpZgorCWZwcmludGYoc3RkZXJyLCAiJTE2bGx1IGV4dGVudHMgKCVsbHUgYnl0ZXMpXG4iLAorCQljb3VudCwgKChjb3VudCAqIHNpemVvZihzdHJ1Y3QgYm1hcF9yYl9leHRlbnQpKSArCisJCQlzaXplb2Yoc3RydWN0IGV4dDJmc19yYl9wcml2YXRlKSkpOworIAlmcHJpbnRmKHN0ZGVyciwgIiUxNmxsdSBiaXRzIG1pbmltdW0gc2l6ZVxuIiwKKwkJbWluX3NpemUpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bGx1IGJpdHMgbWF4aW11bSBzaXplXG4iCisJCSIlMTZsbHUgYml0cyBhdmVyYWdlIHNpemVcbiIsCisJCW1heF9zaXplLCBhdmdfc2l6ZSk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgYml0cyBzZXQgaW4gYml0bWFwIChvdXQgb2YgJWxsdSlcbiIsIHNpemUsCisJCWJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KTsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJIiUxNi40bGYgbWVtb3J5IC8gYml0bWFwIGJpdCBtZW1vcnkgcmF0aW8gKGJpdGFycmF5ID0gMSlcbiIsCisJCWVmZik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgcmJfcHJpbnRfc3RhdHMoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCl7fQorI2VuZGlmCisKK3N0cnVjdCBleHQyX2JpdG1hcF9vcHMgZXh0MmZzX2Jsa21hcDY0X3JidHJlZSA9IHsKKwkudHlwZSA9IEVYVDJGU19CTUFQNjRfUkJUUkVFLAorCS5uZXdfYm1hcCA9IHJiX25ld19ibWFwLAorCS5mcmVlX2JtYXAgPSByYl9mcmVlX2JtYXAsCisJLmNvcHlfYm1hcCA9IHJiX2NvcHlfYm1hcCwKKwkucmVzaXplX2JtYXAgPSByYl9yZXNpemVfYm1hcCwKKwkubWFya19ibWFwID0gcmJfbWFya19ibWFwLAorCS51bm1hcmtfYm1hcCA9IHJiX3VubWFya19ibWFwLAorCS50ZXN0X2JtYXAgPSByYl90ZXN0X2JtYXAsCisJLnRlc3RfY2xlYXJfYm1hcF9leHRlbnQgPSByYl90ZXN0X2NsZWFyX2JtYXBfZXh0ZW50LAorCS5tYXJrX2JtYXBfZXh0ZW50ID0gcmJfbWFya19ibWFwX2V4dGVudCwKKwkudW5tYXJrX2JtYXBfZXh0ZW50ID0gcmJfdW5tYXJrX2JtYXBfZXh0ZW50LAorCS5zZXRfYm1hcF9yYW5nZSA9IHJiX3NldF9ibWFwX3JhbmdlLAorCS5nZXRfYm1hcF9yYW5nZSA9IHJiX2dldF9ibWFwX3JhbmdlLAorCS5jbGVhcl9ibWFwID0gcmJfY2xlYXJfYm1hcCwKKwkucHJpbnRfc3RhdHMgPSByYl9wcmludF9zdGF0cywKK307CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibGtudW0uYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Jsa251bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjBmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibGtudW0uYwpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIGJsa251bS5jIC0tLSBGdW5jdGlvbnMgdG8gaGFuZGxlIGJsazY0X3QgYW5kIGhpZ2gvbG93IDY0LWJpdCBibG9jaworICogbnVtYmVyLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIEF1dGhvciBKb3NlIFIuIFNhbnRvcyA8anJzQHVzLmlibS5jb20+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBSZXR1cm4gdGhlIGdyb3VwICMgb2YgYSBibG9jaworICovCitkZ3JwX3QgZXh0MmZzX2dyb3VwX29mX2JsazIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrKQoreworCXJldHVybiAoYmxrIC0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIC8KKwkJZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGZpcnN0IGJsb2NrIChpbmNsdXNpdmUpIGluIGEgZ3JvdXAKKyAqLworYmxrNjRfdCBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJcmV0dXJuIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICsKKwkJKChibGs2NF90KWdyb3VwICogZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0IGJsb2NrIChpbmNsdXNpdmUpIGluIGEgZ3JvdXAKKyAqLworYmxrNjRfdCBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlyZXR1cm4gKGdyb3VwID09IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gMSA/CisJCWV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtIDEgOgorCQlleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBncm91cCkgKworCQkJKGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwIC0gMSkpOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluIGEgZ3JvdXAKKyAqLworaW50IGV4dDJmc19ncm91cF9ibG9ja3NfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlpbnQgbnVtX2Jsb2NrczsKKworCWlmIChncm91cCA9PSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpIHsKKwkJbnVtX2Jsb2NrcyA9IChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJCWZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAlCisJCQkgICAgICBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJaWYgKCFudW1fYmxvY2tzKQorCQkJbnVtX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCX0gZWxzZQorCQludW1fYmxvY2tzID0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwlyZXR1cm4gbnVtX2Jsb2NrczsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5vZGUgZGF0YSBibG9jayBjb3VudAorICovCitibGs2NF90IGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrczIoZXh0Ml9maWxzeXMgZnMsCisJCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gKGlub2RlLT5pX2Jsb2NrcyB8CisJCSgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkgPworCQkgKF9fdTY0KSBpbm9kZS0+b3NkMi5saW51eDIubF9pX2Jsb2Nrc19oaSA8PCAzMiA6IDApKSAtCisJCShpbm9kZS0+aV9maWxlX2FjbCA/IGZzLT5ibG9ja3NpemUgPj4gOSA6IDApOworfQorCisvKgorICogUmV0dXJuIHRoZSBpbm9kZSBpX2Jsb2NrcyBjb3VudAorICovCitibGs2NF90IGV4dDJmc19pbm9kZV9pX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCXJldHVybiAoaW5vZGUtPmlfYmxvY2tzIHwKKwkJKChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCQkgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSA/CisJCSAoX191NjQpaW5vZGUtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgPDwgMzIgOiAwKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGZzIGJsb2NrIGNvdW50CisgKi8KK2JsazY0X3QgZXh0MmZzX2Jsb2Nrc19jb3VudChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIpCit7CisJcmV0dXJuIHN1cGVyLT5zX2Jsb2Nrc19jb3VudCB8CisJCShzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUID8KKwkJKF9fdTY0KSBzdXBlci0+c19ibG9ja3NfY291bnRfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgZnMgYmxvY2sgY291bnQKKyAqLwordm9pZCBleHQyZnNfYmxvY2tzX2NvdW50X3NldChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsIGJsazY0X3QgYmxrKQoreworCXN1cGVyLT5zX2Jsb2Nrc19jb3VudCA9IGJsazsKKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJc3VwZXItPnNfYmxvY2tzX2NvdW50X2hpID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBBZGQgdG8gdGhlIGN1cnJlbnQgZnMgYmxvY2sgY291bnQKKyAqLwordm9pZCBleHQyZnNfYmxvY2tzX2NvdW50X2FkZChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsIGJsazY0X3QgYmxrKQoreworCWJsazY0X3QgdG1wOworCXRtcCA9IGV4dDJmc19ibG9ja3NfY291bnQoc3VwZXIpICsgYmxrOworCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KHN1cGVyLCB0bXApOworfQorCisvKgorICogUmV0dXJuIHRoZSBmcyByZXNlcnZlZCBibG9jayBjb3VudAorICovCitibGs2NF90IGV4dDJmc19yX2Jsb2Nrc19jb3VudChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIpCit7CisJcmV0dXJuIHN1cGVyLT5zX3JfYmxvY2tzX2NvdW50IHwKKwkJKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkoX191NjQpIHN1cGVyLT5zX3JfYmxvY2tzX2NvdW50X2hpIDw8IDMyIDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZzIHJlc2VydmVkIGJsb2NrIGNvdW50CisgKi8KK3ZvaWQgZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsIGJsazY0X3QgYmxrKQoreworCXN1cGVyLT5zX3JfYmxvY2tzX2NvdW50ID0gYmxrOworCWlmIChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlzdXBlci0+c19yX2Jsb2Nrc19jb3VudF9oaSA9IChfX3U2NCkgYmxrID4+IDMyOworfQorCisvKgorICogQWRkIHRvIHRoZSBjdXJyZW50IHJlc2VydmVkIGZzIGJsb2NrIGNvdW50CisgKi8KK3ZvaWQgZXh0MmZzX3JfYmxvY2tzX2NvdW50X2FkZChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsIGJsazY0X3QgYmxrKQoreworCWJsazY0X3QgdG1wOworCXRtcCA9IGV4dDJmc19yX2Jsb2Nrc19jb3VudChzdXBlcikgKyBibGs7CisJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzdXBlciwgdG1wKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZnMgZnJlZSBibG9jayBjb3VudAorICovCitibGs2NF90IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIpCit7CisJcmV0dXJuIHN1cGVyLT5zX2ZyZWVfYmxvY2tzX2NvdW50IHwKKwkJKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkoX191NjQpIHN1cGVyLT5zX2ZyZWVfYmxvY2tzX2hpIDw8IDMyIDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZzIGZyZWUgYmxvY2sgY291bnQKKyAqLwordm9pZCBleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwgYmxrNjRfdCBibGspCit7CisJc3VwZXItPnNfZnJlZV9ibG9ja3NfY291bnQgPSBibGs7CisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCXN1cGVyLT5zX2ZyZWVfYmxvY2tzX2hpID0gKF9fdTY0KSBibGsgPj4gMzI7Cit9CisKKy8qCisgKiBBZGQgdG8gdGhlIGN1cnJlbnQgZnJlZSBmcyBibG9jayBjb3VudAorICovCit2b2lkIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9hZGQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLCBibGs2NF90IGJsaykKK3sKKwlibGs2NF90IHRtcDsKKwl0bXAgPSBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoc3VwZXIpICsgYmxrOworCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoc3VwZXIsIHRtcCk7Cit9CisKKy8qCisgKiBHZXQgYSBwb2ludGVyIHRvIGEgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvci4gIFdlIG5lZWQgdGhlIGV4cGxpY2l0CisgKiBwb2ludGVyIHRvIHRoZSBncm91cCBkZXNjIGZvciBjb2RlIHRoYXQgc3dhcHMgYmxvY2sgZ3JvdXAKKyAqIGRlc2NyaXB0b3JzIGJlZm9yZSB3cml0aW5nIHRoZW0gb3V0LCBhcyBpdCB3YW50cyB0byBtYWtlIGEgY29weSBhbmQKKyAqIGRvIHRoZSBzd2FwIHRoZXJlLgorICovCitzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpleHQyZnNfZ3JvdXBfZGVzYyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICBzdHJ1Y3Qgb3BhcXVlX2V4dDJfZ3JvdXBfZGVzYyAqZ2RwLAorCQkJCQkgIGRncnBfdCBncm91cCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKikoKGNoYXIgKilnZHAgKworCQkJCQkgIGdyb3VwICogRVhUMl9ERVNDX1NJWkUoZnMtPnN1cGVyKSk7Cit9CisKKy8qIERvIHRoZSBzYW1lIGJ1dCBhcyBhbiBleHQ0IGdyb3VwIGRlc2MgZm9yIGludGVybmFsIHVzZSBoZXJlICovCitzdGF0aWMgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZXh0NGZzX2dyb3VwX2Rlc2MoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgc3RydWN0IG9wYXF1ZV9leHQyX2dyb3VwX2Rlc2MgKmdkcCwKKwkJCQkJICBkZ3JwX3QgZ3JvdXApCit7CisJcmV0dXJuIChzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICopZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGdkcCwgZ3JvdXApOworfQorCisvKgorICogUmV0dXJuIHRoZSBibG9jayBiaXRtYXAgYmxvY2sgb2YgYSBncm91cAorICovCitibGs2NF90IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfYmxvY2tfYml0bWFwIHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191NjQpZ2RwLT5iZ19ibG9ja19iaXRtYXBfaGkgPDwgMzIgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgYmxvY2sgYml0bWFwIGJsb2NrIG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgYmxrNjRfdCBibGspCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19ibG9ja19iaXRtYXAgPSBibGs7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX2Jsb2NrX2JpdG1hcF9oaSA9IChfX3U2NCkgYmxrID4+IDMyOworfQorCisvKgorICogUmV0dXJuIHRoZSBpbm9kZSBiaXRtYXAgYmxvY2sgb2YgYSBncm91cAorICovCitibGs2NF90IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfaW5vZGVfYml0bWFwIHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191NjQpIGdkcC0+YmdfaW5vZGVfYml0bWFwX2hpIDw8IDMyIDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGlub2RlIGJpdG1hcCBibG9jayBvZiBhIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIGJsazY0X3QgYmxrKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfaW5vZGVfYml0bWFwID0gYmxrOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZ2RwLT5iZ19pbm9kZV9iaXRtYXBfaGkgPSAoX191NjQpIGJsayA+PiAzMjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5vZGUgdGFibGUgYmxvY2sgb2YgYSBncm91cAorICovCitibGs2NF90IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19pbm9kZV90YWJsZSB8CisJCShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdAorCQkgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkgKF9fdTY0KSBnZHAtPmJnX2lub2RlX3RhYmxlX2hpIDw8IDMyIDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGlub2RlIHRhYmxlIGJsb2NrIG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBibGs2NF90IGJsaykKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2lub2RlX3RhYmxlID0gYmxrOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZ2RwLT5iZ19pbm9kZV90YWJsZV9oaSA9IChfX3U2NCkgYmxrID4+IDMyOworfQorCisvKgorICogUmV0dXJuIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK19fdTMyIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCXJldHVybiBnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50IHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191MzIpIGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnRfaGkgPDwgMTYgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgZnJlZSBibG9ja3MgY291bnQgb2YgYSBncm91cAorICovCit2b2lkIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MzIgbikKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0gbjsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudF9oaSA9IChfX3UzMikgbiA+PiAxNjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZnJlZSBpbm9kZXMgY291bnQgb2YgYSBncm91cAorICovCitfX3UzMiBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCB8CisJCShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdAorCQkgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkgKF9fdTMyKSBnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50X2hpIDw8IDE2IDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZyZWUgaW5vZGVzIGNvdW50IG9mIGEgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTMyIG4pCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCA9IG47CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50X2hpID0gKF9fdTMyKSBuID4+IDE2OworfQorCisvKgorICogUmV0dXJuIHRoZSB1c2VkIGRpcnMgY291bnQgb2YgYSBncm91cAorICovCitfX3UzMiBleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfdXNlZF9kaXJzX2NvdW50IHwKKwkJKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0CisJCSAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAoX191MzIpIGdkcC0+YmdfdXNlZF9kaXJzX2NvdW50X2hpIDw8IDE2IDogMCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHVzZWQgZGlycyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudF9zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MzIgbikKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX3VzZWRfZGlyc19jb3VudCA9IG47CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCQlnZHAtPmJnX3VzZWRfZGlyc19jb3VudF9oaSA9IChfX3UzMikgbiA+PiAxNjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdW51c2VkIGlub2RlcyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK19fdTMyIGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfaXRhYmxlX3VudXNlZCB8CisJCShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdAorCQkgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQgPworCQkgKF9fdTMyKSBnZHAtPmJnX2l0YWJsZV91bnVzZWRfaGkgPDwgMTYgOiAwKTsKK30KKworLyoKKyAqIFNldCB0aGUgdW51c2VkIGlub2RlcyBjb3VudCBvZiBhIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTMyIG4pCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19pdGFibGVfdW51c2VkID0gbjsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWdkcC0+YmdfaXRhYmxlX3VudXNlZF9oaSA9IChfX3UzMikgbiA+PiAxNjsKK30KKworLyoKKyAqIEdldCB0aGUgZmxhZ3MgZm9yIHRoaXMgYmxvY2sgZ3JvdXAKKyAqLworX191MTYgZXh0MmZzX2JnX2ZsYWdzKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfZmxhZ3M7Cit9CisKKy8qCisgKiBaZXJvIG91dCB0aGUgZmxhZ3MgZm9yIHRoaXMgYmxvY2sgZ3JvdXAKKyAqLwordm9pZCBleHQyZnNfYmdfZmxhZ3NfemFwKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19mbGFncyA9IDA7CisJcmV0dXJuOworfQorCisvKgorICogR2V0IHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmxhZyBmb3IgdGhpcyBibG9jayBncm91cAorICovCitpbnQgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgYmdfZmxhZykKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlyZXR1cm4gZ2RwLT5iZ19mbGFncyAmIGJnX2ZsYWc7Cit9CisKKy8qCisgKiBTZXQgYSBmbGFnIG9yIHNldCBvZiBmbGFncyBmb3IgdGhpcyBibG9jayBncm91cAorICovCit2b2lkIGV4dDJmc19iZ19mbGFnc19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgYmdfZmxhZ3MpCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJZ2RwLT5iZ19mbGFncyB8PSBiZ19mbGFnczsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDbGVhciBhIGZsYWcgb3Igc2V0IG9mIGZsYWdzIGZvciB0aGlzIGJsb2NrIGdyb3VwCisgKi8KK3ZvaWQgZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTE2IGJnX2ZsYWdzKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKKworCWdkcCA9IGV4dDRmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgZ3JvdXApOworCWdkcC0+YmdfZmxhZ3MgJj0gfmJnX2ZsYWdzOworCXJldHVybjsKK30KKworLyoKKyAqIEdldCB0aGUgY2hlY2tzdW0gZm9yIHRoaXMgYmxvY2sgZ3JvdXAKKyAqLworX191MTYgZXh0MmZzX2JnX2NoZWNrc3VtKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwOworCisJZ2RwID0gZXh0NGZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBncm91cCk7CisJcmV0dXJuIGdkcC0+YmdfY2hlY2tzdW07Cit9CisKKy8qCisgKiBTZXQgdGhlIGNoZWNrc3VtIGZvciB0aGlzIGJsb2NrIGdyb3VwIHRvIGEgcHJldmlvdXNseSBjYWxjdWxhdGVkIHZhbHVlCisgKi8KK3ZvaWQgZXh0MmZzX2JnX2NoZWNrc3VtX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UxNiBjaGVja3N1bSkKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CisKKwlnZHAgPSBleHQ0ZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGdyb3VwKTsKKwlnZHAtPmJnX2NoZWNrc3VtID0gY2hlY2tzdW07CisJcmV0dXJuOworfQorCisvKgorICogR2V0IHRoZSBhY2wgYmxvY2sgb2YgYSBmaWxlCisgKi8KK2JsazY0X3QgZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJYmxrNjRfdAlibGsgPSBpbm9kZS0+aV9maWxlX2FjbDsKKworCWlmIChmcyAmJiBmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJYmxrIHw9ICgoX191NjQpIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCkgPDwgMzI7CisJcmV0dXJuIGJsazsKK30KKworLyoKKyAqIFNldCB0aGUgYWNsIGJsb2NrIG9mIGEgZmlsZQorICovCit2b2lkIGV4dDJmc19maWxlX2FjbF9ibG9ja19zZXQoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgICBibGs2NF90IGJsaykKK3sKKwlpbm9kZS0+aV9maWxlX2FjbCA9IGJsazsKKwlpZiAoZnMgJiYgZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCA9IChfX3U2NCkgYmxrID4+IDMyOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibG9jay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRiYmRlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYmxvY2suYwpAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIGJsb2NrLmMgLS0tIGl0ZXJhdGUgb3ZlciBhbGwgYmxvY2tzIGluIGFuIGlub2RlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworc3RydWN0IGJsb2NrX2NvbnRleHQgeworCWV4dDJfZmlsc3lzCWZzOworCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzCWZzLAorCQkgICAgYmxrNjRfdAkqYmxvY2tuciwKKwkJICAgIGUyX2Jsa2NudF90CWJjb3VudCwKKwkJICAgIGJsazY0X3QJcmVmX2JsaywKKwkJICAgIGludAkJcmVmX29mZnNldCwKKwkJICAgIHZvaWQJKnByaXZfZGF0YSk7CisJZTJfYmxrY250X3QJYmNvdW50OworCWludAkJYnNpemU7CisJaW50CQlmbGFnczsKKwllcnJjb2RlX3QJZXJyY29kZTsKKwljaGFyCSppbmRfYnVmOworCWNoYXIJKmRpbmRfYnVmOworCWNoYXIJKnRpbmRfYnVmOworCXZvaWQJKnByaXZfZGF0YTsKK307CisKKyNkZWZpbmUgY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoKGN0eCktPmZsYWdzICYgQkxPQ0tfRkxBR19SRUFEX09OTFkpICYmCQlcCisJCSAgICAoKHJldCkgJiBCTE9DS19DSEFOR0VEKSkgewkJCQlcCisJCQkoY3R4KS0+ZXJyY29kZSA9IEVYVDJfRVRfUk9fQkxPQ0tfSVRFUkFURTsJXAorCQkJcmV0IHw9IEJMT0NLX0FCT1JUIHwgQkxPQ0tfRVJST1I7CQlcCisJCQlyZXR1cm4gcmV0OwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGNoZWNrX2Zvcl9yb192aW9sYXRpb25fZ290byhjdHgsIHJldCwgbGFiZWwpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKCgoY3R4KS0+ZmxhZ3MgJiBCTE9DS19GTEFHX1JFQURfT05MWSkgJiYJCVwKKwkJICAgICgocmV0KSAmIEJMT0NLX0NIQU5HRUQpKSB7CQkJCVwKKwkJCShjdHgpLT5lcnJjb2RlID0gRVhUMl9FVF9ST19CTE9DS19JVEVSQVRFOwlcCisJCQlyZXQgfD0gQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUjsJCVwKKwkJCWdvdG8gbGFiZWw7CQkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgYmxvY2tfaXRlcmF0ZV9pbmQoYmxrX3QgKmluZF9ibG9jaywgYmxrX3QgcmVmX2Jsb2NrLAorCQkJICAgICBpbnQgcmVmX29mZnNldCwgc3RydWN0IGJsb2NrX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQJcmV0ID0gMCwgY2hhbmdlZCA9IDA7CisJaW50CWksIGZsYWdzLCBsaW1pdCwgb2Zmc2V0OworCWJsa190CSpibG9ja19ucjsKKwlibGs2NF90CWJsazY0OworCisJbGltaXQgPSBjdHgtPmZzLT5ibG9ja3NpemUgPj4gMjsKKwlpZiAoIShjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19EQVRBX09OTFkpKSB7CisJCWJsazY0ID0gKmluZF9ibG9jazsKKwkJcmV0ID0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwKKwkJCQkgICBCTE9DS19DT1VOVF9JTkQsIHJlZl9ibG9jaywKKwkJCQkgICByZWZfb2Zmc2V0LCBjdHgtPnByaXZfZGF0YSk7CisJCSppbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCWlmICghKmluZF9ibG9jayB8fCAocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWN0eC0+YmNvdW50ICs9IGxpbWl0OworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoKmluZF9ibG9jayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGN0eC0+ZnMtPnN1cGVyKSB8fAorCSAgICAqaW5kX2Jsb2NrIDwgY3R4LT5mcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgeworCQljdHgtPmVycmNvZGUgPSBFWFQyX0VUX0JBRF9JTkRfQkxPQ0s7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGN0eC0+ZnMsICppbmRfYmxvY2ssCisJCQkJCSAgICAgY3R4LT5pbmRfYnVmKTsKKwlpZiAoY3R4LT5lcnJjb2RlKSB7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlibG9ja19uciA9IChibGtfdCAqKSBjdHgtPmluZF9idWY7CisJb2Zmc2V0ID0gMDsKKwlpZiAoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBjdHgtPmJjb3VudCsrLCBibG9ja19ucisrKSB7CisJCQlibGs2NCA9ICpibG9ja19ucjsKKwkJCWZsYWdzID0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwgY3R4LT5iY291bnQsCisJCQkJCSAgICAgKmluZF9ibG9jaywgb2Zmc2V0LAorCQkJCQkgICAgIGN0eC0+cHJpdl9kYXRhKTsKKwkJCSpibG9ja19uciA9IGJsazY0OworCQkJY2hhbmdlZAl8PSBmbGFnczsKKwkJCWlmIChmbGFncyAmIEJMT0NLX0FCT1JUKSB7CisJCQkJcmV0IHw9IEJMT0NLX0FCT1JUOworCQkJCWJyZWFrOworCQkJfQorCQkJb2Zmc2V0ICs9IHNpemVvZihibGtfdCk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKywgY3R4LT5iY291bnQrKywgYmxvY2tfbnIrKykgeworCQkJaWYgKCpibG9ja19uciA9PSAwKQorCQkJCWdvdG8gc2tpcF9zcGFyc2U7CisJCQlibGs2NCA9ICpibG9ja19ucjsKKwkJCWZsYWdzID0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwgY3R4LT5iY291bnQsCisJCQkJCSAgICAgKmluZF9ibG9jaywgb2Zmc2V0LAorCQkJCQkgICAgIGN0eC0+cHJpdl9kYXRhKTsKKwkJCSpibG9ja19uciA9IGJsazY0OworCQkJY2hhbmdlZAl8PSBmbGFnczsKKwkJCWlmIChmbGFncyAmIEJMT0NLX0FCT1JUKSB7CisJCQkJcmV0IHw9IEJMT0NLX0FCT1JUOworCQkJCWJyZWFrOworCQkJfQorCQlza2lwX3NwYXJzZToKKwkJCW9mZnNldCArPSBzaXplb2YoYmxrX3QpOworCQl9CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fcmV0dXJuKGN0eCwgY2hhbmdlZCk7CisJaWYgKGNoYW5nZWQgJiBCTE9DS19DSEFOR0VEKSB7CisJCWN0eC0+ZXJyY29kZSA9IGV4dDJmc193cml0ZV9pbmRfYmxvY2soY3R4LT5mcywgKmluZF9ibG9jaywKKwkJCQkJCSAgICAgIGN0eC0+aW5kX2J1Zik7CisJCWlmIChjdHgtPmVycmNvZGUpCisJCQlyZXQgfD0gQkxPQ0tfRVJST1IgfCBCTE9DS19BQk9SVDsKKwl9CisJaWYgKChjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19EQVRBX09OTFkpICYmCisJICAgICEocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWJsazY0ID0gKmluZF9ibG9jazsKKwkJcmV0IHw9ICgqY3R4LT5mdW5jKShjdHgtPmZzLCAmYmxrNjQsCisJCQkJICAgIEJMT0NLX0NPVU5UX0lORCwgcmVmX2Jsb2NrLAorCQkJCSAgICByZWZfb2Zmc2V0LCBjdHgtPnByaXZfZGF0YSk7CisJCSppbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmxvY2tfaXRlcmF0ZV9kaW5kKGJsa190ICpkaW5kX2Jsb2NrLCBibGtfdCByZWZfYmxvY2ssCisJCQkgICAgICBpbnQgcmVmX29mZnNldCwgc3RydWN0IGJsb2NrX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQJcmV0ID0gMCwgY2hhbmdlZCA9IDA7CisJaW50CWksIGZsYWdzLCBsaW1pdCwgb2Zmc2V0OworCWJsa190CSpibG9ja19ucjsKKwlibGs2NF90CWJsazY0OworCisJbGltaXQgPSBjdHgtPmZzLT5ibG9ja3NpemUgPj4gMjsKKwlpZiAoIShjdHgtPmZsYWdzICYgKEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UgfAorCQkJICAgIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSkpIHsKKwkJYmxrNjQgPSAqZGluZF9ibG9jazsKKwkJcmV0ID0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwKKwkJCQkgICBCTE9DS19DT1VOVF9ESU5ELCByZWZfYmxvY2ssCisJCQkJICAgcmVmX29mZnNldCwgY3R4LT5wcml2X2RhdGEpOworCQkqZGluZF9ibG9jayA9IGJsazY0OworCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX3JldHVybihjdHgsIHJldCk7CisJaWYgKCEqZGluZF9ibG9jayB8fCAocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWN0eC0+YmNvdW50ICs9IGxpbWl0KmxpbWl0OworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoKmRpbmRfYmxvY2sgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChjdHgtPmZzLT5zdXBlcikgfHwKKwkgICAgKmRpbmRfYmxvY2sgPCBjdHgtPmZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCWN0eC0+ZXJyY29kZSA9IEVYVDJfRVRfQkFEX0RJTkRfQkxPQ0s7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGN0eC0+ZnMsICpkaW5kX2Jsb2NrLAorCQkJCQkgICAgIGN0eC0+ZGluZF9idWYpOworCWlmIChjdHgtPmVycmNvZGUpIHsKKwkJcmV0IHw9IEJMT0NLX0VSUk9SOworCQlyZXR1cm4gcmV0OworCX0KKworCWJsb2NrX25yID0gKGJsa190ICopIGN0eC0+ZGluZF9idWY7CisJb2Zmc2V0ID0gMDsKKwlpZiAoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKSB7CisJCQlmbGFncyA9IGJsb2NrX2l0ZXJhdGVfaW5kKGJsb2NrX25yLAorCQkJCQkJICAqZGluZF9ibG9jaywgb2Zmc2V0LAorCQkJCQkJICBjdHgpOworCQkJY2hhbmdlZCB8PSBmbGFnczsKKwkJCWlmIChmbGFncyAmIChCTE9DS19BQk9SVCB8IEJMT0NLX0VSUk9SKSkgeworCQkJCXJldCB8PSBmbGFncyAmIChCTE9DS19BQk9SVCB8IEJMT0NLX0VSUk9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW9mZnNldCArPSBzaXplb2YoYmxrX3QpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyssIGJsb2NrX25yKyspIHsKKwkJCWlmICgqYmxvY2tfbnIgPT0gMCkgeworCQkJCWN0eC0+YmNvdW50ICs9IGxpbWl0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmxhZ3MgPSBibG9ja19pdGVyYXRlX2luZChibG9ja19uciwKKwkJCQkJCSAgKmRpbmRfYmxvY2ssIG9mZnNldCwKKwkJCQkJCSAgY3R4KTsKKwkJCWNoYW5nZWQgfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUikpIHsKKwkJCQlyZXQgfD0gZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGJsa190KTsKKwkJfQorCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX3JldHVybihjdHgsIGNoYW5nZWQpOworCWlmIChjaGFuZ2VkICYgQkxPQ0tfQ0hBTkdFRCkgeworCQljdHgtPmVycmNvZGUgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGN0eC0+ZnMsICpkaW5kX2Jsb2NrLAorCQkJCQkJICAgICAgY3R4LT5kaW5kX2J1Zik7CisJCWlmIChjdHgtPmVycmNvZGUpCisJCQlyZXQgfD0gQkxPQ0tfRVJST1IgfCBCTE9DS19BQk9SVDsKKwl9CisJaWYgKChjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19EQVRBX09OTFkpICYmCisJICAgICEocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWJsazY0ID0gKmRpbmRfYmxvY2s7CisJCXJldCB8PSAoKmN0eC0+ZnVuYykoY3R4LT5mcywgJmJsazY0LAorCQkJCSAgICBCTE9DS19DT1VOVF9ESU5ELCByZWZfYmxvY2ssCisJCQkJICAgIHJlZl9vZmZzZXQsIGN0eC0+cHJpdl9kYXRhKTsKKwkJKmRpbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmxvY2tfaXRlcmF0ZV90aW5kKGJsa190ICp0aW5kX2Jsb2NrLCBibGtfdCByZWZfYmxvY2ssCisJCQkgICAgICBpbnQgcmVmX29mZnNldCwgc3RydWN0IGJsb2NrX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQJcmV0ID0gMCwgY2hhbmdlZCA9IDA7CisJaW50CWksIGZsYWdzLCBsaW1pdCwgb2Zmc2V0OworCWJsa190CSpibG9ja19ucjsKKwlibGs2NF90CWJsazY0OworCisJbGltaXQgPSBjdHgtPmZzLT5ibG9ja3NpemUgPj4gMjsKKwlpZiAoIShjdHgtPmZsYWdzICYgKEJMT0NLX0ZMQUdfREVQVEhfVFJBVkVSU0UgfAorCQkJICAgIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSkpIHsKKwkJYmxrNjQgPSAqdGluZF9ibG9jazsKKwkJcmV0ID0gKCpjdHgtPmZ1bmMpKGN0eC0+ZnMsICZibGs2NCwKKwkJCQkgICBCTE9DS19DT1VOVF9USU5ELCByZWZfYmxvY2ssCisJCQkJICAgcmVmX29mZnNldCwgY3R4LT5wcml2X2RhdGEpOworCQkqdGluZF9ibG9jayA9IGJsazY0OworCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX3JldHVybihjdHgsIHJldCk7CisJaWYgKCEqdGluZF9ibG9jayB8fCAocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWN0eC0+YmNvdW50ICs9IGxpbWl0KmxpbWl0KmxpbWl0OworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoKnRpbmRfYmxvY2sgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChjdHgtPmZzLT5zdXBlcikgfHwKKwkgICAgKnRpbmRfYmxvY2sgPCBjdHgtPmZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCWN0eC0+ZXJyY29kZSA9IEVYVDJfRVRfQkFEX1RJTkRfQkxPQ0s7CisJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJcmV0dXJuIHJldDsKKwl9CisJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGN0eC0+ZnMsICp0aW5kX2Jsb2NrLAorCQkJCQkgICAgIGN0eC0+dGluZF9idWYpOworCWlmIChjdHgtPmVycmNvZGUpIHsKKwkJcmV0IHw9IEJMT0NLX0VSUk9SOworCQlyZXR1cm4gcmV0OworCX0KKworCWJsb2NrX25yID0gKGJsa190ICopIGN0eC0+dGluZF9idWY7CisJb2Zmc2V0ID0gMDsKKwlpZiAoY3R4LT5mbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKSB7CisJCQlmbGFncyA9IGJsb2NrX2l0ZXJhdGVfZGluZChibG9ja19uciwKKwkJCQkJCSAgICp0aW5kX2Jsb2NrLAorCQkJCQkJICAgb2Zmc2V0LCBjdHgpOworCQkJY2hhbmdlZCB8PSBmbGFnczsKKwkJCWlmIChmbGFncyAmIChCTE9DS19BQk9SVCB8IEJMT0NLX0VSUk9SKSkgeworCQkJCXJldCB8PSBmbGFncyAmIChCTE9DS19BQk9SVCB8IEJMT0NLX0VSUk9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW9mZnNldCArPSBzaXplb2YoYmxrX3QpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyssIGJsb2NrX25yKyspIHsKKwkJCWlmICgqYmxvY2tfbnIgPT0gMCkgeworCQkJCWN0eC0+YmNvdW50ICs9IGxpbWl0KmxpbWl0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmxhZ3MgPSBibG9ja19pdGVyYXRlX2RpbmQoYmxvY2tfbnIsCisJCQkJCQkgICAqdGluZF9ibG9jaywKKwkJCQkJCSAgIG9mZnNldCwgY3R4KTsKKwkJCWNoYW5nZWQgfD0gZmxhZ3M7CisJCQlpZiAoZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUikpIHsKKwkJCQlyZXQgfD0gZmxhZ3MgJiAoQkxPQ0tfQUJPUlQgfCBCTE9DS19FUlJPUik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZzZXQgKz0gc2l6ZW9mKGJsa190KTsKKwkJfQorCX0KKwljaGVja19mb3Jfcm9fdmlvbGF0aW9uX3JldHVybihjdHgsIGNoYW5nZWQpOworCWlmIChjaGFuZ2VkICYgQkxPQ0tfQ0hBTkdFRCkgeworCQljdHgtPmVycmNvZGUgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGN0eC0+ZnMsICp0aW5kX2Jsb2NrLAorCQkJCQkJICAgICAgY3R4LT50aW5kX2J1Zik7CisJCWlmIChjdHgtPmVycmNvZGUpCisJCQlyZXQgfD0gQkxPQ0tfRVJST1IgfCBCTE9DS19BQk9SVDsKKwl9CisJaWYgKChjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkgJiYKKwkgICAgIShjdHgtPmZsYWdzICYgQkxPQ0tfRkxBR19EQVRBX09OTFkpICYmCisJICAgICEocmV0ICYgQkxPQ0tfQUJPUlQpKSB7CisJCWJsazY0ID0gKnRpbmRfYmxvY2s7CisJCXJldCB8PSAoKmN0eC0+ZnVuYykoY3R4LT5mcywgJmJsazY0LAorCQkJCSAgICBCTE9DS19DT1VOVF9USU5ELCByZWZfYmxvY2ssCisJCQkJICAgIHJlZl9vZmZzZXQsIGN0eC0+cHJpdl9kYXRhKTsKKwkJKnRpbmRfYmxvY2sgPSBibGs2NDsKKwl9CisJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9yZXR1cm4oY3R4LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZXh0Ml9maWxzeXMgZnMsCisJCQkJZXh0Ml9pbm9fdCBpbm8sCisJCQkJaW50CWZsYWdzLAorCQkJCWNoYXIgKmJsb2NrX2J1ZiwKKwkJCQlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIGJsazY0X3QJKmJsb2NrbnIsCisJCQkJCSAgICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCQkJICAgIGJsazY0X3QJcmVmX2JsaywKKwkJCQkJICAgIGludAkJcmVmX29mZnNldCwKKwkJCQkJICAgIHZvaWQJKnByaXZfZGF0YSksCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCWludAlpOworCWludAlyLCByZXQgPSAwOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGJsb2NrX2NvbnRleHQgY3R4OworCWludAlsaW1pdDsKKwlibGs2NF90CWJsazY0OworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWN0eC5lcnJjb2RlID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAoY3R4LmVycmNvZGUpCisJCXJldHVybiBjdHguZXJyY29kZTsKKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gbGltaXQgbGFyZ2UgZmlsZXMKKwkgKi8KKwlpZiAoZmxhZ3MgJiBCTE9DS19GTEFHX05PX0xBUkdFKSB7CisJCWlmICghTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpICYmCisJCSAgICAoaW5vZGUuaV9zaXplX2hpZ2ggIT0gMCkpCisJCQlyZXR1cm4gRVhUMl9FVF9GSUxFX1RPT19CSUc7CisJfQorCisJbGltaXQgPSBmcy0+YmxvY2tzaXplID4+IDI7CisKKwljdHguZnMgPSBmczsKKwljdHguZnVuYyA9IGZ1bmM7CisJY3R4LnByaXZfZGF0YSA9IHByaXZfZGF0YTsKKwljdHguZmxhZ3MgPSBmbGFnczsKKwljdHguYmNvdW50ID0gMDsKKwlpZiAoYmxvY2tfYnVmKSB7CisJCWN0eC5pbmRfYnVmID0gYmxvY2tfYnVmOworCX0gZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoMywgZnMtPmJsb2Nrc2l6ZSwgJmN0eC5pbmRfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCWN0eC5kaW5kX2J1ZiA9IGN0eC5pbmRfYnVmICsgZnMtPmJsb2Nrc2l6ZTsKKwljdHgudGluZF9idWYgPSBjdHguZGluZF9idWYgKyBmcy0+YmxvY2tzaXplOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhlIEhVUkQgdHJhbnNsYXRvciBibG9jayAoaWYgcHJlc2VudCkKKwkgKi8KKwlpZiAoKGZzLT5zdXBlci0+c19jcmVhdG9yX29zID09IEVYVDJfT1NfSFVSRCkgJiYKKwkgICAgIShmbGFncyAmIEJMT0NLX0ZMQUdfREFUQV9PTkxZKSkgeworCQlpZiAoaW5vZGUub3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcikgeworCQkJYmxrNjQgPSBpbm9kZS5vc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yOworCQkJcmV0IHw9ICgqY3R4LmZ1bmMpKGZzLCAmYmxrNjQsCisJCQkJCSAgIEJMT0NLX0NPVU5UX1RSQU5TTEFUT1IsCisJCQkJCSAgIDAsIDAsIHByaXZfZGF0YSk7CisJCQlpbm9kZS5vc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yID0gKGJsa190KSBibGs2NDsKKwkJCWlmIChyZXQgJiBCTE9DS19BQk9SVCkKKwkJCQlnb3RvIGFib3J0X2V4aXQ7CisJCQljaGVja19mb3Jfcm9fdmlvbGF0aW9uX2dvdG8oJmN0eCwgcmV0LCBhYm9ydF9leGl0KTsKKwkJfQorCX0KKworCWlmIChpbm9kZS5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSB7CisJCWV4dDJfZXh0ZW50X2hhbmRsZV90CWhhbmRsZTsKKwkJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50LCBuZXh0OworCQllMl9ibGtjbnRfdAkJYmxvY2tjbnQgPSAwOworCQlibGs2NF90CQkJYmxrLCBuZXdfYmxrOworCQlpbnQJCQlvcCA9IEVYVDJfRVhURU5UX1JPT1Q7CisJCWludAkJCXVuaW5pdDsKKwkJdW5zaWduZWQgaW50CQlqOworCisJCWN0eC5lcnJjb2RlID0gZXh0MmZzX2V4dGVudF9vcGVuMihmcywgaW5vLCAmaW5vZGUsICZoYW5kbGUpOworCQlpZiAoY3R4LmVycmNvZGUpCisJCQlnb3RvIGFib3J0X2V4aXQ7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChvcCA9PSBFWFQyX0VYVEVOVF9DVVJSRU5UKQorCQkJCWN0eC5lcnJjb2RlID0gMDsKKwkJCWVsc2UKKwkJCQljdHguZXJyY29kZSA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgb3AsCisJCQkJCQkJCSZleHRlbnQpOworCQkJaWYgKGN0eC5lcnJjb2RlKSB7CisJCQkJaWYgKGN0eC5lcnJjb2RlICE9IEVYVDJfRVRfRVhURU5UX05PX05FWFQpCisJCQkJCWJyZWFrOworCQkJCWN0eC5lcnJjb2RlID0gMDsKKwkJCQlpZiAoIShmbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSkKKwkJCQkJYnJlYWs7CisJCQluZXh0X2Jsb2NrX3NldDoKKwkJCQlibGsgPSAwOworCQkJCXIgPSAoKmN0eC5mdW5jKShmcywgJmJsaywgYmxvY2tjbnQsCisJCQkJCQkwLCAwLCBwcml2X2RhdGEpOworCQkJCXJldCB8PSByOworCQkJCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fZ290bygmY3R4LCByZXQsCisJCQkJCQkJICAgIGV4dGVudF9kb25lKTsKKwkJCQlpZiAociAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJCQkJY3R4LmVycmNvZGUgPQorCQkJCQkJZXh0MmZzX2V4dGVudF9zZXRfYm1hcChoYW5kbGUsCisJCQkJCQkgICAgICAgKGJsazY0X3QpIGJsb2NrY250KyssCisJCQkJCQkgICAgICAgKGJsazY0X3QpIGJsaywgMCk7CisJCQkJCWlmIChjdHguZXJyY29kZSB8fCAocmV0ICYgQkxPQ0tfQUJPUlQpKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChibGspCisJCQkJCQlnb3RvIG5leHRfYmxvY2tfc2V0OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJb3AgPSBFWFQyX0VYVEVOVF9ORVhUOworCQkJYmxrID0gZXh0ZW50LmVfcGJsazsKKwkJCWlmICghKGV4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfTEVBRikpIHsKKwkJCQlpZiAoY3R4LmZsYWdzICYgQkxPQ0tfRkxBR19EQVRBX09OTFkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgoIShleHRlbnQuZV9mbGFncyAmCisJCQkJICAgICAgIEVYVDJfRVhURU5UX0ZMQUdTX1NFQ09ORF9WSVNJVCkgJiYKKwkJCQkgICAgICEoY3R4LmZsYWdzICYgQkxPQ0tfRkxBR19ERVBUSF9UUkFWRVJTRSkpIHx8CisJCQkJICAgICgoZXh0ZW50LmVfZmxhZ3MgJgorCQkJCSAgICAgIEVYVDJfRVhURU5UX0ZMQUdTX1NFQ09ORF9WSVNJVCkgJiYKKwkJCQkgICAgIChjdHguZmxhZ3MgJiBCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFKSkpIHsKKwkJCQkJcmV0IHw9ICgqY3R4LmZ1bmMpKGZzLCAmYmxrLAorCQkJCQkJCSAgIC0xLCAwLCAwLCBwcml2X2RhdGEpOworCQkJCQlpZiAocmV0ICYgQkxPQ0tfQ0hBTkdFRCkgeworCQkJCQkJZXh0ZW50LmVfcGJsayA9IGJsazsKKwkJCQkJCWN0eC5lcnJjb2RlID0KKwkJCQlleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJCQkJCWlmIChjdHguZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAocmV0ICYgQkxPQ0tfQUJPUlQpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQl1bmluaXQgPSAwOworCQkJaWYgKGV4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKQorCQkJCXVuaW5pdCA9IEVYVDJfRVhURU5UX1NFVF9CTUFQX1VOSU5JVDsKKworCQkJLyogCisJCQkgKiBHZXQgdGhlIG5leHQgZXh0ZW50IGJlZm9yZSB3ZSBzdGFydCBtZXNzaW5nCisJCQkgKiB3aXRoIHRoZSBjdXJyZW50IGV4dGVudAorCQkJICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIG9wLCAmbmV4dCk7CisKKyNpZiAwCisJCQlwcmludGYoImxibGsgJWxsdSBwYmxrICVsbHUgbGVuICVkIGJsb2NrY250ICVsbHVcbiIsCisJCQkgICAgICAgZXh0ZW50LmVfbGJsaywgZXh0ZW50LmVfcGJsaywKKwkJCSAgICAgICBleHRlbnQuZV9sZW4sIGJsb2NrY250KTsKKyNlbmRpZgorCQkJaWYgKGV4dGVudC5lX2xibGsgKyBleHRlbnQuZV9sZW4gPD0gKGJsazY0X3QpIGJsb2NrY250KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGV4dGVudC5lX2xibGsgPiAoYmxrNjRfdCkgYmxvY2tjbnQpCisJCQkJYmxvY2tjbnQgPSBleHRlbnQuZV9sYmxrOworCQkJaiA9IGJsb2NrY250IC0gZXh0ZW50LmVfbGJsazsKKwkJCWJsayArPSBqOworCQkJZm9yIChibG9ja2NudCA9IGV4dGVudC5lX2xibGssIGogPSAwOworCQkJICAgICBqIDwgZXh0ZW50LmVfbGVuOworCQkJICAgICBibGsrKywgYmxvY2tjbnQrKywgaisrKSB7CisJCQkJbmV3X2JsayA9IGJsazsKKwkJCQlyID0gKCpjdHguZnVuYykoZnMsICZuZXdfYmxrLCBibG9ja2NudCwKKwkJCQkJCTAsIDAsIHByaXZfZGF0YSk7CisJCQkJcmV0IHw9IHI7CisJCQkJY2hlY2tfZm9yX3JvX3Zpb2xhdGlvbl9nb3RvKCZjdHgsIHJldCwKKwkJCQkJCQkgICAgZXh0ZW50X2RvbmUpOworCQkJCWlmIChyICYgQkxPQ0tfQ0hBTkdFRCkgeworCQkJCQljdHguZXJyY29kZSA9CisJCQkJCQlleHQyZnNfZXh0ZW50X3NldF9ibWFwKGhhbmRsZSwKKwkJCQkJCSAgICAgICAoYmxrNjRfdCkgYmxvY2tjbnQsCisJCQkJCQkgICAgICAgbmV3X2JsaywgdW5pbml0KTsKKwkJCQkJaWYgKGN0eC5lcnJjb2RlKQorCQkJCQkJZ290byBleHRlbnRfZG9uZTsKKwkJCQl9CisJCQkJaWYgKHJldCAmIEJMT0NLX0FCT1JUKQorCQkJCQlnb3RvIGV4dGVudF9kb25lOworCQkJfQorCQkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQkJZXh0ZW50ID0gbmV4dDsKKwkJCQlvcCA9IEVYVDJfRVhURU5UX0NVUlJFTlQ7CisJCQl9CisJCX0KKworCWV4dGVudF9kb25lOgorCQlleHQyZnNfZXh0ZW50X2ZyZWUoaGFuZGxlKTsKKwkJcmV0IHw9IEJMT0NLX0VSUk9SOyAvKiBjdHguZXJyY29kZSBpcyBhbHdheXMgdmFsaWQgaGVyZSAqLworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciBub3JtYWwgZGF0YSBibG9ja3MKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRVhUMl9ORElSX0JMT0NLUyA7IGkrKywgY3R4LmJjb3VudCsrKSB7CisJCWlmIChpbm9kZS5pX2Jsb2NrW2ldIHx8IChmbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSkgeworCQkJYmxrNjQgPSBpbm9kZS5pX2Jsb2NrW2ldOworCQkJcmV0IHw9ICgqY3R4LmZ1bmMpKGZzLCAmYmxrNjQsIGN0eC5iY291bnQsIDAsIGksIAorCQkJCQkgICBwcml2X2RhdGEpOworCQkJaW5vZGUuaV9ibG9ja1tpXSA9IChibGtfdCkgYmxrNjQ7CisJCQlpZiAocmV0ICYgQkxPQ0tfQUJPUlQpCisJCQkJZ290byBhYm9ydF9leGl0OworCQl9CisJfQorCWNoZWNrX2Zvcl9yb192aW9sYXRpb25fZ290bygmY3R4LCByZXQsIGFib3J0X2V4aXQpOworCWlmIChpbm9kZS5pX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSB8fCAoZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkpIHsKKwkJcmV0IHw9IGJsb2NrX2l0ZXJhdGVfaW5kKCZpbm9kZS5pX2Jsb2NrW0VYVDJfSU5EX0JMT0NLXSwgCisJCQkJCSAwLCBFWFQyX0lORF9CTE9DSywgJmN0eCk7CisJCWlmIChyZXQgJiBCTE9DS19BQk9SVCkKKwkJCWdvdG8gYWJvcnRfZXhpdDsKKwl9IGVsc2UKKwkJY3R4LmJjb3VudCArPSBsaW1pdDsKKwlpZiAoaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdIHx8IChmbGFncyAmIEJMT0NLX0ZMQUdfQVBQRU5EKSkgeworCQlyZXQgfD0gYmxvY2tfaXRlcmF0ZV9kaW5kKCZpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10sCisJCQkJCSAgMCwgRVhUMl9ESU5EX0JMT0NLLCAmY3R4KTsKKwkJaWYgKHJldCAmIEJMT0NLX0FCT1JUKQorCQkJZ290byBhYm9ydF9leGl0OworCX0gZWxzZQorCQljdHguYmNvdW50ICs9IGxpbWl0ICogbGltaXQ7CisJaWYgKGlub2RlLmlfYmxvY2tbRVhUMl9USU5EX0JMT0NLXSB8fCAoZmxhZ3MgJiBCTE9DS19GTEFHX0FQUEVORCkpIHsKKwkJcmV0IHw9IGJsb2NrX2l0ZXJhdGVfdGluZCgmaW5vZGUuaV9ibG9ja1tFWFQyX1RJTkRfQkxPQ0tdLAorCQkJCQkgIDAsIEVYVDJfVElORF9CTE9DSywgJmN0eCk7CisJCWlmIChyZXQgJiBCTE9DS19BQk9SVCkKKwkJCWdvdG8gYWJvcnRfZXhpdDsKKwl9CisKK2Fib3J0X2V4aXQ6CisJaWYgKHJldCAmIEJMT0NLX0NIQU5HRUQpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXJldCB8PSBCTE9DS19FUlJPUjsKKwkJCWN0eC5lcnJjb2RlID0gcmV0dmFsOworCQl9CisJfQorZXJyb3V0OgorCWlmICghYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmN0eC5pbmRfYnVmKTsKKworCXJldHVybiAocmV0ICYgQkxPQ0tfRVJST1IpID8gY3R4LmVycmNvZGUgOiAwOworfQorCisvKgorICogRW11bGF0ZSB0aGUgb2xkIGV4dDJmc19ibG9ja19pdGVyYXRlIGZ1bmN0aW9uIQorICovCisKK3N0cnVjdCB4bGF0ZTY0IHsKKwlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJICAgIGJsa190CSpibG9ja25yLAorCQkgICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCSAgICBibGtfdAlyZWZfYmxrLAorCQkgICAgaW50CQlyZWZfb2Zmc2V0LAorCQkgICAgdm9pZAkqcHJpdl9kYXRhKTsKKwl2b2lkICpyZWFsX3ByaXZhdGU7Cit9OworCitzdGF0aWMgaW50IHhsYXRlNjRfZnVuYyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdAkqYmxvY2tuciwKKwkJCWUyX2Jsa2NudF90IGJsb2NrY250LCBibGs2NF90IHJlZl9ibGssCisJCQlpbnQgcmVmX29mZnNldCwgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCB4bGF0ZTY0ICp4bCA9IChzdHJ1Y3QgeGxhdGU2NCAqKSBwcml2X2RhdGE7CisJaW50CQlyZXQ7CisJYmxrX3QJCWJsb2NrMzIgPSAqYmxvY2tucjsKKwkKKwlyZXQgPSAoKnhsLT5mdW5jKShmcywgJmJsb2NrMzIsIGJsb2NrY250LCAoYmxrX3QpIHJlZl9ibGssIHJlZl9vZmZzZXQsCisJCQkgICAgIHhsLT5yZWFsX3ByaXZhdGUpOworCSpibG9ja25yID0gYmxvY2szMjsKKwlyZXR1cm4gcmV0OworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUyKGV4dDJfZmlsc3lzIGZzLAorCQkJCWV4dDJfaW5vX3QgaW5vLAorCQkJCWludAlmbGFncywKKwkJCQljaGFyICpibG9ja19idWYsCisJCQkJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICBibGtfdAkqYmxvY2tuciwKKwkJCQkJICAgIGUyX2Jsa2NudF90CWJsb2NrY250LAorCQkJCQkgICAgYmxrX3QJcmVmX2JsaywKKwkJCQkJICAgIGludAkJcmVmX29mZnNldCwKKwkJCQkJICAgIHZvaWQJKnByaXZfZGF0YSksCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCB4bGF0ZTY0IHhsOworCisJeGwucmVhbF9wcml2YXRlID0gcHJpdl9kYXRhOworCXhsLmZ1bmMgPSBmdW5jOworCisJcmV0dXJuIGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCBmbGFncywgYmxvY2tfYnVmLCAKKwkJCQkgICAgIHhsYXRlNjRfZnVuYywgJnhsKTsKK30KKworCitzdHJ1Y3QgeGxhdGUgeworCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzCWZzLAorCQkgICAgYmxrX3QJKmJsb2NrbnIsCisJCSAgICBpbnQJCWJjb3VudCwKKwkJICAgIHZvaWQJKnByaXZfZGF0YSk7CisJdm9pZCAqcmVhbF9wcml2YXRlOworfTsKKworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK3N0YXRpYyBpbnQgeGxhdGVfZnVuYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrbnIsIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkgICAgICBibGtfdCByZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGUgKnhsID0gKHN0cnVjdCB4bGF0ZSAqKSBwcml2X2RhdGE7CisKKwlyZXR1cm4gKCp4bC0+ZnVuYykoZnMsIGJsb2NrbnIsIChpbnQpIGJsb2NrY250LCB4bC0+cmVhbF9wcml2YXRlKTsKK30KKworZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICAgIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGludAlmbGFncywKKwkJCSAgICAgICBjaGFyICpibG9ja19idWYsCisJCQkgICAgICAgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIGJsa190CSpibG9ja25yLAorCQkJCQkgICBpbnQJYmxvY2tjbnQsCisJCQkJCSAgIHZvaWQJKnByaXZfZGF0YSksCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCB4bGF0ZSB4bDsKKworCXhsLnJlYWxfcHJpdmF0ZSA9IHByaXZfZGF0YTsKKwl4bC5mdW5jID0gZnVuYzsKKworCXJldHVybiBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoZnMsIGlubywgQkxPQ0tfRkxBR19OT19MQVJHRSB8IGZsYWdzLAorCQkJCSAgICAgYmxvY2tfYnVmLCB4bGF0ZV9mdW5jLCAmeGwpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibWFwLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhMzMyMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JtYXAuYwpAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIGJtYXAuYyAtLS0gbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXBwaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKE5PX0lOTElORV9GVU5DUykKKyNkZWZpbmUgX0JNQVBfSU5MSU5FXwlfX2lubGluZV9fCisjZWxzZQorI2RlZmluZSBfQk1BUF9JTkxJTkVfCisjZW5kaWYKKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYm1hcChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYm1hcF9mbGFncywKKwkJCSAgICAgYmxrX3QgYmxvY2ssIGJsa190ICpwaHlzX2Jsayk7CisKKyNkZWZpbmUgaW5vZGVfYm1hcChpbm9kZSwgbnIpICgoaW5vZGUpLT5pX2Jsb2NrWyhucildKQorCitzdGF0aWMgX0JNQVBfSU5MSU5FXyBlcnJjb2RlX3QgYmxvY2tfaW5kX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCQkJICAgICAgYmxrX3QgaW5kLCBjaGFyICpibG9ja19idWYsCisJCQkJCSAgICAgIGludCAqYmxvY2tzX2FsbG9jLAorCQkJCQkgICAgICBibGtfdCBuciwgYmxrX3QgKnJldF9ibGspCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGtfdAkJYjsKKworCWlmICghaW5kKSB7CisJCWlmIChmbGFncyAmIEJNQVBfU0VUKQorCQkJcmV0dXJuIEVYVDJfRVRfU0VUX0JNQVBfTk9fSU5EOworCQkqcmV0X2JsayA9IDA7CisJCXJldHVybiAwOworCX0KKwlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgaW5kLCAxLCBibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZmxhZ3MgJiBCTUFQX1NFVCkgeworCQliID0gKnJldF9ibGs7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCWIgPSBleHQyZnNfc3dhYjMyKGIpOworI2VuZGlmCisJCSgoYmxrX3QgKikgYmxvY2tfYnVmKVtucl0gPSBiOworCQlyZXR1cm4gaW9fY2hhbm5lbF93cml0ZV9ibGsoZnMtPmlvLCBpbmQsIDEsIGJsb2NrX2J1Zik7CisJfQorCisJYiA9ICgoYmxrX3QgKikgYmxvY2tfYnVmKVtucl07CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwliID0gZXh0MmZzX3N3YWIzMihiKTsKKyNlbmRpZgorCisJaWYgKCFiICYmIChmbGFncyAmIEJNQVBfQUxMT0MpKSB7CisJCWIgPSBuciA/ICgoYmxrX3QgKikgYmxvY2tfYnVmKVtuci0xXSA6IDA7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jayhmcywgYiwKKwkJCQkJICAgIGJsb2NrX2J1ZiArIGZzLT5ibG9ja3NpemUsICZiKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJKChibGtfdCAqKSBibG9ja19idWYpW25yXSA9IGV4dDJmc19zd2FiMzIoYik7CisjZWxzZQorCQkoKGJsa190ICopIGJsb2NrX2J1ZilbbnJdID0gYjsKKyNlbmRpZgorCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrKGZzLT5pbywgaW5kLCAxLCBibG9ja19idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQkoKmJsb2Nrc19hbGxvYykrKzsKKwl9CisKKwkqcmV0X2JsayA9IGI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfQk1BUF9JTkxJTkVfIGVycmNvZGVfdCBibG9ja19kaW5kX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCQkJICAgICAgIGJsa190IGRpbmQsIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCQkJICAgICAgIGludCAqYmxvY2tzX2FsbG9jLAorCQkJCQkgICAgICAgYmxrX3QgbnIsIGJsa190ICpyZXRfYmxrKQoreworCWJsa190CQliID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsa190CQlhZGRyX3Blcl9ibG9jazsKKworCWFkZHJfcGVyX2Jsb2NrID0gKGJsa190KSBmcy0+YmxvY2tzaXplID4+IDI7CisKKwlyZXR2YWwgPSBibG9ja19pbmRfYm1hcChmcywgZmxhZ3MgJiB+Qk1BUF9TRVQsIGRpbmQsIGJsb2NrX2J1ZiwKKwkJCQlibG9ja3NfYWxsb2MsIG5yIC8gYWRkcl9wZXJfYmxvY2ssICZiKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IGJsb2NrX2luZF9ibWFwKGZzLCBmbGFncywgYiwgYmxvY2tfYnVmLCBibG9ja3NfYWxsb2MsCisJCQkJbnIgJSBhZGRyX3Blcl9ibG9jaywgcmV0X2Jsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIF9CTUFQX0lOTElORV8gZXJyY29kZV90IGJsb2NrX3RpbmRfYm1hcChleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzLAorCQkJCQkgICAgICAgYmxrX3QgdGluZCwgY2hhciAqYmxvY2tfYnVmLAorCQkJCQkgICAgICAgaW50ICpibG9ja3NfYWxsb2MsCisJCQkJCSAgICAgICBibGtfdCBuciwgYmxrX3QgKnJldF9ibGspCit7CisJYmxrX3QJCWIgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWFkZHJfcGVyX2Jsb2NrOworCisJYWRkcl9wZXJfYmxvY2sgPSAoYmxrX3QpIGZzLT5ibG9ja3NpemUgPj4gMjsKKworCXJldHZhbCA9IGJsb2NrX2RpbmRfYm1hcChmcywgZmxhZ3MgJiB+Qk1BUF9TRVQsIHRpbmQsIGJsb2NrX2J1ZiwKKwkJCQkgYmxvY2tzX2FsbG9jLCBuciAvIGFkZHJfcGVyX2Jsb2NrLCAmYik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBibG9ja19pbmRfYm1hcChmcywgZmxhZ3MsIGIsIGJsb2NrX2J1ZiwgYmxvY2tzX2FsbG9jLAorCQkJCW5yICUgYWRkcl9wZXJfYmxvY2ssIHJldF9ibGspOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZXh0ZW50X2JtYXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgIGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYm1hcF9mbGFncywgYmxrNjRfdCBibG9jaywKKwkJCSAgICAgaW50ICpyZXRfZmxhZ3MsIGludCAqYmxvY2tzX2FsbG9jLAorCQkJICAgICBibGs2NF90ICpwaHlzX2Jsayk7CisKK3N0YXRpYyBlcnJjb2RlX3QgaW1wbGllZF9jbHVzdGVyX2FsbG9jKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJICAgICAgIGJsazY0X3QgbGJsaywgYmxrNjRfdCAqcGh5c19ibGspCit7CisJYmxrNjRfdAliYXNlX2Jsb2NrLCBwYmxvY2sgPSAwOworCWludCBpOworCisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCWJhc2VfYmxvY2sgPSBsYmxrICYgfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCS8qCisJICogRXhjZXB0IGZvciB0aGUgbG9naWNhbCBibG9jayAobGJsaykgdGhhdCB3YXMgcGFzc2VkIGluLCBzZWFyY2ggYWxsCisJICogYmxvY2tzIGluIHRoaXMgbG9naWNhbCBjbHVzdGVyIGZvciBhIG1hcHBpbmcgdG8gYSBwaHlzaWNhbCBjbHVzdGVyLgorCSAqIElmIGFueSBzdWNoIG1hcCBleGlzdHMsIGNhbGN1bGF0ZSB0aGUgcGh5c2ljYWwgYmxvY2sgdGhhdCBtYXBzIHRvCisJICogdGhlIGxvZ2ljYWwgYmxvY2sgYW5kIHJldHVybiB0aGF0LgorCSAqCisJICogVGhlIG9sZCBjb2RlIHdvdWxkbid0IGV2ZW4gbG9vayBpZiAoYmxvY2sgJSBjbHVzdGVyX3JhdGlvKSA9PSAwOworCSAqIHRoaXMgaXMgaW5jb3JyZWN0IGlmIHdlJ3JlIGFsbG9jYXRpbmcgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsgaSsrKSB7CisJCWlmIChiYXNlX2Jsb2NrICsgaSA9PSBsYmxrKQorCQkJY29udGludWU7CisJCWV4dGVudF9ibWFwKGZzLCBpbm8sIGlub2RlLCBoYW5kbGUsIDAsIDAsCisJCQkgICAgYmFzZV9ibG9jayArIGksIDAsIDAsICZwYmxvY2spOworCQlpZiAocGJsb2NrKQorCQkJYnJlYWs7CisJfQorCWlmIChwYmxvY2sgPT0gMCkKKwkJcmV0dXJuIDA7CisJKnBoeXNfYmxrID0gcGJsb2NrIC0gaSArIChsYmxrIC0gYmFzZV9ibG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRyeSB0byBtYXAgYSBsb2dpY2FsIGJsb2NrIHRvIGFuIGFscmVhZHktYWxsb2NhdGVkIHBoeXNpY2FsIGNsdXN0ZXIuICovCitlcnJjb2RlX3QgZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGJsazY0X3QgbGJsaywKKwkJCQkgICBibGs2NF90ICpwYmxrKQoreworCWV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZTsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJLyogTmVlZCBiaWdhbGxvYyBhbmQgZXh0ZW50cyB0byBiZSBlbmFibGVkICovCisJKnBibGsgPSAwOworCWlmICghRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmaGFuZGxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IGltcGxpZWRfY2x1c3Rlcl9hbGxvYyhmcywgaW5vLCBpbm9kZSwgaGFuZGxlLCBsYmxrLCBwYmxrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDI7CisKK291dDI6CisJZXh0MmZzX2V4dGVudF9mcmVlKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBleHRlbnRfYm1hcChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJICAgICBjaGFyICpibG9ja19idWYsIGludCBibWFwX2ZsYWdzLCBibGs2NF90IGJsb2NrLAorCQkJICAgICBpbnQgKnJldF9mbGFncywgaW50ICpibG9ja3NfYWxsb2MsCisJCQkgICAgIGJsazY0X3QgKnBoeXNfYmxrKQoreworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwl1bnNpZ25lZCBpbnQJCW9mZnNldDsKKwllcnJjb2RlX3QJCXJldHZhbCA9IDA7CisJYmxrNjRfdAkJCWJsazY0ID0gMDsKKwlpbnQJCQlhbGxvYyA9IDA7CisKKwlpZiAoYm1hcF9mbGFncyAmIEJNQVBfU0VUKSB7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoaGFuZGxlLCBibG9jaywKKwkJCQkJCSpwaHlzX2JsaywgMCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290byhoYW5kbGUsIGJsb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCS8qIElmIHRoZSBleHRlbnQgaXMgbm90IGZvdW5kLCByZXR1cm4gcGh5c19ibGsgPSAwICovCisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EKQorCQkJZ290byBnb3RfYmxvY2s7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfQ1VSUkVOVCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlvZmZzZXQgPSBibG9jayAtIGV4dGVudC5lX2xibGs7CisJaWYgKGJsb2NrID49IGV4dGVudC5lX2xibGsgJiYgKG9mZnNldCA8PSBleHRlbnQuZV9sZW4pKSB7CisJCSpwaHlzX2JsayA9IGV4dGVudC5lX3BibGsgKyBvZmZzZXQ7CisJCWlmIChyZXRfZmxhZ3MgJiYgZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCQkqcmV0X2ZsYWdzIHw9IEJNQVBfUkVUX1VOSU5JVDsKKwl9Citnb3RfYmxvY2s6CisJaWYgKCgqcGh5c19ibGsgPT0gMCkgJiYgKGJtYXBfZmxhZ3MgJiBCTUFQX0FMTE9DKSkgeworCQlpbXBsaWVkX2NsdXN0ZXJfYWxsb2MoZnMsIGlubywgaW5vZGUsIGhhbmRsZSwgYmxvY2ssICZibGs2NCk7CisJCWlmIChibGs2NCkKKwkJCWdvdG8gc2V0X2V4dGVudDsKKwkJcmV0dmFsID0gZXh0ZW50X2JtYXAoZnMsIGlubywgaW5vZGUsIGhhbmRsZSwgYmxvY2tfYnVmLAorCQkJCSAgICAgMCwgYmxvY2stMSwgMCwgYmxvY2tzX2FsbG9jLCAmYmxrNjQpOworCQlpZiAocmV0dmFsKQorCQkJYmxrNjQgPSAwOworCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2syKGZzLCBibGs2NCwgYmxvY2tfYnVmLAorCQkJCQkgICAgICZibGs2NCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlibGs2NCAmPSB+RVhUMkZTX0NMVVNURVJfTUFTSyhmcyk7CisJCWJsazY0ICs9IEVYVDJGU19DTFVTVEVSX01BU0soZnMpICYgYmxvY2s7CisJCWFsbG9jKys7CisJc2V0X2V4dGVudDoKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9zZXRfYm1hcChoYW5kbGUsIGJsb2NrLAorCQkJCQkJYmxrNjQsIDApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJLyogVXBkYXRlIGlub2RlIGFmdGVyIHNldHRpbmcgZXh0ZW50ICovCisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sIGlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCSpibG9ja3NfYWxsb2MgKz0gYWxsb2M7CisJCSpwaHlzX2JsayA9IGJsazY0OworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGV4dDJmc19maWxlX2Jsb2NrX29mZnNldF90b29fYmlnKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgICAgYmxrNjRfdCBvZmZzZXQpCit7CisJYmxrNjRfdCBhZGRyX3Blcl9ibG9jaywgbWF4X21hcF9ibG9jazsKKworCS8qIEtlcm5lbCBzZWVtcyB0byBjdXQgdXMgb2ZmIGF0IDQyOTQ5NjcyOTQgYmxvY2tzICovCisJaWYgKG9mZnNldCA+PSAoMVVMTCA8PCAzMikgLSAxKQorCQlyZXR1cm4gMTsKKworCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkKKwkJcmV0dXJuIDA7CisKKwlhZGRyX3Blcl9ibG9jayA9IGZzLT5ibG9ja3NpemUgPj4gMjsKKwltYXhfbWFwX2Jsb2NrID0gYWRkcl9wZXJfYmxvY2s7CisJbWF4X21hcF9ibG9jayArPSBhZGRyX3Blcl9ibG9jayAqIGFkZHJfcGVyX2Jsb2NrOworCW1heF9tYXBfYmxvY2sgKz0gYWRkcl9wZXJfYmxvY2sgKiBhZGRyX3Blcl9ibG9jayAqIGFkZHJfcGVyX2Jsb2NrOworCW1heF9tYXBfYmxvY2sgKz0gMTI7CisKKwlyZXR1cm4gb2Zmc2V0ID49IG1heF9tYXBfYmxvY2s7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfYm1hcDIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgICBjaGFyICpibG9ja19idWYsIGludCBibWFwX2ZsYWdzLCBibGs2NF90IGJsb2NrLAorCQkgICAgICAgaW50ICpyZXRfZmxhZ3MsIGJsazY0X3QgKnBoeXNfYmxrKQoreworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlX2J1ZjsKKwlleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUgPSAwOworCWJsa190IGFkZHJfcGVyX2Jsb2NrOworCWJsa190CWIsIGJsazMyOworCWNoYXIJKmJ1ZiA9IDA7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJaW50CQlibG9ja3NfYWxsb2MgPSAwLCBpbm9kZV9kaXJ0eSA9IDA7CisKKwlpZiAoIShibWFwX2ZsYWdzICYgQk1BUF9TRVQpKQorCQkqcGh5c19ibGsgPSAwOworCisJaWYgKHJldF9mbGFncykKKwkJKnJldF9mbGFncyA9IDA7CisKKwkvKiBSZWFkIGlub2RlIHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIWlub2RlKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaW5vZGUgPSAmaW5vZGVfYnVmOworCX0KKwlhZGRyX3Blcl9ibG9jayA9IChibGtfdCkgZnMtPmJsb2Nrc2l6ZSA+PiAyOworCisJaWYgKGV4dDJmc19maWxlX2Jsb2NrX29mZnNldF90b29fYmlnKGZzLCBpbm9kZSwgYmxvY2spKQorCQlyZXR1cm4gRVhUMl9FVF9GSUxFX1RPT19CSUc7CisKKwlpZiAoIWJsb2NrX2J1ZikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KDIsIGZzLT5ibG9ja3NpemUsICZidWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJYmxvY2tfYnVmID0gYnVmOworCX0KKworCWlmIChpbm9kZS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgeworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmaGFuZGxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJcmV0dmFsID0gZXh0ZW50X2JtYXAoZnMsIGlubywgaW5vZGUsIGhhbmRsZSwgYmxvY2tfYnVmLAorCQkJCSAgICAgYm1hcF9mbGFncywgYmxvY2ssIHJldF9mbGFncywKKwkJCQkgICAgICZibG9ja3NfYWxsb2MsIHBoeXNfYmxrKTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChibG9jayA8IEVYVDJfTkRJUl9CTE9DS1MpIHsKKwkJaWYgKGJtYXBfZmxhZ3MgJiBCTUFQX1NFVCkgeworCQkJYiA9ICpwaHlzX2JsazsKKwkJCWlub2RlX2JtYXAoaW5vZGUsIGJsb2NrKSA9IGI7CisJCQlpbm9kZV9kaXJ0eSsrOworCQkJZ290byBkb25lOworCQl9CisKKwkJKnBoeXNfYmxrID0gaW5vZGVfYm1hcChpbm9kZSwgYmxvY2spOworCQliID0gYmxvY2sgPyBpbm9kZV9ibWFwKGlub2RlLCBibG9jay0xKSA6IDA7CisKKwkJaWYgKCgqcGh5c19ibGsgPT0gMCkgJiYgKGJtYXBfZmxhZ3MgJiBCTUFQX0FMTE9DKSkgeworCQkJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrKGZzLCBiLCBibG9ja19idWYsICZiKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJaW5vZGVfYm1hcChpbm9kZSwgYmxvY2spID0gYjsKKwkJCWJsb2Nrc19hbGxvYysrOworCQkJKnBoeXNfYmxrID0gYjsKKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5kaXJlY3QgYmxvY2sgKi8KKwlibG9jayAtPSBFWFQyX05ESVJfQkxPQ0tTOworCWJsazMyID0gKnBoeXNfYmxrOworCWlmIChibG9jayA8IGFkZHJfcGVyX2Jsb2NrKSB7CisJCWIgPSBpbm9kZV9ibWFwKGlub2RlLCBFWFQyX0lORF9CTE9DSyk7CisJCWlmICghYikgeworCQkJaWYgKCEoYm1hcF9mbGFncyAmIEJNQVBfQUxMT0MpKSB7CisJCQkJaWYgKGJtYXBfZmxhZ3MgJiBCTUFQX1NFVCkKKwkJCQkJcmV0dmFsID0gRVhUMl9FVF9TRVRfQk1BUF9OT19JTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQliID0gaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9JTkRfQkxPQ0stMSk7CisgCQkJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrKGZzLCBiLCBibG9ja19idWYsICZiKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9JTkRfQkxPQ0spID0gYjsKKwkJCWJsb2Nrc19hbGxvYysrOworCQl9CisJCXJldHZhbCA9IGJsb2NrX2luZF9ibWFwKGZzLCBibWFwX2ZsYWdzLCBiLCBibG9ja19idWYsCisJCQkJCSZibG9ja3NfYWxsb2MsIGJsb2NrLCAmYmxrMzIpOworCQlpZiAocmV0dmFsID09IDApCisJCQkqcGh5c19ibGsgPSBibGszMjsKKwkJZ290byBkb25lOworCX0KKworCS8qIERvdWJseSBpbmRpcmVjdCBibG9jayAgKi8KKwlibG9jayAtPSBhZGRyX3Blcl9ibG9jazsKKwlpZiAoYmxvY2sgPCBhZGRyX3Blcl9ibG9jayAqIGFkZHJfcGVyX2Jsb2NrKSB7CisJCWIgPSBpbm9kZV9ibWFwKGlub2RlLCBFWFQyX0RJTkRfQkxPQ0spOworCQlpZiAoIWIpIHsKKwkJCWlmICghKGJtYXBfZmxhZ3MgJiBCTUFQX0FMTE9DKSkgeworCQkJCWlmIChibWFwX2ZsYWdzICYgQk1BUF9TRVQpCisJCQkJCXJldHZhbCA9IEVYVDJfRVRfU0VUX0JNQVBfTk9fSU5EOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJYiA9IGlub2RlX2JtYXAoaW5vZGUsIEVYVDJfSU5EX0JMT0NLKTsKKyAJCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NfYmxvY2soZnMsIGIsIGJsb2NrX2J1ZiwgJmIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlpbm9kZV9ibWFwKGlub2RlLCBFWFQyX0RJTkRfQkxPQ0spID0gYjsKKwkJCWJsb2Nrc19hbGxvYysrOworCQl9CisJCXJldHZhbCA9IGJsb2NrX2RpbmRfYm1hcChmcywgYm1hcF9mbGFncywgYiwgYmxvY2tfYnVmLAorCQkJCQkgJmJsb2Nrc19hbGxvYywgYmxvY2ssICZibGszMik7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCSpwaHlzX2JsayA9IGJsazMyOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogVHJpcGx5IGluZGlyZWN0IGJsb2NrICovCisJYmxvY2sgLT0gYWRkcl9wZXJfYmxvY2sgKiBhZGRyX3Blcl9ibG9jazsKKwliID0gaW5vZGVfYm1hcChpbm9kZSwgRVhUMl9USU5EX0JMT0NLKTsKKwlpZiAoIWIpIHsKKwkJaWYgKCEoYm1hcF9mbGFncyAmIEJNQVBfQUxMT0MpKSB7CisJCQlpZiAoYm1hcF9mbGFncyAmIEJNQVBfU0VUKQorCQkJCXJldHZhbCA9IEVYVDJfRVRfU0VUX0JNQVBfTk9fSU5EOworCQkJZ290byBkb25lOworCQl9CisKKwkJYiA9IGlub2RlX2JtYXAoaW5vZGUsIEVYVDJfRElORF9CTE9DSyk7CisJCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jayhmcywgYiwgYmxvY2tfYnVmLCAmYik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCWlub2RlX2JtYXAoaW5vZGUsIEVYVDJfVElORF9CTE9DSykgPSBiOworCQlibG9ja3NfYWxsb2MrKzsKKwl9CisJcmV0dmFsID0gYmxvY2tfdGluZF9ibWFwKGZzLCBibWFwX2ZsYWdzLCBiLCBibG9ja19idWYsCisJCQkJICZibG9ja3NfYWxsb2MsIGJsb2NrLCAmYmxrMzIpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJKnBoeXNfYmxrID0gYmxrMzI7Citkb25lOgorCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlpZiAoaGFuZGxlKQorCQlleHQyZnNfZXh0ZW50X2ZyZWUoaGFuZGxlKTsKKwlpZiAoKHJldHZhbCA9PSAwKSAmJiAoYmxvY2tzX2FsbG9jIHx8IGlub2RlX2RpcnR5KSkgeworCQlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGZzLCBpbm9kZSwgYmxvY2tzX2FsbG9jKTsKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sIGlub2RlKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19ibWFwKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkgICAgICBjaGFyICpibG9ja19idWYsIGludCBibWFwX2ZsYWdzLCBibGtfdCBibG9jaywKKwkJICAgICAgYmxrX3QgKnBoeXNfYmxrKQoreworCWVycmNvZGVfdCByZXQ7CisJYmxrNjRfdAlyZXRfYmxrID0gKnBoeXNfYmxrOworCisJcmV0ID0gZXh0MmZzX2JtYXAyKGZzLCBpbm8sIGlub2RlLCBibG9ja19idWYsIGJtYXBfZmxhZ3MsIGJsb2NrLAorCQkJICAgIDAsICZyZXRfYmxrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChyZXRfYmxrID49ICgobG9uZyBsb25nKSAxIDw8IDMyKSkKKwkJcmV0dXJuIEVPVkVSRkxPVzsKKwkqcGh5c19ibGsgPSByZXRfYmxrOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYm1hcDY0LmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibWFwNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDRkMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYm1hcDY0LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBibWFwNjQuaCAtLS0gNjQtYml0IGJpdG1hcCBzdHJ1Y3R1cmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKK3N0cnVjdCBleHQyX2JtYXBfc3RhdGlzdGljcyB7CisJaW50CQl0eXBlOworCXN0cnVjdCB0aW1ldmFsCWNyZWF0ZWQ7CisKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCXVuc2lnbmVkIGxvbmcJY29weV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCXJlc2l6ZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCW1hcmtfY291bnQ7CisJdW5zaWduZWQgbG9uZwl1bm1hcmtfY291bnQ7CisJdW5zaWduZWQgbG9uZwl0ZXN0X2NvdW50OworCXVuc2lnbmVkIGxvbmcJbWFya19leHRfY291bnQ7CisJdW5zaWduZWQgbG9uZwl1bm1hcmtfZXh0X2NvdW50OworCXVuc2lnbmVkIGxvbmcJdGVzdF9leHRfY291bnQ7CisJdW5zaWduZWQgbG9uZwlzZXRfcmFuZ2VfY291bnQ7CisJdW5zaWduZWQgbG9uZwlnZXRfcmFuZ2VfY291bnQ7CisJdW5zaWduZWQgbG9uZwljbGVhcl9jb3VudDsKKworCWJsazY0X3QJCWxhc3RfbWFya2VkOworCWJsazY0X3QJCWxhc3RfdGVzdGVkOworCWJsazY0X3QJCW1hcmtfYmFjazsKKwlibGs2NF90CQl0ZXN0X2JhY2s7CisKKwl1bnNpZ25lZCBsb25nCW1hcmtfc2VxOworCXVuc2lnbmVkIGxvbmcJdGVzdF9zZXE7CisjZW5kaWYgLyogQk1BUF9TVEFUU19PUFMgKi8KK307CisKKworc3RydWN0IGV4dDJmc19zdHJ1Y3RfZ2VuZXJpY19iaXRtYXAgeworCWVycmNvZGVfdAkJbWFnaWM7CisJZXh0Ml9maWxzeXMgCQlmczsKKwlzdHJ1Y3QgZXh0Ml9iaXRtYXBfb3BzCSpiaXRtYXBfb3BzOworCWludAkJCWZsYWdzOworCV9fdTY0CQkJc3RhcnQsIGVuZDsKKwlfX3U2NAkJCXJlYWxfZW5kOworCWludAkJCWNsdXN0ZXJfYml0czsKKwljaGFyCQkJKmRlc2NyaXB0aW9uOworCXZvaWQJCQkqcHJpdmF0ZTsKKwllcnJjb2RlX3QJCWJhc2VfZXJyb3JfY29kZTsKKyNpZmRlZiBCTUFQX1NUQVRTCisJc3RydWN0IGV4dDJfYm1hcF9zdGF0aXN0aWNzCXN0YXRzOworI2VuZGlmCit9OworCisjZGVmaW5lIEVYVDJGU19JU18zMl9CSVRNQVAoYm1hcCkgXAorCSgoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQKSB8fCBcCisJICgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQKSB8fCBcCisJICgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQKSkKKworI2RlZmluZSBFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApIFwKKwkoKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUDY0KSB8fCBcCisJICgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQNjQpIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVA2NCkpCisKK3N0cnVjdCBleHQyX2JpdG1hcF9vcHMgeworCWludAl0eXBlOworCS8qIEdlbmVyaWMgYm1hcCBvcGVyYXRvcnMgKi8KKwllcnJjb2RlX3QgKCpuZXdfYm1hcCkoZXh0Ml9maWxzeXMgZnMsIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwKTsKKwl2b2lkCSgqZnJlZV9ibWFwKShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKTsKKwllcnJjb2RlX3QgKCpjb3B5X2JtYXApKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBkZXN0KTsKKwllcnJjb2RlX3QgKCpyZXNpemVfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCSAgICAgICBfX3U2NCBuZXdfZW5kLAorCQkJICAgICAgIF9fdTY0IG5ld19yZWFsX2VuZCk7CisJLyogYml0IHNldC90ZXN0IG9wZXJhdG9ycyAqLworCWludAkoKm1hcmtfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnKTsKKwlpbnQJKCp1bm1hcmtfYm1hcCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnKTsKKwlpbnQJKCp0ZXN0X2JtYXApKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIF9fdTY0IGFyZyk7CisJdm9pZAkoKm1hcmtfYm1hcF9leHRlbnQpKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIF9fdTY0IGFyZywKKwkJCQkgICAgdW5zaWduZWQgaW50IG51bSk7CisJdm9pZAkoKnVubWFya19ibWFwX2V4dGVudCkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwgX191NjQgYXJnLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBudW0pOworCWludAkoKnRlc3RfY2xlYXJfYm1hcF9leHRlbnQpKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgX191NjQgYXJnLCB1bnNpZ25lZCBpbnQgbnVtKTsKKwllcnJjb2RlX3QgKCpzZXRfYm1hcF9yYW5nZSkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgX191NjQgc3RhcnQsIHNpemVfdCBudW0sIHZvaWQgKmluKTsKKwllcnJjb2RlX3QgKCpnZXRfYm1hcF9yYW5nZSkoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgX191NjQgc3RhcnQsIHNpemVfdCBudW0sIHZvaWQgKm91dCk7CisJdm9pZCAoKmNsZWFyX2JtYXApKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApOworCXZvaWQgKCpwcmludF9zdGF0cykoZXh0MmZzX2dlbmVyaWNfYml0bWFwKTsKKworCS8qIEZpbmQgdGhlIGZpcnN0IHplcm8gYml0IGJldHdlZW4gc3RhcnQgYW5kIGVuZCwgaW5jbHVzaXZlLgorCSAqIE1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGEgZ2VuZXJpYyBmdW5jdGlvbiBpcyB1c2VkLiAqLworCWVycmNvZGVfdCAoKmZpbmRfZmlyc3RfemVybykoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsIF9fdTY0ICpvdXQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBleHQyX2JpdG1hcF9vcHMgZXh0MmZzX2Jsa21hcDY0X2JpdGFycmF5OworZXh0ZXJuIHN0cnVjdCBleHQyX2JpdG1hcF9vcHMgZXh0MmZzX2Jsa21hcDY0X3JidHJlZTsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Jtb3ZlLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDgwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ibW92ZS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogYm1vdmUuYyAtLS0gTW92ZSBibG9ja3MgYXJvdW5kIHRvIG1ha2Ugd2F5IGZvciBhIHBhcnRpY3VsYXIKKyAqIAlmaWxlc3lzdGVtIHN0cnVjdHVyZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK3N0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCB7CisJZXh0Ml9pbm9fdAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlICoJaW5vZGU7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcAlyZXNlcnZlOworCWV4dDJmc19ibG9ja19iaXRtYXAJYWxsb2NfbWFwOworCWVycmNvZGVfdAkJZXJyb3I7CisJY2hhcgkJCSpidWY7CisJaW50CQkJYWRkX2RpcjsKKwlpbnQJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqYmxvY2tfbnIsCisJCQkgZTJfYmxrY250X3QgYmxvY2tjbnQsIGJsazY0X3QgcmVmX2Jsb2NrLAorCQkJIGludCByZWZfb2Zmc2V0LCB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICpwYjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJcmV0OworCWJsazY0X3QJCWJsb2NrLCBvcmlnOworCisJcGIgPSAoc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0ICopIHByaXZfZGF0YTsKKwlibG9jayA9IG9yaWcgPSAqYmxvY2tfbnI7CisJcmV0ID0gMDsKKworCS8qCisJICogTGV0J3Mgc2VlIGlmIHRoaXMgaXMgb25lIHdoaWNoIHdlIG5lZWQgdG8gcmVsb2NhdGUKKwkgKi8KKwlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihwYi0+cmVzZXJ2ZSwgYmxvY2spKSB7CisJCWRvIHsKKwkJCWlmICgrK2Jsb2NrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCQlibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCQkJaWYgKGJsb2NrID09IG9yaWcpIHsKKwkJCQlwYi0+ZXJyb3IgPSBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUw7CisJCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQkJfQorCQl9IHdoaWxlIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHBiLT5yZXNlcnZlLCBibG9jaykgfHwKKwkJCSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHBiLT5hbGxvY19tYXAsIGJsb2NrKSk7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgb3JpZywgMSwgcGItPmJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBiLT5lcnJvciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxvY2ssIDEsIHBiLT5idWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlwYi0+ZXJyb3IgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJKmJsb2NrX25yID0gYmxvY2s7CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocGItPmFsbG9jX21hcCwgYmxvY2spOworCQlyZXQgPSBCTE9DS19DSEFOR0VEOworCQlpZiAocGItPmZsYWdzICYgRVhUMl9CTU9WRV9ERUJVRykKKwkJCXByaW50ZigiaW5vPSV1LCBibG9ja2NudD0lbGxkLCAlbGx1LT4lbGx1XG4iLAorCQkJICAgICAgICh1bnNpZ25lZCkgcGItPmlubywgYmxvY2tjbnQsIAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG9yaWcsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2spOworCX0KKwlpZiAocGItPmFkZF9kaXIpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsIHBiLT5pbm8sCisJCQkJCSAgICAgICBibG9jaywgYmxvY2tjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlwYi0+ZXJyb3IgPSByZXR2YWw7CisJCQlyZXQgfD0gQkxPQ0tfQUJPUlQ7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworZXJyY29kZV90IGV4dDJmc19tb3ZlX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCByZXNlcnZlLAorCQkJICAgICBleHQyZnNfYmxvY2tfYml0bWFwIGFsbG9jX21hcCwKKwkJCSAgICAgaW50IGZsYWdzKQoreworCWV4dDJfaW5vX3QJaW5vOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHBiOworCWV4dDJfaW5vZGVfc2NhbglzY2FuOworCWNoYXIJCSpibG9ja19idWY7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBiLnJlc2VydmUgPSByZXNlcnZlOworCXBiLmVycm9yID0gMDsKKwlwYi5hbGxvY19tYXAgPSBhbGxvY19tYXAgPyBhbGxvY19tYXAgOiBmcy0+YmxvY2tfbWFwOworCXBiLmZsYWdzID0gZmxhZ3M7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KDQsIGZzLT5ibG9ja3NpemUsICZibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcGIuYnVmID0gYmxvY2tfYnVmICsgZnMtPmJsb2Nrc2l6ZSAqIDM7CisKKwkvKgorCSAqIElmIEdFVF9EQkxJU1QgaXMgc2V0IGluIHRoZSBmbGFncyBmaWVsZCwgdGhlbiB3ZSBzaG91bGQKKwkgKiBnYXRoZXIgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIHdoaWxlIHdlJ3JlIGRvaW5nIHRoZQorCSAqIGJsb2NrIG1vdmUuCisJICovCisJaWYgKGZsYWdzICYgRVhUMl9CTU9WRV9HRVRfREJMSVNUKSB7CisJCWlmIChmcy0+ZGJsaXN0KSB7CisJCQlleHQyZnNfZnJlZV9kYmxpc3QoZnMtPmRibGlzdCk7CisJCQlmcy0+ZGJsaXN0ID0gTlVMTDsKKwkJfQorCQlyZXR2YWwgPSBleHQyZnNfaW5pdF9kYmxpc3QoZnMsIDApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGUoc2NhbiwgJmlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJd2hpbGUgKGlubykgeworCQlpZiAoKGlub2RlLmlfbGlua3NfY291bnQgPT0gMCkgfHwKKwkJICAgICFleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoZnMsICZpbm9kZSkpCisJCQlnb3RvIG5leHQ7CisKKwkJcGIuaW5vID0gaW5vOworCQlwYi5pbm9kZSA9ICZpbm9kZTsKKworCQlwYi5hZGRfZGlyID0gKExJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSAmJgorCQkJICAgICAgZmxhZ3MgJiBFWFQyX0JNT1ZFX0dFVF9EQkxJU1QpOworCisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLCAwLCBibG9ja19idWYsCisJCQkJCSAgICAgICBwcm9jZXNzX2Jsb2NrLCAmcGIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKHBiLmVycm9yKQorCQkJcmV0dXJuIHBiLmVycm9yOworCisJbmV4dDoKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9CQURfQkxPQ0tfSU5fSU5PREVfVEFCTEUpCisJCQlnb3RvIG5leHQ7CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9icmVsLmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9icmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZGRkNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2JyZWwuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogYnJlbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSB7CisJYmxrNjRfdAluZXc7CisJX19zMTYJb2Zmc2V0OworCV9fdTE2CWZsYWdzOworCXVuaW9uIHsKKwkJYmxrNjRfdAkJYmxvY2tfcmVmOworCQlleHQyX2lub190CWlub2RlX3JlZjsKKwl9IG93bmVyOworfTsKKworI2RlZmluZSBSRUxPQ0FURV9UWVBFX1JFRiAgMHgwMDA3CisjZGVmaW5lIFJFTE9DQVRFX0JMT0NLX1JFRiAweDAwMDEKKyNkZWZpbmUgUkVMT0NBVEVfSU5PREVfUkVGIDB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRpb25fdGFibGUgKmV4dDJfYnJlbDsKKworc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGlvbl90YWJsZSB7CisJX191MzIJbWFnaWM7CisJY2hhcgkqbmFtZTsKKwlibGs2NF90CWN1cnJlbnQ7CisJdm9pZAkqcHJpdl9kYXRhOworCisJLyoKKwkgKiBBZGQgYSBibG9jayByZWxvY2F0aW9uIGVudHJ5LgorCSAqLworCWVycmNvZGVfdCAoKnB1dCkoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLAorCQkJICAgICAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIEdldCBhIGJsb2NrIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJZXJyY29kZV90ICgqZ2V0KShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIGJsb2NrIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpzdGFydF9pdGVyKShleHQyX2JyZWwgYnJlbCk7CisKKwkvKgorCSAqIFRoZSBpdGVyYXRvciBmdW5jdGlvbiBmb3IgdGhlIGlub2RlIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKiBSZXR1cm5zIGFuIGlub2RlIG51bWJlciBvZiAwIHdoZW4gb3V0IG9mIGVudHJpZXMuCisJICovCisJZXJyY29kZV90ICgqbmV4dCkoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3QgKm9sZCwKKwkJCSAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIE1vdmUgdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUgZnJvbSBvbmUgYmxvY2sgbnVtYmVyIHRvCisJICogYW5vdGhlci4KKwkgKi8KKwllcnJjb2RlX3QgKCptb3ZlKShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQsIGJsa190IG5ldyk7CisKKwkvKgorCSAqIFJlbW92ZSBhIGJsb2NrIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJZXJyY29kZV90ICgqZGVsZXRlKShleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCBvbGQpOworCisKKwkvKgorCSAqIEZyZWUgdGhlIGJsb2NrIHJlbG9jYXRpb24gdGFibGUuCisJICovCisJZXJyY29kZV90ICgqZnJlZSkoZXh0Ml9icmVsIGJyZWwpOworfTsKKworZXJyY29kZV90IGV4dDJmc19icmVsX21lbWFycmF5X2NyZWF0ZShjaGFyICpuYW1lLCBibGs2NF90IG1heF9ibG9jaywKKwkJCQkgICAgZXh0Ml9icmVsICpicmVsKTsKKworI2RlZmluZSBleHQyZnNfYnJlbF9wdXQoYnJlbCwgb2xkLCBlbnQpICgoYnJlbCktPnB1dCgoYnJlbCksIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2JyZWxfZ2V0KGJyZWwsIG9sZCwgZW50KSAoKGJyZWwpLT5nZXQoKGJyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19icmVsX3N0YXJ0X2l0ZXIoYnJlbCkgKChicmVsKS0+c3RhcnRfaXRlcigoYnJlbCkpKQorI2RlZmluZSBleHQyZnNfYnJlbF9uZXh0KGJyZWwsIG9sZCwgZW50KSAoKGJyZWwpLT5uZXh0KChicmVsKSwgb2xkLCBlbnQpKQorI2RlZmluZSBleHQyZnNfYnJlbF9tb3ZlKGJyZWwsIG9sZCwgbmV3KSAoKGJyZWwpLT5tb3ZlKChicmVsKSwgb2xkLCBuZXcpKQorI2RlZmluZSBleHQyZnNfYnJlbF9kZWxldGUoYnJlbCwgb2xkKSAoKGJyZWwpLT5kZWxldGUoKGJyZWwpLCBvbGQpKQorI2RlZmluZSBleHQyZnNfYnJlbF9mcmVlKGJyZWwpICgoYnJlbCktPmZyZWUoKGJyZWwpKSkKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvYnJlbF9tYS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvYnJlbF9tYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOThjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9icmVsX21hLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBicmVsX21hLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBUT0RPOiByZXdyaXRlIHRvIG5vdCB1c2UgYSBkaXJlY3QgYXJyYXkhISEgIChGb3J0dW5hdGVseSB0aGlzCisgKiBtb2R1bGUgaXNuJ3QgcmVhbGx5IHVzZWQgeWV0LikKKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImJyZWwuaCIKKworc3RhdGljIGVycmNvZGVfdCBibWFfcHV0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwKKwkJCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpOworc3RhdGljIGVycmNvZGVfdCBibWFfZ2V0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwKKwkJCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpOworc3RhdGljIGVycmNvZGVfdCBibWFfc3RhcnRfaXRlcihleHQyX2JyZWwgYnJlbCk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9uZXh0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90ICpvbGQsCisJCQkgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9tb3ZlKGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwgYmxrNjRfdCBuZXcpOworc3RhdGljIGVycmNvZGVfdCBibWFfZGVsZXRlKGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCk7CitzdGF0aWMgZXJyY29kZV90IGJtYV9mcmVlKGV4dDJfYnJlbCBicmVsKTsKKworc3RydWN0IGJyZWxfbWEgeworCV9fdTMyIG1hZ2ljOworCWJsazY0X3QgbWF4X2Jsb2NrOworCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnRyaWVzOworfTsKKworZXJyY29kZV90IGV4dDJmc19icmVsX21lbWFycmF5X2NyZWF0ZShjaGFyICpuYW1lLCBibGs2NF90IG1heF9ibG9jaywKKwkJCQkgICAgICBleHQyX2JyZWwgKm5ld19icmVsKQoreworCWV4dDJfYnJlbAkJYnJlbCA9IDA7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgYnJlbF9tYSAJKm1hID0gMDsKKwlzaXplX3QJCXNpemU7CisKKwkqbmV3X2JyZWwgPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBtZW1vcnkgc3RydWN0dXJlcworCSAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0aW9uX3RhYmxlKSwKKwkJCQkmYnJlbCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KGJyZWwsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0aW9uX3RhYmxlKSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4obmFtZSkrMSwgJmJyZWwtPm5hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXN0cmNweShicmVsLT5uYW1lLCBuYW1lKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgYnJlbF9tYSksICZtYSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KG1hLCAwLCBzaXplb2Yoc3RydWN0IGJyZWxfbWEpKTsKKwlicmVsLT5wcml2X2RhdGEgPSBtYTsKKworCXNpemUgPSAoc2l6ZV90KSAoc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5KSAqCisJCQkgKG1heF9ibG9jaysxKSk7CisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShtYXhfYmxvY2srMSwKKwkJc2l6ZW9mKHN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5KSwgJm1hLT5lbnRyaWVzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwltZW1zZXQobWEtPmVudHJpZXMsIDAsIHNpemUpOworCW1hLT5tYXhfYmxvY2sgPSBtYXhfYmxvY2s7CisKKwkvKgorCSAqIEZpbGwgaW4gdGhlIGJyZWwgZGF0YSBzdHJ1Y3R1cmUKKwkgKi8KKwlicmVsLT5wdXQgPSBibWFfcHV0OworCWJyZWwtPmdldCA9IGJtYV9nZXQ7CisJYnJlbC0+c3RhcnRfaXRlciA9IGJtYV9zdGFydF9pdGVyOworCWJyZWwtPm5leHQgPSBibWFfbmV4dDsKKwlicmVsLT5tb3ZlID0gYm1hX21vdmU7CisJYnJlbC0+ZGVsZXRlID0gYm1hX2RlbGV0ZTsKKwlicmVsLT5mcmVlID0gYm1hX2ZyZWU7CisKKwkqbmV3X2JyZWwgPSBicmVsOworCXJldHVybiAwOworCitlcnJvdXQ6CisJYm1hX2ZyZWUoYnJlbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfcHV0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwKKwkJCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGJyZWxfbWEgCSptYTsKKworCW1hID0gYnJlbC0+cHJpdl9kYXRhOworCWlmIChvbGQgPiBtYS0+bWF4X2Jsb2NrKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCW1hLT5lbnRyaWVzWyh1bnNpZ25lZClvbGRdID0gKmVudDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfZ2V0KGV4dDJfYnJlbCBicmVsLCBibGs2NF90IG9sZCwKKwkJCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGJyZWxfbWEgCSptYTsKKworCW1hID0gYnJlbC0+cHJpdl9kYXRhOworCWlmIChvbGQgPiBtYS0+bWF4X2Jsb2NrKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWlmIChtYS0+ZW50cmllc1sodW5zaWduZWQpb2xkXS5uZXcgPT0gMCkKKwkJcmV0dXJuIEVOT0VOVDsKKwkqZW50ID0gbWEtPmVudHJpZXNbb2xkXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfc3RhcnRfaXRlcihleHQyX2JyZWwgYnJlbCkKK3sKKwlicmVsLT5jdXJyZW50ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfbmV4dChleHQyX2JyZWwgYnJlbCwgYmxrNjRfdCAqb2xkLAorCQkJICBzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSAqZW50KQoreworCXN0cnVjdCBicmVsX21hIAkqbWE7CisKKwltYSA9IGJyZWwtPnByaXZfZGF0YTsKKwl3aGlsZSAoKyticmVsLT5jdXJyZW50IDwgbWEtPm1heF9ibG9jaykgeworCQlpZiAobWEtPmVudHJpZXNbKHVuc2lnbmVkKWJyZWwtPmN1cnJlbnRdLm5ldyA9PSAwKQorCQkJY29udGludWU7CisJCSpvbGQgPSBicmVsLT5jdXJyZW50OworCQkqZW50ID0gbWEtPmVudHJpZXNbKHVuc2lnbmVkKWJyZWwtPmN1cnJlbnRdOworCQlyZXR1cm4gMDsKKwl9CisJKm9sZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgYm1hX21vdmUoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkLCBibGs2NF90IG5ldykKK3sKKwlzdHJ1Y3QgYnJlbF9tYSAJKm1hOworCisJbWEgPSBicmVsLT5wcml2X2RhdGE7CisJaWYgKChvbGQgPiBtYS0+bWF4X2Jsb2NrKSB8fCAobmV3ID4gbWEtPm1heF9ibG9jaykpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJaWYgKG1hLT5lbnRyaWVzWyh1bnNpZ25lZClvbGRdLm5ldyA9PSAwKQorCQlyZXR1cm4gRU5PRU5UOworCW1hLT5lbnRyaWVzWyh1bnNpZ25lZCluZXddID0gbWEtPmVudHJpZXNbb2xkXTsKKwltYS0+ZW50cmllc1sodW5zaWduZWQpb2xkXS5uZXcgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGJtYV9kZWxldGUoZXh0Ml9icmVsIGJyZWwsIGJsazY0X3Qgb2xkKQoreworCXN0cnVjdCBicmVsX21hIAkqbWE7CisKKwltYSA9IGJyZWwtPnByaXZfZGF0YTsKKwlpZiAob2xkID4gbWEtPm1heF9ibG9jaykKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwlpZiAobWEtPmVudHJpZXNbKHVuc2lnbmVkKW9sZF0ubmV3ID09IDApCisJCXJldHVybiBFTk9FTlQ7CisJbWEtPmVudHJpZXNbKHVuc2lnbmVkKW9sZF0ubmV3ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibWFfZnJlZShleHQyX2JyZWwgYnJlbCkKK3sKKwlzdHJ1Y3QgYnJlbF9tYSAJKm1hOworCisJaWYgKCFicmVsKQorCQlyZXR1cm4gMDsKKworCW1hID0gYnJlbC0+cHJpdl9kYXRhOworCisJaWYgKG1hKSB7CisJCWlmIChtYS0+ZW50cmllcykKKwkJCWV4dDJmc19mcmVlX21lbSgmbWEtPmVudHJpZXMpOworCQlleHQyZnNfZnJlZV9tZW0oJm1hKTsKKwl9CisJaWYgKGJyZWwtPm5hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmYnJlbC0+bmFtZSk7CisJZXh0MmZzX2ZyZWVfbWVtKCZicmVsKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NoZWNrX2Rlc2MuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NoZWNrX2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNjNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvY2hlY2tfZGVzYy5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogY2hlY2tfZGVzYy5jIC0tLSBDaGVjayB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgb2YgYW4gZXh0MiBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgc2FuaXR5IGNoZWNrcyB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMKKyAqLworZXJyY29kZV90IGV4dDJmc19jaGVja19kZXNjKGV4dDJfZmlsc3lzIGZzKQoreworCWV4dDJmc19ibG9ja19iaXRtYXAgYm1hcDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWRncnBfdCBpOworCWJsazY0X3QgZmlyc3RfYmxvY2sgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwlibGs2NF90IGxhc3RfYmxvY2sgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciktMTsKKwlibGs2NF90IGJsaywgYjsKKwl1bnNpZ25lZCBpbnQgajsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoRVhUMl9ERVNDX1NJWkUoZnMtPnN1cGVyKSAmIChFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpIC0gMSkpCisJCXJldHVybiBFWFQyX0VUX0JBRF9ERVNDX1NJWkU7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXAoZnMsICJjaGVja19kZXNjIG1hcCIsICZibWFwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspCisJCWV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGksIGJtYXApOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKCFFWFQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSkgeworCQkJZmlyc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBpKTsKKwkJCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGkpOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBibG9jayBiaXRtYXAgZm9yIGdyb3VwIGlzIHNhbmUKKwkJICovCisJCWJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsayA8IGZpcnN0X2Jsb2NrIHx8IGJsayA+IGxhc3RfYmxvY2sgfHwKKwkJICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9HREVTQ19CQURfQkxPQ0tfTUFQOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihibWFwLCBibGspOworCisJCS8qCisJCSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgaW5vZGUgYml0bWFwIGZvciBncm91cCBpcyBzYW5lCisJCSAqLworCQlibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCWlmIChibGsgPCBmaXJzdF9ibG9jayB8fCBibGsgPiBsYXN0X2Jsb2NrIHx8CisJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGJtYXAsIGJsaykpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfR0RFU0NfQkFEX0lOT0RFX01BUDsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKTsKKworCQkvKgorCQkgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGlub2RlIHRhYmxlIGZvciBncm91cCBpcyBzYW5lCisJCSAqLworCQlibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKTsKKwkJaWYgKGJsayA8IGZpcnN0X2Jsb2NrIHx8CisJCSAgICAoKGJsayArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwIC0gMSkgPiBsYXN0X2Jsb2NrKSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9HREVTQ19CQURfSU5PREVfVEFCTEU7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlmb3IgKGogPSAwLCBiID0gYmxrOyBqIDwgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCSAgICAgaisrLCBiKyspIHsKKwkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGJtYXAsIGIpKSB7CisJCQkJcmV0dmFsID0gRVhUMl9FVF9HREVTQ19CQURfSU5PREVfVEFCTEU7CisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJtYXAsIGIpOworCQl9CisJfQorZXJyb3V0OgorCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChibWFwKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvY2xvc2Vmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDAzODMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9jbG9zZWZzLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBjbG9zZWZzLmMgLS0tIGNsb3NlIGFuIGV4dDIgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RhdGljIGludCB0ZXN0X3Jvb3QodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQoreworCXdoaWxlICgxKSB7CisJCWlmIChhIDwgYikKKwkJCXJldHVybiAwOworCQlpZiAoYSA9PSBiKQorCQkJcmV0dXJuIDE7CisJCWlmIChhICUgYikKKwkJCXJldHVybiAwOworCQlhID0gYSAvIGI7CisJfQorfQorCitpbnQgZXh0MmZzX2JnX2hhc19zdXBlcihleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJICAgICAgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpIHx8IGdyb3VwIDw9IDEpCisJCXJldHVybiAxOworCWlmICghKGdyb3VwICYgMSkpCisJCXJldHVybiAwOworCWlmICh0ZXN0X3Jvb3QoZ3JvdXAsIDMpIHx8ICh0ZXN0X3Jvb3QoZ3JvdXAsIDUpKSB8fAorCSAgICB0ZXN0X3Jvb3QoZ3JvdXAsIDcpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMigpCisgKiBAZnM6CQkJZXh0MiBmcyBwb2ludGVyCisgKiBAZ3JvdXAJCWdpdmVuIGJsb2NrIGdyb3VwCisgKiBAcmV0X3N1cGVyX2JsazoJaWYgIU5VTEwsIHJldHVybnMgc3VwZXIgYmxvY2sgbG9jYXRpb24KKyAqIEByZXRfb2xkX2Rlc2NfYmxrOglpZiAhTlVMTCwgcmV0dXJucyBsb2NhdGlvbiBvZiB0aGUgb2xkIGJsb2NrCisgKgkJCWdyb3VwIGRlc2NyaXB0b3IKKyAqIEByZXRfbmV3X2Rlc2NfYmxrOglpZiAhTlVMTCwgcmV0dXJucyBsb2NhdGlvbiBvZiBtZXRhX2JnIGJsb2NrCisgKgkJCWdyb3VwIGRlc2NyaXB0b3IKKyAqIEByZXRfdXNlZF9ibGtzOglpZiAhTlVMTCwgcmV0dXJucyBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkKKyAqCQkJc3VwZXIgYmxvY2sgYW5kIGdyb3VwX2Rlc2NyaXB0b3JzLgorICoKKyAqIFJldHVybnMgZXJyY29kZV90IG9mIDAKKyAqLworZXJyY29kZV90IGV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIGRncnBfdCBncm91cCwKKwkJCQkJICAgYmxrNjRfdCAqcmV0X3N1cGVyX2JsaywKKwkJCQkJICAgYmxrNjRfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCQkJICAgYmxrNjRfdCAqcmV0X25ld19kZXNjX2JsaywKKwkJCQkJICAgYmxrX3QgKnJldF91c2VkX2Jsa3MpCit7CisJYmxrNjRfdAlncm91cF9ibG9jaywgc3VwZXJfYmxrID0gMCwgb2xkX2Rlc2NfYmxrID0gMCwgbmV3X2Rlc2NfYmxrID0gMDsKKwl1bnNpZ25lZCBpbnQgbWV0YV9iZywgbWV0YV9iZ19zaXplOworCWJsa190CW51bWJsb2NrcyA9IDA7CisJYmxrNjRfdCBvbGRfZGVzY19ibG9ja3M7CisJaW50CWhhc19zdXBlcjsKKworCWdyb3VwX2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCWlmIChncm91cF9ibG9jayA9PSAwICYmIGZzLT5ibG9ja3NpemUgPT0gMTAyNCkKKwkJZ3JvdXBfYmxvY2sgPSAxOyAvKiBEZWFsIHdpdGggMTAyNCBibG9ja3NpemUgJiYgYmlnYWxsb2MgKi8KKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9kZXNjX2Jsb2NrcyA9CisJCQlmcy0+ZGVzY19ibG9ja3MgKyBmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKworCWhhc19zdXBlciA9IGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGdyb3VwKTsKKworCWlmIChoYXNfc3VwZXIpIHsKKwkJc3VwZXJfYmxrID0gZ3JvdXBfYmxvY2s7CisJCW51bWJsb2NrcysrOworCX0KKwltZXRhX2JnX3NpemUgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisJbWV0YV9iZyA9IGdyb3VwIC8gbWV0YV9iZ19zaXplOworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgfHwKKwkgICAgKG1ldGFfYmcgPCBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykpIHsKKwkJaWYgKGhhc19zdXBlcikgeworCQkJb2xkX2Rlc2NfYmxrID0gZ3JvdXBfYmxvY2sgKyAxOworCQkJbnVtYmxvY2tzICs9IG9sZF9kZXNjX2Jsb2NrczsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoKGdyb3VwICUgbWV0YV9iZ19zaXplKSA9PSAwKSB8fAorCQkgICAgKChncm91cCAlIG1ldGFfYmdfc2l6ZSkgPT0gMSkgfHwKKwkJICAgICgoZ3JvdXAgJSBtZXRhX2JnX3NpemUpID09IChtZXRhX2JnX3NpemUtMSkpKSB7CisJCQlpZiAoaGFzX3N1cGVyKQorCQkJCWhhc19zdXBlciA9IDE7CisJCQluZXdfZGVzY19ibGsgPSBncm91cF9ibG9jayArIGhhc19zdXBlcjsKKwkJCW51bWJsb2NrcysrOworCQl9CisJfQorCisJaWYgKHJldF9zdXBlcl9ibGspCisJCSpyZXRfc3VwZXJfYmxrID0gc3VwZXJfYmxrOworCWlmIChyZXRfb2xkX2Rlc2NfYmxrKQorCQkqcmV0X29sZF9kZXNjX2JsayA9IG9sZF9kZXNjX2JsazsKKwlpZiAocmV0X25ld19kZXNjX2JsaykKKwkJKnJldF9uZXdfZGVzY19ibGsgPSBuZXdfZGVzY19ibGs7CisJaWYgKHJldF91c2VkX2Jsa3MpCisJCSpyZXRfdXNlZF9ibGtzID0gbnVtYmxvY2tzOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdXBlcmJsb2NrLCBibG9jayBncm91cAorICogZGVzY3JpcHRvcnMgZm9yIGEgZ2l2ZW4gYmxvY2sgZ3JvdXAuICBJdCBjdXJyZW50bHkgcmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhc3N1bWluZyB0aGF0IGlub2RlIHRhYmxlIGFuZCBhbGxvY2F0aW9uCisgKiBiaXRtYXBzIHdpbGwgYmUgaW4gdGhlIGdyb3VwLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGNhc2UKKyAqIHdoZW4gdGhlIGZsZXhfYmcgZmVhdHVyZSBpcyBlbmFibGVkLCBzbyBjYWxsZXJzIHNob3VsZCB0YWtlIGNhcmUhCisgKiBJdCB3YXMgb25seSByZWFsbHkgaW50ZW5kZWQgZm9yIHVzZSBieSBta2UyZnMsIGFuZCBldmVuIHRoZXJlIGl0J3MKKyAqIG5vdCB0aGF0IHVzZWZ1bC4KKyAqCisgKiBUaGUgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMigpIGZ1bmN0aW9uIGlzIDY0LWJpdCBibG9jayBudW1iZXIKKyAqIGNhcGFibGUgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSBzdXBlciBibG9jayBhbmQKKyAqIGdyb3VwIGRlc2NyaXB0b3JzLgorICovCitpbnQgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICBkZ3JwX3QgZ3JvdXAsCisJCQkgICAgIGJsa190ICpyZXRfc3VwZXJfYmxrLAorCQkJICAgICBibGtfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCSAgICAgYmxrX3QgKnJldF9uZXdfZGVzY19ibGssCisJCQkgICAgIGludCAqcmV0X21ldGFfYmcpCit7CisJYmxrNjRfdCByZXRfc3VwZXJfYmxrMjsKKwlibGs2NF90IHJldF9vbGRfZGVzY19ibGsyOworCWJsazY0X3QgcmV0X25ld19kZXNjX2JsazI7CisJYmxrX3QgcmV0X3VzZWRfYmxrczsKKwlibGtfdCBudW1ibG9ja3M7CisJdW5zaWduZWQgaW50IG1ldGFfYmdfc2l6ZTsKKworCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGdyb3VwLCAmcmV0X3N1cGVyX2JsazIsCisJCQkJCSZyZXRfb2xkX2Rlc2NfYmxrMiwKKwkJCQkJJnJldF9uZXdfZGVzY19ibGsyLAorCQkJCQkmcmV0X3VzZWRfYmxrcyk7CisKKwludW1ibG9ja3MgPSBleHQyZnNfZ3JvdXBfYmxvY2tzX2NvdW50KGZzLCBncm91cCk7CisKKwlpZiAocmV0X3N1cGVyX2JsaykKKwkJKnJldF9zdXBlcl9ibGsgPSAoYmxrX3QpcmV0X3N1cGVyX2JsazI7CisJaWYgKHJldF9vbGRfZGVzY19ibGspCisJCSpyZXRfb2xkX2Rlc2NfYmxrID0gKGJsa190KXJldF9vbGRfZGVzY19ibGsyOworCWlmIChyZXRfbmV3X2Rlc2NfYmxrKQorCQkqcmV0X25ld19kZXNjX2JsayA9IChibGtfdClyZXRfbmV3X2Rlc2NfYmxrMjsKKwlpZiAocmV0X21ldGFfYmcpIHsKKwkJbWV0YV9iZ19zaXplID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCQkqcmV0X21ldGFfYmcgPSBncm91cCAvIG1ldGFfYmdfc2l6ZTsKKwl9CisKKwludW1ibG9ja3MgLT0gMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICsgcmV0X3VzZWRfYmxrczsKKworCXJldHVybiBudW1ibG9ja3M7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyBvdXQgdGhlIHByaW1hcnkgc3VwZXJibG9jay4gIFdlIG5lZWQgdG8gb25seQorICogd3JpdGUgb3V0IHRob3NlIGZpZWxkcyB3aGljaCB3ZSBoYXZlIGNoYW5nZWQsIHNpbmNlIGlmIHRoZQorICogZmlsZXN5c3RlbSBpcyBtb3VudGVkLCBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNvbWUgb2YgdGhlIG90aGVyCisgKiBmaWVsZHMuCisgKgorICogSXQgdGFrZXMgYXMgaW5wdXQgYSBzdXBlcmJsb2NrIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gYnl0ZSBzd2FwcGVkCisgKiAoaWYgbmVjZXNzYXJ5KS4KKyAqCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfcHJpbWFyeV9zdXBlcmJsb2NrKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcikKK3sKKwlfX3UxNgkJKm9sZF9zdXBlciwgKm5ld19zdXBlcjsKKwlpbnQJCWNoZWNrX2lkeCwgd3JpdGVfaWR4LCBzaXplOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoIWZzLT5pby0+bWFuYWdlci0+d3JpdGVfYnl0ZSB8fCAhZnMtPm9yaWdfc3VwZXIpIHsKKwlmYWxsYmFjazoKKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIFNVUEVSQkxPQ0tfT0ZGU0VUKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIDEsIC1TVVBFUkJMT0NLX1NJWkUsCisJCQkJCSAgICAgIHN1cGVyKTsKKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIGZzLT5ibG9ja3NpemUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW9sZF9zdXBlciA9IChfX3UxNiAqKSBmcy0+b3JpZ19zdXBlcjsKKwluZXdfc3VwZXIgPSAoX191MTYgKikgc3VwZXI7CisKKwlmb3IgKGNoZWNrX2lkeCA9IDA7IGNoZWNrX2lkeCA8IFNVUEVSQkxPQ0tfU0laRS8yOyBjaGVja19pZHgrKykgeworCQlpZiAob2xkX3N1cGVyW2NoZWNrX2lkeF0gPT0gbmV3X3N1cGVyW2NoZWNrX2lkeF0pCisJCQljb250aW51ZTsKKwkJd3JpdGVfaWR4ID0gY2hlY2tfaWR4OworCQlmb3IgKGNoZWNrX2lkeCsrOyBjaGVja19pZHggPCBTVVBFUkJMT0NLX1NJWkUvMjsgY2hlY2tfaWR4KyspCisJCQlpZiAob2xkX3N1cGVyW2NoZWNrX2lkeF0gPT0gbmV3X3N1cGVyW2NoZWNrX2lkeF0pCisJCQkJYnJlYWs7CisJCXNpemUgPSAyICogKGNoZWNrX2lkeCAtIHdyaXRlX2lkeCk7CisjaWYgMAorCQlwcmludGYoIldyaXRpbmcgJWQgYnl0ZXMgc3RhcnRpbmcgYXQgJWRcbiIsCisJCSAgICAgICBzaXplLCB3cml0ZV9pZHgqMik7CisjZW5kaWYKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ieXRlKGZzLT5pbywKKwkJCSAgICAgICBTVVBFUkJMT0NLX09GRlNFVCArICgyICogd3JpdGVfaWR4KSwgc2l6ZSwKKwkJCQkJICAgICAgIG5ld19zdXBlciArIHdyaXRlX2lkeCk7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9VTklNUExFTUVOVEVEKQorCQkJZ290byBmYWxsYmFjazsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCW1lbWNweShmcy0+b3JpZ19zdXBlciwgc3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFVwZGF0ZXMgdGhlIHJldmlzaW9uIHRvIEVYVDJfRFlOQU1JQ19SRVYKKyAqLwordm9pZCBleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGV4dDJfZmlsc3lzIGZzKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKworCWlmIChzYi0+c19yZXZfbGV2ZWwgPiBFWFQyX0dPT0RfT0xEX1JFVikKKwkJcmV0dXJuOworCisJc2ItPnNfcmV2X2xldmVsID0gRVhUMl9EWU5BTUlDX1JFVjsKKwlzYi0+c19maXJzdF9pbm8gPSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTzsKKwlzYi0+c19pbm9kZV9zaXplID0gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCS8qIHNfdXVpZCBpcyBoYW5kbGVkIGJ5IGUyZnNjayBhbHJlYWR5ICovCisJLyogb3RoZXIgZmllbGRzIHNob3VsZCBiZSBsZWZ0IGFsb25lICovCit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfYmFja3VwX3N1cGVyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgIGJsazY0X3QgZ3JvdXBfYmxvY2ssCisJCQkJICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcl9zaGFkb3cpCit7CisJZGdycF90CXNncnAgPSBncm91cDsKKworCWlmIChzZ3JwID4gKCgxIDw8IDE2KSAtIDEpKQorCQlzZ3JwID0gKDEgPDwgMTYpIC0gMTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlzdXBlcl9zaGFkb3ctPnNfYmxvY2tfZ3JvdXBfbnIgPSBleHQyZnNfc3dhYjE2KHNncnApOworI2Vsc2UKKwlmcy0+c3VwZXItPnNfYmxvY2tfZ3JvdXBfbnIgPSBzZ3JwOworI2VuZGlmCisKKwlyZXR1cm4gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGdyb3VwX2Jsb2NrLCAtU1VQRVJCTE9DS19TSVpFLAorCQkJCSAgICBzdXBlcl9zaGFkb3cpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiBleHQyZnNfZmx1c2gyKGZzLCAwKTsKK30KKworZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKK3sKKwlkZ3JwX3QJCWk7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWZzX3N0YXRlOworCV9fdTMyCQlmZWF0dXJlX2luY29tcGF0OworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcl9zaGFkb3cgPSAwOworCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdyb3VwX3NoYWRvdyA9IDA7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwOworCWRncnBfdAkJajsKKyNlbmRpZgorCWNoYXIJKmdyb3VwX3B0cjsKKwlpbnQJb2xkX2Rlc2NfYmxvY2tzOworCXN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgcHJvZ3Jlc3M7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJZnNfc3RhdGUgPSBmcy0+c3VwZXItPnNfc3RhdGU7CisJZmVhdHVyZV9pbmNvbXBhdCA9IGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0OworCisJZnMtPnN1cGVyLT5zX3d0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKE5VTEwpOworCWZzLT5zdXBlci0+c19ibG9ja19ncm91cF9uciA9IDA7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJcmV0dmFsID0gRVhUMl9FVF9OT19NRU1PUlk7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oU1VQRVJCTE9DS19TSVpFLCAmc3VwZXJfc2hhZG93KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5kZXNjX2Jsb2NrcywgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkgICZncm91cF9zaGFkb3cpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbWNweShncm91cF9zaGFkb3csIGZzLT5ncm91cF9kZXNjLCAoc2l6ZV90KSBmcy0+YmxvY2tzaXplICoKKwkgICAgICAgZnMtPmRlc2NfYmxvY2tzKTsKKworCS8qIHN3YXAgdGhlIGdyb3VwIGRlc2NyaXB0b3JzICovCisJZm9yIChqID0gMDsgaiA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBqKyspIHsKKwkJZ2RwID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGdyb3VwX3NoYWRvdywgaik7CisJCWV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGZzLCBnZHApOworCX0KKyNlbHNlCisJc3VwZXJfc2hhZG93ID0gZnMtPnN1cGVyOworCWdyb3VwX3NoYWRvdyA9IGV4dDJmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywgMCk7CisjZW5kaWYKKworCS8qCisJICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgRlMgdG8gYmUgbm9uLXZhbGlkLiAgKFRoZSBzdGF0ZSBoYXMKKwkgKiBhbHJlYWR5IGJlZW4gYmFja2VkIHVwIGVhcmxpZXIsIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGFmdGVyCisJICogd2Ugd3JpdGUgb3V0IHRoZSBiYWNrdXAgc3VwZXJibG9ja3MuKQorCSAqLworCWZzLT5zdXBlci0+c19zdGF0ZSAmPSB+RVhUMl9WQUxJRF9GUzsKKwlmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+RVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVI7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJKnN1cGVyX3NoYWRvdyA9ICpmcy0+c3VwZXI7CisJZXh0MmZzX3N3YXBfc3VwZXIoc3VwZXJfc2hhZG93KTsKKyNlbmRpZgorCisJLyoKKwkgKiBJZiB0aGlzIGlzIGFuIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlLCBkb24ndCB3cml0ZSBvdXQgdGhlCisJICogYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgb3IgYW55IG9mIHRoZSBiYWNrdXAgc3VwZXJibG9ja3MKKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpCisJCWdvdG8gd3JpdGVfcHJpbWFyeV9zdXBlcmJsb2NrX29ubHk7CisKKwkvKgorCSAqIFdyaXRlIG91dCB0aGUgbWFzdGVyIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmQgdGhlIGJhY2t1cAorCSAqIHN1cGVyYmxvY2tzIGFuZCBncm91cCBkZXNjcmlwdG9ycy4KKwkgKi8KKwlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworCisJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdChmcywgJnByb2dyZXNzLCBOVUxMLAorCQkJCSAgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlibGs2NF90CXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisKKwkJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfdXBkYXRlKGZzLCAmcHJvZ3Jlc3MsIGkpOworCQlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBpLCAmc3VwZXJfYmxrLCAmb2xkX2Rlc2NfYmxrLAorCQkJCQkgJm5ld19kZXNjX2JsaywgMCk7CisKKwkJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZKSAmJmkgJiYgc3VwZXJfYmxrKSB7CisJCQlyZXR2YWwgPSB3cml0ZV9iYWNrdXBfc3VwZXIoZnMsIGksIHN1cGVyX2JsaywKKwkJCQkJCSAgICBzdXBlcl9zaGFkb3cpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCQlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1NVUEVSX09OTFkpCisJCQljb250aW51ZTsKKwkJaWYgKChvbGRfZGVzY19ibGspICYmCisJCSAgICAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFkpIHx8IChpID09IDApKSkgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sCisJCQkgICAgICBvbGRfZGVzY19ibGssIG9sZF9kZXNjX2Jsb2NrcywgZ3JvdXBfcHRyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJaWYgKG5ld19kZXNjX2JsaykgeworCQkJaW50IG1ldGFfYmcgPSBpIC8gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgbmV3X2Rlc2NfYmxrLAorCQkJCTEsIGdyb3VwX3B0ciArIChtZXRhX2JnKmZzLT5ibG9ja3NpemUpKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLCBOVUxMKTsKKworCS8qCisJICogSWYgdGhlIHdyaXRlX2JpdG1hcHMoKSBmdW5jdGlvbiBpcyBwcmVzZW50LCBjYWxsIGl0IHRvCisJICogZmx1c2ggdGhlIGJpdG1hcHMuICBUaGlzIGlzIGRvbmUgdGhpcyB3YXkgc28gdGhhdCBhIHNpbXBsZQorCSAqIHByb2dyYW0gdGhhdCBkb2Vzbid0IG1lc3Mgd2l0aCB0aGUgYml0bWFwcyBkb2Vzbid0IG5lZWQgdG8KKwkgKiBkcmFnIGluIHRoZSBiaXRtYXBzLmMgY29kZS4KKwkgKi8KKwlpZiAoZnMtPndyaXRlX2JpdG1hcHMpIHsKKwkJcmV0dmFsID0gZnMtPndyaXRlX2JpdG1hcHMoZnMpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCit3cml0ZV9wcmltYXJ5X3N1cGVyYmxvY2tfb25seToKKwkvKgorCSAqIFdyaXRlIG91dCBtYXN0ZXIgc3VwZXJibG9jay4gIFRoaXMgaGFzIHRvIGJlIGRvbmUKKwkgKiBzZXBhcmF0ZWx5LCBzaW5jZSBpdCBpcyBsb2NhdGVkIGF0IGEgZml4ZWQgbG9jYXRpb24KKwkgKiAoU1VQRVJCTE9DS19PRkZTRVQpLiAgV2UgZmx1c2ggYWxsIG90aGVyIHBlbmRpbmcgY2hhbmdlcworCSAqIG91dCB0byBkaXNrIGZpcnN0LCBqdXN0IHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gd2l0aCBhbgorCSAqIGluc3ktdGluc3kgd2luZG93Li4uLgorCSAqLworCisJZnMtPnN1cGVyLT5zX2Jsb2NrX2dyb3VwX25yID0gMDsKKwlmcy0+c3VwZXItPnNfc3RhdGUgPSBmc19zdGF0ZTsKKwlmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCA9IGZlYXR1cmVfaW5jb21wYXQ7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJKnN1cGVyX3NoYWRvdyA9ICpmcy0+c3VwZXI7CisJZXh0MmZzX3N3YXBfc3VwZXIoc3VwZXJfc2hhZG93KTsKKyNlbmRpZgorCisJaWYgKCEoZmxhZ3MgJiBFWFQyX0ZMQUdfRkxVU0hfTk9fU1lOQykpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKKwlyZXR2YWwgPSB3cml0ZV9wcmltYXJ5X3N1cGVyYmxvY2soZnMsIHN1cGVyX3NoYWRvdyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19ESVJUWTsKKworCWlmICghKGZsYWdzICYgRVhUMl9GTEFHX0ZMVVNIX05PX1NZTkMpKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX2ZsdXNoKGZzLT5pbyk7CitlcnJvdXQ6CisJZnMtPnN1cGVyLT5zX3N0YXRlID0gZnNfc3RhdGU7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJaWYgKHN1cGVyX3NoYWRvdykKKwkJZXh0MmZzX2ZyZWVfbWVtKCZzdXBlcl9zaGFkb3cpOworCWlmIChncm91cF9zaGFkb3cpCisJCWV4dDJmc19mcmVlX21lbSgmZ3JvdXBfc2hhZG93KTsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY2xvc2UoZXh0Ml9maWxzeXMgZnMpCit7CisJcmV0dXJuIGV4dDJmc19jbG9zZTIoZnMsIDApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Nsb3NlMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQltZXRhX2Jsa3M7CisJaW9fc3RhdHMgc3RhdHMgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmIChmcy0+d3JpdGVfYml0bWFwcykgeworCQlyZXR2YWwgPSBmcy0+d3JpdGVfYml0bWFwcyhmcyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoZnMtPnN1cGVyLT5zX2tieXRlc193cml0dGVuICYmCisJICAgIGZzLT5pby0+bWFuYWdlci0+Z2V0X3N0YXRzKQorCQlmcy0+aW8tPm1hbmFnZXItPmdldF9zdGF0cyhmcy0+aW8sICZzdGF0cyk7CisJaWYgKHN0YXRzICYmIHN0YXRzLT5ieXRlc193cml0dGVuICYmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKSB7CisJCWZzLT5zdXBlci0+c19rYnl0ZXNfd3JpdHRlbiArPSBzdGF0cy0+Ynl0ZXNfd3JpdHRlbiA+PiAxMDsKKwkJbWV0YV9ibGtzID0gZnMtPmRlc2NfYmxvY2tzICsgMTsKKwkJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1NVUEVSX09OTFkpKQorCQkJZnMtPnN1cGVyLT5zX2tieXRlc193cml0dGVuICs9IG1ldGFfYmxrcyAvCisJCQkJKGZzLT5ibG9ja3NpemUgLyAxMDI0KTsKKwkJaWYgKChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfRElSVFkpID09IDApCisJCQlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX1NVUEVSX09OTFkgfCBFWFQyX0ZMQUdfRElSVFk7CisJfQorCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfRElSVFkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ZsdXNoMihmcywgZmxhZ3MpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3N0b3AoZnMpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlleHQyZnNfZnJlZShmcyk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzE2LmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9jcmMxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmYwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9jcmMxNi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgICAgIGNyYzE2LmMKKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIFZlcnNpb24gMi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKworI2luY2x1ZGUgImNyYzE2LmgiCisKKy8qKiBDUkMgdGFibGUgZm9yIHRoZSBDUkMtMTYuIFRoZSBwb2x5IGlzIDB4ODAwNSAoeDE2ICsgeDE1ICsgeDIgKyAxKSAqLworc3RhdGljIF9fdTE2IGNvbnN0IGNyYzE2X3RhYmxlWzI1Nl0gPSB7CisJMHgwMDAwLCAweEMwQzEsIDB4QzE4MSwgMHgwMTQwLCAweEMzMDEsIDB4MDNDMCwgMHgwMjgwLCAweEMyNDEsCisJMHhDNjAxLCAweDA2QzAsIDB4MDc4MCwgMHhDNzQxLCAweDA1MDAsIDB4QzVDMSwgMHhDNDgxLCAweDA0NDAsCisJMHhDQzAxLCAweDBDQzAsIDB4MEQ4MCwgMHhDRDQxLCAweDBGMDAsIDB4Q0ZDMSwgMHhDRTgxLCAweDBFNDAsCisJMHgwQTAwLCAweENBQzEsIDB4Q0I4MSwgMHgwQjQwLCAweEM5MDEsIDB4MDlDMCwgMHgwODgwLCAweEM4NDEsCisJMHhEODAxLCAweDE4QzAsIDB4MTk4MCwgMHhEOTQxLCAweDFCMDAsIDB4REJDMSwgMHhEQTgxLCAweDFBNDAsCisJMHgxRTAwLCAweERFQzEsIDB4REY4MSwgMHgxRjQwLCAweEREMDEsIDB4MURDMCwgMHgxQzgwLCAweERDNDEsCisJMHgxNDAwLCAweEQ0QzEsIDB4RDU4MSwgMHgxNTQwLCAweEQ3MDEsIDB4MTdDMCwgMHgxNjgwLCAweEQ2NDEsCisJMHhEMjAxLCAweDEyQzAsIDB4MTM4MCwgMHhEMzQxLCAweDExMDAsIDB4RDFDMSwgMHhEMDgxLCAweDEwNDAsCisJMHhGMDAxLCAweDMwQzAsIDB4MzE4MCwgMHhGMTQxLCAweDMzMDAsIDB4RjNDMSwgMHhGMjgxLCAweDMyNDAsCisJMHgzNjAwLCAweEY2QzEsIDB4Rjc4MSwgMHgzNzQwLCAweEY1MDEsIDB4MzVDMCwgMHgzNDgwLCAweEY0NDEsCisJMHgzQzAwLCAweEZDQzEsIDB4RkQ4MSwgMHgzRDQwLCAweEZGMDEsIDB4M0ZDMCwgMHgzRTgwLCAweEZFNDEsCisJMHhGQTAxLCAweDNBQzAsIDB4M0I4MCwgMHhGQjQxLCAweDM5MDAsIDB4RjlDMSwgMHhGODgxLCAweDM4NDAsCisJMHgyODAwLCAweEU4QzEsIDB4RTk4MSwgMHgyOTQwLCAweEVCMDEsIDB4MkJDMCwgMHgyQTgwLCAweEVBNDEsCisJMHhFRTAxLCAweDJFQzAsIDB4MkY4MCwgMHhFRjQxLCAweDJEMDAsIDB4RURDMSwgMHhFQzgxLCAweDJDNDAsCisJMHhFNDAxLCAweDI0QzAsIDB4MjU4MCwgMHhFNTQxLCAweDI3MDAsIDB4RTdDMSwgMHhFNjgxLCAweDI2NDAsCisJMHgyMjAwLCAweEUyQzEsIDB4RTM4MSwgMHgyMzQwLCAweEUxMDEsIDB4MjFDMCwgMHgyMDgwLCAweEUwNDEsCisJMHhBMDAxLCAweDYwQzAsIDB4NjE4MCwgMHhBMTQxLCAweDYzMDAsIDB4QTNDMSwgMHhBMjgxLCAweDYyNDAsCisJMHg2NjAwLCAweEE2QzEsIDB4QTc4MSwgMHg2NzQwLCAweEE1MDEsIDB4NjVDMCwgMHg2NDgwLCAweEE0NDEsCisJMHg2QzAwLCAweEFDQzEsIDB4QUQ4MSwgMHg2RDQwLCAweEFGMDEsIDB4NkZDMCwgMHg2RTgwLCAweEFFNDEsCisJMHhBQTAxLCAweDZBQzAsIDB4NkI4MCwgMHhBQjQxLCAweDY5MDAsIDB4QTlDMSwgMHhBODgxLCAweDY4NDAsCisJMHg3ODAwLCAweEI4QzEsIDB4Qjk4MSwgMHg3OTQwLCAweEJCMDEsIDB4N0JDMCwgMHg3QTgwLCAweEJBNDEsCisJMHhCRTAxLCAweDdFQzAsIDB4N0Y4MCwgMHhCRjQxLCAweDdEMDAsIDB4QkRDMSwgMHhCQzgxLCAweDdDNDAsCisJMHhCNDAxLCAweDc0QzAsIDB4NzU4MCwgMHhCNTQxLCAweDc3MDAsIDB4QjdDMSwgMHhCNjgxLCAweDc2NDAsCisJMHg3MjAwLCAweEIyQzEsIDB4QjM4MSwgMHg3MzQwLCAweEIxMDEsIDB4NzFDMCwgMHg3MDgwLCAweEIwNDEsCisJMHg1MDAwLCAweDkwQzEsIDB4OTE4MSwgMHg1MTQwLCAweDkzMDEsIDB4NTNDMCwgMHg1MjgwLCAweDkyNDEsCisJMHg5NjAxLCAweDU2QzAsIDB4NTc4MCwgMHg5NzQxLCAweDU1MDAsIDB4OTVDMSwgMHg5NDgxLCAweDU0NDAsCisJMHg5QzAxLCAweDVDQzAsIDB4NUQ4MCwgMHg5RDQxLCAweDVGMDAsIDB4OUZDMSwgMHg5RTgxLCAweDVFNDAsCisJMHg1QTAwLCAweDlBQzEsIDB4OUI4MSwgMHg1QjQwLCAweDk5MDEsIDB4NTlDMCwgMHg1ODgwLCAweDk4NDEsCisJMHg4ODAxLCAweDQ4QzAsIDB4NDk4MCwgMHg4OTQxLCAweDRCMDAsIDB4OEJDMSwgMHg4QTgxLCAweDRBNDAsCisJMHg0RTAwLCAweDhFQzEsIDB4OEY4MSwgMHg0RjQwLCAweDhEMDEsIDB4NERDMCwgMHg0QzgwLCAweDhDNDEsCisJMHg0NDAwLCAweDg0QzEsIDB4ODU4MSwgMHg0NTQwLCAweDg3MDEsIDB4NDdDMCwgMHg0NjgwLCAweDg2NDEsCisJMHg4MjAxLCAweDQyQzAsIDB4NDM4MCwgMHg4MzQxLCAweDQxMDAsIDB4ODFDMSwgMHg4MDgxLCAweDQwNDAKK307CisKKy8qKgorICogQ29tcHV0ZSB0aGUgQ1JDLTE2IGZvciB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBAcGFyYW0gY3JjICAgICBwcmV2aW91cyBDUkMgdmFsdWUKKyAqIEBwYXJhbSBidWZmZXIgIGRhdGEgcG9pbnRlcgorICogQHBhcmFtIGxlbiAgICAgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIKKyAqIEByZXR1cm4gICAgICAgIHRoZSB1cGRhdGVkIENSQyB2YWx1ZQorICovCitjcmMxNl90IGV4dDJmc19jcmMxNihjcmMxNl90IGNyYywgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gYnVmZmVyOworCisJd2hpbGUgKGxlbi0tKQorCQkvKgorCQkgKiBmb3IgYW4gdW5rbm93biByZWFzb24sIFBQQyB0cmVhdHMgX191MTYgYXMgc2lnbmVkCisJCSAqIGFuZCBrZWVwcyBkb2luZyBzaWduIGV4dGVuc2lvbiBvbiB0aGUgdmFsdWUuCisJCSAqIEluc3RlYWQsIHVzZSBvbmx5IHRoZSBsb3cgMTYgYml0cyBvZiBhbiB1bnNpZ25lZAorCQkgKiBpbnQgZm9yIGhvbGRpbmcgdGhlIENSQyB2YWx1ZSB0byBhdm9pZCB0aGlzLgorCQkgKi8KKwkJY3JjID0gKCgoY3JjID4+IDgpICYgMHhmZlUpIF4KKwkJICAgICAgIGNyYzE2X3RhYmxlWyhjcmMgXiAqY3ArKykgJiAweGZmVV0pICYgMHgwMDAwZmZmZlU7CisJcmV0dXJuIGNyYzsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzE2LmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9jcmMxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmU2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9jcmMxNi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKgljcmMxNi5oIC0gQ1JDLTE2IHJvdXRpbmUKKyAqCisgKiBJbXBsZW1lbnRzIHRoZSBzdGFuZGFyZCBDUkMtMTY6CisgKiAgIFdpZHRoIDE2CisgKiAgIFBvbHkgIDB4ODAwNSAoeDE2ICsgeDE1ICsgeDIgKyAxKQorICogICBJbml0ICAwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEJlbiBHYXJkbmVyIDxiZ2FyZG5lckB3YWJ0ZWMuY29tPgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DUkMxNl9ICisjZGVmaW5lIF9fQ1JDMTZfSAorCisvKiBmb3IgYW4gdW5rbm93biByZWFzb24sIFBQQyB0cmVhdHMgX191MTYgYXMgc2lnbmVkIGFuZCBrZWVwcyBkb2luZyBzaWduCisgKiBleHRlbnNpb24gb24gdGhlIHZhbHVlLiAgSW5zdGVhZCwgdXNlIG9ubHkgdGhlIGxvdyAxNiBiaXRzIG9mIGFuCisgKiB1bnNpZ25lZCBpbnQgZm9yIGhvbGRpbmcgdGhlIENSQyB2YWx1ZSB0byBhdm9pZCB0aGlzLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBjcmMxNl90OworCitleHRlcm4gY3JjMTZfdCBleHQyZnNfY3JjMTYoY3JjMTZfdCBjcmMsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbik7CisKKyNlbmRpZiAvKiBfX0NSQzE2X0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzMyYy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvY3JjMzJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwNzUwMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzMyYy5jCkBAIC0wLDAgKzEsMTE0MyBAQAorLyoKKyAqIGNyYzMyYy5jCisgKgorICogQXVndXN0IDI2LCAyMDExIERhcnJpY2sgSi4gV29uZyA8ZGp3b25nIGF0IHVzLmlibS5jb20+CisgKiBSZXVzZSBCb2IgUGVhcnNvbidzIHNsaWNlLWJ5LTggaW1wbGVtZW50YXRpb24gZm9yIGUyZnNwcm9ncy4KKyAqCisgKiBKdWx5IDIwLCAyMDExIEJvYiBQZWFyc29uIDxycGVhcnNvbiBhdCBzeXN0ZW1mYWJyaWN3b3Jrcy5jb20+CisgKiBhZGRlZCBzbGljZSBieSA4IGFsZ29yaXRobSB0byB0aGUgZXhpc3RpbmcgY29udmVudGlvbmFsIGFuZAorICogc2xpY2UgYnkgNCBhbGdvcml0aG1zLgorICoKKyAqIE9jdCAxNSwgMjAwMCBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+CisgKiBOaWNlciBjcmMzMiBmdW5jdGlvbnMvZG9jcyBzdWJtaXR0ZWQgYnkgbGludXhAaG9yaXpvbi5jb20uICBUaGFua3MhCisgKiBDb2RlIHdhcyBmcm9tIHRoZSBwdWJsaWMgZG9tYWluLCBjb3B5cmlnaHQgYWJhbmRvbmVkLiAgQ29kZSB3YXMKKyAqIHN1YnNlcXVlbnRseSBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCB0aHVzIHdhcyByZS1saWNlbnNlZCB1bmRlciB0aGUKKyAqIEdOVSBHUEwgdjIuCisgKgorICogT2N0IDEyLCAyMDAwIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqIFNhbWUgY3JjMzIgZnVuY3Rpb24gd2FzIHVzZWQgaW4gNSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbC4KKyAqIEkgbWFkZSBvbmUgdmVyc2lvbiwgYW5kIGRlbGV0ZWQgdGhlIG90aGVycy4KKyAqIFRoZXJlIGFyZSB2YXJpb3VzIGluY2FudGF0aW9ucyBvZiBjcmMzMigpLiAgU29tZSB1c2UgYSBzZWVkIG9mIDAgb3IgfjAuCisgKiBTb21lIHhvciBhdCB0aGUgZW5kIHdpdGggfjAuICBUaGUgZ2VuZXJpYyBjcmMzMigpIGZ1bmN0aW9uIHRha2VzCisgKiBzZWVkIGFzIGFuIGFyZ3VtZW50LCBhbmQgZG9lc24ndCB4b3IgYXQgdGhlIGVuZC4gIFRoZW4gaW5kaXZpZHVhbAorICogdXNlcnMgY2FuIGRvIHdoYXRldmVyIHRoZXkgbmVlZC4KKyAqICAgZHJpdmVycy9uZXQvc21jOTE5NC5jIHVzZXMgc2VlZCB+MCwgZG9lc24ndCB4b3Igd2l0aCB+MC4KKyAqICAgZnMvamZmczIgdXNlcyBzZWVkIDAsIGRvZXNuJ3QgeG9yIHdpdGggfjAuCisgKiAgIGZzL3BhcnRpdGlvbnMvZWZpLmMgdXNlcyBzZWVkIH4wLCB4b3IncyB3aXRoIH4wLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZGVmaW5lIF9fZm9yY2UKKyNkZWZpbmUgbWluKHgsIHkpCQkoKHgpID4gKHkpID8gKHkpIDogKHgpKQorI2RlZmluZSBfX0FMSUdOX0tFUk5FTF9NQVNLKHgsIG1hc2spCSgoKHgpICsgKG1hc2spKSAmIH4obWFzaykpCisjZGVmaW5lIF9fQUxJR05fS0VSTkVMKHgsIGEpCV9fQUxJR05fS0VSTkVMX01BU0soeCwgKF9fdHlwZW9mX18oeCkpKGEpIC0gMSkKKyNkZWZpbmUgQUxJR04oeCwgYSkJCV9fQUxJR05fS0VSTkVMKCh4KSwgKGEpKQorI2RlZmluZSBQVFJfQUxJR04ocCwgYSkJCSgoX190eXBlb2ZfXyhwKSlBTElHTigodW5zaWduZWQgbG9uZykocCksIChhKSkpCisjaW5jbHVkZSAiY3JjMzJjX2RlZnMuaCIKKworI2luY2x1ZGUgImV4dDJmcy5oIgorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgKHgpCisjZGVmaW5lIF9fYmUzMl90b19jcHUoeCkgKHgpCisjZGVmaW5lIF9fY3B1X3RvX2JlMzIoeCkgKHgpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKGV4dDJmc19jcHVfdG9fbGUzMigoeCkpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1KHgpIChleHQyZnNfbGUzMl90b19jcHUoKHgpKSkKKyNlbHNlCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKHgpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgX19fY29uc3RhbnRfc3dhYjMyKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSAoZXh0MmZzX2JlMzJfdG9fY3B1KCh4KSkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMzIoeCkgKGV4dDJmc19jcHVfdG9fYmUzMigoeCkpKQorI2RlZmluZSBfX2NwdV90b19sZTMyKHgpICh4KQorI2RlZmluZSBfX2xlMzJfdG9fY3B1KHgpICh4KQorI2VuZGlmCisKKyNpZiBDUkNfTEVfQklUUyA+IDgKKyMgZGVmaW5lIHRvbGUoeCkgKF9fZm9yY2UgdWludDMyX3QpIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkKKyNlbHNlCisjIGRlZmluZSB0b2xlKHgpICh4KQorI2VuZGlmCisKKyNpZiBDUkNfQkVfQklUUyA+IDgKKyMgZGVmaW5lIHRvYmUoeCkgKF9fZm9yY2UgdWludDMyX3QpIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkKKyNlbHNlCisjIGRlZmluZSB0b2JlKHgpICh4KQorI2VuZGlmCisKKyNpbmNsdWRlICJjcmMzMmNfdGFibGUuaCIKKworI2lmIENSQ19MRV9CSVRTID09IDMyCisvKiBzbGljZSBieSA0IGFsZ29yaXRobSAqLworc3RhdGljIHVpbnQzMl90IGNyYzMyY19sZV9ib2R5KHVpbnQzMl90IGNyYywgdWludDhfdCBjb25zdCAqYnVmLCBzaXplX3QgbGVuKQoreworCWNvbnN0IHVpbnQ4X3QgKnA4OworCWNvbnN0IHVpbnQzMl90ICpwMzI7CisJc2l6ZV90IGluaXRfYnl0ZXM7CisJc2l6ZV90IHdvcmRzOworCXNpemVfdCBlbmRfYnl0ZXM7CisJc2l6ZV90IGk7CisJdWludDMyX3QgcTsKKwl1aW50OF90IGkwLCBpMSwgaTIsIGkzOworCisJY3JjID0gKF9fZm9yY2UgdWludDMyX3QpIF9fY3B1X3RvX2xlMzIoY3JjKTsKKworCS8qIHVucm9sbCBsb29wIGludG8gJ2luaXRfYnl0ZXMnIG9kZCBieXRlcyBmb2xsb3dlZCBieQorCSAqICd3b3JkcycgYWxpZ25lZCA0IGJ5dGUgd29yZHMgZm9sbG93ZWQgYnkKKwkgKiAnZW5kX2J5dGVzJyBvZGQgYnl0ZXMgYXQgdGhlIGVuZCAqLworCXA4ID0gYnVmOworCXAzMiA9ICh1aW50MzJfdCAqKVBUUl9BTElHTihwOCwgNCk7CisJaW5pdF9ieXRlcyA9IG1pbigodWludHB0cl90KXAzMiAtICh1aW50cHRyX3QpcDgsIGxlbik7CisJd29yZHMgPSAobGVuIC0gaW5pdF9ieXRlcykgPj4gMjsKKwllbmRfYnl0ZXMgPSAobGVuIC0gaW5pdF9ieXRlcykgJiAzOworCisJZm9yIChpID0gMDsgaSA8IGluaXRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCS8qIHVzaW5nIHByZS1pbmNyZW1lbnQgYmVsb3cgc2xpZ2h0bHkgZmFzdGVyICovCisJcDMyLS07CisKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxOworCQlpMiA9IHEgPj4gODsKKwkJaTEgPSBxID4+IDE2OworCQlpMCA9IHEgPj4gMjQ7CisJCWNyYyA9IHQzX2xlW2kzXSBeIHQyX2xlW2kyXSBeIHQxX2xlW2kxXSBeIHQwX2xlW2kwXTsKKyNlbHNlCisJCXEgPSAqKytwMzIgXiBjcmM7CisJCWkzID0gcSA+PiAyNDsKKwkJaTIgPSBxID4+IDE2OworCQlpMSA9IHEgPj4gODsKKwkJaTAgPSBxOworCQljcmMgPSB0M19sZVtpM10gXiB0Ml9sZVtpMl0gXiB0MV9sZVtpMV0gXiB0MF9sZVtpMF07CisjZW5kaWYKKwl9CisKKwlwOCA9ICh1aW50OF90ICopKCsrcDMyKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCXJldHVybiBfX2xlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMiljcmMpOworfQorI2VuZGlmCisKKyNpZiBDUkNfQkVfQklUUyA9PSAzMgorc3RhdGljIHVpbnQzMl90IGNyYzMyY19iZV9ib2R5KHVpbnQzMl90IGNyYywgdWludDhfdCBjb25zdCAqYnVmLCBzaXplX3QgbGVuKQoreworCWNvbnN0IHVpbnQ4X3QgKnA4OworCWNvbnN0IHVpbnQzMl90ICpwMzI7CisJc2l6ZV90IGluaXRfYnl0ZXM7CisJc2l6ZV90IHdvcmRzOworCXNpemVfdCBlbmRfYnl0ZXM7CisJc2l6ZV90IGk7CisJdWludDMyX3QgcTsKKwl1aW50OF90IGkwLCBpMSwgaTIsIGkzOworCisJY3JjID0gKF9fZm9yY2UgdWludDMyX3QpIF9fY3B1X3RvX2JlMzIoY3JjKTsKKworCXA4ID0gYnVmOworCXAzMiA9ICh1aW50MzJfdCAqKVBUUl9BTElHTihwOCwgNCk7CisJaW5pdF9ieXRlcyA9IG1pbigodWludHB0cl90KXAzMiAtICh1aW50cHRyX3QpcDgsIGxlbik7CisJd29yZHMgPSAobGVuIC0gaW5pdF9ieXRlcykgPj4gMjsKKwllbmRfYnl0ZXMgPSAobGVuIC0gaW5pdF9ieXRlcykgJiAzOworCisJZm9yIChpID0gMDsgaSA8IGluaXRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCXAzMi0tOworCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisJCXEgPSAqKytwMzIgXiBjcmM7CisJCWkzID0gcTsKKwkJaTIgPSBxID4+IDg7CisJCWkxID0gcSA+PiAxNjsKKwkJaTAgPSBxID4+IDI0OworCQljcmMgPSB0M19iZVtpM10gXiB0Ml9iZVtpMl0gXiB0MV9iZVtpMV0gXiB0MF9iZVtpMF07CisjZWxzZQorCQlxID0gKisrcDMyIF4gY3JjOworCQlpMyA9IHEgPj4gMjQ7CisJCWkyID0gcSA+PiAxNjsKKwkJaTEgPSBxID4+IDg7CisJCWkwID0gcTsKKwkJY3JjID0gdDNfYmVbaTNdIF4gdDJfYmVbaTJdIF4gdDFfYmVbaTFdIF4gdDBfYmVbaTBdOworI2VuZGlmCisJfQorCisJcDggPSAodWludDhfdCAqKSgrK3AzMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW5kX2J5dGVzOyBpKyspIHsKKyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisJCWkwID0gKnA4KysgXiBjcmM7CisJCWNyYyA9IHQwX2JlW2kwXSBeIChjcmMgPj4gOCk7CisjZWxzZQorCQlpMCA9ICpwOCsrIF4gKGNyYyA+PiAyNCk7CisJCWNyYyA9IHQwX2JlW2kwXSBeIChjcmMgPDwgOCk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gX19iZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpY3JjKTsKK30KKyNlbmRpZgorCisjaWYgQ1JDX0xFX0JJVFMgPT0gNjQKKy8qIHNsaWNlIGJ5IDggYWxnb3JpdGhtICovCitzdGF0aWMgdWludDMyX3QgY3JjMzJjX2xlX2JvZHkodWludDMyX3QgY3JjLCB1aW50OF90IGNvbnN0ICpidWYsIHNpemVfdCBsZW4pCit7CisJY29uc3QgdWludDhfdCAqcDg7CisJY29uc3QgdWludDMyX3QgKnAzMjsKKwlzaXplX3QgaW5pdF9ieXRlczsKKwlzaXplX3Qgd29yZHM7CisJc2l6ZV90IGVuZF9ieXRlczsKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBxOworCXVpbnQ4X3QgaTAsIGkxLCBpMiwgaTM7CisKKwljcmMgPSAoX19mb3JjZSB1aW50MzJfdCkgX19jcHVfdG9fbGUzMihjcmMpOworCisJcDggPSBidWY7CisJcDMyID0gKGNvbnN0IHVpbnQzMl90ICopUFRSX0FMSUdOKHA4LCA4KTsKKwlpbml0X2J5dGVzID0gbWluKCh1aW50cHRyX3QpcDMyIC0gKHVpbnRwdHJfdClwOCwgbGVuKTsKKwl3b3JkcyA9IChsZW4gLSBpbml0X2J5dGVzKSA+PiAzOworCWVuZF9ieXRlcyA9IChsZW4gLSBpbml0X2J5dGVzKSAmIDc7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9sZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcDMyLS07CisKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxOworCQlpMiA9IHEgPj4gODsKKwkJaTEgPSBxID4+IDE2OworCQlpMCA9IHEgPj4gMjQ7CisJCWNyYyA9IHQ3X2xlW2kzXSBeIHQ2X2xlW2kyXSBeIHQ1X2xlW2kxXSBeIHQ0X2xlW2kwXTsKKworCQlxID0gKisrcDMyOworCQlpMyA9IHE7CisJCWkyID0gcSA+PiA4OworCQlpMSA9IHEgPj4gMTY7CisJCWkwID0gcSA+PiAyNDsKKwkJY3JjIF49IHQzX2xlW2kzXSBeIHQyX2xlW2kyXSBeIHQxX2xlW2kxXSBeIHQwX2xlW2kwXTsKKyNlbHNlCisJCXEgPSAqKytwMzIgXiBjcmM7CisJCWkzID0gcSA+PiAyNDsKKwkJaTIgPSBxID4+IDE2OworCQlpMSA9IHEgPj4gODsKKwkJaTAgPSBxOworCQljcmMgPSB0N19sZVtpM10gXiB0Nl9sZVtpMl0gXiB0NV9sZVtpMV0gXiB0NF9sZVtpMF07CisKKwkJcSA9ICorK3AzMjsKKwkJaTMgPSBxID4+IDI0OworCQlpMiA9IHEgPj4gMTY7CisJCWkxID0gcSA+PiA4OworCQlpMCA9IHE7CisJCWNyYyBePSB0M19sZVtpM10gXiB0Ml9sZVtpMl0gXiB0MV9sZVtpMV0gXiB0MF9sZVtpMF07CisjZW5kaWYKKwl9CisKKwlwOCA9IChjb25zdCB1aW50OF90ICopKCsrcDMyKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfbGVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCXJldHVybiBfX2xlMzJfdG9fY3B1KGNyYyk7Cit9CisjZW5kaWYKKworI2lmIENSQ19CRV9CSVRTID09IDY0CitzdGF0aWMgdWludDMyX3QgY3JjMzJjX2JlX2JvZHkodWludDMyX3QgY3JjLCB1aW50OF90IGNvbnN0ICpidWYsIHNpemVfdCBsZW4pCit7CisJY29uc3QgdWludDhfdCAqcDg7CisJY29uc3QgdWludDMyX3QgKnAzMjsKKwlzaXplX3QgaW5pdF9ieXRlczsKKwlzaXplX3Qgd29yZHM7CisJc2l6ZV90IGVuZF9ieXRlczsKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBxOworCXVpbnQ4X3QgaTAsIGkxLCBpMiwgaTM7CisKKwljcmMgPSAoX19mb3JjZSB1aW50MzJfdCkgX19jcHVfdG9fYmUzMihjcmMpOworCisJcDggPSBidWY7CisJcDMyID0gKGNvbnN0IHVpbnQzMl90ICopUFRSX0FMSUdOKHA4LCA4KTsKKwlpbml0X2J5dGVzID0gbWluKCh1aW50cHRyX3QpcDMyIC0gKHVpbnRwdHJfdClwOCwgbGVuKTsKKwl3b3JkcyA9IChsZW4gLSBpbml0X2J5dGVzKSA+PiAzOworCWVuZF9ieXRlcyA9IChsZW4gLSBpbml0X2J5dGVzKSAmIDc7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5pdF9ieXRlczsgaSsrKSB7CisjaWZuZGVmIFdPUkRTX0JJR0VORElBTgorCQlpMCA9ICpwOCsrIF4gY3JjOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjID4+IDgpOworI2Vsc2UKKwkJaTAgPSAqcDgrKyBeIChjcmMgPj4gMjQpOworCQljcmMgPSB0MF9iZVtpMF0gXiAoY3JjIDw8IDgpOworI2VuZGlmCisJfQorCisJcDMyLS07CisKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJcSA9ICorK3AzMiBeIGNyYzsKKwkJaTMgPSBxOworCQlpMiA9IHEgPj4gODsKKwkJaTEgPSBxID4+IDE2OworCQlpMCA9IHEgPj4gMjQ7CisJCWNyYyA9IHQ3X2JlW2kzXSBeIHQ2X2JlW2kyXSBeIHQ1X2JlW2kxXSBeIHQ0X2JlW2kwXTsKKworCQlxID0gKisrcDMyOworCQlpMyA9IHE7CisJCWkyID0gcSA+PiA4OworCQlpMSA9IHEgPj4gMTY7CisJCWkwID0gcSA+PiAyNDsKKwkJY3JjIF49IHQzX2JlW2kzXSBeIHQyX2JlW2kyXSBeIHQxX2JlW2kxXSBeIHQwX2JlW2kwXTsKKyNlbHNlCisJCXEgPSAqKytwMzIgXiBjcmM7CisJCWkzID0gcSA+PiAyNDsKKwkJaTIgPSBxID4+IDE2OworCQlpMSA9IHEgPj4gODsKKwkJaTAgPSBxOworCQljcmMgPSB0N19iZVtpM10gXiB0Nl9iZVtpMl0gXiB0NV9iZVtpMV0gXiB0NF9iZVtpMF07CisKKwkJcSA9ICorK3AzMjsKKwkJaTMgPSBxID4+IDI0OworCQlpMiA9IHEgPj4gMTY7CisJCWkxID0gcSA+PiA4OworCQlpMCA9IHE7CisJCWNyYyBePSB0M19iZVtpM10gXiB0Ml9iZVtpMl0gXiB0MV9iZVtpMV0gXiB0MF9iZVtpMF07CisjZW5kaWYKKwl9CisKKwlwOCA9IChjb25zdCB1aW50OF90ICopKCsrcDMyKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbmRfYnl0ZXM7IGkrKykgeworI2lmbmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJaTAgPSAqcDgrKyBeIGNyYzsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA+PiA4KTsKKyNlbHNlCisJCWkwID0gKnA4KysgXiAoY3JjID4+IDI0KTsKKwkJY3JjID0gdDBfYmVbaTBdIF4gKGNyYyA8PCA4KTsKKyNlbmRpZgorCX0KKworCXJldHVybiBfX2JlMzJfdG9fY3B1KGNyYyk7Cit9CisjZW5kaWYKKworLyoqCisgKiBjcmMzMmNfbGUoKSAtIENhbGN1bGF0ZSBiaXR3aXNlIGxpdHRsZS1lbmRpYW4gQ1JDMzJjLgorICogQGNyYzogc2VlZCB2YWx1ZSBmb3IgY29tcHV0YXRpb24uICB+MCBmb3IgZXh0NCwgc29tZXRpbWVzIDAgZm9yCisgKglvdGhlciB1c2VzLCBvciB0aGUgcHJldmlvdXMgY3JjMzJjIHZhbHVlIGlmIGNvbXB1dGluZyBpbmNyZW1lbnRhbGx5LgorICogQHA6IHBvaW50ZXIgdG8gYnVmZmVyIG92ZXIgd2hpY2ggQ1JDIGlzIHJ1bgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlciBAcAorICovCit1aW50MzJfdCBleHQyZnNfY3JjMzJjX2xlKHVpbnQzMl90IGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKyNpZiBDUkNfTEVfQklUUyA9PSAxCisJaW50IGk7CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJY3JjID0gKGNyYyA+PiAxKSBeICgoY3JjICYgMSkgPyBDUkNQT0xZX0xFIDogMCk7CisJfQorIyBlbGlmIENSQ19MRV9CSVRTID09IDIKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKys7CisJCWNyYyA9IChjcmMgPj4gMikgXiB0MF9sZVtjcmMgJiAweDAzXTsKKwkJY3JjID0gKGNyYyA+PiAyKSBeIHQwX2xlW2NyYyAmIDB4MDNdOworCQljcmMgPSAoY3JjID4+IDIpIF4gdDBfbGVbY3JjICYgMHgwM107CisJCWNyYyA9IChjcmMgPj4gMikgXiB0MF9sZVtjcmMgJiAweDAzXTsKKwl9CisjIGVsaWYgQ1JDX0xFX0JJVFMgPT0gNAorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKzsKKwkJY3JjID0gKGNyYyA+PiA0KSBeIHQwX2xlW2NyYyAmIDB4MGZdOworCQljcmMgPSAoY3JjID4+IDQpIF4gdDBfbGVbY3JjICYgMHgwZl07CisJfQorIyBlbGlmIENSQ19MRV9CSVRTID09IDgKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKys7CisJCWNyYyA9IChjcmMgPj4gOCkgXiB0MF9sZVtjcmMgJiAweGZmXTsKKwl9CisjIGVsc2UKKwljcmMgPSBjcmMzMmNfbGVfYm9keShjcmMsIHAsIGxlbik7CisjIGVuZGlmCisJcmV0dXJuIGNyYzsKK30KKworLyoqCisgKiBjcmMzMmNfYmUoKSAtIENhbGN1bGF0ZSBiaXR3aXNlIGJpZy1lbmRpYW4gQ1JDMzJjLgorICogQGNyYzogc2VlZCB2YWx1ZSBmb3IgY29tcHV0YXRpb24uICB+MCBmb3IgZXh0NCwgc29tZXRpbWVzIDAgZm9yCisgKglvdGhlciB1c2VzLCBvciB0aGUgcHJldmlvdXMgY3JjMzJjIHZhbHVlIGlmIGNvbXB1dGluZyBpbmNyZW1lbnRhbGx5LgorICogQHA6IHBvaW50ZXIgdG8gYnVmZmVyIG92ZXIgd2hpY2ggQ1JDIGlzIHJ1bgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlciBAcAorICovCit1aW50MzJfdCBleHQyZnNfY3JjMzJjX2JlKHVpbnQzMl90IGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKyNpZiBDUkNfQkVfQklUUyA9PSAxCisJaW50IGk7CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrIDw8IDI0OworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJY3JjID0gKGNyYyA8PCAxKSBeCisJCQkgICAgICAoKGNyYyAmIDB4ODAwMDAwMDApID8gQ1JDUE9MWV9CRSA6IDApOworCX0KKyMgZWxpZiBDUkNfQkVfQklUUyA9PSAyCisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrIDw8IDI0OworCQljcmMgPSAoY3JjIDw8IDIpIF4gdDBfYmVbY3JjID4+IDMwXTsKKwkJY3JjID0gKGNyYyA8PCAyKSBeIHQwX2JlW2NyYyA+PiAzMF07CisJCWNyYyA9IChjcmMgPDwgMikgXiB0MF9iZVtjcmMgPj4gMzBdOworCQljcmMgPSAoY3JjIDw8IDIpIF4gdDBfYmVbY3JjID4+IDMwXTsKKwl9CisjIGVsaWYgQ1JDX0JFX0JJVFMgPT0gNAorCXdoaWxlIChsZW4tLSkgeworCQljcmMgXj0gKnArKyA8PCAyNDsKKwkJY3JjID0gKGNyYyA8PCA0KSBeIHQwX2JlW2NyYyA+PiAyOF07CisJCWNyYyA9IChjcmMgPDwgNCkgXiB0MF9iZVtjcmMgPj4gMjhdOworCX0KKyMgZWxpZiBDUkNfQkVfQklUUyA9PSA4CisJd2hpbGUgKGxlbi0tKSB7CisJCWNyYyBePSAqcCsrIDw8IDI0OworCQljcmMgPSAoY3JjIDw8IDgpIF4gdDBfYmVbY3JjID4+IDI0XTsKKwl9CisjIGVsc2UKKwljcmMgPSBjcmMzMmNfYmVfYm9keShjcmMsIHAsIGxlbik7CisjIGVuZGlmCisJcmV0dXJuIGNyYzsKK30KKworI2lmZGVmIFVOSVRURVNUCitzdGF0aWMgdWludDhfdCB0ZXN0X2J1ZltdID0geworCTB4ZDksIDB4ZDcsIDB4NmEsIDB4MTMsIDB4M2EsIDB4YjEsIDB4MDUsIDB4NDgsCisJMHhkYSwgMHhhZCwgMHgxNCwgMHhiZCwgMHgwMywgMHgzYSwgMHg1OCwgMHg1ZSwKKwkweDZlLCAweGQxLCAweDU2LCAweGM5LCAweDJlLCAweGM0LCAweGNiLCAweDZiLAorCTB4ZTgsIDB4NzcsIDB4NTIsIDB4MzcsIDB4NGUsIDB4MGYsIDB4NTUsIDB4ZDIsCisJMHgxMiwgMHg2NSwgMHg5MCwgMHhjMiwgMHg0MSwgMHg0OSwgMHg4MSwgMHgwMSwKKwkweGY1LCAweDAxLCAweGViLCAweDJkLCAweDc4LCAweDc0LCAweDIzLCAweDVkLAorCTB4ODQsIDB4NWMsIDB4ODEsIDB4OTIsIDB4MjEsIDB4ZTksIDB4OGQsIDB4MWQsCisJMHg4OSwgMHhmMiwgMHg0YSwgMHhhYywgMHhkZCwgMHhmOSwgMHhhZiwgMHhlZSwKKwkweDQ0LCAweGU3LCAweDZlLCAweGVkLCAweGZiLCAweGQ4LCAweDg5LCAweDBlLAorCTB4OTYsIDB4NjIsIDB4Y2QsIDB4YTQsIDB4NGIsIDB4YTksIDB4ZTUsIDB4NDUsCisJMHhiMSwgMHgyOSwgMHg5YiwgMHgwZiwgMHhmYywgMHhiZCwgMHg4MywgMHhhYiwKKwkweGE4LCAweDU0LCAweDk2LCAweDQ0LCAweDJjLCAweDdmLCAweGJiLCAweGU3LAorCTB4NTIsIDB4MjksIDB4MDgsIDB4ZWUsIDB4MTQsIDB4YzUsIDB4YzIsIDB4ZWMsCisJMHg1YSwgMHhlYiwgMHg0MCwgMHg0MCwgMHhlYSwgMHhkMSwgMHgzZCwgMHgxNSwKKwkweDczLCAweGFhLCAweDhjLCAweDczLCAweGZjLCAweGYyLCAweDJiLCAweDQ5LAorCTB4MGIsIDB4MTMsIDB4OTYsIDB4ZDksIDB4OGUsIDB4NGIsIDB4YmMsIDB4ZTAsCisJMHhmNCwgMHhkMiwgMHhlMCwgMHgyZSwgMHg3YSwgMHhmMCwgMHg1ZCwgMHgxZiwKKwkweGQyLCAweDkyLCAweDk3LCAweGUwLCAweGFhLCAweDU5LCAweGFiLCAweGM5LAorCTB4NWMsIDB4YTYsIDB4NTEsIDB4MWEsIDB4ZTMsIDB4ZDYsIDB4MDYsIDB4YjksCisJMHhhZSwgMHhiOCwgMHg3NiwgMHgzNiwgMHg3OSwgMHgzNywgMHg1MiwgMHhmNiwKKwkweDM0LCAweGFmLCAweDI3LCAweDE5LCAweGUxLCAweGMwLCAweDJiLCAweGRkLAorCTB4MDEsIDB4MTUsIDB4Y2QsIDB4Y2UsIDB4NDQsIDB4ZjYsIDB4NGMsIDB4MTgsCisJMHg5MiwgMHg2OSwgMHhiZSwgMHg4YSwgMHg3NiwgMHgyMywgMHg1MiwgMHgxMywKKwkweDNmLCAweGY5LCAweGUwLCAweGY1LCAweDA2LCAweDI4LCAweDdjLCAweGM3LAorCTB4ZjMsIDB4NDIsIDB4MGYsIDB4ZGQsIDB4NDAsIDB4MzMsIDB4ZjcsIDB4OTksCisJMHhlMiwgMHhhZCwgMHgyNiwgMHhkOSwgMHg1MywgMHgxMCwgMHg3MiwgMHgwYywKKwkweDRlLCAweDQzLCAweDRjLCAweDYxLCAweGZlLCAweGQ5LCAweGMxLCAweDE2LAorCTB4YTEsIDB4OTMsIDB4Y2EsIDB4M2MsIDB4NzUsIDB4N2YsIDB4MDcsIDB4N2EsCisJMHg2NSwgMHhiMywgMHg1MywgMHgyYSwgMHg1MiwgMHgwMCwgMHhhMCwgMHg2MiwKKwkweGUwLCAweGEzLCAweDFmLCAweGFkLCAweGQ3LCAweGJiLCAweGMwLCAweDgzLAorCTB4NWQsIDB4NTQsIDB4ODcsIDB4NWYsIDB4YzgsIDB4MmYsIDB4YzgsIDB4YmYsCisJMHg2OSwgMHgwNCwgMHg5MSwgMHhjOCwgMHhhNiwgMHgxZCwgMHg0ZCwgMHg0NiwKKwkweDkxLCAweGZjLCAweDI2LCAweGY0LCAweDE2LCAweGQxLCAweGE0LCAweGJmLAorCTB4NWMsIDB4YTIsIDB4NmMsIDB4ZGQsIDB4YjQsIDB4NDAsIDB4ZjIsIDB4MmUsCisJMHhhMiwgMHhhZCwgMHhmNywgMHhmNCwgMHhhNSwgMHg4YSwgMHgzZSwgMHgyMywKKwkweDY0LCAweDA4LCAweGM4LCAweGExLCAweGEwLCAweGYwLCAweDVkLCAweDcwLAorCTB4ZDIsIDB4NzcsIDB4ZmQsIDB4YzgsIDB4NTAsIDB4ODMsIDB4MGYsIDB4ZDYsCisJMHgyYiwgMHhlNCwgMHgxZiwgMHg1MiwgMHgzNCwgMHgzMywgMHg2OCwgMHhmZCwKKwkweDkyLCAweGJlLCAweDlmLCAweDk3LCAweDZiLCAweDhkLCAweDgxLCAweDkxLAorCTB4MGYsIDB4ZWYsIDB4NjUsIDB4YzgsIDB4MGQsIDB4MTUsIDB4MDEsIDB4NzcsCisJMHg1OCwgMHhiMiwgMHhmNCwgMHgxYiwgMHgwNiwgMHg3ZSwgMHhmNSwgMHhjYSwKKwkweDE1LCAweDJlLCAweDM4LCAweGQ4LCAweDgxLCAweDFjLCAweDFjLCAweGEwLAorCTB4YjYsIDB4MTMsIDB4NmEsIDB4MmIsIDB4NzEsIDB4MzQsIDB4NTIsIDB4ZDcsCisJMHgxZCwgMHhiZCwgMHgzNywgMHg1OSwgMHhiYywgMHg4NiwgMHgyNSwgMHgyYiwKKwkweGE4LCAweDkzLCAweGNlLCAweDFhLCAweDAzLCAweDE2LCAweGZlLCAweDAxLAorCTB4NTcsIDB4OTksIDB4MjQsIDB4MjUsIDB4MmMsIDB4YjMsIDB4YWIsIDB4MWUsCisJMHgyZCwgMHg2NSwgMHgyMCwgMHg4OSwgMHgxNywgMHgwMiwgMHgwZSwgMHgwYSwKKwkweGY1LCAweDFlLCAweGM3LCAweGZmLCAweDFmLCAweDYxLCAweGE5LCAweDU0LAorCTB4MTgsIDB4ZDQsIDB4YmEsIDB4NTAsIDB4NTcsIDB4MDIsIDB4YTEsIDB4YWIsCisJMHgyMiwgMHgyZSwgMHgwNywgMHhlYSwgMHhhOSwgMHhhMywgMHg4MywgMHg0ZiwKKwkweDI3LCAweGY1LCAweGM1LCAweGVlLCAweDNjLCAweDNiLCAweDEwLCAweGFkLAorCTB4MzIsIDB4MmIsIDB4MWMsIDB4MDMsIDB4Y2IsIDB4YWYsIDB4OTgsIDB4ODMsCisJMHg1NCwgMHhjMywgMHg2OCwgMHg2MywgMHhkNCwgMHhlMCwgMHgwZSwgMHgzYywKKwkweDFhLCAweDRlLCAweGMwLCAweDgxLCAweGQwLCAweGU4LCAweDZhLCAweDYyLAorCTB4NmIsIDB4M2UsIDB4NmYsIDB4YzQsIDB4YzYsIDB4MzMsIDB4NGUsIDB4MjYsCisJMHgyMSwgMHhmNSwgMHgwNCwgMHhkZiwgMHhmYSwgMHhjZSwgMHg0NSwgMHhhZiwKKwkweGRjLCAweDVlLCAweDFiLCAweGFkLCAweDkzLCAweGNhLCAweGY1LCAweGNmLAorCTB4ZDcsIDB4ZWUsIDB4MGMsIDB4NWMsIDB4NWUsIDB4YjQsIDB4ZjAsIDB4OTIsCisJMHhkMiwgMHhmMiwgMHhmMCwgMHhhOSwgMHgxZSwgMHhhYiwgMHg4MCwgMHg2OCwKKwkweDQ2LCAweGVmLCAweGNjLCAweDI2LCAweDBjLCAweDVjLCAweGRkLCAweDRlLAorCTB4ODMsIDB4YjgsIDB4YjksIDB4NTMsIDB4NmUsIDB4ZjgsIDB4OTMsIDB4MzgsCisJMHg2NywgMHhhNCwgMHg0MSwgMHg4NywgMHg3MiwgMHhlNywgMHg3ZSwgMHg4NiwKKwkweGM5LCAweDQ5LCAweDAwLCAweDMzLCAweGIxLCAweDM4LCAweDZjLCAweDcxLAorCTB4ZDcsIDB4MWQsIDB4OGUsIDB4NjEsIDB4MDEsIDB4YjYsIDB4NTcsIDB4YTksCisJMHhmMSwgMHhhYywgMHgxNSwgMHhjMiwgMHg4MywgMHg3NywgMHhjYSwgMHg2NCwKKwkweGNhLCAweDdiLCAweDZjLCAweGExLCAweDEwLCAweDFiLCAweDEzLCAweGQwLAorCTB4ZDMsIDB4OWUsIDB4OWUsIDB4MTAsIDB4NzAsIDB4YzgsIDB4MWEsIDB4YmIsCisJMHgzZiwgMHgxOSwgMHg4NiwgMHhhYiwgMHgwMSwgMHgwZSwgMHhlYSwgMHgzNCwKKwkweDIyLCAweGVhLCAweGUyLCAweDE1LCAweGI3LCAweGVkLCAweDIxLCAweDIxLAorCTB4NzUsIDB4YTUsIDB4ZTcsIDB4MDgsIDB4YTEsIDB4MzgsIDB4ZTAsIDB4OTEsCisJMHgwNSwgMHg2MCwgMHhlYSwgMHhhNywgMHg1MCwgMHgyNywgMHgxOCwgMHgwNywKKwkweDlkLCAweGUwLCAweDE4LCAweDJiLCAweGQ0LCAweDA3LCAweDU5LCAweDAwLAorCTB4ZTYsIDB4NDUsIDB4MTgsIDB4MmEsIDB4MzAsIDB4NmUsIDB4ZjMsIDB4YjQsCisJMHhkMCwgMHhlZiwgMHhhNiwgMHg1YiwgMHg3MSwgMHhhMiwgMHg1YSwgMHgzYiwKKwkweDg5LCAweDRjLCAweGFmLCAweDNmLCAweGNiLCAweDlmLCAweDAzLCAweGZiLAorCTB4NDMsIDB4N2MsIDB4NmIsIDB4ZDMsIDB4NmEsIDB4ZWEsIDB4Y2UsIDB4NGEsCisJMHg1ZiwgMHg2NCwgMHhiNSwgMHg2MiwgMHhkYSwgMHg1ZCwgMHgyNywgMHhiNywKKwkweGI4LCAweDExLCAweGNhLCAweDMzLCAweDMwLCAweGVjLCAweDcwLCAweGYwLAorCTB4MWIsIDB4MDMsIDB4NTAsIDB4ZmYsIDB4NWUsIDB4YTYsIDB4MDgsIDB4ZGUsCisJMHgzNywgMHg3MCwgMHhjMCwgMHg4MSwgMHg1NSwgMHg2MCwgMHgxNywgMHhhMSwKKwkweDg1LCAweGFlLCAweDI2LCAweDQ0LCAweGU0LCAweDY3LCAweDNjLCAweDkxLAorCTB4ZmQsIDB4YzQsIDB4M2QsIDB4OTcsIDB4NzIsIDB4MjMsIDB4ZjMsIDB4M2MsCisJMHg4ZiwgMHhlMCwgMHhlMiwgMHhmMiwgMHgwOSwgMHg5NiwgMHgxMCwgMHg2NywKKwkweGI1LCAweGZlLCAweGZmLCAweDNkLCAweDRhLCAweGM4LCAweDYyLCAweDExLAorCTB4YTUsIDB4OTgsIDB4YzEsIDB4MmQsIDB4NDAsIDB4ODIsIDB4ODgsIDB4OGIsCisJMHhlNSwgMHhiMCwgMHg3NSwgMHhiZiwgMHgyZiwgMHhhOCwgMHg2YSwgMHg1NSwKKwkweDQ5LCAweDJlLCAweDljLCAweDI5LCAweGQyLCAweDdjLCAweGJmLCAweGYzLAorCTB4YWEsIDB4M2EsIDB4MTYsIDB4NGEsIDB4YTQsIDB4MTUsIDB4ZjMsIDB4NDgsCisJMHhkZSwgMHgzOCwgMHgxMywgMHg0NCwgMHgyNiwgMHgwMiwgMHhlNiwgMHhlOSwKKwkweGE4LCAweDI0LCAweDg5LCAweGI1LCAweDQzLCAweDk1LCAweGU0LCAweDRjLAorCTB4YzMsIDB4YTAsIDB4ZGYsIDB4Y2MsIDB4NDIsIDB4ZjgsIDB4OGQsIDB4YjAsCisJMHgzYiwgMHhlYSwgMHgxMCwgMHhiNywgMHhlMSwgMHg0MCwgMHg1NCwgMHhiOSwKKwkweGEzLCAweDJkLCAweGZiLCAweGI0LCAweDkxLCAweGMwLCAweDNlLCAweDk0LAorCTB4ZjEsIDB4YTEsIDB4M2MsIDB4YmUsIDB4ZWYsIDB4YjgsIDB4NzAsIDB4NTUsCisJMHgwYSwgMHgyNiwgMHg5MywgMHhiZiwgMHhlNiwgMHgyMSwgMHg5MiwgMHgzMiwKKwkweDNjLCAweDM5LCAweDI3LCAweDZhLCAweDIzLCAweDQ4LCAweDAyLCAweDM1LAorCTB4M2MsIDB4ZDQsIDB4Y2MsIDB4MDQsIDB4YzAsIDB4NGUsIDB4YTcsIDB4MDIsCisJMHg2MywgMHgzNywgMHhjMiwgMHhiOCwgMHg1NiwgMHgxZCwgMHg1NywgMHg1NywKKwkweDQyLCAweDA0LCAweDhkLCAweGVlLCAweGNmLCAweDhiLCAweGM5LCAweGMzLAorCTB4YmEsIDB4M2IsIDB4MTUsIDB4ZDcsIDB4YWYsIDB4YmYsIDB4OWUsIDB4Y2QsCisJMHg0NCwgMHhjZiwgMHhmMCwgMHgwMCwgMHhiNywgMHgzYSwgMHhmYywgMHhhOCwKKwkweDEyLCAweGFiLCAweDNhLCAweDYyLCAweDAxLCAweDIxLCAweDQ2LCAweGU5LAorCTB4MWUsIDB4NDgsIDB4MzcsIDB4ZmMsIDB4MTMsIDB4NGQsIDB4ZjYsIDB4MmEsCisJMHg3MiwgMHg0MCwgMHg3NSwgMHgzOCwgMHg3MSwgMHhmMiwgMHgxNywgMHgyMCwKKwkweDJjLCAweGRkLCAweGMwLCAweDQ5LCAweGJjLCAweDYzLCAweDMzLCAweGVhLAorCTB4MDYsIDB4NzUsIDB4NDEsIDB4ZTcsIDB4NWMsIDB4MWYsIDB4ZmIsIDB4ZjksCisJMHg2OCwgMHg4MywgMHhjMiwgMHg1YSwgMHg0YSwgMHgxZSwgMHg2MSwgMHgwOCwKKwkweDU3LCAweGYzLCAweDAwLCAweGJhLCAweDc3LCAweDkyLCAweDYzLCAweGE1LAorCTB4YjcsIDB4ZmUsIDB4OTcsIDB4MjIsIDB4ZGEsIDB4NWUsIDB4ZDMsIDB4YWYsCisJMHhiYywgMHg4OSwgMHgwZCwgMHg0YywgMHgzNywgMHhhOSwgMHgyNywgMHg0YSwKKwkweDdmLCAweGRiLCAweDgxLCAweDM5LCAweDExLCAweDg2LCAweDEyLCAweGY5LAorCTB4MTAsIDB4NTAsIDB4ZTQsIDB4ZGIsIDB4NzIsIDB4ZjksIDB4YWUsIDB4MTAsCisJMHg3YywgMHhlZCwgMHg1MCwgMHg1YywgMHg2MSwgMHhlYiwgMHg0MiwgMHgxZSwKKwkweGE0LCAweGY0LCAweGYwLCAweGZhLCAweDQ1LCAweDRkLCAweDk1LCAweDJiLAorCTB4ZDQsIDB4NjcsIDB4NGEsIDB4ZTMsIDB4OGEsIDB4MTUsIDB4NTUsIDB4OTIsCisJMHg3NywgMHg2NCwgMHg4YywgMHg1MSwgMHgzOCwgMHhmOSwgMHgyNiwgMHgzZSwKKwkweDY4LCAweGUyLCAweGFjLCAweGJiLCAweDY0LCAweDc3LCAweGUyLCAweDgyLAorCTB4YTQsIDB4NDIsIDB4NDEsIDB4MzgsIDB4YTAsIDB4ZjAsIDB4YzksIDB4ZDgsCisJMHg2YywgMHhlMCwgMHhlZiwgMHg0YywgMHhkYSwgMHhiNCwgMHg5MiwgMHhlZiwKKwkweDFiLCAweGUzLCAweDliLCAweGMxLCAweDQ0LCAweDNjLCAweGI5LCAweGI3LAorCTB4MzksIDB4YWMsIDB4NWMsIDB4MzIsIDB4MzksIDB4YjQsIDB4MjEsIDB4ODUsCisJMHg5MywgMHhiYywgMHhmMiwgMHg1MSwgMHg0MywgMHhiNywgMHhhZSwgMHgxZSwKKwkweDYxLCAweDljLCAweDM4LCAweDljLCAweGFhLCAweGZmLCAweGRlLCAweGZjLAorCTB4YmYsIDB4ODUsIDB4ZWYsIDB4MTcsIDB4MzQsIDB4MzYsIDB4NzEsIDB4NWYsCisJMHgwNCwgMHgxNiwgMHhhNiwgMHg5ZSwgMHhmZCwgMHgzYSwgMHgwMywgMHhkOCwKKwkweGJmLCAweDcxLCAweDcwLCAweDIwLCAweDhmLCAweDdjLCAweGZiLCAweGZmLAorCTB4NjEsIDB4ZTAsIDB4ZTIsIDB4NjAsIDB4YTcsIDB4YjEsIDB4YzAsIDB4ZTAsCisJMHhkOSwgMHgzZiwgMHhkYywgMHg4ZCwgMHg0YSwgMHhhNCwgMHg1MiwgMHg2MSwKKwkweGFmLCAweDlkLCAweGRmLCAweDhhLCAweDBkLCAweDQxLCAweGMwLCAweDI1LAorCTB4NjgsIDB4MTIsIDB4N2IsIDB4ZDUsIDB4YzcsIDB4ZGIsIDB4NjgsIDB4NzAsCisJMHgyZCwgMHg3ZCwgMHg5NSwgMHgxMiwgMHgwMywgMHgyMywgMHgwYywgMHhlOCwKKwkweDE0LCAweDQxLCAweDExLCAweDI4LCAweGVjLCAweDlkLCAweGQzLCAweDI4LAorCTB4NzcsIDB4N2EsIDB4M2MsIDB4OTMsIDB4OGUsIDB4NWMsIDB4N2UsIDB4YjMsCisJMHg0MiwgMHg5YSwgMHgxOCwgMHgyNSwgMHg5MywgMHhjOCwgMHhlYSwgMHg0MywKKwkweDFiLCAweGJlLCAweGQ1LCAweDI3LCAweGYxLCAweGQ0LCAweGUwLCAweDFlLAorCTB4Y2UsIDB4YzcsIDB4YzcsIDB4MmMsIDB4MjUsIDB4MzUsIDB4NTgsIDB4YjgsCisJMHg2YywgMHhmMywgMHhhMiwgMHhhZCwgMHhlNywgMHg1OCwgMHg0OSwgMHg0NywKKwkweGY3LCAweGNhLCAweGRlLCAweDhiLCAweDgxLCAweGI3LCAweDc1LCAweGY0LAorCTB4OTUsIDB4YTcsIDB4NWMsIDB4YzMsIDB4MmMsIDB4MGUsIDB4MWMsIDB4NTIsCisJMHg5YSwgMHhjMywgMHgyYSwgMHgwMCwgMHgyMSwgMHhhNywgMHg1MSwgMHg2YiwKKwkweGYwLCAweDA1LCAweDg3LCAweDhjLCAweDQyLCAweDFiLCAweGMzLCAweDJlLAorCTB4YTMsIDB4NzYsIDB4MjIsIDB4ZDUsIDB4N2YsIDB4NTYsIDB4MTAsIDB4ZWYsCisJMHg5OCwgMHg4NSwgMHg2NSwgMHg4NiwgMHg3MSwgMHg4NywgMHhkMiwgMHg4YywKKwkweGMwLCAweDQ3LCAweDIwLCAweGU4LCAweGI1LCAweDFjLCAweGUzLCAweGRkLAorCTB4M2MsIDB4NWMsIDB4MDMsIDB4YmIsIDB4MGUsIDB4OTcsIDB4M2IsIDB4ZTEsCisJMHg1NiwgMHg5YSwgMHhkNSwgMHgwYSwgMHg2MywgMHhkNSwgMHgzMywgMHhhZiwKKwkweDM2LCAweGNhLCAweGNmLCAweDhmLCAweDAwLCAweDI4LCAweGEzLCAweDQ1LAorCTB4YjgsIDB4Y2QsIDB4ZGUsIDB4NzMsIDB4ZDQsIDB4ZmEsIDB4MmQsIDB4NmYsCisJMHhkYiwgMHg5MywgMHhhYSwgMHhkZCwgMHg3ZiwgMHhkMiwgMHgyMiwgMHg5YywKKwkweDk2LCAweDQ4LCAweDFlLCAweGE4LCAweDYzLCAweGJlLCAweGJjLCAweDBkLAorCTB4MTQsIDB4M2MsIDB4MmUsIDB4MTEsIDB4MWYsIDB4ZDIsIDB4ZjQsIDB4NTcsCisJMHhiMywgMHg0NywgMHhmOCwgMHhhNiwgMHgxYiwgMHhjMywgMHhhNywgMHg5NSwKKwkweDJkLCAweGQ0LCAweGNhLCAweGI4LCAweDBkLCAweGZiLCAweDA2LCAweDg1LAorCTB4ZGEsIDB4NjMsIDB4ZjAsIDB4M2UsIDB4OWQsIDB4NWUsIDB4ZWUsIDB4Y2UsCisJMHhlZCwgMHg3NCwgMHgxZCwgMHgyYywgMHg5NywgMHgzZiwgMHg3MSwgMHg5NSwKKwkweDEyLCAweDAzLCAweGM1LCAweDkyLCAweDQ2LCAweDg0LCAweDFiLCAweDA3LAorCTB4ZTYsIDB4YjQsIDB4MWQsIDB4M2EsIDB4ZjEsIDB4ODksIDB4OTAsIDB4NTAsCisJMHgxMCwgMHgyOSwgMHgzNCwgMHhjMCwgMHg5MCwgMHhiZSwgMHg0YSwgMHhhOSwKKwkweDBkLCAweGIwLCAweDdiLCAweGZiLCAweDM1LCAweGVlLCAweDRlLCAweDM0LAorCTB4ZWMsIDB4NWEsIDB4NTgsIDB4YmMsIDB4YjgsIDB4ZGEsIDB4MzgsIDB4ODgsCisJMHg4YywgMHg3NCwgMHgxZSwgMHhjOSwgMHhhYiwgMHg3OCwgMHgyZSwgMHgyYSwKKwkweDE3LCAweDhhLCAweDQzLCAweDNkLCAweGExLCAweDJhLCAweDQxLCAweGI1LAorCTB4ZDYsIDB4ZTgsIDB4NWIsIDB4YzUsIDB4NGEsIDB4MWMsIDB4M2MsIDB4OWYsCisJMHg4ZCwgMHgzYSwgMHg2OSwgMHg4OCwgMHhmOCwgMHg4MCwgMHhkMiwgMHgxMSwKKwkweGZjLCAweDdlLCAweDgwLCAweDhlLCAweDdmLCAweDg1LCAweDY0LCAweDljLAorCTB4NDYsIDB4NTgsIDB4YzgsIDB4NDgsIDB4OTgsIDB4NGIsIDB4ZjUsIDB4NzMsCisJMHgzZiwgMHg0OSwgMHhjZSwgMHg1MywgMHgyYywgMHhkNSwgMHhmYywgMHgzMywKKwkweGYxLCAweDZmLCAweGQ4LCAweGU5LCAweDJlLCAweDcwLCAweDJlLCAweGRjLAorCTB4ZTUsIDB4NDMsIDB4ODAsIDB4MzgsIDB4ZjIsIDB4ODcsIDB4ZWQsIDB4ODUsCisJMHhlNCwgMHgzZSwgMHg0NSwgMHgxNCwgMHgyMCwgMHhjZiwgMHhhMCwgMHg2MSwKKwkweDRmLCAweGU4LCAweGQ3LCAweDViLCAweGIzLCAweDBkLCAweDBlLCAweDRlLAorCTB4NGQsIDB4Y2UsIDB4YmUsIDB4YmEsIDB4YWEsIDB4OTAsIDB4MDksIDB4Y2IsCisJMHg0YiwgMHg1ZCwgMHgwOCwgMHhmZiwgMHg1MiwgMHhkNSwgMHgyMywgMHhiYywKKwkweGFkLCAweDhkLCAweGQzLCAweDA2LCAweDRhLCAweGEwLCAweDUxLCAweDU2LAorCTB4YTcsIDB4ZDgsIDB4MzMsIDB4YWIsIDB4YmMsIDB4ZDAsIDB4ZGYsIDB4OTIsCisJMHg4NywgMHgyMCwgMHgyZCwgMHg3YiwgMHg1ZSwgMHhmYSwgMHgzMCwgMHhhNywKKwkweDA2LCAweDA2LCAweGU1LCAweDRmLCAweDJjLCAweGI1LCAweDYxLCAweGQ3LAorCTB4NTQsIDB4ZDMsIDB4ZGYsIDB4ZDAsIDB4MGEsIDB4YjAsIDB4MDYsIDB4Y2UsCisJMHhmNiwgMHg4NiwgMHhiNywgMHg4ZSwgMHhhYSwgMHg3YiwgMHg3OCwgMHhkNSwKKwkweGI5LCAweGViLCAweDA3LCAweGFjLCAweDVmLCAweGM1LCAweGQyLCAweDhjLAorCTB4NDAsIDB4ZTAsIDB4N2YsIDB4OTgsIDB4ZDQsIDB4ZTUsIDB4NGIsIDB4Y2EsCisJMHhmYiwgMHg0NywgMHhlZiwgMHhlZiwgMHhiOSwgMHg0ZCwgMHg2ZCwgMHg4ZiwKKwkweDgyLCAweDY4LCAweDc0LCAweDg0LCAweGUwLCAweDBhLCAweDkzLCAweDBmLAorCTB4YjIsIDB4MDEsIDB4YTksIDB4OWYsIDB4NjgsIDB4NmEsIDB4ZTgsIDB4ZjcsCisJMHhmYiwgMHgwYiwgMHhkZSwgMHgxNywgMHhlMCwgMHgzMCwgMHgzOCwgMHg1MSwKKwkweGJjLCAweDA3LCAweGI4LCAweDJjLCAweDkxLCAweDBmLCAweGMxLCAweDBlLAorCTB4YTYsIDB4ZjksIDB4ZjAsIDB4ZDUsIDB4NDgsIDB4NzYsIDB4OGEsIDB4ZGUsCisJMHg3NCwgMHhlMywgMHgzMCwgMHg2NSwgMHg1NiwgMHhiMywgMHg1YywgMHhlMiwKKwkweDg5LCAweDhkLCAweGRhLCAweDgwLCAweGFkLCAweDBmLCAweDIyLCAweGZiLAorCTB4MjQsIDB4MWQsIDB4MTYsIDB4ZGQsIDB4MzQsIDB4NGIsIDB4OTAsIDB4NTgsCisJMHg0ZSwgMHgwYywgMHgxMywgMHgyOCwgMHhjZiwgMHgxZCwgMHhhNCwgMHhhYSwKKwkweGI3LCAweGYzLCAweGIxLCAweDY2LCAweGFkLCAweDNiLCAweGNmLCAweDc5LAorCTB4MTIsIDB4MDQsIDB4ZDcsIDB4NzksIDB4ZDksIDB4NWYsIDB4ZGYsIDB4ODksCisJMHhiMiwgMHg1YiwgMHhhNywgMHg5YSwgMHgyNiwgMHgxZSwgMHg2NywgMHg0NiwKKwkweDdjLCAweDY2LCAweDk1LCAweDY3LCAweGU2LCAweDQ1LCAweDhiLCAweDFmLAorCTB4NjUsIDB4NzksIDB4OWYsIDB4NmQsIDB4MTEsIDB4ODEsIDB4MTcsIDB4MGQsCisJMHgxMSwgMHhiMCwgMHg1YywgMHhiNCwgMHhjNywgMHgyNywgMHg4NywgMHhhYiwKKwkweDVkLCAweDBhLCAweDE4LCAweGFlLCAweDRlLCAweDA2LCAweGEzLCAweDNkLAorCTB4YzcsIDB4YjAsIDB4MjIsIDB4YmEsIDB4MDMsIDB4YTQsIDB4MGYsIDB4ZTUsCisJMHgxYywgMHg3MiwgMHgyYSwgMHgwNCwgMHhjZSwgMHg4MywgMHhlOSwgMHhmMywKKwkweGQ3LCAweGM5LCAweDY3LCAweDZjLCAweDFlLCAweDZiLCAweDNjLCAweDliLAorCTB4MGIsIDB4NWUsIDB4NmEsIDB4YTYsIDB4NzksIDB4MGEsIDB4ZjEsIDB4YmUsCisJMHhkNywgMHhiNCwgMHg2ZiwgMHg0NSwgMHgxZSwgMHhmYiwgMHg3OCwgMHg5NywKKwkweGFmLCAweDM0LCAweDc2LCAweDk1LCAweDUyLCAweGY3LCAweDNkLCAweDVkLAorCTB4MDcsIDB4MjgsIDB4NTcsIDB4OWMsIDB4NGEsIDB4MGYsIDB4Y2YsIDB4MGIsCisJMHgxYiwgMHhjNCwgMHhjMiwgMHg3MiwgMHhkNywgMHg3MiwgMHgzOCwgMHg5YiwKKwkweGVhLCAweGViLCAweGVlLCAweGFlLCAweDM0LCAweGM4LCAweDAxLCAweGQ3LAorCTB4YTUsIDB4ZTMsIDB4Y2UsIDB4NDEsIDB4YWQsIDB4MDIsIDB4NjAsIDB4MjMsCisJMHgxOCwgMHgzNiwgMHhiYSwgMHgxNywgMHhmYSwgMHhjZiwgMHhlNCwgMHhkYSwKKwkweGRjLCAweGZjLCAweDgyLCAweGRjLCAweDdjLCAweDExLCAweGY0LCAweGI4LAorCTB4NTIsIDB4NWQsIDB4ZjcsIDB4MmYsIDB4YzgsIDB4ZmUsIDB4NGEsIDB4ZTYsCisJMHhiOSwgMHhhZiwgMHg0YiwgMHgxNywgMHgxOCwgMHg5MSwgMHhjMiwgMHhmZSwKKwkweGQ3LCAweDNhLCAweDc3LCAweDBjLCAweGEwLCAweDQzLCAweDljLCAweDZmLAorCTB4MTMsIDB4MDYsIDB4YmUsIDB4NmUsIDB4ZTAsIDB4MWEsIDB4M2MsIDB4ZjMsCisJMHhmNSwgMHhjYywgMHg3OCwgMHhmYiwgMHg1ZCwgMHhkNSwgMHhkYSwgMHhiNywKKwkweDU4LCAweGVhLCAweDg2LCAweDQyLCAweDZiLCAweDMyLCAweGZmLCAweGIyLAorCTB4ZTIsIDB4ZWUsIDB4MDMsIDB4MWYsIDB4ZjQsIDB4ZWYsIDB4ZGIsIDB4NTMsCisJMHg3OSwgMHhkNSwgMHg0ZSwgMHhhZiwgMHg2MCwgMHg4ZSwgMHgwMiwgMHhjMiwKKwkweGNjLCAweDM5LCAweDk3LCAweDdiLCAweGZkLCAweGExLCAweGY4LCAweDdhLAorCTB4MjYsIDB4ZTgsIDB4NTUsIDB4ZDYsIDB4YTQsIDB4OGIsIDB4YTAsIDB4MWIsCisJMHgyZCwgMHg2MywgMHhhYSwgMHg3MywgMHg3MSwgMHg2ZSwgMHhiZiwgMHg4YiwKKwkweDNiLCAweGUzLCAweDFiLCAweDBkLCAweGJiLCAweDJlLCAweDQ0LCAweDA5LAorCTB4NjQsIDB4YWMsIDB4YzcsIDB4OWUsIDB4YjUsIDB4YzYsIDB4NzcsIDB4YjAsCisJMHg3OSwgMHhiMywgMHhhYSwgMHhmYywgMHg2NywgMHg1NywgMHg5YSwgMHg1MCwKKwkweDgxLCAweDM3LCAweDE0LCAweDdjLCAweGQ3LCAweGEwLCAweGQ0LCAweDZhLAorCTB4NzksIDB4ODQsIDB4NTEsIDB4MGUsIDB4OTUsIDB4MGEsIDB4MzAsIDB4YTMsCisJMHg2MCwgMHg1NSwgMHg0OCwgMHgwNSwgMHgxNiwgMHhhZSwgMHg0MywgMHg5MCwKKwkweGRjLCAweDhlLCAweDA5LCAweGJlLCAweDc5LCAweGY2LCAweDkwLCAweDc0LAorCTB4ZjgsIDB4MjAsIDB4OTYsIDB4NGQsIDB4YTcsIDB4ZjUsIDB4MWEsIDB4MmIsCisJMHhjNywgMHgxNSwgMHg5ZCwgMHgxOCwgMHhmNywgMHg5NCwgMHg4NywgMHhmNywKKwkweGY0LCAweGZiLCAweDBkLCAweDYxLCAweGI2LCAweGQ3LCAweGJlLCAweDEwLAorCTB4OGUsIDB4NDcsIDB4M2MsIDB4MTAsIDB4NDQsIDB4OTAsIDB4NTIsIDB4MjEsCisJMHg4MywgMHhjMCwgMHhmNSwgMHg5OSwgMHhhYSwgMHhiYywgMHhmNiwgMHg1NSwKKwkweGFlLCAweGY1LCAweGIyLCAweGE0LCAweGNkLCAweDRkLCAweGI5LCAweDM4LAorCTB4NmMsIDB4YmMsIDB4ODAsIDB4YzMsIDB4YWQsIDB4ZjQsIDB4NDYsIDB4MzEsCisJMHgwMSwgMHg1OCwgMHgyZCwgMHg4OCwgMHg1NywgMHhjMywgMHgyMywgMHhkMSwKKwkweDY0LCAweGM5LCAweGEzLCAweDIxLCAweDZiLCAweDhiLCAweDhhLCAweDIzLAorCTB4MmMsIDB4NGYsIDB4YTksIDB4Y2QsIDB4NjcsIDB4ZmEsIDB4NzcsIDB4YWQsCisJMHhhMywgMHgxNiwgMHhhMiwgMHhlNSwgMHgxOSwgMHgxNCwgMHg3MCwgMHg0MSwKKwkweDViLCAweGRhLCAweDE0LCAweGRlLCAweGUzLCAweGU1LCAweGMxLCAweDE1LAorCTB4YjQsIDB4NzcsIDB4YTQsIDB4OWIsIDB4YjgsIDB4YjEsIDB4MjgsIDB4NTEsCisJMHgzMCwgMHhiNCwgMHhmMSwgMHhmMywgMHhmOCwgMHg2ZCwgMHhkMCwgMHhjMywKKwkweDhjLCAweDRjLCAweDc2LCAweGIwLCAweDlhLCAweGRmLCAweGM4LCAweGJlLAorCTB4ZjgsIDB4NGEsIDB4NjEsIDB4NmUsIDB4M2UsIDB4ZDYsIDB4M2MsIDB4ZTgsCisJMHhkZSwgMHg1NiwgMHhhMCwgMHg5YywgMHgyNSwgMHhiZSwgMHhjZSwgMHg5MywKKwkweDFmLCAweDg4LCAweGZiLCAweDlhLCAweDFhLCAweGUyLCAweGZmLCAweDg4LAorCTB4YWQsIDB4MTAsIDB4Y2IsIDB4NmMsIDB4ZDYsIDB4ZTcsIDB4MzksIDB4MGIsCisJMHhlNSwgMHgxYSwgMHgwNiwgMHgwNSwgMHg2NCwgMHg1YiwgMHgwYSwgMHhkZiwKKwkweDIyLCAweDU4LCAweGQ3LCAweGZiLCAweDg4LCAweDEyLCAweGRkLCAweGI3LAorCTB4NTIsIDB4M2EsIDB4YzksIDB4YmYsIDB4NDksIDB4ZGYsIDB4OGMsIDB4ODcsCisJMHg5ZiwgMHg4NCwgMHhiNSwgMHgwYSwgMHhmNiwgMHgwMCwgMHg1MiwgMHhhZSwKKwkweDY3LCAweDEyLCAweDFhLCAweDhjLCAweDcxLCAweDE1LCAweGY1LCAweGExLAorCTB4MTMsIDB4MzksIDB4ZjAsIDB4OTEsIDB4N2UsIDB4ODgsIDB4N2MsIDB4YjMsCisJMHg5NSwgMHg1MCwgMHgwMiwgMHhhNiwgMHg2MywgMHhiNSwgMHg2NCwgMHhmYiwKKwkweDkwLCAweDg3LCAweDYxLCAweGUyLCAweDI3LCAweGFmLCAweDExLCAweDBjLAorCTB4NzMsIDB4ODMsIDB4ZWYsIDB4YTksIDB4MjgsIDB4ZmUsIDB4YzgsIDB4ODUsCisJMHgxYSwgMHgzYSwgMHhkZSwgMHhmMiwgMHhlNSwgMHgyNSwgMHg2NCwgMHg2ZCwKKwkweGFhLCAweDQxLCAweDRjLCAweDgwLCAweDJlLCAweDg0LCAweGZmLCAweGMxLAorCTB4YzAsIDB4NTQsIDB4MGMsIDB4MjksIDB4MWIsIDB4YTMsIDB4MDcsIDB4N2MsCisJMHgzMywgMHg0YywgMHgxMCwgMHhmNiwgMHg2ZiwgMHg3OSwgMHhkZiwgMHhkMywKKwkweGYwLCAweDI0LCAweDU3LCAweGYxLCAweDYwLCAweGUxLCAweGYwLCAweGJkLAorCTB4YzQsIDB4MWYsIDB4ZjQsIDB4NjcsIDB4ZDIsIDB4ZDMsIDB4Y2MsIDB4NmEsCisJMHgwNywgMHg3MiwgMHg0NCwgMHgxNiwgMHg4NSwgMHg0NiwgMHhkMCwgMHg3MywKKwkweDg3LCAweGE5LCAweGM3LCAweDJmLCAweGQxLCAweGY1LCAweGVjLCAweGUzLAorCTB4MjgsIDB4YTMsIDB4OTMsIDB4NGYsIDB4ZDcsIDB4NzYsIDB4YzEsIDB4M2MsCisJMHgwZCwgMHgxMywgMHgzMywgMHhjZiwgMHg1YiwgMHhiZCwgMHg2YSwgMHg1MiwKKwkweDRlLCAweGVlLCAweGM4LCAweDVlLCAweGExLCAweDU4LCAweDRhLCAweDA4LAorCTB4ODEsIDB4ZDksIDB4MjMsIDB4Y2MsIDB4ZmIsIDB4MWMsIDB4YjIsIDB4ZDgsCisJMHhhMywgMHhlNCwgMHg1MywgMHhmZSwgMHhmNCwgMHg0YiwgMHg0OCwgMHhjMSwKKwkweDIwLCAweGE0LCAweDk3LCAweGY4LCAweDM4LCAweGEzLCAweDY5LCAweGMxLAorCTB4MTEsIDB4ZjAsIDB4YTEsIDB4M2IsIDB4YTksIDB4OWEsIDB4MTIsIDB4NjEsCisJMHhlOCwgMHg4ZCwgMHg5OSwgMHg0NCwgMHgzZiwgMHg5NCwgMHg3MiwgMHg4MiwKKwkweDE5LCAweDk2LCAweDYyLCAweGIwLCAweGE2LCAweDY0LCAweDA1LCAweDE5LAorCTB4OGYsIDB4ZDYsIDB4NWQsIDB4MDUsIDB4YmYsIDB4NzksIDB4OWUsIDB4OWQsCisJMHhlNCwgMHg5MywgMHg0YywgMHhhZCwgMHg2MSwgMHg4YywgMHgxOCwgMHhkYSwKKwkweGI2LCAweDJlLCAweGIzLCAweGNhLCAweDE0LCAweDRkLCAweDUzLCAweGE0LAorCTB4OTcsIDB4MjcsIDB4MTAsIDB4NTYsIDB4YTIsIDB4NjcsIDB4NWEsIDB4NWEsCisJMHg1ZSwgMHgxMywgMHhjMCwgMHhkYiwgMHhhNywgMHg5ZiwgMHg0NSwgMHg1YiwKKwkweGViLCAweDFhLCAweDE0LCAweDBjLCAweDhjLCAweDM4LCAweDVlLCAweDc3LAorCTB4OWEsIDB4ZWMsIDB4NzUsIDB4NjgsIDB4OTMsIDB4NjUsIDB4MDIsIDB4OWMsCisJMHhmYiwgMHg2MiwgMHg2MCwgMHg0OSwgMHhkZCwgMHhiMiwgMHgyYSwgMHg2NywKKwkweDg2LCAweGUzLCAweDhhLCAweDdkLCAweDhjLCAweDQ2LCAweDc4LCAweDgxLAorCTB4NjAsIDB4NjksIDB4ZjIsIDB4M2YsIDB4NzQsIDB4MTEsIDB4MzUsIDB4ZmYsCisJMHg3NywgMHhhMywgMHg2NiwgMHgyMCwgMHhmYywgMHg5OCwgMHg0YSwgMHgzNSwKKwkweDdhLCAweDUyLCAweGU0LCAweDkwLCAweDEzLCAweDgwLCAweGI5LCAweGE2LAorCTB4NzMsIDB4N2EsIDB4N2QsIDB4NjYsIDB4NmUsIDB4NmIsIDB4YjYsIDB4NDMsCisJMHgxMCwgMHhkNSwgMHg5MSwgMHgyYiwgMHg2NiwgMHhkZCwgMHg4OSwgMHg4NywKKwkweGUzLCAweDhjLCAweDU4LCAweDUzLCAweDJmLCAweDQwLCAweDc0LCAweDQ1LAorCTB4MWIsIDB4NzcsIDB4N2EsIDB4YTQsIDB4NDQsIDB4MTksIDB4NzgsIDB4YmEsCisJMHg4NywgMHgxMCwgMHg0MSwgMHgzMSwgMHgzMiwgMHg1ZiwgMHg4NywgMHg2OCwKKwkweGRlLCAweDQzLCAweDRhLCAweGVmLCAweDMzLCAweGIzLCAweDExLCAweDgzLAorCTB4YTksIDB4YzIsIDB4NmYsIDB4OGQsIDB4MzQsIDB4ZTIsIDB4OTUsIDB4ODQsCisJMHgzYSwgMHg0ZiwgMHg2ZiwgMHg4YywgMHgzMSwgMHgxZCwgMHhiNiwgMHhmNSwKKwkweDk1LCAweDBkLCAweDAxLCAweDExLCAweDIwLCAweGRmLCAweDcyLCAweGYzLAorCTB4M2YsIDB4OWEsIDB4MzMsIDB4YWEsIDB4YjEsIDB4MDYsIDB4NmEsIDB4NjMsCisJMHg0NywgMHg5MSwgMHgwMSwgMHhkZiwgMHhiMywgMHg1NCwgMHgzNiwgMHhmZCwKKwkweDA2LCAweDJkLCAweGI4LCAweDA4LCAweGUzLCAweGQzLCAweDY1LCAweGFjLAorCTB4NjYsIDB4MDMsIDB4ZWUsIDB4YTQsIDB4NjMsIDB4YmQsIDB4ZDQsIDB4Y2UsCisJMHhiZCwgMHg3OSwgMHhhNywgMHg0OCwgMHgzOCwgMHhjNSwgMHg3ZCwgMHhiNSwKKwkweDcxLCAweDlhLCAweDNjLCAweDExLCAweDdjLCAweDZjLCAweGUyLCAweDU0LAorCTB4MDIsIDB4NWQsIDB4NDIsIDB4YWIsIDB4MjUsIDB4OTMsIDB4NjYsIDB4MDEsCisJMHgzNywgMHg3OCwgMHgzNSwgMHg0YSwgMHg4YywgMHgxOSwgMHg0ZCwgMHgwMCwKKwkweDc1LCAweDRmLCAweGNjLCAweGMwLCAweDI2LCAweDgyLCAweGMxLCAweDM1LAorCTB4OGMsIDB4YzcsIDB4YzIsIDB4NTksIDB4MDEsIDB4M2UsIDB4OTgsIDB4MjIsCisJMHg4OCwgMHg5YywgMHg5MCwgMHg3NSwgMHgwNSwgMHgzMywgMHgwNywgMHhiOSwKKwkweDM5LCAweDgxLCAweDM4LCAweDU4LCAweDEwLCAweDI5LCAweGNmLCAweGM4LAorCTB4OTgsIDB4YjIsIDB4MDMsIDB4ZDcsIDB4NWIsIDB4YjMsIDB4MTgsIDB4YmEsCisJMHgzNCwgMHgwYywgMHg5ZiwgMHhhYiwgMHhkNywgMHhlZCwgMHgyOSwgMHg4MiwKKwkweDQxLCAweGUwLCAweDIwLCAweDk3LCAweDU3LCAweDkyLCAweGIyLCAweGI4LAorCTB4MTAsIDB4MmQsIDB4MGIsIDB4YTIsIDB4YzUsIDB4OGYsIDB4OTAsIDB4NmYsCisJMHhlZCwgMHgxMiwgMHg1NiwgMHgyNSwgMHhiZSwgMHhmZCwgMHg3NSwgMHhmNywKKwkweGI2LCAweGY4LCAweDQwLCAweDY3LCAweDM5LCAweDExLCAweGZhLCAweDE1LAorCTB4YWUsIDB4NmEsIDB4NTQsIDB4NWYsIDB4MzIsIDB4MmIsIDB4ZjgsIDB4NDgsCisJMHg1NSwgMHhiZSwgMHg4NiwgMHgyZiwgMHg2OSwgMHg0OCwgMHg1YiwgMHg1ZCwKKwkweDRkLCAweGI3LCAweDM1LCAweGFhLCAweGI2LCAweDkxLCAweDg4LCAweDE5LAorCTB4OTYsIDB4MWMsIDB4NjgsIDB4ZjYsIDB4ODUsIDB4OWUsIDB4YjMsIDB4YjIsCisJMHhhMywgMHgzMiwgMHhkNCwgMHg1MiwgMHg3MCwgMHhiNywgMHg2MiwgMHhlMywKKwkweDE0LCAweGI2LCAweDc4LCAweDVmLCAweDFiLCAweDFkLCAweDA0LCAweDljLAorCTB4MjYsIDB4MGMsIDB4MzMsIDB4OTQsIDB4YjEsIDB4OTcsIDB4MDgsIDB4ZGIsCisJMHgwYiwgMHgzOSwgMHgyOSwgMHhkNCwgMHhiYywgMHg2ZCwgMHhkZiwgMHgwMiwKKwkweGM2LCAweDk5LCAweGFiLCAweDk5LCAweDMyLCAweGU1LCAweGNlLCAweDUxLAorCTB4NGYsIDB4YWUsIDB4YjgsIDB4OGIsIDB4ZTAsIDB4YWYsIDB4MDcsIDB4YzQsCisJMHhmOSwgMHg0MSwgMHg3YywgMHg1OSwgMHhhMCwgMHhhYywgMHg3NCwgMHg0ZCwKKwkweDdlLCAweDQzLCAweDc3LCAweDljLCAweDA2LCAweDQ5LCAweDc5LCAweDhhLAorCTB4MTQsIDB4NzMsIDB4OTMsIDB4YTgsIDB4NWIsIDB4MWIsIDB4MzQsIDB4MjksCisJMHg3OCwgMHgwNCwgMHgyZiwgMHhkNywgMHgxZiwgMHgxMywgMHg5MCwgMHhlMCwKKwkweGRkLCAweDNiLCAweDQyLCAweDZiLCAweDc5LCAweDZlLCAweDUyLCAweGM3LAorCTB4MGYsIDB4MzgsIDB4ZGEsIDB4MDEsIDB4MmMsIDB4OGQsIDB4ZTYsIDB4OTQsCisJMHg1ZCwgMHg1OSwgMHgyNywgMHgxZCwgMHgxMCwgMHg0ZSwgMHgxMSwgMHgzNiwKKwkweGZiLCAweDUzLCAweDE2LCAweDA1LCAweDI1LCAweGYyLCAweDY0LCAweGQ4LAorCTB4ZjksIDB4Y2QsIDB4NWMsIDB4ZmUsIDB4YjQsIDB4MTgsIDB4NDQsIDB4ODAsCisJMHgxMCwgMHhiYywgMHgzZCwgMHhmMywgMHgxZCwgMHg1YSwgMHhmMCwgMHhjMSwKKwkweGMzLCAweDU1LCAweGZmLCAweDQxLCAweDNlLCAweGUzLCAweGVmLCAweDQ0LAorCTB4YjIsIDB4YzAsIDB4MDEsIDB4MTgsIDB4YTIsIDB4NDksIDB4ODgsIDB4NzgsCisJMHgwZCwgMHg0YywgMHhjOCwgMHg3MywgMHhjZiwgMHgzMCwgMHg4NSwgMHgzYSwKKwkweDg4LCAweDkwLCAweDAxLCAweGNmLCAweDY5LCAweDUzLCAweGEzLCAweDE4LAorCTB4M2YsIDB4ZDYsIDB4ZTcsIDB4OTQsIDB4MTQsIDB4YTcsIDB4YWUsIDB4Y2QsCisJMHg2ZiwgMHgxMSwgMHg3MiwgMHhmZSwgMHgyYiwgMHhiMCwgMHg4MSwgMHg1MywKKwkweGVhLCAweDY3LCAweGQ2LCAweGU0LCAweGNhLCAweDQyLCAweGEwLCAweGY5LAorCTB4YjEsIDB4ZDQsIDB4YjUsIDB4M2IsIDB4YzksIDB4ZjAsIDB4MzYsIDB4YzEsCisJMHgxYywgMHhmNCwgMHhiMSwgMHhmNiwgMHg4NCwgMHhkMCwgMHg4NiwgMHg2YywKKwkweDc2LCAweDlhLCAweDAzLCAweGMyLCAweGI2LCAweDJlLCAweDlhLCAweDQ2LAorCTB4ZjUsIDB4NWYsIDB4MmMsIDB4MzgsIDB4YWMsIDB4YWQsIDB4NmYsIDB4MmUsCisJMHg3YSwgMHgxOCwgMHgyZCwgMHgyMiwgMHg5NSwgMHg1ZSwgMHg1ZSwgMHhjOSwKKwkweDdhLCAweDBhLCAweDU2LCAweGUxLCAweGM3LCAweDE1LCAweGZkLCAweGJmLAorCTB4ZmYsIDB4ZjcsIDB4N2UsIDB4ODUsIDB4MjAsIDB4YTksIDB4OGEsIDB4OWMsCisJMHhhOSwgMHg3ZCwgMHhlOCwgMHhlZCwgMHhmYywgMHg3ZiwgMHhiYiwgMHhmMCwKKwkweDA1LCAweDNmLCAweGNlLCAweDRmLCAweDRjLCAweGVlLCAweGE0LCAweGEwLAorCTB4Y2MsIDB4OWMsIDB4NjIsIDB4MWUsIDB4ZDYsIDB4ZDAsIDB4MzAsIDB4MzcsCisJMHhiOCwgMHg5OCwgMHg1NiwgMHgxZCwgMHhhYSwgMHhkNiwgMHg1ZSwgMHg3MywKKwkweDEyLCAweGU0LCAweDg4LCAweDgyLCAweDQ4LCAweDY0LCAweDA2LCAweGQ3LAorCTB4MmEsIDB4MzEsIDB4NTAsIDB4N2IsIDB4MTAsIDB4MTcsIDB4YjgsIDB4NGMsCisJMHg1YSwgMHg4ZCwgMHhmMSwgMHhmYywgMHhmMSwgMHgzMywgMHgzYiwgMHg5OCwKKwkweDQyLCAweDE4LCAweDViLCAweDM1LCAweDc4LCAweGNhLCAweDhlLCAweDQxLAorCTB4NTIsIDB4YWUsIDB4NmQsIDB4ZTEsIDB4YTIsIDB4OWQsIDB4NWIsIDB4YmQsCisJMHhmMywgMHg1ZiwgMHg0OSwgMHhjMSwgMHgyNywgMHgwNiwgMHhjMSwgMHhhZiwKKwkweGMwLCAweGEzLCAweDlkLCAweGYzLCAweDFjLCAweDhlLCAweDkwLCAweDhhLAorCTB4YjAsIDB4NjksIDB4YjAsIDB4YzUsIDB4MTEsIDB4MGMsIDB4OTEsIDB4MTQsCisJMHgxZiwgMHg1ZSwgMHgxMCwgMHhlMSwgMHgxZCwgMHgxNCwgMHgzMCwgMHg1NCwKKwkweDFlLCAweDE3LCAweDNkLCAweDMxLCAweDdiLCAweGJmLCAweDJmLCAweDlkLAorCTB4NmQsIDB4NjMsIDB4MzIsIDB4ZjAsIDB4OWQsIDB4OWYsIDB4OTUsIDB4M2QsCisJMHgwYiwgMHhkMiwgMHg0ZCwgMHgxMCwgMHhlMiwgMHgzZiwgMHg2NywgMHg2OSwKKwkweDQzLCAweDlhLCAweDRhLCAweDJjLCAweDU0LCAweDcxLCAweGE4LCAweGEwLAorCTB4OWUsIDB4OWYsIDB4MTAsIDB4YWYsIDB4MWIsIDB4Y2UsIDB4OTksIDB4ZTMsCisJMHgyNSwgMHgzMiwgMHgxMCwgMHg1NCwgMHg4MCwgMHhmZSwgMHhkYSwgMHg1NywKKwkweGQwLCAweGIyLCAweDkyLCAweDdmLCAweGJiLCAweDVmLCAweGU3LCAweDRkLAorCTB4MWIsIDB4M2QsIDB4NDYsIDB4NGQsIDB4ZTQsIDB4NGMsIDB4ZDYsIDB4YWYsCisJMHgxYSwgMHgzMiwgMHgxMiwgMHg0MCwgMHhiOCwgMHg4NCwgMHg4ZSwgMHhlNCwKKwkweDgwLCAweGNlLCAweDdlLCAweGMxLCAweDEzLCAweDhiLCAweGIwLCAweGI3LAorCTB4NmYsIDB4MjQsIDB4YmEsIDB4ODUsIDB4NTAsIDB4ODMsIDB4YzMsIDB4Y2YsCisJMHgxOSwgMHhiMywgMHhmMCwgMHhjNywgMHhlZSwgMHg2OCwgMHhiZSwgMHg5ZSwKKwkweDZkLCAweGI5LCAweGZiLCAweGQ1LCAweDI5LCAweGNlLCAweDgyLCAweGNkLAorCTB4NjksIDB4MTYsIDB4NjgsIDB4NmIsIDB4NmEsIDB4ZjQsIDB4MDIsIDB4MzIsCisJMHhjZSwgMHg2MCwgMHgzNywgMHgwYywgMHhiOSwgMHgzOCwgMHg5MiwgMHg5YywKKwkweDQyLCAweGE5LCAweDBiLCAweDUzLCAweDk2LCAweGZlLCAweDM5LCAweGMxLAorCTB4MjQsIDB4NjUsIDB4OWIsIDB4Y2QsIDB4ZTcsIDB4OGQsIDB4MzYsIDB4MDcsCisJMHg5ZiwgMHgxZCwgMHgzNSwgMHg4ZSwgMHhkYywgMHg0YywgMHhiNSwgMHg2OCwKKwkweGM1LCAweGZkLCAweDQ0LCAweDE5LCAweGYyLCAweDZjLCAweDU5LCAweDFjLAorCTB4YjEsIDB4MGIsIDB4MzUsIDB4NDgsIDB4ODYsIDB4MWEsIDB4MDUsIDB4MjIsCisJMHgwMywgMHgwYywgMHgwYywgMHhhMiwgMHg5MiwgMHg5MCwgMHgzNSwgMHhmYiwKKwkweDM3LCAweDk0LCAweGM3LCAweDE1LCAweDg0LCAweGFlLCAweGU4LCAweDA1LAorCTB4YTAsIDB4ZjcsIDB4MzAsIDB4MTEsIDB4NWMsIDB4ZTQsIDB4NWQsIDB4M2UsCisJMHgxMiwgMHg1NCwgMHg4MCwgMHg1NCwgMHg2YiwgMHgwOSwgMHg4YywgMHhjZSwKKwkweDgwLCAweDVlLCAweGE3LCAweGM4LCAweDZhLCAweDBjLCAweDU2LCAweGUxLAorCTB4MTgsIDB4N2QsIDB4YzksIDB4MzksIDB4YzEsIDB4ZWYsIDB4ZTMsIDB4MjUsCisJMHhhMCwgMHg4YiwgMHgyZiwgMHg2MCwgMHgzYSwgMHg0MywgMHgzOSwgMHhhNiwKKwkweDI4LCAweDI4LCAweDdiLCAweDRjLCAweDc3LCAweGQ0LCAweDQ5LCAweDYxLAorCTB4NDYsIDB4ZTksIDB4MWIsIDB4NDUsIDB4ZDYsIDB4YjEsIDB4NTYsIDB4ZTEsCisJMHg3ZCwgMHgzNCwgMHhjZCwgMHgwNiwgMHhiNiwgMHg2NywgMHg4ZCwgMHg3ZCwKKwkweDdhLCAweGUyLCAweGJlLCAweDY4LCAweDM1LCAweGE2LCAweDc4LCAweGU1LAorCTB4NDcsIDB4NDgsIDB4YjcsIDB4YzcsIDB4ZGUsIDB4Y2QsIDB4YzksIDB4MDUsCisJMHhiNCwgMHhlNywgMHg1MCwgMHg0OCwgMHhlMSwgMHg0YiwgMHhmZSwgMHg3NiwKKwkweDc3LCAweGM2LCAweGY3LCAweDVmLCAweGNiLCAweGMyLCAweGE4LCAweGQ3LAorCTB4ZDYsIDB4OGEsIDB4ZTUsIDB4NDksIDB4ZDksIDB4Y2EsIDB4NDUsIDB4ZjQsCisJMHhkYSwgMHhjZCwgMHgzMywgMHhkMSwgMHg1OSwgMHgyZCwgMHg5ZSwgMHhjMSwKKwkweDVjLCAweGU2LCAweDAxLCAweDE4LCAweGI4LCAweGYwLCAweDVlLCAweGIxLAorCTB4NjksIDB4OTUsIDB4MmYsIDB4MDIsIDB4MmEsIDB4ZTcsIDB4NGEsIDB4ZDcsCisJMHhkMSwgMHhjMywgMHhkNSwgMHg2ZiwgMHgxNSwgMHhjOCwgMHhkYywgMHgyOSwKKwkweGRlLCAweGI5LCAweDNmLCAweDhiLCAweGE2LCAweGJjLCAweGRkLCAweDI1LAorCTB4ODQsIDB4MzUsIDB4M2MsIDB4OTAsIDB4MmQsIDB4YzIsIDB4MWUsIDB4OTgsCisJMHg4YSwgMHg1MCwgMHgwOSwgMHg3NywgMHg0MiwgMHhlOSwgMHgzNSwgMHg4YSwKKwkweDdjLCAweDk3LCAweGJmLCAweGU4LCAweGJmLCAweDU2LCAweGQwLCAweDhiLAorCTB4NjUsIDB4ZDMsIDB4YWYsIDB4MWUsIDB4MDUsIDB4OTQsIDB4ZmEsIDB4YWMsCisJMHhhOCwgMHgyYiwgMHgyOCwgMHhjYiwgMHgzNywgMHgzZSwgMHhlOCwgMHhiYiwKKwkweDY2LCAweDNhLCAweGVkLCAweGIyLCAweDQ4LCAweDEwLCAweDBmLCAweDNhLAorCTB4NWEsIDB4YzUsIDB4ZGIsIDB4MjYsIDB4MGUsIDB4YWEsIDB4NWUsIDB4NjksCisJMHgxNSwgMHhkNiwgMHg4MSwgMHhhZSwgMHhiZCwgMHhlNiwgMHgwMywgMHhmMSwKKwkweGY2LCAweDM3LCAweGM4LCAweGRlLCAweDcwLCAweDFmLCAweDY0LCAweGI5LAorCTB4NWUsIDB4YmYsIDB4MmUsIDB4NGYsIDB4YjEsIDB4ZWEsIDB4YTAsIDB4MTcsCisJMHhlNiwgMHg3YywgMHhmOSwgMHgyZiwgMHgxZSwgMHhkOCwgMHg1OCwgMHhkZSwKKwkweGE3LCAweGYwLCAweDQ2LCAweDUyLCAweDk1LCAweGRmLCAweGE0LCAweDk2LAorCTB4ZDAsIDB4YzQsIDB4OTcsIDB4MmIsIDB4OTUsIDB4Y2QsIDB4NWUsIDB4NDAsCisJMHgyMywgMHg1YywgMHgxMCwgMHhlZSwgMHhiYSwgMHg3MiwgMHg5YiwgMHhjZiwKKwkweDBiLCAweGU4LCAweDE4LCAweDNhLCAweDcwLCAweGQyLCAweDVlLCAweDA3LAorCTB4NjgsIDB4OTMsIDB4ZWYsIDB4NGEsIDB4NWIsIDB4OGQsIDB4NzIsIDB4NDEsCisJMHg0ZSwgMHhlYSwgMHgzMywgMHg2YSwgMHgwYSwgMHg1ZSwgMHhmYiwgMHgwMiwKKwkweDNmLCAweGQ0LCAweGVkLCAweDViLCAweGUwLCAweDQyLCAweDg0LCAweGQ0LAorCTB4YWEsIDB4ODUsIDB4ZGMsIDB4NWIsIDB4NjcsIDB4ZWUsIDB4NzEsIDB4NjcsCisJMHhiYSwgMHg4ZSwgMHhkMiwgMHhiZSwgMHg2MSwgMHhkZiwgMHg1YSwgMHgyNiwKKwkweGI5LCAweGYwLCAweDc3LCAweDgxLCAweDUzLCAweDI0LCAweDE2LCAweGNiLAorCTB4OGMsIDB4YjgsIDB4MDYsIDB4NmUsIDB4NjgsIDB4ZGEsIDB4YzgsIDB4MmQsCisJMHgxNywgMHg1NCwgMHhkYiwgMHg0NiwgMHhjYiwgMHhmZCwgMHgxZiwgMHgzZCwKKwkweDk0LCAweDgxLCAweDA5LCAweDRiLCAweGZhLCAweGIxLCAweDQ2LCAweGQ5LAorCTB4MTEsIDB4YTMsIDB4YjcsIDB4MzEsIDB4OWMsIDB4ZDIsIDB4MzgsIDB4ZDYsCisJMHhiYSwgMHgzZCwgMHhhMywgMHg3NCwgMHhkOCwgMHhmMSwgMHgyNCwgMHhlOCwKKwkweDljLCAweGNiLCAweDFkLCAweGY5LCAweDRhLCAweGY3LCAweGM4LCAweDRiLAorCTB4ZmUsIDB4OTcsIDB4N2MsIDB4YTEsIDB4MDIsIDB4ZWIsIDB4NDAsIDB4YzMsCisJMHg4OSwgMHg3MSwgMHgwMSwgMHhjZCwgMHgzMywgMHgyYSwgMHhjMiwgMHg4MiwKKwkweGNlLCAweDYyLCAweDhkLCAweDUzLCAweDdjLCAweGRmLCAweGNlLCAweGQ3LAorCTB4ZjUsIDB4YTgsIDB4NGYsIDB4ZjIsIDB4ZjIsIDB4MmUsIDB4YzEsIDB4ZWIsCisJMHg5NywgMHg5OSwgMHgzNywgMHgzYywgMHg1MywgMHhhNiwgMHhiNCwgMHg0NiwKKwkweDA1LCAweDY0LCAweDkyLCAweDg3LCAweDA4LCAweDNjLCAweDIzLCAweDRiLAorCTB4OWQsIDB4NjcsIDB4MTgsIDB4ZjksIDB4ZTIsIDB4MGIsIDB4MWMsIDB4MzksCisJMHhkMywgMHg4NywgMHg3MCwgMHhjMCwgMHhiOSwgMHgxZSwgMHg1MiwgMHgwYSwKKwkweDBmLCAweDQ4LCAweGUyLCAweGU3LCAweDUxLCAweDcyLCAweDk0LCAweGY3LAorCTB4YTMsIDB4ZGMsIDB4ZTUsIDB4NjYsIDB4MzMsIDB4MzksIDB4NTQsIDB4MDYsCisJMHg1NSwgMHg5MywgMHgzMCwgMHhmOSwgMHg1ZSwgMHg3NiwgMHg4ZiwgMHhlMCwKKwkweDU5LCAweDRkLCAweDBkLCAweGE3LCAweGY1LCAweGJlLCAweGRiLCAweDIwLAorCTB4YWQsIDB4MGQsIDB4NzYsIDB4ODgsIDB4NWYsIDB4OWMsIDB4N2MsIDB4NzUsCisJMHgyZiwgMHgyYSwgMHgwYiwgMHg3OSwgMHg2ZSwgMHhkMywgMHhlMiwgMHg2NiwKKwkweGY1LCAweDRhLCAweDJkLCAweDg3LCAweDg3LCAweDQ5LCAweDg0LCAweDE3LAorCTB4YTIsIDB4NjIsIDB4NGMsIDB4YmIsIDB4ZTQsIDB4NmUsIDB4OTgsIDB4MTAsCisJMHhjOSwgMHhmYiwgMHg4YSwgMHgwNCwgMHg2OCwgMHg4ZCwgMHgyMiwgMHg2NiwKKwkweGFkLCAweGVhLCAweDJhLCAweGM5LCAweDk3LCAweDJkLCAweDNjLCAweGJjLAorCTB4ZDAsIDB4NzcsIDB4NWYsIDB4ZTYsIDB4YjgsIDB4N2YsIDB4ZTYsIDB4ZjYsCisJMHgzOSwgMHhiZiwgMHg1NiwgMHgwZSwgMHgyNiwgMHg2ZCwgMHhjNSwgMHgzZSwKKwkweDUzLCAweDE5LCAweGQ2LCAweGI0LCAweDU3LCAweDM2LCAweGEzLCAweGM2LAorCTB4ZDMsIDB4M2QsIDB4NjYsIDB4NzksIDB4MzAsIDB4NWMsIDB4MTQsIDB4MGMsCisJMHgwZiwgMHgzZSwgMHg5NiwgMHhhZSwgMHg5MCwgMHg5NywgMHhhYiwgMHgwZCwKKwkweDlmLCAweGMzLCAweGU3LCAweDY2LCAweDNlLCAweGUwLCAweDMxLCAweDQzLAorCTB4NGIsIDB4MDEsIDB4YjMsIDB4MGUsIDB4OWUsIDB4OGMsIDB4ODIsIDB4NGEsCisJMHg4YywgMHhjNywgMHg3OSwgMHg4NSwgMHhkZiwgMHg3NSwgMHgwZCwgMHhiNCwKKwkweDJiLCAweDAzLCAweDE0LCAweGVmLCAweDcyLCAweDU4LCAweGZkLCAweDY0LAorCTB4YzgsIDB4ZTMsIDB4MGQsIDB4OWEsIDB4MTQsIDB4NmYsIDB4NzYsIDB4ZjksCisJMHg0NiwgMHhkMSwgMHhkMiwgMHg4MSwgMHhiMywgMHgxNiwgMHg2ZSwgMHhjNywKKwkweDc2LCAweDgyLCAweGNlLCAweGY0LCAweGVlLCAweDMzLCAweDAwLCAweGU2LAorCTB4NzcsIDB4YzQsIDB4YWQsIDB4NGYsIDB4MDYsIDB4YTcsIDB4NDgsIDB4ODAsCisJMHg5ZSwgMHgyMSwgMHg2NiwgMHhjYSwgMHg3NSwgMHg2OSwgMHg1NywgMHhjYiwKKwkweGYwLCAweDY3LCAweDZhLCAweGFhLCAweDhmLCAweDg4LCAweDE0LCAweGJkLAorCTB4NjUsIDB4NjIsIDB4ZTIsIDB4YWQsIDB4Y2MsIDB4MjIsIDB4ODgsIDB4N2IsCisJMHg5NCwgMHhiZCwgMHgwZSwgMHhjZCwgMHhiNiwgMHg2OSwgMHhhMiwgMHhjYiwKKwkweDdkLCAweDU3LCAweDVjLCAweGI0LCAweDkyLCAweDgwLCAweDEzLCAweDk5LAorCTB4ODQsIDB4ZjMsIDB4NzksIDB4MGEsIDB4MmQsIDB4NzAsIDB4YTQsIDB4ZTAsCisJMHhkZSwgMHhjNiwgMHgzMiwgMHhiMCwgMHg4YSwgMHg2MiwgMHhiNSwgMHhjZiwKKwkweGZhLCAweDVlLCAweDVhLCAweDkyLCAweDMyLCAweDdkLCAweDM0LCAweDA3LAorCTB4YjUsIDB4NTIsIDB4M2EsIDB4YjUsIDB4N2QsIDB4MGYsIDB4YTEsIDB4YmEsCisJMHg1NiwgMHhkMCwgMHgwNywgMHg3NiwgMHgxMSwgMHhmMiwgMHhjMywgMHgzMywKKwkweDlkLCAweGJkLCAweDEyLCAweDM1LCAweDVlLCAweGY3LCAweDA1LCAweDg4LAorCTB4NzYsIDB4OTQsIDB4YTYsIDB4YmYsIDB4ZWQsIDB4YjgsIDB4YTQsIDB4YTIsCisJMHgwYywgMHhiZSwgMHgwZiwgMHg2YSwgMHhhZiwgMHhmMywgMHgxYiwgMHgzMywKKwkweDRhLCAweGI3LCAweDY4LCAweDNmLCAweGJlLCAweDk1LCAweDEzLCAweDk3LAorCTB4MGYsIDB4MTUsIDB4MTcsIDB4MWIsIDB4MjMsIDB4YWEsIDB4MDgsIDB4NzgsCisJMHhhNiwgMHg1YiwgMHgwOCwgMHhhMiwgMHg5ZCwgMHgwMywgMHhhOCwgMHhhNywKKwkweDM5LCAweGRjLCAweGJjLCAweDlhLCAweDg1LCAweGY1LCAweGU1LCAweDU1LAorCTB4NTksIDB4M2MsIDB4ZWYsIDB4ZjksIDB4M2YsIDB4MjIsIDB4OGUsIDB4ZjgsCisJMHhkOCwgMHgzZSwgMHgwMiwgMHgwYiwgMHhkOCwgMHg3OCwgMHg0YiwgMHgxNSwKKwkweDdmLCAweGFhLCAweDJjLCAweGZmLCAweGJlLCAweDc3LCAweDMzLCAweGM3LAorCTB4NmEsIDB4MTIsIDB4YWEsIDB4YTQsIDB4YmUsIDB4YzAsIDB4M2IsIDB4Y2IsCisJMHgxMywgMHg5ZCwgMHg5YywgMHg1YSwgMHg5ZiwgMHg4YSwgMHg1NywgMHgzNiwKKwkweDRmLCAweDAyLCAweDVhLCAweGY4LCAweDFkLCAweDk3LCAweDc3LCAweDQzLAorCTB4YzgsIDB4YTUsIDB4YjcsIDB4OWIsIDB4MTAsIDB4OTgsIDB4ZmQsIDB4NTgsCisJMHhiZiwgMHg0MiwgMHhmNiwgMHhiZiwgMHhmZiwgMHg2YywgMHg0MCwgMHgxOCwKKwkweDE4LCAweGRmLCAweGFjLCAweDU3LCAweDcxLCAweGVhLCAweGNjLCAweDhlLAorCTB4ZmQsIDB4ZmUsIDB4MTAsIDB4ZmIsIDB4YjksIDB4ZmUsIDB4YmMsIDB4OWEsCisJMHg5YywgMHgyNywgMHhlNCwgMHgxMCwgMHgxNSwgMHg5NCwgMHg0MSwgMHhhMSwKKwkweGNjLCAweGY2LCAweDI1LCAweDQ5LCAweDRmLCAweDk2LCAweGMxLCAweDhjLAorCTB4OWUsIDB4M2UsIDB4MTgsIDB4MjksIDB4NDksIDB4OTIsIDB4ZTcsIDB4ZmUsCisJMHgyMiwgMHhmZiwgMHhlZCwgMHgwMiwgMHgxNiwgMHg5MCwgMHhlZiwgMHhhYywKKwkweGVjLCAweDk1LCAweDFkLCAweDViLCAweDk0LCAweDljLCAweGY2LCAweDdjLAorCTB4MWIsIDB4NWEsIDB4OWQsIDB4YjAsIDB4OWIsIDB4MDUsIDB4MzYsIDB4YmYsCisJMHhlZiwgMHhlYywgMHg2MywgMHgzNSwgMHg0MCwgMHgyNCwgMHg0NSwgMHg0MCwKKwkweDMwLCAweDFhLCAweDliLCAweDkwLCAweGMzLCAweGMyLCAweGY3LCAweDM3LAorCTB4ZmIsIDB4MDgsIDB4OGUsIDB4NDgsIDB4MTksIDB4NDgsIDB4ZWQsIDB4YTgsCisJMHhhOCwgMHgwNCwgMHg2ZiwgMHhkMCwgMHgzMywgMHhlOSwgMHhiOCwgMHg4ZCwKKwkweGU3LCAweDFlLCAweDVjLCAweDQ3LCAweDc0LCAweGMwLCAweDY2LCAweDMwLAorCTB4NGUsIDB4YTcsIDB4ODYsIDB4NzMsIDB4ZjEsIDB4ZTUsIDB4NzgsIDB4YTYsCisJMHhlMCwgMHhjMSwgMHhkYSwgMHgxMywgMHg3MiwgMHgwNywgMHg4NSwgMHgzNCwKKwkweDYzLCAweDk1LCAweDQ5LCAweDMwLCAweDRiLCAweDlkLCAweDAzLCAweGYxLAorCTB4N2EsIDB4NmIsIDB4OTEsIDB4YTIsIDB4ODUsIDB4NDEsIDB4ZjksIDB4NGEsCisJMHhkNiwgMHhmZiwgMHhmZiwgMHg4NiwgMHhmNywgMHhmMCwgMHhjZSwgMHhiOSwKKwkweDA3LCAweGYxLCAweDg4LCAweDA0LCAweDMzLCAweGFhLCAweGViLCAweDU0LAorCTB4YjIsIDB4MWMsIDB4OGUsIDB4MmUsIDB4N2IsIDB4MDQsIDB4YTgsIDB4Y2MsCisJMHgyYywgMHg3YSwgMHhiMywgMHhhZCwgMHgxYSwgMHg4OSwgMHgzOCwgMHg4OSwKKwkweGQ3LCAweDExLCAweDNhLCAweDhjLCAweGNmLCAweGUzLCAweGM1LCAweGJhLAorCTB4YjAsIDB4Y2MsIDB4YzQsIDB4ZTMsIDB4MzMsIDB4ZjMsIDB4MTgsIDB4YmEsCisJMHhlYywgMHg1NiwgMHhkOSwgMHgxYywgMHg0MCwgMHg3MCwgMHgwZCwgMHg0ZSwKKwkweDk3LCAweDAxLCAweDIzLCAweGYzLCAweDVhLCAweGRjLCAweGJmLCAweDY4LAorCTB4OTMsIDB4YzIsIDB4MWQsIDB4OGEsIDB4OTYsIDB4YjcsIDB4YWMsIDB4MTgsCisJMHg2ZiwgMHhmNywgMHg4NCwgMHg3MSwgMHgwZCwgMHgzZCwgMHhmOCwgMHhiYSwKKwkweGRmLCAweGI2LCAweDg5LCAweDFkLCAweDc4LCAweDE5LCAweGYyLCAweDU5LAorCTB4ZTksIDB4MTUsIDB4NTUsIDB4MjksIDB4NzMsIDB4NTAsIDB4NTksIDB4MTQsCisJMHgwMiwgMHgyMSwgMHgxNiwgMHg4ZiwgMHgwZiwgMHhkZiwgMHhhNSwgMHhmMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3JjX3Rlc3QgeworCXVpbnQzMl90IGNyYzsJCS8qIHJhbmRvbSBzdGFydGluZyBjcmMgKi8KKwl1aW50MzJfdCBzdGFydDsJCS8qIHJhbmRvbSBvZmZzZXQgaW4gYnVmICovCisJdWludDMyX3QgbGVuZ3RoOwkvKiByYW5kb20gbGVuZ3RoIG9mIHRlc3QgKi8KKwl1aW50MzJfdCBjcmNfbGU7CS8qIGV4cGVjdGVkIGNyYzMyX2xlIHJlc3VsdCAqLworCXVpbnQzMl90IGNyY19iZTsJLyogZXhwZWN0ZWQgY3JjMzJfYmUgcmVzdWx0ICovCit9IHRlc3RbXSA9IHsKKwl7MHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwMTAwMCwgMHgxMzkzNGJlZiwgMHgxNGYzYjc1Zn0sCisJezB4ZmU3MzI4ZWEsIDB4MDAwMDA3NjMsIDB4MDAwMDA3MTcsIDB4ZWQyYzBkNzAsIDB4NTc1MzEyMTR9LAorCXsweDRjNDA2ODRlLCAweDAwMDAwNzIxLCAweDAwMDAwMTFlLCAweGQ3ZjQ2Y2NjLCAweGVkZjEyZWMzfSwKKwl7MHg2YjQ4N2Y5MCwgMHgwMDAwMDI2NCwgMHgwMDAwMDdiYywgMHg3NTllOTkzOSwgMHg5YWY4ZTM4N30sCisJezB4OWY1ODEwZGIsIDB4MDAwMDBhZmEsIDB4MDAwMDAyNTUsIDB4MjY4NTE5N2YsIDB4NzE2ZGU2ZWR9LAorCXsweGIxNWM0NzU1LCAweDAwMDAwZDViLCAweDAwMDAwMmE0LCAweGQ4ZmFkY2I1LCAweGZjMzRhZTNmfSwKKwl7MHgwNjUxODI1MywgMHgwMDAwMGZmYiwgMHgwMDAwMDAwNCwgMHhhYmVlMjQzMywgMHhmYTMwYWM5ZX0sCisJezB4ZDllNzFjNTUsIDB4MDAwMDBhMmEsIDB4MDAwMDAyNTksIDB4OTY2ODJhZjIsIDB4ZTU5MDdlYTN9LAorCXsweDBjMWFlODQzLCAweDAwMDAwY2U0LCAweDAwMDAwMzFiLCAweDdiNjM3YzQzLCAweGU3ZjcxYjA0fSwKKwl7MHhlYzNjZDUxNywgMHgwMDAwMDJmZiwgMHgwMDAwMDU2NiwgMHg1ZDcxOWE3NywgMHhlZDE2ZTA0NX0sCisJezB4Nzc4MjhlOTUsIDB4MDAwMDA2N2YsIDB4MDAwMDAzOGYsIDB4NDNlZTViNmMsIDB4MzU5OTk5Mjd9LAorCXsweGVjODdiNGUzLCAweDAwMDAwZDFjLCAweDAwMDAwMmUzLCAweDJkZGQyZWVlLCAweDk0NTJkM2Y4fSwKKwl7MHg0MTIxNThiYiwgMHgwMDAwMGVlZSwgMHgwMDAwMDExMSwgMHg2N2IzOGJhMiwgMHgxNzc5NzZkMH0sCisJezB4MmU1MmRlM2UsIDB4MDAwMDBjNGEsIDB4MDAwMDAzYjUsIDB4YmNjNWQ2MWQsIDB4ZjYwZmVlNzF9LAorCXsweDZkZGFhZThiLCAweDAwMDAwZDk5LCAweDAwMDAwMjY2LCAweDhiNTM1NTQ0LCAweDFkYWI4NTk2fSwKKwl7MHgwNDliNmNiMSwgMHgwMDAwMDljNSwgMHgwMDAwMDBiMCwgMHhmYzIyY2FiYywgMHg0N2ViYzk1NH0sCisJezB4NzdkNGI5NTQsIDB4MDAwMDAyOGEsIDB4MDAwMDA3ZmEsIDB4NzFkMDA5MjMsIDB4OTA1NTg1ZWZ9LAorCXsweDVlMTkyMzU1LCAweDAwMDAwYWMxLCAweDAwMDAwMWZhLCAweGI5NjZiODFhLCAweDMzYzEyOTAzfSwKKwl7MHg3ZDgwYjcxZCwgMHgwMDAwMDIxMywgMHgwMDAwMDFlMCwgMHgyYmJhMzcxYSwgMHg1ZjRiZDhkOX0sCisJezB4MDFmNmYxZTQsIDB4MDAwMDAxZDYsIDB4MDAwMDAzOTUsIDB4YjdlOGE2NDcsIDB4MmE3OTQzYTF9LAorCXsweDFkZmFiYjEzLCAweDAwMDAwZTE0LCAweDAwMDAwMWViLCAweDUzOTE3ZmJhLCAweDhkZWUxZTVkfSwKKwl7MHhiMDBhNDQ0OSwgMHgwMDAwMGJmNiwgMHgwMDAwMDQwOSwgMHhlZGVjYjU3NywgMHg2MjhlMDg3ZH0sCisJezB4N2VjZDM5ODEsIDB4MDAwMDA4M2YsIDB4MDAwMDAxNmIsIDB4ZWZlZjYyYjksIDB4ZGE0Zjk0ZTZ9LAorCXsweGY4ZjMzMGQyLCAweDAwMDAwNGJlLCAweDAwMDAwNzU3LCAweDkzNTdjOWYzLCAweDhlMmQ1YzJmfSwKKwl7MHgwM2MzOGFmMiwgMHgwMDAwMGQyMywgMHgwMDAwMDJkYywgMHgzNjBmYThjMCwgMHg2Mjk0YzBkNn0sCisJezB4Njg3YmI3OWIsIDB4MDAwMDBmM2QsIDB4MDAwMDAwYzIsIDB4NDQ4ZDNiZTIsIDB4MDhmNDhmM2F9LAorCXsweDY3MTBmNTUwLCAweDAwMDAwOWU5LCAweDAwMDAwNjAzLCAweGRiZmQxOTk4LCAweGM5NTBhYzI5fSwKKwl7MHg4NzMxNzFkMSwgMHgwMDAwMDc4NywgMHgwMDAwMDRkNSwgMHhhYjdmMWI2MiwgMHhlNjY4OTZhYn0sCisJezB4MzczYjEzMTQsIDB4MDAwMDBmMGYsIDB4MDAwMDAwZjAsIDB4MTg0MDk4YWIsIDB4NDAzOGU2NzR9LAorCXsweDkwZmFkOWNkLCAweDAwMDAwZWFkLCAweDAwMDAwMTUyLCAweDIzY2U1MmZmLCAweDllZmYzOTc0fSwKKwl7MHgxOTY3NmZlNywgMHgwMDAwMDA3ZCwgMHgwMDAwMDcwZCwgMHhmOGE3NmYxZSwgMHhmYmM1YzhhOX0sCisJezB4ODlmYWNkNDUsIDB4MDAwMDA1ZjMsIDB4MDAwMDA0NzMsIDB4NDMzMWEwMDYsIDB4YjhmMGYwY2N9LAorCXsweDZmMTczNzQ3LCAweDAwMDAwZmMzLCAweDAwMDAwMDNjLCAweGIwMTJmMDhlLCAweDUxMjZlMzc4fSwKKwl7MHg0YjQ0YTEwNiwgMHgwMDAwMDc1YSwgMHgwMDAwMDA4YiwgMHhmNmY3YWMzOCwgMHhmOWIxNzgxYn0sCisJezB4YjYyMGFkMDYsIDB4MDAwMDA3NzQsIDB4MDAwMDAxN2UsIDB4ZDM0NTU4ZTYsIDB4YjE3NWVkZDN9LAorCXsweDk3NmYyMWU5LCAweDAwMDAwOGQ3LCAweDAwMDAwMzRhLCAweGU1MzNhYTNhLCAweDFlNDM2N2I5fSwKKwl7MHg2ODc2MjhjMCwgMHgwMDAwMDZjNSwgMHgwMDAwMDYxYiwgMHgzYTg0MGIxNSwgMHhmYjU5ODlhMH0sCisJezB4ZTI0YWMxMDgsIDB4MDAwMDBjZDAsIDB4MDAwMDAzMmYsIDB4NTEwMTBhZTgsIDB4Y2RkOGYxODJ9LAorCXsweDM2MWM0NGEzLCAweDAwMDAwMzA0LCAweDAwMDAwNzE5LCAweGZkN2JkNDgxLCAweDEyZGU1NDBmfSwKKwl7MHhkOTNmZjk1ZSwgMHgwMDAwMGRiNywgMHgwMDAwMDA4ZSwgMHhjZmJiYzMwNCwgMHg0MmVlY2Q1YX0sCisJezB4ZWQ3NTJkMTIsIDB4MDAwMDA4ODMsIDB4MDAwMDAwOTEsIDB4NjVhNmM4NjgsIDB4OWViZmE1Nzh9LAorCXsweGI0ZmY0YjU0LCAweDAwMDAwM2QzLCAweDAwMDAwMWMxLCAweGY4MjU5N2U3LCAweGE4YWQyYjE5fSwKKwl7MHgxMTFiNTIwZiwgMHgwMDAwMDcwOCwgMHgwMDAwMDBlYiwgMHhjM2UxMDlmMywgMHgzMjNhY2UxN30sCisJezB4NjJjODA2ZjIsIDB4MDAwMDBiYTMsIDB4MDAwMDA0NWMsIDB4ODc0ZDNhNzIsIDB4YWYxYTEzNjB9LAorCXsweDQwZDk3NDcwLCAweDAwMDAwNWUxLCAweDAwMDAwNThkLCAweDg3YTk2ODRmLCAweDUyNDI0NGE4fSwKKwl7MHg0MzEyMTc5YywgMHgwMDAwMDA1NiwgMHgwMDAwMDcwZSwgMHg4MDlhMDBmNSwgMHhmOWU5NDBiMH0sCisJezB4MTNkNWY4NGMsIDB4MDAwMDBhMmQsIDB4MDAwMDAxMDQsIDB4ZjNkMjc1NzgsIDB4NWQzMzM0MWN9LAorCXsweDFmMzAyY2IyLCAweDAwMDAwMTUxLCAweDAwMDAwMDE0LCAweDFlMTYyNjkzLCAweDUzYzNjZmMzfSwKKwl7MHhlNDkxZGIyNCwgMHgwMDAwMDYwMCwgMHgwMDAwMDZmNiwgMHg3ZmYwOTYxNSwgMHhhMzAwZWNmN30sCisJezB4ZjlhOTgwNjksIDB4MDAwMDAyYmEsIDB4MDAwMDAyYWQsIDB4MDFhZjczODcsIDB4MzFjMDkxMWV9LAorCXsweGU5YzQ3N2FkLCAweDAwMDAwMTVmLCAweDAwMDAwNzc4LCAweDZmYWNmOWEwLCAweDE5OTNiNjg4fSwKKwl7MHgzNTNmMzJiMiwgMHgwMDAwMDg3YywgMHgwMDAwMDc4MywgMHg2Y2M5NjRlYSwgMHg0MThkYjU2MX0sCisJezB4NzhlMWIyNGYsIDB4MDAwMDA2NTAsIDB4MDAwMDA2YTgsIDB4YjNiYjdjMjcsIDB4ZjJhYWQwMDZ9LAorCXsweDYxYWE0MDBlLCAweDAwMDAwMDQ5LCAweDAwMDAwMjU0LCAweGI4Y2QxNjgxLCAweDc5MTUwYjE1fSwKKwl7MHhiODRiMTBiMCwgMHgwMDAwMGY3MywgMHgwMDAwMDA4YywgMHg0MDZhNjQ1MCwgMHgwYzcwNTIyMn0sCisJezB4OWZhOTljOWMsIDB4MDAwMDBhN2MsIDB4MDAwMDA0ZDcsIDB4ZmIzZDIxYjQsIDB4ZTRlNzg5ZGZ9LAorCXsweDNmYzllYmUzLCAweDAwMDAwY2Q5LCAweDAwMDAwMGQ2LCAweDQzODAzZjljLCAweDVhMTUyYmU1fSwKKwl7MHg1Mjk4NzljZCwgMHgwMDAwMDJmMiwgMHgwMDAwMDU5NSwgMHg3OGI0YzZhNiwgMHhmNzIzNmVjNH0sCisJezB4M2E5MzMwMTksIDB4MDAwMDA1MTYsIDB4MDAwMDAyNjYsIDB4ZGNiNDU0MzYsIDB4MmM3OTM1ZjV9LAorCXsweDg4N2I0OTc3LCAweDAwMDAwMjI3LCAweDAwMDAwMzhkLCAweGM1ZjdjM2Q5LCAweDBkNmQ3ZGY2fSwKKwl7MHg3NzA3NDVkZSwgMHgwMDAwMDhjNiwgMHgwMDAwMDczOSwgMHhmNjkxNDVlOCwgMHg0N2Q1ZWZjOX0sCisJezB4MjhiZTNiNDcsIDB4MDAwMDBjNDYsIDB4MDAwMDAzMmIsIDB4NzY0YzAyOGYsIDB4MWViNzBkNjR9LAorCXsweDUwMTNhMDUwLCAweDAwMDAwY2Y2LCAweDAwMDAwMzA5LCAweGVhOGZlMTY0LCAweDE4NmFmZmE0fSwKKwl7MHgyZWM0YzliYSwgMHgwMDAwMDZlOCwgMHgwMDAwMDc4ZCwgMHhhMzU1NTdhOSwgMHhiNDFmNDllY30sCisJezB4YTlmOTUwYzksIDB4MDAwMDBkMzMsIDB4MDAwMDAyY2MsIDB4NDFlYTg2MTgsIDB4YWI4ZGZhZTN9LAorCXsweDViNTIwMjI5LCAweDAwMDAwN2IyLCAweDAwMDAwNDg0LCAweDQ0NTY5ZjFmLCAweDYwN2E4MDUyfSwKKwl7MHhkOGRjYmJmYywgMHgwMDAwMDAyZiwgMHgwMDAwMDQ4YywgMHhkYjg4YWI4YiwgMHhmMWM0MTFmMX0sCisJezB4MjU1Mjk3OTIsIDB4MDAwMDBkMWQsIDB4MDAwMDAyZTIsIDB4MjBjZGE0MDQsIDB4MzI2ODNhMmR9LAorCXsweDlmM2Y2ZDcxLCAweDAwMDAwMjM4LCAweDAwMDAwNzlhLCAweDA3MjA0NDNlLCAweDRiOGJhMmZmfSwKKwl7MHg2NDEyMTIxNSwgMHgwMDAwMDdmZiwgMHgwMDAwMDM4ZiwgMHg2YWFjZmYyYywgMHgzYjg0MjMzYn0sCisJezB4ZmI2Y2RkZTAsIDB4MDAwMDBlZjgsIDB4MDAwMDAxMDcsIDB4YmQ0M2EwZjEsIDB4OTI2NjI0ZDB9LAorCXsweDIyMWM5ZDZmLCAweDAwMDAwN2I2LCAweDAwMDAwMTRmLCAweGI2N2Y4MzRiLCAweDJiZGVkZGE0fSwKKwl7MHgwMzBlMWRlNCwgMHgwMDAwMDgzNiwgMHgwMDAwMDRiNCwgMHgwZDY3ZDI2YSwgMHg3NWE3M2I3M30sCisJezB4YjU2ZmE2Y2YsIDB4MDAwMDBjMDcsIDB4MDAwMDAzZjgsIDB4NjA2MDFhYzEsIDB4MTBhNDNmMzV9LAorCXsweGI1NWM4OWY1LCAweDAwMDAwOThlLCAweDAwMDAwMWQ0LCAweDI0MDBlZmJlLCAweDAwNmUyOGVifSwKKwl7MHg1ZTkwYjZkNSwgMHgwMDAwMDcwYiwgMHgwMDAwMDNlYSwgMHgzYmI1ZDZlYSwgMHhiMTc1ZmE2Yn0sCisJezB4MmE3MDQ1YWUsIDB4MDAwMDA5NjEsIDB4MDAwMDA2MzMsIDB4ZmNhODllNGIsIDB4OTYyY2Q2ZDJ9LAorCXsweDhiMzc0ZWE5LCAweDAwMDAwNmJhLCAweDAwMDAwNzgwLCAweGJjZTAzNmVkLCAweDRkYzgyNzlifSwKKwl7MHg4YmQ5MGJjOSwgMHgwMDAwMDU2MiwgMHgwMDAwMDM2OSwgMHhjYjI2YTI0YiwgMHg1MGRlZTc0M30sCisJezB4NWIxYjE3NjIsIDB4MDAwMDAwZmQsIDB4MDAwMDA1MWEsIDB4MzNjZGRhMDcsIDB4ZWU3NWZmN2J9LAorCXsweGE0MTUzNTU1LCAweDAwMDAwNThmLCAweDAwMDAwNWM3LCAweGJlNTBlZWNhLCAweGU3M2ZmZmNjfSwKKwl7MHgwYmUxZjkzMSwgMHgwMDAwMDY1MSwgMHgwMDAwMDY3MiwgMHg5NWEyNTc1MywgMHg0YWQ2MjcwZn0sCisJezB4YjdlNzg2MTgsIDB4MDAwMDBhN2YsIDB4MDAwMDAyYmIsIDB4ZTA2YmNjMWMsIDB4MWEzNWVlNTl9LAorCXsweDRhOWJjNDFiLCAweDAwMDAwZTUxLCAweDAwMDAwMWFlLCAweDcwOWU4ZDJjLCAweDc1MDgwY2E4fSwKKwl7MHhmYzM1OWQxMywgMHgwMDAwMDQ0MCwgMHgwMDAwMDJmOCwgMHgwYTU4NDUxZiwgMHg2ZmEzY2ZiZn0sCisJezB4NWFhNDg2MTksIDB4MDAwMDA2ZDEsIDB4MDAwMDAyODQsIDB4OTI4ZWFkODMsIDB4YmQ2MDBlZmN9LAorCXsweGE2MDlhZmE4LCAweDAwMDAwNTNlLCAweDAwMDAwMjcyLCAweGIwNDhjMTQxLCAweDE4NGY4MGJifSwKKwl7MHgzZjEwOGFmYiwgMHgwMDAwMDk0OSwgMHgwMDAwMDE1MCwgMHg5YTZiYjViYywgMHgwZWEwMmJlMX0sCisJezB4NzliZWMyZDMsIDB4MDAwMDA4ZWQsIDB4MDAwMDA3MTIsIDB4MzI2OTJkNTcsIDB4MmViMTMyODl9LAorCXsweDk0MjllMDY3LCAweDAwMDAwYmMzLCAweDAwMDAwNDNjLCAweDUyOTVjZWZmLCAweDhhOTAxNGE3fSwKKwl7MHhhZTU4Yjk2YSwgMHgwMDAwMDgyZCwgMHgwMDAwMDdkMiwgMHhjMmE2ODFiYSwgMHg2YWY5NDA4OX0sCisJezB4OTVkZjI0YmUsIDB4MDAwMDA5ODUsIDB4MDAwMDA0YzEsIDB4M2EyODc3NjUsIDB4Mzc5ZmNiNDJ9LAorCXsweDVlOTQ5NzZmLCAweDAwMDAwNTk2LCAweDAwMDAwNGVkLCAweGZmMDBjNDg5LCAweDk5MWZjMWY1fSwKKwl7MHhmNWU1ZjFkZSwgMHgwMDAwMGQzMSwgMHgwMDAwMDJjZSwgMHgzNWYyOGU5MSwgMHg1NDNkZWYxYX0sCisJezB4YTJjMjE5Y2YsIDB4MDAwMDBhM2MsIDB4MDAwMDAzNzQsIDB4NzA3ZDIxZWIsIDB4YTZkMjhiYzF9LAorCXsweGYyMWI2Y2ViLCAweDAwMDAwOTE5LCAweDAwMDAwMTM1LCAweDA4NDdmYjhiLCAweDIyNDQ2OGMyfSwKKwl7MHhhYTk4ODcyOCwgMHgwMDAwMDc4NywgMHgwMDAwMDc3MSwgMHg4ODVhZWFhNCwgMHg4MTRkYjAwYn0sCisJezB4YWE1ZGZhYWMsIDB4MDAwMDAzZTUsIDB4MDAwMDA1MWIsIDB4NTJjNDhhYjcsIDB4NzI1YmVmOGF9LAorCXsweDBhMDUzOTY4LCAweDAwMDAwZDJhLCAweDAwMDAwMmQ1LCAweDdhOTAyNTZkLCAweGM1M2I5NDAyfSwKKwl7MHgxNDIxZGMyMCwgMHgwMDAwMGVlZiwgMHgwMDAwMDExMCwgMHg5N2Q2ZGEyNCwgMHgxMDg0NjkzNX0sCisJezB4YjQ3YzIxNjYsIDB4MDAwMDBhNmEsIDB4MDAwMDAyMDksIDB4Y2ZkNmNjNTIsIDB4NDZlMjc5N2V9LAorCXsweDc3ZGQxOTU1LCAweDAwMDAwMGRlLCAweDAwMDAwMjY2LCAweGJhNzRiY2FhLCAweDRmYTNmZTljfSwKKwl7MHg2OGEwM2NjMiwgMHgwMDAwMDgyZiwgMHgwMDAwMDdiMCwgMHg3NTJiZDVkOCwgMHg0Zjc2MGM2M30sCisJezB4MDIyNmIwYTMsIDB4MDAwMDBhNWYsIDB4MDAwMDA1YTAsIDB4ODJkZTQ5NzAsIDB4OGVlMTMxMGV9LAorCXsweDYzN2JmM2IxLCAweDAwMDAwZDkzLCAweDAwMDAwMjZjLCAweDVjNzExNWNiLCAweDlmNmEwY2VkfSwKKwl7MHgzYjEyMGVkZiwgMHgwMDAwMGMxMywgMHgwMDAwMDNlYywgMHg4MGQ3ZDIwZiwgMHgyNDE2NTdkNX0sCisJezB4ZTI0NTY3ODAsIDB4MDAwMDAyZWIsIDB4MDAwMDA2NDEsIDB4YzBhNWQyODksIDB4NzRkZjk2YjR9LAorCXsweDliMmU3MTI1LCAweDAwMDAwYzBjLCAweDAwMDAwM2YzLCAweGNjMTVmNTdlLCAweDAzZTI5MGJmfSwKKwl7MHgxNTMwMzNlZiwgMHgwMDAwMDc4NywgMHgwMDAwMDZiNiwgMHgzY2RlNDQzYiwgMHg3YmYxZDEyMX0sCisJezB4MTg0NThiM2YsIDB4MDAwMDA2NmMsIDB4MDAwMDA1NjEsIDB4OWEyYmQ4YzYsIDB4OWQ1NjRiZWZ9LAorCXsweDRmZjlkNGI5LCAweDAwMDAwYzhmLCAweDAwMDAwMzNhLCAweGQwZWU2ZDZkLCAweGVlMDBhYTBifSwKKwl7MHhkZjg0YjVkOSwgMHgwMDAwMDgwMiwgMHgwMDAwMDI5YSwgMHhkYWIwZDc0YSwgMHhkMGNiNjNkY30sCisJezB4ODFlZTE1ZGYsIDB4MDAwMDAzY2UsIDB4MDAwMDA3MjUsIDB4OTk0MmUyZGUsIDB4ZTQ4ZmIyNmJ9LAorCXsweDVjNzY4ZTA0LCAweDAwMDAwYWZkLCAweDAwMDAwMTYwLCAweDM2MTEwODMxLCAweDhkYzc0NDgzfSwKKwl7MHhlNWUxODA5NCwgMHgwMDAwMGI0YiwgMHgwMDAwMDBhMCwgMHhmZmEzZTRhNywgMHhjMDE0NWUxYn0sCisJezB4ZWQ3MjYzYjYsIDB4MDAwMDBkMGQsIDB4MDAwMDAyZjIsIDB4YjAwMDZhMzUsIDB4NTQ2OGFlM2F9LAorCXsweDViZmRlN2Q3LCAweDAwMDAwNmZiLCAweDAwMDAwNTU0LCAweGE0MTkzYjc2LCAweGI3M2QzNGIyfSwKKwl7MHg2N2Y0YTc0MywgMHgwMDAwMGI4NSwgMHgwMDAwMDQ3YSwgMHhmMDVjOGQ4ZiwgMHg0Zjg0M2U0OX0sCisJezB4ZjEzYmRmMjIsIDB4MDAwMDBmZjcsIDB4MDAwMDAwMDgsIDB4ODE2MzUxZWIsIDB4NDFmNTM3ZjZ9LAorCXsweDA4ZWNjNjA4LCAweDAwMDAwZDVkLCAweDAwMDAwMDk4LCAweDkwNDkyNzcyLCAweGY1MTcyMjA0fSwKKwl7MHgyOTZmNTJiYSwgMHgwMDAwMDRmOSwgMHgwMDAwMDc4OCwgMHg1ZTVhNDg5NiwgMHhlMDFkNWI0Nn0sCisJezB4YmU0NjI0YzIsIDB4MDAwMDA0MjcsIDB4MDAwMDA0ZWYsIDB4Y2QyNjdiOTQsIDB4N2I5MDY5ZjR9LAorCXsweDkwNmY3YzdjLCAweDAwMDAwYTA1LCAweDAwMDAwMDNmLCAweDAzZmNmYzMzLCAweDdiNmZmNTYzfSwKKwl7MHg4ZjdiMzIzZSwgMHgwMDAwMDQ1OCwgMHgwMDAwMDRjNywgMHhjZDQ5NjljOCwgMHhkNGMyMmFkYX0sCisJezB4ODhkNjU5M2QsIDB4MDAwMDA1OTcsIDB4MDAwMDA1YjUsIDB4ZjE5OWNkM2IsIDB4NWMzZThjYTJ9LAorCXsweDk3OGE3NzY4LCAweDAwMDAwMjY4LCAweDAwMDAwMWQzLCAweGIyOGM5NWJkLCAweDQ5YTJjYzY3fSwKKwl7MHg4NTdhNjIxZSwgMHgwMDAwMDdhNywgMHgwMDAwMDNhOCwgMHhmNGJmODRhYiwgMHhkZTI2ZjM2OX0sCisJezB4YjBlMTIxZWYsIDB4MDAwMDA1YmUsIDB4MDAwMDA2NDQsIDB4Mjg3NDdjMTQsIDB4NjFkNGRjNmJ9LAorCXswLCAwLCAwLCAwLCAwfSwKK307CisKK3N0YXRpYyBpbnQgdGVzdF9jcmMzMmModm9pZCkKK3sKKwlzdHJ1Y3QgY3JjX3Rlc3QgKnQgPSB0ZXN0OworCWludCBmYWlsdXJlcyA9IDA7CisKKwl3aGlsZSAodC0+bGVuZ3RoKSB7CisJCXVpbnQzMl90IGJlLCBsZTsKKwkJbGUgPSBleHQyZnNfY3JjMzJjX2xlKHQtPmNyYywgdGVzdF9idWYgKyB0LT5zdGFydCwgdC0+bGVuZ3RoKTsKKwkJYmUgPSBleHQyZnNfY3JjMzJjX2JlKHQtPmNyYywgdGVzdF9idWYgKyB0LT5zdGFydCwgdC0+bGVuZ3RoKTsKKwkJaWYgKGxlICE9IHQtPmNyY19sZSkgeworCQkJcHJpbnRmKCJUZXN0ICVkIExFIGZhaWxzLCAleCAhPSAleFxuIiwKKwkJCSAgICAgICAoaW50KSAodCAtIHRlc3QpLCBsZSwgdC0+Y3JjX2xlKTsKKwkJCWZhaWx1cmVzKys7CisJCX0KKwkJaWYgKGJlICE9IHQtPmNyY19iZSkgeworCQkJcHJpbnRmKCJUZXN0ICVkIEJFIGZhaWxzLCAleCAhPSAleFxuIiwKKwkJCSAgICAgICAoaW50KSAodCAtIHRlc3QpLCBiZSwgdC0+Y3JjX2JlKTsKKwkJCWZhaWx1cmVzKys7CisJCX0KKwkJdCsrOworCX0KKworCXJldHVybiBmYWlsdXJlczsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdGVzdF9jcmMzMmMoKTsKKwlpZiAoIXJldCkKKwkJcHJpbnRmKCJObyBmYWlsdXJlcy5cbiIpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBVTklUVEVTVCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvY3JjMzJjX2RlZnMuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzMyY19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzZjJjMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NyYzMyY19kZWZzLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFRoaXMgaXMgdGhlIENSQzMyYyBwb2x5bm9taWFsLCBhcyBvdXRsaW5lZCBieSBDYXN0YWdub2xpLgorICogeF4zMit4XjI4K3heMjcreF4yNit4XjI1K3heMjMreF4yMit4XjIwK3heMTkreF4xOCt4XjE0K3heMTMreF4xMSt4XjEwK3heOSsKKyAqIHheOCt4XjYreF4wCisgKi8KKyNkZWZpbmUgQ1JDUE9MWV9MRSAweDgyRjYzQjc4CisjZGVmaW5lIENSQ1BPTFlfQkUgMHgxRURDNkY0MQorCisvKiBIb3cgbWFueSBiaXRzIGF0IGEgdGltZSB0byB1c2UuICBWYWxpZCB2YWx1ZXMgYXJlIDEsIDIsIDQsIDgsIDMyIGFuZCA2NC4gKi8KKy8qIEZvciBsZXNzIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSwgdXNlIDQgKi8KKyNpZm5kZWYgQ1JDX0xFX0JJVFMKKyMgZGVmaW5lIENSQ19MRV9CSVRTIDY0CisjZW5kaWYKKyNpZm5kZWYgQ1JDX0JFX0JJVFMKKyMgZGVmaW5lIENSQ19CRV9CSVRTIDY0CisjZW5kaWYKKworLyoKKyAqIExpdHRsZS1lbmRpYW4gQ1JDIGNvbXB1dGF0aW9uLiAgVXNlZCB3aXRoIHNlcmlhbCBiaXQgc3RyZWFtcyBzZW50CisgKiBsc2JpdC1maXJzdC4gIEJlIHN1cmUgdG8gdXNlIGNwdV90b19sZTMyKCkgdG8gYXBwZW5kIHRoZSBjb21wdXRlZCBDUkMuCisgKi8KKyNpZiBDUkNfTEVfQklUUyA+IDY0IHx8IENSQ19MRV9CSVRTIDwgMSB8fCBDUkNfTEVfQklUUyA9PSAxNiB8fCBcCisJQ1JDX0xFX0JJVFMgJiBDUkNfTEVfQklUUy0xCisjIGVycm9yICJDUkNfTEVfQklUUyBtdXN0IGJlIG9uZSBvZiB7MSwgMiwgNCwgOCwgMzIsIDY0fSIKKyNlbmRpZgorCisvKgorICogQmlnLWVuZGlhbiBDUkMgY29tcHV0YXRpb24uICBVc2VkIHdpdGggc2VyaWFsIGJpdCBzdHJlYW1zIHNlbnQKKyAqIG1zYml0LWZpcnN0LiAgQmUgc3VyZSB0byB1c2UgY3B1X3RvX2JlMzIoKSB0byBhcHBlbmQgdGhlIGNvbXB1dGVkIENSQy4KKyAqLworI2lmIENSQ19CRV9CSVRTID4gNjQgfHwgQ1JDX0JFX0JJVFMgPCAxIHx8IENSQ19CRV9CSVRTID09IDE2IHx8IFwKKwlDUkNfQkVfQklUUyAmIENSQ19CRV9CSVRTLTEKKyMgZXJyb3IgIkNSQ19CRV9CSVRTIG11c3QgYmUgb25lIG9mIHsxLCAyLCA0LCA4LCAzMiwgNjR9IgorI2VuZGlmCisKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiMzIoeCkgXAorCSgodWludDMyX3QpKCBcCisJCSgoKHVpbnQzMl90KSh4KSAmICh1aW50MzJfdCkweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKKwkJKCgodWludDMyX3QpKHgpICYgKHVpbnQzMl90KTB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorCQkoKCh1aW50MzJfdCkoeCkgJiAodWludDMyX3QpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCisJCSgoKHVpbnQzMl90KSh4KSAmICh1aW50MzJfdCkweGZmMDAwMDAwVUwpID4+IDI0KSkpCisKKworI2lmIChfX0dOVUNfXyA+PSAzKQorI2RlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKyNlbHNlCisjZGVmaW5lIGxpa2VseSh4KQkoeCkKKyNkZWZpbmUgdW5saWtlbHkoeCkJKHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NzdW0uYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2NzdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTg4ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvY3N1bS5jCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogY3N1bS5jIC0tLSBjaGVja3N1bW1pbmcgb2YgZXh0MyBzdHJ1Y3R1cmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IENsdXN0ZXIgRmlsZSBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgYnkgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAY2x1c3RlcmZzLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJjcmMxNi5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWZuZGVmIG9mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKChzaXplX3QpICYoKFRZUEUgKikwKS0+TUVNQkVSKQorI2VuZGlmCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBTVEFUSUMKKyNlbHNlCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKyNlbmRpZgorCitfX3UxNiBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZGVzYyA9IGV4dDJmc19ncm91cF9kZXNjKGZzLCBmcy0+Z3JvdXBfZGVzYywKKwkJCQkJCQkgZ3JvdXApOworCXNpemVfdCBzaXplID0gRVhUMl9ERVNDX1NJWkUoZnMtPnN1cGVyKTsKKwlzaXplX3Qgb2Zmc2V0OworCV9fdTE2IGNyYzsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSB7CisJCXNpemVfdCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjLCBiZ19jaGVja3N1bSk7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyBzd2FiZGVzYzsKKwkJc2l6ZV90IHNhdmVfc2l6ZSA9IHNpemU7CisJCWNvbnN0IHNpemVfdCBleHQ0X2JnX3NpemUgPSBzaXplb2Yoc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyk7CisJCXN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKnNhdmVfZGVzYyA9IGRlc2M7CisKKwkJLyogSGF2ZSB0byBzd2FiIGJhY2sgdG8gbGl0dGxlLWVuZGlhbiB0byBkbyB0aGUgY2hlY2tzdW0gKi8KKwkJaWYgKHNpemUgPiBleHQ0X2JnX3NpemUpCisJCQlzaXplID0gZXh0NF9iZ19zaXplOworCQltZW1jcHkoJnN3YWJkZXNjLCBkZXNjLCBzaXplKTsKKwkJZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYzIoZnMsCisJCQkJCShzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICopICZzd2FiZGVzYyk7CisJCWRlc2MgPSAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSAmc3dhYmRlc2M7CisKKwkJZ3JvdXAgPSBleHQyZnNfc3dhYjMyKGdyb3VwKTsKKyNlbmRpZgorCQljcmMgPSBleHQyZnNfY3JjMTYofjAsIGZzLT5zdXBlci0+c191dWlkLAorCQkJCSAgIHNpemVvZihmcy0+c3VwZXItPnNfdXVpZCkpOworCQljcmMgPSBleHQyZnNfY3JjMTYoY3JjLCAmZ3JvdXAsIHNpemVvZihncm91cCkpOworCQljcmMgPSBleHQyZnNfY3JjMTYoY3JjLCBkZXNjLCBvZmZzZXQpOworCQlvZmZzZXQgKz0gc2l6ZW9mKGRlc2MtPmJnX2NoZWNrc3VtKTsgLyogc2tpcCBjaGVja3N1bSAqLworCQkvKiBmb3IgY2hlY2tzdW0gb2Ygc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyBkbyB0aGUgcmVzdC4uLiovCisJCWlmIChvZmZzZXQgPCBzaXplKSB7CisJCQljcmMgPSBleHQyZnNfY3JjMTYoY3JjLCAoY2hhciAqKWRlc2MgKyBvZmZzZXQsCisJCQkJCSAgIHNpemUgLSBvZmZzZXQpOworCQl9CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCS8qCisJCSAqIElmIHRoZSBzaXplIG9mIHRoZSBiZyBkZXNjcmlwdG9yIGlzIGdyZWF0ZXIgdGhhbiA2NAorCQkgKiBieXRlcywgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIHRyYWRpdGlvbmFsIGV4dDQgYmcKKwkJICogZGVzY3JpcHRvciwgY2hlY2tzdW0gdGhlIHJlc3Qgb2YgdGhlIGRlc2NyaXB0b3IgaGVyZQorCQkgKi8KKwkJaWYgKHNhdmVfc2l6ZSA+IGV4dDRfYmdfc2l6ZSkKKwkJCWNyYyA9IGV4dDJmc19jcmMxNihjcmMsCisJCQkJCSAgIChjaGFyICopc2F2ZV9kZXNjICsgZXh0NF9iZ19zaXplLAorCQkJCQkgICBzYXZlX3NpemUgLSBleHQ0X2JnX3NpemUpOworI2VuZGlmCisJfQorCisJcmV0dXJuIGNyYzsKK30KKworaW50IGV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkgJiYKKwkgICAgKGV4dDJmc19iZ19jaGVja3N1bShmcywgZ3JvdXApICE9CisJICAgICBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCBncm91cCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIGV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApCit7CisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQlyZXR1cm47CisKKwkvKiBleHQyZnNfYmdfY2hlY2tzdW1fc2V0KCkgc2V0cyB0aGUgYWN0dWFsIGNoZWNrc3VtIGZpZWxkIGJ1dAorCSAqIGRvZXMgbm90IGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gaXRzZWxmLiAqLworCWV4dDJmc19iZ19jaGVja3N1bV9zZXQoZnMsIGdyb3VwLCBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCBncm91cCkpOworfQorCitzdGF0aWMgX191MzIgZmluZF9sYXN0X2lub2RlX2luZ3JwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgIF9fdTMyIGlub2Rlc19wZXJfZ3JwLCBkZ3JwX3QgZ3JwX25vKQoreworCWV4dDJfaW5vX3QgaSwgc3RhcnRfaW5vLCBlbmRfaW5vOworCisJc3RhcnRfaW5vID0gZ3JwX25vICogaW5vZGVzX3Blcl9ncnAgKyAxOworCWVuZF9pbm8gPSBzdGFydF9pbm8gKyBpbm9kZXNfcGVyX2dycCAtIDE7CisKKwlmb3IgKGkgPSBlbmRfaW5vOyBpID49IHN0YXJ0X2lubzsgaS0tKSB7CisJCWlmIChleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoYml0bWFwLCBpKSkKKwkJCXJldHVybiBpIC0gc3RhcnRfaW5vICsgMTsKKwl9CisJcmV0dXJuIGlub2Rlc19wZXJfZ3JwOworfQorCisvKiB1cGRhdGUgdGhlIGJpdG1hcCBmbGFncywgc2V0IHRoZSBpdGFibGUgaGlnaCB3YXRlcm1hcmssIGFuZCBjYWxjdWxhdGUKKyAqIGNoZWNrc3VtcyBmb3IgdGhlIGdyb3VwIGRlc2NyaXB0b3JzICovCitlcnJjb2RlX3QgZXh0MmZzX3NldF9nZHRfY3N1bShleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBmcy0+c3VwZXI7CisJaW50IGRpcnR5ID0gMDsKKwlkZ3JwX3QgaTsKKworCWlmICghZnMtPmlub2RlX21hcCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fSU5PREVfQklUTUFQOworCisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCV9fdTMyIG9sZF9jc3VtID0gZXh0MmZzX2JnX2NoZWNrc3VtKGZzLCBpKTsKKwkJX191MzIgb2xkX3VudXNlZCA9IGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKTsKKwkJX191MzIgb2xkX2ZsYWdzID0gZXh0MmZzX2JnX2ZsYWdzKGZzLCBpKTsKKwkJX191MzIgb2xkX2ZyZWVfaW5vZGVzX2NvdW50ID0gZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGZzLCBpKTsKKworCQlpZiAob2xkX2ZyZWVfaW5vZGVzX2NvdW50ID09IHNiLT5zX2lub2Rlc19wZXJfZ3JvdXApIHsKKwkJCWV4dDJmc19iZ19mbGFnc19zZXQoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgaSwgc2ItPnNfaW5vZGVzX3Blcl9ncm91cCk7CisJCX0gZWxzZSB7CisJCQlpbnQgdW51c2VkID0KKwkJCQlzYi0+c19pbm9kZXNfcGVyX2dyb3VwIC0KKwkJCQlmaW5kX2xhc3RfaW5vZGVfaW5ncnAoZnMtPmlub2RlX21hcCwKKwkJCQkJCSAgICAgIHNiLT5zX2lub2Rlc19wZXJfZ3JvdXAsIGkpOworCisJCQlleHQyZnNfYmdfZmxhZ3NfY2xlYXIoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgaSwgdW51c2VkKTsKKwkJfQorCisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKwkJaWYgKG9sZF9mbGFncyAhPSBleHQyZnNfYmdfZmxhZ3MoZnMsIGkpKQorCQkJZGlydHkgPSAxOworCQlpZiAob2xkX3VudXNlZCAhPSBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkpCisJCQlkaXJ0eSA9IDE7CisJCWlmIChvbGRfY3N1bSAhPSBleHQyZnNfYmdfY2hlY2tzdW0oZnMsIGkpKQorCQkJZGlydHkgPSAxOworCX0KKwlpZiAoZGlydHkpCisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAiZTJwL2UycC5oIgorCit2b2lkIHByaW50X2NzdW0oY29uc3QgY2hhciAqbXNnLCBleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCV9fdTE2IGNyYzEsIGNyYzIsIGNyYzM7CisJZGdycF90IHN3YWJncm91cDsKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpkZXNjID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLAorCQkJCQkJCSBncm91cCk7CisJc2l6ZV90IHNpemUgPSBFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKwlpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYywgYmdfY2hlY2tzdW0pOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2Mgc3dhYmRlc2M7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqc2F2ZV9kZXNjID0gZGVzYzsKKwljb25zdCBzaXplX3QgZXh0NF9iZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MpOworCXNpemVfdCBzYXZlX3NpemUgPSBzaXplOworI2VuZGlmCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkvKiBIYXZlIHRvIHN3YWIgYmFjayB0byBsaXR0bGUtZW5kaWFuIHRvIGRvIHRoZSBjaGVja3N1bSAqLworCWlmIChzaXplID4gZXh0NF9iZ19zaXplKQorCQlzaXplID0gZXh0NF9iZ19zaXplOworCW1lbWNweSgmc3dhYmRlc2MsIGRlc2MsIHNpemUpOworCWV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGZzLCAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSAmc3dhYmRlc2MpOworCWRlc2MgPSAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSAmc3dhYmRlc2M7CisKKwlzd2FiZ3JvdXAgPSBleHQyZnNfc3dhYjMyKGdyb3VwKTsKKyNlbHNlCisJc3dhYmdyb3VwID0gZ3JvdXA7CisjZW5kaWYKKworCWNyYzEgPSBleHQyZnNfY3JjMTYofjAsIHNiLT5zX3V1aWQsIHNpemVvZihmcy0+c3VwZXItPnNfdXVpZCkpOworCWNyYzIgPSBleHQyZnNfY3JjMTYoY3JjMSwgJnN3YWJncm91cCwgc2l6ZW9mKHN3YWJncm91cCkpOworCWNyYzMgPSBleHQyZnNfY3JjMTYoY3JjMiwgZGVzYywgb2Zmc2V0KTsKKwlvZmZzZXQgKz0gc2l6ZW9mKGRlc2MtPmJnX2NoZWNrc3VtKTsgLyogc2tpcCBjaGVja3N1bSAqLworCS8qIGZvciBjaGVja3N1bSBvZiBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjIGRvIHRoZSByZXN0Li4uKi8KKwlpZiAob2Zmc2V0IDwgc2l6ZSkKKwkJY3JjMyA9IGV4dDJmc19jcmMxNihjcmMzLCAoY2hhciAqKWRlc2MgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWlmIChzYXZlX3NpemUgPiBleHQ0X2JnX3NpemUpCisJCWNyYzMgPSBleHQyZnNfY3JjMTYoY3JjMywgKGNoYXIgKilzYXZlX2Rlc2MgKyBleHQ0X2JnX3NpemUsCisJCQkJICAgIHNhdmVfc2l6ZSAtIGV4dDRfYmdfc2l6ZSk7CisjZW5kaWYKKworCXByaW50ZigiJXMgVVVJRCAlcz0lMDR4LCBncnAgJXU9JTA0eDogJTA0eD0lMDR4XG4iLAorCSAgICAgICBtc2csIGUycF91dWlkMnN0cihzYi0+c191dWlkKSwgY3JjMSwgZ3JvdXAsIGNyYzIsIGNyYzMsCisJICAgICAgIGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIGdyb3VwKSk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgc2JfdXVpZFsxNl0gPSB7IDB4NGYsIDB4MjUsIDB4ZTgsIDB4Y2YsIDB4ZTcsIDB4OTcsIDB4NDgsIDB4MjMsCisJCQkgICAgICAweGJlLCAweGZhLCAweGE3LCAweDg4LCAweDRiLCAweGFlLCAweGVjLCAweGRiIH07CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlleHQyX2ZpbHN5cwkJZnM7CisJaW50CQkJaTsKKwlfX3UxNiBjc3VtMSwgY3N1bTIsIGNzdW1fa25vd24gPSAweGQzYTQ7CisKKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2YocGFyYW0pKTsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIDMyNzY4KTsKKyNpZiAwCisJcGFyYW0uc19mZWF0dXJlX2luY29tcGF0IHw9IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVDsKKwlwYXJhbS5zX2Rlc2Nfc2l6ZSA9IDEyODsKKwljc3VtX2tub3duID0gMHg1YjZlOworI2VuZGlmCisKKwlyZXR2YWwgPSBleHQyZnNfaW5pdGlhbGl6ZSgidGVzdCBmcyIsIEVYVDJfRkxBR182NEJJVFMsICZwYXJhbSwKKwkJCQkgICB0ZXN0X2lvX21hbmFnZXIsICZmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCSJXaGlsZSBpbml0aWFsaXppbmcgZmlsZXN5c3RlbSIpOworCQlleGl0KDEpOworCX0KKwltZW1jcHkoZnMtPnN1cGVyLT5zX3V1aWQsIHNiX3V1aWQsIDE2KTsKKwlmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgPSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNOworCisJZm9yIChpPTA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgaSwgMTI0KTsKKwkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBpLCAxMjUpOworCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChmcywgaSwgMTI2KTsKKwkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgaSwgMzExMTkpOworCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBpLCAxNTcwMSk7CisJCWV4dDJmc19iZ191c2VkX2RpcnNfY291bnRfc2V0KGZzLCBpLCAyKTsKKwkJZXh0MmZzX2JnX2ZsYWdzX3phcChmcywgaSk7CisJfTsKKworCWNzdW0xID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgMCk7CisJcHJpbnRfY3N1bSgiY3N1bTAwMDAiLCBmcywgMCk7CisKKwlpZiAoY3N1bTEgIT0gY3N1bV9rbm93bikgeworCQlwcmludGYoImNoZWNrc3VtIGZvciBncm91cCAwIHNob3VsZCBiZSAlMDR4XG4iLCBjc3VtX2tub3duKTsKKwkJZXhpdCgxKTsKKwl9CisJY3N1bTIgPSBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCAxKTsKKwlwcmludF9jc3VtKCJjc3VtMDAwMSIsIGZzLCAxKTsKKwlpZiAoY3N1bTEgPT0gY3N1bTIpIHsKKwkJcHJpbnRmKCJjaGVja3N1bXMgZm9yIGRpZmZlcmVudCBncm91cHMgc2hvdWxkbid0IG1hdGNoXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJY3N1bTIgPSBleHQyZnNfZ3JvdXBfZGVzY19jc3VtKGZzLCAyKTsKKwlwcmludF9jc3VtKCJjc3VtZmZmZiIsIGZzLCAyKTsKKwlpZiAoY3N1bTEgPT0gY3N1bTIpIHsKKwkJcHJpbnRmKCJjaGVja3N1bXMgZm9yIGRpZmZlcmVudCBncm91cHMgc2hvdWxkbid0IG1hdGNoXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZXh0MmZzX2JnX2NoZWNrc3VtX3NldChmcywgMCwgY3N1bTEpOworCWNzdW0yID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgMCk7CisJcHJpbnRfY3N1bSgiY3N1bV9zZXQiLCBmcywgMCk7CisJaWYgKGNzdW0xICE9IGNzdW0yKSB7CisJCXByaW50ZigiY2hlY2tzdW1zIHNob3VsZCBub3QgZGVwZW5kIG9uIGNoZWNrc3VtIGZpZWxkXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKCFleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShmcywgMCkpIHsKKwkJcHJpbnRmKCJjaGVja3N1bXMgc2hvdWxkIHZlcmlmeSBhZ2FpbnN0IGdkX2NoZWNrc3VtXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJbWVtc2V0KGZzLT5zdXBlci0+c191dWlkLCAweDMwLCBzaXplb2YoZnMtPnN1cGVyLT5zX3V1aWQpKTsKKwlwcmludF9jc3VtKCJuZXdfdXVpZCIsIGZzLCAwKTsKKwlpZiAoZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIDApICE9IDApIHsKKwkJcHJpbnRmKCJjaGVja3N1bXMgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBzaG91bGRuJ3QgbWF0Y2hcbiIpOworCQlleGl0KDEpOworCX0KKwljc3VtMSA9IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIDApOworCWV4dDJmc19iZ19jaGVja3N1bV9zZXQoZnMsIDAsIGNzdW0xKTsKKwlwcmludF9jc3VtKCJjc3VtX25ldyIsIGZzLCAwKTsKKwlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCAwLCAxKTsKKwljc3VtMiA9IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZnMsIDApOworCXByaW50X2NzdW0oImNzdW1fYmxrIiwgZnMsIDApOworCWlmIChjc3VtMSA9PSBjc3VtMikgeworCQlwcmludGYoImNoZWNrc3VtcyBmb3IgZGlmZmVyZW50IGRhdGEgc2hvdWxkbid0IG1hdGNoXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGJsaXN0LmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kYmxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI2ODVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGJsaXN0LmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBkYmxpc3QuYyAtLSBkaXJlY3RvcnkgYmxvY2sgbGlzdCBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMTk5NyBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGRpcl9ibG9ja19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGRpcl9ibG9ja19jbXAyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSAoKnNvcnRmdW5jMzIpKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworCisvKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGluIHRoZSBmaWxlc3lzdGVtIGFzIHJlcG9ydGVkIGJ5CisgKiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMuICBPZiBjb3Vyc2UsIHRoZSBncm91cCBkZXNjcmlwdG9ycyBjb3VsZCBiZQorICogd3JvbmchCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZ2V0X251bV9kaXJzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190ICpyZXRfbnVtX2RpcnMpCit7CisJZGdycF90CWk7CisJZXh0Ml9pbm9fdAludW1fZGlycywgbWF4X2RpcnM7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJbnVtX2RpcnMgPSAwOworCW1heF9kaXJzID0gZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXA7CisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZnMsIGkpID4gbWF4X2RpcnMpCisJCQludW1fZGlycyArPSBtYXhfZGlycyAvIDg7CisJCWVsc2UKKwkJCW51bV9kaXJzICs9IGV4dDJmc19iZ191c2VkX2RpcnNfY291bnQoZnMsIGkpOworCX0KKwlpZiAobnVtX2RpcnMgPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQludW1fZGlycyA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisKKwkqcmV0X251bV9kaXJzID0gbnVtX2RpcnM7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgbWFraW5nIGEgbmV3IGRpcmVjdG9yeSBibG9jayBsaXN0IChmb3IKKyAqIGluaXRpYWxpemUgYW5kIGNvcHkpLgorICovCitzdGF0aWMgZXJyY29kZV90IG1ha2VfZGJsaXN0KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHNpemUsCisJCQkgICAgIGV4dDJfaW5vX3QgY291bnQsCisJCQkgICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqbGlzdCwKKwkJCSAgICAgZXh0Ml9kYmxpc3QgKnJldF9kYmxpc3QpCit7CisJZXh0Ml9kYmxpc3QJZGJsaXN0ID0gTlVMTDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJbnVtX2RpcnM7CisJc2l6ZV90CQlsZW47CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKChyZXRfZGJsaXN0ID09IDApICYmIGZzLT5kYmxpc3QgJiYKKwkgICAgKGZzLT5kYmxpc3QtPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfREJMSVNUKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X2RibGlzdCksICZkYmxpc3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoZGJsaXN0LCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X2RibGlzdCkpOworCisJZGJsaXN0LT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfREJMSVNUOworCWRibGlzdC0+ZnMgPSBmczsKKwlpZiAoc2l6ZSkKKwkJZGJsaXN0LT5zaXplID0gc2l6ZTsKKwllbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9udW1fZGlycyhmcywgJm51bV9kaXJzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJZGJsaXN0LT5zaXplID0gKG51bV9kaXJzICogMikgKyAxMjsKKwl9CisJbGVuID0gKHNpemVfdCkgc2l6ZW9mKHN0cnVjdCBleHQyX2RiX2VudHJ5MikgKiBkYmxpc3QtPnNpemU7CisJZGJsaXN0LT5jb3VudCA9IGNvdW50OworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoZGJsaXN0LT5zaXplLCBzaXplb2Yoc3RydWN0IGV4dDJfZGJfZW50cnkyKSwKKwkJJmRibGlzdC0+bGlzdCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKGxpc3QpCisJCW1lbWNweShkYmxpc3QtPmxpc3QsIGxpc3QsIGxlbik7CisJZWxzZQorCQltZW1zZXQoZGJsaXN0LT5saXN0LCAwLCBsZW4pOworCWlmIChyZXRfZGJsaXN0KQorCQkqcmV0X2RibGlzdCA9IGRibGlzdDsKKwllbHNlCisJCWZzLT5kYmxpc3QgPSBkYmxpc3Q7CisJcmV0dXJuIDA7CitjbGVhbnVwOgorCWlmIChkYmxpc3QpCisJCWV4dDJmc19mcmVlX21lbSgmZGJsaXN0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW5pdF9kYmxpc3QoZXh0Ml9maWxzeXMgZnMsIGV4dDJfZGJsaXN0ICpyZXRfZGJsaXN0KQoreworCWV4dDJfZGJsaXN0CWRibGlzdDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gbWFrZV9kYmxpc3QoZnMsIDAsIDAsIDAsICZkYmxpc3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlkYmxpc3QtPnNvcnRlZCA9IDE7CisJaWYgKHJldF9kYmxpc3QpCisJCSpyZXRfZGJsaXN0ID0gZGJsaXN0OworCWVsc2UKKwkJZnMtPmRibGlzdCA9IGRibGlzdDsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29weSBhIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK2VycmNvZGVfdCBleHQyZnNfY29weV9kYmxpc3QoZXh0Ml9kYmxpc3Qgc3JjLCBleHQyX2RibGlzdCAqZGVzdCkKK3sKKwlleHQyX2RibGlzdAlkYmxpc3Q7CisJZXJyY29kZV90CXJldHZhbDsKKworCXJldHZhbCA9IG1ha2VfZGJsaXN0KHNyYy0+ZnMsIHNyYy0+c2l6ZSwgc3JjLT5jb3VudCwgc3JjLT5saXN0LAorCQkJICAgICAmZGJsaXN0KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWRibGlzdC0+c29ydGVkID0gc3JjLT5zb3J0ZWQ7CisJKmRlc3QgPSBkYmxpc3Q7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDbG9zZSBhIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKgorICogKG1vdmVkIHRvIGNsb3NlZnMuYykKKyAqLworCisKKy8qCisgKiBBZGQgYSBkaXJlY3RvcnkgYmxvY2sgdG8gdGhlIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWRkX2Rpcl9ibG9jazIoZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywKKwkJCQlibGs2NF90IGJsaywgZTJfYmxrY250X3QgYmxvY2tjbnQpCit7CisJc3RydWN0IGV4dDJfZGJfZW50cnkyIAkqbmV3X2VudHJ5OworCWVycmNvZGVfdAkJcmV0dmFsOworCXVuc2lnbmVkIGxvbmcJCW9sZF9zaXplOworCisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKworCWlmIChkYmxpc3QtPmNvdW50ID49IGRibGlzdC0+c2l6ZSkgeworCQlvbGRfc2l6ZSA9IGRibGlzdC0+c2l6ZSAqIHNpemVvZihzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIpOworCQlkYmxpc3QtPnNpemUgKz0gZGJsaXN0LT5zaXplID4gMjAwID8gZGJsaXN0LT5zaXplIC8gMiA6IDEwMDsKKwkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0ob2xkX3NpemUsIChzaXplX3QpIGRibGlzdC0+c2l6ZSAqCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIpLAorCQkJCQkgICAmZGJsaXN0LT5saXN0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGJsaXN0LT5zaXplID0gb2xkX3NpemUgLyBzaXplb2Yoc3RydWN0IGV4dDJfZGJfZW50cnkyKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisJbmV3X2VudHJ5ID0gZGJsaXN0LT5saXN0ICsgKCBkYmxpc3QtPmNvdW50KyspOworCW5ld19lbnRyeS0+YmxrID0gYmxrOworCW5ld19lbnRyeS0+aW5vID0gaW5vOworCW5ld19lbnRyeS0+YmxvY2tjbnQgPSBibG9ja2NudDsKKworCWRibGlzdC0+c29ydGVkID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2hhbmdlIHRoZSBkaXJlY3RvcnkgYmxvY2sgdG8gdGhlIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK2VycmNvZGVfdCBleHQyZnNfc2V0X2Rpcl9ibG9jazIoZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywKKwkJCQlibGs2NF90IGJsaywgZTJfYmxrY250X3QgYmxvY2tjbnQpCit7CisJZGdycF90CQkJaTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZGJsaXN0LCBFWFQyX0VUX01BR0lDX0RCTElTVCk7CisKKwlmb3IgKGk9MDsgaSA8IGRibGlzdC0+Y291bnQ7IGkrKykgeworCQlpZiAoKGRibGlzdC0+bGlzdFtpXS5pbm8gIT0gaW5vKSB8fAorCQkgICAgKGRibGlzdC0+bGlzdFtpXS5ibG9ja2NudCAhPSBibG9ja2NudCkpCisJCQljb250aW51ZTsKKwkJZGJsaXN0LT5saXN0W2ldLmJsayA9IGJsazsKKwkJZGJsaXN0LT5zb3J0ZWQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIEVYVDJfRVRfREJfTk9UX0ZPVU5EOworfQorCit2b2lkIGV4dDJmc19kYmxpc3Rfc29ydDIoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJIEVYVDJfUVNPUlRfVFlQRSAoKnNvcnRmdW5jKShjb25zdCB2b2lkICosCisJCQkJCQkgICAgIGNvbnN0IHZvaWQgKikpCit7CisJaWYgKCFzb3J0ZnVuYykKKwkJc29ydGZ1bmMgPSBkaXJfYmxvY2tfY21wMjsKKwlxc29ydChkYmxpc3QtPmxpc3QsIChzaXplX3QpIGRibGlzdC0+Y291bnQsCisJICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2RiX2VudHJ5MiksIHNvcnRmdW5jKTsKKwlkYmxpc3QtPnNvcnRlZCA9IDE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK2VycmNvZGVfdCBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGV4dDJfZGJsaXN0IGRibGlzdCwKKwkJCQkgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9pbmZvLAorCQkJCQkgICAgIHZvaWQJKnByaXZfZGF0YSksCisJCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcJaTsKKwlpbnQJCXJldDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZGJsaXN0LCBFWFQyX0VUX01BR0lDX0RCTElTVCk7CisKKwlpZiAoIWRibGlzdC0+c29ydGVkKQorCQlleHQyZnNfZGJsaXN0X3NvcnQyKGRibGlzdCwgMCk7CisJZm9yIChpPTA7IGkgPCBkYmxpc3QtPmNvdW50OyBpKyspIHsKKwkJcmV0ID0gKCpmdW5jKShkYmxpc3QtPmZzLCAmZGJsaXN0LT5saXN0W2ldLCBwcml2X2RhdGEpOworCQlpZiAocmV0ICYgREJMSVNUX0FCT1JUKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgRVhUMl9RU09SVF9UWVBFIGRpcl9ibG9ja19jbXAyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9hID0KKwkJKGNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqKSBhOworCWNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfYiA9CisJCShjb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKikgYjsKKworCWlmIChkYl9hLT5ibGsgIT0gZGJfYi0+YmxrKQorCQlyZXR1cm4gKGludCkgKGRiX2EtPmJsayAtIGRiX2ItPmJsayk7CisKKwlpZiAoZGJfYS0+aW5vICE9IGRiX2ItPmlubykKKwkJcmV0dXJuIChpbnQpIChkYl9hLT5pbm8gLSBkYl9iLT5pbm8pOworCisJcmV0dXJuIChkYl9hLT5ibG9ja2NudCAtIGRiX2ItPmJsb2NrY250KTsKK30KKworYmxrNjRfdCBleHQyZnNfZGJsaXN0X2NvdW50MihleHQyX2RibGlzdCBkYmxpc3QpCit7CisJcmV0dXJuIGRibGlzdC0+Y291bnQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZGJsaXN0X2dldF9sYXN0MihleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJICBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKiplbnRyeSkKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGRibGlzdCwgRVhUMl9FVF9NQUdJQ19EQkxJU1QpOworCisJaWYgKGRibGlzdC0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfREJMSVNUX0VNUFRZOworCisJaWYgKGVudHJ5KQorCQkqZW50cnkgPSBkYmxpc3QtPmxpc3QgKyAoIGRibGlzdC0+Y291bnQtMSk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZGJsaXN0X2Ryb3BfbGFzdChleHQyX2RibGlzdCBkYmxpc3QpCit7CisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKworCWlmIChkYmxpc3QtPmNvdW50ID09IDApCisJCXJldHVybiBFWFQyX0VUX0RCTElTVF9FTVBUWTsKKworCWRibGlzdC0+Y291bnQtLTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExlZ2FjeSAzMi1iaXQgdmVyc2lvbnMKKyAqLworCisvKgorICogQWRkIGEgZGlyZWN0b3J5IGJsb2NrIHRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX2FkZF9kaXJfYmxvY2soZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywgYmxrX3QgYmxrLAorCQkJICAgICAgIGludCBibG9ja2NudCkKK3sKKwlyZXR1cm4gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGRibGlzdCwgaW5vLCBibGssIGJsb2NrY250KTsKK30KKworLyoKKyAqIENoYW5nZSB0aGUgZGlyZWN0b3J5IGJsb2NrIHRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCitlcnJjb2RlX3QgZXh0MmZzX3NldF9kaXJfYmxvY2soZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywgYmxrX3QgYmxrLAorCQkJICAgICAgIGludCBibG9ja2NudCkKK3sKKwlyZXR1cm4gZXh0MmZzX3NldF9kaXJfYmxvY2syKGRibGlzdCwgaW5vLCBibGssIGJsb2NrY250KTsKK30KKwordm9pZCBleHQyZnNfZGJsaXN0X3NvcnQoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJRVhUMl9RU09SVF9UWVBFICgqc29ydGZ1bmMpKGNvbnN0IHZvaWQgKiwKKwkJCQkJCSAgICBjb25zdCB2b2lkICopKQoreworCWlmIChzb3J0ZnVuYykgeworCQlzb3J0ZnVuYzMyID0gc29ydGZ1bmM7CisJCXNvcnRmdW5jID0gZGlyX2Jsb2NrX2NtcDsKKwl9IGVsc2UKKwkJc29ydGZ1bmMgPSBkaXJfYmxvY2tfY21wMjsKKwlxc29ydChkYmxpc3QtPmxpc3QsIChzaXplX3QpIGRibGlzdC0+Y291bnQsCisJICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2RiX2VudHJ5MiksIHNvcnRmdW5jKTsKKwlkYmxpc3QtPnNvcnRlZCA9IDE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGRpcmVjdG9yeSBibG9jayBsaXN0CisgKi8KK3N0cnVjdCBpdGVyYXRlX3Bhc3N0aHJvdWdoIHsKKwlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJICAgIHN0cnVjdCBleHQyX2RiX2VudHJ5ICpkYl9pbmZvLAorCQkgICAgdm9pZAkqcHJpdl9kYXRhKTsKKwl2b2lkICpwcml2X2RhdGE7Cit9OworCitzdGF0aWMgaW50IHBhc3N0aHJvdWdoX2Z1bmMoZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9pbmZvLAorCQkJICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgaXRlcmF0ZV9wYXNzdGhyb3VnaCAqcCA9IHByaXZfZGF0YTsKKwlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSBkYjsKKwlpbnQgcmV0OworCisJZGIuaW5vID0gZGJfaW5mby0+aW5vOworCWRiLmJsayA9IChibGtfdCkgZGJfaW5mby0+YmxrOworCWRiLmJsb2NrY250ID0gKGludCkgZGJfaW5mby0+YmxvY2tjbnQ7CisJcmV0ID0gKHAtPmZ1bmMpKGZzLCAmZGIsIHAtPnByaXZfZGF0YSk7CisJZGJfaW5mby0+aW5vID0gZGIuaW5vOworCWRiX2luZm8tPmJsayA9IGRiLmJsazsKKwlkYl9pbmZvLT5ibG9ja2NudCA9IGRiLmJsb2NrY250OworCXJldHVybiByZXQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZGJsaXN0X2l0ZXJhdGUoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgc3RydWN0IGV4dDJfZGJfZW50cnkgKmRiX2luZm8sCisJCQkJCSAgICB2b2lkCSpwcml2X2RhdGEpLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgaXRlcmF0ZV9wYXNzdGhyb3VnaCBwYXNzOworCisJRVhUMl9DSEVDS19NQUdJQyhkYmxpc3QsIEVYVDJfRVRfTUFHSUNfREJMSVNUKTsKKwlwYXNzLmZ1bmMgPSBmdW5jOworCXBhc3MucHJpdl9kYXRhID0gcHJpdl9kYXRhOworCisJcmV0dXJuIGV4dDJmc19kYmxpc3RfaXRlcmF0ZTIoZGJsaXN0LCBwYXNzdGhyb3VnaF9mdW5jLCAmcGFzcyk7Cit9CisKK3N0YXRpYyBFWFQyX1FTT1JUX1RZUEUgZGlyX2Jsb2NrX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfYSA9CisJCShjb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKikgYTsKKwljb25zdCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmRiX2IgPQorCQkoY29uc3Qgc3RydWN0IGV4dDJfZGJfZW50cnkyICopIGI7CisKKwlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSBhMzIsIGIzMjsKKworCWEzMi5pbm8gPSBkYl9hLT5pbm87ICBhMzIuYmxrID0gZGJfYS0+YmxrOworCWEzMi5ibG9ja2NudCA9IGRiX2EtPmJsb2NrY250OworCisJYjMyLmlubyA9IGRiX2ItPmlubzsgIGIzMi5ibGsgPSBkYl9iLT5ibGs7CisJYjMyLmJsb2NrY250ID0gZGJfYi0+YmxvY2tjbnQ7CisKKwlyZXR1cm4gc29ydGZ1bmMzMigmYTMyLCAmYjMyKTsKK30KKworaW50IGV4dDJmc19kYmxpc3RfY291bnQoZXh0Ml9kYmxpc3QgZGJsaXN0KQoreworCXJldHVybiBkYmxpc3QtPmNvdW50OworfQorCitlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9nZXRfbGFzdChleHQyX2RibGlzdCBkYmxpc3QsCisJCQkJIHN0cnVjdCBleHQyX2RiX2VudHJ5ICoqZW50cnkpCit7CisJc3RhdGljIHN0cnVjdCBleHQyX2RiX2VudHJ5IHJldF9lbnRyeTsKKwlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKmxhc3Q7CisKKwlFWFQyX0NIRUNLX01BR0lDKGRibGlzdCwgRVhUMl9FVF9NQUdJQ19EQkxJU1QpOworCisJaWYgKGRibGlzdC0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfREJMSVNUX0VNUFRZOworCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIDA7CisKKwlsYXN0ID0gZGJsaXN0LT5saXN0ICsgZGJsaXN0LT5jb3VudCAtMTsKKworCXJldF9lbnRyeS5pbm8gPSBsYXN0LT5pbm87CisJcmV0X2VudHJ5LmJsayA9IGxhc3QtPmJsazsKKwlyZXRfZW50cnkuYmxvY2tjbnQgPSBsYXN0LT5ibG9ja2NudDsKKwkqZW50cnkgPSAmcmV0X2VudHJ5OworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2RibGlzdF9kaXIuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2RibGlzdF9kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2VkOGFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGJsaXN0X2Rpci5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBkYmxpc3RfZGlyLmMgLS0tIGl0ZXJhdGUgYnkgZGlyZWN0b3J5IGVudHJ5CisgKgorICogQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RhdGljIGludCBkYl9kaXJfcHJvYyhleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfZGJfZW50cnkyICpkYl9pbmZvLAorCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKKworZXJyY29kZV90IGV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCSAgICBpbnQJZmxhZ3MsCisJCQkJICAgIGNoYXIJKmJsb2NrX2J1ZiwKKwkJCQkgICAgaW50ICgqZnVuYykoZXh0Ml9pbm9fdCBkaXIsCisJCQkJCQlpbnQJZW50cnksCisJCQkJCQlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCQkJCWludAlvZmZzZXQsCisJCQkJCQlpbnQJYmxvY2tzaXplLAorCQkJCQkJY2hhcgkqYnVmLAorCQkJCQkJdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCXN0cnVjdCBkaXJfY29udGV4dAljdHg7CisKKwlFWFQyX0NIRUNLX01BR0lDKGRibGlzdCwgRVhUMl9FVF9NQUdJQ19EQkxJU1QpOworCisJY3R4LmRpciA9IDA7CisJY3R4LmZsYWdzID0gZmxhZ3M7CisJaWYgKGJsb2NrX2J1ZikKKwkJY3R4LmJ1ZiA9IGJsb2NrX2J1ZjsKKwllbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZGJsaXN0LT5mcy0+YmxvY2tzaXplLCAmY3R4LmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwljdHguZnVuYyA9IGZ1bmM7CisJY3R4LnByaXZfZGF0YSA9IHByaXZfZGF0YTsKKwljdHguZXJyY29kZSA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZGJsaXN0X2l0ZXJhdGUyKGRibGlzdCwgZGJfZGlyX3Byb2MsICZjdHgpOworCisJaWYgKCFibG9ja19idWYpCisJCWV4dDJmc19mcmVlX21lbSgmY3R4LmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gY3R4LmVycmNvZGU7Cit9CisKK3N0YXRpYyBpbnQgZGJfZGlyX3Byb2MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfaW5mbywKKwkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgZGlyX2NvbnRleHQJKmN0eDsKKwlpbnQJCQlyZXQ7CisKKwljdHggPSAoc3RydWN0IGRpcl9jb250ZXh0ICopIHByaXZfZGF0YTsKKwljdHgtPmRpciA9IGRiX2luZm8tPmlubzsKKwljdHgtPmVycmNvZGUgPSAwOworCisJcmV0ID0gZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrKGZzLCAmZGJfaW5mby0+YmxrLAorCQkJCSAgICAgICBkYl9pbmZvLT5ibG9ja2NudCwgMCwgMCwgcHJpdl9kYXRhKTsKKwlpZiAoKHJldCAmIEJMT0NLX0FCT1JUKSAmJiAhY3R4LT5lcnJjb2RlKQorCQlyZXR1cm4gREJMSVNUX0FCT1JUOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGlyX2l0ZXJhdGUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Rpcl9pdGVyYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxMjIxOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Rpcl9pdGVyYXRlLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBkaXJfaXRlcmF0ZS5jIC0tLSBleHQyZnMgZGlyZWN0b3J5IGl0ZXJhdGlvbiBvcGVyYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCisjZGVmaW5lIEVYVDRfTUFYX1JFQ19MRU4JCSgoMTw8MTYpLTEpCisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X3JlY19sZW4oZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgKnJlY19sZW4pCit7CisJdW5zaWduZWQgaW50IGxlbiA9IGRpcmVudC0+cmVjX2xlbjsKKworCWlmIChmcy0+YmxvY2tzaXplIDwgNjU1MzYpCisJCSpyZWNfbGVuID0gbGVuOworCWVsc2UgaWYgKGxlbiA9PSBFWFQ0X01BWF9SRUNfTEVOIHx8IGxlbiA9PSAwKQorCQkqcmVjX2xlbiA9IGZzLT5ibG9ja3NpemU7CisJZWxzZSAKKwkJKnJlY19sZW4gPSAobGVuICYgNjU1MzIpIHwgKChsZW4gJiAzKSA8PCAxNik7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X3JlY19sZW4oZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50KQoreworCWlmICgobGVuID4gZnMtPmJsb2Nrc2l6ZSkgfHwgKGZzLT5ibG9ja3NpemUgPiAoMSA8PCAxOCkpIHx8IChsZW4gJiAzKSkKKwkJcmV0dXJuIEVJTlZBTDsKKwlpZiAobGVuIDwgNjU1MzYpIHsKKwkJZGlyZW50LT5yZWNfbGVuID0gbGVuOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxlbiA9PSBmcy0+YmxvY2tzaXplKSB7CisJCWlmIChmcy0+YmxvY2tzaXplID09IDY1NTM2KQorCQkJZGlyZW50LT5yZWNfbGVuID0gRVhUNF9NQVhfUkVDX0xFTjsKKwkJZWxzZSAKKwkJCWRpcmVudC0+cmVjX2xlbiA9IDA7CisJfSBlbHNlCisJCWRpcmVudC0+cmVjX2xlbiA9IChsZW4gJiA2NTUzMikgfCAoKGxlbiA+PiAxNikgJiAzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCBhIHBvdGVudGlhbCBkZWxldGVkCisgKiBkaXJlY3RvcnkgZW50cnkgbG9va3MgdmFsaWQuICBXaGF0IHdlIGRvIGlzIGNoZWNrIHRoZSBkZWxldGVkIGVudHJ5CisgKiBhbmQgZWFjaCBzdWNjZXNzaXZlIGVudHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYWxsIGxvb2sgdmFsaWQgYW5kCisgKiB0aGF0IHRoZSBsYXN0IGRlbGV0ZWQgZW50cnkgZW5kcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0CisgKiB1bmRlbGV0ZWQgZW50cnkuICBSZXR1cm5zIDEgaWYgdGhlIGRlbGV0ZWQgZW50cnkgbG9va3MgdmFsaWQsIHplcm8KKyAqIGlmIG5vdCB2YWxpZC4KKyAqLworc3RhdGljIGludCBleHQyZnNfdmFsaWRhdGVfZW50cnkoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKmJ1ZiwKKwkJCQkgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgdW5zaWduZWQgaW50IGZpbmFsX29mZnNldCkKK3sKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudDsKKwl1bnNpZ25lZCBpbnQgcmVjX2xlbjsKKyNkZWZpbmUgRElSRU5UX01JTl9MRU5HVEggMTIKKworCXdoaWxlICgob2Zmc2V0IDwgZmluYWxfb2Zmc2V0KSAmJgorCSAgICAgICAob2Zmc2V0IDw9IGZzLT5ibG9ja3NpemUgLSBESVJFTlRfTUlOX0xFTkdUSCkpIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKShidWYgKyBvZmZzZXQpOworCQlpZiAoZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKSkKKwkJCXJldHVybiAwOworCQlvZmZzZXQgKz0gcmVjX2xlbjsKKwkJaWYgKChyZWNfbGVuIDwgOCkgfHwKKwkJICAgICgocmVjX2xlbiAlIDQpICE9IDApIHx8CisJCSAgICAoKCgodW5zaWduZWQpIGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSs4KSA+IHJlY19sZW4pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAob2Zmc2V0ID09IGZpbmFsX29mZnNldCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZGlyX2l0ZXJhdGUyKGV4dDJfZmlsc3lzIGZzLAorCQkJICAgICAgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICAgICBpbnQgZmxhZ3MsCisJCQkgICAgICBjaGFyICpibG9ja19idWYsCisJCQkgICAgICBpbnQgKCpmdW5jKShleHQyX2lub190CWRpciwKKwkJCQkJICBpbnQJCWVudHJ5LAorCQkJCQkgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJCQkgIGludAlvZmZzZXQsCisJCQkJCSAgaW50CWJsb2Nrc2l6ZSwKKwkJCQkJICBjaGFyCSpidWYsCisJCQkJCSAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QJCWRpcl9jb250ZXh0CWN0eDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19kaXJlY3RvcnkoZnMsIGRpcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWN0eC5kaXIgPSBkaXI7CisJY3R4LmZsYWdzID0gZmxhZ3M7CisJaWYgKGJsb2NrX2J1ZikKKwkJY3R4LmJ1ZiA9IGJsb2NrX2J1ZjsKKwllbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmN0eC5idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJY3R4LmZ1bmMgPSBmdW5jOworCWN0eC5wcml2X2RhdGEgPSBwcml2X2RhdGE7CisJY3R4LmVycmNvZGUgPSAwOworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgZGlyLCBCTE9DS19GTEFHX1JFQURfT05MWSwgMCwKKwkJCQkgICAgICAgZXh0MmZzX3Byb2Nlc3NfZGlyX2Jsb2NrLCAmY3R4KTsKKwlpZiAoIWJsb2NrX2J1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjdHguYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBjdHguZXJyY29kZTsKK30KKworc3RydWN0IHhsYXRlIHsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgIGludAkJb2Zmc2V0LAorCQkgICAgaW50CQlibG9ja3NpemUsCisJCSAgICBjaGFyCSpidWYsCisJCSAgICB2b2lkCSpwcml2X2RhdGEpOworCXZvaWQgKnJlYWxfcHJpdmF0ZTsKK307CisKK3N0YXRpYyBpbnQgeGxhdGVfZnVuYyhleHQyX2lub190IGRpciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludCBlbnRyeSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LCBpbnQgb2Zmc2V0LAorCQkgICAgICBpbnQgYmxvY2tzaXplLCBjaGFyICpidWYsIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgeGxhdGUgKnhsID0gKHN0cnVjdCB4bGF0ZSAqKSBwcml2X2RhdGE7CisKKwlyZXR1cm4gKCp4bC0+ZnVuYykoZGlyZW50LCBvZmZzZXQsIGJsb2Nrc2l6ZSwgYnVmLCB4bC0+cmVhbF9wcml2YXRlKTsKK30KKworZXJyY29kZV90IGV4dDJmc19kaXJfaXRlcmF0ZShleHQyX2ZpbHN5cyBmcywKKwkJCSAgICAgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICAgIGludCBmbGFncywKKwkJCSAgICAgY2hhciAqYmxvY2tfYnVmLAorCQkJICAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCQkJIGludAlvZmZzZXQsCisJCQkJCSBpbnQJYmxvY2tzaXplLAorCQkJCQkgY2hhcgkqYnVmLAorCQkJCQkgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCB4bGF0ZSB4bDsKKworCXhsLnJlYWxfcHJpdmF0ZSA9IHByaXZfZGF0YTsKKwl4bC5mdW5jID0gZnVuYzsKKworCXJldHVybiBleHQyZnNfZGlyX2l0ZXJhdGUyKGZzLCBkaXIsIGZsYWdzLCBibG9ja19idWYsCisJCQkJICAgeGxhdGVfZnVuYywgJnhsKTsKK30KKworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGlzIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuICBVc2VkIGJ5CisgKiBleHQyZnNfZGlyX2l0ZXJhdGUoKSBhbmQgZXh0MmZzX2RibGlzdF9kaXJfaXRlcmF0ZSgpCisgKi8KK2ludCBleHQyZnNfcHJvY2Vzc19kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgIGJsazY0X3QJKmJsb2NrbnIsCisJCQkgICAgIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJICAgICBibGs2NF90CXJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludAlyZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgdm9pZAkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBkaXJfY29udGV4dCAqY3R4ID0gKHN0cnVjdCBkaXJfY29udGV4dCAqKSBwcml2X2RhdGE7CisJdW5zaWduZWQgaW50CW9mZnNldCA9IDA7CisJdW5zaWduZWQgaW50CW5leHRfcmVhbF9lbnRyeSA9IDA7CisJaW50CQlyZXQgPSAwOworCWludAkJY2hhbmdlZCA9IDA7CisJaW50CQlkb19hYm9ydCA9IDA7CisJdW5zaWduZWQgaW50CXJlY19sZW4sIHNpemU7CisJaW50CQllbnRyeTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudDsKKworCWlmIChibG9ja2NudCA8IDApCisJCXJldHVybiAwOworCisJZW50cnkgPSBibG9ja2NudCA/IERJUkVOVF9PVEhFUl9GSUxFIDogRElSRU5UX0RPVF9GSUxFOworCisJY3R4LT5lcnJjb2RlID0gZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMyhmcywgKmJsb2NrbnIsIGN0eC0+YnVmLCAwKTsKKwlpZiAoY3R4LT5lcnJjb2RlKQorCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisKKwl3aGlsZSAob2Zmc2V0IDwgZnMtPmJsb2Nrc2l6ZSkgeworCQlkaXJlbnQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChjdHgtPmJ1ZiArIG9mZnNldCk7CisJCWlmIChleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pKQorCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQlpZiAoKChvZmZzZXQgKyByZWNfbGVuKSA+IGZzLT5ibG9ja3NpemUpIHx8CisJCSAgICAocmVjX2xlbiA8IDgpIHx8CisJCSAgICAoKHJlY19sZW4gJSA0KSAhPSAwKSB8fAorCQkgICAgKCgoKHVuc2lnbmVkKSBkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikrOCkgPiByZWNfbGVuKSkgeworCQkJY3R4LT5lcnJjb2RlID0gRVhUMl9FVF9ESVJfQ09SUlVQVEVEOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCWlmICghZGlyZW50LT5pbm9kZSAmJgorCQkgICAgIShjdHgtPmZsYWdzICYgRElSRU5UX0ZMQUdfSU5DTFVERV9FTVBUWSkpCisJCQlnb3RvIG5leHQ7CisKKwkJcmV0ID0gKGN0eC0+ZnVuYykoY3R4LT5kaXIsCisJCQkJICAobmV4dF9yZWFsX2VudHJ5ID4gb2Zmc2V0KSA/CisJCQkJICBESVJFTlRfREVMRVRFRF9GSUxFIDogZW50cnksCisJCQkJICBkaXJlbnQsIG9mZnNldCwKKwkJCQkgIGZzLT5ibG9ja3NpemUsIGN0eC0+YnVmLAorCQkJCSAgY3R4LT5wcml2X2RhdGEpOworCQlpZiAoZW50cnkgPCBESVJFTlRfT1RIRVJfRklMRSkKKwkJCWVudHJ5Kys7CisKKwkJaWYgKHJldCAmIERJUkVOVF9DSEFOR0VEKSB7CisJCQlpZiAoZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKSkKKwkJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCQljaGFuZ2VkKys7CisJCX0KKwkJaWYgKHJldCAmIERJUkVOVF9BQk9SVCkgeworCQkJZG9fYWJvcnQrKzsKKwkJCWJyZWFrOworCQl9CituZXh0OgorIAkJaWYgKG5leHRfcmVhbF9lbnRyeSA9PSBvZmZzZXQpCisJCQluZXh0X3JlYWxfZW50cnkgKz0gcmVjX2xlbjsKKworIAkJaWYgKGN0eC0+ZmxhZ3MgJiBESVJFTlRfRkxBR19JTkNMVURFX1JFTU9WRUQpIHsKKwkJCXNpemUgPSAoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSArIDExKSAmIH4zOworCisJCQlpZiAocmVjX2xlbiAhPSBzaXplKSAgeworCQkJCXVuc2lnbmVkIGludCBmaW5hbF9vZmZzZXQ7CisKKwkJCQlmaW5hbF9vZmZzZXQgPSBvZmZzZXQgKyByZWNfbGVuOworCQkJCW9mZnNldCArPSBzaXplOworCQkJCXdoaWxlIChvZmZzZXQgPCBmaW5hbF9vZmZzZXQgJiYKKwkJCQkgICAgICAgIWV4dDJmc192YWxpZGF0ZV9lbnRyeShmcywgY3R4LT5idWYsCisJCQkJCQkJICAgICAgb2Zmc2V0LAorCQkJCQkJCSAgICAgIGZpbmFsX29mZnNldCkpCisJCQkJCW9mZnNldCArPSA0OworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCW9mZnNldCArPSByZWNfbGVuOworCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCWN0eC0+ZXJyY29kZSA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCAqYmxvY2tuciwgY3R4LT5idWYsCisJCQkJCQkgICAgICAgMCk7CisJCWlmIChjdHgtPmVycmNvZGUpCisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCWlmIChkb19hYm9ydCkKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kaXJibG9jay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGlyYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2UxZjBhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZGlyYmxvY2suYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGRpcmJsb2NrLmMgLS0tIGRpcmVjdG9yeSBibG9jayByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJIHZvaWQgKmJ1ZiwgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSpwLCAqZW5kOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50OworCXVuc2lnbmVkIGludAluYW1lX2xlbiwgcmVjX2xlbjsKKworCisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxvY2ssIDEsIGJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXAgPSAoY2hhciAqKSBidWY7CisJZW5kID0gKGNoYXIgKikgYnVmICsgZnMtPmJsb2Nrc2l6ZTsKKwl3aGlsZSAocCA8IGVuZC04KSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgcDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJZGlyZW50LT5pbm9kZSA9IGV4dDJmc19zd2FiMzIoZGlyZW50LT5pbm9kZSk7CisJCWRpcmVudC0+cmVjX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5yZWNfbGVuKTsKKwkJZGlyZW50LT5uYW1lX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5uYW1lX2xlbik7CisjZW5kaWYKKwkJbmFtZV9sZW4gPSBkaXJlbnQtPm5hbWVfbGVuOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQlpZiAoZmxhZ3MgJiBFWFQyX0RJUkJMT0NLX1YyX1NUUlVDVCkKKwkJCWRpcmVudC0+bmFtZV9sZW4gPSBleHQyZnNfc3dhYjE2KGRpcmVudC0+bmFtZV9sZW4pOworI2VuZGlmCisJCWlmICgocmV0dmFsID0gZXh0MmZzX2dldF9yZWNfbGVuKGZzLCBkaXJlbnQsICZyZWNfbGVuKSkgIT0gMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmICgocmVjX2xlbiA8IDgpIHx8IChyZWNfbGVuICUgNCkpIHsKKwkJCXJlY19sZW4gPSA4OworCQkJcmV0dmFsID0gRVhUMl9FVF9ESVJfQ09SUlVQVEVEOworCQl9IGVsc2UgaWYgKCgobmFtZV9sZW4gJiAweEZGKSArIDgpID4gcmVjX2xlbikKKwkJCXJldHZhbCA9IEVYVDJfRVRfRElSX0NPUlJVUFRFRDsKKwkJcCArPSByZWNfbGVuOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJIHZvaWQgKmJ1ZiwgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlyZXR1cm4gZXh0MmZzX3JlYWRfZGlyX2Jsb2NrMyhmcywgYmxvY2ssIGJ1ZiwgZmxhZ3MpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgdm9pZCAqYnVmKQoreworCXJldHVybiBleHQyZnNfcmVhZF9kaXJfYmxvY2szKGZzLCBibG9jaywgYnVmLCAwKTsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJICB2b2lkICppbmJ1ZiwgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSpwLCAqZW5kOworCWNoYXIJCSpidWYgPSAwOworCXVuc2lnbmVkIGludAlyZWNfbGVuOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50OworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1jcHkoYnVmLCBpbmJ1ZiwgZnMtPmJsb2Nrc2l6ZSk7CisJcCA9IGJ1ZjsKKwllbmQgPSBidWYgKyBmcy0+YmxvY2tzaXplOworCXdoaWxlIChwIDwgZW5kKSB7CisJCWRpcmVudCA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgcDsKKwkJaWYgKChyZXR2YWwgPSBleHQyZnNfZ2V0X3JlY19sZW4oZnMsIGRpcmVudCwgJnJlY19sZW4pKSAhPSAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaWYgKChyZWNfbGVuIDwgOCkgfHwKKwkJICAgIChyZWNfbGVuICUgNCkpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwkJCXJldHVybiAoRVhUMl9FVF9ESVJfQ09SUlVQVEVEKTsKKwkJfQorCQlwICs9IHJlY19sZW47CisJCWRpcmVudC0+aW5vZGUgPSBleHQyZnNfc3dhYjMyKGRpcmVudC0+aW5vZGUpOworCQlkaXJlbnQtPnJlY19sZW4gPSBleHQyZnNfc3dhYjE2KGRpcmVudC0+cmVjX2xlbik7CisJCWRpcmVudC0+bmFtZV9sZW4gPSBleHQyZnNfc3dhYjE2KGRpcmVudC0+bmFtZV9sZW4pOworCisJCWlmIChmbGFncyAmIEVYVDJfRElSQkxPQ0tfVjJfU1RSVUNUKQorCQkJZGlyZW50LT5uYW1lX2xlbiA9IGV4dDJmc19zd2FiMTYoZGlyZW50LT5uYW1lX2xlbik7CisJfQorCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibG9jaywgMSwgYnVmKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKKyNlbHNlCisJcmV0dXJuIGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibG9jaywgMSwgKGNoYXIgKikgaW5idWYpOworI2VuZGlmCit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJIHZvaWQgKmluYnVmLCBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXJldHVybiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrMyhmcywgYmxvY2ssIGluYnVmLCBmbGFncyk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkgdm9pZCAqaW5idWYpCit7CisJcmV0dXJuIGV4dDJmc193cml0ZV9kaXJfYmxvY2szKGZzLCBibG9jaywgaW5idWYsIDApOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kaXJoYXNoLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kaXJoYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3N2JmYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Rpcmhhc2guYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIGRpcmhhc2guYyAtLSBDYWxjdWxhdGUgdGhlIGhhc2ggb2YgYSBkaXJlY3RvcnkgZW50cnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgIERhbmllbCBQaGlsbGlwcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBLZXllZCAzMi1iaXQgaGFzaCBmdW5jdGlvbiB1c2luZyBURUEgaW4gYSBEYXZpcy1NZXllciBmdW5jdGlvbgorICogICBIMCA9IEtleQorICogICBIaSA9IEUgTWkoSGktMSkgKyBIaS0xCisgKgorICogKHNlZSBBcHBsaWVkIENyeXB0b2dyYXBoeSwgMm5kIGVkaXRpb24sIHA0NDgpLgorICoKKyAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB6aXAuY29tLmF1PiAxOTk4CisgKgorICogVGhpcyBjb2RlIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMCisgKi8KKyNkZWZpbmUgREVMVEEgMHg5RTM3NzlCOQorCitzdGF0aWMgdm9pZCBURUFfdHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bXSkKK3sKKwlfX3UzMglzdW0gPSAwOworCV9fdTMyCWIwID0gYnVmWzBdLCBiMSA9IGJ1ZlsxXTsKKwlfX3UzMglhID0gaW5bMF0sIGIgPSBpblsxXSwgYyA9IGluWzJdLCBkID0gaW5bM107CisJaW50CW4gPSAxNjsKKworCWRvIHsKKwkJc3VtICs9IERFTFRBOworCQliMCArPSAoKGIxIDw8IDQpK2EpIF4gKGIxK3N1bSkgXiAoKGIxID4+IDUpK2IpOworCQliMSArPSAoKGIwIDw8IDQpK2MpIF4gKGIwK3N1bSkgXiAoKGIwID4+IDUpK2QpOworCX0gd2hpbGUoLS1uKTsKKworCWJ1ZlswXSArPSBiMDsKKwlidWZbMV0gKz0gYjE7Cit9CisKKy8qIEYsIEcgYW5kIEggYXJlIGJhc2ljIE1ENCBmdW5jdGlvbnM6IHNlbGVjdGlvbiwgbWFqb3JpdHksIHBhcml0eSAqLworI2RlZmluZSBGKHgsIHksIHopICgoeikgXiAoKHgpICYgKCh5KSBeICh6KSkpKQorI2RlZmluZSBHKHgsIHksIHopICgoKHgpICYgKHkpKSArICgoKHgpIF4gKHkpKSAmICh6KSkpCisjZGVmaW5lIEgoeCwgeSwgeikgKCh4KSBeICh5KSBeICh6KSkKKworLyoKKyAqIFRoZSBnZW5lcmljIHJvdW5kIGZ1bmN0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIGlzIHNvIHNwZWNpZmljIHRoYXQKKyAqIHdlIGRvbid0IGJvdGhlciBwcm90ZWN0aW5nIGFsbCB0aGUgYXJndW1lbnRzIHdpdGggcGFyZW5zLCBhcyBpcyBnZW5lcmFsbHkKKyAqIGdvb2QgbWFjcm8gcHJhY3RpY2UsIGluIGZhdm9yIG9mIGV4dHJhIGxlZ2liaWxpdHkuCisgKiBSb3RhdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIGFkZGl0aW9uIHRvIHByZXZlbnQgcmVjb21wdXRhdGlvbgorICovCisjZGVmaW5lIFJPVU5EKGYsIGEsIGIsIGMsIGQsIHgsIHMpCVwKKwkoYSArPSBmKGIsIGMsIGQpICsgeCwgYSA9IChhIDw8IHMpIHwgKGEgPj4gKDMyLXMpKSkKKyNkZWZpbmUgSzEgMAorI2RlZmluZSBLMiAwMTMyNDA0NzQ2MzFVTAorI2RlZmluZSBLMyAwMTU2NjYzNjU2NDFVTAorCisvKgorICogQmFzaWMgY3V0LWRvd24gTUQ0IHRyYW5zZm9ybS4gIFJldHVybnMgb25seSAzMiBiaXRzIG9mIHJlc3VsdC4KKyAqLworc3RhdGljIHZvaWQgaGFsZk1ENFRyYW5zZm9ybSAoX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpbltdKQoreworCV9fdTMyCWEgPSBidWZbMF0sIGIgPSBidWZbMV0sIGMgPSBidWZbMl0sIGQgPSBidWZbM107CisKKwkvKiBSb3VuZCAxICovCisJUk9VTkQoRiwgYSwgYiwgYywgZCwgaW5bMF0gKyBLMSwgIDMpOworCVJPVU5EKEYsIGQsIGEsIGIsIGMsIGluWzFdICsgSzEsICA3KTsKKwlST1VORChGLCBjLCBkLCBhLCBiLCBpblsyXSArIEsxLCAxMSk7CisJUk9VTkQoRiwgYiwgYywgZCwgYSwgaW5bM10gKyBLMSwgMTkpOworCVJPVU5EKEYsIGEsIGIsIGMsIGQsIGluWzRdICsgSzEsICAzKTsKKwlST1VORChGLCBkLCBhLCBiLCBjLCBpbls1XSArIEsxLCAgNyk7CisJUk9VTkQoRiwgYywgZCwgYSwgYiwgaW5bNl0gKyBLMSwgMTEpOworCVJPVU5EKEYsIGIsIGMsIGQsIGEsIGluWzddICsgSzEsIDE5KTsKKworCS8qIFJvdW5kIDIgKi8KKwlST1VORChHLCBhLCBiLCBjLCBkLCBpblsxXSArIEsyLCAgMyk7CisJUk9VTkQoRywgZCwgYSwgYiwgYywgaW5bM10gKyBLMiwgIDUpOworCVJPVU5EKEcsIGMsIGQsIGEsIGIsIGluWzVdICsgSzIsICA5KTsKKwlST1VORChHLCBiLCBjLCBkLCBhLCBpbls3XSArIEsyLCAxMyk7CisJUk9VTkQoRywgYSwgYiwgYywgZCwgaW5bMF0gKyBLMiwgIDMpOworCVJPVU5EKEcsIGQsIGEsIGIsIGMsIGluWzJdICsgSzIsICA1KTsKKwlST1VORChHLCBjLCBkLCBhLCBiLCBpbls0XSArIEsyLCAgOSk7CisJUk9VTkQoRywgYiwgYywgZCwgYSwgaW5bNl0gKyBLMiwgMTMpOworCisJLyogUm91bmQgMyAqLworCVJPVU5EKEgsIGEsIGIsIGMsIGQsIGluWzNdICsgSzMsICAzKTsKKwlST1VORChILCBkLCBhLCBiLCBjLCBpbls3XSArIEszLCAgOSk7CisJUk9VTkQoSCwgYywgZCwgYSwgYiwgaW5bMl0gKyBLMywgMTEpOworCVJPVU5EKEgsIGIsIGMsIGQsIGEsIGluWzZdICsgSzMsIDE1KTsKKwlST1VORChILCBhLCBiLCBjLCBkLCBpblsxXSArIEszLCAgMyk7CisJUk9VTkQoSCwgZCwgYSwgYiwgYywgaW5bNV0gKyBLMywgIDkpOworCVJPVU5EKEgsIGMsIGQsIGEsIGIsIGluWzBdICsgSzMsIDExKTsKKwlST1VORChILCBiLCBjLCBkLCBhLCBpbls0XSArIEszLCAxNSk7CisKKwlidWZbMF0gKz0gYTsKKwlidWZbMV0gKz0gYjsKKwlidWZbMl0gKz0gYzsKKwlidWZbM10gKz0gZDsKK30KKworI3VuZGVmIFJPVU5ECisjdW5kZWYgRgorI3VuZGVmIEcKKyN1bmRlZiBICisjdW5kZWYgSzEKKyN1bmRlZiBLMgorI3VuZGVmIEszCisKKy8qIFRoZSBvbGQgbGVnYWN5IGhhc2ggKi8KK3N0YXRpYyBleHQyX2Rpcmhhc2hfdCBkeF9oYWNrX2hhc2ggKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkJICAgIGludCB1bnNpZ25lZF9mbGFnKQoreworCV9fdTMyIGhhc2gsIGhhc2gwID0gMHgxMmEzZmUyZCwgaGFzaDEgPSAweDM3YWJlOGY5OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVjcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWU7CisJY29uc3Qgc2lnbmVkIGNoYXIgKnNjcCA9IChjb25zdCBzaWduZWQgY2hhciAqKSBuYW1lOworCWludCBjOworCisJd2hpbGUgKGxlbi0tKSB7CisJCWlmICh1bnNpZ25lZF9mbGFnKQorCQkJYyA9IChpbnQpICp1Y3ArKzsKKwkJZWxzZQorCQkJYyA9IChpbnQpICpzY3ArKzsKKwkJaGFzaCA9IGhhc2gxICsgKGhhc2gwIF4gKGMgKiA3MTUyMzczKSk7CisKKwkJaWYgKGhhc2ggJiAweDgwMDAwMDAwKSBoYXNoIC09IDB4N2ZmZmZmZmY7CisJCWhhc2gxID0gaGFzaDA7CisJCWhhc2gwID0gaGFzaDsKKwl9CisJcmV0dXJuIChoYXNoMCA8PCAxKTsKK30KKworc3RhdGljIHZvaWQgc3RyMmhhc2hidWYoY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuLCBfX3UzMiAqYnVmLCBpbnQgbnVtLAorCQkJaW50IHVuc2lnbmVkX2ZsYWcpCit7CisJX191MzIJcGFkLCB2YWw7CisJaW50CWksIGM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdWNwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbXNnOworCWNvbnN0IHNpZ25lZCBjaGFyICpzY3AgPSAoY29uc3Qgc2lnbmVkIGNoYXIgKikgbXNnOworCisJcGFkID0gKF9fdTMyKWxlbiB8ICgoX191MzIpbGVuIDw8IDgpOworCXBhZCB8PSBwYWQgPDwgMTY7CisKKwl2YWwgPSBwYWQ7CisJaWYgKGxlbiA+IG51bSo0KQorCQlsZW4gPSBudW0gKiA0OworCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKChpICUgNCkgPT0gMCkKKwkJCXZhbCA9IHBhZDsKKwkJaWYgKHVuc2lnbmVkX2ZsYWcpCisJCQljID0gKGludCkgdWNwW2ldOworCQllbHNlCisJCQljID0gKGludCkgc2NwW2ldOworCisJCXZhbCA9IGMgKyAodmFsIDw8IDgpOworCQlpZiAoKGkgJSA0KSA9PSAzKSB7CisJCQkqYnVmKysgPSB2YWw7CisJCQl2YWwgPSBwYWQ7CisJCQludW0tLTsKKwkJfQorCX0KKwlpZiAoLS1udW0gPj0gMCkKKwkJKmJ1ZisrID0gdmFsOworCXdoaWxlICgtLW51bSA+PSAwKQorCQkqYnVmKysgPSBwYWQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBoYXNoIG9mIGEgZmlsZW5hbWUuICBJZiBsZW4gaXMgMCBhbmQgbmFtZSBpcyBOVUxMLCB0aGVuCisgKiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciBvciBub3QgYSBoYXNoIHZlcnNpb24gaXMKKyAqIHN1cHBvcnRlZC4KKyAqCisgKiBUaGUgc2VlZCBpcyBhbiA0IGxvbmd3b3JkICgzMiBiaXRzKSAic2VjcmV0IiB3aGljaCBjYW4gYmUgdXNlZCB0bworICogdW5pcXVpZnkgYSBoYXNoLiAgSWYgdGhlIHNlZWQgaXMgYWxsIHplcm8ncywgdGhlbiBzb21lIGRlZmF1bHQgc2VlZAorICogbWF5IGJlIHVzZWQuCisgKgorICogQSBwYXJ0aWN1bGFyIGhhc2ggdmVyc2lvbiBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIHNlZWQgaXMKKyAqIHJlcHJlc2VudGVkLCBhbmQgd2hldGhlciBvciBub3QgdGhlIHJldHVybmVkIGhhc2ggaXMgMzIgYml0cyBvciA2NAorICogYml0cy4gIDMyIGJpdCBoYXNoZXMgd2lsbCByZXR1cm4gMCBmb3IgdGhlIG1pbm9yIGhhc2guCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZGlyaGFzaChpbnQgdmVyc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCSBjb25zdCBfX3UzMiAqc2VlZCwKKwkJCSBleHQyX2Rpcmhhc2hfdCAqcmV0X2hhc2gsCisJCQkgZXh0Ml9kaXJoYXNoX3QgKnJldF9taW5vcl9oYXNoKQoreworCV9fdTMyCWhhc2g7CisJX191MzIJbWlub3JfaGFzaCA9IDA7CisJY29uc3QgY2hhcgkqcDsKKwlpbnQJCWk7CisJX191MzIgCQlpbls4XSwgYnVmWzRdOworCWludAkJdW5zaWduZWRfZmxhZyA9IDA7CisKKwkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHNlZWQgZm9yIHRoZSBoYXNoIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLworCWJ1ZlswXSA9IDB4Njc0NTIzMDE7CisJYnVmWzFdID0gMHhlZmNkYWI4OTsKKwlidWZbMl0gPSAweDk4YmFkY2ZlOworCWJ1ZlszXSA9IDB4MTAzMjU0NzY7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHNlZWQgaXMgYWxsIHplcm8ncyAqLworCWlmIChzZWVkKSB7CisJCWZvciAoaT0wOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoc2VlZFtpXSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA8IDQpCisJCQltZW1jcHkoYnVmLCBzZWVkLCBzaXplb2YoYnVmKSk7CisJfQorCisJc3dpdGNoICh2ZXJzaW9uKSB7CisJY2FzZSBFWFQyX0hBU0hfTEVHQUNZX1VOU0lHTkVEOgorCQl1bnNpZ25lZF9mbGFnKys7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFWFQyX0hBU0hfTEVHQUNZOgorCQloYXNoID0gZHhfaGFja19oYXNoKG5hbWUsIGxlbiwgdW5zaWduZWRfZmxhZyk7CisJCWJyZWFrOworCWNhc2UgRVhUMl9IQVNIX0hBTEZfTUQ0X1VOU0lHTkVEOgorCQl1bnNpZ25lZF9mbGFnKys7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFWFQyX0hBU0hfSEFMRl9NRDQ6CisJCXAgPSBuYW1lOworCQl3aGlsZSAobGVuID4gMCkgeworCQkJc3RyMmhhc2hidWYocCwgbGVuLCBpbiwgOCwgdW5zaWduZWRfZmxhZyk7CisJCQloYWxmTUQ0VHJhbnNmb3JtKGJ1ZiwgaW4pOworCQkJbGVuIC09IDMyOworCQkJcCArPSAzMjsKKwkJfQorCQltaW5vcl9oYXNoID0gYnVmWzJdOworCQloYXNoID0gYnVmWzFdOworCQlicmVhazsKKwljYXNlIEVYVDJfSEFTSF9URUFfVU5TSUdORUQ6CisJCXVuc2lnbmVkX2ZsYWcrKzsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIEVYVDJfSEFTSF9URUE6CisJCXAgPSBuYW1lOworCQl3aGlsZSAobGVuID4gMCkgeworCQkJc3RyMmhhc2hidWYocCwgbGVuLCBpbiwgNCwgdW5zaWduZWRfZmxhZyk7CisJCQlURUFfdHJhbnNmb3JtKGJ1ZiwgaW4pOworCQkJbGVuIC09IDE2OworCQkJcCArPSAxNjsKKwkJfQorCQloYXNoID0gYnVmWzBdOworCQltaW5vcl9oYXNoID0gYnVmWzFdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcmV0X2hhc2ggPSAwOworCQlyZXR1cm4gRVhUMl9FVF9ESVJIQVNIX1VOU1VQUDsKKwl9CisJKnJldF9oYXNoID0gaGFzaCAmIH4xOworCWlmIChyZXRfbWlub3JfaGFzaCkKKwkJKnJldF9taW5vcl9oYXNoID0gbWlub3JfaGFzaDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2Rvc2lvLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kb3Npby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2JkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kb3Npby5jCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogZG9zaW8uYyAtLSBEaXNrIEkvTyBtb2R1bGUgZm9yIHRoZSBleHQyZnMvRE9TIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgSGFiZXJzYWNrCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxiaW9zLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxpby5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGV4dDJmcy9leHQyX3R5cGVzLmg+CisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJkb3Npby5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJleHQyX2Vyci5oIgorI2luY2x1ZGUgImV4dDJmcy9pby5oIgorCisvKgorICogU29tZSBoZWxwZXIgbWFjcm9zCisgKi8KKyNkZWZpbmUgTElOVVhfRVhUMkZTICAgICAgIDB4ODMKKyNkZWZpbmUgTElOVVhfU1dBUCAgICAgICAgIDB4ODIKKyNkZWZpbmUgV1JJVEVfRVJSKF9tc2dfKSB3cml0ZSgyLCBfbXNnXywgc3RybGVuKF9tc2dfKSkKKyNkZWZpbmUgV1JJVEVfRVJSX1MoX21zZ18pIHdyaXRlKDIsIF9tc2dfLCBzaXplb2YoX21zZ18pKQorCisvKgorICogRXhwb3J0ZWQgdmFyaWFibGVzCisgKi8KK3Vuc2lnbmVkIGxvbmcgICAgICAgIF9kaW9fZXJyb3I7Cit1bnNpZ25lZCBsb25nICAgICAgICBfZGlvX2h3X2Vycm9yOworCisvKgorICogQXJyYXkgb2YgYWxsIG9wZW5lZCBwYXJ0aXRpb25zCisgKi8KK3N0YXRpYyBQQVJUSVRJT04gICAgICAgICoqcGFydGl0aW9ucyA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgICBucGFydCA9IDA7IC8qIE51bWJlciBvZiBtYXBwZWQgcGFydGl0aW9ucyAqLworc3RhdGljIFBBUlRJVElPTiAgICAgICAgKmFjdGl2ZSA9IE5VTEw7CisKKy8qCisgKiBJL08gTWFuYWdlciByb3V0aW5lIHByb3RvdHlwZXMKKyAqLworc3RhdGljIGVycmNvZGVfdCBkb3Nfb3Blbihjb25zdCBjaGFyICpkZXYsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IGRvc19jbG9zZShpb19jaGFubmVsIGNoYW5uZWwpOworc3RhdGljIGVycmNvZGVfdCBkb3Nfc2V0X2Jsa3NpemUoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSk7CitzdGF0aWMgZXJyY29kZV90IGRvc19yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1Zik7CitzdGF0aWMgZXJyY29kZV90IGRvc193cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKTsKK3N0YXRpYyBlcnJjb2RlX3QgZG9zX2ZsdXNoKGlvX2NoYW5uZWwgY2hhbm5lbCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RydWN0X2lvX21hbmFnZXIgc3RydWN0X2Rvc19tYW5hZ2VyID0geworICAgICAgICBFWFQyX0VUX01BR0lDX0lPX01BTkFHRVIsCisgICAgICAgICJET1MgSS9PIE1hbmFnZXIiLAorICAgICAgICBkb3Nfb3BlbiwKKyAgICAgICAgZG9zX2Nsb3NlLAorICAgICAgICBkb3Nfc2V0X2Jsa3NpemUsCisgICAgICAgIGRvc19yZWFkX2JsaywKKyAgICAgICAgZG9zX3dyaXRlX2JsaywKKyAgICAgICAgZG9zX2ZsdXNoCit9OworaW9fbWFuYWdlciBkb3NfaW9fbWFuYWdlciA9ICZzdHJ1Y3RfZG9zX21hbmFnZXI7CisKKy8qCisgKiBNYWNybyB0YWtlbiBmcm9tIHVuaXhfaW8uYworICovCisvKgorICogRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisgKi8KKworI2RlZmluZSBFWFQyX0NIRUNLX01BR0lDKHN0cnVjdCwgY29kZSkgXAorICAgICAgICAgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKKy8qCisgKiBDYWxjdWxhdGVzIGEgQ0hTIGFkZHJlc3Mgb2YgYSBzZWN0b3IgZnJvbSBpdHMgTEJBCisgKiBvZmZzZXQgZm9yIHRoZSBnaXZlbiBwYXJ0aXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGxiYTJjaHModW5zaWduZWQgbG9uZyBsYmFfYWRkciwgQ0hTICpjaHMsIFBBUlRJVElPTiAqcGFydCkKK3sKKyAgdW5zaWduZWQgbG9uZyAgICAgIGFic3M7CisKKyAgY2hzLT5vZmZzZXQgPSBsYmFfYWRkciAmIDB4MDAwMDAxRkY7CisgIGFic3MgPSAobGJhX2FkZHIgPj4gOSkgKyBwYXJ0LT5zdGFydDsKKyAgY2hzLT5jeWwgICAgPSBhYnNzIC8gKHBhcnQtPnNlY3RzICogcGFydC0+aGVhZHMpOworICBjaHMtPmhlYWQgICA9IChhYnNzIC8gcGFydC0+c2VjdHMpICUgcGFydC0+aGVhZHM7CisgIGNocy0+c2VjdG9yID0gKGFic3MgJSBwYXJ0LT5zZWN0cykgKyAxOworfQorCisjaWZkZWYgX19UVVJCT0NfXworI3ByYWdtYSBhcmdzdXNlZAorI2VuZGlmCisvKgorICogU2NhbnMgdGhlIHBhc3NlZCBwYXJ0aXRpb24gdGFibGUgbG9va2luZyBmb3IgKnBubyBwYXJ0aXRpb24KKyAqIHRoYXQgaGFzIExJTlVYX0VYVDJGUyB0eXBlLgorICoKKyAqIFRPRE86CisgKiBGb3IgcGFydGl0aW9uIG51bWJlcnMgPjUgTGludXggdXNlcyBET1MgZXh0ZW5kZWQgcGFydGl0aW9ucyAtCisgKiBkaXZlIGludG8gdGhlbSBhbiByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZW50cnkuIEFsc28gZGl2ZSBpbnRvCisgKiBleHRlbmRlZCBwYXJ0aXRpb25zIHdoZW4gc2Nhbm5pbmcgZm9yIGEgZmlyc3QgTGludXgvZXh0MmZzLgorICovCitzdGF0aWMgUFRBQkxFX0VOVFJZICpzY2FuX3BhcnRpdGlvbl90YWJsZShQVEFCTEVfRU5UUlkgKnBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHBoeXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwbm8pCit7CisgIHVuc2lnbmVkICAgICAgICBpOworCisgIGlmKCpwbm8gIT0gMHhGRiAmJiAqcG5vID49IDUpCisgICAgIHJldHVybiBOVUxMOyAvKiBXZSBkb24ndCBzdXBwb3J0IGV4dGVuZGVkIHBhcnRpdGlvbnMgZm9yIG5vdyAqLworCisgIGlmKCpwbm8gIT0gMHhGRikKKyAgeworICAgIGlmKHBlbnRyeVsqcG5vXS50eXBlID09IExJTlVYX0VYVDJGUykKKyAgICAgIHJldHVybiAmcGVudHJ5Wypwbm9dOworICAgIGVsc2UKKyAgICB7CisgICAgICBpZighcGVudHJ5Wypwbm9dLnR5cGUpCisgICAgICAgICpwbm8gPSAweEZFOworICAgICAgZWxzZSBpZihwZW50cnlbKnBub10udHlwZSA9PSBMSU5VWF9TV0FQKQorICAgICAgICAqcG5vID0gMHhGRDsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykKKyAgICBpZihwZW50cnlbaV0udHlwZSA9PSBMSU5VWF9FWFQyRlMpCisgICAgeworICAgICAgKnBubyA9IGk7CisgICAgICByZXR1cm4gJnBlbnRyeVtpXTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBsaWJleHQyZnMgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggSS9PIG1hbmFnZXIKKyAqLworc3RhdGljIGlvX2NoYW5uZWwgYWxsb2NfaW9fY2hhbm5lbChQQVJUSVRJT04gKnBhcnQpCit7CisgIGlvX2NoYW5uZWwgICAgIGlvY2g7CisKKyAgaW9jaCA9IChpb19jaGFubmVsKW1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisgIGlmICghaW9jaCkKKwkgIHJldHVybiBOVUxMOworICBtZW1zZXQoaW9jaCwgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCkpOworICBpb2NoLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTDsKKyAgaW9jaC0+bWFuYWdlciA9IGRvc19pb19tYW5hZ2VyOworICBpb2NoLT5uYW1lID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHBhcnQtPmRldikrMSk7CisgIGlmICghaW9jaC0+bmFtZSkgeworCSAgZnJlZShpb2NoKTsKKwkgIHJldHVybiBOVUxMOworICB9CisgIHN0cmNweShpb2NoLT5uYW1lLCBwYXJ0LT5kZXYpOworICBpb2NoLT5wcml2YXRlX2RhdGEgPSBwYXJ0OworICBpb2NoLT5ibG9ja19zaXplID0gMTAyNDsgLyogVGhlIHNtYWxsZXN0IGV4dDJmcyBibG9jayBzaXplICovCisgIGlvY2gtPnJlYWRfZXJyb3IgPSAwOworICBpb2NoLT53cml0ZV9lcnJvciA9IDA7CisKKyAgcmV0dXJuIGlvY2g7Cit9CisKKyNpZmRlZiBfX1RVUkJPQ19fCisjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKKy8qCisgKiBPcGVuIHRoZSAnbmFtZScgcGFydGl0aW9uLCBpbml0aWFsaXplIGFsbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzCisgKiB3ZSBuZWVkIHRvIGtlZXAgYW5kIGNyZWF0ZSBsaWJleHQyZnMgSS9PIG1hbmFnZXIuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgZG9zX29wZW4oY29uc3QgY2hhciAqZGV2LCBpbnQgZmxhZ3MsIGlvX2NoYW5uZWwgKmNoYW5uZWwpCit7CisgIHVuc2lnbmVkIGNoYXIgICp0bXAsIHNlY1s1MTJdOworICBQQVJUSVRJT04gICAgICAqcGFydDsKKyAgUFRBQkxFX0VOVFJZICAgKnBlbnQ7CisgIFBBUlRJVElPTiAgICAgICAgKipuZXdwYXJ0czsKKworICBpZighZGV2KQorICB7CisgICAgX2Rpb19lcnJvciA9IEVSUl9CQURERVY7CisgICAgcmV0dXJuIEVYVDJfRVRfQkFEX0RFVklDRV9OQU1FOworICB9CisKKyAgLyoKKyAgICogRmlyc3QgY2hlY2sgd2hldGhlciB0aGUgZGV2IG5hbWUgaXMgT0sKKyAgICovCisgIHRtcCA9ICh1bnNpZ25lZCBjaGFyKilzdHJyY2hyKGRldiwgJy8nKTsKKyAgaWYoIXRtcCkKKyAgeworICAgIF9kaW9fZXJyb3IgPSBFUlJfQkFEREVWOworICAgIHJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKyAgfQorICAqdG1wID0gMDsKKyAgaWYoc3RyY21wKGRldiwgIi9kZXYiKSkKKyAgeworICAgIF9kaW9fZXJyb3IgPSBFUlJfQkFEREVWOworICAgIHJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKyAgfQorICAqdG1wKysgPSAnLyc7CisKKyAgLyoKKyAgICogQ2hlY2sgd2hldGhlciB0aGUgcGFydGl0aW9uIGRhdGEgaXMgYWxyZWFkeSBpbiBjYWNoZQorICAgKi8KKworICBwYXJ0ID0gKFBBUlRJVElPTiopbWFsbG9jKHNpemVvZihQQVJUSVRJT04pKTsKKyAgaWYgKCFwYXJ0KQorCSAgcmV0dXJuIEVOT01FTTsKKyAgeworICAgIGludCAgIGkgPSAwOworCisgICAgZm9yKDtpIDwgbnBhcnQ7IGkrKykKKyAgICAgIGlmKCFzdHJjbXAocGFydGl0aW9uc1tpXS0+ZGV2LCBkZXYpKQorICAgICAgeworICAgICAgICAvKiBGb3VuZCBpdCEgTWFrZSBpdCB0aGUgYWN0aXZlIG9uZSAqLworICAgICAgICBhY3RpdmUgPSBwYXJ0aXRpb25zW2ldOworICAgICAgICAqY2hhbm5lbCA9IGFsbG9jX2lvX2NoYW5uZWwoYWN0aXZlKTsKKwlpZiAoISpjaGFubmVsKQorCQlyZXR1cm4gRU5PTUVNOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgfQorCisgIC8qCisgICAqIERyaXZlIG51bWJlciAmIG9wdGlvbmFsbHkgcGFydG4gbnVtYmVyCisgICAqLworICBzd2l0Y2godG1wWzBdKQorICB7CisgICAgY2FzZSAnaCc6CisgICAgY2FzZSAncyc6CisgICAgICBwYXJ0LT5waHlzID0gMHg4MDsKKyAgICAgIHBhcnQtPnBoeXMgKz0gdG91cHBlcih0bXBbMl0pIC0gJ0EnOworICAgICAgLyoKKyAgICAgICAqIERvIHdlIGhhdmUgdGhlIHBhcnRpdGlvbiBudW1iZXI/CisgICAgICAgKi8KKyAgICAgIGlmKHRtcFszXSkKKyAgICAgICAgcGFydC0+cG5vID0gaXNkaWdpdCgoaW50KXRtcFszXSkgPyB0bXBbM10gLSAnMCcgLSAxOiAwOworICAgICAgZWxzZQorICAgICAgICBwYXJ0LT5wbm8gPSAweEZGOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdmJzoKKyAgICAgIGlmKHRtcFsyXSkKKyAgICAgICAgcGFydC0+cGh5cyA9IGlzZGlnaXQoKGludCl0bXBbMl0pID8gdG1wWzJdIC0gJzAnIDogMDsKKyAgICAgIGVsc2UKKyAgICAgICAgcGFydC0+cGh5cyA9IDB4MDA7IC8qIFdlJ2xsIGFzc3VtZSAvZGV2L2ZkMCAqLworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgX2Rpb19lcnJvciA9IEVSUl9CQURERVY7CisgICAgICByZXR1cm4gRU5PREVWOworICB9CisKKyAgaWYocGFydC0+cGh5cyA8IDB4ODApCisgIHsKKyAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBmbG9wcGllcyBmb3Igbm93ICovCisgICAgIF9kaW9fZXJyb3IgPSBFUlJfTk9UU1VQUDsKKyAgICAgcmV0dXJuIEVJTlZBTDsKKyAgfQorCisgIHBhcnQtPmRldiA9IHN0cmR1cChkZXYpOworCisgIC8qCisgICAqIEdldCBkcml2ZSdzIGdlb21ldHJ5CisgICAqLworICBfZGlvX2h3X2Vycm9yID0gYmlvc2Rpc2soRElTS19HRVRfR0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LT5waHlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogaGVhZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogY3lsaW5kZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIC8qIHNlY3RvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgLyoganVzdCBvbmUgc2VjdG9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWMpOworCisgIGlmKCFIV19PSygpKQorICB7CisgICAgX2Rpb19lcnJvciA9IEVSUl9IQVJEV0FSRTsKKyAgICBmcmVlKHBhcnQtPmRldik7CisgICAgZnJlZShwYXJ0KTsKKyAgICByZXR1cm4gRUZBVUxUOworICB9CisKKyAgLyoKKyAgICogQ2FsY3VsYXRlIHRoZSBnZW9tZXRyeQorICAgKi8KKyAgcGFydC0+Y3lscyAgPSAodW5zaWduZWQgc2hvcnQpKCgoc2VjWzBdID4+IDYpIDw8IDgpICsgc2VjWzFdICsgMSk7CisgIHBhcnQtPmhlYWRzID0gc2VjWzNdICsgMTsKKyAgcGFydC0+c2VjdHMgPSBzZWNbMF0gJiAweDNGOworCisgIC8qCisgICAqIE5vdyB0aGF0IHdlIGtub3cgYWxsIHdlIG5lZWQsIGxldCdzIGxvb2sgZm9yIHRoZSBwYXJ0aXRpb24KKyAgICovCisgIF9kaW9faHdfZXJyb3IgPSBiaW9zZGlzayhESVNLX1JFQUQsIHBhcnQtPnBoeXMsIDAsIDAsIDEsIDEsIHNlYyk7CisKKyAgaWYoIUhXX09LKCkpCisgIHsKKyAgICBfZGlvX2Vycm9yID0gRVJSX0hBUkRXQVJFOworICAgIGZyZWUocGFydC0+ZGV2KTsKKyAgICBmcmVlKHBhcnQpOworICAgIHJldHVybiBFRkFVTFQ7CisgIH0KKworICBwZW50ID0gKFBUQUJMRV9FTlRSWSopJnNlY1sweDFCRV07CisgIHBlbnQgPSBzY2FuX3BhcnRpdGlvbl90YWJsZShwZW50LCBwYXJ0LT5waHlzLCAmcGFydC0+cG5vKTsKKworICBpZighcGVudCkKKyAgeworICAgIF9kaW9fZXJyb3IgPSBwYXJ0LT5wbm8gPT0gMHhGRSA/IEVSUl9FTVBUWVBBUlQgOgorICAgICAgICAgICAgICAgICBwYXJ0LT5wbm8gPT0gMHhGRCA/IEVSUl9MSU5VWFNXQVAgOiBFUlJfTk9URVhUMkZTOworICAgIGZyZWUocGFydC0+ZGV2KTsKKyAgICBmcmVlKHBhcnQpOworICAgIHJldHVybiBFTk9ERVY7CisgIH0KKworICAvKgorICAgKiBDYWxjdWxhdGUgdGhlIHJlbWFpbmluZyBmaWd1cmVzCisgICAqLworICB7CisgICAgdW5zaWduZWQgbG9uZyAgICBmc2VjLCBmaGVhZCwgZmN5bDsKKworICAgIGZzZWMgPSAodW5zaWduZWQgbG9uZykocGVudC0+c3RhcnRfc2VjICYgMHgzRik7CisgICAgZmhlYWQgPSAodW5zaWduZWQgbG9uZylwZW50LT5zdGFydF9oZWFkOworICAgIGZjeWwgPSAoKHBlbnQtPnN0YXJ0X3NlYyA+PiA2KSA8PCA4KSArIHBlbnQtPnN0YXJ0X2N5bDsKKyAgICBwYXJ0LT5zdGFydCA9IGZzZWMgKyBmaGVhZCAqIHBhcnQtPnNlY3RzICsgZmN5bCAqCisgICAgICAgICAgICAgICAgICAocGFydC0+aGVhZHMgKiBwYXJ0LT5zZWN0cykgLSAxOworICAgIHBhcnQtPmxlbiA9IHBlbnQtPnNpemU7CisgIH0KKworICAvKgorICAgKiBBZGQgdGhlIHBhcnRpdGlvbiB0byB0aGUgdGFibGUKKyAgICovCisgIG5ld3BhcnRzID0gKFBBUlRJVElPTioqKXJlYWxsb2MocGFydGl0aW9ucywgc2l6ZW9mKFBBUlRJVElPTikgKiBucGFydCk7CisgIGlmICghbmV3cGFydHMpIHsKKwkgIGZyZWUocGFydCk7CisJICByZXR1cm4gRU5PTUVNOworICB9CisgIHBhcnRpdGlvbnMgPSBuZXdwYXJ0czsKKyAgcGFydGl0aW9uc1tucGFydCsrXSA9IGFjdGl2ZSA9IHBhcnQ7CisKKyAgLyoKKyAgICogTm93IGFsbG9jIGFsbCBsaWJlMmZzIHN0cnVjdHVyZXMKKyAgICovCisgICpjaGFubmVsID0gYWxsb2NfaW9fY2hhbm5lbChhY3RpdmUpOworICBpZiAoISpjaGFubmVsKQorCSAgcmV0dXJuIEVOT01FTTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBkb3NfY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKQoreworCWZyZWUoY2hhbm5lbC0+bmFtZSk7CisJZnJlZShjaGFubmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGRvc19zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworICBjaGFubmVsLT5ibG9ja19zaXplID0gYmxrc2l6ZTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBkb3NfcmVhZF9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisgIFBBUlRJVElPTiAgICAgKnBhcnQ7CisgIHNpemVfdCAgICAgICAgc2l6ZTsKKyAgZXh0Ml9sb2ZmX3QgICBsb2M7CisgIENIUyAgICAgICAgICAgY2hzOworCisgIEVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKyAgcGFydCA9IChQQVJUSVRJT04qKWNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworICBzaXplID0gKHNpemVfdCkoKGNvdW50IDwgMCkgPyAtY291bnQgOiBjb3VudCAqIGNoYW5uZWwtPmJsb2NrX3NpemUpOworICBsb2MgPSAoZXh0Ml9sb2ZmX3QpIGJsb2NrICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKworICBsYmEyY2hzKGxvYywgJmNocywgcGFydCk7CisgIC8qCisgICAqIFBvdGVudGlhbCBidWcgaGVyZToKKyAgICogICBJZiBESkdQUCBpcyB1c2VkIHRoZW4gcmVhZHMgb2YgPjE4IHNlY3RvcnMgd2lsbCBmYWlsIQorICAgKiAgIEhhdmUgdG8gcmV3cml0ZSBiaW9zZGlzay4KKyAgICovCisgIF9kaW9faHdfZXJyb3IgPSBiaW9zZGlzayhESVNLX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LT5waHlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzLmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHMuY3lsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzLnNlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPCA1MTIgPyAxIDogc2l6ZS81MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworCisgIGlmKCFIV19PSygpKQorICB7CisgICAgX2Rpb19lcnJvciA9IEVSUl9IQVJEV0FSRTsKKyAgICByZXR1cm4gRUZBVUxUOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZG9zX3dyaXRlX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisgIFBBUlRJVElPTiAgICAgKnBhcnQ7CisgIHNpemVfdCAgICAgICAgc2l6ZTsKKyAgZXh0Ml9sb2ZmX3QgICBsb2M7CisgIENIUyAgICAgICAgICAgY2hzOworCisgIEVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKyAgcGFydCA9IChQQVJUSVRJT04qKWNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworICBpZihjb3VudCA9PSAxKQorICAgIHNpemUgPSAoc2l6ZV90KWNoYW5uZWwtPmJsb2NrX3NpemU7CisgIGVsc2UKKyAgeworICAgIGlmIChjb3VudCA8IDApCisgICAgICBzaXplID0gKHNpemVfdCktY291bnQ7CisgICAgZWxzZQorICAgICAgc2l6ZSA9IChzaXplX3QpKGNvdW50ICogY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisgIH0KKworICBsb2MgPSAoZXh0Ml9sb2ZmX3QpYmxvY2sgKiBjaGFubmVsLT5ibG9ja19zaXplOworICBsYmEyY2hzKGxvYywgJmNocywgcGFydCk7CisgIF9kaW9faHdfZXJyb3IgPSBiaW9zZGlzayhESVNLX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC0+cGh5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocy5oZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hzLmN5bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocy5zZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIDwgNTEyID8gMSA6IHNpemUvNTEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWJ1Zik7CisKKyAgaWYoIUhXX09LKCkpCisgIHsKKyAgICBfZGlvX2Vycm9yID0gRVJSX0hBUkRXQVJFOworICAgIHJldHVybiBFRkFVTFQ7CisgIH0KKworICByZXR1cm4gMDsKK30KKworI2lmZGVmIF9fVFVSQk9DX18KKyNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGVycmNvZGVfdCBkb3NfZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKQoreworICAvKgorICAgKiBObyBidWZmZXJzLCBubyBmbHVzaC4uLgorICAgKi8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kb3Npby5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZG9zaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmE4ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZG9zaW8uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIHYxLjAKKyAqCisgKiBEaXNrIEkvTyBpbmNsdWRlIGZpbGUgZm9yIHRoZSBleHQyZnMvRE9TIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgSGFiZXJzYWNrCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9fZGlza2lvX2gKKyNkZWZpbmUgX19kaXNraW9faAorI2lmZGVmIF9fVFVSQk9DX18KKyNpZm5kZWYgX19MQVJHRV9fCisjIGVycm9yICJleHQyZnMvRE9TIGxpYnJhcnkgcmVxdWlyZXMgTEFSR0UgbW9kZWwhIgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVFVSQk9DX18KKyNpbmNsdWRlICJtc2Rvcy5oIgorI2VuZGlmCisKKy8qCisgKiBBIGhlbHBlciBzdHJ1Y3R1cmUgdXNlZCBpbiBMQkEgPT4gQ0hTIGNvbnZlcnNpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgY3lsOyAgICAgLyogQ3lsaW5kZXIgKG9yIHRyYWNrKSAqLworICB1bnNpZ25lZCBzaG9ydCAgICAgICBoZWFkOworICB1bnNpZ25lZCBzaG9ydCAgICAgICBzZWN0b3I7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgIG9mZnNldDsgIC8qIE9mZnNldCBvZiBieXRlIHdpdGhpbiB0aGUgc2VjdG9yICovCit9IENIUzsKKworLyoKKyAqIEFsbCBwYXJ0aXRpb24gZGF0YSB3ZSBuZWVkIGlzIGhlcmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY2hhciAgICAgICAgICAgICAgICAgKmRldjsgIC8qIF9MaW51eF8gZGV2aWNlIG5hbWUgKGxpa2UgIi9kZXYvaGRhMSIpICovCisgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBoeXM7ICAvKiBQaHlzaWNhbCBET1MgZHJpdmUgbnVtYmVyICovCisgIHVuc2lnbmVkIGxvbmcgICAgICAgIHN0YXJ0OyAvKiBMQkEgYWRkcmVzcyBvZiBwYXJ0aXRpb24gc3RhcnQgKi8KKyAgdW5zaWduZWQgbG9uZyAgICAgICAgbGVuOyAgIC8qIGxlbmd0aCBvZiBwYXJ0aXRpb24gaW4gc2VjdG9ycyAqLworICB1bnNpZ25lZCBjaGFyICAgICAgICBwbm87ICAgLyogUGFydGl0aW9uIG51bWJlciAocmVhZCBmcm9tICpkZXYpICovCisKKyAgLyogVGhpcyBwYXJ0aXRpb24ncyBkcml2ZSBnZW9tZXRyeSAqLworICB1bnNpZ25lZCBzaG9ydCAgICAgICBjeWxzOworICB1bnNpZ25lZCBzaG9ydCAgICAgICBoZWFkczsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgc2VjdHM7Cit9IFBBUlRJVElPTjsKKworLyoKKyAqIFBDIHBhcnRpdGlvbiB0YWJsZSBlbnRyeSBmb3JtYXQKKyAqLworI2lmZGVmIF9fREpHUFBfXworI3ByYWdtYSBwYWNrKDEpCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFjdGl2ZTsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgc3RhcnRfaGVhZDsKKyAgdW5zaWduZWQgY2hhciAgICAgICAgc3RhcnRfc2VjOworICB1bnNpZ25lZCBjaGFyICAgICAgICBzdGFydF9jeWw7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIHR5cGU7CisgIHVuc2lnbmVkIGNoYXIgICAgICAgIGVuZF9oZWFkOworICB1bnNpZ25lZCBjaGFyICAgICAgICBlbmRfc2VjOworICB1bnNpZ25lZCBjaGFyICAgICAgICBlbmRfY3lsOworICB1bnNpZ25lZCBsb25nICAgICAgICBmaXJzdF9zZWNfcmVsOworICB1bnNpZ25lZCBsb25nICAgICAgICBzaXplOworfSBQVEFCTEVfRU5UUlk7CisjaWZkZWYgX19ESkdQUF9fCisjcHJhZ21hIHBhY2soKQorI2VuZGlmCisKKy8qCisgKiBJTlQgMHgxMyBvcGVyYXRpb24gY29kZXMKKyAqLworI2RlZmluZSBESVNLX1JFQUQgICAgICAgICAgMHgwMgorI2RlZmluZSBESVNLX1dSSVRFICAgICAgICAgMHgwMworI2RlZmluZSBESVNLX0dFVF9HRU9NRVRSWSAgMHgwOAorI2RlZmluZSBESVNLX1JFQURZICAgICAgICAgMHgxMAorCisvKgorICogRXJyb3JzIHRvIHB1dCBpbiBfZGlvX2Vycm9yCisgKi8KKyNkZWZpbmUgRVJSX0JBRERFViAgICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIEVSUl9IQVJEV0FSRSAgICAgICAweDAwMDAwMDAyTAorI2RlZmluZSBFUlJfTk9UU1VQUCAgICAgICAgMHgwMDAwMDAwM0wKKyNkZWZpbmUgRVJSX05PVEVYVDJGUyAgICAgIDB4MDAwMDAwMDRMCisjZGVmaW5lIEVSUl9FTVBUWVBBUlQgICAgICAweDAwMDAwMDA1TAorI2RlZmluZSBFUlJfTElOVVhTV0FQICAgICAgMHgwMDAwMDAwNkwKKworLyoKKyAqIEZ1bmN0aW9ucyBpbiBkaXNraW8uYworICovCisKKy8qCisgKiBWYXJpYWJsZSBjb250YWlucyBsYXN0IG1vZHVsZSdzIGVycm9yCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICAgICAgICBfZGlvX2Vycm9yOworCisvKgorICogVGhpcyBvbmUgY29udGFpbnMgbGFzdCBoYXJkd2FyZSBlcnJvciAoaWYgX2Rpb19lcnJvciA9PSBFUlJfSEFSRFdBUkUpCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nICAgICAgICBfZGlvX2h3X2Vycm9yOworCisvKgorICogTWFjcm9zIHRvIGNoZWNrIGZvciBkaXNrIGhhcmR3YXJlIGVycm9ycworICovCisjZGVmaW5lIEhXX09LKCkgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwMCkKKyNkZWZpbmUgSFdfQkFEX0NNRCgpICAgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDAxKQorI2RlZmluZSBIV19OT19BRERSX01BUksoKSAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDIpCisjZGVmaW5lIEhXX1dSSVRFX1BST1QoKSAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwMykKKyNkZWZpbmUgSFdfTk9fU0VDVE9SKCkgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDA0KQorI2RlZmluZSBIV19SRVNFVF9GQUlMKCkgICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDUpCisjZGVmaW5lIEhXX0RJU0tfQ0hBTkdFRCgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwNikKKyNkZWZpbmUgSFdfRFJJVkVfRkFJTCgpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDA3KQorI2RlZmluZSBIV19ETUFfT1ZFUlJVTigpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MDgpCisjZGVmaW5lIEhXX0RNQV9CT1VOREFSWSgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwOSkKKyNkZWZpbmUgSFdfQkFEX1NFQ1RPUigpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDBBKQorI2RlZmluZSBIV19CQURfVFJBQ0soKSAgICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MEIpCisjZGVmaW5lIEhXX1VOU1VQUF9UUkFDSygpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgwQykKKyNkZWZpbmUgSFdfQkFEX0NSQ19FQ0MoKSAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDEwKQorI2RlZmluZSBIV19DUkNfRUNDX0NPUlIoKSAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4MTEpCisjZGVmaW5lIEhXX0NPTlRSX0ZBSUwoKSAgICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHgyMCkKKyNkZWZpbmUgSFdfU0VFS19GQUlMKCkgICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweDQwKQorI2RlZmluZSBIV19BVFRBQ0hfRkFJTCgpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4ODApCisjZGVmaW5lIEhXX0RSSVZFX05SRUFEWSgpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHhBQSkKKyNkZWZpbmUgSFdfVU5ERUZfRVJST1IoKSAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweEJCKQorI2RlZmluZSBIV19XUklURV9GQVVMVCgpICAgICgodW5zaWduZWQgY2hhcilfZGlvX2h3X2Vycm9yID09IDB4Q0MpCisjZGVmaW5lIEhXX1NUQVRVU19FUlJPUigpICAgKCh1bnNpZ25lZCBjaGFyKV9kaW9faHdfZXJyb3IgPT0gMHhFMCkKKyNkZWZpbmUgSFdfU0VOU0VfRkFJTCgpICAgICAoKHVuc2lnbmVkIGNoYXIpX2Rpb19od19lcnJvciA9PSAweEZGKQorCisKKy8qCisgKiBPcGVuIHRoZSBzcGVjaWZpZWQgcGFydGl0aW9uLgorICogU3RyaW5nICdkZXYnIG11c3QgaGF2ZSBhIGZvcm1hdDoKKyAqCisgKiAgL2Rldi97c2R8aGR8ZmR9W1hdCisgKgorICogd2hlcmUsCisgKgorICogIG9ubHkgb25lIG9mIHRoZSBvcHRpb24gaW4gY3VybHkgYnJhY2VzIGNhbiBiZSB1c2VkIGFuZCBYIGlzIGFuIG9wdGlvbmFsCisgKiAgcGFydGl0aW9uIG51bWJlciBmb3IgdGhlIGdpdmVuIGRldmljZS4gSWYgWCBpcyBub3Qgc3BlY2lmaWVkLCBmdW5jdGlvbgorICogIHNjYW5zIHRoZSBkcml2ZSdzIHBhcnRpdGlvbiB0YWJsZSBpbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBMaW51eCBleHQyZnMKKyAqICBwYXJ0aXRpb24gKHNpZ25hdHVyZSAweDgzKS4gQWxvbmcgdGhlIHdheSBpdCBkaXZlcyBpbnRvIGV2ZXJ5IGV4dGVuZGVkCisgKiAgcGFydGl0aW9uIGVuY291bnRlcmVkLgorICogIFNjYW4gZW5kcyBpZiBlaXRoZXIgKGEpIHRoZXJlIGFyZSBubyBtb3JlIHVzZWQgcGFydGl0aW9uIGVudHJpZXMsIG9yCisgKiAgKGIpIHRoZXJlIGlzIG5vIFh0aCBwYXJ0aXRpb24uCisgKgorICogUm91dGluZSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgIT0wIG90aGVyd2lzZS4KKyAqLworaW50IG9wZW5fcGFydGl0aW9uKGNoYXIgKmRldik7CisKKyNlbmRpZiAvKiBfX2Rpc2tpb19oICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9kdXBmcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZHVwZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E0ODEyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZHVwZnMuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGR1cGZzLmMgLS0tIGR1cGxpY2F0ZSBhIGV4dDIgZmlsZXN5c3RlbSBoYW5kbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDEsIDIwMDMsIDIwMDUgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK2VycmNvZGVfdCBleHQyZnNfZHVwX2hhbmRsZShleHQyX2ZpbHN5cyBzcmMsIGV4dDJfZmlsc3lzICpkZXN0KQoreworCWV4dDJfZmlsc3lzCWZzOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKHNyYywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSwgJmZzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJKmZzID0gKnNyYzsKKwlmcy0+ZGV2aWNlX25hbWUgPSAwOworCWZzLT5zdXBlciA9IDA7CisJZnMtPm9yaWdfc3VwZXIgPSAwOworCWZzLT5ncm91cF9kZXNjID0gMDsKKwlmcy0+aW5vZGVfbWFwID0gMDsKKwlmcy0+YmxvY2tfbWFwID0gMDsKKwlmcy0+YmFkYmxvY2tzID0gMDsKKwlmcy0+ZGJsaXN0ID0gMDsKKwlmcy0+bW1wX2J1ZiA9IDA7CisJZnMtPm1tcF9jbXAgPSAwOworCWZzLT5tbXBfZmQgPSAtMTsKKworCWlvX2NoYW5uZWxfYnVtcGNvdW50KGZzLT5pbyk7CisJaWYgKGZzLT5pY2FjaGUpCisJCWZzLT5pY2FjaGUtPnJlZmNvdW50Kys7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oc3JjLT5kZXZpY2VfbmFtZSkrMSwgJmZzLT5kZXZpY2VfbmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJc3RyY3B5KGZzLT5kZXZpY2VfbmFtZSwgc3JjLT5kZXZpY2VfbmFtZSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZmcy0+c3VwZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbWNweShmcy0+c3VwZXIsIHNyYy0+c3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZmcy0+b3JpZ19zdXBlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtY3B5KGZzLT5vcmlnX3N1cGVyLCBzcmMtPm9yaWdfc3VwZXIsIFNVUEVSQkxPQ0tfU0laRSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5kZXNjX2Jsb2NrcywgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkmZnMtPmdyb3VwX2Rlc2MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbWNweShmcy0+Z3JvdXBfZGVzYywgc3JjLT5ncm91cF9kZXNjLAorCSAgICAgICAoc2l6ZV90KSBmcy0+ZGVzY19ibG9ja3MgKiBmcy0+YmxvY2tzaXplKTsKKworCWlmIChzcmMtPmlub2RlX21hcCkgeworCQlyZXR2YWwgPSBleHQyZnNfY29weV9iaXRtYXAoc3JjLT5pbm9kZV9tYXAsICZmcy0+aW5vZGVfbWFwKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoc3JjLT5ibG9ja19tYXApIHsKKwkJcmV0dmFsID0gZXh0MmZzX2NvcHlfYml0bWFwKHNyYy0+YmxvY2tfbWFwLCAmZnMtPmJsb2NrX21hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKHNyYy0+YmFkYmxvY2tzKSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfY29weShzcmMtPmJhZGJsb2NrcywgJmZzLT5iYWRibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCWlmIChzcmMtPmRibGlzdCkgeworCQlyZXR2YWwgPSBleHQyZnNfY29weV9kYmxpc3Qoc3JjLT5kYmxpc3QsICZmcy0+ZGJsaXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoc3JjLT5tbXBfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNyYy0+YmxvY2tzaXplLCAmZnMtPm1tcF9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJCW1lbWNweShmcy0+bW1wX2J1Ziwgc3JjLT5tbXBfYnVmLCBzcmMtPmJsb2Nrc2l6ZSk7CisJfQorCWlmIChzcmMtPm1tcF9mZCA+PSAwKSB7CisJCWZzLT5tbXBfZmQgPSBkdXAoc3JjLT5tbXBfZmQpOworCQlpZiAoZnMtPm1tcF9mZCA8IDApIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTU1QX09QRU5fRElSRUNUOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisJaWYgKHNyYy0+bW1wX2NtcCkgeworCQlpbnQgYWxpZ24gPSBleHQyZnNfZ2V0X2Rpb19hbGlnbm1lbnQoc3JjLT5tbXBfZmQpOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtYWxpZ24oc3JjLT5ibG9ja3NpemUsIGFsaWduLAorCQkJCQkgICAgICZmcy0+bW1wX2NtcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJbWVtY3B5KGZzLT5tbXBfY21wLCBzcmMtPm1tcF9jbXAsIHNyYy0+YmxvY2tzaXplKTsKKwl9CisJKmRlc3QgPSBmczsKKwlyZXR1cm4gMDsKK2Vycm91dDoKKwlleHQyZnNfZnJlZShmcyk7CisJcmV0dXJuIHJldHZhbDsKKworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9lMmltYWdlLmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9lMmltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMjBjYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2UyaW1hZ2UuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogZTJpbWFnZS5oIC0tLSBoZWFkZXIgZmlsZSBkZXNjcmliaW5nIHRoZSBleHQyIGltYWdlIGZvcm1hdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqIE5vdGU6IHRoaXMgdXNlcyB0aGUgUE9TSVggSU8gaW50ZXJmYWNlcywgdW5saWtlIG1vc3Qgb2YgdGhlIG90aGVyCisgKiBmdW5jdGlvbnMgaW4gdGhpcyBsaWJyYXJ5LiAgU28gc3VlIG1lLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworc3RydWN0IGV4dDJfaW1hZ2VfaGRyIHsKKwlfX3UzMgltYWdpY19udW1iZXI7CS8qIFRoaXMgbXVzdCBiZSBFWFQyX0VUX01BR0lDX0UySU1BR0UgKi8KKwljaGFyCW1hZ2ljX2Rlc2NyaXB0b3JbMTZdOyAvKiAiRXh0MiBJbWFnZSAxLjAiLCB3LyBudWxsIHBhZGRpbmcgKi8KKwljaGFyCWZzX2hvc3RuYW1lWzY0XTsvKiBIb3N0bmFtZSBvZiBtYWNoaW5lIG9mIGltYWdlICovCisJY2hhcglmc19uZXRhZGRyWzMyXTsJLyogTmV0d29yayBhZGRyZXNzICovCisJX191MzIJZnNfbmV0YWRkcl90eXBlOy8qIDAgPSBJUFY0LCAxID0gSVBWNiwgZXRjLiAqLworCV9fdTMyCWZzX2RldmljZTsJLyogRGV2aWNlIG51bWJlciBvZiBpbWFnZSAqLworCWNoYXIJZnNfZGV2aWNlX25hbWVbNjRdOyAvKiBEZXZpY2UgbmFtZSAqLworCWNoYXIJZnNfdXVpZFsxNl07CS8qIFVVSUQgb2YgZmlsZXN5c3RlbSAqLworCV9fdTMyCWZzX2Jsb2Nrc2l6ZTsJLyogQmxvY2sgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSAqLworCV9fdTMyCWZzX3Jlc2VydmVkWzhdOworCisJX191MzIJaW1hZ2VfZGV2aWNlOwkvKiBEZXZpY2UgbnVtYmVyIG9mIGltYWdlIGZpbGUgKi8KKwlfX3UzMglpbWFnZV9pbm9kZTsJLyogSW5vZGUgbnVtYmVyIG9mIGltYWdlIGZpbGUgKi8KKwlfX3UzMglpbWFnZV90aW1lOwkvKiBUaW1lIG9mIGltYWdlIGNyZWF0aW9uICovCisJX191MzIJaW1hZ2VfcmVzZXJ2ZWRbOF07CisKKwlfX3UzMglvZmZzZXRfc3VwZXI7CS8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBzYiBhbmQgZGVzY3JpcHRvcnMgKi8KKwlfX3UzMglvZmZzZXRfaW5vZGU7CS8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBpbm9kZSB0YWJsZSAgKi8KKwlfX3UzMglvZmZzZXRfaW5vZGVtYXA7IC8qIEJ5dGUgb2Zmc2V0IG9mIHRoZSBpbm9kZSBiaXRtYXBzICovCisJX191MzIJb2Zmc2V0X2Jsb2NrbWFwOyAvKiBCeXRlIG9mZnNldCBvZiB0aGUgaW5vZGUgYml0bWFwcyAqLworCV9fdTMyCW9mZnNldF9yZXNlcnZlZFs4XTsKK307CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHBhbmRkaXIuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4cGFuZGRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTM4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHBhbmRkaXIuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGV4cGFuZC5jIC0tLSBleHBhbmQgYW4gZXh0MmZzIGRpcmVjdG9yeQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgeworCWludAkJZG9uZTsKKwlpbnQJCW5ld2Jsb2NrczsKKwlibGs2NF90CQlnb2FsOworCWVycmNvZGVfdAllcnI7Cit9OworCitzdGF0aWMgaW50IGV4cGFuZF9kaXJfcHJvYyhleHQyX2ZpbHN5cwlmcywKKwkJCSAgIGJsazY0X3QJKmJsb2NrbnIsCisJCQkgICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCSAgIGJsazY0X3QJcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgIGludAkJcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICB2b2lkCQkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBleHBhbmRfZGlyX3N0cnVjdCAqZXMgPSAoc3RydWN0IGV4cGFuZF9kaXJfc3RydWN0ICopIHByaXZfZGF0YTsKKwlibGs2NF90CW5ld19ibGs7CisJY2hhcgkJKmJsb2NrOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoKmJsb2NrbnIpIHsKKwkJaWYgKGJsb2NrY250ID49IDApCisJCQllcy0+Z29hbCA9ICpibG9ja25yOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGJsb2NrY250ICYmCisJICAgIChFWFQyRlNfQjJDKGZzLCBlcy0+Z29hbCkgPT0gRVhUMkZTX0IyQyhmcywgZXMtPmdvYWwrMSkpKQorCQluZXdfYmxrID0gZXMtPmdvYWwrMTsKKwllbHNlIHsKKwkJZXMtPmdvYWwgJj0gfkVYVDJGU19DTFVTVEVSX01BU0soZnMpOworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Jsb2NrMihmcywgZXMtPmdvYWwsIDAsICZuZXdfYmxrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXMtPmVyciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQllcy0+bmV3YmxvY2tzKys7CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIG5ld19ibGssICsxKTsKKwl9CisJaWYgKGJsb2NrY250ID4gMCkgeworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2Rpcl9ibG9jayhmcywgMCwgMCwgJmJsb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXMtPmVyciA9IHJldHZhbDsKKwkJCXJldHVybiBCTE9DS19BQk9SVDsKKwkJfQorCQllcy0+ZG9uZSA9IDE7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9kaXJfYmxvY2soZnMsIG5ld19ibGssIGJsb2NrKTsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQllcy0+ZXJyID0gcmV0dmFsOworCQkJcmV0dXJuIEJMT0NLX0FCT1JUOworCQl9CisJCW1lbXNldChibG9jaywgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBibG9jayk7CisJfQorCWlmIChibG9ja2NudCA+PSAwKQorCQllcy0+Z29hbCA9IG5ld19ibGs7CisJaWYgKHJldHZhbCkgeworCQllcy0+ZXJyID0gcmV0dmFsOworCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCSpibG9ja25yID0gbmV3X2JsazsKKworCWlmIChlcy0+ZG9uZSkKKwkJcmV0dXJuIChCTE9DS19DSEFOR0VEIHwgQkxPQ0tfQUJPUlQpOworCWVsc2UKKwkJcmV0dXJuIEJMT0NLX0NIQU5HRUQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZXhwYW5kX2RpcihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXhwYW5kX2Rpcl9zdHJ1Y3QgZXM7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFmcy0+YmxvY2tfbWFwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19CTE9DS19CSVRNQVA7CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGZzLCBkaXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwllcy5kb25lID0gMDsKKwllcy5lcnIgPSAwOworCWVzLmdvYWwgPSAwOworCWVzLm5ld2Jsb2NrcyA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGRpciwgQkxPQ0tfRkxBR19BUFBFTkQsCisJCQkJICAgICAgIDAsIGV4cGFuZF9kaXJfcHJvYywgJmVzKTsKKworCWlmIChlcy5lcnIpCisJCXJldHVybiBlcy5lcnI7CisJaWYgKCFlcy5kb25lKQorCQlyZXR1cm4gRVhUMl9FVF9FWFBBTkRfRElSX0VSUjsKKworCS8qCisJICogVXBkYXRlIHRoZSBzaXplIGFuZCBibG9jayBjb3VudCBmaWVsZHMgaW4gdGhlIGlub2RlLgorCSAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBkaXIsICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlub2RlLmlfc2l6ZSArPSBmcy0+YmxvY2tzaXplOworCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgZXMubmV3YmxvY2tzKTsKKworCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgZGlyLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXJyLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX2Vyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNmYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX2Vyci5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogZXh0Ml9lcnIuYzoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZDsgcGxlYXNlIGRvIG5vdCBlZGl0IGl0LgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBOXyhhKSBhCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dFtdID0geworCU5fKAkiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjkiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIpLAorCU5fKAkiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIpLAorCU5fKAkiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIpLAorCU5fKAkiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiKSwKKwlOXygJIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiKSwKKwlOXygJIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIiksCisJTl8oCSJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIiksCisJTl8oCSJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIiksCisJTl8oCSJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiKSwKKwlOXygJIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIpLAorCU5fKAkiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiKSwKKwlOXygJIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIiksCisJTl8oCSJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIiksCisJTl8oCSJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIpLAorCU5fKAkiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIpLAorCU5fKAkiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIiksCisJTl8oCSJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiKSwKKwlOXygJIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIpLAorCU5fKAkiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIiksCisJTl8oCSJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiKSwKKwlOXygJIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIpLAorCU5fKAkiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiKSwKKwlOXygJIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIiksCisJTl8oCSJJbGxlZ2FsIGlub2RlIG51bWJlciIpLAorCU5fKAkiSWxsZWdhbCBibG9jayBudW1iZXIiKSwKKwlOXygJIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIiksCisJTl8oCSJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iKSwKKwlOXygJIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiKSwKKwlOXygJIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIpLAorCU5fKAkiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIpLAorCU5fKAkiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIpLAorCU5fKAkiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIiksCisJTl8oCSJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIiksCisJTl8oCSJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiKSwKKwlOXygJIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIpLAorCU5fKAkiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIgKSwKKwlOXygJIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIiApLAorCU5fKAkiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiICksCisJTl8oCSJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiKSwKKwlOXygJIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIpLAorCU5fKAkiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiKSwKKwlOXygJIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIpLAorCU5fKAkiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IiksCisJTl8oCSJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiKSwKKwlOXygJIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIiksCisJTl8oCSJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiKSwKKwlOXygJIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIpLAorCU5fKAkiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiKSwKKwlOXygJIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIpLAorCU5fKAkiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIpLAorCU5fKAkiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiKSwKKwlOXygJIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIpLAorCU5fKAkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiksCisJTl8oCSJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiKSwKKwlOXygJIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iKSwKKwlOXygJIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iKSwKKwlOXygJIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IiksCisJTl8oCSJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIiksCisJTl8oCSJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIpLAorCU5fKAkiRmlsZSBvcGVuIHJlYWQtb25seSIpLAorCU5fKAkiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIiksCisJTl8oCSJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIpLAorCU5fKAkiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iKSwKKwlOXygJIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIpLAorCU5fKAkiRXh0MiBmaWxlIHRvbyBiaWciKSwKKwlOXygJIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIpLAorCU5fKAkiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIpLAorCU5fKAkiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIiksCisJTl8oCSJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iKSwKKwlOXygJIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIpLAorCU5fKAkiSm91cm5hbCBub3QgZm91bmQiKSwKKwlOXygJIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIiksCisJTl8oCSJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiKSwKKwlOXygJIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIiksCisJTl8oCSJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiKSwKKwlOXygJIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIiksCisJTl8oCSJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIpLAorCU5fKAkiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIiksCisJTl8oCSJUREI6IFN1Y2Nlc3MiKSwKKwlOXygJIlREQjogQ29ycnVwdCBkYXRhYmFzZSIpLAorCU5fKAkiVERCOiBJTyBFcnJvciIpLAorCU5fKAkiVERCOiBMb2NraW5nIGVycm9yIiksCisJTl8oCSJUREI6IE91dCBvZiBtZW1vcnkiKSwKKwlOXygJIlREQjogUmVjb3JkIGV4aXN0cyIpLAorCU5fKAkiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIiksCisJTl8oCSJUREI6IEludmFsaWQgcGFyYW1ldGVyIiksCisJTl8oCSJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIpLAorCU5fKAkiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIiksCisJTl8oCSJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiKSwKKwlOXygJIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiKSwKKwlOXygJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIpLAorCU5fKAkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IiksCisJTl8oCSJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IiksCisJTl8oCSJDb3JydXB0IGV4dGVudCBoZWFkZXIiKSwKKwlOXygJIkNvcnJ1cHQgZXh0ZW50IGluZGV4IiksCisJTl8oCSJDb3JydXB0IGV4dGVudCIpLAorCU5fKAkiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIiksCisJTl8oCSJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIpLAorCU5fKAkiTm8gJ25leHQnIGV4dGVudCIpLAorCU5fKAkiTm8gJ3ByZXZpb3VzJyBleHRlbnQiKSwKKwlOXygJIk5vICd1cCcgZXh0ZW50IiksCisJTl8oCSJObyAnZG93bicgZXh0ZW50IiksCisJTl8oCSJObyBjdXJyZW50IG5vZGUiKSwKKwlOXygJIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIpLAorCU5fKAkiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiKSwKKwlOXygJIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIpLAorCU5fKAkiRXh0ZW50IG5vdCBmb3VuZCIpLAorCU5fKAkiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiKSwKKwlOXygJIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIpLAorCU5fKAkiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIpLAorCU5fKAkiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIpLAorCU5fKAkiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIiksCisJTl8oCSJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIiksCisJTl8oCSJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIiksCisJTl8oCSJNTVA6IGZzY2sgYmVpbmcgcnVuIiksCisJTl8oCSJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIpLAorCU5fKAkiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIiksCisJTl8oCSJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIiksCisJTl8oCSJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiKSwKKwlOXygJIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiKSwKKwlOXygJIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIiksCisJTl8oCSJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIiksCisJTl8oCSJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIiksCisJTl8oCSJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iKSwKKwlOXygJIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siKSwKKwlOXygJIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIpLAorCU5fKAkiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIiksCisJTl8oCSJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIpLAorCU5fKAkiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIpLAorCU5fKAkiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIiksCisgICAgMAorfTsKKworc3RydWN0IGVycm9yX3RhYmxlIHsKKyAgICBjaGFyIGNvbnN0ICogY29uc3QgKiBtc2dzOworICAgIGxvbmcgYmFzZTsKKyAgICBpbnQgbl9tc2dzOworfTsKK3N0cnVjdCBldF9saXN0IHsKKyAgICBzdHJ1Y3QgZXRfbGlzdCAqbmV4dDsKKyAgICBjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgKiB0YWJsZTsKK307CitleHRlcm4gc3RydWN0IGV0X2xpc3QgKl9ldF9saXN0OworCitjb25zdCBzdHJ1Y3QgZXJyb3JfdGFibGUgZXRfZXh0Ml9lcnJvcl90YWJsZSA9IHsgdGV4dCwgMjEzMzU3MTMyOEwsIDE1NiB9OworCitzdGF0aWMgc3RydWN0IGV0X2xpc3QgbGluayA9IHsgMCwgMCB9OworCit2b2lkIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7Cit2b2lkIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSh2b2lkKTsKKwordm9pZCBpbml0aWFsaXplX2V4dDJfZXJyb3JfdGFibGUodm9pZCkgeworICAgIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZV9yKCZfZXRfbGlzdCk7Cit9CisKKy8qIEZvciBIZWltZGFsIGNvbXBhdGliaWxpdHkgKi8KK3ZvaWQgaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlX3Ioc3RydWN0IGV0X2xpc3QgKipsaXN0KQoreworICAgIHN0cnVjdCBldF9saXN0ICpldCwgKiplbmQ7CisKKyAgICBmb3IgKGVuZCA9IGxpc3QsIGV0ID0gKmxpc3Q7IGV0OyBlbmQgPSAmZXQtPm5leHQsIGV0ID0gZXQtPm5leHQpCisgICAgICAgIGlmIChldC0+dGFibGUtPm1zZ3MgPT0gdGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICBldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV0X2xpc3QpKTsKKyAgICBpZiAoZXQgPT0gMCkgeworICAgICAgICBpZiAoIWxpbmsudGFibGUpCisgICAgICAgICAgICBldCA9ICZsaW5rOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV0LT50YWJsZSA9ICZldF9leHQyX2Vycm9yX3RhYmxlOworICAgIGV0LT5uZXh0ID0gMDsKKyAgICAqZW5kID0gZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX2Vyci5ldC5pbiBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXJyLmV0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODEyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX2Vyci5ldC5pbgpAQCAtMCwwICsxLDQ3OSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYgVGhlb2RvcmUgVHMnby4gIAorIworIyAlQmVnaW4tSGVhZGVyJQorIyBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisjIExpY2Vuc2UuCisjICVFbmQtSGVhZGVyJQorIworCWVycm9yX3RhYmxlIGV4dDIKKworZWMJRVhUMl9FVF9CQVNFLAorCSJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisKK2VjCUVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUywKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1QsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0JBREJMT0NLU19JVEVSQVRFLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19JTk9ERV9TQ0FOLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVAsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVAsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfYml0bWFwIHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfREJMSVNULAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19JQ09VTlQsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKKworZWMJRVhUMl9FVF9NQUdJQ19QUV9JT19DSEFOTkVMLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCisKK2VjCUVYVDJfRVRfTUFHSUNfRTJJTUFHRSwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKKworZWMJRVhUMl9FVF9NQUdJQ19JTk9ERV9JT19DSEFOTkVMLAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorCitlYwlFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorCitlYwlFWFQyX0VUX0JBRF9NQUdJQywKKwkiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKKworZWMJRVhUMl9FVF9SRVZfVE9PX0hJR0gsCisJIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCisKK2VjCUVYVDJfRVRfUk9fRklMU1lTLAorCSJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKKworZWMJRVhUMl9FVF9HREVTQ19SRUFELAorCSJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorCitlYwlFWFQyX0VUX0dERVNDX1dSSVRFLAorCSJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKKworZWMJRVhUMl9FVF9HREVTQ19CQURfQkxPQ0tfTUFQLAorCSJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorCitlYwlFWFQyX0VUX0dERVNDX0JBRF9JTk9ERV9NQVAsCisJIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCisKK2VjCUVYVDJfRVRfR0RFU0NfQkFEX0lOT0RFX1RBQkxFLAorCSJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCisKK2VjCUVYVDJfRVRfSU5PREVfQklUTUFQX1dSSVRFLAorCSJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCisKK2VjCUVYVDJfRVRfSU5PREVfQklUTUFQX1JFQUQsCisJIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorCitlYwlFWFQyX0VUX0JMT0NLX0JJVE1BUF9XUklURSwKKwkiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCisKK2VjCUVYVDJfRVRfQkxPQ0tfQklUTUFQX1JFQUQsCisJIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCisKK2VjCUVYVDJfRVRfSU5PREVfVEFCTEVfV1JJVEUsCisJIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorCitlYwlFWFQyX0VUX0lOT0RFX1RBQkxFX1JFQUQsCisJIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCisKK2VjCUVYVDJfRVRfTkVYVF9JTk9ERV9SRUFELAorCSJDYW4ndCByZWFkIG5leHQgaW5vZGUiCisKK2VjCUVYVDJfRVRfVU5FWFBFQ1RFRF9CTE9DS19TSVpFLAorCSJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCisKK2VjCUVYVDJfRVRfRElSX0NPUlJVUFRFRCwKKwkiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorCitlYwlFWFQyX0VUX1NIT1JUX1JFQUQsCisJIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKKworZWMJRVhUMl9FVF9TSE9SVF9XUklURSwKKwkiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorCitlYwlFWFQyX0VUX0RJUl9OT19TUEFDRSwKKwkiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorCitlYwlFWFQyX0VUX05PX0lOT0RFX0JJVE1BUCwKKwkiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCisKK2VjCUVYVDJfRVRfTk9fQkxPQ0tfQklUTUFQLAorCSJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKKworZWMJRVhUMl9FVF9CQURfSU5PREVfTlVNLAorCSJJbGxlZ2FsIGlub2RlIG51bWJlciIKKworZWMJRVhUMl9FVF9CQURfQkxPQ0tfTlVNLAorCSJJbGxlZ2FsIGJsb2NrIG51bWJlciIKKworZWMJRVhUMl9FVF9FWFBBTkRfRElSX0VSUiwKKwkiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCisKK2VjCUVYVDJfRVRfVE9PU01BTEwsCisJIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKKworZWMJRVhUMl9FVF9CQURfQkxPQ0tfTUFSSywKKwkiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworZWMJRVhUMl9FVF9CQURfQkxPQ0tfVU5NQVJLLAorCSJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0JMT0NLX1RFU1QsCisJIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0lOT0RFX01BUkssCisJIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0lOT0RFX1VOTUFSSywKKwkiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorCitlYwlFWFQyX0VUX0JBRF9JTk9ERV9URVNULAorCSJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorCitlYwlFWFQyX0VUX0ZVREdFX0JMT0NLX0JJVE1BUF9FTkQsCisJIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKKworZWMJRVhUMl9FVF9GVURHRV9JTk9ERV9CSVRNQVBfRU5ELAorCSJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCisKK2VjCUVYVDJfRVRfQkFEX0lORF9CTE9DSywKKwkiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIgCisKK2VjCUVYVDJfRVRfQkFEX0RJTkRfQkxPQ0ssCisJIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIiAKKworZWMJRVhUMl9FVF9CQURfVElORF9CTE9DSywKKwkiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiIAorCitlYwlFWFQyX0VUX05FUV9CTE9DS19CSVRNQVAsCisJIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKKworZWMJRVhUMl9FVF9ORVFfSU5PREVfQklUTUFQLAorCSJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCisKK2VjCUVYVDJfRVRfQkFEX0RFVklDRV9OQU1FLAorCSJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKKworZWMJRVhUMl9FVF9NSVNTSU5HX0lOT0RFX1RBQkxFLAorCSJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCisKK2VjCUVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLLAorCSJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCisKK2VjCUVYVDJfRVRfQkFEX0dFTkVSSUNfTUFSSywKKwkiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorCitlYwlFWFQyX0VUX0JBRF9HRU5FUklDX1VOTUFSSywKKwkiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCisKK2VjCUVYVDJfRVRfQkFEX0dFTkVSSUNfVEVTVCwKKwkiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorCitlYwlFWFQyX0VUX1NZTUxJTktfTE9PUCwKKwkiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorCitlYwlFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQsCisJIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorCitlYwlFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSwKKwkiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorCitlYwlFWFQyX0VUX1VOU1VQUF9GRUFUVVJFLAorCSJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorCitlYwlFWFQyX0VUX1JPX1VOU1VQUF9GRUFUVVJFLAorCSJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKKworZWMJRVhUMl9FVF9MTFNFRUtfRkFJTEVELAorCSJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCisKK2VjCUVYVDJfRVRfTk9fTUVNT1JZLAorCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCisKK2VjCUVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVCwKKwkiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorCitlYwlFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUwsCisJIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCisKK2VjCUVYVDJfRVRfSU5PREVfQUxMT0NfRkFJTCwKKwkiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKKworZWMJRVhUMl9FVF9OT19ESVJFQ1RPUlksCisJIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorCitlYwlFWFQyX0VUX1RPT19NQU5ZX1JFRlMsCisJIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCisKK2VjCUVYVDJfRVRfRklMRV9OT1RfRk9VTkQsCisJIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorCitlYwlFWFQyX0VUX0ZJTEVfUk8sCisJIkZpbGUgb3BlbiByZWFkLW9ubHkiCisKK2VjCUVYVDJfRVRfREJfTk9UX0ZPVU5ELAorCSJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCisKK2VjCUVYVDJfRVRfRElSX0VYSVNUUywKKwkiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCisKK2VjCUVYVDJfRVRfVU5JTVBMRU1FTlRFRCwKKwkiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCisKK2VjCUVYVDJfRVRfQ0FOQ0VMX1JFUVVFU1RFRCwKKwkiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorCitlYwlFWFQyX0VUX0ZJTEVfVE9PX0JJRywKKwkiRXh0MiBmaWxlIHRvbyBiaWciCisKK2VjCUVYVDJfRVRfSk9VUk5BTF9OT1RfQkxPQ0ssCisJIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKKworZWMJRVhUMl9FVF9OT19KT1VSTkFMX1NCLAorCSJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorCitlYwlFWFQyX0VUX0pPVVJOQUxfVE9PX1NNQUxMLAorCSJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCisKK2VjCUVYVDJfRVRfSk9VUk5BTF9VTlNVUFBfVkVSU0lPTiwKKwkiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorCitlYwlFWFQyX0VUX0xPQURfRVhUX0pPVVJOQUwsCisJIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKKworZWMJRVhUMl9FVF9OT19KT1VSTkFMLAorCSJKb3VybmFsIG5vdCBmb3VuZCIKKworZWMJRVhUMl9FVF9ESVJIQVNIX1VOU1VQUCwKKwkiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCisKK2VjCUVYVDJfRVRfQkFEX0VBX0JMT0NLX05VTSwKKwkiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorCitlYwlFWFQyX0VUX1RPT19NQU5ZX0lOT0RFUywKKwkiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCisKK2VjCUVYVDJfRVRfTk9UX0lNQUdFX0ZJTEUsCisJIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKKworZWMJRVhUMl9FVF9SRVNfR0RUX0JMT0NLUywKKwkiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCisKK2VjCUVYVDJfRVRfUkVTSVpFX0lOT0RFX0NPUlJVUFQsCisJIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorCitlYwlFWFQyX0VUX1NFVF9CTUFQX05PX0lORCwKKwkiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorCitlYwlFWFQyX0VUX1REQl9TVUNDRVNTLAorCSJUREI6IFN1Y2Nlc3MiCisKK2VjCUVYVDJfRVRfVERCX0VSUl9DT1JSVVBULAorCSJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCisKK2VjCUVYVDJfRVRfVERCX0VSUl9JTywKKwkiVERCOiBJTyBFcnJvciIKKworZWMJRVhUMl9FVF9UREJfRVJSX0xPQ0ssCisJIlREQjogTG9ja2luZyBlcnJvciIKKworZWMJRVhUMl9FVF9UREJfRVJSX09PTSwKKwkiVERCOiBPdXQgb2YgbWVtb3J5IgorCitlYwlFWFQyX0VUX1REQl9FUlJfRVhJU1RTLAorCSJUREI6IFJlY29yZCBleGlzdHMiCisKK2VjCUVYVDJfRVRfVERCX0VSUl9OT0xPQ0ssCisJIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKKworZWMJRVhUMl9FVF9UREJfRVJSX0VJTlZBTCwKKwkiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKKworZWMJRVhUMl9FVF9UREJfRVJSX05PRVhJU1QsCisJIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorCitlYwlFWFQyX0VUX1REQl9FUlJfUkRPTkxZLAorCSJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCisKK2VjCUVYVDJfRVRfREJMSVNUX0VNUFRZLAorCSJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCisKK2VjCUVYVDJfRVRfUk9fQkxPQ0tfSVRFUkFURSwKKwkiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKKworZWMJRVhUMl9FVF9NQUdJQ19FWFRFTlRfUEFUSCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorCitlYwlFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQNjQsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorCitlYwlFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDY0LAorCSJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCisKK2VjCUVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQNjQsCisJIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xMywKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xNCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xNSwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xNiwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xNywKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xOCwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKKworZWMJRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xOSwKKwkiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKKworZWMJRVhUMl9FVF9FWFRFTlRfSEVBREVSX0JBRCwKKwkiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorCitlYwlFWFQyX0VUX0VYVEVOVF9JTkRFWF9CQUQsCisJIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorCitlYwlFWFQyX0VUX0VYVEVOVF9MRUFGX0JBRCwKKwkiQ29ycnVwdCBleHRlbnQiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PX1NQQUNFLAorCSJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCisKK2VjCUVYVDJfRVRfSU5PREVfTk9UX0VYVEVOVCwKKwkiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PX05FWFQsCisJIk5vICduZXh0JyBleHRlbnQiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PX1BSRVYsCisJIk5vICdwcmV2aW91cycgZXh0ZW50IgorCitlYwlFWFQyX0VUX0VYVEVOVF9OT19VUCwKKwkiTm8gJ3VwJyBleHRlbnQiCisKK2VjCUVYVDJfRVRfRVhURU5UX05PX0RPV04sCisJIk5vICdkb3duJyBleHRlbnQiCisKK2VjCUVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFLAorCSJObyBjdXJyZW50IG5vZGUiCisKK2VjCUVYVDJfRVRfT1BfTk9UX1NVUFBPUlRFRCwKKwkiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorCitlYwlFWFQyX0VUX0NBTlRfSU5TRVJUX0VYVEVOVCwKKwkiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCisKK2VjCUVYVDJfRVRfQ0FOVF9TUExJVF9FWFRFTlQsCisJIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKKworZWMJRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5ELAorCSJFeHRlbnQgbm90IGZvdW5kIgorCitlYwlFWFQyX0VUX0VYVEVOVF9OT1RfU1VQUE9SVEVELAorCSJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKKworZWMJRVhUMl9FVF9FWFRFTlRfSU5WQUxJRF9MRU5HVEgsCisJIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKKworZWMJRVhUMl9FVF9JT19DSEFOTkVMX05PX1NVUFBPUlRfNjQsCisJIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCisKK2VjCUVYVDJfRVRfTk9fTVRBQl9GSUxFLAorCSJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorCitlYwlFWFQyX0VUX0NBTlRfVVNFX0xFR0FDWV9CSVRNQVBTLAorCSJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCisKK2VjCUVYVDJfRVRfTU1QX01BR0lDX0lOVkFMSUQsCisJIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCisKK2VjCUVYVDJfRVRfTU1QX0ZBSUxFRCwKKwkiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKKworZWMJRVhUMl9FVF9NTVBfRlNDS19PTiwKKwkiTU1QOiBmc2NrIGJlaW5nIHJ1biIKKworZWMJRVhUMl9FVF9NTVBfQkFEX0JMT0NLLAorCSJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKKworZWMJRVhUMl9FVF9NTVBfVU5LTk9XTl9TRVEsCisJIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKKworZWMJRVhUMl9FVF9NTVBfQ0hBTkdFX0FCT1JULAorCSJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorCitlYwlFWFQyX0VUX01NUF9PUEVOX0RJUkVDVCwKKwkiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorCitlYwlFWFQyX0VUX0JBRF9ERVNDX1NJWkUsCisJIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCisKK2VjCUVYVDJfRVRfSU5PREVfQ1NVTV9JTlZBTElELAorCSJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKKworZWMJRVhUMl9FVF9JTk9ERV9CSVRNQVBfQ1NVTV9JTlZBTElELAorCSJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorCitlYwlFWFQyX0VUX0VYVEVOVF9DU1VNX0lOVkFMSUQsCisJIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCisKK2VjCUVYVDJfRVRfRElSX05PX1NQQUNFX0ZPUl9DU1VNLAorCSJEaXJlY3RvcnkgYmxvY2sgZG9lcyBub3QgaGF2ZSBzcGFjZSBmb3IgY2hlY2tzdW0iCisKK2VjCUVYVDJfRVRfRElSX0NTVU1fSU5WQUxJRCwKKwkiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKKworZWMJRVhUMl9FVF9FWFRfQVRUUl9DU1VNX0lOVkFMSUQsCisJIkV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBibG9jayIKKworZWMJRVhUMl9FVF9TQl9DU1VNX0lOVkFMSUQsCisJIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKKworZWMJRVhUMl9FVF9VTktOT1dOX0NTVU0sCisJIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorCitlYwlFWFQyX0VUX01NUF9DU1VNX0lOVkFMSUQsCisJIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCisKK2VjCUVYVDJfRVRfRklMRV9FWElTVFMsCisJIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKKworCWVuZApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyMjQxOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXJyLmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBleHQyX2Vyci5oOgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOyBwbGVhc2UgZG8gbm90IGVkaXQgaXQuCisgKi8KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKworI2RlZmluZSBFWFQyX0VUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzI4TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTICAgICAgICAgICAgICAoMjEzMzU3MTMyOUwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfQkFEQkxPQ0tTX0xJU1QgICAgICAgICAgICAgKDIxMzM1NzEzMzBMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19JVEVSQVRFICAgICAgICAgICgyMTMzNTcxMzMxTCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19JTk9ERV9TQ0FOICAgICAgICAgICAgICAgICAoMjEzMzU3MTMzMkwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCAgICAgICAgICAgICAgICAgKDIxMzM1NzEzMzNMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCAgICAgICAgICAgICgyMTMzNTcxMzM0TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19JT19NQU5BR0VSICAgICAgICAgICAgICAgICAoMjEzMzU3MTMzNUwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQICAgICAgICAgICAgICAgKDIxMzM1NzEzMzZMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCAgICAgICAgICAgICAgICgyMTMzNTcxMzM3TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCAgICAgICAgICAgICAoMjEzMzU3MTMzOEwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMICAgICAgICAgICAgKDIxMzM1NzEzMzlMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0RCTElTVCAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzQwTCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19JQ09VTlQgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM0MUwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfUFFfSU9fQ0hBTk5FTCAgICAgICAgICAgICAgKDIxMzM1NzEzNDJMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzQzTCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19FMklNQUdFICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM0NEwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfSU5PREVfSU9fQ0hBTk5FTCAgICAgICAgICAgKDIxMzM1NzEzNDVMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUgICAgICAgICAgICAgICgyMTMzNTcxMzQ2TCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfTUFHSUMgICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM0N0wpCisjZGVmaW5lIEVYVDJfRVRfUkVWX1RPT19ISUdIICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNDhMKQorI2RlZmluZSBFWFQyX0VUX1JPX0ZJTFNZUyAgICAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzQ5TCkKKyNkZWZpbmUgRVhUMl9FVF9HREVTQ19SRUFEICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM1MEwpCisjZGVmaW5lIEVYVDJfRVRfR0RFU0NfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNTFMKQorI2RlZmluZSBFWFQyX0VUX0dERVNDX0JBRF9CTE9DS19NQVAgICAgICAgICAgICAgICgyMTMzNTcxMzUyTCkKKyNkZWZpbmUgRVhUMl9FVF9HREVTQ19CQURfSU5PREVfTUFQICAgICAgICAgICAgICAoMjEzMzU3MTM1M0wpCisjZGVmaW5lIEVYVDJfRVRfR0RFU0NfQkFEX0lOT0RFX1RBQkxFICAgICAgICAgICAgKDIxMzM1NzEzNTRMKQorI2RlZmluZSBFWFQyX0VUX0lOT0RFX0JJVE1BUF9XUklURSAgICAgICAgICAgICAgICgyMTMzNTcxMzU1TCkKKyNkZWZpbmUgRVhUMl9FVF9JTk9ERV9CSVRNQVBfUkVBRCAgICAgICAgICAgICAgICAoMjEzMzU3MTM1NkwpCisjZGVmaW5lIEVYVDJfRVRfQkxPQ0tfQklUTUFQX1dSSVRFICAgICAgICAgICAgICAgKDIxMzM1NzEzNTdMKQorI2RlZmluZSBFWFQyX0VUX0JMT0NLX0JJVE1BUF9SRUFEICAgICAgICAgICAgICAgICgyMTMzNTcxMzU4TCkKKyNkZWZpbmUgRVhUMl9FVF9JTk9ERV9UQUJMRV9XUklURSAgICAgICAgICAgICAgICAoMjEzMzU3MTM1OUwpCisjZGVmaW5lIEVYVDJfRVRfSU5PREVfVEFCTEVfUkVBRCAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNjBMKQorI2RlZmluZSBFWFQyX0VUX05FWFRfSU5PREVfUkVBRCAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzYxTCkKKyNkZWZpbmUgRVhUMl9FVF9VTkVYUEVDVEVEX0JMT0NLX1NJWkUgICAgICAgICAgICAoMjEzMzU3MTM2MkwpCisjZGVmaW5lIEVYVDJfRVRfRElSX0NPUlJVUFRFRCAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNjNMKQorI2RlZmluZSBFWFQyX0VUX1NIT1JUX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzY0TCkKKyNkZWZpbmUgRVhUMl9FVF9TSE9SVF9XUklURSAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM2NUwpCisjZGVmaW5lIEVYVDJfRVRfRElSX05PX1NQQUNFICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNjZMKQorI2RlZmluZSBFWFQyX0VUX05PX0lOT0RFX0JJVE1BUCAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzY3TCkKKyNkZWZpbmUgRVhUMl9FVF9OT19CTE9DS19CSVRNQVAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM2OEwpCisjZGVmaW5lIEVYVDJfRVRfQkFEX0lOT0RFX05VTSAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNjlMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9CTE9DS19OVU0gICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzcwTCkKKyNkZWZpbmUgRVhUMl9FVF9FWFBBTkRfRElSX0VSUiAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM3MUwpCisjZGVmaW5lIEVYVDJfRVRfVE9PU01BTEwgICAgICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNzJMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9CTE9DS19NQVJLICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzczTCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfQkxPQ0tfVU5NQVJLICAgICAgICAgICAgICAgICAoMjEzMzU3MTM3NEwpCisjZGVmaW5lIEVYVDJfRVRfQkFEX0JMT0NLX1RFU1QgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNzVMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9JTk9ERV9NQVJLICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzc2TCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfSU5PREVfVU5NQVJLICAgICAgICAgICAgICAgICAoMjEzMzU3MTM3N0wpCisjZGVmaW5lIEVYVDJfRVRfQkFEX0lOT0RFX1RFU1QgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzNzhMKQorI2RlZmluZSBFWFQyX0VUX0ZVREdFX0JMT0NLX0JJVE1BUF9FTkQgICAgICAgICAgICgyMTMzNTcxMzc5TCkKKyNkZWZpbmUgRVhUMl9FVF9GVURHRV9JTk9ERV9CSVRNQVBfRU5EICAgICAgICAgICAoMjEzMzU3MTM4MEwpCisjZGVmaW5lIEVYVDJfRVRfQkFEX0lORF9CTE9DSyAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzEzODFMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9ESU5EX0JMT0NLICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzgyTCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfVElORF9CTE9DSyAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM4M0wpCisjZGVmaW5lIEVYVDJfRVRfTkVRX0JMT0NLX0JJVE1BUCAgICAgICAgICAgICAgICAgKDIxMzM1NzEzODRMKQorI2RlZmluZSBFWFQyX0VUX05FUV9JTk9ERV9CSVRNQVAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzg1TCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfREVWSUNFX05BTUUgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM4NkwpCisjZGVmaW5lIEVYVDJfRVRfTUlTU0lOR19JTk9ERV9UQUJMRSAgICAgICAgICAgICAgKDIxMzM1NzEzODdMKQorI2RlZmluZSBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSyAgICAgICAgICAgICAgICgyMTMzNTcxMzg4TCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfR0VORVJJQ19NQVJLICAgICAgICAgICAgICAgICAoMjEzMzU3MTM4OUwpCisjZGVmaW5lIEVYVDJfRVRfQkFEX0dFTkVSSUNfVU5NQVJLICAgICAgICAgICAgICAgKDIxMzM1NzEzOTBMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9HRU5FUklDX1RFU1QgICAgICAgICAgICAgICAgICgyMTMzNTcxMzkxTCkKKyNkZWZpbmUgRVhUMl9FVF9TWU1MSU5LX0xPT1AgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM5MkwpCisjZGVmaW5lIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRCAgICAgICAgICAgICAgKDIxMzM1NzEzOTNMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRSAgICAgICAgICgyMTMzNTcxMzk0TCkKKyNkZWZpbmUgRVhUMl9FVF9VTlNVUFBfRkVBVFVSRSAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM5NUwpCisjZGVmaW5lIEVYVDJfRVRfUk9fVU5TVVBQX0ZFQVRVUkUgICAgICAgICAgICAgICAgKDIxMzM1NzEzOTZMKQorI2RlZmluZSBFWFQyX0VUX0xMU0VFS19GQUlMRUQgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxMzk3TCkKKyNkZWZpbmUgRVhUMl9FVF9OT19NRU1PUlkgICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTM5OEwpCisjZGVmaW5lIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVCAgICAgICAgICAgICAgICAgKDIxMzM1NzEzOTlMKQorI2RlZmluZSBFWFQyX0VUX0JMT0NLX0FMTE9DX0ZBSUwgICAgICAgICAgICAgICAgICgyMTMzNTcxNDAwTCkKKyNkZWZpbmUgRVhUMl9FVF9JTk9ERV9BTExPQ19GQUlMICAgICAgICAgICAgICAgICAoMjEzMzU3MTQwMUwpCisjZGVmaW5lIEVYVDJfRVRfTk9fRElSRUNUT1JZICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MDJMKQorI2RlZmluZSBFWFQyX0VUX1RPT19NQU5ZX1JFRlMgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDAzTCkKKyNkZWZpbmUgRVhUMl9FVF9GSUxFX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQwNEwpCisjZGVmaW5lIEVYVDJfRVRfRklMRV9STyAgICAgICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MDVMKQorI2RlZmluZSBFWFQyX0VUX0RCX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDA2TCkKKyNkZWZpbmUgRVhUMl9FVF9ESVJfRVhJU1RTICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQwN0wpCisjZGVmaW5lIEVYVDJfRVRfVU5JTVBMRU1FTlRFRCAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MDhMKQorI2RlZmluZSBFWFQyX0VUX0NBTkNFTF9SRVFVRVNURUQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDA5TCkKKyNkZWZpbmUgRVhUMl9FVF9GSUxFX1RPT19CSUcgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQxMEwpCisjZGVmaW5lIEVYVDJfRVRfSk9VUk5BTF9OT1RfQkxPQ0sgICAgICAgICAgICAgICAgKDIxMzM1NzE0MTFMKQorI2RlZmluZSBFWFQyX0VUX05PX0pPVVJOQUxfU0IgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDEyTCkKKyNkZWZpbmUgRVhUMl9FVF9KT1VSTkFMX1RPT19TTUFMTCAgICAgICAgICAgICAgICAoMjEzMzU3MTQxM0wpCisjZGVmaW5lIEVYVDJfRVRfSk9VUk5BTF9VTlNVUFBfVkVSU0lPTiAgICAgICAgICAgKDIxMzM1NzE0MTRMKQorI2RlZmluZSBFWFQyX0VUX0xPQURfRVhUX0pPVVJOQUwgICAgICAgICAgICAgICAgICgyMTMzNTcxNDE1TCkKKyNkZWZpbmUgRVhUMl9FVF9OT19KT1VSTkFMICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQxNkwpCisjZGVmaW5lIEVYVDJfRVRfRElSSEFTSF9VTlNVUFAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MTdMKQorI2RlZmluZSBFWFQyX0VUX0JBRF9FQV9CTE9DS19OVU0gICAgICAgICAgICAgICAgICgyMTMzNTcxNDE4TCkKKyNkZWZpbmUgRVhUMl9FVF9UT09fTUFOWV9JTk9ERVMgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQxOUwpCisjZGVmaW5lIEVYVDJfRVRfTk9UX0lNQUdFX0ZJTEUgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MjBMKQorI2RlZmluZSBFWFQyX0VUX1JFU19HRFRfQkxPQ0tTICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDIxTCkKKyNkZWZpbmUgRVhUMl9FVF9SRVNJWkVfSU5PREVfQ09SUlVQVCAgICAgICAgICAgICAoMjEzMzU3MTQyMkwpCisjZGVmaW5lIEVYVDJfRVRfU0VUX0JNQVBfTk9fSU5EICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MjNMKQorI2RlZmluZSBFWFQyX0VUX1REQl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDI0TCkKKyNkZWZpbmUgRVhUMl9FVF9UREJfRVJSX0NPUlJVUFQgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQyNUwpCisjZGVmaW5lIEVYVDJfRVRfVERCX0VSUl9JTyAgICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MjZMKQorI2RlZmluZSBFWFQyX0VUX1REQl9FUlJfTE9DSyAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDI3TCkKKyNkZWZpbmUgRVhUMl9FVF9UREJfRVJSX09PTSAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQyOEwpCisjZGVmaW5lIEVYVDJfRVRfVERCX0VSUl9FWElTVFMgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MjlMKQorI2RlZmluZSBFWFQyX0VUX1REQl9FUlJfTk9MT0NLICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDMwTCkKKyNkZWZpbmUgRVhUMl9FVF9UREJfRVJSX0VJTlZBTCAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQzMUwpCisjZGVmaW5lIEVYVDJfRVRfVERCX0VSUl9OT0VYSVNUICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MzJMKQorI2RlZmluZSBFWFQyX0VUX1REQl9FUlJfUkRPTkxZICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDMzTCkKKyNkZWZpbmUgRVhUMl9FVF9EQkxJU1RfRU1QVFkgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQzNEwpCisjZGVmaW5lIEVYVDJfRVRfUk9fQkxPQ0tfSVRFUkFURSAgICAgICAgICAgICAgICAgKDIxMzM1NzE0MzVMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0VYVEVOVF9QQVRIICAgICAgICAgICAgICAgICgyMTMzNTcxNDM2TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUDY0ICAgICAgICAgICAoMjEzMzU3MTQzN0wpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQNjQgICAgICAgICAgICAgKDIxMzM1NzE0MzhMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUDY0ICAgICAgICAgICAgICgyMTMzNTcxNDM5TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xMyAgICAgICAgICAgICAgICAoMjEzMzU3MTQ0MEwpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfUkVTRVJWRURfMTQgICAgICAgICAgICAgICAgKDIxMzM1NzE0NDFMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE1ICAgICAgICAgICAgICAgICgyMTMzNTcxNDQyTCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xNiAgICAgICAgICAgICAgICAoMjEzMzU3MTQ0M0wpCisjZGVmaW5lIEVYVDJfRVRfTUFHSUNfUkVTRVJWRURfMTcgICAgICAgICAgICAgICAgKDIxMzM1NzE0NDRMKQorI2RlZmluZSBFWFQyX0VUX01BR0lDX1JFU0VSVkVEXzE4ICAgICAgICAgICAgICAgICgyMTMzNTcxNDQ1TCkKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19SRVNFUlZFRF8xOSAgICAgICAgICAgICAgICAoMjEzMzU3MTQ0NkwpCisjZGVmaW5lIEVYVDJfRVRfRVhURU5UX0hFQURFUl9CQUQgICAgICAgICAgICAgICAgKDIxMzM1NzE0NDdMKQorI2RlZmluZSBFWFQyX0VUX0VYVEVOVF9JTkRFWF9CQUQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDQ4TCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRFTlRfTEVBRl9CQUQgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ0OUwpCisjZGVmaW5lIEVYVDJfRVRfRVhURU5UX05PX1NQQUNFICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0NTBMKQorI2RlZmluZSBFWFQyX0VUX0lOT0RFX05PVF9FWFRFTlQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDUxTCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ1MkwpCisjZGVmaW5lIEVYVDJfRVRfRVhURU5UX05PX1BSRVYgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0NTNMKQorI2RlZmluZSBFWFQyX0VUX0VYVEVOVF9OT19VUCAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDU0TCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRFTlRfTk9fRE9XTiAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ1NUwpCisjZGVmaW5lIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0NTZMKQorI2RlZmluZSBFWFQyX0VUX09QX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDU3TCkKKyNkZWZpbmUgRVhUMl9FVF9DQU5UX0lOU0VSVF9FWFRFTlQgICAgICAgICAgICAgICAoMjEzMzU3MTQ1OEwpCisjZGVmaW5lIEVYVDJfRVRfQ0FOVF9TUExJVF9FWFRFTlQgICAgICAgICAgICAgICAgKDIxMzM1NzE0NTlMKQorI2RlZmluZSBFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDYwTCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRFTlRfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAoMjEzMzU3MTQ2MUwpCisjZGVmaW5lIEVYVDJfRVRfRVhURU5UX0lOVkFMSURfTEVOR1RIICAgICAgICAgICAgKDIxMzM1NzE0NjJMKQorI2RlZmluZSBFWFQyX0VUX0lPX0NIQU5ORUxfTk9fU1VQUE9SVF82NCAgICAgICAgICgyMTMzNTcxNDYzTCkKKyNkZWZpbmUgRVhUMl9FVF9OT19NVEFCX0ZJTEUgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ2NEwpCisjZGVmaW5lIEVYVDJfRVRfQ0FOVF9VU0VfTEVHQUNZX0JJVE1BUFMgICAgICAgICAgKDIxMzM1NzE0NjVMKQorI2RlZmluZSBFWFQyX0VUX01NUF9NQUdJQ19JTlZBTElEICAgICAgICAgICAgICAgICgyMTMzNTcxNDY2TCkKKyNkZWZpbmUgRVhUMl9FVF9NTVBfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ2N0wpCisjZGVmaW5lIEVYVDJfRVRfTU1QX0ZTQ0tfT04gICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0NjhMKQorI2RlZmluZSBFWFQyX0VUX01NUF9CQURfQkxPQ0sgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDY5TCkKKyNkZWZpbmUgRVhUMl9FVF9NTVBfVU5LTk9XTl9TRVEgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ3MEwpCisjZGVmaW5lIEVYVDJfRVRfTU1QX0NIQU5HRV9BQk9SVCAgICAgICAgICAgICAgICAgKDIxMzM1NzE0NzFMKQorI2RlZmluZSBFWFQyX0VUX01NUF9PUEVOX0RJUkVDVCAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDcyTCkKKyNkZWZpbmUgRVhUMl9FVF9CQURfREVTQ19TSVpFICAgICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ3M0wpCisjZGVmaW5lIEVYVDJfRVRfSU5PREVfQ1NVTV9JTlZBTElEICAgICAgICAgICAgICAgKDIxMzM1NzE0NzRMKQorI2RlZmluZSBFWFQyX0VUX0lOT0RFX0JJVE1BUF9DU1VNX0lOVkFMSUQgICAgICAgICgyMTMzNTcxNDc1TCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRFTlRfQ1NVTV9JTlZBTElEICAgICAgICAgICAgICAoMjEzMzU3MTQ3NkwpCisjZGVmaW5lIEVYVDJfRVRfRElSX05PX1NQQUNFX0ZPUl9DU1VNICAgICAgICAgICAgKDIxMzM1NzE0NzdMKQorI2RlZmluZSBFWFQyX0VUX0RJUl9DU1VNX0lOVkFMSUQgICAgICAgICAgICAgICAgICgyMTMzNTcxNDc4TCkKKyNkZWZpbmUgRVhUMl9FVF9FWFRfQVRUUl9DU1VNX0lOVkFMSUQgICAgICAgICAgICAoMjEzMzU3MTQ3OUwpCisjZGVmaW5lIEVYVDJfRVRfU0JfQ1NVTV9JTlZBTElEICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0ODBMKQorI2RlZmluZSBFWFQyX0VUX1VOS05PV05fQ1NVTSAgICAgICAgICAgICAgICAgICAgICgyMTMzNTcxNDgxTCkKKyNkZWZpbmUgRVhUMl9FVF9NTVBfQ1NVTV9JTlZBTElEICAgICAgICAgICAgICAgICAoMjEzMzU3MTQ4MkwpCisjZGVmaW5lIEVYVDJfRVRfRklMRV9FWElTVFMgICAgICAgICAgICAgICAgICAgICAgKDIxMzM1NzE0ODNMKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBlcnJvcl90YWJsZSBldF9leHQyX2Vycm9yX3RhYmxlOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlKHZvaWQpOworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhlaW1kYWwgKi8KK2V4dGVybiB2b2lkIGluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZV9yKHN0cnVjdCBldF9saXN0ICoqbGlzdCk7CisKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9leHQyICgyMTMzNTcxMzI4TCkKKworLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy4uLiAqLworI2RlZmluZSBpbml0X2V4dDJfZXJyX3RibCBpbml0aWFsaXplX2V4dDJfZXJyb3JfdGFibGUKKyNkZWZpbmUgZXh0Ml9lcnJfYmFzZSBFUlJPUl9UQUJMRV9CQVNFX2V4dDIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU0OGQxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgIEZpbGU6IGxpbnV4L2V4dDJfZXh0X2F0dHIuaAorCisgIE9uLWRpc2sgZm9ybWF0IG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIHRoZSBleHQyIGZpbGVzeXN0ZW0uCisKKyAgKEMpIDIwMDAgQW5kcmVhcyBHcnVlbmJhY2hlciwgPGEuZ3J1ZW5iYWNoZXJAY29tcHV0ZXIub3JnPgorKi8KKworI2lmbmRlZiBfRVhUMl9FWFRfQVRUUl9ICisjZGVmaW5lIF9FWFQyX0VYVF9BVFRSX0gKKy8qIE1hZ2ljIHZhbHVlIGluIGF0dHJpYnV0ZSBibG9ja3MgKi8KKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9NQUdJQ192MQkJMHhFQTAxMDAwMAorI2RlZmluZSBFWFQyX0VYVF9BVFRSX01BR0lDCQkweEVBMDIwMDAwCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gb25lIGF0dHJpYnV0ZSBibG9jayAqLworI2RlZmluZSBFWFQyX0VYVF9BVFRSX1JFRkNPVU5UX01BWAkxMDI0CisKK3N0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciB7CisJX191MzIJaF9tYWdpYzsJLyogbWFnaWMgbnVtYmVyIGZvciBpZGVudGlmaWNhdGlvbiAqLworCV9fdTMyCWhfcmVmY291bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCAqLworCV9fdTMyCWhfYmxvY2tzOwkvKiBudW1iZXIgb2YgZGlzayBibG9ja3MgdXNlZCAqLworCV9fdTMyCWhfaGFzaDsJCS8qIGhhc2ggdmFsdWUgb2YgYWxsIGF0dHJpYnV0ZXMgKi8KKwlfX3UzMgloX3Jlc2VydmVkWzRdOwkvKiB6ZXJvIHJpZ2h0IG5vdyAqLworfTsKKworc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgeworCV9fdTgJZV9uYW1lX2xlbjsJLyogbGVuZ3RoIG9mIG5hbWUgKi8KKwlfX3U4CWVfbmFtZV9pbmRleDsJLyogYXR0cmlidXRlIG5hbWUgaW5kZXggKi8KKwlfX3UxNgllX3ZhbHVlX29mZnM7CS8qIG9mZnNldCBpbiBkaXNrIGJsb2NrIG9mIHZhbHVlICovCisJX191MzIJZV92YWx1ZV9ibG9jazsJLyogZGlzayBibG9jayBhdHRyaWJ1dGUgaXMgc3RvcmVkIG9uIChuL2kpICovCisJX191MzIJZV92YWx1ZV9zaXplOwkvKiBzaXplIG9mIGF0dHJpYnV0ZSB2YWx1ZSAqLworCV9fdTMyCWVfaGFzaDsJCS8qIGhhc2ggdmFsdWUgb2YgbmFtZSBhbmQgdmFsdWUgKi8KKyNpZiAwCisJY2hhcgllX25hbWVbMF07CS8qIGF0dHJpYnV0ZSBuYW1lICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9QQURfQklUUwkJMgorI2RlZmluZSBFWFQyX0VYVF9BVFRSX1BBRAkJKCh1bnNpZ25lZCkgMTw8RVhUMl9FWFRfQVRUUl9QQURfQklUUykKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9ST1VORAkJKEVYVDJfRVhUX0FUVFJfUEFELTEpCisjZGVmaW5lIEVYVDJfRVhUX0FUVFJfTEVOKG5hbWVfbGVuKSBcCisJKCgobmFtZV9sZW4pICsgRVhUMl9FWFRfQVRUUl9ST1VORCArIFwKKwlzaXplb2Yoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkpKSAmIH5FWFQyX0VYVF9BVFRSX1JPVU5EKQorI2RlZmluZSBFWFQyX0VYVF9BVFRSX05FWFQoZW50cnkpIFwKKwkoIChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKSggXAorCSAgKGNoYXIgKikoZW50cnkpICsgRVhUMl9FWFRfQVRUUl9MRU4oKGVudHJ5KS0+ZV9uYW1lX2xlbikpICkKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9TSVpFKHNpemUpIFwKKwkoKChzaXplKSArIEVYVDJfRVhUX0FUVFJfUk9VTkQpICYgfkVYVDJfRVhUX0FUVFJfUk9VTkQpCisjZGVmaW5lIEVYVDJfRVhUX0lTX0xBU1RfRU5UUlkoZW50cnkpICgqKChfX3UzMiAqKShlbnRyeSkpID09IDBVTCkKKyNkZWZpbmUgRVhUMl9FWFRfQVRUUl9OQU1FKGVudHJ5KSBcCisJKCgoY2hhciAqKSAoZW50cnkpKSArIHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSkpCisjZGVmaW5lIEVYVDJfWEFUVFJfTEVOKG5hbWVfbGVuKSBcCisJKCgobmFtZV9sZW4pICsgRVhUMl9FWFRfQVRUUl9ST1VORCArIFwKKwlzaXplb2Yoc3RydWN0IGV4dDJfeGF0dHJfZW50cnkpKSAmIH5FWFQyX0VYVF9BVFRSX1JPVU5EKQorI2RlZmluZSBFWFQyX1hBVFRSX1NJWkUoc2l6ZSkgXAorCSgoKHNpemUpICsgRVhUMl9FWFRfQVRUUl9ST1VORCkgJiB+RVhUMl9FWFRfQVRUUl9ST1VORCkKKworI2lmZGVmIF9fS0VSTkVMX18KKyMgaWZkZWYgQ09ORklHX0VYVDJfRlNfRVhUX0FUVFIKK2V4dGVybiBpbnQgZXh0Ml9nZXRfZXh0X2F0dHIoc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QsIGludCk7CitleHRlcm4gaW50IGV4dDJfc2V0X2V4dF9hdHRyKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQgZXh0Ml9leHRfYXR0cl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQgZXh0Ml9leHRfYXR0cl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gaW50IGV4dDJfZXh0X2F0dHJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGV4dDJfZXh0X2F0dHJfZG9uZSh2b2lkKTsKKyMgZWxzZQorIyAgZGVmaW5lIGV4dDJfZ2V0X2V4dF9hdHRyIE5VTEwKKyMgIGRlZmluZSBleHQyX3NldF9leHRfYXR0ciBOVUxMCisjIGVuZGlmCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAgLyogX0VYVDJfRVhUX0FUVFJfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml9mcy5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDdiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX2ZzLmgKQEAgLTAsMCArMSw5MDUgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogIGZyb20KKyAqCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9taW5peF9mcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqLworCisjaWZuZGVmIF9MSU5VWF9FWFQyX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0VYVDJfRlNfSAorCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4JCS8qIENoYW5nZWQgZnJvbSBsaW51eC90eXBlcy5oICovCisKKy8qCisgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGVzeXN0ZW0gY29uc3RhbnRzL3N0cnVjdHVyZXMKKyAqLworCisvKgorICogRGVmaW5lIEVYVDJGU19ERUJVRyB0byBwcm9kdWNlIGRlYnVnIG1lc3NhZ2VzCisgKi8KKyN1bmRlZiBFWFQyRlNfREVCVUcKKworLyoKKyAqIERlZmluZSBFWFQyX1BSRUFMTE9DQVRFIHRvIHByZWFsbG9jYXRlIGRhdGEgYmxvY2tzIGZvciBleHBhbmRpbmcgZmlsZXMKKyAqLworI2RlZmluZSBFWFQyX1BSRUFMTE9DQVRFCisjZGVmaW5lIEVYVDJfREVGQVVMVF9QUkVBTExPQ19CTE9DS1MJOAorCisvKgorICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgRVhUMkZTX0RBVEUJCSI5NS8wOC8wOSIKKyNkZWZpbmUgRVhUMkZTX1ZFUlNJT04JCSIwLjViIgorCisvKgorICogU3BlY2lhbCBpbm9kZSBudW1iZXJzCisgKi8KKyNkZWZpbmUgRVhUMl9CQURfSU5PCQkgMQkvKiBCYWQgYmxvY2tzIGlub2RlICovCisjZGVmaW5lIEVYVDJfUk9PVF9JTk8JCSAyCS8qIFJvb3QgaW5vZGUgKi8KKyNkZWZpbmUgRVhUNF9VU1JfUVVPVEFfSU5PCSAzCS8qIFVzZXIgcXVvdGEgaW5vZGUgKi8KKyNkZWZpbmUgRVhUNF9HUlBfUVVPVEFfSU5PCSA0CS8qIEdyb3VwIHF1b3RhIGlub2RlICovCisjZGVmaW5lIEVYVDJfQk9PVF9MT0FERVJfSU5PCSA1CS8qIEJvb3QgbG9hZGVyIGlub2RlICovCisjZGVmaW5lIEVYVDJfVU5ERUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9SRVNJWkVfSU5PCQkgNwkvKiBSZXNlcnZlZCBncm91cCBkZXNjcmlwdG9ycyBpbm9kZSAqLworI2RlZmluZSBFWFQyX0pPVVJOQUxfSU5PCSA4CS8qIEpvdXJuYWwgaW5vZGUgKi8KKyNkZWZpbmUgRVhUMl9FWENMVURFX0lOTwkgOQkvKiBUaGUgImV4Y2x1ZGUiIGlub2RlLCBmb3Igc25hcHNob3RzICovCisjZGVmaW5lIEVYVDRfUkVQTElDQV9JTk8JMTAJLyogVXNlZCBieSBub24tdXBzdHJlYW0gZmVhdHVyZSAqLworCisvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgZm9yIG9sZCBleHQyIGZpbGVzeXN0ZW1zICovCisjZGVmaW5lIEVYVDJfR09PRF9PTERfRklSU1RfSU5PCTExCisKKy8qCisgKiBUaGUgc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIG1hZ2ljIG51bWJlcgorICovCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMJMHhFRjUzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIEVYVDJfU0Ioc2IpCSgmKChzYiktPnUuZXh0Ml9zYikpCisjZWxzZQorLyogQXNzdW1lIHRoYXQgdXNlciBtb2RlIHByb2dyYW1zIGFyZSBwYXNzaW5nIGluIGFuIGV4dDJmcyBzdXBlcmJsb2NrLCBub3QKKyAqIGEga2VybmVsIHN0cnVjdCBzdXBlcl9ibG9jay4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxsIHRoZSBmZWF0dXJlLXRlc3QKKyAqIG1hY3JvcyBmcm9tIHVzZXIgbGFuZC4gKi8KKyNkZWZpbmUgRVhUMl9TQihzYikJKHNiKQorI2VuZGlmCisKKy8qCisgKiBNYXhpbWFsIGNvdW50IG9mIGxpbmtzIHRvIGEgZmlsZQorICovCisjZGVmaW5lIEVYVDJfTElOS19NQVgJCTY1MDAwCisKKy8qCisgKiBNYWNyby1pbnN0cnVjdGlvbnMgdXNlZCB0byBtYW5hZ2Ugc2V2ZXJhbCBibG9jayBzaXplcworICovCisjZGVmaW5lIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFCQkxMAkvKiAxMDI0ICovCisjZGVmaW5lIEVYVDJfTUFYX0JMT0NLX0xPR19TSVpFCQkxNgkvKiA2NTUzNiAqLworI2RlZmluZSBFWFQyX01JTl9CTE9DS19TSVpFCSgxIDw8IEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFKQorI2RlZmluZSBFWFQyX01BWF9CTE9DS19TSVpFCSgxIDw8IEVYVDJfTUFYX0JMT0NLX0xPR19TSVpFKQorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgRVhUMl9CTE9DS19TSVpFKHMpCSgocyktPnNfYmxvY2tzaXplKQorI2RlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKQkoKHMpLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLX0JJVFMocykJKEVYVDJfU0IocyktPmFkZHJfcGVyX2Jsb2NrX2JpdHMpCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKQkoRVhUMl9TQihzKS0+c19pbm9kZV9zaXplKQorI2RlZmluZSBFWFQyX0ZJUlNUX0lOTyhzKQkoRVhUMl9TQihzKS0+c19maXJzdF9pbm8pCisjZWxzZQorI2RlZmluZSBFWFQyX0JMT0NLX1NJWkUocykJKEVYVDJfTUlOX0JMT0NLX1NJWkUgPDwgKHMpLT5zX2xvZ19ibG9ja19zaXplKQorI2RlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKQkoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKQkoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gXAorCQkJCSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiAocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykJKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/IFwKKwkJCQkgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gOiAocyktPnNfZmlyc3RfaW5vKQorI2VuZGlmCisjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0socykJKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZihfX3UzMikpCisKKy8qCisgKiBNYWNyby1pbnN0cnVjdGlvbnMgdXNlZCB0byBtYW5hZ2UgYWxsb2NhdGlvbiBjbHVzdGVycworICovCisjZGVmaW5lIEVYVDJfTUlOX0NMVVNURVJfTE9HX1NJWkUJRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUKKyNkZWZpbmUgRVhUMl9NQVhfQ0xVU1RFUl9MT0dfU0laRQkyOQkvKiA1MTJNQiAgKi8KKyNkZWZpbmUgRVhUMl9NSU5fQ0xVU1RFUl9TSVpFCQlFWFQyX01JTl9CTE9DS19TSVpFCisjZGVmaW5lIEVYVDJfTUFYX0NMVVNURVJfU0laRQkJKDEgPDwgRVhUMl9NQVhfQ0xVU1RFUl9MT0dfU0laRSkKKyNkZWZpbmUgRVhUMl9DTFVTVEVSX1NJWkUocykJCShFWFQyX01JTl9CTE9DS19TSVpFIDw8IFwKKwkJCQkJCShzKS0+c19sb2dfY2x1c3Rlcl9zaXplKQorI2RlZmluZSBFWFQyX0NMVVNURVJfU0laRV9CSVRTKHMpCSgocyktPnNfbG9nX2NsdXN0ZXJfc2l6ZSArIDEwKQorCisvKgorICogTWFjcm8taW5zdHJ1Y3Rpb25zIHVzZWQgdG8gbWFuYWdlIGZyYWdtZW50cworICoKKyAqIE5vdGU6IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LCBmb3IgdGhlIGR1bXAgcHJvZ3JhbS4KKyAqIEV4dDIvMy80IHdpbGwgbmV2ZXIgc3VwcG9ydCBmcmFnbWVudHMuLi4uCisgKi8KKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19TSVpFICAgICAgICAgICAgICBFWFQyX01JTl9CTE9DS19TSVpFCisjZGVmaW5lIEVYVDJfTUFYX0ZSQUdfU0laRSAgICAgICAgICAgICAgRVhUMl9NQVhfQkxPQ0tfU0laRQorI2RlZmluZSBFWFQyX01JTl9GUkFHX0xPR19TSVpFICAgICAgICAgIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFCisjZGVmaW5lIEVYVDJfRlJBR19TSVpFKHMpCQlFWFQyX0JMT0NLX1NJWkUocykKKyNkZWZpbmUgRVhUMl9GUkFHU19QRVJfQkxPQ0socykJCTEKKworLyoKKyAqIEFDTCBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCBleHQyX2FjbF9oZWFkZXIJLyogSGVhZGVyIG9mIEFjY2VzcyBDb250cm9sIExpc3RzICovCit7CisJX191MzIJYWNsaF9zaXplOworCV9fdTMyCWFjbGhfZmlsZV9jb3VudDsKKwlfX3UzMglhY2xoX2FjbGVfY291bnQ7CisJX191MzIJYWNsaF9maXJzdF9hY2xlOworfTsKKworc3RydWN0IGV4dDJfYWNsX2VudHJ5CS8qIEFjY2VzcyBDb250cm9sIExpc3QgRW50cnkgKi8KK3sKKwlfX3UzMglhY2xlX3NpemU7CisJX191MTYJYWNsZV9wZXJtczsJLyogQWNjZXNzIHBlcm1pc3Npb25zICovCisJX191MTYJYWNsZV90eXBlOwkvKiBUeXBlIG9mIGVudHJ5ICovCisJX191MTYJYWNsZV90YWc7CS8qIFVzZXIgb3IgZ3JvdXAgaWRlbnRpdHkgKi8KKwlfX3UxNglhY2xlX3BhZDE7CisJX191MzIJYWNsZV9uZXh0OwkvKiBQb2ludGVyIG9uIG5leHQgZW50cnkgZm9yIHRoZSAqLworCQkJCQkvKiBzYW1lIGlub2RlIG9yIG9uIG5leHQgZnJlZSBlbnRyeSAqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGJsb2NrcyBncm91cCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKwlfX3UzMgliZ19ibG9ja19iaXRtYXA7CS8qIEJsb2NrcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV9iaXRtYXA7CS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV90YWJsZTsJCS8qIElub2RlcyB0YWJsZSBibG9jayAqLworCV9fdTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX3VzZWRfZGlyc19jb3VudDsJLyogRGlyZWN0b3JpZXMgY291bnQgKi8KKwlfX3UxNgliZ19mbGFnczsKKwlfX3UzMgliZ19leGNsdWRlX2JpdG1hcF9sbzsJLyogRXhjbHVkZSBiaXRtYXAgZm9yIHNuYXBzaG90cyAqLworCV9fdTE2CWJnX2Jsb2NrX2JpdG1hcF9jc3VtX2xvOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIExTQiAqLworCV9fdTE2CWJnX2lub2RlX2JpdG1hcF9jc3VtX2xvOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIExTQiAqLworCV9fdTE2CWJnX2l0YWJsZV91bnVzZWQ7CS8qIFVudXNlZCBpbm9kZXMgY291bnQgKi8KKwlfX3UxNgliZ19jaGVja3N1bTsJCS8qIGNyYzE2KHNfdXVpZCtncm91cF9udW0rZ3JvdXBfZGVzYykqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGJsb2NrcyBncm91cCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBleHQ0X2dyb3VwX2Rlc2MKK3sKKwlfX3UzMgliZ19ibG9ja19iaXRtYXA7CS8qIEJsb2NrcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV9iaXRtYXA7CS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KKwlfX3UzMgliZ19pbm9kZV90YWJsZTsJCS8qIElub2RlcyB0YWJsZSBibG9jayAqLworCV9fdTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLworCV9fdTE2CWJnX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX3VzZWRfZGlyc19jb3VudDsJLyogRGlyZWN0b3JpZXMgY291bnQgKi8KKwlfX3UxNgliZ19mbGFnczsJCS8qIEVYVDRfQkdfZmxhZ3MgKElOT0RFX1VOSU5JVCwgZXRjKSAqLworCV9fdTMyCWJnX2V4Y2x1ZGVfYml0bWFwX2xvOwkvKiBFeGNsdWRlIGJpdG1hcCBmb3Igc25hcHNob3RzICovCisJX191MTYJYmdfYmxvY2tfYml0bWFwX2NzdW1fbG87LyogY3JjMzJjKHNfdXVpZCtncnBfbnVtK2JpdG1hcCkgTFNCICovCisJX191MTYJYmdfaW5vZGVfYml0bWFwX2NzdW1fbG87LyogY3JjMzJjKHNfdXVpZCtncnBfbnVtK2JpdG1hcCkgTFNCICovCisJX191MTYJYmdfaXRhYmxlX3VudXNlZDsJLyogVW51c2VkIGlub2RlcyBjb3VudCAqLworCV9fdTE2CWJnX2NoZWNrc3VtOwkJLyogY3JjMTYoc2JfdXVpZCtncm91cCtkZXNjKSAqLworCV9fdTMyCWJnX2Jsb2NrX2JpdG1hcF9oaTsJLyogQmxvY2tzIGJpdG1hcCBibG9jayBNU0IgKi8KKwlfX3UzMgliZ19pbm9kZV9iaXRtYXBfaGk7CS8qIElub2RlcyBiaXRtYXAgYmxvY2sgTVNCICovCisJX191MzIJYmdfaW5vZGVfdGFibGVfaGk7CS8qIElub2RlcyB0YWJsZSBibG9jayBNU0IgKi8KKwlfX3UxNgliZ19mcmVlX2Jsb2Nrc19jb3VudF9oaTsvKiBGcmVlIGJsb2NrcyBjb3VudCBNU0IgKi8KKwlfX3UxNgliZ19mcmVlX2lub2Rlc19jb3VudF9oaTsvKiBGcmVlIGlub2RlcyBjb3VudCBNU0IgKi8KKwlfX3UxNgliZ191c2VkX2RpcnNfY291bnRfaGk7CS8qIERpcmVjdG9yaWVzIGNvdW50IE1TQiAqLworCV9fdTE2CWJnX2l0YWJsZV91bnVzZWRfaGk7CS8qIFVudXNlZCBpbm9kZXMgY291bnQgTVNCICovCisJX191MzIJYmdfZXhjbHVkZV9iaXRtYXBfaGk7CS8qIEV4Y2x1ZGUgYml0bWFwIGJsb2NrIE1TQiAqLworCV9fdTE2CWJnX2Jsb2NrX2JpdG1hcF9jc3VtX2hpOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIE1TQiAqLworCV9fdTE2CWJnX2lub2RlX2JpdG1hcF9jc3VtX2hpOy8qIGNyYzMyYyhzX3V1aWQrZ3JwX251bStiaXRtYXApIE1TQiAqLworCV9fdTMyCWJnX3Jlc2VydmVkOworfTsKKworI2RlZmluZSBFWFQyX0JHX0lOT0RFX1VOSU5JVAkweDAwMDEgLyogSW5vZGUgdGFibGUvYml0bWFwIG5vdCBpbml0aWFsaXplZCAqLworI2RlZmluZSBFWFQyX0JHX0JMT0NLX1VOSU5JVAkweDAwMDIgLyogQmxvY2sgYml0bWFwIG5vdCBpbml0aWFsaXplZCAqLworI2RlZmluZSBFWFQyX0JHX0lOT0RFX1pFUk9FRAkweDAwMDQgLyogT24tZGlzayBpdGFibGUgaW5pdGlhbGl6ZWQgdG8gemVybyAqLworCisvKgorICogRGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIGRpcmVjdG9yeSBpbmRleGluZyBmZWF0dXJlCisgKgorICogTm90ZTogYWxsIG9mIHRoZSBtdWx0aWJ5dGUgaW50ZWdlciBmaWVsZHMgYXJlIGxpdHRsZSBlbmRpYW4uCisgKi8KKworLyoKKyAqIE5vdGU6IGR4X3Jvb3RfaW5mbyBpcyBsYWlkIG91dCBzbyB0aGF0IGlmIGl0IHNob3VsZCBzb21laG93IGdldAorICogb3ZlcmxhaWQgYnkgYSBkaXJlbnQgdGhlIHR3byBsb3cgYml0cyBvZiB0aGUgaGFzaCB2ZXJzaW9uIHdpbGwgYmUKKyAqIHplcm8uICBUaGVyZWZvcmUsIHRoZSBoYXNoIHZlcnNpb24gbW9kIDQgc2hvdWxkIG5ldmVyIGJlIDAuCisgKiBTaW5jZXJlbHksIHRoZSBwYXJhbm9pYSBkZXBhcnRtZW50LgorICovCitzdHJ1Y3QgZXh0Ml9keF9yb290X2luZm8geworCV9fdTMyIHJlc2VydmVkX3plcm87CisJX191OCBoYXNoX3ZlcnNpb247IC8qIDAgbm93LCAxIGF0IHJlbGVhc2UgKi8KKwlfX3U4IGluZm9fbGVuZ3RoOyAvKiA4ICovCisJX191OCBpbmRpcmVjdF9sZXZlbHM7CisJX191OCB1bnVzZWRfZmxhZ3M7Cit9OworCisjZGVmaW5lIEVYVDJfSEFTSF9MRUdBQ1kJCTAKKyNkZWZpbmUgRVhUMl9IQVNIX0hBTEZfTUQ0CQkxCisjZGVmaW5lIEVYVDJfSEFTSF9URUEJCQkyCisjZGVmaW5lIEVYVDJfSEFTSF9MRUdBQ1lfVU5TSUdORUQJMyAvKiByZXNlcnZlZCBmb3IgdXNlcnNwYWNlIGxpYiAqLworI2RlZmluZSBFWFQyX0hBU0hfSEFMRl9NRDRfVU5TSUdORUQJNCAvKiByZXNlcnZlZCBmb3IgdXNlcnNwYWNlIGxpYiAqLworI2RlZmluZSBFWFQyX0hBU0hfVEVBX1VOU0lHTkVECQk1IC8qIHJlc2VydmVkIGZvciB1c2Vyc3BhY2UgbGliICovCisKKyNkZWZpbmUgRVhUMl9IQVNIX0ZMQUdfSU5DT01QQVQJMHgxCisKK3N0cnVjdCBleHQyX2R4X2VudHJ5IHsKKwlfX3UzMiBoYXNoOworCV9fdTMyIGJsb2NrOworfTsKKworc3RydWN0IGV4dDJfZHhfY291bnRsaW1pdCB7CisJX191MTYgbGltaXQ7CisJX191MTYgY291bnQ7Cit9OworCisKKy8qCisgKiBNYWNyby1pbnN0cnVjdGlvbnMgdXNlZCB0byBtYW5hZ2UgZ3JvdXAgZGVzY3JpcHRvcnMKKyAqLworI2RlZmluZSBFWFQyX01JTl9ERVNDX1NJWkUgICAgICAgICAgICAgMzIKKyNkZWZpbmUgRVhUMl9NSU5fREVTQ19TSVpFXzY0QklUICAgICAgIDY0CisjZGVmaW5lIEVYVDJfTUFYX0RFU0NfU0laRSAgICAgICAgICAgICBFWFQyX01JTl9CTE9DS19TSVpFCisjZGVmaW5lIEVYVDJfREVTQ19TSVpFKHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoRVhUMl9TQihzKS0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSA/IFwKKwkocyktPnNfZGVzY19zaXplIDogRVhUMl9NSU5fREVTQ19TSVpFKQorCisjZGVmaW5lIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChzKQkoRVhUMl9TQihzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQorI2RlZmluZSBFWFQyX0lOT0RFU19QRVJfR1JPVVAocykJKEVYVDJfU0IocyktPnNfaW5vZGVzX3Blcl9ncm91cCkKKyNkZWZpbmUgRVhUMl9DTFVTVEVSU19QRVJfR1JPVVAocykJKEVYVDJfU0IocyktPnNfY2x1c3RlcnNfcGVyX2dyb3VwKQorI2RlZmluZSBFWFQyX0lOT0RFU19QRVJfQkxPQ0socykJKEVYVDJfQkxPQ0tfU0laRShzKS9FWFQyX0lOT0RFX1NJWkUocykpCisvKiBsaW1pdHMgaW1wb3NlZCBieSAxNi1iaXQgdmFsdWUgZ2RfZnJlZV97YmxvY2tzLGlub2RlfV9jb3VudCAqLworI2RlZmluZSBFWFQyX01BWF9CTE9DS1NfUEVSX0dST1VQKHMpCSgoKCh1bnNpZ25lZCkgMSA8PCAxNikgLSA4KSAqCVwKKwkJCQkJIChFWFQyX0NMVVNURVJfU0laRShzKSAvIFwKKwkJCQkJICBFWFQyX0JMT0NLX1NJWkUocykpKQorI2RlZmluZSBFWFQyX01BWF9DTFVTVEVSU19QRVJfR1JPVVAocykJKCgodW5zaWduZWQpIDEgPDwgMTYpIC0gOCkKKyNkZWZpbmUgRVhUMl9NQVhfSU5PREVTX1BFUl9HUk9VUChzKQkoKCh1bnNpZ25lZCkgMSA8PCAxNikgLSBcCisJCQkJCSBFWFQyX0lOT0RFU19QRVJfQkxPQ0socykpCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBFWFQyX0RFU0NfUEVSX0JMT0NLKHMpCQkoRVhUMl9TQihzKS0+c19kZXNjX3Blcl9ibG9jaykKKyNkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DS19CSVRTKHMpCShFWFQyX1NCKHMpLT5zX2Rlc2NfcGVyX2Jsb2NrX2JpdHMpCisjZWxzZQorI2RlZmluZSBFWFQyX0RFU0NfUEVSX0JMT0NLKHMpCQkoRVhUMl9CTE9DS19TSVpFKHMpIC8gRVhUMl9ERVNDX1NJWkUocykpCisjZW5kaWYKKworLyoKKyAqIENvbnN0YW50cyByZWxhdGl2ZSB0byB0aGUgZGF0YSBibG9ja3MKKyAqLworI2RlZmluZSBFWFQyX05ESVJfQkxPQ0tTCQkxMgorI2RlZmluZSBFWFQyX0lORF9CTE9DSwkJCUVYVDJfTkRJUl9CTE9DS1MKKyNkZWZpbmUgRVhUMl9ESU5EX0JMT0NLCQkJKEVYVDJfSU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUMl9USU5EX0JMT0NLCQkJKEVYVDJfRElORF9CTE9DSyArIDEpCisjZGVmaW5lIEVYVDJfTl9CTE9DS1MJCQkoRVhUMl9USU5EX0JMT0NLICsgMSkKKworLyoKKyAqIElub2RlIGZsYWdzCisgKi8KKyNkZWZpbmUgRVhUMl9TRUNSTV9GTAkJCTB4MDAwMDAwMDEgLyogU2VjdXJlIGRlbGV0aW9uICovCisjZGVmaW5lIEVYVDJfVU5STV9GTAkJCTB4MDAwMDAwMDIgLyogVW5kZWxldGUgKi8KKyNkZWZpbmUgRVhUMl9DT01QUl9GTAkJCTB4MDAwMDAwMDQgLyogQ29tcHJlc3MgZmlsZSAqLworI2RlZmluZSBFWFQyX1NZTkNfRkwJCQkweDAwMDAwMDA4IC8qIFN5bmNocm9ub3VzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgRVhUMl9JTU1VVEFCTEVfRkwJCTB4MDAwMDAwMTAgLyogSW1tdXRhYmxlIGZpbGUgKi8KKyNkZWZpbmUgRVhUMl9BUFBFTkRfRkwJCQkweDAwMDAwMDIwIC8qIHdyaXRlcyB0byBmaWxlIG1heSBvbmx5IGFwcGVuZCAqLworI2RlZmluZSBFWFQyX05PRFVNUF9GTAkJCTB4MDAwMDAwNDAgLyogZG8gbm90IGR1bXAgZmlsZSAqLworI2RlZmluZSBFWFQyX05PQVRJTUVfRkwJCQkweDAwMDAwMDgwIC8qIGRvIG5vdCB1cGRhdGUgYXRpbWUgKi8KKy8qIFJlc2VydmVkIGZvciBjb21wcmVzc2lvbiB1c2FnZS4uLiAqLworI2RlZmluZSBFWFQyX0RJUlRZX0ZMCQkJMHgwMDAwMDEwMAorI2RlZmluZSBFWFQyX0NPTVBSQkxLX0ZMCQkweDAwMDAwMjAwIC8qIE9uZSBvciBtb3JlIGNvbXByZXNzZWQgY2x1c3RlcnMgKi8KKyNkZWZpbmUgRVhUMl9OT0NPTVBSX0ZMCQkJMHgwMDAwMDQwMCAvKiBBY2Nlc3MgcmF3IGNvbXByZXNzZWQgZGF0YSAqLworCS8qIG5iOiB3YXMgcHJldmlvdXNseSBFWFQyX0VDT01QUl9GTCAqLworI2RlZmluZSBFWFQ0X0VOQ1JZUFRfRkwJCQkweDAwMDAwODAwIC8qIGVuY3J5cHRlZCBpbm9kZSAqLworLyogRW5kIGNvbXByZXNzaW9uIGZsYWdzIC0tLSBtYXliZSBub3QgYWxsIHVzZWQgKi8KKyNkZWZpbmUgRVhUMl9CVFJFRV9GTAkJCTB4MDAwMDEwMDAgLyogYnRyZWUgZm9ybWF0IGRpciAqLworI2RlZmluZSBFWFQyX0lOREVYX0ZMCQkJMHgwMDAwMTAwMCAvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEVYVDJfSU1BR0lDX0ZMCQkJMHgwMDAwMjAwMAorI2RlZmluZSBFWFQzX0pPVVJOQUxfREFUQV9GTAkJMHgwMDAwNDAwMCAvKiBmaWxlIGRhdGEgc2hvdWxkIGJlIGpvdXJuYWxlZCAqLworI2RlZmluZSBFWFQyX05PVEFJTF9GTAkJCTB4MDAwMDgwMDAgLyogZmlsZSB0YWlsIHNob3VsZCBub3QgYmUgbWVyZ2VkICovCisjZGVmaW5lIEVYVDJfRElSU1lOQ19GTCAJCTB4MDAwMTAwMDAgLyogU3luY2hyb25vdXMgZGlyZWN0b3J5IG1vZGlmaWNhdGlvbnMgKi8KKyNkZWZpbmUgRVhUMl9UT1BESVJfRkwJCQkweDAwMDIwMDAwIC8qIFRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMqLworI2RlZmluZSBFWFQ0X0hVR0VfRklMRV9GTCAgICAgICAgICAgICAgIDB4MDAwNDAwMDAgLyogU2V0IHRvIGVhY2ggaHVnZSBmaWxlICovCisjZGVmaW5lIEVYVDRfRVhURU5UU19GTCAJCTB4MDAwODAwMDAgLyogSW5vZGUgdXNlcyBleHRlbnRzICovCisjZGVmaW5lIEVYVDRfRUFfSU5PREVfRkwJICAgICAgICAweDAwMjAwMDAwIC8qIElub2RlIHVzZWQgZm9yIGxhcmdlIEVBICovCisvKiBFWFQ0X0VPRkJMT0NLU19GTCAweDAwNDAwMDAwIHdhcyBoZXJlICovCisjZGVmaW5lIEZTX05PQ09XX0ZMCQkJMHgwMDgwMDAwMCAvKiBEbyBub3QgY293IGZpbGUgKi8KKyNkZWZpbmUgRVhUNF9TTkFQRklMRV9GTAkJMHgwMTAwMDAwMCAgLyogSW5vZGUgaXMgYSBzbmFwc2hvdCAqLworI2RlZmluZSBFWFQ0X1NOQVBGSUxFX0RFTEVURURfRkwJMHgwNDAwMDAwMCAgLyogU25hcHNob3QgaXMgYmVpbmcgZGVsZXRlZCAqLworI2RlZmluZSBFWFQ0X1NOQVBGSUxFX1NIUlVOS19GTAkJMHgwODAwMDAwMCAgLyogU25hcHNob3Qgc2hyaW5rIGhhcyBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgRVhUMl9SRVNFUlZFRF9GTAkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KKworI2RlZmluZSBFWFQyX0ZMX1VTRVJfVklTSUJMRQkJMHgwMDRCREZGRiAvKiBVc2VyIHZpc2libGUgZmxhZ3MgKi8KKyNkZWZpbmUgRVhUMl9GTF9VU0VSX01PRElGSUFCTEUJCTB4MDA0QjgwRkYgLyogVXNlciBtb2RpZmlhYmxlIGZsYWdzICovCisKKy8qCisgKiBpb2N0bCBjb21tYW5kcworICovCisKKy8qIFVzZWQgZm9yIG9ubGluZSByZXNpemUgKi8KK3N0cnVjdCBleHQyX25ld19ncm91cF9pbnB1dCB7CisJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTMyIGJsb2NrX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGJsb2NrIGJpdG1hcCAqLworCV9fdTMyIGlub2RlX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIGJpdG1hcCAqLworCV9fdTMyIGlub2RlX3RhYmxlOwkvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgdGFibGUgc3RhcnQgKi8KKwlfX3UzMiBibG9ja3NfY291bnQ7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkX2Jsb2NrczsJLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgdW51c2VkOwkJLyogTnVtYmVyIG9mIHJlc2VydmVkIEdEVCBibG9ja3MgaW4gZ3JvdXAgKi8KK307CisKK3N0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCB7CisJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLworCV9fdTY0IGJsb2NrX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGJsb2NrIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX2JpdG1hcDsJLyogQWJzb2x1dGUgYmxvY2sgbnVtYmVyIG9mIGlub2RlIGJpdG1hcCAqLworCV9fdTY0IGlub2RlX3RhYmxlOwkvKiBBYnNvbHV0ZSBibG9jayBudW1iZXIgb2YgaW5vZGUgdGFibGUgc3RhcnQgKi8KKwlfX3UzMiBibG9ja3NfY291bnQ7CS8qIFRvdGFsIG51bWJlciBvZiBibG9ja3MgaW4gdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkX2Jsb2NrczsJLyogTnVtYmVyIG9mIHJlc2VydmVkIGJsb2NrcyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgdW51c2VkOworfTsKKworI2lmZGVmIF9fR05VX18JCQkvKiBOZWVkZWQgZm9yIHRoZSBIdXJkICovCisjZGVmaW5lIF9JT1RfZXh0Ml9uZXdfZ3JvdXBfaW5wdXQgX0lPVCAoX0lPVFMoX191MzIpLCA1LCBfSU9UUyhfX3UxNiksIDIsIDAsIDApCisjZW5kaWYKKworI2RlZmluZSBFWFQyX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR0VUVkVSU0lPTgkJX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVFZFUlNJT04JCV9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZSBFWFQyX0lPQ19HRVRWRVJTSU9OX05FVwkJX0lPUignZicsIDMsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVFZFUlNJT05fTkVXCQlfSU9XKCdmJywgNCwgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR1JPVVBfRVhURU5ECQlfSU9XKCdmJywgNywgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfR1JPVVBfQURECQlfSU9XKCdmJywgOCxzdHJ1Y3QgZXh0Ml9uZXdfZ3JvdXBfaW5wdXQpCisjZGVmaW5lIEVYVDRfSU9DX0dST1VQX0FERAkJX0lPVygnZicsIDgsc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0KQorI2RlZmluZSBFWFQ0X0lPQ19SRVNJWkVfRlMJCV9JT1coJ2YnLCAxNiwgX191NjQpCisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaW5vZGUgb24gdGhlIGRpc2sKKyAqLworc3RydWN0IGV4dDJfaW5vZGUgeworCV9fdTE2CWlfbW9kZTsJCS8qIEZpbGUgbW9kZSAqLworCV9fdTE2CWlfdWlkOwkJLyogTG93IDE2IGJpdHMgb2YgT3duZXIgVWlkICovCisJX191MzIJaV9zaXplOwkJLyogU2l6ZSBpbiBieXRlcyAqLworCV9fdTMyCWlfYXRpbWU7CS8qIEFjY2VzcyB0aW1lICovCisJX191MzIJaV9jdGltZTsJLyogSW5vZGUgY2hhbmdlIHRpbWUgKi8KKwlfX3UzMglpX210aW1lOwkvKiBNb2RpZmljYXRpb24gdGltZSAqLworCV9fdTMyCWlfZHRpbWU7CS8qIERlbGV0aW9uIFRpbWUgKi8KKwlfX3UxNglpX2dpZDsJCS8qIExvdyAxNiBiaXRzIG9mIEdyb3VwIElkICovCisJX191MTYJaV9saW5rc19jb3VudDsJLyogTGlua3MgY291bnQgKi8KKwlfX3UzMglpX2Jsb2NrczsJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJaV9mbGFnczsJLyogRmlsZSBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fdTMyCWxfaV92ZXJzaW9uOyAvKiB3YXMgbF9pX3Jlc2VydmVkMSAqLworCQl9IGxpbnV4MTsKKwkJc3RydWN0IHsKKwkJCV9fdTMyICBoX2lfdHJhbnNsYXRvcjsKKwkJfSBodXJkMTsKKwl9IG9zZDE7CQkJCS8qIE9TIGRlcGVuZGVudCAxICovCisJX191MzIJaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsvKiBQb2ludGVycyB0byBibG9ja3MgKi8KKwlfX3UzMglpX2dlbmVyYXRpb247CS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX3UzMglpX2ZpbGVfYWNsOwkvKiBGaWxlIEFDTCAqLworCV9fdTMyCWlfc2l6ZV9oaWdoOwkvKiBGb3JtZXJseSBpX2Rpcl9hY2wsIGRpcmVjdG9yeSBBQ0wgKi8KKwlfX3UzMglpX2ZhZGRyOwkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MTYJbF9pX2Jsb2Nrc19oaTsKKwkJCV9fdTE2CWxfaV9maWxlX2FjbF9oaWdoOworCQkJX191MTYJbF9pX3VpZF9oaWdoOwkvKiB0aGVzZSAyIGZpZWxkcyAgICAqLworCQkJX191MTYJbF9pX2dpZF9oaWdoOwkvKiB3ZXJlIHJlc2VydmVkMlswXSAqLworCQkJX191MTYJbF9pX2NoZWNrc3VtX2xvOyAvKiBjcmMzMmModXVpZCtpbnVtK2lub2RlKSAqLworCQkJX191MTYJbF9pX3Jlc2VydmVkOworCQl9IGxpbnV4MjsKKwkJc3RydWN0IHsKKwkJCV9fdTgJaF9pX2ZyYWc7CS8qIEZyYWdtZW50IG51bWJlciAqLworCQkJX191OAloX2lfZnNpemU7CS8qIEZyYWdtZW50IHNpemUgKi8KKwkJCV9fdTE2CWhfaV9tb2RlX2hpZ2g7CisJCQlfX3UxNgloX2lfdWlkX2hpZ2g7CisJCQlfX3UxNgloX2lfZ2lkX2hpZ2g7CisJCQlfX3UzMgloX2lfYXV0aG9yOworCQl9IGh1cmQyOworCX0gb3NkMjsJCQkJLyogT1MgZGVwZW5kZW50IDIgKi8KK307CisKKy8qCisgKiBQZXJtYW5lbnQgcGFydCBvZiBhbiBsYXJnZSBpbm9kZSBvbiB0aGUgZGlzaworICovCitzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSB7CisJX191MTYJaV9tb2RlOwkJLyogRmlsZSBtb2RlICovCisJX191MTYJaV91aWQ7CQkvKiBMb3cgMTYgYml0cyBvZiBPd25lciBVaWQgKi8KKwlfX3UzMglpX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzICovCisJX191MzIJaV9hdGltZTsJLyogQWNjZXNzIHRpbWUgKi8KKwlfX3UzMglpX2N0aW1lOwkvKiBJbm9kZSBDaGFuZ2UgdGltZSAqLworCV9fdTMyCWlfbXRpbWU7CS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX191MzIJaV9kdGltZTsJLyogRGVsZXRpb24gVGltZSAqLworCV9fdTE2CWlfZ2lkOwkJLyogTG93IDE2IGJpdHMgb2YgR3JvdXAgSWQgKi8KKwlfX3UxNglpX2xpbmtzX2NvdW50OwkvKiBMaW5rcyBjb3VudCAqLworCV9fdTMyCWlfYmxvY2tzOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX3UzMglpX2ZsYWdzOwkvKiBGaWxlIGZsYWdzICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX191MzIJbF9pX3ZlcnNpb247IC8qIHdhcyBsX2lfcmVzZXJ2ZWQxICovCisJCX0gbGludXgxOworCQlzdHJ1Y3QgeworCQkJX191MzIgIGhfaV90cmFuc2xhdG9yOworCQl9IGh1cmQxOworCX0gb3NkMTsJCQkJLyogT1MgZGVwZW5kZW50IDEgKi8KKwlfX3UzMglpX2Jsb2NrW0VYVDJfTl9CTE9DS1NdOy8qIFBvaW50ZXJzIHRvIGJsb2NrcyAqLworCV9fdTMyCWlfZ2VuZXJhdGlvbjsJLyogRmlsZSB2ZXJzaW9uIChmb3IgTkZTKSAqLworCV9fdTMyCWlfZmlsZV9hY2w7CS8qIEZpbGUgQUNMICovCisJX191MzIJaV9zaXplX2hpZ2g7CS8qIEZvcm1lcmx5IGlfZGlyX2FjbCwgZGlyZWN0b3J5IEFDTCAqLworCV9fdTMyCWlfZmFkZHI7CS8qIEZyYWdtZW50IGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3UxNglsX2lfYmxvY2tzX2hpOworCQkJX191MTYJbF9pX2ZpbGVfYWNsX2hpZ2g7CisJCQlfX3UxNglsX2lfdWlkX2hpZ2g7CS8qIHRoZXNlIDIgZmllbGRzICAgICovCisJCQlfX3UxNglsX2lfZ2lkX2hpZ2g7CS8qIHdlcmUgcmVzZXJ2ZWQyWzBdICovCisJCQlfX3UxNglsX2lfY2hlY2tzdW1fbG87IC8qIGNyYzMyYyh1dWlkK2ludW0raW5vZGUpICovCisJCQlfX3UxNglsX2lfcmVzZXJ2ZWQ7CisJCX0gbGludXgyOworCQlzdHJ1Y3QgeworCQkJX191OAloX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCisJCQlfX3U4CWhfaV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX191MTYJaF9pX21vZGVfaGlnaDsKKwkJCV9fdTE2CWhfaV91aWRfaGlnaDsKKwkJCV9fdTE2CWhfaV9naWRfaGlnaDsKKwkJCV9fdTMyCWhfaV9hdXRob3I7CisJCX0gaHVyZDI7CisJfSBvc2QyOwkJCQkvKiBPUyBkZXBlbmRlbnQgMiAqLworCV9fdTE2CWlfZXh0cmFfaXNpemU7CisJX191MTYJaV9jaGVja3N1bV9oaTsJLyogY3JjMzJjKHV1aWQraW51bStpbm9kZSkgKi8KKwlfX3UzMglpX2N0aW1lX2V4dHJhOwkvKiBleHRyYSBDaGFuZ2UgdGltZSAobnNlYyA8PCAyIHwgZXBvY2gpICovCisJX191MzIJaV9tdGltZV9leHRyYTsJLyogZXh0cmEgTW9kaWZpY2F0aW9uIHRpbWUgKG5zZWMgPDwgMiB8IGVwb2NoKSAqLworCV9fdTMyCWlfYXRpbWVfZXh0cmE7CS8qIGV4dHJhIEFjY2VzcyB0aW1lIChuc2VjIDw8IDIgfCBlcG9jaCkgKi8KKwlfX3UzMglpX2NydGltZTsJLyogRmlsZSBjcmVhdGlvbiB0aW1lICovCisJX191MzIJaV9jcnRpbWVfZXh0cmE7CS8qIGV4dHJhIEZpbGUgY3JlYXRpb24gdGltZSAobnNlYyA8PCAyIHwgZXBvY2gpKi8KKwlfX3UzMglpX3ZlcnNpb25faGk7CS8qIGhpZ2ggMzIgYml0cyBmb3IgNjQtYml0IHZlcnNpb24gKi8KK307CisKKyNkZWZpbmUgaV9kaXJfYWNsCWlfc2l6ZV9oaWdoCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5saW51eDIubF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5saW51eDIubF9pX2ZzaXplCisjZGVmaW5lIGlfdWlkX2xvdwlpX3VpZAorI2RlZmluZSBpX2dpZF9sb3cJaV9naWQKKyNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKKyNlbHNlCisjaWYgZGVmaW5lZChfX0dOVV9fKQorCisjZGVmaW5lIGlfdHJhbnNsYXRvcglvc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yCisjZGVmaW5lIGlfZnJhZwkJb3NkMi5odXJkMi5oX2lfZnJhZzsKKyNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5odXJkMi5oX2lfZnNpemU7CisjZGVmaW5lIGlfdWlkX2hpZ2gJb3NkMi5odXJkMi5oX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaAlvc2QyLmh1cmQyLmhfaV9naWRfaGlnaAorI2RlZmluZSBpX2F1dGhvcglvc2QyLmh1cmQyLmhfaV9hdXRob3IKKworI2VuZGlmICAvKiBfX0dOVV9fICovCisjZW5kaWYJLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgKi8KKworI2RlZmluZSBpbm9kZV91aWQoaW5vZGUpCSgoaW5vZGUpLmlfdWlkIHwgKGlub2RlKS5vc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2ggPDwgMTYpCisjZGVmaW5lIGlub2RlX2dpZChpbm9kZSkJKChpbm9kZSkuaV9naWQgfCAoaW5vZGUpLm9zZDIubGludXgyLmxfaV9naWRfaGlnaCA8PCAxNikKKyNkZWZpbmUgZXh0MmZzX3NldF9pX3VpZF9oaWdoKGlub2RlLHgpICgoaW5vZGUpLm9zZDIubGludXgyLmxfaV91aWRfaGlnaCA9ICh4KSkKKyNkZWZpbmUgZXh0MmZzX3NldF9pX2dpZF9oaWdoKGlub2RlLHgpICgoaW5vZGUpLm9zZDIubGludXgyLmxfaV9naWRfaGlnaCA9ICh4KSkKKworLyoKKyAqIEZpbGUgc3lzdGVtIHN0YXRlcworICovCisjZGVmaW5lIEVYVDJfVkFMSURfRlMJCQkweDAwMDEJLyogVW5tb3VudGVkIGNsZWFubHkgKi8KKyNkZWZpbmUgRVhUMl9FUlJPUl9GUwkJCTB4MDAwMgkvKiBFcnJvcnMgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgRVhUM19PUlBIQU5fRlMJCQkweDAwMDQJLyogT3JwaGFucyBiZWluZyByZWNvdmVyZWQgKi8KKworLyoKKyAqIE1pc2MuIGZpbGVzeXN0ZW0gZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1NJR05FRF9IQVNICQkweDAwMDEgIC8qIFNpZ25lZCBkaXJoYXNoIGluIHVzZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1VOU0lHTkVEX0hBU0gJMHgwMDAyICAvKiBVbnNpZ25lZCBkaXJoYXNoIGluIHVzZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUwkJMHgwMDA0CS8qIE9LIGZvciB1c2Ugb24gZGV2ZWxvcG1lbnQgY29kZSAqLworI2RlZmluZSBFWFQyX0ZMQUdTX0lTX1NOQVBTSE9UCQkweDAwMTAJLyogVGhpcyBpcyBhIHNuYXBzaG90IGltYWdlICovCisjZGVmaW5lIEVYVDJfRkxBR1NfRklYX1NOQVBTSE9UCQkweDAwMjAJLyogU25hcHNob3QgaW5vZGVzIGNvcnJ1cHRlZCAqLworI2RlZmluZSBFWFQyX0ZMQUdTX0ZJWF9FWENMVURFCQkweDAwNDAJLyogRXhjbHVkZSBiaXRtYXBzIGNvcnJ1cHRlZCAqLworCisvKgorICogTW91bnQgZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX01PVU5UX0NIRUNLCQkweDAwMDEJLyogRG8gbW91bnQtdGltZSBjaGVja3MgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9HUlBJRAkJMHgwMDA0CS8qIENyZWF0ZSBmaWxlcyB3aXRoIGRpcmVjdG9yeSdzIGdyb3VwICovCisjZGVmaW5lIEVYVDJfTU9VTlRfREVCVUcJCTB4MDAwOAkvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UCQkweDAwMTAJLyogQ29udGludWUgb24gZXJyb3JzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX1JPCQkweDAwMjAJLyogUmVtb3VudCBmcyBybyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfUEFOSUMJCTB4MDA0MAkvKiBQYW5pYyBvbiBlcnJvcnMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9NSU5JWF9ERgkJMHgwMDgwCS8qIE1pbWljcyB0aGUgTWluaXggc3RhdGZzICovCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9fVUlEMzIJCTB4MDIwMCAgLyogRGlzYWJsZSAzMi1iaXQgVUlEcyAqLworCisjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpCQlvICY9IH5FWFQyX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KQkJCW8gfD0gRVhUMl9NT1VOVF8jI29wdAorI2RlZmluZSB0ZXN0X29wdChzYiwgb3B0KQkJKEVYVDJfU0Ioc2IpLT5zX21vdW50X29wdCAmIFwKKwkJCQkJIEVYVDJfTU9VTlRfIyNvcHQpCisvKgorICogTWF4aW1hbCBtb3VudCBjb3VudHMgYmV0d2VlbiB0d28gZmlsZXN5c3RlbSBjaGVja3MKKyAqLworI2RlZmluZSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UCQkyMAkvKiBBbGxvdyAyMCBtb3VudHMgKi8KKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTAkJMAkvKiBEb24ndCB1c2UgaW50ZXJ2YWwgY2hlY2sgKi8KKworLyoKKyAqIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMKKyAqLworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRQkJMQkvKiBDb250aW51ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8JCQkyCS8qIFJlbW91bnQgZnMgcmVhZC1vbmx5ICovCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDCQkzCS8qIFBhbmljICovCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQJCUVYVDJfRVJST1JTX0NPTlRJTlVFCisKKyNpZiAoX19HTlVDX18gPj0gNCkKKyNkZWZpbmUgZXh0NF9vZmZzZXRvZihUWVBFLE1FTUJFUikgX19idWlsdGluX29mZnNldG9mKFRZUEUsTUVNQkVSKQorI2Vsc2UKKyNkZWZpbmUgZXh0NF9vZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKyNlbmRpZgorCisvKiBFbmNyeXB0aW9uIGFsZ29yaXRobXMsIGtleSBzaXplIGFuZCBrZXkgcmVmZXJlbmNlIGxlbiAqLworI2RlZmluZSBFWFQ0X0VOQ1JZUFRJT05fTU9ERV9JTlZBTElECQkwCisjZGVmaW5lIEVYVDRfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfWFRTCTEKKyNkZWZpbmUgRVhUNF9FTkNSWVBUSU9OX01PREVfQUVTXzI1Nl9HQ00JMgorI2RlZmluZSBFWFQ0X0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2X0NCQwkzCisjZGVmaW5lIEVYVDRfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfQ1RTCTQKKworI2RlZmluZSBFWFQ0X0FFU18yNTZfWFRTX0tFWV9TSVpFCQk2NAorI2RlZmluZSBFWFQ0X0FFU18yNTZfR0NNX0tFWV9TSVpFCQkzMgorI2RlZmluZSBFWFQ0X0FFU18yNTZfQ0JDX0tFWV9TSVpFCQkzMgorI2RlZmluZSBFWFQ0X0FFU18yNTZfQ1RTX0tFWV9TSVpFCQkzMgorI2RlZmluZSBFWFQ0X01BWF9LRVlfU0laRQkJCTY0CisKKyNkZWZpbmUgRVhUNF9LRVlfREVTQ1JJUFRPUl9TSVpFCQk4CisKKy8qIFBhc3N3b3JkIGRlcml2YXRpb24gY29uc3RhbnRzICovCisjZGVmaW5lIEVYVDRfTUFYX1BBU1NQSFJBU0VfU0laRQkJMTAyNAorI2RlZmluZSBFWFQ0X01BWF9TQUxUX1NJWkUJCQkyNTYKKyNkZWZpbmUgRVhUNF9QQktERjJfSVRFUkFUSU9OUwkJCTB4RkZGRgorCisvKgorICogUG9saWN5IHByb3ZpZGVkIHZpYSBhbiBpb2N0bCBvbiB0aGUgdG9wbW9zdCBkaXJlY3RvcnkuIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyBhbHNvIGluIHRoZSBrZXJuZWwuCisgKi8KK3N0cnVjdCBleHQ0X2VuY3J5cHRpb25fcG9saWN5IHsKKyAgY2hhciB2ZXJzaW9uOworICBjaGFyIGNvbnRlbnRzX2VuY3J5cHRpb25fbW9kZTsKKyAgY2hhciBmaWxlbmFtZXNfZW5jcnlwdGlvbl9tb2RlOworICBjaGFyIGZsYWdzOworICBjaGFyIG1hc3Rlcl9rZXlfZGVzY3JpcHRvcltFWFQ0X0tFWV9ERVNDUklQVE9SX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBleHQ0X2VuY3J5cHRpb25fa2V5IHsKKyAgICAgICAgX191MzIgbW9kZTsKKyAgICAgICAgY2hhciByYXdbRVhUNF9NQVhfS0VZX1NJWkVdOworICAgICAgICBfX3UzMiBzaXplOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBTdHJ1Y3R1cmUgb2YgdGhlIHN1cGVyIGJsb2NrCisgKi8KK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwlfX3UzMglzX2lub2Rlc19jb3VudDsJCS8qIElub2RlcyBjb3VudCAqLworCV9fdTMyCXNfYmxvY2tzX2NvdW50OwkJLyogQmxvY2tzIGNvdW50ICovCisJX191MzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX191MzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UzMglzX2ZyZWVfaW5vZGVzX2NvdW50OwkvKiBGcmVlIGlub2RlcyBjb3VudCAqLworCV9fdTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLworCV9fdTMyCXNfbG9nX2Jsb2NrX3NpemU7CS8qIEJsb2NrIHNpemUgKi8KKwlfX3UzMglzX2xvZ19jbHVzdGVyX3NpemU7CS8qIEFsbG9jYXRpb24gY2x1c3RlciBzaXplICovCisJX191MzIJc19ibG9ja3NfcGVyX2dyb3VwOwkvKiAjIEJsb2NrcyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX2NsdXN0ZXJzX3Blcl9ncm91cDsJLyogIyBGcmFnbWVudHMgcGVyIGdyb3VwICovCisJX191MzIJc19pbm9kZXNfcGVyX2dyb3VwOwkvKiAjIElub2RlcyBwZXIgZ3JvdXAgKi8KKwlfX3UzMglzX210aW1lOwkJLyogTW91bnQgdGltZSAqLworCV9fdTMyCXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCisJX191MTYJc19tbnRfY291bnQ7CQkvKiBNb3VudCBjb3VudCAqLworCV9fczE2CXNfbWF4X21udF9jb3VudDsJLyogTWF4aW1hbCBtb3VudCBjb3VudCAqLworCV9fdTE2CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KKwlfX3UxNglzX3N0YXRlOwkJLyogRmlsZSBzeXN0ZW0gc3RhdGUgKi8KKwlfX3UxNglzX2Vycm9yczsJCS8qIEJlaGF2aW91ciB3aGVuIGRldGVjdGluZyBlcnJvcnMgKi8KKwlfX3UxNglzX21pbm9yX3Jldl9sZXZlbDsJLyogbWlub3IgcmV2aXNpb24gbGV2ZWwgKi8KKwlfX3UzMglzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLworCV9fdTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisJX191MzIJc19jcmVhdG9yX29zOwkJLyogT1MgKi8KKwlfX3UzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisJX191MTYJc19kZWZfcmVzdWlkOwkJLyogRGVmYXVsdCB1aWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworCV9fdTE2CXNfZGVmX3Jlc2dpZDsJCS8qIERlZmF1bHQgZ2lkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgZm9yIEVYVDJfRFlOQU1JQ19SRVYgc3VwZXJibG9ja3Mgb25seS4KKwkgKgorCSAqIE5vdGU6IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgYW5kCisJICogdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCBpcyB0aGF0IGlmIHRoZXJlIGlzIGEgYml0IHNldAorCSAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKwkgKiBrbm93IGFib3V0LCBpdCBzaG91bGQgcmVmdXNlIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtLgorCSAqCisJICogZTJmc2NrJ3MgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN0cmljdDsgaWYgaXQgZG9lc24ndCBrbm93CisJICogYWJvdXQgYSBmZWF0dXJlIGluIGVpdGhlciB0aGUgY29tcGF0aWJsZSBvciBpbmNvbXBhdGlibGUKKwkgKiBmZWF0dXJlIHNldCwgaXQgbXVzdCBhYm9ydCBhbmQgbm90IHRyeSB0byBtZWRkbGUgd2l0aAorCSAqIHRoaW5ncyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQuLi4KKwkgKi8KKwlfX3UzMglzX2ZpcnN0X2lubzsJCS8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSAqLworCV9fdTE2ICAgc19pbm9kZV9zaXplOwkJLyogc2l6ZSBvZiBpbm9kZSBzdHJ1Y3R1cmUgKi8KKwlfX3UxNglzX2Jsb2NrX2dyb3VwX25yOwkvKiBibG9jayBncm91cCAjIG9mIHRoaXMgc3VwZXJibG9jayAqLworCV9fdTMyCXNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfaW5jb21wYXQ7CS8qIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fdTMyCXNfZmVhdHVyZV9yb19jb21wYXQ7CS8qIHJlYWRvbmx5LWNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3U4CXNfdXVpZFsxNl07CQkvKiAxMjgtYml0IHV1aWQgZm9yIHZvbHVtZSAqLworCWNoYXIJc192b2x1bWVfbmFtZVsxNl07CS8qIHZvbHVtZSBuYW1lICovCisJY2hhcglzX2xhc3RfbW91bnRlZFs2NF07CS8qIGRpcmVjdG9yeSB3aGVyZSBsYXN0IG1vdW50ZWQgKi8KKwlfX3UzMglzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworCS8qCisJICogUGVyZm9ybWFuY2UgaGludHMuICBEaXJlY3RvcnkgcHJlYWxsb2NhdGlvbiBzaG91bGQgb25seQorCSAqIGhhcHBlbiBpZiB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKwkgKi8KKwlfX3U4CXNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKwlfX3U4CXNfcHJlYWxsb2NfZGlyX2Jsb2NrczsJLyogTnIgdG8gcHJlYWxsb2NhdGUgZm9yIGRpcnMgKi8KKwlfX3UxNglzX3Jlc2VydmVkX2dkdF9ibG9ja3M7CS8qIFBlciBncm91cCB0YWJsZSBmb3Igb25saW5lIGdyb3d0aCAqLworCS8qCisJICogSm91cm5hbGluZyBzdXBwb3J0IHZhbGlkIGlmIEVYVDJfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgc2V0LgorCSAqLworCV9fdTgJc19qb3VybmFsX3V1aWRbMTZdOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworCV9fdTMyCXNfam91cm5hbF9pbnVtOwkJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworCV9fdTMyCXNfam91cm5hbF9kZXY7CQkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworCV9fdTMyCXNfbGFzdF9vcnBoYW47CQkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKwlfX3UzMglzX2hhc2hfc2VlZFs0XTsJCS8qIEhUUkVFIGhhc2ggc2VlZCAqLworCV9fdTgJc19kZWZfaGFzaF92ZXJzaW9uOwkvKiBEZWZhdWx0IGhhc2ggdmVyc2lvbiB0byB1c2UgKi8KKwlfX3U4CXNfam5sX2JhY2t1cF90eXBlOyAJLyogRGVmYXVsdCB0eXBlIG9mIGpvdXJuYWwgYmFja3VwICovCisJX191MTYJc19kZXNjX3NpemU7CQkvKiBHcm91cCBkZXNjLiBzaXplOiBJTkNPTVBBVF82NEJJVCAqLworCV9fdTMyCXNfZGVmYXVsdF9tb3VudF9vcHRzOworCV9fdTMyCXNfZmlyc3RfbWV0YV9iZzsJLyogRmlyc3QgbWV0YWJsb2NrIGdyb3VwICovCisJX191MzIJc19ta2ZzX3RpbWU7CQkvKiBXaGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkICovCisJX191MzIJc19qbmxfYmxvY2tzWzE3XTsgCS8qIEJhY2t1cCBvZiB0aGUgam91cm5hbCBpbm9kZSAqLworCV9fdTMyCXNfYmxvY2tzX2NvdW50X2hpOwkvKiBCbG9ja3MgY291bnQgaGlnaCAzMmJpdHMgKi8KKwlfX3UzMglzX3JfYmxvY2tzX2NvdW50X2hpOwkvKiBSZXNlcnZlZCBibG9ja3MgY291bnQgaGlnaCAzMiBiaXRzKi8KKwlfX3UzMglzX2ZyZWVfYmxvY2tzX2hpOyAJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKwlfX3UxNglzX21pbl9leHRyYV9pc2l6ZTsJLyogQWxsIGlub2RlcyBoYXZlIGF0IGxlYXN0ICMgYnl0ZXMgKi8KKwlfX3UxNglzX3dhbnRfZXh0cmFfaXNpemU7IAkvKiBOZXcgaW5vZGVzIHNob3VsZCByZXNlcnZlICMgYnl0ZXMgKi8KKwlfX3UzMglzX2ZsYWdzOwkJLyogTWlzY2VsbGFuZW91cyBmbGFncyAqLworCV9fdTE2ICAgc19yYWlkX3N0cmlkZTsJCS8qIFJBSUQgc3RyaWRlICovCisJX191MTYgICBzX21tcF91cGRhdGVfaW50ZXJ2YWw7ICAvKiAjIHNlY29uZHMgdG8gd2FpdCBpbiBNTVAgY2hlY2tpbmcgKi8KKwlfX3U2NCAgIHNfbW1wX2Jsb2NrOyAgICAgICAgICAgIC8qIEJsb2NrIGZvciBtdWx0aS1tb3VudCBwcm90ZWN0aW9uICovCisJX191MzIgICBzX3JhaWRfc3RyaXBlX3dpZHRoOyAgICAvKiBibG9ja3Mgb24gYWxsIGRhdGEgZGlza3MgKE4qc3RyaWRlKSovCisJX191OAlzX2xvZ19ncm91cHNfcGVyX2ZsZXg7CS8qIEZMRVhfQkcgZ3JvdXAgc2l6ZSAqLworCV9fdTggICAgc19jaGVja3N1bV90eXBlOwkvKiBtZXRhZGF0YSBjaGVja3N1bSBhbGdvcml0aG0gKi8KKwlfX3U4CXNfZW5jcnlwdGlvbl9sZXZlbDsJLyogdmVyc2lvbmluZyBsZXZlbCBmb3IgZW5jcnlwdGlvbiAqLworCV9fdTgJc19yZXNlcnZlZF9wYWQ7CQkvKiBQYWRkaW5nIHRvIG5leHQgMzJiaXRzICovCisJX191NjQJc19rYnl0ZXNfd3JpdHRlbjsJLyogbnIgb2YgbGlmZXRpbWUga2lsb2J5dGVzIHdyaXR0ZW4gKi8KKwlfX3UzMglzX3NuYXBzaG90X2ludW07CS8qIElub2RlIG51bWJlciBvZiBhY3RpdmUgc25hcHNob3QgKi8KKwlfX3UzMglzX3NuYXBzaG90X2lkOwkJLyogc2VxdWVudGlhbCBJRCBvZiBhY3RpdmUgc25hcHNob3QgKi8KKwlfX3U2NAlzX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50OyAvKiByZXNlcnZlZCBibG9ja3MgZm9yIGFjdGl2ZQorCQkJCQkgICAgICBzbmFwc2hvdCdzIGZ1dHVyZSB1c2UgKi8KKwlfX3UzMglzX3NuYXBzaG90X2xpc3Q7CS8qIGlub2RlIG51bWJlciBvZiB0aGUgaGVhZCBvZiB0aGUgb24tZGlzayBzbmFwc2hvdCBsaXN0ICovCisjZGVmaW5lIEVYVDRfU19FUlJfU1RBUlQgZXh0NF9vZmZzZXRvZihzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jaywgc19lcnJvcl9jb3VudCkKKwlfX3UzMglzX2Vycm9yX2NvdW50OwkJLyogbnVtYmVyIG9mIGZzIGVycm9ycyAqLworCV9fdTMyCXNfZmlyc3RfZXJyb3JfdGltZTsJLyogZmlyc3QgdGltZSBhbiBlcnJvciBoYXBwZW5lZCAqLworCV9fdTMyCXNfZmlyc3RfZXJyb3JfaW5vOwkvKiBpbm9kZSBpbnZvbHZlZCBpbiBmaXJzdCBlcnJvciAqLworCV9fdTY0CXNfZmlyc3RfZXJyb3JfYmxvY2s7CS8qIGJsb2NrIGludm9sdmVkIG9mIGZpcnN0IGVycm9yICovCisJX191OAlzX2ZpcnN0X2Vycm9yX2Z1bmNbMzJdOwkvKiBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQgKi8KKwlfX3UzMglzX2ZpcnN0X2Vycm9yX2xpbmU7CS8qIGxpbmUgbnVtYmVyIHdoZXJlIGVycm9yIGhhcHBlbmVkICovCisJX191MzIJc19sYXN0X2Vycm9yX3RpbWU7CS8qIG1vc3QgcmVjZW50IHRpbWUgb2YgYW4gZXJyb3IgKi8KKwlfX3UzMglzX2xhc3RfZXJyb3JfaW5vOwkvKiBpbm9kZSBpbnZvbHZlZCBpbiBsYXN0IGVycm9yICovCisJX191MzIJc19sYXN0X2Vycm9yX2xpbmU7CS8qIGxpbmUgbnVtYmVyIHdoZXJlIGVycm9yIGhhcHBlbmVkICovCisJX191NjQJc19sYXN0X2Vycm9yX2Jsb2NrOwkvKiBibG9jayBpbnZvbHZlZCBvZiBsYXN0IGVycm9yICovCisJX191OAlzX2xhc3RfZXJyb3JfZnVuY1szMl07CS8qIGZ1bmN0aW9uIHdoZXJlIHRoZSBlcnJvciBoYXBwZW5lZCAqLworI2RlZmluZSBFWFQ0X1NfRVJSX0VORCBleHQ0X29mZnNldG9mKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrLCBzX21vdW50X29wdHMpCisJX191OAlzX21vdW50X29wdHNbNjRdOworCV9fdTMyCXNfdXNyX3F1b3RhX2ludW07CS8qIGlub2RlIG51bWJlciBvZiB1c2VyIHF1b3RhIGZpbGUgKi8KKwlfX3UzMglzX2dycF9xdW90YV9pbnVtOwkvKiBpbm9kZSBudW1iZXIgb2YgZ3JvdXAgcXVvdGEgZmlsZSAqLworCV9fdTMyCXNfb3ZlcmhlYWRfYmxvY2tzOwkvKiBvdmVyaGVhZCBibG9ja3MvY2x1c3RlcnMgaW4gZnMgKi8KKwlfX3UzMglzX2JhY2t1cF9iZ3NbMl07CS8qIElmIHNwYXJzZV9zdXBlcjIgZW5hYmxlZCAqLworCV9fdTgJc19lbmNyeXB0X2FsZ29zWzRdOwkvKiBFbmNyeXB0aW9uIGFsZ29yaXRobXMgaW4gdXNlICAqLworCV9fdTgJc19lbmNyeXB0X3B3X3NhbHRbMTZdOwkvKiBTYWx0IHVzZWQgZm9yIHN0cmluZzJrZXkgYWxnb3JpdGhtICovCisJX191MzIJc19scGZfaW5vOwkJLyogTG9jYXRpb24gb2YgdGhlIGxvc3QrZm91bmQgaW5vZGUgKi8KKwlfX3UzMiAgIHNfcmVzZXJ2ZWRbMTAwXTsgICAgICAgIC8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKwlfX3UzMglzX2NoZWNrc3VtOwkJLyogY3JjMzJjKHN1cGVyYmxvY2spICovCit9OworCisjZGVmaW5lIEVYVDRfU19FUlJfTEVOIChFWFQ0X1NfRVJSX0VORCAtIEVYVDRfU19FUlJfU1RBUlQpCisKKy8qCisgKiBDb2RlcyBmb3Igb3BlcmF0aW5nIHN5c3RlbXMKKyAqLworI2RlZmluZSBFWFQyX09TX0xJTlVYCQkwCisjZGVmaW5lIEVYVDJfT1NfSFVSRAkJMQorI2RlZmluZSBFWFQyX09CU09fT1NfTUFTSVgJMgorI2RlZmluZSBFWFQyX09TX0ZSRUVCU0QJCTMKKyNkZWZpbmUgRVhUMl9PU19MSVRFUwkJNAorCisvKgorICogUmV2aXNpb24gbGV2ZWxzCisgKi8KKyNkZWZpbmUgRVhUMl9HT09EX09MRF9SRVYJMAkvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKyNkZWZpbmUgRVhUMl9EWU5BTUlDX1JFVgkxCS8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisKKyNkZWZpbmUgRVhUMl9DVVJSRU5UX1JFVglFWFQyX0dPT0RfT0xEX1JFVgorI2RlZmluZSBFWFQyX01BWF9TVVBQX1JFVglFWFQyX0RZTkFNSUNfUkVWCisKKyNkZWZpbmUgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDEyOAorCisvKgorICogSm91cm5hbCBpbm9kZSBiYWNrdXAgdHlwZXMKKyAqLworI2RlZmluZSBFWFQzX0pOTF9CQUNLVVBfQkxPQ0tTCTEKKworLyoKKyAqIEZlYXR1cmUgc2V0IGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBFWFQyX0hBU19DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKKwkoIEVYVDJfU0Ioc2IpLT5zX2ZlYXR1cmVfY29tcGF0ICYgKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIChtYXNrKSApCisjZGVmaW5lIEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCisJKCBFWFQyX1NCKHNiKS0+c19mZWF0dXJlX2luY29tcGF0ICYgKG1hc2spICkKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQwkweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTCTB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMCQkweDAwMDQKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgkJMHgwMDA4CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFCTB4MDAxMAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWAkJMHgwMDIwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfTEFaWV9CRwkJMHgwMDQwCisvKiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhDTFVERV9JTk9ERQkweDAwODAgbm90IHVzZWQsIGxlZ2FjeSAqLworI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYQ0xVREVfQklUTUFQCTB4MDEwMAorCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIJMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRQkweDAwMDIKKy8qICNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIJMHgwMDA0IG5vdCB1c2VkICovCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFCTB4MDAwOAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNCQkweDAwMTAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTksJMHgwMDIwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkUJMHgwMDQwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSEFTX1NOQVBTSE9UCTB4MDA4MAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBCQkweDAxMDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQwkJMHgwMjAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfTUVUQURBVEFfQ1NVTQkweDA0MDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9SRVBMSUNBCQkweDA4MDAKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQ09NUFJFU1NJT04JMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRQkJMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSCQkweDAwMDQgLyogTmVlZHMgcmVjb3ZlcnkgKi8KKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWCTB4MDAwOCAvKiBKb3VybmFsIGRldmljZSAqLworI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRwkJMHgwMDEwCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTCQkweDAwNDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUCQkweDAwODAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUAkJMHgwMTAwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHCQkweDAyMDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VBX0lOT0RFCQkweDA0MDAKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0RJUkRBVEEJCTB4MTAwMAorLyogMHgyMDAwIHdhcyBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfQkdfVVNFX01FVEFfQ1NVTSBidXQgdGhpcyB3YXMgbmV2ZXIgdXNlZCAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVIJCTB4NDAwMCAvKiA+MkdCIG9yIDMtbHZsIGh0cmVlICovCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVEQVRBCTB4ODAwMCAvKiBkYXRhIGluIGlub2RlICovCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FTkNSWVBUCQkweDEwMDAwCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9TVVBQCTAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAgICAgKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgXAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSfCBcCisJCQkJCSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8IFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LfCBcCisJCQkJCSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUikKKworLyoKKyAqIERlZmF1bHQgdmFsdWVzIGZvciB1c2VyIGFuZC9vciBncm91cCB1c2luZyByZXNlcnZlZCBibG9ja3MKKyAqLworI2RlZmluZSBFWFQyX0RFRl9SRVNVSUQJCTAKKyNkZWZpbmUgRVhUMl9ERUZfUkVTR0lECQkwCisKKy8qCisgKiBEZWZhdWx0IG1vdW50IG9wdGlvbnMKKyAqLworI2RlZmluZSBFWFQyX0RFRk1fREVCVUcJCTB4MDAwMQorI2RlZmluZSBFWFQyX0RFRk1fQlNER1JPVVBTCTB4MDAwMgorI2RlZmluZSBFWFQyX0RFRk1fWEFUVFJfVVNFUgkweDAwMDQKKyNkZWZpbmUgRVhUMl9ERUZNX0FDTAkJMHgwMDA4CisjZGVmaW5lIEVYVDJfREVGTV9VSUQxNgkJMHgwMDEwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERQkJMHgwMDYwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9EQVRBCTB4MDAyMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRAkweDAwNDAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLCTB4MDA2MAorI2RlZmluZSBFWFQ0X0RFRk1fTk9CQVJSSUVSCTB4MDEwMAorI2RlZmluZSBFWFQ0X0RFRk1fQkxPQ0tfVkFMSURJVFkgMHgwMjAwCisjZGVmaW5lIEVYVDRfREVGTV9ESVNDQVJECTB4MDQwMAorI2RlZmluZSBFWFQ0X0RFRk1fTk9ERUxBTExPQwkweDA4MDAKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQorICovCisjZGVmaW5lIEVYVDJfTkFNRV9MRU4gMjU1CisKK3N0cnVjdCBleHQyX2Rpcl9lbnRyeSB7CisJX191MzIJaW5vZGU7CQkJLyogSW5vZGUgbnVtYmVyICovCisJX191MTYJcmVjX2xlbjsJCS8qIERpcmVjdG9yeSBlbnRyeSBsZW5ndGggKi8KKwlfX3UxNgluYW1lX2xlbjsJCS8qIE5hbWUgbGVuZ3RoICovCisJY2hhcgluYW1lW0VYVDJfTkFNRV9MRU5dOwkvKiBGaWxlIG5hbWUgKi8KK307CisKKy8qCisgKiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIGRpcmVjdG9yeSBlbnRyeS4gIFNpbmNlIEVYVDIgc3RydWN0dXJlcyBhcmUKKyAqIHN0b3JlZCBpbiBpbnRlbCBieXRlIG9yZGVyLCBhbmQgdGhlIG5hbWVfbGVuIGZpZWxkIGNvdWxkIG5ldmVyIGJlCisgKiBiaWdnZXIgdGhhbiAyNTUgY2hhcnMsIGl0J3Mgc2FmZSB0byByZWNsYWltIHRoZSBleHRyYSBieXRlIGZvciB0aGUKKyAqIGZpbGVfdHlwZSBmaWVsZC4KKyAqLworc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgeworCV9fdTMyCWlub2RlOwkJCS8qIElub2RlIG51bWJlciAqLworCV9fdTE2CXJlY19sZW47CQkvKiBEaXJlY3RvcnkgZW50cnkgbGVuZ3RoICovCisJX191OAluYW1lX2xlbjsJCS8qIE5hbWUgbGVuZ3RoICovCisJX191OAlmaWxlX3R5cGU7CisJY2hhcgluYW1lW0VYVDJfTkFNRV9MRU5dOwkvKiBGaWxlIG5hbWUgKi8KK307CisKKy8qCisgKiBFeHQyIGRpcmVjdG9yeSBmaWxlIHR5cGVzLiAgT25seSB0aGUgbG93IDMgYml0cyBhcmUgdXNlZC4gIFRoZQorICogb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQgZm9yIG5vdy4KKyAqLworI2RlZmluZSBFWFQyX0ZUX1VOS05PV04JCTAKKyNkZWZpbmUgRVhUMl9GVF9SRUdfRklMRQkxCisjZGVmaW5lIEVYVDJfRlRfRElSCQkyCisjZGVmaW5lIEVYVDJfRlRfQ0hSREVWCQkzCisjZGVmaW5lIEVYVDJfRlRfQkxLREVWCQk0CisjZGVmaW5lIEVYVDJfRlRfRklGTwkJNQorI2RlZmluZSBFWFQyX0ZUX1NPQ0sJCTYKKyNkZWZpbmUgRVhUMl9GVF9TWU1MSU5LCQk3CisKKyNkZWZpbmUgRVhUMl9GVF9NQVgJCTgKKworLyoKKyAqIEVYVDJfRElSX1BBRCBkZWZpbmVzIHRoZSBkaXJlY3RvcnkgZW50cmllcyBib3VuZGFyaWVzCisgKgorICogTk9URTogSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQKKyAqLworI2RlZmluZSBFWFQyX0RJUl9QQUQJCQk0CisjZGVmaW5lIEVYVDJfRElSX1JPVU5ECQkJKEVYVDJfRElSX1BBRCAtIDEpCisjZGVmaW5lIEVYVDJfRElSX1JFQ19MRU4obmFtZV9sZW4pCSgoKG5hbWVfbGVuKSArIDggKyBFWFQyX0RJUl9ST1VORCkgJiBcCisJCQkJCSB+RVhUMl9ESVJfUk9VTkQpCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uLiBJdCBpcyB3cml0dGVuCisgKiBpbnRvIHRoZSBibG9jayBudW1iZXIgc2F2ZWQgaW4gdGhlIHNfbW1wX2Jsb2NrIGZpZWxkIGluIHRoZSBzdXBlcmJsb2NrLgorICogUHJvZ3JhbXMgdGhhdCBjaGVjayBNTVAgc2hvdWxkIGFzc3VtZSB0aGF0IGlmIFNFUV9GU0NLIChvciBhbnkgdW5rbm93bgorICogY29kZSBhYm92ZSBTRVFfTUFYKSBpcyBwcmVzZW50IHRoZW4gaXQgaXMgTk9UIHNhZmUgdG8gdXNlIHRoZSBmaWxlc3lzdGVtLAorICogcmVnYXJkbGVzcyBvZiBob3cgb2xkIHRoZSB0aW1lc3RhbXAgaXMuCisgKgorICogVGhlIHRpbWVzdGFtcCBpbiB0aGUgTU1QIHN0cnVjdHVyZSB3aWxsIGJlIHVwZGF0ZWQgYnkgZTJmc2NrIGF0IHNvbWUKKyAqIGFyYml0YXJ5IGludGVydmFscyAoc3RhcnQgb2YgcGFzc2VzLCBhZnRlciBldmVyeSBmZXcgZ3JvdXBzIG9mIGlub2RlcworICogaW4gcGFzczEgYW5kIHBhc3MxYikuICBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBlMmZzY2sgaXMgdXBkYXRpbmcKKyAqIHRoZSBNTVAgYmxvY2sgaW4gYSB0aW1lbHkgbWFubmVyLCBhbmQgdGhlIHVwZGF0ZXMgaXQgZG9lcyBhcmUgcHVyZWx5CisgKiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBzeXNhZG1pbiBhbmQgbm90IGZvciBhdXRvbWF0aWMgdmFsaWRhdGlvbi4KKyAqCisgKiBOb3RlOiBPbmx5IHRoZSBtbXBfc2VxIHZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIE1NUCBibG9jaworICoJaXMgYmVpbmcgdXBkYXRlZC4gIFRoZSBtbXBfdGltZSwgbW1wX25vZGVuYW1lLCBhbmQgbW1wX2JkZXZuYW1lCisgKglmaWVsZHMgYXJlIG9ubHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgZm9yIHRoZSBhZG1pbmlzdHJhdG9yLAorICoJZHVlIHRvIGNsb2NrIHNrZXcgYmV0d2VlbiBub2RlcyBhbmQgaG9zdG5hbWUgSEEgc2VydmljZSB0YWtlb3Zlci4KKyAqLworI2RlZmluZSBFWFQ0X01NUF9NQUdJQyAgICAgMHgwMDRENEQ1MFUgLyogQVNDSUkgZm9yIE1NUCAqLworI2RlZmluZSBFWFQ0X01NUF9TRVFfQ0xFQU4gMHhGRjRENEQ1MFUgLyogbW1wX3NlcSB2YWx1ZSBmb3IgY2xlYW4gdW5tb3VudCAqLworI2RlZmluZSBFWFQ0X01NUF9TRVFfRlNDSyAgMHhFMjRENEQ1MFUgLyogbW1wX3NlcSB2YWx1ZSB3aGVuIGJlaW5nIGZzY2tlZCAqLworI2RlZmluZSBFWFQ0X01NUF9TRVFfTUFYICAgMHhFMjRENEQ0RlUgLyogbWF4aW11bSB2YWxpZCBtbXBfc2VxIHZhbHVlICovCisKK3N0cnVjdCBtbXBfc3RydWN0IHsKKwlfX3UzMgltbXBfbWFnaWM7CQkvKiBNYWdpYyBudW1iZXIgZm9yIE1NUCAqLworCV9fdTMyCW1tcF9zZXE7CQkvKiBTZXF1ZW5jZSBuby4gdXBkYXRlZCBwZXJpb2RpY2FsbHkgKi8KKwlfX3U2NAltbXBfdGltZTsJCS8qIFRpbWUgbGFzdCB1cGRhdGVkICovCisJY2hhcgltbXBfbm9kZW5hbWVbNjRdOwkvKiBOb2RlIHdoaWNoIGxhc3QgdXBkYXRlZCBNTVAgYmxvY2sgKi8KKwljaGFyCW1tcF9iZGV2bmFtZVszMl07CS8qIEJkZXYgd2hpY2ggbGFzdCB1cGRhdGVkIE1NUCBibG9jayAqLworCV9fdTE2CW1tcF9jaGVja19pbnRlcnZhbDsJLyogQ2hhbmdlZCBtbXBfY2hlY2tfaW50ZXJ2YWwgKi8KKwlfX3UxNgltbXBfcGFkMTsKKwlfX3UzMgltbXBfcGFkMlsyMjddOworfTsKKworLyoKKyAqIERlZmF1bHQgaW50ZXJ2YWwgZm9yIE1NUCB1cGRhdGUgaW4gc2Vjb25kcy4KKyAqLworI2RlZmluZSBFWFQ0X01NUF9VUERBVEVfSU5URVJWQUwJNQorCisvKgorICogTWF4aW11bSBpbnRlcnZhbCBmb3IgTU1QIHVwZGF0ZSBpbiBzZWNvbmRzLgorICovCisjZGVmaW5lIEVYVDRfTU1QX01BWF9VUERBVEVfSU5URVJWQUwJMzAwCisKKy8qCisgKiBNaW5pbXVtIGludGVydmFsIGZvciBNTVAgY2hlY2tpbmcgaW4gc2Vjb25kcy4KKyAqLworI2RlZmluZSBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUwgICAgIDUKKworI2VuZGlmCS8qIF9MSU5VWF9FWFQyX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfaW8uaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODk0ZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml9pby5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogaW8uaCAtLS0gdGhlIEkvTyBtYW5hZ2VyIGFic3RyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9FWFQyRlNfRVhUMl9JT19ICisjZGVmaW5lIF9FWFQyRlNfRVhUMl9JT19ICisKKy8qCisgKiBleHQyX2xvZmZfdCBpcyBkZWZpbmVkIGhlcmUgc2luY2UgdW5peF9pby5jIG5lZWRzIGl0LgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChIQVNfTE9OR19MT05HKQordHlwZWRlZiBsb25nIGxvbmcJZXh0Ml9sb2ZmX3Q7CisjZWxzZQordHlwZWRlZiBsb25nCQlleHQyX2xvZmZfdDsKKyNlbmRpZgorCisvKiBsbHNlZWsuYyAqLworZXh0Ml9sb2ZmX3QgZXh0MmZzX2xsc2VlayAoaW50LCBleHQyX2xvZmZfdCwgaW50KTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3RydWN0X2lvX21hbmFnZXIgKmlvX21hbmFnZXI7Cit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCAqaW9fY2hhbm5lbDsKK3R5cGVkZWYgc3RydWN0IHN0cnVjdF9pb19zdGF0cyAqaW9fc3RhdHM7CisKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19XUklURVRIUk9VR0gJMHgwMQorI2RlZmluZSBDSEFOTkVMX0ZMQUdTX0RJU0NBUkRfWkVST0VTCTB4MDIKKyNkZWZpbmUgQ0hBTk5FTF9GTEFHU19CTE9DS19ERVZJQ0UJMHgwNAorCisjZGVmaW5lIGlvX2NoYW5uZWxfZGlzY2FyZF96ZXJvZXNfZGF0YShpKSAoaS0+ZmxhZ3MgJiBDSEFOTkVMX0ZMQUdTX0RJU0NBUkRfWkVST0VTKQorCitzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwgeworCWVycmNvZGVfdAltYWdpYzsKKwlpb19tYW5hZ2VyCW1hbmFnZXI7CisJY2hhcgkJKm5hbWU7CisJaW50CQlibG9ja19zaXplOworCWVycmNvZGVfdAkoKnJlYWRfZXJyb3IpKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCSAgICAgIGludCBjb3VudCwKKwkJCQkgICAgICB2b2lkICpkYXRhLAorCQkJCSAgICAgIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGludCBhY3R1YWxfYnl0ZXNfcmVhZCwKKwkJCQkgICAgICBlcnJjb2RlX3QJZXJyb3IpOworCWVycmNvZGVfdAkoKndyaXRlX2Vycm9yKShpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJICAgICAgIGludCBjb3VudCwKKwkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkgICAgICAgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGludCBhY3R1YWxfYnl0ZXNfd3JpdHRlbiwKKwkJCQkgICAgICAgZXJyY29kZV90IGVycm9yKTsKKwlpbnQJCXJlZmNvdW50OworCWludAkJZmxhZ3M7CisJbG9uZwkJcmVzZXJ2ZWRbMTRdOworCXZvaWQJCSpwcml2YXRlX2RhdGE7CisJdm9pZAkJKmFwcF9kYXRhOworCWludAkJYWxpZ247Cit9OworCitzdHJ1Y3Qgc3RydWN0X2lvX3N0YXRzIHsKKwlpbnQJCQludW1fZmllbGRzOworCWludAkJCXJlc2VydmVkOworCXVuc2lnbmVkIGxvbmcgbG9uZwlieXRlc19yZWFkOworCXVuc2lnbmVkIGxvbmcgbG9uZwlieXRlc193cml0dGVuOworfTsKKworc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHsKKwllcnJjb2RlX3QgbWFnaWM7CisJY29uc3QgY2hhciAqbmFtZTsKKwllcnJjb2RlX3QgKCpvcGVuKShjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIGlvX2NoYW5uZWwgKmNoYW5uZWwpOworCWVycmNvZGVfdCAoKmNsb3NlKShpb19jaGFubmVsIGNoYW5uZWwpOworCWVycmNvZGVfdCAoKnNldF9ibGtzaXplKShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKTsKKwllcnJjb2RlX3QgKCpyZWFkX2JsaykoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKKwllcnJjb2RlX3QgKCp3cml0ZV9ibGspKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIGNvbnN0IHZvaWQgKmRhdGEpOworCWVycmNvZGVfdCAoKmZsdXNoKShpb19jaGFubmVsIGNoYW5uZWwpOworCWVycmNvZGVfdCAoKndyaXRlX2J5dGUpKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKKwllcnJjb2RlX3QgKCpzZXRfb3B0aW9uKShpb19jaGFubmVsIGNoYW5uZWwsIGNvbnN0IGNoYXIgKm9wdGlvbiwKKwkJCQljb25zdCBjaGFyICphcmcpOworCWVycmNvZGVfdCAoKmdldF9zdGF0cykoaW9fY2hhbm5lbCBjaGFubmVsLCBpb19zdGF0cyAqaW9fc3RhdHMpOworCWVycmNvZGVfdCAoKnJlYWRfYmxrNjQpKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCQlpbnQgY291bnQsIHZvaWQgKmRhdGEpOworCWVycmNvZGVfdCAoKndyaXRlX2JsazY0KShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKKwllcnJjb2RlX3QgKCpkaXNjYXJkKShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIGNvdW50KTsKKwlsb25nCXJlc2VydmVkWzE2XTsKK307CisKKyNkZWZpbmUgSU9fRkxBR19SVwkJMHgwMDAxCisjZGVmaW5lIElPX0ZMQUdfRVhDTFVTSVZFCTB4MDAwMgorI2RlZmluZSBJT19GTEFHX0RJUkVDVF9JTwkweDAwMDQKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9ucy4uLi4KKyAqLworI2RlZmluZSBpb19jaGFubmVsX2Nsb3NlKGMpIAkJKChjKS0+bWFuYWdlci0+Y2xvc2UoKGMpKSkKKyNkZWZpbmUgaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShjLHMpCSgoYyktPm1hbmFnZXItPnNldF9ibGtzaXplKChjKSxzKSkKKyNkZWZpbmUgaW9fY2hhbm5lbF9yZWFkX2JsayhjLGIsbixkKQkoKGMpLT5tYW5hZ2VyLT5yZWFkX2JsaygoYyksYixuLGQpKQorI2RlZmluZSBpb19jaGFubmVsX3dyaXRlX2JsayhjLGIsbixkKQkoKGMpLT5tYW5hZ2VyLT53cml0ZV9ibGsoKGMpLGIsbixkKSkKKyNkZWZpbmUgaW9fY2hhbm5lbF9mbHVzaChjKSAJCSgoYyktPm1hbmFnZXItPmZsdXNoKChjKSkpCisjZGVmaW5lIGlvX2NoYW5uZWxfYnVtcGNvdW50KGMpCQkoKGMpLT5yZWZjb3VudCsrKQorCisvKiBpb19tYW5hZ2VyLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgaW9fY2hhbm5lbF9zZXRfb3B0aW9ucyhpb19jaGFubmVsIGNoYW5uZWwsCisJCQkJCWNvbnN0IGNoYXIgKm9wdGlvbnMpOworZXh0ZXJuIGVycmNvZGVfdCBpb19jaGFubmVsX3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgaW9fY2hhbm5lbF9yZWFkX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGVycmNvZGVfdCBpb19jaGFubmVsX3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmRhdGEpOworZXh0ZXJuIGVycmNvZGVfdCBpb19jaGFubmVsX2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudCk7CitleHRlcm4gZXJyY29kZV90IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQkgICAgICBpbnQgY291bnQsIHZvaWQgKnB0cik7CisKKy8qIHVuaXhfaW8uYyAqLworZXh0ZXJuIGlvX21hbmFnZXIgdW5peF9pb19tYW5hZ2VyOworCisvKiB1bmRvX2lvLmMgKi8KK2V4dGVybiBpb19tYW5hZ2VyIHVuZG9faW9fbWFuYWdlcjsKK2V4dGVybiBlcnJjb2RlX3Qgc2V0X3VuZG9faW9fYmFja2luZ19tYW5hZ2VyKGlvX21hbmFnZXIgbWFuYWdlcik7CitleHRlcm4gZXJyY29kZV90IHNldF91bmRvX2lvX2JhY2t1cF9maWxlKGNoYXIgKmZpbGVfbmFtZSk7CisKKy8qIHRlc3RfaW8uYyAqLworZXh0ZXJuIGlvX21hbmFnZXIgdGVzdF9pb19tYW5hZ2VyLCB0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlcjsKK2V4dGVybiB2b2lkICgqdGVzdF9pb19jYl9yZWFkX2JsaykKKwkodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKTsKK2V4dGVybiB2b2lkICgqdGVzdF9pb19jYl93cml0ZV9ibGspCisJKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7CitleHRlcm4gdm9pZCAoKnRlc3RfaW9fY2JfcmVhZF9ibGs2NCkKKwkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworZXh0ZXJuIHZvaWQgKCp0ZXN0X2lvX2NiX3dyaXRlX2JsazY0KQorCSh1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7CitleHRlcm4gdm9pZCAoKnRlc3RfaW9fY2Jfc2V0X2Jsa3NpemUpCisJKGludCBibGtzaXplLCBlcnJjb2RlX3QgZXJyKTsKKworI2VuZGlmIC8qIF9FWFQyRlNfRVhUMl9JT19IICovCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ0ZjliCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oCkBAIC0wLDAgKzEsMTM3IEBACisvKiAKKyAqIElmIGxpbnV4L3R5cGVzLmggaXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLCBhc3N1bWUgaXQgaGFzIGRlZmluZWQKKyAqIGV2ZXJ5dGhpbmcgd2UgbmVlZC4gIChjcm9zcyBmaW5nZXJzKSAgT3RoZXIgaGVhZGVyIGZpbGVzIG1heSBoYXZlIAorICogYWxzbyBkZWZpbmVkIHRoZSB0eXBlcyB0aGF0IHdlIG5lZWQuCisgKi8KKyNpZiAoIWRlZmluZWQoX0xJTlVYX1RZUEVTX0gpICYmICFkZWZpbmVkKF9CTEtJRF9UWVBFU19IKSAmJiBcCisJIWRlZmluZWQoX0VYVDJfVFlQRVNfSCkpCisjZGVmaW5lIF9FWFQyX1RZUEVTX0gKKworCisjaWZkZWYgX19VOF9UWVBFREVGCit0eXBlZGVmIF9fVThfVFlQRURFRiBfX3U4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworI2VuZGlmCisKKyNpZmRlZiBfX1M4X1RZUEVERUYKK3R5cGVkZWYgX19TOF9UWVBFREVGIF9fczg7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBfX3M4OworI2VuZGlmCisKKyNpZmRlZiBfX1UxNl9UWVBFREVGCit0eXBlZGVmIF9fVTE2X1RZUEVERUYgX191MTY7CisjZWxzZQorI2lmICg0ID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIGludAlfX3UxNjsKKyNlbHNlCisjaWYgKDIgPT0gMikKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJX191MTY7CisjZWxzZQorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDIgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDIgKi8KKyNlbmRpZiAvKiBfX1UxNl9UWVBFREVGICovCisKKyNpZmRlZiBfX1MxNl9UWVBFREVGCit0eXBlZGVmIF9fUzE2X1RZUEVERUYgX19zMTY7CisjZWxzZQorI2lmICg0ID09IDIpCit0eXBlZGVmCWludAkJX19zMTY7CisjZWxzZQorI2lmICgyID09IDIpCit0eXBlZGVmCXNob3J0CQlfX3MxNjsKKyNlbHNlCisgID89PWVycm9yOiB1bmRlZmluZWQgMTYgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gMiAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gMiAqLworI2VuZGlmIC8qIF9fUzE2X1RZUEVERUYgKi8KKworCisjaWZkZWYgX19VMzJfVFlQRURFRgordHlwZWRlZiBfX1UzMl9UWVBFREVGIF9fdTMyOworI2Vsc2UKKyNpZiAoNCA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBpbnQJX191MzI7CisjZWxzZQorI2lmICg0ID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJX191MzI7CisjZWxzZQorI2lmICgyID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTMyOworI2Vsc2UKKyA/PT0gZXJyb3I6IHVuZGVmaW5lZCAzMiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gNCAqLworI2VuZGlmIC8qIF9fVTMyX1RZUEVERUYgKi8KKworI2lmZGVmIF9fUzMyX1RZUEVERUYKK3R5cGVkZWYgX19TMzJfVFlQRURFRiBfX3MzMjsKKyNlbHNlCisjaWYgKDQgPT0gNCkKK3R5cGVkZWYJaW50CQlfX3MzMjsKKyNlbHNlCisjaWYgKDQgPT0gNCkKK3R5cGVkZWYJbG9uZwkJX19zMzI7CisjZWxzZQorI2lmICgyID09IDQpCit0eXBlZGVmCXNob3J0CQlfX3MzMjsKKyNlbHNlCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1MzMl9UWVBFREVGICovCisKKyNpZmRlZiBfX1U2NF9UWVBFREVGCit0eXBlZGVmIF9fVTY0X1RZUEVERUYgX191NjQ7CisjZWxzZQorI2lmICg0ID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGludAlfX3U2NDsKKyNlbHNlCisjaWYgKDggPT0gOCkKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCV9fdTY0OworI2Vsc2UKKyNpZiAoNCA9PSA4KQordHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fdTY0OworI2VuZGlmIC8qIFNJWkVPRl9MT05HX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDggKi8KKyNlbmRpZiAvKiBfX1U2NF9UWVBFREVGICovCisKKyNpZmRlZiBfX1M2NF9UWVBFREVGCit0eXBlZGVmIF9fUzY0X1RZUEVERUYgX19zNjQ7CisjZWxzZQorI2lmICg0ID09IDgpCit0eXBlZGVmIGludAkJX19zNjQ7CisjZWxzZQorI2lmICg4ID09IDgpCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcJX19zNjQ7CisjZWxzZQordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nCV9fczY0OworI2VuZGlmIC8qIF9fR05VQ19fICovCisjZWxzZQorI2lmICg0ID09IDgpCit0eXBlZGVmIGxvbmcJCV9fczY0OworI2VuZGlmIC8qIFNJWkVPRl9MT05HX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDggKi8KKyNlbmRpZiAvKiBfX1M2NF9UWVBFREVGICovCisKKyN1bmRlZiBfX1M4X1RZUEVERUYKKyN1bmRlZiBfX1U4X1RZUEVERUYKKyN1bmRlZiBfX1MxNl9UWVBFREVGCisjdW5kZWYgX19VMTZfVFlQRURFRgorI3VuZGVmIF9fUzMyX1RZUEVERUYKKyN1bmRlZiBfX1UzMl9UWVBFREVGCisjdW5kZWYgX19TNjRfVFlQRURFRgorI3VuZGVmIF9fVTY0X1RZUEVERUYKKworI2VuZGlmIC8qIF8qX1RZUEVTX0ggKi8KKworLyogVGhlc2UgZGVmaW5lcyBhcmUgbmVlZGVkIGZvciB0aGUgcHVibGljIGV4dDJmcy5oIGhlYWRlciBmaWxlICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorI3VuZGVmIFdPUkRTX0JJR0VORElBTgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oLmluIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOThmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyX3R5cGVzLmguaW4KQEAgLTAsMCArMSwxMzYgQEAKKy8qIAorICogSWYgbGludXgvdHlwZXMuaCBpcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQsIGFzc3VtZSBpdCBoYXMgZGVmaW5lZAorICogZXZlcnl0aGluZyB3ZSBuZWVkLiAgKGNyb3NzIGZpbmdlcnMpICBPdGhlciBoZWFkZXIgZmlsZXMgbWF5IGhhdmUgCisgKiBhbHNvIGRlZmluZWQgdGhlIHR5cGVzIHRoYXQgd2UgbmVlZC4KKyAqLworI2lmICghZGVmaW5lZChfTElOVVhfVFlQRVNfSCkgJiYgIWRlZmluZWQoX0JMS0lEX1RZUEVTX0gpICYmIFwKKwkhZGVmaW5lZChfRVhUMl9UWVBFU19IKSkKKyNkZWZpbmUgX0VYVDJfVFlQRVNfSAorCitAQVNNX1RZUEVTX0hFQURFUkAKKworI2lmZGVmIF9fVThfVFlQRURFRgordHlwZWRlZiBfX1U4X1RZUEVERUYgX191ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKyNlbmRpZgorCisjaWZkZWYgX19TOF9UWVBFREVGCit0eXBlZGVmIF9fUzhfVFlQRURFRiBfX3M4OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgX19zODsKKyNlbmRpZgorCisjaWZkZWYgX19VMTZfVFlQRURFRgordHlwZWRlZiBfX1UxNl9UWVBFREVGIF9fdTE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIGludAlfX3UxNjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfU0hPUlRAID09IDIpCit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CV9fdTE2OworI2Vsc2UKKyAgPz09ZXJyb3I6IHVuZGVmaW5lZCAxNiBiaXQgdHlwZQorI2VuZGlmIC8qIFNJWkVPRl9TSE9SVCA9PSAyICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSAyICovCisjZW5kaWYgLyogX19VMTZfVFlQRURFRiAqLworCisjaWZkZWYgX19TMTZfVFlQRURFRgordHlwZWRlZiBfX1MxNl9UWVBFREVGIF9fczE2OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDIpCit0eXBlZGVmCWludAkJX19zMTY7CisjZWxzZQorI2lmIChAU0laRU9GX1NIT1JUQCA9PSAyKQordHlwZWRlZglzaG9ydAkJX19zMTY7CisjZWxzZQorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDIgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDIgKi8KKyNlbmRpZiAvKiBfX1MxNl9UWVBFREVGICovCisKKworI2lmZGVmIF9fVTMyX1RZUEVERUYKK3R5cGVkZWYgX19VMzJfVFlQRURFRiBfX3UzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBpbnQJX191MzI7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdAID09IDQpCit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJX191MzI7CisjZWxzZQorI2lmIChAU0laRU9GX1NIT1JUQCA9PSA0KQordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlfX3UzMjsKKyNlbHNlCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZiAvKiBTSVpFT0ZfU0hPUlQgPT0gNCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDQgKi8KKyNlbmRpZiAvKiBfX1UzMl9UWVBFREVGICovCisKKyNpZmRlZiBfX1MzMl9UWVBFREVGCit0eXBlZGVmIF9fUzMyX1RZUEVERUYgX19zMzI7CisjZWxzZQorI2lmIChAU0laRU9GX0lOVEAgPT0gNCkKK3R5cGVkZWYJaW50CQlfX3MzMjsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR0AgPT0gNCkKK3R5cGVkZWYJbG9uZwkJX19zMzI7CisjZWxzZQorI2lmIChAU0laRU9GX1NIT1JUQCA9PSA0KQordHlwZWRlZglzaG9ydAkJX19zMzI7CisjZWxzZQorID89PSBlcnJvcjogdW5kZWZpbmVkIDMyIGJpdCB0eXBlCisjZW5kaWYgLyogU0laRU9GX1NIT1JUID09IDQgKi8KKyNlbmRpZiAvKiBTSVpFT0ZfTE9ORyA9PSA0ICovCisjZW5kaWYgLyogU0laRU9GX0lOVCA9PSA0ICovCisjZW5kaWYgLyogX19TMzJfVFlQRURFRiAqLworCisjaWZkZWYgX19VNjRfVFlQRURFRgordHlwZWRlZiBfX1U2NF9UWVBFREVGIF9fdTY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9JTlRAID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGludAlfX3U2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfTE9OR19MT05HQCA9PSA4KQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJX191NjQ7CisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdAID09IDgpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX191NjQ7CisjZW5kaWYgLyogU0laRU9GX0xPTkdfTE9ORyA9PSA4ICovCisjZW5kaWYgLyogU0laRU9GX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9JTlQgPT0gOCAqLworI2VuZGlmIC8qIF9fVTY0X1RZUEVERUYgKi8KKworI2lmZGVmIF9fUzY0X1RZUEVERUYKK3R5cGVkZWYgX19TNjRfVFlQRURFRiBfX3M2NDsKKyNlbHNlCisjaWYgKEBTSVpFT0ZfSU5UQCA9PSA4KQordHlwZWRlZiBpbnQJCV9fczY0OworI2Vsc2UKKyNpZiAoQFNJWkVPRl9MT05HX0xPTkdAID09IDgpCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcJX19zNjQ7CisjZWxzZQordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nCV9fczY0OworI2VuZGlmIC8qIF9fR05VQ19fICovCisjZWxzZQorI2lmIChAU0laRU9GX0xPTkdAID09IDgpCit0eXBlZGVmIGxvbmcJCV9fczY0OworI2VuZGlmIC8qIFNJWkVPRl9MT05HX0xPTkcgPT0gOCAqLworI2VuZGlmIC8qIFNJWkVPRl9MT05HID09IDggKi8KKyNlbmRpZiAvKiBTSVpFT0ZfSU5UID09IDggKi8KKyNlbmRpZiAvKiBfX1M2NF9UWVBFREVGICovCisKKyN1bmRlZiBfX1M4X1RZUEVERUYKKyN1bmRlZiBfX1U4X1RZUEVERUYKKyN1bmRlZiBfX1MxNl9UWVBFREVGCisjdW5kZWYgX19VMTZfVFlQRURFRgorI3VuZGVmIF9fUzMyX1RZUEVERUYKKyN1bmRlZiBfX1UzMl9UWVBFREVGCisjdW5kZWYgX19TNjRfVFlQRURFRgorI3VuZGVmIF9fVTY0X1RZUEVERUYKKworI2VuZGlmIC8qIF8qX1RZUEVTX0ggKi8KKworQFBVQkxJQ19DT05GSUdfSEVBREVSQApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0MmZzLmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHQyZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEzZmJiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0MmZzLmgKQEAgLTAsMCArMSwxNzQ1IEBACisvKgorICogZXh0MmZzLmggLS0tIGV4dDJmcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfRVhUMkZTX0VYVDJGU19ICisjZGVmaW5lIF9FWFQyRlNfRVhUMkZTX0gKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorICogTm9uLUdOVSBDIGNvbXBpbGVycyB3b24ndCBuZWNlc3NhcmlseSB1bmRlcnN0YW5kIGlubGluZQorICovCisjaWYgKCFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1dBVENPTUNfXykpCisjZGVmaW5lIE5PX0lOTElORV9GVU5DUworI2VuZGlmCisKKy8qCisgKiBXaGVyZSB0aGUgbWFzdGVyIGNvcHkgb2YgdGhlIHN1cGVyYmxvY2sgaXMgbG9jYXRlZCwgYW5kIGhvdyBiaWcKKyAqIHN1cGVyYmxvY2tzIGFyZSBzdXBwb3NlZCB0byBiZS4gIFdlIGRlZmluZSBTVVBFUkJMT0NLX1NJWkUgYmVjYXVzZQorICogdGhlIHNpemUgb2YgdGhlIHN1cGVyYmxvY2sgc3RydWN0dXJlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVzdHdvcnRoeQorICogKHNvbWUgdmVyc2lvbnMgaGF2ZSB0aGUgcGFkZGluZyBzZXQgdXAgc28gdGhhdCB0aGUgc3VwZXJibG9jayBpcworICogMTAzMiBieXRlcyBsb25nKS4KKyAqLworI2RlZmluZSBTVVBFUkJMT0NLX09GRlNFVAkxMDI0CisjZGVmaW5lIFNVUEVSQkxPQ0tfU0laRQkJMTAyNAorCisvKgorICogVGhlIGxhc3QgZXh0MmZzIHJldmlzaW9uIGxldmVsIHRoYXQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGlzCisgKiBhYmxlIHRvIHN1cHBvcnQuCisgKi8KKyNkZWZpbmUgRVhUMl9MSUJfQ1VSUkVOVF9SRVYJRVhUMl9EWU5BTUlDX1JFVgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBFWFQyX0ZMQVRfSU5DTFVERVMKKyNpbmNsdWRlICJlMl90eXBlcy5oIgorI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQzX2V4dGVudHMuaCIKKyNlbHNlCisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQzX2V4dGVudHMuaD4KKyNlbmRpZiAvKiBFWFQyX0ZMQVRfSU5DTFVERVMgKi8KKworI2lmZGVmIF9fQ0hFQ0tfRU5ESUFOX18KKyNkZWZpbmUgX19iaXR3aXNlIF9fYXR0cmlidXRlX18oKGJpdHdpc2UpKQorI2Vsc2UKKyNkZWZpbmUgX19iaXR3aXNlCisjZW5kaWYKKwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UJCWV4dDJfaW5vX3Q7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZQkJYmxrX3Q7Cit0eXBlZGVmIF9fdTY0IF9fYml0d2lzZQkJYmxrNjRfdDsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlCQlkZ3JwX3Q7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZQkJZXh0Ml9vZmZfdDsKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlCQlleHQyX29mZjY0X3Q7Cit0eXBlZGVmIF9fczY0IF9fYml0d2lzZQkJZTJfYmxrY250X3Q7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZQkJZXh0Ml9kaXJoYXNoX3Q7CisKKyNpZiBFWFQyX0ZMQVRfSU5DTFVERVMKKyNpbmNsdWRlICJjb21fZXJyLmgiCisjaW5jbHVkZSAiZXh0Ml9pby5oIgorI2luY2x1ZGUgImV4dDJfZXJyLmgiCisjaW5jbHVkZSAiZXh0Ml9leHRfYXR0ci5oIgorI2Vsc2UKKyNpbmNsdWRlIDxldC9jb21fZXJyLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfaW8uaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9lcnIuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorI2VuZGlmCisKKy8qCisgKiBQb3J0YWJpbGl0eSBoZWxwIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKworICovCisjaWZkZWYgX01TQ19WRVIKKyNkZWZpbmUgRVhUMl9RU09SVF9UWVBFIGludCBfX2NkZWNsCisjZWxzZQorI2RlZmluZSBFWFQyX1FTT1JUX1RZUEUgaW50CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzICpleHQyX2ZpbHN5czsKKworI2RlZmluZSBFWFQyRlNfTUFSS19FUlJPUiAJMAorI2RlZmluZSBFWFQyRlNfVU5NQVJLX0VSUk9SIAkxCisjZGVmaW5lIEVYVDJGU19URVNUX0VSUk9SCTIKKwordHlwZWRlZiBzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCAqZXh0MmZzX2dlbmVyaWNfYml0bWFwOwordHlwZWRlZiBzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCAqZXh0MmZzX2lub2RlX2JpdG1hcDsKK3R5cGVkZWYgc3RydWN0IGV4dDJmc19zdHJ1Y3RfZ2VuZXJpY19iaXRtYXAgKmV4dDJmc19ibG9ja19iaXRtYXA7CisKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk9ERShzKQlFWFQyX0ZJUlNUX0lOTyhzKQorCisKKy8qCisgKiBCYWRibG9ja3MgbGlzdCBkZWZpbml0aW9ucworICovCisKK3R5cGVkZWYgc3RydWN0IGV4dDJfc3RydWN0X3UzMl9saXN0ICpleHQyX2JhZGJsb2Nrc19saXN0OwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2l0ZXJhdGUgKmV4dDJfYmFkYmxvY2tzX2l0ZXJhdGU7CisKK3R5cGVkZWYgc3RydWN0IGV4dDJfc3RydWN0X3UzMl9saXN0ICpleHQyX3UzMl9saXN0OwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2l0ZXJhdGUgKmV4dDJfdTMyX2l0ZXJhdGU7CisKKy8qIG9sZCAqLwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2xpc3QgKmJhZGJsb2Nrc19saXN0OwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfdTMyX2l0ZXJhdGUgKmJhZGJsb2Nrc19pdGVyYXRlOworCisjZGVmaW5lIEJBREJMT0NLU19GTEFHX0RJUlRZCTEKKworLyoKKyAqIGV4dDJfZGJsaXN0IHN0cnVjdHVyZSBhbmQgYWJzdHJhY3Rpb25zIChzZWUgZGJsaXN0LmMpCisgKi8KK3N0cnVjdCBleHQyX2RiX2VudHJ5MiB7CisJZXh0Ml9pbm9fdAlpbm87CisJYmxrNjRfdAlibGs7CisJZTJfYmxrY250X3QJYmxvY2tjbnQ7Cit9OworCisvKiBZZSBPbGRlIDMyLWJpdCB2ZXJzaW9uICovCitzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSB7CisJZXh0Ml9pbm9fdAlpbm87CisJYmxrX3QJYmxrOworCWludAlibG9ja2NudDsKK307CisKK3R5cGVkZWYgc3RydWN0IGV4dDJfc3RydWN0X2RibGlzdCAqZXh0Ml9kYmxpc3Q7CisKKyNkZWZpbmUgREJMSVNUX0FCT1JUCTEKKworLyoKKyAqIGV4dDJfZmlsZWlvIGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBFWFQyX0ZJTEVfV1JJVEUJCTB4MDAwMQorI2RlZmluZSBFWFQyX0ZJTEVfQ1JFQVRFCTB4MDAwMgorCisjZGVmaW5lIEVYVDJfRklMRV9NQVNLCQkweDAwRkYKKworI2RlZmluZSBFWFQyX0ZJTEVfQlVGX0RJUlRZCTB4NDAwMAorI2RlZmluZSBFWFQyX0ZJTEVfQlVGX1ZBTElECTB4MjAwMAorCit0eXBlZGVmIHN0cnVjdCBleHQyX2ZpbGUgKmV4dDJfZmlsZV90OworCisjZGVmaW5lIEVYVDJfU0VFS19TRVQJMAorI2RlZmluZSBFWFQyX1NFRUtfQ1VSCTEKKyNkZWZpbmUgRVhUMl9TRUVLX0VORAkyCisKKy8qCisgKiBGbGFncyBmb3IgdGhlIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSBhbmQgZm9yIGV4dDJmc19vcGVuKCkKKyAqLworI2RlZmluZSBFWFQyX0ZMQUdfUlcJCQkweDAxCisjZGVmaW5lIEVYVDJfRkxBR19DSEFOR0VECQkweDAyCisjZGVmaW5lIEVYVDJfRkxBR19ESVJUWQkJCTB4MDQKKyNkZWZpbmUgRVhUMl9GTEFHX1ZBTElECQkJMHgwOAorI2RlZmluZSBFWFQyX0ZMQUdfSUJfRElSVFkJCTB4MTAKKyNkZWZpbmUgRVhUMl9GTEFHX0JCX0RJUlRZCQkweDIwCisjZGVmaW5lIEVYVDJfRkxBR19TV0FQX0JZVEVTCQkweDQwCisjZGVmaW5lIEVYVDJfRkxBR19TV0FQX0JZVEVTX1JFQUQJMHg4MAorI2RlZmluZSBFWFQyX0ZMQUdfU1dBUF9CWVRFU19XUklURQkweDEwMAorI2RlZmluZSBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFkJMHgyMDAKKyNkZWZpbmUgRVhUMl9GTEFHX0ZPUkNFCQkJMHg0MDAKKyNkZWZpbmUgRVhUMl9GTEFHX1NVUEVSX09OTFkJCTB4ODAwCisjZGVmaW5lIEVYVDJfRkxBR19KT1VSTkFMX0RFVl9PSwkweDEwMDAKKyNkZWZpbmUgRVhUMl9GTEFHX0lNQUdFX0ZJTEUJCTB4MjAwMAorI2RlZmluZSBFWFQyX0ZMQUdfRVhDTFVTSVZFCQkweDQwMDAKKyNkZWZpbmUgRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTCTB4ODAwMAorI2RlZmluZSBFWFQyX0ZMQUdfTk9GUkVFX09OX0VSUk9SCTB4MTAwMDAKKyNkZWZpbmUgRVhUMl9GTEFHXzY0QklUUwkJMHgyMDAwMAorI2RlZmluZSBFWFQyX0ZMQUdfUFJJTlRfUFJPR1JFU1MJMHg0MDAwMAorI2RlZmluZSBFWFQyX0ZMQUdfRElSRUNUX0lPCQkweDgwMDAwCisjZGVmaW5lIEVYVDJfRkxBR19TS0lQX01NUAkJMHgxMDAwMDAKKworLyoKKyAqIFNwZWNpYWwgZmxhZyBpbiB0aGUgZXh0MiBpbm9kZSBpX2ZsYWcgZmllbGQgdGhhdCBtZWFucyB0aGF0IHRoaXMgaXMKKyAqIGEgbmV3IGlub2RlLiAgKFNvIHRoYXQgZXh0Ml93cml0ZV9pbm9kZSgpIGNhbiBjbGVhciBleHRyYSBmaWVsZHMuKQorICovCisjZGVmaW5lIEVYVDJfTkVXX0lOT0RFX0ZMCTB4ODAwMDAwMDAKKworLyoKKyAqIEZsYWdzIGZvciBta2pvdXJuYWwKKyAqLworI2RlZmluZSBFWFQyX01LSk9VUk5BTF9WMV9TVVBFUgkweDAwMDAwMDEgLyogY3JlYXRlIFYxIHN1cGVyYmxvY2sgKGRlcHJlY2F0ZWQpICovCisjZGVmaW5lIEVYVDJfTUtKT1VSTkFMX0xBWllJTklUCTB4MDAwMDAwMiAvKiBkb24ndCB6ZXJvIGpvdXJuYWwgaW5vZGUgYmVmb3JlIHVzZSovCisjZGVmaW5lIEVYVDJfTUtKT1VSTkFMX05PX01OVF9DSEVDSyAweDAwMDAwMDQgLyogZG9uJ3QgY2hlY2sgbW91bnQgc3RhdHVzICovCisKK3N0cnVjdCBvcGFxdWVfZXh0Ml9ncm91cF9kZXNjOworCitzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzIHsKKwllcnJjb2RlX3QJCQltYWdpYzsKKwlpb19jaGFubmVsCQkJaW87CisJaW50CQkJCWZsYWdzOworCWNoYXIgKgkJCQlkZXZpY2VfbmFtZTsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jawkqIAlzdXBlcjsKKwl1bnNpZ25lZCBpbnQJCQlibG9ja3NpemU7CisJaW50CQkJCWZyYWdzaXplOworCWRncnBfdAkJCQlncm91cF9kZXNjX2NvdW50OworCXVuc2lnbmVkIGxvbmcJCQlkZXNjX2Jsb2NrczsKKwlzdHJ1Y3Qgb3BhcXVlX2V4dDJfZ3JvdXBfZGVzYyAqCWdyb3VwX2Rlc2M7CisJdW5zaWduZWQgaW50CQkJaW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwlleHQyZnNfaW5vZGVfYml0bWFwCQlpbm9kZV9tYXA7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcAkJYmxvY2tfbWFwOworCS8qIFhYWCBGSVhNRS02NDogbm90IDY0LWJpdCBzYWZlLCBidXQgbm90IHVzZWQ/ICovCisJZXJyY29kZV90ICgqZ2V0X2Jsb2NrcykoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBibGtfdCAqYmxvY2tzKTsKKwllcnJjb2RlX3QgKCpjaGVja19kaXJlY3RvcnkpKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubyk7CisJZXJyY29kZV90ICgqd3JpdGVfYml0bWFwcykoZXh0Ml9maWxzeXMgZnMpOworCWVycmNvZGVfdCAoKnJlYWRfaW5vZGUpKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworCWVycmNvZGVfdCAoKndyaXRlX2lub2RlKShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKKwlleHQyX2JhZGJsb2Nrc19saXN0CQliYWRibG9ja3M7CisJZXh0Ml9kYmxpc3QJCQlkYmxpc3Q7CisJX191MzIJCQkJc3RyaWRlOwkvKiBmb3IgbWtlMmZzICovCisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKglvcmlnX3N1cGVyOworCXN0cnVjdCBleHQyX2ltYWdlX2hkciAqCQlpbWFnZV9oZWFkZXI7CisJX191MzIJCQkJdW1hc2s7CisJdGltZV90CQkJCW5vdzsKKwlpbnQJCQkJY2x1c3Rlcl9yYXRpb19iaXRzOworCV9fdTE2CQkJCWRlZmF1bHRfYml0bWFwX3R5cGU7CisJX191MTYJCQkJcGFkOworCS8qCisJICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24KKwkgKi8KKwlfX3UzMgkJCQlyZXNlcnZlZFs1XTsKKworCS8qCisJICogUmVzZXJ2ZWQgZm9yIHRoZSB1c2Ugb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uCisJICovCisJdm9pZCAqCQkJCXByaXZfZGF0YTsKKworCS8qCisJICogSW5vZGUgY2FjaGUKKwkgKi8KKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZQkJKmljYWNoZTsKKwlpb19jaGFubmVsCQkJaW1hZ2VfaW87CisKKwkvKgorCSAqIE1vcmUgY2FsbGJhY2sgZnVuY3Rpb25zCisJICovCisJZXJyY29kZV90ICgqZ2V0X2FsbG9jX2Jsb2NrKShleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCSAgICAgYmxrNjRfdCAqcmV0KTsKKwl2b2lkICgqYmxvY2tfYWxsb2Nfc3RhdHMpKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsaywgaW50IGludXNlKTsKKworCS8qCisJICogQnVmZmVycyBmb3IgTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbihNTVApIGJsb2NrLgorCSAqLworCXZvaWQgKm1tcF9idWY7CisJdm9pZCAqbW1wX2NtcDsKKwlpbnQgbW1wX2ZkOworCisJLyoKKwkgKiBUaW1lIGF0IHdoaWNoIGUyZnNjayBsYXN0IHVwZGF0ZWQgdGhlIE1NUCBibG9jay4KKwkgKi8KKwlsb25nIG1tcF9sYXN0X3dyaXR0ZW47Cit9OworCisjaWYgRVhUMl9GTEFUX0lOQ0xVREVTCisjaW5jbHVkZSAiZTJfYml0b3BzLmgiCisjZWxzZQorI2luY2x1ZGUgPGV4dDJmcy9iaXRvcHMuaD4KKyNlbmRpZgorCisvKgorICogNjQtYml0IGJpdG1hcCBiYWNrZW5kIHR5cGVzCisgKi8KKyNkZWZpbmUgRVhUMkZTX0JNQVA2NF9CSVRBUlJBWQkxCisjZGVmaW5lIEVYVDJGU19CTUFQNjRfUkJUUkVFCTIKKyNkZWZpbmUgRVhUMkZTX0JNQVA2NF9BVVRPRElSCTMKKworLyoKKyAqIFJldHVybiBmbGFncyBmb3IgdGhlIGJsb2NrIGl0ZXJhdG9yIGZ1bmN0aW9ucworICovCisjZGVmaW5lIEJMT0NLX0NIQU5HRUQJMQorI2RlZmluZSBCTE9DS19BQk9SVAkyCisjZGVmaW5lIEJMT0NLX0VSUk9SCTQKKworLyoKKyAqIEJsb2NrIGludGVyYXRlIGZsYWdzCisgKgorICogQkxPQ0tfRkxBR19BUFBFTkQsIG9yIEJMT0NLX0ZMQUdfSE9MRSwgaW5kaWNhdGVzIHRoYXQgdGhlIGludGVyYXRvcgorICogZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbiBibG9ja3Mgd2hlcmUgdGhlIGJsb2NrIG51bWJlciBpcyB6ZXJvLgorICogVGhpcyBpcyB1c2VkIGJ5IGV4dDJmc19leHBhbmRfZGlyKCkgdG8gYmUgYWJsZSB0byBhZGQgYSBuZXcgYmxvY2sKKyAqIHRvIGFuIGlub2RlLiAgSXQgY2FuIGFsc28gYmUgdXNlZCBmb3IgcHJvZ3JhbXMgdGhhdCB3YW50IHRvIGJlIGFibGUKKyAqIHRvIGRlYWwgd2l0aCBmaWxlcyB0aGF0IGNvbnRhaW4gImhvbGVzIi4KKyAqCisgKiBCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFIGluZGljYXRlcyB0aGF0IHRoZSBpdGVyYXRvciBmdW5jdGlvbiBmb3IKKyAqIHRoZSBpbmRpcmVjdCwgZG91Ymx5IGluZGlyZWN0LCBldGMuIGJsb2NrcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyCisgKiBhbGwgb2YgdGhlIGJsb2NrcyBjb250YWluaW5lZCBpbiB0aGUgaW5kaXJlY3QgYmxvY2tzIGFyZSBwcm9jZXNzZWQuCisgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIGRlYWxsb2NhdGluZyBibG9ja3MgZnJvbSBhbgorICogaW5vZGUuCisgKgorICogQkxPQ0tfRkxBR19EQVRBX09OTFkgaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIHNob3VsZCBiZQorICogY2FsbGVkIGZvciBkYXRhIGJsb2NrcyBvbmx5LgorICoKKyAqIEJMT0NLX0ZMQUdfUkVBRF9PTkxZIGlzIGEgcHJvbWlzZSBieSB0aGUgY2FsbGVyIHRoYXQgaXQgd2lsbCBub3QKKyAqIG1vZGlmeSByZXR1cm5lZCBibG9jayBudW1iZXIuCisgKgorICogQkxPQ0tfRkxBR19OT19MQVJHRSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuICBJdCBpbmZvcm1zCisgKiBleHQyZnNfYmxvY2tfaXRlcmF0ZTIgdGhhdCBsYXJnZSBmaWxlcyB3b24ndCBiZSBhY2NlcHRlZC4KKyAqLworI2RlZmluZSBCTE9DS19GTEFHX0FQUEVORAkxCisjZGVmaW5lIEJMT0NLX0ZMQUdfSE9MRQkJMQorI2RlZmluZSBCTE9DS19GTEFHX0RFUFRIX1RSQVZFUlNFCTIKKyNkZWZpbmUgQkxPQ0tfRkxBR19EQVRBX09OTFkJNAorI2RlZmluZSBCTE9DS19GTEFHX1JFQURfT05MWQk4CisKKyNkZWZpbmUgQkxPQ0tfRkxBR19OT19MQVJHRQkweDEwMDAKKworLyoKKyAqIE1hZ2ljICJibG9jayBjb3VudCIgcmV0dXJuIHZhbHVlcyBmb3IgdGhlIGJsb2NrIGl0ZXJhdG9yIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIEJMT0NLX0NPVU5UX0lORAkJKC0xKQorI2RlZmluZSBCTE9DS19DT1VOVF9ESU5ECSgtMikKKyNkZWZpbmUgQkxPQ0tfQ09VTlRfVElORAkoLTMpCisjZGVmaW5lIEJMT0NLX0NPVU5UX1RSQU5TTEFUT1IJKC00KQorCisjaWYgMAorLyoKKyAqIEZsYWdzIGZvciBleHQyZnNfbW92ZV9ibG9ja3MKKyAqLworI2RlZmluZSBFWFQyX0JNT1ZFX0dFVF9EQkxJU1QJMHgwMDAxCisjZGVmaW5lIEVYVDJfQk1PVkVfREVCVUcJMHgwMDAyCisjZW5kaWYKKworLyoKKyAqIEdlbmVyaWMgKG5vbi1maWxlc3lzdGVtIGxheW91dCBzcGVjaWZpYykgZXh0ZW50cyBzdHJ1Y3R1cmUKKyAqLworCisjZGVmaW5lIEVYVDJfRVhURU5UX0ZMQUdTX0xFQUYJCTB4MDAwMQorI2RlZmluZSBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQJMHgwMDAyCisjZGVmaW5lIEVYVDJfRVhURU5UX0ZMQUdTX1NFQ09ORF9WSVNJVAkweDAwMDQKKworc3RydWN0IGV4dDJmc19leHRlbnQgeworCWJsazY0X3QJZV9wYmxrOwkJLyogZmlyc3QgcGh5c2ljYWwgYmxvY2sgKi8KKwlibGs2NF90CWVfbGJsazsJCS8qIGZpcnN0IGxvZ2ljYWwgYmxvY2sgZXh0ZW50IGNvdmVycyAqLworCV9fdTMyCWVfbGVuOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBjb3ZlcmVkIGJ5IGV4dGVudCAqLworCV9fdTMyCWVfZmxhZ3M7CS8qIGV4dGVudCBmbGFncyAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9leHRlbnRfaGFuZGxlICpleHQyX2V4dGVudF9oYW5kbGVfdDsKK3R5cGVkZWYgc3RydWN0IGV4dDJfZXh0ZW50X3BhdGggKmV4dDJfZXh0ZW50X3BhdGhfdDsKKworLyoKKyAqIEZsYWdzIHVzZWQgYnkgZXh0MmZzX2V4dGVudF9nZXQoKQorICovCisjZGVmaW5lIEVYVDJfRVhURU5UX0NVUlJFTlQJMHgwMDAwCisjZGVmaW5lIEVYVDJfRVhURU5UX01PVkVfTUFTSwkweDAwMEYKKyNkZWZpbmUgRVhUMl9FWFRFTlRfUk9PVAkweDAwMDEKKyNkZWZpbmUgRVhUMl9FWFRFTlRfTEFTVF9MRUFGCTB4MDAwMgorI2RlZmluZSBFWFQyX0VYVEVOVF9GSVJTVF9TSUIJMHgwMDAzCisjZGVmaW5lIEVYVDJfRVhURU5UX0xBU1RfU0lCCTB4MDAwNAorI2RlZmluZSBFWFQyX0VYVEVOVF9ORVhUX1NJQgkweDAwMDUKKyNkZWZpbmUgRVhUMl9FWFRFTlRfUFJFVl9TSUIJMHgwMDA2CisjZGVmaW5lIEVYVDJfRVhURU5UX05FWFRfTEVBRgkweDAwMDcKKyNkZWZpbmUgRVhUMl9FWFRFTlRfUFJFVl9MRUFGCTB4MDAwOAorI2RlZmluZSBFWFQyX0VYVEVOVF9ORVhUCTB4MDAwOQorI2RlZmluZSBFWFQyX0VYVEVOVF9QUkVWCTB4MDAwQQorI2RlZmluZSBFWFQyX0VYVEVOVF9VUAkJMHgwMDBCCisjZGVmaW5lIEVYVDJfRVhURU5UX0RPV04JMHgwMDBDCisjZGVmaW5lIEVYVDJfRVhURU5UX0RPV05fQU5EX0xBU1QgMHgwMDBECisKKy8qCisgKiBGbGFncyB1c2VkIGJ5IGV4dDJmc19leHRlbnRfaW5zZXJ0KCkKKyAqLworI2RlZmluZSBFWFQyX0VYVEVOVF9JTlNFUlRfQUZURVIJMHgwMDAxIC8qIGluc2VydCBhZnRlciBoYW5kbGUgbG9jJ24gKi8KKyNkZWZpbmUgRVhUMl9FWFRFTlRfSU5TRVJUX05PU1BMSVQJMHgwMDAyIC8qIGluc2VydCBtYXkgbm90IGNhdXNlIHNwbGl0ICovCisKKy8qCisgKiBGbGFncyB1c2VkIGJ5IGV4dDJmc19leHRlbnRfZGVsZXRlKCkKKyAqLworI2RlZmluZSBFWFQyX0VYVEVOVF9ERUxFVEVfS0VFUF9FTVBUWQkweDAwMSAvKiBrZWVwIG5vZGUgaWYgbGFzdCBleHRudCBnb25lICovCisKKy8qCisgKiBGbGFncyB1c2VkIGJ5IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoKQorICovCisjZGVmaW5lIEVYVDJfRVhURU5UX1NFVF9CTUFQX1VOSU5JVAkweDAwMDEKKworLyoKKyAqIERhdGEgc3RydWN0dXJlIHJldHVybmVkIGJ5IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oKQorICovCitzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbyB7CisJaW50CQljdXJyX2VudHJ5OworCWludAkJY3Vycl9sZXZlbDsKKwlpbnQJCW51bV9lbnRyaWVzOworCWludAkJbWF4X2VudHJpZXM7CisJaW50CQltYXhfZGVwdGg7CisJaW50CQlieXRlc19hdmFpbDsKKwlibGs2NF90CQltYXhfbGJsazsKKwlibGs2NF90CQltYXhfcGJsazsKKwlfX3UzMgkJbWF4X2xlbjsKKwlfX3UzMgkJbWF4X3VuaW5pdF9sZW47Cit9OworCisvKgorICogRmxhZ3MgZm9yIGRpcmVjdG9yeSBibG9jayByZWFkaW5nIGFuZCB3cml0aW5nIGZ1bmN0aW9ucworICovCisjZGVmaW5lIEVYVDJfRElSQkxPQ0tfVjJfU1RSVUNUCTB4MDAwMQorCisvKgorICogUmV0dXJuIGZsYWdzIGZvciB0aGUgZGlyZWN0b3J5IGl0ZXJhdG9yIGZ1bmN0aW9ucworICovCisjZGVmaW5lIERJUkVOVF9DSEFOR0VECTEKKyNkZWZpbmUgRElSRU5UX0FCT1JUCTIKKyNkZWZpbmUgRElSRU5UX0VSUk9SCTMKKworLyoKKyAqIERpcmVjdG9yeSBpdGVyYXRvciBmbGFncworICovCisKKyNkZWZpbmUgRElSRU5UX0ZMQUdfSU5DTFVERV9FTVBUWQkxCisjZGVmaW5lIERJUkVOVF9GTEFHX0lOQ0xVREVfUkVNT1ZFRAkyCisKKyNkZWZpbmUgRElSRU5UX0RPVF9GSUxFCQkxCisjZGVmaW5lIERJUkVOVF9ET1RfRE9UX0ZJTEUJMgorI2RlZmluZSBESVJFTlRfT1RIRVJfRklMRQkzCisjZGVmaW5lIERJUkVOVF9ERUxFVEVEX0ZJTEUJNAorCisvKgorICogSW5vZGUgc2NhbiBkZWZpbml0aW9ucworICovCit0eXBlZGVmIHN0cnVjdCBleHQyX3N0cnVjdF9pbm9kZV9zY2FuICpleHQyX2lub2RlX3NjYW47CisKKy8qCisgKiBleHQyZnNfc2NhbiBmbGFncworICovCisjZGVmaW5lIEVYVDJfU0ZfQ0hLX0JBREJMT0NLUwkweDAwMDEKKyNkZWZpbmUgRVhUMl9TRl9CQURfSU5PREVfQkxLCTB4MDAwMgorI2RlZmluZSBFWFQyX1NGX0JBRF9FWFRSQV9CWVRFUwkweDAwMDQKKyNkZWZpbmUgRVhUMl9TRl9TS0lQX01JU1NJTkdfSVRBQkxFCTB4MDAwOAorI2RlZmluZSBFWFQyX1NGX0RPX0xBWlkJCTB4MDAxMAorCisvKgorICogZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQgZmxhZ3MKKyAqLworI2RlZmluZSBFWFQyX01GX01PVU5URUQJCTEKKyNkZWZpbmUgRVhUMl9NRl9JU1JPT1QJCTIKKyNkZWZpbmUgRVhUMl9NRl9SRUFET05MWQk0CisjZGVmaW5lIEVYVDJfTUZfU1dBUAkJOAorI2RlZmluZSBFWFQyX01GX0JVU1kJCTE2CisKKy8qCisgKiBFeHQyL2xpbnV4IG1vZGUgZmxhZ3MuICBXZSBkZWZpbmUgdGhlbSBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZAorICogdG8gZGVwZW5kIG9uIHRoZSBPUydzIHN5cy9zdGF0LmgsIHNpbmNlIHdlIG1heSBiZSBjb21waWxpbmcgb24gYQorICogbm9uLUxpbnV4IHN5c3RlbS4KKyAqLworI2RlZmluZSBMSU5VWF9TX0lGTVQgIDAwMTcwMDAwCisjZGVmaW5lIExJTlVYX1NfSUZTT0NLIDAxNDAwMDAKKyNkZWZpbmUgTElOVVhfU19JRkxOSwkgMDEyMDAwMAorI2RlZmluZSBMSU5VWF9TX0lGUkVHICAwMTAwMDAwCisjZGVmaW5lIExJTlVYX1NfSUZCTEsgIDAwNjAwMDAKKyNkZWZpbmUgTElOVVhfU19JRkRJUiAgMDA0MDAwMAorI2RlZmluZSBMSU5VWF9TX0lGQ0hSICAwMDIwMDAwCisjZGVmaW5lIExJTlVYX1NfSUZJRk8gIDAwMTAwMDAKKyNkZWZpbmUgTElOVVhfU19JU1VJRCAgMDAwNDAwMAorI2RlZmluZSBMSU5VWF9TX0lTR0lEICAwMDAyMDAwCisjZGVmaW5lIExJTlVYX1NfSVNWVFggIDAwMDEwMDAKKworI2RlZmluZSBMSU5VWF9TX0lSV1hVIDAwNzAwCisjZGVmaW5lIExJTlVYX1NfSVJVU1IgMDA0MDAKKyNkZWZpbmUgTElOVVhfU19JV1VTUiAwMDIwMAorI2RlZmluZSBMSU5VWF9TX0lYVVNSIDAwMTAwCisKKyNkZWZpbmUgTElOVVhfU19JUldYRyAwMDA3MAorI2RlZmluZSBMSU5VWF9TX0lSR1JQIDAwMDQwCisjZGVmaW5lIExJTlVYX1NfSVdHUlAgMDAwMjAKKyNkZWZpbmUgTElOVVhfU19JWEdSUCAwMDAxMAorCisjZGVmaW5lIExJTlVYX1NfSVJXWE8gMDAwMDcKKyNkZWZpbmUgTElOVVhfU19JUk9USCAwMDAwNAorI2RlZmluZSBMSU5VWF9TX0lXT1RIIDAwMDAyCisjZGVmaW5lIExJTlVYX1NfSVhPVEggMDAwMDEKKworI2RlZmluZSBMSU5VWF9TX0lTTE5LKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGTE5LKQorI2RlZmluZSBMSU5VWF9TX0lTUkVHKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGUkVHKQorI2RlZmluZSBMSU5VWF9TX0lTRElSKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGRElSKQorI2RlZmluZSBMSU5VWF9TX0lTQ0hSKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGQ0hSKQorI2RlZmluZSBMSU5VWF9TX0lTQkxLKG0pCSgoKG0pICYgTElOVVhfU19JRk1UKSA9PSBMSU5VWF9TX0lGQkxLKQorI2RlZmluZSBMSU5VWF9TX0lTRklGTyhtKQkoKChtKSAmIExJTlVYX1NfSUZNVCkgPT0gTElOVVhfU19JRklGTykKKyNkZWZpbmUgTElOVVhfU19JU1NPQ0sobSkJKCgobSkgJiBMSU5VWF9TX0lGTVQpID09IExJTlVYX1NfSUZTT0NLKQorCisvKgorICogZXh0MiBzaXplIG9mIGFuIGlub2RlCisgKi8KKyNkZWZpbmUgRVhUMl9JX1NJWkUoaSkJKChpKS0+aV9zaXplIHwgKChfX3U2NCkgKGkpLT5pX3NpemVfaGlnaCA8PCAzMikpCisKKy8qCisgKiBleHQyX2ljb3VudF90IGFic3RyYWN0aW9uCisgKi8KKyNkZWZpbmUgRVhUMl9JQ09VTlRfT1BUX0lOQ1JFTUVOVAkweDAxCisKK3R5cGVkZWYgc3RydWN0IGV4dDJfaWNvdW50ICpleHQyX2ljb3VudF90OworCisvKgorICogRmxhZ3MgZm9yIGV4dDJmc19ibWFwCisgKi8KKyNkZWZpbmUgQk1BUF9BTExPQwkweDAwMDEKKyNkZWZpbmUgQk1BUF9TRVQJMHgwMDAyCisKKy8qCisgKiBSZXR1cm5lZCBmbGFncyBmcm9tIGV4dDJmc19ibWFwCisgKi8KKyNkZWZpbmUgQk1BUF9SRVRfVU5JTklUCTB4MDAwMQorCisvKgorICogRmxhZ3MgZm9yIGltYWdlci5jIGZ1bmN0aW9ucworICovCisjZGVmaW5lIElNQUdFUl9GTEFHX0lOT0RFTUFQCTEKKyNkZWZpbmUgSU1BR0VSX0ZMQUdfU1BBUlNFV1JJVEUJMgorCisvKgorICogRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisgKi8KKworI2RlZmluZSBFWFQyX0NIRUNLX01BR0lDKHN0cnVjdCwgY29kZSkgXAorCSAgaWYgKChzdHJ1Y3QpLT5tYWdpYyAhPSAoY29kZSkpIHJldHVybiAoY29kZSkKKworCisvKgorICogRm9yIGV4dDIgY29tcHJlc3Npb24gc3VwcG9ydAorICovCisjZGVmaW5lIEVYVDJGU19DT01QUkVTU0VEX0JMS0FERFIgKChibGtfdCkgLTEpCisjZGVmaW5lIEhPTEVfQkxLQUREUihfYikgKChfYikgPT0gMCB8fCAoX2IpID09IEVYVDJGU19DT01QUkVTU0VEX0JMS0FERFIpCisKKy8qCisgKiBGZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5CisgKi8KKyNkZWZpbmUgRVhUMl9MSUJfRkVBVFVSRV9DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0N8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTfFwKKwkJCQkJIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUx8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREV8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVh8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUikKKworLyogVGhpcyAjaWZkZWYgaXMgdGVtcG9yYXJ5IHVudGlsIGNvbXByZXNzaW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCAqLworI2lmZGVmIEVOQUJMRV9DT01QUkVTU0lPTgorI2lmbmRlZiBJX0tOT1dfVEhBVF9DT01QUkVTU0lPTl9JU19FWFBFUklNRU5UQUwKKy8qIElmIHRoZSBiZWxvdyB3YXJuaW5nIGJ1Z3MgeW91LCB0aGVuIGhhdmUKKyAgIGBDUFBGTEFHUz0tRElfS05PV19USEFUX0NPTVBSRVNTSU9OX0lTX0VYUEVSSU1FTlRBTCcgaW4geW91cgorICAgZW52aXJvbm1lbnQgYXQgY29uZmlndXJlIHRpbWUuICovCisgI3dhcm5pbmcgIkNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsIgorI2VuZGlmCisjZGVmaW5lIEVYVDJfTElCX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfFwKKwkJCQkJIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTnxcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVZ8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVJ8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkd8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUHxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVR8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQpCisjZWxzZQorI2RlZmluZSBFWFQyX0xJQl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAJKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXxcCisJCQkJCSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVZ8XAorCQkJCQkgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVJ8XAorCQkJCQkgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFN8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkd8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUHxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVR8XAorCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUVVPVEEKKyNkZWZpbmUgRVhUMl9MSUJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAkoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEV8XAorCQkJCQkgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkV8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTXxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpCisjZWxzZQorI2RlZmluZSBFWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQCShFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUnxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRXxcCisJCQkJCSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9ESVJfTkxJTkt8XAorCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRXxcCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNfFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IGFsbG93ZWQgaWYgRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTIGlzIHBhc3NlZAorICogdG8gZXh0MmZzX29wZW5mcygpCisgKi8KKyNkZWZpbmUgRVhUMl9MSUJfU09GVFNVUFBfSU5DT01QQVQJKDApCisjZGVmaW5lIEVYVDJfTElCX1NPRlRTVVBQX1JPX0NPTVBBVAkoRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9SRVBMSUNBKQorCisKKy8qIFRyYW5zbGF0ZSBhIGJsb2NrIG51bWJlciB0byBhIGNsdXN0ZXIgbnVtYmVyICovCisjZGVmaW5lIEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKQkoMSA8PCAoZnMpLT5jbHVzdGVyX3JhdGlvX2JpdHMpCisjZGVmaW5lIEVYVDJGU19DTFVTVEVSX01BU0soZnMpCQkoRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpIC0gMSkKKyNkZWZpbmUgRVhUMkZTX0IyQyhmcywgYmxrKQkJKChibGspID4+IChmcyktPmNsdXN0ZXJfcmF0aW9fYml0cykKKy8qIFRyYW5zbGF0ZSBhIGNsdXN0ZXIgbnVtYmVyIHRvIGEgYmxvY2sgbnVtYmVyICovCisjZGVmaW5lIEVYVDJGU19DMkIoZnMsIGNsdXN0ZXIpCQkoKGNsdXN0ZXIpIDw8IChmcyktPmNsdXN0ZXJfcmF0aW9fYml0cykKKy8qIFRyYW5zbGF0ZSAjIG9mIGJsa3MgdG8gIyBvZiBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyRlNfTlVNX0IyQyhmcywgYmxrcykJKCgoYmxrcykgKyBFWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKSkgPj4gXAorCQkJCQkgKGZzKS0+Y2x1c3Rlcl9yYXRpb19iaXRzKQorCisjaWYgZGVmaW5lZChIQVZFX0ZTVEFUNjQpICYmICFkZWZpbmVkKF9fT1NYX0FWQUlMQUJMRV9CVVRfREVQUkVDQVRFRCkKK3R5cGVkZWYgc3RydWN0IHN0YXQ2NCBleHQyZnNfc3RydWN0X3N0YXQ7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3Qgc3RhdCBleHQyZnNfc3RydWN0X3N0YXQ7CisjZW5kaWYKKworLyoKKyAqIEZvciBleHQyZnNfY2xvc2UyKCkgYW5kIGV4dDJmc19mbHVzaDIoKSwgdGhpcyBmbGFnIGFsbG93cyB5b3UgdG8KKyAqIGF2b2lkIHRoZSBmc3luYyBjYWxsLgorICovCisjZGVmaW5lIEVYVDJfRkxBR19GTFVTSF9OT19TWU5DICAgICAgICAgIDEKKworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKiBUaGUgTEFSR0VfRklMRSBmZWF0dXJlIHNob3VsZCBiZSBzZXQgaWYgd2UgaGF2ZSBzdG9yZWQgZmlsZXMgMkdCKyBpbiBzaXplICovCitzdGF0aWMgaW5saW5lIGludCBleHQyZnNfbmVlZHNfbGFyZ2VfZmlsZV9mZWF0dXJlKHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlX3NpemUpCit7CisJcmV0dXJuIGZpbGVfc2l6ZSA+PSAweDgwMDAwMDAwVUxMOworfQorCisvKiBhbGxvYy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19uZXdfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBpbnQgbW9kZSwKKwkJCQkgIGV4dDJmc19pbm9kZV9iaXRtYXAgbWFwLCBleHQyX2lub190ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBnb2FsLAorCQkJCSAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtYXAsIGJsa190ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgbWFwLCBibGs2NF90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2ZyZWVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBzdGFydCwKKwkJCQkJYmxrX3QgZmluaXNoLCBpbnQgbnVtLAorCQkJCQlleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwKKwkJCQkJYmxrX3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfZnJlZV9ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IHN0YXJ0LAorCQkJCQkgYmxrNjRfdCBmaW5pc2gsIGludCBudW0sCisJCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwIG1hcCwKKwkJCQkJIGJsazY0X3QgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY19ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgZ29hbCwKKwkJCQkgICAgY2hhciAqYmxvY2tfYnVmLCBibGtfdCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jX2Jsb2NrMihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBnb2FsLAorCQkJCSAgICAgY2hhciAqYmxvY2tfYnVmLCBibGs2NF90ICpyZXQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3NldF9hbGxvY19ibG9ja19jYWxsYmFjayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIGVycmNvZGVfdCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJCSAgICAgIGJsazY0X3QgZ29hbCwKKwkJCQkJCQkgICAgICBibGs2NF90ICpyZXQpLAorCQkJCQkgICAgZXJyY29kZV90ICgqKm9sZCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkJICAgICAgYmxrNjRfdCBnb2FsLAorCQkJCQkJCSAgICAgIGJsazY0X3QgKnJldCkpOworCisvKiBhbGxvY19zYi5jICovCitleHRlcm4gaW50IGV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZXh0Ml9maWxzeXMgZnMsCisJCQkJCWRncnBfdCBncm91cCwKKwkJCQkJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zZXRfYmxvY2tfYWxsb2Nfc3RhdHNfY2FsbGJhY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgIHZvaWQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQkgICAgICAgYmxrNjRfdCBibGssCisJCQkJCQkJICAgICAgIGludCBpbnVzZSksCisJCQkJCQkgIHZvaWQgKCoqb2xkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCQkgICAgICAgYmxrNjRfdCBibGssCisJCQkJCQkJICAgICAgIGludCBpbnVzZSkpOworCisvKiBhbGxvY19zdGF0cy5jICovCit2b2lkIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0cyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGludCBpbnVzZSk7Cit2b2lkIGV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgIGludCBpbnVzZSwgaW50IGlzZGlyKTsKK3ZvaWQgZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBpbnVzZSk7Cit2b2lkIGV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBpbnQgaW51c2UpOworCisvKiBhbGxvY190YWJsZXMuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfdGFibGVzKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKTsKKworLyogYmFkYmxvY2tzLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3UzMl9saXN0X2NyZWF0ZShleHQyX3UzMl9saXN0ICpyZXQsIGludCBzaXplKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3UzMl9saXN0X2FkZChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspOworZXh0ZXJuIGludCBleHQyZnNfdTMyX2xpc3RfZmluZChleHQyX3UzMl9saXN0IGJiLCBfX3UzMiBibGspOworZXh0ZXJuIGludCBleHQyZnNfdTMyX2xpc3RfdGVzdChleHQyX3UzMl9saXN0IGJiLCBibGtfdCBibGspOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfdTMyX2xpc3RfaXRlcmF0ZV9iZWdpbihleHQyX3UzMl9saXN0IGJiLAorCQkJCQkgICAgICAgZXh0Ml91MzJfaXRlcmF0ZSAqcmV0KTsKK2V4dGVybiBpbnQgZXh0MmZzX3UzMl9saXN0X2l0ZXJhdGUoZXh0Ml91MzJfaXRlcmF0ZSBpdGVyLCBibGtfdCAqYmxrKTsKK2V4dGVybiB2b2lkIGV4dDJmc191MzJfbGlzdF9pdGVyYXRlX2VuZChleHQyX3UzMl9pdGVyYXRlIGl0ZXIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfdTMyX2NvcHkoZXh0Ml91MzJfbGlzdCBzcmMsIGV4dDJfdTMyX2xpc3QgKmRlc3QpOworZXh0ZXJuIGludCBleHQyZnNfdTMyX2xpc3RfZXF1YWwoZXh0Ml91MzJfbGlzdCBiYjEsIGV4dDJfdTMyX2xpc3QgYmIyKTsKKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKGV4dDJfYmFkYmxvY2tzX2xpc3QgKnJldCwKKwkJCQkJICAgIGludCBzaXplKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChleHQyX2JhZGJsb2Nrc19saXN0IGJiLAorCQkJCQkgICBibGtfdCBibGspOworZXh0ZXJuIGludCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChleHQyX2JhZGJsb2Nrc19saXN0IGJiLAorCQkJCSAgICBibGtfdCBibGspOworZXh0ZXJuIGludCBleHQyZnNfdTMyX2xpc3RfZGVsKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsayk7CitleHRlcm4gdm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZGVsKGV4dDJfdTMyX2xpc3QgYmIsIF9fdTMyIGJsayk7CitleHRlcm4gZXJyY29kZV90CisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oZXh0Ml9iYWRibG9ja3NfbGlzdCBiYiwKKwkJCQkJICAgIGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgKnJldCk7CitleHRlcm4gaW50IGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlKGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgaXRlciwKKwkJCQkJIGJsa190ICpibGspOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGV4dDJfYmFkYmxvY2tzX2l0ZXJhdGUgaXRlcik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19iYWRibG9ja3NfY29weShleHQyX2JhZGJsb2Nrc19saXN0IHNyYywKKwkJCQkgICAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqZGVzdCk7CitleHRlcm4gaW50IGV4dDJmc19iYWRibG9ja3NfZXF1YWwoZXh0Ml9iYWRibG9ja3NfbGlzdCBiYjEsCisJCQkJICBleHQyX2JhZGJsb2Nrc19saXN0IGJiMik7CitleHRlcm4gaW50IGV4dDJmc191MzJfbGlzdF9jb3VudChleHQyX3UzMl9saXN0IGJiKTsKKworLyogYmJfY29tcGF0ICovCitleHRlcm4gZXJyY29kZV90IGJhZGJsb2Nrc19saXN0X2NyZWF0ZShiYWRibG9ja3NfbGlzdCAqcmV0LCBpbnQgc2l6ZSk7CitleHRlcm4gZXJyY29kZV90IGJhZGJsb2Nrc19saXN0X2FkZChiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgYmxrKTsKK2V4dGVybiBpbnQgYmFkYmxvY2tzX2xpc3RfdGVzdChiYWRibG9ja3NfbGlzdCBiYiwgYmxrX3QgYmxrKTsKK2V4dGVybiBlcnJjb2RlX3QgYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYWRibG9ja3NfbGlzdCBiYiwKKwkJCQkJICAgICAgYmFkYmxvY2tzX2l0ZXJhdGUgKnJldCk7CitleHRlcm4gaW50IGJhZGJsb2Nrc19saXN0X2l0ZXJhdGUoYmFkYmxvY2tzX2l0ZXJhdGUgaXRlciwgYmxrX3QgKmJsayk7CitleHRlcm4gdm9pZCBiYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChiYWRibG9ja3NfaXRlcmF0ZSBpdGVyKTsKK2V4dGVybiB2b2lkIGJhZGJsb2Nrc19saXN0X2ZyZWUoYmFkYmxvY2tzX2xpc3QgYmIpOworCisvKiBiYl9pbm9kZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc191cGRhdGVfYmJfaW5vZGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJCWV4dDJfYmFkYmxvY2tzX2xpc3QgYmJfbGlzdCk7CisKKy8qIGJpdG1hcHMuYyAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jb3B5X2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgc3JjLAorCQkJCSAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKmRlc3QpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGVfYml0bWFwKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Jsb2NrX2JpdG1hcCAoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAgKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCSAgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9zdWJjbHVzdGVyX2JpdG1hcChleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLAorCQkJCQkJICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBpbnQgZXh0MmZzX2dldF9iaXRtYXBfZ3JhbnVsYXJpdHkoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkJICAgICAgZXh0MmZzX2lub2RlX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2lub2RlX2JpdG1hcF9lbmQoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBleHQyX2lub190IGVuZCwgZXh0Ml9pbm9fdCAqb2VuZCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kKGV4dDJmc19ibG9ja19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgYmxrX3QgZW5kLCBibGtfdCAqb2VuZCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9ibG9ja19iaXRtYXBfZW5kMihleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCwKKwkJCQkJIGJsazY0X3QgZW5kLCBibGs2NF90ICpvZW5kKTsKK2V4dGVybiB2b2lkIGV4dDJmc19jbGVhcl9pbm9kZV9iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2NsZWFyX2Jsb2NrX2JpdG1hcChleHQyZnNfYmxvY2tfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfYml0bWFwcyhleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwKF9fdTMyIG5ld19lbmQsIF9fdTMyIG5ld19yZWFsX2VuZCwKKwkJCQkJICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfaW5vZGVfYml0bWFwMihfX3U2NCBuZXdfZW5kLAorCQkJCQkgICAgIF9fdTY0IG5ld19yZWFsX2VuZCwKKwkJCQkJICAgICBleHQyZnNfaW5vZGVfYml0bWFwIGJtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcChfX3UzMiBuZXdfZW5kLCBfX3UzMiBuZXdfcmVhbF9lbmQsCisJCQkJCSAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX2Jsb2NrX2JpdG1hcDIoX191NjQgbmV3X2VuZCwKKwkJCQkJICAgICBfX3U2NCBuZXdfcmVhbF9lbmQsCisJCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfYmxvY2tfYml0bWFwKGV4dDJmc19ibG9ja19iaXRtYXAgYm0xLAorCQkJCQkgICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYm0yKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfaW5vZGVfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYm0xLAorCQkJCQkgICAgIGV4dDJmc19pbm9kZV9iaXRtYXAgYm0yKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9pbm9kZV9iaXRtYXBfcmFuZ2UoZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwLAorCQkJCQlleHQyX2lub190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICppbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfaW5vZGVfYml0bWFwX3JhbmdlMihleHQyZnNfaW5vZGVfYml0bWFwIGJtYXAsCisJCQkJCSBfX3U2NCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKmluKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9pbm9kZV9iaXRtYXBfcmFuZ2UoZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwLAorCQkJCQlleHQyX2lub190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2lub2RlX2JpdG1hcCBibWFwLAorCQkJCQkgX191NjQgc3RhcnQsIHNpemVfdCBudW0sCisJCQkJCSB2b2lkICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCWJsa190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICppbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCSBibGs2NF90IHN0YXJ0LCBzaXplX3QgbnVtLAorCQkJCQkgdm9pZCAqaW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9yYW5nZShleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJCWJsa190IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICpvdXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwLAorCQkJCQkgYmxrNjRfdCBzdGFydCwgc2l6ZV90IG51bSwKKwkJCQkJIHZvaWQgKm91dCk7CisKKy8qIGJsa251bS5jICovCitleHRlcm4gZGdycF90IGV4dDJmc19ncm91cF9vZl9ibGsyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90KTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gaW50IGV4dDJmc19ncm91cF9ibG9ja3NfY291bnQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19pbm9kZV9pX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcik7CitleHRlcm4gdm9pZCBleHQyZnNfYmxvY2tzX2NvdW50X3NldChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsCisJCQkJICAgIGJsazY0X3QgYmxrKTsKK2V4dGVybiB2b2lkIGV4dDJmc19ibG9ja3NfY291bnRfYWRkKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwKKwkJCQkgICAgYmxrNjRfdCBibGspOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcik7CitleHRlcm4gdm9pZCBleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwKKwkJCQkgICAgICBibGs2NF90IGJsayk7CitleHRlcm4gdm9pZCBleHQyZnNfcl9ibG9ja3NfY291bnRfYWRkKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlciwKKwkJCQkgICAgICBibGs2NF90IGJsayk7CitleHRlcm4gYmxrNjRfdCBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnN1cGVyLAorCQkJCQkgYmxrNjRfdCBibGspOworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X2FkZChzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc3VwZXIsCisJCQkJCSBibGs2NF90IGJsayk7CisvKiBCbG9jayBncm91cCBkZXNjcmlwdG9yIGFjY2Vzc29yIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmV4dDJmc19ncm91cF9kZXNjKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBvcGFxdWVfZXh0Ml9ncm91cF9kZXNjICpnZHAsCisJCQkJCSAgZGdycF90IGdyb3VwKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Nfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJCWJsazY0X3QgYmxrKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJCWJsazY0X3QgYmxrKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLAorCQkJCSAgICAgICBibGs2NF90IGJsayk7CitleHRlcm4gX191MzIgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLAorCQkJCQkgX191MzIgbik7CitleHRlcm4gX191MzIgZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX2ZyZWVfaW5vZGVzX2NvdW50X3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLAorCQkJCQkgX191MzIgbik7CitleHRlcm4gX191MzIgZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiB2b2lkIGV4dDJmc19iZ191c2VkX2RpcnNfY291bnRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgICAgIF9fdTMyIG4pOworZXh0ZXJuIF9fdTMyIGV4dDJmc19iZ19pdGFibGVfdW51c2VkKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWRfc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgICBfX3UzMiBuKTsKK2V4dGVybiBfX3UxNiBleHQyZnNfYmdfZmxhZ3MoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfZmxhZ3NfemFwKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXApOworZXh0ZXJuIGludCBleHQyZnNfYmdfZmxhZ3NfdGVzdChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwLCBfX3UxNiBiZ19mbGFnKTsKK2V4dGVybiB2b2lkIGV4dDJmc19iZ19mbGFnc19zZXQoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgX191MTYgYmdfZmxhZ3MpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTE2IGJnX2ZsYWdzKTsKK2V4dGVybiBfX3UxNiBleHQyZnNfYmdfY2hlY2tzdW0oZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmdfY2hlY2tzdW1fc2V0KGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXAsIF9fdTE2IGNoZWNrc3VtKTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19maWxlX2FjbF9ibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBleHQyZnNfZmlsZV9hY2xfYmxvY2tfc2V0KGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgYmxrNjRfdCBibGspOworCisvKiBibG9jay5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgIGV4dDJfaW5vX3QJaW5vLAorCQkJCSAgICAgIGludAlmbGFncywKKwkJCQkgICAgICBjaGFyICpibG9ja19idWYsCisJCQkJICAgICAgaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgIGJsa190CSpibG9ja25yLAorCQkJCQkJICBpbnQJYmxvY2tjbnQsCisJCQkJCQkgIHZvaWQJKnByaXZfZGF0YSksCisJCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKK2VycmNvZGVfdCBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoZXh0Ml9maWxzeXMgZnMsCisJCQkJZXh0Ml9pbm9fdAlpbm8sCisJCQkJaW50CWZsYWdzLAorCQkJCWNoYXIgKmJsb2NrX2J1ZiwKKwkJCQlpbnQgKCpmdW5jKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIGJsa190CSpibG9ja25yLAorCQkJCQkgICAgZTJfYmxrY250X3QJYmxvY2tjbnQsCisJCQkJCSAgICBibGtfdAlyZWZfYmxrLAorCQkJCQkgICAgaW50CQlyZWZfb2Zmc2V0LAorCQkJCQkgICAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQl2b2lkICpwcml2X2RhdGEpOworZXJyY29kZV90IGV4dDJmc19ibG9ja19pdGVyYXRlMyhleHQyX2ZpbHN5cyBmcywKKwkJCQlleHQyX2lub190IGlubywKKwkJCQlpbnQJZmxhZ3MsCisJCQkJY2hhciAqYmxvY2tfYnVmLAorCQkJCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICAgYmxrNjRfdAkqYmxvY2tuciwKKwkJCQkJICAgIGUyX2Jsa2NudF90CWJsb2NrY250LAorCQkJCQkgICAgYmxrNjRfdAlyZWZfYmxrLAorCQkJCQkgICAgaW50CQlyZWZfb2Zmc2V0LAorCQkJCQkgICAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCQl2b2lkICpwcml2X2RhdGEpOworCisvKiBibWFwLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICAgIGNoYXIgKmJsb2NrX2J1ZiwgaW50IGJtYXBfZmxhZ3MsCisJCQkgICAgIGJsa190IGJsb2NrLCBibGtfdCAqcGh5c19ibGspOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYm1hcDIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJICAgICAgY2hhciAqYmxvY2tfYnVmLCBpbnQgYm1hcF9mbGFncywgYmxrNjRfdCBibG9jaywKKwkJCSAgICAgIGludCAqcmV0X2ZsYWdzLCBibGs2NF90ICpwaHlzX2Jsayk7CitlcnJjb2RlX3QgZXh0MmZzX21hcF9jbHVzdGVyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGJsazY0X3QgbGJsaywKKwkJCQkgICBibGs2NF90ICpwYmxrKTsKKworI2lmIDAKKy8qIGJtb3ZlLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX21vdmVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmUsCisJCQkJICAgIGV4dDJmc19ibG9ja19iaXRtYXAgYWxsb2NfbWFwLAorCQkJCSAgICBpbnQgZmxhZ3MpOworI2VuZGlmCisKKy8qIGNoZWNrX2Rlc2MuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY2hlY2tfZGVzYyhleHQyX2ZpbHN5cyBmcyk7CisKKy8qIGNsb3NlZnMuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY2xvc2UoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY2xvc2UyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmx1c2goZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBleHQyZnNfYmdfaGFzX3N1cGVyKGV4dDJfZmlsc3lzIGZzLCBkZ3JwX3QgZ3JvdXBfYmxvY2spOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgIGJsazY0X3QgKnJldF9zdXBlcl9ibGssCisJCQkJICAgIGJsazY0X3QgKnJldF9vbGRfZGVzY19ibGssCisJCQkJICAgIGJsazY0X3QgKnJldF9uZXdfZGVzY19ibGssCisJCQkJICAgIGJsa190ICpyZXRfdXNlZF9ibGtzKTsKK2V4dGVybiBpbnQgZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICBkZ3JwX3QgZ3JvdXAsCisJCQkJICAgIGJsa190ICpyZXRfc3VwZXJfYmxrLAorCQkJCSAgICBibGtfdCAqcmV0X29sZF9kZXNjX2JsaywKKwkJCQkgICAgYmxrX3QgKnJldF9uZXdfZGVzY19ibGssCisJCQkJICAgIGludCAqcmV0X21ldGFfYmcpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3VwZGF0ZV9keW5hbWljX3JldihleHQyX2ZpbHN5cyBmcyk7CisKKy8qIGNyYzMyYy5jICovCitleHRlcm4gX191MzIgZXh0MmZzX2NyYzMyY19iZShfX3UzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOworZXh0ZXJuIF9fdTMyIGV4dDJmc19jcmMzMmNfbGUoX191MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKKworLyogY3N1bS5jICovCitleHRlcm4gdm9pZCBleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBpbnQgZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfZ2R0X2NzdW0oZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIF9fdTE2IGV4dDJmc19ncm91cF9kZXNjX2NzdW0oZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCk7CisKKy8qIGRibGlzdC5jICovCisKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9udW1fZGlycyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCAqcmV0X251bV9kaXJzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2luaXRfZGJsaXN0KGV4dDJfZmlsc3lzIGZzLCBleHQyX2RibGlzdCAqcmV0X2RibGlzdCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hZGRfZGlyX2Jsb2NrKGV4dDJfZGJsaXN0IGRibGlzdCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgICAgYmxrX3QgYmxrLCBpbnQgYmxvY2tjbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRkX2Rpcl9ibG9jazIoZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICAgYmxrNjRfdCBibGssIGUyX2Jsa2NudF90IGJsb2NrY250KTsKK2V4dGVybiB2b2lkIGV4dDJmc19kYmxpc3Rfc29ydChleHQyX2RibGlzdCBkYmxpc3QsCisJCQkgICAgICAgRVhUMl9RU09SVF9UWVBFICgqc29ydGZ1bmMpKGNvbnN0IHZvaWQgKiwKKwkJCQkJCQkgICBjb25zdCB2b2lkICopKTsKK2V4dGVybiB2b2lkIGV4dDJmc19kYmxpc3Rfc29ydDIoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCUVYVDJfUVNPUlRfVFlQRSAoKnNvcnRmdW5jKShjb25zdCB2b2lkICosCisJCQkJCQkJICAgIGNvbnN0IHZvaWQgKikpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZGJsaXN0X2l0ZXJhdGUoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCWludCAoKmZ1bmMpKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSAqZGJfaW5mbywKKwkJICAgIHZvaWQJKnByaXZfZGF0YSksCisgICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9pdGVyYXRlMihleHQyX2RibGlzdCBkYmxpc3QsCisJaW50ICgqZnVuYykoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2RiX2VudHJ5MiAqZGJfaW5mbywKKwkJICAgIHZvaWQJKnByaXZfZGF0YSksCisgICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9kaXJfYmxvY2soZXh0Ml9kYmxpc3QgZGJsaXN0LCBleHQyX2lub190IGlubywKKwkJCQkgICAgICBibGtfdCBibGssIGludCBibG9ja2NudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfZGlyX2Jsb2NrMihleHQyX2RibGlzdCBkYmxpc3QsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgICBibGs2NF90IGJsaywgZTJfYmxrY250X3QgYmxvY2tjbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY29weV9kYmxpc3QoZXh0Ml9kYmxpc3Qgc3JjLAorCQkJCSAgICBleHQyX2RibGlzdCAqZGVzdCk7CitleHRlcm4gaW50IGV4dDJmc19kYmxpc3RfY291bnQoZXh0Ml9kYmxpc3QgZGJsaXN0KTsKK2V4dGVybiBibGs2NF90IGV4dDJmc19kYmxpc3RfY291bnQyKGV4dDJfZGJsaXN0IGRibGlzdCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kYmxpc3RfZ2V0X2xhc3QoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCQlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeSAqKmVudHJ5KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2RibGlzdF9nZXRfbGFzdDIoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCQlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKiplbnRyeSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kYmxpc3RfZHJvcF9sYXN0KGV4dDJfZGJsaXN0IGRibGlzdCk7CisKKy8qIGRibGlzdF9kaXIuYyAqLworZXh0ZXJuIGVycmNvZGVfdAorCWV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUoZXh0Ml9kYmxpc3QgZGJsaXN0LAorCQkJCSAgaW50CWZsYWdzLAorCQkJCSAgY2hhcgkqYmxvY2tfYnVmLAorCQkJCSAgaW50ICgqZnVuYykoZXh0Ml9pbm9fdAlkaXIsCisJCQkJCSAgICAgIGludAkJZW50cnksCisJCQkJCSAgICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJCQkgICAgICBpbnQJb2Zmc2V0LAorCQkJCQkgICAgICBpbnQJYmxvY2tzaXplLAorCQkJCQkgICAgICBjaGFyCSpidWYsCisJCQkJCSAgICAgIHZvaWQJKnByaXZfZGF0YSksCisJCQkJICB2b2lkICpwcml2X2RhdGEpOworCisvKiBkaXJibG9jay5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJICAgICAgIHZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2Rpcl9ibG9jazIoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsb2NrLAorCQkJCQl2b2lkICpidWYsIGludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2Rpcl9ibG9jazMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJCXZvaWQgKmJ1ZiwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJCXZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9kaXJfYmxvY2syKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibG9jaywKKwkJCQkJIHZvaWQgKmJ1ZiwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazMoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJCSB2b2lkICpidWYsIGludCBmbGFncyk7CisKKy8qIGRpcmhhc2guYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZGlyaGFzaChpbnQgdmVyc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQljb25zdCBfX3UzMiAqc2VlZCwKKwkJCQlleHQyX2Rpcmhhc2hfdCAqcmV0X2hhc2gsCisJCQkJZXh0Ml9kaXJoYXNoX3QgKnJldF9taW5vcl9oYXNoKTsKKworCisvKiBkaXJfaXRlcmF0ZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfcmVjX2xlbihleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqcmVjX2xlbik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfcmVjX2xlbihleHQyX2ZpbHN5cyBmcywKKwkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpkaXJlbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZGlyX2l0ZXJhdGUoZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgICBleHQyX2lub190IGRpciwKKwkJCSAgICAgIGludCBmbGFncywKKwkJCSAgICAgIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCSAgICAgIGludCAoKmZ1bmMpKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkJCQkgIGludAlvZmZzZXQsCisJCQkJCSAgaW50CWJsb2Nrc2l6ZSwKKwkJCQkJICBjaGFyCSpidWYsCisJCQkJCSAgdm9pZAkqcHJpdl9kYXRhKSwKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kaXJfaXRlcmF0ZTIoZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgICBleHQyX2lub190IGRpciwKKwkJCSAgICAgIGludCBmbGFncywKKwkJCSAgICAgIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCSAgICAgIGludCAoKmZ1bmMpKGV4dDJfaW5vX3QJZGlyLAorCQkJCQkgIGludAllbnRyeSwKKwkJCQkJICBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCQkJICBpbnQJb2Zmc2V0LAorCQkJCQkgIGludAlibG9ja3NpemUsCisJCQkJCSAgY2hhcgkqYnVmLAorCQkJCQkgIHZvaWQJKnByaXZfZGF0YSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpOworCisvKiBkdXBmcy5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19kdXBfaGFuZGxlKGV4dDJfZmlsc3lzIHNyYywgZXh0Ml9maWxzeXMgKmRlc3QpOworCisvKiBleHBhbmRkaXIuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXhwYW5kX2RpcihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIpOworCisvKiBleHRfYXR0ci5jICovCitleHRlcm4gX191MzIgZXh0MmZzX2V4dF9hdHRyX2hhc2hfZW50cnkoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmVudHJ5LAorCQkJCQl2b2lkICpkYXRhKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZXh0X2F0dHIoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsb2NrLCB2b2lkICpidWYpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9leHRfYXR0cjIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJICAgICAgIHZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9leHRfYXR0cihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssCisJCQkJICAgICAgIHZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc193cml0ZV9leHRfYXR0cjIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssCisJCQkJICAgICAgIHZvaWQgKmJ1Zik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywKKwkJCQkJICAgY2hhciAqYmxvY2tfYnVmLAorCQkJCQkgICBpbnQgYWRqdXN0LCBfX3UzMiAqbmV3Y291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MihleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibGssCisJCQkJCSAgIGNoYXIgKmJsb2NrX2J1ZiwKKwkJCQkJICAgaW50IGFkanVzdCwgX191MzIgKm5ld2NvdW50KTsKKworLyogZXh0ZW50LmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9oZWFkZXJfdmVyaWZ5KHZvaWQgKnB0ciwgaW50IHNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X29wZW4oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICBleHQyX2V4dGVudF9oYW5kbGVfdCAqaGFuZGxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9vcGVuMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkJZXh0Ml9leHRlbnRfaGFuZGxlX3QgKnJldF9oYW5kbGUpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2V4dGVudF9mcmVlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfZ2V0KGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQkgICBpbnQgZmxhZ3MsIHN0cnVjdCBleHQyZnNfZXh0ZW50ICpleHRlbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X25vZGVfc3BsaXQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9yZXBsYWNlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZsYWdzLAorCQkJCSAgICAgICBzdHJ1Y3QgZXh0MmZzX2V4dGVudCAqZXh0ZW50KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9pbnNlcnQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MsCisJCQkJICAgICAgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCQlibGs2NF90IGxvZ2ljYWwsIGJsazY0X3QgcGh5c2ljYWwsCisJCQkJCWludCBmbGFncyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfZGVsZXRlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJCXN0cnVjdCBleHQyX2V4dGVudF9pbmZvICppbmZvKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nb3RvKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQkgICAgYmxrNjRfdCBibGspOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZXh0ZW50X2dvdG8yKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQkgICAgIGludCBsZWFmX2xldmVsLCBibGs2NF90IGJsayk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlKTsKKworLyogZmlsZWlvLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfb3BlbjIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgICBpbnQgZmxhZ3MsIGV4dDJfZmlsZV90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9vcGVuKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgIGludCBmbGFncywgZXh0Ml9maWxlX3QgKnJldCk7CitleHRlcm4gZXh0Ml9maWxzeXMgZXh0MmZzX2ZpbGVfZ2V0X2ZzKGV4dDJfZmlsZV90IGZpbGUpOworc3RydWN0IGV4dDJfaW5vZGUgKmV4dDJmc19maWxlX2dldF9pbm9kZShleHQyX2ZpbGVfdCBmaWxlKTsKK2V4dGVybiBleHQyX2lub190IGV4dDJmc19maWxlX2dldF9pbm9kZV9udW0oZXh0Ml9maWxlX3QgZmlsZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maWxlX2Nsb3NlKGV4dDJfZmlsZV90IGZpbGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9mbHVzaChleHQyX2ZpbGVfdCBmaWxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfcmVhZChleHQyX2ZpbGVfdCBmaWxlLCB2b2lkICpidWYsCisJCQkJICB1bnNpZ25lZCBpbnQgd2FudGVkLCB1bnNpZ25lZCBpbnQgKmdvdCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19maWxlX3dyaXRlKGV4dDJfZmlsZV90IGZpbGUsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1bnNpZ25lZCBpbnQgKndyaXR0ZW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmlsZV9sbHNlZWsoZXh0Ml9maWxlX3QgZmlsZSwgX191NjQgb2Zmc2V0LAorCQkJCSAgIGludCB3aGVuY2UsIF9fdTY0ICpyZXRfcG9zKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfbHNlZWsoZXh0Ml9maWxlX3QgZmlsZSwgZXh0Ml9vZmZfdCBvZmZzZXQsCisJCQkJICAgaW50IHdoZW5jZSwgZXh0Ml9vZmZfdCAqcmV0X3Bvcyk7CitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfZ2V0X2xzaXplKGV4dDJfZmlsZV90IGZpbGUsIF9fdTY0ICpyZXRfc2l6ZSk7CitleHRlcm4gZXh0Ml9vZmZfdCBleHQyZnNfZmlsZV9nZXRfc2l6ZShleHQyX2ZpbGVfdCBmaWxlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfc2V0X3NpemUoZXh0Ml9maWxlX3QgZmlsZSwgZXh0Ml9vZmZfdCBzaXplKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfc2V0X3NpemUyKGV4dDJfZmlsZV90IGZpbGUsIGV4dDJfb2ZmNjRfdCBzaXplKTsKKworLyogZmluZGRldi5jICovCitleHRlcm4gY2hhciAqZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlKGRldl90IGRldmljZSk7CisKKy8qIGZsdXNoYi5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zeW5jX2RldmljZShpbnQgZmQsIGludCBmbHVzaGIpOworCisvKiBmcmVlZnMuYyAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWUoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2ZyZWVfZGJsaXN0KGV4dDJfZGJsaXN0IGRibGlzdCk7CitleHRlcm4gdm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShleHQyX2JhZGJsb2Nrc19saXN0IGJiKTsKK2V4dGVybiB2b2lkIGV4dDJmc191MzJfbGlzdF9mcmVlKGV4dDJfdTMyX2xpc3QgYmIpOworCisvKiBnZW5fYml0bWFwLmMgKi8KK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2dlbmVyaWNfYml0bWFwKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX21ha2VfZ2VuZXJpY19iaXRtYXAoZXJyY29kZV90IG1hZ2ljLCBleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIF9fdTMyIHN0YXJ0LCBfX3UzMiBlbmQsCisJCQkJCSAgICBfX3UzMiByZWFsX2VuZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmRlc2NyLCBjaGFyICppbml0X21hcCwKKwkJCQkJICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FsbG9jYXRlX2dlbmVyaWNfYml0bWFwKF9fdTMyIHN0YXJ0LAorCQkJCQkJX191MzIgZW5kLAorCQkJCQkJX191MzIgcmVhbF9lbmQsCisJCQkJCQljb25zdCBjaGFyICpkZXNjciwKKwkJCQkJCWV4dDJmc19nZW5lcmljX2JpdG1hcCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvcHlfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIHNyYywKKwkJCQkJICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqZGVzdCk7CitleHRlcm4gdm9pZCBleHQyZnNfY2xlYXJfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19mdWRnZV9nZW5lcmljX2JpdG1hcF9lbmQoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgZXJyY29kZV90IG1hZ2ljLAorCQkJCQkJIGVycmNvZGVfdCBuZXEsCisJCQkJCQkgZXh0Ml9pbm9fdCBlbmQsCisJCQkJCQkgZXh0Ml9pbm9fdCAqb2VuZCk7CitleHRlcm4gdm9pZCBleHQyZnNfc2V0X2dlbmVyaWNfYml0bWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIG1hcCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZXNpemVfZ2VuZXJpY19iaXRtYXAoZXJyY29kZV90IG1hZ2ljLAorCQkJCQkgICAgICBfX3UzMiBuZXdfZW5kLAorCQkJCQkgICAgICBfX3UzMiBuZXdfcmVhbF9lbmQsCisJCQkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19iaXRtYXAoZXJyY29kZV90IG1hZ2ljLCBlcnJjb2RlX3QgbmVxLAorCQkJCQkgICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtMSwKKwkJCQkJICAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibTIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2dlbmVyaWNfYml0bWFwX3JhbmdlKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCQkJIGVycmNvZGVfdCBtYWdpYywKKwkJCQkJCSBfX3UzMiBzdGFydCwgX191MzIgbnVtLAorCQkJCQkJIHZvaWQgKm91dCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJCQkgZXJyY29kZV90IG1hZ2ljLAorCQkJCQkJIF9fdTMyIHN0YXJ0LCBfX3UzMiBudW0sCisJCQkJCQkgdm9pZCAqaW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCQkgICAgICAgX191MzIgc3RhcnQsIF9fdTMyIGVuZCwKKwkJCQkJCSAgICAgICBfX3UzMiAqb3V0KTsKKworLyogZ2VuX2JpdG1hcDY0LmMgKi8KKworLyogR2VuZXJhdGUgYW5kIHByaW50IGJpdG1hcCB1c2FnZSBzdGF0aXN0aWNzICovCisjZGVmaW5lIEJNQVBfU1RBVFMKKwordm9pZCBleHQyZnNfZnJlZV9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApOworZXJyY29kZV90IGV4dDJmc19hbGxvY19nZW5lcmljX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGVycmNvZGVfdCBtYWdpYywKKwkJCQkgICAgaW50IHR5cGUsIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsCisJCQkJICAgIF9fdTY0IHJlYWxfZW5kLAorCQkJCSAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpyZXQpOworZXJyY29kZV90IGV4dDJmc19jb3B5X2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgc3JjLAorCQkJCSAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqZGVzdCk7Cit2b2lkIGV4dDJmc19jbGVhcl9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCk7CitlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYm1hcF9lbmQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJZXJyY29kZV90IG5lcSwKKwkJCQkJX191NjQgZW5kLCBfX3U2NCAqb2VuZCk7Cit2b2lkIGV4dDJmc19zZXRfZ2VuZXJpY19ibWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApOworZXJyY29kZV90IGV4dDJmc19yZXNpemVfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBibWFwLAorCQkJCSAgICAgX191NjQgbmV3X2VuZCwKKwkJCQkgICAgIF9fdTY0IG5ld19yZWFsX2VuZCk7CitlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19ibWFwKGVycmNvZGVfdCBuZXEsCisJCQkJICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtMSwKKwkJCQkgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0yKTsKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKm91dCk7CitlcnJjb2RlX3QgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJCV9fdTY0IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQl2b2lkICppbik7CitlcnJjb2RlX3QgZXh0MmZzX2NvbnZlcnRfc3ViY2x1c3Rlcl9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgKmJpdG1hcCk7CisKKy8qIGdldHNpemUuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9zaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCBibG9ja3NpemUsCisJCQkJCWJsa190ICpyZXRibG9ja3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9zaXplMihjb25zdCBjaGFyICpmaWxlLCBpbnQgYmxvY2tzaXplLAorCQkJCQlibGs2NF90ICpyZXRibG9ja3MpOworCisvKiBnZXRzZWN0c2l6ZS5jICovCitleHRlcm4gaW50IGV4dDJmc19nZXRfZGlvX2FsaWdubWVudChpbnQgZmQpOworZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqc2VjdHNpemUpOworZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3BoeXNfc2VjdHNpemUoY29uc3QgY2hhciAqZmlsZSwgaW50ICpzZWN0c2l6ZSk7CisKKy8qIGlfYmxvY2suYyAqLworZXJyY29kZV90IGV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgYmxrNjRfdCBudW1fYmxvY2tzKTsKK2VycmNvZGVfdCBleHQyZnNfaWJsa19zdWJfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJIGJsazY0X3QgbnVtX2Jsb2Nrcyk7CitlcnJjb2RlX3QgZXh0MmZzX2libGtfc2V0KGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGJsazY0X3QgYik7CisKKy8qIGltYWdlci5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pbWFnZV9pbm9kZV93cml0ZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW1hZ2VfaW5vZGVfcmVhZChleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW1hZ2Vfc3VwZXJfd3JpdGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX3N1cGVyX3JlYWQoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX2JpdG1hcF93cml0ZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW1hZ2VfYml0bWFwX3JlYWQoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwgaW50IGZsYWdzKTsKKworLyogaW5kX2Jsb2NrLmMgKi8KK2VycmNvZGVfdCBleHQyZnNfcmVhZF9pbmRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgdm9pZCAqYnVmKTsKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIHZvaWQgKmJ1Zik7CisKKy8qIGluaXRpYWxpemUuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW5pdGlhbGl6ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsCisJCQkJICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnBhcmFtLAorCQkJCSAgIGlvX21hbmFnZXIgbWFuYWdlciwgZXh0Ml9maWxzeXMgKnJldF9mcyk7CisKKy8qIGljb3VudC5jICovCitleHRlcm4gdm9pZCBleHQyZnNfZnJlZV9pY291bnQoZXh0Ml9pY291bnRfdCBpY291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY3JlYXRlX2ljb3VudF90ZGIoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKnRkYl9kaXIsCisJCQkJCSAgaW50IGZsYWdzLCBleHQyX2ljb3VudF90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY3JlYXRlX2ljb3VudDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUsCisJCQkJICAgICAgIGV4dDJfaWNvdW50X3QgaGludCwgZXh0Ml9pY291bnRfdCAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9pY291bnQoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJCQkgICAgICBleHQyX2ljb3VudF90ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaWNvdW50X2ZldGNoKGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCQkgICAgIF9fdTE2ICpyZXQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaWNvdW50X2luY3JlbWVudChleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCSBfX3UxNiAqcmV0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQoZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCQkgX191MTYgKnJldCk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19pY291bnRfc3RvcmUoZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgICAgX191MTYgY291bnQpOworZXh0ZXJuIGV4dDJfaW5vX3QgZXh0MmZzX2dldF9pY291bnRfc2l6ZShleHQyX2ljb3VudF90IGljb3VudCk7CitlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF92YWxpZGF0ZShleHQyX2ljb3VudF90IGljb3VudCwgRklMRSAqKTsKKworLyogaW5saW5lLmMgKi8KKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X21lbWFsaWduKHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHZvaWQgKnB0cik7CisKKy8qIGlub2RlLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoX2ljYWNoZShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfbmV4dF9pbm9kZV9mdWxsKGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCQkJCQkgICAgZXh0Ml9pbm9fdCAqaW5vLAorCQkJCQkgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCQkgICAgaW50IGJ1ZnNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGV4dDJfZmlsc3lzIGZzLCBpbnQgYnVmZmVyX2Jsb2NrcywKKwkJCQkgIGV4dDJfaW5vZGVfc2NhbiAqcmV0X3NjYW4pOworZXh0ZXJuIHZvaWQgZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oZXh0Ml9pbm9kZV9zY2FuIHNjYW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X25leHRfaW5vZGUoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sIGV4dDJfaW5vX3QgKmlubywKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW5vZGVfc2Nhbl9nb3RvX2Jsb2NrZ3JvdXAoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCQkgICBpbnQJZ3JvdXApOworZXh0ZXJuIHZvaWQgZXh0MmZzX3NldF9pbm9kZV9jYWxsYmFjaworCShleHQyX2lub2RlX3NjYW4gc2NhbiwKKwkgZXJyY29kZV90ICgqZG9uZV9ncm91cCkoZXh0Ml9maWxzeXMgZnMsCisJCQkJIGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCQkJCSBkZ3JwX3QgZ3JvdXAsCisJCQkJIHZvaWQgKiBwcml2X2RhdGEpLAorCSB2b2lkICpkb25lX2dyb3VwX2RhdGEpOworZXh0ZXJuIGludCBleHQyZnNfaW5vZGVfc2Nhbl9mbGFncyhleHQyX2lub2RlX3NjYW4gc2NhbiwgaW50IHNldF9mbGFncywKKwkJCQkgICBpbnQgY2xlYXJfZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkJc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwKKwkJCQkJaW50IGJ1ZnNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZSAoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLAorCQkJCQkgaW50IGJ1ZnNpemUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBibGtfdCAqYmxvY2tzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2RpcmVjdG9yeShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pOworCisvKiBpbm9kZV9pby5jICovCitleHRlcm4gaW9fbWFuYWdlciBpbm9kZV9pb19tYW5hZ2VyOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW5vZGVfaW9faW50ZXJuKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkJY2hhciAqKm5hbWUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfaW5vZGVfaW9faW50ZXJuMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkJCSBjaGFyICoqbmFtZSk7CisKKy8qIGlzbW91bnRlZC5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqbW91bnRfZmxhZ3MpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgKm1vdW50X2ZsYWdzLAorCQkJCQkgIGNoYXIgKm10cHQsIGludCBtdGxlbik7CisKKy8qIHB1bmNoLmMgKi8KKy8qCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgZnJvbSBhbiBpbm9kZSB0aGUgYmxvY2tzICJzdGFydCIsICJlbmQiLCBhbmQKKyAqIGV2ZXJ5IGJsb2NrIGluIGJldHdlZW4uCisgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3B1bmNoKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICAgIGNoYXIgKmJsb2NrX2J1ZiwgYmxrNjRfdCBzdGFydCwKKwkJCSAgICAgIGJsazY0X3QgZW5kKTsKKworLyogbmFtZWkuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfbG9va3VwKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBpbnQgbmFtZWxlbiwgY2hhciAqYnVmLCBleHQyX2lub190ICppbm9kZSk7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19uYW1laShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIGV4dDJfaW5vX3QgKmlub2RlKTsKK2VycmNvZGVfdCBleHQyZnNfbmFtZWlfZm9sbG93KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgY3dkLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgZXh0Ml9pbm9fdCAqaW5vZGUpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZm9sbG93X2xpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBjd2QsCisJCQlleHQyX2lub190IGlub2RlLCBleHQyX2lub190ICpyZXNfaW5vZGUpOworCisvKiBuYXRpdmUuYyAqLworaW50IGV4dDJmc19uYXRpdmVfZmxhZyh2b2lkKTsKKworLyogbmV3ZGlyLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX25ld19kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyX2lubywKKwkJCQlleHQyX2lub190IHBhcmVudF9pbm8sIGNoYXIgKipibG9jayk7CisKKy8qIG1rZGlyLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX21rZGlyKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHBhcmVudCwgZXh0Ml9pbm9fdCBpbnVtLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIG1ram91cm5hbC5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc196ZXJvX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCBpbnQgbnVtLAorCQkJCSAgICBibGtfdCAqcmV0X2JsaywgaW50ICpyZXRfY291bnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfemVyb19ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsaywgaW50IG51bSwKKwkJCQkgICAgIGJsazY0X3QgKnJldF9ibGssIGludCAqcmV0X2NvdW50KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9qb3VybmFsX3N1cGVyYmxvY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJCQkgIF9fdTMyIG51bV9ibG9ja3MsIGludCBmbGFncywKKwkJCQkJCSAgY2hhciAgKipyZXRfanNiKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2FkZF9qb3VybmFsX2RldmljZShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgZXh0Ml9maWxzeXMgam91cm5hbF9kZXYpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGJsa190IG51bV9ibG9ja3MsCisJCQkJCSAgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgZXh0MmZzX2RlZmF1bHRfam91cm5hbF9zaXplKF9fdTY0IG51bV9ibG9ja3MpOworCisvKiBvcGVuZnMuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIGludCBzdXBlcmJsb2NrLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwgaW9fbWFuYWdlciBtYW5hZ2VyLAorCQkJICAgICBleHQyX2ZpbHN5cyAqcmV0X2ZzKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX29wZW4yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmlvX29wdGlvbnMsCisJCQkgICAgICBpbnQgZmxhZ3MsIGludCBzdXBlcmJsb2NrLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsIGlvX21hbmFnZXIgbWFuYWdlciwKKwkJCSAgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpOworZXh0ZXJuIGJsazY0X3QgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jMihleHQyX2ZpbHN5cyBmcywKKwkJCQkJYmxrNjRfdCBncm91cF9ibG9jaywgZGdycF90IGkpOworZXh0ZXJuIGJsa190IGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgZ3JvdXBfYmxvY2ssCisJCQkJCSBkZ3JwX3QgaSk7CitlcnJjb2RlX3QgZXh0MmZzX2dldF9kYXRhX2lvKGV4dDJfZmlsc3lzIGZzLCBpb19jaGFubmVsICpvbGRfaW8pOworZXJyY29kZV90IGV4dDJmc19zZXRfZGF0YV9pbyhleHQyX2ZpbHN5cyBmcywgaW9fY2hhbm5lbCBuZXdfaW8pOworZXJyY29kZV90IGV4dDJmc19yZXdyaXRlX3RvX2lvKGV4dDJfZmlsc3lzIGZzLCBpb19jaGFubmVsIG5ld19pbyk7CisKKy8qIGdldF9wYXRobmFtZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBleHQyX2lub190IGlubywKKwkJCSAgICAgICBjaGFyICoqbmFtZSk7CisKKy8qIGxpbmsuYyAqLworZXJyY29kZV90IGV4dDJmc19saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgZXh0Ml9pbm9fdCBpbm8sIGludCBmbGFncyk7CitlcnJjb2RlX3QgZXh0MmZzX3VubGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQlleHQyX2lub190IGlubywgaW50IGZsYWdzKTsKKworLyogc3ltbGluay5jICovCitlcnJjb2RlX3QgZXh0MmZzX3N5bWxpbmsoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgcGFyZW50LCBleHQyX2lub190IGlubywKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpOworCisvKiBtbXAuYyAqLworZXJyY29kZV90IGV4dDJmc19tbXBfcmVhZChleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBtbXBfYmxrLCB2b2lkICpidWYpOworZXJyY29kZV90IGV4dDJmc19tbXBfd3JpdGUoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgbW1wX2Jsaywgdm9pZCAqYnVmKTsKK2VycmNvZGVfdCBleHQyZnNfbW1wX2NsZWFyKGV4dDJfZmlsc3lzIGZzKTsKK2VycmNvZGVfdCBleHQyZnNfbW1wX2luaXQoZXh0Ml9maWxzeXMgZnMpOworZXJyY29kZV90IGV4dDJmc19tbXBfc3RhcnQoZXh0Ml9maWxzeXMgZnMpOworZXJyY29kZV90IGV4dDJmc19tbXBfdXBkYXRlKGV4dDJfZmlsc3lzIGZzKTsKK2VycmNvZGVfdCBleHQyZnNfbW1wX3N0b3AoZXh0Ml9maWxzeXMgZnMpOwordW5zaWduZWQgZXh0MmZzX21tcF9uZXdfc2VxKHZvaWQpOworCisvKiByZWFkX2JiLmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmJfaW5vZGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqYmJfbGlzdCk7CisKKy8qIHJlYWRfYmJfZmlsZS5jICovCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX0ZJTEUyKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJCSAgICAgIGV4dDJfYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QsCisJCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhLAorCQkJCSAgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgICAgIGJsa190IGJsaywKKwkJCQkJCSAgICAgIGNoYXIgKmJhZHN0ciwKKwkJCQkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVhZF9iYl9GSUxFKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJCSAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqYmJfbGlzdCwKKwkJCQkgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJCSAgICAgYmxrX3QgYmxrKSk7CisKKy8qIHJlc19nZHQuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfY3JlYXRlX3Jlc2l6ZV9pbm9kZShleHQyX2ZpbHN5cyBmcyk7CisKKy8qIHN3YXBmcy5jICovCitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9leHRfYXR0cihjaGFyICp0bywgY2hhciAqZnJvbSwgaW50IGJ1ZnNpemUsCisJCQkJIGludCBoYXNfaGVhZGVyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX2V4dF9hdHRyX2hlYWRlcihzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKnRvX2hlYWRlciwKKwkJCQkJc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICpmcm9tX2hkcik7CitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9leHRfYXR0cl9lbnRyeShzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqdG9fZW50cnksCisJCQkJICAgICAgIHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICpmcm9tX2VudHJ5KTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX3N1cGVyKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc3VwZXIpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYyhzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpnZHApOworZXh0ZXJuIHZvaWQgZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYzIoZXh0Ml9maWxzeXMsIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdkcCk7CitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqdCwKKwkJCQkgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqZiwgaW50IGhvc3RvcmRlciwKKwkJCQkgICBpbnQgYnVmc2l6ZSk7CitleHRlcm4gdm9pZCBleHQyZnNfc3dhcF9pbm9kZShleHQyX2ZpbHN5cyBmcyxzdHJ1Y3QgZXh0Ml9pbm9kZSAqdCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlICpmLCBpbnQgaG9zdG9yZGVyKTsKK2V4dGVybiB2b2lkIGV4dDJmc19zd2FwX21tcChzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wKTsKKworLyogdW5peF9pby5jICovCitleHRlcm4gaW50IGV4dDJmc19vcGVuX2ZpbGUoY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgbW9kZV90IG1vZGUpOworZXh0ZXJuIGludCBleHQyZnNfc3RhdChjb25zdCBjaGFyICpwYXRoLCBleHQyZnNfc3RydWN0X3N0YXQgKmJ1Zik7CitleHRlcm4gaW50IGV4dDJmc19mc3RhdChpbnQgZmQsIGV4dDJmc19zdHJ1Y3Rfc3RhdCAqYnVmKTsKKworLyogdmFsaWRfYmxrLmMgKi8KK2V4dGVybiBpbnQgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3Moc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSk7CisKKy8qIHZlcnNpb24uYyAqLworZXh0ZXJuIGludCBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcoY29uc3QgY2hhciAqdmVyX3N0cmluZyk7CitleHRlcm4gaW50IGV4dDJmc19nZXRfbGlicmFyeV92ZXJzaW9uKGNvbnN0IGNoYXIgKip2ZXJfc3RyaW5nLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkYXRlX3N0cmluZyk7CisKKy8qIHdyaXRlX2JiX2ZpbGUuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfYmJfRklMRShleHQyX2JhZGJsb2Nrc19saXN0IGJiX2xpc3QsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCSAgICAgIEZJTEUgKmYpOworCisKKy8qIGlubGluZSBmdW5jdGlvbnMgKi8KKyNpZmRlZiBOT19JTkxJTkVfRlVOQ1MKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2dldF9tZW0odW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X21lbXplcm8odW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2FycmF5KHVuc2lnbmVkIGxvbmcgY291bnQsCisJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cik7CitleHRlcm4gZXJyY29kZV90IGV4dDJmc19nZXRfYXJyYXl6ZXJvKHVuc2lnbmVkIGxvbmcgY291bnQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZnJlZV9tZW0odm9pZCAqcHRyKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9tZW0odW5zaWduZWQgbG9uZyBvbGRfc2l6ZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cik7CitleHRlcm4gdm9pZCBleHQyZnNfbWFya19zdXBlcl9kaXJ0eShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfbWFya19jaGFuZ2VkKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfY2hhbmdlZChleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfbWFya192YWxpZChleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gdm9pZCBleHQyZnNfdW5tYXJrX3ZhbGlkKGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBpbnQgZXh0MmZzX3Rlc3RfdmFsaWQoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIHZvaWQgZXh0MmZzX21hcmtfaWJfZGlydHkoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIHZvaWQgZXh0MmZzX21hcmtfYmJfZGlydHkoZXh0Ml9maWxzeXMgZnMpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9pYl9kaXJ0eShleHQyX2ZpbHN5cyBmcyk7CitleHRlcm4gaW50IGV4dDJmc190ZXN0X2JiX2RpcnR5KGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiBkZ3JwX3QgZXh0MmZzX2dyb3VwX29mX2JsayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrKTsKK2V4dGVybiBkZ3JwX3QgZXh0MmZzX2dyb3VwX29mX2lubyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pOworZXh0ZXJuIGJsa190IGV4dDJmc19ncm91cF9maXJzdF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBibGtfdCBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKTsKK2V4dGVybiBibGtfdCBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZXh0MmZzX2Rpdl9jZWlsKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYik7CitleHRlcm4gX191NjQgZXh0MmZzX2RpdjY0X2NlaWwoX191NjQgYSwgX191NjQgYik7CisjZW5kaWYKKworLyoKKyAqIFRoZSBhY3R1YWwgaW5saW5lZCBmdW5jdGlvbnMgZGVmaW5pdGlvbnMgdGhlbXNlbHZlcy4uLgorICoKKyAqIElmIE5PX0lOTElORV9GVU5DUyBpcyBkZWZpbmVkLCB0aGVuIHdlIHdvbid0IHRyeSB0byBkbyBpbmxpbmUKKyAqIGZ1bmN0aW9ucyBhdCBhbGwhCisgKi8KKyNpZiAoZGVmaW5lZChJTkNMVURFX0lOTElORV9GVU5DUykgfHwgIWRlZmluZWQoTk9fSU5MSU5FX0ZVTkNTKSkKKyNpZmRlZiBJTkNMVURFX0lOTElORV9GVU5DUworI2RlZmluZSBfSU5MSU5FXyBleHRlcm4KKyNlbHNlCisjaWYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNkZWZpbmUgX0lOTElORV8gaW5saW5lCisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9JTkxJTkVfIGV4dGVybiBfX2lubGluZV9fCisjZWxzZQkJCQkvKiBGb3IgV2F0Y29tIEMgKi8KKyNkZWZpbmUgX0lOTElORV8gZXh0ZXJuIGlubGluZQorI2VuZGlmIC8qIF9fR05VQ19fICovCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCisjZW5kaWYKKworI2lmbmRlZiBFWFQyX0NVU1RPTV9NRU1PUllfUk9VVElORVMKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qCisgKiAgQWxsb2NhdGUgbWVtb3J5LiAgVGhlICdwdHInIGFyZyBtdXN0IHBvaW50IHRvIGEgcG9pbnRlci4KKyAqLworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19nZXRfbWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKQoreworCXZvaWQgKnBwOworCisJcHAgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFwcCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCW1lbWNweShwdHIsICZwcCwgc2l6ZW9mIChwcCkpOworCXJldHVybiAwOworfQorCitfSU5MSU5FXyBlcnJjb2RlX3QgZXh0MmZzX2dldF9tZW16ZXJvKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKQoreworCXZvaWQgKnBwOworCisJcHAgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFwcCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCW1lbXNldChwcCwgMCwgc2l6ZSk7CisJbWVtY3B5KHB0ciwgJnBwLCBzaXplb2YocHApKTsKKwlyZXR1cm4gMDsKK30KKworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19nZXRfYXJyYXkodW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpwdHIpCit7CisJaWYgKGNvdW50ICYmICgtMVVMKS9jb3VudDxzaXplKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJcmV0dXJuIGV4dDJmc19nZXRfbWVtKGNvdW50KnNpemUsIHB0cik7Cit9CisKK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfZ2V0X2FycmF5emVybyh1bnNpZ25lZCBsb25nIGNvdW50LAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKnB0cikKK3sKKwl2b2lkICpwcDsKKworCWlmIChjb3VudCAmJiAoLTFVTCkvY291bnQ8c2l6ZSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCXBwID0gY2FsbG9jKGNvdW50LCBzaXplKTsKKwlpZiAoIXBwKQorCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJbWVtY3B5KHB0ciwgJnBwLCBzaXplb2YocHApKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5LiAgVGhlICdwdHInIGFyZyBtdXN0IHBvaW50IHRvIGEgcG9pbnRlci4KKyAqLworX0lOTElORV8gZXJyY29kZV90IGV4dDJmc19mcmVlX21lbSh2b2lkICpwdHIpCit7CisJdm9pZCAqcDsKKworCW1lbWNweSgmcCwgcHRyLCBzaXplb2YocCkpOworCWZyZWUocCk7CisJcCA9IDA7CisJbWVtY3B5KHB0ciwgJnAsIHNpemVvZihwKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgUmVzaXplIG1lbW9yeS4gIFRoZSAncHRyJyBhcmcgbXVzdCBwb2ludCB0byBhIHBvaW50ZXIuCisgKi8KK19JTkxJTkVfIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX21lbSh1bnNpZ25lZCBsb25nIEVYVDJGU19BVFRSKCh1bnVzZWQpKSBvbGRfc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqcHRyKQoreworCXZvaWQgKnA7CisKKwkvKiBVc2UgIm1lbWNweSIgZm9yIHBvaW50ZXIgYXNzaWdubWVudHMgaGVyZSB0byBhdm9pZCBwcm9ibGVtcworCSAqIHdpdGggQzk5IHN0cmljdCB0eXBlIGFsaWFzaW5nIHJ1bGVzLiAqLworCW1lbWNweSgmcCwgcHRyLCBzaXplb2YocCkpOworCXAgPSByZWFsbG9jKHAsIHNpemUpOworCWlmICghcCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCW1lbWNweShwdHIsICZwLCBzaXplb2YocCkpOworCXJldHVybiAwOworfQorI2VuZGlmCS8qIEN1c3RvbSBtZW1vcnkgcm91dGluZXMgKi8KKworLyoKKyAqIE1hcmsgYSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgYXMgZGlydHkKKyAqLworX0lOTElORV8gdm9pZCBleHQyZnNfbWFya19zdXBlcl9kaXJ0eShleHQyX2ZpbHN5cyBmcykKK3sKKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX0RJUlRZIHwgRVhUMl9GTEFHX0NIQU5HRUQ7Cit9CisKKy8qCisgKiBNYXJrIGEgZmlsZXN5c3RlbSBhcyBjaGFuZ2VkCisgKi8KK19JTkxJTkVfIHZvaWQgZXh0MmZzX21hcmtfY2hhbmdlZChleHQyX2ZpbHN5cyBmcykKK3sKKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX0NIQU5HRUQ7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSBmaWxlc3lzdGVtIGhhcyBjaGFuZ2VkCisgKi8KK19JTkxJTkVfIGludCBleHQyZnNfdGVzdF9jaGFuZ2VkKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0NIQU5HRUQpOworfQorCisvKgorICogTWFyayBhIGZpbGVzeXN0ZW0gYXMgdmFsaWQKKyAqLworX0lOTElORV8gdm9pZCBleHQyZnNfbWFya192YWxpZChleHQyX2ZpbHN5cyBmcykKK3sKKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX1ZBTElEOworfQorCisvKgorICogTWFyayBhIGZpbGVzeXN0ZW0gYXMgTk9UIHZhbGlkCisgKi8KK19JTkxJTkVfIHZvaWQgZXh0MmZzX3VubWFya192YWxpZChleHQyX2ZpbHN5cyBmcykKK3sKKwlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19WQUxJRDsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0gaXMgdmFsaWQKKyAqLworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X3ZhbGlkKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1ZBTElEKTsKK30KKworLyoKKyAqIE1hcmsgdGhlIGlub2RlIGJpdG1hcCBhcyBkaXJ0eQorICovCitfSU5MSU5FXyB2b2lkIGV4dDJmc19tYXJrX2liX2RpcnR5KGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfSUJfRElSVFkgfCBFWFQyX0ZMQUdfQ0hBTkdFRDsKK30KKworLyoKKyAqIE1hcmsgdGhlIGJsb2NrIGJpdG1hcCBhcyBkaXJ0eQorICovCitfSU5MSU5FXyB2b2lkIGV4dDJmc19tYXJrX2JiX2RpcnR5KGV4dDJfZmlsc3lzIGZzKQoreworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfQkJfRElSVFkgfCBFWFQyX0ZMQUdfQ0hBTkdFRDsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0ncyBpbm9kZSBiaXRtYXAgaXMgZGlydHkKKyAqLworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X2liX2RpcnR5KGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lCX0RJUlRZKTsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhIGZpbGVzeXN0ZW0ncyBibG9jayBiaXRtYXAgaXMgZGlydHkKKyAqLworX0lOTElORV8gaW50IGV4dDJmc190ZXN0X2JiX2RpcnR5KGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0JCX0RJUlRZKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZ3JvdXAgIyBvZiBhIGJsb2NrCisgKi8KK19JTkxJTkVfIGRncnBfdCBleHQyZnNfZ3JvdXBfb2ZfYmxrKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGspCit7CisJcmV0dXJuIGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworfQorLyoKKyAqIFJldHVybiB0aGUgZ3JvdXAgIyBvZiBhbiBpbm9kZSBudW1iZXIKKyAqLworX0lOTElORV8gZGdycF90IGV4dDJmc19ncm91cF9vZl9pbm8oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKQoreworCXJldHVybiAoaW5vIC0gMSkgLyBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZmlyc3QgYmxvY2sgKGluY2x1c2l2ZSkgaW4gYSBncm91cAorICovCitfSU5MSU5FXyBibGtfdCBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCkKK3sKKwlyZXR1cm4gKGJsa190KSBleHQyZnNfZ3JvdXBfZmlyc3RfYmxvY2syKGZzLCBncm91cCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGxhc3QgYmxvY2sgKGluY2x1c2l2ZSkgaW4gYSBncm91cAorICovCitfSU5MSU5FXyBibGtfdCBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jayhleHQyX2ZpbHN5cyBmcywgZGdycF90IGdyb3VwKQoreworCXJldHVybiAoYmxrX3QpIGV4dDJmc19ncm91cF9sYXN0X2Jsb2NrMihmcywgZ3JvdXApOworfQorCitfSU5MSU5FXyBibGtfdCBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsCisJCQkJCXN0cnVjdCBleHQyX2lub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gKGJsa190KSBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MyKGZzLCBpbm9kZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGFuIGVmZmljaWVudCwgb3ZlcmZsb3cgc2FmZSB3YXkgb2YgY2FsY3VsYXRpbmcgY2VpbCgoMS4wICogYSkgLyBiKQorICovCitfSU5MSU5FXyB1bnNpZ25lZCBpbnQgZXh0MmZzX2Rpdl9jZWlsKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKwlpZiAoIWEpCisJCXJldHVybiAwOworCXJldHVybiAoKGEgLSAxKSAvIGIpICsgMTsKK30KKworX0lOTElORV8gX191NjQgZXh0MmZzX2RpdjY0X2NlaWwoX191NjQgYSwgX191NjQgYikKK3sKKwlpZiAoIWEpCisJCXJldHVybiAwOworCXJldHVybiAoKGEgLSAxKSAvIGIpICsgMTsKK30KKworI3VuZGVmIF9JTkxJTkVfCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9FWFQyRlNfRVhUMkZTX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJmcy5wYy5pbiBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJmcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjODVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0MmZzLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBleHQyZnMKK0Rlc2NyaXB0aW9uOiBFeHQyZnMgbGlicmFyeQorVmVyc2lvbjogQEUyRlNQUk9HU19WRVJTSU9OQAorUmVxdWlyZXMucHJpdmF0ZTogY29tX2VycgorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vZXh0MmZzIC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxleHQyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJmc1AuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDJmc1AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODhkYjkzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0MmZzUC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogZXh0MmZzUC5oIC0tLSBwcml2YXRlIGhlYWRlciBmaWxlIGZvciBleHQyIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2RlZmluZSBFWFQyRlNfTUFYX05FU1RFRF9MSU5LUyAgOAorCisvKgorICogQmFkYmxvY2tzIGxpc3QKKyAqLworc3RydWN0IGV4dDJfc3RydWN0X3UzMl9saXN0IHsKKwlpbnQJbWFnaWM7CisJaW50CW51bTsKKwlpbnQJc2l6ZTsKKwlfX3UzMgkqbGlzdDsKKwlpbnQJYmFkYmxvY2tzX2ZsYWdzOworfTsKKworc3RydWN0IGV4dDJfc3RydWN0X3UzMl9pdGVyYXRlIHsKKwlpbnQJCQltYWdpYzsKKwlleHQyX3UzMl9saXN0CQliYjsKKwlpbnQJCQlwdHI7Cit9OworCisKKy8qCisgKiBEaXJlY3RvcnkgYmxvY2sgaXRlcmF0b3IgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZXh0Ml9zdHJ1Y3RfZGJsaXN0IHsKKwlpbnQJCQltYWdpYzsKKwlleHQyX2ZpbHN5cwkJZnM7CisJdW5zaWduZWQgbG9uZyBsb25nCXNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nCWNvdW50OworCWludAkJCXNvcnRlZDsKKwlzdHJ1Y3QgZXh0Ml9kYl9lbnRyeTIgKglsaXN0OworfTsKKworLyoKKyAqIEZvciBkaXJlY3RvcnkgaXRlcmF0b3JzCisgKi8KK3N0cnVjdCBkaXJfY29udGV4dCB7CisJZXh0Ml9pbm9fdAkJZGlyOworCWludAkJZmxhZ3M7CisJY2hhcgkJKmJ1ZjsKKwlpbnQgKCpmdW5jKShleHQyX2lub190CWRpciwKKwkJICAgIGludAllbnRyeSwKKwkJICAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LAorCQkgICAgaW50CW9mZnNldCwKKwkJICAgIGludAlibG9ja3NpemUsCisJCSAgICBjaGFyCSpidWYsCisJCSAgICB2b2lkCSpwcml2X2RhdGEpOworCXZvaWQJCSpwcml2X2RhdGE7CisJZXJyY29kZV90CWVycmNvZGU7Cit9OworCisvKgorICogSW5vZGUgY2FjaGUgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBleHQyX2lub2RlX2NhY2hlIHsKKwl2b2lkICoJCQkJYnVmZmVyOworCWJsazY0X3QJCQkJYnVmZmVyX2JsazsKKwlpbnQJCQkJY2FjaGVfbGFzdDsKKwlpbnQJCQkJY2FjaGVfc2l6ZTsKKwlpbnQJCQkJcmVmY291bnQ7CisJc3RydWN0IGV4dDJfaW5vZGVfY2FjaGVfZW50CSpjYWNoZTsKK307CisKK3N0cnVjdCBleHQyX2lub2RlX2NhY2hlX2VudCB7CisJZXh0Ml9pbm9fdAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworfTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworCitleHRlcm4gaW50IGV4dDJmc19wcm9jZXNzX2Rpcl9ibG9jayhleHQyX2ZpbHN5cyAgCWZzLAorCQkJCSAgICBibGs2NF90CQkqYmxvY2tuciwKKwkJCQkgICAgZTJfYmxrY250X3QJCWJsb2NrY250LAorCQkJCSAgICBibGs2NF90CQlyZWZfYmxvY2ssCisJCQkJICAgIGludAkJCXJlZl9vZmZzZXQsCisJCQkJICAgIHZvaWQJCSpwcml2X2RhdGEpOworCisvKiBHZW5lcmljIG51bWVyaWMgcHJvZ3Jlc3MgbWV0ZXIgKi8KKworc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCB7CisJX191NjQJCW1heDsKKwlpbnQJCWxvZ19tYXg7CisJaW50CQlza2lwX3Byb2dyZXNzOworfTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdChleHQyX2ZpbHN5cyBmcywKKwkJCQkJIHN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgKiBwcm9ncmVzcywKKwkJCQkJIGNvbnN0IGNoYXIgKmxhYmVsLCBfX3U2NCBtYXgpOworZXh0ZXJuIHZvaWQgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfdXBkYXRlKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkgICBzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0ICogcHJvZ3Jlc3MsCisJCQkJCSAgIF9fdTY0IHZhbCk7CitleHRlcm4gdm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICBzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0ICogcHJvZ3Jlc3MsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCisgKiA2NC1iaXQgYml0bWFwIHN1cHBvcnQKKyAqLworCitleHRlcm4gZXJyY29kZV90IGV4dDJmc19hbGxvY19nZW5lcmljX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGVycmNvZGVfdCBtYWdpYywKKwkJCQkJICAgaW50IHR5cGUsIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsCisJCQkJCSAgIF9fdTY0IHJlYWxfZW5kLAorCQkJCQkgICBjb25zdCBjaGFyICogZGVzY3JpcHRpb24sCisJCQkJCSAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCAqYm1hcCk7CisKK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCk7CisKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NvcHlfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkJCSAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpkZXN0KTsKKworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcmVzaXplX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJICAgIF9fdTY0IG5ld19lbmQsCisJCQkJCSAgICBfX3U2NCBuZXdfcmVhbF9lbmQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZnVkZ2VfZ2VuZXJpY19ibWFwX2VuZChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgZXJyY29kZV90IG5lcSwKKwkJCQkJICAgICAgIF9fdTY0IGVuZCwgX191NjQgKm9lbmQpOworZXh0ZXJuIGludCBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgX191NjQgYXJnKTsKK2V4dGVybiBpbnQgZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgICBfX3U2NCBhcmcpOworZXh0ZXJuIGludCBleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkgICAgX191NjQgYXJnKTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX3NldF9nZW5lcmljX2JtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgIF9fdTY0IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbnVtLAorCQkJCQkgICAgICAgdm9pZCAqaW4pOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgICAgICAgX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCSAgICAgICB2b2lkICpvdXQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3dhcm5fYml0bWFwMzIoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCxjb25zdCBjaGFyICpmdW5jKTsKKworZXh0ZXJuIGludCBleHQyZnNfbWVtX2lzX3plcm8oY29uc3QgY2hhciAqbWVtLCBzaXplX3QgbGVuKTsKKworZXh0ZXJuIGludCBleHQyZnNfZmlsZV9ibG9ja19vZmZzZXRfdG9vX2JpZyhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkJICAgIGJsazY0X3Qgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmYWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgQ2x1c3RlciBGaWxlIFN5c3RlbXMsIEluYywgaW5mb0BjbHVzdGVyZnMuY29tCisgKiBXcml0dGVuIGJ5IEFsZXggVG9tYXMgPGFsZXhAY2x1c3RlcmZzLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX0xJTlVYX0VYVDNfRVhURU5UUworI2RlZmluZSBfTElOVVhfRVhUM19FWFRFTlRTCisKKy8qCisgKiBleHQzX2lub2RlIGhhcyBpX2Jsb2NrIGFycmF5ICh0b3RhbCA2MCBieXRlcykKKyAqIGZpcnN0IDQgYnl0ZXMgYXJlIHVzZWQgdG8gc3RvcmU6CisgKiAgLSB0cmVlIGRlcHRoICgwIG1lYW4gdGhlcmUgaXMgbm8gdHJlZSB5ZXQuIGFsbCBleHRlbnRzIGluIHRoZSBpbm9kZSkKKyAqICAtIG51bWJlciBvZiBhbGl2ZSBleHRlbnRzIGluIHRoZSBpbm9kZQorICovCisKKy8qCisgKiB0aGlzIGlzIGV4dGVudCBvbi1kaXNrIHN0cnVjdHVyZQorICogaXQncyB1c2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIHRyZWUKKyAqLworc3RydWN0IGV4dDNfZXh0ZW50IHsKKwlfX3UzMgllZV9ibG9jazsJLyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovCisJX191MTYJZWVfbGVuOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBjb3ZlcmVkIGJ5IGV4dGVudCAqLworCV9fdTE2CWVlX3N0YXJ0X2hpOwkvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi8KKwlfX3UzMgllZV9zdGFydDsJLyogbG93IDMyIGJpZ3Mgb2YgcGh5c2ljYWwgYmxvY2sgKi8KK307CisKKy8qCisgKiB0aGlzIGlzIGluZGV4IG9uLWRpc2sgc3RydWN0dXJlCisgKiBpdCdzIHVzZWQgYXQgYWxsIHRoZSBsZXZlbHMsIGJ1dCB0aGUgYm90dG9tCisgKi8KK3N0cnVjdCBleHQzX2V4dGVudF9pZHggeworCV9fdTMyCWVpX2Jsb2NrOwkvKiBpbmRleCBjb3ZlcnMgbG9naWNhbCBibG9ja3MgZnJvbSAnYmxvY2snICovCisJX191MzIJZWlfbGVhZjsJLyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKgorCQkJCSAqIGxldmVsLiBsZWFmIG9yIG5leHQgaW5kZXggY291bGQgYmV0IGhlcmUgKi8KKwlfX3UxNgllaV9sZWFmX2hpOwkvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi8KKwlfX3UxNgllaV91bnVzZWQ7Cit9OworCisvKgorICogZWFjaCBibG9jayAobGVhdmVzIGFuZCBpbmRleGVzKSwgZXZlbiBpbm9kZS1zdG9yZWQgaGFzIGhlYWRlcgorICovCitzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyIHsKKwlfX3UxNgllaF9tYWdpYzsJLyogcHJvYmFibHkgd2lsbCBzdXBwb3J0IGRpZmZlcmVudCBmb3JtYXRzICovCisJX191MTYJZWhfZW50cmllczsJLyogbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgKi8KKwlfX3UxNgllaF9tYXg7CQkvKiBjYXBhY2l0eSBvZiBzdG9yZSBpbiBlbnRyaWVzICovCisJX191MTYJZWhfZGVwdGg7CS8qIGhhcyB0cmVlIHJlYWwgdW5kZXJsYXlpbmcgYmxvY2tzPyAqLworCV9fdTMyCWVoX2dlbmVyYXRpb247CS8qIGdlbmVyYXRpb24gb2YgdGhlIHRyZWUgKi8KK307CisKKyNkZWZpbmUgRVhUM19FWFRfTUFHSUMJCTB4ZjMwYQorCisvKgorICogYXJyYXkgb2YgZXh0M19leHRfcGF0aCBjb250YWlucyBwYXRoIHRvIHNvbWUgZXh0ZW50CisgKiBjcmVhdGlvbi9sb29rdXAgcm91dGluZXMgdXNlIGl0IGZvciB0cmF2ZXJzYWwvc3BsaXR0aW5nL2V0YworICogdHJ1bmNhdGUgdXNlcyBpdCB0byBzaW11bGF0ZSByZWN1cnNpdmUgd2Fsa2luZworICovCitzdHJ1Y3QgZXh0M19leHRfcGF0aCB7CisJX191MzIJCQkJcF9ibG9jazsKKwlfX3UxNgkJCQlwX2RlcHRoOworCXN0cnVjdCBleHQzX2V4dGVudAkJKnBfZXh0OworCXN0cnVjdCBleHQzX2V4dGVudF9pZHgJCSpwX2lkeDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSpwX2hkcjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpwX2JoOworfTsKKworLyoKKyAqIEVYVF9JTklUX01BWF9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB3ZSBjYW4gaGF2ZSBpbiBhbgorICogaW5pdGlhbGl6ZWQgZXh0ZW50LiBUaGlzIGlzIDJeMTUgYW5kIG5vdCAoMl4xNiAtIDEpLCBzaW5jZSB3ZSB1c2UgdGhlCisgKiBNU0Igb2YgZWVfbGVuIGZpZWxkIGluIHRoZSBleHRlbnQgZGF0YXN0cnVjdHVyZSB0byBzaWduaWZ5IGlmIHRoaXMKKyAqIHBhcnRpY3VsYXIgZXh0ZW50IGlzIGFuIGluaXRpYWxpemVkIGV4dGVudCBvciBhbiB1bmluaXRpYWxpemVkIChpLmUuCisgKiBwcmVhbGxvY2F0ZWQpLgorICogRVhUX1VOSU5JVF9NQVhfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3Mgd2UgY2FuIGhhdmUgaW4gYW4KKyAqIHVuaW5pdGlhbGl6ZWQgZXh0ZW50LgorICogSWYgZWVfbGVuIGlzIDw9IDB4ODAwMCwgaXQgaXMgYW4gaW5pdGlhbGl6ZWQgZXh0ZW50LiBPdGhlcndpc2UsIGl0IGlzIGFuCisgKiB1bmluaXRpYWxpemVkIG9uZS4gSW4gb3RoZXIgd29yZHMsIGlmIE1TQiBvZiBlZV9sZW4gaXMgc2V0LCBpdCBpcyBhbgorICogdW5pbml0aWFsaXplZCBleHRlbnQgd2l0aCBvbmx5IG9uZSBzcGVjaWFsIHNjZW5hcmlvIHdoZW4gZWVfbGVuID0gMHg4MDAwLgorICogSW4gdGhpcyBjYXNlIHdlIGNhbiBub3QgaGF2ZSBhbiB1bmluaXRpYWxpemVkIGV4dGVudCBvZiB6ZXJvIGxlbmd0aCBhbmQKKyAqIHRodXMgd2UgbWFrZSBpdCBhcyBhIHNwZWNpYWwgY2FzZSBvZiBpbml0aWFsaXplZCBleHRlbnQgd2l0aCAweDgwMDAgbGVuZ3RoLgorICogVGhpcyB3YXkgd2UgZ2V0IGJldHRlciBleHRlbnQtdG8tZ3JvdXAgYWxpZ25tZW50IGZvciBpbml0aWFsaXplZCBleHRlbnRzLgorICogSGVuY2UsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3Mgd2UgY2FuIGhhdmUgaW4gYW4gKmluaXRpYWxpemVkKgorICogZXh0ZW50IGlzIDJeMTUgKDMyNzY4KSBhbmQgaW4gYW4gKnVuaW5pdGlhbGl6ZWQqIGV4dGVudCBpcyAyXjE1LTEgKDMyNzY3KS4KKyAqLworI2RlZmluZSBFWFRfSU5JVF9NQVhfTEVOCSgxVUwgPDwgMTUpCisjZGVmaW5lIEVYVF9VTklOSVRfTUFYX0xFTgkoRVhUX0lOSVRfTUFYX0xFTiAtIDEpCisKKyNkZWZpbmUgRVhUX0ZJUlNUX0VYVEVOVChfX2hkcl9fKSBcCisJKChzdHJ1Y3QgZXh0M19leHRlbnQgKikgKCgoY2hhciAqKSAoX19oZHJfXykpICsJCVwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIpKSkKKyNkZWZpbmUgRVhUX0ZJUlNUX0lOREVYKF9faGRyX18pIFwKKwkoKHN0cnVjdCBleHQzX2V4dGVudF9pZHggKikgKCgoY2hhciAqKSAoX19oZHJfXykpICsJXAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIpKSkKKyNkZWZpbmUgRVhUX0hBU19GUkVFX0lOREVYKF9fcGF0aF9fKSBcCisJKChfX3BhdGhfXyktPnBfaGRyLT5laF9lbnRyaWVzIDwgKF9fcGF0aF9fKS0+cF9oZHItPmVoX21heCkKKyNkZWZpbmUgRVhUX0xBU1RfRVhURU5UKF9faGRyX18pIFwKKwkoRVhUX0ZJUlNUX0VYVEVOVCgoX19oZHJfXykpICsgKF9faGRyX18pLT5laF9lbnRyaWVzIC0gMSkKKyNkZWZpbmUgRVhUX0xBU1RfSU5ERVgoX19oZHJfXykgXAorCShFWFRfRklSU1RfSU5ERVgoKF9faGRyX18pKSArIChfX2hkcl9fKS0+ZWhfZW50cmllcyAtIDEpCisjZGVmaW5lIEVYVF9NQVhfRVhURU5UKF9faGRyX18pIFwKKwkoRVhUX0ZJUlNUX0VYVEVOVCgoX19oZHJfXykpICsgKF9faGRyX18pLT5laF9tYXggLSAxKQorI2RlZmluZSBFWFRfTUFYX0lOREVYKF9faGRyX18pIFwKKwkoRVhUX0ZJUlNUX0lOREVYKChfX2hkcl9fKSkgKyAoX19oZHJfXyktPmVoX21heCAtIDEpCisKKyNlbmRpZiAvKiBfTElOVVhfRVhUM19FWFRFTlRTICovCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dF9hdHRyLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHRfYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2M4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9leHRfYXR0ci5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogZXh0X2F0dHIuYyAtLS0gZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIEdydWVuYmFjaGVyLCA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0Ml9leHRfYXR0ci5oIgorCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyNkZWZpbmUgTkFNRV9IQVNIX1NISUZUIDUKKyNkZWZpbmUgVkFMVUVfSEFTSF9TSElGVCAxNgorCisvKgorICogZXh0Ml94YXR0cl9oYXNoX2VudHJ5KCkKKyAqCisgKiBDb21wdXRlIHRoZSBoYXNoIG9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKyAqLworX191MzIgZXh0MmZzX2V4dF9hdHRyX2hhc2hfZW50cnkoc3RydWN0IGV4dDJfZXh0X2F0dHJfZW50cnkgKmVudHJ5LCB2b2lkICpkYXRhKQoreworCV9fdTMyIGhhc2ggPSAwOworCWNoYXIgKm5hbWUgPSAoKGNoYXIgKikgZW50cnkpICsgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5KTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBlbnRyeS0+ZV9uYW1lX2xlbjsgbisrKSB7CisJCWhhc2ggPSAoaGFzaCA8PCBOQU1FX0hBU0hfU0hJRlQpIF4KKwkJICAgICAgIChoYXNoID4+ICg4KnNpemVvZihoYXNoKSAtIE5BTUVfSEFTSF9TSElGVCkpIF4KKwkJICAgICAgICpuYW1lKys7CisJfQorCisJLyogVGhlIGhhc2ggbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCBvbiB0aGUgZGF0YSBpbiBsaXR0bGUtZW5kaWFuLiAqLworCWlmIChlbnRyeS0+ZV92YWx1ZV9ibG9jayA9PSAwICYmIGVudHJ5LT5lX3ZhbHVlX3NpemUgIT0gMCkgeworCQlfX3UzMiAqdmFsdWUgPSAoX191MzIgKilkYXRhOworCQlmb3IgKG4gPSAoZW50cnktPmVfdmFsdWVfc2l6ZSArIEVYVDJfRVhUX0FUVFJfUk9VTkQpID4+CisJCQkgRVhUMl9FWFRfQVRUUl9QQURfQklUUzsgbjsgbi0tKSB7CisJCQloYXNoID0gKGhhc2ggPDwgVkFMVUVfSEFTSF9TSElGVCkgXgorCQkJICAgICAgIChoYXNoID4+ICg4KnNpemVvZihoYXNoKSAtIFZBTFVFX0hBU0hfU0hJRlQpKSBeCisJCQkgICAgICAgZXh0MmZzX2xlMzJfdG9fY3B1KCp2YWx1ZSsrKTsKKwkJfQorCX0KKworCXJldHVybiBoYXNoOworfQorCisjdW5kZWYgTkFNRV9IQVNIX1NISUZUCisjdW5kZWYgVkFMVUVfSEFTSF9TSElGVAorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfZXh0X2F0dHIyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsb2NrLCB2b2lkICpidWYpCit7CisJZXJyY29kZV90CXJldHZhbDsKKworCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsb2NrLCAxLCBidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJZXh0MmZzX3N3YXBfZXh0X2F0dHIoYnVmLCBidWYsIGZzLT5ibG9ja3NpemUsIDEpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9leHRfYXR0cihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssIHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gZXh0MmZzX3JlYWRfZXh0X2F0dHIyKGZzLCBibG9jaywgYnVmKTsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9leHRfYXR0cjIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxvY2ssIHZvaWQgKmluYnVmKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKndyaXRlX2J1ZjsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwljaGFyCQkqYnVmID0gTlVMTDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJd3JpdGVfYnVmID0gYnVmOworCWV4dDJmc19zd2FwX2V4dF9hdHRyKGJ1ZiwgaW5idWYsIGZzLT5ibG9ja3NpemUsIDEpOworI2Vsc2UKKwl3cml0ZV9idWYgPSAoY2hhciAqKSBpbmJ1ZjsKKyNlbmRpZgorCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibG9jaywgMSwgd3JpdGVfYnVmKTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisjZW5kaWYKKwlpZiAoIXJldHZhbCkKKwkJZXh0MmZzX21hcmtfY2hhbmdlZChmcyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9leHRfYXR0cihleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxvY2ssIHZvaWQgKmluYnVmKQoreworCXJldHVybiBleHQyZnNfd3JpdGVfZXh0X2F0dHIyKGZzLCBibG9jaywgaW5idWYpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIEVBIGJsb2NrLgorICovCitlcnJjb2RlX3QgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLAorCQkJCSAgICBjaGFyICpibG9ja19idWYsIGludCBhZGp1c3QsCisJCQkJICAgIF9fdTMyICpuZXdjb3VudCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqaGVhZGVyOworCWNoYXIJKmJ1ZiA9IDA7CisKKwlpZiAoKGJsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHx8CisJICAgIChibGsgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykpCisJCXJldHVybiBFWFQyX0VUX0JBRF9FQV9CTE9DS19OVU07CisKKwlpZiAoIWJsb2NrX2J1ZikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWJsb2NrX2J1ZiA9IGJ1ZjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9leHRfYXR0cjIoZnMsIGJsaywgYmxvY2tfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWhlYWRlciA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKikgYmxvY2tfYnVmOworCWhlYWRlci0+aF9yZWZjb3VudCArPSBhZGp1c3Q7CisJaWYgKG5ld2NvdW50KQorCQkqbmV3Y291bnQgPSBoZWFkZXItPmhfcmVmY291bnQ7CisKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfZXh0X2F0dHIyKGZzLCBibGssIGJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKK2Vycm91dDoKKwlpZiAoYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQoZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywKKwkJCQkJY2hhciAqYmxvY2tfYnVmLCBpbnQgYWRqdXN0LAorCQkJCQlfX3UzMiAqbmV3Y291bnQpCit7CisJcmV0dXJuIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQoZnMsIGJsaywgYmxvY2tfYnVmLCBhZGp1c3QsIG5ld2NvdW50KTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dGVudC5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZXh0ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2Yzk1YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2V4dGVudC5jCkBAIC0wLDAgKzEsMTU3MiBAQAorLyoKKyAqIGV4dGVudC5jIC0tLSByb3V0aW5lcyB0byBpbXBsZW1lbnQgZXh0ZW50cyBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKyNpbmNsdWRlICJlMmltYWdlLmgiCisKKy8qCisgKiBEZWZpbml0aW9ucyB0byBiZSBkcm9wcGVkIGluIGxpYi9leHQyZnMvZXh0MmZzLmgKKyAqLworCisvKgorICogUHJpdmF0ZSBkZWZpbml0aW9ucworICovCisKK3N0cnVjdCBleHRlbnRfcGF0aCB7CisJY2hhcgkJKmJ1ZjsKKwlpbnQJCWVudHJpZXM7CisJaW50CQltYXhfZW50cmllczsKKwlpbnQJCWxlZnQ7CisJaW50CQl2aXNpdF9udW07CisJaW50CQlmbGFnczsKKwlibGs2NF90CQllbmRfYmxrOworCXZvaWQJCSpjdXJyOworfTsKKworCitzdHJ1Y3QgZXh0Ml9leHRlbnRfaGFuZGxlIHsKKwllcnJjb2RlX3QJCW1hZ2ljOworCWV4dDJfZmlsc3lzCQlmczsKKwlleHQyX2lub190IAkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCSppbm9kZTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZWJ1ZjsKKwlpbnQJCQl0eXBlOworCWludAkJCWxldmVsOworCWludAkJCW1heF9kZXB0aDsKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJKnBhdGg7Cit9OworCitzdHJ1Y3QgZXh0Ml9leHRlbnRfcGF0aCB7CisJZXJyY29kZV90CQltYWdpYzsKKwlpbnQJCQlsZWFmX2hlaWdodDsKKwlibGs2NF90CQkJbGJsazsKK307CisKKy8qCisgKiAgVXNlZnVsIERlYnVnZ2luZyBzdHVmZgorICovCisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZGJnX3Nob3dfaGVhZGVyKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoKQoreworCXByaW50ZigiaGVhZGVyOiBtYWdpYz0leCBlbnRyaWVzPSV1IG1heD0ldSBkZXB0aD0ldSBnZW5lcmF0aW9uPSV1XG4iLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYWdpYyksCisJCQlleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYXgpLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9kZXB0aCksCisJCQlleHQyZnNfbGUzMl90b19jcHUoZWgtPmVoX2dlbmVyYXRpb24pKTsKK30KKworc3RhdGljIHZvaWQgZGJnX3Nob3dfaW5kZXgoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCAqaXgpCit7CisJcHJpbnRmKCJpbmRleDogYmxvY2s9JXUgbGVhZj0ldSBsZWFmX2hpPSV1IHVudXNlZD0ldVxuIiwKKwkJCWV4dDJmc19sZTMyX3RvX2NwdShpeC0+ZWlfYmxvY2spLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9sZWFmKSwKKwkJCWV4dDJmc19sZTE2X3RvX2NwdShpeC0+ZWlfbGVhZl9oaSksCisJCQlleHQyZnNfbGUxNl90b19jcHUoaXgtPmVpX3VudXNlZCkpOworfQorCitzdGF0aWMgdm9pZCBkYmdfc2hvd19leHRlbnQoc3RydWN0IGV4dDNfZXh0ZW50ICpleCkKK3sKKwlwcmludGYoImV4dGVudDogYmxvY2s9JXUtJXUgbGVuPSV1IHN0YXJ0PSV1IHN0YXJ0X2hpPSV1XG4iLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayksCisJCQlleHQyZnNfbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSArCisJCQlleHQyZnNfbGUxNl90b19jcHUoZXgtPmVlX2xlbikgLSAxLAorCQkJZXh0MmZzX2xlMTZfdG9fY3B1KGV4LT5lZV9sZW4pLAorCQkJZXh0MmZzX2xlMzJfdG9fY3B1KGV4LT5lZV9zdGFydCksCisJCQlleHQyZnNfbGUxNl90b19jcHUoZXgtPmVlX3N0YXJ0X2hpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRiZ19wcmludF9leHRlbnQoY2hhciAqZGVzYywgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlpZiAoZGVzYykKKwkJcHJpbnRmKCIlczogIiwgZGVzYyk7CisJcHJpbnRmKCJleHRlbnQ6IGxibGsgJWxsdS0tJWxsdSwgbGVuICV1LCBwYmxrICVsbHUsIGZsYWdzOiAiLAorCSAgICAgICBleHRlbnQtPmVfbGJsaywgZXh0ZW50LT5lX2xibGsgKyBleHRlbnQtPmVfbGVuIC0gMSwKKwkgICAgICAgZXh0ZW50LT5lX2xlbiwgZXh0ZW50LT5lX3BibGspOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19MRUFGKQorCQlmcHV0cygiTEVBRiAiLCBzdGRvdXQpOworCWlmIChleHRlbnQtPmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCWZwdXRzKCJVTklOSVQgIiwgc3Rkb3V0KTsKKwlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfU0VDT05EX1ZJU0lUKQorCQlmcHV0cygiMk5EX1ZJU0lUICIsIHN0ZG91dCk7CisJaWYgKCFleHRlbnQtPmVfZmxhZ3MpCisJCWZwdXRzKCIobm9uZSkiLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7CisKK30KKworI2Vsc2UKKyNkZWZpbmUgZGJnX3Nob3dfaGVhZGVyKGVoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19zaG93X2luZGV4KGl4KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19zaG93X2V4dGVudChleCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfcHJpbnRfZXh0ZW50KGRlc2MsIGV4KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIFZlcmlmeSB0aGUgZXh0ZW50IGhlYWRlciBhcyBiZWluZyBzYW5lCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X2hlYWRlcl92ZXJpZnkodm9pZCAqcHRyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgZWhfbWF4LCBlbnRyeV9zaXplOworCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoID0gcHRyOworCisJZGJnX3Nob3dfaGVhZGVyKGVoKTsKKwlpZiAoZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYWdpYykgIT0gRVhUM19FWFRfTUFHSUMpCisJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9IRUFERVJfQkFEOworCWlmIChleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpID4gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYXgpKQorCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfSEVBREVSX0JBRDsKKwlpZiAoZWgtPmVoX2RlcHRoID09IDApCisJCWVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKwllbHNlCisJCWVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCk7CisKKwllaF9tYXggPSAoc2l6ZSAtIHNpemVvZigqZWgpKSAvIGVudHJ5X3NpemU7CisJLyogQWxsb3cgdHdvIGV4dGVudC1zaXplZCBpdGVtcyBhdCB0aGUgZW5kIG9mIHRoZSBibG9jaywgZm9yCisJICogZXh0NF9leHRlbnRfdGFpbCB3aXRoIGNoZWNrc3VtIGluIHRoZSBmdXR1cmUuICovCisJaWYgKChleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21heCkgPiBlaF9tYXgpIHx8CisJICAgIChleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX21heCkgPCAoZWhfbWF4IC0gMikpKQorCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfSEVBREVSX0JBRDsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBCZWdpbiBmdW5jdGlvbnMgdG8gaGFuZGxlIGFuIGlub2RlJ3MgZXh0ZW50IGluZm9ybWF0aW9uCisgKi8KK3ZvaWQgZXh0MmZzX2V4dGVudF9mcmVlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSkKK3sKKwlpbnQJCQlpOworCisJaWYgKCFoYW5kbGUpCisJCXJldHVybjsKKworCWlmIChoYW5kbGUtPnBhdGgpIHsKKwkJZm9yIChpPTE7IGkgPD0gaGFuZGxlLT5tYXhfZGVwdGg7IGkrKykgeworCQkJaWYgKGhhbmRsZS0+cGF0aFtpXS5idWYpCisJCQkJZXh0MmZzX2ZyZWVfbWVtKCZoYW5kbGUtPnBhdGhbaV0uYnVmKTsKKwkJfQorCQlleHQyZnNfZnJlZV9tZW0oJmhhbmRsZS0+cGF0aCk7CisJfQorCWV4dDJmc19mcmVlX21lbSgmaGFuZGxlKTsKK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfb3BlbihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgIGV4dDJfZXh0ZW50X2hhbmRsZV90ICpyZXRfaGFuZGxlKQoreworCXJldHVybiBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIE5VTEwsIHJldF9oYW5kbGUpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9vcGVuMihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgICAgZXh0Ml9leHRlbnRfaGFuZGxlX3QgKnJldF9oYW5kbGUpCit7CisJc3RydWN0IGV4dDJfZXh0ZW50X2hhbmRsZQkqaGFuZGxlOworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlpbnQJCQkJaTsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSplaDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoIWlub2RlKQorCQlpZiAoKGlubyA9PSAwKSB8fCAoaW5vID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpCisJCQlyZXR1cm4gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9oYW5kbGUpLCAmaGFuZGxlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChoYW5kbGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfaGFuZGxlKSk7CisKKwloYW5kbGUtPmlubyA9IGlubzsKKwloYW5kbGUtPmZzID0gZnM7CisKKwlpZiAoaW5vZGUpIHsKKwkJaGFuZGxlLT5pbm9kZSA9IGlub2RlOworCX0gZWxzZSB7CisJCWhhbmRsZS0+aW5vZGUgPSAmaGFuZGxlLT5pbm9kZWJ1ZjsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgaGFuZGxlLT5pbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZoYW5kbGUtPmlub2RlLT5pX2Jsb2NrWzBdOworCisJZm9yIChpPTA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCWlmIChoYW5kbGUtPmlub2RlLT5pX2Jsb2NrW2ldKQorCQkJYnJlYWs7CisJaWYgKGkgPj0gRVhUMl9OX0JMT0NLUykgeworCQllaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworCQllaC0+ZWhfZGVwdGggPSAwOworCQllaC0+ZWhfZW50cmllcyA9IDA7CisJCWkgPSAoc2l6ZW9mKGhhbmRsZS0+aW5vZGUtPmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworCQloYW5kbGUtPmlub2RlLT5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwl9CisKKwlpZiAoIShoYW5kbGUtPmlub2RlLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0lOT0RFX05PVF9FWFRFTlQ7CisJCWdvdG8gZXJyb3V0OworCX0KKworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeShlaCwgc2l6ZW9mKGhhbmRsZS0+aW5vZGUtPmlfYmxvY2spKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCWhhbmRsZS0+bWF4X2RlcHRoID0gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9kZXB0aCk7CisJaGFuZGxlLT50eXBlID0gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYWdpYyk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbSgoKGhhbmRsZS0+bWF4X2RlcHRoKzEpICoKKwkJCQkgc2l6ZW9mKHN0cnVjdCBleHRlbnRfcGF0aCkpLAorCQkJCSZoYW5kbGUtPnBhdGgpOworCW1lbXNldChoYW5kbGUtPnBhdGgsIDAsCisJICAgICAgIChoYW5kbGUtPm1heF9kZXB0aCsxKSAqIHNpemVvZihzdHJ1Y3QgZXh0ZW50X3BhdGgpKTsKKwloYW5kbGUtPnBhdGhbMF0uYnVmID0gKGNoYXIgKikgaGFuZGxlLT5pbm9kZS0+aV9ibG9jazsKKworCWhhbmRsZS0+cGF0aFswXS5sZWZ0ID0gaGFuZGxlLT5wYXRoWzBdLmVudHJpZXMgPQorCQlleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpOworCWhhbmRsZS0+cGF0aFswXS5tYXhfZW50cmllcyA9IGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfbWF4KTsKKwloYW5kbGUtPnBhdGhbMF0uY3VyciA9IDA7CisJaGFuZGxlLT5wYXRoWzBdLmVuZF9ibGsgPQorCQkoRVhUMl9JX1NJWkUoaGFuZGxlLT5pbm9kZSkgKyBmcy0+YmxvY2tzaXplIC0gMSkgPj4KKwkJIEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcik7CisJaGFuZGxlLT5wYXRoWzBdLnZpc2l0X251bSA9IDE7CisJaGFuZGxlLT5sZXZlbCA9IDA7CisJaGFuZGxlLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfRVhURU5UX0hBTkRMRTsKKworCSpyZXRfaGFuZGxlID0gaGFuZGxlOworCXJldHVybiAwOworCitlcnJvdXQ6CisJZXh0MmZzX2V4dGVudF9mcmVlKGhhbmRsZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIChvcHRpb25hbGx5KSBtb3ZpbmcgdGhyb3VnaCB0aGUKKyAqIGV4dGVudCB0cmVlIGFuZCB0aGVuIHJldHVybmluZyB0aGUgY3VycmVudCBleHRlbnQKKyAqLworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZ2V0KGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCSAgICBpbnQgZmxhZ3MsIHN0cnVjdCBleHQyZnNfZXh0ZW50ICpleHRlbnQpCit7CisJc3RydWN0IGV4dGVudF9wYXRoCSpwYXRoLCAqbmV3cGF0aDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSplaDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaWR4CQkqaXggPSAwOworCXN0cnVjdCBleHQzX2V4dGVudAkJKmV4OworCWVycmNvZGVfdAkJCXJldHZhbDsKKwlibGs2NF90CQkJCWJsazsKKwlibGs2NF90CQkJCWVuZF9ibGs7CisJaW50CQkJCW9yaWdfb3AsIG9wOworCisJRVhUMl9DSEVDS19NQUdJQyhoYW5kbGUsIEVYVDJfRVRfTUFHSUNfRVhURU5UX0hBTkRMRSk7CisKKwlpZiAoIWhhbmRsZS0+cGF0aCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisJb3JpZ19vcCA9IG9wID0gZmxhZ3MgJiBFWFQyX0VYVEVOVF9NT1ZFX01BU0s7CisKK3JldHJ5OgorCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCWlmICgob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9ORVhUKSB8fAorCSAgICAob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9ORVhUX0xFQUYpKSB7CisJCWlmIChoYW5kbGUtPmxldmVsIDwgaGFuZGxlLT5tYXhfZGVwdGgpIHsKKwkJCS8qIGludGVyaW9yIG5vZGUgKi8KKwkJCWlmIChwYXRoLT52aXNpdF9udW0gPT0gMCkgeworCQkJCXBhdGgtPnZpc2l0X251bSsrOworCQkJCW9wID0gRVhUMl9FWFRFTlRfRE9XTjsKKwkJCX0gZWxzZSBpZiAocGF0aC0+bGVmdCA+IDApCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9ORVhUX1NJQjsKKwkJCWVsc2UgaWYgKGhhbmRsZS0+bGV2ZWwgPiAwKQorCQkJCW9wID0gRVhUMl9FWFRFTlRfVVA7CisJCQllbHNlCisJCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX05PX05FWFQ7CisJCX0gZWxzZSB7CisJCQkvKiBsZWFmIG5vZGUgKi8KKwkJCWlmIChwYXRoLT5sZWZ0ID4gMCkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX05FWFRfU0lCOworCQkJZWxzZSBpZiAoaGFuZGxlLT5sZXZlbCA+IDApCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9VUDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVDsKKwkJfQorCQlpZiAob3AgIT0gRVhUMl9FWFRFTlRfTkVYVF9TSUIpIHsKKyNpZmRlZiBERUJVR19HRVRfRVhURU5UCisJCQlwcmludGYoIjw8PDwgT1AgPSAlc1xuIiwKKwkJCSAgICAgICAob3AgPT0gRVhUMl9FWFRFTlRfRE9XTikgPyAiZG93biIgOgorCQkJICAgICAgICgob3AgPT0gRVhUMl9FWFRFTlRfVVApID8gInVwIiA6ICJ1bmtub3duIikpOworI2VuZGlmCisJCX0KKwl9CisKKwlpZiAoKG9yaWdfb3AgPT0gRVhUMl9FWFRFTlRfUFJFVikgfHwKKwkgICAgKG9yaWdfb3AgPT0gRVhUMl9FWFRFTlRfUFJFVl9MRUFGKSkgeworCQlpZiAoaGFuZGxlLT5sZXZlbCA8IGhhbmRsZS0+bWF4X2RlcHRoKSB7CisJCQkvKiBpbnRlcmlvciBub2RlICovCisJCQlpZiAocGF0aC0+dmlzaXRfbnVtID4gMCApIHsKKwkJCQkvKiBwYXRoLT52aXNpdF9udW0gPSAwOyAqLworCQkJCW9wID0gRVhUMl9FWFRFTlRfRE9XTl9BTkRfTEFTVDsKKwkJCX0gZWxzZSBpZiAocGF0aC0+bGVmdCA8IHBhdGgtPmVudHJpZXMtMSkKKwkJCQlvcCA9IEVYVDJfRVhURU5UX1BSRVZfU0lCOworCQkJZWxzZSBpZiAoaGFuZGxlLT5sZXZlbCA+IDApCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9VUDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fUFJFVjsKKwkJfSBlbHNlIHsKKwkJCS8qIGxlYWYgbm9kZSAqLworCQkJaWYgKHBhdGgtPmxlZnQgPCBwYXRoLT5lbnRyaWVzLTEpCisJCQkJb3AgPSBFWFQyX0VYVEVOVF9QUkVWX1NJQjsKKwkJCWVsc2UgaWYgKGhhbmRsZS0+bGV2ZWwgPiAwKQorCQkJCW9wID0gRVhUMl9FWFRFTlRfVVA7CisJCQllbHNlCisJCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX05PX1BSRVY7CisJCX0KKwkJaWYgKG9wICE9IEVYVDJfRVhURU5UX1BSRVZfU0lCKSB7CisjaWZkZWYgREVCVUdfR0VUX0VYVEVOVAorCQkJcHJpbnRmKCI8PDw8IE9QID0gJXNcbiIsCisJCQkgICAgICAgKG9wID09IEVYVDJfRVhURU5UX0RPV05fQU5EX0xBU1QpID8gImRvd24vbGFzdCIgOgorCQkJICAgICAgICgob3AgPT0gRVhUMl9FWFRFTlRfVVApID8gInVwIiA6ICJ1bmtub3duIikpOworI2VuZGlmCisJCX0KKwl9CisKKwlpZiAob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9MQVNUX0xFQUYpIHsKKwkJaWYgKChoYW5kbGUtPmxldmVsIDwgaGFuZGxlLT5tYXhfZGVwdGgpICYmCisJCSAgICAocGF0aC0+bGVmdCA9PSAwKSkKKwkJCW9wID0gRVhUMl9FWFRFTlRfRE9XTjsKKwkJZWxzZQorCQkJb3AgPSBFWFQyX0VYVEVOVF9MQVNUX1NJQjsKKyNpZmRlZiBERUJVR19HRVRfRVhURU5UCisJCXByaW50ZigiPDw8PCBPUCA9ICVzXG4iLAorCQkJICAgKG9wID09IEVYVDJfRVhURU5UX0RPV04pID8gImRvd24iIDogImxhc3Rfc2liIik7CisjZW5kaWYKKwl9CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBFWFQyX0VYVEVOVF9DVVJSRU5UOgorCQlpeCA9IHBhdGgtPmN1cnI7CisJCWJyZWFrOworCWNhc2UgRVhUMl9FWFRFTlRfUk9PVDoKKwkJaGFuZGxlLT5sZXZlbCA9IDA7CisJCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgRVhUMl9FWFRFTlRfRklSU1RfU0lCOgorCQlwYXRoLT5sZWZ0ID0gcGF0aC0+ZW50cmllczsKKwkJcGF0aC0+Y3VyciA9IDA7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFWFQyX0VYVEVOVF9ORVhUX1NJQjoKKwkJaWYgKHBhdGgtPmxlZnQgPD0gMCkKKwkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT19ORVhUOworCQlpZiAocGF0aC0+Y3VycikgeworCQkJaXggPSBwYXRoLT5jdXJyOworCQkJaXgrKzsKKwkJfSBlbHNlIHsKKwkJCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgcGF0aC0+YnVmOworCQkJaXggPSBFWFRfRklSU1RfSU5ERVgoZWgpOworCQl9CisJCXBhdGgtPmxlZnQtLTsKKwkJcGF0aC0+Y3VyciA9IGl4OworCQlwYXRoLT52aXNpdF9udW0gPSAwOworCQlicmVhazsKKwljYXNlIEVYVDJfRVhURU5UX1BSRVZfU0lCOgorCQlpZiAoIXBhdGgtPmN1cnIgfHwKKwkJICAgIHBhdGgtPmxlZnQrMSA+PSBwYXRoLT5lbnRyaWVzKQorCQkJcmV0dXJuIEVYVDJfRVRfRVhURU5UX05PX1BSRVY7CisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJaXgtLTsKKwkJcGF0aC0+Y3VyciA9IGl4OworCQlwYXRoLT5sZWZ0Kys7CisJCWlmIChoYW5kbGUtPmxldmVsIDwgaGFuZGxlLT5tYXhfZGVwdGgpCisJCQlwYXRoLT52aXNpdF9udW0gPSAxOworCQlicmVhazsKKwljYXNlIEVYVDJfRVhURU5UX0xBU1RfU0lCOgorCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIHBhdGgtPmJ1ZjsKKwkJcGF0aC0+Y3VyciA9IEVYVF9MQVNUX0VYVEVOVChlaCk7CisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJcGF0aC0+bGVmdCA9IDA7CisJCXBhdGgtPnZpc2l0X251bSA9IDA7CisJCWJyZWFrOworCWNhc2UgRVhUMl9FWFRFTlRfVVA6CisJCWlmIChoYW5kbGUtPmxldmVsIDw9IDApCisJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9fVVA7CisJCWhhbmRsZS0+bGV2ZWwtLTsKKwkJcGF0aC0tOworCQlpeCA9IHBhdGgtPmN1cnI7CisJCWlmICgob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9QUkVWKSB8fAorCQkgICAgKG9yaWdfb3AgPT0gRVhUMl9FWFRFTlRfUFJFVl9MRUFGKSkKKwkJCXBhdGgtPnZpc2l0X251bSA9IDA7CisJCWJyZWFrOworCWNhc2UgRVhUMl9FWFRFTlRfRE9XTjoKKwljYXNlIEVYVDJfRVhURU5UX0RPV05fQU5EX0xBU1Q6CisJCWlmICghcGF0aC0+Y3VyciB8fChoYW5kbGUtPmxldmVsID49IGhhbmRsZS0+bWF4X2RlcHRoKSkKKwkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9OT19ET1dOOworCisJCWl4ID0gcGF0aC0+Y3VycjsKKwkJbmV3cGF0aCA9IHBhdGggKyAxOworCQlpZiAoIW5ld3BhdGgtPmJ1ZikgeworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oaGFuZGxlLT5mcy0+YmxvY2tzaXplLAorCQkJCQkJJm5ld3BhdGgtPmJ1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9sZWFmKSArCisJCQkoKF9fdTY0KSBleHQyZnNfbGUxNl90b19jcHUoaXgtPmVpX2xlYWZfaGkpIDw8IDMyKTsKKwkJaWYgKChoYW5kbGUtPmZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSAmJgorCQkgICAgKGhhbmRsZS0+ZnMtPmlvICE9IGhhbmRsZS0+ZnMtPmltYWdlX2lvKSkKKwkJCW1lbXNldChuZXdwYXRoLT5idWYsIDAsIGhhbmRsZS0+ZnMtPmJsb2Nrc2l6ZSk7CisJCWVsc2UgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGhhbmRsZS0+ZnMtPmlvLAorCQkJCQkJICAgICBibGssIDEsIG5ld3BhdGgtPmJ1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJaGFuZGxlLT5sZXZlbCsrOworCisJCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgbmV3cGF0aC0+YnVmOworCisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfaGVhZGVyX3ZlcmlmeShlaCwgaGFuZGxlLT5mcy0+YmxvY2tzaXplKTsKKwkJaWYgKHJldHZhbCkgeworCQkJaGFuZGxlLT5sZXZlbC0tOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCisJCW5ld3BhdGgtPmxlZnQgPSBuZXdwYXRoLT5lbnRyaWVzID0KKwkJCWV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7CisJCW5ld3BhdGgtPm1heF9lbnRyaWVzID0gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9tYXgpOworCisJCWlmIChwYXRoLT5sZWZ0ID4gMCkgeworCQkJaXgrKzsKKwkJCW5ld3BhdGgtPmVuZF9ibGsgPSBleHQyZnNfbGUzMl90b19jcHUoaXgtPmVpX2Jsb2NrKTsKKwkJfSBlbHNlCisJCQluZXdwYXRoLT5lbmRfYmxrID0gcGF0aC0+ZW5kX2JsazsKKworCQlwYXRoID0gbmV3cGF0aDsKKwkJaWYgKG9wID09IEVYVDJfRVhURU5UX0RPV04pIHsKKwkJCWl4ID0gRVhUX0ZJUlNUX0lOREVYKChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIGVoKTsKKwkJCXBhdGgtPmN1cnIgPSBpeDsKKwkJCXBhdGgtPmxlZnQgPSBwYXRoLT5lbnRyaWVzIC0gMTsKKwkJCXBhdGgtPnZpc2l0X251bSA9IDA7CisJCX0gZWxzZSB7CisJCQlpeCA9IEVYVF9MQVNUX0lOREVYKChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIGVoKTsKKwkJCXBhdGgtPmN1cnIgPSBpeDsKKwkJCXBhdGgtPmxlZnQgPSAwOworCQkJaWYgKGhhbmRsZS0+bGV2ZWwgPCBoYW5kbGUtPm1heF9kZXB0aCkKKwkJCQlwYXRoLT52aXNpdF9udW0gPSAxOworCQl9CisjaWZkZWYgREVCVUdfR0VUX0VYVEVOVAorCQlwcmludGYoIkRvd24gdG8gbGV2ZWwgJWQvJWQsIGVuZF9ibGs9JWxsdVxuIiwKKwkJCSAgIGhhbmRsZS0+bGV2ZWwsIGhhbmRsZS0+bWF4X2RlcHRoLAorCQkJICAgcGF0aC0+ZW5kX2Jsayk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVYVDJfRVRfT1BfTk9UX1NVUFBPUlRFRDsKKwl9CisKKwlpZiAoIWl4KQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwlleHRlbnQtPmVfZmxhZ3MgPSAwOworI2lmZGVmIERFQlVHX0dFVF9FWFRFTlQKKwlwcmludGYoIihMZWZ0ICVkKVxuIiwgcGF0aC0+bGVmdCk7CisjZW5kaWYKKworCWlmIChoYW5kbGUtPmxldmVsID09IGhhbmRsZS0+bWF4X2RlcHRoKSB7CisJCWV4ID0gKHN0cnVjdCBleHQzX2V4dGVudCAqKSBpeDsKKworCQlleHRlbnQtPmVfcGJsayA9IGV4dDJmc19sZTMyX3RvX2NwdShleC0+ZWVfc3RhcnQpICsKKwkJCSgoX191NjQpIGV4dDJmc19sZTE2X3RvX2NwdShleC0+ZWVfc3RhcnRfaGkpIDw8IDMyKTsKKwkJZXh0ZW50LT5lX2xibGsgPSBleHQyZnNfbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKKwkJZXh0ZW50LT5lX2xlbiA9IGV4dDJmc19sZTE2X3RvX2NwdShleC0+ZWVfbGVuKTsKKwkJZXh0ZW50LT5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX0xFQUY7CisJCWlmIChleHRlbnQtPmVfbGVuID4gRVhUX0lOSVRfTUFYX0xFTikgeworCQkJZXh0ZW50LT5lX2xlbiAtPSBFWFRfSU5JVF9NQVhfTEVOOworCQkJZXh0ZW50LT5lX2ZsYWdzIHw9IEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVDsKKwkJfQorCX0gZWxzZSB7CisJCWV4dGVudC0+ZV9wYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9sZWFmKSArCisJCQkoKF9fdTY0KSBleHQyZnNfbGUxNl90b19jcHUoaXgtPmVpX2xlYWZfaGkpIDw8IDMyKTsKKwkJZXh0ZW50LT5lX2xibGsgPSBleHQyZnNfbGUzMl90b19jcHUoaXgtPmVpX2Jsb2NrKTsKKwkJaWYgKHBhdGgtPmxlZnQgPiAwKSB7CisJCQlpeCsrOworCQkJZW5kX2JsayA9IGV4dDJmc19sZTMyX3RvX2NwdShpeC0+ZWlfYmxvY2spOworCQl9IGVsc2UKKwkJCWVuZF9ibGsgPSBwYXRoLT5lbmRfYmxrOworCisJCWV4dGVudC0+ZV9sZW4gPSBlbmRfYmxrIC0gZXh0ZW50LT5lX2xibGs7CisJfQorCWlmIChwYXRoLT52aXNpdF9udW0pCisJCWV4dGVudC0+ZV9mbGFncyB8PSBFWFQyX0VYVEVOVF9GTEFHU19TRUNPTkRfVklTSVQ7CisKKwlpZiAoKChvcmlnX29wID09IEVYVDJfRVhURU5UX05FWFRfTEVBRikgfHwKKwkgICAgIChvcmlnX29wID09IEVYVDJfRVhURU5UX1BSRVZfTEVBRikpICYmCisJICAgIChoYW5kbGUtPmxldmVsICE9IGhhbmRsZS0+bWF4X2RlcHRoKSkKKwkJZ290byByZXRyeTsKKworCWlmICgob3JpZ19vcCA9PSBFWFQyX0VYVEVOVF9MQVNUX0xFQUYpICYmCisJICAgICgoaGFuZGxlLT5sZXZlbCAhPSBoYW5kbGUtPm1heF9kZXB0aCkgfHwKKwkgICAgIChwYXRoLT5sZWZ0ICE9IDApKSkKKwkJZ290byByZXRyeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IHVwZGF0ZV9wYXRoKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSkKK3sKKwlibGs2NF90CQkJCWJsazsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJc3RydWN0IGV4dDNfZXh0ZW50X2lkeAkJKml4OworCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gMCkgeworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoaGFuZGxlLT5mcywgaGFuZGxlLT5pbm8sCisJCQkJCSAgICBoYW5kbGUtPmlub2RlKTsKKwl9IGVsc2UgeworCQlpeCA9IGhhbmRsZS0+cGF0aFtoYW5kbGUtPmxldmVsIC0gMV0uY3VycjsKKwkJYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGl4LT5laV9sZWFmKSArCisJCQkoKF9fdTY0KSBleHQyZnNfbGUxNl90b19jcHUoaXgtPmVpX2xlYWZfaGkpIDw8IDMyKTsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGhhbmRsZS0+ZnMtPmlvLAorCQkJCSAgICAgIGJsaywgMSwgaGFuZGxlLT5wYXRoW2hhbmRsZS0+bGV2ZWxdLmJ1Zik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKyNpZiAwCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9zYXZlX3BhdGgoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCSAgZXh0Ml9leHRlbnRfcGF0aF90ICpyZXRfcGF0aCkKK3sKKwlleHQyX2V4dGVudF9wYXRoX3QJc2F2ZV9wYXRoOworCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbwlpbmZvOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9wYXRoKSwgJnNhdmVfcGF0aCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQoc2F2ZV9wYXRoLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X3BhdGgpKTsKKworCXNhdmVfcGF0aC0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0VYVEVOVF9QQVRIOworCXNhdmVfcGF0aC0+bGVhZl9oZWlnaHQgPSBpbmZvLm1heF9kZXB0aCAtIGluZm8uY3Vycl9sZXZlbCAtIDE7CisJc2F2ZV9wYXRoLT5sYmxrID0gZXh0ZW50LmVfbGJsazsKKworCSpyZXRfcGF0aCA9IHNhdmVfcGF0aDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZnJlZV9wYXRoKGV4dDJfZXh0ZW50X3BhdGhfdCBwYXRoKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMocGF0aCwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfUEFUSCk7CisKKwlleHQyZnNfZnJlZV9tZW0oJnBhdGgpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBHbyB0byB0aGUgbm9kZSBhdCBsZWFmX2xldmVsIHdoaWNoIGNvbnRhaW5zIGxvZ2ljYWwgYmxvY2sgYmxrLgorICoKKyAqIGxlYWZfbGV2ZWwgaXMgaGVpZ2h0IGZyb20gdGhlIGxlYWYgbm9kZSBsZXZlbCwgaS5lLgorICogbGVhZl9sZXZlbCAwIGlzIGF0IGxlYWYgbm9kZSwgbGVhZl9sZXZlbCAxIGlzIDEgYWJvdmUgZXRjLgorICoKKyAqIElmICJibGsiIGhhcyBubyBtYXBwaW5nIChob2xlKSB0aGVuIGhhbmRsZSBpcyBsZWZ0IGF0IGxhc3QKKyAqIGV4dGVudCBiZWZvcmUgYmxrLgorICovCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9nb3RvMihleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkgICAgICBpbnQgbGVhZl9sZXZlbCwgYmxrNjRfdCBibGspCit7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCWVycmNvZGVfdAkJcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9ST09ULCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCkKKwkJCXJldHZhbCA9IEVYVDJfRVRfRVhURU5UX05PVF9GT1VORDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAobGVhZl9sZXZlbCA+IGhhbmRsZS0+bWF4X2RlcHRoKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJsZWFmIGxldmVsICVkIGdyZWF0ZXIgdGhhbiB0cmVlIGRlcHRoICVkXG4iLAorCQkJbGVhZl9sZXZlbCwgaGFuZGxlLT5tYXhfZGVwdGgpOworI2VuZGlmCisJCXJldHVybiBFWFQyX0VUX09QX05PVF9TVVBQT1JURUQ7CisJfQorCisjaWZkZWYgREVCVUcKKwlwcmludGYoImdvdG8gZXh0ZW50IGlubyAldSwgbGV2ZWwgJWQsICVsbHVcbiIsIGhhbmRsZS0+aW5vLAorCSAgICAgICBsZWFmX2xldmVsLCBibGspOworI2VuZGlmCisKKyNpZmRlZiBERUJVR19HT1RPX0VYVEVOVFMKKwlkYmdfcHJpbnRfZXh0ZW50KCJyb290IiwgJmV4dGVudCk7CisjZW5kaWYKKwl3aGlsZSAoMSkgeworCQlpZiAoaGFuZGxlLT5tYXhfZGVwdGggLSBoYW5kbGUtPmxldmVsID09IGxlYWZfbGV2ZWwpIHsKKwkJCS8qIGJsb2NrIGlzIGluIHRoaXMgJmV4dGVudCAqLworCQkJaWYgKChibGsgPj0gZXh0ZW50LmVfbGJsaykgJiYKKwkJCSAgICAoYmxrIDwgZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoYmxrIDwgZXh0ZW50LmVfbGJsaykgeworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwKKwkJCQkJCQkgICBFWFQyX0VYVEVOVF9QUkVWX1NJQiwKKwkJCQkJCQkgICAmZXh0ZW50KTsKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EOworCQkJfQorCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLAorCQkJCQkJICAgRVhUMl9FWFRFTlRfTkVYVF9TSUIsCisJCQkJCQkgICAmZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCkKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJY29udGludWU7CisJCX0KKworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX05FWFRfU0lCLAorCQkJCQkgICAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQkJZ290byBnb19kb3duOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworI2lmZGVmIERFQlVHX0dPVE9fRVhURU5UUworCQlkYmdfcHJpbnRfZXh0ZW50KCJuZXh0IiwgJmV4dGVudCk7CisjZW5kaWYKKwkJaWYgKGJsayA9PSBleHRlbnQuZV9sYmxrKQorCQkJZ290byBnb19kb3duOworCQlpZiAoYmxrID4gZXh0ZW50LmVfbGJsaykKKwkJCWNvbnRpbnVlOworCisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfUFJFVl9TSUIsCisJCQkJCSAgICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworI2lmZGVmIERFQlVHX0dPVE9fRVhURU5UUworCQlkYmdfcHJpbnRfZXh0ZW50KCJwcmV2IiwgJmV4dGVudCk7CisjZW5kaWYKKworCWdvX2Rvd246CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfRE9XTiwKKwkJCQkJICAgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisjaWZkZWYgREVCVUdfR09UT19FWFRFTlRTCisJCWRiZ19wcmludF9leHRlbnQoImRvd24iLCAmZXh0ZW50KTsKKyNlbmRpZgorCX0KK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZ290byhleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkgICAgIGJsazY0X3QgYmxrKQoreworCXJldHVybiBleHQyZnNfZXh0ZW50X2dvdG8yKGhhbmRsZSwgMCwgYmxrKTsKK30KKworLyoKKyAqIFRyYXZlcnNlIGJhY2sgdXAgdG8gcm9vdCBmaXhpbmcgcGFyZW50cyBvZiBjdXJyZW50IG5vZGUgYXMgbmVlZGVkLgorICoKKyAqIElmIHdlIGNoYW5nZWQgc3RhcnQgb2YgZmlyc3QgZW50cnkgaW4gYSBub2RlLCBmaXggcGFyZW50IGluZGV4IHN0YXJ0CisgKiBhbmQgc28gb24uCisgKgorICogU2FmZSB0byBjYWxsIGZvciBhbnkgcG9zaXRpb24gaW4gbm9kZTsgaWYgbm90IGF0IHRoZSBmaXJzdCBlbnRyeSwKKyAqIHdpbGwgIHNpbXBseSByZXR1cm4uCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSkKK3sKKwlpbnQJCQkJcmV0dmFsID0gMDsKKwlpbnQJCQkJb3JpZ19oZWlnaHQ7CisJYmxrNjRfdAkJCQlzdGFydDsKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJCSpwYXRoOworCXN0cnVjdCBleHQyZnNfZXh0ZW50CQlleHRlbnQ7CisJc3RydWN0IGV4dDJfZXh0ZW50X2luZm8JCWluZm87CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCWlmICghcGF0aC0+Y3VycikKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwkvKiBtb2RpZmllZCBub2RlJ3Mgc3RhcnQgYmxvY2sgKi8KKwlzdGFydCA9IGV4dGVudC5lX2xibGs7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oaGFuZGxlLCAmaW5mbykpKQorCQlyZXR1cm4gcmV0dmFsOworCW9yaWdfaGVpZ2h0ID0gaW5mby5tYXhfZGVwdGggLSBpbmZvLmN1cnJfbGV2ZWw7CisKKwkvKiB0cmF2ZXJzZSB1cCB1bnRpbCBpbmRleCBub3QgZmlyc3QsIG9yIHN0YXJ0YmxrIG1hdGNoZXMsIG9yIHRvcCAqLworCXdoaWxlIChoYW5kbGUtPmxldmVsID4gMCAmJgorCSAgICAgICAocGF0aC0+bGVmdCA9PSBwYXRoLT5lbnRyaWVzIC0gMSkpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9VUCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCWlmIChleHRlbnQuZV9sYmxrID09IHN0YXJ0KQorCQkJYnJlYWs7CisJCXBhdGggPSBoYW5kbGUtPnBhdGggKyBoYW5kbGUtPmxldmVsOworCQlleHRlbnQuZV9sZW4gKz0gKGV4dGVudC5lX2xibGsgLSBzdGFydCk7CisJCWV4dGVudC5lX2xibGsgPSBzdGFydDsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCXVwZGF0ZV9wYXRoKGhhbmRsZSk7CisJfQorCisJLyogcHV0IGhhbmRsZSBiYWNrIHRvIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8yKGhhbmRsZSwgb3JpZ19oZWlnaHQsIHN0YXJ0KTsKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfcmVwbGFjZShleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUsCisJCQkJaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQlzdHJ1Y3QgZXh0MmZzX2V4dGVudCAqZXh0ZW50KQoreworCXN0cnVjdCBleHRlbnRfcGF0aAkJKnBhdGg7CisJc3RydWN0IGV4dDNfZXh0ZW50X2lkeAkJKml4OworCXN0cnVjdCBleHQzX2V4dGVudAkJKmV4OworCisJRVhUMl9DSEVDS19NQUdJQyhoYW5kbGUsIEVYVDJfRVRfTUFHSUNfRVhURU5UX0hBTkRMRSk7CisKKwlpZiAoIShoYW5kbGUtPmZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWlmICghaGFuZGxlLT5wYXRoKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKwlpZiAoIXBhdGgtPmN1cnIpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJleHRlbnQgcmVwbGFjZTogJXUgIiwgaGFuZGxlLT5pbm8pOworCWRiZ19wcmludF9leHRlbnQoMCwgZXh0ZW50KTsKKyNlbmRpZgorCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gaGFuZGxlLT5tYXhfZGVwdGgpIHsKKwkJZXggPSBwYXRoLT5jdXJyOworCisJCWV4LT5lZV9ibG9jayA9IGV4dDJmc19jcHVfdG9fbGUzMihleHRlbnQtPmVfbGJsayk7CisJCWV4LT5lZV9zdGFydCA9IGV4dDJmc19jcHVfdG9fbGUzMihleHRlbnQtPmVfcGJsayAmIDB4RkZGRkZGRkYpOworCQlleC0+ZWVfc3RhcnRfaGkgPSBleHQyZnNfY3B1X3RvX2xlMTYoZXh0ZW50LT5lX3BibGsgPj4gMzIpOworCQlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKSB7CisJCQlpZiAoZXh0ZW50LT5lX2xlbiA+IEVYVF9VTklOSVRfTUFYX0xFTikKKwkJCQlyZXR1cm4gRVhUMl9FVF9FWFRFTlRfSU5WQUxJRF9MRU5HVEg7CisJCQlleC0+ZWVfbGVuID0gZXh0MmZzX2NwdV90b19sZTE2KGV4dGVudC0+ZV9sZW4gKworCQkJCQkJCUVYVF9JTklUX01BWF9MRU4pOworCQl9IGVsc2UgeworCQkJaWYgKGV4dGVudC0+ZV9sZW4gPiBFWFRfSU5JVF9NQVhfTEVOKQorCQkJCXJldHVybiBFWFQyX0VUX0VYVEVOVF9JTlZBTElEX0xFTkdUSDsKKwkJCWV4LT5lZV9sZW4gPSBleHQyZnNfY3B1X3RvX2xlMTYoZXh0ZW50LT5lX2xlbik7CisJCX0KKwl9IGVsc2UgeworCQlpeCA9IHBhdGgtPmN1cnI7CisKKwkJaXgtPmVpX2xlYWYgPSBleHQyZnNfY3B1X3RvX2xlMzIoZXh0ZW50LT5lX3BibGsgJiAweEZGRkZGRkZGKTsKKwkJaXgtPmVpX2xlYWZfaGkgPSBleHQyZnNfY3B1X3RvX2xlMTYoZXh0ZW50LT5lX3BibGsgPj4gMzIpOworCQlpeC0+ZWlfYmxvY2sgPSBleHQyZnNfY3B1X3RvX2xlMzIoZXh0ZW50LT5lX2xibGspOworCQlpeC0+ZWlfdW51c2VkID0gMDsKKwl9CisJdXBkYXRlX3BhdGgoaGFuZGxlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFsbG9jYXRlIGEgbmV3IGJsb2NrLCBtb3ZlIGhhbGYgdGhlIGN1cnJlbnQgbm9kZSB0byBpdCwgYW5kIHVwZGF0ZSBwYXJlbnQKKyAqCisgKiBoYW5kbGUgd2lsbCBiZSBsZWZ0IHBvaW50aW5nIGF0IG9yaWdpbmFsIHJlY29yZC4KKyAqLworZXJyY29kZV90IGV4dDJmc19leHRlbnRfbm9kZV9zcGxpdChleHQyX2V4dGVudF9oYW5kbGVfdCBoYW5kbGUpCit7CisJZXJyY29kZV90CQkJcmV0dmFsID0gMDsKKwlibGs2NF90CQkJCW5ld19ub2RlX3BibGs7CisJYmxrNjRfdAkJCQluZXdfbm9kZV9zdGFydDsKKwlibGs2NF90CQkJCW9yaWdfbGJsazsKKwlibGs2NF90CQkJCWdvYWxfYmxrID0gMDsKKwlpbnQJCQkJb3JpZ19oZWlnaHQ7CisJY2hhcgkJCQkqYmxvY2tfYnVmID0gTlVMTDsKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudAkJZXh0ZW50OworCXN0cnVjdCBleHRlbnRfcGF0aAkJKnBhdGgsICpuZXdwYXRoID0gMDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSplaCwgKm5ld2VoOworCWludAkJCQl0b2NvcHk7CisJaW50CQkJCW5ld19yb290ID0gMDsKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbwkJaW5mbzsKKworCS8qIGJhc2ljIHNhbml0eSAqLworCUVYVDJfQ0hFQ0tfTUFHSUMoaGFuZGxlLCBFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUpOworCisJaWYgKCEoaGFuZGxlLT5mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlpZiAoIWhhbmRsZS0+cGF0aCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fQ1VSUkVOVF9OT0RFOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoInNwbGl0dGluZyBub2RlIGF0IGxldmVsICVkXG4iLCBoYW5kbGUtPmxldmVsKTsKKyNlbmRpZgorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfQ1VSUkVOVCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwkvKiBzYXZlIHRoZSBwb3NpdGlvbiB3ZSB3ZXJlIG9yaWdpbmFsbHkgc3BsaXR0aW5nLi4uICovCisJb3JpZ19oZWlnaHQgPSBpbmZvLm1heF9kZXB0aCAtIGluZm8uY3Vycl9sZXZlbDsKKwlvcmlnX2xibGsgPSBleHRlbnQuZV9sYmxrOworCisJLyogSXMgdGhlcmUgcm9vbSBpbiB0aGUgcGFyZW50IGZvciBhIG5ldyBlbnRyeT8gKi8KKwlpZiAoaGFuZGxlLT5sZXZlbCAmJgorCQkJKGhhbmRsZS0+cGF0aFtoYW5kbGUtPmxldmVsIC0gMV0uZW50cmllcyA+PQorCQkJIGhhbmRsZS0+cGF0aFtoYW5kbGUtPmxldmVsIC0gMV0ubWF4X2VudHJpZXMpKSB7CisKKyNpZmRlZiBERUJVRworCQlwcmludGYoInBhcmVudCBsZXZlbCAlZCBmdWxsOyBzcGxpdHRpbmcgaXQgdG9vXG4iLAorCQkJCQkJCWhhbmRsZS0+bGV2ZWwgLSAxKTsKKyNlbmRpZgorCQkvKiBzcGxpdCB0aGUgcGFyZW50ICovCisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfVVAsICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCQlnb2FsX2JsayA9IGV4dGVudC5lX3BibGs7CisKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9ub2RlX3NwbGl0KGhhbmRsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisKKwkJLyogZ2V0IGhhbmRsZSBiYWNrIHRvIG91ciBvcmlnaW5hbCBzcGxpdCBwb3NpdGlvbiAqLworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8yKGhhbmRsZSwgb3JpZ19oZWlnaHQsIG9yaWdfbGJsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJfQorCisJLyogQXQgdGhpcyBwb2ludCwgcGFyZW50IHNob3VsZCBoYXZlIHJvb20gZm9yIHRoaXMgc3BsaXQgKi8KKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKwlpZiAoIXBhdGgtPmN1cnIpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworCS8qIGV4dGVudCBoZWFkZXIgb2YgdGhlIGN1cnJlbnQgbm9kZSB3ZSdsbCBzcGxpdCAqLworCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKilwYXRoLT5idWY7CisKKwkvKiBzcGxpdHRpbmcgcm9vdCBsZXZlbCBtZWFucyBtb3ZpbmcgdGhlbSBhbGwgb3V0ICovCisJaWYgKGhhbmRsZS0+bGV2ZWwgPT0gMCkgeworCQluZXdfcm9vdCA9IDE7CisJCXRvY29weSA9IGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKCgoaGFuZGxlLT5tYXhfZGVwdGgrMikgKgorCQkJCQkgc2l6ZW9mKHN0cnVjdCBleHRlbnRfcGF0aCkpLAorCQkJCQkmbmV3cGF0aCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJCW1lbXNldChuZXdwYXRoLCAwLAorCQkgICAgICAgKChoYW5kbGUtPm1heF9kZXB0aCsyKSAqIHNpemVvZihzdHJ1Y3QgZXh0ZW50X3BhdGgpKSk7CisJfSBlbHNlIHsKKwkJdG9jb3B5ID0gZXh0MmZzX2xlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSAvIDI7CisJfQorCisjaWZkZWYgREVCVUcKKwlwcmludGYoIndpbGwgY29weSBvdXQgJWQgb2YgJWQgZW50cmllcyBhdCBsZXZlbCAlZFxuIiwKKwkJCQl0b2NvcHksIGV4dDJmc19sZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyksCisJCQkJaGFuZGxlLT5sZXZlbCk7CisjZW5kaWYKKworCWlmICghdG9jb3B5KSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJOb3RoaW5nIHRvIGNvcHkgdG8gbmV3IGJsb2NrIVxuIik7CisjZW5kaWYKKwkJcmV0dmFsID0gRVhUMl9FVF9DQU5UX1NQTElUX0VYVEVOVDsKKwkJZ290byBkb25lOworCX0KKworCS8qIGZpcnN0IHdlIG5lZWQgYSBuZXcgYmxvY2ssIG9yIGNhbiBkbyBub3RoaW5nLiAqLworCWJsb2NrX2J1ZiA9IG1hbGxvYyhoYW5kbGUtPmZzLT5ibG9ja3NpemUpOworCWlmICghYmxvY2tfYnVmKSB7CisJCXJldHZhbCA9IEVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghZ29hbF9ibGspIHsKKwkJZGdycF90CWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2lubyhoYW5kbGUtPmZzLCBoYW5kbGUtPmlubyk7CisJCV9fdTgJbG9nX2ZsZXggPSBoYW5kbGUtPmZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCisJCWlmIChsb2dfZmxleCkKKwkJCWdyb3VwID0gZ3JvdXAgJiB+KCgxIDw8IChsb2dfZmxleCkpIC0gMSk7CisJCWdvYWxfYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihoYW5kbGUtPmZzLCBncm91cCk7CisJfQorCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jazIoaGFuZGxlLT5mcywgZ29hbF9ibGssIGJsb2NrX2J1ZiwKKwkJCQkgICAgJm5ld19ub2RlX3BibGspOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJ3aWxsIGNvcHkgdG8gbmV3IG5vZGUgYXQgYmxvY2sgJWx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZykgbmV3X25vZGVfcGJsayk7CisjZW5kaWYKKworCS8qIENvcHkgZGF0YSBpbnRvIG5ldyBibG9jayBidWZmZXIgKi8KKwkvKiBGaXJzdCB0aGUgaGVhZGVyIGZvciB0aGUgbmV3IGJsb2NrLi4uICovCisJbmV3ZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSBibG9ja19idWY7CisJbWVtY3B5KG5ld2VoLCBlaCwgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIpKTsKKwluZXdlaC0+ZWhfZW50cmllcyA9IGV4dDJmc19jcHVfdG9fbGUxNih0b2NvcHkpOworCW5ld2VoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoKGhhbmRsZS0+ZnMtPmJsb2Nrc2l6ZSAtCisJCQkgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIpKSAvCisJCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCkpOworCisJLyogdGhlbiB0aGUgZW50cmllcyBmb3IgdGhlIG5ldyBibG9jay4uLiAqLworCW1lbWNweShFWFRfRklSU1RfSU5ERVgobmV3ZWgpLAorCQlFWFRfRklSU1RfSU5ERVgoZWgpICsKKwkJCShleHQyZnNfbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpIC0gdG9jb3B5KSwKKwkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudF9pZHgpICogdG9jb3B5KTsKKworCW5ld19ub2RlX3N0YXJ0ID0gZXh0MmZzX2xlMzJfdG9fY3B1KEVYVF9GSVJTVF9JTkRFWChuZXdlaCktPmVpX2Jsb2NrKTsKKworCS8qIC4uLmFuZCB3cml0ZSB0aGUgbmV3IG5vZGUgYmxvY2sgb3V0IHRvIGRpc2suICovCisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChoYW5kbGUtPmZzLT5pbywgbmV3X25vZGVfcGJsaywgMSwKKwkJCQkJYmxvY2tfYnVmKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCS8qIE9LISB3ZSd2ZSBjcmVhdGVkIHRoZSBuZXcgbm9kZTsgbm93IGFkanVzdCB0aGUgdHJlZSAqLworCisJLyogY3VycmVudCBwYXRoIG5vdyBoYXMgZmV3ZXIgYWN0aXZlIGVudHJpZXMsIHdlIGNvcGllZCBzb21lIG91dCAqLworCWlmIChoYW5kbGUtPmxldmVsID09IDApIHsKKwkJbWVtY3B5KG5ld3BhdGgsIHBhdGgsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dGVudF9wYXRoKSAqIChoYW5kbGUtPm1heF9kZXB0aCsxKSk7CisJCWhhbmRsZS0+cGF0aCA9IG5ld3BhdGg7CisJCW5ld3BhdGggPSBwYXRoOworCQlwYXRoID0gaGFuZGxlLT5wYXRoOworCQlwYXRoLT5lbnRyaWVzID0gMTsKKwkJcGF0aC0+bGVmdCA9IHBhdGgtPm1heF9lbnRyaWVzIC0gMTsKKwkJaGFuZGxlLT5tYXhfZGVwdGgrKzsKKwkJZWgtPmVoX2RlcHRoID0gZXh0MmZzX2NwdV90b19sZTE2KGhhbmRsZS0+bWF4X2RlcHRoKTsKKwl9IGVsc2UgeworCQlwYXRoLT5lbnRyaWVzIC09IHRvY29weTsKKwkJcGF0aC0+bGVmdCAtPSB0b2NvcHk7CisJfQorCisJZWgtPmVoX2VudHJpZXMgPSBleHQyZnNfY3B1X3RvX2xlMTYocGF0aC0+ZW50cmllcyk7CisJLyogdGhpcyB3cml0ZXMgb3V0IHRoZSBub2RlLCBpbmNsLiB0aGUgbW9kaWZpZWQgaGVhZGVyICovCisJcmV0dmFsID0gdXBkYXRlX3BhdGgoaGFuZGxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwkvKiBub3cgZ28gdXAgYW5kIGluc2VydC9yZXBsYWNlIGluZGV4IGZvciBuZXcgbm9kZSB3ZSBjcmVhdGVkICovCisJaWYgKG5ld19yb290KSB7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfRklSU1RfU0lCLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKworCQlleHRlbnQuZV9sYmxrID0gbmV3X25vZGVfc3RhcnQ7CisJCWV4dGVudC5lX3BibGsgPSBuZXdfbm9kZV9wYmxrOworCQlleHRlbnQuZV9sZW4gPSBoYW5kbGUtPnBhdGhbMF0uZW5kX2JsayAtIGV4dGVudC5lX2xibGs7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0gZWxzZSB7CisJCV9fdTMyIG5ld19ub2RlX2xlbmd0aDsKKworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1VQLCAmZXh0ZW50KTsKKwkJLyogd2lsbCBpbnNlcnQgYWZ0ZXIgdGhpcyBvbmU7IGl0J3MgbGVuZ3RoIGlzIHNob3J0ZXIgbm93ICovCisJCW5ld19ub2RlX2xlbmd0aCA9IG5ld19ub2RlX3N0YXJ0IC0gZXh0ZW50LmVfbGJsazsKKwkJZXh0ZW50LmVfbGVuIC09IG5ld19ub2RlX2xlbmd0aDsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisKKwkJLyogbm93IHNldCB1cCB0aGUgbmV3IGV4dGVudCBhbmQgaW5zZXJ0IGl0ICovCisJCWV4dGVudC5lX2xibGsgPSBuZXdfbm9kZV9zdGFydDsKKwkJZXh0ZW50LmVfcGJsayA9IG5ld19ub2RlX3BibGs7CisJCWV4dGVudC5lX2xlbiA9IG5ld19ub2RlX2xlbmd0aDsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLCBFWFQyX0VYVEVOVF9JTlNFUlRfQUZURVIsICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0KKworCS8qIGdldCBoYW5kbGUgYmFjayB0byBvdXIgb3JpZ2luYWwgcG9zaXRpb24gKi8KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8yKGhhbmRsZSwgb3JpZ19oZWlnaHQsIG9yaWdfbGJsayk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJLyogbmV3IG5vZGUgaG9va2VkIGluLCBzbyB1cGRhdGUgaW5vZGUgYmxvY2sgY291bnQgKGRvIHRoaXMgaGVyZT8pICovCisJaGFuZGxlLT5pbm9kZS0+aV9ibG9ja3MgKz0gKGhhbmRsZS0+ZnMtPmJsb2Nrc2l6ZSAqCisJCQkJICAgIEVYVDJGU19DTFVTVEVSX1JBVElPKGhhbmRsZS0+ZnMpKSAvIDUxMjsKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoaGFuZGxlLT5mcywgaGFuZGxlLT5pbm8sCisJCQkJICAgIGhhbmRsZS0+aW5vZGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworZG9uZToKKwlpZiAobmV3cGF0aCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZuZXdwYXRoKTsKKwlmcmVlKGJsb2NrX2J1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2V4dGVudF9pbnNlcnQoZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZmxhZ3MsCisJCQkJICAgICAgc3RydWN0IGV4dDJmc19leHRlbnQgKmV4dGVudCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJCSpwYXRoOworCXN0cnVjdCBleHQzX2V4dGVudF9pZHgJCSppeDsKKwlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyCSplaDsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmKCJleHRlbnQgaW5zZXJ0OiAldSAiLCBoYW5kbGUtPmlubyk7CisJZGJnX3ByaW50X2V4dGVudCgwLCBleHRlbnQpOworI2VuZGlmCisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKworCWlmIChwYXRoLT5lbnRyaWVzID49IHBhdGgtPm1heF9lbnRyaWVzKSB7CisJCWlmIChmbGFncyAmIEVYVDJfRVhURU5UX0lOU0VSVF9OT1NQTElUKSB7CisJCQlyZXR1cm4gRVhUMl9FVF9DQU5UX0lOU0VSVF9FWFRFTlQ7CisJCX0gZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50Zigibm9kZSBmdWxsIChsZXZlbCAlZCkgLSBzcGxpdHRpbmdcbiIsCisJCQkJICAgaGFuZGxlLT5sZXZlbCk7CisjZW5kaWYKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfbm9kZV9zcGxpdChoYW5kbGUpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJCX0KKwl9CisKKwllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIHBhdGgtPmJ1ZjsKKwlpZiAocGF0aC0+Y3VycikgeworCQlpeCA9IHBhdGgtPmN1cnI7CisJCWlmIChmbGFncyAmIEVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUikgeworCQkJaXgrKzsKKwkJCXBhdGgtPmxlZnQtLTsKKwkJfQorCX0gZWxzZQorCQlpeCA9IEVYVF9GSVJTVF9JTkRFWChlaCk7CisKKwlwYXRoLT5jdXJyID0gaXg7CisKKwlpZiAocGF0aC0+bGVmdCA+PSAwKQorCQltZW1tb3ZlKGl4ICsgMSwgaXgsCisJCQkocGF0aC0+bGVmdCsxKSAqIHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnRfaWR4KSk7CisJcGF0aC0+bGVmdCsrOworCXBhdGgtPmVudHJpZXMrKzsKKworCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgcGF0aC0+YnVmOworCWVoLT5laF9lbnRyaWVzID0gZXh0MmZzX2NwdV90b19sZTE2KHBhdGgtPmVudHJpZXMpOworCisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgZXh0ZW50KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldHZhbCA9IHVwZGF0ZV9wYXRoKGhhbmRsZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCWV4dDJmc19leHRlbnRfZGVsZXRlKGhhbmRsZSwgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFNldHMgdGhlIHBoeXNpY2FsIGJsb2NrIGZvciBhIGxvZ2ljYWwgZmlsZSBibG9jayBpbiB0aGUgZXh0ZW50IHRyZWUuCisgKgorICogTWF5OiBtYXAgdW5tYXBwZWQsIHVubWFwIG1hcHBlZCwgb3IgcmVtYXAgbWFwcGVkIGJsb2Nrcy4KKyAqCisgKiBNYXBwaW5nIGFuIHVubWFwcGVkIGJsb2NrIGFkZHMgYSBzaW5nbGUtYmxvY2sgZXh0ZW50LgorICoKKyAqIFVubWFwcGluZyBmaXJzdCBvciBsYXN0IGJsb2NrIG1vZGlmaWVzIGV4dGVudCBpbi1wbGFjZQorICogIC0gQnV0IG1heSBuZWVkIHRvIGZpeCBwYXJlbnQncyBzdGFydHMgdG9vIGluIGZpcnN0LWJsb2NrIGNhc2UKKyAqCisgKiBNYXBwaW5nIGFueSB1bm1hcHBlZCBibG9jayByZXF1aXJlcyBhZGRpbmcgYSAoc2luZ2xlLWJsb2NrKSBleHRlbnQKKyAqIGFuZCBpbnNlcnRpbmcgaW50byBwcm9wZXIgcG9pbnQgaW4gdHJlZS4KKyAqCisgKiBNb2RpZnlpbmcgKHVubWFwcGluZyBvciByZW1hcHBpbmcpIGEgYmxvY2sgaW4gdGhlIG1pZGRsZQorICogb2YgYW4gZXh0ZW50IHJlcXVpcmVzIHNwbGl0dGluZyB0aGUgZXh0ZW50LgorICogIC0gUmVtYXBwaW5nIGNhc2UgcmVxdWlyZXMgbmV3IHNpbmdsZS1ibG9jayBleHRlbnQuCisgKgorICogUmVtYXBwaW5nIGZpcnN0IG9yIGxhc3QgYmxvY2sgYWRkcyBhbiBleHRlbnQuCisgKgorICogV2UgcmVhbGx5IG5lZWQgZXh0ZW50IGFkZGluZyB0byBiZSBzbWFydCBhYm91dCBtZXJnaW5nLgorICovCisKK2VycmNvZGVfdCBleHQyZnNfZXh0ZW50X3NldF9ibWFwKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwKKwkJCQkgYmxrNjRfdCBsb2dpY2FsLCBibGs2NF90IHBoeXNpY2FsLCBpbnQgZmxhZ3MpCit7CisJZXJyY29kZV90CQllYywgcmV0dmFsID0gMDsKKwlpbnQJCQltYXBwZWQgPSAxOyAvKiBsb2dpY2FsIGlzIG1hcHBlZD8gKi8KKwlpbnQJCQlvcmlnX2hlaWdodDsKKwlpbnQJCQlleHRlbnRfdW5pbml0ID0gMDsKKwlpbnQJCQlwcmV2X3VuaW5pdCA9IDA7CisJaW50CQkJbmV4dF91bmluaXQgPSAwOworCWludAkJCW5ld191bmluaXQgPSAwOworCWludAkJCW1heF9sZW4gPSBFWFRfSU5JVF9NQVhfTEVOOworCWludAkJCWhhc19wcmV2LCBoYXNfbmV4dDsKKwlibGs2NF90CQkJb3JpZ19sYmxrOworCXN0cnVjdCBleHRlbnRfcGF0aAkqcGF0aDsKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudAlleHRlbnQsIG5leHRfZXh0ZW50LCBwcmV2X2V4dGVudDsKKwlzdHJ1Y3QgZXh0MmZzX2V4dGVudAluZXdleHRlbnQ7CisJc3RydWN0IGV4dDJfZXh0ZW50X2luZm8JaW5mbzsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaGFuZGxlLCBFWFQyX0VUX01BR0lDX0VYVEVOVF9IQU5ETEUpOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoInNldF9ibWFwIGlubyAldSBsb2cgJWxsZCBwaHlzICVsbGQgZmxhZ3MgJWRcbiIsCisJICAgICAgIGhhbmRsZS0+aW5vLCBsb2dpY2FsLCBwaHlzaWNhbCwgZmxhZ3MpOworI2VuZGlmCisKKwlpZiAoIShoYW5kbGUtPmZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWlmICghaGFuZGxlLT5wYXRoKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKworCWlmIChmbGFncyAmIEVYVDJfRVhURU5UX1NFVF9CTUFQX1VOSU5JVCkgeworCQluZXdfdW5pbml0ID0gMTsKKwkJbWF4X2xlbiA9IEVYVF9VTklOSVRfTUFYX0xFTjsKKwl9CisKKwkvKiBpZiAocmUpbWFwcGluZywgc2V0IHVwIG5ldyBleHRlbnQgdG8gaW5zZXJ0ICovCisJaWYgKHBoeXNpY2FsKSB7CisJCW5ld2V4dGVudC5lX2xlbiA9IDE7CisJCW5ld2V4dGVudC5lX3BibGsgPSBwaHlzaWNhbDsKKwkJbmV3ZXh0ZW50LmVfbGJsayA9IGxvZ2ljYWw7CisJCW5ld2V4dGVudC5lX2ZsYWdzID0gRVhUMl9FWFRFTlRfRkxBR1NfTEVBRjsKKwkJaWYgKG5ld191bmluaXQpCisJCQluZXdleHRlbnQuZV9mbGFncyB8PSBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQ7CisJfQorCisJLyogc3BlY2lhbCBjYXNlIGlmIHRoZSBleHRlbnQgdHJlZSBpcyBjb21wbGV0ZWx5IGVtcHR5ICovCisJaWYgKChoYW5kbGUtPm1heF9kZXB0aCA9PSAwKSAmJiAocGF0aC0+ZW50cmllcyA9PSAwKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsIDAsICZuZXdleHRlbnQpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIHNhdmUgb3VyIG9yaWdpbmFsIGxvY2F0aW9uIGluIHRoZSBleHRlbnQgdHJlZSAqLworCWlmICgocmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULAorCQkJCQkmZXh0ZW50KSkpIHsKKwkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERSkKKwkJCXJldHVybiByZXR2YWw7CisJCW1lbXNldCgmZXh0ZW50LCAwLCBzaXplb2YoZXh0ZW50KSk7CisJfQorCWlmICgocmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXRfaW5mbyhoYW5kbGUsICZpbmZvKSkpCisJCXJldHVybiByZXR2YWw7CisJb3JpZ19oZWlnaHQgPSBpbmZvLm1heF9kZXB0aCAtIGluZm8uY3Vycl9sZXZlbDsKKwlvcmlnX2xibGsgPSBleHRlbnQuZV9sYmxrOworCisJLyogZ28gdG8gdGhlIGxvZ2ljYWwgc3BvdCB3ZSB3YW50IHRvIChyZS91biltYXAgKi8KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBsb2dpY2FsKTsKKwlpZiAocmV0dmFsKSB7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9FWFRFTlRfTk9UX0ZPVU5EKSB7CisJCQlyZXR2YWwgPSAwOworCQkJbWFwcGVkID0gMDsKKwkJCWlmICghcGh5c2ljYWwpIHsKKyNpZmRlZiBERUJVRworCQkJCXByaW50ZigiYmxvY2sgJWxsdSBhbHJlYWR5IHVubWFwcGVkXG4iLAorCQkJCQlsb2dpY2FsKTsKKyNlbmRpZgorCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfSBlbHNlCisJCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBUaGlzIG1heSBiZSB0aGUgZXh0ZW50ICpiZWZvcmUqIHRoZSByZXF1ZXN0ZWQgbG9naWNhbCwKKwkgKiBpZiBpdCdzIGN1cnJlbnRseSB1bm1hcHBlZC4KKwkgKgorCSAqIEdldCB0aGUgcHJldmlvdXMgYW5kIG5leHQgbGVhZiBleHRlbnRzLCBpZiB0aGV5IGFyZSBwcmVzZW50LgorCSAqLworCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwgRVhUMl9FWFRFTlRfQ1VSUkVOVCwgJmV4dGVudCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCWlmIChleHRlbnQuZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1VOSU5JVCkKKwkJZXh0ZW50X3VuaW5pdCA9IDE7CisJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9ORVhUX0xFQUYsICZuZXh0X2V4dGVudCk7CisJaWYgKHJldHZhbCkgeworCQloYXNfbmV4dCA9IDA7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9FWFRFTlRfTk9fTkVYVCkKKwkJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlkYmdfcHJpbnRfZXh0ZW50KCJzZXRfYm1hcDogbmV4dF9leHRlbnQiLAorCQkJCSAmbmV4dF9leHRlbnQpOworCQloYXNfbmV4dCA9IDE7CisJCWlmIChuZXh0X2V4dGVudC5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKQorCQkJbmV4dF91bmluaXQgPSAxOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBsb2dpY2FsKTsKKwlpZiAocmV0dmFsICYmIHJldHZhbCAhPSBFWFQyX0VUX0VYVEVOVF9OT1RfRk9VTkQpCisJCWdvdG8gZG9uZTsKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX1BSRVZfTEVBRiwgJnByZXZfZXh0ZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWhhc19wcmV2ID0gMDsKKwkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX0VYVEVOVF9OT19QUkVWKQorCQkJZ290byBkb25lOworCX0gZWxzZSB7CisJCWhhc19wcmV2ID0gMTsKKwkJZGJnX3ByaW50X2V4dGVudCgic2V0X2JtYXA6IHByZXZfZXh0ZW50IiwKKwkJCQkgJnByZXZfZXh0ZW50KTsKKwkJaWYgKHByZXZfZXh0ZW50LmVfZmxhZ3MgJiBFWFQyX0VYVEVOVF9GTEFHU19VTklOSVQpCisJCQlwcmV2X3VuaW5pdCA9IDE7CisJfQorCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ290byhoYW5kbGUsIGxvZ2ljYWwpOworCWlmIChyZXR2YWwgJiYgcmV0dmFsICE9IEVYVDJfRVRfRVhURU5UX05PVF9GT1VORCkKKwkJZ290byBkb25lOworCisJLyogY2hlY2sgaWYgYWxyZWFkeSBwb2ludGluZyB0byB0aGUgcmVxdWVzdGVkIHBoeXNpY2FsICovCisJaWYgKG1hcHBlZCAmJiAobmV3X3VuaW5pdCA9PSBleHRlbnRfdW5pbml0KSAmJgorCSAgICAoZXh0ZW50LmVfcGJsayArIChsb2dpY2FsIC0gZXh0ZW50LmVfbGJsaykgPT0gcGh5c2ljYWwpKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJwaHlzaWNhbCBibG9jayAoYXQgJWxsdSkgdW5jaGFuZ2VkXG4iLCBsb2dpY2FsKTsKKyNlbmRpZgorCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFtYXBwZWQpIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIm1hcHBpbmcgdW5tYXBwZWQgbG9naWNhbCBibG9jayAlbGx1XG4iLCBsb2dpY2FsKTsKKyNlbmRpZgorCQlpZiAoKGxvZ2ljYWwgPT0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbikgJiYKKwkJICAgIChwaHlzaWNhbCA9PSBleHRlbnQuZV9wYmxrICsgZXh0ZW50LmVfbGVuKSAmJgorCQkgICAgKG5ld191bmluaXQgPT0gZXh0ZW50X3VuaW5pdCkgJiYKKwkJICAgICgoaW50KSBleHRlbnQuZV9sZW4gPCBtYXhfbGVuLTEpKSB7CisJCQlleHRlbnQuZV9sZW4rKzsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZleHRlbnQpOworCQl9IGVsc2UgaWYgKChsb2dpY2FsID09IGV4dGVudC5lX2xibGsgLSAxKSAmJgorCQkJICAgKHBoeXNpY2FsID09IGV4dGVudC5lX3BibGsgLSAxKSAmJgorCQkJICAgKG5ld191bmluaXQgPT0gZXh0ZW50X3VuaW5pdCkgJiYKKwkJCSAgICgoaW50KSBleHRlbnQuZV9sZW4gPCBtYXhfbGVuIC0gMSkpIHsKKwkJCWV4dGVudC5lX2xlbisrOworCQkJZXh0ZW50LmVfbGJsay0tOworCQkJZXh0ZW50LmVfcGJsay0tOworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9yZXBsYWNlKGhhbmRsZSwgMCwgJmV4dGVudCk7CisJCX0gZWxzZSBpZiAoaGFzX25leHQgJiYKKwkJCSAgIChsb2dpY2FsID09IG5leHRfZXh0ZW50LmVfbGJsayAtIDEpICYmCisJCQkgICAocGh5c2ljYWwgPT0gbmV4dF9leHRlbnQuZV9wYmxrIC0gMSkgJiYKKwkJCSAgIChuZXdfdW5pbml0ID09IG5leHRfdW5pbml0KSAmJgorCQkJICAgKChpbnQpIG5leHRfZXh0ZW50LmVfbGVuIDwgbWF4X2xlbiAtIDEpKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9ORVhUX0xFQUYsCisJCQkJCQkgICAmbmV4dF9leHRlbnQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQluZXh0X2V4dGVudC5lX2xlbisrOworCQkJbmV4dF9leHRlbnQuZV9sYmxrLS07CisJCQluZXh0X2V4dGVudC5lX3BibGstLTsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZuZXh0X2V4dGVudCk7CisJCX0gZWxzZSBpZiAobG9naWNhbCA8IGV4dGVudC5lX2xibGspCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsIDAsICZuZXdleHRlbnQpOworCQllbHNlCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJICAgICAgRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSLCAmbmV3ZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhoYW5kbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0gZWxzZSBpZiAoKGxvZ2ljYWwgPT0gZXh0ZW50LmVfbGJsaykgJiYgKGV4dGVudC5lX2xlbiA9PSAxKSkgIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIihyZS91biltYXBwaW5nIG9ubHkgYmxvY2sgaW4gZXh0ZW50XG4iKTsKKyNlbmRpZgorCQlpZiAocGh5c2ljYWwpIHsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZuZXdleHRlbnQpOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9kZWxldGUoaGFuZGxlLCAwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJZWMgPSBleHQyZnNfZXh0ZW50X2ZpeF9wYXJlbnRzKGhhbmRsZSk7CisJCQlpZiAoZWMgIT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpCisJCQkJcmV0dmFsID0gZWM7CisJCX0KKworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0gZWxzZSBpZiAobG9naWNhbCA9PSBleHRlbnQuZV9sYmxrICsgZXh0ZW50LmVfbGVuIC0gMSkgIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIihyZS91biltYXBwaW5nIGxhc3QgYmxvY2sgaW4gZXh0ZW50XG4iKTsKKyNlbmRpZgorCQlpZiAocGh5c2ljYWwpIHsKKwkJCWlmIChoYXNfbmV4dCAmJgorCQkJICAgIChsb2dpY2FsID09IChuZXh0X2V4dGVudC5lX2xibGsgLSAxKSkgJiYKKwkJCSAgICAocGh5c2ljYWwgPT0gKG5leHRfZXh0ZW50LmVfcGJsayAtIDEpKSAmJgorCQkJICAgIChuZXdfdW5pbml0ID09IG5leHRfdW5pbml0KSAmJgorCQkJICAgICgoaW50KSBuZXh0X2V4dGVudC5lX2xlbiA8IG1heF9sZW4gLSAxKSkgeworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwKKwkJCQkJRVhUMl9FWFRFTlRfTkVYVF9MRUFGLCAmbmV4dF9leHRlbnQpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQluZXh0X2V4dGVudC5lX2xlbisrOworCQkJCW5leHRfZXh0ZW50LmVfbGJsay0tOworCQkJCW5leHRfZXh0ZW50LmVfcGJsay0tOworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsCisJCQkJCQkJICAgICAgICZuZXh0X2V4dGVudCk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBkb25lOworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZml4X3BhcmVudHMoaGFuZGxlKTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIGRvbmU7CisJCQl9IGVsc2UKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJICAgICAgRVhUMl9FWFRFTlRfSU5TRVJUX0FGVEVSLCAmbmV3ZXh0ZW50KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBkb25lOworCQkJLyogTm93IHBvaW50aW5nIGF0IGluc2VydGVkIGV4dGVudDsgbW92ZSBiYWNrIHRvIHByZXYgKi8KKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwKKwkJCQkJCSAgIEVYVDJfRVhURU5UX1BSRVZfTEVBRiwKKwkJCQkJCSAgICZleHRlbnQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJZXh0ZW50LmVfbGVuLS07CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsICZleHRlbnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0gZWxzZSBpZiAobG9naWNhbCA9PSBleHRlbnQuZV9sYmxrKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIocmUvdW4pbWFwcGluZyBmaXJzdCBibG9jayBpbiBleHRlbnRcbiIpOworI2VuZGlmCisJCWlmIChwaHlzaWNhbCkgeworCQkJaWYgKGhhc19wcmV2ICYmCisJCQkgICAgKGxvZ2ljYWwgPT0gKHByZXZfZXh0ZW50LmVfbGJsayArCisJCQkJCSBwcmV2X2V4dGVudC5lX2xlbikpICYmCisJCQkgICAgKHBoeXNpY2FsID09IChwcmV2X2V4dGVudC5lX3BibGsgKworCQkJCQkgIHByZXZfZXh0ZW50LmVfbGVuKSkgJiYKKwkJCSAgICAobmV3X3VuaW5pdCA9PSBwcmV2X3VuaW5pdCkgJiYKKwkJCSAgICAoKGludCkgcHJldl9leHRlbnQuZV9sZW4gPCBtYXhfbGVuLTEpKSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCAKKwkJCQkJRVhUMl9FWFRFTlRfUFJFVl9MRUFGLCAmcHJldl9leHRlbnQpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlwcmV2X2V4dGVudC5lX2xlbisrOworCQkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfcmVwbGFjZShoYW5kbGUsIDAsCisJCQkJCQkJICAgICAgICZwcmV2X2V4dGVudCk7CisJCQl9IGVsc2UKKwkJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJCQkJICAgICAgMCwgJm5ld2V4dGVudCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZG9uZTsKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZ2V0KGhhbmRsZSwKKwkJCQkJCSAgIEVYVDJfRVhURU5UX05FWFRfTEVBRiwKKwkJCQkJCSAgICZleHRlbnQpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCX0KKwkJZXh0ZW50LmVfcGJsaysrOworCQlleHRlbnQuZV9sYmxrKys7CisJCWV4dGVudC5lX2xlbi0tOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9maXhfcGFyZW50cyhoYW5kbGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBkb25lOworCX0gZWxzZSB7CisJCV9fdTMyCW9yaWdfbGVuZ3RoOworCisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIocmUvdW4pbWFwcGluZyBpbiBtaWRkbGUgb2YgZXh0ZW50XG4iKTsKKyNlbmRpZgorCQkvKiBuZWVkIHRvIHNwbGl0IHRoaXMgZXh0ZW50OyBsYXRlciAqLworCisJCW9yaWdfbGVuZ3RoID0gZXh0ZW50LmVfbGVuOworCisJCS8qIHNob3J0ZW4gcHJlLXNwbGl0IGV4dGVudCAqLworCQlleHRlbnQuZV9sZW4gPSAobG9naWNhbCAtIGV4dGVudC5lX2xibGspOworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZG9uZTsKKwkJLyogaW5zZXJ0IG91ciBuZXcgZXh0ZW50LCBpZiBhbnkgKi8KKwkJaWYgKHBoeXNpY2FsKSB7CisJCQkvKiBpbnNlcnQgbmV3IGV4dGVudCBhZnRlciBjdXJyZW50ICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJCUVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJm5ld2V4dGVudCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBhZGQgcG9zdC1zcGxpdCBleHRlbnQgKi8KKwkJZXh0ZW50LmVfcGJsayArPSBleHRlbnQuZV9sZW4gKyAxOworCQlleHRlbnQuZV9sYmxrICs9IGV4dGVudC5lX2xlbiArIDE7CisJCWV4dGVudC5lX2xlbiA9IG9yaWdfbGVuZ3RoIC0gZXh0ZW50LmVfbGVuIC0gMTsKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9pbnNlcnQoaGFuZGxlLAorCQkJCUVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJmV4dGVudCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCS8qIGdldCBoYW5kbGUgYmFjayB0byBpdHMgcG9zaXRpb24gKi8KKwlpZiAob3JpZ19oZWlnaHQgPiBoYW5kbGUtPm1heF9kZXB0aCkKKwkJb3JpZ19oZWlnaHQgPSBoYW5kbGUtPm1heF9kZXB0aDsgLyogSW4gY2FzZSB3ZSBzaG9ydGVuZWQgdGhlIHRyZWUgKi8KKwlleHQyZnNfZXh0ZW50X2dvdG8yKGhhbmRsZSwgb3JpZ19oZWlnaHQsIG9yaWdfbGJsayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZGVsZXRlKGV4dDJfZXh0ZW50X2hhbmRsZV90IGhhbmRsZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBleHRlbnRfcGF0aAkJKnBhdGg7CisJY2hhciAJCQkJKmNwOworCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIJKmVoOworCWVycmNvZGVfdAkJCXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGhhbmRsZSwgRVhUMl9FVF9NQUdJQ19FWFRFTlRfSEFORExFKTsKKworCWlmICghKGhhbmRsZS0+ZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKCFoYW5kbGUtPnBhdGgpCisJCXJldHVybiBFWFQyX0VUX05PX0NVUlJFTlRfTk9ERTsKKworI2lmZGVmIERFQlVHCisJeworCQlzdHJ1Y3QgZXh0MmZzX2V4dGVudAlleHRlbnQ7CisKKwkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9DVVJSRU5ULAorCQkJCQkgICAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQlwcmludGYoImV4dGVudCBkZWxldGUgJXUgIiwgaGFuZGxlLT5pbm8pOworCQkJZGJnX3ByaW50X2V4dGVudCgwLCAmZXh0ZW50KTsKKwkJfQorCX0KKyNlbmRpZgorCisJcGF0aCA9IGhhbmRsZS0+cGF0aCArIGhhbmRsZS0+bGV2ZWw7CisJaWYgKCFwYXRoLT5jdXJyKQorCQlyZXR1cm4gRVhUMl9FVF9OT19DVVJSRU5UX05PREU7CisKKwljcCA9IHBhdGgtPmN1cnI7CisKKwlpZiAocGF0aC0+bGVmdCkgeworCQltZW1tb3ZlKGNwLCBjcCArIHNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnRfaWR4KSwKKwkJCXBhdGgtPmxlZnQgKiBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50X2lkeCkpOworCQlwYXRoLT5sZWZ0LS07CisJfSBlbHNlIHsKKwkJc3RydWN0IGV4dDNfZXh0ZW50X2lkeAkqaXggPSBwYXRoLT5jdXJyOworCQlpeC0tOworCQlwYXRoLT5jdXJyID0gaXg7CisJfQorCWlmICgtLXBhdGgtPmVudHJpZXMgPT0gMCkKKwkJcGF0aC0+Y3VyciA9IDA7CisKKwkvKiBpZiBub24tcm9vdCBub2RlIGhhcyBubyBlbnRyaWVzIGxlZnQsIHJlbW92ZSBpdCAmIHBhcmVudCBwdHIgdG8gaXQgKi8KKwlpZiAocGF0aC0+ZW50cmllcyA9PSAwICYmIGhhbmRsZS0+bGV2ZWwpIHsKKwkJaWYgKCEoZmxhZ3MgJiBFWFQyX0VYVEVOVF9ERUxFVEVfS0VFUF9FTVBUWSkpIHsKKwkJCXN0cnVjdCBleHQyZnNfZXh0ZW50CWV4dGVudDsKKworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nZXQoaGFuZGxlLCBFWFQyX0VYVEVOVF9VUCwKKwkJCQkJCQkJJmV4dGVudCk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisKKwkJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfZGVsZXRlKGhhbmRsZSwgZmxhZ3MpOworCQkJaGFuZGxlLT5pbm9kZS0+aV9ibG9ja3MgLT0KKwkJCQkoaGFuZGxlLT5mcy0+YmxvY2tzaXplICoKKwkJCQkgRVhUMkZTX0NMVVNURVJfUkFUSU8oaGFuZGxlLT5mcykpIC8gNTEyOworCQkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGhhbmRsZS0+ZnMsIGhhbmRsZS0+aW5vLAorCQkJCQkJICAgIGhhbmRsZS0+aW5vZGUpOworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihoYW5kbGUtPmZzLAorCQkJCQkJICBleHRlbnQuZV9wYmxrLCAtMSk7CisJCX0KKwl9IGVsc2UgeworCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopIHBhdGgtPmJ1ZjsKKwkJZWgtPmVoX2VudHJpZXMgPSBleHQyZnNfY3B1X3RvX2xlMTYocGF0aC0+ZW50cmllcyk7CisJCWlmICgocGF0aC0+ZW50cmllcyA9PSAwKSAmJiAoaGFuZGxlLT5sZXZlbCA9PSAwKSkKKwkJCWVoLT5laF9kZXB0aCA9IGhhbmRsZS0+bWF4X2RlcHRoID0gMDsKKwkJcmV0dmFsID0gdXBkYXRlX3BhdGgoaGFuZGxlKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19leHRlbnRfZ2V0X2luZm8oZXh0Ml9leHRlbnRfaGFuZGxlX3QgaGFuZGxlLAorCQkJCSBzdHJ1Y3QgZXh0Ml9leHRlbnRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZXh0ZW50X3BhdGgJCSpwYXRoOworCisJRVhUMl9DSEVDS19NQUdJQyhoYW5kbGUsIEVYVDJfRVRfTUFHSUNfRVhURU5UX0hBTkRMRSk7CisKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9pbmZvKSk7CisKKwlwYXRoID0gaGFuZGxlLT5wYXRoICsgaGFuZGxlLT5sZXZlbDsKKwlpZiAocGF0aCkgeworCQlpZiAocGF0aC0+Y3VycikKKwkJCWluZm8tPmN1cnJfZW50cnkgPSAoKGNoYXIgKikgcGF0aC0+Y3VyciAtIHBhdGgtPmJ1ZikgLworCQkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnRfaWR4KTsKKwkJZWxzZQorCQkJaW5mby0+Y3Vycl9lbnRyeSA9IDA7CisJCWluZm8tPm51bV9lbnRyaWVzID0gcGF0aC0+ZW50cmllczsKKwkJaW5mby0+bWF4X2VudHJpZXMgPSBwYXRoLT5tYXhfZW50cmllczsKKwkJaW5mby0+Ynl0ZXNfYXZhaWwgPSAocGF0aC0+bWF4X2VudHJpZXMgLSBwYXRoLT5lbnRyaWVzKSAqCisJCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKwl9CisKKwlpbmZvLT5jdXJyX2xldmVsID0gaGFuZGxlLT5sZXZlbDsKKwlpbmZvLT5tYXhfZGVwdGggPSBoYW5kbGUtPm1heF9kZXB0aDsKKwlpbmZvLT5tYXhfbGJsayA9ICgoX191NjQpIDEgPDwgMzIpIC0gMTsKKwlpbmZvLT5tYXhfcGJsayA9ICgoX191NjQpIDEgPDwgNDgpIC0gMTsKKwlpbmZvLT5tYXhfbGVuID0gKDFVTCA8PCAxNSk7CisJaW5mby0+bWF4X3VuaW5pdF9sZW4gPSAoMVVMIDw8IDE1KSAtIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCisvKgorICogT3ZlcnJpZGUgZGVidWdmcydzIHByb21wdAorICovCitjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWUgPSAidHN0X2V4dGVudHMiOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZmllbWFwLmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9maWVtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJmNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZmllbWFwLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIEZTX0lPQ19GSUVNQVAgaW9jdGwgaW5mcmFzdHJ1Y3R1cmUuCisgKgorICogU29tZSBwb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDcgQ2x1c3RlciBGaWxlIFN5c3RlbXMsIEluYworICoKKyAqIEF1dGhvcnM6IE1hcmsgRmFzaGVoIDxtZmFzaGVoQHN1c2UuY29tPgorICogICAgICAgICAgS2FscGFrIFNoYWggPGthbHBhay5zaGFoQHN1bi5jb20+CisgKiAgICAgICAgICBBbmRyZWFzIERpbGdlciA8YWRpbGdlckBzdW4uY29tPgorICovCisKKyNpZm5kZWYgX0xJTlVYX0ZJRU1BUF9ICisjZGVmaW5lIF9MSU5VWF9GSUVNQVBfSAorCitzdHJ1Y3QgZmllbWFwX2V4dGVudCB7CisJX191NjQgZmVfbG9naWNhbDsgIC8qIGxvZ2ljYWwgb2Zmc2V0IGluIGJ5dGVzIGZvciB0aGUgc3RhcnQgb2YKKwkJCSAgICAqIHRoZSBleHRlbnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlICovCisJX191NjQgZmVfcGh5c2ljYWw7IC8qIHBoeXNpY2FsIG9mZnNldCBpbiBieXRlcyBmb3IgdGhlIHN0YXJ0CisJCQkgICAgKiBvZiB0aGUgZXh0ZW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlzayAqLworCV9fdTY0IGZlX2xlbmd0aDsgICAvKiBsZW5ndGggaW4gYnl0ZXMgZm9yIHRoaXMgZXh0ZW50ICovCisJX191NjQgZmVfcmVzZXJ2ZWQ2NFsyXTsKKwlfX3UzMiBmZV9mbGFnczsgICAgLyogRklFTUFQX0VYVEVOVF8qIGZsYWdzIGZvciB0aGlzIGV4dGVudCAqLworCV9fdTMyIGZlX3Jlc2VydmVkWzNdOworfTsKKworc3RydWN0IGZpZW1hcCB7CisJX191NjQgZm1fc3RhcnQ7CQkvKiBsb2dpY2FsIG9mZnNldCAoaW5jbHVzaXZlKSBhdAorCQkJCSAqIHdoaWNoIHRvIHN0YXJ0IG1hcHBpbmcgKGluKSAqLworCV9fdTY0IGZtX2xlbmd0aDsJLyogbG9naWNhbCBsZW5ndGggb2YgbWFwcGluZyB3aGljaAorCQkJCSAqIHVzZXJzcGFjZSB3YW50cyAoaW4pICovCisJX191MzIgZm1fZmxhZ3M7CQkvKiBGSUVNQVBfRkxBR18qIGZsYWdzIGZvciByZXF1ZXN0IChpbi9vdXQpICovCisJX191MzIgZm1fbWFwcGVkX2V4dGVudHM7LyogbnVtYmVyIG9mIGV4dGVudHMgdGhhdCB3ZXJlIG1hcHBlZCAob3V0KSAqLworCV9fdTMyIGZtX2V4dGVudF9jb3VudDsgIC8qIHNpemUgb2YgZm1fZXh0ZW50cyBhcnJheSAoaW4pICovCisJX191MzIgZm1fcmVzZXJ2ZWQ7CisJc3RydWN0IGZpZW1hcF9leHRlbnQgZm1fZXh0ZW50c1swXTsgLyogYXJyYXkgb2YgbWFwcGVkIGV4dGVudHMgKG91dCkgKi8KK307CisKKyNpZm5kZWYgRlNfSU9DX0ZJRU1BUAorI2RlZmluZSBGU19JT0NfRklFTUFQCV9JT1dSKCdmJywgMTEsIHN0cnVjdCBmaWVtYXApCisjZW5kaWYKKworI2RlZmluZSBGSUVNQVBfTUFYX09GRlNFVAkofjBVTEwpCisKKyNkZWZpbmUgRklFTUFQX0ZMQUdfU1lOQwkweDAwMDAwMDAxIC8qIHN5bmMgZmlsZSBkYXRhIGJlZm9yZSBtYXAgKi8KKyNkZWZpbmUgRklFTUFQX0ZMQUdfWEFUVFIJMHgwMDAwMDAwMiAvKiBtYXAgZXh0ZW5kZWQgYXR0cmlidXRlIHRyZWUgKi8KKworI2RlZmluZSBGSUVNQVBfRkxBR1NfQ09NUEFUCShGSUVNQVBfRkxBR19TWU5DIHwgRklFTUFQX0ZMQUdfWEFUVFIpCisKKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9MQVNUCQkweDAwMDAwMDAxIC8qIExhc3QgZXh0ZW50IGluIGZpbGUuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfVU5LTk9XTgkJMHgwMDAwMDAwMiAvKiBEYXRhIGxvY2F0aW9uIHVua25vd24uICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREVMQUxMT0MJCTB4MDAwMDAwMDQgLyogTG9jYXRpb24gc3RpbGwgcGVuZGluZy4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX1VOS05PV04uICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfRU5DT0RFRAkJMHgwMDAwMDAwOCAvKiBEYXRhIGNhbiBub3QgYmUgcmVhZAorCQkJCQkJICAgICogd2hpbGUgZnMgaXMgdW5tb3VudGVkICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9FTkNSWVBURUQJMHgwMDAwMDA4MCAvKiBEYXRhIGlzIGVuY3J5cHRlZCBieSBmcy4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX05PX0JZUEFTUy4gKi8KKyNkZWZpbmUgRklFTUFQX0VYVEVOVF9OT1RfQUxJR05FRAkweDAwMDAwMTAwIC8qIEV4dGVudCBvZmZzZXRzIG1heSBub3QgYmUKKwkJCQkJCSAgICAqIGJsb2NrIGFsaWduZWQuICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkUJMHgwMDAwMDIwMCAvKiBEYXRhIG1peGVkIHdpdGggbWV0YWRhdGEuCisJCQkJCQkgICAgKiBTZXRzIEVYVEVOVF9OT1RfQUxJR05FRC4qLworI2RlZmluZSBGSUVNQVBfRVhURU5UX0RBVEFfVEFJTAkJMHgwMDAwMDQwMCAvKiBNdWx0aXBsZSBmaWxlcyBpbiBibG9jay4KKwkJCQkJCSAgICAqIFNldHMgRVhURU5UX05PVF9BTElHTkVELiovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOCQkweDAwMDAwODAwIC8qIFNwYWNlIGFsbG9jYXRlZCwgYnV0CisJCQkJCQkgICAgKiBubyBkYXRhIChpLmUuIHplcm8pLiAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX01FUkdFRAkJMHgwMDAwMTAwMCAvKiBGaWxlIGRvZXMgbm90IG5hdGl2ZWx5CisJCQkJCQkgICAgKiBzdXBwb3J0IGV4dGVudHMuIFJlc3VsdAorCQkJCQkJICAgICogbWVyZ2VkIGZvciBlZmZpY2llbmN5LiAqLworCisjZW5kaWYgLyogX0xJTlVYX0ZJRU1BUF9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9maWxlaW8uYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2ZpbGVpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWI2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9maWxlaW8uYwpAQCAtMCwwICsxLDQ5OCBAQAorLyoKKyAqIGZpbGVpby5jIC0tLSBTaW1wbGUgZmlsZSBJL08gcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RydWN0IGV4dDJfZmlsZSB7CisJZXJyY29kZV90CQltYWdpYzsKKwlleHQyX2ZpbHN5cyAJCWZzOworCWV4dDJfaW5vX3QJCWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwlpbnQgCQkJZmxhZ3M7CisJX191NjQJCQlwb3M7CisJYmxrNjRfdAkJCWJsb2Nrbm87CisJYmxrNjRfdAkJCXBoeXNibG9jazsKKwljaGFyIAkJCSpidWY7Cit9OworCisjZGVmaW5lIEJNQVBfQlVGRkVSIChmaWxlLT5idWYgKyBmcy0+YmxvY2tzaXplKQorCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfb3BlbjIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCSAgICBpbnQgZmxhZ3MsIGV4dDJfZmlsZV90ICpyZXQpCit7CisJZXh0Ml9maWxlX3QgCWZpbGU7CisJZXJyY29kZV90CXJldHZhbDsKKworCS8qCisJICogRG9uJ3QgbGV0IGNhbGxlciBjcmVhdGUgb3Igb3BlbiBhIGZpbGUgZm9yIHdyaXRpbmcgaWYgdGhlCisJICogZmlsZXN5c3RlbSBpcyByZWFkLW9ubHkuCisJICovCisJaWYgKChmbGFncyAmIChFWFQyX0ZJTEVfV1JJVEUgfCBFWFQyX0ZJTEVfQ1JFQVRFKSkgJiYKKwkgICAgIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfZmlsZSksICZmaWxlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbWVtc2V0KGZpbGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9maWxlKSk7CisJZmlsZS0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0VYVDJfRklMRTsKKwlmaWxlLT5mcyA9IGZzOworCWZpbGUtPmlubyA9IGlubzsKKwlmaWxlLT5mbGFncyA9IGZsYWdzICYgRVhUMl9GSUxFX01BU0s7CisKKwlpZiAoaW5vZGUpIHsKKwkJbWVtY3B5KCZmaWxlLT5pbm9kZSwgaW5vZGUsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCX0gZWxzZSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZmaWxlLT5pbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheSgzLCBmcy0+YmxvY2tzaXplLCAmZmlsZS0+YnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWw7CisKKwkqcmV0ID0gZmlsZTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoZmlsZS0+YnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmZpbGUtPmJ1Zik7CisJZXh0MmZzX2ZyZWVfbWVtKCZmaWxlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfb3BlbihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICBpbnQgZmxhZ3MsIGV4dDJfZmlsZV90ICpyZXQpCit7CisJcmV0dXJuIGV4dDJmc19maWxlX29wZW4yKGZzLCBpbm8sIE5VTEwsIGZsYWdzLCByZXQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaWxlc3lzdGVtIGhhbmRsZSBvZiBhIGZpbGUgZnJvbSB0aGUgc3RydWN0dXJlCisgKi8KK2V4dDJfZmlsc3lzIGV4dDJmc19maWxlX2dldF9mcyhleHQyX2ZpbGVfdCBmaWxlKQoreworCWlmIChmaWxlLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGZpbGUtPmZzOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBpbm9kZSBvZiBhIGZpbGUgZnJvbSB0aGUgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBleHQyX2lub2RlICpleHQyZnNfZmlsZV9nZXRfaW5vZGUoZXh0Ml9maWxlX3QgZmlsZSkKK3sKKwlpZiAoZmlsZS0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmZmlsZS0+aW5vZGU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5vZGUgbnVtYmVyIGZyb20gdGhlIHN0cnVjdHVyZSAqLworZXh0Ml9pbm9fdCBleHQyZnNfZmlsZV9nZXRfaW5vZGVfbnVtKGV4dDJfZmlsZV90IGZpbGUpCit7CisJaWYgKGZpbGUtPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZmlsZS0+aW5vOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRoZSBkaXJ0eSBibG9jayBidWZmZXIgb3V0IHRvIGRpc2sgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqLworZXJyY29kZV90IGV4dDJmc19maWxlX2ZsdXNoKGV4dDJfZmlsZV90IGZpbGUpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2ZpbHN5cyBmczsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZmlsZSwgRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpOworCWZzID0gZmlsZS0+ZnM7CisKKwlpZiAoIShmaWxlLT5mbGFncyAmIEVYVDJfRklMRV9CVUZfVkFMSUQpIHx8CisJICAgICEoZmlsZS0+ZmxhZ3MgJiBFWFQyX0ZJTEVfQlVGX0RJUlRZKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE9LLCB0aGUgcGh5c2ljYWwgYmxvY2sgaGFzbid0IGJlZW4gYWxsb2NhdGVkIHlldC4KKwkgKiBBbGxvY2F0ZSBpdC4KKwkgKi8KKwlpZiAoIWZpbGUtPnBoeXNibG9jaykgeworCQlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGZpbGUtPmlubywgJmZpbGUtPmlub2RlLAorCQkJCSAgICAgQk1BUF9CVUZGRVIsIGZpbGUtPmlubyA/IEJNQVBfQUxMT0MgOiAwLAorCQkJCSAgICAgZmlsZS0+YmxvY2tubywgMCwgJmZpbGUtPnBoeXNibG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBmaWxlLT5waHlzYmxvY2ssIDEsIGZpbGUtPmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZpbGUtPmZsYWdzICY9IH5FWFQyX0ZJTEVfQlVGX0RJUlRZOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3luY2hyb25pemVzIHRoZSBmaWxlJ3MgYmxvY2sgYnVmZmVyIGFuZCB0aGUgY3VycmVudAorICogZmlsZSBwb3NpdGlvbiwgcG9zc2libHkgaW52YWxpZGF0aW5nIGJsb2NrIGJ1ZmZlciBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGVycmNvZGVfdCBzeW5jX2J1ZmZlcl9wb3NpdGlvbihleHQyX2ZpbGVfdCBmaWxlKQoreworCWJsazY0X3QJYjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJYiA9IGZpbGUtPnBvcyAvIGZpbGUtPmZzLT5ibG9ja3NpemU7CisJaWYgKGIgIT0gZmlsZS0+YmxvY2tubykgeworCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9mbHVzaChmaWxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWZpbGUtPmZsYWdzICY9IH5FWFQyX0ZJTEVfQlVGX1ZBTElEOworCX0KKwlmaWxlLT5ibG9ja25vID0gYjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgdGhlIGZpbGUncyBibG9jayBidWZmZXIgd2l0aCB2YWxpZCBkYXRhIGZyb20KKyAqIHRoZSBkaXNrIGFzIG5lY2Vzc2FyeS4KKyAqCisgKiBJZiBkb250ZmlsbCBpcyB0cnVlLCB0aGVuIHNraXAgaW5pdGlhbGl6aW5nIHRoZSBidWZmZXIgc2luY2Ugd2UncmUKKyAqIGdvaW5nIHRvIGJlIHJlcGxhY2luZyBpdHMgZW50aXJlIGNvbnRlbnRzIGFueXdheS4gIElmIHNldCwgdGhlbiB0aGUKKyAqIGZ1bmN0aW9uIGJhc2ljYWxseSBvbmx5IHNldHMgZmlsZS0+cGh5c2Jsb2NrIGFuZCBFWFQyX0ZJTEVfQlVGX1ZBTElECisgKi8KKyNkZWZpbmUgRE9OVEZJTEwgMQorc3RhdGljIGVycmNvZGVfdCBsb2FkX2J1ZmZlcihleHQyX2ZpbGVfdCBmaWxlLCBpbnQgZG9udGZpbGwpCit7CisJZXh0Ml9maWxzeXMJZnMgPSBmaWxlLT5mczsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKCEoZmlsZS0+ZmxhZ3MgJiBFWFQyX0ZJTEVfQlVGX1ZBTElEKSkgeworCQlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGZpbGUtPmlubywgJmZpbGUtPmlub2RlLAorCQkJCSAgICAgQk1BUF9CVUZGRVIsIDAsIGZpbGUtPmJsb2Nrbm8sIDAsCisJCQkJICAgICAmZmlsZS0+cGh5c2Jsb2NrKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmICghZG9udGZpbGwpIHsKKwkJCWlmIChmaWxlLT5waHlzYmxvY2spIHsKKwkJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLAorCQkJCQkJCSAgICAgICBmaWxlLT5waHlzYmxvY2ssCisJCQkJCQkJICAgICAgIDEsIGZpbGUtPmJ1Zik7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0gZWxzZQorCQkJCW1lbXNldChmaWxlLT5idWYsIDAsIGZzLT5ibG9ja3NpemUpOworCQl9CisJCWZpbGUtPmZsYWdzIHw9IEVYVDJfRklMRV9CVUZfVkFMSUQ7CisJfQorCXJldHVybiAwOworfQorCisKK2VycmNvZGVfdCBleHQyZnNfZmlsZV9jbG9zZShleHQyX2ZpbGVfdCBmaWxlKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZpbGUsIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKTsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX2ZsdXNoKGZpbGUpOworCisJaWYgKGZpbGUtPmJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmaWxlLT5idWYpOworCWV4dDJmc19mcmVlX21lbSgmZmlsZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK2VycmNvZGVfdCBleHQyZnNfZmlsZV9yZWFkKGV4dDJfZmlsZV90IGZpbGUsIHZvaWQgKmJ1ZiwKKwkJCSAgIHVuc2lnbmVkIGludCB3YW50ZWQsIHVuc2lnbmVkIGludCAqZ290KQoreworCWV4dDJfZmlsc3lzCWZzOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCXVuc2lnbmVkIGludAlzdGFydCwgYywgY291bnQgPSAwOworCV9fdTY0CQlsZWZ0OworCWNoYXIJCSpwdHIgPSAoY2hhciAqKSBidWY7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZpbGUsIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKTsKKwlmcyA9IGZpbGUtPmZzOworCisJd2hpbGUgKChmaWxlLT5wb3MgPCBFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpKSAmJiAod2FudGVkID4gMCkpIHsKKwkJcmV0dmFsID0gc3luY19idWZmZXJfcG9zaXRpb24oZmlsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGZhaWw7CisJCXJldHZhbCA9IGxvYWRfYnVmZmVyKGZpbGUsIDApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmYWlsOworCisJCXN0YXJ0ID0gZmlsZS0+cG9zICUgZnMtPmJsb2Nrc2l6ZTsKKwkJYyA9IGZzLT5ibG9ja3NpemUgLSBzdGFydDsKKwkJaWYgKGMgPiB3YW50ZWQpCisJCQljID0gd2FudGVkOworCQlsZWZ0ID0gRVhUMl9JX1NJWkUoJmZpbGUtPmlub2RlKSAtIGZpbGUtPnBvcyA7CisJCWlmIChjID4gbGVmdCkKKwkJCWMgPSBsZWZ0OworCisJCW1lbWNweShwdHIsIGZpbGUtPmJ1ZitzdGFydCwgYyk7CisJCWZpbGUtPnBvcyArPSBjOworCQlwdHIgKz0gYzsKKwkJY291bnQgKz0gYzsKKwkJd2FudGVkIC09IGM7CisJfQorCitmYWlsOgorCWlmIChnb3QpCisJCSpnb3QgPSBjb3VudDsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK2VycmNvZGVfdCBleHQyZnNfZmlsZV93cml0ZShleHQyX2ZpbGVfdCBmaWxlLCBjb25zdCB2b2lkICpidWYsCisJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdW5zaWduZWQgaW50ICp3cml0dGVuKQoreworCWV4dDJfZmlsc3lzCWZzOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCXVuc2lnbmVkIGludAlzdGFydCwgYywgY291bnQgPSAwOworCWNvbnN0IGNoYXIJKnB0ciA9IChjb25zdCBjaGFyICopIGJ1ZjsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZmlsZSwgRVhUMl9FVF9NQUdJQ19FWFQyX0ZJTEUpOworCWZzID0gZmlsZS0+ZnM7CisKKwlpZiAoIShmaWxlLT5mbGFncyAmIEVYVDJfRklMRV9XUklURSkpCisJCXJldHVybiBFWFQyX0VUX0ZJTEVfUk87CisKKwl3aGlsZSAobmJ5dGVzID4gMCkgeworCQlyZXR2YWwgPSBzeW5jX2J1ZmZlcl9wb3NpdGlvbihmaWxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGFydCA9IGZpbGUtPnBvcyAlIGZzLT5ibG9ja3NpemU7CisJCWMgPSBmcy0+YmxvY2tzaXplIC0gc3RhcnQ7CisJCWlmIChjID4gbmJ5dGVzKQorCQkJYyA9IG5ieXRlczsKKworCQkvKgorCQkgKiBXZSBvbmx5IG5lZWQgdG8gZG8gYSByZWFkLW1vZGlmeS11cGRhdGUgY3ljbGUgaWYKKwkJICogd2UncmUgZG9pbmcgYSBwYXJ0aWFsIHdyaXRlLgorCQkgKi8KKwkJcmV0dmFsID0gbG9hZF9idWZmZXIoZmlsZSwgKGMgPT0gZnMtPmJsb2Nrc2l6ZSkpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmYWlsOworCisJCS8qCisJCSAqIE9LLCB0aGUgcGh5c2ljYWwgYmxvY2sgaGFzbid0IGJlZW4gYWxsb2NhdGVkIHlldC4KKwkJICogQWxsb2NhdGUgaXQuCisJCSAqLworCQlpZiAoIWZpbGUtPnBoeXNibG9jaykgeworCQkJcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBmaWxlLT5pbm8sICZmaWxlLT5pbm9kZSwKKwkJCQkJICAgICAgQk1BUF9CVUZGRVIsCisJCQkJCSAgICAgIGZpbGUtPmlubyA/IEJNQVBfQUxMT0MgOiAwLAorCQkJCQkgICAgICBmaWxlLT5ibG9ja25vLCAwLAorCQkJCQkgICAgICAmZmlsZS0+cGh5c2Jsb2NrKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBmYWlsOworCQl9CisKKwkJZmlsZS0+ZmxhZ3MgfD0gRVhUMl9GSUxFX0JVRl9ESVJUWTsKKwkJbWVtY3B5KGZpbGUtPmJ1ZitzdGFydCwgcHRyLCBjKTsKKwkJZmlsZS0+cG9zICs9IGM7CisJCXB0ciArPSBjOworCQljb3VudCArPSBjOworCQluYnl0ZXMgLT0gYzsKKwl9CisKK2ZhaWw6CisJLyogVXBkYXRlIGlub2RlIHNpemUgKi8KKwlpZiAoY291bnQgIT0gMCAmJiBFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpIDwgZmlsZS0+cG9zKSB7CisJCWVycmNvZGVfdAlyYzsKKworCQlyYyA9IGV4dDJmc19maWxlX3NldF9zaXplMihmaWxlLCBmaWxlLT5wb3MpOworCQlpZiAocmV0dmFsID09IDApCisJCQlyZXR2YWwgPSByYzsKKwl9CisKKwlpZiAod3JpdHRlbikKKwkJKndyaXR0ZW4gPSBjb3VudDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfbGxzZWVrKGV4dDJfZmlsZV90IGZpbGUsIF9fdTY0IG9mZnNldCwKKwkJCSAgICBpbnQgd2hlbmNlLCBfX3U2NCAqcmV0X3BvcykKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGZpbGUsIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFKTsKKworCWlmICh3aGVuY2UgPT0gRVhUMl9TRUVLX1NFVCkKKwkJZmlsZS0+cG9zID0gb2Zmc2V0OworCWVsc2UgaWYgKHdoZW5jZSA9PSBFWFQyX1NFRUtfQ1VSKQorCQlmaWxlLT5wb3MgKz0gb2Zmc2V0OworCWVsc2UgaWYgKHdoZW5jZSA9PSBFWFQyX1NFRUtfRU5EKQorCQlmaWxlLT5wb3MgPSBFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpICsgb2Zmc2V0OworCWVsc2UKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCWlmIChyZXRfcG9zKQorCQkqcmV0X3BvcyA9IGZpbGUtPnBvczsKKworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZpbGVfbHNlZWsoZXh0Ml9maWxlX3QgZmlsZSwgZXh0Ml9vZmZfdCBvZmZzZXQsCisJCQkgICAgaW50IHdoZW5jZSwgZXh0Ml9vZmZfdCAqcmV0X3BvcykKK3sKKwlfX3U2NAkJbG9mZnNldCwgcmV0X2xvZmZzZXQ7CisJZXJyY29kZV90CXJldHZhbDsKKworCWxvZmZzZXQgPSBvZmZzZXQ7CisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbGxzZWVrKGZpbGUsIGxvZmZzZXQsIHdoZW5jZSwgJnJldF9sb2Zmc2V0KTsKKwlpZiAocmV0X3BvcykKKwkJKnJldF9wb3MgPSAoZXh0Ml9vZmZfdCkgcmV0X2xvZmZzZXQ7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBhY2NvcmRpbmcgdG8gdGhlIGlub2RlCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZmlsZV9nZXRfbHNpemUoZXh0Ml9maWxlX3QgZmlsZSwgX191NjQgKnJldF9zaXplKQoreworCWlmIChmaWxlLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSkKKwkJcmV0dXJuIEVYVDJfRVRfTUFHSUNfRVhUMl9GSUxFOworCSpyZXRfc2l6ZSA9IEVYVDJfSV9TSVpFKCZmaWxlLT5pbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbGUsIGFjY29yZGluZyB0byB0aGUgaW5vZGUKKyAqLworZXh0Ml9vZmZfdCBleHQyZnNfZmlsZV9nZXRfc2l6ZShleHQyX2ZpbGVfdCBmaWxlKQoreworCV9fdTY0CXNpemU7CisKKwlpZiAoZXh0MmZzX2ZpbGVfZ2V0X2xzaXplKGZpbGUsICZzaXplKSkKKwkJcmV0dXJuIDA7CisJaWYgKChzaXplID4+IDMyKSAhPSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogWmVybyB0aGUgcGFydHMgb2YgdGhlIGxhc3QgYmxvY2sgdGhhdCBhcmUgcGFzdCBFT0YuICovCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19maWxlX3plcm9fcGFzdF9vZmZzZXQoZXh0Ml9maWxlX3QgZmlsZSwKKwkJCQkJICAgICAgZXh0Ml9vZmY2NF90IG9mZnNldCkKK3sKKwlleHQyX2ZpbHN5cyBmcyA9IGZpbGUtPmZzOworCWNoYXIgKmIgPSBOVUxMOworCWV4dDJfb2ZmNjRfdCBvZmYgPSBvZmZzZXQgJSBmcy0+YmxvY2tzaXplOworCWJsazY0X3QgYmxrOworCWludCByZXRfZmxhZ3M7CisJZXJyY29kZV90IHJldHZhbDsKKworCWlmIChvZmYgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR2YWwgPSBzeW5jX2J1ZmZlcl9wb3NpdGlvbihmaWxlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogSXMgdGhlcmUgYW4gaW5pdGlhbGl6ZWQgYmxvY2sgYXQgdGhlIGVuZD8gKi8KKwlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGZpbGUtPmlubywgTlVMTCwgTlVMTCwgMCwKKwkJCSAgICAgIG9mZnNldCAvIGZzLT5ibG9ja3NpemUsICZyZXRfZmxhZ3MsICZibGspOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKChibGsgPT0gMCkgfHwgKHJldF9mbGFncyAmIEJNQVBfUkVUX1VOSU5JVCkpCisJCXJldHVybiAwOworCisJLyogWmVybyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZiKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogUmVhZC96ZXJvL3dyaXRlIGJsb2NrICovCisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLCAxLCBiKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCW1lbXNldChiICsgb2ZmLCAwLCBmcy0+YmxvY2tzaXplIC0gb2ZmKTsKKworCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIDEsIGIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCitvdXQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzaXplIG9mIHRoZSBmaWxlLCB0cnVuY2F0aW5nIGl0IGlmIG5lY2Vzc2FyeQorICoKKyAqLworZXJyY29kZV90IGV4dDJmc19maWxlX3NldF9zaXplMihleHQyX2ZpbGVfdCBmaWxlLCBleHQyX29mZjY0X3Qgc2l6ZSkKK3sKKwlleHQyX29mZjY0X3QJb2xkX3NpemU7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlvbGRfdHJ1bmNhdGUsIHRydW5jYXRlX2Jsb2NrOworCisJRVhUMl9DSEVDS19NQUdJQyhmaWxlLCBFWFQyX0VUX01BR0lDX0VYVDJfRklMRSk7CisKKwlpZiAoc2l6ZSAmJiBleHQyZnNfZmlsZV9ibG9ja19vZmZzZXRfdG9vX2JpZyhmaWxlLT5mcywgJmZpbGUtPmlub2RlLAorCQkJCQkoc2l6ZSAtIDEpIC8gZmlsZS0+ZnMtPmJsb2Nrc2l6ZSkpCisJCXJldHVybiBFWFQyX0VUX0ZJTEVfVE9PX0JJRzsKKwl0cnVuY2F0ZV9ibG9jayA9ICgoc2l6ZSArIGZpbGUtPmZzLT5ibG9ja3NpemUgLSAxKSA+PgorCQkJICBFWFQyX0JMT0NLX1NJWkVfQklUUyhmaWxlLT5mcy0+c3VwZXIpKTsKKwlvbGRfc2l6ZSA9IEVYVDJfSV9TSVpFKCZmaWxlLT5pbm9kZSk7CisJb2xkX3RydW5jYXRlID0gKChvbGRfc2l6ZSArIGZpbGUtPmZzLT5ibG9ja3NpemUgLSAxKSA+PgorCQkgICAgICBFWFQyX0JMT0NLX1NJWkVfQklUUyhmaWxlLT5mcy0+c3VwZXIpKTsKKworCS8qIElmIHdlJ3JlIHdyaXRpbmcgYSBsYXJnZSBmaWxlLCBzZXQgdGhlIGxhcmdlX2ZpbGUgZmxhZyAqLworCWlmIChMSU5VWF9TX0lTUkVHKGZpbGUtPmlub2RlLmlfbW9kZSkgJiYKKwkgICAgZXh0MmZzX25lZWRzX2xhcmdlX2ZpbGVfZmVhdHVyZShFWFQyX0lfU0laRSgmZmlsZS0+aW5vZGUpKSAmJgorCSAgICAoIUVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZpbGUtPmZzLT5zdXBlciwKKwkJCQkJIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSkgfHwKKwkgICAgIGZpbGUtPmZzLT5zdXBlci0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpKSB7CisJCWZpbGUtPmZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PQorCQkJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRTsKKwkJZXh0MmZzX3VwZGF0ZV9keW5hbWljX3JldihmaWxlLT5mcyk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZpbGUtPmZzKTsKKwl9CisKKwlmaWxlLT5pbm9kZS5pX3NpemUgPSBzaXplICYgMHhmZmZmZmZmZjsKKwlmaWxlLT5pbm9kZS5pX3NpemVfaGlnaCA9IChzaXplID4+IDMyKTsKKwlpZiAoZmlsZS0+aW5vKSB7CisJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmaWxlLT5mcywgZmlsZS0+aW5vLCAmZmlsZS0+aW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZmlsZV96ZXJvX3Bhc3Rfb2Zmc2V0KGZpbGUsIHNpemUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAodHJ1bmNhdGVfYmxvY2sgPj0gb2xkX3RydW5jYXRlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBleHQyZnNfcHVuY2goZmlsZS0+ZnMsIGZpbGUtPmlubywgJmZpbGUtPmlub2RlLCAwLAorCQkJICAgIHRydW5jYXRlX2Jsb2NrLCB+MFVMTCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZmlsZV9zZXRfc2l6ZShleHQyX2ZpbGVfdCBmaWxlLCBleHQyX29mZl90IHNpemUpCit7CisJcmV0dXJuIGV4dDJmc19maWxlX3NldF9zaXplMihmaWxlLCBzaXplKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2ZpbmRkZXYuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2ZpbmRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGViNWNlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZmluZGRldi5jCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogZmluZGRldi5jIC0tIHRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBmaW5kIGEgcGFydGljdWxhciBkZXZpY2UgaW4KKyAqIAkvZGV2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01LREVWX0gKKyNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKworc3RydWN0IGRpcl9saXN0IHsKKwljaGFyCSpuYW1lOworCXN0cnVjdCBkaXJfbGlzdCAqbmV4dDsKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYW4gZW50cnkgdG8gdGhlIGRpcmVjdG9yeSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGFkZF90b19kaXJsaXN0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGRpcl9saXN0ICpkcDsKKworCWRwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyX2xpc3QpKTsKKwlpZiAoIWRwKQorCQlyZXR1cm47CisJZHAtPm5hbWUgPSBtYWxsb2Moc3RybGVuKG5hbWUpKzEpOworCWlmICghZHAtPm5hbWUpIHsKKwkJZnJlZShkcCk7CisJCXJldHVybjsKKwl9CisJc3RyY3B5KGRwLT5uYW1lLCBuYW1lKTsKKwlkcC0+bmV4dCA9ICpsaXN0OworCSpsaXN0ID0gZHA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGEgZGlyZWN0b3J5IGxpc3QKKyAqLworc3RhdGljIHZvaWQgZnJlZV9kaXJsaXN0KHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGRpcl9saXN0ICpkcCwgKm5leHQ7CisKKwlmb3IgKGRwID0gKmxpc3Q7IGRwOyBkcCA9IG5leHQpIHsKKwkJbmV4dCA9IGRwLT5uZXh0OworCQlmcmVlKGRwLT5uYW1lKTsKKwkJZnJlZShkcCk7CisJfQorCSpsaXN0ID0gMDsKK30KKworc3RhdGljIGludCBzY2FuX2RpcihjaGFyICpkaXJuYW1lLCBkZXZfdCBkZXZpY2UsIHN0cnVjdCBkaXJfbGlzdCAqKmxpc3QsCisJCSAgICBjaGFyICoqcmV0X3BhdGgpCit7CisJRElSCSpkaXI7CisJc3RydWN0IGRpcmVudCAqZHA7CisJY2hhcglwYXRoWzEwMjRdLCAqY3A7CisJaW50CWRpcmxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWRpcmxlbiA9IHN0cmxlbihkaXJuYW1lKTsKKwlpZiAoKGRpciA9IG9wZW5kaXIoZGlybmFtZSkpID09IE5VTEwpCisJCXJldHVybiBlcnJubzsKKwlkcCA9IHJlYWRkaXIoZGlyKTsKKwl3aGlsZSAoZHApIHsKKwkJaWYgKGRpcmxlbiArIHN0cmxlbihkcC0+ZF9uYW1lKSArIDIgPj0gc2l6ZW9mKHBhdGgpKQorCQkJZ290byBza2lwX3RvX25leHQ7CisJCWlmIChkcC0+ZF9uYW1lWzBdID09ICcuJyAmJgorCQkgICAgKChkcC0+ZF9uYW1lWzFdID09IDApIHx8CisJCSAgICAgKChkcC0+ZF9uYW1lWzFdID09ICcuJykgJiYgKGRwLT5kX25hbWVbMl0gPT0gMCkpKSkKKwkJCWdvdG8gc2tpcF90b19uZXh0OworCQlzcHJpbnRmKHBhdGgsICIlcy8lcyIsIGRpcm5hbWUsIGRwLT5kX25hbWUpOworCQlpZiAoc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJCWdvdG8gc2tpcF90b19uZXh0OworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCWFkZF90b19kaXJsaXN0KHBhdGgsIGxpc3QpOworCQlpZiAoU19JU0JMSyhzdC5zdF9tb2RlKSAmJiBzdC5zdF9yZGV2ID09IGRldmljZSkgeworCQkJY3AgPSBtYWxsb2Moc3RybGVuKHBhdGgpKzEpOworCQkJaWYgKCFjcCkgeworCQkJCWNsb3NlZGlyKGRpcik7CisJCQkJcmV0dXJuIEVOT01FTTsKKwkJCX0KKwkJCXN0cmNweShjcCwgcGF0aCk7CisJCQkqcmV0X3BhdGggPSBjcDsKKwkJCWdvdG8gc3VjY2VzczsKKwkJfQorCXNraXBfdG9fbmV4dDoKKwkJZHAgPSByZWFkZGlyKGRpcik7CisJfQorc3VjY2VzczoKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgcGF0aG5hbWUgdG8gYSBibG9jayBkZXZpY2Ugd2l0aCBhIGdpdmVuCisgKiBkZXZpY2UgbnVtYmVyLiAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSB0byB0aGUKKyAqIHBhdGhuYW1lIG9uIHN1Y2Nlc3MsIGFuZCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK2NoYXIgKmV4dDJmc19maW5kX2Jsb2NrX2RldmljZShkZXZfdCBkZXZpY2UpCit7CisJc3RydWN0IGRpcl9saXN0ICpsaXN0ID0gMCwgKm5ld19saXN0ID0gMDsKKwlzdHJ1Y3QgZGlyX2xpc3QgKmN1cnJlbnQ7CisJY2hhcgkqcmV0X3BhdGggPSAwOworCWludCAgICBsZXZlbCA9IDA7CisKKwkvKgorCSAqIEFkZCB0aGUgc3RhcnRpbmcgZGlyZWN0b3JpZXMgdG8gc2VhcmNoLi4uCisJICovCisJYWRkX3RvX2Rpcmxpc3QoIi9kZXZpY2VzIiwgJmxpc3QpOworCWFkZF90b19kaXJsaXN0KCIvZGV2ZnMiLCAmbGlzdCk7CisJYWRkX3RvX2Rpcmxpc3QoIi9kZXYiLCAmbGlzdCk7CisKKwl3aGlsZSAobGlzdCkgeworCQljdXJyZW50ID0gbGlzdDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJTY2FubmluZyBkaXJlY3RvcnkgJXNcbiIsIGN1cnJlbnQtPm5hbWUpOworI2VuZGlmCisJCXNjYW5fZGlyKGN1cnJlbnQtPm5hbWUsIGRldmljZSwgJm5ld19saXN0LCAmcmV0X3BhdGgpOworCQlmcmVlKGN1cnJlbnQtPm5hbWUpOworCQlmcmVlKGN1cnJlbnQpOworCQlpZiAocmV0X3BhdGgpCisJCQlicmVhazsKKwkJLyoKKwkJICogSWYgd2UncmUgZG9uZSBjaGVja2luZyBhdCB0aGlzIGxldmVsLCBkZXNjZW5kIHRvCisJCSAqIHRoZSBuZXh0IGxldmVsIG9mIHN1YmRpcmVjdG9yaWVzLiAoYnJlYWR0aC1maXJzdCkKKwkJICovCisJCWlmIChsaXN0ID09IDApIHsKKwkJCWxpc3QgPSBuZXdfbGlzdDsKKwkJCW5ld19saXN0ID0gMDsKKwkJCS8qIEF2b2lkIGluZmluaXRlIGxvb3AgKi8KKwkJCWlmICgrK2xldmVsID49IEVYVDJGU19NQVhfTkVTVEVEX0xJTktTKQorCQkJCWJyZWFrOworCQl9CisJfQorCWZyZWVfZGlybGlzdCgmbGlzdCk7CisJZnJlZV9kaXJsaXN0KCZuZXdfbGlzdCk7CisJcmV0dXJuIHJldF9wYXRoOworfQorCisKKyNpZmRlZiBERUJVRworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCWNoYXIJKmRldm5hbWUsICp0bXA7CisJaW50CW1ham9yLCBtaW5vcjsKKwlkZXZfdAlkZXZpY2U7CisJY29uc3QgY2hhciAqZXJybXNnID0gIkNvdWxkbid0IHBhcnNlICVzOiAlc1xuIjsKKworCWlmICgoYXJnYyAhPSAyKSAmJiAoYXJnYyAhPSAzKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBkZXZpY2VfbnVtYmVyXG4iLCBhcmd2WzBdKTsKKwkJZnByaW50ZihzdGRlcnIsICJcdDogJXMgbWFqb3IgbWlub3JcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlpZiAoYXJnYyA9PSAyKSB7CisJCWRldmljZSA9IHN0cnRvdWwoYXJndlsxXSwgJnRtcCwgMCk7CisJCWlmICgqdG1wKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgZXJybXNnLCAiZGV2aWNlIG51bWJlciIsIGFyZ3ZbMV0pOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCW1ham9yID0gc3RydG91bChhcmd2WzFdLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXApIHsKKwkJCWZwcmludGYoc3RkZXJyLCBlcnJtc2csICJtYWpvciBudW1iZXIiLCBhcmd2WzFdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJbWlub3IgPSBzdHJ0b3VsKGFyZ3ZbMl0sICZ0bXAsIDApOworCQlpZiAoKnRtcCkgeworCQkJZnByaW50ZihzdGRlcnIsIGVycm1zZywgIm1pbm9yIG51bWJlciIsIGFyZ3ZbMl0pOworCQkJZXhpdCgxKTsKKwkJfQorCQlkZXZpY2UgPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisJCXByaW50ZigiTG9va2luZyBmb3IgZGV2aWNlIDB4JTA0eCAoJWQ6JWQpXG4iLCBkZXZpY2UsCisJCSAgICAgICBtYWpvciwgbWlub3IpOworCX0KKwlkZXZuYW1lID0gZXh0MmZzX2ZpbmRfYmxvY2tfZGV2aWNlKGRldmljZSk7CisJaWYgKGRldm5hbWUpIHsKKwkJcHJpbnRmKCJGb3VuZCBkZXZpY2UhICAlc1xuIiwgZGV2bmFtZSk7CisJCWZyZWUoZGV2bmFtZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJDb3VsZG4ndCBmaW5kIGRldmljZS5cbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9mbHVzaGIuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2ZsdXNoYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDA2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9mbHVzaGIuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogZmx1c2hiLmMgLS0tIEhpZGVzIHN5c3RlbS1kZXBlbmRlbnQgaW5mb3JtYXRpb24gZm9yIGJvdGggc3luY2luZyBhCisgKiAJZGV2aWNlIHRvIGRpc2sgYW5kIHRvIGZsdXNoIGFueSBidWZmZXJzIGZyb20gZGlzayBjYWNoZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CQkvKiBUaGlzIG1heSBkZWZpbmUgQkxLRkxTQlVGICovCisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEZvciBMaW51eCwgZGVmaW5lIEJMS0ZMU0JVRiBhbmQgRkRGTFVTSCBpZiBuZWNlc3NhcnksIHNpbmNlCisgKiBub3QgYWxsIHBvcnRhYmxlIGhlYWRlciBmaWxlIGRvZXMgc28gZm9yIHVzLiAgVGhpcyByZWFsbHkgc2hvdWxkIGJlCisgKiBmaXhlZCBpbiB0aGUgZ2xpYmMgaGVhZGVyIGZpbGVzLiAgKFJlY2VudCBnbGliY3MgYXBwZWFyIHRvIGRlZmluZQorICogQkxLRkxTQlVGIGluIHN5cy9tb3VudC5oLCBidXQgRkRGTFVTSCBzdGlsbCBkb2Vzbid0IHNlZW0gdG8gYmUKKyAqIGRlZmluZWQgYW55d2hlcmUgcG9ydGFibGUuKSAgVW50aWwgdGhlbi4uLi4KKyAqLworI2lmZGVmIF9fbGludXhfXworI2lmbmRlZiBCTEtGTFNCVUYKKyNkZWZpbmUgQkxLRkxTQlVGCV9JTygweDEyLDk3KQkvKiBmbHVzaCBidWZmZXIgY2FjaGUgKi8KKyNlbmRpZgorI2lmbmRlZiBGREZMVVNICisjZGVmaW5lIEZERkxVU0gJCV9JTygyLDB4NGIpCS8qIGZsdXNoIGZsb3BweSBkaXNrICovCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHN5bmMgYSBkZXZpY2UvZmlsZSwgYW5kIG9wdGlvbmFsbHkgYXR0ZW1wdCB0bworICogZmx1c2ggdGhlIGJ1ZmZlciBjYWNoZS4gIFRoZSBsYXR0ZXIgaXMgYmFzaWNhbGx5IG9ubHkgdXNlZnVsIGZvcgorICogc3lzdGVtIGJlbmNobWFya3MgYW5kIGZvciB0b3J0dXJpbmcgc3lzdGVtcyBpbiBidXJuLWluIHRlc3RzLiAgOikKKyAqLworZXJyY29kZV90IGV4dDJmc19zeW5jX2RldmljZShpbnQgZmQsIGludCBmbHVzaGIpCit7CisJLyoKKwkgKiBXZSBhbHdheXMgc3luYyB0aGUgZGV2aWNlIGluIGNhc2Ugd2UncmUgcnVubmluZyBvbiBvbGQKKwkgKiBrZXJuZWxzIGZvciB3aGljaCB3ZSBjYW4gbG9zZSBkYXRhIGlmIHdlIGRvbid0LiAgKFRoZXJlCisJICogc3RpbGwgaXMgYSByYWNlIGNvbmRpdGlvbiBmb3IgdGhvc2Uga2VybmVscywgYnV0IHRoaXMKKwkgKiByZWR1Y2VzIGl0IGdyZWF0bHkuKQorCSAqLworCWlmIChmc3luYyAoZmQpID09IC0xKQorCQlyZXR1cm4gZXJybm87CisKKwlpZiAoZmx1c2hiKSB7CisKKyNpZmRlZiBCTEtGTFNCVUYKKwkJaWYgKGlvY3RsIChmZCwgQkxLRkxTQlVGLCAwKSA9PSAwKQorCQkJcmV0dXJuIDA7CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyN3YXJuaW5nIEJMS0ZMU0JVRiBub3QgZGVmaW5lZAorI2VuZGlmCisjaWZkZWYgRkRGTFVTSAorCQlyZXR1cm4gaW9jdGwoZmQsIEZERkxVU0gsIDApOyAgIC8qIEluIGNhc2UgdGhpcyBpcyBhIGZsb3BweSAqLworI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjd2FybmluZyBGREZMVVNIIG5vdCBkZWZpbmVkCisjZW5kaWYKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9mcmVlZnMuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2ZyZWVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDFlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9mcmVlZnMuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIGZyZWVmcy5jIC0tLSBmcmVlIGFuIGV4dDIgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdGF0aWMgdm9pZCBleHQyZnNfZnJlZV9pbm9kZV9jYWNoZShzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZSAqaWNhY2hlKTsKKwordm9pZCBleHQyZnNfZnJlZShleHQyX2ZpbHN5cyBmcykKK3sKKwlpZiAoIWZzIHx8IChmcy0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKSkKKwkJcmV0dXJuOworCWlmIChmcy0+aW1hZ2VfaW8gIT0gZnMtPmlvKSB7CisJCWlmIChmcy0+aW1hZ2VfaW8pCisJCQlpb19jaGFubmVsX2Nsb3NlKGZzLT5pbWFnZV9pbyk7CisJfQorCWlmIChmcy0+aW8pIHsKKwkJaW9fY2hhbm5lbF9jbG9zZShmcy0+aW8pOworCX0KKwlpZiAoZnMtPmRldmljZV9uYW1lKQorCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5kZXZpY2VfbmFtZSk7CisJaWYgKGZzLT5zdXBlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+c3VwZXIpOworCWlmIChmcy0+b3JpZ19zdXBlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+b3JpZ19zdXBlcik7CisJaWYgKGZzLT5ncm91cF9kZXNjKQorCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5ncm91cF9kZXNjKTsKKwlpZiAoZnMtPmJsb2NrX21hcCkKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGZzLT5ibG9ja19tYXApOworCWlmIChmcy0+aW5vZGVfbWFwKQorCQlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAoZnMtPmlub2RlX21hcCk7CisJaWYgKGZzLT5pbWFnZV9oZWFkZXIpCisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmltYWdlX2hlYWRlcik7CisKKwlpZiAoZnMtPmJhZGJsb2NrcykKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoZnMtPmJhZGJsb2Nrcyk7CisJZnMtPmJhZGJsb2NrcyA9IDA7CisKKwlpZiAoZnMtPmRibGlzdCkKKwkJZXh0MmZzX2ZyZWVfZGJsaXN0KGZzLT5kYmxpc3QpOworCisJaWYgKGZzLT5pY2FjaGUpCisJCWV4dDJmc19mcmVlX2lub2RlX2NhY2hlKGZzLT5pY2FjaGUpOworCisJaWYgKGZzLT5tbXBfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5tbXBfYnVmKTsKKwlpZiAoZnMtPm1tcF9jbXApCisJCWV4dDJmc19mcmVlX21lbSgmZnMtPm1tcF9jbXApOworCisJZnMtPm1hZ2ljID0gMDsKKworCWV4dDJmc19mcmVlX21lbSgmZnMpOworfQorCisvKgorICogRnJlZSB0aGUgaW5vZGUgY2FjaGUgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGV4dDJmc19mcmVlX2lub2RlX2NhY2hlKHN0cnVjdCBleHQyX2lub2RlX2NhY2hlICppY2FjaGUpCit7CisJaWYgKC0taWNhY2hlLT5yZWZjb3VudCkKKwkJcmV0dXJuOworCWlmIChpY2FjaGUtPmJ1ZmZlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpY2FjaGUtPmJ1ZmZlcik7CisJaWYgKGljYWNoZS0+Y2FjaGUpCisJCWV4dDJmc19mcmVlX21lbSgmaWNhY2hlLT5jYWNoZSk7CisJaWNhY2hlLT5idWZmZXJfYmxrID0gMDsKKwlleHQyZnNfZnJlZV9tZW0oJmljYWNoZSk7Cit9CisKKy8qCisgKiBUaGlzIHByb2NlZHVyZSBmcmVlcyBhIGJhZGJsb2NrcyBsaXN0LgorICovCit2b2lkIGV4dDJmc191MzJfbGlzdF9mcmVlKGV4dDJfdTMyX2xpc3QgYmIpCit7CisJaWYgKGJiLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0JBREJMT0NLU19MSVNUKQorCQlyZXR1cm47CisKKwlpZiAoYmItPmxpc3QpCisJCWV4dDJmc19mcmVlX21lbSgmYmItPmxpc3QpOworCWJiLT5saXN0ID0gMDsKKwlleHQyZnNfZnJlZV9tZW0oJmJiKTsKK30KKwordm9pZCBleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShleHQyX2JhZGJsb2Nrc19saXN0IGJiKQoreworCWV4dDJmc191MzJfbGlzdF9mcmVlKChleHQyX3UzMl9saXN0KSBiYik7Cit9CisKKworLyoKKyAqIEZyZWUgYSBkaXJlY3RvcnkgYmxvY2sgbGlzdAorICovCit2b2lkIGV4dDJmc19mcmVlX2RibGlzdChleHQyX2RibGlzdCBkYmxpc3QpCit7CisJaWYgKCFkYmxpc3QgfHwgKGRibGlzdC0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19EQkxJU1QpKQorCQlyZXR1cm47CisKKwlpZiAoZGJsaXN0LT5saXN0KQorCQlleHQyZnNfZnJlZV9tZW0oJmRibGlzdC0+bGlzdCk7CisJZGJsaXN0LT5saXN0ID0gMDsKKwlpZiAoZGJsaXN0LT5mcyAmJiBkYmxpc3QtPmZzLT5kYmxpc3QgPT0gZGJsaXN0KQorCQlkYmxpc3QtPmZzLT5kYmxpc3QgPSAwOworCWRibGlzdC0+bWFnaWMgPSAwOworCWV4dDJmc19mcmVlX21lbSgmZGJsaXN0KTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2VuX2JpdG1hcC5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2VuX2JpdG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MzYyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9nZW5fYml0bWFwLmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCisgKiBnZW5fYml0bWFwLmMgLS0tIEdlbmVyaWMgKDMyLWJpdCkgYml0bWFwIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKK3N0cnVjdCBleHQyZnNfc3RydWN0X2dlbmVyaWNfYml0bWFwIHsKKwllcnJjb2RlX3QJbWFnaWM7CisJZXh0Ml9maWxzeXMgCWZzOworCV9fdTMyCQlzdGFydCwgZW5kOworCV9fdTMyCQlyZWFsX2VuZDsKKwljaGFyCSoJZGVzY3JpcHRpb247CisJY2hhcgkqCWJpdG1hcDsKKwllcnJjb2RlX3QJYmFzZV9lcnJvcl9jb2RlOworCV9fdTMyCQlyZXNlcnZlZFs3XTsKK307CisKKyNkZWZpbmUgRVhUMkZTX0lTXzMyX0JJVE1BUChibWFwKSBcCisJKCgoYm1hcCktPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVApIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVApIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVApKQorCisjZGVmaW5lIEVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkgXAorCSgoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQNjQpIHx8IFwKKwkgKChibWFwKS0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVA2NCkgfHwgXAorCSAoKGJtYXApLT5tYWdpYyA9PSBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUDY0KSkKKworLyoKKyAqIFVzZWQgYnkgcHJldmlvdXNseSBpbmxpbmVkIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvIGV4cG9ydCB0aGlzIGFuZAorICogbm90IGNoYW5nZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlCisgKi8KK3ZvaWQgZXh0MmZzX3dhcm5fYml0bWFwMihleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJICAgIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKyNpZm5kZWYgT01JVF9DT01fRVJSCisJaWYgKGJpdG1hcC0+ZGVzY3JpcHRpb24pCisJCWNvbV9lcnIoMCwgYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUrY29kZSwKKwkJCSIjJWx1IGZvciAlcyIsIGFyZywgYml0bWFwLT5kZXNjcmlwdGlvbik7CisJZWxzZQorCQljb21fZXJyKDAsIGJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlICsgY29kZSwgIiMlbHUiLCBhcmcpOworI2VuZGlmCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgY2hlY2tfbWFnaWMoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlpZiAoIWJpdG1hcCB8fCAhKChiaXRtYXAtPm1hZ2ljID09IEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVApIHx8CisJCQkgKGJpdG1hcC0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVApIHx8CisJCQkgKGJpdG1hcC0+bWFnaWMgPT0gRVhUMl9FVF9NQUdJQ19CTE9DS19CSVRNQVApKSkKKwkJcmV0dXJuIEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVA7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfbWFrZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsIGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgICAgX191MzIgc3RhcnQsIF9fdTMyIGVuZCwgX191MzIgcmVhbF9lbmQsCisJCQkJICAgICBjb25zdCBjaGFyICpkZXNjciwgY2hhciAqaW5pdF9tYXAsCisJCQkJICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKnJldCkKK3sKKwlleHQyZnNfZ2VuZXJpY19iaXRtYXAJYml0bWFwOworCWVycmNvZGVfdAkJcmV0dmFsOworCXNpemVfdAkJCXNpemU7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJmc19zdHJ1Y3RfZ2VuZXJpY19iaXRtYXApLAorCQkJCSZiaXRtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwliaXRtYXAtPm1hZ2ljID0gbWFnaWM7CisJYml0bWFwLT5mcyA9IGZzOworCWJpdG1hcC0+c3RhcnQgPSBzdGFydDsKKwliaXRtYXAtPmVuZCA9IGVuZDsKKwliaXRtYXAtPnJlYWxfZW5kID0gcmVhbF9lbmQ7CisJc3dpdGNoIChtYWdpYykgeworCWNhc2UgRVhUMl9FVF9NQUdJQ19JTk9ERV9CSVRNQVA6CisJCWJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlID0gRVhUMl9FVF9CQURfSU5PREVfTUFSSzsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDoKKwkJYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgPSBFWFQyX0VUX0JBRF9CTE9DS19NQVJLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliaXRtYXAtPmJhc2VfZXJyb3JfY29kZSA9IEVYVDJfRVRfQkFEX0dFTkVSSUNfTUFSSzsKKwl9CisJaWYgKGRlc2NyKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihkZXNjcikrMSwgJmJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlpZiAocmV0dmFsKSB7CisJCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXN0cmNweShiaXRtYXAtPmRlc2NyaXB0aW9uLCBkZXNjcik7CisJfSBlbHNlCisJCWJpdG1hcC0+ZGVzY3JpcHRpb24gPSAwOworCisJc2l6ZSA9IChzaXplX3QpICgoKGJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KSAvIDgpICsgMSk7CisJLyogUm91bmQgdXAgdG8gYWxsb3cgZm9yIHRoZSBCVCB4ODYgaW5zdHJ1Y3Rpb24gKi8KKwlzaXplID0gKHNpemUgKyA3KSAmIH4zOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemUsICZiaXRtYXAtPmJpdG1hcCk7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaWYgKGluaXRfbWFwKQorCQltZW1jcHkoYml0bWFwLT5iaXRtYXAsIGluaXRfbWFwLCBzaXplKTsKKwllbHNlCisJCW1lbXNldChiaXRtYXAtPmJpdG1hcCwgMCwgc2l6ZSk7CisJKnJldCA9IGJpdG1hcDsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19hbGxvY2F0ZV9nZW5lcmljX2JpdG1hcChfX3UzMiBzdGFydCwKKwkJCQkJIF9fdTMyIGVuZCwKKwkJCQkJIF9fdTMyIHJlYWxfZW5kLAorCQkJCQkgY29uc3QgY2hhciAqZGVzY3IsCisJCQkJCSBleHQyZnNfZ2VuZXJpY19iaXRtYXAgKnJldCkKK3sKKwlyZXR1cm4gZXh0MmZzX21ha2VfZ2VuZXJpY19iaXRtYXAoRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwgMCwKKwkJCQkJICBzdGFydCwgZW5kLCByZWFsX2VuZCwgZGVzY3IsIDAsIHJldCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY29weV9nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgc3JjLAorCQkJCSAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpkZXN0KQoreworCXJldHVybiAoZXh0MmZzX21ha2VfZ2VuZXJpY19iaXRtYXAoc3JjLT5tYWdpYywgc3JjLT5mcywKKwkJCQkJICAgc3JjLT5zdGFydCwgc3JjLT5lbmQsCisJCQkJCSAgIHNyYy0+cmVhbF9lbmQsCisJCQkJCSAgIHNyYy0+ZGVzY3JpcHRpb24sIHNyYy0+Yml0bWFwLAorCQkJCQkgICBkZXN0KSk7Cit9CisKK3ZvaWQgZXh0MmZzX2ZyZWVfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2lub2RlX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKGNoZWNrX21hZ2ljKGJpdG1hcCkpCisJCXJldHVybjsKKworCWJpdG1hcC0+bWFnaWMgPSAwOworCWlmIChiaXRtYXAtPmRlc2NyaXB0aW9uKSB7CisJCWV4dDJmc19mcmVlX21lbSgmYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCWJpdG1hcC0+ZGVzY3JpcHRpb24gPSAwOworCX0KKwlpZiAoYml0bWFwLT5iaXRtYXApIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXAtPmJpdG1hcCk7CisJCWJpdG1hcC0+Yml0bWFwID0gMDsKKwl9CisJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXApOworfQorCitpbnQgZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJYmxrX3QgYml0bm8pCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKGJpdG1hcCwgYml0bm8pOworCQl9CisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCQljb21fZXJyKDAsIEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVAsCisJCQkidGVzdF9iaXRtYXAoJWx1KSIsICh1bnNpZ25lZCBsb25nKSBiaXRubyk7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChiaXRubyA8IGJpdG1hcC0+c3RhcnQpIHx8IChiaXRubyA+IGJpdG1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJpdG1hcCwgRVhUMkZTX1RFU1RfRVJST1IsIGJpdG5vKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBleHQyZnNfdGVzdF9iaXQoYml0bm8gLSBiaXRtYXAtPnN0YXJ0LCBiaXRtYXAtPmJpdG1hcCk7Cit9CisKK2ludCBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJCQkgX191MzIgYml0bm8pCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXh0MmZzX21hcmtfZ2VuZXJpY19ibWFwKGJpdG1hcCwgYml0bm8pOworCQl9CisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCQljb21fZXJyKDAsIEVYVDJfRVRfTUFHSUNfR0VORVJJQ19CSVRNQVAsCisJCQkibWFya19iaXRtYXAoJWx1KSIsICh1bnNpZ25lZCBsb25nKSBiaXRubyk7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChiaXRubyA8IGJpdG1hcC0+c3RhcnQpIHx8IChiaXRubyA+IGJpdG1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJpdG1hcCwgRVhUMkZTX01BUktfRVJST1IsIGJpdG5vKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBleHQyZnNfc2V0X2JpdChiaXRubyAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKK30KKworaW50IGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgYmxrX3QgYml0bm8pCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoYml0bWFwLCBiaXRubyk7CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJtYXJrX2JpdG1hcCglbHUpIiwgKHVuc2lnbmVkIGxvbmcpIGJpdG5vKTsKKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGJpdG5vIDwgYml0bWFwLT5zdGFydCkgfHwgKGJpdG5vID4gYml0bWFwLT5lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVU5NQVJLX0VSUk9SLCBiaXRubyk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXh0MmZzX2NsZWFyX2JpdChiaXRubyAtIGJpdG1hcC0+c3RhcnQsIGJpdG1hcC0+Yml0bWFwKTsKK30KKworX191MzIgZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9zdGFydChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWlmICghRVhUMkZTX0lTXzMyX0JJVE1BUChiaXRtYXApKSB7CisJCWlmIChFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDMyKGJpdG1hcCwgX19mdW5jX18pOworCQkJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX3N0YXJ0KGJpdG1hcCk7CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJnZXRfYml0bWFwX3N0YXJ0Iik7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGJpdG1hcC0+c3RhcnQ7Cit9CisKK19fdTMyIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfZW5kKGJpdG1hcCk7CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJnZXRfYml0bWFwX2VuZCIpOworI2VuZGlmCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gYml0bWFwLT5lbmQ7Cit9CisKK3ZvaWQgZXh0MmZzX2NsZWFyX2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKCFFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkgeworCQkJZXh0MmZzX3dhcm5fYml0bWFwMzIoYml0bWFwLCBfX2Z1bmNfXyk7CisJCQlleHQyZnNfY2xlYXJfZ2VuZXJpY19ibWFwKGJpdG1hcCk7CisJCQlyZXR1cm47CisJCX0KKyNpZm5kZWYgT01JVF9DT01fRVJSCisJCWNvbV9lcnIoMCwgRVhUMl9FVF9NQUdJQ19HRU5FUklDX0JJVE1BUCwKKwkJCSJjbGVhcl9nZW5lcmljX2JpdG1hcCIpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoYml0bWFwLT5iaXRtYXAsIDAsCisJICAgICAgIChzaXplX3QpICgoKGJpdG1hcC0+cmVhbF9lbmQgLSBiaXRtYXAtPnN0YXJ0KSAvIDgpICsgMSkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYml0bWFwX2VuZChleHQyZnNfaW5vZGVfYml0bWFwIGJpdG1hcCwKKwkJCQkJICBlcnJjb2RlX3QgbWFnaWMsIGVycmNvZGVfdCBuZXEsCisJCQkJCSAgZXh0Ml9pbm9fdCBlbmQsIGV4dDJfaW5vX3QgKm9lbmQpCit7CisJRVhUMl9DSEVDS19NQUdJQyhiaXRtYXAsIG1hZ2ljKTsKKworCWlmIChlbmQgPiBiaXRtYXAtPnJlYWxfZW5kKQorCQlyZXR1cm4gbmVxOworCWlmIChvZW5kKQorCQkqb2VuZCA9IGJpdG1hcC0+ZW5kOworCWJpdG1hcC0+ZW5kID0gZW5kOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcChlcnJjb2RlX3QgbWFnaWMsCisJCQkJICAgICAgIF9fdTMyIG5ld19lbmQsIF9fdTMyIG5ld19yZWFsX2VuZCwKKwkJCQkgICAgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzaXplX3QJCXNpemUsIG5ld19zaXplOworCV9fdTMyCQliaXRubzsKKworCWlmICghYm1hcCB8fCAoYm1hcC0+bWFnaWMgIT0gbWFnaWMpKQorCQlyZXR1cm4gbWFnaWM7CisKKwkvKgorCSAqIElmIHdlJ3JlIGV4cGFuZGluZyB0aGUgYml0bWFwLCBtYWtlIHN1cmUgYWxsIG9mIHRoZSBuZXcKKwkgKiBwYXJ0cyBvZiB0aGUgYml0bWFwIGFyZSB6ZXJvLgorCSAqLworCWlmIChuZXdfZW5kID4gYm1hcC0+ZW5kKSB7CisJCWJpdG5vID0gYm1hcC0+cmVhbF9lbmQ7CisJCWlmIChiaXRubyA+IG5ld19lbmQpCisJCQliaXRubyA9IG5ld19lbmQ7CisJCWZvciAoOyBiaXRubyA+IGJtYXAtPmVuZDsgYml0bm8tLSkKKwkJCWV4dDJmc19jbGVhcl9iaXQoYml0bm8gLSBibWFwLT5zdGFydCwgYm1hcC0+Yml0bWFwKTsKKwl9CisJaWYgKG5ld19yZWFsX2VuZCA9PSBibWFwLT5yZWFsX2VuZCkgeworCQlibWFwLT5lbmQgPSBuZXdfZW5kOworCQlyZXR1cm4gMDsKKwl9CisKKwlzaXplID0gKChibWFwLT5yZWFsX2VuZCAtIGJtYXAtPnN0YXJ0KSAvIDgpICsgMTsKKwluZXdfc2l6ZSA9ICgobmV3X3JlYWxfZW5kIC0gYm1hcC0+c3RhcnQpIC8gOCkgKyAxOworCisJaWYgKHNpemUgIT0gbmV3X3NpemUpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0oc2l6ZSwgbmV3X3NpemUsICZibWFwLT5iaXRtYXApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKG5ld19zaXplID4gc2l6ZSkKKwkJbWVtc2V0KGJtYXAtPmJpdG1hcCArIHNpemUsIDAsIG5ld19zaXplIC0gc2l6ZSk7CisKKwlibWFwLT5lbmQgPSBuZXdfZW5kOworCWJtYXAtPnJlYWxfZW5kID0gbmV3X3JlYWxfZW5kOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19iaXRtYXAoZXJyY29kZV90IG1hZ2ljLCBlcnJjb2RlX3QgbmVxLAorCQkJCQlleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0xLAorCQkJCQlleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0yKQoreworCWJsa190CWk7CisKKwlpZiAoIWJtMSB8fCBibTEtPm1hZ2ljICE9IG1hZ2ljKQorCQlyZXR1cm4gbWFnaWM7CisJaWYgKCFibTIgfHwgYm0yLT5tYWdpYyAhPSBtYWdpYykKKwkJcmV0dXJuIG1hZ2ljOworCisJaWYgKChibTEtPnN0YXJ0ICE9IGJtMi0+c3RhcnQpIHx8CisJICAgIChibTEtPmVuZCAhPSBibTItPmVuZCkgfHwKKwkgICAgKG1lbWNtcChibTEtPmJpdG1hcCwgYm0yLT5iaXRtYXAsCisJCSAgICAoc2l6ZV90KSAoYm0xLT5lbmQgLSBibTEtPnN0YXJ0KS84KSkpCisJCXJldHVybiBuZXE7CisKKwlmb3IgKGkgPSBibTEtPmVuZCAtICgoYm0xLT5lbmQgLSBibTEtPnN0YXJ0KSAlIDgpOyBpIDw9IGJtMS0+ZW5kOyBpKyspCisJCWlmIChleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcChibTEsIGkpICE9CisJCSAgICBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcChibTIsIGkpKQorCQkJcmV0dXJuIG5lcTsKKworCXJldHVybiAwOworfQorCit2b2lkIGV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcGFkZGluZyhleHQyZnNfZ2VuZXJpY19iaXRtYXAgbWFwKQoreworCV9fdTMyCWksIGo7CisKKwkvKiBQcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBtYXAtPnJlYWxfZW5kIGlzIG1heGVkICovCisJZm9yIChpPW1hcC0+ZW5kKzEsIGogPSBpIC0gbWFwLT5zdGFydDsKKwkgICAgIGkgPD0gbWFwLT5yZWFsX2VuZCAmJiBpID4gbWFwLT5lbmQ7CisJICAgICBpKyssIGorKykKKwkJZXh0MmZzX3NldF9iaXQoaiwgbWFwLT5iaXRtYXApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9nZW5lcmljX2JpdG1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJICBlcnJjb2RlX3QgbWFnaWMsCisJCQkJCSAgX191MzIgc3RhcnQsIF9fdTMyIG51bSwKKwkJCQkJICB2b2lkICpvdXQpCit7CisJaWYgKCFibWFwIHx8IChibWFwLT5tYWdpYyAhPSBtYWdpYykpCisJCXJldHVybiBtYWdpYzsKKworCWlmICgoc3RhcnQgPCBibWFwLT5zdGFydCkgfHwgKHN0YXJ0K251bS0xID4gYm1hcC0+cmVhbF9lbmQpKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJbWVtY3B5KG91dCwgYm1hcC0+Yml0bWFwICsgKHN0YXJ0ID4+IDMpLCAobnVtKzcpID4+IDMpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJICBlcnJjb2RlX3QgbWFnaWMsCisJCQkJCSAgX191MzIgc3RhcnQsIF9fdTMyIG51bSwKKwkJCQkJICB2b2lkICppbikKK3sKKwlpZiAoIWJtYXAgfHwgKGJtYXAtPm1hZ2ljICE9IG1hZ2ljKSkKKwkJcmV0dXJuIG1hZ2ljOworCisJaWYgKChzdGFydCA8IGJtYXAtPnN0YXJ0KSB8fCAoc3RhcnQrbnVtLTEgPiBibWFwLT5yZWFsX2VuZCkpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwltZW1jcHkoYm1hcC0+Yml0bWFwICsgKHN0YXJ0ID4+IDMpLCBpbiwgKG51bSs3KSA+PiAzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBhcmUgQG1lbSB0byB6ZXJvIGJ1ZmZlciBieSAyNTYgYnl0ZXMuCisgKiBSZXR1cm4gMSBpZiBAbWVtIGlzIHplcm9lZCBtZW1vcnksIG90aGVyd2lzZSByZXR1cm4gMC4KKyAqLworaW50IGV4dDJmc19tZW1faXNfemVybyhjb25zdCBjaGFyICptZW0sIHNpemVfdCBsZW4pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgemVyb19idWZbMjU2XTsKKworCXdoaWxlIChsZW4gPj0gc2l6ZW9mKHplcm9fYnVmKSkgeworCQlpZiAobWVtY21wKG1lbSwgemVyb19idWYsIHNpemVvZih6ZXJvX2J1ZikpKQorCQkJcmV0dXJuIDA7CisJCWxlbiAtPSBzaXplb2YoemVyb19idWYpOworCQltZW0gKz0gc2l6ZW9mKHplcm9fYnVmKTsKKwl9CisJLyogRGVhbCB3aXRoIGxlZnRvdmVyIGJ5dGVzLiAqLworCWlmIChsZW4pCisJCXJldHVybiAhbWVtY21wKG1lbSwgemVyb19idWYsIGxlbik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBhbGwgb2YgdGhlIGJpdHMgaW4gYSBzcGVjaWZpZWQgcmFuZ2UgYXJlIGNsZWFyCisgKi8KK3N0YXRpYyBpbnQgZXh0MmZzX3Rlc3RfY2xlYXJfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJCSAgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXNpemVfdCBzdGFydF9ieXRlLCBsZW5fYnl0ZSA9IGxlbiA+PiAzOworCXVuc2lnbmVkIGludCBzdGFydF9iaXQsIGxlbl9iaXQgPSBsZW4gJSA4OworCWludCBmaXJzdF9iaXQgPSAwOworCWludCBsYXN0X2JpdCAgPSAwOworCWludCBtYXJrX2NvdW50ID0gMDsKKwlpbnQgbWFya19iaXQgPSAwOworCWludCBpOworCWNvbnN0IGNoYXIgKkFERFIgPSBiaXRtYXAtPmJpdG1hcDsKKworCXN0YXJ0IC09IGJpdG1hcC0+c3RhcnQ7CisJc3RhcnRfYnl0ZSA9IHN0YXJ0ID4+IDM7CisJc3RhcnRfYml0ID0gc3RhcnQgJSA4OworCisJaWYgKHN0YXJ0X2JpdCAhPSAwKSB7CisJCS8qCisJCSAqIFRoZSBjb21wYXJlZCBzdGFydCBibG9jayBudW1iZXIgb3Igc3RhcnQgaW5vZGUgbnVtYmVyCisJCSAqIGlzIG5vdCB0aGUgZmlyc3QgYml0IGluIGEgYnl0ZS4KKwkJICovCisJCW1hcmtfY291bnQgPSA4IC0gc3RhcnRfYml0OworCQlpZiAobGVuIDwgOCAtIHN0YXJ0X2JpdCkgeworCQkJbWFya19jb3VudCA9IChpbnQpbGVuOworCQkJbWFya19iaXQgPSBsZW4gKyBzdGFydF9iaXQgLSAxOworCQl9IGVsc2UKKwkJCW1hcmtfYml0ID0gNzsKKworCQlmb3IgKGkgPSBtYXJrX2NvdW50OyBpID4gMDsgaS0tLCBtYXJrX2JpdC0tKQorCQkJZmlyc3RfYml0IHw9IDEgPDwgbWFya19iaXQ7CisKKwkJLyoKKwkJICogQ29tcGFyZSBibG9ja3Mgb3IgaW5vZGVzIGluIHRoZSBmaXJzdCBieXRlLgorCQkgKiBJZiB0aGVyZSBpcyBhbnkgbWFya2VkIGJpdCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCisJCSAqLworCQlpZiAoZmlyc3RfYml0ICYgQUREUltzdGFydF9ieXRlXSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChsZW4gPD0gOCAtIHN0YXJ0X2JpdCkKKwkJCXJldHVybiAxOworCisJCXN0YXJ0X2J5dGUrKzsKKwkJbGVuX2JpdCA9IChsZW4gLSBtYXJrX2NvdW50KSAlIDg7CisJCWxlbl9ieXRlID0gKGxlbiAtIG1hcmtfY291bnQpID4+IDM7CisJfQorCisJLyoKKwkgKiBUaGUgY29tcGFyZWQgc3RhcnQgYmxvY2sgbnVtYmVyIG9yIHN0YXJ0IGlub2RlIG51bWJlciBpcworCSAqIHRoZSBmaXJzdCBiaXQgaW4gYSBieXRlLgorCSAqLworCWlmIChsZW5fYml0ICE9IDApIHsKKwkJLyoKKwkJICogVGhlIGNvbXBhcmVkIGVuZCBibG9jayBudW1iZXIgb3IgZW5kIGlub2RlIG51bWJlciBpcworCQkgKiBub3QgdGhlIGxhc3QgYml0IGluIGEgYnl0ZS4KKwkJICovCisJCWZvciAobWFya19iaXQgPSBsZW5fYml0IC0gMTsgbWFya19iaXQgPj0gMDsgbWFya19iaXQtLSkKKwkJCWxhc3RfYml0IHw9IDEgPDwgbWFya19iaXQ7CisKKwkJLyoKKwkJICogQ29tcGFyZSBibG9ja3Mgb3IgaW5vZGVzIGluIHRoZSBsYXN0IGJ5dGUuCisJCSAqIElmIHRoZXJlIGlzIGFueSBtYXJrZWQgYml0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMC4KKwkJICovCisJCWlmIChsYXN0X2JpdCAmIEFERFJbc3RhcnRfYnl0ZSArIGxlbl9ieXRlXSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChsZW5fYnl0ZSA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBhbGwgYnl0ZXMgYXJlIDAgKi8KKwlyZXR1cm4gZXh0MmZzX21lbV9pc196ZXJvKEFERFIgKyBzdGFydF9ieXRlLCBsZW5fYnl0ZSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYml0bWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsCisJCQkJCQlfX3UzMiBzdGFydCwgX191MzIgZW5kLAorCQkJCQkJX191MzIgKm91dCkKK3sKKwlibGtfdCBiOworCisJaWYgKHN0YXJ0IDwgYml0bWFwLT5zdGFydCB8fCBlbmQgPiBiaXRtYXAtPmVuZCB8fCBzdGFydCA+IGVuZCkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJpdG1hcCwgRVhUMkZTX1RFU1RfRVJST1IsIHN0YXJ0KTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwl3aGlsZSAoc3RhcnQgPD0gZW5kKSB7CisJCWIgPSBleHQyZnNfdGVzdF9iaXQoc3RhcnQgLSBiaXRtYXAtPnN0YXJ0LCBiaXRtYXAtPmJpdG1hcCk7CisJCWlmICghYikgeworCQkJKm91dCA9IHN0YXJ0OworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3RhcnQrKzsKKwl9CisKKwlyZXR1cm4gRU5PRU5UOworfQorCisKK2ludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgYmxrX3QgYmxvY2ssIGludCBudW0pCit7CisJRVhUMl9DSEVDS19NQUdJQyhiaXRtYXAsIEVYVDJfRVRfTUFHSUNfQkxPQ0tfQklUTUFQKTsKKwlpZiAoKGJsb2NrIDwgYml0bWFwLT5zdGFydCkgfHwgKGJsb2NrK251bS0xID4gYml0bWFwLT5yZWFsX2VuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0JMT0NLX1RFU1QsCisJCQkJICAgYmxvY2ssIGJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGV4dDJmc190ZXN0X2NsZWFyX2dlbmVyaWNfYml0bWFwX3JhbmdlKChleHQyZnNfZ2VuZXJpY19iaXRtYXApCisJCQkJCQkgICAgICBiaXRtYXAsIGJsb2NrLCBudW0pOworfQorCitpbnQgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwX3JhbmdlKGV4dDJmc19pbm9kZV9iaXRtYXAgYml0bWFwLAorCQkJCSAgIGlub190IGlub2RlLCBpbnQgbnVtKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoYml0bWFwLCBFWFQyX0VUX01BR0lDX0lOT0RFX0JJVE1BUCk7CisJaWYgKChpbm9kZSA8IGJpdG1hcC0+c3RhcnQpIHx8IChpbm9kZStudW0tMSA+IGJpdG1hcC0+cmVhbF9lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcChFWFQyX0VUX0JBRF9JTk9ERV9URVNULAorCQkJCSAgIGlub2RlLCBiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBleHQyZnNfdGVzdF9jbGVhcl9nZW5lcmljX2JpdG1hcF9yYW5nZSgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKQorCQkJCQkJICAgICAgYml0bWFwLCBpbm9kZSwgbnVtKTsKK30KKwordm9pZCBleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJICAgIGJsa190IGJsb2NrLCBpbnQgbnVtKQoreworCWludAlpOworCisJaWYgKChibG9jayA8IGJpdG1hcC0+c3RhcnQpIHx8IChibG9jaytudW0tMSA+IGJpdG1hcC0+ZW5kKSkgeworCQlleHQyZnNfd2Fybl9iaXRtYXAoRVhUMl9FVF9CQURfQkxPQ0tfTUFSSywgYmxvY2ssCisJCQkJICAgYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCXJldHVybjsKKwl9CisJZm9yIChpPTA7IGkgPCBudW07IGkrKykKKwkJZXh0MmZzX2Zhc3Rfc2V0X2JpdChibG9jayArIGkgLSBiaXRtYXAtPnN0YXJ0LCBiaXRtYXAtPmJpdG1hcCk7Cit9CisKK3ZvaWQgZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UoZXh0MmZzX2Jsb2NrX2JpdG1hcCBiaXRtYXAsCisJCQkJCSAgICAgICBibGtfdCBibG9jaywgaW50IG51bSkKK3sKKwlpbnQJaTsKKworCWlmICgoYmxvY2sgPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYmxvY2srbnVtLTEgPiBiaXRtYXAtPmVuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0JMT0NLX1VOTUFSSywgYmxvY2ssCisJCQkJICAgYml0bWFwLT5kZXNjcmlwdGlvbik7CisJCXJldHVybjsKKwl9CisJZm9yIChpPTA7IGkgPCBudW07IGkrKykKKwkJZXh0MmZzX2Zhc3RfY2xlYXJfYml0KGJsb2NrICsgaSAtIGJpdG1hcC0+c3RhcnQsCisJCQkJICAgICAgYml0bWFwLT5iaXRtYXApOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9nZW5fYml0bWFwNjQuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2dlbl9iaXRtYXA2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDlmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9nZW5fYml0bWFwNjQuYwpAQCAtMCwwICsxLDg0OSBAQAorLyoKKyAqIGdlbl9iaXRtYXA2NC5jIC0tLSByb3V0aW5lcyB0byByZWFkLCB3cml0ZSwgYW5kIG1hbmlwdWxhdGUgdGhlIG5ldyBxaW5vZGUgYW5kCisgKiBibG9jayBiaXRtYXBzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmc1AuaCIKKyNpbmNsdWRlICJibWFwNjQuaCIKKworLyoKKyAqIERlc2lnbiBvZiA2NC1iaXQgYml0bWFwcworICoKKyAqIEluIG9yZGVyIG1haW50YWluIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggcHJvZ3JhbXMgdGhhdCBkb24ndAorICogdW5kZXJzdGFuZCBhYm91dCA2NC1iaXQgYmxvY2tzL2lub2RlcywKKyAqIGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoKSBhbmQgZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcCgpCisgKiB3aWxsIGNyZWF0ZSBvbGQtc3R5bGUgYml0bWFwcyB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIHBhc3NlcyB0aGUKKyAqIGZsYWcgRVhUMl9GTEFHXzY0QklUUyB0byBleHQyZnNfb3BlbigpLiAgSWYgdGhpcyBmbGFnIGlzCisgKiBwYXNzZWQsIHRoZW4gd2Uga25vdyB0aGUgYXBwbGljYXRpb24gaGFzIGJlZW4gcmVjb21waWxlZCwgc28gd2UgY2FuCisgKiB1c2UgdGhlIG5ldy1zdHlsZSBiaXRtYXBzLiAgSWYgaXQgaXMgbm90IHBhc3NlZCwgd2UgaGF2ZSB0byByZXR1cm4KKyAqIGFuIGVycm9yIGlmIHRyeWluZyB0byBvcGVuIGEgZmlsZXN5c3RlbSB3aGljaCBuZWVkcyA2NC1iaXQgYml0bWFwcy4KKyAqCisgKiBUaGUgbmV3IGJpdG1hcHMgdXNlIGEgbmV3IHNldCBvZiBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycywgc28gdGhhdAorICogYm90aCB0aGUgb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgaW50ZXJmYWNlcyBjYW4gaWRlbnRpZnkgd2hpY2gKKyAqIHZlcnNpb24gb2YgdGhlIGRhdGEgc3RydWN0dXJlIHdhcyB1c2VkLiAgQm90aCB0aGUgb2xkLXN0eWxlIGFuZAorICogbmV3LXN0eWxlIGludGVyZmFjZXMgd2lsbCBzdXBwb3J0IGVpdGhlciB0eXBlIG9mIGJpdG1hcCwgYWx0aG91Z2gKKyAqIG9mIGNvdXJzZSA2NC1iaXQgb3BlcmF0aW9uIHdpbGwgb25seSBiZSBwb3NzaWJsZSB3aGVuIGJvdGggdGhlCisgKiBuZXctc3R5bGUgaW50ZXJmYWNlIGFuZCB0aGUgbmV3LXN0eWxlIGJpdG1hcCBhcmUgdXNlZC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdGhlIG5ldyBiaXRtYXAgaW50ZXJmYWNlcyB3aWxsIGNoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAqIG1hZ2ljIG51bWJlcnMgYW5kIHNvIHdpbGwgYmUgYWJsZSB0byBkZXRlY3Qgb2xkLXN0eXBlIGJpdG1hcC4gIElmCisgKiB0aGV5IHNlZSBhbiBvbGQtc3R5bGUgYml0bWFwLCB0aGV5IHdpbGwgcGFzcyBpdCB0byB0aGUgZ2VuX2JpdG1hcC5jCisgKiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nLiAgVGhlIHNhbWUgd2lsbCBiZSB0cnVlIGZvciB0aGUgb2xkCisgKiBpbnRlcmZhY2VzIGFzIHdlbGwuCisgKgorICogVGhlIG5ldy1zdHlsZSBpbnRlcmZhY2VzIHdpbGwgaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCBiYWNrLWVuZAorICogaW1wbGVtZW50YXRpb25zLCBzbyB3ZSBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgZW5jb2RpbmdzIHRoYXQgYXJlCisgKiBhcHByb3ByaWF0ZSBmb3IgZGlmZmVyZW50IGFwcGxpY2F0aW9ucy4gIEluIGdlbmVyYWwgdGhlIGRlZmF1bHQKKyAqIHNob3VsZCBiZSB3aGF0ZXZlciBtYWtlcyBzZW5zZSwgYW5kIHdoYXQgdGhlIGFwcGxpY2F0aW9uL2xpYnJhcnkKKyAqIHdpbGwgdXNlLiAgSG93ZXZlciwgZTJmc2NrIG1heSBuZWVkIHNwZWNpYWxpemVkIGltcGxlbWVudGF0aW9ucyBmb3IKKyAqIGl0cyBvd24gdXNlcy4gIEZvciBleGFtcGxlLCB3aGVuIGRvaW5nIHBhcmVudCBkaXJlY3RvcnkgcG9pbnRlcgorICogbG9vcCBkZXRlY3Rpb25zIGluIHBhc3MgMywgdGhlIGJpdG1hcCB3aWxsICphbHdheXMqIGJlIHNwYXJzZSwgc28KKyAqIGUyZnNjayBjYW4gcmVxdWVzdCBhbiBlbmNvZGluZyB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIHRoYXQuCisgKi8KKworc3RhdGljIHZvaWQgd2Fybl9iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCWludCBjb2RlLCBfX3U2NCBhcmcpCit7CisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCWlmIChiaXRtYXAtPmRlc2NyaXB0aW9uKQorCQljb21fZXJyKDAsIGJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlK2NvZGUsCisJCQkiIyVsbHUgZm9yICVzIiwgYXJnLCBiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwllbHNlCisJCWNvbV9lcnIoMCwgYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgKyBjb2RlLCAiIyVsbHUiLCBhcmcpOworI2VuZGlmCit9CisKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworI2RlZmluZSBJTkNfU1RBVChtYXAsIG5hbWUpIG1hcC0+c3RhdHMubmFtZQorI2Vsc2UKKyNkZWZpbmUgSU5DX1NUQVQobWFwLCBuYW1lKSA7OworI2VuZGlmCisKKworZXJyY29kZV90IGV4dDJmc19hbGxvY19nZW5lcmljX2JtYXAoZXh0Ml9maWxzeXMgZnMsIGVycmNvZGVfdCBtYWdpYywKKwkJCQkgICAgaW50IHR5cGUsIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQsCisJCQkJICAgIF9fdTY0IHJlYWxfZW5kLAorCQkJCSAgICBjb25zdCBjaGFyICpkZXNjciwKKwkJCQkgICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpyZXQpCit7CisJZXh0MmZzX2dlbmVyaWNfYml0bWFwCWJpdG1hcDsKKwlzdHJ1Y3QgZXh0Ml9iaXRtYXBfb3BzCSpvcHM7CisJZXh0Ml9pbm9fdCBudW1fZGlyczsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJaWYgKCF0eXBlKQorCQl0eXBlID0gRVhUMkZTX0JNQVA2NF9CSVRBUlJBWTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRVhUMkZTX0JNQVA2NF9CSVRBUlJBWToKKwkJb3BzID0gJmV4dDJmc19ibGttYXA2NF9iaXRhcnJheTsKKwkJYnJlYWs7CisJY2FzZSBFWFQyRlNfQk1BUDY0X1JCVFJFRToKKwkJb3BzID0gJmV4dDJmc19ibGttYXA2NF9yYnRyZWU7CisJCWJyZWFrOworCWNhc2UgRVhUMkZTX0JNQVA2NF9BVVRPRElSOgorCQlyZXR2YWwgPSBleHQyZnNfZ2V0X251bV9kaXJzKGZzLCAmbnVtX2RpcnMpOworCQlpZiAocmV0dmFsIHx8IG51bV9kaXJzID4gKGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgLyAzMjApKQorCQkJb3BzID0gJmV4dDJmc19ibGttYXA2NF9iaXRhcnJheTsKKwkJZWxzZQorCQkJb3BzID0gJmV4dDJmc19ibGttYXA2NF9yYnRyZWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFSU5WQUw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKHNpemVvZihzdHJ1Y3QgZXh0MmZzX3N0cnVjdF9nZW5lcmljX2JpdG1hcCksCisJCQkJICAgICZiaXRtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKyNpZmRlZiBCTUFQX1NUQVRTCisJaWYgKGdldHRpbWVvZmRheSgmYml0bWFwLT5zdGF0cy5jcmVhdGVkLAorCQkJIChzdHJ1Y3QgdGltZXpvbmUgKikgTlVMTCkgPT0gLTEpIHsKKwkJcGVycm9yKCJnZXR0aW1lb2ZkYXkiKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXApOworCQlyZXR1cm4gMTsKKwl9CisJYml0bWFwLT5zdGF0cy50eXBlID0gdHlwZTsKKyNlbmRpZgorCisJLyogWFhYIGZhY3RvciBvdXQsIHJlcGVhdGVkIGluIGNvcHlfYm1hcCAqLworCWJpdG1hcC0+bWFnaWMgPSBtYWdpYzsKKwliaXRtYXAtPmZzID0gZnM7CisJYml0bWFwLT5zdGFydCA9IHN0YXJ0OworCWJpdG1hcC0+ZW5kID0gZW5kOworCWJpdG1hcC0+cmVhbF9lbmQgPSByZWFsX2VuZDsKKwliaXRtYXAtPmJpdG1hcF9vcHMgPSBvcHM7CisJYml0bWFwLT5jbHVzdGVyX2JpdHMgPSAwOworCXN3aXRjaCAobWFnaWMpIHsKKwljYXNlIEVYVDJfRVRfTUFHSUNfSU5PREVfQklUTUFQNjQ6CisJCWJpdG1hcC0+YmFzZV9lcnJvcl9jb2RlID0gRVhUMl9FVF9CQURfSU5PREVfTUFSSzsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0VUX01BR0lDX0JMT0NLX0JJVE1BUDY0OgorCQliaXRtYXAtPmJhc2VfZXJyb3JfY29kZSA9IEVYVDJfRVRfQkFEX0JMT0NLX01BUks7CisJCWJpdG1hcC0+Y2x1c3Rlcl9iaXRzID0gZnMtPmNsdXN0ZXJfcmF0aW9fYml0czsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYml0bWFwLT5iYXNlX2Vycm9yX2NvZGUgPSBFWFQyX0VUX0JBRF9HRU5FUklDX01BUks7CisJfQorCWlmIChkZXNjcikgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4oZGVzY3IpKzEsICZiaXRtYXAtPmRlc2NyaXB0aW9uKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZXh0MmZzX2ZyZWVfbWVtKCZiaXRtYXApOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlzdHJjcHkoYml0bWFwLT5kZXNjcmlwdGlvbiwgZGVzY3IpOworCX0gZWxzZQorCQliaXRtYXAtPmRlc2NyaXB0aW9uID0gMDsKKworCXJldHZhbCA9IGJpdG1hcC0+Yml0bWFwX29wcy0+bmV3X2JtYXAoZnMsIGJpdG1hcCk7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcC0+ZGVzY3JpcHRpb24pOworCQlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJKnJldCA9IGJpdG1hcDsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJNQVBfU1RBVFMKK3N0YXRpYyB2b2lkIGV4dDJmc19wcmludF9ibWFwX3N0YXRpc3RpY3MoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXh0Ml9ibWFwX3N0YXRpc3RpY3MgKnN0YXRzID0gJmJpdG1hcC0+c3RhdHM7CisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwlmbG9hdCBtYXJrX3NlcV9wZXJjID0gMC4wLCB0ZXN0X3NlcV9wZXJjID0gMC4wOworCWZsb2F0IG1hcmtfYmFja19wZXJjID0gMC4wLCB0ZXN0X2JhY2tfcGVyYyA9IDAuMDsKKyNlbmRpZgorCWRvdWJsZSBpbnVzZTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCWlmIChzdGF0cy0+dGVzdF9jb3VudCkgeworCQl0ZXN0X3NlcV9wZXJjID0gKChmbG9hdClzdGF0cy0+dGVzdF9zZXEgLworCQkJCSBzdGF0cy0+dGVzdF9jb3VudCkgKiAxMDA7CisJCXRlc3RfYmFja19wZXJjID0gKChmbG9hdClzdGF0cy0+dGVzdF9iYWNrIC8KKwkJCQkgIHN0YXRzLT50ZXN0X2NvdW50KSAqIDEwMDsKKwl9CisKKwlpZiAoc3RhdHMtPm1hcmtfY291bnQpIHsKKwkJbWFya19zZXFfcGVyYyA9ICgoZmxvYXQpc3RhdHMtPm1hcmtfc2VxIC8KKwkJCQkgc3RhdHMtPm1hcmtfY291bnQpICogMTAwOworCQltYXJrX2JhY2tfcGVyYyA9ICgoZmxvYXQpc3RhdHMtPm1hcmtfYmFjayAvCisJCQkJICBzdGF0cy0+bWFya19jb3VudCkgKiAxMDA7CisJfQorI2VuZGlmCisKKwlpZiAoZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgTlVMTCkgPT0gLTEpIHsKKwkJcGVycm9yKCJnZXR0aW1lb2ZkYXkiKTsKKwkJcmV0dXJuOworCX0KKworCWludXNlID0gKGRvdWJsZSkgbm93LnR2X3NlYyArIFwKKwkJKCgoZG91YmxlKSBub3cudHZfdXNlYykgKiAwLjAwMDAwMSk7CisJaW51c2UgLT0gKGRvdWJsZSkgc3RhdHMtPmNyZWF0ZWQudHZfc2VjICsgXAorCQkoKChkb3VibGUpIHN0YXRzLT5jcmVhdGVkLnR2X3VzZWMpICogMC4wMDAwMDEpOworCisJZnByaW50ZihzdGRlcnIsICJcblsrXSAlcyBiaXRtYXAgKHR5cGUgJWQpXG4iLCBiaXRtYXAtPmRlc2NyaXB0aW9uLAorCQlzdGF0cy0+dHlwZSk7CisJZnByaW50ZihzdGRlcnIsICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyNpZmRlZiBCTUFQX1NUQVRTX09QUworCWZwcmludGYoc3RkZXJyLCAiJTE2bGx1IGJpdHMgbG9uZ1xuIiwKKwkJYml0bWFwLT5yZWFsX2VuZCAtIGJpdG1hcC0+c3RhcnQpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgY29weV9ibWFwXG4lMTZsdSByZXNpemVfYm1hcFxuIiwKKwkJc3RhdHMtPmNvcHlfY291bnQsIHN0YXRzLT5yZXNpemVfY291bnQpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgbWFyayBibWFwXG4lMTZsdSB1bm1hcmtfYm1hcFxuIiwKKwkJc3RhdHMtPm1hcmtfY291bnQsIHN0YXRzLT51bm1hcmtfY291bnQpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgdGVzdF9ibWFwXG4lMTZsdSBtYXJrX2JtYXBfZXh0ZW50XG4iLAorCQlzdGF0cy0+dGVzdF9jb3VudCwgc3RhdHMtPm1hcmtfZXh0X2NvdW50KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiUxNmx1IHVubWFya19ibWFwX2V4dGVudFxuIgorCQkiJTE2bHUgdGVzdF9jbGVhcl9ibWFwX2V4dGVudFxuIiwKKwkJc3RhdHMtPnVubWFya19leHRfY291bnQsIHN0YXRzLT50ZXN0X2V4dF9jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsdSBzZXRfYm1hcF9yYW5nZVxuJTE2bHUgc2V0X2JtYXBfcmFuZ2VcbiIsCisJCXN0YXRzLT5zZXRfcmFuZ2VfY291bnQsIHN0YXRzLT5nZXRfcmFuZ2VfY291bnQpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgY2xlYXJfYm1hcFxuJTE2bHUgY29udGlndW91cyBiaXQgdGVzdCAoJS4yZiUlKVxuIiwKKwkJc3RhdHMtPmNsZWFyX2NvdW50LCBzdGF0cy0+dGVzdF9zZXEsIHRlc3Rfc2VxX3BlcmMpOworCWZwcmludGYoc3RkZXJyLCAiJTE2bHUgY29udGlndW91cyBiaXQgbWFyayAoJS4yZiUlKVxuIgorCQkiJTE2bGx1IGJpdHMgdGVzdGVkIGJhY2t3YXJkcyAoJS4yZiUlKVxuIiwKKwkJc3RhdHMtPm1hcmtfc2VxLCBtYXJrX3NlcV9wZXJjLAorCQlzdGF0cy0+dGVzdF9iYWNrLCB0ZXN0X2JhY2tfcGVyYyk7CisJZnByaW50ZihzdGRlcnIsICIlMTZsbHUgYml0cyBtYXJrZWQgYmFja3dhcmRzICglLjJmJSUpXG4iCisJCSIlMTYuMmYgc2Vjb25kcyBpbiB1c2VcbiIsCisJCXN0YXRzLT5tYXJrX2JhY2ssIG1hcmtfYmFja19wZXJjLCBpbnVzZSk7CisjZW5kaWYgLyogQk1BUF9TVEFUU19PUFMgKi8KK30KKyNlbmRpZgorCit2b2lkIGV4dDJmc19mcmVlX2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCkKK3sKKwlpZiAoIWJtYXApCisJCXJldHVybjsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWV4dDJmc19mcmVlX2dlbmVyaWNfYml0bWFwKGJtYXApOworCQlyZXR1cm47CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm47CisKKyNpZmRlZiBCTUFQX1NUQVRTCisJaWYgKGdldGVudigiRTJGU1BST0dTX0JJVE1BUF9TVEFUUyIpKSB7CisJCWV4dDJmc19wcmludF9ibWFwX3N0YXRpc3RpY3MoYm1hcCk7CisJCWJtYXAtPmJpdG1hcF9vcHMtPnByaW50X3N0YXRzKGJtYXApOworCX0KKyNlbmRpZgorCisJYm1hcC0+Yml0bWFwX29wcy0+ZnJlZV9ibWFwKGJtYXApOworCisJaWYgKGJtYXAtPmRlc2NyaXB0aW9uKSB7CisJCWV4dDJmc19mcmVlX21lbSgmYm1hcC0+ZGVzY3JpcHRpb24pOworCQlibWFwLT5kZXNjcmlwdGlvbiA9IDA7CisJfQorCWJtYXAtPm1hZ2ljID0gMDsKKwlleHQyZnNfZnJlZV9tZW0oJmJtYXApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NvcHlfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBzcmMsCisJCQkJICAgZXh0MmZzX2dlbmVyaWNfYml0bWFwICpkZXN0KQoreworCWNoYXIgKmRlc2NyLCAqbmV3X2Rlc2NyOworCWV4dDJmc19nZW5lcmljX2JpdG1hcAluZXdfYm1hcDsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJaWYgKCFzcmMpCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChzcmMpKQorCQlyZXR1cm4gZXh0MmZzX2NvcHlfZ2VuZXJpY19iaXRtYXAoc3JjLCBkZXN0KTsKKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChzcmMpKQorCQlyZXR1cm4gRUlOVkFMOworCisJLyogQWxsb2NhdGUgYSBuZXcgYml0bWFwIHN0cnVjdCAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhzaXplb2Yoc3RydWN0IGV4dDJmc19zdHJ1Y3RfZ2VuZXJpY19iaXRtYXApLAorCQkJCSAgICAmbmV3X2JtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJc3JjLT5zdGF0cy5jb3B5X2NvdW50Kys7CisjZW5kaWYKKyNpZmRlZiBCTUFQX1NUQVRTCisJaWYgKGdldHRpbWVvZmRheSgmbmV3X2JtYXAtPnN0YXRzLmNyZWF0ZWQsCisJCQkgKHN0cnVjdCB0aW1lem9uZSAqKSBOVUxMKSA9PSAtMSkgeworCQlwZXJyb3IoImdldHRpbWVvZmRheSIpOworCQlleHQyZnNfZnJlZV9tZW0oJm5ld19ibWFwKTsKKwkJcmV0dXJuIDE7CisJfQorCW5ld19ibWFwLT5zdGF0cy50eXBlID0gc3JjLT5zdGF0cy50eXBlOworI2VuZGlmCisKKwkvKiBDb3B5IGFsbCB0aGUgaGlnaC1sZXZlbCBwYXJ0cyBvdmVyICovCisJbmV3X2JtYXAtPm1hZ2ljID0gc3JjLT5tYWdpYzsKKwluZXdfYm1hcC0+ZnMgPSBzcmMtPmZzOworCW5ld19ibWFwLT5zdGFydCA9IHNyYy0+c3RhcnQ7CisJbmV3X2JtYXAtPmVuZCA9IHNyYy0+ZW5kOworCW5ld19ibWFwLT5yZWFsX2VuZCA9IHNyYy0+cmVhbF9lbmQ7CisJbmV3X2JtYXAtPmJpdG1hcF9vcHMgPSBzcmMtPmJpdG1hcF9vcHM7CisJbmV3X2JtYXAtPmJhc2VfZXJyb3JfY29kZSA9IHNyYy0+YmFzZV9lcnJvcl9jb2RlOworCW5ld19ibWFwLT5jbHVzdGVyX2JpdHMgPSBzcmMtPmNsdXN0ZXJfYml0czsKKworCWRlc2NyID0gc3JjLT5kZXNjcmlwdGlvbjsKKwlpZiAoZGVzY3IpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKGRlc2NyKSsxMCwgJm5ld19kZXNjcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmbmV3X2JtYXApOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlzcHJpbnRmKG5ld19kZXNjciwgImNvcHkgb2YgJXMiLCBkZXNjcik7CisJCW5ld19ibWFwLT5kZXNjcmlwdGlvbiA9IG5ld19kZXNjcjsKKwl9CisKKwlyZXR2YWwgPSBzcmMtPmJpdG1hcF9vcHMtPmNvcHlfYm1hcChzcmMsIG5ld19ibWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmbmV3X2JtYXAtPmRlc2NyaXB0aW9uKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZuZXdfYm1hcCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJKmRlc3QgPSBuZXdfYm1hcDsKKworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsCisJCQkJICAgICBfX3U2NCBuZXdfZW5kLAorCQkJCSAgICAgX191NjQgbmV3X3JlYWxfZW5kKQoreworCWlmICghYm1hcCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKQorCQlyZXR1cm4gZXh0MmZzX3Jlc2l6ZV9nZW5lcmljX2JpdG1hcChibWFwLT5tYWdpYywgbmV3X2VuZCwKKwkJCQkJCSAgICBuZXdfcmVhbF9lbmQsIGJtYXApOworCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJSU5DX1NUQVQoYm1hcCwgcmVzaXplX2NvdW50KTsKKworCXJldHVybiBibWFwLT5iaXRtYXBfb3BzLT5yZXNpemVfYm1hcChibWFwLCBuZXdfZW5kLCBuZXdfcmVhbF9lbmQpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2Z1ZGdlX2dlbmVyaWNfYm1hcF9lbmQoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJZXJyY29kZV90IG5lcSwKKwkJCQkJX191NjQgZW5kLCBfX3U2NCAqb2VuZCkKK3sKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJZXh0Ml9pbm9fdCB0bXBfb2VuZDsKKwkJaW50IHJldHZhbDsKKworCQlyZXR2YWwgPSBleHQyZnNfZnVkZ2VfZ2VuZXJpY19iaXRtYXBfZW5kKGJpdG1hcCwgYml0bWFwLT5tYWdpYywKKwkJCQkJCQkgbmVxLCBlbmQsICZ0bXBfb2VuZCk7CisJCWlmIChvZW5kKQorCQkJKm9lbmQgPSB0bXBfb2VuZDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChlbmQgPiBiaXRtYXAtPnJlYWxfZW5kKQorCQlyZXR1cm4gbmVxOworCWlmIChvZW5kKQorCQkqb2VuZCA9IGJpdG1hcC0+ZW5kOworCWJpdG1hcC0+ZW5kID0gZW5kOworCXJldHVybiAwOworfQorCitfX3U2NCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9zdGFydChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWlmICghYml0bWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfc3RhcnQoYml0bWFwKTsKKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChiaXRtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJcmV0dXJuIGJpdG1hcC0+c3RhcnQ7Cit9CisKK19fdTY0IGV4dDJmc19nZXRfZ2VuZXJpY19ibWFwX2VuZChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwKQoreworCWlmICghYml0bWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfZW5kKGJpdG1hcCk7CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCXJldHVybiBiaXRtYXAtPmVuZDsKK30KKwordm9pZCBleHQyZnNfY2xlYXJfZ2VuZXJpY19ibWFwKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXApCit7CisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkKKwkJZXh0MmZzX2NsZWFyX2dlbmVyaWNfYml0bWFwKGJpdG1hcCk7CisJZWxzZQorCQliaXRtYXAtPmJpdG1hcF9vcHMtPmNsZWFyX2JtYXAgKGJpdG1hcCk7Cit9CisKK2ludCBleHQyZnNfbWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCSAgICAgX191NjQgYXJnKQoreworCWlmICghYml0bWFwKQorCQlyZXR1cm4gMDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJpdG1hcCkpIHsKKwkJaWYgKGFyZyAmIH4weGZmZmZmZmZmVUxMKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJpdG1hcCwKKwkJCQkJICAgIEVYVDJGU19NQVJLX0VSUk9SLCAweGZmZmZmZmZmKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcChiaXRtYXAsIGFyZyk7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpCisJCXJldHVybiAwOworCisJYXJnID4+PSBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKworI2lmZGVmIEJNQVBfU1RBVFNfT1BTCisJaWYgKGFyZyA9PSBiaXRtYXAtPnN0YXRzLmxhc3RfbWFya2VkICsgMSkKKwkJYml0bWFwLT5zdGF0cy5tYXJrX3NlcSsrOworCWlmIChhcmcgPCBiaXRtYXAtPnN0YXRzLmxhc3RfbWFya2VkKQorCQliaXRtYXAtPnN0YXRzLm1hcmtfYmFjaysrOworCWJpdG1hcC0+c3RhdHMubGFzdF9tYXJrZWQgPSBhcmc7CisJYml0bWFwLT5zdGF0cy5tYXJrX2NvdW50Kys7CisjZW5kaWYKKworCWlmICgoYXJnIDwgYml0bWFwLT5zdGFydCkgfHwgKGFyZyA+IGJpdG1hcC0+ZW5kKSkgeworCQl3YXJuX2JpdG1hcChiaXRtYXAsIEVYVDJGU19NQVJLX0VSUk9SLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gYml0bWFwLT5iaXRtYXBfb3BzLT5tYXJrX2JtYXAoYml0bWFwLCBhcmcpOworfQorCitpbnQgZXh0MmZzX3VubWFya19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCSAgICAgICBfX3U2NCBhcmcpCit7CisJaWYgKCFiaXRtYXApCisJCXJldHVybiAwOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoYXJnICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVU5NQVJLX0VSUk9SLAorCQkJCQkgICAgMHhmZmZmZmZmZik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcChiaXRtYXAsIGFyZyk7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpCisJCXJldHVybiAwOworCisJYXJnID4+PSBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKworCUlOQ19TVEFUKGJpdG1hcCwgdW5tYXJrX2NvdW50KTsKKworCWlmICgoYXJnIDwgYml0bWFwLT5zdGFydCkgfHwgKGFyZyA+IGJpdG1hcC0+ZW5kKSkgeworCQl3YXJuX2JpdG1hcChiaXRtYXAsIEVYVDJGU19VTk1BUktfRVJST1IsIGFyZyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBiaXRtYXAtPmJpdG1hcF9vcHMtPnVubWFya19ibWFwKGJpdG1hcCwgYXJnKTsKK30KKworaW50IGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcChleHQyZnNfZ2VuZXJpY19iaXRtYXAgYml0bWFwLAorCQkJICAgICBfX3U2NCBhcmcpCit7CisJaWYgKCFiaXRtYXApCisJCXJldHVybiAwOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlpZiAoYXJnICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwKKwkJCQkJICAgIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwKGJpdG1hcCwgYXJnKTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSkKKwkJcmV0dXJuIDA7CisKKwlhcmcgPj49IGJpdG1hcC0+Y2x1c3Rlcl9iaXRzOworCisjaWZkZWYgQk1BUF9TVEFUU19PUFMKKwliaXRtYXAtPnN0YXRzLnRlc3RfY291bnQrKzsKKwlpZiAoYXJnID09IGJpdG1hcC0+c3RhdHMubGFzdF90ZXN0ZWQgKyAxKQorCQliaXRtYXAtPnN0YXRzLnRlc3Rfc2VxKys7CisJaWYgKGFyZyA8IGJpdG1hcC0+c3RhdHMubGFzdF90ZXN0ZWQpCisJCWJpdG1hcC0+c3RhdHMudGVzdF9iYWNrKys7CisJYml0bWFwLT5zdGF0cy5sYXN0X3Rlc3RlZCA9IGFyZzsKKyNlbmRpZgorCisJaWYgKChhcmcgPCBiaXRtYXAtPnN0YXJ0KSB8fCAoYXJnID4gYml0bWFwLT5lbmQpKSB7CisJCXdhcm5fYml0bWFwKGJpdG1hcCwgRVhUMkZTX1RFU1RfRVJST1IsIGFyZyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBiaXRtYXAtPmJpdG1hcF9vcHMtPnRlc3RfYm1hcChiaXRtYXAsIGFyZyk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKmluKQoreworCWlmICghYm1hcCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWlmICgoc3RhcnQrbnVtLTEpICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoYm1hcCwgRVhUMkZTX1VOTUFSS19FUlJPUiwKKwkJCQkJICAgIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuIEVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXh0MmZzX3NldF9nZW5lcmljX2JpdG1hcF9yYW5nZShibWFwLCBibWFwLT5tYWdpYywKKwkJCQkJCSAgICAgICBzdGFydCwgbnVtLCBpbik7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm4gRUlOVkFMOworCisJSU5DX1NUQVQoYm1hcCwgc2V0X3JhbmdlX2NvdW50KTsKKworCXJldHVybiBibWFwLT5iaXRtYXBfb3BzLT5zZXRfYm1hcF9yYW5nZShibWFwLCBzdGFydCwgbnVtLCBpbik7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9yYW5nZShleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm1hcCwKKwkJCQkJX191NjQgc3RhcnQsIHVuc2lnbmVkIGludCBudW0sCisJCQkJCXZvaWQgKm91dCkKK3sKKwlpZiAoIWJtYXApCisJCXJldHVybiBFSU5WQUw7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChibWFwKSkgeworCQlpZiAoKHN0YXJ0K251bS0xKSAmIH4weGZmZmZmZmZmVUxMKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJtYXAsCisJCQkJCSAgICBFWFQyRlNfVU5NQVJLX0VSUk9SLCAweGZmZmZmZmZmKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwkJcmV0dXJuIGV4dDJmc19nZXRfZ2VuZXJpY19iaXRtYXBfcmFuZ2UoYm1hcCwgYm1hcC0+bWFnaWMsCisJCQkJCQkgICAgICAgc3RhcnQsIG51bSwgb3V0KTsKKwl9CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlJTkNfU1RBVChibWFwLCBnZXRfcmFuZ2VfY291bnQpOworCisJcmV0dXJuIGJtYXAtPmJpdG1hcF9vcHMtPmdldF9ibWFwX3JhbmdlKGJtYXAsIHN0YXJ0LCBudW0sIG91dCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY29tcGFyZV9nZW5lcmljX2JtYXAoZXJyY29kZV90IG5lcSwKKwkJCQkgICAgICBleHQyZnNfZ2VuZXJpY19iaXRtYXAgYm0xLAorCQkJCSAgICAgIGV4dDJmc19nZW5lcmljX2JpdG1hcCBibTIpCit7CisJYmxrNjRfdAlpOworCisJaWYgKCFibTEgfHwgIWJtMikKKwkJcmV0dXJuIEVJTlZBTDsKKwlpZiAoYm0xLT5tYWdpYyAhPSBibTItPm1hZ2ljKQorCQlyZXR1cm4gRUlOVkFMOworCisJLyogTm93IHdlIGtub3cgYm90aCBiaXRtYXBzIGhhdmUgdGhlIHNhbWUgbWFnaWMgKi8KKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChibTEpKQorCQlyZXR1cm4gZXh0MmZzX2NvbXBhcmVfZ2VuZXJpY19iaXRtYXAoYm0xLT5tYWdpYywgbmVxLCBibTEsIGJtMik7CisKKwlpZiAoIUVYVDJGU19JU182NF9CSVRNQVAoYm0xKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmICgoYm0xLT5zdGFydCAhPSBibTItPnN0YXJ0KSB8fAorCSAgICAoYm0xLT5lbmQgIT0gYm0yLT5lbmQpKQorCQlyZXR1cm4gbmVxOworCisJZm9yIChpID0gYm0xLT5lbmQgLSAoKGJtMS0+ZW5kIC0gYm0xLT5zdGFydCkgJSA4KTsgaSA8PSBibTEtPmVuZDsgaSsrKQorCQlpZiAoZXh0MmZzX3Rlc3RfZ2VuZXJpY19ibWFwKGJtMSwgaSkgIT0KKwkJICAgIGV4dDJmc190ZXN0X2dlbmVyaWNfYm1hcChibTIsIGkpKQorCQkJcmV0dXJuIG5lcTsKKworCXJldHVybiAwOworfQorCit2b2lkIGV4dDJmc19zZXRfZ2VuZXJpY19ibWFwX3BhZGRpbmcoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXApCit7CisJX191NjQJc3RhcnQsIG51bTsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWV4dDJmc19zZXRfZ2VuZXJpY19iaXRtYXBfcGFkZGluZyhibWFwKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXJ0ID0gYm1hcC0+ZW5kICsgMTsKKwludW0gPSBibWFwLT5yZWFsX2VuZCAtIGJtYXAtPmVuZDsKKwlibWFwLT5iaXRtYXBfb3BzLT5tYXJrX2JtYXBfZXh0ZW50KGJtYXAsIHN0YXJ0LCBudW0pOworCS8qIFhYWCBvdWdodCB0byB3YXJuIG9uIGVycm9yICovCit9CisKK2ludCBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkgICAgYmxrNjRfdCBibG9jaywgdW5zaWduZWQgaW50IG51bSkKK3sKKwlfX3U2NAllbmQgPSBibG9jayArIG51bTsKKworCWlmICghYm1hcCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCWlmIChudW0gPT0gMSkKKwkJcmV0dXJuICFleHQyZnNfdGVzdF9nZW5lcmljX2JtYXAoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkKKwkJCQkJCSBibWFwLCBibG9jayk7CisKKwlpZiAoRVhUMkZTX0lTXzMyX0JJVE1BUChibWFwKSkgeworCQlpZiAoKGJsb2NrK251bS0xKSAmIH4weGZmZmZmZmZmVUxMKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAyKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJtYXAsCisJCQkJCSAgICBFWFQyRlNfVU5NQVJLX0VSUk9SLCAweGZmZmZmZmZmKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwkJcmV0dXJuIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcF9yYW5nZSgKKwkJCShleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJtYXAsIGJsb2NrLCBudW0pOworCX0KKworCWlmICghRVhUMkZTX0lTXzY0X0JJVE1BUChibWFwKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCUlOQ19TVEFUKGJtYXAsIHRlc3RfZXh0X2NvdW50KTsKKworCS8qIGNvbnZlcnQgdG8gY2x1c3RlcnMgaWYgbmVjZXNzYXJ5ICovCisJYmxvY2sgPj49IGJtYXAtPmNsdXN0ZXJfYml0czsKKwllbmQgKz0gKDEgPDwgYm1hcC0+Y2x1c3Rlcl9iaXRzKSAtIDE7CisJZW5kID4+PSBibWFwLT5jbHVzdGVyX2JpdHM7CisJbnVtID0gZW5kIC0gYmxvY2s7CisKKwlpZiAoKGJsb2NrIDwgYm1hcC0+c3RhcnQpIHx8IChibG9jaytudW0tMSA+IGJtYXAtPmVuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0JMT0NLX1RFU1QsIGJsb2NrLAorCQkJCSAgIGJtYXAtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwlyZXR1cm4gYm1hcC0+Yml0bWFwX29wcy0+dGVzdF9jbGVhcl9ibWFwX2V4dGVudChibWFwLCBibG9jaywgbnVtKTsKK30KKwordm9pZCBleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCwKKwkJCQkgICAgIGJsazY0X3QgYmxvY2ssIHVuc2lnbmVkIGludCBudW0pCit7CisJX191NjQJZW5kID0gYmxvY2sgKyBudW07CisKKwlpZiAoIWJtYXApCisJCXJldHVybjsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWlmICgoYmxvY2srbnVtLTEpICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYm1hcCwKKwkJCQkJICAgIEVYVDJGU19VTk1BUktfRVJST1IsIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuOworCQl9CisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZSgoZXh0MmZzX2dlbmVyaWNfYml0bWFwKSBibWFwLAorCQkJCQkgICAgICAgYmxvY2ssIG51bSk7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm47CisKKwlJTkNfU1RBVChibWFwLCBtYXJrX2V4dF9jb3VudCk7CisKKwkvKiBjb252ZXJ0IHRvIGNsdXN0ZXJzIGlmIG5lY2Vzc2FyeSAqLworCWJsb2NrID4+PSBibWFwLT5jbHVzdGVyX2JpdHM7CisJZW5kICs9ICgxIDw8IGJtYXAtPmNsdXN0ZXJfYml0cykgLSAxOworCWVuZCA+Pj0gYm1hcC0+Y2x1c3Rlcl9iaXRzOworCW51bSA9IGVuZCAtIGJsb2NrOworCisJaWYgKChibG9jayA8IGJtYXAtPnN0YXJ0KSB8fCAoYmxvY2srbnVtLTEgPiBibWFwLT5lbmQpKSB7CisJCWV4dDJmc193YXJuX2JpdG1hcChFWFQyX0VUX0JBRF9CTE9DS19NQVJLLCBibG9jaywKKwkJCQkgICBibWFwLT5kZXNjcmlwdGlvbik7CisJCXJldHVybjsKKwl9CisKKwlibWFwLT5iaXRtYXBfb3BzLT5tYXJrX2JtYXBfZXh0ZW50KGJtYXAsIGJsb2NrLCBudW0pOworfQorCit2b2lkIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihleHQyZnNfYmxvY2tfYml0bWFwIGJtYXAsCisJCQkJICAgICAgIGJsazY0X3QgYmxvY2ssIHVuc2lnbmVkIGludCBudW0pCit7CisJX191NjQJZW5kID0gYmxvY2sgKyBudW07CisKKwlpZiAoIWJtYXApCisJCXJldHVybjsKKworCWlmIChFWFQyRlNfSVNfMzJfQklUTUFQKGJtYXApKSB7CisJCWlmICgoYmxvY2srbnVtLTEpICYgfjB4ZmZmZmZmZmZVTEwpIHsKKwkJCWV4dDJmc193YXJuX2JpdG1hcDIoKGV4dDJmc19nZW5lcmljX2JpdG1hcCkgYm1hcCwKKwkJCQkJICAgIEVYVDJGU19VTk1BUktfRVJST1IsIDB4ZmZmZmZmZmYpOworCQkJcmV0dXJuOworCQl9CisJCWV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwX3JhbmdlKChleHQyZnNfZ2VuZXJpY19iaXRtYXApIGJtYXAsCisJCQkJCQkgYmxvY2ssIG51bSk7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJtYXApKQorCQlyZXR1cm47CisKKwlJTkNfU1RBVChibWFwLCB1bm1hcmtfZXh0X2NvdW50KTsKKworCS8qIGNvbnZlcnQgdG8gY2x1c3RlcnMgaWYgbmVjZXNzYXJ5ICovCisJYmxvY2sgPj49IGJtYXAtPmNsdXN0ZXJfYml0czsKKwllbmQgKz0gKDEgPDwgYm1hcC0+Y2x1c3Rlcl9iaXRzKSAtIDE7CisJZW5kID4+PSBibWFwLT5jbHVzdGVyX2JpdHM7CisJbnVtID0gZW5kIC0gYmxvY2s7CisKKwlpZiAoKGJsb2NrIDwgYm1hcC0+c3RhcnQpIHx8IChibG9jaytudW0tMSA+IGJtYXAtPmVuZCkpIHsKKwkJZXh0MmZzX3dhcm5fYml0bWFwKEVYVDJfRVRfQkFEX0JMT0NLX1VOTUFSSywgYmxvY2ssCisJCQkJICAgYm1hcC0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm47CisJfQorCisJYm1hcC0+Yml0bWFwX29wcy0+dW5tYXJrX2JtYXBfZXh0ZW50KGJtYXAsIGJsb2NrLCBudW0pOworfQorCit2b2lkIGV4dDJmc193YXJuX2JpdG1hcDMyKGV4dDJmc19nZW5lcmljX2JpdG1hcCBiaXRtYXAsIGNvbnN0IGNoYXIgKmZ1bmMpCit7CisjaWZuZGVmIE9NSVRfQ09NX0VSUgorCWlmIChiaXRtYXAgJiYgYml0bWFwLT5kZXNjcmlwdGlvbikKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJImNhbGxlZCAlcyB3aXRoIDY0LWJpdCBiaXRtYXAgZm9yICVzIiwgZnVuYywKKwkJCWJpdG1hcC0+ZGVzY3JpcHRpb24pOworCWVsc2UKKwkJY29tX2VycigwLCBFWFQyX0VUX01BR0lDX0dFTkVSSUNfQklUTUFQLAorCQkJImNhbGxlZCAlcyB3aXRoIDY0LWJpdCBiaXRtYXAiLCBmdW5jKTsKKyNlbmRpZgorfQorCitlcnJjb2RlX3QgZXh0MmZzX2NvbnZlcnRfc3ViY2x1c3Rlcl9iaXRtYXAoZXh0Ml9maWxzeXMgZnMsCisJCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgKmJpdG1hcCkKK3sKKwlleHQyZnNfYmxvY2tfYml0bWFwCWNtYXAsIGJtYXA7CisJZXJyY29kZV90CQlyZXR2YWw7CisJYmxrNjRfdAkJCWksIGJfZW5kLCBjX2VuZDsKKwlpbnQJCQluLCByYXRpbzsKKworCWJtYXAgPSAqYml0bWFwOworCisJaWYgKGZzLT5jbHVzdGVyX3JhdGlvX2JpdHMgPT0gZXh0MmZzX2dldF9iaXRtYXBfZ3JhbnVsYXJpdHkoYm1hcCkpCisJCXJldHVybiAwOwkvKiBOb3RoaW5nIHRvIGRvICovCisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCAiY29udmVydGVkIGNsdXN0ZXIgYml0bWFwIiwKKwkJCQkJICAgICAgJmNtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpID0gYm1hcC0+c3RhcnQ7CisJYl9lbmQgPSBibWFwLT5lbmQ7CisJYm1hcC0+ZW5kID0gYm1hcC0+cmVhbF9lbmQ7CisJY19lbmQgPSBjbWFwLT5lbmQ7CisJY21hcC0+ZW5kID0gY21hcC0+cmVhbF9lbmQ7CisJbiA9IDA7CisJcmF0aW8gPSAxIDw8IGZzLT5jbHVzdGVyX3JhdGlvX2JpdHM7CisJd2hpbGUgKGkgPCBibWFwLT5yZWFsX2VuZCkgeworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBpKSkgeworCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihjbWFwLCBpKTsKKwkJCWkgKz0gcmF0aW8gLSBuOworCQkJbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpKys7IG4rKzsKKwkJaWYgKG4gPj0gcmF0aW8pCisJCQluID0gMDsKKwl9CisJYm1hcC0+ZW5kID0gYl9lbmQ7CisJY21hcC0+ZW5kID0gY19lbmQ7CisJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGJtYXApOworCSpiaXRtYXAgPSBjbWFwOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19nZW5lcmljX2JtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJpdG1hcCwKKwkJCQkJICAgICAgX191NjQgc3RhcnQsIF9fdTY0IGVuZCwgX191NjQgKm91dCkKK3sKKwlpbnQgYjsKKworCWlmICghYml0bWFwKQorCQlyZXR1cm4gRUlOVkFMOworCisJaWYgKEVYVDJGU19JU182NF9CSVRNQVAoYml0bWFwKSAmJiBiaXRtYXAtPmJpdG1hcF9vcHMtPmZpbmRfZmlyc3RfemVybykKKwkJcmV0dXJuIGJpdG1hcC0+Yml0bWFwX29wcy0+ZmluZF9maXJzdF96ZXJvKGJpdG1hcCwgc3RhcnQsCisJCQkJCQkJICAgZW5kLCBvdXQpOworCisJaWYgKEVYVDJGU19JU18zMl9CSVRNQVAoYml0bWFwKSkgeworCQlibGtfdCBibGsgPSAwOworCQllcnJjb2RlX3QgcmV0dmFsOworCisJCWlmICgoKHN0YXJ0KSAmIH4weGZmZmZmZmZmVUxMKSB8fAorCQkgICAgKChlbmQpICYgfjB4ZmZmZmZmZmZVTEwpKSB7CisJCQlleHQyZnNfd2Fybl9iaXRtYXAyKGJpdG1hcCwgRVhUMkZTX1RFU1RfRVJST1IsIHN0YXJ0KTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKworCQlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF96ZXJvX2dlbmVyaWNfYml0bWFwKGJpdG1hcCwgc3RhcnQsCisJCQkJCQkJICAgICAgIGVuZCwgJmJsayk7CisJCWlmIChyZXR2YWwgPT0gMCkKKwkJCSpvdXQgPSBibGs7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaWYgKCFFWFQyRlNfSVNfNjRfQklUTUFQKGJpdG1hcCkpCisJCXJldHVybiBFSU5WQUw7CisKKwlzdGFydCA+Pj0gYml0bWFwLT5jbHVzdGVyX2JpdHM7CisJZW5kID4+PSBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKworCWlmIChzdGFydCA8IGJpdG1hcC0+c3RhcnQgfHwgZW5kID4gYml0bWFwLT5lbmQgfHwgc3RhcnQgPiBlbmQpIHsKKwkJd2Fybl9iaXRtYXAoYml0bWFwLCBFWFQyRlNfVEVTVF9FUlJPUiwgc3RhcnQpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKKwkJYiA9IGJpdG1hcC0+Yml0bWFwX29wcy0+dGVzdF9ibWFwKGJpdG1hcCwgc3RhcnQpOworCQlpZiAoIWIpIHsKKwkJCSpvdXQgPSBzdGFydCA8PCBiaXRtYXAtPmNsdXN0ZXJfYml0czsKKwkJCXJldHVybiAwOworCQl9CisJCXN0YXJ0Kys7CisJfQorCisJcmV0dXJuIEVOT0VOVDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2dlbl9jcmMzMmN0YWJsZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2VuX2NyYzMyY3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5NmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2dlbl9jcmMzMmN0YWJsZS5jCkBAIC0wLDAgKzEsMTIzIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcmMzMmNfZGVmcy5oIgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNkZWZpbmUgRU5UUklFU19QRVJfTElORSA0CisKKyNpZiBDUkNfTEVfQklUUyA8PSA4CisjZGVmaW5lIExFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0xFX0JJVFMpCisjZWxzZQorI2RlZmluZSBMRV9UQUJMRV9TSVpFIDI1NgorI2VuZGlmCisKKyNpZiBDUkNfQkVfQklUUyA8PSA4CisjZGVmaW5lIEJFX1RBQkxFX1NJWkUgKDEgPDwgQ1JDX0JFX0JJVFMpCisjZWxzZQorI2RlZmluZSBCRV9UQUJMRV9TSVpFIDI1NgorI2VuZGlmCisKK3N0YXRpYyB1aW50MzJfdCBjcmMzMmN0YWJsZV9sZVs4XVsyNTZdOworc3RhdGljIHVpbnQzMl90IGNyYzMyY3RhYmxlX2JlWzhdWzI1Nl07CisKKy8qKgorICogY3JjMzJjaW5pdF9sZSgpIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgTEUgdGFibGUgZGF0YQorICoKKyAqIGNyYyBpcyB0aGUgY3JjIG9mIHRoZSBieXRlIGk7IG90aGVyIGVudHJpZXMgYXJlIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUKKyAqIGZhY3QgdGhhdCBjcmN0YWJsZVtpXmpdID0gY3JjdGFibGVbaV0gXiBjcmN0YWJsZVtqXS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGNyYzMyY2luaXRfbGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpLCBqOworCXVpbnQzMl90IGNyYyA9IDE7CisKKwljcmMzMmN0YWJsZV9sZVswXVswXSA9IDA7CisKKwlmb3IgKGkgPSBMRV9UQUJMRV9TSVpFID4+IDE7IGk7IGkgPj49IDEpIHsKKwkJY3JjID0gKGNyYyA+PiAxKSBeICgoY3JjICYgMSkgPyBDUkNQT0xZX0xFIDogMCk7CisJCWZvciAoaiA9IDA7IGogPCBMRV9UQUJMRV9TSVpFOyBqICs9IDIgKiBpKQorCQkJY3JjMzJjdGFibGVfbGVbMF1baSArIGpdID0gY3JjIF4gY3JjMzJjdGFibGVfbGVbMF1bal07CisJfQorCWZvciAoaSA9IDA7IGkgPCBMRV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJY3JjID0gY3JjMzJjdGFibGVfbGVbMF1baV07CisJCWZvciAoaiA9IDE7IGogPCA4OyBqKyspIHsKKwkJCWNyYyA9IGNyYzMyY3RhYmxlX2xlWzBdW2NyYyAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsKKwkJCWNyYzMyY3RhYmxlX2xlW2pdW2ldID0gY3JjOworCQl9CisJfQorfQorCisvKioKKyAqIGNyYzMyY2luaXRfYmUoKSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIEJFIHRhYmxlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgY3JjMzJjaW5pdF9iZSh2b2lkKQoreworCXVuc2lnbmVkIGksIGo7CisJdWludDMyX3QgY3JjID0gMHg4MDAwMDAwMDsKKworCWNyYzMyY3RhYmxlX2JlWzBdWzBdID0gMDsKKworCWZvciAoaSA9IDE7IGkgPCBCRV9UQUJMRV9TSVpFOyBpIDw8PSAxKSB7CisJCWNyYyA9IChjcmMgPDwgMSkgXiAoKGNyYyAmIDB4ODAwMDAwMDApID8gQ1JDUE9MWV9CRSA6IDApOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJY3JjMzJjdGFibGVfYmVbMF1baSArIGpdID0gY3JjIF4gY3JjMzJjdGFibGVfYmVbMF1bal07CisJfQorCWZvciAoaSA9IDA7IGkgPCBCRV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJY3JjID0gY3JjMzJjdGFibGVfYmVbMF1baV07CisJCWZvciAoaiA9IDE7IGogPCA4OyBqKyspIHsKKwkJCWNyYyA9IGNyYzMyY3RhYmxlX2JlWzBdWyhjcmMgPj4gMjQpICYgMHhmZl0gXgorCQkJICAgICAgKGNyYyA8PCA4KTsKKwkJCWNyYzMyY3RhYmxlX2JlW2pdW2ldID0gY3JjOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfdGFibGUodWludDMyX3QgdGFibGVbOF1bMjU2XSwgaW50IGxlbiwgY2hhciB0cmFucykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaiA9IDAgOyBqIDwgODsgaisrKSB7CisJCXByaW50Zigic3RhdGljIGNvbnN0IHVpbnQzMl90IHQlZF8lY2VbXSA9IHsiLCBqLCB0cmFucyk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKKwkJCWlmICgoaSAlIEVOVFJJRVNfUEVSX0xJTkUpID09IDApCisJCQkJcHJpbnRmKCJcbiIpOworCQkJcHJpbnRmKCJ0byVjZSgweCU4Ljh4TCksIiwgdHJhbnMsIHRhYmxlW2pdW2ldKTsKKwkJCWlmICgoaSAlIEVOVFJJRVNfUEVSX0xJTkUpICE9IChFTlRSSUVTX1BFUl9MSU5FIC0gMSkpCisJCQkJcHJpbnRmKCIgIik7CisJCX0KKwkJcHJpbnRmKCJ0byVjZSgweCU4Ljh4TCl9O1xuXG4iLCB0cmFucywgdGFibGVbal1bbGVuIC0gMV0pOworCisJCWlmICh0cmFucyA9PSAnbCcpIHsKKwkJCWlmICgoaisxKSo4ID49IENSQ19MRV9CSVRTKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKChqKzEpKjggPj0gQ1JDX0JFX0JJVFMpCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlwcmludGYoIi8qXG4iKTsKKwlwcmludGYoIiAqIGNyYzMyY3RhYmxlLmggLSBDUkMzMmMgdGFibGVzXG4iKTsKKwlwcmludGYoIiAqICAgIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgLSBkbyBub3QgZWRpdFxuIik7CisJcHJpbnRmKCIgKgkjIGdlbl9jcmMzMmN0YWJsZSA+IGNyYzMyY190YWJsZS5oXG4iKTsKKwlwcmludGYoIiAqICAgIHdpdGhcbiIpOworCXByaW50ZigiICoJQ1JDX0xFX0JJVFMgPSAlZFxuIiwgQ1JDX0xFX0JJVFMpOworCXByaW50ZigiICoJQ1JDX0JFX0JJVFMgPSAlZFxuIiwgQ1JDX0JFX0JJVFMpOworCXByaW50ZigiICovXG4iKTsKKwlwcmludGYoIiNpbmNsdWRlIDxzdGRpbnQuaD5cbiIpOworCisJaWYgKENSQ19MRV9CSVRTID4gMSkgeworCQljcmMzMmNpbml0X2xlKCk7CisJCW91dHB1dF90YWJsZShjcmMzMmN0YWJsZV9sZSwgTEVfVEFCTEVfU0laRSwgJ2wnKTsKKwl9CisKKwlpZiAoQ1JDX0JFX0JJVFMgPiAxKSB7CisJCWNyYzMyY2luaXRfYmUoKTsKKwkJb3V0cHV0X3RhYmxlKGNyYzMyY3RhYmxlX2JlLCBCRV9UQUJMRV9TSVpFLCAnYicpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2V0X3BhdGhuYW1lLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9nZXRfcGF0aG5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2E5ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2V0X3BhdGhuYW1lLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBnZXRfcGF0aG5hbWUuYyAtLS0gZG8gZGlyZWN0cnkvaW5vZGUgLT4gbmFtZSB0cmFuc2xhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqCisgKiAJZXh0MmZzX2dldF9wYXRobmFtZShmcywgZGlyLCBpbm8sIG5hbWUpCisgKgorICogCVRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0YWtlcyB0d28gaW5vZGUgbnVtYmVycyBpbnRvIGEKKyAqIAlzdHJpbmcsIHBsYWNpbmcgdGhlIHJlc3VsdCBpbiA8bmFtZT4uICA8ZGlyPiBpcyB0aGUgY29udGFpbmluZworICogCWRpcmVjdG9yeSBpbm9kZSwgYW5kIDxpbm8+IGlzIHRoZSBpbm9kZSBudW1iZXIgaXRzZWxmLiAgSWYKKyAqIAk8aW5vPiBpcyB6ZXJvLCB0aGVuIGV4dDJmc19nZXRfcGF0aG5hbWUgd2lsbCByZXR1cm4gcGF0aG5hbWUKKyAqIAlvZiB0aGUgdGhlIGRpcmVjdG9yeSA8ZGlyPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3N0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0IHsKKwlleHQyX2lub190CXNlYXJjaF9pbm87CisJZXh0Ml9pbm9fdAlwYXJlbnQ7CisJY2hhcgkJKm5hbWU7CisJZXJyY29kZV90CWVycmNvZGU7Cit9OworCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBnZXRfcGF0aG5hbWVfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJCSAgICAgaW50CW9mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICB2b2lkCSpwcml2X2RhdGEpCit7CisJc3RydWN0IGdldF9wYXRobmFtZV9zdHJ1Y3QJKmdwOworCWVycmNvZGVfdAkJCXJldHZhbDsKKworCWdwID0gKHN0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0ICopIHByaXZfZGF0YTsKKworCWlmICgoKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSA9PSAyKSAmJgorCSAgICAhc3RybmNtcChkaXJlbnQtPm5hbWUsICIuLiIsIDIpKQorCQlncC0+cGFyZW50ID0gZGlyZW50LT5pbm9kZTsKKwlpZiAoZGlyZW50LT5pbm9kZSA9PSBncC0+c2VhcmNoX2lubykgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbSgoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpICsgMSwKKwkJCQkJJmdwLT5uYW1lKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZ3AtPmVycmNvZGUgPSByZXR2YWw7CisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQl9CisJCXN0cm5jcHkoZ3AtPm5hbWUsIGRpcmVudC0+bmFtZSwgKGRpcmVudC0+bmFtZV9sZW4gJiAweEZGKSk7CisJCWdwLT5uYW1lW2RpcmVudC0+bmFtZV9sZW4gJiAweEZGXSA9ICdcMCc7CisJCXJldHVybiBESVJFTlRfQUJPUlQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWVfaW50KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpciwKKwkJCQkJIGV4dDJfaW5vX3QgaW5vLCBpbnQgbWF4ZGVwdGgsCisJCQkJCSBjaGFyICpidWYsIGNoYXIgKipuYW1lKQoreworCXN0cnVjdCBnZXRfcGF0aG5hbWVfc3RydWN0IGdwOworCWNoYXIJKnBhcmVudF9uYW1lID0gMCwgKnJldDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGRpciA9PSBpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oMiwgbmFtZSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlzdHJjcHkoKm5hbWUsIChkaXIgPT0gRVhUMl9ST09UX0lOTykgPyAiLyIgOiAiLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWRpciB8fCAobWF4ZGVwdGggPCAwKSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbSg0LCBuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCXN0cmNweSgqbmFtZSwgIi4uLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlncC5zZWFyY2hfaW5vID0gaW5vOworCWdwLnBhcmVudCA9IDA7CisJZ3AubmFtZSA9IDA7CisJZ3AuZXJyY29kZSA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUoZnMsIGRpciwgMCwgYnVmLCBnZXRfcGF0aG5hbWVfcHJvYywgJmdwKTsKKwlpZiAocmV0dmFsID09IEVYVDJfRVRfTk9fRElSRUNUT1JZKSB7CisJCWNoYXIgdG1wWzMyXTsKKworCQlpZiAoaW5vKQorCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIjwldT4vPCV1PiIsIGRpciwgaW5vKTsKKwkJZWxzZQorCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIjwldT4iLCBkaXIpOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4odG1wKSsxLCBuYW1lKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJc3RyY3B5KCpuYW1lLCB0bXApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmIChncC5lcnJjb2RlKSB7CisJCXJldHZhbCA9IGdwLmVycmNvZGU7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X3BhdGhuYW1lX2ludChmcywgZ3AucGFyZW50LCBkaXIsIG1heGRlcHRoLTEsCisJCQkJCSBidWYsICZwYXJlbnRfbmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmICghaW5vKSB7CisJCSpuYW1lID0gcGFyZW50X25hbWU7CisJCXJldHVybiAwOworCX0KKworCWlmIChncC5uYW1lKQorCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4ocGFyZW50X25hbWUpK3N0cmxlbihncC5uYW1lKSsyLAorCQkJCQkmcmV0KTsKKwllbHNlCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihwYXJlbnRfbmFtZSkrNSwgJnJldCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJcmV0WzBdID0gMDsKKwlpZiAocGFyZW50X25hbWVbMV0pCisJCXN0cmNhdChyZXQsIHBhcmVudF9uYW1lKTsKKwlzdHJjYXQocmV0LCAiLyIpOworCWlmIChncC5uYW1lKQorCQlzdHJjYXQocmV0LCBncC5uYW1lKTsKKwllbHNlCisJCXN0cmNhdChyZXQsICI/Pz8iKTsKKwkqbmFtZSA9IHJldDsKKwlyZXR2YWwgPSAwOworCitjbGVhbnVwOgorCWV4dDJmc19mcmVlX21lbSgmcGFyZW50X25hbWUpOworCWV4dDJmc19mcmVlX21lbSgmZ3AubmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19nZXRfcGF0aG5hbWUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgZGlyLCBleHQyX2lub190IGlubywKKwkJCSAgICAgIGNoYXIgKipuYW1lKQoreworCWNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGRpciA9PSBpbm8pCisJCWlubyA9IDA7CisJcmV0dmFsID0gZXh0MmZzX2dldF9wYXRobmFtZV9pbnQoZnMsIGRpciwgaW5vLCAzMiwgYnVmLCBuYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKKworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2V0c2VjdHNpemUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2dldHNlY3RzaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2dldHNlY3RzaXplLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBnZXRzZWN0c2l6ZS5jIC0tLSBnZXQgdGhlIHNlY3RvciBzaXplIG9mIGEgZGV2aWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NSBUaGVvZG9yZSBUcydvLgorICogQ29weXJpZ2h0IChDKSAyMDAzIFZNd2FyZSwgSW5jLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykKKyNpZiAhZGVmaW5lZChCTEtTU1pHRVQpCisjZGVmaW5lIEJMS1NTWkdFVCAgX0lPKDB4MTIsMTA0KS8qIGdldCBibG9jayBkZXZpY2Ugc2VjdG9yIHNpemUgKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkKEJMS1BCU1pHRVQpCisjZGVmaW5lIEJMS1BCU1pHRVQgX0lPKDB4MTIsMTIzKS8qIGdldCBibG9jayBwaHlzaWNhbCBzZWN0b3Igc2l6ZSAqLworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFJldHVybnMgdGhlIGxvZ2ljYWwgc2VjdG9yIHNpemUgb2YgYSBkZXZpY2UKKyAqLworZXJyY29kZV90IGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqc2VjdHNpemUpCit7CisJaW50CWZkOworCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGZpbGUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKyNpZmRlZiBCTEtTU1pHRVQKKwlpZiAoaW9jdGwoZmQsIEJMS1NTWkdFVCwgc2VjdHNpemUpID49IDApIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwkqc2VjdHNpemUgPSAwOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBkZXNpcmVkIGFsaWdubWVudCBmb3IgZGlyZWN0IEkvTworICovCitpbnQgZXh0MmZzX2dldF9kaW9fYWxpZ25tZW50KGludCBmZCkKK3sKKwlpbnQgYWxpZ24gPSAwOworCisjaWZkZWYgQkxLU1NaR0VUCisJaWYgKGlvY3RsKGZkLCBCTEtTU1pHRVQsICZhbGlnbikgPCAwKQorCQlhbGlnbiA9IDA7CisjZW5kaWYKKworI2lmZGVmIF9TQ19QQUdFU0laRQorCWlmIChhbGlnbiA8PSAwKQorCQlhbGlnbiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUUEFHRVNJWkUKKwlpZiAoYWxpZ24gPD0gMCkKKwkJYWxpZ24gPSBnZXRwYWdlc2l6ZSgpOworI2VuZGlmCisJaWYgKGFsaWduIDw9IDApCisJCWFsaWduID0gNDA5NjsKKworCXJldHVybiBhbGlnbjsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIHNlY3RvciBzaXplIG9mIGEgZGV2aWNlCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9waHlzX3NlY3RzaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqc2VjdHNpemUpCit7CisJaW50CWZkOworCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGZpbGUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKyNpZmRlZiBCTEtQQlNaR0VUCisJaWYgKGlvY3RsKGZkLCBCTEtQQlNaR0VULCBzZWN0c2l6ZSkgPj0gMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCSpzZWN0c2l6ZSA9IDA7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2V0c2l6ZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvZ2V0c2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDQ5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9nZXRzaXplLmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBnZXRzaXplLmMgLS0tIGdldCB0aGUgc2l6ZSBvZiBhIHBhcnRpdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqIENvcHlyaWdodCAoQykgMjAwMyBWTXdhcmUsIEluYy4KKyAqCisgKiBXaW5kb3dzIHZlcnNpb24gb2YgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZSBieSBDaHJpcyBMaSwgVk13YXJlLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfRkRfSAorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19ESVNLTEFCRUxfSAorI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0RJU0tfSAorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4gLyogZm9yIExJU1RfSEVBRCAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2Rpc2suaD4KKyNlbmRpZgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JTykgJiYgIWRlZmluZWQoQkxLR0VUU0laRSkKKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikJLyogcmV0dXJuIGRldmljZSBzaXplICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9JT1IpICYmICFkZWZpbmVkKEJMS0dFVFNJWkU2NCkKKyNkZWZpbmUgQkxLR0VUU0laRTY0IF9JT1IoMHgxMiwxMTQsc2l6ZV90KQkvKiByZXR1cm4gZGV2aWNlIHNpemUgaW4gYnl0ZXMgKHU2NCAqYXJnKSAqLworI2VuZGlmCisKKyNpZmRlZiBBUFBMRV9EQVJXSU4KKyNkZWZpbmUgQkxLR0VUU0laRSBES0lPQ0dFVEJMT0NLQ09VTlQzMgorI2VuZGlmIC8qIEFQUExFX0RBUldJTiAqLworCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkIChXSU4zMikKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAid2luaW9jdGwuaCIKKworI2lmIChfV0lOMzJfV0lOTlQgPj0gMHgwNTAwKQorI2RlZmluZSBIQVZFX0dFVF9GSUxFX1NJWkVfRVggMQorI2VuZGlmCisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9zaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCBibG9ja3NpemUsCisJCQkJIGJsa190ICpyZXRibG9ja3MpCit7CisJSEFORExFIGRldjsKKwlQQVJUSVRJT05fSU5GT1JNQVRJT04gcGk7CisJRElTS19HRU9NRVRSWSBnaTsKKwlEV09SRCByZXRieXRlczsKKyNpZmRlZiBIQVZFX0dFVF9GSUxFX1NJWkVfRVgKKwlMQVJHRV9JTlRFR0VSIGZpbGVzaXplOworI2Vsc2UKKwlEV09SRCBmaWxlc2l6ZTsKKyNlbmRpZiAvKiBIQVZFX0dFVF9GSUxFX1NJWkVfRVggKi8KKworCWRldiA9IENyZWF0ZUZpbGUoZmlsZSwgR0VORVJJQ19SRUFELAorCQkJIEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgLAorICAgICAgICAgICAgICAgIAkgTlVMTCwgIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgIE5VTEwpOworCisJaWYgKGRldiA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJcmV0dXJuIEVCQURGOworCWlmIChEZXZpY2VJb0NvbnRyb2woZGV2LCBJT0NUTF9ESVNLX0dFVF9QQVJUSVRJT05fSU5GTywKKwkJCSAgICAmcGksIHNpemVvZihQQVJUSVRJT05fSU5GT1JNQVRJT04pLAorCQkJICAgICZwaSwgc2l6ZW9mKFBBUlRJVElPTl9JTkZPUk1BVElPTiksCisJCQkgICAgJnJldGJ5dGVzLCBOVUxMKSkgeworCisJCSpyZXRibG9ja3MgPSBwaS5QYXJ0aXRpb25MZW5ndGguUXVhZFBhcnQgLyBibG9ja3NpemU7CisKKwl9IGVsc2UgaWYgKERldmljZUlvQ29udHJvbChkZXYsIElPQ1RMX0RJU0tfR0VUX0RSSVZFX0dFT01FVFJZLAorCQkJCSZnaSwgc2l6ZW9mKERJU0tfR0VPTUVUUlkpLAorCQkJCSZnaSwgc2l6ZW9mKERJU0tfR0VPTUVUUlkpLAorCQkJCSZyZXRieXRlcywgTlVMTCkpIHsKKworCQkqcmV0YmxvY2tzID0gZ2kuQnl0ZXNQZXJTZWN0b3IgKgorCQkJICAgICBnaS5TZWN0b3JzUGVyVHJhY2sgKgorCQkJICAgICBnaS5UcmFja3NQZXJDeWxpbmRlciAqCisJCQkgICAgIGdpLkN5bGluZGVycy5RdWFkUGFydCAvIGJsb2Nrc2l6ZTsKKworI2lmZGVmIEhBVkVfR0VUX0ZJTEVfU0laRV9FWAorCX0gZWxzZSBpZiAoR2V0RmlsZVNpemVFeChkZXYsICZmaWxlc2l6ZSkpIHsKKwkJKnJldGJsb2NrcyA9IGZpbGVzaXplLlF1YWRQYXJ0IC8gYmxvY2tzaXplOworCX0KKyNlbHNlCisJfSBlbHNlIHsKKwkJZmlsZXNpemUgPSBHZXRGaWxlU2l6ZShkZXYsIE5VTEwpOworCQlpZiAoSU5WQUxJRF9GSUxFX1NJWkUgIT0gZmlsZXNpemUpIHsKKwkJCSpyZXRibG9ja3MgPSBmaWxlc2l6ZSAvIGJsb2Nrc2l6ZTsKKwkJfQorCX0KKyNlbmRpZiAvKiBIQVZFX0dFVF9GSUxFX1NJWkVfRVggKi8KKworCUNsb3NlSGFuZGxlKGRldik7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgdmFsaWRfb2Zmc2V0IChpbnQgZmQsIGV4dDJfbG9mZl90IG9mZnNldCkKK3sKKwljaGFyIGNoOworCisJaWYgKGV4dDJmc19sbHNlZWsgKGZkLCBvZmZzZXQsIDApIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKHJlYWQgKGZkLCAmY2gsIDEpIDwgMSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluIGEgcGFydGl0aW9uCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZ2V0X2RldmljZV9zaXplMihjb25zdCBjaGFyICpmaWxlLCBpbnQgYmxvY2tzaXplLAorCQkJCSAgYmxrNjRfdCAqcmV0YmxvY2tzKQoreworCWludAlmZCwgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplNjQ7CisJZXh0Ml9sb2ZmX3QgaGlnaCwgbG93OworCisJZmQgPSBleHQyZnNfb3Blbl9maWxlKGZpbGUsIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKyNpZmRlZiBES0lPQ0dFVEJMT0NLQ09VTlQJLyogRm9yIEFwcGxlIERhcndpbiAqLworCWlmIChpb2N0bChmZCwgREtJT0NHRVRCTE9DS0NPVU5ULCAmc2l6ZTY0KSA+PSAwKSB7CisJCSpyZXRibG9ja3MgPSBzaXplNjQgLyAoYmxvY2tzaXplIC8gNTEyKTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKyNpZmRlZiBCTEtHRVRTSVpFNjQKKwl7CisJCWludCB2YWxpZF9ibGtnZXRzaXplNjQgPSAxOworI2lmZGVmIF9fbGludXhfXworCQlzdHJ1Y3QgdXRzbmFtZSB1dDsKKworCQlpZiAoKHVuYW1lKCZ1dCkgPT0gMCkgJiYKKwkJICAgICgodXQucmVsZWFzZVswXSA9PSAnMicpICYmICh1dC5yZWxlYXNlWzFdID09ICcuJykgJiYKKwkJICAgICAodXQucmVsZWFzZVsyXSA8ICc2JykgJiYgKHV0LnJlbGVhc2VbM10gPT0gJy4nKSkpCisJCQl2YWxpZF9ibGtnZXRzaXplNjQgPSAwOworI2VuZGlmCisJCWlmICh2YWxpZF9ibGtnZXRzaXplNjQgJiYKKwkJICAgIGlvY3RsKGZkLCBCTEtHRVRTSVpFNjQsICZzaXplNjQpID49IDApIHsKKwkJCSpyZXRibG9ja3MgPSBzaXplNjQgLyBibG9ja3NpemU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyNlbmRpZiAvKiBCTEtHRVRTSVpFNjQgKi8KKworI2lmZGVmIEJMS0dFVFNJWkUKKwl7CisJCXVuc2lnbmVkIGxvbmcJc2l6ZTsKKworCQlpZiAoaW9jdGwoZmQsIEJMS0dFVFNJWkUsICZzaXplKSA+PSAwKSB7CisJCQkqcmV0YmxvY2tzID0gc2l6ZSAvIChibG9ja3NpemUgLyA1MTIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisjZW5kaWYKKworI2lmZGVmIEZER0VUUFJNCisJeworCQlzdHJ1Y3QgZmxvcHB5X3N0cnVjdCB0aGlzX2Zsb3BweTsKKworCQlpZiAoaW9jdGwoZmQsIEZER0VUUFJNLCAmdGhpc19mbG9wcHkpID49IDApIHsKKwkJCSpyZXRibG9ja3MgPSB0aGlzX2Zsb3BweS5zaXplIC8gKGJsb2Nrc2l6ZSAvIDUxMik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfRElTS0xBQkVMX0gKKwl7CisJCWludCBwYXJ0OworCQlzdHJ1Y3QgZGlza2xhYmVsIGxhYjsKKwkJc3RydWN0IHBhcnRpdGlvbiAqcHA7CisJCWNoYXIgY2g7CisKKyNpZiBkZWZpbmVkKERJT0NHTUVESUFTSVpFKQorCQl7CisJCQlvZmZfdCBtczsKKwkJCXVfaW50IGJzOworCQkJaWYgKGlvY3RsKGZkLCBESU9DR01FRElBU0laRSwgJm1zKSA+PSAwKSB7CisJCQkJKnJldGJsb2NrcyA9IG1zIC8gYmxvY2tzaXplOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisjZWxpZiBkZWZpbmVkKERJT0NHRElORk8pCisJCS8qIG9sZCBkaXNrbGFiZWwgaW50ZXJmYWNlICovCisJCXBhcnQgPSBzdHJsZW4oZmlsZSkgLSAxOworCQlpZiAocGFydCA+PSAwKSB7CisJCQljaCA9IGZpbGVbcGFydF07CisJCQlpZiAoaXNkaWdpdChjaCkpCisJCQkJcGFydCA9IDA7CisJCQllbHNlIGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2gnKQorCQkJCXBhcnQgPSBjaCAtICdhJzsKKwkJCWVsc2UKKwkJCQlwYXJ0ID0gLTE7CisJCX0KKwkJaWYgKHBhcnQgPj0gMCAmJiAoaW9jdGwoZmQsIERJT0NHRElORk8sIChjaGFyICopJmxhYikgPj0gMCkpIHsKKwkJCXBwID0gJmxhYi5kX3BhcnRpdGlvbnNbcGFydF07CisJCQlpZiAocHAtPnBfc2l6ZSkgeworCQkJCSpyZXRibG9ja3MgPSBwcC0+cF9zaXplIC8gKGJsb2Nrc2l6ZSAvIDUxMik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKyNlbmRpZiAvKiBkZWZpbmVkKERJT0NHKikgKi8KKwl9CisjZW5kaWYgLyogSEFWRV9TWVNfRElTS0xBQkVMX0ggKi8KKworCXsKKwkJZXh0MmZzX3N0cnVjdF9zdGF0IHN0OworCisJCWlmIChleHQyZnNfZnN0YXQoZmQsICZzdCkgPT0gMCkKKwkJCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCQkJKnJldGJsb2NrcyA9IHN0LnN0X3NpemUgLyBibG9ja3NpemU7CisJCQkJZ290byBvdXQ7CisJCQl9CisJfQorCisJLyoKKwkgKiBPSywgd2UgY291bGRuJ3QgZmlndXJlIGl0IG91dCBieSB1c2luZyBhIHNwZWNpYWxpemVkIGlvY3RsLAorCSAqIHdoaWNoIGlzIGdlbmVyYWxseSB0aGUgYmVzdCB3YXkuICBTbyBkbyBiaW5hcnkgc2VhcmNoIHRvCisJICogZmluZCB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLgorCSAqLworCWxvdyA9IDA7CisJZm9yIChoaWdoID0gMTAyNDsgdmFsaWRfb2Zmc2V0KGZkLCBoaWdoKTsgaGlnaCAqPSAyKQorCQlsb3cgPSBoaWdoOworCXdoaWxlIChsb3cgPCBoaWdoIC0gMSkgeworCQljb25zdCBleHQyX2xvZmZfdCBtaWQgPSAobG93ICsgaGlnaCkgLyAyOworCisJCWlmICh2YWxpZF9vZmZzZXQgKGZkLCBtaWQpKQorCQkJbG93ID0gbWlkOworCQllbHNlCisJCQloaWdoID0gbWlkOworCX0KKwl2YWxpZF9vZmZzZXQoZmQsIDApOworCXNpemU2NCA9IGxvdyArIDE7CisJKnJldGJsb2NrcyA9IHNpemU2NCAvIGJsb2Nrc2l6ZTsKK291dDoKKwljbG9zZShmZCk7CisJcmV0dXJuIHJjOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgYmxvY2tzaXplLAorCQkJCSBibGtfdCAqcmV0YmxvY2tzKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJYmxrNjRfdAlibG9ja3M7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2RldmljZV9zaXplMihmaWxlLCBibG9ja3NpemUsICZibG9ja3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGJsb2NrcyA+PSAoMVVMTCA8PCAzMikpCisJCXJldHVybiBFRkJJRzsKKwkqcmV0YmxvY2tzID0gKGJsa190KSBibG9ja3M7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaWZkZWYgREVCVUcKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlibGtfdAlibG9ja3M7CisJaW50CXJldHZhbDsKKworCWlmIChhcmdjIDwgMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBkZXZpY2VcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUoYXJndlsxXSwgMTAyNCwgJmJsb2Nrcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19nZXRfZGV2aWNlX3NpemUiKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJEZXZpY2UgJXMgaGFzICV1IDFrIGJsb2Nrcy5cbiIsIGFyZ3ZbMV0sIGJsb2Nrcyk7CisJZXhpdCgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaV9ibG9jay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaV9ibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmMzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pX2Jsb2NrLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIGlfYmxvY2suYyAtLS0gTWFuYWdlIHRoZSBpX2Jsb2NrIGZpZWxkIGZvciBpX2Jsb2NrcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitlcnJjb2RlX3QgZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSBibGs2NF90IG51bV9ibG9ja3MpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGIgPSBpbm9kZS0+aV9ibG9ja3M7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpCisJCWIgKz0gKChsb25nIGxvbmcpIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpKSA8PCAzMjsKKworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIHx8CisJICAgICEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0hVR0VfRklMRV9GTCkpCisJICAgIG51bV9ibG9ja3MgKj0gZnMtPmJsb2Nrc2l6ZSAvIDUxMjsKKwludW1fYmxvY2tzICo9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKworCWIgKz0gbnVtX2Jsb2NrczsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkKKwkJaW5vZGUtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgPSBiID4+IDMyOworCWVsc2UgaWYgKGIgPiAweEZGRkZGRkZGKQorCQlyZXR1cm4gRU9WRVJGTE9XOworCWlub2RlLT5pX2Jsb2NrcyA9IGIgJiAweEZGRkZGRkZGOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2libGtfc3ViX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSBibGs2NF90IG51bV9ibG9ja3MpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGIgPSBpbm9kZS0+aV9ibG9ja3M7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpCisJCWIgKz0gKChsb25nIGxvbmcpIGlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpKSA8PCAzMjsKKworCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIHx8CisJICAgICEoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0hVR0VfRklMRV9GTCkpCisJICAgIG51bV9ibG9ja3MgKj0gZnMtPmJsb2Nrc2l6ZSAvIDUxMjsKKwludW1fYmxvY2tzICo9IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKworCWlmIChudW1fYmxvY2tzID4gYikKKwkJcmV0dXJuIEVPVkVSRkxPVzsKKworCWIgLT0gbnVtX2Jsb2NrczsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkKKwkJaW5vZGUtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgPSBiID4+IDMyOworCWlub2RlLT5pX2Jsb2NrcyA9IGIgJiAweEZGRkZGRkZGOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2libGtfc2V0KGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGJsazY0X3QgYikKK3sKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSB8fAorCSAgICAhKGlub2RlLT5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCQliICo9IGZzLT5ibG9ja3NpemUgLyA1MTI7CisJYiAqPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcyk7CisKKwlpbm9kZS0+aV9ibG9ja3MgPSBiICYgMHhGRkZGRkZGRjsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpCisJCWlub2RlLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpID0gYiA+PiAzMjsKKwllbHNlIGlmIChiID4+IDMyKQorCQlyZXR1cm4gRU9WRVJGTE9XOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaWNvdW50LmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pY291bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTk4MjRmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaWNvdW50LmMKQEAgLTAsMCArMSw4NDkgQEAKKy8qCisgKiBpY291bnQuYyAtLS0gYW4gZWZmaWNpZW50IGlub2RlIGNvdW50IGFic3RyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJ0ZGIuaCIKKworLyoKKyAqIFRoZSBkYXRhIHN0b3JhZ2Ugc3RyYXRlZ3kgdXNlZCBieSBpY291bnQgcmVsaWVzIG9uIHRoZSBvYnNlcnZhdGlvbgorICogdGhhdCBtb3N0IGlub2RlIGNvdW50cyBhcmUgZWl0aGVyIHplcm8gKGZvciBub24tYWxsb2NhdGVkIGlub2RlcyksCisgKiBvbmUgKGZvciBtb3N0IGZpbGVzKSwgYW5kIG9ubHkgYSBmZXcgdGhhdCBhcmUgdHdvIG9yIG1vcmUKKyAqIChkaXJlY3RvcmllcyBhbmQgZmlsZXMgdGhhdCBhcmUgbGlua2VkIHRvIG1vcmUgdGhhbiBvbmUgZGlyZWN0b3J5KS4KKyAqCisgKiBBbHNvLCBlMmZzY2sgdGVuZHMgdG8gbG9hZCB0aGUgaWNvdW50IGRhdGEgc2VxdWVudGlhbGx5LgorICoKKyAqIFNvLCB3ZSB1c2UgYW4gaW5vZGUgYml0bWFwIHRvIGluZGljYXRlIHdoaWNoIGlub2RlcyBoYXZlIGEgY291bnQgb2YKKyAqIG9uZSwgYW5kIHRoZW4gdXNlIGEgc29ydGVkIGxpc3QgdG8gc3RvcmUgdGhlIGNvdW50cyBmb3IgaW5vZGVzCisgKiB3aGljaCBhcmUgZ3JlYXRlciB0aGFuIG9uZS4KKyAqCisgKiBXZSBhbHNvIHVzZSBhbiBvcHRpb25hbCBiaXRtYXAgdG8gaW5kaWNhdGUgd2hpY2ggaW5vZGVzIGFyZSBhbHJlYWR5CisgKiBpbiB0aGUgc29ydGVkIGxpc3QsIHRvIHNwZWVkIHVwIHRoZSB1c2Ugb2YgdGhpcyBhYnN0cmFjdGlvbiBieQorICogZTJmc2NrJ3MgcGFzcyAyLiAgUGFzcyAyIGluY3JlbWVudHMgaW5vZGUgY291bnRzIGFzIGl0IGZpbmRzIHRoZW0sCisgKiBzbyB0aGlzIGV4dHJhIGJpdG1hcCBhdm9pZHMgc2VhcmNoaW5nIHRoZSBzb3J0ZWQgbGlzdCB0byBzZWUgaWYgYQorICogcGFydGljdWxhciBpbm9kZSBpcyBvbiB0aGUgc29ydGVkIGxpc3QgYWxyZWFkeS4KKyAqLworCitzdHJ1Y3QgZXh0Ml9pY291bnRfZWwgeworCWV4dDJfaW5vX3QJaW5vOworCV9fdTMyCQljb3VudDsKK307CisKK3N0cnVjdCBleHQyX2ljb3VudCB7CisJZXJyY29kZV90CQltYWdpYzsKKwlleHQyZnNfaW5vZGVfYml0bWFwCXNpbmdsZTsKKwlleHQyZnNfaW5vZGVfYml0bWFwCW11bHRpcGxlOworCWV4dDJfaW5vX3QJCWNvdW50OworCWV4dDJfaW5vX3QJCXNpemU7CisJZXh0Ml9pbm9fdAkJbnVtX2lub2RlczsKKwlleHQyX2lub190CQljdXJzb3I7CisJc3RydWN0IGV4dDJfaWNvdW50X2VsCSpsaXN0OworCXN0cnVjdCBleHQyX2ljb3VudF9lbAkqbGFzdF9sb29rdXA7CisJY2hhcgkJCSp0ZGJfZm47CisJVERCX0NPTlRFWFQJCSp0ZGI7Cit9OworCisvKgorICogV2Ugbm93IHVzZSBhIDMyLWJpdCBjb3VudGVyIGZpZWxkIGJlY2F1c2UgaXQgZG9lc24ndCBjb3N0IHVzCisgKiBhbnl0aGluZyBleHRyYSBmb3IgdGhlIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZSwgZHVlIHRvIGFsaWdubWVudAorICogcGFkZGluZy4gIEJ1dCB0aGVyZSdzIG5vIHBvaW50IGNoYW5naW5nIHRoZSBpbnRlcmZhY2UgaWYgbW9zdCBvZgorICogdGhlIHRpbWUgd2Ugb25seSBjYXJlIGlmIHRoZSBudW1iZXIgaXMgYmlnZ2VyIHRoYW4gNjUsMDAwIG9yIG5vdC4KKyAqIFNvIHVzZSB0aGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIHRvIHJldHVybiBhIDE2LWJpdCBjb3VudC4KKyAqLworI2RlZmluZSBpY291bnRfMTZfeGxhdGUoeCkgKCgoeCkgPiA2NTUwMCkgPyA2NTUwMCA6ICh4KSkKKwordm9pZCBleHQyZnNfZnJlZV9pY291bnQoZXh0Ml9pY291bnRfdCBpY291bnQpCit7CisJaWYgKCFpY291bnQpCisJCXJldHVybjsKKworCWljb3VudC0+bWFnaWMgPSAwOworCWlmIChpY291bnQtPmxpc3QpCisJCWV4dDJmc19mcmVlX21lbSgmaWNvdW50LT5saXN0KTsKKwlpZiAoaWNvdW50LT5zaW5nbGUpCisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChpY291bnQtPnNpbmdsZSk7CisJaWYgKGljb3VudC0+bXVsdGlwbGUpCisJCWV4dDJmc19mcmVlX2lub2RlX2JpdG1hcChpY291bnQtPm11bHRpcGxlKTsKKwlpZiAoaWNvdW50LT50ZGIpCisJCXRkYl9jbG9zZShpY291bnQtPnRkYik7CisJaWYgKGljb3VudC0+dGRiX2ZuKSB7CisJCXVubGluayhpY291bnQtPnRkYl9mbik7CisJCWZyZWUoaWNvdW50LT50ZGJfZm4pOworCX0KKworCWV4dDJmc19mcmVlX21lbSgmaWNvdW50KTsKK30KKworc3RhdGljIGVycmNvZGVfdCBhbGxvY19pY291bnQoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncywgZXh0Ml9pY291bnRfdCAqcmV0KQoreworCWV4dDJfaWNvdW50X3QJaWNvdW50OworCWVycmNvZGVfdAlyZXR2YWw7CisKKwkqcmV0ID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9pY291bnQpLCAmaWNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChpY291bnQsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pY291bnQpKTsKKworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAoZnMsICJpY291bnQiLCAmaWNvdW50LT5zaW5nbGUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKGZsYWdzICYgRVhUMl9JQ09VTlRfT1BUX0lOQ1JFTUVOVCkgeworCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfaW5vZGVfYml0bWFwKGZzLCAiaWNvdW50X2luYyIsCisJCQkJCQkgICAgICAmaWNvdW50LT5tdWx0aXBsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9IGVsc2UKKwkJaWNvdW50LT5tdWx0aXBsZSA9IDA7CisKKwlpY291bnQtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JQ09VTlQ7CisJaWNvdW50LT5udW1faW5vZGVzID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsKKworCSpyZXQgPSBpY291bnQ7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlleHQyZnNfZnJlZV9pY291bnQoaWNvdW50KTsKKwlyZXR1cm4ocmV0dmFsKTsKK30KKworc3RydWN0IHV1aWQgeworCV9fdTMyCXRpbWVfbG93OworCV9fdTE2CXRpbWVfbWlkOworCV9fdTE2CXRpbWVfaGlfYW5kX3ZlcnNpb247CisJX191MTYJY2xvY2tfc2VxOworCV9fdTgJbm9kZVs2XTsKK307CisKK3N0YXRpYyB2b2lkIHVucGFja191dWlkKHZvaWQgKmluLCBzdHJ1Y3QgdXVpZCAqdXUpCit7CisJX191OAkqcHRyID0gaW47CisJX191MzIJdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2xvdyA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX21pZCA9IHRtcDsKKworCXRtcCA9ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXV1LT50aW1lX2hpX2FuZF92ZXJzaW9uID0gdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPmNsb2NrX3NlcSA9IHRtcDsKKworCW1lbWNweSh1dS0+bm9kZSwgcHRyLCA2KTsKK30KKworc3RhdGljIHZvaWQgdXVpZF91bnBhcnNlKHZvaWQgKnV1LCBjaGFyICpvdXQpCit7CisJc3RydWN0IHV1aWQgdXVpZDsKKworCXVucGFja191dWlkKHV1LCAmdXVpZCk7CisJc3ByaW50ZihvdXQsCisJCSIlMDh4LSUwNHgtJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLAorCQl1dWlkLnRpbWVfbG93LCB1dWlkLnRpbWVfbWlkLCB1dWlkLnRpbWVfaGlfYW5kX3ZlcnNpb24sCisJCXV1aWQuY2xvY2tfc2VxID4+IDgsIHV1aWQuY2xvY2tfc2VxICYgMHhGRiwKKwkJdXVpZC5ub2RlWzBdLCB1dWlkLm5vZGVbMV0sIHV1aWQubm9kZVsyXSwKKwkJdXVpZC5ub2RlWzNdLCB1dWlkLm5vZGVbNF0sIHV1aWQubm9kZVs1XSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfY3JlYXRlX2ljb3VudF90ZGIoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKnRkYl9kaXIsCisJCQkJICAgaW50IGZsYWdzLCBleHQyX2ljb3VudF90ICpyZXQpCit7CisJZXh0Ml9pY291bnRfdAlpY291bnQ7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyIAkJKmZuLCB1dWlkWzQwXTsKKwlleHQyX2lub190CW51bV9pbm9kZXM7CisJaW50CQlmZDsKKworCXJldHZhbCA9IGFsbG9jX2ljb3VudChmcywgZmxhZ3MsICAmaWNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKHRkYl9kaXIpICsgNjQsICZmbik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJdXVpZF91bnBhcnNlKGZzLT5zdXBlci0+c191dWlkLCB1dWlkKTsKKwlzcHJpbnRmKGZuLCAiJXMvJXMtaWNvdW50LVhYWFhYWCIsIHRkYl9kaXIsIHV1aWQpOworCWZkID0gbWtzdGVtcChmbik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGZkOworCisJLyoKKwkgKiBUaGlzIGlzIGFuIG92ZXJlc3RpbWF0ZSBvZiB0aGUgc2l6ZSB0aGF0IHdlIHdpbGwgbmVlZDsgdGhlCisJICogaWRlYWwgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB1c2VkIGlub2RlcyB3aXRoIGEgY291bnQKKwkgKiBncmVhdGVyIHRoYW4gMS4gIE9UT0ggdGhlIHRpbWVzIHdoZW4gd2UgcmVhbGx5IG5lZWQgdGhpcyBpcworCSAqIHdpdGggdGhlIGJhY2t1cCBwcm9ncmFtcyB0aGF0IHVzZSBsb3RzIG9mIGhhcmQgbGlua3MsIGluCisJICogd2hpY2ggY2FzZSB0aGUgbnVtYmVyIG9mIGlub2RlcyBpbiB1c2UgYXBwcm9hY2hlcyB0aGUgaWRlYWwKKwkgKiB2YWx1ZS4KKwkgKi8KKwludW1faW5vZGVzID0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAtIGZzLT5zdXBlci0+c19mcmVlX2lub2Rlc19jb3VudDsKKworCWljb3VudC0+dGRiX2ZuID0gZm47CisJaWNvdW50LT50ZGIgPSB0ZGJfb3BlbihmbiwgbnVtX2lub2RlcywgVERCX05PTE9DSyB8IFREQl9OT1NZTkMsCisJCQkgICAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworCWlmIChpY291bnQtPnRkYikgeworCQljbG9zZShmZCk7CisJCSpyZXQgPSBpY291bnQ7CisJCXJldHVybiAwOworCX0KKworCXJldHZhbCA9IGVycm5vOworCWNsb3NlKGZkKTsKKworZXJyb3V0OgorCWV4dDJmc19mcmVlX2ljb3VudChpY291bnQpOworCXJldHVybihyZXR2YWwpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9pY291bnQyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzaXplLAorCQkJCWV4dDJfaWNvdW50X3QgaGludCwgZXh0Ml9pY291bnRfdCAqcmV0KQoreworCWV4dDJfaWNvdW50X3QJaWNvdW50OworCWVycmNvZGVfdAlyZXR2YWw7CisJc2l6ZV90CQlieXRlczsKKwlleHQyX2lub190CWk7CisKKwlpZiAoaGludCkgeworCQlFWFQyX0NIRUNLX01BR0lDKGhpbnQsIEVYVDJfRVRfTUFHSUNfSUNPVU5UKTsKKwkJaWYgKGhpbnQtPnNpemUgPiBzaXplKQorCQkJc2l6ZSA9IChzaXplX3QpIGhpbnQtPnNpemU7CisJfQorCisJcmV0dmFsID0gYWxsb2NfaWNvdW50KGZzLCBmbGFncywgJmljb3VudCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChzaXplKSB7CisJCWljb3VudC0+c2l6ZSA9IHNpemU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRmlndXJlIG91dCBob3cgbWFueSBzcGVjaWFsIGNhc2UgaW5vZGUgY291bnRzIHdlIHdpbGwKKwkJICogaGF2ZS4gIFdlIGtub3cgd2Ugd2lsbCBuZWVkIG9uZSBmb3IgZWFjaCBkaXJlY3Rvcnk7CisJCSAqIHdlIGFsc28gbmVlZCB0byByZXNlcnZlIHNvbWUgZXh0cmEgcm9vbSBmb3IgZmlsZSBsaW5rcworCQkgKi8KKwkJcmV0dmFsID0gZXh0MmZzX2dldF9udW1fZGlycyhmcywgJmljb3VudC0+c2l6ZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJaWNvdW50LT5zaXplICs9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgLyA1MDsKKwl9CisKKwlieXRlcyA9IChzaXplX3QpIChpY291bnQtPnNpemUgKiBzaXplb2Yoc3RydWN0IGV4dDJfaWNvdW50X2VsKSk7CisjaWYgMAorCXByaW50ZigiSWNvdW50IGFsbG9jYXRlZCAldSBlbnRyaWVzLCAlZCBieXRlcy5cbiIsCisJICAgICAgIGljb3VudC0+c2l6ZSwgYnl0ZXMpOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShpY291bnQtPnNpemUsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pY291bnRfZWwpLAorCQkJICZpY291bnQtPmxpc3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChpY291bnQtPmxpc3QsIDAsIGJ5dGVzKTsKKworCWljb3VudC0+Y291bnQgPSAwOworCWljb3VudC0+Y3Vyc29yID0gMDsKKworCS8qCisJICogUG9wdWxhdGUgdGhlIHNvcnRlZCBsaXN0IHdpdGggdGhvc2UgZW50cmllcyB3aGljaCB3ZXJlCisJICogZm91bmQgaW4gdGhlIGhpbnQgaWNvdW50IChzaW5jZSB0aG9zZSBhcmUgb25lcyB3aGljaCB3aWxsCisJICogbGlrZWx5IG5lZWQgdG8gYmUgaW4gdGhlIHNvcnRlZCBsaXN0IHRoaXMgdGltZSBhcm91bmQpLgorCSAqLworCWlmIChoaW50KSB7CisJCWZvciAoaT0wOyBpIDwgaGludC0+Y291bnQ7IGkrKykKKwkJCWljb3VudC0+bGlzdFtpXS5pbm8gPSBoaW50LT5saXN0W2ldLmlubzsKKwkJaWNvdW50LT5jb3VudCA9IGhpbnQtPmNvdW50OworCX0KKworCSpyZXQgPSBpY291bnQ7CisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlleHQyZnNfZnJlZV9pY291bnQoaWNvdW50KTsKKwlyZXR1cm4ocmV0dmFsKTsKK30KKworZXJyY29kZV90IGV4dDJmc19jcmVhdGVfaWNvdW50KGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUsCisJCQkgICAgICAgZXh0Ml9pY291bnRfdCAqcmV0KQoreworCXJldHVybiBleHQyZnNfY3JlYXRlX2ljb3VudDIoZnMsIGZsYWdzLCBzaXplLCAwLCByZXQpOworfQorCisvKgorICogaW5zZXJ0X2ljb3VudF9lbCgpIC0tLSBJbnNlcnQgYSBuZXcgZW50cnkgaW50byB0aGUgc29ydGVkIGxpc3QgYXQgYQorICogCXNwZWNpZmllZCBwb3NpdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBleHQyX2ljb3VudF9lbCAqaW5zZXJ0X2ljb3VudF9lbChleHQyX2ljb3VudF90IGljb3VudCwKKwkJCQkJICAgIGV4dDJfaW5vX3QgaW5vLCBpbnQgcG9zKQoreworCXN0cnVjdCBleHQyX2ljb3VudF9lbCAJKmVsOworCWVycmNvZGVfdAkJcmV0dmFsOworCWV4dDJfaW5vX3QJCW5ld19zaXplID0gMDsKKwlpbnQJCQludW07CisKKwlpZiAoaWNvdW50LT5sYXN0X2xvb2t1cCAmJiBpY291bnQtPmxhc3RfbG9va3VwLT5pbm8gPT0gaW5vKQorCQlyZXR1cm4gaWNvdW50LT5sYXN0X2xvb2t1cDsKKworCWlmIChpY291bnQtPmNvdW50ID49IGljb3VudC0+c2l6ZSkgeworCQlpZiAoaWNvdW50LT5jb3VudCkgeworCQkJbmV3X3NpemUgPSBpY291bnQtPmxpc3RbKHVuc2lnbmVkKWljb3VudC0+Y291bnQtMV0uaW5vOworCQkJbmV3X3NpemUgPSAoZXh0Ml9pbm9fdCkgKGljb3VudC0+Y291bnQgKgorCQkJCSgoZmxvYXQpIGljb3VudC0+bnVtX2lub2RlcyAvIG5ld19zaXplKSk7CisJCX0KKwkJaWYgKG5ld19zaXplIDwgKGljb3VudC0+c2l6ZSArIDEwMCkpCisJCQluZXdfc2l6ZSA9IGljb3VudC0+c2l6ZSArIDEwMDsKKyNpZiAwCisJCXByaW50ZigiUmVhbGxvY2F0aW5nIGljb3VudCAldSBlbnRyaWVzLi4uXG4iLCBuZXdfc2l6ZSk7CisjZW5kaWYKKwkJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9tZW0oKHNpemVfdCkgaWNvdW50LT5zaXplICoKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBleHQyX2ljb3VudF9lbCksCisJCQkJCSAgIChzaXplX3QpIG5ld19zaXplICoKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBleHQyX2ljb3VudF9lbCksCisJCQkJCSAgICZpY291bnQtPmxpc3QpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIDA7CisJCWljb3VudC0+c2l6ZSA9IG5ld19zaXplOworCX0KKwludW0gPSAoaW50KSBpY291bnQtPmNvdW50IC0gcG9zOworCWlmIChudW0gPCAwKQorCQlyZXR1cm4gMDsJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlmIChudW0pIHsKKwkJbWVtbW92ZSgmaWNvdW50LT5saXN0W3BvcysxXSwgJmljb3VudC0+bGlzdFtwb3NdLAorCQkJc2l6ZW9mKHN0cnVjdCBleHQyX2ljb3VudF9lbCkgKiBudW0pOworCX0KKwlpY291bnQtPmNvdW50Kys7CisJZWwgPSAmaWNvdW50LT5saXN0W3Bvc107CisJZWwtPmNvdW50ID0gMDsKKwllbC0+aW5vID0gaW5vOworCWljb3VudC0+bGFzdF9sb29rdXAgPSBlbDsKKwlyZXR1cm4gZWw7Cit9CisKKy8qCisgKiBnZXRfaWNvdW50X2VsKCkgLS0tIGdpdmVuIGFuIGlub2RlIG51bWJlciwgdHJ5IHRvIGZpbmQgaWNvdW50CisgKiAJaW5mb3JtYXRpb24gaW4gdGhlIHNvcnRlZCBsaXN0LiAgSWYgdGhlIGNyZWF0ZSBmbGFnIGlzIHNldCwKKyAqIAlhbmQgd2UgY2FuJ3QgZmluZCBhbiBlbnRyeSwgY3JlYXRlIG9uZSBpbiB0aGUgc29ydGVkIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pY291bnRfZWwgKmdldF9pY291bnRfZWwoZXh0Ml9pY291bnRfdCBpY291bnQsCisJCQkJCSAgICBleHQyX2lub190IGlubywgaW50IGNyZWF0ZSkKK3sKKwlpbnQJbG93LCBoaWdoLCBtaWQ7CisKKwlpZiAoIWljb3VudCB8fCAhaWNvdW50LT5saXN0KQorCQlyZXR1cm4gMDsKKworCWlmIChjcmVhdGUgJiYgKChpY291bnQtPmNvdW50ID09IDApIHx8CisJCSAgICAgICAoaW5vID4gaWNvdW50LT5saXN0Wyh1bnNpZ25lZClpY291bnQtPmNvdW50LTFdLmlubykpKSB7CisJCXJldHVybiBpbnNlcnRfaWNvdW50X2VsKGljb3VudCwgaW5vLCAodW5zaWduZWQpIGljb3VudC0+Y291bnQpOworCX0KKwlpZiAoaWNvdW50LT5jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChpY291bnQtPmN1cnNvciA+PSBpY291bnQtPmNvdW50KQorCQlpY291bnQtPmN1cnNvciA9IDA7CisJaWYgKGlubyA9PSBpY291bnQtPmxpc3RbaWNvdW50LT5jdXJzb3JdLmlubykKKwkJcmV0dXJuICZpY291bnQtPmxpc3RbaWNvdW50LT5jdXJzb3IrK107CisjaWYgMAorCXByaW50ZigiTm9uLWN1cnNvciBnZXRfaWNvdW50X2VsOiAldVxuIiwgaW5vKTsKKyNlbmRpZgorCWxvdyA9IDA7CisJaGlnaCA9IChpbnQpIGljb3VudC0+Y291bnQtMTsKKwl3aGlsZSAobG93IDw9IGhpZ2gpIHsKKwkJbWlkID0gKCh1bnNpZ25lZClsb3cgKyAodW5zaWduZWQpaGlnaCkgPj4gMTsKKwkJaWYgKGlubyA9PSBpY291bnQtPmxpc3RbbWlkXS5pbm8pIHsKKwkJCWljb3VudC0+Y3Vyc29yID0gbWlkKzE7CisJCQlyZXR1cm4gJmljb3VudC0+bGlzdFttaWRdOworCQl9CisJCWlmIChpbm8gPCBpY291bnQtPmxpc3RbbWlkXS5pbm8pCisJCQloaWdoID0gbWlkLTE7CisJCWVsc2UKKwkJCWxvdyA9IG1pZCsxOworCX0KKwkvKgorCSAqIElmIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGVudHJ5LCBpdCBzaG91bGQgYmUgcmlnaHQgYXQKKwkgKiBsb3cgKHdoZXJlIGhpZ2ggd2lsbCBiZSBsZWZ0IGF0IGxvdy0xKS4KKwkgKi8KKwlpZiAoY3JlYXRlKQorCQlyZXR1cm4gaW5zZXJ0X2ljb3VudF9lbChpY291bnQsIGlubywgbG93KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBzZXRfaW5vZGVfY291bnQoZXh0Ml9pY291bnRfdCBpY291bnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBfX3UzMiBjb3VudCkKK3sKKwlzdHJ1Y3QgZXh0Ml9pY291bnRfZWwgCSplbDsKKwlUREJfREFUQSBrZXksIGRhdGE7CisKKwlpZiAoaWNvdW50LT50ZGIpIHsKKwkJa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKSAmaW5vOworCQlrZXkuZHNpemUgPSBzaXplb2YoZXh0Ml9pbm9fdCk7CisJCWRhdGEuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZjb3VudDsKKwkJZGF0YS5kc2l6ZSA9IHNpemVvZihfX3UzMik7CisJCWlmIChjb3VudCkgeworCQkJaWYgKHRkYl9zdG9yZShpY291bnQtPnRkYiwga2V5LCBkYXRhLCBUREJfUkVQTEFDRSkpCisJCQkJcmV0dXJuIHRkYl9lcnJvcihpY291bnQtPnRkYikgKworCQkJCQlFWFQyX0VUX1REQl9TVUNDRVNTOworCQl9IGVsc2UgeworCQkJaWYgKHRkYl9kZWxldGUoaWNvdW50LT50ZGIsIGtleSkpCisJCQkJcmV0dXJuIHRkYl9lcnJvcihpY291bnQtPnRkYikgKworCQkJCQlFWFQyX0VUX1REQl9TVUNDRVNTOworCQl9CisJCXJldHVybiAwOworCX0KKworCWVsID0gZ2V0X2ljb3VudF9lbChpY291bnQsIGlubywgMSk7CisJaWYgKCFlbCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCisJZWwtPmNvdW50ID0gY291bnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgZ2V0X2lub2RlX2NvdW50KGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCQkgX191MzIgKmNvdW50KQoreworCXN0cnVjdCBleHQyX2ljb3VudF9lbCAJKmVsOworCVREQl9EQVRBIGtleSwgZGF0YTsKKworCWlmIChpY291bnQtPnRkYikgeworCQlrZXkuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZpbm87CisJCWtleS5kc2l6ZSA9IHNpemVvZihleHQyX2lub190KTsKKworCQlkYXRhID0gdGRiX2ZldGNoKGljb3VudC0+dGRiLCBrZXkpOworCQlpZiAoZGF0YS5kcHRyID09IE5VTEwpIHsKKwkJCSpjb3VudCA9IDA7CisJCQlyZXR1cm4gdGRiX2Vycm9yKGljb3VudC0+dGRiKSArIEVYVDJfRVRfVERCX1NVQ0NFU1M7CisJCX0KKworCQkqY291bnQgPSAqKChfX3UzMiAqKSBkYXRhLmRwdHIpOworCQlmcmVlKGRhdGEuZHB0cik7CisJCXJldHVybiAwOworCX0KKwllbCA9IGdldF9pY291bnRfZWwoaWNvdW50LCBpbm8sIDApOworCWlmICghZWwpIHsKKwkJKmNvdW50ID0gMDsKKwkJcmV0dXJuIEVOT0VOVDsKKwl9CisKKwkqY291bnQgPSBlbC0+Y291bnQ7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaWNvdW50X3ZhbGlkYXRlKGV4dDJfaWNvdW50X3QgaWNvdW50LCBGSUxFICpvdXQpCit7CisJZXJyY29kZV90CXJldCA9IDA7CisJdW5zaWduZWQgaW50CWk7CisJY29uc3QgY2hhciAqYmFkID0gImJhZCBpY291bnQiOworCisJRVhUMl9DSEVDS19NQUdJQyhpY291bnQsIEVYVDJfRVRfTUFHSUNfSUNPVU5UKTsKKworCWlmIChpY291bnQtPmNvdW50ID4gaWNvdW50LT5zaXplKSB7CisJCWZwcmludGYob3V0LCAiJXM6IGNvdW50ID4gc2l6ZVxuIiwgYmFkKTsKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwl9CisJZm9yIChpPTE7IGkgPCBpY291bnQtPmNvdW50OyBpKyspIHsKKwkJaWYgKGljb3VudC0+bGlzdFtpLTFdLmlubyA+PSBpY291bnQtPmxpc3RbaV0uaW5vKSB7CisJCQlmcHJpbnRmKG91dCwgIiVzOiBsaXN0WyVkXS5pbm89JXUsIGxpc3RbJWRdLmlubz0ldVxuIiwKKwkJCQliYWQsIGktMSwgaWNvdW50LT5saXN0W2ktMV0uaW5vLAorCQkJCWksIGljb3VudC0+bGlzdFtpXS5pbm8pOworCQkJcmV0ID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaWNvdW50X2ZldGNoKGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywgX191MTYgKnJldCkKK3sKKwlfX3UzMgl2YWw7CisJRVhUMl9DSEVDS19NQUdJQyhpY291bnQsIEVYVDJfRVRfTUFHSUNfSUNPVU5UKTsKKworCWlmICghaW5vIHx8IChpbm8gPiBpY291bnQtPm51bV9pbm9kZXMpKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubykpIHsKKwkJKnJldCA9IDE7CisJCXJldHVybiAwOworCX0KKwlpZiAoaWNvdW50LT5tdWx0aXBsZSAmJgorCSAgICAhZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pKSB7CisJCSpyZXQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJZ2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAmdmFsKTsKKwkqcmV0ID0gaWNvdW50XzE2X3hsYXRlKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaWNvdW50X2luY3JlbWVudChleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkJICBfX3UxNiAqcmV0KQoreworCV9fdTMyCQkJY3Vycl92YWx1ZTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaWNvdW50LCBFWFQyX0VUX01BR0lDX0lDT1VOVCk7CisKKwlpZiAoIWlubyB8fCAoaW5vID4gaWNvdW50LT5udW1faW5vZGVzKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pKSB7CisJCS8qCisJCSAqIElmIHRoZSBleGlzdGluZyBjb3VudCBpcyAxLCB0aGVuIHdlIGtub3cgdGhlcmUgaXMKKwkJICogbm8gZW50cnkgaW4gdGhlIGxpc3QuCisJCSAqLworCQlpZiAoc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAyKSkKKwkJCXJldHVybiBFWFQyX0VUX05PX01FTU9SWTsKKwkJY3Vycl92YWx1ZSA9IDI7CisJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKTsKKwl9IGVsc2UgaWYgKGljb3VudC0+bXVsdGlwbGUpIHsKKwkJLyoKKwkJICogVGhlIGNvdW50IGlzIGVpdGhlciB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiAxOyBpZiB0aGUKKwkJICogaW5vZGUgaXMgc2V0IGluIGljb3VudC0+bXVsdGlwbGUsIHRoZW4gdGhlcmUgc2hvdWxkCisJCSAqIGJlIGFuIGVudHJ5IGluIHRoZSBsaXN0LCBzbyB3ZSBuZWVkIHRvIGZpeCBpdC4KKwkJICovCisJCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubykpIHsKKwkJCWdldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgJmN1cnJfdmFsdWUpOworCQkJY3Vycl92YWx1ZSsrOworCQkJaWYgKHNldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgY3Vycl92YWx1ZSkpCisJCQkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBjb3VudCB3YXMgemVybzsgbWFyayB0aGUgc2luZ2xlIGJpdG1hcAorCQkJICogYW5kIHJldHVybi4KKwkJCSAqLworCQkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKTsKKwkJCWlmIChyZXQpCisJCQkJKnJldCA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBjb3VudCBpcyBlaXRoZXIgemVybyBvciBncmVhdGVyIHRoYW4gMTsgdHJ5IHRvCisJCSAqIGZpbmQgYW4gZW50cnkgaW4gdGhlIGxpc3QgdG8gZGV0ZXJtaW5lIHdoaWNoLgorCQkgKi8KKwkJZ2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAmY3Vycl92YWx1ZSk7CisJCWN1cnJfdmFsdWUrKzsKKwkJaWYgKHNldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgY3Vycl92YWx1ZSkpCisJCQlyZXR1cm4gRVhUMl9FVF9OT19NRU1PUlk7CisJfQorCWlmIChpY291bnQtPm11bHRpcGxlKQorCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisJaWYgKHJldCkKKwkJKnJldCA9IGljb3VudF8xNl94bGF0ZShjdXJyX3ZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19pY291bnRfZGVjcmVtZW50KGV4dDJfaWNvdW50X3QgaWNvdW50LCBleHQyX2lub190IGlubywKKwkJCQkgIF9fdTE2ICpyZXQpCit7CisJX191MzIJCQljdXJyX3ZhbHVlOworCisJaWYgKCFpbm8gfHwgKGlubyA+IGljb3VudC0+bnVtX2lub2RlcykpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlFWFQyX0NIRUNLX01BR0lDKGljb3VudCwgRVhUMl9FVF9NQUdJQ19JQ09VTlQpOworCisJaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoaWNvdW50LT5zaW5nbGUsIGlubykpIHsKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCQlpZiAoaWNvdW50LT5tdWx0aXBsZSkKKwkJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pOworCQllbHNlIHsKKwkJCXNldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgMCk7CisJCX0KKwkJaWYgKHJldCkKKwkJCSpyZXQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaWNvdW50LT5tdWx0aXBsZSAmJgorCSAgICAhZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJZ2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCAmY3Vycl92YWx1ZSk7CisJaWYgKCFjdXJyX3ZhbHVlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWN1cnJfdmFsdWUtLTsKKwlpZiAoc2V0X2lub2RlX2NvdW50KGljb3VudCwgaW5vLCBjdXJyX3ZhbHVlKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCisJaWYgKGN1cnJfdmFsdWUgPT0gMSkKKwkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKTsKKwlpZiAoKGN1cnJfdmFsdWUgPT0gMCkgJiYgaWNvdW50LT5tdWx0aXBsZSkKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+bXVsdGlwbGUsIGlubyk7CisKKwlpZiAocmV0KQorCQkqcmV0ID0gaWNvdW50XzE2X3hsYXRlKGN1cnJfdmFsdWUpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ljb3VudF9zdG9yZShleHQyX2ljb3VudF90IGljb3VudCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgICBfX3UxNiBjb3VudCkKK3sKKwlpZiAoIWlubyB8fCAoaW5vID4gaWNvdW50LT5udW1faW5vZGVzKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoaWNvdW50LCBFWFQyX0VUX01BR0lDX0lDT1VOVCk7CisKKwlpZiAoY291bnQgPT0gMSkgeworCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCQlpZiAoaWNvdW50LT5tdWx0aXBsZSkKKwkJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNvdW50ID09IDApIHsKKwkJZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAyKGljb3VudC0+c2luZ2xlLCBpbm8pOworCQlpZiAoaWNvdW50LT5tdWx0aXBsZSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBpY291bnQtPm11bHRpcGxlIGJpdG1hcCBpcyBlbmFibGVkLAorCQkJICogd2UgY2FuIGp1c3QgY2xlYXIgYm90aCBiaXRtYXBzIGFuZCB3ZSdyZSBkb25lCisJCQkgKi8KKwkJCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pOworCQl9IGVsc2UKKwkJCXNldF9pbm9kZV9jb3VudChpY291bnQsIGlubywgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzZXRfaW5vZGVfY291bnQoaWNvdW50LCBpbm8sIGNvdW50KSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCWV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPnNpbmdsZSwgaW5vKTsKKwlpZiAoaWNvdW50LT5tdWx0aXBsZSkKKwkJZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwMihpY291bnQtPm11bHRpcGxlLCBpbm8pOworCXJldHVybiAwOworfQorCitleHQyX2lub190IGV4dDJmc19nZXRfaWNvdW50X3NpemUoZXh0Ml9pY291bnRfdCBpY291bnQpCit7CisJaWYgKCFpY291bnQgfHwgaWNvdW50LT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0lDT1VOVCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaWNvdW50LT5zaXplOworfQorCisjaWZkZWYgREVCVUcKKworZXh0Ml9maWxzeXMJdGVzdF9mczsKK2V4dDJfaWNvdW50X3QJaWNvdW50OworCisjZGVmaW5lIEVYSVQJCTB4MDAKKyNkZWZpbmUgRkVUQ0gJCTB4MDEKKyNkZWZpbmUgU1RPUkUJCTB4MDIKKyNkZWZpbmUgSU5DUkVNRU5UCTB4MDMKKyNkZWZpbmUgREVDUkVNRU5UCTB4MDQKKworc3RydWN0IHRlc3RfcHJvZ3JhbSB7CisJaW50CQljbWQ7CisJZXh0Ml9pbm9fdAlpbm87CisJX191MTYJCWFyZzsKKwlfX3UxNgkJZXhwZWN0ZWQ7Cit9OworCitzdHJ1Y3QgdGVzdF9wcm9ncmFtIHByb2dbXSA9IHsKKwl7IFNUT1JFLCA0MiwgNDIsIDQyIH0sCisJeyBTVE9SRSwgMSwgIDEsIDEgfSwKKwl7IFNUT1JFLCAyLCAgMiwgMiB9LAorCXsgU1RPUkUsIDMsICAzLCAzIH0sCisJeyBTVE9SRSwgMTAsIDEsIDEgfSwKKwl7IFNUT1JFLCA0MiwgMCwgMCB9LAorCXsgSU5DUkVNRU5ULCA1LCAwLCAxIH0sCisJeyBJTkNSRU1FTlQsIDUsIDAsIDIgfSwKKwl7IElOQ1JFTUVOVCwgNSwgMCwgMyB9LAorCXsgSU5DUkVNRU5ULCA1LCAwLCA0IH0sCisJeyBERUNSRU1FTlQsIDUsIDAsIDMgfSwKKwl7IERFQ1JFTUVOVCwgNSwgMCwgMiB9LAorCXsgREVDUkVNRU5ULCA1LCAwLCAxIH0sCisJeyBERUNSRU1FTlQsIDUsIDAsIDAgfSwKKwl7IEZFVENILCAxMCwgMCwgMSB9LAorCXsgRkVUQ0gsIDEsIDAsIDEgfSwKKwl7IEZFVENILCAyLCAwLCAyIH0sCisJeyBGRVRDSCwgMywgMCwgMyB9LAorCXsgSU5DUkVNRU5ULCAxLCAwLCAyIH0sCisJeyBERUNSRU1FTlQsIDIsIDAsIDEgfSwKKwl7IERFQ1JFTUVOVCwgMiwgMCwgMCB9LAorCXsgRkVUQ0gsIDEyLCAwLCAwIH0sCisJeyBFWElULCAwLCAwLCAwIH0KK307CisKK3N0cnVjdCB0ZXN0X3Byb2dyYW0gZXh0ZW5kZWRbXSA9IHsKKwl7IFNUT1JFLCAxLCAgMSwgMSB9LAorCXsgU1RPUkUsIDIsICAyLCAyIH0sCisJeyBTVE9SRSwgMywgIDMsIDMgfSwKKwl7IFNUT1JFLCA0LCAgNCwgNCB9LAorCXsgU1RPUkUsIDUsICA1LCA1IH0sCisJeyBTVE9SRSwgNiwgIDEsIDEgfSwKKwl7IFNUT1JFLCA3LCAgMiwgMiB9LAorCXsgU1RPUkUsIDgsICAzLCAzIH0sCisJeyBTVE9SRSwgOSwgIDQsIDQgfSwKKwl7IFNUT1JFLCAxMCwgNSwgNSB9LAorCXsgU1RPUkUsIDExLCAxLCAxIH0sCisJeyBTVE9SRSwgMTIsIDIsIDIgfSwKKwl7IFNUT1JFLCAxMywgMywgMyB9LAorCXsgU1RPUkUsIDE0LCA0LCA0IH0sCisJeyBTVE9SRSwgMTUsIDUsIDUgfSwKKwl7IFNUT1JFLCAxNiwgMSwgMSB9LAorCXsgU1RPUkUsIDE3LCAyLCAyIH0sCisJeyBTVE9SRSwgMTgsIDMsIDMgfSwKKwl7IFNUT1JFLCAxOSwgNCwgNCB9LAorCXsgU1RPUkUsIDIwLCA1LCA1IH0sCisJeyBTVE9SRSwgMjEsIDEsIDEgfSwKKwl7IFNUT1JFLCAyMiwgMiwgMiB9LAorCXsgU1RPUkUsIDIzLCAzLCAzIH0sCisJeyBTVE9SRSwgMjQsIDQsIDQgfSwKKwl7IFNUT1JFLCAyNSwgNSwgNSB9LAorCXsgU1RPUkUsIDI2LCAxLCAxIH0sCisJeyBTVE9SRSwgMjcsIDIsIDIgfSwKKwl7IFNUT1JFLCAyOCwgMywgMyB9LAorCXsgU1RPUkUsIDI5LCA0LCA0IH0sCisJeyBTVE9SRSwgMzAsIDUsIDUgfSwKKwl7IEVYSVQsIDAsIDAsIDAgfQorfTsKKworLyoKKyAqIFNldHVwIHRoZSB2YXJpYWJsZXMgZm9yIGRvaW5nIHRoZSBpbm9kZSBzY2FuIHRlc3QuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKworCWluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSgpOworCisJbWVtc2V0KCZwYXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJnBhcmFtLCAxMjAwMCk7CisKKwlyZXR2YWwgPSBleHQyZnNfaW5pdGlhbGl6ZSgidGVzdCBmcyIsIEVYVDJfRkxBR182NEJJVFMsICZwYXJhbSwKKwkJCQkgICB0ZXN0X2lvX21hbmFnZXIsICZ0ZXN0X2ZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIndoaWxlIGluaXRpYWxpemluZyBmaWxlc3lzdGVtIik7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV90YWJsZXModGVzdF9mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCSJ3aGlsZSBhbGxvY2F0aW5nIHRhYmxlcyBmb3IgdGVzdCBmaWxlc3lzdGVtIik7CisJCWV4aXQoMSk7CisJfQorfQorCitpbnQgcnVuX3Rlc3QoaW50IGZsYWdzLCBpbnQgc2l6ZSwgY2hhciAqZGlyLCBzdHJ1Y3QgdGVzdF9wcm9ncmFtICpwcm9nKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pY291bnRfdAlpY291bnQ7CisJc3RydWN0IHRlc3RfcHJvZ3JhbSAqcGM7CisJX191MTYJCXJlc3VsdDsKKwlpbnQJCXByb2JsZW0gPSAwOworCisJaWYgKGRpcikgeworCQlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2ljb3VudF90ZGIodGVzdF9mcywgZGlyLAorCQkJCQkJICBmbGFncywgJmljb3VudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBjcmVhdGluZyBpY291bnQgdXNpbmcgdGRiIik7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9pY291bnQyKHRlc3RfZnMsIGZsYWdzLCBzaXplLCAwLAorCQkJCQkgICAgICAgJmljb3VudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaWNvdW50Iik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWZvciAocGMgPSBwcm9nOyBwYy0+Y21kICE9IEVYSVQ7IHBjKyspIHsKKwkJc3dpdGNoIChwYy0+Y21kKSB7CisJCWNhc2UgRkVUQ0g6CisJCQlwcmludGYoImljb3VudF9mZXRjaCgldSkgPSAiLCBwYy0+aW5vKTsKKwkJCWJyZWFrOworCQljYXNlIFNUT1JFOgorCQkJcmV0dmFsID0gZXh0MmZzX2ljb3VudF9zdG9yZShpY291bnQsIHBjLT5pbm8sIHBjLT5hcmcpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLAorCQkJCQkid2hpbGUgY2FsbGluZyBpY291bnRfc3RvcmUiKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJcHJpbnRmKCJpY291bnRfc3RvcmUoJXUsICV1KSA9ICIsIHBjLT5pbm8sIHBjLT5hcmcpOworCQkJYnJlYWs7CisJCWNhc2UgSU5DUkVNRU5UOgorCQkJcmV0dmFsID0gZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQoaWNvdW50LCBwYy0+aW5vLCAwKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKCJydW5fdGVzdCIsIHJldHZhbCwKKwkJCQkJIndoaWxlIGNhbGxpbmcgaWNvdW50X2luY3JlbWVudCIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlwcmludGYoImljb3VudF9pbmNyZW1lbnQoJXUpID0gIiwgcGMtPmlubyk7CisJCQlicmVhazsKKwkJY2FzZSBERUNSRU1FTlQ6CisJCQlyZXR2YWwgPSBleHQyZnNfaWNvdW50X2RlY3JlbWVudChpY291bnQsIHBjLT5pbm8sIDApOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIoInJ1bl90ZXN0IiwgcmV0dmFsLAorCQkJCQkid2hpbGUgY2FsbGluZyBpY291bnRfZGVjcmVtZW50Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCXByaW50ZigiaWNvdW50X2RlY3JlbWVudCgldSkgPSAiLCBwYy0+aW5vKTsKKwkJCWJyZWFrOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19pY291bnRfZmV0Y2goaWNvdW50LCBwYy0+aW5vLCAmcmVzdWx0KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigicnVuX3Rlc3QiLCByZXR2YWwsCisJCQkJIndoaWxlIGNhbGxpbmcgaWNvdW50X2ZldGNoIik7CisJCQlleGl0KDEpOworCQl9CisJCXByaW50ZigiJXUgKCVzKVxuIiwgcmVzdWx0LCAocmVzdWx0ID09IHBjLT5leHBlY3RlZCkgPworCQkgICAgICAgIk9LIiA6ICJOT1QgT0siKTsKKwkJaWYgKHJlc3VsdCAhPSBwYy0+ZXhwZWN0ZWQpCisJCQlwcm9ibGVtKys7CisJfQorCXByaW50ZigiaWNvdW50IHNpemUgaXMgJXVcbiIsIGV4dDJmc19nZXRfaWNvdW50X3NpemUoaWNvdW50KSk7CisJcmV0dmFsID0gZXh0MmZzX2ljb3VudF92YWxpZGF0ZShpY291bnQsIHN0ZG91dCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJydW5fdGVzdCIsIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgaWNvdW50X3ZhbGlkYXRlIik7CisJCWV4aXQoMSk7CisJfQorCWV4dDJmc19mcmVlX2ljb3VudChpY291bnQpOworCXJldHVybiBwcm9ibGVtOworfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmFpbGVkID0gMDsKKworCXNldHVwKCk7CisJcHJpbnRmKCJTdGFuZGFyZCBpY291bnQgcnVuOlxuIik7CisJZmFpbGVkICs9IHJ1bl90ZXN0KDAsIDAsIDAsIHByb2cpOworCXByaW50ZigiXG5NdWx0aXBsZSBiaXRtYXAgdGVzdDpcbiIpOworCWZhaWxlZCArPSBydW5fdGVzdChFWFQyX0lDT1VOVF9PUFRfSU5DUkVNRU5ULCAwLCAwLCBwcm9nKTsKKwlwcmludGYoIlxuUmVzaXppbmcgaWNvdW50OlxuIik7CisJZmFpbGVkICs9IHJ1bl90ZXN0KDAsIDMsIDAsIGV4dGVuZGVkKTsKKwlwcmludGYoIlxuU3RhbmRhcmQgaWNvdW50IHJ1biB3aXRoIHRkYjpcbiIpOworCWZhaWxlZCArPSBydW5fdGVzdCgwLCAwLCAiLiIsIHByb2cpOworCXByaW50ZigiXG5NdWx0aXBsZSBiaXRtYXAgdGVzdCB3aXRoIHRkYjpcbiIpOworCWZhaWxlZCArPSBydW5fdGVzdChFWFQyX0lDT1VOVF9PUFRfSU5DUkVNRU5ULCAwLCAiLiIsIHByb2cpOworCWlmIChmYWlsZWQpCisJCXByaW50ZigiRkFJTEVEIVxuIik7CisJcmV0dXJuIGZhaWxlZDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW1hZ2VyLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbWFnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzcwMDNhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW1hZ2VyLmMKQEAgLTAsMCArMSw0MDkgQEAKKy8qCisgKiBpbWFnZS5jIC0tLSB3cml0ZXMgb3V0IHRoZSBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBhcyBhCisgKiAJZmxhdCBmaWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqIE5vdGU6IHRoaXMgdXNlcyB0aGUgUE9TSVggSU8gaW50ZXJmYWNlcywgdW5saWtlIG1vc3Qgb2YgdGhlIG90aGVyCisgKiBmdW5jdGlvbnMgaW4gdGhpcyBsaWJyYXJ5LiAgU28gc3VlIG1lLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2lmbmRlZiBIQVZFX1RZUEVfU1NJWkVfVAordHlwZWRlZiBpbnQgc3NpemVfdDsKKyNlbmRpZgorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBibG9jayBpcyBhbGwgemVyb3MKKyAqLworc3RhdGljIGludCBjaGVja196ZXJvX2Jsb2NrKGNoYXIgKmJ1ZiwgaW50IGJsb2Nrc2l6ZSkKK3sKKwljaGFyCSpjcCA9IGJ1ZjsKKwlpbnQJbGVmdCA9IGJsb2Nrc2l6ZTsKKworCXdoaWxlIChsZWZ0ID4gMCkgeworCQlpZiAoKmNwKyspCisJCQlyZXR1cm4gMDsKKwkJbGVmdC0tOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFdyaXRlIHRoZSBpbm9kZSB0YWJsZSBvdXQgYXMgYSBzaW5nbGUgYmxvY2suCisgKi8KKyNkZWZpbmUgQlVGX0JMT0NLUwkzMgorCitlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX2lub2RlX3dyaXRlKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQJZ3JvdXAsIGxlZnQsIGMsIGQ7CisJY2hhcgkJKmJ1ZiwgKmNwOworCWJsazY0X3QJCWJsazsKKwlzc2l6ZV90CQlhY3R1YWw7CisJZXJyY29kZV90CXJldHZhbDsKKwlvZmZfdAkJcjsKKworCWJ1ZiA9IG1hbGxvYyhmcy0+YmxvY2tzaXplICogQlVGX0JMT0NLUyk7CisJaWYgKCFidWYpCisJCXJldHVybiBFTk9NRU07CisKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgZ3JvdXArKykgeworCQlibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCAodW5zaWduZWQpZ3JvdXApOworCQlpZiAoIWJsaykgeworCQkJcmV0dmFsID0gRVhUMl9FVF9NSVNTSU5HX0lOT0RFX1RBQkxFOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJbGVmdCA9IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQl3aGlsZSAobGVmdCkgeworCQkJYyA9IEJVRl9CTE9DS1M7CisJCQlpZiAoYyA+IGxlZnQpCisJCQkJYyA9IGxlZnQ7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIGMsIGJ1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQkJY3AgPSBidWY7CisJCQl3aGlsZSAoYykgeworCQkJCWlmICghKGZsYWdzICYgSU1BR0VSX0ZMQUdfU1BBUlNFV1JJVEUpKSB7CisJCQkJCWQgPSBjOworCQkJCQlnb3RvIHNraXBfc3BhcnNlOworCQkJCX0KKwkJCQkvKiBTa2lwIHplcm8gYmxvY2tzICovCisJCQkJaWYgKGNoZWNrX3plcm9fYmxvY2soY3AsIGZzLT5ibG9ja3NpemUpKSB7CisJCQkJCWMtLTsKKwkJCQkJYmxrKys7CisJCQkJCWxlZnQtLTsKKwkJCQkJY3AgKz0gZnMtPmJsb2Nrc2l6ZTsKKwkJCQkJciA9IGxzZWVrKGZkLCBmcy0+YmxvY2tzaXplLCBTRUVLX0NVUik7CisJCQkJCWlmIChyIDwgMCkgeworCQkJCQkJcmV0dmFsID0gZXJybm87CisJCQkJCQlnb3RvIGVycm91dDsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogRmluZCBub24temVybyBibG9ja3MgKi8KKwkJCQlmb3IgKGQ9MTsgZCA8IGM7IGQrKykgeworCQkJCQlpZiAoY2hlY2tfemVyb19ibG9jayhjcCArIGQqZnMtPmJsb2Nrc2l6ZSwgZnMtPmJsb2Nrc2l6ZSkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQlza2lwX3NwYXJzZToKKwkJCQlhY3R1YWwgPSB3cml0ZShmZCwgY3AsIGZzLT5ibG9ja3NpemUgKiBkKTsKKwkJCQlpZiAoYWN0dWFsID09IC0xKSB7CisJCQkJCXJldHZhbCA9IGVycm5vOworCQkJCQlnb3RvIGVycm91dDsKKwkJCQl9CisJCQkJaWYgKGFjdHVhbCAhPSAoc3NpemVfdCkgKGZzLT5ibG9ja3NpemUgKiBkKSkgeworCQkJCQlyZXR2YWwgPSBFWFQyX0VUX1NIT1JUX1dSSVRFOworCQkJCQlnb3RvIGVycm91dDsKKwkJCQl9CisJCQkJYmxrICs9IGQ7CisJCQkJbGVmdCAtPSBkOworCQkJCWNwICs9IGZzLT5ibG9ja3NpemUgKiBkOworCQkJCWMgLT0gZDsKKwkJCX0KKwkJfQorCX0KKwlyZXR2YWwgPSAwOworCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZWFkIGluIHRoZSBpbm9kZSB0YWJsZSBhbmQgc3R1ZmYgaXQgaW50byBwbGFjZQorICovCitlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX2lub2RlX3JlYWQoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwKKwkJCQkgIGludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJdW5zaWduZWQgaW50CWdyb3VwLCBjLCBsZWZ0OworCWNoYXIJCSpidWY7CisJYmxrNjRfdAkJYmxrOworCXNzaXplX3QJCWFjdHVhbDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJYnVmID0gbWFsbG9jKGZzLT5ibG9ja3NpemUgKiBCVUZfQkxPQ0tTKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKworCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBncm91cCsrKSB7CisJCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsICh1bnNpZ25lZClncm91cCk7CisJCWlmICghYmxrKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEU7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlsZWZ0ID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCXdoaWxlIChsZWZ0KSB7CisJCQljID0gQlVGX0JMT0NLUzsKKwkJCWlmIChjID4gbGVmdCkKKwkJCQljID0gbGVmdDsKKwkJCWFjdHVhbCA9IHJlYWQoZmQsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSAqIGMpOworCQkJaWYgKGFjdHVhbCA9PSAtMSkgeworCQkJCXJldHZhbCA9IGVycm5vOworCQkJCWdvdG8gZXJyb3V0OworCQkJfQorCQkJaWYgKGFjdHVhbCAhPSAoc3NpemVfdCkgKGZzLT5ibG9ja3NpemUgKiBjKSkgeworCQkJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfUkVBRDsKKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIGMsIGJ1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCisJCQlibGsgKz0gYzsKKwkJCWxlZnQgLT0gYzsKKwkJfQorCX0KKwlyZXR2YWwgPSBleHQyZnNfZmx1c2hfaWNhY2hlKGZzKTsKKworZXJyb3V0OgorCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogV3JpdGUgb3V0IHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW1hZ2Vfc3VwZXJfd3JpdGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCwKKwkJCQkgICBpbnQgZmxhZ3MgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWNoYXIJCSpidWYsICpjcDsKKwlzc2l6ZV90CQlhY3R1YWw7CisJZXJyY29kZV90CXJldHZhbDsKKworCWJ1ZiA9IG1hbGxvYyhmcy0+YmxvY2tzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKworCS8qCisJICogV3JpdGUgb3V0IHRoZSBzdXBlcmJsb2NrCisJICovCisJbWVtc2V0KGJ1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJbWVtY3B5KGJ1ZiwgZnMtPnN1cGVyLCBTVVBFUkJMT0NLX1NJWkUpOworCWFjdHVhbCA9IHdyaXRlKGZkLCBidWYsIGZzLT5ibG9ja3NpemUpOworCWlmIChhY3R1YWwgPT0gLTEpIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWdvdG8gZXJyb3V0OworCX0KKwlpZiAoYWN0dWFsICE9IChzc2l6ZV90KSBmcy0+YmxvY2tzaXplKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfV1JJVEU7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogTm93IHdyaXRlIG91dCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKKwkgKi8KKwljcCA9IChjaGFyICopIGZzLT5ncm91cF9kZXNjOworCWFjdHVhbCA9IHdyaXRlKGZkLCBjcCwgZnMtPmJsb2Nrc2l6ZSAqIGZzLT5kZXNjX2Jsb2Nrcyk7CisJaWYgKGFjdHVhbCA9PSAtMSkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChhY3R1YWwgIT0gKHNzaXplX3QpIChmcy0+YmxvY2tzaXplICogZnMtPmRlc2NfYmxvY2tzKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1NIT1JUX1dSSVRFOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlyZXR2YWwgPSAwOworCitlcnJvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycyBhbmQgb3ZlcndyaXRlIHRoZW0uCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW1hZ2Vfc3VwZXJfcmVhZChleHQyX2ZpbHN5cyBmcywgaW50IGZkLAorCQkJCSAgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwljaGFyCQkqYnVmOworCXNzaXplX3QJCWFjdHVhbCwgc2l6ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJc2l6ZSA9IGZzLT5ibG9ja3NpemUgKiAoZnMtPmdyb3VwX2Rlc2NfY291bnQgKyAxKTsKKwlidWYgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBFTk9NRU07CisKKwkvKgorCSAqIFJlYWQgaXQgYWxsIGluLgorCSAqLworCWFjdHVhbCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZSk7CisJaWYgKGFjdHVhbCA9PSAtMSkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChhY3R1YWwgIT0gc2l6ZSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1NIT1JUX1JFQUQ7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogTm93IGNvcHkgaW4gdGhlIHN1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzCisJICovCisJbWVtY3B5KGZzLT5zdXBlciwgYnVmLCBTVVBFUkJMT0NLX1NJWkUpOworCisJbWVtY3B5KGZzLT5ncm91cF9kZXNjLCBidWYgKyBmcy0+YmxvY2tzaXplLAorCSAgICAgICBmcy0+YmxvY2tzaXplICogZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCisJcmV0dmFsID0gMDsKKworZXJyb3V0OgorCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogV3JpdGUgdGhlIGJsb2NrL2lub2RlIGJpdG1hcHMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfaW1hZ2VfYml0bWFwX3dyaXRlKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncykKK3sKKwlleHQyZnNfZ2VuZXJpY19iaXRtYXAJYm1hcDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzc2l6ZV90CQkJYWN0dWFsOworCV9fdTMyCQkJaXRyLCBjbnQsIHNpemU7CisJaW50CQkJYywgdG90YWxfc2l6ZTsKKwljaGFyCQkJYnVmWzEwMjRdOworCisJaWYgKGZsYWdzICYgSU1BR0VSX0ZMQUdfSU5PREVNQVApIHsKKwkJaWYgKCFmcy0+aW5vZGVfbWFwKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAoZnMpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJtYXAgPSBmcy0+aW5vZGVfbWFwOworCQlpdHIgPSAxOworCQljbnQgPSBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAqIGZzLT5ncm91cF9kZXNjX2NvdW50OworCQlzaXplID0gKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gOCk7CisJfSBlbHNlIHsKKwkJaWYgKCFmcy0+YmxvY2tfbWFwKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZnMpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJtYXAgPSBmcy0+YmxvY2tfbWFwOworCQlpdHIgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkJY250ID0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikgKiBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwkJc2l6ZSA9IEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKwl9CisJdG90YWxfc2l6ZSA9IHNpemUgKiBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKworCXdoaWxlIChjbnQgPiAwKSB7CisJCXNpemUgPSBzaXplb2YoYnVmKTsKKwkJaWYgKHNpemUgPiAoY250ID4+IDMpKQorCQkJc2l6ZSA9IChjbnQgPj4gMyk7CisKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9nZW5lcmljX2JtYXBfcmFuZ2UoYm1hcCwgaXRyLAorCQkJCQkJICAgICAgIHNpemUgPDwgMywgYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJYWN0dWFsID0gd3JpdGUoZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChhY3R1YWwgPT0gLTEpCisJCQlyZXR1cm4gZXJybm87CisJCWlmIChhY3R1YWwgIT0gKGludCkgc2l6ZSkKKwkJCXJldHVybiBFWFQyX0VUX1NIT1JUX1JFQUQ7CisKKwkJaXRyICs9IHNpemUgPDwgMzsKKwkJY250IC09IHNpemUgPDwgMzsKKwl9CisKKwlzaXplID0gdG90YWxfc2l6ZSAlIGZzLT5ibG9ja3NpemU7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWlmIChzaXplKSB7CisJCXNpemUgPSBmcy0+YmxvY2tzaXplIC0gc2l6ZTsKKwkJd2hpbGUgKHNpemUpIHsKKwkJCWMgPSBzaXplOworCQkJaWYgKGMgPiAoaW50KSBzaXplb2YoYnVmKSkKKwkJCQljID0gc2l6ZW9mKGJ1Zik7CisJCQlhY3R1YWwgPSB3cml0ZShmZCwgYnVmLCBjKTsKKwkJCWlmIChhY3R1YWwgPT0gLTEpCisJCQkJcmV0dXJuIGVycm5vOworCQkJaWYgKGFjdHVhbCAhPSBjKQorCQkJCXJldHVybiBFWFQyX0VUX1NIT1JUX1dSSVRFOworCQkJc2l6ZSAtPSBjOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qCisgKiBSZWFkIHRoZSBibG9jay9pbm9kZSBiaXRtYXBzLgorICovCitlcnJjb2RlX3QgZXh0MmZzX2ltYWdlX2JpdG1hcF9yZWFkKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncykKK3sKKwlleHQyZnNfZ2VuZXJpY19iaXRtYXAJYm1hcDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlfX3UzMgkJCWl0ciwgY250OworCWNoYXIJCQlidWZbMTAyNF07CisJdW5zaWduZWQgaW50CQlzaXplOworCXNzaXplX3QJCQlhY3R1YWw7CisKKwlpZiAoZmxhZ3MgJiBJTUFHRVJfRkxBR19JTk9ERU1BUCkgeworCQlpZiAoIWZzLT5pbm9kZV9tYXApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChmcyk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYm1hcCA9IGZzLT5pbm9kZV9tYXA7CisJCWl0ciA9IDE7CisJCWNudCA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJCXNpemUgPSAoRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4KTsKKwl9IGVsc2UgeworCQlpZiAoIWZzLT5ibG9ja19tYXApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYm1hcCA9IGZzLT5ibG9ja19tYXA7CisJCWl0ciA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCQljbnQgPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAqIGZzLT5ncm91cF9kZXNjX2NvdW50OworCQlzaXplID0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4OworCX0KKworCXdoaWxlIChjbnQgPiAwKSB7CisJCXNpemUgPSBzaXplb2YoYnVmKTsKKwkJaWYgKHNpemUgPiAoY250ID4+IDMpKQorCQkJc2l6ZSA9IChjbnQgPj4gMyk7CisKKwkJYWN0dWFsID0gcmVhZChmZCwgYnVmLCBzaXplKTsKKwkJaWYgKGFjdHVhbCA9PSAtMSkKKwkJCXJldHVybiBlcnJubzsKKwkJaWYgKGFjdHVhbCAhPSAoaW50KSBzaXplKQorCQkJcmV0dXJuIEVYVDJfRVRfU0hPUlRfUkVBRDsKKworCQlyZXR2YWwgPSBleHQyZnNfc2V0X2dlbmVyaWNfYm1hcF9yYW5nZShibWFwLCBpdHIsCisJCQkJCQkgICAgICAgc2l6ZSA8PCAzLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlpdHIgKz0gc2l6ZSA8PCAzOworCQljbnQgLT0gc2l6ZSA8PCAzOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2luZF9ibG9jay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW5kX2Jsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyZDNiZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2luZF9ibG9jay5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBpbmRfYmxvY2suYyAtLS0gaW5kaXJlY3QgYmxvY2sgSS9PIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorICogCTIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgYnkgIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGV4dDJmc19yZWFkX2luZF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLCB2b2lkICpidWYpCit7CisJZXJyY29kZV90CXJldHZhbDsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlibGtfdAkJKmJsb2NrX25yOworCWludAkJaTsKKwlpbnQJCWxpbWl0ID0gZnMtPmJsb2Nrc2l6ZSA+PiAyOworI2VuZGlmCisKKwlpZiAoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSAmJgorCSAgICAoZnMtPmlvICE9IGZzLT5pbWFnZV9pbykpCisJCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCWVsc2UgeworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgYmxrLCAxLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJYmxvY2tfbnIgPSAoYmxrX3QgKikgYnVmOworCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCBibG9ja19ucisrKQorCQkqYmxvY2tfbnIgPSBleHQyZnNfc3dhYjMyKCpibG9ja19ucik7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9pbmRfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsa190IGJsaywgdm9pZCAqYnVmKQoreworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWJsa190CQkqYmxvY2tfbnI7CisJaW50CQlpOworCWludAkJbGltaXQgPSBmcy0+YmxvY2tzaXplID4+IDI7CisjZW5kaWYKKworCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlibG9ja19uciA9IChibGtfdCAqKSBidWY7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyssIGJsb2NrX25yKyspCisJCSpibG9ja19uciA9IGV4dDJmc19zd2FiMzIoKmJsb2NrX25yKTsKKyNlbmRpZgorCXJldHVybiBpb19jaGFubmVsX3dyaXRlX2Jsayhmcy0+aW8sIGJsaywgMSwgYnVmKTsKK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbml0aWFsaXplLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbml0aWFsaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3ZmZjYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2luaXRpYWxpemUuYwpAQCAtMCwwICsxLDUxOCBAQAorLyoKKyAqIGluaXRpYWxpemUuYyAtLS0gaW5pdGlhbGl6ZSBhIGZpbGVzeXN0ZW0gaGFuZGxlIGdpdmVuIHN1cGVyYmxvY2sKKyAqIAlwYXJhbWV0ZXJzLiAgVXNlZCBieSBta2UyZnMgd2hlbiBpbml0aWFsaXppbmcgYSBmaWxlc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWYgZGVmaW5lZChfX2xpbnV4X18pICAgICYmCWRlZmluZWQoRVhUMl9PU19MSU5VWCkKKyNkZWZpbmUgQ1JFQVRPUl9PUyBFWFQyX09TX0xJTlVYCisjZWxzZQorI2lmIGRlZmluZWQoX19HTlVfXykgICAgICYmCWRlZmluZWQoRVhUMl9PU19IVVJEKQorI2RlZmluZSBDUkVBVE9SX09TIEVYVDJfT1NfSFVSRAorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJglkZWZpbmVkKEVYVDJfT1NfRlJFRUJTRCkKKyNkZWZpbmUgQ1JFQVRPUl9PUyBFWFQyX09TX0ZSRUVCU0QKKyNlbHNlCisjaWYgZGVmaW5lZChMSVRFUykgCSAgICYmCWRlZmluZWQoRVhUMl9PU19MSVRFUykKKyNkZWZpbmUgQ1JFQVRPUl9PUyBFWFQyX09TX0xJVEVTCisjZWxzZQorI2RlZmluZSBDUkVBVE9SX09TIEVYVDJfT1NfTElOVVggLyogYnkgZGVmYXVsdCAqLworI2VuZGlmIC8qIGRlZmluZWQoTElURVMpICYmIGRlZmluZWQoRVhUMl9PU19MSVRFUykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKEVYVDJfT1NfRlJFRUJTRCkgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9fR05VX18pICAgICAmJiBkZWZpbmVkKEVYVDJfT1NfSFVSRCkgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9fbGludXhfXykgICAmJiBkZWZpbmVkKEVYVDJfT1NfTElOVVgpICovCisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBHRFQgYmxvY2tzIHRvIHJlc2VydmUgZm9yIG9ubGluZSBmaWxlc3lzdGVtIGdyb3d0aC4KKyAqIFRoZSBhYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiBHRFQgYmxvY2tzIHdlIGNhbiByZXNlcnZlIGlzIGRldGVybWluZWQgYnkKKyAqIHRoZSBudW1iZXIgb2YgYmxvY2sgcG9pbnRlcnMgdGhhdCBjYW4gZml0IGludG8gYSBzaW5nbGUgYmxvY2suCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19yZXNlcnZlZF9nZHRfYmxvY2tzKGV4dDJfZmlsc3lzIGZzKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKwl1bnNpZ25lZCBsb25nIGJwZyA9IHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJdW5zaWduZWQgaW50IGdkcGIgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKHNiKTsKKwl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MgPSAweGZmZmZmZmZmOworCXVuc2lnbmVkIGxvbmcgcnN2X2dyb3VwczsKKwl1bnNpZ25lZCBpbnQgcnN2X2dkYjsKKworCS8qIFdlIHNldCBpdCBhdCAxMDI0eCB0aGUgY3VycmVudCBmaWxlc3lzdGVtIHNpemUsIG9yCisJICogdGhlIHVwcGVyIGJsb2NrIGNvdW50IGxpbWl0ICgyXjMyKSwgd2hpY2hldmVyIGlzIGxvd2VyLgorCSAqLworCWlmIChleHQyZnNfYmxvY2tzX2NvdW50KHNiKSA8IG1heF9ibG9ja3MgLyAxMDI0KQorCQltYXhfYmxvY2tzID0gZXh0MmZzX2Jsb2Nrc19jb3VudChzYikgKiAxMDI0OworCS8qCisJICogZXh0MmZzX2RpdjY0X2NlaWwoKSBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIG1heF9ibG9ja3MgaXMKKwkgKiBtYXggX0dEVF8gYmxvY2tzLCB3aGljaCBpcyBsaW1pdGVkIHRvIDMyIGJpdHMuCisJICovCisJcnN2X2dyb3VwcyA9IGV4dDJmc19kaXZfY2VpbChtYXhfYmxvY2tzIC0gc2ItPnNfZmlyc3RfZGF0YV9ibG9jaywgYnBnKTsKKwlyc3ZfZ2RiID0gZXh0MmZzX2Rpdl9jZWlsKHJzdl9ncm91cHMsIGdkcGIpIC0gZnMtPmRlc2NfYmxvY2tzOworCWlmIChyc3ZfZ2RiID4gRVhUMl9BRERSX1BFUl9CTE9DSyhzYikpCisJCXJzdl9nZGIgPSBFWFQyX0FERFJfUEVSX0JMT0NLKHNiKTsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJcHJpbnRmKCJtYXhfYmxvY2tzICVsdSwgcnN2X2dyb3VwcyA9ICVsdSwgcnN2X2dkYiA9ICV1XG4iLAorCSAgICAgICBtYXhfYmxvY2tzLCByc3ZfZ3JvdXBzLCByc3ZfZ2RiKTsKKyNlbmRpZgorCisJcmV0dXJuIHJzdl9nZGI7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfaW5pdGlhbGl6ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsCisJCQkgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnBhcmFtLAorCQkJICAgIGlvX21hbmFnZXIgbWFuYWdlciwgZXh0Ml9maWxzeXMgKnJldF9mcykKK3sKKwlleHQyX2ZpbHN5cwlmczsKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzdXBlcjsKKwl1bnNpZ25lZCBpbnQJcmVtOworCXVuc2lnbmVkIGludAlvdmVyaGVhZCA9IDA7CisJdW5zaWduZWQgaW50CWlwZzsKKwlkZ3JwX3QJCWk7CisJYmxrNjRfdAkJZnJlZV9ibG9ja3M7CisJYmxrX3QJCW51bWJsb2NrczsKKwlpbnQJCXJzdl9nZHQ7CisJaW50CQljc3VtX2ZsYWc7CisJaW50CQliaWdhbGxvY19mbGFnOworCWludAkJaW9fZmxhZ3M7CisJdW5zaWduZWQJcmVzZXJ2ZWRfaW5vczsKKwljaGFyCQkqYnVmID0gMDsKKwljaGFyCQljOworCWRvdWJsZQkJcmVzZXJ2ZWRfcmF0aW87CisKKwlpZiAoIXBhcmFtIHx8ICFleHQyZnNfYmxvY2tzX2NvdW50KHBhcmFtKSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSwgJmZzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbWVtc2V0KGZzLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9leHQyX2ZpbHN5cykpOworCWZzLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUzsKKwlmcy0+ZmxhZ3MgPSBmbGFncyB8IEVYVDJfRkxBR19SVzsKKwlmcy0+dW1hc2sgPSAwMjI7CisJZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBFWFQyRlNfQk1BUDY0X1JCVFJFRTsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX1NXQVBfQllURVM7CisjZW5kaWYKKwlpb19mbGFncyA9IElPX0ZMQUdfUlc7CisJaWYgKGZsYWdzICYgRVhUMl9GTEFHX0VYQ0xVU0lWRSkKKwkJaW9fZmxhZ3MgfD0gSU9fRkxBR19FWENMVVNJVkU7CisJaWYgKGZsYWdzICYgRVhUMl9GTEFHX0RJUkVDVF9JTykKKwkJaW9fZmxhZ3MgfD0gSU9fRkxBR19ESVJFQ1RfSU87CisJcmV0dmFsID0gbWFuYWdlci0+b3BlbihuYW1lLCBpb19mbGFncywgJmZzLT5pbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWZzLT5pbWFnZV9pbyA9IGZzLT5pbzsKKwlmcy0+aW8tPmFwcF9kYXRhID0gZnM7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKG5hbWUpKzEsICZmcy0+ZGV2aWNlX25hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmNweShmcy0+ZGV2aWNlX25hbWUsIG5hbWUpOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKFNVUEVSQkxPQ0tfU0laRSwgJnN1cGVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJZnMtPnN1cGVyID0gc3VwZXI7CisKKwltZW1zZXQoc3VwZXIsIDAsIFNVUEVSQkxPQ0tfU0laRSk7CisKKyNkZWZpbmUgc2V0X2ZpZWxkKGZpZWxkLCBkZWZhdWx0KSAoc3VwZXItPmZpZWxkID0gcGFyYW0tPmZpZWxkID8gXAorCQkJCSAgIHBhcmFtLT5maWVsZCA6IChkZWZhdWx0KSkKKyNkZWZpbmUgYXNzaWduX2ZpZWxkKGZpZWxkKQkoc3VwZXItPmZpZWxkID0gcGFyYW0tPmZpZWxkKQorCisJc3VwZXItPnNfbWFnaWMgPSBFWFQyX1NVUEVSX01BR0lDOworCXN1cGVyLT5zX3N0YXRlID0gRVhUMl9WQUxJRF9GUzsKKworCWJpZ2FsbG9jX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShwYXJhbSwKKwkJCQkgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKTsKKworCWFzc2lnbl9maWVsZChzX2xvZ19ibG9ja19zaXplKTsKKworCWlmIChiaWdhbGxvY19mbGFnKSB7CisJCXNldF9maWVsZChzX2xvZ19jbHVzdGVyX3NpemUsIHN1cGVyLT5zX2xvZ19ibG9ja19zaXplKzQpOworCQlpZiAoc3VwZXItPnNfbG9nX2Jsb2NrX3NpemUgPiBzdXBlci0+c19sb2dfY2x1c3Rlcl9zaXplKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9IGVsc2UKKwkJc3VwZXItPnNfbG9nX2NsdXN0ZXJfc2l6ZSA9IHN1cGVyLT5zX2xvZ19ibG9ja19zaXplOworCisJc2V0X2ZpZWxkKHNfZmlyc3RfZGF0YV9ibG9jaywgc3VwZXItPnNfbG9nX2NsdXN0ZXJfc2l6ZSA/IDAgOiAxKTsKKwlzZXRfZmllbGQoc19tYXhfbW50X2NvdW50LCAwKTsKKwlzZXRfZmllbGQoc19lcnJvcnMsIEVYVDJfRVJST1JTX0RFRkFVTFQpOworCXNldF9maWVsZChzX2ZlYXR1cmVfY29tcGF0LCAwKTsKKwlzZXRfZmllbGQoc19mZWF0dXJlX2luY29tcGF0LCAwKTsKKwlzZXRfZmllbGQoc19mZWF0dXJlX3JvX2NvbXBhdCwgMCk7CisJc2V0X2ZpZWxkKHNfZGVmYXVsdF9tb3VudF9vcHRzLCAwKTsKKwlzZXRfZmllbGQoc19maXJzdF9tZXRhX2JnLCAwKTsKKwlzZXRfZmllbGQoc19yYWlkX3N0cmlkZSwgMCk7CQkvKiBkZWZhdWx0IHN0cmlkZSBzaXplOiAwICovCisJc2V0X2ZpZWxkKHNfcmFpZF9zdHJpcGVfd2lkdGgsIDApOwkvKiBkZWZhdWx0IHN0cmlwZSB3aWR0aDogMCAqLworCXNldF9maWVsZChzX2xvZ19ncm91cHNfcGVyX2ZsZXgsIDApOworCXNldF9maWVsZChzX2ZsYWdzLCAwKTsKKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIH5FWFQyX0xJQl9GRUFUVVJFX0lOQ09NUEFUX1NVUFApIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9VTlNVUFBfRkVBVFVSRTsKKwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiB+RVhUMl9MSUJfRkVBVFVSRV9ST19DT01QQVRfU1VQUCkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1JPX1VOU1VQUF9GRUFUVVJFOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJc2V0X2ZpZWxkKHNfcmV2X2xldmVsLCBFWFQyX0dPT0RfT0xEX1JFVik7CisJaWYgKHN1cGVyLT5zX3Jldl9sZXZlbCA+PSBFWFQyX0RZTkFNSUNfUkVWKSB7CisJCXNldF9maWVsZChzX2ZpcnN0X2lubywgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8pOworCQlzZXRfZmllbGQoc19pbm9kZV9zaXplLCBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpOworCQlpZiAoc3VwZXItPnNfaW5vZGVfc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UpKSB7CisJCQlpbnQgZXh0cmFfaXNpemUgPSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UpIC0KKwkJCQlFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkU7CisJCQlzZXRfZmllbGQoc19taW5fZXh0cmFfaXNpemUsIGV4dHJhX2lzaXplKTsKKwkJCXNldF9maWVsZChzX3dhbnRfZXh0cmFfaXNpemUsIGV4dHJhX2lzaXplKTsKKwkJfQorCX0gZWxzZSB7CisJCXN1cGVyLT5zX2ZpcnN0X2lubyA9IEVYVDJfR09PRF9PTERfRklSU1RfSU5POworCQlzdXBlci0+c19pbm9kZV9zaXplID0gRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCX0KKworCXNldF9maWVsZChzX2NoZWNraW50ZXJ2YWwsIDApOworCXN1cGVyLT5zX21rZnNfdGltZSA9IHN1cGVyLT5zX2xhc3RjaGVjayA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZShOVUxMKTsKKworCXN1cGVyLT5zX2NyZWF0b3Jfb3MgPSBDUkVBVE9SX09TOworCisJZnMtPmZyYWdzaXplID0gZnMtPmJsb2Nrc2l6ZSA9IEVYVDJfQkxPQ0tfU0laRShzdXBlcik7CisJZnMtPmNsdXN0ZXJfcmF0aW9fYml0cyA9IHN1cGVyLT5zX2xvZ19jbHVzdGVyX3NpemUgLQorCQlzdXBlci0+c19sb2dfYmxvY2tfc2l6ZTsKKworCWlmIChiaWdhbGxvY19mbGFnKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBicGc7CisKKwkJaWYgKHBhcmFtLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgJiYKKwkJICAgIHBhcmFtLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCAmJgorCQkgICAgKChwYXJhbS0+c19jbHVzdGVyc19wZXJfZ3JvdXAgKiBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpICE9CisJCSAgICAgcGFyYW0tPnNfYmxvY2tzX3Blcl9ncm91cCkpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocGFyYW0tPnNfY2x1c3RlcnNfcGVyX2dyb3VwKQorCQkJYXNzaWduX2ZpZWxkKHNfY2x1c3RlcnNfcGVyX2dyb3VwKTsKKwkJZWxzZSBpZiAocGFyYW0tPnNfYmxvY2tzX3Blcl9ncm91cCkKKwkJCXN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCA9IAorCQkJCXBhcmFtLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgLworCQkJCUVYVDJGU19DTFVTVEVSX1JBVElPKGZzKTsKKwkJZWxzZSBpZiAoc3VwZXItPnNfbG9nX2NsdXN0ZXJfc2l6ZSArIDE1IDwgMzIpCisJCQlzdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgPSBmcy0+YmxvY2tzaXplICogODsKKwkJZWxzZQorCQkJc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gKGZzLT5ibG9ja3NpemUgLSAxKSAqIDg7CisJCWlmIChzdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXAgPiBFWFQyX01BWF9DTFVTVEVSU19QRVJfR1JPVVAoc3VwZXIpKQorCQkJc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gRVhUMl9NQVhfQ0xVU1RFUlNfUEVSX0dST1VQKHN1cGVyKTsKKwkJYnBnID0gRVhUMkZTX0MyQihmcywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCk7CisJCWlmIChicGcgPj0gKCgodW5zaWduZWQgbG9uZyBsb25nKSAxKSA8PCAzMikpIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwID0gYnBnOworCX0gZWxzZSB7CisJCXNldF9maWVsZChzX2Jsb2Nrc19wZXJfZ3JvdXAsIGZzLT5ibG9ja3NpemUgKiA4KTsKKwkJaWYgKHN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgPiBFWFQyX01BWF9CTE9DS1NfUEVSX0dST1VQKHN1cGVyKSkKKwkJCXN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgPSBFWFQyX01BWF9CTE9DS1NfUEVSX0dST1VQKHN1cGVyKTsKKwkJc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldChzdXBlciwgZXh0MmZzX2Jsb2Nrc19jb3VudChwYXJhbSkgJgorCQkJCX4oKGJsazY0X3QpIEVYVDJGU19DTFVTVEVSX01BU0soZnMpKSk7CisJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzdXBlciwgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHBhcmFtKSk7CisJaWYgKGV4dDJmc19yX2Jsb2Nrc19jb3VudChzdXBlcikgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChwYXJhbSkpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJc2V0X2ZpZWxkKHNfbW1wX3VwZGF0ZV9pbnRlcnZhbCwgMCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGNyZWF0aW5nIGFuIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlLCB3ZSBkb24ndCBuZWVkCisJICogdG8gYm90aGVyIHdpdGggdGhlIHJlc3QuCisJICovCisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpIHsKKwkJZnMtPmdyb3VwX2Rlc2NfY291bnQgPSAwOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCSpyZXRfZnMgPSBmczsKKwkJcmV0dXJuIDA7CisJfQorCityZXRyeToKKwlmcy0+Z3JvdXBfZGVzY19jb3VudCA9IChkZ3JwX3QpIGV4dDJmc19kaXY2NF9jZWlsKAorCQlleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAtIHN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCUVYVDJfQkxPQ0tTX1BFUl9HUk9VUChzdXBlcikpOworCWlmIChmcy0+Z3JvdXBfZGVzY19jb3VudCA9PSAwKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVE9PU01BTEw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzZXRfZmllbGQoc19kZXNjX3NpemUsCisJCSAgc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCA/CisJCSAgRVhUMl9NSU5fREVTQ19TSVpFXzY0QklUIDogMCk7CisKKwlmcy0+ZGVzY19ibG9ja3MgPSBleHQyZnNfZGl2X2NlaWwoZnMtPmdyb3VwX2Rlc2NfY291bnQsCisJCQkJCSAgRVhUMl9ERVNDX1BFUl9CTE9DSyhzdXBlcikpOworCisJaSA9IGZzLT5ibG9ja3NpemUgPj0gNDA5NiA/IDEgOiA0MDk2IC8gZnMtPmJsb2Nrc2l6ZTsKKworCWlmIChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUICYmCisJICAgIChleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAvIGkpID4gKDFVTEwgPDwgMzIpKQorCQlzZXRfZmllbGQoc19pbm9kZXNfY291bnQsIH4wVSk7CisJZWxzZQorCQlzZXRfZmllbGQoc19pbm9kZXNfY291bnQsIGV4dDJmc19ibG9ja3NfY291bnQoc3VwZXIpIC8gaSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IEVYVDJfRklSU1RfSU5PICsgMSBpbm9kZXMsIHNvCisJICogdGhhdCB3ZSBoYXZlIGVub3VnaCBpbm9kZXMgZm9yIHRoZSBmaWxlc3lzdGVtKCEpCisJICovCisJaWYgKHN1cGVyLT5zX2lub2Rlc19jb3VudCA8IEVYVDJfRklSU1RfSU5PREUoc3VwZXIpKzEpCisJCXN1cGVyLT5zX2lub2Rlc19jb3VudCA9IEVYVDJfRklSU1RfSU5PREUoc3VwZXIpKzE7CisKKwkvKgorCSAqIFRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBhcyBtYW55IGlub2RlcyBhcyB0aGUgdXNlcgorCSAqIHJlcXVlc3RlZC4gIEZpZ3VyZSBvdXQgaG93IG1hbnkgaW5vZGVzIHBlciBncm91cCB0aGF0CisJICogc2hvdWxkIGJlLiAgQnV0IG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGFsbG9jYXRlIG1vcmUgdGhhbgorCSAqIG9uZSBiaXRtYXAncyB3b3J0aCBvZiBpbm9kZXMgZWFjaCBncm91cC4KKwkgKi8KKwlpcGcgPSBleHQyZnNfZGl2X2NlaWwoc3VwZXItPnNfaW5vZGVzX2NvdW50LCBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJaWYgKGlwZyA+IGZzLT5ibG9ja3NpemUgKiA4KSB7CisJCWlmICghYmlnYWxsb2NfZmxhZyAmJiBzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwID49IDI1NikgeworCQkJLyogVHJ5IGFnYWluIHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50IHBhcmFtZXRlcnMgKi8KKwkJCXN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgLT0gODsKKwkJCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KHN1cGVyLAorCQkJCQkJZXh0MmZzX2Jsb2Nrc19jb3VudChwYXJhbSkpOworCQkJc3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gc3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX1RPT19NQU5ZX0lOT0RFUzsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCWlmIChpcGcgPiAodW5zaWduZWQpIEVYVDJfTUFYX0lOT0RFU19QRVJfR1JPVVAoc3VwZXIpKQorCQlpcGcgPSBFWFQyX01BWF9JTk9ERVNfUEVSX0dST1VQKHN1cGVyKTsKKworaXBnX3JldHJ5OgorCXN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgPSBpcGc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbnVtYmVyIG9mIGlub2RlcyBwZXIgZ3JvdXAgY29tcGxldGVseSBmaWxscworCSAqIHRoZSBpbm9kZSB0YWJsZSBibG9ja3MgaW4gdGhlIGRlc2NyaXB0b3IuICBJZiBub3QsIGFkZCBzb21lCisJICogYWRkaXRpb25hbCBpbm9kZXMvZ3JvdXAuICBXYXN0ZSBub3QsIHdhbnQgbm90Li4uCisJICovCisJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgPSAoKChzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICoKKwkJCQkJRVhUMl9JTk9ERV9TSVpFKHN1cGVyKSkgKworCQkJCSAgICAgICBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpIC0gMSkgLworCQkJCSAgICAgIEVYVDJfQkxPQ0tfU0laRShzdXBlcikpOworCXN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgPSAoKGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICoKKwkJCQkgICAgICBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpKSAvCisJCQkJICAgICBFWFQyX0lOT0RFX1NJWkUoc3VwZXIpKTsKKwkvKgorCSAqIEZpbmFsbHksIG1ha2Ugc3VyZSB0aGUgbnVtYmVyIG9mIGlub2RlcyBwZXIgZ3JvdXAgaXMgYQorCSAqIG11bHRpcGxlIG9mIDguICBUaGlzIGlzIG5lZWRlZCB0byBzaW1wbGlmeSB0aGUgYml0bWFwCisJICogc3BsaWNpbmcgY29kZS4KKwkgKi8KKwlpZiAoc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCA8IDgpCisJCXN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgPSA4OworCXN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXAgJj0gfjc7CisJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgPSAoKChzdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICoKKwkJCQkJRVhUMl9JTk9ERV9TSVpFKHN1cGVyKSkgKworCQkJCSAgICAgICBFWFQyX0JMT0NLX1NJWkUoc3VwZXIpIC0gMSkgLworCQkJCSAgICAgIEVYVDJfQkxPQ0tfU0laRShzdXBlcikpOworCisJLyoKKwkgKiBhZGp1c3QgaW5vZGUgY291bnQgdG8gcmVmbGVjdCB0aGUgYWRqdXN0ZWQgaW5vZGVzX3Blcl9ncm91cAorCSAqLworCWlmICgoX191NjQpc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqIGZzLT5ncm91cF9kZXNjX2NvdW50ID4gfjBVKSB7CisJCWlwZy0tOworCQlnb3RvIGlwZ19yZXRyeTsKKwl9CisJc3VwZXItPnNfaW5vZGVzX2NvdW50ID0gc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCWZzLT5ncm91cF9kZXNjX2NvdW50OworCXN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gc3VwZXItPnNfaW5vZGVzX2NvdW50OworCisJLyoKKwkgKiBjaGVjayB0aGUgbnVtYmVyIG9mIHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgdGFibGUgYmxvY2tzCisJICovCisJaWYgKHN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpCisJCXJzdl9nZHQgPSBjYWxjX3Jlc2VydmVkX2dkdF9ibG9ja3MoZnMpOworCWVsc2UKKwkJcnN2X2dkdCA9IDA7CisJc2V0X2ZpZWxkKHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgcnN2X2dkdCk7CisJaWYgKHN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgPiBFWFQyX0FERFJfUEVSX0JMT0NLKHN1cGVyKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX1JFU19HRFRfQkxPQ0tTOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJvb2trZWVwaW5nIGJsb2NrcyBwZXIKKwkgKiBncm91cC4gIEl0IGluY2x1ZGVzIHRoZSBzdXBlcmJsb2NrLCB0aGUgYmxvY2sgZ3JvdXAKKwkgKiBkZXNjcmlwdG9ycywgdGhlIGJsb2NrIGJpdG1hcCwgdGhlIGlub2RlIGJpdG1hcCwgdGhlIGlub2RlCisJICogdGFibGUsIGFuZCB0aGUgcmVzZXJ2ZWQgZ2R0IGJsb2Nrcy4KKwkgKi8KKwlvdmVyaGVhZCA9IChpbnQpICgzICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgKworCQkJICBmcy0+ZGVzY19ibG9ja3MgKyBzdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKTsKKworCS8qIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCB0b28gbWFueSBpbm9kZXMgKi8KKwlpZiAob3ZlcmhlYWQgPiBzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVE9PX01BTllfSU5PREVTOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBTZWUgaWYgdGhlIGxhc3QgZ3JvdXAgaXMgYmlnIGVub3VnaCB0byBzdXBwb3J0IHRoZQorCSAqIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMuICBJZiBub3QsIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgorCSAqIGl0LiAgV2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgb3ZlcmhlYWQgZm9yIHRoZSBsYXN0IGJsb2NrCisJICogZ3JvdXAsIHNpbmNlIGl0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGEgc3VwZXJibG9jaworCSAqIGJhY2t1cC4KKwkgKi8KKwlvdmVyaGVhZCA9IChpbnQpICgyICsgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApOworCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpKQorCQlvdmVyaGVhZCArPSAxICsgZnMtPmRlc2NfYmxvY2tzICsgc3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlyZW0gPSAoKGV4dDJmc19ibG9ja3NfY291bnQoc3VwZXIpIC0gc3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJQorCSAgICAgICBzdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwKTsKKwlpZiAoKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDEpICYmIHJlbSAmJiAocmVtIDwgb3ZlcmhlYWQpKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVE9PU01BTEw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKHJlbSAmJiAocmVtIDwgb3ZlcmhlYWQrNTApKSB7CisJCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KHN1cGVyLCBleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAtCisJCQkJCXJlbSk7CisJCS8qCisJCSAqIElmIGJsb2NrcyBjb3VudCBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlCisJCSAqIHJlc2VydmVkIGJsb2NrcyBjb3VudCBub3QgdG8gZXhjZWVkIDUwJS4KKwkJICovCisJCXJlc2VydmVkX3JhdGlvID0gMTAwLjAgKiBleHQyZnNfcl9ibG9ja3NfY291bnQocGFyYW0pIC8KKwkJCWV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pOworCQlleHQyZnNfcl9ibG9ja3NfY291bnRfc2V0KHN1cGVyLCByZXNlcnZlZF9yYXRpbyAqCisJCQlleHQyZnNfYmxvY2tzX2NvdW50KHN1cGVyKSAvIDEwMC4wKTsKKworCQlnb3RvIHJldHJ5OworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IGhvdyBiaWcgdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZS4gIFNvCisJICogd2UgY2FuIGRvIGFueSBhbmQgYWxsIGFsbG9jYXRpb25zIHRoYXQgZGVwZW5kIG9uIHRoZSBibG9jaworCSAqIGNvdW50LgorCSAqLworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKGZzLT5kZXZpY2VfbmFtZSkgKyA4MCwgJmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyY3B5KGJ1ZiwgImJsb2NrIGJpdG1hcCBmb3IgIik7CisJc3RyY2F0KGJ1ZiwgZnMtPmRldmljZV9uYW1lKTsKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfc3ViY2x1c3Rlcl9iaXRtYXAoZnMsIGJ1ZiwgJmZzLT5ibG9ja19tYXApOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmNweShidWYsICJpbm9kZSBiaXRtYXAgZm9yICIpOworCXN0cmNhdChidWYsIGZzLT5kZXZpY2VfbmFtZSk7CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywgYnVmLCAmZnMtPmlub2RlX21hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShmcy0+ZGVzY19ibG9ja3MsIGZzLT5ibG9ja3NpemUsCisJCQkJJmZzLT5ncm91cF9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwltZW1zZXQoZnMtPmdyb3VwX2Rlc2MsIDAsIChzaXplX3QpIGZzLT5kZXNjX2Jsb2NrcyAqIGZzLT5ibG9ja3NpemUpOworCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycyBmb3IgZWFjaAorCSAqIGdyb3VwLCBhbmQgZmlsbCBpbiB0aGUgY29ycmVjdCBncm91cCBzdGF0aXN0aWNzIGZvciBncm91cC4KKwkgKiBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlIGJsb2NrIGJpdG1hcCwgaW5vZGUgYml0bWFwLCBhbmQKKwkgKiBpbm9kZSB0YWJsZSBoYXZlIG5vdCBiZWVuIGFsbG9jYXRlZCAoYW5kIGluIGZhY3Qgd29uJ3QgYmUKKwkgKiBieSB0aGlzIHJvdXRpbmUpLCB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yIG5ldmVydGhlbGVzcy4KKwkgKgorCSAqIElmIEZMRVhfQkcgbWV0YS1kYXRhIGdyb3VwaW5nIGlzIHVzZWQsIG9ubHkgYWNjb3VudCBmb3IgdGhlCisJICogc3VwZXJibG9jayBhbmQgZ3JvdXAgZGVzY3JpcHRvcnMgKHRoZSBpbm9kZSB0YWJsZXMgYW5kCisJICogYml0bWFwcyB3aWxsIGJlIGFjY291bnRlZCBmb3Igd2hlbiBhbGxvY2F0ZWQpLgorCSAqLworCWZyZWVfYmxvY2tzID0gMDsKKwljc3VtX2ZsYWcgPSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKTsKKwlyZXNlcnZlZF9pbm9zID0gc3VwZXItPnNfZmlyc3RfaW5vOworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCS8qCisJCSAqIERvbid0IHNldCB0aGUgQkxPQ0tfVU5JTklUIGdyb3VwIGZvciB0aGUgbGFzdCBncm91cAorCQkgKiBiZWNhdXNlIHRoZSBibG9jayBiaXRtYXAgbmVlZHMgdG8gYmUgcGFkZGVkLgorCQkgKi8KKwkJaWYgKGNzdW1fZmxhZykgeworCQkJaWYgKGkgIT0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKQorCQkJCWV4dDJmc19iZ19mbGFnc19zZXQoZnMsIGksCisJCQkJCQkgICAgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQkJZXh0MmZzX2JnX2ZsYWdzX3NldChmcywgaSwgRVhUMl9CR19JTk9ERV9VTklOSVQpOworCQkJbnVtYmxvY2tzID0gc3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cDsKKwkJCWlmIChyZXNlcnZlZF9pbm9zKSB7CisJCQkJaWYgKG51bWJsb2NrcyA+IHJlc2VydmVkX2lub3MpIHsKKwkJCQkJbnVtYmxvY2tzIC09IHJlc2VydmVkX2lub3M7CisJCQkJCXJlc2VydmVkX2lub3MgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXJlc2VydmVkX2lub3MgLT0gbnVtYmxvY2tzOworCQkJCQludW1ibG9ja3MgPSAwOworCQkJCX0KKwkJCX0KKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgaSwgbnVtYmxvY2tzKTsKKwkJfQorCQludW1ibG9ja3MgPSBleHQyZnNfcmVzZXJ2ZV9zdXBlcl9hbmRfYmdkKGZzLCBpLCBmcy0+YmxvY2tfbWFwKTsKKwkJaWYgKGZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KQorCQkJbnVtYmxvY2tzICs9IDIgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKworCQlmcmVlX2Jsb2NrcyArPSBudW1ibG9ja3M7CisJCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGksIG51bWJsb2Nrcyk7CisJCWV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZnMsIGksIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKTsKKwkJZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudF9zZXQoZnMsIGksIDApOworCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgaSk7CisJfQorCWZyZWVfYmxvY2tzICY9IH5FWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKTsKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KHN1cGVyLCBmcmVlX2Jsb2Nrcyk7CisKKwljID0gKGNoYXIpIDI1NTsKKwlpZiAoKChpbnQpIGMpID09IC0xKSB7CisJCXN1cGVyLT5zX2ZsYWdzIHw9IEVYVDJfRkxBR1NfU0lHTkVEX0hBU0g7CisJfSBlbHNlIHsKKwkJc3VwZXItPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19VTlNJR05FRF9IQVNIOworCX0KKworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwlleHQyZnNfbWFya19iYl9kaXJ0eShmcyk7CisJZXh0MmZzX21hcmtfaWJfZGlydHkoZnMpOworCisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIGZzLT5ibG9ja3NpemUpOworCisJKnJldF9mcyA9IGZzOworCXJldHVybiAwOworY2xlYW51cDoKKwlmcmVlKGJ1Zik7CisJZXh0MmZzX2ZyZWUoZnMpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbmxpbmUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lubGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGY0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbmxpbmUuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIGlubGluZS5jIC0tLSBJbmNsdWRlcyB0aGUgaW5saW5lZCBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgaGVhZGVyCisgKiAJZmlsZXMgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMsIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0KKyAqIAlpcyBjb21waWxlZCB3aXRoIGlubGluaW5nIHR1cm5lZCBvZmYuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0UKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAJLyogZm9yIHBvc2l4X21lbWFsaWduKCkgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjZGVmaW5lIElOQ0xVREVfSU5MSU5FX0ZVTkNTCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBXZSB1c2VkIHRvIGRlZmluZSB0aGlzIGFzIGFuIGlubGluZSwgYnV0IHNpbmNlIHdlIGFyZSBub3cgdXNpbmcKKyAqIGF1dG9jb25mLWRlZmluZWQgI2lmZGVmJ3MsIHdlIG5lZWQgdG8gZXhwb3J0IHRoaXMgYXMgYQorICogbGlicmFyeS1wcm92aWRlZCBmdW5jdGlvbiBleGNsdXNpdmVseS4KKyAqLworZXJyY29kZV90IGV4dDJmc19nZXRfbWVtYWxpZ24odW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwgdm9pZCAqcHRyKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJdm9pZCAqKnAgPSBwdHI7CisKKwlpZiAoYWxpZ24gPCA4KQorCQlhbGlnbiA9IDg7CisjaWZkZWYgSEFWRV9QT1NJWF9NRU1BTElHTgorCXJldHZhbCA9IHBvc2l4X21lbWFsaWduKHAsIGFsaWduLCBzaXplKTsKKwlpZiAocmV0dmFsKSB7CisJCWlmIChyZXR2YWwgPT0gRU5PTUVNKQorCQkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCQlyZXR1cm4gcmV0dmFsOworCX0KKyNlbHNlCisjaWZkZWYgSEFWRV9NRU1BTElHTgorCSpwID0gbWVtYWxpZ24oYWxpZ24sIHNpemUpOworCWlmICgqcCA9PSBOVUxMKSB7CisJCWlmIChlcnJubykKKwkJCXJldHVybiBlcnJubzsKKwkJZWxzZQorCQkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCX0KKyNlbHNlCisjaWZkZWYgSEFWRV9WQUxMT0MKKwlpZiAoYWxpZ24gPiBzaXplb2YobG9uZyBsb25nKSkKKwkJKnAgPSB2YWxsb2Moc2l6ZSk7CisJZWxzZQorI2VuZGlmCisJCSpwID0gbWFsbG9jKHNpemUpOworCWlmICgodW5zaWduZWQgbG9uZykgKnAgJiAoYWxpZ24gLSAxKSkgeworCQlmcmVlKCpwKTsKKwkJKnAgPSAwOworCX0KKwlpZiAoKnAgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworI2VuZGlmCisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IGlzYWxpZ25lZCh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJcmV0dXJuICgoKHVuc2lnbmVkIGxvbmcpIHB0ciAmIChhbGlnbiAtIDEpKSA9PSAwKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X21lbWFsaWduKHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJdm9pZCAqcHRyID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW1hbGlnbigzMiwgYWxpZ24sICZwdHIpOworCWlmICghcmV0dmFsICYmICFpc2FsaWduZWQocHRyLCBhbGlnbikpCisJCXJldHZhbCA9IEVJTlZBTDsKKwlmcmVlKHB0cik7CisJcHJpbnRmKCJ0c3RfbWVtYWxpZ24oJWx1KSBpcyAlc1xuIiwgYWxpZ24sCisJICAgICAgIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICh0ZXN0X21lbWFsaWduKDQpKQorCQllcnIrKzsKKwlpZiAodGVzdF9tZW1hbGlnbigzMikpCisJCWVycisrOworCWlmICh0ZXN0X21lbWFsaWduKDEwMjQpKQorCQllcnIrKzsKKwlpZiAodGVzdF9tZW1hbGlnbig0MDk2KSkKKwkJZXJyKys7CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW5vZGUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiNTI4YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lub2RlLmMKQEAgLTAsMCArMSw4NDAgQEAKKy8qCisgKiBpbm9kZS5jIC0tLSB1dGlsaXR5IHJvdXRpbmVzIHRvIHJlYWQgYW5kIHdyaXRlIGlub2RlcworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorI2luY2x1ZGUgImUyaW1hZ2UuaCIKKworc3RydWN0IGV4dDJfc3RydWN0X2lub2RlX3NjYW4geworCWVycmNvZGVfdAkJbWFnaWM7CisJZXh0Ml9maWxzeXMJCWZzOworCWV4dDJfaW5vX3QJCWN1cnJlbnRfaW5vZGU7CisJYmxrNjRfdAkJCWN1cnJlbnRfYmxvY2s7CisJZGdycF90CQkJY3VycmVudF9ncm91cDsKKwlleHQyX2lub190CQlpbm9kZXNfbGVmdDsKKwlibGtfdAkJCWJsb2Nrc19sZWZ0OworCWRncnBfdAkJCWdyb3Vwc19sZWZ0OworCWJsa190CQkJaW5vZGVfYnVmZmVyX2Jsb2NrczsKKwljaGFyICoJCQlpbm9kZV9idWZmZXI7CisJaW50CQkJaW5vZGVfc2l6ZTsKKwljaGFyICoJCQlwdHI7CisJaW50CQkJYnl0ZXNfbGVmdDsKKwljaGFyCQkJKnRlbXBfYnVmZmVyOworCWVycmNvZGVfdAkJKCpkb25lX2dyb3VwKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCSAgICAgIGRncnBfdCBncm91cCwKKwkJCQkJICAgICAgdm9pZCAqIHByaXZfZGF0YSk7CisJdm9pZCAqCQkJZG9uZV9ncm91cF9kYXRhOworCWludAkJCWJhZF9ibG9ja19wdHI7CisJaW50CQkJc2Nhbl9mbGFnczsKKwlpbnQJCQlyZXNlcnZlZFs2XTsKK307CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgZmx1c2hlcyB0aGUgaWNhY2hlLCBpZiBpdCBleGlzdHMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfZmx1c2hfaWNhY2hlKGV4dDJfZmlsc3lzIGZzKQoreworCWludAlpOworCisJaWYgKCFmcy0+aWNhY2hlKQorCQlyZXR1cm4gMDsKKworCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKQorCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPSAwOworCisJZnMtPmljYWNoZS0+YnVmZmVyX2JsayA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgY3JlYXRlX2ljYWNoZShleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGZzLT5pY2FjaGUpCisJCXJldHVybiAwOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZSksICZmcy0+aWNhY2hlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJbWVtc2V0KGZzLT5pY2FjaGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9jYWNoZSkpOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZmcy0+aWNhY2hlLT5idWZmZXIpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZmcy0+aWNhY2hlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJZnMtPmljYWNoZS0+YnVmZmVyX2JsayA9IDA7CisJZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IC0xOworCWZzLT5pY2FjaGUtPmNhY2hlX3NpemUgPSA0OworCWZzLT5pY2FjaGUtPnJlZmNvdW50ID0gMTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5pY2FjaGUtPmNhY2hlX3NpemUsCisJCQkJICBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfY2FjaGVfZW50KSwKKwkJCQkgICZmcy0+aWNhY2hlLT5jYWNoZSk7CisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5pY2FjaGUtPmJ1ZmZlcik7CisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmljYWNoZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWV4dDJmc19mbHVzaF9pY2FjaGUoZnMpOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX29wZW5faW5vZGVfc2NhbihleHQyX2ZpbHN5cyBmcywgaW50IGJ1ZmZlcl9ibG9ja3MsCisJCQkJIGV4dDJfaW5vZGVfc2NhbiAqcmV0X3NjYW4pCit7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW47CisJZXJyY29kZV90CXJldHZhbDsKKwllcnJjb2RlX3QgKCpzYXZlX2dldF9ibG9ja3MpKGV4dDJfZmlsc3lzIGYsIGV4dDJfaW5vX3QgaW5vLCBibGtfdCAqYmxvY2tzKTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwkvKgorCSAqIElmIGZzLT5iYWRibG9ja3MgaXNuJ3Qgc2V0LCB0aGVuIHNldCBpdCAtLS0gc2luY2UgdGhlIGlub2RlCisJICogc2Nhbm5pbmcgZnVuY3Rpb25zIHJlcXVpcmUgaXQuCisJICovCisJaWYgKGZzLT5iYWRibG9ja3MgPT0gMCkgeworCQkvKgorCQkgKiBUZW1wb3Jhcmx5IHNhdmUgZnMtPmdldF9ibG9ja3MgYW5kIHNldCBpdCB0byB6ZXJvLAorCQkgKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBlMmZzY2sncy4KKwkJICovCisJCXNhdmVfZ2V0X2Jsb2NrcyA9IGZzLT5nZXRfYmxvY2tzOworCQlmcy0+Z2V0X2Jsb2NrcyA9IDA7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX2lub2RlKGZzLCAmZnMtPmJhZGJsb2Nrcyk7CisJCWlmIChyZXR2YWwgJiYgZnMtPmJhZGJsb2NrcykgeworCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoZnMtPmJhZGJsb2Nrcyk7CisJCQlmcy0+YmFkYmxvY2tzID0gMDsKKwkJfQorCQlmcy0+Z2V0X2Jsb2NrcyA9IHNhdmVfZ2V0X2Jsb2NrczsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfc3RydWN0X2lub2RlX3NjYW4pLCAmc2Nhbik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQoc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX3N0cnVjdF9pbm9kZV9zY2FuKSk7CisKKwlzY2FuLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSU5PREVfU0NBTjsKKwlzY2FuLT5mcyA9IGZzOworCXNjYW4tPmlub2RlX3NpemUgPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwlzY2FuLT5ieXRlc19sZWZ0ID0gMDsKKwlzY2FuLT5jdXJyZW50X2dyb3VwID0gMDsKKwlzY2FuLT5ncm91cHNfbGVmdCA9IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gMTsKKwlzY2FuLT5pbm9kZV9idWZmZXJfYmxvY2tzID0gYnVmZmVyX2Jsb2NrcyA/IGJ1ZmZlcl9ibG9ja3MgOiA4OworCXNjYW4tPmN1cnJlbnRfYmxvY2sgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKHNjYW4tPmZzLAorCQkJCQkJICAgICBzY2FuLT5jdXJyZW50X2dyb3VwKTsKKwlzY2FuLT5pbm9kZXNfbGVmdCA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChzY2FuLT5mcy0+c3VwZXIpOworCXNjYW4tPmJsb2Nrc19sZWZ0ID0gc2Nhbi0+ZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJc2Nhbi0+aW5vZGVzX2xlZnQgLT0KKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBzY2FuLT5jdXJyZW50X2dyb3VwKTsKKwkJc2Nhbi0+YmxvY2tzX2xlZnQgPQorCQkJKHNjYW4tPmlub2Rlc19sZWZ0ICsKKwkJCSAoZnMtPmJsb2Nrc2l6ZSAvIHNjYW4tPmlub2RlX3NpemUgLSAxKSkgKgorCQkJc2Nhbi0+aW5vZGVfc2l6ZSAvIGZzLT5ibG9ja3NpemU7CisJfQorCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGZzLT5pbywgc2Nhbi0+aW5vZGVfYnVmZmVyX2Jsb2NrcywKKwkJCQkgICAgICAmc2Nhbi0+aW5vZGVfYnVmZmVyKTsKKwlzY2FuLT5kb25lX2dyb3VwID0gMDsKKwlzY2FuLT5kb25lX2dyb3VwX2RhdGEgPSAwOworCXNjYW4tPmJhZF9ibG9ja19wdHIgPSAwOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZzY2FuKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2Nhbi0+aW5vZGVfc2l6ZSwgJnNjYW4tPnRlbXBfYnVmZmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCWV4dDJmc19mcmVlX21lbSgmc2Nhbi0+aW5vZGVfYnVmZmVyKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZzY2FuKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKHNjYW4tPmZzLT5iYWRibG9ja3MgJiYgc2Nhbi0+ZnMtPmJhZGJsb2Nrcy0+bnVtKQorCQlzY2FuLT5zY2FuX2ZsYWdzIHw9IEVYVDJfU0ZfQ0hLX0JBREJMT0NLUzsKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkKKwkJc2Nhbi0+c2Nhbl9mbGFncyB8PSBFWFQyX1NGX0RPX0xBWlk7CisJKnJldF9zY2FuID0gc2NhbjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihleHQyX2lub2RlX3NjYW4gc2NhbikKK3sKKwlpZiAoIXNjYW4gfHwgKHNjYW4tPm1hZ2ljICE9IEVYVDJfRVRfTUFHSUNfSU5PREVfU0NBTikpCisJCXJldHVybjsKKworCWV4dDJmc19mcmVlX21lbSgmc2Nhbi0+aW5vZGVfYnVmZmVyKTsKKwlzY2FuLT5pbm9kZV9idWZmZXIgPSBOVUxMOworCWV4dDJmc19mcmVlX21lbSgmc2Nhbi0+dGVtcF9idWZmZXIpOworCXNjYW4tPnRlbXBfYnVmZmVyID0gTlVMTDsKKwlleHQyZnNfZnJlZV9tZW0oJnNjYW4pOworCXJldHVybjsKK30KKwordm9pZCBleHQyZnNfc2V0X2lub2RlX2NhbGxiYWNrKGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCQkJICAgICAgIGVycmNvZGVfdCAoKmRvbmVfZ3JvdXApKGV4dDJfZmlsc3lzIGZzLAorCQkJCQkJICAgICAgIGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCQkJCQkJICAgICAgIGRncnBfdCBncm91cCwKKwkJCQkJCSAgICAgICB2b2lkICogcHJpdl9kYXRhKSwKKwkJCSAgICAgICB2b2lkICpkb25lX2dyb3VwX2RhdGEpCit7CisJaWYgKCFzY2FuIHx8IChzY2FuLT5tYWdpYyAhPSBFWFQyX0VUX01BR0lDX0lOT0RFX1NDQU4pKQorCQlyZXR1cm47CisKKwlzY2FuLT5kb25lX2dyb3VwID0gZG9uZV9ncm91cDsKKwlzY2FuLT5kb25lX2dyb3VwX2RhdGEgPSBkb25lX2dyb3VwX2RhdGE7Cit9CisKK2ludCBleHQyZnNfaW5vZGVfc2Nhbl9mbGFncyhleHQyX2lub2RlX3NjYW4gc2NhbiwgaW50IHNldF9mbGFncywKKwkJCSAgICBpbnQgY2xlYXJfZmxhZ3MpCit7CisJaW50CW9sZF9mbGFnczsKKworCWlmICghc2NhbiB8fCAoc2Nhbi0+bWFnaWMgIT0gRVhUMl9FVF9NQUdJQ19JTk9ERV9TQ0FOKSkKKwkJcmV0dXJuIDA7CisKKwlvbGRfZmxhZ3MgPSBzY2FuLT5zY2FuX2ZsYWdzOworCXNjYW4tPnNjYW5fZmxhZ3MgJj0gfmNsZWFyX2ZsYWdzOworCXNjYW4tPnNjYW5fZmxhZ3MgfD0gc2V0X2ZsYWdzOworCXJldHVybiBvbGRfZmxhZ3M7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQyZnNfZ2V0X25leHRfaW5vZGUgd2hlbiBpdCBuZWVkcyB0bworICogZ2V0IHJlYWR5IHRvIHJlYWQgaW4gYSBuZXcgYmxvY2tncm91cC4KKyAqLworc3RhdGljIGVycmNvZGVfdCBnZXRfbmV4dF9ibG9ja2dyb3VwKGV4dDJfaW5vZGVfc2NhbiBzY2FuKQoreworCWV4dDJfZmlsc3lzIGZzID0gc2Nhbi0+ZnM7CisKKwlzY2FuLT5jdXJyZW50X2dyb3VwKys7CisJc2Nhbi0+Z3JvdXBzX2xlZnQtLTsKKworCXNjYW4tPmN1cnJlbnRfYmxvY2sgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKHNjYW4tPmZzLAorCQkJCQkJICAgICBzY2FuLT5jdXJyZW50X2dyb3VwKTsKKwlzY2FuLT5jdXJyZW50X2lub2RlID0gc2Nhbi0+Y3VycmVudF9ncm91cCAqCisJCUVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCisJc2Nhbi0+Ynl0ZXNfbGVmdCA9IDA7CisJc2Nhbi0+aW5vZGVzX2xlZnQgPSBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKTsKKwlzY2FuLT5ibG9ja3NfbGVmdCA9IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB7CisJCXNjYW4tPmlub2Rlc19sZWZ0IC09CisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgc2Nhbi0+Y3VycmVudF9ncm91cCk7CisJCXNjYW4tPmJsb2Nrc19sZWZ0ID0KKwkJCShzY2FuLT5pbm9kZXNfbGVmdCArCisJCQkgKGZzLT5ibG9ja3NpemUgLyBzY2FuLT5pbm9kZV9zaXplIC0gMSkpICoKKwkJCXNjYW4tPmlub2RlX3NpemUgLyBmcy0+YmxvY2tzaXplOworCX0KKworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2lub2RlX3NjYW5fZ290b19ibG9ja2dyb3VwKGV4dDJfaW5vZGVfc2NhbiBzY2FuLAorCQkJCQkgICAgaW50CWdyb3VwKQoreworCXNjYW4tPmN1cnJlbnRfZ3JvdXAgPSBncm91cCAtIDE7CisJc2Nhbi0+Z3JvdXBzX2xlZnQgPSBzY2FuLT5mcy0+Z3JvdXBfZGVzY19jb3VudCAtIGdyb3VwOworCXJldHVybiBnZXRfbmV4dF9ibG9ja2dyb3VwKHNjYW4pOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZ2V0X25leHRfYmxvY2tzKCkgdG8gY2hlY2sgZm9yIGJhZAorICogYmxvY2tzIGluIHRoZSBpbm9kZSB0YWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBiYWRibG9ja3NfbGlzdC0+bGlzdCBpcyBzb3J0ZWQgaW4KKyAqIGluY3JlYXNpbmcgb3JkZXIuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgY2hlY2tfZm9yX2lub2RlX2JhZF9ibG9ja3MoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sCisJCQkJCSAgICBibGs2NF90ICpudW1fYmxvY2tzKQoreworCWJsazY0X3QJYmxrID0gc2Nhbi0+Y3VycmVudF9ibG9jazsKKwliYWRibG9ja3NfbGlzdAliYiA9IHNjYW4tPmZzLT5iYWRibG9ja3M7CisKKwkvKgorCSAqIElmIHRoZSBpbm9kZSB0YWJsZSBpcyBtaXNzaW5nLCB0aGVuIG9idmlvdXNseSB0aGVyZSBhcmUgbm8KKwkgKiBiYWQgYmxvY2tzLiAgOi0pCisJICovCisJaWYgKGJsayA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGN1cnJlbnQgYmxvY2sgaXMgZ3JlYXRlciB0aGFuIHRoZSBiYWQgYmxvY2sgbGlzdGVkCisJICogaW4gdGhlIGJhZCBibG9jayBsaXN0LCB0aGVuIGFkdmFuY2UgdGhlIHBvaW50ZXIgdW50aWwgdGhpcworCSAqIGlzIG5vIGxvbmdlciB0aGUgY2FzZS4gIElmIHdlIHJ1biBvdXQgb2YgYmFkIGJsb2NrcywgdGhlbgorCSAqIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IG1vcmUgY2hlY2tpbmchCisJICovCisJd2hpbGUgKGJsayA+IGJiLT5saXN0W3NjYW4tPmJhZF9ibG9ja19wdHJdKSB7CisJCWlmICgrK3NjYW4tPmJhZF9ibG9ja19wdHIgPj0gYmItPm51bSkgeworCQkJc2Nhbi0+c2Nhbl9mbGFncyAmPSB+RVhUMl9TRl9DSEtfQkFEQkxPQ0tTOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBjdXJyZW50IGJsb2NrIGlzIGVxdWFsIHRvIHRoZSBiYWQgYmxvY2sgbGlzdGVkIGluCisJICogdGhlIGJhZCBibG9jayBsaXN0LCB0aGVuIGhhbmRsZSB0aGF0IG9uZSBibG9jayBzcGVjaWFsbHkuCisJICogKFdlIGNvdWxkIHRyeSB0byBoYW5kbGUgcnVucyBvZiBiYWQgYmxvY2tzLCBidXQgdGhhdAorCSAqIG9ubHkgaW5jcmVhc2VzIENQVSBlZmZpY2llbmN5IGJ5IGEgc21hbGwgYW1vdW50LCBhdCB0aGUKKwkgKiBleHBlbnNlIG9mIGEgaHVnZSBleHBlbnNlIG9mIGNvZGUgY29tcGxleGl0eSwgYW5kIGZvciBhbgorCSAqIHVuY29tbW9uIGNhc2UgYXQgdGhhdC4pCisJICovCisJaWYgKGJsayA9PSBiYi0+bGlzdFtzY2FuLT5iYWRfYmxvY2tfcHRyXSkgeworCQlzY2FuLT5zY2FuX2ZsYWdzIHw9IEVYVDJfU0ZfQkFEX0lOT0RFX0JMSzsKKwkJKm51bV9ibG9ja3MgPSAxOworCQlpZiAoKytzY2FuLT5iYWRfYmxvY2tfcHRyID49IGJiLT5udW0pCisJCQlzY2FuLT5zY2FuX2ZsYWdzICY9IH5FWFQyX1NGX0NIS19CQURCTE9DS1M7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBiYWQgYmxvY2sgaW4gdGhlIHJhbmdlIHRoYXQgd2UncmUgYWJvdXQgdG8KKwkgKiByZWFkIGluLCBhZGp1c3QgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gcmVhZCBzbyB0aGF0IHdlIHdlCisJICogZG9uJ3QgcmVhZCBpbiB0aGUgYmFkIGJsb2NrLiAgKFRoZW4gdGhlIG5leHQgYmxvY2sgdG8gcmVhZAorCSAqIHdpbGwgYmUgdGhlIGJhZCBibG9jaywgd2hpY2ggaXMgaGFuZGxlZCBpbiB0aGUgYWJvdmUgY2FzZS4pCisJICovCisJaWYgKChibGsgKyAqbnVtX2Jsb2NrcykgPiBiYi0+bGlzdFtzY2FuLT5iYWRfYmxvY2tfcHRyXSkKKwkJKm51bV9ibG9ja3MgPSAoaW50KSAoYmItPmxpc3Rbc2Nhbi0+YmFkX2Jsb2NrX3B0cl0gLSBibGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQyZnNfZ2V0X25leHRfaW5vZGUgd2hlbiBpdCBuZWVkcyB0bworICogcmVhZCBpbiBtb3JlIGJsb2NrcyBmcm9tIHRoZSBjdXJyZW50IGJsb2NrZ3JvdXAncyBpbm9kZSB0YWJsZS4KKyAqLworc3RhdGljIGVycmNvZGVfdCBnZXRfbmV4dF9ibG9ja3MoZXh0Ml9pbm9kZV9zY2FuIHNjYW4pCit7CisJYmxrNjRfdAkJbnVtX2Jsb2NrczsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJLyoKKwkgKiBGaWd1cmUgb3V0IGhvdyBtYW55IGJsb2NrcyB0byByZWFkOyB3ZSByZWFkIGF0IG1vc3QKKwkgKiBpbm9kZV9idWZmZXJfYmxvY2tzLCBhbmQgcGVyaGFwcyBsZXNzIGlmIHRoZXJlIGFyZW4ndCB0aGF0CisJICogbWFueSBibG9ja3MgbGVmdCB0byByZWFkLgorCSAqLworCW51bV9ibG9ja3MgPSBzY2FuLT5pbm9kZV9idWZmZXJfYmxvY2tzOworCWlmIChudW1fYmxvY2tzID4gc2Nhbi0+YmxvY2tzX2xlZnQpCisJCW51bV9ibG9ja3MgPSBzY2FuLT5ibG9ja3NfbGVmdDsKKworCS8qCisJICogSWYgdGhlIHBhc3QgYmxvY2sgInJlYWQiIHdhcyBhIGJhZCBibG9jaywgdGhlbiBtYXJrIHRoZQorCSAqIGxlZnQtb3ZlciBleHRyYSBieXRlcyBhcyBhbHNvIGJlaW5nIGJhZC4KKwkgKi8KKwlpZiAoc2Nhbi0+c2Nhbl9mbGFncyAmIEVYVDJfU0ZfQkFEX0lOT0RFX0JMSykgeworCQlpZiAoc2Nhbi0+Ynl0ZXNfbGVmdCkKKwkJCXNjYW4tPnNjYW5fZmxhZ3MgfD0gRVhUMl9TRl9CQURfRVhUUkFfQllURVM7CisJCXNjYW4tPnNjYW5fZmxhZ3MgJj0gfkVYVDJfU0ZfQkFEX0lOT0RFX0JMSzsKKwl9CisKKwkvKgorCSAqIERvIGlub2RlIGJhZCBibG9jayBwcm9jZXNzaW5nLCBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKHNjYW4tPnNjYW5fZmxhZ3MgJiBFWFQyX1NGX0NIS19CQURCTE9DS1MpIHsKKwkJcmV0dmFsID0gY2hlY2tfZm9yX2lub2RlX2JhZF9ibG9ja3Moc2NhbiwgJm51bV9ibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHNjYW4tPnNjYW5fZmxhZ3MgJiBFWFQyX1NGX0JBRF9JTk9ERV9CTEspIHx8CisJICAgIChzY2FuLT5jdXJyZW50X2Jsb2NrID09IDApKSB7CisJCW1lbXNldChzY2FuLT5pbm9kZV9idWZmZXIsIDAsCisJCSAgICAgICAoc2l6ZV90KSBudW1fYmxvY2tzICogc2Nhbi0+ZnMtPmJsb2Nrc2l6ZSk7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KHNjYW4tPmZzLT5pbywKKwkJCQkJICAgICBzY2FuLT5jdXJyZW50X2Jsb2NrLAorCQkJCQkgICAgIChpbnQpIG51bV9ibG9ja3MsCisJCQkJCSAgICAgc2Nhbi0+aW5vZGVfYnVmZmVyKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiBFWFQyX0VUX05FWFRfSU5PREVfUkVBRDsKKwl9CisJc2Nhbi0+cHRyID0gc2Nhbi0+aW5vZGVfYnVmZmVyOworCXNjYW4tPmJ5dGVzX2xlZnQgPSBudW1fYmxvY2tzICogc2Nhbi0+ZnMtPmJsb2Nrc2l6ZTsKKworCXNjYW4tPmJsb2Nrc19sZWZ0IC09IG51bV9ibG9ja3M7CisJaWYgKHNjYW4tPmN1cnJlbnRfYmxvY2spCisJCXNjYW4tPmN1cnJlbnRfYmxvY2sgKz0gbnVtX2Jsb2NrczsKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGVudGlyZSBpbm9kZV9idWZmZXIgaGFzIGEgbm9uLXplcm8gc2l6ZSBhbmQKKyAqIGNvbnRhaW5zIGFsbCB6ZXJvcy4gIChOb3QganVzdCBkZWxldGVkIGlub2Rlcywgc2luY2UgdGhhdCBtZWFucworICogdGhhdCBwYXJ0IG9mIHRoZSBpbm9kZSB0YWJsZSB3YXMgdXNlZCBhdCBvbmUgcG9pbnQ7IHdlIHdhbnQgYWxsCisgKiB6ZXJvcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgaW5vZGUgdGFibGUgaXMgcHJpc3RpbmUuKQorICovCitzdGF0aWMgaW5saW5lIGludCBpc19lbXB0eV9zY2FuKGV4dDJfaW5vZGVfc2NhbiBzY2FuKQoreworCWludAlpOworCisJaWYgKHNjYW4tPmJ5dGVzX2xlZnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGk9MDsgaSA8IHNjYW4tPmJ5dGVzX2xlZnQ7IGkrKykKKwkJaWYgKHNjYW4tPnB0cltpXSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorI2VuZGlmCisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X25leHRfaW5vZGVfZnVsbChleHQyX2lub2RlX3NjYW4gc2NhbiwgZXh0Ml9pbm9fdCAqaW5vLAorCQkJCSAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBpbnQgYnVmc2l6ZSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJZXh0cmFfYnl0ZXMgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhzY2FuLCBFWFQyX0VUX01BR0lDX0lOT0RFX1NDQU4pOworCisJLyoKKwkgKiBEbyB3ZSBuZWVkIHRvIHN0YXJ0IHJlYWRpbmcgYSBuZXcgYmxvY2sgZ3JvdXA/CisJICovCisJaWYgKHNjYW4tPmlub2Rlc19sZWZ0IDw9IDApIHsKKwlmb3JjZV9uZXdfZ3JvdXA6CisJCWlmIChzY2FuLT5kb25lX2dyb3VwKSB7CisJCQlyZXR2YWwgPSAoc2Nhbi0+ZG9uZV9ncm91cCkKKwkJCQkoc2Nhbi0+ZnMsIHNjYW4sIHNjYW4tPmN1cnJlbnRfZ3JvdXAsCisJCQkJIHNjYW4tPmRvbmVfZ3JvdXBfZGF0YSk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJaWYgKHNjYW4tPmdyb3Vwc19sZWZ0IDw9IDApIHsKKwkJCSppbm8gPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dmFsID0gZ2V0X25leHRfYmxvY2tncm91cChzY2FuKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCS8qCisJICogVGhlc2UgY2hlY2tzIGFyZSBkb25lIG91dHNpZGUgdGhlIGFib3ZlIGlmIHN0YXRlbWVudCBzbworCSAqIHRoZXkgY2FuIGJlIGRvbmUgZm9yIGJsb2NrIGdyb3VwICMwLgorCSAqLworCWlmICgoc2Nhbi0+c2Nhbl9mbGFncyAmIEVYVDJfU0ZfRE9fTEFaWSkgJiYKKwkgICAgKGV4dDJmc19iZ19mbGFnc190ZXN0KHNjYW4tPmZzLCBzY2FuLT5jdXJyZW50X2dyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkKKwkgICAgICkpCisJCWdvdG8gZm9yY2VfbmV3X2dyb3VwOworCWlmIChzY2FuLT5pbm9kZXNfbGVmdCA9PSAwKQorCQlnb3RvIGZvcmNlX25ld19ncm91cDsKKwlpZiAoc2Nhbi0+Y3VycmVudF9ibG9jayA9PSAwKSB7CisJCWlmIChzY2FuLT5zY2FuX2ZsYWdzICYgRVhUMl9TRl9TS0lQX01JU1NJTkdfSVRBQkxFKSB7CisJCQlnb3RvIGZvcmNlX25ld19ncm91cDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gRVhUMl9FVF9NSVNTSU5HX0lOT0RFX1RBQkxFOworCX0KKworCisJLyoKKwkgKiBIYXZlIHdlIHJ1biBvdXQgb2Ygc3BhY2UgaW4gdGhlIGlub2RlIGJ1ZmZlcj8gIElmIHNvLCB3ZQorCSAqIG5lZWQgdG8gcmVhZCBpbiBtb3JlIGJsb2Nrcy4KKwkgKi8KKwlpZiAoc2Nhbi0+Ynl0ZXNfbGVmdCA8IHNjYW4tPmlub2RlX3NpemUpIHsKKwkJbWVtY3B5KHNjYW4tPnRlbXBfYnVmZmVyLCBzY2FuLT5wdHIsIHNjYW4tPmJ5dGVzX2xlZnQpOworCQlleHRyYV9ieXRlcyA9IHNjYW4tPmJ5dGVzX2xlZnQ7CisKKwkJcmV0dmFsID0gZ2V0X25leHRfYmxvY2tzKHNjYW4pOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKyNpZiAwCisJCS8qCisJCSAqIFhYWCB0ZXN0ICBOZWVkIGNoZWNrIGZvciB1c2VkIGlub2RlIHNvbWVob3cuCisJCSAqIChOb3RlOiB0aGlzIGlzIGhhcmQuKQorCQkgKi8KKwkJaWYgKGlzX2VtcHR5X3NjYW4oc2NhbikpCisJCQlnb3RvIGZvcmNlX25ld19ncm91cDsKKyNlbmRpZgorCX0KKworCXJldHZhbCA9IDA7CisJaWYgKGV4dHJhX2J5dGVzKSB7CisJCW1lbWNweShzY2FuLT50ZW1wX2J1ZmZlcitleHRyYV9ieXRlcywgc2Nhbi0+cHRyLAorCQkgICAgICAgc2Nhbi0+aW5vZGVfc2l6ZSAtIGV4dHJhX2J5dGVzKTsKKwkJc2Nhbi0+cHRyICs9IHNjYW4tPmlub2RlX3NpemUgLSBleHRyYV9ieXRlczsKKwkJc2Nhbi0+Ynl0ZXNfbGVmdCAtPSBzY2FuLT5pbm9kZV9zaXplIC0gZXh0cmFfYnl0ZXM7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJbWVtc2V0KGlub2RlLCAwLCBidWZzaXplKTsKKwkJZXh0MmZzX3N3YXBfaW5vZGVfZnVsbChzY2FuLT5mcywKKwkJCSAgICAgICAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGUsCisJCQkgICAgICAgKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIHNjYW4tPnRlbXBfYnVmZmVyLAorCQkJICAgICAgIDAsIGJ1ZnNpemUpOworI2Vsc2UKKwkJKmlub2RlID0gKigoc3RydWN0IGV4dDJfaW5vZGUgKikgc2Nhbi0+dGVtcF9idWZmZXIpOworI2VuZGlmCisJCWlmIChzY2FuLT5zY2FuX2ZsYWdzICYgRVhUMl9TRl9CQURfRVhUUkFfQllURVMpCisJCQlyZXR2YWwgPSBFWFQyX0VUX0JBRF9CTE9DS19JTl9JTk9ERV9UQUJMRTsKKwkJc2Nhbi0+c2Nhbl9mbGFncyAmPSB+RVhUMl9TRl9CQURfRVhUUkFfQllURVM7CisJfSBlbHNlIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwkJbWVtc2V0KGlub2RlLCAwLCBidWZzaXplKTsKKwkJZXh0MmZzX3N3YXBfaW5vZGVfZnVsbChzY2FuLT5mcywKKwkJCQkoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGUsCisJCQkJKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIHNjYW4tPnB0ciwKKwkJCQkwLCBidWZzaXplKTsKKyNlbHNlCisJCW1lbWNweShpbm9kZSwgc2Nhbi0+cHRyLCBidWZzaXplKTsKKyNlbmRpZgorCQlzY2FuLT5wdHIgKz0gc2Nhbi0+aW5vZGVfc2l6ZTsKKwkJc2Nhbi0+Ynl0ZXNfbGVmdCAtPSBzY2FuLT5pbm9kZV9zaXplOworCQlpZiAoc2Nhbi0+c2Nhbl9mbGFncyAmIEVYVDJfU0ZfQkFEX0lOT0RFX0JMSykKKwkJCXJldHZhbCA9IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFOworCX0KKworCXNjYW4tPmlub2Rlc19sZWZ0LS07CisJc2Nhbi0+Y3VycmVudF9pbm9kZSsrOworCSppbm8gPSBzY2FuLT5jdXJyZW50X2lub2RlOworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfZ2V0X25leHRfaW5vZGUoZXh0Ml9pbm9kZV9zY2FuIHNjYW4sIGV4dDJfaW5vX3QgKmlubywKKwkJCQlzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGV4dDJmc19nZXRfbmV4dF9pbm9kZV9mdWxsKHNjYW4sIGlubywgaW5vZGUsCisJCQkJCQlzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSBhIHNpbmdsZSBpbm9kZS4KKyAqLworZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqIGlub2RlLCBpbnQgYnVmc2l6ZSkKK3sKKwlibGs2NF90CQlibG9ja19ucjsKKwl1bnNpZ25lZCBsb25nIAlncm91cCwgYmxvY2ssIG9mZnNldDsKKwljaGFyIAkJKnB0cjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludCAJCWNsZW4sIGksIGlub2Rlc19wZXJfYmxvY2ssIGxlbmd0aDsKKwlpb19jaGFubmVsCWlvOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB1c2VyIGhhcyBhbiBvdmVycmlkZSBmdW5jdGlvbiAqLworCWlmIChmcy0+cmVhZF9pbm9kZSAmJgorCSAgICAoKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgfHwKKwkgICAgIChFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSkpIHsKKwkJcmV0dmFsID0gKGZzLT5yZWFkX2lub2RlKShmcywgaW5vLCBpbm9kZSk7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKChpbm8gPT0gMCkgfHwgKGlubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKQorCQlyZXR1cm4gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCS8qIENyZWF0ZSBpbm9kZSBjYWNoZSBpZiBub3QgcHJlc2VudCAqLworCWlmICghZnMtPmljYWNoZSkgeworCQlyZXR2YWwgPSBjcmVhdGVfaWNhY2hlKGZzKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCS8qIENoZWNrIHRvIHNlZSBpZiBpdCdzIGluIHRoZSBpbm9kZSBjYWNoZSAqLworCWlmIChidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpIHsKKwkJLyogb25seSBvbGQgZ29vZCBpbm9kZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIGNhY2hlICovCisJCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CisJCQlpZiAoZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vID09IGlubykgeworCQkJCSppbm9kZSA9IGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlub2RlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkgeworCQlpbm9kZXNfcGVyX2Jsb2NrID0gZnMtPmJsb2Nrc2l6ZSAvIEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCQlibG9ja19uciA9IGZzLT5pbWFnZV9oZWFkZXItPm9mZnNldF9pbm9kZSAvIGZzLT5ibG9ja3NpemU7CisJCWJsb2NrX25yICs9IChpbm8gLSAxKSAvIGlub2Rlc19wZXJfYmxvY2s7CisJCW9mZnNldCA9ICgoaW5vIC0gMSkgJSBpbm9kZXNfcGVyX2Jsb2NrKSAqCisJCQlFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwkJaW8gPSBmcy0+aW1hZ2VfaW87CisJfSBlbHNlIHsKKwkJZ3JvdXAgPSAoaW5vIC0gMSkgLyBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKTsKKwkJaWYgKGdyb3VwID4gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlyZXR1cm4gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCQlvZmZzZXQgPSAoKGlubyAtIDEpICUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikpICoKKwkJCUVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCQlibG9jayA9IG9mZnNldCA+PiBFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpOworCQlpZiAoIWV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsICh1bnNpZ25lZCkgZ3JvdXApKQorCQkJcmV0dXJuIEVYVDJfRVRfTUlTU0lOR19JTk9ERV9UQUJMRTsKKwkJYmxvY2tfbnIgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBncm91cCkgKworCQkJYmxvY2s7CisJCWlvID0gZnMtPmlvOworCX0KKwlvZmZzZXQgJj0gKEVYVDJfQkxPQ0tfU0laRShmcy0+c3VwZXIpIC0gMSk7CisKKwlsZW5ndGggPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwlpZiAoYnVmc2l6ZSA8IGxlbmd0aCkKKwkJbGVuZ3RoID0gYnVmc2l6ZTsKKworCXB0ciA9IChjaGFyICopIGlub2RlOworCXdoaWxlIChsZW5ndGgpIHsKKwkJY2xlbiA9IGxlbmd0aDsKKwkJaWYgKChvZmZzZXQgKyBsZW5ndGgpID4gZnMtPmJsb2Nrc2l6ZSkKKwkJCWNsZW4gPSBmcy0+YmxvY2tzaXplIC0gb2Zmc2V0OworCisJCWlmIChibG9ja19uciAhPSBmcy0+aWNhY2hlLT5idWZmZXJfYmxrKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoaW8sIGJsb2NrX25yLCAxLAorCQkJCQkJICAgICBmcy0+aWNhY2hlLT5idWZmZXIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJZnMtPmljYWNoZS0+YnVmZmVyX2JsayA9IGJsb2NrX25yOworCQl9CisKKwkJbWVtY3B5KHB0ciwgKChjaGFyICopIGZzLT5pY2FjaGUtPmJ1ZmZlcikgKyAodW5zaWduZWQpIG9mZnNldCwKKwkJICAgICAgIGNsZW4pOworCisJCW9mZnNldCA9IDA7CisJCWxlbmd0aCAtPSBjbGVuOworCQlwdHIgKz0gY2xlbjsKKwkJYmxvY2tfbnIrKzsKKwl9CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlleHQyZnNfc3dhcF9pbm9kZV9mdWxsKGZzLCAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGUsCisJCQkgICAgICAgKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlICopIGlub2RlLAorCQkJICAgICAgIDAsIGJ1ZnNpemUpOworI2VuZGlmCisKKwkvKiBVcGRhdGUgdGhlIGlub2RlIGNhY2hlICovCisJZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCA9IChmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ICsgMSkgJQorCQlmcy0+aWNhY2hlLT5jYWNoZV9zaXplOworCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlubyA9IGlubzsKKwlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm9kZSA9ICppbm9kZTsKKworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgIHN0cnVjdCBleHQyX2lub2RlICogaW5vZGUpCit7CisJcmV0dXJuIGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoZnMsIGlubywgaW5vZGUsCisJCQkJCXNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgc3RydWN0IGV4dDJfaW5vZGUgKiBpbm9kZSwgaW50IGJ1ZnNpemUpCit7CisJYmxrNjRfdCBibG9ja19ucjsKKwl1bnNpZ25lZCBsb25nIGdyb3VwLCBibG9jaywgb2Zmc2V0OworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCXN0cnVjdCBleHQyX2lub2RlX2xhcmdlIHRlbXBfaW5vZGUsICp3X2lub2RlOworCWNoYXIgKnB0cjsKKwlpbnQgY2xlbiwgaSwgbGVuZ3RoOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB1c2VyIHByb3ZpZGVkIGFuIG92ZXJyaWRlIGZ1bmN0aW9uICovCisJaWYgKGZzLT53cml0ZV9pbm9kZSkgeworCQlyZXR2YWwgPSAoZnMtPndyaXRlX2lub2RlKShmcywgaW5vLCBpbm9kZSk7CisJCWlmIChyZXR2YWwgIT0gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGlub2RlIGNhY2hlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgKi8KKwlpZiAoZnMtPmljYWNoZSkgeworCQlmb3IgKGk9MDsgaSA8IGZzLT5pY2FjaGUtPmNhY2hlX3NpemU7IGkrKykgeworCQkJaWYgKGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9PSBpbm8pIHsKKwkJCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm9kZSA9ICppbm9kZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXJldHZhbCA9IGNyZWF0ZV9pY2FjaGUoZnMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlpZiAoKGlubyA9PSAwKSB8fCAoaW5vID4gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpCisJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisKKwlsZW5ndGggPSBidWZzaXplOworCWlmIChsZW5ndGggPCBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKSkKKwkJbGVuZ3RoID0gRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcik7CisKKwlpZiAobGVuZ3RoID4gKGludCkgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX2xhcmdlKSkgeworCQl3X2lub2RlID0gbWFsbG9jKGxlbmd0aCk7CisJCWlmICghd19pbm9kZSkgeworCQkJcmV0dmFsID0gRU5PTUVNOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9IGVsc2UKKwkJd19pbm9kZSA9ICZ0ZW1wX2lub2RlOworCW1lbXNldCh3X2lub2RlLCAwLCBsZW5ndGgpOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJZXh0MmZzX3N3YXBfaW5vZGVfZnVsbChmcywgd19pbm9kZSwKKwkJCSAgICAgICAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgaW5vZGUsCisJCQkgICAgICAgMSwgYnVmc2l6ZSk7CisjZWxzZQorCW1lbWNweSh3X2lub2RlLCBpbm9kZSwgYnVmc2l6ZSk7CisjZW5kaWYKKworCWdyb3VwID0gKGlubyAtIDEpIC8gRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcik7CisJb2Zmc2V0ID0gKChpbm8gLSAxKSAlIEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSAqCisJCUVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCWJsb2NrID0gb2Zmc2V0ID4+IEVYVDJfQkxPQ0tfU0laRV9CSVRTKGZzLT5zdXBlcik7CisJaWYgKCFleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCAodW5zaWduZWQpIGdyb3VwKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX01JU1NJTkdfSU5PREVfVEFCTEU7CisJCWdvdG8gZXJyb3V0OworCX0KKwlibG9ja19uciA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsICh1bnNpZ25lZCkgZ3JvdXApICsgYmxvY2s7CisKKwlvZmZzZXQgJj0gKEVYVDJfQkxPQ0tfU0laRShmcy0+c3VwZXIpIC0gMSk7CisKKwlsZW5ndGggPSBFWFQyX0lOT0RFX1NJWkUoZnMtPnN1cGVyKTsKKwlpZiAobGVuZ3RoID4gYnVmc2l6ZSkKKwkJbGVuZ3RoID0gYnVmc2l6ZTsKKworCXB0ciA9IChjaGFyICopIHdfaW5vZGU7CisKKwl3aGlsZSAobGVuZ3RoKSB7CisJCWNsZW4gPSBsZW5ndGg7CisJCWlmICgob2Zmc2V0ICsgbGVuZ3RoKSA+IGZzLT5ibG9ja3NpemUpCisJCQljbGVuID0gZnMtPmJsb2Nrc2l6ZSAtIG9mZnNldDsKKworCQlpZiAoZnMtPmljYWNoZS0+YnVmZmVyX2JsayAhPSBibG9ja19ucikgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxvY2tfbnIsIDEsCisJCQkJCQkgICAgIGZzLT5pY2FjaGUtPmJ1ZmZlcik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQkJZnMtPmljYWNoZS0+YnVmZmVyX2JsayA9IGJsb2NrX25yOworCQl9CisKKworCQltZW1jcHkoKGNoYXIgKikgZnMtPmljYWNoZS0+YnVmZmVyICsgKHVuc2lnbmVkKSBvZmZzZXQsCisJCSAgICAgICBwdHIsIGNsZW4pOworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibG9ja19uciwgMSwKKwkJCQkJICAgICAgZnMtPmljYWNoZS0+YnVmZmVyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCisJCW9mZnNldCA9IDA7CisJCXB0ciArPSBjbGVuOworCQlsZW5ndGggLT0gY2xlbjsKKwkJYmxvY2tfbnIrKzsKKwl9CisKKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX0NIQU5HRUQ7CitlcnJvdXQ6CisJaWYgKHdfaW5vZGUgJiYgd19pbm9kZSAhPSAmdGVtcF9pbm9kZSkKKwkJZnJlZSh3X2lub2RlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCSAgICAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCXJldHVybiBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChmcywgaW5vLCBpbm9kZSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB3cml0aW5nIGEgbmV3IGlub2RlLiAgSXQgbWFrZXMKKyAqIHN1cmUgdGhhdCBleHRyYSBwYXJ0IG9mIGxhcmdlIGlub2RlcyBpcyBpbml0aWFsaXplZCBwcm9wZXJseS4KKyAqLworZXJyY29kZV90IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJKmJ1ZjsKKwlpbnQgCQkJc2l6ZSA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCXN0cnVjdCBleHQyX2lub2RlX2xhcmdlCSpsYXJnZV9pbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlfX3UzMiAJCQl0ID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKE5VTEwpOworCisJaWYgKCFpbm9kZS0+aV9jdGltZSkKKwkJaW5vZGUtPmlfY3RpbWUgPSB0OworCWlmICghaW5vZGUtPmlfbXRpbWUpCisJCWlub2RlLT5pX210aW1lID0gdDsKKwlpZiAoIWlub2RlLT5pX2F0aW1lKQorCQlpbm9kZS0+aV9hdGltZSA9IHQ7CisKKwlpZiAoc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKQorCQlyZXR1cm4gZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZnMsIGlubywgaW5vZGUsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKworCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKworCW1lbXNldChidWYsIDAsIHNpemUpOworCSpidWYgPSAqaW5vZGU7CisKKwlsYXJnZV9pbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqKSBidWY7CisJbGFyZ2VfaW5vZGUtPmlfZXh0cmFfaXNpemUgPSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UpIC0KKwkJRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFOworCWlmICghbGFyZ2VfaW5vZGUtPmlfY3J0aW1lKQorCQlsYXJnZV9pbm9kZS0+aV9jcnRpbWUgPSB0OworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZnMsIGlubywgYnVmLCBzaXplKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX2dldF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBibGtfdCAqYmxvY2tzKQoreworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCWludAkJCWk7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKGlubyA+IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpCisJCXJldHVybiBFWFQyX0VUX0JBRF9JTk9ERV9OVU07CisKKwlpZiAoZnMtPmdldF9ibG9ja3MpIHsKKwkJaWYgKCEoKmZzLT5nZXRfYmxvY2tzKShmcywgaW5vLCBibG9ja3MpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlmb3IgKGk9MDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykKKwkJYmxvY2tzW2ldID0gaW5vZGUuaV9ibG9ja1tpXTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19jaGVja19kaXJlY3RvcnkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKQoreworCXN0cnVjdAlleHQyX2lub2RlCWlub2RlOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmIChpbm8gPiBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50KQorCQlyZXR1cm4gRVhUMl9FVF9CQURfSU5PREVfTlVNOworCisJaWYgKGZzLT5jaGVja19kaXJlY3RvcnkpIHsKKwkJcmV0dmFsID0gKGZzLT5jaGVja19kaXJlY3RvcnkpKGZzLCBpbm8pOworCQlpZiAocmV0dmFsICE9IEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoIUxJTlVYX1NfSVNESVIoaW5vZGUuaV9tb2RlKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fRElSRUNUT1JZOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pbm9kZV9pby5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW5vZGVfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQzMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW5vZGVfaW8uYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIGlub2RlX2lvLmMgLS0tIFRoaXMgaXMgYWxsb3dzIGFuIGlub2RlIGluIGFuIGV4dDIgZmlsZXN5c3RlbSBpbWFnZQorICogCXRvIGJlIGFjY2Vzc2VkIHZpYSB0aGUgSS9PIG1hbmFnZXIgaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEZvciBjaGVja2luZyBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycy4uLgorICovCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKK3N0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgeworCWludAkJCQltYWdpYzsKKwljaGFyCQkJCW5hbWVbMzJdOworCWV4dDJfZmlsZV90CQkJZmlsZTsKKwlleHQyX2ZpbHN5cwkJCWZzOworCWV4dDJfaW5vX3QgCQkJaW5vOworCXN0cnVjdCBleHQyX2lub2RlCQlpbm9kZTsKKwlpbnQJCQkJZmxhZ3M7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YQkqbmV4dDsKK307CisKKyNkZWZpbmUgQ0hBTk5FTF9IQVNfSU5PREUJMHg4MDAwCisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICp0b3BfaW50ZXJuOworc3RhdGljIGludCBpbm9fdW5pcXVlID0gMDsKKworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX3NldF9ibGtzaXplKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW50IGJsa3NpemUpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9yZWFkX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IGlub2RlX3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RydWN0X2lvX21hbmFnZXIgc3RydWN0X2lub2RlX21hbmFnZXIgPSB7CisJRVhUMl9FVF9NQUdJQ19JT19NQU5BR0VSLAorCSJJbm9kZSBJL08gTWFuYWdlciIsCisJaW5vZGVfb3BlbiwKKwlpbm9kZV9jbG9zZSwKKwlpbm9kZV9zZXRfYmxrc2l6ZSwKKwlpbm9kZV9yZWFkX2JsaywKKwlpbm9kZV93cml0ZV9ibGssCisJaW5vZGVfZmx1c2gsCisJaW5vZGVfd3JpdGVfYnl0ZSwKKwlOVUxMLAorCU5VTEwsCisJaW5vZGVfcmVhZF9ibGs2NCwKKwlpbm9kZV93cml0ZV9ibGs2NAorfTsKKworaW9fbWFuYWdlciBpbm9kZV9pb19tYW5hZ2VyID0gJnN0cnVjdF9pbm9kZV9tYW5hZ2VyOworCitlcnJjb2RlX3QgZXh0MmZzX2lub2RlX2lvX2ludGVybjIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorCQkJCSAgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLAorCQkJCSAgY2hhciAqKm5hbWUpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAJKmRhdGE7CisJZXJyY29kZV90CQkJcmV0dmFsOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSksCisJCQkJICAgICAmZGF0YSkpKQorCQlyZXR1cm4gcmV0dmFsOworCWRhdGEtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JTk9ERV9JT19DSEFOTkVMOworCXNwcmludGYoZGF0YS0+bmFtZSwgIiV1OiVkIiwgaW5vLCBpbm9fdW5pcXVlKyspOworCWRhdGEtPmZpbGUgPSAwOworCWRhdGEtPmZzID0gZnM7CisJZGF0YS0+aW5vID0gaW5vOworCWRhdGEtPmZsYWdzID0gMDsKKwlpZiAoaW5vZGUpIHsKKwkJbWVtY3B5KCZkYXRhLT5pbm9kZSwgaW5vZGUsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCQlkYXRhLT5mbGFncyB8PSBDSEFOTkVMX0hBU19JTk9ERTsKKwl9CisJZGF0YS0+bmV4dCA9IHRvcF9pbnRlcm47CisJdG9wX2ludGVybiA9IGRhdGE7CisJKm5hbWUgPSBkYXRhLT5uYW1lOworCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2lub2RlX2lvX2ludGVybihleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCQkJIGNoYXIgKipuYW1lKQoreworCXJldHVybiBleHQyZnNfaW5vZGVfaW9faW50ZXJuMihmcywgaW5vLCBOVUxMLCBuYW1lKTsKK30KKworCitzdGF0aWMgZXJyY29kZV90IGlub2RlX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKQoreworCWlvX2NoYW5uZWwJaW8gPSBOVUxMOworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKnByZXYsICpkYXRhID0gTlVMTDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJb3Blbl9mbGFnczsKKworCWlmIChuYW1lID09IDApCisJCXJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKworCWZvciAoZGF0YSA9IHRvcF9pbnRlcm4sIHByZXYgPSBOVUxMOyBkYXRhOworCSAgICAgcHJldiA9IGRhdGEsIGRhdGEgPSBkYXRhLT5uZXh0KQorCQlpZiAoc3RyY21wKG5hbWUsIGRhdGEtPm5hbWUpID09IDApCisJCQlicmVhazsKKwlpZiAoIWRhdGEpCisJCXJldHVybiBFTk9FTlQ7CisJaWYgKHByZXYpCisJCXByZXYtPm5leHQgPSBkYXRhLT5uZXh0OworCWVsc2UKKwkJdG9wX2ludGVybiA9IGRhdGEtPm5leHQ7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSwgJmlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGlvLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisKKwlpby0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUw7CisJaW8tPm1hbmFnZXIgPSBpbm9kZV9pb19tYW5hZ2VyOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmaW8tPm5hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCXN0cmNweShpby0+bmFtZSwgbmFtZSk7CisJaW8tPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJaW8tPmJsb2NrX3NpemUgPSAxMDI0OworCWlvLT5yZWFkX2Vycm9yID0gMDsKKwlpby0+d3JpdGVfZXJyb3IgPSAwOworCWlvLT5yZWZjb3VudCA9IDE7CisKKwlvcGVuX2ZsYWdzID0gKGZsYWdzICYgSU9fRkxBR19SVykgPyBFWFQyX0ZJTEVfV1JJVEUgOiAwOworCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4yKGRhdGEtPmZzLCBkYXRhLT5pbm8sCisJCQkJICAgKGRhdGEtPmZsYWdzICYgQ0hBTk5FTF9IQVNfSU5PREUpID8KKwkJCQkgICAmZGF0YS0+aW5vZGUgOiAwLCBvcGVuX2ZsYWdzLAorCQkJCSAgICZkYXRhLT5maWxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwkqY2hhbm5lbCA9IGlvOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChpbyAmJiBpby0+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpby0+bmFtZSk7CisJaWYgKGRhdGEpCisJCWV4dDJmc19mcmVlX21lbSgmZGF0YSk7CisJaWYgKGlvKQorCQlleHQyZnNfZnJlZV9tZW0oJmlvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKC0tY2hhbm5lbC0+cmVmY291bnQgPiAwKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGRhdGEtPmZpbGUpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsLT5wcml2YXRlX2RhdGEpOworCWlmIChjaGFubmVsLT5uYW1lKQorCQlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPm5hbWUpOworCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKmRhdGE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfSU5PREVfSU9fQ0hBTk5FTCk7CisKKwljaGFubmVsLT5ibG9ja19zaXplID0gYmxrc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCB2b2lkICpidWYpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhkYXRhLT5maWxlLAorCQkJCQlibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUsCisJCQkJCUVYVDJfU0VFS19TRVQsIDApKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWNvdW50ID0gKGNvdW50IDwgMCkgPyAtY291bnQgOiAoY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplKTsKKworCXJldHVybiBleHQyZnNfZmlsZV9yZWFkKGRhdGEtPmZpbGUsIGJ1ZiwgY291bnQsIDApOworfQorCitzdGF0aWMgZXJyY29kZV90IGlub2RlX3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gaW5vZGVfcmVhZF9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX0lOT0RFX0lPX0NIQU5ORUwpOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhkYXRhLT5maWxlLAorCQkJCQlibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUsCisJCQkJCUVYVDJfU0VFS19TRVQsIDApKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWNvdW50ID0gKGNvdW50IDwgMCkgPyAtY291bnQgOiAoY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplKTsKKworCXJldHVybiBleHQyZnNfZmlsZV93cml0ZShkYXRhLT5maWxlLCBidWYsIGNvdW50LCAwKTsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbm9kZV93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXJldHVybiBpbm9kZV93cml0ZV9ibGs2NChjaGFubmVsLCBibG9jaywgY291bnQsIGJ1Zik7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfd3JpdGVfYnl0ZShpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSBpbnQgc2l6ZSwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgaW5vZGVfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfSU5PREVfSU9fQ0hBTk5FTCk7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGRhdGEtPmZpbGUsIG9mZnNldCwKKwkJCQkJRVhUMl9TRUVLX1NFVCwgMCkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGV4dDJmc19maWxlX3dyaXRlKGRhdGEtPmZpbGUsIGJ1Ziwgc2l6ZSwgMCk7Cit9CisKKy8qCisgKiBGbHVzaCBkYXRhIGJ1ZmZlcnMgdG8gZGlzay4KKyAqLworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IGlub2RlX3ByaXZhdGVfZGF0YSAqZGF0YTsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCBpbm9kZV9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19JTk9ERV9JT19DSEFOTkVMKTsKKworCXJldHVybiBleHQyZnNfZmlsZV9mbHVzaChkYXRhLT5maWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW9fbWFuYWdlci5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaW9fbWFuYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmYyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pb19tYW5hZ2VyLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBpb19tYW5hZ2VyLmMgLS0tIHRoZSBJL08gbWFuYWdlciBhYnN0cmFjdGlvbgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworZXJyY29kZV90IGlvX2NoYW5uZWxfc2V0X29wdGlvbnMoaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRzKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNoYXIgKm5leHQsICpwdHIsICpvcHRpb25zLCAqYXJnOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCisJaWYgKCFvcHRzKQorCQlyZXR1cm4gMDsKKworCWlmICghY2hhbm5lbC0+bWFuYWdlci0+c2V0X29wdGlvbikKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCW9wdGlvbnMgPSBtYWxsb2Moc3RybGVuKG9wdHMpKzEpOworCWlmICghb3B0aW9ucykKKwkJcmV0dXJuIEVYVDJfRVRfTk9fTUVNT1JZOworCXN0cmNweShvcHRpb25zLCBvcHRzKTsKKwlwdHIgPSBvcHRpb25zOworCisJd2hpbGUgKHB0ciAmJiAqcHRyKSB7CisJCW5leHQgPSBzdHJjaHIocHRyLCAnJicpOworCQlpZiAobmV4dCkKKwkJCSpuZXh0KysgPSAwOworCisJCWFyZyA9IHN0cmNocihwdHIsICc9Jyk7CisJCWlmIChhcmcpCisJCQkqYXJnKysgPSAwOworCisJCXJldHZhbCA9IChjaGFubmVsLT5tYW5hZ2VyLT5zZXRfb3B0aW9uKShjaGFubmVsLCBwdHIsIGFyZyk7CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKwkJcHRyID0gbmV4dDsKKwl9CisJZnJlZShvcHRpb25zKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgaW9fY2hhbm5lbF93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5tYW5hZ2VyLT53cml0ZV9ieXRlKQorCQlyZXR1cm4gY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYnl0ZShjaGFubmVsLCBvZmZzZXQsCisJCQkJCQkgICAgY291bnQsIGRhdGEpOworCisJcmV0dXJuIEVYVDJfRVRfVU5JTVBMRU1FTlRFRDsKK30KKworZXJyY29kZV90IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkgaW50IGNvdW50LCB2b2lkICpkYXRhKQoreworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5tYW5hZ2VyLT5yZWFkX2JsazY0KQorCQlyZXR1cm4gKGNoYW5uZWwtPm1hbmFnZXItPnJlYWRfYmxrNjQpKGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgICAgY291bnQsIGRhdGEpOworCisJaWYgKChibG9jayA+PiAzMikgIT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfSU9fQ0hBTk5FTF9OT19TVVBQT1JUXzY0OworCisJcmV0dXJuIChjaGFubmVsLT5tYW5hZ2VyLT5yZWFkX2JsaykoY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcpIGJsb2NrLAorCQkJCQkgICAgIGNvdW50LCBkYXRhKTsKK30KKworZXJyY29kZV90IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJIGludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisKKwlpZiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrNjQpCisJCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrNjQpKGNoYW5uZWwsIGJsb2NrLAorCQkJCQkJICAgICAgIGNvdW50LCBkYXRhKTsKKworCWlmICgoYmxvY2sgPj4gMzIpICE9IDApCisJCXJldHVybiBFWFQyX0VUX0lPX0NIQU5ORUxfTk9fU1VQUE9SVF82NDsKKworCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+d3JpdGVfYmxrKShjaGFubmVsLCAodW5zaWduZWQgbG9uZykgYmxvY2ssCisJCQkJCSAgICAgY291bnQsIGRhdGEpOworfQorCitlcnJjb2RlX3QgaW9fY2hhbm5lbF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpCit7CisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCisJaWYgKGNoYW5uZWwtPm1hbmFnZXItPmRpc2NhcmQpCisJCXJldHVybiAoY2hhbm5lbC0+bWFuYWdlci0+ZGlzY2FyZCkoY2hhbm5lbCwgYmxvY2ssIGNvdW50KTsKKworCXJldHVybiBFWFQyX0VUX1VOSU1QTEVNRU5URUQ7Cit9CisKK2VycmNvZGVfdCBpb19jaGFubmVsX2FsbG9jX2J1Zihpb19jaGFubmVsIGlvLCBpbnQgY291bnQsIHZvaWQgKnB0cikKK3sKKwlzaXplX3QJc2l6ZTsKKworCWlmIChjb3VudCA9PSAwKQorCQlzaXplID0gaW8tPmJsb2NrX3NpemU7CisJZWxzZSBpZiAoY291bnQgPiAwKQorCQlzaXplID0gaW8tPmJsb2NrX3NpemUgKiBjb3VudDsKKwllbHNlCisJCXNpemUgPSAtY291bnQ7CisKKwlpZiAoaW8tPmFsaWduKQorCQlyZXR1cm4gZXh0MmZzX2dldF9tZW1hbGlnbihzaXplLCBpby0+YWxpZ24sIHB0cik7CisJZWxzZQorCQlyZXR1cm4gZXh0MmZzX2dldF9tZW0oc2l6ZSwgcHRyKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lyZWwuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lyZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWFhMmQyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaXJlbC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogaXJlbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgeworCWJsazY0X3QJYmxvY2s7CisJX191MTYgb2Zmc2V0OworfTsKKworc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgeworCWV4dDJfaW5vX3QJbmV3OworCWV4dDJfaW5vX3QJb3JpZzsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1heF9yZWZzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0aW9uX3RhYmxlICpleHQyX2lyZWw7CisKK3N0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRpb25fdGFibGUgeworCV9fdTMyCW1hZ2ljOworCWNoYXIJKm5hbWU7CisJZXh0Ml9pbm9fdAljdXJyZW50OworCXZvaWQJKnByaXZfZGF0YTsKKworCS8qCisJICogQWRkIGFuIGlub2RlIHJlbG9jYXRpb24gZW50cnkuCisJICovCisJZXJyY29kZV90ICgqcHV0KShleHQyX2lyZWwgaXJlbCwgZXh0Ml9pbm9fdCBvbGQsCisJCQkgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKwkvKgorCSAqIEdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5LgorCSAqLworCWVycmNvZGVfdCAoKmdldCkoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb2xkLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIEdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IGJ5IGl0cyBvcmlnaW5hbCBpbm9kZSBudW1iZXIKKwkgKi8KKwllcnJjb2RlX3QgKCpnZXRfYnlfb3JpZykoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb3JpZywgZXh0Ml9pbm9fdCAqb2xkLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIGlub2RlIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpzdGFydF9pdGVyKShleHQyX2lyZWwgaXJlbCk7CisKKwkvKgorCSAqIFRoZSBpdGVyYXRvciBmdW5jdGlvbiBmb3IgdGhlIGlub2RlIHJlbG9jYXRpb24gZW50cmllcy4KKwkgKiBSZXR1cm5zIGFuIGlub2RlIG51bWJlciBvZiAwIHdoZW4gb3V0IG9mIGVudHJpZXMuCisJICovCisJZXJyY29kZV90ICgqbmV4dCkoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgKm9sZCwKKwkJCSAgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CisKKwkvKgorCSAqIEFkZCBhbiBpbm9kZSByZWZlcmVuY2UgKGkuZS4sIG5vdGUgdGhlIGZhY3QgdGhhdCBhCisJICogcGFydGljdWxhciBibG9jay9vZmZzZXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYW4gaW5vZGUpCisJICovCisJZXJyY29kZV90ICgqYWRkX3JlZikoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgaW5vLAorCQkJICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgKnJlZik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBpbm9kZSByZWZlcmVuY2VzIGZvciBhCisJICogcGFydGljdWxhciBpbm9kZS4KKwkgKi8KKwllcnJjb2RlX3QgKCpzdGFydF9pdGVyX3JlZikoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgaW5vKTsKKworCS8qCisJICogVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUgaW5vZGUgcmVmZXJlbmNlcyBmb3IgYW4KKwkgKiBpbm9kZS4gIFRoZSByZWZlcmVuY2VzIGZvciBvbmx5IG9uZSBpbm9kZSBjYW4gYmUgaW50ZXJhdG9yCisJICogb3ZlciBhdCBhIHRpbWUsIGFzIHRoZSBpdGVyYXRvciBzdGF0ZSBpcyBzdG9yZWQgaW4gZXh0Ml9pcmVsLgorCSAqLworCWVycmNvZGVfdCAoKm5leHRfcmVmKShleHQyX2lyZWwgaXJlbCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSAqcmVmKTsKKworCS8qCisJICogTW92ZSB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSBmcm9tIG9uZSBpbm9kZSBudW1iZXIgdG8KKwkgKiBhbm90aGVyLiAgTm90ZSB0aGF0IHRoZSBpbm9kZSByZWZlcmVuY2VzIGFsc28gbXVzdCBtb3ZlLgorCSAqLworCWVycmNvZGVfdCAoKm1vdmUpKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwgZXh0Ml9pbm9fdCBuZXcpOworCisJLyoKKwkgKiBSZW1vdmUgYW4gaW5vZGUgcmVsb2NhdGlvbiBlbnRyeSwgYWxvbmcgd2l0aCBhbGwgb2YgdGhlCisJICogaW5vZGUgcmVmZXJlbmNlcy4KKwkgKi8KKwllcnJjb2RlX3QgKCpkZWxldGUpKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCk7CisKKwkvKgorCSAqIEZyZWUgdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUuCisJICovCisJZXJyY29kZV90ICgqZnJlZSkoZXh0Ml9pcmVsIGlyZWwpOworfTsKKworZXJyY29kZV90IGV4dDJmc19pcmVsX21lbWFycmF5X2NyZWF0ZShjaGFyICpuYW1lLCBleHQyX2lub190IG1heF9pbm9kZSwKKwkJCQkgICAgZXh0Ml9pcmVsICppcmVsKTsKKworI2RlZmluZSBleHQyZnNfaXJlbF9wdXQoaXJlbCwgb2xkLCBlbnQpICgoaXJlbCktPnB1dCgoaXJlbCksIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZ2V0KGlyZWwsIG9sZCwgZW50KSAoKGlyZWwpLT5nZXQoKGlyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19pcmVsX2dldF9ieV9vcmlnKGlyZWwsIG9yaWcsIG9sZCwgZW50KSBcCisJCQkoKGlyZWwpLT5nZXRfYnlfb3JpZygoaXJlbCksIG9yaWcsIG9sZCwgZW50KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKSAoKGlyZWwpLT5zdGFydF9pdGVyKChpcmVsKSkpCisjZGVmaW5lIGV4dDJmc19pcmVsX25leHQoaXJlbCwgb2xkLCBlbnQpICgoaXJlbCktPm5leHQoKGlyZWwpLCBvbGQsIGVudCkpCisjZGVmaW5lIGV4dDJmc19pcmVsX2FkZF9yZWYoaXJlbCwgaW5vLCByZWYpICgoaXJlbCktPmFkZF9yZWYoKGlyZWwpLCBpbm8sIHJlZikpCisjZGVmaW5lIGV4dDJmc19pcmVsX3N0YXJ0X2l0ZXJfcmVmKGlyZWwsIGlubykgKChpcmVsKS0+c3RhcnRfaXRlcl9yZWYoKGlyZWwpLCBpbm8pKQorI2RlZmluZSBleHQyZnNfaXJlbF9uZXh0X3JlZihpcmVsLCByZWYpICgoaXJlbCktPm5leHRfcmVmKChpcmVsKSwgcmVmKSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfbW92ZShpcmVsLCBvbGQsIG5ldykgKChpcmVsKS0+bW92ZSgoaXJlbCksIG9sZCwgbmV3KSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZGVsZXRlKGlyZWwsIG9sZCkgKChpcmVsKS0+ZGVsZXRlKChpcmVsKSwgb2xkKSkKKyNkZWZpbmUgZXh0MmZzX2lyZWxfZnJlZShpcmVsKSAoKGlyZWwpLT5mcmVlKChpcmVsKSkpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pcmVsX21hLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pcmVsX21hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1NTc5MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2lyZWxfbWEuYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqIGlyZWxfbWEuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiaXJlbC5oIgorCitzdGF0aWMgZXJyY29kZV90IGltYV9wdXQoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb2xkLAorCQkJIHN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5ICplbnQpOworc3RhdGljIGVycmNvZGVfdCBpbWFfZ2V0KGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwKKwkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KTsKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX2dldF9ieV9vcmlnKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9yaWcsIGV4dDJfaW5vX3QgKm9sZCwKKwkJCQkgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CitzdGF0aWMgZXJyY29kZV90IGltYV9zdGFydF9pdGVyKGV4dDJfaXJlbCBpcmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX25leHQoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgKm9sZCwKKwkJCSAgc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCk7CitzdGF0aWMgZXJyY29kZV90IGltYV9hZGRfcmVmKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IGlubywKKwkJCSAgICAgc3RydWN0IGV4dDJfaW5vZGVfcmVmZXJlbmNlICpyZWYpOworc3RhdGljIGVycmNvZGVfdCBpbWFfc3RhcnRfaXRlcl9yZWYoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgaW5vKTsKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX25leHRfcmVmKGV4dDJfaXJlbCBpcmVsLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgKnJlZik7CitzdGF0aWMgZXJyY29kZV90IGltYV9tb3ZlKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwgZXh0Ml9pbm9fdCBuZXcpOworc3RhdGljIGVycmNvZGVfdCBpbWFfZGVsZXRlKGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCk7CitzdGF0aWMgZXJyY29kZV90IGltYV9mcmVlKGV4dDJfaXJlbCBpcmVsKTsKKworLyoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc3RvcmVzIHRoZSBhcnJheSBvZiBpbm9kZSByZWZlcmVuY2VzOyB0aGVyZSBpcworICogYSBzdHJ1Y3R1cmUgZm9yIGVhY2ggaW5vZGUuCisgKi8KK3N0cnVjdCBpbm9kZV9yZWZlcmVuY2VfZW50cnkgeworCV9fdTE2IG51bTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgKnJlZnM7Cit9OworCitzdHJ1Y3QgaXJlbF9tYSB7CisJX191MzIgbWFnaWM7CisJZXh0Ml9pbm9fdCBtYXhfaW5vZGU7CisJZXh0Ml9pbm9fdCByZWZfY3VycmVudDsKKwlpbnQgICByZWZfaXRlcjsKKwlleHQyX2lub190CSpvcmlnX21hcDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgaW5vZGVfcmVmZXJlbmNlX2VudHJ5ICpyZWZfZW50cmllczsKK307CisKK2VycmNvZGVfdCBleHQyZnNfaXJlbF9tZW1hcnJheV9jcmVhdGUoY2hhciAqbmFtZSwgZXh0Ml9pbm9fdCBtYXhfaW5vZGUsCisJCQkJICAgICAgZXh0Ml9pcmVsICpuZXdfaXJlbCkKK3sKKwlleHQyX2lyZWwJCWlyZWwgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IGlyZWxfbWEgCSptYSA9IDA7CisJc2l6ZV90CQlzaXplOworCisJKm5ld19pcmVsID0gMDsKKworCS8qCisJICogQWxsb2NhdGUgbWVtb3J5IHN0cnVjdHVyZXMKKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGlvbl90YWJsZSksCisJCQkJJmlyZWwpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChpcmVsLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGlvbl90YWJsZSkpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKG5hbWUpKzEsICZpcmVsLT5uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlzdHJjcHkoaXJlbC0+bmFtZSwgbmFtZSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGlyZWxfbWEpLCAmbWEpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChtYSwgMCwgc2l6ZW9mKHN0cnVjdCBpcmVsX21hKSk7CisJaXJlbC0+cHJpdl9kYXRhID0gbWE7CisKKwlzaXplID0gKHNpemVfdCkgKHNpemVvZihleHQyX2lub190KSAqIChtYXhfaW5vZGUrMSkpOworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkobWF4X2lub2RlKzEsIHNpemVvZihleHQyX2lub190KSwKKwkJJm1hLT5vcmlnX21hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KG1hLT5vcmlnX21hcCwgMCwgc2l6ZSk7CisKKwlzaXplID0gKHNpemVfdCkgKHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSkgKgorCQkJIChtYXhfaW5vZGUrMSkpOworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoKG1heF9pbm9kZSsxLAorCQlzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkpLCAmbWEtPmVudHJpZXMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCW1lbXNldChtYS0+ZW50cmllcywgMCwgc2l6ZSk7CisKKwlzaXplID0gKHNpemVfdCkgKHNpemVvZihzdHJ1Y3QgaW5vZGVfcmVmZXJlbmNlX2VudHJ5KSAqCisJCQkgKG1heF9pbm9kZSsxKSk7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0obWF4X2lub2RlKzEsCisJCXNpemVvZihzdHJ1Y3QgaW5vZGVfcmVmZXJlbmNlX2VudHJ5KSwgJm1hLT5yZWZfZW50cmllcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJbWVtc2V0KG1hLT5yZWZfZW50cmllcywgMCwgc2l6ZSk7CisJbWEtPm1heF9pbm9kZSA9IG1heF9pbm9kZTsKKworCS8qCisJICogRmlsbCBpbiB0aGUgaXJlbCBkYXRhIHN0cnVjdHVyZQorCSAqLworCWlyZWwtPnB1dCA9IGltYV9wdXQ7CisJaXJlbC0+Z2V0ID0gaW1hX2dldDsKKwlpcmVsLT5nZXRfYnlfb3JpZyA9IGltYV9nZXRfYnlfb3JpZzsKKwlpcmVsLT5zdGFydF9pdGVyID0gaW1hX3N0YXJ0X2l0ZXI7CisJaXJlbC0+bmV4dCA9IGltYV9uZXh0OworCWlyZWwtPmFkZF9yZWYgPSBpbWFfYWRkX3JlZjsKKwlpcmVsLT5zdGFydF9pdGVyX3JlZiA9IGltYV9zdGFydF9pdGVyX3JlZjsKKwlpcmVsLT5uZXh0X3JlZiA9IGltYV9uZXh0X3JlZjsKKwlpcmVsLT5tb3ZlID0gaW1hX21vdmU7CisJaXJlbC0+ZGVsZXRlID0gaW1hX2RlbGV0ZTsKKwlpcmVsLT5mcmVlID0gaW1hX2ZyZWU7CisKKwkqbmV3X2lyZWwgPSBpcmVsOworCXJldHVybiAwOworCitlcnJvdXQ6CisJaW1hX2ZyZWUoaXJlbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbWFfcHV0KGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwKKwkJCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGlub2RlX3JlZmVyZW5jZV9lbnRyeQkqcmVmX2VudDsKKwlzdHJ1Y3QgaXJlbF9tYSAJCQkqbWE7CisJZXJyY29kZV90CQkJcmV0dmFsOworCXNpemVfdAkJCQlzaXplLCBvbGRfc2l6ZTsKKworCW1hID0gaXJlbC0+cHJpdl9kYXRhOworCWlmIChvbGQgPiBtYS0+bWF4X2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJLyoKKwkgKiBGb3JjZSB0aGUgb3JpZyBmaWVsZCB0byB0aGUgY29ycmVjdCB2YWx1ZTsgdGhlIGFwcGxpY2F0aW9uCisJICogcHJvZ3JhbSBzaG91bGRuJ3QgYmUgbWVzc2luZyB3aXRoIHRoaXMgZmllbGQuCisJICovCisJaWYgKG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXS5uZXcgPT0gMCkKKwkJZW50LT5vcmlnID0gb2xkOworCWVsc2UKKwkJZW50LT5vcmlnID0gbWEtPmVudHJpZXNbKHVuc2lnbmVkKSBvbGRdLm9yaWc7CisKKwkvKgorCSAqIElmIG1heF9yZWZzIGhhcyBjaGFuZ2VkLCByZWFsbG9jYXRlIHRoZSByZWZzIGFycmF5CisJICovCisJcmVmX2VudCA9IG1hLT5yZWZfZW50cmllcyArICh1bnNpZ25lZCkgb2xkOworCWlmIChyZWZfZW50LT5yZWZzICYmIGVudC0+bWF4X3JlZnMgIT0KKwkgICAgbWEtPmVudHJpZXNbKHVuc2lnbmVkKSBvbGRdLm1heF9yZWZzKSB7CisJCXNpemUgPSAoc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSkgKiBlbnQtPm1heF9yZWZzKTsKKwkJb2xkX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSkgKgorCQkJICAgIG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXS5tYXhfcmVmcyk7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfbWVtKG9sZF9zaXplLCBzaXplLCAmcmVmX2VudC0+cmVmcyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXSA9ICplbnQ7CisJbWEtPm9yaWdfbWFwWyh1bnNpZ25lZCkgZW50LT5vcmlnXSA9IG9sZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbWFfZ2V0KGV4dDJfaXJlbCBpcmVsLCBleHQyX2lub190IG9sZCwKKwkJCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5ICplbnQpCit7CisJc3RydWN0IGlyZWxfbWEgCSptYTsKKworCW1hID0gaXJlbC0+cHJpdl9kYXRhOworCWlmIChvbGQgPiBtYS0+bWF4X2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWlmIChtYS0+ZW50cmllc1sodW5zaWduZWQpIG9sZF0ubmV3ID09IDApCisJCXJldHVybiBFTk9FTlQ7CisJKmVudCA9IG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbWFfZ2V0X2J5X29yaWcoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb3JpZywgZXh0Ml9pbm9fdCAqb2xkLAorCQkJc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudCkKK3sKKwlzdHJ1Y3QgaXJlbF9tYSAJKm1hOworCWV4dDJfaW5vX3QJaW5vOworCisJbWEgPSBpcmVsLT5wcml2X2RhdGE7CisJaWYgKG9yaWcgPiBtYS0+bWF4X2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWlubyA9IG1hLT5vcmlnX21hcFsodW5zaWduZWQpIG9yaWddOworCWlmIChpbm8gPT0gMCkKKwkJcmV0dXJuIEVOT0VOVDsKKwkqb2xkID0gaW5vOworCSplbnQgPSBtYS0+ZW50cmllc1sodW5zaWduZWQpIGlub107CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX3N0YXJ0X2l0ZXIoZXh0Ml9pcmVsIGlyZWwpCit7CisJaXJlbC0+Y3VycmVudCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX25leHQoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3QgKm9sZCwKKwkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50KQoreworCXN0cnVjdCBpcmVsX21hIAkqbWE7CisKKwltYSA9IGlyZWwtPnByaXZfZGF0YTsKKwl3aGlsZSAoKytpcmVsLT5jdXJyZW50IDwgbWEtPm1heF9pbm9kZSkgeworCQlpZiAobWEtPmVudHJpZXNbKHVuc2lnbmVkKSBpcmVsLT5jdXJyZW50XS5uZXcgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkqb2xkID0gaXJlbC0+Y3VycmVudDsKKwkJKmVudCA9IG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgaXJlbC0+Y3VycmVudF07CisJCXJldHVybiAwOworCX0KKwkqb2xkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBpbWFfYWRkX3JlZihleHQyX2lyZWwgaXJlbCwgZXh0Ml9pbm9fdCBpbm8sCisJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSAqcmVmKQoreworCXN0cnVjdCBpcmVsX21hIAkqbWE7CisJc2l6ZV90CQlzaXplOworCXN0cnVjdCBpbm9kZV9yZWZlcmVuY2VfZW50cnkgKnJlZl9lbnQ7CisJc3RydWN0IGV4dDJfaW5vZGVfcmVsb2NhdGVfZW50cnkgKmVudDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCW1hID0gaXJlbC0+cHJpdl9kYXRhOworCWlmIChpbm8gPiBtYS0+bWF4X2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCisJcmVmX2VudCA9IG1hLT5yZWZfZW50cmllcyArICh1bnNpZ25lZCkgaW5vOworCWVudCA9IG1hLT5lbnRyaWVzICsgKHVuc2lnbmVkKSBpbm87CisKKwkvKgorCSAqIElmIHRoZSBpbm9kZSByZWZlcmVuY2UgYXJyYXkgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LgorCSAqLworCWlmIChyZWZfZW50LT5yZWZzID09IDApIHsKKwkJc2l6ZSA9IChzaXplX3QpICgoc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSkgKgorCQkJCSAgZW50LT5tYXhfcmVmcykpOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGVudC0+bWF4X3JlZnMsCisJCQlzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGVfcmVmZXJlbmNlKSwgJnJlZl9lbnQtPnJlZnMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJbWVtc2V0KHJlZl9lbnQtPnJlZnMsIDAsIHNpemUpOworCQlyZWZfZW50LT5udW0gPSAwOworCX0KKworCWlmIChyZWZfZW50LT5udW0gPj0gZW50LT5tYXhfcmVmcykKKwkJcmV0dXJuIEVYVDJfRVRfVE9PX01BTllfUkVGUzsKKworCXJlZl9lbnQtPnJlZnNbKHVuc2lnbmVkKSByZWZfZW50LT5udW0rK10gPSAqcmVmOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGltYV9zdGFydF9pdGVyX3JlZihleHQyX2lyZWwgaXJlbCwgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGlyZWxfbWEgCSptYTsKKworCW1hID0gaXJlbC0+cHJpdl9kYXRhOworCWlmIChpbm8gPiBtYS0+bWF4X2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCWlmIChtYS0+ZW50cmllc1sodW5zaWduZWQpIGlub10ubmV3ID09IDApCisJCXJldHVybiBFTk9FTlQ7CisJbWEtPnJlZl9jdXJyZW50ID0gaW5vOworCW1hLT5yZWZfaXRlciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX25leHRfcmVmKGV4dDJfaXJlbCBpcmVsLAorCQkJICAgICAgc3RydWN0IGV4dDJfaW5vZGVfcmVmZXJlbmNlICpyZWYpCit7CisJc3RydWN0IGlyZWxfbWEgCSptYTsKKwlzdHJ1Y3QgaW5vZGVfcmVmZXJlbmNlX2VudHJ5ICpyZWZfZW50OworCisJbWEgPSBpcmVsLT5wcml2X2RhdGE7CisKKwlyZWZfZW50ID0gbWEtPnJlZl9lbnRyaWVzICsgbWEtPnJlZl9jdXJyZW50OworCisJaWYgKChyZWZfZW50LT5yZWZzID09IE5VTEwpIHx8CisJICAgIChtYS0+cmVmX2l0ZXIgPj0gcmVmX2VudC0+bnVtKSkgeworCQlyZWYtPmJsb2NrID0gMDsKKwkJcmVmLT5vZmZzZXQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJKnJlZiA9IHJlZl9lbnQtPnJlZnNbbWEtPnJlZl9pdGVyKytdOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBlcnJjb2RlX3QgaW1hX21vdmUoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb2xkLCBleHQyX2lub190IG5ldykKK3sKKwlzdHJ1Y3QgaXJlbF9tYSAJKm1hOworCisJbWEgPSBpcmVsLT5wcml2X2RhdGE7CisJaWYgKChvbGQgPiBtYS0+bWF4X2lub2RlKSB8fCAobmV3ID4gbWEtPm1heF9pbm9kZSkpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJaWYgKG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXS5uZXcgPT0gMCkKKwkJcmV0dXJuIEVOT0VOVDsKKworCW1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgbmV3XSA9IG1hLT5lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXTsKKwlpZiAobWEtPnJlZl9lbnRyaWVzWyh1bnNpZ25lZCkgbmV3XS5yZWZzKQorCQlleHQyZnNfZnJlZV9tZW0oJm1hLT5yZWZfZW50cmllc1sodW5zaWduZWQpIG5ld10ucmVmcyk7CisJbWEtPnJlZl9lbnRyaWVzWyh1bnNpZ25lZCkgbmV3XSA9IG1hLT5yZWZfZW50cmllc1sodW5zaWduZWQpIG9sZF07CisKKwltYS0+ZW50cmllc1sodW5zaWduZWQpIG9sZF0ubmV3ID0gMDsKKwltYS0+cmVmX2VudHJpZXNbKHVuc2lnbmVkKSBvbGRdLm51bSA9IDA7CisJbWEtPnJlZl9lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXS5yZWZzID0gMDsKKworCW1hLT5vcmlnX21hcFttYS0+ZW50cmllc1tuZXddLm9yaWddID0gbmV3OworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGltYV9kZWxldGUoZXh0Ml9pcmVsIGlyZWwsIGV4dDJfaW5vX3Qgb2xkKQoreworCXN0cnVjdCBpcmVsX21hIAkqbWE7CisKKwltYSA9IGlyZWwtPnByaXZfZGF0YTsKKwlpZiAob2xkID4gbWEtPm1heF9pbm9kZSkKKwkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKwlpZiAobWEtPmVudHJpZXNbKHVuc2lnbmVkKSBvbGRdLm5ldyA9PSAwKQorCQlyZXR1cm4gRU5PRU5UOworCisJbWEtPmVudHJpZXNbb2xkXS5uZXcgPSAwOworCWlmIChtYS0+cmVmX2VudHJpZXNbKHVuc2lnbmVkKSBvbGRdLnJlZnMpCisJCWV4dDJmc19mcmVlX21lbSgmbWEtPnJlZl9lbnRyaWVzWyh1bnNpZ25lZCkgb2xkXS5yZWZzKTsKKwltYS0+b3JpZ19tYXBbbWEtPmVudHJpZXNbKHVuc2lnbmVkKSBvbGRdLm9yaWddID0gMDsKKworCW1hLT5yZWZfZW50cmllc1sodW5zaWduZWQpIG9sZF0ubnVtID0gMDsKKwltYS0+cmVmX2VudHJpZXNbKHVuc2lnbmVkKSBvbGRdLnJlZnMgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IGltYV9mcmVlKGV4dDJfaXJlbCBpcmVsKQoreworCXN0cnVjdCBpcmVsX21hIAkqbWE7CisJZXh0Ml9pbm9fdAlpbm87CisKKwlpZiAoIWlyZWwpCisJCXJldHVybiAwOworCisJbWEgPSBpcmVsLT5wcml2X2RhdGE7CisKKwlpZiAobWEpIHsKKwkJaWYgKG1hLT5vcmlnX21hcCkKKwkJCWV4dDJmc19mcmVlX21lbSgmbWEtPm9yaWdfbWFwKTsKKwkJaWYgKG1hLT5lbnRyaWVzKQorCQkJZXh0MmZzX2ZyZWVfbWVtKCZtYS0+ZW50cmllcyk7CisJCWlmIChtYS0+cmVmX2VudHJpZXMpIHsKKwkJCWZvciAoaW5vID0gMDsgaW5vIDw9IG1hLT5tYXhfaW5vZGU7IGlubysrKSB7CisJCQkJaWYgKG1hLT5yZWZfZW50cmllc1sodW5zaWduZWQpIGlub10ucmVmcykKKwkJCQkJZXh0MmZzX2ZyZWVfbWVtKCZtYS0+cmVmX2VudHJpZXNbKHVuc2lnbmVkKSBpbm9dLnJlZnMpOworCQkJfQorCQkJZXh0MmZzX2ZyZWVfbWVtKCZtYS0+cmVmX2VudHJpZXMpOworCQl9CisJCWV4dDJmc19mcmVlX21lbSgmbWEpOworCX0KKwlpZiAoaXJlbC0+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpcmVsLT5uYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmlyZWwpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvaXNtb3VudGVkLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9pc21vdW50ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjgwYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvaXNtb3VudGVkLmMKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBpc21vdW50ZWQuYyAtLS0gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYsMTk5NywxOTk4LDE5OTksMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9MSU5VWF9GRF9ICisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfTE9PUF9ICisjaW5jbHVkZSA8bGludXgvbG9vcC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lmZGVmIEhBVkVfTElOVVhfTUFKT1JfSAorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjZW5kaWYgLyogSEFWRV9MSU5VWF9NQUpPUl9IICovCisjZW5kaWYgLyogSEFWRV9MSU5VWF9MT09QX0ggKi8KKyNpZmRlZiBIQVZFX01OVEVOVF9ICisjaW5jbHVkZSA8bW50ZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE1OVElORk8KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmIC8qIEhBVkVfR0VUTU5USU5GTyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgYSByZWd1bGFyIGZpbGUgaXMgbW91bnRlZC4KKyAqIElmIC9ldGMvbXRhYi8gaXMgYSBzeW1saW5rIG9mIC9wcm9jL21vdW50cywgeW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGNoZWNrCisgKiBiZWNhdXNlIHRoZSBuYW1lIGluIC9wcm9jL21vdW50cyBpcyBhIGxvb3BiYWNrIGRldmljZSBub3QgYSByZWd1bGFyIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbG9vcF9tb3VudGVkKGNvbnN0IGNoYXIgKm1udF9mc25hbWUsIGRldl90IG1udF9yZGV2LAorCQkJCWRldl90IGZpbGVfZGV2LCBpbm9fdCBmaWxlX2lubykKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTE9PUF9IKSAmJiBkZWZpbmVkKEhBVkVfTElOVVhfTUFKT1JfSCkKKwlzdHJ1Y3QgbG9vcF9pbmZvNjQgbG9vcGluZm87CisJaW50IGxvb3BfZmQsIHJldDsKKworCWlmIChtYWpvcihtbnRfcmRldikgPT0gTE9PUF9NQUpPUikgeworCQlsb29wX2ZkID0gb3BlbihtbnRfZnNuYW1lLCBPX1JET05MWSk7CisJCWlmIChsb29wX2ZkIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlyZXQgPSBpb2N0bChsb29wX2ZkLCBMT09QX0dFVF9TVEFUVVM2NCwgJmxvb3BpbmZvKTsKKwkJY2xvc2UobG9vcF9mZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChmaWxlX2RldiA9PSBsb29waW5mby5sb19kZXZpY2UgJiYKKwkJCQlmaWxlX2lubyA9PSBsb29waW5mby5sb19pbm9kZSkKKwkJCXJldHVybiAxOworCX0KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElOVVhfTE9PUF9IKSAmJiBkZWZpbmVkKEhBVkVfTElOVVhfTUFKT1JfSCkgKi8KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEhBVkVfU0VUTU5URU5UCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBhIGZpbGUgaW4gL2V0Yy9tdGFiIGZvcm1hdCB0byBzZWUgaWYgYQorICogZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0CisgKiBvciBjYW4ndCBiZSBvcGVuZWQuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgY2hlY2tfbW50ZW50X2ZpbGUoY29uc3QgY2hhciAqbXRhYl9maWxlLCBjb25zdCBjaGFyICpmaWxlLAorCQkJCSAgIGludCAqbW91bnRfZmxhZ3MsIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwlzdHJ1Y3QgbW50ZW50IAkqbW50OworCXN0cnVjdCBzdGF0CXN0X2J1ZjsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlkZXZfdAkJZmlsZV9kZXY9MCwgZmlsZV9yZGV2PTA7CisJaW5vX3QJCWZpbGVfaW5vPTA7CisJRklMRSAJCSpmOworCWludAkJZmQ7CisKKwkqbW91bnRfZmxhZ3MgPSAwOworCWlmICgoZiA9IHNldG1udGVudCAobXRhYl9maWxlLCAiciIpKSA9PSBOVUxMKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJCWlmIChnZXRlbnYoIkVYVDJGU19OT19NVEFCX09LIikpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIEVYVDJfRVRfTk9fTVRBQl9GSUxFOworCQl9CisJCXJldHVybiBlcnJubzsKKwl9CisJaWYgKHN0YXQoZmlsZSwgJnN0X2J1ZikgPT0gMCkgeworCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXyAvKiBUaGUgR05VIGh1cmQgaXMgYnJva2VuIHdpdGggcmVzcGVjdCB0byBzdGF0IGRldmljZXMgKi8KKwkJCWZpbGVfcmRldiA9IHN0X2J1Zi5zdF9yZGV2OworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJfSBlbHNlIHsKKwkJCWZpbGVfZGV2ID0gc3RfYnVmLnN0X2RldjsKKwkJCWZpbGVfaW5vID0gc3RfYnVmLnN0X2lubzsKKwkJfQorCX0KKwl3aGlsZSAoKG1udCA9IGdldG1udGVudCAoZikpICE9IE5VTEwpIHsKKwkJaWYgKG1udC0+bW50X2ZzbmFtZVswXSAhPSAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNtcChmaWxlLCBtbnQtPm1udF9mc25hbWUpID09IDApCisJCQlicmVhazsKKwkJaWYgKHN0YXQobW50LT5tbnRfZnNuYW1lLCAmc3RfYnVmKSA9PSAwKSB7CisJCQlpZiAoU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKyNpZm5kZWYgX19HTlVfXworCQkJCWlmIChmaWxlX3JkZXYgJiYgKGZpbGVfcmRldiA9PSBzdF9idWYuc3RfcmRldikpCisJCQkJCWJyZWFrOworCQkJCWlmIChjaGVja19sb29wX21vdW50ZWQobW50LT5tbnRfZnNuYW1lLAorCQkJCQkJc3RfYnVmLnN0X3JkZXYsIGZpbGVfZGV2LAorCQkJCQkJZmlsZV9pbm8pID09IDEpCisJCQkJCWJyZWFrOworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZpbGVfZGV2ICYmICgoZmlsZV9kZXYgPT0gc3RfYnVmLnN0X2RldikgJiYKKwkJCQkJCSAoZmlsZV9pbm8gPT0gc3RfYnVmLnN0X2lubykpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtbnQgPT0gMCkgeworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCQkvKgorCQkgKiBEbyBhbiBleHRyYSBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyB0aGUgcm9vdCBkZXZpY2UuICBXZQorCQkgKiBjYW4ndCB0cnVzdCAvZXRjL210YWIsIGFuZCAvcHJvYy9tb3VudHMgd2lsbCBvbmx5IGxpc3QKKwkJICogL2Rldi9yb290IGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLiAgQXJnaC4gIEluc3RlYWQgd2UKKwkJICogY2hlY2sgaWYgdGhlIGdpdmVuIGRldmljZSBoYXMgdGhlIHNhbWUgbWFqb3IvbWlub3IgbnVtYmVyCisJCSAqIGFzIHRoZSBkZXZpY2UgdGhhdCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgb24uCisJCSAqLworCQlpZiAoZmlsZV9yZGV2ICYmIHN0YXQoIi8iLCAmc3RfYnVmKSA9PSAwKSB7CisJCQlpZiAoc3RfYnVmLnN0X2RldiA9PSBmaWxlX3JkZXYpIHsKKwkJCQkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisJCQkJaWYgKG10cHQpCisJCQkJCXN0cm5jcHkobXRwdCwgIi8iLCBtdGxlbik7CisJCQkJZ290byBpc19yb290OworCQkJfQorCQl9CisjZW5kaWYJLyogX19HTlVfXyAqLworCQlnb3RvIGVycm91dDsKKwl9CisjaWZuZGVmIF9fR05VX18gLyogVGhlIEdOVSBodXJkIGlzIGRlZmljaWVudDsgd2hhdCBlbHNlIGlzIG5ldz8gKi8KKwkvKiBWYWxpZGF0ZSB0aGUgZW50cnkgaW4gY2FzZSAvZXRjL210YWIgaXMgb3V0IG9mIGRhdGUgKi8KKwkvKgorCSAqIFdlIG5lZWQgdG8gYmUgcGFyYW5vaWQsIGJlY2F1c2Ugc29tZSBicm9rZW4gZGlzdHJpYnV0aW9ucworCSAqIChyZWFkOiBTbGFja3dhcmUpIGRvbid0IGluaXRpYWxpemUgL2V0Yy9tdGFiIGJlZm9yZSBjaGVja2luZworCSAqIGFsbCBvZiB0aGUgbm9uLXJvb3QgZmlsZXN5c3RlbXMgb24gdGhlIGRpc2suCisJICovCisJaWYgKHN0YXQobW50LT5tbnRfZGlyLCAmc3RfYnVmKSA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWlmIChyZXR2YWwgPT0gRU5PRU5UKSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ZigiQm9ndXMgZW50cnkgaW4gJXMhICAoJXMgZG9lcyBub3QgZXhpc3QpXG4iLAorCQkJICAgICAgIG10YWJfZmlsZSwgbW50LT5tbnRfZGlyKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGZpbGVfcmRldiAmJiAoc3RfYnVmLnN0X2RldiAhPSBmaWxlX3JkZXYpKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJCb2d1cyBlbnRyeSBpbiAlcyEgICglcyBub3QgbW91bnRlZCBvbiAlcylcbiIsCisJCSAgICAgICBtdGFiX2ZpbGUsIGZpbGUsIG1udC0+bW50X2Rpcik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJZ290byBlcnJvdXQ7CisJfQorI2VuZGlmIC8qIF9fR05VX18gKi8KKwkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisKKyNpZmRlZiBNTlRPUFRfUk8KKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJvIG9wdGlvbiBpcyBzZXQgKi8KKwlpZiAoaGFzbW50b3B0KG1udCwgTU5UT1BUX1JPKSkKKwkJKm1vdW50X2ZsYWdzIHw9IEVYVDJfTUZfUkVBRE9OTFk7CisjZW5kaWYKKworCWlmIChtdHB0KQorCQlzdHJuY3B5KG10cHQsIG1udC0+bW50X2RpciwgbXRsZW4pOworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJlZmVycmluZyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLgorCSAqIElmIHNvLCBkbyBhIG1hbnVhbCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIG9wZW4gL2V0Yy9tdGFiCisJICogcmVhZC93cml0ZSwgc2luY2UgaWYgdGhlIHJvb3QgaXMgbW91bnRlZCByZWFkL29ubHksIHRoZQorCSAqIGNvbnRlbnRzIG9mIC9ldGMvbXRhYiBtYXkgbm90IGJlIGFjY3VyYXRlLgorCSAqLworCWlmICghc3RyY21wKG1udC0+bW50X2RpciwgIi8iKSkgeworaXNfcm9vdDoKKyNkZWZpbmUgVEVTVF9GSUxFICIvLmlzbW91bnQtdGVzdC1maWxlIgorCQkqbW91bnRfZmxhZ3MgfD0gRVhUMl9NRl9JU1JPT1Q7CisJCWZkID0gb3BlbihURVNUX0ZJTEUsIE9fUkRXUnxPX0NSRUFULCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVST0ZTKQorCQkJCSptb3VudF9mbGFncyB8PSBFWFQyX01GX1JFQURPTkxZOworCQl9IGVsc2UKKwkJCWNsb3NlKGZkKTsKKwkJKHZvaWQpIHVubGluayhURVNUX0ZJTEUpOworCX0KKwlyZXR2YWwgPSAwOworZXJyb3V0OgorCWVuZG1udGVudCAoZik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBjaGVja19tbnRlbnQoY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncywKKwkJCSAgICAgIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisjaWZkZWYgREVCVUcKKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL3RtcC9tdGFiIiwgZmlsZSwgbW91bnRfZmxhZ3MsCisJCQkJICAgbXRwdCwgbXRsZW4pOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBfX2xpbnV4X18KKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL3Byb2MvbW91bnRzIiwgZmlsZSwgbW91bnRfZmxhZ3MsCisJCQkJICAgbXRwdCwgbXRsZW4pOworCWlmIChyZXR2YWwgPT0gMCAmJiAoKm1vdW50X2ZsYWdzICE9IDApKQorCQlyZXR1cm4gMDsKKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKyNpZiBkZWZpbmVkKE1PVU5URUQpIHx8IGRlZmluZWQoX1BBVEhfTU9VTlRFRCkKKyNpZm5kZWYgTU9VTlRFRAorI2RlZmluZSBNT1VOVEVEIF9QQVRIX01PVU5URUQKKyNlbmRpZiAvKiBNT1VOVEVEICovCisJcmV0dmFsID0gY2hlY2tfbW50ZW50X2ZpbGUoTU9VTlRFRCwgZmlsZSwgbW91bnRfZmxhZ3MsIG10cHQsIG10bGVuKTsKKwlyZXR1cm4gcmV0dmFsOworI2Vsc2UKKwkqbW91bnRfZmxhZ3MgPSAwOworCXJldHVybiAwOworI2VuZGlmIC8qIGRlZmluZWQoTU9VTlRFRCkgfHwgZGVmaW5lZChfUEFUSF9NT1VOVEVEKSAqLworfQorCisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9HRVRNTlRJTkZPKQorCitzdGF0aWMgZXJyY29kZV90IGNoZWNrX2dldG1udGluZm8oY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncywKKwkJCQkgIGNoYXIgKm10cHQsIGludCBtdGxlbikKK3sKKwlzdHJ1Y3Qgc3RhdGZzICptcDsKKyAgICAgICAgaW50ICAgIGxlbiwgbjsKKyAgICAgICAgY29uc3QgIGNoYXIgICAqczE7CisJY2hhcgkqczI7CisKKyAgICAgICAgbiA9IGdldG1udGluZm8oJm1wLCBNTlRfTk9XQUlUKTsKKyAgICAgICAgaWYgKG4gPT0gMCkKKwkJcmV0dXJuIGVycm5vOworCisgICAgICAgIGxlbiA9IHNpemVvZihfUEFUSF9ERVYpIC0gMTsKKyAgICAgICAgczEgPSBmaWxlOworICAgICAgICBpZiAoc3RybmNtcChfUEFUSF9ERVYsIHMxLCBsZW4pID09IDApCisgICAgICAgICAgICAgICAgczEgKz0gbGVuOworCisJKm1vdW50X2ZsYWdzID0gMDsKKyAgICAgICAgd2hpbGUgKC0tbiA+PSAwKSB7CisgICAgICAgICAgICAgICAgczIgPSBtcC0+Zl9tbnRmcm9tbmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcChfUEFUSF9ERVYsIHMyLCBsZW4pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMyICs9IGxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAqczIgPSAncic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoczEsIHMyKSA9PSAwIHx8IHN0cmNtcChzMSwgJnMyWzFdKSA9PSAwKSB7CisJCQkqbW91bnRfZmxhZ3MgPSBFWFQyX01GX01PVU5URUQ7CisJCQlicmVhazsKKwkJfQorICAgICAgICAgICAgICAgICsrbXA7CisJfQorCWlmIChtdHB0KQorCQlzdHJuY3B5KG10cHQsIG1wLT5mX21udG9ubmFtZSwgbXRsZW4pOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIEhBVkVfR0VUTU5USU5GTyAqLworI2VuZGlmIC8qIEhBVkVfU0VUTU5URU5UICovCisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBzd2FwIGRldmljZS4KKyAqLworc3RhdGljIGludCBpc19zd2FwX2RldmljZShjb25zdCBjaGFyICpmaWxlKQoreworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsxMDI0XSwgKmNwOworCWRldl90CQlmaWxlX2RldjsKKwlzdHJ1Y3Qgc3RhdAlzdF9idWY7CisJaW50CQlyZXQgPSAwOworCisJZmlsZV9kZXYgPSAwOworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCWlmICgoc3RhdChmaWxlLCAmc3RfYnVmKSA9PSAwKSAmJgorCSAgICBTX0lTQkxLKHN0X2J1Zi5zdF9tb2RlKSkKKwkJZmlsZV9kZXYgPSBzdF9idWYuc3RfcmRldjsKKyNlbmRpZgkvKiBfX0dOVV9fICovCisKKwlpZiAoIShmID0gZm9wZW4oIi9wcm9jL3N3YXBzIiwgInIiKSkpCisJCXJldHVybiAwOworCS8qIFNraXAgdGhlIGZpcnN0IGxpbmUgKi8KKwlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKQorCQlnb3RvIGxlYXZlOworCWlmICgqYnVmICYmIHN0cm5jbXAoYnVmLCAiRmlsZW5hbWVcdCIsIDkpKQorCQkvKiBMaW51eCA8PTIuNi4xOSBjb250YWluZWQgYSBidWcgaW4gdGhlIC9wcm9jL3N3YXBzCisJCSAqIGNvZGUgd2hlcmUgdGhlIGhlYWRlciB3b3VsZCBub3QgYmUgZGlzcGxheWVkCisJCSAqLworCQlnb3RvIHZhbGlkX2ZpcnN0X2xpbmU7CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpIHsKK3ZhbGlkX2ZpcnN0X2xpbmU6CisJCWlmICgoY3AgPSBzdHJjaHIoYnVmLCAnICcpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJaWYgKChjcCA9IHN0cmNocihidWYsICdcdCcpKSAhPSBOVUxMKQorCQkJKmNwID0gMDsKKwkJaWYgKHN0cmNtcChidWYsIGZpbGUpID09IDApIHsKKwkJCXJldCsrOworCQkJYnJlYWs7CisJCX0KKyNpZm5kZWYgX19HTlVfXworCQlpZiAoZmlsZV9kZXYgJiYgKHN0YXQoYnVmLCAmc3RfYnVmKSA9PSAwKSAmJgorCQkgICAgU19JU0JMSyhzdF9idWYuc3RfbW9kZSkgJiYKKwkJICAgIGZpbGVfZGV2ID09IHN0X2J1Zi5zdF9yZGV2KSB7CisJCQlyZXQrKzsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYgCS8qIF9fR05VX18gKi8KKwl9CisKK2xlYXZlOgorCWZjbG9zZShmKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoKSBmaWxscyBkZXRlcm1pbmVzIGlmIHRoZSBkZXZpY2UgaXMKKyAqIG1vdW50ZWQgb3Igb3RoZXJ3aXNlIGJ1c3ksIGFuZCBmaWxscyBpbiBtb3VudF9mbGFncyB3aXRoIG9uZSBvcgorICogbW9yZSBvZiB0aGUgZm9sbG93aW5nIGZsYWdzOiBFWFQyX01GX01PVU5URUQsIEVYVDJfTUZfSVNST09ULAorICogRVhUMl9NRl9SRUFET05MWSwgRVhUMl9NRl9TV0FQLCBhbmQgRVhUMl9NRl9CVVNZLiAgSWYgbXRwdCBpcworICogbm9uLU5VTEwsIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRldmljZSBpcyBtb3VudGVkIGlzIGNvcGllZCB0bworICogd2hlcmUgbXRwdCBpcyBwb2ludGluZywgdXAgdG8gbXRsZW4gY2hhcmFjdGVycy4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK2VycmNvZGVfdCBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgKm1vdW50X2ZsYWdzLAorCQkJCSAgY2hhciAqbXRwdCwgaW50IG10bGVuKQoreworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJaWYgKGlzX3N3YXBfZGV2aWNlKGRldmljZSkpIHsKKwkJKm1vdW50X2ZsYWdzID0gRVhUMl9NRl9NT1VOVEVEIHwgRVhUMl9NRl9TV0FQOworCQlzdHJuY3B5KG10cHQsICI8c3dhcD4iLCBtdGxlbik7CisJfSBlbHNlIHsKKyNpZmRlZiBIQVZFX1NFVE1OVEVOVAorCQlyZXR2YWwgPSBjaGVja19tbnRlbnQoZGV2aWNlLCBtb3VudF9mbGFncywgbXRwdCwgbXRsZW4pOworI2Vsc2UKKyNpZmRlZiBIQVZFX0dFVE1OVElORk8KKwkJcmV0dmFsID0gY2hlY2tfZ2V0bW50aW5mbyhkZXZpY2UsIG1vdW50X2ZsYWdzLCBtdHB0LCBtdGxlbik7CisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisgI3dhcm5pbmcgIkNhbid0IHVzZSBnZXRtbnRlbnQgb3IgZ2V0bW50aW5mbyB0byBjaGVjayBmb3IgbW91bnRlZCBmaWxlc3lzdGVtcyEiCisjZW5kaWYKKwkJKm1vdW50X2ZsYWdzID0gMDsKKyNlbmRpZiAvKiBIQVZFX0dFVE1OVElORk8gKi8KKyNlbmRpZiAvKiBIQVZFX1NFVE1OVEVOVCAqLworCX0KKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisjaWZkZWYgX19saW51eF9fIC8qIFRoaXMgb25seSB3b3JrcyBvbiBMaW51eCAyLjYrIHN5c3RlbXMgKi8KKwl7CisJCXN0cnVjdCBzdGF0IHN0X2J1ZjsKKworCQlpZiAoc3RhdChkZXZpY2UsICZzdF9idWYpID09IDAgJiYgU19JU0JMSyhzdF9idWYuc3RfbW9kZSkpIHsKKwkJCWludCBmZCA9IG9wZW4oZGV2aWNlLCBPX1JET05MWSB8IE9fRVhDTCk7CisKKwkJCWlmIChmZCA+PSAwKQorCQkJCWNsb3NlKGZkKTsKKwkJCWVsc2UgaWYgKGVycm5vID09IEVCVVNZKQorCQkJCSptb3VudF9mbGFncyB8PSBFWFQyX01GX0JVU1k7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorICogZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoKSBzZXRzIHRoZSBtb3VudF9mbGFncyBFWFQyX01GX01PVU5URUQsCisgKiBFWFQyX01GX1JFQURPTkxZLCBhbmQgRVhUMl9NRl9ST09UCisgKgorICovCitlcnJjb2RlX3QgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoY29uc3QgY2hhciAqZmlsZSwgaW50ICptb3VudF9mbGFncykKK3sKKwlyZXR1cm4gZXh0MmZzX2NoZWNrX21vdW50X3BvaW50KGZpbGUsIG1vdW50X2ZsYWdzLCBOVUxMLCAwKTsKK30KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CXJldHZhbCwgbW91bnRfZmxhZ3M7CisJY2hhcgltbnRwdFs4MF07CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCW1udHB0WzBdID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoYXJndlsxXSwgJm1vdW50X2ZsYWdzLAorCQkJCQkgIG1udHB0LCBzaXplb2YobW50cHQpKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLAorCQkJIndoaWxlIGNhbGxpbmcgZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQiKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJEZXZpY2UgJXMgcmVwb3J0cyBmbGFncyAlMDJ4XG4iLCBhcmd2WzFdLCBtb3VudF9mbGFncyk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9CVVNZKQorCQlwcmludGYoIlx0JXMgaXMgYXBwYXJlbnRseSBpbiB1c2UuXG4iLCBhcmd2WzFdKTsKKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpCisJCXByaW50ZigiXHQlcyBpcyBtb3VudGVkLlxuIiwgYXJndlsxXSk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9TV0FQKQorCQlwcmludGYoIlx0JXMgaXMgYSBzd2FwIGRldmljZS5cbiIsIGFyZ3ZbMV0pOworCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpCisJCXByaW50ZigiXHQlcyBpcyByZWFkLW9ubHkuXG4iLCBhcmd2WzFdKTsKKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX0lTUk9PVCkKKwkJcHJpbnRmKCJcdCVzIGlzIHRoZSByb290IGZpbGVzeXN0ZW0uXG4iLCBhcmd2WzFdKTsKKwlpZiAobW50cHRbMF0pCisJCXByaW50ZigiXHQlcyBpcyBtb3VudGVkIG9uICVzLlxuIiwgYXJndlsxXSwgbW50cHQpOworCWV4aXQoMCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2pmc19jb21wYXQuaCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2pmc19jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhhYWZkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oCkBAIC0wLDAgKzEsNjggQEAKKworI2lmbmRlZiBfSkZTX0NPTVBBVF9ICisjZGVmaW5lIF9KRlNfQ09NUEFUX0gKKworI2luY2x1ZGUgImtlcm5lbC1saXN0LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjZGVmaW5lIHByaW50ayBwcmludGYKKyNkZWZpbmUgS0VSTl9FUlIgIiIKKyNkZWZpbmUgS0VSTl9ERUJVRyAiIgorCisjZGVmaW5lIFJFQUQgMAorI2RlZmluZSBXUklURSAxCisKKyNkZWZpbmUgY3B1X3RvX2JlMzIobikgaHRvbmwobikKKyNkZWZpbmUgYmUzMl90b19jcHUobikgbnRvaGwobikKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdGlkX3Q7Cit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3Mgam91cm5hbF90OworCitzdHJ1Y3QgYnVmZmVyX2hlYWQ7CitzdHJ1Y3QgaW5vZGU7CisKK3N0cnVjdCBqb3VybmFsX3MKK3sKKwl1bnNpZ25lZCBsb25nCQlqX2ZsYWdzOworCWludAkJCWpfZXJybm87CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoJal9zYl9idWZmZXI7CisJc3RydWN0IGpvdXJuYWxfc3VwZXJibG9ja19zICpqX3N1cGVyYmxvY2s7CisJaW50CQkJal9mb3JtYXRfdmVyc2lvbjsKKwl1bnNpZ25lZCBsb25nCQlqX2hlYWQ7CisJdW5zaWduZWQgbG9uZwkJal90YWlsOworCXVuc2lnbmVkIGxvbmcJCWpfZnJlZTsKKwl1bnNpZ25lZCBsb25nCQlqX2ZpcnN0LCBqX2xhc3Q7CisJa2Rldl90CQkJal9kZXY7CisJa2Rldl90CQkJal9mc19kZXY7CisJaW50CQkJal9ibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlqX2Jsa19vZmZzZXQ7CisJdW5zaWduZWQgaW50CQlqX21heGxlbjsKKwlzdHJ1Y3QgaW5vZGUgKgkJal9pbm9kZTsKKwl0aWRfdAkJCWpfdGFpbF9zZXF1ZW5jZTsKKwl0aWRfdAkJCWpfdHJhbnNhY3Rpb25fc2VxdWVuY2U7CisJX191OAkJCWpfdXVpZFsxNl07CisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqal9yZXZva2U7CisJdGlkX3QJCQlqX2ZhaWxlZF9jb21taXQ7Cit9OworCisjZGVmaW5lIEpfQVNTRVJUKGFzc2VydCkJCQkJCQlcCisJZG8geyBpZiAoIShhc3NlcnQpKSB7CQkJCQkJXAorCQlwcmludGYgKCJBc3NlcnRpb24gZmFpbHVyZSBpbiAlcygpIGF0ICVzIGxpbmUgJWQ6ICIJXAorCQkJIlwiJXNcIlxuIiwJCQkJCVwKKwkJCV9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fLCAjIGFzc2VydCk7CVwKKwkJZmF0YWxfZXJyb3IoZTJmc2NrX2dsb2JhbF9jdHgsIDApOwkJCVwKKwl9IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgaXNfam91cm5hbF9hYm9ydCh4KSAwCisKKyNkZWZpbmUgQlVGRkVSX1RSQUNFKGJoLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKworLyogTmVlZCB0aGlzIHNvIHdlIGNhbiBjb21waWxlIHdpdGggY29uZmlndXJlIC0tZW5hYmxlLWdjYy13YWxsICovCisjaWZkZWYgTk9fSU5MSU5FX0ZVTkNTCisjZGVmaW5lIGlubGluZQorI2VuZGlmCisKKyNlbmRpZiAvKiBfSkZTX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9qZnNfZGF0LmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9qZnNfZGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2pmc19kYXQuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogamZzX2RhdC5oIC0tLSBzdHJpcHBlZCBkb3duIGhlYWRlciBmaWxlIHdoaWNoIG9ubHkgY29udGFpbnMgdGhlIEpGUworICogCW9uLWRpc2sgZGF0YSBzdHJ1Y3R1cmVzCisgKi8KKworI2RlZmluZSBKRlNfTUFHSUNfTlVNQkVSIDB4YzAzYjM5OThVIC8qIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIC9kZXYvcmFuZG9tISAqLworCisvKgorICogT24tZGlzayBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgYmxvY2sgdHlwZXM6CisgKi8KKworI2RlZmluZSBKRlNfREVTQ1JJUFRPUl9CTE9DSwkxCisjZGVmaW5lIEpGU19DT01NSVRfQkxPQ0sJMgorI2RlZmluZSBKRlNfU1VQRVJCTE9DSwkJMworCisvKgorICogU3RhbmRhcmQgaGVhZGVyIGZvciBhbGwgZGVzY3JpcHRvciBibG9ja3M6CisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfaGVhZGVyX3MKK3sKKwlfX3UzMgkJaF9tYWdpYzsKKwlfX3UzMgkJaF9ibG9ja3R5cGU7CisJX191MzIJCWhfc2VxdWVuY2U7Cit9IGpvdXJuYWxfaGVhZGVyX3Q7CisKKworLyoKKyAqIFRoZSBibG9jayB0YWc6IHVzZWQgdG8gZGVzY3JpYmUgYSBzaW5nbGUgYnVmZmVyIGluIHRoZSBqb3VybmFsCisgKi8KK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfYmxvY2tfdGFnX3MKK3sKKwlfX3UzMgkJdF9ibG9ja25yOwkvKiBUaGUgb24tZGlzayBibG9jayBudW1iZXIgKi8KKwlfX3UzMgkJdF9mbGFnczsJLyogU2VlIGJlbG93ICovCit9IGpvdXJuYWxfYmxvY2tfdGFnX3Q7CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgam91cm5hbCB0YWcgZmxhZ3Mgd29yZDogKi8KKyNkZWZpbmUgSkZTX0ZMQUdfRVNDQVBFCQkxCS8qIG9uLWRpc2sgYmxvY2sgaXMgZXNjYXBlZCAqLworI2RlZmluZSBKRlNfRkxBR19TQU1FX1VVSUQJMgkvKiBibG9jayBoYXMgc2FtZSB1dWlkIGFzIHByZXZpb3VzICovCisjZGVmaW5lIEpGU19GTEFHX0RFTEVURUQJNAkvKiBibG9jayBkZWxldGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSkZTX0ZMQUdfTEFTVF9UQUcJOAkvKiBsYXN0IHRhZyBpbiB0aGlzIGRlc2NyaXB0b3IgYmxvY2sgKi8KKworCisvKgorICogVGhlIGpvdXJuYWwgc3VwZXJibG9jaworICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3N1cGVyYmxvY2tfcworeworCWpvdXJuYWxfaGVhZGVyX3Qgc19oZWFkZXI7CisKKwkvKiBTdGF0aWMgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgam91cm5hbCAqLworCV9fdTMyCQlzX2Jsb2Nrc2l6ZTsJLyogam91cm5hbCBkZXZpY2UgYmxvY2tzaXplICovCisJX191MzIJCXNfbWF4bGVuOwkvKiB0b3RhbCBibG9ja3MgaW4gam91cm5hbCBmaWxlICovCisJX191MzIJCXNfZmlyc3Q7CS8qIGZpcnN0IGJsb2NrIG9mIGxvZyBpbmZvcm1hdGlvbiAqLworCisJLyogRHluYW1pYyBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsb2cgKi8KKwlfX3UzMgkJc19zZXF1ZW5jZTsJLyogZmlyc3QgY29tbWl0IElEIGV4cGVjdGVkIGluIGxvZyAqLworCV9fdTMyCQlzX3N0YXJ0OwkvKiBibG9ja25yIG9mIHN0YXJ0IG9mIGxvZyAqLworCit9IGpvdXJuYWxfc3VwZXJibG9ja190OworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9qZnNfdXNlci5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvamZzX3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTUyMTIzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvamZzX3VzZXIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0pGU19VU0VSX0gKKyNkZWZpbmUgX0pGU19VU0VSX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrZGV2X3Q7CisKKyNpbmNsdWRlICJrZXJuZWwtamJkLmgiCisKKyNlbmRpZiAvKiBfSkZTX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMva2VybmVsLWpiZC5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMva2VybmVsLWpiZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWJmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9rZXJuZWwtamJkLmgKQEAgLTAsMCArMSw5NTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L2piZC5oCisgKgorICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPgorICoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDAgUmVkIEhhdCwgSW5jIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogRGVmaW5pdGlvbnMgZm9yIHRyYW5zYWN0aW9uIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGJ1ZmZlciBjYWNoZQorICogZmlsZXN5c3RlbSBqb3VybmFsaW5nIHN1cHBvcnQuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSkJEX0gKKyNkZWZpbmUgX0xJTlVYX0pCRF9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19KQkQpIHx8IGRlZmluZWQoQ09ORklHX0pCRF9NT0RVTEUpIHx8ICFkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qIEFsbG93IHRoaXMgZmlsZSB0byBiZSBpbmNsdWRlZCBkaXJlY3RseSBpbnRvIGUyZnNwcm9ncyAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSAiamZzX2NvbXBhdC5oIgorI2RlZmluZSBKRlNfREVCVUcKKyNkZWZpbmUgamZzX2RlYnVnIGpiZF9kZWJ1ZworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L2pvdXJuYWwtaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fRlVOQ1RJT05fXyAiIgorI2VuZGlmCisKKyNkZWZpbmUgam91cm5hbF9vb21fcmV0cnkgMQorCisjaWZkZWYgX19TVERDX18KKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisvKgorICogRGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcgdG8gZW5hYmxlIG1vcmUgZXhwZW5zaXZlIGludGVybmFsCisgKiBjb25zaXN0ZW5jeSBjaGVja3MuICBCeSBkZWZhdWx0IHdlIGRvbid0IGRvIHRoaXMgdW5sZXNzCisgKiBDT05GSUdfSkJEX0RFQlVHIGlzIG9uLgorICovCisjZGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcKK2V4dGVybiBpbnQgam91cm5hbF9lbmFibGVfZGVidWc7CisKKyNkZWZpbmUgamJkX2RlYnVnKG4sIGYsIGEuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKChuKSA8PSBqb3VybmFsX2VuYWJsZV9kZWJ1ZykgewkJCVwKKwkJCXByaW50ayAoS0VSTl9ERUJVRyAiKCVzLCAlZCk6ICVzOiAiLAkJXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorCQkgIAlwcmludGsgKGYsICMjIGEpOwkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGpiZF9kZWJ1ZyhmLCBhLi4uKQkvKiovCisjZWxzZQorI2RlZmluZSBqYmRfZGVidWcoZiwgLi4uKQkvKiovCisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgamJkX2RlYnVnKHgpCQkvKiBBSVggZG9lc24ndCBkbyBTVERDICovCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgKiBfX2piZF9rbWFsbG9jIChjaGFyICp3aGVyZSwgc2l6ZV90IHNpemUsIGludCBmbGFncywgaW50IHJldHJ5KTsKKyNkZWZpbmUgamJkX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKKwlfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCBqb3VybmFsX29vbV9yZXRyeSkKKyNkZWZpbmUgamJkX3JlcF9rbWFsbG9jKHNpemUsIGZsYWdzKSBcCisJX19qYmRfa21hbGxvYyhfX0ZVTkNUSU9OX18sIChzaXplKSwgKGZsYWdzKSwgMSkKKworI2RlZmluZSBKRlNfTUlOX0pPVVJOQUxfQkxPQ0tTIDEwMjQKKworI2lmZGVmIF9fS0VSTkVMX18KK3R5cGVkZWYgc3RydWN0IGhhbmRsZV9zCQloYW5kbGVfdDsJLyogQXRvbWljIG9wZXJhdGlvbiB0eXBlICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3MJam91cm5hbF90OwkvKiBKb3VybmFsIGNvbnRyb2wgc3RydWN0dXJlICovCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgbG9nZ2luZyBtZWNoYW5pc206CisgKi8KKworI2RlZmluZSBKRlNfTUFHSUNfTlVNQkVSIDB4YzAzYjM5OThVIC8qIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIC9kZXYvcmFuZG9tISAqLworCisvKgorICogT24tZGlzayBzdHJ1Y3R1cmVzCisgKi8KKworLyoKKyAqIERlc2NyaXB0b3IgYmxvY2sgdHlwZXM6CisgKi8KKworI2RlZmluZSBKRlNfREVTQ1JJUFRPUl9CTE9DSwkxCisjZGVmaW5lIEpGU19DT01NSVRfQkxPQ0sJMgorI2RlZmluZSBKRlNfU1VQRVJCTE9DS19WMQkzCisjZGVmaW5lIEpGU19TVVBFUkJMT0NLX1YyCTQKKyNkZWZpbmUgSkZTX1JFVk9LRV9CTE9DSwk1CisKKy8qCisgKiBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsbCBkZXNjcmlwdG9yIGJsb2NrczoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9oZWFkZXJfcworeworCV9fdTMyCQloX21hZ2ljOworCV9fdTMyCQloX2Jsb2NrdHlwZTsKKwlfX3UzMgkJaF9zZXF1ZW5jZTsKK30gam91cm5hbF9oZWFkZXJfdDsKKworLyoKKyAqIENoZWNrc3VtIHR5cGVzLgorICovCisjZGVmaW5lIEpCRDJfQ1JDMzJfQ0hLU1VNICAgMQorI2RlZmluZSBKQkQyX01ENV9DSEtTVU0gICAgIDIKKyNkZWZpbmUgSkJEMl9TSEExX0NIS1NVTSAgICAzCisKKyNkZWZpbmUgSkJEMl9DUkMzMl9DSEtTVU1fU0laRSA0CisKKyNkZWZpbmUgSkJEMl9DSEVDS1NVTV9CWVRFUyAoMzIgLyBzaXplb2YoX191MzIpKQorLyoKKyAqIENvbW1pdCBibG9jayBoZWFkZXIgZm9yIHN0b3JpbmcgdHJhbnNhY3Rpb25hbCBjaGVja3N1bXM6CisgKi8KK3N0cnVjdCBjb21taXRfaGVhZGVyIHsKKwlfX3UzMgkJaF9tYWdpYzsKKwlfX3UzMgkJaF9ibG9ja3R5cGU7CisJX191MzIJCWhfc2VxdWVuY2U7CisJdW5zaWduZWQgY2hhcgloX2Noa3N1bV90eXBlOworCXVuc2lnbmVkIGNoYXIJaF9jaGtzdW1fc2l6ZTsKKwl1bnNpZ25lZCBjaGFyCWhfcGFkZGluZ1syXTsKKwlfX3UzMgkJaF9jaGtzdW1bSkJEMl9DSEVDS1NVTV9CWVRFU107CisJX191NjQJCWhfY29tbWl0X3NlYzsKKwlfX3UzMgkJaF9jb21taXRfbnNlYzsKK307CisKKy8qCisgKiBUaGUgYmxvY2sgdGFnOiB1c2VkIHRvIGRlc2NyaWJlIGEgc2luZ2xlIGJ1ZmZlciBpbiB0aGUgam91cm5hbAorICovCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2Jsb2NrX3RhZ19zCit7CisJX191MzIJCXRfYmxvY2tucjsJLyogVGhlIG9uLWRpc2sgYmxvY2sgbnVtYmVyICovCisJX191MzIJCXRfZmxhZ3M7CS8qIFNlZSBiZWxvdyAqLworCV9fdTMyCQl0X2Jsb2NrbnJfaGlnaDsgLyogbW9zdC1zaWduaWZpY2FudCBoaWdoIDMyYml0cy4gKi8KK30gam91cm5hbF9ibG9ja190YWdfdDsKKworI2RlZmluZSBKQkRfVEFHX1NJWkU2NCAoc2l6ZW9mKGpvdXJuYWxfYmxvY2tfdGFnX3QpKQorI2RlZmluZSBKQkRfVEFHX1NJWkUzMiAoOCkKKworLyoKKyAqIFRoZSByZXZva2UgZGVzY3JpcHRvcjogdXNlZCBvbiBkaXNrIHRvIGRlc2NyaWJlIGEgc2VyaWVzIG9mIGJsb2NrcyB0bworICogYmUgcmV2b2tlZCBmcm9tIHRoZSBsb2cKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9yZXZva2VfaGVhZGVyX3MKK3sKKwlqb3VybmFsX2hlYWRlcl90IHJfaGVhZGVyOworCWludAkJIHJfY291bnQ7CS8qIENvdW50IG9mIGJ5dGVzIHVzZWQgaW4gdGhlIGJsb2NrICovCit9IGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90OworCisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgam91cm5hbCB0YWcgZmxhZ3Mgd29yZDogKi8KKyNkZWZpbmUgSkZTX0ZMQUdfRVNDQVBFCQkxCS8qIG9uLWRpc2sgYmxvY2sgaXMgZXNjYXBlZCAqLworI2RlZmluZSBKRlNfRkxBR19TQU1FX1VVSUQJMgkvKiBibG9jayBoYXMgc2FtZSB1dWlkIGFzIHByZXZpb3VzICovCisjZGVmaW5lIEpGU19GTEFHX0RFTEVURUQJNAkvKiBibG9jayBkZWxldGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgSkZTX0ZMQUdfTEFTVF9UQUcJOAkvKiBsYXN0IHRhZyBpbiB0aGlzIGRlc2NyaXB0b3IgYmxvY2sgKi8KKworCisvKgorICogVGhlIGpvdXJuYWwgc3VwZXJibG9jay4gIEFsbCBmaWVsZHMgYXJlIGluIGJpZy1lbmRpYW4gYnl0ZSBvcmRlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9zdXBlcmJsb2NrX3MKK3sKKy8qIDB4MDAwMCAqLworCWpvdXJuYWxfaGVhZGVyX3Qgc19oZWFkZXI7CisKKy8qIDB4MDAwQyAqLworCS8qIFN0YXRpYyBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBqb3VybmFsICovCisJX191MzIJc19ibG9ja3NpemU7CQkvKiBqb3VybmFsIGRldmljZSBibG9ja3NpemUgKi8KKwlfX3UzMglzX21heGxlbjsJCS8qIHRvdGFsIGJsb2NrcyBpbiBqb3VybmFsIGZpbGUgKi8KKwlfX3UzMglzX2ZpcnN0OwkJLyogZmlyc3QgYmxvY2sgb2YgbG9nIGluZm9ybWF0aW9uICovCisKKy8qIDB4MDAxOCAqLworCS8qIER5bmFtaWMgaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbG9nICovCisJX191MzIJc19zZXF1ZW5jZTsJCS8qIGZpcnN0IGNvbW1pdCBJRCBleHBlY3RlZCBpbiBsb2cgKi8KKwlfX3UzMglzX3N0YXJ0OwkJLyogYmxvY2tuciBvZiBzdGFydCBvZiBsb2cgKi8KKworLyogMHgwMDIwICovCisJLyogRXJyb3IgdmFsdWUsIGFzIHNldCBieSBqb3VybmFsX2Fib3J0KCkuICovCisJX19zMzIJc19lcnJubzsKKworLyogMHgwMDI0ICovCisJLyogUmVtYWluaW5nIGZpZWxkcyBhcmUgb25seSB2YWxpZCBpbiBhIHZlcnNpb24tMiBzdXBlcmJsb2NrICovCisJX191MzIJc19mZWF0dXJlX2NvbXBhdDsgCS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfaW5jb21wYXQ7IAkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX2ZlYXR1cmVfcm9fY29tcGF0OyAJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworLyogMHgwMDMwICovCisJX191OAlzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciBqb3VybmFsICovCisKKy8qIDB4MDA0MCAqLworCV9fdTMyCXNfbnJfdXNlcnM7CQkvKiBOciBvZiBmaWxlc3lzdGVtcyBzaGFyaW5nIGxvZyAqLworCisJX191MzIJc19keW5zdXBlcjsJCS8qIEJsb2NrbnIgb2YgZHluYW1pYyBzdXBlcmJsb2NrIGNvcHkqLworCisvKiAweDAwNDggKi8KKwlfX3UzMglzX21heF90cmFuc2FjdGlvbjsJLyogTGltaXQgb2Ygam91cm5hbCBibG9ja3MgcGVyIHRyYW5zLiovCisJX191MzIJc19tYXhfdHJhbnNfZGF0YTsJLyogTGltaXQgb2YgZGF0YSBibG9ja3MgcGVyIHRyYW5zLiAqLworCisvKiAweDAwNTAgKi8KKwlfX3UzMglzX3BhZGRpbmdbNDRdOworCisvKiAweDAxMDAgKi8KKwlfX3U4CXNfdXNlcnNbMTYqNDhdOwkJLyogaWRzIG9mIGFsbCBmcydlcyBzaGFyaW5nIHRoZSBsb2cgKi8KKy8qIDB4MDQwMCAqLworfSBqb3VybmFsX3N1cGVyYmxvY2tfdDsKKworI2RlZmluZSBKRlNfSEFTX0NPTVBBVF9GRUFUVVJFKGosbWFzaykJCQkJCVwKKwkoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYJCQkJCVwKKwkgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfY29tcGF0ICYgZXh0MmZzX2NwdV90b19iZTMyKChtYXNrKSkpKQorI2RlZmluZSBKRlNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGosbWFzaykJCQkJXAorCSgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJgkJCQkJXAorCSAoKGopLT5qX3N1cGVyYmxvY2stPnNfZmVhdHVyZV9yb19jb21wYXQgJiBleHQyZnNfY3B1X3RvX2JlMzIoKG1hc2spKSkpCisjZGVmaW5lIEpGU19IQVNfSU5DT01QQVRfRkVBVFVSRShqLG1hc2spCQkJCVwKKwkoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYJCQkJCVwKKwkgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBleHQyZnNfY3B1X3RvX2JlMzIoKG1hc2spKSkpCisKKyNkZWZpbmUgSkZTX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNCTB4MDAwMDAwMDEKKworI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0UJMHgwMDAwMDAwMQorCisjZGVmaW5lIEpGU19GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRQkJMHgwMDAwMDAwMQorI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF82NEJJVAkJMHgwMDAwMDAwMgorI2RlZmluZSBKRlNfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQJMHgwMDAwMDAwNAorCisvKiBGZWF0dXJlcyBrbm93biB0byB0aGlzIGtlcm5lbCB2ZXJzaW9uOiAqLworI2RlZmluZSBKRlNfS05PV05fQ09NUEFUX0ZFQVRVUkVTCTAKKyNkZWZpbmUgSkZTX0tOT1dOX1JPQ09NUEFUX0ZFQVRVUkVTCTAKKyNkZWZpbmUgSkZTX0tOT1dOX0lOQ09NUEFUX0ZFQVRVUkVTCShKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0V8XAorCQkJCQkgSkZTX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUfFwKKwkJCQkJIEpGU19GRUFUVVJFX0lOQ09NUEFUXzY0QklUKQorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIEpCRF9BU1NFUlRJT05TCisjaWZkZWYgSkJEX0FTU0VSVElPTlMKKyNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoYXNzZXJ0KSkgewkJCQkJCVwKKwkJcHJpbnRrIChLRVJOX0VNRVJHCQkJCQlcCisJCQkiQXNzZXJ0aW9uIGZhaWx1cmUgaW4gJXMoKSBhdCAlczolZDogXCIlc1wiXG4iLAlcCisJCQlfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXywgIyBhc3NlcnQpOwlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoQ09ORklHX0JVRkZFUl9ERUJVRykKK3ZvaWQgYnVmZmVyX2Fzc2VydGlvbl9mYWlsdXJlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoIShleHByKSkJCQkJCQlcCisJCQlidWZmZXJfYXNzZXJ0aW9uX2ZhaWx1cmUoYmgpOwkJCVwKKwkJSl9BU1NFUlQoZXhwcik7CQkJCQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEpfQVNTRVJUX0pIKGpoLCBleHByKQlKX0FTU0VSVF9CSChqaDJiaChqaCksIGV4cHIpCisjZWxzZQorI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJSl9BU1NFUlQoZXhwcikKKyNkZWZpbmUgSl9BU1NFUlRfSkgoamgsIGV4cHIpCUpfQVNTRVJUKGV4cHIpCisjZW5kaWYKKworI2Vsc2UKKyNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQorI2VuZGlmCQkvKiBKQkRfQVNTRVJUSU9OUyAqLworCitlbnVtIGpiZF9zdGF0ZV9iaXRzIHsKKwlCSF9KV3JpdGUKKwkgID0gQkhfUHJpdmF0ZVN0YXJ0LAkvKiAxIGlmIGJlaW5nIHdyaXR0ZW4gdG8gbG9nIChAQEAgREVCVUdHSU5HKSAqLworCUJIX0ZyZWVkLAkJLyogMSBpZiBidWZmZXIgaGFzIGJlZW4gZnJlZWQgKHRydW5jYXRlZCkgKi8KKwlCSF9SZXZva2VkLAkJLyogMSBpZiBidWZmZXIgaGFzIGJlZW4gcmV2b2tlZCBmcm9tIHRoZSBsb2cgKi8KKwlCSF9SZXZva2VWYWxpZCwJCS8qIDEgaWYgYnVmZmVyIHJldm9rZWQgZmxhZyBpcyB2YWxpZCAqLworCUJIX0pCRERpcnR5LAkJLyogMSBpZiBidWZmZXIgaXMgZGlydHkgYnV0IGpvdXJuYWxlZCAqLworfTsKKworLyogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyBvbmUgd2hpY2ggSkJEIGlzIG1hbmFnaW5nICovCitzdGF0aWMgaW5saW5lIGludCBidWZmZXJfamJkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIF9fYnVmZmVyX3N0YXRlKGJoLCBKQkQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqamgyYmgoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpCit7CisJcmV0dXJuIGpoLT5iX2JoOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqb3VybmFsX2hlYWQgKmJoMmpoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJcmV0dXJuIGJoLT5iX3ByaXZhdGU7Cit9CisKK3N0cnVjdCBqYmRfcmV2b2tlX3RhYmxlX3M7CisKKy8qIFRoZSBoYW5kbGVfdCB0eXBlIHJlcHJlc2VudHMgYSBzaW5nbGUgYXRvbWljIHVwZGF0ZSBiZWluZyBwZXJmb3JtZWQKKyAqIGJ5IHNvbWUgcHJvY2Vzcy4gIEFsbCBmaWxlc3lzdGVtIG1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGUgcHJvY2VzcyBnbworICogdGhyb3VnaCB0aGlzIGhhbmRsZS4gIFJlY3Vyc2l2ZSBvcGVyYXRpb25zIChzdWNoIGFzIHF1b3RhIG9wZXJhdGlvbnMpCisgKiBhcmUgZ2F0aGVyZWQgaW50byBhIHNpbmdsZSB1cGRhdGUuCisgKgorICogVGhlIGJ1ZmZlciBjcmVkaXRzIGZpZWxkIGlzIHVzZWQgdG8gYWNjb3VudCBmb3Igam91cm5hbGVkIGJ1ZmZlcnMKKyAqIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBydW5uaW5nIHByb2Nlc3MuICBUbyBlbnN1cmUgdGhhdCB0aGVyZSBpcworICogZW5vdWdoIGxvZyBzcGFjZSBmb3IgYWxsIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gbGltaXQgdGhlCisgKiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVmZmVycyBwb3NzaWJsZSBhdCBhbnkgdGltZS4gIFdoZW4gdGhlCisgKiBvcGVyYXRpb24gY29tcGxldGVzLCBhbnkgYnVmZmVyIGNyZWRpdHMgbm90IHVzZWQgYXJlIGNyZWRpdGVkIGJhY2sgdG8KKyAqIHRoZSB0cmFuc2FjdGlvbiwgc28gdGhhdCBhdCBhbGwgdGltZXMgd2Uga25vdyBob3cgbWFueSBidWZmZXJzIHRoZQorICogb3V0c3RhbmRpbmcgdXBkYXRlcyBvbiBhIHRyYW5zYWN0aW9uIG1pZ2h0IHBvc3NpYmx5IHRvdWNoLiAqLworCitzdHJ1Y3QgaGFuZGxlX3MKK3sKKwkvKiBXaGljaCBjb21wb3VuZCB0cmFuc2FjdGlvbiBpcyB0aGlzIHVwZGF0ZSBhIHBhcnQgb2Y/ICovCisJdHJhbnNhY3Rpb25fdAkgICAgICAqIGhfdHJhbnNhY3Rpb247CisKKwkvKiBOdW1iZXIgb2YgcmVtYWluaW5nIGJ1ZmZlcnMgd2UgYXJlIGFsbG93ZWQgdG8gZGlydHk6ICovCisJaW50CQkJaF9idWZmZXJfY3JlZGl0czsKKworCS8qIFJlZmVyZW5jZSBjb3VudCBvbiB0aGlzIGhhbmRsZSAqLworCWludAkJCWhfcmVmOworCisJLyogRmllbGQgZm9yIGNhbGxlcidzIHVzZSB0byB0cmFjayBlcnJvcnMgdGhyb3VnaCBsYXJnZSBmcworCSAgIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQloX2VycjsKKworCS8qIEZsYWdzICovCisJdW5zaWduZWQgaW50CWhfc3luYzoJCTE7CS8qIHN5bmMtb24tY2xvc2UgKi8KKwl1bnNpZ25lZCBpbnQJaF9qZGF0YToJMTsJLyogZm9yY2UgZGF0YSBqb3VybmFsaW5nICovCisJdW5zaWduZWQgaW50CWhfYWJvcnRlZDoJMTsJLyogZmF0YWwgZXJyb3Igb24gaGFuZGxlICovCit9OworCisKKy8qIFRoZSB0cmFuc2FjdGlvbl90IHR5cGUgaXMgdGhlIGd1dHMgb2YgdGhlIGpvdXJuYWxpbmcgbWVjaGFuaXNtLiAgSXQKKyAqIHRyYWNrcyBhIGNvbXBvdW5kIHRyYW5zYWN0aW9uIHRocm91Z2ggaXRzIHZhcmlvdXMgc3RhdGVzOgorICoKKyAqIFJVTk5JTkc6CWFjY2VwdGluZyBuZXcgdXBkYXRlcworICogTE9DS0VEOglVcGRhdGVzIHN0aWxsIHJ1bm5pbmcgYnV0IHdlIGRvbid0IGFjY2VwdCBuZXcgb25lcworICogUlVORE9XTjoJVXBkYXRlcyBhcmUgdGlkeWluZyB1cCBidXQgaGF2ZSBmaW5pc2hlZCByZXF1ZXN0aW5nCisgKgkJbmV3IGJ1ZmZlcnMgdG8gbW9kaWZ5IChzdGF0ZSBub3QgdXNlZCBmb3Igbm93KQorICogRkxVU0g6ICAgICAgIEFsbCB1cGRhdGVzIGNvbXBsZXRlLCBidXQgd2UgYXJlIHN0aWxsIHdyaXRpbmcgdG8gZGlzaworICogQ09NTUlUOiAgICAgIEFsbCBkYXRhIG9uIGRpc2ssIHdyaXRpbmcgY29tbWl0IHJlY29yZAorICogRklOSVNIRUQ6CVdlIHN0aWxsIGhhdmUgdG8ga2VlcCB0aGUgdHJhbnNhY3Rpb24gZm9yIGNoZWNrcG9pbnRpbmcuCisgKgorICogVGhlIHRyYW5zYWN0aW9uIGtlZXBzIHRyYWNrIG9mIGFsbCBvZiB0aGUgYnVmZmVycyBtb2RpZmllZCBieSBhCisgKiBydW5uaW5nIHRyYW5zYWN0aW9uLCBhbmQgYWxsIG9mIHRoZSBidWZmZXJzIGNvbW1pdHRlZCBidXQgbm90IHlldAorICogZmx1c2hlZCB0byBob21lIGZvciBmaW5pc2hlZCB0cmFuc2FjdGlvbnMuCisgKi8KKworc3RydWN0IHRyYW5zYWN0aW9uX3MKK3sKKwkvKiBQb2ludGVyIHRvIHRoZSBqb3VybmFsIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAqLworCWpvdXJuYWxfdCAqCQl0X2pvdXJuYWw7CisKKwkvKiBTZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KKwl0aWRfdAkJCXRfdGlkOworCisJLyogVHJhbnNhY3Rpb24ncyBjdXJyZW50IHN0YXRlICovCisJZW51bSB7CisJCVRfUlVOTklORywKKwkJVF9MT0NLRUQsCisJCVRfUlVORE9XTiwKKwkJVF9GTFVTSCwKKwkJVF9DT01NSVQsCisJCVRfRklOSVNIRUQKKwl9CQkJdF9zdGF0ZTsKKworCS8qIFdoZXJlIGluIHRoZSBsb2cgZG9lcyB0aGlzIHRyYW5zYWN0aW9uJ3MgY29tbWl0IHN0YXJ0PyAqLworCXVuc2lnbmVkIGxvbmcJCXRfbG9nX3N0YXJ0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBpbm9kZXMgb3duZWQgYnkgdGhpcworICAgICAgICAgICB0cmFuc2FjdGlvbiAqLwkvKiBBS1BNOiB1bnVzZWQgKi8KKwlzdHJ1Y3QgaW5vZGUgKgkJdF9pbGlzdDsKKworCS8qIE51bWJlciBvZiBidWZmZXJzIG9uIHRoZSB0X2J1ZmZlcnMgbGlzdCAqLworCWludAkJCXRfbnJfYnVmZmVyczsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgYnVmZmVycyByZXNlcnZlZCBidXQgbm90CisgICAgICAgICAgIHlldCBtb2RpZmllZCBieSB0aGlzIHRyYW5zYWN0aW9uICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfcmVzZXJ2ZWRfbGlzdDsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgbWV0YWRhdGEgYnVmZmVycyBvd25lZCBieSB0aGlzCisgICAgICAgICAgIHRyYW5zYWN0aW9uICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfYnVmZmVyczsKKworCS8qCisJICogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIGFsbCBkYXRhIGJ1ZmZlcnMgc3RpbGwgdG8gYmUKKwkgKiBmbHVzaGVkIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQuCisJICogUHJvdGVjdGVkIGJ5IGpvdXJuYWxfZGF0YWxpc3RfbG9jay4KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9zeW5jX2RhdGFsaXN0OworCisJLyoKKwkgKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgYWxsIHdyaXRlcGFnZSBkYXRhIGJ1ZmZlcnMKKwkgKiBzdGlsbCB0byBiZSB3cml0dGVuIGJlZm9yZSB0aGlzIHRyYW5zYWN0aW9uIGNhbiBiZSBjb21taXR0ZWQuCisJICogUHJvdGVjdGVkIGJ5IGpvdXJuYWxfZGF0YWxpc3RfbG9jay4KKwkgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9hc3luY19kYXRhbGlzdDsKKworCS8qIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgZm9yZ2V0IGJ1ZmZlcnMgKHN1cGVyY2VkZWQKKyAgICAgICAgICAgYnVmZmVycyB3aGljaCB3ZSBjYW4gdW4tY2hlY2twb2ludCBvbmNlIHRoaXMgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgY29tbWl0cykgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9mb3JnZXQ7CisKKwkvKgorCSAqIERvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgYnVmZmVycyBzdGlsbCB0byBiZQorCSAqIGZsdXNoZWQgYmVmb3JlIHRoaXMgdHJhbnNhY3Rpb24gY2FuIGJlIGNoZWNrcG9pbnRlZC4KKwkgKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfY2hlY2twb2ludF9saXN0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIHRlbXBvcmFyeSBidWZmZXJzIGN1cnJlbnRseQorICAgICAgICAgICB1bmRlcmdvaW5nIElPIGluIHRoZSBsb2cgKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9pb2J1Zl9saXN0OworCisJLyogRG91Ymx5LWxpbmtlZCBjaXJjdWxhciBsaXN0IG9mIG1ldGFkYXRhIGJ1ZmZlcnMgYmVpbmcKKyAgICAgICAgICAgc2hhZG93ZWQgYnkgbG9nIElPLiAgVGhlIElPIGJ1ZmZlcnMgb24gdGhlIGlvYnVmIGxpc3QgYW5kIHRoZQorICAgICAgICAgICBzaGFkb3cgYnVmZmVycyBvbiB0aGlzIGxpc3QgbWF0Y2ggZWFjaCBvdGhlciBvbmUgZm9yIG9uZSBhdAorICAgICAgICAgICBhbGwgdGltZXMuICovCisJc3RydWN0IGpvdXJuYWxfaGVhZCAqCXRfc2hhZG93X2xpc3Q7CisKKwkvKiBEb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3Qgb2YgY29udHJvbCBidWZmZXJzIGJlaW5nIHdyaXR0ZW4KKyAgICAgICAgICAgdG8gdGhlIGxvZy4gKi8KKwlzdHJ1Y3Qgam91cm5hbF9oZWFkICoJdF9sb2dfbGlzdDsKKworCS8qIE51bWJlciBvZiBvdXRzdGFuZGluZyB1cGRhdGVzIHJ1bm5pbmcgb24gdGhpcyB0cmFuc2FjdGlvbiAqLworCWludAkJCXRfdXBkYXRlczsKKworCS8qIE51bWJlciBvZiBidWZmZXJzIHJlc2VydmVkIGZvciB1c2UgYnkgYWxsIGhhbmRsZXMgaW4gdGhpcworCSAqIHRyYW5zYWN0aW9uIGhhbmRsZSBidXQgbm90IHlldCBtb2RpZmllZC4gKi8KKwlpbnQJCQl0X291dHN0YW5kaW5nX2NyZWRpdHM7CisKKwkvKgorCSAqIEZvcndhcmQgYW5kIGJhY2t3YXJkIGxpbmtzIGZvciB0aGUgY2lyY3VsYXIgbGlzdCBvZiBhbGwKKwkgKiB0cmFuc2FjdGlvbnMgYXdhaXRpbmcgY2hlY2twb2ludC4KKwkgKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJdHJhbnNhY3Rpb25fdAkJKnRfY3BuZXh0LCAqdF9jcHByZXY7CisKKwkvKiBXaGVuIHdpbGwgdGhlIHRyYW5zYWN0aW9uIGV4cGlyZSAoYmVjb21lIGR1ZSBmb3IgY29tbWl0KSwgaW4KKwkgKiBqaWZmaWVzID8gKi8KKwl1bnNpZ25lZCBsb25nCQl0X2V4cGlyZXM7CisKKwkvKiBIb3cgbWFueSBoYW5kbGVzIHVzZWQgdGhpcyB0cmFuc2FjdGlvbj8gKi8KKwlpbnQgdF9oYW5kbGVfY291bnQ7Cit9OworCisKKy8qIFRoZSBqb3VybmFsX3QgbWFpbnRhaW5zIGFsbCBvZiB0aGUgam91cm5hbGluZyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYQorICogc2luZ2xlIGZpbGVzeXN0ZW0uICBJdCBpcyBsaW5rZWQgdG8gZnJvbSB0aGUgZnMgc3VwZXJibG9jayBzdHJ1Y3R1cmUuCisgKgorICogV2UgdXNlIHRoZSBqb3VybmFsX3QgdG8ga2VlcCB0cmFjayBvZiBhbGwgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24KKyAqIGFjdGl2aXR5IG9uIHRoZSBmaWxlc3lzdGVtLCBhbmQgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiB0aGUgbG9nCisgKiB3cml0aW5nIHByb2Nlc3MuICovCisKK3N0cnVjdCBqb3VybmFsX3MKK3sKKwkvKiBHZW5lcmFsIGpvdXJuYWxpbmcgc3RhdGUgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nCQlqX2ZsYWdzOworCisJLyogSXMgdGhlcmUgYW4gb3V0c3RhbmRpbmcgdW5jbGVhcmVkIGVycm9yIG9uIHRoZSBqb3VybmFsIChmcm9tCisJICogYSBwcmlvciBhYm9ydCk/ICovCisJaW50CQkJal9lcnJubzsKKworCS8qIFRoZSBzdXBlcmJsb2NrIGJ1ZmZlciAqLworCXN0cnVjdCBidWZmZXJfaGVhZCAqCWpfc2JfYnVmZmVyOworCWpvdXJuYWxfc3VwZXJibG9ja190ICoJal9zdXBlcmJsb2NrOworCisJLyogVmVyc2lvbiBvZiB0aGUgc3VwZXJibG9jayBmb3JtYXQgKi8KKwlpbnQJCQlqX2Zvcm1hdF92ZXJzaW9uOworCisJLyogTnVtYmVyIG9mIHByb2Nlc3NlcyB3YWl0aW5nIHRvIGNyZWF0ZSBhIGJhcnJpZXIgbG9jayAqLworCWludAkJCWpfYmFycmllcl9jb3VudDsKKworCS8qIFRoZSBiYXJyaWVyIGxvY2sgaXRzZWxmICovCisJc3RydWN0IHNlbWFwaG9yZQlqX2JhcnJpZXI7CisKKwkvKiBUcmFuc2FjdGlvbnM6IFRoZSBjdXJyZW50IHJ1bm5pbmcgdHJhbnNhY3Rpb24uLi4gKi8KKwl0cmFuc2FjdGlvbl90ICoJCWpfcnVubmluZ190cmFuc2FjdGlvbjsKKworCS8qIC4uLiB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIHB1c2hpbmcgdG8gZGlzayAuLi4gKi8KKwl0cmFuc2FjdGlvbl90ICoJCWpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKKworCS8qIC4uLiBhbmQgYSBsaW5rZWQgY2lyY3VsYXIgbGlzdCBvZiBhbGwgdHJhbnNhY3Rpb25zIHdhaXRpbmcKKwkgKiBmb3IgY2hlY2twb2ludGluZy4gKi8KKwkvKiBQcm90ZWN0ZWQgYnkgam91cm5hbF9kYXRhbGlzdF9sb2NrICovCisJdHJhbnNhY3Rpb25fdCAqCQlqX2NoZWNrcG9pbnRfdHJhbnNhY3Rpb25zOworCisJLyogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgYSBsb2NrZWQgdHJhbnNhY3Rpb24gdG8gc3RhcnQKKyAgICAgICAgICAgY29tbWl0dGluZywgb3IgZm9yIGEgYmFycmllciBsb2NrIHRvIGJlIHJlbGVhc2VkICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJal93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZDsKKworCS8qIFdhaXQgcXVldWUgZm9yIHdhaXRpbmcgZm9yIGNoZWNrcG9pbnRpbmcgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfbG9nc3BhY2U7CisKKwkvKiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjb21taXQgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfZG9uZV9jb21taXQ7CisKKwkvKiBXYWl0IHF1ZXVlIHRvIHRyaWdnZXIgY2hlY2twb2ludGluZyAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9jaGVja3BvaW50OworCisJLyogV2FpdCBxdWV1ZSB0byB0cmlnZ2VyIGNvbW1pdCAqLworCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF9jb21taXQ7CisKKwkvKiBXYWl0IHF1ZXVlIHRvIHdhaXQgZm9yIHVwZGF0ZXMgdG8gY29tcGxldGUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfdXBkYXRlczsKKworCS8qIFNlbWFwaG9yZSBmb3IgbG9ja2luZyBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hlY2twb2ludHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIAlqX2NoZWNrcG9pbnRfc2VtOworCisJLyogVGhlIG1haW4gam91cm5hbCBsb2NrLCB1c2VkIGJ5IGxvY2tfam91cm5hbCgpICovCisJc3RydWN0IHNlbWFwaG9yZQlqX3NlbTsKKworCS8qIEpvdXJuYWwgaGVhZDogaWRlbnRpZmllcyB0aGUgZmlyc3QgdW51c2VkIGJsb2NrIGluIHRoZSBqb3VybmFsLiAqLworCXVuc2lnbmVkIGxvbmcJCWpfaGVhZDsKKworCS8qIEpvdXJuYWwgdGFpbDogaWRlbnRpZmllcyB0aGUgb2xkZXN0IHN0aWxsLXVzZWQgYmxvY2sgaW4gdGhlCisJICogam91cm5hbC4gKi8KKwl1bnNpZ25lZCBsb25nCQlqX3RhaWw7CisKKwkvKiBKb3VybmFsIGZyZWU6IGhvdyBtYW55IGZyZWUgYmxvY2tzIGFyZSB0aGVyZSBpbiB0aGUgam91cm5hbD8gKi8KKwl1bnNpZ25lZCBsb25nCQlqX2ZyZWU7CisKKwkvKiBKb3VybmFsIHN0YXJ0IGFuZCBlbmQ6IHRoZSBibG9jayBudW1iZXJzIG9mIHRoZSBmaXJzdCB1c2FibGUKKwkgKiBibG9jayBhbmQgb25lIGJleW9uZCB0aGUgbGFzdCB1c2FibGUgYmxvY2sgaW4gdGhlIGpvdXJuYWwuICovCisJdW5zaWduZWQgbG9uZwkJal9maXJzdCwgal9sYXN0OworCisJLyogRGV2aWNlLCBibG9ja3NpemUgYW5kIHN0YXJ0aW5nIGJsb2NrIG9mZnNldCBmb3IgdGhlIGxvY2F0aW9uCisJICogd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICovCisJa2Rldl90CQkJal9kZXY7CisJaW50CQkJal9ibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlqX2Jsa19vZmZzZXQ7CisKKwkvKiBEZXZpY2Ugd2hpY2ggaG9sZHMgdGhlIGNsaWVudCBmcy4gIEZvciBpbnRlcm5hbCBqb3VybmFsIHRoaXMKKwkgKiB3aWxsIGJlIGVxdWFsIHRvIGpfZGV2LiAqLworCWtkZXZfdAkJCWpfZnNfZGV2OworCisJLyogVG90YWwgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgam91cm5hbCByZWdpb24gb24gZGlzay4gKi8KKwl1bnNpZ25lZCBpbnQJCWpfbWF4bGVuOworCisJLyogT3B0aW9uYWwgaW5vZGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGpvdXJuYWwuICBJZiBwcmVzZW50LCBhbGwKKwkgKiBqb3VybmFsIGJsb2NrIG51bWJlcnMgYXJlIG1hcHBlZCBpbnRvIHRoaXMgaW5vZGUgdmlhCisJICogYm1hcCgpLiAqLworCXN0cnVjdCBpbm9kZSAqCQlqX2lub2RlOworCisJLyogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyAqLworCXRpZF90CQkJal90YWlsX3NlcXVlbmNlOworCS8qIFNlcXVlbmNlIG51bWJlciBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiB0byBncmFudCAqLworCXRpZF90CQkJal90cmFuc2FjdGlvbl9zZXF1ZW5jZTsKKwkvKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY29tbWl0dGVkIHRyYW5zYWN0aW9uICovCisJdGlkX3QJCQlqX2NvbW1pdF9zZXF1ZW5jZTsKKwkvKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uIHdhbnRpbmcgY29tbWl0ICovCisJdGlkX3QJCQlqX2NvbW1pdF9yZXF1ZXN0OworCisJLyogSm91cm5hbCB1dWlkOiBpZGVudGlmaWVzIHRoZSBvYmplY3QgKGZpbGVzeXN0ZW0sIExWTSB2b2x1bWUKKwkgKiBldGMpIGJhY2tlZCBieSB0aGlzIGpvdXJuYWwuICBUaGlzIHdpbGwgZXZlbnR1YWxseSBiZQorCSAqIHJlcGxhY2VkIGJ5IGFuIGFycmF5IG9mIHV1aWRzLCBhbGxvd2luZyB1cyB0byBpbmRleCBtdWx0aXBsZQorCSAqIGRldmljZXMgd2l0aGluIGEgc2luZ2xlIGpvdXJuYWwgYW5kIHRvIHBlcmZvcm0gYXRvbWljIHVwZGF0ZXMKKwkgKiBhY3Jvc3MgdGhlbS4gICovCisKKwlfX3U4CQkJal91dWlkWzE2XTsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY29tbWl0IHRocmVhZCBmb3IgdGhpcyBqb3VybmFsICovCisJc3RydWN0IHRhc2tfc3RydWN0ICoJal90YXNrOworCisJLyogTWF4aW11bSBudW1iZXIgb2YgbWV0YWRhdGEgYnVmZmVycyB0byBhbGxvdyBpbiBhIHNpbmdsZQorCSAqIGNvbXBvdW5kIGNvbW1pdCB0cmFuc2FjdGlvbiAqLworCWludAkJCWpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnM7CisKKwkvKiBXaGF0IGlzIHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIGxpZmV0aW1lIGJlZm9yZSB3ZSBiZWdpbiBhCisJICogY29tbWl0PyAqLworCXVuc2lnbmVkIGxvbmcJCWpfY29tbWl0X2ludGVydmFsOworCisJLyogVGhlIHRpbWVyIHVzZWQgdG8gd2FrZXVwIHRoZSBjb21taXQgdGhyZWFkOiAqLworCXN0cnVjdCB0aW1lcl9saXN0ICoJal9jb21taXRfdGltZXI7CisJaW50CQkJal9jb21taXRfdGltZXJfYWN0aXZlOworCisJLyogTGluayBhbGwgam91cm5hbHMgdG9nZXRoZXIgLSBzeXN0ZW0td2lkZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJal9hbGxfam91cm5hbHM7CisKKwkvKiBUaGUgcmV2b2tlIHRhYmxlOiBtYWludGFpbnMgdGhlIGxpc3Qgb2YgcmV2b2tlZCBibG9ja3MgaW4gdGhlCisgICAgICAgICAgIGN1cnJlbnQgdHJhbnNhY3Rpb24uICovCisJc3RydWN0IGpiZF9yZXZva2VfdGFibGVfcyAqal9yZXZva2U7CisKKwkvKiBGYWlsZWQgam91cm5hbCBjb21taXQgSUQgKi8KKwl1bnNpZ25lZCBpbnQJCWpfZmFpbGVkX2NvbW1pdDsKK307CisKKy8qCisgKiBKb3VybmFsIGZsYWcgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBKRlNfVU5NT1VOVAkweDAwMQkvKiBKb3VybmFsIHRocmVhZCBpcyBiZWluZyBkZXN0cm95ZWQgKi8KKyNkZWZpbmUgSkZTX0FCT1JUCTB4MDAyCS8qIEpvdXJuYWxpbmcgaGFzIGJlZW4gYWJvcnRlZCBmb3IgZXJyb3JzLiAqLworI2RlZmluZSBKRlNfQUNLX0VSUgkweDAwNAkvKiBUaGUgZXJybm8gaW4gdGhlIHNiIGhhcyBiZWVuIGFja2VkICovCisjZGVmaW5lIEpGU19GTFVTSEVECTB4MDA4CS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gZmx1c2hlZCAqLworI2RlZmluZSBKRlNfTE9BREVECTB4MDEwCS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gbG9hZGVkICovCisKKy8qCisgKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBqb3VybmFsaW5nIHRyYW5zYWN0aW9uIGFuZCBidWZmZXIKKyAqIG1hbmFnZW1lbnQKKyAqLworCisvKiBGaWxpbmcgYnVmZmVycyAqLworZXh0ZXJuIHZvaWQgX19qb3VybmFsX3VuZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfdW5maWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX3JlZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfcmVmaWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX2ZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKiwgdHJhbnNhY3Rpb25fdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgX19qb3VybmFsX2ZyZWVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmJoKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqLCB0cmFuc2FjdGlvbl90ICosIGludCk7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfY2xlYW5fZGF0YV9saXN0KHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uKTsKKworLyogTG9nIGJ1ZmZlciBhbGxvY2F0aW9uICovCitleHRlcm4gc3RydWN0IGpvdXJuYWxfaGVhZCAqIGpvdXJuYWxfZ2V0X2Rlc2NyaXB0b3JfYnVmZmVyKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGpvdXJuYWxfbmV4dF9sb2dfYmxvY2soam91cm5hbF90ICopOworCisvKiBDb21taXQgbWFuYWdlbWVudCAqLworZXh0ZXJuIHZvaWQgam91cm5hbF9jb21taXRfdHJhbnNhY3Rpb24oam91cm5hbF90ICopOworCisvKiBDaGVja3BvaW50IGxpc3QgbWFuYWdlbWVudCAqLworaW50IF9fam91cm5hbF9jbGVhbl9jaGVja3BvaW50X2xpc3Qoam91cm5hbF90ICpqb3VybmFsKTsKK2V4dGVybiB2b2lkIGpvdXJuYWxfcmVtb3ZlX2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqKTsKK2V4dGVybiB2b2lkIF9fam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChzdHJ1Y3Qgam91cm5hbF9oZWFkICopOworZXh0ZXJuIHZvaWQgam91cm5hbF9pbnNlcnRfY2hlY2twb2ludChzdHJ1Y3Qgam91cm5hbF9oZWFkICosIHRyYW5zYWN0aW9uX3QgKik7CitleHRlcm4gdm9pZCBfX2pvdXJuYWxfaW5zZXJ0X2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqLHRyYW5zYWN0aW9uX3QgKik7CisKKy8qIEJ1ZmZlciBJTyAqLworZXh0ZXJuIGludAoram91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdAkgICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbiwKKwkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipqaF9vdXQsCisJCQkgICAgICBpbnQJCSAgIGJsb2NrbnIpOworCisvKiBUcmFuc2FjdGlvbiBsb2NraW5nICovCitleHRlcm4gdm9pZAkJX193YWl0X29uX2pvdXJuYWwgKGpvdXJuYWxfdCAqKTsKKworLyoKKyAqIEpvdXJuYWwgbG9ja2luZy4KKyAqCisgKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGpvdXJuYWwgZHVyaW5nIHRyYW5zYWN0aW9uIHN0YXRlIGNoYW5nZXMgc28gdGhhdAorICogbm9ib2R5IGV2ZXIgdHJpZXMgdG8gdGFrZSBhIGhhbmRsZSBvbiB0aGUgcnVubmluZyB0cmFuc2FjdGlvbiB3aGlsZQorICogd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgbW92aW5nIGl0IHRvIHRoZSBjb21taXQgcGhhc2UuCisgKgorICogTm90ZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvbXBsZXRlbHkgaW50ZXJydXB0IHVuc2FmZS4gIFdlIG5ldmVyIHRvdWNoCisgKiBqb3VybmFsIHN0cnVjdHVyZXMgZnJvbSBpbnRlcnJ1cHRzLgorICoKKyAqIEluIDIuMiwgdGhlIEJLTCB3YXMgcmVxdWlyZWQgZm9yIGxvY2tfam91cm5hbC4gIFRoaXMgaXMgbm8gbG9uZ2VyCisgKiB0aGUgY2FzZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19qb3VybmFsKGpvdXJuYWxfdCAqam91cm5hbCkKK3sKKwlkb3duKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKKy8qIFRoaXMgcmV0dXJucyB6ZXJvIGlmIHdlIGFjcXVpcmVkIHRoZSBzZW1hcGhvcmUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9sb2NrX2pvdXJuYWwoam91cm5hbF90ICogam91cm5hbCkKK3sKKwlyZXR1cm4gZG93bl90cnlsb2NrKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfam91cm5hbChqb3VybmFsX3QgKiBqb3VybmFsKQoreworCXVwKCZqb3VybmFsLT5qX3NlbSk7Cit9CisKKworc3RhdGljIGlubGluZSBoYW5kbGVfdCAqam91cm5hbF9jdXJyZW50X2hhbmRsZSh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5qb3VybmFsX2luZm87Cit9CisKKy8qIFRoZSBqb3VybmFsaW5nIGNvZGUgdXNlciBpbnRlcmZhY2U6CisgKgorICogQ3JlYXRlIGFuZCBkZXN0cm95IGhhbmRsZXMKKyAqIFJlZ2lzdGVyIGJ1ZmZlciBtb2RpZmljYXRpb25zIGFnYWluc3QgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCisgKi8KKworZXh0ZXJuIGhhbmRsZV90ICpqb3VybmFsX3N0YXJ0KGpvdXJuYWxfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaGFuZGxlX3QgKmpvdXJuYWxfdHJ5X3N0YXJ0KGpvdXJuYWxfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX3Jlc3RhcnQgKGhhbmRsZV90ICosIGludCBuYmxvY2tzKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZXh0ZW5kIChoYW5kbGVfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaW50CSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MgKGhhbmRsZV90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MgKGhhbmRsZV90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJIGpvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gaW50CSBqb3VybmFsX2RpcnR5X2RhdGEgKGhhbmRsZV90ICosCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCBhc3luYyk7CitleHRlcm4gaW50CSBqb3VybmFsX2RpcnR5X21ldGFkYXRhIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF9yZWxlYXNlX2J1ZmZlciAoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIHZvaWQJIGpvdXJuYWxfZm9yZ2V0IChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CitleHRlcm4gdm9pZAkgam91cm5hbF9zeW5jX2J1ZmZlciAoc3RydWN0IGJ1ZmZlcl9oZWFkICopOworZXh0ZXJuIGludAkgam91cm5hbF9mbHVzaHBhZ2Uoam91cm5hbF90ICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludAkgam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzKGpvdXJuYWxfdCAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOworZXh0ZXJuIGludAkgam91cm5hbF9zdG9wKGhhbmRsZV90ICopOworZXh0ZXJuIGludAkgam91cm5hbF9mbHVzaCAoam91cm5hbF90ICopOworCitleHRlcm4gdm9pZAkgam91cm5hbF9sb2NrX3VwZGF0ZXMgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSBqb3VybmFsX3VubG9ja191cGRhdGVzIChqb3VybmFsX3QgKik7CisKK2V4dGVybiBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfZGV2KGtkZXZfdCBkZXYsIGtkZXZfdCBmc19kZXYsCisJCQkJaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgYnNpemUpOworZXh0ZXJuIGpvdXJuYWxfdCAqIGpvdXJuYWxfaW5pdF9pbm9kZSAoc3RydWN0IGlub2RlICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX3VwZGF0ZV9mb3JtYXQgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jaGVja191c2VkX2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2hlY2tfYXZhaWxhYmxlX2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfc2V0X2ZlYXR1cmVzCisJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY3JlYXRlICAgICAoam91cm5hbF90ICopOworZXh0ZXJuIGludAkgICBqb3VybmFsX2xvYWQgICAgICAgKGpvdXJuYWxfdCAqam91cm5hbCk7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX2Rlc3Ryb3kgICAgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9yZWNvdmVyICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3dpcGUgICAgICAgKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3NraXBfcmVjb3ZlcnkgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfdXBkYXRlX3N1cGVyYmxvY2sgKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJICAgX19qb3VybmFsX2Fib3J0ICAgICAgKGpvdXJuYWxfdCAqKTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfYWJvcnQgICAgICAoam91cm5hbF90ICosIGludCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfZXJybm8gICAgICAoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9hY2tfZXJyICAgIChqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2xlYXJfZXJyICAoam91cm5hbF90ICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgbG9uZyBibG9ja25yKTsKK2V4dGVybiBpbnQJICAgIGpvdXJuYWxfZm9yY2VfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCk7CisKKy8qCisgKiBqb3VybmFsX2hlYWQgbWFuYWdlbWVudAorICovCitleHRlcm4gc3RydWN0IGpvdXJuYWxfaGVhZAorCQkqam91cm5hbF9hZGRfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworZXh0ZXJuIHZvaWQJam91cm5hbF9yZW1vdmVfam91cm5hbF9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworZXh0ZXJuIHZvaWQJX19qb3VybmFsX3JlbW92ZV9qb3VybmFsX2hlYWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitleHRlcm4gdm9pZAlqb3VybmFsX3VubG9ja19qb3VybmFsX2hlYWQoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpOworCisvKiBQcmltYXJ5IHJldm9rZSBzdXBwb3J0ICovCisjZGVmaW5lIEpPVVJOQUxfUkVWT0tFX0RFRkFVTFRfSEFTSCAyNTYKK2V4dGVybiBpbnQJICAgam91cm5hbF9pbml0X3Jldm9rZShqb3VybmFsX3QgKiwgaW50KTsKK2V4dGVybiB2b2lkCSAgIGpvdXJuYWxfZGVzdHJveV9yZXZva2VfY2FjaGVzKHZvaWQpOworZXh0ZXJuIGludAkgICBqb3VybmFsX2luaXRfcmV2b2tlX2NhY2hlcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZShqb3VybmFsX3QgKik7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfcmV2b2tlIChoYW5kbGVfdCAqLAorCQkJCXVuc2lnbmVkIGxvbmcsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKK2V4dGVybiBpbnQJICAgam91cm5hbF9jYW5jZWxfcmV2b2tlKGhhbmRsZV90ICosIHN0cnVjdCBqb3VybmFsX2hlYWQgKik7CitleHRlcm4gdm9pZAkgICBqb3VybmFsX3dyaXRlX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqLCB0cmFuc2FjdGlvbl90ICopOworCisvKiBSZWNvdmVyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9yZXZva2Uoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHRpZF90KTsKK2V4dGVybiBpbnQJICAgam91cm5hbF90ZXN0X3Jldm9rZShqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdGlkX3QpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9jbGVhcl9yZXZva2Uoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKTsKKworLyogVGhlIGxvZyB0aHJlYWQgdXNlciBpbnRlcmZhY2U6CisgKgorICogUmVxdWVzdCBzcGFjZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYW5kIGZvcmNlIHRyYW5zYWN0aW9uIGNvbW1pdAorICogdHJhbnNpdGlvbnMgb24gZGVtYW5kLgorICovCisKK2V4dGVybiBpbnQJbG9nX3NwYWNlX2xlZnQgKGpvdXJuYWxfdCAqKTsgLyogQ2FsbGVkIHdpdGggam91cm5hbCBsb2NrZWQgKi8KK2V4dGVybiB0aWRfdAlsb2dfc3RhcnRfY29tbWl0IChqb3VybmFsX3QgKiwgdHJhbnNhY3Rpb25fdCAqKTsKK2V4dGVybiB2b2lkCWxvZ193YWl0X2NvbW1pdCAoam91cm5hbF90ICosIHRpZF90KTsKK2V4dGVybiBpbnQJbG9nX2RvX2NoZWNrcG9pbnQgKGpvdXJuYWxfdCAqLCBpbnQpOworCitleHRlcm4gdm9pZAlsb2dfd2FpdF9mb3Jfc3BhY2Uoam91cm5hbF90ICosIGludCBuYmxvY2tzKTsKK2V4dGVybiB2b2lkCV9fam91cm5hbF9kcm9wX3RyYW5zYWN0aW9uKGpvdXJuYWxfdCAqLCB0cmFuc2FjdGlvbl90ICopOworZXh0ZXJuIGludAljbGVhbnVwX2pvdXJuYWxfdGFpbChqb3VybmFsX3QgKik7CisKKy8qIFJlZHVjZSBqb3VybmFsIG1lbW9yeSB1c2FnZSBieSBmbHVzaGluZyAqLworZXh0ZXJuIHZvaWQgc2hyaW5rX2pvdXJuYWxfbWVtb3J5KHZvaWQpOworCisvKiBEZWJ1Z2dpbmcgY29kZSBvbmx5OiAqLworCisjZGVmaW5lIGpiZF9FTk9TWVMoKSBcCitkbyB7CQkJCQkJCQkgICAgICBcCisJcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gIiBfX0ZVTkNUSU9OX18pOyBcCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICBcCisJc2NoZWR1bGUoKTsJCQkJCQkgICAgICBcCit9IHdoaWxlICgxKQorCisvKgorICogaXNfam91cm5hbF9hYm9ydAorICoKKyAqIFNpbXBsZSB0ZXN0IHdyYXBwZXIgZnVuY3Rpb24gdG8gdGVzdCB0aGUgSkZTX0FCT1JUIHN0YXRlIGZsYWcuICBUaGlzCisgKiBiaXQsIHdoZW4gc2V0LCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGhhZCBhIGZhdGFsIGVycm9yIHNvbWV3aGVyZSwKKyAqIGVpdGhlciBpbnNpZGUgdGhlIGpvdXJuYWxpbmcgbGF5ZXIgb3IgaW5kaWNhdGVkIHRvIHVzIGJ5IHRoZSBjbGllbnQKKyAqIChlZy4gZXh0MyksIGFuZCB0aGF0IHdlIGFuZCBzaG91bGQgbm90IGNvbW1pdCBhbnkgZnVydGhlcgorICogdHJhbnNhY3Rpb25zLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsX3QgKmpvdXJuYWwpCit7CisJcmV0dXJuIGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2hhbmRsZV9hYm9ydGVkKGhhbmRsZV90ICpoYW5kbGUpCit7CisJaWYgKGhhbmRsZS0+aF9hYm9ydGVkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gaXNfam91cm5hbF9hYm9ydGVkKGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGpvdXJuYWxfYWJvcnRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUpCit7CisJaGFuZGxlLT5oX2Fib3J0ZWQgPSAxOworfQorCisvKiBOb3QgYWxsIGFyY2hpdGVjdHVyZXMgZGVmaW5lIEJVRygpICovCisjaWZuZGVmIEJVRworI2RlZmluZSBCVUcoKSBkbyB7IFwKKyAgICAgICAgcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCSogKChjaGFyICopIDApID0gMDsgXAorIH0gd2hpbGUgKDApCisjZW5kaWYgLyogQlVHICovCisKKyNlbHNlCisKK2V4dGVybiBpbnQJICAgam91cm5hbF9yZWNvdmVyICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOworZXh0ZXJuIGludAkgICBqb3VybmFsX3NraXBfcmVjb3ZlcnkgKGpvdXJuYWxfdCAqKTsKKworLyogUHJpbWFyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX2luaXRfcmV2b2tlKGpvdXJuYWxfdCAqLCBpbnQpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZV9jYWNoZXModm9pZCk7CitleHRlcm4gaW50CSAgIGpvdXJuYWxfaW5pdF9yZXZva2VfY2FjaGVzKHZvaWQpOworCisvKiBSZWNvdmVyeSByZXZva2Ugc3VwcG9ydCAqLworZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9yZXZva2Uoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHRpZF90KTsKK2V4dGVybiBpbnQJICAgam91cm5hbF90ZXN0X3Jldm9rZShqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdGlkX3QpOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9jbGVhcl9yZXZva2Uoam91cm5hbF90ICopOworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKTsKKworZXh0ZXJuIHZvaWQJICAgam91cm5hbF9kZXN0cm95X3Jldm9rZShqb3VybmFsX3QgKik7CisjZW5kaWYgLyogX19LRVJORUxfXyAgICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRpZF9ndCh0aWRfdCB4LCB0aWRfdCB5KSBFWFQyRlNfQVRUUigodW51c2VkKSk7CitzdGF0aWMgaW5saW5lIGludCB0aWRfZ2VxKHRpZF90IHgsIHRpZF90IHkpIEVYVDJGU19BVFRSKCh1bnVzZWQpKTsKKworLyogQ29tcGFyaXNvbiBmdW5jdGlvbnMgZm9yIHRyYW5zYWN0aW9uIElEczogcGVyZm9ybSBjb21wYXJpc29ucyB1c2luZworICogbW9kdWxvIGFyaXRobWV0aWMgc28gdGhhdCB0aGV5IHdvcmsgb3ZlciBzZXF1ZW5jZSBudW1iZXIgd3JhcHMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHRpZF9ndCh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPiAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGlkX2dlcSh0aWRfdCB4LCB0aWRfdCB5KQoreworCWludCBkaWZmZXJlbmNlID0gKHggLSB5KTsKKwlyZXR1cm4gKGRpZmZlcmVuY2UgPj0gMCk7Cit9CisKK2V4dGVybiBpbnQgam91cm5hbF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSk7CisKKy8qCisgKiBEZWZpbml0aW9ucyB3aGljaCBhdWdtZW50IHRoZSBidWZmZXJfaGVhZCBsYXllcgorICovCisKKy8qIGpvdXJuYWxpbmcgYnVmZmVyIHR5cGVzICovCisjZGVmaW5lIEJKX05vbmUJCTAJLyogTm90IGpvdXJuYWxlZCAqLworI2RlZmluZSBCSl9TeW5jRGF0YQkxCS8qIE5vcm1hbCBkYXRhOiBmbHVzaCBiZWZvcmUgY29tbWl0ICovCisjZGVmaW5lIEJKX0FzeW5jRGF0YQkyCS8qIHdyaXRlcGFnZSBkYXRhOiB3YWl0IG9uIGl0IGJlZm9yZSBjb21taXQgKi8KKyNkZWZpbmUgQkpfTWV0YWRhdGEJMwkvKiBOb3JtYWwgam91cm5hbGVkIG1ldGFkYXRhICovCisjZGVmaW5lIEJKX0ZvcmdldAk0CS8qIEJ1ZmZlciBzdXBlcmNlZGVkIGJ5IHRoaXMgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUgQkpfSU8JCTUJLyogQnVmZmVyIGlzIGZvciB0ZW1wb3JhcnkgSU8gdXNlICovCisjZGVmaW5lIEJKX1NoYWRvdwk2CS8qIEJ1ZmZlciBjb250ZW50cyBiZWluZyBzaGFkb3dlZCB0byB0aGUgbG9nICovCisjZGVmaW5lIEJKX0xvZ0N0bAk3CS8qIEJ1ZmZlciBjb250YWlucyBsb2cgZGVzY3JpcHRvcnMgKi8KKyNkZWZpbmUgQkpfUmVzZXJ2ZWQJOAkvKiBCdWZmZXIgaXMgcmVzZXJ2ZWQgZm9yIGFjY2VzcyBieSBqb3VybmFsICovCisjZGVmaW5lIEJKX1R5cGVzCTkKKworZXh0ZXJuIGludCBqYmRfYmxvY2tzX3Blcl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisjaWZkZWYgX19LRVJORUxfXworCitleHRlcm4gc3BpbmxvY2tfdCBqaF9zcGxpY2VfbG9jazsKKy8qCisgKiBPbmNlIGBleHByMScgaGFzIGJlZW4gZm91bmQgdHJ1ZSwgdGFrZSBqaF9zcGxpY2VfbG9jaworICogYW5kIHRoZW4gcmVldmFsdWF0ZSBldmVyeXRoaW5nLgorICovCisjZGVmaW5lIFNQTElDRV9MT0NLKGV4cHIxLCBleHByMikJCQkJXAorCSh7CQkJCQkJCVwKKwkJaW50IHJldCA9IChleHByMSk7CQkJCVwKKwkJaWYgKHJldCkgewkJCQkJXAorCQkJc3Bpbl9sb2NrKCZqaF9zcGxpY2VfbG9jayk7CQlcCisJCQlyZXQgPSAoZXhwcjEpICYmIChleHByMik7CQlcCisJCQlzcGluX3VubG9jaygmamhfc3BsaWNlX2xvY2spOwkJXAorCQl9CQkJCQkJXAorCQlyZXQ7CQkJCQkJXAorCX0pCisKKy8qCisgKiBBIG51bWJlciBvZiBidWZmZXIgc3RhdGUgcHJlZGljYXRlcy4gIFRoZXkgdGVzdCBmb3IKKyAqIGJ1ZmZlcl9qYmQoKSBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gY29yZSBrZXJuZWwgY29kZS4KKyAqCisgKiBUaGVzZSB3aWxsIGJlIHJhY3kgb24gU01QIHVubGVzcyB3ZSdyZSAqc3VyZSogdGhhdCB0aGUKKyAqIGJ1ZmZlciB3b24ndCBiZSBkZXRhY2hlZCBmcm9tIHRoZSBqb3VybmFsbGluZyBzeXN0ZW0KKyAqIGluIHBhcmFsbGVsLgorICovCisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBidWZmZXIgaXMgb24gam91cm5hbCBsaXN0IGBsaXN0JyAqLworc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2psaXN0X2VxKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBsaXN0KQoreworCXJldHVybiBTUExJQ0VfTE9DSyhidWZmZXJfamJkKGJoKSwgYmgyamgoYmgpLT5iX2psaXN0ID09IGxpc3QpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGJ1ZmVyIGlzIGRpcnR5IHdydCB0aGUgam91cm5hbCAqLworc3RhdGljIGlubGluZSBpbnQgYnVmZmVyX2pkaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBidWZmZXJfamJkKGJoKSAmJiBfX2J1ZmZlcl9zdGF0ZShiaCwgSkJERGlydHkpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBpdCdzIGEgZGF0YSBidWZmZXIgd2hpY2ggam91cm5hbGxpbmcgaXMgbWFuYWdpbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJ1ZmZlcl9qYmRfZGF0YShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBTUExJQ0VfTE9DSyhidWZmZXJfamJkKGJoKSwKKwkJCWJoMmpoKGJoKS0+Yl9qbGlzdCA9PSBCSl9TeW5jRGF0YSB8fAorCQkJYmgyamgoYmgpLT5iX2psaXN0ID09IEJKX0FzeW5jRGF0YSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKQlKX0FTU0VSVChzcGluX2lzX2xvY2tlZChsb2NrKSkKKyNlbHNlCisjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKQlkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgYnVmZmVyX3RyYWNlX2luaXQoYmgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwcmludF9idWZmZXJfZmllbGRzKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJpbnRfYnVmZmVyX3RyYWNlKGJoKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFKGJoLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQlVGRkVSX1RSQUNFMihiaCwgYmgyLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgSkJVRkZFUl9UUkFDRShqaCwgaW5mbykJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiBDT05GSUdfSkJEIHx8IENPTkZJR19KQkRfTU9EVUxFIHx8ICFfX0tFUk5FTF9fICovCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IG5vLW9wcyB3aGljaCBhbGxvdyB0aGUga2VybmVsIHRvIGNvbXBpbGUgd2l0aG91dCBDT05GSUdfSkJECisgKiBnbyBoZXJlLgorICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICEoZGVmaW5lZChDT05GSUdfSkJEKSB8fCBkZWZpbmVkKENPTkZJR19KQkRfTU9EVUxFKSkKKworI2RlZmluZSBKX0FTU0VSVChleHByKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBKX0FTU0VSVF9CSChiaCwgZXhwcikJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBidWZmZXJfamJkKGJoKQkJCTAKKyNkZWZpbmUgYnVmZmVyX2psaXN0X2VxKGJoLCB2YWwpCTAKKyNkZWZpbmUgam91cm5hbF9idWZmZXJfam91cm5hbF9scnUoYmgpCTAKKworI2VuZGlmCS8qIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoQ09ORklHX0pCRCkgKi8KKyNlbmRpZgkvKiBfTElOVVhfSkJEX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjRmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCkBAIC0wLDAgKzEsMTA5IEBACisjaWZuZGVmIF9MSU5VWF9MSVNUX0gKKyNkZWZpbmUgX0xJTlVYX0xJU1RfSAorCisvKgorICogU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBTb21lIG9mIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgKCJfX3h4eCIpIGFyZSB1c2VmdWwgd2hlbgorICogbWFuaXB1bGF0aW5nIHdob2xlIGxpc3RzIHJhdGhlciB0aGFuIHNpbmdsZSBlbnRyaWVzLCBhcworICogc29tZXRpbWVzIHdlIGFscmVhZHkga25vdyB0aGUgbmV4dC9wcmV2IGVudHJpZXMgYW5kIHdlIGNhbgorICogZ2VuZXJhdGUgYmV0dGVyIGNvZGUgYnkgdXNpbmcgdGhlbSBkaXJlY3RseSByYXRoZXIgdGhhbgorICogdXNpbmcgdGhlIGdlbmVyaWMgc2luZ2xlLWVudHJ5IHJvdXRpbmVzLgorICovCisKK3N0cnVjdCBsaXN0X2hlYWQgeworCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2OworfTsKKworI2RlZmluZSBMSVNUX0hFQURfSU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQorCisjZGVmaW5lIElOSVRfTElTVF9IRUFEKHB0cikgZG8geyBcCisJKHB0ciktPm5leHQgPSAocHRyKTsgKHB0ciktPnByZXYgPSAocHRyKTsgXAorfSB3aGlsZSAoMCkKKworI2lmICghZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19XQVRDT01DX18pKQorI2RlZmluZSBfX2lubGluZV9fCisjZW5kaWYKKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICogbmV3LAorCXN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAorCXN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBuZXc7CisJbmV3LT5uZXh0ID0gbmV4dDsKKwluZXctPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXc7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBoZWFkLi4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOworfQorCisvKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGF0IHRoZSB0YWlsCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKgorICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzCisgKiBwb2ludCB0byBlYWNoIG90aGVyLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGxpc3RfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOworfQorCisvKgorICogU3BsaWNlIGluICJsaXN0IiBpbnRvICJoZWFkIgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5uZXh0OworCisJaWYgKGZpcnN0ICE9IGxpc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKKworCQlmaXJzdC0+cHJldiA9IGhlYWQ7CisJCWhlYWQtPm5leHQgPSBmaXJzdDsKKworCQlsYXN0LT5uZXh0ID0gYXQ7CisJCWF0LT5wcmV2ID0gbGFzdDsKKwl9Cit9CisKKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCSgodHlwZSAqKSgoY2hhciAqKShwdHIpLSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPm1lbWJlcikpKQorCisjZGVmaW5lIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCisgICAgICAgIGZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvbGluay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTU1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9saW5rLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBsaW5rLmMgLS0tIGNyZWF0ZSBsaW5rcyBpbiBhIGV4dDJmcyBkaXJlY3RvcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgbGlua19zdHJ1Y3QgIHsKKwlleHQyX2ZpbHN5cwlmczsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJbmFtZWxlbjsKKwlleHQyX2lub190CWlub2RlOworCWludAkJZmxhZ3M7CisJaW50CQlkb25lOworCXVuc2lnbmVkIGludAlibG9ja3NpemU7CisJZXJyY29kZV90CWVycjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7Cit9OworCitzdGF0aWMgaW50IGxpbmtfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICBpbnQJb2Zmc2V0LAorCQkgICAgIGludAlibG9ja3NpemUsCisJCSAgICAgY2hhcgkqYnVmLAorCQkgICAgIHZvaWQJKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgbGlua19zdHJ1Y3QgKmxzID0gKHN0cnVjdCBsaW5rX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5ICpuZXh0OworCXVuc2lnbmVkIGludCByZWNfbGVuLCBtaW5fcmVjX2xlbiwgY3Vycl9yZWNfbGVuOworCWludCByZXQgPSAwOworCisJaWYgKGxzLT5kb25lKQorCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCisJcmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4obHMtPm5hbWVsZW4pOworCisJbHMtPmVyciA9IGV4dDJmc19nZXRfcmVjX2xlbihscy0+ZnMsIGRpcmVudCwgJmN1cnJfcmVjX2xlbik7CisJaWYgKGxzLT5lcnIpCisJCXJldHVybiBESVJFTlRfQUJPUlQ7CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeSBlbnRyeSAoaWYgYW55KSBpcyB1bnVzZWQ7CisJICogaWYgc28sIGFic29yYiBpdCBpbnRvIHRoaXMgb25lLgorCSAqLworCW5leHQgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChidWYgKyBvZmZzZXQgKyBjdXJyX3JlY19sZW4pOworCWlmICgob2Zmc2V0ICsgKGludCkgY3Vycl9yZWNfbGVuIDwgYmxvY2tzaXplIC0gOCkgJiYKKwkgICAgKG5leHQtPmlub2RlID09IDApICYmCisJICAgIChvZmZzZXQgKyAoaW50KSBjdXJyX3JlY19sZW4gKyAoaW50KSBuZXh0LT5yZWNfbGVuIDw9IGJsb2Nrc2l6ZSkpIHsKKwkJY3Vycl9yZWNfbGVuICs9IG5leHQtPnJlY19sZW47CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCBjdXJyX3JlY19sZW4sIGRpcmVudCk7CisJCWlmIChscy0+ZXJyKQorCQkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKwkJcmV0ID0gRElSRU5UX0NIQU5HRUQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZGlyZWN0b3J5IGVudHJ5IGlzIHVzZWQsIHNlZSBpZiB3ZSBjYW4gc3BsaXQgdGhlCisJICogZGlyZWN0b3J5IGVudHJ5IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBuYW1lLiAgSWYgc28sCisJICogdHJ1bmNhdGUgaXQgYW5kIHJldHVybi4KKwkgKi8KKwlpZiAoZGlyZW50LT5pbm9kZSkgeworCQltaW5fcmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4oZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpOworCQlpZiAoY3Vycl9yZWNfbGVuIDwgKG1pbl9yZWNfbGVuICsgcmVjX2xlbikpCisJCQlyZXR1cm4gcmV0OworCQlyZWNfbGVuID0gY3Vycl9yZWNfbGVuIC0gbWluX3JlY19sZW47CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCBtaW5fcmVjX2xlbiwgZGlyZW50KTsKKwkJaWYgKGxzLT5lcnIpCisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQluZXh0ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSAoYnVmICsgb2Zmc2V0ICsKKwkJCQkJCSAgZGlyZW50LT5yZWNfbGVuKTsKKwkJbmV4dC0+aW5vZGUgPSAwOworCQluZXh0LT5uYW1lX2xlbiA9IDA7CisJCWxzLT5lcnIgPSBleHQyZnNfc2V0X3JlY19sZW4obHMtPmZzLCByZWNfbGVuLCBuZXh0KTsKKwkJaWYgKGxzLT5lcnIpCisJCQlyZXR1cm4gRElSRU5UX0FCT1JUOworCQlyZXR1cm4gRElSRU5UX0NIQU5HRUQ7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgdGhpcyBmYXIsIHRoZW4gdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyBub3QgdXNlZC4KKwkgKiBTZWUgaWYgd2UgY2FuIGZpdCB0aGUgcmVxdWVzdCBlbnRyeSBpbi4gIElmIHNvLCBkbyBpdC4KKwkgKi8KKwlpZiAoY3Vycl9yZWNfbGVuIDwgcmVjX2xlbikKKwkJcmV0dXJuIHJldDsKKwlkaXJlbnQtPmlub2RlID0gbHMtPmlub2RlOworCWRpcmVudC0+bmFtZV9sZW4gPSBscy0+bmFtZWxlbjsKKwlzdHJuY3B5KGRpcmVudC0+bmFtZSwgbHMtPm5hbWUsIGxzLT5uYW1lbGVuKTsKKwlpZiAobHMtPnNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpCisJCWRpcmVudC0+bmFtZV9sZW4gfD0gKGxzLT5mbGFncyAmIDB4NykgPDwgODsKKworCWxzLT5kb25lKys7CisJcmV0dXJuIERJUkVOVF9BQk9SVHxESVJFTlRfQ0hBTkdFRDsKK30KKworLyoKKyAqIE5vdGU6IHRoZSBsb3cgMyBiaXRzIG9mIHRoZSBmbGFncyBmaWVsZCBhcmUgdXNlZCBhcyB0aGUgZGlyZWN0b3J5CisgKiBlbnRyeSBmaWxldHlwZS4KKyAqLworI2lmZGVmIF9fVFVSQk9DX18KKyAjcHJhZ21hIGFyZ3N1c2VkCisjZW5kaWYKK2VycmNvZGVfdCBleHQyZnNfbGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGV4dDJfaW5vX3QgaW5vLCBpbnQgZmxhZ3MpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGxpbmtfc3RydWN0CWxzOworCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpCisJCXJldHVybiBFWFQyX0VUX1JPX0ZJTFNZUzsKKworCWxzLmZzID0gZnM7CisJbHMubmFtZSA9IG5hbWU7CisJbHMubmFtZWxlbiA9IG5hbWUgPyBzdHJsZW4obmFtZSkgOiAwOworCWxzLmlub2RlID0gaW5vOworCWxzLmZsYWdzID0gZmxhZ3M7CisJbHMuZG9uZSA9IDA7CisJbHMuc2IgPSBmcy0+c3VwZXI7CisJbHMuYmxvY2tzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKwlscy5lcnIgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlKGZzLCBkaXIsIERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFksCisJCQkJICAgIDAsIGxpbmtfcHJvYywgJmxzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChscy5lcnIpCisJCXJldHVybiBscy5lcnI7CisKKwlpZiAoIWxzLmRvbmUpCisJCXJldHVybiBFWFQyX0VUX0RJUl9OT19TUEFDRTsKKworCWlmICgocmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGRpciwgJmlub2RlKSkgIT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChpbm9kZS5pX2ZsYWdzICYgRVhUMl9JTkRFWF9GTCkgeworCQlpbm9kZS5pX2ZsYWdzICY9IH5FWFQyX0lOREVYX0ZMOworCQlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgZGlyLCAmaW5vZGUpKSAhPSAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL2xsc2Vlay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbGxzZWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJkYjJlMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL2xsc2Vlay5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogbGxzZWVrLmMgLS0gc3R1YiBjYWxsaW5nIHRoZSBsbHNlZWsgc3lzdGVtIGNhbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX19NU0RPU19fCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9pby5oIgorCisjaWZkZWYgX19saW51eF9fCisKKyNpZiBkZWZpbmVkKEhBVkVfTFNFRUs2NCkgJiYgZGVmaW5lZChIQVZFX0xTRUVLNjRfUFJPVE9UWVBFKQorCisjZGVmaW5lIG15X2xsc2VlayBsc2VlazY0CisKKyNlbHNlCisjaWYgZGVmaW5lZChIQVZFX0xMU0VFSykKKyNpbmNsdWRlIDxzeXNjYWxsLmg+CisKKyNpZm5kZWYgSEFWRV9MTFNFRUtfUFJPVE9UWVBFCitleHRlcm4gbG9uZyBsb25nIGxsc2VlayAoaW50IGZkLCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKKyNlbmRpZgorCisjZGVmaW5lIG15X2xsc2VlayBsbHNlZWsKKworI2Vsc2UJLyogISBIQVZFX0xMU0VFSyAqLworCisjaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX0xPTkdfTE9ORworCisjZGVmaW5lIG15X2xsc2VlayBsc2VlaworCisjZWxzZSAvKiBTSVpFT0ZfTE9ORyAhPSBTSVpFT0ZfTE9OR19MT05HICovCisKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2lmbmRlZiBfX05SX19sbHNlZWsKKyNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgMTQwCisjZW5kaWYKKworI2lmbmRlZiBfX2kzODZfXworc3RhdGljIGludCBfbGxzZWVrICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsCisJCSAgIHVuc2lnbmVkIGxvbmcsIGV4dDJfbG9mZl90ICosIHVuc2lnbmVkIGludCk7CisKK3N0YXRpYyBfc3lzY2FsbDUoaW50LF9sbHNlZWssdW5zaWduZWQgaW50LGZkLHVuc2lnbmVkIGxvbmcsb2Zmc2V0X2hpZ2gsCisJCSB1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LGV4dDJfbG9mZl90ICoscmVzdWx0LAorCQkgdW5zaWduZWQgaW50LCBvcmlnaW4pCisjZW5kaWYKKworc3RhdGljIGV4dDJfbG9mZl90IG15X2xsc2VlayAoaW50IGZkLCBleHQyX2xvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisJZXh0Ml9sb2ZmX3QgcmVzdWx0OworCWludCByZXR2YWw7CisKKyNpZm5kZWYgX19pMzg2X18KKwlyZXR2YWwgPSBfbGxzZWVrKGZkLCAoKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KSA+PiAzMiwKKyNlbHNlCisJcmV0dmFsID0gc3lzY2FsbChfX05SX19sbHNlZWssIGZkLCAodW5zaWduZWQgbG9uZyBsb25nKSAob2Zmc2V0ID4+IDMyKSwKKyNlbmRpZgorCQkJICAoKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KSAmIDB4ZmZmZmZmZmYsCisJCQkmcmVzdWx0LCBvcmlnaW4pOworCXJldHVybiAocmV0dmFsID09IC0xID8gKGV4dDJfbG9mZl90KSByZXR2YWwgOiByZXN1bHQpOworfQorCisjZW5kaWYJLyogU0laRV9MT05HID09IFNJWkVPRl9MT05HX0xPTkcgKi8KKworI2VuZGlmIC8qIEhBVkVfTExTRUVLICovCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xTRUVLNjQpICYmIGRlZmluZWQoSEFWRV9MU0VFSzY0X1BST1RPVFlQRSkgKi8KKworZXh0Ml9sb2ZmX3QgZXh0MmZzX2xsc2VlayAoaW50IGZkLCBleHQyX2xvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisjaWYgU0laRU9GX09GRl9UID49IFNJWkVPRl9MT05HX0xPTkcKKwlyZXR1cm4gbXlfbGxzZWVrIChmZCwgb2Zmc2V0LCBvcmlnaW4pOworI2Vsc2UKKwlleHQyX2xvZmZfdCByZXN1bHQ7CisJc3RhdGljIGludCBkb19jb21wYXQgPSAwOworCisJaWYgKGRvX2NvbXBhdCkKKwkJZ290byBmYWxsYmFjazsKKworCXJlc3VsdCA9IG15X2xsc2VlayAoZmQsIG9mZnNldCwgb3JpZ2luKTsKKwlpZiAocmVzdWx0ID09IC0xICYmIGVycm5vID09IEVOT1NZUykgeworCQkvKgorCQkgKiBKdXN0IGluIGNhc2UgdGhpcyBjb2RlIHJ1bnMgb24gdG9wIG9mIGFuIG9sZCBrZXJuZWwKKwkJICogd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGxzZWVrIHN5c3RlbSBjYWxsCisJCSAqLworCQlkb19jb21wYXQrKzsKKwlmYWxsYmFjazoKKwkJaWYgKG9mZnNldCA8ICgoZXh0Ml9sb2ZmX3QpIDEgPDwgKChzaXplb2Yob2ZmX3QpKjgpIC0xKSkpCisJCQlyZXR1cm4gbHNlZWsoZmQsIChvZmZfdCkgb2Zmc2V0LCBvcmlnaW4pOworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKyNlbHNlIC8qICFsaW51eCAqLworCisjaWZuZGVmIEVJTlZBTAorI2RlZmluZSBFSU5WQUwgRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UCisjZW5kaWYKKworZXh0Ml9sb2ZmX3QgZXh0MmZzX2xsc2VlayAoaW50IGZkLCBleHQyX2xvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisjaWYgZGVmaW5lZChIQVZFX0xTRUVLNjQpICYmIGRlZmluZWQoSEFWRV9MU0VFSzY0X1BST1RPVFlQRSkKKwlyZXR1cm4gbHNlZWs2NCAoZmQsIG9mZnNldCwgb3JpZ2luKTsKKyNlbHNlCisJaWYgKChzaXplb2Yob2ZmX3QpIDwgc2l6ZW9mKGV4dDJfbG9mZl90KSkgJiYKKwkgICAgKG9mZnNldCA+PSAoKGV4dDJfbG9mZl90KSAxIDw8ICgoc2l6ZW9mKG9mZl90KSo4KSAtMSkpKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbHNlZWsgKGZkLCAob2ZmX3QpIG9mZnNldCwgb3JpZ2luKTsKKyNlbmRpZgorfQorCisjZW5kaWYgCS8qIGxpbnV4ICovCisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvbG9va3VwLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9sb29rdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FhMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbG9va3VwLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGxvb2t1cC5jIC0tLSBleHQyZnMgZGlyZWN0b3J5IGxvb2t1cCBvcGVyYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk0LCAxOTk1IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworc3RydWN0IGxvb2t1cF9zdHJ1Y3QgIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJbGVuOworCWV4dDJfaW5vX3QJKmlub2RlOworCWludAkJZm91bmQ7Cit9OworCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBsb29rdXBfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICAgIGludAlvZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgaW50CWJsb2Nrc2l6ZSBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgICBjaGFyCSpidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgdm9pZAkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBsb29rdXBfc3RydWN0ICpscyA9IChzdHJ1Y3QgbG9va3VwX3N0cnVjdCAqKSBwcml2X2RhdGE7CisKKwlpZiAobHMtPmxlbiAhPSAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RybmNtcChscy0+bmFtZSwgZGlyZW50LT5uYW1lLCAoZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpKSkKKwkJcmV0dXJuIDA7CisJKmxzLT5pbm9kZSA9IGRpcmVudC0+aW5vZGU7CisJbHMtPmZvdW5kKys7CisJcmV0dXJuIERJUkVOVF9BQk9SVDsKK30KKworCitlcnJjb2RlX3QgZXh0MmZzX2xvb2t1cChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQlpbnQgbmFtZWxlbiwgY2hhciAqYnVmLCBleHQyX2lub190ICppbm9kZSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXN0cnVjdCBsb29rdXBfc3RydWN0IGxzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWxzLm5hbWUgPSBuYW1lOworCWxzLmxlbiA9IG5hbWVsZW47CisJbHMuaW5vZGUgPSBpbm9kZTsKKwlscy5mb3VuZCA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfZGlyX2l0ZXJhdGUoZnMsIGRpciwgMCwgYnVmLCBsb29rdXBfcHJvYywgJmxzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIChscy5mb3VuZCkgPyAwIDogRVhUMl9FVF9GSUxFX05PVF9GT1VORDsKK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ta2Rpci5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbWtkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZiNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbWtkaXIuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIG1rZGlyLmMgLS0tIG1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZpbGVzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworI2lmbmRlZiBFWFQyX0ZUX0RJUgorI2RlZmluZSBFWFQyX0ZUX0RJUgkJMgorI2VuZGlmCisKK2VycmNvZGVfdCBleHQyZnNfbWtkaXIoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgcGFyZW50LCBleHQyX2lub190IGludW0sCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCWV4dDJfZXh0ZW50X2hhbmRsZV90CWhhbmRsZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlwYXJlbnRfaW5vZGUsIGlub2RlOworCWV4dDJfaW5vX3QJCWlubyA9IGludW07CisJZXh0Ml9pbm9fdAkJc2NyYXRjaF9pbm87CisJYmxrNjRfdAkJCWJsazsKKwljaGFyCQkJKmJsb2NrID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuIGlub2RlLCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoIWlubykgeworCQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGZzLCBwYXJlbnQsIExJTlVYX1NfSUZESVIgfCAwNzU1LAorCQkJCQkgIDAsICZpbm8pOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQWxsb2NhdGUgYSBkYXRhIGJsb2NrIGZvciB0aGUgZGlyZWN0b3J5CisJICovCisJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIDAsIDAsICZibGspOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKworCS8qCisJICogQ3JlYXRlIGEgc2NyYXRjaCB0ZW1wbGF0ZSBmb3IgdGhlIGRpcmVjdG9yeQorCSAqLworCXJldHZhbCA9IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGZzLCBpbm8sIHBhcmVudCwgJmJsb2NrKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKgorCSAqIEdldCB0aGUgcGFyZW50J3MgaW5vZGUsIGlmIG5lY2Vzc2FyeQorCSAqLworCWlmIChwYXJlbnQgIT0gaW5vKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBwYXJlbnQsICZwYXJlbnRfaW5vZGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZQorCQltZW1zZXQoJnBhcmVudF9pbm9kZSwgMCwgc2l6ZW9mKHBhcmVudF9pbm9kZSkpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIGlub2RlIHN0cnVjdHVyZS4uLi4KKwkgKi8KKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGRElSIHwgKDA3NzcgJiB+ZnMtPnVtYXNrKTsKKwlpbm9kZS5pX3VpZCA9IGlub2RlLmlfZ2lkID0gMDsKKwlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgMSk7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpCisJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCWVsc2UKKwkJaW5vZGUuaV9ibG9ja1swXSA9IGJsazsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMjsKKwlpbm9kZS5pX3NpemUgPSBmcy0+YmxvY2tzaXplOworCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGlub2RlIGFuZCBpbm9kZSBkYXRhIGJsb2NrCisJICovCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2Rpcl9ibG9jayhmcywgYmxrLCBibG9jayk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sICZpbm9kZSwgJmhhbmRsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGV4dDJmc19leHRlbnRfc2V0X2JtYXAoaGFuZGxlLCAwLCBibGssIDApOworCQlleHQyZnNfZXh0ZW50X2ZyZWUoaGFuZGxlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIExpbmsgdGhlIGRpcmVjdG9yeSBpbnRvIHRoZSBmaWxlc3lzdGVtIGhpZXJhcmNoeQorCSAqLworCWlmIChuYW1lKSB7CisJCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIHBhcmVudCwgbmFtZSwgc3RybGVuKG5hbWUpLCAwLAorCQkJCSAgICAgICAmc2NyYXRjaF9pbm8pOworCQlpZiAoIXJldHZhbCkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9ESVJfRVhJU1RTOworCQkJbmFtZSA9IDA7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHJldHZhbCAhPSBFWFQyX0VUX0ZJTEVfTk9UX0ZPVU5EKQorCQkJZ290byBjbGVhbnVwOworCQlyZXR2YWwgPSBleHQyZnNfbGluayhmcywgcGFyZW50LCBuYW1lLCBpbm8sIEVYVDJfRlRfRElSKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBwYXJlbnQgaW5vZGUncyBjb3VudHMKKwkgKi8KKwlpZiAocGFyZW50ICE9IGlubykgeworCQlwYXJlbnRfaW5vZGUuaV9saW5rc19jb3VudCsrOworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIHBhcmVudCwgJnBhcmVudF9pbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgYWNjb3VudGluZy4uLi4KKwkgKi8KKwlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGZzLCBpbm8sICsxLCAxKTsKKworY2xlYW51cDoKKwlpZiAoYmxvY2spCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2spOworCXJldHVybiByZXR2YWw7CisKK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ta2pvdXJuYWwuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL21ram91cm5hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZmZiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9ta2pvdXJuYWwuYwpAQCAtMCwwICsxLDYzNiBAQAorLyoKKyAqIG1ram91cm5hbC5jIC0tLSBtYWtlIGEgam91cm5hbCBmb3IgYSBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImpmc191c2VyLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgc2V0cyB1cCB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGFuZAorICogcmV0dXJucyBpdCBhcyBhbiBhbGxvY2F0ZWQgYmxvY2suCisgKi8KK2VycmNvZGVfdCBleHQyZnNfY3JlYXRlX2pvdXJuYWxfc3VwZXJibG9jayhleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgX191MzIgbnVtX2Jsb2NrcywgaW50IGZsYWdzLAorCQkJCQkgICBjaGFyICAqKnJldF9qc2IpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJam91cm5hbF9zdXBlcmJsb2NrX3QJKmpzYjsKKworCWlmIChudW1fYmxvY2tzIDwgMTAyNCkKKwkJcmV0dXJuIEVYVDJfRVRfSk9VUk5BTF9UT09fU01BTEw7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZqc2IpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldCAoanNiLCAwLCBmcy0+YmxvY2tzaXplKTsKKworCWpzYi0+c19oZWFkZXIuaF9tYWdpYyA9IGh0b25sKEpGU19NQUdJQ19OVU1CRVIpOworCWlmIChmbGFncyAmIEVYVDJfTUtKT1VSTkFMX1YxX1NVUEVSKQorCQlqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlID0gaHRvbmwoSkZTX1NVUEVSQkxPQ0tfVjEpOworCWVsc2UKKwkJanNiLT5zX2hlYWRlci5oX2Jsb2NrdHlwZSA9IGh0b25sKEpGU19TVVBFUkJMT0NLX1YyKTsKKwlqc2ItPnNfYmxvY2tzaXplID0gaHRvbmwoZnMtPmJsb2Nrc2l6ZSk7CisJanNiLT5zX21heGxlbiA9IGh0b25sKG51bV9ibG9ja3MpOworCWpzYi0+c19ucl91c2VycyA9IGh0b25sKDEpOworCWpzYi0+c19maXJzdCA9IGh0b25sKDEpOworCWpzYi0+c19zZXF1ZW5jZSA9IGh0b25sKDEpOworCW1lbWNweShqc2ItPnNfdXVpZCwgZnMtPnN1cGVyLT5zX3V1aWQsIHNpemVvZihmcy0+c3VwZXItPnNfdXVpZCkpOworCS8qCisJICogSWYgd2UncmUgY3JlYXRpbmcgYW4gZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UsIHdlIG5lZWQgdG8KKwkgKiBhZGp1c3QgdGhlc2UgZmllbGRzLgorCSAqLworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQlqc2ItPnNfbnJfdXNlcnMgPSAwOworCQlpZiAoZnMtPmJsb2Nrc2l6ZSA9PSAxMDI0KQorCQkJanNiLT5zX2ZpcnN0ID0gaHRvbmwoMyk7CisJCWVsc2UKKwkJCWpzYi0+c19maXJzdCA9IGh0b25sKDIpOworCX0KKworCSpyZXRfanNiID0gKGNoYXIgKikganNiOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBqb3VybmFsIHVzaW5nIFBPU0lYIHJvdXRpbmVzLiAgSXQgaXMgdXNlZAorICogZm9yIGNyZWF0aW5nIGV4dGVybmFsIGpvdXJuYWxzIGFuZCBjcmVhdGluZyBqb3VybmFscyBvbiBsaXZlCisgKiBmaWxlc3lzdGVtcy4KKyAqLworc3RhdGljIGVycmNvZGVfdCB3cml0ZV9qb3VybmFsX2ZpbGUoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgICBibGtfdCBudW1fYmxvY2tzLCBpbnQgZmxhZ3MpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqYnVmID0gMDsKKwlpbnQJCWZkLCByZXRfc2l6ZTsKKwlibGtfdAkJaTsKKworCWlmICgocmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9qb3VybmFsX3N1cGVyYmxvY2soZnMsIG51bV9ibG9ja3MsIGZsYWdzLAorCQkJCQkJICAgICAgICZidWYpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIE9wZW4gdGhlIGRldmljZSBvciBqb3VybmFsIGZpbGUgKi8KKwlpZiAoKGZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkpKSA8IDApIHsKKwkJcmV0dmFsID0gZXJybm87CisJCWdvdG8gZXJyZnJlZTsKKwl9CisKKwkvKiBXcml0ZSB0aGUgc3VwZXJibG9jayBvdXQgKi8KKwlyZXR2YWwgPSBFWFQyX0VUX1NIT1JUX1dSSVRFOworCXJldF9zaXplID0gd3JpdGUoZmQsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKHJldF9zaXplIDwgMCkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChyZXRfc2l6ZSAhPSAoaW50KSBmcy0+YmxvY2tzaXplKQorCQlnb3RvIGVycm91dDsKKwltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKworCWlmIChmbGFncyAmIEVYVDJfTUtKT1VSTkFMX0xBWllJTklUKQorCQlnb3RvIHN1Y2Nlc3M7CisKKwlmb3IgKGkgPSAxOyBpIDwgbnVtX2Jsb2NrczsgaSsrKSB7CisJCXJldF9zaXplID0gd3JpdGUoZmQsIGJ1ZiwgZnMtPmJsb2Nrc2l6ZSk7CisJCWlmIChyZXRfc2l6ZSA8IDApIHsKKwkJCXJldHZhbCA9IGVycm5vOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJaWYgKHJldF9zaXplICE9IChpbnQpIGZzLT5ibG9ja3NpemUpCisJCQlnb3RvIGVycm91dDsKKwl9CisKK3N1Y2Nlc3M6CisJcmV0dmFsID0gMDsKK2Vycm91dDoKKwljbG9zZShmZCk7CitlcnJmcmVlOgorCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gd2hpY2ggemVyb3Mgb3V0IF9udW1fIGJsb2NrcyBzdGFydGluZyBhdAorICogX2Jsa18uICBJbiBjYXNlIG9mIGFuIGVycm9yLCB0aGUgZGV0YWlscyBvZiB0aGUgZXJyb3IgaXMgcmV0dXJuZWQKKyAqIHZpYSBfcmV0X2Jsa18gYW5kIF9yZXRfY291bnRfIGlmIHRoZXkgYXJlIG5vbi1OVUxMIHBvaW50ZXJzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCBhbiBlcnJvciBjb2RlIG9uIGFuIGVycm9yLgorICoKKyAqIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgTlVMTCwgdGhlbiBpdCB3aWxsCisgKiBhdHRlbXB0IHRvIGZyZWUgdGhlIHN0YXRpYyB6ZXJvaXppbmcgYnVmZmVyLiAgKFRoaXMgaXMgdG8ga2VlcAorICogcHJvZ3JhbXMgdGhhdCBjaGVjayBmb3IgbWVtb3J5IGxlYWtzIGhhcHB5LikKKyAqLworI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKK2VycmNvZGVfdCBleHQyZnNfemVyb19ibG9ja3MyKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGJsaywgaW50IG51bSwKKwkJCSAgICAgIGJsazY0X3QgKnJldF9ibGssIGludCAqcmV0X2NvdW50KQoreworCWludAkJaiwgY291bnQ7CisJc3RhdGljIGNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJLyogSWYgZnMgaXMgbnVsbCwgY2xlYW4gdXAgdGhlIHN0YXRpYyBidWZmZXIgYW5kIHJldHVybiAqLworCWlmICghZnMpIHsKKwkJaWYgKGJ1ZikgeworCQkJZnJlZShidWYpOworCQkJYnVmID0gMDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJLyogQWxsb2NhdGUgdGhlIHplcm9pemluZyBidWZmZXIgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCFidWYpIHsKKwkJYnVmID0gbWFsbG9jKGZzLT5ibG9ja3NpemUgKiBTVFJJREVfTEVOR1RIKTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gRU5PTUVNOworCQltZW1zZXQoYnVmLCAwLCBmcy0+YmxvY2tzaXplICogU1RSSURFX0xFTkdUSCk7CisJfQorCS8qIE9LLCBkbyB0aGUgd3JpdGUgbG9vcCAqLworCWo9MDsKKwl3aGlsZSAoaiA8IG51bSkgeworCQlpZiAoYmxrICUgU1RSSURFX0xFTkdUSCkgeworCQkJY291bnQgPSBTVFJJREVfTEVOR1RIIC0gKGJsayAlIFNUUklERV9MRU5HVEgpOworCQkJaWYgKGNvdW50ID4gKG51bSAtIGopKQorCQkJCWNvdW50ID0gbnVtIC0gajsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gbnVtIC0gajsKKwkJCWlmIChjb3VudCA+IFNUUklERV9MRU5HVEgpCisJCQkJY291bnQgPSBTVFJJREVfTEVOR1RIOworCQl9CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBibGssIGNvdW50LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlpZiAocmV0X2NvdW50KQorCQkJCSpyZXRfY291bnQgPSBjb3VudDsKKwkJCWlmIChyZXRfYmxrKQorCQkJCSpyZXRfYmxrID0gYmxrOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlqICs9IGNvdW50OyBibGsgKz0gY291bnQ7CisJfQorCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3plcm9fYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBibGssIGludCBudW0sCisJCQkgICAgIGJsa190ICpyZXRfYmxrLCBpbnQgKnJldF9jb3VudCkKK3sKKwlibGs2NF90IHJldF9ibGsyOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLCBibGssIG51bSwgJnJldF9ibGsyLCByZXRfY291bnQpOworCWlmIChyZXR2YWwpCisJCSpyZXRfYmxrID0gKGJsa190KSByZXRfYmxrMjsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBjcmVhdGluZyB0aGUgam91cm5hbCB1c2luZyBkaXJlY3QgSS9PIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBta2pvdXJuYWxfc3RydWN0IHsKKwlpbnQJCW51bV9ibG9ja3M7CisJaW50CQluZXdibG9ja3M7CisJYmxrNjRfdAkJZ29hbDsKKwlibGs2NF90CQlibGtfdG9femVybzsKKwlpbnQJCXplcm9fY291bnQ7CisJaW50CQlmbGFnczsKKwljaGFyCQkqYnVmOworCWVycmNvZGVfdAllcnI7Cit9OworCitzdGF0aWMgaW50IG1ram91cm5hbF9wcm9jKGV4dDJfZmlsc3lzCWZzLAorCQkJICBibGs2NF90CSpibG9ja25yLAorCQkJICBlMl9ibGtjbnRfdAlibG9ja2NudCwKKwkJCSAgYmxrNjRfdAlyZWZfYmxvY2sgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICBpbnQJCXJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICB2b2lkCQkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBta2pvdXJuYWxfc3RydWN0ICplcyA9IChzdHJ1Y3QgbWtqb3VybmFsX3N0cnVjdCAqKSBwcml2X2RhdGE7CisJYmxrNjRfdAluZXdfYmxrOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlpZiAoKmJsb2NrbnIpIHsKKwkJZXMtPmdvYWwgPSAqYmxvY2tucjsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChibG9ja2NudCAmJgorCSAgICAoRVhUMkZTX0IyQyhmcywgZXMtPmdvYWwpID09IEVYVDJGU19CMkMoZnMsIGVzLT5nb2FsKzEpKSkKKwkJbmV3X2JsayA9IGVzLT5nb2FsKzE7CisJZWxzZSB7CisJCWVzLT5nb2FsICY9IH5FWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKTsKKwkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jazIoZnMsIGVzLT5nb2FsLCAwLCAmbmV3X2Jsayk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWVzLT5lcnIgPSByZXR2YWw7CisJCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJCX0KKwkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgbmV3X2JsaywgKzEpOworCQllcy0+bmV3YmxvY2tzKys7CisJfQorCWlmIChibG9ja2NudCA+PSAwKQorCQllcy0+bnVtX2Jsb2Nrcy0tOworCisJcmV0dmFsID0gMDsKKwlpZiAoYmxvY2tjbnQgPD0gMCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIG5ld19ibGssIDEsIGVzLT5idWYpOworCWVsc2UgaWYgKCEoZXMtPmZsYWdzICYgRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQpKSB7CisJCWlmIChlcy0+emVyb19jb3VudCkgeworCQkJaWYgKChlcy0+YmxrX3RvX3plcm8gKyBlcy0+emVyb19jb3VudCA9PSBuZXdfYmxrKSAmJgorCQkJICAgIChlcy0+emVyb19jb3VudCA8IDEwMjQpKQorCQkJCWVzLT56ZXJvX2NvdW50Kys7CisJCQllbHNlIHsKKwkJCQlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLAorCQkJCQkJCSAgICAgZXMtPmJsa190b196ZXJvLAorCQkJCQkJCSAgICAgZXMtPnplcm9fY291bnQsCisJCQkJCQkJICAgICAwLCAwKTsKKwkJCQllcy0+emVyb19jb3VudCA9IDA7CisJCQl9CisJCX0KKwkJaWYgKGVzLT56ZXJvX2NvdW50ID09IDApIHsKKwkJCWVzLT5ibGtfdG9femVybyA9IG5ld19ibGs7CisJCQllcy0+emVyb19jb3VudCA9IDE7CisJCX0KKwl9CisKKwlpZiAoYmxvY2tjbnQgPT0gMCkKKwkJbWVtc2V0KGVzLT5idWYsIDAsIGZzLT5ibG9ja3NpemUpOworCisJaWYgKHJldHZhbCkgeworCQllcy0+ZXJyID0gcmV0dmFsOworCQlyZXR1cm4gQkxPQ0tfQUJPUlQ7CisJfQorCSpibG9ja25yID0gZXMtPmdvYWwgPSBuZXdfYmxrOworCisJaWYgKGVzLT5udW1fYmxvY2tzID09IDApCisJCXJldHVybiAoQkxPQ0tfQ0hBTkdFRCB8IEJMT0NLX0FCT1JUKTsKKwllbHNlCisJCXJldHVybiBCTE9DS19DSEFOR0VEOworCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBqb3VybmFsIHVzaW5nIGRpcmVjdCBJL08gcm91dGluZXMuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfam91cm5hbF9pbm9kZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBqb3VybmFsX2lubywKKwkJCQkgICAgIGJsa190IG51bV9ibG9ja3MsIGludCBmbGFncykKK3sKKwljaGFyCQkJKmJ1ZjsKKwlkZ3JwX3QJCQlncm91cCwgc3RhcnQsIGVuZCwgaSwgbG9nX2ZsZXg7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJdW5zaWduZWQgbG9uZyBsb25nCWlub2RlX3NpemU7CisJc3RydWN0IG1ram91cm5hbF9zdHJ1Y3QJZXM7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19jcmVhdGVfam91cm5hbF9zdXBlcmJsb2NrKGZzLCBudW1fYmxvY2tzLCBmbGFncywKKwkJCQkJCSAgICAgICAmYnVmKSkpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpKSkKKwkJZ290byBvdXQyOworCisJaWYgKChyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgam91cm5hbF9pbm8sICZpbm9kZSkpKQorCQlnb3RvIG91dDI7CisKKwlpZiAoaW5vZGUuaV9ibG9ja3MgPiAwKSB7CisJCXJldHZhbCA9IEVFWElTVDsKKwkJZ290byBvdXQyOworCX0KKworCWVzLm51bV9ibG9ja3MgPSBudW1fYmxvY2tzOworCWVzLm5ld2Jsb2NrcyA9IDA7CisJZXMuYnVmID0gYnVmOworCWVzLmVyciA9IDA7CisJZXMuZmxhZ3MgPSBmbGFnczsKKwllcy56ZXJvX2NvdW50ID0gMDsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCQlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShmcywgam91cm5hbF9pbm8sICZpbm9kZSkpKQorCQkJZ290byBvdXQyOworCX0KKworCS8qCisJICogU2V0IHRoZSBpbml0aWFsIGdvYWwgYmxvY2sgdG8gYmUgcm91Z2hseSBhdCB0aGUgbWlkZGxlIG9mCisJICogdGhlIGZpbGVzeXN0ZW0uICBQaWNrIGEgZ3JvdXAgdGhhdCBoYXMgdGhlIGxhcmdlc3QgbnVtYmVyCisJICogb2YgZnJlZSBibG9ja3MuCisJICovCisJZ3JvdXAgPSBleHQyZnNfZ3JvdXBfb2ZfYmxrMihmcywgKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJCSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgLyAyKTsKKwlsb2dfZmxleCA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJaWYgKGZzLT5zdXBlci0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4ICYmIChncm91cCA+IGxvZ19mbGV4KSkgeworCQlncm91cCA9IGdyb3VwICYgfihsb2dfZmxleCAtIDEpOworCQl3aGlsZSAoKGdyb3VwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQpICYmCisJCSAgICAgICBleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnQoZnMsIGdyb3VwKSA9PSAwKQorCQkJZ3JvdXArKzsKKwkJaWYgKGdyb3VwID09IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJZ3JvdXAgPSAwOworCQlzdGFydCA9IGdyb3VwOworCX0gZWxzZQorCQlzdGFydCA9IChncm91cCA+IDApID8gZ3JvdXAtMSA6IGdyb3VwOworCWVuZCA9ICgoZ3JvdXArMSkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudCkgPyBncm91cCsxIDogZ3JvdXA7CisJZ3JvdXAgPSBzdGFydDsKKwlmb3IgKGk9c3RhcnQrMTsgaSA8PSBlbmQ7IGkrKykKKwkJaWYgKGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgaSkgPgorCQkgICAgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncm91cCkpCisJCQlncm91cCA9IGk7CisKKwllcy5nb2FsID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZ3JvdXApOworCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgam91cm5hbF9pbm8sIEJMT0NLX0ZMQUdfQVBQRU5ELAorCQkJCSAgICAgICAwLCBta2pvdXJuYWxfcHJvYywgJmVzKTsKKwlpZiAoZXMuZXJyKSB7CisJCXJldHZhbCA9IGVzLmVycjsKKwkJZ290byBlcnJvdXQ7CisJfQorCWlmIChlcy56ZXJvX2NvdW50KSB7CisJCXJldHZhbCA9IGV4dDJmc196ZXJvX2Jsb2NrczIoZnMsIGVzLmJsa190b196ZXJvLAorCQkJCQkgICAgZXMuemVyb19jb3VudCwgMCwgMCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBqb3VybmFsX2lubywgJmlub2RlKSkpCisJCWdvdG8gZXJyb3V0OworCisJaW5vZGVfc2l6ZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZnMtPmJsb2Nrc2l6ZSAqIG51bV9ibG9ja3M7CisJaW5vZGUuaV9zaXplID0gaW5vZGVfc2l6ZSAmIDB4RkZGRkZGRkY7CisJaW5vZGUuaV9zaXplX2hpZ2ggPSAoaW5vZGVfc2l6ZSA+PiAzMikgJiAweEZGRkZGRkZGOworCWlmIChleHQyZnNfbmVlZHNfbGFyZ2VfZmlsZV9mZWF0dXJlKGlub2RlX3NpemUpKQorCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgfD0KKwkJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRTsKKwlleHQyZnNfaWJsa19hZGRfYmxvY2tzKGZzLCAmaW5vZGUsIGVzLm5ld2Jsb2Nrcyk7CisJaW5vZGUuaV9tdGltZSA9IGlub2RlLmlfY3RpbWUgPSBmcy0+bm93ID8gZnMtPm5vdyA6IHRpbWUoMCk7CisJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisJaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRlJFRyB8IDA2MDA7CisKKwlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGpvdXJuYWxfaW5vLCAmaW5vZGUpKSkKKwkJZ290byBlcnJvdXQ7CisJcmV0dmFsID0gMDsKKworCW1lbWNweShmcy0+c3VwZXItPnNfam5sX2Jsb2NrcywgaW5vZGUuaV9ibG9jaywgRVhUMl9OX0JMT0NLUyo0KTsKKwlmcy0+c3VwZXItPnNfam5sX2Jsb2Nrc1sxNV0gPSBpbm9kZS5pX3NpemVfaGlnaDsKKwlmcy0+c3VwZXItPnNfam5sX2Jsb2Nrc1sxNl0gPSBpbm9kZS5pX3NpemU7CisJZnMtPnN1cGVyLT5zX2pubF9iYWNrdXBfdHlwZSA9IEVYVDNfSk5MX0JBQ0tVUF9CTE9DS1M7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCitlcnJvdXQ6CisJZXh0MmZzX3plcm9fYmxvY2tzMigwLCAwLCAwLCAwLCAwKTsKK291dDI6CisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGaW5kIGEgcmVhc29uYWJsZSBqb3VybmFsIGZpbGUgc2l6ZSAoaW4gYmxvY2tzKSBnaXZlbiB0aGUgbnVtYmVyIG9mIGJsb2NrcworICogaW4gdGhlIGZpbGVzeXN0ZW0uICBGb3IgdmVyeSBzbWFsbCBmaWxlc3lzdGVtcywgaXQgaXMgbm90IHJlYXNvbmFibGUgdG8KKyAqIGhhdmUgYSBqb3VybmFsIHRoYXQgZmlsbHMgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGZpbGVzeXN0ZW0uCisgKi8KK2ludCBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoX191NjQgbnVtX2Jsb2NrcykKK3sKKwlpZiAobnVtX2Jsb2NrcyA8IDIwNDgpCisJCXJldHVybiAtMTsKKwlpZiAobnVtX2Jsb2NrcyA8IDMyNzY4KQorCQlyZXR1cm4gKDEwMjQpOworCWlmIChudW1fYmxvY2tzIDwgMjU2KjEwMjQpCisJCXJldHVybiAoNDA5Nik7CisJaWYgKG51bV9ibG9ja3MgPCA1MTIqMTAyNCkKKwkJcmV0dXJuICg4MTkyKTsKKwlpZiAobnVtX2Jsb2NrcyA8IDEwMjQqMTAyNCkKKwkJcmV0dXJuICgxNjM4NCk7CisJcmV0dXJuIDMyNzY4OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgam91cm5hbCBkZXZpY2UgdG8gYSBmaWxlc3lzdGVtCisgKi8KK2VycmNvZGVfdCBleHQyZnNfYWRkX2pvdXJuYWxfZGV2aWNlKGV4dDJfZmlsc3lzIGZzLCBleHQyX2ZpbHN5cyBqb3VybmFsX2RldikKK3sKKwlzdHJ1Y3Qgc3RhdAlzdDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCWJ1ZlsxMDI0XTsKKwlqb3VybmFsX3N1cGVyYmxvY2tfdAkqanNiOworCWludAkJc3RhcnQ7CisJX191MzIJCWksIG5yX3VzZXJzOworCisJLyogTWFrZSBzdXJlIHRoZSBkZXZpY2UgZXhpc3RzIGFuZCBpcyBhIGJsb2NrIGRldmljZSAqLworCWlmIChzdGF0KGpvdXJuYWxfZGV2LT5kZXZpY2VfbmFtZSwgJnN0KSA8IDApCisJCXJldHVybiBlcnJubzsKKworCWlmICghU19JU0JMSyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIEVYVDJfRVRfSk9VUk5BTF9OT1RfQkxPQ0s7IC8qIE11c3QgYmUgYSBibG9jayBkZXZpY2UgKi8KKworCS8qIEdldCB0aGUgam91cm5hbCBzdXBlcmJsb2NrICovCisJc3RhcnQgPSAxOworCWlmIChqb3VybmFsX2Rldi0+YmxvY2tzaXplID09IDEwMjQpCisJCXN0YXJ0Kys7CisJaWYgKChyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoam91cm5hbF9kZXYtPmlvLCBzdGFydCwgLTEwMjQsCisJCQkJCSAgICBidWYpKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCWpzYiA9IChqb3VybmFsX3N1cGVyYmxvY2tfdCAqKSBidWY7CisJaWYgKChqc2ItPnNfaGVhZGVyLmhfbWFnaWMgIT0gKHVuc2lnbmVkKSBudG9obChKRlNfTUFHSUNfTlVNQkVSKSkgfHwKKwkgICAgKGpzYi0+c19oZWFkZXIuaF9ibG9ja3R5cGUgIT0gKHVuc2lnbmVkKSBudG9obChKRlNfU1VQRVJCTE9DS19WMikpKQorCQlyZXR1cm4gRVhUMl9FVF9OT19KT1VSTkFMX1NCOworCisJaWYgKG50b2hsKGpzYi0+c19ibG9ja3NpemUpICE9ICh1bnNpZ25lZCBsb25nKSBmcy0+YmxvY2tzaXplKQorCQlyZXR1cm4gRVhUMl9FVF9VTkVYUEVDVEVEX0JMT0NLX1NJWkU7CisKKwkvKiBDaGVjayBhbmQgc2VlIGlmIHRoaXMgZmlsZXN5c3RlbSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkICovCisJbnJfdXNlcnMgPSBudG9obChqc2ItPnNfbnJfdXNlcnMpOworCWZvciAoaT0wOyBpIDwgbnJfdXNlcnM7IGkrKykgeworCQlpZiAobWVtY21wKGZzLT5zdXBlci0+c191dWlkLAorCQkJICAgJmpzYi0+c191c2Vyc1tpKjE2XSwgMTYpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPj0gbnJfdXNlcnMpIHsKKwkJbWVtY3B5KCZqc2ItPnNfdXNlcnNbbnJfdXNlcnMqMTZdLAorCQkgICAgICAgZnMtPnN1cGVyLT5zX3V1aWQsIDE2KTsKKwkJanNiLT5zX25yX3VzZXJzID0gaHRvbmwobnJfdXNlcnMrMSk7CisJfQorCisJLyogV3JpdGViYWNrIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwlpZiAoKHJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoam91cm5hbF9kZXYtPmlvLCBzdGFydCwgLTEwMjQsIGJ1ZikpKQorCQlyZXR1cm4gcmV0dmFsOworCisJZnMtPnN1cGVyLT5zX2pvdXJuYWxfaW51bSA9IDA7CisJZnMtPnN1cGVyLT5zX2pvdXJuYWxfZGV2ID0gc3Quc3RfcmRldjsKKwltZW1jcHkoZnMtPnN1cGVyLT5zX2pvdXJuYWxfdXVpZCwganNiLT5zX3V1aWQsCisJICAgICAgIHNpemVvZihmcy0+c3VwZXItPnNfam91cm5hbF91dWlkKSk7CisJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0IHw9IEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgam91cm5hbCBpbm9kZSB0byBhIGZpbGVzeXN0ZW0sIHVzaW5nIGVpdGhlcgorICogUE9TSVggcm91dGluZXMgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCwgb3IgdXNpbmcgZGlyZWN0IEkvTworICogZnVuY3Rpb25zIGlmIGl0IGlzIG5vdC4KKyAqLworZXJyY29kZV90IGV4dDJmc19hZGRfam91cm5hbF9pbm9kZShleHQyX2ZpbHN5cyBmcywgYmxrX3QgbnVtX2Jsb2NrcywgaW50IGZsYWdzKQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCWV4dDJfaW5vX3QJCWpvdXJuYWxfaW5vOworCXN0cnVjdCBzdGF0CQlzdDsKKwljaGFyCQkJamZpbGVbMTAyNF07CisJaW50CQkJbW91bnRfZmxhZ3M7CisJaW50CQkJZmQgPSAtMTsKKworCWlmIChmbGFncyAmIEVYVDJfTUtKT1VSTkFMX05PX01OVF9DSEVDSykKKwkJbW91bnRfZmxhZ3MgPSAwOworCWVsc2UgaWYgKChyZXR2YWwgPSBleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQoZnMtPmRldmljZV9uYW1lLAorCQkJCQkJICAgICZtb3VudF9mbGFncywKKwkJCQkJCSAgICBqZmlsZSwgc2l6ZW9mKGpmaWxlKS0xMCkpKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCQlpbnQgZiA9IDA7CisjZW5kaWYKKwkJc3RyY2F0KGpmaWxlLCAiLy5qb3VybmFsIik7CisKKwkJLyoKKwkJICogSWYgLi4uLy5qb3VybmFsIGFscmVhZHkgZXhpc3RzLCBtYWtlIHN1cmUgYW55CisJCSAqIGltbXV0YWJsZSBvciBhcHBlbmQtb25seSBmbGFncyBhcmUgY2xlYXJlZC4KKwkJICovCisjaWYgZGVmaW5lZChIQVZFX0NIRkxBR1MpICYmIGRlZmluZWQoVUZfTk9EVU1QKQorCQkodm9pZCkgY2hmbGFncyAoamZpbGUsIDApOworI2Vsc2UKKyNpZiBIQVZFX0VYVDJfSU9DVExTCisJCWZkID0gb3BlbihqZmlsZSwgT19SRE9OTFkpOworCQlpZiAoZmQgPj0gMCkgeworCQkJcmV0dmFsID0gaW9jdGwoZmQsIEVYVDJfSU9DX1NFVEZMQUdTLCAmZik7CisJCQljbG9zZShmZCk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKyNlbmRpZgorI2VuZGlmCisKKwkJLyogQ3JlYXRlIHRoZSBqb3VybmFsIGZpbGUgKi8KKwkJaWYgKChmZCA9IG9wZW4oamZpbGUsIE9fQ1JFQVR8T19XUk9OTFksIDA2MDApKSA8IDApCisJCQlyZXR1cm4gZXJybm87CisKKwkJLyogTm90ZSB0aGF0IHdlIGNhbid0IGRvIGxhenkgam91cm5hbCBpbml0aWFsaXphdGlvbiBmb3IgbW91bnRlZAorCQkgKiBmaWxlc3lzdGVtcywgc2luY2UgdGhlIHplcm8gd3JpdGluZyBpcyBhbHNvIGFsbG9jYXRpbmcgdGhlCisJCSAqIGpvdXJuYWwgYmxvY2tzLiAgV2UgY291bGQgdXNlIGZhbGxvY2F0ZSwgYnV0IG5vdCBhbGwga2VybmVscworCQkgKiBzdXBwb3J0IHRoYXQsIGFuZCBjcmVhdGluZyBhIGpvdXJuYWwgb24gYSBtb3VudGVkIGV4dDIKKwkJICogZmlsZXN5c3RlbXMgaXMgZXh0cmVtZWx5IHJhcmUgdGhlc2UgZGF5cy4uLiAgSWdub3JlIGl0LiAqLworCQlmbGFncyAmPSB+RVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQ7CisKKwkJaWYgKChyZXR2YWwgPSB3cml0ZV9qb3VybmFsX2ZpbGUoZnMsIGpmaWxlLCBudW1fYmxvY2tzLCBmbGFncykpKQorCQkJZ290byBlcnJvdXQ7CisKKwkJLyogR2V0IGlub2RlIG51bWJlciBvZiB0aGUgam91cm5hbCBmaWxlICovCisJCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKwkJCXJldHZhbCA9IGVycm5vOworCQkJZ290byBlcnJvdXQ7CisJCX0KKworI2lmIGRlZmluZWQoSEFWRV9DSEZMQUdTKSAmJiBkZWZpbmVkKFVGX05PRFVNUCkKKwkJcmV0dmFsID0gZmNoZmxhZ3MgKGZkLCBVRl9OT0RVTVB8VUZfSU1NVVRBQkxFKTsKKyNlbHNlCisjaWYgSEFWRV9FWFQyX0lPQ1RMUworCQlpZiAoaW9jdGwoZmQsIEVYVDJfSU9DX0dFVEZMQUdTLCAmZikgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWYgfD0gRVhUMl9OT0RVTVBfRkwgfCBFWFQyX0lNTVVUQUJMRV9GTDsKKwkJcmV0dmFsID0gaW9jdGwoZmQsIEVYVDJfSU9DX1NFVEZMQUdTLCAmZik7CisjZW5kaWYKKyNlbmRpZgorCQlpZiAocmV0dmFsKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisKKwkJaWYgKGNsb3NlKGZkKSA8IDApIHsKKwkJCXJldHZhbCA9IGVycm5vOworCQkJZmQgPSAtMTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWpvdXJuYWxfaW5vID0gc3Quc3RfaW5vOworCX0gZWxzZSB7CisJCWlmICgobW91bnRfZmxhZ3MgJiBFWFQyX01GX0JVU1kpICYmCisJCSAgICAhKGZzLT5mbGFncyAmIEVYVDJfRkxBR19FWENMVVNJVkUpKSB7CisJCQlyZXR2YWwgPSBFQlVTWTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWpvdXJuYWxfaW5vID0gRVhUMl9KT1VSTkFMX0lOTzsKKwkJaWYgKChyZXR2YWwgPSB3cml0ZV9qb3VybmFsX2lub2RlKGZzLCBqb3VybmFsX2lubywKKwkJCQkJCSAgbnVtX2Jsb2NrcywgZmxhZ3MpKSkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJZnMtPnN1cGVyLT5zX2pvdXJuYWxfaW51bSA9IGpvdXJuYWxfaW5vOworCWZzLT5zdXBlci0+c19qb3VybmFsX2RldiA9IDA7CisJbWVtc2V0KGZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQsIDAsCisJICAgICAgIHNpemVvZihmcy0+c3VwZXItPnNfam91cm5hbF91dWlkKSk7CisJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0IHw9IEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7CitlcnJvdXQ6CisJaWYgKGZkID49IDApCisJCWNsb3NlKGZkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgREVCVUcKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKmRldmljZV9uYW1lOworCWV4dDJfZmlsc3lzCWZzOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGZpbGVzeXN0ZW1cbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKwlkZXZpY2VfbmFtZSA9IGFyZ3ZbMV07CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbiAoZGV2aWNlX25hbWUsIEVYVDJfRkxBR19SVywgMCwgMCwKKwkJCSAgICAgIHVuaXhfaW9fbWFuYWdlciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyAlcyIsIGRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoZnMsIDEwMjQsIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBhZGRpbmcgam91cm5hbCB0byAlcyIsCisJCQlkZXZpY2VfbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19mbHVzaChmcyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGYoIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLlxuIik7CisJfQorCWV4dDJmc19jbG9zZShmcyk7CisJZXhpdCgwKTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9tbXAuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL21tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9tbXAuYwpAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gKE1NUCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFdoYW1jbG91ZCwgSW5jLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisKKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKworI2lmbmRlZiBPX0RJUkVDVAorI2RlZmluZSBPX0RJUkVDVCAwCisjZW5kaWYKKworZXJyY29kZV90IGV4dDJmc19tbXBfcmVhZChleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBtbXBfYmxrLCB2b2lkICpidWYpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcF9jbXA7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoKG1tcF9ibGsgPD0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJICAgIChtbXBfYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpCisJCXJldHVybiBFWFQyX0VUX01NUF9CQURfQkxPQ0s7CisKKwkvKiBleHQyZnNfb3BlbigpIHJlc2VydmVzIGZkMCwxLDIgdG8gYXZvaWQgc3RkaW8gY29sbGlzaW9uLCBzbyBjaGVja2luZworCSAqIG1tcF9mZCA8PSAwIGlzIE9LIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZkIGlzIHZhbGlkLiAgVGhpcyBvcGVucyBpdHMKKwkgKiBvd24gZmQgdG8gcmVhZCB0aGUgTU1QIGJsb2NrIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHVzaW5nIE9fRElSRUNULAorCSAqIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBpb19tYW5hZ2VyIGlzIGRvaW5nIHJlYWRzLCB0byBhdm9pZCBjYWNoaW5nIG9mCisJICogdGhlIE1NUCBibG9jayBieSB0aGUgaW9fbWFuYWdlciBvciB0aGUgVk0uICBJdCBuZWVkcyB0byBiZSBmcmVzaC4gKi8KKwlpZiAoZnMtPm1tcF9mZCA8PSAwKSB7CisJCWZzLT5tbXBfZmQgPSBvcGVuKGZzLT5kZXZpY2VfbmFtZSwgT19SRFdSIHwgT19ESVJFQ1QpOworCQlpZiAoZnMtPm1tcF9mZCA8IDApIHsKKwkJCXJldHZhbCA9IEVYVDJfRVRfTU1QX09QRU5fRElSRUNUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoZnMtPm1tcF9jbXAgPT0gTlVMTCkgeworCQlpbnQgYWxpZ24gPSBleHQyZnNfZ2V0X2Rpb19hbGlnbm1lbnQoZnMtPm1tcF9mZCk7CisKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW1hbGlnbihmcy0+YmxvY2tzaXplLCBhbGlnbiwKKwkJCQkJICAgICAmZnMtPm1tcF9jbXApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKGJsazY0X3QpIGV4dDJmc19sbHNlZWsoZnMtPm1tcF9mZCwgbW1wX2JsayAqIGZzLT5ibG9ja3NpemUsCisJCQkJICAgIFNFRUtfU0VUKSAhPQorCSAgICBtbXBfYmxrICogZnMtPmJsb2Nrc2l6ZSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0xMU0VFS19GQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZWFkKGZzLT5tbXBfZmQsIGZzLT5tbXBfY21wLCBmcy0+YmxvY2tzaXplKSAhPSBmcy0+YmxvY2tzaXplKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfUkVBRDsKKwkJZ290byBvdXQ7CisJfQorCisJbW1wX2NtcCA9IGZzLT5tbXBfY21wOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWV4dDJmc19zd2FwX21tcChtbXBfY21wKTsKKyNlbmRpZgorCisJaWYgKGJ1ZiAhPSBOVUxMICYmIGJ1ZiAhPSBmcy0+bW1wX2NtcCkKKwkJbWVtY3B5KGJ1ZiwgZnMtPm1tcF9jbXAsIGZzLT5ibG9ja3NpemUpOworCisJaWYgKG1tcF9jbXAtPm1tcF9tYWdpYyAhPSBFWFQ0X01NUF9NQUdJQykgeworCQlyZXR2YWwgPSBFWFQyX0VUX01NUF9NQUdJQ19JTlZBTElEOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX21tcF93cml0ZShleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBtbXBfYmxrLCB2b2lkICpidWYpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcF9zID0gYnVmOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCisJZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisJbW1wX3MtPm1tcF90aW1lID0gdHYudHZfc2VjOworCWZzLT5tbXBfbGFzdF93cml0dGVuID0gdHYudHZfc2VjOworCisJaWYgKGZzLT5zdXBlci0+c19tbXBfYmxvY2sgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayB8fAorCSAgICBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrID4gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlyZXR1cm4gRVhUMl9FVF9NTVBfQkFEX0JMT0NLOworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJZXh0MmZzX3N3YXBfbW1wKG1tcF9zKTsKKyNlbmRpZgorCisJLyogSSB3YXMgdGVtcHRlZCB0byBtYWtlIHRoaXMgdXNlIE9fRElSRUNUIGFuZCB0aGUgbW1wX2ZkLCBidXQKKwkgKiB0aGlzIGNhdXNlZCBubyBlbmQgb2YgZ3JpZWYsIHdoaWxlIGxlYXZpbmcgaXQgYXMtaXMgd29ya3MuICovCisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIG1tcF9ibGssIC0oaW50KXNpemVvZihzdHJ1Y3QgbW1wX3N0cnVjdCksIGJ1Zik7CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKwlleHQyZnNfc3dhcF9tbXAobW1wX3MpOworI2VuZGlmCisKKwkvKiBNYWtlIHN1cmUgdGhlIGJsb2NrIGdldHMgdG8gZGlzayBxdWlja2x5ICovCisJaW9fY2hhbm5lbF9mbHVzaChmcy0+aW8pOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBIQVZFX1NSQU5ET00KKyNkZWZpbmUgc3JhbmQoeCkJc3JhbmRvbSh4KQorI2RlZmluZSByYW5kKCkJCXJhbmRvbSgpCisjZW5kaWYKKwordW5zaWduZWQgZXh0MmZzX21tcF9uZXdfc2VxKHZvaWQpCit7CisJdW5zaWduZWQgbmV3X3NlcTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWdldHRpbWVvZmRheSgmdHYsIDApOworCXNyYW5kKChnZXRwaWQoKSA8PCAxNikgXiBnZXR1aWQoKSBeIHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpOworCisJZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisJLyogQ3JhbmsgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGEgZmV3IHRpbWVzICovCisJZm9yIChuZXdfc2VxID0gKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpICYgMHgxRjsgbmV3X3NlcSA+IDA7IG5ld19zZXEtLSkKKwkJcmFuZCgpOworCisJZG8geworCQluZXdfc2VxID0gcmFuZCgpOworCX0gd2hpbGUgKG5ld19zZXEgPiBFWFQ0X01NUF9TRVFfTUFYKTsKKworCXJldHVybiBuZXdfc2VxOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19tbXBfcmVzZXQoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcF9zID0gTlVMTDsKKwllcnJjb2RlX3QgcmV0dmFsID0gMDsKKworCWlmIChmcy0+bW1wX2J1ZiA9PSBOVUxMKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZmcy0+bW1wX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoZnMtPm1tcF9idWYsIDAsIGZzLT5ibG9ja3NpemUpOworCW1tcF9zID0gZnMtPm1tcF9idWY7CisKKwltbXBfcy0+bW1wX21hZ2ljID0gRVhUNF9NTVBfTUFHSUM7CisJbW1wX3MtPm1tcF9zZXEgPSBFWFQ0X01NUF9TRVFfQ0xFQU47CisJbW1wX3MtPm1tcF90aW1lID0gMDsKKyNpZiBfQlNEX1NPVVJDRSB8fCBfWE9QRU5fU09VUkNFID49IDUwMAorCWdldGhvc3RuYW1lKG1tcF9zLT5tbXBfbm9kZW5hbWUsIHNpemVvZihtbXBfcy0+bW1wX25vZGVuYW1lKSk7CisjZWxzZQorCW1tcF9zLT5tbXBfbm9kZW5hbWVbMF0gPSAnXDAnOworI2VuZGlmCisJc3RybmNweShtbXBfcy0+bW1wX2JkZXZuYW1lLCBmcy0+ZGV2aWNlX25hbWUsCisJCXNpemVvZihtbXBfcy0+bW1wX2JkZXZuYW1lKSk7CisKKwltbXBfcy0+bW1wX2NoZWNrX2ludGVydmFsID0gZnMtPnN1cGVyLT5zX21tcF91cGRhdGVfaW50ZXJ2YWw7CisJaWYgKG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWwgPCBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUwpCisJCW1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWwgPSBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUw7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3dyaXRlKGZzLCBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrLCBmcy0+bW1wX2J1Zik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworZXJyY29kZV90IGV4dDJmc19tbXBfY2xlYXIoZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3Jlc2V0KGZzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfbW1wX2luaXQoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gZnMtPnN1cGVyOworCWJsazY0X3QgbW1wX2Jsb2NrOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCA9PSAwKQorCQlzYi0+c19tbXBfdXBkYXRlX2ludGVydmFsID0gRVhUNF9NTVBfVVBEQVRFX0lOVEVSVkFMOworCS8qIFRoaXMgaXMgcHJvYmFibHkgZXhjZXNzaXZlbHkgbGFyZ2UsIGJ1dCB3aG8ga25vd3M/ICovCisJZWxzZSBpZiAoc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCA+IEVYVDRfTU1QX01BWF9VUERBVEVfSU5URVJWQUwpCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlpZiAoZnMtPm1tcF9idWYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmZnMtPm1tcF9idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jX2Jsb2NrMihmcywgMCwgZnMtPm1tcF9idWYsICZtbXBfYmxvY2spOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJc2ItPnNfbW1wX2Jsb2NrID0gbW1wX2Jsb2NrOworCisJcmV0dmFsID0gZXh0MmZzX21tcF9yZXNldChmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIGZzIGlzIG5vdCBtb3VudGVkIG9yIGJlaW5nIGZzY2snZWQgd2hpbGUgb3BlbmluZyB0aGUgZnMuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfbW1wX3N0YXJ0KGV4dDJfZmlsc3lzIGZzKQoreworCXN0cnVjdCBtbXBfc3RydWN0ICptbXBfczsKKwl1bnNpZ25lZCBzZXE7CisJdW5zaWduZWQgaW50IG1tcF9jaGVja19pbnRlcnZhbDsKKwllcnJjb2RlX3QgcmV0dmFsID0gMDsKKworCWlmIChmcy0+bW1wX2J1ZiA9PSBOVUxMKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZmcy0+bW1wX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG1tcF9lcnJvcjsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3JlYWQoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCW1tcF9zID0gZnMtPm1tcF9idWY7CisKKwltbXBfY2hlY2tfaW50ZXJ2YWwgPSBmcy0+c3VwZXItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbDsKKwlpZiAobW1wX2NoZWNrX2ludGVydmFsIDwgRVhUNF9NTVBfTUlOX0NIRUNLX0lOVEVSVkFMKQorCQltbXBfY2hlY2tfaW50ZXJ2YWwgPSBFWFQ0X01NUF9NSU5fQ0hFQ0tfSU5URVJWQUw7CisKKwlzZXEgPSBtbXBfcy0+bW1wX3NlcTsKKwlpZiAoc2VxID09IEVYVDRfTU1QX1NFUV9DTEVBTikKKwkJZ290byBjbGVhbl9zZXE7CisJaWYgKHNlcSA9PSBFWFQ0X01NUF9TRVFfRlNDSykgeworCQlyZXR2YWwgPSBFWFQyX0VUX01NUF9GU0NLX09OOworCQlnb3RvIG1tcF9lcnJvcjsKKwl9CisKKwlpZiAoc2VxID4gRVhUNF9NTVBfU0VRX0ZTQ0spIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9NTVBfVU5LTk9XTl9TRVE7CisJCWdvdG8gbW1wX2Vycm9yOworCX0KKworCS8qCisJICogSWYgY2hlY2tfaW50ZXJ2YWwgaW4gTU1QIGJsb2NrIGlzIGxhcmdlciwgdXNlIHRoYXQgaW5zdGVhZCBvZgorCSAqIGNoZWNrX2ludGVydmFsIGZyb20gdGhlIHN1cGVyYmxvY2suCisJICovCisJaWYgKG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWwgPiBtbXBfY2hlY2tfaW50ZXJ2YWwpCisJCW1tcF9jaGVja19pbnRlcnZhbCA9IG1tcF9zLT5tbXBfY2hlY2tfaW50ZXJ2YWw7CisKKwlzbGVlcCgyICogbW1wX2NoZWNrX2ludGVydmFsICsgMSk7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3JlYWQoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCWlmIChzZXEgIT0gbW1wX3MtPm1tcF9zZXEpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9NTVBfRkFJTEVEOworCQlnb3RvIG1tcF9lcnJvcjsKKwl9CisKK2NsZWFuX3NlcToKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCW1tcF9zLT5tbXBfc2VxID0gc2VxID0gZXh0MmZzX21tcF9uZXdfc2VxKCk7CisjaWYgX0JTRF9TT1VSQ0UgfHwgX1hPUEVOX1NPVVJDRSA+PSA1MDAKKwlnZXRob3N0bmFtZShtbXBfcy0+bW1wX25vZGVuYW1lLCBzaXplb2YobW1wX3MtPm1tcF9ub2RlbmFtZSkpOworI2Vsc2UKKwlzdHJjcHkobW1wX3MtPm1tcF9ub2RlbmFtZSwgInVua25vd24gaG9zdCIpOworI2VuZGlmCisJc3RybmNweShtbXBfcy0+bW1wX2JkZXZuYW1lLCBmcy0+ZGV2aWNlX25hbWUsCisJCXNpemVvZihtbXBfcy0+bW1wX2JkZXZuYW1lKSk7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3dyaXRlKGZzLCBmcy0+c3VwZXItPnNfbW1wX2Jsb2NrLCBmcy0+bW1wX2J1Zik7CisJaWYgKHJldHZhbCkKKwkJZ290byBtbXBfZXJyb3I7CisKKwlzbGVlcCgyICogbW1wX2NoZWNrX2ludGVydmFsICsgMSk7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3JlYWQoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCWlmIChzZXEgIT0gbW1wX3MtPm1tcF9zZXEpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9NTVBfRkFJTEVEOworCQlnb3RvIG1tcF9lcnJvcjsKKwl9CisKKwltbXBfcy0+bW1wX3NlcSA9IEVYVDRfTU1QX1NFUV9GU0NLOworCXJldHZhbCA9IGV4dDJmc19tbXBfd3JpdGUoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCXJldHVybiAwOworCittbXBfZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENsZWFyIHRoZSBNTVAgdXNhZ2UgaW4gdGhlIGZpbGVzeXN0ZW0uICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4KKyAqIGVycm9yIEVYVDJfRVRfTU1QX0NIQU5HRV9BQk9SVCBpdCBtZWFucyB0aGUgZmlsZXN5c3RlbSB3YXMgbW9kaWZpZWQKKyAqIGJ5IHNvbWUgb3RoZXIgcHJvY2VzcyB3aGlsZSBpbiB1c2UsIGFuZCBjaGFuZ2VzIHNob3VsZCBiZSBkcm9wcGVkLCBvcgorICogcmlzayBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uCisgKi8KK2VycmNvZGVfdCBleHQyZnNfbW1wX3N0b3AoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCwgKm1tcF9jbXA7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVApIHx8CisJICAgICEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSB8fCAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1NLSVBfTU1QKSkKKwkJZ290byBtbXBfZXJyb3I7CisKKwlyZXR2YWwgPSBleHQyZnNfbW1wX3JlYWQoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1tcF9lcnJvcjsKKworCS8qIENoZWNrIGlmIHRoZSBNTVAgYmxvY2sgaXMgbm90IGNoYW5nZWQuICovCisJbW1wID0gZnMtPm1tcF9idWY7CisJbW1wX2NtcCA9IGZzLT5tbXBfY21wOworCWlmIChtZW1jbXAobW1wLCBtbXBfY21wLCBzaXplb2YoKm1tcF9jbXApKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX01NUF9DSEFOR0VfQUJPUlQ7CisJCWdvdG8gbW1wX2Vycm9yOworCX0KKworCW1tcF9jbXAtPm1tcF9zZXEgPSBFWFQ0X01NUF9TRVFfQ0xFQU47CisJcmV0dmFsID0gZXh0MmZzX21tcF93cml0ZShmcywgZnMtPnN1cGVyLT5zX21tcF9ibG9jaywgZnMtPm1tcF9jbXApOworCittbXBfZXJyb3I6CisJaWYgKGZzLT5tbXBfZmQgPiAwKSB7CisJCWNsb3NlKGZzLT5tbXBfZmQpOworCQlmcy0+bW1wX2ZkID0gLTE7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBFWFQyX01JTl9NTVBfVVBEQVRFX0lOVEVSVkFMIDYwCisKKy8qCisgKiBVcGRhdGUgdGhlIG9uLWRpc2sgbW1wIGJ1ZmZlciwgYWZ0ZXIgY2hlY2tpbmcgdGhhdCBpdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkLgorICovCitlcnJjb2RlX3QgZXh0MmZzX21tcF91cGRhdGUoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCwgKm1tcF9jbXA7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisKKwlpZiAoIShmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVApIHx8CisJICAgICEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSB8fCAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1NLSVBfTU1QKSkKKwkJcmV0dXJuIDA7CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKwlpZiAodHYudHZfc2VjIC0gZnMtPm1tcF9sYXN0X3dyaXR0ZW4gPCBFWFQyX01JTl9NTVBfVVBEQVRFX0lOVEVSVkFMKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IGV4dDJmc19tbXBfcmVhZChmcywgZnMtPnN1cGVyLT5zX21tcF9ibG9jaywgTlVMTCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBtbXBfZXJyb3I7CisKKwltbXAgPSBmcy0+bW1wX2J1ZjsKKwltbXBfY21wID0gZnMtPm1tcF9jbXA7CisKKwlpZiAobWVtY21wKG1tcCwgbW1wX2NtcCwgc2l6ZW9mKCptbXBfY21wKSkpCisJCXJldHVybiBFWFQyX0VUX01NUF9DSEFOR0VfQUJPUlQ7CisKKwltbXAtPm1tcF90aW1lID0gdHYudHZfc2VjOworCW1tcC0+bW1wX3NlcSA9IEVYVDRfTU1QX1NFUV9GU0NLOworCXJldHZhbCA9IGV4dDJmc19tbXBfd3JpdGUoZnMsIGZzLT5zdXBlci0+c19tbXBfYmxvY2ssIGZzLT5tbXBfYnVmKTsKKworbW1wX2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9uYW1laS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbmFtZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDcxMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbmFtZWkuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIG5hbWVpLmMgLS0tIGV4dDJmcyBkaXJlY3RvcnkgbG9va3VwIG9wZXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisvKiAjZGVmaW5lIE5BTUVJX0RFQlVHICovCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitzdGF0aWMgZXJyY29kZV90IG9wZW5fbmFtZWkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBiYXNlLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzaXplX3QgcGF0aGxlbiwgaW50IGZvbGxvdywKKwkJCSAgICBpbnQgbGlua19jb3VudCwgY2hhciAqYnVmLCBleHQyX2lub190ICpyZXNfaW5vZGUpOworCitzdGF0aWMgZXJyY29kZV90IGZvbGxvd19saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgZGlyLAorCQkJICAgICBleHQyX2lub190IGlub2RlLCBpbnQgbGlua19jb3VudCwKKwkJCSAgICAgY2hhciAqYnVmLCBleHQyX2lub190ICpyZXNfaW5vZGUpCit7CisJY2hhciAqcGF0aG5hbWU7CisJY2hhciAqYnVmZmVyID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIGVpOworCWJsazY0X3QgYmxrOworCisjaWZkZWYgTkFNRUlfREVCVUcKKwlwcmludGYoImZvbGxvd19saW5rOiByb290PSVsdSwgZGlyPSVsdSwgaW5vZGU9JWx1LCBsYz0lZFxuIiwKKwkgICAgICAgcm9vdCwgZGlyLCBpbm9kZSwgbGlua19jb3VudCk7CisKKyNlbmRpZgorCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlIChmcywgaW5vZGUsICZlaSk7CisJaWYgKHJldHZhbCkgcmV0dXJuIHJldHZhbDsKKwlpZiAoIUxJTlVYX1NfSVNMTksgKGVpLmlfbW9kZSkpIHsKKwkJKnJlc19pbm9kZSA9IGlub2RlOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGxpbmtfY291bnQrKyA+PSBFWFQyRlNfTUFYX05FU1RFRF9MSU5LUykKKwkJcmV0dXJuIEVYVDJfRVRfU1lNTElOS19MT09QOworCisJaWYgKGV4dDJmc19pbm9kZV9kYXRhX2Jsb2NrcyhmcywmZWkpKSB7CisJCXJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgaW5vZGUsICZlaSwgTlVMTCwgMCwgMCwgTlVMTCwgJmJsayk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWZmZXIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGJ1ZmZlcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYnVmZmVyKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJcGF0aG5hbWUgPSBidWZmZXI7CisJfSBlbHNlCisJCXBhdGhuYW1lID0gKGNoYXIgKikmKGVpLmlfYmxvY2tbMF0pOworCXJldHZhbCA9IG9wZW5fbmFtZWkoZnMsIHJvb3QsIGRpciwgcGF0aG5hbWUsIGVpLmlfc2l6ZSwgMSwKKwkJCSAgICBsaW5rX2NvdW50LCBidWYsIHJlc19pbm9kZSk7CisJaWYgKGJ1ZmZlcikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaW50ZXJwcmV0cyBhIHBhdGhuYW1lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50CisgKiBkaXJlY3RvcnkgYW5kIHRoZSByb290IGRpcmVjdG9yeSwgYW5kIHJldHVybnMgdGhlIGlub2RlIG9mIHRoZQorICogY29udGFpbmluZyBkaXJlY3RvcnksIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlCisgKiAocG9pbnRpbmcgaW50byB0aGUgcGF0aG5hbWUpIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlbmFtZS4KKyAqLworc3RhdGljIGVycmNvZGVfdCBkaXJfbmFtZWkoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3Qgcm9vdCwgZXh0Ml9pbm9fdCBkaXIsCisJCQkgICBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCQkgICBpbnQgbGlua19jb3VudCwgY2hhciAqYnVmLAorCQkJICAgY29uc3QgY2hhciAqKm5hbWUsIGludCAqbmFtZWxlbiwKKwkJCSAgIGV4dDJfaW5vX3QgKnJlc19pbm9kZSkKK3sKKwljaGFyIGM7CisJY29uc3QgY2hhciAqdGhpc25hbWU7CisJaW50IGxlbjsKKwlleHQyX2lub190IGlub2RlOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoKGMgPSAqcGF0aG5hbWUpID09ICcvJykgeworICAgICAgICAJZGlyID0gcm9vdDsKKwkJcGF0aG5hbWUrKzsKKwkJcGF0aGxlbi0tOworCX0KKwl3aGlsZSAoMSkgeworICAgICAgICAJdGhpc25hbWUgPSBwYXRobmFtZTsKKwkJZm9yIChsZW49MDsgLS1wYXRobGVuID49IDA7bGVuKyspIHsKKwkJCWMgPSAqKHBhdGhuYW1lKyspOworCQkJaWYgKGMgPT0gJy8nKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChwYXRobGVuIDwgMCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSBleHQyZnNfbG9va3VwIChmcywgZGlyLCB0aGlzbmFtZSwgbGVuLCBidWYsICZpbm9kZSk7CisJCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisgICAgICAgIAlyZXR2YWwgPSBmb2xsb3dfbGluayAoZnMsIHJvb3QsIGRpciwgaW5vZGUsCisJCQkJICAgICAgbGlua19jb3VudCwgYnVmLCAmZGlyKTsKKyAgICAgICAgCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisgICAgCX0KKwkqbmFtZSA9IHRoaXNuYW1lOworCSpuYW1lbGVuID0gbGVuOworCSpyZXNfaW5vZGUgPSBkaXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgb3Blbl9uYW1laShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGJhc2UsCisJCQkgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIHNpemVfdCBwYXRobGVuLCBpbnQgZm9sbG93LAorCQkJICAgIGludCBsaW5rX2NvdW50LCBjaGFyICpidWYsIGV4dDJfaW5vX3QgKnJlc19pbm9kZSkKK3sKKwljb25zdCBjaGFyICpiYXNlX25hbWU7CisJaW50IG5hbWVsZW47CisJZXh0Ml9pbm9fdCBkaXIsIGlub2RlOworCWVycmNvZGVfdCByZXR2YWw7CisKKyNpZmRlZiBOQU1FSV9ERUJVRworCXByaW50Zigib3Blbl9uYW1laTogcm9vdD0lbHUsIGRpcj0lbHUsIHBhdGg9JSpzLCBsYz0lZFxuIiwKKwkgICAgICAgcm9vdCwgYmFzZSwgcGF0aGxlbiwgcGF0aG5hbWUsIGxpbmtfY291bnQpOworI2VuZGlmCisJcmV0dmFsID0gZGlyX25hbWVpKGZzLCByb290LCBiYXNlLCBwYXRobmFtZSwgcGF0aGxlbiwKKwkJCSAgIGxpbmtfY291bnQsIGJ1ZiwgJmJhc2VfbmFtZSwgJm5hbWVsZW4sICZkaXIpOworCWlmIChyZXR2YWwpIHJldHVybiByZXR2YWw7CisJaWYgKCFuYW1lbGVuKSB7ICAgICAgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjYXNlOiAnL3Vzci8nIGV0YyAqLworCQkqcmVzX2lub2RlPWRpcjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHZhbCA9IGV4dDJmc19sb29rdXAgKGZzLCBkaXIsIGJhc2VfbmFtZSwgbmFtZWxlbiwgYnVmLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGZvbGxvdykgeworCQlyZXR2YWwgPSBmb2xsb3dfbGluayhmcywgcm9vdCwgZGlyLCBpbm9kZSwgbGlua19jb3VudCwKKwkJCQkgICAgIGJ1ZiwgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorI2lmZGVmIE5BTUVJX0RFQlVHCisJcHJpbnRmKCJvcGVuX25hbWVpOiAobGlua19jb3VudD0lZCkgcmV0dXJucyAlbHVcbiIsCisJICAgICAgIGxpbmtfY291bnQsIGlub2RlKTsKKyNlbmRpZgorCSpyZXNfaW5vZGUgPSBpbm9kZTsKKwlyZXR1cm4gMDsKK30KKworZXJyY29kZV90IGV4dDJmc19uYW1laShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGV4dDJfaW5vX3QgKmlub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBvcGVuX25hbWVpKGZzLCByb290LCBjd2QsIG5hbWUsIHN0cmxlbihuYW1lKSwgMCwgMCwKKwkJCSAgICBidWYsIGlub2RlKTsKKworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX25hbWVpX2ZvbGxvdyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCByb290LCBleHQyX2lub190IGN3ZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGV4dDJfaW5vX3QgKmlub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBvcGVuX25hbWVpKGZzLCByb290LCBjd2QsIG5hbWUsIHN0cmxlbihuYW1lKSwgMSwgMCwKKwkJCSAgICBidWYsIGlub2RlKTsKKworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX2ZvbGxvd19saW5rKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IHJvb3QsIGV4dDJfaW5vX3QgY3dkLAorCQkJZXh0Ml9pbm9fdCBpbm9kZSwgZXh0Ml9pbm9fdCAqcmVzX2lub2RlKQoreworCWNoYXIgKmJ1ZjsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBmb2xsb3dfbGluayhmcywgcm9vdCwgY3dkLCBpbm9kZSwgMCwgYnVmLCByZXNfaW5vZGUpOworCisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL25hdGl2ZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbmF0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxYTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL25hdGl2ZS5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBuYXRpdmUuYyAtLS0gcmV0dXJucyB0aGUgZXh0Ml9mbGFnIGZvciBhIG5hdGl2ZSBieXRlIG9yZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworaW50IGV4dDJmc19uYXRpdmVfZmxhZyh2b2lkKQoreworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCXJldHVybiBFWFQyX0ZMQUdfU1dBUF9CWVRFUzsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL25ld2Rpci5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvbmV3ZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYWVjZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL25ld2Rpci5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBuZXdkaXIuYyAtLS0gY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyNpZm5kZWYgRVhUMl9GVF9ESVIKKyNkZWZpbmUgRVhUMl9GVF9ESVIJCTIKKyNlbmRpZgorCisvKgorICogQ3JlYXRlIG5ldyBkaXJlY3RvcnkgYmxvY2sKKyAqLworZXJyY29kZV90IGV4dDJmc19uZXdfZGlyX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGRpcl9pbm8sCisJCQkgICAgICAgZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjaGFyICoqYmxvY2spCit7CisJc3RydWN0IGV4dDJfZGlyX2VudHJ5IAkqZGlyID0gTlVMTDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwljaGFyCQkJKmJ1ZjsKKwlpbnQJCQlyZWNfbGVuOworCWludAkJCWZpbGV0eXBlID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChidWYsIDAsIGZzLT5ibG9ja3NpemUpOworCWRpciA9IChzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKikgYnVmOworCisJcmV0dmFsID0gZXh0MmZzX3NldF9yZWNfbGVuKGZzLCBmcy0+YmxvY2tzaXplLCBkaXIpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChkaXJfaW5vKSB7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpCisJCQlmaWxldHlwZSA9IEVYVDJfRlRfRElSIDw8IDg7CisJCS8qCisJCSAqIFNldCB1cCBlbnRyeSBmb3IgJy4nCisJCSAqLworCQlkaXItPmlub2RlID0gZGlyX2lubzsKKwkJZGlyLT5uYW1lX2xlbiA9IDEgfCBmaWxldHlwZTsKKwkJZGlyLT5uYW1lWzBdID0gJy4nOworCQlyZWNfbGVuID0gZnMtPmJsb2Nrc2l6ZSAtIEVYVDJfRElSX1JFQ19MRU4oMSk7CisJCWRpci0+cmVjX2xlbiA9IEVYVDJfRElSX1JFQ19MRU4oMSk7CisKKwkJLyoKKwkJICogU2V0IHVwIGVudHJ5IGZvciAnLi4nCisJCSAqLworCQlkaXIgPSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5ICopIChidWYgKyBkaXItPnJlY19sZW4pOworCQlyZXR2YWwgPSBleHQyZnNfc2V0X3JlY19sZW4oZnMsIHJlY19sZW4sIGRpcik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJZGlyLT5pbm9kZSA9IHBhcmVudF9pbm87CisJCWRpci0+bmFtZV9sZW4gPSAyIHwgZmlsZXR5cGU7CisJCWRpci0+bmFtZVswXSA9ICcuJzsKKwkJZGlyLT5uYW1lWzFdID0gJy4nOworCisJfQorCSpibG9jayA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL250X2lvLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9udF9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOWUxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9udF9pby5jCkBAIC0wLDAgKzEsMTQ5NSBAQAorLyoKKyAqIG50X2lvLmMgLS0tIFRoaXMgaXMgdGhlIE50IEkvTyBpbnRlcmZhY2UgdG8gdGhlIEkvTyBtYW5hZ2VyLgorICoKKyAqIEltcGxlbWVudHMgYSBvbmUtYmxvY2sgd3JpdGUtdGhyb3VnaCBjYWNoZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXkgU2hlZGVsIChhbmRyZXlzQG5zLmNyLmN5Y28uY29tKQorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNlbmRpZgorCisKKy8vCisvLyBJIG5lZWQgc29tZSB3YXJuaW5ncyB0byBkaXNhYmxlLi4uCisvLworCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MTQpIC8vIHVucmVmZXJlbmNlZCBpbmxpbmUgZnVuY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZAorI3ByYWdtYSB3YXJuaW5nKHB1c2gsNCkKKworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDIwMSkgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOiBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjE0KSAvLyBub25zdGFuZGFyZCBleHRlbnNpb24gdXNlZCA6IGJpdCBmaWVsZCB0eXBlcyBvdGhlciB0aGFuIGludAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDExNSkgLy8gbmFtZWQgdHlwZSBkZWZpbml0aW9uIGluIHBhcmVudGhlc2VzCisKKyNpbmNsdWRlIDxudGRkay5oPgorI2luY2x1ZGUgPG50ZGRkaXNrLmg+CisjaW5jbHVkZSA8bnRzdGF0dXMuaD4KKworI3ByYWdtYSB3YXJuaW5nKHBvcCkKKworCisvLworLy8gU29tZSBuYXRpdmUgQVBJcy4KKy8vCisKK05UU1lTQVBJCitVTE9ORworTlRBUEkKK1J0bE50U3RhdHVzVG9Eb3NFcnJvcigKKyAgICBJTiBOVFNUQVRVUyBTdGF0dXMKKyAgICk7CisKK05UU1lTQVBJCitOVFNUQVRVUworTlRBUEkKK050Q2xvc2UoCisgICAgSU4gSEFORExFIEhhbmRsZQorICAgKTsKKworCitOVFNZU0FQSQorTlRTVEFUVVMKK05UQVBJCitOdE9wZW5GaWxlKAorICAgIE9VVCBQSEFORExFIEZpbGVIYW5kbGUsCisgICAgSU4gQUNDRVNTX01BU0sgRGVzaXJlZEFjY2VzcywKKyAgICBJTiBQT0JKRUNUX0FUVFJJQlVURVMgT2JqZWN0QXR0cmlidXRlcywKKyAgICBPVVQgUElPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrLAorICAgIElOIFVMT05HIFNoYXJlQWNjZXNzLAorICAgIElOIFVMT05HIE9wZW5PcHRpb25zCisgICAgKTsKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRGbHVzaEJ1ZmZlcnNGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2sKKyAgICk7CisKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRSZWFkRmlsZSgKKyAgICBJTiBIQU5ETEUgRmlsZUhhbmRsZSwKKyAgICBJTiBIQU5ETEUgRXZlbnQgT1BUSU9OQUwsCisgICAgSU4gUElPX0FQQ19ST1VUSU5FIEFwY1JvdXRpbmUgT1BUSU9OQUwsCisgICAgSU4gUFZPSUQgQXBjQ29udGV4dCBPUFRJT05BTCwKKyAgICBPVVQgUElPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrLAorICAgIE9VVCBQVk9JRCBCdWZmZXIsCisgICAgSU4gVUxPTkcgTGVuZ3RoLAorICAgIElOIFBMQVJHRV9JTlRFR0VSIEJ5dGVPZmZzZXQgT1BUSU9OQUwsCisgICAgSU4gUFVMT05HIEtleSBPUFRJT05BTAorICAgICk7CisKK05UU1lTQVBJCitOVFNUQVRVUworTlRBUEkKK050V3JpdGVGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIElOIEhBTkRMRSBFdmVudCBPUFRJT05BTCwKKyAgICBJTiBQSU9fQVBDX1JPVVRJTkUgQXBjUm91dGluZSBPUFRJT05BTCwKKyAgICBJTiBQVk9JRCBBcGNDb250ZXh0IE9QVElPTkFMLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2ssCisgICAgSU4gUFZPSUQgQnVmZmVyLAorICAgIElOIFVMT05HIExlbmd0aCwKKyAgICBJTiBQTEFSR0VfSU5URUdFUiBCeXRlT2Zmc2V0IE9QVElPTkFMLAorICAgIElOIFBVTE9ORyBLZXkgT1BUSU9OQUwKKyAgICApOworCitOVFNZU0FQSQorTlRTVEFUVVMKK05UQVBJCitOdERldmljZUlvQ29udHJvbEZpbGUoCisgICAgSU4gSEFORExFIEZpbGVIYW5kbGUsCisgICAgSU4gSEFORExFIEV2ZW50IE9QVElPTkFMLAorICAgIElOIFBJT19BUENfUk9VVElORSBBcGNSb3V0aW5lIE9QVElPTkFMLAorICAgIElOIFBWT0lEIEFwY0NvbnRleHQgT1BUSU9OQUwsCisgICAgT1VUIFBJT19TVEFUVVNfQkxPQ0sgSW9TdGF0dXNCbG9jaywKKyAgICBJTiBVTE9ORyBJb0NvbnRyb2xDb2RlLAorICAgIElOIFBWT0lEIElucHV0QnVmZmVyIE9QVElPTkFMLAorICAgIElOIFVMT05HIElucHV0QnVmZmVyTGVuZ3RoLAorICAgIE9VVCBQVk9JRCBPdXRwdXRCdWZmZXIgT1BUSU9OQUwsCisgICAgSU4gVUxPTkcgT3V0cHV0QnVmZmVyTGVuZ3RoCisgICAgKTsKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnRGc0NvbnRyb2xGaWxlKAorICAgIElOIEhBTkRMRSBGaWxlSGFuZGxlLAorICAgIElOIEhBTkRMRSBFdmVudCBPUFRJT05BTCwKKyAgICBJTiBQSU9fQVBDX1JPVVRJTkUgQXBjUm91dGluZSBPUFRJT05BTCwKKyAgICBJTiBQVk9JRCBBcGNDb250ZXh0IE9QVElPTkFMLAorICAgIE9VVCBQSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2ssCisgICAgSU4gVUxPTkcgSW9Db250cm9sQ29kZSwKKyAgICBJTiBQVk9JRCBJbnB1dEJ1ZmZlciBPUFRJT05BTCwKKyAgICBJTiBVTE9ORyBJbnB1dEJ1ZmZlckxlbmd0aCwKKyAgICBPVVQgUFZPSUQgT3V0cHV0QnVmZmVyIE9QVElPTkFMLAorICAgIElOIFVMT05HIE91dHB1dEJ1ZmZlckxlbmd0aAorICAgICk7CisKKworTlRTWVNBUEkKK05UU1RBVFVTCitOVEFQSQorTnREZWxheUV4ZWN1dGlvbigKKyAgICBJTiBCT09MRUFOIEFsZXJ0YWJsZSwKKyAgICBJTiBQTEFSR0VfSU5URUdFUiBJbnRlcnZhbAorICAgICk7CisKKworI2RlZmluZSBGU0NUTF9MT0NLX1ZPTFVNRSAgICAgICAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCA2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfVU5MT0NLX1ZPTFVNRSAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0RJU01PVU5UX1ZPTFVNRSAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDgsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9JU19WT0xVTUVfTU9VTlRFRCAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLDEwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLworLy8gdXNlZnVsIG1hY3JvcworLy8KKworI2RlZmluZSBCb29sZWFuRmxhZ09uKEZsYWdzLFNpbmdsZUZsYWcpICgoQk9PTEVBTikoKCgoRmxhZ3MpICYgKFNpbmdsZUZsYWcpKSAhPSAwKSkpCisKKworLy8KKy8vIEluY2x1ZGUgV2luMzIgZXJyb3IgY29kZXMuCisvLworCisjaW5jbHVkZSA8d2luZXJyb3IuaD4KKworLy8KKy8vIHN0YW5kYXJkIHN0dWZmCisvLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2Vyci5oIgorCisKKworCisvLworLy8gRm9yIGNoZWNraW5nIHN0cnVjdHVyZSBtYWdpYyBudW1iZXJzLi4uCisvLworCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKKyNkZWZpbmUgRVhUMl9FVF9NQUdJQ19OVF9JT19DSEFOTkVMICAweDEwZWQKKworCisvLworLy8gUHJpdmF0ZSBkYXRhIGJsb2NrCisvLworCit0eXBlZGVmIHN0cnVjdCBfTlRfUFJJVkFURV9EQVRBIHsKKwlpbnQJICAgbWFnaWM7CisJSEFORExFIEhhbmRsZTsKKwlpbnQJICAgRmxhZ3M7CisJUENIQVIgIEJ1ZmZlcjsKKwlfX3UzMiAgQnVmZmVyQmxvY2tOdW1iZXI7CisJVUxPTkcgIEJ1ZmZlclNpemU7CisJQk9PTEVBTiBPcGVuZWRSZWFkb25seTsKKwlCT09MRUFOIFdyaXR0ZW47Cit9TlRfUFJJVkFURV9EQVRBLCAqUE5UX1BSSVZBVEVfREFUQTsKKworCisKKy8vCisvLyBTdGFuZGFyZCBpbnRlcmZhY2UgcHJvdG90eXBlcworLy8KKworc3RhdGljIGVycmNvZGVfdCBudF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IG50X2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IG50X3NldF9ibGtzaXplKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW50IGJsa3NpemUpOworc3RhdGljIGVycmNvZGVfdCBudF9yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgbnRfd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCQlpbnQgY291bnQsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCBudF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpOworCitzdGF0aWMgc3RydWN0IHN0cnVjdF9pb19tYW5hZ2VyIHN0cnVjdF9udF9tYW5hZ2VyID0geworCUVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkiTlQgSS9PIE1hbmFnZXIiLAorCW50X29wZW4sCisJbnRfY2xvc2UsCisJbnRfc2V0X2Jsa3NpemUsCisJbnRfcmVhZF9ibGssCisJbnRfd3JpdGVfYmxrLAorCW50X2ZsdXNoCit9OworCisKKworLy8KKy8vIGZ1bmN0aW9uIHRvIGdldCBBUEkKKy8vCisKK2lvX21hbmFnZXIgbnRfaW9fbWFuYWdlcigpCit7CisJcmV0dXJuICZzdHJ1Y3RfbnRfbWFuYWdlcjsKK30KKworCisKKworCisvLworLy8gVGhpcyBpcyBhIGNvZGUgdG8gY29udmVydCBXaW4zMiBlcnJvcnMgdG8gdW5peCBlcnJubworLy8KKwordHlwZWRlZiBzdHJ1Y3QgeworCVVMT05HIFdpbkVycm9yOworCWludCBlcnJub2NvZGU7Cit9RVJST1JfRU5UUlk7CisKK3N0YXRpYyBFUlJPUl9FTlRSWSBFcnJvclRhYmxlW10gPSB7CisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfRlVOQ1RJT04sICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9GSUxFX05PVF9GT1VORCwgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfUEFUSF9OT1RfRk9VTkQsICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVMsICAgIEVNRklMRSAgICB9LAorICAgICAgICB7ICBFUlJPUl9BQ0NFU1NfREVOSUVELCAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9IQU5ETEUsICAgICAgICAgRUJBREYgICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0FSRU5BX1RSQVNIRUQsICAgICAgICAgIEVOT01FTSAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWSwgICAgICBFTk9NRU0gICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9CTE9DSywgICAgICAgICAgRU5PTUVNICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JBRF9FTlZJUk9OTUVOVCwgICAgICAgIEUyQklHICAgICB9LAorICAgICAgICB7ICBFUlJPUl9CQURfRk9STUFULCAgICAgICAgICAgICBFTk9FWEVDICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9BQ0NFU1MsICAgICAgICAgRUlOVkFMICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfREFUQSwgICAgICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9JTlZBTElEX0RSSVZFLCAgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlksICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX05PVF9TQU1FX0RFVklDRSwgICAgICAgIEVYREVWICAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT19NT1JFX0ZJTEVTLCAgICAgICAgICBFTk9FTlQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfTE9DS19WSU9MQVRJT04sICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JBRF9ORVRQQVRILCAgICAgICAgICAgIEVOT0VOVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORVRXT1JLX0FDQ0VTU19ERU5JRUQsICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQkFEX05FVF9OQU1FLCAgICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0ZJTEVfRVhJU1RTLCAgICAgICAgICAgIEVFWElTVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9DQU5OT1RfTUFLRSwgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfRkFJTF9JMjQsICAgICAgICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSLCAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9OT19QUk9DX1NMT1RTLCAgICAgICAgICBFQUdBSU4gICAgfSwKKyAgICAgICAgeyAgRVJST1JfRFJJVkVfTE9DS0VELCAgICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0JST0tFTl9QSVBFLCAgICAgICAgICAgIEVQSVBFICAgICB9LAorICAgICAgICB7ICBFUlJPUl9ESVNLX0ZVTEwsICAgICAgICAgICAgICBFTk9TUEMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfSU5WQUxJRF9UQVJHRVRfSEFORExFLCAgRUJBREYgICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0lOVkFMSURfSEFORExFLCAgICAgICAgIEVJTlZBTCAgICB9LAorICAgICAgICB7ICBFUlJPUl9XQUlUX05PX0NISUxEUkVOLCAgICAgICBFQ0hJTEQgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQ0hJTERfTk9UX0NPTVBMRVRFLCAgICAgRUNISUxEICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0RJUkVDVF9BQ0NFU1NfSEFORExFLCAgIEVCQURGICAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORUdBVElWRV9TRUVLLCAgICAgICAgICBFSU5WQUwgICAgfSwKKyAgICAgICAgeyAgRVJST1JfU0VFS19PTl9ERVZJQ0UsICAgICAgICAgRUFDQ0VTICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0RJUl9OT1RfRU1QVFksICAgICAgICAgIEVOT1RFTVBUWSB9LAorICAgICAgICB7ICBFUlJPUl9OT1RfTE9DS0VELCAgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQkFEX1BBVEhOQU1FLCAgICAgICAgICAgRU5PRU5UICAgIH0sCisgICAgICAgIHsgIEVSUk9SX01BWF9USFJEU19SRUFDSEVELCAgICAgIEVBR0FJTiAgICB9LAorICAgICAgICB7ICBFUlJPUl9MT0NLX0ZBSUxFRCwgICAgICAgICAgICBFQUNDRVMgICAgfSwKKyAgICAgICAgeyAgRVJST1JfQUxSRUFEWV9FWElTVFMsICAgICAgICAgRUVYSVNUICAgIH0sCisgICAgICAgIHsgIEVSUk9SX0ZJTEVOQU1FX0VYQ0VEX1JBTkdFLCAgIEVOT0VOVCAgICB9LAorICAgICAgICB7ICBFUlJPUl9ORVNUSU5HX05PVF9BTExPV0VELCAgICBFQUdBSU4gICAgfSwKKyAgICAgICAgeyAgRVJST1JfTk9UX0VOT1VHSF9RVU9UQSwgICAgICAgRU5PTUVNICAgIH0KK307CisKKworCisKK3N0YXRpYwordW5zaWduZWQKK19NYXBEb3NFcnJvciAoCisgICAgSU4gVUxPTkcgV2luRXJyb3IKKyAgICkKK3sKKwlpbnQgaTsKKworCS8vCisJLy8gTG9va3VwCisJLy8KKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKEVycm9yVGFibGUpL3NpemVvZihFcnJvclRhYmxlWzBdKSk7ICsraSkKKwl7CisJCWlmIChXaW5FcnJvciA9PSBFcnJvclRhYmxlW2ldLldpbkVycm9yKQorCQl7CisJCQlyZXR1cm4gRXJyb3JUYWJsZVtpXS5lcnJub2NvZGU7CisJCX0KKwl9CisKKwkvLworCS8vIG5vdCBpbiB0YWJsZS4gQ2hlY2sgcmFuZ2VzCisJLy8KKworCWlmICgoV2luRXJyb3IgPj0gRVJST1JfV1JJVEVfUFJPVEVDVCkgJiYKKwkJKFdpbkVycm9yIDw9IEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEKSkKKwl7CisJCXJldHVybiBFQUNDRVM7CisJfQorCWVsc2UgaWYgKChXaW5FcnJvciA+PSBFUlJPUl9JTlZBTElEX1NUQVJUSU5HX0NPREVTRUcpICYmCisJCQkgKFdpbkVycm9yIDw9IEVSUk9SX0lORkxPT1BfSU5fUkVMT0NfQ0hBSU4pKQorCXsKKwkJcmV0dXJuIEVOT0VYRUM7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBFSU5WQUw7CisJfQorfQorCisKKworCisKKworCisvLworLy8gRnVuY3Rpb24gdG8gbWFwIE5UIHN0YXR1cyB0byBkb3MgZXJyb3IuCisvLworCitzdGF0aWMKK19faW5saW5lCit1bnNpZ25lZAorX01hcE50U3RhdHVzKAorICAgIElOIE5UU1RBVFVTIFN0YXR1cworICAgKQoreworCXJldHVybiBfTWFwRG9zRXJyb3IoUnRsTnRTdGF0dXNUb0Rvc0Vycm9yKFN0YXR1cykpOworfQorCisKKworCisKKy8vCisvLyBIZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2UgdGhpbmdzIGVhc3llcgorLy8KKworc3RhdGljCitOVFNUQVRVUworX09wZW5OdE5hbWUoCisgICAgSU4gUENTVFIgTmFtZSwKKyAgICBJTiBCT09MRUFOIFJlYWRvbmx5LAorICAgIE9VVCBQSEFORExFIEhhbmRsZSwKKyAgICBPVVQgUEJPT0xFQU4gT3BlbmVkUmVhZG9ubHkgT1BUSU9OQUwKKyAgICkKK3sKKwlVTklDT0RFX1NUUklORyBVbmljb2RlU3RyaW5nOworCUFOU0lfU1RSSU5HICAgIEFuc2lTdHJpbmc7CisJV0NIQVIgQnVmZmVyWzUxMl07CisJTlRTVEFUVVMgU3RhdHVzOworCU9CSkVDVF9BVFRSSUJVVEVTIE9iamVjdEF0dHJpYnV0ZXM7CisJSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2s7CisKKwkvLworCS8vIE1ha2UgVW5pY29kZSBuYW1lIGZyb20gaW5sdXQgc3RyaW5nCisJLy8KKworCVVuaWNvZGVTdHJpbmcuQnVmZmVyID0gJkJ1ZmZlclswXTsKKwlVbmljb2RlU3RyaW5nLkxlbmd0aCA9IDA7CisJVW5pY29kZVN0cmluZy5NYXhpbXVtTGVuZ3RoID0gc2l6ZW9mKEJ1ZmZlcik7IC8vIGluIGJ5dGVzISEhCisKKwlSdGxJbml0QW5zaVN0cmluZygmQW5zaVN0cmluZywgTmFtZSk7CisKKwlTdGF0dXMgPSBSdGxBbnNpU3RyaW5nVG9Vbmljb2RlU3RyaW5nKCZVbmljb2RlU3RyaW5nLCAmQW5zaVN0cmluZywgRkFMU0UpOworCisJaWYoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKwl7CisJCXJldHVybiBTdGF0dXM7IC8vIFVucGFwcGFibGUgY2hhcmFjdGVyPworCX0KKworCS8vCisJLy8gSW5pdGlhbGl6ZSBvYmplY3QKKwkvLworCisJSW5pdGlhbGl6ZU9iamVjdEF0dHJpYnV0ZXMoJk9iamVjdEF0dHJpYnV0ZXMsCisJCQkJCQkJICAgJlVuaWNvZGVTdHJpbmcsCisJCQkJCQkJICAgT0JKX0NBU0VfSU5TRU5TSVRJVkUsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMICk7CisKKwkvLworCS8vIFRyeSB0byBvcGVuIGl0IGluIGluaXRpYWwgbW9kZQorCS8vCisKKwlpZihBUkdVTUVOVF9QUkVTRU5UKE9wZW5lZFJlYWRvbmx5KSkKKwl7CisJCSpPcGVuZWRSZWFkb25seSA9IFJlYWRvbmx5OworCX0KKworCisJU3RhdHVzID0gTnRPcGVuRmlsZShIYW5kbGUsCisJCQkJCQlTWU5DSFJPTklaRSB8IEZJTEVfUkVBRF9EQVRBIHwgKFJlYWRvbmx5ID8gMCA6IEZJTEVfV1JJVEVfREFUQSksCisJCQkJCQkmT2JqZWN0QXR0cmlidXRlcywKKwkJCQkJCSZJb1N0YXR1c0Jsb2NrLAorCQkJCQkJRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hBUkVfUkVBRCwKKwkJCQkJCUZJTEVfU1lOQ0hST05PVVNfSU9fTk9OQUxFUlQpOworCisJaWYoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKwl7CisJCS8vCisJCS8vIE1heWJlIHdhcyBqdXN0IG1vdW50ZWQ/IHdhaXQgMC41IHNlYyBhbmQgcmV0cnkuCisJCS8vCisKKwkJTEFSR0VfSU5URUdFUiBJbnRlcnZhbDsKKwkJSW50ZXJ2YWwuUXVhZFBhcnQgPSAtNTAwMDAwMDsgLy8gMC41IHNlYy4gZnJvbSBub3cKKworCQlOdERlbGF5RXhlY3V0aW9uKEZBTFNFLCAmSW50ZXJ2YWwpOworCisJCVN0YXR1cyA9IE50T3BlbkZpbGUoSGFuZGxlLAorCQkJCQkJCVNZTkNIUk9OSVpFIHwgRklMRV9SRUFEX0RBVEEgfCAoUmVhZG9ubHkgPyAwIDogRklMRV9XUklURV9EQVRBKSwKKwkJCQkJCQkmT2JqZWN0QXR0cmlidXRlcywKKwkJCQkJCQkmSW9TdGF0dXNCbG9jaywKKwkJCQkJCQlGSUxFX1NIQVJFX1dSSVRFIHwgRklMRV9TSEFSRV9SRUFELAorCQkJCQkJCUZJTEVfU1lOQ0hST05PVVNfSU9fTk9OQUxFUlQpOworCisJCS8vCisJCS8vIFRyeSB0byBzYXRpc2Z5IG1vZGUKKwkJLy8KKworCQlpZigoU1RBVFVTX0FDQ0VTU19ERU5JRUQgPT0gU3RhdHVzKSAmJiAhUmVhZG9ubHkpCisJCXsKKwkJCWlmKEFSR1VNRU5UX1BSRVNFTlQoT3BlbmVkUmVhZG9ubHkpKQorCQkJeworCQkJCSpPcGVuZWRSZWFkb25seSA9IFRSVUU7CisJCQl9CisKKwkJCVN0YXR1cyA9IE50T3BlbkZpbGUoSGFuZGxlLAorCQkJCQkJCVNZTkNIUk9OSVpFIHwgRklMRV9SRUFEX0RBVEEsCisJCQkJCQkJJk9iamVjdEF0dHJpYnV0ZXMsCisJCQkJCQkJJklvU3RhdHVzQmxvY2ssCisJCQkJCQkJRklMRV9TSEFSRV9XUklURSB8IEZJTEVfU0hBUkVfUkVBRCwKKwkJCQkJCQlGSUxFX1NZTkNIUk9OT1VTX0lPX05PTkFMRVJUKTsKKwkJfQorCX0KKworCisKKwkvLworCS8vIGRvbmUKKwkvLworCisJcmV0dXJuIFN0YXR1czsKK30KKworCitzdGF0aWMKK05UU1RBVFVTCitfT3BlbkRyaXZlTGV0dGVyKAorICAgIElOIENIQVIgTGV0dGVyLAorICAgIElOIEJPT0xFQU4gUmVhZE9ubHksCisgICAgT1VUIFBIQU5ETEUgSGFuZGxlLAorICAgIE9VVCBQQk9PTEVBTiBPcGVuZWRSZWFkb25seSBPUFRJT05BTAorICAgKQoreworCUNIQVIgQnVmZmVyWzEwMF07CisKKwlzcHJpbnRmKEJ1ZmZlciwgIlxcRG9zRGV2aWNlc1xcJWM6IiwgTGV0dGVyKTsKKworCXJldHVybiBfT3Blbk50TmFtZShCdWZmZXIsIFJlYWRPbmx5LCBIYW5kbGUsIE9wZW5lZFJlYWRvbmx5KTsKK30KKworCisvLworLy8gRmx1c2ggZGV2aWNlCisvLworCitzdGF0aWMKK19faW5saW5lCitOVFNUQVRVUworX0ZsdXNoRHJpdmUoCisJCUlOIEhBTkRMRSBIYW5kbGUKKwkJKQoreworCUlPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrOworCXJldHVybiBOdEZsdXNoQnVmZmVyc0ZpbGUoSGFuZGxlLCAmSW9TdGF0dXNCbG9jayk7Cit9CisKKworLy8KKy8vIGxvY2sgZHJpdmUKKy8vCisKK3N0YXRpYworX19pbmxpbmUKK05UU1RBVFVTCitfTG9ja0RyaXZlKAorCQlJTiBIQU5ETEUgSGFuZGxlCisJCSkKK3sKKwlJT19TVEFUVVNfQkxPQ0sgSW9TdGF0dXNCbG9jazsKKwlyZXR1cm4gTnRGc0NvbnRyb2xGaWxlKEhhbmRsZSwgMCwgMCwgMCwgJklvU3RhdHVzQmxvY2ssIEZTQ1RMX0xPQ0tfVk9MVU1FLCAwLCAwLCAwLCAwKTsKK30KKworCisvLworLy8gdW5sb2NrIGRyaXZlCisvLworCitzdGF0aWMKK19faW5saW5lCitOVFNUQVRVUworX1VubG9ja0RyaXZlKAorCUlOIEhBTkRMRSBIYW5kbGUKKwkpCit7CisJSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2s7CisJcmV0dXJuIE50RnNDb250cm9sRmlsZShIYW5kbGUsIDAsIDAsIDAsICZJb1N0YXR1c0Jsb2NrLCBGU0NUTF9VTkxPQ0tfVk9MVU1FLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljCitfX2lubGluZQorTlRTVEFUVVMKK19EaXNtb3VudERyaXZlKAorCUlOIEhBTkRMRSBIYW5kbGUKKwkpCit7CisJSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2s7CisJcmV0dXJuIE50RnNDb250cm9sRmlsZShIYW5kbGUsIDAsIDAsIDAsICZJb1N0YXR1c0Jsb2NrLCBGU0NUTF9ESVNNT1VOVF9WT0xVTUUsIDAsIDAsIDAsIDApOworfQorCisKKy8vCisvLyBpcyBtb3VudGVkCisvLworCitzdGF0aWMKK19faW5saW5lCitCT09MRUFOCitfSXNNb3VudGVkKAorCUlOIEhBTkRMRSBIYW5kbGUKKwkpCit7CisJSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2s7CisJTlRTVEFUVVMgU3RhdHVzOworCVN0YXR1cyA9IE50RnNDb250cm9sRmlsZShIYW5kbGUsIDAsIDAsIDAsICZJb1N0YXR1c0Jsb2NrLCBGU0NUTF9JU19WT0xVTUVfTU9VTlRFRCwgMCwgMCwgMCwgMCk7CisJcmV0dXJuIChCT09MRUFOKShTVEFUVVNfU1VDQ0VTUyA9PSBTdGF0dXMpOworfQorCisKK3N0YXRpYworX19pbmxpbmUKK05UU1RBVFVTCitfQ2xvc2VEaXNrKAorCQlJTiBIQU5ETEUgSGFuZGxlCisJCSkKK3sKKwlyZXR1cm4gTnRDbG9zZShIYW5kbGUpOworfQorCisKKworCisvLworLy8gTWFrZSBOVCBuYW1lIGZyb20gYW55IHJlY29nbml6ZWQgbmFtZQorLy8KKworc3RhdGljCitQQ1NUUgorX05vcm1hbGl6ZURldmljZU5hbWUoCisgICAgSU4gUENTVFIgRGV2aWNlLAorICAgIElOIFBTVFIgTm9ybWFsaXplZERldmljZU5hbWVCdWZmZXIKKyAgICkKK3sKKwlpbnQgUGFydGl0aW9uTnVtYmVyID0gLTE7CisJVUNIQVIgRGlza051bWJlcjsKKwlQU1RSIHA7CisKKworCS8vCisJLy8gRG8gbm90IHRyeSB0byBwYXJzZSBOVCBuYW1lCisJLy8KKworCWlmKCdcXCcgPT0gKkRldmljZSkKKwkJcmV0dXJuIERldmljZTsKKworCisKKwkvLworCS8vIFN0cmlwIGxlYWRpbmcgJy9kZXYvJyBpZiBhbnkKKwkvLworCisJaWYoKCcvJyA9PSAqKERldmljZSkpICYmCisJCSgnZCcgPT0gKihEZXZpY2UgKyAxKSkgJiYKKwkJKCdlJyA9PSAqKERldmljZSArIDIpKSAmJgorCQkoJ3YnID09ICooRGV2aWNlICsgMykpICYmCisJCSgnLycgPT0gKihEZXZpY2UgKyA0KSkpCisJeworCQlEZXZpY2UgKz0gNTsKKwl9CisKKwlpZignXDAnID09ICpEZXZpY2UpCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKworCS8vCisJLy8gZm9ybXM6IGhkYVtuXSwgZmRbbl0KKwkvLworCisJaWYoJ2QnICE9ICooRGV2aWNlICsgMSkpCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZignaCcgPT0gKkRldmljZSkKKwl7CisJCWlmKCgqKERldmljZSArIDIpIDwgJ2EnKSB8fCAoKihEZXZpY2UgKyAyKSA+ICgnYScgKyA5KSkgfHwKKwkJICAgKCgqKERldmljZSArIDMpICE9ICdcMCcpICYmCisJCQkoKCooRGV2aWNlICsgNCkgIT0gJ1wwJykgfHwKKwkJCSAoKCooRGV2aWNlICsgMykgPCAnMCcpIHx8ICgqKERldmljZSArIDMpID4gJzknKSkKKwkJCSkKKwkJICAgKQorCQkgICkKKwkJeworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlEaXNrTnVtYmVyID0gKFVDSEFSKSgqKERldmljZSArIDIpIC0gJ2EnKTsKKworCQlpZigqKERldmljZSArIDMpICE9ICdcMCcpCisJCXsKKwkJCVBhcnRpdGlvbk51bWJlciA9ICgqKERldmljZSArIDMpIC0gJzAnKTsKKwkJfQorCisJfQorCWVsc2UgaWYoJ2YnID09ICpEZXZpY2UpCisJeworCQkvLworCQkvLyAzLWQgbGV0dGVkIHNob3VsZCBiZSBhIGRpZ2l0LgorCQkvLworCisJCWlmKCgqKERldmljZSArIDMpICE9ICdcMCcpIHx8CisJCSAgICgqKERldmljZSArIDIpIDwgJzAnKSB8fCAoKihEZXZpY2UgKyAyKSA+ICc5JykpCisJCXsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJRGlza051bWJlciA9IChVQ0hBUikoKihEZXZpY2UgKyAyKSAtICcwJyk7CisKKwl9CisJZWxzZQorCXsKKwkJLy8KKwkJLy8gaW52YWxpZCBwcmVmaXgKKwkJLy8KKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKworCisJLy8KKwkvLyBQcmVmaXgKKwkvLworCisJc3RyY3B5KE5vcm1hbGl6ZWREZXZpY2VOYW1lQnVmZmVyLCAiXFxEZXZpY2VcXCIpOworCisJLy8KKwkvLyBNZWRpYSBuYW1lCisJLy8KKworCXN3aXRjaCgqRGV2aWNlKQorCXsKKworCWNhc2UgJ2YnOgorCQlzdHJjYXQoTm9ybWFsaXplZERldmljZU5hbWVCdWZmZXIsICJGbG9wcHkwIik7CisJCWJyZWFrOworCisJY2FzZSAnaCc6CisJCXN0cmNhdChOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlciwgIkhhcmRkaXNrMCIpOworCQlicmVhazsKKwl9CisKKworCXAgPSBOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlciArIHN0cmxlbihOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlcikgLSAxOworCSpwID0gKENIQVIpKCpwICsgRGlza051bWJlcik7CisKKworCS8vCisJLy8gUGFydGl0aW9uIG5yLgorCS8vCisKKwlpZihQYXJ0aXRpb25OdW1iZXIgPj0gMCkKKwl7CisJCXN0cmNhdChOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlciwgIlxcUGFydGl0aW9uMCIpOworCisJCXAgPSBOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlciArIHN0cmxlbihOb3JtYWxpemVkRGV2aWNlTmFtZUJ1ZmZlcikgLSAxOworCQkqcCA9IChDSEFSKSgqcCArIFBhcnRpdGlvbk51bWJlcik7CisJfQorCisKKwlyZXR1cm4gTm9ybWFsaXplZERldmljZU5hbWVCdWZmZXI7Cit9CisKKworCisKK3N0YXRpYworVk9JRAorX0dldERldmljZVNpemUoCisgICAgSU4gSEFORExFIGgsCisgICAgT1VUIHVuc2lnbmVkIF9faW50NjQgKkZzU2l6ZQorICAgKQoreworCVBBUlRJVElPTl9JTkZPUk1BVElPTiBwaTsKKwlESVNLX0dFT01FVFJZIGdpOworCU5UU1RBVFVTIFN0YXR1czsKKwlJT19TVEFUVVNfQkxPQ0sgSW9TdGF0dXNCbG9jazsKKworCS8vCisJLy8gWmVybyBpdAorCS8vCisKKwkqRnNTaXplID0gMDsKKworCS8vCisJLy8gQ2FsbCBkcml2ZXIKKwkvLworCisJUnRsWmVyb01lbW9yeSgmcGksIHNpemVvZihQQVJUSVRJT05fSU5GT1JNQVRJT04pKTsKKworCVN0YXR1cyA9IE50RGV2aWNlSW9Db250cm9sRmlsZSgKKwkJaCwgTlVMTCwgTlVMTCwgTlVMTCwgJklvU3RhdHVzQmxvY2ssIElPQ1RMX0RJU0tfR0VUX1BBUlRJVElPTl9JTkZPLAorCQkmcGksIHNpemVvZihQQVJUSVRJT05fSU5GT1JNQVRJT04pLAorCQkmcGksIHNpemVvZihQQVJUSVRJT05fSU5GT1JNQVRJT04pKTsKKworCisJaWYoTlRfU1VDQ0VTUyhTdGF0dXMpKQorCXsKKwkJKkZzU2l6ZSA9IHBpLlBhcnRpdGlvbkxlbmd0aC5RdWFkUGFydDsKKwl9CisJZWxzZSBpZihTVEFUVVNfSU5WQUxJRF9ERVZJQ0VfUkVRVUVTVCA9PSBTdGF0dXMpCisJeworCQkvLworCQkvLyBObyBwYXJ0aXRpb25zOiBnZXQgZGV2aWNlIGluZm8uCisJCS8vCisKKwkJUnRsWmVyb01lbW9yeSgmZ2ksIHNpemVvZihESVNLX0dFT01FVFJZKSk7CisKKwkJU3RhdHVzID0gTnREZXZpY2VJb0NvbnRyb2xGaWxlKAorCQkJCWgsIE5VTEwsIE5VTEwsIE5VTEwsICZJb1N0YXR1c0Jsb2NrLCBJT0NUTF9ESVNLX0dFVF9EUklWRV9HRU9NRVRSWSwKKwkJCQkmZ2ksIHNpemVvZihESVNLX0dFT01FVFJZKSwKKwkJCQkmZ2ksIHNpemVvZihESVNLX0dFT01FVFJZKSk7CisKKworCQlpZihOVF9TVUNDRVNTKFN0YXR1cykpCisJCXsKKwkJCSpGc1NpemUgPQorCQkJCWdpLkJ5dGVzUGVyU2VjdG9yICoKKwkJCQlnaS5TZWN0b3JzUGVyVHJhY2sgKgorCQkJCWdpLlRyYWNrc1BlckN5bGluZGVyICoKKwkJCQlnaS5DeWxpbmRlcnMuUXVhZFBhcnQ7CisJCX0KKworCX0KK30KKworCisKKy8vCisvLyBPcGVuIGRldmljZSBieSBuYW1lLgorLy8KKworc3RhdGljCitCT09MRUFOCitfRXh0Mk9wZW5EZXZpY2UoCisgICAgSU4gUENTVFIgTmFtZSwKKyAgICBJTiBCT09MRUFOIFJlYWRPbmx5LAorICAgIE9VVCBQSEFORExFIEhhbmRsZSwKKyAgICBPVVQgUEJPT0xFQU4gT3BlbmVkUmVhZG9ubHkgT1BUSU9OQUwsCisgICAgT1VUIHVuc2lnbmVkICpFcnJubyBPUFRJT05BTAorICAgKQoreworCUNIQVIgTm9ybWFsaXplZERldmljZU5hbWVbNTEyXTsKKwlOVFNUQVRVUyBTdGF0dXM7CisKKwlpZihOVUxMID09IE5hbWUpCisJeworCQkvLworCQkvLyBTZXQgbm90IGZvdW5kCisJCS8vCisKKwkJaWYoQVJHVU1FTlRfUFJFU0VOVChFcnJubykpCisJCQkqRXJybm8gPSBFTk9FTlQ7CisKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCisJaWYoKCgoKk5hbWUpIHwgMHgyMCkgPj0gJ2EnKSAmJiAoKCgqTmFtZSkgfCAweDIwKSA8PSAneicpICYmCisJCSgnOicgPT0gKihOYW1lICsgMSkpICYmICgnXDAnID09ICooTmFtZSArIDIpKSkKKwl7CisJCVN0YXR1cyA9IF9PcGVuRHJpdmVMZXR0ZXIoKk5hbWUsIFJlYWRPbmx5LCBIYW5kbGUsIE9wZW5lZFJlYWRvbmx5KTsKKwl9CisJZWxzZQorCXsKKwkJLy8KKwkJLy8gTWFrZSBuYW1lCisJCS8vCisKKwkJTmFtZSA9IF9Ob3JtYWxpemVEZXZpY2VOYW1lKE5hbWUsIE5vcm1hbGl6ZWREZXZpY2VOYW1lKTsKKworCQlpZihOVUxMID09IE5hbWUpCisJCXsKKwkJCS8vCisJCQkvLyBTZXQgbm90IGZvdW5kCisJCQkvLworCisJCQlpZihBUkdVTUVOVF9QUkVTRU5UKEVycm5vKSkKKwkJCQkqRXJybm8gPSBFTk9FTlQ7CisKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCisJCS8vCisJCS8vIFRyeSB0byBvcGVuIGl0CisJCS8vCisKKwkJU3RhdHVzID0gX09wZW5OdE5hbWUoTmFtZSwgUmVhZE9ubHksIEhhbmRsZSwgT3BlbmVkUmVhZG9ubHkpOworCX0KKworCisJaWYoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKwl7CisJCWlmKEFSR1VNRU5UX1BSRVNFTlQoRXJybm8pKQorCQkJKkVycm5vID0gX01hcE50U3RhdHVzKFN0YXR1cyk7CisKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCisKKy8vCisvLyBSYXcgYmxvY2sgaW8uIFNldHMgZG9zIGVycm5vCisvLworCitzdGF0aWMKK0JPT0xFQU4KK19CbG9ja0lvKAorICAgIElOIEhBTkRMRSBIYW5kbGUsCisgICAgSU4gTEFSR0VfSU5URUdFUiBPZmZzZXQsCisgICAgSU4gVUxPTkcgQnl0ZXMsCisgICAgSU4gT1VUIFBDSEFSIEJ1ZmZlciwKKyAgICBJTiBCT09MRUFOIFJlYWQsCisgICAgT1VUIHVuc2lnbmVkKiBFcnJubworICAgKQoreworCUlPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrOworCU5UU1RBVFVTIFN0YXR1czsKKworCS8vCisJLy8gU2hvdWxkIGJlIGFsaWduZWQKKwkvLworCisJQVNTRVJUKDAgPT0gKEJ5dGVzICUgNTEyKSk7CisJQVNTRVJUKDAgPT0gKE9mZnNldC5Mb3dQYXJ0ICUgNTEyKSk7CisKKworCS8vCisJLy8gcGVyZm9ybSBpbworCS8vCisKKwlpZihSZWFkKQorCXsKKwkJU3RhdHVzID0gTnRSZWFkRmlsZShIYW5kbGUsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkmSW9TdGF0dXNCbG9jaywgQnVmZmVyLCBCeXRlcywgJk9mZnNldCwgTlVMTCk7CisJfQorCWVsc2UKKwl7CisJCVN0YXR1cyA9IE50V3JpdGVGaWxlKEhhbmRsZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSZJb1N0YXR1c0Jsb2NrLCBCdWZmZXIsIEJ5dGVzLCAmT2Zmc2V0LCBOVUxMKTsKKwl9CisKKworCS8vCisJLy8gdHJhbnNsYXRlIGVycm9yCisJLy8KKworCWlmKE5UX1NVQ0NFU1MoU3RhdHVzKSkKKwl7CisJCSpFcnJubyA9IDA7CisJCXJldHVybiBUUlVFOworCX0KKworCSpFcnJubyA9IF9NYXBOdFN0YXR1cyhTdGF0dXMpOworCisJcmV0dXJuIEZBTFNFOworfQorCisKKworX19pbmxpbmUKK0JPT0xFQU4KK19SYXdXcml0ZSgKKyAgICBJTiBIQU5ETEUgSGFuZGxlLAorICAgIElOIExBUkdFX0lOVEVHRVIgT2Zmc2V0LAorICAgIElOIFVMT05HIEJ5dGVzLAorICAgIE9VVCBjb25zdCBDSEFSKiBCdWZmZXIsCisgICAgT1VUIHVuc2lnbmVkKiBFcnJubworICAgKQoreworCXJldHVybiBfQmxvY2tJbyhIYW5kbGUsIE9mZnNldCwgQnl0ZXMsIChQQ0hBUilCdWZmZXIsIEZBTFNFLCBFcnJubyk7Cit9CisKK19faW5saW5lCitCT09MRUFOCitfUmF3UmVhZCgKKyAgICBJTiBIQU5ETEUgSGFuZGxlLAorICAgIElOIExBUkdFX0lOVEVHRVIgT2Zmc2V0LAorICAgIElOIFVMT05HIEJ5dGVzLAorICAgIElOIFBDSEFSIEJ1ZmZlciwKKyAgICBPVVQgdW5zaWduZWQqIEVycm5vCisgICApCit7CisJcmV0dXJuIF9CbG9ja0lvKEhhbmRsZSwgT2Zmc2V0LCBCeXRlcywgQnVmZmVyLCBUUlVFLCBFcnJubyk7Cit9CisKKworCitfX2lubGluZQorQk9PTEVBTgorX1NldFBhcnRUeXBlKAorICAgIElOIEhBTkRMRSBIYW5kbGUsCisgICAgSU4gVUNIQVIgVHlwZQorICAgKQoreworCUlPX1NUQVRVU19CTE9DSyBJb1N0YXR1c0Jsb2NrOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUyA9PSBOdERldmljZUlvQ29udHJvbEZpbGUoCisJCQkJCQkJCQkJCQkgICBIYW5kbGUsIE5VTEwsIE5VTEwsIE5VTEwsICZJb1N0YXR1c0Jsb2NrLCBJT0NUTF9ESVNLX1NFVF9QQVJUSVRJT05fSU5GTywKKwkJCQkJCQkJCQkJCSAgICZUeXBlLCBzaXplb2YoVHlwZSksCisJCQkJCQkJCQkJCQkgICBOVUxMLCAwKTsKK30KKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVyZmFjZSBwYXJ0CisKKy8vCisvLyBJbnRlcmZhY2UgZnVuY3Rpb25zLgorLy8gSXNfbW91bnRlZCBpcyBzZXQgdG8gMSBpZiB0aGUgZGV2aWNlIGlzIG1vdW50ZWQsIDAgb3RoZXJ3aXNlCisvLworCitlcnJjb2RlX3QKK2V4dDJmc19jaGVja19pZl9tb3VudGVkKGNvbnN0IGNoYXIgKmZpbGUsIGludCAqbW91bnRfZmxhZ3MpCit7CisJSEFORExFIGg7CisJQk9PTEVBTiBSZWFkb25seTsKKworCSptb3VudF9mbGFncyA9IDA7CisKKwlpZighX0V4dDJPcGVuRGV2aWNlKGZpbGUsIFRSVUUsICZoLCAmUmVhZG9ubHksIE5VTEwpKQorCXsKKwkJcmV0dXJuIDA7CisJfQorCisKKwlfX3RyeXsKKwkJKm1vdW50X2ZsYWdzICY9IF9Jc01vdW50ZWQoaCkgPyBFWFQyX01GX01PVU5URUQgOiAwOworCX0KKwlfX2ZpbmFsbHl7CisJCV9DbG9zZURpc2soaCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworCisvLworLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHBhcnRpdGlvbgorLy8KKworc3RhdGljIF9faW50NjQgRnNTaXplID0gMDsKK3N0YXRpYyBjaGFyIGtub3duZGV2aWNlWzEwMjRdID0gIiI7CisKKworZXJyY29kZV90CitleHQyZnNfZ2V0X2RldmljZV9zaXplKGNvbnN0IGNoYXIgKmZpbGUsIGludCBibG9ja3NpemUsCisJCQkJIGJsa190ICpyZXRibG9ja3MpCit7CisJSEFORExFIGg7CisJQk9PTEVBTiBSZWFkb25seTsKKworCWlmKCgwID09IEZzU2l6ZSkgfHwgKDAgIT0gc3RyY21wKGtub3duZGV2aWNlLCBmaWxlKSkpCisJeworCisJCWlmKCFfRXh0Mk9wZW5EZXZpY2UoZmlsZSwgVFJVRSwgJmgsICZSZWFkb25seSwgTlVMTCkpCisJCXsKKwkJCXJldHVybiAwOworCQl9CisKKworCQlfX3RyeXsKKworCQkJLy8KKwkJCS8vIEdldCBzaXplCisJCQkvLworCisJCQlfR2V0RGV2aWNlU2l6ZShoLCAmRnNTaXplKTsKKwkJCXN0cmNweShrbm93bmRldmljZSwgZmlsZSk7CisJCX0KKwkJX19maW5hbGx5eworCQkJX0Nsb3NlRGlzayhoKTsKKwkJfQorCisJfQorCisJKnJldGJsb2NrcyA9IChibGtfdCkodW5zaWduZWQgX19pbnQ2NCkoRnNTaXplIC8gYmxvY2tzaXplKTsKKwlVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGZpbGUpOworCXJldHVybiAwOworfQorCisKKworCisKKworLy8KKy8vIFRhYmxlIGVsZW1lbnRzCisvLworCisKK3N0YXRpYworZXJyY29kZV90CitudF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpb19jaGFubmVsICAgICAgaW8gPSBOVUxMOworCVBOVF9QUklWQVRFX0RBVEEgTnREYXRhID0gTlVMTDsKKwllcnJjb2RlX3QgRXJybm8gPSAwOworCisJLy8KKwkvLyBDaGVjayBuYW1lCisJLy8KKworCWlmIChOVUxMID09IG5hbWUpCisJeworCQlyZXR1cm4gRVhUMl9FVF9CQURfREVWSUNFX05BTUU7CisJfQorCisJX190cnl7CisKKwkJLy8KKwkJLy8gQWxsb2NhdGUgY2hhbm5lbCBoYW5kbGUKKwkJLy8KKworCQlpbyA9IChpb19jaGFubmVsKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCkpOworCisJCWlmIChOVUxMID09IGlvKQorCQl7CisJCQlFcnJubyA9IEVOT01FTTsKKwkJCV9fbGVhdmU7CisJCX0KKworCQlSdGxaZXJvTWVtb3J5KGlvLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisJCWlvLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTDsKKworCQlOdERhdGEgPSAoUE5UX1BSSVZBVEVfREFUQSltYWxsb2Moc2l6ZW9mKE5UX1BSSVZBVEVfREFUQSkpOworCisJCWlmIChOVUxMID09IE50RGF0YSkKKwkJeworCQkJRXJybm8gPSBFTk9NRU07CisJCQlfX2xlYXZlOworCQl9CisKKworCQlpby0+bWFuYWdlciA9IG50X2lvX21hbmFnZXIoKTsKKwkJaW8tPm5hbWUgPSBtYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisJCWlmIChOVUxMID09IGlvLT5uYW1lKQorCQl7CisJCQlFcnJubyA9IEVOT01FTTsKKwkJCV9fbGVhdmU7CisJCX0KKworCQlzdHJjcHkoaW8tPm5hbWUsIG5hbWUpOworCQlpby0+cHJpdmF0ZV9kYXRhID0gTnREYXRhOworCQlpby0+YmxvY2tfc2l6ZSA9IDEwMjQ7CisJCWlvLT5yZWFkX2Vycm9yID0gMDsKKwkJaW8tPndyaXRlX2Vycm9yID0gMDsKKwkJaW8tPnJlZmNvdW50ID0gMTsKKworCQkvLworCQkvLyBJbml0aWFsaXplIGRhdGEKKwkJLy8KKworCQlSdGxaZXJvTWVtb3J5KE50RGF0YSwgc2l6ZW9mKE5UX1BSSVZBVEVfREFUQSkpOworCisJCU50RGF0YS0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX05UX0lPX0NIQU5ORUw7CisJCU50RGF0YS0+QnVmZmVyQmxvY2tOdW1iZXIgPSAweGZmZmZmZmZmOworCQlOdERhdGEtPkJ1ZmZlclNpemUgPSAxMDI0OworCQlOdERhdGEtPkJ1ZmZlciA9IG1hbGxvYyhOdERhdGEtPkJ1ZmZlclNpemUpOworCisJCWlmIChOVUxMID09IE50RGF0YS0+QnVmZmVyKQorCQl7CisJCQlFcnJubyA9IEVOT01FTTsKKwkJCV9fbGVhdmU7CisJCX0KKworCQkvLworCQkvLyBPcGVuIGl0CisJCS8vCisKKwkJaWYoIV9FeHQyT3BlbkRldmljZShuYW1lLCAoQk9PTEVBTikhQm9vbGVhbkZsYWdPbihmbGFncywgRVhUMl9GTEFHX1JXKSwgJk50RGF0YS0+SGFuZGxlLCAmTnREYXRhLT5PcGVuZWRSZWFkb25seSwgJkVycm5vKSkKKwkJeworCQkJX19sZWF2ZTsKKwkJfQorCisKKwkJLy8KKwkJLy8gZ2V0IHNpemUKKwkJLy8KKworCQlfR2V0RGV2aWNlU2l6ZShOdERhdGEtPkhhbmRsZSwgJkZzU2l6ZSk7CisJCXN0cmNweShrbm93bmRldmljZSwgbmFtZSk7CisKKworCQkvLworCQkvLyBMb2NrL2Rpc21vdW50CisJCS8vCisKKwkJaWYoIU5UX1NVQ0NFU1MoX0xvY2tEcml2ZShOdERhdGEtPkhhbmRsZSkpIC8qfHwgIU5UX1NVQ0NFU1MoX0Rpc21vdW50RHJpdmUoTnREYXRhLT5IYW5kbGUpKSovKQorCQl7CisJCQlOdERhdGEtPk9wZW5lZFJlYWRvbmx5ID0gVFJVRTsKKwkJfQorCisJCS8vCisJCS8vIERvbmUKKwkJLy8KKworCQkqY2hhbm5lbCA9IGlvOworCisKKwl9CisJX19maW5hbGx5eworCisJCWlmKDAgIT0gRXJybm8pCisJCXsKKwkJCS8vCisJCQkvLyBDbGVhbnVwCisJCQkvLworCisJCQlpZiAoTlVMTCAhPSBpbykKKwkJCXsKKwkJCQlmcmVlKGlvLT5uYW1lKTsKKwkJCQlmcmVlKGlvKTsKKwkJCX0KKworCQkJaWYgKE5VTEwgIT0gTnREYXRhKQorCQkJeworCQkJCWlmKE5VTEwgIT0gTnREYXRhLT5IYW5kbGUpCisJCQkJeworCQkJCQlfVW5sb2NrRHJpdmUoTnREYXRhLT5IYW5kbGUpOworCQkJCQlfQ2xvc2VEaXNrKE50RGF0YS0+SGFuZGxlKTsKKwkJCQl9CisKKwkJCQlmcmVlKE50RGF0YS0+QnVmZmVyKTsKKwkJCQlmcmVlKE50RGF0YSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gRXJybm87Cit9CisKKworLy8KKy8vIENsb3NlIGFwaQorLy8KKworc3RhdGljCitlcnJjb2RlX3QKK250X2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlQTlRfUFJJVkFURV9EQVRBIE50RGF0YSA9IE5VTEw7CisKKwlpZihOVUxMID09IGNoYW5uZWwpCisJeworCQlyZXR1cm4gMDsKKwl9CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJTnREYXRhID0gKFBOVF9QUklWQVRFX0RBVEEpIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKE50RGF0YSwgRVhUMl9FVF9NQUdJQ19OVF9JT19DSEFOTkVMKTsKKworCWlmICgtLWNoYW5uZWwtPnJlZmNvdW50ID4gMCkKKwl7CisJCXJldHVybiAwOworCX0KKworCWZyZWUoY2hhbm5lbC0+bmFtZSk7CisJZnJlZShjaGFubmVsKTsKKworCWlmIChOVUxMICE9IE50RGF0YSkKKwl7CisJCWlmKE5VTEwgIT0gTnREYXRhLT5IYW5kbGUpCisJCXsKKwkJCV9EaXNtb3VudERyaXZlKE50RGF0YS0+SGFuZGxlKTsKKwkJCV9VbmxvY2tEcml2ZShOdERhdGEtPkhhbmRsZSk7CisJCQlfQ2xvc2VEaXNrKE50RGF0YS0+SGFuZGxlKTsKKwkJfQorCisJCWZyZWUoTnREYXRhLT5CdWZmZXIpOworCQlmcmVlKE50RGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworCisvLworLy8gc2V0IGJsb2NrIHNpemUKKy8vCisKK3N0YXRpYworZXJyY29kZV90CitudF9zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworCVBOVF9QUklWQVRFX0RBVEEgTnREYXRhID0gTlVMTDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlOdERhdGEgPSAoUE5UX1BSSVZBVEVfREFUQSkgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoTnREYXRhLCBFWFQyX0VUX01BR0lDX05UX0lPX0NIQU5ORUwpOworCisJaWYgKGNoYW5uZWwtPmJsb2NrX3NpemUgIT0gYmxrc2l6ZSkKKwl7CisJCWNoYW5uZWwtPmJsb2NrX3NpemUgPSBibGtzaXplOworCisJCWZyZWUoTnREYXRhLT5CdWZmZXIpOworCQlOdERhdGEtPkJ1ZmZlckJsb2NrTnVtYmVyID0gMHhmZmZmZmZmZjsKKwkJTnREYXRhLT5CdWZmZXJTaXplID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJQVNTRVJUKDAgPT0gKE50RGF0YS0+QnVmZmVyU2l6ZSAlIDUxMikpOworCisJCU50RGF0YS0+QnVmZmVyID0gbWFsbG9jKE50RGF0YS0+QnVmZmVyU2l6ZSk7CisKKwkJaWYgKE5VTEwgPT0gTnREYXRhLT5CdWZmZXIpCisJCXsKKwkJCXJldHVybiBFTk9NRU07CisJCX0KKworCX0KKworCXJldHVybiAwOworfQorCisKKy8vCisvLyByZWFkIGJsb2NrCisvLworCitzdGF0aWMKK2VycmNvZGVfdAorbnRfcmVhZF9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmKQoreworCVBWT0lEIEJ1ZmZlclRvUmVhZDsKKwlVTE9ORyBTaXplVG9SZWFkOworCVVMT05HIFNpemU7CisJTEFSR0VfSU5URUdFUiBPZmZzZXQ7CisJUE5UX1BSSVZBVEVfREFUQSBOdERhdGEgPSBOVUxMOworCXVuc2lnbmVkIEVycm5vID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlOdERhdGEgPSAoUE5UX1BSSVZBVEVfREFUQSkgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoTnREYXRhLCBFWFQyX0VUX01BR0lDX05UX0lPX0NIQU5ORUwpOworCisJLy8KKwkvLyBJZiBpdCdzIGluIHRoZSBjYWNoZSwgdXNlIGl0IQorCS8vCisKKwlpZiAoKDEgPT0gY291bnQpICYmCisJCShibG9jayA9PSBOdERhdGEtPkJ1ZmZlckJsb2NrTnVtYmVyKSAmJgorCQkoTnREYXRhLT5CdWZmZXJCbG9ja051bWJlciAhPSAweGZmZmZmZmZmKSkKKwl7CisJCW1lbWNweShidWYsIE50RGF0YS0+QnVmZmVyLCBjaGFubmVsLT5ibG9ja19zaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJU2l6ZSA9IChjb3VudCA8IDApID8gKFVMT05HKSgtY291bnQpIDogKFVMT05HKShjb3VudCAqIGNoYW5uZWwtPmJsb2NrX3NpemUpOworCisJT2Zmc2V0LlF1YWRQYXJ0ID0gYmxvY2sgKiBjaGFubmVsLT5ibG9ja19zaXplOworCisJLy8KKwkvLyBJZiBub3QgZml0IHRvIHRoZSBibG9jaworCS8vCisKKwlpZihTaXplIDw9IE50RGF0YS0+QnVmZmVyU2l6ZSkKKwl7CisJCS8vCisJCS8vIFVwZGF0ZSB0aGUgY2FjaGUKKwkJLy8KKworCQlOdERhdGEtPkJ1ZmZlckJsb2NrTnVtYmVyID0gYmxvY2s7CisJCUJ1ZmZlclRvUmVhZCA9IE50RGF0YS0+QnVmZmVyOworCQlTaXplVG9SZWFkID0gTnREYXRhLT5CdWZmZXJTaXplOworCX0KKwllbHNlCisJeworCQlTaXplVG9SZWFkID0gU2l6ZTsKKwkJQnVmZmVyVG9SZWFkID0gYnVmOworCQlBU1NFUlQoMCA9PSAoU2l6ZVRvUmVhZCAlIGNoYW5uZWwtPmJsb2NrX3NpemUpKTsKKwl9CisKKwlpZighX1Jhd1JlYWQoTnREYXRhLT5IYW5kbGUsIE9mZnNldCwgU2l6ZVRvUmVhZCwgQnVmZmVyVG9SZWFkLCAmRXJybm8pKQorCXsKKworCQlpZiAoY2hhbm5lbC0+cmVhZF9lcnJvcikKKwkJeworCQkJcmV0dXJuIChjaGFubmVsLT5yZWFkX2Vycm9yKShjaGFubmVsLCBibG9jaywgY291bnQsIGJ1ZiwKKwkJCQkJICAgICAgIFNpemUsIDAsIEVycm5vKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHVybiBFcnJubzsKKwkJfQorCX0KKworCisJaWYoQnVmZmVyVG9SZWFkICE9IGJ1ZikKKwl7CisJCUFTU0VSVChTaXplIDw9IFNpemVUb1JlYWQpOworCQltZW1jcHkoYnVmLCBCdWZmZXJUb1JlYWQsIFNpemUpOworCX0KKworCXJldHVybiAwOworfQorCisKKy8vCisvLyB3cml0ZSBibG9jaworLy8KKworc3RhdGljCitlcnJjb2RlX3QKK250X3dyaXRlX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJVUxPTkcgU2l6ZVRvV3JpdGU7CisJTEFSR0VfSU5URUdFUiBPZmZzZXQ7CisJUE5UX1BSSVZBVEVfREFUQSBOdERhdGEgPSBOVUxMOworCXVuc2lnbmVkIEVycm5vID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlOdERhdGEgPSAoUE5UX1BSSVZBVEVfREFUQSkgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoTnREYXRhLCBFWFQyX0VUX01BR0lDX05UX0lPX0NIQU5ORUwpOworCisJaWYoTnREYXRhLT5PcGVuZWRSZWFkb25seSkKKwl7CisJCXJldHVybiBFQUNDRVM7CisJfQorCisJaWYgKGNvdW50ID09IDEpCisJeworCQlTaXplVG9Xcml0ZSA9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisJfQorCWVsc2UKKwl7CisJCU50RGF0YS0+QnVmZmVyQmxvY2tOdW1iZXIgPSAweGZmZmZmZmZmOworCisJCWlmIChjb3VudCA8IDApCisJCXsKKwkJCVNpemVUb1dyaXRlID0gKFVMT05HKSgtY291bnQpOworCQl9CisJCWVsc2UKKwkJeworCQkJU2l6ZVRvV3JpdGUgPSAoVUxPTkcpKGNvdW50ICogY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCX0KKwl9CisKKworCUFTU0VSVCgwID09IChTaXplVG9Xcml0ZSAlIDUxMikpOworCU9mZnNldC5RdWFkUGFydCA9IGJsb2NrICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKworCWlmKCFfUmF3V3JpdGUoTnREYXRhLT5IYW5kbGUsIE9mZnNldCwgU2l6ZVRvV3JpdGUsIGJ1ZiwgJkVycm5vKSkKKwl7CisJCWlmIChjaGFubmVsLT53cml0ZV9lcnJvcikKKwkJeworCQkJcmV0dXJuIChjaGFubmVsLT53cml0ZV9lcnJvcikoY2hhbm5lbCwgYmxvY2ssIGNvdW50LCBidWYsCisJCQkJCQlTaXplVG9Xcml0ZSwgMCwgRXJybm8pOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0dXJuIEVycm5vOworCQl9CisJfQorCisKKwkvLworCS8vIFN0YXNoIGEgY29weS4KKwkvLworCisJaWYoU2l6ZVRvV3JpdGUgPj0gTnREYXRhLT5CdWZmZXJTaXplKQorCXsKKwkJTnREYXRhLT5CdWZmZXJCbG9ja051bWJlciA9IGJsb2NrOworCQltZW1jcHkoTnREYXRhLT5CdWZmZXIsIGJ1ZiwgTnREYXRhLT5CdWZmZXJTaXplKTsKKwl9CisKKwlOdERhdGEtPldyaXR0ZW4gPSBUUlVFOworCisJcmV0dXJuIDA7CisKK30KKworCisKKy8vCisvLyBGbHVzaCBkYXRhIGJ1ZmZlcnMgdG8gZGlzay4gIFNpbmNlIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYQorLy8gd3JpdGUtdGhyb3VnaCBjYWNoZSwgdGhpcyBpcyBhIG5vLW9wLgorLy8KKworc3RhdGljCitlcnJjb2RlX3QKK250X2ZsdXNoKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlQTlRfUFJJVkFURV9EQVRBIE50RGF0YSA9IE5VTEw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJTnREYXRhID0gKFBOVF9QUklWQVRFX0RBVEEpIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKE50RGF0YSwgRVhUMl9FVF9NQUdJQ19OVF9JT19DSEFOTkVMKTsKKworCWlmKE50RGF0YS0+T3BlbmVkUmVhZG9ubHkpCisJeworCQlyZXR1cm4gMDsgLy8gRUFDQ0VTUzsKKwl9CisKKworCS8vCisJLy8gRmx1c2ggZmlsZSBidWZmZXJzLgorCS8vCisKKwlfRmx1c2hEcml2ZShOdERhdGEtPkhhbmRsZSk7CisKKworCS8vCisJLy8gVGVzdCBhbmQgY29ycmVjdCBwYXJ0aXRpb24gdHlwZS4KKwkvLworCisJaWYoTnREYXRhLT5Xcml0dGVuKQorCXsKKwkJX1NldFBhcnRUeXBlKE50RGF0YS0+SGFuZGxlLCAweDgzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9vcGVuZnMuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL29wZW5mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjM2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9vcGVuZnMuYwpAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIG9wZW5mcy5jIC0tLSBvcGVuIGFuIGV4dDIgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKworCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJpbWFnZS5oIgorCitibGs2NF90IGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYzIoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgZ3JvdXBfYmxvY2ssCisJCQkJICAgICBkZ3JwX3QgaSkKK3sKKwlpbnQJYmc7CisJaW50CWhhc19zdXBlciA9IDA7CisJYmxrNjRfdAlyZXRfYmxrOworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgfHwKKwkgICAgKGkgPCBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykpCisJCXJldHVybiAoZ3JvdXBfYmxvY2sgKyBpICsgMSk7CisKKwliZyA9IEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKSAqIGk7CisJaWYgKGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGJnKSkKKwkJaGFzX3N1cGVyID0gMTsKKwlyZXRfYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgYmcpICsgaGFzX3N1cGVyOworCS8qCisJICogSWYgZ3JvdXBfYmxvY2sgaXMgbm90IHRoZSBub3JtYWwgdmFsdWUsIHdlJ3JlIHRyeWluZyB0byB1c2UKKwkgKiB0aGUgYmFja3VwIGdyb3VwIGRlc2NyaXB0b3JzIGFuZCBzdXBlcmJsb2NrIC0tLSBzbyB1c2UgdGhlCisJICogYWx0ZXJuYXRlIGxvY2F0aW9uIG9mIHRoZSBzZWNvbmQgYmxvY2sgZ3JvdXAgaW4gdGhlCisJICogbWV0YWJsb2NrIGdyb3VwLiAgSWRlYWxseSB3ZSBzaG91bGQgYmUgdGVzdGluZyBlYWNoIGJnCisJICogZGVzY3JpcHRvciBibG9jayBpbmRpdmlkdWFsbHkgZm9yIGNvcnJlY3RuZXNzLCBidXQgd2UgZG9uJ3QKKwkgKiBoYXZlIHRoZSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZSB0byBkbyB0aGF0LgorCSAqLworCWlmIChncm91cF9ibG9jayAhPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayAmJgorCSAgICAoKHJldF9ibGsgKyBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cCkgPAorCSAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkKKwkJcmV0X2JsayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlyZXR1cm4gcmV0X2JsazsKK30KKworYmxrX3QgZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jKGV4dDJfZmlsc3lzIGZzLCBibGtfdCBncm91cF9ibG9jaywgZGdycF90IGkpCit7CisJcmV0dXJuIGV4dDJmc19kZXNjcmlwdG9yX2Jsb2NrX2xvYzIoZnMsIGdyb3VwX2Jsb2NrLCBpKTsKK30KKworZXJyY29kZV90IGV4dDJmc19vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW50IHN1cGVyYmxvY2ssCisJCSAgICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplLCBpb19tYW5hZ2VyIG1hbmFnZXIsCisJCSAgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpCit7CisJcmV0dXJuIGV4dDJmc19vcGVuMihuYW1lLCAwLCBmbGFncywgc3VwZXJibG9jaywgYmxvY2tfc2l6ZSwKKwkJCSAgICBtYW5hZ2VyLCByZXRfZnMpOworfQorCisvKgorICogIE5vdGU6IGlmIHN1cGVyYmxvY2sgaXMgbm9uLXplcm8sIGJsb2NrLXNpemUgbXVzdCBhbHNvIGJlIG5vbi16ZXJvLgorICogCVN1cGVyYmxvY2sgYW5kIGJsb2NrX3NpemUgY2FuIGJlIHplcm8gdG8gdXNlIHRoZSBkZWZhdWx0IHNpemUuCisgKgorICogVmFsaWQgZmxhZ3MgZm9yIGV4dDJmc19vcGVuKCkKKyAqCisgKiAJRVhUMl9GTEFHX1JXCS0gT3BlbiB0aGUgZmlsZXN5c3RlbSBmb3IgcmVhZC93cml0ZS4KKyAqIAlFWFQyX0ZMQUdfRk9SQ0UgLSBPcGVuIHRoZSBmaWxlc3lzdGVtIGV2ZW4gaWYgc29tZSBvZiB0aGUKKyAqCQkJCWZlYXR1cmVzIGFyZW4ndCBzdXBwb3J0ZWQuCisgKglFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0sgLSBPcGVuIGFuIGV4dDMgam91cm5hbCBkZXZpY2UKKyAqCUVYVDJfRkxBR19TS0lQX01NUCAtIE9wZW4gd2l0aG91dCBtdWx0aS1tb3VudCBwcm90ZWN0aW9uIGNoZWNrLgorICoJRVhUMl9GTEFHXzY0QklUUyAtIEFsbG93IDY0LWJpdCBiaXRmaWVsZHMgKG5lZWRlZCBmb3IgbGFyZ2UKKyAqCQkJCWZpbGVzeXN0ZW1zKQorICovCitlcnJjb2RlX3QgZXh0MmZzX29wZW4yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmlvX29wdGlvbnMsCisJCSAgICAgICBpbnQgZmxhZ3MsIGludCBzdXBlcmJsb2NrLAorCQkgICAgICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsIGlvX21hbmFnZXIgbWFuYWdlciwKKwkJICAgICAgIGV4dDJfZmlsc3lzICpyZXRfZnMpCit7CisJZXh0Ml9maWxzeXMJZnM7CisJZXJyY29kZV90CXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCWksIGZpcnN0X21ldGFfYmc7CisJX191MzIJCWZlYXR1cmVzOworCXVuc2lnbmVkIGludAlibG9ja3NfcGVyX2dyb3VwLCBpb19mbGFnczsKKwlibGs2NF90CQlncm91cF9ibG9jaywgYmxrOworCWNoYXIJCSpkZXN0LCAqY3A7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJdW5zaWduZWQgaW50CWdyb3Vwc19wZXJfYmxvY2s7CisJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZ2RwOworCWludAkJajsKKyNlbmRpZgorCisJRVhUMl9DSEVDS19NQUdJQyhtYW5hZ2VyLCBFWFQyX0VUX01BR0lDX0lPX01BTkFHRVIpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMpLCAmZnMpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwltZW1zZXQoZnMsIDAsIHNpemVvZihzdHJ1Y3Qgc3RydWN0X2V4dDJfZmlsc3lzKSk7CisJZnMtPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTOworCWZzLT5mbGFncyA9IGZsYWdzOworCS8qIGRvbid0IG92ZXJ3cml0ZSBzYiBiYWNrdXBzIHVubGVzcyBmbGFnIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCAqLworCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfTUFTVEVSX1NCX09OTFk7CisJZnMtPnVtYXNrID0gMDIyOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihuYW1lKSsxLCAmZnMtPmRldmljZV9uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJc3RyY3B5KGZzLT5kZXZpY2VfbmFtZSwgbmFtZSk7CisJY3AgPSBzdHJjaHIoZnMtPmRldmljZV9uYW1lLCAnPycpOworCWlmICghaW9fb3B0aW9ucyAmJiBjcCkgeworCQkqY3ArKyA9IDA7CisJCWlvX29wdGlvbnMgPSBjcDsKKwl9CisKKwlpb19mbGFncyA9IDA7CisJaWYgKGZsYWdzICYgRVhUMl9GTEFHX1JXKQorCQlpb19mbGFncyB8PSBJT19GTEFHX1JXOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19FWENMVVNJVkUpCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRVhDTFVTSVZFOworCWlmIChmbGFncyAmIEVYVDJfRkxBR19ESVJFQ1RfSU8pCisJCWlvX2ZsYWdzIHw9IElPX0ZMQUdfRElSRUNUX0lPOworCXJldHZhbCA9IG1hbmFnZXItPm9wZW4oZnMtPmRldmljZV9uYW1lLCBpb19mbGFncywgJmZzLT5pbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCWlmIChpb19vcHRpb25zICYmCisJICAgIChyZXR2YWwgPSBpb19jaGFubmVsX3NldF9vcHRpb25zKGZzLT5pbywgaW9fb3B0aW9ucykpKQorCQlnb3RvIGNsZWFudXA7CisJZnMtPmltYWdlX2lvID0gZnMtPmlvOworCWZzLT5pby0+YXBwX2RhdGEgPSBmczsKKwlyZXR2YWwgPSBpb19jaGFubmVsX2FsbG9jX2J1Zihmcy0+aW8sIC1TVVBFUkJMT0NLX1NJWkUsICZmcy0+c3VwZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfaW1hZ2VfaGRyKSwKKwkJCQkJJmZzLT5pbWFnZV9oZWFkZXIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgMCwKKwkJCQkJICAgICAtKGludClzaXplb2Yoc3RydWN0IGV4dDJfaW1hZ2VfaGRyKSwKKwkJCQkJICAgICBmcy0+aW1hZ2VfaGVhZGVyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJaWYgKGZzLT5pbWFnZV9oZWFkZXItPm1hZ2ljX251bWJlciAhPSBFWFQyX0VUX01BR0lDX0UySU1BR0UpCisJCQlyZXR1cm4gRVhUMl9FVF9NQUdJQ19FMklNQUdFOworCQlzdXBlcmJsb2NrID0gMTsKKwkJYmxvY2tfc2l6ZSA9IGZzLT5pbWFnZV9oZWFkZXItPmZzX2Jsb2Nrc2l6ZTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIHNwZWNpZmllcyBhIHNwZWNpZmljIGJsb2NrICMgZm9yIHRoZQorCSAqIHN1cGVyYmxvY2ssIHRoZW4gaGUvc2hlIG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBibG9jayBzaXplIQorCSAqIE90aGVyd2lzZSwgcmVhZCB0aGUgbWFzdGVyIHN1cGVyYmxvY2sgbG9jYXRlZCBhdCBvZmZzZXQKKwkgKiBTVVBFUkJMT0NLX09GRlNFVCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydGl0aW9uLgorCSAqCisJICogTm90ZTogd2Ugb25seSBzYXZlIGEgYmFja3VwIGNvcHkgb2YgdGhlIHN1cGVyYmxvY2sgaWYgd2UKKwkgKiBhcmUgcmVhZGluZyB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgbG9jYXRpb24uCisJICovCisJaWYgKHN1cGVyYmxvY2spIHsKKwkJaWYgKCFibG9ja19zaXplKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIGJsb2NrX3NpemUpOworCQlncm91cF9ibG9jayA9IHN1cGVyYmxvY2s7CisJCWZzLT5vcmlnX3N1cGVyID0gMDsKKwl9IGVsc2UgeworCQlpb19jaGFubmVsX3NldF9ibGtzaXplKGZzLT5pbywgU1VQRVJCTE9DS19PRkZTRVQpOworCQlzdXBlcmJsb2NrID0gMTsKKwkJZ3JvdXBfYmxvY2sgPSAwOworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShTVVBFUkJMT0NLX1NJWkUsICZmcy0+b3JpZ19zdXBlcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGsoZnMtPmlvLCBzdXBlcmJsb2NrLCAtU1VQRVJCTE9DS19TSVpFLAorCQkJCSAgICAgZnMtPnN1cGVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJaWYgKGZzLT5vcmlnX3N1cGVyKQorCQltZW1jcHkoZnMtPm9yaWdfc3VwZXIsIGZzLT5zdXBlciwgU1VQRVJCTE9DS19TSVpFKTsKKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCWZzLT5mbGFncyB8PSBFWFQyX0ZMQUdfU1dBUF9CWVRFUzsKKwlleHQyZnNfc3dhcF9zdXBlcihmcy0+c3VwZXIpOworI2Vsc2UKKwlpZiAoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1NXQVBfQllURVMpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9VTklNUExFTUVOVEVEOworCQlnb3RvIGNsZWFudXA7CisJfQorI2VuZGlmCisKKwlpZiAoZnMtPnN1cGVyLT5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9CQURfTUFHSUM7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKGZzLT5zdXBlci0+c19yZXZfbGV2ZWwgPiBFWFQyX0xJQl9DVVJSRU5UX1JFVikgeworCQlyZXR2YWwgPSBFWFQyX0VUX1JFVl9UT09fSElHSDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogQ2hlY2sgZm9yIGZlYXR1cmUgc2V0IGluY29tcGF0aWJpbGl0eQorCSAqLworCWlmICghKGZsYWdzICYgRVhUMl9GTEFHX0ZPUkNFKSkgeworCQlmZWF0dXJlcyA9IGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0OworI2lmZGVmIEVYVDJfTElCX1NPRlRTVVBQX0lOQ09NUEFUCisJCWlmIChmbGFncyAmIEVYVDJfRkxBR19TT0ZUU1VQUF9GRUFUVVJFUykKKwkJCWZlYXR1cmVzICY9IH5FWFQyX0xJQl9TT0ZUU1VQUF9JTkNPTVBBVDsKKyNlbmRpZgorCQlpZiAoZmVhdHVyZXMgJiB+RVhUMl9MSUJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFOworCQkJZ290byBjbGVhbnVwOworCQl9CisKKwkJZmVhdHVyZXMgPSBmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQ7CisjaWZkZWYgRVhUMl9MSUJfU09GVFNVUFBfUk9fQ09NUEFUCisJCWlmIChmbGFncyAmIEVYVDJfRkxBR19TT0ZUU1VQUF9GRUFUVVJFUykKKwkJCWZlYXR1cmVzICY9IH5FWFQyX0xJQl9TT0ZUU1VQUF9ST19DT01QQVQ7CisjZW5kaWYKKwkJaWYgKChmbGFncyAmIEVYVDJfRkxBR19SVykgJiYKKwkJICAgIChmZWF0dXJlcyAmIH5FWFQyX0xJQl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQKSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9ST19VTlNVUFBfRkVBVFVSRTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCWlmICghKGZsYWdzICYgRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LKSAmJgorCQkgICAgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpKSB7CisJCQlyZXR2YWwgPSBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJaWYgKChmcy0+c3VwZXItPnNfbG9nX2Jsb2NrX3NpemUgKyBFWFQyX01JTl9CTE9DS19MT0dfU0laRSkgPgorCSAgICBFWFQyX01BWF9CTE9DS19MT0dfU0laRSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogYmlnYWxsb2MgcmVxdWlyZXMgY2x1c3Rlci1hd2FyZSBiaXRmaWVsZCBvcGVyYXRpb25zLCB3aGljaCBhdCB0aGUKKwkgKiBtb21lbnQgbWVhbnMgd2UgbmVlZCBFWFQyX0ZMQUdfNjRCSVRTLgorCSAqLworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpICYmCisJICAgICEoZmxhZ3MgJiBFWFQyX0ZMQUdfNjRCSVRTKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0NBTlRfVVNFX0xFR0FDWV9CSVRNQVBTOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCFFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpICYmCisJICAgIChmcy0+c3VwZXItPnNfbG9nX2Jsb2NrX3NpemUgIT0gZnMtPnN1cGVyLT5zX2xvZ19jbHVzdGVyX3NpemUpKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfQ09SUlVQVF9TVVBFUkJMT0NLOworCQlnb3RvIGNsZWFudXA7CisJfQorCWZzLT5mcmFnc2l6ZSA9IGZzLT5ibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUoZnMtPnN1cGVyKTsKKwlpZiAoRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikgPCBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJZnMtPmNsdXN0ZXJfcmF0aW9fYml0cyA9IGZzLT5zdXBlci0+c19sb2dfY2x1c3Rlcl9zaXplIC0KKwkJZnMtPnN1cGVyLT5zX2xvZ19ibG9ja19zaXplOworCWlmIChFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAhPQorCSAgICBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChmcy0+c3VwZXIpIDw8IGZzLT5jbHVzdGVyX3JhdGlvX2JpdHMpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgPSAoKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICoKKwkJCQkgICAgICAgRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikgKworCQkJCSAgICAgICBFWFQyX0JMT0NLX1NJWkUoZnMtPnN1cGVyKSAtIDEpIC8KKwkJCQkgICAgICBFWFQyX0JMT0NLX1NJWkUoZnMtPnN1cGVyKSk7CisJaWYgKGJsb2NrX3NpemUpIHsKKwkJaWYgKGJsb2NrX3NpemUgIT0gZnMtPmJsb2Nrc2l6ZSkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9VTkVYUEVDVEVEX0JMT0NLX1NJWkU7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisJLyoKKwkgKiBTZXQgdGhlIGJsb2Nrc2l6ZSB0byB0aGUgZmlsZXN5c3RlbSdzIGJsb2Nrc2l6ZS4KKwkgKi8KKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGZzLT5pbywgZnMtPmJsb2Nrc2l6ZSk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UsIGRvbid0IHRyeSB0byByZWFkCisJICogdGhlIGdyb3VwIGRlc2NyaXB0b3JzLCBiZWNhdXNlIHRoZXkncmUgbm90IHRoZXJlLgorCSAqLworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQlmcy0+Z3JvdXBfZGVzY19jb3VudCA9IDA7CisJCSpyZXRfZnMgPSBmczsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpID09IDApIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9DT1JSVVBUX1NVUEVSQkxPQ0s7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMKKwkgKi8KKwlibG9ja3NfcGVyX2dyb3VwID0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcik7CisJaWYgKGJsb2Nrc19wZXJfZ3JvdXAgPT0gMCB8fAorCSAgICBibG9ja3NfcGVyX2dyb3VwID4gRVhUMl9NQVhfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpIHx8CisJICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwID4gRVhUMl9NQVhfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpIHx8CisgICAgICAgICAgIEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKSA9PSAwIHx8CisgICAgICAgICAgIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKwkJZ290byBjbGVhbnVwOworCX0KKwlmcy0+Z3JvdXBfZGVzY19jb3VudCA9IGV4dDJmc19kaXY2NF9jZWlsKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJCQkgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCQkJCQkgYmxvY2tzX3Blcl9ncm91cCk7CisJaWYgKGZzLT5ncm91cF9kZXNjX2NvdW50ICogRVhUMl9JTk9ERVNfUEVSX0dST1VQKGZzLT5zdXBlcikgIT0KKwkgICAgZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkgeworCQlyZXR2YWwgPSBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKwkJZ290byBjbGVhbnVwOworCX0KKwlmcy0+ZGVzY19ibG9ja3MgPSBleHQyZnNfZGl2X2NlaWwoZnMtPmdyb3VwX2Rlc2NfY291bnQsCisJCQkJCSAgRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5kZXNjX2Jsb2NrcywgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkmZnMtPmdyb3VwX2Rlc2MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoIWdyb3VwX2Jsb2NrKQorCQlncm91cF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmIChncm91cF9ibG9jayA9PSAwICYmIGZzLT5ibG9ja3NpemUgPT0gMTAyNCkKKwkJZ3JvdXBfYmxvY2sgPSAxOyAvKiBEZWFsIHdpdGggMTAyNCBibG9ja3NpemUgJiYgYmlnYWxsb2MgKi8KKwlkZXN0ID0gKGNoYXIgKikgZnMtPmdyb3VwX2Rlc2M7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJZ3JvdXBzX3Blcl9ibG9jayA9IEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKyNlbmRpZgorCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlmaXJzdF9tZXRhX2JnID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CisJZWxzZQorCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworCWlmIChmaXJzdF9tZXRhX2JnKSB7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGsoZnMtPmlvLCBncm91cF9ibG9jaysxLAorCQkJCQkgICAgIGZpcnN0X21ldGFfYmcsIGRlc3QpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQlnZHAgPSAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqKSBkZXN0OworCQlmb3IgKGo9MDsgaiA8IGdyb3Vwc19wZXJfYmxvY2sqZmlyc3RfbWV0YV9iZzsgaisrKSB7CisJCQlnZHAgPSBleHQyZnNfZ3JvdXBfZGVzYyhmcywgZnMtPmdyb3VwX2Rlc2MsIGopOworCQkJZXh0MmZzX3N3YXBfZ3JvdXBfZGVzYzIoZnMsIGdkcCk7CisJCX0KKyNlbmRpZgorCQlkZXN0ICs9IGZzLT5ibG9ja3NpemUqZmlyc3RfbWV0YV9iZzsKKwl9CisJZm9yIChpPWZpcnN0X21ldGFfYmcgOyBpIDwgZnMtPmRlc2NfYmxvY2tzOyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2Rlc2NyaXB0b3JfYmxvY2tfbG9jMihmcywgZ3JvdXBfYmxvY2ssIGkpOworCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmlvLCBibGssIDEsIGRlc3QpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQlmb3IgKGo9MDsgaiA8IGdyb3Vwc19wZXJfYmxvY2s7IGorKykgeworCQkJZ2RwID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLAorCQkJCQkJaSAqIGdyb3Vwc19wZXJfYmxvY2sgKyBqKTsKKwkJCWV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGZzLCBnZHApOworCQl9CisjZW5kaWYKKwkJZGVzdCArPSBmcy0+YmxvY2tzaXplOworCX0KKworCWZzLT5zdHJpZGUgPSBmcy0+c3VwZXItPnNfcmFpZF9zdHJpZGU7CisKKwkvKgorCSAqIElmIHJlY292ZXJ5IGlzIGZyb20gYmFja3VwIHN1cGVyYmxvY2ssIENsZWFyIF9VTklOSU5UIGZsYWdzICYKKwkgKiByZXNldCBiZ19pdGFibGVfdW51c2VkIHRvIHplcm8KKwkgKi8KKwlpZiAoc3VwZXJibG9jayA+IDEgJiYgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgeworCQlkZ3JwX3QgZ3JvdXA7CisKKwkJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGdyb3VwKyspIHsKKwkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwkJCWV4dDJmc19iZ19mbGFnc19jbGVhcihmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgZ3JvdXAsIDApOworCQkJLyogVGhlIGNoZWNrc3VtIHdpbGwgYmUgcmVzZXQgbGF0ZXIsIGJ1dCBmaXggaXQgaGVyZQorCQkJICogYW55d2F5IHRvIGF2b2lkIHByaW50aW5nIGEgbG90IG9mIHNwdXJpb3VzIGVycm9ycy4gKi8KKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJCX0KKwkJaWYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisKKwlpZiAoKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCkgJiYKKwkgICAgIShmbGFncyAmIEVYVDJfRkxBR19TS0lQX01NUCkgJiYKKwkgICAgKGZsYWdzICYgKEVYVDJfRkxBR19SVyB8IEVYVDJfRkxBR19FWENMVVNJVkUpKSkgeworCQlyZXR2YWwgPSBleHQyZnNfbW1wX3N0YXJ0KGZzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19TS0lQX01NUDsgLyoganVzdCBkbyBjbGVhbnVwICovCisJCQlleHQyZnNfbW1wX3N0b3AoZnMpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfTk9GUkVFX09OX0VSUk9SOworCSpyZXRfZnMgPSBmczsKKworCXJldHVybiAwOworY2xlYW51cDoKKwlpZiAoZmxhZ3MgJiBFWFQyX0ZMQUdfTk9GUkVFX09OX0VSUk9SKQorCQkqcmV0X2ZzID0gZnM7CisJZWxzZQorCQlleHQyZnNfZnJlZShmcyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFNldC9nZXQgdGhlIGZpbGVzeXN0ZW0gZGF0YSBJL08gY2hhbm5lbC4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdmFsaWQgaWYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUgaXMgdHJ1ZS4KKyAqLworZXJyY29kZV90IGV4dDJmc19nZXRfZGF0YV9pbyhleHQyX2ZpbHN5cyBmcywgaW9fY2hhbm5lbCAqb2xkX2lvKQoreworCWlmICgoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpID09IDApCisJCXJldHVybiBFWFQyX0VUX05PVF9JTUFHRV9GSUxFOworCWlmIChvbGRfaW8pIHsKKwkJKm9sZF9pbyA9IChmcy0+aW1hZ2VfaW8gPT0gZnMtPmlvKSA/IDAgOiBmcy0+aW87CisJfQorCXJldHVybiAwOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3NldF9kYXRhX2lvKGV4dDJfZmlsc3lzIGZzLCBpb19jaGFubmVsIG5ld19pbykKK3sKKwlpZiAoKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9OT1RfSU1BR0VfRklMRTsKKwlmcy0+aW8gPSBuZXdfaW8gPyBuZXdfaW8gOiBmcy0+aW1hZ2VfaW87CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmV3cml0ZV90b19pbyhleHQyX2ZpbHN5cyBmcywgaW9fY2hhbm5lbCBuZXdfaW8pCit7CisJZXJyY29kZV90IGVycjsKKworCWlmICgoZnMtPmZsYWdzICYgRVhUMl9GTEFHX0lNQUdFX0ZJTEUpID09IDApCisJCXJldHVybiBFWFQyX0VUX05PVF9JTUFHRV9GSUxFOworCWVyciA9IGlvX2NoYW5uZWxfc2V0X2Jsa3NpemUobmV3X2lvLCBmcy0+YmxvY2tzaXplKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICgobmV3X2lvID09IGZzLT5pbWFnZV9pbykgfHwgKG5ld19pbyA9PSBmcy0+aW8pKQorCQlyZXR1cm4gMDsKKwlpZiAoKGZzLT5pbWFnZV9pbyAhPSBmcy0+aW8pICYmCisJICAgIGZzLT5pbWFnZV9pbykKKwkJaW9fY2hhbm5lbF9jbG9zZShmcy0+aW1hZ2VfaW8pOworCWlmIChmcy0+aW8pCisJCWlvX2NoYW5uZWxfY2xvc2UoZnMtPmlvKTsKKwlmcy0+aW8gPSBmcy0+aW1hZ2VfaW8gPSBuZXdfaW87CisJZnMtPmZsYWdzIHw9IEVYVDJfRkxBR19ESVJUWSB8IEVYVDJfRkxBR19SVyB8CisJCUVYVDJfRkxBR19CQl9ESVJUWSB8IEVYVDJfRkxBR19JQl9ESVJUWTsKKwlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19JTUFHRV9GSUxFOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvcHJvZ3Jlc3MuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Byb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2YTNkNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Byb2dyZXNzLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIHByb2dyZXNzLmMgLSBOdW1lcmljIHByb2dyZXNzIG1ldGVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorICogCTIwMDMsIDIwMDQsIDIwMDUgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlICJleHQyZnNQLmgiCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKK3N0YXRpYyBjaGFyIHNwYWNlc1s4MF0sIGJhY2tzcGFjZXNbODBdOworc3RhdGljIHRpbWVfdCBsYXN0X3VwZGF0ZTsKKworc3RhdGljIGludCBpbnRfbG9nMTAodW5zaWduZWQgaW50IGFyZykKK3sKKwlpbnQJbDsKKworCWZvciAobD0wOyBhcmcgOyBsKyspCisJCWFyZyA9IGFyZyAvIDEwOworCXJldHVybiBsOworfQorCit2b2lkIGV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZXh0Ml9maWxzeXMgZnMsCisJCQkJICBzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0ICogcHJvZ3Jlc3MsCisJCQkJICBjb25zdCBjaGFyICpsYWJlbCwgX191NjQgbWF4KQoreworCS8qCisJICogVGhlIFBSSU5UX1BST0dSRVNTIGZsYWcgdHVybnMgb24gb3Igb2ZmIEFMTAorCSAqIHByb2dyZXNzLXJlbGF0ZWQgbWVzc2FnZXMsIHdoZXJlYXMgdGhlIFNLSVBfUFJPR1JFU1MKKwkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcmludHMgdGhlIHN0YXJ0IGFuZCBlbmQgbWVzc2FnZXMgYnV0CisJICogbm90IHRoZSBudW1lcmljIGNvdW50ZG93biBpbiB0aGUgbWlkZGxlLgorCSAqLworCWlmICghKGZzLT5mbGFncyAmIEVYVDJfRkxBR19QUklOVF9QUk9HUkVTUykpCisJCXJldHVybjsKKworCW1lbXNldChzcGFjZXMsICcgJywgc2l6ZW9mKHNwYWNlcyktMSk7CisJc3BhY2VzW3NpemVvZihzcGFjZXMpLTFdID0gMDsKKwltZW1zZXQoYmFja3NwYWNlcywgJ1xiJywgc2l6ZW9mKGJhY2tzcGFjZXMpLTEpOworCWJhY2tzcGFjZXNbc2l6ZW9mKGJhY2tzcGFjZXMpLTFdID0gMDsKKworCW1lbXNldChwcm9ncmVzcywgMCwgc2l6ZW9mKCpwcm9ncmVzcykpOworCWlmIChnZXRlbnYoIkUyRlNQUk9HU19TS0lQX1BST0dSRVNTIikpCisJCXByb2dyZXNzLT5za2lwX3Byb2dyZXNzKys7CisKKworCS8qCisJICogRmlndXJlIG91dCBob3cgbWFueSBkaWdpdHMgd2UgbmVlZAorCSAqLworCXByb2dyZXNzLT5tYXggPSBtYXg7CisJcHJvZ3Jlc3MtPmxvZ19tYXggPSBpbnRfbG9nMTAobWF4KTsKKworCWlmIChsYWJlbCkgeworCQlmcHV0cyhsYWJlbCwgc3Rkb3V0KTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCWxhc3RfdXBkYXRlID0gMDsKK30KKwordm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgIHN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgKiBwcm9ncmVzcywKKwkJCQkgICAgX191NjQgdmFsKQoreworCXRpbWVfdCBub3c7CisKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUFJJTlRfUFJPR1JFU1MpKQorCQlyZXR1cm47CisJaWYgKHByb2dyZXNzLT5za2lwX3Byb2dyZXNzKQorCQlyZXR1cm47CisJbm93ID0gdGltZSgwKTsKKwlpZiAobm93ID09IGxhc3RfdXBkYXRlKQorCQlyZXR1cm47CisJbGFzdF91cGRhdGUgPSBub3c7CisKKwlwcmludGYoIiUqbGx1LyUqbGx1IiwgcHJvZ3Jlc3MtPmxvZ19tYXgsIHZhbCwKKwkgICAgICAgcHJvZ3Jlc3MtPmxvZ19tYXgsIHByb2dyZXNzLT5tYXgpOworCWZwcmludGYoc3Rkb3V0LCAiJS4qcyIsICgyKnByb2dyZXNzLT5sb2dfbWF4KSsxLCBiYWNrc3BhY2VzKTsKK30KKwordm9pZCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShleHQyX2ZpbHN5cyBmcywKKwkJCQkgICBzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0ICogcHJvZ3Jlc3MsCisJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUFJJTlRfUFJPR1JFU1MpKQorCQlyZXR1cm47CisJZnByaW50ZihzdGRvdXQsICIlLipzIiwgKDIqcHJvZ3Jlc3MtPmxvZ19tYXgpKzEsIHNwYWNlcyk7CisJZnByaW50ZihzdGRvdXQsICIlLipzIiwgKDIqcHJvZ3Jlc3MtPmxvZ19tYXgpKzEsIGJhY2tzcGFjZXMpOworCWlmIChtZXNzYWdlKQorCQlmcHV0cyhtZXNzYWdlLCBzdGRvdXQpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvcHVuY2guYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3B1bmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmY2RlYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3B1bmNoLmMKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisgKiBwdW5jaC5jIC0tLSBkZWFsbG9jYXRlIGJsb2NrcyBhbGxvY2F0ZWQgdG8gYW4gaW5vZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyN1bmRlZiBQVU5DSF9ERUJVRworCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBibG9jayBpcyBhbGwgemVyb3MKKyAqLworc3RhdGljIGludCBjaGVja196ZXJvX2Jsb2NrKGNoYXIgKmJ1ZiwgaW50IGJsb2Nrc2l6ZSkKK3sKKwljaGFyCSpjcCA9IGJ1ZjsKKwlpbnQJbGVmdCA9IGJsb2Nrc2l6ZTsKKworCXdoaWxlIChsZWZ0ID4gMCkgeworCQlpZiAoKmNwKyspCisJCQlyZXR1cm4gMDsKKwkJbGVmdC0tOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoaXMgY2xldmVyIHJlY3Vyc2l2ZSBmdW5jdGlvbiBoYW5kbGVzIGlfYmxvY2tzW10gYXMgd2VsbCBhcworICogaW5kaXJlY3QsIGRvdWJsZSBpbmRpcmVjdCwgYW5kIHRyaXBsZSBpbmRpcmVjdCBibG9ja3MuICBJdCBpdGVyYXRlcworICogb3ZlciB0aGUgZW50cmllcyBpbiB0aGUgaV9ibG9ja3MgYXJyYXkgb3IgaW5kaXJlY3QgYmxvY2tzLCBhbmQgZm9yCisgKiBlYWNoIG9uZSwgd2lsbCByZWN1cnNpdmVseSBoYW5kbGUgYW55IGluZGlyZWN0IGJsb2NrcyBhbmQgdGhlbgorICogZnJlZXMgYW5kIGRlYWxsb2NhdGVzIHRoZSBibG9ja3MuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgaW5kX3B1bmNoKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCQkgICBjaGFyICpibG9ja19idWYsIGJsa190ICpwLCBpbnQgbGV2ZWwsCisJCQkgICBibGtfdCBzdGFydCwgYmxrX3QgY291bnQsIGludCBtYXgpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGtfdAkJYjsKKwlpbnQJCWk7CisJYmxrNjRfdAkJb2Zmc2V0LCBpbmNyOworCWludAkJZnJlZWQgPSAwOworCisjaWZkZWYgUFVOQ0hfREVCVUcKKwlwcmludGYoIkVudGVyaW5nIGluZF9wdW5jaCwgbGV2ZWwgJWQsIHN0YXJ0ICV1LCBjb3VudCAldSwgIgorCSAgICAgICAibWF4ICVkXG4iLCBsZXZlbCwgc3RhcnQsIGNvdW50LCBtYXgpOworI2VuZGlmCisJaW5jciA9IDFVTEwgPDwgKChFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpLTIpKmxldmVsKTsKKwlmb3IgKGk9MCwgb2Zmc2V0PTA7IGkgPCBtYXg7IGkrKywgcCsrLCBvZmZzZXQgKz0gaW5jcikgeworCQlpZiAob2Zmc2V0ID49IHN0YXJ0ICsgY291bnQpCisJCQlicmVhazsKKwkJaWYgKCpwID09IDAgfHwgKG9mZnNldCtpbmNyKSA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQliID0gKnA7CisJCWlmIChsZXZlbCA+IDApIHsKKwkJCWJsa190IHN0YXJ0MjsKKyNpZmRlZiBQVU5DSF9ERUJVRworCQkJcHJpbnRmKCJSZWFkaW5nIGluZGlyZWN0IGJsb2NrICV1XG4iLCBiKTsKKyNlbmRpZgorCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5kX2Jsb2NrKGZzLCBiLCBibG9ja19idWYpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJc3RhcnQyID0gKHN0YXJ0ID4gb2Zmc2V0KSA/IHN0YXJ0IC0gb2Zmc2V0IDogMDsKKwkJCXJldHZhbCA9IGluZF9wdW5jaChmcywgaW5vZGUsIGJsb2NrX2J1ZiArIGZzLT5ibG9ja3NpemUsCisJCQkJCSAgIChibGtfdCAqKSBibG9ja19idWYsIGxldmVsIC0gMSwKKwkJCQkJICAgc3RhcnQyLCBjb3VudCAtIG9mZnNldCwKKwkJCQkJICAgZnMtPmJsb2Nrc2l6ZSA+PiAyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbmRfYmxvY2soZnMsIGIsIGJsb2NrX2J1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlpZiAoIWNoZWNrX3plcm9fYmxvY2soYmxvY2tfYnVmLCBmcy0+YmxvY2tzaXplKSkKKwkJCQljb250aW51ZTsKKwkJfQorI2lmZGVmIFBVTkNIX0RFQlVHCisJCXByaW50ZigiRnJlZWluZyBibG9jayAldSAob2Zmc2V0ICVsbHUpXG4iLCBiLCBvZmZzZXQpOworI2VuZGlmCisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0cyhmcywgYiwgLTEpOworCQkqcCA9IDA7CisJCWZyZWVkKys7CisJfQorI2lmZGVmIFBVTkNIX0RFQlVHCisJcHJpbnRmKCJGcmVlZCAlZCBibG9ja3NcbiIsIGZyZWVkKTsKKyNlbmRpZgorCXJldHVybiBleHQyZnNfaWJsa19zdWJfYmxvY2tzKGZzLCBpbm9kZSwgZnJlZWQpOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19wdW5jaF9pbmQoZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgIGNoYXIgKmJsb2NrX2J1ZiwgYmxrX3Qgc3RhcnQsIGJsa190IGNvdW50KQoreworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqYnVmID0gMDsKKwlpbnQJCQlsZXZlbDsKKwlpbnQJCQludW0gPSBFWFQyX05ESVJfQkxPQ0tTOworCWJsa190CQkJKmJwID0gaW5vZGUtPmlfYmxvY2s7CisJYmxrX3QJCQlhZGRyX3Blcl9ibG9jazsKKwlibGs2NF90CQkJbWF4ID0gRVhUMl9ORElSX0JMT0NLUzsKKworCWlmICghYmxvY2tfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoMywgZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQlibG9ja19idWYgPSBidWY7CisJfQorCisJYWRkcl9wZXJfYmxvY2sgPSAoYmxrX3QpIGZzLT5ibG9ja3NpemUgPj4gMjsKKworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IDQ7IGxldmVsKyssIG1heCAqPSAoYmxrNjRfdClhZGRyX3Blcl9ibG9jaykgeworI2lmZGVmIFBVTkNIX0RFQlVHCisJCXByaW50ZigiTWFpbiBsb29wIGxldmVsICVkLCBzdGFydCAldSBjb3VudCAldSAiCisJCSAgICAgICAibWF4ICVsbHUgbnVtICVkXG4iLCBsZXZlbCwgc3RhcnQsIGNvdW50LCBtYXgsIG51bSk7CisjZW5kaWYKKwkJaWYgKHN0YXJ0IDwgbWF4KSB7CisJCQlyZXR2YWwgPSBpbmRfcHVuY2goZnMsIGlub2RlLCBibG9ja19idWYsIGJwLCBsZXZlbCwKKwkJCQkJICAgc3RhcnQsIGNvdW50LCBudW0pOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJCWlmIChjb3VudCA+IG1heCkKKwkJCQljb3VudCAtPSBtYXggLSBzdGFydDsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCXN0YXJ0ID0gMDsKKwkJfSBlbHNlCisJCQlzdGFydCAtPSBtYXg7CisJCWJwICs9IG51bTsKKwkJaWYgKGxldmVsID09IDApIHsKKwkJCW51bSA9IDE7CisJCQltYXggPSAxOworCQl9CisJfQorCXJldHZhbCA9IDA7CitlcnJvdXQ6CisJaWYgKGJ1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBQVU5DSF9ERUJVRworCisjZGVmaW5lIGRiZ19wcmludGYoZiwgYS4uLikgIHByaW50ZihmLCAjIyBhKQorCitzdGF0aWMgdm9pZCBkYmdfcHJpbnRfZXh0ZW50KGNoYXIgKmRlc2MsIHN0cnVjdCBleHQyZnNfZXh0ZW50ICpleHRlbnQpCit7CisJaWYgKGRlc2MpCisJCXByaW50ZigiJXM6ICIsIGRlc2MpOworCXByaW50ZigiZXh0ZW50OiBsYmxrICVsbHUtLSVsbHUsIGxlbiAldSwgcGJsayAlbGx1LCBmbGFnczogIiwKKwkgICAgICAgZXh0ZW50LT5lX2xibGssIGV4dGVudC0+ZV9sYmxrICsgZXh0ZW50LT5lX2xlbiAtIDEsCisJICAgICAgIGV4dGVudC0+ZV9sZW4sIGV4dGVudC0+ZV9wYmxrKTsKKwlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfTEVBRikKKwkJZnB1dHMoIkxFQUYgIiwgc3Rkb3V0KTsKKwlpZiAoZXh0ZW50LT5lX2ZsYWdzICYgRVhUMl9FWFRFTlRfRkxBR1NfVU5JTklUKQorCQlmcHV0cygiVU5JTklUICIsIHN0ZG91dCk7CisJaWYgKGV4dGVudC0+ZV9mbGFncyAmIEVYVDJfRVhURU5UX0ZMQUdTX1NFQ09ORF9WSVNJVCkKKwkJZnB1dHMoIjJORF9WSVNJVCAiLCBzdGRvdXQpOworCWlmICghZXh0ZW50LT5lX2ZsYWdzKQorCQlmcHV0cygiKG5vbmUpIiwgc3Rkb3V0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworCit9CisjZWxzZQorI2RlZmluZSBkYmdfcHJpbnRfZXh0ZW50KGRlc2MsIGV4KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19wcmludGYoZiwgYS4uLikJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBGcmVlIGEgcmFuZ2Ugb2YgYmxvY2tzLCByZXNwZWN0aW5nIGNsdXN0ZXIgYm91bmRhcmllcyAqLworc3RhdGljIGVycmNvZGVfdCBwdW5jaF9leHRlbnRfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgICAgIGJsazY0X3QgbGZyZWVfc3RhcnQsIGJsazY0X3QgZnJlZV9zdGFydCwKKwkJCQkgICAgIF9fdTMyIGZyZWVfY291bnQsIGludCAqZnJlZWQpCit7CisJYmxrNjRfdAkJcGJsazsKKwlpbnQJCWZyZWVkX25vdyA9IDA7CisJX191MzIJCWNsdXN0ZXJfZnJlZWQ7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwkvKiBObyBiaWdhbGxvYz8gIEp1c3QgZnJlZSBlYWNoIGJsb2NrLiAqLworCWlmIChFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykgPT0gMSkgeworCQkqZnJlZWQgKz0gZnJlZV9jb3VudDsKKwkJd2hpbGUgKGZyZWVfY291bnQtLSA+IDApCisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBmcmVlX3N0YXJ0KyssIC0xKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKgorCSAqIFRyeSB0byBmcmVlIHVwIHRvIHRoZSBuZXh0IGNsdXN0ZXIgYm91bmRhcnkuICBXZSBhc3N1bWUgdGhhdCBhbGwKKwkgKiBibG9ja3MgaW4gYSBsb2dpY2FsIGNsdXN0ZXIgbWFwIHRvIGJsb2NrcyBmcm9tIHRoZSBzYW1lIHBoeXNpY2FsCisJICogY2x1c3RlciwgYW5kIHRoYXQgdGhlIG9mZnNldHMgd2l0aGluIHRoZSBbcGxdY2x1c3RlcnMgbWF0Y2guCisJICovCisJaWYgKGZyZWVfc3RhcnQgJiBFWFQyRlNfQ0xVU1RFUl9NQVNLKGZzKSkgeworCQlyZXR2YWwgPSBleHQyZnNfbWFwX2NsdXN0ZXJfYmxvY2soZnMsIGlubywgaW5vZGUsCisJCQkJCQkgIGxmcmVlX3N0YXJ0LCAmcGJsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJaWYgKCFwYmxrKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBmcmVlX3N0YXJ0LCAtMSk7CisJCQlmcmVlZF9ub3crKzsKKwkJfQorCQljbHVzdGVyX2ZyZWVkID0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpIC0KKwkJCShmcmVlX3N0YXJ0ICYgRVhUMkZTX0NMVVNURVJfTUFTSyhmcykpOworCQlpZiAoY2x1c3Rlcl9mcmVlZCA+IGZyZWVfY291bnQpCisJCQljbHVzdGVyX2ZyZWVkID0gZnJlZV9jb3VudDsKKwkJZnJlZV9jb3VudCAtPSBjbHVzdGVyX2ZyZWVkOworCQlmcmVlX3N0YXJ0ICs9IGNsdXN0ZXJfZnJlZWQ7CisJCWxmcmVlX3N0YXJ0ICs9IGNsdXN0ZXJfZnJlZWQ7CisJfQorCisJLyogRnJlZSB3aG9sZSBjbHVzdGVycyBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHJhbmdlLiAqLworCXdoaWxlIChmcmVlX2NvdW50ID4gMCAmJiBmcmVlX2NvdW50ID49IEVYVDJGU19DTFVTVEVSX1JBVElPKGZzKSkgeworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBmcmVlX3N0YXJ0LCAtMSk7CisJCWZyZWVkX25vdysrOworCQljbHVzdGVyX2ZyZWVkID0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpOworCQlmcmVlX2NvdW50IC09IGNsdXN0ZXJfZnJlZWQ7CisJCWZyZWVfc3RhcnQgKz0gY2x1c3Rlcl9mcmVlZDsKKwkJbGZyZWVfc3RhcnQgKz0gY2x1c3Rlcl9mcmVlZDsKKwl9CisKKwkvKiBUcnkgdG8gZnJlZSB0aGUgbGFzdCBjbHVzdGVyLiAqLworCWlmIChmcmVlX2NvdW50ID4gMCkgeworCQlyZXR2YWwgPSBleHQyZnNfbWFwX2NsdXN0ZXJfYmxvY2soZnMsIGlubywgaW5vZGUsCisJCQkJCQkgIGxmcmVlX3N0YXJ0LCAmcGJsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJaWYgKCFwYmxrKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBmcmVlX3N0YXJ0LCAtMSk7CisJCQlmcmVlZF9ub3crKzsKKwkJfQorCX0KKworZXJyb3V0OgorCSpmcmVlZCArPSBmcmVlZF9ub3c7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCBleHQyZnNfcHVuY2hfZXh0ZW50KGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKwkJCQkgICAgIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwKKwkJCQkgICAgIGJsazY0X3Qgc3RhcnQsIGJsazY0X3QgZW5kKQoreworCWV4dDJfZXh0ZW50X2hhbmRsZV90CWhhbmRsZSA9IDA7CisJc3RydWN0IGV4dDJmc19leHRlbnQJZXh0ZW50OworCWVycmNvZGVfdAkJcmV0dmFsOworCWJsazY0X3QJCQlmcmVlX3N0YXJ0LCBuZXh0LCBsZnJlZV9zdGFydDsKKwlfX3UzMgkJCWZyZWVfY291bnQsIG5ld2xlbjsKKwlpbnQJCQlmcmVlZCA9IDA7CisJaW50CQkJb3A7CisKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X29wZW4yKGZzLCBpbm8sIGlub2RlLCAmaGFuZGxlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCS8qCisJICogRmluZCB0aGUgZXh0ZW50IGNsb3Nlc3QgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwdW5jaCByYW5nZS4gIFdlIGRvbid0CisJICogY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIF9nb3RvKCkgc2V0cyB0aGUgY3VycmVudCBub2RlIHRvIHRoZQorCSAqIG5leHQtbG93ZXN0IGV4dGVudCBpZiAnc3RhcnQnIGlzIGluIGEgaG9sZSwgYW5kIGRvZXNuJ3Qgc2V0IGEKKwkgKiBjdXJyZW50IG5vZGUgaWYgdGhlcmUgd2FzIGEgcmVhbCBlcnJvciByZWFkaW5nIHRoZSBleHRlbnQgdHJlZS4KKwkgKiBJbiB0aGF0IGNhc2UsIF9nZXQoKSB3aWxsIGVycm9yIG91dC4KKwkgKgorCSAqIE5vdGU6IElmIF9nZXQoKSByZXR1cm5zICdubyBjdXJyZW50IG5vZGUnLCB0aGF0IHNpbXBseSBtZWFucyB0aGF0CisJICogdGhlcmUgYXJlbid0IGFueSBibG9ja3MgbWFwcGVkIHBhc3QgdGhpcyBwb2ludCBpbiB0aGUgZmlsZSwgc28gd2UncmUKKwkgKiBkb25lLgorCSAqLworCWV4dDJmc19leHRlbnRfZ290byhoYW5kbGUsIHN0YXJ0KTsKKwlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsICZleHRlbnQpOworCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpIHsKKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnJvdXQ7CisJfSBlbHNlIGlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXdoaWxlICgxKSB7CisJCW9wID0gRVhUMl9FWFRFTlRfTkVYVF9MRUFGOworCQlkYmdfcHJpbnRfZXh0ZW50KCJtYWluIGxvb3AiLCAmZXh0ZW50KTsKKwkJbmV4dCA9IGV4dGVudC5lX2xibGsgKyBleHRlbnQuZV9sZW47CisJCWRiZ19wcmludGYoInN0YXJ0ICVsbHUsIGVuZCAlbGx1LCBuZXh0ICVsbHVcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGFydCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGVuZCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG5leHQpOworCQlpZiAoc3RhcnQgPD0gZXh0ZW50LmVfbGJsaykgeworCQkJaWYgKGVuZCA8IGV4dGVudC5lX2xibGspCisJCQkJZ290byBuZXh0X2V4dGVudDsKKwkJCWRiZ19wcmludGYoIkNhc2UgIyVkXG4iLCAxKTsKKwkJCS8qIFN0YXJ0IG9mIGRlbGV0ZWQgcmVnaW9uIGJlZm9yZSBleHRlbnQ7IAorCQkJICAgYWRqdXN0IGJlZ2lubmluZyBvZiBleHRlbnQgKi8KKwkJCWZyZWVfc3RhcnQgPSBleHRlbnQuZV9wYmxrOworCQkJbGZyZWVfc3RhcnQgPSBleHRlbnQuZV9sYmxrOworCQkJaWYgKG5leHQgPiBlbmQpCisJCQkJZnJlZV9jb3VudCA9IGVuZCAtIGV4dGVudC5lX2xibGsgKyAxOworCQkJZWxzZQorCQkJCWZyZWVfY291bnQgPSBleHRlbnQuZV9sZW47CisJCQlleHRlbnQuZV9sZW4gLT0gZnJlZV9jb3VudDsKKwkJCWV4dGVudC5lX2xibGsgKz0gZnJlZV9jb3VudDsKKwkJCWV4dGVudC5lX3BibGsgKz0gZnJlZV9jb3VudDsKKwkJfSBlbHNlIGlmIChlbmQgPj0gbmV4dC0xKSB7CisJCQlpZiAoc3RhcnQgPj0gbmV4dCkKKwkJCQlicmVhazsKKwkJCS8qIEVuZCBvZiBkZWxldGVkIHJlZ2lvbiBhZnRlciBleHRlbnQ7CisJCQkgICBhZGp1c3QgZW5kIG9mIGV4dGVudCAqLworCQkJZGJnX3ByaW50ZigiQ2FzZSAjJWRcbiIsIDIpOworCQkJbmV3bGVuID0gc3RhcnQgLSBleHRlbnQuZV9sYmxrOworCQkJZnJlZV9zdGFydCA9IGV4dGVudC5lX3BibGsgKyBuZXdsZW47CisJCQlsZnJlZV9zdGFydCA9IGV4dGVudC5lX2xibGsgKyBuZXdsZW47CisJCQlmcmVlX2NvdW50ID0gZXh0ZW50LmVfbGVuIC0gbmV3bGVuOworCQkJZXh0ZW50LmVfbGVuID0gbmV3bGVuOworCQl9IGVsc2UgeworCQkJc3RydWN0IGV4dDJmc19leHRlbnQJbmV3ZXg7CisKKwkJCWRiZ19wcmludGYoIkNhc2UgIyVkXG4iLCAzKTsKKwkJCS8qIFRoZSBoYXJkIGNhc2U7IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGV4dGVudCAqLworCQkJbmV3ZXguZV9wYmxrID0gZXh0ZW50LmVfcGJsayArCisJCQkJKGVuZCArIDEgLSBleHRlbnQuZV9sYmxrKTsKKwkJCW5ld2V4LmVfbGJsayA9IGVuZCArIDE7CisJCQluZXdleC5lX2xlbiA9IG5leHQgLSBlbmQgLSAxOworCQkJbmV3ZXguZV9mbGFncyA9IGV4dGVudC5lX2ZsYWdzOworCisJCQlleHRlbnQuZV9sZW4gPSBzdGFydCAtIGV4dGVudC5lX2xibGs7CisJCQlmcmVlX3N0YXJ0ID0gZXh0ZW50LmVfcGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWxmcmVlX3N0YXJ0ID0gZXh0ZW50LmVfbGJsayArIGV4dGVudC5lX2xlbjsKKwkJCWZyZWVfY291bnQgPSBlbmQgLSBzdGFydCArIDE7CisKKwkJCWRiZ19wcmludF9leHRlbnQoImluc2VydGluZyIsICZuZXdleCk7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2luc2VydChoYW5kbGUsCisJCQkJCUVYVDJfRVhURU5UX0lOU0VSVF9BRlRFUiwgJm5ld2V4KTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQkvKiBOb3cgcG9pbnRpbmcgYXQgaW5zZXJ0ZWQgZXh0ZW50OyBzbyBnbyBiYWNrICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9QUkVWX0xFQUYsCisJCQkJCQkgICAmbmV3ZXgpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfSAKKwkJaWYgKGV4dGVudC5lX2xlbikgeworCQkJZGJnX3ByaW50X2V4dGVudCgicmVwbGFjaW5nIiwgJmV4dGVudCk7CisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X3JlcGxhY2UoaGFuZGxlLCAwLCAmZXh0ZW50KTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBleHQyZnNfZXh0ZW50CW5ld2V4OworCQkJYmxrNjRfdAkJCW9sZF9sYmxrLCBuZXh0X2xibGs7CisJCQlkYmdfcHJpbnRmKCJkZWxldGluZyBjdXJyZW50IGV4dGVudCVzXG4iLCAiIik7CisKKwkJCS8qCisJCQkgKiBTYXZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV4dCBsZWFmLCB0aGVuIHNsaXAKKwkJCSAqIGJhY2sgdG8gdGhlIGN1cnJlbnQgZXh0ZW50LgorCQkJICovCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIEVYVDJfRVhURU5UX0NVUlJFTlQsCisJCQkJCQkgICAmbmV3ZXgpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJCW9sZF9sYmxrID0gbmV3ZXguZV9sYmxrOworCisJCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsCisJCQkJCQkgICBFWFQyX0VYVEVOVF9ORVhUX0xFQUYsCisJCQkJCQkgICAmbmV3ZXgpOworCQkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUKQorCQkJCW5leHRfbGJsayA9IG9sZF9sYmxrOworCQkJZWxzZSBpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQkJZWxzZQorCQkJCW5leHRfbGJsayA9IG5ld2V4LmVfbGJsazsKKworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9nb3RvKGhhbmRsZSwgb2xkX2xibGspOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKworCQkJLyogTm93IGRlbGV0ZSB0aGUgZXh0ZW50LiAqLworCQkJcmV0dmFsID0gZXh0MmZzX2V4dGVudF9kZWxldGUoaGFuZGxlLCAwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisKKwkJCS8qIEp1bXAgZm9yd2FyZCB0byB0aGUgbmV4dCBleHRlbnQuICovCisJCQlleHQyZnNfZXh0ZW50X2dvdG8oaGFuZGxlLCBuZXh0X2xibGspOworCQkJb3AgPSBFWFQyX0VYVEVOVF9DVVJSRU5UOworCQl9CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJZGJnX3ByaW50ZigiRnJlZSBzdGFydCAlbGx1LCBmcmVlIGNvdW50ID0gJXVcbiIsCisJCSAgICAgICBmcmVlX3N0YXJ0LCBmcmVlX2NvdW50KTsKKwkJcmV0dmFsID0gcHVuY2hfZXh0ZW50X2Jsb2NrcyhmcywgaW5vLCBpbm9kZSwgbGZyZWVfc3RhcnQsCisJCQkJCSAgICAgZnJlZV9zdGFydCwgZnJlZV9jb3VudCwgJmZyZWVkKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCW5leHRfZXh0ZW50OgorCQlyZXR2YWwgPSBleHQyZnNfZXh0ZW50X2dldChoYW5kbGUsIG9wLAorCQkJCQkgICAmZXh0ZW50KTsKKwkJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0VYVEVOVF9OT19ORVhUIHx8CisJCSAgICByZXR2YWwgPT0gRVhUMl9FVF9OT19DVVJSRU5UX05PREUpCisJCQlicmVhazsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwlkYmdfcHJpbnRmKCJGcmVlZCAlZCBibG9ja3NcbiIsIGZyZWVkKTsKKwlyZXR2YWwgPSBleHQyZnNfaWJsa19zdWJfYmxvY2tzKGZzLCBpbm9kZSwgZnJlZWQpOworZXJyb3V0OgorCWV4dDJmc19leHRlbnRfZnJlZShoYW5kbGUpOworCXJldHVybiByZXR2YWw7Cit9CisJCisvKgorICogRGVhbGxvY2F0ZSBhbGwgbG9naWNhbCBibG9ja3Mgc3RhcnRpbmcgYXQgc3RhcnQgdG8gZW5kLCBpbmNsdXNpdmUuCisgKiBJZiBlbmQgaXMgfjAsIHRoZW4gdGhpcyBpcyBlZmZlY3RpdmVseSB0cnVuY2F0ZS4KKyAqLworZXJyY29kZV90IGV4dDJmc19wdW5jaChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgICBjaGFyICpibG9ja19idWYsIGJsazY0X3Qgc3RhcnQsCisJCSAgICAgICBibGs2NF90IGVuZCkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZV9idWY7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBFSU5WQUw7CisKKwkvKiBSZWFkIGlub2RlIHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIWlub2RlKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICZpbm9kZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJaW5vZGUgPSAmaW5vZGVfYnVmOworCX0KKwlpZiAoaW5vZGUtPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpCisJCXJldHZhbCA9IGV4dDJmc19wdW5jaF9leHRlbnQoZnMsIGlubywgaW5vZGUsIHN0YXJ0LCBlbmQpOworCWVsc2UgeworCQlibGtfdAljb3VudDsKKworCQlpZiAoc3RhcnQgPiB+MFUpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGVuZCA+IH4wVSkKKwkJCWVuZCA9IH4wVTsKKwkJY291bnQgPSAoKGVuZCAtIHN0YXJ0ICsgMSkgPCB+MFUpID8gKGVuZCAtIHN0YXJ0ICsgMSkgOiB+MFU7CisJCXJldHZhbCA9IGV4dDJmc19wdW5jaF9pbmQoZnMsIGlub2RlLCBibG9ja19idWYsIAorCQkJCQkgIChibGtfdCkgc3RhcnQsIGNvdW50KTsKKwl9CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgaW5vZGUpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvcWNvdzIuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Fjb3cyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1NmFlNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Fjb3cyLmMKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBxY293Mi5jIC0tLSBGdW5jdGlvbnMgdG8gZ2VuZXJhdGUgcWNvdzIgZm9ybWF0dGVkIGRpc2sgaW1hZ2VzLiAgVGhpcworICogZm9ybWF0IGlzIHVzZWQgb3JpZ2luYWxseSBieSBRRU1VIGZvciB2aXJ0dWFsIG1hY2hpbmVzLCBhbmQgc3RvcmVzIHRoZQorICogZmlsZXN5c3RlbSBkYXRhIG9uIGRpc2sgaW4gYSBwYWNrZWQgZm9ybWF0IHRvIGF2b2lkIGNyZWF0aW5nIHNwYXJzZQorICogaW1hZ2UgZmlsZXMgdGhhdCBuZWVkIGxvdHMgb2Ygc2Vla2luZyB0byByZWFkIGFuZCB3cml0ZS4KKyAqCisgKiBUaGUgcWNvdzIgZm9ybWF0IHN1cHBvcnRzIHpsaWIgY29tcHJlc3Npb24sIGJ1dCB0aGF0IGlzIG5vdCB5ZXQKKyAqIGltcGxlbWVudGVkLgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGRpcmVjdGx5IG1vdW50IGEgcWNvdzIgaW1hZ2UgdXNpbmcgcWVtdS1uYmQ6CisgKgorICogW3Jvb3RdIyBtb2Rwcm9iZSBuYmQgbWF4X3BhcnQ9NjMKKyAqIFtyb290XSMgcWVtdS1uYmQgLWMgL2Rldi9uYmQwIGltYWdlLmltZworICogW3Jvb3RdIyBtb3VudCAvZGV2L25iZDBwMSAvbW50L3FlbXUKKyAqCisgKiBGb3JtYXQgZGV0YWlscyBhdCBodHRwOi8vcGVvcGxlLmdub21lLm9yZy9+bWFya21jL3Fjb3ctaW1hZ2UtZm9ybWF0Lmh0bWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLiwgTHVrYXMgQ3plcm5lciA8bGN6ZXJuZXJAcmVkaGF0LmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJxY293Mi5oIgorCisvKiBGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgcWNvdzIgaW1hZ2UgaW50byByYXcgaW1hZ2UgKi8KKworc3RydWN0IGV4dDJfcWNvdzJfaGRyICpxY293Ml9yZWFkX2hlYWRlcihpbnQgZmQpCit7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKmhkciA9IE5VTEw7CisJc2l6ZV90IHNpemU7CisJZXJyY29kZV90IHJldDsKKworCXJldCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpLCAmYnVmZmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSk7CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZCwgMCwgU0VFS19TRVQgPCAwKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNpemUgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCWhkciA9IChzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKikoYnVmZmVyKTsKKworCWlmICgoZXh0MmZzX2JlMzJfdG9fY3B1KGhkci0+bWFnaWMpICE9IFFDT1dfTUFHSUMpIHx8CisJICAgIChleHQyZnNfYmUzMl90b19jcHUoaGRyLT52ZXJzaW9uKSAhPSAyKSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmhkcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBoZHI7Cit9CisKK3N0YXRpYyBpbnQgcWNvdzJfcmVhZF9sMV90YWJsZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1nKQoreworCWludCBmZCA9IGltZy0+ZmQ7CisJc2l6ZV90IHNpemUsIGwxX3NpemUgPSBpbWctPmwxX3NpemUgKiBzaXplb2YoYmxrNjRfdCk7CisJYmxrNjRfdCAqdGFibGU7CisJZXJyY29kZV90IHJldDsKKworCXJldCA9IGV4dDJmc19nZXRfbWVtemVybyhsMV9zaXplLCAmdGFibGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZCwgaW1nLT5sMV9vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0YWJsZSk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwlzaXplID0gcmVhZChmZCwgdGFibGUsIGwxX3NpemUpOworCWlmIChzaXplICE9IGwxX3NpemUpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0YWJsZSk7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwlpbWctPmwxX3RhYmxlID0gdGFibGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxY293Ml9yZWFkX2wyX3RhYmxlKHN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlICppbWcsCisJCQkgICAgICAgZXh0Ml9vZmY2NF90IG9mZnNldCwgYmxrNjRfdCAqKmwyX3RhYmxlKQoreworCWludCBmZCA9IGltZy0+ZmQ7CisJc2l6ZV90IHNpemU7CisKKwlhc3NlcnQoKmwyX3RhYmxlKTsKKworCWlmIChleHQyZnNfbGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApCisJCXJldHVybiBlcnJubzsKKworCXNpemUgPSByZWFkKGZkLCAqbDJfdGFibGUsIGltZy0+Y2x1c3Rlcl9zaXplKTsKKwlpZiAoc2l6ZSAhPSBpbWctPmNsdXN0ZXJfc2l6ZSkKKwkJcmV0dXJuIGVycm5vOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWNvdzJfY29weV9kYXRhKGludCBmZGluLCBpbnQgZmRvdXQsIGV4dDJfb2ZmNjRfdCBvZmZfaW4sCisJCQkgICBleHQyX29mZjY0X3Qgb2ZmX291dCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IHNpemU7CisKKwlhc3NlcnQoYnVmKTsKKworCWlmIChleHQyZnNfbGxzZWVrKGZkb3V0LCBvZmZfb3V0LCBTRUVLX1NFVCkgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKwlpZiAoZXh0MmZzX2xsc2VlayhmZGluLCBvZmZfaW4sIFNFRUtfU0VUKSA8IDApCisJCXJldHVybiBlcnJubzsKKworCXNpemUgPSByZWFkKGZkaW4sIGJ1ZiwgY291bnQpOworCWlmIChzaXplICE9IGNvdW50KQorCQlyZXR1cm4gZXJybm87CisKKwlzaXplID0gd3JpdGUoZmRvdXQsIGJ1ZiwgY291bnQpOworCWlmIChzaXplICE9IGNvdW50KQorCQlyZXR1cm4gZXJybm87CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgcWNvdzJfd3JpdGVfcmF3X2ltYWdlKGludCBxY293Ml9mZCwgaW50IHJhd19mZCwKKwkJCSAgICAgIHN0cnVjdCBleHQyX3Fjb3cyX2hkciAqaGRyKQoreworCXN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlIGltZzsKKwllcnJjb2RlX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbDFfaW5kZXgsIGwyX2luZGV4OworCWV4dDJfb2ZmNjRfdCBvZmZzZXQ7CisJYmxrNjRfdCAqbDFfdGFibGUsICpsMl90YWJsZSA9IE5VTEw7CisJdm9pZCAqY29weV9idWYgPSBOVUxMOworCXNpemVfdCBzaXplOworCisJaWYgKGhkci0+Y3J5cHRfbWV0aG9kKQorCQlyZXR1cm4gLVFDT1dfRU5DUllQVEVEOworCisJaW1nLmZkID0gcWNvdzJfZmQ7CisJaW1nLmhkciA9IGhkcjsKKwlpbWcubDJfY2FjaGUgPSBOVUxMOworCWltZy5sMV90YWJsZSA9IE5VTEw7CisJaW1nLmNsdXN0ZXJfYml0cyA9IGV4dDJmc19iZTMyX3RvX2NwdShoZHItPmNsdXN0ZXJfYml0cyk7CisJaW1nLmNsdXN0ZXJfc2l6ZSA9IDEgPDwgaW1nLmNsdXN0ZXJfYml0czsKKwlpbWcubDFfc2l6ZSA9IGV4dDJmc19iZTMyX3RvX2NwdShoZHItPmwxX3NpemUpOworCWltZy5sMV9vZmZzZXQgPSBleHQyZnNfYmU2NF90b19jcHUoaGRyLT5sMV90YWJsZV9vZmZzZXQpOworCWltZy5sMl9zaXplID0gMSA8PCAoaW1nLmNsdXN0ZXJfYml0cyAtIDMpOworCWltZy5pbWFnZV9zaXplID0gZXh0MmZzX2JlNjRfdG9fY3B1KGhkci0+c2l6ZSk7CisKKworCXJldCA9IGV4dDJmc19nZXRfbWVtemVybyhpbWcuY2x1c3Rlcl9zaXplLCAmbDJfdGFibGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gZXh0MmZzX2dldF9tZW16ZXJvKDEgPDwgaW1nLmNsdXN0ZXJfYml0cywgJmNvcHlfYnVmKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmIChleHQyZnNfbGxzZWVrKHJhd19mZCwgMCwgU0VFS19TRVQpIDwgMCkgeworCQlyZXQgPSBlcnJubzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcWNvdzJfcmVhZF9sMV90YWJsZSgmaW1nKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWwxX3RhYmxlID0gaW1nLmwxX3RhYmxlOworCS8qIFdhbGsgdGhyb3VnaCBsMSB0YWJsZSAqLworCWZvciAobDFfaW5kZXggPSAwOyBsMV9pbmRleCA8IGltZy5sMV9zaXplOyBsMV9pbmRleCsrKSB7CisJCWV4dDJfb2ZmNjRfdCBvZmZfb3V0OworCisJCW9mZnNldCA9IGV4dDJmc19iZTY0X3RvX2NwdShsMV90YWJsZVtsMV9pbmRleF0pICYKKwkJCSB+UUNPV19PRkxBR19DT1BJRUQ7CisKKwkJaWYgKChvZmZzZXQgPiBpbWcuaW1hZ2Vfc2l6ZSkgfHwKKwkJICAgIChvZmZzZXQgPD0gMCkpCisJCQljb250aW51ZTsKKworCQlpZiAob2Zmc2V0ICYgUUNPV19PRkxBR19DT01QUkVTU0VEKSB7CisJCQlyZXQgPSAtUUNPV19DT01QUkVTU0VEOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBxY293Ml9yZWFkX2wyX3RhYmxlKCZpbWcsIG9mZnNldCwgJmwyX3RhYmxlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCS8qIFdhbGsgdGhyb3VnaCBsMiB0YWJsZSBhbmQgY29weSBkYXRhIGJsb2NrcyBpbnRvIHJhdyBpbWFnZSAqLworCQlmb3IgKGwyX2luZGV4ID0gMDsgbDJfaW5kZXggPCBpbWcubDJfc2l6ZTsgbDJfaW5kZXgrKykgeworCQkJb2Zmc2V0ID0gZXh0MmZzX2JlNjRfdG9fY3B1KGwyX3RhYmxlW2wyX2luZGV4XSkgJgorCQkJCSB+UUNPV19PRkxBR19DT1BJRUQ7CisKKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQljb250aW51ZTsKKworCQkJb2ZmX291dCA9IChsMV9pbmRleCAqIGltZy5sMl9zaXplKSArCisJCQkJICBsMl9pbmRleDsKKwkJCW9mZl9vdXQgPDw9IGltZy5jbHVzdGVyX2JpdHM7CisJCQlyZXQgPSBxY293Ml9jb3B5X2RhdGEocWNvdzJfZmQsIHJhd19mZCwgb2Zmc2V0LAorCQkJCQlvZmZfb3V0LCBjb3B5X2J1ZiwgaW1nLmNsdXN0ZXJfc2l6ZSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogUmVzaXplIHRoZSBvdXRwdXQgaW1hZ2UgdG8gdGhlIGZpbGVzeXN0ZW0gc2l6ZSAqLworCWlmIChleHQyZnNfbGxzZWVrKHJhd19mZCwgaW1nLmltYWdlX3NpemUgLSAxLCBTRUVLX1NFVCkgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKwkoKGNoYXIgKiljb3B5X2J1ZilbMF0gPSAwOworCXNpemUgPSB3cml0ZShyYXdfZmQsIGNvcHlfYnVmLCAxKTsKKwlpZiAoc2l6ZSAhPSAxKSB7CisJCXJldCA9IGVycm5vOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAoY29weV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmY29weV9idWYpOworCWlmIChpbWcubDFfdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmaW1nLmwxX3RhYmxlKTsKKwlpZiAobDJfdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmbDJfdGFibGUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9xY293Mi5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcWNvdzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWUwZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcWNvdzIuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIHFjb3cyLmggLS0tIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHFjb3cyLmMgdG8gZ2VuZXJhdGUKKyAqIHFjb3cyIGZvcm1hdHRlZCBkaXNrIGltYWdlcy4gIFRoaXMgZm9ybWF0IGlzIHVzZWQgb3JpZ2luYWxseSBieSBRRU1VCisgKiBmb3IgdmlydHVhbCBtYWNoaW5lcywgYW5kIHN0b3JlcyB0aGUgZmlsZXN5c3RlbSBkYXRhIG9uIGRpc2sgaW4gYQorICogcGFja2VkIGZvcm1hdCB0byBhdm9pZCBjcmVhdGluZyBzcGFyc2UgaW1hZ2UgZmlsZXMgdGhhdCBuZWVkIGxvdHMgb2YKKyAqIHNlZWtpbmcgdG8gcmVhZCBhbmQgd3JpdGUuCisgKgorICogVGhlIHFjb3cyIGZvcm1hdCBzdXBwb3J0cyB6bGliIGNvbXByZXNzaW9uLCBidXQgdGhhdCBpcyBub3QgeWV0CisgKiBpbXBsZW1lbnRlZC4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byBkaXJlY3RseSBtb3VudCBhIHFjb3cyIGltYWdlIHVzaW5nIHFlbXUtbmJkOgorICoKKyAqIFtyb290XSMgbW9kcHJvYmUgbmJkIG1heF9wYXJ0PTYzCisgKiBbcm9vdF0jIHFlbXUtbmJkIC1jIC9kZXYvbmJkMCBpbWFnZS5pbWcKKyAqIFtyb290XSMgbW91bnQgL2Rldi9uYmQwcDEgL21udC9xZW11CisgKgorICogRm9ybWF0IGRldGFpbHMgYXQgaHR0cDovL3Blb3BsZS5nbm9tZS5vcmcvfm1hcmttYy9xY293LWltYWdlLWZvcm1hdC5odG1sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIEx1a2FzIEN6ZXJuZXIgPGxjemVybmVyQHJlZGhhdC5jb20+CisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKiBOdW1iZXIgb2YgbDIgdGFibGVzIGluIG1lbW9yeSBiZWZvcmUgd3JpdGViYWNrICovCisjZGVmaW5lIEwyX0NBQ0hFX1BSRUFMTE9DCTUxMgorCisKKyNkZWZpbmUgUUNPV19NQUdJQyAoKCdRJyA8PCAyNCkgfCAoJ0YnIDw8IDE2KSB8ICgnSScgPDwgOCkgfCAweGZiKQorI2RlZmluZSBRQ09XX1ZFUlNJT04JCTIKKyNkZWZpbmUgUUNPV19PRkxBR19DT1BJRUQJKDFMTCA8PCA2MykKKyNkZWZpbmUgUUNPV19PRkxBR19DT01QUkVTU0VECSgxTEwgPDwgNjIpCisKKyNkZWZpbmUgUUNPV19DT01QUkVTU0VECQkxCisjZGVmaW5lIFFDT1dfRU5DUllQVEVECQkyCisKK3N0cnVjdCBleHQyX3Fjb3cyX2hkciB7CisJX191MzIJbWFnaWM7CisJX191MzIJdmVyc2lvbjsKKworCV9fdTY0CWJhY2tpbmdfZmlsZV9vZmZzZXQ7CisJX191MzIJYmFja2luZ19maWxlX3NpemU7CisKKwlfX3UzMgljbHVzdGVyX2JpdHM7CisJX191NjQJc2l6ZTsKKwlfX3UzMgljcnlwdF9tZXRob2Q7CisKKwlfX3UzMglsMV9zaXplOworCV9fdTY0CWwxX3RhYmxlX29mZnNldDsKKworCV9fdTY0CXJlZmNvdW50X3RhYmxlX29mZnNldDsKKwlfX3UzMglyZWZjb3VudF90YWJsZV9jbHVzdGVyczsKKworCV9fdTMyCW5iX3NuYXBzaG90czsKKwlfX3U2NAlzbmFwc2hvdHNfb2Zmc2V0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSBMMl9DQUNIRV9IRUFEOworCitzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSB7CisJX191MzIJCWwxX2luZGV4OworCV9fdTY0CQlvZmZzZXQ7CisJX191NjQJCSpkYXRhOworCUwyX0NBQ0hFX0hFQUQJKm5leHQ7Cit9OworCitzdHJ1Y3QgZXh0Ml9xY293Ml9sMl9jYWNoZSB7CisJTDJfQ0FDSEVfSEVBRAkqdXNlZF9oZWFkOworCUwyX0NBQ0hFX0hFQUQJKnVzZWRfdGFpbDsKKwlMMl9DQUNIRV9IRUFECSpmcmVlX2hlYWQ7CisJX191MzIJCWZyZWU7CisJX191MzIJCWNvdW50OworCV9fdTY0CQluZXh0X29mZnNldDsKK307CisKK3N0cnVjdCBleHQyX3Fjb3cyX3JlZmNvdW50IHsKKwlfX3U2NAkqcmVmY291bnRfdGFibGU7CisJX191NjQJcmVmY291bnRfdGFibGVfb2Zmc2V0OworCV9fdTY0CXJlZmNvdW50X2Jsb2NrX29mZnNldDsKKworCV9fdTMyCXJlZmNvdW50X3RhYmxlX2NsdXN0ZXJzOworCV9fdTMyCXJlZmNvdW50X3RhYmxlX2luZGV4OworCV9fdTMyCXJlZmNvdW50X2Jsb2NrX2luZGV4OworCisJX191MTYJKnJlZmNvdW50X2Jsb2NrOworfTsKKworc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgeworCWludAlmZDsKKwlzdHJ1Y3QJZXh0Ml9xY293Ml9oZHIJCSpoZHI7CisJc3RydWN0CWV4dDJfcWNvdzJfbDJfY2FjaGUJKmwyX2NhY2hlOworCXN0cnVjdAlleHQyX3Fjb3cyX3JlZmNvdW50CXJlZmNvdW50OworCV9fdTMyCWNsdXN0ZXJfc2l6ZTsKKwlfX3UzMgljbHVzdGVyX2JpdHM7CisJX191MzIJbDFfc2l6ZTsKKwlfX3UzMglsMl9zaXplOworCisJX191NjQJKmwxX3RhYmxlOworCV9fdTY0CWwyX29mZnNldDsKKwlfX3U2NAlsMV9vZmZzZXQ7CisJX191NjQJaW1hZ2Vfc2l6ZTsKK307CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKworLyogcWNvdzIuYyAqLworCisvKiBGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgcWNvdzIgaW1hZ2UgaW50byByYXcgaW1hZ2UgKi8KK3N0cnVjdCBleHQyX3Fjb3cyX2hkciAqcWNvdzJfcmVhZF9oZWFkZXIoaW50KTsKK2ludCBxY293Ml93cml0ZV9yYXdfaW1hZ2UoaW50LCBpbnQsIHN0cnVjdCBleHQyX3Fjb3cyX2hkciAqKTsKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmJ0cmVlLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9yYnRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDM5MzAzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmJ0cmVlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgIFJlZCBCbGFjayBUcmVlcworICAoQykgMTk5OSAgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+CisgIChDKSAyMDAyICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworICBsaW51eC9saWIvcmJ0cmVlLmMKKyovCisKKyNpbmNsdWRlICJyYnRyZWUuaCIKKworc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSk7CisKKwlpZiAoKG5vZGUtPnJiX3JpZ2h0ID0gcmlnaHQtPnJiX2xlZnQpKQorCQlleHQyZnNfcmJfc2V0X3BhcmVudChyaWdodC0+cmJfbGVmdCwgbm9kZSk7CisJcmlnaHQtPnJiX2xlZnQgPSBub2RlOworCisJZXh0MmZzX3JiX3NldF9wYXJlbnQocmlnaHQsIHBhcmVudCk7CisKKwlpZiAocGFyZW50KQorCXsKKwkJaWYgKG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0KQorCQkJcGFyZW50LT5yYl9sZWZ0ID0gcmlnaHQ7CisJCWVsc2UKKwkJCXBhcmVudC0+cmJfcmlnaHQgPSByaWdodDsKKwl9CisJZWxzZQorCQlyb290LT5yYl9ub2RlID0gcmlnaHQ7CisJZXh0MmZzX3JiX3NldF9wYXJlbnQobm9kZSwgcmlnaHQpOworfQorCitzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9yaWdodChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUgKmxlZnQgPSBub2RlLT5yYl9sZWZ0OworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KG5vZGUpOworCisJaWYgKChub2RlLT5yYl9sZWZ0ID0gbGVmdC0+cmJfcmlnaHQpKQorCQlleHQyZnNfcmJfc2V0X3BhcmVudChsZWZ0LT5yYl9yaWdodCwgbm9kZSk7CisJbGVmdC0+cmJfcmlnaHQgPSBub2RlOworCisJZXh0MmZzX3JiX3NldF9wYXJlbnQobGVmdCwgcGFyZW50KTsKKworCWlmIChwYXJlbnQpCisJeworCQlpZiAobm9kZSA9PSBwYXJlbnQtPnJiX3JpZ2h0KQorCQkJcGFyZW50LT5yYl9yaWdodCA9IGxlZnQ7CisJCWVsc2UKKwkJCXBhcmVudC0+cmJfbGVmdCA9IGxlZnQ7CisJfQorCWVsc2UKKwkJcm9vdC0+cmJfbm9kZSA9IGxlZnQ7CisJZXh0MmZzX3JiX3NldF9wYXJlbnQobm9kZSwgbGVmdCk7Cit9CisKK3ZvaWQgZXh0MmZzX3JiX2luc2VydF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCwgKmdwYXJlbnQ7CisKKwl3aGlsZSAoKHBhcmVudCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSkpICYmIGV4dDJmc19yYl9pc19yZWQocGFyZW50KSkKKwl7CisJCWdwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KHBhcmVudCk7CisKKwkJaWYgKHBhcmVudCA9PSBncGFyZW50LT5yYl9sZWZ0KQorCQl7CisJCQl7CisJCQkJcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0gZ3BhcmVudC0+cmJfcmlnaHQ7CisJCQkJaWYgKHVuY2xlICYmIGV4dDJmc19yYl9pc19yZWQodW5jbGUpKQorCQkJCXsKKwkJCQkJZXh0MmZzX3JiX3NldF9ibGFjayh1bmNsZSk7CisJCQkJCWV4dDJmc19yYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCQkJZXh0MmZzX3JiX3NldF9yZWQoZ3BhcmVudCk7CisJCQkJCW5vZGUgPSBncGFyZW50OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChwYXJlbnQtPnJiX3JpZ2h0ID09IG5vZGUpCisJCQl7CisJCQkJcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnRtcDsKKwkJCQlfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7CisJCQkJdG1wID0gcGFyZW50OworCQkJCXBhcmVudCA9IG5vZGU7CisJCQkJbm9kZSA9IHRtcDsKKwkJCX0KKworCQkJZXh0MmZzX3JiX3NldF9ibGFjayhwYXJlbnQpOworCQkJZXh0MmZzX3JiX3NldF9yZWQoZ3BhcmVudCk7CisJCQlfX3JiX3JvdGF0ZV9yaWdodChncGFyZW50LCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXsKKwkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqdW5jbGUgPSBncGFyZW50LT5yYl9sZWZ0OworCQkJCWlmICh1bmNsZSAmJiBleHQyZnNfcmJfaXNfcmVkKHVuY2xlKSkKKwkJCQl7CisJCQkJCWV4dDJmc19yYl9zZXRfYmxhY2sodW5jbGUpOworCQkJCQlleHQyZnNfcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQkJCWV4dDJmc19yYl9zZXRfcmVkKGdwYXJlbnQpOworCQkJCQlub2RlID0gZ3BhcmVudDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCisJCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCisJCQl7CisJCQkJcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnRtcDsKKwkJCQlfX3JiX3JvdGF0ZV9yaWdodChwYXJlbnQsIHJvb3QpOworCQkJCXRtcCA9IHBhcmVudDsKKwkJCQlwYXJlbnQgPSBub2RlOworCQkJCW5vZGUgPSB0bXA7CisJCQl9CisKKwkJCWV4dDJmc19yYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCWV4dDJmc19yYl9zZXRfcmVkKGdwYXJlbnQpOworCQkJX19yYl9yb3RhdGVfbGVmdChncGFyZW50LCByb290KTsKKwkJfQorCX0KKworCWV4dDJmc19yYl9zZXRfYmxhY2socm9vdC0+cmJfbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcmJfZXJhc2VfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsCisJCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KQoreworCXN0cnVjdCByYl9ub2RlICpvdGhlcjsKKworCXdoaWxlICgoIW5vZGUgfHwgZXh0MmZzX3JiX2lzX2JsYWNrKG5vZGUpKSAmJiBub2RlICE9IHJvb3QtPnJiX25vZGUpCisJeworCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCisJCXsKKwkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKKwkJCWlmIChleHQyZnNfcmJfaXNfcmVkKG90aGVyKSkKKwkJCXsKKwkJCQlleHQyZnNfcmJfc2V0X2JsYWNrKG90aGVyKTsKKwkJCQlleHQyZnNfcmJfc2V0X3JlZChwYXJlbnQpOworCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKKwkJCQlvdGhlciA9IHBhcmVudC0+cmJfcmlnaHQ7CisJCQl9CisJCQlpZiAoKCFvdGhlci0+cmJfbGVmdCB8fCBleHQyZnNfcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKSAmJgorCQkJICAgICghb3RoZXItPnJiX3JpZ2h0IHx8IGV4dDJmc19yYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKSkKKwkJCXsKKwkJCQlleHQyZnNfcmJfc2V0X3JlZChvdGhlcik7CisJCQkJbm9kZSA9IHBhcmVudDsKKwkJCQlwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KG5vZGUpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICghb3RoZXItPnJiX3JpZ2h0IHx8IGV4dDJmc19yYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKQorCQkJCXsKKwkJCQkJZXh0MmZzX3JiX3NldF9ibGFjayhvdGhlci0+cmJfbGVmdCk7CisJCQkJCWV4dDJmc19yYl9zZXRfcmVkKG90aGVyKTsKKwkJCQkJX19yYl9yb3RhdGVfcmlnaHQob3RoZXIsIHJvb3QpOworCQkJCQlvdGhlciA9IHBhcmVudC0+cmJfcmlnaHQ7CisJCQkJfQorCQkJCWV4dDJmc19yYl9zZXRfY29sb3Iob3RoZXIsIGV4dDJmc19yYl9jb2xvcihwYXJlbnQpKTsKKwkJCQlleHQyZnNfcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQkJZXh0MmZzX3JiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOworCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKKwkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCW90aGVyID0gcGFyZW50LT5yYl9sZWZ0OworCQkJaWYgKGV4dDJmc19yYl9pc19yZWQob3RoZXIpKQorCQkJeworCQkJCWV4dDJmc19yYl9zZXRfYmxhY2sob3RoZXIpOworCQkJCWV4dDJmc19yYl9zZXRfcmVkKHBhcmVudCk7CisJCQkJX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKKwkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKKwkJCX0KKwkJCWlmICgoIW90aGVyLT5yYl9sZWZ0IHx8IGV4dDJmc19yYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpICYmCisJCQkgICAgKCFvdGhlci0+cmJfcmlnaHQgfHwgZXh0MmZzX3JiX2lzX2JsYWNrKG90aGVyLT5yYl9yaWdodCkpKQorCQkJeworCQkJCWV4dDJmc19yYl9zZXRfcmVkKG90aGVyKTsKKwkJCQlub2RlID0gcGFyZW50OworCQkJCXBhcmVudCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fCBleHQyZnNfcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKQorCQkJCXsKKwkJCQkJZXh0MmZzX3JiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOworCQkJCQlleHQyZnNfcmJfc2V0X3JlZChvdGhlcik7CisJCQkJCV9fcmJfcm90YXRlX2xlZnQob3RoZXIsIHJvb3QpOworCQkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKKwkJCQl9CisJCQkJZXh0MmZzX3JiX3NldF9jb2xvcihvdGhlciwgZXh0MmZzX3JiX2NvbG9yKHBhcmVudCkpOworCQkJCWV4dDJmc19yYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCQlleHQyZnNfcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9sZWZ0KTsKKwkJCQlfX3JiX3JvdGF0ZV9yaWdodChwYXJlbnQsIHJvb3QpOworCQkJCW5vZGUgPSByb290LT5yYl9ub2RlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWlmIChub2RlKQorCQlleHQyZnNfcmJfc2V0X2JsYWNrKG5vZGUpOworfQorCit2b2lkIGV4dDJmc19yYl9lcmFzZShzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUgKmNoaWxkLCAqcGFyZW50OworCWludCBjb2xvcjsKKworCWlmICghbm9kZS0+cmJfbGVmdCkKKwkJY2hpbGQgPSBub2RlLT5yYl9yaWdodDsKKwllbHNlIGlmICghbm9kZS0+cmJfcmlnaHQpCisJCWNoaWxkID0gbm9kZS0+cmJfbGVmdDsKKwllbHNlCisJeworCQlzdHJ1Y3QgcmJfbm9kZSAqb2xkID0gbm9kZSwgKmxlZnQ7CisKKwkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQl3aGlsZSAoKGxlZnQgPSBub2RlLT5yYl9sZWZ0KSAhPSBOVUxMKQorCQkJbm9kZSA9IGxlZnQ7CisKKwkJaWYgKGV4dDJmc19yYl9wYXJlbnQob2xkKSkgeworCQkJaWYgKGV4dDJmc19yYl9wYXJlbnQob2xkKS0+cmJfbGVmdCA9PSBvbGQpCisJCQkJZXh0MmZzX3JiX3BhcmVudChvbGQpLT5yYl9sZWZ0ID0gbm9kZTsKKwkJCWVsc2UKKwkJCQlleHQyZnNfcmJfcGFyZW50KG9sZCktPnJiX3JpZ2h0ID0gbm9kZTsKKwkJfSBlbHNlCisJCQlyb290LT5yYl9ub2RlID0gbm9kZTsKKworCQljaGlsZCA9IG5vZGUtPnJiX3JpZ2h0OworCQlwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KG5vZGUpOworCQljb2xvciA9IGV4dDJmc19yYl9jb2xvcihub2RlKTsKKworCQlpZiAocGFyZW50ID09IG9sZCkgeworCQkJcGFyZW50ID0gbm9kZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjaGlsZCkKKwkJCQlleHQyZnNfcmJfc2V0X3BhcmVudChjaGlsZCwgcGFyZW50KTsKKwkJCXBhcmVudC0+cmJfbGVmdCA9IGNoaWxkOworCisJCQlub2RlLT5yYl9yaWdodCA9IG9sZC0+cmJfcmlnaHQ7CisJCQlleHQyZnNfcmJfc2V0X3BhcmVudChvbGQtPnJiX3JpZ2h0LCBub2RlKTsKKwkJfQorCisJCW5vZGUtPnJiX3BhcmVudF9jb2xvciA9IG9sZC0+cmJfcGFyZW50X2NvbG9yOworCQlub2RlLT5yYl9sZWZ0ID0gb2xkLT5yYl9sZWZ0OworCQlleHQyZnNfcmJfc2V0X3BhcmVudChvbGQtPnJiX2xlZnQsIG5vZGUpOworCisJCWdvdG8gY29sb3I7CisJfQorCisJcGFyZW50ID0gZXh0MmZzX3JiX3BhcmVudChub2RlKTsKKwljb2xvciA9IGV4dDJmc19yYl9jb2xvcihub2RlKTsKKworCWlmIChjaGlsZCkKKwkJZXh0MmZzX3JiX3NldF9wYXJlbnQoY2hpbGQsIHBhcmVudCk7CisJaWYgKHBhcmVudCkKKwl7CisJCWlmIChwYXJlbnQtPnJiX2xlZnQgPT0gbm9kZSkKKwkJCXBhcmVudC0+cmJfbGVmdCA9IGNoaWxkOworCQllbHNlCisJCQlwYXJlbnQtPnJiX3JpZ2h0ID0gY2hpbGQ7CisJfQorCWVsc2UKKwkJcm9vdC0+cmJfbm9kZSA9IGNoaWxkOworCisgY29sb3I6CisJaWYgKGNvbG9yID09IFJCX0JMQUNLKQorCQlfX3JiX2VyYXNlX2NvbG9yKGNoaWxkLCBwYXJlbnQsIHJvb3QpOworfQorCitzdGF0aWMgdm9pZCBleHQyZnNfcmJfYXVnbWVudF9wYXRoKHN0cnVjdCByYl9ub2RlICpub2RlLCByYl9hdWdtZW50X2YgZnVuYywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OworCit1cDoKKwlmdW5jKG5vZGUsIGRhdGEpOworCXBhcmVudCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSk7CisJaWYgKCFwYXJlbnQpCisJCXJldHVybjsKKworCWlmIChub2RlID09IHBhcmVudC0+cmJfbGVmdCAmJiBwYXJlbnQtPnJiX3JpZ2h0KQorCQlmdW5jKHBhcmVudC0+cmJfcmlnaHQsIGRhdGEpOworCWVsc2UgaWYgKHBhcmVudC0+cmJfbGVmdCkKKwkJZnVuYyhwYXJlbnQtPnJiX2xlZnQsIGRhdGEpOworCisJbm9kZSA9IHBhcmVudDsKKwlnb3RvIHVwOworfQorCisvKgorICogYWZ0ZXIgaW5zZXJ0aW5nIEBub2RlIGludG8gdGhlIHRyZWUsIHVwZGF0ZSB0aGUgdHJlZSB0byBhY2NvdW50IGZvcgorICogYm90aCB0aGUgbmV3IGVudHJ5IGFuZCBhbnkgZGFtYWdlIGRvbmUgYnkgcmViYWxhbmNlCisgKi8KK3ZvaWQgZXh0MmZzX3JiX2F1Z21lbnRfaW5zZXJ0KHN0cnVjdCByYl9ub2RlICpub2RlLCByYl9hdWdtZW50X2YgZnVuYywgdm9pZCAqZGF0YSkKK3sKKwlpZiAobm9kZS0+cmJfbGVmdCkKKwkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJZWxzZSBpZiAobm9kZS0+cmJfcmlnaHQpCisJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKworCWV4dDJmc19yYl9hdWdtZW50X3BhdGgobm9kZSwgZnVuYywgZGF0YSk7Cit9CisKKy8qCisgKiBiZWZvcmUgcmVtb3ZpbmcgdGhlIG5vZGUsIGZpbmQgdGhlIGRlZXBlc3Qgbm9kZSBvbiB0aGUgcmViYWxhbmNlIHBhdGgKKyAqIHRoYXQgd2lsbCBzdGlsbCBiZSB0aGVyZSBhZnRlciBAbm9kZSBnZXRzIHJlbW92ZWQKKyAqLworc3RydWN0IHJiX25vZGUgKmV4dDJmc19yYl9hdWdtZW50X2VyYXNlX2JlZ2luKHN0cnVjdCByYl9ub2RlICpub2RlKQoreworCXN0cnVjdCByYl9ub2RlICpkZWVwZXN0OworCisJaWYgKCFub2RlLT5yYl9yaWdodCAmJiAhbm9kZS0+cmJfbGVmdCkKKwkJZGVlcGVzdCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSk7CisJZWxzZSBpZiAoIW5vZGUtPnJiX3JpZ2h0KQorCQlkZWVwZXN0ID0gbm9kZS0+cmJfbGVmdDsKKwllbHNlIGlmICghbm9kZS0+cmJfbGVmdCkKKwkJZGVlcGVzdCA9IG5vZGUtPnJiX3JpZ2h0OworCWVsc2UgeworCQlkZWVwZXN0ID0gZXh0MmZzX3JiX25leHQobm9kZSk7CisJCWlmIChkZWVwZXN0LT5yYl9yaWdodCkKKwkJCWRlZXBlc3QgPSBkZWVwZXN0LT5yYl9yaWdodDsKKwkJZWxzZSBpZiAoZXh0MmZzX3JiX3BhcmVudChkZWVwZXN0KSAhPSBub2RlKQorCQkJZGVlcGVzdCA9IGV4dDJmc19yYl9wYXJlbnQoZGVlcGVzdCk7CisJfQorCisJcmV0dXJuIGRlZXBlc3Q7Cit9CisKKy8qCisgKiBhZnRlciByZW1vdmFsLCB1cGRhdGUgdGhlIHRyZWUgdG8gYWNjb3VudCBmb3IgdGhlIHJlbW92ZWQgZW50cnkKKyAqIGFuZCBhbnkgcmViYWxhbmNlIGRhbWFnZS4KKyAqLwordm9pZCBleHQyZnNfcmJfYXVnbWVudF9lcmFzZV9lbmQoc3RydWN0IHJiX25vZGUgKm5vZGUsIHJiX2F1Z21lbnRfZiBmdW5jLCB2b2lkICpkYXRhKQoreworCWlmIChub2RlKQorCQlleHQyZnNfcmJfYXVnbWVudF9wYXRoKG5vZGUsIGZ1bmMsIGRhdGEpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIChpbiBzb3J0IG9yZGVyKSBvZiB0aGUgdHJlZS4KKyAqLworc3RydWN0IHJiX25vZGUgKmV4dDJmc19yYl9maXJzdChjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZQkqbjsKKworCW4gPSByb290LT5yYl9ub2RlOworCWlmICghbikKKwkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKG4tPnJiX2xlZnQpCisJCW4gPSBuLT5yYl9sZWZ0OworCXJldHVybiBuOworfQorCitzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX2xhc3QoY29uc3Qgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJc3RydWN0IHJiX25vZGUJKm47CisKKwluID0gcm9vdC0+cmJfbm9kZTsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCXdoaWxlIChuLT5yYl9yaWdodCkKKwkJbiA9IG4tPnJiX3JpZ2h0OworCXJldHVybiBuOworfQorCitzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX25leHQoc3RydWN0IHJiX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKKworCWlmIChleHQyZnNfcmJfcGFyZW50KG5vZGUpID09IG5vZGUpCisJCXJldHVybiBOVUxMOworCisJLyogSWYgd2UgaGF2ZSBhIHJpZ2h0LWhhbmQgY2hpbGQsIGdvIGRvd24gYW5kIHRoZW4gbGVmdCBhcyBmYXIKKwkgICBhcyB3ZSBjYW4uICovCisJaWYgKG5vZGUtPnJiX3JpZ2h0KSB7CisJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJd2hpbGUgKG5vZGUtPnJiX2xlZnQpCisJCQlub2RlPW5vZGUtPnJiX2xlZnQ7CisJCXJldHVybiAoc3RydWN0IHJiX25vZGUgKilub2RlOworCX0KKworCS8qIE5vIHJpZ2h0LWhhbmQgY2hpbGRyZW4uICBFdmVyeXRoaW5nIGRvd24gYW5kIGxlZnQgaXMKKwkgICBzbWFsbGVyIHRoYW4gdXMsIHNvIGFueSAnbmV4dCcgbm9kZSBtdXN0IGJlIGluIHRoZSBnZW5lcmFsCisJICAgZGlyZWN0aW9uIG9mIG91ciBwYXJlbnQuIEdvIHVwIHRoZSB0cmVlOyBhbnkgdGltZSB0aGUKKwkgICBhbmNlc3RvciBpcyBhIHJpZ2h0LWhhbmQgY2hpbGQgb2YgaXRzIHBhcmVudCwga2VlcCBnb2luZworCSAgIHVwLiBGaXJzdCB0aW1lIGl0J3MgYSBsZWZ0LWhhbmQgY2hpbGQgb2YgaXRzIHBhcmVudCwgc2FpZAorCSAgIHBhcmVudCBpcyBvdXIgJ25leHQnIG5vZGUuICovCisJd2hpbGUgKChwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KG5vZGUpKSAmJiBub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCisJCW5vZGUgPSBwYXJlbnQ7CisKKwlyZXR1cm4gcGFyZW50OworfQorCitzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX3ByZXYoc3RydWN0IHJiX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKKworCWlmIChleHQyZnNfcmJfcGFyZW50KG5vZGUpID09IG5vZGUpCisJCXJldHVybiBOVUxMOworCisJLyogSWYgd2UgaGF2ZSBhIGxlZnQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiByaWdodCBhcyBmYXIKKwkgICBhcyB3ZSBjYW4uICovCisJaWYgKG5vZGUtPnJiX2xlZnQpIHsKKwkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCXdoaWxlIChub2RlLT5yYl9yaWdodCkKKwkJCW5vZGU9bm9kZS0+cmJfcmlnaHQ7CisJCXJldHVybiAoc3RydWN0IHJiX25vZGUgKilub2RlOworCX0KKworCS8qIE5vIGxlZnQtaGFuZCBjaGlsZHJlbi4gR28gdXAgdGlsbCB3ZSBmaW5kIGFuIGFuY2VzdG9yIHdoaWNoCisJICAgaXMgYSByaWdodC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQgKi8KKwl3aGlsZSAoKHBhcmVudCA9IGV4dDJmc19yYl9wYXJlbnQobm9kZSkpICYmIG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0KQorCQlub2RlID0gcGFyZW50OworCisJcmV0dXJuIHBhcmVudDsKK30KKwordm9pZCBleHQyZnNfcmJfcmVwbGFjZV9ub2RlKHN0cnVjdCByYl9ub2RlICp2aWN0aW0sIHN0cnVjdCByYl9ub2RlICpuZXcsCisJCQkgIHN0cnVjdCByYl9yb290ICpyb290KQoreworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBleHQyZnNfcmJfcGFyZW50KHZpY3RpbSk7CisKKwkvKiBTZXQgdGhlIHN1cnJvdW5kaW5nIG5vZGVzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCAqLworCWlmIChwYXJlbnQpIHsKKwkJaWYgKHZpY3RpbSA9PSBwYXJlbnQtPnJiX2xlZnQpCisJCQlwYXJlbnQtPnJiX2xlZnQgPSBuZXc7CisJCWVsc2UKKwkJCXBhcmVudC0+cmJfcmlnaHQgPSBuZXc7CisJfSBlbHNlIHsKKwkJcm9vdC0+cmJfbm9kZSA9IG5ldzsKKwl9CisJaWYgKHZpY3RpbS0+cmJfbGVmdCkKKwkJZXh0MmZzX3JiX3NldF9wYXJlbnQodmljdGltLT5yYl9sZWZ0LCBuZXcpOworCWlmICh2aWN0aW0tPnJiX3JpZ2h0KQorCQlleHQyZnNfcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX3JpZ2h0LCBuZXcpOworCisJLyogQ29weSB0aGUgcG9pbnRlcnMvY29sb3VyIGZyb20gdGhlIHZpY3RpbSB0byB0aGUgcmVwbGFjZW1lbnQgKi8KKwkqbmV3ID0gKnZpY3RpbTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JidHJlZS5oIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmJ0cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwYjA3OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JidHJlZS5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICBSZWQgQmxhY2sgVHJlZXMKKyAgKEMpIDE5OTkgIEFuZHJlYSBBcmNhbmdlbGkgPGFuZHJlYUBzdXNlLmRlPgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAgbGludXgvaW5jbHVkZS9saW51eC9yYnRyZWUuaAorCisgIFRvIHVzZSByYnRyZWVzIHlvdSdsbCBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBpbnNlcnQgYW5kIHNlYXJjaCBjb3Jlcy4KKyAgVGhpcyB3aWxsIGF2b2lkIHVzIHRvIHVzZSBjYWxsYmFja3MgYW5kIHRvIGRyb3AgZHJhbW1hdGljYWxseSBwZXJmb3JtYW5jZXMuCisgIEkga25vdyBpdCdzIG5vdCB0aGUgY2xlYW5lciB3YXksICBidXQgaW4gQyAobm90IGluIEMrKykgdG8gZ2V0CisgIHBlcmZvcm1hbmNlcyBhbmQgZ2VuZXJpY2l0eS4uLgorCisgIFNvbWUgZXhhbXBsZSBvZiBpbnNlcnQgYW5kIHNlYXJjaCBmb2xsb3dzIGhlcmUuIFRoZSBzZWFyY2ggaXMgYSBwbGFpbgorICBub3JtYWwgc2VhcmNoIG92ZXIgYW4gb3JkZXJlZCB0cmVlLiBUaGUgaW5zZXJ0IGluc3RlYWQgbXVzdCBiZSBpbXBsZW1lbnRlZAorICBpbiB0d28gc3RlcHM6IEZpcnN0LCB0aGUgY29kZSBtdXN0IGluc2VydCB0aGUgZWxlbWVudCBpbiBvcmRlciBhcyBhIHJlZCBsZWFmCisgIGluIHRoZSB0cmVlLCBhbmQgdGhlbiB0aGUgc3VwcG9ydCBsaWJyYXJ5IGZ1bmN0aW9uIHJiX2luc2VydF9jb2xvcigpIG11c3QKKyAgYmUgY2FsbGVkLiBTdWNoIGZ1bmN0aW9uIHdpbGwgZG8gdGhlIG5vdCB0cml2aWFsIHdvcmsgdG8gcmViYWxhbmNlIHRoZQorICByYnRyZWUsIGlmIG5lY2Vzc2FyeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiByYl9zZWFyY2hfcGFnZV9jYWNoZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqIG4gPSBpbm9kZS0+aV9yYl9wYWdlX2NhY2hlLnJiX25vZGU7CisJc3RydWN0IHBhZ2UgKiBwYWdlOworCisJd2hpbGUgKG4pCisJeworCQlwYWdlID0gcmJfZW50cnkobiwgc3RydWN0IHBhZ2UsIHJiX3BhZ2VfY2FjaGUpOworCisJCWlmIChvZmZzZXQgPCBwYWdlLT5vZmZzZXQpCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAob2Zmc2V0ID4gcGFnZS0+b2Zmc2V0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gcGFnZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKiBfX3JiX2luc2VydF9wYWdlX2NhY2hlKHN0cnVjdCBpbm9kZSAqIGlub2RlLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICBzdHJ1Y3QgcmJfbm9kZSAqIG5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKiogcCA9ICZpbm9kZS0+aV9yYl9wYWdlX2NhY2hlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKiBwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBwYWdlICogcGFnZTsKKworCXdoaWxlICgqcCkKKwl7CisJCXBhcmVudCA9ICpwOworCQlwYWdlID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcGFnZSwgcmJfcGFnZV9jYWNoZSk7CisKKwkJaWYgKG9mZnNldCA8IHBhZ2UtPm9mZnNldCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAob2Zmc2V0ID4gcGFnZS0+b2Zmc2V0KQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHBhZ2U7CisJfQorCisJcmJfbGlua19ub2RlKG5vZGUsIHBhcmVudCwgcCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqIHJiX2luc2VydF9wYWdlX2NhY2hlKHN0cnVjdCBpbm9kZSAqIGlub2RlLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJIHN0cnVjdCByYl9ub2RlICogbm9kZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqIHJldDsKKwlpZiAoKHJldCA9IF9fcmJfaW5zZXJ0X3BhZ2VfY2FjaGUoaW5vZGUsIG9mZnNldCwgbm9kZSkpKQorCQlnb3RvIG91dDsKKwlyYl9pbnNlcnRfY29sb3Iobm9kZSwgJmlub2RlLT5pX3JiX3BhZ2VfY2FjaGUpOworIG91dDoKKwlyZXR1cm4gcmV0OworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYJX0xJTlVYX1JCVFJFRV9ICisjZGVmaW5lCV9MSU5VWF9SQlRSRUVfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyN1bmRlZiBvZmZzZXRvZgorI2lmZGVmIF9fY29tcGlsZXJfb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSxNRU1CRVIpIF9fY29tcGlsZXJfb2Zmc2V0b2YoVFlQRSxNRU1CRVIpCisjZWxzZQorI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKyNlbmRpZgorCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsJCQlcCisJY29uc3QgX190eXBlb2ZfXyggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsJXAorCSh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pCisKK3N0cnVjdCByYl9ub2RlCit7CisJdW5zaWduZWQgbG9uZyAgcmJfcGFyZW50X2NvbG9yOworI2RlZmluZQlSQl9SRUQJCTAKKyNkZWZpbmUJUkJfQkxBQ0sJMQorCXN0cnVjdCByYl9ub2RlICpyYl9yaWdodDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdDsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CisgICAgLyogVGhlIGFsaWdubWVudCBtaWdodCBzZWVtIHBvaW50bGVzcywgYnV0IGFsbGVnZWRseSBDUklTIG5lZWRzIGl0ICovCisKK3N0cnVjdCByYl9yb290Cit7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Cit9OworCisKKyNkZWZpbmUgZXh0MmZzX3JiX3BhcmVudChyKSAgICgoc3RydWN0IHJiX25vZGUgKikoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiB+MykpCisjZGVmaW5lIGV4dDJmc19yYl9jb2xvcihyKSAgICgociktPnJiX3BhcmVudF9jb2xvciAmIDEpCisjZGVmaW5lIGV4dDJmc19yYl9pc19yZWQocikgICAoIWV4dDJmc19yYl9jb2xvcihyKSkKKyNkZWZpbmUgZXh0MmZzX3JiX2lzX2JsYWNrKHIpIGV4dDJmc19yYl9jb2xvcihyKQorI2RlZmluZSBleHQyZnNfcmJfc2V0X3JlZChyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciAmPSB+MTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZXh0MmZzX3JiX3NldF9ibGFjayhyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciB8PSAxOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0MmZzX3JiX3NldF9wYXJlbnQoc3RydWN0IHJiX25vZGUgKnJiLCBzdHJ1Y3QgcmJfbm9kZSAqcCkKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gKHJiLT5yYl9wYXJlbnRfY29sb3IgJiAzKSB8ICh1bnNpZ25lZCBsb25nKXA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZXh0MmZzX3JiX3NldF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gKHJiLT5yYl9wYXJlbnRfY29sb3IgJiB+MSkgfCBjb2xvcjsKK30KKworI2RlZmluZSBSQl9ST09UCShzdHJ1Y3QgcmJfcm9vdCkgeyBOVUxMLCB9CisjZGVmaW5lCWV4dDJmc19yYl9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorCisjZGVmaW5lIEVYVDJGU19SQl9FTVBUWV9ST09UKHJvb3QpCSgocm9vdCktPnJiX25vZGUgPT0gTlVMTCkKKyNkZWZpbmUgRVhUMkZTX1JCX0VNUFRZX05PREUobm9kZSkJKGV4dDJmc19yYl9wYXJlbnQobm9kZSkgPT0gbm9kZSkKKyNkZWZpbmUgRVhUMkZTX1JCX0NMRUFSX05PREUobm9kZSkJKGV4dDJmc19yYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQorCitleHRlcm4gdm9pZCBleHQyZnNfcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX2VyYXNlKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOworCit0eXBlZGVmIHZvaWQgKCpyYl9hdWdtZW50X2YpKHN0cnVjdCByYl9ub2RlICpub2RlLCB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX2F1Z21lbnRfaW5zZXJ0KHN0cnVjdCByYl9ub2RlICpub2RlLAorCQkJICAgICAgcmJfYXVnbWVudF9mIGZ1bmMsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHN0cnVjdCByYl9ub2RlICpleHQyZnNfcmJfYXVnbWVudF9lcmFzZV9iZWdpbihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCBleHQyZnNfcmJfYXVnbWVudF9lcmFzZV9lbmQoc3RydWN0IHJiX25vZGUgKm5vZGUsCisJCQkJIHJiX2F1Z21lbnRfZiBmdW5jLCB2b2lkICpkYXRhKTsKKworLyogRmluZCBsb2dpY2FsIG5leHQgYW5kIHByZXZpb3VzIG5vZGVzIGluIGEgdHJlZSAqLworZXh0ZXJuIHN0cnVjdCByYl9ub2RlICpleHQyZnNfcmJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX3ByZXYoc3RydWN0IHJiX25vZGUgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUgKmV4dDJmc19yYl9maXJzdChjb25zdCBzdHJ1Y3QgcmJfcm9vdCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqZXh0MmZzX3JiX2xhc3QoY29uc3Qgc3RydWN0IHJiX3Jvb3QgKik7CisKKy8qIEZhc3QgcmVwbGFjZW1lbnQgb2YgYSBzaW5nbGUgbm9kZSB3aXRob3V0IHJlbW92ZS9yZWJhbGFuY2UvYWRkL3JlYmFsYW5jZSAqLworZXh0ZXJuIHZvaWQgZXh0MmZzX3JiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LAorCQkJCSBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQyZnNfcmJfbGlua19ub2RlKHN0cnVjdCByYl9ub2RlICogbm9kZSwKKwkJCQkgICAgIHN0cnVjdCByYl9ub2RlICogcGFyZW50LAorCQkJCSAgICAgc3RydWN0IHJiX25vZGUgKiogcmJfbGluaykKK3sKKwlub2RlLT5yYl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZyApcGFyZW50OworCW5vZGUtPnJiX2xlZnQgPSBub2RlLT5yYl9yaWdodCA9IE5VTEw7CisKKwkqcmJfbGluayA9IG5vZGU7Cit9CisKKyNlbmRpZgkvKiBfTElOVVhfUkJUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JlYWRfYmIuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JlYWRfYmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ2MzIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmVhZF9iYi5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogcmVhZF9iYiAtLS0gcmVhZCB0aGUgYmFkIGJsb2NrcyBpbm9kZQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitzdHJ1Y3QgcmVhZF9iYl9yZWNvcmQgeworCWV4dDJfYmFkYmxvY2tzX2xpc3QJYmJfbGlzdDsKKwllcnJjb2RlX3QJZXJyOworfTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZXh0MmZzX3JlYWRfYmJfaW5vZGUoKQorICovCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCBtYXJrX2JhZF9ibG9jayhleHQyX2ZpbHN5cyBmcywgYmxrX3QgKmJsb2NrX25yLAorCQkJICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIGJsa190IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCByZWFkX2JiX3JlY29yZCAqcmIgPSAoc3RydWN0IHJlYWRfYmJfcmVjb3JkICopIHByaXZfZGF0YTsKKworCWlmIChibG9ja2NudCA8IDApCisJCXJldHVybiAwOworCisJaWYgKCgqYmxvY2tfbnIgPCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkgICAgKCpibG9ja19uciA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKQorCQlyZXR1cm4gMDsJLyogSWdub3JlIGlsbGVnYWwgYmxvY2tzICovCisKKwlyYi0+ZXJyID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChyYi0+YmJfbGlzdCwgKmJsb2NrX25yKTsKKwlpZiAocmItPmVycikKKwkJcmV0dXJuIEJMT0NLX0FCT1JUOworCXJldHVybiAwOworfQorCisvKgorICogUmVhZHMgdGhlIGN1cnJlbnQgYmFkIGJsb2NrcyBmcm9tIHRoZSBiYWQgYmxvY2tzIGlub2RlLgorICovCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmJfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgcmVhZF9iYl9yZWNvcmQgcmI7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJYmxrX3QJbnVtYmxvY2tzOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCWlmICghKmJiX2xpc3QpIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIEVYVDJfQkFEX0lOTywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCW51bWJsb2NrcyA9IGlub2RlLmlfYmxvY2tzOworCQlpZiAoISgoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSAmJgorCQkgICAgICAoaW5vZGUuaV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSkpCisJCQludW1ibG9ja3MgPSBudW1ibG9ja3MgLyAoZnMtPmJsb2Nrc2l6ZSAvIDUxMik7CisJCW51bWJsb2NrcyArPSAyMDsKKwkJaWYgKG51bWJsb2NrcyA8IDUwKQorCQkJbnVtYmxvY2tzID0gNTA7CisJCWlmIChudW1ibG9ja3MgPiA1MDAwMCkKKwkJCW51bWJsb2NrcyA9IDUwMDsKKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2NyZWF0ZShiYl9saXN0LCBudW1ibG9ja3MpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyYi5iYl9saXN0ID0gKmJiX2xpc3Q7CisJcmIuZXJyID0gMDsKKwlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTIoZnMsIEVYVDJfQkFEX0lOTywgQkxPQ0tfRkxBR19SRUFEX09OTFksCisJCQkJICAgICAgIDAsIG1hcmtfYmFkX2Jsb2NrLCAmcmIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcmIuZXJyOworfQorCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JlYWRfYmJfZmlsZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmVhZF9iYl9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljNTY3YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3JlYWRfYmJfZmlsZS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogcmVhZF9iYl9maWxlLmMgLS0tIHJlYWQgYSBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBhIEZJTEUgKgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisvKgorICogUmVhZHMgYSBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSAgYSBGSUxFICoKKyAqLworZXJyY29kZV90IGV4dDJmc19yZWFkX2JiX0ZJTEUyKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJICAgICAgIGV4dDJfYmFkYmxvY2tzX2xpc3QgKmJiX2xpc3QsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhLAorCQkJICAgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywKKwkJCQkJICAgICAgIGJsa190IGJsaywKKwkJCQkJICAgICAgIGNoYXIgKmJhZHN0ciwKKwkJCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGs2NF90CQlibG9ja25vOworCWludAkJY291bnQ7CisJY2hhcgkJYnVmWzEyOF07CisKKwlpZiAoZnMpCisJCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlpZiAoISpiYl9saXN0KSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9jcmVhdGUoYmJfbGlzdCwgMTApOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl3aGlsZSAoIWZlb2YgKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWNvdW50ID0gc3NjYW5mKGJ1ZiwgIiVsbHUiLCAmYmxvY2tubyk7CisJCWlmIChjb3VudCA8PSAwKQorCQkJY29udGludWU7CisJCS8qIEJhZGJsb2NrcyBpc24ndCBnb2luZyB0byBiZSB1cGRhdGVkIGZvciA2NGJpdCAqLworCQlpZiAoYmxvY2tubyA+PiAzMikKKwkJCXJldHVybiBFT1ZFUkZMT1c7CisJCWlmIChmcyAmJgorCQkgICAgKChibG9ja25vIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJCSAgICAgKGJsb2Nrbm8gPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkpIHsKKwkJCWlmIChpbnZhbGlkKQorCQkJCShpbnZhbGlkKShmcywgYmxvY2tubywgYnVmLCBwcml2X2RhdGEpOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZCgqYmJfbGlzdCwgYmxvY2tubyk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbXBhdF9zdHJ1Y3QgeworCXZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cywgYmxrX3QpOworfTsKKworc3RhdGljIHZvaWQgY2FsbF9jb21wYXRfaW52YWxpZChleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrLAorCQkJCWNoYXIgKmJhZHN0ciBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBjb21wYXRfc3RydWN0ICpzdDsKKworCXN0ID0gKHN0cnVjdCBjb21wYXRfc3RydWN0ICopIHByaXZfZGF0YTsKKwlpZiAoc3QtPmludmFsaWQpCisJCShzdC0+aW52YWxpZCkoZnMsIGJsayk7Cit9CisKKworLyoKKyAqIFJlYWRzIGEgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gIGEgRklMRSAqCisgKi8KK2VycmNvZGVfdCBleHQyZnNfcmVhZF9iYl9GSUxFKGV4dDJfZmlsc3lzIGZzLCBGSUxFICpmLAorCQkJICAgICAgZXh0Ml9iYWRibG9ja3NfbGlzdCAqYmJfbGlzdCwKKwkJCSAgICAgIHZvaWQgKCppbnZhbGlkKShleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrKSkKK3sKKwlzdHJ1Y3QgY29tcGF0X3N0cnVjdCBzdDsKKworCXN0LmludmFsaWQgPSBpbnZhbGlkOworCisJcmV0dXJuIGV4dDJmc19yZWFkX2JiX0ZJTEUyKGZzLCBmLCBiYl9saXN0LCAmc3QsCisJCQkJICAgIGNhbGxfY29tcGF0X2ludmFsaWQpOworfQorCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Jlc19nZHQuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Jlc19nZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2NlNjUwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcmVzX2dkdC5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogcmVzX2dkdC5jIC0tLSByZXNlcnZlIGJsb2NrcyBmb3IgZ3Jvd2luZyB0aGUgZ3JvdXAgZGVzY3JpcHRvciB0YWJsZQorICogICAgICAgICAgICAgICBkdXJpbmcgb25saW5lIHJlc2l6aW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ3JvdXBzIHdoaWNoIGhvbGQgQkFDS1VQIHN1cGVyYmxvY2svR0RUIGNvcGllcyBpbiBhbgorICogZXh0MyBmaWxlc3lzdGVtLiAgVGhlIGNvdW50ZXJzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byAxLCA1LCBhbmQgNyBiZWZvcmUKKyAqIGNhbGxpbmcgdGhpcyBmb3IgdGhlIGZpcnN0IHRpbWUuICBJbiBhIHNwYXJzZSBmaWxlc3lzdGVtIGl0IHdpbGwgYmUgdGhlCisgKiBzZXF1ZW5jZSBvZiBwb3dlcnMgb2YgMywgNSwgYW5kIDc6IDEsIDMsIDUsIDcsIDksIDI1LCAyNywgNDksIDgxLCAuLi4KKyAqIEZvciBhIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSBpdCB3aWxsIGJlIGV2ZXJ5IGdyb3VwOiAxLCAyLCAzLCA0LCAuLi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsaXN0X2JhY2t1cHMoZXh0Ml9maWxzeXMgZnMsIHVuc2lnbmVkIGludCAqdGhyZWUsCisJCQkJIHVuc2lnbmVkIGludCAqZml2ZSwgdW5zaWduZWQgaW50ICpzZXZlbikKK3sKKwl1bnNpZ25lZCBpbnQgKm1pbiA9IHRocmVlOworCWludCBtdWx0ID0gMzsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikpIHsKKwkJcmV0ID0gKm1pbjsKKwkJKm1pbiArPSAxOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICgqZml2ZSA8ICptaW4pIHsKKwkJbWluID0gZml2ZTsKKwkJbXVsdCA9IDU7CisJfQorCWlmICgqc2V2ZW4gPCAqbWluKSB7CisJCW1pbiA9IHNldmVuOworCQltdWx0ID0gNzsKKwl9CisKKwlyZXQgPSAqbWluOworCSptaW4gKj0gbXVsdDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSByZXNlcnZlZCBibG9ja3MgaGF2ZSBhbHJlYWR5IGJlZW4gbWFya2VkIGluLXVzZQorICogZHVyaW5nIGV4dDJmc19pbml0aWFsaXplKCksIHNvIHRoYXQgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBmb3Igb3RoZXIKKyAqIHVzZXMgYmVmb3JlIHdlIGNhbiBhZGQgdGhlbSB0byB0aGUgcmVzaXplIGlub2RlICh3aGljaCBoYXMgdG8gY29tZQorICogYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbm9kZSB0YWJsZSkuCisgKi8KK2VycmNvZGVfdCBleHQyZnNfY3JlYXRlX3Jlc2l6ZV9pbm9kZShleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbCwgcmV0dmFsMjsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jawkqc2I7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJX191MzIJCQkqZGluZGlyX2J1ZiwgKmdkdF9idWY7CisJdW5zaWduZWQgbG9uZyBsb25nCWFwYiwgaW5vZGVfc2l6ZTsKKwkvKiBGSVhNRS02NCAtIGNhbid0IGRlYWwgd2l0aCBleHRlbnRzICovCisJYmxrX3QJCQlkaW5kaXJfYmxrLCByc3Zfb2ZmLCBnZHRfb2ZmLCBnZHRfYmxrOworCWludAkJCWRpbmRpcl9kaXJ0eSA9IDAsIGlub2RlX2RpcnR5ID0gMCwgc2JfYmxrID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CisKKwlzYiA9IGZzLT5zdXBlcjsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkoMiwgZnMtPmJsb2Nrc2l6ZSwgJmRpbmRpcl9idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJZ2R0X2J1ZiA9IChfX3UzMiAqKSgoY2hhciAqKWRpbmRpcl9idWYgKyBmcy0+YmxvY2tzaXplKTsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBFWFQyX1JFU0laRV9JTk8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXRfZnJlZTsKKworCS8qCisJICogRmlsZSBzeXN0ZW1zIHdpdGggYSBibG9ja3NpemUgb2YgMTAyNCBhbmQgYmlnYWxsb2MgaGF2ZQorCSAqIHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2sgb2YgMDsgeWV0IHRoZSBzdXBlcmJsb2NrIGlzIHN0aWxsIGF0CisJICogYmxvY2sgIzEuICBXZSBjb21wZW5zYXRlIGZvciBpdCBoZXJlLgorCSAqLworCXNiX2JsayA9IHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJaWYgKGZzLT5ibG9ja3NpemUgPT0gMTAyNCAmJiBzYl9ibGsgPT0gMCkKKwkJc2JfYmxrID0gMTsKKworCS8qIE1heGltdW0gcG9zc2libGUgZmlsZSBzaXplICh3ZSBkb25seSB1c2UgdGhlIGRpbmRpcmVjdCBibG9ja3MpICovCisJYXBiID0gRVhUMl9BRERSX1BFUl9CTE9DSyhzYik7CisJaWYgKChkaW5kaXJfYmxrID0gaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdKSkgeworI2lmZGVmIFJFU19HRFRfREVCVUcKKwkJcHJpbnRmKCJyZWFkaW5nIEdEVCBkaW5kaXIgJXVcbiIsIGRpbmRpcl9ibGspOworI2VuZGlmCisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhmcywgZGluZGlyX2JsaywgZGluZGlyX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dF9pbm9kZTsKKwl9IGVsc2UgeworCQlibGtfdCBnb2FsID0gc2JfYmxrICsgZnMtPmRlc2NfYmxvY2tzICsKKwkJCXNiLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgKyAyICsKKwkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCisJCXJldHZhbCA9IGV4dDJmc19hbGxvY19ibG9jayhmcywgZ29hbCwgMCwgJmRpbmRpcl9ibGspOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXRfZnJlZTsKKwkJaW5vZGUuaV9tb2RlID0gTElOVVhfU19JRlJFRyB8IDA2MDA7CisJCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCQlpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10gPSBkaW5kaXJfYmxrOworCQlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgMSk7CisJCW1lbXNldChkaW5kaXJfYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCXByaW50ZigiYWxsb2NhdGVkIEdEVCBkaW5kaXIgJXVcbiIsIGRpbmRpcl9ibGspOworI2VuZGlmCisJCWRpbmRpcl9kaXJ0eSA9IGlub2RlX2RpcnR5ID0gMTsKKwkJaW5vZGVfc2l6ZSA9IGFwYiphcGIgKyBhcGIgKyBFWFQyX05ESVJfQkxPQ0tTOworCQlpbm9kZV9zaXplICo9IGZzLT5ibG9ja3NpemU7CisJCWlub2RlLmlfc2l6ZSA9IGlub2RlX3NpemUgJiAweEZGRkZGRkZGOworCQlpbm9kZS5pX3NpemVfaGlnaCA9IChpbm9kZV9zaXplID4+IDMyKSAmIDB4RkZGRkZGRkY7CisJCWlmKGlub2RlLmlfc2l6ZV9oaWdoKSB7CisJCQlzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PQorCQkJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRTsKKwkJfQorCQlpbm9kZS5pX2N0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCX0KKworCWZvciAocnN2X29mZiA9IDAsIGdkdF9vZmYgPSBmcy0+ZGVzY19ibG9ja3MsCisJICAgICBnZHRfYmxrID0gc2JfYmxrICsgMSArIGZzLT5kZXNjX2Jsb2NrczsKKwkgICAgIHJzdl9vZmYgPCBzYi0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCSAgICAgcnN2X29mZisrLCBnZHRfb2ZmKyssIGdkdF9ibGsrKykgeworCQl1bnNpZ25lZCBpbnQgdGhyZWUgPSAxLCBmaXZlID0gNSwgc2V2ZW4gPSA3OworCQl1bnNpZ25lZCBpbnQgZ3JwLCBsYXN0ID0gMDsKKwkJaW50IGdkdF9kaXJ0eSA9IDA7CisKKwkJZ2R0X29mZiAlPSBhcGI7CisJCWlmICghZGluZGlyX2J1ZltnZHRfb2ZmXSkgeworCQkJLyogRklYTUUgWFhYIFhYWAorCQkJYmxrX3QgbmV3X2JsazsKKworCQkJcmV0dmFsID0gZXh0MmZzX25ld19ibG9jayhmcywgZ2R0X2JsaywgMCwgJm5ld19ibGspOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJaWYgKG5ld19ibGsgIT0gZ2R0X2JsaykgeworCQkJCS8vIFhYWCBmcmVlIGJsb2NrCisJCQkJcmV0dmFsID0gLTE7IC8vIFhYWAorCQkJfQorCQkJKi8KKwkJCWdkdF9kaXJ0eSA9IGRpbmRpcl9kaXJ0eSA9IGlub2RlX2RpcnR5ID0gMTsKKwkJCW1lbXNldChnZHRfYnVmLCAwLCBmcy0+YmxvY2tzaXplKTsKKwkJCWRpbmRpcl9idWZbZ2R0X29mZl0gPSBnZHRfYmxrOworCQkJZXh0MmZzX2libGtfYWRkX2Jsb2NrcyhmcywgJmlub2RlLCAxKTsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCQlwcmludGYoImFkZGVkIHByaW1hcnkgR0RUIGJsb2NrICV1IGF0ICV1WyV1XVxuIiwKKwkJCSAgICAgICBnZHRfYmxrLCBkaW5kaXJfYmxrLCBnZHRfb2ZmKTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKGRpbmRpcl9idWZbZ2R0X29mZl0gPT0gZ2R0X2JsaykgeworI2lmZGVmIFJFU19HRFRfREVCVUcKKwkJCXByaW50ZigicmVhZGluZyBwcmltYXJ5IEdEVCBibG9jayAldVxuIiwgZ2R0X2Jsayk7CisjZW5kaWYKKwkJCXJldHZhbCA9IGV4dDJmc19yZWFkX2luZF9ibG9jayhmcywgZ2R0X2JsaywgZ2R0X2J1Zik7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gb3V0X2RpbmRpcjsKKwkJfSBlbHNlIHsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCQlwcmludGYoImJhZCBwcmltYXJ5IEdEVCAldSAhPSAldSBhdCAldVsldV1cbiIsCisJCQkgICAgICAgZGluZGlyX2J1ZltnZHRfb2ZmXSwgZ2R0X2JsayxkaW5kaXJfYmxrLGdkdF9vZmYpOworI2VuZGlmCisJCQlyZXR2YWwgPSBFWFQyX0VUX1JFU0laRV9JTk9ERV9DT1JSVVBUOworCQkJZ290byBvdXRfZGluZGlyOworCQl9CisKKwkJd2hpbGUgKChncnAgPSBsaXN0X2JhY2t1cHMoZnMsICZ0aHJlZSwgJmZpdmUsICZzZXZlbikpIDwKKwkJICAgICAgIGZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCQlibGtfdCBleHBlY3QgPSBnZHRfYmxrICsgZ3JwICogc2ItPnNfYmxvY2tzX3Blcl9ncm91cDsKKworCQkJaWYgKCFnZHRfYnVmW2xhc3RdKSB7CisjaWZkZWYgUkVTX0dEVF9ERUJVRworCQkJCXByaW50ZigiYWRkZWQgYmFja3VwIEdEVCAldSBncnAgJXVAJXVbJXVdXG4iLAorCQkJCSAgICAgICBleHBlY3QsIGdycCwgZ2R0X2JsaywgbGFzdCk7CisjZW5kaWYKKwkJCQlnZHRfYnVmW2xhc3RdID0gZXhwZWN0OworCQkJCWV4dDJmc19pYmxrX2FkZF9ibG9ja3MoZnMsICZpbm9kZSwgMSk7CisJCQkJZ2R0X2RpcnR5ID0gaW5vZGVfZGlydHkgPSAxOworCQkJfSBlbHNlIGlmIChnZHRfYnVmW2xhc3RdICE9IGV4cGVjdCkgeworI2lmZGVmIFJFU19HRFRfREVCVUcKKwkJCQlwcmludGYoImJhZCBiYWNrdXAgR0RUICV1ICE9ICV1IGF0ICV1WyV1XVxuIiwKKwkJCQkgICAgICAgZ2R0X2J1ZltsYXN0XSwgZXhwZWN0LCBnZHRfYmxrLCBsYXN0KTsKKyNlbmRpZgorCQkJCXJldHZhbCA9IEVYVDJfRVRfUkVTSVpFX0lOT0RFX0NPUlJVUFQ7CisJCQkJZ290byBvdXRfZGluZGlyOworCQkJfQorCQkJbGFzdCsrOworCQl9CisJCWlmIChnZHRfZGlydHkpIHsKKyNpZmRlZiBSRVNfR0RUX0RFQlVHCisJCQlwcmludGYoIndyaXRpbmcgcHJpbWFyeSBHRFQgYmxvY2sgJXVcbiIsIGdkdF9ibGspOworI2VuZGlmCisJCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5kX2Jsb2NrKGZzLCBnZHRfYmxrLCBnZHRfYnVmKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBvdXRfZGluZGlyOworCQl9CisJfQorCitvdXRfZGluZGlyOgorCWlmIChkaW5kaXJfZGlydHkpIHsKKwkJcmV0dmFsMiA9IGV4dDJmc193cml0ZV9pbmRfYmxvY2soZnMsIGRpbmRpcl9ibGssIGRpbmRpcl9idWYpOworCQlpZiAoIXJldHZhbCkKKwkJCXJldHZhbCA9IHJldHZhbDI7CisJfQorb3V0X2lub2RlOgorI2lmZGVmIFJFU19HRFRfREVCVUcKKwlwcmludGYoImlub2RlLmlfYmxvY2tzID0gJXUsIGlfc2l6ZSA9ICV1XG4iLCBpbm9kZS5pX2Jsb2NrcywKKwkgICAgICAgaW5vZGUuaV9zaXplKTsKKyNlbmRpZgorCWlmIChpbm9kZV9kaXJ0eSkgeworCQlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9tdGltZSA9IGZzLT5ub3cgPyBmcy0+bm93IDogdGltZSgwKTsKKwkJcmV0dmFsMiA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIEVYVDJfUkVTSVpFX0lOTywgJmlub2RlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlyZXR2YWwgPSByZXR2YWwyOworCX0KK291dF9mcmVlOgorCWV4dDJmc19mcmVlX21lbSgmZGluZGlyX2J1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvcndfYml0bWFwcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvcndfYml0bWFwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhY2Y4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9yd19iaXRtYXBzLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiByd19iaXRtYXBzLmMgLS0tIHJvdXRpbmVzIHRvIHJlYWQgYW5kIHdyaXRlIHRoZSAgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk0LCAxOTk2IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJpbWFnZS5oIgorCitzdGF0aWMgZXJyY29kZV90IHdyaXRlX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMsIGludCBkb19pbm9kZSwgaW50IGRvX2Jsb2NrKQoreworCWRncnBfdCAJCWk7CisJdW5zaWduZWQgaW50CWo7CisJaW50CQlibG9ja19uYnl0ZXMsIGlub2RlX25ieXRlczsKKwl1bnNpZ25lZCBpbnQJbmJpdHM7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqYmxvY2tfYnVmID0gTlVMTCwgKmlub2RlX2J1ZiA9IE5VTEw7CisJaW50CQljc3VtX2ZsYWcgPSAwOworCWJsazY0X3QJCWJsazsKKwlibGs2NF90CQlibGtfaXRyID0gRVhUMkZTX0IyQyhmcywgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWV4dDJfaW5vX3QJaW5vX2l0ciA9IDE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKCEoZnMtPmZsYWdzICYgRVhUMl9GTEFHX1JXKSkKKwkJcmV0dXJuIEVYVDJfRVRfUk9fRklMU1lTOworCisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpCisJCWNzdW1fZmxhZyA9IDE7CisKKwlpbm9kZV9uYnl0ZXMgPSBibG9ja19uYnl0ZXMgPSAwOworCWlmIChkb19ibG9jaykgeworCQlibG9ja19uYnl0ZXMgPSBFWFQyX0NMVVNURVJTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9hbGxvY19idWYoZnMtPmlvLCAwLCAmYmxvY2tfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCQltZW1zZXQoYmxvY2tfYnVmLCAweGZmLCBmcy0+YmxvY2tzaXplKTsKKwl9CisJaWYgKGRvX2lub2RlKSB7CisJCWlub2RlX25ieXRlcyA9IChzaXplX3QpCisJCQkoKEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpKzcpIC8gOCk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGZzLT5pbywgMCwgJmlub2RlX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwkJbWVtc2V0KGlub2RlX2J1ZiwgMHhmZiwgZnMtPmJsb2Nrc2l6ZSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJaWYgKCFkb19ibG9jaykKKwkJCWdvdG8gc2tpcF9ibG9ja19iaXRtYXA7CisKKwkJaWYgKGNzdW1fZmxhZyAmJiBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpCisJCSAgICApCisJCQlnb3RvIHNraXBfdGhpc19ibG9ja19iaXRtYXA7CisKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfcmFuZ2UyKGZzLT5ibG9ja19tYXAsCisJCQkJYmxrX2l0ciwgYmxvY2tfbmJ5dGVzIDw8IDMsIGJsb2NrX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKworCQlpZiAoaSA9PSBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpIHsKKwkJCS8qIEZvcmNlIGJpdG1hcCBwYWRkaW5nIGZvciB0aGUgbGFzdCBncm91cCAqLworCQkJbmJpdHMgPSBFWFQyRlNfTlVNX0IyQyhmcywKKwkJCQkoKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKQorCQkJCSAgLSAoX191NjQpIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKQorCQkJCSAlIChfX3U2NCkgRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikpKTsKKwkJCWlmIChuYml0cykKKwkJCQlmb3IgKGogPSBuYml0czsgaiA8IGZzLT5ibG9ja3NpemUgKiA4OyBqKyspCisJCQkJCWV4dDJmc19zZXRfYml0KGosIGJsb2NrX2J1Zik7CisJCX0KKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoYmxrKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCAxLAorCQkJCQkJCWJsb2NrX2J1Zik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcmV0dmFsID0gRVhUMl9FVF9CTE9DS19CSVRNQVBfV1JJVEU7CisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCX0KKwlza2lwX3RoaXNfYmxvY2tfYml0bWFwOgorCQlibGtfaXRyICs9IGJsb2NrX25ieXRlcyA8PCAzOworCXNraXBfYmxvY2tfYml0bWFwOgorCisJCWlmICghZG9faW5vZGUpCisJCQljb250aW51ZTsKKworCQlpZiAoY3N1bV9mbGFnICYmIGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBpLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCkKKwkJICAgICkKKwkJCWdvdG8gc2tpcF90aGlzX2lub2RlX2JpdG1hcDsKKworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9yYW5nZTIoZnMtPmlub2RlX21hcCwKKwkJCQlpbm9faXRyLCBpbm9kZV9uYnl0ZXMgPDwgMywgaW5vZGVfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCisJCWJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsaykgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIGJsaywgMSwKKwkJCQkJCSAgICAgIGlub2RlX2J1Zik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcmV0dmFsID0gRVhUMl9FVF9JTk9ERV9CSVRNQVBfV1JJVEU7CisJCQkJZ290byBlcnJvdXQ7CisJCQl9CisJCX0KKwlza2lwX3RoaXNfaW5vZGVfYml0bWFwOgorCQlpbm9faXRyICs9IGlub2RlX25ieXRlcyA8PCAzOworCisJfQorCWlmIChkb19ibG9jaykgeworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19CQl9ESVJUWTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCX0KKwlpZiAoZG9faW5vZGUpIHsKKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfSUJfRElSVFk7CisJCWV4dDJmc19mcmVlX21lbSgmaW5vZGVfYnVmKTsKKwl9CisJcmV0dXJuIDA7CitlcnJvdXQ6CisJaWYgKGlub2RlX2J1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbm9kZV9idWYpOworCWlmIChibG9ja19idWYpCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHJlYWRfYml0bWFwcyhleHQyX2ZpbHN5cyBmcywgaW50IGRvX2lub2RlLCBpbnQgZG9fYmxvY2spCit7CisJZGdycF90IGk7CisJY2hhciAqYmxvY2tfYml0bWFwID0gMCwgKmlub2RlX2JpdG1hcCA9IDA7CisJY2hhciAqYnVmOworCWVycmNvZGVfdCByZXR2YWw7CisJaW50IGJsb2NrX25ieXRlcyA9IEVYVDJfQ0xVU1RFUlNfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4OworCWludCBpbm9kZV9uYnl0ZXMgPSBFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAvIDg7CisJaW50IGNzdW1fZmxhZyA9IDA7CisJdW5zaWduZWQgaW50CWNudDsKKwlibGs2NF90CWJsazsKKwlibGs2NF90CWJsa19pdHIgPSBFWFQyRlNfQjJDKGZzLCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJYmxrNjRfdCAgIGJsa19jbnQ7CisJZXh0Ml9pbm9fdCBpbm9faXRyID0gMTsKKwlleHQyX2lub190IGlub19jbnQ7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKChibG9ja19uYnl0ZXMgPiAoaW50KSBmcy0+YmxvY2tzaXplKSB8fAorCSAgICAoaW5vZGVfbmJ5dGVzID4gKGludCkgZnMtPmJsb2Nrc2l6ZSkpCisJCXJldHVybiBFWFQyX0VUX0NPUlJVUFRfU1VQRVJCTE9DSzsKKworCWZzLT53cml0ZV9iaXRtYXBzID0gZXh0MmZzX3dyaXRlX2JpdG1hcHM7CisKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkKKwkJY3N1bV9mbGFnID0gMTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHN0cmxlbihmcy0+ZGV2aWNlX25hbWUpICsgODAsICZidWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJaWYgKGRvX2Jsb2NrKSB7CisJCWlmIChmcy0+YmxvY2tfbWFwKQorCQkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKGZzLT5ibG9ja19tYXApOworCQlzdHJjcHkoYnVmLCAiYmxvY2sgYml0bWFwIGZvciAiKTsKKwkJc3RyY2F0KGJ1ZiwgZnMtPmRldmljZV9uYW1lKTsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgYnVmLCAmZnMtPmJsb2NrX21hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGZzLT5pbywgMCwgJmJsb2NrX2JpdG1hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfSBlbHNlCisJCWJsb2NrX25ieXRlcyA9IDA7CisJaWYgKGRvX2lub2RlKSB7CisJCWlmIChmcy0+aW5vZGVfbWFwKQorCQkJZXh0MmZzX2ZyZWVfaW5vZGVfYml0bWFwKGZzLT5pbm9kZV9tYXApOworCQlzdHJjcHkoYnVmLCAiaW5vZGUgYml0bWFwIGZvciAiKTsKKwkJc3RyY2F0KGJ1ZiwgZnMtPmRldmljZV9uYW1lKTsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcChmcywgYnVmLCAmZnMtPmlub2RlX21hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGZzLT5pbywgMCwgJmlub2RlX2JpdG1hcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfSBlbHNlCisJCWlub2RlX25ieXRlcyA9IDA7CisJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworCisJaWYgKGZzLT5mbGFncyAmIEVYVDJfRkxBR19JTUFHRV9GSUxFKSB7CisJCWJsayA9IChmcy0+aW1hZ2VfaGVhZGVyLT5vZmZzZXRfaW5vZGVtYXAgLyBmcy0+YmxvY2tzaXplKTsKKwkJaW5vX2NudCA9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQ7CisJCXdoaWxlIChpbm9kZV9uYnl0ZXMgPiAwKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmltYWdlX2lvLCBibGsrKywKKwkJCQkJCSAgICAgMSwgaW5vZGVfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJY250ID0gZnMtPmJsb2Nrc2l6ZSA8PCAzOworCQkJaWYgKGNudCA+IGlub19jbnQpCisJCQkJY250ID0gaW5vX2NudDsKKwkJCXJldHZhbCA9IGV4dDJmc19zZXRfaW5vZGVfYml0bWFwX3JhbmdlMihmcy0+aW5vZGVfbWFwLAorCQkJCQkgICAgICAgaW5vX2l0ciwgY250LCBpbm9kZV9iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQlpbm9faXRyICs9IGZzLT5ibG9ja3NpemUgPDwgMzsKKwkJCWlub19jbnQgLT0gZnMtPmJsb2Nrc2l6ZSA8PCAzOworCQkJaW5vZGVfbmJ5dGVzIC09IGZzLT5ibG9ja3NpemU7CisJCX0KKwkJYmxrID0gKGZzLT5pbWFnZV9oZWFkZXItPm9mZnNldF9ibG9ja21hcCAvCisJCSAgICAgICBmcy0+YmxvY2tzaXplKTsKKwkJYmxrX2NudCA9IChibGs2NF90KUVYVDJfQ0xVU1RFUlNfUEVSX0dST1VQKGZzLT5zdXBlcikgKgorCQkJZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJCXdoaWxlIChibG9ja19uYnl0ZXMgPiAwKSB7CisJCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrNjQoZnMtPmltYWdlX2lvLCBibGsrKywKKwkJCQkJCSAgICAgMSwgYmxvY2tfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJY250ID0gZnMtPmJsb2Nrc2l6ZSA8PCAzOworCQkJaWYgKGNudCA+IGJsa19jbnQpCisJCQkJY250ID0gYmxrX2NudDsKKwkJCXJldHZhbCA9IGV4dDJmc19zZXRfYmxvY2tfYml0bWFwX3JhbmdlMihmcy0+YmxvY2tfbWFwLAorCQkJCSAgICAgICBibGtfaXRyLCBjbnQsIGJsb2NrX2JpdG1hcCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCWJsa19pdHIgKz0gZnMtPmJsb2Nrc2l6ZSA8PCAzOworCQkJYmxrX2NudCAtPSBmcy0+YmxvY2tzaXplIDw8IDM7CisJCQlibG9ja19uYnl0ZXMgLT0gZnMtPmJsb2Nrc2l6ZTsKKwkJfQorCQlnb3RvIHN1Y2Nlc3NfY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlpZiAoYmxvY2tfYml0bWFwKSB7CisJCQlibGsgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSk7CisJCQlpZiAoY3N1bV9mbGFnICYmCisJCQkgICAgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSAmJgorCQkJICAgIGV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KGZzLCBpKSkKKwkJCQlibGsgPSAwOworCQkJaWYgKGJsaykgeworCQkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywKKwkJCQkJCQkgICAgICAgMSwgYmxvY2tfYml0bWFwKTsKKwkJCQlpZiAocmV0dmFsKSB7CisJCQkJCXJldHZhbCA9IEVYVDJfRVRfQkxPQ0tfQklUTUFQX1JFQUQ7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQltZW1zZXQoYmxvY2tfYml0bWFwLCAwLCBibG9ja19uYnl0ZXMpOworCQkJY250ID0gYmxvY2tfbmJ5dGVzIDw8IDM7CisJCQlyZXR2YWwgPSBleHQyZnNfc2V0X2Jsb2NrX2JpdG1hcF9yYW5nZTIoZnMtPmJsb2NrX21hcCwKKwkJCQkJICAgICAgIGJsa19pdHIsIGNudCwgYmxvY2tfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJYmxrX2l0ciArPSBibG9ja19uYnl0ZXMgPDwgMzsKKwkJfQorCQlpZiAoaW5vZGVfYml0bWFwKSB7CisJCQlibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSk7CisJCQlpZiAoY3N1bV9mbGFnICYmCisJCQkgICAgZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSAmJgorCQkJICAgIGV4dDJmc19ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KGZzLCBpKSkKKwkJCQlibGsgPSAwOworCQkJaWYgKGJsaykgeworCQkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywKKwkJCQkJCQkgICAgICAgMSwgaW5vZGVfYml0bWFwKTsKKwkJCQlpZiAocmV0dmFsKSB7CisJCQkJCXJldHZhbCA9IEVYVDJfRVRfSU5PREVfQklUTUFQX1JFQUQ7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQltZW1zZXQoaW5vZGVfYml0bWFwLCAwLCBpbm9kZV9uYnl0ZXMpOworCQkJY250ID0gaW5vZGVfbmJ5dGVzIDw8IDM7CisJCQlyZXR2YWwgPSBleHQyZnNfc2V0X2lub2RlX2JpdG1hcF9yYW5nZTIoZnMtPmlub2RlX21hcCwKKwkJCQkJICAgICAgIGlub19pdHIsIGNudCwgaW5vZGVfYml0bWFwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBjbGVhbnVwOworCQkJaW5vX2l0ciArPSBpbm9kZV9uYnl0ZXMgPDwgMzsKKwkJfQorCX0KK3N1Y2Nlc3NfY2xlYW51cDoKKwlpZiAoaW5vZGVfYml0bWFwKQorCQlleHQyZnNfZnJlZV9tZW0oJmlub2RlX2JpdG1hcCk7CisJaWYgKGJsb2NrX2JpdG1hcCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19iaXRtYXApOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChkb19ibG9jaykgeworCQlleHQyZnNfZnJlZV9tZW0oJmZzLT5ibG9ja19tYXApOworCQlmcy0+YmxvY2tfbWFwID0gMDsKKwl9CisJaWYgKGRvX2lub2RlKSB7CisJCWV4dDJmc19mcmVlX21lbSgmZnMtPmlub2RlX21hcCk7CisJCWZzLT5pbm9kZV9tYXAgPSAwOworCX0KKwlpZiAoaW5vZGVfYml0bWFwKQorCQlleHQyZnNfZnJlZV9tZW0oJmlub2RlX2JpdG1hcCk7CisJaWYgKGJsb2NrX2JpdG1hcCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19iaXRtYXApOworCWlmIChidWYpCisJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfaW5vZGVfYml0bWFwKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiByZWFkX2JpdG1hcHMoZnMsIDEsIDApOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGV4dDJfZmlsc3lzIGZzKQoreworCXJldHVybiByZWFkX2JpdG1hcHMoZnMsIDAsIDEpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2JpdG1hcChleHQyX2ZpbHN5cyBmcykKK3sKKwlyZXR1cm4gd3JpdGVfYml0bWFwcyhmcywgMSwgMCk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfd3JpdGVfYmxvY2tfYml0bWFwIChleHQyX2ZpbHN5cyBmcykKK3sKKwlyZXR1cm4gd3JpdGVfYml0bWFwcyhmcywgMCwgMSk7Cit9CisKK2VycmNvZGVfdCBleHQyZnNfcmVhZF9iaXRtYXBzKGV4dDJfZmlsc3lzIGZzKQoreworCWlmIChmcy0+aW5vZGVfbWFwICYmIGZzLT5ibG9ja19tYXApCisJCXJldHVybiAwOworCisJcmV0dXJuIHJlYWRfYml0bWFwcyhmcywgIWZzLT5pbm9kZV9tYXAsICFmcy0+YmxvY2tfbWFwKTsKK30KKworZXJyY29kZV90IGV4dDJmc193cml0ZV9iaXRtYXBzKGV4dDJfZmlsc3lzIGZzKQoreworCWludCBkb19pbm9kZSA9IGZzLT5pbm9kZV9tYXAgJiYgZXh0MmZzX3Rlc3RfaWJfZGlydHkoZnMpOworCWludCBkb19ibG9jayA9IGZzLT5ibG9ja19tYXAgJiYgZXh0MmZzX3Rlc3RfYmJfZGlydHkoZnMpOworCisJaWYgKCFkb19pbm9kZSAmJiAhZG9fYmxvY2spCisJCXJldHVybiAwOworCisJcmV0dXJuIHdyaXRlX2JpdG1hcHMoZnMsIGRvX2lub2RlLCBkb19ibG9jayk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy9zd2FwZnMuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3N3YXBmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDYwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9zd2FwZnMuYwpAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqIHN3YXBmcy5jIC0tLSBzd2FwIGV4dDIgZmlsZXN5c3RlbSBkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDIwMDIgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9leHRfYXR0ci5oPgorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCit2b2lkIGV4dDJmc19zd2FwX3N1cGVyKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc2IpCit7CisgIAlpbnQgaTsKKwlzYi0+c19pbm9kZXNfY291bnQgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2lub2Rlc19jb3VudCk7CisJc2ItPnNfYmxvY2tzX2NvdW50ID0gZXh0MmZzX3N3YWIzMihzYi0+c19ibG9ja3NfY291bnQpOworCXNiLT5zX3JfYmxvY2tzX2NvdW50ID0gZXh0MmZzX3N3YWIzMihzYi0+c19yX2Jsb2Nrc19jb3VudCk7CisJc2ItPnNfZnJlZV9ibG9ja3NfY291bnQgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZyZWVfYmxvY2tzX2NvdW50KTsKKwlzYi0+c19mcmVlX2lub2Rlc19jb3VudCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZnJlZV9pbm9kZXNfY291bnQpOworCXNiLT5zX2ZpcnN0X2RhdGFfYmxvY2sgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCXNiLT5zX2xvZ19ibG9ja19zaXplID0gZXh0MmZzX3N3YWIzMihzYi0+c19sb2dfYmxvY2tfc2l6ZSk7CisJc2ItPnNfbG9nX2NsdXN0ZXJfc2l6ZSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfbG9nX2NsdXN0ZXJfc2l6ZSk7CisJc2ItPnNfYmxvY2tzX3Blcl9ncm91cCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfYmxvY2tzX3Blcl9ncm91cCk7CisJc2ItPnNfY2x1c3RlcnNfcGVyX2dyb3VwID0gZXh0MmZzX3N3YWIzMihzYi0+c19jbHVzdGVyc19wZXJfZ3JvdXApOworCXNiLT5zX2lub2Rlc19wZXJfZ3JvdXAgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCXNiLT5zX210aW1lID0gZXh0MmZzX3N3YWIzMihzYi0+c19tdGltZSk7CisJc2ItPnNfd3RpbWUgPSBleHQyZnNfc3dhYjMyKHNiLT5zX3d0aW1lKTsKKwlzYi0+c19tbnRfY291bnQgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21udF9jb3VudCk7CisJc2ItPnNfbWF4X21udF9jb3VudCA9IGV4dDJmc19zd2FiMTYoc2ItPnNfbWF4X21udF9jb3VudCk7CisJc2ItPnNfbWFnaWMgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21hZ2ljKTsKKwlzYi0+c19zdGF0ZSA9IGV4dDJmc19zd2FiMTYoc2ItPnNfc3RhdGUpOworCXNiLT5zX2Vycm9ycyA9IGV4dDJmc19zd2FiMTYoc2ItPnNfZXJyb3JzKTsKKwlzYi0+c19taW5vcl9yZXZfbGV2ZWwgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21pbm9yX3Jldl9sZXZlbCk7CisJc2ItPnNfbGFzdGNoZWNrID0gZXh0MmZzX3N3YWIzMihzYi0+c19sYXN0Y2hlY2spOworCXNiLT5zX2NoZWNraW50ZXJ2YWwgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2NoZWNraW50ZXJ2YWwpOworCXNiLT5zX2NyZWF0b3Jfb3MgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2NyZWF0b3Jfb3MpOworCXNiLT5zX3Jldl9sZXZlbCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfcmV2X2xldmVsKTsKKwlzYi0+c19kZWZfcmVzdWlkID0gZXh0MmZzX3N3YWIxNihzYi0+c19kZWZfcmVzdWlkKTsKKwlzYi0+c19kZWZfcmVzZ2lkID0gZXh0MmZzX3N3YWIxNihzYi0+c19kZWZfcmVzZ2lkKTsKKwlzYi0+c19maXJzdF9pbm8gPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZpcnN0X2lubyk7CisJc2ItPnNfaW5vZGVfc2l6ZSA9IGV4dDJmc19zd2FiMTYoc2ItPnNfaW5vZGVfc2l6ZSk7CisJc2ItPnNfYmxvY2tfZ3JvdXBfbnIgPSBleHQyZnNfc3dhYjE2KHNiLT5zX2Jsb2NrX2dyb3VwX25yKTsKKwlzYi0+c19mZWF0dXJlX2NvbXBhdCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZmVhdHVyZV9jb21wYXQpOworCXNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQpOworCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ID0gZXh0MmZzX3N3YWIzMihzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCk7CisJc2ItPnNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcCA9IGV4dDJmc19zd2FiMzIoc2ItPnNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcCk7CisJc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyA9IGV4dDJmc19zd2FiMTYoc2ItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrcyk7CisJc2ItPnNfam91cm5hbF9pbnVtID0gZXh0MmZzX3N3YWIzMihzYi0+c19qb3VybmFsX2ludW0pOworCXNiLT5zX2pvdXJuYWxfZGV2ID0gZXh0MmZzX3N3YWIzMihzYi0+c19qb3VybmFsX2Rldik7CisJc2ItPnNfbGFzdF9vcnBoYW4gPSBleHQyZnNfc3dhYjMyKHNiLT5zX2xhc3Rfb3JwaGFuKTsKKwlzYi0+c19kZXNjX3NpemUgPSBleHQyZnNfc3dhYjE2KHNiLT5zX2Rlc2Nfc2l6ZSk7CisJc2ItPnNfZGVmYXVsdF9tb3VudF9vcHRzID0gZXh0MmZzX3N3YWIzMihzYi0+c19kZWZhdWx0X21vdW50X29wdHMpOworCXNiLT5zX2ZpcnN0X21ldGFfYmcgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2ZpcnN0X21ldGFfYmcpOworCXNiLT5zX21rZnNfdGltZSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfbWtmc190aW1lKTsKKwlzYi0+c19ibG9ja3NfY291bnRfaGkgPSBleHQyZnNfc3dhYjMyKHNiLT5zX2Jsb2Nrc19jb3VudF9oaSk7CisJc2ItPnNfcl9ibG9ja3NfY291bnRfaGkgPSBleHQyZnNfc3dhYjMyKHNiLT5zX3JfYmxvY2tzX2NvdW50X2hpKTsKKwlzYi0+c19mcmVlX2Jsb2Nrc19oaSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZnJlZV9ibG9ja3NfaGkpOworCXNiLT5zX21pbl9leHRyYV9pc2l6ZSA9IGV4dDJmc19zd2FiMTYoc2ItPnNfbWluX2V4dHJhX2lzaXplKTsKKwlzYi0+c193YW50X2V4dHJhX2lzaXplID0gZXh0MmZzX3N3YWIxNihzYi0+c193YW50X2V4dHJhX2lzaXplKTsKKwlzYi0+c19mbGFncyA9IGV4dDJmc19zd2FiMzIoc2ItPnNfZmxhZ3MpOworCXNiLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwgPSBleHQyZnNfc3dhYjE2KHNiLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwpOworCXNiLT5zX21tcF9ibG9jayA9IGV4dDJmc19zd2FiNjQoc2ItPnNfbW1wX2Jsb2NrKTsKKwlzYi0+c19rYnl0ZXNfd3JpdHRlbiA9IGV4dDJmc19zd2FiNjQoc2ItPnNfa2J5dGVzX3dyaXR0ZW4pOworCXNiLT5zX3NuYXBzaG90X2ludW0gPSBleHQyZnNfc3dhYjMyKHNiLT5zX3NuYXBzaG90X2ludW0pOworCXNiLT5zX3NuYXBzaG90X2lkID0gZXh0MmZzX3N3YWIzMihzYi0+c19zbmFwc2hvdF9pZCk7CisJc2ItPnNfc25hcHNob3Rfcl9ibG9ja3NfY291bnQgPQorCQlleHQyZnNfc3dhYjY0KHNiLT5zX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50KTsKKwlzYi0+c19zbmFwc2hvdF9saXN0ID0gZXh0MmZzX3N3YWIzMihzYi0+c19zbmFwc2hvdF9saXN0KTsKKwlzYi0+c191c3JfcXVvdGFfaW51bSA9IGV4dDJmc19zd2FiMzIoc2ItPnNfdXNyX3F1b3RhX2ludW0pOworCXNiLT5zX2dycF9xdW90YV9pbnVtID0gZXh0MmZzX3N3YWIzMihzYi0+c19ncnBfcXVvdGFfaW51bSk7CisJc2ItPnNfb3ZlcmhlYWRfYmxvY2tzID0gZXh0MmZzX3N3YWIzMihzYi0+c19vdmVyaGVhZF9ibG9ja3MpOworCXNiLT5zX2NoZWNrc3VtID0gZXh0MmZzX3N3YWIzMihzYi0+c19jaGVja3N1bSk7CisKKwlmb3IgKGk9MDsgaSA8IDQ7IGkrKykKKwkJc2ItPnNfaGFzaF9zZWVkW2ldID0gZXh0MmZzX3N3YWIzMihzYi0+c19oYXNoX3NlZWRbaV0pOworCisJLyogaWYgam91cm5hbCBiYWNrdXAgaXMgZm9yIGEgdmFsaWQgZXh0ZW50LWJhc2VkIGpvdXJuYWwuLi4gKi8KKwlpZiAoZXh0MmZzX2V4dGVudF9oZWFkZXJfdmVyaWZ5KHNiLT5zX2pubF9ibG9ja3MsCisJCQkJCXNpemVvZihzYi0+c19qbmxfYmxvY2tzKSkgPT0gMCkgeworCQkvKiAuLi4gc3dhcCBvbmx5IHRoZSBqb3VybmFsIGlfc2l6ZSBhbmQgaV9zaXplX2hpZ2gsCisJCSAqIGFuZCB0aGUgZXh0ZW50IGRhdGEgaXMgbm90IHN3YXBwZWQgb24gcmVhZCAqLworCQlpID0gMTU7CisJfSBlbHNlIHsKKwkJLyogZGlyZWN0L2luZGlyZWN0IGpvdXJuYWw6IHN3YXAgaXQgYWxsICovCisJCWkgPSAwOworCX0KKwlmb3IgKDsgaSA8IDE3OyBpKyspCisJCXNiLT5zX2pubF9ibG9ja3NbaV0gPSBleHQyZnNfc3dhYjMyKHNiLT5zX2pubF9ibG9ja3NbaV0pOworfQorCit2b2lkIGV4dDJmc19zd2FwX2dyb3VwX2Rlc2MyKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpnZHApCit7CisJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwNCA9IChzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICopZ2RwOworCisJLyogRG8gdGhlIDMyLWJpdCBwYXJ0cyBmaXJzdCAqLworCWdkcC0+YmdfYmxvY2tfYml0bWFwID0gZXh0MmZzX3N3YWIzMihnZHAtPmJnX2Jsb2NrX2JpdG1hcCk7CisJZ2RwLT5iZ19pbm9kZV9iaXRtYXAgPSBleHQyZnNfc3dhYjMyKGdkcC0+YmdfaW5vZGVfYml0bWFwKTsKKwlnZHAtPmJnX2lub2RlX3RhYmxlID0gZXh0MmZzX3N3YWIzMihnZHAtPmJnX2lub2RlX3RhYmxlKTsKKwlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0gZXh0MmZzX3N3YWIxNihnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KTsKKwlnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50ID0gZXh0MmZzX3N3YWIxNihnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50KTsKKwlnZHAtPmJnX3VzZWRfZGlyc19jb3VudCA9IGV4dDJmc19zd2FiMTYoZ2RwLT5iZ191c2VkX2RpcnNfY291bnQpOworCWdkcC0+YmdfZmxhZ3MgPSBleHQyZnNfc3dhYjE2KGdkcC0+YmdfZmxhZ3MpOworCWdkcC0+YmdfZXhjbHVkZV9iaXRtYXBfbG8gPSBleHQyZnNfc3dhYjMyKGdkcC0+YmdfZXhjbHVkZV9iaXRtYXBfbG8pOworCWdkcC0+YmdfYmxvY2tfYml0bWFwX2NzdW1fbG8gPQorCQlleHQyZnNfc3dhYjE2KGdkcC0+YmdfYmxvY2tfYml0bWFwX2NzdW1fbG8pOworCWdkcC0+YmdfaW5vZGVfYml0bWFwX2NzdW1fbG8gPQorCQlleHQyZnNfc3dhYjE2KGdkcC0+YmdfaW5vZGVfYml0bWFwX2NzdW1fbG8pOworCWdkcC0+YmdfaXRhYmxlX3VudXNlZCA9IGV4dDJmc19zd2FiMTYoZ2RwLT5iZ19pdGFibGVfdW51c2VkKTsKKwlnZHAtPmJnX2NoZWNrc3VtID0gZXh0MmZzX3N3YWIxNihnZHAtPmJnX2NoZWNrc3VtKTsKKwkvKiBJZiB3ZSdyZSAzMi1iaXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoZnMgPT0gTlVMTCB8fCBFWFQyX0RFU0NfU0laRShmcy0+c3VwZXIpIDwgRVhUMl9NSU5fREVTQ19TSVpFXzY0QklUKQorCQlyZXR1cm47CisKKwkvKiBTd2FwIHRoZSA2NC1iaXQgcGFydHMgKi8KKwlnZHA0LT5iZ19ibG9ja19iaXRtYXBfaGkgPSBleHQyZnNfc3dhYjMyKGdkcDQtPmJnX2Jsb2NrX2JpdG1hcF9oaSk7CisJZ2RwNC0+YmdfaW5vZGVfYml0bWFwX2hpID0gZXh0MmZzX3N3YWIzMihnZHA0LT5iZ19pbm9kZV9iaXRtYXBfaGkpOworCWdkcDQtPmJnX2lub2RlX3RhYmxlX2hpID0gZXh0MmZzX3N3YWIzMihnZHA0LT5iZ19pbm9kZV90YWJsZV9oaSk7CisJZ2RwNC0+YmdfZnJlZV9ibG9ja3NfY291bnRfaGkgPQorCQlleHQyZnNfc3dhYjE2KGdkcDQtPmJnX2ZyZWVfYmxvY2tzX2NvdW50X2hpKTsKKwlnZHA0LT5iZ19mcmVlX2lub2Rlc19jb3VudF9oaSA9CisJCWV4dDJmc19zd2FiMTYoZ2RwNC0+YmdfZnJlZV9pbm9kZXNfY291bnRfaGkpOworCWdkcDQtPmJnX3VzZWRfZGlyc19jb3VudF9oaSA9CisJCWV4dDJmc19zd2FiMTYoZ2RwNC0+YmdfdXNlZF9kaXJzX2NvdW50X2hpKTsKKwlnZHA0LT5iZ19pdGFibGVfdW51c2VkX2hpID0gZXh0MmZzX3N3YWIxNihnZHA0LT5iZ19pdGFibGVfdW51c2VkX2hpKTsKKwlnZHA0LT5iZ19leGNsdWRlX2JpdG1hcF9oaSA9IGV4dDJmc19zd2FiMTYoZ2RwNC0+YmdfZXhjbHVkZV9iaXRtYXBfaGkpOworCWdkcDQtPmJnX2Jsb2NrX2JpdG1hcF9jc3VtX2hpID0KKwkJZXh0MmZzX3N3YWIxNihnZHA0LT5iZ19ibG9ja19iaXRtYXBfY3N1bV9oaSk7CisJZ2RwNC0+YmdfaW5vZGVfYml0bWFwX2NzdW1faGkgPQorCQlleHQyZnNfc3dhYjE2KGdkcDQtPmJnX2lub2RlX2JpdG1hcF9jc3VtX2hpKTsKK30KKwordm9pZCBleHQyZnNfc3dhcF9ncm91cF9kZXNjKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKmdkcCkKK3sKKwlleHQyZnNfc3dhcF9ncm91cF9kZXNjMigwLCBnZHApOworfQorCisKK3ZvaWQgZXh0MmZzX3N3YXBfZXh0X2F0dHJfaGVhZGVyKHN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqdG9faGVhZGVyLAorCQkJCSBzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKmZyb21faGVhZGVyKQoreworCWludCBuOworCisJdG9faGVhZGVyLT5oX21hZ2ljICAgID0gZXh0MmZzX3N3YWIzMihmcm9tX2hlYWRlci0+aF9tYWdpYyk7CisJdG9faGVhZGVyLT5oX2Jsb2NrcyAgID0gZXh0MmZzX3N3YWIzMihmcm9tX2hlYWRlci0+aF9ibG9ja3MpOworCXRvX2hlYWRlci0+aF9yZWZjb3VudCA9IGV4dDJmc19zd2FiMzIoZnJvbV9oZWFkZXItPmhfcmVmY291bnQpOworCXRvX2hlYWRlci0+aF9oYXNoICAgICA9IGV4dDJmc19zd2FiMzIoZnJvbV9oZWFkZXItPmhfaGFzaCk7CisJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykKKwkJdG9faGVhZGVyLT5oX3Jlc2VydmVkW25dID0KKwkJCWV4dDJmc19zd2FiMzIoZnJvbV9oZWFkZXItPmhfcmVzZXJ2ZWRbbl0pOworfQorCit2b2lkIGV4dDJmc19zd2FwX2V4dF9hdHRyX2VudHJ5KHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICp0b19lbnRyeSwKKwkJCQlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqZnJvbV9lbnRyeSkKK3sKKwl0b19lbnRyeS0+ZV92YWx1ZV9vZmZzICA9IGV4dDJmc19zd2FiMTYoZnJvbV9lbnRyeS0+ZV92YWx1ZV9vZmZzKTsKKwl0b19lbnRyeS0+ZV92YWx1ZV9ibG9jayA9IGV4dDJmc19zd2FiMzIoZnJvbV9lbnRyeS0+ZV92YWx1ZV9ibG9jayk7CisJdG9fZW50cnktPmVfdmFsdWVfc2l6ZSAgPSBleHQyZnNfc3dhYjMyKGZyb21fZW50cnktPmVfdmFsdWVfc2l6ZSk7CisJdG9fZW50cnktPmVfaGFzaAk9IGV4dDJmc19zd2FiMzIoZnJvbV9lbnRyeS0+ZV9oYXNoKTsKK30KKwordm9pZCBleHQyZnNfc3dhcF9leHRfYXR0cihjaGFyICp0bywgY2hhciAqZnJvbSwgaW50IGJ1ZnNpemUsIGludCBoYXNfaGVhZGVyKQoreworCXN0cnVjdCBleHQyX2V4dF9hdHRyX2hlYWRlciAqZnJvbV9oZWFkZXIgPQorCQkoc3RydWN0IGV4dDJfZXh0X2F0dHJfaGVhZGVyICopZnJvbTsKKwlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKnRvX2hlYWRlciA9CisJCShzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9oZWFkZXIgKil0bzsKKwlzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqZnJvbV9lbnRyeSwgKnRvX2VudHJ5OworCWNoYXIgKmZyb21fZW5kID0gKGNoYXIgKilmcm9tX2hlYWRlciArIGJ1ZnNpemU7CisKKwlpZiAodG9faGVhZGVyICE9IGZyb21faGVhZGVyKQorCQltZW1jcHkodG9faGVhZGVyLCBmcm9tX2hlYWRlciwgYnVmc2l6ZSk7CisKKwlpZiAoaGFzX2hlYWRlcikgeworCQlleHQyZnNfc3dhcF9leHRfYXR0cl9oZWFkZXIodG9faGVhZGVyLCBmcm9tX2hlYWRlcik7CisKKwkJZnJvbV9lbnRyeSA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKShmcm9tX2hlYWRlcisxKTsKKwkJdG9fZW50cnkgICA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKSh0b19oZWFkZXIrMSk7CisJfSBlbHNlIHsKKwkJZnJvbV9lbnRyeSA9IChzdHJ1Y3QgZXh0Ml9leHRfYXR0cl9lbnRyeSAqKWZyb21faGVhZGVyOworCQl0b19lbnRyeSAgID0gKHN0cnVjdCBleHQyX2V4dF9hdHRyX2VudHJ5ICopdG9faGVhZGVyOworCX0KKworCXdoaWxlICgoY2hhciAqKWZyb21fZW50cnkgPCBmcm9tX2VuZCAmJiAqKF9fdTMyICopZnJvbV9lbnRyeSkgeworCQlleHQyZnNfc3dhcF9leHRfYXR0cl9lbnRyeSh0b19lbnRyeSwgZnJvbV9lbnRyeSk7CisJCWZyb21fZW50cnkgPSBFWFQyX0VYVF9BVFRSX05FWFQoZnJvbV9lbnRyeSk7CisJCXRvX2VudHJ5ICAgPSBFWFQyX0VYVF9BVFRSX05FWFQodG9fZW50cnkpOworCX0KK30KKwordm9pZCBleHQyZnNfc3dhcF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqdCwKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9sYXJnZSAqZiwgaW50IGhvc3RvcmRlciwKKwkJCSAgICBpbnQgYnVmc2l6ZSkKK3sKKwl1bnNpZ25lZCBpLCBoYXNfZGF0YV9ibG9ja3MsIGV4dHJhX2lzaXplLCBhdHRyX21hZ2ljOworCWludCBoYXNfZXh0ZW50cyA9IDA7CisJaW50IGlzbG5rID0gMDsKKwlfX3UzMiAqZWFmLCAqZWF0OworCisJaWYgKGhvc3RvcmRlciAmJiBMSU5VWF9TX0lTTE5LKGYtPmlfbW9kZSkpCisJCWlzbG5rID0gMTsKKwl0LT5pX21vZGUgPSBleHQyZnNfc3dhYjE2KGYtPmlfbW9kZSk7CisJaWYgKCFob3N0b3JkZXIgJiYgTElOVVhfU19JU0xOSyh0LT5pX21vZGUpKQorCQlpc2xuayA9IDE7CisJdC0+aV91aWQgPSBleHQyZnNfc3dhYjE2KGYtPmlfdWlkKTsKKwl0LT5pX3NpemUgPSBleHQyZnNfc3dhYjMyKGYtPmlfc2l6ZSk7CisJdC0+aV9hdGltZSA9IGV4dDJmc19zd2FiMzIoZi0+aV9hdGltZSk7CisJdC0+aV9jdGltZSA9IGV4dDJmc19zd2FiMzIoZi0+aV9jdGltZSk7CisJdC0+aV9tdGltZSA9IGV4dDJmc19zd2FiMzIoZi0+aV9tdGltZSk7CisJdC0+aV9kdGltZSA9IGV4dDJmc19zd2FiMzIoZi0+aV9kdGltZSk7CisJdC0+aV9naWQgPSBleHQyZnNfc3dhYjE2KGYtPmlfZ2lkKTsKKwl0LT5pX2xpbmtzX2NvdW50ID0gZXh0MmZzX3N3YWIxNihmLT5pX2xpbmtzX2NvdW50KTsKKwl0LT5pX2ZpbGVfYWNsID0gZXh0MmZzX3N3YWIzMihmLT5pX2ZpbGVfYWNsKTsKKwlpZiAoaG9zdG9yZGVyKQorCQloYXNfZGF0YV9ibG9ja3MgPSBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MoZnMsCisJCQkJCSAgIChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSBmKTsKKwl0LT5pX2Jsb2NrcyA9IGV4dDJmc19zd2FiMzIoZi0+aV9ibG9ja3MpOworCWlmICghaG9zdG9yZGVyKQorCQloYXNfZGF0YV9ibG9ja3MgPSBleHQyZnNfaW5vZGVfZGF0YV9ibG9ja3MoZnMsCisJCQkJCSAgIChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSB0KTsKKwlpZiAoaG9zdG9yZGVyICYmIChmLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkKKwkJaGFzX2V4dGVudHMgPSAxOworCXQtPmlfZmxhZ3MgPSBleHQyZnNfc3dhYjMyKGYtPmlfZmxhZ3MpOworCWlmICghaG9zdG9yZGVyICYmICh0LT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkKKwkJaGFzX2V4dGVudHMgPSAxOworCXQtPmlfZGlyX2FjbCA9IGV4dDJmc19zd2FiMzIoZi0+aV9kaXJfYWNsKTsKKwkvKiBleHRlbnQgZGF0YSBhcmUgc3dhcHBlZCBvbiBhY2Nlc3MsIG5vdCBoZXJlICovCisJaWYgKCFoYXNfZXh0ZW50cyAmJiAoIWlzbG5rIHx8IGhhc19kYXRhX2Jsb2NrcykpIHsKKwkJZm9yIChpID0gMDsgaSA8IEVYVDJfTl9CTE9DS1M7IGkrKykKKwkJCXQtPmlfYmxvY2tbaV0gPSBleHQyZnNfc3dhYjMyKGYtPmlfYmxvY2tbaV0pOworCX0gZWxzZSBpZiAodCAhPSBmKSB7CisJCWZvciAoaSA9IDA7IGkgPCBFWFQyX05fQkxPQ0tTOyBpKyspCisJCQl0LT5pX2Jsb2NrW2ldID0gZi0+aV9ibG9ja1tpXTsKKwl9CisJdC0+aV9nZW5lcmF0aW9uID0gZXh0MmZzX3N3YWIzMihmLT5pX2dlbmVyYXRpb24pOworCXQtPmlfZmFkZHIgPSBleHQyZnNfc3dhYjMyKGYtPmlfZmFkZHIpOworCisJc3dpdGNoIChmcy0+c3VwZXItPnNfY3JlYXRvcl9vcykgeworCWNhc2UgRVhUMl9PU19MSU5VWDoKKwkJdC0+b3NkMS5saW51eDEubF9pX3ZlcnNpb24gPQorCQkJZXh0MmZzX3N3YWIzMihmLT5vc2QxLmxpbnV4MS5sX2lfdmVyc2lvbik7CisJCXQtPm9zZDIubGludXgyLmxfaV9ibG9ja3NfaGkgPQorCQkJZXh0MmZzX3N3YWIxNihmLT5vc2QyLmxpbnV4Mi5sX2lfYmxvY2tzX2hpKTsKKwkJdC0+b3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2ggPQorCQkJZXh0MmZzX3N3YWIxNihmLT5vc2QyLmxpbnV4Mi5sX2lfZmlsZV9hY2xfaGlnaCk7CisJCXQtPm9zZDIubGludXgyLmxfaV91aWRfaGlnaCA9CisJCSAgZXh0MmZzX3N3YWIxNiAoZi0+b3NkMi5saW51eDIubF9pX3VpZF9oaWdoKTsKKwkJdC0+b3NkMi5saW51eDIubF9pX2dpZF9oaWdoID0KKwkJICBleHQyZnNfc3dhYjE2IChmLT5vc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gpOworCQl0LT5vc2QyLmxpbnV4Mi5sX2lfY2hlY2tzdW1fbG8gPQorCQkJZXh0MmZzX3N3YWIxNihmLT5vc2QyLmxpbnV4Mi5sX2lfY2hlY2tzdW1fbG8pOworCQlicmVhazsKKwljYXNlIEVYVDJfT1NfSFVSRDoKKwkJdC0+b3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvciA9CisJCSAgZXh0MmZzX3N3YWIzMiAoZi0+b3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcik7CisJCXQtPm9zZDIuaHVyZDIuaF9pX2ZyYWcgPSBmLT5vc2QyLmh1cmQyLmhfaV9mcmFnOworCQl0LT5vc2QyLmh1cmQyLmhfaV9mc2l6ZSA9IGYtPm9zZDIuaHVyZDIuaF9pX2ZzaXplOworCQl0LT5vc2QyLmh1cmQyLmhfaV9tb2RlX2hpZ2ggPQorCQkgIGV4dDJmc19zd2FiMTYgKGYtPm9zZDIuaHVyZDIuaF9pX21vZGVfaGlnaCk7CisJCXQtPm9zZDIuaHVyZDIuaF9pX3VpZF9oaWdoID0KKwkJICBleHQyZnNfc3dhYjE2IChmLT5vc2QyLmh1cmQyLmhfaV91aWRfaGlnaCk7CisJCXQtPm9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoID0KKwkJICBleHQyZnNfc3dhYjE2IChmLT5vc2QyLmh1cmQyLmhfaV9naWRfaGlnaCk7CisJCXQtPm9zZDIuaHVyZDIuaF9pX2F1dGhvciA9CisJCSAgZXh0MmZzX3N3YWIzMiAoZi0+b3NkMi5odXJkMi5oX2lfYXV0aG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGJ1ZnNpemUgPCAoaW50KSAoc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSArIHNpemVvZihfX3UxNikpKQorCQlyZXR1cm47IC8qIG5vIGlfZXh0cmFfaXNpemUgZmllbGQgKi8KKworCWlmIChob3N0b3JkZXIpCisJCWV4dHJhX2lzaXplID0gZi0+aV9leHRyYV9pc2l6ZTsKKwl0LT5pX2V4dHJhX2lzaXplID0gZXh0MmZzX3N3YWIxNihmLT5pX2V4dHJhX2lzaXplKTsKKwlpZiAoIWhvc3RvcmRlcikKKwkJZXh0cmFfaXNpemUgPSB0LT5pX2V4dHJhX2lzaXplOworCWlmIChleHRyYV9pc2l6ZSA+IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpIC0KKwkJCQlzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB7CisJCS8qIHRoaXMgaXMgZXJyb3IgY2FzZTogaV9leHRyYV9zaXplIGlzIHRvbyBsYXJnZSAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGV4dHJhX2lzaXplID49IDQpCisJCXQtPmlfY2hlY2tzdW1faGkgPSBleHQyZnNfc3dhYjE2KGYtPmlfY2hlY2tzdW1faGkpOworCWlmIChleHRyYV9pc2l6ZSA+PSA4KQorCQl0LT5pX2N0aW1lX2V4dHJhID0gZXh0MmZzX3N3YWIzMihmLT5pX2N0aW1lX2V4dHJhKTsKKwlpZiAoZXh0cmFfaXNpemUgPj0gMTIpCisJCXQtPmlfbXRpbWVfZXh0cmEgPSBleHQyZnNfc3dhYjMyKGYtPmlfbXRpbWVfZXh0cmEpOworCWlmIChleHRyYV9pc2l6ZSA+PSAxNikKKwkJdC0+aV9hdGltZV9leHRyYSA9IGV4dDJmc19zd2FiMzIoZi0+aV9hdGltZV9leHRyYSk7CisJaWYgKGV4dHJhX2lzaXplID49IDIwKQorCQl0LT5pX2NydGltZSA9IGV4dDJmc19zd2FiMzIoZi0+aV9jcnRpbWUpOworCWlmIChleHRyYV9pc2l6ZSA+PSAyNCkKKwkJdC0+aV9jcnRpbWVfZXh0cmEgPSBleHQyZnNfc3dhYjMyKGYtPmlfY3J0aW1lX2V4dHJhKTsKKwlpZiAoZXh0cmFfaXNpemUgPj0gMjgpCisJCXQtPmlfdmVyc2lvbl9oaSA9IGV4dDJmc19zd2FiMzIoZi0+aV92ZXJzaW9uX2hpKTsKKworCWkgPSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpICsgZXh0cmFfaXNpemUgKyBzaXplb2YoX191MzIpOworCWlmIChidWZzaXplIDwgKGludCkgaSkKKwkJcmV0dXJuOyAvKiBubyBzcGFjZSBmb3IgRUEgbWFnaWMgKi8KKworCWVhZiA9IChfX3UzMiAqKSAoKChjaGFyICopIGYpICsgc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSArCisJCQkJCWV4dHJhX2lzaXplKTsKKworCWF0dHJfbWFnaWMgPSAqZWFmOworCWlmICghaG9zdG9yZGVyKQorCQlhdHRyX21hZ2ljID0gZXh0MmZzX3N3YWIzMihhdHRyX21hZ2ljKTsKKworCWlmIChhdHRyX21hZ2ljICE9IEVYVDJfRVhUX0FUVFJfTUFHSUMpCisJCXJldHVybjsgLyogaXQgc2VlbXMgbm8gbWFnaWMgaGVyZSAqLworCisJZWF0ID0gKF9fdTMyICopICgoKGNoYXIgKikgdCkgKyBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpICsKKwkJCQkJZXh0cmFfaXNpemUpOworCSplYXQgPSBleHQyZnNfc3dhYjMyKCplYWYpOworCisJLyogY29udmVydCBFQShzKSAqLworCWV4dDJmc19zd2FwX2V4dF9hdHRyKChjaGFyICopIChlYXQgKyAxKSwgKGNoYXIgKikgKGVhZiArIDEpLAorCQkJICAgICBidWZzaXplIC0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSAtCisJCQkgICAgIGV4dHJhX2lzaXplIC0gc2l6ZW9mKF9fdTMyKSwgMCk7CisKK30KKwordm9pZCBleHQyZnNfc3dhcF9pbm9kZShleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKnQsCisJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZSAqZiwgaW50IGhvc3RvcmRlcikKK3sKKwlleHQyZnNfc3dhcF9pbm9kZV9mdWxsKGZzLCAoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgdCwKKwkJCQkoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UgKikgZiwgaG9zdG9yZGVyLAorCQkJCXNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworfQorCit2b2lkIGV4dDJmc19zd2FwX21tcChzdHJ1Y3QgbW1wX3N0cnVjdCAqbW1wKQoreworCW1tcC0+bW1wX21hZ2ljID0gZXh0MmZzX3N3YWIzMihtbXAtPm1tcF9tYWdpYyk7CisJbW1wLT5tbXBfc2VxID0gZXh0MmZzX3N3YWIzMihtbXAtPm1tcF9zZXEpOworCW1tcC0+bW1wX3RpbWUgPSBleHQyZnNfc3dhYjY0KG1tcC0+bW1wX3RpbWUpOworCW1tcC0+bW1wX2NoZWNrX2ludGVydmFsID0gZXh0MmZzX3N3YWIxNihtbXAtPm1tcF9jaGVja19pbnRlcnZhbCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvc3ltbGluay5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvc3ltbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzhkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy9zeW1saW5rLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBzeW1saW5rLmMgLS0tIG1ha2UgYSBzeW1saW5rIGluIHRoZSBmaWxlc3lzdGVtLCBiYXNlZCBvbiBta2Rpci5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK2VycmNvZGVfdCBleHQyZnNfc3ltbGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBwYXJlbnQsIGV4dDJfaW5vX3QgaW5vLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCkKK3sKKwlleHQyX2V4dGVudF9oYW5kbGVfdAloYW5kbGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXh0Ml9pbm9fdAkJc2NyYXRjaF9pbm87CisJYmxrNjRfdAkJCWJsazsKKwlpbnQJCQlmYXN0bGluazsKKwl1bnNpZ25lZCBpbnQJCXRhcmdldF9sZW47CisJY2hhcgkJCSpibG9ja19idWYgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKworCS8qIFRoZSBMaW51eCBrZXJuZWwgZG9lc24ndCBhbGxvdyBmb3IgbGlua3MgbG9uZ2VyIHRoYW4gYSBibG9jayAqLworCXRhcmdldF9sZW4gPSBzdHJsZW4odGFyZ2V0KTsKKwlpZiAodGFyZ2V0X2xlbiA+IGZzLT5ibG9ja3NpemUpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhIGRhdGEgYmxvY2sgZm9yIHNsb3cgbGlua3MKKwkgKi8KKwlmYXN0bGluayA9ICh0YXJnZXRfbGVuIDwgc2l6ZW9mKGlub2RlLmlfYmxvY2spKTsKKwlpZiAoIWZhc3RsaW5rKSB7CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCAwLCAwLCAmYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJsb2NrX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhbiBpbm9kZSwgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKCFpbm8pIHsKKwkJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShmcywgcGFyZW50LCBMSU5VWF9TX0lGTE5LIHwgMDc1NSwKKwkJCQkJICAwLCAmaW5vKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgaW5vZGUgc3RydWN0dXJlLi4uLgorCSAqLworCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpOworCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZMTksgfCAwNzc3OworCWlub2RlLmlfdWlkID0gaW5vZGUuaV9naWQgPSAwOworCWV4dDJmc19pYmxrX3NldChmcywgJmlub2RlLCBmYXN0bGluayA/IDAgOiAxKTsKKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKwlpbm9kZS5pX3NpemUgPSB0YXJnZXRfbGVuOworCS8qIFRoZSB0aW1lIGZpZWxkcyBhcmUgc2V0IGJ5IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoKSAqLworCisJaWYgKGZhc3RsaW5rKSB7CisJCS8qIEZhc3Qgc3ltbGlua3MsIHRhcmdldCBzdG9yZWQgaW4gaW5vZGUgKi8KKwkJc3RyY3B5KChjaGFyICopJmlub2RlLmlfYmxvY2ssIHRhcmdldCk7CisJfSBlbHNlIHsKKwkJLyogU2xvdyBzeW1saW5rcywgdGFyZ2V0IHN0b3JlZCBpbiB0aGUgZmlyc3QgYmxvY2sgKi8KKwkJbWVtc2V0KGJsb2NrX2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJCXN0cmNweShibG9ja19idWYsIHRhcmdldCk7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQkJLyoKKwkJCSAqIFRoZSBleHRlbnQgYm1hcCBpcyBzZXR1cCBhZnRlciB0aGUgaW5vZGUgYW5kIGJsb2NrCisJCQkgKiBoYXZlIGJlZW4gd3JpdHRlbiBvdXQgYmVsb3cuCisJCQkgKi8KKwkJCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworCQl9CisJfQorCisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGlub2RlIGFuZCBpbm9kZSBkYXRhIGJsb2NrLiAgVGhlIGlub2RlIGdlbmVyYXRpb24KKwkgKiBudW1iZXIgaXMgYXNzaWduZWQgYnkgd3JpdGVfbmV3X2lub2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZQorCSAqIG9wZXJhdGlvbnMgdXNpbmcgaW5vIG11c3QgY29tZSBhZnRlciBpdC4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKCFmYXN0bGluaykgeworCQlyZXR2YWwgPSBleHQyZnNfYm1hcDIoZnMsIGlubywgJmlub2RlLCBOVUxMLCBCTUFQX1NFVCwgMCwgTlVMTCwKKwkJCQkgICAgICAmYmxrKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLCAxLCBibG9ja19idWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogTGluayB0aGUgc3ltbGluayBpbnRvIHRoZSBmaWxlc3lzdGVtIGhpZXJhcmNoeQorCSAqLworCWlmIChuYW1lKSB7CisJCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIHBhcmVudCwgbmFtZSwgc3RybGVuKG5hbWUpLCAwLAorCQkJCSAgICAgICAmc2NyYXRjaF9pbm8pOworCQlpZiAoIXJldHZhbCkgeworCQkJcmV0dmFsID0gRVhUMl9FVF9GSUxFX0VYSVNUUzsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocmV0dmFsICE9IEVYVDJfRVRfRklMRV9OT1RfRk9VTkQpCisJCQlnb3RvIGNsZWFudXA7CisJCXJldHZhbCA9IGV4dDJmc19saW5rKGZzLCBwYXJlbnQsIG5hbWUsIGlubywgRVhUMl9GVF9TWU1MSU5LKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBhY2NvdW50aW5nLi4uLgorCSAqLworCWlmICghZmFzdGxpbmspCisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGlubywgKzEsIDApOworCitjbGVhbnVwOgorCWlmIChibG9ja19idWYpCisJCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjljNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiLmMKQEAgLTAsMCArMSw0MTM5IEBACisvKgorVVJMOiBzdm46Ly9zdm5hbm9uLnNhbWJhLm9yZy9zYW1iYS9icmFuY2hlcy9TQU1CQV80XzAvc291cmNlL2xpYi90ZGIvY29tbW9uCitSZXY6IDIzNTkwCitMYXN0IENoYW5nZWQgRGF0ZTogMjAwNy0wNi0yMiAxMzozNjoxMCAtMDQwMCAoRnJpLCAyMiBKdW4gMjAwNykKKyovCisgLyoKKyAgIHRyaXZpYWwgZGF0YWJhc2UgbGlicmFyeSAtIHN0YW5kYWxvbmUgdmVyc2lvbgorCisgICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAgICAgICAgICAgICAgMTk5OS0yMDA1CisgICBDb3B5cmlnaHQgKEMpIEplcmVteSBBbGxpc29uICAgICAgICAgICAgICAgMjAwMC0yMDA2CisgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsICAgICAgICAgMjAwMAorCisgICAgICoqIE5PVEUhIFRoZSBmb2xsb3dpbmcgTEdQTCBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIHRkYgorICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCisgICAgICoqIHVuZGVyIHRoZSBMR1BMCisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmZGVmIENPTkZJR19TVEFORF9BTE9ORQorI2RlZmluZSBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9TVFJEVVAKKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9ICisjZGVmaW5lIEhBVkVfVVRJTUVfSAorI2RlZmluZSBIQVZFX1VUSU1FCisjZW5kaWYKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfVVRJTUVfSAorI2luY2x1ZGUgPHV0aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9maWxlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIEhBVkVfU1lTX01NQU5fSAorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjZW5kaWYKKworI2lmbmRlZiBNQVBfRklMRQorI2RlZmluZSBNQVBfRklMRSAwCisjZW5kaWYKKworI2lmbmRlZiBNQVBfRkFJTEVECisjZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NUUkRVUAorI2RlZmluZSBzdHJkdXAgcmVwX3N0cmR1cAorc3RhdGljIGNoYXIgKnJlcF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICpyZXQ7CisJaW50IGxlbmd0aDsKKwlpZiAoIXMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFsZW5ndGgpCisJCWxlbmd0aCA9IHN0cmxlbihzKTsKKworCXJldCA9IG1hbGxvYyhsZW5ndGggKyAxKTsKKwlpZiAocmV0KSB7CisJCXN0cm5jcHkocmV0LCBzLCBsZW5ndGgpOworCQlyZXRbbGVuZ3RoXSA9ICdcMCc7CisJfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBQUklOVEZfQVRUUklCVVRFCisjaWYgKF9fR05VQ19fID49IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAxICkKKy8qKiBVc2UgZ2NjIGF0dHJpYnV0ZSB0byBjaGVjayBwcmludGYgZm5zLiAgYTEgaXMgdGhlIDEtYmFzZWQgaW5kZXggb2YKKyAqIHRoZSBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgZm9ybWF0LCBhbmQgYTIgdGhlIGluZGV4IG9mIHRoZSBmaXJzdAorICogYXJndW1lbnQuIE5vdGUgdGhhdCBzb21lIGdjYyAyLnggdmVyc2lvbnMgZG9uJ3QgaGFuZGxlIHRoaXMKKyAqIHByb3Blcmx5ICoqLworI2RlZmluZSBQUklOVEZfQVRUUklCVVRFKGExLCBhMikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAoX19wcmludGZfXywgYTEsIGEyKSkpCisjZWxzZQorI2RlZmluZSBQUklOVEZfQVRUUklCVVRFKGExLCBhMikKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgaW50IGJvb2w7CisKKyNpbmNsdWRlICJ0ZGIuaCIKKworc3RhdGljIFREQl9EQVRBIHRkYl9udWxsOworCisjaWZuZGVmIHUzMgorI2RlZmluZSB1MzIgdW5zaWduZWQKKyNlbmRpZgorCit0eXBlZGVmIHUzMiB0ZGJfbGVuX3Q7Cit0eXBlZGVmIHUzMiB0ZGJfb2ZmX3Q7CisKKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YodCxmKSAoKHVuc2lnbmVkIGludCkmKCh0ICopMCktPmYpCisjZW5kaWYKKworI2RlZmluZSBUREJfTUFHSUNfRk9PRCAiVERCIGZpbGVcbiIKKyNkZWZpbmUgVERCX1ZFUlNJT04gKDB4MjYwMTE5NjcgKyA2KQorI2RlZmluZSBUREJfTUFHSUMgKDB4MjYwMTE5OTlVKQorI2RlZmluZSBUREJfRlJFRV9NQUdJQyAoflREQl9NQUdJQykKKyNkZWZpbmUgVERCX0RFQURfTUFHSUMgKDB4RkVFMURFQUQpCisjZGVmaW5lIFREQl9SRUNPVkVSWV9NQUdJQyAoMHhmNTNiYzBlN1UpCisjZGVmaW5lIFREQl9BTElHTk1FTlQgNAorI2RlZmluZSBNSU5fUkVDX1NJWkUgKDIqc2l6ZW9mKHN0cnVjdCBsaXN0X3N0cnVjdCkgKyBUREJfQUxJR05NRU5UKQorI2RlZmluZSBERUZBVUxUX0hBU0hfU0laRSAxMzEKKyNkZWZpbmUgRlJFRUxJU1RfVE9QIChzaXplb2Yoc3RydWN0IHRkYl9oZWFkZXIpKQorI2RlZmluZSBUREJfQUxJR04oeCxhKSAoKCh4KSArIChhKS0xKSAmIH4oKGEpLTEpKQorI2RlZmluZSBUREJfQllURVJFVih4KSAoKCgoKHgpJjB4ZmYpPDwyNCl8KCh4KSYweEZGMDApPDw4KXwoKCh4KT4+OCkmMHhGRjAwKXwoKHgpPj4yNCkpCisjZGVmaW5lIFREQl9ERUFEKHIpICgociktPm1hZ2ljID09IFREQl9ERUFEX01BR0lDKQorI2RlZmluZSBUREJfQkFEX01BR0lDKHIpICgociktPm1hZ2ljICE9IFREQl9NQUdJQyAmJiAhVERCX0RFQUQocikpCisjZGVmaW5lIFREQl9IQVNIX1RPUChoYXNoKSAoRlJFRUxJU1RfVE9QICsgKEJVQ0tFVChoYXNoKSsxKSpzaXplb2YodGRiX29mZl90KSkKKyNkZWZpbmUgVERCX0hBU0hUQUJMRV9TSVpFKHRkYikgKCh0ZGItPmhlYWRlci5oYXNoX3NpemUrMSkqc2l6ZW9mKHRkYl9vZmZfdCkpCisjZGVmaW5lIFREQl9EQVRBX1NUQVJUKGhhc2hfc2l6ZSkgVERCX0hBU0hfVE9QKGhhc2hfc2l6ZS0xKQorI2RlZmluZSBUREJfUkVDT1ZFUllfSEVBRCBvZmZzZXRvZihzdHJ1Y3QgdGRiX2hlYWRlciwgcmVjb3Zlcnlfc3RhcnQpCisjZGVmaW5lIFREQl9TRVFOVU1fT0ZTICAgIG9mZnNldG9mKHN0cnVjdCB0ZGJfaGVhZGVyLCBzZXF1ZW5jZV9udW1iZXIpCisjZGVmaW5lIFREQl9QQURfQllURSAweDQyCisjZGVmaW5lIFREQl9QQURfVTMyICAweDQyNDI0MjQyCisKKy8qIE5CIGFzc3VtZXMgdGhlcmUgaXMgYSBsb2NhbCB2YXJpYWJsZSBjYWxsZWQgInRkYiIgdGhhdCBpcyB0aGUKKyAqIGN1cnJlbnQgY29udGV4dCwgYWxzbyB0YWtlcyBkb3VibHktcGFyZW50aGVzaXplZCBwcmludC1zdHlsZQorICogYXJndW1lbnQuICovCisjZGVmaW5lIFREQl9MT0coeCkgdGRiLT5sb2cubG9nX2ZuIHgKKworLyogbG9jayBvZmZzZXRzICovCisjZGVmaW5lIEdMT0JBTF9MT0NLICAgICAgMAorI2RlZmluZSBBQ1RJVkVfTE9DSyAgICAgIDQKKyNkZWZpbmUgVFJBTlNBQ1RJT05fTE9DSyA4CisKKy8qIGZyZWUgbWVtb3J5IGlmIHRoZSBwb2ludGVyIGlzIHZhbGlkIGFuZCB6ZXJvIHRoZSBwb2ludGVyICovCisjaWZuZGVmIFNBRkVfRlJFRQorI2RlZmluZSBTQUZFX0ZSRUUoeCkgZG8geyBpZiAoKHgpICE9IE5VTEwpIHtmcmVlKHgpOyAoeCk9TlVMTDt9IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIEJVQ0tFVChoYXNoKSAoKGhhc2gpICUgdGRiLT5oZWFkZXIuaGFzaF9zaXplKQorCisjZGVmaW5lIERPQ09OVigpICh0ZGItPmZsYWdzICYgVERCX0NPTlZFUlQpCisjZGVmaW5lIENPTlZFUlQoeCkgKERPQ09OVigpID8gdGRiX2NvbnZlcnQoJngsIHNpemVvZih4KSkgOiAmeCkKKworCisvKiB0aGUgYm9keSBvZiB0aGUgZGF0YWJhc2UgaXMgbWFkZSBvZiBvbmUgbGlzdF9zdHJ1Y3QgZm9yIHRoZSBmcmVlIHNwYWNlCisgICBwbHVzIGEgc2VwYXJhdGUgZGF0YSBsaXN0IGZvciBlYWNoIGhhc2ggdmFsdWUgKi8KK3N0cnVjdCBsaXN0X3N0cnVjdCB7CisJdGRiX29mZl90IG5leHQ7IC8qIG9mZnNldCBvZiB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIGxpc3QgKi8KKwl0ZGJfbGVuX3QgcmVjX2xlbjsgLyogdG90YWwgYnl0ZSBsZW5ndGggb2YgcmVjb3JkICovCisJdGRiX2xlbl90IGtleV9sZW47IC8qIGJ5dGUgbGVuZ3RoIG9mIGtleSAqLworCXRkYl9sZW5fdCBkYXRhX2xlbjsgLyogYnl0ZSBsZW5ndGggb2YgZGF0YSAqLworCXUzMiBmdWxsX2hhc2g7IC8qIHRoZSBmdWxsIDMyIGJpdCBoYXNoIG9mIHRoZSBrZXkgKi8KKwl1MzIgbWFnaWM7ICAgLyogdHJ5IHRvIGNhdGNoIGVycm9ycyAqLworCS8qIHRoZSBmb2xsb3dpbmcgdW5pb24gaXMgaW1wbGllZDoKKwkJdW5pb24geworCQkJY2hhciByZWNvcmRbcmVjX2xlbl07CisJCQlzdHJ1Y3QgeworCQkJCWNoYXIga2V5W2tleV9sZW5dOworCQkJCWNoYXIgZGF0YVtkYXRhX2xlbl07CisJCQl9CisJCQl1MzIgdG90YWxzaXplOyAodGFpbGVyKQorCQl9CisJKi8KK307CisKKworLyogdGhpcyBpcyBzdG9yZWQgYXQgdGhlIGZyb250IG9mIGV2ZXJ5IGRhdGFiYXNlICovCitzdHJ1Y3QgdGRiX2hlYWRlciB7CisJY2hhciBtYWdpY19mb29kWzMyXTsgLyogZm9yIC9ldGMvbWFnaWMgKi8KKwl1MzIgdmVyc2lvbjsgLyogdmVyc2lvbiBvZiB0aGUgY29kZSAqLworCXUzMiBoYXNoX3NpemU7IC8qIG51bWJlciBvZiBoYXNoIGVudHJpZXMgKi8KKwl0ZGJfb2ZmX3Qgcndsb2NrczsgLyogb2Jzb2xldGUgLSBrZXB0IHRvIGRldGVjdCBvbGQgZm9ybWF0cyAqLworCXRkYl9vZmZfdCByZWNvdmVyeV9zdGFydDsgLyogb2Zmc2V0IG9mIHRyYW5zYWN0aW9uIHJlY292ZXJ5IHJlZ2lvbiAqLworCXRkYl9vZmZfdCBzZXF1ZW5jZV9udW1iZXI7IC8qIHVzZWQgd2hlbiBUREJfU0VRTlVNIGlzIHNldCAqLworCXRkYl9vZmZfdCByZXNlcnZlZFsyOV07Cit9OworCitzdHJ1Y3QgdGRiX2xvY2tfdHlwZSB7CisJaW50IGxpc3Q7CisJdTMyIGNvdW50OworCXUzMiBsdHlwZTsKK307CisKK3N0cnVjdCB0ZGJfdHJhdmVyc2VfbG9jayB7CisJc3RydWN0IHRkYl90cmF2ZXJzZV9sb2NrICpuZXh0OworCXUzMiBvZmY7CisJdTMyIGhhc2g7CisJaW50IGxvY2tfcnc7Cit9OworCisKK3N0cnVjdCB0ZGJfbWV0aG9kcyB7CisJaW50ICgqdGRiX3JlYWQpKHN0cnVjdCB0ZGJfY29udGV4dCAqLCB0ZGJfb2ZmX3QgLCB2b2lkICosIHRkYl9sZW5fdCAsIGludCApOworCWludCAoKnRkYl93cml0ZSkoc3RydWN0IHRkYl9jb250ZXh0ICosIHRkYl9vZmZfdCwgY29uc3Qgdm9pZCAqLCB0ZGJfbGVuX3QpOworCXZvaWQgKCpuZXh0X2hhc2hfY2hhaW4pKHN0cnVjdCB0ZGJfY29udGV4dCAqLCB1MzIgKik7CisJaW50ICgqdGRiX29vYikoc3RydWN0IHRkYl9jb250ZXh0ICosIHRkYl9vZmZfdCAsIGludCApOworCWludCAoKnRkYl9leHBhbmRfZmlsZSkoc3RydWN0IHRkYl9jb250ZXh0ICosIHRkYl9vZmZfdCAsIHRkYl9vZmZfdCApOworCWludCAoKnRkYl9icmxvY2spKHN0cnVjdCB0ZGJfY29udGV4dCAqLCB0ZGJfb2ZmX3QgLCBpbnQsIGludCwgaW50LCBzaXplX3QpOworfTsKKworc3RydWN0IHRkYl9jb250ZXh0IHsKKwljaGFyICpuYW1lOyAvKiB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgKi8KKwl2b2lkICptYXBfcHRyOyAvKiB3aGVyZSBpdCBpcyBjdXJyZW50bHkgbWFwcGVkICovCisJaW50IGZkOyAvKiBvcGVuIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGRhdGFiYXNlICovCisJdGRiX2xlbl90IG1hcF9zaXplOyAvKiBob3cgbXVjaCBzcGFjZSBoYXMgYmVlbiBtYXBwZWQgKi8KKwlpbnQgcmVhZF9vbmx5OyAvKiBvcGVuZWQgcmVhZC1vbmx5ICovCisJaW50IHRyYXZlcnNlX3JlYWQ7IC8qIHJlYWQtb25seSB0cmF2ZXJzYWwgKi8KKwlzdHJ1Y3QgdGRiX2xvY2tfdHlwZSBnbG9iYWxfbG9jazsKKwlpbnQgbnVtX2xvY2tyZWNzOworCXN0cnVjdCB0ZGJfbG9ja190eXBlICpsb2NrcmVjczsgLyogb25seSByZWFsIGxvY2tzLCBhbGwgd2l0aCBjb3VudD4wICovCisJZW51bSBUREJfRVJST1IgZWNvZGU7IC8qIGVycm9yIGNvZGUgZm9yIGxhc3QgdGRiIGVycm9yICovCisJc3RydWN0IHRkYl9oZWFkZXIgaGVhZGVyOyAvKiBhIGNhY2hlZCBjb3B5IG9mIHRoZSBoZWFkZXIgKi8KKwl1MzIgZmxhZ3M7IC8qIHRoZSBmbGFncyBwYXNzZWQgdG8gdGRiX29wZW4gKi8KKwlzdHJ1Y3QgdGRiX3RyYXZlcnNlX2xvY2sgdHJhdmxvY2tzOyAvKiBjdXJyZW50IHRyYXZlcnNhbCBsb2NrcyAqLworCXN0cnVjdCB0ZGJfY29udGV4dCAqbmV4dDsgLyogYWxsIHRkYnMgdG8gYXZvaWQgbXVsdGlwbGUgb3BlbnMgKi8KKwlkZXZfdCBkZXZpY2U7CS8qIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyB0ZGIgKi8KKwlpbm9fdCBpbm9kZTsJLyogdW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIHRkYiAqLworCXN0cnVjdCB0ZGJfbG9nZ2luZ19jb250ZXh0IGxvZzsKKwl1bnNpZ25lZCBpbnQgKCpoYXNoX2ZuKShUREJfREFUQSAqa2V5KTsKKwlpbnQgb3Blbl9mbGFnczsgLyogZmxhZ3MgdXNlZCBpbiB0aGUgb3BlbiAtIG5lZWRlZCBieSByZW9wZW4gKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2xvY2tzOyAvKiBudW1iZXIgb2YgY2hhaW4gbG9ja3MgaGVsZCAqLworCWNvbnN0IHN0cnVjdCB0ZGJfbWV0aG9kcyAqbWV0aG9kczsKKwlzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlpbnQgcGFnZV9zaXplOworCWludCBtYXhfZGVhZF9yZWNvcmRzOworCWJvb2wgaGF2ZV90cmFuc2FjdGlvbl9sb2NrOworfTsKKworCisvKgorICBpbnRlcm5hbCBwcm90b3R5cGVzCisqLworc3RhdGljIGludCB0ZGJfbXVubWFwKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3N0YXRpYyB2b2lkIHRkYl9tbWFwKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3N0YXRpYyBpbnQgdGRiX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsaXN0LCBpbnQgbHR5cGUpOworc3RhdGljIGludCB0ZGJfdW5sb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBpbnQgbGlzdCwgaW50IGx0eXBlKTsKK3N0YXRpYyBpbnQgdGRiX2JybG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgaW50IHJ3X3R5cGUsIGludCBsY2tfdHlwZSwgaW50IHByb2JlLCBzaXplX3QgbGVuKTsKK3N0YXRpYyBpbnQgdGRiX3RyYW5zYWN0aW9uX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsdHlwZSk7CitzdGF0aWMgaW50IHRkYl90cmFuc2FjdGlvbl91bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworc3RhdGljIGludCB0ZGJfYnJsb2NrX3VwZ3JhZGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHNpemVfdCBsZW4pOworc3RhdGljIGludCB0ZGJfd3JpdGVfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworc3RhdGljIGludCB0ZGJfd3JpdGVfdW5sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZik7CitzdGF0aWMgaW50IHRkYl9vZnNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKK3N0YXRpYyBpbnQgdGRiX29mc193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKK3N0YXRpYyB2b2lkICp0ZGJfY29udmVydCh2b2lkICpidWYsIHUzMiBzaXplKTsKK3N0YXRpYyBpbnQgdGRiX2ZyZWUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKK3N0YXRpYyB0ZGJfb2ZmX3QgdGRiX2FsbG9jYXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfbGVuX3QgbGVuZ3RoLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CitzdGF0aWMgaW50IHRkYl9vZnNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKK3N0YXRpYyBpbnQgdGRiX29mc193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKK3N0YXRpYyBpbnQgdGRiX2xvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKK3N0YXRpYyBpbnQgdGRiX3VubG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworc3RhdGljIGludCB0ZGJfcmVjX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKK3N0YXRpYyBpbnQgdGRiX3JlY193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworc3RhdGljIGludCB0ZGJfZG9fZGVsZXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3QgcmVjX3B0ciwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnRkYl9hbGxvY19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfbGVuX3QgbGVuKTsKK3N0YXRpYyBpbnQgdGRiX3BhcnNlX2RhdGEoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwKKwkJICAgdGRiX29mZl90IG9mZnNldCwgdGRiX2xlbl90IGxlbiwKKwkJICAgaW50ICgqcGFyc2VyKShUREJfREFUQSBrZXksIFREQl9EQVRBIGRhdGEsCisJCQkJIHZvaWQgKnByaXZhdGVfZGF0YSksCisJCSAgIHZvaWQgKnByaXZhdGVfZGF0YSk7CitzdGF0aWMgdGRiX29mZl90IHRkYl9maW5kX2xvY2tfaGFzaChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LCB1MzIgaGFzaCwgaW50IGxvY2t0eXBlLAorCQkJICAgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworc3RhdGljIHZvaWQgdGRiX2lvX2luaXQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworc3RhdGljIGludCB0ZGJfZXhwYW5kKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgc2l6ZSk7CitzdGF0aWMgaW50IHRkYl9yZWNfZnJlZV9yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CisKKworLyogZmlsZTogZXJyb3IuYyAqLworCitlbnVtIFREQl9FUlJPUiB0ZGJfZXJyb3Ioc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIHRkYi0+ZWNvZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGRiX2Vycm5hbWUgeworCWVudW0gVERCX0VSUk9SIGVjb2RlOyBjb25zdCBjaGFyICplc3RyaW5nOworfSBlbWFwW10gPSB7IHtUREJfU1VDQ0VTUywgIlN1Y2Nlc3MifSwKKwkgICAgIHtUREJfRVJSX0NPUlJVUFQsICJDb3JydXB0IGRhdGFiYXNlIn0sCisJICAgICB7VERCX0VSUl9JTywgIklPIEVycm9yIn0sCisJICAgICB7VERCX0VSUl9MT0NLLCAiTG9ja2luZyBlcnJvciJ9LAorCSAgICAge1REQl9FUlJfT09NLCAiT3V0IG9mIG1lbW9yeSJ9LAorCSAgICAge1REQl9FUlJfRVhJU1RTLCAiUmVjb3JkIGV4aXN0cyJ9LAorCSAgICAge1REQl9FUlJfTk9MT0NLLCAiTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyJ9LAorCSAgICAge1REQl9FUlJfRUlOVkFMLCAiSW52YWxpZCBwYXJhbWV0ZXIifSwKKwkgICAgIHtUREJfRVJSX05PRVhJU1QsICJSZWNvcmQgZG9lcyBub3QgZXhpc3QifSwKKwkgICAgIHtUREJfRVJSX1JET05MWSwgIndyaXRlIG5vdCBwZXJtaXR0ZWQifSB9OworCisvKiBFcnJvciBzdHJpbmcgZm9yIHRoZSBsYXN0IHRkYiBlcnJvciAqLworY29uc3QgY2hhciAqdGRiX2Vycm9yc3RyKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXUzMiBpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZW1hcCkgLyBzaXplb2Yoc3RydWN0IHRkYl9lcnJuYW1lKTsgaSsrKQorCQlpZiAodGRiLT5lY29kZSA9PSBlbWFwW2ldLmVjb2RlKQorCQkJcmV0dXJuIGVtYXBbaV0uZXN0cmluZzsKKwlyZXR1cm4gIkludmFsaWQgZXJyb3IgY29kZSI7Cit9CisKKy8qIGZpbGU6IGxvY2suYyAqLworCisjZGVmaW5lIFREQl9NQVJLX0xPQ0sgMHg4MDAwMDAwMAorCisvKiBhIGJ5dGUgcmFuZ2UgbG9ja2luZyBmdW5jdGlvbiAtIHJldHVybiAwIG9uIHN1Y2Nlc3MKKyAgIHRoaXMgZnVuY3Rpb25zIGxvY2tzL3VubG9ja3MgMSBieXRlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgorCisgICBPbiBlcnJvciwgZXJybm8gaXMgYWxzbyBzZXQgc28gdGhhdCBlcnJvcnMgYXJlIHBhc3NlZCBiYWNrIHByb3Blcmx5CisgICB0aHJvdWdoIHRkYl9vcGVuKCkuCisKKyAgIG5vdGUgdGhhdCBhIGxlbiBvZiB6ZXJvIG1lYW5zIGxvY2sgdG8gZW5kIG9mIGZpbGUKKyovCitpbnQgdGRiX2JybG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwKKwkgICAgICAgaW50IHJ3X3R5cGUsIGludCBsY2tfdHlwZSwgaW50IHByb2JlLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBmbG9jayBmbDsKKwlpbnQgcmV0OworCisJaWYgKHRkYi0+ZmxhZ3MgJiBUREJfTk9MT0NLKSB7CisJCXJldHVybiAwOworCX0KKworCWlmICgocndfdHlwZSA9PSBGX1dSTENLKSAmJiAodGRiLT5yZWFkX29ubHkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKSkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9SRE9OTFk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmbC5sX3R5cGUgPSByd190eXBlOworCWZsLmxfd2hlbmNlID0gU0VFS19TRVQ7CisJZmwubF9zdGFydCA9IG9mZnNldDsKKwlmbC5sX2xlbiA9IGxlbjsKKwlmbC5sX3BpZCA9IDA7CisKKwlkbyB7CisJCXJldCA9IGZjbnRsKHRkYi0+ZmQsbGNrX3R5cGUsJmZsKTsKKwl9IHdoaWxlIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisJaWYgKHJldCA9PSAtMSkgeworCQkvKiBHZW5lcmljIGxvY2sgZXJyb3IuIGVycm5vIHNldCBieSBmY250bC4KKwkJICogRUFHQUlOIGlzIGFuIGV4cGVjdGVkIHJldHVybiBmcm9tIG5vbi1ibG9ja2luZworCQkgKiBsb2Nrcy4gKi8KKwkJaWYgKCFwcm9iZSAmJiBsY2tfdHlwZSAhPSBGX1NFVExLKSB7CisJCQkvKiBFbnN1cmUgZXJyb3IgY29kZSBpcyBzZXQgZm9yIGxvZyBmdW4gdG8gZXhhbWluZS4gKi8KKwkJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0xPQ0s7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19UUkFDRSwidGRiX2JybG9jayBmYWlsZWQgKGZkPSVkKSBhdCBvZmZzZXQgJWQgcndfdHlwZT0lZCBsY2tfdHlwZT0lZCBsZW49JWRcbiIsCisJCQkJIHRkYi0+ZmQsIG9mZnNldCwgcndfdHlwZSwgbGNrX3R5cGUsIChpbnQpbGVuKSk7CisJCX0KKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfTE9DSywgLTEpOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKgorICB1cGdyYWRlIGEgcmVhZCBsb2NrIHRvIGEgd3JpdGUgbG9jay4gVGhpcyBuZWVkcyB0byBiZSBoYW5kbGVkIGluIGEKKyAgc3BlY2lhbCB3YXkgYXMgc29tZSBPU2VzIChzdWNoIGFzIHNvbGFyaXMpIGhhdmUgdG9vIGNvbnNlcnZhdGl2ZQorICBkZWFkbG9jayBkZXRlY3Rpb24gYW5kIGNsYWltIGEgZGVhZGxvY2sgd2hlbiBwcm9ncmVzcyBjYW4gYmUKKyAgbWFkZS4gRm9yIHRob3NlIE9TZXMgd2UgbWF5IGxvb3AgZm9yIGEgd2hpbGUuCisqLworaW50IHRkYl9icmxvY2tfdXBncmFkZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgY291bnQgPSAxMDAwOworCXdoaWxlIChjb3VudC0tKSB7CisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlpZiAodGRiX2JybG9jayh0ZGIsIG9mZnNldCwgRl9XUkxDSywgRl9TRVRMS1csIDEsIGxlbikgPT0gMCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGVycm5vICE9IEVERUFETEspIHsKKwkJCWJyZWFrOworCQl9CisJCS8qIHNsZWVwIGZvciBhcyBzaG9ydCBhIHRpbWUgYXMgd2UgY2FuIC0gbW9yZSBwb3J0YWJsZSB0aGFuIHVzbGVlcCgpICovCisJCXR2LnR2X3NlYyA9IDA7CisJCXR2LnR2X3VzZWMgPSAxOworCQlzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVMTCwgJnR2KTsKKwl9CisJVERCX0xPRygodGRiLCBUREJfREVCVUdfVFJBQ0UsInRkYl9icmxvY2tfdXBncmFkZSBmYWlsZWQgYXQgb2Zmc2V0ICVkXG4iLCBvZmZzZXQpKTsKKwlyZXR1cm4gLTE7Cit9CisKKworLyogbG9jayBhIGxpc3QgaW4gdGhlIGRhdGFiYXNlLiBsaXN0IC0xIGlzIHRoZSBhbGxvYyBsaXN0ICovCitzdGF0aWMgaW50IF90ZGJfbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSwgaW50IG9wKQoreworCXN0cnVjdCB0ZGJfbG9ja190eXBlICpuZXdfbGNrOworCWludCBpOworCWJvb2wgbWFya19sb2NrID0gKChsdHlwZSAmIFREQl9NQVJLX0xPQ0spID09IFREQl9NQVJLX0xPQ0spOworCisJbHR5cGUgJj0gflREQl9NQVJLX0xPQ0s7CisKKwkvKiBhIGdsb2JhbCBsb2NrIGFsbG93cyB1cyB0byBhdm9pZCBwZXIgY2hhaW4gbG9ja3MgKi8KKwlpZiAodGRiLT5nbG9iYWxfbG9jay5jb3VudCAmJgorCSAgICAobHR5cGUgPT0gdGRiLT5nbG9iYWxfbG9jay5sdHlwZSB8fCBsdHlwZSA9PSBGX1JETENLKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodGRiLT5nbG9iYWxfbG9jay5jb3VudCkgeworCQlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9MT0NLLCAtMSk7CisJfQorCisJaWYgKGxpc3QgPCAtMSB8fCBsaXN0ID49IChpbnQpdGRiLT5oZWFkZXIuaGFzaF9zaXplKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCJ0ZGJfbG9jazogaW52YWxpZCBsaXN0ICVkIGZvciBsdHlwZT0lZFxuIiwKKwkJCSAgIGxpc3QsIGx0eXBlKSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHRkYi0+ZmxhZ3MgJiBUREJfTk9MT0NLKQorCQlyZXR1cm4gMDsKKworCWZvciAoaT0wOyBpPHRkYi0+bnVtX2xvY2tyZWNzOyBpKyspIHsKKwkJaWYgKHRkYi0+bG9ja3JlY3NbaV0ubGlzdCA9PSBsaXN0KSB7CisJCQlpZiAodGRiLT5sb2NrcmVjc1tpXS5jb3VudCA9PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBDYW4ndCBoYXBwZW4sIHNlZSB0ZGJfdW5sb2NrKCkuIEl0IHNob3VsZAorCQkJCSAqIGJlIGFuIGFzc2VydC4KKwkJCQkgKi8KKwkJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9sb2NrOiAiCisJCQkJCSAibGNrLT5jb3VudCA9PSAwIGZvciBsaXN0ICVkIiwgbGlzdCkpOworCQkJfQorCQkJLyoKKwkJCSAqIEp1c3QgaW5jcmVtZW50IHRoZSBpbi1tZW1vcnkgc3RydWN0LCBwb3NpeCBsb2NrcworCQkJICogZG9uJ3Qgc3RhY2suCisJCQkgKi8KKwkJCXRkYi0+bG9ja3JlY3NbaV0uY291bnQrKzsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJbmV3X2xjayA9IChzdHJ1Y3QgdGRiX2xvY2tfdHlwZSAqKXJlYWxsb2MoCisJCXRkYi0+bG9ja3JlY3MsCisJCXNpemVvZigqdGRiLT5sb2NrcmVjcykgKiAodGRiLT5udW1fbG9ja3JlY3MrMSkpOworCWlmIChuZXdfbGNrID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAtMTsKKwl9CisJdGRiLT5sb2NrcmVjcyA9IG5ld19sY2s7CisKKwkvKiBTaW5jZSBmY250bCBsb2NrcyBkb24ndCBuZXN0LCB3ZSBkbyBhIGxvY2sgZm9yIHRoZSBmaXJzdCBvbmUsCisJICAgYW5kIHNpbXBseSBidW1wIHRoZSBjb3VudCBmb3IgZnV0dXJlIG9uZXMgKi8KKwlpZiAoIW1hcmtfbG9jayAmJgorCSAgICB0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLEZSRUVMSVNUX1RPUCs0Kmxpc3QsIGx0eXBlLCBvcCwKKwkJCQkgICAgIDAsIDEpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZGItPm51bV9sb2NrcysrOworCisJdGRiLT5sb2NrcmVjc1t0ZGItPm51bV9sb2NrcmVjc10ubGlzdCA9IGxpc3Q7CisJdGRiLT5sb2NrcmVjc1t0ZGItPm51bV9sb2NrcmVjc10uY291bnQgPSAxOworCXRkYi0+bG9ja3JlY3NbdGRiLT5udW1fbG9ja3JlY3NdLmx0eXBlID0gbHR5cGU7CisJdGRiLT5udW1fbG9ja3JlY3MgKz0gMTsKKworCXJldHVybiAwOworfQorCisvKiBsb2NrIGEgbGlzdCBpbiB0aGUgZGF0YWJhc2UuIGxpc3QgLTEgaXMgdGhlIGFsbG9jIGxpc3QgKi8KK2ludCB0ZGJfbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSkKK3sKKwlpbnQgcmV0OworCXJldCA9IF90ZGJfbG9jayh0ZGIsIGxpc3QsIGx0eXBlLCBGX1NFVExLVyk7CisJaWYgKHJldCkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9sb2NrIGZhaWxlZCBvbiBsaXN0ICVkICIKKwkJCSAibHR5cGU9JWQgKCVzKVxuIiwgIGxpc3QsIGx0eXBlLCBzdHJlcnJvcihlcnJubykpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogbG9jayBhIGxpc3QgaW4gdGhlIGRhdGFiYXNlLiBsaXN0IC0xIGlzIHRoZSBhbGxvYyBsaXN0LiBub24tYmxvY2tpbmcgbG9jayAqLworaW50IHRkYl9sb2NrX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBpbnQgbGlzdCwgaW50IGx0eXBlKQoreworCXJldHVybiBfdGRiX2xvY2sodGRiLCBsaXN0LCBsdHlwZSwgRl9TRVRMSyk7Cit9CisKKworLyogdW5sb2NrIHRoZSBkYXRhYmFzZTogcmV0dXJucyB2b2lkIGJlY2F1c2UgaXQncyB0b28gbGF0ZSBmb3IgZXJyb3JzLiAqLworCS8qIGNoYW5nZWQgdG8gcmV0dXJuIGludCBpdCBtYXkgYmUgaW50ZXJlc3RpbmcgdG8ga25vdyB0aGVyZQorCSAgIGhhcyBiZWVuIGFuIGVycm9yICAtLXNpbW8gKi8KK2ludCB0ZGJfdW5sb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBpbnQgbGlzdCwgaW50IGx0eXBlKQoreworCWludCByZXQgPSAtMTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdGRiX2xvY2tfdHlwZSAqbGNrID0gTlVMTDsKKwlib29sIG1hcmtfbG9jayA9ICgobHR5cGUgJiBUREJfTUFSS19MT0NLKSA9PSBUREJfTUFSS19MT0NLKTsKKworCWx0eXBlICY9IH5UREJfTUFSS19MT0NLOworCisJLyogYSBnbG9iYWwgbG9jayBhbGxvd3MgdXMgdG8gYXZvaWQgcGVyIGNoYWluIGxvY2tzICovCisJaWYgKHRkYi0+Z2xvYmFsX2xvY2suY291bnQgJiYKKwkgICAgKGx0eXBlID09IHRkYi0+Z2xvYmFsX2xvY2subHR5cGUgfHwgbHR5cGUgPT0gRl9SRExDSykpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRkYi0+Z2xvYmFsX2xvY2suY291bnQpIHsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfTE9DSywgLTEpOworCX0KKworCWlmICh0ZGItPmZsYWdzICYgVERCX05PTE9DSykKKwkJcmV0dXJuIDA7CisKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKGxpc3QgPCAtMSB8fCBsaXN0ID49IChpbnQpdGRiLT5oZWFkZXIuaGFzaF9zaXplKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3VubG9jazogbGlzdCAlZCBpbnZhbGlkICglZClcbiIsIGxpc3QsIHRkYi0+aGVhZGVyLmhhc2hfc2l6ZSkpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaT0wOyBpPHRkYi0+bnVtX2xvY2tyZWNzOyBpKyspIHsKKwkJaWYgKHRkYi0+bG9ja3JlY3NbaV0ubGlzdCA9PSBsaXN0KSB7CisJCQlsY2sgPSAmdGRiLT5sb2NrcmVjc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKChsY2sgPT0gTlVMTCkgfHwgKGxjay0+Y291bnQgPT0gMCkpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfdW5sb2NrOiBjb3VudCBpcyAwXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobGNrLT5jb3VudCA+IDEpIHsKKwkJbGNrLT5jb3VudC0tOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFRoaXMgbG9jayBoYXMgY291bnQ9PTEgbGVmdCwgc28gd2UgbmVlZCB0byB1bmxvY2sgaXQgaW4gdGhlCisJICoga2VybmVsLiBXZSBkb24ndCBib3RoZXIgd2l0aCBkZWNyZW1lbnRpbmcgdGhlIGluLW1lbW9yeSBhcnJheQorCSAqIGVsZW1lbnQsIHdlJ3JlIGFib3V0IHRvIG92ZXJ3cml0ZSBpdCB3aXRoIHRoZSBsYXN0IGFycmF5IGVsZW1lbnQKKwkgKiBhbnl3YXkuCisJICovCisKKwlpZiAobWFya19sb2NrKSB7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0ID0gdGRiLT5tZXRob2RzLT50ZGJfYnJsb2NrKHRkYiwgRlJFRUxJU1RfVE9QKzQqbGlzdCwgRl9VTkxDSywKKwkJCQkJICAgICAgIEZfU0VUTEtXLCAwLCAxKTsKKwl9CisJdGRiLT5udW1fbG9ja3MtLTsKKworCS8qCisJICogU2hyaW5rIHRoZSBhcnJheSBieSBvdmVyd3JpdGluZyB0aGUgZWxlbWVudCBqdXN0IHVubG9ja2VkIHdpdGggdGhlCisJICogbGFzdCBhcnJheSBlbGVtZW50LgorCSAqLworCisJaWYgKHRkYi0+bnVtX2xvY2tyZWNzID4gMSkgeworCQkqbGNrID0gdGRiLT5sb2NrcmVjc1t0ZGItPm51bV9sb2NrcmVjcy0xXTsKKwl9CisJdGRiLT5udW1fbG9ja3JlY3MgLT0gMTsKKworCS8qCisJICogV2UgZG9uJ3QgYm90aGVyIHdpdGggcmVhbGxvYyB3aGVuIHRoZSBhcnJheSBzaHJpbmtzLCBidXQgaWYgd2UgaGF2ZQorCSAqIGEgY29tcGxldGVseSBpZGxlIHRkYiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgbG9ja2VkIGFycmF5LgorCSAqLworCisJaWYgKHRkYi0+bnVtX2xvY2tyZWNzID09IDApIHsKKwkJU0FGRV9GUkVFKHRkYi0+bG9ja3JlY3MpOworCX0KKworCWlmIChyZXQpCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3VubG9jazogQW4gZXJyb3Igb2NjdXJyZWQgdW5sb2NraW5nIVxuIikpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgIGdldCB0aGUgdHJhbnNhY3Rpb24gbG9jaworICovCitpbnQgdGRiX3RyYW5zYWN0aW9uX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsdHlwZSkKK3sKKwlpZiAodGRiLT5oYXZlX3RyYW5zYWN0aW9uX2xvY2sgfHwgdGRiLT5nbG9iYWxfbG9jay5jb3VudCkgeworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX2JybG9jayh0ZGIsIFRSQU5TQUNUSU9OX0xPQ0ssIGx0eXBlLAorCQkJCSAgICAgRl9TRVRMS1csIDAsIDEpID09IC0xKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3RyYW5zYWN0aW9uX2xvY2s6IGZhaWxlZCB0byBnZXQgdHJhbnNhY3Rpb24gbG9ja1xuIikpOworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9MT0NLOworCQlyZXR1cm4gLTE7CisJfQorCXRkYi0+aGF2ZV90cmFuc2FjdGlvbl9sb2NrID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgcmVsZWFzZSB0aGUgdHJhbnNhY3Rpb24gbG9jaworICovCitpbnQgdGRiX3RyYW5zYWN0aW9uX3VubG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlpbnQgcmV0OworCWlmICghdGRiLT5oYXZlX3RyYW5zYWN0aW9uX2xvY2spIHsKKwkJcmV0dXJuIDA7CisJfQorCXJldCA9IHRkYi0+bWV0aG9kcy0+dGRiX2JybG9jayh0ZGIsIFRSQU5TQUNUSU9OX0xPQ0ssIEZfVU5MQ0ssIEZfU0VUTEtXLCAwLCAxKTsKKwlpZiAocmV0ID09IDApIHsKKwkJdGRiLT5oYXZlX3RyYW5zYWN0aW9uX2xvY2sgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCisKKworCisvKiBsb2NrL3VubG9jayBlbnRpcmUgZGF0YWJhc2UgKi8KK3N0YXRpYyBpbnQgX3RkYl9sb2NrYWxsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBpbnQgbHR5cGUsIGludCBvcCkKK3sKKwlib29sIG1hcmtfbG9jayA9ICgobHR5cGUgJiBUREJfTUFSS19MT0NLKSA9PSBUREJfTUFSS19MT0NLKTsKKworCWx0eXBlICY9IH5UREJfTUFSS19MT0NLOworCisJLyogVGhlcmUgYXJlIG5vIGxvY2tzIG9uIHJlYWQtb25seSBkYnMgKi8KKwlpZiAodGRiLT5yZWFkX29ubHkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKQorCQlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9MT0NLLCAtMSk7CisKKwlpZiAodGRiLT5nbG9iYWxfbG9jay5jb3VudCAmJiB0ZGItPmdsb2JhbF9sb2NrLmx0eXBlID09IGx0eXBlKSB7CisJCXRkYi0+Z2xvYmFsX2xvY2suY291bnQrKzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRkYi0+Z2xvYmFsX2xvY2suY291bnQpIHsKKwkJLyogYSBnbG9iYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlIGV4aXN0cyAqLworCQlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9MT0NLLCAtMSk7CisJfQorCisJaWYgKHRkYi0+bnVtX2xvY2tzICE9IDApIHsKKwkJLyogY2FuJ3QgY29tYmluZSBnbG9iYWwgYW5kIGNoYWluIGxvY2tzICovCisJCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX0xPQ0ssIC0xKTsKKwl9CisKKwlpZiAoIW1hcmtfbG9jayAmJgorCSAgICB0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLCBGUkVFTElTVF9UT1AsIGx0eXBlLCBvcCwKKwkJCQkgICAgIDAsIDQqdGRiLT5oZWFkZXIuaGFzaF9zaXplKSkgeworCQlpZiAob3AgPT0gRl9TRVRMS1cpIHsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX2xvY2thbGwgZmFpbGVkICglcylcbiIsIHN0cmVycm9yKGVycm5vKSkpOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZGItPmdsb2JhbF9sb2NrLmNvdW50ID0gMTsKKwl0ZGItPmdsb2JhbF9sb2NrLmx0eXBlID0gbHR5cGU7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qIHVubG9jayBlbnRpcmUgZGIgKi8KK3N0YXRpYyBpbnQgX3RkYl91bmxvY2thbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsdHlwZSkKK3sKKwlib29sIG1hcmtfbG9jayA9ICgobHR5cGUgJiBUREJfTUFSS19MT0NLKSA9PSBUREJfTUFSS19MT0NLKTsKKworCWx0eXBlICY9IH5UREJfTUFSS19MT0NLOworCisJLyogVGhlcmUgYXJlIG5vIGxvY2tzIG9uIHJlYWQtb25seSBkYnMgKi8KKwlpZiAodGRiLT5yZWFkX29ubHkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKSB7CisJCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX0xPQ0ssIC0xKTsKKwl9CisKKwlpZiAodGRiLT5nbG9iYWxfbG9jay5sdHlwZSAhPSBsdHlwZSB8fCB0ZGItPmdsb2JhbF9sb2NrLmNvdW50ID09IDApIHsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfTE9DSywgLTEpOworCX0KKworCWlmICh0ZGItPmdsb2JhbF9sb2NrLmNvdW50ID4gMSkgeworCQl0ZGItPmdsb2JhbF9sb2NrLmNvdW50LS07CisJCXJldHVybiAwOworCX0KKworCWlmICghbWFya19sb2NrICYmCisJICAgIHRkYi0+bWV0aG9kcy0+dGRiX2JybG9jayh0ZGIsIEZSRUVMSVNUX1RPUCwgRl9VTkxDSywgRl9TRVRMS1csCisJCQkJICAgICAwLCA0KnRkYi0+aGVhZGVyLmhhc2hfc2l6ZSkpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfdW5sb2NrYWxsIGZhaWxlZCAoJXMpXG4iLCBzdHJlcnJvcihlcnJubykpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRkYi0+Z2xvYmFsX2xvY2suY291bnQgPSAwOworCXRkYi0+Z2xvYmFsX2xvY2subHR5cGUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGxvY2sgZW50aXJlIGRhdGFiYXNlIHdpdGggd3JpdGUgbG9jayAqLworaW50IHRkYl9sb2NrYWxsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXJldHVybiBfdGRiX2xvY2thbGwodGRiLCBGX1dSTENLLCBGX1NFVExLVyk7Cit9CisKKy8qIGxvY2sgZW50aXJlIGRhdGFiYXNlIHdpdGggd3JpdGUgbG9jayAtIG1hcmsgb25seSAqLworaW50IHRkYl9sb2NrYWxsX21hcmsoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIF90ZGJfbG9ja2FsbCh0ZGIsIEZfV1JMQ0sgfCBUREJfTUFSS19MT0NLLCBGX1NFVExLVyk7Cit9CisKKy8qIHVubG9jayBlbnRpcmUgZGF0YWJhc2Ugd2l0aCB3cml0ZSBsb2NrIC0gdW5tYXJrIG9ubHkgKi8KK2ludCB0ZGJfbG9ja2FsbF91bm1hcmsoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIF90ZGJfdW5sb2NrYWxsKHRkYiwgRl9XUkxDSyB8IFREQl9NQVJLX0xPQ0spOworfQorCisvKiBsb2NrIGVudGlyZSBkYXRhYmFzZSB3aXRoIHdyaXRlIGxvY2sgLSBub25ibG9ja2luZyB2YXJpZW50ICovCitpbnQgdGRiX2xvY2thbGxfbm9uYmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIF90ZGJfbG9ja2FsbCh0ZGIsIEZfV1JMQ0ssIEZfU0VUTEspOworfQorCisvKiB1bmxvY2sgZW50aXJlIGRhdGFiYXNlIHdpdGggd3JpdGUgbG9jayAqLworaW50IHRkYl91bmxvY2thbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIF90ZGJfdW5sb2NrYWxsKHRkYiwgRl9XUkxDSyk7Cit9CisKKy8qIGxvY2sgZW50aXJlIGRhdGFiYXNlIHdpdGggcmVhZCBsb2NrICovCitpbnQgdGRiX2xvY2thbGxfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlyZXR1cm4gX3RkYl9sb2NrYWxsKHRkYiwgRl9SRExDSywgRl9TRVRMS1cpOworfQorCisvKiBsb2NrIGVudGlyZSBkYXRhYmFzZSB3aXRoIHJlYWQgbG9jayAtIG5vbmJsb2NrIHZhcmllbnQgKi8KK2ludCB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXJldHVybiBfdGRiX2xvY2thbGwodGRiLCBGX1JETENLLCBGX1NFVExLKTsKK30KKworLyogdW5sb2NrIGVudGlyZSBkYXRhYmFzZSB3aXRoIHJlYWQgbG9jayAqLworaW50IHRkYl91bmxvY2thbGxfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlyZXR1cm4gX3RkYl91bmxvY2thbGwodGRiLCBGX1JETENLKTsKK30KKworLyogbG9jay91bmxvY2sgb25lIGhhc2ggY2hhaW4uIFRoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCB0byByZWR1Y2UKKyAgIGNvbnRlbnRpb24gLSBpdCBjYW5ub3QgZ3VhcmFudGVlIGhvdyBtYW55IHJlY29yZHMgd2lsbCBiZSBsb2NrZWQgKi8KK2ludCB0ZGJfY2hhaW5sb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpCit7CisJcmV0dXJuIHRkYl9sb2NrKHRkYiwgQlVDS0VUKHRkYi0+aGFzaF9mbigma2V5KSksIEZfV1JMQ0spOworfQorCisvKiBsb2NrL3VubG9jayBvbmUgaGFzaCBjaGFpbiwgbm9uLWJsb2NraW5nLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKKyAgIHRvIHJlZHVjZSBjb250ZW50aW9uIC0gaXQgY2Fubm90IGd1YXJhbnRlZSBob3cgbWFueSByZWNvcmRzIHdpbGwgYmUKKyAgIGxvY2tlZCAqLworaW50IHRkYl9jaGFpbmxvY2tfbm9uYmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSkKK3sKKwlyZXR1cm4gdGRiX2xvY2tfbm9uYmxvY2sodGRiLCBCVUNLRVQodGRiLT5oYXNoX2ZuKCZrZXkpKSwgRl9XUkxDSyk7Cit9CisKKy8qIG1hcmsgYSBjaGFpbiBhcyBsb2NrZWQgd2l0aG91dCBhY3R1YWxseSBsb2NraW5nIGl0LiBXYXJuaW5nISB1c2Ugd2l0aCBncmVhdCBjYXV0aW9uISAqLworaW50IHRkYl9jaGFpbmxvY2tfbWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KQoreworCXJldHVybiB0ZGJfbG9jayh0ZGIsIEJVQ0tFVCh0ZGItPmhhc2hfZm4oJmtleSkpLCBGX1dSTENLIHwgVERCX01BUktfTE9DSyk7Cit9CisKKy8qIHVubWFyayBhIGNoYWluIGFzIGxvY2tlZCB3aXRob3V0IGFjdHVhbGx5IGxvY2tpbmcgaXQuIFdhcm5pbmchIHVzZSB3aXRoIGdyZWF0IGNhdXRpb24hICovCitpbnQgdGRiX2NoYWlubG9ja191bm1hcmsoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSkKK3sKKwlyZXR1cm4gdGRiX3VubG9jayh0ZGIsIEJVQ0tFVCh0ZGItPmhhc2hfZm4oJmtleSkpLCBGX1dSTENLIHwgVERCX01BUktfTE9DSyk7Cit9CisKK2ludCB0ZGJfY2hhaW51bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSkKK3sKKwlyZXR1cm4gdGRiX3VubG9jayh0ZGIsIEJVQ0tFVCh0ZGItPmhhc2hfZm4oJmtleSkpLCBGX1dSTENLKTsKK30KKworaW50IHRkYl9jaGFpbmxvY2tfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KQoreworCXJldHVybiB0ZGJfbG9jayh0ZGIsIEJVQ0tFVCh0ZGItPmhhc2hfZm4oJmtleSkpLCBGX1JETENLKTsKK30KKworaW50IHRkYl9jaGFpbnVubG9ja19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpCit7CisJcmV0dXJuIHRkYl91bmxvY2sodGRiLCBCVUNLRVQodGRiLT5oYXNoX2ZuKCZrZXkpKSwgRl9SRExDSyk7Cit9CisKKworCisvKiByZWNvcmQgbG9jayBzdG9wcyBkZWxldGUgdW5kZXJuZWF0aCAqLworaW50IHRkYl9sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZikKK3sKKwlyZXR1cm4gb2ZmID8gdGRiLT5tZXRob2RzLT50ZGJfYnJsb2NrKHRkYiwgb2ZmLCBGX1JETENLLCBGX1NFVExLVywgMCwgMSkgOiAwOworfQorCisvKgorICBXcml0ZSBsb2NrcyBvdmVycmlkZSBvdXIgb3duIGZjbnRsIHJlYWRsb2Nrcywgc28gY2hlY2sgaXQgaGVyZS4KKyAgTm90ZSB0aGlzIGlzIG1lYW50IHRvIGJlIEZfU0VUTEssICpub3QqIEZfU0VUTEtXLCBhcyBpdCdzIG5vdAorICBhbiBlcnJvciB0byBmYWlsIHRvIGdldCB0aGUgbG9jayBoZXJlLgorKi8KK2ludCB0ZGJfd3JpdGVfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpCit7CisJc3RydWN0IHRkYl90cmF2ZXJzZV9sb2NrICppOworCWZvciAoaSA9ICZ0ZGItPnRyYXZsb2NrczsgaTsgaSA9IGktPm5leHQpCisJCWlmIChpLT5vZmYgPT0gb2ZmKQorCQkJcmV0dXJuIC0xOworCXJldHVybiB0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLCBvZmYsIEZfV1JMQ0ssIEZfU0VUTEssIDEsIDEpOworfQorCisvKgorICBOb3RlIHRoaXMgaXMgbWVhbnQgdG8gYmUgRl9TRVRMSywgKm5vdCogRl9TRVRMS1csIGFzIGl0J3Mgbm90CisgIGFuIGVycm9yIHRvIGZhaWwgdG8gZ2V0IHRoZSBsb2NrIGhlcmUuCisqLworaW50IHRkYl93cml0ZV91bmxvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKQoreworCXJldHVybiB0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLCBvZmYsIEZfVU5MQ0ssIEZfU0VUTEssIDAsIDEpOworfQorCisvKiBmY250bCBsb2NrcyBkb24ndCBzdGFjazogYXZvaWQgdW5sb2NraW5nIHNvbWVvbmUgZWxzZSdzICovCitpbnQgdGRiX3VubG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpCit7CisJc3RydWN0IHRkYl90cmF2ZXJzZV9sb2NrICppOworCXUzMiBjb3VudCA9IDA7CisKKwlpZiAob2ZmID09IDApCisJCXJldHVybiAwOworCWZvciAoaSA9ICZ0ZGItPnRyYXZsb2NrczsgaTsgaSA9IGktPm5leHQpCisJCWlmIChpLT5vZmYgPT0gb2ZmKQorCQkJY291bnQrKzsKKwlyZXR1cm4gKGNvdW50ID09IDEgPyB0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLCBvZmYsIEZfVU5MQ0ssIEZfU0VUTEtXLCAwLCAxKSA6IDApOworfQorCisvKiBmaWxlOiBpby5jICovCisKKy8qIGNoZWNrIGZvciBhbiBvdXQgb2YgYm91bmRzIGFjY2VzcyAtIGlmIGl0IGlzIG91dCBvZiBib3VuZHMgdGhlbgorICAgc2VlIGlmIHRoZSBkYXRhYmFzZSBoYXMgYmVlbiBleHBhbmRlZCBieSBzb21lb25lIGVsc2UgYW5kIGV4cGFuZAorICAgaWYgbmVjZXNzYXJ5CisgICBub3RlIHRoYXQgImxlbiIgaXMgdGhlIG1pbmltdW0gbGVuZ3RoIG5lZWRlZCBmb3IgdGhlIGRiCisqLworc3RhdGljIGludCB0ZGJfb29iKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3QgbGVuLCBpbnQgcHJvYmUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGxlbiA8PSB0ZGItPm1hcF9zaXplKQorCQlyZXR1cm4gMDsKKwlpZiAodGRiLT5mbGFncyAmIFREQl9JTlRFUk5BTCkgeworCQlpZiAoIXByb2JlKSB7CisJCQkvKiBFbnN1cmUgZWNvZGUgaXMgc2V0IGZvciBsb2cgZm4uICovCisJCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCJ0ZGJfb29iIGxlbiAlZCBiZXlvbmQgaW50ZXJuYWwgbWFsbG9jIHNpemUgJWRcbiIsCisJCQkJIChpbnQpbGVuLCAoaW50KXRkYi0+bWFwX3NpemUpKTsKKwkJfQorCQlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9JTywgLTEpOworCX0KKworCWlmIChmc3RhdCh0ZGItPmZkLCAmc3QpID09IC0xKSB7CisJCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX0lPLCAtMSk7CisJfQorCisJaWYgKHN0LnN0X3NpemUgPCAoc2l6ZV90KWxlbikgeworCQlpZiAoIXByb2JlKSB7CisJCQkvKiBFbnN1cmUgZWNvZGUgaXMgc2V0IGZvciBsb2cgZm4uICovCisJCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCJ0ZGJfb29iIGxlbiAlZCBiZXlvbmQgZW9mIGF0ICVkXG4iLAorCQkJCSAoaW50KWxlbiwgKGludClzdC5zdF9zaXplKSk7CisJCX0KKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfSU8sIC0xKTsKKwl9CisKKwkvKiBVbm1hcCwgdXBkYXRlIHNpemUsIHJlbWFwICovCisJaWYgKHRkYl9tdW5tYXAodGRiKSA9PSAtMSkKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfSU8sIC0xKTsKKwl0ZGItPm1hcF9zaXplID0gc3Quc3Rfc2l6ZTsKKwl0ZGJfbW1hcCh0ZGIpOworCXJldHVybiAwOworfQorCisvKiB3cml0ZSBhIGx1bXAgb2YgZGF0YSBhdCBhIHNwZWNpZmllZCBvZmZzZXQgKi8KK3N0YXRpYyBpbnQgdGRiX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmLAorCQkgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgdGRiX2xlbl90IGxlbikKK3sKKwlpZiAobGVuID09IDApIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRkYi0+cmVhZF9vbmx5IHx8IHRkYi0+dHJhdmVyc2VfcmVhZCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9SRE9OTFk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfb29iKHRkYiwgb2ZmICsgbGVuLCAwKSAhPSAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodGRiLT5tYXBfcHRyKSB7CisJCW1lbWNweShvZmYgKyAoY2hhciAqKXRkYi0+bWFwX3B0ciwgYnVmLCBsZW4pOworCX0gZWxzZSBpZiAocHdyaXRlKHRkYi0+ZmQsIGJ1ZiwgbGVuLCBvZmYpICE9IChzc2l6ZV90KWxlbikgeworCQkvKiBFbnN1cmUgZWNvZGUgaXMgc2V0IGZvciBsb2cgZm4uICovCisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwidGRiX3dyaXRlIGZhaWxlZCBhdCAlZCBsZW49JWQgKCVzKVxuIiwKKwkJCSAgIG9mZiwgbGVuLCBzdHJlcnJvcihlcnJubykpKTsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfSU8sIC0xKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEVuZGlhbiBjb252ZXJzaW9uOiB3ZSBvbmx5IGV2ZXIgZGVhbCB3aXRoIDQgYnl0ZSBxdWFudGl0aWVzICovCit2b2lkICp0ZGJfY29udmVydCh2b2lkICpidWYsIHUzMiBzaXplKQoreworCXUzMiBpLCAqcCA9ICh1MzIgKilidWY7CisJZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyspCisJCXBbaV0gPSBUREJfQllURVJFVihwW2ldKTsKKwlyZXR1cm4gYnVmOworfQorCisKKy8qIHJlYWQgYSBsdW1wIG9mIGRhdGEgYXQgYSBzcGVjaWZpZWQgb2Zmc2V0LCBtYXliZSBjb252ZXJ0ICovCitzdGF0aWMgaW50IHRkYl9yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmLCB2b2lkICpidWYsCisJCSAgICB0ZGJfbGVuX3QgbGVuLCBpbnQgY3YpCit7CisJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX29vYih0ZGIsIG9mZiArIGxlbiwgMCkgIT0gMCkgeworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHRkYi0+bWFwX3B0cikgeworCQltZW1jcHkoYnVmLCBvZmYgKyAoY2hhciAqKXRkYi0+bWFwX3B0ciwgbGVuKTsKKwl9IGVsc2UgeworCQlzc2l6ZV90IHJldCA9IHByZWFkKHRkYi0+ZmQsIGJ1ZiwgbGVuLCBvZmYpOworCQlpZiAocmV0ICE9IChzc2l6ZV90KWxlbikgeworCQkJLyogRW5zdXJlIGVjb2RlIGlzIHNldCBmb3IgbG9nIGZuLiAqLworCQkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwidGRiX3JlYWQgZmFpbGVkIGF0ICVkICIKKwkJCQkgImxlbj0lZCByZXQ9JWQgKCVzKSBtYXBfc2l6ZT0lZFxuIiwKKwkJCQkgKGludClvZmYsIChpbnQpbGVuLCAoaW50KXJldCwgc3RyZXJyb3IoZXJybm8pLAorCQkJCSAoaW50KXRkYi0+bWFwX3NpemUpKTsKKwkJCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX0lPLCAtMSk7CisJCX0KKwl9CisJaWYgKGN2KSB7CisJCXRkYl9jb252ZXJ0KGJ1ZiwgbGVuKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKgorICBkbyBhbiB1bmxvY2tlZCBzY2FuIG9mIHRoZSBoYXNoIHRhYmxlIGhlYWRzIHRvIGZpbmQgdGhlIG5leHQgbm9uLXplcm8gaGVhZC4gVGhlIHZhbHVlCisgIHdpbGwgdGhlbiBiZSBjb25maXJtZWQgd2l0aCB0aGUgbG9jayBoZWxkCisqLworc3RhdGljIHZvaWQgdGRiX25leHRfaGFzaF9jaGFpbihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdTMyICpjaGFpbikKK3sKKwl1MzIgaCA9ICpjaGFpbjsKKwlpZiAodGRiLT5tYXBfcHRyKSB7CisJCWZvciAoO2ggPCB0ZGItPmhlYWRlci5oYXNoX3NpemU7aCsrKSB7CisJCQlpZiAoMCAhPSAqKHUzMiAqKShUREJfSEFTSF9UT1AoaCkgKyAodW5zaWduZWQgY2hhciAqKXRkYi0+bWFwX3B0cikpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXUzMiBvZmY9MDsKKwkJZm9yICg7aCA8IHRkYi0+aGVhZGVyLmhhc2hfc2l6ZTtoKyspIHsKKwkJCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfSEFTSF9UT1AoaCksICZvZmYpICE9IDAgfHwgb2ZmICE9IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwkoKmNoYWluKSA9IGg7Cit9CisKKworaW50IHRkYl9tdW5tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJaWYgKHRkYi0+ZmxhZ3MgJiBUREJfSU5URVJOQUwpCisJCXJldHVybiAwOworCisjaWZkZWYgSEFWRV9NTUFQCisJaWYgKHRkYi0+bWFwX3B0cikgeworCQlpbnQgcmV0ID0gbXVubWFwKHRkYi0+bWFwX3B0ciwgdGRiLT5tYXBfc2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorI2VuZGlmCisJdGRiLT5tYXBfcHRyID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0ZGJfbW1hcChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlpZiAodGRiLT5mbGFncyAmIFREQl9JTlRFUk5BTCkKKwkJcmV0dXJuOworCisjaWZkZWYgSEFWRV9NTUFQCisJaWYgKCEodGRiLT5mbGFncyAmIFREQl9OT01NQVApKSB7CisJCXRkYi0+bWFwX3B0ciA9IG1tYXAoTlVMTCwgdGRiLT5tYXBfc2l6ZSwKKwkJCQkgICAgUFJPVF9SRUFEfCh0ZGItPnJlYWRfb25seT8gMDpQUk9UX1dSSVRFKSwKKwkJCQkgICAgTUFQX1NIQVJFRHxNQVBfRklMRSwgdGRiLT5mZCwgMCk7CisKKwkJLyoKKwkJICogTkIuIFdoZW4gbW1hcCBmYWlscyBpdCByZXR1cm5zIE1BUF9GQUlMRUQgKk5PVCogTlVMTCAhISEhCisJCSAqLworCisJCWlmICh0ZGItPm1hcF9wdHIgPT0gTUFQX0ZBSUxFRCkgeworCQkJdGRiLT5tYXBfcHRyID0gTlVMTDsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX1dBUk5JTkcsICJ0ZGJfbW1hcCBmYWlsZWQgZm9yIHNpemUgJWQgKCVzKVxuIiwKKwkJCQkgdGRiLT5tYXBfc2l6ZSwgc3RyZXJyb3IoZXJybm8pKSk7CisJCX0KKwl9IGVsc2UgeworCQl0ZGItPm1hcF9wdHIgPSBOVUxMOworCX0KKyNlbHNlCisJdGRiLT5tYXBfcHRyID0gTlVMTDsKKyNlbmRpZgorfQorCisvKiBleHBhbmQgYSBmaWxlLiAgd2UgcHJlZmVyIHRvIHVzZSBmdHJ1bmNhdGUsIGFzIHRoYXQgaXMgd2hhdCBwb3NpeAorICBzYXlzIHRvIHVzZSBmb3IgbW1hcCBleHBhbnNpb24gKi8KK3N0YXRpYyBpbnQgdGRiX2V4cGFuZF9maWxlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgc2l6ZSwgdGRiX29mZl90IGFkZGl0aW9uKQoreworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKHRkYi0+cmVhZF9vbmx5IHx8IHRkYi0+dHJhdmVyc2VfcmVhZCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9SRE9OTFk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZnRydW5jYXRlKHRkYi0+ZmQsIHNpemUrYWRkaXRpb24pID09IC0xKSB7CisJCWNoYXIgYiA9IDA7CisJCWlmIChwd3JpdGUodGRiLT5mZCwgICZiLCAxLCAoc2l6ZSthZGRpdGlvbikgLSAxKSAhPSAxKSB7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgImV4cGFuZF9maWxlIHRvICVkIGZhaWxlZCAoJXMpXG4iLAorCQkJCSBzaXplK2FkZGl0aW9uLCBzdHJlcnJvcihlcnJubykpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIG5vdyBmaWxsIHRoZSBmaWxlIHdpdGggc29tZXRoaW5nLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUKKwkgICBmaWxlIGlzbid0IHNwYXJzZSwgd2hpY2ggd291bGQgYmUgdmVyeSBiYWQgaWYgd2UgcmFuIG91dCBvZgorCSAgIGRpc2suIFRoaXMgbXVzdCBiZSBkb25lIHdpdGggd3JpdGUsIG5vdCB2aWEgbW1hcCAqLworCW1lbXNldChidWYsIFREQl9QQURfQllURSwgc2l6ZW9mKGJ1ZikpOworCXdoaWxlIChhZGRpdGlvbikgeworCQlpbnQgbiA9IGFkZGl0aW9uPnNpemVvZihidWYpP3NpemVvZihidWYpOmFkZGl0aW9uOworCQlpbnQgcmV0ID0gcHdyaXRlKHRkYi0+ZmQsIGJ1Ziwgbiwgc2l6ZSk7CisJCWlmIChyZXQgIT0gbikgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJleHBhbmRfZmlsZSB3cml0ZSBvZiAlZCBmYWlsZWQgKCVzKVxuIiwKKwkJCQkgICBuLCBzdHJlcnJvcihlcnJubykpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlhZGRpdGlvbiAtPSBuOworCQlzaXplICs9IG47CisJfQorCXJldHVybiAwOworfQorCisKKy8qIGV4cGFuZCB0aGUgZGF0YWJhc2UgYXQgbGVhc3Qgc2l6ZSBieXRlcyBieSBleHBhbmRpbmcgdGhlIHVuZGVybHlpbmcKKyAgIGZpbGUgYW5kIGRvaW5nIHRoZSBtbWFwIGFnYWluIGlmIG5lY2Vzc2FyeSAqLworaW50IHRkYl9leHBhbmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBzaXplKQoreworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJdGRiX29mZl90IG9mZnNldDsKKworCWlmICh0ZGJfbG9jayh0ZGIsIC0xLCBGX1dSTENLKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgImxvY2sgZmFpbGVkIGluIHRkYl9leHBhbmRcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIG11c3Qga25vdyBhYm91dCBhbnkgcHJldmlvdXMgZXhwYW5zaW9ucyBieSBhbm90aGVyIHByb2Nlc3MgKi8KKwl0ZGItPm1ldGhvZHMtPnRkYl9vb2IodGRiLCB0ZGItPm1hcF9zaXplICsgMSwgMSk7CisKKwkvKiBhbHdheXMgbWFrZSByb29tIGZvciBhdCBsZWFzdCAxMCBtb3JlIHJlY29yZHMsIGFuZCByb3VuZAorICAgICAgICAgICB0aGUgZGF0YWJhc2UgdXAgdG8gYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplICovCisJc2l6ZSA9IFREQl9BTElHTih0ZGItPm1hcF9zaXplICsgc2l6ZSoxMCwgdGRiLT5wYWdlX3NpemUpIC0gdGRiLT5tYXBfc2l6ZTsKKworCWlmICghKHRkYi0+ZmxhZ3MgJiBUREJfSU5URVJOQUwpKQorCQl0ZGJfbXVubWFwKHRkYik7CisKKwkvKgorCSAqIFdlIG11c3QgZW5zdXJlIHRoZSBmaWxlIGlzIHVubWFwcGVkIGJlZm9yZSBkb2luZyB0aGlzCisJICogdG8gZW5zdXJlIGNvbnNpc3RlbmN5IHdpdGggc3lzdGVtcyBsaWtlIE9wZW5CU0Qgd2hlcmUKKwkgKiB3cml0ZXMgYW5kIG1tYXBzIGFyZSBub3QgY29uc2lzdGVudC4KKwkgKi8KKworCS8qIGV4cGFuZCB0aGUgZmlsZSBpdHNlbGYgKi8KKwlpZiAoISh0ZGItPmZsYWdzICYgVERCX0lOVEVSTkFMKSkgeworCQlpZiAodGRiLT5tZXRob2RzLT50ZGJfZXhwYW5kX2ZpbGUodGRiLCB0ZGItPm1hcF9zaXplLCBzaXplKSAhPSAwKQorCQkJZ290byBmYWlsOworCX0KKworCXRkYi0+bWFwX3NpemUgKz0gc2l6ZTsKKworCWlmICh0ZGItPmZsYWdzICYgVERCX0lOVEVSTkFMKSB7CisJCWNoYXIgKm5ld19tYXBfcHRyID0gKGNoYXIgKilyZWFsbG9jKHRkYi0+bWFwX3B0ciwKKwkJCQkJCSAgICB0ZGItPm1hcF9zaXplKTsKKwkJaWYgKCFuZXdfbWFwX3B0cikgeworCQkJdGRiLT5tYXBfc2l6ZSAtPSBzaXplOworCQkJZ290byBmYWlsOworCQl9CisJCXRkYi0+bWFwX3B0ciA9IG5ld19tYXBfcHRyOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIG11c3QgZW5zdXJlIHRoZSBmaWxlIGlzIHJlbWFwcGVkIGJlZm9yZSBhZGRpbmcgdGhlIHNwYWNlCisJCSAqIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB3aXRoIHN5c3RlbXMgbGlrZSBPcGVuQlNEIHdoZXJlCisJCSAqIHdyaXRlcyBhbmQgbW1hcHMgYXJlIG5vdCBjb25zaXN0ZW50LgorCQkgKi8KKworCQkvKiBXZSdyZSBvayBpZiB0aGUgbW1hcCBmYWlscyBhcyB3ZSdsbCBmYWxsYmFjayB0byByZWFkL3dyaXRlICovCisJCXRkYl9tbWFwKHRkYik7CisJfQorCisJLyogZm9ybSBhIG5ldyBmcmVlbGlzdCByZWNvcmQgKi8KKwltZW1zZXQoJnJlYywnXDAnLHNpemVvZihyZWMpKTsKKwlyZWMucmVjX2xlbiA9IHNpemUgLSBzaXplb2YocmVjKTsKKworCS8qIGxpbmsgaXQgaW50byB0aGUgZnJlZSBsaXN0ICovCisJb2Zmc2V0ID0gdGRiLT5tYXBfc2l6ZSAtIHNpemU7CisJaWYgKHRkYl9mcmVlKHRkYiwgb2Zmc2V0LCAmcmVjKSA9PSAtMSkKKwkJZ290byBmYWlsOworCisJdGRiX3VubG9jayh0ZGIsIC0xLCBGX1dSTENLKTsKKwlyZXR1cm4gMDsKKyBmYWlsOgorCXRkYl91bmxvY2sodGRiLCAtMSwgRl9XUkxDSyk7CisJcmV0dXJuIC0xOworfQorCisvKiByZWFkL3dyaXRlIGEgdGRiX29mZl90ICovCitpbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpCit7CisJcmV0dXJuIHRkYi0+bWV0aG9kcy0+dGRiX3JlYWQodGRiLCBvZmZzZXQsIChjaGFyKilkLCBzaXplb2YoKmQpLCBET0NPTlYoKSk7Cit9CisKK2ludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpCit7CisJdGRiX29mZl90IG9mZiA9ICpkOworCXJldHVybiB0ZGItPm1ldGhvZHMtPnRkYl93cml0ZSh0ZGIsIG9mZnNldCwgQ09OVkVSVChvZmYpLCBzaXplb2YoKmQpKTsKK30KKworCisvKiByZWFkIGEgbHVtcCBvZiBkYXRhLCBhbGxvY2F0aW5nIHRoZSBzcGFjZSBmb3IgaXQgKi8KK3Vuc2lnbmVkIGNoYXIgKnRkYl9hbGxvY19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfbGVuX3QgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCS8qIHNvbWUgc3lzdGVtcyBkb24ndCBsaWtlIHplcm8gbGVuZ3RoIG1hbGxvYyAqLworCWlmIChsZW4gPT0gMCkgeworCQlsZW4gPSAxOworCX0KKworCWlmICghKGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGxlbikpKSB7CisJCS8qIEVuc3VyZSBlY29kZSBpcyBzZXQgZm9yIGxvZyBmbi4gKi8KKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfT09NOworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwidGRiX2FsbG9jX3JlYWQgbWFsbG9jIGZhaWxlZCBsZW49JWQgKCVzKVxuIiwKKwkJCSAgIGxlbiwgc3RyZXJyb3IoZXJybm8pKSk7CisJCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX09PTSwgYnVmKTsKKwl9CisJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX3JlYWQodGRiLCBvZmZzZXQsIGJ1ZiwgbGVuLCAwKSA9PSAtMSkgeworCQlTQUZFX0ZSRUUoYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBidWY7Cit9CisKKy8qIEdpdmUgYSBwaWVjZSBvZiB0ZGIgZGF0YSB0byBhIHBhcnNlciAqLworCitpbnQgdGRiX3BhcnNlX2RhdGEoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwKKwkJICAgdGRiX29mZl90IG9mZnNldCwgdGRiX2xlbl90IGxlbiwKKwkJICAgaW50ICgqcGFyc2VyKShUREJfREFUQSBrZXksIFREQl9EQVRBIGRhdGEsCisJCQkJIHZvaWQgKnByaXZhdGVfZGF0YSksCisJCSAgIHZvaWQgKnByaXZhdGVfZGF0YSkKK3sKKwlUREJfREFUQSBkYXRhOworCWludCByZXN1bHQ7CisKKwlkYXRhLmRzaXplID0gbGVuOworCisJaWYgKCh0ZGItPnRyYW5zYWN0aW9uID09IE5VTEwpICYmICh0ZGItPm1hcF9wdHIgIT0gTlVMTCkpIHsKKwkJLyoKKwkJICogT3B0aW1pemUgYnkgYXZvaWRpbmcgdGhlIG1hbGxvYy9tZW1jcHkvZnJlZSwgcG9pbnQgdGhlCisJCSAqIHBhcnNlciBkaXJlY3RseSBhdCB0aGUgbW1hcCBhcmVhLgorCQkgKi8KKwkJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX29vYih0ZGIsIG9mZnNldCtsZW4sIDApICE9IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkYXRhLmRwdHIgPSBvZmZzZXQgKyAodW5zaWduZWQgY2hhciAqKXRkYi0+bWFwX3B0cjsKKwkJcmV0dXJuIHBhcnNlcihrZXksIGRhdGEsIHByaXZhdGVfZGF0YSk7CisJfQorCisJaWYgKCEoZGF0YS5kcHRyID0gdGRiX2FsbG9jX3JlYWQodGRiLCBvZmZzZXQsIGxlbikpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBwYXJzZXIoa2V5LCBkYXRhLCBwcml2YXRlX2RhdGEpOworCWZyZWUoZGF0YS5kcHRyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiByZWFkL3dyaXRlIGEgcmVjb3JkICovCitpbnQgdGRiX3JlY19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYykKK3sKKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfcmVhZCh0ZGIsIG9mZnNldCwgcmVjLCBzaXplb2YoKnJlYyksRE9DT05WKCkpID09IC0xKQorCQlyZXR1cm4gLTE7CisJaWYgKFREQl9CQURfTUFHSUMocmVjKSkgeworCQkvKiBFbnN1cmUgZWNvZGUgaXMgc2V0IGZvciBsb2cgZm4uICovCisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0NPUlJVUFQ7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCJ0ZGJfcmVjX3JlYWQgYmFkIG1hZ2ljIDB4JXggYXQgb2Zmc2V0PSVkXG4iLCByZWMtPm1hZ2ljLCBvZmZzZXQpKTsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfQ09SUlVQVCwgLTEpOworCX0KKwlyZXR1cm4gdGRiLT5tZXRob2RzLT50ZGJfb29iKHRkYiwgcmVjLT5uZXh0K3NpemVvZigqcmVjKSwgMCk7Cit9CisKK2ludCB0ZGJfcmVjX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYykKK3sKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgciA9ICpyZWM7CisJcmV0dXJuIHRkYi0+bWV0aG9kcy0+dGRiX3dyaXRlKHRkYiwgb2Zmc2V0LCBDT05WRVJUKHIpLCBzaXplb2YocikpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRkYl9tZXRob2RzIGlvX21ldGhvZHMgPSB7CisJdGRiX3JlYWQsCisJdGRiX3dyaXRlLAorCXRkYl9uZXh0X2hhc2hfY2hhaW4sCisJdGRiX29vYiwKKwl0ZGJfZXhwYW5kX2ZpbGUsCisJdGRiX2JybG9jaworfTsKKworLyoKKyAgaW5pdGlhbGlzZSB0aGUgZGVmYXVsdCBtZXRob2RzIHRhYmxlCisqLwordm9pZCB0ZGJfaW9faW5pdChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwl0ZGItPm1ldGhvZHMgPSAmaW9fbWV0aG9kczsKK30KKworLyogZmlsZTogdHJhbnNhY3Rpb24uYyAqLworCisvKgorICB0cmFuc2FjdGlvbiBkZXNpZ246CisKKyAgLSBvbmx5IGFsbG93IGEgc2luZ2xlIHRyYW5zYWN0aW9uIGF0IGEgdGltZSBwZXIgZGF0YWJhc2UuIFRoaXMgbWFrZXMKKyAgICB1c2luZyB0aGUgdHJhbnNhY3Rpb24gQVBJIHNpbXBsZXIsIGFzIG90aGVyd2lzZSB0aGUgY2FsbGVyIHdvdWxkCisgICAgaGF2ZSB0byBjb3BlIHdpdGggdGVtcG9yYXJ5IGZhaWx1cmVzIGluIHRyYW5zYWN0aW9ucyB0aGF0IGNvbmZsaWN0CisgICAgd2l0aCBvdGhlciBjdXJyZW50IHRyYW5zYWN0aW9ucworCisgIC0ga2VlcCB0aGUgdHJhbnNhY3Rpb24gcmVjb3ZlcnkgaW5mb3JtYXRpb24gaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUKKyAgICBkYXRhYmFzZSwgdXNpbmcgYSBzcGVjaWFsICd0cmFuc2FjdGlvbiByZWNvdmVyeScgcmVjb3JkIHBvaW50ZWQgYXQKKyAgICBieSB0aGUgaGVhZGVyLiBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGV4dHJhIGpvdXJuYWwgZmlsZXMgYXMKKyAgICB1c2VkIGJ5IHNvbWUgb3RoZXIgZGF0YWJhc2VzCisKKyAgLSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIHRyYW5zYWN0aW9uIHJlY292ZXIgcmVjb3JkLCByZS11c2luZyBpdAorICAgIGZvciBzdWJzZXF1ZW50IHRyYW5zYWN0aW9ucy4gSWYgYSBsYXJnZXIgcmVjb3JkIGlzIG5lZWRlZCB0aGVuCisgICAgdGRiX2ZyZWUoKSB0aGUgb2xkIHJlY29yZCB0byBwbGFjZSBpdCBvbiB0aGUgbm9ybWFsIHRkYiBmcmVlbGlzdAorICAgIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBuZXcgcmVjb3JkCisKKyAgLSBkdXJpbmcgdHJhbnNhY3Rpb25zLCBrZWVwIGEgbGlua2VkIGxpc3Qgb2Ygd3JpdGVzIGFsbCB0aGF0IGhhdmUKKyAgICBiZWVuIHBlcmZvcm1lZCBieSBpbnRlcmNlcHRpbmcgYWxsIHRkYl93cml0ZSgpIGNhbGxzLiBUaGUgaG9va2VkCisgICAgdHJhbnNhY3Rpb24gdmVyc2lvbnMgb2YgdGRiX3JlYWQoKSBhbmQgdGRiX3dyaXRlKCkgY2hlY2sgdGhpcworICAgIGxpbmtlZCBsaXN0IGFuZCB0cnkgdG8gdXNlIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCBpbiBwcmVmZXJlbmNlCisgICAgdG8gdGhlIHJlYWwgZGF0YWJhc2UuCisKKyAgLSBkb24ndCBhbGxvdyBhbnkgbG9ja3MgdG8gYmUgaGVsZCB3aGVuIGEgdHJhbnNhY3Rpb24gc3RhcnRzLAorICAgIG90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwIHdpdGggZGVhZGxvY2sgKHBsdXMgbGFjayBvZiBsb2NrIG5lc3RpbmcKKyAgICBpbiBwb3NpeCBsb2NrcyB3b3VsZCBtZWFuIHRoZSBsb2NrIGlzIGxvc3QpCisKKyAgLSBpZiB0aGUgY2FsbGVyIGdhaW5zIGEgbG9jayBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uIGJ1dCBkb2Vzbid0CisgICAgcmVsZWFzZSBpdCB0aGVuIGZhaWwgdGhlIGNvbW1pdAorCisgIC0gYWxsb3cgZm9yIG5lc3RlZCBjYWxscyB0byB0ZGJfdHJhbnNhY3Rpb25fc3RhcnQoKSwgcmUtdXNpbmcgdGhlCisgICAgZXhpc3RpbmcgdHJhbnNhY3Rpb24gcmVjb3JkLiBJZiB0aGUgaW5uZXIgdHJhbnNhY3Rpb24gaXMgY2FuY2VsbGVkCisgICAgdGhlbiBhIHN1YnNlcXVlbnQgY29tbWl0IHdpbGwgZmFpbAorCisgIC0ga2VlcCBhIG1pcnJvcmVkIGNvcHkgb2YgdGhlIHRkYiBoYXNoIGNoYWluIGhlYWRzIHRvIGFsbG93IGZvciB0aGUKKyAgICBmYXN0IGhhc2ggaGVhZHMgc2NhbiBvbiB0cmF2ZXJzZSwgdXBkYXRpbmcgdGhlIG1pcnJvcmVkIGNvcHkgaW4KKyAgICB0aGUgdHJhbnNhY3Rpb24gdmVyc2lvbiBvZiB0ZGJfd3JpdGUKKworICAtIGFsbG93IGNhbGxlcnMgdG8gbWl4IHRyYW5zYWN0aW9uIGFuZCBub24tdHJhbnNhY3Rpb24gdXNlIG9mIHRkYiwKKyAgICBhbHRob3VnaCBvbmNlIGEgdHJhbnNhY3Rpb24gaXMgc3RhcnRlZCB0aGVuIGFuIGV4Y2x1c2l2ZSBsb2NrIGlzCisgICAgZ2FpbmVkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3IgY2FuY2VsbGVkCisKKyAgLSB0aGUgY29tbWl0IHN0YXRlZ3kgaW52b2x2ZXMgZmlyc3Qgc2F2aW5nIGF3YXkgYWxsIG1vZGlmaWVkIGRhdGEKKyAgICBpbnRvIGEgbGluZWFyaXNlZCBidWZmZXIgaW4gdGhlIHRyYW5zYWN0aW9uIHJlY292ZXJ5IGFyZWEsIHRoZW4KKyAgICBtYXJraW5nIHRoZSB0cmFuc2FjdGlvbiByZWNvdmVyeSBhcmVhIHdpdGggYSBtYWdpYyB2YWx1ZSB0bworICAgIGluZGljYXRlIGEgdmFsaWQgcmVjb3ZlcnkgcmVjb3JkLiBJbiB0b3RhbCA0IGZzeW5jL21zeW5jIGNhbGxzIGFyZQorICAgIG5lZWRlZCBwZXIgY29tbWl0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBJdCBtaWdodCBiZSBwb3NzaWJsZQorICAgIHRvIHJlZHVjZSB0aGlzIHRvIDMgb3IgZXZlbiAyIHdpdGggc29tZSBtb3JlIHdvcmsuCisKKyAgLSBjaGVjayBmb3IgYSB2YWxpZCByZWNvdmVyeSByZWNvcmQgb24gb3BlbiBvZiB0aGUgdGRiLCB3aGlsZSB0aGUKKyAgICBnbG9iYWwgbG9jayBpcyBoZWxkLiBBdXRvbWF0aWNhbGx5IHJlY292ZXIgZnJvbSB0aGUgdHJhbnNhY3Rpb24KKyAgICByZWNvdmVyeSBhcmVhIGlmIG5lZWRlZCwgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBvcGVuIGFzCisgICAgdXN1YWwuIFRoaXMgYWxsb3dzIGZvciBzbW9vdGggY3Jhc2ggcmVjb3Zlcnkgd2l0aCBubyBhZG1pbmlzdHJhdG9yCisgICAgaW50ZXJ2ZW50aW9uLgorCisgIC0gaWYgVERCX05PU1lOQyBpcyBwYXNzZWQgdG8gZmxhZ3MgaW4gdGRiX29wZW4gdGhlbiB0cmFuc2FjdGlvbnMgYXJlCisgICAgc3RpbGwgYXZhaWxhYmxlLCBidXQgbm8gdHJhbnNhY3Rpb24gcmVjb3ZlcnkgYXJlYSBpcyB1c2VkIGFuZCBubworICAgIGZzeW5jL21zeW5jIGNhbGxzIGFyZSBtYWRlLgorCisqLworCitzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uX2VsIHsKKwlzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uX2VsICpuZXh0LCAqcHJldjsKKwl0ZGJfb2ZmX3Qgb2Zmc2V0OworCXRkYl9sZW5fdCBsZW5ndGg7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKKy8qCisgIGhvbGQgdGhlIGNvbnRleHQgb2YgYW55IGN1cnJlbnQgdHJhbnNhY3Rpb24KKyovCitzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uIHsKKwkvKiB3ZSBrZWVwIGEgbWlycm9yZWQgY29weSBvZiB0aGUgdGRiIGhhc2ggaGVhZHMgaGVyZSBzbworCSAgIHRkYl9uZXh0X2hhc2hfY2hhaW4oKSBjYW4gb3BlcmF0ZSBlZmZpY2llbnRseSAqLworCXUzMiAqaGFzaF9oZWFkczsKKworCS8qIHRoZSBvcmlnaW5hbCBpbyBtZXRob2RzIC0gdXNlZCB0byBkbyBJT3MgdG8gdGhlIHJlYWwgZGIgKi8KKwljb25zdCBzdHJ1Y3QgdGRiX21ldGhvZHMgKmlvX21ldGhvZHM7CisKKwkvKiB0aGUgbGlzdCBvZiB0cmFuc2FjdGlvbiBlbGVtZW50cy4gV2UgdXNlIGEgZG91Ymx5IGxpbmtlZAorCSAgIGxpc3Qgd2l0aCBhIGxhc3QgcG9pbnRlciB0byBhbGxvdyB1cyB0byBrZWVwIHRoZSBsaXN0CisJICAgb3JkZXJlZCwgd2l0aCBmaXJzdCBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gSXQKKwkgICBuZWVkcyB0byBiZSBkb3VibHkgbGlua2VkIGFzIHRoZSByZWFkL3dyaXRlIHRyYXZlcnNhbHMgbmVlZAorCSAgIHRvIGJlIGJhY2t3YXJkcywgd2hpbGUgdGhlIGNvbW1pdCBuZWVkcyB0byBiZSBmb3J3YXJkcyAqLworCXN0cnVjdCB0ZGJfdHJhbnNhY3Rpb25fZWwgKmVsZW1lbnRzLCAqZWxlbWVudHNfbGFzdDsKKworCS8qIG5vbi16ZXJvIHdoZW4gYW4gaW50ZXJuYWwgdHJhbnNhY3Rpb24gZXJyb3IgaGFzCisJICAgb2NjdXJyZWQuIEFsbCB3cml0ZSBvcGVyYXRpb25zIHdpbGwgdGhlbiBmYWlsIHVudGlsIHRoZQorCSAgIHRyYW5zYWN0aW9uIGlzIGVuZGVkICovCisJaW50IHRyYW5zYWN0aW9uX2Vycm9yOworCisJLyogd2hlbiBpbnNpZGUgYSB0cmFuc2FjdGlvbiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYW55CisJICAgbmVzdGVkIHRkYl90cmFuc2FjdGlvbl9zdGFydCgpIGNhbGxzLCBhcyB0aGVzZSBhcmUgYWxsb3dlZCwKKwkgICBidXQgZG9uJ3QgY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uICovCisJaW50IG5lc3Rpbmc7CisKKwkvKiBvbGQgZmlsZSBzaXplIGJlZm9yZSB0cmFuc2FjdGlvbiAqLworCXRkYl9sZW5fdCBvbGRfbWFwX3NpemU7Cit9OworCisKKy8qCisgIHJlYWQgd2hpbGUgaW4gYSB0cmFuc2FjdGlvbi4gV2UgbmVlZCB0byBjaGVjayBmaXJzdCBpZiB0aGUgZGF0YSBpcyBpbiBvdXIgbGlzdAorICBvZiB0cmFuc2FjdGlvbiBlbGVtZW50cywgdGhlbiBpZiBub3QgZG8gYSByZWFsIHJlYWQKKyovCitzdGF0aWMgaW50IHRyYW5zYWN0aW9uX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYsIHZvaWQgKmJ1ZiwKKwkJCSAgICB0ZGJfbGVuX3QgbGVuLCBpbnQgY3YpCit7CisJc3RydWN0IHRkYl90cmFuc2FjdGlvbl9lbCAqZWw7CisKKwkvKiB3ZSBuZWVkIHRvIHdhbGsgdGhlIGxpc3QgYmFja3dhcmRzIHRvIGdldCB0aGUgbW9zdCByZWNlbnQgZGF0YSAqLworCWZvciAoZWw9dGRiLT50cmFuc2FjdGlvbi0+ZWxlbWVudHNfbGFzdDtlbDtlbD1lbC0+cHJldikgeworCQl0ZGJfbGVuX3QgcGFydGlhbDsKKworCQlpZiAob2ZmK2xlbiA8PSBlbC0+b2Zmc2V0KSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2ZmID49IGVsLT5vZmZzZXQgKyBlbC0+bGVuZ3RoKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFuIG92ZXJsYXBwaW5nIHJlYWQgLSBuZWVkcyB0byBiZSBzcGxpdCBpbnRvIHVwIHRvCisJCSAgIDIgcmVhZHMgYW5kIGEgbWVtY3B5ICovCisJCWlmIChvZmYgPCBlbC0+b2Zmc2V0KSB7CisJCQlwYXJ0aWFsID0gZWwtPm9mZnNldCAtIG9mZjsKKwkJCWlmICh0cmFuc2FjdGlvbl9yZWFkKHRkYiwgb2ZmLCBidWYsIHBhcnRpYWwsIGN2KSAhPSAwKSB7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJbGVuIC09IHBhcnRpYWw7CisJCQlvZmYgKz0gcGFydGlhbDsKKwkJCWJ1ZiA9ICh2b2lkICopKHBhcnRpYWwgKyAoY2hhciAqKWJ1Zik7CisJCX0KKwkJaWYgKG9mZiArIGxlbiA8PSBlbC0+b2Zmc2V0ICsgZWwtPmxlbmd0aCkgeworCQkJcGFydGlhbCA9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCXBhcnRpYWwgPSBlbC0+b2Zmc2V0ICsgZWwtPmxlbmd0aCAtIG9mZjsKKwkJfQorCQltZW1jcHkoYnVmLCBlbC0+ZGF0YSArIChvZmYgLSBlbC0+b2Zmc2V0KSwgcGFydGlhbCk7CisJCWlmIChjdikgeworCQkJdGRiX2NvbnZlcnQoYnVmLCBsZW4pOworCQl9CisJCWxlbiAtPSBwYXJ0aWFsOworCQlvZmYgKz0gcGFydGlhbDsKKwkJYnVmID0gKHZvaWQgKikocGFydGlhbCArIChjaGFyICopYnVmKTsKKworCQlpZiAobGVuICE9IDAgJiYgdHJhbnNhY3Rpb25fcmVhZCh0ZGIsIG9mZiwgYnVmLCBsZW4sIGN2KSAhPSAwKSB7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBpdHMgbm90IGluIHRoZSB0cmFuc2FjdGlvbiBlbGVtZW50cyAtIGRvIGEgcmVhbCByZWFkICovCisJcmV0dXJuIHRkYi0+dHJhbnNhY3Rpb24tPmlvX21ldGhvZHMtPnRkYl9yZWFkKHRkYiwgb2ZmLCBidWYsIGxlbiwgY3YpOworCitmYWlsOgorCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidHJhbnNhY3Rpb25fcmVhZDogZmFpbGVkIGF0IG9mZj0lZCBsZW49JWRcbiIsIG9mZiwgbGVuKSk7CisJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJdGRiLT50cmFuc2FjdGlvbi0+dHJhbnNhY3Rpb25fZXJyb3IgPSAxOworCXJldHVybiAtMTsKK30KKworCisvKgorICB3cml0ZSB3aGlsZSBpbiBhIHRyYW5zYWN0aW9uCisqLworc3RhdGljIGludCB0cmFuc2FjdGlvbl93cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqYnVmLCB0ZGJfbGVuX3QgbGVuKQoreworCXN0cnVjdCB0ZGJfdHJhbnNhY3Rpb25fZWwgKmVsLCAqYmVzdF9lbD1OVUxMOworCisJaWYgKGxlbiA9PSAwKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIGlmIHRoZSB3cml0ZSBpcyB0byBhIGhhc2ggaGVhZCwgdGhlbiB1cGRhdGUgdGhlIHRyYW5zYWN0aW9uCisJICAgaGFzaCBoZWFkcyAqLworCWlmIChsZW4gPT0gc2l6ZW9mKHRkYl9vZmZfdCkgJiYgb2ZmID49IEZSRUVMSVNUX1RPUCAmJgorCSAgICBvZmYgPCBGUkVFTElTVF9UT1ArVERCX0hBU0hUQUJMRV9TSVpFKHRkYikpIHsKKwkJdTMyIGNoYWluID0gKG9mZi1GUkVFTElTVF9UT1ApIC8gc2l6ZW9mKHRkYl9vZmZfdCk7CisJCW1lbWNweSgmdGRiLT50cmFuc2FjdGlvbi0+aGFzaF9oZWFkc1tjaGFpbl0sIGJ1ZiwgbGVuKTsKKwl9CisKKwkvKiBmaXJzdCBzZWUgaWYgd2UgY2FuIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgKi8KKwlmb3IgKGVsPXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzX2xhc3Q7ZWw7ZWw9ZWwtPnByZXYpIHsKKwkJdGRiX2xlbl90IHBhcnRpYWw7CisKKwkJaWYgKGJlc3RfZWwgPT0gTlVMTCAmJiBvZmYgPT0gZWwtPm9mZnNldCtlbC0+bGVuZ3RoKSB7CisJCQliZXN0X2VsID0gZWw7CisJCX0KKworCQlpZiAob2ZmK2xlbiA8PSBlbC0+b2Zmc2V0KSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAob2ZmID49IGVsLT5vZmZzZXQgKyBlbC0+bGVuZ3RoKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFuIG92ZXJsYXBwaW5nIHdyaXRlIC0gbmVlZHMgdG8gYmUgc3BsaXQgaW50byB1cCB0bworCQkgICAyIHdyaXRlcyBhbmQgYSBtZW1jcHkgKi8KKwkJaWYgKG9mZiA8IGVsLT5vZmZzZXQpIHsKKwkJCXBhcnRpYWwgPSBlbC0+b2Zmc2V0IC0gb2ZmOworCQkJaWYgKHRyYW5zYWN0aW9uX3dyaXRlKHRkYiwgb2ZmLCBidWYsIHBhcnRpYWwpICE9IDApIHsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlsZW4gLT0gcGFydGlhbDsKKwkJCW9mZiArPSBwYXJ0aWFsOworCQkJYnVmID0gKGNvbnN0IHZvaWQgKikocGFydGlhbCArIChjb25zdCBjaGFyICopYnVmKTsKKwkJfQorCQlpZiAob2ZmICsgbGVuIDw9IGVsLT5vZmZzZXQgKyBlbC0+bGVuZ3RoKSB7CisJCQlwYXJ0aWFsID0gbGVuOworCQl9IGVsc2UgeworCQkJcGFydGlhbCA9IGVsLT5vZmZzZXQgKyBlbC0+bGVuZ3RoIC0gb2ZmOworCQl9CisJCW1lbWNweShlbC0+ZGF0YSArIChvZmYgLSBlbC0+b2Zmc2V0KSwgYnVmLCBwYXJ0aWFsKTsKKwkJbGVuIC09IHBhcnRpYWw7CisJCW9mZiArPSBwYXJ0aWFsOworCQlidWYgPSAoY29uc3Qgdm9pZCAqKShwYXJ0aWFsICsgKGNvbnN0IGNoYXIgKilidWYpOworCisJCWlmIChsZW4gIT0gMCAmJiB0cmFuc2FjdGlvbl93cml0ZSh0ZGIsIG9mZiwgYnVmLCBsZW4pICE9IDApIHsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCS8qIHNlZSBpZiB3ZSBjYW4gYXBwZW5kIHRoZSBuZXcgZW50cnkgdG8gYW4gZXhpc3RpbmcgZW50cnkgKi8KKwlpZiAoYmVzdF9lbCAmJiBiZXN0X2VsLT5vZmZzZXQgKyBiZXN0X2VsLT5sZW5ndGggPT0gb2ZmICYmCisJICAgIChvZmYrbGVuIDwgdGRiLT50cmFuc2FjdGlvbi0+b2xkX21hcF9zaXplIHx8CisJICAgICBvZmYgPiB0ZGItPnRyYW5zYWN0aW9uLT5vbGRfbWFwX3NpemUpKSB7CisJCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBiZXN0X2VsLT5kYXRhOworCQllbCA9IGJlc3RfZWw7CisJCWVsLT5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilyZWFsbG9jKGVsLT5kYXRhLAorCQkJCQkJICAgIGVsLT5sZW5ndGggKyBsZW4pOworCQlpZiAoZWwtPmRhdGEgPT0gTlVMTCkgeworCQkJdGRiLT5lY29kZSA9IFREQl9FUlJfT09NOworCQkJdGRiLT50cmFuc2FjdGlvbi0+dHJhbnNhY3Rpb25fZXJyb3IgPSAxOworCQkJZWwtPmRhdGEgPSBkYXRhOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChidWYpIHsKKwkJCW1lbWNweShlbC0+ZGF0YSArIGVsLT5sZW5ndGgsIGJ1ZiwgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChlbC0+ZGF0YSArIGVsLT5sZW5ndGgsIFREQl9QQURfQllURSwgbGVuKTsKKwkJfQorCQllbC0+bGVuZ3RoICs9IGxlbjsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogYWRkIGEgbmV3IGVudHJ5IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwllbCA9IChzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uX2VsICopbWFsbG9jKHNpemVvZigqZWwpKTsKKwlpZiAoZWwgPT0gTlVMTCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9PT007CisJCXRkYi0+dHJhbnNhY3Rpb24tPnRyYW5zYWN0aW9uX2Vycm9yID0gMTsKKwkJcmV0dXJuIC0xOworCX0KKwllbC0+bmV4dCA9IE5VTEw7CisJZWwtPnByZXYgPSB0ZGItPnRyYW5zYWN0aW9uLT5lbGVtZW50c19sYXN0OworCWVsLT5vZmZzZXQgPSBvZmY7CisJZWwtPmxlbmd0aCA9IGxlbjsKKwllbC0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGxlbik7CisJaWYgKGVsLT5kYXRhID09IE5VTEwpIHsKKwkJZnJlZShlbCk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX09PTTsKKwkJdGRiLT50cmFuc2FjdGlvbi0+dHJhbnNhY3Rpb25fZXJyb3IgPSAxOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChidWYpIHsKKwkJbWVtY3B5KGVsLT5kYXRhLCBidWYsIGxlbik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGVsLT5kYXRhLCBUREJfUEFEX0JZVEUsIGxlbik7CisJfQorCWlmIChlbC0+cHJldikgeworCQllbC0+cHJldi0+bmV4dCA9IGVsOworCX0gZWxzZSB7CisJCXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzID0gZWw7CisJfQorCXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzX2xhc3QgPSBlbDsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRyYW5zYWN0aW9uX3dyaXRlOiBmYWlsZWQgYXQgb2ZmPSVkIGxlbj0lZFxuIiwgb2ZmLCBsZW4pKTsKKwl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwl0ZGItPnRyYW5zYWN0aW9uLT50cmFuc2FjdGlvbl9lcnJvciA9IDE7CisJcmV0dXJuIC0xOworfQorCisvKgorICBhY2NlbGVyYXRlZCBoYXNoIGNoYWluIGhlYWQgc2VhcmNoLCB1c2luZyB0aGUgY2FjaGVkIGhhc2ggaGVhZHMKKyovCitzdGF0aWMgdm9pZCB0cmFuc2FjdGlvbl9uZXh0X2hhc2hfY2hhaW4oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHUzMiAqY2hhaW4pCit7CisJdTMyIGggPSAqY2hhaW47CisJZm9yICg7aCA8IHRkYi0+aGVhZGVyLmhhc2hfc2l6ZTtoKyspIHsKKwkJLyogdGhlICsxIHRha2VzIGFjY291bnQgb2YgdGhlIGZyZWVsaXN0ICovCisJCWlmICgwICE9IHRkYi0+dHJhbnNhY3Rpb24tPmhhc2hfaGVhZHNbaCsxXSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJKCpjaGFpbikgPSBoOworfQorCisvKgorICBvdXQgb2YgYm91bmRzIGNoZWNrIGR1cmluZyBhIHRyYW5zYWN0aW9uCisqLworc3RhdGljIGludCB0cmFuc2FjdGlvbl9vb2Ioc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBsZW4sIGludCBwcm9iZSkKK3sKKwlpZiAobGVuIDw9IHRkYi0+bWFwX3NpemUpIHsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBUREJfRVJSQ09ERShUREJfRVJSX0lPLCAtMSk7Cit9CisKKy8qCisgIHRyYW5zYWN0aW9uIHZlcnNpb24gb2YgdGRiX2V4cGFuZCgpLgorKi8KK3N0YXRpYyBpbnQgdHJhbnNhY3Rpb25fZXhwYW5kX2ZpbGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBzaXplLAorCQkJCSAgIHRkYl9vZmZfdCBhZGRpdGlvbikKK3sKKwkvKiBhZGQgYSB3cml0ZSB0byB0aGUgdHJhbnNhY3Rpb24gZWxlbWVudHMsIHNvIHN1YnNlcXVlbnQKKwkgICByZWFkcyBzZWUgdGhlIHplcm8gZGF0YSAqLworCWlmICh0cmFuc2FjdGlvbl93cml0ZSh0ZGIsIHNpemUsIE5VTEwsIGFkZGl0aW9uKSAhPSAwKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgYnJsb2NrIGR1cmluZyBhIHRyYW5zYWN0aW9uIC0gaWdub3JlIHRoZW0KKyovCitzdGF0aWMgaW50IHRyYW5zYWN0aW9uX2JybG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwKKwkJCSAgICAgIGludCByd190eXBlLCBpbnQgbGNrX3R5cGUsIGludCBwcm9iZSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZGJfbWV0aG9kcyB0cmFuc2FjdGlvbl9tZXRob2RzID0geworCXRyYW5zYWN0aW9uX3JlYWQsCisJdHJhbnNhY3Rpb25fd3JpdGUsCisJdHJhbnNhY3Rpb25fbmV4dF9oYXNoX2NoYWluLAorCXRyYW5zYWN0aW9uX29vYiwKKwl0cmFuc2FjdGlvbl9leHBhbmRfZmlsZSwKKwl0cmFuc2FjdGlvbl9icmxvY2sKK307CisKKworLyoKKyAgc3RhcnQgYSB0ZGIgdHJhbnNhY3Rpb24uIE5vIHRva2VuIGlzIHJldHVybmVkLCBhcyBvbmx5IGEgc2luZ2xlCisgIHRyYW5zYWN0aW9uIGlzIGFsbG93ZWQgdG8gYmUgcGVuZGluZyBwZXIgdGRiX2NvbnRleHQKKyovCitpbnQgdGRiX3RyYW5zYWN0aW9uX3N0YXJ0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCS8qIHNvbWUgc2FuaXR5IGNoZWNrcyAqLworCWlmICh0ZGItPnJlYWRfb25seSB8fCAodGRiLT5mbGFncyAmIFREQl9JTlRFUk5BTCkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3RyYW5zYWN0aW9uX3N0YXJ0OiBjYW5ub3Qgc3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBhIHJlYWQtb25seSBvciBpbnRlcm5hbCBkYlxuIikpOworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9FSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBjb3BlIHdpdGggbmVzdGVkIHRkYl90cmFuc2FjdGlvbl9zdGFydCgpIGNhbGxzICovCisJaWYgKHRkYi0+dHJhbnNhY3Rpb24gIT0gTlVMTCkgeworCQl0ZGItPnRyYW5zYWN0aW9uLT5uZXN0aW5nKys7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX1RSQUNFLCAidGRiX3RyYW5zYWN0aW9uX3N0YXJ0OiBuZXN0aW5nICVkXG4iLAorCQkJIHRkYi0+dHJhbnNhY3Rpb24tPm5lc3RpbmcpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRkYi0+bnVtX2xvY2tzICE9IDAgfHwgdGRiLT5nbG9iYWxfbG9jay5jb3VudCkgeworCQkvKiB0aGUgY2FsbGVyIG11c3Qgbm90IGhhdmUgYW55IGxvY2tzIHdoZW4gc3RhcnRpbmcgYQorCQkgICB0cmFuc2FjdGlvbiBhcyBvdGhlcndpc2Ugd2UnbGwgYmUgc2NyZXdlZCBieSBsYWNrCisJCSAgIG9mIG5lc3RlZCBsb2NrcyBpbiBwb3NpeCAqLworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl90cmFuc2FjdGlvbl9zdGFydDogY2Fubm90IHN0YXJ0IGEgdHJhbnNhY3Rpb24gd2l0aCBsb2NrcyBoZWxkXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0xPQ0s7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodGRiLT50cmF2bG9ja3MubmV4dCAhPSBOVUxMKSB7CisJCS8qIHlvdSBjYW5ub3QgdXNlIHRyYW5zYWN0aW9ucyBpbnNpZGUgYSB0cmF2ZXJzZSAoYWx0aG91Z2ggeW91IGNhbiB1c2UKKwkJICAgdHJhdmVyc2UgaW5zaWRlIGEgdHJhbnNhY3Rpb24pIGFzIG90aGVyd2lzZSB5b3UgY2FuIGVuZCB1cCB3aXRoCisJCSAgIGRlYWRsb2NrICovCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3RyYW5zYWN0aW9uX3N0YXJ0OiBjYW5ub3Qgc3RhcnQgYSB0cmFuc2FjdGlvbiB3aXRoaW4gYSB0cmF2ZXJzZVxuIikpOworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9MT0NLOworCQlyZXR1cm4gLTE7CisJfQorCisJdGRiLT50cmFuc2FjdGlvbiA9IChzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uICopCisJCWNhbGxvYyhzaXplb2Yoc3RydWN0IHRkYl90cmFuc2FjdGlvbiksIDEpOworCWlmICh0ZGItPnRyYW5zYWN0aW9uID09IE5VTEwpIHsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfT09NOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZ2V0IHRoZSB0cmFuc2FjdGlvbiB3cml0ZSBsb2NrLiBUaGlzIGlzIGEgYmxvY2tpbmcgbG9jay4gQXMKKwkgICBkaXNjdXNzZWQgd2l0aCBWb2xrZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiB3YXlzIHdlIGNvdWxkCisJICAgbWFrZSB0aGlzIGFzeW5jLCB3aGljaCB3ZSB3aWxsIHByb2JhYmx5IGRvIGluIHRoZSBmdXR1cmUgKi8KKwlpZiAodGRiX3RyYW5zYWN0aW9uX2xvY2sodGRiLCBGX1dSTENLKSA9PSAtMSkgeworCQlTQUZFX0ZSRUUodGRiLT50cmFuc2FjdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBnZXQgYSByZWFkIGxvY2sgZnJvbSB0aGUgZnJlZWxpc3QgdG8gdGhlIGVuZCBvZiBmaWxlLiBUaGlzCisJICAgaXMgdXBncmFkZWQgdG8gYSB3cml0ZSBsb2NrIGR1cmluZyB0aGUgY29tbWl0ICovCisJaWYgKHRkYl9icmxvY2sodGRiLCBGUkVFTElTVF9UT1AsIEZfUkRMQ0ssIEZfU0VUTEtXLCAwLCAwKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl90cmFuc2FjdGlvbl9zdGFydDogZmFpbGVkIHRvIGdldCBoYXNoIGxvY2tzXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0xPQ0s7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBzZXR1cCBhIGNvcHkgb2YgdGhlIGhhc2ggdGFibGUgaGVhZHMgc28gdGhlIGhhc2ggc2NhbiBpbgorCSAgIHRyYXZlcnNlIGNhbiBiZSBmYXN0ICovCisJdGRiLT50cmFuc2FjdGlvbi0+aGFzaF9oZWFkcyA9ICh1MzIgKikKKwkJY2FsbG9jKHRkYi0+aGVhZGVyLmhhc2hfc2l6ZSsxLCBzaXplb2YodTMyKSk7CisJaWYgKHRkYi0+dHJhbnNhY3Rpb24tPmhhc2hfaGVhZHMgPT0gTlVMTCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9PT007CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX3JlYWQodGRiLCBGUkVFTElTVF9UT1AsIHRkYi0+dHJhbnNhY3Rpb24tPmhhc2hfaGVhZHMsCisJCQkJICAgVERCX0hBU0hUQUJMRV9TSVpFKHRkYiksIDApICE9IDApIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fc3RhcnQ6IGZhaWxlZCB0byByZWFkIGhhc2ggaGVhZHNcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgd2Uga25vdyBhYm91dCBhbnkgZmlsZSBleHBhbnNpb25zIGFscmVhZHkgZG9uZSBieQorCSAgIGFueW9uZSBlbHNlICovCisJdGRiLT5tZXRob2RzLT50ZGJfb29iKHRkYiwgdGRiLT5tYXBfc2l6ZSArIDEsIDEpOworCXRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZSA9IHRkYi0+bWFwX3NpemU7CisKKwkvKiBmaW5hbGx5IGhvb2sgdGhlIGlvIG1ldGhvZHMsIHJlcGxhY2luZyB0aGVtIHdpdGgKKwkgICB0cmFuc2FjdGlvbiBzcGVjaWZpYyBtZXRob2RzICovCisJdGRiLT50cmFuc2FjdGlvbi0+aW9fbWV0aG9kcyA9IHRkYi0+bWV0aG9kczsKKwl0ZGItPm1ldGhvZHMgPSAmdHJhbnNhY3Rpb25fbWV0aG9kczsKKworCS8qIGJ5IGNhbGxpbmcgdGhpcyB0cmFuc2FjdGlvbiB3cml0ZSBoZXJlLCB3ZSBlbnN1cmUgdGhhdCB3ZSBkb24ndCBncm93IHRoZQorCSAgIHRyYW5zYWN0aW9uIGxpbmtlZCBsaXN0IGR1ZSB0byBoYXNoIHRhYmxlIHVwZGF0ZXMgKi8KKwlpZiAodHJhbnNhY3Rpb25fd3JpdGUodGRiLCBGUkVFTElTVF9UT1AsIHRkYi0+dHJhbnNhY3Rpb24tPmhhc2hfaGVhZHMsCisJCQkgICAgICBUREJfSEFTSFRBQkxFX1NJWkUodGRiKSkgIT0gMCkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9zdGFydDogZmFpbGVkIHRvIHByaW1lIGhhc2ggdGFibGVcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCXRkYi0+bWV0aG9kcyA9IHRkYi0+dHJhbnNhY3Rpb24tPmlvX21ldGhvZHM7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwl0ZGJfYnJsb2NrKHRkYiwgRlJFRUxJU1RfVE9QLCBGX1VOTENLLCBGX1NFVExLVywgMCwgMCk7CisJdGRiX3RyYW5zYWN0aW9uX3VubG9jayh0ZGIpOworCVNBRkVfRlJFRSh0ZGItPnRyYW5zYWN0aW9uLT5oYXNoX2hlYWRzKTsKKwlTQUZFX0ZSRUUodGRiLT50cmFuc2FjdGlvbik7CisJcmV0dXJuIC0xOworfQorCisKKy8qCisgIGNhbmNlbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgorKi8KK2ludCB0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCWlmICh0ZGItPnRyYW5zYWN0aW9uID09IE5VTEwpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsOiBubyB0cmFuc2FjdGlvblxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHRkYi0+dHJhbnNhY3Rpb24tPm5lc3RpbmcgIT0gMCkgeworCQl0ZGItPnRyYW5zYWN0aW9uLT50cmFuc2FjdGlvbl9lcnJvciA9IDE7CisJCXRkYi0+dHJhbnNhY3Rpb24tPm5lc3RpbmctLTsKKwkJcmV0dXJuIDA7CisJfQorCisJdGRiLT5tYXBfc2l6ZSA9IHRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZTsKKworCS8qIGZyZWUgYWxsIHRoZSB0cmFuc2FjdGlvbiBlbGVtZW50cyAqLworCXdoaWxlICh0ZGItPnRyYW5zYWN0aW9uLT5lbGVtZW50cykgeworCQlzdHJ1Y3QgdGRiX3RyYW5zYWN0aW9uX2VsICplbCA9IHRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzOworCQl0ZGItPnRyYW5zYWN0aW9uLT5lbGVtZW50cyA9IGVsLT5uZXh0OworCQlmcmVlKGVsLT5kYXRhKTsKKwkJZnJlZShlbCk7CisJfQorCisJLyogcmVtb3ZlIGFueSBnbG9iYWwgbG9jayBjcmVhdGVkIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24gKi8KKwlpZiAodGRiLT5nbG9iYWxfbG9jay5jb3VudCAhPSAwKSB7CisJCXRkYl9icmxvY2sodGRiLCBGUkVFTElTVF9UT1AsIEZfVU5MQ0ssIEZfU0VUTEtXLCAwLCA0KnRkYi0+aGVhZGVyLmhhc2hfc2l6ZSk7CisJCXRkYi0+Z2xvYmFsX2xvY2suY291bnQgPSAwOworCX0KKworCS8qIHJlbW92ZSBhbnkgbG9ja3MgY3JlYXRlZCBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uICovCisJaWYgKHRkYi0+bnVtX2xvY2tzICE9IDApIHsKKwkJaW50IGk7CisJCWZvciAoaT0wO2k8dGRiLT5udW1fbG9ja3JlY3M7aSsrKSB7CisJCQl0ZGJfYnJsb2NrKHRkYixGUkVFTElTVF9UT1ArNCp0ZGItPmxvY2tyZWNzW2ldLmxpc3QsCisJCQkJICAgRl9VTkxDSyxGX1NFVExLVywgMCwgMSk7CisJCX0KKwkJdGRiLT5udW1fbG9ja3MgPSAwOworCQl0ZGItPm51bV9sb2NrcmVjcyA9IDA7CisJCVNBRkVfRlJFRSh0ZGItPmxvY2tyZWNzKTsKKwl9CisKKwkvKiByZXN0b3JlIHRoZSBub3JtYWwgaW8gbWV0aG9kcyAqLworCXRkYi0+bWV0aG9kcyA9IHRkYi0+dHJhbnNhY3Rpb24tPmlvX21ldGhvZHM7CisKKwl0ZGJfYnJsb2NrKHRkYiwgRlJFRUxJU1RfVE9QLCBGX1VOTENLLCBGX1NFVExLVywgMCwgMCk7CisJdGRiX3RyYW5zYWN0aW9uX3VubG9jayh0ZGIpOworCVNBRkVfRlJFRSh0ZGItPnRyYW5zYWN0aW9uLT5oYXNoX2hlYWRzKTsKKwlTQUZFX0ZSRUUodGRiLT50cmFuc2FjdGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgc3luYyB0byBkaXNrCisqLworc3RhdGljIGludCB0cmFuc2FjdGlvbl9zeW5jKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfbGVuX3QgbGVuZ3RoKQoreworCWlmIChmc3luYyh0ZGItPmZkKSAhPSAwKSB7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbjogZnN5bmMgZmFpbGVkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisjaWYgZGVmaW5lZChIQVZFX01TWU5DKSAmJiBkZWZpbmVkKE1TX1NZTkMpCisJaWYgKHRkYi0+bWFwX3B0cikgeworCQl0ZGJfb2ZmX3QgbW9mZnNldCA9IG9mZnNldCAmIH4odGRiLT5wYWdlX3NpemUtMSk7CisJCWlmIChtc3luYyhtb2Zmc2V0ICsgKGNoYXIgKil0ZGItPm1hcF9wdHIsCisJCQkgIGxlbmd0aCArIChvZmZzZXQgLSBtb2Zmc2V0KSwgTVNfU1lOQykgIT0gMCkgeworCQkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbjogbXN5bmMgZmFpbGVkIC0gJXNcbiIsCisJCQkJIHN0cmVycm9yKGVycm5vKSkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAgd29yayBvdXQgaG93IG11Y2ggc3BhY2UgdGhlIGxpbmVhcmlzZWQgcmVjb3ZlcnkgZGF0YSB3aWxsIGNvbnN1bWUKKyovCitzdGF0aWMgdGRiX2xlbl90IHRkYl9yZWNvdmVyeV9zaXplKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXN0cnVjdCB0ZGJfdHJhbnNhY3Rpb25fZWwgKmVsOworCXRkYl9sZW5fdCByZWNvdmVyeV9zaXplID0gMDsKKworCXJlY292ZXJ5X3NpemUgPSBzaXplb2YodTMyKTsKKwlmb3IgKGVsPXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzO2VsO2VsPWVsLT5uZXh0KSB7CisJCWlmIChlbC0+b2Zmc2V0ID49IHRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZSkgeworCQkJY29udGludWU7CisJCX0KKwkJcmVjb3Zlcnlfc2l6ZSArPSAyKnNpemVvZih0ZGJfb2ZmX3QpICsgZWwtPmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gcmVjb3Zlcnlfc2l6ZTsKK30KKworLyoKKyAgYWxsb2NhdGUgdGhlIHJlY292ZXJ5IGFyZWEsIG9yIHVzZSBhbiBleGlzdGluZyByZWNvdmVyeSBhcmVhIGlmIGl0IGlzCisgIGxhcmdlIGVub3VnaAorKi8KK3N0YXRpYyBpbnQgdGRiX3JlY292ZXJ5X2FsbG9jYXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLAorCQkJCSB0ZGJfbGVuX3QgKnJlY292ZXJ5X3NpemUsCisJCQkJIHRkYl9vZmZfdCAqcmVjb3Zlcnlfb2Zmc2V0LAorCQkJCSB0ZGJfbGVuX3QgKnJlY292ZXJ5X21heF9zaXplKQoreworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJY29uc3Qgc3RydWN0IHRkYl9tZXRob2RzICptZXRob2RzID0gdGRiLT50cmFuc2FjdGlvbi0+aW9fbWV0aG9kczsKKwl0ZGJfb2ZmX3QgcmVjb3ZlcnlfaGVhZDsKKworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfUkVDT1ZFUllfSEVBRCwgJnJlY292ZXJ5X2hlYWQpID09IC0xKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3JlY292ZXJ5X2FsbG9jYXRlOiBmYWlsZWQgdG8gcmVhZCByZWNvdmVyeSBoZWFkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZWMucmVjX2xlbiA9IDA7CisKKwlpZiAocmVjb3ZlcnlfaGVhZCAhPSAwICYmCisJICAgIG1ldGhvZHMtPnRkYl9yZWFkKHRkYiwgcmVjb3ZlcnlfaGVhZCwgJnJlYywgc2l6ZW9mKHJlYyksIERPQ09OVigpKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9yZWNvdmVyeV9hbGxvY2F0ZTogZmFpbGVkIHRvIHJlYWQgcmVjb3ZlcnkgcmVjb3JkXG4iKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkqcmVjb3Zlcnlfc2l6ZSA9IHRkYl9yZWNvdmVyeV9zaXplKHRkYik7CisKKwlpZiAocmVjb3ZlcnlfaGVhZCAhPSAwICYmICpyZWNvdmVyeV9zaXplIDw9IHJlYy5yZWNfbGVuKSB7CisJCS8qIGl0IGZpdHMgaW4gdGhlIGV4aXN0aW5nIGFyZWEgKi8KKwkJKnJlY292ZXJ5X21heF9zaXplID0gcmVjLnJlY19sZW47CisJCSpyZWNvdmVyeV9vZmZzZXQgPSByZWNvdmVyeV9oZWFkOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB3ZSBuZWVkIHRvIGZyZWUgdXAgdGhlIG9sZCByZWNvdmVyeSBhcmVhLCB0aGVuIGFsbG9jYXRlIGEKKwkgICBuZXcgb25lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlCisJICAgdGRiX2FsbG9jYXRlKCkgdG8gYWxsb2NhdGUgdGhlIG5ldyBvbmUgYXMgdGhhdCBtaWdodCByZXR1cm4KKwkgICB1cyBhbiBhcmVhIHRoYXQgaXMgYmVpbmcgY3VycmVudGx5IHVzZWQgKGFzIG9mIHRoZSBzdGFydCBvZgorCSAgIHRoZSB0cmFuc2FjdGlvbikgKi8KKwlpZiAocmVjb3ZlcnlfaGVhZCAhPSAwKSB7CisJCWlmICh0ZGJfZnJlZSh0ZGIsIHJlY292ZXJ5X2hlYWQsICZyZWMpID09IC0xKSB7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9yZWNvdmVyeV9hbGxvY2F0ZTogZmFpbGVkIHRvIGZyZWUgcHJldmlvdXMgcmVjb3ZlcnkgYXJlYVxuIikpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJLyogdGhlIHRkYl9mcmVlKCkgY2FsbCBtaWdodCBoYXZlIGluY3JlYXNlZCB0aGUgcmVjb3Zlcnkgc2l6ZSAqLworCSpyZWNvdmVyeV9zaXplID0gdGRiX3JlY292ZXJ5X3NpemUodGRiKTsKKworCS8qIHJvdW5kIHVwIHRvIGEgbXVsdGlwbGUgb2YgcGFnZSBzaXplICovCisJKnJlY292ZXJ5X21heF9zaXplID0gVERCX0FMSUdOKHNpemVvZihyZWMpICsgKnJlY292ZXJ5X3NpemUsIHRkYi0+cGFnZV9zaXplKSAtIHNpemVvZihyZWMpOworCSpyZWNvdmVyeV9vZmZzZXQgPSB0ZGItPm1hcF9zaXplOworCXJlY292ZXJ5X2hlYWQgPSAqcmVjb3Zlcnlfb2Zmc2V0OworCisJaWYgKG1ldGhvZHMtPnRkYl9leHBhbmRfZmlsZSh0ZGIsIHRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZSwKKwkJCQkgICAgICh0ZGItPm1hcF9zaXplIC0gdGRiLT50cmFuc2FjdGlvbi0+b2xkX21hcF9zaXplKSArCisJCQkJICAgICBzaXplb2YocmVjKSArICpyZWNvdmVyeV9tYXhfc2l6ZSkgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfcmVjb3ZlcnlfYWxsb2NhdGU6IGZhaWxlZCB0byBjcmVhdGUgcmVjb3ZlcnkgYXJlYVxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcmVtYXAgdGhlIGZpbGUgKGlmIHVzaW5nIG1tYXApICovCisJbWV0aG9kcy0+dGRiX29vYih0ZGIsIHRkYi0+bWFwX3NpemUgKyAxLCAxKTsKKworCS8qIHdlIGhhdmUgdG8gcmVzZXQgdGhlIG9sZCBtYXAgc2l6ZSBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBleHBhbmQgdGhlIGZpbGUKKwkgICBhZ2FpbiBpbiB0aGUgdHJhbnNhY3Rpb24gY29tbWl0LCB3aGljaCB3b3VsZCBkZXN0cm95IHRoZSByZWNvdmVyeSBhcmVhICovCisJdGRiLT50cmFuc2FjdGlvbi0+b2xkX21hcF9zaXplID0gdGRiLT5tYXBfc2l6ZTsKKworCS8qIHdyaXRlIHRoZSByZWNvdmVyeSBoZWFkZXIgb2Zmc2V0IGFuZCBzeW5jIC0gd2UgY2FuIHN5bmMgd2l0aG91dCBhIHJhY2UgaGVyZQorCSAgIGFzIHRoZSBtYWdpYyBwdHIgaW4gdGhlIHJlY292ZXJ5IHJlY29yZCBoYXMgbm90IGJlZW4gc2V0ICovCisJQ09OVkVSVChyZWNvdmVyeV9oZWFkKTsKKwlpZiAobWV0aG9kcy0+dGRiX3dyaXRlKHRkYiwgVERCX1JFQ09WRVJZX0hFQUQsCisJCQkgICAgICAgJnJlY292ZXJ5X2hlYWQsIHNpemVvZih0ZGJfb2ZmX3QpKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9yZWNvdmVyeV9hbGxvY2F0ZTogZmFpbGVkIHRvIHdyaXRlIHJlY292ZXJ5IGhlYWRcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgIHNldHVwIHRoZSByZWNvdmVyeSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIG9uIGEgY3Jhc2ggZHVyaW5nIGNvbW1pdAorKi8KK3N0YXRpYyBpbnQgdHJhbnNhY3Rpb25fc2V0dXBfcmVjb3Zlcnkoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsCisJCQkJICAgICAgdGRiX29mZl90ICptYWdpY19vZmZzZXQpCit7CisJc3RydWN0IHRkYl90cmFuc2FjdGlvbl9lbCAqZWw7CisJdGRiX2xlbl90IHJlY292ZXJ5X3NpemU7CisJdW5zaWduZWQgY2hhciAqZGF0YSwgKnA7CisJY29uc3Qgc3RydWN0IHRkYl9tZXRob2RzICptZXRob2RzID0gdGRiLT50cmFuc2FjdGlvbi0+aW9fbWV0aG9kczsKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYzsKKwl0ZGJfb2ZmX3QgcmVjb3Zlcnlfb2Zmc2V0LCByZWNvdmVyeV9tYXhfc2l6ZTsKKwl0ZGJfb2ZmX3Qgb2xkX21hcF9zaXplID0gdGRiLT50cmFuc2FjdGlvbi0+b2xkX21hcF9zaXplOworCXUzMiBtYWdpYywgdGFpbGVyOworCisJLyoKKwkgIGNoZWNrIHRoYXQgdGhlIHJlY292ZXJ5IGFyZWEgaGFzIGVub3VnaCBzcGFjZQorCSovCisJaWYgKHRkYl9yZWNvdmVyeV9hbGxvY2F0ZSh0ZGIsICZyZWNvdmVyeV9zaXplLAorCQkJCSAgJnJlY292ZXJ5X29mZnNldCwgJnJlY292ZXJ5X21heF9zaXplKSA9PSAtMSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHJlY292ZXJ5X3NpemUgKyBzaXplb2YoKnJlYykpOworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfT09NOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVjID0gKHN0cnVjdCBsaXN0X3N0cnVjdCAqKWRhdGE7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKKworCXJlYy0+bWFnaWMgICAgPSAwOworCXJlYy0+ZGF0YV9sZW4gPSByZWNvdmVyeV9zaXplOworCXJlYy0+cmVjX2xlbiAgPSByZWNvdmVyeV9tYXhfc2l6ZTsKKwlyZWMtPmtleV9sZW4gID0gb2xkX21hcF9zaXplOworCUNPTlZFUlQocmVjKTsKKworCS8qIGJ1aWxkIHRoZSByZWNvdmVyeSBkYXRhIGludG8gYSBzaW5nbGUgYmxvYiB0byBhbGxvdyB1cyB0byBkbyBhIHNpbmdsZQorCSAgIGxhcmdlIHdyaXRlLCB3aGljaCBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgKi8KKwlwID0gZGF0YSArIHNpemVvZigqcmVjKTsKKwlmb3IgKGVsPXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzO2VsO2VsPWVsLT5uZXh0KSB7CisJCWlmIChlbC0+b2Zmc2V0ID49IG9sZF9tYXBfc2l6ZSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGVsLT5vZmZzZXQgKyBlbC0+bGVuZ3RoID4gdGRiLT50cmFuc2FjdGlvbi0+b2xkX21hcF9zaXplKSB7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9zZXR1cF9yZWNvdmVyeTogdHJhbnNhY3Rpb24gZGF0YSBvdmVyIG5ldyByZWdpb24gYm91bmRhcnlcbiIpKTsKKwkJCWZyZWUoZGF0YSk7CisJCQl0ZGItPmVjb2RlID0gVERCX0VSUl9DT1JSVVBUOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShwLCAmZWwtPm9mZnNldCwgNCk7CisJCW1lbWNweShwKzQsICZlbC0+bGVuZ3RoLCA0KTsKKwkJaWYgKERPQ09OVigpKSB7CisJCQl0ZGJfY29udmVydChwLCA4KTsKKwkJfQorCQkvKiB0aGUgcmVjb3ZlcnkgYXJlYSBjb250YWlucyB0aGUgb2xkIGRhdGEsIG5vdCB0aGUKKwkJICAgbmV3IGRhdGEsIHNvIHdlIGhhdmUgdG8gY2FsbCB0aGUgb3JpZ2luYWwgdGRiX3JlYWQKKwkJICAgbWV0aG9kIHRvIGdldCBpdCAqLworCQlpZiAobWV0aG9kcy0+dGRiX3JlYWQodGRiLCBlbC0+b2Zmc2V0LCBwICsgOCwgZWwtPmxlbmd0aCwgMCkgIT0gMCkgeworCQkJZnJlZShkYXRhKTsKKwkJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQkJcmV0dXJuIC0xOworCQl9CisJCXAgKz0gOCArIGVsLT5sZW5ndGg7CisJfQorCisJLyogYW5kIHRoZSB0YWlsZXIgKi8KKwl0YWlsZXIgPSBzaXplb2YoKnJlYykgKyByZWNvdmVyeV9tYXhfc2l6ZTsKKwltZW1jcHkocCwgJnRhaWxlciwgNCk7CisJQ09OVkVSVChwKTsKKworCS8qIHdyaXRlIHRoZSByZWNvdmVyeSBkYXRhIHRvIHRoZSByZWNvdmVyeSBhcmVhICovCisJaWYgKG1ldGhvZHMtPnRkYl93cml0ZSh0ZGIsIHJlY292ZXJ5X29mZnNldCwgZGF0YSwgc2l6ZW9mKCpyZWMpICsgcmVjb3Zlcnlfc2l6ZSkgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fc2V0dXBfcmVjb3Zlcnk6IGZhaWxlZCB0byB3cml0ZSByZWNvdmVyeSBkYXRhXG4iKSk7CisJCWZyZWUoZGF0YSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogYXMgd2UgZG9uJ3QgaGF2ZSBvcmRlcmVkIHdyaXRlcywgd2UgaGF2ZSB0byBzeW5jIHRoZSByZWNvdmVyeQorCSAgIGRhdGEgYmVmb3JlIHdlIHVwZGF0ZSB0aGUgbWFnaWMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVjb3ZlcnkKKwkgICBkYXRhIGlzIHByZXNlbnQgKi8KKwlpZiAodHJhbnNhY3Rpb25fc3luYyh0ZGIsIHJlY292ZXJ5X29mZnNldCwgc2l6ZW9mKCpyZWMpICsgcmVjb3Zlcnlfc2l6ZSkgPT0gLTEpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZyZWUoZGF0YSk7CisKKwltYWdpYyA9IFREQl9SRUNPVkVSWV9NQUdJQzsKKwlDT05WRVJUKG1hZ2ljKTsKKworCSptYWdpY19vZmZzZXQgPSByZWNvdmVyeV9vZmZzZXQgKyBvZmZzZXRvZihzdHJ1Y3QgbGlzdF9zdHJ1Y3QsIG1hZ2ljKTsKKworCWlmIChtZXRob2RzLT50ZGJfd3JpdGUodGRiLCAqbWFnaWNfb2Zmc2V0LCAmbWFnaWMsIHNpemVvZihtYWdpYykpID09IC0xKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYW5zYWN0aW9uX3NldHVwX3JlY292ZXJ5OiBmYWlsZWQgdG8gd3JpdGUgcmVjb3ZlcnkgbWFnaWNcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBlbnN1cmUgdGhlIHJlY292ZXJ5IG1hZ2ljIG1hcmtlciBpcyBvbiBkaXNrICovCisJaWYgKHRyYW5zYWN0aW9uX3N5bmModGRiLCAqbWFnaWNfb2Zmc2V0LCBzaXplb2YobWFnaWMpKSA9PSAtMSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbgorKi8KK2ludCB0ZGJfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCWNvbnN0IHN0cnVjdCB0ZGJfbWV0aG9kcyAqbWV0aG9kczsKKwl0ZGJfb2ZmX3QgbWFnaWNfb2Zmc2V0ID0gMDsKKwl1MzIgemVybyA9IDA7CisKKwlpZiAodGRiLT50cmFuc2FjdGlvbiA9PSBOVUxMKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3RyYW5zYWN0aW9uX2NvbW1pdDogbm8gdHJhbnNhY3Rpb25cbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh0ZGItPnRyYW5zYWN0aW9uLT50cmFuc2FjdGlvbl9lcnJvcikgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbCh0ZGIpOworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl90cmFuc2FjdGlvbl9jb21taXQ6IHRyYW5zYWN0aW9uIGVycm9yIHBlbmRpbmdcbiIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh0ZGItPnRyYW5zYWN0aW9uLT5uZXN0aW5nICE9IDApIHsKKwkJdGRiLT50cmFuc2FjdGlvbi0+bmVzdGluZy0tOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBmb3IgYSBudWxsIHRyYW5zYWN0aW9uICovCisJaWYgKHRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzID09IE5VTEwpIHsKKwkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbCh0ZGIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltZXRob2RzID0gdGRiLT50cmFuc2FjdGlvbi0+aW9fbWV0aG9kczsKKworCS8qIGlmIHRoZXJlIGFyZSBhbnkgbG9ja3MgcGVuZGluZyB0aGVuIHRoZSBjYWxsZXIgaGFzIG5vdAorCSAgIG5lc3RlZCB0aGVpciBsb2NrcyBwcm9wZXJseSwgc28gZmFpbCB0aGUgdHJhbnNhY3Rpb24gKi8KKwlpZiAodGRiLT5udW1fbG9ja3MgfHwgdGRiLT5nbG9iYWxfbG9jay5jb3VudCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9MT0NLOworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl90cmFuc2FjdGlvbl9jb21taXQ6IGxvY2tzIHBlbmRpbmcgb24gY29tbWl0XG4iKSk7CisJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwodGRiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHVwZ3JhZGUgdGhlIG1haW4gdHJhbnNhY3Rpb24gbG9jayByZWdpb24gdG8gYSB3cml0ZSBsb2NrICovCisJaWYgKHRkYl9icmxvY2tfdXBncmFkZSh0ZGIsIEZSRUVMSVNUX1RPUCwgMCkgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfdHJhbnNhY3Rpb25fc3RhcnQ6IGZhaWxlZCB0byB1cGdyYWRlIGhhc2ggbG9ja3NcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfTE9DSzsKKwkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbCh0ZGIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZ2V0IHRoZSBnbG9iYWwgbG9jayAtIHRoaXMgcHJldmVudHMgbmV3IHVzZXJzIGF0dGFjaGluZyB0byB0aGUgZGF0YWJhc2UKKwkgICBkdXJpbmcgdGhlIGNvbW1pdCAqLworCWlmICh0ZGJfYnJsb2NrKHRkYiwgR0xPQkFMX0xPQ0ssIEZfV1JMQ0ssIEZfU0VUTEtXLCAwLCAxKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl90cmFuc2FjdGlvbl9jb21taXQ6IGZhaWxlZCB0byBnZXQgZ2xvYmFsIGxvY2tcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfTE9DSzsKKwkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbCh0ZGIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCEodGRiLT5mbGFncyAmIFREQl9OT1NZTkMpKSB7CisJCS8qIHdyaXRlIHRoZSByZWNvdmVyeSBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwkJaWYgKHRyYW5zYWN0aW9uX3NldHVwX3JlY292ZXJ5KHRkYiwgJm1hZ2ljX29mZnNldCkgPT0gLTEpIHsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYW5zYWN0aW9uX2NvbW1pdDogZmFpbGVkIHRvIHNldHVwIHJlY292ZXJ5IGRhdGFcbiIpKTsKKwkJCXRkYl9icmxvY2sodGRiLCBHTE9CQUxfTE9DSywgRl9VTkxDSywgRl9TRVRMS1csIDAsIDEpOworCQkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbCh0ZGIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJLyogZXhwYW5kIHRoZSBmaWxlIHRvIHRoZSBuZXcgc2l6ZSBpZiBuZWVkZWQgKi8KKwlpZiAodGRiLT5tYXBfc2l6ZSAhPSB0ZGItPnRyYW5zYWN0aW9uLT5vbGRfbWFwX3NpemUpIHsKKwkJaWYgKG1ldGhvZHMtPnRkYl9leHBhbmRfZmlsZSh0ZGIsIHRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZSwKKwkJCQkJICAgICB0ZGItPm1hcF9zaXplIC0KKwkJCQkJICAgICB0ZGItPnRyYW5zYWN0aW9uLT5vbGRfbWFwX3NpemUpID09IC0xKSB7CisJCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYW5zYWN0aW9uX2NvbW1pdDogZXhwYW5zaW9uIGZhaWxlZFxuIikpOworCQkJdGRiX2JybG9jayh0ZGIsIEdMT0JBTF9MT0NLLCBGX1VOTENLLCBGX1NFVExLVywgMCwgMSk7CisJCQl0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsKHRkYik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJdGRiLT5tYXBfc2l6ZSA9IHRkYi0+dHJhbnNhY3Rpb24tPm9sZF9tYXBfc2l6ZTsKKwkJbWV0aG9kcy0+dGRiX29vYih0ZGIsIHRkYi0+bWFwX3NpemUgKyAxLCAxKTsKKwl9CisKKwkvKiBwZXJmb3JtIGFsbCB0aGUgd3JpdGVzICovCisJd2hpbGUgKHRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzKSB7CisJCXN0cnVjdCB0ZGJfdHJhbnNhY3Rpb25fZWwgKmVsID0gdGRiLT50cmFuc2FjdGlvbi0+ZWxlbWVudHM7CisKKwkJaWYgKG1ldGhvZHMtPnRkYl93cml0ZSh0ZGIsIGVsLT5vZmZzZXQsIGVsLT5kYXRhLCBlbC0+bGVuZ3RoKSA9PSAtMSkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fY29tbWl0OiB3cml0ZSBmYWlsZWQgZHVyaW5nIGNvbW1pdFxuIikpOworCisJCQkvKiB3ZSd2ZSBvdmVyd3JpdHRlbiBwYXJ0IG9mIHRoZSBkYXRhIGFuZAorCQkJICAgcG9zc2libHkgZXhwYW5kZWQgdGhlIGZpbGUsIHNvIHdlIG5lZWQgdG8KKwkJCSAgIHJ1biB0aGUgY3Jhc2ggcmVjb3ZlcnkgY29kZSAqLworCQkJdGRiLT5tZXRob2RzID0gbWV0aG9kczsKKwkJCXRkYl90cmFuc2FjdGlvbl9yZWNvdmVyKHRkYik7CisKKwkJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwodGRiKTsKKwkJCXRkYl9icmxvY2sodGRiLCBHTE9CQUxfTE9DSywgRl9VTkxDSywgRl9TRVRMS1csIDAsIDEpOworCisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9jb21taXQ6IHdyaXRlIGZhaWxlZFxuIikpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXRkYi0+dHJhbnNhY3Rpb24tPmVsZW1lbnRzID0gZWwtPm5leHQ7CisJCWZyZWUoZWwtPmRhdGEpOworCQlmcmVlKGVsKTsKKwl9CisKKwlpZiAoISh0ZGItPmZsYWdzICYgVERCX05PU1lOQykpIHsKKwkJLyogZW5zdXJlIHRoZSBuZXcgZGF0YSBpcyBvbiBkaXNrICovCisJCWlmICh0cmFuc2FjdGlvbl9zeW5jKHRkYiwgMCwgdGRiLT5tYXBfc2l6ZSkgPT0gLTEpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIHJlbW92ZSB0aGUgcmVjb3ZlcnkgbWFya2VyICovCisJCWlmIChtZXRob2RzLT50ZGJfd3JpdGUodGRiLCBtYWdpY19vZmZzZXQsICZ6ZXJvLCA0KSA9PSAtMSkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fY29tbWl0OiBmYWlsZWQgdG8gcmVtb3ZlIHJlY292ZXJ5IG1hZ2ljXG4iKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBlbnN1cmUgdGhlIHJlY292ZXJ5IG1hcmtlciBoYXMgYmVlbiByZW1vdmVkIG9uIGRpc2sgKi8KKwkJaWYgKHRyYW5zYWN0aW9uX3N5bmModGRiLCBtYWdpY19vZmZzZXQsIDQpID09IC0xKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwl0ZGJfYnJsb2NrKHRkYiwgR0xPQkFMX0xPQ0ssIEZfVU5MQ0ssIEZfU0VUTEtXLCAwLCAxKTsKKworCS8qCisJICBUT0RPOiBtYXliZSB3cml0ZSB0byBzb21lIGR1bW15IGhkciBmaWVsZCwgb3Igd3JpdGUgdG8gbWFnaWMKKwkgIG9mZnNldCB3aXRob3V0IG1tYXAsIGJlZm9yZSB0aGUgbGFzdCBzeW5jLCBpbnN0ZWFkIG9mIHRoZQorCSAgdXRpbWUoKSBjYWxsCisJKi8KKworCS8qIG9uIHNvbWUgc3lzdGVtcyAobGlrZSBMaW51eCAyLjYueCkgY2hhbmdlcyB2aWEgbW1hcC9tc3luYworCSAgIGRvbid0IGNoYW5nZSB0aGUgbXRpbWUgb2YgdGhlIGZpbGUsIHRoaXMgbWVhbnMgdGhlIGZpbGUgbWF5CisJICAgbm90IGJlIGJhY2tlZCB1cCAoYXMgdGRiIHJvdW5kaW5nIHRvIGJsb2NrIHNpemVzIG1lYW5zIHRoYXQKKwkgICBmaWxlIHNpemUgY2hhbmdlcyBhcmUgcXVpdGUgcmFyZSB0b28pLiBUaGUgZm9sbG93aW5nIGZvcmNlcworCSAgIG10aW1lIGNoYW5nZXMgd2hlbiBhIHRyYW5zYWN0aW9uIGNvbXBsZXRlcyAqLworI2lmZGVmIEhBVkVfVVRJTUUKKwl1dGltZSh0ZGItPm5hbWUsIE5VTEwpOworI2VuZGlmCisKKwkvKiB1c2UgYSB0cmFuc2FjdGlvbiBjYW5jZWwgdG8gZnJlZSBtZW1vcnkgYW5kIHJlbW92ZSB0aGUKKwkgICB0cmFuc2FjdGlvbiBsb2NrcyAqLworCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwodGRiKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICByZWNvdmVyIGZyb20gYW4gYWJvcnRlZCB0cmFuc2FjdGlvbi4gTXVzdCBiZSBjYWxsZWQgd2l0aCBleGNsdXNpdmUKKyAgZGF0YWJhc2Ugd3JpdGUgYWNjZXNzIGFscmVhZHkgZXN0YWJsaXNoZWQgKGluY2x1ZGluZyB0aGUgZ2xvYmFsCisgIGxvY2sgdG8gcHJldmVudCBuZXcgcHJvY2Vzc2VzIGF0dGFjaGluZykKKyovCitpbnQgdGRiX3RyYW5zYWN0aW9uX3JlY292ZXIoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJdGRiX29mZl90IHJlY292ZXJ5X2hlYWQsIHJlY292ZXJ5X2VvZjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCAqcDsKKwl1MzIgemVybyA9IDA7CisJc3RydWN0IGxpc3Rfc3RydWN0IHJlYzsKKworCS8qIGZpbmQgdGhlIHJlY292ZXJ5IGFyZWEgKi8KKwlpZiAodGRiX29mc19yZWFkKHRkYiwgVERCX1JFQ09WRVJZX0hFQUQsICZyZWNvdmVyeV9oZWFkKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBmYWlsZWQgdG8gcmVhZCByZWNvdmVyeSBoZWFkXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJlY292ZXJ5X2hlYWQgPT0gMCkgeworCQkvKiB3ZSBoYXZlIG5ldmVyIGFsbG9jYXRlZCBhIHJlY292ZXJ5IHJlY29yZCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiByZWFkIHRoZSByZWNvdmVyeSByZWNvcmQgKi8KKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfcmVhZCh0ZGIsIHJlY292ZXJ5X2hlYWQsICZyZWMsCisJCQkJICAgc2l6ZW9mKHJlYyksIERPQ09OVigpKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBmYWlsZWQgdG8gcmVhZCByZWNvdmVyeSByZWNvcmRcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmVjLm1hZ2ljICE9IFREQl9SRUNPVkVSWV9NQUdJQykgeworCQkvKiB0aGVyZSBpcyBubyB2YWxpZCByZWNvdmVyeSBkYXRhICovCisJCXJldHVybiAwOworCX0KKworCWlmICh0ZGItPnJlYWRfb25seSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBhdHRlbXB0IHRvIHJlY292ZXIgcmVhZCBvbmx5IGRhdGFiYXNlXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0NPUlJVUFQ7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZWNvdmVyeV9lb2YgPSByZWMua2V5X2xlbjsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhyZWMuZGF0YV9sZW4pOworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcjogZmFpbGVkIHRvIGFsbG9jYXRlIHJlY292ZXJ5IGRhdGFcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfT09NOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcmVhZCB0aGUgZnVsbCByZWNvdmVyeSBkYXRhICovCisJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX3JlYWQodGRiLCByZWNvdmVyeV9oZWFkICsgc2l6ZW9mKHJlYyksIGRhdGEsCisJCQkJICAgcmVjLmRhdGFfbGVuLCAwKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBmYWlsZWQgdG8gcmVhZCByZWNvdmVyeSBkYXRhXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcmVjb3ZlciB0aGUgZmlsZSBkYXRhICovCisJcCA9IGRhdGE7CisJd2hpbGUgKHArOCA8IGRhdGEgKyByZWMuZGF0YV9sZW4pIHsKKwkJdTMyIG9mcywgbGVuOworCQlpZiAoRE9DT05WKCkpIHsKKwkJCXRkYl9jb252ZXJ0KHAsIDgpOworCQl9CisJCW1lbWNweSgmb2ZzLCBwLCA0KTsKKwkJbWVtY3B5KCZsZW4sIHArNCwgNCk7CisKKwkJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX3dyaXRlKHRkYiwgb2ZzLCBwKzgsIGxlbikgPT0gLTEpIHsKKwkJCWZyZWUoZGF0YSk7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBmYWlsZWQgdG8gcmVjb3ZlciAlZCBieXRlcyBhdCBvZmZzZXQgJWRcbiIsIGxlbiwgb2ZzKSk7CisJCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwICs9IDggKyBsZW47CisJfQorCisJZnJlZShkYXRhKTsKKworCWlmICh0cmFuc2FjdGlvbl9zeW5jKHRkYiwgMCwgdGRiLT5tYXBfc2l6ZSkgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcjogZmFpbGVkIHRvIHN5bmMgcmVjb3ZlcnlcbiIpKTsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBpZiB0aGUgcmVjb3ZlcnkgYXJlYSBpcyBhZnRlciB0aGUgcmVjb3ZlcmVkIGVvZiB0aGVuIHJlbW92ZSBpdCAqLworCWlmIChyZWNvdmVyeV9lb2YgPD0gcmVjb3ZlcnlfaGVhZCkgeworCQlpZiAodGRiX29mc193cml0ZSh0ZGIsIFREQl9SRUNPVkVSWV9IRUFELCAmemVybykgPT0gLTEpIHsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYW5zYWN0aW9uX3JlY292ZXI6IGZhaWxlZCB0byByZW1vdmUgcmVjb3ZlcnkgaGVhZFxuIikpOworCQkJdGRiLT5lY29kZSA9IFREQl9FUlJfSU87CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiByZW1vdmUgdGhlIHJlY292ZXJ5IG1hZ2ljICovCisJaWYgKHRkYl9vZnNfd3JpdGUodGRiLCByZWNvdmVyeV9oZWFkICsgb2Zmc2V0b2Yoc3RydWN0IGxpc3Rfc3RydWN0LCBtYWdpYyksCisJCQkgICZ6ZXJvKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl90cmFuc2FjdGlvbl9yZWNvdmVyOiBmYWlsZWQgdG8gcmVtb3ZlIHJlY292ZXJ5IG1hZ2ljXG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcmVkdWNlIHRoZSBmaWxlIHNpemUgdG8gdGhlIG9sZCBzaXplICovCisJdGRiX211bm1hcCh0ZGIpOworCWlmIChmdHJ1bmNhdGUodGRiLT5mZCwgcmVjb3ZlcnlfZW9mKSAhPSAwKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYW5zYWN0aW9uX3JlY292ZXI6IGZhaWxlZCB0byByZWR1Y2UgdG8gcmVjb3Zlcnkgc2l6ZVxuIikpOworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9JTzsKKwkJcmV0dXJuIC0xOworCX0KKwl0ZGItPm1hcF9zaXplID0gcmVjb3ZlcnlfZW9mOworCXRkYl9tbWFwKHRkYik7CisKKwlpZiAodHJhbnNhY3Rpb25fc3luYyh0ZGIsIDAsIHJlY292ZXJ5X2VvZikgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcjogZmFpbGVkIHRvIHN5bmMyIHJlY292ZXJ5XG4iKSk7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0lPOworCQlyZXR1cm4gLTE7CisJfQorCisJVERCX0xPRygodGRiLCBUREJfREVCVUdfVFJBQ0UsICJ0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcjogcmVjb3ZlcmVkICVkIGJ5dGUgZGF0YWJhc2VcbiIsCisJCSByZWNvdmVyeV9lb2YpKTsKKworCS8qIGFsbCBkb25lICovCisJcmV0dXJuIDA7Cit9CisKKy8qIGZpbGU6IGZyZWVsaXN0LmMgKi8KKworLyogcmVhZCBhIGZyZWVsaXN0IHJlY29yZCBhbmQgY2hlY2sgZm9yIHNpbXBsZSBlcnJvcnMgKi8KK3N0YXRpYyBpbnQgdGRiX3JlY19mcmVlX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKQoreworCWlmICh0ZGItPm1ldGhvZHMtPnRkYl9yZWFkKHRkYiwgb2ZmLCByZWMsIHNpemVvZigqcmVjKSxET0NPTlYoKSkgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWlmIChyZWMtPm1hZ2ljID09IFREQl9NQUdJQykgeworCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiBhIGFwcCBpcyBzaG93ZG93biB3aGlsZSBkZWxldGluZyBhIHJlY29yZCAtIHdlIHNob3VsZAorCQkgICBub3QgY29tcGxldGVseSBmYWlsIHdoZW4gdGhpcyBoYXBwZW5zICovCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX1dBUk5JTkcsICJ0ZGJfcmVjX2ZyZWVfcmVhZCBub24tZnJlZSBtYWdpYyAweCV4IGF0IG9mZnNldD0lZCAtIGZpeGluZ1xuIiwKKwkJCSByZWMtPm1hZ2ljLCBvZmYpKTsKKwkJcmVjLT5tYWdpYyA9IFREQl9GUkVFX01BR0lDOworCQlpZiAodGRiLT5tZXRob2RzLT50ZGJfd3JpdGUodGRiLCBvZmYsIHJlYywgc2l6ZW9mKCpyZWMpKSA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmVjLT5tYWdpYyAhPSBUREJfRlJFRV9NQUdJQykgeworCQkvKiBFbnN1cmUgZWNvZGUgaXMgc2V0IGZvciBsb2cgZm4uICovCisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX0NPUlJVUFQ7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX1dBUk5JTkcsICJ0ZGJfcmVjX2ZyZWVfcmVhZCBiYWQgbWFnaWMgMHgleCBhdCBvZmZzZXQ9JWRcbiIsCisJCQkgICByZWMtPm1hZ2ljLCBvZmYpKTsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfQ09SUlVQVCwgLTEpOworCX0KKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfb29iKHRkYiwgcmVjLT5uZXh0K3NpemVvZigqcmVjKSwgMCkgIT0gMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisKKworLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgZnJlZWxpc3QuICBNdXN0IGhhdmUgYWxsb2MgbG9jay4gKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2Zyb21fZnJlZWxpc3Qoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYsIHRkYl9vZmZfdCBuZXh0KQoreworCXRkYl9vZmZfdCBsYXN0X3B0ciwgaTsKKworCS8qIHJlYWQgaW4gdGhlIGZyZWVsaXN0IHRvcCAqLworCWxhc3RfcHRyID0gRlJFRUxJU1RfVE9QOworCXdoaWxlICh0ZGJfb2ZzX3JlYWQodGRiLCBsYXN0X3B0ciwgJmkpICE9IC0xICYmIGkgIT0gMCkgeworCQlpZiAoaSA9PSBvZmYpIHsKKwkJCS8qIFdlJ3ZlIGZvdW5kIGl0ISAqLworCQkJcmV0dXJuIHRkYl9vZnNfd3JpdGUodGRiLCBsYXN0X3B0ciwgJm5leHQpOworCQl9CisJCS8qIEZvbGxvdyBjaGFpbiAobmV4dCBvZmZzZXQgaXMgYXQgc3RhcnQgb2YgcmVjb3JkKSAqLworCQlsYXN0X3B0ciA9IGk7CisJfQorCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCJyZW1vdmVfZnJvbV9mcmVlbGlzdDogbm90IG9uIGxpc3QgYXQgb2ZmPSVkXG4iLCBvZmYpKTsKKwlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9DT1JSVVBULCAtMSk7Cit9CisKKworLyogdXBkYXRlIGEgcmVjb3JkIHRhaWxlciAobXVzdCBob2xkIGFsbG9jYXRpb24gbG9jaykgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3RhaWxlcihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwKKwkJCSBjb25zdCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYykKK3sKKwl0ZGJfb2ZmX3QgdG90YWxzaXplOworCisJLyogT2Zmc2V0IG9mIHRhaWxlciBmcm9tIHJlY29yZCBoZWFkZXIgKi8KKwl0b3RhbHNpemUgPSBzaXplb2YoKnJlYykgKyByZWMtPnJlY19sZW47CisJcmV0dXJuIHRkYl9vZnNfd3JpdGUodGRiLCBvZmZzZXQgKyB0b3RhbHNpemUgLSBzaXplb2YodGRiX29mZl90KSwKKwkJCSAmdG90YWxzaXplKTsKK30KKworLyogQWRkIGFuIGVsZW1lbnQgaW50byB0aGUgZnJlZWxpc3QuIE1lcmdlIGFkamFjZW50IHJlY29yZHMgaWYKKyAgIG5lY2Nlc3NhcnkuICovCitpbnQgdGRiX2ZyZWUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKQoreworCXRkYl9vZmZfdCByaWdodCwgbGVmdDsKKworCS8qIEFsbG9jYXRpb24gYW5kIHRhaWxlciBsb2NrICovCisJaWYgKHRkYl9sb2NrKHRkYiwgLTEsIEZfV1JMQ0spICE9IDApCisJCXJldHVybiAtMTsKKworCS8qIHNldCBhbiBpbml0aWFsIHRhaWxlciwgc28gaWYgd2UgZmFpbCB3ZSBkb24ndCBsZWF2ZSBhIGJvZ3VzIHJlY29yZCAqLworCWlmICh1cGRhdGVfdGFpbGVyKHRkYiwgb2Zmc2V0LCByZWMpICE9IDApIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfZnJlZTogdXBkYXRlX3RhaWxlciBmYWlsZWQhXG4iKSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBMb29rIHJpZ2h0IGZpcnN0IChJJ20gYW4gQXVzdHJhbGlhbiwgZGFtbWl0KSAqLworCXJpZ2h0ID0gb2Zmc2V0ICsgc2l6ZW9mKCpyZWMpICsgcmVjLT5yZWNfbGVuOworCWlmIChyaWdodCArIHNpemVvZigqcmVjKSA8PSB0ZGItPm1hcF9zaXplKSB7CisJCXN0cnVjdCBsaXN0X3N0cnVjdCByOworCisJCWlmICh0ZGItPm1ldGhvZHMtPnRkYl9yZWFkKHRkYiwgcmlnaHQsICZyLCBzaXplb2YociksIERPQ09OVigpKSA9PSAtMSkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfZnJlZTogcmlnaHQgcmVhZCBmYWlsZWQgYXQgJXVcbiIsIHJpZ2h0KSk7CisJCQlnb3RvIGxlZnQ7CisJCX0KKworCQkvKiBJZiBpdCdzIGZyZWUsIGV4cGFuZCB0byBpbmNsdWRlIGl0LiAqLworCQlpZiAoci5tYWdpYyA9PSBUREJfRlJFRV9NQUdJQykgeworCQkJaWYgKHJlbW92ZV9mcm9tX2ZyZWVsaXN0KHRkYiwgcmlnaHQsIHIubmV4dCkgPT0gLTEpIHsKKwkJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9mcmVlOiByaWdodCBmcmVlIGZhaWxlZCBhdCAldVxuIiwgcmlnaHQpKTsKKwkJCQlnb3RvIGxlZnQ7CisJCQl9CisJCQlyZWMtPnJlY19sZW4gKz0gc2l6ZW9mKHIpICsgci5yZWNfbGVuOworCQl9CisJfQorCitsZWZ0OgorCS8qIExvb2sgbGVmdCAqLworCWxlZnQgPSBvZmZzZXQgLSBzaXplb2YodGRiX29mZl90KTsKKwlpZiAobGVmdCA+IFREQl9EQVRBX1NUQVJUKHRkYi0+aGVhZGVyLmhhc2hfc2l6ZSkpIHsKKwkJc3RydWN0IGxpc3Rfc3RydWN0IGw7CisJCXRkYl9vZmZfdCBsZWZ0c2l6ZTsKKworCQkvKiBSZWFkIGluIHRhaWxlciBhbmQganVtcCBiYWNrIHRvIGhlYWRlciAqLworCQlpZiAodGRiX29mc19yZWFkKHRkYiwgbGVmdCwgJmxlZnRzaXplKSA9PSAtMSkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfZnJlZTogbGVmdCBvZmZzZXQgcmVhZCBmYWlsZWQgYXQgJXVcbiIsIGxlZnQpKTsKKwkJCWdvdG8gdXBkYXRlOworCQl9CisKKwkJLyogaXQgY291bGQgYmUgdW5pbml0aWFsaXNlZCBkYXRhICovCisJCWlmIChsZWZ0c2l6ZSA9PSAwIHx8IGxlZnRzaXplID09IFREQl9QQURfVTMyKSB7CisJCQlnb3RvIHVwZGF0ZTsKKwkJfQorCisJCWxlZnQgPSBvZmZzZXQgLSBsZWZ0c2l6ZTsKKworCQkvKiBOb3cgcmVhZCBpbiByZWNvcmQgKi8KKwkJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX3JlYWQodGRiLCBsZWZ0LCAmbCwgc2l6ZW9mKGwpLCBET0NPTlYoKSkgPT0gLTEpIHsKKwkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX2ZyZWU6IGxlZnQgcmVhZCBmYWlsZWQgYXQgJXUgKCV1KVxuIiwgbGVmdCwgbGVmdHNpemUpKTsKKwkJCWdvdG8gdXBkYXRlOworCQl9CisKKwkJLyogSWYgaXQncyBmcmVlLCBleHBhbmQgdG8gaW5jbHVkZSBpdC4gKi8KKwkJaWYgKGwubWFnaWMgPT0gVERCX0ZSRUVfTUFHSUMpIHsKKwkJCWlmIChyZW1vdmVfZnJvbV9mcmVlbGlzdCh0ZGIsIGxlZnQsIGwubmV4dCkgPT0gLTEpIHsKKwkJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9mcmVlOiBsZWZ0IGZyZWUgZmFpbGVkIGF0ICV1XG4iLCBsZWZ0KSk7CisJCQkJZ290byB1cGRhdGU7CisJCQl9IGVsc2UgeworCQkJCW9mZnNldCA9IGxlZnQ7CisJCQkJcmVjLT5yZWNfbGVuICs9IGxlZnRzaXplOworCQkJfQorCQl9CisJfQorCit1cGRhdGU6CisJaWYgKHVwZGF0ZV90YWlsZXIodGRiLCBvZmZzZXQsIHJlYykgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfZnJlZTogdXBkYXRlX3RhaWxlciBmYWlsZWQgYXQgJXVcbiIsIG9mZnNldCkpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogTm93LCBwcmVwZW5kIHRvIGZyZWUgbGlzdCAqLworCXJlYy0+bWFnaWMgPSBUREJfRlJFRV9NQUdJQzsKKworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBGUkVFTElTVF9UT1AsICZyZWMtPm5leHQpID09IC0xIHx8CisJICAgIHRkYl9yZWNfd3JpdGUodGRiLCBvZmZzZXQsIHJlYykgPT0gLTEgfHwKKwkgICAgdGRiX29mc193cml0ZSh0ZGIsIEZSRUVMSVNUX1RPUCwgJm9mZnNldCkgPT0gLTEpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfZnJlZSByZWNvcmQgd3JpdGUgZmFpbGVkIGF0IG9mZnNldD0lZFxuIiwgb2Zmc2V0KSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBbmQgd2UncmUgZG9uZS4gKi8KKwl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCXJldHVybiAwOworCisgZmFpbDoKKwl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCXJldHVybiAtMTsKK30KKworCisvKgorICAgdGhlIGNvcmUgb2YgdGRiX2FsbG9jYXRlIC0gY2FsbGVkIHdoZW4gd2UgaGF2ZSBkZWNpZGVkIHdoaWNoCisgICBmcmVlIGxpc3QgZW50cnkgdG8gdXNlCisgKi8KK3N0YXRpYyB0ZGJfb2ZmX3QgdGRiX2FsbG9jYXRlX29mcyhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX2xlbl90IGxlbmd0aCwgdGRiX29mZl90IHJlY19wdHIsCisJCQkJc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMsIHRkYl9vZmZfdCBsYXN0X3B0cikKK3sKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgbmV3cmVjOworCXRkYl9vZmZfdCBuZXdyZWNfcHRyOworCisJbWVtc2V0KCZuZXdyZWMsICdcMCcsIHNpemVvZihuZXdyZWMpKTsKKworCS8qIGZvdW5kIGl0IC0gbm93IHBvc3NpYmx5IHNwbGl0IGl0IHVwICAqLworCWlmIChyZWMtPnJlY19sZW4gPiBsZW5ndGggKyBNSU5fUkVDX1NJWkUpIHsKKwkJLyogTGVuZ3RoIG9mIGxlZnQgcGllY2UgKi8KKwkJbGVuZ3RoID0gVERCX0FMSUdOKGxlbmd0aCwgVERCX0FMSUdOTUVOVCk7CisKKwkJLyogUmlnaHQgcGllY2UgdG8gZ28gb24gZnJlZSBsaXN0ICovCisJCW5ld3JlYy5yZWNfbGVuID0gcmVjLT5yZWNfbGVuIC0gKHNpemVvZigqcmVjKSArIGxlbmd0aCk7CisJCW5ld3JlY19wdHIgPSByZWNfcHRyICsgc2l6ZW9mKCpyZWMpICsgbGVuZ3RoOworCisJCS8qIEFuZCBsZWZ0IHJlY29yZCBpcyBzaG9ydGVuZWQgKi8KKwkJcmVjLT5yZWNfbGVuID0gbGVuZ3RoOworCX0gZWxzZSB7CisJCW5ld3JlY19wdHIgPSAwOworCX0KKworCS8qIFJlbW92ZSBhbGxvY2F0ZWQgcmVjb3JkIGZyb20gdGhlIGZyZWUgbGlzdCAqLworCWlmICh0ZGJfb2ZzX3dyaXRlKHRkYiwgbGFzdF9wdHIsICZyZWMtPm5leHQpID09IC0xKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIFVwZGF0ZSBoZWFkZXI6IGRvIHRoaXMgYmVmb3JlIHdlIGRyb3AgYWxsb2MKKwkgICBsb2NrLCBvdGhlcndpc2UgdGRiX2ZyZWUoKSBtaWdodCB0cnkgdG8KKwkgICBtZXJnZSB3aXRoIHVzLCB0aGlua2luZyB3ZSdyZSBmcmVlLgorCSAgIChUaGFua3MgSmVyZW15IEFsbGlzb24pLiAqLworCXJlYy0+bWFnaWMgPSBUREJfTUFHSUM7CisJaWYgKHRkYl9yZWNfd3JpdGUodGRiLCByZWNfcHRyLCByZWMpID09IC0xKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIERpZCB3ZSBjcmVhdGUgbmV3IGJsb2NrPyAqLworCWlmIChuZXdyZWNfcHRyKSB7CisJCS8qIFVwZGF0ZSBhbGxvY2F0ZWQgcmVjb3JkIHRhaWxlciAod2UKKwkJICAgc2hvcnRlbmVkIGl0KS4gKi8KKwkJaWYgKHVwZGF0ZV90YWlsZXIodGRiLCByZWNfcHRyLCByZWMpID09IC0xKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIEZyZWUgbmV3IHJlY29yZCAqLworCQlpZiAodGRiX2ZyZWUodGRiLCBuZXdyZWNfcHRyLCAmbmV3cmVjKSA9PSAtMSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBhbGwgZG9uZSAtIHJldHVybiB0aGUgbmV3IHJlY29yZCBvZmZzZXQgKi8KKwlyZXR1cm4gcmVjX3B0cjsKK30KKworLyogYWxsb2NhdGUgc29tZSBzcGFjZSBmcm9tIHRoZSBmcmVlIGxpc3QuIFRoZSBvZmZzZXQgcmV0dXJuZWQgcG9pbnRzCisgICB0byBhIHVuY29ubmVjdGVkIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgZGF0YWJhc2Ugd2l0aCByb29tIGZvciBhdAorICAgbGVhc3QgbGVuZ3RoIGJ5dGVzIG9mIHRvdGFsIGRhdGEKKworICAgMCBpcyByZXR1cm5lZCBpZiB0aGUgc3BhY2UgY291bGQgbm90IGJlIGFsbG9jYXRlZAorICovCit0ZGJfb2ZmX3QgdGRiX2FsbG9jYXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfbGVuX3QgbGVuZ3RoLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYykKK3sKKwl0ZGJfb2ZmX3QgcmVjX3B0ciwgbGFzdF9wdHIsIG5ld3JlY19wdHI7CisJc3RydWN0IHsKKwkJdGRiX29mZl90IHJlY19wdHIsIGxhc3RfcHRyOworCQl0ZGJfbGVuX3QgcmVjX2xlbjsKKwl9IGJlc3RmaXQ7CisKKwlpZiAodGRiX2xvY2sodGRiLCAtMSwgRl9XUkxDSykgPT0gLTEpCisJCXJldHVybiAwOworCisJLyogRXh0cmEgYnl0ZXMgcmVxdWlyZWQgZm9yIHRhaWxlciAqLworCWxlbmd0aCArPSBzaXplb2YodGRiX29mZl90KTsKKworIGFnYWluOgorCWxhc3RfcHRyID0gRlJFRUxJU1RfVE9QOworCisJLyogcmVhZCBpbiB0aGUgZnJlZWxpc3QgdG9wICovCisJaWYgKHRkYl9vZnNfcmVhZCh0ZGIsIEZSRUVMSVNUX1RPUCwgJnJlY19wdHIpID09IC0xKQorCQlnb3RvIGZhaWw7CisKKwliZXN0Zml0LnJlY19wdHIgPSAwOworCWJlc3RmaXQubGFzdF9wdHIgPSAwOworCWJlc3RmaXQucmVjX2xlbiA9IDA7CisKKwkvKgorCSAgIHRoaXMgaXMgYSBiZXN0IGZpdCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBPcmlnaW5hbGx5IHdlIHVzZWQKKwkgICBhIGZpcnN0IGZpdCBzdHJhdGVneSwgYnV0IGl0IHN1ZmZlcmVkIGZyb20gbWFzc2l2ZSBmcmFnbWVudGF0aW9uCisJICAgaXNzdWVzIHdoZW4gZmFjZWQgd2l0aCBhIHNsb3dseSBpbmNyZWFzaW5nIHJlY29yZCBzaXplLgorCSAqLworCXdoaWxlIChyZWNfcHRyKSB7CisJCWlmICh0ZGJfcmVjX2ZyZWVfcmVhZCh0ZGIsIHJlY19wdHIsIHJlYykgPT0gLTEpIHsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlmIChyZWMtPnJlY19sZW4gPj0gbGVuZ3RoKSB7CisJCQlpZiAoYmVzdGZpdC5yZWNfcHRyID09IDAgfHwKKwkJCSAgICByZWMtPnJlY19sZW4gPCBiZXN0Zml0LnJlY19sZW4pIHsKKwkJCQliZXN0Zml0LnJlY19sZW4gPSByZWMtPnJlY19sZW47CisJCQkJYmVzdGZpdC5yZWNfcHRyID0gcmVjX3B0cjsKKwkJCQliZXN0Zml0Lmxhc3RfcHRyID0gbGFzdF9wdHI7CisJCQkJLyogY29uc2lkZXIgYSBmaXQgdG8gYmUgZ29vZCBlbm91Z2ggaWYKKwkJCQkgICB3ZSBhcmVuJ3Qgd2FzdGluZyBtb3JlIHRoYW4gaGFsZgorCQkJCSAgIHRoZSBzcGFjZSAqLworCQkJCWlmIChiZXN0Zml0LnJlY19sZW4gPCAyKmxlbmd0aCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IHJlY29yZCAqLworCQlsYXN0X3B0ciA9IHJlY19wdHI7CisJCXJlY19wdHIgPSByZWMtPm5leHQ7CisJfQorCisJaWYgKGJlc3RmaXQucmVjX3B0ciAhPSAwKSB7CisJCWlmICh0ZGJfcmVjX2ZyZWVfcmVhZCh0ZGIsIGJlc3RmaXQucmVjX3B0ciwgcmVjKSA9PSAtMSkgeworCQkJZ290byBmYWlsOworCQl9CisKKwkJbmV3cmVjX3B0ciA9IHRkYl9hbGxvY2F0ZV9vZnModGRiLCBsZW5ndGgsIGJlc3RmaXQucmVjX3B0ciwgcmVjLCBiZXN0Zml0Lmxhc3RfcHRyKTsKKwkJdGRiX3VubG9jayh0ZGIsIC0xLCBGX1dSTENLKTsKKwkJcmV0dXJuIG5ld3JlY19wdHI7CisJfQorCisJLyogd2UgZGlkbid0IGZpbmQgZW5vdWdoIHNwYWNlLiBTZWUgaWYgd2UgY2FuIGV4cGFuZCB0aGUKKwkgICBkYXRhYmFzZSBhbmQgaWYgd2UgY2FuIHRoZW4gdHJ5IGFnYWluICovCisJaWYgKHRkYl9leHBhbmQodGRiLCBsZW5ndGggKyBzaXplb2YoKnJlYykpID09IDApCisJCWdvdG8gYWdhaW47CisgZmFpbDoKKwl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCXJldHVybiAwOworfQorCisvKiBmaWxlOiBmcmVlbGlzdGNoZWNrLmMgKi8KKworLyogQ2hlY2sgdGhlIGZyZWVsaXN0IGlzIGdvb2QgYW5kIGNvbnRhaW5zIG5vIGxvb3BzLgorICAgVmVyeSBtZW1vcnkgaW50ZW5zaXZlIC0gb25seSBkbyB0aGlzIGFzIGEgY29uc2lzdGVuY3kKKyAgIGNoZWNrZXIuIEhlaCBoZWggLSB1c2VzIGFuIGluIG1lbW9yeSB0ZGIgYXMgdGhlIHN0b3JhZ2UKKyAgIGZvciB0aGUgInNlZW4iIHJlY29yZCBsaXN0LiBGb3Igc29tZSByZWFzb24gdGhpcyBzdHJpa2VzCisgICBtZSBhcyBleHRyZW1lbHkgY2xldmVyIGFzIEkgZG9uJ3QgaGF2ZSB0byB3cml0ZSBhbm90aGVyIHRyZWUKKyAgIGRhdGEgc3RydWN0dXJlIGltcGxlbWVudGF0aW9uIDotKS4KKyAqLworCitzdGF0aWMgaW50IHNlZW5faW5zZXJ0KHN0cnVjdCB0ZGJfY29udGV4dCAqbWVtX3RkYiwgdGRiX29mZl90IHJlY19wdHIpCit7CisJVERCX0RBVEEga2V5LCBkYXRhOworCisJbWVtc2V0KCZkYXRhLCAnXDAnLCBzaXplb2YoZGF0YSkpOworCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikmcmVjX3B0cjsKKwlrZXkuZHNpemUgPSBzaXplb2YocmVjX3B0cik7CisJcmV0dXJuIHRkYl9zdG9yZShtZW1fdGRiLCBrZXksIGRhdGEsIFREQl9JTlNFUlQpOworfQorCitpbnQgdGRiX3ZhbGlkYXRlX2ZyZWVsaXN0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBpbnQgKnBudW1fZW50cmllcykKK3sKKwlzdHJ1Y3QgdGRiX2NvbnRleHQgKm1lbV90ZGIgPSBOVUxMOworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJdGRiX29mZl90IHJlY19wdHIsIGxhc3RfcHRyOworCWludCByZXQgPSAtMTsKKworCSpwbnVtX2VudHJpZXMgPSAwOworCisJbWVtX3RkYiA9IHRkYl9vcGVuKCJmbHZhbCIsIHRkYi0+aGVhZGVyLmhhc2hfc2l6ZSwKKwkJCQlUREJfSU5URVJOQUwsIE9fUkRXUiwgMDYwMCk7CisJaWYgKCFtZW1fdGRiKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodGRiX2xvY2sodGRiLCAtMSwgRl9XUkxDSykgPT0gLTEpIHsKKwkJdGRiX2Nsb3NlKG1lbV90ZGIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsYXN0X3B0ciA9IEZSRUVMSVNUX1RPUDsKKworCS8qIFN0b3JlIHRoZSBGUkVFTElTVF9UT1AgcmVjb3JkLiAqLworCWlmIChzZWVuX2luc2VydChtZW1fdGRiLCBsYXN0X3B0cikgPT0gLTEpIHsKKwkJcmV0ID0gVERCX0VSUkNPREUoVERCX0VSUl9DT1JSVVBULCAtMSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiByZWFkIGluIHRoZSBmcmVlbGlzdCB0b3AgKi8KKwlpZiAodGRiX29mc19yZWFkKHRkYiwgRlJFRUxJU1RfVE9QLCAmcmVjX3B0cikgPT0gLTEpIHsKKwkJZ290byBmYWlsOworCX0KKworCXdoaWxlIChyZWNfcHRyKSB7CisKKwkJLyogSWYgd2UgY2FuJ3Qgc3RvcmUgdGhpcyByZWNvcmQgKHdlJ3ZlIHNlZW4gaXQKKwkJICAgYmVmb3JlKSB0aGVuIHRoZSBmcmVlIGxpc3QgaGFzIGEgbG9vcCBhbmQgbXVzdAorCQkgICBiZSBjb3JydXB0LiAqLworCisJCWlmIChzZWVuX2luc2VydChtZW1fdGRiLCByZWNfcHRyKSkgeworCQkJcmV0ID0gVERCX0VSUkNPREUoVERCX0VSUl9DT1JSVVBULCAtMSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAodGRiX3JlY19mcmVlX3JlYWQodGRiLCByZWNfcHRyLCAmcmVjKSA9PSAtMSkgeworCQkJZ290byBmYWlsOworCQl9CisKKwkJLyogbW92ZSB0byB0aGUgbmV4dCByZWNvcmQgKi8KKwkJbGFzdF9wdHIgPSByZWNfcHRyOworCQlyZWNfcHRyID0gcmVjLm5leHQ7CisJCSpwbnVtX2VudHJpZXMgKz0gMTsKKwl9CisKKwlyZXQgPSAwOworCisgIGZhaWw6CisKKwl0ZGJfY2xvc2UobWVtX3RkYik7CisJdGRiX3VubG9jayh0ZGIsIC0xLCBGX1dSTENLKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBmaWxlOiB0cmF2ZXJzZS5jICovCisKKy8qIFVzZXMgdHJhdmVyc2UgbG9jazogMCA9IGZpbmlzaCwgLTEgPSBlcnJvciwgb3RoZXIgPSByZWNvcmQgb2Zmc2V0ICovCitzdGF0aWMgaW50IHRkYl9uZXh0X2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHN0cnVjdCB0ZGJfdHJhdmVyc2VfbG9jayAqdGxvY2ssCisJCQkgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpCit7CisJaW50IHdhbnRfbmV4dCA9ICh0bG9jay0+b2ZmICE9IDApOworCisJLyogTG9jayBlYWNoIGNoYWluIGZyb20gdGhlIHN0YXJ0IG9uZS4gKi8KKwlmb3IgKDsgdGxvY2stPmhhc2ggPCB0ZGItPmhlYWRlci5oYXNoX3NpemU7IHRsb2NrLT5oYXNoKyspIHsKKwkJaWYgKCF0bG9jay0+b2ZmICYmIHRsb2NrLT5oYXNoICE9IDApIHsKKwkJCS8qIHRoaXMgaXMgYW4gb3B0aW1pc2F0aW9uIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUKKwkJCSAgIHRoZSBoYXNoIGNoYWluIGlzIGVtcHR5LCB3aGljaCBpcyBwYXJ0aWN1bGFybHkKKwkJCSAgIGNvbW1vbiBmb3IgdGhlIHVzZSBvZiB0ZGIgd2l0aCBsZGIsIHdoZXJlIGxhcmdlCisJCQkgICBoYXNoZXMgYXJlIHVzZWQuIEluIHRoYXQgY2FzZSB3ZSBzcGVuZCBtb3N0IG9mIG91cgorCQkJICAgdGltZSBpbiB0ZGJfYnJsb2NrKCksIGxvY2tpbmcgZW1wdHkgaGFzaCBjaGFpbnMuCisKKwkJCSAgIFRvIGF2b2lkIHRoaXMsIHdlIGRvIGFuIHVubG9ja2VkIHByZS1jaGVjayB0byBzZWUKKwkJCSAgIGlmIHRoZSBoYXNoIGNoYWluIGlzIGVtcHR5IGJlZm9yZSBzdGFydGluZyB0byBsb29rCisJCQkgICBpbnNpZGUgaXQuIElmIGl0IGlzIGVtcHR5IHRoZW4gd2UgY2FuIGF2b2lkIHRoYXQKKwkJCSAgIGhhc2ggY2hhaW4uIElmIGl0IGlzbid0IGVtcHR5IHRoZW4gd2UgY2FuJ3QgYmVsaWV2ZQorCQkJICAgdGhlIHZhbHVlIHdlIGdldCBiYWNrLCBhcyB3ZSByZWFkIGl0IHdpdGhvdXQgYQorCQkJICAgbG9jaywgc28gaW5zdGVhZCB3ZSBnZXQgdGhlIGxvY2sgYW5kIHJlLWZldGNoIHRoZQorCQkJICAgdmFsdWUgYmVsb3cuCisKKwkJCSAgIE5vdGljZSB0aGF0IG5vdCBkb2luZyB0aGlzIG9wdGltaXNhdGlvbiBvbiB0aGUKKwkJCSAgIGZpcnN0IGhhc2ggY2hhaW4gaXMgY3JpdGljYWwuIFdlIG11c3QgZ3VhcmFudGVlCisJCQkgICB0aGF0IHdlIGhhdmUgZG9uZSBhdCBsZWFzdCBvbmUgZmNudGwgbG9jayBhdCB0aGUKKwkJCSAgIHN0YXJ0IG9mIGEgc2VhcmNoIHRvIGd1YXJhbnRlZSB0aGF0IG1lbW9yeSBpcworCQkJICAgY29oZXJlbnQgb24gU01QIHN5c3RlbXMuIElmIHJlY29yZHMgYXJlIGFkZGVkIGJ5CisJCQkgICBvdGhlcnMgZHVyaW5nIHRoZSBzZWFyY2ggdGhlbiB0aGF0cyBPSywgYW5kIHdlCisJCQkgICBjb3VsZCBwb3NzaWJseSBtaXNzIHRob3NlIHdpdGggdGhpcyB0cmljaywgYnV0IHdlCisJCQkgICBjb3VsZCBtaXNzIHRoZW0gYW55d2F5IHdpdGhvdXQgdGhpcyB0cmljaywgc28gdGhlCisJCQkgICBzZW1hbnRpY3MgZG9uJ3QgY2hhbmdlLgorCisJCQkgICBXaXRoIGEgbm9uLWluZGV4ZWQgbGRiIHNlYXJjaCB0aGlzIHRyaWNrIGdhaW5zIHVzIGEKKwkJCSAgIGZhY3RvciBvZiBhcm91bmQgODAgaW4gc3BlZWQgb24gYSBsaW51eCAyLjYueAorCQkJICAgc3lzdGVtICh0ZXN0aW5nIHVzaW5nIGxkYnRlc3QpLgorCQkJKi8KKwkJCXRkYi0+bWV0aG9kcy0+bmV4dF9oYXNoX2NoYWluKHRkYiwgJnRsb2NrLT5oYXNoKTsKKwkJCWlmICh0bG9jay0+aGFzaCA9PSB0ZGItPmhlYWRlci5oYXNoX3NpemUpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmICh0ZGJfbG9jayh0ZGIsIHRsb2NrLT5oYXNoLCB0bG9jay0+bG9ja19ydykgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogTm8gcHJldmlvdXMgcmVjb3JkPyAgU3RhcnQgYXQgdG9wIG9mIGNoYWluLiAqLworCQlpZiAoIXRsb2NrLT5vZmYpIHsKKwkJCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfSEFTSF9UT1AodGxvY2stPmhhc2gpLAorCQkJCSAgICAgJnRsb2NrLT5vZmYpID09IC0xKQorCQkJCWdvdG8gZmFpbDsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyd2lzZSB1bmxvY2sgdGhlIHByZXZpb3VzIHJlY29yZC4gKi8KKwkJCWlmICh0ZGJfdW5sb2NrX3JlY29yZCh0ZGIsIHRsb2NrLT5vZmYpICE9IDApCisJCQkJZ290byBmYWlsOworCQl9CisKKwkJaWYgKHdhbnRfbmV4dCkgeworCQkJLyogV2UgaGF2ZSBvZmZzZXQgb2Ygb2xkIHJlY29yZDogZ3JhYiBuZXh0ICovCisJCQlpZiAodGRiX3JlY19yZWFkKHRkYiwgdGxvY2stPm9mZiwgcmVjKSA9PSAtMSkKKwkJCQlnb3RvIGZhaWw7CisJCQl0bG9jay0+b2ZmID0gcmVjLT5uZXh0OworCQl9CisKKwkJLyogSXRlcmF0ZSB0aHJvdWdoIGNoYWluICovCisJCXdoaWxlKCB0bG9jay0+b2ZmKSB7CisJCQl0ZGJfb2ZmX3QgY3VycmVudDsKKwkJCWlmICh0ZGJfcmVjX3JlYWQodGRiLCB0bG9jay0+b2ZmLCByZWMpID09IC0xKQorCQkJCWdvdG8gZmFpbDsKKworCQkJLyogRGV0ZWN0IGluZmluaXRlIGxvb3BzLiBGcm9tICJTaGxvbWkgWWFha29ib3ZpY2giIDxTaGxvbWlAZXhhbmV0LmNvbT4uICovCisJCQlpZiAodGxvY2stPm9mZiA9PSByZWMtPm5leHQpIHsKKwkJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9uZXh0X2xvY2s6IGxvb3AgZGV0ZWN0ZWQuXG4iKSk7CisJCQkJZ290byBmYWlsOworCQkJfQorCisJCQlpZiAoIVREQl9ERUFEKHJlYykpIHsKKwkJCQkvKiBXb29ob286IHdlIGZvdW5kIG9uZSEgKi8KKwkJCQlpZiAodGRiX2xvY2tfcmVjb3JkKHRkYiwgdGxvY2stPm9mZikgIT0gMCkKKwkJCQkJZ290byBmYWlsOworCQkJCXJldHVybiB0bG9jay0+b2ZmOworCQkJfQorCisJCQkvKiBUcnkgdG8gY2xlYW4gZGVhZCBvbmVzIGZyb20gb2xkIHRyYXZlcnNlcyAqLworCQkJY3VycmVudCA9IHRsb2NrLT5vZmY7CisJCQl0bG9jay0+b2ZmID0gcmVjLT5uZXh0OworCQkJaWYgKCEodGRiLT5yZWFkX29ubHkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKSAmJgorCQkJICAgIHRkYl9kb19kZWxldGUodGRiLCBjdXJyZW50LCByZWMpICE9IDApCisJCQkJZ290byBmYWlsOworCQl9CisJCXRkYl91bmxvY2sodGRiLCB0bG9jay0+aGFzaCwgdGxvY2stPmxvY2tfcncpOworCQl3YW50X25leHQgPSAwOworCX0KKwkvKiBXZSBmaW5pc2hlZCBpdGVyYXRpb24gd2l0aG91dCBmaW5kaW5nIGFueXRoaW5nICovCisJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9TVUNDRVNTLCAwKTsKKworIGZhaWw6CisJdGxvY2stPm9mZiA9IDA7CisJaWYgKHRkYl91bmxvY2sodGRiLCB0bG9jay0+aGFzaCwgdGxvY2stPmxvY2tfcncpICE9IDApCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX25leHRfbG9jazogT24gZXJyb3IgdW5sb2NrIGZhaWxlZCFcbiIpKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qIHRyYXZlcnNlIHRoZSBlbnRpcmUgZGF0YWJhc2UgLSBjYWxsaW5nIGZuKHRkYiwga2V5LCBkYXRhKSBvbiBlYWNoIGVsZW1lbnQuCisgICByZXR1cm4gLTEgb24gZXJyb3Igb3IgdGhlIHJlY29yZCBjb3VudCB0cmF2ZXJzZWQKKyAgIGlmIGZuIGlzIE5VTEwgdGhlbiBpdCBpcyBub3QgY2FsbGVkCisgICBhIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBmcm9tIGZuKCkgaW5kaWNhdGVzIHRoYXQgdGhlIHRyYXZlcnNhbCBzaG91bGQgc3RvcAorICAqLworc3RhdGljIGludCB0ZGJfdHJhdmVyc2VfaW50ZXJuYWwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsCisJCQkJIHRkYl90cmF2ZXJzZV9mdW5jIGZuLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkJIHN0cnVjdCB0ZGJfdHJhdmVyc2VfbG9jayAqdGwpCit7CisJVERCX0RBVEEga2V5LCBkYnVmOworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJaW50IHJldCwgY291bnQgPSAwOworCisJLyogVGhpcyB3YXMgaW4gdGhlIGluaXRpYWxpemF0b24sIGFib3ZlLCBidXQgdGhlIElSSVggY29tcGlsZXIKKwkgKiBkaWQgbm90IGxpa2UgaXQuICBjcmgKKwkgKi8KKwl0bC0+bmV4dCA9IHRkYi0+dHJhdmxvY2tzLm5leHQ7CisKKwkvKiBmY250bCBsb2NrcyBkb24ndCBzdGFjazogYmV3YXJlIHRyYXZlcnNlIGluc2lkZSB0cmF2ZXJzZSAqLworCXRkYi0+dHJhdmxvY2tzLm5leHQgPSB0bDsKKworCS8qIHRkYl9uZXh0X2xvY2sgcGxhY2VzIGxvY2tzIG9uIHRoZSByZWNvcmQgcmV0dXJuZWQsIGFuZCBpdHMgY2hhaW4gKi8KKwl3aGlsZSAoKHJldCA9IHRkYl9uZXh0X2xvY2sodGRiLCB0bCwgJnJlYykpID4gMCkgeworCQljb3VudCsrOworCQkvKiBub3cgcmVhZCB0aGUgZnVsbCByZWNvcmQgKi8KKwkJa2V5LmRwdHIgPSB0ZGJfYWxsb2NfcmVhZCh0ZGIsIHRsLT5vZmYgKyBzaXplb2YocmVjKSwKKwkJCQkJICByZWMua2V5X2xlbiArIHJlYy5kYXRhX2xlbik7CisJCWlmICgha2V5LmRwdHIpIHsKKwkJCXJldCA9IC0xOworCQkJaWYgKHRkYl91bmxvY2sodGRiLCB0bC0+aGFzaCwgdGwtPmxvY2tfcncpICE9IDApCisJCQkJZ290byBvdXQ7CisJCQlpZiAodGRiX3VubG9ja19yZWNvcmQodGRiLCB0bC0+b2ZmKSAhPSAwKQorCQkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYXZlcnNlOiBrZXkuZHB0ciA9PSBOVUxMIGFuZCB1bmxvY2tfcmVjb3JkIGZhaWxlZCFcbiIpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWtleS5kc2l6ZSA9IHJlYy5rZXlfbGVuOworCQlkYnVmLmRwdHIgPSBrZXkuZHB0ciArIHJlYy5rZXlfbGVuOworCQlkYnVmLmRzaXplID0gcmVjLmRhdGFfbGVuOworCisJCS8qIERyb3AgY2hhaW4gbG9jaywgY2FsbCBvdXQgKi8KKwkJaWYgKHRkYl91bmxvY2sodGRiLCB0bC0+aGFzaCwgdGwtPmxvY2tfcncpICE9IDApIHsKKwkJCXJldCA9IC0xOworCQkJU0FGRV9GUkVFKGtleS5kcHRyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChmbiAmJiBmbih0ZGIsIGtleSwgZGJ1ZiwgcHJpdmF0ZV9kYXRhKSkgeworCQkJLyogVGhleSB3YW50IHVzIHRvIHRlcm1pbmF0ZSB0cmF2ZXJzYWwgKi8KKwkJCXJldCA9IGNvdW50OworCQkJaWYgKHRkYl91bmxvY2tfcmVjb3JkKHRkYiwgdGwtPm9mZikgIT0gMCkgeworCQkJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3RyYXZlcnNlOiB1bmxvY2tfcmVjb3JkIGZhaWxlZCFcbiIpKTs7CisJCQkJcmV0ID0gLTE7CisJCQl9CisJCQlTQUZFX0ZSRUUoa2V5LmRwdHIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJU0FGRV9GUkVFKGtleS5kcHRyKTsKKwl9CitvdXQ6CisJdGRiLT50cmF2bG9ja3MubmV4dCA9IHRsLT5uZXh0OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKKworLyoKKyAgYSB3cml0ZSBzdHlsZSB0cmF2ZXJzZSAtIHRlbXBvcmFyaWx5IG1hcmtzIHRoZSBkYiByZWFkIG9ubHkKKyovCitpbnQgdGRiX3RyYXZlcnNlX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsCisJCSAgICAgIHRkYl90cmF2ZXJzZV9mdW5jIGZuLCB2b2lkICpwcml2YXRlX2RhdGEpCit7CisJc3RydWN0IHRkYl90cmF2ZXJzZV9sb2NrIHRsID0geyBOVUxMLCAwLCAwLCBGX1JETENLIH07CisJaW50IHJldDsKKworCS8qIHdlIG5lZWQgdG8gZ2V0IGEgcmVhZCBsb2NrIG9uIHRoZSB0cmFuc2FjdGlvbiBsb2NrIGhlcmUgdG8KKwkgICBjb3BlIHdpdGggdGhlIGxvY2sgb3JkZXJpbmcgc2VtYW50aWNzIG9mIHNvbGFyaXMxMCAqLworCWlmICh0ZGJfdHJhbnNhY3Rpb25fbG9jayh0ZGIsIEZfUkRMQ0spKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZGItPnRyYXZlcnNlX3JlYWQrKzsKKwlyZXQgPSB0ZGJfdHJhdmVyc2VfaW50ZXJuYWwodGRiLCBmbiwgcHJpdmF0ZV9kYXRhLCAmdGwpOworCXRkYi0+dHJhdmVyc2VfcmVhZC0tOworCisJdGRiX3RyYW5zYWN0aW9uX3VubG9jayh0ZGIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAgYSB3cml0ZSBzdHlsZSB0cmF2ZXJzZSAtIG5lZWRzIHRvIGdldCB0aGUgdHJhbnNhY3Rpb24gbG9jayB0bworICBwcmV2ZW50IGRlYWRsb2NrcworKi8KK2ludCB0ZGJfdHJhdmVyc2Uoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsCisJCSB0ZGJfdHJhdmVyc2VfZnVuYyBmbiwgdm9pZCAqcHJpdmF0ZV9kYXRhKQoreworCXN0cnVjdCB0ZGJfdHJhdmVyc2VfbG9jayB0bCA9IHsgTlVMTCwgMCwgMCwgRl9XUkxDSyB9OworCWludCByZXQ7CisKKwlpZiAodGRiLT5yZWFkX29ubHkgfHwgdGRiLT50cmF2ZXJzZV9yZWFkKSB7CisJCXJldHVybiB0ZGJfdHJhdmVyc2VfcmVhZCh0ZGIsIGZuLCBwcml2YXRlX2RhdGEpOworCX0KKworCWlmICh0ZGJfdHJhbnNhY3Rpb25fbG9jayh0ZGIsIEZfV1JMQ0spKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSB0ZGJfdHJhdmVyc2VfaW50ZXJuYWwodGRiLCBmbiwgcHJpdmF0ZV9kYXRhLCAmdGwpOworCisJdGRiX3RyYW5zYWN0aW9uX3VubG9jayh0ZGIpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiBmaW5kIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgZGF0YWJhc2UgYW5kIHJldHVybiBpdHMga2V5ICovCitUREJfREFUQSB0ZGJfZmlyc3RrZXkoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJVERCX0RBVEEga2V5OworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisKKwkvKiByZWxlYXNlIGFueSBvbGQgbG9jayAqLworCWlmICh0ZGJfdW5sb2NrX3JlY29yZCh0ZGIsIHRkYi0+dHJhdmxvY2tzLm9mZikgIT0gMCkKKwkJcmV0dXJuIHRkYl9udWxsOworCXRkYi0+dHJhdmxvY2tzLm9mZiA9IHRkYi0+dHJhdmxvY2tzLmhhc2ggPSAwOworCXRkYi0+dHJhdmxvY2tzLmxvY2tfcncgPSBGX1JETENLOworCisJLyogR3JhYiBmaXJzdCByZWNvcmQ6IGxvY2tzIGNoYWluIGFuZCByZXR1cm5lZCByZWNvcmQuICovCisJaWYgKHRkYl9uZXh0X2xvY2sodGRiLCAmdGRiLT50cmF2bG9ja3MsICZyZWMpIDw9IDApCisJCXJldHVybiB0ZGJfbnVsbDsKKwkvKiBub3cgcmVhZCB0aGUga2V5ICovCisJa2V5LmRzaXplID0gcmVjLmtleV9sZW47CisJa2V5LmRwdHIgPXRkYl9hbGxvY19yZWFkKHRkYix0ZGItPnRyYXZsb2Nrcy5vZmYrc2l6ZW9mKHJlYyksa2V5LmRzaXplKTsKKworCS8qIFVubG9jayB0aGUgaGFzaCBjaGFpbiBvZiB0aGUgcmVjb3JkIHdlIGp1c3QgcmVhZC4gKi8KKwlpZiAodGRiX3VubG9jayh0ZGIsIHRkYi0+dHJhdmxvY2tzLmhhc2gsIHRkYi0+dHJhdmxvY2tzLmxvY2tfcncpICE9IDApCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX2ZpcnN0a2V5OiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0ZGJfdW5sb2NraW5nIVxuIikpOworCXJldHVybiBrZXk7Cit9CisKKy8qIGZpbmQgdGhlIG5leHQgZW50cnkgaW4gdGhlIGRhdGFiYXNlLCByZXR1cm5pbmcgaXRzIGtleSAqLworVERCX0RBVEEgdGRiX25leHRrZXkoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIG9sZGtleSkKK3sKKwl1MzIgb2xkaGFzaDsKKwlUREJfREFUQSBrZXkgPSB0ZGJfbnVsbDsKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgcmVjOworCXVuc2lnbmVkIGNoYXIgKmsgPSBOVUxMOworCisJLyogSXMgbG9ja2VkIGtleSB0aGUgb2xkIGtleT8gIElmIHNvLCB0cmF2ZXJzZSB3aWxsIGJlIHJlbGlhYmxlLiAqLworCWlmICh0ZGItPnRyYXZsb2Nrcy5vZmYpIHsKKwkJaWYgKHRkYl9sb2NrKHRkYix0ZGItPnRyYXZsb2Nrcy5oYXNoLHRkYi0+dHJhdmxvY2tzLmxvY2tfcncpKQorCQkJcmV0dXJuIHRkYl9udWxsOworCQlpZiAodGRiX3JlY19yZWFkKHRkYiwgdGRiLT50cmF2bG9ja3Mub2ZmLCAmcmVjKSA9PSAtMQorCQkgICAgfHwgIShrID0gdGRiX2FsbG9jX3JlYWQodGRiLHRkYi0+dHJhdmxvY2tzLm9mZitzaXplb2YocmVjKSwKKwkJCQkJICAgIHJlYy5rZXlfbGVuKSkKKwkJICAgIHx8IG1lbWNtcChrLCBvbGRrZXkuZHB0ciwgb2xka2V5LmRzaXplKSAhPSAwKSB7CisJCQkvKiBObywgaXQgd2Fzbid0OiB1bmxvY2sgaXQgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCQkJaWYgKHRkYl91bmxvY2tfcmVjb3JkKHRkYiwgdGRiLT50cmF2bG9ja3Mub2ZmKSAhPSAwKSB7CisJCQkJU0FGRV9GUkVFKGspOworCQkJCXJldHVybiB0ZGJfbnVsbDsKKwkJCX0KKwkJCWlmICh0ZGJfdW5sb2NrKHRkYiwgdGRiLT50cmF2bG9ja3MuaGFzaCwgdGRiLT50cmF2bG9ja3MubG9ja19ydykgIT0gMCkgeworCQkJCVNBRkVfRlJFRShrKTsKKwkJCQlyZXR1cm4gdGRiX251bGw7CisJCQl9CisJCQl0ZGItPnRyYXZsb2Nrcy5vZmYgPSAwOworCQl9CisKKwkJU0FGRV9GUkVFKGspOworCX0KKworCWlmICghdGRiLT50cmF2bG9ja3Mub2ZmKSB7CisJCS8qIE5vIHByZXZpb3VzIGVsZW1lbnQ6IGRvIG5vcm1hbCBmaW5kLCBhbmQgbG9jayByZWNvcmQgKi8KKwkJdGRiLT50cmF2bG9ja3Mub2ZmID0gdGRiX2ZpbmRfbG9ja19oYXNoKHRkYiwgb2xka2V5LCB0ZGItPmhhc2hfZm4oJm9sZGtleSksIHRkYi0+dHJhdmxvY2tzLmxvY2tfcncsICZyZWMpOworCQlpZiAoIXRkYi0+dHJhdmxvY2tzLm9mZikKKwkJCXJldHVybiB0ZGJfbnVsbDsKKwkJdGRiLT50cmF2bG9ja3MuaGFzaCA9IEJVQ0tFVChyZWMuZnVsbF9oYXNoKTsKKwkJaWYgKHRkYl9sb2NrX3JlY29yZCh0ZGIsIHRkYi0+dHJhdmxvY2tzLm9mZikgIT0gMCkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfbmV4dGtleTogbG9ja19yZWNvcmQgZmFpbGVkICglcykhXG4iLCBzdHJlcnJvcihlcnJubykpKTsKKwkJCXJldHVybiB0ZGJfbnVsbDsKKwkJfQorCX0KKwlvbGRoYXNoID0gdGRiLT50cmF2bG9ja3MuaGFzaDsKKworCS8qIEdyYWIgbmV4dCByZWNvcmQ6IGxvY2tzIGNoYWluIGFuZCByZXR1cm5lZCByZWNvcmQsCisJICAgdW5sb2NrcyBvbGQgcmVjb3JkICovCisJaWYgKHRkYl9uZXh0X2xvY2sodGRiLCAmdGRiLT50cmF2bG9ja3MsICZyZWMpID4gMCkgeworCQlrZXkuZHNpemUgPSByZWMua2V5X2xlbjsKKwkJa2V5LmRwdHIgPSB0ZGJfYWxsb2NfcmVhZCh0ZGIsIHRkYi0+dHJhdmxvY2tzLm9mZitzaXplb2YocmVjKSwKKwkJCQkJICBrZXkuZHNpemUpOworCQkvKiBVbmxvY2sgdGhlIGNoYWluIG9mIHRoaXMgbmV3IHJlY29yZCAqLworCQlpZiAodGRiX3VubG9jayh0ZGIsIHRkYi0+dHJhdmxvY2tzLmhhc2gsIHRkYi0+dHJhdmxvY2tzLmxvY2tfcncpICE9IDApCisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9uZXh0a2V5OiBXQVJOSU5HIHRkYl91bmxvY2sgZmFpbGVkIVxuIikpOworCX0KKwkvKiBVbmxvY2sgdGhlIGNoYWluIG9mIG9sZCByZWNvcmQgKi8KKwlpZiAodGRiX3VubG9jayh0ZGIsIEJVQ0tFVChvbGRoYXNoKSwgdGRiLT50cmF2bG9ja3MubG9ja19ydykgIT0gMCkKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfbmV4dGtleTogV0FSTklORyB0ZGJfdW5sb2NrIGZhaWxlZCFcbiIpKTsKKwlyZXR1cm4ga2V5OworfQorCisvKiBmaWxlOiBkdW1wLmMgKi8KKworc3RhdGljIHRkYl9vZmZfdCB0ZGJfZHVtcF9yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBoYXNoLAorCQkJCSB0ZGJfb2ZmX3Qgb2Zmc2V0KQoreworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJdGRiX29mZl90IHRhaWxlcl9vZnMsIHRhaWxlcjsKKworCWlmICh0ZGItPm1ldGhvZHMtPnRkYl9yZWFkKHRkYiwgb2Zmc2V0LCAoY2hhciAqKSZyZWMsCisJCQkJICAgc2l6ZW9mKHJlYyksIERPQ09OVigpKSA9PSAtMSkgeworCQlwcmludGYoIkVSUk9SOiBmYWlsZWQgdG8gcmVhZCByZWNvcmQgYXQgJXVcbiIsIG9mZnNldCk7CisJCXJldHVybiAwOworCX0KKworCXByaW50ZigiIHJlYzogaGFzaD0lZCBvZmZzZXQ9MHglMDh4IG5leHQ9MHglMDh4IHJlY19sZW49JWQgIgorCSAgICAgICAia2V5X2xlbj0lZCBkYXRhX2xlbj0lZCBmdWxsX2hhc2g9MHgleCBtYWdpYz0weCV4XG4iLAorCSAgICAgICBoYXNoLCBvZmZzZXQsIHJlYy5uZXh0LCByZWMucmVjX2xlbiwgcmVjLmtleV9sZW4sIHJlYy5kYXRhX2xlbiwKKwkgICAgICAgcmVjLmZ1bGxfaGFzaCwgcmVjLm1hZ2ljKTsKKworCXRhaWxlcl9vZnMgPSBvZmZzZXQgKyBzaXplb2YocmVjKSArIHJlYy5yZWNfbGVuIC0gc2l6ZW9mKHRkYl9vZmZfdCk7CisKKwlpZiAodGRiX29mc19yZWFkKHRkYiwgdGFpbGVyX29mcywgJnRhaWxlcikgPT0gLTEpIHsKKwkJcHJpbnRmKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgdGFpbGVyIGF0ICV1XG4iLCB0YWlsZXJfb2ZzKTsKKwkJcmV0dXJuIHJlYy5uZXh0OworCX0KKworCWlmICh0YWlsZXIgIT0gcmVjLnJlY19sZW4gKyBzaXplb2YocmVjKSkgeworCQlwcmludGYoIkVSUk9SOiB0YWlsZXIgZG9lcyBub3QgbWF0Y2ggcmVjb3JkISB0YWlsZXI9JXUgdG90YWxzaXplPSV1XG4iLAorCQkJCSh1bnNpZ25lZCBpbnQpdGFpbGVyLCAodW5zaWduZWQgaW50KShyZWMucmVjX2xlbiArIHNpemVvZihyZWMpKSk7CisJfQorCXJldHVybiByZWMubmV4dDsKK30KKworc3RhdGljIGludCB0ZGJfZHVtcF9jaGFpbihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGkpCit7CisJdGRiX29mZl90IHJlY19wdHIsIHRvcDsKKworCXRvcCA9IFREQl9IQVNIX1RPUChpKTsKKworCWlmICh0ZGJfbG9jayh0ZGIsIGksIEZfV1JMQ0spICE9IDApCisJCXJldHVybiAtMTsKKworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCB0b3AsICZyZWNfcHRyKSA9PSAtMSkKKwkJcmV0dXJuIHRkYl91bmxvY2sodGRiLCBpLCBGX1dSTENLKTsKKworCWlmIChyZWNfcHRyKQorCQlwcmludGYoImhhc2g9JWRcbiIsIGkpOworCisJd2hpbGUgKHJlY19wdHIpIHsKKwkJcmVjX3B0ciA9IHRkYl9kdW1wX3JlY29yZCh0ZGIsIGksIHJlY19wdHIpOworCX0KKworCXJldHVybiB0ZGJfdW5sb2NrKHRkYiwgaSwgRl9XUkxDSyk7Cit9CisKK3ZvaWQgdGRiX2R1bXBfYWxsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCWludCBpOworCWZvciAoaT0wO2k8dGRiLT5oZWFkZXIuaGFzaF9zaXplO2krKykgeworCQl0ZGJfZHVtcF9jaGFpbih0ZGIsIGkpOworCX0KKwlwcmludGYoImZyZWVsaXN0OlxuIik7CisJdGRiX2R1bXBfY2hhaW4odGRiLCAtMSk7Cit9CisKK2ludCB0ZGJfcHJpbnRmcmVlbGlzdChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlpbnQgcmV0OworCWxvbmcgdG90YWxfZnJlZSA9IDA7CisJdGRiX29mZl90IG9mZnNldCwgcmVjX3B0cjsKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgcmVjOworCisJaWYgKChyZXQgPSB0ZGJfbG9jayh0ZGIsIC0xLCBGX1dSTENLKSkgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW9mZnNldCA9IEZSRUVMSVNUX1RPUDsKKworCS8qIHJlYWQgaW4gdGhlIGZyZWVsaXN0IHRvcCAqLworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBvZmZzZXQsICZyZWNfcHRyKSA9PSAtMSkgeworCQl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcmludGYoImZyZWVsaXN0IHRvcD1bMHglMDh4XVxuIiwgcmVjX3B0ciApOworCXdoaWxlIChyZWNfcHRyKSB7CisJCWlmICh0ZGItPm1ldGhvZHMtPnRkYl9yZWFkKHRkYiwgcmVjX3B0ciwgKGNoYXIgKikmcmVjLAorCQkJCQkgICBzaXplb2YocmVjKSwgRE9DT05WKCkpID09IC0xKSB7CisJCQl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHJlYy5tYWdpYyAhPSBUREJfRlJFRV9NQUdJQykgeworCQkJcHJpbnRmKCJiYWQgbWFnaWMgMHglMDh4IGluIGZyZWUgbGlzdFxuIiwgcmVjLm1hZ2ljKTsKKwkJCXRkYl91bmxvY2sodGRiLCAtMSwgRl9XUkxDSyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlwcmludGYoImVudHJ5IG9mZnNldD1bMHglMDh4XSwgcmVjLnJlY19sZW4gPSBbMHglMDh4ICglZCldIChlbmQgPSAweCUwOHgpXG4iLAorCQkgICAgICAgcmVjX3B0ciwgcmVjLnJlY19sZW4sIHJlYy5yZWNfbGVuLCByZWNfcHRyICsgcmVjLnJlY19sZW4pOworCQl0b3RhbF9mcmVlICs9IHJlYy5yZWNfbGVuOworCisJCS8qIG1vdmUgdG8gdGhlIG5leHQgcmVjb3JkICovCisJCXJlY19wdHIgPSByZWMubmV4dDsKKwl9CisJcHJpbnRmKCJ0b3RhbCByZWNfbGVuID0gWzB4JTA4eCAoJWQpXVxuIiwgKGludCl0b3RhbF9mcmVlLAorICAgICAgICAgICAgICAgKGludCl0b3RhbF9mcmVlKTsKKworCXJldHVybiB0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworfQorCisvKiBmaWxlOiB0ZGIuYyAqLworCisvKgorICBub24tYmxvY2tpbmcgaW5jcmVtZW50IG9mIHRoZSB0ZGIgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSB0ZGIgaGFzIGJlZW4gb3BlbmVkIHVzaW5nCisgIHRoZSBUREJfU0VRTlVNIGZsYWcKKyovCit2b2lkIHRkYl9pbmNyZW1lbnRfc2VxbnVtX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXRkYl9vZmZfdCBzZXFudW09MDsKKworCWlmICghKHRkYi0+ZmxhZ3MgJiBUREJfU0VRTlVNKSkgeworCQlyZXR1cm47CisJfQorCisJLyogd2UgaWdub3JlIGVycm9ycyBmcm9tIHRoaXMsIGFzIHdlIGhhdmUgbm8gc2FuZSB3YXkgb2YKKwkgICBkZWFsaW5nIHdpdGggdGhlbS4KKwkqLworCXRkYl9vZnNfcmVhZCh0ZGIsIFREQl9TRVFOVU1fT0ZTLCAmc2VxbnVtKTsKKwlzZXFudW0rKzsKKwl0ZGJfb2ZzX3dyaXRlKHRkYiwgVERCX1NFUU5VTV9PRlMsICZzZXFudW0pOworfQorCisvKgorICBpbmNyZW1lbnQgdGhlIHRkYiBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIHRkYiBoYXMgYmVlbiBvcGVuZWQgdXNpbmcKKyAgdGhlIFREQl9TRVFOVU0gZmxhZworKi8KK3N0YXRpYyB2b2lkIHRkYl9pbmNyZW1lbnRfc2VxbnVtKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCWlmICghKHRkYi0+ZmxhZ3MgJiBUREJfU0VRTlVNKSkgeworCQlyZXR1cm47CisJfQorCisJaWYgKHRkYl9icmxvY2sodGRiLCBUREJfU0VRTlVNX09GUywgRl9XUkxDSywgRl9TRVRMS1csIDEsIDEpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKworCXRkYl9pbmNyZW1lbnRfc2VxbnVtX25vbmJsb2NrKHRkYik7CisKKwl0ZGJfYnJsb2NrKHRkYiwgVERCX1NFUU5VTV9PRlMsIEZfVU5MQ0ssIEZfU0VUTEtXLCAxLCAxKTsKK30KKworc3RhdGljIGludCB0ZGJfa2V5X2NvbXBhcmUoVERCX0RBVEEga2V5LCBUREJfREFUQSBkYXRhLCB2b2lkICpwcml2YXRlX2RhdGEpCit7CisJcmV0dXJuIG1lbWNtcChkYXRhLmRwdHIsIGtleS5kcHRyLCBkYXRhLmRzaXplKTsKK30KKworLyogUmV0dXJucyAwIG9uIGZhaWwuICBPbiBzdWNjZXNzLCByZXR1cm4gb2Zmc2V0IG9mIHJlY29yZCwgYW5kIGZpbGxzCisgICBpbiByZWMgKi8KK3N0YXRpYyB0ZGJfb2ZmX3QgdGRiX2ZpbmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwgdTMyIGhhc2gsCisJCQlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnIpCit7CisJdGRiX29mZl90IHJlY19wdHI7CisKKwkvKiByZWFkIGluIHRoZSBoYXNoIHRvcCAqLworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfSEFTSF9UT1AoaGFzaCksICZyZWNfcHRyKSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBrZWVwIGxvb2tpbmcgdW50aWwgd2UgZmluZCB0aGUgcmlnaHQgcmVjb3JkICovCisJd2hpbGUgKHJlY19wdHIpIHsKKwkJaWYgKHRkYl9yZWNfcmVhZCh0ZGIsIHJlY19wdHIsIHIpID09IC0xKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFUREJfREVBRChyKSAmJiBoYXNoPT1yLT5mdWxsX2hhc2gKKwkJICAgICYmIGtleS5kc2l6ZT09ci0+a2V5X2xlbgorCQkgICAgJiYgdGRiX3BhcnNlX2RhdGEodGRiLCBrZXksIHJlY19wdHIgKyBzaXplb2YoKnIpLAorCQkJCSAgICAgIHItPmtleV9sZW4sIHRkYl9rZXlfY29tcGFyZSwKKwkJCQkgICAgICBOVUxMKSA9PSAwKSB7CisJCQlyZXR1cm4gcmVjX3B0cjsKKwkJfQorCQlyZWNfcHRyID0gci0+bmV4dDsKKwl9CisJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfTk9FWElTVCwgMCk7Cit9CisKKy8qIEFzIHRkYl9maW5kLCBidXQgaWYgeW91IHN1Y2NlZWQsIGtlZXAgdGhlIGxvY2sgKi8KK3RkYl9vZmZfdCB0ZGJfZmluZF9sb2NrX2hhc2goc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwgdTMyIGhhc2gsIGludCBsb2NrdHlwZSwKKwkJCSAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKQoreworCXUzMiByZWNfcHRyOworCisJaWYgKHRkYl9sb2NrKHRkYiwgQlVDS0VUKGhhc2gpLCBsb2NrdHlwZSkgPT0gLTEpCisJCXJldHVybiAwOworCWlmICghKHJlY19wdHIgPSB0ZGJfZmluZCh0ZGIsIGtleSwgaGFzaCwgcmVjKSkpCisJCXRkYl91bmxvY2sodGRiLCBCVUNLRVQoaGFzaCksIGxvY2t0eXBlKTsKKwlyZXR1cm4gcmVjX3B0cjsKK30KKworCisvKiB1cGRhdGUgYW4gZW50cnkgaW4gcGxhY2UgLSB0aGlzIG9ubHkgd29ya3MgaWYgdGhlIG5ldyBkYXRhIHNpemUKKyAgIGlzIDw9IHRoZSBvbGQgZGF0YSBzaXplIGFuZCB0aGUga2V5IGV4aXN0cy4KKyAgIG9uIGZhaWx1cmUgcmV0dXJuIC0xLgorKi8KK3N0YXRpYyBpbnQgdGRiX3VwZGF0ZV9oYXNoKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIHUzMiBoYXNoLCBUREJfREFUQSBkYnVmKQoreworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJdGRiX29mZl90IHJlY19wdHI7CisKKwkvKiBmaW5kIGVudHJ5ICovCisJaWYgKCEocmVjX3B0ciA9IHRkYl9maW5kKHRkYiwga2V5LCBoYXNoLCAmcmVjKSkpCisJCXJldHVybiAtMTsKKworCS8qIG11c3QgYmUgbG9uZyBlbm91Z2gga2V5LCBkYXRhIGFuZCB0YWlsZXIgKi8KKwlpZiAocmVjLnJlY19sZW4gPCBrZXkuZHNpemUgKyBkYnVmLmRzaXplICsgc2l6ZW9mKHRkYl9vZmZfdCkpIHsKKwkJdGRiLT5lY29kZSA9IFREQl9TVUNDRVNTOyAvKiBOb3QgcmVhbGx5IGFuIGVycm9yICovCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfd3JpdGUodGRiLCByZWNfcHRyICsgc2l6ZW9mKHJlYykgKyByZWMua2V5X2xlbiwKKwkJICAgICAgZGJ1Zi5kcHRyLCBkYnVmLmRzaXplKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGRidWYuZHNpemUgIT0gcmVjLmRhdGFfbGVuKSB7CisJCS8qIHVwZGF0ZSBzaXplICovCisJCXJlYy5kYXRhX2xlbiA9IGRidWYuZHNpemU7CisJCXJldHVybiB0ZGJfcmVjX3dyaXRlKHRkYiwgcmVjX3B0ciwgJnJlYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGZpbmQgYW4gZW50cnkgaW4gdGhlIGRhdGFiYXNlIGdpdmVuIGEga2V5ICovCisvKiBJZiBhbiBlbnRyeSBkb2Vzbid0IGV4aXN0IHRkYl9lcnIgd2lsbCBiZSBzZXQgdG8KKyAqIFREQl9FUlJfTk9FWElTVC4gSWYgYSBrZXkgaGFzIG5vIGRhdGEgYXR0YWNoZWQKKyAqIHRoZW4gdGhlIFREQl9EQVRBIHdpbGwgaGF2ZSB6ZXJvIGxlbmd0aCBidXQKKyAqIGEgbm9uLXplcm8gcG9pbnRlcgorICovCitUREJfREFUQSB0ZGJfZmV0Y2goc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSkKK3sKKwl0ZGJfb2ZmX3QgcmVjX3B0cjsKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgcmVjOworCVREQl9EQVRBIHJldDsKKwl1MzIgaGFzaDsKKworCS8qIGZpbmQgd2hpY2ggaGFzaCBidWNrZXQgaXQgaXMgaW4gKi8KKwloYXNoID0gdGRiLT5oYXNoX2ZuKCZrZXkpOworCWlmICghKHJlY19wdHIgPSB0ZGJfZmluZF9sb2NrX2hhc2godGRiLGtleSxoYXNoLEZfUkRMQ0ssJnJlYykpKQorCQlyZXR1cm4gdGRiX251bGw7CisKKwlyZXQuZHB0ciA9IHRkYl9hbGxvY19yZWFkKHRkYiwgcmVjX3B0ciArIHNpemVvZihyZWMpICsgcmVjLmtleV9sZW4sCisJCQkJICByZWMuZGF0YV9sZW4pOworCXJldC5kc2l6ZSA9IHJlYy5kYXRhX2xlbjsKKwl0ZGJfdW5sb2NrKHRkYiwgQlVDS0VUKHJlYy5mdWxsX2hhc2gpLCBGX1JETENLKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRmluZCBhbiBlbnRyeSBpbiB0aGUgZGF0YWJhc2UgYW5kIGhhbmQgdGhlIHJlY29yZCdzIGRhdGEgdG8gYSBwYXJzaW5nCisgKiBmdW5jdGlvbi4gVGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgdW5kZXIgdGhlIGNoYWluIHJlYWQgbG9jaywgc28gaXQKKyAqIHNob3VsZCBiZSBmYXN0IGFuZCBzaG91bGQgbm90IGJsb2NrIG9uIG90aGVyIHN5c2NhbGxzLgorICoKKyAqIERPTlQgQ0FMTCBPVEhFUiBUREIgQ0FMTFMgRlJPTSBUSEUgUEFSU0VSLCBUSElTIE1JR0hUIExFQUQgVE8gU0VHRkFVTFRTLgorICoKKyAqIEZvciBtbWFwcGVkIHRkYidzIHRoYXQgZG8gbm90IGhhdmUgYSB0cmFuc2FjdGlvbiBvcGVuIGl0IHBvaW50cyB0aGUgcGFyc2luZworICogZnVuY3Rpb24gZGlyZWN0bHkgYXQgdGhlIG1tYXAgYXJlYSwgaXQgYXZvaWRzIHRoZSBtYWxsb2MvbWVtY3B5IGluIHRoaXMKKyAqIGNhc2UuIElmIGEgdHJhbnNhY3Rpb24gaXMgb3BlbiBvciBubyBtbWFwIGlzIGF2YWlsYWJsZSwgaXQgaGFzIHRvIGRvCisgKiBtYWxsb2MvcmVhZC9wYXJzZS9mcmVlLgorICoKKyAqIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGFsbCByZWFkZXJzIG9mIHBvdGVudGlhbGx5IGxhcmdlIGRhdGEgc3RydWN0dXJlcyBpbgorICogdGhlIHRkYiByZWNvcmRzLCBsZGIgaW5kZXhlcyBiZWluZyBvbmUgZXhhbXBsZS4KKyAqLworCitpbnQgdGRiX3BhcnNlX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LAorCQkgICAgIGludCAoKnBhcnNlcikoVERCX0RBVEEga2V5LCBUREJfREFUQSBkYXRhLAorCQkJCSAgIHZvaWQgKnByaXZhdGVfZGF0YSksCisJCSAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhKQoreworCXRkYl9vZmZfdCByZWNfcHRyOworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJaW50IHJldDsKKwl1MzIgaGFzaDsKKworCS8qIGZpbmQgd2hpY2ggaGFzaCBidWNrZXQgaXQgaXMgaW4gKi8KKwloYXNoID0gdGRiLT5oYXNoX2ZuKCZrZXkpOworCisJaWYgKCEocmVjX3B0ciA9IHRkYl9maW5kX2xvY2tfaGFzaCh0ZGIsa2V5LGhhc2gsRl9SRExDSywmcmVjKSkpIHsKKwkJcmV0dXJuIFREQl9FUlJDT0RFKFREQl9FUlJfTk9FWElTVCwgMCk7CisJfQorCisJcmV0ID0gdGRiX3BhcnNlX2RhdGEodGRiLCBrZXksIHJlY19wdHIgKyBzaXplb2YocmVjKSArIHJlYy5rZXlfbGVuLAorCQkJICAgICByZWMuZGF0YV9sZW4sIHBhcnNlciwgcHJpdmF0ZV9kYXRhKTsKKworCXRkYl91bmxvY2sodGRiLCBCVUNLRVQocmVjLmZ1bGxfaGFzaCksIEZfUkRMQ0spOworCisJcmV0dXJuIHJldDsKK30KKworLyogY2hlY2sgaWYgYW4gZW50cnkgaW4gdGhlIGRhdGFiYXNlIGV4aXN0cworCisgICBub3RlIHRoYXQgMSBpcyByZXR1cm5lZCBpZiB0aGUga2V5IGlzIGZvdW5kIGFuZCAwIGlzIHJldHVybmVkIGlmIG5vdCBmb3VuZAorICAgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZSBjb252ZW50aW9ucyBpbiB0aGUgcmVzdCBvZiB0aGlzIG1vZHVsZSwgYnV0IGlzCisgICBjb21wYXRpYmxlIHdpdGggZ2RibQorKi8KK3N0YXRpYyBpbnQgdGRiX2V4aXN0c19oYXNoKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIHUzMiBoYXNoKQoreworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisKKwlpZiAodGRiX2ZpbmRfbG9ja19oYXNoKHRkYiwga2V5LCBoYXNoLCBGX1JETENLLCAmcmVjKSA9PSAwKQorCQlyZXR1cm4gMDsKKwl0ZGJfdW5sb2NrKHRkYiwgQlVDS0VUKHJlYy5mdWxsX2hhc2gpLCBGX1JETENLKTsKKwlyZXR1cm4gMTsKK30KKworaW50IHRkYl9leGlzdHMoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSkKK3sKKwl1MzIgaGFzaCA9IHRkYi0+aGFzaF9mbigma2V5KTsKKwlyZXR1cm4gdGRiX2V4aXN0c19oYXNoKHRkYiwga2V5LCBoYXNoKTsKK30KKworLyogYWN0dWFsbHkgZGVsZXRlIGFuIGVudHJ5IGluIHRoZSBkYXRhYmFzZSBnaXZlbiB0aGUgb2Zmc2V0ICovCitpbnQgdGRiX2RvX2RlbGV0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IHJlY19wdHIsIHN0cnVjdCBsaXN0X3N0cnVjdCpyZWMpCit7CisJdGRiX29mZl90IGxhc3RfcHRyLCBpOworCXN0cnVjdCBsaXN0X3N0cnVjdCBsYXN0cmVjOworCisJaWYgKHRkYi0+cmVhZF9vbmx5IHx8IHRkYi0+dHJhdmVyc2VfcmVhZCkgcmV0dXJuIC0xOworCisJaWYgKHRkYl93cml0ZV9sb2NrX3JlY29yZCh0ZGIsIHJlY19wdHIpID09IC0xKSB7CisJCS8qIFNvbWVvbmUgdHJhdmVyc2luZyBoZXJlOiBtYXJrIGl0IGFzIGRlYWQgKi8KKwkJcmVjLT5tYWdpYyA9IFREQl9ERUFEX01BR0lDOworCQlyZXR1cm4gdGRiX3JlY193cml0ZSh0ZGIsIHJlY19wdHIsIHJlYyk7CisJfQorCWlmICh0ZGJfd3JpdGVfdW5sb2NrX3JlY29yZCh0ZGIsIHJlY19wdHIpICE9IDApCisJCXJldHVybiAtMTsKKworCS8qIGZpbmQgcHJldmlvdXMgcmVjb3JkIGluIGhhc2ggY2hhaW4gKi8KKwlpZiAodGRiX29mc19yZWFkKHRkYiwgVERCX0hBU0hfVE9QKHJlYy0+ZnVsbF9oYXNoKSwgJmkpID09IC0xKQorCQlyZXR1cm4gLTE7CisJZm9yIChsYXN0X3B0ciA9IDA7IGkgIT0gcmVjX3B0cjsgbGFzdF9wdHIgPSBpLCBpID0gbGFzdHJlYy5uZXh0KQorCQlpZiAodGRiX3JlY19yZWFkKHRkYiwgaSwgJmxhc3RyZWMpID09IC0xKQorCQkJcmV0dXJuIC0xOworCisJLyogdW5saW5rIGl0OiBuZXh0IHB0ciBpcyBhdCBzdGFydCBvZiByZWNvcmQuICovCisJaWYgKGxhc3RfcHRyID09IDApCisJCWxhc3RfcHRyID0gVERCX0hBU0hfVE9QKHJlYy0+ZnVsbF9oYXNoKTsKKwlpZiAodGRiX29mc193cml0ZSh0ZGIsIGxhc3RfcHRyLCAmcmVjLT5uZXh0KSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJLyogcmVjb3ZlciB0aGUgc3BhY2UgKi8KKwlpZiAodGRiX2ZyZWUodGRiLCByZWNfcHRyLCByZWMpID09IC0xKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRiX2NvdW50X2RlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHUzMiBoYXNoKQoreworCWludCByZXMgPSAwOworCXRkYl9vZmZfdCByZWNfcHRyOworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisKKwkvKiByZWFkIGluIHRoZSBoYXNoIHRvcCAqLworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfSEFTSF9UT1AoaGFzaCksICZyZWNfcHRyKSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAocmVjX3B0cikgeworCQlpZiAodGRiX3JlY19yZWFkKHRkYiwgcmVjX3B0ciwgJnJlYykgPT0gLTEpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocmVjLm1hZ2ljID09IFREQl9ERUFEX01BR0lDKSB7CisJCQlyZXMgKz0gMTsKKwkJfQorCQlyZWNfcHRyID0gcmVjLm5leHQ7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBQdXJnZSBhbGwgREVBRCByZWNvcmRzIGZyb20gYSBoYXNoIGNoYWluCisgKi8KK3N0YXRpYyBpbnQgdGRiX3B1cmdlX2RlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHUzMiBoYXNoKQoreworCWludCByZXMgPSAtMTsKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgcmVjOworCXRkYl9vZmZfdCByZWNfcHRyOworCisJaWYgKHRkYl9sb2NrKHRkYiwgLTEsIEZfV1JMQ0spID09IC0xKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiByZWFkIGluIHRoZSBoYXNoIHRvcCAqLworCWlmICh0ZGJfb2ZzX3JlYWQodGRiLCBUREJfSEFTSF9UT1AoaGFzaCksICZyZWNfcHRyKSA9PSAtMSkKKwkJZ290byBmYWlsOworCisJd2hpbGUgKHJlY19wdHIpIHsKKwkJdGRiX29mZl90IG5leHQ7CisKKwkJaWYgKHRkYl9yZWNfcmVhZCh0ZGIsIHJlY19wdHIsICZyZWMpID09IC0xKSB7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQluZXh0ID0gcmVjLm5leHQ7CisKKwkJaWYgKHJlYy5tYWdpYyA9PSBUREJfREVBRF9NQUdJQworCQkgICAgJiYgdGRiX2RvX2RlbGV0ZSh0ZGIsIHJlY19wdHIsICZyZWMpID09IC0xKSB7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJcmVjX3B0ciA9IG5leHQ7CisJfQorCXJlcyA9IDA7CisgZmFpbDoKKwl0ZGJfdW5sb2NrKHRkYiwgLTEsIEZfV1JMQ0spOworCXJldHVybiByZXM7Cit9CisKKy8qIGRlbGV0ZSBhbiBlbnRyeSBpbiB0aGUgZGF0YWJhc2UgZ2l2ZW4gYSBrZXkgKi8KK3N0YXRpYyBpbnQgdGRiX2RlbGV0ZV9oYXNoKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIHUzMiBoYXNoKQoreworCXRkYl9vZmZfdCByZWNfcHRyOworCXN0cnVjdCBsaXN0X3N0cnVjdCByZWM7CisJaW50IHJldDsKKworCWlmICh0ZGItPm1heF9kZWFkX3JlY29yZHMgIT0gMCkgeworCisJCS8qCisJCSAqIEFsbG93IGZvciBzb21lIGRlYWQgcmVjb3JkcyBwZXIgaGFzaCBjaGFpbiwgbWFpbmx5IGZvcgorCQkgKiB0ZGIncyB3aXRoIGEgdmVyeSBoaWdoIGNyZWF0ZS9kZWxldGUgcmF0ZSBsaWtlIGxvY2tpbmcudGRiLgorCQkgKi8KKworCQlpZiAodGRiX2xvY2sodGRiLCBCVUNLRVQoaGFzaCksIEZfV1JMQ0spID09IC0xKQorCQkJcmV0dXJuIC0xOworCisJCWlmICh0ZGJfY291bnRfZGVhZCh0ZGIsIGhhc2gpID49IHRkYi0+bWF4X2RlYWRfcmVjb3JkcykgeworCQkJLyoKKwkJCSAqIERvbid0IGxldCB0aGUgcGVyLWNoYWluIGZyZWVsaXN0IGdyb3cgdG9vIGxhcmdlLAorCQkJICogZGVsZXRlIGFsbCBleGlzdGluZyBkZWFkIHJlY29yZHMKKwkJCSAqLworCQkJdGRiX3B1cmdlX2RlYWQodGRiLCBoYXNoKTsKKwkJfQorCisJCWlmICghKHJlY19wdHIgPSB0ZGJfZmluZCh0ZGIsIGtleSwgaGFzaCwgJnJlYykpKSB7CisJCQl0ZGJfdW5sb2NrKHRkYiwgQlVDS0VUKGhhc2gpLCBGX1dSTENLKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIEp1c3QgbWFyayB0aGUgcmVjb3JkIGFzIGRlYWQuCisJCSAqLworCQlyZWMubWFnaWMgPSBUREJfREVBRF9NQUdJQzsKKwkJcmV0ID0gdGRiX3JlY193cml0ZSh0ZGIsIHJlY19wdHIsICZyZWMpOworCX0KKwllbHNlIHsKKwkJaWYgKCEocmVjX3B0ciA9IHRkYl9maW5kX2xvY2tfaGFzaCh0ZGIsIGtleSwgaGFzaCwgRl9XUkxDSywKKwkJCQkJCSAgICZyZWMpKSkKKwkJCXJldHVybiAtMTsKKworCQlyZXQgPSB0ZGJfZG9fZGVsZXRlKHRkYiwgcmVjX3B0ciwgJnJlYyk7CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXRkYl9pbmNyZW1lbnRfc2VxbnVtKHRkYik7CisJfQorCisJaWYgKHRkYl91bmxvY2sodGRiLCBCVUNLRVQocmVjLmZ1bGxfaGFzaCksIEZfV1JMQ0spICE9IDApCisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX1dBUk5JTkcsICJ0ZGJfZGVsZXRlOiBXQVJOSU5HIHRkYl91bmxvY2sgZmFpbGVkIVxuIikpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB0ZGJfZGVsZXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpCit7CisJdTMyIGhhc2ggPSB0ZGItPmhhc2hfZm4oJmtleSk7CisJcmV0dXJuIHRkYl9kZWxldGVfaGFzaCh0ZGIsIGtleSwgaGFzaCk7Cit9CisKKy8qCisgKiBTZWUgaWYgd2UgaGF2ZSBhIGRlYWQgcmVjb3JkIGFyb3VuZCB3aXRoIGVub3VnaCBzcGFjZQorICovCitzdGF0aWMgdGRiX29mZl90IHRkYl9maW5kX2RlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHUzMiBoYXNoLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqciwgdGRiX2xlbl90IGxlbmd0aCkKK3sKKwl0ZGJfb2ZmX3QgcmVjX3B0cjsKKworCS8qIHJlYWQgaW4gdGhlIGhhc2ggdG9wICovCisJaWYgKHRkYl9vZnNfcmVhZCh0ZGIsIFREQl9IQVNIX1RPUChoYXNoKSwgJnJlY19wdHIpID09IC0xKQorCQlyZXR1cm4gMDsKKworCS8qIGtlZXAgbG9va2luZyB1bnRpbCB3ZSBmaW5kIHRoZSByaWdodCByZWNvcmQgKi8KKwl3aGlsZSAocmVjX3B0cikgeworCQlpZiAodGRiX3JlY19yZWFkKHRkYiwgcmVjX3B0ciwgcikgPT0gLTEpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoVERCX0RFQUQocikgJiYgci0+cmVjX2xlbiA+PSBsZW5ndGgpIHsKKwkJCS8qCisJCQkgKiBGaXJzdCBmaXQgZm9yIHNpbXBsZSBjb2RpbmcsIFRPRE86IGNoYW5nZSB0byBiZXN0CisJCQkgKiBmaXQKKwkJCSAqLworCQkJcmV0dXJuIHJlY19wdHI7CisJCX0KKwkJcmVjX3B0ciA9IHItPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCisvKiBzdG9yZSBhbiBlbGVtZW50IGluIHRoZSBkYXRhYmFzZSwgcmVwbGFjaW5nIGFueSBleGlzdGluZyBlbGVtZW50CisgICB3aXRoIHRoZSBzYW1lIGtleQorCisgICByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCisqLworaW50IHRkYl9zdG9yZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbGlzdF9zdHJ1Y3QgcmVjOworCXUzMiBoYXNoOworCXRkYl9vZmZfdCByZWNfcHRyOworCWNoYXIgKnAgPSBOVUxMOworCWludCByZXQgPSAtMTsKKworCWlmICh0ZGItPnJlYWRfb25seSB8fCB0ZGItPnRyYXZlcnNlX3JlYWQpIHsKKwkJdGRiLT5lY29kZSA9IFREQl9FUlJfUkRPTkxZOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogZmluZCB3aGljaCBoYXNoIGJ1Y2tldCBpdCBpcyBpbiAqLworCWhhc2ggPSB0ZGItPmhhc2hfZm4oJmtleSk7CisJaWYgKHRkYl9sb2NrKHRkYiwgQlVDS0VUKGhhc2gpLCBGX1dSTENLKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJLyogY2hlY2sgZm9yIGl0IGV4aXN0aW5nLCBvbiBpbnNlcnQuICovCisJaWYgKGZsYWcgPT0gVERCX0lOU0VSVCkgeworCQlpZiAodGRiX2V4aXN0c19oYXNoKHRkYiwga2V5LCBoYXNoKSkgeworCQkJdGRiLT5lY29kZSA9IFREQl9FUlJfRVhJU1RTOworCQkJZ290byBmYWlsOworCQl9CisJfSBlbHNlIHsKKwkJLyogZmlyc3QgdHJ5IGluLXBsYWNlIHVwZGF0ZSwgb24gbW9kaWZ5IG9yIHJlcGxhY2UuICovCisJCWlmICh0ZGJfdXBkYXRlX2hhc2godGRiLCBrZXksIGhhc2gsIGRidWYpID09IDApIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAodGRiLT5lY29kZSA9PSBUREJfRVJSX05PRVhJU1QgJiYKKwkJICAgIGZsYWcgPT0gVERCX01PRElGWSkgeworCQkJLyogaWYgdGhlIHJlY29yZCBkb2Vzbid0IGV4aXN0IGFuZCB3ZSBhcmUgaW4gVERCX01PRElGWSBtb2RlIHRoZW4KKwkJCSB3ZSBzaG91bGQgZmFpbCB0aGUgc3RvcmUgKi8KKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwkvKiByZXNldCB0aGUgZXJyb3IgY29kZSBwb3RlbnRpYWxseSBzZXQgYnkgdGhlIHRkYl91cGRhdGUoKSAqLworCXRkYi0+ZWNvZGUgPSBUREJfU1VDQ0VTUzsKKworCS8qIGRlbGV0ZSBhbnkgZXhpc3RpbmcgcmVjb3JkIC0gaWYgaXQgZG9lc24ndCBleGlzdCB3ZSBkb24ndAorICAgICAgICAgICBjYXJlLiAgRG9pbmcgdGhpcyBmaXJzdCByZWR1Y2VzIGZyYWdtZW50YXRpb24sIGFuZCBhdm9pZHMKKyAgICAgICAgICAgY29hbGVzY2luZyB3aXRoIGBhbGxvY2F0ZWQnIGJsb2NrIGJlZm9yZSBpdCdzIHVwZGF0ZWQuICovCisJaWYgKGZsYWcgIT0gVERCX0lOU0VSVCkKKwkJdGRiX2RlbGV0ZV9oYXNoKHRkYiwga2V5LCBoYXNoKTsKKworCS8qIENvcHkga2V5K3ZhbHVlICpiZWZvcmUqIGFsbG9jYXRpbmcgZnJlZSBzcGFjZSBpbiBjYXNlIG1hbGxvYworCSAgIGZhaWxzIGFuZCB3ZSBhcmUgbGVmdCB3aXRoIGEgZGVhZCBzcG90IGluIHRoZSB0ZGIuICovCisKKwlpZiAoIShwID0gKGNoYXIgKiltYWxsb2Moa2V5LmRzaXplICsgZGJ1Zi5kc2l6ZSkpKSB7CisJCXRkYi0+ZWNvZGUgPSBUREJfRVJSX09PTTsKKwkJZ290byBmYWlsOworCX0KKworCW1lbWNweShwLCBrZXkuZHB0ciwga2V5LmRzaXplKTsKKwlpZiAoZGJ1Zi5kc2l6ZSkKKwkJbWVtY3B5KHAra2V5LmRzaXplLCBkYnVmLmRwdHIsIGRidWYuZHNpemUpOworCisJaWYgKHRkYi0+bWF4X2RlYWRfcmVjb3JkcyAhPSAwKSB7CisJCS8qCisJCSAqIEFsbG93IGZvciBzb21lIGRlYWQgcmVjb3JkcyBwZXIgaGFzaCBjaGFpbiwgbG9vayBpZiB3ZSBjYW4KKwkJICogZmluZCBvbmUgdGhhdCBjYW4gaG9sZCB0aGUgbmV3IHJlY29yZC4gV2UgbmVlZCBlbm91Z2ggc3BhY2UKKwkJICogZm9yIGtleSwgZGF0YSBhbmQgdGFpbGVyLiBJZiB3ZSBmaW5kIG9uZSwgd2UgZG9uJ3QgaGF2ZSB0bworCQkgKiBjb25zdWx0IHRoZSBjZW50cmFsIGZyZWVsaXN0LgorCQkgKi8KKwkJcmVjX3B0ciA9IHRkYl9maW5kX2RlYWQoCisJCQl0ZGIsIGhhc2gsICZyZWMsCisJCQlrZXkuZHNpemUgKyBkYnVmLmRzaXplICsgc2l6ZW9mKHRkYl9vZmZfdCkpOworCisJCWlmIChyZWNfcHRyICE9IDApIHsKKwkJCXJlYy5rZXlfbGVuID0ga2V5LmRzaXplOworCQkJcmVjLmRhdGFfbGVuID0gZGJ1Zi5kc2l6ZTsKKwkJCXJlYy5mdWxsX2hhc2ggPSBoYXNoOworCQkJcmVjLm1hZ2ljID0gVERCX01BR0lDOworCQkJaWYgKHRkYl9yZWNfd3JpdGUodGRiLCByZWNfcHRyLCAmcmVjKSA9PSAtMQorCQkJICAgIHx8IHRkYi0+bWV0aG9kcy0+dGRiX3dyaXRlKAorCQkJCSAgICB0ZGIsIHJlY19wdHIgKyBzaXplb2YocmVjKSwKKwkJCQkgICAgcCwga2V5LmRzaXplICsgZGJ1Zi5kc2l6ZSkgPT0gLTEpIHsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gYWxsb2NhdGUgc29tZSBzcGFjZSBmcm9tIHRoZSBmcmVlbGlzdCwgc28gdGhpcyBtZWFucyB3ZQorCSAqIGhhdmUgdG8gbG9jayBpdC4gVXNlIHRoZSBjaGFuY2UgdG8gcHVyZ2UgYWxsIHRoZSBERUFEIHJlY29yZHMgZnJvbQorCSAqIHRoZSBoYXNoIGNoYWluIHVuZGVyIHRoZSBmcmVlbGlzdCBsb2NrLgorCSAqLworCisJaWYgKHRkYl9sb2NrKHRkYiwgLTEsIEZfV1JMQ0spID09IC0xKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoKHRkYi0+bWF4X2RlYWRfcmVjb3JkcyAhPSAwKQorCSAgICAmJiAodGRiX3B1cmdlX2RlYWQodGRiLCBoYXNoKSA9PSAtMSkpIHsKKwkJdGRiX3VubG9jayh0ZGIsIC0xLCBGX1dSTENLKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIHdlIGhhdmUgdG8gYWxsb2NhdGUgc29tZSBzcGFjZSAqLworCXJlY19wdHIgPSB0ZGJfYWxsb2NhdGUodGRiLCBrZXkuZHNpemUgKyBkYnVmLmRzaXplLCAmcmVjKTsKKworCXRkYl91bmxvY2sodGRiLCAtMSwgRl9XUkxDSyk7CisKKwlpZiAocmVjX3B0ciA9PSAwKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBSZWFkIGhhc2ggdG9wIGludG8gbmV4dCBwdHIgKi8KKwlpZiAodGRiX29mc19yZWFkKHRkYiwgVERCX0hBU0hfVE9QKGhhc2gpLCAmcmVjLm5leHQpID09IC0xKQorCQlnb3RvIGZhaWw7CisKKwlyZWMua2V5X2xlbiA9IGtleS5kc2l6ZTsKKwlyZWMuZGF0YV9sZW4gPSBkYnVmLmRzaXplOworCXJlYy5mdWxsX2hhc2ggPSBoYXNoOworCXJlYy5tYWdpYyA9IFREQl9NQUdJQzsKKworCS8qIHdyaXRlIG91dCBhbmQgcG9pbnQgdGhlIHRvcCBvZiB0aGUgaGFzaCBjaGFpbiBhdCBpdCAqLworCWlmICh0ZGJfcmVjX3dyaXRlKHRkYiwgcmVjX3B0ciwgJnJlYykgPT0gLTEKKwkgICAgfHwgdGRiLT5tZXRob2RzLT50ZGJfd3JpdGUodGRiLCByZWNfcHRyK3NpemVvZihyZWMpLCBwLCBrZXkuZHNpemUrZGJ1Zi5kc2l6ZSk9PS0xCisJICAgIHx8IHRkYl9vZnNfd3JpdGUodGRiLCBUREJfSEFTSF9UT1AoaGFzaCksICZyZWNfcHRyKSA9PSAtMSkgeworCQkvKiBOZWVkIHRvIHRkYl91bmFsbG9jYXRlKCkgaGVyZSAqLworCQlnb3RvIGZhaWw7CisJfQorCisgZG9uZToKKwlyZXQgPSAwOworIGZhaWw6CisJaWYgKHJldCA9PSAwKSB7CisJCXRkYl9pbmNyZW1lbnRfc2VxbnVtKHRkYik7CisJfQorCisJU0FGRV9GUkVFKHApOworCXRkYl91bmxvY2sodGRiLCBCVUNLRVQoaGFzaCksIEZfV1JMQ0spOworCXJldHVybiByZXQ7Cit9CisKKworLyogQXBwZW5kIHRvIGFuIGVudHJ5LiBDcmVhdGUgaWYgbm90IGV4aXN0LiAqLworaW50IHRkYl9hcHBlbmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgbmV3X2RidWYpCit7CisJdTMyIGhhc2g7CisJVERCX0RBVEEgZGJ1ZjsKKwlpbnQgcmV0ID0gLTE7CisKKwkvKiBmaW5kIHdoaWNoIGhhc2ggYnVja2V0IGl0IGlzIGluICovCisJaGFzaCA9IHRkYi0+aGFzaF9mbigma2V5KTsKKwlpZiAodGRiX2xvY2sodGRiLCBCVUNLRVQoaGFzaCksIEZfV1JMQ0spID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlkYnVmID0gdGRiX2ZldGNoKHRkYiwga2V5KTsKKworCWlmIChkYnVmLmRwdHIgPT0gTlVMTCkgeworCQlkYnVmLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhuZXdfZGJ1Zi5kc2l6ZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciAqbmV3X2RwdHIgPSAodW5zaWduZWQgY2hhciAqKXJlYWxsb2MoZGJ1Zi5kcHRyLAorCQkJCQkJICAgICBkYnVmLmRzaXplICsgbmV3X2RidWYuZHNpemUpOworCQlpZiAobmV3X2RwdHIgPT0gTlVMTCkgeworCQkJZnJlZShkYnVmLmRwdHIpOworCQl9CisJCWRidWYuZHB0ciA9IG5ld19kcHRyOworCX0KKworCWlmIChkYnVmLmRwdHIgPT0gTlVMTCkgeworCQl0ZGItPmVjb2RlID0gVERCX0VSUl9PT007CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbWNweShkYnVmLmRwdHIgKyBkYnVmLmRzaXplLCBuZXdfZGJ1Zi5kcHRyLCBuZXdfZGJ1Zi5kc2l6ZSk7CisJZGJ1Zi5kc2l6ZSArPSBuZXdfZGJ1Zi5kc2l6ZTsKKworCXJldCA9IHRkYl9zdG9yZSh0ZGIsIGtleSwgZGJ1ZiwgMCk7CisKK2ZhaWxlZDoKKwl0ZGJfdW5sb2NrKHRkYiwgQlVDS0VUKGhhc2gpLCBGX1dSTENLKTsKKwlTQUZFX0ZSRUUoZGJ1Zi5kcHRyKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB0ZGIgZmlsZQorICB1c2VmdWwgZm9yIGV4dGVybmFsIGxvZ2dpbmcgZnVuY3Rpb25zCisqLworY29uc3QgY2hhciAqdGRiX25hbWUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIHRkYi0+bmFtZTsKK30KKworLyoKKyAgcmV0dXJuIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBiZWluZyB1c2VkIGJ5IHRkYiwgb3IgLTEKKyAgdXNlZnVsIGZvciBleHRlcm5hbCByb3V0aW5lcyB0aGF0IHdhbnQgdG8gY2hlY2sgdGhlIGRldmljZS9pbm9kZQorICBvZiB0aGUgZmQKKyovCitpbnQgdGRiX2ZkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKQoreworCXJldHVybiB0ZGItPmZkOworfQorCisvKgorICByZXR1cm4gdGhlIGN1cnJlbnQgbG9nZ2luZyBmdW5jdGlvbgorICB1c2VmdWwgZm9yIGV4dGVybmFsIHRkYiByb3V0aW5lcyB0aGF0IHdpc2ggdG8gbG9nIHRkYiBlcnJvcnMKKyovCit0ZGJfbG9nX2Z1bmMgdGRiX2xvZ19mbihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlyZXR1cm4gdGRiLT5sb2cubG9nX2ZuOworfQorCisKKy8qCisgIGdldCB0aGUgdGRiIHNlcXVlbmNlIG51bWJlci4gT25seSBtYWtlcyBzZW5zZSBpZiB0aGUgd3JpdGVycyBvcGVuZWQKKyAgd2l0aCBUREJfU0VRTlVNIHNldC4gTm90ZSB0aGF0IHRoaXMgc2VxdWVuY2UgbnVtYmVyIHdpbGwgd3JhcCBxdWl0ZQorICBxdWlja2x5LCBzbyBpdCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBhICdoYXMgc29tZXRoaW5nIGNoYW5nZWQnCisgIHRlc3QsIG5vdCBmb3IgY29kZSB0aGF0IHJlbGllcyBvbiB0aGUgY291bnQgb2YgdGhlIG51bWJlciBvZiBjaGFuZ2VzCisgIG1hZGUuIElmIHlvdSB3YW50IGEgY291bnRlciB0aGVuIHVzZSBhIHRkYiByZWNvcmQuCisKKyAgVGhlIGFpbSBvZiB0aGlzIHNlcXVlbmNlIG51bWJlciBpcyB0byBhbGxvdyBmb3IgYSB2ZXJ5IGxpZ2h0d2VpZ2h0CisgIHRlc3Qgb2YgYSBwb3NzaWJsZSB0ZGIgY2hhbmdlLgorKi8KK2ludCB0ZGJfZ2V0X3NlcW51bShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwl0ZGJfb2ZmX3Qgc2VxbnVtPTA7CisKKwl0ZGJfb2ZzX3JlYWQodGRiLCBUREJfU0VRTlVNX09GUywgJnNlcW51bSk7CisJcmV0dXJuIHNlcW51bTsKK30KKworaW50IHRkYl9oYXNoX3NpemUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIHRkYi0+aGVhZGVyLmhhc2hfc2l6ZTsKK30KKworc2l6ZV90IHRkYl9tYXBfc2l6ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlyZXR1cm4gdGRiLT5tYXBfc2l6ZTsKK30KKworaW50IHRkYl9nZXRfZmxhZ3Moc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJcmV0dXJuIHRkYi0+ZmxhZ3M7Cit9CisKKworLyoKKyAgZW5hYmxlIHNlcXVlbmNlIG51bWJlciBoYW5kbGluZyBvbiBhbiBvcGVuIHRkYgorKi8KK3ZvaWQgdGRiX2VuYWJsZV9zZXFudW0oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJdGRiLT5mbGFncyB8PSBUREJfU0VRTlVNOworfQorCisvKiBmaWxlOiBvcGVuLmMgKi8KKworLyogYWxsIGNvbnRleHRzLCB0byBlbnN1cmUgbm8gZG91YmxlLW9wZW5zIChmY250bCBsb2NrcyBkb24ndCBuZXN0ISkgKi8KK3N0YXRpYyBzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYnMgPSBOVUxMOworCisKKy8qIFRoaXMgaXMgZnJvbSBhIGhhc2ggYWxnb3JpdGhtIHN1Z2dlc3RlZCBieSBSb2dpZXIgV29sZmYgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF90ZGJfaGFzaChUREJfREFUQSAqa2V5KQoreworCXUzMiB2YWx1ZTsJLyogVXNlZCB0byBjb21wdXRlIHRoZSBoYXNoIHZhbHVlLiAgKi8KKwl1MzIgICBpOwkvKiBVc2VkIHRvIGN5Y2xlIHRocm91Z2ggcmFuZG9tIHZhbHVlcy4gKi8KKworCS8qIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmcm9tIHRoZSBrZXkgc2l6ZS4gKi8KKwlmb3IgKHZhbHVlID0gMCwgaT0wOyBpIDwga2V5LT5kc2l6ZTsgaSsrKQorCQl2YWx1ZSA9IHZhbHVlICogMjU2ICsga2V5LT5kcHRyW2ldICsgKHZhbHVlID4+IDI0KSAqIDI0MTsKKworCXJldHVybiB2YWx1ZTsKK30KKworCisvKiBpbml0aWFsaXNlIGEgbmV3IGRhdGFiYXNlIHdpdGggYSBzcGVjaWZpZWQgaGFzaCBzaXplICovCitzdGF0aWMgaW50IHRkYl9uZXdfZGF0YWJhc2Uoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBoYXNoX3NpemUpCit7CisJc3RydWN0IHRkYl9oZWFkZXIgKm5ld2RiOworCWludCBzaXplLCByZXQgPSAtMTsKKworCS8qIFdlIG1ha2UgaXQgdXAgaW4gbWVtb3J5LCB0aGVuIHdyaXRlIGl0IG91dCBpZiBub3QgaW50ZXJuYWwgKi8KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCB0ZGJfaGVhZGVyKSArIChoYXNoX3NpemUrMSkqc2l6ZW9mKHRkYl9vZmZfdCk7CisJaWYgKCEobmV3ZGIgPSAoc3RydWN0IHRkYl9oZWFkZXIgKiljYWxsb2Moc2l6ZSwgMSkpKQorCQlyZXR1cm4gVERCX0VSUkNPREUoVERCX0VSUl9PT00sIC0xKTsKKworCS8qIEZpbGwgaW4gdGhlIGhlYWRlciAqLworCW5ld2RiLT52ZXJzaW9uID0gVERCX1ZFUlNJT047CisJbmV3ZGItPmhhc2hfc2l6ZSA9IGhhc2hfc2l6ZTsKKwlpZiAodGRiLT5mbGFncyAmIFREQl9JTlRFUk5BTCkgeworCQl0ZGItPm1hcF9zaXplID0gc2l6ZTsKKwkJdGRiLT5tYXBfcHRyID0gKGNoYXIgKiluZXdkYjsKKwkJbWVtY3B5KCZ0ZGItPmhlYWRlciwgbmV3ZGIsIHNpemVvZih0ZGItPmhlYWRlcikpOworCQkvKiBDb252ZXJ0IHRoZSBgb25kaXNrJyB2ZXJzaW9uIGlmIGFza2VkLiAqLworCQlDT05WRVJUKCpuZXdkYik7CisJCXJldHVybiAwOworCX0KKwlpZiAobHNlZWsodGRiLT5mZCwgMCwgU0VFS19TRVQpID09IC0xKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZnRydW5jYXRlKHRkYi0+ZmQsIDApID09IC0xKQorCQlnb3RvIGZhaWw7CisKKwkvKiBUaGlzIGNyZWF0ZXMgYW4gZW5kaWFuLWNvbnZlcnRlZCBoZWFkZXIsIGFzIGlmIHJlYWQgZnJvbSBkaXNrICovCisJQ09OVkVSVCgqbmV3ZGIpOworCW1lbWNweSgmdGRiLT5oZWFkZXIsIG5ld2RiLCBzaXplb2YodGRiLT5oZWFkZXIpKTsKKwkvKiBEb24ndCBlbmRpYW4tY29udmVydCB0aGUgbWFnaWMgZm9vZCEgKi8KKwltZW1jcHkobmV3ZGItPm1hZ2ljX2Zvb2QsIFREQl9NQUdJQ19GT09ELCBzdHJsZW4oVERCX01BR0lDX0ZPT0QpKzEpOworCWlmICh3cml0ZSh0ZGItPmZkLCBuZXdkYiwgc2l6ZSkgIT0gc2l6ZSkgeworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCX0KKworICBmYWlsOgorCVNBRkVfRlJFRShuZXdkYik7CisJcmV0dXJuIHJldDsKK30KKworCisKK3N0YXRpYyBpbnQgdGRiX2FscmVhZHlfb3BlbihkZXZfdCBkZXZpY2UsCisJCQkgICAgaW5vX3QgaW5vKQoreworCXN0cnVjdCB0ZGJfY29udGV4dCAqaTsKKworCWZvciAoaSA9IHRkYnM7IGk7IGkgPSBpLT5uZXh0KSB7CisJCWlmIChpLT5kZXZpY2UgPT0gZGV2aWNlICYmIGktPmlub2RlID09IGlubykgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogb3BlbiB0aGUgZGF0YWJhc2UsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeQorCisgICBUaGUgb3Blbl9mbGFncyBhbmQgbW9kZSBhcmUgcGFzc2VkIHN0cmFpZ2h0IHRvIHRoZSBvcGVuIGNhbGwgb24gdGhlCisgICBkYXRhYmFzZSBmaWxlLiBBIGZsYWdzIHZhbHVlIG9mIE9fV1JPTkxZIGlzIGludmFsaWQuIFRoZSBoYXNoIHNpemUKKyAgIGlzIGFkdmlzb3J5LCB1c2UgemVybyBmb3IgYSBkZWZhdWx0IHZhbHVlLgorCisgICBSZXR1cm4gaXMgTlVMTCBvbiBlcnJvciwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBhbHNvIHNldC4gIERvbid0CisgICB0cnkgdG8gY2FsbCB0ZGJfZXJyb3Igb3IgdGRiX2Vycm5hbWUsIGp1c3QgZG8gc3RyZXJyb3IoZXJybm8pLgorCisgICBAcGFyYW0gbmFtZSBtYXkgYmUgTlVMTCBmb3IgaW50ZXJuYWwgZGF0YWJhc2VzLiAqLworc3RydWN0IHRkYl9jb250ZXh0ICp0ZGJfb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgaGFzaF9zaXplLCBpbnQgdGRiX2ZsYWdzLAorCQkgICAgICBpbnQgb3Blbl9mbGFncywgbW9kZV90IG1vZGUpCit7CisJcmV0dXJuIHRkYl9vcGVuX2V4KG5hbWUsIGhhc2hfc2l6ZSwgdGRiX2ZsYWdzLCBvcGVuX2ZsYWdzLCBtb2RlLCBOVUxMLCBOVUxMKTsKK30KKworLyogYSBkZWZhdWx0IGxvZ2dpbmcgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIG51bGxfbG9nX2ZuKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBlbnVtIHRkYl9kZWJ1Z19sZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pIFBSSU5URl9BVFRSSUJVVEUoMywgNCk7CitzdGF0aWMgdm9pZCBudWxsX2xvZ19mbihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgZW51bSB0ZGJfZGVidWdfbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorCisKK3N0cnVjdCB0ZGJfY29udGV4dCAqdGRiX29wZW5fZXgoY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hfc2l6ZSwgaW50IHRkYl9mbGFncywKKwkJCQlpbnQgb3Blbl9mbGFncywgbW9kZV90IG1vZGUsCisJCQkJY29uc3Qgc3RydWN0IHRkYl9sb2dnaW5nX2NvbnRleHQgKmxvZ19jdHgsCisJCQkJdGRiX2hhc2hfZnVuYyBoYXNoX2ZuKQoreworCXN0cnVjdCB0ZGJfY29udGV4dCAqdGRiOworCXN0cnVjdCBzdGF0IHN0OworCWludCByZXYgPSAwLCBsb2NrZWQgPSAwOworCXVuc2lnbmVkIGNoYXIgKnZwOworCXUzMiB2ZXJ0ZXN0OworCisJaWYgKCEodGRiID0gKHN0cnVjdCB0ZGJfY29udGV4dCAqKWNhbGxvYygxLCBzaXplb2YgKnRkYikpKSB7CisJCS8qIENhbid0IGxvZyB0aGlzICovCisJCWVycm5vID0gRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCXRkYl9pb19pbml0KHRkYik7CisJdGRiLT5mZCA9IC0xOworCXRkYi0+bmFtZSA9IE5VTEw7CisJdGRiLT5tYXBfcHRyID0gTlVMTDsKKwl0ZGItPmZsYWdzID0gdGRiX2ZsYWdzOworCXRkYi0+b3Blbl9mbGFncyA9IG9wZW5fZmxhZ3M7CisJaWYgKGxvZ19jdHgpIHsKKwkJdGRiLT5sb2cgPSAqbG9nX2N0eDsKKwl9IGVsc2UgeworCQl0ZGItPmxvZy5sb2dfZm4gPSBudWxsX2xvZ19mbjsKKwkJdGRiLT5sb2cubG9nX3ByaXZhdGUgPSBOVUxMOworCX0KKwl0ZGItPmhhc2hfZm4gPSBoYXNoX2ZuID8gaGFzaF9mbiA6IGRlZmF1bHRfdGRiX2hhc2g7CisKKwkvKiBjYWNoZSB0aGUgcGFnZSBzaXplICovCisJdGRiLT5wYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisJaWYgKHRkYi0+cGFnZV9zaXplIDw9IDApIHsKKwkJdGRiLT5wYWdlX3NpemUgPSAweDIwMDA7CisJfQorCisJaWYgKChvcGVuX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9vcGVuX2V4OiBjYW4ndCBvcGVuIHRkYiAlcyB3cml0ZS1vbmx5XG4iLAorCQkJIG5hbWUpKTsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoaGFzaF9zaXplID09IDApCisJCWhhc2hfc2l6ZSA9IERFRkFVTFRfSEFTSF9TSVpFOworCWlmICgob3Blbl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpIHsKKwkJdGRiLT5yZWFkX29ubHkgPSAxOworCQkvKiByZWFkIG9ubHkgZGF0YWJhc2VzIGRvbid0IGRvIGxvY2tpbmcgb3IgY2xlYXIgaWYgZmlyc3QgKi8KKwkJdGRiLT5mbGFncyB8PSBUREJfTk9MT0NLOworCQl0ZGItPmZsYWdzICY9IH5UREJfQ0xFQVJfSUZfRklSU1Q7CisJfQorCisJLyogaW50ZXJuYWwgZGF0YWJhc2VzIGRvbid0IG1tYXAgb3IgbG9jaywgYW5kIHN0YXJ0IG9mZiBjbGVhcmVkICovCisJaWYgKHRkYi0+ZmxhZ3MgJiBUREJfSU5URVJOQUwpIHsKKwkJdGRiLT5mbGFncyB8PSAoVERCX05PTE9DSyB8IFREQl9OT01NQVApOworCQl0ZGItPmZsYWdzICY9IH5UREJfQ0xFQVJfSUZfRklSU1Q7CisJCWlmICh0ZGJfbmV3X2RhdGFiYXNlKHRkYiwgaGFzaF9zaXplKSAhPSAwKSB7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9vcGVuX2V4OiB0ZGJfbmV3X2RhdGFiYXNlIGZhaWxlZCEiKSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJZ290byBpbnRlcm5hbDsKKwl9CisKKwlpZiAoKHRkYi0+ZmQgPSBvcGVuKG5hbWUsIG9wZW5fZmxhZ3MsIG1vZGUpKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19XQVJOSU5HLCAidGRiX29wZW5fZXg6IGNvdWxkIG5vdCBvcGVuIGZpbGUgJXM6ICVzXG4iLAorCQkJIG5hbWUsIHN0cmVycm9yKGVycm5vKSkpOworCQlnb3RvIGZhaWw7CS8qIGVycm5vIHNldCBieSBvcGVuKDIpICovCisJfQorCisJLyogZW5zdXJlIHRoZXJlIGlzIG9ubHkgb25lIHByb2Nlc3MgaW5pdGlhbGlzaW5nIGF0IG9uY2UgKi8KKwlpZiAodGRiLT5tZXRob2RzLT50ZGJfYnJsb2NrKHRkYiwgR0xPQkFMX0xPQ0ssIEZfV1JMQ0ssIEZfU0VUTEtXLCAwLCAxKSA9PSAtMSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9vcGVuX2V4OiBmYWlsZWQgdG8gZ2V0IGdsb2JhbCBsb2NrIG9uICVzOiAlc1xuIiwKKwkJCSBuYW1lLCBzdHJlcnJvcihlcnJubykpKTsKKwkJZ290byBmYWlsOwkvKiBlcnJubyBzZXQgYnkgdGRiX2JybG9jayAqLworCX0KKworCS8qIHdlIG5lZWQgdG8gemVybyBkYXRhYmFzZSBpZiB3ZSBhcmUgdGhlIG9ubHkgb25lIHdpdGggaXQgb3BlbiAqLworCWlmICgodGRiX2ZsYWdzICYgVERCX0NMRUFSX0lGX0ZJUlNUKSAmJgorCSAgICAobG9ja2VkID0gKHRkYi0+bWV0aG9kcy0+dGRiX2JybG9jayh0ZGIsIEFDVElWRV9MT0NLLCBGX1dSTENLLCBGX1NFVExLLCAwLCAxKSA9PSAwKSkpIHsKKwkJb3Blbl9mbGFncyB8PSBPX0NSRUFUOworCQlpZiAoZnRydW5jYXRlKHRkYi0+ZmQsIDApID09IC0xKSB7CisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9vcGVuX2V4OiAiCisJCQkJICJmYWlsZWQgdG8gdHJ1bmNhdGUgJXM6ICVzXG4iLAorCQkJCSBuYW1lLCBzdHJlcnJvcihlcnJubykpKTsKKwkJCWdvdG8gZmFpbDsgLyogZXJybm8gc2V0IGJ5IGZ0cnVuY2F0ZSAqLworCQl9CisJfQorCisJaWYgKHJlYWQodGRiLT5mZCwgJnRkYi0+aGVhZGVyLCBzaXplb2YodGRiLT5oZWFkZXIpKSAhPSBzaXplb2YodGRiLT5oZWFkZXIpCisJICAgIHx8IHN0cmNtcCh0ZGItPmhlYWRlci5tYWdpY19mb29kLCBUREJfTUFHSUNfRk9PRCkgIT0gMAorCSAgICB8fCAodGRiLT5oZWFkZXIudmVyc2lvbiAhPSBUREJfVkVSU0lPTgorCQkmJiAhKHJldiA9ICh0ZGItPmhlYWRlci52ZXJzaW9uPT1UREJfQllURVJFVihUREJfVkVSU0lPTikpKSkpIHsKKwkJLyogaXRzIG5vdCBhIHZhbGlkIGRhdGFiYXNlIC0gcG9zc2libHkgaW5pdGlhbGlzZSBpdCAqLworCQlpZiAoIShvcGVuX2ZsYWdzICYgT19DUkVBVCkgfHwgdGRiX25ld19kYXRhYmFzZSh0ZGIsIGhhc2hfc2l6ZSkgPT0gLTEpIHsKKwkJCWVycm5vID0gRUlPOyAvKiBpZSBiYWQgZm9ybWF0IG9yIHNvbWV0aGluZyAqLworCQkJZ290byBmYWlsOworCQl9CisJCXJldiA9ICh0ZGItPmZsYWdzICYgVERCX0NPTlZFUlQpOworCX0KKwl2cCA9ICh1bnNpZ25lZCBjaGFyICopJnRkYi0+aGVhZGVyLnZlcnNpb247CisJdmVydGVzdCA9ICgoKHUzMil2cFswXSkgPDwgMjQpIHwgKCgodTMyKXZwWzFdKSA8PCAxNikgfAorCQkgICgoKHUzMil2cFsyXSkgPDwgOCkgfCAodTMyKXZwWzNdOworCXRkYi0+ZmxhZ3MgfD0gKHZlcnRlc3Q9PVREQl9WRVJTSU9OKSA/IFREQl9CSUdFTkRJQU4gOiAwOworCWlmICghcmV2KQorCQl0ZGItPmZsYWdzICY9IH5UREJfQ09OVkVSVDsKKwllbHNlIHsKKwkJdGRiLT5mbGFncyB8PSBUREJfQ09OVkVSVDsKKwkJdGRiX2NvbnZlcnQoJnRkYi0+aGVhZGVyLCBzaXplb2YodGRiLT5oZWFkZXIpKTsKKwl9CisJaWYgKGZzdGF0KHRkYi0+ZmQsICZzdCkgPT0gLTEpCisJCWdvdG8gZmFpbDsKKworCWlmICh0ZGItPmhlYWRlci5yd2xvY2tzICE9IDApIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfb3Blbl9leDogc3BpbmxvY2tzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIElzIGl0IGFscmVhZHkgaW4gdGhlIG9wZW4gbGlzdD8gIElmIHNvLCBmYWlsLiAqLworCWlmICh0ZGJfYWxyZWFkeV9vcGVuKHN0LnN0X2Rldiwgc3Quc3RfaW5vKSkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9vcGVuX2V4OiAiCisJCQkgIiVzICglZCwlZCkgaXMgYWxyZWFkeSBvcGVuIGluIHRoaXMgcHJvY2Vzc1xuIiwKKwkJCSBuYW1lLCAoaW50KXN0LnN0X2RldiwgKGludClzdC5zdF9pbm8pKTsKKwkJZXJybm8gPSBFQlVTWTsKKwkJZ290byBmYWlsOworCX0KKworCWlmICghKHRkYi0+bmFtZSA9IChjaGFyICopc3RyZHVwKG5hbWUpKSkgeworCQllcnJubyA9IEVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXRkYi0+bWFwX3NpemUgPSBzdC5zdF9zaXplOworCXRkYi0+ZGV2aWNlID0gc3Quc3RfZGV2OworCXRkYi0+aW5vZGUgPSBzdC5zdF9pbm87CisJdGRiLT5tYXhfZGVhZF9yZWNvcmRzID0gMDsKKwl0ZGJfbW1hcCh0ZGIpOworCWlmIChsb2NrZWQpIHsKKwkJaWYgKHRkYi0+bWV0aG9kcy0+dGRiX2JybG9jayh0ZGIsIEFDVElWRV9MT0NLLCBGX1VOTENLLCBGX1NFVExLLCAwLCAxKSA9PSAtMSkgeworCQkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRVJST1IsICJ0ZGJfb3Blbl9leDogIgorCQkJCSAiZmFpbGVkIHRvIHRha2UgQUNUSVZFX0xPQ0sgb24gJXM6ICVzXG4iLAorCQkJCSBuYW1lLCBzdHJlcnJvcihlcnJubykpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJfQorCisJLyogV2UgYWx3YXlzIG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgQ0xFQVJfSUZfRklSU1QgZmxhZyBpcyBzZXQsIGV2ZW4gaWYKKwkgICB3ZSBkaWRuJ3QgZ2V0IHRoZSBpbml0aWFsIGV4Y2x1c2l2ZSBsb2NrIGFzIHdlIG5lZWQgdG8gbGV0IGFsbCBvdGhlcgorCSAgIHVzZXJzIGtub3cgd2UncmUgdXNpbmcgaXQuICovCisKKwlpZiAodGRiX2ZsYWdzICYgVERCX0NMRUFSX0lGX0ZJUlNUKSB7CisJCS8qIGxlYXZlIHRoaXMgbG9jayBpbiBwbGFjZSB0byBpbmRpY2F0ZSBpdCdzIGluIHVzZSAqLworCQlpZiAodGRiLT5tZXRob2RzLT50ZGJfYnJsb2NrKHRkYiwgQUNUSVZFX0xPQ0ssIEZfUkRMQ0ssIEZfU0VUTEtXLCAwLCAxKSA9PSAtMSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBpZiBuZWVkZWQsIHJ1biByZWNvdmVyeSAqLworCWlmICh0ZGJfdHJhbnNhY3Rpb25fcmVjb3Zlcih0ZGIpID09IC0xKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKyBpbnRlcm5hbDoKKwkvKiBJbnRlcm5hbCAobWVtb3J5LW9ubHkpIGRhdGFiYXNlcyBza2lwIGFsbCB0aGUgY29kZSBhYm92ZSB0bworCSAqIGRvIHdpdGggZGlzayBmaWxlcywgYW5kIHJlc3VtZSBoZXJlIGJ5IHJlbGVhc2luZyB0aGVpcgorCSAqIGdsb2JhbCBsb2NrIGFuZCBob29raW5nIGludG8gdGhlIGFjdGl2ZSBsaXN0LiAqLworCWlmICh0ZGItPm1ldGhvZHMtPnRkYl9icmxvY2sodGRiLCBHTE9CQUxfTE9DSywgRl9VTkxDSywgRl9TRVRMS1csIDAsIDEpID09IC0xKQorCQlnb3RvIGZhaWw7CisJdGRiLT5uZXh0ID0gdGRiczsKKwl0ZGJzID0gdGRiOworCXJldHVybiB0ZGI7CisKKyBmYWlsOgorCXsgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKworCWlmICghdGRiKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0ZGItPm1hcF9wdHIpIHsKKwkJaWYgKHRkYi0+ZmxhZ3MgJiBUREJfSU5URVJOQUwpCisJCQlTQUZFX0ZSRUUodGRiLT5tYXBfcHRyKTsKKwkJZWxzZQorCQkJdGRiX211bm1hcCh0ZGIpOworCX0KKwlTQUZFX0ZSRUUodGRiLT5uYW1lKTsKKwlpZiAodGRiLT5mZCAhPSAtMSkKKwkJaWYgKGNsb3NlKHRkYi0+ZmQpICE9IDApCisJCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9vcGVuX2V4OiBmYWlsZWQgdG8gY2xvc2UgdGRiLT5mZCBvbiBlcnJvciFcbiIpKTsKKwlTQUZFX0ZSRUUodGRiKTsKKwllcnJubyA9IHNhdmVfZXJybm87CisJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKgorICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWFkIHJlY29yZHMgcGVyIGhhc2ggY2hhaW4KKyAqLworCit2b2lkIHRkYl9zZXRfbWF4X2RlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBtYXhfZGVhZCkKK3sKKwl0ZGItPm1heF9kZWFkX3JlY29yZHMgPSBtYXhfZGVhZDsKK30KKworLyoqCisgKiBDbG9zZSBhIGRhdGFiYXNlLgorICoKKyAqIEByZXR1cm5zIC0xIGZvciBlcnJvcjsgMCBmb3Igc3VjY2Vzcy4KKyAqKi8KK2ludCB0ZGJfY2xvc2Uoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJc3RydWN0IHRkYl9jb250ZXh0ICoqaTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh0ZGItPnRyYW5zYWN0aW9uKSB7CisJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwodGRiKTsKKwl9CisKKwlpZiAodGRiLT5tYXBfcHRyKSB7CisJCWlmICh0ZGItPmZsYWdzICYgVERCX0lOVEVSTkFMKQorCQkJU0FGRV9GUkVFKHRkYi0+bWFwX3B0cik7CisJCWVsc2UKKwkJCXRkYl9tdW5tYXAodGRiKTsKKwl9CisJU0FGRV9GUkVFKHRkYi0+bmFtZSk7CisJaWYgKHRkYi0+ZmQgIT0gLTEpCisJCXJldCA9IGNsb3NlKHRkYi0+ZmQpOworCVNBRkVfRlJFRSh0ZGItPmxvY2tyZWNzKTsKKworCS8qIFJlbW92ZSBmcm9tIGNvbnRleHRzIGxpc3QgKi8KKwlmb3IgKGkgPSAmdGRiczsgKmk7IGkgPSAmKCppKS0+bmV4dCkgeworCQlpZiAoKmkgPT0gdGRiKSB7CisJCQkqaSA9IHRkYi0+bmV4dDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbWVtc2V0KHRkYiwgMCwgc2l6ZW9mKCp0ZGIpKTsKKwlTQUZFX0ZSRUUodGRiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIHJlZ2lzdGVyIGEgbG9naW5nIGZ1bmN0aW9uICovCit2b2lkIHRkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbihzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0ZGJfbG9nZ2luZ19jb250ZXh0ICpsb2dfY3R4KQoreworICAgICAgICB0ZGItPmxvZyA9ICpsb2dfY3R4OworfQorCit2b2lkICp0ZGJfZ2V0X2xvZ2dpbmdfcHJpdmF0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYikKK3sKKwlyZXR1cm4gdGRiLT5sb2cubG9nX3ByaXZhdGU7Cit9CisKKy8qIHJlb3BlbiBhIHRkYiAtIHRoaXMgY2FuIGJlIHVzZWQgYWZ0ZXIgYSBmb3JrIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUgYW4gaW5kZXBlbmRlbnQKKyAgIHNlZWsgcG9pbnRlciBmcm9tIG91ciBwYXJlbnQgYW5kIHRvIHJlLWVzdGFibGlzaCBsb2NrcyAqLworaW50IHRkYl9yZW9wZW4oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAodGRiLT5mbGFncyAmIFREQl9JTlRFUk5BTCkgeworCQlyZXR1cm4gMDsgLyogTm90aGluZyB0byBkby4gKi8KKwl9CisKKwlpZiAodGRiLT5udW1fbG9ja3MgIT0gMCB8fCB0ZGItPmdsb2JhbF9sb2NrLmNvdW50KSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0VSUk9SLCAidGRiX3Jlb3BlbjogcmVvcGVuIG5vdCBhbGxvd2VkIHdpdGggbG9ja3MgaGVsZFxuIikpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHRkYi0+dHJhbnNhY3Rpb24gIT0gMCkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19FUlJPUiwgInRkYl9yZW9wZW46IHJlb3BlbiBub3QgYWxsb3dlZCBpbnNpZGUgYSB0cmFuc2FjdGlvblxuIikpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHRkYl9tdW5tYXAodGRiKSAhPSAwKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3Jlb3BlbjogbXVubWFwIGZhaWxlZCAoJXMpXG4iLCBzdHJlcnJvcihlcnJubykpKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoY2xvc2UodGRiLT5mZCkgIT0gMCkKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfcmVvcGVuOiBXQVJOSU5HIGNsb3NpbmcgdGRiLT5mZCBmYWlsZWQhXG4iKSk7CisJdGRiLT5mZCA9IG9wZW4odGRiLT5uYW1lLCB0ZGItPm9wZW5fZmxhZ3MgJiB+KE9fQ1JFQVR8T19UUlVOQyksIDApOworCWlmICh0ZGItPmZkID09IC0xKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3Jlb3Blbjogb3BlbiBmYWlsZWQgKCVzKVxuIiwgc3RyZXJyb3IoZXJybm8pKSk7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKCh0ZGItPmZsYWdzICYgVERCX0NMRUFSX0lGX0ZJUlNUKSAmJgorCSAgICAodGRiLT5tZXRob2RzLT50ZGJfYnJsb2NrKHRkYiwgQUNUSVZFX0xPQ0ssIEZfUkRMQ0ssIEZfU0VUTEtXLCAwLCAxKSA9PSAtMSkpIHsKKwkJVERCX0xPRygodGRiLCBUREJfREVCVUdfRkFUQUwsICJ0ZGJfcmVvcGVuOiBmYWlsZWQgdG8gb2J0YWluIGFjdGl2ZSBsb2NrXG4iKSk7CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKGZzdGF0KHRkYi0+ZmQsICZzdCkgIT0gMCkgeworCQlUREJfTE9HKCh0ZGIsIFREQl9ERUJVR19GQVRBTCwgInRkYl9yZW9wZW46IGZzdGF0IGZhaWxlZCAoJXMpXG4iLCBzdHJlcnJvcihlcnJubykpKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoc3Quc3RfaW5vICE9IHRkYi0+aW5vZGUgfHwgc3Quc3RfZGV2ICE9IHRkYi0+ZGV2aWNlKSB7CisJCVREQl9MT0coKHRkYiwgVERCX0RFQlVHX0ZBVEFMLCAidGRiX3Jlb3BlbjogZmlsZSBkZXYvaW5vZGUgaGFzIGNoYW5nZWQhXG4iKSk7CisJCWdvdG8gZmFpbDsKKwl9CisJdGRiX21tYXAodGRiKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXRkYl9jbG9zZSh0ZGIpOworCXJldHVybiAtMTsKK30KKworLyogcmVvcGVuIGFsbCB0ZGIncyAqLworaW50IHRkYl9yZW9wZW5fYWxsKGludCBwYXJlbnRfbG9uZ2xpdmVkKQoreworCXN0cnVjdCB0ZGJfY29udGV4dCAqdGRiOworCisJZm9yICh0ZGI9dGRiczsgdGRiOyB0ZGIgPSB0ZGItPm5leHQpIHsKKwkJLyoKKwkJICogSWYgdGhlIHBhcmVudCBpcyBsb25nbGl2ZWQgKGllLiBhCisJCSAqIHBhcmVudCBkYWVtb24gYXJjaGl0ZWN0dXJlKSwgd2Uga25vdworCQkgKiBpdCB3aWxsIGtlZXAgaXQncyBhY3RpdmUgbG9jayBvbiBhCisJCSAqIHRkYiBvcGVuZWQgd2l0aCBDTEVBUl9JRl9GSVJTVC4gVGh1cworCQkgKiBmb3IgY2hpbGQgcHJvY2Vzc2VzIHdlIGRvbid0IGhhdmUgdG8KKwkJICogYWRkIGFuIGFjdGl2ZSBsb2NrLiBUaGlzIGlzIGVzc2VudGlhbAorCQkgKiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9uIHN5c3RlbXMgdGhhdAorCQkgKiBrZWVwIFBPU0lYIGxvY2tzIGFzIGEgbm9uLXNjYWxhYmxlIGRhdGEKKwkJICogc3RydWN0dXJlIGluIHRoZSBrZXJuZWwuCisJCSAqLworCQlpZiAocGFyZW50X2xvbmdsaXZlZCkgeworCQkJLyogRW5zdXJlIG5vIGNsZWFyLWlmLWZpcnN0LiAqLworCQkJdGRiLT5mbGFncyAmPSB+VERCX0NMRUFSX0lGX0ZJUlNUOworCQl9CisKKwkJaWYgKHRkYl9yZW9wZW4odGRiKSAhPSAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiLmggYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzJlZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiLmgKQEAgLTAsMCArMSwyMTMgQEAKKyNpZm5kZWYgX19UREJfSF9fCisjZGVmaW5lIF9fVERCX0hfXworCisvKgorICAgVW5peCBTTUIvQ0lGUyBpbXBsZW1lbnRhdGlvbi4KKworICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5CisKKyAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsIDE5OTktMjAwNAorCisgICAgICoqIE5PVEUhIFRoZSBmb2xsb3dpbmcgTEdQTCBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIHRkYgorICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCisgICAgICoqIHVuZGVyIHRoZSBMR1BMCisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKiBmbGFncyB0byB0ZGJfc3RvcmUoKSAqLworI2RlZmluZSBUREJfUkVQTEFDRSAxCisjZGVmaW5lIFREQl9JTlNFUlQgMgorI2RlZmluZSBUREJfTU9ESUZZIDMKKworLyogZmxhZ3MgZm9yIHRkYl9vcGVuKCkgKi8KKyNkZWZpbmUgVERCX0RFRkFVTFQgMCAvKiBqdXN0IGEgcmVhZGFiaWxpdHkgcGxhY2UgaG9sZGVyICovCisjZGVmaW5lIFREQl9DTEVBUl9JRl9GSVJTVCAxCisjZGVmaW5lIFREQl9JTlRFUk5BTCAyIC8qIGRvbid0IHN0b3JlIG9uIGRpc2sgKi8KKyNkZWZpbmUgVERCX05PTE9DSyAgIDQgLyogZG9uJ3QgZG8gYW55IGxvY2tpbmcgKi8KKyNkZWZpbmUgVERCX05PTU1BUCAgIDggLyogZG9uJ3QgdXNlIG1tYXAgKi8KKyNkZWZpbmUgVERCX0NPTlZFUlQgMTYgLyogY29udmVydCBlbmRpYW4gKGludGVybmFsIHVzZSkgKi8KKyNkZWZpbmUgVERCX0JJR0VORElBTiAzMiAvKiBoZWFkZXIgaXMgYmlnLWVuZGlhbiAoaW50ZXJuYWwgdXNlKSAqLworI2RlZmluZSBUREJfTk9TWU5DICAgNjQgLyogZG9uJ3QgdXNlIHN5bmNocm9ub3VzIHRyYW5zYWN0aW9ucyAqLworI2RlZmluZSBUREJfU0VRTlVNICAgMTI4IC8qIG1haW50YWluIGEgc2VxdWVuY2UgbnVtYmVyICovCisKKyNkZWZpbmUgVERCX0VSUkNPREUoY29kZSwgcmV0KSAoKHRkYi0+ZWNvZGUgPSAoY29kZSkpLCByZXQpCisKKy8qIGVycm9yIGNvZGVzICovCitlbnVtIFREQl9FUlJPUiB7VERCX1NVQ0NFU1M9MCwgVERCX0VSUl9DT1JSVVBULCBUREJfRVJSX0lPLCBUREJfRVJSX0xPQ0ssCisJCVREQl9FUlJfT09NLCBUREJfRVJSX0VYSVNUUywgVERCX0VSUl9OT0xPQ0ssIFREQl9FUlJfTE9DS19USU1FT1VULAorCQlUREJfRVJSX05PRVhJU1QsIFREQl9FUlJfRUlOVkFMLCBUREJfRVJSX1JET05MWX07CisKKy8qIGRlYnVnZ2luZyB1c2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxldmVscyAqLworZW51bSB0ZGJfZGVidWdfbGV2ZWwge1REQl9ERUJVR19GQVRBTCA9IDAsIFREQl9ERUJVR19FUlJPUiwKKwkJICAgICAgVERCX0RFQlVHX1dBUk5JTkcsIFREQl9ERUJVR19UUkFDRX07CisKK3R5cGVkZWYgc3RydWN0IFREQl9EQVRBIHsKKwl1bnNpZ25lZCBjaGFyICpkcHRyOworCXNpemVfdCBkc2l6ZTsKK30gVERCX0RBVEE7CisKKyNpZm5kZWYgUFJJTlRGX0FUVFJJQlVURQorI2lmIChfX0dOVUNfXyA+PSAzKQorLyoqIFVzZSBnY2MgYXR0cmlidXRlIHRvIGNoZWNrIHByaW50ZiBmbnMuICBhMSBpcyB0aGUgMS1iYXNlZCBpbmRleCBvZgorICogdGhlIHBhcmFtZXRlciBjb250YWluaW5nIHRoZSBmb3JtYXQsIGFuZCBhMiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0CisgKiBhcmd1bWVudC4gTm90ZSB0aGF0IHNvbWUgZ2NjIDIueCB2ZXJzaW9ucyBkb24ndCBoYW5kbGUgdGhpcworICogcHJvcGVybHkgKiovCisjZGVmaW5lIFBSSU5URl9BVFRSSUJVVEUoYTEsIGEyKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChfX3ByaW50Zl9fLCBhMSwgYTIpKSkKKyNlbHNlCisjZGVmaW5lIFBSSU5URl9BVFRSSUJVVEUoYTEsIGEyKQorI2VuZGlmCisjZW5kaWYKKworLyogZXh0MmZzIHRkYiByZW5hbWVzICovCisjZGVmaW5lIHRkYl9vcGVuIGV4dDJmc190ZGJfb3BlbgorI2RlZmluZSB0ZGJfb3Blbl9leCBleHQyZnNfdGRiX29wZW5fZXgKKyNkZWZpbmUgdGRiX3NldF9tYXhfZGVhZCBleHQyZnNfdGRiX3NldF9tYXhfZGVhZAorI2RlZmluZSB0ZGJfcmVvcGVuIGV4dDJmc190ZGJfcmVvcGVuCisjZGVmaW5lIHRkYl9yZW9wZW5fYWxsIGV4dDJmc190ZGJfcmVvcGVuX2FsbAorI2RlZmluZSB0ZGJfc2V0X2xvZ2dpbmdfZnVuY3Rpb24gZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbgorI2RlZmluZSB0ZGJfZXJyb3IgZXh0MmZzX3RkYl9lcnJvcgorI2RlZmluZSB0ZGJfZXJyb3JzdHIgZXh0MmZzX3RkYl9lcnJvcnN0cgorI2RlZmluZSB0ZGJfZmV0Y2ggZXh0MmZzX3RkYl9mZXRjaAorI2RlZmluZSB0ZGJfcGFyc2VfcmVjb3JkIGV4dDJmc190ZGJfcGFyc2VfcmVjb3JkCisjZGVmaW5lIHRkYl9kZWxldGUgZXh0MmZzX3RkYl9kZWxldGUKKyNkZWZpbmUgdGRiX3N0b3JlIGV4dDJmc190ZGJfc3RvcmUKKyNkZWZpbmUgdGRiX2FwcGVuZCBleHQyZnNfdGRiX2FwcGVuZAorI2RlZmluZSB0ZGJfY2xvc2UgZXh0MmZzX3RkYl9jbG9zZQorI2RlZmluZSB0ZGJfZmlyc3RrZXkgZXh0MmZzX3RkYl9maXJzdGtleQorI2RlZmluZSB0ZGJfbmV4dGtleSBleHQyZnNfdGRiX25leHRrZXkKKyNkZWZpbmUgdGRiX3RyYXZlcnNlIGV4dDJmc190ZGJfdHJhdmVyc2UKKyNkZWZpbmUgdGRiX3RyYXZlcnNlX3JlYWQgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkCisjZGVmaW5lIHRkYl9leGlzdHMgZXh0MmZzX3RkYl9leGlzdHMKKyNkZWZpbmUgdGRiX2xvY2thbGwgZXh0MmZzX3RkYl9sb2NrYWxsCisjZGVmaW5lIHRkYl91bmxvY2thbGwgZXh0MmZzX3RkYl91bmxvY2thbGwKKyNkZWZpbmUgdGRiX2xvY2thbGxfcmVhZCBleHQyZnNfdGRiX2xvY2thbGxfcmVhZAorI2RlZmluZSB0ZGJfdW5sb2NrYWxsX3JlYWQgZXh0MmZzX3RkYl91bmxvY2thbGxfcmVhZAorI2RlZmluZSB0ZGJfbmFtZSBleHQyZnNfdGRiX25hbWUKKyNkZWZpbmUgdGRiX2ZkIGV4dDJmc190ZGJfZmQKKyNkZWZpbmUgdGRiX2xvZ19mbiBleHQyZnNfdGRiX2xvZ19mbgorI2RlZmluZSB0ZGJfZ2V0X2xvZ2dpbmdfcHJpdmF0ZSBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGUKKyNkZWZpbmUgdGRiX3RyYW5zYWN0aW9uX3N0YXJ0IGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fc3RhcnQKKyNkZWZpbmUgdGRiX3RyYW5zYWN0aW9uX2NvbW1pdCBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX2NvbW1pdAorI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsCisjZGVmaW5lIHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlcgorI2RlZmluZSB0ZGJfZ2V0X3NlcW51bSBleHQyZnNfdGRiX2dldF9zZXFudW0KKyNkZWZpbmUgdGRiX2hhc2hfc2l6ZSBleHQyZnNfdGRiX2hhc2hfc2l6ZQorI2RlZmluZSB0ZGJfbWFwX3NpemUgZXh0MmZzX3RkYl9tYXBfc2l6ZQorI2RlZmluZSB0ZGJfZ2V0X2ZsYWdzIGV4dDJmc190ZGJfZ2V0X2ZsYWdzCisjZGVmaW5lIHRkYl9jaGFpbmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2sKKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrIGV4dDJmc190ZGJfY2hhaW51bmxvY2sKKyNkZWZpbmUgdGRiX2NoYWlubG9ja19yZWFkIGV4dDJmc190ZGJfY2hhaW5sb2NrX3JlYWQKKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbnVubG9ja19yZWFkCisjZGVmaW5lIHRkYl9kdW1wX2FsbCBleHQyZnNfdGRiX2R1bXBfYWxsCisjZGVmaW5lIHRkYl9wcmludGZyZWVsaXN0IGV4dDJmc190ZGJfcHJpbnRmcmVlbGlzdAorI2RlZmluZSB0ZGJfdmFsaWRhdGVfZnJlZWxpc3QgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdAorI2RlZmluZSB0ZGJfY2hhaW5sb2NrX21hcmsgZXh0MmZzX3RkYl9jaGFpbmxvY2tfbWFyaworI2RlZmluZSB0ZGJfY2hhaW5sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfY2hhaW5sb2NrX25vbmJsb2NrCisjZGVmaW5lIHRkYl9jaGFpbmxvY2tfdW5tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX3VubWFyaworI2RlZmluZSB0ZGJfZW5hYmxlX3NlcW51bSBleHQyZnNfdGRiX2VuYWJsZV9zZXFudW0KKyNkZWZpbmUgdGRiX2luY3JlbWVudF9zZXFudW1fbm9uYmxvY2sgZXh0MmZzX3RkYl9pbmNyZW1lbnRfc2VxbnVtX25vbmJsb2NrCisjZGVmaW5lIHRkYl9sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja19ub25ibG9jaworI2RlZmluZSB0ZGJfbG9ja2FsbF9tYXJrIGV4dDJmc190ZGJfbG9ja2FsbF9tYXJrCisjZGVmaW5lIHRkYl9sb2NrYWxsX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9ub25ibG9jaworI2RlZmluZSB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrCisjZGVmaW5lIHRkYl9sb2NrYWxsX3VubWFyayBleHQyZnNfdGRiX2xvY2thbGxfdW5tYXJrCisKKy8qIHRoaXMgaXMgdGhlIGNvbnRleHQgc3RydWN0dXJlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBhIGRiIG9wZW4gKi8KK3R5cGVkZWYgc3RydWN0IHRkYl9jb250ZXh0IFREQl9DT05URVhUOworCit0eXBlZGVmIGludCAoKnRkYl90cmF2ZXJzZV9mdW5jKShzdHJ1Y3QgdGRiX2NvbnRleHQgKiwgVERCX0RBVEEsIFREQl9EQVRBLCB2b2lkICopOwordHlwZWRlZiB2b2lkICgqdGRiX2xvZ19mdW5jKShzdHJ1Y3QgdGRiX2NvbnRleHQgKiwgZW51bSB0ZGJfZGVidWdfbGV2ZWwsIGNvbnN0IGNoYXIgKiwgLi4uKSBQUklOVEZfQVRUUklCVVRFKDMsIDQpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKCp0ZGJfaGFzaF9mdW5jKShUREJfREFUQSAqa2V5KTsKKworc3RydWN0IHRkYl9sb2dnaW5nX2NvbnRleHQgeworICAgICAgICB0ZGJfbG9nX2Z1bmMgbG9nX2ZuOworICAgICAgICB2b2lkICpsb2dfcHJpdmF0ZTsKK307CisKK3N0cnVjdCB0ZGJfY29udGV4dCAqdGRiX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hfc2l6ZSwgaW50IHRkYl9mbGFncywKKwkJICAgICAgaW50IG9wZW5fZmxhZ3MsIG1vZGVfdCBtb2RlKTsKK3N0cnVjdCB0ZGJfY29udGV4dCAqdGRiX29wZW5fZXgoY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hfc2l6ZSwgaW50IHRkYl9mbGFncywKKwkJCSBpbnQgb3Blbl9mbGFncywgbW9kZV90IG1vZGUsCisJCQkgY29uc3Qgc3RydWN0IHRkYl9sb2dnaW5nX2NvbnRleHQgKmxvZ19jdHgsCisJCQkgdGRiX2hhc2hfZnVuYyBoYXNoX2ZuKTsKK3ZvaWQgdGRiX3NldF9tYXhfZGVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IG1heF9kZWFkKTsKKworaW50IHRkYl9yZW9wZW4oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9yZW9wZW5fYWxsKGludCBwYXJlbnRfbG9uZ2xpdmVkKTsKK3ZvaWQgdGRiX3NldF9sb2dnaW5nX2Z1bmN0aW9uKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBjb25zdCBzdHJ1Y3QgdGRiX2xvZ2dpbmdfY29udGV4dCAqbG9nX2N0eCk7CitlbnVtIFREQl9FUlJPUiB0ZGJfZXJyb3Ioc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworY29uc3QgY2hhciAqdGRiX2Vycm9yc3RyKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK1REQl9EQVRBIHRkYl9mZXRjaChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfcGFyc2VfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksCisJCSAgICAgaW50ICgqcGFyc2VyKShUREJfREFUQSBrZXksIFREQl9EQVRBIGRhdGEsCisJCQkJICAgdm9pZCAqcHJpdmF0ZV9kYXRhKSwKKwkJICAgICB2b2lkICpwcml2YXRlX2RhdGEpOworaW50IHRkYl9kZWxldGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX3N0b3JlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIGRidWYsIGludCBmbGFnKTsKK2ludCB0ZGJfYXBwZW5kKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIG5ld19kYnVmKTsKK2ludCB0ZGJfY2xvc2Uoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworVERCX0RBVEEgdGRiX2ZpcnN0a2V5KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK1REQl9EQVRBIHRkYl9uZXh0a2V5KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl90cmF2ZXJzZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX3RyYXZlcnNlX2Z1bmMgZm4sIHZvaWQgKik7CitpbnQgdGRiX3RyYXZlcnNlX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl90cmF2ZXJzZV9mdW5jIGZuLCB2b2lkICopOworaW50IHRkYl9leGlzdHMoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2xvY2thbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdW5sb2NrYWxsKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfbG9ja2FsbF9yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdW5sb2NrYWxsX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX21hcmsoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9sb2NrYWxsX3VubWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Citjb25zdCBjaGFyICp0ZGJfbmFtZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitpbnQgdGRiX2ZkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3RkYl9sb2dfZnVuYyB0ZGJfbG9nX2ZuKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3ZvaWQgKnRkYl9nZXRfbG9nZ2luZ19wcml2YXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdHJhbnNhY3Rpb25fc3RhcnQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9jb21taXQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9jYW5jZWwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfZ2V0X3NlcW51bShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitpbnQgdGRiX2hhc2hfc2l6ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CitzaXplX3QgdGRiX21hcF9zaXplKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfZ2V0X2ZsYWdzKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK3ZvaWQgdGRiX2VuYWJsZV9zZXFudW0oc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOwordm9pZCB0ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CisKKy8qIExvdyBsZXZlbCBsb2NraW5nIGZ1bmN0aW9uczogdXNlIHdpdGggY2FyZSAqLworaW50IHRkYl9jaGFpbmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2NoYWlubG9ja19ub25ibG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfY2hhaW51bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSk7CitpbnQgdGRiX2NoYWlubG9ja19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl9jaGFpbnVubG9ja19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCBUREJfREFUQSBrZXkpOworaW50IHRkYl9jaGFpbmxvY2tfbWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKK2ludCB0ZGJfY2hhaW5sb2NrX3VubWFyayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5KTsKKworLyogRGVidWcgZnVuY3Rpb25zLiBOb3QgdXNlZCBpbiBwcm9kdWN0aW9uLiAqLwordm9pZCB0ZGJfZHVtcF9hbGwoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworaW50IHRkYl9wcmludGZyZWVsaXN0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKK2ludCB0ZGJfdmFsaWRhdGVfZnJlZWxpc3Qoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCAqcG51bV9lbnRyaWVzKTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiB0ZGIuaCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL2J1aWxkLXRkYiBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9idWlsZC10ZGIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWNjMThmNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9idWlsZC10ZGIKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSBjcmVhdGVzIGEgc3RhbmQtYWxvbmUgVERCIGJhc2VkIG9uIGEgc2V0IG9mIHNvdXJjZXMgZnJvbSAKKyMgU2FtYmEKKworI0JBU0VfRElSPS91c3IvcHJvamVjdHMvc2FtYmEvc2FtYmEtNC4wLjB0cDQvc291cmNlL2xpYi90ZGIKK0JBU0VfRElSPS91c3IvcHJvamVjdHMvc2FtYmEvdGRiCisKK3JtIC1yZiAucGMKKworRklMRVM9ImVycm9yLmMgbG9jay5jIGlvLmMgdHJhbnNhY3Rpb24uYyBmcmVlbGlzdC5jIFwKKwlmcmVlbGlzdGNoZWNrLmMgdHJhdmVyc2UuYyBkdW1wLmMgdGRiLmMgb3Blbi5jIgorCisoY2QgJEJBU0VfRElSL2NvbW1vbjsgc3ZuIGluZm8gKSA+IC5zdm5pbmZvCitlY2hvICIvKiIgPiB0ZGIuYworZ3JlcCBeVVJMIC5zdm5pbmZvID4+IHRkYi5jCitncmVwICJeTGFzdCBDaGFuZ2VkIFJldiIgLnN2bmluZm8gfCBzZWQgLWUgJ3MvTGFzdCBDaGFuZ2VkIC8vJyA+PiB0ZGIuYworZ3JlcCAiXkxhc3QgQ2hhbmdlZCBEYXRlIiAuc3ZuaW5mbyA+PiB0ZGIuYworZWNobyAiKi8iID4+IHRkYi5jCisKK2NhdCAkQkFTRV9ESVIvY29tbW9uL3RkYl9wcml2YXRlLmggPj4gdGRiLmMKK2ZvciBpIGluICRGSUxFUzsgZG8KKwlpZiBbIGB0YWlsIC1uIDEgdGRiLmMgfCB3YyAtY2AgLWd0IDEgXTsgdGhlbgorCQlwcmludGYgIlxuIiA+PiB0ZGIuYworCWZpCisJZWNobyAiLyogZmlsZTogJGkgKi8iID4+IHRkYi5jCisJc2VkIC1lICcxLC8jaW5jbHVkZSAidGRiX3ByaXZhdGUuaCIvZCcgPCAkQkFTRV9ESVIvY29tbW9uLyRpID4+IHRkYi5jCitkb25lCisKK2NwICRCQVNFX0RJUi9pbmNsdWRlL3RkYi5oIC4KK2NwICRCQVNFX0RJUi90b29scy90ZGJ0b29sLmMgLgorCitxdWlsdCBwdXNoIC1hCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL2NvcHlyaWdodCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL2NvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQxZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvY29weXJpZ2h0CkBAIC0wLDAgKzEsMjAgQEAKK0luZGV4OiB0ZGJzYS90ZGIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRkYnNhLm9yaWcvdGRiLmMKKysrKyB0ZGJzYS90ZGIuYworQEAgLTQsMTEgKzQsMTEgQEAgUmV2OiAyMzM3MQorIExhc3QgQ2hhbmdlZCBEYXRlOiAyMDA3LTA2LTA2IDIwOjE0OjA2IC0wNDAwIChXZWQsIDA2IEp1biAyMDA3KQorICovCisgIC8qIAorLSAgIFVuaXggU01CL0NJRlMgaW1wbGVtZW50YXRpb24uCisrICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5IC0gc3RhbmRhbG9uZSB2ZXJzaW9uCisgCistICAgdHJpdmlhbCBkYXRhYmFzZSBsaWJyYXJ5IC0gcHJpdmF0ZSBpbmNsdWRlcworLQorLSAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsICAgICAgICAgICAgICAyMDA1CisrICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgVHJpZGdlbGwgICAgICAgICAgICAgIDE5OTktMjAwNQorKyAgIENvcHlyaWdodCAoQykgSmVyZW15IEFsbGlzb24gICAgICAgICAgICAgICAyMDAwLTIwMDYKKysgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsICAgICAgICAgMjAwMAorICAgIAorICAgICAgKiogTk9URSEgVGhlIGZvbGxvd2luZyBMR1BMIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgdGRiCisgICAgICAqKiBsaWJyYXJ5LiBUaGlzIGRvZXMgTk9UIGltcGx5IHRoYXQgYWxsIG9mIFNhbWJhIGlzIHJlbGVhc2VkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9leHQydGRiLXJlbmFtZSBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL2V4dDJ0ZGItcmVuYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YmYwODUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9leHQydGRiLXJlbmFtZQpAQCAtMCwwICsxLDY1IEBACitJbmRleDogdGRiL3RkYi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRiLm9yaWcvdGRiLmgKKysrKyB0ZGIvdGRiLmgKK0BAIC03Niw2ICs3Niw2MCBAQCB0eXBlZGVmIHN0cnVjdCBUREJfREFUQSB7CisgI2VuZGlmCisgI2VuZGlmCisgCisrLyogZXh0MmZzIHRkYiByZW5hbWVzICovCisrI2RlZmluZSB0ZGJfb3BlbiBleHQyZnNfdGRiX29wZW4KKysjZGVmaW5lIHRkYl9vcGVuX2V4IGV4dDJmc190ZGJfb3Blbl9leAorKyNkZWZpbmUgdGRiX3NldF9tYXhfZGVhZCBleHQyZnNfdGRiX3NldF9tYXhfZGVhZAorKyNkZWZpbmUgdGRiX3Jlb3BlbiBleHQyZnNfdGRiX3Jlb3BlbgorKyNkZWZpbmUgdGRiX3Jlb3Blbl9hbGwgZXh0MmZzX3RkYl9yZW9wZW5fYWxsCisrI2RlZmluZSB0ZGJfc2V0X2xvZ2dpbmdfZnVuY3Rpb24gZXh0MmZzX3RkYl9zZXRfbG9nZ2luZ19mdW5jdGlvbgorKyNkZWZpbmUgdGRiX2Vycm9yIGV4dDJmc190ZGJfZXJyb3IKKysjZGVmaW5lIHRkYl9lcnJvcnN0ciBleHQyZnNfdGRiX2Vycm9yc3RyCisrI2RlZmluZSB0ZGJfZmV0Y2ggZXh0MmZzX3RkYl9mZXRjaAorKyNkZWZpbmUgdGRiX3BhcnNlX3JlY29yZCBleHQyZnNfdGRiX3BhcnNlX3JlY29yZAorKyNkZWZpbmUgdGRiX2RlbGV0ZSBleHQyZnNfdGRiX2RlbGV0ZQorKyNkZWZpbmUgdGRiX3N0b3JlIGV4dDJmc190ZGJfc3RvcmUKKysjZGVmaW5lIHRkYl9hcHBlbmQgZXh0MmZzX3RkYl9hcHBlbmQKKysjZGVmaW5lIHRkYl9jbG9zZSBleHQyZnNfdGRiX2Nsb3NlCisrI2RlZmluZSB0ZGJfZmlyc3RrZXkgZXh0MmZzX3RkYl9maXJzdGtleQorKyNkZWZpbmUgdGRiX25leHRrZXkgZXh0MmZzX3RkYl9uZXh0a2V5CisrI2RlZmluZSB0ZGJfdHJhdmVyc2UgZXh0MmZzX3RkYl90cmF2ZXJzZQorKyNkZWZpbmUgdGRiX3RyYXZlcnNlX3JlYWQgZXh0MmZzX3RkYl90cmF2ZXJzZV9yZWFkCisrI2RlZmluZSB0ZGJfZXhpc3RzIGV4dDJmc190ZGJfZXhpc3RzCisrI2RlZmluZSB0ZGJfbG9ja2FsbCBleHQyZnNfdGRiX2xvY2thbGwKKysjZGVmaW5lIHRkYl91bmxvY2thbGwgZXh0MmZzX3RkYl91bmxvY2thbGwKKysjZGVmaW5lIHRkYl9sb2NrYWxsX3JlYWQgZXh0MmZzX3RkYl9sb2NrYWxsX3JlYWQKKysjZGVmaW5lIHRkYl91bmxvY2thbGxfcmVhZCBleHQyZnNfdGRiX3VubG9ja2FsbF9yZWFkCisrI2RlZmluZSB0ZGJfbmFtZSBleHQyZnNfdGRiX25hbWUKKysjZGVmaW5lIHRkYl9mZCBleHQyZnNfdGRiX2ZkCisrI2RlZmluZSB0ZGJfbG9nX2ZuIGV4dDJmc190ZGJfbG9nX2ZuCisrI2RlZmluZSB0ZGJfZ2V0X2xvZ2dpbmdfcHJpdmF0ZSBleHQyZnNfdGRiX2dldF9sb2dnaW5nX3ByaXZhdGUKKysjZGVmaW5lIHRkYl90cmFuc2FjdGlvbl9zdGFydCBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3N0YXJ0CisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY29tbWl0IGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY29tbWl0CisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fY2FuY2VsIGV4dDJmc190ZGJfdHJhbnNhY3Rpb25fY2FuY2VsCisrI2RlZmluZSB0ZGJfdHJhbnNhY3Rpb25fcmVjb3ZlciBleHQyZnNfdGRiX3RyYW5zYWN0aW9uX3JlY292ZXIKKysjZGVmaW5lIHRkYl9nZXRfc2VxbnVtIGV4dDJmc190ZGJfZ2V0X3NlcW51bQorKyNkZWZpbmUgdGRiX2hhc2hfc2l6ZSBleHQyZnNfdGRiX2hhc2hfc2l6ZQorKyNkZWZpbmUgdGRiX21hcF9zaXplIGV4dDJmc190ZGJfbWFwX3NpemUKKysjZGVmaW5lIHRkYl9nZXRfZmxhZ3MgZXh0MmZzX3RkYl9nZXRfZmxhZ3MKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2sKKysjZGVmaW5lIHRkYl9jaGFpbnVubG9jayBleHQyZnNfdGRiX2NoYWludW5sb2NrCisrI2RlZmluZSB0ZGJfY2hhaW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbmxvY2tfcmVhZAorKyNkZWZpbmUgdGRiX2NoYWludW5sb2NrX3JlYWQgZXh0MmZzX3RkYl9jaGFpbnVubG9ja19yZWFkCisrI2RlZmluZSB0ZGJfZHVtcF9hbGwgZXh0MmZzX3RkYl9kdW1wX2FsbAorKyNkZWZpbmUgdGRiX3ByaW50ZnJlZWxpc3QgZXh0MmZzX3RkYl9wcmludGZyZWVsaXN0CisrI2RlZmluZSB0ZGJfdmFsaWRhdGVfZnJlZWxpc3QgZXh0MmZzX3RkYl92YWxpZGF0ZV9mcmVlbGlzdAorKyNkZWZpbmUgdGRiX2NoYWlubG9ja19tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX21hcmsKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2tfbm9uYmxvY2sgZXh0MmZzX3RkYl9jaGFpbmxvY2tfbm9uYmxvY2sKKysjZGVmaW5lIHRkYl9jaGFpbmxvY2tfdW5tYXJrIGV4dDJmc190ZGJfY2hhaW5sb2NrX3VubWFyaworKyNkZWZpbmUgdGRiX2VuYWJsZV9zZXFudW0gZXh0MmZzX3RkYl9lbmFibGVfc2VxbnVtCisrI2RlZmluZSB0ZGJfaW5jcmVtZW50X3NlcW51bV9ub25ibG9jayBleHQyZnNfdGRiX2luY3JlbWVudF9zZXFudW1fbm9uYmxvY2sKKysjZGVmaW5lIHRkYl9sb2NrX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja19ub25ibG9jaworKyNkZWZpbmUgdGRiX2xvY2thbGxfbWFyayBleHQyZnNfdGRiX2xvY2thbGxfbWFyaworKyNkZWZpbmUgdGRiX2xvY2thbGxfbm9uYmxvY2sgZXh0MmZzX3RkYl9sb2NrYWxsX25vbmJsb2NrCisrI2RlZmluZSB0ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrIGV4dDJmc190ZGJfbG9ja2FsbF9yZWFkX25vbmJsb2NrCisrI2RlZmluZSB0ZGJfbG9ja2FsbF91bm1hcmsgZXh0MmZzX3RkYl9sb2NrYWxsX3VubWFyaworKworIC8qIHRoaXMgaXMgdGhlIGNvbnRleHQgc3RydWN0dXJlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBhIGRiIG9wZW4gKi8KKyB0eXBlZGVmIHN0cnVjdCB0ZGJfY29udGV4dCBUREJfQ09OVEVYVDsKKyAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3JlcGxhY2UtaW5jbHVkZXMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9yZXBsYWNlLWluY2x1ZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDBkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9yZXBsYWNlLWluY2x1ZGVzCkBAIC0wLDAgKzEsOTIgQEAKK0luZGV4OiB0ZGIvdGRiLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZGIub3JpZy90ZGIuYworKysrIHRkYi90ZGIuYworQEAgLTI5LDExICsyOSw4MiBAQCBMYXN0IENoYW5nZWQgRGF0ZTogMjAwNy0wNi0yMiAxMzozNjoxMCAtCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisgCistI2luY2x1ZGUgInJlcGxhY2UuaCIKKy0jaW5jbHVkZSAic3lzdGVtL2ZpbGVzeXMuaCIKKy0jaW5jbHVkZSAic3lzdGVtL3RpbWUuaCIKKy0jaW5jbHVkZSAic3lzdGVtL3NobWVtLmgiCistI2luY2x1ZGUgInN5c3RlbS9zZWxlY3QuaCIKKysjaWZkZWYgQ09ORklHX1NUQU5EX0FMT05FCisrI2RlZmluZSBIQVZFX01NQVAKKysjZGVmaW5lIEhBVkVfU1RSRFVQCisrI2RlZmluZSBIQVZFX1NZU19NTUFOX0gKKysjZGVmaW5lIEhBVkVfVVRJTUVfSAorKyNkZWZpbmUgSEFWRV9VVElNRQorKyNlbmRpZgorKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2lmZGVmIEhBVkVfVVRJTUVfSAorKyNpbmNsdWRlIDx1dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKworKyNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKysjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIE1BUF9GSUxFCisrI2RlZmluZSBNQVBfRklMRSAwCisrI2VuZGlmCisrCisrI2lmbmRlZiBNQVBfRkFJTEVECisrI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCAqKS0xKQorKyNlbmRpZgorKworKyNpZm5kZWYgSEFWRV9TVFJEVVAKKysjZGVmaW5lIHN0cmR1cCByZXBfc3RyZHVwCisrc3RhdGljIGNoYXIgKnJlcF9zdHJkdXAoY29uc3QgY2hhciAqcykKKyt7CisrCWNoYXIgKnJldDsKKysJaW50IGxlbmd0aDsKKysJaWYgKCFzKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWlmICghbGVuZ3RoKQorKwkJbGVuZ3RoID0gc3RybGVuKHMpOworKworKwlyZXQgPSBtYWxsb2MobGVuZ3RoICsgMSk7CisrCWlmIChyZXQpIHsKKysJCXN0cm5jcHkocmV0LCBzLCBsZW5ndGgpOworKwkJcmV0W2xlbmd0aF0gPSAnXDAnOworKwl9CisrCXJldHVybiByZXQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgUFJJTlRGX0FUVFJJQlVURQorKyNpZiAoX19HTlVDX18gPj0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDEgKQorKy8qKiBVc2UgZ2NjIGF0dHJpYnV0ZSB0byBjaGVjayBwcmludGYgZm5zLiAgYTEgaXMgdGhlIDEtYmFzZWQgaW5kZXggb2YKKysgKiB0aGUgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIGZvcm1hdCwgYW5kIGEyIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKysgKiBhcmd1bWVudC4gTm90ZSB0aGF0IHNvbWUgZ2NjIDIueCB2ZXJzaW9ucyBkb24ndCBoYW5kbGUgdGhpcworKyAqIHByb3Blcmx5ICoqLworKyNkZWZpbmUgUFJJTlRGX0FUVFJJQlVURShhMSwgYTIpIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKF9fcHJpbnRmX18sIGExLCBhMikpKQorKyNlbHNlCisrI2RlZmluZSBQUklOVEZfQVRUUklCVVRFKGExLCBhMikKKysjZW5kaWYKKysjZW5kaWYKKysKKyt0eXBlZGVmIGludCBib29sOworKworICNpbmNsdWRlICJ0ZGIuaCIKKyAKKyAjaWZuZGVmIHUzMgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc2VyaWVzIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc2VyaWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMmI5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zZXJpZXMKQEAgLTAsMCArMSw2IEBACitjb3B5cmlnaHQKK3JlcGxhY2UtaW5jbHVkZXMKK3N0YXRpYy1wcm90b3R5cGVzCitzdGF0aWMtZnVuY3Rpb25zCit0ZGJ0b29sLWluY2x1ZGVzCitleHQydGRiLXJlbmFtZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc3RhdGljLWZ1bmN0aW9ucyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3N0YXRpYy1mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwZmJlZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3N0YXRpYy1mdW5jdGlvbnMKQEAgLTAsMCArMSwxMyBAQAorSW5kZXg6IHRkYnNhL3RkYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRic2Eub3JpZy90ZGIuYworKysrIHRkYnNhL3RkYi5jCitAQCAtMjI1NCw3ICsyMjU0LDcgQEAgaW50IHRkYl90cmFuc2FjdGlvbl9yZWNvdmVyKHN0cnVjdCB0ZGJfYworIC8qIGZpbGU6IGZyZWVsaXN0LmMgKi8KKyAKKyAvKiByZWFkIGEgZnJlZWxpc3QgcmVjb3JkIGFuZCBjaGVjayBmb3Igc2ltcGxlIGVycm9ycyAqLworLWludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpCisrc3RhdGljIGludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpCisgeworIAlpZiAodGRiLT5tZXRob2RzLT50ZGJfcmVhZCh0ZGIsIG9mZiwgcmVjLCBzaXplb2YoKnJlYyksRE9DT05WKCkpID09IC0xKQorIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc3RhdGljLXByb3RvdHlwZXMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy9zdGF0aWMtcHJvdG90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhhZjYxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRiL3BhdGNoZXMvc3RhdGljLXByb3RvdHlwZXMKQEAgLTAsMCArMSw3MiBAQAorSW5kZXg6IHRkYnNhL3RkYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGRic2Eub3JpZy90ZGIuYworKysrIHRkYnNhL3RkYi5jCitAQCAtMjUxLDM5ICsyNTEsMzkgQEAgc3RydWN0IHRkYl9jb250ZXh0IHsKKyAvKgorICAgaW50ZXJuYWwgcHJvdG90eXBlcworICovCistaW50IHRkYl9tdW5tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworLXZvaWQgdGRiX21tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworLWludCB0ZGJfbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSk7CistaW50IHRkYl91bmxvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsaXN0LCBpbnQgbHR5cGUpOworLWludCB0ZGJfYnJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBpbnQgcndfdHlwZSwgaW50IGxja190eXBlLCBpbnQgcHJvYmUsIHNpemVfdCBsZW4pOworLWludCB0ZGJfdHJhbnNhY3Rpb25fbG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGx0eXBlKTsKKy1pbnQgdGRiX3RyYW5zYWN0aW9uX3VubG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7CistaW50IHRkYl9icmxvY2tfdXBncmFkZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc2l6ZV90IGxlbik7CistaW50IHRkYl93cml0ZV9sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZik7CistaW50IHRkYl93cml0ZV91bmxvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKy1pbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLXZvaWQgKnRkYl9jb252ZXJ0KHZvaWQgKmJ1ZiwgdTMyIHNpemUpOworLWludCB0ZGJfZnJlZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworLXRkYl9vZmZfdCB0ZGJfYWxsb2NhdGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9sZW5fdCBsZW5ndGgsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKy1pbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworLWludCB0ZGJfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworLWludCB0ZGJfdW5sb2NrX3JlY29yZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZik7CistaW50IHRkYl9yZWNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworLWludCB0ZGJfcmVjX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CistaW50IHRkYl9kb19kZWxldGUoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCByZWNfcHRyLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7CistdW5zaWduZWQgY2hhciAqdGRiX2FsbG9jX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4pOworLWludCB0ZGJfcGFyc2VfZGF0YShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LAorK3N0YXRpYyBpbnQgdGRiX211bm1hcChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Cisrc3RhdGljIHZvaWQgdGRiX21tYXAoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIpOworK3N0YXRpYyBpbnQgdGRiX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsaXN0LCBpbnQgbHR5cGUpOworK3N0YXRpYyBpbnQgdGRiX3VubG9jayhzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgaW50IGxpc3QsIGludCBsdHlwZSk7Cisrc3RhdGljIGludCB0ZGJfYnJsb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCBpbnQgcndfdHlwZSwgaW50IGxja190eXBlLCBpbnQgcHJvYmUsIHNpemVfdCBsZW4pOworK3N0YXRpYyBpbnQgdGRiX3RyYW5zYWN0aW9uX2xvY2soc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIGludCBsdHlwZSk7Cisrc3RhdGljIGludCB0ZGJfdHJhbnNhY3Rpb25fdW5sb2NrKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKKytzdGF0aWMgaW50IHRkYl9icmxvY2tfdXBncmFkZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc2l6ZV90IGxlbik7Cisrc3RhdGljIGludCB0ZGJfd3JpdGVfbG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworK3N0YXRpYyBpbnQgdGRiX3dyaXRlX3VubG9ja19yZWNvcmQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmYpOworK3N0YXRpYyBpbnQgdGRiX29mc19yZWFkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworK3N0YXRpYyBpbnQgdGRiX29mc193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgdGRiX29mZl90ICpkKTsKKytzdGF0aWMgdm9pZCAqdGRiX2NvbnZlcnQodm9pZCAqYnVmLCB1MzIgc2l6ZSk7Cisrc3RhdGljIGludCB0ZGJfZnJlZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyB0ZGJfb2ZmX3QgdGRiX2FsbG9jYXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfbGVuX3QgbGVuZ3RoLCBzdHJ1Y3QgbGlzdF9zdHJ1Y3QgKnJlYyk7Cisrc3RhdGljIGludCB0ZGJfb2ZzX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9vZmZfdCAqZCk7Cisrc3RhdGljIGludCB0ZGJfb2ZzX3dyaXRlKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2Zmc2V0LCB0ZGJfb2ZmX3QgKmQpOworK3N0YXRpYyBpbnQgdGRiX2xvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKytzdGF0aWMgaW50IHRkYl91bmxvY2tfcmVjb3JkKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgb2ZmKTsKKytzdGF0aWMgaW50IHRkYl9yZWNfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyBpbnQgdGRiX3JlY193cml0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZnNldCwgc3RydWN0IGxpc3Rfc3RydWN0ICpyZWMpOworK3N0YXRpYyBpbnQgdGRiX2RvX2RlbGV0ZShzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IHJlY19wdHIsIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqdGRiX2FsbG9jX3JlYWQoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4pOworK3N0YXRpYyBpbnQgdGRiX3BhcnNlX2RhdGEoc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwKKyAJCSAgIHRkYl9vZmZfdCBvZmZzZXQsIHRkYl9sZW5fdCBsZW4sCisgCQkgICBpbnQgKCpwYXJzZXIpKFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGF0YSwKKyAJCQkJIHZvaWQgKnByaXZhdGVfZGF0YSksCisgCQkgICB2b2lkICpwcml2YXRlX2RhdGEpOworLXRkYl9vZmZfdCB0ZGJfZmluZF9sb2NrX2hhc2goc3RydWN0IHRkYl9jb250ZXh0ICp0ZGIsIFREQl9EQVRBIGtleSwgdTMyIGhhc2gsIGludCBsb2NrdHlwZSwKKytzdGF0aWMgdGRiX29mZl90IHRkYl9maW5kX2xvY2tfaGFzaChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgVERCX0RBVEEga2V5LCB1MzIgaGFzaCwgaW50IGxvY2t0eXBlLAorIAkJCSAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKy12b2lkIHRkYl9pb19pbml0KHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiKTsKKy1pbnQgdGRiX2V4cGFuZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IHNpemUpOworLWludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwKKytzdGF0aWMgdm9pZCB0ZGJfaW9faW5pdChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYik7Cisrc3RhdGljIGludCB0ZGJfZXhwYW5kKHN0cnVjdCB0ZGJfY29udGV4dCAqdGRiLCB0ZGJfb2ZmX3Qgc2l6ZSk7Cisrc3RhdGljIGludCB0ZGJfcmVjX2ZyZWVfcmVhZChzdHJ1Y3QgdGRiX2NvbnRleHQgKnRkYiwgdGRiX29mZl90IG9mZiwKKyAJCSAgICAgIHN0cnVjdCBsaXN0X3N0cnVjdCAqcmVjKTsKKyAKKyAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RkYi9wYXRjaGVzL3RkYnRvb2wtaW5jbHVkZXMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy90ZGJ0b29sLWluY2x1ZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzZjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGIvcGF0Y2hlcy90ZGJ0b29sLWluY2x1ZGVzCkBAIC0wLDAgKzEsMzAgQEAKK0luZGV4OiB0ZGJzYS90ZGJ0b29sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZGJzYS5vcmlnL3RkYnRvb2wuYworKysrIHRkYnNhL3RkYnRvb2wuYworQEAgLTIxLDEwICsyMSwyMSBAQAorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisgCistI2luY2x1ZGUgInJlcGxhY2UuaCIKKy0jaW5jbHVkZSAic3lzdGVtL2xvY2FsZS5oIgorLSNpbmNsdWRlICJzeXN0ZW0vdGltZS5oIgorLSNpbmNsdWRlICJzeXN0ZW0vZmlsZXN5cy5oIgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKyAjaW5jbHVkZSAidGRiLmgiCisgCisgc3RhdGljIGludCBkb19jb21tYW5kKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRidG9vbC5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdGRidG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGZjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZGJ0b29sLmMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgICBVbml4IFNNQi9DSUZTIGltcGxlbWVudGF0aW9uLgorICAgU2FtYmEgZGF0YWJhc2UgZnVuY3Rpb25zCisgICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAgICAgICAgICAgICAgMTk5OS0yMDAwCisgICBDb3B5cmlnaHQgKEMpIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCQkgICAyMDAwCisgICBDb3B5cmlnaHQgKEMpIEplcmVteSBBbGxpc29uCQkJICAgMjAwMAorICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgRXNoICAgICAgICAgICAgICAgICAgICAgICAgMjAwMQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJ0ZGIuaCIKKworc3RhdGljIGludCBkb19jb21tYW5kKHZvaWQpOworY29uc3QgY2hhciAqY21kbmFtZTsKK2NoYXIgKmFyZzEsICphcmcyOworc2l6ZV90IGFyZzFsZW4sIGFyZzJsZW47CitpbnQgYkl0ZXJhdGUgPSAwOworY2hhciAqbGluZTsKK1REQl9EQVRBIGl0ZXJhdGVfa2J1ZjsKK2NoYXIgY21kbGluZVsxMDI0XTsKKworZW51bSBjb21tYW5kcyB7CisJQ01EX0NSRUFURV9UREIsCisJQ01EX09QRU5fVERCLAorCUNNRF9FUkFTRSwKKwlDTURfRFVNUCwKKwlDTURfSU5TRVJULAorCUNNRF9NT1ZFLAorCUNNRF9TVE9SRSwKKwlDTURfU0hPVywKKwlDTURfS0VZUywKKwlDTURfSEVYS0VZUywKKwlDTURfREVMRVRFLAorCUNNRF9MSVNUX0hBU0hfRlJFRSwKKwlDTURfTElTVF9GUkVFLAorCUNNRF9JTkZPLAorCUNNRF9GSVJTVCwKKwlDTURfTkVYVCwKKwlDTURfU1lTVEVNLAorCUNNRF9RVUlULAorCUNNRF9IRUxQCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIGNvbW1hbmRzIGNtZDsKK30gQ09NTUFORF9UQUJMRTsKKworQ09NTUFORF9UQUJMRSBjbWRfdGFibGVbXSA9IHsKKwl7ImNyZWF0ZSIsCUNNRF9DUkVBVEVfVERCfSwKKwl7Im9wZW4iLAlDTURfT1BFTl9UREJ9LAorCXsiZXJhc2UiLAlDTURfRVJBU0V9LAorCXsiZHVtcCIsCUNNRF9EVU1QfSwKKwl7Imluc2VydCIsCUNNRF9JTlNFUlR9LAorCXsibW92ZSIsCUNNRF9NT1ZFfSwKKwl7InN0b3JlIiwJQ01EX1NUT1JFfSwKKwl7InNob3ciLAlDTURfU0hPV30sCisJeyJrZXlzIiwJQ01EX0tFWVN9LAorCXsiaGV4a2V5cyIsCUNNRF9IRVhLRVlTfSwKKwl7ImRlbGV0ZSIsCUNNRF9ERUxFVEV9LAorCXsibGlzdCIsCUNNRF9MSVNUX0hBU0hfRlJFRX0sCisJeyJmcmVlIiwJQ01EX0xJU1RfRlJFRX0sCisJeyJpbmZvIiwJQ01EX0lORk99LAorCXsiZmlyc3QiLAlDTURfRklSU1R9LAorCXsiMSIsCQlDTURfRklSU1R9LAorCXsibmV4dCIsCUNNRF9ORVhUfSwKKwl7Im4iLAkJQ01EX05FWFR9LAorCXsicXVpdCIsCUNNRF9RVUlUfSwKKwl7InEiLAkJQ01EX1FVSVR9LAorCXsiISIsCQlDTURfU1lTVEVNfSwKKwl7TlVMTCwJCUNNRF9IRUxQfQorfTsKKworLyogYSB0ZGIgdG9vbCBmb3IgbWFuaXB1bGF0aW5nIGEgdGRiIGRhdGFiYXNlICovCisKK3N0YXRpYyBUREJfQ09OVEVYVCAqdGRiOworCitzdGF0aWMgaW50IHByaW50X3JlYyhUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgaW50IHByaW50X2tleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CitzdGF0aWMgaW50IHByaW50X2hleGtleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIHByaW50X2FzYyhjb25zdCBjaGFyICpidWYsaW50IGxlbikKK3sKKwlpbnQgaTsKKworCS8qIFdlJ3JlIHByb2JhYmx5IHByaW50aW5nIEFTQ0lJIHN0cmluZ3Mgc28gZG9uJ3QgdHJ5IHRvIGRpc3BsYXkKKwkgICB0aGUgdHJhaWxpbmcgTlVMTCBjaGFyYWN0ZXIuICovCisKKwlpZiAoYnVmW2xlbiAtIDFdID09IDApCisJICAgICAgICBsZW4tLTsKKworCWZvciAoaT0wO2k8bGVuO2krKykKKwkJcHJpbnRmKCIlYyIsaXNwcmludChidWZbaV0pP2J1ZltpXTonLicpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kYXRhKGNvbnN0IGNoYXIgKmJ1ZixpbnQgbGVuKQoreworCWludCBpPTA7CisJaWYgKGxlbjw9MCkgcmV0dXJuOworCXByaW50ZigiWyUwM1hdICIsaSk7CisJZm9yIChpPTA7aTxsZW47KSB7CisJCXByaW50ZigiJTAyWCAiLChpbnQpYnVmW2ldKTsKKwkJaSsrOworCQlpZiAoaSU4ID09IDApIHByaW50ZigiICIpOworCQlpZiAoaSUxNiA9PSAwKSB7CisJCQlwcmludF9hc2MoJmJ1ZltpLTE2XSw4KTsgcHJpbnRmKCIgIik7CisJCQlwcmludF9hc2MoJmJ1ZltpLThdLDgpOyBwcmludGYoIlxuIik7CisJCQlpZiAoaTxsZW4pIHByaW50ZigiWyUwM1hdICIsaSk7CisJCX0KKwl9CisJaWYgKGklMTYpIHsKKwkJaW50IG47CisKKwkJbiA9IDE2IC0gKGklMTYpOworCQlwcmludGYoIiAiKTsKKwkJaWYgKG4+OCkgcHJpbnRmKCIgIik7CisJCXdoaWxlIChuLS0pIHByaW50ZigiICAgIik7CisKKwkJbiA9IGklMTY7CisJCWlmIChuID4gOCkgbiA9IDg7CisJCXByaW50X2FzYygmYnVmW2ktKGklMTYpXSxuKTsgcHJpbnRmKCIgIik7CisJCW4gPSAoaSUxNikgLSBuOworCQlpZiAobj4wKSBwcmludF9hc2MoJmJ1ZltpLW5dLG4pOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZWxwKHZvaWQpCit7CisJcHJpbnRmKCJcbiIKKyJ0ZGJ0b29sOiBcbiIKKyIgIGNyZWF0ZSAgICBkYm5hbWUgICAgIDogY3JlYXRlIGEgZGF0YWJhc2VcbiIKKyIgIG9wZW4gICAgICBkYm5hbWUgICAgIDogb3BlbiBhbiBleGlzdGluZyBkYXRhYmFzZVxuIgorIiAgZXJhc2UgICAgICAgICAgICAgICAgOiBlcmFzZSB0aGUgZGF0YWJhc2VcbiIKKyIgIGR1bXAgICAgICAgICAgICAgICAgIDogZHVtcCB0aGUgZGF0YWJhc2UgYXMgc3RyaW5nc1xuIgorIiAga2V5cyAgICAgICAgICAgICAgICAgOiBkdW1wIHRoZSBkYXRhYmFzZSBrZXlzIGFzIHN0cmluZ3NcbiIKKyIgIGhleGtleXMgICAgICAgICAgICAgIDogZHVtcCB0aGUgZGF0YWJhc2Uga2V5cyBhcyBoZXggdmFsdWVzXG4iCisiICBpbmZvICAgICAgICAgICAgICAgICA6IHByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgZGF0YWJhc2VcbiIKKyIgIGluc2VydCAgICBrZXkgIGRhdGEgIDogaW5zZXJ0IGEgcmVjb3JkXG4iCisiICBtb3ZlICAgICAga2V5ICBmaWxlICA6IG1vdmUgYSByZWNvcmQgdG8gYSBkZXN0aW5hdGlvbiB0ZGJcbiIKKyIgIHN0b3JlICAgICBrZXkgIGRhdGEgIDogc3RvcmUgYSByZWNvcmQgKHJlcGxhY2UpXG4iCisiICBzaG93ICAgICAga2V5ICAgICAgICA6IHNob3cgYSByZWNvcmQgYnkga2V5XG4iCisiICBkZWxldGUgICAga2V5ICAgICAgICA6IGRlbGV0ZSBhIHJlY29yZCBieSBrZXlcbiIKKyIgIGxpc3QgICAgICAgICAgICAgICAgIDogcHJpbnQgdGhlIGRhdGFiYXNlIGhhc2ggdGFibGUgYW5kIGZyZWVsaXN0XG4iCisiICBmcmVlICAgICAgICAgICAgICAgICA6IHByaW50IHRoZSBkYXRhYmFzZSBmcmVlbGlzdFxuIgorIiAgISBjb21tYW5kICAgICAgICAgICAgOiBleGVjdXRlIHN5c3RlbSBjb21tYW5kXG4iCisiICAxIHwgZmlyc3QgICAgICAgICAgICA6IHByaW50IHRoZSBmaXJzdCByZWNvcmRcbiIKKyIgIG4gfCBuZXh0ICAgICAgICAgICAgIDogcHJpbnQgdGhlIG5leHQgcmVjb3JkXG4iCisiICBxIHwgcXVpdCAgICAgICAgICAgICA6IHRlcm1pbmF0ZVxuIgorIiAgXFxuICAgICAgICAgICAgICAgICAgIDogcmVwZWF0ICduZXh0JyBjb21tYW5kXG4iCisiXG4iKTsKK30KKworc3RhdGljIHZvaWQgdGVycm9yKGNvbnN0IGNoYXIgKndoeSkKK3sKKwlwcmludGYoIiVzXG4iLCB3aHkpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfdGRiKGNvbnN0IGNoYXIgKnRkYm5hbWUpCit7CisJaWYgKHRkYikgdGRiX2Nsb3NlKHRkYik7CisJdGRiID0gdGRiX29wZW4odGRibmFtZSwgMCwgVERCX0NMRUFSX0lGX0ZJUlNULAorCQkgICAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworCWlmICghdGRiKSB7CisJCXByaW50ZigiQ291bGQgbm90IGNyZWF0ZSAlczogJXNcbiIsIHRkYm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvcGVuX3RkYihjb25zdCBjaGFyICp0ZGJuYW1lKQoreworCWlmICh0ZGIpIHRkYl9jbG9zZSh0ZGIpOworCXRkYiA9IHRkYl9vcGVuKHRkYm5hbWUsIDAsIDAsIE9fUkRXUiwgMDYwMCk7CisJaWYgKCF0ZGIpIHsKKwkJcHJpbnRmKCJDb3VsZCBub3Qgb3BlbiAlczogJXNcbiIsIHRkYm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdGRiKGNoYXIgKmtleW5hbWUsIHNpemVfdCBrZXlsZW4sIGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhbGVuKQoreworCVREQl9EQVRBIGtleSwgZGJ1ZjsKKworCWlmICgoa2V5bmFtZSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApKSB7CisJCXRlcnJvcigibmVlZCBrZXkiKTsKKwkJcmV0dXJuOworCX0KKworCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKilrZXluYW1lOworCWtleS5kc2l6ZSA9IGtleWxlbjsKKwlkYnVmLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJZGJ1Zi5kc2l6ZSA9IGRhdGFsZW47CisKKwlpZiAodGRiX3N0b3JlKHRkYiwga2V5LCBkYnVmLCBUREJfSU5TRVJUKSA9PSAtMSkgeworCQl0ZXJyb3IoImluc2VydCBmYWlsZWQiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX3RkYihjaGFyICprZXluYW1lLCBzaXplX3Qga2V5bGVuLCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKwlUREJfREFUQSBrZXksIGRidWY7CisKKwlpZiAoKGtleW5hbWUgPT0gTlVMTCkgfHwgKGtleWxlbiA9PSAwKSkgeworCQl0ZXJyb3IoIm5lZWQga2V5Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGRhdGEgPT0gTlVMTCkgfHwgKGRhdGFsZW4gPT0gMCkpIHsKKwkJdGVycm9yKCJuZWVkIGRhdGEiKTsKKwkJcmV0dXJuOworCX0KKworCWtleS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKilrZXluYW1lOworCWtleS5kc2l6ZSA9IGtleWxlbjsKKwlkYnVmLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJZGJ1Zi5kc2l6ZSA9IGRhdGFsZW47CisKKwlwcmludGYoIlN0b3Jpbmcga2V5OlxuIik7CisJcHJpbnRfcmVjKHRkYiwga2V5LCBkYnVmLCBOVUxMKTsKKworCWlmICh0ZGJfc3RvcmUodGRiLCBrZXksIGRidWYsIFREQl9SRVBMQUNFKSA9PSAtMSkgeworCQl0ZXJyb3IoInN0b3JlIGZhaWxlZCIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd190ZGIoY2hhciAqa2V5bmFtZSwgc2l6ZV90IGtleWxlbikKK3sKKwlUREJfREFUQSBrZXksIGRidWY7CisKKwlpZiAoKGtleW5hbWUgPT0gTlVMTCkgfHwgKGtleWxlbiA9PSAwKSkgeworCQl0ZXJyb3IoIm5lZWQga2V5Iik7CisJCXJldHVybjsKKwl9CisKKwlrZXkuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopa2V5bmFtZTsKKwlrZXkuZHNpemUgPSBrZXlsZW47CisKKwlkYnVmID0gdGRiX2ZldGNoKHRkYiwga2V5KTsKKwlpZiAoIWRidWYuZHB0cikgeworCSAgICB0ZXJyb3IoImZldGNoIGZhaWxlZCIpOworCSAgICByZXR1cm47CisJfQorCisJcHJpbnRfcmVjKHRkYiwga2V5LCBkYnVmLCBOVUxMKTsKKworCWZyZWUoIGRidWYuZHB0ciApOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfdGRiKGNoYXIgKmtleW5hbWUsIHNpemVfdCBrZXlsZW4pCit7CisJVERCX0RBVEEga2V5OworCisJaWYgKChrZXluYW1lID09IE5VTEwpIHx8IChrZXlsZW4gPT0gMCkpIHsKKwkJdGVycm9yKCJuZWVkIGtleSIpOworCQlyZXR1cm47CisJfQorCisJa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWtleW5hbWU7CisJa2V5LmRzaXplID0ga2V5bGVuOworCisJaWYgKHRkYl9kZWxldGUodGRiLCBrZXkpICE9IDApIHsKKwkJdGVycm9yKCJkZWxldGUgZmFpbGVkIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBtb3ZlX3JlYyhjaGFyICprZXluYW1lLCBzaXplX3Qga2V5bGVuLCBjaGFyKiB0ZGJuYW1lKQoreworCVREQl9EQVRBIGtleSwgZGJ1ZjsKKwlUREJfQ09OVEVYVCAqZHN0X3RkYjsKKworCWlmICgoa2V5bmFtZSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApKSB7CisJCXRlcnJvcigibmVlZCBrZXkiKTsKKwkJcmV0dXJuOworCX0KKworCWlmICggIXRkYm5hbWUgKSB7CisJCXRlcnJvcigibmVlZCBkZXN0aW5hdGlvbiB0ZGIgbmFtZSIpOworCQlyZXR1cm47CisJfQorCisJa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKWtleW5hbWU7CisJa2V5LmRzaXplID0ga2V5bGVuOworCisJZGJ1ZiA9IHRkYl9mZXRjaCh0ZGIsIGtleSk7CisJaWYgKCFkYnVmLmRwdHIpIHsKKwkJdGVycm9yKCJmZXRjaCBmYWlsZWQiKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50X3JlYyh0ZGIsIGtleSwgZGJ1ZiwgTlVMTCk7CisKKwlkc3RfdGRiID0gdGRiX29wZW4odGRibmFtZSwgMCwgMCwgT19SRFdSLCAwNjAwKTsKKwlpZiAoICFkc3RfdGRiICkgeworCQl0ZXJyb3IoInVuYWJsZSB0byBvcGVuIGRlc3RpbmF0aW9uIHRkYiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCB0ZGJfc3RvcmUoIGRzdF90ZGIsIGtleSwgZGJ1ZiwgVERCX1JFUExBQ0UgKSA9PSAtMSApIHsKKwkJdGVycm9yKCJmYWlsZWQgdG8gbW92ZSByZWNvcmQiKTsKKwl9CisJZWxzZQorCQlwcmludGYoInJlY29yZCBtb3ZlZFxuIik7CisKKwl0ZGJfY2xvc2UoIGRzdF90ZGIgKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBwcmludF9yZWMoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1Ziwgdm9pZCAqc3RhdGUpCit7CisJcHJpbnRmKCJcbmtleSAlZCBieXRlc1xuIiwgKGludClrZXkuZHNpemUpOworCXByaW50X2FzYygoY29uc3QgY2hhciAqKWtleS5kcHRyLCBrZXkuZHNpemUpOworCXByaW50ZigiXG5kYXRhICVkIGJ5dGVzXG4iLCAoaW50KWRidWYuZHNpemUpOworCXByaW50X2RhdGEoKGNvbnN0IGNoYXIgKilkYnVmLmRwdHIsIGRidWYuZHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaW50X2tleShUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEga2V5LCBUREJfREFUQSBkYnVmLCB2b2lkICpzdGF0ZSkKK3sKKwlwcmludGYoImtleSAlZCBieXRlczogIiwgKGludClrZXkuZHNpemUpOworCXByaW50X2FzYygoY29uc3QgY2hhciAqKWtleS5kcHRyLCBrZXkuZHNpemUpOworCXByaW50ZigiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmludF9oZXhrZXkoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1Ziwgdm9pZCAqc3RhdGUpCit7CisJcHJpbnRmKCJrZXkgJWQgYnl0ZXNcbiIsIChpbnQpa2V5LmRzaXplKTsKKwlwcmludF9kYXRhKChjb25zdCBjaGFyICopa2V5LmRwdHIsIGtleS5kc2l6ZSk7CisJcHJpbnRmKCJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRvdGFsX2J5dGVzOworCitzdGF0aWMgaW50IHRyYXZlcnNlX2ZuKFREQl9DT05URVhUICp0aGVfdGRiLCBUREJfREFUQSBrZXksIFREQl9EQVRBIGRidWYsIHZvaWQgKnN0YXRlKQoreworCXRvdGFsX2J5dGVzICs9IGRidWYuZHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluZm9fdGRiKHZvaWQpCit7CisJaW50IGNvdW50OworCXRvdGFsX2J5dGVzID0gMDsKKwlpZiAoKGNvdW50ID0gdGRiX3RyYXZlcnNlKHRkYiwgdHJhdmVyc2VfZm4sIE5VTEwpKSA9PSAtMSkKKwkJcHJpbnRmKCJFcnJvciA9ICVzXG4iLCB0ZGJfZXJyb3JzdHIodGRiKSk7CisJZWxzZQorCQlwcmludGYoIiVkIHJlY29yZHMgdG90YWxsaW5nICVkIGJ5dGVzXG4iLCBjb3VudCwgdG90YWxfYnl0ZXMpOworfQorCitzdGF0aWMgY2hhciAqdGRiX2dldGxpbmUoY29uc3QgY2hhciAqcHJvbXB0KQoreworCXN0YXRpYyBjaGFyIHRoaXNsaW5lWzEwMjRdOworCWNoYXIgKnA7CisJZnB1dHMocHJvbXB0LCBzdGRvdXQpOworCXRoaXNsaW5lWzBdID0gMDsKKwlwID0gZmdldHModGhpc2xpbmUsIHNpemVvZih0aGlzbGluZSktMSwgc3RkaW4pOworCWlmIChwKSBwID0gc3RyY2hyKHAsICdcbicpOworCWlmIChwKSAqcCA9IDA7CisJcmV0dXJuIHA/dGhpc2xpbmU6TlVMTDsKK30KKworc3RhdGljIGludCBkb19kZWxldGVfZm4oVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBIGtleSwgVERCX0RBVEEgZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YXRlKQoreworICAgIHJldHVybiB0ZGJfZGVsZXRlKHRoZV90ZGIsIGtleSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpcnN0X3JlY29yZChUREJfQ09OVEVYVCAqdGhlX3RkYiwgVERCX0RBVEEgKnBrZXkpCit7CisJVERCX0RBVEEgZGJ1ZjsKKwkqcGtleSA9IHRkYl9maXJzdGtleSh0aGVfdGRiKTsKKworCWRidWYgPSB0ZGJfZmV0Y2godGhlX3RkYiwgKnBrZXkpOworCWlmICghZGJ1Zi5kcHRyKSB0ZXJyb3IoImZldGNoIGZhaWxlZCIpOworCWVsc2UgeworCQlwcmludF9yZWModGhlX3RkYiwgKnBrZXksIGRidWYsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgbmV4dF9yZWNvcmQoVERCX0NPTlRFWFQgKnRoZV90ZGIsIFREQl9EQVRBICpwa2V5KQoreworCVREQl9EQVRBIGRidWY7CisJKnBrZXkgPSB0ZGJfbmV4dGtleSh0aGVfdGRiLCAqcGtleSk7CisKKwlkYnVmID0gdGRiX2ZldGNoKHRoZV90ZGIsICpwa2V5KTsKKwlpZiAoIWRidWYuZHB0cikKKwkJdGVycm9yKCJmZXRjaCBmYWlsZWQiKTsKKwllbHNlCisJCXByaW50X3JlYyh0aGVfdGRiLCAqcGtleSwgZGJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fY29tbWFuZCh2b2lkKQoreworCUNPTU1BTkRfVEFCTEUgKmN0cCA9IGNtZF90YWJsZTsKKwllbnVtIGNvbW1hbmRzIG15Y21kID0gQ01EX0hFTFA7CisJaW50IGNtZF9sZW47CisKKwlpZiAoY21kbmFtZSAmJiBzdHJsZW4oY21kbmFtZSkgPT0gMCkgeworCSAgICBteWNtZCA9IENNRF9ORVhUOworCX0gZWxzZSB7CisJICAgIHdoaWxlIChjdHAtPm5hbWUpIHsKKwkJY21kX2xlbiA9IHN0cmxlbihjdHAtPm5hbWUpOworCQlpZiAoc3RybmNtcChjdHAtPm5hbWUsY21kbmFtZSxjbWRfbGVuKSA9PSAwKSB7CisJCQlteWNtZCA9IGN0cC0+Y21kOworCQkJYnJlYWs7CisJCX0KKwkJY3RwKys7CisJICAgIH0KKwl9CisKKwlzd2l0Y2ggKG15Y21kKSB7CisJY2FzZSBDTURfQ1JFQVRFX1REQjoKKyAgICAgICAgICAgIGJJdGVyYXRlID0gMDsKKyAgICAgICAgICAgIGNyZWF0ZV90ZGIoYXJnMSk7CisJICAgIHJldHVybiAwOworCWNhc2UgQ01EX09QRU5fVERCOgorICAgICAgICAgICAgYkl0ZXJhdGUgPSAwOworICAgICAgICAgICAgb3Blbl90ZGIoYXJnMSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKwljYXNlIENNRF9TWVNURU06CisJICAgIC8qIFNoZWxsIGNvbW1hbmQgKi8KKwkgICAgc3lzdGVtKGFyZzEpOworCSAgICByZXR1cm4gMDsKKwljYXNlIENNRF9RVUlUOgorCSAgICByZXR1cm4gMTsKKwlkZWZhdWx0OgorCSAgICAvKiBhbGwgdGhlIHJlc3QgcmVxdWlyZSBhIG9wZW4gZGF0YWJhc2UgKi8KKwkgICAgaWYgKCF0ZGIpIHsKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZXJyb3IoImRhdGFiYXNlIG5vdCBvcGVuIik7CisJCWhlbHAoKTsKKwkJcmV0dXJuIDA7CisJICAgIH0KKwkgICAgc3dpdGNoIChteWNtZCkgeworCSAgICBjYXNlIENNRF9FUkFTRToKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZGJfdHJhdmVyc2UodGRiLCBkb19kZWxldGVfZm4sIE5VTEwpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfRFVNUDoKKwkJYkl0ZXJhdGUgPSAwOworCQl0ZGJfdHJhdmVyc2UodGRiLCBwcmludF9yZWMsIE5VTEwpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfSU5TRVJUOgorCQliSXRlcmF0ZSA9IDA7CisJCWluc2VydF90ZGIoYXJnMSwgYXJnMWxlbixhcmcyLGFyZzJsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTU9WRToKKwkJYkl0ZXJhdGUgPSAwOworCQltb3ZlX3JlYyhhcmcxLGFyZzFsZW4sYXJnMik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9TVE9SRToKKwkJYkl0ZXJhdGUgPSAwOworCQlzdG9yZV90ZGIoYXJnMSxhcmcxbGVuLGFyZzIsYXJnMmxlbik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9TSE9XOgorCQliSXRlcmF0ZSA9IDA7CisJCXNob3dfdGRiKGFyZzEsIGFyZzFsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfS0VZUzoKKwkJdGRiX3RyYXZlcnNlKHRkYiwgcHJpbnRfa2V5LCBOVUxMKTsKKwkJcmV0dXJuIDA7CisJICAgIGNhc2UgQ01EX0hFWEtFWVM6CisJCXRkYl90cmF2ZXJzZSh0ZGIsIHByaW50X2hleGtleSwgTlVMTCk7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9ERUxFVEU6CisJCWJJdGVyYXRlID0gMDsKKwkJZGVsZXRlX3RkYihhcmcxLGFyZzFsZW4pOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTElTVF9IQVNIX0ZSRUU6CisJCXRkYl9kdW1wX2FsbCh0ZGIpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTElTVF9GUkVFOgorCQl0ZGJfcHJpbnRmcmVlbGlzdCh0ZGIpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfSU5GTzoKKwkJaW5mb190ZGIoKTsKKwkJcmV0dXJuIDA7CisJICAgIGNhc2UgQ01EX0ZJUlNUOgorCQliSXRlcmF0ZSA9IDE7CisJCWZpcnN0X3JlY29yZCh0ZGIsICZpdGVyYXRlX2tidWYpOworCQlyZXR1cm4gMDsKKwkgICAgY2FzZSBDTURfTkVYVDoKKwkgICAgICAgaWYgKGJJdGVyYXRlKQorCQkgIG5leHRfcmVjb3JkKHRkYiwgJml0ZXJhdGVfa2J1Zik7CisJCXJldHVybiAwOworCSAgICBjYXNlIENNRF9IRUxQOgorCQloZWxwKCk7CisJCXJldHVybiAwOworICAgICAgICAgICAgY2FzZSBDTURfQ1JFQVRFX1REQjoKKyAgICAgICAgICAgIGNhc2UgQ01EX09QRU5fVERCOgorICAgICAgICAgICAgY2FzZSBDTURfU1lTVEVNOgorICAgICAgICAgICAgY2FzZSBDTURfUVVJVDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHVuaGFuZGxlZCBjb21tYW5kcy4gIGNhc2VzIGluY2x1ZGVkIGhlcmUgdG8gYXZvaWQgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgKiB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkgICAgfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqY29udmVydF9zdHJpbmcoY2hhciAqaW5zdHJpbmcsIHNpemVfdCAqc2l6ZXApCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgY2hhciAqb3V0cCwgKmlucDsKKyAgICBjaGFyIHRlbXBbM107CisKKworICAgIG91dHAgPSBpbnAgPSBpbnN0cmluZzsKKworICAgIHdoaWxlICgqaW5wKSB7CisJaWYgKCppbnAgPT0gJ1xcJykgeworCSAgICBpbnArKzsKKwkgICAgaWYgKCppbnAgJiYgc3RyY2hyKCIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIiwoaW50KSppbnApKSB7CisJCXRlbXBbMF0gPSAqaW5wKys7CisJCXRlbXBbMV0gPSAnXDAnOworCQlpZiAoKmlucCAmJiBzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLChpbnQpKmlucCkpIHsKKwkJICAgIHRlbXBbMV0gPSAqaW5wKys7CisJCSAgICB0ZW1wWzJdID0gJ1wwJzsKKwkJfQorCQkqb3V0cCsrID0gKGNoYXIpc3RydG9sKChjb25zdCBjaGFyICopdGVtcCxOVUxMLDE2KTsKKwkgICAgfSBlbHNlIHsKKwkJKm91dHArKyA9ICppbnArKzsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgICpvdXRwKysgPSAqaW5wKys7CisJfQorCWxlbmd0aCsrOworICAgIH0KKyAgICAqc2l6ZXAgPSBsZW5ndGg7CisgICAgcmV0dXJuIGluc3RyaW5nOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNtZG5hbWUgPSAiIjsKKyAgICBhcmcxID0gTlVMTDsKKyAgICBhcmcxbGVuID0gMDsKKyAgICBhcmcyID0gTlVMTDsKKyAgICBhcmcybGVuID0gMDsKKworICAgIGlmIChhcmd2WzFdKSB7CisJY21kbmFtZSA9ICJvcGVuIjsKKwlhcmcxID0gYXJndlsxXTsKKyAgICAgICAgZG9fY29tbWFuZCgpOworCWNtZG5hbWUgPSAgIiI7CisJYXJnMSA9IE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoIChhcmdjKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkgICAgLyogSW50ZXJhY3RpdmUgbW9kZSAqLworCSAgICB3aGlsZSAoKGNtZG5hbWUgPSB0ZGJfZ2V0bGluZSgidGRiPiAiKSkpIHsKKwkJYXJnMiA9IGFyZzEgPSBOVUxMOworCQlpZiAoKGFyZzEgPSBzdHJjaHIoKGNvbnN0IGNoYXIgKiljbWRuYW1lLCcgJykpICE9IE5VTEwpIHsKKwkJICAgIGFyZzErKzsKKwkJICAgIGFyZzIgPSBhcmcxOworCQkgICAgd2hpbGUgKCphcmcyKSB7CisJCQlpZiAoKmFyZzIgPT0gJyAnKSB7CisJCQkgICAgKmFyZzIrKyA9ICdcMCc7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlpZiAoKCphcmcyKysgPT0gJ1xcJykgJiYgKCphcmcyID09ICcgJykpIHsKKwkJCSAgICBhcmcyKys7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKGFyZzEpIGFyZzEgPSBjb252ZXJ0X3N0cmluZyhhcmcxLCZhcmcxbGVuKTsKKwkJaWYgKGFyZzIpIGFyZzIgPSBjb252ZXJ0X3N0cmluZyhhcmcyLCZhcmcybGVuKTsKKwkJaWYgKGRvX2NvbW1hbmQoKSkgYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSA1OgorCSAgICBhcmcyID0gY29udmVydF9zdHJpbmcoYXJndls0XSwmYXJnMmxlbik7CisJY2FzZSA0OgorCSAgICBhcmcxID0gY29udmVydF9zdHJpbmcoYXJndlszXSwmYXJnMWxlbik7CisJY2FzZSAzOgorCSAgICBjbWRuYW1lID0gYXJndlsyXTsKKwlkZWZhdWx0OgorCSAgICBkb19jb21tYW5kKCk7CisJICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICh0ZGIpIHRkYl9jbG9zZSh0ZGIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZXN0X2lvLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90ZXN0X2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5YzZkNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3Rlc3RfaW8uYwpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIHRlc3RfaW8uYyAtLS0gVGhpcyBpcyB0aGUgVGVzdCBJL08gaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmIEhBVkVfU0VDVVJFX0dFVEVOVgorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisjaWYgSEFWRV9TRUNVUkVfR0VURU5WCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QUkNUTF9ICisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZWxzZQorI2RlZmluZSBQUl9HRVRfRFVNUEFCTEUgMworI2VuZGlmCisjaWYgKCFkZWZpbmVkKEhBVkVfUFJDVEwpICYmIGRlZmluZWQobGludXgpKQorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIEZvciBjaGVja2luZyBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycy4uLgorICovCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKK3N0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSB7CisJaW50CW1hZ2ljOworCWlvX2NoYW5uZWwgcmVhbDsKKwlpbnQgZmxhZ3M7CisJRklMRSAqb3V0ZmlsZTsKKwl1bnNpZ25lZCBsb25nIGJsb2NrOworCWludCByZWFkX2Fib3J0X2NvdW50LCB3cml0ZV9hYm9ydF9jb3VudDsKKwl2b2lkICgqcmVhZF9ibGspKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycik7CisJdm9pZCAoKndyaXRlX2JsaykodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKTsKKwl2b2lkICgqc2V0X2Jsa3NpemUpKGludCBibGtzaXplLCBlcnJjb2RlX3QgZXJyKTsKKwl2b2lkICgqd3JpdGVfYnl0ZSkodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKTsKKwl2b2lkICgqcmVhZF9ibGs2NCkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworCXZvaWQgKCp3cml0ZV9ibGs2NCkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpOworfTsKKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9jbG9zZShpb19jaGFubmVsIGNoYW5uZWwpOworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3NldF9ibGtzaXplKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW50IGJsa3NpemUpOworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3dyaXRlX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9yZWFkX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IHRlc3Rfd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpOworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpOworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3NldF9vcHRpb24oaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRpb24sCisJCQkJIGNvbnN0IGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHRlc3RfZ2V0X3N0YXRzKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW9fc3RhdHMgKnN0YXRzKTsKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGNvdW50KTsKKworc3RhdGljIHN0cnVjdCBzdHJ1Y3RfaW9fbWFuYWdlciBzdHJ1Y3RfdGVzdF9tYW5hZ2VyID0geworCUVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkiVGVzdCBJL08gTWFuYWdlciIsCisJdGVzdF9vcGVuLAorCXRlc3RfY2xvc2UsCisJdGVzdF9zZXRfYmxrc2l6ZSwKKwl0ZXN0X3JlYWRfYmxrLAorCXRlc3Rfd3JpdGVfYmxrLAorCXRlc3RfZmx1c2gsCisJdGVzdF93cml0ZV9ieXRlLAorCXRlc3Rfc2V0X29wdGlvbiwKKwl0ZXN0X2dldF9zdGF0cywKKwl0ZXN0X3JlYWRfYmxrNjQsCisJdGVzdF93cml0ZV9ibGs2NCwKKwl0ZXN0X2Rpc2NhcmQsCit9OworCitpb19tYW5hZ2VyIHRlc3RfaW9fbWFuYWdlciA9ICZzdHJ1Y3RfdGVzdF9tYW5hZ2VyOworCisvKgorICogVGhlc2UgZ2xvYmFsIHZhcmlhYmxlIGNhbiBiZSBzZXQgYnkgdGhlIHRlc3QgcHJvZ3JhbSBhcworICogbmVjZXNzYXJ5ICpiZWZvcmUqIGNhbGxpbmcgdGVzdF9vcGVuCisgKi8KK2lvX21hbmFnZXIgdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSAwOwordm9pZCAoKnRlc3RfaW9fY2JfcmVhZF9ibGspCisJKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycikgPSAwOwordm9pZCAoKnRlc3RfaW9fY2Jfd3JpdGVfYmxrKQorCSh1bnNpZ25lZCBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpID0gMDsKK3ZvaWQgKCp0ZXN0X2lvX2NiX3JlYWRfYmxrNjQpCisJKHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKSA9IDA7Cit2b2lkICgqdGVzdF9pb19jYl93cml0ZV9ibGs2NCkKKwkodW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLCBpbnQgY291bnQsIGVycmNvZGVfdCBlcnIpID0gMDsKK3ZvaWQgKCp0ZXN0X2lvX2NiX3NldF9ibGtzaXplKQorCShpbnQgYmxrc2l6ZSwgZXJyY29kZV90IGVycikgPSAwOwordm9pZCAoKnRlc3RfaW9fY2Jfd3JpdGVfYnl0ZSkKKwkodW5zaWduZWQgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKSA9IDA7CisKKy8qCisgKiBUZXN0IGZsYWdzCisgKi8KKyNkZWZpbmUgVEVTVF9GTEFHX1JFQUQJCQkweDAxCisjZGVmaW5lIFRFU1RfRkxBR19XUklURQkJCTB4MDIKKyNkZWZpbmUgVEVTVF9GTEFHX1NFVF9CTEtTSVpFCQkweDA0CisjZGVmaW5lIFRFU1RfRkxBR19GTFVTSAkJCTB4MDgKKyNkZWZpbmUgVEVTVF9GTEFHX0RVTVAJCQkweDEwCisjZGVmaW5lIFRFU1RfRkxBR19TRVRfT1BUSU9OCQkweDIwCisjZGVmaW5lIFRFU1RfRkxBR19ESVNDQVJECQkweDQwCisKK3N0YXRpYyB2b2lkIHRlc3RfZHVtcF9ibG9jayhpb19jaGFubmVsIGNoYW5uZWwsCisJCQkgICAgc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYmxvY2ssIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjcDsKKwlGSUxFICpmID0gZGF0YS0+b3V0ZmlsZTsKKwlpbnQJaTsKKwl1bnNpZ25lZCBsb25nCWNrc3VtID0gMDsKKworCWZvciAoaT0wLCBjcCA9IGJ1ZjsgaSA8IGNoYW5uZWwtPmJsb2NrX3NpemU7IGkrKywgY3ArKykgeworCQlja3N1bSArPSAqY3A7CisJfQorCWZwcmludGYoZiwgIkNvbnRlbnRzIG9mIGJsb2NrICVsdSwgY2hlY2tzdW0gJTA4bHU6IFxuIiwgYmxvY2ssIGNrc3VtKTsKKwlmb3IgKGk9MCwgY3AgPSBidWY7IGkgPCBjaGFubmVsLT5ibG9ja19zaXplOyBpKyssIGNwKyspIHsKKwkJaWYgKChpICUgMTYpID09IDApCisJCQlmcHJpbnRmKGYsICIlMDR4OiAiLCBpKTsKKwkJZnByaW50ZihmLCAiJTAyeCVjIiwgKmNwLCAoKGkgJSAxNikgPT0gMTUpID8gJ1xuJyA6ICcgJyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Fib3J0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaykKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJRklMRSAqZjsKKworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlmID0gZGF0YS0+b3V0ZmlsZTsKKwl0ZXN0X2ZsdXNoKGNoYW5uZWwpOworCisJZnByaW50ZihmLCAiQWJvcnRpbmcgZHVlIHRvIEkvTyB0byBibG9jayAlbHVcbiIsIGJsb2NrKTsKKwlmZmx1c2goZik7CisJYWJvcnQoKTsKK30KKworc3RhdGljIGNoYXIgKnNhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSkpCisJCXJldHVybiBOVUxMOworI2lmIEhBVkVfUFJDVEwKKwlpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbHNlCisjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoU1lTX3ByY3RsKSkKKwlpZiAoc3lzY2FsbChTWVNfcHJjdGwsIFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIHNlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIF9fc2VjdXJlX2dldGVudihhcmcpOworI2Vsc2UKKwlyZXR1cm4gZ2V0ZW52KGFyZyk7CisjZW5kaWYKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKQoreworCWlvX2NoYW5uZWwJaW8gPSBOVUxMOworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YSA9IE5VTEw7CisJZXJyY29kZV90CXJldHZhbDsKKwljaGFyCQkqdmFsdWU7CisKKwlpZiAobmFtZSA9PSAwKQorCQlyZXR1cm4gRVhUMl9FVF9CQURfREVWSUNFX05BTUU7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCksICZpbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfaW9fY2hhbm5lbCkpOworCWlvLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTDsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhKSwgJmRhdGEpOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwlpby0+bWFuYWdlciA9IHRlc3RfaW9fbWFuYWdlcjsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4obmFtZSkrMSwgJmlvLT5uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlzdHJjcHkoaW8tPm5hbWUsIG5hbWUpOworCWlvLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCWlvLT5ibG9ja19zaXplID0gMTAyNDsKKwlpby0+cmVhZF9lcnJvciA9IDA7CisJaW8tPndyaXRlX2Vycm9yID0gMDsKKwlpby0+cmVmY291bnQgPSAxOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEpKTsKKwlkYXRhLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMOworCWlmICh0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlcikgeworCQlyZXR2YWwgPSB0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlci0+b3BlbihuYW1lLCBmbGFncywKKwkJCQkJCSAgICAgICAmZGF0YS0+cmVhbCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfSBlbHNlCisJCWRhdGEtPnJlYWwgPSAwOworCWRhdGEtPnJlYWRfYmxrID0gCXRlc3RfaW9fY2JfcmVhZF9ibGs7CisJZGF0YS0+d3JpdGVfYmxrID0gCXRlc3RfaW9fY2Jfd3JpdGVfYmxrOworCWRhdGEtPnNldF9ibGtzaXplID0gCXRlc3RfaW9fY2Jfc2V0X2Jsa3NpemU7CisJZGF0YS0+d3JpdGVfYnl0ZSA9IAl0ZXN0X2lvX2NiX3dyaXRlX2J5dGU7CisJZGF0YS0+cmVhZF9ibGs2NCA9IAl0ZXN0X2lvX2NiX3JlYWRfYmxrNjQ7CisJZGF0YS0+d3JpdGVfYmxrNjQgPSAJdGVzdF9pb19jYl93cml0ZV9ibGs2NDsKKworCWRhdGEtPm91dGZpbGUgPSBOVUxMOworCWlmICgodmFsdWUgPSBzYWZlX2dldGVudigiVEVTVF9JT19MT0dGSUxFIikpICE9IE5VTEwpCisJCWRhdGEtPm91dGZpbGUgPSBmb3Blbih2YWx1ZSwgInciKTsKKwlpZiAoIWRhdGEtPm91dGZpbGUpCisJCWRhdGEtPm91dGZpbGUgPSBzdGRlcnI7CisKKwlkYXRhLT5mbGFncyA9IDA7CisJaWYgKCh2YWx1ZSA9IHNhZmVfZ2V0ZW52KCJURVNUX0lPX0ZMQUdTIikpICE9IE5VTEwpCisJCWRhdGEtPmZsYWdzID0gc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CisKKwlkYXRhLT5ibG9jayA9IDA7CisJaWYgKCh2YWx1ZSA9IHNhZmVfZ2V0ZW52KCJURVNUX0lPX0JMT0NLIikpICE9IE5VTEwpCisJCWRhdGEtPmJsb2NrID0gc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CisKKwlkYXRhLT5yZWFkX2Fib3J0X2NvdW50ID0gMDsKKwlpZiAoKHZhbHVlID0gc2FmZV9nZXRlbnYoIlRFU1RfSU9fUkVBRF9BQk9SVCIpKSAhPSBOVUxMKQorCQlkYXRhLT5yZWFkX2Fib3J0X2NvdW50ID0gc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CisKKwlkYXRhLT53cml0ZV9hYm9ydF9jb3VudCA9IDA7CisJaWYgKCh2YWx1ZSA9IHNhZmVfZ2V0ZW52KCJURVNUX0lPX1dSSVRFX0FCT1JUIikpICE9IE5VTEwpCisJCWRhdGEtPndyaXRlX2Fib3J0X2NvdW50ID0gc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJaW8tPmFsaWduID0gZGF0YS0+cmVhbC0+YWxpZ247CisKKwkqY2hhbm5lbCA9IGlvOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChpbykKKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbyk7CisJaWYgKGRhdGEpCisJCWV4dDJmc19mcmVlX21lbSgmZGF0YSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X2Nsb3NlKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKC0tY2hhbm5lbC0+cmVmY291bnQgPiAwKQorCQlyZXR1cm4gMDsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX2Nsb3NlKGRhdGEtPnJlYWwpOworCisJaWYgKGRhdGEtPm91dGZpbGUgJiYgZGF0YS0+b3V0ZmlsZSAhPSBzdGRlcnIpCisJCWZjbG9zZShkYXRhLT5vdXRmaWxlKTsKKworCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbC0+cHJpdmF0ZV9kYXRhKTsKKwlpZiAoY2hhbm5lbC0+bmFtZSkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsLT5uYW1lKTsKKwlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkgeworCQlyZXR2YWwgPSBpb19jaGFubmVsX3NldF9ibGtzaXplKGRhdGEtPnJlYWwsIGJsa3NpemUpOworCQljaGFubmVsLT5hbGlnbiA9IGRhdGEtPnJlYWwtPmFsaWduOworCX0KKwlpZiAoZGF0YS0+c2V0X2Jsa3NpemUpCisJCWRhdGEtPnNldF9ibGtzaXplKGJsa3NpemUsIHJldHZhbCk7CisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1NFVF9CTEtTSVpFKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsCisJCQkiVGVzdF9pbzogc2V0X2Jsa3NpemUoJWQpIHJldHVybmVkICVzXG4iLAorCQkJYmxrc2l6ZSwgcmV0dmFsID8gZXJyb3JfbWVzc2FnZShyZXR2YWwpIDogIk9LIik7CisJY2hhbm5lbC0+YmxvY2tfc2l6ZSA9IGJsa3NpemU7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgZXJyY29kZV90IHRlc3RfcmVhZF9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmKQoreworCXN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB0ZXN0X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1RFU1RfSU9fQ0hBTk5FTCk7CisKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsayhkYXRhLT5yZWFsLCBibG9jaywgY291bnQsIGJ1Zik7CisJaWYgKGRhdGEtPnJlYWRfYmxrKQorCQlkYXRhLT5yZWFkX2JsayhibG9jaywgY291bnQsIHJldHZhbCk7CisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1JFQUQpCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwKKwkJCSJUZXN0X2lvOiByZWFkX2JsayglbHUsICVkKSByZXR1cm5lZCAlc1xuIiwKKwkJCWJsb2NrLCBjb3VudCwgcmV0dmFsID8gZXJyb3JfbWVzc2FnZShyZXR2YWwpIDogIk9LIik7CisJaWYgKGRhdGEtPmJsb2NrICYmIGRhdGEtPmJsb2NrID09IGJsb2NrKSB7CisJCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19EVU1QKQorCQkJdGVzdF9kdW1wX2Jsb2NrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBidWYpOworCQlpZiAoLS1kYXRhLT5yZWFkX2Fib3J0X2NvdW50ID09IDApCisJCQl0ZXN0X2Fib3J0KGNoYW5uZWwsIGJsb2NrKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X3dyaXRlX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsayhkYXRhLT5yZWFsLCBibG9jaywgY291bnQsIGJ1Zik7CisJaWYgKGRhdGEtPndyaXRlX2JsaykKKwkJZGF0YS0+d3JpdGVfYmxrKGJsb2NrLCBjb3VudCwgcmV0dmFsKTsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfV1JJVEUpCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwKKwkJCSJUZXN0X2lvOiB3cml0ZV9ibGsoJWx1LCAlZCkgcmV0dXJuZWQgJXNcbiIsCisJCQlibG9jaywgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCWlmIChkYXRhLT5ibG9jayAmJiBkYXRhLT5ibG9jayA9PSBibG9jaykgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRFVNUCkKKwkJCXRlc3RfZHVtcF9ibG9jayhjaGFubmVsLCBkYXRhLCBibG9jaywgYnVmKTsKKwkJaWYgKC0tZGF0YS0+d3JpdGVfYWJvcnRfY291bnQgPT0gMCkKKwkJCXRlc3RfYWJvcnQoY2hhbm5lbCwgYmxvY2spOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHRlc3RfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChkYXRhLT5yZWFsLCBibG9jaywgY291bnQsIGJ1Zik7CisJaWYgKGRhdGEtPnJlYWRfYmxrNjQpCisJCWRhdGEtPnJlYWRfYmxrNjQoYmxvY2ssIGNvdW50LCByZXR2YWwpOworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19SRUFEKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsCisJCQkiVGVzdF9pbzogcmVhZF9ibGs2NCglbGx1LCAlZCkgcmV0dXJuZWQgJXNcbiIsCisJCQlibG9jaywgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCWlmIChkYXRhLT5ibG9jayAmJiBkYXRhLT5ibG9jayA9PSBibG9jaykgeworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRFVNUCkKKwkJCXRlc3RfZHVtcF9ibG9jayhjaGFubmVsLCBkYXRhLCBibG9jaywgYnVmKTsKKwkJaWYgKC0tZGF0YS0+cmVhZF9hYm9ydF9jb3VudCA9PSAwKQorCQkJdGVzdF9hYm9ydChjaGFubmVsLCBibG9jayk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF93cml0ZV9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50LCBidWYpOworCWlmIChkYXRhLT53cml0ZV9ibGs2NCkKKwkJZGF0YS0+d3JpdGVfYmxrNjQoYmxvY2ssIGNvdW50LCByZXR2YWwpOworCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19XUklURSkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLAorCQkJIlRlc3RfaW86IHdyaXRlX2JsazY0KCVsbHUsICVkKSByZXR1cm5lZCAlc1xuIiwKKwkJCWJsb2NrLCBjb3VudCwgcmV0dmFsID8gZXJyb3JfbWVzc2FnZShyZXR2YWwpIDogIk9LIik7CisJaWYgKGRhdGEtPmJsb2NrICYmIGRhdGEtPmJsb2NrID09IGJsb2NrKSB7CisJCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19EVU1QKQorCQkJdGVzdF9kdW1wX2Jsb2NrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBidWYpOworCQlpZiAoLS1kYXRhLT53cml0ZV9hYm9ydF9jb3VudCA9PSAwKQorCQkJdGVzdF9hYm9ydChjaGFubmVsLCBibG9jayk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgICAgaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsICYmIGRhdGEtPnJlYWwtPm1hbmFnZXItPndyaXRlX2J5dGUpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYnl0ZShkYXRhLT5yZWFsLCBvZmZzZXQsIGNvdW50LCBidWYpOworCWlmIChkYXRhLT53cml0ZV9ieXRlKQorCQlkYXRhLT53cml0ZV9ieXRlKG9mZnNldCwgY291bnQsIHJldHZhbCk7CisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1dSSVRFKQorCQlmcHJpbnRmKGRhdGEtPm91dGZpbGUsCisJCQkiVGVzdF9pbzogd3JpdGVfYnl0ZSglbHUsICVkKSByZXR1cm5lZCAlc1xuIiwKKwkJCW9mZnNldCwgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGbHVzaCBkYXRhIGJ1ZmZlcnMgdG8gZGlzay4KKyAqLworc3RhdGljIGVycmNvZGVfdCB0ZXN0X2ZsdXNoKGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfZmx1c2goZGF0YS0+cmVhbCk7CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRkxVU0gpCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwgIlRlc3RfaW86IGZsdXNoKCkgcmV0dXJuZWQgJXNcbiIsCisJCQlyZXR2YWwgPyBlcnJvcl9tZXNzYWdlKHJldHZhbCkgOiAiT0siKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdGVzdF9zZXRfb3B0aW9uKGlvX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqb3B0aW9uLAorCQkJCSBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCisJaWYgKGRhdGEtPmZsYWdzICYgVEVTVF9GTEFHX1NFVF9PUFRJT04pCisJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwgIlRlc3RfaW86IHNldF9vcHRpb24oJXMsICVzKSAiLAorCQkJb3B0aW9uLCBhcmcpOworCWlmIChkYXRhLT5yZWFsICYmIGRhdGEtPnJlYWwtPm1hbmFnZXItPnNldF9vcHRpb24pIHsKKwkJcmV0dmFsID0gKGRhdGEtPnJlYWwtPm1hbmFnZXItPnNldF9vcHRpb24pKGRhdGEtPnJlYWwsCisJCQkJCQkJICAgb3B0aW9uLCBhcmcpOworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfU0VUX09QVElPTikKKwkJCWZwcmludGYoZGF0YS0+b3V0ZmlsZSwgInJldHVybmVkICVzXG4iLAorCQkJCXJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCX0gZWxzZSB7CisJCWlmIChkYXRhLT5mbGFncyAmIFRFU1RfRkxBR19TRVRfT1BUSU9OKQorCQkJZnByaW50ZihkYXRhLT5vdXRmaWxlLCAibm90IGltcGxlbWVudGVkXG4iKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X2dldF9zdGF0cyhpb19jaGFubmVsIGNoYW5uZWwsIGlvX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdGVzdF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19URVNUX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwgJiYgZGF0YS0+cmVhbC0+bWFuYWdlci0+Z2V0X3N0YXRzKSB7CisJCXJldHZhbCA9IChkYXRhLT5yZWFsLT5tYW5hZ2VyLT5nZXRfc3RhdHMpKGRhdGEtPnJlYWwsIHN0YXRzKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB0ZXN0X2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpCit7CisJc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHRlc3RfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVEVTVF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX2Rpc2NhcmQoZGF0YS0+cmVhbCwgYmxvY2ssIGNvdW50KTsKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBURVNUX0ZMQUdfRElTQ0FSRCkKKwkJZnByaW50ZihkYXRhLT5vdXRmaWxlLAorCQkJIlRlc3RfaW86IGRpc2NhcmQoJWxsdSwgJWxsdSkgcmV0dXJuZWQgJXNcbiIsCisJCQlibG9jaywgY291bnQsIHJldHZhbCA/IGVycm9yX21lc3NhZ2UocmV0dmFsKSA6ICJPSyIpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYmFkYmxvY2tzLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYmFkYmxvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3Yjk1YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iYWRibG9ja3MuYwpAQCAtMCwwICsxLDM1OSBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgdGhlIGJhZGJsb2NrcyBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjZGVmaW5lIEFERF9CTEsJMHgwMDAxCisjZGVmaW5lIERFTF9CTEsJMHgwMDAyCisKK2Jsa190IHRlc3QxW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAwIH07CitibGtfdCB0ZXN0MltdID0geyAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDMsIDIsIDEgfTsKK2Jsa190IHRlc3QzW10gPSB7IDMsIDEsIDQsIDUsIDksIDIsIDcsIDEwLCA1LCA2LCAxMCwgOCwgMCB9OworYmxrX3QgdGVzdDRbXSA9IHsgMjAsIDUwLCAxMiwgMTcsIDEzLCAyLCA2NiwgMjMsIDU2LCAwIH07CitibGtfdCB0ZXN0NGFbXSA9IHsKKyAJMjAsIDEsCisJNTAsIDEsCisJMywgMCwKKwkxNywgMSwKKwkxOCwgMCwKKwkxNiwgMCwKKwkxMSwgMCwKKwkxMiwgMSwKKwkxMywgMSwKKwkxNCwgMCwKKwk4MCwgMCwKKwk0NSwgMCwKKwk2NiwgMSwKKwkwIH07CitibGtfdCB0ZXN0NVtdID0geyAzMSwgMjAsIDE3LCA1MSwgMjMsIDEsIDU2LCA1NywgMCB9OworYmxrX3QgdGVzdDVhW10gPSB7CisJNTAsIEFERF9CTEssCisJNTEsIERFTF9CTEssCisJNTcsIERFTF9CTEssCisJNjYsIEFERF9CTEssCisJMzEsIERFTF9CTEssCisJMTIsIEFERF9CTEssCisJMiwgQUREX0JMSywKKwkxMywgQUREX0JMSywKKwkxLCBERUxfQkxLLAorCTAKKwl9OworCisKK3N0YXRpYyBpbnQgdGVzdF9mYWlsID0gMDsKK3N0YXRpYyBpbnQgdGVzdF9leHBlY3RlZF9mYWlsID0gMDsKKworc3RhdGljIGVycmNvZGVfdCBjcmVhdGVfdGVzdF9saXN0KGJsa190ICp2ZWMsIGJhZGJsb2Nrc19saXN0ICpyZXQpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwliYWRibG9ja3NfbGlzdAliYjsKKwlpbnQJCWk7CisKKwlyZXR2YWwgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKCZiYiwgNSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJjcmVhdGVfdGVzdF9saXN0IiwgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgbGlzdCIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlmb3IgKGk9MDsgdmVjW2ldOyBpKyspIHsKKwkJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChiYiwgdmVjW2ldKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiY3JlYXRlX3Rlc3RfbGlzdCIsIHJldHZhbCwKKwkJCQkid2hpbGUgYWRkaW5nIHRlc3QgdmVjdG9yICVkIiwgaSk7CisJCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCSpyZXQgPSBiYjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbGlzdChiYWRibG9ja3NfbGlzdCBiYiwgaW50IHZlcmlmeSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJhZGJsb2Nrc19pdGVyYXRlCWl0ZXI7CisJYmxrX3QJCQlibGs7CisJaW50CQkJaSwgb2s7CisKKwlyZXR2YWwgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYiwgJml0ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigicHJpbnRfbGlzdCIsIHJldHZhbCwgIndoaWxlIHNldHRpbmcgdXAgaXRlcmF0b3IiKTsKKwkJcmV0dXJuOworCX0KKwlvayA9IGkgPSAxOworCXdoaWxlIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZShpdGVyLCAmYmxrKSkgeworCQlwcmludGYoIiV1ICIsIGJsayk7CisJCWlmIChpKysgIT0gYmxrKQorCQkJb2sgPSAwOworCX0KKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoaXRlcik7CisJaWYgKHZlcmlmeSkgeworCQlpZiAob2spCisJCQlwcmludGYoIi0tLSBPSyIpOworCQllbHNlIHsKKwkJCXByaW50ZigiLS0tIE5PVCBPSyIpOworCQkJdGVzdF9mYWlsKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3Rlc3Rfc2VxKGJhZGJsb2Nrc19saXN0IGJiLCBibGtfdCAqdmVjKQoreworCWludAlpLCBtYXRjaCwgb2s7CisKKwlmb3IgKGkgPSAwOyB2ZWNbaV07IGkgKz0gMikgeworCQltYXRjaCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiLCB2ZWNbaV0pOworCQlpZiAobWF0Y2ggPT0gdmVjW2krMV0pCisJCQlvayA9IDE7CisJCWVsc2UgeworCQkJb2sgPSAwOworCQkJdGVzdF9mYWlsKys7CisJCX0KKwkJcHJpbnRmKCJcdGJsb2NrICV1IGlzICVzIC0tLSAlc1xuIiwgdmVjW2ldLAorCQkgICAgICAgbWF0Y2ggPyAicHJlc2VudCIgOiAiYWJzZW50IiwKKwkJICAgICAgIG9rID8gIk9LIiA6ICJOT1QgT0siKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRvX3Rlc3Rfc2VxKGJhZGJsb2Nrc19saXN0IGJiLCBibGtfdCAqdmVjKQoreworCWludAlpLCBtYXRjaDsKKworCWZvciAoaSA9IDA7IHZlY1tpXTsgaSArPSAyKSB7CisJCXN3aXRjaCAodmVjW2krMV0pIHsKKwkJY2FzZSBBRERfQkxLOgorCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChiYiwgdmVjW2ldKTsKKwkJCW1hdGNoID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmIsIHZlY1tpXSk7CisJCQlwcmludGYoIkFkZGluZyBibG9jayAldSAtLS0gbm93ICVzXG4iLCB2ZWNbaV0sCisJCQkgICAgICAgbWF0Y2ggPyAicHJlc2VudCIgOiAiYWJzZW50Iik7CisJCQlpZiAoIW1hdGNoKSB7CisJCQkJcHJpbnRmKCJGQUlMVVJFIVxuIik7CisJCQkJdGVzdF9mYWlsKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBERUxfQkxLOgorCQkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2RlbChiYiwgdmVjW2ldKTsKKwkJCW1hdGNoID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmIsIHZlY1tpXSk7CisJCQlwcmludGYoIlJlbW92aW5nIGJsb2NrICV1IC0tLSBub3cgJXNcbiIsIHZlY1tpXSwKKwkJCSAgICAgICBleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYiwgdmVjW2ldKSA/CisJCQkgICAgICAgInByZXNlbnQiIDogImFic2VudCIpOworCQkJaWYgKG1hdGNoKSB7CisJCQkJcHJpbnRmKCJGQUlMVVJFIVxuIik7CisJCQkJdGVzdF9mYWlsKys7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCitpbnQgZmlsZV90ZXN0KGJhZGJsb2Nrc19saXN0IGJiKQoreworCWJhZGJsb2Nrc19saXN0IG5ld19iYiA9IDA7CisJZXJyY29kZV90CXJldHZhbDsKKwlGSUxFCSpmOworCisJZiA9IHRtcGZpbGUoKTsKKwlpZiAoIWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIHRlbXAgZmlsZTogJXNcbiIsCisJCQllcnJvcl9tZXNzYWdlKGVycm5vKSk7CisJCXJldHVybiAxOworCX0KKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfYmJfRklMRShiYiwgMCwgZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJmaWxlX3Rlc3QiLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGJhZCBibG9ja3MiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV3aW5kKGYpOworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX0ZJTEUyKDAsIGYsICZuZXdfYmIsIDAsIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZmlsZV90ZXN0IiwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIik7CisJCXJldHVybiAxOworCX0KKwlmY2xvc2UoZik7CisKKwlpZiAoZXh0MmZzX2JhZGJsb2Nrc19lcXVhbChiYiwgbmV3X2JiKSkgeworCQlwcmludGYoIkJsb2NrIGJpdG1hcCBtYXRjaGVkIGFmdGVyIHJlYWRpbmcgYW5kIHdyaXRpbmcuXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoIkJsb2NrIGJpdG1hcCBOT1QgbWF0Y2hlZC5cbiIpOworCQl0ZXN0X2ZhaWwrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRfcHJvYyhleHQyX2ZpbHN5cyBmcywgYmxrX3QgYmxrKQoreworCWlmIChibGsgPT0gMzQ1MDApIHsKKwkJcHJpbnRmKCJFeHBlY3RlZCBpbnZhbGlkIGJsb2NrXG4iKTsKKwkJdGVzdF9leHBlY3RlZF9mYWlsKys7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJJbnZhbGlkIGJsb2NrICM6ICV1XG4iLCBibGspOworCQl0ZXN0X2ZhaWwrKzsKKwl9Cit9CisKK2ludCBmaWxlX3Rlc3RfaW52YWxpZChiYWRibG9ja3NfbGlzdCBiYikKK3sKKwliYWRibG9ja3NfbGlzdCBuZXdfYmIgPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9maWxzeXMgCWZzOworCUZJTEUJKmY7CisKKwlmcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cnVjdF9leHQyX2ZpbHN5cykpOworCW1lbXNldChmcywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJ1Y3RfZXh0Ml9maWxzeXMpKTsKKwlmcy0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVM7CisJZnMtPnN1cGVyID0gbWFsbG9jKFNVUEVSQkxPQ0tfU0laRSk7CisJbWVtc2V0KGZzLT5zdXBlciwgMCwgU1VQRVJCTE9DS19TSVpFKTsKKwlmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayA9IDE7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoZnMtPnN1cGVyLCAxMDApOworCisJZiA9IHRtcGZpbGUoKTsKKwlpZiAoIWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIHRlbXAgZmlsZTogJXNcbiIsCisJCQllcnJvcl9tZXNzYWdlKGVycm5vKSk7CisJCXJldHVybiAxOworCX0KKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfYmJfRklMRShiYiwgMCwgZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJmaWxlX3Rlc3QiLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGJhZCBibG9ja3MiKTsKKwkJcmV0dXJuIDE7CisJfQorCWZwcmludGYoZiwgIjM0NTAwXG4iKTsKKworCXJld2luZChmKTsKKwl0ZXN0X2V4cGVjdGVkX2ZhaWwgPSAwOworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX0ZJTEUoZnMsIGYsICZuZXdfYmIsIGludmFsaWRfcHJvYyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJmaWxlX3Rlc3QiLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MiKTsKKwkJcmV0dXJuIDE7CisJfQorCWZjbG9zZShmKTsKKwlpZiAoIXRlc3RfZXhwZWN0ZWRfZmFpbCkgeworCQlwcmludGYoIkV4cGVjdGVkIHRlc3QgZmFpbHVyZSBkaWRuJ3QgaGFwcGVuIVxuIik7CisJCXRlc3RfZmFpbCsrOworCX0KKworCisJaWYgKGV4dDJmc19iYWRibG9ja3NfZXF1YWwoYmIsIG5ld19iYikpIHsKKwkJcHJpbnRmKCJCbG9jayBiaXRtYXAgbWF0Y2hlZCBhZnRlciByZWFkaW5nIGFuZCB3cml0aW5nLlxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJCbG9jayBiaXRtYXAgTk9UIG1hdGNoZWQuXG4iKTsKKwkJdGVzdF9mYWlsKys7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJYmFkYmxvY2tzX2xpc3QgYmIxLCBiYjIsIGJiMywgYmI0LCBiYjU7CisJaW50CWVxdWFsOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisJYmIxID0gYmIyID0gYmIzID0gYmI0ID0gYmI1ID0gMDsKKworCXByaW50ZigidGVzdDE6ICIpOworCXJldHZhbCA9IGNyZWF0ZV90ZXN0X2xpc3QodGVzdDEsICZiYjEpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcHJpbnRfbGlzdChiYjEsIDEpOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigidGVzdDI6ICIpOworCXJldHZhbCA9IGNyZWF0ZV90ZXN0X2xpc3QodGVzdDIsICZiYjIpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcHJpbnRfbGlzdChiYjIsIDEpOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigidGVzdDM6ICIpOworCXJldHZhbCA9IGNyZWF0ZV90ZXN0X2xpc3QodGVzdDMsICZiYjMpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcHJpbnRfbGlzdChiYjMsIDEpOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigidGVzdDQ6ICIpOworCXJldHZhbCA9IGNyZWF0ZV90ZXN0X2xpc3QodGVzdDQsICZiYjQpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQlwcmludF9saXN0KGJiNCwgMCk7CisJCXByaW50ZigiXG4iKTsKKwkJdmFsaWRhdGVfdGVzdF9zZXEoYmI0LCB0ZXN0NGEpOworCX0KKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoInRlc3Q1OiAiKTsKKwlyZXR2YWwgPSBjcmVhdGVfdGVzdF9saXN0KHRlc3Q1LCAmYmI1KTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJcHJpbnRfbGlzdChiYjUsIDApOworCQlwcmludGYoIlxuIik7CisJCWRvX3Rlc3Rfc2VxKGJiNSwgdGVzdDVhKTsKKwkJcHJpbnRmKCJBZnRlciB0ZXN0NSBzZXF1ZW5jZTogIik7CisJCXByaW50X2xpc3QoYmI1LCAwKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKwlwcmludGYoIlxuIik7CisKKwlpZiAoYmIxICYmIGJiMiAmJiBiYjMgJiYgYmI0ICYmIGJiNSkgeworCQlwcmludGYoIkNvbXBhcmlzb24gdGVzdHM6XG4iKTsKKwkJZXF1YWwgPSBleHQyZnNfYmFkYmxvY2tzX2VxdWFsKGJiMSwgYmIyKTsKKwkJcHJpbnRmKCJiYjEgYW5kIGJiMiBhcmUgJXNlcXVhbC5cbiIsIGVxdWFsID8gIiIgOiAiTk9UICIpOworCQlpZiAoZXF1YWwpCisJCQl0ZXN0X2ZhaWwrKzsKKworCQllcXVhbCA9IGV4dDJmc19iYWRibG9ja3NfZXF1YWwoYmIxLCBiYjMpOworCQlwcmludGYoImJiMSBhbmQgYmIzIGFyZSAlc2VxdWFsLlxuIiwgZXF1YWwgPyAiIiA6ICJOT1QgIik7CisJCWlmICghZXF1YWwpCisJCQl0ZXN0X2ZhaWwrKzsKKworCQllcXVhbCA9IGV4dDJmc19iYWRibG9ja3NfZXF1YWwoYmIxLCBiYjQpOworCQlwcmludGYoImJiMSBhbmQgYmI0IGFyZSAlc2VxdWFsLlxuIiwgZXF1YWwgPyAiIiA6ICJOT1QgIik7CisJCWlmIChlcXVhbCkKKwkJCXRlc3RfZmFpbCsrOworCisJCWVxdWFsID0gZXh0MmZzX2JhZGJsb2Nrc19lcXVhbChiYjQsIGJiNSk7CisJCXByaW50ZigiYmI0IGFuZCBiYjUgYXJlICVzZXF1YWwuXG4iLCBlcXVhbCA/ICIiIDogIk5PVCAiKTsKKwkJaWYgKCFlcXVhbCkKKwkJCXRlc3RfZmFpbCsrOworCQlwcmludGYoIlxuIik7CisJfQorCisJZmlsZV90ZXN0KGJiNCk7CisKKwlmaWxlX3Rlc3RfaW52YWxpZChiYjQpOworCisJaWYgKHRlc3RfZmFpbCA9PSAwKQorCQlwcmludGYoImV4dDJmcyBsaWJyYXJ5IGJhZGJsb2NrcyB0ZXN0cyBjaGVja3Mgb3V0IE9LIVxuIik7CisKKwlpZiAoYmIxKQorCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYjEpOworCWlmIChiYjIpCisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiMik7CisJaWYgKGJiMykKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmIzKTsKKwlpZiAoYmI0KQorCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYjQpOworCisJcmV0dXJuIHRlc3RfZmFpbDsKKworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG1hcHMuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iaXRtYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzM2U3NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iaXRtYXBzLmMKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiB0c3RfYml0bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgInNzL3NzLmgiCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisjaW5jbHVkZSAiZXh0MmZzUC5oIgorCitleHRlcm4gc3NfcmVxdWVzdF90YWJsZSB0c3RfYml0bWFwc19jbWRzOworCitzdGF0aWMgY2hhciBzdWJzeXN0ZW1fbmFtZVtdID0gInRzdF9iaXRtYXBzIjsKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9ICIxLjAiOworCitleHQyX2ZpbHN5cwl0ZXN0X2ZzOworaW50CQlleGl0X3N0YXR1cyA9IDA7CisKK3N0YXRpYyBpbnQgc291cmNlX2ZpbGUoY29uc3QgY2hhciAqY21kX2ZpbGUsIGludCBzY2lfaWR4KQoreworCUZJTEUJCSpmOworCWNoYXIJCWJ1ZlsyNTZdOworCWNoYXIJCSpjcDsKKwlpbnQJCXJldHZhbDsKKwlpbnQgCQlub2VjaG87CisKKwlpZiAoc3RyY21wKGNtZF9maWxlLCAiLSIpID09IDApCisJCWYgPSBzdGRpbjsKKwllbHNlIHsKKwkJZiA9IGZvcGVuKGNtZF9maWxlLCAiciIpOworCQlpZiAoIWYpIHsKKwkJCXBlcnJvcihjbWRfZmlsZSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChzdGRlcnIpOworCXNldGJ1ZihzdGRvdXQsIE5VTEwpOworCXNldGJ1ZihzdGRlcnIsIE5VTEwpOworCXdoaWxlICghZmVvZihmKSkgeworCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoYnVmWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlub2VjaG8gPSAwOworCQlpZiAoYnVmWzBdID09ICctJykgeworCQkJbm9lY2hvID0gMTsKKwkJCWJ1ZlswXSA9ICcgJzsKKwkJfQorCQljcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAoY3ApCisJCQkqY3AgPSAwOworCQljcCA9IHN0cmNocihidWYsICdccicpOworCQlpZiAoY3ApCisJCQkqY3AgPSAwOworCQlpZiAoIW5vZWNobykKKwkJCXByaW50ZigiJXM6ICVzXG4iLCBzdWJzeXN0ZW1fbmFtZSwgYnVmKTsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsIGJ1Zik7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGxpYmMgZ2V0b3B0KCkgZnVuY3Rpb24sIHdoaWNoIGtlZXBzCisgKiBpbnRlcm5hbCBzdGF0ZS4gIEJhZCBkZXNpZ24hICBTdHVwaWQgbGliYyBBUEkgZGVzaWduZXJzISAgTm8KKyAqIGJpc2N1aXQhCisgKgorICogQlNELWRlcml2ZWQgZ2V0b3B0KCkgZnVuY3Rpb25zIHJlcXVpcmUgdGhhdCBvcHRpbmQgYmUgcmVzZXQgdG8gMSBpbgorICogb3JkZXIgdG8gcmVzZXQgZ2V0b3B0KCkgc3RhdGUuICBUaGlzIHVzZWQgdG8gYmUgZ2VuZXJhbGx5IGFjY2VwdGVkCisgKiB3YXkgb2YgcmVzZXR0aW5nIGdldG9wdCgpLiAgSG93ZXZlciwgZ2xpYmMncyBnZXRvcHQoKQorICogaGFzIGFkZGl0aW9uYWwgZ2V0b3B0KCkgc3RhdGUgYmV5b25kIG9wdGluZCwgYW5kIHJlcXVpcmVzIHRoYXQKKyAqIG9wdGluZCBiZSBzZXQgemVybyB0byByZXNldCBpdHMgc3RhdGUuICBTbyB0aGUgdW5mb3J0dW5hdGUgc3RhdGUgb2YKKyAqIGFmZmFpcnMgaXMgdGhhdCBCU0QtZGVyaXZlZCB2ZXJzaW9ucyBvZiBnZXRvcHQoKSBtaXNiZWhhdmUgaWYKKyAqIG9wdGluZCBpcyBzZXQgdG8gMCBpbiBvcmRlciB0byByZXNldCBnZXRvcHQoKSwgYW5kIGdsaWJjJ3MgZ2V0b3B0KCkKKyAqIHdpbGwgY29yZSBkdW1wIGlmIG9wdGluZCBpcyBzZXQgMSBpbiBvcmRlciB0byByZXNldCBnZXRvcHQoKS4KKyAqCisgKiBNb3JlIG1vZGVybiB2ZXJzaW9ucyBvZiBCU0QgcmVxdWlyZSB0aGF0IG9wdHJlc2V0IGJlIHNldCB0byAxIGluCisgKiBvcmRlciB0byByZXNldCBnZXRvcHQoKS4gICBTaWdoLiAgU3RhbmRhcmRzLCBhbnlvbmU/CisgKgorICogV2UgaGlkZSB0aGUgaGFpciBoZXJlLgorICovCit2b2lkIHJlc2V0X2dldG9wdCh2b2lkKQoreworI2lmIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKKwlvcHRpbmQgPSAwOworI2Vsc2UKKwlvcHRpbmQgPSAxOworI2VuZGlmCisjaWZkZWYgSEFWRV9PUFRSRVNFVAorCW9wdHJlc2V0ID0gMTsJCS8qIE1ha2VzIEJTRCBnZXRvcHQgaGFwcHkgKi8KKyNlbmRpZgorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZywgcHJpbnRpbmcKKyAqIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgZmFpbHMsIGFuZCByZXR1cm5pbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIGVyci4KKyAqLwordW5zaWduZWQgbG9uZyBwYXJzZV91bG9uZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNtZCwKKwkJCSAgY29uc3QgY2hhciAqZGVzY3IsIGludCAqZXJyKQoreworCWNoYXIJCSp0bXA7CisJdW5zaWduZWQgbG9uZwlyZXQ7CisKKwlyZXQgPSBzdHJ0b3VsKHN0ciwgJnRtcCwgMCk7CisJaWYgKCp0bXAgPT0gMCkgeworCQlpZiAoZXJyKQorCQkJKmVyciA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCWNvbV9lcnIoY21kLCAwLCAiQmFkICVzIC0gJXMiLCBkZXNjciwgc3RyKTsKKwlpZiAoZXJyKQorCQkqZXJyID0gMTsKKwllbHNlCisJCWV4aXQoMSk7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGNoZWNrX2ZzX29wZW4oY2hhciAqbmFtZSkKK3sKKwlpZiAoIXRlc3RfZnMpIHsKKwkJY29tX2VycihuYW1lLCAwLCAiRmlsZXN5c3RlbSBub3Qgb3BlbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2ZpbGVzeXN0ZW0oY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGJsb2NrcywgdW5zaWduZWQgaW50IGlub2RlcywKKwkJCSAgICAgdW5zaWduZWQgaW50IHR5cGUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKwllcnJjb2RlX3QgcmV0dmFsOworCisJbWVtc2V0KCZwYXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJnBhcmFtLCBibG9ja3MpOworCXBhcmFtLnNfaW5vZGVzX2NvdW50ID0gaW5vZGVzOworCisJcmV0dmFsID0gZXh0MmZzX2luaXRpYWxpemUoInRlc3QgZnMiLCBmbGFncywgJnBhcmFtLAorCQkJCSAgIHRlc3RfaW9fbWFuYWdlciwgJnRlc3RfZnMpOworCisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKG5hbWUsIHJldHZhbCwgIndoaWxlIGluaXRpYWxpemluZyBmaWxlc3lzdGVtIik7CisJCXJldHVybjsKKwl9CisJdGVzdF9mcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IHR5cGU7CisJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKHRlc3RfZnMtPmJsb2NrX21hcCk7CisJdGVzdF9mcy0+YmxvY2tfbWFwID0gMDsKKwlleHQyZnNfZnJlZV9pbm9kZV9iaXRtYXAodGVzdF9mcy0+aW5vZGVfbWFwKTsKKwl0ZXN0X2ZzLT5pbm9kZV9tYXAgPSAwOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAodGVzdF9mcywgImJsb2NrIGJpdG1hcCIsCisJCQkJCSAgICAgICZ0ZXN0X2ZzLT5ibG9ja19tYXApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihuYW1lLCByZXR2YWwsICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIpOworCQlnb3RvIGVycm91dDsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2lub2RlX2JpdG1hcCh0ZXN0X2ZzLCAiaW5vZGUgYml0bWFwIiwKKwkJCQkJICAgICAgJnRlc3RfZnMtPmlub2RlX21hcCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKG5hbWUsIHJldHZhbCwgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIik7CisJCWdvdG8gZXJyb3V0OworCX0KKwlyZXR1cm47CisKK2Vycm91dDoKKwlleHQyZnNfY2xvc2UodGVzdF9mcyk7CisJdGVzdF9mcyA9IDA7Cit9CisKK3ZvaWQgc2V0dXBfY21kKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJCWMsIGVycjsKKwl1bnNpZ25lZCBpbnQJYmxvY2tzID0gMTI4OworCXVuc2lnbmVkIGludAlpbm9kZXMgPSAwOworCXVuc2lnbmVkIGludAl0eXBlID0gRVhUMkZTX0JNQVA2NF9CSVRBUlJBWTsKKwlpbnQJCWZsYWdzID0gRVhUMl9GTEFHXzY0QklUUzsKKworCWlmICh0ZXN0X2ZzKSB7CisJCWV4dDJmc19jbG9zZSh0ZXN0X2ZzKTsKKwkJdGVzdF9mcyA9IDA7CisJfQorCisJcmVzZXRfZ2V0b3B0KCk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJiOmk6bHQ6IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlibG9ja3MgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICAgIm51bWJlciBvZiBibG9ja3MiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5vZGVzID0gcGFyc2VfdWxvbmcob3B0YXJnLCBhcmd2WzBdLAorCQkJCQkgICAgICJudW1iZXIgb2YgYmxvY2tzIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQljYXNlICdsJzoJLyogTGVnYWN5IGJpdG1hcHMgKi8KKwkJCWZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCXR5cGUgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICJiaXRtYXAgYmFja2VuZCB0eXBlIiwgJmVycik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICIlczogdXNhZ2U6IHNldHVwIFstYiBibG9ja3NdICIKKwkJCQkiWy1pIGlub2Rlc10gWy10IHR5cGVdXG4iLCBhcmd2WzBdKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzZXR1cF9maWxlc3lzdGVtKGFyZ3ZbMF0sIGJsb2NrcywgaW5vZGVzLCB0eXBlLCBmbGFncyk7Cit9CisKK3ZvaWQgY2xvc2VfY21kKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJZXh0MmZzX2Nsb3NlKHRlc3RfZnMpOworCXRlc3RfZnMgPSAwOworfQorCisKK3ZvaWQgZHVtcF9iaXRtYXAoZXh0MmZzX2dlbmVyaWNfYml0bWFwIGJtYXAsIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgbnVtKQoreworCXVuc2lnbmVkIGNoYXIJKmJ1ZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJaSwgbGVuID0gKG51bSAtIHN0YXJ0ICsgNykgLyA4OworCisJYnVmID0gbWFsbG9jKGxlbik7CisJaWYgKCFidWYpIHsKKwkJY29tX2VycigiZHVtcF9iaXRtYXAiLCAwLCAiY291bGRuJ3QgYWxsb2NhdGUgYnVmZmVyIik7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgbGVuKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2dlbmVyaWNfYm1hcF9yYW5nZShibWFwLCAoX191NjQpIHN0YXJ0LCBudW0sIGJ1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJkdW1wX2JpdG1hcCIsIHJldHZhbCwgCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfZ2VuZXJpY19ibWFwX3JhbmdlIik7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKQorCQlwcmludGYoIiUwMngiLCBidWZbaV0pOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoImJpdHMgc2V0OiAldVxuIiwgZXh0MmZzX2JpdGNvdW50KGJ1ZiwgbGVuKSk7CisJZnJlZShidWYpOworfQorCit2b2lkIGR1bXBfaW5vZGVfYml0bWFwX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiaW5vZGUgYml0bWFwOiAiKTsKKwlkdW1wX2JpdG1hcCh0ZXN0X2ZzLT5pbm9kZV9tYXAsIDEsIHRlc3RfZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCk7Cit9CisJCit2b2lkIGR1bXBfYmxvY2tfYml0bWFwX2NtZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiYmxvY2sgYml0bWFwOiAiKTsKKwlkdW1wX2JpdG1hcCh0ZXN0X2ZzLT5ibG9ja19tYXAsIHRlc3RfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2ssCisJCSAgICB0ZXN0X2ZzLT5zdXBlci0+c19ibG9ja3NfY291bnQpOworfQorCQordm9pZCBkb19zZXRiKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGJsb2NrLCBudW07CisJaW50IGVycjsKKwlpbnQgdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogc2V0YiA8YmxvY2s+IFtudW1dIik7CisJCXJldHVybjsKKwl9CisKKwlibG9jayA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJibG9jayIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWlmIChhcmdjID09IDMpIHsKKwkJbnVtID0gcGFyc2VfdWxvbmcoYXJndlsyXSwgYXJndlswXSwgIm51bSIsICZlcnIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuOworCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxvY2ssIG51bSk7CisJCXByaW50ZigiTWFya2luZyBibG9ja3MgJXUgdG8gJXVcbiIsIGJsb2NrLCBibG9jayArIG51bSAtIDEpOworCQlyZXR1cm47CisJfQorCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRlc3RfZnMtPmJsb2NrX21hcCwgYmxvY2spOworCW9wX3Jlc3VsdCA9IGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLCBibG9jayk7CisJcHJpbnRmKCJTZXR0aW5nIGJsb2NrICV1LCB3YXMgJXMgYmVmb3JlXG4iLCBibG9jaywgb3BfcmVzdWx0ID8KKwkgICAgICAgInNldCIgOiAiY2xlYXIiKTsKKwlpZiAoIXRlc3RfcmVzdWx0ICE9ICFvcF9yZXN1bHQpCisJCWNvbV9lcnIoYXJndlswXSwgMCwgIipFUlJPUiogdGVzdF9yZXN1bHQgZGlmZmVyZW50ISAoJWQsICVkKSIsCisJCQl0ZXN0X3Jlc3VsdCwgb3BfcmVzdWx0KTsKK30KKwordm9pZCBkb19jbGVhcmIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgYmxvY2ssIG51bTsKKwlpbnQgZXJyOworCWludCB0ZXN0X3Jlc3VsdCwgb3BfcmVzdWx0OworCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjICE9IDIgJiYgYXJnYyAhPSAzKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBjbGVhcmIgPGJsb2NrPiBbbnVtXSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCW51bSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJudW0iLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKworCQlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcF9yYW5nZTIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJYmxvY2ssIG51bSk7CisJCXByaW50ZigiQ2xlYXJpbmcgYmxvY2tzICV1IHRvICV1XG4iLCBibG9jaywgYmxvY2sgKyBudW0gLSAxKTsKKwkJcmV0dXJuOworCX0KKworCXRlc3RfcmVzdWx0ID0gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMih0ZXN0X2ZzLT5ibG9ja19tYXAsIGJsb2NrKTsKKwlvcF9yZXN1bHQgPSBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLCBibG9jayk7CisJcHJpbnRmKCJDbGVhcmluZyBibG9jayAldSwgd2FzICVzIGJlZm9yZVxuIiwgYmxvY2ssIG9wX3Jlc3VsdCA/CisJICAgICAgICJzZXQiIDogImNsZWFyIik7CisJaWYgKCF0ZXN0X3Jlc3VsdCAhPSAhb3BfcmVzdWx0KQorCQljb21fZXJyKGFyZ3ZbMF0sIDAsICIqRVJST1IqIHRlc3RfcmVzdWx0IGRpZmZlcmVudCEgKCVkLCAlZCkiLAorCQkJdGVzdF9yZXN1bHQsIG9wX3Jlc3VsdCk7Cit9CisKK3ZvaWQgZG9fdGVzdGIoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgYmxvY2ssIG51bTsKKwlpbnQgZXJyOworCWludCB0ZXN0X3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogdGVzdGIgPGJsb2NrPiBbbnVtXSIpOworCQlyZXR1cm47CisJfQorCisJYmxvY2sgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAiYmxvY2siLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA9PSAzKSB7CisJCW51bSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJudW0iLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKworCQl0ZXN0X3Jlc3VsdCA9CisJCQlleHQyZnNfdGVzdF9ibG9ja19iaXRtYXBfcmFuZ2UyKHRlc3RfZnMtPmJsb2NrX21hcCwKKwkJCQkJCQlibG9jaywgbnVtKTsKKwkJcHJpbnRmKCJCbG9ja3MgJXUgdG8gJXUgYXJlICVzYWxsIGNsZWFyLlxuIiwKKwkJICAgICAgIGJsb2NrLCBibG9jayArIG51bSAtIDEsIHRlc3RfcmVzdWx0ID8gIiIgOiAiTk9UICIpOworCQlyZXR1cm47CisJfQorCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRlc3RfZnMtPmJsb2NrX21hcCwgYmxvY2spOworCXByaW50ZigiQmxvY2sgJXUgaXMgJXNcbiIsIGJsb2NrLCB0ZXN0X3Jlc3VsdCA/ICJzZXQiIDogImNsZWFyIik7Cit9CisKK3ZvaWQgZG9fZmZ6YihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGludCBzdGFydCwgZW5kOworCWludCBlcnI7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGs2NF90IG91dDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMykgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogZmZ6YiA8c3RhcnQ+IDxlbmQ+Iik7CisJCXJldHVybjsKKwl9CisKKwlzdGFydCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJzdGFydCIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCWVuZCA9IHBhcnNlX3Vsb25nKGFyZ3ZbMl0sIGFyZ3ZbMF0sICJlbmQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfZmluZF9maXJzdF96ZXJvX2Jsb2NrX2JpdG1hcDIodGVzdF9mcy0+YmxvY2tfbWFwLAorCQkJCQkJICAgICAgc3RhcnQsIGVuZCwgJm91dCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGYoImV4dDJmc19maW5kX2ZpcnN0X3plcm9fYmxvY2tfYml0bWFwMigpIHJldHVybmVkICVzXG4iLAorCQkgICAgICAgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkZpcnN0IHVubWFya2VkIGJsb2NrIGlzICVsbHVcbiIsIG91dCk7Cit9CisKKwordm9pZCBkb196ZXJvYihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlwcmludGYoIkNsZWFyaW5nIGJsb2NrIGJpdG1hcC5cbiIpOworCWV4dDJmc19jbGVhcl9ibG9ja19iaXRtYXAodGVzdF9mcy0+YmxvY2tfbWFwKTsKK30KKwordm9pZCBkb19zZXRpKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGlub2RlOworCWludCBlcnI7CisJaW50IHRlc3RfcmVzdWx0LCBvcF9yZXN1bHQ7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgIT0gMikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogc2V0aSA8aW5vZGU+Iik7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJpbm9kZSIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXRlc3RfcmVzdWx0ID0gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMih0ZXN0X2ZzLT5pbm9kZV9tYXAsIGlub2RlKTsKKwlvcF9yZXN1bHQgPSBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwgaW5vZGUpOworCXByaW50ZigiU2V0dGluZyBpbm9kZSAldSwgd2FzICVzIGJlZm9yZVxuIiwgaW5vZGUsIG9wX3Jlc3VsdCA/CisJICAgICAgICJzZXQiIDogImNsZWFyIik7CisJaWYgKCF0ZXN0X3Jlc3VsdCAhPSAhb3BfcmVzdWx0KSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIipFUlJPUiogdGVzdF9yZXN1bHQgZGlmZmVyZW50ISAoJWQsICVkKSIsCisJCQl0ZXN0X3Jlc3VsdCwgb3BfcmVzdWx0KTsKKwkJZXhpdF9zdGF0dXMrKzsKKwl9Cit9CisKK3ZvaWQgZG9fY2xlYXJpKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGlub2RlOworCWludCBlcnI7CisJaW50IHRlc3RfcmVzdWx0LCBvcF9yZXN1bHQ7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgIT0gMikgeworCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogY2xlYXJiIDxpbm9kZT4iKTsKKwkJcmV0dXJuOworCX0KKworCWlub2RlID0gcGFyc2VfdWxvbmcoYXJndlsxXSwgYXJndlswXSwgImlub2RlIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJdGVzdF9yZXN1bHQgPSBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwgaW5vZGUpOworCW9wX3Jlc3VsdCA9IGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwMih0ZXN0X2ZzLT5pbm9kZV9tYXAsIGlub2RlKTsKKwlwcmludGYoIkNsZWFyaW5nIGlub2RlICV1LCB3YXMgJXMgYmVmb3JlXG4iLCBpbm9kZSwgb3BfcmVzdWx0ID8KKwkgICAgICAgInNldCIgOiAiY2xlYXIiKTsKKwlpZiAoIXRlc3RfcmVzdWx0ICE9ICFvcF9yZXN1bHQpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiKkVSUk9SKiB0ZXN0X3Jlc3VsdCBkaWZmZXJlbnQhICglZCwgJWQpIiwKKwkJCXRlc3RfcmVzdWx0LCBvcF9yZXN1bHQpOworCQlleGl0X3N0YXR1cysrOworCX0KK30KKwordm9pZCBkb190ZXN0aShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGludCBpbm9kZTsKKwlpbnQgZXJyOworCWludCB0ZXN0X3Jlc3VsdDsKKworCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiB0ZXN0YiA8aW5vZGU+Iik7CisJCXJldHVybjsKKwl9CisKKwlpbm9kZSA9IHBhcnNlX3Vsb25nKGFyZ3ZbMV0sIGFyZ3ZbMF0sICJpbm9kZSIsICZlcnIpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXRlc3RfcmVzdWx0ID0gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMih0ZXN0X2ZzLT5pbm9kZV9tYXAsIGlub2RlKTsKKwlwcmludGYoIklub2RlICV1IGlzICVzXG4iLCBpbm9kZSwgdGVzdF9yZXN1bHQgPyAic2V0IiA6ICJjbGVhciIpOworfQorCit2b2lkIGRvX2ZmemkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhcnQsIGVuZDsKKwlpbnQgZXJyOworCWVycmNvZGVfdCByZXR2YWw7CisJZXh0Ml9pbm9fdCBvdXQ7CisKKwlpZiAoY2hlY2tfZnNfb3Blbihhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgIT0gMyAmJiBhcmdjICE9IDMpIHsKKwkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IGZmemkgPHN0YXJ0PiA8ZW5kPiIpOworCQlyZXR1cm47CisJfQorCisJc3RhcnQgPSBwYXJzZV91bG9uZyhhcmd2WzFdLCBhcmd2WzBdLCAic3RhcnQiLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwllbmQgPSBwYXJzZV91bG9uZyhhcmd2WzJdLCBhcmd2WzBdLCAiZW5kIiwgJmVycik7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19pbm9kZV9iaXRtYXAyKHRlc3RfZnMtPmlub2RlX21hcCwKKwkJCQkJCSAgICAgIHN0YXJ0LCBlbmQsICZvdXQpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRmKCJleHQyZnNfZmluZF9maXJzdF96ZXJvX2lub2RlX2JpdG1hcDIoKSByZXR1cm5lZCAlc1xuIiwKKwkJICAgICAgIGVycm9yX21lc3NhZ2UocmV0dmFsKSk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJGaXJzdCB1bm1hcmtlZCBpbm9kZSBpcyAldVxuIiwgb3V0KTsKK30KKworCit2b2lkIGRvX3plcm9pKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKworCXByaW50ZigiQ2xlYXJpbmcgaW5vZGUgYml0bWFwLlxuIik7CisJZXh0MmZzX2NsZWFyX2lub2RlX2JpdG1hcCh0ZXN0X2ZzLT5pbm9kZV9tYXApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50CWJsb2NrcyA9IDEyODsKKwl1bnNpZ25lZCBpbnQJaW5vZGVzID0gMDsKKwl1bnNpZ25lZCBpbnQJdHlwZSA9IEVYVDJGU19CTUFQNjRfQklUQVJSQVk7CisJaW50CQljLCBlcnIsIGNvZGU7CisJY2hhcgkJKnJlcXVlc3QgPSAoY2hhciAqKU5VTEw7CisJY2hhcgkJKmNtZF9maWxlID0gMDsKKwlpbnQJCXNjaV9pZHg7CisJaW50CQlmbGFncyA9IEVYVDJfRkxBR182NEJJVFM7CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X3NzX2Vycm9yX3RhYmxlKTsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImI6aTpsdDpSOmY6IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlibG9ja3MgPSBwYXJzZV91bG9uZyhvcHRhcmcsIGFyZ3ZbMF0sCisJCQkJCSAgICAgIm51bWJlciBvZiBibG9ja3MiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJZXhpdCgxKTsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlub2RlcyA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAgICAibnVtYmVyIG9mIGJsb2NrcyIsICZlcnIpOworCQkJaWYgKGVycikKKwkJCQlleGl0KDEpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgkvKiBMZWdhY3kgYml0bWFwcyAqLworCQkJZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJdHlwZSA9IHBhcnNlX3Vsb25nKG9wdGFyZywgYXJndlswXSwKKwkJCQkJICAgImJpdG1hcCBiYWNrZW5kIHR5cGUiLCAmZXJyKTsKKwkJCWlmIChlcnIpCisJCQkJZXhpdCgxKTsKKwkJCWJyZWFrOworCQljYXNlICdSJzoKKwkJCXJlcXVlc3QgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQljbWRfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6ICVzIFstUiByZXF1ZXN0XSAiCisJCQkJIlstZiBjbWRfZmlsZV0iLCBzdWJzeXN0ZW1fbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJc2NpX2lkeCA9IHNzX2NyZWF0ZV9pbnZvY2F0aW9uKHN1YnN5c3RlbV9uYW1lLCB2ZXJzaW9uLAorCQkJCSAgICAgICAoY2hhciAqKU5VTEwsICZ0c3RfYml0bWFwc19jbWRzLCAmY29kZSk7CisJaWYgKGNvZGUpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIGNvZGUsICJjcmVhdGluZyBpbnZvY2F0aW9uIik7CisJCWV4aXQoMSk7CisJfQorCisJKHZvaWQpIHNzX2FkZF9yZXF1ZXN0X3RhYmxlIChzY2lfaWR4LCAmc3Nfc3RkX3JlcXVlc3RzLCAxLCAmY29kZSk7CisJaWYgKGNvZGUpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIGNvZGUsICJhZGRpbmcgc3RhbmRhcmQgcmVxdWVzdHMiKTsKKwkJZXhpdCAoMSk7CisJfQorCisJcHJpbnRmKCIlcyAlcy4gIFR5cGUgJz8nIGZvciBhIGxpc3Qgb2YgY29tbWFuZHMuXG5cbiIsCisJICAgICAgIHN1YnN5c3RlbV9uYW1lLCB2ZXJzaW9uKTsKKworCXNldHVwX2ZpbGVzeXN0ZW0oYXJndlswXSwgYmxvY2tzLCBpbm9kZXMsIHR5cGUsIGZsYWdzKTsKKworCWlmIChyZXF1ZXN0KSB7CisJCWNvZGUgPSBzc19leGVjdXRlX2xpbmUoc2NpX2lkeCwgcmVxdWVzdCk7CisJCWlmIChjb2RlKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgY29kZSwgcmVxdWVzdCk7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfSBlbHNlIGlmIChjbWRfZmlsZSkgeworCQlleGl0X3N0YXR1cyA9IHNvdXJjZV9maWxlKGNtZF9maWxlLCBzY2lfaWR4KTsKKwl9IGVsc2UgeworCQlzc19saXN0ZW4oc2NpX2lkeCk7CisJfQorCisJZXhpdChleGl0X3N0YXR1cyk7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2NtZC5jdCBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2NtZC5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFlNWQzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG1hcHNfY21kLmN0CkBAIC0wLDAgKzEsNDUgQEAKK2NvbW1hbmRfdGFibGUgdHN0X2JpdG1hcHNfY21kczsKKworcmVxdWVzdCBzZXR1cF9jbWQsICJTZXR1cCBmaWxlIHN5c3RlbSIsCisJc2V0dXA7CisKK3JlcXVlc3QgY2xvc2VfY21kLCAiQ2xvc2UgZmlsZSBzeXN0ZW0iLAorCWNsb3NlOworCityZXF1ZXN0IGR1bXBfaW5vZGVfYml0bWFwX2NtZCwgIkR1bXAgdGhlIGlub2RlIGJpdG1hcCIsCisJZHVtcF9pbm9kZV9iaXRtYXAsIGR1bXBfaWI7CisKK3JlcXVlc3QgZHVtcF9ibG9ja19iaXRtYXBfY21kLCAiRHVtcCB0aGUgYmxvY2sgYml0bWFwIiwKKwlkdW1wX2Jsb2NrX2JpdG1hcCwgZHVtcF9iYjsKKworcmVxdWVzdCBkb19zZXRiLCAiU2V0IGJsb2NrIiwKKwlzZXRfYmxvY2ssIHNldGI7CisKK3JlcXVlc3QgZG9fY2xlYXJiLCAiQ2xlYXIgYmxvY2siLAorCWNsZWFyX2Jsb2NrLCBjbGVhcmI7CisKK3JlcXVlc3QgZG9fdGVzdGIsICJUZXN0IGJsb2NrIiwKKwl0ZXN0X2Jsb2NrLCB0ZXN0YjsKKworcmVxdWVzdCBkb19mZnpiLCAiRmluZCBmaXJzdCB6ZXJvIGJsb2NrIiwKKwlmaW5kX2ZpcnN0X3plcm9fYmxvY2ssIGZmemI7CisKK3JlcXVlc3QgZG9femVyb2IsICJDbGVhciBibG9jayBiaXRtYXAiLAorCWNsZWFyX2Jsb2NrX2JpdG1hcCwgemVyb2I7CisKK3JlcXVlc3QgZG9fc2V0aSwgIlNldCBpbm9kZSIsCisJc2V0X2lub2RlLCBzZXRpOworCityZXF1ZXN0IGRvX2NsZWFyaSwgIkNsZWFyIGlub2RlIiwKKwljbGVhcl9pbm9kZSwgY2xlYXJpOworCityZXF1ZXN0IGRvX3Rlc3RpLCAiVGVzdCBpbm9kZSIsCisJdGVzdF9pbm9kZSwgdGVzdGk7CisKK3JlcXVlc3QgZG9fZmZ6aSwgIkZpbmQgZmlyc3QgemVybyBpbm9kZSIsCisJZmluZF9maXJzdF96ZXJvX2lub2RlLCBmZnppOworCityZXF1ZXN0IGRvX3plcm9pLCAiQ2xlYXIgaW5vZGUgYml0bWFwIiwKKwljbGVhcl9pbm9kZV9iaXRtYXAsIHplcm9pOworCitlbmQ7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYml0bWFwc19jbWRzIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG1hcHNfY21kcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUyYTYwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG1hcHNfY21kcwpAQCAtMCwwICsxLDk5IEBACitzZXRiIDEyCitzZXRiIDEyCitjbGVhcmIgMTIKK2NsZWFyYiAxMgorc2V0YiAxMgorc2V0YiAxNAorc2V0YiAxNgordGVzdGIgMTMKK3Rlc3RiIDE1Cit0ZXN0YiAxMgordGVzdGIgMTQKK3NldGIgMTMKK3NldGIgMTUKK3Rlc3RiIDEyCit0ZXN0YiAxMQordGVzdGIgMTUKK3Rlc3RiIDE2CitkdW1wX2JiCitmZnpiIDExIDE2CitmZnpiIDEyIDE2CitmZnpiIDEyIDIwCitjbGVhcmIgMTMKK2ZmemIgMTIgMjAKK3NldGIgMTMKK2NsZWFyYiAxMiA3Cit0ZXN0YiAxMiA3CitzZXRiIDE1Cit0ZXN0YiAxMiA3CitjbGVhcmIgMTUKK3Rlc3RiIDEyIDcKK3NldGIgMTIgNworZHVtcF9iYgorc2V0aSAyCitzZXRpIDUKK3NldGkgNAorc2V0aSAzCitzZXRpIDQKK3NldGkgNQordGVzdGkgNgordGVzdGkgMQorZHVtcF9pYgorZmZ6aSAxIDYKK2ZmemkgMiA1CitmZnppIDIgNgorY2xlYXJpIDQKK2ZmemkgMiA2Cit6ZXJvaQordGVzdGkgNQorc2V0aSA1CitzZXRpIDUKK2NsZWFyaSA1CitjbGVhcmkgNQordGVzdGkgMTcKK3Rlc3RpIDYKK3Rlc3RpIDQKK2NsZWFyYiA3IDEyCitkdW1wX2JiCitzZXRiIDEKK2R1bXBfYmIKK3NldGIgMgorZHVtcF9iYgorc2V0YiAzCitkdW1wX2JiCitzZXRiIDQKK2R1bXBfYmIKK3NldGIgNQorZHVtcF9iYgorc2V0YiA2CitkdW1wX2JiCitzZXRiIDcKK2R1bXBfYmIKK3NldGIgOAorZHVtcF9iYgorc2V0YiAxMAorc2V0YiAxMgorc2V0YiAxNAorc2V0YiAxNworc2V0YiAxOQorc2V0YiAyNAorc2V0YiAyNgorc2V0YiAyNworc2V0YiAzMAorc2V0YiAzMQorc2V0YiAzMgorc2V0YiAzNQorc2V0YiAzOQorc2V0YiA0MAorc2V0YiA0NAorc2V0YiA0Ngorc2V0YiA0Nworc2V0YiA0OQorc2V0YiA1MQorc2V0YiA1MgorY2xlYXJiIDIKK2NsZWFyYiAzCitjbGVhcmIgNworZHVtcF9iYgorcXVpdAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYml0bWFwc19leHAgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYml0bWFwc19leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2MmI2NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9iaXRtYXBzX2V4cApAQCAtMCwwICsxLDIxMSBAQAordHN0X2JpdG1hcHMgMS4wLiAgVHlwZSAnPycgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy4KKwordHN0X2JpdG1hcHM6IHNldGIgMTIKK1NldHRpbmcgYmxvY2sgMTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDEyCitTZXR0aW5nIGJsb2NrIDEyLCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGNsZWFyYiAxMgorQ2xlYXJpbmcgYmxvY2sgMTIsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDEyCitDbGVhcmluZyBibG9jayAxMiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTIKK1NldHRpbmcgYmxvY2sgMTIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDE0CitTZXR0aW5nIGJsb2NrIDE0LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAxNgorU2V0dGluZyBibG9jayAxNiwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RiIDEzCitCbG9jayAxMyBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RiIDE1CitCbG9jayAxNSBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RiIDEyCitCbG9jayAxMiBpcyBzZXQKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxNAorQmxvY2sgMTQgaXMgc2V0Cit0c3RfYml0bWFwczogc2V0YiAxMworU2V0dGluZyBibG9jayAxMywgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTUKK1NldHRpbmcgYmxvY2sgMTUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiB0ZXN0YiAxMgorQmxvY2sgMTIgaXMgc2V0Cit0c3RfYml0bWFwczogdGVzdGIgMTEKK0Jsb2NrIDExIGlzIGNsZWFyCit0c3RfYml0bWFwczogdGVzdGIgMTUKK0Jsb2NrIDE1IGlzIHNldAordHN0X2JpdG1hcHM6IHRlc3RiIDE2CitCbG9jayAxNiBpcyBzZXQKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDAwZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogNQordHN0X2JpdG1hcHM6IGZmemIgMTEgMTYKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDExCit0c3RfYml0bWFwczogZmZ6YiAxMiAxNgorZXh0MmZzX2ZpbmRfZmlyc3RfemVyb19ibG9ja19iaXRtYXAyKCkgcmV0dXJuZWQgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQordHN0X2JpdG1hcHM6IGZmemIgMTIgMjAKK0ZpcnN0IHVubWFya2VkIGJsb2NrIGlzIDE3Cit0c3RfYml0bWFwczogY2xlYXJiIDEzCitDbGVhcmluZyBibG9jayAxMywgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBmZnpiIDEyIDIwCitGaXJzdCB1bm1hcmtlZCBibG9jayBpcyAxMwordHN0X2JpdG1hcHM6IHNldGIgMTMKK1NldHRpbmcgYmxvY2sgMTMsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmIgMTIgNworQ2xlYXJpbmcgYmxvY2tzIDEyIHRvIDE4Cit0c3RfYml0bWFwczogdGVzdGIgMTIgNworQmxvY2tzIDEyIHRvIDE4IGFyZSBhbGwgY2xlYXIuCit0c3RfYml0bWFwczogc2V0YiAxNQorU2V0dGluZyBibG9jayAxNSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RiIDEyIDcKK0Jsb2NrcyAxMiB0byAxOCBhcmUgTk9UIGFsbCBjbGVhci4KK3RzdF9iaXRtYXBzOiBjbGVhcmIgMTUKK0NsZWFyaW5nIGJsb2NrIDE1LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RiIDEyIDcKK0Jsb2NrcyAxMiB0byAxOCBhcmUgYWxsIGNsZWFyLgordHN0X2JpdG1hcHM6IHNldGIgMTIgNworTWFya2luZyBibG9ja3MgMTIgdG8gMTgKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDAwZjgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogNwordHN0X2JpdG1hcHM6IHNldGkgMgorU2V0dGluZyBpbm9kZSAyLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0aSA1CitTZXR0aW5nIGlub2RlIDUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRpIDQKK1NldHRpbmcgaW5vZGUgNCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGkgMworU2V0dGluZyBpbm9kZSAzLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0aSA0CitTZXR0aW5nIGlub2RlIDQsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogc2V0aSA1CitTZXR0aW5nIGlub2RlIDUsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogdGVzdGkgNgorSW5vZGUgNiBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RpIDEKK0lub2RlIDEgaXMgY2xlYXIKK3RzdF9iaXRtYXBzOiBkdW1wX2liCitpbm9kZSBiaXRtYXA6IDFlMDAwMDAwCitiaXRzIHNldDogNAordHN0X2JpdG1hcHM6IGZmemkgMSA2CitGaXJzdCB1bm1hcmtlZCBpbm9kZSBpcyAxCit0c3RfYml0bWFwczogZmZ6aSAyIDUKK2V4dDJmc19maW5kX2ZpcnN0X3plcm9faW5vZGVfYml0bWFwMigpIHJldHVybmVkIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK3RzdF9iaXRtYXBzOiBmZnppIDIgNgorRmlyc3QgdW5tYXJrZWQgaW5vZGUgaXMgNgordHN0X2JpdG1hcHM6IGNsZWFyaSA0CitDbGVhcmluZyBpbm9kZSA0LCB3YXMgc2V0IGJlZm9yZQordHN0X2JpdG1hcHM6IGZmemkgMiA2CitGaXJzdCB1bm1hcmtlZCBpbm9kZSBpcyA0Cit0c3RfYml0bWFwczogemVyb2kKK0NsZWFyaW5nIGlub2RlIGJpdG1hcC4KK3RzdF9iaXRtYXBzOiB0ZXN0aSA1CitJbm9kZSA1IGlzIGNsZWFyCit0c3RfYml0bWFwczogc2V0aSA1CitTZXR0aW5nIGlub2RlIDUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRpIDUKK1NldHRpbmcgaW5vZGUgNSwgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmkgNQorQ2xlYXJpbmcgaW5vZGUgNSwgd2FzIHNldCBiZWZvcmUKK3RzdF9iaXRtYXBzOiBjbGVhcmkgNQorQ2xlYXJpbmcgaW5vZGUgNSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHRlc3RpIDE3CitJbm9kZSAxNyBpcyBjbGVhcgordHN0X2JpdG1hcHM6IHRlc3RpIDYKK0lub2RlIDYgaXMgY2xlYXIKK3RzdF9iaXRtYXBzOiB0ZXN0aSA0CitJbm9kZSA0IGlzIGNsZWFyCit0c3RfYml0bWFwczogY2xlYXJiIDcgMTIKK0NsZWFyaW5nIGJsb2NrcyA3IHRvIDE4Cit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDAKK3RzdF9iaXRtYXBzOiBzZXRiIDEKK1NldHRpbmcgYmxvY2sgMSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiAxCit0c3RfYml0bWFwczogc2V0YiAyCitTZXR0aW5nIGJsb2NrIDIsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogMgordHN0X2JpdG1hcHM6IHNldGIgMworU2V0dGluZyBibG9jayAzLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDMKK3RzdF9iaXRtYXBzOiBzZXRiIDQKK1NldHRpbmcgYmxvY2sgNCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogMGYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiA0Cit0c3RfYml0bWFwczogc2V0YiA1CitTZXR0aW5nIGJsb2NrIDUsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IDFmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogNQordHN0X2JpdG1hcHM6IHNldGIgNgorU2V0dGluZyBibG9jayA2LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiAzZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDYKK3RzdF9iaXRtYXBzOiBzZXRiIDcKK1NldHRpbmcgYmxvY2sgNywgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IGR1bXBfYmIKK2Jsb2NrIGJpdG1hcDogN2YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2JpdHMgc2V0OiA3Cit0c3RfYml0bWFwczogc2V0YiA4CitTZXR0aW5nIGJsb2NrIDgsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBkdW1wX2JiCitibG9jayBiaXRtYXA6IGZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitiaXRzIHNldDogOAordHN0X2JpdG1hcHM6IHNldGIgMTAKK1NldHRpbmcgYmxvY2sgMTAsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDEyCitTZXR0aW5nIGJsb2NrIDEyLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAxNAorU2V0dGluZyBibG9jayAxNCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMTcKK1NldHRpbmcgYmxvY2sgMTcsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDE5CitTZXR0aW5nIGJsb2NrIDE5LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAyNAorU2V0dGluZyBibG9jayAyNCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMjYKK1NldHRpbmcgYmxvY2sgMjYsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDI3CitTZXR0aW5nIGJsb2NrIDI3LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAzMAorU2V0dGluZyBibG9jayAzMCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMzEKK1NldHRpbmcgYmxvY2sgMzEsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDMyCitTZXR0aW5nIGJsb2NrIDMyLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiAzNQorU2V0dGluZyBibG9jayAzNSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgMzkKK1NldHRpbmcgYmxvY2sgMzksIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDQwCitTZXR0aW5nIGJsb2NrIDQwLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiA0NAorU2V0dGluZyBibG9jayA0NCwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgNDYKK1NldHRpbmcgYmxvY2sgNDYsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDQ3CitTZXR0aW5nIGJsb2NrIDQ3LCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogc2V0YiA0OQorU2V0dGluZyBibG9jayA0OSwgd2FzIGNsZWFyIGJlZm9yZQordHN0X2JpdG1hcHM6IHNldGIgNTEKK1NldHRpbmcgYmxvY2sgNTEsIHdhcyBjbGVhciBiZWZvcmUKK3RzdF9iaXRtYXBzOiBzZXRiIDUyCitTZXR0aW5nIGJsb2NrIDUyLCB3YXMgY2xlYXIgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDIKK0NsZWFyaW5nIGJsb2NrIDIsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDMKK0NsZWFyaW5nIGJsb2NrIDMsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogY2xlYXJiIDcKK0NsZWFyaW5nIGJsb2NrIDcsIHdhcyBzZXQgYmVmb3JlCit0c3RfYml0bWFwczogZHVtcF9iYgorYmxvY2sgYml0bWFwOiBiOTJhODVlNmM0NjgwZDAwMDAwMDAwMDAwMDAwMDAwMAorYml0cyBzZXQ6IDI1Cit0c3RfYml0bWFwczogcXVpdAordHN0X2JpdG1hcHM6IApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG9wcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2JpdG9wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDczNWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYml0b3BzLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHRoZSBiaXRvcHMgZnVuY3Rpb25zIHdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK3Vuc2lnbmVkIGNoYXIgYml0YXJyYXlbXSA9IHsKKwkweDgwLCAweEYwLCAweDQwLCAweDQwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAKKwl9OworCitpbnQgYml0c19saXN0W10gPSB7CisJNywgMTIsIDEzLCAxNCwxNSwgMjIsIDMwLCA2OCwgNzcsIC0xLAorfTsKKworI2RlZmluZSBCSUdfVEVTVF9CSVQgICAoKCh1bnNpZ25lZCkgMSA8PCAzMSkgKyA0MikKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CWksIGosIHNpemU7CisJdW5zaWduZWQgY2hhciB0ZXN0YXJyYXlbMTJdOworCXVuc2lnbmVkIGNoYXIgKmJpZ2FycmF5OworCisJc2l6ZSA9IHNpemVvZihiaXRhcnJheSkqODsKKyNpZiAwCisJaSA9IGV4dDJmc19maW5kX2ZpcnN0X2JpdF9zZXQoYml0YXJyYXksIHNpemUpOworCXdoaWxlIChpIDwgc2l6ZSkgeworCQlwcmludGYoIkJpdCBzZXQ6ICVkXG4iLCBpKTsKKwkJaSA9IGV4dDJmc19maW5kX25leHRfYml0X3NldChiaXRhcnJheSwgc2l6ZSwgaSsxKTsKKwl9CisjZW5kaWYKKworCS8qIFRlc3QgdGVzdF9iaXQgKi8KKwlmb3IgKGk9MCxqPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2JpdChpLCBiaXRhcnJheSkpIHsKKwkJCWlmIChiaXRzX2xpc3Rbal0gPT0gaSkgeworCQkJCWorKzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJCaXQgJWQgc2V0LCBub3QgZXhwZWN0ZWRcbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYml0c19saXN0W2pdID09IGkpIHsKKwkJCQlwcmludGYoIkV4cGVjdGVkIGJpdCAlZCB0byBiZSBjbGVhci5cbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCJleHQyZnNfdGVzdF9iaXQgYXBwZWFycyB0byBiZSBjb3JyZWN0XG4iKTsKKworCS8qIFRlc3QgZXh0MmZzX3NldF9iaXQgKi8KKwltZW1zZXQodGVzdGFycmF5LCAwLCBzaXplb2YodGVzdGFycmF5KSk7CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfc2V0X2JpdChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWlmIChtZW1jbXAodGVzdGFycmF5LCBiaXRhcnJheSwgc2l6ZW9mKHRlc3RhcnJheSkpID09IDApIHsKKwkJcHJpbnRmKCJleHQyZnNfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiZXh0MmZzX3NldF9iaXQgdGVzdCBmYWlsZWQuXG4iKTsKKwkJZm9yIChpPTA7IGkgPCBzaXplb2YodGVzdGFycmF5KTsgaSsrKSB7CisJCQlwcmludGYoIiUwMnggIiwgdGVzdGFycmF5W2ldKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisJCWV4aXQoMSk7CisJfQorCWZvciAoaT0wOyBiaXRzX2xpc3RbaV0gPiAwOyBpKyspIHsKKwkJZXh0MmZzX2NsZWFyX2JpdChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQlpZiAodGVzdGFycmF5W2ldKSB7CisJCQlwcmludGYoImV4dDJmc19jbGVhcl9iaXQgZmFpbGVkLCAiCisJCQkgICAgICAgInRlc3RhcnJheVslZF0gaXMgJWRcbiIsIGksIHRlc3RhcnJheVtpXSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCXByaW50ZigiZXh0MmZzX2NsZWFyX2JpdCB0ZXN0IHN1Y2NlZWQuXG4iKTsKKworCisJLyogRG8gYmlnYXJyYXkgdGVzdCAqLworCWJpZ2FycmF5ID0gbWFsbG9jKDEgPDwgMjkpOworCWlmICghYmlnYXJyYXkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2NyYXRjaCBtZW1vcnkhXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19zZXRfYml0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCXByaW50ZigiYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgJWRcbiIsIEJJR19URVNUX0JJVCwKKwkgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdLCAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9ICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpCisJCWV4aXQoMSk7CisKKwlleHQyZnNfY2xlYXJfYml0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCisJcHJpbnRmKCJiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAwXG4iLCBCSUdfVEVTVF9CSVQsCisJICAgICAgIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAwKQorCQlleGl0KDEpOworCisJcHJpbnRmKCJleHQyZnNfc2V0X2JpdCBiaWdfdGVzdCBzdWNjZXNzZnVsXG4iKTsKKworCisJLyogTm93IHRlc3QgZXh0MmZzX2Zhc3Rfc2V0X2JpdCAqLworCW1lbXNldCh0ZXN0YXJyYXksIDAsIHNpemVvZih0ZXN0YXJyYXkpKTsKKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19mYXN0X3NldF9iaXQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlpZiAobWVtY21wKHRlc3RhcnJheSwgYml0YXJyYXksIHNpemVvZih0ZXN0YXJyYXkpKSA9PSAwKSB7CisJCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IGZhaWxlZC5cbiIpOworCQlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCB0ZXN0YXJyYXlbaV0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfY2xlYXJfYml0KGJpdHNfbGlzdFtpXSwgdGVzdGFycmF5KTsKKwl9CisJZm9yIChpPTA7IGkgPCBzaXplb2YodGVzdGFycmF5KTsgaSsrKSB7CisJCWlmICh0ZXN0YXJyYXlbaV0pIHsKKwkJCXByaW50ZigiZXh0MmZzX2NsZWFyX2JpdCBmYWlsZWQsICIKKwkJCSAgICAgICAidGVzdGFycmF5WyVkXSBpcyAlZFxuIiwgaSwgdGVzdGFycmF5W2ldKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcHJpbnRmKCJleHQyZnNfY2xlYXJfYml0IHRlc3Qgc3VjY2VlZC5cbiIpOworCisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19mYXN0X3NldF9iaXQoQklHX1RFU1RfQklULCBiaWdhcnJheSk7CisJcHJpbnRmKCJiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAlZFxuIiwgQklHX1RFU1RfQklULAorCSAgICAgICBiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10sICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpOworCWlmIChiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10gIT0gKDEgPDwgKEJJR19URVNUX0JJVCAmIDcpKSkKKwkJZXhpdCgxKTsKKworCWV4dDJmc19mYXN0X2NsZWFyX2JpdChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKworCXByaW50ZigiYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgMFxuIiwgQklHX1RFU1RfQklULAorCSAgICAgICBiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10pOworCWlmIChiaWdhcnJheVtCSUdfVEVTVF9CSVQgPj4gM10gIT0gMCkKKwkJZXhpdCgxKTsKKworCXByaW50ZigiZXh0MmZzX2Zhc3Rfc2V0X2JpdCBiaWdfdGVzdCBzdWNjZXNzZnVsXG4iKTsKKworCS8qIFJlcGVhdCBmb3JlZ29pbmcgdGVzdHMgZm9yIDY0LWJpdCBiaXRvcHMgKi8KKworCS8qIFRlc3QgdGVzdF9iaXQgKi8KKwlmb3IgKGk9MCxqPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGV4dDJmc190ZXN0X2JpdDY0KGksIGJpdGFycmF5KSkgeworCQkJaWYgKGJpdHNfbGlzdFtqXSA9PSBpKSB7CisJCQkJaisrOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoIjY0LWJpdDogQml0ICVkIHNldCwgbm90IGV4cGVjdGVkXG4iLAorCQkJCSAgICAgICBpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJpdHNfbGlzdFtqXSA9PSBpKSB7CisJCQkJcHJpbnRmKCI2NC1iaXQ6ICIKKwkJCQkgICAgICAgIkV4cGVjdGVkIGJpdCAlZCB0byBiZSBjbGVhci5cbiIsIGkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9CisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc190ZXN0X2JpdCBhcHBlYXJzIHRvIGJlIGNvcnJlY3RcbiIpOworCisJLyogVGVzdCBleHQyZnNfc2V0X2JpdCAqLworCW1lbXNldCh0ZXN0YXJyYXksIDAsIHNpemVvZih0ZXN0YXJyYXkpKTsKKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19zZXRfYml0NjQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlpZiAobWVtY21wKHRlc3RhcnJheSwgYml0YXJyYXksIHNpemVvZih0ZXN0YXJyYXkpKSA9PSAwKSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfc2V0X2JpdCB0ZXN0IGZhaWxlZC5cbiIpOworCQlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJCXByaW50ZigiJTAyeCAiLCB0ZXN0YXJyYXlbaV0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChpPTA7IGJpdHNfbGlzdFtpXSA+IDA7IGkrKykgeworCQlleHQyZnNfY2xlYXJfYml0NjQoYml0c19saXN0W2ldLCB0ZXN0YXJyYXkpOworCX0KKwlmb3IgKGk9MDsgaSA8IHNpemVvZih0ZXN0YXJyYXkpOyBpKyspIHsKKwkJaWYgKHRlc3RhcnJheVtpXSkgeworCQkJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19jbGVhcl9iaXQgZmFpbGVkLCAiCisJCQkgICAgICAgInRlc3RhcnJheVslZF0gaXMgJWRcbiIsIGksIHRlc3RhcnJheVtpXSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCXByaW50ZigiNjQtYml0OiBleHQyZnNfY2xlYXJfYml0IHRlc3Qgc3VjY2VlZC5cbiIpOworCisJLyogRG8gYmlnYXJyYXkgdGVzdCAqLworCWJpZ2FycmF5ID0gbWFsbG9jKDEgPDwgMjkpOworCWlmICghYmlnYXJyYXkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2NyYXRjaCBtZW1vcnkhXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19zZXRfYml0NjQoQklHX1RFU1RfQklULCBiaWdhcnJheSk7CisJcHJpbnRmKCI2NC1iaXQ6IGJpZyBiaXQgbnVtYmVyICgldSkgdGVzdDogJWQsIGV4cGVjdGVkICVkXG4iLAorCSAgICAgICBCSUdfVEVTVF9CSVQsIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSwKKwkgICAgICAgKDEgPDwgKEJJR19URVNUX0JJVCAmIDcpKSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKQorCQlleGl0KDEpOworCisJZXh0MmZzX2NsZWFyX2JpdDY0KEJJR19URVNUX0JJVCwgYmlnYXJyYXkpOworCisJcHJpbnRmKCI2NC1iaXQ6IGJpZyBiaXQgbnVtYmVyICgldSkgdGVzdDogJWQsIGV4cGVjdGVkIDBcbiIsCisJICAgICAgIEJJR19URVNUX0JJVCwKKwkgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9IDApCisJCWV4aXQoMSk7CisKKwlwcmludGYoIjY0LWJpdDogZXh0MmZzX3NldF9iaXQgYmlnX3Rlc3Qgc3VjY2Vzc2Z1bFxuIik7CisKKwkvKiBOb3cgdGVzdCBleHQyZnNfZmFzdF9zZXRfYml0ICovCisJbWVtc2V0KHRlc3RhcnJheSwgMCwgc2l6ZW9mKHRlc3RhcnJheSkpOworCWZvciAoaT0wOyBiaXRzX2xpc3RbaV0gPiAwOyBpKyspIHsKKwkJZXh0MmZzX2Zhc3Rfc2V0X2JpdDY0KGJpdHNfbGlzdFtpXSwgdGVzdGFycmF5KTsKKwl9CisJaWYgKG1lbWNtcCh0ZXN0YXJyYXksIGJpdGFycmF5LCBzaXplb2YodGVzdGFycmF5KSkgPT0gMCkgeworCQlwcmludGYoIjY0LWJpdDogZXh0MmZzX2Zhc3Rfc2V0X2JpdCB0ZXN0IHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiNjQtYml0OiBleHQyZnNfZmFzdF9zZXRfYml0IHRlc3QgZmFpbGVkLlxuIik7CisJCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQkJcHJpbnRmKCIlMDJ4ICIsIHRlc3RhcnJheVtpXSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCQlleGl0KDEpOworCX0KKwlmb3IgKGk9MDsgYml0c19saXN0W2ldID4gMDsgaSsrKSB7CisJCWV4dDJmc19jbGVhcl9iaXQ2NChiaXRzX2xpc3RbaV0sIHRlc3RhcnJheSk7CisJfQorCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHRlc3RhcnJheSk7IGkrKykgeworCQlpZiAodGVzdGFycmF5W2ldKSB7CisJCQlwcmludGYoIjY0LWJpdDogZXh0MmZzX2NsZWFyX2JpdCBmYWlsZWQsICIKKwkJCSAgICAgICAidGVzdGFycmF5WyVkXSBpcyAlZFxuIiwgaSwgdGVzdGFycmF5W2ldKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19jbGVhcl9iaXQgdGVzdCBzdWNjZWVkLlxuIik7CisKKyAgICAgICAgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdID0gMDsKKworCWV4dDJmc19mYXN0X3NldF9iaXQ2NChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKwlwcmludGYoIjY0LWJpdDogYmlnIGJpdCBudW1iZXIgKCV1KSB0ZXN0OiAlZCwgZXhwZWN0ZWQgJWRcbiIsCisJICAgICAgIEJJR19URVNUX0JJVCwgYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdLAorCSAgICAgICAoMSA8PCAoQklHX1RFU1RfQklUICYgNykpKTsKKwlpZiAoYmlnYXJyYXlbQklHX1RFU1RfQklUID4+IDNdICE9ICgxIDw8IChCSUdfVEVTVF9CSVQgJiA3KSkpCisJCWV4aXQoMSk7CisKKwlleHQyZnNfZmFzdF9jbGVhcl9iaXQ2NChCSUdfVEVTVF9CSVQsIGJpZ2FycmF5KTsKKworCXByaW50ZigiNjQtYml0OiBiaWcgYml0IG51bWJlciAoJXUpIHRlc3Q6ICVkLCBleHBlY3RlZCAwXG4iLAorCSAgICAgICBCSUdfVEVTVF9CSVQsIGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSk7CisJaWYgKGJpZ2FycmF5W0JJR19URVNUX0JJVCA+PiAzXSAhPSAwKQorCQlleGl0KDEpOworCisJcHJpbnRmKCI2NC1iaXQ6IGV4dDJmc19mYXN0X3NldF9iaXQgYmlnX3Rlc3Qgc3VjY2Vzc2Z1bFxuIik7CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2J5dGVzd2FwLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfYnl0ZXN3YXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYyZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2J5dGVzd2FwLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgdGhlIGJ5dGVzd2FwIGZ1bmN0aW9ucyB3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworX191MTYgdGVzdDFbXSA9IHsKKwkweDAwMDEsIDB4MDEwMCwKKwkweDEyMzQsIDB4MzQxMiwKKwkweGZmMDAsIDB4MDBmZiwKKwkweDQwMDAsIDB4MDA0MCwKKwkweGZlZmYsIDB4ZmZmZSwKKwkweDAwMDAsIDB4MDAwMAorCX07CisKK19fdTMyIHRlc3QyW10gPSB7CisJMHgwMDAwMDAwMSwgMHgwMTAwMDAwMCwKKwkweDgwMDAwMDAwLCAweDAwMDAwMDgwLAorCTB4MTIzNDU2NzgsIDB4Nzg1NjM0MTIsCisJMHhmZmZmMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwZmYwMDAwLCAweDAwMDBmZjAwLAorCTB4ZmYwMDAwMDAsIDB4MDAwMDAwZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCX07CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJaTsKKwlpbnQJZXJyb3JzID0gMDsKKworCXByaW50ZigiVGVzdGluZyBleHQyZnNfc3dhYjE2XG4iKTsKKwlpPTA7CisJZG8geworCQlwcmludGYoInN3YWIxNigweCUwNHgpID0gMHglMDR4XG4iLCB0ZXN0MVtpXSwKKwkJICAgICAgIGV4dDJmc19zd2FiMTYodGVzdDFbaV0pKTsKKwkJaWYgKGV4dDJmc19zd2FiMTYodGVzdDFbaV0pICE9IHRlc3QxW2krMV0pIHsKKwkJCXByaW50ZigiRXJyb3IhISEgICAlMDR4ICE9ICUwNHhcbiIsCisJCQkgICAgICAgZXh0MmZzX3N3YWIxNih0ZXN0MVtpXSksIHRlc3QxW2krMV0pOworCQkJZXJyb3JzKys7CisJCX0KKwkJaWYgKGV4dDJmc19zd2FiMTYodGVzdDFbaSsxXSkgIT0gdGVzdDFbaV0pIHsKKwkJCXByaW50ZigiRXJyb3IhISEgICAlMDR4ICE9ICUwNHhcbiIsCisJCQkgICAgICAgZXh0MmZzX3N3YWIxNih0ZXN0MVtpKzFdKSwgdGVzdDFbaV0pOworCQkJZXJyb3JzKys7CisJCX0KKwkJaSArPSAyOworCX0gd2hpbGUgKHRlc3QxW2ldICE9IDApOworCisJcHJpbnRmKCJUZXN0aW5nIGV4dDJmc19zd2FiMzJcbiIpOworCWkgPSAwOworCWRvIHsKKwkJcHJpbnRmKCJzd2FiMzIoMHglMDh4KSA9IDB4JTA4eFxuIiwgdGVzdDJbaV0sCisJCSAgICAgICBleHQyZnNfc3dhYjMyKHRlc3QyW2ldKSk7CisJCWlmIChleHQyZnNfc3dhYjMyKHRlc3QyW2ldKSAhPSB0ZXN0MltpKzFdKSB7CisJCQlwcmludGYoIkVycm9yISEhICAgJTA0eCAhPSAlMDR4XG4iLAorCQkJICAgICAgIGV4dDJmc19zd2FiMzIodGVzdDJbaV0pLCB0ZXN0MltpKzFdKTsKKwkJCWVycm9ycysrOworCQl9CisJCWlmIChleHQyZnNfc3dhYjMyKHRlc3QyW2krMV0pICE9IHRlc3QyW2ldKSB7CisJCQlwcmludGYoIkVycm9yISEhICAgJTA0eCAhPSAlMDR4XG4iLAorCQkJICAgICAgIGV4dDJmc19zd2FiMzIodGVzdDJbaSsxXSksIHRlc3QyW2ldKTsKKwkJCWVycm9ycysrOworCQl9CisJCWkgKz0gMjsKKwl9IHdoaWxlICh0ZXN0MltpXSAhPSAwKTsKKworCWlmICghZXJyb3JzKQorCQlwcmludGYoIk5vIGVycm9ycyBmb3VuZCBpbiB0aGUgYnl0ZXN3YXAgaW1wbGVtZW50YXRpb24hXG4iKTsKKworCXJldHVybiBlcnJvcnM7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfZnNfc3RydWN0LmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfZnNfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NGRmMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9mc19zdHJ1Y3QuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogVGhpcyB0ZXN0aW5nIHByb2dyYW0gY2hlY2tzIHRoZSBvZmZzZXQgb2YgdGhlIGV4dDJfZmlsc3lzIHN0cnVjdHVyZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJleHQyZnMuaCIKKworc3RydWN0IHN0cnVjdF9leHQyX2ZpbHN5cyBmczsKKworI2lmbmRlZiBvZmZzZXRvZgorI2RlZmluZSBvZmZzZXRvZih0eXBlLCBtZW1iZXIpICBfX2J1aWx0aW5fb2Zmc2V0b2YgKHR5cGUsIG1lbWJlcikKKyNlbmRpZgorI2RlZmluZSBjaGVja19maWVsZCh4KSBjdXJfb2Zmc2V0ID0gZG9fZmllbGQoI3gsIHNpemVvZihmcy54KSwJCVwKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHN0cnVjdF9leHQyX2ZpbHN5cywgeCksIFwKKwkJCQkJY3VyX29mZnNldCkKKworc3RhdGljIGludCBkb19maWVsZChjb25zdCBjaGFyICpmaWVsZCwgc2l6ZV90IHNpemUsIGludCBvZmZzZXQsIGludCBjdXJfb2Zmc2V0KQoreworCWlmIChvZmZzZXQgIT0gY3VyX29mZnNldCkgeworCQlwcmludGYoIlx0KHBhZGRpbmcgJWQgYnl0ZXM/KVxuIiwgb2Zmc2V0IC0gY3VyX29mZnNldCk7CisJfQorCXByaW50ZigiJThkICUtMzBzICUzdVxuIiwgb2Zmc2V0LCBmaWVsZCwgKHVuc2lnbmVkKSBzaXplKTsKKwlyZXR1cm4gb2Zmc2V0ICsgc2l6ZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworI2lmIChfX0dOVUNfXyA+PSA0KQorCWludCBjdXJfb2Zmc2V0ID0gMDsKKworCXByaW50ZigiJThzICUtMzBzICUzc1xuIiwgIm9mZnNldCIsICJmaWVsZCIsICJzaXplIik7CisJY2hlY2tfZmllbGQobWFnaWMpOworCWNoZWNrX2ZpZWxkKGlvKTsKKwljaGVja19maWVsZChmbGFncyk7CisJY2hlY2tfZmllbGQoZGV2aWNlX25hbWUpOworCWNoZWNrX2ZpZWxkKHN1cGVyKTsKKwljaGVja19maWVsZChibG9ja3NpemUpOworCWNoZWNrX2ZpZWxkKGZyYWdzaXplKTsKKwljaGVja19maWVsZChncm91cF9kZXNjX2NvdW50KTsKKwljaGVja19maWVsZChkZXNjX2Jsb2Nrcyk7CisJY2hlY2tfZmllbGQoZ3JvdXBfZGVzYyk7CisJY2hlY2tfZmllbGQoaW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisJY2hlY2tfZmllbGQoaW5vZGVfbWFwKTsKKwljaGVja19maWVsZChibG9ja19tYXApOworCWNoZWNrX2ZpZWxkKGdldF9ibG9ja3MpOworCWNoZWNrX2ZpZWxkKGNoZWNrX2RpcmVjdG9yeSk7CisJY2hlY2tfZmllbGQod3JpdGVfYml0bWFwcyk7CisJY2hlY2tfZmllbGQocmVhZF9pbm9kZSk7CisJY2hlY2tfZmllbGQod3JpdGVfaW5vZGUpOworCWNoZWNrX2ZpZWxkKGJhZGJsb2Nrcyk7CisJY2hlY2tfZmllbGQoZGJsaXN0KTsKKwljaGVja19maWVsZChzdHJpZGUpOworCWNoZWNrX2ZpZWxkKG9yaWdfc3VwZXIpOworCWNoZWNrX2ZpZWxkKGltYWdlX2hlYWRlcik7CisJY2hlY2tfZmllbGQodW1hc2spOworCWNoZWNrX2ZpZWxkKG5vdyk7CisJY2hlY2tfZmllbGQoY2x1c3Rlcl9yYXRpb19iaXRzKTsKKwljaGVja19maWVsZChyZXNlcnZlZCk7CisJY2hlY2tfZmllbGQocHJpdl9kYXRhKTsKKwljaGVja19maWVsZChpY2FjaGUpOworCWNoZWNrX2ZpZWxkKGltYWdlX2lvKTsKKwljaGVja19maWVsZChnZXRfYWxsb2NfYmxvY2spOworCWNoZWNrX2ZpZWxkKGJsb2NrX2FsbG9jX3N0YXRzKTsKKwljaGVja19maWVsZChtbXBfYnVmKTsKKwljaGVja19maWVsZChtbXBfY21wKTsKKwljaGVja19maWVsZChtbXBfZmQpOworCWNoZWNrX2ZpZWxkKG1tcF9sYXN0X3dyaXR0ZW4pOworCXByaW50ZigiRW5kaW5nIG9mZnNldCBpcyAlZFxuXG4iLCBjdXJfb2Zmc2V0KTsKKyNlbmRpZgorCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfZ2V0c2VjdHNpemUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9nZXRzZWN0c2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTFiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfZ2V0c2VjdHNpemUuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogdHN0X2dldHNpemUuYyAtLS0gdGhpcyBmdW5jdGlvbiB0ZXN0cyB0aGUgZ2V0c2l6ZSBmdW5jdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJbHNlY3RzaXplLCBwc2VjdHNpemU7CisJaW50CXJldHZhbDsKKworCWlmIChhcmdjIDwgMikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBkZXZpY2VcbiIsIGFyZ3ZbMF0pOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3NlY3RzaXplKGFyZ3ZbMV0sICZsc2VjdHNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfZ2V0X2RldmljZV9zZWN0c2l6ZSIpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2RldmljZV9waHlzX3NlY3RzaXplKGFyZ3ZbMV0sICZwc2VjdHNpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfZ2V0X2RldmljZV9waHlzX3NlY3RzaXplIik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiRGV2aWNlICVzIGhhcyBsb2dpY2FsL3BoeXNpY2FsIHNlY3RvciBzaXplIG9mICVkLyVkLlxuIiwKKwkgICAgICAgYXJndlsxXSwgbHNlY3RzaXplLCBwc2VjdHNpemUpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy90c3RfZ2V0c2l6ZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2dldHNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTU3OGZhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2dldHNpemUuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogdHN0X2dldHNpemUuYyAtLS0gdGhpcyBmdW5jdGlvbiB0ZXN0cyB0aGUgZ2V0c2l6ZSBmdW5jdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlibGtfdAkJYmxvY2tzOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2RldmljZV9zaXplKGFyZ3ZbMV0sIDEwMjQsICZibG9ja3MpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBnZXR0aW5nIGRldmljZSBzaXplIik7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiJXMgaXMgZGV2aWNlIGhhcyAldSBibG9ja3MuXG4iLCBhcmd2WzFdLCBibG9ja3MpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2lub2RlX3NpemUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9pbm9kZV9zaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwYWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9pbm9kZV9zaXplLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIFRoaXMgdGVzdGluZyBwcm9ncmFtIG1ha2VzIHN1cmUgdGhlIGV4dDJfaW5vZGUgc3RydWN0dXJlIGlzIDEwMjQgYnl0ZXMgbG9uZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisKK3N0cnVjdCBleHQyX2lub2RlX2xhcmdlIGlub2RlOworCisjaWZuZGVmIG9mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgIF9fYnVpbHRpbl9vZmZzZXRvZih0eXBlLCBtZW1iZXIpCisjZW5kaWYKKworI2RlZmluZSBjaGVja19maWVsZCh4LCBzKSBjdXJfb2Zmc2V0ID0gZG9fZmllbGQoI3gsIHMsIHNpemVvZihpbm9kZS54KSwJICAgICAgIFwKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IGV4dDJfaW5vZGVfbGFyZ2UsIHgpLCAgXAorCQkJCQljdXJfb2Zmc2V0KQorCitzdGF0aWMgaW50IGRvX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBjdXJfc2l6ZSwKKwkJICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY3VyX29mZnNldCkKK3sKKwlpZiAoc2l6ZSAhPSBjdXJfc2l6ZSkgeworCQlwcmludGYoImVycm9yOiAlcyBzaXplICV1IHNob3VsZCBiZSAldVxuIiwKKwkJICAgICAgIGZpZWxkLCBjdXJfc2l6ZSwgc2l6ZSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChvZmZzZXQgIT0gY3VyX29mZnNldCkgeworCQlwcmludGYoImVycm9yOiAlcyBvZmZzZXQgJXUgc2hvdWxkIGJlICV1XG4iLAorCQkgICAgICAgZmllbGQsIGN1cl9vZmZzZXQsIG9mZnNldCk7CisJCWV4aXQoMSk7CisJfQorCXByaW50ZigiJThkICUtMzBzICUzdVxuIiwgb2Zmc2V0LCBmaWVsZCwgKHVuc2lnbmVkKSBzaXplKTsKKwlyZXR1cm4gb2Zmc2V0ICsgc2l6ZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworI2lmIChfX0dOVUNfXyA+PSA0KQorCWludCBjdXJfb2Zmc2V0ID0gMDsKKworCXByaW50ZigiJThzICUtMzBzICUzc1xuIiwgIm9mZnNldCIsICJmaWVsZCIsICJzaXplIik7CisJY2hlY2tfZmllbGQoaV9tb2RlLCAyKTsKKwljaGVja19maWVsZChpX3VpZCwgMik7CisJY2hlY2tfZmllbGQoaV9zaXplLCA0KTsKKwljaGVja19maWVsZChpX2F0aW1lLCA0KTsKKwljaGVja19maWVsZChpX2N0aW1lLCA0KTsKKwljaGVja19maWVsZChpX210aW1lLCA0KTsKKwljaGVja19maWVsZChpX2R0aW1lLCA0KTsKKwljaGVja19maWVsZChpX2dpZCwgMik7CisJY2hlY2tfZmllbGQoaV9saW5rc19jb3VudCwgMik7CisJY2hlY2tfZmllbGQoaV9ibG9ja3MsIDQpOworCWNoZWNrX2ZpZWxkKGlfZmxhZ3MsIDQpOworCWNoZWNrX2ZpZWxkKG9zZDEubGludXgxLmxfaV92ZXJzaW9uLCA0KTsKKwljaGVja19maWVsZChpX2Jsb2NrLCAxNSAqIDQpOworCWNoZWNrX2ZpZWxkKGlfZ2VuZXJhdGlvbiwgNCk7CisJY2hlY2tfZmllbGQoaV9maWxlX2FjbCwgNCk7CisJY2hlY2tfZmllbGQoaV9zaXplX2hpZ2gsIDQpOworCWNoZWNrX2ZpZWxkKGlfZmFkZHIsIDQpOworCWNoZWNrX2ZpZWxkKG9zZDIubGludXgyLmxfaV9ibG9ja3NfaGksIDIpOworCWNoZWNrX2ZpZWxkKG9zZDIubGludXgyLmxfaV9maWxlX2FjbF9oaWdoLCAyKTsKKwljaGVja19maWVsZChvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gsIDIpOworCWNoZWNrX2ZpZWxkKG9zZDIubGludXgyLmxfaV9naWRfaGlnaCwgMik7CisJY2hlY2tfZmllbGQob3NkMi5saW51eDIubF9pX2NoZWNrc3VtX2xvLCAyKTsKKwljaGVja19maWVsZChvc2QyLmxpbnV4Mi5sX2lfcmVzZXJ2ZWQsIDIpOworCWRvX2ZpZWxkKCJTbWFsbCBpbm9kZSBlbmQiLCAwLCAwLCBjdXJfb2Zmc2V0LCAxMjgpOworCWNoZWNrX2ZpZWxkKGlfZXh0cmFfaXNpemUsIDIpOworCWNoZWNrX2ZpZWxkKGlfY2hlY2tzdW1faGksIDIpOworCWNoZWNrX2ZpZWxkKGlfY3RpbWVfZXh0cmEsIDQpOworCWNoZWNrX2ZpZWxkKGlfbXRpbWVfZXh0cmEsIDQpOworCWNoZWNrX2ZpZWxkKGlfYXRpbWVfZXh0cmEsIDQpOworCWNoZWNrX2ZpZWxkKGlfY3J0aW1lLCA0KTsKKwljaGVja19maWVsZChpX2NydGltZV9leHRyYSwgNCk7CisJY2hlY2tfZmllbGQoaV92ZXJzaW9uX2hpLCA0KTsKKwkvKiBUaGlzIHNpemUgd2lsbCBjaGFuZ2UgYXMgbmV3IGZpZWxkcyBhcmUgYWRkZWQgKi8KKwlkb19maWVsZCgiTGFyZ2UgaW5vZGUgZW5kIiwgMCwgMCwgY3VyX29mZnNldCwgc2l6ZW9mKGlub2RlKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9pc2Nhbi5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X2lzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlZWI3NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9pc2Nhbi5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogdHN0X2lub2RlLmMgLS0tIHRoaXMgZnVuY3Rpb24gdGVzdHMgdGhlIGlub2RlIHNjYW4gZnVuY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitibGs2NF90IHRlc3RfdmVjW10gPSB7IDgsIDEyLCAyNCwgMzQsIDQzLCA0NCwgMTAwLCAwIH07CisKK2V4dDJfZmlsc3lzCXRlc3RfZnM7CitleHQyZnNfYmxvY2tfYml0bWFwIGJhZF9ibG9ja19tYXAsIHRvdWNoZWRfbWFwOworZXh0MmZzX2lub2RlX2JpdG1hcCBiYWRfaW5vZGVfbWFwOworYmFkYmxvY2tzX2xpc3QJdGVzdF9iYWRibG9ja3M7CisKK2ludCBmaXJzdF9ub19jb21tYSA9IDE7CitpbnQgZmFpbGVkID0gMDsKKworc3RhdGljIHZvaWQgaXNjYW5fdGVzdF9yZWFkX2JsazY0KHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgaW50IGNvdW50LCBlcnJjb2RlX3QgZXJyKQoreworCWludAlpOworCisJaWYgKGZpcnN0X25vX2NvbW1hKQorCQlmaXJzdF9ub19jb21tYSA9IDA7CisJZWxzZQorCQlwcmludGYoIiwgIik7CisKKwlpZiAoY291bnQgPiAxKQorCQlwcmludGYoIiVsbHUtJWxsdSIsIGJsb2NrLCBibG9jaytjb3VudC0xKTsKKwllbHNlCisJCXByaW50ZigiJWxsdSIsIGJsb2NrKTsKKworCWZvciAoaT0wOyBpIDwgY291bnQ7IGkrKywgYmxvY2srKykgeworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMih0b3VjaGVkX21hcCwgYmxvY2spKSB7CisJCQlwcmludGYoIlxuRHVwbGljYXRlIGJsb2NrPyE/IC0tLSAlbGx1XG4iLCBibG9jayk7CisJCQlmYWlsZWQrKzsKKwkJCWZpcnN0X25vX2NvbW1hID0gMTsKKwkJfQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHRvdWNoZWRfbWFwLCBibG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc2Nhbl90ZXN0X3JlYWRfYmxrKHVuc2lnbmVkIGxvbmcgYmxvY2ssIGludCBjb3VudCwgZXJyY29kZV90IGVycikKK3sKKwlpc2Nhbl90ZXN0X3JlYWRfYmxrNjQoYmxvY2ssIGNvdW50LCBlcnIpOworfQorCisvKgorICogU2V0dXAgdGhlIHZhcmlhYmxlcyBmb3IgZG9pbmcgdGhlIGlub2RlIHNjYW4gdGVzdC4KKyAqLworc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJaTsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKworCWluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSgpOworCisJbWVtc2V0KCZwYXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJnBhcmFtLCAxMjAwMCk7CisKKworCXRlc3RfaW9fY2JfcmVhZF9ibGsgPSBpc2Nhbl90ZXN0X3JlYWRfYmxrOworCXRlc3RfaW9fY2JfcmVhZF9ibGs2NCA9IGlzY2FuX3Rlc3RfcmVhZF9ibGs2NDsKKworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKCJ0ZXN0IGZzIiwgRVhUMl9GTEFHXzY0QklUUywgJnBhcmFtLAorCQkJCSAgIHRlc3RfaW9fbWFuYWdlciwgJnRlc3RfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkiV2hpbGUgaW5pdGlhbGl6aW5nIGZpbGVzeXN0ZW0iKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX3RhYmxlcyh0ZXN0X2ZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIldoaWxlIGFsbG9jYXRpbmcgdGFibGVzIGZvciB0ZXN0IGZpbGVzeXN0ZW0iKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcCh0ZXN0X2ZzLCAiYmFkIGJsb2NrIG1hcCIsCisJCQkJCSAgICAgICZiYWRfYmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoInNldHVwIiwgcmV0dmFsLAorCQkJIldoaWxlIGFsbG9jYXRpbmcgYmFkX2Jsb2NrIGJpdG1hcCIpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKHRlc3RfZnMsICJ0b3VjaGVkIG1hcCIsCisJCQkJCSAgICAgICZ0b3VjaGVkX21hcCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCSJXaGlsZSBhbGxvY2F0aW5nIHRvdWNoZWQgYmxvY2sgYml0bWFwIik7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9pbm9kZV9iaXRtYXAodGVzdF9mcywgImJhZCBpbm9kZSBtYXAiLAorCQkJCQkgICAgICAmYmFkX2lub2RlX21hcCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwKKwkJCSJXaGlsZSBhbGxvY2F0aW5nIGJhZCBpbm9kZSBiaXRtYXAiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKCZ0ZXN0X2JhZGJsb2NrcywgNSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJzZXR1cCIsIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGJhZGJsb2NrcyBsaXN0Iik7CisJCWV4aXQoMSk7CisJfQorCWZvciAoaT0wOyB0ZXN0X3ZlY1tpXTsgaSsrKSB7CisJCXJldHZhbCA9IGV4dDJmc19iYWRibG9ja3NfbGlzdF9hZGQodGVzdF9iYWRibG9ja3MsIHRlc3RfdmVjW2ldKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycigic2V0dXAiLCByZXR2YWwsCisJCQkJIndoaWxlIGFkZGluZyB0ZXN0IHZlY3RvciAlZCIsIGkpOworCQkJZXhpdCgxKTsKKwkJfQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGJhZF9ibG9ja19tYXAsIHRlc3RfdmVjW2ldKTsKKwl9CisJdGVzdF9mcy0+YmFkYmxvY2tzID0gdGVzdF9iYWRibG9ja3M7Cit9CisKKy8qCisgKiBJdGVyYXRlIHVzaW5nIGlub2RlX3NjYW4KKyAqLworc3RhdGljIHZvaWQgaXRlcmF0ZSh2b2lkKQoreworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCWV4dDJfaW5vZGVfc2NhbglzY2FuOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pbm9fdAlpbm87CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKHRlc3RfZnMsIDgsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoIml0ZXJhdGUiLCByZXR2YWwsICJXaGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKCJSZWFkaW5nIGJsb2NrczogIik7CisJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJpdGVyYXRlIiwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBmaXJzdCBpbm9kZSIpOworCQlleGl0KDEpOworCX0KKwl3aGlsZSAoaW5vKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKSB7CisJCQlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGJhZF9pbm9kZV9tYXAsIGlubyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJpdGVyYXRlIiwgcmV0dmFsLAorCQkJCSJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJcHJpbnRmKCJcbiIpOworCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworfQorCisvKgorICogVmVyaWZ5IHRoZSB0b3VjaGVkIG1hcAorICovCitzdGF0aWMgdm9pZCBjaGVja19tYXAodm9pZCkKK3sKKwlpbnQJaSwgaiwgZmlyc3Q9MTsKKwlibGs2NF90CWJsazsKKworCWZvciAoaT0wOyB0ZXN0X3ZlY1tpXTsgaSsrKSB7CisJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRvdWNoZWRfbWFwLCB0ZXN0X3ZlY1tpXSkpIHsKKwkJCXByaW50ZigiQmFkIGJsb2NrIHdhcyB0b3VjaGVkIC0tLSAlbGx1XG4iLCB0ZXN0X3ZlY1tpXSk7CisJCQlmYWlsZWQrKzsKKwkJCWZpcnN0X25vX2NvbW1hID0gMTsKKwkJfQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHRvdWNoZWRfbWFwLCB0ZXN0X3ZlY1tpXSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0ZXN0X2ZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJZm9yIChqPTAsIGJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2ModGVzdF9mcywgaSk7CisJCSAgICAgaiA8IHRlc3RfZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCSAgICAgaisrLCBibGsrKykgeworCQkJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHRvdWNoZWRfbWFwLCBibGspICYmCisJCQkgICAgIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYmFkX2Jsb2NrX21hcCwgYmxrKSkgeworCQkJCXByaW50ZigiTWlzc2luZyBibG9jayAtLS0gJWxsdVxuIiwgYmxrKTsKKwkJCQlmYWlsZWQrKzsKKwkJCX0KKwkJfQorCX0KKwlwcmludGYoIkJhZCBpbm9kZXM6ICIpOworCWZvciAoaT0xOyBpIDw9IHRlc3RfZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudDsgaSsrKSB7CisJCWlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGJhZF9pbm9kZV9tYXAsIGkpKSB7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSAwOworCQkJZWxzZQorCQkJCXByaW50ZigiLCAiKTsKKwkJCXByaW50ZigiJXUiLCBpKTsKKwkJfQorCX0KKwlwcmludGYoIlxuIik7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXNldHVwKCk7CisJaXRlcmF0ZSgpOworCWNoZWNrX21hcCgpOworCWlmICghZmFpbGVkKQorCQlwcmludGYoIklub2RlIHNjYW4gdGVzdGVkIE9LIVxuIik7CisJcmV0dXJuIGZhaWxlZDsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X3N1cGVyX3NpemUuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9zdXBlcl9zaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwZWU1NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF9zdXBlcl9zaXplLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHN1cGVyYmxvY2sgc2l6ZSBpcyAxMDI0IGJ5dGVzIGxvbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorCisjZGVmaW5lIHNiX3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrCisjZGVmaW5lIHNiX3N0cnVjdF9uYW1lICJleHQyX3N1cGVyX2Jsb2NrIgorCitzdHJ1Y3Qgc2Jfc3RydWN0IHNiOworCisjaWZuZGVmIG9mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgIF9fYnVpbHRpbl9vZmZzZXRvZiAodHlwZSwgbWVtYmVyKQorI2VuZGlmCisKKyNkZWZpbmUgY2hlY2tfZmllbGQoeCwgcykgY3VyX29mZnNldCA9IGRvX2ZpZWxkKCN4LCBzLCBzaXplb2Yoc2IueCksCSAgICAgICBcCisJCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2Jfc3RydWN0LCB4KSwgXAorCQkJCQkJY3VyX29mZnNldCkKKworc3RhdGljIGludCBkb19maWVsZChjb25zdCBjaGFyICpmaWVsZCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgY3VyX3NpemUsCisJCSAgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGN1cl9vZmZzZXQpCit7CisJaWYgKHNpemUgIT0gY3VyX3NpemUpIHsKKwkJcHJpbnRmKCJlcnJvcjogJXMgc2l6ZSAldSBzaG91bGQgYmUgJXVcbiIsCisJCSAgICAgICBmaWVsZCwgY3VyX3NpemUsIHNpemUpOworCQlleGl0KDEpOworCX0KKwlpZiAob2Zmc2V0ICE9IGN1cl9vZmZzZXQpIHsKKwkJcHJpbnRmKCJlcnJvcjogJXMgb2Zmc2V0ICV1IHNob3VsZCBiZSAldVxuIiwKKwkJICAgICAgIGZpZWxkLCBjdXJfb2Zmc2V0LCBvZmZzZXQpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIiU4ZCAlLTMwcyAlM3VcbiIsIG9mZnNldCwgZmllbGQsIHNpemUpOworCXJldHVybiBvZmZzZXQgKyBzaXplOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisjaWYgKF9fR05VQ19fID49IDQpCisJaW50IGN1cl9vZmZzZXQgPSAwOworCisJcHJpbnRmKCIlOHMgJS0zMHMgJTNzXG4iLCAib2Zmc2V0IiwgImZpZWxkIiwgInNpemUiKTsKKwljaGVja19maWVsZChzX2lub2Rlc19jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19ibG9ja3NfY291bnQsIDQpOworCWNoZWNrX2ZpZWxkKHNfcl9ibG9ja3NfY291bnQsIDQpOworCWNoZWNrX2ZpZWxkKHNfZnJlZV9ibG9ja3NfY291bnQsIDQpOworCWNoZWNrX2ZpZWxkKHNfZnJlZV9pbm9kZXNfY291bnQsIDQpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfZGF0YV9ibG9jaywgNCk7CisJY2hlY2tfZmllbGQoc19sb2dfYmxvY2tfc2l6ZSwgNCk7CisJY2hlY2tfZmllbGQoc19sb2dfY2x1c3Rlcl9zaXplLCA0KTsKKwljaGVja19maWVsZChzX2Jsb2Nrc19wZXJfZ3JvdXAsIDQpOworCWNoZWNrX2ZpZWxkKHNfY2x1c3RlcnNfcGVyX2dyb3VwLCA0KTsKKwljaGVja19maWVsZChzX2lub2Rlc19wZXJfZ3JvdXAsIDQpOworCWNoZWNrX2ZpZWxkKHNfbXRpbWUsIDQpOworCWNoZWNrX2ZpZWxkKHNfd3RpbWUsIDQpOworCWNoZWNrX2ZpZWxkKHNfbW50X2NvdW50LCAyKTsKKwljaGVja19maWVsZChzX21heF9tbnRfY291bnQsIDIpOworCWNoZWNrX2ZpZWxkKHNfbWFnaWMsIDIpOworCWNoZWNrX2ZpZWxkKHNfc3RhdGUsIDIpOworCWNoZWNrX2ZpZWxkKHNfZXJyb3JzLCAyKTsKKwljaGVja19maWVsZChzX21pbm9yX3Jldl9sZXZlbCwgMik7CisJY2hlY2tfZmllbGQoc19sYXN0Y2hlY2ssIDQpOworCWNoZWNrX2ZpZWxkKHNfY2hlY2tpbnRlcnZhbCwgNCk7CisJY2hlY2tfZmllbGQoc19jcmVhdG9yX29zLCA0KTsKKwljaGVja19maWVsZChzX3Jldl9sZXZlbCwgNCk7CisJY2hlY2tfZmllbGQoc19kZWZfcmVzdWlkLCAyKTsKKwljaGVja19maWVsZChzX2RlZl9yZXNnaWQsIDIpOworCWNoZWNrX2ZpZWxkKHNfZmlyc3RfaW5vLCA0KTsKKwljaGVja19maWVsZChzX2lub2RlX3NpemUsIDIpOworCWNoZWNrX2ZpZWxkKHNfYmxvY2tfZ3JvdXBfbnIsIDIpOworCWNoZWNrX2ZpZWxkKHNfZmVhdHVyZV9jb21wYXQsIDQpOworCWNoZWNrX2ZpZWxkKHNfZmVhdHVyZV9pbmNvbXBhdCwgNCk7CisJY2hlY2tfZmllbGQoc19mZWF0dXJlX3JvX2NvbXBhdCwgNCk7CisJY2hlY2tfZmllbGQoc191dWlkLCAxNik7CisJY2hlY2tfZmllbGQoc192b2x1bWVfbmFtZSwgMTYpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9tb3VudGVkLCA2NCk7CisJY2hlY2tfZmllbGQoc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwLCA0KTsKKwljaGVja19maWVsZChzX3ByZWFsbG9jX2Jsb2NrcywgMSk7CisJY2hlY2tfZmllbGQoc19wcmVhbGxvY19kaXJfYmxvY2tzLCAxKTsKKwljaGVja19maWVsZChzX3Jlc2VydmVkX2dkdF9ibG9ja3MsIDIpOworCWNoZWNrX2ZpZWxkKHNfam91cm5hbF91dWlkLCAxNik7CisJY2hlY2tfZmllbGQoc19qb3VybmFsX2ludW0sIDQpOworCWNoZWNrX2ZpZWxkKHNfam91cm5hbF9kZXYsIDQpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9vcnBoYW4sIDQpOworCWNoZWNrX2ZpZWxkKHNfaGFzaF9zZWVkLCA0ICogNCk7CisJY2hlY2tfZmllbGQoc19kZWZfaGFzaF92ZXJzaW9uLCAxKTsKKwljaGVja19maWVsZChzX2pubF9iYWNrdXBfdHlwZSwgMSk7CisJY2hlY2tfZmllbGQoc19kZXNjX3NpemUsIDIpOworCWNoZWNrX2ZpZWxkKHNfZGVmYXVsdF9tb3VudF9vcHRzLCA0KTsKKwljaGVja19maWVsZChzX2ZpcnN0X21ldGFfYmcsIDQpOworCWNoZWNrX2ZpZWxkKHNfbWtmc190aW1lLCA0KTsKKwljaGVja19maWVsZChzX2pubF9ibG9ja3MsIDE3ICogNCk7CisJY2hlY2tfZmllbGQoc19ibG9ja3NfY291bnRfaGksIDQpOworCWNoZWNrX2ZpZWxkKHNfcl9ibG9ja3NfY291bnRfaGksIDQpOworCWNoZWNrX2ZpZWxkKHNfZnJlZV9ibG9ja3NfaGksIDQpOworCWNoZWNrX2ZpZWxkKHNfbWluX2V4dHJhX2lzaXplLCAyKTsKKwljaGVja19maWVsZChzX3dhbnRfZXh0cmFfaXNpemUsIDIpOworCWNoZWNrX2ZpZWxkKHNfZmxhZ3MsIDQpOworCWNoZWNrX2ZpZWxkKHNfcmFpZF9zdHJpZGUsIDIpOworCWNoZWNrX2ZpZWxkKHNfbW1wX3VwZGF0ZV9pbnRlcnZhbCwgMik7CisJY2hlY2tfZmllbGQoc19tbXBfYmxvY2ssIDgpOworCWNoZWNrX2ZpZWxkKHNfcmFpZF9zdHJpcGVfd2lkdGgsIDQpOworCWNoZWNrX2ZpZWxkKHNfbG9nX2dyb3Vwc19wZXJfZmxleCwgMSk7CisJY2hlY2tfZmllbGQoc19jaGVja3N1bV90eXBlLCAxKTsKKwljaGVja19maWVsZChzX2VuY3J5cHRpb25fbGV2ZWwsIDEpOworCWNoZWNrX2ZpZWxkKHNfcmVzZXJ2ZWRfcGFkLCAxKTsKKwljaGVja19maWVsZChzX2tieXRlc193cml0dGVuLCA4KTsKKwljaGVja19maWVsZChzX3NuYXBzaG90X2ludW0sIDQpOworCWNoZWNrX2ZpZWxkKHNfc25hcHNob3RfaWQsIDQpOworCWNoZWNrX2ZpZWxkKHNfc25hcHNob3Rfcl9ibG9ja3NfY291bnQsIDgpOworCWNoZWNrX2ZpZWxkKHNfc25hcHNob3RfbGlzdCwgNCk7CisJY2hlY2tfZmllbGQoc19lcnJvcl9jb3VudCwgNCk7CisJY2hlY2tfZmllbGQoc19maXJzdF9lcnJvcl90aW1lLCA0KTsKKwljaGVja19maWVsZChzX2ZpcnN0X2Vycm9yX2lubywgNCk7CisJY2hlY2tfZmllbGQoc19maXJzdF9lcnJvcl9ibG9jaywgOCk7CisJY2hlY2tfZmllbGQoc19maXJzdF9lcnJvcl9mdW5jLCAzMik7CisJY2hlY2tfZmllbGQoc19maXJzdF9lcnJvcl9saW5lLCA0KTsKKwljaGVja19maWVsZChzX2xhc3RfZXJyb3JfdGltZSwgNCk7CisJY2hlY2tfZmllbGQoc19sYXN0X2Vycm9yX2lubywgNCk7CisJY2hlY2tfZmllbGQoc19sYXN0X2Vycm9yX2xpbmUsIDQpOworCWNoZWNrX2ZpZWxkKHNfbGFzdF9lcnJvcl9ibG9jaywgOCk7CisJY2hlY2tfZmllbGQoc19sYXN0X2Vycm9yX2Z1bmMsIDMyKTsKKwljaGVja19maWVsZChzX21vdW50X29wdHMsIDY0KTsKKwljaGVja19maWVsZChzX3Vzcl9xdW90YV9pbnVtLCA0KTsKKwljaGVja19maWVsZChzX2dycF9xdW90YV9pbnVtLCA0KTsKKwljaGVja19maWVsZChzX292ZXJoZWFkX2Jsb2NrcywgNCk7CisgCWNoZWNrX2ZpZWxkKHNfYmFja3VwX2JncywgOCk7CisJY2hlY2tfZmllbGQoc19lbmNyeXB0X2FsZ29zLCA0KTsKKwljaGVja19maWVsZChzX2VuY3J5cHRfcHdfc2FsdCwgMTYpOworCWNoZWNrX2ZpZWxkKHNfbHBmX2lubywgNCk7CisJY2hlY2tfZmllbGQoc19yZXNlcnZlZCwgMTAwICogNCk7CisJY2hlY2tfZmllbGQoc19jaGVja3N1bSwgNCk7CisJZG9fZmllbGQoIlN1cGVyYmxvY2sgZW5kIiwgMCwgMCwgY3VyX29mZnNldCwgMTAyNCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF90eXBlcy5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdHN0X3R5cGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3NDk4NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3RzdF90eXBlcy5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBUaGlzIHRlc3RpbmcgcHJvZ3JhbSBtYWtlcyBzdXJlIHRoZSBleHQyX3R5cGVzIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX3R5cGVzLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoc2l6ZW9mKF9fdTgpICE9IDEpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191OCkgaXMgJWQgc2hvdWxkIGJlIDFcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3U4KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zOCkgIT0gMSkgeworCQlwcmludGYoIlNpemVvZihfczgpIGlzICVkIHNob3VsZCBiZSAxXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zOCkpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fdTE2KSAhPSAyKSB7CisJCXByaW50ZigiU2l6ZW9mKF9fdTE2KSBpcyAlZCBzaG91bGQgYmUgMlxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fdTE2KSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX19zMTYpICE9IDIpIHsKKwkJcHJpbnRmKCJTaXplb2YoX19zMTYpIGlzICVkIHNob3VsZCBiZSAyXG4iLAorCQkgICAgICAgKGludClzaXplb2YoX19zMTYpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3UzMikgIT0gNCkgeworCQlwcmludGYoIlNpemVvZihfX3UzMikgaXMgJWQgc2hvdWxkIGJlIDRcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3UzMikpOworCQlleGl0KDEpOworCX0KKwlpZiAoc2l6ZW9mKF9fczMyKSAhPSA0KSB7CisJCXByaW50ZigiU2l6ZW9mKF9fczMyKSBpcyAlZCBzaG91bGQgYmUgNFxuIiwKKwkJICAgICAgIChpbnQpc2l6ZW9mKF9fczMyKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaXplb2YoX191NjQpICE9IDgpIHsKKwkJcHJpbnRmKCJTaXplb2YoX191NjQpIGlzICVkIHNob3VsZCBiZSA4XG4iLAorCQkgICAgICAgKGludClzaXplb2YoX191NjQpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHNpemVvZihfX3M2NCkgIT0gOCkgeworCQlwcmludGYoIlNpemVvZihfX3M2NCkgaXMgJWQgc2hvdWxkIGJlIDhcbiIsCisJCSAgICAgICAoaW50KXNpemVvZihfX3M2NCkpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIlRoZSBleHQyX3R5cGVzLmggdHlwZXMgYXJlIGNvcnJlY3QuXG4iKTsKKwlleGl0KDApOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy91bmRvX2lvLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy91bmRvX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1NWFiZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3VuZG9faW8uYwpAQCAtMCwwICsxLDYyMiBAQAorLyoKKyAqIHVuZG9faW8uYyAtLS0gVGhpcyBpcyB0aGUgdW5kbyBpbyBtYW5hZ2VyIHRoYXQgY29waWVzIHRoZSBvbGQgZGF0YSB0aGF0CisgKiBjb3BpZXMgdGhlIG9sZCBkYXRhIGJlaW5nIG92ZXJ3cml0dGVuIGludG8gYSB0ZGIgZGF0YWJhc2UKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA3CisgKiBBdXRob3IgQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInRkYi5oIgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworLyoKKyAqIEZvciBjaGVja2luZyBzdHJ1Y3R1cmUgbWFnaWMgbnVtYmVycy4uLgorICovCisKKyNkZWZpbmUgRVhUMl9DSEVDS19NQUdJQyhzdHJ1Y3QsIGNvZGUpIFwKKwkgIGlmICgoc3RydWN0KS0+bWFnaWMgIT0gKGNvZGUpKSByZXR1cm4gKGNvZGUpCisKK3N0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSB7CisJaW50CW1hZ2ljOworCVREQl9DT05URVhUICp0ZGI7CisJY2hhciAqdGRiX2ZpbGU7CisKKwkvKiBUaGUgYmFja2luZyBpbyBjaGFubmVsICovCisJaW9fY2hhbm5lbCByZWFsOworCisJaW50IHRkYl9kYXRhX3NpemU7CisJaW50IHRkYl93cml0dGVuOworCisJLyogdG8gc3VwcG9ydCBvZmZzZXQgaW4gdW5peCBJL08gbWFuYWdlciAqLworCWV4dDJfbG9mZl90IG9mZnNldDsKK307CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IHVuZG9fY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19yZWFkX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCSBpbnQgY291bnQsIHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCB1bmRvX3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCSAgaW50IGNvdW50LCBjb25zdCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb193cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IHVuZG9fZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb193cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCB1bmRvX3NldF9vcHRpb24oaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRpb24sCisJCQkJIGNvbnN0IGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHVuZG9fZ2V0X3N0YXRzKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW9fc3RhdHMgKnN0YXRzKTsKKworc3RhdGljIHN0cnVjdCBzdHJ1Y3RfaW9fbWFuYWdlciBzdHJ1Y3RfdW5kb19tYW5hZ2VyID0geworCUVYVDJfRVRfTUFHSUNfSU9fTUFOQUdFUiwKKwkiVW5kbyBJL08gTWFuYWdlciIsCisJdW5kb19vcGVuLAorCXVuZG9fY2xvc2UsCisJdW5kb19zZXRfYmxrc2l6ZSwKKwl1bmRvX3JlYWRfYmxrLAorCXVuZG9fd3JpdGVfYmxrLAorCXVuZG9fZmx1c2gsCisJdW5kb193cml0ZV9ieXRlLAorCXVuZG9fc2V0X29wdGlvbiwKKwl1bmRvX2dldF9zdGF0cywKKwl1bmRvX3JlYWRfYmxrNjQsCisJdW5kb193cml0ZV9ibGs2NCwKK307CisKK2lvX21hbmFnZXIgdW5kb19pb19tYW5hZ2VyID0gJnN0cnVjdF91bmRvX21hbmFnZXI7CitzdGF0aWMgaW9fbWFuYWdlciB1bmRvX2lvX2JhY2tpbmdfbWFuYWdlciA7CitzdGF0aWMgY2hhciAqdGRiX2ZpbGU7CitzdGF0aWMgaW50IGFjdHVhbF9zaXplOworCitzdGF0aWMgdW5zaWduZWQgY2hhciBtdGltZV9rZXlbXSA9ICJmaWxlc3lzdGVtIE1USU1FIjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJsa3NpemVfa2V5W10gPSAiZmlsZXN5c3RlbSBCTEtTSVpFIjsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHV1aWRfa2V5W10gPSAiZmlsZXN5c3RlbSBVVUlEIjsKKworZXJyY29kZV90IHNldF91bmRvX2lvX2JhY2tpbmdfbWFuYWdlcihpb19tYW5hZ2VyIG1hbmFnZXIpCit7CisJLyoKKwkgKiBXZSBtYXkgd2FudCB0byBkbyBzb21lIHZhbGlkYXRpb24gbGF0ZXIKKwkgKi8KKwl1bmRvX2lvX2JhY2tpbmdfbWFuYWdlciA9IG1hbmFnZXI7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBzZXRfdW5kb19pb19iYWNrdXBfZmlsZShjaGFyICpmaWxlX25hbWUpCit7CisJdGRiX2ZpbGUgPSBzdHJkdXAoZmlsZV9uYW1lKTsKKworCWlmICh0ZGJfZmlsZSA9PSBOVUxMKSB7CisJCXJldHVybiBFWFQyX0VUX05PX01FTU9SWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCB3cml0ZV9maWxlX3N5c3RlbV9pZGVudGl0eShpb19jaGFubmVsIHVuZG9fY2hhbm5lbCwKKwkJCQkJCQlUREJfQ09OVEVYVCAqdGRiKQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc3VwZXI7CisJVERCX0RBVEEgdGRiX2tleSwgdGRiX2RhdGE7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCWlvX2NoYW5uZWwgY2hhbm5lbDsKKwlpbnQgYmxvY2tfc2l6ZSA7CisKKwlkYXRhID0gKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqKSB1bmRvX2NoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwljaGFubmVsID0gZGF0YS0+cmVhbDsKKwlibG9ja19zaXplID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKworCWlvX2NoYW5uZWxfc2V0X2Jsa3NpemUoY2hhbm5lbCwgU1VQRVJCTE9DS19PRkZTRVQpOworCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjaGFubmVsLCAxLCAtU1VQRVJCTE9DS19TSVpFLCAmc3VwZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX291dDsKKworCS8qIFdyaXRlIHRvIHRkYiBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbSBieXRlIG9yZGVyICovCisJdGRiX2tleS5kcHRyID0gbXRpbWVfa2V5OworCXRkYl9rZXkuZHNpemUgPSBzaXplb2YobXRpbWVfa2V5KTsKKwl0ZGJfZGF0YS5kcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgJihzdXBlci5zX210aW1lKTsKKwl0ZGJfZGF0YS5kc2l6ZSA9IHNpemVvZihzdXBlci5zX210aW1lKTsKKworCXJldHZhbCA9IHRkYl9zdG9yZSh0ZGIsIHRkYl9rZXksIHRkYl9kYXRhLCBUREJfSU5TRVJUKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVERCX1NVQ0NFU1MgKyB0ZGJfZXJyb3IodGRiKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXRkYl9rZXkuZHB0ciA9IHV1aWRfa2V5OworCXRkYl9rZXkuZHNpemUgPSBzaXplb2YodXVpZF9rZXkpOworCXRkYl9kYXRhLmRwdHIgPSAodW5zaWduZWQgY2hhciAqKSYoc3VwZXIuc191dWlkKTsKKwl0ZGJfZGF0YS5kc2l6ZSA9IHNpemVvZihzdXBlci5zX3V1aWQpOworCisJcmV0dmFsID0gdGRiX3N0b3JlKHRkYiwgdGRiX2tleSwgdGRiX2RhdGEsIFREQl9JTlNFUlQpOworCWlmIChyZXR2YWwgPT0gLTEpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9UREJfU1VDQ0VTUyArIHRkYl9lcnJvcih0ZGIpOworCX0KKworZXJyX291dDoKKwlpb19jaGFubmVsX3NldF9ibGtzaXplKGNoYW5uZWwsIGJsb2NrX3NpemUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3Qgd3JpdGVfYmxvY2tfc2l6ZShUREJfQ09OVEVYVCAqdGRiLCBpbnQgYmxvY2tfc2l6ZSkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCVREQl9EQVRBIHRkYl9rZXksIHRkYl9kYXRhOworCisJdGRiX2tleS5kcHRyID0gYmxrc2l6ZV9rZXk7CisJdGRiX2tleS5kc2l6ZSA9IHNpemVvZihibGtzaXplX2tleSk7CisJdGRiX2RhdGEuZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopJihibG9ja19zaXplKTsKKwl0ZGJfZGF0YS5kc2l6ZSA9IHNpemVvZihibG9ja19zaXplKTsKKworCXJldHZhbCA9IHRkYl9zdG9yZSh0ZGIsIHRkYl9rZXksIHRkYl9kYXRhLCBUREJfSU5TRVJUKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVERCX1NVQ0NFU1MgKyB0ZGJfZXJyb3IodGRiKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fd3JpdGVfdGRiKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIGludCBjb3VudCkKKworeworCWludCBzaXplLCBzejsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2tfbnVtLCBiYWNraW5nX2Jsa19udW07CisJZXJyY29kZV90IHJldHZhbCA9IDA7CisJZXh0Ml9sb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwlUREJfREFUQSB0ZGJfa2V5LCB0ZGJfZGF0YTsKKwl1bnNpZ25lZCBjaGFyICpyZWFkX3B0cjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZW5kX2Jsb2NrOworCisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRhdGEtPnRkYiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRyYW5zYWN0aW9uIGRhdGFiYXNlIG5vdCBpbml0aWFsaXplZAorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvdW50ID09IDEpCisJCXNpemUgPSBjaGFubmVsLT5ibG9ja19zaXplOworCWVsc2UgeworCQlpZiAoY291bnQgPCAwKQorCQkJc2l6ZSA9IC1jb3VudDsKKwkJZWxzZQorCQkJc2l6ZSA9IGNvdW50ICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwl9CisJLyoKKwkgKiBEYXRhIGlzIHN0b3JlZCBpbiB0ZGIgZGF0YWJhc2UgYXMgYmxvY2tzIG9mIHRkYl9kYXRhX3NpemUgc2l6ZQorCSAqIFRoaXMgaGVscHMgaW4gZWZmaWNpZW50IGxvb2t1cCBmdXJ0aGVyLgorCSAqCisJICogV2UgZGl2aWRlIHRoZSBkaXNrIHRvIGJsb2NrcyBvZiB0ZGJfZGF0YV9zaXplLgorCSAqLworCW9mZnNldCA9IChibG9jayAqIGNoYW5uZWwtPmJsb2NrX3NpemUpICsgZGF0YS0+b2Zmc2V0IDsKKwlibG9ja19udW0gPSBvZmZzZXQgLyBkYXRhLT50ZGJfZGF0YV9zaXplOworCWVuZF9ibG9jayA9IChvZmZzZXQgKyBzaXplKSAvIGRhdGEtPnRkYl9kYXRhX3NpemU7CisKKwl0ZGJfdHJhbnNhY3Rpb25fc3RhcnQoZGF0YS0+dGRiKTsKKwl3aGlsZSAoYmxvY2tfbnVtIDw9IGVuZF9ibG9jayApIHsKKworCQl0ZGJfa2V5LmRwdHIgPSAodW5zaWduZWQgY2hhciAqKSZibG9ja19udW07CisJCXRkYl9rZXkuZHNpemUgPSBzaXplb2YoYmxvY2tfbnVtKTsKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgcmVjb3JkIGFscmVhZHkKKwkJICovCisJCWlmICh0ZGJfZXhpc3RzKGRhdGEtPnRkYiwgdGRiX2tleSkpIHsKKwkJCS8qIFRyeSB0aGUgbmV4dCBibG9jayAqLworCQkJYmxvY2tfbnVtKys7CisJCQljb250aW51ZTsKKwkJfQorCQkvKgorCQkgKiBSZWFkIG9uZSBibG9jayB1c2luZyB0aGUgYmFja2luZyBJL08gbWFuYWdlcgorCQkgKiBUaGUgYmFja2luZyBJL08gbWFuYWdlciBibG9jayBzaXplIG1heSBiZQorCQkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgdGRiX2RhdGFfc2l6ZS4KKwkJICogQWxzbyB3ZSBuZWVkIHRvIHJlY2FsY3VhdGUgdGhlIGJsb2NrIG51bWJlciB3aXRoIHJlc3BlY3QKKwkJICogdG8gdGhlIGJhY2tpbmcgSS9PIG1hbmFnZXIuCisJCSAqLworCQlvZmZzZXQgPSBibG9ja19udW0gKiBkYXRhLT50ZGJfZGF0YV9zaXplOworCQliYWNraW5nX2Jsa19udW0gPSAob2Zmc2V0IC0gZGF0YS0+b2Zmc2V0KSAvIGNoYW5uZWwtPmJsb2NrX3NpemU7CisKKwkJY291bnQgPSBkYXRhLT50ZGJfZGF0YV9zaXplICsKKwkJCQkoKG9mZnNldCAtIGRhdGEtPm9mZnNldCkgJSBjaGFubmVsLT5ibG9ja19zaXplKTsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oY291bnQsICZyZWFkX3B0cik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwoZGF0YS0+dGRiKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKworCQltZW1zZXQocmVhZF9wdHIsIDAsIGNvdW50KTsKKwkJYWN0dWFsX3NpemUgPSAwOworCQlpZiAoKGNvdW50ICUgY2hhbm5lbC0+YmxvY2tfc2l6ZSkgPT0gMCkKKwkJCXN6ID0gY291bnQgLyBjaGFubmVsLT5ibG9ja19zaXplOworCQllbHNlCisJCQlzeiA9IC1jb3VudDsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGRhdGEtPnJlYWwsIGJhY2tpbmdfYmxrX251bSwKKwkJCQkJICAgICBzeiwgcmVhZF9wdHIpOworCQlpZiAocmV0dmFsKSB7CisJCQlpZiAocmV0dmFsICE9IEVYVDJfRVRfU0hPUlRfUkVBRCkgeworCQkJCWZyZWUocmVhZF9wdHIpOworCQkJCXRkYl90cmFuc2FjdGlvbl9jYW5jZWwoZGF0YS0+dGRiKTsKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfQorCQkJLyoKKwkJCSAqIHNob3J0IHJlYWQgc28gdXBkYXRlIHRoZSByZWNvcmQgc2l6ZQorCQkJICogYWNjb3JkaW5nbHkKKwkJCSAqLworCQkJdGRiX2RhdGEuZHNpemUgPSBhY3R1YWxfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXRkYl9kYXRhLmRzaXplID0gZGF0YS0+dGRiX2RhdGFfc2l6ZTsKKwkJfQorCQl0ZGJfZGF0YS5kcHRyID0gcmVhZF9wdHIgKworCQkJCSgob2Zmc2V0IC0gZGF0YS0+b2Zmc2V0KSAlIGNoYW5uZWwtPmJsb2NrX3NpemUpOworI2lmZGVmIERFQlVHCisJCXByaW50ZigiUHJpbnRpbmcgd2l0aCBrZXkgJWxsZCBkYXRhICV4IGFuZCBzaXplICVkXG4iLAorCQkgICAgICAgYmxvY2tfbnVtLAorCQkgICAgICAgdGRiX2RhdGEuZHB0ciwKKwkJICAgICAgIHRkYl9kYXRhLmRzaXplKTsKKyNlbmRpZgorCQlpZiAoIWRhdGEtPnRkYl93cml0dGVuKSB7CisJCQlkYXRhLT50ZGJfd3JpdHRlbiA9IDE7CisJCQkvKiBXcml0ZSB0aGUgYmxvY2tzaXplIHRvIHRkYiBmaWxlICovCisJCQlyZXR2YWwgPSB3cml0ZV9ibG9ja19zaXplKGRhdGEtPnRkYiwKKwkJCQkJCSAgZGF0YS0+dGRiX2RhdGFfc2l6ZSk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbChkYXRhLT50ZGIpOworCQkJCXJldHZhbCA9IEVYVDJfRVRfVERCX0VSUl9JTzsKKwkJCQlmcmVlKHJlYWRfcHRyKTsKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfQorCQl9CisJCXJldHZhbCA9IHRkYl9zdG9yZShkYXRhLT50ZGIsIHRkYl9rZXksIHRkYl9kYXRhLCBUREJfSU5TRVJUKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkJLyoKKwkJCSAqIFREQl9FUlJfRVhJU1RTIGNhbm5vdCBoYXBwZW4gYmVjYXVzZSB3ZQorCQkJICogaGF2ZSBhbHJlYWR5IHZlcmlmaWVkIGl0IGRvZXNuJ3QgZXhpc3QKKwkJCSAqLworCQkJdGRiX3RyYW5zYWN0aW9uX2NhbmNlbChkYXRhLT50ZGIpOworCQkJcmV0dmFsID0gRVhUMl9FVF9UREJfRVJSX0lPOworCQkJZnJlZShyZWFkX3B0cik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWZyZWUocmVhZF9wdHIpOworCQkvKiBOZXh0IGJsb2NrICovCisJCWJsb2NrX251bSsrOworCX0KKwl0ZGJfdHJhbnNhY3Rpb25fY29tbWl0KGRhdGEtPnRkYik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9faW9fcmVhZF9lcnJvcihpb19jaGFubmVsIGNoYW5uZWwgQVRUUigodW51c2VkKSksCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYmxvY2sgQVRUUigodW51c2VkKSksCisJCQkJICAgIGludCBjb3VudCBBVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgdm9pZCAqZGF0YSBBVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgc2l6ZV90IHNpemUgQVRUUigodW51c2VkKSksCisJCQkJICAgIGludCBhY3R1YWwsCisJCQkJICAgIGVycmNvZGVfdCBlcnJvciBBVFRSKCh1bnVzZWQpKSkKK3sKKwlhY3R1YWxfc2l6ZSA9IGFjdHVhbDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIHVuZG9fZXJyX2hhbmRsZXJfaW5pdChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJY2hhbm5lbC0+cmVhZF9lcnJvciA9IHVuZG9faW9fcmVhZF9lcnJvcjsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCBpb19jaGFubmVsICpjaGFubmVsKQoreworCWlvX2NoYW5uZWwJaW8gPSBOVUxMOworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YSA9IE5VTEw7CisJZXJyY29kZV90CXJldHZhbDsKKworCWlmIChuYW1lID09IDApCisJCXJldHVybiBFWFQyX0VUX0JBRF9ERVZJQ0VfTkFNRTsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSwgJmlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGlvLCAwLCBzaXplb2Yoc3RydWN0IHN0cnVjdF9pb19jaGFubmVsKSk7CisJaW8tPm1hZ2ljID0gRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEpLCAmZGF0YSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJaW8tPm1hbmFnZXIgPSB1bmRvX2lvX21hbmFnZXI7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKG5hbWUpKzEsICZpby0+bmFtZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwOworCisJc3RyY3B5KGlvLT5uYW1lLCBuYW1lKTsKKwlpby0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKwlpby0+YmxvY2tfc2l6ZSA9IDEwMjQ7CisJaW8tPnJlYWRfZXJyb3IgPSAwOworCWlvLT53cml0ZV9lcnJvciA9IDA7CisJaW8tPnJlZmNvdW50ID0gMTsKKworCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhKSk7CisJZGF0YS0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTDsKKworCWlmICh1bmRvX2lvX2JhY2tpbmdfbWFuYWdlcikgeworCQlyZXR2YWwgPSB1bmRvX2lvX2JhY2tpbmdfbWFuYWdlci0+b3BlbihuYW1lLCBmbGFncywKKwkJCQkJCSAgICAgICAmZGF0YS0+cmVhbCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGNsZWFudXA7CisJfSBlbHNlIHsKKwkJZGF0YS0+cmVhbCA9IDA7CisJfQorCisJLyogc2V0dXAgdGhlIHRkYiBmaWxlICovCisJZGF0YS0+dGRiID0gdGRiX29wZW4odGRiX2ZpbGUsIDAsIFREQl9DTEVBUl9JRl9GSVJTVCwKKwkJCSAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX0VYQ0wsIDA2MDApOworCWlmICghZGF0YS0+dGRiKSB7CisJCXJldHZhbCA9IGVycm5vOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBzZXR1cCBlcnIgaGFuZGxlciBmb3IgcmVhZCBzbyB0aGF0IHdlIGtub3cKKwkgKiB3aGVuIHRoZSBiYWNraW5nIG1hbmFnZXIgZmFpbHMgZG8gc2hvcnQgcmVhZAorCSAqLworCWlmIChkYXRhLT5yZWFsKQorCQl1bmRvX2Vycl9oYW5kbGVyX2luaXQoZGF0YS0+cmVhbCk7CisKKwkqY2hhbm5lbCA9IGlvOworCXJldHVybiAwOworCitjbGVhbnVwOgorCWlmIChkYXRhICYmIGRhdGEtPnJlYWwpCisJCWlvX2NoYW5uZWxfY2xvc2UoZGF0YS0+cmVhbCk7CisJaWYgKGRhdGEpCisJCWV4dDJmc19mcmVlX21lbSgmZGF0YSk7CisJaWYgKGlvKQorCQlleHQyZnNfZnJlZV9tZW0oJmlvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKQoreworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKwlpZiAoLS1jaGFubmVsLT5yZWZjb3VudCA+IDApCisJCXJldHVybiAwOworCS8qIEJlZm9yZSBjbG9zaW5nIHdyaXRlIHRoZSBmaWxlIHN5c3RlbSBpZGVudGl0eSAqLworCXJldHZhbCA9IHdyaXRlX2ZpbGVfc3lzdGVtX2lkZW50aXR5KGNoYW5uZWwsIGRhdGEtPnRkYik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpZiAoZGF0YS0+cmVhbCkKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9jbG9zZShkYXRhLT5yZWFsKTsKKwlpZiAoZGF0YS0+dGRiKQorCQl0ZGJfY2xvc2UoZGF0YS0+dGRiKTsKKwlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPnByaXZhdGVfZGF0YSk7CisJaWYgKGNoYW5uZWwtPm5hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbC0+bmFtZSk7CisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKQoreworCXN0cnVjdCB1bmRvX3ByaXZhdGVfZGF0YSAqZGF0YTsKKwllcnJjb2RlX3QJCXJldHZhbCA9IDA7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfc2V0X2Jsa3NpemUoZGF0YS0+cmVhbCwgYmxrc2l6ZSk7CisJLyoKKwkgKiBTZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgdGRiCisJICovCisJaWYgKCFkYXRhLT50ZGJfZGF0YV9zaXplKSB7CisJCWRhdGEtPnRkYl9kYXRhX3NpemUgPSBibGtzaXplOworCX0KKwljaGFubmVsLT5ibG9ja19zaXplID0gYmxrc2l6ZTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChkYXRhLT5yZWFsLCBibG9jaywgY291bnQsIGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fcmVhZF9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmKQoreworCXJldHVybiB1bmRvX3JlYWRfYmxrNjQoY2hhbm5lbCwgYmxvY2ssIGNvdW50LCBidWYpOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuZG9fd3JpdGVfYmxrNjQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkJaW50IGNvdW50LCBjb25zdCB2b2lkICpidWYpCit7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKwkvKgorCSAqIEZpcnN0IHdyaXRlIHRoZSBleGlzdGluZyBjb250ZW50IGludG8gZGF0YWJhc2UKKwkgKi8KKwlyZXR2YWwgPSB1bmRvX3dyaXRlX3RkYihjaGFubmVsLCBibG9jaywgY291bnQpOworCWlmIChyZXR2YWwpCisJCSByZXR1cm4gcmV0dmFsOworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGRhdGEtPnJlYWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5kb193cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXJldHVybiB1bmRvX3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgaW50IHNpemUsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJZXh0Ml9sb2ZmX3QJbG9jYXRpb247CisJdW5zaWduZWQgbG9uZyBibGtfbnVtLCBjb3VudDs7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJbG9jYXRpb24gPSBvZmZzZXQgKyBkYXRhLT5vZmZzZXQ7CisJYmxrX251bSA9IGxvY2F0aW9uL2NoYW5uZWwtPmJsb2NrX3NpemU7CisJLyoKKwkgKiB0aGUgc2l6ZSBzcGVjaWZpZWQgbWF5IHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgYmxvY2tzCisJICogYWxzbyBtYWtlIHN1cmUgd2UgYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBibG9jayBzdGFydAorCSAqIG9mZnNldCBmb3IgdGRiIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBiYWNraW5nIEkvTyBtYW5hZ2VyCisJICogZHVlIHRvIHBvc3NpYmxlIGRpZmZlcmVudCBibG9jayBzaXplCisJICovCisJY291bnQgPSAoc2l6ZSArIChsb2NhdGlvbiAlIGNoYW5uZWwtPmJsb2NrX3NpemUpICsKKwkJCWNoYW5uZWwtPmJsb2NrX3NpemUgIC0xKS9jaGFubmVsLT5ibG9ja19zaXplOworCXJldHZhbCA9IHVuZG9fd3JpdGVfdGRiKGNoYW5uZWwsIGJsa19udW0sIGNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCWlmIChkYXRhLT5yZWFsICYmIGRhdGEtPnJlYWwtPm1hbmFnZXItPndyaXRlX2J5dGUpCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYnl0ZShkYXRhLT5yZWFsLCBvZmZzZXQsIHNpemUsIGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogRmx1c2ggZGF0YSBidWZmZXJzIHRvIGRpc2suCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgdW5kb19mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICpkYXRhOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChkYXRhLT5yZWFsKQorCQlyZXR2YWwgPSBpb19jaGFubmVsX2ZsdXNoKGRhdGEtPnJlYWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX3NldF9vcHRpb24oaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRpb24sCisJCQkJIGNvbnN0IGNoYXIgKmFyZykKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJY2hhciAqZW5kOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuZG9fcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmICghc3RyY21wKG9wdGlvbiwgInRkYl9kYXRhX3NpemUiKSkgeworCQlpZiAoIWFyZykKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwkJdG1wID0gc3RydG91bChhcmcsICZlbmQsIDApOworCQlpZiAoKmVuZCkKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCWlmICghZGF0YS0+dGRiX2RhdGFfc2l6ZSB8fCAhZGF0YS0+dGRiX3dyaXR0ZW4pIHsKKwkJCWRhdGEtPnRkYl9kYXRhX3NpemUgPSB0bXA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCS8qCisJICogTmVlZCB0byBzdXBwb3J0IG9mZnNldCBvcHRpb24gdG8gd29yayB3aXRoCisJICogVW5peCBJL08gbWFuYWdlcgorCSAqLworCWlmIChkYXRhLT5yZWFsICYmIGRhdGEtPnJlYWwtPm1hbmFnZXItPnNldF9vcHRpb24pIHsKKwkJcmV0dmFsID0gZGF0YS0+cmVhbC0+bWFuYWdlci0+c2V0X29wdGlvbihkYXRhLT5yZWFsLAorCQkJCQkJCW9wdGlvbiwgYXJnKTsKKwl9CisJaWYgKCFyZXR2YWwgJiYgIXN0cmNtcChvcHRpb24sICJvZmZzZXQiKSkgeworCQlpZiAoIWFyZykKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwkJdG1wID0gc3RydG91bChhcmcsICZlbmQsIDApOworCQlpZiAoKmVuZCkKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCWRhdGEtPm9mZnNldCA9IHRtcDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bmRvX2dldF9zdGF0cyhpb19jaGFubmVsIGNoYW5uZWwsIGlvX3N0YXRzICpzdGF0cykKK3sKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKmRhdGE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5kb19wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKGRhdGEtPnJlYWwpCisJCXJldHZhbCA9IChkYXRhLT5yZWFsLT5tYW5hZ2VyLT5nZXRfc3RhdHMpKGRhdGEtPnJlYWwsIHN0YXRzKTsKKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy91bml4X2lvLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy91bml4X2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5NTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3VuaXhfaW8uYwpAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIHVuaXhfaW8uYyAtLS0gVGhpcyBpcyB0aGUgVW5peCAod2VsbCwgcmVhbGx5IFBPU0lYKSBpbXBsZW1lbnRhdGlvbgorICogCW9mIHRoZSBJL08gbWFuYWdlci4KKyAqCisgKiBJbXBsZW1lbnRzIGEgb25lLWJsb2NrIHdyaXRlLXRocm91Z2ggY2FjaGUuCisgKgorICogSW5jbHVkZXMgc3VwcG9ydCBmb3IgV2luZG93cyBOVCBzdXBwb3J0IHVuZGVyIEN5Z3dpbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisgKiAJMjAwMiBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCisjaWYgSEFWRV9MSU5VWF9GQUxMT0NfSAorI2luY2x1ZGUgPGxpbnV4L2ZhbGxvYy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfSU8pICYmICFkZWZpbmVkKEJMS1JPR0VUKQorI2RlZmluZSBCTEtST0dFVCAgIF9JTygweDEyLCA5NCkgLyogR2V0IHJlYWQtb25seSBzdGF0dXMgKDAgPSByZWFkX3dyaXRlKS4gICovCisjZW5kaWYKKworI3VuZGVmIEFMSUdOX0RFQlVHCisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKy8qCisgKiBGb3IgY2hlY2tpbmcgc3RydWN0dXJlIG1hZ2ljIG51bWJlcnMuLi4KKyAqLworCisjZGVmaW5lIEVYVDJfQ0hFQ0tfTUFHSUMoc3RydWN0LCBjb2RlKSBcCisJICBpZiAoKHN0cnVjdCktPm1hZ2ljICE9IChjb2RlKSkgcmV0dXJuIChjb2RlKQorCitzdHJ1Y3QgdW5peF9jYWNoZSB7CisJY2hhcgkJCSpidWY7CisJdW5zaWduZWQgbG9uZyBsb25nCWJsb2NrOworCWludAkJCWFjY2Vzc190aW1lOworCXVuc2lnbmVkCQlkaXJ0eToxOworCXVuc2lnbmVkCQlpbl91c2U6MTsKK307CisKKyNkZWZpbmUgQ0FDSEVfU0laRSA4CisjZGVmaW5lIFdSSVRFX0RJUkVDVF9TSVpFIDQJLyogTXVzdCBiZSBzbWFsbGVyIHRoYW4gQ0FDSEVfU0laRSAqLworI2RlZmluZSBSRUFEX0RJUkVDVF9TSVpFIDQJLyogU2hvdWxkIGJlIHNtYWxsZXIgdGhhbiBDQUNIRV9TSVpFICovCisKK3N0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSB7CisJaW50CW1hZ2ljOworCWludAlkZXY7CisJaW50CWZsYWdzOworCWludAlhbGlnbjsKKwlpbnQJYWNjZXNzX3RpbWU7CisJZXh0Ml9sb2ZmX3Qgb2Zmc2V0OworCXN0cnVjdCB1bml4X2NhY2hlIGNhY2hlW0NBQ0hFX1NJWkVdOworCXZvaWQJKmJvdW5jZTsKKwlzdHJ1Y3Qgc3RydWN0X2lvX3N0YXRzIGlvX3N0YXRzOworfTsKKworI2RlZmluZSBJU19BTElHTkVEKG4sIGFsaWduKSAoKCgodW5zaWduZWQgbG9uZykgbikgJiBcCisJCQkgICAgICAgKCh1bnNpZ25lZCBsb25nKSAoKGFsaWduKS0xKSkpID09IDApCisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgZXJyY29kZV90IHVuaXhfY2xvc2UoaW9fY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9zZXRfYmxrc2l6ZShpb19jaGFubmVsIGNoYW5uZWwsIGludCBibGtzaXplKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9yZWFkX2Jsayhpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgYmxvY2ssCisJCQkgICAgICAgaW50IGNvdW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IHVuaXhfZmx1c2goaW9fY2hhbm5lbCBjaGFubmVsKTsKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF93cml0ZV9ieXRlKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJaW50IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCB1bml4X3NldF9vcHRpb24oaW9fY2hhbm5lbCBjaGFubmVsLCBjb25zdCBjaGFyICpvcHRpb24sCisJCQkJIGNvbnN0IGNoYXIgKmFyZyk7CitzdGF0aWMgZXJyY29kZV90IHVuaXhfZ2V0X3N0YXRzKGlvX2NoYW5uZWwgY2hhbm5lbCwgaW9fc3RhdHMgKnN0YXRzKQorOworc3RhdGljIHZvaWQgcmV1c2VfY2FjaGUoaW9fY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEsCisJCSBzdHJ1Y3QgdW5peF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jayk7CitzdGF0aWMgZXJyY29kZV90IHVuaXhfcmVhZF9ibGs2NChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmRhdGEpOworc3RhdGljIGVycmNvZGVfdCB1bml4X3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqZGF0YSk7CitzdGF0aWMgZXJyY29kZV90IHVuaXhfZGlzY2FyZChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RydWN0X2lvX21hbmFnZXIgc3RydWN0X3VuaXhfbWFuYWdlciA9IHsKKwlFWFQyX0VUX01BR0lDX0lPX01BTkFHRVIsCisJIlVuaXggSS9PIE1hbmFnZXIiLAorCXVuaXhfb3BlbiwKKwl1bml4X2Nsb3NlLAorCXVuaXhfc2V0X2Jsa3NpemUsCisJdW5peF9yZWFkX2JsaywKKwl1bml4X3dyaXRlX2JsaywKKwl1bml4X2ZsdXNoLAorCXVuaXhfd3JpdGVfYnl0ZSwKKwl1bml4X3NldF9vcHRpb24sCisJdW5peF9nZXRfc3RhdHMsCisJdW5peF9yZWFkX2JsazY0LAorCXVuaXhfd3JpdGVfYmxrNjQsCisJdW5peF9kaXNjYXJkLAorfTsKKworaW9fbWFuYWdlciB1bml4X2lvX21hbmFnZXIgPSAmc3RydWN0X3VuaXhfbWFuYWdlcjsKKworc3RhdGljIGVycmNvZGVfdCB1bml4X2dldF9zdGF0cyhpb19jaGFubmVsIGNoYW5uZWwsIGlvX3N0YXRzICpzdGF0cykKK3sKKwllcnJjb2RlX3QgCXJldHZhbCA9IDA7CisKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKHN0YXRzKQorCQkqc3RhdHMgPSAmZGF0YS0+aW9fc3RhdHM7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogSGVyZSBhcmUgdGhlIHJhdyBJL08gZnVuY3Rpb25zCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgcmF3X3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCSAgICAgIHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCSAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmdikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCXNzaXplX3QJCXNpemU7CisJZXh0Ml9sb2ZmX3QJbG9jYXRpb247CisJaW50CQlhY3R1YWwgPSAwOworCXVuc2lnbmVkIGNoYXIJKmJ1ZiA9IGJ1ZnY7CisKKwlzaXplID0gKGNvdW50IDwgMCkgPyAtY291bnQgOiBjb3VudCAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisJZGF0YS0+aW9fc3RhdHMuYnl0ZXNfcmVhZCArPSBzaXplOworCWxvY2F0aW9uID0gKChleHQyX2xvZmZfdCkgYmxvY2sgKiBjaGFubmVsLT5ibG9ja19zaXplKSArIGRhdGEtPm9mZnNldDsKKwlpZiAoZXh0MmZzX2xsc2VlayhkYXRhLT5kZXYsIGxvY2F0aW9uLCBTRUVLX1NFVCkgIT0gbG9jYXRpb24pIHsKKwkJcmV0dmFsID0gZXJybm8gPyBlcnJubyA6IEVYVDJfRVRfTExTRUVLX0ZBSUxFRDsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCWlmICgoY2hhbm5lbC0+YWxpZ24gPT0gMCkgfHwKKwkgICAgKElTX0FMSUdORUQoYnVmLCBjaGFubmVsLT5hbGlnbikgJiYKKwkgICAgIElTX0FMSUdORUQoc2l6ZSwgY2hhbm5lbC0+YWxpZ24pKSkgeworCQlhY3R1YWwgPSByZWFkKGRhdGEtPmRldiwgYnVmLCBzaXplKTsKKwkJaWYgKGFjdHVhbCAhPSBzaXplKSB7CisJCXNob3J0X3JlYWQ6CisJCQlpZiAoYWN0dWFsIDwgMCkKKwkJCQlhY3R1YWwgPSAwOworCQkJcmV0dmFsID0gRVhUMl9FVF9TSE9SVF9SRUFEOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgQUxJR05fREVCVUcKKwlwcmludGYoInJhd19yZWFkX2JsazogT19ESVJFQ1QgZmFsbGJhY2s6ICVwICVsdVxuIiwgYnVmLAorCSAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7CisjZW5kaWYKKworCS8qCisJICogVGhlIGJ1ZmZlciBvciBzaXplIHdoaWNoIHdlJ3JlIHRyeWluZyB0byByZWFkIGlzbid0IGFsaWduZWQKKwkgKiB0byB0aGUgT19ESVJFQ1QgcnVsZXMsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuLi4KKwkgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJYWN0dWFsID0gcmVhZChkYXRhLT5kZXYsIGRhdGEtPmJvdW5jZSwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCWlmIChhY3R1YWwgIT0gY2hhbm5lbC0+YmxvY2tfc2l6ZSkKKwkJCWdvdG8gc2hvcnRfcmVhZDsKKwkJYWN0dWFsID0gc2l6ZTsKKwkJaWYgKHNpemUgPiBjaGFubmVsLT5ibG9ja19zaXplKQorCQkJYWN0dWFsID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJbWVtY3B5KGJ1ZiwgZGF0YS0+Ym91bmNlLCBhY3R1YWwpOworCQlzaXplIC09IGFjdHVhbDsKKwkJYnVmICs9IGFjdHVhbDsKKwl9CisJcmV0dXJuIDA7CisKK2Vycm9yX291dDoKKwltZW1zZXQoKGNoYXIgKikgYnVmK2FjdHVhbCwgMCwgc2l6ZS1hY3R1YWwpOworCWlmIChjaGFubmVsLT5yZWFkX2Vycm9yKQorCQlyZXR2YWwgPSAoY2hhbm5lbC0+cmVhZF9lcnJvcikoY2hhbm5lbCwgYmxvY2ssIGNvdW50LCBidWYsCisJCQkJCSAgICAgICBzaXplLCBhY3R1YWwsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGVycmNvZGVfdCByYXdfd3JpdGVfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwKKwkJCSAgICAgICBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmdikKK3sKKwlzc2l6ZV90CQlzaXplOworCWV4dDJfbG9mZl90CWxvY2F0aW9uOworCWludAkJYWN0dWFsID0gMDsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGJ1ZnY7CisKKwlpZiAoY291bnQgPT0gMSkKKwkJc2l6ZSA9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisJZWxzZSB7CisJCWlmIChjb3VudCA8IDApCisJCQlzaXplID0gLWNvdW50OworCQllbHNlCisJCQlzaXplID0gY291bnQgKiBjaGFubmVsLT5ibG9ja19zaXplOworCX0KKwlkYXRhLT5pb19zdGF0cy5ieXRlc193cml0dGVuICs9IHNpemU7CisKKwlsb2NhdGlvbiA9ICgoZXh0Ml9sb2ZmX3QpIGJsb2NrICogY2hhbm5lbC0+YmxvY2tfc2l6ZSkgKyBkYXRhLT5vZmZzZXQ7CisJaWYgKGV4dDJmc19sbHNlZWsoZGF0YS0+ZGV2LCBsb2NhdGlvbiwgU0VFS19TRVQpICE9IGxvY2F0aW9uKSB7CisJCXJldHZhbCA9IGVycm5vID8gZXJybm8gOiBFWFQyX0VUX0xMU0VFS19GQUlMRUQ7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWlmICgoY2hhbm5lbC0+YWxpZ24gPT0gMCkgfHwKKwkgICAgKElTX0FMSUdORUQoYnVmLCBjaGFubmVsLT5hbGlnbikgJiYKKwkgICAgIElTX0FMSUdORUQoc2l6ZSwgY2hhbm5lbC0+YWxpZ24pKSkgeworCQlhY3R1YWwgPSB3cml0ZShkYXRhLT5kZXYsIGJ1Ziwgc2l6ZSk7CisJCWlmIChhY3R1YWwgIT0gc2l6ZSkgeworCQlzaG9ydF93cml0ZToKKwkJCXJldHZhbCA9IEVYVDJfRVRfU0hPUlRfV1JJVEU7CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBBTElHTl9ERUJVRworCXByaW50ZigicmF3X3dyaXRlX2JsazogT19ESVJFQ1QgZmFsbGJhY2s6ICVwICVsdVxuIiwgYnVmLAorCSAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7CisjZW5kaWYKKwkvKgorCSAqIFRoZSBidWZmZXIgb3Igc2l6ZSB3aGljaCB3ZSdyZSB0cnlpbmcgdG8gd3JpdGUgaXNuJ3QgYWxpZ25lZAorCSAqIHRvIHRoZSBPX0RJUkVDVCBydWxlcywgc28gd2UgbmVlZCB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4uLgorCSAqLworCXdoaWxlIChzaXplID4gMCkgeworCQlpZiAoc2l6ZSA8IGNoYW5uZWwtPmJsb2NrX3NpemUpIHsKKwkJCWFjdHVhbCA9IHJlYWQoZGF0YS0+ZGV2LCBkYXRhLT5ib3VuY2UsCisJCQkJICAgICAgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCQlpZiAoYWN0dWFsICE9IGNoYW5uZWwtPmJsb2NrX3NpemUpIHsKKwkJCQlyZXR2YWwgPSBFWFQyX0VUX1NIT1JUX1JFQUQ7CisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CisJCX0KKwkJYWN0dWFsID0gc2l6ZTsKKwkJaWYgKHNpemUgPiBjaGFubmVsLT5ibG9ja19zaXplKQorCQkJYWN0dWFsID0gY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKwkJbWVtY3B5KGRhdGEtPmJvdW5jZSwgYnVmLCBhY3R1YWwpOworCQlhY3R1YWwgPSB3cml0ZShkYXRhLT5kZXYsIGRhdGEtPmJvdW5jZSwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCWlmIChhY3R1YWwgIT0gY2hhbm5lbC0+YmxvY2tfc2l6ZSkKKwkJCWdvdG8gc2hvcnRfd3JpdGU7CisJCXNpemUgLT0gYWN0dWFsOworCQlidWYgKz0gYWN0dWFsOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0OgorCWlmIChjaGFubmVsLT53cml0ZV9lcnJvcikKKwkJcmV0dmFsID0gKGNoYW5uZWwtPndyaXRlX2Vycm9yKShjaGFubmVsLCBibG9jaywgY291bnQsIGJ1ZiwKKwkJCQkJCXNpemUsIGFjdHVhbCwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBIZXJlIHdlIGltcGxlbWVudCB0aGUgY2FjaGUgZnVuY3Rpb25zCisgKi8KKworLyogQWxsb2NhdGUgdGhlIGNhY2hlIGJ1ZmZlcnMgKi8KK3N0YXRpYyBlcnJjb2RlX3QgYWxsb2NfY2FjaGUoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJICAgICBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IHVuaXhfY2FjaGUJKmNhY2hlOworCWludAkJCWk7CisKKwlkYXRhLT5hY2Nlc3NfdGltZSA9IDA7CisJZm9yIChpPTAsIGNhY2hlID0gZGF0YS0+Y2FjaGU7IGkgPCBDQUNIRV9TSVpFOyBpKyssIGNhY2hlKyspIHsKKwkJY2FjaGUtPmJsb2NrID0gMDsKKwkJY2FjaGUtPmFjY2Vzc190aW1lID0gMDsKKwkJY2FjaGUtPmRpcnR5ID0gMDsKKwkJY2FjaGUtPmluX3VzZSA9IDA7CisJCWlmIChjYWNoZS0+YnVmKQorCQkJZXh0MmZzX2ZyZWVfbWVtKCZjYWNoZS0+YnVmKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9hbGxvY19idWYoY2hhbm5lbCwgMCwgJmNhY2hlLT5idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKGNoYW5uZWwtPmFsaWduKSB7CisJCWlmIChkYXRhLT5ib3VuY2UpCisJCQlleHQyZnNfZnJlZV9tZW0oJmRhdGEtPmJvdW5jZSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfYWxsb2NfYnVmKGNoYW5uZWwsIDAsICZkYXRhLT5ib3VuY2UpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBGcmVlIHRoZSBjYWNoZSBidWZmZXJzICovCitzdGF0aWMgdm9pZCBmcmVlX2NhY2hlKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdW5peF9jYWNoZQkqY2FjaGU7CisJaW50CQkJaTsKKworCWRhdGEtPmFjY2Vzc190aW1lID0gMDsKKwlmb3IgKGk9MCwgY2FjaGUgPSBkYXRhLT5jYWNoZTsgaSA8IENBQ0hFX1NJWkU7IGkrKywgY2FjaGUrKykgeworCQljYWNoZS0+YmxvY2sgPSAwOworCQljYWNoZS0+YWNjZXNzX3RpbWUgPSAwOworCQljYWNoZS0+ZGlydHkgPSAwOworCQljYWNoZS0+aW5fdXNlID0gMDsKKwkJaWYgKGNhY2hlLT5idWYpCisJCQlleHQyZnNfZnJlZV9tZW0oJmNhY2hlLT5idWYpOworCX0KKwlpZiAoZGF0YS0+Ym91bmNlKQorCQlleHQyZnNfZnJlZV9tZW0oJmRhdGEtPmJvdW5jZSk7Cit9CisKKyNpZm5kZWYgTk9fSU9fQ0FDSEUKKy8qCisgKiBUcnkgdG8gZmluZCBhIGJsb2NrIGluIHRoZSBjYWNoZS4gIElmIHRoZSBibG9jayBpcyBub3QgZm91bmQsIGFuZAorICogZWxkZXN0IGlzIGEgbm9uLXplcm8gcG9pbnRlciwgdGhlbiBmaWxsIGluIGVsZGVzdCB3aXRoIHRoZSBjYWNoZQorICogZW50cnkgdG8gdGhhdCBzaG91bGQgYmUgcmV1c2VkLgorICovCitzdGF0aWMgc3RydWN0IHVuaXhfY2FjaGUgKmZpbmRfY2FjaGVkX2Jsb2NrKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKwkJCQkJICAgIHN0cnVjdCB1bml4X2NhY2hlICoqZWxkZXN0KQoreworCXN0cnVjdCB1bml4X2NhY2hlCSpjYWNoZSwgKnVudXNlZF9jYWNoZSwgKm9sZGVzdF9jYWNoZTsKKwlpbnQJCQlpOworCisJdW51c2VkX2NhY2hlID0gb2xkZXN0X2NhY2hlID0gMDsKKwlmb3IgKGk9MCwgY2FjaGUgPSBkYXRhLT5jYWNoZTsgaSA8IENBQ0hFX1NJWkU7IGkrKywgY2FjaGUrKykgeworCQlpZiAoIWNhY2hlLT5pbl91c2UpIHsKKwkJCWlmICghdW51c2VkX2NhY2hlKQorCQkJCXVudXNlZF9jYWNoZSA9IGNhY2hlOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNhY2hlLT5ibG9jayA9PSBibG9jaykgeworCQkJY2FjaGUtPmFjY2Vzc190aW1lID0gKytkYXRhLT5hY2Nlc3NfdGltZTsKKwkJCXJldHVybiBjYWNoZTsKKwkJfQorCQlpZiAoIW9sZGVzdF9jYWNoZSB8fAorCQkgICAgKGNhY2hlLT5hY2Nlc3NfdGltZSA8IG9sZGVzdF9jYWNoZS0+YWNjZXNzX3RpbWUpKQorCQkJb2xkZXN0X2NhY2hlID0gY2FjaGU7CisJfQorCWlmIChlbGRlc3QpCisJCSplbGRlc3QgPSAodW51c2VkX2NhY2hlKSA/IHVudXNlZF9jYWNoZSA6IG9sZGVzdF9jYWNoZTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldXNlIGEgcGFydGljdWxhciBjYWNoZSBlbnRyeSBmb3IgYW5vdGhlciBibG9jay4KKyAqLworc3RhdGljIHZvaWQgcmV1c2VfY2FjaGUoaW9fY2hhbm5lbCBjaGFubmVsLCBzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEsCisJCSBzdHJ1Y3QgdW5peF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaykKK3sKKwlpZiAoY2FjaGUtPmRpcnR5ICYmIGNhY2hlLT5pbl91c2UpCisJCXJhd193cml0ZV9ibGsoY2hhbm5lbCwgZGF0YSwgY2FjaGUtPmJsb2NrLCAxLCBjYWNoZS0+YnVmKTsKKworCWNhY2hlLT5pbl91c2UgPSAxOworCWNhY2hlLT5kaXJ0eSA9IDA7CisJY2FjaGUtPmJsb2NrID0gYmxvY2s7CisJY2FjaGUtPmFjY2Vzc190aW1lID0gKytkYXRhLT5hY2Nlc3NfdGltZTsKK30KKworLyoKKyAqIEZsdXNoIGFsbCBvZiB0aGUgYmxvY2tzIGluIHRoZSBjYWNoZQorICovCitzdGF0aWMgZXJyY29kZV90IGZsdXNoX2NhY2hlZF9ibG9ja3MoaW9fY2hhbm5lbCBjaGFubmVsLAorCQkJCSAgICAgc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhLAorCQkJCSAgICAgaW50IGludmFsaWRhdGUpCisKK3sKKwlzdHJ1Y3QgdW5peF9jYWNoZQkqY2FjaGU7CisJZXJyY29kZV90CQlyZXR2YWwsIHJldHZhbDI7CisJaW50CQkJaTsKKworCXJldHZhbDIgPSAwOworCWZvciAoaT0wLCBjYWNoZSA9IGRhdGEtPmNhY2hlOyBpIDwgQ0FDSEVfU0laRTsgaSsrLCBjYWNoZSsrKSB7CisJCWlmICghY2FjaGUtPmluX3VzZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpbnZhbGlkYXRlKQorCQkJY2FjaGUtPmluX3VzZSA9IDA7CisKKwkJaWYgKCFjYWNoZS0+ZGlydHkpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSByYXdfd3JpdGVfYmxrKGNoYW5uZWwsIGRhdGEsCisJCQkJICAgICAgIGNhY2hlLT5ibG9jaywgMSwgY2FjaGUtPmJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR2YWwyID0gcmV0dmFsOworCQllbHNlCisJCQljYWNoZS0+ZGlydHkgPSAwOworCX0KKwlyZXR1cm4gcmV0dmFsMjsKK30KKyNlbmRpZiAvKiBOT19JT19DQUNIRSAqLworCisjaWZkZWYgX19saW51eF9fCisjaWZuZGVmIEJMS0RJU0NBUkRaRVJPRVMKKyNkZWZpbmUgQkxLRElTQ0FSRFpFUk9FUyBfSU8oMHgxMiwxMjQpCisjZW5kaWYKKyNlbmRpZgorCitpbnQgZXh0MmZzX29wZW5fZmlsZShjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKK3sKKwlpZiAobW9kZSkKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTjY0KSAmJiAhZGVmaW5lZChfX09TWF9BVkFJTEFCTEVfQlVUX0RFUFJFQ0FURUQpCisJCXJldHVybiBvcGVuNjQocGF0aG5hbWUsIGZsYWdzLCBtb2RlKTsKKwllbHNlCisJCXJldHVybiBvcGVuNjQocGF0aG5hbWUsIGZsYWdzKTsKKyNlbHNlCisJCXJldHVybiBvcGVuKHBhdGhuYW1lLCBmbGFncywgbW9kZSk7CisJZWxzZQorCQlyZXR1cm4gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworI2VuZGlmCit9CisKK2ludCBleHQyZnNfc3RhdChjb25zdCBjaGFyICpwYXRoLCBleHQyZnNfc3RydWN0X3N0YXQgKmJ1ZikKK3sKKyNpZiBkZWZpbmVkKEhBVkVfRlNUQVQ2NCkgJiYgIWRlZmluZWQoX19PU1hfQVZBSUxBQkxFX0JVVF9ERVBSRUNBVEVEKQorCXJldHVybiBzdGF0NjQocGF0aCwgYnVmKTsKKyNlbHNlCisJcmV0dXJuIHN0YXQocGF0aCwgYnVmKTsKKyNlbmRpZgorfQorCitpbnQgZXh0MmZzX2ZzdGF0KGludCBmZCwgZXh0MmZzX3N0cnVjdF9zdGF0ICpidWYpCit7CisjaWYgZGVmaW5lZChIQVZFX0ZTVEFUNjQpICYmICFkZWZpbmVkKF9fT1NYX0FWQUlMQUJMRV9CVVRfREVQUkVDQVRFRCkKKwlyZXR1cm4gZnN0YXQ2NChmZCwgYnVmKTsKKyNlbHNlCisJcmV0dXJuIGZzdGF0KGZkLCBidWYpOworI2VuZGlmCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW9fY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpb19jaGFubmVsCWlvID0gTlVMTDsKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGEgPSBOVUxMOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlvcGVuX2ZsYWdzOworCWludAkJZl9ub2NhY2hlID0gMDsKKwlleHQyZnNfc3RydWN0X3N0YXQgc3Q7CisjaWZkZWYgX19saW51eF9fCisJc3RydWN0IAkJdXRzbmFtZSB1dDsKKyNlbmRpZgorCisJaWYgKG5hbWUgPT0gMCkKKwkJcmV0dXJuIEVYVDJfRVRfQkFEX0RFVklDRV9OQU1FOworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwpLCAmaW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW8sIDAsIHNpemVvZihzdHJ1Y3Qgc3RydWN0X2lvX2NoYW5uZWwpKTsKKwlpby0+bWFnaWMgPSBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUw7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSksICZkYXRhKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlpby0+bWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzdHJsZW4obmFtZSkrMSwgJmlvLT5uYW1lKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGNsZWFudXA7CisKKwlzdHJjcHkoaW8tPm5hbWUsIG5hbWUpOworCWlvLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCWlvLT5ibG9ja19zaXplID0gMTAyNDsKKwlpby0+cmVhZF9lcnJvciA9IDA7CisJaW8tPndyaXRlX2Vycm9yID0gMDsKKwlpby0+cmVmY291bnQgPSAxOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEpKTsKKwlkYXRhLT5tYWdpYyA9IEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMOworCWRhdGEtPmlvX3N0YXRzLm51bV9maWVsZHMgPSAyOworCWRhdGEtPmRldiA9IC0xOworCisJb3Blbl9mbGFncyA9IChmbGFncyAmIElPX0ZMQUdfUlcpID8gT19SRFdSIDogT19SRE9OTFk7CisJaWYgKGZsYWdzICYgSU9fRkxBR19FWENMVVNJVkUpCisJCW9wZW5fZmxhZ3MgfD0gT19FWENMOworI2lmIGRlZmluZWQoT19ESVJFQ1QpCisJaWYgKGZsYWdzICYgSU9fRkxBR19ESVJFQ1RfSU8pIHsKKwkJb3Blbl9mbGFncyB8PSBPX0RJUkVDVDsKKwkJaW8tPmFsaWduID0gZXh0MmZzX2dldF9kaW9fYWxpZ25tZW50KGRhdGEtPmRldik7CisJfQorI2VsaWYgZGVmaW5lZChGX05PQ0FDSEUpCisJaWYgKGZsYWdzICYgSU9fRkxBR19ESVJFQ1RfSU8pIHsKKwkJZl9ub2NhY2hlID0gRl9OT0NBQ0hFOworCQlpby0+YWxpZ24gPSA0MDk2OworCX0KKyNlbmRpZgorCWRhdGEtPmZsYWdzID0gZmxhZ3M7CisKKwlkYXRhLT5kZXYgPSBleHQyZnNfb3Blbl9maWxlKGlvLT5uYW1lLCBvcGVuX2ZsYWdzLCAwKTsKKwlpZiAoZGF0YS0+ZGV2IDwgMCkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAoZl9ub2NhY2hlKSB7CisJCWlmIChmY250bChkYXRhLT5kZXYsIGZfbm9jYWNoZSwgMSkgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIGRldmljZSBpcyByZWFsbHkgYSBibG9jayBkZXZpY2UsIHRoZW4gc2V0IHRoZQorCSAqIGFwcHJvcHJpYXRlIGZsYWcsIG90aGVyd2lzZSB3ZSBjYW4gc2V0IERJU0NBUkRfWkVST0VTIGZsYWcKKwkgKiBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byB1c2UgcHVuY2ggaG9sZSBpbnN0ZWFkIG9mIGRpc2NhcmQKKwkgKiBhbmQgaWYgaXQgc3VjY2VlZCwgc3Vic2VxdWVudCByZWFkIGZyb20gc3BhcnNlIGFyZWEgcmV0dXJucworCSAqIHplcm8uCisJICovCisJaWYgKGV4dDJmc19zdGF0KGlvLT5uYW1lLCAmc3QpID09IDApIHsKKwkJaWYgKFNfSVNCTEsoc3Quc3RfbW9kZSkpCisJCQlpby0+ZmxhZ3MgfD0gQ0hBTk5FTF9GTEFHU19CTE9DS19ERVZJQ0U7CisJCWVsc2UKKwkJCWlvLT5mbGFncyB8PSBDSEFOTkVMX0ZMQUdTX0RJU0NBUkRfWkVST0VTOworCX0KKworI2lmZGVmIEJMS0RJU0NBUkRaRVJPRVMKKwl7CisJCWludCB6ZXJvZXMgPSAwOworCQlpZiAoaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJEWkVST0VTLCAmemVyb2VzKSA9PSAwICYmCisJCSAgICB6ZXJvZXMpCisJCQlpby0+ZmxhZ3MgfD0gQ0hBTk5FTF9GTEFHU19ESVNDQVJEX1pFUk9FUzsKKwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisJLyoKKwkgKiBTb21lIG9wZXJhdGluZyBzeXN0ZW1zIHJlcXVpcmUgdGhhdCB0aGUgYnVmZmVycyBiZSBhbGlnbmVkLAorCSAqIHJlZ2FyZGxlc3Mgb2YgT19ESVJFQ1QKKwkgKi8KKwlpZiAoIWlvLT5hbGlnbikKKwkJaW8tPmFsaWduID0gNTEyOworI2VuZGlmCisKKworCWlmICgocmV0dmFsID0gYWxsb2NfY2FjaGUoaW8sIGRhdGEpKSkKKwkJZ290byBjbGVhbnVwOworCisjaWZkZWYgQkxLUk9HRVQKKwlpZiAoZmxhZ3MgJiBJT19GTEFHX1JXKSB7CisJCWludCBlcnJvcjsKKwkJaW50IHJlYWRvbmx5ID0gMDsKKworCQkvKiBJcyB0aGUgYmxvY2sgZGV2aWNlIGFjdHVhbGx5IHdyaXRhYmxlPyAqLworCQllcnJvciA9IGlvY3RsKGRhdGEtPmRldiwgQkxLUk9HRVQsICZyZWFkb25seSk7CisJCWlmICghZXJyb3IgJiYgcmVhZG9ubHkpIHsKKwkJCXJldHZhbCA9IEVQRVJNOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBfX2xpbnV4X18KKyN1bmRlZiBSTElNX0lORklOSVRZCisjaWYgKGRlZmluZWQoX19hbHBoYV9fKSB8fCAoKGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSkgJiYgKFNJWkVPRl9MT05HID09IDQpKSkKKyNkZWZpbmUgUkxJTV9JTkZJTklUWQkoKHVuc2lnbmVkIGxvbmcpKH4wVUw+PjEpKQorI2Vsc2UKKyNkZWZpbmUgUkxJTV9JTkZJTklUWSAgKH4wVUwpCisjZW5kaWYKKwkvKgorCSAqIFdvcmsgYXJvdW5kIGEgYnVnIGluIDIuNC4xMC0yLjQuMTgga2VybmVscyB3aGVyZSB3cml0ZXMgdG8KKwkgKiBibG9jayBkZXZpY2VzIGFyZSB3cm9uZ2x5IGdldHRpbmcgaGl0IGJ5IHRoZSBmaWxlc2l6ZQorCSAqIGxpbWl0LiAgVGhpcyB3b3JrYXJvdW5kIGlzbid0IHBlcmZlY3QsIHNpbmNlIGl0IHdvbid0IHdvcmsKKwkgKiBpZiBnbGliYyB3YXNuJ3QgYnVpbHQgYWdhaW5zdCAyLjIgaGVhZGVyIGZpbGVzLiAgKFNpZ2guKQorCSAqCisJICovCisJaWYgKChmbGFncyAmIElPX0ZMQUdfUlcpICYmCisJICAgICh1bmFtZSgmdXQpID09IDApICYmCisJICAgICgodXQucmVsZWFzZVswXSA9PSAnMicpICYmICh1dC5yZWxlYXNlWzFdID09ICcuJykgJiYKKwkgICAgICh1dC5yZWxlYXNlWzJdID09ICc0JykgJiYgKHV0LnJlbGVhc2VbM10gPT0gJy4nKSAmJgorCSAgICAgKHV0LnJlbGVhc2VbNF0gPT0gJzEnKSAmJiAodXQucmVsZWFzZVs1XSA+PSAnMCcpICYmCisJICAgICAodXQucmVsZWFzZVs1XSA8ICc4JykpICYmCisJICAgIChleHQyZnNfc3RhdChpby0+bmFtZSwgJnN0KSA9PSAwKSAmJgorCSAgICAoU19JU0JMSyhzdC5zdF9tb2RlKSkpIHsKKwkJc3RydWN0IHJsaW1pdAlybGltOworCisJCXJsaW0ucmxpbV9jdXIgPSBybGltLnJsaW1fbWF4ID0gKHVuc2lnbmVkIGxvbmcpIFJMSU1fSU5GSU5JVFk7CisJCXNldHJsaW1pdChSTElNSVRfRlNJWkUsICZybGltKTsKKwkJZ2V0cmxpbWl0KFJMSU1JVF9GU0laRSwgJnJsaW0pOworCQlpZiAoKCh1bnNpZ25lZCBsb25nKSBybGltLnJsaW1fY3VyKSA8CisJCSAgICAoKHVuc2lnbmVkIGxvbmcpIHJsaW0ucmxpbV9tYXgpKSB7CisJCQlybGltLnJsaW1fY3VyID0gcmxpbS5ybGltX21heDsKKwkJCXNldHJsaW1pdChSTElNSVRfRlNJWkUsICZybGltKTsKKwkJfQorCX0KKyNlbmRpZgorCSpjaGFubmVsID0gaW87CisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJaWYgKGRhdGEpIHsKKwkJaWYgKGRhdGEtPmRldiA+PSAwKQorCQkJY2xvc2UoZGF0YS0+ZGV2KTsKKwkJZnJlZV9jYWNoZShkYXRhKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZkYXRhKTsKKwl9CisJaWYgKGlvKSB7CisJCWlmIChpby0+bmFtZSkgeworCQkJZXh0MmZzX2ZyZWVfbWVtKCZpby0+bmFtZSk7CisJCX0KKwkJZXh0MmZzX2ZyZWVfbWVtKCZpbyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9jbG9zZShpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdAlyZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmICgtLWNoYW5uZWwtPnJlZmNvdW50ID4gMCkKKwkJcmV0dXJuIDA7CisKKyNpZm5kZWYgTk9fSU9fQ0FDSEUKKwlyZXR2YWwgPSBmbHVzaF9jYWNoZWRfYmxvY2tzKGNoYW5uZWwsIGRhdGEsIDApOworI2VuZGlmCisKKwlpZiAoY2xvc2UoZGF0YS0+ZGV2KSA8IDApCisJCXJldHZhbCA9IGVycm5vOworCWZyZWVfY2FjaGUoZGF0YSk7CisKKwlleHQyZnNfZnJlZV9tZW0oJmNoYW5uZWwtPnByaXZhdGVfZGF0YSk7CisJaWYgKGNoYW5uZWwtPm5hbWUpCisJCWV4dDJmc19mcmVlX21lbSgmY2hhbm5lbC0+bmFtZSk7CisJZXh0MmZzX2ZyZWVfbWVtKCZjaGFubmVsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IHVuaXhfc2V0X2Jsa3NpemUoaW9fY2hhbm5lbCBjaGFubmVsLCBpbnQgYmxrc2l6ZSkKK3sKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisJaWYgKGNoYW5uZWwtPmJsb2NrX3NpemUgIT0gYmxrc2l6ZSkgeworI2lmbmRlZiBOT19JT19DQUNIRQorCQlpZiAoKHJldHZhbCA9IGZsdXNoX2NhY2hlZF9ibG9ja3MoY2hhbm5lbCwgZGF0YSwgMCkpKQorCQkJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorCisJCWNoYW5uZWwtPmJsb2NrX3NpemUgPSBibGtzaXplOworCQlmcmVlX2NhY2hlKGRhdGEpOworCQlpZiAoKHJldHZhbCA9IGFsbG9jX2NhY2hlKGNoYW5uZWwsIGRhdGEpKSkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9yZWFkX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJICAgICAgIGludCBjb3VudCwgdm9pZCAqYnVmKQoreworCXN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgdW5peF9jYWNoZSAqY2FjaGUsICpyZXVzZVtSRUFEX0RJUkVDVF9TSVpFXTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCSpjcDsKKwlpbnQJCWksIGo7CisKKwlFWFQyX0NIRUNLX01BR0lDKGNoYW5uZWwsIEVYVDJfRVRfTUFHSUNfSU9fQ0hBTk5FTCk7CisJZGF0YSA9IChzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKikgY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCUVYVDJfQ0hFQ0tfTUFHSUMoZGF0YSwgRVhUMl9FVF9NQUdJQ19VTklYX0lPX0NIQU5ORUwpOworCisjaWZkZWYgTk9fSU9fQ0FDSEUKKwlyZXR1cm4gcmF3X3JlYWRfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBjb3VudCwgYnVmKTsKKyNlbHNlCisJLyoKKwkgKiBJZiB3ZSdyZSBkb2luZyBhbiBvZGQtc2l6ZWQgcmVhZCBvciBhIHZlcnkgbGFyZ2UgcmVhZCwKKwkgKiBmbHVzaCBvdXQgdGhlIGNhY2hlIGFuZCB0aGVuIGRvIGEgZGlyZWN0IHJlYWQuCisJICovCisJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IFdSSVRFX0RJUkVDVF9TSVpFKSB7CisJCWlmICgocmV0dmFsID0gZmx1c2hfY2FjaGVkX2Jsb2NrcyhjaGFubmVsLCBkYXRhLCAwKSkpCisJCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gcmF3X3JlYWRfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBjb3VudCwgYnVmKTsKKwl9CisKKwljcCA9IGJ1ZjsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCS8qIElmIGl0J3MgaW4gdGhlIGNhY2hlLCB1c2UgaXQhICovCisJCWlmICgoY2FjaGUgPSBmaW5kX2NhY2hlZF9ibG9jayhkYXRhLCBibG9jaywgJnJldXNlWzBdKSkpIHsKKyNpZmRlZiBERUJVRworCQkJcHJpbnRmKCJVc2luZyBjYWNoZWQgYmxvY2sgJWx1XG4iLCBibG9jayk7CisjZW5kaWYKKwkJCW1lbWNweShjcCwgY2FjaGUtPmJ1ZiwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCQljb3VudC0tOworCQkJYmxvY2srKzsKKwkJCWNwICs9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY291bnQgPT0gMSkgeworCQkJLyoKKwkJCSAqIFNwZWNpYWwgY2FzZSB3aGVyZSB3ZSByZWFkIGRpcmVjdGx5IGludG8gdGhlCisJCQkgKiBjYWNoZSBidWZmZXI7IGltcG9ydGFudCBpbiB0aGUgT19ESVJFQ1QgY2FzZQorCQkJICovCisJCQljYWNoZSA9IHJldXNlWzBdOworCQkJcmV1c2VfY2FjaGUoY2hhbm5lbCwgZGF0YSwgY2FjaGUsIGJsb2NrKTsKKwkJCWlmICgocmV0dmFsID0gcmF3X3JlYWRfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCAxLAorCQkJCQkJICAgY2FjaGUtPmJ1ZikpKSB7CisJCQkJY2FjaGUtPmluX3VzZSA9IDA7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJCW1lbWNweShjcCwgY2FjaGUtPmJ1ZiwgY2hhbm5lbC0+YmxvY2tfc2l6ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIEZpbmQgdGhlIG51bWJlciBvZiB1bmNhY2hlZCBibG9ja3Mgc28gd2UgY2FuIGRvIGEKKwkJICogc2luZ2xlIHJlYWQgcmVxdWVzdAorCQkgKi8KKwkJZm9yIChpPTE7IGkgPCBjb3VudDsgaSsrKQorCQkJaWYgKGZpbmRfY2FjaGVkX2Jsb2NrKGRhdGEsIGJsb2NrK2ksICZyZXVzZVtpXSkpCisJCQkJYnJlYWs7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJSZWFkaW5nICVkIGJsb2NrcyBzdGFydGluZyBhdCAlbHVcbiIsIGksIGJsb2NrKTsKKyNlbmRpZgorCQlpZiAoKHJldHZhbCA9IHJhd19yZWFkX2JsayhjaGFubmVsLCBkYXRhLCBibG9jaywgaSwgY3ApKSkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJLyogU2F2ZSB0aGUgcmVzdWx0cyBpbiB0aGUgY2FjaGUgKi8KKwkJZm9yIChqPTA7IGogPCBpOyBqKyspIHsKKwkJCWNvdW50LS07CisJCQljYWNoZSA9IHJldXNlW2pdOworCQkJcmV1c2VfY2FjaGUoY2hhbm5lbCwgZGF0YSwgY2FjaGUsIGJsb2NrKyspOworCQkJbWVtY3B5KGNhY2hlLT5idWYsIGNwLCBjaGFubmVsLT5ibG9ja19zaXplKTsKKwkJCWNwICs9IGNoYW5uZWwtPmJsb2NrX3NpemU7CisJCX0KKwl9CisJcmV0dXJuIDA7CisjZW5kaWYgLyogTk9fSU9fQ0FDSEUgKi8KK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X3JlYWRfYmxrKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBibG9jaywKKwkJCSAgICAgICBpbnQgY291bnQsIHZvaWQgKmJ1ZikKK3sKKwlyZXR1cm4gdW5peF9yZWFkX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X3dyaXRlX2JsazY0KGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgdW5peF9jYWNoZSAqY2FjaGUsICpyZXVzZTsKKwllcnJjb2RlX3QJcmV0dmFsID0gMDsKKwljb25zdCBjaGFyCSpjcDsKKwlpbnQJCXdyaXRldGhyb3VnaDsKKworCUVYVDJfQ0hFQ0tfTUFHSUMoY2hhbm5lbCwgRVhUMl9FVF9NQUdJQ19JT19DSEFOTkVMKTsKKwlkYXRhID0gKHN0cnVjdCB1bml4X3ByaXZhdGVfZGF0YSAqKSBjaGFubmVsLT5wcml2YXRlX2RhdGE7CisJRVhUMl9DSEVDS19NQUdJQyhkYXRhLCBFWFQyX0VUX01BR0lDX1VOSVhfSU9fQ0hBTk5FTCk7CisKKyNpZmRlZiBOT19JT19DQUNIRQorCXJldHVybiByYXdfd3JpdGVfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBjb3VudCwgYnVmKTsKKyNlbHNlCisJLyoKKwkgKiBJZiB3ZSdyZSBkb2luZyBhbiBvZGQtc2l6ZWQgd3JpdGUgb3IgYSB2ZXJ5IGxhcmdlIHdyaXRlLAorCSAqIGZsdXNoIG91dCB0aGUgY2FjaGUgY29tcGxldGVseSBhbmQgdGhlbiBkbyBhIGRpcmVjdCB3cml0ZS4KKwkgKi8KKwlpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gV1JJVEVfRElSRUNUX1NJWkUpIHsKKwkJaWYgKChyZXR2YWwgPSBmbHVzaF9jYWNoZWRfYmxvY2tzKGNoYW5uZWwsIGRhdGEsIDEpKSkKKwkJCXJldHVybiByZXR2YWw7CisJCXJldHVybiByYXdfd3JpdGVfYmxrKGNoYW5uZWwsIGRhdGEsIGJsb2NrLCBjb3VudCwgYnVmKTsKKwl9CisKKwkvKgorCSAqIEZvciBhIG1vZGVyYXRlLXNpemVkIG11bHRpLWJsb2NrIHdyaXRlLCBmaXJzdCBmb3JjZSBhIHdyaXRlCisJICogaWYgd2UncmUgaW4gd3JpdGUtdGhyb3VnaCBjYWNoZSBtb2RlLCBhbmQgdGhlbiBmaWxsIHRoZQorCSAqIGNhY2hlIHdpdGggdGhlIGJsb2Nrcy4KKwkgKi8KKwl3cml0ZXRocm91Z2ggPSBjaGFubmVsLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfV1JJVEVUSFJPVUdIOworCWlmICh3cml0ZXRocm91Z2gpCisJCXJldHZhbCA9IHJhd193cml0ZV9ibGsoY2hhbm5lbCwgZGF0YSwgYmxvY2ssIGNvdW50LCBidWYpOworCisJY3AgPSBidWY7CisJd2hpbGUgKGNvdW50ID4gMCkgeworCQljYWNoZSA9IGZpbmRfY2FjaGVkX2Jsb2NrKGRhdGEsIGJsb2NrLCAmcmV1c2UpOworCQlpZiAoIWNhY2hlKSB7CisJCQljYWNoZSA9IHJldXNlOworCQkJcmV1c2VfY2FjaGUoY2hhbm5lbCwgZGF0YSwgY2FjaGUsIGJsb2NrKTsKKwkJfQorCQltZW1jcHkoY2FjaGUtPmJ1ZiwgY3AsIGNoYW5uZWwtPmJsb2NrX3NpemUpOworCQljYWNoZS0+ZGlydHkgPSAhd3JpdGV0aHJvdWdoOworCQljb3VudC0tOworCQlibG9jaysrOworCQljcCArPSBjaGFubmVsLT5ibG9ja19zaXplOworCX0KKwlyZXR1cm4gcmV0dmFsOworI2VuZGlmIC8qIE5PX0lPX0NBQ0hFICovCit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF93cml0ZV9ibGsoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGJsb2NrLAorCQkJCWludCBjb3VudCwgY29uc3Qgdm9pZCAqYnVmKQoreworCXJldHVybiB1bml4X3dyaXRlX2JsazY0KGNoYW5uZWwsIGJsb2NrLCBjb3VudCwgYnVmKTsKK30KKworc3RhdGljIGVycmNvZGVfdCB1bml4X3dyaXRlX2J5dGUoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgaW50IHNpemUsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgdW5peF9wcml2YXRlX2RhdGEgKmRhdGE7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJc3NpemVfdAkJYWN0dWFsOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5hbGlnbiAhPSAwKSB7CisjaWZkZWYgQUxJR05fREVCVUcKKwkJcHJpbnRmKCJ1bml4X3dyaXRlX2J5dGU6IE9fRElSRUNUIGZhbGxiYWNrXG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gRVhUMl9FVF9VTklNUExFTUVOVEVEOworCX0KKworI2lmbmRlZiBOT19JT19DQUNIRQorCS8qCisJICogRmx1c2ggb3V0IHRoZSBjYWNoZSBjb21wbGV0ZWx5CisJICovCisJaWYgKChyZXR2YWwgPSBmbHVzaF9jYWNoZWRfYmxvY2tzKGNoYW5uZWwsIGRhdGEsIDEpKSkKKwkJcmV0dXJuIHJldHZhbDsKKyNlbmRpZgorCisJaWYgKGxzZWVrKGRhdGEtPmRldiwgb2Zmc2V0ICsgZGF0YS0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKQorCQlyZXR1cm4gZXJybm87CisKKwlhY3R1YWwgPSB3cml0ZShkYXRhLT5kZXYsIGJ1Ziwgc2l6ZSk7CisJaWYgKGFjdHVhbCAhPSBzaXplKQorCQlyZXR1cm4gRVhUMl9FVF9TSE9SVF9XUklURTsKKworCXJldHVybiAwOworfQorCisvKgorICogRmx1c2ggZGF0YSBidWZmZXJzIHRvIGRpc2suCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9mbHVzaChpb19jaGFubmVsIGNoYW5uZWwpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworI2lmbmRlZiBOT19JT19DQUNIRQorCXJldHZhbCA9IGZsdXNoX2NhY2hlZF9ibG9ja3MoY2hhbm5lbCwgZGF0YSwgMCk7CisjZW5kaWYKKwlmc3luYyhkYXRhLT5kZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgdW5peF9zZXRfb3B0aW9uKGlvX2NoYW5uZWwgY2hhbm5lbCwgY29uc3QgY2hhciAqb3B0aW9uLAorCQkJCSBjb25zdCBjaGFyICphcmcpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJY2hhciAqZW5kOworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmICghc3RyY21wKG9wdGlvbiwgIm9mZnNldCIpKSB7CisJCWlmICghYXJnKQorCQkJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKKworCQl0bXAgPSBzdHJ0b3VsbChhcmcsICZlbmQsIDApOworCQlpZiAoKmVuZCkKKwkJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisJCWRhdGEtPm9mZnNldCA9IHRtcDsKKwkJaWYgKGRhdGEtPm9mZnNldCA8IDApCisJCQlyZXR1cm4gRVhUMl9FVF9JTlZBTElEX0FSR1VNRU5UOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIEVYVDJfRVRfSU5WQUxJRF9BUkdVTUVOVDsKK30KKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChCTEtESVNDQVJEKQorI2RlZmluZSBCTEtESVNDQVJECQlfSU8oMHgxMiwxMTkpCisjZW5kaWYKKworc3RhdGljIGVycmNvZGVfdCB1bml4X2Rpc2NhcmQoaW9fY2hhbm5lbCBjaGFubmVsLCB1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY291bnQpCit7CisJc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICpkYXRhOworCWludAkJcmV0OworCisJRVhUMl9DSEVDS19NQUdJQyhjaGFubmVsLCBFWFQyX0VUX01BR0lDX0lPX0NIQU5ORUwpOworCWRhdGEgPSAoc3RydWN0IHVuaXhfcHJpdmF0ZV9kYXRhICopIGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlFWFQyX0NIRUNLX01BR0lDKGRhdGEsIEVYVDJfRVRfTUFHSUNfVU5JWF9JT19DSEFOTkVMKTsKKworCWlmIChjaGFubmVsLT5mbGFncyAmIENIQU5ORUxfRkxBR1NfQkxPQ0tfREVWSUNFKSB7CisjaWZkZWYgQkxLRElTQ0FSRAorCQlfX3VpbnQ2NF90IHJhbmdlWzJdOworCisJCXJhbmdlWzBdID0gKF9fdWludDY0X3QpKGJsb2NrKSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisJCXJhbmdlWzFdID0gKF9fdWludDY0X3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisKKwkJcmV0ID0gaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJELCAmcmFuZ2UpOworI2Vsc2UKKwkJZ290byB1bmltcGxlbWVudGVkOworI2VuZGlmCisJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKEhBVkVfRkFMTE9DQVRFKSAmJiBkZWZpbmVkKEZBTExPQ19GTF9QVU5DSF9IT0xFKQorCQkvKgorCQkgKiBJZiB3ZSBhcmUgbm90IG9uIGJsb2NrIGRldmljZSwgdHJ5IHRvIHVzZSBwdW5jaCBob2xlCisJCSAqIHRvIHJlY2xhaW0gZnJlZSBzcGFjZS4KKwkJICovCisJCXJldCA9IGZhbGxvY2F0ZShkYXRhLT5kZXYsCisJCQkJRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLAorCQkJCShvZmZfdCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZSwKKwkJCQkob2ZmX3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemUpOworI2Vsc2UKKwkJZ290byB1bmltcGxlbWVudGVkOworI2VuZGlmCisJfQorCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFT1BOT1RTVVBQKQorCQkJZ290byB1bmltcGxlbWVudGVkOworCQlyZXR1cm4gZXJybm87CisJfQorCXJldHVybiAwOwordW5pbXBsZW1lbnRlZDoKKwlyZXR1cm4gRVhUMl9FVF9VTklNUExFTUVOVEVEOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdW5saW5rLmMgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy91bmxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZlYjllCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdW5saW5rLmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIHVubGluay5jIC0tLSBkZWxldGUgbGlua3MgaW4gYSBleHQyZnMgZGlyZWN0b3J5CisgKgorICogQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5CisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworc3RydWN0IGxpbmtfc3RydWN0ICB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5hbWVsZW47CisJZXh0Ml9pbm9fdAlpbm9kZTsKKwlpbnQJCWZsYWdzOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqcHJldjsKKwlpbnQJCWRvbmU7Cit9OworCisjaWZkZWYgX19UVVJCT0NfXworICNwcmFnbWEgYXJnc3VzZWQKKyNlbmRpZgorc3RhdGljIGludCB1bmxpbmtfcHJvYyhzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKmRpcmVudCwKKwkJICAgICBpbnQJb2Zmc2V0LAorCQkgICAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgIGNoYXIJKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCSAgICAgdm9pZAkqcHJpdl9kYXRhKQoreworCXN0cnVjdCBsaW5rX3N0cnVjdCAqbHMgPSAoc3RydWN0IGxpbmtfc3RydWN0ICopIHByaXZfZGF0YTsKKwlzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgKnByZXY7CisKKwlwcmV2ID0gbHMtPnByZXY7CisJbHMtPnByZXYgPSBkaXJlbnQ7CisKKwlpZiAobHMtPm5hbWUpIHsKKwkJaWYgKChkaXJlbnQtPm5hbWVfbGVuICYgMHhGRikgIT0gbHMtPm5hbWVsZW4pCisJCQlyZXR1cm4gMDsKKwkJaWYgKHN0cm5jbXAobHMtPm5hbWUsIGRpcmVudC0+bmFtZSwgZGlyZW50LT5uYW1lX2xlbiAmIDB4RkYpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChscy0+aW5vZGUpIHsKKwkJaWYgKGRpcmVudC0+aW5vZGUgIT0gbHMtPmlub2RlKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKCFkaXJlbnQtPmlub2RlKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9mZnNldCkKKwkJcHJldi0+cmVjX2xlbiArPSBkaXJlbnQtPnJlY19sZW47CisJZWxzZQorCQlkaXJlbnQtPmlub2RlID0gMDsKKwlscy0+ZG9uZSsrOworCXJldHVybiBESVJFTlRfQUJPUlR8RElSRU5UX0NIQU5HRUQ7Cit9CisKKyNpZmRlZiBfX1RVUkJPQ19fCisgI3ByYWdtYSBhcmdzdXNlZAorI2VuZGlmCitlcnJjb2RlX3QgZXh0MmZzX3VubGluayhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBkaXIsCisJCQljb25zdCBjaGFyICpuYW1lLCBleHQyX2lub190IGlubywKKwkJCWludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlzdHJ1Y3QgbGlua19zdHJ1Y3QgbHM7CisKKwlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworCisJaWYgKCFuYW1lICYmICFpbm8pCisJCXJldHVybiBFWFQyX0VUX0lOVkFMSURfQVJHVU1FTlQ7CisKKwlpZiAoIShmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKQorCQlyZXR1cm4gRVhUMl9FVF9ST19GSUxTWVM7CisKKwlscy5uYW1lID0gbmFtZTsKKwlscy5uYW1lbGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJbHMuaW5vZGUgPSBpbm87CisJbHMuZmxhZ3MgPSAwOworCWxzLmRvbmUgPSAwOworCWxzLnByZXYgPSAwOworCisJcmV0dmFsID0gZXh0MmZzX2Rpcl9pdGVyYXRlKGZzLCBkaXIsIERJUkVOVF9GTEFHX0lOQ0xVREVfRU1QVFksCisJCQkJICAgIDAsIHVubGlua19wcm9jLCAmbHMpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gKGxzLmRvbmUpID8gMCA6IEVYVDJfRVRfRElSX05PX1NQQUNFOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL2V4dDJmcy92YWxpZF9ibGsuYyBiL2UyZnNwcm9ncy9saWIvZXh0MmZzL3ZhbGlkX2Jsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjM2RlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy92YWxpZF9ibGsuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogdmFsaWRfYmxrLmMgLS0tIGRvZXMgdGhlIGlub2RlIGhhdmUgdmFsaWQgYmxvY2tzPworICoKKyAqIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMuaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIHRoZSBpbm9kZSdzIGJsb2NrIGVudHJpZXMgYWN0dWFsbHkKKyAqIGNvbnRhaW4gYmxvY2sgZW50cmllcy4KKyAqLworaW50IGV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihleHQyX2ZpbHN5cyBmcywgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCS8qCisJICogT25seSBkaXJlY3RvcmllcywgcmVndWxhciBmaWxlcywgYW5kIHNvbWUgc3ltYm9saWMgbGlua3MKKwkgKiBoYXZlIHZhbGlkIGJsb2NrIGVudHJpZXMuCisJICovCisJaWYgKCFMSU5VWF9TX0lTRElSKGlub2RlLT5pX21vZGUpICYmICFMSU5VWF9TX0lTUkVHKGlub2RlLT5pX21vZGUpICYmCisJICAgICFMSU5VWF9TX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIHN5bWJvbGljIGxpbmsgaXMgYSAiZmFzdCBzeW1saW5rIiwgdGhlbiB0aGUgc3ltbGluaworCSAqIHRhcmdldCBpcyBzdG9yZWQgaW4gdGhlIGJsb2NrIGVudHJpZXMuCisJICovCisJaWYgKExJTlVYX1NfSVNMTksgKGlub2RlLT5pX21vZGUpKSB7CisJCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsIGlub2RlKSA9PSAwKSB7CisJCQkvKiBXaXRoIG5vIEVBIGJsb2NrLCB3ZSBjYW4gcmVseSBvbiBpX2Jsb2NrcyAqLworCQkJaWYgKGlub2RlLT5pX2Jsb2NrcyA9PSAwKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJLyogV2l0aCBhbiBFQSBibG9jaywgbGlmZSBnZXRzIG1vcmUgdHJpY2t5ICovCisJCQlpZiAoaW5vZGUtPmlfc2l6ZSA+PSBFWFQyX05fQkxPQ0tTKjQpCisJCQkJcmV0dXJuIDE7IC8qIGRlZmluaXRlbHkgdXNpbmcgaV9ibG9ja1tdICovCisJCQlpZiAoaW5vZGUtPmlfc2l6ZSA+IDQgJiYgaW5vZGUtPmlfYmxvY2tbMV0gPT0gMCkKKwkJCQlyZXR1cm4gMTsgLyogZGVmaW5pdGVseSB1c2luZyBpX2Jsb2NrW10gKi8KKwkJCXJldHVybiAwOyAvKiBQcm9iYWJseSBhIGZhc3Qgc3ltbGluayAqLworCQl9CisJfQorCXJldHVybiAxOworfQorCitpbnQgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3Moc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlKQoreworCXJldHVybiBleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIoTlVMTCwgaW5vZGUpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvdmVyc2lvbi5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDA2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy92ZXJzaW9uLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIHZlcnNpb24uYyAtLS0gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBleHQyIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlICJleHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzLmgiCisKKyNpbmNsdWRlICIuLi8uLi92ZXJzaW9uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJfdmVyc2lvbiA9IEUyRlNQUk9HU19WRVJTSU9OOworc3RhdGljIGNvbnN0IGNoYXIgKmxpYl9kYXRlID0gRTJGU1BST0dTX0RBVEU7CisKK2ludCBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcoY29uc3QgY2hhciAqdmVyX3N0cmluZykKK3sKKwljb25zdCBjaGFyICpjcDsKKwlpbnQgdmVyc2lvbiA9IDAsIGRvdF9jb3VudCA9IDA7CisKKwlmb3IgKGNwID0gdmVyX3N0cmluZzsgKmNwOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJy4nKSB7CisJCQlpZiAoZG90X2NvdW50KyspCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc2RpZ2l0KCpjcCkpCisJCQlicmVhazsKKwkJdmVyc2lvbiA9ICh2ZXJzaW9uICogMTApICsgKCpjcCAtICcwJyk7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCisKK2ludCBleHQyZnNfZ2V0X2xpYnJhcnlfdmVyc2lvbihjb25zdCBjaGFyICoqdmVyX3N0cmluZywKKwkJCSAgICAgICBjb25zdCBjaGFyICoqZGF0ZV9zdHJpbmcpCit7CisJaWYgKHZlcl9zdHJpbmcpCisJCSp2ZXJfc3RyaW5nID0gbGliX3ZlcnNpb247CisJaWYgKGRhdGVfc3RyaW5nKQorCQkqZGF0ZV9zdHJpbmcgPSBsaWJfZGF0ZTsKKworCXJldHVybiBleHQyZnNfcGFyc2VfdmVyc2lvbl9zdHJpbmcobGliX3ZlcnNpb24pOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9leHQyZnMvd3JpdGVfYmJfZmlsZS5jIGIvZTJmc3Byb2dzL2xpYi9leHQyZnMvd3JpdGVfYmJfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmNmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2V4dDJmcy93cml0ZV9iYl9maWxlLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIHdyaXRlX2JiX2ZpbGUuYyAtLS0gd3JpdGUgYSBsaXN0IG9mIGJhZCBibG9ja3MgdG8gYSBGSUxFICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorCitlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2JiX0ZJTEUoZXh0Ml9iYWRibG9ja3NfbGlzdCBiYl9saXN0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgRklMRSAqZikKK3sKKwliYWRibG9ja3NfaXRlcmF0ZQliYl9pdGVyOworCWJsa190CQkJYmxrOworCWVycmNvZGVfdAkJcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmJfbGlzdCwgJmJiX2l0ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwl3aGlsZSAoZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUoYmJfaXRlciwgJmJsaykpIHsKKwkJZnByaW50ZihmLCAiJXVcbiIsIGJsayk7CisJfQorCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChiYl9pdGVyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvZnBvcGVuLmMgYi9lMmZzcHJvZ3MvbGliL2Zwb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjI1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL2Zwb3Blbi5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogZnBvcGVuLmMgLS0tIHVubGlrZSB0aGUgbGliYyBwb3BlbiwgaXQgZGlyZWN0bHkgZXhlY3V0ZXMgdGhlCisgKiBjb21tYW5kIGluc3RlYWQgb2YgY2FsbCBvdXQgdG8gdGhlIHNoZWxsLgorICoKKyAqIENvcHlyaWdodCBUaGVvZG9yZSBUcydvLCAxOTk2LTE5OTkuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UgdGhpcyBmaWxlIGlzIGdyYW50ZWQgZm9yIGFueSBwdXJwb3NlcywgYXMgbG9uZyBhcworICogdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIGtlcHQgaW50YWN0IGFuZCB0aGUgYXV0aG9yIGlzIG5vdCBoZWxkCisgKiBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBwcm9ncmFtLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNkZWZpbmUgTUFYX0FSR1YgMjU2CisKK2V4dGVybiBGSUxFICpmcG9wZW4oY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICptb2RlKTsKKworRklMRSAqZnBvcGVuKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwljaGFyCSphcmd2W01BWF9BUkdWXTsKKwlpbnQJaSA9IDA7CisJY2hhcgkqYnVmLCAqcHJvZyA9IDA7CisJY2hhcgkqcDsKKwlpbnQJZG9fc3RkaW4sIGRvX3N0ZGVyciA9IDA7CisJaW50CWZkc1syXTsKKwlwaWRfdAlwaWQ7CisKKwlpZiAoIW1vZGUpIHsKKwkJZXJybm8gPSBFRkFVTFQ7CisJCXJldHVybiBOVUxMOworCX0KKworCXN3aXRjaCAoKm1vZGUpIHsKKwljYXNlICdyJzoKKwkJZG9fc3RkaW4gPSAwOworCQlicmVhazsKKwljYXNlICd3JzoKKwkJZG9fc3RkaW4gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXN3aXRjaCAoKihtb2RlKzEpKSB7CisJY2FzZSAnJic6CisJCWRvX3N0ZGVyciA9IDE7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIGFyZ3YgdmVjdG9yLi4uLgorCSAqLworCWJ1ZiA9IG1hbGxvYyhzdHJsZW4oY21kKSsxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisJc3RyY3B5KGJ1ZiwgY21kKTsKKwlwID0gYnVmOworCXdoaWxlIChwICYmICpwKSB7CisJCWlmIChpc3NwYWNlKCpwKSkgeworCQkJcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGkgPT0gMCkKKwkJCXByb2cgPSBwOworCQlhcmd2W2krK10gPSBwOworCQlwID0gc3RyY2hyKHAsICcgJyk7CisJCWlmIChwKQorCQkJKnArKyA9IDA7CisJfQorCisJYXJndltpXSA9IDA7CisKKwkvKgorCSAqIEdldCB0aGUgcGlwZQorCSAqLworCWlmIChwaXBlKGZkcykgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZvcmsgYW5kIGV4ZWN1dGUgdGhlIGNvcnJlY3QgcHJvZ3JhbS4gKi8KKwlpZiAoKHBpZCA9IGZvcmsoKSkgPCAwKSB7CisJCXBlcnJvcigiZm9yayIpOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKHBpZCA9PSAwKSB7CisJCWlmIChkb19zdGRpbikgeworCQkJY2xvc2UoZmRzWzFdKTsKKwkJCWR1cDIoZmRzWzBdLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWNsb3NlKGZkc1swXSk7CisJCQlkdXAyKGZkc1sxXSwgMSk7CisJCQlpZiAoZG9fc3RkZXJyKQorCQkJCWR1cDIoZmRzWzFdLCAyKTsKKwkJfQorCQkodm9pZCkgZXhlY3ZwKHByb2csIGFyZ3YpOworCQlwZXJyb3IocHJvZyk7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiBmZG9wZW4oZG9fc3RkaW4gPyBmZHNbMV0gOiBmZHNbMF0sIG1vZGUpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3F1b3RhL0FuZHJvaWQubWsgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkN2I3ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvQW5kcm9pZC5tawpAQCAtMCwwICsxLDc0IEBACitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKK2xpYmV4dDJfcXVvdGFfc3JjX2ZpbGVzIDo9IFwKKwlta3F1b3RhLmMgXAorCXF1b3RhaW8uYyBcCisJcXVvdGFpb190cmVlLmMgXAorCXF1b3RhaW9fdjIuYyBcCisJLi4vLi4vZTJmc2NrL2RpY3QuYworCitsaWJleHQyX3F1b3RhX2NfaW5jbHVkZXMgOj0gZXh0ZXJuYWwvZTJmc3Byb2dzL2xpYgorCitsaWJleHQyX3F1b3RhX2NmbGFncyA6PSAtTzIgLWcgLVcgLVdhbGwgXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkRVUCBcCisJLURIQVZFX01NQVAgXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfR0VUUEFHRVNJWkUgXAorCS1ESEFWRV9MU0VFSzY0IFwKKwktREhBVkVfTFNFRUs2NF9QUk9UT1RZUEUgXAorCS1ESEFWRV9FWFQyX0lPQ1RMUyBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKyAgICAgICAgLURIQVZFX1NZU19QQVJBTV9IIFwKKwktREhBVkVfU1lTQ09ORiBcCisJLVduby11bnVzZWQtcGFyYW1ldGVyCisKK2xpYmV4dDJfcXVvdGFfc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJleHQyZnMgbGliZXh0Ml9jb21fZXJyCisKK2xpYmV4dDJfcXVvdGFfc3RhdGljX2xpYnJhcmllcyA6PSBsaWJleHQyZnMgbGliZXh0Ml9jb21fZXJyCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJleHQyX3F1b3RhX3NyY19maWxlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX3F1b3RhX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX3F1b3RhX2NmbGFncykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgJChsaWJleHQyX3F1b3RhX3NoYXJlZF9saWJyYXJpZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9xdW90YQorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9xdW90YV9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml9xdW90YV9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9xdW90YV9jZmxhZ3MpCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmMgJChsaWJleHQyX3F1b3RhX3N0YXRpY19saWJyYXJpZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9xdW90YQorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml9xdW90YV9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml9xdW90YV9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliZXh0Ml9xdW90YV9jZmxhZ3MpCitMT0NBTF9NT0RVTEUgOj0gbGliZXh0Ml9xdW90YS1ob3N0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGFkZHN1ZmZpeCAtaG9zdCwgJChsaWJleHQyX3F1b3RhX3NoYXJlZF9saWJyYXJpZXMpKQorCitpbmNsdWRlICQoQlVJTERfSE9TVF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvcXVvdGEvTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvbGliL3F1b3RhL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGY2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTYyIEBACisjIE1ha2VmaWxlIGZvciB0aGUgUVVPVEEgbGlicmFyeQorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9xdW90YQorSU5TVEFMTCA9IEBJTlNUQUxMQAorCitATUNPTkZJR0AKKworYWxsOjoKKworU01BTlBBR0VTPQorCisKK09CSlM9CQlta3F1b3RhLm8gcXVvdGFpby5vIHF1b3RhaW9fdjIubyBxdW90YWlvX3RyZWUubyBkaWN0Lm8KKworU1JDUz0JCSQoc3JjZGlyKS9ta3F1b3RhLmMgXAorCQkkKHNyY2RpcikvcXVvdGFpby5jIFwKKwkJJChzcmNkaXIpL3F1b3RhaW9fdHJlZS5jIFwKKwkJJChzcmNkaXIpL3F1b3RhaW9fdjIuYyBcCisJCSQoc3JjZGlyKS8uLi8uLi9lMmZzY2svZGljdC5jCisKK0xJQlJBUlk9IGxpYnF1b3RhCitMSUJESVI9IHF1b3RhCisKKyNFTEZfVkVSU0lPTiA9IDEuMAorI0VMRl9TT19WRVJTSU9OID0gMQorI0VMRl9JTUFHRSA9IGxpYnF1b3RhCisjRUxGX01ZRElSID0gcXVvdGEKKyNFTEZfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorI0VMRl9PVEhFUl9MSUJTID0gLWxleHQyZnMKKworI0JTRExJQl9WRVJTSU9OID0gMS4wCisjQlNETElCX0lNQUdFID0gbGlicXVvdGEKKyNCU0RMSUJfTVlESVIgPSBxdW90YQorI0JTRExJQl9JTlNUQUxMX0RJUiA9ICQocm9vdF9saWJkaXIpCisKK0BNQUtFRklMRV9MSUJSQVJZQAorI01BS0VGSUxFX0VMRiMKKyNNQUtFRklMRV9CU0RMSUIjCitATUFLRUZJTEVfUFJPRklMRUAKK0BNQUtFRklMRV9DSEVDS0VSQAorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWMgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CitAUFJPRklMRV9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZyAtcGcgLW8gcHJvZmlsZWQvJCoubyAtYyAkPAorQENIRUNLRVJfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWNoZWNrZXIgLWcgLW8gY2hlY2tlci8kKi5vIC1jICQ8CisjRUxGX0NNVCMJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CisjQlNETElCX0NNVCMJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCithbGw6OiAkKFNNQU5QQUdFUykgcXVvdGEucGMKKworcXVvdGEucGM6ICQoc3JjZGlyKS9xdW90YS5wYy5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCSQoRSkgIglDT05GSUcuU1RBVFVTICRAIgorCSQoUSkgY2QgJCh0b3BfYnVpbGRkaXIpOyBDT05GSUdfRklMRVM9bGliL3F1b3RhL3F1b3RhLnBjIC4vY29uZmlnLnN0YXR1cworCitkaWN0Lm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkKHRvcF9zcmNkaXIpL2UyZnNjay9kaWN0LmMgLW8gJEAKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC9kaWN0Lm8gLWMgXAorQFBST0ZJTEVfQ01UQAkkKHRvcF9zcmNkaXIpL2UyZnNjay9kaWN0LmMKK0BDSEVDS0VSX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jaGVja2VyIC1nIC1vIGNoZWNrZXIvJCoubyAtYyBcCitAQ0hFQ0tFUl9DTVRACSQodG9wX3NyY2RpcikvZTJmc2NrL2RpY3QuYworI0VMRl9DTVQjCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZlBJQyAtbyBlbGZzaGFyZWQvJCoubyAtYyBcCisjRUxGX0NNVCMJJCh0b3Bfc3JjZGlyKS9lMmZzY2svZGljdC5jCisjQlNETElCX0NNVCMJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyBcCisjQlNETElCX0NNVCMJJCh0b3Bfc3JjZGlyKS9lMmZzY2svZGljdC5jCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS9xdW90YSAkKG1hbjNkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChsaWJkaXIpICBcCisJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL3F1b3RhICQoREVTVERJUikkKG1hbjNkaXIpIFwKKwkJJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcKKworaW5zdGFsbDo6IGFsbCBpbnN0YWxsZGlycworCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL2xpYnF1b3RhLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGlicXVvdGEuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnF1b3RhLmEKKwktJChRKSAkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJxdW90YS5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGlicXVvdGEuYQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS9xdW90YS9ta3F1b3RhLmgiCisJJChRKSAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL21rcXVvdGEuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9xdW90YS9ta3F1b3RhLmgKKwkkKFEpIGZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4zZGlyKS8kJGkuZ3o7IFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKG1hbjNkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW4zZGlyKS8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvcGtnY29uZmlnL3F1b3RhLnBjIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIHF1b3RhLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL3F1b3RhLnBjCisKK3VuaW5zdGFsbDo6CisJJChSTSkgLWYgJChERVNURElSKSQobGliZGlyKS9saWJxdW90YS5hIFwKKwkJJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvcXVvdGEucGMKKwlmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuM2RpcikvJCRpOyBcCisJZG9uZQorCitjbGVhbjo6CisJJChSTSkgLWYgXCMqICoucyAqLm8gKi5hICp+ICouYmFrIGNvcmUgcHJvZmlsZWQvKiBjaGVja2VyLyoKKwkkKFJNKSAtZiAuLi9saWJxdW90YS5hIC4uL2xpYnF1b3RhX3AuYSAkKFNNQU5QQUdFUykKKworI2NoZWNrOjogdHN0X3V1aWQKKyMJTERfTElCUkFSWV9QQVRIPSQoTElCKSBEWUxEX0xJQlJBUllfUEFUSD0kKExJQikgLi90c3RfdXVpZAorCittb3N0bHljbGVhbjo6IGNsZWFuCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgcXVvdGEucGMgXAorCQkkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMKKyMgSGFjayB0byBwYXJhbGxlbCBtYWtlcyByZWNvZ25pemUgZGVwZW5kZW5jaWVzIGNvcnJlY3RseS4KKyMKKy4uLy4uL2xpYi9saWJxdW90YS5hOiBsaWJxdW90YS5hCisuLi8uLi9saWIvbGlicXVvdGEuc286IGltYWdlCisuLi8uLi9saWIvbGlicXVvdGEuZHlsaWI6IGltYWdlCisKKyQoT0JKUyk6CisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworbWtxdW90YS5vOiAkKHNyY2RpcikvbWtxdW90YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggJChzcmNkaXIpL3F1b3RhaW8uaCAkKHNyY2RpcikvZHFibGtfdjIuaCBcCisgJChzcmNkaXIpL3F1b3RhaW9fdHJlZS5oICQoc3JjZGlyKS9xdW90YWlvX3YyLmggJChzcmNkaXIpL21rcXVvdGEuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaCAkKHNyY2RpcikvY29tbW9uLmgKK3F1b3RhaW8ubzogJChzcmNkaXIpL3F1b3RhaW8uYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbW1vbi5oICQoc3JjZGlyKS9xdW90YWlvLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQoc3JjZGlyKS9kcWJsa192Mi5oICQoc3JjZGlyKS9xdW90YWlvX3RyZWUuaAorcXVvdGFpb190cmVlLm86ICQoc3JjZGlyKS9xdW90YWlvX3RyZWUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2NvbW1vbi5oICQoc3JjZGlyKS9xdW90YWlvX3RyZWUuaCBcCisgJChzcmNkaXIpL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvZHFibGtfdjIuaAorcXVvdGFpb192Mi5vOiAkKHNyY2RpcikvcXVvdGFpb192Mi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvY29tbW9uLmggJChzcmNkaXIpL3F1b3RhaW9fdjIuaCBcCisgJChzcmNkaXIpL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvZHFibGtfdjIuaCAkKHNyY2RpcikvcXVvdGFpb190cmVlLmgKK2RpY3QubzogJChzcmNkaXIpLy4uLy4uL2UyZnNjay9kaWN0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS8uLi8uLi9lMmZzY2svZGljdC5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3F1b3RhL2NvbW1vbi5oIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjNmNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9jb21tb24uaApAQCAtMCwwICsxLDI4IEBACisvKgorICoKKyAqCVZhcmlvdXMgdGhpbmdzIGNvbW1vbiBmb3IgYWxsIHV0aWxpdGllcworICoKKyAqLworCisjaWZuZGVmIF9fUVVPVEFfQ09NTU9OX0hfXworI2RlZmluZSBfX1FVT1RBX0NPTU1PTl9IX18KKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisjIGlmICFkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDgpIHx8IF9fU1RSSUNUX0FOU0lfXworIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIGxvZ19lcnIoZm9ybWF0LCBhcmcgLi4uKQkJCQkJXAorCWZwcmludGYoc3RkZXJyLCAiW0VSUk9SXSAlczolZDolczo6ICIgZm9ybWF0ICJcbiIsCQlcCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjIGFyZykKKworI2lmZGVmIERFQlVHX1FVT1RBCisjIGRlZmluZSBsb2dfZGVidWcoZm9ybWF0LCBhcmcgLi4uKQkJCQkJXAorCWZwcmludGYoc3RkZXJyLCAiW0RFQlVHXSAlczolZDolczo6ICIgZm9ybWF0ICJcbiIsCQlcCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjIGFyZykKKyNlbHNlCisjIGRlZmluZSBsb2dfZGVidWcoZm9ybWF0LCAuLi4pCisjZW5kaWYKKworI2VuZGlmIC8qIF9fUVVPVEFfQ09NTU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9xdW90YS9kcWJsa192Mi5oIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9kcWJsa192Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjUxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL2RxYmxrX3YyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIEhlYWRlciBmaWxlIGZvciBkaXNrIGZvcm1hdCBvZiBuZXcgcXVvdGFmaWxlIGZvcm1hdAorICoKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+IC0gc3BvbnNvcmVkIGJ5IFN1U0UgQ1IKKyAqLworCisjaWZuZGVmIF9fUVVPVEFfRFFCTEtfVjJfSF9fCisjZGVmaW5lIF9fUVVPVEFfRFFCTEtfVjJfSF9fCisKKyNpbmNsdWRlICJxdW90YWlvX3RyZWUuaCIKKworLyogU3RydWN0dXJlIGZvciBmb3JtYXQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB2Ml9tZW1fZHFpbmZvIHsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyBkcWlfcXRyZWU7CisJdW5zaWduZWQgaW50IGRxaV9mbGFnczsJCS8qIEZsYWdzIHNldCBpbiBxdW90YWZpbGUgKi8KKwl1bnNpZ25lZCBpbnQgZHFpX3VzZWRfZW50cmllczsJLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gZmlsZSAtCisJCQkJCSAgIHVwZGF0ZWQgYnkgc2Nhbl9kcXVvdHMgKi8KKwl1bnNpZ25lZCBpbnQgZHFpX2RhdGFfYmxvY2tzOwkvKiBOdW1iZXIgb2YgZGF0YSBibG9ja3MgaW4gZmlsZSAtCisJCQkJCSAgIHVwZGF0ZWQgYnkgc2Nhbl9kcXVvdHMgKi8KK307CisKK3N0cnVjdCB2Ml9tZW1fZHFibGsgeworCWxvbmcgbG9uZyBkcWJfb2ZmOwkvKiBPZmZzZXQgb2YgZHF1b3QgaW4gZmlsZSAqLworfTsKKworc3RydWN0IHF1b3RhZmlsZV9vcHM7CQkvKiBXaWxsIGJlIGRlZmluZWQgbGF0ZXIgaW4gcXVvdGFpby5oICovCisKKy8qIE9wZXJhdGlvbnMgYWJvdmUgdGhpcyBmb3JtYXQgKi8KK2V4dGVybiBzdHJ1Y3QgcXVvdGFmaWxlX29wcyBxdW90YWZpbGVfb3BzXzI7CisKKyNlbmRpZiAgLyogX19RVU9UQV9EUUJMS19WMl9IX18gKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvcXVvdGEvbWtxdW90YS5jIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9ta3F1b3RhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMTdiNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvbWtxdW90YS5jCkBAIC0wLDAgKzEsNTYwIEBACisvKgorICogbWtxdW90YS5jIC0tLSBjcmVhdGUgcXVvdGEgZmlsZXMgZm9yIGEgZmlsZXN5c3RlbQorICoKKyAqIEFkaXR5YSBLYWxpIDxhZGl0eWFrYWxpQGdvb2dsZS5jb20+CisgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKworI2luY2x1ZGUgInF1b3RhaW8uaCIKKyNpbmNsdWRlICJxdW90YWlvX3YyLmgiCisjaW5jbHVkZSAicXVvdGFpb190cmVlLmgiCisjaW5jbHVkZSAibWtxdW90YS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKiBOZWVkZWQgZm9yIGFyY2hpdGVjdHVyZXMgd2hlcmUgc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZvaWQgKikgKi8KKyNkZWZpbmUgVUlOVF9UT19WT0lEUFRSKHZhbCkgICgodm9pZCAqKShpbnRwdHJfdCkodmFsKSkKKyNkZWZpbmUgVk9JRFBUUl9UT19VSU5UKHB0cikgICgodW5zaWduZWQgaW50KShpbnRwdHJfdCkocHRyKSkKKworI2lmIERFQlVHX1FVT1RBCitzdGF0aWMgdm9pZCBwcmludF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuOworCisJZnByaW50ZihzdGRlcnIsICIgIGlfbW9kZSA9ICVkXG4iLCBpbm9kZS0+aV9tb2RlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV91aWQgPSAlZFxuIiwgaW5vZGUtPmlfdWlkKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9zaXplID0gJWRcbiIsIGlub2RlLT5pX3NpemUpOworCWZwcmludGYoc3RkZXJyLCAiICBpX2F0aW1lID0gJWRcbiIsIGlub2RlLT5pX2F0aW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9jdGltZSA9ICVkXG4iLCBpbm9kZS0+aV9jdGltZSk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfbXRpbWUgPSAlZFxuIiwgaW5vZGUtPmlfbXRpbWUpOworCWZwcmludGYoc3RkZXJyLCAiICBpX2R0aW1lID0gJWRcbiIsIGlub2RlLT5pX2R0aW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9naWQgPSAlZFxuIiwgaW5vZGUtPmlfZ2lkKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgaV9saW5rc19jb3VudCA9ICVkXG4iLCBpbm9kZS0+aV9saW5rc19jb3VudCk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfYmxvY2tzID0gJWRcbiIsIGlub2RlLT5pX2Jsb2Nrcyk7CisJZnByaW50ZihzdGRlcnIsICIgIGlfZmxhZ3MgPSAlZFxuIiwgaW5vZGUtPmlfZmxhZ3MpOworCisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qCisgKiBSZXR1cm5zIDAgaWYgbm90IGFibGUgdG8gZmluZCB0aGUgcXVvdGEgZmlsZSwgb3RoZXJ3aXNlIHJldHVybnMgaXRzCisgKiBpbm9kZSBudW1iZXIuCisgKi8KK2ludCBxdW90YV9maWxlX2V4aXN0cyhleHQyX2ZpbHN5cyBmcywgaW50IHF0eXBlLCBpbnQgZm10KQoreworCWNoYXIgcWZfbmFtZVsyNTZdOworCWVycmNvZGVfdCByZXQ7CisJZXh0Ml9pbm9fdCBpbm87CisKKwlpZiAocXR5cGUgPj0gTUFYUVVPVEFTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXF1b3RhX2dldF9xZl9uYW1lKHF0eXBlLCBRRk1UX1ZGU19WMSwgcWZfbmFtZSk7CisKKwlyZXQgPSBleHQyZnNfbG9va3VwKGZzLCBFWFQyX1JPT1RfSU5PLCBxZl9uYW1lLCBzdHJsZW4ocWZfbmFtZSksIDAsCisJCQkgICAgJmlubyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaW5vOworfQorCisvKgorICogU2V0IHRoZSB2YWx1ZSBmb3IgcmVzZXJ2ZWQgcXVvdGEgaW5vZGUgbnVtYmVyIGZpZWxkIGluIHN1cGVyYmxvY2suCisgKi8KK3ZvaWQgcXVvdGFfc2V0X3NiX2ludW0oZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLCBpbnQgcXR5cGUpCit7CisJZXh0Ml9pbm9fdCAqaW51bXA7CisKKwlpbnVtcCA9IChxdHlwZSA9PSBVU1JRVU9UQSkgPyAmZnMtPnN1cGVyLT5zX3Vzcl9xdW90YV9pbnVtIDoKKwkJJmZzLT5zdXBlci0+c19ncnBfcXVvdGFfaW51bTsKKworCWxvZ19kZWJ1Zygic2V0dGluZyBxdW90YSBpbm8gaW4gc3VwZXJibG9jazogaW5vPSV1LCB0eXBlPSVkIiwgaW5vLAorCQkgcXR5cGUpOworCSppbnVtcCA9IGlubzsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7Cit9CisKK2VycmNvZGVfdCBxdW90YV9yZW1vdmVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIGludCBxdHlwZSkKK3sKKwlleHQyX2lub190IHFmX2lubzsKKworCWV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCXFmX2lubyA9IChxdHlwZSA9PSBVU1JRVU9UQSkgPyBmcy0+c3VwZXItPnNfdXNyX3F1b3RhX2ludW0gOgorCQlmcy0+c3VwZXItPnNfZ3JwX3F1b3RhX2ludW07CisJcXVvdGFfc2V0X3NiX2ludW0oZnMsIDAsIHF0eXBlKTsKKwkvKiBUcnVuY2F0ZSB0aGUgaW5vZGUgb25seSBpZiBpdHMgYSByZXNlcnZlZCBvbmUuICovCisJaWYgKHFmX2lubyA8IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkKKwkJcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZnMsIHFmX2lubyk7CisKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwlleHQyZnNfd3JpdGVfYml0bWFwcyhmcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2RxdW90cyhkaWN0X3QgKmRpY3QsIHN0cnVjdCBxdW90YV9oYW5kbGUgKnFoKQoreworCWRub2RlX3QJCSpuOworCXN0cnVjdCBkcXVvdAkqZHE7CisKKwlmb3IgKG4gPSBkaWN0X2ZpcnN0KGRpY3QpOyBuOyBuID0gZGljdF9uZXh0KGRpY3QsIG4pKSB7CisJCWRxID0gZG5vZGVfZ2V0KG4pOworCQlpZiAoZHEpIHsKKwkJCWRxLT5kcV9oID0gcWg7CisJCQl1cGRhdGVfZ3JhY2VfdGltZXMoZHEpOworCQkJcWgtPnFoX29wcy0+Y29tbWl0X2RxdW90KGRxKTsKKwkJfQorCX0KK30KKworZXJyY29kZV90IHF1b3RhX3dyaXRlX2lub2RlKHF1b3RhX2N0eF90IHFjdHgsIGludCBxdHlwZSkKK3sKKwlpbnQJCXJldHZhbCA9IDAsIGk7CisJZGljdF90CQkqZGljdDsKKwlleHQyX2ZpbHN5cwlmczsKKwlzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoID0gTlVMTDsKKwlpbnQJCWZtdCA9IFFGTVRfVkZTX1YxOworCisJaWYgKCFxY3R4KQorCQlyZXR1cm4gMDsKKworCWZzID0gcWN0eC0+ZnM7CisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBxdW90YV9oYW5kbGUpLCAmaCk7CisJaWYgKHJldHZhbCkgeworCQlsb2dfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgcXVvdGEgaGFuZGxlIik7CisJCWdvdG8gb3V0OworCX0KKworCWV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCisJZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKSB7CisJCWlmICgocXR5cGUgIT0gLTEpICYmIChpICE9IHF0eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCWRpY3QgPSBxY3R4LT5xdW90YV9kaWN0W2ldOworCQlpZiAoIWRpY3QpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSBxdW90YV9maWxlX2NyZWF0ZShoLCBmcywgaSwgZm10KTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWxvZ19lcnIoIkNhbm5vdCBpbml0aWFsaXplIGlvIG9uIHF1b3RhZmlsZSIpOworCQkJY29udGludWU7CisJCX0KKworCQl3cml0ZV9kcXVvdHMoZGljdCwgaCk7CisJCXJldHZhbCA9IHF1b3RhX2ZpbGVfY2xvc2UoaCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlsb2dfZXJyKCJDYW5ub3QgZmluaXNoIElPIG9uIG5ldyBxdW90YWZpbGU6ICVzIiwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQkJaWYgKGgtPnFoX3FmLmUyX2ZpbGUpCisJCQkJZXh0MmZzX2ZpbGVfY2xvc2UoaC0+cWhfcWYuZTJfZmlsZSk7CisJCQlxdW90YV9pbm9kZV90cnVuY2F0ZShmcywgaC0+cWhfcWYuaW5vKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2V0IHF1b3RhIGlub2RlIG51bWJlcnMgaW4gc3VwZXJibG9jay4gKi8KKwkJcXVvdGFfc2V0X3NiX2ludW0oZnMsIGgtPnFoX3FmLmlubywgaSk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCX0KKworCWV4dDJmc193cml0ZV9iaXRtYXBzKGZzKTsKK291dDoKKwlpZiAoaCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY29tcHV0aW5nIHF1b3RhIGluIG1lbW9yeS4gICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZGljdF91aW50X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXVuc2lnbmVkIGludAljLCBkOworCisJYyA9IFZPSURQVFJfVE9fVUlOVChhKTsKKwlkID0gVk9JRFBUUl9UT19VSU5UKGIpOworCisJcmV0dXJuIGMgLSBkOworfQorCitzdGF0aWMgaW5saW5lIHFpZF90IGdldF9xaWQoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBpbnQgcXR5cGUpCit7CisJaWYgKHF0eXBlID09IFVTUlFVT1RBKQorCQlyZXR1cm4gaW5vZGVfdWlkKCppbm9kZSk7CisJcmV0dXJuIGlub2RlX2dpZCgqaW5vZGUpOworfQorCitzdGF0aWMgdm9pZCBxdW90YV9kbm9kZV9mcmVlKGRub2RlX3QgKm5vZGUsCisJCQkgICAgIHZvaWQgKmNvbnRleHQgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXZvaWQgKnB0ciA9IG5vZGUgPyBkbm9kZV9nZXQobm9kZSkgOiAwOworCisJZXh0MmZzX2ZyZWVfbWVtKCZwdHIpOworCWZyZWUobm9kZSk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIHF1b3RhIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4KKyAqLworZXJyY29kZV90IHF1b3RhX2luaXRfY29udGV4dChxdW90YV9jdHhfdCAqcWN0eCwgZXh0Ml9maWxzeXMgZnMsIGludCBxdHlwZSkKK3sKKwlpbnQJaSwgZXJyID0gMDsKKwlkaWN0X3QJKmRpY3Q7CisJcXVvdGFfY3R4X3QgY3R4OworCisJZXJyID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBxdW90YV9jdHgpLCAmY3R4KTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBxdW90YSBjb250ZXh0Iik7CisJCXJldHVybiBlcnI7CisJfQorCisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKHN0cnVjdCBxdW90YV9jdHgpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJaWYgKChxdHlwZSAhPSAtMSkgJiYgKGkgIT0gcXR5cGUpKQorCQkJY29udGludWU7CisJCWVyciA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihkaWN0X3QpLCAmZGljdCk7CisJCWlmIChlcnIpIHsKKwkJCWxvZ19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkaWN0aW9uYXJ5Iik7CisJCQlxdW90YV9yZWxlYXNlX2NvbnRleHQoJmN0eCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWN0eC0+cXVvdGFfZGljdFtpXSA9IGRpY3Q7CisJCWRpY3RfaW5pdChkaWN0LCBESUNUQ09VTlRfVF9NQVgsIGRpY3RfdWludF9jbXApOworCQlkaWN0X3NldF9hbGxvY2F0b3IoZGljdCwgTlVMTCwgcXVvdGFfZG5vZGVfZnJlZSwgTlVMTCk7CisJfQorCisJY3R4LT5mcyA9IGZzOworCSpxY3R4ID0gY3R4OworCXJldHVybiAwOworfQorCit2b2lkIHF1b3RhX3JlbGVhc2VfY29udGV4dChxdW90YV9jdHhfdCAqcWN0eCkKK3sKKwlkaWN0X3QJKmRpY3Q7CisJaW50CWk7CisJcXVvdGFfY3R4X3QgY3R4OworCisJaWYgKCFxY3R4KQorCQlyZXR1cm47CisKKwljdHggPSAqcWN0eDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJZGljdCA9IGN0eC0+cXVvdGFfZGljdFtpXTsKKwkJY3R4LT5xdW90YV9kaWN0W2ldID0gMDsKKwkJaWYgKGRpY3QpIHsKKwkJCWRpY3RfZnJlZV9ub2RlcyhkaWN0KTsKKwkJCWZyZWUoZGljdCk7CisJCX0KKwl9CisJKnFjdHggPSBOVUxMOworCWZyZWUoY3R4KTsKK30KKworc3RhdGljIHN0cnVjdCBkcXVvdCAqZ2V0X2RxKGRpY3RfdCAqZGljdCwgX191MzIga2V5KQoreworCXN0cnVjdCBkcXVvdAkqZHE7CisJZG5vZGVfdAkJKm47CisKKwluID0gZGljdF9sb29rdXAoZGljdCwgVUlOVF9UT19WT0lEUFRSKGtleSkpOworCWlmIChuKQorCQlkcSA9IGRub2RlX2dldChuKTsKKwllbHNlIHsKKwkJaWYgKGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZHF1b3QpLCAmZHEpKSB7CisJCQlsb2dfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgZHF1b3QiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW1lbXNldChkcSwgMCwgc2l6ZW9mKHN0cnVjdCBkcXVvdCkpOworCQlkaWN0X2FsbG9jX2luc2VydChkaWN0LCBVSU5UX1RPX1ZPSURQVFIoa2V5KSwgZHEpOworCQlkcS0+ZHFfaWQgPSBrZXk7CisJfQorCXJldHVybiBkcTsKK30KKworCisvKgorICogQ2FsbGVkIHRvIHVwZGF0ZSB0aGUgYmxvY2tzIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIGlub2RlCisgKi8KK3ZvaWQgcXVvdGFfZGF0YV9hZGQocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJICAgIHFzaXplX3Qgc3BhY2UpCit7CisJc3RydWN0IGRxdW90CSpkcTsKKwlkaWN0X3QJCSpkaWN0OworCWludAkJaTsKKworCWlmICghcWN0eCkKKwkJcmV0dXJuOworCisJbG9nX2RlYnVnKCJBRERfREFUQTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgc3BhY2U6ICVsZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIHNwYWNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbaV07CisJCWlmIChkaWN0KSB7CisJCQlkcSA9IGdldF9kcShkaWN0LCBnZXRfcWlkKGlub2RlLCBpKSk7CisJCQlpZiAoZHEpCisJCQkJZHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gc3BhY2U7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gcmVtb3ZlIHNvbWUgYmxvY2tzIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIGlub2RlCisgKi8KK3ZvaWQgcXVvdGFfZGF0YV9zdWIocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJICAgIHFzaXplX3Qgc3BhY2UpCit7CisJc3RydWN0IGRxdW90CSpkcTsKKwlkaWN0X3QJCSpkaWN0OworCWludAkJaTsKKworCWlmICghcWN0eCkKKwkJcmV0dXJuOworCisJbG9nX2RlYnVnKCJTVUJfREFUQTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgc3BhY2U6ICVsZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIHNwYWNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspIHsKKwkJZGljdCA9IHFjdHgtPnF1b3RhX2RpY3RbaV07CisJCWlmIChkaWN0KSB7CisJCQlkcSA9IGdldF9kcShkaWN0LCBnZXRfcWlkKGlub2RlLCBpKSk7CisJCQlkcS0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAtPSBzcGFjZTsKKwkJfQorCX0KK30KKworLyoKKyAqIENhbGxlZCB0byBjb3VudCB0aGUgZmlsZXMgdXNlZCBieSBhbiBpbm9kZSdzIHVzZXIvZ3JvdXAKKyAqLwordm9pZCBxdW90YV9kYXRhX2lub2RlcyhxdW90YV9jdHhfdCBxY3R4LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsCisJCSAgICAgICBleHQyX2lub190IGlubywgaW50IGFkanVzdCkKK3sKKwlzdHJ1Y3QgZHF1b3QJKmRxOworCWRpY3RfdAkJKmRpY3Q7CisJaW50CQlpOworCisJaWYgKCFxY3R4KQorCQlyZXR1cm47CisKKwlsb2dfZGVidWcoIkFESl9JTk9ERTogSW5vZGU6ICV1LCBVSUQvR0lEOiAldS8ldSwgYWRqdXN0OiAlZCIsIGlubywKKwkJCWlub2RlX3VpZCgqaW5vZGUpLAorCQkJaW5vZGVfZ2lkKCppbm9kZSksIGFkanVzdCk7CisJZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKSB7CisJCWRpY3QgPSBxY3R4LT5xdW90YV9kaWN0W2ldOworCQlpZiAoZGljdCkgeworCQkJZHEgPSBnZXRfZHEoZGljdCwgZ2V0X3FpZChpbm9kZSwgaSkpOworCQkJZHEtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICs9IGFkanVzdDsKKwkJfQorCX0KK30KKworZXJyY29kZV90IHF1b3RhX2NvbXB1dGVfdXNhZ2UocXVvdGFfY3R4X3QgcWN0eCkKK3sKKwlleHQyX2ZpbHN5cyBmczsKKwlleHQyX2lub190IGlubzsKKwllcnJjb2RlX3QgcmV0OworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCXFzaXplX3Qgc3BhY2U7CisJZXh0Ml9pbm9kZV9zY2FuIHNjYW47CisKKwlpZiAoIXFjdHgpCisJCXJldHVybiAwOworCisJZnMgPSBxY3R4LT5mczsKKwlyZXQgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCAwLCAmc2Nhbik7CisJaWYgKHJldCkgeworCQlsb2dfZXJyKCJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4uIHJldD0lbGQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdoaWxlICgxKSB7CisJCXJldCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0KSB7CisJCQlsb2dfZXJyKCJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUuIHJldD0lbGQiLCByZXQpOworCQkJZXh0MmZzX2Nsb3NlX2lub2RlX3NjYW4oc2Nhbik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChpbm8gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoaW5vZGUuaV9saW5rc19jb3VudCAmJgorCQkgICAgKGlubyA9PSBFWFQyX1JPT1RfSU5PIHx8CisJCSAgICAgaW5vID49IEVYVDJfRklSU1RfSU5PREUoZnMtPnN1cGVyKSkpIHsKKwkJCXNwYWNlID0gZXh0MmZzX2lub2RlX2lfYmxvY2tzKGZzLCAmaW5vZGUpIDw8IDk7CisJCQlxdW90YV9kYXRhX2FkZChxY3R4LCAmaW5vZGUsIGlubywgc3BhY2UpOworCQkJcXVvdGFfZGF0YV9pbm9kZXMocWN0eCwgJmlub2RlLCBpbm8sICsxKTsKKwkJfQorCX0KKworCWV4dDJmc19jbG9zZV9pbm9kZV9zY2FuKHNjYW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzY2FuX2RxdW90c19kYXRhIHsKKwlkaWN0X3QJCSpxdW90YV9kaWN0OworCWludCAgICAgICAgICAgICB1cGRhdGVfbGltaXRzOyAvKiB1cGRhdGUgbGltaXRzIGZyb20gZGlzayAqLworCWludAkJdXBkYXRlX3VzYWdlOworCWludAkJdXNhZ2VfaXNfaW5jb25zaXN0ZW50OworfTsKKworc3RhdGljIGludCBzY2FuX2RxdW90c19jYWxsYmFjayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzY2FuX2RxdW90c19kYXRhICpzY2FuX2RhdGEgPSBjYl9kYXRhOworCWRpY3RfdCAqcXVvdGFfZGljdCA9IHNjYW5fZGF0YS0+cXVvdGFfZGljdDsKKwlzdHJ1Y3QgZHF1b3QgKmRxOworCisJZHEgPSBnZXRfZHEocXVvdGFfZGljdCwgZHF1b3QtPmRxX2lkKTsKKwlkcS0+ZHFfaWQgPSBkcXVvdC0+ZHFfaWQ7CisJZHEtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiA9IGRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmY7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBpbmNvbnNpc3RhbmN5LiAqLworCWlmIChkcS0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAhPSBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSB8fAorCSAgICBkcS0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgIT0gZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzKSB7CisJCXNjYW5fZGF0YS0+dXNhZ2VfaXNfaW5jb25zaXN0ZW50ID0gMTsKKwkJZnByaW50ZihzdGRlcnIsICJbUVVPVEEgV0FSTklOR10gVXNhZ2UgaW5jb25zaXN0ZW50IGZvciBJRCAlZDoiCisJCQkiYWN0dWFsICglbGx1LCAlbGx1KSAhPSBleHBlY3RlZCAoJWxsdSwgJWxsdSlcbiIsCisJCQlkcS0+ZHFfaWQsIChsb25nIGxvbmcpZHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UsCisJCQkobG9uZyBsb25nKWRxLT5kcV9kcWIuZHFiX2N1cmlub2RlcywKKwkJCShsb25nIGxvbmcpZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UsCisJCQkobG9uZyBsb25nKWRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2Rlcyk7CisJfQorCisJaWYgKHNjYW5fZGF0YS0+dXBkYXRlX2xpbWl0cykgeworCQlkcS0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ID0gZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdDsKKwkJZHEtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCA9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQ7CisJCWRxLT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgPSBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0OworCQlkcS0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ID0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdDsKKwl9CisKKwlpZiAoc2Nhbl9kYXRhLT51cGRhdGVfdXNhZ2UpIHsKKwkJZHEtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPSBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZTsKKwkJZHEtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID0gZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhbGwgZHF1b3RzIGZyb20gcXVvdGEgZmlsZSBpbnRvIG1lbW9yeQorICovCitzdGF0aWMgZXJyY29kZV90IHF1b3RhX3JlYWRfYWxsX2RxdW90cyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpxaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RhX2N0eF90IHFjdHgsIGludCB1cGRhdGVfbGltaXRzKQoreworCXN0cnVjdCBzY2FuX2RxdW90c19kYXRhIHNjYW5fZGF0YTsKKworCXNjYW5fZGF0YS5xdW90YV9kaWN0ID0gcWN0eC0+cXVvdGFfZGljdFtxaC0+cWhfdHlwZV07CisJc2Nhbl9kYXRhLnVwZGF0ZV9saW1pdHMgPSB1cGRhdGVfbGltaXRzOworCXNjYW5fZGF0YS51cGRhdGVfdXNhZ2UgPSAwOworCisJcmV0dXJuIHFoLT5xaF9vcHMtPnNjYW5fZHF1b3RzKHFoLCBzY2FuX2RxdW90c19jYWxsYmFjaywgJnNjYW5fZGF0YSk7Cit9CisKKy8qCisgKiBXcml0ZSBhbGwgbWVtb3J5IGRxdW90cyBpbnRvIHF1b3RhIGZpbGUKKyAqLworI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCwgYnV0IG1heSBiZSB1c2VmdWwgaW4gdGhlIGZ1dHVyZT8gKi8KK3N0YXRpYyBlcnJjb2RlX3QgcXVvdGFfd3JpdGVfYWxsX2RxdW90cyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpxaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90YV9jdHhfdCBxY3R4KQoreworCWVycmNvZGVfdCBlcnI7CisKKwllcnIgPSBleHQyZnNfcmVhZF9iaXRtYXBzKHFjdHgtPmZzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXdyaXRlX2RxdW90cyhxY3R4LT5xdW90YV9kaWN0W3FoLT5xaF90eXBlXSwgcWgpOworCWV4dDJmc19tYXJrX2JiX2RpcnR5KHFjdHgtPmZzKTsKKwlxY3R4LT5mcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCWV4dDJmc193cml0ZV9iaXRtYXBzKHFjdHgtPmZzKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKgorICogVXBkYXRlcyB0aGUgaW4tbWVtb3J5IHF1b3RhIGxpbWl0cyBmcm9tIHRoZSBnaXZlbiBxdW90YSBpbm9kZS4KKyAqLworZXJyY29kZV90IHF1b3RhX3VwZGF0ZV9saW1pdHMocXVvdGFfY3R4X3QgcWN0eCwgZXh0Ml9pbm9fdCBxZl9pbm8sIGludCB0eXBlKQoreworCXN0cnVjdCBxdW90YV9oYW5kbGUgKnFoOworCWVycmNvZGVfdCBlcnI7CisKKwlpZiAoIXFjdHgpCisJCXJldHVybiAwOworCisJZXJyID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBxdW90YV9oYW5kbGUpLCAmcWgpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIHF1b3RhIGhhbmRsZSIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHF1b3RhX2ZpbGVfb3BlbihxaCwgcWN0eC0+ZnMsIHFmX2lubywgdHlwZSwgLTEsIDApOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiT3BlbiBxdW90YSBmaWxlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlxdW90YV9yZWFkX2FsbF9kcXVvdHMocWgsIHFjdHgsIDEpOworCisJZXJyID0gcXVvdGFfZmlsZV9jbG9zZShxaCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJDYW5ub3QgZmluaXNoIElPIG9uIG5ldyBxdW90YWZpbGU6ICVzIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCWlmIChxaC0+cWhfcWYuZTJfZmlsZSkKKwkJCWV4dDJmc19maWxlX2Nsb3NlKHFoLT5xaF9xZi5lMl9maWxlKTsKKwl9CitvdXQ6CisJZXh0MmZzX2ZyZWVfbWVtKCZxaCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENvbXBhcmVzIHRoZSBtZWFzdXJlZCBxdW90YSBpbiBxY3R4LT5xdW90YV9kaWN0IHdpdGggdGhhdCBpbiB0aGUgcXVvdGEgaW5vZGUKKyAqIG9uIGRpc2sgYW5kIHVwZGF0ZXMgdGhlIGxpbWl0cyBpbiBxY3R4LT5xdW90YV9kaWN0LiAndXNhZ2VfaW5jb25zaXN0ZW50JyBpcworICogc2V0IHRvIDEgaWYgdGhlIHN1cHBsaWVkIGFuZCBvbi1kaXNrIHF1b3RhIHVzYWdlIHZhbHVlcyBhcmUgbm90IGlkZW50aWNhbC4KKyAqLworZXJyY29kZV90IHF1b3RhX2NvbXBhcmVfYW5kX3VwZGF0ZShxdW90YV9jdHhfdCBxY3R4LCBpbnQgcXR5cGUsCisJCQkJICAgaW50ICp1c2FnZV9pbmNvbnNpc3RlbnQpCit7CisJZXh0Ml9maWxzeXMgZnMgPSBxY3R4LT5mczsKKwlzdHJ1Y3QgcXVvdGFfaGFuZGxlIHFoOworCXN0cnVjdCBzY2FuX2RxdW90c19kYXRhIHNjYW5fZGF0YTsKKwlleHQyX2lub190IHFmX2lubzsKKwllcnJjb2RlX3QgZXJyID0gMDsKKworCWlmICghcWN0eC0+cXVvdGFfZGljdFtxdHlwZV0pCisJCWdvdG8gb3V0OworCisJcWZfaW5vID0gcXR5cGUgPT0gVVNSUVVPVEEgPyBmcy0+c3VwZXItPnNfdXNyX3F1b3RhX2ludW0gOgorCQkJCSAgICAgZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtOworCWVyciA9IHF1b3RhX2ZpbGVfb3BlbigmcWgsIGZzLCBxZl9pbm8sIHF0eXBlLCAtMSwgMCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJPcGVuIHF1b3RhIGZpbGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCXNjYW5fZGF0YS5xdW90YV9kaWN0ID0gcWN0eC0+cXVvdGFfZGljdFtxdHlwZV07CisJc2Nhbl9kYXRhLnVwZGF0ZV9saW1pdHMgPSAxOworCXNjYW5fZGF0YS51cGRhdGVfdXNhZ2UgPSAwOworCXNjYW5fZGF0YS51c2FnZV9pc19pbmNvbnNpc3RlbnQgPSAwOworCWVyciA9IHFoLnFoX29wcy0+c2Nhbl9kcXVvdHMoJnFoLCBzY2FuX2RxdW90c19jYWxsYmFjaywgJnNjYW5fZGF0YSk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJFcnJvciBzY2FubmluZyBkcXVvdHMiKTsKKwkJZ290byBvdXQ7CisJfQorCSp1c2FnZV9pbmNvbnNpc3RlbnQgPSBzY2FuX2RhdGEudXNhZ2VfaXNfaW5jb25zaXN0ZW50OworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvcXVvdGEvbWtxdW90YS5oIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9ta3F1b3RhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxNTA3MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvbWtxdW90YS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKiBta3F1b3RhLmgKKyAqCisgKiBJbnRlcmZhY2UgdG8gdGhlIHF1b3RhIGxpYnJhcnkuCisgKgorICogVGhlIHF1b3RhIGxpYnJhcnkgcHJvdmlkZXMgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBhbmQgdXBkYXRpbmcgdGhlIHF1b3RhCisgKiBmaWxlcyBhbmQgdGhlIGV4dDQgc3VwZXJibG9jayBmaWVsZHMuIEl0IHN1cHBvcnRzIHRoZSBuZXcgVkZTX1YxIHF1b3RhCisgKiBmb3JtYXQuIFRoZSBxdW90YSBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBxdW90YXMKKyAqIGluIG1lbW9yeS4KKyAqIFRoZSB0eXBpY2FsIHdheSB0byB1c2UgdGhlIHF1b3RhIGxpYnJhcnkgaXMgYXMgZm9sbG93czoKKyAqIHsKKyAqCXF1b3RhX2N0eF90IHFjdHg7CisgKgorICoJcXVvdGFfaW5pdF9jb250ZXh0KCZxY3R4LCBmcywgLTEpOworICoJeworICoJCXF1b3RhX2NvbXB1dGVfdXNhZ2UocWN0eCwgLTEpOworICoJCUFORC9PUgorICoJCXF1b3RhX2RhdGFfYWRkL3F1b3RhX2RhdGFfc3ViL3F1b3RhX2RhdGFfaW5vZGVzKCk7CisgKgl9CisgKglxdW90YV93cml0ZV9pbm9kZShxY3R4LCBVU1JRVU9UQSk7CisgKglxdW90YV93cml0ZV9pbm9kZShxY3R4LCBHUlBRVU9UQSk7CisgKglxdW90YV9yZWxlYXNlX2NvbnRleHQoJnFjdHgpOworICogfQorICoKKyAqIFRoaXMgaW5pdGlhbCB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyB0aGUgcXVvdGEgZmlsZXMuIFRoaXMgc3VwcG9ydAorICogd2lsbCBiZSBhZGRlZCBpbiBuZWFyIGZ1dHVyZS4KKyAqCisgKiBBZGl0eWEgS2FsaSA8YWRpdHlha2FsaUBnb29nbGUuY29tPgorICovCisKKyNpZm5kZWYgX19RVU9UQV9RVU9UQUlPX0hfXworI2RlZmluZSBfX1FVT1RBX1FVT1RBSU9fSF9fCisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJxdW90YWlvLmgiCisjaW5jbHVkZSAiLi4vZTJmc2NrL2RpY3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcXVvdGFfY3R4ICpxdW90YV9jdHhfdDsKKworc3RydWN0IHF1b3RhX2N0eCB7CisJZXh0Ml9maWxzeXMJZnM7CisJZGljdF90CQkqcXVvdGFfZGljdFtNQVhRVU9UQVNdOworfTsKKworLyogSW4gbWtxdW90YS5jICovCitlcnJjb2RlX3QgcXVvdGFfaW5pdF9jb250ZXh0KHF1b3RhX2N0eF90ICpxY3R4LCBleHQyX2ZpbHN5cyBmcywgaW50IHF0eXBlKTsKK3ZvaWQgcXVvdGFfZGF0YV9pbm9kZXMocXVvdGFfY3R4X3QgcWN0eCwgc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBleHQyX2lub190IGlubywKKwkJaW50IGFkanVzdCk7Cit2b2lkIHF1b3RhX2RhdGFfYWRkKHF1b3RhX2N0eF90IHFjdHgsIHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgZXh0Ml9pbm9fdCBpbm8sCisJCXFzaXplX3Qgc3BhY2UpOwordm9pZCBxdW90YV9kYXRhX3N1YihxdW90YV9jdHhfdCBxY3R4LCBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIGV4dDJfaW5vX3QgaW5vLAorCQlxc2l6ZV90IHNwYWNlKTsKK2VycmNvZGVfdCBxdW90YV93cml0ZV9pbm9kZShxdW90YV9jdHhfdCBxY3R4LCBpbnQgcXR5cGUpOworZXJyY29kZV90IHF1b3RhX3VwZGF0ZV9saW1pdHMocXVvdGFfY3R4X3QgcWN0eCwgZXh0Ml9pbm9fdCBxZl9pbm8sIGludCB0eXBlKTsKK2VycmNvZGVfdCBxdW90YV9jb21wdXRlX3VzYWdlKHF1b3RhX2N0eF90IHFjdHgpOwordm9pZCBxdW90YV9yZWxlYXNlX2NvbnRleHQocXVvdGFfY3R4X3QgKnFjdHgpOworCitlcnJjb2RlX3QgcXVvdGFfcmVtb3ZlX2lub2RlKGV4dDJfZmlsc3lzIGZzLCBpbnQgcXR5cGUpOworaW50IHF1b3RhX2ZpbGVfZXhpc3RzKGV4dDJfZmlsc3lzIGZzLCBpbnQgcXR5cGUsIGludCBmbXQpOwordm9pZCBxdW90YV9zZXRfc2JfaW51bShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sIGludCBxdHlwZSk7CitlcnJjb2RlX3QgcXVvdGFfY29tcGFyZV9hbmRfdXBkYXRlKHF1b3RhX2N0eF90IHFjdHgsIGludCBxdHlwZSwKKwkJCQkgICBpbnQgKnVzYWdlX2luY29uc2lzdGVudCk7CisKKyNlbmRpZiAgLyogX19RVU9UQV9RVU9UQUlPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YS5wYy5pbiBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGEucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0Yjg4NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGEucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IHF1b3RhCitEZXNjcmlwdGlvbjogUXVvdGEgbWFuYWdlbWVudCBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlczoKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L3F1b3RhIC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxxdW90YQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvLmMgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTE4YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qKiBxdW90YWlvLmMKKyAqCisgKiBHZW5lcmljIElPIG9wZXJhdGlvbnMgb24gcXVvdGFmaWxlcworICogSmFuIEthcmEgPGphY2tAc3VzZS5jej4gLSBzcG9uc29yZWQgYnkgU3VTRSBDUgorICogQWRpdHlhIEthbGkgPGFkaXR5YWthbGlAZ29vZ2xlLmNvbT4gLSBQb3J0ZWQgdG8gZTJmc3Byb2dzCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicXVvdGFpby5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV4dGVuc2lvbnNbTUFYUVVPVEFTXSA9IHsidXNlciIsICJncm91cCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiYXNlbmFtZXNbXSA9IHsKKwkiIiwJCS8qIHVuZGVmaW5lZCAqLworCSJxdW90YSIsCS8qIFFGTVRfVkZTX09MRCAqLworCSJhcXVvdGEiLAkvKiBRRk1UX1ZGU19WMCAqLworCSIiLAkJLyogUUZNVF9PQ0ZTMiAqLworCSJhcXVvdGEiCS8qIFFGTVRfVkZTX1YxICovCit9OworCisvKiBIZWFkZXIgaW4gYWxsIG5ld2VyIHF1b3RhZmlsZXMgKi8KK3N0cnVjdCBkaXNrX2RxaGVhZGVyIHsKKwl1X2ludDMyX3QgZHFoX21hZ2ljOworCXVfaW50MzJfdCBkcWhfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIENvbnZlcnQgdHlwZSBvZiBxdW90YSB0byB3cml0dGVuIHJlcHJlc2VudGF0aW9uCisgKi8KK2NvbnN0IGNoYXIgKnR5cGUybmFtZShpbnQgdHlwZSkKK3sKKwlyZXR1cm4gZXh0ZW5zaW9uc1t0eXBlXTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgcXVvdGEgZmlsZSBuYW1lIGZvciBnaXZlbiB0eXBlIGFuZCBmb3JtYXQuCisgKi8KK2NvbnN0IGNoYXIgKnF1b3RhX2dldF9xZl9uYW1lKGludCB0eXBlLCBpbnQgZm10LCBjaGFyICpidWYpCit7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCXNucHJpbnRmKGJ1ZiwgUVVPVEFfTkFNRV9MRU4sICIlcy4lcyIsCisJCSBiYXNlbmFtZXNbZm10XSwgZXh0ZW5zaW9uc1t0eXBlXSk7CisKKwlyZXR1cm4gYnVmOworfQorCitjb25zdCBjaGFyICpxdW90YV9nZXRfcWZfcGF0aChjb25zdCBjaGFyICptbnRwdCwgaW50IHF0eXBlLCBpbnQgZm10LAorCQkJICAgICAgY2hhciAqcGF0aF9idWYsIHNpemVfdCBwYXRoX2J1Zl9zaXplKQoreworCWNoYXIgcWZfbmFtZVtRVU9UQV9OQU1FX0xFTl07CisKKwlpZiAoIW1udHB0IHx8ICFwYXRoX2J1ZiB8fCAhcGF0aF9idWZfc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdHJuY3B5KHBhdGhfYnVmLCBtbnRwdCwgcGF0aF9idWZfc2l6ZSk7CisJc3RybmNhdChwYXRoX2J1ZiwgIi8iLCAxKTsKKwlzdHJuY2F0KHBhdGhfYnVmLCBxdW90YV9nZXRfcWZfbmFtZShxdHlwZSwgZm10LCBxZl9uYW1lKSwKKwkJcGF0aF9idWZfc2l6ZSAtIHN0cmxlbihwYXRoX2J1ZikpOworCisJcmV0dXJuIHBhdGhfYnVmOworfQorCisvKgorICogU2V0IGdyYWNlIHRpbWUgaWYgbmVlZGVkCisgKi8KK3ZvaWQgdXBkYXRlX2dyYWNlX3RpbWVzKHN0cnVjdCBkcXVvdCAqcSkKK3sKKwl0aW1lX3Qgbm93OworCisJdGltZSgmbm93KTsKKwlpZiAocS0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmIHRvcWIocS0+ZHFfZHFiLmRxYl9jdXJzcGFjZSkgPgorCQkJcS0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0KSB7CisJCWlmICghcS0+ZHFfZHFiLmRxYl9idGltZSkKKwkJCXEtPmRxX2RxYi5kcWJfYnRpbWUgPQorCQkJCW5vdyArIHEtPmRxX2gtPnFoX2luZm8uZHFpX2JncmFjZTsKKwl9IGVsc2UgeworCQlxLT5kcV9kcWIuZHFiX2J0aW1lID0gMDsKKwl9CisKKwlpZiAocS0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmIHEtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID4KKwkJCXEtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCkgeworCQlpZiAoIXEtPmRxX2RxYi5kcWJfaXRpbWUpCisJCQkJcS0+ZHFfZHFiLmRxYl9pdGltZSA9CisJCQkJCW5vdyArIHEtPmRxX2gtPnFoX2luZm8uZHFpX2lncmFjZTsKKwl9IGVsc2UgeworCQlxLT5kcV9kcWIuZHFiX2l0aW1lID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tcHV0ZV9udW1fYmxvY2tzX3Byb2MoZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgKmJsb2NrbnIsCisJCQkgICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlibGs2NF90ICpudW1fYmxvY2tzID0gcHJpdmF0ZTsKKworCSpudW1fYmxvY2tzICs9IDE7CisJcmV0dXJuIDA7Cit9CisKK2VycmNvZGVfdCBxdW90YV9pbm9kZV90cnVuY2F0ZShleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXJyY29kZV90IGVycjsKKworCWlmICgoZXJyID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlKSkpCisJCXJldHVybiBlcnI7CisKKwlpZiAoKGlubyA9PSBFWFQ0X1VTUl9RVU9UQV9JTk8pIHx8IChpbm8gPT0gRVhUNF9HUlBfUVVPVEFfSU5PKSkgeworCQlpbm9kZS5pX2R0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCQlpZiAoIWV4dDJmc19pbm9kZV9oYXNfdmFsaWRfYmxvY2tzMihmcywgJmlub2RlKSkKKwkJCXJldHVybiAwOworCQllcnIgPSBleHQyZnNfcHVuY2goZnMsIGlubywgJmlub2RlLCBOVUxMLCAwLCB+MFVMTCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwl9IGVsc2UgeworCQlpbm9kZS5pX2ZsYWdzICY9IH5FWFQyX0lNTVVUQUJMRV9GTDsKKwl9CisJZXJyID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGV4dDJfb2ZmNjRfdCBjb21wdXRlX2lub2RlX3NpemUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKQoreworCWJsazY0X3QgbnVtX2Jsb2NrcyA9IDA7CisKKwlleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIGlubywKKwkJCSAgICAgIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorCQkJICAgICAgTlVMTCwKKwkJCSAgICAgIGNvbXB1dGVfbnVtX2Jsb2Nrc19wcm9jLAorCQkJICAgICAgJm51bV9ibG9ja3MpOworCXJldHVybiBudW1fYmxvY2tzICogZnMtPmJsb2Nrc2l6ZTsKK30KKworLyogRnVuY3Rpb25zIHRvIHJlYWQvd3JpdGUgcXVvdGEgZmlsZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcXVvdGFfd3JpdGVfbm9tb3VudChzdHJ1Y3QgcXVvdGFfZmlsZSAqcWYsCisJCQkJCWV4dDJfbG9mZl90IG9mZnNldCwKKwkJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlleHQyX2ZpbGVfdAllMl9maWxlID0gcWYtPmUyX2ZpbGU7CisJdW5zaWduZWQgaW50CWJ5dGVzX3dyaXR0ZW4gPSAwOworCWVycmNvZGVfdAllcnI7CisKKwllcnIgPSBleHQyZnNfZmlsZV9sbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoImV4dDJmc19maWxlX2xsc2VlayBmYWlsZWQ6ICVsZCIsIGVycik7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIGJ1Ziwgc2l6ZSwgJmJ5dGVzX3dyaXR0ZW4pOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiZXh0MmZzX2ZpbGVfd3JpdGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDb3JyZWN0IGlub2RlLmlfc2l6ZSBpcyBzZXQgaW4gZW5kX2lvLiAqLworCXJldHVybiBieXRlc193cml0dGVuOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHF1b3RhX3JlYWRfbm9tb3VudChzdHJ1Y3QgcXVvdGFfZmlsZSAqcWYsCisJCQkJICAgICAgIGV4dDJfbG9mZl90IG9mZnNldCwKKwkJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlleHQyX2ZpbGVfdAllMl9maWxlID0gcWYtPmUyX2ZpbGU7CisJdW5zaWduZWQgaW50CWJ5dGVzX3JlYWQgPSAwOworCWVycmNvZGVfdAllcnI7CisKKwllcnIgPSBleHQyZnNfZmlsZV9sbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoImV4dDJmc19maWxlX2xsc2VlayBmYWlsZWQ6ICVsZCIsIGVycik7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IGV4dDJmc19maWxlX3JlYWQoZTJfZmlsZSwgYnVmLCBzaXplLCAmYnl0ZXNfcmVhZCk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9yZWFkIGZhaWxlZDogJWxkIiwgZXJyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGJ5dGVzX3JlYWQ7Cit9CisKKy8qCisgKiBEZXRlY3QgcXVvdGEgZm9ybWF0IGFuZCBpbml0aWFsaXplIHF1b3RhIElPCisgKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX29wZW4oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgZXh0Ml9maWxzeXMgZnMsCisJCQkgIGV4dDJfaW5vX3QgcWZfaW5vLCBpbnQgdHlwZSwgaW50IGZtdCwgaW50IGZsYWdzKQoreworCWV4dDJfZmlsZV90IGUyX2ZpbGU7CisJZXJyY29kZV90IGVycjsKKworCWlmIChmbXQgPT0gLTEpCisJCWZtdCA9IFFGTVRfVkZTX1YxOworCisJZXJyID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWxvZ19kZWJ1ZygiT3BlbmluZyBxdW90YSBpbm89JWx1LCB0eXBlPSVkIiwgcWZfaW5vLCB0eXBlKTsKKwllcnIgPSBleHQyZnNfZmlsZV9vcGVuKGZzLCBxZl9pbm8sIGZsYWdzLCAmZTJfZmlsZSk7CisJaWYgKGVycikgeworCQlsb2dfZXJyKCJleHQyZnNfZmlsZV9vcGVuIGZhaWxlZDogJXMiLCBlcnJvcl9tZXNzYWdlKGVycikpOworCQlyZXR1cm4gZXJyOworCX0KKwloLT5xaF9xZi5lMl9maWxlID0gZTJfZmlsZTsKKworCWgtPnFoX3FmLmZzID0gZnM7CisJaC0+cWhfcWYuaW5vID0gcWZfaW5vOworCWgtPmUyZnNfd3JpdGUgPSBxdW90YV93cml0ZV9ub21vdW50OworCWgtPmUyZnNfcmVhZCA9IHF1b3RhX3JlYWRfbm9tb3VudDsKKwloLT5xaF9pb19mbGFncyA9IDA7CisJaC0+cWhfdHlwZSA9IHR5cGU7CisJaC0+cWhfZm10ID0gZm10OworCW1lbXNldCgmaC0+cWhfaW5mbywgMCwgc2l6ZW9mKGgtPnFoX2luZm8pKTsKKwloLT5xaF9vcHMgPSAmcXVvdGFmaWxlX29wc18yOworCisJaWYgKGgtPnFoX29wcy0+Y2hlY2tfZmlsZSAmJgorCSAgICAoaC0+cWhfb3BzLT5jaGVja19maWxlKGgsIHR5cGUsIGZtdCkgPT0gMCkpIHsKKwkJbG9nX2VycigicWhfb3BzLT5jaGVja19maWxlIGZhaWxlZCIpOworCQlleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChoLT5xaF9vcHMtPmluaXRfaW8gJiYgKGgtPnFoX29wcy0+aW5pdF9pbyhoKSA8IDApKSB7CisJCWxvZ19lcnIoInFoX29wcy0+aW5pdF9pbyBmYWlsZWQiKTsKKwkJZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBxdW90YV9pbm9kZV9pbml0X25ldyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8pCit7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXJyY29kZV90IGVyciA9IDA7CisKKwllcnIgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAmaW5vZGUpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiZXgyZnNfcmVhZF9pbm9kZSBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoRVhUMl9JX1NJWkUoJmlub2RlKSkKKwkJcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZnMsIGlubyk7CisKKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKTsKKwlleHQyZnNfaWJsa19zZXQoZnMsICZpbm9kZSwgMCk7CisJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfbXRpbWUgPQorCQlpbm9kZS5pX2N0aW1lID0gZnMtPm5vdyA/IGZzLT5ub3cgOiB0aW1lKDApOworCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCAwNjAwOworCWlub2RlLmlfZmxhZ3MgfD0gRVhUMl9JTU1VVEFCTEVfRkw7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCUVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKQorCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKworCWVyciA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAoZXJyKSB7CisJCWxvZ19lcnIoImV4dDJmc193cml0ZV9uZXdfaW5vZGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ3JlYXRlIG5ldyBxdW90YWZpbGUgb2Ygc3BlY2lmaWVkIGZvcm1hdCBvbiBnaXZlbiBmaWxlc3lzdGVtCisgKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX2NyZWF0ZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBleHQyX2ZpbHN5cyBmcywgaW50IHR5cGUsIGludCBmbXQpCit7CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgcWZfaW51bTsKKworCWlmIChmbXQgPT0gLTEpCisJCWZtdCA9IFFGTVRfVkZTX1YxOworCisJaC0+cWhfcWYuZnMgPSBmczsKKwlpZiAodHlwZSA9PSBVU1JRVU9UQSkKKwkJcWZfaW51bSA9IEVYVDRfVVNSX1FVT1RBX0lOTzsKKwllbHNlIGlmICh0eXBlID09IEdSUFFVT1RBKQorCQlxZl9pbnVtID0gRVhUNF9HUlBfUVVPVEFfSU5POworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJZXJyID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gcXVvdGFfaW5vZGVfaW5pdF9uZXcoZnMsIHFmX2ludW0pOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiaW5pdF9uZXdfcXVvdGFfaW5vZGUgZmFpbGVkIik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJaC0+cWhfcWYuaW5vID0gcWZfaW51bTsKKwloLT5lMmZzX3dyaXRlID0gcXVvdGFfd3JpdGVfbm9tb3VudDsKKwloLT5lMmZzX3JlYWQgPSBxdW90YV9yZWFkX25vbW91bnQ7CisKKwlsb2dfZGVidWcoIkNyZWF0aW5nIHF1b3RhIGlubz0lbHUsIHR5cGU9JWQiLCBxZl9pbnVtLCB0eXBlKTsKKwllcnIgPSBleHQyZnNfZmlsZV9vcGVuKGZzLCBxZl9pbnVtLAorCQkJRVhUMl9GSUxFX1dSSVRFIHwgRVhUMl9GSUxFX0NSRUFURSwgJmUyX2ZpbGUpOworCWlmIChlcnIpIHsKKwkJbG9nX2VycigiZXh0MmZzX2ZpbGVfb3BlbiBmYWlsZWQ6ICVkIiwgZXJyKTsKKwkJZ290byBvdXRfZXJyOworCX0KKwloLT5xaF9xZi5lMl9maWxlID0gZTJfZmlsZTsKKworCWgtPnFoX2lvX2ZsYWdzID0gMDsKKwloLT5xaF90eXBlID0gdHlwZTsKKwloLT5xaF9mbXQgPSBmbXQ7CisJbWVtc2V0KCZoLT5xaF9pbmZvLCAwLCBzaXplb2YoaC0+cWhfaW5mbykpOworCWgtPnFoX29wcyA9ICZxdW90YWZpbGVfb3BzXzI7CisKKwlpZiAoaC0+cWhfb3BzLT5uZXdfaW8gJiYgKGgtPnFoX29wcy0+bmV3X2lvKGgpIDwgMCkpIHsKKwkJbG9nX2VycigicWhfb3BzLT5uZXdfaW8gZmFpbGVkIik7CisJCWdvdG8gb3V0X2VycjE7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9lcnIxOgorCWV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworb3V0X2VycjoKKworCWlmIChxZl9pbnVtKQorCQlxdW90YV9pbm9kZV90cnVuY2F0ZShmcywgcWZfaW51bSk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBDbG9zZSBxdW90YWZpbGUgYW5kIHJlbGVhc2UgaGFuZGxlCisgKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX2Nsb3NlKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpCit7CisJaWYgKGgtPnFoX2lvX2ZsYWdzICYgSU9GTF9JTkZPRElSVFkpIHsKKwkJaWYgKGgtPnFoX29wcy0+d3JpdGVfaW5mbyAmJiBoLT5xaF9vcHMtPndyaXRlX2luZm8oaCkgPCAwKQorCQkJcmV0dXJuIC0xOworCQloLT5xaF9pb19mbGFncyAmPSB+SU9GTF9JTkZPRElSVFk7CisJfQorCisJaWYgKGgtPnFoX29wcy0+ZW5kX2lvICYmIGgtPnFoX29wcy0+ZW5kX2lvKGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChoLT5xaF9xZi5lMl9maWxlKSB7CisJCWV4dDJmc19maWxlX2ZsdXNoKGgtPnFoX3FmLmUyX2ZpbGUpOworCQlleHQyZnNfZmlsZV9zZXRfc2l6ZTIoaC0+cWhfcWYuZTJfZmlsZSwKKwkJCWNvbXB1dGVfaW5vZGVfc2l6ZShoLT5xaF9xZi5mcywgaC0+cWhfcWYuaW5vKSk7CisJCWV4dDJmc19maWxlX2Nsb3NlKGgtPnFoX3FmLmUyX2ZpbGUpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQ3JlYXRlIGVtcHR5IHF1b3RhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZHF1b3QgKmdldF9lbXB0eV9kcXVvdCh2b2lkKQoreworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwlpZiAoZXh0MmZzX2dldF9tZW16ZXJvKHNpemVvZihzdHJ1Y3QgZHF1b3QpLCAmZHF1b3QpKSB7CisJCWxvZ19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkcXVvdCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkcXVvdC0+ZHFfaWQgPSAtMTsKKwlyZXR1cm4gZHF1b3Q7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW8uaCBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDYyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW8uaApAQCAtMCwwICsxLDE2NSBAQAorLyoqIHF1b3RhaW8uaAorICoKKyAqIEhlYWRlciBvZiBJTyBvcGVyYXRpb25zIGZvciBxdW90YSB1dGlsaXRpZXMKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CisgKi8KKworI2lmbmRlZiBHVUFSRF9RVU9UQUlPX0gKKyNkZWZpbmUgR1VBUkRfUVVPVEFJT19ICisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImRxYmxrX3YyLmgiCisKK3R5cGVkZWYgaW50NjRfdCBxc2l6ZV90OwkvKiBUeXBlIGluIHdoaWNoIHdlIHN0b3JlIHNpemUgbGltaXRhdGlvbnMgKi8KKworI2RlZmluZSBNQVhRVU9UQVMgMgorI2RlZmluZSBVU1JRVU9UQSAwCisjZGVmaW5lIEdSUFFVT1RBIDEKKworLyoKKyAqIERlZmluaXRpb25zIG9mIG1hZ2ljcyBhbmQgdmVyc2lvbnMgb2YgY3VycmVudCBxdW90YSBmaWxlcworICovCisjZGVmaW5lIElOSVRRTUFHSUNTIHtcCisJMHhkOWMwMWYxMSwJLyogVVNSUVVPVEEgKi9cCisJMHhkOWMwMTkyNwkvKiBHUlBRVU9UQSAqL1wKK30KKworLyogU2l6ZSBvZiBibG9ja3MgaW4gd2hpY2ggYXJlIGNvdW50ZWQgc2l6ZSBsaW1pdHMgaW4gZ2VuZXJpYyB1dGlsaXR5IHBhcnRzICovCisjZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAorI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQorI2RlZmluZSB0b3FiKHgpICgoKHgpICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTKQorCisvKiBRdW90YSBmb3JtYXQgdHlwZSBJRHMgKi8KKyNkZWZpbmUJUUZNVF9WRlNfT0xEIDEKKyNkZWZpbmUJUUZNVF9WRlNfVjAgMgorI2RlZmluZQlRRk1UX1ZGU19WMSA0CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBkZWZpbmUgdGhlIGRlZmF1bHQgYW1vdW50IG9mIHRpbWUgZ2l2ZW4gYSB1c2VyCisgKiBiZWZvcmUgdGhlIHNvZnQgbGltaXRzIGFyZSB0cmVhdGVkIGFzIGhhcmQgbGltaXRzICh1c3VhbGx5IHJlc3VsdGluZworICogaW4gYW4gYWxsb2NhdGlvbiBmYWlsdXJlKS4gVGhlIHRpbWVyIGlzIHN0YXJ0ZWQgd2hlbiB0aGUgdXNlciBjcm9zc2VzCisgKiB0aGVpciBzb2Z0IGxpbWl0LCBpdCBpcyByZXNldCB3aGVuIHRoZXkgZ28gYmVsb3cgdGhlaXIgc29mdCBsaW1pdC4KKyAqLworI2RlZmluZSBNQVhfSVFfVElNRSAgNjA0ODAwCS8qICg3KjI0KjYwKjYwKSAxIHdlZWsgKi8KKyNkZWZpbmUgTUFYX0RRX1RJTUUgIDYwNDgwMAkvKiAoNyoyNCo2MCo2MCkgMSB3ZWVrICovCisKKyNkZWZpbmUgSU9GTF9JTkZPRElSVFkJMHgwMQkvKiBEaWQgaW5mbyBjaGFuZ2U/ICovCisKK3N0cnVjdCBxdW90YWZpbGVfb3BzOworCisvKiBHZW5lcmljIGluZm9ybWF0aW9uIGFib3V0IHF1b3RhZmlsZSAqLworc3RydWN0IHV0aWxfZHFpbmZvIHsKKwl0aW1lX3QgZHFpX2JncmFjZTsJLyogQmxvY2sgZ3JhY2UgdGltZSBmb3IgZ2l2ZW4gcXVvdGFmaWxlICovCisJdGltZV90IGRxaV9pZ3JhY2U7CS8qIElub2RlIGdyYWNlIHRpbWUgZm9yIGdpdmVuIHF1b3RhZmlsZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHYyX21lbV9kcWluZm8gdjJfbWRxaTsKKwl9IHU7CQkJLyogRm9ybWF0IHNwZWNpZmljIGluZm8gYWJvdXQgcXVvdGFmaWxlICovCit9OworCitzdHJ1Y3QgcXVvdGFfZmlsZSB7CisJZXh0Ml9maWxzeXMgZnM7CisJZXh0Ml9pbm9fdCBpbm87CisJZXh0Ml9maWxlX3QgZTJfZmlsZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3Igb25lIG9wZW5lZCBxdW90YSBmaWxlICovCitzdHJ1Y3QgcXVvdGFfaGFuZGxlIHsKKwlpbnQgcWhfdHlwZTsJCS8qIFR5cGUgb2YgcXVvdGFmaWxlICovCisJaW50IHFoX2ZtdDsJCS8qIFF1b3RhZmlsZSBmb3JtYXQgKi8KKwlpbnQgcWhfaW9fZmxhZ3M7CS8qIElPIGZsYWdzIGZvciBmaWxlICovCisJc3RydWN0IHF1b3RhX2ZpbGUgcWhfcWY7CisJdW5zaWduZWQgaW50ICgqZTJmc19yZWFkKShzdHJ1Y3QgcXVvdGFfZmlsZSAqcWYsIGV4dDJfbG9mZl90IG9mZnNldCwKKwkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGludCBzaXplKTsKKwl1bnNpZ25lZCBpbnQgKCplMmZzX3dyaXRlKShzdHJ1Y3QgcXVvdGFfZmlsZSAqcWYsIGV4dDJfbG9mZl90IG9mZnNldCwKKwkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisJc3RydWN0IHF1b3RhZmlsZV9vcHMgKnFoX29wczsJLyogT3BlcmF0aW9ucyBvbiBxdW90YWZpbGUgKi8KKwlzdHJ1Y3QgdXRpbF9kcWluZm8gcWhfaW5mbzsJLyogR2VuZXJpYyBxdW90YWZpbGUgaW5mbyAqLworfTsKKworLyogVXRpbGl0eSBxdW90YSBibG9jayAqLworc3RydWN0IHV0aWxfZHFibGsgeworCXFzaXplX3QgZHFiX2loYXJkbGltaXQ7CisJcXNpemVfdCBkcWJfaXNvZnRsaW1pdDsKKwlxc2l6ZV90IGRxYl9jdXJpbm9kZXM7CisJcXNpemVfdCBkcWJfYmhhcmRsaW1pdDsKKwlxc2l6ZV90IGRxYl9ic29mdGxpbWl0OworCXFzaXplX3QgZHFiX2N1cnNwYWNlOworCXRpbWVfdCBkcWJfYnRpbWU7CisJdGltZV90IGRxYl9pdGltZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2Ml9tZW1fZHFibGsgdjJfbWRxYjsKKwl9IHU7CQkJLyogRm9ybWF0IHNwZWNpZmljIGRxdW90IGluZm9ybWF0aW9uICovCit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIG9uZSBsb2FkZWQgcXVvdGEgKi8KK3N0cnVjdCBkcXVvdCB7CisJc3RydWN0IGRxdW90ICpkcV9uZXh0OwkvKiBQb2ludGVyIHRvIG5leHQgZHF1b3QgaW4gdGhlIGxpc3QgKi8KKwlxaWRfdCBkcV9pZDsJCS8qIElEIGRxdW90IGJlbG9uZ3MgdG8gKi8KKwlpbnQgZHFfZmxhZ3M7CQkvKiBTb21lIGZsYWdzIGZvciB1dGlscyAqLworCXN0cnVjdCBxdW90YV9oYW5kbGUgKmRxX2g7CS8qIEhhbmRsZSBvZiBxdW90YWZpbGUgZm9yIHRoaXMgZHF1b3QgKi8KKwlzdHJ1Y3QgdXRpbF9kcWJsayBkcV9kcWI7CS8qIFBhcnNlZCBkYXRhIG9mIGRxdW90ICovCit9OworCisvKiBTdHJ1Y3R1cmUgb2YgcXVvdGFmaWxlIG9wZXJhdGlvbnMgKi8KK3N0cnVjdCBxdW90YWZpbGVfb3BzIHsKKwkvKiBDaGVjayB3aGV0aGVyIHF1b3RhZmlsZSBpcyBpbiBvdXIgZm9ybWF0ICovCisJaW50ICgqY2hlY2tfZmlsZSkgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGludCB0eXBlLCBpbnQgZm10KTsKKwkvKiBPcGVuIHF1b3RhZmlsZSAqLworCWludCAoKmluaXRfaW8pIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKTsKKwkvKiBDcmVhdGUgbmV3IHF1b3RhZmlsZSAqLworCWludCAoKm5ld19pbykgKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpOworCS8qIFdyaXRlIGFsbCBjaGFuZ2VzIGFuZCBjbG9zZSBxdW90YWZpbGUgKi8KKwlpbnQgKCplbmRfaW8pIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKTsKKwkvKiBXcml0ZSBpbmZvIGFib3V0IHF1b3RhZmlsZSAqLworCWludCAoKndyaXRlX2luZm8pIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKTsKKwkvKiBSZWFkIGRxdW90IGludG8gbWVtb3J5ICovCisJc3RydWN0IGRxdW90ICooKnJlYWRfZHF1b3QpIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBxaWRfdCBpZCk7CisJLyogV3JpdGUgZ2l2ZW4gZHF1b3QgdG8gZGlzayAqLworCWludCAoKmNvbW1pdF9kcXVvdCkgKHN0cnVjdCBkcXVvdCAqZHF1b3QpOworCS8qIFNjYW4gcXVvdGFmaWxlIGFuZCBjYWxsIGNhbGxiYWNrIG9uIGV2ZXJ5IHN0cnVjdHVyZSAqLworCWludCAoKnNjYW5fZHF1b3RzKSAoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwKKwkJCSAgICBpbnQgKCpwcm9jZXNzX2RxdW90KSAoc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCQkJCSAgdm9pZCAqZGF0YSksCisJCQkgICAgdm9pZCAqZGF0YSk7CisJLyogRnVuY3Rpb24gdG8gcHJpbnQgZm9ybWF0IHNwZWNpZmljIGZpbGUgaW5mb3JtYXRpb24gKi8KKwlpbnQgKCpyZXBvcnQpIChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBpbnQgdmVyYm9zZSk7Cit9OworCisvKiBUaGlzIG1pZ2h0IGdvIGludG8gYSBzcGVjaWFsIGhlYWRlciBmaWxlIGJ1dCB0aGF0IHNvdW5kcyBhIGJpdCBzaWxseS4uLiAqLworZXh0ZXJuIHN0cnVjdCBxdW90YWZpbGVfb3BzIHF1b3RhZmlsZV9vcHNfbWV0YTsKKworLyogT3BlbiBleGlzdGluZyBxdW90YWZpbGUgb2YgZ2l2ZW4gdHlwZSAoYW5kIHZlcmlmeSBpdHMgZm9ybWF0KSBvbiBnaXZlbgorICogZmlsZXN5c3RlbS4gKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX29wZW4oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgZXh0Ml9maWxzeXMgZnMsCisJCQkgIGV4dDJfaW5vX3QgcWZfaW5vLCBpbnQgdHlwZSwgaW50IGZtdCwgaW50IGZsYWdzKTsKKworCisvKiBDcmVhdGUgbmV3IHF1b3RhZmlsZSBvZiBzcGVjaWZpZWQgZm9ybWF0IG9uIGdpdmVuIGZpbGVzeXN0ZW0gKi8KK2VycmNvZGVfdCBxdW90YV9maWxlX2NyZWF0ZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBleHQyX2ZpbHN5cyBmcywKKwkJCSAgICBpbnQgdHlwZSwgaW50IGZtdCk7CisKKy8qIENsb3NlIHF1b3RhZmlsZSAqLworZXJyY29kZV90IHF1b3RhX2ZpbGVfY2xvc2Uoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCk7CisKKy8qIEdldCBlbXB0eSBxdW90YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkcXVvdCAqZ2V0X2VtcHR5X2RxdW90KHZvaWQpOworCitlcnJjb2RlX3QgcXVvdGFfaW5vZGVfdHJ1bmNhdGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vKTsKKworY29uc3QgY2hhciAqdHlwZTJuYW1lKGludCB0eXBlKTsKKwordm9pZCB1cGRhdGVfZ3JhY2VfdGltZXMoc3RydWN0IGRxdW90ICpxKTsKKworLyogc2l6ZSBmb3IgdGhlIGJ1ZmZlciByZXR1cm5lZCBieSBxdW90YV9nZXRfcWZfbmFtZSgpOyBtdXN0IGJlIGdyZWF0ZXIKKyAgIHRoYW4gbWF4bGVuIG9mIGV4dGVuc2lvbnNbXSBhbmQgZm10bmFtZXNbXSAocGx1cyAyKSBmb3VuZCBpbiBxdW90YWlvLmMgKi8KKyNkZWZpbmUgUVVPVEFfTkFNRV9MRU4gMTYKKworY29uc3QgY2hhciAqcXVvdGFfZ2V0X3FmX25hbWUoaW50IHR5cGUsIGludCBmbXQsIGNoYXIgKmJ1Zik7Citjb25zdCBjaGFyICpxdW90YV9nZXRfcWZfcGF0aChjb25zdCBjaGFyICptbnRwdCwgaW50IHF0eXBlLCBpbnQgZm10LAorCQkJICAgICAgY2hhciAqcGF0aF9idWYsIHNpemVfdCBwYXRoX2J1Zl9zaXplKTsKKworI2VuZGlmIC8qIEdVQVJEX1FVT1RBSU9fSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuYyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpb190cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NDk0ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpb190cmVlLmMKQEAgLTAsMCArMSw2NTUgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZXcgcXVvdGFmaWxlIGZvcm1hdAorICoKKyAqIEphbiBLYXJhIDxqYWNrQHN1c2UuY3o+IC0gc3BvbnNvcmVkIGJ5IFN1U0UgQ1IKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicXVvdGFpb190cmVlLmgiCisjaW5jbHVkZSAicXVvdGFpby5oIgorCit0eXBlZGVmIGNoYXIgKmRxYnVmX3Q7CisKKyNkZWZpbmUgZnJlZWRxYnVmKGJ1ZikJCWV4dDJmc19mcmVlX21lbSgmYnVmKQorCitzdGF0aWMgaW5saW5lIGRxYnVmX3QgZ2V0ZHFidWYodm9pZCkKK3sKKwlkcWJ1Zl90IGJ1ZjsKKwlpZiAoZXh0MmZzX2dldF9tZW16ZXJvKFFUX0JMS1NJWkUsICZidWYpKSB7CisJCWxvZ19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkcWJ1ZiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gYnVmOworfQorCisvKiBJcyBnaXZlbiBkcXVvdCBlbXB0eT8gKi8KK2ludCBxdHJlZV9lbnRyeV91bnVzZWQoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmRpc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ZHFpX2VudHJ5X3NpemU7IGkrKykKKwkJaWYgKGRpc2tbaV0pCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IHF0cmVlX2Rxc3RyX2luX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gKFFUX0JMS1NJWkUgLSBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikpIC8KKwkJaW5mby0+ZHFpX2VudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2luZGV4KHFpZF90IGlkLCBpbnQgZGVwdGgpCit7CisJcmV0dXJuIChpZCA+PiAoKFFUX1RSRUVERVBUSCAtIGRlcHRoIC0gMSkgKiA4KSkgJiAweGZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19xdW90YWZpbGVfaW5mb19kaXJ0eShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKQoreworCWgtPnFoX2lvX2ZsYWdzIHw9IElPRkxfSU5GT0RJUlRZOworfQorCisvKiBSZWFkIGdpdmVuIGJsb2NrICovCitzdGF0aWMgdm9pZCByZWFkX2JsayhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCB1aW50IGJsaywgZHFidWZfdCBidWYpCit7CisJaW50IGVycjsKKworCWVyciA9IGgtPmUyZnNfcmVhZCgmaC0+cWhfcWYsIGJsayA8PCBRVF9CTEtTSVpFX0JJVFMsIGJ1ZiwKKwkJCVFUX0JMS1NJWkUpOworCWlmIChlcnIgPCAwKQorCQlsb2dfZXJyKCJDYW5ub3QgcmVhZCBibG9jayAldTogJXMiLCBibGssIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZSBpZiAoZXJyICE9IFFUX0JMS1NJWkUpCisJCW1lbXNldChidWYgKyBlcnIsIDAsIFFUX0JMS1NJWkUgLSBlcnIpOworfQorCisvKiBXcml0ZSBibG9jayAqLworc3RhdGljIGludCB3cml0ZV9ibGsoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgdWludCBibGssIGRxYnVmX3QgYnVmKQoreworCWludCBlcnI7CisKKwllcnIgPSBoLT5lMmZzX3dyaXRlKCZoLT5xaF9xZiwgYmxrIDw8IFFUX0JMS1NJWkVfQklUUywgYnVmLAorCQkJUVRfQkxLU0laRSk7CisJaWYgKGVyciA8IDAgJiYgZXJybm8gIT0gRU5PU1BDKQorCQlsb2dfZXJyKCJDYW5ub3Qgd3JpdGUgYmxvY2sgKCV1KTogJXMiLCBibGssIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKGVyciAhPSBRVF9CTEtTSVpFKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IGZyZWUgYmxvY2sgaW4gZmlsZSAoZWl0aGVyIGZyb20gZnJlZSBsaXN0IG9yIGNyZWF0ZSBuZXcgb25lKSAqLworc3RhdGljIGludCBnZXRfZnJlZV9kcWJsayhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKQoreworCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoKTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlpbnQgYmxrOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGluZm8tPmRxaV9mcmVlX2JsaykgeworCQlibGsgPSBpbmZvLT5kcWlfZnJlZV9ibGs7CisJCXJlYWRfYmxrKGgsIGJsaywgYnVmKTsKKwkJaW5mby0+ZHFpX2ZyZWVfYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KGRoLT5kcWRoX25leHRfZnJlZSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGJ1ZiwgMCwgUVRfQkxLU0laRSk7CisJCS8qIEFzc3VyZSBibG9jayBhbGxvY2F0aW9uLi4uICovCisJCWlmICh3cml0ZV9ibGsoaCwgaW5mby0+ZHFpX2Jsb2NrcywgYnVmKSA8IDApIHsKKwkJCWZyZWVkcWJ1ZihidWYpOworCQkJbG9nX2VycigiQ2Fubm90IGFsbG9jYXRlIG5ldyBxdW90YSBibG9jayAiCisJCQkJIihvdXQgb2YgZGlzayBzcGFjZSkuIik7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCQlibGsgPSBpbmZvLT5kcWlfYmxvY2tzKys7CisJfQorCW1hcmtfcXVvdGFmaWxlX2luZm9fZGlydHkoaCk7CisJZnJlZWRxYnVmKGJ1Zik7CisJcmV0dXJuIGJsazsKK30KKworLyogUHV0IGdpdmVuIGJsb2NrIHRvIGZyZWUgbGlzdCAqLworc3RhdGljIHZvaWQgcHV0X2ZyZWVfZHFibGsoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgZHFidWZfdCBidWYsIHVpbnQgYmxrKQoreworCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPSAmaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlOworCisJZGgtPmRxZGhfbmV4dF9mcmVlID0gZXh0MmZzX2NwdV90b19sZTMyKGluZm8tPmRxaV9mcmVlX2Jsayk7CisJZGgtPmRxZGhfcHJldl9mcmVlID0gZXh0MmZzX2NwdV90b19sZTMyKDApOworCWRoLT5kcWRoX2VudHJpZXMgPSBleHQyZnNfY3B1X3RvX2xlMTYoMCk7CisJaW5mby0+ZHFpX2ZyZWVfYmxrID0gYmxrOworCW1hcmtfcXVvdGFmaWxlX2luZm9fZGlydHkoaCk7CisJd3JpdGVfYmxrKGgsIGJsaywgYnVmKTsKK30KKworLyogUmVtb3ZlIGdpdmVuIGJsb2NrIGZyb20gdGhlIGxpc3Qgb2YgYmxvY2tzIHdpdGggZnJlZSBlbnRyaWVzICovCitzdGF0aWMgdm9pZCByZW1vdmVfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIGRxYnVmX3QgYnVmLCB1aW50IGJsaykKK3sKKwlkcWJ1Zl90IHRtcGJ1ZiA9IGdldGRxYnVmKCk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwl1aW50IG5leHRibGsgPSBleHQyZnNfbGUzMl90b19jcHUoZGgtPmRxZGhfbmV4dF9mcmVlKSwgcHJldmJsayA9CisKKwkJZXh0MmZzX2xlMzJfdG9fY3B1KGRoLT5kcWRoX3ByZXZfZnJlZSk7CisKKwlpZiAoIXRtcGJ1ZikKKwkJcmV0dXJuOworCisJaWYgKG5leHRibGspIHsKKwkJcmVhZF9ibGsoaCwgbmV4dGJsaywgdG1wYnVmKTsKKwkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9wcmV2X2ZyZWUgPQorCQkJCWRoLT5kcWRoX3ByZXZfZnJlZTsKKwkJd3JpdGVfYmxrKGgsIG5leHRibGssIHRtcGJ1Zik7CisJfQorCWlmIChwcmV2YmxrKSB7CisJCXJlYWRfYmxrKGgsIHByZXZibGssIHRtcGJ1Zik7CisJCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfbmV4dF9mcmVlID0KKwkJCQlkaC0+ZHFkaF9uZXh0X2ZyZWU7CisJCXdyaXRlX2JsayhoLCBwcmV2YmxrLCB0bXBidWYpOworCX0gZWxzZSB7CisJCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZnJlZV9lbnRyeSA9IG5leHRibGs7CisJCW1hcmtfcXVvdGFmaWxlX2luZm9fZGlydHkoaCk7CisJfQorCWZyZWVkcWJ1Zih0bXBidWYpOworCWRoLT5kcWRoX25leHRfZnJlZSA9IGRoLT5kcWRoX3ByZXZfZnJlZSA9IGV4dDJmc19jcHVfdG9fbGUzMigwKTsKKwl3cml0ZV9ibGsoaCwgYmxrLCBidWYpOwkvKiBObyBtYXR0ZXIgd2hldGhlciB3cml0ZSBzdWNjZWVkcworCQkJCSAqIGJsb2NrIGlzIG91dCBvZiBsaXN0ICovCit9CisKKy8qIEluc2VydCBnaXZlbiBibG9jayB0byB0aGUgYmVnaW5uaW5nIG9mIGxpc3Qgd2l0aCBmcmVlIGVudHJpZXMgKi8KK3N0YXRpYyB2b2lkIGluc2VydF9mcmVlX2RxZW50cnkoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgZHFidWZfdCBidWYsIHVpbnQgYmxrKQoreworCWRxYnVmX3QgdG1wYnVmID0gZ2V0ZHFidWYoKTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKworCWlmICghdG1wYnVmKQorCQlyZXR1cm47CisKKwlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBleHQyZnNfY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2ZyZWVfZW50cnkpOworCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGV4dDJmc19jcHVfdG9fbGUzMigwKTsKKwl3cml0ZV9ibGsoaCwgYmxrLCBidWYpOworCWlmIChpbmZvLT5kcWlfZnJlZV9lbnRyeSkgeworCQlyZWFkX2JsayhoLCBpbmZvLT5kcWlfZnJlZV9lbnRyeSwgdG1wYnVmKTsKKwkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9wcmV2X2ZyZWUgPQorCQkJCWV4dDJmc19jcHVfdG9fbGUzMihibGspOworCQl3cml0ZV9ibGsoaCwgaW5mby0+ZHFpX2ZyZWVfZW50cnksIHRtcGJ1Zik7CisJfQorCWZyZWVkcWJ1Zih0bXBidWYpOworCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gYmxrOworCW1hcmtfcXVvdGFmaWxlX2luZm9fZGlydHkoaCk7Cit9CisKKy8qIEZpbmQgc3BhY2UgZm9yIGRxdW90ICovCitzdGF0aWMgdWludCBmaW5kX2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJICAgICAgaW50ICplcnIpCit7CisJaW50IGJsaywgaTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9ICZoLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWU7CisJY2hhciAqZGRxdW90OworCWRxYnVmX3QgYnVmOworCisJKmVyciA9IDA7CisJYnVmID0gZ2V0ZHFidWYoKTsKKwlpZiAoIWJ1ZikgeworCQkqZXJyID0gLUVOT01FTTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwlpZiAoaW5mby0+ZHFpX2ZyZWVfZW50cnkpIHsKKwkJYmxrID0gaW5mby0+ZHFpX2ZyZWVfZW50cnk7CisJCXJlYWRfYmxrKGgsIGJsaywgYnVmKTsKKwl9IGVsc2UgeworCQlibGsgPSBnZXRfZnJlZV9kcWJsayhoKTsKKwkJaWYgKGJsayA8IDApIHsKKwkJCWZyZWVkcWJ1ZihidWYpOworCQkJKmVyciA9IGJsazsKKwkJCXJldHVybiAwOworCQl9CisJCW1lbXNldChidWYsIDAsIFFUX0JMS1NJWkUpOworCQlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IGJsazsKKwkJbWFya19xdW90YWZpbGVfaW5mb19kaXJ0eShoKTsKKwl9CisKKwkvKiBCbG9jayB3aWxsIGJlIGZ1bGw/ICovCisJaWYgKGV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSArIDEgPj0KKwkgICAgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKQorCQlyZW1vdmVfZnJlZV9kcWVudHJ5KGgsIGJ1ZiwgYmxrKTsKKworCWRoLT5kcWRoX2VudHJpZXMgPQorCQlleHQyZnNfY3B1X3RvX2xlMTYoZXh0MmZzX2xlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpICsgMSk7CisJLyogRmluZCBmcmVlIHN0cnVjdHVyZSBpbiBibG9jayAqLworCWRkcXVvdCA9IGJ1ZiArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAmJiAhcXRyZWVfZW50cnlfdW51c2VkKGluZm8sIGRkcXVvdCk7CisJICAgICBpKyspCisJCWRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKworCWlmIChpID09IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkKKwkJbG9nX2VycigiZmluZF9mcmVlX2RxZW50cnkoKTogRGF0YSBibG9jayBmdWxsIHVuZXhwZWN0ZWRseS4iKTsKKworCXdyaXRlX2JsayhoLCBibGssIGJ1Zik7CisJZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiA9CisJCShibGsgPDwgUVRfQkxLU0laRV9CSVRTKSArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKSArCisJCWkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gYmxrOworfQorCisvKiBJbnNlcnQgcmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBpbnRvIHRoZSB0cmllICovCitzdGF0aWMgaW50IGRvX2luc2VydF90cmVlKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQkgIHVpbnQgKiB0cmVlYmxrLCBpbnQgZGVwdGgpCit7CisJZHFidWZfdCBidWY7CisJaW50IG5ld3NvbiA9IDAsIG5ld2FjdCA9IDA7CisJdV9pbnQzMl90ICpyZWY7CisJdWludCBuZXdibGs7CisJaW50IHJldCA9IDA7CisKKwlsb2dfZGVidWcoImluc2VydGluZyBpbiB0cmVlOiB0cmVlYmxrPSV1LCBkZXB0aD0lZCIsICp0cmVlYmxrLCBkZXB0aCk7CisJYnVmID0gZ2V0ZHFidWYoKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoISp0cmVlYmxrKSB7CisJCXJldCA9IGdldF9mcmVlX2RxYmxrKGgpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJKnRyZWVibGsgPSByZXQ7CisJCW1lbXNldChidWYsIDAsIFFUX0JMS1NJWkUpOworCQluZXdhY3QgPSAxOworCX0gZWxzZSB7CisJCXJlYWRfYmxrKGgsICp0cmVlYmxrLCBidWYpOworCX0KKworCXJlZiA9ICh1X2ludDMyX3QgKikgYnVmOworCW5ld2JsayA9IGV4dDJmc19sZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGRxdW90LT5kcV9pZCwgZGVwdGgpXSk7CisJaWYgKCFuZXdibGspCisJCW5ld3NvbiA9IDE7CisJaWYgKGRlcHRoID09IFFUX1RSRUVERVBUSCAtIDEpIHsKKwkJaWYgKG5ld2JsaykKKwkJCWxvZ19lcnIoIkluc2VydGluZyBhbHJlYWR5IHByZXNlbnQgcXVvdGEgZW50cnkgIgorCQkJCSIoYmxvY2sgJXUpLiIsCisJCQkJcmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCQluZXdibGsgPSBmaW5kX2ZyZWVfZHFlbnRyeShoLCBkcXVvdCwgJnJldCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gZG9faW5zZXJ0X3RyZWUoaCwgZHF1b3QsICZuZXdibGssIGRlcHRoICsgMSk7CisJfQorCisJaWYgKG5ld3NvbiAmJiByZXQgPj0gMCkgeworCQlyZWZbZ2V0X2luZGV4KGRxdW90LT5kcV9pZCwgZGVwdGgpXSA9CisJCQlleHQyZnNfY3B1X3RvX2xlMzIobmV3YmxrKTsKKwkJd3JpdGVfYmxrKGgsICp0cmVlYmxrLCBidWYpOworCX0gZWxzZSBpZiAobmV3YWN0ICYmIHJldCA8IDApIHsKKwkJcHV0X2ZyZWVfZHFibGsoaCwgYnVmLCAqdHJlZWJsayk7CisJfQorCitvdXRfYnVmOgorCWZyZWVkcWJ1ZihidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyYXBwZXIgZm9yIGluc2VydGluZyBxdW90YSBzdHJ1Y3R1cmUgaW50byB0cmVlICovCitzdGF0aWMgdm9pZCBkcV9pbnNlcnRfdHJlZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXVpbnQgdG1wID0gUVRfVFJFRU9GRjsKKworCWlmIChkb19pbnNlcnRfdHJlZShoLCBkcXVvdCwgJnRtcCwgMCkgPCAwKQorCQlsb2dfZXJyKCJDYW5ub3Qgd3JpdGUgcXVvdGEgKGlkICV1KTogJXMiLAorCQkJKHVpbnQpIGRxdW90LT5kcV9pZCwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworLyogV3JpdGUgZHF1b3QgdG8gZmlsZSAqLwordm9pZCBxdHJlZV93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXNzaXplX3QgcmV0OworCWNoYXIgKmRkcXVvdDsKKwlzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoID0gZHF1b3QtPmRxX2g7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPQorCQkJJmRxdW90LT5kcV9oLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWU7CisJbG9nX2RlYnVnKCJ3cml0aW5nIGRkcXVvdCAxOiBvZmY9JWxsdSwgaW5mby0+ZHFpX2VudHJ5X3NpemU9JXUiLAorCQkJZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiwKKwkJCWluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwlyZXQgPSBleHQyZnNfZ2V0X21lbShpbmZvLT5kcWlfZW50cnlfc2l6ZSwgJmRkcXVvdCk7CisJaWYgKHJldCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJbG9nX2VycigiUXVvdGEgd3JpdGUgZmFpbGVkIChpZCAldSk6ICVzIiwKKwkJCSh1aW50KWRxdW90LT5kcV9pZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZikKKwkJZHFfaW5zZXJ0X3RyZWUoZHF1b3QtPmRxX2gsIGRxdW90KTsKKwlpbmZvLT5kcWlfb3BzLT5tZW0yZGlza19kcWJsayhkZHF1b3QsIGRxdW90KTsKKwlsb2dfZGVidWcoIndyaXRpbmcgZGRxdW90IDI6IG9mZj0lbGx1LCBpbmZvLT5kcWlfZW50cnlfc2l6ZT0ldSIsCisJCQlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmLAorCQkJaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCXJldCA9IGgtPmUyZnNfd3JpdGUoJmgtPnFoX3FmLCBkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmLCBkZHF1b3QsCisJCQlpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CisKKwlpZiAocmV0ICE9IGluZm8tPmRxaV9lbnRyeV9zaXplKSB7CisJCWlmIChyZXQgPiAwKQorCQkJZXJybm8gPSBFTk9TUEM7CisJCWxvZ19lcnIoIlF1b3RhIHdyaXRlIGZhaWxlZCAoaWQgJXUpOiAlcyIsCisJCQkodWludClkcXVvdC0+ZHFfaWQsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCWV4dDJmc19mcmVlX21lbSgmZGRxdW90KTsKK30KKworLyogRnJlZSBkcXVvdCBlbnRyeSBpbiBkYXRhIGJsb2NrICovCitzdGF0aWMgdm9pZCBmcmVlX2RxZW50cnkoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgc3RydWN0IGRxdW90ICpkcXVvdCwgdWludCBibGspCit7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPSAmaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlOworCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoKTsKKworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwlpZiAoZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiA+PiBRVF9CTEtTSVpFX0JJVFMgIT0gYmxrKQorCQlsb2dfZXJyKCJRdW90YSBzdHJ1Y3R1cmUgaGFzIG9mZnNldCB0byBvdGhlciBibG9jayAoJXUpICIKKwkJCSJ0aGFuIGl0IHNob3VsZCAoJXUpLiIsIGJsaywKKwkJCSAgKHVpbnQpIChkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID4+CisJCQkJICBRVF9CTEtTSVpFX0JJVFMpKTsKKworCXJlYWRfYmxrKGgsIGJsaywgYnVmKTsKKwlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWRoLT5kcWRoX2VudHJpZXMgPQorCQlleHQyZnNfY3B1X3RvX2xlMTYoZXh0MmZzX2xlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpIC0gMSk7CisKKwlpZiAoIWV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSkgewkvKiBCbG9jayBnb3QgZnJlZT8gKi8KKwkJcmVtb3ZlX2ZyZWVfZHFlbnRyeShoLCBidWYsIGJsayk7CisJCXB1dF9mcmVlX2RxYmxrKGgsIGJ1ZiwgYmxrKTsKKwl9IGVsc2UgeworCQltZW1zZXQoYnVmICsgKGRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYgJgorCQkJICAgICAgKCgxIDw8IFFUX0JMS1NJWkVfQklUUykgLSAxKSksCisJCSAgICAgICAwLCBpbmZvLT5kcWlfZW50cnlfc2l6ZSk7CisKKwkJLyogRmlyc3QgZnJlZSBlbnRyeT8gKi8KKwkJaWYgKGV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSA9PQorCQkJCXF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAtIDEpCisJCQkvKiBUaGlzIHdpbGwgYWxzbyB3cml0ZSBkYXRhIGJsb2NrICovCisJCQlpbnNlcnRfZnJlZV9kcWVudHJ5KGgsIGJ1ZiwgYmxrKTsKKwkJZWxzZQorCQkJd3JpdGVfYmxrKGgsIGJsaywgYnVmKTsKKwl9CisJZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZiA9IDA7CisJZnJlZWRxYnVmKGJ1Zik7Cit9CisKKy8qIFJlbW92ZSByZWZlcmVuY2UgdG8gZHF1b3QgZnJvbSB0cmVlICovCitzdGF0aWMgdm9pZCByZW1vdmVfdHJlZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJdWludCAqIGJsaywgaW50IGRlcHRoKQoreworCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoKTsKKwl1aW50IG5ld2JsazsKKwl1X2ludDMyX3QgKnJlZiA9ICh1X2ludDMyX3QgKikgYnVmOworCisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXJlYWRfYmxrKGgsICpibGssIGJ1Zik7CisJbmV3YmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKKwlpZiAoZGVwdGggPT0gUVRfVFJFRURFUFRIIC0gMSkgeworCQlmcmVlX2RxZW50cnkoaCwgZHF1b3QsIG5ld2Jsayk7CisJCW5ld2JsayA9IDA7CisJfSBlbHNlIHsKKwkJcmVtb3ZlX3RyZWUoaCwgZHF1b3QsICZuZXdibGssIGRlcHRoICsgMSk7CisJfQorCisJaWYgKCFuZXdibGspIHsKKwkJaW50IGk7CisKKwkJcmVmW2dldF9pbmRleChkcXVvdC0+ZHFfaWQsIGRlcHRoKV0gPSBleHQyZnNfY3B1X3RvX2xlMzIoMCk7CisKKwkJLyogQmxvY2sgZ290IGVtcHR5PyAqLworCQlmb3IgKGkgPSAwOyBpIDwgUVRfQkxLU0laRSAmJiAhYnVmW2ldOyBpKyspOworCisJCS8qIERvbid0IHB1dCB0aGUgcm9vdCBibG9jayBpbnRvIHRoZSBmcmVlIGJsb2NrIGxpc3QgKi8KKwkJaWYgKGkgPT0gUVRfQkxLU0laRSAmJiAqYmxrICE9IFFUX1RSRUVPRkYpIHsKKwkJCXB1dF9mcmVlX2RxYmxrKGgsIGJ1ZiwgKmJsayk7CisJCQkqYmxrID0gMDsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlX2JsayhoLCAqYmxrLCBidWYpOworCQl9CisJfQorCWZyZWVkcWJ1ZihidWYpOworfQorCisvKiBEZWxldGUgZHF1b3QgZnJvbSB0cmVlICovCit2b2lkIHF0cmVlX2RlbGV0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXVpbnQgdG1wID0gUVRfVFJFRU9GRjsKKworCWlmICghZHF1b3QtPmRxX2RxYi51LnYyX21kcWIuZHFiX29mZikJLyogRXZlbiBub3QgYWxsb2NhdGVkPyAqLworCQlyZXR1cm47CisJcmVtb3ZlX3RyZWUoZHF1b3QtPmRxX2gsIGRxdW90LCAmdG1wLCAwKTsKK30KKworLyogRmluZCBlbnRyeSBpbiBibG9jayAqLworc3RhdGljIGV4dDJfbG9mZl90IGZpbmRfYmxvY2tfZHFlbnRyeShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkJCSAgICAgIHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVpbnQgYmxrKQoreworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0gJmgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKCk7CisJaW50IGk7CisJY2hhciAqZGRxdW90ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVhZF9ibGsoaCwgYmxrLCBidWYpOworCWZvciAoaSA9IDA7CisJICAgICBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pICYmICFpbmZvLT5kcWlfb3BzLT5pc19pZChkZHF1b3QsIGRxdW90KTsKKwkgICAgIGkrKykKKwkJZGRxdW90ICs9IGluZm8tPmRxaV9lbnRyeV9zaXplOworCisJaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKQorCQlsb2dfZXJyKCJRdW90YSBmb3IgaWQgJXUgcmVmZXJlbmNlZCBidXQgbm90IHByZXNlbnQuIiwKKwkJCWRxdW90LT5kcV9pZCk7CisJZnJlZWRxYnVmKGJ1Zik7CisJcmV0dXJuIChibGsgPDwgUVRfQkxLU0laRV9CSVRTKSArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKSArCisJCWkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKK30KKworLyogRmluZCBlbnRyeSBmb3IgZ2l2ZW4gaWQgaW4gdGhlIHRyZWUgKi8KK3N0YXRpYyBleHQyX2xvZmZfdCBmaW5kX3RyZWVfZHFlbnRyeShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLAorCQkJCSAgICAgc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCQkgICAgIHVpbnQgYmxrLCBpbnQgZGVwdGgpCit7CisJZHFidWZfdCBidWYgPSBnZXRkcWJ1ZigpOworCWV4dDJfbG9mZl90IHJldCA9IDA7CisJdV9pbnQzMl90ICpyZWYgPSAodV9pbnQzMl90ICopIGJ1ZjsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlYWRfYmxrKGgsIGJsaywgYnVmKTsKKwlyZXQgPSAwOworCWJsayA9IGV4dDJmc19sZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGRxdW90LT5kcV9pZCwgZGVwdGgpXSk7CisJaWYgKCFibGspCS8qIE5vIHJlZmVyZW5jZT8gKi8KKwkJZ290byBvdXRfYnVmOworCWlmIChkZXB0aCA8IFFUX1RSRUVERVBUSCAtIDEpCisJCXJldCA9IGZpbmRfdHJlZV9kcWVudHJ5KGgsIGRxdW90LCBibGssIGRlcHRoICsgMSk7CisJZWxzZQorCQlyZXQgPSBmaW5kX2Jsb2NrX2RxZW50cnkoaCwgZHF1b3QsIGJsayk7CitvdXRfYnVmOgorCWZyZWVkcWJ1ZihidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEZpbmQgZW50cnkgZm9yIGdpdmVuIGlkIGluIHRoZSB0cmVlIC0gd3JhcHBlciBmdW5jdGlvbiAqLworc3RhdGljIGlubGluZSBleHQyX2xvZmZfdCBmaW5kX2RxZW50cnkoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwKKwkJCQkgICAgICAgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlyZXR1cm4gZmluZF90cmVlX2RxZW50cnkoaCwgZHF1b3QsIFFUX1RSRUVPRkYsIDApOworfQorCisvKgorICogIFJlYWQgZHF1b3QgZnJvbSBkaXNrLgorICovCitzdHJ1Y3QgZHF1b3QgKnF0cmVlX3JlYWRfZHF1b3Qoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgcWlkX3QgaWQpCit7CisJc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPSAmaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlOworCWV4dDJfbG9mZl90IG9mZnNldDsKKwlzc2l6ZV90IHJldDsKKwljaGFyICpkZHF1b3Q7CisJc3RydWN0IGRxdW90ICpkcXVvdCA9IGdldF9lbXB0eV9kcXVvdCgpOworCisJaWYgKCFkcXVvdCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGV4dDJmc19nZXRfbWVtKGluZm8tPmRxaV9lbnRyeV9zaXplLCAmZGRxdW90KSkgeworCQlleHQyZnNfZnJlZV9tZW0oJmRxdW90KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHF1b3QtPmRxX2lkID0gaWQ7CisJZHF1b3QtPmRxX2ggPSBoOworCWRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYgPSAwOworCW1lbXNldCgmZHF1b3QtPmRxX2RxYiwgMCwgc2l6ZW9mKHN0cnVjdCB1dGlsX2RxYmxrKSk7CisKKwlvZmZzZXQgPSBmaW5kX2RxZW50cnkoaCwgZHF1b3QpOworCWlmIChvZmZzZXQgPiAwKSB7CisJCWRxdW90LT5kcV9kcWIudS52Ml9tZHFiLmRxYl9vZmYgPSBvZmZzZXQ7CisJCXJldCA9IGgtPmUyZnNfcmVhZCgmaC0+cWhfcWYsIG9mZnNldCwgZGRxdW90LAorCQkJaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCQlpZiAocmV0ICE9IGluZm8tPmRxaV9lbnRyeV9zaXplKSB7CisJCQlpZiAocmV0ID4gMCkKKwkJCQllcnJubyA9IEVJTzsKKwkJCWxvZ19lcnIoIkNhbm5vdCByZWFkIHF1b3RhIHN0cnVjdHVyZSBmb3IgaWQgJXU6ICVzIiwKKwkJCQlkcXVvdC0+ZHFfaWQsIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKwkJaW5mby0+ZHFpX29wcy0+ZGlzazJtZW1fZHFibGsoZHF1b3QsIGRkcXVvdCk7CisJfQorCWV4dDJmc19mcmVlX21lbSgmZGRxdW90KTsKKwlyZXR1cm4gZHF1b3Q7Cit9CisKKy8qCisgKiBTY2FuIGFsbCBkcXVvdHMgaW4gZmlsZSBhbmQgY2FsbCBjYWxsYmFjayBvbiBlYWNoCisgKi8KKyNkZWZpbmUgc2V0X2JpdChibXAsIGluZCkgKChibXApWyhpbmQpID4+IDNdIHw9ICgxIDw8ICgoaW5kKSAmIDcpKSkKKyNkZWZpbmUgZ2V0X2JpdChibXAsIGluZCkgKChibXApWyhpbmQpID4+IDNdICYgKDEgPDwgKChpbmQpICYgNykpKQorCitzdGF0aWMgaW50IHJlcG9ydF9ibG9jayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaywgY2hhciAqYml0bWFwLAorCQkJaW50ICgqcHJvY2Vzc19kcXVvdCkgKHN0cnVjdCBkcXVvdCAqLCB2b2lkICopLAorCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQkmZHF1b3QtPmRxX2gtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZTsKKwlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKCk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGg7CisJY2hhciAqZGRhdGE7CisJaW50IGVudHJpZXMsIGk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KGJpdG1hcCwgYmxrKTsKKwlyZWFkX2JsayhkcXVvdC0+ZHFfaCwgYmxrLCBidWYpOworCWRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJZGRhdGEgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CisJZW50cmllcyA9IGV4dDJmc19sZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pOworCQkJaSsrLCBkZGF0YSArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkKKwkJaWYgKCFxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRhdGEpKSB7CisJCQlkcXVvdC0+ZHFfZHFiLnUudjJfbWRxYi5kcWJfb2ZmID0KKwkJCQkoYmxrIDw8IFFUX0JMS1NJWkVfQklUUykgKworCQkJCXNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKSArCisJCQkJaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOworCQkJaW5mby0+ZHFpX29wcy0+ZGlzazJtZW1fZHFibGsoZHF1b3QsIGRkYXRhKTsKKwkJCWlmIChwcm9jZXNzX2RxdW90KGRxdW90LCBkYXRhKSA8IDApCisJCQkJYnJlYWs7CisJCX0KKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gZW50cmllczsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfcmVmZXJlbmNlKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHVpbnQgYmxrKQoreworCWlmIChibGsgPj0gaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9ibG9ja3MpCisJCWxvZ19lcnIoIklsbGVnYWwgcmVmZXJlbmNlICgldSA+PSAldSkgaW4gJXMgcXVvdGEgZmlsZS4gIgorCQkJIlF1b3RhIGZpbGUgaXMgcHJvYmFibHkgY29ycnVwdGVkLlxuIgorCQkJIlBsZWFzZSBydW4gZTJmc2NrICg4KSB0byBmaXggaXQuIiwKKwkJCWJsaywKKwkJCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfYmxvY2tzLAorCQkJdHlwZTJuYW1lKGgtPnFoX3R5cGUpKTsKK30KKworc3RhdGljIGludCByZXBvcnRfdHJlZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaywgaW50IGRlcHRoLCBjaGFyICpiaXRtYXAsCisJCSAgICAgICBpbnQgKCpwcm9jZXNzX2RxdW90KSAoc3RydWN0IGRxdW90ICosIHZvaWQgKiksCisJCSAgICAgICB2b2lkICpkYXRhKQoreworCWludCBlbnRyaWVzID0gMCwgaTsKKwlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKCk7CisJdV9pbnQzMl90ICpyZWYgPSAodV9pbnQzMl90ICopIGJ1ZjsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCXJlYWRfYmxrKGRxdW90LT5kcV9oLCBibGssIGJ1Zik7CisJaWYgKGRlcHRoID09IFFUX1RSRUVERVBUSCAtIDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IFFUX0JMS1NJWkUgPj4gMjsgaSsrKSB7CisJCQlibGsgPSBleHQyZnNfbGUzMl90b19jcHUocmVmW2ldKTsKKwkJCWNoZWNrX3JlZmVyZW5jZShkcXVvdC0+ZHFfaCwgYmxrKTsKKwkJCWlmIChibGsgJiYgIWdldF9iaXQoYml0bWFwLCBibGspKQorCQkJCWVudHJpZXMgKz0gcmVwb3J0X2Jsb2NrKGRxdW90LCBibGssIGJpdG1hcCwKKwkJCQkJCQlwcm9jZXNzX2RxdW90LCBkYXRhKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBRVF9CTEtTSVpFID4+IDI7IGkrKykgeworCQkJYmxrID0gZXh0MmZzX2xlMzJfdG9fY3B1KHJlZltpXSk7CisJCQlpZiAoYmxrKSB7CisJCQkJY2hlY2tfcmVmZXJlbmNlKGRxdW90LT5kcV9oLCBibGspOworCQkJCWVudHJpZXMgKz0gcmVwb3J0X3RyZWUoZHF1b3QsIGJsaywgZGVwdGggKyAxLAorCQkJCQkJICAgICAgIGJpdG1hcCwgcHJvY2Vzc19kcXVvdCwKKwkJCQkJCSAgICAgICBkYXRhKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlZHFidWYoYnVmKTsKKwlyZXR1cm4gZW50cmllczsKK30KKworc3RhdGljIHVpbnQgZmluZF9zZXRfYml0cyhjaGFyICpibXAsIGludCBibG9ja3MpCit7CisJdWludCBpLCB1c2VkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBibG9ja3M7IGkrKykKKwkJaWYgKGdldF9iaXQoYm1wLCBpKSkKKwkJCXVzZWQrKzsKKwlyZXR1cm4gdXNlZDsKK30KKworaW50IHF0cmVlX3NjYW5fZHF1b3RzKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCSAgICAgIGludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKiwgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwljaGFyICpiaXRtYXA7CisJc3RydWN0IHYyX21lbV9kcWluZm8gKnYyaW5mbyA9ICZoLT5xaF9pbmZvLnUudjJfbWRxaTsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9ICZ2MmluZm8tPmRxaV9xdHJlZTsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90ID0gZ2V0X2VtcHR5X2RxdW90KCk7CisKKwlpZiAoIWRxdW90KQorCQlyZXR1cm4gLTE7CisKKwlkcXVvdC0+ZHFfaCA9IGg7CisJaWYgKGV4dDJmc19nZXRfbWVtemVybygoaW5mby0+ZHFpX2Jsb2NrcyArIDcpID4+IDMsICZiaXRtYXApKSB7CisJCWV4dDJmc19mcmVlX21lbSgmZHF1b3QpOworCQlyZXR1cm4gLTE7CisJfQorCXYyaW5mby0+ZHFpX3VzZWRfZW50cmllcyA9IHJlcG9ydF90cmVlKGRxdW90LCBRVF9UUkVFT0ZGLCAwLCBiaXRtYXAsCisJCQkJCSAgICAgICBwcm9jZXNzX2RxdW90LCBkYXRhKTsKKwl2MmluZm8tPmRxaV9kYXRhX2Jsb2NrcyA9IGZpbmRfc2V0X2JpdHMoYml0bWFwLCBpbmZvLT5kcWlfYmxvY2tzKTsKKwlleHQyZnNfZnJlZV9tZW0oJmJpdG1hcCk7CisJZXh0MmZzX2ZyZWVfbWVtKCZkcXVvdCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWU1NGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogRGVmaW5pdGlvbnMgb2Ygc3RydWN0dXJlcyBmb3IgdmZzdjAgcXVvdGEgZm9ybWF0CisgKi8KKworI2lmbmRlZiBfTElOVVhfUVVPVEFfVFJFRV9ICisjZGVmaW5lIF9MSU5VWF9RVU9UQV9UUkVFX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCit0eXBlZGVmIHVfaW50MzJfdCBxaWRfdDsgICAgICAgIC8qIFR5cGUgaW4gd2hpY2ggd2Ugc3RvcmUgaWRzIGluIG1lbW9yeSAqLworCisjZGVmaW5lIFFUX1RSRUVPRkYJMQkvKiBPZmZzZXQgb2YgdHJlZSBpbiBmaWxlIGluIGJsb2NrcyAqLworI2RlZmluZSBRVF9UUkVFREVQVEgJNAkvKiBEZXB0aCBvZiBxdW90YSB0cmVlICovCisjZGVmaW5lIFFUX0JMS1NJWkVfQklUUwkxMAorI2RlZmluZSBRVF9CTEtTSVpFICgxIDw8IFFUX0JMS1NJWkVfQklUUykJLyogU2l6ZSBvZiBibG9jayB3aXRoIHF1b3RhCisJCQkJCQkgKiBzdHJ1Y3R1cmVzICovCisKKy8qCisgKiAgU3RydWN0dXJlIG9mIGhlYWRlciBvZiBibG9jayB3aXRoIHF1b3RhIHN0cnVjdHVyZXMuIEl0IGlzIHBhZGRlZCB0byAxNiBieXRlcworICogIHNvIHRoZXJlIHdpbGwgYmUgc3BhY2UgZm9yIGV4YWN0bHkgMjEgcXVvdGEtZW50cmllcyBpbiBhIGJsb2NrCisgKi8KK3N0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgeworCXVfaW50MzJfdCBkcWRoX25leHRfZnJlZTsJLyogTnVtYmVyIG9mIG5leHQgYmxvY2sgd2l0aCBmcmVlCisJCQkJCSAqIGVudHJ5ICovCisJdV9pbnQzMl90IGRxZGhfcHJldl9mcmVlOyAvKiBOdW1iZXIgb2YgcHJldmlvdXMgYmxvY2sgd2l0aCBmcmVlCisJCQkJICAgKiBlbnRyeSAqLworCXVfaW50MTZfdCBkcWRoX2VudHJpZXM7IC8qIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2NrICovCisJdV9pbnQxNl90IGRxZGhfcGFkMTsKKwl1X2ludDMyX3QgZHFkaF9wYWQyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBkcXVvdDsKK3N0cnVjdCBxdW90YV9oYW5kbGU7CisKKy8qIE9wZXJhdGlvbnMgKi8KK3N0cnVjdCBxdHJlZV9mbXRfb3BlcmF0aW9ucyB7CisJLyogQ29udmVydCBnaXZlbiBlbnRyeSBmcm9tIGluIG1lbW9yeSBmb3JtYXQgdG8gZGlzayBvbmUgKi8KKwl2b2lkICgqbWVtMmRpc2tfZHFibGspKHZvaWQgKmRpc2ssIHN0cnVjdCBkcXVvdCAqZHF1b3QpOworCS8qIENvbnZlcnQgZ2l2ZW4gZW50cnkgZnJvbSBkaXNrIGZvcm1hdCB0byBpbiBtZW1vcnkgb25lICovCisJdm9pZCAoKmRpc2sybWVtX2RxYmxrKShzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkaXNrKTsKKwkvKiBJcyB0aGlzIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gaWQ/ICovCisJaW50ICgqaXNfaWQpKHZvaWQgKmRpc2ssIHN0cnVjdCBkcXVvdCAqZHF1b3QpOworfTsKKworLyogSW5tZW1vcnkgY29weSBvZiB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyB7CisJdW5zaWduZWQgaW50IGRxaV9ibG9ja3M7CS8qICMgb2YgYmxvY2tzIGluIHF1b3RhIGZpbGUgKi8KKwl1bnNpZ25lZCBpbnQgZHFpX2ZyZWVfYmxrOwkvKiBGaXJzdCBibG9jayBpbiBsaXN0IG9mIGZyZWUgYmxvY2tzICovCisJdW5zaWduZWQgaW50IGRxaV9mcmVlX2VudHJ5OwkvKiBGaXJzdCBibG9jayB3aXRoIGZyZWUgZW50cnkgKi8KKwl1bnNpZ25lZCBpbnQgZHFpX2VudHJ5X3NpemU7CS8qIFNpemUgb2YgcXVvdGEgZW50cnkgaW4gcXVvdGEgZmlsZSAqLworCXN0cnVjdCBxdHJlZV9mbXRfb3BlcmF0aW9ucyAqZHFpX29wczsJLyogT3BlcmF0aW9ucyBmb3IgZW50cnkKKwkJCQkJCSAqIG1hbmlwdWxhdGlvbiAqLworfTsKKwordm9pZCBxdHJlZV93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK3N0cnVjdCBkcXVvdCAqcXRyZWVfcmVhZF9kcXVvdChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBxaWRfdCBpZCk7Cit2b2lkIHF0cmVlX2RlbGV0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK2ludCBxdHJlZV9lbnRyeV91bnVzZWQoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmRpc2spOworaW50IHF0cmVlX3NjYW5fZHF1b3RzKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCWludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CisKK2ludCBxdHJlZV9kcXN0cl9pbl9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8pOworCisjZW5kaWYgLyogX0xJTlVYX1FVT1RBSU9fVFJFRV9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW9fdjIuYyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpb192Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3F1b3RhL3F1b3RhaW9fdjIuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIG5ldyBxdW90YWZpbGUgZm9ybWF0CisgKgorICogSmFuIEthcmEgPGphY2tAc3VzZS5jej4gLSBzcG9uc29yZWQgYnkgU3VTRSBDUgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJxdW90YWlvX3YyLmgiCisjaW5jbHVkZSAiZHFibGtfdjIuaCIKKyNpbmNsdWRlICJxdW90YWlvLmgiCisjaW5jbHVkZSAicXVvdGFpb190cmVlLmgiCisKK3N0YXRpYyBpbnQgdjJfY2hlY2tfZmlsZShzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBpbnQgdHlwZSwgaW50IGZtdCk7CitzdGF0aWMgaW50IHYyX2luaXRfaW8oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCk7CitzdGF0aWMgaW50IHYyX25ld19pbyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKTsKK3N0YXRpYyBpbnQgdjJfd3JpdGVfaW5mbyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKTsKK3N0YXRpYyBzdHJ1Y3QgZHF1b3QgKnYyX3JlYWRfZHF1b3Qoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgcWlkX3QgaWQpOworc3RhdGljIGludCB2Ml9jb21taXRfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CitzdGF0aWMgaW50IHYyX3NjYW5fZHF1b3RzKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsCisJCQkgIGludCAoKnByb2Nlc3NfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKmRxdW90LAorCQkJCQkJdm9pZCAqZGF0YSksCisJCQkgIHZvaWQgKmRhdGEpOworc3RhdGljIGludCB2Ml9yZXBvcnQoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgaW50IHZlcmJvc2UpOworCitzdHJ1Y3QgcXVvdGFmaWxlX29wcyBxdW90YWZpbGVfb3BzXzIgPSB7CisJLmNoZWNrX2ZpbGUJPSB2Ml9jaGVja19maWxlLAorCS5pbml0X2lvIAk9IHYyX2luaXRfaW8sCisJLm5ld19pbyAJPSB2Ml9uZXdfaW8sCisJLndyaXRlX2luZm8JPSB2Ml93cml0ZV9pbmZvLAorCS5yZWFkX2RxdW90CT0gdjJfcmVhZF9kcXVvdCwKKwkuY29tbWl0X2RxdW90CT0gdjJfY29tbWl0X2RxdW90LAorCS5zY2FuX2RxdW90cwk9IHYyX3NjYW5fZHF1b3RzLAorCS5yZXBvcnQJCT0gdjJfcmVwb3J0LAorfTsKKworLyoKKyAqIENvcHkgZHF1b3QgZnJvbSBkaXNrIHRvIG1lbW9yeQorICovCitzdGF0aWMgdm9pZCB2MnIxX2Rpc2sybWVtZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApCit7CisJc3RydWN0IHV0aWxfZHFibGsgKm0gPSAmZHF1b3QtPmRxX2RxYjsKKwlzdHJ1Y3QgdjJyMV9kaXNrX2RxYmxrICpkID0gZHAsIGVtcHR5OworCisJZHF1b3QtPmRxX2lkID0gZXh0MmZzX2xlMzJfdG9fY3B1KGQtPmRxYl9pZCk7CisJbS0+ZHFiX2loYXJkbGltaXQgPSBleHQyZnNfbGU2NF90b19jcHUoZC0+ZHFiX2loYXJkbGltaXQpOworCW0tPmRxYl9pc29mdGxpbWl0ID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9pc29mdGxpbWl0KTsKKwltLT5kcWJfYmhhcmRsaW1pdCA9IGV4dDJmc19sZTY0X3RvX2NwdShkLT5kcWJfYmhhcmRsaW1pdCk7CisJbS0+ZHFiX2Jzb2Z0bGltaXQgPSBleHQyZnNfbGU2NF90b19jcHUoZC0+ZHFiX2Jzb2Z0bGltaXQpOworCW0tPmRxYl9jdXJpbm9kZXMgPSBleHQyZnNfbGU2NF90b19jcHUoZC0+ZHFiX2N1cmlub2Rlcyk7CisJbS0+ZHFiX2N1cnNwYWNlID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9jdXJzcGFjZSk7CisJbS0+ZHFiX2l0aW1lID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9pdGltZSk7CisJbS0+ZHFiX2J0aW1lID0gZXh0MmZzX2xlNjRfdG9fY3B1KGQtPmRxYl9idGltZSk7CisKKwltZW1zZXQoJmVtcHR5LCAwLCBzaXplb2Yoc3RydWN0IHYycjFfZGlza19kcWJsaykpOworCWVtcHR5LmRxYl9pdGltZSA9IGV4dDJmc19jcHVfdG9fbGU2NCgxKTsKKwlpZiAoIW1lbWNtcCgmZW1wdHksIGRwLCBzaXplb2Yoc3RydWN0IHYycjFfZGlza19kcWJsaykpKQorCQltLT5kcWJfaXRpbWUgPSAwOworfQorCisvKgorICogQ29weSBkcXVvdCBmcm9tIG1lbW9yeSB0byBkaXNrCisgKi8KK3N0YXRpYyB2b2lkIHYycjFfbWVtMmRpc2tkcWJsayh2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzdHJ1Y3QgdXRpbF9kcWJsayAqbSA9ICZkcXVvdC0+ZHFfZHFiOworCXN0cnVjdCB2MnIxX2Rpc2tfZHFibGsgKmQgPSBkcDsKKworCWQtPmRxYl9paGFyZGxpbWl0ID0gZXh0MmZzX2NwdV90b19sZTY0KG0tPmRxYl9paGFyZGxpbWl0KTsKKwlkLT5kcWJfaXNvZnRsaW1pdCA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfaXNvZnRsaW1pdCk7CisJZC0+ZHFiX2JoYXJkbGltaXQgPSBleHQyZnNfY3B1X3RvX2xlNjQobS0+ZHFiX2JoYXJkbGltaXQpOworCWQtPmRxYl9ic29mdGxpbWl0ID0gZXh0MmZzX2NwdV90b19sZTY0KG0tPmRxYl9ic29mdGxpbWl0KTsKKwlkLT5kcWJfY3VyaW5vZGVzID0gZXh0MmZzX2NwdV90b19sZTY0KG0tPmRxYl9jdXJpbm9kZXMpOworCWQtPmRxYl9jdXJzcGFjZSA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfY3Vyc3BhY2UpOworCWQtPmRxYl9pdGltZSA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfaXRpbWUpOworCWQtPmRxYl9idGltZSA9IGV4dDJmc19jcHVfdG9fbGU2NChtLT5kcWJfYnRpbWUpOworCWQtPmRxYl9pZCA9IGV4dDJmc19jcHVfdG9fbGUzMihkcXVvdC0+ZHFfaWQpOworCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoJmRxdW90LT5kcV9oLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUsIGRwKSkKKwkJZC0+ZHFiX2l0aW1lID0gZXh0MmZzX2NwdV90b19sZTY0KDEpOworfQorCitzdGF0aWMgaW50IHYycjFfaXNfaWQodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3RydWN0IHYycjFfZGlza19kcWJsayAqZCA9IGRwOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvID0KKwkJCSZkcXVvdC0+ZHFfaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlOworCisJaWYgKHF0cmVlX2VudHJ5X3VudXNlZChpbmZvLCBkcCkpCisJCXJldHVybiAwOworCXJldHVybiBleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFiX2lkKSA9PSBkcXVvdC0+ZHFfaWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcXRyZWVfZm10X29wZXJhdGlvbnMgdjJyMV9mbXRfb3BzID0geworCS5tZW0yZGlza19kcWJsayA9IHYycjFfbWVtMmRpc2tkcWJsaywKKwkuZGlzazJtZW1fZHFibGsgPSB2MnIxX2Rpc2sybWVtZHFibGssCisJLmlzX2lkID0gdjJyMV9pc19pZCwKK307CisKKy8qCisgKiBDb3B5IGRxaW5mbyBmcm9tIGRpc2sgdG8gbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2Ml9kaXNrMm1lbWRxaW5mbyhzdHJ1Y3QgdXRpbF9kcWluZm8gKm0sCisJCQkJICAgICBzdHJ1Y3QgdjJfZGlza19kcWluZm8gKmQpCit7CisJbS0+ZHFpX2JncmFjZSA9IGV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWlfYmdyYWNlKTsKKwltLT5kcWlfaWdyYWNlID0gZXh0MmZzX2xlMzJfdG9fY3B1KGQtPmRxaV9pZ3JhY2UpOworCW0tPnUudjJfbWRxaS5kcWlfZmxhZ3MgPSBleHQyZnNfbGUzMl90b19jcHUoZC0+ZHFpX2ZsYWdzKSAmIFYyX0RRRl9NQVNLOworCW0tPnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2Jsb2NrcyA9IGV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWlfYmxvY2tzKTsKKwltLT51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9mcmVlX2JsayA9CisJCWV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWlfZnJlZV9ibGspOworCW0tPnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2ZyZWVfZW50cnkgPQorCQkJCWV4dDJmc19sZTMyX3RvX2NwdShkLT5kcWlfZnJlZV9lbnRyeSk7Cit9CisKKy8qCisgKiBDb3B5IGRxaW5mbyBmcm9tIG1lbW9yeSB0byBkaXNrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2Ml9tZW0yZGlza2RxaW5mbyhzdHJ1Y3QgdjJfZGlza19kcWluZm8gKmQsCisJCQkJICAgICBzdHJ1Y3QgdXRpbF9kcWluZm8gKm0pCit7CisJZC0+ZHFpX2JncmFjZSA9IGV4dDJmc19jcHVfdG9fbGUzMihtLT5kcWlfYmdyYWNlKTsKKwlkLT5kcWlfaWdyYWNlID0gZXh0MmZzX2NwdV90b19sZTMyKG0tPmRxaV9pZ3JhY2UpOworCWQtPmRxaV9mbGFncyA9IGV4dDJmc19jcHVfdG9fbGUzMihtLT51LnYyX21kcWkuZHFpX2ZsYWdzICYgVjJfRFFGX01BU0spOworCWQtPmRxaV9ibG9ja3MgPSBleHQyZnNfY3B1X3RvX2xlMzIobS0+dS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfYmxvY2tzKTsKKwlkLT5kcWlfZnJlZV9ibGsgPQorCQlleHQyZnNfY3B1X3RvX2xlMzIobS0+dS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfZnJlZV9ibGspOworCWQtPmRxaV9mcmVlX2VudHJ5ID0KKwkJZXh0MmZzX2NwdV90b19sZTMyKG0tPnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2ZyZWVfZW50cnkpOworfQorCitzdGF0aWMgaW50IHYyX3JlYWRfaGVhZGVyKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgsIHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyICpkcWgpCit7CisJaWYgKGgtPmUyZnNfcmVhZCgmaC0+cWhfcWYsIDAsIGRxaCwgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSkgIT0KKwkJCXNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIGdpdmVuIHF1b3RhIGZpbGUgaXMgaW4gb3VyIGZvcm1hdAorICovCitzdGF0aWMgaW50IHYyX2NoZWNrX2ZpbGUoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgaW50IHR5cGUsIGludCBmbXQpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoOworCWludCBmaWxlX21hZ2ljc1tdID0gSU5JVFFNQUdJQ1M7CisKKwlpZiAoZm10ICE9IFFGTVRfVkZTX1YxKQorCQlyZXR1cm4gMDsKKworCWlmICghdjJfcmVhZF9oZWFkZXIoaCwgJmRxaCkpCisJCXJldHVybiAwOworCisJaWYgKGV4dDJmc19sZTMyX3RvX2NwdShkcWguZHFoX21hZ2ljKSAhPSBmaWxlX21hZ2ljc1t0eXBlXSkgeworCQlpZiAoZXh0MmZzX2JlMzJfdG9fY3B1KGRxaC5kcWhfbWFnaWMpID09IGZpbGVfbWFnaWNzW3R5cGVdKQorCQkJbG9nX2VycigiWW91ciBxdW90YSBmaWxlIGlzIHN0b3JlZCBpbiB3cm9uZyBlbmRpYW5pdHkiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChWMl9WRVJTSU9OICE9IGV4dDJmc19sZTMyX3RvX2NwdShkcWguZHFoX3ZlcnNpb24pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIE9wZW4gcXVvdGFmaWxlCisgKi8KK3N0YXRpYyBpbnQgdjJfaW5pdF9pbyhzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoKQoreworCXN0cnVjdCB2Ml9kaXNrX2RxaW5mbyBkZHFpbmZvOworCisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9lbnRyeV9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCB2MnIxX2Rpc2tfZHFibGspOworCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfb3BzID0gJnYycjFfZm10X29wczsKKworCS8qIFJlYWQgaW5mb3JtYXRpb24gYWJvdXQgcXVvdGFmaWxlICovCisJaWYgKGgtPmUyZnNfcmVhZCgmaC0+cWhfcWYsIFYyX0RRSU5GT09GRiwgJmRkcWluZm8sCisJCQkgc2l6ZW9mKGRkcWluZm8pKSAhPSBzaXplb2YoZGRxaW5mbykpCisJCXJldHVybiAtMTsKKwl2Ml9kaXNrMm1lbWRxaW5mbygmaC0+cWhfaW5mbywgJmRkcWluZm8pOworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZSBuZXcgcXVvdGFmaWxlCisgKi8KK3N0YXRpYyBpbnQgdjJfbmV3X2lvKHN0cnVjdCBxdW90YV9oYW5kbGUgKmgpCit7CisJaW50IGZpbGVfbWFnaWNzW10gPSBJTklUUU1BR0lDUzsKKwlzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciBkZHFoZWFkZXI7CisJc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRkcWluZm87CisKKwlpZiAoaC0+cWhfZm10ICE9IFFGTVRfVkZTX1YxKQorCQlyZXR1cm4gLTE7CisKKwkvKiBXcml0ZSBiYXNpYyBxdW90YSBoZWFkZXIgKi8KKwlkZHFoZWFkZXIuZHFoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTMyKGZpbGVfbWFnaWNzW2gtPnFoX3R5cGVdKTsKKwlkZHFoZWFkZXIuZHFoX3ZlcnNpb24gPSBleHQyZnNfY3B1X3RvX2xlMzIoVjJfVkVSU0lPTik7CisJaWYgKGgtPmUyZnNfd3JpdGUoJmgtPnFoX3FmLCAwLCAmZGRxaGVhZGVyLCBzaXplb2YoZGRxaGVhZGVyKSkgIT0KKwkJCXNpemVvZihkZHFoZWFkZXIpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBXcml0ZSBpbmZvcm1hdGlvbiBhYm91dCBxdW90YWZpbGUgKi8KKwloLT5xaF9pbmZvLmRxaV9iZ3JhY2UgPSBNQVhfRFFfVElNRTsKKwloLT5xaF9pbmZvLmRxaV9pZ3JhY2UgPSBNQVhfSVFfVElNRTsKKwloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfZmxhZ3MgPSAwOworCWgtPnFoX2luZm8udS52Ml9tZHFpLmRxaV9xdHJlZS5kcWlfYmxvY2tzID0gUVRfVFJFRU9GRiArIDE7CisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9mcmVlX2JsayA9IDA7CisJaC0+cWhfaW5mby51LnYyX21kcWkuZHFpX3F0cmVlLmRxaV9mcmVlX2VudHJ5ID0gMDsKKwloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX2VudHJ5X3NpemUgPQorCQkJCXNpemVvZihzdHJ1Y3QgdjJyMV9kaXNrX2RxYmxrKTsKKwloLT5xaF9pbmZvLnUudjJfbWRxaS5kcWlfcXRyZWUuZHFpX29wcyA9ICZ2MnIxX2ZtdF9vcHM7CisJdjJfbWVtMmRpc2tkcWluZm8oJmRkcWluZm8sICZoLT5xaF9pbmZvKTsKKwlpZiAoaC0+ZTJmc193cml0ZSgmaC0+cWhfcWYsIFYyX0RRSU5GT09GRiwgJmRkcWluZm8sCisJCQkgIHNpemVvZihkZHFpbmZvKSkgIT0KKwkgICAgc2l6ZW9mKGRkcWluZm8pKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIGluZm9ybWF0aW9uIChncmFjZSB0aW1lcyB0byBmaWxlKQorICovCitzdGF0aWMgaW50IHYyX3dyaXRlX2luZm8oc3RydWN0IHF1b3RhX2hhbmRsZSAqaCkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGRxaW5mbzsKKworCXYyX21lbTJkaXNrZHFpbmZvKCZkZHFpbmZvLCAmaC0+cWhfaW5mbyk7CisJaWYgKGgtPmUyZnNfd3JpdGUoJmgtPnFoX3FmLCBWMl9EUUlORk9PRkYsICZkZHFpbmZvLCBzaXplb2YoZGRxaW5mbykpICE9CisJCQlzaXplb2YoZGRxaW5mbykpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBkcXVvdCBmcm9tIGRpc2sKKyAqLworc3RhdGljIHN0cnVjdCBkcXVvdCAqdjJfcmVhZF9kcXVvdChzdHJ1Y3QgcXVvdGFfaGFuZGxlICpoLCBxaWRfdCBpZCkKK3sKKwlyZXR1cm4gcXRyZWVfcmVhZF9kcXVvdChoLCBpZCk7Cit9CisKKy8qCisgKiBDb21taXQgY2hhbmdlcyBvZiBkcXVvdCB0byBkaXNrIC0gaXQgbWlnaHQgYWxzbyBtZWFuIGRlbGV0aW5nIGl0IHdoZW4gcXVvdGEKKyAqIGJlY2FtZSBmYWtlIG9uZSBhbmQgdXNlciBoYXMgbm8gYmxvY2tzLgorICogVXNlciBjYW4gcHJvY2VzcyB1c2UgJ2Vycm5vJyB0byBkZXRlY3QgZXJyc3RyLgorICovCitzdGF0aWMgaW50IHYyX2NvbW1pdF9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXN0cnVjdCB1dGlsX2RxYmxrICpiID0gJmRxdW90LT5kcV9kcWI7CisKKwlpZiAoIWItPmRxYl9jdXJzcGFjZSAmJiAhYi0+ZHFiX2N1cmlub2RlcyAmJiAhYi0+ZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgIWItPmRxYl9pc29mdGxpbWl0ICYmICFiLT5kcWJfYmhhcmRsaW1pdCAmJiAhYi0+ZHFiX2loYXJkbGltaXQpCisJCXF0cmVlX2RlbGV0ZV9kcXVvdChkcXVvdCk7CisJZWxzZQorCQlxdHJlZV93cml0ZV9kcXVvdChkcXVvdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdjJfc2Nhbl9kcXVvdHMoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwKKwkJCSAgaW50ICgqcHJvY2Vzc19kcXVvdCkgKHN0cnVjdCBkcXVvdCAqLCB2b2lkICopLAorCQkJICB2b2lkICpkYXRhKQoreworCXJldHVybiBxdHJlZV9zY2FuX2RxdW90cyhoLCBwcm9jZXNzX2RxdW90LCBkYXRhKTsKK30KKworLyogUmVwb3J0IGluZm9ybWF0aW9uIGFib3V0IHF1b3RhZmlsZS4KKyAqIFRPRE86IE5vdCB1c2VkIHJpZ2h0IG5vdywgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0aGlzIHdoZW4gd2UgYWRkCisgKiBzdXBwb3J0IHRvIGRlYnVnZnMgdG8gcmVhZCBxdW90YSBmaWxlcy4KKyAqLworc3RhdGljIGludCB2Ml9yZXBvcnQoc3RydWN0IHF1b3RhX2hhbmRsZSAqaCwgaW50IHZlcmJvc2UpCit7CisJbG9nX2VycigiTm90IEltcGxlbWVudGVkLiIpOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpb192Mi5oIGIvZTJmc3Byb2dzL2xpYi9xdW90YS9xdW90YWlvX3YyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiNDM2MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvcXVvdGEvcXVvdGFpb192Mi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKgorICoJSGVhZGVyIGZpbGUgZm9yIGRpc2sgZm9ybWF0IG9mIG5ldyBxdW90YWZpbGUgZm9ybWF0CisgKgorICovCisKKyNpZm5kZWYgR1VBUkRfUVVPVEFJT19WMl9ICisjZGVmaW5lIEdVQVJEX1FVT1RBSU9fVjJfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAicXVvdGFpby5oIgorCisvKiBPZmZzZXQgb2YgaW5mbyBoZWFkZXIgaW4gZmlsZSAqLworI2RlZmluZSBWMl9EUUlORk9PRkYJCXNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikKKy8qIFN1cHBvcnRlZCB2ZXJzaW9uIG9mIHF1b3RhLXRyZWUgZm9ybWF0ICovCisjZGVmaW5lIFYyX1ZFUlNJT04gMQorCitzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciB7CisJdV9pbnQzMl90IGRxaF9tYWdpYzsJLyogTWFnaWMgbnVtYmVyIGlkZW50aWZ5aW5nIGZpbGUgKi8KKwl1X2ludDMyX3QgZHFoX3ZlcnNpb247CS8qIEZpbGUgdmVyc2lvbiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEZsYWdzIGZvciB2ZXJzaW9uIHNwZWNpZmljIGZpbGVzICovCisjZGVmaW5lIFYyX0RRRl9NQVNLICAweDAwMDAJLyogTWFzayBmb3IgYWxsIHZhbGlkIG9uZGlzayBmbGFncyAqLworCisvKiBIZWFkZXIgd2l0aCB0eXBlIGFuZCB2ZXJzaW9uIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgdjJfZGlza19kcWluZm8geworCXVfaW50MzJfdCBkcWlfYmdyYWNlOwkvKiBUaW1lIGJlZm9yZSBibG9jayBzb2Z0IGxpbWl0IGJlY29tZXMKKwkJCQkgKiBoYXJkIGxpbWl0ICovCisJdV9pbnQzMl90IGRxaV9pZ3JhY2U7CS8qIFRpbWUgYmVmb3JlIGlub2RlIHNvZnQgbGltaXQgYmVjb21lcworCQkJCSAqIGhhcmQgbGltaXQgKi8KKwl1X2ludDMyX3QgZHFpX2ZsYWdzOwkvKiBGbGFncyBmb3IgcXVvdGFmaWxlIChEUUZfKikgKi8KKwl1X2ludDMyX3QgZHFpX2Jsb2NrczsJLyogTnVtYmVyIG9mIGJsb2NrcyBpbiBmaWxlICovCisJdV9pbnQzMl90IGRxaV9mcmVlX2JsazsJLyogTnVtYmVyIG9mIGZpcnN0IGZyZWUgYmxvY2sgaW4gdGhlIGxpc3QgKi8KKwl1X2ludDMyX3QgZHFpX2ZyZWVfZW50cnk7CS8qIE51bWJlciBvZiBibG9jayB3aXRoIGF0IGxlYXN0IG9uZQorCQkJCQkgKiBmcmVlIGVudHJ5ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHYycjFfZGlza19kcWJsayB7CisJdV9pbnQzMl90IGRxYl9pZDsJLyogaWQgdGhpcyBxdW90YSBhcHBsaWVzIHRvICovCisJdV9pbnQzMl90IGRxYl9wYWQ7CisJdV9pbnQ2NF90IGRxYl9paGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiBhbGxvY2F0ZWQgaW5vZGVzICovCisJdV9pbnQ2NF90IGRxYl9pc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgaW5vZGUgbGltaXQgKi8KKwl1X2ludDY0X3QgZHFiX2N1cmlub2RlczsJLyogY3VycmVudCAjIGFsbG9jYXRlZCBpbm9kZXMgKi8KKwl1X2ludDY0X3QgZHFiX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgc3BhY2UKKwkJCQkJICogKGluIFFVT1RBQkxPQ0tfU0laRSkgKi8KKwl1X2ludDY0X3QgZHFiX2Jzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiBkaXNrIHNwYWNlCisJCQkJCSAqIChpbiBRVU9UQUJMT0NLX1NJWkUpICovCisJdV9pbnQ2NF90IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCBzcGFjZSBvY2N1cGllZCAoaW4gYnl0ZXMpICovCisJdV9pbnQ2NF90IGRxYl9idGltZTsJLyogdGltZSBsaW1pdCBmb3IgZXhjZXNzaXZlIGRpc2sgdXNlICovCisJdV9pbnQ2NF90IGRxYl9pdGltZTsJLyogdGltZSBsaW1pdCBmb3IgZXhjZXNzaXZlIGlub2RlIHVzZSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9saWIvc3MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyM2IzOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwyMzMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIGxpYi9zcworIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IGxpYi9zcworSU5TVEFMTCA9IEBJTlNUQUxMQAorRExPUEVOX0xJQiA9IEBETE9QRU5fTElCQAorCitATUNPTkZJR0AKKworTElCUkFSWT0gbGlic3MKK0xJQkRJUj0gc3MKKworRUxGX1ZFUlNJT04gPSAyLjAKK0VMRl9TT19WRVJTSU9OID0gMgorRUxGX0lNQUdFID0gbGlic3MKK0VMRl9NWURJUiA9IHNzCitFTEZfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorRUxGX09USEVSX0xJQlMgPSAtbGNvbV9lcnIgJChETE9QRU5fTElCKQorCitCU0RMSUJfVkVSU0lPTiA9IDEuMAorQlNETElCX0lNQUdFID0gbGlic3MKK0JTRExJQl9NWURJUiA9IHNzCitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitUQUdTPWV0YWdzCitDT01QSUxFX0VUPS4uL2V0L2NvbXBpbGVfZXQgLS1idWlsZC10cmVlCitNS19DTURTPV9TU19ESVJfT1ZFUlJJREU9LiAuL21rX2NtZHMKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8CisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKK0BDSEVDS0VSX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jaGVja2VyIC1nIC1vIGNoZWNrZXIvJCoubyAtYyAkPAorQEVMRl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtRFNIQVJFRF9FTEZfTElCIC1mUElDIC1vIGVsZnNoYXJlZC8kKi5vIC1jICQ8CitAQlNETElCX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoQlNETElCX1BJQ19GTEFHKSAtbyBwaWMvJCoubyAtYyAkPAorCisjIGZvciB0aGUgbGlicmFyeQorCisjIHdpdGggc3NfZXJyLm8gZmlyc3QsIHNzX2Vyci5oIHNob3VsZCBnZXQgcmVidWlsdCBmaXJzdCB0b28uICBzaG91bGQgbm90CisjIGJlIHJlbHlpbmcgb24gdGhpcywgdGhvdWdoLgorT0JKUz0Jc3NfZXJyLm8gXAorCXN0ZF9ycXMubyBcCisJaW52b2NhdGlvbi5vIGhlbHAubyBcCisJZXhlY3V0ZV9jbWQubyBsaXN0ZW4ubyBwYXJzZS5vIGVycm9yLm8gcHJvbXB0Lm8gXAorCXJlcXVlc3RfdGJsLm8gbGlzdF9ycXMubyBwYWdlci5vIHJlcXVlc3RzLm8gXAorCWRhdGEubyBnZXRfcmVhZGxpbmUubworCitTUkNTPQkkKHNyY2RpcikvaW52b2NhdGlvbi5jICQoc3JjZGlyKS9oZWxwLmMgXAorCSQoc3JjZGlyKS9leGVjdXRlX2NtZC5jICQoc3JjZGlyKS9saXN0ZW4uYyAkKHNyY2RpcikvcGFyc2UuYyBcCisJJChzcmNkaXIpL2Vycm9yLmMgJChzcmNkaXIpL3Byb21wdC5jICQoc3JjZGlyKS9yZXF1ZXN0X3RibC5jIFwKKwkkKHNyY2RpcikvbGlzdF9ycXMuYyAkKHNyY2RpcikvcGFnZXIuYyAkKHNyY2RpcikvcmVxdWVzdHMuYyBcCisJJChzcmNkaXIpL2RhdGEuYyAkKHNyY2RpcikvZ2V0X3JlYWRsaW5lLmMKKworYWxsOjogbWtfY21kcworCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACitATUFLRUZJTEVfQ0hFQ0tFUkAKKworQ09ERT0gJChTUkNTKSAkKE1LQ01EU0ZJTEVTKQorCitNS0NNRFNPQkpTPQlta19jbWRzLm8gdXRpbHMubyBvcHRpb25zLm8gY3QudGFiLm8gY21kX3RibC5sZXgubworCitNS0NNRFNGSUxFUz0JbWtfY21kcy5jIHV0aWxzLmMgb3B0aW9ucy5jIGN0LnkgY21kX3RibC5sZXgubAorCitNS0NNRFNDU1JDUz0JbWtfY21kcy5jIHV0aWxzLmMgb3B0aW9ucy5jIGN0LnRhYi5jIGNtZF90YmwubGV4LmMKKworCitIRklMRVM9CXNzLmggc3NfaW50ZXJuYWwuaAorU0hBUkVfRklMRVM9IGN0X2MuYXdrIGN0X2Muc2VkCisKK0lOU1RBTExfSEZJTEVTPQlzcy5oIAorCisjIGZvciAndGFncycgYW5kIGRlcGVuZGVuY2llcworCitDRklMRVM9CSQoU1JDUykgJChNS0NNRFNDU1JDUykgdGVzdF9zcy5jCisKKyMgZm9yIGJ1aWxkaW5nIGFyY2hpdmVzCisKK0ZJTEVTPQkkKFNSQ1MpICQoTUtDTURTRklMRVMpICQoSEZJTEVTKSBcCisJc3NfZXJyLmV0IHN0ZF9ycXMuY3QgTWFrZWZpbGUgXAorCXRlc3Rfc3MuYyBzcyAKKworYWxsOjoJbGlic3MuYSBzcy5wYyAjIGxpYnNzX3AuYSBsaW50CisKK3N0ZF9ycXMuYzogc3RkX3Jxcy5jdCBta19jbWRzCisJJChFKSAiCU1LX0NNRFMgJEAiCisJJChRKSBESVI9JChzcmNkaXIpICQoTUtfQ01EUykgJChzcmNkaXIpL3N0ZF9ycXMuY3QKKworc3RkX3Jxcy5vOiBzc19lcnIuaAorCit0ZXN0X2NtZC5jOiB0ZXN0X2NtZC5jdCBta19jbWRzCisJJChFKSAiCU1LX0NNRFMgJEAiCisJJChRKSBESVI9JChzcmNkaXIpICQoTUtfQ01EUykgJChzcmNkaXIpL3Rlc3RfY21kLmN0CisKK3NzX2Vyci5jIHNzX2Vyci5oOiBzc19lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBzc19lcnIuZXQiCisJJChRKSAkKENPTVBJTEVfRVQpICQoc3JjZGlyKS9zc19lcnIuZXQKKworY3QudGFiLmMgY3QudGFiLmg6IGN0LnkKKwkkKFJNKSAtZiBjdC50YWIuKiB5LioKKwkkKFlBQ0MpIC1kICQoc3JjZGlyKS9jdC55CisJJChNVikgLWYgeS50YWIuYyBjdC50YWIuYworCSQoTVYpIC1mIHkudGFiLmggY3QudGFiLmgKKworI2xpYnNzLm86CSQoT0JKUykKKyMJJChMRCkgLXIgLXMgLW8gJEAgJChPQkpTKQorIwkkKENITU9EKSAteCAkQAorCitta19jbWRzOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbWtfY21kcy5zaC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURSkgJChzcmNkaXIpL21rX2NtZHMuc2guaW4gbWtfY21kcworCSQoUSkgJChDSE1PRCkgK3ggbWtfY21kcworCitzcy5wYzogJChzcmNkaXIpL3NzLnBjLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz1saWIvc3Mvc3MucGMgLi9jb25maWcuc3RhdHVzCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS9zcyAkKGRhdGFkaXIpL3NzICQoYmluZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQobGliZGlyKSBcCisJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL3NzICQoREVTVERJUikkKGRhdGFkaXIpL3NzIFwKKwkJJChERVNURElSKSQoYmluZGlyKSAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZworCitpbnN0YWxsOjogbGlic3MuYSAkKElOU1RBTExfSEZJTEVTKSBpbnN0YWxsZGlycyBzc19lcnIuaCBta19jbWRzIHNzLnBjCisJJChFKSAiCUlOU1RBTExfREFUQSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnNzLmEiCisJJChRKSAkKElOU1RBTExfREFUQSkgbGlic3MuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnNzLmEKKwktJChRKSAkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJzcy5hCisJJChRKSAkKENITU9EKSAkKExJQk1PREUpICQoREVTVERJUikkKGxpYmRpcikvbGlic3MuYQorCSQoUSkgJChSTSkgLWYgJChERVNURElSKSQoaW5jbHVkZWRpcikvc3MvKgorCSQoUSkgZm9yIGkgaW4gJChJTlNUQUxMX0hGSUxFUyk7IGRvIFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9zcy8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRpICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3NzLyQkaTsgXAorCWRvbmUKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQoaW5jbHVkZWRpcikvc3Mvc3NfZXJyLmgiCisJJChRKSAkKElOU1RBTExfREFUQSkgc3NfZXJyLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvc3Mvc3NfZXJyLmgKKwkkKFEpIGZvciBpIGluICQoU0hBUkVfRklMRVMpOyBkbyBcCisJCWVjaG8gIglJTlNUQUxMX0RBVEEgJChERVNURElSKSQoZGF0YWRpcikvc3MvJCRpIjsgXAorCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKERFU1RESVIpJChkYXRhZGlyKS9zcy8kJGk7IFwKKwlkb25lCisJJChFKSAiCUlOU1RBTEwgJChiaW5kaXIpL21rX2NtZHMiCisJJChRKSAkKElOU1RBTEwpIG1rX2NtZHMgJChERVNURElSKSQoYmluZGlyKS9ta19jbWRzCisJJChFKSAiCUlOU1RBTExfREFUQSAkKG1hbjFkaXIpL21rX2NtZHMuMSIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbWtfY21kcy4xICQoREVTVERJUikkKG1hbjFkaXIpL21rX2NtZHMuMQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChsaWJkaXIpL3BrZ2NvbmZpZy9zcy5wYyIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSBzcy5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy9zcy5wYworCit1bmluc3RhbGw6OgorCSQoUk0pIC1mICQoREVTVERJUikkKGxpYmRpcikvbGlic3MuYSAkKERFU1RESVIpJChiaW5kaXIpL21rX2NtZHMgXAorCQkkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy9zcy5wYyBcCisJCSQoREVTVERJUikkKG1hbjFkaXIpL21rX2NtZHMuMSAKKwkkKFJNKSAtcmYgJChERVNURElSKSQoaW5jbHVkZWRpcikvc3MgJChERVNURElSKSQoZGF0YWRpcikvc3MKKwordGVzdF9zczogdGVzdF9zcy5vIHRlc3RfY21kLm8gJChERVBMSUJTUykgJChERVBMSUJDT01fRVJSKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpIC1vICRAIHRlc3Rfc3MubyB0ZXN0X2NtZC5vICQoQUxMX0NGTEFHUykgXAorCQkkKExJQlNTKSAkKExJQkNPTV9FUlIpCisKK2NoZWNrOjogYWxsIHRlc3Rfc3MKKwkkKEUpICIJUlVOIFRFU1QgdGVzdF9zcyIKKwktQChMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3Rlc3Rfc3MgLWYgJChzcmNkaXIpL3Rlc3Rfc2NyaXB0ID4gdGVzdF9vdXQgMj4mMTsgZXhpdCAwKQorCSQoUSkgaWYgZGlmZiB0ZXN0X291dCAkKHNyY2RpcikvdGVzdF9zY3JpcHRfZXhwZWN0ZWQgPiB0ZXN0LmRpZmY7IHRoZW4gXAorCQl0cnVlIDsgZWxzZSBlY2hvICJSZWdyZXNzaW9uIHRlc3QgZm9yIHNzIGxpYnJhcnkgZmFpbGVkISI7IGV4aXQgMSA7IGZpCisKK2NsZWFuOjoKKwkkKFJNKSAtZiAuLi9saWJzcy5hIGxpYnNzLmEgbWtfY21kcyBzc19lcnIuaCBzc19lcnIuYyBzdGRfcnFzLmMgXAorCQl0c3RfY21kcy5jIHRlc3Rfc3MgdGVzdF9vdXQgdGVzdC5kaWZmICoubyAqfiBcIyogKi5iYWsgY29yZSBcCisJCXRlc3RfY21kLmMKKworbW9zdGx5Y2xlYW46OiBjbGVhbgorZGlzdGNsZWFuOjogY2xlYW4KKwkkKFJNKSAtZiAuZGVwZW5kIE1ha2VmaWxlIHNzLnBjIFwKKwkJJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjCisjIEhhY2sgdG8gcGFyYWxsZWwgbWFrZXMgcmVjb2duaXplIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuCisjCiskKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oOiBzc19lcnIuaAorCiskKE9CSlMpOiBzdWJkaXJzCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworaW52b2NhdGlvbi5vOiAkKHNyY2RpcikvaW52b2NhdGlvbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2hlbHAubzogJChzcmNkaXIpL2hlbHAuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3NzX2ludGVybmFsLmggJChzcmNkaXIpL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oCitleGVjdXRlX2NtZC5vOiAkKHNyY2RpcikvZXhlY3V0ZV9jbWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3NzX2ludGVybmFsLmggJChzcmNkaXIpL3NzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oCitsaXN0ZW4ubzogJChzcmNkaXIpL2xpc3Rlbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK3BhcnNlLm86ICQoc3JjZGlyKS9wYXJzZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2Vycm9yLm86ICQoc3JjZGlyKS9lcnJvci5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmgKK3Byb21wdC5vOiAkKHNyY2RpcikvcHJvbXB0LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcmVxdWVzdF90YmwubzogJChzcmNkaXIpL3JlcXVlc3RfdGJsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorbGlzdF9ycXMubzogJChzcmNkaXIpL2xpc3RfcnFzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcGFnZXIubzogJChzcmNkaXIpL3BhZ2VyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorcmVxdWVzdHMubzogJChzcmNkaXIpL3JlcXVlc3RzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaAorZGF0YS5vOiAkKHNyY2RpcikvZGF0YS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2Rpcikvc3NfaW50ZXJuYWwuaCAkKHNyY2Rpcikvc3MuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9zcy9zc19lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmgKK2dldF9yZWFkbGluZS5vOiAkKHNyY2RpcikvZ2V0X3JlYWRsaW5lLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9zc19pbnRlcm5hbC5oICQoc3JjZGlyKS9zcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL3NzL3NzX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9jdF9jLmF3ayBiL2UyZnNwcm9ncy9saWIvc3MvY3RfYy5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MjRjOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvY3RfYy5hd2sKQEAgLTAsMCArMSw3NSBAQAorL15jb21tYW5kX3RhYmxlIC8geworCWNtZHRibCA9ICQyOworCXByaW50ZiAiLyogJXMuYyAtIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJXMuY3QgKi9cbiIsIFwKKwkJcm9vdG5hbWUsIHJvb3RuYW1lID4gb3V0ZmlsZQorCXByaW50ICIjaW5jbHVkZSA8c3Mvc3MuaD4iID4gb3V0ZmlsZQorCXByaW50ICIiID5vdXRmaWxlCit9CisJCisvXkJPUiQvIHsKKwljbWRudW0rKworCW9wdGlvbnMgPSAwCisJY21kdGFiID0gIiIKKwlwcmludGYgInN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3Qgc3N1JTA1ZFtdID0ge1xuIiwgY21kbnVtID4gb3V0ZmlsZQorfQorCisvXnN1Yi8geworCXN1YnIgPSBzdWJzdHIoJDAsIDYsIGxlbmd0aCgkMCktNSkKK30KKworL15obHAvIHsKKwloZWxwID0gc3Vic3RyKCQwLCA2LCBsZW5ndGgoJDApLTUpCit9CisKKy9eY21kLyB7CisJY21kID0gc3Vic3RyKCQwLCA2LCBsZW5ndGgoJDApLTUpCisJcHJpbnRmICIlc1wiJXNcIixcbiIsIGNtZHRhYiwgY21kID4gb3V0ZmlsZQorCWNtZHRhYiA9ICIgICAgIgorfQorCisvXm9wdC8geworCW9wdCA9IHN1YnN0cigkMCwgNiwgbGVuZ3RoKCQwKS01KQorCWlmIChvcHQgPT0gImRvbnRfbGlzdCIpIHsKKwkJb3B0aW9ucyArPSAxCisJfQorCWlmIChvcHQgPT0gImRvbnRfc3VtbWFyaXplIikgeworCQlvcHRpb25zICs9IDIKKwl9Cit9CisKKy9eRU9SLyB7CisJcHJpbnQgIiAgICAoY2hhciBjb25zdCAqKTAiID4gb3V0ZmlsZQorCXByaW50ICJ9OyIgPiBvdXRmaWxlIAorCXByaW50ZiAiZXh0ZXJuIHZvaWQgJXMgX19TU19QUk9UTztcbiIsIHN1YnIgPiBvdXRmaWxlCisJIyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBnYXdrIDMuMC41CisJYXdrX2J1ZyA9IGNtZG51bQorCXN1YnJfdGFiW2F3a19idWddID0gc3VicgorCW9wdGlvbnNfdGFiW2F3a19idWddID0gb3B0aW9ucworCWhlbHBfdGFiW2F3a19idWddID0gaGVscAorfQorCisvXlswLTldLyB7CisJbGluZW51bSA9ICQxOworfQorCisvXkVSUk9SLyB7CisJZXJyb3IgPSBzdWJzdHIoJDAsIDgsIGxlbmd0aCgkMCktNykKKwlwcmludGYgIkVycm9yIGluIGxpbmUgJWQ6ICVzXG4iLCBsaW5lbnVtLCBlcnJvcgorCXByaW50ICIjX19FUlJPUl9JTl9GSUxFX18iID4gb3V0ZmlsZQorfQorCitFTkQgeworCXByaW50ZiAic3RhdGljIHNzX3JlcXVlc3RfZW50cnkgc3N1JTA1ZFtdID0ge1xuIiwgY21kbnVtKzEgPiBvdXRmaWxlCisJZm9yIChpPTE7IGkgPD0gY21kbnVtOyBpKyspIHsKKwkJcHJpbnRmICIgICAgeyBzc3UlMDVkLFxuIiwgaSA+IG91dGZpbGUKKwkJcHJpbnRmICIgICAgICAlcyxcbiIsIHN1YnJfdGFiW2ldID4gb3V0ZmlsZQorCQlwcmludGYgIiAgICAgIFwiJXNcIixcbiIsIGhlbHBfdGFiW2ldID4gb3V0ZmlsZQorCQlwcmludGYgIiAgICAgICVkIH0sXG4iLCBvcHRpb25zX3RhYltpXSA+IG91dGZpbGUKKwl9CisJcHJpbnQgIiAgICB7IDAsIDAsIDAsIDAgfSIgPiBvdXRmaWxlCisJcHJpbnQgIn07IiA+IG91dGZpbGUKKwlwcmludCAiIiA+IG91dGZpbGUKKwlwcmludGYgInNzX3JlcXVlc3RfdGFibGUgJXMgPSB7IDIsIHNzdSUwNWQgfTtcbiIsIFwKKwkJY21kdGJsLCBjbWRudW0rMSA+IG91dGZpbGUKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9jdF9jLnNlZCBiL2UyZnNwcm9ncy9saWIvc3MvY3RfYy5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2NDUyYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvY3RfYy5zZWQKQEAgLTAsMCArMSwxNjAgQEAKKyMKKyMgVGhpcyBzY3JpcHQgcGFyc2VzIGEgY29tbWFuZF90YWJsZSBmaWxlIGludG8gc29tZXRoaW5nIHdoaWNoIGlzIGEgYml0IAorIyBlYXNpZXIgZm9yIGFuIGF3ayBzY3JpcHQgdG8gdW5kZXJzdGFuZC4KKyMKKyMgSW5wdXQgc3ludGF4OiBhIC5jdCBmaWxlCisjCisjIE91dHB1dCBzeW50YXg6CisjIChmb3IgdGhlIGNvbW1hbmRfdGFibGUgbGluZSkKKyMJY29tbWFuZF90YWJsZSAgPGNvbW1hbmRfdGFibGU+CisjCisjKGZvciBlYWNoIHJlcXVlc3QgZGVmaW5pdGlvbikKKyMJQk9SCisjCXN1YjogPHN1YnJvdXRpbmUgbmFtZT4KKyMJaGxwOiA8aGVscCB0ZXh0PgorIwljbWQ6IDxjb21tYW5kPgorIwlvcHQ6IDxvcHRpb24+CisjCUVPUgorIyAodGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgJ2NtZCcgb3IgJ29wdCcgbGluZQorIworIyBBIG51bWJlciBzZW50IHRvIHRoZSBvdXRwdXQgcmVwcmVzZW50cyBhIHBhcnNlIGVycm9yIC0tLSBpdCB3aWxsIGJlIAorIyBmb2xsb3dlZCBieSB0aGUgbmV4dCBsaW5lIHdoaWNoIHdpbGwgaGF2ZSB0aGUgZm9ybToKKyMJRVJST1I6IDxlcnJvciB0ZXh0PgorIworIyBUaGUgZGVzaWduIG9mIHRoaXMgb3V0cHV0IHN5bnRheCBpcyBzdWNoIHRoYXQgaXQgc2hvdWxkIGJlIGVhc3kgZm9yCisjIGFuIGF3ayBzY3JpcHQgdG8gcGFyc2UuCisKKyMKKyMgVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBzY3JpcHQgaXMganVzdCB0byBjYW5ub2ljYWxpemUgdGhlIGZpbGUuICAKKyMgSXQgcmVtb3ZlcyBjb21tZW50cywgYW5kIHB1dHMgZWFjaCBjb21tYW5kX3RhYmxlIHJlcXVlc3Qgb250byBhIHNpbmdsZQorIyBsaW5lCisjCis6RklSU1QKK3kvCS8gLworcy9eICovLworcy8jLiokLy8KKy87ICokLyF7CitOCit5LwkvIC8KK3MvXG4gKi8gLworYkZJUlNUCit9CitzLywgKi8sIC9nCisjCisjIE5vdyB3ZSB0YWtlIGNhcmUgb2Ygc29tZSBzeW50YXRpYyBzdWdhci4uLi4uCisjCisvXnVuaW1wbGVtZW50ZWQvIHsKKwlzL151bmltcGxlbWVudGVkIFtBLVphLXpfMC05XSovcmVxdWVzdCBzc191bmltcGxlbWVudGVkLworCXMvOy8sIChkb250X2xpc3QsIGRvbnRfc3VtbWFyaXplKTsvCit9CisvXnVua25vd24vIHsKKwlzL151bmtub3duIC9yZXF1ZXN0IHNzX3Vua25vd24sICIiLCAvCit9CisjCisjIERpc3BhdGNoIGJhc2VkIG9uIHRoZSBrZXl3b3JkLi4uLiAgaWxsZWdhbCBrZXl3b3JkcyBhcmUgcHJlZml4ZWQgYnkgRVJST1I6CisjIGFuZCBhcmUgaGFuZGxlZCBieSB0aGUgYXdrIHNjcmlwdC4KKyMKKy9eY29tbWFuZF90YWJsZSAvYkNNRAorL15yZXF1ZXN0IC9iUkVRVUVTVAorL15lbmQ7L2JFTkQKK3MvIC4qLy8KK3MvXi9FUlJPUjogdW5rbm93biBrZXl3b3JkOiAvCis9CitiCisjCisjIEhhbmRsZSB0aGUgY29tbWFuZF90YWJsZSBrZXl3b3JkCisjCis6Q01ECitzLzskLy8KK3AKK2QKK2IKKyMKKyMgSGFuZGxlIHRoZSByZXF1ZXN0IGtleXdvcmQgLS0tIHRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBzZWQgc2NyaXB0LgorIyAKKzpSRVFVRVNUCitzL15yZXF1ZXN0ICovLworaAoraVwKK0JPUgorIyBGaXJzdCwgcGFyc2Ugb3V0IHRoZSBzdWJyb3V0aW5lIG5hbWUKK3MvXi9zdWI6IC8KK3MvLC4qLy8KK3AKKyMgTmV4dCwgcGFyc2Ugb3V0IHRoZSBoZWxwIG1lc3NhZ2UsIGJlaW5nIGNhcmVmdWwgdG8gaGFuZGxlIGEgcXVvdGVkIHN0cmluZworZworcy9eW14sXSosICovLworaAorL14iLyB7CisJcy9eIi8vCisJcy8iLiovLworCXgKKwlzL14iW14iXSoiLCAqLy8KKwl4CisJYiBFTUlUSExQCit9CitzL1teYS16QS1aMC05XS4qLy8KK3gKK3MvW2EtekEtWjAtOV0qLCAqLy8KK3gKKzpFTUlUSExQCitzL14vaGxwOiAvCitwCisjIE5leHQgdGFrZSBjYXJlIG9mIHRoZSBjb21tYW5kIG5hbWVzCis6Q01ETElTVAorZworL14oL2IgT1BUSU9OUworL147L2IgRU9SCisvXiIvIHsKKwlzL14iLy8KKwlzLyIuKi8vCisJeAorCXMvXiJbXiJdKiIvLworCXMvLCAqLy8KKwl4CisJYiBFTUlUUkVRCit9CitzL1teQS1aYS16XzAtOV0uKi8vCit4CitzL1tBLVphLXpfMC05XSovLworcy8sICovLworeAorOkVNSVRSRVEKK3MvXi9jbWQ6IC8KK3AKK2IgQ01ETElTVAorIworIyBIZXJlIHdlIHBhcnNlIHRoZSBsaXN0IG9mIG9wdGlvbnMuCisjCis6IE9QVElPTlMKK2cKK3MvXigvLworaAorOiBPUFRMSVNUCisvXikvIGIgRU9SCisvXlteQS1aYS16XzAtOV0vIHsKKwk9CisJY1wKK0VSUk9SOiBwYXJzZSBlcnJvciBpbiBvcHRpb25zIGxpc3QKK30KK3MvW15BLVphLXpfMC05XS4qLy8KK3gKK3MvW0EtWmEtel8wLTldKi8vCitzLywgKi8vCit4CitzL14vb3B0OiAvCitwCitnCitiIE9QVExJU1QKKzogRU9SCitjXAorRU9SXAorCitkCitiCisjCisjIEhhbmRsZSB0aGUgZW5kIGtleXdvcmQgLS0tIGl0J3MgYmFzaWNhbGx5IGlnbm9yZWQuCisjCis6RU5ECitkCitiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL2RhdGEuYyBiL2UyZnNwcm9ncy9saWIvc3MvZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2NkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL2RhdGEuYwpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODgsIDE5ODkgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICogKFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZCkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgICAgIkNvcHlyaWdodCAxOTg3LCAxOTg4LCAxOTg5IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IjsKKworc3NfZGF0YSAqKl9zc190YWJsZSA9IChzc19kYXRhICoqKU5VTEw7CitjaGFyICpfc3NfcGFnZXJfbmFtZSA9IChjaGFyICopTlVMTDsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3MvZXJyb3IuYyBiL2UyZnNwcm9ncy9saWIvc3MvZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ViYzRhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9lcnJvci5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCwgMTk4OSBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nCisgKiBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworY2hhciAqc3NfbmFtZShpbnQgc2NpX2lkeCkKK3sKKyAgICByZWdpc3RlciBjaGFyICpyZXRfdmFsOworICAgIHJlZ2lzdGVyIHNzX2RhdGEgKmluZm9wOworCisgICAgaW5mb3AgPSBzc19pbmZvKHNjaV9pZHgpOworICAgIGlmIChpbmZvcC0+Y3VycmVudF9yZXF1ZXN0ID09IChjaGFyIGNvbnN0ICopTlVMTCkgeworCXJldF92YWwgPSBtYWxsb2MoKHVuc2lnbmVkKQorCQkJIChzdHJsZW4oaW5mb3AtPnN1YnN5c3RlbV9uYW1lKSsxKQorCQkJICogc2l6ZW9mKGNoYXIpKTsKKwlpZiAocmV0X3ZhbCA9PSAoY2hhciAqKU5VTEwpCisJICAgIHJldHVybigoY2hhciAqKU5VTEwpOworCXN0cmNweShyZXRfdmFsLCBpbmZvcC0+c3Vic3lzdGVtX25hbWUpOworCXJldHVybihyZXRfdmFsKTsKKyAgICB9CisgICAgZWxzZSB7CisJcmVnaXN0ZXIgY2hhciAqY3A7CisJcmVnaXN0ZXIgY2hhciBjb25zdCAqY3AxOworCXJldF92YWwgPSBtYWxsb2MoKHVuc2lnbmVkKXNpemVvZihjaGFyKSAqCisJCQkgKHN0cmxlbihpbmZvcC0+c3Vic3lzdGVtX25hbWUpKworCQkJICBzdHJsZW4oaW5mb3AtPmN1cnJlbnRfcmVxdWVzdCkrCisJCQkgIDQpKTsKKwljcCA9IHJldF92YWw7CisJY3AxID0gaW5mb3AtPnN1YnN5c3RlbV9uYW1lOworCXdoaWxlICgqY3AxKQorCSAgICAqY3ArKyA9ICpjcDErKzsKKwkqY3ArKyA9ICcgJzsKKwkqY3ArKyA9ICcoJzsKKwljcDEgPSBpbmZvcC0+Y3VycmVudF9yZXF1ZXN0OworCXdoaWxlICgqY3AxKQorCSAgICAqY3ArKyA9ICpjcDErKzsKKwkqY3ArKyA9ICcpJzsKKwkqY3AgPSAnXDAnOworCXJldHVybihyZXRfdmFsKTsKKyAgICB9Cit9CisKK3ZvaWQgc3NfZXJyb3IgKGludCBzY2lfaWR4LCBsb25nIGNvZGUsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKK3sKKyAgICByZWdpc3RlciBjaGFyICp3aG9hbWk7CisgICAgdmFfbGlzdCBwdmFyOworCisgICAgdmFfc3RhcnQgKHB2YXIsIGZtdCk7CisgICAgd2hvYW1pID0gc3NfbmFtZSAoc2NpX2lkeCk7CisgICAgY29tX2Vycl92YSAod2hvYW1pLCBjb2RlLCBmbXQsIHB2YXIpOworICAgIGZyZWUgKHdob2FtaSk7CisgICAgdmFfZW5kKHB2YXIpOworfQorCit2b2lkIHNzX3BlcnJvcihpbnQgc2NpX2lkeCwgbG9uZyBjb2RlLCBjaGFyIGNvbnN0ICptc2cpIC8qIGZvciBjb21wYXRpYmlsaXR5ICovCit7CisgICAgc3NfZXJyb3IgKHNjaV9pZHgsIGNvZGUsICIlcyIsIG1zZyk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL2V4ZWN1dGVfY21kLmMgYi9lMmZzcHJvZ3MvbGliL3NzL2V4ZWN1dGVfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvZXhlY3V0ZV9jbWQuYwpAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4LCAxOTg5IGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZkZWYgSEFTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVxdWVzdF90YWJsZSBQUk9UT1RZUEUoKHNzX3JlcXVlc3RfdGFibGUgKnJxdGJsLCBpbnQgYXJnYywKKwkJCQkJICBjaGFyICphcmd2W10sIGludCBzY2lfaWR4KSk7CitzdGF0aWMgaW50IHJlYWxseV9leGVjdXRlX2NvbW1hbmQgUFJPVE9UWVBFKChpbnQgc2NpX2lkeCwgaW50IGFyZ2MsCisJCQkJCSAgICAgY2hhciAqKmFyZ3ZbXSkpOworCisvKgorICogZ2V0X3JlcXVlc3QodGJsLCBpZHgpCisgKgorICogRnVuY3Rpb246CisgKiAgICAgIEdldHMgdGhlIGlkeCd0aCByZXF1ZXN0IGZyb20gdGhlIHJlcXVlc3QgdGFibGUgcG9pbnRlZCB0bworICogICAgICBieSB0YmwuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIHRibCAoc3NfcmVxdWVzdF90YWJsZSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZQorICogICAgICBpZHggKGludCkKKyAqICAgICAgICAgICAgICBpbmRleCBpbnRvIHRhYmxlCisgKiBSZXR1cm5zOgorICogICAgICAoc3NfcmVxdWVzdF9lbnRyeSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZSBlbnRyeQorICogTm90ZXM6CisgKiAgICAgIEhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgbWFjcm8uCisgKi8KKworI2lmZGVmIF9fU0FCRVJfXworLyogc2lnaC4gIHNhYmVyIHdvbid0IGRlYWwgd2l0aCBwb2ludGVyLXRvLWNvbnN0LXN0cnVjdCAqLworc3RhdGljIHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqIGdldF9yZXF1ZXN0ICh0YmwsIGlkeCkKKyAgICBzc19yZXF1ZXN0X3RhYmxlICogdGJsOworICAgIGludCBpZHg7Cit7CisgICAgc3RydWN0IF9zc19yZXF1ZXN0X3RhYmxlICp0YmwxID0gKHN0cnVjdCBfc3NfcmVxdWVzdF90YWJsZSAqKSB0Ymw7CisgICAgc3RydWN0IF9zc19yZXF1ZXN0X2VudHJ5ICplID0gKHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqKSB0YmwxLT5yZXF1ZXN0czsKKyAgICByZXR1cm4gZSArIGlkeDsKK30KKyNlbHNlCisjZGVmaW5lIGdldF9yZXF1ZXN0KHRibCxpZHgpICAgICgodGJsKSAtPiByZXF1ZXN0cyArIChpZHgpKQorI2VuZGlmCisKKy8qCisgKiBjaGVja19yZXF1ZXN0X3RhYmxlKHJxdGJsLCBhcmdjLCBhcmd2LCBzY2lfaWR4KQorICoKKyAqIEZ1bmN0aW9uOgorICogICAgICBJZiB0aGUgY29tbWFuZCBzdHJpbmcgaW4gYXJndlswXSBpcyBpbiB0aGUgcmVxdWVzdCB0YWJsZSwgZXhlY3V0ZQorICogICAgICB0aGUgY29tbWFuZHMgYW5kIHJldHVybiBlcnJvciBjb2RlIDAuICBPdGhlcndpc2UsIHJldHVybiBlcnJvcgorICogICAgICBjb2RlIHNzX2V0X2NvbW1hbmRfbm90X2ZvdW5kLgorICogQXJndW1lbnRzOgorICogICAgICBycXRibCAoc3NfcmVxdWVzdF90YWJsZSAqKQorICogICAgICAgICAgICAgIHBvaW50ZXIgdG8gcmVxdWVzdCB0YWJsZQorICogICAgICBhcmdjIChpbnQpCisgKiAgICAgICAgICAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFyZ3ZbXQorICogICAgICBhcmd2IChjaGFyICpbXSkKKyAqICAgICAgICAgICAgICBhcmd1bWVudCBzdHJpbmcgYXJyYXkKKyAqICAgICAgc2NpX2lkeCAoaW50KQorICogICAgICAgICAgICAgIHNzLWludGVybmFsIGluZGV4IGZvciBzdWJzeXN0ZW0gY29udHJvbCBpbmZvIHN0cnVjdHVyZQorICogUmV0dXJuczoKKyAqICAgICAgKGludCkKKyAqICAgICAgICAgICAgICB6ZXJvIGlmIGNvbW1hbmQgZm91bmQsIHNzX2V0X2NvbW1hbmRfbm90X2ZvdW5kIG90aGVyd2lzZQorICogTm90ZXM6CisgKi8KKworc3RhdGljIGludCBjaGVja19yZXF1ZXN0X3RhYmxlKHJlZ2lzdGVyIHNzX3JlcXVlc3RfdGFibGUgKnJxdGJsLCBpbnQgYXJnYywKKwkJCSAgICAgICBjaGFyICphcmd2W10sIGludCBzY2lfaWR4KQoreworI2lmZGVmIF9fU0FCRVJfXworICAgIHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdDsKKyNlbHNlCisgICAgcmVnaXN0ZXIgc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdDsKKyNlbmRpZgorICAgIHJlZ2lzdGVyIHNzX2RhdGEgKmluZm87CisgICAgcmVnaXN0ZXIgY2hhciBjb25zdCAqIGNvbnN0ICogbmFtZTsKKyAgICBjaGFyICpzdHJpbmcgPSBhcmd2WzBdOworICAgIGludCBpOworCisgICAgaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgaW5mby0+YXJnYyA9IGFyZ2M7CisgICAgaW5mby0+YXJndiA9IGFyZ3Y7CisgICAgZm9yIChpID0gMDsgKHJlcXVlc3QgPSBnZXRfcmVxdWVzdChycXRibCwgaSkpLT5jb21tYW5kX25hbWVzOyBpKyspIHsKKwlmb3IgKG5hbWUgPSByZXF1ZXN0LT5jb21tYW5kX25hbWVzOyAqbmFtZTsgbmFtZSsrKQorCSAgICBpZiAoIXN0cmNtcCgqbmFtZSwgc3RyaW5nKSkgeworCQlpbmZvLT5jdXJyZW50X3JlcXVlc3QgPSByZXF1ZXN0LT5jb21tYW5kX25hbWVzWzBdOworCQkocmVxdWVzdC0+ZnVuY3Rpb24pKGFyZ2MsIChjb25zdCBjaGFyICpjb25zdCAqKSBhcmd2LAorCQkJCSAgICBzY2lfaWR4LGluZm8tPmluZm9fcHRyKTsKKwkJaW5mby0+Y3VycmVudF9yZXF1ZXN0ID0gKGNoYXIgKilOVUxMOworCQlyZXR1cm4oMCk7CisJICAgIH0KKyAgICB9CisgICAgcmV0dXJuKFNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5EKTsKK30KKworLyoKKyAqIHJlYWxseV9leGVjdXRlX2NvbW1hbmQoc2NpX2lkeCwgYXJnYywgYXJndikKKyAqCisgKiBGdW5jdGlvbjoKKyAqICAgICAgRmlsbHMgaW4gdGhlIGFyZ2MsIGFyZ3YgdmFsdWVzIGluIHRoZSBzdWJzeXN0ZW0gZW50cnkgYW5kCisgKiAgICAgIGNhbGwgdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmUuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIHNjaV9pZHggKGludCkKKyAqICAgICAgICAgICAgICBzcy1pbnRlcm5hbCBpbmRleCBmb3Igc3Vic3lzdGVtIGNvbnRyb2wgaW5mbyBzdHJ1Y3R1cmUKKyAqICAgICAgYXJnYyAoaW50KQorICogICAgICAgICAgICAgIG51bWJlciBvZiBhcmd1bWVudHMgaW4gYXJndW1lbnQgbGlzdAorICogICAgICBhcmd2IChjaGFyICoqW10pCisgKiAgICAgICAgICAgICAgcG9pbnRlciB0byBwYXJzZWQgYXJndW1lbnQgbGlzdCAobWF5IGJlIHJlYWxsb2NhdGVkCisgKiAgICAgICAgICAgICAgb24gYWJicmV2IGV4cGFuc2lvbikKKyAqCisgKiBSZXR1cm5zOgorICogICAgICAoaW50KQorICogICAgICAgICAgICAgIFplcm8gaWYgc3VjY2Vzc2Z1bCwgc3NfZXRfY29tbWFuZF9ub3RfZm91bmQgb3RoZXJ3aXNlLgorICogTm90ZXM6CisgKi8KKworc3RhdGljIGludCByZWFsbHlfZXhlY3V0ZV9jb21tYW5kKGludCBzY2lfaWR4LCBpbnQgYXJnYywgY2hhciAqKmFyZ3ZbXSkKK3sKKyAgICByZWdpc3RlciBzc19yZXF1ZXN0X3RhYmxlICoqcnF0Ymw7CisgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKworICAgIGluZm8gPSBzc19pbmZvKHNjaV9pZHgpOworCisgICAgZm9yIChycXRibCA9IGluZm8tPnJxdF90YWJsZXM7ICpycXRibDsgcnF0YmwrKykgeworICAgICAgICBpZiAoY2hlY2tfcmVxdWVzdF90YWJsZSAoKnJxdGJsLCBhcmdjLCAqYXJndiwgc2NpX2lkeCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgcmV0dXJuKFNTX0VUX0NPTU1BTkRfTk9UX0ZPVU5EKTsKK30KKworLyoKKyAqIHNzX2V4ZWN1dGVfY29tbWFuZChzY2lfaWR4LCBhcmd2KQorICoKKyAqIEZ1bmN0aW9uOgorICoJRXhlY3V0ZXMgYSBwYXJzZWQgY29tbWFuZCBsaXN0IHdpdGhpbiB0aGUgc3Vic3lzdGVtLgorICogQXJndW1lbnRzOgorICoJc2NpX2lkeCAoaW50KQorICoJCXNzLWludGVybmFsIGluZGV4IGZvciBzdWJzeXN0ZW0gY29udHJvbCBpbmZvIHN0cnVjdHVyZQorICoJYXJndiAoY2hhciAqW10pCisgKgkJcGFyc2VkIGFyZ3VtZW50IGxpc3QKKyAqIFJldHVybnM6CisgKgkoaW50KQorICoJCVplcm8gaWYgc3VjY2Vzc2Z1bCwgc3NfZXRfY29tbWFuZF9ub3RfZm91bmQgb3RoZXJ3aXNlLgorICogTm90ZXM6CisgKi8KKworaW50IHNzX2V4ZWN1dGVfY29tbWFuZChpbnQgc2NpX2lkeCwgcmVnaXN0ZXIgY2hhciAqYXJndltdKQoreworCXJlZ2lzdGVyIGludCBpLCBhcmdjOworCWNoYXIgKiphcmdwOworCisJYXJnYyA9IDA7CisJZm9yIChhcmdwID0gYXJndjsgKmFyZ3A7IGFyZ3ArKykKKwkJYXJnYysrOworCWFyZ3AgPSAoY2hhciAqKiltYWxsb2MoKGFyZ2MrMSkqc2l6ZW9mKGNoYXIgKikpOworCWZvciAoaSA9IDA7IGkgPD0gYXJnYzsgaSsrKQorCQlhcmdwW2ldID0gYXJndltpXTsKKwlpID0gcmVhbGx5X2V4ZWN1dGVfY29tbWFuZChzY2lfaWR4LCBhcmdjLCAmYXJncCk7CisJZnJlZShhcmdwKTsKKwlyZXR1cm4oaSk7Cit9CisKKy8qCisgKiBzc19leGVjdXRlX2xpbmUoc2NpX2lkeCwgbGluZV9wdHIpCisgKgorICogRnVuY3Rpb246CisgKiAgICAgIFBhcnNlcyBhbmQgZXhlY3V0ZXMgYSBjb21tYW5kIGxpbmUgd2l0aGluIGEgc3Vic3lzdGVtLgorICogQXJndW1lbnRzOgorICogICAgICBzY2lfaWR4IChpbnQpCisgKiAgICAgICAgICAgICAgc3MtaW50ZXJuYWwgaW5kZXggZm9yIHN1YnN5c3RlbSBjb250cm9sIGluZm8gc3RydWN0dXJlCisgKiAgICAgIGxpbmVfcHRyIChjaGFyICopCisgKiAgICAgICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIGxpbmUgdG8gYmUgcGFyc2VkLgorICogUmV0dXJuczoKKyAqICAgICAgKGludCkKKyAqICAgICAgCUVycm9yIGNvZGUuCisgKiBOb3RlczoKKyAqLworCitpbnQgc3NfZXhlY3V0ZV9saW5lKGludCBzY2lfaWR4LCBjaGFyICpsaW5lX3B0cikKK3sKKyAgICBjaGFyICoqYXJndjsKKyAgICBpbnQgYXJnYywgcmV0OworCisgICAgLyogZmx1c2ggbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgd2hpbGUgKGxpbmVfcHRyWzBdID09ICcgJyB8fCBsaW5lX3B0clswXSA9PSAnXHQnKQorICAgICAgICBsaW5lX3B0cisrOworCisgICAgLyogY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHNlbnQgdG8gb3BlcmF0aW5nIHN5c3RlbSBmb3IgZXhlY3V0aW9uICovCisgICAgaWYgKCpsaW5lX3B0ciA9PSAnIScpIHsKKyAgICAgICAgaWYgKHNzX2luZm8oc2NpX2lkeCktPmZsYWdzLmVzY2FwZV9kaXNhYmxlZCkKKyAgICAgICAgICAgIHJldHVybiBTU19FVF9FU0NBUEVfRElTQUJMRUQ7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGluZV9wdHIrKzsKKyAgICAgICAgICAgIHJldHVybiAoc3lzdGVtKGxpbmVfcHRyKSA8IDApID8gZXJybm8gOiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyogcGFyc2UgaXQgKi8KKyAgICBhcmd2ID0gc3NfcGFyc2Uoc2NpX2lkeCwgbGluZV9wdHIsICZhcmdjKTsKKyAgICBpZiAoYXJnYyA9PSAwKSB7CisJZnJlZShhcmd2KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbG9vayBpdCB1cCBpbiB0aGUgcmVxdWVzdCB0YWJsZXMsIGV4ZWN1dGUgaWYgZm91bmQgKi8KKyAgICByZXQgPSByZWFsbHlfZXhlY3V0ZV9jb21tYW5kIChzY2lfaWR4LCBhcmdjLCAmYXJndik7CisKKyAgICBmcmVlKGFyZ3YpOworCisgICAgcmV0dXJuKHJldCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL2dldF9yZWFkbGluZS5jIGIvZTJmc3Byb2dzL2xpYi9zcy9nZXRfcmVhZGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDIxMDUyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9nZXRfcmVhZGxpbmUuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMgYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpZmRlZiBIQVNfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisjZGVmaW5lCXNpemUJc2l6ZW9mKHNzX2RhdGEgKikKKyNpZmRlZiBIQVZFX0RMT1BFTgorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworc3RhdGljIHZvaWQgc3NfcmVsZWFzZV9yZWFkbGluZShzc19kYXRhICppbmZvKQoreworI2lmZGVmIEhBVkVfRExPUEVOCisJaWYgKCFpbmZvLT5yZWFkbGluZV9oYW5kbGUpCisJCXJldHVybjsKKworCWluZm8tPnJlYWRsaW5lID0gMDsKKwlpbmZvLT5hZGRfaGlzdG9yeSA9IDA7CisJaW5mby0+cmVkaXNwbGF5ID0gMDsKKwlpbmZvLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAwOworCWRsY2xvc2UoaW5mby0+cmVhZGxpbmVfaGFuZGxlKTsKKwlpbmZvLT5yZWFkbGluZV9oYW5kbGUgPSAwOworI2VuZGlmCit9CisKKy8qIExpYnJhcmllcyB3ZSB3aWxsIHRyeSB0byB1c2UgZm9yIHJlYWRsaW5lL2VkaXRsaW5lIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgREVGQVVMVF9MSUJQQVRIICJsaWJyZWFkbGluZS5zby42OmxpYnJlYWRsaW5lLnNvLjU6bGlicmVhZGxpbmUuc28uNDpsaWJyZWFkbGluZS5zbzpsaWJlZGl0LnNvLjI6bGliZWRpdC5zbzpsaWJlZGl0bGluZS5zby4wOmxpYmVkaXRsaW5lLnNvIgorCit2b2lkIHNzX2dldF9yZWFkbGluZShpbnQgc2NpX2lkeCkKK3sKKyNpZmRlZiBIQVZFX0RMT1BFTgorCXZvaWQJKmhhbmRsZSA9IE5VTEw7CisJc3NfZGF0YSAqaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisJY29uc3QgY2hhciAqKnQsICpsaWJwYXRoID0gMDsKKwljaGFyCSp0bXAsICpjcCwgKm5leHQ7CisJY2hhciAqKigqKmNvbXBsZXRpb25fZnVuYykoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisKKwlpZiAoaW5mby0+cmVhZGxpbmVfaGFuZGxlKQorCQlyZXR1cm47CisKKwlsaWJwYXRoID0gc3Nfc2FmZV9nZXRlbnYoIlNTX1JFQURMSU5FX1BBVEgiKTsKKwlpZiAoIWxpYnBhdGgpCisJCWxpYnBhdGggPSBERUZBVUxUX0xJQlBBVEg7CisJaWYgKCpsaWJwYXRoID09IDAgfHwgIXN0cmNtcChsaWJwYXRoLCAibm9uZSIpKQorCQlyZXR1cm47CisKKwl0bXAgPSBtYWxsb2Moc3RybGVuKGxpYnBhdGgpKzEpOworCWlmICghdG1wKQorCQlyZXR1cm47CisJc3RyY3B5KHRtcCwgbGlicGF0aCk7CisJZm9yIChjcCA9IHRtcDsgY3A7IGNwID0gbmV4dCkgeworCQluZXh0ID0gc3RyY2hyKGNwLCAnOicpOworCQlpZiAobmV4dCkKKwkJCSpuZXh0KysgPSAwOworCQlpZiAoKmNwID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKChoYW5kbGUgPSBkbG9wZW4oY3AsIFJUTERfTk9XKSkpIHsKKwkJCS8qIHByaW50ZigiVXNpbmcgJXMgZm9yIHJlYWRsaW5lIGxpYnJhcnlcbiIsIGNwKTsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCWZyZWUodG1wKTsKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuOworCisJaW5mby0+cmVhZGxpbmVfaGFuZGxlID0gaGFuZGxlOworCWluZm8tPnJlYWRsaW5lID0gKGNoYXIgKigqKShjb25zdCBjaGFyICopKQorCQlkbHN5bShoYW5kbGUsICJyZWFkbGluZSIpOworCWluZm8tPmFkZF9oaXN0b3J5ID0gKHZvaWQgKCopKGNvbnN0IGNoYXIgKikpCisJCWRsc3ltKGhhbmRsZSwgImFkZF9oaXN0b3J5Iik7CisJaW5mby0+cmVkaXNwbGF5ID0gKHZvaWQgKCopKHZvaWQpKQorCQlkbHN5bShoYW5kbGUsICJybF9mb3JjZWRfdXBkYXRlX2Rpc3BsYXkiKTsKKwlpbmZvLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAoY2hhciAqKigqKShjb25zdCBjaGFyICosCisJCQkJICAgIGNoYXIgKigqKShjb25zdCBjaGFyICosIGludCkpKQorCQlkbHN5bShoYW5kbGUsICJybF9jb21wbGV0aW9uX21hdGNoZXMiKTsKKwlpZiAoKHQgPSBkbHN5bShoYW5kbGUsICJybF9yZWFkbGluZV9uYW1lIikpICE9IE5VTEwpCisJCSp0ID0gaW5mby0+c3Vic3lzdGVtX25hbWU7CisJaWYgKChjb21wbGV0aW9uX2Z1bmMgPQorCSAgICAgZGxzeW0oaGFuZGxlLCAicmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fZnVuY3Rpb24iKSkgIT0gTlVMTCkKKwkJKmNvbXBsZXRpb25fZnVuYyA9IHNzX3JsX2NvbXBsZXRpb247CisJaW5mby0+cmVhZGxpbmVfc2h1dGRvd24gPSBzc19yZWxlYXNlX3JlYWRsaW5lOworI2VuZGlmCit9CisKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9oZWxwLmMgYi9lMmZzcHJvZ3MvbGliL3NzL2hlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmMwNDBmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9oZWxwLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZWxzZQorZXh0ZXJuIGludCBlcnJubzsKKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpZmRlZiBORUVEX1NZU19GQ05UTF9ICisvKiBqdXN0IGZvciBPXyogKi8KKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCit2b2lkIHNzX2hlbHAoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBjb25zdCAqYXJndiwgaW50IHNjaV9pZHgsIHBvaW50ZXIgaW5mb19wdHIpCit7CisgICAgY2hhciAqYnVmZmVyOworICAgIGNoYXIgY29uc3QgKnJlcXVlc3RfbmFtZTsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgZmQsIGNoaWxkOworICAgIHJlZ2lzdGVyIGludCBpZHg7CisgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKworICAgIHJlcXVlc3RfbmFtZSA9IHNzX2N1cnJlbnRfcmVxdWVzdChzY2lfaWR4LCAmY29kZSk7CisgICAgaWYgKGNvZGUgIT0gMCkgeworCXNzX3BlcnJvcihzY2lfaWR4LCBjb2RlLCAiIik7CisJcmV0dXJuOwkJLyogbm8gc3NfYWJvcnRfbGluZSwgaWYgaW52YWxpZCBpbnZvY2F0aW9uICovCisgICAgfQorICAgIGlmIChhcmdjID09IDEpIHsKKwlzc19saXN0X3JlcXVlc3RzKGFyZ2MsIGFyZ3YsIHNjaV9pZHgsIGluZm9fcHRyKTsKKwlyZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGFyZ2MgIT0gMikgeworCS8qIHNob3VsZCBkbyBzb21ldGhpbmcgYmV0dGVyIHRoYW4gdGhpcyAqLworCWJ1ZmZlciA9IG1hbGxvYyg4MCsyKnN0cmxlbihyZXF1ZXN0X25hbWUpKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlzc19wZXJyb3Ioc2NpX2lkeCwgMCwKKwkJCSAgImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwcmludCB1c2FnZSBtZXNzYWdlIik7CisJCXJldHVybjsKKwl9CisJc3ByaW50ZihidWZmZXIsICJ1c2FnZTpcblx0JXMgW3RvcGljfGNvbW1hbmRdXG5vclx0JXNcbiIsCisJCXJlcXVlc3RfbmFtZSwgcmVxdWVzdF9uYW1lKTsKKwlzc19wZXJyb3Ioc2NpX2lkeCwgMCwgYnVmZmVyKTsKKwlmcmVlKGJ1ZmZlcik7CisJcmV0dXJuOworICAgIH0KKyAgICBpbmZvID0gc3NfaW5mbyhzY2lfaWR4KTsKKyAgICBpZiAoaW5mby0+aW5mb19kaXJzID09IChjaGFyICoqKU5VTEwpIHsKKwlzc19wZXJyb3Ioc2NpX2lkeCwgU1NfRVRfTk9fSU5GT19ESVIsIChjaGFyICopTlVMTCk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5mby0+aW5mb19kaXJzWzBdID09IChjaGFyICopTlVMTCkgeworCXNzX3BlcnJvcihzY2lfaWR4LCBTU19FVF9OT19JTkZPX0RJUiwgKGNoYXIgKilOVUxMKTsKKwlyZXR1cm47CisgICAgfQorICAgIGZvciAoZmQgPSAtMSwgaWR4ID0gMDsgaW5mby0+aW5mb19kaXJzW2lkeF0gIT0gKGNoYXIgKilOVUxMOyBpZHgrKykgeworICAgICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuIChpbmZvLT5pbmZvX2RpcnNbaWR4XSkgKyAxICsKKwkJCXN0cmxlbiAoYXJndlsxXSkgKyA2KTsKKwlpZiAoIWJ1ZmZlcikgeworCSAgICBzc19wZXJyb3Ioc2NpX2lkeCwgMCwKKwkJICAgICAgImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaGVscCBmaWxlbmFtZSIpOworCSAgICByZXR1cm47CisJfQorCSh2b2lkKSBzdHJjcHkoYnVmZmVyLCBpbmZvLT5pbmZvX2RpcnNbaWR4XSk7CisJKHZvaWQpIHN0cmNhdChidWZmZXIsICIvIik7CisJKHZvaWQpIHN0cmNhdChidWZmZXIsIGFyZ3ZbMV0pOworCSh2b2lkKSBzdHJjYXQoYnVmZmVyLCAiLmluZm8iKTsKKwlmZCA9IG9wZW4oYnVmZmVyLCBPX1JET05MWSk7CisJZnJlZShidWZmZXIpOworCWlmIChmZCA+PSAwKQorCSAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZkIDwgMCkgeworI2RlZmluZSBNU0cgIk5vIGluZm8gZm91bmQgZm9yICIKKyAgICAgICAgY2hhciAqYnVmID0gbWFsbG9jKHN0cmxlbiAoTVNHKSArIHN0cmxlbiAoYXJndlsxXSkgKyAxKTsKKwlzdHJjcHkoYnVmLCBNU0cpOworCXN0cmNhdChidWYsIGFyZ3ZbMV0pOworCXNzX3BlcnJvcihzY2lfaWR4LCAwLCBidWYpOworCWZyZWUoYnVmKTsKKwlyZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAoY2hpbGQgPSBmb3JrKCkpIHsKKyAgICBjYXNlIC0xOgorCXNzX3BlcnJvcihzY2lfaWR4LCBlcnJubywgIkNhbid0IGZvcmsgZm9yIHBhZ2VyIik7CisJKHZvaWQpIGNsb3NlKGZkKTsKKwlyZXR1cm47CisgICAgY2FzZSAwOgorCSh2b2lkKSBkdXAyKGZkLCAwKTsgLyogcHV0IGZpbGUgb24gc3RkaW4gKi8KKwlzc19wYWdlX3N0ZGluKCk7CisgICAgZGVmYXVsdDoKKwkodm9pZCkgY2xvc2UoZmQpOyAvKiB3aGF0IGNhbiB3ZSBkbyBpZiBpdCBmYWlscz8gKi8KKwl3aGlsZSAod2FpdChOVUxMKSAhPSBjaGlsZCkgeworCSAgICAvKiBkbyBub3RoaW5nIGlmIHdyb25nIHBpZCAqLworCX07CisgICAgfQorfQorCisjaWZuZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxzeXMvZGlyLmg+CisjZWxzZQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisKK3ZvaWQgc3NfYWRkX2luZm9fZGlyKGludCBzY2lfaWR4LCBjaGFyICppbmZvX2RpciwgaW50ICpjb2RlX3B0cikKK3sKKyAgICByZWdpc3RlciBzc19kYXRhICppbmZvOworICAgIERJUiAqZDsKKyAgICBpbnQgbl9kaXJzOworICAgIHJlZ2lzdGVyIGNoYXIgKipkaXJzOworCisgICAgaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisgICAgaWYgKGluZm9fZGlyID09IE5VTEwgfHwgKmluZm9fZGlyID09ICdcMCcpIHsKKwkqY29kZV9wdHIgPSBTU19FVF9OT19JTkZPX0RJUjsKKwlyZXR1cm47CisgICAgfQorICAgIGlmICgoZCA9IG9wZW5kaXIoaW5mb19kaXIpKSA9PSAoRElSICopTlVMTCkgeworCSpjb2RlX3B0ciA9IGVycm5vOworCXJldHVybjsKKyAgICB9CisgICAgY2xvc2VkaXIoZCk7CisgICAgZGlycyA9IGluZm8tPmluZm9fZGlyczsKKyAgICBmb3IgKG5fZGlycyA9IDA7IGRpcnNbbl9kaXJzXSAhPSAoY2hhciAqKU5VTEw7IG5fZGlycysrKQorCTsJCS8qIGdldCBudW1iZXIgb2Ygbm9uLU5VTEwgZGlyIGVudHJpZXMgKi8KKyAgICBkaXJzID0gKGNoYXIgKiopcmVhbGxvYygoY2hhciAqKWRpcnMsCisJCQkgICAgKHVuc2lnbmVkKShuX2RpcnMgKyAyKSpzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKGRpcnMgPT0gKGNoYXIgKiopTlVMTCkgeworCWluZm8tPmluZm9fZGlycyA9IChjaGFyICoqKU5VTEw7CisJKmNvZGVfcHRyID0gZXJybm87CisJcmV0dXJuOworICAgIH0KKyAgICBpbmZvLT5pbmZvX2RpcnMgPSBkaXJzOworICAgIGRpcnNbbl9kaXJzICsgMV0gPSAoY2hhciAqKU5VTEw7CisgICAgZGlyc1tuX2RpcnNdID0gbWFsbG9jKCh1bnNpZ25lZClzdHJsZW4oaW5mb19kaXIpKzEpOworICAgIHN0cmNweShkaXJzW25fZGlyc10sIGluZm9fZGlyKTsKKyAgICAqY29kZV9wdHIgPSAwOworfQorCit2b2lkIHNzX2RlbGV0ZV9pbmZvX2RpcihpbnQgc2NpX2lkeCwgY2hhciAqaW5mb19kaXIsIGludCAqY29kZV9wdHIpCit7CisgICAgcmVnaXN0ZXIgY2hhciAqKmlfZDsKKyAgICByZWdpc3RlciBjaGFyICoqaW5mb19kaXJzOworCisgICAgaW5mb19kaXJzID0gc3NfaW5mbyhzY2lfaWR4KS0+aW5mb19kaXJzOworICAgIGZvciAoaV9kID0gaW5mb19kaXJzOyAqaV9kOyBpX2QrKykgeworCWlmICghc3RyY21wKCppX2QsIGluZm9fZGlyKSkgeworCSAgICB3aGlsZSAoKmlfZCkgeworCQkqaV9kID0gKihpX2QrMSk7CisJCWlfZCsrOworCSAgICB9CisJICAgICpjb2RlX3B0ciA9IDA7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorICAgICpjb2RlX3B0ciA9IFNTX0VUX05PX0lORk9fRElSOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9pbnZvY2F0aW9uLmMgYi9lMmZzcHJvZ3MvbGliL3NzL2ludm9jYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzY2NmVjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9pbnZvY2F0aW9uLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmZGVmIEhBU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKyNkZWZpbmUJc2l6ZQlzaXplb2Yoc3NfZGF0YSAqKQorI2lmZGVmIEhBVkVfRExPUEVOCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludCBzc19jcmVhdGVfaW52b2NhdGlvbihjb25zdCBjaGFyICpzdWJzeXN0ZW1fbmFtZSwgY29uc3QgY2hhciAqdmVyc2lvbl9zdHJpbmcsCisJCQkgdm9pZCAqaW5mb19wdHIsIHNzX3JlcXVlc3RfdGFibGUgKnJlcXVlc3RfdGFibGVfcHRyLAorCQkJIGludCAqY29kZV9wdHIpCit7CisJcmVnaXN0ZXIgaW50IHNjaV9pZHg7CisJcmVnaXN0ZXIgc3NfZGF0YSAqbmV3X3RhYmxlOworCXJlZ2lzdGVyIHNzX2RhdGEgKip0YWJsZTsKKworCSpjb2RlX3B0ciA9IDA7CisJdGFibGUgPSBfc3NfdGFibGU7CisJbmV3X3RhYmxlID0gKHNzX2RhdGEgKikgbWFsbG9jKHNpemVvZihzc19kYXRhKSk7CisKKwlpZiAodGFibGUgPT0gKHNzX2RhdGEgKiopIE5VTEwpIHsKKwkJdGFibGUgPSAoc3NfZGF0YSAqKikgbWFsbG9jKDIgKiBzaXplKTsKKwkJdGFibGVbMF0gPSB0YWJsZVsxXSA9IChzc19kYXRhICopTlVMTDsKKwl9CisJaW5pdGlhbGl6ZV9zc19lcnJvcl90YWJsZSAoKTsKKworCWZvciAoc2NpX2lkeCA9IDE7IHRhYmxlW3NjaV9pZHhdICE9IChzc19kYXRhICopTlVMTDsgc2NpX2lkeCsrKQorCQk7CisJdGFibGUgPSAoc3NfZGF0YSAqKikgcmVhbGxvYygoY2hhciAqKXRhYmxlLAorCQkJCSAgICAgKCh1bnNpZ25lZClzY2lfaWR4KzIpKnNpemUpOworCWlmICh0YWJsZSA9PSBOVUxMKSB7CisJCSpjb2RlX3B0ciA9IGVycm5vOworCQlyZXR1cm4gMDsKKwl9CisJdGFibGVbc2NpX2lkeCsxXSA9IChzc19kYXRhICopIE5VTEw7CisJdGFibGVbc2NpX2lkeF0gPSBuZXdfdGFibGU7CisKKwluZXdfdGFibGUtPnN1YnN5c3RlbV9uYW1lID0gc3Vic3lzdGVtX25hbWU7CisJbmV3X3RhYmxlLT5zdWJzeXN0ZW1fdmVyc2lvbiA9IHZlcnNpb25fc3RyaW5nOworCW5ld190YWJsZS0+YXJndiA9IChjaGFyICoqKU5VTEw7CisJbmV3X3RhYmxlLT5jdXJyZW50X3JlcXVlc3QgPSAoY2hhciAqKU5VTEw7CisJbmV3X3RhYmxlLT5pbmZvX2RpcnMgPSAoY2hhciAqKiltYWxsb2Moc2l6ZW9mKGNoYXIgKikpOworCSpuZXdfdGFibGUtPmluZm9fZGlycyA9IChjaGFyICopTlVMTDsKKwluZXdfdGFibGUtPmluZm9fcHRyID0gaW5mb19wdHI7CisJbmV3X3RhYmxlLT5wcm9tcHQgPSBtYWxsb2MoKHVuc2lnbmVkKXN0cmxlbihzdWJzeXN0ZW1fbmFtZSkrNCk7CisJc3RyY3B5KG5ld190YWJsZS0+cHJvbXB0LCBzdWJzeXN0ZW1fbmFtZSk7CisJc3RyY2F0KG5ld190YWJsZS0+cHJvbXB0LCAiOiAgIik7CisjaWZkZWYgc2lsbHkKKwluZXdfdGFibGUtPmFiYnJldl9pbmZvID0gc3NfYWJicmV2X2luaXRpYWxpemUoIi9ldGMvcGFzc3dkIiwgY29kZV9wdHIpOworI2Vsc2UKKwluZXdfdGFibGUtPmFiYnJldl9pbmZvID0gTlVMTDsKKyNlbmRpZgorCW5ld190YWJsZS0+ZmxhZ3MuZXNjYXBlX2Rpc2FibGVkID0gMDsKKwluZXdfdGFibGUtPmZsYWdzLmFiYnJldnNfZGlzYWJsZWQgPSAwOworCW5ld190YWJsZS0+cnF0X3RhYmxlcyA9CisJCShzc19yZXF1ZXN0X3RhYmxlICoqKSBjYWxsb2MoMiwgc2l6ZW9mKHNzX3JlcXVlc3RfdGFibGUgKikpOworCSoobmV3X3RhYmxlLT5ycXRfdGFibGVzKSA9IHJlcXVlc3RfdGFibGVfcHRyOworCSoobmV3X3RhYmxlLT5ycXRfdGFibGVzKzEpID0gKHNzX3JlcXVlc3RfdGFibGUgKikgTlVMTDsKKworCW5ld190YWJsZS0+cmVhZGxpbmVfaGFuZGxlID0gMDsKKwluZXdfdGFibGUtPnJlYWRsaW5lX3NodXRkb3duID0gMDsKKwluZXdfdGFibGUtPnJlYWRsaW5lID0gMDsKKwluZXdfdGFibGUtPmFkZF9oaXN0b3J5ID0gMDsKKwluZXdfdGFibGUtPnJlZGlzcGxheSA9IDA7CisJbmV3X3RhYmxlLT5ybF9jb21wbGV0aW9uX21hdGNoZXMgPSAwOworCV9zc190YWJsZSA9IHRhYmxlOworI2lmIGRlZmluZWQoSEFWRV9ETE9QRU4pICYmIGRlZmluZWQoU0hBUkVEX0VMRl9MSUIpCisJc3NfZ2V0X3JlYWRsaW5lKHNjaV9pZHgpOworI2VuZGlmCisJcmV0dXJuKHNjaV9pZHgpOworfQorCit2b2lkCitzc19kZWxldGVfaW52b2NhdGlvbihpbnQgc2NpX2lkeCkKK3sKKwlyZWdpc3RlciBzc19kYXRhICp0OworCWludCBpZ25vcmVkX2NvZGU7CisKKwl0ID0gc3NfaW5mbyhzY2lfaWR4KTsKKwlmcmVlKHQtPnByb21wdCk7CisJZnJlZSh0LT5ycXRfdGFibGVzKTsKKwl3aGlsZSh0LT5pbmZvX2RpcnNbMF0gIT0gKGNoYXIgKilOVUxMKQorCQlzc19kZWxldGVfaW5mb19kaXIoc2NpX2lkeCwgdC0+aW5mb19kaXJzWzBdLCAmaWdub3JlZF9jb2RlKTsKKwlmcmVlKHQtPmluZm9fZGlycyk7CisjaWYgZGVmaW5lZChIQVZFX0RMT1BFTikgJiYgZGVmaW5lZChTSEFSRURfRUxGX0xJQikKKwlpZiAodC0+cmVhZGxpbmVfc2h1dGRvd24pCisJCSgqdC0+cmVhZGxpbmVfc2h1dGRvd24pKHQpOworI2VuZGlmCisJZnJlZSh0KTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3MvbGlzdF9ycXMuYyBiL2UyZnNwcm9ncy9saWIvc3MvbGlzdF9ycXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjA1MzRjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9saXN0X3Jxcy5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK3R5cGVkZWYgdm9pZCBzaWdyZXRfdDsKKworc3RhdGljIGNoYXIgY29uc3QgdHdlbnR5Zml2ZV9zcGFjZXNbMjZdID0KKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICI7CitzdGF0aWMgY2hhciBjb25zdCBOTFsyXSA9ICJcbiI7CisKK3ZvaWQgc3NfbGlzdF9yZXF1ZXN0cyhpbnQgYXJnYyBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisgICAgc3NfcmVxdWVzdF9lbnRyeSAqZW50cnk7CisgICAgY2hhciBjb25zdCAqIGNvbnN0ICpuYW1lOworICAgIGludCBzcGFjaW5nOworICAgIHNzX3JlcXVlc3RfdGFibGUgKip0YWJsZTsKKworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgRklMRSAqb3V0cHV0OworICAgIGludCBmZDsKKyAgICBzaWdzZXRfdCBvbWFzaywgaWdtYXNrOworICAgIHNpZ3JldF90ICgqZnVuYykoaW50KTsKKyNpZm5kZWYgTk9fRk9SSworICAgIGludCB3YWl0YjsKKyNlbmRpZgorCisgICAgc2lnZW1wdHlzZXQoJmlnbWFzayk7CisgICAgc2lnYWRkc2V0KCZpZ21hc2ssIFNJR0lOVCk7CisgICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmaWdtYXNrLCAmb21hc2spOworICAgIGZ1bmMgPSBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBmZCA9IHNzX3BhZ2VyX2NyZWF0ZSgpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgcGVycm9yKCJzc19wYWdlcl9jcmVhdGUiKTsKKyAgICAgICAgKHZvaWQpIHNpZ25hbChTSUdJTlQsIGZ1bmMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dHB1dCA9IGZkb3BlbihmZCwgInciKTsKKyAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9tYXNrLCAoc2lnc2V0X3QgKikgMCk7CisKKyAgICBmcHJpbnRmIChvdXRwdXQsICJBdmFpbGFibGUgJXMgcmVxdWVzdHM6XG5cbiIsCisJICAgICBzc19pbmZvIChzY2lfaWR4KSAtPiBzdWJzeXN0ZW1fbmFtZSk7CisKKyAgICBmb3IgKHRhYmxlID0gc3NfaW5mbyhzY2lfaWR4KS0+cnF0X3RhYmxlczsgKnRhYmxlOyB0YWJsZSsrKSB7CisgICAgICAgIGVudHJ5ID0gKCp0YWJsZSktPnJlcXVlc3RzOworICAgICAgICBmb3IgKDsgZW50cnktPmNvbW1hbmRfbmFtZXM7IGVudHJ5KyspIHsKKyAgICAgICAgICAgIHNwYWNpbmcgPSAtMjsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgICAgICBpZiAoZW50cnktPmZsYWdzICYgU1NfT1BUX0RPTlRfTElTVCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAobmFtZSA9IGVudHJ5LT5jb21tYW5kX25hbWVzOyAqbmFtZTsgbmFtZSsrKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbigqbmFtZSk7CisgICAgICAgICAgICAgICAgc3RybmNhdChidWZmZXIsICpuYW1lLCBsZW4pOworICAgICAgICAgICAgICAgIHNwYWNpbmcgKz0gbGVuICsgMjsKKyAgICAgICAgICAgICAgICBpZiAobmFtZVsxXSkgeworICAgICAgICAgICAgICAgICAgICBzdHJjYXQoYnVmZmVyLCAiLCAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BhY2luZyA+IDIzKSB7CisgICAgICAgICAgICAgICAgc3RyY2F0KGJ1ZmZlciwgTkwpOworICAgICAgICAgICAgICAgIGZwdXRzKGJ1ZmZlciwgb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBzcGFjaW5nID0gMDsKKyAgICAgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybmNhdChidWZmZXIsIHR3ZW50eWZpdmVfc3BhY2VzLCAyNS1zcGFjaW5nKTsKKyAgICAgICAgICAgIHN0cmNhdChidWZmZXIsIGVudHJ5LT5pbmZvX3N0cmluZyk7CisgICAgICAgICAgICBzdHJjYXQoYnVmZmVyLCBOTCk7CisgICAgICAgICAgICBmcHV0cyhidWZmZXIsIG91dHB1dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZmNsb3NlKG91dHB1dCk7CisjaWZuZGVmIE5PX0ZPUksKKyAgICB3YWl0KCZ3YWl0Yik7CisjZW5kaWYKKyAgICAodm9pZCkgc2lnbmFsKFNJR0lOVCwgZnVuYyk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL2xpc3Rlbi5jIGIvZTJmc3Byb2dzL2xpYi9zcy9saXN0ZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDdjOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9saXN0ZW4uYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIExpc3RlbmVyIGxvb3AgZm9yIHN1YnN5c3RlbSBsaWJyYXJ5IGxpYnNzLmEuCisgKgorICoJJEhlYWRlciQKKyAqCSRMb2NrZXIkCisgKgorICogQ29weXJpZ2h0IDE5ODcsIDE5ODggYnkgTUlUIFN0dWRlbnQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBCb2FyZAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK3R5cGVkZWYgdm9pZCBzaWdyZXRfdDsKKworc3RhdGljIHNzX2RhdGEgKmN1cnJlbnRfaW5mbzsKK3N0YXRpYyBqbXBfYnVmIGxpc3Rlbl9qbXBiOworc3RhdGljIHNpZ3JldF90ICgqc2lnX2NvbnQpKGludCk7CisKK3N0YXRpYyBzaWdyZXRfdCBwcmludF9wcm9tcHQoaW50IHNpZyBfX1NTX0FUVFIoKHVudXNlZCkpKQoreworICAgIGlmIChjdXJyZW50X2luZm8tPnJlZGlzcGxheSkKKwkgICAgKCpjdXJyZW50X2luZm8tPnJlZGlzcGxheSkoKTsKKyAgICBlbHNlIHsKKwkgICAgKHZvaWQpIGZwdXRzKGN1cnJlbnRfaW5mby0+cHJvbXB0LCBzdGRvdXQpOworCSAgICAodm9pZCkgZmZsdXNoKHN0ZG91dCk7CisgICAgfQorfQorCitzdGF0aWMgc2lncmV0X3QgbGlzdGVuX2ludF9oYW5kbGVyKGludCBzaWcgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICBwdXRjKCdcbicsIHN0ZG91dCk7CisgICAgc2lnbmFsKFNJR0lOVCwgbGlzdGVuX2ludF9oYW5kbGVyKTsKKyAgICBsb25nam1wKGxpc3Rlbl9qbXBiLCAxKTsKK30KKworaW50IHNzX2xpc3RlbiAoaW50IHNjaV9pZHgpCit7CisgICAgY2hhciAqY3A7CisgICAgc3NfZGF0YSAqaW5mbzsKKyAgICBzaWdyZXRfdCAoKnNpZ19pbnQpKGludCksICgqb2xkX3NpZ19jb250KShpbnQpOworICAgIGNoYXIgaW5wdXRbQlVGU0laXTsKKyAgICBzaWdzZXRfdCBvbWFzaywgaWdtYXNrOworICAgIGludCBjb2RlOworICAgIGptcF9idWYgb2xkX2ptcGI7CisgICAgc3NfZGF0YSAqb2xkX2luZm8gPSBjdXJyZW50X2luZm87CisgICAgY2hhciAqbGluZTsKKworICAgIGN1cnJlbnRfaW5mbyA9IGluZm8gPSBzc19pbmZvKHNjaV9pZHgpOworICAgIHNpZ19jb250ID0gKHNpZ3JldF90ICgqKShpbnQpKSAwOworICAgIGluZm8tPmFib3J0ID0gMDsKKyAgICBzaWdlbXB0eXNldCgmaWdtYXNrKTsKKyAgICBzaWdhZGRzZXQoJmlnbWFzaywgU0lHSU5UKTsKKyAgICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZpZ21hc2ssICZvbWFzayk7CisgICAgbWVtY3B5KG9sZF9qbXBiLCBsaXN0ZW5fam1wYiwgc2l6ZW9mKGptcF9idWYpKTsKKyAgICBzaWdfaW50ID0gc2lnbmFsKFNJR0lOVCwgbGlzdGVuX2ludF9oYW5kbGVyKTsKKyAgICBzZXRqbXAobGlzdGVuX2ptcGIpOworICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIChzaWdzZXRfdCAqKSAwKTsKKworICAgIHdoaWxlKCFpbmZvLT5hYm9ydCkgeworCW9sZF9zaWdfY29udCA9IHNpZ19jb250OworCXNpZ19jb250ID0gc2lnbmFsKFNJR0NPTlQsIHByaW50X3Byb21wdCk7CisJaWYgKHNpZ19jb250ID09IHByaW50X3Byb21wdCkKKwkgICAgc2lnX2NvbnQgPSBvbGRfc2lnX2NvbnQ7CisJaWYgKGluZm8tPnJlYWRsaW5lKSB7CisJCWxpbmUgPSAoKmluZm8tPnJlYWRsaW5lKShjdXJyZW50X2luZm8tPnByb21wdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRfcHJvbXB0KDApOworCQlpZiAoZmdldHMoaW5wdXQsIEJVRlNJWiwgc3RkaW4pID09IGlucHV0KQorCQkJbGluZSA9IGlucHV0OworCQllbHNlCisJCQlsaW5lID0gTlVMTDsKKworCQlpbnB1dFtCVUZTSVotMV0gPSAwOworCX0KKwlpZiAobGluZSA9PSBOVUxMKSB7CisJCWNvZGUgPSBTU19FVF9FT0Y7CisJCSh2b2lkKSBzaWduYWwoU0lHQ09OVCwgc2lnX2NvbnQpOworCQlnb3RvIGVncmVzczsKKwl9CisKKwljcCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKwlpZiAoY3ApIHsKKwkgICAgKmNwID0gJ1wwJzsKKwkgICAgaWYgKGNwID09IGxpbmUpCisJCWNvbnRpbnVlOworCX0KKwkodm9pZCkgc2lnbmFsKFNJR0NPTlQsIHNpZ19jb250KTsKKwlpZiAoaW5mby0+YWRkX2hpc3RvcnkpCisJCSgqaW5mby0+YWRkX2hpc3RvcnkpKGxpbmUpOworCisJY29kZSA9IHNzX2V4ZWN1dGVfbGluZSAoc2NpX2lkeCwgbGluZSk7CisJaWYgKGNvZGUgPT0gU1NfRVRfQ09NTUFORF9OT1RfRk9VTkQpIHsKKwkgICAgcmVnaXN0ZXIgY2hhciAqYyA9IGxpbmU7CisJICAgIHdoaWxlICgqYyA9PSAnICcgfHwgKmMgPT0gJ1x0JykKKwkJYysrOworCSAgICBjcCA9IHN0cmNociAoYywgJyAnKTsKKwkgICAgaWYgKGNwKQorCQkqY3AgPSAnXDAnOworCSAgICBjcCA9IHN0cmNociAoYywgJ1x0Jyk7CisJICAgIGlmIChjcCkKKwkJKmNwID0gJ1wwJzsKKwkgICAgc3NfZXJyb3IgKHNjaV9pZHgsIDAsCisJCSAgICAiVW5rbm93biByZXF1ZXN0IFwiJXNcIi4gIFR5cGUgXCI/XCIgZm9yIGEgcmVxdWVzdCBsaXN0LiIsCisJCSAgICAgICBjKTsKKwl9CisJaWYgKGluZm8tPnJlYWRsaW5lKQorCQlmcmVlKGxpbmUpOworICAgIH0KKyAgICBjb2RlID0gMDsKK2VncmVzczoKKyAgICAodm9pZCkgc2lnbmFsKFNJR0lOVCwgc2lnX2ludCk7CisgICAgbWVtY3B5KGxpc3Rlbl9qbXBiLCBvbGRfam1wYiwgc2l6ZW9mKGptcF9idWYpKTsKKyAgICBjdXJyZW50X2luZm8gPSBvbGRfaW5mbzsKKyAgICByZXR1cm4gY29kZTsKK30KKwordm9pZCBzc19hYm9ydF9zdWJzeXN0ZW0oaW50IHNjaV9pZHgsIGludCBjb2RlKQoreworICAgIHNzX2luZm8oc2NpX2lkeCktPmFib3J0ID0gMTsKKyAgICBzc19pbmZvKHNjaV9pZHgpLT5leGl0X3N0YXR1cyA9IGNvZGU7CisKK30KKwordm9pZCBzc19xdWl0KGludCBhcmdjIF9fU1NfQVRUUigodW51c2VkKSksCisJICAgICBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkgICAgIGludCBzY2lfaWR4LCBwb2ludGVyIGluZm9wIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisgICAgc3NfYWJvcnRfc3Vic3lzdGVtKHNjaV9pZHgsIDApOworfQorCisjaWZkZWYgSEFWRV9ETE9QRU4KKyNkZWZpbmUgZ2V0X3JlcXVlc3QodGJsLGlkeCkgICAgKCh0YmwpIC0+IHJlcXVlc3RzICsgKGlkeCkpCisKK3N0YXRpYyBjaGFyICpjbWRfZ2VuZXJhdG9yKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGF0ZSkKK3sKKwlzdGF0aWMgaW50CWxlbjsKKwlzdGF0aWMgc3NfcmVxdWVzdF90YWJsZSAqKnJxdGJsOworCXN0YXRpYyBpbnQJY3Vycl9ycXQ7CisJc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCAqIG5hbWU7CisJc3NfcmVxdWVzdF9lbnRyeSAqcmVxdWVzdDsKKwljaGFyCQkqcmV0OworCisJaWYgKHN0YXRlID09IDApIHsKKwkJbGVuID0gc3RybGVuKHRleHQpOworCQlycXRibCA9IGN1cnJlbnRfaW5mby0+cnF0X3RhYmxlczsKKwkJaWYgKCFycXRibCB8fCAhKnJxdGJsKQorCQkJcmV0dXJuIDA7CisJCWN1cnJfcnF0ID0gMDsKKwkJbmFtZSA9IDA7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFuYW1lIHx8ICEqbmFtZSkgeworCQkJcmVxdWVzdCA9IGdldF9yZXF1ZXN0KCpycXRibCwgY3Vycl9ycXQrKyk7CisJCQluYW1lID0gcmVxdWVzdC0+Y29tbWFuZF9uYW1lczsKKwkJCWlmICghbmFtZSkgeworCQkJCXJxdGJsKys7CisJCQkJaWYgKCpycXRibCkgeworCQkJCQljdXJyX3JxdCA9IDA7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoc3RybmNtcCgqbmFtZSwgdGV4dCwgbGVuKSA9PSAwKSB7CisJCQlyZXQgPSBtYWxsb2Moc3RybGVuKCpuYW1lKSsxKTsKKwkJCWlmIChyZXQpCisJCQkJc3RyY3B5KHJldCwgKm5hbWUpOworCQkJbmFtZSsrOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQluYW1lKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NoYXIgKipzc19ybF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwKKwkJCWludCBlbmQgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoKHN0YXJ0ID09IDApICYmIGN1cnJlbnRfaW5mby0+cmxfY29tcGxldGlvbl9tYXRjaGVzKQorCQlyZXR1cm4gKCpjdXJyZW50X2luZm8tPnJsX2NvbXBsZXRpb25fbWF0Y2hlcykKKwkJCSh0ZXh0LCBjbWRfZ2VuZXJhdG9yKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL21pdC1zaXBiLWNvcHlyaWdodC5oIGIvZTJmc3Byb2dzL2xpYi9zcy9taXQtc2lwYi1jb3B5cmlnaHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNmYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9taXQtc2lwYi1jb3B5cmlnaHQuaApAQCAtMCwwICsxLDE5IEBACisvKgorCitDb3B5cmlnaHQgMTk4NyBieSB0aGUgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisJb2YgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMKK2hlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlCithcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQKK3RoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwKK2FuZCB0aGF0IHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbgorb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KK00uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dAordGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMKK3Byb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKyovCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3MvbWtfY21kcy4xIGIvZTJmc3Byb2dzL2xpYi9zcy9ta19jbWRzLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2ZTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvbWtfY21kcy4xCkBAIC0wLDAgKzEsNTkgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlb2RvcmUgVHMnbworLlwiCisuVEggTUtfQ01EUyAxICIyMDAzIiBFMkZTUFJPR1MKKy5TSCBOQU1FCitta19jbWRzIFwtIGVycm9yIHRhYmxlIGNvbXBpbGVyCisuU0ggU1lOT1BTSVMKKy5CIG1rX2NtZHMKK2ZpbGUKKy5TSCBERVNDUklQVElPTgorLkIgTWtfY21kcworY29udmVydHMgYSB0YWJsZSBsaXN0aW5nIGNvbW1hbmQgbmFtZXMgYW5kIGFzc29jaWF0ZWQgaGVscCBtZXNzYWdlcworaW50byBhIEMgc291cmNlIGZpbGUgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZQorLklSIHNzICgzKQorbGlicmFyeS4KKworVGhlIHNvdXJjZSBmaWxlIG5hbWUgbXVzdCBlbmQgd2l0aCBhIHN1ZmZpeCBvZiBgYC5jdCcnOyB0aGUgZmlsZQorY29uc2lzdHMgb2YgYSBkZWNsYXJhdGlvbiBzdXBwbHlpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdGFibGU6CisKKy5CIGNvbW1hbmRfdGFibGUKKy5JIG5hbWUKKworZm9sbG93ZWQgYnkgZW50cmllcyBvZiB0aGUgZm9ybToKKworWworLkIgcmVxdWVzdAorfAorLkIgdW5pbXBsZW1lbnRlZAorXSAKKy5JIG5hbWUsCisiCisuSSBzdHJpbmcKKyJbLCBhYmJyZXZdLi4uOworCithbmQgYSBmaW5hbAorCisuQiBlbmQKKwordG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgdGFibGUuCisKK0EgQyBzb3VyY2UgZmlsZSBpcyBnZW5lcmF0ZWQgd2hpY2ggc2hvdWxkIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQKK3dpdGggdGhlIG9iamVjdCBmaWxlcyB1c2UgdGhlIHNzIGxpYnJhcnkuICAgCisKK0EgYGAjJycgaW4gdGhlIHNvdXJjZSBmaWxlIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50IGNoYXJhY3RlciwgYW5kIGFsbAorcmVtYWluaW5nIHRleHQgdG8gdGhlIGVuZCBvZiB0aGUgc291cmNlIGxpbmUgd2lsbCBiZSBpZ25vcmVkLgorCisuU0ggQlVHUworCitTaW5jZSB0aGUgb3JpZ2luYWwKKy5CIG1rX2NtZHMKK3VzZXMgYSB2ZXJ5IHNpbXBsZSBwYXJzZXIgYmFzZWQgb24KKy5JUiB5YWNjICgxKSwgCithbmQgdGhpcyBjdXJyZW50IHZlcnNpb24gb2YgCisuQiBta19jbWRzCit1c2VzIGFuIGF3ay9zZWQgY29tYmluYXRpb24gb2Ygc2NyaXB0cywgCitpdHMgZXJyb3IgcmVjb3ZlcnkgbGVhdmVzIG11Y2ggdG8gYmUgZGVzaXJlZC4KKworLlNIICJTRUUgQUxTTyIKK3NzICgzKQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL21rX2NtZHMuc2guaW4gYi9lMmZzcHJvZ3MvbGliL3NzL21rX2NtZHMuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyOTY2YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvbWtfY21kcy5zaC5pbgpAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKyMKKyMKKworZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorRElSPSIke0RJUi1AZGF0YWRpckAvc3N9IgorU1NfRElSPSJAU1NfRElSQCIKK0FXSz1AQVdLQAorU0VEPUBTRURACisKK2ZvciBhc192YXIgaW4gXAorICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAorICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICBMQ19URUxFUEhPTkUgTENfVElNRQorZG8KKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgZWxzZQorICAgICRhc191bnNldCAkYXNfdmFyCisgIGZpCitkb25lCisKK2lmIHRlc3QgIngkMSIgPSB4IDsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiBta19jbWRzIGZpbGUiCisgICAgZXhpdCAxCitmaQorCitpZiB0ZXN0IC1uICIkX1NTX0RJUl9PVkVSUklERSIgOyB0aGVuCisgICAgRElSPSIkX1NTX0RJUl9PVkVSUklERSI7CitmaQorCitpZiB0ZXN0ICEgLWYgJERJUi9jdF9jLnNlZCB8fCB0ZXN0ICEgLWYgJERJUi9jdF9jLmF3ayA7IHRoZW4KKyAgICBESVI9IiRTU19ESVIiCisjICAgIGVjaG8gIkZhbGxpbmcgYmFjayB0byAkRElSLi4uIgorICAgIGlmIHRlc3QgISAtZiAiJERJUi9jdF9jLnNlZCIgfHwgdGVzdCAhIC1mICIkRElSL2N0X2MuYXdrIiA7IHRoZW4KKwllY2hvICJta19jbWRzOiBDb3VsZG4ndCBmaW5kIG1rX2NtZHMncyB0ZW1wbGF0ZSBmaWxlcy4iCisJZXhpdCAxCisgICAgZmkKK2ZpCisKK0ZJTEU9IiQxIgorUk9PVD1gZWNobyAkMSB8IHNlZCAtZSBzLy5jdCQvL2AKK0JBU0U9YGJhc2VuYW1lICIkUk9PVCJgCitUTVA9ImN0JCQuYyIKKworaWYgdGVzdCAhIC1mICIkRklMRSIgOyB0aGVuCisgICAgZWNobyAibWtfY21kczogJEZJTEU6IEZpbGUgbm90IGZvdW5kIgorICAgIGV4aXQgMTsKK2ZpCisKKyR7U0VEfSAtZiAiJHtESVJ9L2N0X2Muc2VkIiAgIiR7RklMRX0iIFwKKwl8ICR7QVdLfSAtZiAiJHtESVJ9L2N0X2MuYXdrIiAicm9vdG5hbWU9JHtST09UfSIgIm91dGZpbGU9JHtUTVB9IiAtCisKK2lmIGdyZXAgIl4jX19FUlJPUl9JTl9GSUxFIiAiJHtUTVB9IiA+IC9kZXYvbnVsbDsgdGhlbgorCXJtICIke1RNUH0iCisJZXhpdCAxCitlbHNlCisJcm0gLWYgIiR7QkFTRX0uYyIKKwltdiAtZiAiJHtUTVB9IiAiJHtCQVNFfS5jIgorCWNobW9kIC13ICIke0JBU0V9LmMiCisJZXhpdCAwCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9wYWdlci5jIGIvZTJmc3Byb2dzL2xpYi9zcy9wYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMTQ5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL3BhZ2VyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBQYWdlcjogUm91dGluZXMgdG8gY3JlYXRlIGEgIm1vcmUiIHJ1bm5pbmcgb3V0IG9mIGEgcGFydGljdWxhciBmaWxlCisgKiBkZXNjcmlwdG9yLgorICoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWYgSEFWRV9TRUNVUkVfR0VURU5WCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2Vsc2UKK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYKKworI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbHNlCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZW5kaWYKKyNpZiAoIWRlZmluZWQoSEFWRV9QUkNUTCkgJiYgZGVmaW5lZChsaW51eCkpCisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorCitzdGF0aWMgY2hhciBNT1JFW10gPSAibW9yZSI7CitleHRlcm4gY2hhciAqZ2V0ZW52IFBST1RPVFlQRSgoY29uc3QgY2hhciAqKSk7CisKK2NoYXIgKnNzX3NhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSkpCisJCXJldHVybiBOVUxMOworI2lmIEhBVkVfUFJDVEwKKwlpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKyNlbHNlCisjaWYgKGRlZmluZWQobGludXgpICYmIGRlZmluZWQoU1lTX3ByY3RsKSkKKwlpZiAoc3lzY2FsbChTWVNfcHJjdGwsIFBSX0dFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIHNlY3VyZV9nZXRlbnYoYXJnKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fX1NFQ1VSRV9HRVRFTlYpCisJcmV0dXJuIF9fc2VjdXJlX2dldGVudihhcmcpOworI2Vsc2UKKwlyZXR1cm4gZ2V0ZW52KGFyZyk7CisjZW5kaWYKK30KKworLyoKKyAqIHRoaXMgbmVlZHMgYSAqbG90KiBvZiB3b3JrLi4uLgorICoKKyAqIHJ1biBpbiBzYW1lIHByb2Nlc3MKKyAqIGhhbmRsZSBTSUdJTlQgc2Vuc2libHkKKyAqIGFsbG93IGZpbmVyIGNvbnRyb2wgLS0gcHV0LXBhZ2UtYnJlYWstaGVyZQorICovCisKKyNpZm5kZWYgTk9fRk9SSworaW50IHNzX3BhZ2VyX2NyZWF0ZSh2b2lkKQoreworCWludCBmaWxlZGVzWzJdOworCisJaWYgKHBpcGUoZmlsZWRlcykgIT0gMCkKKwkJcmV0dXJuKC0xKTsKKworCXN3aXRjaChmb3JrKCkpIHsKKwljYXNlIC0xOgorCQlyZXR1cm4oLTEpOworCWNhc2UgMDoKKwkJLyoKKwkJICogQ2hpbGQ7IGR1cCByZWFkIGhhbGYgdG8gMCwgY2xvc2UgYWxsIGJ1dCAwLCAxLCBhbmQgMgorCQkgKi8KKwkJaWYgKGR1cDIoZmlsZWRlc1swXSwgMCkgPT0gLTEpCisJCQlleGl0KDEpOworCQlzc19wYWdlX3N0ZGluKCk7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogUGFyZW50OiAgY2xvc2UgInJlYWQiIHNpZGUgb2YgcGlwZSwgcmV0dXJuCisJCSAqICJ3cml0ZSIgc2lkZS4KKwkJICovCisJCSh2b2lkKSBjbG9zZShmaWxlZGVzWzBdKTsKKwkJcmV0dXJuKGZpbGVkZXNbMV0pOworCX0KK30KKyNlbHNlIC8qIGRvbid0IGZvcmsgKi8KK2ludCBzc19wYWdlcl9jcmVhdGUoKQoreworICAgIGludCBmZDsKKyAgICBmZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19XUk9OTFksIDApOworICAgIHJldHVybiBmZDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHdyaXRlX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3QgcmV0OworCWludCBjID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY291bnQgLT0gcmV0OworCQlidWYgKz0gcmV0OworCQljICs9IHJldDsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3ZvaWQgc3NfcGFnZV9zdGRpbih2b2lkKQoreworCWludCBpOworCXNpZ3NldF90IG1hc2s7CisKKwlmb3IgKGkgPSAzOyBpIDwgMzI7IGkrKykKKwkJKHZvaWQpIGNsb3NlKGkpOworCSh2b2lkKSBzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKKwlzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIDAsICZtYXNrKTsKKwlzaWdkZWxzZXQoJm1hc2ssIFNJR0lOVCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCAwKTsKKwlpZiAoX3NzX3BhZ2VyX25hbWUgPT0gKGNoYXIgKilOVUxMKSB7CisJCWlmICgoX3NzX3BhZ2VyX25hbWUgPSBzc19zYWZlX2dldGVudigiUEFHRVIiKSkgPT0gKGNoYXIgKilOVUxMKQorCQkJX3NzX3BhZ2VyX25hbWUgPSBNT1JFOworCX0KKwkodm9pZCkgZXhlY2xwKF9zc19wYWdlcl9uYW1lLCBfc3NfcGFnZXJfbmFtZSwgKGNoYXIgKikgTlVMTCk7CisJeworCQkvKiBtaW5pbWFsIHJlY292ZXJ5IGlmIHBhZ2VyIHByb2dyYW0gaXNuJ3QgZm91bmQgKi8KKwkJY2hhciBidWZbODBdOworCQlyZWdpc3RlciBpbnQgbjsKKwkJd2hpbGUgKChuID0gcmVhZCgwLCBidWYsIDgwKSkgPiAwKQorCQkJd3JpdGVfYWxsKDEsIGJ1Ziwgbik7CisJfQorCWV4aXQoZXJybm8pOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9wYXJzZS5jIGIvZTJmc3Byb2dzL2xpYi9zcy9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yjc2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL3BhcnNlLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmZGVmIEhBU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKworZW51bSBwYXJzZV9tb2RlIHsgV0hJVEVTUEFDRSwgVE9LRU4sIFFVT1RFRF9TVFJJTkcgfTsKKworLyoKKyAqIHBhcnNlKGxpbmVfcHRyLCBhcmdjX3B0cikKKyAqCisgKiBGdW5jdGlvbjoKKyAqICAgICAgUGFyc2VzIGxpbmUsIGRpdmlkaW5nIGF0IHdoaXRlc3BhY2UsIGludG8gdG9rZW5zLCByZXR1cm5zCisgKiAgICAgIHRoZSAiYXJnYyIgYW5kICJhcmd2IiB2YWx1ZXMuCisgKiBBcmd1bWVudHM6CisgKiAgICAgIGxpbmVfcHRyIChjaGFyICopCisgKiAgICAgICAgICAgICAgUG9pbnRlciB0byB0ZXh0IHN0cmluZyB0byBiZSBwYXJzZWQuCisgKiAgICAgIGFyZ2NfcHRyIChpbnQgKikKKyAqICAgICAgICAgICAgICBXaGVyZSB0byBwdXQgdGhlICJhcmdjIiAobnVtYmVyIG9mIHRva2VucykgdmFsdWUuCisgKiBSZXR1cm5zOgorICogICAgICBhcmd2IChjaGFyICoqKQorICogICAgICAgICAgICAgIFNlcmllcyBvZiBwb2ludGVycyB0byBwYXJzZWQgdG9rZW5zLgorICovCisKKyNkZWZpbmUgTkVXX0FSR1Yob2xkLG4pIChjaGFyICoqKXJlYWxsb2MoKGNoYXIgKilvbGQsXAorCQkJCQkgKHVuc2lnbmVkKShuKzIpKnNpemVvZihjaGFyKikpCisKK2NoYXIgKipzc19wYXJzZShpbnQgc2NpX2lkeCwgcmVnaXN0ZXIgY2hhciAqbGluZV9wdHIsIGludCAqYXJnY19wdHIpCit7CisgICAgcmVnaXN0ZXIgY2hhciAqKmFyZ3YsICpjcDsKKyAgICByZWdpc3RlciBpbnQgYXJnYzsKKyAgICByZWdpc3RlciBlbnVtIHBhcnNlX21vZGUgcGFyc2VfbW9kZTsKKworICAgIGFyZ3YgPSAoY2hhciAqKikgbWFsbG9jIChzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKGFyZ3YgPT0gKGNoYXIgKiopTlVMTCkgeworCXNzX2Vycm9yKHNjaV9pZHgsIGVycm5vLCAiQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSIpOworCSphcmdjX3B0ciA9IDA7CisJcmV0dXJuKGFyZ3YpOworICAgIH0KKyAgICAqYXJndiA9IChjaGFyICopTlVMTDsKKworICAgIGFyZ2MgPSAwOworCisgICAgcGFyc2VfbW9kZSA9IFdISVRFU1BBQ0U7CS8qIGZsdXNoaW5nIHdoaXRlc3BhY2UgKi8KKyAgICBjcCA9IGxpbmVfcHRyOwkJLyogY3AgaXMgZm9yIG91dHB1dCAqLworICAgIHdoaWxlICgxKSB7CisjaWZkZWYgREVCVUcKKwl7CisJICAgIHByaW50ZiAoImNoYXJhY3RlciBgJWMnLCBtb2RlICVkXG4iLCAqbGluZV9wdHIsIHBhcnNlX21vZGUpOworCX0KKyNlbmRpZgorCXdoaWxlIChwYXJzZV9tb2RlID09IFdISVRFU1BBQ0UpIHsKKwkgICAgaWYgKCpsaW5lX3B0ciA9PSAnXDAnKQorCQlnb3RvIGVuZF9vZl9saW5lOworCSAgICBpZiAoKmxpbmVfcHRyID09ICcgJyB8fCAqbGluZV9wdHIgPT0gJ1x0JykgeworCQlsaW5lX3B0cisrOworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoKmxpbmVfcHRyID09ICciJykgeworCQkvKiBnbyB0byBxdW90ZWQtc3RyaW5nIG1vZGUgKi8KKwkJcGFyc2VfbW9kZSA9IFFVT1RFRF9TVFJJTkc7CisJCWNwID0gbGluZV9wdHIrKzsKKwkJYXJndiA9IE5FV19BUkdWIChhcmd2LCBhcmdjKTsKKwkJYXJndlthcmdjKytdID0gY3A7CisJCWFyZ3ZbYXJnY10gPSBOVUxMOworCSAgICB9CisJICAgIGVsc2UgeworCQkvKiByYW5kb20tdG9rZW4gbW9kZSAqLworCQlwYXJzZV9tb2RlID0gVE9LRU47CisJCWNwID0gbGluZV9wdHI7CisJCWFyZ3YgPSBORVdfQVJHViAoYXJndiwgYXJnYyk7CisJCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJCSphcmdjX3B0ciA9IGVycm5vOworCQkJcmV0dXJuIGFyZ3Y7CisJCX0KKwkJYXJndlthcmdjKytdID0gbGluZV9wdHI7CisJCWFyZ3ZbYXJnY10gPSBOVUxMOworCSAgICB9CisJfQorCXdoaWxlIChwYXJzZV9tb2RlID09IFRPS0VOKSB7CisJICAgIGlmICgqbGluZV9wdHIgPT0gJ1wwJykgeworCQkqY3ArKyA9ICdcMCc7CisJCWdvdG8gZW5kX29mX2xpbmU7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKmxpbmVfcHRyID09ICcgJyB8fCAqbGluZV9wdHIgPT0gJ1x0JykgeworCQkqY3ArKyA9ICdcMCc7CisJCWxpbmVfcHRyKys7CisJCXBhcnNlX21vZGUgPSBXSElURVNQQUNFOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpsaW5lX3B0ciA9PSAnIicpIHsKKwkJbGluZV9wdHIrKzsKKwkJcGFyc2VfbW9kZSA9IFFVT1RFRF9TVFJJTkc7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCSpjcCsrID0gKmxpbmVfcHRyKys7CisJICAgIH0KKwl9CisJd2hpbGUgKHBhcnNlX21vZGUgPT0gUVVPVEVEX1NUUklORykgeworCSAgICBpZiAoKmxpbmVfcHRyID09ICdcMCcpIHsKKwkJc3NfZXJyb3IgKHNjaV9pZHgsIDAsCisJCQkgICJVbmJhbGFuY2VkIHF1b3RlcyBpbiBjb21tYW5kIGxpbmUiKTsKKwkJZnJlZSAoYXJndik7CisJCSphcmdjX3B0ciA9IDA7CisJCXJldHVybiBOVUxMOworCSAgICB9CisJICAgIGVsc2UgaWYgKCpsaW5lX3B0ciA9PSAnIicpIHsKKwkJaWYgKCorK2xpbmVfcHRyID09ICciJykgeworCQkgICAgKmNwKysgPSAnIic7CisJCSAgICBsaW5lX3B0cisrOworCQl9CisJCWVsc2UgeworCQkgICAgcGFyc2VfbW9kZSA9IFRPS0VOOworCQl9CisJICAgIH0KKwkgICAgZWxzZSB7CisJCSpjcCsrID0gKmxpbmVfcHRyKys7CisJICAgIH0KKwl9CisgICAgfQorZW5kX29mX2xpbmU6CisgICAgKmFyZ2NfcHRyID0gYXJnYzsKKyNpZmRlZiBERUJVRworICAgIHsKKwlpbnQgaTsKKwlwcmludGYgKCJhcmdjID0gJWRcbiIsIGFyZ2MpOworCWZvciAoaSA9IDA7IGkgPD0gYXJnYzsgaSsrKQorCSAgICBwcmludGYgKCJcdGFyZ3ZbJTJkXSA9IGAlcydcbiIsIGksCisJCSAgICBhcmd2W2ldID8gYXJndltpXSA6ICI8TlVMTD4iKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4oYXJndik7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL3Byb21wdC5jIGIvZTJmc3Byb2dzL2xpYi9zcy9wcm9tcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU0MjYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9wcm9tcHQuYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogcHJvbXB0LmM6IFJvdXRpbmVzIGZvciByZXRyaWV2aW5nIGFuZCBzZXR0aW5nIGEgcHJvbXB0LgorICoKKyAqICRIZWFkZXIkCisgKiAkTG9ja2VyJAorICoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJzc19pbnRlcm5hbC5oIgorCit2b2lkIHNzX3NldF9wcm9tcHQoaW50IHNjaV9pZHgsIGNoYXIgKm5ld19wcm9tcHQpCit7CisgICAgIHNzX2luZm8oc2NpX2lkeCktPnByb21wdCA9IG5ld19wcm9tcHQ7Cit9CisKK2NoYXIgKnNzX2dldF9wcm9tcHQoaW50IHNjaV9pZHgpCit7CisgICAgIHJldHVybihzc19pbmZvKHNjaV9pZHgpLT5wcm9tcHQpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy9yZXF1ZXN0X3RibC5jIGIvZTJmc3Byb2dzL2xpYi9zcy9yZXF1ZXN0X3RibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Y2I0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL3JlcXVlc3RfdGJsLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic3NfaW50ZXJuYWwuaCIKKworI2RlZmluZSBzc3J0IHNzX3JlcXVlc3RfdGFibGUJLyogZm9yIHNvbWUgcmVhZGFibGUgY29kZS4uLiAqLworCit2b2lkIHNzX2FkZF9yZXF1ZXN0X3RhYmxlKGludCBzY2lfaWR4LCBzc3J0ICpycXRibF9wdHIsIGludCBwb3NpdGlvbiwgaW50ICpjb2RlX3B0cikKK3sKKwlyZWdpc3RlciBzc19kYXRhICppbmZvOworCXJlZ2lzdGVyIGludCBpLCBzaXplOworCXNzcnQgKip0OworCisJaW5mbyA9IHNzX2luZm8oc2NpX2lkeCk7CisJZm9yIChzaXplPTA7IGluZm8tPnJxdF90YWJsZXNbc2l6ZV0gIT0gKHNzcnQgKilOVUxMOyBzaXplKyspCisJCTsKKwkvKiBzaXplID09IEMgc3Vic2NyaXB0IG9mIE5VTEwgPT0gI2VsZW1lbnRzICovCisJc2l6ZSArPSAyOwkJLyogbmV3IGVsZW1lbnQsIGFuZCBOVUxMICovCisJdCA9IChzc3J0ICoqKXJlYWxsb2MoaW5mby0+cnF0X3RhYmxlcywgKHVuc2lnbmVkKXNpemUqc2l6ZW9mKHNzcnQgKikpOworCWlmICh0ID09IChzc3J0ICoqKU5VTEwpIHsKKwkJKmNvZGVfcHRyID0gZXJybm87CisJCXJldHVybjsKKwl9CisJaW5mby0+cnF0X3RhYmxlcyA9IHQ7CisJaWYgKHBvc2l0aW9uID4gc2l6ZSAtIDIpCisJCXBvc2l0aW9uID0gc2l6ZSAtIDI7CisKKwlpZiAoc2l6ZSA+IDEpCisJCWZvciAoaSA9IHNpemUgLSAyOyBpID49IHBvc2l0aW9uOyBpLS0pCisJCQlpbmZvLT5ycXRfdGFibGVzW2krMV0gPSBpbmZvLT5ycXRfdGFibGVzW2ldOworCisJaW5mby0+cnF0X3RhYmxlc1twb3NpdGlvbl0gPSBycXRibF9wdHI7CisJaW5mby0+cnF0X3RhYmxlc1tzaXplLTFdID0gKHNzcnQgKilOVUxMOworCSpjb2RlX3B0ciA9IDA7Cit9CisKK3ZvaWQgc3NfZGVsZXRlX3JlcXVlc3RfdGFibGUoaW50IHNjaV9pZHgsIHNzcnQgKnJxdGJsX3B0ciwgaW50ICpjb2RlX3B0cikKK3sKKyAgICAgcmVnaXN0ZXIgc3NfZGF0YSAqaW5mbzsKKyAgICAgcmVnaXN0ZXIgc3NydCAqKnJ0MSwgKipydDI7CisKKyAgICAgKmNvZGVfcHRyID0gU1NfRVRfVEFCTEVfTk9UX0ZPVU5EOworICAgICBpbmZvID0gc3NfaW5mbyhzY2lfaWR4KTsKKyAgICAgcnQxID0gaW5mby0+cnF0X3RhYmxlczsKKyAgICAgZm9yIChydDIgPSBydDE7ICpydDE7IHJ0MSsrKSB7CisJICBpZiAoKnJ0MSAhPSBycXRibF9wdHIpIHsKKwkgICAgICAgKnJ0MisrID0gKnJ0MTsKKwkgICAgICAgKmNvZGVfcHRyID0gMDsKKwkgIH0KKyAgICAgfQorICAgICAqcnQyID0gKHNzcnQgKilOVUxMOworICAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL3JlcXVlc3RzLmMgYi9lMmZzcHJvZ3MvbGliL3NzL3JlcXVlc3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwNjEwMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3MvcmVxdWVzdHMuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogVmFyaW91cyBtaW5vciByb3V0aW5lcy4uLgorICoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4LCAxOTg5IGJ5IE1JVAorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBuYW1lcyBvZiBNLkkuVC4gYW5kIHRoZSBNLkkuVC4gUy5JLlAuQi4gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyAqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBhbmQgdGhlCisgKiBNLkkuVC4gUy5JLlAuQi4gbWFrZSBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCisgKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorICogZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInNzX2ludGVybmFsLmgiCisKKyNkZWZpbmUJREVDTEFSRShuYW1lKSB2b2lkIG5hbWUoaW50IGFyZ2MsY29uc3QgY2hhciAqIGNvbnN0ICphcmd2LCBcCisJCQkJaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKQorCisvKgorICogc3Nfc2VsZl9pZGVudGlmeSAtLSBhc3NpZ25lZCBieSBkZWZhdWx0IHRvIHRoZSAiLiIgcmVxdWVzdAorICovCit2b2lkIHNzX3NlbGZfaWRlbnRpZnkoaW50IGFyZ2MgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkJICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2IF9fU1NfQVRUUigodW51c2VkKSksCisJCSAgICAgIGludCBzY2lfaWR4LCB2b2lkICppbmZvcCBfX1NTX0FUVFIoKHVudXNlZCkpKQoreworICAgICByZWdpc3RlciBzc19kYXRhICppbmZvID0gc3NfaW5mbyhzY2lfaWR4KTsKKyAgICAgcHJpbnRmKCIlcyB2ZXJzaW9uICVzXG4iLCBpbmZvLT5zdWJzeXN0ZW1fbmFtZSwKKwkgICAgaW5mby0+c3Vic3lzdGVtX3ZlcnNpb24pOworfQorCisvKgorICogc3Nfc3Vic3lzdGVtX25hbWUgLS0gcHJpbnQgbmFtZSBvZiBzdWJzeXN0ZW0KKyAqLwordm9pZCBzc19zdWJzeXN0ZW1fbmFtZShpbnQgYXJnYyBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2IF9fU1NfQVRUUigodW51c2VkKSksCisJCSAgICAgICBpbnQgc2NpX2lkeCwKKwkJICAgICAgIHZvaWQgKmluZm9wIF9fU1NfQVRUUigodW51c2VkKSkpCit7CisgICAgIHByaW50ZigiJXNcbiIsIHNzX2luZm8oc2NpX2lkeCktPnN1YnN5c3RlbV9uYW1lKTsKK30KKworLyoKKyAqIHNzX3N1YnN5c3RlbV92ZXJzaW9uIC0tIHByaW50IHZlcnNpb24gb2Ygc3Vic3lzdGVtCisgKi8KK3ZvaWQgc3Nfc3Vic3lzdGVtX3ZlcnNpb24oaW50IGFyZ2MgX19TU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2IF9fU1NfQVRUUigodW51c2VkKSksCisJCQkgIGludCBzY2lfaWR4LAorCQkJICB2b2lkICppbmZvcCBfX1NTX0FUVFIoKHVudXNlZCkpKQoreworICAgICBwcmludGYoIiVzXG4iLCBzc19pbmZvKHNjaV9pZHgpLT5zdWJzeXN0ZW1fdmVyc2lvbik7Cit9CisKKy8qCisgKiBzc191bmltcGxlbWVudGVkIC0tIHJvdXRpbmUgbm90IGltcGxlbWVudGVkIChzaG91bGQgYmUKKyAqIHNldCB1cCBhcyAoZG9udF9saXN0LGRvbnRfc3VtbWFyaXplKSkKKyAqLwordm9pZCBzc191bmltcGxlbWVudGVkKGludCBhcmdjIF9fU1NfQVRUUigodW51c2VkKSksCisJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiBfX1NTX0FUVFIoKHVudXNlZCkpLAorCQkgICAgICBpbnQgc2NpX2lkeCwgdm9pZCAqaW5mb3AgX19TU19BVFRSKCh1bnVzZWQpKSkKK3sKKyAgICAgc3NfcGVycm9yKHNjaV9pZHgsIFNTX0VUX1VOSU1QTEVNRU5URUQsICIiKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3Mvc3MuaCBiL2UyZnNwcm9ncy9saWIvc3Mvc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzMzZmZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9zcy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogVGhpcyBxdW90ZSBpcyBqdXN0IHRvbyBnb29kIHRvIG5vdCBwYXNzIG9uOgorICoKKyAqIAkiQlRXLCBJIHdvdWxkIGhhdmUgcmVqZWN0ZWQgdGhlIG5hbWUgU3RvcnkgU2VydmVyIGJlY2F1c2UgaXRzCisgKiAJaW5pdGlhbHMgYXJlIFNTLCB0aGUgbmFtZSBvZiB0aGUgc2VjcmV0IHBvbGljZSBpbiBOYXppCisgKiAJR2VybWFueSwgcHJvYmFibHkgdGhlIG1vc3QgZGVzcGlzZWQgcGFpciBvZiBsZXR0ZXJzIGluIHdlc3Rlcm4KKyAqIAljdWx0dXJlLiIgIC0tLSBodHRwOi8vc2NyaXB0aW5nbmV3c2FyY2hpdmUudXNlcmxhbmQuY29tLzE5OTkvMTIvMTMKKyAqCisgKiBMZXQgbm8gb25lIHNheSBwb2xpdGljYWwgY29ycmVjdG5lc3MgaXNuJ3QgZGVhZC4uLi4KKyAqLworCisjaWZuZGVmIF9zc19oCisjZGVmaW5lIF9zc19oIF9fRklMRV9fCisKKyNpbmNsdWRlIDxzcy9zc19lcnIuaD4KKworI2RlZmluZSBfX1NTX0NPTlNUIGNvbnN0CisjZGVmaW5lIF9fU1NfUFJPVE8gKGludCwgY29uc3QgY2hhciAqIGNvbnN0ICosIGludCwgdm9pZCAqKQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgX19TU19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIF9fU1NfQVRUUih4KQorI2VuZGlmCisKKwordHlwZWRlZiBfX1NTX0NPTlNUIHN0cnVjdCBfc3NfcmVxdWVzdF9lbnRyeSB7CisgICAgX19TU19DT05TVCBjaGFyICogX19TU19DT05TVCAqY29tbWFuZF9uYW1lczsgLyogd2hhdGV2ZXIgKi8KKyAgICB2b2lkICgqIF9fU1NfQ09OU1QgZnVuY3Rpb24pIF9fU1NfUFJPVE87IC8qIGZvbyAqLworICAgIF9fU1NfQ09OU1QgY2hhciAqIF9fU1NfQ09OU1QgaW5mb19zdHJpbmc7CS8qIE5VTEwgKi8KKyAgICBpbnQgZmxhZ3M7CQkJLyogMCAqLworfSBzc19yZXF1ZXN0X2VudHJ5OworCit0eXBlZGVmIF9fU1NfQ09OU1Qgc3RydWN0IF9zc19yZXF1ZXN0X3RhYmxlIHsKKyAgICBpbnQgdmVyc2lvbjsKKyAgICBzc19yZXF1ZXN0X2VudHJ5ICpyZXF1ZXN0czsKK30gc3NfcmVxdWVzdF90YWJsZTsKKworI2RlZmluZSBTU19SUVRfVEJMX1YyCTIKKwordHlwZWRlZiBzdHJ1Y3QgX3NzX3JwX29wdGlvbnMgewkvKiBERUZBVUxUIFZBTFVFUyAqLworICAgIGludCB2ZXJzaW9uOwkJLyogU1NfUlBfVjEgKi8KKyAgICB2b2lkICgqdW5rbm93bikgX19TU19QUk9UTzsJLyogY2FsbCBmb3IgdW5rbm93biBjb21tYW5kICovCisgICAgaW50IGFsbG93X3N1c3BlbmQ7CisgICAgaW50IGNhdGNoX2ludDsKK30gc3NfcnBfb3B0aW9uczsKKworI2RlZmluZSBTU19SUF9WMSAxCisKKyNkZWZpbmUgU1NfT1BUX0RPTlRfTElTVAkweDAwMDEKKyNkZWZpbmUgU1NfT1BUX0RPTlRfU1VNTUFSSVpFCTB4MDAwMgorCit2b2lkIHNzX2hlbHAgX19TU19QUk9UTzsKKyNpZiAwCitjaGFyICpzc19jdXJyZW50X3JlcXVlc3QoKTsJLyogVGhpcyBpcyBhY3R1YWxseSBhIG1hY3JvICovCisjZW5kaWYKKworY2hhciAqc3NfbmFtZShpbnQgc2NpX2lkeCk7Cit2b2lkIHNzX2Vycm9yIChpbnQsIGxvbmcsIGNoYXIgY29uc3QgKiwgLi4uKQorCV9fU1NfQVRUUigoZm9ybWF0KHByaW50ZiwgMywgNCkpKTsKK3ZvaWQgc3NfcGVycm9yIChpbnQsIGxvbmcsIGNoYXIgY29uc3QgKik7CisKK2ludCBzc19jcmVhdGVfaW52b2NhdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkJIHNzX3JlcXVlc3RfdGFibGUgKiwgaW50ICopOwordm9pZCBzc19kZWxldGVfaW52b2NhdGlvbihpbnQpOworaW50IHNzX2xpc3RlbihpbnQpOworaW50IHNzX2V4ZWN1dGVfbGluZShpbnQsIGNoYXIgKik7Cit2b2lkIHNzX2FkZF9yZXF1ZXN0X3RhYmxlKGludCwgc3NfcmVxdWVzdF90YWJsZSAqLCBpbnQsIGludCAqKTsKK3ZvaWQgc3NfZGVsZXRlX3JlcXVlc3RfdGFibGUoaW50LCBzc19yZXF1ZXN0X3RhYmxlICosIGludCAqKTsKK3ZvaWQgc3NfYWJvcnRfc3Vic3lzdGVtKGludCBzY2lfaWR4LCBpbnQgY29kZSk7Cit2b2lkIHNzX3F1aXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKTsKK3ZvaWQgc3Nfc2VsZl9pZGVudGlmeShpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2LCBpbnQgc2NpX2lkeCwgdm9pZCAqaW5mb3ApOwordm9pZCBzc19zdWJzeXN0ZW1fbmFtZShpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2LAorCQkgICAgICAgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKTsKK3ZvaWQgc3Nfc3Vic3lzdGVtX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndiwKKwkJCSAgaW50IHNjaV9pZHgsIHZvaWQgKmluZm9wKTsKK3ZvaWQgc3NfdW5pbXBsZW1lbnRlZChpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2LAorCQkgICAgICBpbnQgc2NpX2lkeCwgdm9pZCAqaW5mb3ApOwordm9pZCBzc19zZXRfcHJvbXB0KGludCBzY2lfaWR4LCBjaGFyICpuZXdfcHJvbXB0KTsKK2NoYXIgKnNzX2dldF9wcm9tcHQoaW50IHNjaV9pZHgpOwordm9pZCBzc19nZXRfcmVhZGxpbmUoaW50IHNjaV9pZHgpOworY2hhciAqc3Nfc2FmZV9nZXRlbnYoY29uc3QgY2hhciAqYXJnKTsKKworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgc3Nfc3RkX3JlcXVlc3RzOworI2VuZGlmIC8qIF9zc19oICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL3NzLnBjLmluIGIvZTJmc3Byb2dzL2xpYi9zcy9zcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzllY2NiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9zcy5wYy5pbgpAQCAtMCwwICsxLDEyIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogc3MKK0Rlc2NyaXB0aW9uOiBTdWJzeXN0ZW0gY29tbWFuZCBwYXJzaW5nIGxpYnJhcnkKK1ZlcnNpb246IEBFMkZTUFJPR1NfVkVSU0lPTkAKK1JlcXVpcmVzLnByaXZhdGU6IGNvbV9lcnIKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L3NzIC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWxzcworTGlicy5wcml2YXRlOiBARExPUEVOX0xJQkAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3Mvc3NfZXJyLmV0IGIvZTJmc3Byb2dzL2xpYi9zcy9zc19lcnIuZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlOWRmYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3Mvc3NfZXJyLmV0CkBAIC0wLDAgKzEsMzkgQEAKKwllcnJvcl90YWJsZSBzcworCitlYwlTU19FVF9TVUJTWVNURU1fQUJPUlRFRCwKKwkiU3Vic3lzdGVtIGFib3J0ZWQiCisKK2VjCVNTX0VUX1ZFUlNJT05fTUlTTUFUQ0gsCisJIlZlcnNpb24gbWlzbWF0Y2giCisKK2VjCVNTX0VUX05VTExfSU5WLAorCSJObyBjdXJyZW50IGludm9jYXRpb24iCisKK2VjCVNTX0VUX05PX0lORk9fRElSLAorCSJObyBpbmZvIGRpcmVjdG9yeSIKKworZWMJU1NfRVRfQ09NTUFORF9OT1RfRk9VTkQsCisJIkNvbW1hbmQgbm90IGZvdW5kIgorCitlYwlTU19FVF9MSU5FX0FCT1JURUQsCisJIkNvbW1hbmQgbGluZSBhYm9ydGVkIgorCitlYwlTU19FVF9FT0YsCisJIkVuZC1vZi1maWxlIHJlYWNoZWQiCisKK2VjCVNTX0VUX1BFUk1JU1NJT05fREVOSUVELAorCSJQZXJtaXNzaW9uIGRlbmllZCIKKworZWMJU1NfRVRfVEFCTEVfTk9UX0ZPVU5ELAorCSJSZXF1ZXN0IHRhYmxlIG5vdCBmb3VuZCIKKworZWMJU1NfRVRfTk9fSEVMUF9GSUxFLAorCSJObyBpbmZvIGF2YWlsYWJsZSIKKworZWMJU1NfRVRfRVNDQVBFX0RJU0FCTEVELAorCSJTaGVsbCBlc2NhcGVzIGFyZSBkaXNhYmxlZCIKKworZWMJU1NfRVRfVU5JTVBMRU1FTlRFRCwKKwkiU29ycnksIHRoaXMgcmVxdWVzdCBpcyBub3QgeWV0IGltcGxlbWVudGVkIgorCisJZW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL3NzX2ludGVybmFsLmggYi9lMmZzcHJvZ3MvbGliL3NzL3NzX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhNmJlNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvc3Mvc3NfaW50ZXJuYWwuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTg3LCAxOTg4IGJ5IE1JVCBTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgbmFtZXMgb2YgTS5JLlQuIGFuZCB0aGUgTS5JLlQuIFMuSS5QLkIuIG5vdCBiZSB1c2VkIGluCisgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlCisgKiB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gYW5kIHRoZQorICogTS5JLlQuIFMuSS5QLkIuIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaWZuZGVmIF9zc19zc19pbnRlcm5hbF9oCisjZGVmaW5lIF9zc19zc19pbnRlcm5hbF9oIF9fRklMRV9fCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBQUk9UT1RZUEUocCkgcAordHlwZWRlZiB2b2lkICogcG9pbnRlcjsKKworI2luY2x1ZGUgInNzLmgiCisKK3R5cGVkZWYgY2hhciBCT09MOworCit0eXBlZGVmIHN0cnVjdCBfc3NfYWJicmV2X2VudHJ5IHsKKyAgICBjaGFyICpuYW1lOwkJCS8qIGFiYnJldiBuYW1lICovCisgICAgY2hhciAqKmFiYnJldjsJCS8qIG5ldyB0b2tlbnMgdG8gaW5zZXJ0ICovCisgICAgdW5zaWduZWQgaW50IGJlZ2lubmluZ19vZl9saW5lIDogMTsKK30gc3NfYWJicmV2X2VudHJ5OworCit0eXBlZGVmIHN0cnVjdCBfc3NfYWJicmV2X2xpc3QgeworICAgIGludCBuX2FiYnJldnM7CisgICAgc3NfYWJicmV2X2VudHJ5ICpmaXJzdF9hYmJyZXY7Cit9IHNzX2FiYnJldl9saXN0OworCit0eXBlZGVmIHN0cnVjdCB7CisvKiAgICBjaGFyICpwYXRoOyAqLworICAgIHNzX2FiYnJldl9saXN0IGFiYnJldnNbMTI3XTsKK30gc3NfYWJicmV2X2luZm87CisKK3R5cGVkZWYgc3RydWN0IF9zc19kYXRhIHsJLyogaW5pdCB2YWx1ZXMgKi8KKyAgICAvKiB0aGlzIHN1YnN5c3RlbSAqLworICAgIGNvbnN0IGNoYXIgKnN1YnN5c3RlbV9uYW1lOworICAgIGNvbnN0IGNoYXIgKnN1YnN5c3RlbV92ZXJzaW9uOworICAgIC8qIGN1cnJlbnQgcmVxdWVzdCBpbmZvICovCisgICAgaW50IGFyZ2M7CisgICAgY2hhciAqKmFyZ3Y7CQkvKiBhcmcgbGlzdCAqLworICAgIGNoYXIgY29uc3QgKmN1cnJlbnRfcmVxdWVzdDsgLyogcHJpbWFyeSBuYW1lICovCisgICAgLyogaW5mbyBkaXJlY3RvcnkgZm9yICdoZWxwJyAqLworICAgIGNoYXIgKippbmZvX2RpcnM7CisgICAgLyogdG8gYmUgZXh0cmFjdGVkIGJ5IHN1YnJvdXRpbmVzICovCisgICAgcG9pbnRlciBpbmZvX3B0cjsJCS8qICh2b2lkICopIE5VTEwgKi8KKyAgICAvKiBmb3Igc3NfbGlzdGVuIHByb2Nlc3NpbmcgKi8KKyAgICBjaGFyICpwcm9tcHQ7CisgICAgc3NfcmVxdWVzdF90YWJsZSAqKnJxdF90YWJsZXM7CisgICAgc3NfYWJicmV2X2luZm8gKmFiYnJldl9pbmZvOworICAgIHN0cnVjdCB7CisJdW5zaWduZWQgaW50ICBlc2NhcGVfZGlzYWJsZWQgOiAxLAorCQkgICAgICBhYmJyZXZzX2Rpc2FibGVkIDogMTsKKyAgICB9IGZsYWdzOworICAgIC8qCisgICAgICogRHluYW1pYyB1c2FnZSBvZiByZWFkbGluZSBsaWJyYXJ5IGlmIHByZXNlbnQKKyAgICAgKi8KKyAgICB2b2lkICpyZWFkbGluZV9oYW5kbGU7CisgICAgdm9pZCAoKnJlYWRsaW5lX3NodXRkb3duKShzdHJ1Y3QgX3NzX2RhdGEgKmluZm8pOworICAgIGNoYXIgKigqcmVhZGxpbmUpKGNvbnN0IGNoYXIgKik7CisgICAgdm9pZCAoKmFkZF9oaXN0b3J5KShjb25zdCBjaGFyICopOworICAgIHZvaWQgKCpyZWRpc3BsYXkpKHZvaWQpOworICAgIGNoYXIgKiooKnJsX2NvbXBsZXRpb25fbWF0Y2hlcykoY29uc3QgY2hhciAqLAorCQkJCSAgICBjaGFyICooKmNvbXBsZXRlcikoY29uc3QgY2hhciAqLCBpbnQpKTsKKyAgICAvKiB0byBnZXQgb3V0ICovCisgICAgaW50IGFib3J0OwkJCS8qIGV4aXQgc3Vic3lzdGVtICovCisgICAgaW50IGV4aXRfc3RhdHVzOworfSBzc19kYXRhOworCisjZGVmaW5lIENVUlJFTlRfU1NfVkVSU0lPTiAxCisKKyNkZWZpbmUJc3NfaW5mbyhzY2lfaWR4KQkoX3NzX3RhYmxlW3NjaV9pZHhdKQorI2RlZmluZQlzc19jdXJyZW50X3JlcXVlc3Qoc2NpX2lkeCxjb2RlX3B0cikJXAorICAgICAoKmNvZGVfcHRyPTAsc3NfaW5mbyhzY2lfaWR4KS0+Y3VycmVudF9yZXF1ZXN0KQordm9pZCBzc19hZGRfaW5mb19kaXIgKGludCBzY2lfaWR4LCBjaGFyICppbmZvX2RpciwgaW50ICpjb2RlX3B0cik7Cit2b2lkIHNzX2RlbGV0ZV9pbmZvX2RpciAoaW50IHNjaV9pZHgsIGNoYXIgKmluZm9fZGlyLCBpbnQgKmNvZGVfcHRyKTsKK2ludCBzc19leGVjdXRlX2xpbmUoaW50IHNjaV9pZHgsIGNoYXIgKmxpbmVfcHRyKTsKK2NoYXIgKipzc19wYXJzZShpbnQgc2NpX2lkeCwgY2hhciAqbGluZV9wdHIsIGludCAqYXJnY19wdHIpOworc3NfYWJicmV2X2luZm8gKnNzX2FiYnJldl9pbml0aWFsaXplKGNoYXIgKiwgaW50ICopOwordm9pZCBzc19wYWdlX3N0ZGluKHZvaWQpOwordm9pZCBzc19saXN0X3JlcXVlc3RzKGludCwgY2hhciBjb25zdCAqIGNvbnN0ICosIGludCwgcG9pbnRlcik7CitpbnQgc3NfZXhlY3V0ZV9jb21tYW5kKGludCBzY2lfaWR4LCBjaGFyICphcmd2W10pOworaW50IHNzX3BhZ2VyX2NyZWF0ZSh2b2lkKTsKK2NoYXIgKnNzX3NhZmVfZ2V0ZW52KGNvbnN0IGNoYXIgKmFyZyk7CitjaGFyICoqc3NfcmxfY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpOworCitleHRlcm4gc3NfZGF0YSAqKl9zc190YWJsZTsKK2V4dGVybiBjaGFyICpzc19ldF9tc2dzW107CitleHRlcm4gY2hhciAqX3NzX3BhZ2VyX25hbWU7CisKKyNpZmRlZiBVU0VfU0lHUFJPQ01BU0sKKy8qIGZha2Ugc2lnbWFzaywgc2lnYmxvY2ssIHNpZ3NldG1hc2sgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNkZWZpbmUgc2lnbWFzayh4KSAoMUw8PCh4KS0xKQorI2RlZmluZSBzaWdzZXRtYXNrKHgpIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCZ4LE5VTEwpCitzdGF0aWMgaW50IF9mYWtlX3NpZ3N0b3JlOworI2RlZmluZSBzaWdibG9jayh4KSAoX2Zha2Vfc2lnc3RvcmU9eCxzaWdwcm9jbWFzayhTSUdfQkxPQ0ssJl9mYWtlX3NpZ3N0b3JlLDApKQorI2VuZGlmCisjZW5kaWYgLyogX3NzX2ludGVybmFsX2ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3Mvc3RkX3Jxcy5jdCBiL2UyZnNwcm9ncy9saWIvc3Mvc3RkX3Jxcy5jdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDAyODhhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy9zdGRfcnFzLmN0CkBAIC0wLDAgKzEsNDYgQEAKKwljb21tYW5kX3RhYmxlCXNzX3N0ZF9yZXF1ZXN0czsKKworCXJlcXVlc3QJc3Nfc2VsZl9pZGVudGlmeSwgIklkZW50aWZ5IHRoZSBzdWJzeXN0ZW0uIiwKKwkJIi4iLAorCQkoZG9udF9saXN0LCBkb250X3N1bW1hcml6ZSk7CisKKwlyZXF1ZXN0CXNzX2hlbHAsICJEaXNwbGF5IGluZm8gb24gY29tbWFuZCBvciB0b3BpYy4iLAorCQloZWxwOworCisJdW5pbXBsZW1lbnRlZAorCQlzc19saXN0X2hlbHAsCisJCSJMaXN0IHRvcGljcyBmb3Igd2hpY2ggaGVscCBpcyBhdmFpbGFibGUuIiwKKwkJbGlzdF9oZWxwLCBsaDsKKworCXJlcXVlc3QJc3NfbGlzdF9yZXF1ZXN0cywgIkxpc3QgYXZhaWxhYmxlIGNvbW1hbmRzLiIsCisJCWxpc3RfcmVxdWVzdHMsIGxyLCAiPyI7CisKKwlyZXF1ZXN0CXNzX3F1aXQsICJMZWF2ZSB0aGUgc3Vic3lzdGVtLiIsCisJCXF1aXQsIHE7CisKKwl1bmltcGxlbWVudGVkCisJCXNzX2FiYnJldiwKKwkJIkVuYWJsZS9kaXNhYmxlIGFiYnJldmlhdGlvbiBwcm9jZXNzaW5nIG9mIHJlcXVlc3QgbGluZXMuIiwKKwkJYWJicmV2LCBhYjsKKworCXVuaW1wbGVtZW50ZWQKKwkJc3NfZXhlY3V0ZSwKKwkJIkV4ZWN1dGUgYSBVTklYIGNvbW1hbmQgbGluZS4iLAorCQlleGVjdXRlLCBlOworCisJdW5pbXBsZW1lbnRlZAorCQlzc19zdW1tYXJpemVfcmVxdWVzdHMsCisJCSJQcm9kdWNlIGEgbGlzdCBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIHJlcXVlc3RzLiIsCisJCSI/IjsKKwkJCisJcmVxdWVzdAlzc19zdWJzeXN0ZW1fbmFtZSwKKwkJIlJldHVybiB0aGUgbmFtZSBvZiB0aGlzIHN1YnN5c3RlbS4iLAorCQlzdWJzeXN0ZW1fbmFtZSwKKwkJKGRvbnRfbGlzdCk7CisKKwlyZXF1ZXN0CXNzX3N1YnN5c3RlbV92ZXJzaW9uLAorCQkiUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoaXMgc3Vic3lzdGVtLiIsCisJCXN1YnN5c3RlbV92ZXJzaW9uLAorCQkoZG9udF9saXN0KTsKKworCWVuZDsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3MvdGVzdF9jbWQuY3QgYi9lMmZzcHJvZ3MvbGliL3NzL3Rlc3RfY21kLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDlmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL3Rlc3RfY21kLmN0CkBAIC0wLDAgKzEsNiBAQAorY29tbWFuZF90YWJsZSB0ZXN0X2NtZHM7CisKK3JlcXVlc3QgdGVzdF9jbWQsICJUZXN0IGNvbW1hbmQiLAorCXRlc3RfY21kLCB0ZXN0OworCitlbmQ7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3NzL3Rlc3Rfc2NyaXB0IGIvZTJmc3Byb2dzL2xpYi9zcy90ZXN0X3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY3ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy90ZXN0X3NjcmlwdApAQCAtMCwwICsxLDggQEAKK3Rlc3QKK3Rlc3QgZm9vIGJhciBxdXV4Cit0ZXN0IGJhciBxdXV4CitxdXV4IGJhcgorcXV1eAordGVzdCBxdXV4CitxdWl0Cit0ZXN0IGZvbyBiYXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvc3MvdGVzdF9zY3JpcHRfZXhwZWN0ZWQgYi9lMmZzcHJvZ3MvbGliL3NzL3Rlc3Rfc2NyaXB0X2V4cGVjdGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2Y4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3NzL3Rlc3Rfc2NyaXB0X2V4cGVjdGVkCkBAIC0wLDAgKzEsMjIgQEAKK3Rlc3Rfc3MgMS4wLiAgVHlwZSAnPycgZm9yIGEgbGlzdCBvZiBjb21tYW5kcy4KKwordGVzdF9pY291bnQ6IHRlc3QKK0hlbGxvLCB3b3JsZCEKK0FyZ3M6IAordGVzdF9pY291bnQ6IHRlc3QgZm9vIGJhciBxdXV4CitIZWxsbywgd29ybGQhCitBcmdzOiAnZm9vJywgJ2JhcicsICdxdXV4JwordGVzdF9pY291bnQ6IHRlc3QgYmFyIHF1dXgKK0hlbGxvLCB3b3JsZCEKK0FyZ3M6ICdiYXInLCAncXV1eCcKK3Rlc3RfaWNvdW50OiBxdXV4IGJhcgordGVzdF9zczogQ29tbWFuZCBub3QgZm91bmQgcXV1eAordGVzdF9pY291bnQ6IHF1dXgKK3Rlc3Rfc3M6IENvbW1hbmQgbm90IGZvdW5kIHF1dXgKK3Rlc3RfaWNvdW50OiB0ZXN0IHF1dXgKK0hlbGxvLCB3b3JsZCEKK0FyZ3M6ICdxdXV4JwordGVzdF9pY291bnQ6IHF1aXQKK3Rlc3RfaWNvdW50OiB0ZXN0IGZvbyBiYXIKK0hlbGxvLCB3b3JsZCEKK0FyZ3M6ICdmb28nLCAnYmFyJwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi9zcy90ZXN0X3NzLmMgYi9lMmZzcHJvZ3MvbGliL3NzL3Rlc3Rfc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQ4NGVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi9zcy90ZXN0X3NzLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiB0ZXN0X3NzLmMKKyAqCisgKiBDb3B5cmlnaHQgMTk4NywgMTk4OCBieSBNSVQgU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIEJvYXJkCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdAorICogdGhlIG5hbWVzIG9mIE0uSS5ULiBhbmQgdGhlIE0uSS5ULiBTLkkuUC5CLiBub3QgYmUgdXNlZCBpbgorICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQorICogd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgTS5JLlQuIGFuZCB0aGUKKyAqIE0uSS5ULiBTLkkuUC5CLiBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0CisgKiBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJzcy5oIgorCitleHRlcm4gc3NfcmVxdWVzdF90YWJsZSB0ZXN0X2NtZHM7CisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKworc3RhdGljIGNoYXIgc3Vic3lzdGVtX25hbWVbXSA9ICJ0ZXN0X3NzIjsKK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9ICIxLjAiOworCitzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc2NpX2lkeCkKK3sKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMjU2XTsKKwljaGFyCQkqY3A7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJaW50CQlyZXR2YWw7CisJaW50IAkJbm9lY2hvOworCisJaWYgKHN0cmNtcChjbWRfZmlsZSwgIi0iKSA9PSAwKQorCQlmID0gc3RkaW47CisJZWxzZSB7CisJCWYgPSBmb3BlbihjbWRfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQlwZXJyb3IoY21kX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJbm9lY2hvID0gMDsKKwkJaWYgKGJ1ZlswXSA9PSAnLScpIHsKKwkJCW5vZWNobyA9IDE7CisJCQlidWZbMF0gPSAnICc7CisJCX0KKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJaWYgKCFub2VjaG8pCisJCQlwcmludGYoInRlc3RfaWNvdW50OiAlc1xuIiwgYnVmKTsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsIGJ1Zik7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjLCBjb2RlOworCWNoYXIgKnJlcXVlc3QgPSAoY2hhciAqKU5VTEw7CisJY2hhcgkJKmNtZF9maWxlID0gMDsKKwlpbnQgc2NpX2lkeDsKKwlpbnQgZXhpdF9zdGF0dXMgPSAwOworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAid1I6ZjoiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdSJzoKKwkJCXJlcXVlc3QgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQljbWRfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IHRlc3Rfc3MgWy1SIHJlcXVlc3RdICIKKwkJCQkiWy1mIGNtZF9maWxlXSIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCXNjaV9pZHggPSBzc19jcmVhdGVfaW52b2NhdGlvbihzdWJzeXN0ZW1fbmFtZSwgdmVyc2lvbiwKKwkJCQkgICAgICAgKGNoYXIgKilOVUxMLCAmdGVzdF9jbWRzLCAmY29kZSk7CisJaWYgKGNvZGUpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIGNvZGUsICJjcmVhdGluZyBpbnZvY2F0aW9uIik7CisJCWV4aXQoMSk7CisJfQorCisJKHZvaWQpIHNzX2FkZF9yZXF1ZXN0X3RhYmxlIChzY2lfaWR4LCAmc3Nfc3RkX3JlcXVlc3RzLCAxLCAmY29kZSk7CisJaWYgKGNvZGUpIHsKKwkJc3NfcGVycm9yIChzY2lfaWR4LCBjb2RlLCAiYWRkaW5nIHN0YW5kYXJkIHJlcXVlc3RzIik7CisJCWV4aXQgKDEpOworCX0KKworCXByaW50ZigidGVzdF9zcyAlcy4gIFR5cGUgJz8nIGZvciBhIGxpc3Qgb2YgY29tbWFuZHMuXG5cbiIsCisJICAgICAgIHZlcnNpb24pOworCisJaWYgKHJlcXVlc3QpIHsKKwkJY29kZSA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCByZXF1ZXN0KTsKKwkJaWYgKGNvZGUpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCBjb2RlLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlleGl0KGV4aXRfc3RhdHVzKTsKK30KKworCit2b2lkIHRlc3RfY21kIChhcmdjLCBhcmd2KQorICAgIGludCBhcmdjOworICAgIGNoYXIgKiphcmd2OworeworICAgIHByaW50ZigiSGVsbG8sIHdvcmxkIVxuIik7CisgICAgcHJpbnRmKCJBcmdzOiAiKTsKKyAgICB3aGlsZSAoKythcmd2LCAtLWFyZ2MpIHsKKwlwcmludGYoIiclcyciLCAqYXJndik7CisJaWYgKGFyZ2MgPiAxKQorCSAgICBmcHV0cygiLCAiLCBzdGRvdXQpOworICAgIH0KKyAgICBwdXRjaGFyICgnXG4nKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9BbmRyb2lkLm1rIGIvZTJmc3Byb2dzL2xpYi91dWlkL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMjY2MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsOTUgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworbGliZXh0Ml91dWlkX3NyY19maWxlcyA6PSBcCisJY2xlYXIuYyBcCisJY29tcGFyZS5jIFwKKwljb3B5LmMgXAorCWdlbl91dWlkLmMgXAorCWlzbnVsbC5jIFwKKwlwYWNrLmMgXAorCXBhcnNlLmMgXAorCXVucGFjay5jIFwKKwl1bnBhcnNlLmMgXAorCXV1aWRfdGltZS5jCisKKworbGliZXh0Ml91dWlkX2NfaW5jbHVkZXMgOj0gZXh0ZXJuYWwvZTJmc3Byb2dzL2xpYgorCitsaWJleHQyX3V1aWRfY2ZsYWdzIDo9IC1PMiAtZyAtVyAtV2FsbCBcCisJLURIQVZFX0lOVFRZUEVTX0ggXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkRVUCBcCisJLURIQVZFX01NQVAgXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfR0VUUEFHRVNJWkUgXAorCS1ESEFWRV9MU0VFSzY0IFwKKwktREhBVkVfTFNFRUs2NF9QUk9UT1RZUEUgXAorCS1ESEFWRV9FWFQyX0lPQ1RMUyBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKyAgICAgICAgLURIQVZFX1NZU19QQVJBTV9IIFwKKwktREhBVkVfU1lTQ09ORiBcCisJLVduby11bnVzZWQtZnVuY3Rpb24gXAorCS1Xbm8tdW51c2VkLXBhcmFtZXRlcgorCitsaWJleHQyX3V1aWRfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMgOj0gbGliYworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml91dWlkX3NyY19maWxlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX3V1aWRfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJfdXVpZF9jZmxhZ3MpCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKSAkKExPQ0FMX1BBVEgpLy4uCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSAkKGxpYmV4dDJfdXVpZF9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX3V1aWQKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfdXVpZF9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml91dWlkX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX3V1aWRfY2ZsYWdzKQorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK0xPQ0FMX01PRFVMRSA6PSBsaWJleHQyX3V1aWQtaG9zdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfU0hBUkVEX0xJQlJBUlkpCisKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmV4dDJfdXVpZF9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliZXh0Ml91dWlkX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJleHQyX3V1aWRfY2ZsYWdzKQorTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliYworTE9DQUxfTU9EVUxFIDo9IGxpYmV4dDJfdXVpZF9zdGF0aWMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliZXh0Ml91dWlkX3NyY19maWxlcykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJleHQyX3V1aWRfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmV4dDJfdXVpZF9jZmxhZ3MpCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQorTE9DQUxfTU9EVUxFIDo9IGxpYmV4dDJfdXVpZC1ob3N0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfSE9TVF9TVEFUSUNfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9DT1BZSU5HIGIvZTJmc3Byb2dzL2xpYi91dWlkL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxNzA2OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9DT1BZSU5HCkBAIC0wLDAgKzEsMjUgQEAKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQwOGMxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjE1IEBACisjIE1ha2VmaWxlIGZvciB0aGUgVVVJRCBsaWJyYXJ5CisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorbXlfZGlyID0gbGliL3V1aWQKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK2FsbDo6IAorCitTTUFOUEFHRVM9CXV1aWQuMyB1dWlkX2NsZWFyLjMgdXVpZF9jb21wYXJlLjMgdXVpZF9jb3B5LjMgXAorCQl1dWlkX2dlbmVyYXRlLjMgdXVpZF9pc19udWxsLjMgdXVpZF9wYXJzZS4zIFwKKwkJdXVpZF90aW1lLjMgdXVpZF91bnBhcnNlLjMKKworT0JKUz0JCWNsZWFyLm8gXAorCQljb21wYXJlLm8gXAorCQljb3B5Lm8gXAorCQlnZW5fdXVpZC5vIFwKKwkJaXNudWxsLm8gXAorCQlwYWNrLm8gXAorCQlwYXJzZS5vIFwKKwkJdW5wYWNrLm8gXAorCQl1bnBhcnNlLm8gXAorCQl1dWlkX3RpbWUubworCitTUkNTPQkJJChzcmNkaXIpL2NsZWFyLmMgXAorCQkkKHNyY2RpcikvY29tcGFyZS5jIFwKKwkJJChzcmNkaXIpL2NvcHkuYyBcCisJCSQoc3JjZGlyKS9nZW5fdXVpZC5jIFwKKwkJJChzcmNkaXIpL2lzbnVsbC5jIFwKKwkJJChzcmNkaXIpL3BhY2suYyBcCisJCSQoc3JjZGlyKS9wYXJzZS5jIFwKKwkJJChzcmNkaXIpL3VucGFjay5jIFwKKwkJJChzcmNkaXIpL3VucGFyc2UuYyBcCisJCSQoc3JjZGlyKS91dWlkX3RpbWUuYworCitMSUJSQVJZPSBsaWJ1dWlkCitMSUJESVI9IHV1aWQKKworRUxGX1ZFUlNJT04gPSAxLjIKK0VMRl9TT19WRVJTSU9OID0gMQorRUxGX0lNQUdFID0gbGlidXVpZAorRUxGX01ZRElSID0gdXVpZAorRUxGX0lOU1RBTExfRElSID0gJChyb290X2xpYmRpcikKK0VMRl9PVEhFUl9MSUJTID0gCisKK0JTRExJQl9WRVJTSU9OID0gMS4xCitCU0RMSUJfSU1BR0UgPSBsaWJ1dWlkCitCU0RMSUJfTVlESVIgPSB1dWlkCitCU0RMSUJfSU5TVEFMTF9ESVIgPSAkKHJvb3RfbGliZGlyKQorCitATUFLRUZJTEVfTElCUkFSWUAKK0BNQUtFRklMRV9FTEZACitATUFLRUZJTEVfQlNETElCQAorQE1BS0VGSUxFX1BST0ZJTEVACitATUFLRUZJTEVfQ0hFQ0tFUkAKKworLmMubzoKKwkkKEUpICIJQ0MgJDwiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQ8IC1vICRACisJJChRKSAkKENIRUNLX0NNRCkgJChBTExfQ0ZMQUdTKSAkPAorQFBST0ZJTEVfQ01UQAkkKFEpICQoQ0MpICQoQUxMX0NGTEFHUykgLWcgLXBnIC1vIHByb2ZpbGVkLyQqLm8gLWMgJDwKK0BDSEVDS0VSX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jaGVja2VyIC1nIC1vIGNoZWNrZXIvJCoubyAtYyAkPAorQEVMRl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZlBJQyAtbyBlbGZzaGFyZWQvJCoubyAtYyAkPAorQEJTRExJQl9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEJTRExJQl9QSUNfRkxBRykgLW8gcGljLyQqLm8gLWMgJDwKKworYWxsOjogdHN0X3V1aWQgdXVpZF90aW1lICQoU01BTlBBR0VTKSB1dWlkLnBjCisKK3V1aWQuaDogJChzcmNkaXIpL3V1aWQuaC5pbgorCSQoRSkgIglDUCAkQCIKKwkkKFEpIGNwICQoc3JjZGlyKS91dWlkLmguaW4gdXVpZC5oCisKKyQodG9wX2J1aWxkZGlyKS9saWIvdXVpZC91dWlkX3R5cGVzLmg6ICQoc3JjZGlyKS91dWlkX3R5cGVzLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz0kKG15X2RpcikvdXVpZF90eXBlcy5oIC4vY29uZmlnLnN0YXR1cworCit0c3RfdXVpZC5vOiAkKHNyY2RpcikvdHN0X3V1aWQuYyB1dWlkLmgKKwkkKEUpICIJQ0MgJEAiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1jICQoc3JjZGlyKS90c3RfdXVpZC5jIC1vIHRzdF91dWlkLm8KKwordHN0X3V1aWQ6IHRzdF91dWlkLm8gJChERVBTVEFUSUNfTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyB0c3RfdXVpZCB0c3RfdXVpZC5vICQoU1RBVElDX0xJQlVVSUQpCisKK3V1aWRfdGltZTogJChzcmNkaXIpL3V1aWRfdGltZS5jICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpICQoTERGTEFHUykgLURERUJVRyAtbyB1dWlkX3RpbWUgXAorCQkkKHNyY2RpcikvdXVpZF90aW1lLmMgJChMSUJVVUlEKQorCit1dWlkLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZC4zLmluIHV1aWQuMworCit1dWlkX2NsZWFyLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX2NsZWFyLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9jbGVhci4zLmluIHV1aWRfY2xlYXIuMworCit1dWlkX2NvbXBhcmUuMzogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRfY29tcGFyZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfY29tcGFyZS4zLmluIHV1aWRfY29tcGFyZS4zCisKK3V1aWRfY29weS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF9jb3B5LjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9jb3B5LjMuaW4gdXVpZF9jb3B5LjMKKwordXVpZF9nZW5lcmF0ZS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF9nZW5lcmF0ZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfZ2VuZXJhdGUuMy5pbiB1dWlkX2dlbmVyYXRlLjMKKwordXVpZF9pc19udWxsLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX2lzX251bGwuMy5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS91dWlkX2lzX251bGwuMy5pbiB1dWlkX2lzX251bGwuMworCit1dWlkX3BhcnNlLjM6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS91dWlkX3BhcnNlLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF9wYXJzZS4zLmluIHV1aWRfcGFyc2UuMworCit1dWlkX3RpbWUuMzogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRfdGltZS4zLmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3V1aWRfdGltZS4zLmluIHV1aWRfdGltZS4zCisKK3V1aWRfdW5wYXJzZS4zOiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZF91bnBhcnNlLjMuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZF91bnBhcnNlLjMuaW4gdXVpZF91bnBhcnNlLjMKKwordXVpZC5wYzogJChzcmNkaXIpL3V1aWQucGMuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwkkKEUpICIJQ09ORklHLlNUQVRVUyAkQCIKKwkkKFEpIGNkICQodG9wX2J1aWxkZGlyKTsgQ09ORklHX0ZJTEVTPWxpYi91dWlkL3V1aWQucGMgLi9jb25maWcuc3RhdHVzCisKK2luc3RhbGxkaXJzOjoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKGxpYmRpcikgJChpbmNsdWRlZGlyKS91dWlkICQobWFuM2RpcikiCisJJChRKSAkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKGxpYmRpcikgIFwKKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvdXVpZCAkKERFU1RESVIpJChtYW4zZGlyKSBcCisJCSQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnCisKK2luc3RhbGw6OiBhbGwgaW5zdGFsbGRpcnMgCisJJChFKSAiCUlOU1RBTExfREFUQSAkKGxpYmRpcikvbGlidXVpZC5hIgorCSQoUSkgJChJTlNUQUxMX0RBVEEpIGxpYnV1aWQuYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnV1aWQuYQorCS0kKFEpICQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnV1aWQuYQorCSQoUSkgJChDSE1PRCkgJChMSUJNT0RFKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnV1aWQuYQorCSQoRSkgIglJTlNUQUxMX0RBVEEgJChpbmNsdWRlZGlyKS91dWlkL3V1aWQuaCIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSB1dWlkLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvdXVpZC91dWlkLmgKKwkkKFEpIGZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4zZGlyKS8kJGkuZ3o7IFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKG1hbjNkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW4zZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSAkKFJNKSAtZiAkKERFU1RESVIpJChtYW4zZGlyKS91dWlkX2dlbmVyYXRlX3JhbmRvbS4zLmd6IFwKKwkJJChERVNURElSKSQobWFuM2RpcikvdXVpZF9nZW5lcmF0ZV90aW1lLjMuZ3oKKwkkKEUpICIJTElOSyAkKG1hbjNkaXIpL3V1aWRfZ2VuZXJhdGVfcmFuZG9tLjMiCisJJChRKSAoY2QgJChERVNURElSKSQobWFuM2Rpcik7IFwKKwkgICAgJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIHV1aWRfZ2VuZXJhdGUuMyB1dWlkX2dlbmVyYXRlX3JhbmRvbS4zKQorCSQoRSkgIglMSU5LICQobWFuM2RpcikvdXVpZF9nZW5lcmF0ZV90aW1lLjMiCisJJChRKSAoY2QgJChERVNURElSKSQobWFuM2Rpcik7IFwKKwkgICAgJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIHV1aWRfZ2VuZXJhdGUuMyB1dWlkX2dlbmVyYXRlX3RpbWUuMykKKwkkKEUpICIJSU5TVEFMTF9EQVRBICQobGliZGlyKS9wa2djb25maWcvdXVpZC5wYyIKKwkkKFEpICQoSU5TVEFMTF9EQVRBKSB1dWlkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL3V1aWQucGMKKwordW5pbnN0YWxsOjoKKwkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYnV1aWQuYSBcCisJCSQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnL3V1aWQucGMKKwlmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuM2RpcikvJCRpOyBcCisJZG9uZQorCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjNkaXIpL3V1aWRfZ2VuZXJhdGVfcmFuZG9tLjMgJChERVNURElSKSQobWFuM2RpcikvdXVpZF9nZW5lcmF0ZV90aW1lLjMKKworY2xlYW46OgorCSQoUk0pIC1mIFwjKiAqLnMgKi5vICouYSAqfiAqLmJhayBjb3JlIHByb2ZpbGVkLyogY2hlY2tlci8qIHV1aWQuaAorCSQoUk0pIC1mIC4uL2xpYnV1aWQuYSAuLi9saWJ1dWlkX3AuYSB0c3RfdXVpZCB1dWlkX3RpbWUgJChTTUFOUEFHRVMpCisKK2NoZWNrOjogdHN0X3V1aWQKKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3RzdF91dWlkCisKK21vc3RseWNsZWFuOjogY2xlYW4KK2Rpc3RjbGVhbjo6IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSB1dWlkLnBjIFwKKwkJJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjCisjIEhhY2sgdG8gcGFyYWxsZWwgbWFrZXMgcmVjb2duaXplIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuCisjCisuLi8uLi9saWIvbGlidXVpZC5hOiBsaWJ1dWlkLmEKKy4uLy4uL2xpYi9saWJ1dWlkLnNvOiBpbWFnZQorLi4vLi4vbGliL2xpYnV1aWQuZHlsaWI6IGltYWdlCisKKyQoT0JKUyk6IHN1YmRpcnMgdXVpZC5oCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIworY2xlYXIubzogJChzcmNkaXIpL2NsZWFyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCitjb21wYXJlLm86ICQoc3JjZGlyKS9jb21wYXJlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCitjb3B5Lm86ICQoc3JjZGlyKS9jb3B5LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCitnZW5fdXVpZC5vOiAkKHNyY2RpcikvZ2VuX3V1aWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3V1aWRQLmggJChzcmNkaXIpL3V1aWRkLmgKK2lzbnVsbC5vOiAkKHNyY2RpcikvaXNudWxsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCitwYWNrLm86ICQoc3JjZGlyKS9wYWNrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCitwYXJzZS5vOiAkKHNyY2RpcikvcGFyc2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3V1aWRQLmgKK3VucGFjay5vOiAkKHNyY2RpcikvdW5wYWNrLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCit1bnBhcnNlLm86ICQoc3JjZGlyKS91bnBhcnNlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS91dWlkUC5oCit1dWlkX3RpbWUubzogJChzcmNkaXIpL3V1aWRfdGltZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvdXVpZFAuaApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL2NsZWFyLmMgYi9lMmZzcHJvZ3MvbGliL3V1aWQvY2xlYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDkxZmVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL2NsZWFyLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGNsZWFyLmMgLS0gQ2xlYXIgYSBVVUlECisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgInN0cmluZy5oIgorCisjaW5jbHVkZSAidXVpZFAuaCIKKwordm9pZCB1dWlkX2NsZWFyKHV1aWRfdCB1dSkKK3sKKwltZW1zZXQodXUsIDAsIDE2KTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL2NvbXBhcmUuYyBiL2UyZnNwcm9ncy9saWIvdXVpZC9jb21wYXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YTcyNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9jb21wYXJlLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGNvbXBhcmUuYyAtLS0gY29tcGFyZSB3aGV0aGVyIG9yIG5vdCB0d28gVVVJRCdzIGFyZSB0aGUgc2FtZQorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgdHdvIFVVSUQncyBhcmUgZGlmZmVyZW50LCBhbmQgMSBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAidXVpZFAuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBVVUNNUCh1MSx1MikgaWYgKHUxICE9IHUyKSByZXR1cm4oKHUxIDwgdTIpID8gLTEgOiAxKTsKKworaW50IHV1aWRfY29tcGFyZShjb25zdCB1dWlkX3QgdXUxLCBjb25zdCB1dWlkX3QgdXUyKQoreworCXN0cnVjdCB1dWlkCXV1aWQxLCB1dWlkMjsKKworCXV1aWRfdW5wYWNrKHV1MSwgJnV1aWQxKTsKKwl1dWlkX3VucGFjayh1dTIsICZ1dWlkMik7CisKKwlVVUNNUCh1dWlkMS50aW1lX2xvdywgdXVpZDIudGltZV9sb3cpOworCVVVQ01QKHV1aWQxLnRpbWVfbWlkLCB1dWlkMi50aW1lX21pZCk7CisJVVVDTVAodXVpZDEudGltZV9oaV9hbmRfdmVyc2lvbiwgdXVpZDIudGltZV9oaV9hbmRfdmVyc2lvbik7CisJVVVDTVAodXVpZDEuY2xvY2tfc2VxLCB1dWlkMi5jbG9ja19zZXEpOworCXJldHVybiBtZW1jbXAodXVpZDEubm9kZSwgdXVpZDIubm9kZSwgNik7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9jb25maWd1cmUuaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvY29uZmlndXJlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTUwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvY29uZmlndXJlLmluCkBAIC0wLDAgKzEsMTAgQEAKK2RubAorZG5sICBOb3QgdXNlZCBub3csIGZvciB0aGUgZnV0dXJlIHdoZW4gdXVpZCBpcyBzZXBhcmF0ZWQgb3V0IGludG8gaXRzIAorZG5sIG93biBwYWNrYWdlLgorZG5sCitBQ19JTklUKGdlbl91dWlkLmMpCitBQ19QUkVSRVEoMi4xMikKKworQUNfQ0hFQ0tfSEVBREVSUyhzdGRsaWIuaCB1bmlzdGQuaCBzeXMvc29ja2lvLmggbmV0L2lmLmggbmV0aW5ldC9pbi5oKQorQUNfQ0hFQ0tfRlVOQ1Moc3JhbmRvbSkKK0FDX09VVFBVVChNYWtlZmlsZSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9jb3B5LmMgYi9lMmZzcHJvZ3MvbGliL3V1aWQvY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDMzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvY29weS5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBjb3B5LmMgLS0tIGNvcHkgVVVJRHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAidXVpZFAuaCIKKwordm9pZCB1dWlkX2NvcHkodXVpZF90IGRzdCwgY29uc3QgdXVpZF90IHNyYykKK3sKKwl1bnNpZ25lZCBjaGFyCQkqY3AxOworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKmNwMjsKKwlpbnQJCQlpOworCisJZm9yIChpPTAsIGNwMSA9IGRzdCwgY3AyID0gc3JjOyBpIDwgMTY7IGkrKykKKwkJKmNwMSsrID0gKmNwMisrOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL2dlbl91dWlkLmMgYi9lMmZzcHJvZ3MvbGliL3V1aWQvZ2VuX3V1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMxNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL2dlbl91dWlkLmMKQEAgLTAsMCArMSw2NzMgQEAKKy8qCisgKiBnZW5fdXVpZC5jIC0tLSBnZW5lcmF0ZSBhIERDRS1jb21wYXRpYmxlIHV1aWQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogRm9yY2UgaW5jbHVzaW9uIG9mIFNWSUQgc3R1ZmYgc2luY2Ugd2UgbmVlZCBpdCBpZiB3ZSdyZSBjb21waWxpbmcgaW4KKyAqIGdjYy13YWxsIHdhbGwgbW9kZQorICovCisjZGVmaW5lIF9TVklEX1NPVVJDRQorCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgVVVJRCBNWVVVSUQKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TWVNfRklMRV9ICisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0lPX0gKKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0RMX0gKKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NZU0NBTExfSCkKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1dWlkUC5oIgorI2luY2x1ZGUgInV1aWRkLmgiCisKKyNpZmRlZiBIQVZFX1NSQU5ET00KKyNkZWZpbmUgc3JhbmQoeCkgCXNyYW5kb20oeCkKKyNkZWZpbmUgcmFuZCgpIAkJcmFuZG9tKCkKKyNlbmRpZgorCisjaWZkZWYgVExTCisjZGVmaW5lIFRIUkVBRF9MT0NBTCBzdGF0aWMgVExTCisjZWxzZQorI2RlZmluZSBUSFJFQURfTE9DQUwgc3RhdGljCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fTlJfZ2V0dGlkKSAmJiBkZWZpbmVkKEhBVkVfSlJBTkQ0OCkKKyNkZWZpbmUgRE9fSlJBTkRfTUlYCitUSFJFQURfTE9DQUwgdW5zaWduZWQgc2hvcnQganJhbmRfc2VlZFszXTsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCitzdGF0aWMgdm9pZCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqZHVtbXkpCit7CisJRklMRVRJTUUJZnRpbWU7CisJdWludDY0X3QJbjsKKworCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lICgmZnRpbWUpOworCW4gPSAoKCh1aW50NjRfdCkgZnRpbWUuZHdIaWdoRGF0ZVRpbWUgPDwgMzIpCisJICAgICArICh1aW50NjRfdCkgZnRpbWUuZHdMb3dEYXRlVGltZSk7CisJaWYgKG4pIHsKKwkJbiAvPSAxMDsKKwkJbiAtPSAoKDM2OSAqIDM2NSArIDg5KSAqICh1aW50NjRfdCkgODY0MDApICogMTAwMDAwMDsKKwl9CisKKwl0di0+dHZfc2VjID0gbiAvIDEwMDAwMDA7CisJdHYtPnR2X3VzZWMgPSBuICUgMTAwMDAwMDsKK30KKworc3RhdGljIGludCBnZXR1aWQgKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBnZXRfcmFuZG9tX2ZkKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwJdHY7CisJc3RhdGljIGludAlmZCA9IC0yOworCWludAkJaTsKKworCWlmIChmZCA9PSAtMikgeworCQlnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKyNpZm5kZWYgX1dJTjMyCisJCWZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworCQlpZiAoZmQgPT0gLTEpCisJCQlmZCA9IG9wZW4oIi9kZXYvcmFuZG9tIiwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKwkJaWYgKGZkID49IDApIHsKKwkJCWkgPSBmY250bChmZCwgRl9HRVRGRCk7CisJCQlpZiAoaSA+PSAwKQorCQkJCWZjbnRsKGZkLCBGX1NFVEZELCBpIHwgRkRfQ0xPRVhFQyk7CisJCX0KKyNlbmRpZgorCQlzcmFuZCgoZ2V0cGlkKCkgPDwgMTYpIF4gZ2V0dWlkKCkgXiB0di50dl9zZWMgXiB0di50dl91c2VjKTsKKyNpZmRlZiBET19KUkFORF9NSVgKKwkJanJhbmRfc2VlZFswXSA9IGdldHBpZCgpIF4gKHR2LnR2X3NlYyAmIDB4RkZGRik7CisJCWpyYW5kX3NlZWRbMV0gPSBnZXRwcGlkKCkgXiAodHYudHZfdXNlYyAmIDB4RkZGRik7CisJCWpyYW5kX3NlZWRbMl0gPSAodHYudHZfc2VjIF4gdHYudHZfdXNlYykgPj4gMTY7CisjZW5kaWYKKwl9CisJLyogQ3JhbmsgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGEgZmV3IHRpbWVzICovCisJZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisJZm9yIChpID0gKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpICYgMHgxRjsgaSA+IDA7IGktLSkKKwkJcmFuZCgpOworCXJldHVybiBmZDsKK30KKworCisvKgorICogR2VuZXJhdGUgYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzLiAgVXNlIC9kZXYvdXJhbmRvbSBpZiBwb3NzaWJsZSwKKyAqIGFuZCBpZiBub3QsIHVzZSBzcmFuZG9tL3JhbmRvbS4KKyAqLworc3RhdGljIHZvaWQgZ2V0X3JhbmRvbV9ieXRlcyh2b2lkICpidWYsIGludCBuYnl0ZXMpCit7CisJaW50IGksIG4gPSBuYnl0ZXMsIGZkID0gZ2V0X3JhbmRvbV9mZCgpOworCWludCBsb3NlX2NvdW50ZXIgPSAwOworCXVuc2lnbmVkIGNoYXIgKmNwID0gYnVmOworCisJaWYgKGZkID49IDApIHsKKwkJd2hpbGUgKG4gPiAwKSB7CisJCQlpID0gcmVhZChmZCwgY3AsIG4pOworCQkJaWYgKGkgPD0gMCkgeworCQkJCWlmIChsb3NlX2NvdW50ZXIrKyA+IDE2KQorCQkJCQlicmVhazsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW4gLT0gaTsKKwkJCWNwICs9IGk7CisJCQlsb3NlX2NvdW50ZXIgPSAwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBkbyB0aGlzIGFsbCB0aGUgdGltZSwgYnV0IHRoaXMgaXMgdGhlIG9ubHkgc291cmNlIG9mCisJICogcmFuZG9tbmVzcyBpZiAvZGV2L3JhbmRvbS91cmFuZG9tIGlzIG91dCB0byBsdW5jaC4KKwkgKi8KKwlmb3IgKGNwID0gYnVmLCBpID0gMDsgaSA8IG5ieXRlczsgaSsrKQorCQkqY3ArKyBePSAocmFuZCgpID4+IDcpICYgMHhGRjsKKyNpZmRlZiBET19KUkFORF9NSVgKKwl7CisJCXVuc2lnbmVkIHNob3J0IHRtcF9zZWVkWzNdOworCisJCW1lbWNweSh0bXBfc2VlZCwganJhbmRfc2VlZCwgc2l6ZW9mKHRtcF9zZWVkKSk7CisJCWpyYW5kX3NlZWRbMl0gPSBqcmFuZF9zZWVkWzJdIF4gc3lzY2FsbChfX05SX2dldHRpZCk7CisJCWZvciAoY3AgPSBidWYsIGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyspCisJCQkqY3ArKyBePSAoanJhbmQ0OCh0bXBfc2VlZCkgPj4gNykgJiAweEZGOworCQltZW1jcHkoanJhbmRfc2VlZCwgdG1wX3NlZWQsCisJCSAgICAgICBzaXplb2YoanJhbmRfc2VlZCkgLSBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKwl9CisjZW5kaWYKKworCXJldHVybjsKK30KKworLyoKKyAqIEdldCB0aGUgZXRoZXJuZXQgaGFyZHdhcmUgYWRkcmVzcywgaWYgd2UgY2FuIGZpbmQgaXQuLi4KKyAqCisgKiBYWFggZm9yIGEgd2luZG93cyB2ZXJzaW9uLCBwcm9iYWJseSBzaG91bGQgdXNlIEdldEFkYXB0ZXJzSW5mbzoKKyAqIGh0dHA6Ly93d3cuY29kZWd1cnUuY29tL2NwcC9pLW4vbmV0d29yay9uZXR3b3JraW5mb3JtYXRpb24vYXJ0aWNsZS5waHAvYzU0NTEKKyAqIGNvbW1lbnRpbmcgb3V0IGdldF9ub2RlX2lkIGp1c3QgdG8gZ2V0IGdlbl91dWlkIHRvIGNvbXBpbGUgdW5kZXIgd2luZG93cworICogaXMgbm90IHRoZSByaWdodCB3YXkgdG8gZ28hCisgKi8KK3N0YXRpYyBpbnQgZ2V0X25vZGVfaWQodW5zaWduZWQgY2hhciAqbm9kZV9pZCkKK3sKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisJaW50IAkJc2Q7CisJc3RydWN0IGlmcmVxIAlpZnIsICppZnJwOworCXN0cnVjdCBpZmNvbmYgCWlmYzsKKwljaGFyIGJ1ZlsxMDI0XTsKKwlpbnQJCW4sIGk7CisJdW5zaWduZWQgY2hhciAJKmE7CisjaWZkZWYgSEFWRV9ORVRfSUZfRExfSAorCXN0cnVjdCBzb2NrYWRkcl9kbCAqc2RscDsKKyNlbmRpZgorCisvKgorICogQlNEIDQuNCBkZWZpbmVzIHRoZSBzaXplIG9mIGFuIGlmcmVxIHRvIGJlCisgKiBtYXgoc2l6ZW9mKGlmcmVxKSwgc2l6ZW9mKGlmcmVxLmlmcl9uYW1lKStpZnJlcS5pZnJfYWRkci5zYV9sZW4KKyAqIEhvd2V2ZXIsIHVuZGVyIGVhcmxpZXIgc3lzdGVtcywgc2FfbGVuIGlzbid0IHByZXNlbnQsIHNvIHRoZSBzaXplIGlzCisgKiBqdXN0IHNpemVvZihzdHJ1Y3QgaWZyZXEpCisgKi8KKyNpZmRlZiBIQVZFX1NBX0xFTgorI2lmbmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyNlbmRpZgorI2RlZmluZSBpZnJlcV9zaXplKGkpIG1heChzaXplb2Yoc3RydWN0IGlmcmVxKSxcCisgICAgIHNpemVvZigoaSkuaWZyX25hbWUpKyhpKS5pZnJfYWRkci5zYV9sZW4pCisjZWxzZQorI2RlZmluZSBpZnJlcV9zaXplKGkpIHNpemVvZihzdHJ1Y3QgaWZyZXEpCisjZW5kaWYgLyogSEFWRV9TQV9MRU4qLworCisJc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19JUCk7CisJaWYgKHNkIDwgMCkgeworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlpZmMuaWZjX2xlbiA9IHNpemVvZihidWYpOworCWlmYy5pZmNfYnVmID0gYnVmOworCWlmIChpb2N0bCAoc2QsIFNJT0NHSUZDT05GLCAoY2hhciAqKSZpZmMpIDwgMCkgeworCQljbG9zZShzZCk7CisJCXJldHVybiAtMTsKKwl9CisJbiA9IGlmYy5pZmNfbGVuOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKz0gaWZyZXFfc2l6ZSgqaWZycCkgKSB7CisJCWlmcnAgPSAoc3RydWN0IGlmcmVxICopKChjaGFyICopIGlmYy5pZmNfYnVmK2kpOworCQlzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZycC0+aWZyX25hbWUsIElGTkFNU0laKTsKKyNpZmRlZiBTSU9DR0lGSFdBRERSCisJCWlmIChpb2N0bChzZCwgU0lPQ0dJRkhXQUREUiwgJmlmcikgPCAwKQorCQkJY29udGludWU7CisJCWEgPSAodW5zaWduZWQgY2hhciAqKSAmaWZyLmlmcl9od2FkZHIuc2FfZGF0YTsKKyNlbHNlCisjaWZkZWYgU0lPQ0dFTkFERFIKKwkJaWYgKGlvY3RsKHNkLCBTSU9DR0VOQUREUiwgJmlmcikgPCAwKQorCQkJY29udGludWU7CisJCWEgPSAodW5zaWduZWQgY2hhciAqKSBpZnIuaWZyX2VuYWRkcjsKKyNlbHNlCisjaWZkZWYgSEFWRV9ORVRfSUZfRExfSAorCQlzZGxwID0gKHN0cnVjdCBzb2NrYWRkcl9kbCAqKSAmaWZycC0+aWZyX2FkZHI7CisJCWlmICgoc2RscC0+c2RsX2ZhbWlseSAhPSBBRl9MSU5LKSB8fCAoc2RscC0+c2RsX2FsZW4gIT0gNikpCisJCQljb250aW51ZTsKKwkJYSA9ICh1bnNpZ25lZCBjaGFyICopICZzZGxwLT5zZGxfZGF0YVtzZGxwLT5zZGxfbmxlbl07CisjZWxzZQorCQkvKgorCQkgKiBYWFggd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBnZXR0aW5nIHRoZSBoYXJkd2FyZQorCQkgKiBhZGRyZXNzCisJCSAqLworCQljbG9zZShzZCk7CisJCXJldHVybiAwOworI2VuZGlmIC8qIEhBVkVfTkVUX0lGX0RMX0ggKi8KKyNlbmRpZiAvKiBTSU9DR0VOQUREUiAqLworI2VuZGlmIC8qIFNJT0NHSUZIV0FERFIgKi8KKwkJaWYgKCFhWzBdICYmICFhWzFdICYmICFhWzJdICYmICFhWzNdICYmICFhWzRdICYmICFhWzVdKQorCQkJY29udGludWU7CisJCWlmIChub2RlX2lkKSB7CisJCQltZW1jcHkobm9kZV9pZCwgYSwgNik7CisJCQljbG9zZShzZCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwljbG9zZShzZCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyogQXNzdW1lIHRoYXQgdGhlIGdldHRpbWVvZmRheSgpIGhhcyBtaWNyb3NlY29uZCBncmFudWxhcml0eSAqLworI2RlZmluZSBNQVhfQURKVVNUTUVOVCAxMAorCitzdGF0aWMgaW50IGdldF9jbG9jayh1aW50MzJfdCAqY2xvY2tfaGlnaCwgdWludDMyX3QgKmNsb2NrX2xvdywKKwkJICAgICB1aW50MTZfdCAqcmV0X2Nsb2NrX3NlcSwgaW50ICpudW0pCit7CisJVEhSRUFEX0xPQ0FMIGludAkJYWRqdXN0bWVudCA9IDA7CisJVEhSRUFEX0xPQ0FMIHN0cnVjdCB0aW1ldmFsCWxhc3QgPSB7MCwgMH07CisJVEhSRUFEX0xPQ0FMIGludAkJc3RhdGVfZmQgPSAtMjsKKwlUSFJFQURfTE9DQUwgRklMRQkJKnN0YXRlX2Y7CisJVEhSRUFEX0xPQ0FMIHVpbnQxNl90CQljbG9ja19zZXE7CisJc3RydWN0IHRpbWV2YWwgCQkJdHY7CisJc3RydWN0IGZsb2NrCQkJZmw7CisJdWludDY0X3QJCQljbG9ja19yZWc7CisJbW9kZV90CQkJCXNhdmVfdW1hc2s7CisJaW50CQkJCWxlbjsKKworCWlmIChzdGF0ZV9mZCA9PSAtMikgeworCQlzYXZlX3VtYXNrID0gdW1hc2soMCk7CisJCXN0YXRlX2ZkID0gb3BlbigiL3Zhci9saWIvbGlidXVpZC9jbG9jay50eHQiLAorCQkJCU9fUkRXUnxPX0NSRUFULCAwNjYwKTsKKwkJKHZvaWQpIHVtYXNrKHNhdmVfdW1hc2spOworCQlzdGF0ZV9mID0gZmRvcGVuKHN0YXRlX2ZkLCAicisiKTsKKwkJaWYgKCFzdGF0ZV9mKSB7CisJCQljbG9zZShzdGF0ZV9mZCk7CisJCQlzdGF0ZV9mZCA9IC0xOworCQl9CisJfQorCWZsLmxfdHlwZSA9IEZfV1JMQ0s7CisJZmwubF93aGVuY2UgPSBTRUVLX1NFVDsKKwlmbC5sX3N0YXJ0ID0gMDsKKwlmbC5sX2xlbiA9IDA7CisJZmwubF9waWQgPSAwOworCWlmIChzdGF0ZV9mZCA+PSAwKSB7CisJCXJld2luZChzdGF0ZV9mKTsKKwkJd2hpbGUgKGZjbnRsKHN0YXRlX2ZkLCBGX1NFVExLVywgJmZsKSA8IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCWNvbnRpbnVlOworCQkJZmNsb3NlKHN0YXRlX2YpOworCQkJY2xvc2Uoc3RhdGVfZmQpOworCQkJc3RhdGVfZmQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzdGF0ZV9mZCA+PSAwKSB7CisJCXVuc2lnbmVkIGludCBjbDsKKwkJdW5zaWduZWQgbG9uZyB0djEsIHR2MjsKKwkJaW50IGE7CisKKwkJaWYgKGZzY2FuZihzdGF0ZV9mLCAiY2xvY2s6ICUwNHggdHY6ICVsdSAlbHUgYWRqOiAlZFxuIiwKKwkJCSAgICZjbCwgJnR2MSwgJnR2MiwgJmEpID09IDQpIHsKKwkJCWNsb2NrX3NlcSA9IGNsICYgMHgzRkZGOworCQkJbGFzdC50dl9zZWMgPSB0djE7CisJCQlsYXN0LnR2X3VzZWMgPSB0djI7CisJCQlhZGp1c3RtZW50ID0gYTsKKwkJfQorCX0KKworCWlmICgobGFzdC50dl9zZWMgPT0gMCkgJiYgKGxhc3QudHZfdXNlYyA9PSAwKSkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZjbG9ja19zZXEsIHNpemVvZihjbG9ja19zZXEpKTsKKwkJY2xvY2tfc2VxICY9IDB4M0ZGRjsKKwkJZ2V0dGltZW9mZGF5KCZsYXN0LCAwKTsKKwkJbGFzdC50dl9zZWMtLTsKKwl9CisKK3RyeV9hZ2FpbjoKKwlnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKwlpZiAoKHR2LnR2X3NlYyA8IGxhc3QudHZfc2VjKSB8fAorCSAgICAoKHR2LnR2X3NlYyA9PSBsYXN0LnR2X3NlYykgJiYKKwkgICAgICh0di50dl91c2VjIDwgbGFzdC50dl91c2VjKSkpIHsKKwkJY2xvY2tfc2VxID0gKGNsb2NrX3NlcSsxKSAmIDB4M0ZGRjsKKwkJYWRqdXN0bWVudCA9IDA7CisJCWxhc3QgPSB0djsKKwl9IGVsc2UgaWYgKCh0di50dl9zZWMgPT0gbGFzdC50dl9zZWMpICYmCisJICAgICh0di50dl91c2VjID09IGxhc3QudHZfdXNlYykpIHsKKwkJaWYgKGFkanVzdG1lbnQgPj0gTUFYX0FESlVTVE1FTlQpCisJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJYWRqdXN0bWVudCsrOworCX0gZWxzZSB7CisJCWFkanVzdG1lbnQgPSAwOworCQlsYXN0ID0gdHY7CisJfQorCisJY2xvY2tfcmVnID0gdHYudHZfdXNlYyoxMCArIGFkanVzdG1lbnQ7CisJY2xvY2tfcmVnICs9ICgodWludDY0X3QpIHR2LnR2X3NlYykqMTAwMDAwMDA7CisJY2xvY2tfcmVnICs9ICgoKHVpbnQ2NF90KSAweDAxQjIxREQyKSA8PCAzMikgKyAweDEzODE0MDAwOworCisJaWYgKG51bSAmJiAoKm51bSA+IDEpKSB7CisJCWFkanVzdG1lbnQgKz0gKm51bSAtIDE7CisJCWxhc3QudHZfdXNlYyArPSBhZGp1c3RtZW50IC8gMTA7CisJCWFkanVzdG1lbnQgPSBhZGp1c3RtZW50ICUgMTA7CisJCWxhc3QudHZfc2VjICs9IGxhc3QudHZfdXNlYyAvIDEwMDAwMDA7CisJCWxhc3QudHZfdXNlYyA9IGxhc3QudHZfdXNlYyAlIDEwMDAwMDA7CisJfQorCisJaWYgKHN0YXRlX2ZkID4gMCkgeworCQlyZXdpbmQoc3RhdGVfZik7CisJCWxlbiA9IGZwcmludGYoc3RhdGVfZiwKKwkJCSAgICAgICJjbG9jazogJTA0eCB0djogJTAxNmx1ICUwOGx1IGFkajogJTA4ZFxuIiwKKwkJCSAgICAgIGNsb2NrX3NlcSwgbGFzdC50dl9zZWMsIChsb25nKWxhc3QudHZfdXNlYywKKwkJCSAgICAgIGFkanVzdG1lbnQpOworCQlmZmx1c2goc3RhdGVfZik7CisJCWlmIChmdHJ1bmNhdGUoc3RhdGVfZmQsIGxlbikgPCAwKSB7CisJCQlmcHJpbnRmKHN0YXRlX2YsICIgICAgICAgICAgICAgICAgICAgXG4iKTsKKwkJCWZmbHVzaChzdGF0ZV9mKTsKKwkJfQorCQlyZXdpbmQoc3RhdGVfZik7CisJCWZsLmxfdHlwZSA9IEZfVU5MQ0s7CisJCWZjbnRsKHN0YXRlX2ZkLCBGX1NFVExLLCAmZmwpOworCX0KKworCSpjbG9ja19oaWdoID0gY2xvY2tfcmVnID4+IDMyOworCSpjbG9ja19sb3cgPSBjbG9ja19yZWc7CisJKnJldF9jbG9ja19zZXEgPSBjbG9ja19zZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJc3NpemVfdCBjID0gMDsKKwlpbnQgdHJpZXMgPSAwOworCisJbWVtc2V0KGJ1ZiwgMCwgY291bnQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gcmVhZChmZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIgfHwgcmV0ID09IDApICYmCisJCQkgICAgKHRyaWVzKysgPCA1KSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiBjID8gYyA6IC0xOworCQl9CisJCWlmIChyZXQgPiAwKQorCQkJdHJpZXMgPSAwOworCQljb3VudCAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCWMgKz0gcmV0OworCX0KKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyB2b2lkIGNsb3NlX2FsbF9mZHModm9pZCkKK3sKKwlpbnQgaSwgbWF4OworCisjaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX09QRU5fTUFYKQorCW1heCA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVREVEFCTEVTSVpFKQorCW1heCA9IGdldGR0YWJsZXNpemUoKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRSTElNSVQpICYmIGRlZmluZWQoUkxJTUlUX05PRklMRSkKKwlzdHJ1Y3QgcmxpbWl0IHJsOworCisJZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybCk7CisJbWF4ID0gcmwucmxpbV9jdXI7CisjZWxzZQorCW1heCA9IE9QRU5fTUFYOworI2VuZGlmCisKKwlmb3IgKGk9MDsgaSA8IG1heDsgaSsrKSB7CisJCWNsb3NlKGkpOworCQlpZiAoaSA8PSAyKQorCQkJb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwl9Cit9CisKKworLyoKKyAqIFRyeSB1c2luZyB0aGUgdXVpZGQgZGFlbW9uIHRvIGdlbmVyYXRlIHRoZSBVVUlECisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3V1aWRfdmlhX2RhZW1vbihpbnQgb3AsIHV1aWRfdCBvdXQsIGludCAqbnVtKQoreworI2lmIGRlZmluZWQoVVNFX1VVSUREKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1VOX0gpCisJY2hhciBvcF9idWZbNjRdOworCWludCBvcF9sZW47CisJaW50IHM7CisJc3NpemVfdCByZXQ7CisJaW50MzJfdCByZXBseV9sZW4gPSAwLCBleHBlY3RlZCA9IDE2OworCXN0cnVjdCBzb2NrYWRkcl91biBzcnZfYWRkcjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlwaWRfdCBwaWQ7CisJc3RhdGljIGNvbnN0IGNoYXIgKnV1aWRkX3BhdGggPSBVVUlERF9QQVRIOworCXN0YXRpYyBpbnQgYWNjZXNzX3JldCA9IC0yOworCXN0YXRpYyBpbnQgc3RhcnRfYXR0ZW1wdHMgPSAwOworCisJaWYgKChzID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlzcnZfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJjcHkoc3J2X2FkZHIuc3VuX3BhdGgsIFVVSUREX1NPQ0tFVF9QQVRIKTsKKworCWlmIChjb25uZWN0KHMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJnNydl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpIDwgMCkgeworCQlpZiAoYWNjZXNzX3JldCA9PSAtMikKKwkJCWFjY2Vzc19yZXQgPSBhY2Nlc3ModXVpZGRfcGF0aCwgWF9PSyk7CisJCWlmIChhY2Nlc3NfcmV0ID09IDApCisJCQlhY2Nlc3NfcmV0ID0gc3RhdCh1dWlkZF9wYXRoLCAmc3QpOworCQlpZiAoYWNjZXNzX3JldCA9PSAwICYmIChzdC5zdF9tb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEKSkgPT0gMCkKKwkJCWFjY2Vzc19yZXQgPSBhY2Nlc3MoVVVJRERfRElSLCBXX09LKTsKKwkJaWYgKGFjY2Vzc19yZXQgPT0gMCAmJiBzdGFydF9hdHRlbXB0cysrIDwgNSkgeworCQkJaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsKKwkJCQljbG9zZV9hbGxfZmRzKCk7CisJCQkJZXhlY2wodXVpZGRfcGF0aCwgInV1aWRkIiwgIi1xVCIsICIzMDAiLAorCQkJCSAgICAgIChjaGFyICopIE5VTEwpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQkodm9pZCkgd2FpdHBpZChwaWQsIDAsIDApOworCQkJaWYgKGNvbm5lY3QocywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSAmc3J2X2FkZHIsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKSA8IDApCisJCQkJZ290byBmYWlsOworCQl9IGVsc2UKKwkJCWdvdG8gZmFpbDsKKwl9CisJb3BfYnVmWzBdID0gb3A7CisJb3BfbGVuID0gMTsKKwlpZiAob3AgPT0gVVVJRERfT1BfQlVMS19USU1FX1VVSUQpIHsKKwkJbWVtY3B5KG9wX2J1ZisxLCBudW0sIHNpemVvZigqbnVtKSk7CisJCW9wX2xlbiArPSBzaXplb2YoKm51bSk7CisJCWV4cGVjdGVkICs9IHNpemVvZigqbnVtKTsKKwl9CisKKwlyZXQgPSB3cml0ZShzLCBvcF9idWYsIG9wX2xlbik7CisJaWYgKHJldCA8IDEpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IHJlYWRfYWxsKHMsIChjaGFyICopICZyZXBseV9sZW4sIHNpemVvZihyZXBseV9sZW4pKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKHJlcGx5X2xlbiAhPSBleHBlY3RlZCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gcmVhZF9hbGwocywgb3BfYnVmLCByZXBseV9sZW4pOworCisJaWYgKG9wID09IFVVSUREX09QX0JVTEtfVElNRV9VVUlEKQorCQltZW1jcHkob3BfYnVmKzE2LCBudW0sIHNpemVvZihpbnQpKTsKKworCW1lbWNweShvdXQsIG9wX2J1ZiwgMTYpOworCisJY2xvc2Uocyk7CisJcmV0dXJuICgocmV0ID09IGV4cGVjdGVkKSA/IDAgOiAtMSk7CisKK2ZhaWw6CisJY2xvc2Uocyk7CisjZW5kaWYKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgdXVpZF9fZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0LCBpbnQgKm51bSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBub2RlX2lkWzZdOworCXN0YXRpYyBpbnQgaGFzX2luaXQgPSAwOworCXN0cnVjdCB1dWlkIHV1OworCXVpbnQzMl90CWNsb2NrX21pZDsKKworCWlmICghaGFzX2luaXQpIHsKKwkJaWYgKGdldF9ub2RlX2lkKG5vZGVfaWQpIDw9IDApIHsKKwkJCWdldF9yYW5kb21fYnl0ZXMobm9kZV9pZCwgNik7CisJCQkvKgorCQkJICogU2V0IG11bHRpY2FzdCBiaXQsIHRvIHByZXZlbnQgY29uZmxpY3RzCisJCQkgKiB3aXRoIElFRUUgODAyIGFkZHJlc3NlcyBvYnRhaW5lZCBmcm9tCisJCQkgKiBuZXR3b3JrIGNhcmRzCisJCQkgKi8KKwkJCW5vZGVfaWRbMF0gfD0gMHgwMTsKKwkJfQorCQloYXNfaW5pdCA9IDE7CisJfQorCWdldF9jbG9jaygmY2xvY2tfbWlkLCAmdXUudGltZV9sb3csICZ1dS5jbG9ja19zZXEsIG51bSk7CisJdXUuY2xvY2tfc2VxIHw9IDB4ODAwMDsKKwl1dS50aW1lX21pZCA9ICh1aW50MTZfdCkgY2xvY2tfbWlkOworCXV1LnRpbWVfaGlfYW5kX3ZlcnNpb24gPSAoKGNsb2NrX21pZCA+PiAxNikgJiAweDBGRkYpIHwgMHgxMDAwOworCW1lbWNweSh1dS5ub2RlLCBub2RlX2lkLCA2KTsKKwl1dWlkX3BhY2soJnV1LCBvdXQpOworfQorCit2b2lkIHV1aWRfZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0KQoreworI2lmZGVmIFRMUworCVRIUkVBRF9MT0NBTCBpbnQJCW51bSA9IDA7CisJVEhSRUFEX0xPQ0FMIHN0cnVjdCB1dWlkCXV1OworCVRIUkVBRF9MT0NBTCB0aW1lX3QJCWxhc3RfdGltZSA9IDA7CisJdGltZV90CQkJCW5vdzsKKworCWlmIChudW0gPiAwKSB7CisJCW5vdyA9IHRpbWUoMCk7CisJCWlmIChub3cgPiBsYXN0X3RpbWUrMSkKKwkJCW51bSA9IDA7CisJfQorCWlmIChudW0gPD0gMCkgeworCQludW0gPSAxMDAwOworCQlpZiAoZ2V0X3V1aWRfdmlhX2RhZW1vbihVVUlERF9PUF9CVUxLX1RJTUVfVVVJRCwKKwkJCQkJb3V0LCAmbnVtKSA9PSAwKSB7CisJCQlsYXN0X3RpbWUgPSB0aW1lKDApOworCQkJdXVpZF91bnBhY2sob3V0LCAmdXUpOworCQkJbnVtLS07CisJCQlyZXR1cm47CisJCX0KKwkJbnVtID0gMDsKKwl9CisJaWYgKG51bSA+IDApIHsKKwkJdXUudGltZV9sb3crKzsKKwkJaWYgKHV1LnRpbWVfbG93ID09IDApIHsKKwkJCXV1LnRpbWVfbWlkKys7CisJCQlpZiAodXUudGltZV9taWQgPT0gMCkKKwkJCQl1dS50aW1lX2hpX2FuZF92ZXJzaW9uKys7CisJCX0KKwkJbnVtLS07CisJCXV1aWRfcGFjaygmdXUsIG91dCk7CisJCXJldHVybjsKKwl9CisjZWxzZQorCWlmIChnZXRfdXVpZF92aWFfZGFlbW9uKFVVSUREX09QX1RJTUVfVVVJRCwgb3V0LCAwKSA9PSAwKQorCQlyZXR1cm47CisjZW5kaWYKKworCXV1aWRfX2dlbmVyYXRlX3RpbWUob3V0LCAwKTsKK30KKworCit2b2lkIHV1aWRfX2dlbmVyYXRlX3JhbmRvbSh1dWlkX3Qgb3V0LCBpbnQgKm51bSkKK3sKKwl1dWlkX3QJYnVmOworCXN0cnVjdCB1dWlkIHV1OworCWludCBpLCBuOworCisJaWYgKCFudW0gfHwgISpudW0pCisJCW4gPSAxOworCWVsc2UKKwkJbiA9ICpudW07CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoYnVmLCBzaXplb2YoYnVmKSk7CisJCXV1aWRfdW5wYWNrKGJ1ZiwgJnV1KTsKKworCQl1dS5jbG9ja19zZXEgPSAodXUuY2xvY2tfc2VxICYgMHgzRkZGKSB8IDB4ODAwMDsKKwkJdXUudGltZV9oaV9hbmRfdmVyc2lvbiA9ICh1dS50aW1lX2hpX2FuZF92ZXJzaW9uICYgMHgwRkZGKQorCQkJfCAweDQwMDA7CisJCXV1aWRfcGFjaygmdXUsIG91dCk7CisJCW91dCArPSBzaXplb2YodXVpZF90KTsKKwl9Cit9CisKK3ZvaWQgdXVpZF9nZW5lcmF0ZV9yYW5kb20odXVpZF90IG91dCkKK3sKKwlpbnQJbnVtID0gMTsKKwkvKiBObyByZWFsIHJlYXNvbiB0byB1c2UgdGhlIGRhZW1vbiBmb3IgcmFuZG9tIHV1aWQncyAtLSB5ZXQgKi8KKworCXV1aWRfX2dlbmVyYXRlX3JhbmRvbShvdXQsICZudW0pOworfQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGZyb250LWVuZCB0byB1dWlkX2dlbmVyYXRlX3JhbmRvbSBhbmQKKyAqIHV1aWRfZ2VuZXJhdGVfdGltZS4gIEl0IHVzZXMgdXVpZF9nZW5lcmF0ZV9yYW5kb20gb25seSBpZgorICogL2Rldi91cmFuZG9tIGlzIGF2YWlsYWJsZSwgc2luY2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGhhdmUKKyAqIGhpZ2gtcXVhbGl0eSByYW5kb21uZXNzLgorICovCit2b2lkIHV1aWRfZ2VuZXJhdGUodXVpZF90IG91dCkKK3sKKwlpZiAoZ2V0X3JhbmRvbV9mZCgpID49IDApCisJCXV1aWRfZ2VuZXJhdGVfcmFuZG9tKG91dCk7CisJZWxzZQorCQl1dWlkX2dlbmVyYXRlX3RpbWUob3V0KTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9nZW5fdXVpZF9udC5jIGIvZTJmc3Byb2dzL2xpYi91dWlkL2dlbl91dWlkX250LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0NGJmZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9nZW5fdXVpZF9udC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBnZW5fdXVpZF9udC5jIC0tIFVzZSBOVCBhcGkgdG8gZ2VuZXJhdGUgdXVpZAorICoKKyAqIFdyaXR0ZW4gYnkgQW5kcmV5IFNoZWRlbCAoYW5kcmV5c0Bucy5jci5jeWNvLmNvbSkKKyAqLworCisKKyNpbmNsdWRlICJ1dWlkUC5oIgorCisjcHJhZ21hIHdhcm5pbmcocHVzaCw0KQorCisjcHJhZ21hIGNvbW1lbnQobGliLCAibnRkbGwubGliIikKKworLy8KKy8vIEhlcmUgaXMgYSBuaWNlIGV4YW1wbGUgd2h5IGl0J3Mgbm90IGEgZ29vZCBpZGVhCisvLyB0byB1c2UgbmF0aXZlIEFQSSBpbiBvcmRpbmFyeSBhcHBsaWNhdGlvbnMuCisvLyBOdW1iZXIgb2YgcGFyYW1ldGVycyBpbiBmdW5jdGlvbiBiZWxvdyB3YXMgY2hhbmdlZCBmcm9tIDMgdG8gNAorLy8gZm9yIE5UNS4KKy8vCisvLworLy8gTlRTWVNBUEkKKy8vIE5UU1RBVFVTCisvLyBOVEFQSQorLy8gTnRBbGxvY2F0ZVV1aWRzKAorLy8gICAgIE9VVCBQVUxPTkcgcDEsCisvLyAgICAgT1VUIFBVTE9ORyBwMiwKKy8vICAgICBPVVQgUFVMT05HIHAzLAorLy8gICAgIE9VVCBQVUNIQVIgU2VlZCAvLyA2IGJ5dGVzCisvLyAgICk7CisvLworLy8KKwordW5zaWduZWQgbG9uZworX19zdGRjYWxsCitOdEFsbG9jYXRlVXVpZHMoCisgICB2b2lkKiBwMSwgIC8vIDggYnl0ZXMKKyAgIHZvaWQqIHAyLCAgLy8gNCBieXRlcworICAgdm9pZCogcDMgICAvLyA0IGJ5dGVzCisgICApOworCit0eXBlZGVmCit1bnNpZ25lZCBsb25nCisoX19zdGRjYWxsKgorTnRBbGxvY2F0ZVV1aWRzXzIwMDApKAorICAgdm9pZCogcDEsICAvLyA4IGJ5dGVzCisgICB2b2lkKiBwMiwgIC8vIDQgYnl0ZXMKKyAgIHZvaWQqIHAzLCAgLy8gNCBieXRlcworICAgdm9pZCogc2VlZCAvLyA2IGJ5dGVzCisgICApOworCisKKworLy8KKy8vIE5pY2UsIGJ1dCBpbnN0ZWFkIG9mIGluY2x1ZGluZyBudGRkay5oIG90IHdpbm50LmgKKy8vIEkgc2hvdWxkIGRlZmluZSBpdCBoZXJlIGJlY2F1c2UgdGhleSBNSVNTRUQgX19zdGRjYWxsIGluIHRob3NlIGhlYWRlcnMuCisvLworCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKK3N0cnVjdCBfVEVCKgorX19zdGRjYWxsCitOdEN1cnJlbnRUZWIodm9pZCk7CisKKworLy8KKy8vIFRoZSBvbmx5IHdheSB0byBnZXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzeXN0ZW0gaXMgdG8gZXhhbWluZQorLy8gb25lIHN0b3JlZCBpbiBQRUIuIEJ1dCBpdCdzIHByZXR0eSBkYW5nZXJvdXNlIGJlY2F1c2UgdGhpcyB2YWx1ZSBjb3VsZAorLy8gYmUgYWx0ZXJlZCBpbiBpbWFnZSBoZWFkZXIuCisvLworCitzdGF0aWMKK2ludAorTnQ1KHZvaWQpCit7CisJLy9yZXR1cm4gTnRDdXR0ZW50VGViKCktPlBlYi0+T1NNYWpvclZlcnNpb24gPj0gNTsKKwlyZXR1cm4gKGludCkqKGludCopKChjaGFyKikoaW50KSgqKGludCopKChjaGFyKilOdEN1cnJlbnRUZWIoKSArIDB4MzApKSArIDB4QTQpID49IDU7Cit9CisKKworCisKK3ZvaWQgdXVpZF9nZW5lcmF0ZSh1dWlkX3Qgb3V0KQoreworCWlmKE50NSgpKQorCXsKKwkJdW5zaWduZWQgY2hhciBzZWVkWzZdOworCQkoKE50QWxsb2NhdGVVdWlkc18yMDAwKU50QWxsb2NhdGVVdWlkcykob3V0LCAoKGNoYXIqKW91dCkrOCwgKChjaGFyKilvdXQpKzEyLCAmc2VlZFswXSApOworCX0KKwllbHNlCisJeworCQlOdEFsbG9jYXRlVXVpZHMob3V0LCAoKGNoYXIqKW91dCkrOCwgKChjaGFyKilvdXQpKzEyKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvaXNudWxsLmMgYi9lMmZzcHJvZ3MvbGliL3V1aWQvaXNudWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxZTdlNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9pc251bGwuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogaXNudWxsLmMgLS0tIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBVVUlEIGlzIG51bGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAidXVpZFAuaCIKKworLyogUmV0dXJucyAxIGlmIHRoZSB1dWlkIGlzIHRoZSBOVUxMIHV1aWQgKi8KK2ludCB1dWlkX2lzX251bGwoY29uc3QgdXVpZF90IHV1KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgCSpjcDsKKwlpbnQJCQlpOworCisJZm9yIChpPTAsIGNwID0gdXU7IGkgPCAxNjsgaSsrKQorCQlpZiAoKmNwKyspCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3BhY2suYyBiL2UyZnNwcm9ncy9saWIvdXVpZC9wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3NTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9wYWNrLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIEludGVybmFsIHJvdXRpbmUgZm9yIHBhY2tpbmcgVVVJRCdzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInV1aWRQLmgiCisKK3ZvaWQgdXVpZF9wYWNrKGNvbnN0IHN0cnVjdCB1dWlkICp1dSwgdXVpZF90IHB0cikKK3sKKwl1aW50MzJfdAl0bXA7CisJdW5zaWduZWQgY2hhcgkqb3V0ID0gcHRyOworCisJdG1wID0gdXUtPnRpbWVfbG93OworCW91dFszXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFsyXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFsxXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFswXSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwl0bXAgPSB1dS0+dGltZV9taWQ7CisJb3V0WzVdID0gKHVuc2lnbmVkIGNoYXIpIHRtcDsKKwl0bXAgPj49IDg7CisJb3V0WzRdID0gKHVuc2lnbmVkIGNoYXIpIHRtcDsKKworCXRtcCA9IHV1LT50aW1lX2hpX2FuZF92ZXJzaW9uOworCW91dFs3XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFs2XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwl0bXAgPSB1dS0+Y2xvY2tfc2VxOworCW91dFs5XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisJdG1wID4+PSA4OworCW91dFs4XSA9ICh1bnNpZ25lZCBjaGFyKSB0bXA7CisKKwltZW1jcHkob3V0KzEwLCB1dS0+bm9kZSwgNik7Cit9CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC9wYXJzZS5jIGIvZTJmc3Byb2dzL2xpYi91dWlkL3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0MzgzZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC9wYXJzZS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBwYXJzZS5jIC0tLSBVVUlEIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidXVpZFAuaCIKKworaW50IHV1aWRfcGFyc2UoY29uc3QgY2hhciAqaW4sIHV1aWRfdCB1dSkKK3sKKwlzdHJ1Y3QgdXVpZAl1dWlkOworCWludCAJCWk7CisJY29uc3QgY2hhcgkqY3A7CisJY2hhcgkJYnVmWzNdOworCisJaWYgKHN0cmxlbihpbikgIT0gMzYpCisJCXJldHVybiAtMTsKKwlmb3IgKGk9MCwgY3AgPSBpbjsgaSA8PSAzNjsgaSsrLGNwKyspIHsKKwkJaWYgKChpID09IDgpIHx8IChpID09IDEzKSB8fCAoaSA9PSAxOCkgfHwKKwkJICAgIChpID09IDIzKSkgeworCQkJaWYgKCpjcCA9PSAnLScpCisJCQkJY29udGludWU7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChpPT0gMzYpCisJCQlpZiAoKmNwID09IDApCisJCQkJY29udGludWU7CisJCWlmICghaXN4ZGlnaXQoKmNwKSkKKwkJCXJldHVybiAtMTsKKwl9CisJdXVpZC50aW1lX2xvdyA9IHN0cnRvdWwoaW4sIE5VTEwsIDE2KTsKKwl1dWlkLnRpbWVfbWlkID0gc3RydG91bChpbis5LCBOVUxMLCAxNik7CisJdXVpZC50aW1lX2hpX2FuZF92ZXJzaW9uID0gc3RydG91bChpbisxNCwgTlVMTCwgMTYpOworCXV1aWQuY2xvY2tfc2VxID0gc3RydG91bChpbisxOSwgTlVMTCwgMTYpOworCWNwID0gaW4rMjQ7CisJYnVmWzJdID0gMDsKKwlmb3IgKGk9MDsgaSA8IDY7IGkrKykgeworCQlidWZbMF0gPSAqY3ArKzsKKwkJYnVmWzFdID0gKmNwKys7CisJCXV1aWQubm9kZVtpXSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxNik7CisJfQorCisJdXVpZF9wYWNrKCZ1dWlkLCB1dSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdHN0X3V1aWQuYyBiL2UyZnNwcm9ncy9saWIvdXVpZC90c3RfdXVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWI2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdHN0X3V1aWQuYwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIHRzdF91dWlkLmMgLS0tIHRlc3QgcHJvZ3JhbSBmcm9tIHRoZSBVVUlEIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTggVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKyAqIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisgKiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyAqIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgVVVJRCBNWVVVSUQKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorCitzdGF0aWMgaW50IHRlc3RfdXVpZChjb25zdCBjaGFyICogdXVpZCwgaW50IGlzVmFsaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiB2YWxpZFN0clsyXSA9IHsiaW52YWxpZCIsICJ2YWxpZCJ9OworCXV1aWRfdCB1dWlkQml0czsKKwlpbnQgcGFyc2VkT2s7CisKKwlwYXJzZWRPayA9IHV1aWRfcGFyc2UodXVpZCwgdXVpZEJpdHMpID09IDA7CisKKwlwcmludGYoIiVzIGlzICVzIiwgdXVpZCwgdmFsaWRTdHJbaXNWYWxpZF0pOworCWlmIChwYXJzZWRPayAhPSBpc1ZhbGlkKSB7CisJCXByaW50ZigiIGJ1dCB1dWlkX3BhcnNlIHNheXMgJXNcbiIsIHZhbGlkU3RyW3BhcnNlZE9rXSk7CisJCXJldHVybiAxOworCX0KKwlwcmludGYoIiwgT0tcbiIpOworCXJldHVybiAwOworfQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBBVFRSKHgpCisjZW5kaWYKKworaW50CittYWluKGludCBhcmdjIEFUVFIoKHVudXNlZCkpICwgY2hhciAqKmFyZ3YgQVRUUigodW51c2VkKSkpCit7CisJdXVpZF90CQlidWYsIHRzdDsKKwljaGFyCQlzdHJbMTAwXTsKKwlzdHJ1Y3QgdGltZXZhbAl0djsKKwl0aW1lX3QJCXRpbWVfcmVnLCB0aW1lX2dlbjsKKwl1bnNpZ25lZCBjaGFyCSpjcDsKKwlpbnQgaTsKKwlpbnQgZmFpbGVkID0gMDsKKwlpbnQgdHlwZSwgdmFyaWFudDsKKworCXV1aWRfZ2VuZXJhdGUoYnVmKTsKKwl1dWlkX3VucGFyc2UoYnVmLCBzdHIpOworCXByaW50ZigiVVVJRCBnZW5lcmF0ZSA9ICVzXG4iLCBzdHIpOworCXByaW50ZigiVVVJRDogIik7CisJZm9yIChpPTAsIGNwID0gKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZjsgaSA8IDE2OyBpKyspIHsKKwkJcHJpbnRmKCIlMDJ4IiwgKmNwKyspOworCX0KKwlwcmludGYoIlxuIik7CisJdHlwZSA9IHV1aWRfdHlwZShidWYpOyAJdmFyaWFudCA9IHV1aWRfdmFyaWFudChidWYpOworCXByaW50ZigiVVVJRCB0eXBlID0gJWQsIFVVSUQgdmFyaWFudCA9ICVkXG4iLCB0eXBlLCB2YXJpYW50KTsKKwlpZiAodmFyaWFudCAhPSBVVUlEX1ZBUklBTlRfRENFKSB7CisJCXByaW50ZigiSW5jb3JyZWN0IFVVSUQgVmFyaWFudDsgd2FzIGV4cGVjdGluZyBEQ0UhXG4iKTsKKwkJZmFpbGVkKys7CisJfQorCXByaW50ZigiXG4iKTsKKworCXV1aWRfZ2VuZXJhdGVfcmFuZG9tKGJ1Zik7CisJdXVpZF91bnBhcnNlKGJ1Ziwgc3RyKTsKKwlwcmludGYoIlVVSUQgcmFuZG9tIHN0cmluZyA9ICVzXG4iLCBzdHIpOworCXByaW50ZigiVVVJRDogIik7CisJZm9yIChpPTAsIGNwID0gKHVuc2lnbmVkIGNoYXIgKikgJmJ1ZjsgaSA8IDE2OyBpKyspIHsKKwkJcHJpbnRmKCIlMDJ4IiwgKmNwKyspOworCX0KKwlwcmludGYoIlxuIik7CisJdHlwZSA9IHV1aWRfdHlwZShidWYpOworCXZhcmlhbnQgPSB1dWlkX3ZhcmlhbnQoYnVmKTsKKwlwcmludGYoIlVVSUQgdHlwZSA9ICVkLCBVVUlEIHZhcmlhbnQgPSAlZFxuIiwgdHlwZSwgdmFyaWFudCk7CisJaWYgKHZhcmlhbnQgIT0gVVVJRF9WQVJJQU5UX0RDRSkgeworCQlwcmludGYoIkluY29ycmVjdCBVVUlEIFZhcmlhbnQ7IHdhcyBleHBlY3RpbmcgRENFIVxuIik7CisJCWZhaWxlZCsrOworCX0KKwlpZiAodHlwZSAhPSA0KSB7CisJCXByaW50ZigiSW5jb3JyZWN0IFVVSUQgdHlwZTsgd2FzIGV4cGVjdGluZyAiCisJCSAgICAgICAiNCAocmFuZG9tIHR5cGUpIVxuIik7CisJCWZhaWxlZCsrOworCX0KKwlwcmludGYoIlxuIik7CisKKwl0aW1lX2dlbiA9IHRpbWUoMCk7CisJdXVpZF9nZW5lcmF0ZV90aW1lKGJ1Zik7CisJdXVpZF91bnBhcnNlKGJ1Ziwgc3RyKTsKKwlwcmludGYoIlVVSUQgc3RyaW5nID0gJXNcbiIsIHN0cik7CisJcHJpbnRmKCJVVUlEIHRpbWU6ICIpOworCWZvciAoaT0wLCBjcCA9ICh1bnNpZ25lZCBjaGFyICopICZidWY7IGkgPCAxNjsgaSsrKSB7CisJCXByaW50ZigiJTAyeCIsICpjcCsrKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCXR5cGUgPSB1dWlkX3R5cGUoYnVmKTsKKwl2YXJpYW50ID0gdXVpZF92YXJpYW50KGJ1Zik7CisJcHJpbnRmKCJVVUlEIHR5cGUgPSAlZCwgVVVJRCB2YXJpYW50ID0gJWRcbiIsIHR5cGUsIHZhcmlhbnQpOworCWlmICh2YXJpYW50ICE9IFVVSURfVkFSSUFOVF9EQ0UpIHsKKwkJcHJpbnRmKCJJbmNvcnJlY3QgVVVJRCBWYXJpYW50OyB3YXMgZXhwZWN0aW5nIERDRSFcbiIpOworCQlmYWlsZWQrKzsKKwl9CisJaWYgKHR5cGUgIT0gMSkgeworCQlwcmludGYoIkluY29ycmVjdCBVVUlEIHR5cGU7IHdhcyBleHBlY3RpbmcgIgorCQkgICAgICAgIjEgKHRpbWUtYmFzZWQgdHlwZSkhXFxuIik7CisJCWZhaWxlZCsrOworCX0KKworCXR2LnR2X3NlYyA9IDA7CisJdHYudHZfdXNlYyA9IDA7CisJdGltZV9yZWcgPSB1dWlkX3RpbWUoYnVmLCAmdHYpOworCXByaW50ZigiVVVJRCBnZW5lcmF0ZWQgYXQgJWx1IHJlcG9ydHMgJWx1ICglbGQuJWxkKVxuIiwKKwkgICAgICAgdGltZV9nZW4sIHRpbWVfcmVnLCB0di50dl9zZWMsIChsb25nKXR2LnR2X3VzZWMpOworCS8qIGFsbG93IDFzIG1hcmdpbiBpbiBjYXNlIG9mIHJvbGxvdmVyIGJldHdlZW4gc2FtcGxpbmcKKwkgKiB0aGUgY3VycmVudCB0aW1lIGFuZCB3aGVuIHRoZSBVVUlEIGlzIGdlbmVyYXRlZC4gKi8KKwlpZiAodGltZV9yZWcgPiB0aW1lX2dlbiArIDEpIHsKKwkJcHJpbnRmKCJVVUlEIHRpbWUgY29tcGFyaXNvbiBmYWlsZWQhXG4iKTsKKwkJZmFpbGVkKys7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJVVUlEIHRpbWUgY29tcGFyaXNvbiBzdWNjZWVkZWQuXG4iKTsKKwl9CisKKwl1dWlkX3BhcnNlKHN0ciwgdHN0KTsKKwlpZiAoIXV1aWRfY29tcGFyZShidWYsIHRzdCkpIHsKKwkJcHJpbnRmKCJVVUlEIHBhcnNlIGFuZCBjb21wYXJlIHN1Y2NlZWRlZC5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiVVVJRCBwYXJzZSBhbmQgY29tcGFyZSBmYWlsZWQhXG4iKTsKKwkJZmFpbGVkKys7CisJfQorCXV1aWRfY2xlYXIodHN0KTsKKwlpZiAodXVpZF9pc19udWxsKHRzdCkpCisJCXByaW50ZigiVVVJRCBjbGVhciBhbmQgaXMgbnVsbCBzdWNjZWVkZWQuXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRmKCJVVUlEIGNsZWFyIGFuZCBpcyBudWxsIGZhaWxlZCFcbiIpOworCQlmYWlsZWQrKzsKKwl9CisJdXVpZF9jb3B5KGJ1ZiwgdHN0KTsKKwlpZiAoIXV1aWRfY29tcGFyZShidWYsIHRzdCkpCisJCXByaW50ZigiVVVJRCBjb3B5IGFuZCBjb21wYXJlIHN1Y2NlZWRlZC5cbiIpOworCWVsc2UgeworCQlwcmludGYoIlVVSUQgY29weSBhbmQgY29tcGFyZSBmYWlsZWQhXG4iKTsKKwkJZmFpbGVkKys7CisJfQorCisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFiIiwgMSk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDlDQzUtNDcwMS00QTg0LTg5NUItMzU0QzU4NEE5ODFCIiwgMSk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFiYyIsIDApOworCWZhaWxlZCArPSB0ZXN0X3V1aWQoIjg0OTQ5Y2M1LTQ3MDEtNGE4NC04OTViLTM1NGM1ODRhOTgxIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzV4NDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUwNDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMTA0YTg0LTg5NWItMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMS00YTg0MDg5NWItMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMS00YTg0LTg5NWIwMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiZzQ5NDljYzUtNDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFiIiwgMCk7CisJZmFpbGVkICs9IHRlc3RfdXVpZCgiODQ5NDljYzUtNDcwMS00YTg0LTg5NWItMzU0YzU4NGE5ODFnIiwgMCk7CisKKwlpZiAoZmFpbGVkKSB7CisJCXByaW50ZigiJWQgZmFpbHVyZXMuXG4iLCBmYWlsZWQpOworCQlleGl0KDEpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91bnBhY2suYyBiL2UyZnNwcm9ncy9saWIvdXVpZC91bnBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFhZmYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL3VucGFjay5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBJbnRlcm5hbCByb3V0aW5lIGZvciB1bnBhY2tpbmcgVVVJRAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ1dWlkUC5oIgorCit2b2lkIHV1aWRfdW5wYWNrKGNvbnN0IHV1aWRfdCBpbiwgc3RydWN0IHV1aWQgKnV1KQoreworCWNvbnN0IHVpbnQ4X3QJKnB0ciA9IGluOworCXVpbnQzMl90CQl0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl0bXAgPSAodG1wIDw8IDgpIHwgKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPnRpbWVfbG93ID0gdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPnRpbWVfbWlkID0gdG1wOworCisJdG1wID0gKnB0cisrOworCXRtcCA9ICh0bXAgPDwgOCkgfCAqcHRyKys7CisJdXUtPnRpbWVfaGlfYW5kX3ZlcnNpb24gPSB0bXA7CisKKwl0bXAgPSAqcHRyKys7CisJdG1wID0gKHRtcCA8PCA4KSB8ICpwdHIrKzsKKwl1dS0+Y2xvY2tfc2VxID0gdG1wOworCisJbWVtY3B5KHV1LT5ub2RlLCBwdHIsIDYpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdW5wYXJzZS5jIGIvZTJmc3Byb2dzL2xpYi91dWlkL3VucGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTViYmIwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL3VucGFyc2UuYwpAQCAtMCwwICsxLDc2IEBACisvKgorICogdW5wYXJzZS5jIC0tIGNvbnZlcnQgYSBVVUlEIHRvIHN0cmluZworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAidXVpZFAuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9sb3dlciA9CisJIiUwOHgtJTA0eC0lMDR4LSUwMnglMDJ4LSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfdXBwZXIgPQorCSIlMDhYLSUwNFgtJTA0WC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiOworCisjaWZkZWYgVVVJRF9VTlBBUlNFX0RFRkFVTFRfVVBQRVIKKyNkZWZpbmUgRk1UX0RFRkFVTFQgZm10X3VwcGVyCisjZWxzZQorI2RlZmluZSBGTVRfREVGQVVMVCBmbXRfbG93ZXIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB1dWlkX3VucGFyc2VfeChjb25zdCB1dWlkX3QgdXUsIGNoYXIgKm91dCwgY29uc3QgY2hhciAqZm10KQoreworCXN0cnVjdCB1dWlkIHV1aWQ7CisKKwl1dWlkX3VucGFjayh1dSwgJnV1aWQpOworCXNwcmludGYob3V0LCBmbXQsCisJCXV1aWQudGltZV9sb3csIHV1aWQudGltZV9taWQsIHV1aWQudGltZV9oaV9hbmRfdmVyc2lvbiwKKwkJdXVpZC5jbG9ja19zZXEgPj4gOCwgdXVpZC5jbG9ja19zZXEgJiAweEZGLAorCQl1dWlkLm5vZGVbMF0sIHV1aWQubm9kZVsxXSwgdXVpZC5ub2RlWzJdLAorCQl1dWlkLm5vZGVbM10sIHV1aWQubm9kZVs0XSwgdXVpZC5ub2RlWzVdKTsKK30KKwordm9pZCB1dWlkX3VucGFyc2VfbG93ZXIoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpCit7CisJdXVpZF91bnBhcnNlX3godXUsIG91dCwJZm10X2xvd2VyKTsKK30KKwordm9pZCB1dWlkX3VucGFyc2VfdXBwZXIoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpCit7CisJdXVpZF91bnBhcnNlX3godXUsIG91dCwJZm10X3VwcGVyKTsKK30KKwordm9pZCB1dWlkX3VucGFyc2UoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpCit7CisJdXVpZF91bnBhcnNlX3godXUsIG91dCwgRk1UX0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWQuMy5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3NjBmZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLjMuaW4KQEAgLTAsMCArMSw2NiBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRCAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkIFwtIERDRSBjb21wYXRpYmxlIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIGxpYnJhcnkKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLlNIIERFU0NSSVBUSU9OCitUaGUgVVVJRCBsaWJyYXJ5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIGlkZW50aWZpZXJzIGZvciBvYmplY3RzIAordGhhdCBtYXkgYmUgYWNjZXNzaWJsZSBiZXlvbmQgdGhlIGxvY2FsIHN5c3RlbS4gIFRoaXMgbGlicmFyeQorZ2VuZXJhdGVzIFVVSURzIGNvbXBhdGlibGUgd2l0aCB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBPcGVuIFNvZnR3YXJlCitGb3VuZGF0aW9uIChPU0YpIERpc3RyaWJ1dGVkIENvbXB1dGluZyBFbnZpcm9ubWVudCAoRENFKSB1dGlsaXR5IAorLkJSIHV1aWRnZW4gLgorLnNwCitUaGUgVVVJRHMgZ2VuZXJhdGVkIGJ5IHRoaXMgbGlicmFyeSBjYW4gYmUgcmVhc29uYWJseSBleHBlY3RlZCB0byBiZQordW5pcXVlIHdpdGhpbiBhIHN5c3RlbSwgYW5kIHVuaXF1ZSBhY3Jvc3MgYWxsIHN5c3RlbXMuICBUaGV5IGNvdWxkCitiZSB1c2VkLCBmb3IgaW5zdGFuY2UsIHRvIGdlbmVyYXRlIHVuaXF1ZSBIVFRQIGNvb2tpZXMgYWNyb3NzIG11bHRpcGxlCit3ZWIgc2VydmVycyB3aXRob3V0IGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgc2VydmVycywgYW5kIHdpdGhvdXQgZmVhcgorb2YgYSBuYW1lIGNsYXNoLgorLlNIICJDT05GT1JNSU5HIFRPIgorT1NGIERDRSAxLjEKKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFkuIFRzJ28KKy5TSCBBVkFJTEFCSUxJVFkKK1RoZSBVVUlEIGxpYnJhcnkgaXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3RpbWUgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLmggYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhODQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogUHVibGljIGluY2x1ZGUgZmlsZSBmb3IgdGhlIFVVSUQgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX1VVSURfVVVJRF9ICisjZGVmaW5lIF9VVUlEX1VVSURfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1dWlkX3RbMTZdOworCisvKiBVVUlEIFZhcmlhbnQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVVVJRF9WQVJJQU5UX05DUyAJMAorI2RlZmluZSBVVUlEX1ZBUklBTlRfRENFIAkxCisjZGVmaW5lIFVVSURfVkFSSUFOVF9NSUNST1NPRlQJMgorI2RlZmluZSBVVUlEX1ZBUklBTlRfT1RIRVIJMworCisvKiBVVUlEIFR5cGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVVVJRF9UWVBFX0RDRV9USU1FICAgMQorI2RlZmluZSBVVUlEX1RZUEVfRENFX1JBTkRPTSA0CisKKy8qIEFsbG93IFVVSUQgY29uc3RhbnRzIHRvIGJlIGRlZmluZWQgKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBVVUlEX0RFRklORShuYW1lLHUwLHUxLHUyLHUzLHU0LHU1LHU2LHU3LHU4LHU5LHUxMCx1MTEsdTEyLHUxMyx1MTQsdTE1KSBcCisJc3RhdGljIGNvbnN0IHV1aWRfdCBuYW1lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9IHt1MCx1MSx1Mix1Myx1NCx1NSx1Nix1Nyx1OCx1OSx1MTAsdTExLHUxMix1MTMsdTE0LHUxNX0KKyNlbHNlCisjZGVmaW5lIFVVSURfREVGSU5FKG5hbWUsdTAsdTEsdTIsdTMsdTQsdTUsdTYsdTcsdTgsdTksdTEwLHUxMSx1MTIsdTEzLHUxNCx1MTUpIFwKKwlzdGF0aWMgY29uc3QgdXVpZF90IG5hbWUgPSB7dTAsdTEsdTIsdTMsdTQsdTUsdTYsdTcsdTgsdTksdTEwLHUxMSx1MTIsdTEzLHUxNCx1MTV9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBjbGVhci5jICovCit2b2lkIHV1aWRfY2xlYXIodXVpZF90IHV1KTsKKworLyogY29tcGFyZS5jICovCitpbnQgdXVpZF9jb21wYXJlKGNvbnN0IHV1aWRfdCB1dTEsIGNvbnN0IHV1aWRfdCB1dTIpOworCisvKiBjb3B5LmMgKi8KK3ZvaWQgdXVpZF9jb3B5KHV1aWRfdCBkc3QsIGNvbnN0IHV1aWRfdCBzcmMpOworCisvKiBnZW5fdXVpZC5jICovCit2b2lkIHV1aWRfZ2VuZXJhdGUodXVpZF90IG91dCk7Cit2b2lkIHV1aWRfZ2VuZXJhdGVfcmFuZG9tKHV1aWRfdCBvdXQpOwordm9pZCB1dWlkX2dlbmVyYXRlX3RpbWUodXVpZF90IG91dCk7CisKKy8qIGlzbnVsbC5jICovCitpbnQgdXVpZF9pc19udWxsKGNvbnN0IHV1aWRfdCB1dSk7CisKKy8qIHBhcnNlLmMgKi8KK2ludCB1dWlkX3BhcnNlKGNvbnN0IGNoYXIgKmluLCB1dWlkX3QgdXUpOworCisvKiB1bnBhcnNlLmMgKi8KK3ZvaWQgdXVpZF91bnBhcnNlKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KTsKK3ZvaWQgdXVpZF91bnBhcnNlX2xvd2VyKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KTsKK3ZvaWQgdXVpZF91bnBhcnNlX3VwcGVyKGNvbnN0IHV1aWRfdCB1dSwgY2hhciAqb3V0KTsKKworLyogdXVpZF90aW1lLmMgKi8KK3RpbWVfdCB1dWlkX3RpbWUoY29uc3QgdXVpZF90IHV1LCBzdHJ1Y3QgdGltZXZhbCAqcmV0X3R2KTsKK2ludCB1dWlkX3R5cGUoY29uc3QgdXVpZF90IHV1KTsKK2ludCB1dWlkX3ZhcmlhbnQoY29uc3QgdXVpZF90IHV1KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9VVUlEX1VVSURfSCAqLwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWQuaC5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4NDZkYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLmguaW4KQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBQdWJsaWMgaW5jbHVkZSBmaWxlIGZvciB0aGUgVVVJRCBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfVVVJRF9VVUlEX0gKKyNkZWZpbmUgX1VVSURfVVVJRF9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHV1aWRfdFsxNl07CisKKy8qIFVVSUQgVmFyaWFudCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVVUlEX1ZBUklBTlRfTkNTIAkwCisjZGVmaW5lIFVVSURfVkFSSUFOVF9EQ0UgCTEKKyNkZWZpbmUgVVVJRF9WQVJJQU5UX01JQ1JPU09GVAkyCisjZGVmaW5lIFVVSURfVkFSSUFOVF9PVEhFUgkzCisKKy8qIFVVSUQgVHlwZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBVVUlEX1RZUEVfRENFX1RJTUUgICAxCisjZGVmaW5lIFVVSURfVFlQRV9EQ0VfUkFORE9NIDQKKworLyogQWxsb3cgVVVJRCBjb25zdGFudHMgdG8gYmUgZGVmaW5lZCAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFVVSURfREVGSU5FKG5hbWUsdTAsdTEsdTIsdTMsdTQsdTUsdTYsdTcsdTgsdTksdTEwLHUxMSx1MTIsdTEzLHUxNCx1MTUpIFwKKwlzdGF0aWMgY29uc3QgdXVpZF90IG5hbWUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0ge3UwLHUxLHUyLHUzLHU0LHU1LHU2LHU3LHU4LHU5LHUxMCx1MTEsdTEyLHUxMyx1MTQsdTE1fQorI2Vsc2UKKyNkZWZpbmUgVVVJRF9ERUZJTkUobmFtZSx1MCx1MSx1Mix1Myx1NCx1NSx1Nix1Nyx1OCx1OSx1MTAsdTExLHUxMix1MTMsdTE0LHUxNSkgXAorCXN0YXRpYyBjb25zdCB1dWlkX3QgbmFtZSA9IHt1MCx1MSx1Mix1Myx1NCx1NSx1Nix1Nyx1OCx1OSx1MTAsdTExLHUxMix1MTMsdTE0LHUxNX0KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNsZWFyLmMgKi8KK3ZvaWQgdXVpZF9jbGVhcih1dWlkX3QgdXUpOworCisvKiBjb21wYXJlLmMgKi8KK2ludCB1dWlkX2NvbXBhcmUoY29uc3QgdXVpZF90IHV1MSwgY29uc3QgdXVpZF90IHV1Mik7CisKKy8qIGNvcHkuYyAqLwordm9pZCB1dWlkX2NvcHkodXVpZF90IGRzdCwgY29uc3QgdXVpZF90IHNyYyk7CisKKy8qIGdlbl91dWlkLmMgKi8KK3ZvaWQgdXVpZF9nZW5lcmF0ZSh1dWlkX3Qgb3V0KTsKK3ZvaWQgdXVpZF9nZW5lcmF0ZV9yYW5kb20odXVpZF90IG91dCk7Cit2b2lkIHV1aWRfZ2VuZXJhdGVfdGltZSh1dWlkX3Qgb3V0KTsKKworLyogaXNudWxsLmMgKi8KK2ludCB1dWlkX2lzX251bGwoY29uc3QgdXVpZF90IHV1KTsKKworLyogcGFyc2UuYyAqLworaW50IHV1aWRfcGFyc2UoY29uc3QgY2hhciAqaW4sIHV1aWRfdCB1dSk7CisKKy8qIHVucGFyc2UuYyAqLwordm9pZCB1dWlkX3VucGFyc2UoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpOwordm9pZCB1dWlkX3VucGFyc2VfbG93ZXIoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpOwordm9pZCB1dWlkX3VucGFyc2VfdXBwZXIoY29uc3QgdXVpZF90IHV1LCBjaGFyICpvdXQpOworCisvKiB1dWlkX3RpbWUuYyAqLwordGltZV90IHV1aWRfdGltZShjb25zdCB1dWlkX3QgdXUsIHN0cnVjdCB0aW1ldmFsICpyZXRfdHYpOworaW50IHV1aWRfdHlwZShjb25zdCB1dWlkX3QgdXUpOworaW50IHV1aWRfdmFyaWFudChjb25zdCB1dWlkX3QgdXUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1VVSURfVVVJRF9IICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZC5wYy5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTRlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZC5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogdXVpZAorRGVzY3JpcHRpb246IFVuaXZlcnNhbGx5IHVuaXF1ZSBpZCBsaWJyYXJ5CitWZXJzaW9uOiBARTJGU1BST0dTX1ZFUlNJT05ACitSZXF1aXJlczogCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS91dWlkIC1JJHtpbmNsdWRlZGlyfQorTGliczogLUwke2xpYmRpcn0gLWx1dWlkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZFAuaCBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTdiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZFAuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogdXVpZC5oIC0tIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIHV1aWRzCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHV1aWQvdXVpZF90eXBlcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKworLyoKKyAqIE9mZnNldCBiZXR3ZWVuIDE1LU9jdC0xNTgyIGFuZCAxLUphbi03MAorICovCisjZGVmaW5lIFRJTUVfT0ZGU0VUX0hJR0ggMHgwMUIyMUREMgorI2RlZmluZSBUSU1FX09GRlNFVF9MT1cgIDB4MTM4MTQwMDAKKworc3RydWN0IHV1aWQgeworCXVpbnQzMl90CXRpbWVfbG93OworCXVpbnQxNl90CXRpbWVfbWlkOworCXVpbnQxNl90CXRpbWVfaGlfYW5kX3ZlcnNpb247CisJdWludDE2X3QJY2xvY2tfc2VxOworCXVpbnQ4X3QJbm9kZVs2XTsKK307CisKKworLyoKKyAqIHByb3RvdHlwZXMKKyAqLwordm9pZCB1dWlkX3BhY2soY29uc3Qgc3RydWN0IHV1aWQgKnV1LCB1dWlkX3QgcHRyKTsKK3ZvaWQgdXVpZF91bnBhY2soY29uc3QgdXVpZF90IGluLCBzdHJ1Y3QgdXVpZCAqdXUpOwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWRfY2xlYXIuMy5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX2NsZWFyLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkMmJmMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX2NsZWFyLjMuaW4KQEAgLTAsMCArMSw2MCBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRF9DTEVBUiAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkX2NsZWFyIFwtIHJlc2V0IHZhbHVlIG9mIFVVSUQgdmFyaWFibGUgdG8gdGhlIE5VTEwgdmFsdWUKKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAidm9pZCB1dWlkX2NsZWFyKHV1aWRfdCAiIHV1ICk7CisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkX2NsZWFyCitmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3VwcGxpZWQgdXVpZCB2YXJpYWJsZQorLkkgdXUKK3RvIHRoZSBOVUxMIHZhbHVlLgorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2NvcHkgKDMpLAorLkJSIHV1aWRfZ2VuZXJhdGUgKDMpLAorLkJSIHV1aWRfaXNfbnVsbCAoMyksCisuQlIgdXVpZF9wYXJzZSAoMyksCisuQlIgdXVpZF91bnBhcnNlICgzKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWRfY29tcGFyZS4zLmluIGIvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWRfY29tcGFyZS4zLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzI5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9jb21wYXJlLjMuaW4KQEAgLTAsMCArMSw2NiBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRF9DT01QQVJFIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfY29tcGFyZSBcLSBjb21wYXJlIHdoZXRoZXIgdHdvIFVVSURzIGFyZSB0aGUgc2FtZQorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5zcAorLkJJICJpbnQgdXVpZF9jb21wYXJlKHV1aWRfdCAiIHV1MSAiLCB1dWlkX3QgIiB1dTIpCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkX2NvbXBhcmUKK2Z1bmN0aW9uIGNvbXBhcmVzIHRoZSB0d28gc3VwcGxpZWQgdXVpZCB2YXJpYWJsZXMKKy5JUiB1dTEgIiBhbmQgIiB1dTIKK3RvIGVhY2ggb3RoZXIuCisuU0ggUkVUVVJOIFZBTFVFCitSZXR1cm5zIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHplcm8gaWYgCisuSSB1dTEKK2lzIGZvdW5kLCAgcmVzcGVjdGl2ZWx5LCB0byBiZSBsZXhpZ3JhcGhpY2FsbHkgbGVzcyB0aGFuLCBlcXVhbCwgb3IgCitncmVhdGVyIHRoYW4gCisuSVIgdXUyIC4KKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFkuIFRzJ28KKy5TSCBBVkFJTEFCSUxJVFkKKy5VUiBodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworLlVFCisuU0ggIlNFRSBBTFNPIgorLkJSIHV1aWQgKDMpLAorLkJSIHV1aWRfY2xlYXIgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9jb3B5LjMuaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9jb3B5LjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZThjNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX2NvcHkuMy5pbgpAQCAtMCwwICsxLDYyIEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX0NPUFkgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZF9jb3B5IFwtIGNvcHkgYSBVVUlEIHZhbHVlCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLnNwCisuQkkgInZvaWQgdXVpZF9jb3B5KHV1aWRfdCAiIGRzdCAiLCB1dWlkX3QgIiBzcmMpOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZF9jb3B5CitmdW5jdGlvbiBjb3BpZXMgdGhlIFVVSUQgdmFyaWFibGUKKy5JUiBzcmMgIiB0byAiIGRzdCAuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgY29waWVkIFVVSUQgaXMgcmV0dXJuZWQgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKy5JUiBkc3QgLgorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2dlbmVyYXRlICgzKSwKKy5CUiB1dWlkX2lzX251bGwgKDMpLAorLkJSIHV1aWRfcGFyc2UgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX2dlbmVyYXRlLjMuaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9nZW5lcmF0ZS4zLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGUwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9nZW5lcmF0ZS4zLmluCkBAIC0wLDAgKzEsMTA0IEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX0dFTkVSQVRFIDMgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3V1aWRfZ2VuZXJhdGUsIHV1aWRfZ2VuZXJhdGVfcmFuZG9tLCB1dWlkX2dlbmVyYXRlX3RpbWUgXC0gY3JlYXRlIGEgbmV3IHVuaXF1ZSBVVUlEIHZhbHVlCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLnNwCisuQkkgInZvaWQgdXVpZF9nZW5lcmF0ZSh1dWlkX3QgIiBvdXQgKTsKKy5CSSAidm9pZCB1dWlkX2dlbmVyYXRlX3JhbmRvbSh1dWlkX3QgIiBvdXQgKTsKKy5CSSAidm9pZCB1dWlkX2dlbmVyYXRlX3RpbWUodXVpZF90ICIgb3V0ICk7CisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkX2dlbmVyYXRlCitmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKS4gIFRoZSB1dWlkIHdpbGwKK2JlIGdlbmVyYXRlZCBiYXNlZCBvbiBoaWdoLXF1YWxpdHkgcmFuZG9tbmVzcyBmcm9tIAorLklSIC9kZXYvdXJhbmRvbSAsIAoraWYgYXZhaWxhYmxlLiAgSWYgaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiAKKy5CIHV1aWRfZ2VuZXJhdGUgCit3aWxsIHVzZSBhbiBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gd2hpY2ggdXNlcyB0aGUgY3VycmVudCB0aW1lLCB0aGUKK2xvY2FsIGV0aGVybmV0IE1BQyBhZGRyZXNzIChpZiBhdmFpbGFibGUpLCBhbmQgcmFuZG9tIGRhdGEgZ2VuZXJhdGVkCit1c2luZyBhIHBzZXVkby1yYW5kb20gZ2VuZXJhdG9yLgorLnNwCitUaGUgCisuQiB1dWlkX2dlbmVyYXRlX3JhbmRvbQorZnVuY3Rpb24gZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIGFsbC1yYW5kb20gVVVJRCBmb3JtYXQsIGV2ZW4gaWYKK2EgaGlnaC1xdWFsaXR5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChpLmUuLCAKKy5JUiAvZGV2L3VyYW5kb20gKQoraXMgbm90IGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBhIHBzZXVkby1yYW5kb20KK2dlbmVyYXRvciB3aWxsIGJlIHN1YnNpdHV0ZWQuICBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhIHBzZXVkby1yYW5kb20KK2dlbmVyYXRvciBtYXkgY29tcHJvbWlzZSB0aGUgdW5pcXVlbmVzcyBvZiBVVUlEJ3MKK2dlbmVyYXRlZCBpbiB0aGlzIGZhc2hpb24uCisuc3AKK1RoZQorLkIgdXVpZF9nZW5lcmF0ZV90aW1lIAorZnVuY3Rpb24gZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSB3aGljaCB1c2VzIHRoZQorY3VycmVudCB0aW1lIGFuZCB0aGUgbG9jYWwgZXRoZXJuZXQgTUFDIGFkZHJlc3MgKGlmIGF2YWlsYWJsZSkuCitUaGlzIGFsZ29yaXRobSB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IG9uZSB1c2VkIHRvIGdlbmVyYXRlIFVVSUQsIGJ1dAorYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRoZSBldGhlcm5ldCBNQUMgYWRkcmVzcywgaXQgY2FuIGxlYWsKK2luZm9ybWF0aW9uIGFib3V0IHdoZW4gYW5kIHdoZXJlIHRoZSBVVUlEIHdhcyBnZW5lcmF0ZWQuICBUaGlzIGNhbiBjYXVzZQorcHJpdmFjeSBwcm9ibGVtcyBpbiBzb21lIGFwcGxpY2F0aW9ucywgc28gdGhlCisuQiB1dWlkX2dlbmVyYXRlCitmdW5jdGlvbiBvbmx5IHVzZXMgdGhpcyBhbGdvcml0aG0gaWYgYSBoaWdoLXF1YWxpdHkgc291cmNlIG9mCityYW5kb21uZXNzIGlzIG5vdCBhdmFpbGFibGUuICAKKy5zcAorVGhlIFVVSUQgaXMgMTYgYnl0ZXMgKDEyOCBiaXRzKSBsb25nLCB3aGljaCBnaXZlcyBhcHByb3hpbWF0ZWx5IDMuNHgxMF4zOAordW5pcXVlIHZhbHVlcyAodGhlcmUgYXJlIGFwcHJveGltYXRlbHkgMTBeODAgZWxlbW50YXJ5IHBhcnRpY2xlcyBpbgordGhlIHVuaXZlcnNlIGFjY29yZGluZyB0byBDYXJsIFNhZ2FuJ3MKKy5JUiBDb3Ntb3MgKS4KK1RoZSBuZXcgVVVJRCBjYW4gcmVhc29uYWJseSBiZSBjb25zaWRlcmVkIHVuaXF1ZSBhbW9uZyBhbGwgVVVJRHMgY3JlYXRlZAorb24gdGhlIGxvY2FsIHN5c3RlbSwgYW5kIGFtb25nIFVVSURzIGNyZWF0ZWQgb24gb3RoZXIgc3lzdGVtcyBpbiB0aGUgcGFzdAorYW5kIGluIHRoZSBmdXR1cmUuCisuU0ggUkVUVVJOIFZBTFVFCitUaGUgbmV3bHkgY3JlYXRlZCBVVUlEIGlzIHJldHVybmVkIGluIHRoZSBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0byBieQorLklSIG91dCAuCisuU0ggIkNPTkZPUk1JTkcgVE8iCitPU0YgRENFIDEuMQorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZGdlbiAoMSksCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2NvcHkgKDMpLAorLkJSIHV1aWRfaXNfbnVsbCAoMyksCisuQlIgdXVpZF9wYXJzZSAoMyksCisuQlIgdXVpZF90aW1lICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9pc19udWxsLjMuaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF9pc19udWxsLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0Mjg4ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX2lzX251bGwuMy5pbgpAQCAtMCwwICsxLDYyIEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX0lTX05VTEwgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZF9pc19udWxsIFwtIGNvbXBhcmUgdGhlIHZhbHVlIG9mIHRoZSBVVUlEIHRvIHRoZSBOVUxMIHZhbHVlCisuU0ggU1lOT1BTSVMKKy5uZgorLkIgI2luY2x1ZGUgPHV1aWQvdXVpZC5oPgorLnNwCisuQkkgImludCB1dWlkX2lzX251bGwodXVpZF90ICIgdXUgKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfaXNfbnVsbAorZnVuY3Rpb24gY29tcGFyZXMgdGhlIHZhbHVlIG9mIHRoZSBzdXBwbGllZCBVVUlEIHZhcmlhYmxlCisuSSB1dQordG8gdGhlIE5VTEwgdmFsdWUuICBJZiB0aGUgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIE5VTEwgVVVJRCwgMSBpcyByZXR1cm5lZCwKK290aGVyd2lzZSAwIGlzIHJldHVybmVkLgorLlNIIEFVVEhPUgorVGhlb2RvcmUgWS4gVHMnbworLlNIIEFWQUlMQUJJTElUWQorLlVSIGh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCisuVUUKKy5TSCAiU0VFIEFMU08iCisuQlIgdXVpZCAoMyksCisuQlIgdXVpZF9jbGVhciAoMyksCisuQlIgdXVpZF9jb21wYXJlICgzKSwKKy5CUiB1dWlkX2NvcHkgKDMpLAorLkJSIHV1aWRfZ2VuZXJhdGUgKDMpLAorLkJSIHV1aWRfdGltZSAoMyksCisuQlIgdXVpZF9wYXJzZSAoMyksCisuQlIgdXVpZF91bnBhcnNlICgzKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWRfcGFyc2UuMy5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3BhcnNlLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1YWNmYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3BhcnNlLjMuaW4KQEAgLTAsMCArMSw3MSBAQAorLlwiIENvcHlyaWdodCAxOTk5IEFuZHJlYXMgRGlsZ2VyIChhZGlsZ2VyQGVuZWwudWNhbGdhcnkuY2EpCisuXCIKKy5cIiAlQmVnaW4tSGVhZGVyJQorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6CisuXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKy5cIiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorLlwiICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorLlwiIFdISUNIIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUKKy5cIiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisuXCIgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKy5cIiBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKy5cIiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisuXCIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisuXCIgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKy5cIiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorLlwiIERBTUFHRS4KKy5cIiAlRW5kLUhlYWRlciUKKy5cIiAKKy5cIiBDcmVhdGVkICBXZWQgTWFyIDEwIDE3OjQyOjEyIDE5OTksIEFuZHJlYXMgRGlsZ2VyCisuVEggVVVJRF9QQVJTRSAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkX3BhcnNlIFwtIGNvbnZlcnQgYW4gaW5wdXQgVVVJRCBzdHJpbmcgaW50byBiaW5hcnkgcmVwcmVzZW50YXRpb24KKy5TSCBTWU5PUFNJUworLm5mCisuQiAjaW5jbHVkZSA8dXVpZC91dWlkLmg+Cisuc3AKKy5CSSAiaW50IHV1aWRfcGFyc2UoIGNoYXIgKiIgaW4gIiwgdXVpZF90ICIgdXUgKTsKKy5maQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHV1aWRfcGFyc2UKK2Z1bmN0aW9uIGNvbnZlcnRzIHRoZSBVVUlEIHN0cmluZyBnaXZlbiBieQorLkkgaW4KK2ludG8gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbi4gIFRoZSBpbnB1dCBVVUlEIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtCisxYjRlMjhiYVwtMmZhMVwtMTFkMlwtODgzZlwtYjlhNzYxYmRlM2ZiIChpbgorLkJSIHByaW50ZiAoMykKK2Zvcm1hdCAiJTA4eFwtJTA0eFwtJTA0eFwtJTA0eFwtJTAxMngiLCAzNiBieXRlcyBwbHVzIHRoZSB0cmFpbGluZyAnXFwwJykuCisuU0ggUkVUVVJOIFZBTFVFCitVcG9uIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZSBpbnB1dCBzdHJpbmcsIDAgaXMgcmV0dXJuZWQsIGFuZCB0aGUgVVVJRCBpcworc3RvcmVkIGluIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5CisuSVIgdXUgLAorb3RoZXJ3aXNlIFwtMSBpcyByZXR1cm5lZC4KKy5TSCAiQ09ORk9STUlORyBUTyIKK09TRiBEQ0UgMS4xCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3RpbWUgKDMpLAorLkJSIHV1aWRfdW5wYXJzZSAoMykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3RpbWUuMy5pbiBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3RpbWUuMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRjNzAwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL2xpYi91dWlkL3V1aWRfdGltZS4zLmluCkBAIC0wLDAgKzEsNzQgQEAKKy5cIiBDb3B5cmlnaHQgMTk5OSBBbmRyZWFzIERpbGdlciAoYWRpbGdlckBlbmVsLnVjYWxnYXJ5LmNhKQorLlwiCisuXCIgJUJlZ2luLUhlYWRlciUKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisuXCIgICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKy5cIiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIAorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKy5cIiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTEwgT0YKKy5cIiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisuXCIgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorLlwiIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCisuXCIgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisuXCIgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorLlwiIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLlwiIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisuXCIgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy5cIiBEQU1BR0UuCisuXCIgJUVuZC1IZWFkZXIlCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSURfVElNRSAzICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCit1dWlkX3RpbWUgXC0gZXh0cmFjdCB0aGUgdGltZSBhdCB3aGljaCB0aGUgVVVJRCB3YXMgY3JlYXRlZAorLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5zcAorLkJJICJ0aW1lX3QgdXVpZF90aW1lKHV1aWRfdCAiIHV1ICIsIHN0cnVjdCB0aW1ldmFsICoiIHJldF90diApCisuZmkKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkX3RpbWUKK2Z1bmN0aW9uIGV4dHJhY3RzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBzdXBwbGllZCB0aW1lLWJhc2VkIFVVSUQKKy5JIHV1Cit3YXMgY3JlYXRlZC4gIE5vdGUgdGhhdCB0aGUgVVVJRCBjcmVhdGlvbiB0aW1lIGlzIG9ubHkgZW5jb2RlZCB3aXRoaW4gCitjZXJ0YWluIHR5cGVzIG9mIFVVSURzLiAgVGhpcyBmdW5jdGlvbiBjYW4gb25seSByZWFzb25hYmx5IGV4cGVjdCB0byAKK2V4dHJhY3QgdGhlIGNyZWF0aW9uIHRpbWUgZm9yIFVVSURzIGNyZWF0ZWQgd2l0aCB0aGUgCisuQlIgdXVpZF9nZW5lcmF0ZV90aW1lICgzKQorZnVuY3Rpb24uICBJdCBtYXkgb3IgbWF5IG5vdCB3b3JrIHdpdGggVVVJRHMgY3JlYXRlZCBieSBvdGhlciBtZWNoYW5pc21zLgorLlNIICJSRVRVUk4gVkFMVUVTIgorVGhlIHRpbWUgYXQgd2hpY2ggdGhlIFVVSUQgd2FzIGNyZWF0ZWQsIGluIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwIEdNVAorKHRoZSBlcG9jaCksIGlzIHJldHVybmVkIChzZWUKKy5CUiB0aW1lICIoMikpLiIKK1RoZSB0aW1lIGF0IHdoaWNoIHRoZSBVVUlEIHdhcyBjcmVhdGVkLCBpbiBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMgc2luY2UKK3RoZSBlcG9jaCwgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKy5JIHJldF90dgorKHNlZQorLkJSIGdldHRpbWVvZmRheSAiKDIpKS4iCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF9pc19udWxsICgzKSwKKy5CUiB1dWlkX3BhcnNlICgzKSwKKy5CUiB1dWlkX3VucGFyc2UgKDMpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90aW1lLmMgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5NDI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3RpbWUuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIHV1aWRfdGltZS5jIC0tLSBJbnRlcnByZXQgdGhlIHRpbWUgZmllbGQgZnJvbSBhIHV1aWQuICBUaGlzIHByb2dyYW0KKyAqIAl2aW9sYXRlcyB0aGUgVVVJRCBhYnN0cmFjdGlvbiBiYXJyaWVyIGJ5IHJlYWNoaW5nIGludG8gdGhlIGd1dHMKKyAqCW9mIGEgVVVJRCBhbmQgaW50ZXJwcmV0aW5nIGl0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFMTCBPRgorICogV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKKyAqIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorICogVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgVVVJRCBNWVVVSUQKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAidXVpZFAuaCIKKwordGltZV90IHV1aWRfdGltZShjb25zdCB1dWlkX3QgdXUsIHN0cnVjdCB0aW1ldmFsICpyZXRfdHYpCit7CisJc3RydWN0IHRpbWV2YWwJCXR2OworCXN0cnVjdCB1dWlkCQl1dWlkOworCXVpbnQzMl90CQloaWdoOworCXVpbnQ2NF90CQljbG9ja19yZWc7CisKKwl1dWlkX3VucGFjayh1dSwgJnV1aWQpOworCisJaGlnaCA9IHV1aWQudGltZV9taWQgfCAoKHV1aWQudGltZV9oaV9hbmRfdmVyc2lvbiAmIDB4RkZGKSA8PCAxNik7CisJY2xvY2tfcmVnID0gdXVpZC50aW1lX2xvdyB8ICgodWludDY0X3QpIGhpZ2ggPDwgMzIpOworCisJY2xvY2tfcmVnIC09ICgoKHVpbnQ2NF90KSAweDAxQjIxREQyKSA8PCAzMikgKyAweDEzODE0MDAwOworCXR2LnR2X3NlYyA9IGNsb2NrX3JlZyAvIDEwMDAwMDAwOworCXR2LnR2X3VzZWMgPSAoY2xvY2tfcmVnICUgMTAwMDAwMDApIC8gMTA7CisKKwlpZiAocmV0X3R2KQorCQkqcmV0X3R2ID0gdHY7CisKKwlyZXR1cm4gdHYudHZfc2VjOworfQorCitpbnQgdXVpZF90eXBlKGNvbnN0IHV1aWRfdCB1dSkKK3sKKwlzdHJ1Y3QgdXVpZAkJdXVpZDsKKworCXV1aWRfdW5wYWNrKHV1LCAmdXVpZCk7CisJcmV0dXJuICgodXVpZC50aW1lX2hpX2FuZF92ZXJzaW9uID4+IDEyKSAmIDB4Rik7Cit9CisKK2ludCB1dWlkX3ZhcmlhbnQoY29uc3QgdXVpZF90IHV1KQoreworCXN0cnVjdCB1dWlkCQl1dWlkOworCWludAkJCXZhcjsKKworCXV1aWRfdW5wYWNrKHV1LCAmdXVpZCk7CisJdmFyID0gdXVpZC5jbG9ja19zZXE7CisKKwlpZiAoKHZhciAmIDB4ODAwMCkgPT0gMCkKKwkJcmV0dXJuIFVVSURfVkFSSUFOVF9OQ1M7CisJaWYgKCh2YXIgJiAweDQwMDApID09IDApCisJCXJldHVybiBVVUlEX1ZBUklBTlRfRENFOworCWlmICgodmFyICYgMHgyMDAwKSA9PSAwKQorCQlyZXR1cm4gVVVJRF9WQVJJQU5UX01JQ1JPU09GVDsKKwlyZXR1cm4gVVVJRF9WQVJJQU5UX09USEVSOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICp2YXJpYW50X3N0cmluZyhpbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIFVVSURfVkFSSUFOVF9OQ1M6CisJCXJldHVybiAiTkNTIjsKKwljYXNlIFVVSURfVkFSSUFOVF9EQ0U6CisJCXJldHVybiAiRENFIjsKKwljYXNlIFVVSURfVkFSSUFOVF9NSUNST1NPRlQ6CisJCXJldHVybiAiTWljcm9zb2Z0IjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIk90aGVyIjsKKwl9Cit9CisKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1dWlkX3QJCWJ1ZjsKKwl0aW1lX3QJCXRpbWVfcmVnOworCXN0cnVjdCB0aW1ldmFsCXR2OworCWludAkJdHlwZSwgdmFyaWFudDsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgdXVpZFxuIiwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCWlmICh1dWlkX3BhcnNlKGFyZ3ZbMV0sIGJ1ZikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFVVSUQ6ICVzXG4iLCBhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisJdmFyaWFudCA9IHV1aWRfdmFyaWFudChidWYpOworCXR5cGUgPSB1dWlkX3R5cGUoYnVmKTsKKwl0aW1lX3JlZyA9IHV1aWRfdGltZShidWYsICZ0dik7CisKKwlwcmludGYoIlVVSUQgdmFyaWFudCBpcyAlZCAoJXMpXG4iLCB2YXJpYW50LCB2YXJpYW50X3N0cmluZyh2YXJpYW50KSk7CisJaWYgKHZhcmlhbnQgIT0gVVVJRF9WQVJJQU5UX0RDRSkgeworCQlwcmludGYoIldhcm5pbmc6IFRoaXMgcHJvZ3JhbSBvbmx5IGtub3dzIGhvdyB0byBpbnRlcnByZXQgIgorCQkgICAgICAgIkRDRSBVVUlEcy5cblx0VGhlIHJlc3Qgb2YgdGhlIG91dHB1dCBpcyBsaWtlbHkgIgorCQkgICAgICAgInRvIGJlIGluY29ycmVjdCEhXG4iKTsKKwl9CisJcHJpbnRmKCJVVUlEIHR5cGUgaXMgJWQiLCB0eXBlKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDE6CisJCXByaW50ZigiICh0aW1lIGJhc2VkKVxuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJpbnRmKCIgKERDRSlcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByaW50ZigiIChuYW1lLWJhc2VkKVxuIik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHJpbnRmKCIgKHJhbmRvbSlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlxuIik7CisJfQorCWlmICh0eXBlICE9IDEpIHsKKwkJcHJpbnRmKCJXYXJuaW5nOiBub3QgYSB0aW1lLWJhc2VkIFVVSUQsIHNvIFVVSUQgdGltZSAiCisJCSAgICAgICAiZGVjb2Rpbmcgd2lsbCBsaWtlbHkgbm90IHdvcmshXG4iKTsKKwl9CisJcHJpbnRmKCJVVUlEIHRpbWUgaXM6ICglbGQsICVsZCk6ICVzXG4iLCB0di50dl9zZWMsIChsb25nKXR2LnR2X3VzZWMsCisJICAgICAgIGN0aW1lKCZ0aW1lX3JlZykpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3R5cGVzLmggYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OWE4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90eXBlcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qIAorICogSWYgbGludXgvdHlwZXMuaCBpcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQsIGFzc3VtZSBpdCBoYXMgZGVmaW5lZAorICogZXZlcnl0aGluZyB3ZSBuZWVkLiAgKGNyb3NzIGZpbmdlcnMpICBPdGhlciBoZWFkZXIgZmlsZXMgbWF5IGhhdmUgCisgKiBhbHNvIGRlZmluZWQgdGhlIHR5cGVzIHRoYXQgd2UgbmVlZC4KKyAqLworI2lmICghZGVmaW5lZChfU1RESU5UX0gpICYmICFkZWZpbmVkKF9VVUlEX1NURElOVF9IKSkKKyNkZWZpbmUgX1VVSURfU1RESU5UX0gKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKKworI2lmICg0ID09IDgpCit0eXBlZGVmIGludAkJaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CXVpbnQ2NF90OworI2VsaWYgKDQgPT0gOCkKK3R5cGVkZWYgbG9uZwkJaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwl1aW50NjRfdDsKKyNlbGlmICg4ID09IDgpCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgCWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIAlpbnQ2NF90OworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwl1aW50NjRfdDsKKyNlbmRpZgorCisjaWYgKDQgPT0gMikKK3R5cGVkZWYJaW50CQlpbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludDE2X3Q7CisjZWxpZiAoMiA9PSAyKQordHlwZWRlZglzaG9ydAkJaW50MTZfdDsKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJdWludDE2X3Q7CisjZWxzZQorICA/PT1lcnJvcjogdW5kZWZpbmVkIDE2IGJpdCB0eXBlCisjZW5kaWYKKworI2lmICg0ID09IDQpCit0eXBlZGVmCWludAkJaW50MzJfdDsKK3R5cGVkZWYJdW5zaWduZWQgaW50CXVpbnQzMl90OworI2VsaWYgKDQgPT0gNCkKK3R5cGVkZWYJbG9uZwkJaW50MzJfdDsKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwl1aW50MzJfdDsKKyNlbGlmICgyID09IDQpCit0eXBlZGVmCXNob3J0CQlpbnQzMl90OwordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAl1aW50MzJfdDsKKyNlbHNlCisgPz09IGVycm9yOiB1bmRlZmluZWQgMzIgYml0IHR5cGUKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3R5cGVzLmguaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90eXBlcy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMWZmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF90eXBlcy5oLmluCkBAIC0wLDAgKzEsNTAgQEAKKy8qIAorICogSWYgbGludXgvdHlwZXMuaCBpcyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQsIGFzc3VtZSBpdCBoYXMgZGVmaW5lZAorICogZXZlcnl0aGluZyB3ZSBuZWVkLiAgKGNyb3NzIGZpbmdlcnMpICBPdGhlciBoZWFkZXIgZmlsZXMgbWF5IGhhdmUgCisgKiBhbHNvIGRlZmluZWQgdGhlIHR5cGVzIHRoYXQgd2UgbmVlZC4KKyAqLworI2lmICghZGVmaW5lZChfU1RESU5UX0gpICYmICFkZWZpbmVkKF9VVUlEX1NURElOVF9IKSkKKyNkZWZpbmUgX1VVSURfU1RESU5UX0gKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKKworI2lmIChAU0laRU9GX0lOVEAgPT0gOCkKK3R5cGVkZWYgaW50CQlpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJdWludDY0X3Q7CisjZWxpZiAoQFNJWkVPRl9MT05HQCA9PSA4KQordHlwZWRlZiBsb25nCQlpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCXVpbnQ2NF90OworI2VsaWYgKEBTSVpFT0ZfTE9OR19MT05HQCA9PSA4KQorI2lmIGRlZmluZWQoX19HTlVDX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIAlpbnQ2NF90OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyAJaW50NjRfdDsKKyNlbmRpZgordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJdWludDY0X3Q7CisjZW5kaWYKKworI2lmIChAU0laRU9GX0lOVEAgPT0gMikKK3R5cGVkZWYJaW50CQlpbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludDE2X3Q7CisjZWxpZiAoQFNJWkVPRl9TSE9SVEAgPT0gMikKK3R5cGVkZWYJc2hvcnQJCWludDE2X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVpbnQxNl90OworI2Vsc2UKKyAgPz09ZXJyb3I6IHVuZGVmaW5lZCAxNiBiaXQgdHlwZQorI2VuZGlmCisKKyNpZiAoQFNJWkVPRl9JTlRAID09IDQpCit0eXBlZGVmCWludAkJaW50MzJfdDsKK3R5cGVkZWYJdW5zaWduZWQgaW50CXVpbnQzMl90OworI2VsaWYgKEBTSVpFT0ZfTE9OR0AgPT0gNCkKK3R5cGVkZWYJbG9uZwkJaW50MzJfdDsKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwl1aW50MzJfdDsKKyNlbGlmIChAU0laRU9GX1NIT1JUQCA9PSA0KQordHlwZWRlZglzaG9ydAkJaW50MzJfdDsKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJdWludDMyX3Q7CisjZWxzZQorID89PSBlcnJvcjogdW5kZWZpbmVkIDMyIGJpdCB0eXBlCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF91bnBhcnNlLjMuaW4gYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZF91bnBhcnNlLjMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4Mzg0NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkX3VucGFyc2UuMy5pbgpAQCAtMCwwICsxLDc5IEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiICVCZWdpbi1IZWFkZXIlCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJlIG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorLlwiICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisuXCIgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisuXCIgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorLlwiICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy5cIiAKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisuXCIgV0hJQ0ggQVJFIEhFUkVCWSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRQorLlwiIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKy5cIiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorLlwiIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorLlwiIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKy5cIiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorLlwiIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisuXCIgREFNQUdFLgorLlwiICVFbmQtSGVhZGVyJQorLlwiIAorLlwiIENyZWF0ZWQgIFdlZCBNYXIgMTAgMTc6NDI6MTIgMTk5OSwgQW5kcmVhcyBEaWxnZXIKKy5USCBVVUlEX1VOUEFSU0UgMyAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZF91bnBhcnNlIFwtIGNvbnZlcnQgYW4gVVVJRCBmcm9tIGJpbmFyeSByZXByZXNlbnRhdGlvbiB0byBhIHN0cmluZworLlNIIFNZTk9QU0lTCisubmYKKy5CICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKy5zcAorLkJJICJ2b2lkIHV1aWRfdW5wYXJzZSh1dWlkX3QgIiB1dSAiLCBjaGFyICoiIG91dCApOworLkJJICJ2b2lkIHV1aWRfdW5wYXJzZV91cHBlcih1dWlkX3QgIiB1dSAiLCBjaGFyICoiIG91dCApOworLkJJICJ2b2lkIHV1aWRfdW5wYXJzZV9sb3dlcih1dWlkX3QgIiB1dSAiLCBjaGFyICoiIG91dCApOworLmZpCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZF91bnBhcnNlCitmdW5jdGlvbiBjb252ZXJ0cyB0aGUgc3VwcGxpZWQgVVVJRAorLkkgdXUKK2Zyb20gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgMzZcLWJ5dGUgc3RyaW5nIChwbHVzIHRhaWxpbmcgJ1xcMCcpCitvZiB0aGUgZm9ybSAxYjRlMjhiYVwtMmZhMVwtMTFkMlwtODgzZlwtMDAxNmQzY2NhNDI3IGFuZCBzdG9yZXMgdGhpcyAKK3ZhbHVlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkKKy5JUiBvdXQgLiAgCitUaGUgY2FzZSBvZiB0aGUgaGV4IGRpZ2l0cyByZXR1cm5lZCBieSAKKy5CIHV1aWRfdW5wYXJzZQorbWF5IGJlIHVwcGVyIG9yIGxvd2VyIGNhc2UsIGFuZCBpcworZGVwZW5kZW50IG9uIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGxvY2FsIGRlZmF1bHQuICAKKy5QUAorSWYgdGhlIGNhc2Ugb2YgdGhlCitoZXggZGlnaXRzIGlzIGltcG9ydGFudCB0aGVuIHRoZSBmdW5jdGlvbnMKKy5CIHV1aWRfdW5wYXJzZV91cHBlcgorYW5kIAorLkIgdXVpZF91bnBhcnNlX2xvd2VyCittYXkgYmUgdXNlZC4KKy5TSCAiQ09ORk9STUlORyBUTyIKK09TRiBEQ0UgMS4xCisuU0ggQVVUSE9SCitUaGVvZG9yZSBZLiBUcydvCisuU0ggQVZBSUxBQklMSVRZCisuVVIgaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8KKy5VRQorLlNIICJTRUUgQUxTTyIKKy5CUiB1dWlkICgzKSwKKy5CUiB1dWlkX2NsZWFyICgzKSwKKy5CUiB1dWlkX2NvbXBhcmUgKDMpLAorLkJSIHV1aWRfY29weSAoMyksCisuQlIgdXVpZF9nZW5lcmF0ZSAoMyksCisuQlIgdXVpZF90aW1lICgzKSwKKy5CUiB1dWlkX2lzX251bGwgKDMpLAorLkJSIHV1aWRfcGFyc2UgKDMpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZGQuaCBiL2UyZnNwcm9ncy9saWIvdXVpZC91dWlkZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MWY0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbGliL3V1aWQvdXVpZGQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgdXVpZGQgZGFlbW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUxMIE9GCisgKiBXSElDSCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorICogT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2lmbmRlZiBfVVVJRF9VVUlERF9ICisjZGVmaW5lIF9VVUlEX1VVSUREX0gKKworI2RlZmluZSBVVUlERF9ESVIJCSIvdmFyL2xpYi9saWJ1dWlkIgorI2RlZmluZSBVVUlERF9TT0NLRVRfUEFUSAlVVUlERF9ESVIgIi9yZXF1ZXN0IgorI2RlZmluZSBVVUlERF9QSURGSUxFX1BBVEgJVVVJRERfRElSICIvdXVpZGQucGlkIgorI2RlZmluZSBVVUlERF9QQVRICQkiL3Vzci9zYmluL3V1aWRkIgorCisjZGVmaW5lIFVVSUREX09QX0dFVFBJRAkJCTAKKyNkZWZpbmUgVVVJRERfT1BfR0VUX01BWE9QCQkxCisjZGVmaW5lIFVVSUREX09QX1RJTUVfVVVJRAkJMgorI2RlZmluZSBVVUlERF9PUF9SQU5ET01fVVVJRAkJMworI2RlZmluZSBVVUlERF9PUF9CVUxLX1RJTUVfVVVJRAkJNAorI2RlZmluZSBVVUlERF9PUF9CVUxLX1JBTkRPTV9VVUlECTUKKyNkZWZpbmUgVVVJRERfTUFYX09QCQkJVVVJRERfT1BfQlVMS19SQU5ET01fVVVJRAorCitleHRlcm4gdm9pZCB1dWlkX19nZW5lcmF0ZV90aW1lKHV1aWRfdCBvdXQsIGludCAqbnVtKTsKK2V4dGVybiB2b2lkIHV1aWRfX2dlbmVyYXRlX3JhbmRvbSh1dWlkX3Qgb3V0LCBpbnQgKm51bSk7CisKKyNlbmRpZiAvKiBfVVVJRF9VVUlEX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL0FuZHJvaWQubWsgYi9lMmZzcHJvZ3MvbWlzYy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmE2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNDU3IEBACitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgbWtlMmZzCitta2UyZnNfc3JjX2ZpbGVzIDo9IFwKKwlta2UyZnMuYyBcCisJdXRpbC5jIFwKKwlkZWZhdWx0X3Byb2ZpbGUuYworCitta2UyZnNfY19pbmNsdWRlcyA6PSBcCisJZXh0ZXJuYWwvZTJmc3Byb2dzL2UyZnNjaworCitta2UyZnNfY2ZsYWdzIDo9IC1PMiAtZyAtVyAtV2FsbCBcCisJLURIQVZFX1VOSVNURF9IIFwKKwktREhBVkVfRVJSTk9fSCBcCisJLURIQVZFX05FVElORVRfSU5fSCBcCisJLURIQVZFX1NZU19JT0NUTF9IIFwKKwktREhBVkVfU1lTX01NQU5fSCBcCisJLURIQVZFX1NZU19NT1VOVF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkNBU0VDTVAgXAorCS1ESEFWRV9TVFJEVVAgXAorCS1ESEFWRV9NTUFQIFwKKwktREhBVkVfVVRJTUVfSCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9HRVRPUFRfSCBcCisJLURIQVZFX1NZU19USU1FX0ggXAorCS1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYKKworbWtlMmZzX2NmbGFnc19saW51eCA6PSBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9TWVNfUFJDVExfSCBcCisJLURIQVZFX0xTRUVLNjQgXAorCS1ESEFWRV9MU0VFSzY0X1BST1RPVFlQRQorCitta2UyZnNfY2ZsYWdzICs9IC1ETk9fQ0hFQ0tfQkIKKworbWtlMmZzX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorCWxpYmV4dDJmcyBcCisJbGliZXh0Ml9ibGtpZCBcCisJbGliZXh0Ml91dWlkIFwKKwlsaWJleHQyX3Byb2ZpbGUgXAorCWxpYmV4dDJfcXVvdGEgXAorCWxpYmV4dDJfY29tX2VyciBcCisJbGliZXh0Ml9lMnAKKworbWtlMmZzX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmMKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKG1rZTJmc19zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobWtlMmZzX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChta2UyZnNfY2ZsYWdzKSAkKG1rZTJmc19jZmxhZ3NfbGludXgpCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSAkKG1rZTJmc19zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChta2UyZnNfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSBta2UyZnMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKG1rZTJmc19zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobWtlMmZzX2NfaW5jbHVkZXMpCitpZmVxICgkKEhPU1RfT1MpLGxpbnV4KQorTE9DQUxfQ0ZMQUdTIDo9ICQobWtlMmZzX2NmbGFncykgJChta2UyZnNfY2ZsYWdzX2xpbnV4KQorZWxzZQorTE9DQUxfQ0ZMQUdTIDo9ICQobWtlMmZzX2NmbGFncykKK2VuZGlmCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9ICQoYWRkc3VmZml4IC1ob3N0LCAkKG1rZTJmc19zaGFyZWRfbGlicmFyaWVzKSkKK0xPQ0FMX01PRFVMRSA6PSBta2UyZnNfaG9zdAorTE9DQUxfTU9EVUxFX1NURU0gOj0gbWtlMmZzCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgdHVuZTJmcworIwordHVuZTJmc19zcmNfZmlsZXMgOj0gXAorCXR1bmUyZnMuYyBcCisJdXRpbC5jCisKK3R1bmUyZnNfY19pbmNsdWRlcyA6PSBcCisJZXh0ZXJuYWwvZTJmc3Byb2dzL2UyZnNjaworCit0dW5lMmZzX2NmbGFncyA6PSAtTzIgLWcgLVcgLVdhbGwgXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkNBU0VDTVAgXAorCS1ESEFWRV9TVFJEVVAgXAorCS1ESEFWRV9NTUFQIFwKKwktREhBVkVfVVRJTUVfSCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9MSU5VWF9GRF9IIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfR0VUT1BUX0ggXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKwktREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GCisKK3R1bmUyZnNfY2ZsYWdzICs9IC1ETk9fQ0hFQ0tfQkIKKwordHVuZTJmc19zaGFyZWRfbGlicmFyaWVzIDo9IFwKKwlsaWJleHQyZnMgXAorCWxpYmV4dDJfY29tX2VyciBcCisJbGliZXh0Ml9ibGtpZCBcCisJbGliZXh0Ml9xdW90YSBcCisJbGliZXh0Ml91dWlkIFwKKwlsaWJleHQyX2UycAorCit0dW5lMmZzX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmMKKworCit0dW5lMmZzX3N0YXRpY19saWJyYXJpZXMgOj0gXAorCWxpYmV4dDJfY29tX2VyciBcCisJbGliZXh0Ml9ibGtpZCBcCisJbGliZXh0Ml9xdW90YSBcCisJbGliZXh0Ml91dWlkX3N0YXRpYyBcCisJbGliZXh0Ml9lMnAgXAorCWxpYmV4dDJmcworCit0dW5lMmZzX3N5c3RlbV9zdGF0aWNfbGlicmFyaWVzIDo9IGxpYmMKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHR1bmUyZnNfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKHR1bmUyZnNfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKHR1bmUyZnNfY2ZsYWdzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKHR1bmUyZnNfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9ICQodHVuZTJmc19zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSB0dW5lMmZzCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHR1bmUyZnNfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKHR1bmUyZnNfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKHR1bmUyZnNfY2ZsYWdzKQorTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSAkKHR1bmUyZnNfc3RhdGljX2xpYnJhcmllcykgJCh0dW5lMmZzX3N5c3RlbV9zdGF0aWNfbGlicmFyaWVzKQorTE9DQUxfRk9SQ0VfU1RBVElDX0VYRUNVVEFCTEUgOj0gdHJ1ZQorTE9DQUxfTU9EVUxFIDo9IHR1bmUyZnNfc3RhdGljCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHR1bmUyZnNfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKHR1bmUyZnNfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKHR1bmUyZnNfY2ZsYWdzKSAtREJVSUxEX0FTX0xJQgorTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSAkKHR1bmUyZnNfc3RhdGljX2xpYnJhcmllcykgJCh0dW5lMmZzX3N5c3RlbV9zdGF0aWNfbGlicmFyaWVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYnR1bmUyZnMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHR1bmUyZnNfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKHR1bmUyZnNfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKHR1bmUyZnNfY2ZsYWdzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKGFkZHN1ZmZpeCAtaG9zdCwgJCh0dW5lMmZzX3NoYXJlZF9saWJyYXJpZXMpKQorTE9DQUxfTU9EVUxFIDo9IHR1bmUyZnNfaG9zdAorTE9DQUxfTU9EVUxFX1NURU0gOj0gdHVuZTJmcworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfRVhFQ1VUQUJMRSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCBiYWRibG9ja3MKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitiYWRibG9ja3Nfc3JjX2ZpbGVzIDo9IFwKKwliYWRibG9ja3MuYworCitiYWRibG9ja3NfY19pbmNsdWRlcyA6PQorCitiYWRibG9ja3NfY2ZsYWdzIDo9IC1PMiAtZyAtVyAtV2FsbCBcCisJLURIQVZFX1VOSVNURF9IIFwKKwktREhBVkVfRVJSTk9fSCBcCisJLURIQVZFX05FVElORVRfSU5fSCBcCisJLURIQVZFX1NZU19JT0NUTF9IIFwKKwktREhBVkVfU1lTX01NQU5fSCBcCisJLURIQVZFX1NZU19NT1VOVF9IIFwKKwktREhBVkVfU1lTX1BSQ1RMX0ggXAorCS1ESEFWRV9TWVNfUkVTT1VSQ0VfSCBcCisJLURIQVZFX1NZU19TRUxFQ1RfSCBcCisJLURIQVZFX1NZU19TVEFUX0ggXAorCS1ESEFWRV9TWVNfVFlQRVNfSCBcCisJLURIQVZFX1NURExJQl9IIFwKKwktREhBVkVfU1RSQ0FTRUNNUCBcCisJLURIQVZFX1NUUkRVUCBcCisJLURIQVZFX01NQVAgXAorCS1ESEFWRV9VVElNRV9IIFwKKwktREhBVkVfR0VUUEFHRVNJWkUgXAorCS1ESEFWRV9MU0VFSzY0IFwKKwktREhBVkVfTFNFRUs2NF9QUk9UT1RZUEUgXAorCS1ESEFWRV9FWFQyX0lPQ1RMUyBcCisJLURIQVZFX0xJTlVYX0ZEX0ggXAorCS1ESEFWRV9UWVBFX1NTSVpFX1QgXAorCS1ESEFWRV9HRVRPUFRfSCBcCisJLURIQVZFX1NZU19USU1FX0ggXAorCS1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYKKworYmFkYmxvY2tzX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorCWxpYmV4dDJmcyBcCisJbGliZXh0Ml9jb21fZXJyIFwKKwlsaWJleHQyX3V1aWQgXAorCWxpYmV4dDJfYmxraWQgXAorCWxpYmV4dDJfZTJwCisKK2JhZGJsb2Nrc19zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChiYWRibG9ja3Nfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGJhZGJsb2Nrc19jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQoYmFkYmxvY2tzX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChiYWRibG9ja3Nfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9ICQoYmFkYmxvY2tzX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfTU9EVUxFIDo9IGJhZGJsb2NrcworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChiYWRibG9ja3Nfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGJhZGJsb2Nrc19jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQoYmFkYmxvY2tzX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChhZGRzdWZmaXggLWhvc3QsICQoYmFkYmxvY2tzX3NoYXJlZF9saWJyYXJpZXMpKQorTE9DQUxfTU9EVUxFIDo9IGJhZGJsb2Nrc19ob3N0CitMT0NBTF9NT0RVTEVfU1RFTSA6PSBiYWRibG9ja3MKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgY2hhdHRyCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworY2hhdHRyX3NyY19maWxlcyA6PSBcCisJY2hhdHRyLmMKKworY2hhdHRyX2NfaW5jbHVkZXMgOj0gXAorCWV4dGVybmFsL2UyZnNwcm9ncy9saWIKKworY2hhdHRyX2NmbGFncyA6PSAtTzIgLWcgLVcgLVdhbGwgXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkNBU0VDTVAgXAorCS1ESEFWRV9TVFJEVVAgXAorCS1ESEFWRV9NTUFQIFwKKwktREhBVkVfVVRJTUVfSCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9MSU5VWF9GRF9IIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfR0VUT1BUX0ggXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKwktREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GCisKK2NoYXR0cl9zaGFyZWRfbGlicmFyaWVzIDo9IFwKKwlsaWJleHQyX2NvbV9lcnIgXAorCWxpYmV4dDJfZTJwCisKK2NoYXR0cl9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChjaGF0dHJfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGNoYXR0cl9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQoY2hhdHRyX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChjaGF0dHJfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9ICQoY2hhdHRyX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfTU9EVUxFIDo9IGNoYXR0cgorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChjaGF0dHJfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGNoYXR0cl9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQoY2hhdHRyX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChhZGRzdWZmaXggLWhvc3QsICQoY2hhdHRyX3NoYXJlZF9saWJyYXJpZXMpKQorTE9DQUxfTU9EVUxFIDo9IGNoYXR0cl9ob3N0CitMT0NBTF9NT0RVTEVfU1RFTSA6PSBjaGF0dHIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgbHNhdHRyCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworbHNhdHRyX3NyY19maWxlcyA6PSBcCisJbHNhdHRyLmMKKworbHNhdHRyX2NfaW5jbHVkZXMgOj0gXAorCWV4dGVybmFsL2UyZnNwcm9ncy9saWIKKworbHNhdHRyX2NmbGFncyA6PSAtTzIgLWcgLVcgLVdhbGwgXAorCS1ESEFWRV9VTklTVERfSCBcCisJLURIQVZFX0VSUk5PX0ggXAorCS1ESEFWRV9ORVRJTkVUX0lOX0ggXAorCS1ESEFWRV9TWVNfSU9DVExfSCBcCisJLURIQVZFX1NZU19NTUFOX0ggXAorCS1ESEFWRV9TWVNfTU9VTlRfSCBcCisJLURIQVZFX1NZU19QUkNUTF9IIFwKKwktREhBVkVfU1lTX1JFU09VUkNFX0ggXAorCS1ESEFWRV9TWVNfU0VMRUNUX0ggXAorCS1ESEFWRV9TWVNfU1RBVF9IIFwKKwktREhBVkVfU1lTX1RZUEVTX0ggXAorCS1ESEFWRV9TVERMSUJfSCBcCisJLURIQVZFX1NUUkNBU0VDTVAgXAorCS1ESEFWRV9TVFJEVVAgXAorCS1ESEFWRV9NTUFQIFwKKwktREhBVkVfVVRJTUVfSCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9MSU5VWF9GRF9IIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfR0VUT1BUX0ggXAorCS1ESEFWRV9TWVNfVElNRV9IIFwKKwktREhBVkVfU1lTX1BBUkFNX0ggXAorCS1ESEFWRV9TWVNDT05GCisKK2xzYXR0cl9zaGFyZWRfbGlicmFyaWVzIDo9IFwKKwlsaWJleHQyX2NvbV9lcnIgXAorCWxpYmV4dDJfZTJwCisKK2xzYXR0cl9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsc2F0dHJfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxzYXR0cl9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobHNhdHRyX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChsc2F0dHJfc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9ICQobHNhdHRyX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfTU9EVUxFIDo9IGxzYXR0cgorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsc2F0dHJfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxzYXR0cl9jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobHNhdHRyX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChhZGRzdWZmaXggLWhvc3QsICQobHNhdHRyX3NoYXJlZF9saWJyYXJpZXMpKQorTE9DQUxfTU9EVUxFIDo9IGxzYXR0cl9ob3N0CitMT0NBTF9NT0RVTEVfU1RFTSA6PSBsc2F0dHIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgYmxraWQKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitibGtpZF9zcmNfZmlsZXMgOj0gXAorICAgIGJsa2lkLmMKKworYmxraWRfY19pbmNsdWRlcyA6PQorCitibGtpZF9jZmxhZ3MgOj0gLU8yIC1nIC1XIC1XYWxsIFwKKyAgICAtREhBVkVfVU5JU1REX0ggXAorICAgIC1ESEFWRV9FUlJOT19IIFwKKyAgICAtREhBVkVfTkVUSU5FVF9JTl9IIFwKKyAgICAtREhBVkVfU1lTX0lPQ1RMX0ggXAorICAgIC1ESEFWRV9TWVNfTU1BTl9IIFwKKyAgICAtREhBVkVfU1lTX01PVU5UX0ggXAorICAgIC1ESEFWRV9TWVNfUFJDVExfSCBcCisgICAgLURIQVZFX1NZU19SRVNPVVJDRV9IIFwKKyAgICAtREhBVkVfU1lTX1NFTEVDVF9IIFwKKyAgICAtREhBVkVfU1lTX1NUQVRfSCBcCisgICAgLURIQVZFX1NZU19UWVBFU19IIFwKKyAgICAtREhBVkVfU1RETElCX0ggXAorICAgIC1ESEFWRV9TVFJDQVNFQ01QIFwKKyAgICAtREhBVkVfU1RSRFVQIFwKKyAgICAtREhBVkVfTU1BUCBcCisgICAgLURIQVZFX1VUSU1FX0ggXAorICAgIC1ESEFWRV9HRVRQQUdFU0laRSBcCisgICAgLURIQVZFX0xTRUVLNjQgXAorICAgIC1ESEFWRV9MU0VFSzY0X1BST1RPVFlQRSBcCisgICAgLURIQVZFX0VYVDJfSU9DVExTIFwKKyAgICAtREhBVkVfTElOVVhfRkRfSCBcCisgICAgLURIQVZFX1RZUEVfU1NJWkVfVCBcCisgICAgLURIQVZFX0dFVE9QVF9IIFwKKyAgICAtREhBVkVfU1lTX1RJTUVfSCBcCisgICAgLURIQVZFX1NZU19QQVJBTV9IIFwKKyAgICAtREhBVkVfU1lTQ09ORiBcCisgICAgLURIQVZFX1RFUk1JT19ICisKK2Jsa2lkX3NoYXJlZF9saWJyYXJpZXMgOj0gXAorICAgIGxpYmV4dDJmcyBcCisgICAgbGliZXh0Ml9ibGtpZCBcCisgICAgbGliZXh0Ml9jb21fZXJyIFwKKyAgICBsaWJleHQyX2UycAorCitibGtpZF9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcyA6PSBsaWJjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChibGtpZF9zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQoYmxraWRfY19pbmNsdWRlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGJsa2lkX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChibGtpZF9zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChibGtpZF9zeXN0ZW1fc2hhcmVkX2xpYnJhcmllcykKK0xPQ0FMX01PRFVMRSA6PSBibGtpZAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy9taXNjL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1M2MzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDcxMiBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gbWlzYworSU5TVEFMTCA9IEBJTlNUQUxMQAorCitATUNPTkZJR0AKKworQERFRlJBR19DTVRAQExJTlVYX0NNVEBFNERFRlJBR19QUk9HPSBlNGRlZnJhZworQERFRlJBR19DTVRAQExJTlVYX0NNVEBFNERFRlJBR19NQU49IGU0ZGVmcmFnLjgKKworQElNQUdFUl9DTVRARTJJTUFHRV9QUk9HPSBlMmltYWdlCitASU1BR0VSX0NNVEBFMklNQUdFX01BTj0gZTJpbWFnZS44CisKK0BVVUlERF9DTVRAVVVJRERfUFJPRz0gdXVpZGQKK0BVVUlERF9DTVRAVVVJRERfTUFOPSB1dWlkZC44CisKK0BCTEtJRF9DTVRAQkxLSURfUFJPRz0gYmxraWQKK0BCTEtJRF9DTVRAQkxLSURfTUFOPSBibGtpZC44CisKK0BCTEtJRF9DTVRARklOREZTX0xJTks9IGZpbmRmcworQEJMS0lEX0NNVEBGSU5ERlNfTUFOPSBmaW5kZnMuOAorCitTUFJPR1M9CQlta2UyZnMgYmFkYmxvY2tzIHR1bmUyZnMgZHVtcGUyZnMgJChCTEtJRF9QUk9HKSBsb2dzYXZlIFwKKwkJCSQoRTJJTUFHRV9QUk9HKSBARlNDS19QUk9HQCBlMnVuZG8KK1VTUFJPR1M9CW1rbG9zdCtmb3VuZCBmaWxlZnJhZyBlMmZyZWVmcmFnICQoVVVJRERfUFJPRykgJChFNERFRlJBR19QUk9HKQorU01BTlBBR0VTPQl0dW5lMmZzLjggbWtsb3N0K2ZvdW5kLjggbWtlMmZzLjggZHVtcGUyZnMuOCBiYWRibG9ja3MuOCBcCisJCQllMmxhYmVsLjggJChGSU5ERlNfTUFOKSAkKEJMS0lEX01BTikgJChFMklNQUdFX01BTikgXAorCQkJbG9nc2F2ZS44IGZpbGVmcmFnLjggZTJmcmVlZnJhZy44IGUydW5kby44IFwKKwkJCSQoVVVJRERfTUFOKSAkKEU0REVGUkFHX01BTikgQEZTQ0tfTUFOQAorRk1BTlBBR0VTPQlta2UyZnMuY29uZi41IGV4dDQuNQorCitVUFJPR1M9CQljaGF0dHIgbHNhdHRyIEBVVUlEX0NNVEAgdXVpZGdlbgorVU1BTlBBR0VTPQljaGF0dHIuMSBsc2F0dHIuMSBAVVVJRF9DTVRAIHV1aWRnZW4uMQorCitMUFJPR1M9CQlARTJJTklUUkRfUFJPR0AKKworVFVORTJGU19PQkpTPQl0dW5lMmZzLm8gdXRpbC5vCitNS0xQRl9PQkpTPQlta2xvc3QrZm91bmQubworTUtFMkZTX09CSlM9CW1rZTJmcy5vIHV0aWwubyBwcm9maWxlLm8gcHJvZl9lcnIubyBkZWZhdWx0X3Byb2ZpbGUubworQ0hBVFRSX09CSlM9CWNoYXR0ci5vCitMU0FUVFJfT0JKUz0JbHNhdHRyLm8KK1VVSURHRU5fT0JKUz0JdXVpZGdlbi5vCitVVUlERF9PQkpTPQl1dWlkZC5vCitEVU1QRTJGU19PQkpTPQlkdW1wZTJmcy5vCitCQURCTE9DS1NfT0JKUz0JYmFkYmxvY2tzLm8KK0UySU1BR0VfT0JKUz0JZTJpbWFnZS5vCitGU0NLX09CSlM9CWZzY2subyBiYXNlX2RldmljZS5vIGlzbW91bnRlZC5vCitCTEtJRF9PQkpTPQlibGtpZC5vCitGSUxFRlJBR19PQkpTPQlmaWxlZnJhZy5vCitFMlVORE9fT0JKUz0gIGUydW5kby5vCitFNERFRlJBR19PQkpTPQllNGRlZnJhZy5vCitFMkZSRUVGUkFHX09CSlM9IGUyZnJlZWZyYWcubworCitQUk9GSUxFRF9UVU5FMkZTX09CSlM9CXByb2ZpbGVkL3R1bmUyZnMubyBwcm9maWxlZC91dGlsLm8KK1BST0ZJTEVEX01LTFBGX09CSlM9CXByb2ZpbGVkL21rbG9zdCtmb3VuZC5vCitQUk9GSUxFRF9NS0UyRlNfT0JKUz0JcHJvZmlsZWQvbWtlMmZzLm8gcHJvZmlsZWQvdXRpbC5vIHByb2ZpbGVkL3Byb2ZpbGUubyBcCisJCQlwcm9maWxlZC9wcm9mX2Vyci5vIHByb2ZpbGVkL2RlZmF1bHRfcHJvZmlsZS5vCitQUk9GSUxFRF9DSEFUVFJfT0JKUz0JcHJvZmlsZWQvY2hhdHRyLm8KK1BST0ZJTEVEX0xTQVRUUl9PQkpTPQlwcm9maWxlZC9sc2F0dHIubworUFJPRklMRURfVVVJREdFTl9PQkpTPQlwcm9maWxlZC91dWlkZ2VuLm8KK1BST0ZJTEVEX1VVSUREX09CSlM9CXByb2ZpbGVkL3V1aWRkLm8KK1BST0ZJTEVEX0RVTVBFMkZTX09CSlM9CXByb2ZpbGVkL2R1bXBlMmZzLm8KK1BST0ZJTEVEX0JBREJMT0NLU19PQkpTPQlwcm9maWxlZC9iYWRibG9ja3MubworUFJPRklMRURfRTJJTUFHRV9PQkpTPQlwcm9maWxlZC9lMmltYWdlLm8KK1BST0ZJTEVEX0ZTQ0tfT0JKUz0JcHJvZmlsZWQvZnNjay5vIHByb2ZpbGVkL2Jhc2VfZGV2aWNlLm8gXAorCQkJcHJvZmlsZWQvaXNtb3VudGVkLm8KK1BST0ZJTEVEX0JMS0lEX09CSlM9CXByb2ZpbGVkL2Jsa2lkLm8KK1BST0ZJTEVEX0ZJTEVGUkFHX09CSlM9CXByb2ZpbGVkL2ZpbGVmcmFnLm8KK1BST0ZJTEVEX0UyRlJFRUZSQUdfT0JKUz0gcHJvZmlsZWQvZTJmcmVlZnJhZy5vCitQUk9GSUxFRF9FMlVORE9fT0JKUz0JcHJvZmlsZWQvZTJ1bmRvLm8KK1BST0ZJTEVEX0U0REVGUkFHX09CSlM9CXByb2ZpbGVkL2U0ZGVmcmFnLm8KKworU1JDUz0JJChzcmNkaXIpL3R1bmUyZnMuYyAkKHNyY2RpcikvbWtsb3N0K2ZvdW5kLmMgJChzcmNkaXIpL21rZTJmcy5jIFwKKwkJJChzcmNkaXIpL2NoYXR0ci5jICQoc3JjZGlyKS9sc2F0dHIuYyAkKHNyY2RpcikvZHVtcGUyZnMuYyBcCisJCSQoc3JjZGlyKS9iYWRibG9ja3MuYyAkKHNyY2RpcikvZnNjay5jICQoc3JjZGlyKS91dGlsLmMgXAorCQkkKHNyY2RpcikvdXVpZGdlbi5jICQoc3JjZGlyKS9ibGtpZC5jICQoc3JjZGlyKS9sb2dzYXZlLmMgXAorCQkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvYmFzZV9kZXZpY2UuYyBcCisJCSQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYyBcCisJCSQoc3JjZGlyKS9lMnVuZG8uYyAkKHNyY2RpcikvZTJmcmVlZnJhZy5jCisKK0xJQlM9ICQoTElCRVhUMkZTKSAkKExJQkNPTV9FUlIpIAorREVQTElCUz0gJChMSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikKK1BST0ZJTEVEX0xJQlM9ICQoUFJPRklMRURfTElCRVhUMkZTKSAkKFBST0ZJTEVEX0xJQkNPTV9FUlIpCitQUk9GSUxFRF9ERVBMSUJTPSAkKFBST0ZJTEVEX0xJQkVYVDJGUykgJChERVBQUk9GSUxFRF9MSUJDT01fRVJSKQorCitTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCRVhUMkZTKSAkKFNUQVRJQ19MSUJDT01fRVJSKSAKK1NUQVRJQ19ERVBMSUJTPSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpIAorCitMSUJTX0UyUD0gJChMSUJFMlApICQoTElCQ09NX0VSUikgCitERVBMSUJTX0UyUD0gJChMSUJFMlApICQoREVQTElCQ09NX0VSUikgCisKK0NPTVBJTEVfRVQ9JCh0b3BfYnVpbGRkaXIpL2xpYi9ldC9jb21waWxlX2V0IC0tYnVpbGQtdHJlZQorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CitAUFJPRklMRV9DTVRACSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAtZyAtcGcgLW8gcHJvZmlsZWQvJCoubyAtYyAkPAorCithbGw6OiBwcm9maWxlZCAkKFNQUk9HUykgJChVUFJPR1MpICQoVVNQUk9HUykgJChTTUFOUEFHRVMpICQoVU1BTlBBR0VTKSBcCisJJChGTUFOUEFHRVMpICQoTFBST0dTKSAkKEU0REVGUkFHX1BST0cpCisKK0BQUk9GSUxFX0NNVEBhbGw6OiB0dW5lMmZzLnByb2ZpbGVkIGJsa2lkLnByb2ZpbGVkIGUyaW1hZ2UucHJvZmlsZWQgXAorCWUydW5kby5wcm9maWxlZCBta2UyZnMucHJvZmlsZWQgZHVtcGUyZnMucHJvZmlsZWQgZnNjay5wcm9maWxlZCBcCisJbG9nc2F2ZS5wcm9maWxlZCBmaWxlZnJhZy5wcm9maWxlZCB1dWlkZ2VuLnByb2ZpbGVkIHV1aWRkLnByb2ZpbGVkIFwKKwllMmltYWdlLnByb2ZpbGVkIGU0ZGVmcmFnLnByb2ZpbGVkIGUyZnJlZWZyYWcucHJvZmlsZWQKKworcHJvZmlsZWQ6CitAUFJPRklMRV9DTVRACSQoRSkgIglNS0RJUiAkQCIKK0BQUk9GSUxFX0NNVEAJJChRKSBta2RpciBwcm9maWxlZAorCitwcm9mX2Vyci5jIHByb2ZfZXJyLmg6ICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZl9lcnIuZXQKKwkkKEUpICIJQ09NUElMRV9FVCBwcm9mX2Vyci5ldCIKKwkkKFEpICQoQ09NUElMRV9FVCkgJChzcmNkaXIpLy4uL2UyZnNjay9wcm9mX2Vyci5ldAorCitwcm9maWxlLmg6ICQodG9wX3NyY2RpcikvZTJmc2NrL3Byb2ZpbGUuaAorCSQoRSkgIglDUCAkPCIKKwkkKFEpIGNwICQ8ICRACisKK21rZTJmcy5jb25mOiAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4KKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9ta2UyZnMuY29uZi5jdXN0b20uaW4gOyB0aGVuIFwKKwkJY3AgJChzcmNkaXIpL21rZTJmcy5jb25mLmN1c3RvbS5pbiBta2UyZnMuY29uZjsgXAorCWVsc2UgXAorCQljcCAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4gbWtlMmZzLmNvbmY7IFwKKwlmaQorCitkZWZhdWx0X3Byb2ZpbGUuYzogbWtlMmZzLmNvbmYgJChzcmNkaXIpL3Byb2ZpbGUtdG8tYy5hd2sKKwkkKEUpICIJUFJPRklMRV9UT19DIG1rZTJmcy5jb25mIgorCSQoUSkgJChBV0spIC1mICQoc3JjZGlyKS9wcm9maWxlLXRvLWMuYXdrIDwgbWtlMmZzLmNvbmYgXAorCQk+ICBkZWZhdWx0X3Byb2ZpbGUuYworcHJvZmlsZS5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJChzcmNkaXIpLy4uL2UyZnNjay9wcm9maWxlLmMgLW8gJEAKK0BQUk9GSUxFX0NNVEAJJChRKSAkKENDKSAkKEFMTF9DRkxBR1MpIC1nIC1wZyAtbyBwcm9maWxlZC9wcm9maWxlLm8gLWMgXAorQFBST0ZJTEVfQ01UQAkkKHNyY2RpcikvLi4vZTJmc2NrL3Byb2ZpbGUuYworCitmaW5kc3VwZXI6IGZpbmRzdXBlci5vCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZmluZHN1cGVyIGZpbmRzdXBlci5vICQoTElCUykKKworcGFydGluZm86IHBhcnRpbmZvLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBwYXJ0aW5mbyBwYXJ0aW5mby5vCisKK2UyaW5pdHJkX2hlbHBlcjogZTJpbml0cmRfaGVscGVyLm8gJChERVBMSUJTKSAkKERFUExJQkJMS0lEKSAkKExJQkVYVDJGUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBlMmluaXRyZF9oZWxwZXIgZTJpbml0cmRfaGVscGVyLm8gJChMSUJTKSBcCisJCSQoTElCQkxLSUQpICQoTElCRVhUMkZTKSAkKExJQklOVEwpCisKK3R1bmUyZnM6ICQoVFVORTJGU19PQkpTKSAkKERFUExJQlMpICQoREVQTElCU19FMlApICQoREVQTElCQkxLSUQpIFwKKwkJJChERVBMSUJVVUlEKSAkKERFUExJQlFVT1RBKSAkKExJQkVYVDJGUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyB0dW5lMmZzICQoVFVORTJGU19PQkpTKSAkKExJQlMpIFwKKwkJJChMSUJCTEtJRCkgJChMSUJVVUlEKSAkKExJQlFVT1RBKSAkKExJQkVYVDJGUykgJChMSUJTX0UyUCkgXAorCQkkKExJQklOVEwpCisKK3R1bmUyZnMuc3RhdGljOiAkKFRVTkUyRlNfT0JKUykgJChTVEFUSUNfREVQTElCUykgJChTVEFUSUNfTElCRTJQKSAkKERFUFNUQVRJQ19MSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKExERkxBR1NfU1RBVElDKSAtbyB0dW5lMmZzLnN0YXRpYyAkKFRVTkUyRlNfT0JKUykgXAorCQkkKFNUQVRJQ19MSUJTKSAkKFNUQVRJQ19MSUJCTEtJRCkgJChTVEFUSUNfTElCVVVJRCkgXAorCQkkKFNUQVRJQ19MSUJRVU9UQSkgJChTVEFUSUNfTElCRTJQKSAkKExJQklOVEwpCisKK3R1bmUyZnMucHJvZmlsZWQ6ICQoVFVORTJGU19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpIFwKKwkJJChQUk9GSUxFRF9FMlApICQoREVQUFJPRklMRURfTElCQkxLSUQpICQoREVQUFJPRklMRURfTElCVVVJRCkgXAorCQkkKERFUFBST0ZJTEVEX0xJQlFVT1RBKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyB0dW5lMmZzLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9UVU5FMkZTX09CSlMpICQoUFJPRklMRURfTElCQkxLSUQpIFwKKwkJJChQUk9GSUxFRF9MSUJVVUlEKSAkKFBST0ZJTEVEX0xJQlFVT1RBKSAkKFBST0ZJTEVEX0xJQkUyUCkgXAorCQkkKExJQklOVEwpICQoUFJPRklMRURfTElCUykKKworYmxraWQ6ICQoQkxLSURfT0JKUykgJChERVBMSUJCTEtJRCkgJChMSUJFWFQyRlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gYmxraWQgJChCTEtJRF9PQkpTKSAkKExJQkJMS0lEKSAkKExJQklOVEwpIFwKKwkJJChMSUJFWFQyRlMpCisKK2Jsa2lkLnN0YXRpYzogJChCTEtJRF9PQkpTKSAkKFNUQVRJQ19ERVBMSUJTKSAkKERFUFNUQVRJQ19MSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBibGtpZC5zdGF0aWMgJChCTEtJRF9PQkpTKSAkKFNUQVRJQ19MSUJTKSBcCisJCSQoU1RBVElDX0xJQkJMS0lEKSAkKExJQklOVEwpCisKK2Jsa2lkLnByb2ZpbGVkOiAkKEJMS0lEX09CSlMpICQoREVQUFJPRklMRURfTElCQkxLSUQpIFwKKwkJJChQUk9GSUxFRF9MSUJFWFQyRlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGJsa2lkLnByb2ZpbGVkICQoUFJPRklMRURfQkxLSURfT0JKUykgXAorCQkkKFBST0ZJTEVEX0xJQkJMS0lEKSAkKExJQklOVEwpICQoUFJPRklMRURfTElCRVhUMkZTKQorCitlMmltYWdlOiAkKEUySU1BR0VfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGUyaW1hZ2UgJChFMklNQUdFX09CSlMpICQoTElCUykgJChMSUJJTlRMKQorCitlMmltYWdlLnByb2ZpbGVkOiAkKEUySU1BR0VfT0JKUykgJChQUk9GSUxFRF9ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBlMmltYWdlLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9FMklNQUdFX09CSlMpICQoUFJPRklMRURfTElCUykgJChMSUJJTlRMKQorCitlMnVuZG86ICQoRTJVTkRPX09CSlMpICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBlMnVuZG8gJChFMlVORE9fT0JKUykgJChMSUJTKSAkKExJQklOVEwpCisKK2UydW5kby5wcm9maWxlZDogJChFMlVORE9fT0JKUykgJChQUk9GSUxFRF9ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBlMnVuZG8ucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX0UyVU5ET19PQkpTKSAkKFBST0ZJTEVEX0xJQlMpICQoTElCSU5UTCkKKworZTRkZWZyYWc6ICQoRTRERUZSQUdfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGU0ZGVmcmFnICQoRTRERUZSQUdfT0JKUykgJChMSUJTKQorCitlNGRlZnJhZy5wcm9maWxlZDogJChFNERFRlJBR19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGU0ZGVmcmFnLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9FNERFRlJBR19PQkpTKSAkKFBST0ZJTEVEX0xJQlMpCisKK2Jhc2VfZGV2aWNlOiBiYXNlX2RldmljZS5jCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKSAkKHNyY2RpcikvYmFzZV9kZXZpY2UuYyBcCisJCS1EREVCVUcgLW8gYmFzZV9kZXZpY2UKKworY2hlY2s6OiBiYXNlX2RldmljZQorCS4vYmFzZV9kZXZpY2UgPCAkKHNyY2RpcikvYmFzZV9kZXZpY2UudHN0ID4gYmFzZV9kZXZpY2Uub3V0CisJY21wICQoc3JjZGlyKS9iYXNlX2RldmljZS50c3QgYmFzZV9kZXZpY2Uub3V0CisKK21rbG9zdCtmb3VuZDogJChNS0xQRl9PQkpTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIG1rbG9zdCtmb3VuZCAkKE1LTFBGX09CSlMpICQoTElCSU5UTCkKKworbWtlMmZzOiAkKE1LRTJGU19PQkpTKSAkKERFUExJQlMpICQoTElCRTJQKSAkKERFUExJQkJMS0lEKSAkKERFUExJQlVVSUQpIFwKKwkJJChERVBMSUJRVU9UQSkgJChMSUJFWFQyRlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gbWtlMmZzICQoTUtFMkZTX09CSlMpICQoTElCUykgJChMSUJCTEtJRCkgXAorCQkkKExJQlVVSUQpICQoTElCUVVPVEEpICQoTElCRVhUMkZTKSAkKExJQkUyUCkgJChMSUJJTlRMKQorCitta2UyZnMuc3RhdGljOiAkKE1LRTJGU19PQkpTKSAkKFNUQVRJQ19ERVBMSUJTKSAkKFNUQVRJQ19MSUJFMlApICQoREVQU1RBVElDX0xJQlVVSUQpIFwKKwkJJChERVBTVEFUSUNfTElCUVVPVEEpICQoREVQU1RBVElDX0xJQkJMS0lEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1zdGF0aWMgLW8gbWtlMmZzLnN0YXRpYyAkKE1LRTJGU19PQkpTKSBcCisJCSQoU1RBVElDX0xJQlFVT1RBKSAkKFNUQVRJQ19MSUJTKSAkKFNUQVRJQ19MSUJFMlApIFwKKwkJJChTVEFUSUNfTElCQkxLSUQpICQoU1RBVElDX0xJQlVVSUQpICQoTElCSU5UTCkKKworbWtlMmZzLnByb2ZpbGVkOiAkKE1LRTJGU19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpIFwKKwkkKFBST0ZJTEVEX0xJQkUyUCkgJChQUk9GSUxFRF9ERVBMSUJCTEtJRCkgJChQUk9GSUxFRF9ERVBMSUJVVUlEKSBcCisJJChQUk9GSUxFRF9MSUJRVU9UQSkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gbWtlMmZzLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9NS0UyRlNfT0JKUykgJChQUk9GSUxFRF9MSUJCTEtJRCkgXAorCQkkKFBST0ZJTEVEX0xJQlVVSUQpICQoUFJPRklMRURfTElCUVVPVEEpICQoUFJPRklMRURfTElCRTJQKSAkKExJQklOVEwpIFwKKwkJJChQUk9GSUxFRF9MSUJTKQorCitjaGF0dHI6ICQoQ0hBVFRSX09CSlMpICQoREVQTElCU19FMlApCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gY2hhdHRyICQoQ0hBVFRSX09CSlMpICQoTElCU19FMlApICQoTElCSU5UTCkKKworbHNhdHRyOiAkKExTQVRUUl9PQkpTKSAkKERFUExJQlNfRTJQKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGxzYXR0ciAkKExTQVRUUl9PQkpTKSAkKExJQlNfRTJQKSAkKExJQklOVEwpCisKK3V1aWRnZW46ICQoVVVJREdFTl9PQkpTKSAkKERFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gdXVpZGdlbiAkKFVVSURHRU5fT0JKUykgJChMSUJVVUlEKSAkKExJQklOVEwpCisKK3V1aWRnZW4ucHJvZmlsZWQ6ICQoVVVJREdFTl9PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIHV1aWRnZW4ucHJvZmlsZWQgXAorCQkkKFBST0ZJTEVEX1VVSURHRU5fT0JKUykgJChQUk9GSUxFRF9MSUJVVUlEKSAkKExJQklOVEwpCisKK3V1aWRkOiAkKFVVSUREX09CSlMpICQoREVQTElCVVVJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyB1dWlkZCAkKFVVSUREX09CSlMpICQoTElCVVVJRCkgJChMSUJJTlRMKQorCit1dWlkZC5wcm9maWxlZDogJChVVUlERF9PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIHV1aWRkLnByb2ZpbGVkICQoUFJPRklMRURfVVVJRERfT0JKUykgXAorCQkkKFBST0ZJTEVEX0xJQlVVSUQpICQoTElCSU5UTCkKKworZHVtcGUyZnM6ICQoRFVNUEUyRlNfT0JKUykgJChERVBMSUJTKSAkKERFUExJQlNfRTJQKSAkKERFUExJQlVVSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZHVtcGUyZnMgJChEVU1QRTJGU19PQkpTKSAkKExJQlMpIFwKKwkJJChMSUJTX0UyUCkgJChMSUJVVUlEKSAkKExJQklOVEwpCisKK2R1bXBlMmZzLnByb2ZpbGVkOiAkKERVTVBFMkZTX09CSlMpICQoUFJPRklMRURfREVQTElCUykgXAorCQkkKFBST0ZJTEVEX0xJQkUyUCkgJChQUk9GSUxFRF9ERVBMSUJVVUlEKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBkdW1wZTJmcy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfRFVNUEUyRlNfT0JKUykgJChQUk9GSUxFRF9MSUJTKSBcCisJCSQoUFJPRklMRURfTElCRTJQKSAkKFBST0ZJTEVEX0xJQlVVSUQpICQoTElCSU5UTCkKKworZnNjazogJChGU0NLX09CSlMpICQoREVQTElCQkxLSUQpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZnNjayAkKEZTQ0tfT0JKUykgJChMSUJCTEtJRCkgJChMSUJJTlRMKQorCitmc2NrLnByb2ZpbGVkOiAkKEZTQ0tfT0JKUykgJChQUk9GSUxFRF9ERVBMSUJCTEtJRCkKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gZnNjay5wcm9maWxlZCAkKFBST0ZJTEVEX0ZTQ0tfT0JKUykgXAorCQkkKFBST0ZJTEVEX0xJQkJMS0lEKSAkKExJQklOVEwpCisKK2JhZGJsb2NrczogJChCQURCTE9DS1NfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIGJhZGJsb2NrcyAkKEJBREJMT0NLU19PQkpTKSAkKExJQlMpICQoTElCSU5UTCkKKworYmFkYmxvY2tzLnByb2ZpbGVkOiAkKEJBREJMT0NLU19PQkpTKSAkKFBST0ZJTEVEX0RFUExJQlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLWcgLXBnIC1vIGJhZGJsb2Nrcy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfQkFEQkxPQ0tTX09CSlMpICQoUFJPRklMRURfTElCUykgJChMSUJJTlRMKQorCitsb2dzYXZlOiBsb2dzYXZlLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBsb2dzYXZlIGxvZ3NhdmUubworCitsb2dzYXZlLnByb2ZpbGVkOiBsb2dzYXZlLm8KKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtZyAtcGcgLW8gbG9nc2F2ZS5wcm9maWxlZCBwcm9maWxlZC9sb2dzYXZlLm8KKworZTJmcmVlZnJhZzogJChFMkZSRUVGUkFHX09CSlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gZTJmcmVlZnJhZyAkKEUyRlJFRUZSQUdfT0JKUykgJChMSUJTKQorCitlMmZyZWVmcmFnLnByb2ZpbGVkOiAkKEUyRlJFRUZSQUdfT0JKUykgJChQUk9GSUxFRF9ERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBlMmZyZWVmcmFnLnByb2ZpbGVkIFwKKwkJJChQUk9GSUxFRF9FMkZSRUVGUkFHX09CSlMpICQoUFJPRklMRURfTElCUykKKworZmlsZWZyYWc6ICQoRklMRUZSQUdfT0JKUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKENDKSAkKEFMTF9MREZMQUdTKSAtbyBmaWxlZnJhZyAkKEZJTEVGUkFHX09CSlMpIAorCitmaWxlZnJhZy5wcm9maWxlZDogJChGSUxFRlJBR19PQkpTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1nIC1wZyAtbyBmaWxlZnJhZy5wcm9maWxlZCBcCisJCSQoUFJPRklMRURfRklMRUZSQUdfT0JKUykgCisKK3RzdF9pc21vdW50ZWQ6ICQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQTElCQ09NX0VSUikKKwkkKEUpICIJTEQgJEAiCisJJChDQykgLW8gdHN0X2lzbW91bnRlZCAkKHNyY2RpcikvaXNtb3VudGVkLmMgLURERUJVRyAkKEFMTF9DRkxBR1MpIFwKKwkJJChMSUJDT01fRVJSKQorCit0dW5lMmZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS90dW5lMmZzLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdHVuZTJmcy44LmluIHR1bmUyZnMuOAorCitta2xvc3QrZm91bmQuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL21rbG9zdCtmb3VuZC44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL21rbG9zdCtmb3VuZC44LmluIG1rbG9zdCtmb3VuZC44CisKK21rZTJmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvbWtlMmZzLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvbWtlMmZzLjguaW4gbWtlMmZzLjgKKworbWtlMmZzLmNvbmYuNTogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL21rZTJmcy5jb25mLjUuaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvbWtlMmZzLmNvbmYuNS5pbiBta2UyZnMuY29uZi41CisKK2V4dDQuNTogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2V4dDQuNS5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS8kQC5pbiAkQAorCitlMmxhYmVsLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9lMmxhYmVsLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZTJsYWJlbC44LmluIGUybGFiZWwuOAorCitlMnVuZG8uODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2UydW5kby44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2UydW5kby44LmluIGUydW5kby44CisKK2ZpbmRmcy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZmluZGZzLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZmluZGZzLjguaW4gZmluZGZzLjgKKworZTJpbWFnZS44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZTJpbWFnZS44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2UyaW1hZ2UuOC5pbiBlMmltYWdlLjgKKworZTRkZWZyYWcuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2U0ZGVmcmFnLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZTRkZWZyYWcuOC5pbiBlNGRlZnJhZy44CisKK2R1bXBlMmZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9kdW1wZTJmcy44LmluIAorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9kdW1wZTJmcy44LmluIGR1bXBlMmZzLjgKKworYmFkYmxvY2tzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9iYWRibG9ja3MuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9iYWRibG9ja3MuOC5pbiBiYWRibG9ja3MuOAkKKworZnNjay44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZnNjay44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2ZzY2suOC5pbiBmc2NrLjggCisKK2Jsa2lkLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9ibGtpZC44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2Jsa2lkLjguaW4gYmxraWQuOAorCitsb2dzYXZlLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9sb2dzYXZlLjguaW4KKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvbG9nc2F2ZS44LmluIGxvZ3NhdmUuOAorCit1dWlkZC44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvdXVpZGQuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS91dWlkZC44LmluIHV1aWRkLjgKKworY2hhdHRyLjE6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9jaGF0dHIuMS5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9jaGF0dHIuMS5pbiBjaGF0dHIuMSAKKworbHNhdHRyLjE6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9sc2F0dHIuMS5pbiAKKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvbHNhdHRyLjEuaW4gbHNhdHRyLjEgCisKK3V1aWRnZW4uMTogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3V1aWRnZW4uMS5pbiAKKwkkKEUpICIJU1VCU1QgJEAiCisJJChRKSAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvdXVpZGdlbi4xLmluIHV1aWRnZW4uMSAKKworYmxraWQuMTogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2Jsa2lkLjEuaW4gCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2Jsa2lkLjEuaW4gYmxraWQuMSAKKworZTJmcmVlZnJhZy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZTJmcmVlZnJhZy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCUAkKFNVQlNUSVRVVEVfVVBUSU1FKSAkKHNyY2RpcikvZTJmcmVlZnJhZy44LmluIGUyZnJlZWZyYWcuOAorCitmaWxlZnJhZy44OiAkKERFUF9TVUJTVElUVVRFKSAkKHNyY2RpcikvZmlsZWZyYWcuOC5pbgorCSQoRSkgIglTVUJTVCAkQCIKKwkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9maWxlZnJhZy44LmluIGZpbGVmcmFnLjgKKworaW5zdGFsbGRpcnM6CisJJChFKSAiCU1LSU5TVEFMTERJUlMgJChzYmluZGlyKSAkKHJvb3Rfc2JpbmRpcikgJChiaW5kaXIpICQobWFuMWRpcikgJChtYW44ZGlyKSAkKGxpYmRpcikgJChyb290X3N5c2NvbmZkaXIpIgorCSQoUSkgJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChzYmluZGlyKSBcCisJCSQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikgJChERVNURElSKSQoYmluZGlyKSBcCisJCSQoREVTVERJUikkKG1hbjFkaXIpICQoREVTVERJUikkKG1hbjhkaXIpIFwKKwkJJChERVNURElSKSQobWFuMWRpcikgJChERVNURElSKSQobWFuNWRpcikgXAorCQkkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikvJChyb290X3N5c2NvbmZkaXIpCisKK2luc3RhbGw6IGFsbCAkKFNNQU5QQUdFUykgJChVTUFOUEFHRVMpIGluc3RhbGxkaXJzCisJJChRKSBmb3IgaSBpbiAkKFNQUk9HUyk7IGRvIFwKKwkJJChFUykgIglJTlNUQUxMICQocm9vdF9zYmluZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGkgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKFVTUFJPR1MpOyBkbyBcCisJCSQoRVMpICIJSU5TVEFMTCAkKHNiaW5kaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChzYmluZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiBleHQyIGV4dDMgZXh0NCBleHQ0ZGV2OyBkbyBcCisJCSQoRVMpICIJTElOSyAkKHJvb3Rfc2JpbmRpcikvbWtmcy4kJGkiOyBcCisJCShjZCAkKERFU1RESVIpJChyb290X3NiaW5kaXIpOyBcCisJCQkkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgbWtlMmZzIG1rZnMuJCRpKTsgXAorCWRvbmUKKwkkKFEpIChjZCAkKERFU1RESVIpJChyb290X3NiaW5kaXIpOyBcCisJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSB0dW5lMmZzIGUybGFiZWwpCisJJChRKSBpZiB0ZXN0IC1uICIkKEZJTkRGU19MSU5LKSI7IHRoZW4gXAorCQkkKEVTKSAiCUxJTksgJChyb290X3NiaW5kaXIpL2ZpbmRmcyI7IFwKKwkJKGNkICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcik7IFwKKwkJJChMTikgJChMSU5LX0lOU1RBTExfRkxBR1MpIHR1bmUyZnMgJChGSU5ERlNfTElOSykpOyBcCisJZmkKKwkkKFEpIGZvciBpIGluICQoVVBST0dTKTsgZG8gXAorCQkkKEVTKSAiCUlOU1RBTEwgJChiaW5kaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoTFBST0dTKTsgZG8gXAorCQkkKEVTKSAiCUlOU1RBTEwgJChsaWJkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQkaSAkKERFU1RESVIpJChsaWJkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoU01BTlBBR0VTKTsgZG8gXAorCQlmb3IgaiBpbiAkKENPTVBSRVNTX0VYVCk7IGRvIFwKKwkJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaS4kJGo7IFwKKwkJZG9uZTsgXAorCQkkKEVTKSAiCUlOU1RBTExfREFUQSAkKG1hbjhkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSAkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS9ta2ZzLmV4dDIuOC5neiBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL21rZnMuZXh0My44Lmd6CisJJChRKSBmb3IgaSBpbiBleHQyIGV4dDMgZXh0NCBleHQ0ZGV2OyBkbyBcCisJCSQoRVMpICIJTElOSyBta2ZzLiQkaS44IjsgXAorCQkoY2QgJChERVNURElSKSQobWFuOGRpcik7IFwKKwkJCSQoTE4pICQoTElOS19JTlNUQUxMX0ZMQUdTKSBta2UyZnMuOCBta2ZzLiQkaS44KTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluICQoVU1BTlBBR0VTKTsgZG8gXAorCQlmb3IgaiBpbiAkKENPTVBSRVNTX0VYVCk7IGRvIFwKKwkJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjFkaXIpLyQkaS4kJGo7IFwKKwkJZG9uZTsgXAorCQkkKEVTKSAiCUlOU1RBTExfREFUQSAkKG1hbjFkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW4xZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKEZNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW41ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChtYW41ZGlyKS8kJGkiOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQobWFuNWRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gZXh0MiBleHQzOyBkbyBcCisJCSQoRVMpICIJTElOSyAkJGkuNSI7IFwKKwkJKGNkICQoREVTVERJUikkKG1hbjVkaXIpOyBcCisJCQkkKExOKSAkKExJTktfSU5TVEFMTF9GTEFHUykgZXh0NC41ICQkaS41KTsgXAorCWRvbmUKKwkkKFEpIGlmIHRlc3QgLWYgJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZjsgdGhlbiBcCisJCWlmIGNtcCAtcyAkKERFU1RESVIpJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mIFwKKwkJCW1rZTJmcy5jb25mOyB0aGVuIFwKKwkJCXRydWU7IFwKKwkJZWxzZSBcCisJCQlpZiBncmVwIC1xIGV4dDRkZXYgJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZiA7IHRoZW4gXAorCQkJCSQoRVMpICIJSU5TVEFMTF9EQVRBICQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZi5lMmZzcHJvZ3MtbmV3IjsgXAorCQkJCSQoSU5TVEFMTF9EQVRBKSBta2UyZnMuY29uZiBcCisJCQkJCSQoREVTVERJUikkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYuZTJmc3Byb2dzLW5ldzsgXAorCQkJCWVjaG8gIldhcm5pbmc6IGluc3RhbGxpbmcgbWtlMmZzLmNvbmYgaW4gJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZi5lMmZzcHJvZ3MtbmV3IjsgXAorCQkJCWVjaG8gIkNoZWNrIHRvIHNlZSBpZiB5b3UgbmVlZCB0byB1cGRhdGUgeW91ciAkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYiOyBcCisJCQllbHNlIFwKKwkJCQkkKEVTKSAiCUlOU1RBTExfREFUQSAkKHJvb3Rfc3lzY29uZmRpcikvbWtlMmZzLmNvbmYiOyBcCisJCQkJbXYgJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZiBcCisJCQkJICAgJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZi5lMmZzcHJvZ3Mtb2xkOyBcCisJCQkJJChJTlNUQUxMX0RBVEEpIG1rZTJmcy5jb25mIFwKKwkJCQkJJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZjsgXAorCQkJCWVjaG8gIllvdXIgbWtlMmZzLmNvbmYgaXMgdG9vIG9sZC4gIEJhY2tpbmcgdXAgb2xkIHZlcnNpb24gaW4iOyBcCisJCQkJZWNobyAiJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZi5lMmZzcHJvZ3Mtb2xkLiAgUGxlYXNlIGNoZWNrIHRvIHNlZSI7IFwKKwkJCQllY2hvICJpZiB5b3UgaGF2ZSBhbnkgbG9jYWwgY3VzdG9taXphdGlvbnMgdGhhdCB5b3Ugd2lzaCB0byBwcmVzZXJ2ZS4iOyBcCisJCQlmaTsgXAorCQkJZWNobyAiICI7IFwKKwkJZmk7IFwKKwllbHNlIFwKKwkJJChFUykgIglJTlNUQUxMX0RBVEEgJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mIjsgXAorCQkkKElOU1RBTExfREFUQSkgbWtlMmZzLmNvbmYgXAorCQkJJChERVNURElSKSQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZjsgXAorCWZpCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKwkkKFEpIGZvciBpIGluICQoU1BST0dTKTsgZG8gXAorCQkkKEUpICIJU1RSSVAgJChyb290X3NiaW5kaXIpLyQkaSI7IFwKKwkJJChTVFJJUCkgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisJJChRKSBmb3IgaSBpbiAkKFVTUFJPR1MpOyBkbyBcCisJCSQoRSkgIglTVFJJUCAkKHNiaW5kaXIpLyQkaSI7IFwKKwkJJChTVFJJUCkgJChERVNURElSKSQoc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCit1bmluc3RhbGw6CisJZm9yIGkgaW4gJChTUFJPR1MpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoVVNQUk9HUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQoc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoTFBST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChsaWJkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFJNKSAtZiAkKERFU1RESVIpJChyb290X3NiaW5kaXIpL21rZnMuZXh0MiBcCisJCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpL21rZnMuZXh0MyBcCisJCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpL21rZnMuZXh0NCBcCisJCQkkKERFU1RESVIpJChyb290X3NiaW5kaXIpL21rZnMuZXh0NGRldgorCWZvciBpIGluICQoVVBST0dTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwlmb3IgaSBpbiAkKFNNQU5QQUdFUyk7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQobWFuOGRpcikvJCRpOyBcCisJZG9uZQorCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpL21rZnMuZXh0Mi44IFwKKwkJJChERVNURElSKSQobWFuOGRpcikvbWtmcy5leHQzLjggXAorCQkkKERFU1RESVIpJChtYW44ZGlyKS9ta2ZzLmV4dDQuOCBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL21rZnMuZXh0NGRldi44IFwKKwkJJChERVNURElSKSQobWFuOGRpcikvZnNjay5leHQyLjggXAorCQkkKERFU1RESVIpJChtYW44ZGlyKS9mc2NrLmV4dDMuOCBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpL2ZzY2suZXh0NC44IFwKKwkJJChERVNURElSKSQobWFuOGRpcikvZnNjay5leHQ0ZGV2LjgKKworCWZvciBpIGluICQoVU1BTlBBR0VTKTsgZG8gXAorCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kJGk7IFwKKwlkb25lCisJZm9yIGkgaW4gJChGSU5ERlNfTElOSykgZTJsYWJlbCA7IGRvIFwKKwkJJChSTSkgLWYgJChERVNURElSKSQocm9vdF9zYmluZGlyKS8kJGk7IFwKKwlkb25lCisJZm9yIGkgaW4gJChGTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjVkaXIpLyQkaTsgXAorCWRvbmUKKwkkKFEpIGZvciBpIGluIGV4dDIgZXh0MzsgZG8gXAorCQkkKEVTKSAiCUxJTksgJCRpLjUiOyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjVkaXIpLyQkaS41OyBcCisJZG9uZQorCWlmIGNtcCAtcyBta2UyZnMuY29uZiAkKERFU1RESVIpLyQocm9vdF9zeXNjb25mZGlyKS9ta2UyZnMuY29uZjsgdGhlbiBcCisJCSQoUk0pICQoREVTVERJUikvJChyb290X3N5c2NvbmZkaXIpL21rZTJmcy5jb25mOyBcCisJZmkKKworY2xlYW46CisJJChSTSkgLWYgJChTUFJPR1MpICQoVVNQUk9HUykgJChVUFJPR1MpICQoVU1BTlBBR0VTKSAkKFNNQU5QQUdFUykgXAorCQkkKEZNQU5QQUdFUykgcHJvZmlsZS5oIFwKKwkJYmFzZV9kZXZpY2UgYmFzZV9kZXZpY2Uub3V0IG1rZTJmcy5zdGF0aWMgZmlsZWZyYWcgZTJmcmVlZnJhZyBcCisJCWUyaW5pdHJkX2hlbHBlciBwYXJ0aW5mbyBwcm9mX2Vyci5bY2hdIGRlZmF1bHRfcHJvZmlsZS5jIFwKKwkJdXVpZGQgZTJpbWFnZSB0dW5lMmZzLnN0YXRpYyB0c3RfaXNtb3VudGVkIGZzY2sucHJvZmlsZWQgXAorCQlibGtpZC5wcm9maWxlZCB0dW5lMmZzLnByb2ZpbGVkIGUyaW1hZ2UucHJvZmlsZWQgXAorCQllMnVuZG8ucHJvZmlsZWQgbWtlMmZzLnByb2ZpbGVkIGR1bXBlMmZzLnByb2ZpbGVkIFwKKwkJbG9nc2F2ZS5wcm9maWxlZCBmaWxlZnJhZy5wcm9maWxlZCB1dWlkZ2VuLnByb2ZpbGVkIFwKKwkJdXVpZGQucHJvZmlsZWQgZTJpbWFnZS5wcm9maWxlZCBta2UyZnMuY29uZiBcCisJCXByb2ZpbGVkLyoubyBcIyogKi5zICoubyAqLmEgKn4gY29yZSBnbW9uLm91dAorCittb3N0bHljbGVhbjogY2xlYW4KK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSAtZiAuZGVwZW5kIE1ha2VmaWxlICQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCit0dW5lMmZzLm86ICQoc3JjZGlyKS90dW5lMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWxpc3QuaCAkKHNyY2RpcikvdXRpbC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW9fdHJlZS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oIFwKKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitta2xvc3QrZm91bmQubzogJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK21rZTJmcy5vOiAkKHNyY2RpcikvbWtlMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzUC5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQoc3JjZGlyKS91dGlsLmggcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvZHFibGtfdjIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorY2hhdHRyLm86ICQoc3JjZGlyKS9jaGF0dHIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK2xzYXR0ci5vOiAkKHNyY2RpcikvbHNhdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitkdW1wZTJmcy5vOiAkKHNyY2RpcikvZHVtcGUyZnMuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQoc3JjZGlyKS9qZnNfdXNlci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMva2VybmVsLWpiZC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9qZnNfY29tcGF0LmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oIFwKKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitiYWRibG9ja3MubzogJChzcmNkaXIpL2JhZGJsb2Nrcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL25scy1lbmFibGUuaAorZnNjay5vOiAkKHNyY2RpcikvZnNjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCBcCisgJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHNyY2RpcikvZnNjay5oCit1dGlsLm86ICQoc3JjZGlyKS91dGlsLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHNyY2RpcikvdXRpbC5oCit1dWlkZ2VuLm86ICQoc3JjZGlyKS91dWlkZ2VuLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK2Jsa2lkLm86ICQoc3JjZGlyKS9ibGtpZC5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oCitsb2dzYXZlLm86ICQoc3JjZGlyKS9sb2dzYXZlLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oCitmaWxlZnJhZy5vOiAkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2ZpZW1hcC5oCitiYXNlX2RldmljZS5vOiAkKHNyY2RpcikvYmFzZV9kZXZpY2UuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2ZzY2suaAoraXNtb3VudGVkLm86ICQoc3JjZGlyKS9pc21vdW50ZWQuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL2ZzY2suaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oCitwcm9maWxlLm86ICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5oIHByb2ZfZXJyLmgKK2UydW5kby5vOiAkKHNyY2RpcikvZTJ1bmRvLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy90ZGIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJChzcmNkaXIpL25scy1lbmFibGUuaAorZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvZTJmcmVlZnJhZy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHNyY2RpcikvZTJmcmVlZnJhZy5oCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9iYWRibG9ja3MuOC5pbiBiL2UyZnNwcm9ncy9taXNjL2JhZGJsb2Nrcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MDdmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9iYWRibG9ja3MuOC5pbgpAQCAtMCwwICsxLDIzNCBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5USCBCQURCTE9DS1MgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorYmFkYmxvY2tzIFwtIHNlYXJjaCBhIGRldmljZSBmb3IgYmFkIGJsb2NrcworLlNIIFNZTk9QU0lTCisuQiBiYWRibG9ja3MKK1sKKy5CIFwtc3Z3bmZCWAorXQorWworLkIgXC1iCisuSSBibG9jay1zaXplCitdCitbCisuQiBcLWMKKy5JIGJsb2Nrc19hdF9vbmNlCitdCitbCisuQiBcLWUKKy5JIG1heF9iYWRfYmxvY2tzCitdCitbCisuQiBcLWQKKy5JIHJlYWRfZGVsYXlfZmFjdG9yCitdCitbCisuQiBcLWkKKy5JIGlucHV0X2ZpbGUKK10KK1sKKy5CIFwtbworLkkgb3V0cHV0X2ZpbGUKK10KK1sKKy5CIFwtcAorLkkgbnVtX3Bhc3NlcworXQorWworLkIgXC10CisuSSB0ZXN0X3BhdHRlcm4KK10KKy5JIGRldmljZQorWworLkkgbGFzdC1ibG9jaworXSBbCisuSSBmaXJzdC1ibG9jayAKK10KKy5TSCBERVNDUklQVElPTgorLkIgYmFkYmxvY2tzCitpcyB1c2VkIHRvIHNlYXJjaCBmb3IgYmFkIGJsb2NrcyBvbiBhIGRldmljZSAodXN1YWxseSBhIGRpc2sgcGFydGl0aW9uKS4KKy5JIGRldmljZQoraXMgdGhlIHNwZWNpYWwgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2UgKGUuZworLklSIC9kZXYvaGRjMSApLgorLkkgbGFzdC1ibG9jaworaXMgdGhlIGxhc3QgYmxvY2sgdG8gYmUgY2hlY2tlZDsgaWYgaXQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhc3QgYmxvY2sKK29uIHRoZSBkZXZpY2UgaXMgdXNlZCBhcyBhIGRlZmF1bHQuCisuSSBmaXJzdC1ibG9jaworaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIHN0YXJ0aW5nIGJsb2NrIG51bWJlcgorZm9yIHRoZSB0ZXN0LCB3aGljaCBhbGxvd3MgdGhlIHRlc3RpbmcgdG8gc3RhcnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUKK2Rpc2suICBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIHRoZSBmaXJzdCBibG9jayBvbiB0aGUgZGlzayBpcyB1c2VkIGFzIGEgZGVmYXVsdC4KKy5QUAorLkIgSW1wb3J0YW50IG5vdGU6CitJZiB0aGUgb3V0cHV0IG9mIAorLkIgYmFkYmxvY2tzCitpcyBnb2luZyB0byBiZSBmZWQgdG8gdGhlCisuQiBlMmZzY2sKK29yIAorLkIgbWtlMmZzCitwcm9ncmFtcywgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGJsb2NrIHNpemUgaXMgcHJvcGVybHkgc3BlY2lmaWVkLAorc2luY2UgdGhlIGJsb2NrIG51bWJlcnMgd2hpY2ggYXJlIGdlbmVyYXRlZCBhcmUgdmVyeSBkZXBlbmRlbnQgb24gdGhlIAorYmxvY2sgc2l6ZSBpbiB1c2UgYnkgdGhlIGZpbGVzeXN0ZW0uICAgCitGb3IgdGhpcyByZWFzb24sIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQKK3VzZXJzIAorLkIgbm90CitydW4gCisuQiBiYWRibG9ja3MgCitkaXJlY3RseSwgYnV0IHJhdGhlciB1c2UgdGhlIAorLkIgXC1jCitvcHRpb24gb2YgdGhlCisuQiBlMmZzY2sKK2FuZCAKKy5CIG1rZTJmcworcHJvZ3JhbXMuCisuU0ggT1BUSU9OUworLlRQCisuQkkgXC1iICIgYmxvY2stc2l6ZSIKK1NwZWNpZnkgdGhlIHNpemUgb2YgYmxvY2tzIGluIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMTAyNC4KKy5UUAorLkJJIFwtYyAiIG51bWJlciBvZiBibG9ja3MiCitpcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBhcmUgdGVzdGVkIGF0IGEgdGltZS4gIFRoZSBkZWZhdWx0IGlzIDY0LgorLlRQCisuQkkgXC1lICIgbWF4IGJhZCBibG9jayBjb3VudCIKK1NwZWNpZnkgYSBtYXhpbXVtIG51bWJlciBvZiBiYWQgYmxvY2tzIGJlZm9yZSBhYm9ydGluZyB0aGUgdGVzdC4gIFRoZQorZGVmYXVsdCBpcyAwLCBtZWFuaW5nIHRoZSB0ZXN0IHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgdGVzdAorcmFuZ2UgaXMgcmVhY2hlZC4KKy5UUAorLkJJIFwtZCAiIHJlYWQgZGVsYXkgZmFjdG9yIgorVGhpcyBwYXJhbWV0ZXIsIGlmIHBhc3NlZCBhbmQgbm9uLXplcm8sIHdpbGwgY2F1c2UgYmFkIGJsb2NrcyB0byBzbGVlcAorYmV0d2VlbiByZWFkcyBpZiB0aGVyZSB3ZXJlIG5vIGVycm9ycyBlbmNvdW50ZXJlZCBpbiB0aGUgcmVhZAorb3BlcmF0aW9uOyB0aGUgZGVsYXkgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgdGltZSBpdAordG9vayBmb3IgdGhlIHJlYWQgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZC4gSW4gb3RoZXIgd29yZHMsIGEgdmFsdWUgb2YgCisxMDAgd2lsbCBjYXVzZSBlYWNoIHJlYWQgdG8gYmUgZGVsYXllZCBieSB0aGUgYW1vdW50IHRoZSBwcmV2aW91cyByZWFkCit0b29rLCBhbmQgYSB2YWx1ZSBvZiAyMDAgYnkgdHdpY2UgdGhlIGFtb3VudC4KKy5UUAorLkIgXC1mCitOb3JtYWxseSwgYmFkYmxvY2tzIHdpbGwgcmVmdXNlIHRvIGRvIGEgcmVhZC93cml0ZSBvciBhIG5vbi1kZXN0cnVjdGl2ZQordGVzdCBvbiBhIGRldmljZSB3aGljaCBpcyBtb3VudGVkLCBzaW5jZSBlaXRoZXIgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8KK3BvdGVudGlhbGx5IGNyYXNoIGFuZC9vciBkYW1hZ2UgdGhlIGZpbGVzeXN0ZW0gZXZlbiBpZiBpdCBpcyBtb3VudGVkCityZWFkLW9ubHkuICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZQorLkIgXC1mCitmbGFnLCBidXQgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkIC0tLSBpZiB5b3UgdGhpbmsgeW91J3JlIHNtYXJ0ZXIKK3RoYW4gdGhlIAorLkIgYmFkYmxvY2tzCitwcm9ncmFtLCB5b3UgYWxtb3N0IGNlcnRhaW5seSBhcmVuJ3QuICBUaGUgb25seSB0aW1lIHdoZW4gdGhpcyBvcHRpb24gCittaWdodCBiZSBzYWZlIHRvIHVzZSBpcyBpZiB0aGUgL2V0Yy9tdGFiIGZpbGUgaXMgaW5jb3JyZWN0LCBhbmQgdGhlIGRldmljZQorcmVhbGx5IGlzbid0IG1vdW50ZWQuCisuVFAKKy5CSSBcLWkgIiBpbnB1dF9maWxlIgorUmVhZCBhIGxpc3Qgb2YgYWxyZWFkeSBleGlzdGluZyBrbm93biBiYWQgYmxvY2tzLgorLkIgQmFkYmxvY2tzCit3aWxsIHNraXAgdGVzdGluZyB0aGVzZSBibG9ja3Mgc2luY2UgdGhleSBhcmUga25vd24gdG8gYmUgYmFkLiAgSWYKKy5JIGlucHV0X2ZpbGUKK2lzIHNwZWNpZmllZCBhcyAiLSIsIHRoZSBsaXN0IHdpbGwgYmUgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KK0Jsb2NrcyBsaXN0ZWQgaW4gdGhpcyBsaXN0IHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBsaXN0IG9mCisuSSBuZXcKK2JhZCBibG9ja3MgcHJvZHVjZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBvciBpbiB0aGUgb3V0cHV0IGZpbGUuCitUaGUKKy5CIFwtYgorb3B0aW9uIG9mCisuQlIgZHVtcGUyZnMgKDgpCitjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgbGlzdCBvZiBibG9ja3MgY3VycmVudGx5IG1hcmtlZCBiYWQgb24KK2FuIGV4aXN0aW5nIGZpbGVzeXN0ZW0sIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGlzIG9wdGlvbi4KKy5UUAorLkIgXC1uCitVc2Ugbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZS4gIEJ5IGRlZmF1bHQgb25seSBhIG5vbi1kZXN0cnVjdGl2ZSAKK3JlYWQtb25seSB0ZXN0IGlzIGRvbmUuICBUaGlzIG9wdGlvbiBtdXN0IG5vdCBiZSBjb21iaW5lZCB3aXRoIHRoZSAKKy5CIFwtdworb3B0aW9uLCBhcyB0aGV5IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisuVFAKKy5CSSBcLW8gIiBvdXRwdXRfZmlsZSIKK1dyaXRlIHRoZSBsaXN0IG9mIGJhZCBibG9ja3MgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwKKy5CIGJhZGJsb2NrcworZGlzcGxheXMgdGhlIGxpc3Qgb24gaXRzIHN0YW5kYXJkIG91dHB1dC4gIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHN1aXRhYmxlCitmb3IgdXNlIGJ5IHRoZQorLgorLkIgXC1sCitvcHRpb24gaW4gCisuQlIgZTJmc2NrICg4KQorb3IKKy5CUiBta2UyZnMgKDgpLgorLlRQCisuQkkgXC1wICIgbnVtX3Bhc3NlcyIKK1JlcGVhdCBzY2FubmluZyB0aGUgZGlzayB1bnRpbCB0aGVyZSBhcmUgbm8gbmV3IGJsb2NrcyBkaXNjb3ZlcmVkIGluCitudW1fcGFzc2VzIGNvbnNlY3V0aXZlIHNjYW5zIG9mIHRoZSBkaXNrLgorRGVmYXVsdCBpcyAwLCBtZWFuaW5nCisuQiBiYWRibG9ja3MKK3dpbGwgZXhpdCBhZnRlciB0aGUgZmlyc3QgcGFzcy4KKy5UUAorLkIgXC1zCitTaG93IHRoZSBwcm9ncmVzcyBvZiB0aGUgc2NhbiBieSB3cml0aW5nIG91dCByb3VnaCBwZXJjZW50YWdlIGNvbXBsZXRpb24KK29mIHRoZSBjdXJyZW50IGJhZGJsb2NrcyBwYXNzIG92ZXIgdGhlIGRpc2suICBOb3RlIHRoYXQgYmFkYmxvY2tzIG1heSBkbworbXVsdGlwbGUgdGVzdCBwYXNzZXMgb3ZlciB0aGUgZGlzaywgaW4gcGFydGljdWxhciBpZiB0aGUKKy5CIFwtcAorb3IKKy5CIFwtdworb3B0aW9uIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlci4KKy5UUAorLkJJIFwtdCAiIHRlc3RfcGF0dGVybiIKK1NwZWNpZnkgYSB0ZXN0IHBhdHRlcm4gdG8gYmUgcmVhZCAoYW5kIHdyaXR0ZW4pIHRvIGRpc2sgYmxvY2tzLiAgIFRoZQorLkkgdGVzdF9wYXR0ZXJuCittYXkgZWl0aGVyIGJlIGEgbnVtZXJpYyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIFVMT05HX01BWC0xIGluY2x1c2l2ZSwgb3IgdGhlIHdvcmQgCisicmFuZG9tIiwgd2hpY2ggc3BlY2lmaWVzIHRoYXQgdGhlIGJsb2NrIHNob3VsZCBiZSBmaWxsZWQgd2l0aCBhIHJhbmRvbQorYml0IHBhdHRlcm4uCitGb3IgcmVhZC93cml0ZSAoXGZCLXdcZlIpIGFuZCBub24tZGVzdHJ1Y3RpdmUgKFxmQi1uXGZSKSBtb2RlcywKK29uZSBvciBtb3JlIHRlc3QgcGF0dGVybnMgbWF5IGJlIHNwZWNpZmllZCBieSBzcGVjaWZ5aW5nIHRoZQorLkIgLXQKK29wdGlvbiBmb3IgZWFjaCB0ZXN0IHBhdHRlcm4gZGVzaXJlZC4gIEZvcgorcmVhZC1vbmx5IG1vZGUgb25seSBhIHNpbmdsZSBwYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgYW5kIGl0IG1heSBub3QgYmUKKyJyYW5kb20iLiAgUmVhZC1vbmx5IHRlc3Rpbmcgd2l0aCBhIHBhdHRlcm4gYXNzdW1lcyB0aGF0IHRoZQorc3BlY2lmaWVkIHBhdHRlcm4gaGFzIHByZXZpb3VzbHkgYmVlbiB3cml0dGVuIHRvIHRoZSBkaXNrIC0gaWYgbm90LCBsYXJnZQorbnVtYmVycyBvZiBibG9ja3Mgd2lsbCBmYWlsIHZlcmlmaWNhdGlvbi4gIAorSWYgbXVsdGlwbGUgcGF0dGVybnMKK2FyZSBzcGVjaWZpZWQgdGhlbiBhbGwgYmxvY2tzIHdpbGwgYmUgdGVzdGVkIHdpdGggb25lIHBhdHRlcm4gCitiZWZvcmUgcHJvY2VlZGluZyB0byB0aGUgbmV4dCBwYXR0ZXJuLgorLlRQCisuQiBcLXYKK1ZlcmJvc2UgbW9kZS4gIFdpbGwgd3JpdGUgdGhlIG51bWJlciBvZiByZWFkIGVycm9ycywgd3JpdGUgZXJyb3JzIGFuZCBkYXRhLQorY29ycnVwdGlvbnMgdG8gc3RkZXJyLgorLlRQCisuQiBcLXcKK1VzZSB3cml0ZS1tb2RlIHRlc3QuIFdpdGggdGhpcyBvcHRpb24sCisuQiBiYWRibG9ja3MKK3NjYW5zIGZvciBiYWQgYmxvY2tzIGJ5IHdyaXRpbmcgc29tZSBwYXR0ZXJucyAoMHhhYSwgMHg1NSwgMHhmZiwgMHgwMCkgb24KK2V2ZXJ5IGJsb2NrIG9mIHRoZSBkZXZpY2UsIHJlYWRpbmcgZXZlcnkgYmxvY2sgYW5kIGNvbXBhcmluZyB0aGUgY29udGVudHMuICAKK1RoaXMgb3B0aW9uIG1heSBub3QgYmUgY29tYmluZWQgd2l0aCB0aGUgCisuQiBcLW4gCitvcHRpb24sIGFzIHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKy5UUAorLkIgXC1CCitVc2UgYnVmZmVyZWQgSS9PIGFuZCBkbyBub3QgdXNlIERpcmVjdCBJL08sIGV2ZW4gaWYgaXQgaXMgYXZhaWxhYmxlLgorLlRQCisuQiBcLVgKK0ludGVybmFsIGZsYWcgb25seSB0byBiZSB1c2VkIGJ5CisuQlIgZTJmc2NrICg4KQorYW5kCisuQlIgbWtlMmZzICg4KS4KK0l0IGJ5cGFzc2VzIHRoZSBleGNsdXNpdmUgbW9kZSBpbi11c2UgZGV2aWNlIHNhZmV0eSBjaGVjay4KKy5TSCBXQVJOSU5HCitOZXZlciB1c2UgdGhlCisuQiBcLXcKK29wdGlvbiBvbiBhIGRldmljZSBjb250YWluaW5nIGFuIGV4aXN0aW5nIGZpbGUgc3lzdGVtLgorVGhpcyBvcHRpb24gZXJhc2VzIGRhdGEhICBJZiB5b3Ugd2FudCB0byBkbyB3cml0ZS1tb2RlIHRlc3Rpbmcgb24KK2FuIGV4aXN0aW5nIGZpbGUgc3lzdGVtLCB1c2UgdGhlCisuQiBcLW4KK29wdGlvbiBpbnN0ZWFkLiAgSXQgaXMgc2xvd2VyLCBidXQgaXQgd2lsbCBwcmVzZXJ2ZSB5b3VyIGRhdGEuICAKKy5QUAorVGhlCisuQiBcLWUKK29wdGlvbiB3aWxsIGNhdXNlIGJhZGJsb2NrcyB0byBvdXRwdXQgYSBwb3NzaWJseSBpbmNvbXBsZXRlIGxpc3Qgb2YKK2JhZCBibG9ja3MuIFRoZXJlZm9yZSBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgaXQgb25seSB3aGVuIG9uZSB3YW50cwordG8ga25vdyBpZiB0aGVyZSBhcmUgYW55IGJhZCBibG9ja3MgYXQgYWxsIG9uIHRoZSBkZXZpY2UsIGFuZCBub3Qgd2hlbgordGhlIGxpc3Qgb2YgYmFkIGJsb2NrcyBpcyB3YW50ZWQuCisuU0ggQVVUSE9SCisuQiBiYWRibG9ja3MKK3dhcyB3cml0dGVuIGJ5IFJlbXkgQ2FyZCA8UmVteS5DYXJkQGxpbnV4Lm9yZz4uICBDdXJyZW50IG1haW50YWluZXIgaXMKK1RoZW9kb3JlIFRzJ28gPHR5dHNvQGFsdW0ubWl0LmVkdT4uICBOb24tZGVzdHJ1Y3RpdmUgcmVhZC93cml0ZSB0ZXN0CitpbXBsZW1lbnRlZCBieSBEYXZpZCBCZWF0dGllIDxkYmVhdHRpZUBzb2Z0aG9tZS5uZXQ+LgorLlNIIEFWQUlMQUJJTElUWQorLkIgYmFkYmxvY2tzCitpcyBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBhbmQgaXMgYXZhaWxhYmxlIGZyb20gCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGUyZnNjayAoOCksCisuQlIgbWtlMmZzICg4KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvYmFkYmxvY2tzLmMgYi9lMmZzcHJvZ3MvbWlzYy9iYWRibG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2M4N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvYmFkYmxvY2tzLmMKQEAgLTAsMCArMSwxMzMxIEBACisvKgorICogYmFkYmxvY2tzLmMJCS0gQmFkIGJsb2NrcyBjaGVja2VyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqIENvcHlyaWdodCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5IGJ5IFRoZW9kb3JlIFRzJ28KKyAqIENvcHlyaWdodCAxOTk5IGJ5IERhdmlkIEJlYXR0aWUKKyAqCisgKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIG1pbml4IGZpbGUgc3lzdGVtIHByb2dyYW1zIGZzY2sgYW5kIG1rZnMKKyAqIHdyaXR0ZW4gYW5kIGNvcHlyaWdodGVkIGJ5IExpbnVzIFRvcnZhbGRzIDxMaW51cy5Ub3J2YWxkc0Bjcy5oZWxzaW5raS5maT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMDUvMjYJLSBDcmVhdGlvbiBmcm9tIGUyZnNjaworICogOTQvMDIvMjcJLSBNYWRlIGEgc2VwYXJhdGUgYmFkIGJsb2NrcyBjaGVja2VyCisgKiA5OS8wNi8zMC4uLjk5LzA3LzI2IC0gQWRkZWQgbm9uLWRlc3RydWN0aXZlIHdyaXRlLXRlc3RpbmcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlIGJsb2Nrcy1hdC1vbmNlIHBhcmFtZXRlciwKKyAqIAkJCSBsb2FkaW5nIG9mIGJhZGJsb2NrcyBsaXN0IHRvIGF2b2lkIHRlc3RpbmcKKyAqIAkJCSBibG9ja3Mga25vd24gdG8gYmUgYmFkLCBtdWx0aXBsZSBwYXNzZXMgdG8KKyAqIAkJCSBtYWtlIHN1cmUgdGhhdCBubyBuZXcgYmxvY2tzIGFyZSBhZGRlZCB0byB0aGUKKyAqIAkJCSBsaXN0LiAgKFdvcmsgZG9uZSBieSBEYXZpZCBCZWF0dGllKQorICovCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgLyogZm9yIE9fRElSRUNUICovCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2lvLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjaWZuZGVmIE9fTEFSR0VGSUxFCisjZGVmaW5lIE9fTEFSR0VGSUxFIDAKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJiYWRibG9ja3MiOworc3RhdGljIGNvbnN0IGNoYXIgKiBkb25lX3N0cmluZyA9IE5fKCJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIik7CisKK3N0YXRpYyBpbnQgdl9mbGFnOwkJCS8qIHZlcmJvc2UgKi8KK3N0YXRpYyBpbnQgd19mbGFnOwkJCS8qIGRvIHIvdyB0ZXN0OiAwPW5vLCAxPXllcywKKwkJCQkJICogMj1ub24tZGVzdHJ1Y3RpdmUgKi8KK3N0YXRpYyBpbnQgc19mbGFnOwkJCS8qIHNob3cgcHJvZ3Jlc3Mgb2YgdGVzdCAqLworc3RhdGljIGludCBmb3JjZTsJCQkvKiBmb3JjZSBjaGVjayBvZiBtb3VudGVkIGRldmljZSAqLworc3RhdGljIGludCB0X2ZsYWc7CQkJLyogbnVtYmVyIG9mIHRlc3QgcGF0dGVybnMgKi8KK3N0YXRpYyBpbnQgdF9tYXg7CQkJLyogYWxsb2NhdGVkIHRlc3QgcGF0dGVybnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnRfcGF0dHM7CQkvKiB0ZXN0IHBhdHRlcm5zICovCitzdGF0aWMgaW50IHVzZV9idWZmZXJlZF9pbzsKK3N0YXRpYyBpbnQgZXhjbHVzaXZlX29rOworc3RhdGljIHVuc2lnbmVkIGludCBtYXhfYmI7CQkvKiBBYm9ydCB0ZXN0IGlmIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBiYWQgYmxvY2tzIGhhcyBiZWVuIGVuY291bnRlcmVkICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRfZmxhZzsJCS8qIGRlbGF5IGZhY3RvciBiZXR3ZWVuIHJlYWRzICovCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydDsKKworI2RlZmluZSBUX0lOQyAzMgorCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c19wYWdlX3NpemUgPSA0MDk2OworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKAorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSBtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIiksCisJCSBwcm9ncmFtX25hbWUpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgdm9pZCBleGNsdXNpdmVfdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuXG4iKSwKKwkJcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgYmxrX3QgY3VycmVudGx5X3Rlc3RpbmcgPSAwOworc3RhdGljIGJsa190IG51bV9ibG9ja3MgPSAwOworc3RhdGljIGJsa190IG51bV9yZWFkX2Vycm9ycyA9IDA7CitzdGF0aWMgYmxrX3QgbnVtX3dyaXRlX2Vycm9ycyA9IDA7CitzdGF0aWMgYmxrX3QgbnVtX2NvcnJ1cHRpb25fZXJyb3JzID0gMDsKK3N0YXRpYyBleHQyX2JhZGJsb2Nrc19saXN0IGJiX2xpc3QgPSBOVUxMOworc3RhdGljIEZJTEUgKm91dDsKK3N0YXRpYyBibGtfdCBuZXh0X2JhZCA9IDA7CitzdGF0aWMgZXh0Ml9iYWRibG9ja3NfaXRlcmF0ZSBiYl9pdGVyID0gTlVMTDsKKworZW51bSBlcnJvcl90eXBlcyB7IFJFQURfRVJST1IsIFdSSVRFX0VSUk9SLCBDT1JSVVBUSU9OX0VSUk9SIH07CisKK3N0YXRpYyB2b2lkICphbGxvY2F0ZV9idWZmZXIoc2l6ZV90IHNpemUpCit7CisJdm9pZAkqcmV0ID0gMDsKKworI2lmZGVmIEhBVkVfUE9TSVhfTUVNQUxJR04KKwlpZiAocG9zaXhfbWVtYWxpZ24oJnJldCwgc3lzX3BhZ2Vfc2l6ZSwgc2l6ZSkgPCAwKQorCQlyZXQgPSAwOworI2Vsc2UKKyNpZmRlZiBIQVZFX01FTUFMSUdOCisJcmV0ID0gbWVtYWxpZ24oc3lzX3BhZ2Vfc2l6ZSwgc2l6ZSk7CisjZWxzZQorI2lmZGVmIEhBVkVfVkFMTE9DCisJcmV0ID0gdmFsbG9jKHNpemUpOworI2VuZGlmIC8qIEhBVkVfVkFMTE9DICovCisjZW5kaWYgLyogSEFWRV9NRU1BTElHTiAqLworI2VuZGlmIC8qIEhBVkVfUE9TSVhfTUVNQUxJR04gKi8KKworCWlmICghcmV0KQorCQlyZXQgPSBtYWxsb2Moc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyByb3V0aW5lIHJlcG9ydHMgYSBuZXcgYmFkIGJsb2NrLiAgSWYgdGhlIGJhZCBibG9jayBoYXMgYWxyZWFkeQorICogYmVlbiBzZWVuIGJlZm9yZSwgdGhlbiBpdCByZXR1cm5zIDA7IG90aGVyd2lzZSBpdCByZXR1cm5zIDEuCisgKi8KK3N0YXRpYyBpbnQgYmJfb3V0cHV0IChibGtfdCBiYWQsIGVudW0gZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSkKK3sKKwllcnJjb2RlX3QgZXJyY29kZTsKKworCWlmIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYl9saXN0LCBiYWQpKQorCQlyZXR1cm4gMDsKKworCWZwcmludGYob3V0LCAiJWx1XG4iLCAodW5zaWduZWQgbG9uZykgYmFkKTsKKwlmZmx1c2gob3V0KTsKKworCWVycmNvZGUgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfYWRkIChiYl9saXN0LCBiYWQpOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJyY29kZSwgImFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiKTsKKwkJZXhpdCAoMSk7CisJfQorCisJLyoga2x1ZGdlOgorCSAgIGluY3JlbWVudCB0aGUgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGJiX2xpc3QgaWYKKwkgICBhbiBlbGVtZW50IHdhcyBqdXN0IGFkZGVkIGJlZm9yZSB0aGUgY3VycmVudCBpdGVyYXRpb24KKwkgICBwb3NpdGlvbi4gIFRoaXMgc2hvdWxkIG5vdCBjYXVzZSBuZXh0X2JhZCB0byBjaGFuZ2UuICovCisJaWYgKGJiX2l0ZXIgJiYgYmFkIDwgbmV4dF9iYWQpCisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlIChiYl9pdGVyLCAmbmV4dF9iYWQpOworCisJaWYgKGVycm9yX3R5cGUgPT0gUkVBRF9FUlJPUikgeworCSAgbnVtX3JlYWRfZXJyb3JzKys7CisJfSBlbHNlIGlmIChlcnJvcl90eXBlID09IFdSSVRFX0VSUk9SKSB7CisJICBudW1fd3JpdGVfZXJyb3JzKys7CisJfSBlbHNlIGlmIChlcnJvcl90eXBlID09IENPUlJVUFRJT05fRVJST1IpIHsKKwkgIG51bV9jb3JydXB0aW9uX2Vycm9ycysrOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNoYXIgKnRpbWVfZGlmZl9mb3JtYXQoc3RydWN0IHRpbWV2YWwgKnR2MSwKKwkJCSAgICAgIHN0cnVjdCB0aW1ldmFsICp0djIsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgdGltZV90CWRpZmYgPSAodHYxLT50dl9zZWMgLSB0djItPnR2X3NlYyk7CisJaW50CWhyLG1pbixzZWM7CisKKwlzZWMgPSBkaWZmICUgNjA7CisJZGlmZiAvPSA2MDsKKwltaW4gPSBkaWZmICUgNjA7CisJaHIgPSBkaWZmIC8gNjA7CisKKwlpZiAoaHIpCisJCXNwcmludGYoYnVmLCAiJWQ6JTAyZDolMDJkIiwgaHIsIG1pbiwgc2VjKTsKKwllbHNlCisJCXNwcmludGYoYnVmLCAiJWQ6JTAyZCIsIG1pbiwgc2VjKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgZmxvYXQgY2FsY19wZXJjZW50KHVuc2lnbmVkIGxvbmcgY3VycmVudCwgdW5zaWduZWQgbG9uZyB0b3RhbCkgeworCWZsb2F0IHBlcmNlbnQgPSAwLjA7CisJaWYgKHRvdGFsIDw9IDApCisJCXJldHVybiBwZXJjZW50OworCWlmIChjdXJyZW50ID49IHRvdGFsKSB7CisJCXBlcmNlbnQgPSAxMDAuMDsKKwl9IGVsc2UgeworCQlwZXJjZW50PSgxMDAuMCooZmxvYXQpY3VycmVudC8oZmxvYXQpdG90YWwpOworCX0KKwlyZXR1cm4gcGVyY2VudDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3RhdHVzKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdGltZV9lbmQ7CisJY2hhciBkaWZmX2J1ZlszMl0sIGxpbmVfYnVmWzEyOF07CisJaW50IGxlbjsKKworCWdldHRpbWVvZmRheSgmdGltZV9lbmQsIDApOworCWxlbiA9IHNucHJpbnRmKGxpbmVfYnVmLCBzaXplb2YobGluZV9idWYpLCAKKwkJICAgICAgIF8oIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gIgorCQkgICAgICAgICAiKCVkLyVkLyVkIGVycm9ycykiKSwKKwkJICAgICAgIGNhbGNfcGVyY2VudCgodW5zaWduZWQgbG9uZykgY3VycmVudGx5X3Rlc3RpbmcsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKSBudW1fYmxvY2tzKSwgCisJCSAgICAgICB0aW1lX2RpZmZfZm9ybWF0KCZ0aW1lX2VuZCwgJnRpbWVfc3RhcnQsIGRpZmZfYnVmKSwKKwkJICAgICAgIG51bV9yZWFkX2Vycm9ycywKKwkJICAgICAgIG51bV93cml0ZV9lcnJvcnMsCisJCSAgICAgICBudW1fY29ycnVwdGlvbl9lcnJvcnMpOworI2lmZGVmIEhBVkVfTUJTVE9XQ1MKKwlsZW4gPSBtYnN0b3djcyhOVUxMLCBsaW5lX2J1Ziwgc2l6ZW9mKGxpbmVfYnVmKSk7CisjZW5kaWYKKwlmcHV0cyhsaW5lX2J1Ziwgc3RkZXJyKTsKKwltZW1zZXQobGluZV9idWYsICdcYicsIGxlbik7CisJbGluZV9idWZbbGVuXSA9IDA7CisJZnB1dHMobGluZV9idWYsIHN0ZGVycik7CQorCWZmbHVzaCAoc3RkZXJyKTsKK30KKworc3RhdGljIHZvaWQgYWxhcm1faW50cihpbnQgYWxudW0gRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCXNpZ25hbCAoU0lHQUxSTSwgYWxhcm1faW50cik7CisJYWxhcm0oMSk7CisJaWYgKCFudW1fYmxvY2tzKQorCQlyZXR1cm47CisJcHJpbnRfc3RhdHVzKCk7Cit9CisKK3N0YXRpYyB2b2lkICp0ZXJtaW5hdGVfYWRkciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZV9pbnRyKGludCBzaWdubyBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJZmZsdXNoKG91dCk7CisJZnByaW50ZihzdGRlcnIsICJcblxuSW50ZXJydXB0ZWQgYXQgYmxvY2sgJWxsdVxuIiwgCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnRseV90ZXN0aW5nKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlpZiAodGVybWluYXRlX2FkZHIpCisJCWxvbmdqbXAodGVybWluYXRlX2FkZHIsMSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgY2FwdHVyZV90ZXJtaW5hdGUoam1wX2J1ZiB0ZXJtX2FkZHIpCit7CisJdGVybWluYXRlX2FkZHIgPSB0ZXJtX2FkZHI7CisJc2lnbmFsIChTSUdIVVAsIHRlcm1pbmF0ZV9pbnRyKTsKKwlzaWduYWwgKFNJR0lOVCwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbCAoU0lHUElQRSwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbCAoU0lHVEVSTSwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbCAoU0lHVVNSMSwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbCAoU0lHVVNSMiwgdGVybWluYXRlX2ludHIpOworfQorCitzdGF0aWMgdm9pZCB1bmNhcHR1cmVfdGVybWluYXRlKHZvaWQpCit7CisJdGVybWluYXRlX2FkZHIgPSBOVUxMOworCXNpZ25hbCAoU0lHSFVQLCBTSUdfREZMKTsKKwlzaWduYWwgKFNJR0lOVCwgU0lHX0RGTCk7CisJc2lnbmFsIChTSUdQSVBFLCBTSUdfREZMKTsKKwlzaWduYWwgKFNJR1RFUk0sIFNJR19ERkwpOworCXNpZ25hbCAoU0lHVVNSMSwgU0lHX0RGTCk7CisJc2lnbmFsIChTSUdVU1IyLCBTSUdfREZMKTsKK30KKworLyogTGludXggcmVxdWlyZXMgdGhhdCBPX0RJUkVDVCBJL09zIGJlIDUxMi1ieXRlIHNlY3RvciBhbGlnbmVkICovCisKKyNkZWZpbmUgT19ESVJFQ1RfU0laRSA1MTIKKworc3RhdGljIHZvaWQgc2V0X29fZGlyZWN0KGludCBkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJCQkgZXh0Ml9sb2ZmX3Qgb2Zmc2V0KQoreworI2lmZGVmIE9fRElSRUNUCisJc3RhdGljIGludCBjdXJyZW50X09fRElSRUNUOwkvKiBDdXJyZW50IHN0YXR1cyBvZiBPX0RJUkVDVCBmbGFnICovCisJaW50IG5ld19mbGFnID0gT19ESVJFQ1Q7CisJaW50IGZsYWc7CisKKwlpZiAoKHVzZV9idWZmZXJlZF9pbyAhPSAwKSB8fAorCSAgICAoKCh1bnNpZ25lZCBsb25nKSBidWZmZXIgJiAoc3lzX3BhZ2Vfc2l6ZSAtIDEpKSAhPSAwKSB8fAorCSAgICAoKHNpemUgJiAoc3lzX3BhZ2Vfc2l6ZSAtIDEpKSAhPSAwKSB8fAorCSAgICAoKG9mZnNldCAmIChPX0RJUkVDVF9TSVpFIC0gMSkpICE9IDApKQorCQluZXdfZmxhZyA9IDA7CisKKwlpZiAobmV3X2ZsYWcgIT0gY3VycmVudF9PX0RJUkVDVCkgeworCSAgICAgLyogcHJpbnRmKCIlcyBPX0RJUkVDVFxuIiwgbmV3X2ZsYWcgPyAiU2V0dGluZyIgOiAiQ2xlYXJpbmciKTsgKi8KKwkJZmxhZyA9IGZjbnRsKGRldiwgRl9HRVRGTCk7CisJCWlmIChmbGFnID4gMCkgeworCQkJZmxhZyA9IChmbGFnICYgfk9fRElSRUNUKSB8IG5ld19mbGFnOworCQkJZmNudGwoZGV2LCBGX1NFVEZMLCBmbGFnKTsKKwkJfQorCQljdXJyZW50X09fRElSRUNUID0gbmV3X2ZsYWc7CisJfQorI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQgcGF0dGVybl9maWxsKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHBhdHRlcm4sCisJCQkgc2l6ZV90IG4pCit7CisJdW5zaWduZWQgaW50CWksIG5iOworCXVuc2lnbmVkIGNoYXIJYnBhdHRlcm5bc2l6ZW9mKHBhdHRlcm4pXSwgKnB0cjsKKworCWlmIChwYXR0ZXJuID09ICh1bnNpZ25lZCBpbnQpIH4wKSB7CisJCWZvciAocHRyID0gYnVmZmVyOyBwdHIgPCBidWZmZXIgKyBuOyBwdHIrKykgeworCQkJKCpwdHIpID0gcmFuZG9tKCkgJSAoMSA8PCAoOCAqIHNpemVvZihjaGFyKSkpOworCQl9CisJCWlmIChzX2ZsYWcgfCB2X2ZsYWcpCisJCQlmcHV0cyhfKCJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIpLCBzdGRlcnIpOworCX0gZWxzZSB7CisJCWJwYXR0ZXJuWzBdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihicGF0dGVybik7IGkrKykgeworCQkJaWYgKHBhdHRlcm4gPT0gMCkKKwkJCQlicmVhazsKKwkJCWJwYXR0ZXJuW2ldID0gcGF0dGVybiAmIDB4RkY7CisJCQlwYXR0ZXJuID0gcGF0dGVybiA+PiA4OworCQl9CisJCW5iID0gaSA/IChpLTEpIDogMDsKKwkJZm9yIChwdHIgPSBidWZmZXIsIGkgPSBuYjsgcHRyIDwgYnVmZmVyICsgbjsgcHRyKyspIHsKKwkJCSpwdHIgPSBicGF0dGVybltpXTsKKwkJCWlmIChpID09IDApCisJCQkJaSA9IG5iOworCQkJZWxzZQorCQkJCWktLTsKKwkJfQorCQlpZiAoc19mbGFnIHwgdl9mbGFnKSB7CisJCQlmcHV0cyhfKCJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIpLCBzdGRlcnIpOworCQkJZm9yIChpID0gMDsgaSA8PSBuYjsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiJTAyeCIsIGJ1ZmZlcltpXSk7CisJCQlmcHV0cygiOiAiLCBzdGRlcnIpOworCQl9CisJfQorfQorCisvKgorICogUGVyZm9ybSBhIHJlYWQgb2YgYSBzZXF1ZW5jZSBvZiBibG9ja3M7IHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcworICogICAgc3VjY2Vzc2Z1bGx5IHNlcXVlbnRpYWxseSByZWFkLgorICovCitzdGF0aWMgaW50IGRvX3JlYWQgKGludCBkZXYsIHVuc2lnbmVkIGNoYXIgKiBidWZmZXIsIGludCB0cnksIGludCBibG9ja19zaXplLAorCQkgICAgYmxrX3QgY3VycmVudF9ibG9jaykKK3sKKwlsb25nIGdvdDsKKwlzdHJ1Y3QgdGltZXZhbCB0djEsIHR2MjsKKyNkZWZpbmUgTkFOT1NFQyAoMTAwMDAwMDAwMEwpCisjZGVmaW5lIE1JTElTRUMgKDEwMDBMKQorCisjaWYgMAorCXByaW50ZigiZG9fcmVhZDogYmxvY2sgJWQsIHRyeSAlZFxuIiwgY3VycmVudF9ibG9jaywgdHJ5KTsKKyNlbmRpZgorCXNldF9vX2RpcmVjdChkZXYsIGJ1ZmZlciwgdHJ5ICogYmxvY2tfc2l6ZSwKKwkJICAgICAoKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrKSAqIGJsb2NrX3NpemUpOworCisJaWYgKHZfZmxhZyA+IDEpCisJCXByaW50X3N0YXR1cygpOworCisJLyogU2VlayB0byB0aGUgY29ycmVjdCBsb2MuICovCisJaWYgKGV4dDJmc19sbHNlZWsgKGRldiwgKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSwKKwkJCSBTRUVLX1NFVCkgIT0gKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSkKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgIiVzIiwgXygiZHVyaW5nIHNlZWsiKSk7CisKKwkvKiBUcnkgdGhlIHJlYWQgKi8KKwlpZiAoZF9mbGFnKQorCQlnZXR0aW1lb2ZkYXkoJnR2MSwgTlVMTCk7CisJZ290ID0gcmVhZCAoZGV2LCBidWZmZXIsIHRyeSAqIGJsb2NrX3NpemUpOworCWlmIChkX2ZsYWcpCisJCWdldHRpbWVvZmRheSgmdHYyLCBOVUxMKTsKKwlpZiAoZ290IDwgMCkKKwkJZ290ID0gMDsKKwlpZiAoZ290ICYgNTExKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIiksIGdvdCk7CisJZ290IC89IGJsb2NrX3NpemU7CisJaWYgKGRfZmxhZyAmJiBnb3QgPT0gdHJ5KSB7CisjaWZkZWYgSEFWRV9OQU5PU0xFRVAKKwkJc3RydWN0IHRpbWVzcGVjIHRzOworCQl0cy50dl9zZWMgPSB0djIudHZfc2VjIC0gdHYxLnR2X3NlYzsKKwkJdHMudHZfbnNlYyA9ICh0djIudHZfdXNlYyAtIHR2MS50dl91c2VjKSAqIE1JTElTRUM7CisJCWlmICh0cy50dl9uc2VjIDwgMCkgeworCQkJdHMudHZfbnNlYyArPSBOQU5PU0VDOworCQkJdHMudHZfc2VjIC09IDE7CisJCX0KKwkJLyogaW5jcmVhc2UvZGVjcmVhc2UgdGhlIHNsZWVwIHRpbWUgYmFzZWQgb24gZF9mbGFnIHZhbHVlICovCisJCXRzLnR2X3NlYyA9IHRzLnR2X3NlYyAqIGRfZmxhZyAvIDEwMDsKKwkJdHMudHZfbnNlYyA9IHRzLnR2X25zZWMgKiBkX2ZsYWcgLyAxMDA7CisJCWlmICh0cy50dl9uc2VjID4gTkFOT1NFQykgeworCQkJdHMudHZfc2VjICs9IHRzLnR2X25zZWMgLyBOQU5PU0VDOworCQkJdHMudHZfbnNlYyAlPSBOQU5PU0VDOworCQl9CisJCWlmICh0cy50dl9zZWMgfHwgdHMudHZfbnNlYykKKwkJCW5hbm9zbGVlcCgmdHMsIE5VTEwpOworI2Vsc2UKKyNpZmRlZiBIQVZFX1VTTEVFUAorCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJdHYudHZfc2VjID0gdHYyLnR2X3NlYyAtIHR2MS50dl9zZWM7CisJCXR2LnR2X3VzZWMgPSB0djIudHZfdXNlYyAtIHR2MS50dl91c2VjOworCQl0di50dl9zZWMgPSB0di50dl9zZWMgKiBkX2ZsYWcgLyAxMDA7CisJCXR2LnR2X3VzZWMgPSB0di50dl91c2VjICogZF9mbGFnIC8gMTAwOworCQlpZiAodHYudHZfdXNlYyA+IDEwMDAwMDApIHsKKwkJCXR2LnR2X3NlYyArPSB0di50dl91c2VjIC8gMTAwMDAwMDsKKwkJCXR2LnR2X3VzZWMgJT0gMTAwMDAwMDsKKwkJfQorCQlpZiAodHYudHZfc2VjKQorCQkJc2xlZXAodHYudHZfc2VjKTsKKwkJaWYgKHR2LnR2X3VzZWMpCisJCQl1c2xlZXAodHYudHZfdXNlYyk7CisjZW5kaWYKKyNlbmRpZgorCX0KKwlyZXR1cm4gZ290OworfQorCisvKgorICogUGVyZm9ybSBhIHdyaXRlIG9mIGEgc2VxdWVuY2Ugb2YgYmxvY2tzOyByZXR1cm4gdGhlIG51bWJlciBvZiBibG9ja3MKKyAqICAgIHN1Y2Nlc3NmdWxseSBzZXF1ZW50aWFsbHkgd3JpdHRlbi4KKyAqLworc3RhdGljIGludCBkb193cml0ZShpbnQgZGV2LCB1bnNpZ25lZCBjaGFyICogYnVmZmVyLCBpbnQgdHJ5LCBpbnQgYmxvY2tfc2l6ZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudF9ibG9jaykKK3sKKwlsb25nIGdvdDsKKworI2lmIDAKKwlwcmludGYoImRvX3dyaXRlOiBibG9jayAlbHUsIHRyeSAlZFxuIiwgY3VycmVudF9ibG9jaywgdHJ5KTsKKyNlbmRpZgorCXNldF9vX2RpcmVjdChkZXYsIGJ1ZmZlciwgdHJ5ICogYmxvY2tfc2l6ZSwKKwkJICAgICAoKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrKSAqIGJsb2NrX3NpemUpOworCisJaWYgKHZfZmxhZyA+IDEpCisJCXByaW50X3N0YXR1cygpOworCisJLyogU2VlayB0byB0aGUgY29ycmVjdCBsb2MuICovCisJaWYgKGV4dDJmc19sbHNlZWsgKGRldiwgKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSwKKwkJCSBTRUVLX1NFVCkgIT0gKGV4dDJfbG9mZl90KSBjdXJyZW50X2Jsb2NrICogYmxvY2tfc2l6ZSkKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgIiVzIiwgXygiZHVyaW5nIHNlZWsiKSk7CisKKwkvKiBUcnkgdGhlIHdyaXRlICovCisJZ290ID0gd3JpdGUgKGRldiwgYnVmZmVyLCB0cnkgKiBibG9ja19zaXplKTsKKwlpZiAoZ290IDwgMCkKKwkJZ290ID0gMDsKKwlpZiAoZ290ICYgNTExKQorCQlmcHJpbnRmKHN0ZGVyciwgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3dyaXRlXG4iLCBnb3QpOworCWdvdCAvPSBibG9ja19zaXplOworCXJldHVybiBnb3Q7Cit9CisKK3N0YXRpYyBpbnQgaG9zdF9kZXY7CisKK3N0YXRpYyB2b2lkIGZsdXNoX2J1ZnModm9pZCkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisjaWZkZWYgT19ESVJFQ1QKKwlpZiAoIXVzZV9idWZmZXJlZF9pbykKKwkJcmV0dXJuOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX3N5bmNfZGV2aWNlKGhvc3RfZGV2LCAxKTsKKwlpZiAocmV0dmFsKQorCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0ZXN0X3JvIChpbnQgZGV2LCBibGtfdCBsYXN0X2Jsb2NrLAorCQkJICAgICBpbnQgYmxvY2tfc2l6ZSwgYmxrX3QgZmlyc3RfYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja3NfYXRfb25jZSkKK3sKKwl1bnNpZ25lZCBjaGFyICogYmxrYnVmOworCWludCB0cnk7CisJaW50IGdvdDsKKwl1bnNpZ25lZCBpbnQgYmJfY291bnQgPSAwOworCWVycmNvZGVfdCBlcnJjb2RlOworCWJsa190IHJlY292ZXJfYmxvY2sgPSB+MDsKKworCS8qIHNldCB1cCBhYmVuZCBoYW5kbGVyICovCisJY2FwdHVyZV90ZXJtaW5hdGUoTlVMTCk7CisKKwllcnJjb2RlID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmJfbGlzdCwmYmJfaXRlcik7CisJaWYgKGVycmNvZGUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVycmNvZGUsICIlcyIsCisJCQlfKCJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIikpOworCQlleGl0ICgxKTsKKwl9CisJZG8geworCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZSAoYmJfaXRlciwgJm5leHRfYmFkKTsKKwl9IHdoaWxlIChuZXh0X2JhZCAmJiBuZXh0X2JhZCA8IGZpcnN0X2Jsb2NrKTsKKworCWlmICh0X2ZsYWcpIHsKKwkJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKChibG9ja3NfYXRfb25jZSArIDEpICogYmxvY2tfc2l6ZSk7CisJfSBlbHNlIHsKKwkJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSk7CisJfQorCWlmICghYmxrYnVmKQorCXsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIEVOT01FTSwgIiVzIiwKKwkJCV8oIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIpKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmICh2X2ZsYWcpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iKSwKKwkJCSh1bnNpZ25lZCBsb25nKWZpcnN0X2Jsb2NrLAorCQkJKHVuc2lnbmVkIGxvbmcpbGFzdF9ibG9jayAtIDEpOworCX0KKwlpZiAodF9mbGFnKSB7CisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iKSwgc3RkZXJyKTsKKwkJcGF0dGVybl9maWxsKGJsa2J1ZiArIGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSwKKwkJCSAgICAgdF9wYXR0c1swXSwgYmxvY2tfc2l6ZSk7CisJfQorCWZsdXNoX2J1ZnMoKTsKKwl0cnkgPSBibG9ja3NfYXRfb25jZTsKKwljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCW51bV9ibG9ja3MgPSBsYXN0X2Jsb2NrIC0gMTsKKwlpZiAoIXRfZmxhZyAmJiAoc19mbGFnIHx8IHZfZmxhZykpCisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIpLCBzdGRlcnIpOworCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCWFsYXJtX2ludHIoU0lHQUxSTSk7CisJd2hpbGUgKGN1cnJlbnRseV90ZXN0aW5nIDwgbGFzdF9ibG9jaykKKwl7CisJCWlmIChtYXhfYmIgJiYgYmJfY291bnQgPj0gbWF4X2JiKSB7CisJCQlpZiAoc19mbGFnIHx8IHZfZmxhZykgeworCQkJCWZwdXRzKF8oIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIpLCBzdGRlcnIpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKG5leHRfYmFkKSB7CisJCQlpZiAoY3VycmVudGx5X3Rlc3RpbmcgPT0gbmV4dF9iYWQpIHsKKwkJCQkvKiBmcHJpbnRmIChvdXQsICIlbHVcbiIsIG5leHRiYWQpOyAqLworCQkJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlIChiYl9pdGVyLCAmbmV4dF9iYWQpOworCQkJCWN1cnJlbnRseV90ZXN0aW5nKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlIGlmIChjdXJyZW50bHlfdGVzdGluZyArIHRyeSA+IG5leHRfYmFkKQorCQkJCXRyeSA9IG5leHRfYmFkIC0gY3VycmVudGx5X3Rlc3Rpbmc7CisJCX0KKwkJaWYgKGN1cnJlbnRseV90ZXN0aW5nICsgdHJ5ID4gbGFzdF9ibG9jaykKKwkJCXRyeSA9IGxhc3RfYmxvY2sgLSBjdXJyZW50bHlfdGVzdGluZzsKKwkJZ290ID0gZG9fcmVhZCAoZGV2LCBibGtidWYsIHRyeSwgYmxvY2tfc2l6ZSwgY3VycmVudGx5X3Rlc3RpbmcpOworCQlpZiAodF9mbGFnKSB7CisJCQkvKiB0ZXN0IHRoZSBjb21wYXJpc29uIGJldHdlZW4gYWxsIHRoZQorCQkJICAgYmxvY2tzIHN1Y2Nlc3NmdWxseSByZWFkICAqLworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZ290OyArK2kpCisJCQkJaWYgKG1lbWNtcCAoYmxrYnVmK2kqYmxvY2tfc2l6ZSwKKwkJCQkJICAgIGJsa2J1ZitibG9ja3NfYXRfb25jZSpibG9ja19zaXplLAorCQkJCQkgICAgYmxvY2tfc2l6ZSkpCisJCQkJCWJiX2NvdW50ICs9IGJiX291dHB1dChjdXJyZW50bHlfdGVzdGluZyArIGksIENPUlJVUFRJT05fRVJST1IpOworCQl9CisJCWlmIChnb3QgPT0gMCAmJiB0cnkgPT0gMSkKKwkJCWJiX2NvdW50ICs9IGJiX291dHB1dChjdXJyZW50bHlfdGVzdGluZysrLCBSRUFEX0VSUk9SKTsKKwkJY3VycmVudGx5X3Rlc3RpbmcgKz0gZ290OworCQlpZiAoZ290ICE9IHRyeSkgeworCQkJdHJ5ID0gMTsKKwkJCWlmIChyZWNvdmVyX2Jsb2NrID09IH4wVSkKKwkJCQlyZWNvdmVyX2Jsb2NrID0gY3VycmVudGx5X3Rlc3RpbmcgLSBnb3QgKworCQkJCQlibG9ja3NfYXRfb25jZTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGN1cnJlbnRseV90ZXN0aW5nID09IHJlY292ZXJfYmxvY2spIHsKKwkJCXRyeSA9IGJsb2Nrc19hdF9vbmNlOworCQkJcmVjb3Zlcl9ibG9jayA9IH4wOworCQl9CisJfQorCW51bV9ibG9ja3MgPSAwOworCWFsYXJtKDApOworCWlmIChzX2ZsYWcgfHwgdl9mbGFnKQorCQlmcHV0cyhfKGRvbmVfc3RyaW5nKSwgc3RkZXJyKTsKKworCWZmbHVzaCAoc3RkZXJyKTsKKwlmcmVlIChibGtidWYpOworCisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGJiX2l0ZXIpOworCisJdW5jYXB0dXJlX3Rlcm1pbmF0ZSgpOworCisJcmV0dXJuIGJiX2NvdW50OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRlc3RfcncgKGludCBkZXYsIGJsa190IGxhc3RfYmxvY2ssCisJCQkgICAgIGludCBibG9ja19zaXplLCBibGtfdCBmaXJzdF9ibG9jaywKKwkJCSAgICAgdW5zaWduZWQgaW50IGJsb2Nrc19hdF9vbmNlKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnJlYWRfYnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGludCBwYXR0ZXJuc1tdID0gezB4YWEsIDB4NTUsIDB4ZmYsIDB4MDB9OworCWNvbnN0IHVuc2lnbmVkIGludCAqcGF0dGVybjsKKwlpbnQgaSwgdHJ5LCBnb3QsIG5yX3BhdHRlcm4sIHBhdF9pZHg7CisJdW5zaWduZWQgaW50IGJiX2NvdW50ID0gMDsKKwlibGtfdCByZWNvdmVyX2Jsb2NrID0gfjA7CisKKwkvKiBzZXQgdXAgYWJlbmQgaGFuZGxlciAqLworCWNhcHR1cmVfdGVybWluYXRlKE5VTEwpOworCisJYnVmZmVyID0gYWxsb2NhdGVfYnVmZmVyKDIgKiBibG9ja3NfYXRfb25jZSAqIGJsb2NrX3NpemUpOworCXJlYWRfYnVmZmVyID0gYnVmZmVyICsgYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplOworCisJaWYgKCFidWZmZXIpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIEVOT01FTSwgIiVzIiwKKwkJCV8oIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIpKTsKKwkJZXhpdCAoMSk7CisJfQorCisJZmx1c2hfYnVmcygpOworCisJaWYgKHZfZmxhZykgeworCQlmcHV0cyhfKCJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iKSwKKwkJCSh1bnNpZ25lZCBsb25nKSBmaXJzdF9ibG9jaywKKwkJCSh1bnNpZ25lZCBsb25nKSBsYXN0X2Jsb2NrIC0gMSk7CisJfQorCWlmICh0X2ZsYWcpIHsKKwkJcGF0dGVybiA9IHRfcGF0dHM7CisJCW5yX3BhdHRlcm4gPSB0X2ZsYWc7CisJfSBlbHNlIHsKKwkJcGF0dGVybiA9IHBhdHRlcm5zOworCQlucl9wYXR0ZXJuID0gc2l6ZW9mKHBhdHRlcm5zKSAvIHNpemVvZihwYXR0ZXJuc1swXSk7CisJfQorCWZvciAocGF0X2lkeCA9IDA7IHBhdF9pZHggPCBucl9wYXR0ZXJuOyBwYXRfaWR4KyspIHsKKwkJcGF0dGVybl9maWxsKGJ1ZmZlciwgcGF0dGVybltwYXRfaWR4XSwKKwkJCSAgICAgYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplKTsKKwkJbnVtX2Jsb2NrcyA9IGxhc3RfYmxvY2sgLSAxOworCQljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCQlpZiAoc19mbGFnICYmIHZfZmxhZyA8PSAxKQorCQkJYWxhcm1faW50cihTSUdBTFJNKTsKKworCQl0cnkgPSBibG9ja3NfYXRfb25jZTsKKwkJd2hpbGUgKGN1cnJlbnRseV90ZXN0aW5nIDwgbGFzdF9ibG9jaykgeworCQkJaWYgKG1heF9iYiAmJiBiYl9jb3VudCA+PSBtYXhfYmIpIHsKKwkJCQlpZiAoc19mbGFnIHx8IHZfZmxhZykgeworCQkJCQlmcHV0cyhfKCJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iKSwgc3RkZXJyKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY3VycmVudGx5X3Rlc3RpbmcgKyB0cnkgPiBsYXN0X2Jsb2NrKQorCQkJCXRyeSA9IGxhc3RfYmxvY2sgLSBjdXJyZW50bHlfdGVzdGluZzsKKwkJCWdvdCA9IGRvX3dyaXRlKGRldiwgYnVmZmVyLCB0cnksIGJsb2NrX3NpemUsCisJCQkJCWN1cnJlbnRseV90ZXN0aW5nKTsKKwkJCWlmICh2X2ZsYWcgPiAxKQorCQkJCXByaW50X3N0YXR1cygpOworCisJCQlpZiAoZ290ID09IDAgJiYgdHJ5ID09IDEpCisJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nKyssIFdSSVRFX0VSUk9SKTsKKwkJCWN1cnJlbnRseV90ZXN0aW5nICs9IGdvdDsKKwkJCWlmIChnb3QgIT0gdHJ5KSB7CisJCQkJdHJ5ID0gMTsKKwkJCQlpZiAocmVjb3Zlcl9ibG9jayA9PSB+MFUpCisJCQkJCXJlY292ZXJfYmxvY2sgPSBjdXJyZW50bHlfdGVzdGluZyAtCisJCQkJCQlnb3QgKyBibG9ja3NfYXRfb25jZTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoY3VycmVudGx5X3Rlc3RpbmcgPT0gcmVjb3Zlcl9ibG9jaykgeworCQkJCXRyeSA9IGJsb2Nrc19hdF9vbmNlOworCQkJCXJlY292ZXJfYmxvY2sgPSB+MDsKKwkJCX0KKwkJfQorCisJCW51bV9ibG9ja3MgPSAwOworCQlhbGFybSAoMCk7CisJCWlmIChzX2ZsYWcgfCB2X2ZsYWcpCisJCQlmcHV0cyhfKGRvbmVfc3RyaW5nKSwgc3RkZXJyKTsKKwkJZmx1c2hfYnVmcygpOworCQlpZiAoc19mbGFnIHwgdl9mbGFnKQorCQkJZnB1dHMoXygiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiKSwgc3RkZXJyKTsKKwkJbnVtX2Jsb2NrcyA9IGxhc3RfYmxvY2s7CisJCWN1cnJlbnRseV90ZXN0aW5nID0gZmlyc3RfYmxvY2s7CisJCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCQlhbGFybV9pbnRyKFNJR0FMUk0pOworCisJCXRyeSA9IGJsb2Nrc19hdF9vbmNlOworCQl3aGlsZSAoY3VycmVudGx5X3Rlc3RpbmcgPCBsYXN0X2Jsb2NrKSB7CisJCQlpZiAobWF4X2JiICYmIGJiX2NvdW50ID49IG1heF9iYikgeworCQkJCWlmIChzX2ZsYWcgfHwgdl9mbGFnKSB7CisJCQkJCWZwdXRzKF8oIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIpLCBzdGRlcnIpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjdXJyZW50bHlfdGVzdGluZyArIHRyeSA+IGxhc3RfYmxvY2spCisJCQkJdHJ5ID0gbGFzdF9ibG9jayAtIGN1cnJlbnRseV90ZXN0aW5nOworCQkJZ290ID0gZG9fcmVhZCAoZGV2LCByZWFkX2J1ZmZlciwgdHJ5LCBibG9ja19zaXplLAorCQkJCSAgICAgICBjdXJyZW50bHlfdGVzdGluZyk7CisJCQlpZiAoZ290ID09IDAgJiYgdHJ5ID09IDEpCisJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nKyssIFJFQURfRVJST1IpOworCQkJY3VycmVudGx5X3Rlc3RpbmcgKz0gZ290OworCQkJaWYgKGdvdCAhPSB0cnkpIHsKKwkJCQl0cnkgPSAxOworCQkJCWlmIChyZWNvdmVyX2Jsb2NrID09IH4wVSkKKwkJCQkJcmVjb3Zlcl9ibG9jayA9IGN1cnJlbnRseV90ZXN0aW5nIC0KKwkJCQkJCWdvdCArIGJsb2Nrc19hdF9vbmNlOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChjdXJyZW50bHlfdGVzdGluZyA9PSByZWNvdmVyX2Jsb2NrKSB7CisJCQkJdHJ5ID0gYmxvY2tzX2F0X29uY2U7CisJCQkJcmVjb3Zlcl9ibG9jayA9IH4wVTsKKwkJCX0KKwkJCWZvciAoaT0wOyBpIDwgZ290OyBpKyspIHsKKwkJCQlpZiAobWVtY21wKHJlYWRfYnVmZmVyICsgaSAqIGJsb2NrX3NpemUsCisJCQkJCSAgIGJ1ZmZlciArIGkgKiBibG9ja19zaXplLAorCQkJCQkgICBibG9ja19zaXplKSkKKwkJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nK2ksIENPUlJVUFRJT05fRVJST1IpOworCQkJfQorCQkJaWYgKHZfZmxhZyA+IDEpCisJCQkJcHJpbnRfc3RhdHVzKCk7CisJCX0KKworCQludW1fYmxvY2tzID0gMDsKKwkJYWxhcm0gKDApOworCQlpZiAoc19mbGFnIHwgdl9mbGFnKQorCQkJZnB1dHMoXyhkb25lX3N0cmluZyksIHN0ZGVycik7CisJCWZsdXNoX2J1ZnMoKTsKKwl9CisJdW5jYXB0dXJlX3Rlcm1pbmF0ZSgpOworCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gYmJfY291bnQ7Cit9CisKK3N0cnVjdCBzYXZlZF9ibGtfcmVjb3JkIHsKKwlibGtfdAlibG9jazsKKwlpbnQJbnVtOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0ZXN0X25kIChpbnQgZGV2LCBibGtfdCBsYXN0X2Jsb2NrLAorCQkJICAgICBpbnQgYmxvY2tfc2l6ZSwgYmxrX3QgZmlyc3RfYmxvY2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBibG9ja3NfYXRfb25jZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpibGtidWYsICpzYXZlX3B0ciwgKnRlc3RfcHRyLCAqcmVhZF9wdHI7CisJdW5zaWduZWQgY2hhciAqdGVzdF9iYXNlLCAqc2F2ZV9iYXNlLCAqcmVhZF9iYXNlOworCWludCB0cnksIGk7CisJY29uc3QgdW5zaWduZWQgaW50IHBhdHRlcm5zW10gPSB7IH4wIH07CisJY29uc3QgdW5zaWduZWQgaW50ICpwYXR0ZXJuOworCWludCBucl9wYXR0ZXJuLCBwYXRfaWR4OworCWludCBnb3QsIHVzZWQyLCB3cml0dGVuOworCWJsa190IHNhdmVfY3VycmVudGx5X3Rlc3Rpbmc7CisJc3RydWN0IHNhdmVkX2Jsa19yZWNvcmQgKnRlc3RfcmVjb3JkOworCS8qIFRoaXMgaXMgc3RhdGljIHRvIHByZXZlbnQgYmVpbmcgY2xvYmJlcmVkIGJ5IHRoZSBsb25nam1wICovCisJc3RhdGljIGludCBudW1fc2F2ZWQ7CisJam1wX2J1ZiB0ZXJtaW5hdGVfZW52OworCWVycmNvZGVfdCBlcnJjb2RlOworCXVuc2lnbmVkIGxvbmcgYnVmX3VzZWQ7CisJc3RhdGljIHVuc2lnbmVkIGludCBiYl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHkgPSBibG9ja3NfYXRfb25jZTsKKwlibGtfdCByZWNvdmVyX2Jsb2NrID0gfjBVOworCisJYmJfY291bnQgPSAwOworCWVycmNvZGUgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYl9saXN0LCZiYl9pdGVyKTsKKwlpZiAoZXJyY29kZSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJyY29kZSwgIiVzIiwKKwkJCV8oIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iKSk7CisJCWV4aXQgKDEpOworCX0KKwlkbyB7CisJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlIChiYl9pdGVyLCAmbmV4dF9iYWQpOworCX0gd2hpbGUgKG5leHRfYmFkICYmIG5leHRfYmFkIDwgZmlyc3RfYmxvY2spOworCisJYmxrYnVmID0gYWxsb2NhdGVfYnVmZmVyKDMgKiBibG9ja3NfYXRfb25jZSAqIGJsb2NrX3NpemUpOworCXRlc3RfcmVjb3JkID0gbWFsbG9jKGJsb2Nrc19hdF9vbmNlICogc2l6ZW9mKHN0cnVjdCBzYXZlZF9ibGtfcmVjb3JkKSk7CisJaWYgKCFibGtidWYgfHwgIXRlc3RfcmVjb3JkKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFTk9NRU0sICIlcyIsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiKSk7CisJCWV4aXQgKDEpOworCX0KKworCXNhdmVfYmFzZSA9IGJsa2J1ZjsKKwl0ZXN0X2Jhc2UgPSBibGtidWYgKyAoYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplKTsKKwlyZWFkX2Jhc2UgPSBibGtidWYgKyAoMiAqIGJsb2Nrc19hdF9vbmNlICogYmxvY2tfc2l6ZSk7CisKKwludW1fc2F2ZWQgPSAwOworCisJZmx1c2hfYnVmcygpOworCWlmICh2X2ZsYWcpIHsKKwkgICAgZnB1dHMoXygiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIiksIHN0ZGVycik7CisJICAgIGZwcmludGYgKHN0ZGVyciwgXygiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iKSwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZmlyc3RfYmxvY2ssCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGxhc3RfYmxvY2sgLSAxKTsKKwl9CisJaWYgKHNfZmxhZyB8fCB2X2ZsYWcgPiAxKSB7CisJCWZwdXRzKF8oIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIiksIHN0ZGVycik7CisJfQorCWlmIChzZXRqbXAodGVybWluYXRlX2VudikpIHsKKwkJLyoKKwkJICogQWJub3JtYWwgdGVybWluYXRpb24gYnkgYSBzaWduYWwgaXMgaGFuZGxlZCBoZXJlLgorCQkgKi8KKwkJc2lnbmFsIChTSUdBTFJNLCBTSUdfSUdOKTsKKwkJZnB1dHMoXygiXG5JbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIiksIHN0ZGVycik7CisKKwkJc2F2ZV9wdHIgPSBzYXZlX2Jhc2U7CisJCWZvciAoaT0wOyBpIDwgbnVtX3NhdmVkOyBpKyspIHsKKwkJCWRvX3dyaXRlKGRldiwgc2F2ZV9wdHIsIHRlc3RfcmVjb3JkW2ldLm51bSwKKwkJCQkgYmxvY2tfc2l6ZSwgdGVzdF9yZWNvcmRbaV0uYmxvY2spOworCQkJc2F2ZV9wdHIgKz0gdGVzdF9yZWNvcmRbaV0ubnVtICogYmxvY2tfc2l6ZTsKKwkJfQorCQlmZmx1c2ggKG91dCk7CisJCWV4aXQoMSk7CisJfQorCisJLyogc2V0IHVwIGFiZW5kIGhhbmRsZXIgKi8KKwljYXB0dXJlX3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfZW52KTsKKworCWlmICh0X2ZsYWcpIHsKKwkJcGF0dGVybiA9IHRfcGF0dHM7CisJCW5yX3BhdHRlcm4gPSB0X2ZsYWc7CisJfSBlbHNlIHsKKwkJcGF0dGVybiA9IHBhdHRlcm5zOworCQlucl9wYXR0ZXJuID0gc2l6ZW9mKHBhdHRlcm5zKSAvIHNpemVvZihwYXR0ZXJuc1swXSk7CisJfQorCWZvciAocGF0X2lkeCA9IDA7IHBhdF9pZHggPCBucl9wYXR0ZXJuOyBwYXRfaWR4KyspIHsKKwkJcGF0dGVybl9maWxsKHRlc3RfYmFzZSwgcGF0dGVybltwYXRfaWR4XSwKKwkJCSAgICAgYmxvY2tzX2F0X29uY2UgKiBibG9ja19zaXplKTsKKworCQlidWZfdXNlZCA9IDA7CisJCWJiX2NvdW50ID0gMDsKKwkJc2F2ZV9wdHIgPSBzYXZlX2Jhc2U7CisJCXRlc3RfcHRyID0gdGVzdF9iYXNlOworCQljdXJyZW50bHlfdGVzdGluZyA9IGZpcnN0X2Jsb2NrOworCQludW1fYmxvY2tzID0gbGFzdF9ibG9jayAtIDE7CisJCWlmIChzX2ZsYWcgJiYgdl9mbGFnIDw9IDEpCisJCQlhbGFybV9pbnRyKFNJR0FMUk0pOworCisJCXdoaWxlIChjdXJyZW50bHlfdGVzdGluZyA8IGxhc3RfYmxvY2spIHsKKwkJCWlmIChtYXhfYmIgJiYgYmJfY291bnQgPj0gbWF4X2JiKSB7CisJCQkJaWYgKHNfZmxhZyB8fCB2X2ZsYWcpIHsKKwkJCQkJZnB1dHMoXygiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIiksIHN0ZGVycik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJZ290ID0gdHJ5ID0gZ3JhbnVsYXJpdHkgLSBidWZfdXNlZDsKKwkJCWlmIChuZXh0X2JhZCkgeworCQkJCWlmIChjdXJyZW50bHlfdGVzdGluZyA9PSBuZXh0X2JhZCkgeworCQkJCQkvKiBmcHJpbnRmIChvdXQsICIlbHVcbiIsIG5leHRiYWQpOyAqLworCQkJCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZSAoYmJfaXRlciwgJm5leHRfYmFkKTsKKwkJCQkJY3VycmVudGx5X3Rlc3RpbmcrKzsKKwkJCQkJZ290byBjaGVja19mb3JfbW9yZTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoY3VycmVudGx5X3Rlc3RpbmcgKyB0cnkgPiBuZXh0X2JhZCkKKwkJCQkJdHJ5ID0gbmV4dF9iYWQgLSBjdXJyZW50bHlfdGVzdGluZzsKKwkJCX0KKwkJCWlmIChjdXJyZW50bHlfdGVzdGluZyArIHRyeSA+IGxhc3RfYmxvY2spCisJCQkJdHJ5ID0gbGFzdF9ibG9jayAtIGN1cnJlbnRseV90ZXN0aW5nOworCQkJZ290ID0gZG9fcmVhZCAoZGV2LCBzYXZlX3B0ciwgdHJ5LCBibG9ja19zaXplLAorCQkJCSAgICAgICBjdXJyZW50bHlfdGVzdGluZyk7CisJCQlpZiAoZ290ID09IDApIHsKKwkJCQlpZiAocmVjb3Zlcl9ibG9jayA9PSB+MFUpCisJCQkJCXJlY292ZXJfYmxvY2sgPSBjdXJyZW50bHlfdGVzdGluZyArCisJCQkJCQlibG9ja3NfYXRfb25jZTsKKwkJCQlpZiAoZ3JhbnVsYXJpdHkgIT0gMSkgeworCQkJCQlncmFudWxhcml0eSA9IDE7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvKiBGaXJzdCBibG9jayBtdXN0IGhhdmUgYmVlbiBiYWQuICovCisJCQkJYmJfY291bnQgKz0gYmJfb3V0cHV0KGN1cnJlbnRseV90ZXN0aW5nKyssIFJFQURfRVJST1IpOworCQkJCWdvdG8gY2hlY2tfZm9yX21vcmU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBOb3RlIHRoZSBmYWN0IHRoYXQgd2UndmUgc2F2ZWQgdGhpcyBtdWNoIGRhdGEKKwkJCSAqICpiZWZvcmUqIHdlIG92ZXJ3cml0ZSBpdCB3aXRoIHRlc3QgZGF0YQorCQkJICovCisJCQl0ZXN0X3JlY29yZFtudW1fc2F2ZWRdLmJsb2NrID0gY3VycmVudGx5X3Rlc3Rpbmc7CisJCQl0ZXN0X3JlY29yZFtudW1fc2F2ZWRdLm51bSA9IGdvdDsKKwkJCW51bV9zYXZlZCsrOworCisJCQkvKiBXcml0ZSB0aGUgdGVzdCBkYXRhICovCisJCQl3cml0dGVuID0gZG9fd3JpdGUgKGRldiwgdGVzdF9wdHIsIGdvdCwgYmxvY2tfc2l6ZSwKKwkJCQkJICAgIGN1cnJlbnRseV90ZXN0aW5nKTsKKwkJCWlmICh3cml0dGVuICE9IGdvdCkKKwkJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCQkgXygiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IiksCisJCQkJCSAodW5zaWduZWQgbG9uZykgY3VycmVudGx5X3Rlc3RpbmcgKworCQkJCQkgd3JpdHRlbik7CisKKwkJCWJ1Zl91c2VkICs9IGdvdDsKKwkJCXNhdmVfcHRyICs9IGdvdCAqIGJsb2NrX3NpemU7CisJCQl0ZXN0X3B0ciArPSBnb3QgKiBibG9ja19zaXplOworCQkJY3VycmVudGx5X3Rlc3RpbmcgKz0gZ290OworCQkJaWYgKGdvdCAhPSB0cnkpIHsKKwkJCQl0cnkgPSAxOworCQkJCWlmIChyZWNvdmVyX2Jsb2NrID09IH4wVSkKKwkJCQkJcmVjb3Zlcl9ibG9jayA9IGN1cnJlbnRseV90ZXN0aW5nIC0KKwkJCQkJCWdvdCArIGJsb2Nrc19hdF9vbmNlOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCWNoZWNrX2Zvcl9tb3JlOgorCQkJLyoKKwkJCSAqIElmIHRoZXJlJ3Mgcm9vbSBmb3IgbW9yZSBibG9ja3MgdG8gYmUgdGVzdGVkIHRoaXMKKwkJCSAqIGFyb3VuZCwgYW5kIHdlJ3JlIG5vdCBkb25lIHlldCB0ZXN0aW5nIHRoZSBkaXNrLCBnbworCQkJICogYmFjayBhbmQgZ2V0IHNvbWUgbW9yZSBibG9ja3MuCisJCQkgKi8KKwkJCWlmICgoYnVmX3VzZWQgIT0gZ3JhbnVsYXJpdHkpICYmCisJCQkgICAgKGN1cnJlbnRseV90ZXN0aW5nIDwgbGFzdF9ibG9jaykpCisJCQkJY29udGludWU7CisKKwkJCWlmIChjdXJyZW50bHlfdGVzdGluZyA+PSByZWNvdmVyX2Jsb2NrKSB7CisJCQkJZ3JhbnVsYXJpdHkgPSBibG9ja3NfYXRfb25jZTsKKwkJCQlyZWNvdmVyX2Jsb2NrID0gfjA7CisJCQl9CisKKwkJCWZsdXNoX2J1ZnMoKTsKKwkJCXNhdmVfY3VycmVudGx5X3Rlc3RpbmcgPSBjdXJyZW50bHlfdGVzdGluZzsKKworCQkJLyoKKwkJCSAqIGZvciBlYWNoIGNvbnRpZ3VvdXMgYmxvY2sgdGhhdCB3ZSByZWFkIGludG8gdGhlCisJCQkgKiBidWZmZXIgKGFuZCB3cm90ZSB0ZXN0IGRhdGEgaW50byBhZnRlcndhcmRzKSwgcmVhZAorCQkJICogaXQgYmFjayAobG9vcGluZyBpZiBuZWNlc3NhcnksIHRvIGdldCBwYXN0IG5ld2x5CisJCQkgKiBkaXNjb3ZlcmVkIHVucmVhZGFibGUgYmxvY2tzLCBvZiB3aGljaCB0aGVyZSBzaG91bGQKKwkJCSAqIGJlIG5vbmUsIGJ1dCB3aXRoIGEgaGFyZCBkcml2ZSB3aGljaCBpcyB1bnJlbGlhYmxlLAorCQkJICogaXQgaGFzIGhhcHBlbmVkKSwgYW5kIGNvbXBhcmUgd2l0aCB0aGUgdGVzdCBkYXRhCisJCQkgKiB0aGF0IHdhcyB3cml0dGVuOyBvdXRwdXQgdG8gdGhlIGJhZCBibG9jayBsaXN0IGlmCisJCQkgKiBpdCBkb2Vzbid0IG1hdGNoLgorCQkJICovCisJCQl1c2VkMiA9IDA7CisJCQlzYXZlX3B0ciA9IHNhdmVfYmFzZTsKKwkJCXRlc3RfcHRyID0gdGVzdF9iYXNlOworCQkJcmVhZF9wdHIgPSByZWFkX2Jhc2U7CisJCQl0cnkgPSAwOworCisJCQl3aGlsZSAoMSkgeworCQkJCWlmICh0cnkgPT0gMCkgeworCQkJCQlpZiAodXNlZDIgPj0gbnVtX3NhdmVkKQorCQkJCQkJYnJlYWs7CisJCQkJCWN1cnJlbnRseV90ZXN0aW5nID0gdGVzdF9yZWNvcmRbdXNlZDJdLmJsb2NrOworCQkJCQl0cnkgPSB0ZXN0X3JlY29yZFt1c2VkMl0ubnVtOworCQkJCQl1c2VkMisrOworCQkJCX0KKworCQkJCWdvdCA9IGRvX3JlYWQgKGRldiwgcmVhZF9wdHIsIHRyeSwKKwkJCQkJICAgICAgIGJsb2NrX3NpemUsIGN1cnJlbnRseV90ZXN0aW5nKTsKKworCQkJCS8qIHRlc3QgdGhlIGNvbXBhcmlzb24gYmV0d2VlbiBhbGwgdGhlCisJCQkJICAgYmxvY2tzIHN1Y2Nlc3NmdWxseSByZWFkICAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBnb3Q7ICsraSkKKwkJCQkJaWYgKG1lbWNtcCAodGVzdF9wdHIraSpibG9ja19zaXplLAorCQkJCQkJICAgIHJlYWRfcHRyK2kqYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkpCisJCQkJCQliYl9jb3VudCArPSBiYl9vdXRwdXQoY3VycmVudGx5X3Rlc3RpbmcgKyBpLCBDT1JSVVBUSU9OX0VSUk9SKTsKKwkJCQlpZiAoZ290IDwgdHJ5KSB7CisJCQkJCWJiX2NvdW50ICs9IGJiX291dHB1dChjdXJyZW50bHlfdGVzdGluZyArIGdvdCwgUkVBRF9FUlJPUik7CisJCQkJCWdvdCsrOworCQkJCX0KKworCQkJCS8qIHdyaXRlIGJhY2sgb3JpZ2luYWwgZGF0YSAqLworCQkJCWRvX3dyaXRlIChkZXYsIHNhdmVfcHRyLCBnb3QsCisJCQkJCSAgYmxvY2tfc2l6ZSwgY3VycmVudGx5X3Rlc3RpbmcpOworCQkJCXNhdmVfcHRyICs9IGdvdCAqIGJsb2NrX3NpemU7CisKKwkJCQljdXJyZW50bHlfdGVzdGluZyArPSBnb3Q7CisJCQkJdGVzdF9wdHIgKz0gZ290ICogYmxvY2tfc2l6ZTsKKwkJCQlyZWFkX3B0ciArPSBnb3QgKiBibG9ja19zaXplOworCQkJCXRyeSAtPSBnb3Q7CisJCQl9CisKKwkJCS8qIGVtcHR5IHRoZSBidWZmZXIgc28gaXQgY2FuIGJlIHJldXNlZCAqLworCQkJbnVtX3NhdmVkID0gMDsKKwkJCWJ1Zl91c2VkID0gMDsKKwkJCXNhdmVfcHRyID0gc2F2ZV9iYXNlOworCQkJdGVzdF9wdHIgPSB0ZXN0X2Jhc2U7CisJCQljdXJyZW50bHlfdGVzdGluZyA9IHNhdmVfY3VycmVudGx5X3Rlc3Rpbmc7CisJCX0KKwkJbnVtX2Jsb2NrcyA9IDA7CisJCWFsYXJtKDApOworCQlpZiAoc19mbGFnIHx8IHZfZmxhZyA+IDEpCisJCQlmcHV0cyhfKGRvbmVfc3RyaW5nKSwgc3RkZXJyKTsKKworCQlmbHVzaF9idWZzKCk7CisJfQorCXVuY2FwdHVyZV90ZXJtaW5hdGUoKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlmcmVlKGJsa2J1Zik7CisJZnJlZSh0ZXN0X3JlY29yZCk7CisKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9lbmQoYmJfaXRlcik7CisKKwlyZXR1cm4gYmJfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX21vdW50KGNoYXIgKmRldmljZV9uYW1lKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQltb3VudF9mbGFnczsKKworCXJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGRldmljZV9uYW1lLCAmbW91bnRfZmxhZ3MpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX2NoZWNrX2lmX21vdW50IiwgcmV0dmFsLAorCQkJXygid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIpLAorCQkJZGV2aWNlX25hbWUpOworCQlyZXR1cm47CisJfQorCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgbW91bnRlZDsgIiksIGRldmljZV9uYW1lKTsKKwkJaWYgKGZvcmNlKSB7CisJCQlmcHV0cyhfKCJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gICIKKwkJCQkiSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm47CisJCX0KKwlhYm9ydF9iYWRibG9ja3M6CisJCWZwdXRzKF8oIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIpLCBzdGRlcnIpOworCQlleGl0KDEpOworCX0KKworCWlmICgobW91bnRfZmxhZ3MgJiBFWFQyX01GX0JVU1kpICYmICFleGNsdXNpdmVfb2spIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIpLAorCQkJZGV2aWNlX25hbWUpOworCQlpZiAoZm9yY2UpCisJCQlmcHV0cyhfKCJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIpLCBzdGRlcnIpOworCQllbHNlCisJCQlnb3RvIGFib3J0X2JhZGJsb2NrczsKKwl9CisKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcsIHByaW50aW5nCisgKiBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGZhaWxzLCBhbmQgcmV0dXJuaW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiBlcnIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFyc2VfdWludChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmRlc2NyKQoreworCWNoYXIJCSp0bXA7CisJdW5zaWduZWQgbG9uZwlyZXQ7CisKKwllcnJubyA9IDA7CisJcmV0ID0gc3RydG91bChzdHIsICZ0bXAsIDApOworCWlmICgqdG1wIHx8IGVycm5vIHx8IChyZXQgPiBVSU5UX01BWCkgfHwKKwkgICAgKHJldCA9PSBVTE9OR19NQVggJiYgZXJybm8gPT0gRVJBTkdFKSkgeworCQljb21fZXJyIChwcm9ncmFtX25hbWUsIDAsIF8oImludmFsaWQgJXMgLSAlcyIpLCBkZXNjciwgc3RyKTsKKwkJZXhpdCAoMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWludCBjOworCWNoYXIgKiBkZXZpY2VfbmFtZTsKKwljaGFyICogaG9zdF9kZXZpY2VfbmFtZSA9IE5VTEw7CisJY2hhciAqIGlucHV0X2ZpbGUgPSBOVUxMOworCWNoYXIgKiBvdXRwdXRfZmlsZSA9IE5VTEw7CisJRklMRSAqIGluID0gTlVMTDsKKwlpbnQgYmxvY2tfc2l6ZSA9IDEwMjQ7CisJdW5zaWduZWQgaW50IGJsb2Nrc19hdF9vbmNlID0gNjQ7CisJYmxrNjRfdCBsYXN0X2Jsb2NrLCBmaXJzdF9ibG9jazsKKwlpbnQgbnVtX3Bhc3NlcyA9IDA7CisJaW50IHBhc3Nlc19jbGVhbiA9IDA7CisJaW50IGRldjsKKwllcnJjb2RlX3QgZXJyY29kZTsKKwl1bnNpZ25lZCBpbnQgcGF0dGVybjsKKwl1bnNpZ25lZCBpbnQgKCp0ZXN0X2Z1bmMpKGludCwgYmxrX3QsCisJCQkJICBpbnQsIGJsa190LAorCQkJCSAgdW5zaWduZWQgaW50KTsKKwlpbnQgb3Blbl9mbGFnOworCWxvbmcgc3lzdmFsOworCWJsazY0X3QgaW5ibGs7CisKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJc3JhbmRvbSgodW5zaWduZWQgaW50KXRpbWUoTlVMTCkpOyAgLyogc2ltcGxlIHJhbmRvbW5lc3MgaXMgZW5vdWdoICovCisJdGVzdF9mdW5jID0gdGVzdF9ybzsKKworCS8qIERldGVybWluZSB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSBpZiBwb3NzaWJsZSAqLworI2lmZGVmIEhBVkVfU1lTQ09ORgorI2lmICghZGVmaW5lZChfU0NfUEFHRVNJWkUpICYmIGRlZmluZWQoX1NDX1BBR0VfU0laRSkpCisjZGVmaW5lIF9TQ19QQUdFU0laRSBfU0NfUEFHRV9TSVpFCisjZW5kaWYKKyNpZmRlZiBfU0NfUEFHRVNJWkUKKwlzeXN2YWwgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisJaWYgKHN5c3ZhbCA+IDApCisJCXN5c19wYWdlX3NpemUgPSBzeXN2YWw7CisjZW5kaWYgLyogX1NDX1BBR0VTSVpFICovCisjZW5kaWYgLyogSEFWRV9TWVNDT05GICovCisKKwlpZiAoYXJnYyAmJiAqYXJndikKKwkJcHJvZ3JhbV9uYW1lID0gKmFyZ3Y7CisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYjpkOmU6Zmk6bzpzdnduYzpwOmg6dDpCWCIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2InOgorCQkJYmxvY2tfc2l6ZSA9IHBhcnNlX3VpbnQob3B0YXJnLCAiYmxvY2sgc2l6ZSIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJZm9yY2UrKzsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlucHV0X2ZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlvdXRwdXRfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXNfZmxhZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2X2ZsYWcrKzsKKwkJCWJyZWFrOworCQljYXNlICd3JzoKKwkJCWlmICh3X2ZsYWcpCisJCQkJZXhjbHVzaXZlX3VzYWdlKCk7CisJCQl0ZXN0X2Z1bmMgPSB0ZXN0X3J3OworCQkJd19mbGFnID0gMTsKKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWlmICh3X2ZsYWcpCisJCQkJZXhjbHVzaXZlX3VzYWdlKCk7CisJCQl0ZXN0X2Z1bmMgPSB0ZXN0X25kOworCQkJd19mbGFnID0gMjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCWJsb2Nrc19hdF9vbmNlID0gcGFyc2VfdWludChvcHRhcmcsICJibG9ja3MgYXQgb25jZSIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJbWF4X2JiID0gcGFyc2VfdWludChvcHRhcmcsICJtYXggYmFkIGJsb2NrIGNvdW50Iik7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlkX2ZsYWcgPSBwYXJzZV91aW50KG9wdGFyZywgInJlYWQgZGVsYXkgZmFjdG9yIik7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQludW1fcGFzc2VzID0gcGFyc2VfdWludChvcHRhcmcsCisJCQkJCQkibnVtYmVyIG9mIGNsZWFuIHBhc3NlcyIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaG9zdF9kZXZpY2VfbmFtZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmICh0X2ZsYWcgKyAxID4gdF9tYXgpIHsKKwkJCQl1bnNpZ25lZCBpbnQgKnRfcGF0dHNfbmV3OworCisJCQkJdF9wYXR0c19uZXcgPSByZWFsbG9jKHRfcGF0dHMsIHNpemVvZihpbnQpICoKKwkJCQkJCSAgICAgICh0X21heCArIFRfSU5DKSk7CisJCQkJaWYgKCF0X3BhdHRzX25ldykgeworCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLAorCQkJCQkJXygiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCQkJCQkgICJ0ZXN0X3BhdHRlcm4gLSAlcyIpLAorCQkJCQkJb3B0YXJnKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJdF9wYXR0cyA9IHRfcGF0dHNfbmV3OworCQkJCXRfbWF4ICs9IFRfSU5DOworCQkJfQorCQkJaWYgKCFzdHJjbXAob3B0YXJnLCAiciIpIHx8ICFzdHJjbXAob3B0YXJnLCJyYW5kb20iKSkgeworCQkJCXRfcGF0dHNbdF9mbGFnKytdID0gfjA7CisJCQl9IGVsc2UgeworCQkJCXBhdHRlcm4gPSBwYXJzZV91aW50KG9wdGFyZywgInRlc3QgcGF0dGVybiIpOworCQkJCWlmIChwYXR0ZXJuID09ICh1bnNpZ25lZCBpbnQpIH4wKQorCQkJCQlwYXR0ZXJuID0gMHhmZmZmOworCQkJCXRfcGF0dHNbdF9mbGFnKytdID0gcGF0dGVybjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdCJzoKKwkJCXVzZV9idWZmZXJlZF9pbyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlleGNsdXNpdmVfb2srKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsKKwkJfQorCX0KKwlpZiAoIXdfZmxhZykgeworCQlpZiAodF9mbGFnID4gMSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSAiCisJCQkJICAic3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAodF9wYXR0cyAmJiAodF9wYXR0c1swXSA9PSAodW5zaWduZWQgaW50KSB+MCkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgIgorCQkJCSAgImluIHJlYWQtb25seSBtb2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kID4gYXJnYyAtIDEpCisJCXVzYWdlKCk7CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAob3B0aW5kID4gYXJnYyAtIDEpIHsKKwkJZXJyY29kZSA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKGRldmljZV9uYW1lLAorCQkJCQkJIGJsb2NrX3NpemUsCisJCQkJCQkgJmxhc3RfYmxvY2spOworCQlpZiAoZXJyY29kZSA9PSBFWFQyX0VUX1VOSU1QTEVNRU5URUQpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91ICIKKwkJCQkgICJtdXN0IHNwZWNpZnlcbnRoZSBzaXplIG1hbnVhbGx5XG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChlcnJjb2RlKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJyY29kZSwgIiVzIiwKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCWVycm5vID0gMDsKKwkJbGFzdF9ibG9jayA9IHBhcnNlX3VpbnQoYXJndltvcHRpbmRdLCBfKCJsYXN0IGJsb2NrIikpOworCQlsYXN0X2Jsb2NrKys7CisJCW9wdGluZCsrOworCX0KKwlpZiAob3B0aW5kIDw9IGFyZ2MtMSkgeworCQllcnJubyA9IDA7CisJCWZpcnN0X2Jsb2NrID0gcGFyc2VfdWludChhcmd2W29wdGluZF0sIF8oImZpcnN0IGJsb2NrIikpOworCX0gZWxzZSBmaXJzdF9ibG9jayA9IDA7CisJaWYgKGZpcnN0X2Jsb2NrID49IGxhc3RfYmxvY2spIHsKKwkgICAgY29tX2VyciAocHJvZ3JhbV9uYW1lLCAwLCBfKCJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIpLAorCQkgICAgIGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrKTsKKwkgICAgZXhpdCAoMSk7CisJfQorCS8qIGV4dDIgYmFkYmxvY2tzIGZpbGUgY2FuJ3QgaGFuZGxlIGxhcmdlIHZhbHVlcyAqLworCWlmIChsYXN0X2Jsb2NrID4+IDMyKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFT1ZFUkZMT1csCisJCQlfKCJpbnZhbGlkIGVuZCBibG9jayAoJWxsdSk6IG11c3QgYmUgMzItYml0IHZhbHVlIiksCisJCQlsYXN0X2Jsb2NrKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKHdfZmxhZykKKwkJY2hlY2tfbW91bnQoZGV2aWNlX25hbWUpOworCisJZ2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCAwKTsKKwlvcGVuX2ZsYWcgPSBPX0xBUkdFRklMRSB8ICh3X2ZsYWcgPyBPX1JEV1IgOiBPX1JET05MWSk7CisJZGV2ID0gb3BlbiAoZGV2aWNlX25hbWUsIG9wZW5fZmxhZyk7CisJaWYgKGRldiA9PSAtMSkgeworCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLCBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJIGRldmljZV9uYW1lKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmIChob3N0X2RldmljZV9uYW1lKSB7CisJCWhvc3RfZGV2ID0gb3BlbiAoaG9zdF9kZXZpY2VfbmFtZSwgb3Blbl9mbGFnKTsKKwkJaWYgKGhvc3RfZGV2ID09IC0xKSB7CisJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCSBob3N0X2RldmljZV9uYW1lKTsKKwkJCWV4aXQgKDEpOworCQl9CisJfSBlbHNlCisJCWhvc3RfZGV2ID0gZGV2OworCWlmIChpbnB1dF9maWxlKSB7CisJCWlmIChzdHJjbXAgKGlucHV0X2ZpbGUsICItIikgPT0gMCkKKwkJCWluID0gc3RkaW47CisJCWVsc2UgeworCQkJaW4gPSBmb3BlbiAoaW5wdXRfZmlsZSwgInIiKTsKKwkJCWlmIChpbiA9PSBOVUxMKQorCQkJeworCQkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCQkgaW5wdXRfZmlsZSk7CisJCQkJZXhpdCAoMSk7CisJCQl9CisJCX0KKwl9CisJaWYgKG91dHB1dF9maWxlICYmIHN0cmNtcCAob3V0cHV0X2ZpbGUsICItIikgIT0gMCkKKwl7CisJCW91dCA9IGZvcGVuIChvdXRwdXRfZmlsZSwgInciKTsKKwkJaWYgKG91dCA9PSBOVUxMKQorCQl7CisJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJCSBvdXRwdXRfZmlsZSk7CisJCQlleGl0ICgxKTsKKwkJfQorCX0KKwllbHNlCisJCW91dCA9IHN0ZG91dDsKKworCWVycmNvZGUgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfY3JlYXRlKCZiYl9saXN0LDApOworCWlmIChlcnJjb2RlKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJjb2RlLCAiJXMiLAorCQkJXygid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIpKTsKKwkJZXhpdCAoMSk7CisJfQorCisJaWYgKGluKSB7CisJCWZvcig7OykgeworCQkJc3dpdGNoIChmc2NhbmYoaW4sICIlbGx1XG4iLCAmaW5ibGspKSB7CisJCQkJY2FzZSAwOgorCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkJCV8oImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IikpOworCQkJCQlleGl0ICgxKTsKKwkJCQljYXNlIEVPRjoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaWYgKGluYmxrID4+IDMyKSB7CisJCQkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwKKwkJCQkJCQlFT1ZFUkZMT1csICIlcyIsCisJCQkJCQlfKCJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5ICIKKwkJCQkJCSAgImJhZCBibG9jayBsaXN0IikpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQluZXh0X2JhZCA9IGluYmxrOworCQkJCQllcnJjb2RlID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2FkZChiYl9saXN0LG5leHRfYmFkKTsKKwkJCQkJaWYgKGVycmNvZGUpIHsKKwkJCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJjb2RlLAorCQkJCQkJCSIlcyIsCisJCQkJCQlfKCJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5ICIKKwkJCQkJCSAgImJhZCBibG9jayBsaXN0IikpOworCQkJCQkJZXhpdCAoMSk7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpbiAhPSBzdGRpbikKKwkJCWZjbG9zZSAoaW4pOworCX0KKworCWRvIHsKKwkJdW5zaWduZWQgaW50IGJiX2NvdW50OworCisJCWJiX2NvdW50ID0gdGVzdF9mdW5jKGRldiwgbGFzdF9ibG9jaywgYmxvY2tfc2l6ZSwKKwkJCQkgICAgIGZpcnN0X2Jsb2NrLCBibG9ja3NfYXRfb25jZSk7CisJCWlmIChiYl9jb3VudCkKKwkJCXBhc3Nlc19jbGVhbiA9IDA7CisJCWVsc2UKKwkJCSsrcGFzc2VzX2NsZWFuOworCisJCWlmICh2X2ZsYWcpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIpLAorCQkJCWJiX2NvdW50LCBudW1fcmVhZF9lcnJvcnMsIG51bV93cml0ZV9lcnJvcnMsIG51bV9jb3JydXB0aW9uX2Vycm9ycyk7CisKKwl9IHdoaWxlIChwYXNzZXNfY2xlYW4gPCBudW1fcGFzc2VzKTsKKworCWNsb3NlIChkZXYpOworCWlmIChvdXQgIT0gc3Rkb3V0KQorCQlmY2xvc2UgKG91dCk7CisJZnJlZSh0X3BhdHRzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2Jhc2VfZGV2aWNlLmMgYi9lMmZzcHJvZ3MvbWlzYy9iYXNlX2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDJiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9iYXNlX2RldmljZS5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogYmFzZV9kZXZpY2UuYworICoKKyAqIFJldHVybiB0aGUgImJhc2UgZGV2aWNlIiBnaXZlbiBhIHBhcnRpY3VsYXIgZGV2aWNlOyB0aGlzIGlzIHVzZWQgdG8KKyAqIGFzc3VyZSB0aGF0IHdlIG9ubHkgZnNjayBvbmUgcGFydGl0aW9uIG9uIGEgcGFydGljdWxhciBkcml2ZSBhdCBhbnkKKyAqIG9uZSB0aW1lLiAgT3RoZXJ3aXNlLCB0aGUgZGlzayBoZWFkcyB3aWxsIGJlIHNlZWtpbmcgYWxsIG92ZXIgdGhlCisgKiBwbGFjZS4gIElmIHRoZSBiYXNlIGRldmljZSBjYW4gbm90IGJlIGRldGVybWluZWQsIHJldHVybiBOVUxMLgorICoKKyAqIFRoZSBiYXNlX2RldmljZSgpIGZ1bmN0aW9uIHJldHVybnMgYW4gYWxsb2NhdGVkIHN0cmluZyB3aGljaCBtdXN0CisgKiBiZSBmcmVlZC4KKyAqCisgKiBXcml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28sIDx0eXRzb0BtaXQuZWR1PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJmc2NrLmgiCisKKy8qCisgKiBSZXF1aXJlZCBmb3IgdGhlIHViZXItc2lsbHkgZGV2ZnMgL2Rldi9pZGUvaG9zdDEvYnVzMi90YXJnZXQzL2x1bjMKKyAqIHBhdGhhbWVzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZGV2ZnNfaGllcltdID0geworCSJob3N0IiwgImJ1cyIsICJ0YXJnZXQiLCAibHVuIiwgMAorfTsKKworY2hhciAqYmFzZV9kZXZpY2UoY29uc3QgY2hhciAqZGV2aWNlKQoreworCWNoYXIgKnN0ciwgKmNwOworCWNvbnN0IGNoYXIgKipoaWVyLCAqZGlzazsKKwlpbnQgbGVuOworCisJc3RyID0gbWFsbG9jKHN0cmxlbihkZXZpY2UpKzEpOworCWlmICghc3RyKQorCQlyZXR1cm4gTlVMTDsKKwlzdHJjcHkoc3RyLCBkZXZpY2UpOworCWNwID0gc3RyOworCisJLyogU2tpcCBvdmVyIC9kZXYvOyBpZiBpdCdzIG5vdCBwcmVzZW50LCBnaXZlIHVwLiAqLworCWlmIChzdHJuY21wKGNwLCAiL2Rldi8iLCA1KSAhPSAwKQorCQlnb3RvIGVycm91dDsKKwljcCArPSA1OworCisJLyogU2tpcCBvdmVyIC9kZXYvZHNrLy4uLiAqLworCWlmIChzdHJuY21wKGNwLCAiZHNrLyIsIDQpID09IDApCisJCWNwICs9IDQ7CisKKwkvKgorCSAqIEZvciBtZCBkZXZpY2VzLCB3ZSB0cmVhdCB0aGVtIGFsbCBhcyBpZiB0aGV5IHdlcmUgYWxsCisJICogb24gb25lIGRpc2ssIHNpbmNlIHdlIGRvbid0IGtub3cgaG93IHRvIHBhcmFsbGVsaXplIHRoZW0uCisJICovCisJaWYgKGNwWzBdID09ICdtJyAmJiBjcFsxXSA9PSAnZCcpIHsKKwkJKihjcCsyKSA9IDA7CisJCXJldHVybiBzdHI7CisJfQorCisJLyogSGFuZGxlIERBQyA5NjAgZGV2aWNlcyAqLworCWlmIChzdHJuY21wKGNwLCAicmQvIiwgMykgPT0gMCkgeworCQljcCArPSAzOworCQlpZiAoY3BbMF0gIT0gJ2MnIHx8IGNwWzJdICE9ICdkJyB8fAorCQkgICAgIWlzZGlnaXQoY3BbMV0pIHx8ICFpc2RpZ2l0KGNwWzNdKSkKKwkJCWdvdG8gZXJyb3V0OworCQkqKGNwKzQpID0gMDsKKwkJcmV0dXJuIHN0cjsKKwl9CisKKwkvKiBOb3cgbGV0J3MgaGFuZGxlIC9kZXYvaGQqIGFuZCAvZGV2L3NkKiBkZXZpY2VzLi4uLiAqLworCWlmICgoY3BbMF0gPT0gJ2gnIHx8IGNwWzBdID09ICdzJykgJiYgKGNwWzFdID09ICdkJykpIHsKKwkJY3AgKz0gMjsKKwkJLyogSWYgdGhlcmUncyBhIHNpbmdsZSBudW1iZXIgYWZ0ZXIgL2Rldi9oZCwgc2tpcCBpdCAqLworCQlpZiAoaXNkaWdpdCgqY3ApKQorCQkJY3ArKzsKKwkJLyogV2hhdCBmb2xsb3dzIG11c3QgYmUgYW4gYWxwaGEgY2hhciwgb3IgZ2l2ZSB1cCAqLworCQlpZiAoIWlzYWxwaGEoKmNwKSkKKwkJCWdvdG8gZXJyb3V0OworCQkqKGNwICsgMSkgPSAwOworCQlyZXR1cm4gc3RyOworCX0KKworCS8qIE5vdyBsZXQncyBoYW5kbGUgZGV2ZnMgKHVnaCkgbmFtZXMgKi8KKwlsZW4gPSAwOworCWlmIChzdHJuY21wKGNwLCAiaWRlLyIsIDQpID09IDApCisJCWxlbiA9IDQ7CisJaWYgKHN0cm5jbXAoY3AsICJzY3NpLyIsIDUpID09IDApCisJCWxlbiA9IDU7CisJaWYgKGxlbikgeworCQljcCArPSBsZW47CisJCS8qCisJCSAqIE5vdyB3ZSBwcm9jZWVkIGRvd24gdGhlIGV4cGVjdGVkIGRldmZzIGhpZXJhcmNoeS4KKwkJICogaS5lLiwgLi4uL2hvc3QxL2J1czIvdGFyZ2V0My9sdW40Ly4uLgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIHRoZSBleHBlY3RlZCB0b2tlbiwgZm9sbG93ZWQgYnkKKwkJICogc29tZSBudW1iZXIgb2YgZGlnaXRzIGF0IGVhY2ggbGV2ZWwsIGFib3J0LgorCQkgKi8KKwkJZm9yIChoaWVyID0gZGV2ZnNfaGllcjsgKmhpZXI7IGhpZXIrKykgeworCQkJbGVuID0gc3RybGVuKCpoaWVyKTsKKwkJCWlmIChzdHJuY21wKGNwLCAqaGllciwgbGVuKSAhPSAwKQorCQkJCWdvdG8gZXJyb3V0OworCQkJY3AgKz0gbGVuOworCQkJd2hpbGUgKCpjcCAhPSAnLycgJiYgKmNwICE9IDApIHsKKwkJCQlpZiAoIWlzZGlnaXQoKmNwKSkKKwkJCQkJZ290byBlcnJvdXQ7CisJCQkJY3ArKzsKKwkJCX0KKwkJCWNwKys7CisJCX0KKwkJKihjcCAtIDEpID0gMDsKKwkJcmV0dXJuIHN0cjsKKwl9CisKKwkvKiBOb3cgaGFuZGxlIGRldmZzIC9kZXYvZGlzYyBvciAvZGV2L2Rpc2sgbmFtZXMgKi8KKwlkaXNrID0gMDsKKwlpZiAoc3RybmNtcChjcCwgImRpc2NzLyIsIDYpID09IDApCisJCWRpc2sgPSAiZGlzYyI7CisJZWxzZSBpZiAoc3RybmNtcChjcCwgImRpc2tzLyIsIDYpID09IDApCisJCWRpc2sgPSAiZGlzayI7CisJaWYgKGRpc2spIHsKKwkJY3AgKz0gNjsKKwkJaWYgKHN0cm5jbXAoY3AsIGRpc2ssIDQpICE9IDApCisJCQlnb3RvIGVycm91dDsKKwkJY3AgKz0gNDsKKwkJd2hpbGUgKCpjcCAhPSAnLycgJiYgKmNwICE9IDApIHsKKwkJCWlmICghaXNkaWdpdCgqY3ApKQorCQkJCWdvdG8gZXJyb3V0OworCQkJY3ArKzsKKwkJfQorCQkqY3AgPSAwOworCQlyZXR1cm4gc3RyOworCX0KKworZXJyb3V0OgorCWZyZWUoc3RyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmZGVmIERFQlVHCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisJY29uc3QgY2hhciAqYmFzZTsKKwljaGFyICBidWZbMjU2XSwgKmNwOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1x0Jyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWJhc2UgPSBiYXNlX2RldmljZShidWYpOworCQlwcmludGYoIiVzXHQlc1xuIiwgYnVmLCBiYXNlID8gYmFzZSA6ICJOT05FIik7CisJfQorCWV4aXQoMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2Jhc2VfZGV2aWNlLnRzdCBiL2UyZnNwcm9ncy9taXNjL2Jhc2VfZGV2aWNlLnRzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlhNThkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvYmFzZV9kZXZpY2UudHN0CkBAIC0wLDAgKzEsMTYgQEAKKy9kZXYvaGRhNwkvZGV2L2hkYQorL2Rldi9zZGExCS9kZXYvc2RhCisvZGV2L2hkYQkvZGV2L2hkYQorL2Rldi9zZGEJL2Rldi9zZGEKKy9kZXYvZHNrL2hkYTYJL2Rldi9kc2svaGRhCisvZGV2L2Rzay9zZGE1CS9kZXYvZHNrL3NkYQorL2Rldi9tZDQJL2Rldi9tZAorL2Rldi9tZC80CS9kZXYvbWQKKy9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zCS9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zCisvZGV2L2lkZS9ob3N0MC9idXMxL3RhcmdldDIvbHVuMy9wYXJ0MTAJL2Rldi9pZGUvaG9zdDAvYnVzMS90YXJnZXQyL2x1bjMKKy9kZXYvaWRlL2hvc3QwL2J1czEvdGFyZ2V0Mi9sdW4zLwkvZGV2L2lkZS9ob3N0MC9idXMxL3RhcmdldDIvbHVuMworL2Rldi9kaXNrcy9kaXNrMi9wYXJ0MgkvZGV2L2Rpc2tzL2Rpc2syCisvZGV2L2Rpc2tzL2Rpc2syLwkvZGV2L2Rpc2tzL2Rpc2syCisvZGV2L2Rpc2tzL2Rpc2syCS9kZXYvZGlza3MvZGlzazIKKy9kZXYvZGlzY3MvZGlzYzEvcGFydDEwCS9kZXYvZGlzY3MvZGlzYzEKKy9kZXYvZGlzY3MvZGlzYzEvCS9kZXYvZGlzY3MvZGlzYzEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2Jsa2lkLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9ibGtpZC44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDI2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9ibGtpZC44LmluCkBAIC0wLDAgKzEsMTY0IEBACisuXCIgQ29weXJpZ2h0IDIwMDAgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAdHVyYm9saW51eC5jb20pCisuXCIKKy5cIiBUaGlzIG1hbiBwYWdlIHdhcyBjcmVhdGVkIGZvciBibGtpZCBmcm9tIGUyZnNwcm9ncy0xLjI1LgorLlwiCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIKKy5cIiBCYXNlZCBvbiB1dWlkZ2VuLCBNb24gU2VwIDE3IDEwOjQyOjEyIDIwMDAsIEFuZHJlYXMgRGlsZ2VyCisuVEggQkxLSUQgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorYmxraWQgXC0gY29tbWFuZFwtbGluZSB1dGlsaXR5IHRvIGxvY2F0ZS9wcmludCBibG9jayBkZXZpY2UgYXR0cmlidXRlcworLlNIIFNZTk9QU0lTCisuQiBibGtpZAorWworLkIgXC1naGxMdgorXQorWworWworLkIgXC1jCisuSSBjYWNoZWZpbGUKK10KKy5CIFwtdworLkkgd3JpdGVjYWNoZWZpbGUKK10KK1sKKy5CIFwtbworLkkgZm9ybWF0CitdCitbCisuQiBcLXMKKy5JIHRhZworXQorWworLkIgXC10CisuSVIgTkFNRSA9IHZhbHVlCitdCitbCisuSSBkZXZpY2UgLi4uCitdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgYmxraWQKK3Byb2dyYW0gaXMgdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgdG8gd29ya2luZyB3aXRoCisuQlIgbGliYmxraWQgKDMpCitsaWJyYXJ5LiAgSXQgY2FuIGRldGVybWluZSB0aGUgdHlwZSBvZiBjb250ZW50IChlLmcuIGZpbGVzeXN0ZW0sIHN3YXApCithIGJsb2NrIGRldmljZSBob2xkcywgYW5kIGFsc28gYXR0cmlidXRlcyAodG9rZW5zLCBOQU1FPXZhbHVlIHBhaXJzKQorZnJvbSB0aGUgY29udGVudCBtZXRhZGF0YSAoZS5nLiBMQUJFTCBvciBVVUlEIGZpZWxkcykuCisuUFAKKy5CIGJsa2lkCitoYXMgdHdvIG1haW4gZm9ybXMgb2Ygb3BlcmF0aW9uOiBlaXRoZXIgc2VhcmNoaW5nIGZvciBhIGRldmljZSB3aXRoIGEKK3NwZWNpZmljIE5BTUU9dmFsdWUgcGFpciwgb3IgZGlzcGxheWluZyBOQU1FPXZhbHVlIHBhaXJzIGZvciBvbmUgb3IKK21vcmUgZGV2aWNlcy4KKy5TSCBPUFRJT05TCisuVFAKKy5CSSBcLWMgIiBjYWNoZWZpbGUiCitSZWFkIGZyb20KKy5JIGNhY2hlZmlsZQoraW5zdGVhZCBvZiByZWFkaW5nIGZyb20gdGhlIGRlZmF1bHQgY2FjaGUgZmlsZQorLklSIC9ldGMvYmxraWQudGFiIC4KK0lmIHlvdSB3YW50IHRvIHN0YXJ0IHdpdGggYSBjbGVhbiBjYWNoZSAoaS5lLiBkb24ndCByZXBvcnQgZGV2aWNlcyBwcmV2aW91c2x5CitzY2FubmVkIGJ1dCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGF0IHRoaXMgdGltZSksIHNwZWNpZnkKKy5JUiAvZGV2L251bGwgLgorLlRQCisuQiBcLWcKK1BlcmZvcm0gYSBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzcyBvbiB0aGUgYmxraWQgY2FjaGUgdG8gcmVtb3ZlCitkZXZpY2VzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KKy5UUAorLkIgXC1oCitEaXNwbGF5IGEgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKy5UUAorLkIgXC1sCitMb29rIHVwIG9uZSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBzZWFyY2ggcGFyYW1ldGVyIHNwZWNpZmllZCB1c2luZwordGhlCisuQiBcLXQKK29wdGlvbi4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBzZWFyY2gKK3BhcmFtZXRlciwgdGhlbiB0aGUgZGV2aWNlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgcmV0dXJuZWQsIGFuZC9vcgordGhlIGZpcnN0IGRldmljZSBmb3VuZCBhdCBhIGdpdmVuIHByaW9yaXR5LiAgRGV2aWNlIHR5cGVzIGluIG9yZGVyIG9mCitkZWNyZWFzaW5nIHByaW9yaXR5IGFyZSBEZXZpY2UgTWFwcGVyLCBFVk1TLCBMVk0sIE1ELCBhbmQgZmluYWxseSByZWd1bGFyCitibG9jayBkZXZpY2VzLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKy5CIGJsa2lkCit3aWxsIHByaW50IGFsbCBvZiB0aGUgZGV2aWNlcyB0aGF0IG1hdGNoIHRoZSBzZWFyY2ggcGFyYW1ldGVyLgorLlRQCisuQkkgXC1vICIgZm9ybWF0IgorRGlzcGxheQorLkJSIGJsa2lkICdzCitvdXRwdXQgdXNpbmcgdGhlIHNwZWNpZmllZCBmb3JtYXQuICBUaGUKKy5JIGZvcm1hdAorcGFyYW1ldGVyIG1heSBiZQorLkkgZnVsbAorKHRoZSBkZWZhdWx0KSwKKy5JIHZhbHVlCisob25seSBwcmludCB0aGUgdmFsdWUgb2YgdGhlIHRhZ3MpLAorLkkgbGlzdAorKHByaW50IHRoZSBkZXZpY2VzIGluIGEgdXNlci1mcmllbmRseSBmb3JtYXQpLAorb3IKKy5JIGRldmljZQorKG9ubHkgcHJpbnQgdGhlIGRldmljZSBuYW1lKS4KKy5UUAorLkIgXC1MCitQcmludCB0aGUgZGV2aWNlcyBpbiBhIHVzZXItZnJpZW5kbHkgbGlzdCBmb3JtYXQuICBUaGlzIGlzIHRoZQorZXF1aXZhbGVudCBvZiB1c2luZyB0aGUgb3B0aW9uIFxmQi1vIGxpc3RcZlIuCisuVFAKKy5CSSBcLXMgIiB0YWciCitGb3IgZWFjaCAoc3BlY2lmaWVkKSBkZXZpY2UsIHNob3cgb25seSB0aGUgdGFncyB0aGF0IG1hdGNoCisuSVIgdGFnIC4KK0l0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgbXVsdGlwbGUKKy5CIFwtcworb3B0aW9ucy4gIElmIG5vIHRhZyBpcyBzcGVjaWZpZWQsIHRoZW4gYWxsIHRva2VucyBhcmUgc2hvd24gZm9yIGFsbAorKHNwZWNpZmllZCkgZGV2aWNlcy4KK0luIG9yZGVyIHRvIGp1c3QgcmVmcmVzaCB0aGUgY2FjaGUgd2l0aG91dCBzaG93aW5nIGFueSB0b2tlbnMsIHVzZQorLkIgIi1zIG5vbmUiCit3aXRoIG5vIG90aGVyIG9wdGlvbnMuCisuVFAKKy5CSSBcLXQgIiBOQU1FIiA9ICJ2YWx1ZSIKK1NlYXJjaCBmb3IgYmxvY2sgZGV2aWNlcyB3aXRoIHRva2VucyBuYW1lZAorLkkgTkFNRQordGhhdCBoYXZlIHRoZSB2YWx1ZQorLklSIHZhbHVlICwKK2FuZCBkaXNwbGF5IGFueSBkZXZpY2VzIHdoaWNoIGFyZSBmb3VuZC4KK0NvbW1vbiB2YWx1ZXMgZm9yCisuSSBOQU1FCitpbmNsdWRlCisuQlIgVFlQRSAsCisuQlIgTEFCRUwgLAorYW5kCisuQlIgVVVJRCAuCitJZiB0aGVyZSBhcmUgbm8gZGV2aWNlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYWxsIGJsb2NrIGRldmljZXMKK3dpbGwgYmUgc2VhcmNoZWQ7IG90aGVyd2lzZSBvbmx5IHRoZSBzcGVjaWZpZWQgZGV2aWNlcyBhcmUgc2VhcmNoZWQuCisuVFAKKy5CIFwtdgorRGlzcGxheSB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdC4KKy5UUAorLkJJIFwtdyAiIHdyaXRlY2FjaGVmaWxlIgorV3JpdGUgdGhlIGRldmljZSBjYWNoZSB0bworLkkgd3JpdGVjYWNoZWZpbGUKK2luc3RlYWQgb2Ygd3JpdGluZyBpdCB0byB0aGUgZGVmYXVsdCBjYWNoZSBmaWxlCisuSVIgL2V0Yy9ibGtpZC50YWIgLgorSWYgeW91IGRvbid0IHdhbnQgdG8gc2F2ZSB0aGUgY2FjaGUgdG8gdGhlIGRlZmF1bHQgZmlsZSwgc3BlY2lmeQorLklSIC9kZXYvbnVsbC4KK0lmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCBiZSB0aGUgc2FtZSBmaWxlIGFzIHRoYXQgZ2l2ZW4gYnkgdGhlCisuQiBcLWMKK29wdGlvbi4KKy5UUAorLkkgZGV2aWNlCitEaXNwbGF5IHRva2VucyBmcm9tIG9ubHkgdGhlIHNwZWNpZmllZCBkZXZpY2UuICBJdCBpcyBwb3NzaWJsZSB0bworZ2l2ZSBtdWx0aXBsZQorLkkgZGV2aWNlCitvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiBub25lIGlzIGdpdmVuLCBhbGwgZGV2aWNlcyB3aGljaAorYXBwZWFyIGluCisuSSAvcHJvYy9wYXJ0aXRpb25zCithcmUgc2hvd24sIGlmIHRoZXkgYXJlIHJlY29nbml6ZWQuCisuU0ggIlJFVFVSTiBDT0RFIgorSWYgdGhlIHNwZWNpZmllZCB0b2tlbiB3YXMgZm91bmQsIG9yIGlmIGFueSB0YWdzIHdlcmUgc2hvd24gZnJvbSAoc3BlY2lmaWVkKQorZGV2aWNlcywgMCBpcyByZXR1cm5lZC4gIElmIHRoZSBzcGVjaWZpZWQgdG9rZW4gd2FzIG5vdCBmb3VuZCwgb3Igbm8KKyhzcGVjaWZpZWQpIGRldmljZXMgY291bGQgYmUgaWRlbnRpZmllZCwgYW4gZXhpdCBjb2RlIG9mIDIgaXMgcmV0dXJuZWQuCitGb3IgdXNhZ2Ugb3Igb3RoZXIgZXJyb3JzLCBhbiBleGl0IGNvZGUgb2YgNCBpcyByZXR1cm5lZC4KKy5TSCBBVVRIT1IKKy5CIGJsa2lkCit3YXMgd3JpdHRlbiBieSBBbmRyZWFzIERpbGdlciBmb3IgbGliYmxraWQuCisuU0ggQVZBSUxBQklMSVRZCisuQiBibGtpZAoraXMgcGFydCB0aGUgZTJmc3Byb2dzIHBhY2thZ2Ugc2luY2UgdmVyc2lvbiAxLjI2IGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggIlNFRSBBTFNPIgorLkJSIGxpYmJsa2lkICgzKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvYmxraWQuYyBiL2UyZnNwcm9ncy9taXNjL2Jsa2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4YWJhZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2Jsa2lkLmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBibGtpZC5jIC0gVXNlciBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGZvciBsaWJibGtpZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBBbmRyZWFzIERpbGdlcgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9URVJNSU9TX0gKKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RFUk1JT19ICisjaW5jbHVkZSA8dGVybWlvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7CitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKworI2RlZmluZSBPVVRQVVRfVkFMVUVfT05MWQkweDAwMDEKKyNkZWZpbmUgT1VUUFVUX0RFVklDRV9PTkxZCTB4MDAwMgorI2RlZmluZSBPVVRQVVRfUFJFVFRZX0xJU1QJMHgwMDA0CisKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiYmxraWQvYmxraWQuaCIKKworY29uc3QgY2hhciAqcHJvZ25hbWUgPSAiYmxraWQiOworCitzdGF0aWMgdm9pZCBwcmludF92ZXJzaW9uKEZJTEUgKm91dCkKK3sKKwlmcHJpbnRmKG91dCwgIiVzICVzICglcylcbiIsIHByb2duYW1lLCBCTEtJRF9WRVJTSU9OLCBCTEtJRF9EQVRFKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoaW50IGVycm9yKQoreworCUZJTEUgKm91dCA9IGVycm9yID8gc3RkZXJyIDogc3Rkb3V0OworCisJcHJpbnRfdmVyc2lvbihvdXQpOworCWZwcmludGYob3V0LAorCQkidXNhZ2U6XHQlcyBbLWMgPGZpbGU+XSBbLWdobEx2XSBbLW8gZm9ybWF0XSAiCisJCSJbLXMgPHRhZz5dIFstdCA8dG9rZW4+XVxuICAgIFstdyA8ZmlsZT5dIFtkZXYgLi4uXVxuIgorCQkiXHQtY1x0Y2FjaGUgZmlsZSAoZGVmYXVsdDogL2V0Yy9ibGtpZC50YWIsIC9kZXYvbnVsbCA9IG5vbmUpXG4iCisJCSJcdC1oXHRwcmludCB0aGlzIHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXRcbiIKKwkJIlx0LWdcdGdhcmJhZ2UgY29sbGVjdCB0aGUgYmxraWQgY2FjaGVcbiIKKwkJIlx0LXNcdHNob3cgc3BlY2lmaWVkIHRhZyhzKSAoZGVmYXVsdCBzaG93IGFsbCB0YWdzKVxuIgorCQkiXHQtdFx0ZmluZCBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIHRva2VuIChOQU1FPXZhbHVlIHBhaXIpXG4iCisJCSJcdC1sXHRsb29rdXAgdGhlIHRoZSBmaXJzdCBkZXZpY2Ugd2l0aCBhcmd1bWVudHMgc3BlY2lmaWVkIGJ5IC10XG4iCisJCSJcdC12XHRwcmludCB2ZXJzaW9uIGFuZCBleGl0XG4iCisJCSJcdC13XHR3cml0ZSBjYWNoZSB0byBkaWZmZXJlbnQgZmlsZSAoL2Rldi9udWxsID0gbm8gd3JpdGUpXG4iCisJCSJcdGRldlx0c3BlY2lmeSBkZXZpY2UocykgdG8gcHJvYmUgKGRlZmF1bHQ6IGFsbCBkZXZpY2VzKVxuIiwKKwkJcHJvZ25hbWUpOworCWV4aXQoZXJyb3IpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb2VzICJzYWZlIiBwcmludGluZy4gIEl0IHdpbGwgY29udmVydCBub24tcHJpbnRhYmxlCisgKiBBU0NJSSBjaGFyYWN0ZXJzIHVzaW5nICdeJyBhbmQgTS0gbm90YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHNhZmVfcHJpbnQoY29uc3QgY2hhciAqY3AsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhcgljaDsKKworCWlmIChsZW4gPCAwKQorCQlsZW4gPSBzdHJsZW4oY3ApOworCisJd2hpbGUgKGxlbi0tKSB7CisJCWNoID0gKmNwKys7CisJCWlmIChjaCA+IDEyOCkgeworCQkJZnB1dHMoIk0tIiwgc3Rkb3V0KTsKKwkJCWNoIC09IDEyODsKKwkJfQorCQlpZiAoKGNoIDwgMzIpIHx8IChjaCA9PSAweDdmKSkgeworCQkJZnB1dGMoJ14nLCBzdGRvdXQpOworCQkJY2ggXj0gMHg0MDsgLyogXkAsIF5BLCBeQjsgXj8gZm9yIERFTCAqLworCQl9CisJCWZwdXRjKGNoLCBzdGRvdXQpOworCX0KK30KKworc3RhdGljIGludCBnZXRfdGVybWluYWxfd2lkdGgodm9pZCkKK3sKKyNpZmRlZiBUSU9DR1NJWkUKKwlzdHJ1Y3QgdHR5c2l6ZQl0X3dpbjsKKyNlbmRpZgorI2lmZGVmIFRJT0NHV0lOU1oKKwlzdHJ1Y3Qgd2luc2l6ZQl3X3dpbjsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyCSpjcDsKKworI2lmZGVmIFRJT0NHU0laRQorCWlmIChpb2N0bCAoMCwgVElPQ0dTSVpFLCAmdF93aW4pID09IDApCisJCXJldHVybiAodF93aW4udHNfY29scyk7CisjZW5kaWYKKyNpZmRlZiBUSU9DR1dJTlNaCisJaWYgKGlvY3RsICgwLCBUSU9DR1dJTlNaLCAmd193aW4pID09IDApCisJCXJldHVybiAod193aW4ud3NfY29sKTsKKyNlbmRpZgorICAgICAgICBjcCA9IGdldGVudigiQ09MVU1OUyIpOworCWlmIChjcCkKKwkJcmV0dXJuIHN0cnRvbChjcCwgTlVMTCwgMTApOworCXJldHVybiA4MDsKK30KKworc3RhdGljIGludCBwcmV0dHlfcHJpbnRfd29yZChjb25zdCBjaGFyICpzdHIsIGludCBtYXhfbGVuLAorCQkJICAgICBpbnQgbGVmdF9sZW4sIGludCBvdmVyZmxvd19ubCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cikgKyBsZWZ0X2xlbjsKKwlpbnQgcmV0ID0gMDsKKworCWZwdXRzKHN0ciwgc3Rkb3V0KTsKKwlpZiAob3ZlcmZsb3dfbmwgJiYgbGVuID4gbWF4X2xlbikgeworCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQlsZW4gPSAwOworCX0gZWxzZSBpZiAobGVuID4gbWF4X2xlbikKKwkJcmV0ID0gbGVuIC0gbWF4X2xlbjsKKwlkbworCQlmcHV0YygnICcsIHN0ZG91dCk7CisJd2hpbGUgKGxlbisrIDwgbWF4X2xlbik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X2xpbmUoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpmc190eXBlLAorCQkJICAgICAgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IGNoYXIgKm10cHQsCisJCQkgICAgICBjb25zdCBjaGFyICp1dWlkKQoreworCXN0YXRpYyBpbnQgZGV2aWNlX2xlbiA9IDEwLCBmc190eXBlX2xlbiA9IDc7CisJc3RhdGljIGludCBsYWJlbF9sZW4gPSA4LCBtdHB0X2xlbiA9IDE0OworCXN0YXRpYyBpbnQgdGVybV93aWR0aCA9IC0xOworCWludCBsZW4sIHc7CisKKwlpZiAodGVybV93aWR0aCA8IDApCisJCXRlcm1fd2lkdGggPSBnZXRfdGVybWluYWxfd2lkdGgoKTsKKworCWlmICh0ZXJtX3dpZHRoID4gODApIHsKKwkJdGVybV93aWR0aCAtPSA4MDsKKwkJdyA9IHRlcm1fd2lkdGggLyAxMDsKKwkJaWYgKHcgPiA4KQorCQkJdyA9IDg7CisJCXRlcm1fd2lkdGggLT0gMip3OworCQlsYWJlbF9sZW4gKz0gdzsKKwkJZnNfdHlwZV9sZW4gKz0gdzsKKwkJdyA9IHRlcm1fd2lkdGgvMjsKKwkJZGV2aWNlX2xlbiArPSB3OworCQltdHB0X2xlbiArPXc7CisJfQorCisJbGVuID0gcHJldHR5X3ByaW50X3dvcmQoZGV2aWNlLCBkZXZpY2VfbGVuLCAwLCAxKTsKKwlsZW4gPSBwcmV0dHlfcHJpbnRfd29yZChmc190eXBlLCBmc190eXBlX2xlbiwgbGVuLCAwKTsKKwlsZW4gPSBwcmV0dHlfcHJpbnRfd29yZChsYWJlbCwgbGFiZWxfbGVuLCBsZW4sIDApOworCWxlbiA9IHByZXR0eV9wcmludF93b3JkKG10cHQsIG10cHRfbGVuLCBsZW4sIDApOworCWZwdXRzKHV1aWQsIHN0ZG91dCk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50X2RldihibGtpZF9kZXYgZGV2KQoreworCWJsa2lkX3RhZ19pdGVyYXRlCWl0ZXI7CisJY29uc3QgY2hhcgkJKnR5cGUsICp2YWx1ZSwgKmRldm5hbWU7CisJY29uc3QgY2hhcgkJKnV1aWQgPSAiIiwgKmZzX3R5cGUgPSAiIiwgKmxhYmVsID0gIiI7CisJaW50CQkJbGVuLCBtb3VudF9mbGFnczsKKwljaGFyCQkJbXRwdFs4MF07CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJldHR5X3ByaW50X2xpbmUoImRldmljZSIsICJmc190eXBlIiwgImxhYmVsIiwKKwkJCQkgICJtb3VudCBwb2ludCIsICJVVUlEIik7CisJCWZvciAobGVuPWdldF90ZXJtaW5hbF93aWR0aCgpLTE7IGxlbiA+IDA7IGxlbi0tKQorCQkJZnB1dGMoJy0nLCBzdGRvdXQpOworCQlmcHV0YygnXG4nLCBzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJZGV2bmFtZSA9IGJsa2lkX2Rldl9kZXZuYW1lKGRldik7CisJaWYgKGFjY2VzcyhkZXZuYW1lLCBGX09LKSkKKwkJcmV0dXJuOworCisJLyogR2V0IHRoZSB1dWlkLCBsYWJlbCwgdHlwZSAqLworCWl0ZXIgPSBibGtpZF90YWdfaXRlcmF0ZV9iZWdpbihkZXYpOworCXdoaWxlIChibGtpZF90YWdfbmV4dChpdGVyLCAmdHlwZSwgJnZhbHVlKSA9PSAwKSB7CisJCWlmICghc3RyY21wKHR5cGUsICJVVUlEIikpCisJCQl1dWlkID0gdmFsdWU7CisJCWlmICghc3RyY21wKHR5cGUsICJUWVBFIikpCisJCQlmc190eXBlID0gdmFsdWU7CisJCWlmICghc3RyY21wKHR5cGUsICJMQUJFTCIpKQorCQkJbGFiZWwgPSB2YWx1ZTsKKwl9CisJYmxraWRfdGFnX2l0ZXJhdGVfZW5kKGl0ZXIpOworCisJLyogR2V0IHRoZSBtb3VudCBwb2ludCAqLworCW10cHRbMF0gPSAwOworCXJldHZhbCA9IGV4dDJmc19jaGVja19tb3VudF9wb2ludChkZXZuYW1lLCAmbW91bnRfZmxhZ3MsCisJCQkJCSAgbXRwdCwgc2l6ZW9mKG10cHQpKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCQlpZiAoIW10cHRbMF0pCisJCQkJc3RyY3B5KG10cHQsICIobW91bnRlZCwgbXRwdCB1bmtub3duKSIpOworCQl9IGVsc2UgaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9CVVNZKQorCQkJc3RyY3B5KG10cHQsICIoaW4gdXNlKSIpOworCQllbHNlCisJCQlzdHJjcHkobXRwdCwgIihub3QgbW91bnRlZCkiKTsKKwl9CisKKwlwcmV0dHlfcHJpbnRfbGluZShkZXZuYW1lLCBmc190eXBlLCBsYWJlbCwgbXRwdCwgdXVpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RhZ3MoYmxraWRfZGV2IGRldiwgY2hhciAqc2hvd1tdLCBpbnQgbnVtdGFnLCBpbnQgb3V0cHV0KQoreworCWJsa2lkX3RhZ19pdGVyYXRlCWl0ZXI7CisJY29uc3QgY2hhcgkJKnR5cGUsICp2YWx1ZTsKKwlpbnQgCQkJaSwgZmlyc3QgPSAxOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWlmIChvdXRwdXQgJiBPVVRQVVRfUFJFVFRZX0xJU1QpIHsKKwkJcHJldHR5X3ByaW50X2RldihkZXYpOworCQlyZXR1cm47CisJfQorCisJaWYgKG91dHB1dCAmIE9VVFBVVF9ERVZJQ0VfT05MWSkgeworCQlwcmludGYoIiVzXG4iLCBibGtpZF9kZXZfZGV2bmFtZShkZXYpKTsKKwkJcmV0dXJuOworCX0KKworCWl0ZXIgPSBibGtpZF90YWdfaXRlcmF0ZV9iZWdpbihkZXYpOworCXdoaWxlIChibGtpZF90YWdfbmV4dChpdGVyLCAmdHlwZSwgJnZhbHVlKSA9PSAwKSB7CisJCWlmIChudW10YWcgJiYgc2hvdykgeworCQkJZm9yIChpPTA7IGkgPCBudW10YWc7IGkrKykKKwkJCQlpZiAoIXN0cmNtcCh0eXBlLCBzaG93W2ldKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaSA+PSBudW10YWcpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKG91dHB1dCAmIE9VVFBVVF9WQUxVRV9PTkxZKSB7CisJCQlmcHV0cyh2YWx1ZSwgc3Rkb3V0KTsKKwkJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJCX0gZWxzZSB7CisJCQlpZiAoZmlyc3QpIHsKKwkJCQlwcmludGYoIiVzOiAiLCBibGtpZF9kZXZfZGV2bmFtZShkZXYpKTsKKwkJCQlmaXJzdCA9IDA7CisJCQl9CisJCQlmcHV0cyh0eXBlLCBzdGRvdXQpOworCQkJZnB1dHMoIj1cIiIsIHN0ZG91dCk7CisJCQlzYWZlX3ByaW50KHZhbHVlLCAtMSk7CisJCQlmcHV0cygiXCIgIiwgc3Rkb3V0KTsKKwkJfQorCX0KKwlibGtpZF90YWdfaXRlcmF0ZV9lbmQoaXRlcik7CisKKwlpZiAoIWZpcnN0ICYmICEob3V0cHV0ICYgT1VUUFVUX1ZBTFVFX09OTFkpKQorCQlwcmludGYoIlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisJY2hhciAqZGV2aWNlc1sxMjhdID0geyBOVUxMLCB9OworCWNoYXIgKnNob3dbMTI4XSA9IHsgTlVMTCwgfTsKKwljaGFyICpzZWFyY2hfdHlwZSA9IE5VTEwsICpzZWFyY2hfdmFsdWUgPSBOVUxMOworCWNoYXIgKnJlYWQgPSBOVUxMOworCWNoYXIgKndyaXRlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbnVtZGV2ID0gMCwgbnVtdGFnID0gMDsKKwlpbnQgdmVyc2lvbiA9IDA7CisJaW50IGVyciA9IDQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IG91dHB1dF9mb3JtYXQgPSAwOworCWludCBsb29rdXAgPSAwLCBnYyA9IDA7CisJaW50IGM7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJjOmY6Z2hsTG86czp0Onc6diIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICdjJzoKKwkJCWlmIChvcHRhcmcgJiYgISpvcHRhcmcpCisJCQkJcmVhZCA9IE5VTEw7CisJCQllbHNlCisJCQkJcmVhZCA9IG9wdGFyZzsKKwkJCWlmICghd3JpdGUpCisJCQkJd3JpdGUgPSByZWFkOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJbG9va3VwKys7CisJCQlicmVhazsKKwkJY2FzZSAnTCc6CisJCQlvdXRwdXRfZm9ybWF0ID0gT1VUUFVUX1BSRVRUWV9MSVNUOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJZ2MgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJaWYgKCFzdHJjbXAob3B0YXJnLCAidmFsdWUiKSkKKwkJCQlvdXRwdXRfZm9ybWF0ID0gT1VUUFVUX1ZBTFVFX09OTFk7CisJCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgImRldmljZSIpKQorCQkJCW91dHB1dF9mb3JtYXQgPSBPVVRQVVRfREVWSUNFX09OTFk7CisJCQllbHNlIGlmICghc3RyY21wKG9wdGFyZywgImxpc3QiKSkKKwkJCQlvdXRwdXRfZm9ybWF0ID0gT1VUUFVUX1BSRVRUWV9MSVNUOworCQkJZWxzZSBpZiAoIXN0cmNtcChvcHRhcmcsICJmdWxsIikpCisJCQkJb3V0cHV0X2Zvcm1hdCA9IDA7CisJCQllbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgb3V0cHV0IGZvcm1hdCAlcy4gIgorCQkJCQkiQ2hvb3NlIGZyb20gdmFsdWUsXG5cdCIKKwkJCQkJImRldmljZSwgbGlzdCwgb3IgZnVsbFxuIiwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKG51bXRhZyA+PSBzaXplb2Yoc2hvdykgLyBzaXplb2YoKnNob3cpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJUb28gbWFueSB0YWdzIHNwZWNpZmllZFxuIik7CisJCQkJdXNhZ2UoZXJyKTsKKwkJCX0KKwkJCXNob3dbbnVtdGFnKytdID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKHNlYXJjaF90eXBlKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJDYW4gb25seSBzZWFyY2ggZm9yICIKKwkJCQkJCSJvbmUgTkFNRT12YWx1ZSBwYWlyXG4iKTsKKwkJCQl1c2FnZShlcnIpOworCQkJfQorCQkJaWYgKGJsa2lkX3BhcnNlX3RhZ19zdHJpbmcob3B0YXJnLAorCQkJCQkJICAgJnNlYXJjaF90eXBlLAorCQkJCQkJICAgJnNlYXJjaF92YWx1ZSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi10IG5lZWRzIE5BTUU9dmFsdWUgcGFpclxuIik7CisJCQkJdXNhZ2UoZXJyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcnNpb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJaWYgKG9wdGFyZyAmJiAhKm9wdGFyZykKKwkJCQl3cml0ZSA9IE5VTEw7CisJCQllbHNlCisJCQkJd3JpdGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQllcnIgPSAwOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoZXJyKTsKKwkJfQorCisJd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJCWRldmljZXNbbnVtZGV2KytdID0gYXJndltvcHRpbmQrK107CisKKwlpZiAodmVyc2lvbikgeworCQlwcmludF92ZXJzaW9uKHN0ZG91dCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYmxraWRfZ2V0X2NhY2hlKCZjYWNoZSwgcmVhZCkgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwllcnIgPSAyOworCWlmIChnYykgeworCQlibGtpZF9nY19jYWNoZShjYWNoZSk7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKG91dHB1dF9mb3JtYXQgJiBPVVRQVVRfUFJFVFRZX0xJU1QpCisJCXByZXR0eV9wcmludF9kZXYoTlVMTCk7CisKKwlpZiAobG9va3VwKSB7CisJCWJsa2lkX2RldiBkZXY7CisKKwkJaWYgKCFzZWFyY2hfdHlwZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJUaGUgbG9va3VwIG9wdGlvbiByZXF1aXJlcyBhICIKKwkJCQkic2VhcmNoIHR5cGUgc3BlY2lmaWVkIHVzaW5nIC10XG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJLyogTG9hZCBhbnkgYWRkaXRpb25hbCBkZXZpY2VzIG5vdCBpbiB0aGUgY2FjaGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bWRldjsgaSsrKQorCQkJYmxraWRfZ2V0X2RldihjYWNoZSwgZGV2aWNlc1tpXSwgQkxLSURfREVWX05PUk1BTCk7CisKKwkJaWYgKChkZXYgPSBibGtpZF9maW5kX2Rldl93aXRoX3RhZyhjYWNoZSwgc2VhcmNoX3R5cGUsCisJCQkJCQkgICBzZWFyY2hfdmFsdWUpKSkgeworCQkJcHJpbnRfdGFncyhkZXYsIHNob3csIG51bXRhZywgb3V0cHV0X2Zvcm1hdCk7CisJCQllcnIgPSAwOworCQl9CisJLyogSWYgd2UgZGlkbid0IHNwZWNpZnkgYSBzaW5nbGUgZGV2aWNlLCBzaG93IGFsbCBhdmFpbGFibGUgZGV2aWNlcyAqLworCX0gZWxzZSBpZiAoIW51bWRldikgeworCQlibGtpZF9kZXZfaXRlcmF0ZQlpdGVyOworCQlibGtpZF9kZXYJCWRldjsKKworCQlibGtpZF9wcm9iZV9hbGwoY2FjaGUpOworCisJCWl0ZXIgPSBibGtpZF9kZXZfaXRlcmF0ZV9iZWdpbihjYWNoZSk7CisJCWJsa2lkX2Rldl9zZXRfc2VhcmNoKGl0ZXIsIHNlYXJjaF90eXBlLCBzZWFyY2hfdmFsdWUpOworCQl3aGlsZSAoYmxraWRfZGV2X25leHQoaXRlciwgJmRldikgPT0gMCkgeworCQkJZGV2ID0gYmxraWRfdmVyaWZ5KGNhY2hlLCBkZXYpOworCQkJaWYgKCFkZXYpCisJCQkJY29udGludWU7CisJCQlwcmludF90YWdzKGRldiwgc2hvdywgbnVtdGFnLCBvdXRwdXRfZm9ybWF0KTsKKwkJCWVyciA9IDA7CisJCX0KKwkJYmxraWRfZGV2X2l0ZXJhdGVfZW5kKGl0ZXIpOworCS8qIEFkZCBhbGwgc3BlY2lmaWVkIGRldmljZXMgdG8gY2FjaGUgKG9wdGlvbmFsbHkgZGlzcGxheSB0YWdzKSAqLworCX0gZWxzZSBmb3IgKGkgPSAwOyBpIDwgbnVtZGV2OyBpKyspIHsKKwkJYmxraWRfZGV2IGRldiA9IGJsa2lkX2dldF9kZXYoY2FjaGUsIGRldmljZXNbaV0sCisJCQkJCQkgIEJMS0lEX0RFVl9OT1JNQUwpOworCisJCWlmIChkZXYpIHsKKwkJCWlmIChzZWFyY2hfdHlwZSAmJgorCQkJICAgICFibGtpZF9kZXZfaGFzX3RhZyhkZXYsIHNlYXJjaF90eXBlLAorCQkJCQkgICAgICAgc2VhcmNoX3ZhbHVlKSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50X3RhZ3MoZGV2LCBzaG93LCBudW10YWcsIG91dHB1dF9mb3JtYXQpOworCQkJZXJyID0gMDsKKwkJfQorCX0KKworZXhpdDoKKwlmcmVlKHNlYXJjaF90eXBlKTsKKwlmcmVlKHNlYXJjaF92YWx1ZSk7CisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvY2hhdHRyLjEuaW4gYi9lMmZzcHJvZ3MvbWlzYy9jaGF0dHIuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJlZjRiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvY2hhdHRyLjEuaW4KQEAgLTAsMCArMSwxODIgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggQ0hBVFRSIDEgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2NoYXR0ciBcLSBjaGFuZ2UgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggZmlsZSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgY2hhdHRyCitbCisuQiBcLVJWZgorXQorWworLkIgXC12CisuSSB2ZXJzaW9uCitdCitbCisuSSBtb2RlCitdCisuSSBmaWxlcy4uLgorLlNIIERFU0NSSVBUSU9OCisuQiBjaGF0dHIKK2NoYW5nZXMgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IGZpbGUgc3lzdGVtLgorLlBQCitUaGUgZm9ybWF0IG9mIGEgc3ltYm9saWMgbW9kZSBpcyArLT1bYWNkZWlqc3R1QUNEU1RdLgorLlBQCitUaGUgb3BlcmF0b3IgYCsnIGNhdXNlcyB0aGUgc2VsZWN0ZWQgYXR0cmlidXRlcyB0byBiZSBhZGRlZCB0byB0aGUKK2V4aXN0aW5nIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGVzOyBgLScgY2F1c2VzIHRoZW0gdG8gYmUgcmVtb3ZlZDsgYW5kCitgPScgY2F1c2VzIHRoZW0gdG8gYmUgdGhlIG9ubHkgYXR0cmlidXRlcyB0aGF0IHRoZSBmaWxlcyBoYXZlLgorLlBQCitUaGUgbGV0dGVycyBgYWNkZWlqc3R1QUNEU1QnIHNlbGVjdCB0aGUgbmV3IGF0dHJpYnV0ZXMgZm9yIHRoZSBmaWxlczoKK2FwcGVuZCBvbmx5IChhKSwgY29tcHJlc3NlZCAoYyksIG5vIGR1bXAgKGQpLCBleHRlbnQgZm9ybWF0IChlKSwgaW1tdXRhYmxlIChpKSwKK2RhdGEgam91cm5hbGxpbmcgKGopLCBzZWN1cmUgZGVsZXRpb24gKHMpLCBubyB0YWlsLW1lcmdpbmcgKHQpLAordW5kZWxldGFibGUgKHUpLCBubyBhdGltZSB1cGRhdGVzIChBKSwgbm8gY29weSBvbiB3cml0ZSAoQyksCitzeW5jaHJvbm91cyBkaXJlY3RvcnkgdXBkYXRlcyAoRCksIHN5bmNocm9ub3VzIHVwZGF0ZXMgKFMpLAorYW5kIHRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2h5IChUKS4KKy5QUAorVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHksIGFuZCBtYXkgYmUgbGlzdGVkIGJ5CisuQlIgbHNhdHRyICgxKQorYnV0IG5vdCBtb2RpZmllZCBieSBjaGF0dHI6IGh1Z2UgZmlsZSAoaCksIGNvbXByZXNzaW9uIGVycm9yIChFKSwKK2luZGV4ZWQgZGlyZWN0b3J5IChJKSwgY29tcHJlc3Npb24gcmF3IGFjY2VzcyAoWCksIGFuZCBjb21wcmVzc2VkIGRpcnR5CitmaWxlIChaKS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtUgorUmVjdXJzaXZlbHkgY2hhbmdlIGF0dHJpYnV0ZXMgb2YgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIGNvbnRlbnRzLgorLlRQCisuQiBcLVYKK0JlIHZlcmJvc2Ugd2l0aCBjaGF0dHIncyBvdXRwdXQgYW5kIHByaW50IHRoZSBwcm9ncmFtIHZlcnNpb24uCisuVFAKKy5CIFwtZgorU3VwcHJlc3MgbW9zdCBlcnJvciBtZXNzYWdlcy4KKy5UUAorLkJJIFwtdiAiIHZlcnNpb24iCitTZXQgdGhlIGZpbGUncyB2ZXJzaW9uL2dlbmVyYXRpb24gbnVtYmVyLgorLlNIIEFUVFJJQlVURVMKK1doZW4gYSBmaWxlIHdpdGggdGhlICdBJyBhdHRyaWJ1dGUgc2V0IGlzIGFjY2Vzc2VkLCBpdHMgYXRpbWUgcmVjb3JkIGlzCitub3QgbW9kaWZpZWQuICBUaGlzIGF2b2lkcyBhIGNlcnRhaW4gYW1vdW50IG9mIGRpc2sgSS9PIGZvciBsYXB0b3AKK3N5c3RlbXMuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSBgYScgYXR0cmlidXRlIHNldCBjYW4gb25seSBiZSBvcGVuIGluIGFwcGVuZCBtb2RlIGZvciB3cml0aW5nLgorT25seSB0aGUgc3VwZXJ1c2VyIG9yIGEgcHJvY2VzcyBwb3NzZXNzaW5nIHRoZSBDQVBfTElOVVhfSU1NVVRBQkxFCitjYXBhYmlsaXR5IGNhbiBzZXQgb3IgY2xlYXIgdGhpcyBhdHRyaWJ1dGUuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSBgYycgYXR0cmlidXRlIHNldCBpcyBhdXRvbWF0aWNhbGx5IGNvbXByZXNzZWQgb24gdGhlIGRpc2sKK2J5IHRoZSBrZXJuZWwuICBBIHJlYWQgZnJvbSB0aGlzIGZpbGUgcmV0dXJucyB1bmNvbXByZXNzZWQgZGF0YS4gIEEgd3JpdGUgdG8KK3RoaXMgZmlsZSBjb21wcmVzc2VzIGRhdGEgYmVmb3JlIHN0b3JpbmcgdGhlbSBvbiB0aGUgZGlzay4gIE5vdGU6IHBsZWFzZQorbWFrZSBzdXJlIHRvIHJlYWQgdGhlIGJ1Z3MgYW5kIGxpbWl0YXRpb25zIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzCitkb2N1bWVudC4KKy5QUAorQSBmaWxlIHdpdGggdGhlICdDJyBhdHRyaWJ1dGUgc2V0IHdpbGwgbm90IGJlIHN1YmplY3QgdG8gY29weS1vbi13cml0ZQordXBkYXRlcy4gIFRoaXMgZmxhZyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBmaWxlIHN5c3RlbXMgd2hpY2ggcGVyZm9ybQorY29weS1vbi13cml0ZS4gIChOb3RlOiBGb3IgYnRyZnMsIHRoZSAnQycgZmxhZyBzaG91bGQgYmUKK3NldCBvbiBuZXcgb3IgZW1wdHkgZmlsZXMuICBJZiBpdCBpcyBzZXQgb24gYSBmaWxlIHdoaWNoIGFscmVhZHkgaGFzCitkYXRhIGJsb2NrcywgaXQgaXMgdW5kZWZpbmVkIHdoZW4gdGhlIGJsb2NrcyBhc3NpZ25lZCB0byB0aGUgZmlsZSB3aWxsCitiZSBmdWxseSBzdGFibGUuICBJZiB0aGUgJ0MnIGZsYWcgaXMgc2V0IG9uIGEgZGlyZWN0b3J5LCBpdCB3aWxsIGhhdmUgbm8KK2VmZmVjdCBvbiB0aGUgZGlyZWN0b3J5LCBidXQgbmV3IGZpbGVzIGNyZWF0ZWQgaW4gdGhhdCBkaXJlY3Rvcnkgd2lsbAordGhlIE5vX0NPVyBhdHRyaWJ1dGUuKQorLlBQCitXaGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGBEJyBhdHRyaWJ1dGUgc2V0IGlzIG1vZGlmaWVkLAordGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gc3luY2hyb25vdXNseSBvbiB0aGUgZGlzazsgdGhpcyBpcyBlcXVpdmFsZW50IHRvCit0aGUgYGRpcnN5bmMnIG1vdW50IG9wdGlvbiBhcHBsaWVkIHRvIGEgc3Vic2V0IG9mIHRoZSBmaWxlcy4KKy5QUAorQSBmaWxlIHdpdGggdGhlIGBkJyBhdHRyaWJ1dGUgc2V0IGlzIG5vdCBjYW5kaWRhdGUgZm9yIGJhY2t1cCB3aGVuIHRoZQorLkJSIGR1bXAgKDgpCitwcm9ncmFtIGlzIHJ1bi4KKy5QUAorVGhlICdFJyBhdHRyaWJ1dGUgaXMgdXNlZCBieSB0aGUgZXhwZXJpbWVudGFsIGNvbXByZXNzaW9uIHBhdGNoZXMgdG8KK2luZGljYXRlIHRoYXQgYSBjb21wcmVzc2VkIGZpbGUgaGFzIGEgY29tcHJlc3Npb24gZXJyb3IuICBJdCBtYXkgbm90IGJlCitzZXQgb3IgcmVzZXQgdXNpbmcKKy5CUiBjaGF0dHIgKDEpLAorYWx0aG91Z2ggaXQgY2FuIGJlIGRpc3BsYXllZCBieQorLkJSIGxzYXR0ciAoMSkuCisuUFAKK1RoZSAnZScgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBmaWxlIGlzIHVzaW5nIGV4dGVudHMgZm9yIG1hcHBpbmcKK3RoZSBibG9ja3Mgb24gZGlzay4gIEl0IG1heSBub3QgYmUgcmVtb3ZlZCB1c2luZworLkJSIGNoYXR0ciAoMSkuCisuUFAKK1RoZSAnSScgYXR0cmlidXRlIGlzIHVzZWQgYnkgdGhlIGh0cmVlIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBhIGRpcmVjdG9yeQoraXMgYmVpbmcgaW5kZXhlZCB1c2luZyBoYXNoZWQgdHJlZXMuICBJdCBtYXkgbm90IGJlIHNldCBvciByZXNldCB1c2luZworLkJSIGNoYXR0ciAoMSksCithbHRob3VnaCBpdCBjYW4gYmUgZGlzcGxheWVkIGJ5CisuQlIgbHNhdHRyICgxKS4KKy5QUAorVGhlICdoJyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBmaWxlIGlzIHN0b3JpbmcgaXRzIGJsb2NrcyBpbiB1bml0cyBvZiB0aGUKK2ZpbGVzeXN0ZW0gYmxvY2tzaXplIGluc3RlYWQgb2YgaW4gdW5pdHMgb2Ygc2VjdG9ycywgYW5kIG1lYW5zIHRoYXQgdGhlIGZpbGUKK2lzIChvciBhdCBvbmUgdGltZSB3YXMpIGxhcmdlciB0aGFuIDJUQi4gIEl0IG1heSBub3QgYmUgc2V0IG9yIHJlc2V0IHVzaW5nCisuQlIgY2hhdHRyICgxKSwKK2FsdGhvdWdoIGl0IGNhbiBiZSBkaXNwbGF5ZWQgYnkKKy5CUiBsc2F0dHIgKDEpLgorLlBQCitBIGZpbGUgd2l0aCB0aGUgYGknIGF0dHJpYnV0ZSBjYW5ub3QgYmUgbW9kaWZpZWQ6IGl0IGNhbm5vdCBiZSBkZWxldGVkIG9yCityZW5hbWVkLCBubyBsaW5rIGNhbiBiZSBjcmVhdGVkIHRvIHRoaXMgZmlsZSBhbmQgbm8gZGF0YSBjYW4gYmUgd3JpdHRlbgordG8gdGhlIGZpbGUuICBPbmx5IHRoZSBzdXBlcnVzZXIgb3IgYSBwcm9jZXNzIHBvc3Nlc3NpbmcgdGhlCitDQVBfTElOVVhfSU1NVVRBQkxFIGNhcGFiaWxpdHkgY2FuIHNldCBvciBjbGVhciB0aGlzIGF0dHJpYnV0ZS4KKy5QUAorQSBmaWxlIHdpdGggdGhlIGBqJyBhdHRyaWJ1dGUgaGFzIGFsbCBvZiBpdHMgZGF0YSB3cml0dGVuIHRvIHRoZSBleHQzCitqb3VybmFsIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHRoZSBmaWxlIGl0c2VsZiwgaWYgdGhlIGZpbGVzeXN0ZW0gaXMKK21vdW50ZWQgd2l0aCB0aGUgImRhdGE9b3JkZXJlZCIgb3IgImRhdGE9d3JpdGViYWNrIiBvcHRpb25zLiAgV2hlbiB0aGUKK2ZpbGVzeXN0ZW0gaXMgbW91bnRlZCB3aXRoIHRoZSAiZGF0YT1qb3VybmFsIiBvcHRpb24gYWxsIGZpbGUgZGF0YQoraXMgYWxyZWFkeSBqb3VybmFsbGVkIGFuZCB0aGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiAgT25seQordGhlIHN1cGVydXNlciBvciBhIHByb2Nlc3MgcG9zc2Vzc2luZyB0aGUgQ0FQX1NZU19SRVNPVVJDRQorY2FwYWJpbGl0eSBjYW4gc2V0IG9yIGNsZWFyIHRoaXMgYXR0cmlidXRlLgorLlBQCitXaGVuIGEgZmlsZSB3aXRoIHRoZSBgcycgYXR0cmlidXRlIHNldCBpcyBkZWxldGVkLCBpdHMgYmxvY2tzIGFyZSB6ZXJvZWQKK2FuZCB3cml0dGVuIGJhY2sgdG8gdGhlIGRpc2suICBOb3RlOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHJlYWQgdGhlIGJ1Z3MKK2FuZCBsaW1pdGF0aW9ucyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KKy5QUAorV2hlbiBhIGZpbGUgd2l0aCB0aGUgYFMnIGF0dHJpYnV0ZSBzZXQgaXMgbW9kaWZpZWQsCit0aGUgY2hhbmdlcyBhcmUgd3JpdHRlbiBzeW5jaHJvbm91c2x5IG9uIHRoZSBkaXNrOyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KK3RoZSBgc3luYycgbW91bnQgb3B0aW9uIGFwcGxpZWQgdG8gYSBzdWJzZXQgb2YgdGhlIGZpbGVzLgorLlBQCitBIGRpcmVjdG9yeSB3aXRoIHRoZSAnVCcgYXR0cmlidXRlIHdpbGwgYmUgZGVlbWVkIHRvIGJlIHRoZSB0b3Agb2YKK2RpcmVjdG9yeSBoaWVyYXJjaGllcyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBPcmxvdiBibG9jayBhbGxvY2F0b3IuCitUaGlzIGlzIGEgaGludCB0byB0aGUgYmxvY2sgYWxsb2NhdG9yIHVzZWQgYnkgZXh0MyBhbmQgZXh0NCB0aGF0IHRoZQorc3ViZGlyZWN0b3JpZXMgdW5kZXIgdGhpcyBkaXJlY3RvcnkgYXJlIG5vdCByZWxhdGVkLCBhbmQgdGh1cyBzaG91bGQgYmUKK3NwcmVhZCBhcGFydCBmb3IgYWxsb2NhdGlvbiBwdXJwb3Nlcy4gICBGb3IgZXhhbXBsZSBpdCBpcyBhIHZlcnkgZ29vZAoraWRlYSB0byBzZXQgdGhlICdUJyBhdHRyaWJ1dGUgb24gdGhlIC9ob21lIGRpcmVjdG9yeSwgc28gdGhhdCAvaG9tZS9qb2huCithbmQgL2hvbWUvbWFyeSBhcmUgcGxhY2VkIGludG8gc2VwYXJhdGUgYmxvY2sgZ3JvdXBzLiAgRm9yIGRpcmVjdG9yaWVzCit3aGVyZSB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgT3Jsb3YgYmxvY2sgYWxsb2NhdG9yIHdpbGwgdHJ5IHRvCitncm91cCBzdWJkaXJlY3RvcmllcyBjbG9zZXIgdG9nZXRoZXIgd2hlcmUgcG9zc2libGUuCisuUFAKK0EgZmlsZSB3aXRoIHRoZSAndCcgYXR0cmlidXRlIHdpbGwgbm90IGhhdmUgYSBwYXJ0aWFsIGJsb2NrIGZyYWdtZW50IGF0Cit0aGUgZW5kIG9mIHRoZSBmaWxlIG1lcmdlZCB3aXRoIG90aGVyIGZpbGVzIChmb3IgdGhvc2UgZmlsZXN5c3RlbXMgd2hpY2gKK3N1cHBvcnQgdGFpbC1tZXJnaW5nKS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBhcHBsaWNhdGlvbnMgc3VjaCBhcyBMSUxPCit3aGljaCByZWFkIHRoZSBmaWxlc3lzdGVtIGRpcmVjdGx5LCBhbmQgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZCB0YWlsLW1lcmdlZAorZmlsZXMuICBOb3RlOiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZSBleHQyIG9yIGV4dDMgZmlsZXN5c3RlbXMgZG8gbm90CisoeWV0LCBleGNlcHQgaW4gdmVyeSBleHBlcmltZW50YWwgcGF0Y2hlcykgc3VwcG9ydCB0YWlsLW1lcmdpbmcuCisuUFAKK1doZW4gYSBmaWxlIHdpdGggdGhlIGB1JyBhdHRyaWJ1dGUgc2V0IGlzIGRlbGV0ZWQsIGl0cyBjb250ZW50cyBhcmUKK3NhdmVkLiAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXNrIGZvciBpdHMgdW5kZWxldGlvbi4gIE5vdGU6IHBsZWFzZQorbWFrZSBzdXJlIHRvIHJlYWQgdGhlIGJ1Z3MgYW5kIGxpbWl0YXRpb25zIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGlzCitkb2N1bWVudC4KKy5QUAorVGhlICdYJyBhdHRyaWJ1dGUgaXMgdXNlZCBieSB0aGUgZXhwZXJpbWVudGFsIGNvbXByZXNzaW9uIHBhdGNoZXMgdG8KK2luZGljYXRlIHRoYXQgYSByYXcgY29udGVudHMgb2YgYSBjb21wcmVzc2VkIGZpbGUgY2FuIGJlIGFjY2Vzc2VkCitkaXJlY3RseS4gIEl0IGN1cnJlbnRseSBtYXkgbm90IGJlIHNldCBvciByZXNldCB1c2luZworLkJSIGNoYXR0ciAoMSksCithbHRob3VnaCBpdCBjYW4gYmUgZGlzcGxheWVkIGJ5CisuQlIgbHNhdHRyICgxKS4KKy5QUAorVGhlICdaJyBhdHRyaWJ1dGUgaXMgdXNlZCBieSB0aGUgZXhwZXJpbWVudGFsIGNvbXByZXNzaW9uIHBhdGNoZXMgdG8KK2luZGljYXRlIGEgY29tcHJlc3NlZCBmaWxlIGlzIGRpcnR5LiAgSXQgbWF5IG5vdCBiZSBzZXQgb3IgcmVzZXQgdXNpbmcKKy5CUiBjaGF0dHIgKDEpLAorYWx0aG91Z2ggaXQgY2FuIGJlIGRpc3BsYXllZCBieQorLkJSIGxzYXR0ciAoMSkuCisuUFAKKy5TSCBBVVRIT1IKKy5CIGNoYXR0cgord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLlNIIEJVR1MgQU5EIExJTUlUQVRJT05TCitUaGUgYGMnLCAncycsICBhbmQgYHUnIGF0dHJpYnV0ZXMgYXJlIG5vdCBob25vcmVkCitieSB0aGUgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZXN5c3RlbXMgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIGN1cnJlbnQKK21haW5saW5lIExpbnV4IGtlcm5lbHMuCisuUFAKK1RoZSBgaicgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgYXMgZXh0My4KKy5QUAorVGhlIGBEJyBvcHRpb24gaXMgb25seSB1c2VmdWwgb24gTGludXgga2VybmVsIDIuNS4xOSBhbmQgbGF0ZXIuCisuU0ggQVZBSUxBQklMSVRZCisuQiBjaGF0dHIKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBsc2F0dHIgKDEpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9jaGF0dHIuYyBiL2UyZnNwcm9ncy9taXNjL2NoYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjdjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9jaGF0dHIuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIGNoYXR0ci5jCQktIENoYW5nZSBmaWxlIGF0dHJpYnV0ZXMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqIDkzLzExLzEzCS0gUmVwbGFjZSBzdGF0KCkgY2FsbHMgYnkgbHN0YXQoKSB0byBhdm9pZCBsb29wcworICogOTQvMDIvMjcJLSBJbnRlZ3JhdGVkIGluIFRlZCdzIGRpc3RyaWJ1dGlvbgorICogOTgvMTIvMjkJLSBJZ25vcmUgc3ltbGlua3Mgd2hlbiB3b3JraW5nIHJlY3Vyc2l2ZWx5IChHIE0gU2lwZSkKKyAqIDk4LzEyLzI5CS0gRGlzcGxheSB2ZXJzaW9uIGluZm8gb25seSB3aGVuIC1WIHNwZWNpZmllZCAoRyBNIFNpcGUpCisgKi8KKworI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEVYVDJGU19BVFRSKHgpCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTE5LCQkJLyogU28gd2UgY2FuIGNvbXBpbGUgZXZlbiB3aXRoIGdjYy13YXJuICovCisjIGlmZGVmIF9fU19JRkxOSworIyAgZGVmaW5lIFNfSVNMTksobW9kZSkJIF9fU19JU1RZUEUoKG1vZGUpLCBfX1NfSUZMTkspCisjIGVsc2UKKyMgIGRlZmluZSBTX0lTTE5LKG1vZGUpICAwCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJjaGF0dHIiOworCitzdGF0aWMgaW50IGFkZDsKK3N0YXRpYyBpbnQgcmVtOworc3RhdGljIGludCBzZXQ7CitzdGF0aWMgaW50IHNldF92ZXJzaW9uOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworCitzdGF0aWMgaW50IHJlY3Vyc2l2ZTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2lsZW50OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJmOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Y7CisKKyNpZmRlZiBfTEZTNjRfTEFSR0VGSUxFCisjZGVmaW5lIExTVEFUCQlsc3RhdDY0CisjZGVmaW5lIFNUUlVDVF9TVEFUCXN0cnVjdCBzdGF0NjQKKyNlbHNlCisjZGVmaW5lIExTVEFUCQlsc3RhdAorI2RlZmluZSBTVFJVQ1RfU1RBVAlzdHJ1Y3Qgc3RhdAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iKSwKKwkJcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdHJ1Y3QgZmxhZ3NfY2hhciB7CisJdW5zaWduZWQgbG9uZwlmbGFnOworCWNoYXIgCQlvcHRjaGFyOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFnc19jaGFyIGZsYWdzX2FycmF5W10gPSB7CisJeyBFWFQyX05PQVRJTUVfRkwsICdBJyB9LAorCXsgRVhUMl9TWU5DX0ZMLCAnUycgfSwKKwl7IEVYVDJfRElSU1lOQ19GTCwgJ0QnIH0sCisJeyBFWFQyX0FQUEVORF9GTCwgJ2EnIH0sCisJeyBFWFQyX0NPTVBSX0ZMLCAnYycgfSwKKwl7IEVYVDJfTk9EVU1QX0ZMLCAnZCcgfSwKKwl7IEVYVDRfRVhURU5UU19GTCwgJ2UnfSwKKwl7IEVYVDJfSU1NVVRBQkxFX0ZMLCAnaScgfSwKKwl7IEVYVDNfSk9VUk5BTF9EQVRBX0ZMLCAnaicgfSwKKwl7IEVYVDJfU0VDUk1fRkwsICdzJyB9LAorCXsgRVhUMl9VTlJNX0ZMLCAndScgfSwKKwl7IEVYVDJfTk9UQUlMX0ZMLCAndCcgfSwKKwl7IEVYVDJfVE9QRElSX0ZMLCAnVCcgfSwKKwl7IEZTX05PQ09XX0ZMLCAnQycgfSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ZsYWcoY2hhciBjKQoreworCWNvbnN0IHN0cnVjdCBmbGFnc19jaGFyICpmcDsKKworCWZvciAoZnAgPSBmbGFnc19hcnJheTsgZnAtPmZsYWcgIT0gMDsgZnArKykgeworCQlpZiAoZnAtPm9wdGNoYXIgPT0gYykKKwkJCXJldHVybiBmcC0+ZmxhZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkZWNvZGVfYXJnIChpbnQgKiBpLCBpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWNoYXIgKiBwOworCWNoYXIgKiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbDsKKworCXN3aXRjaCAoYXJndlsqaV1bMF0pCisJeworCWNhc2UgJy0nOgorCQlmb3IgKHAgPSAmYXJndlsqaV1bMV07ICpwOyBwKyspIHsKKwkJCWlmICgqcCA9PSAnUicpIHsKKwkJCQlyZWN1cnNpdmUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCpwID09ICdWJykgeworCQkJCXZlcmJvc2UgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCpwID09ICdmJykgeworCQkJCXNpbGVudCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKnAgPT0gJ3YnKSB7CisJCQkJKCppKSsrOworCQkJCWlmICgqaSA+PSBhcmdjKQorCQkJCQl1c2FnZSAoKTsKKwkJCQl2ZXJzaW9uID0gc3RydG9sIChhcmd2WyppXSwgJnRtcCwgMCk7CisJCQkJaWYgKCp0bXApIHsKKwkJCQkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQkJIF8oImJhZCB2ZXJzaW9uIC0gJXNcbiIpLAorCQkJCQkJIGFyZ3ZbKmldKTsKKwkJCQkJdXNhZ2UgKCk7CisJCQkJfQorCQkJCXNldF92ZXJzaW9uID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoZmwgPSBnZXRfZmxhZygqcCkpID09IDApCisJCQkJdXNhZ2UoKTsKKwkJCXJmIHw9IGZsOworCQkJcmVtID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlICcrJzoKKwkJYWRkID0gMTsKKwkJZm9yIChwID0gJmFyZ3ZbKmldWzFdOyAqcDsgcCsrKSB7CisJCQlpZiAoKGZsID0gZ2V0X2ZsYWcoKnApKSA9PSAwKQorCQkJCXVzYWdlKCk7CisJCQlhZiB8PSBmbDsKKwkJfQorCQlicmVhazsKKwljYXNlICc9JzoKKwkJc2V0ID0gMTsKKwkJZm9yIChwID0gJmFyZ3ZbKmldWzFdOyAqcDsgcCsrKSB7CisJCQlpZiAoKGZsID0gZ2V0X2ZsYWcoKnApKSA9PSAwKQorCQkJCXVzYWdlKCk7CisJCQlzZiB8PSBmbDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRU9GOworCQlicmVhazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2hhdHRyX2Rpcl9wcm9jKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRpcmVudCAqLCB2b2lkICopOworCitzdGF0aWMgaW50IGNoYW5nZV9hdHRyaWJ1dGVzKGNvbnN0IGNoYXIgKiBuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJU1RSVUNUX1NUQVQJc3Q7CisKKwlpZiAoTFNUQVQgKG5hbWUsICZzdCkgPT0gLTEpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCSBfKCJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIpLCBuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChmZ2V0ZmxhZ3MobmFtZSwgJmZsYWdzKSA9PSAtMSkgeworCQlpZiAoIXNpbGVudCkKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQkJXygid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIpLCBuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc2V0KSB7CisJCWlmICh2ZXJib3NlKSB7CisJCQlwcmludGYgKF8oIkZsYWdzIG9mICVzIHNldCBhcyAiKSwgbmFtZSk7CisJCQlwcmludF9mbGFncyAoc3Rkb3V0LCBzZiwgMCk7CisJCQlwcmludGYgKCJcbiIpOworCQl9CisJCWlmIChmc2V0ZmxhZ3MgKG5hbWUsIHNmKSA9PSAtMSkKKwkJCXBlcnJvciAobmFtZSk7CisJfSBlbHNlIHsKKwkJaWYgKHJlbSkKKwkJCWZsYWdzICY9IH5yZjsKKwkJaWYgKGFkZCkKKwkJCWZsYWdzIHw9IGFmOworCQlpZiAodmVyYm9zZSkgeworCQkJcHJpbnRmKF8oIkZsYWdzIG9mICVzIHNldCBhcyAiKSwgbmFtZSk7CisJCQlwcmludF9mbGFncyhzdGRvdXQsIGZsYWdzLCAwKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQlmbGFncyAmPSB+RVhUMl9ESVJTWU5DX0ZMOworCQlpZiAoZnNldGZsYWdzKG5hbWUsIGZsYWdzKSA9PSAtMSkgeworCQkJaWYgKCFzaWxlbnQpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJCQlfKCJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIiksCisJCQkJCQluYW1lKTsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoc2V0X3ZlcnNpb24pIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGYgKF8oIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIiksIG5hbWUsIHZlcnNpb24pOworCQlpZiAoZnNldHZlcnNpb24gKG5hbWUsIHZlcnNpb24pID09IC0xKSB7CisJCQlpZiAoIXNpbGVudCkKKwkJCQljb21fZXJyIChwcm9ncmFtX25hbWUsIGVycm5vLAorCQkJCQkgXygid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIiksCisJCQkJCSBuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSAmJiByZWN1cnNpdmUpCisJCXJldHVybiBpdGVyYXRlX29uX2RpciAobmFtZSwgY2hhdHRyX2Rpcl9wcm9jLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGF0dHJfZGlyX3Byb2MgKGNvbnN0IGNoYXIgKiBkaXJfbmFtZSwgc3RydWN0IGRpcmVudCAqIGRlLAorCQkJICAgIHZvaWQgKiBwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzdHJjbXAgKGRlLT5kX25hbWUsICIuIikgJiYgc3RyY21wIChkZS0+ZF9uYW1lLCAiLi4iKSkgeworCSAgICAgICAgY2hhciAqcGF0aDsKKworCQlwYXRoID0gbWFsbG9jKHN0cmxlbiAoZGlyX25hbWUpICsgMSArIHN0cmxlbiAoZGUtPmRfbmFtZSkgKyAxKTsKKwkJaWYgKCFwYXRoKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlICIKKwkJCQkgICJpbiBjaGF0dHJfZGlyX3Byb2MiKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3ByaW50ZihwYXRoLCAiJXMvJXMiLCBkaXJfbmFtZSwgZGUtPmRfbmFtZSk7CisJCXJldCA9IGNoYW5nZV9hdHRyaWJ1dGVzKHBhdGgpOworCQlmcmVlKHBhdGgpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwlpbnQgaSwgajsKKwlpbnQgZW5kX2FyZyA9IDA7CisJaW50IGVyciwgcmV0dmFsID0gMDsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlpZiAoYXJnYyAmJiAqYXJndikKKwkJcHJvZ3JhbV9uYW1lID0gKmFyZ3Y7CisJaSA9IDE7CisJd2hpbGUgKGkgPCBhcmdjICYmICFlbmRfYXJnKSB7CisJCS8qICctLScgYXJnIHNob3VsZCBlbmQgb3B0aW9uIHByb2Nlc3NpbmcgKi8KKwkJaWYgKHN0cmNtcChhcmd2W2ldLCAiLS0iKSA9PSAwKSB7CisJCQlpKys7CisJCQllbmRfYXJnID0gMTsKKwkJfSBlbHNlIGlmIChkZWNvZGVfYXJnICgmaSwgYXJnYywgYXJndikgPT0gRU9GKQorCQkJZW5kX2FyZyA9IDE7CisJCWVsc2UKKwkJCWkrKzsKKwl9CisJaWYgKGkgPj0gYXJnYykKKwkJdXNhZ2UgKCk7CisJaWYgKHNldCAmJiAoYWRkIHx8IHJlbSkpIHsKKwkJZnB1dHMoXygiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iKSwgc3RkZXJyKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmICgocmYgJiBhZikgIT0gMCkgeworCQlmcHV0cygiQ2FuJ3QgYm90aCBzZXQgYW5kIHVuc2V0IHNhbWUgZmxhZy5cbiIsIHN0ZGVycik7CisJCWV4aXQgKDEpOworCX0KKwlpZiAoIShhZGQgfHwgcmVtIHx8IHNldCB8fCBzZXRfdmVyc2lvbikpIHsKKwkJZnB1dHMoXygiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iKSwgc3RkZXJyKTsKKwkJZXhpdCAoMSk7CisJfQorCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmIChzdGRlcnIsICJjaGF0dHIgJXMgKCVzKVxuIiwKKwkJCSBFMkZTUFJPR1NfVkVSU0lPTiwgRTJGU1BST0dTX0RBVEUpOworCWZvciAoaiA9IGk7IGogPCBhcmdjOyBqKyspIHsKKwkJZXJyID0gY2hhbmdlX2F0dHJpYnV0ZXMgKGFyZ3Zbal0pOworCQlpZiAoZXJyKQorCQkJcmV0dmFsID0gMTsKKwl9CisJZXhpdChyZXR2YWwpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZGVmYXVsdF9wcm9maWxlLmMgYi9lMmZzcHJvZ3MvbWlzYy9kZWZhdWx0X3Byb2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTMxMmZmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZGVmYXVsdF9wcm9maWxlLmMKQEAgLTAsMCArMSw1NSBAQAorY29uc3QgY2hhciAqbWtlMmZzX2RlZmF1bHRfcHJvZmlsZSA9IAorICAiW2RlZmF1bHRzXVxuIgorICAiCWJhc2VfZmVhdHVyZXMgPSBzcGFyc2Vfc3VwZXIsZmlsZXR5cGUscmVzaXplX2lub2RlLGRpcl9pbmRleCxleHRfYXR0clxuIgorICAiCWRlZmF1bHRfbW50b3B0cyA9IGFjbCx1c2VyX3hhdHRyXG4iCisgICIJZW5hYmxlX3BlcmlvZGljX2ZzY2sgPSAwXG4iCisgICIJYmxvY2tzaXplID0gNDA5NlxuIgorICAiCWlub2RlX3NpemUgPSAyNTZcbiIKKyAgIglpbm9kZV9yYXRpbyA9IDE2Mzg0XG4iCisgICJcbiIKKyAgIltmc190eXBlc11cbiIKKyAgIglleHQzID0ge1xuIgorICAiCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsXG4iCisgICIJfVxuIgorICAiCWV4dDQgPSB7XG4iCisgICIJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemVcbiIKKyAgIgkJYXV0b182NC1iaXRfc3VwcG9ydCA9IDFcbiIKKyAgIgkJaW5vZGVfc2l6ZSA9IDI1NlxuIgorICAiCX1cbiIKKyAgIglleHQ0ZGV2ID0ge1xuIgorICAiCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsLGV4dGVudCxodWdlX2ZpbGUsZmxleF9iZyx1bmluaXRfYmcsZGlyX25saW5rLGV4dHJhX2lzaXplXG4iCisgICIJCWlub2RlX3NpemUgPSAyNTZcbiIKKyAgIgkJb3B0aW9ucyA9IHRlc3RfZnM9MVxuIgorICAiCX1cbiIKKyAgIglzbWFsbCA9IHtcbiIKKyAgIgkJYmxvY2tzaXplID0gMTAyNFxuIgorICAiCQlpbm9kZV9zaXplID0gMTI4XG4iCisgICIJCWlub2RlX3JhdGlvID0gNDA5NlxuIgorICAiCX1cbiIKKyAgIglmbG9wcHkgPSB7XG4iCisgICIJCWJsb2Nrc2l6ZSA9IDEwMjRcbiIKKyAgIgkJaW5vZGVfc2l6ZSA9IDEyOFxuIgorICAiCQlpbm9kZV9yYXRpbyA9IDgxOTJcbiIKKyAgIgl9XG4iCisgICIJYmlnID0ge1xuIgorICAiCQlpbm9kZV9yYXRpbyA9IDMyNzY4XG4iCisgICIJfVxuIgorICAiCWh1Z2UgPSB7XG4iCisgICIJCWlub2RlX3JhdGlvID0gNjU1MzZcbiIKKyAgIgl9XG4iCisgICIJbmV3cyA9IHtcbiIKKyAgIgkJaW5vZGVfcmF0aW8gPSA0MDk2XG4iCisgICIJfVxuIgorICAiCWxhcmdlZmlsZSA9IHtcbiIKKyAgIgkJaW5vZGVfcmF0aW8gPSAxMDQ4NTc2XG4iCisgICIJCWJsb2Nrc2l6ZSA9IC0xXG4iCisgICIJfVxuIgorICAiCWxhcmdlZmlsZTQgPSB7XG4iCisgICIJCWlub2RlX3JhdGlvID0gNDE5NDMwNFxuIgorICAiCQlibG9ja3NpemUgPSAtMVxuIgorICAiCX1cbiIKKyAgIglodXJkID0ge1xuIgorICAiCSAgICAgYmxvY2tzaXplID0gNDA5NlxuIgorICAiCSAgICAgaW5vZGVfc2l6ZSA9IDEyOFxuIgorICAiCX1cbiIKKzsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2R1bXBlMmZzLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9kdW1wZTJmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmFmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9kdW1wZTJmcy44LmluCkBAIC0wLDAgKzEsODcgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDE5OTUgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuVEggRFVNUEUyRlMgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZHVtcGUyZnMgXC0gZHVtcCBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uCisuU0ggU1lOT1BTSVMKKy5CIGR1bXBlMmZzCitbCisuQiBcLWJmaGl4VgorXQorWworLkIgXC1vIHN1cGVyYmxvY2s9XGZJc3VwZXJibG9jaworXQorWworLkIgXC1vIGJsb2Nrc2l6ZT1cZklibG9ja3NpemUKK10KKy5JIGRldmljZQorLlNIIERFU0NSSVBUSU9OCisuQiBkdW1wZTJmcworcHJpbnRzIHRoZSBzdXBlciBibG9jayBhbmQgYmxvY2tzIGdyb3VwIGluZm9ybWF0aW9uIGZvciB0aGUgZmlsZXN5c3RlbQorcHJlc2VudCBvbgorLkkgZGV2aWNlLgorLlBQCisuQiBOb3RlOgorV2hlbiB1c2VkIHdpdGggYSBtb3VudGVkIGZpbGVzeXN0ZW0sIHRoZSBwcmludGVkCitpbmZvcm1hdGlvbiBtYXkgYmUgb2xkIG9yIGluY29uc2lzdGVudC4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtYgorcHJpbnQgdGhlIGJsb2NrcyB3aGljaCBhcmUgcmVzZXJ2ZWQgYXMgYmFkIGluIHRoZSBmaWxlc3lzdGVtLgorLlRQCisuQiBcLW8gc3VwZXJibG9jaz1cZklzdXBlcmJsb2NrCit1c2UgdGhlIGJsb2NrCisuSSBzdXBlcmJsb2NrCit3aGVuIGV4YW1pbmluZyB0aGUgZmlsZXN5c3RlbS4KK1RoaXMgb3B0aW9uIGlzIG5vdCB1c3VhbGx5IG5lZWRlZCBleGNlcHQgYnkgYSBmaWxlc3lzdGVtIHdpemFyZCB3aG8gCitpcyBleGFtaW5pbmcgdGhlIHJlbWFpbnMgb2YgYSB2ZXJ5IGJhZGx5IGNvcnJ1cHRlZCBmaWxlc3lzdGVtLgorLlRQCisuQiBcLW8gYmxvY2tzaXplPVxmSWJsb2Nrc2l6ZQordXNlIGJsb2NrcyBvZgorLkkgYmxvY2tzaXplCitieXRlcyB3aGVuIGV4YW1pbmluZyB0aGUgZmlsZXN5c3RlbS4KK1RoaXMgb3B0aW9uIGlzIG5vdCB1c3VhbGx5IG5lZWRlZCBleGNlcHQgYnkgYSBmaWxlc3lzdGVtIHdpemFyZCB3aG8gCitpcyBleGFtaW5pbmcgdGhlIHJlbWFpbnMgb2YgYSB2ZXJ5IGJhZGx5IGNvcnJ1cHRlZCBmaWxlc3lzdGVtLgorLlRQCisuQiBcLWYKK2ZvcmNlIGR1bXBlMmZzIHRvIGRpc3BsYXkgYSBmaWxlc3lzdGVtIGV2ZW4gdGhvdWdoIGl0IG1heSBoYXZlIHNvbWUgCitmaWxlc3lzdGVtIGZlYXR1cmUgZmxhZ3Mgd2hpY2ggZHVtcGUyZnMgbWF5IG5vdCB1bmRlcnN0YW5kIChhbmQgd2hpY2gKK2NhbiBjYXVzZSBzb21lIG9mIGR1bXBlMmZzJ3MgZGlzcGxheSB0byBiZSBzdXNwZWN0KS4KKy5UUCAKKy5CIFwtaAorb25seSBkaXNwbGF5IHRoZSBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGFuZCBub3QgYW55IG9mIHRoZSBibG9jaworZ3JvdXAgZGVzY3JpcHRvciBkZXRhaWwgaW5mb3JtYXRpb24uCisuVFAKKy5CIFwtaQorZGlzcGxheSB0aGUgZmlsZXN5c3RlbSBkYXRhIGZyb20gYW4gaW1hZ2UgZmlsZSBjcmVhdGVkIGJ5IAorLkJSIGUyaW1hZ2UgLAordXNpbmcgCisuSSBkZXZpY2UKK2FzIHRoZSBwYXRobmFtZSB0byB0aGUgaW1hZ2UgZmlsZS4KKy5UUAorLkIgXC14CitwcmludCB0aGUgZGV0YWlsZWQgZ3JvdXAgaW5mb3JtYXRpb24gYmxvY2sgbnVtYmVycyBpbiBoZXhhZGVjaW1hbCBmb3JtYXQKKy5UUAorLkIgXC1WCitwcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgCisuQiBkdW1wZTJmcworYW5kIGV4aXQuCisuU0ggQlVHUworWW91IG5lZWQgdG8ga25vdyB0aGUgcGh5c2ljYWwgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUKK291dHB1dC4KKy5TSCBBVVRIT1IKKy5CIGR1bXBlMmZzIAord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLlNIIEFWQUlMQUJJTElUWQorLkIgZHVtcGUyZnMKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbSAKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIFNFRSBBTFNPCisuQlIgZTJmc2NrICg4KSwKKy5CUiBta2UyZnMgKDgpLAorLkJSIHR1bmUyZnMgKDgpLgorLkJSIGV4dDQgKDUpCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2R1bXBlMmZzLmMgYi9lMmZzcHJvZ3MvbWlzYy9kdW1wZTJmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNWQyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9kdW1wZTJmcy5jCkBAIC0wLDAgKzEsNjM5IEBACisvKgorICogZHVtcGUyZnMuYwkJLSBMaXN0IHRoZSBjb250cm9sIHN0cnVjdHVyZXMgb2YgYSBzZWNvbmQKKyAqCQkJICBleHRlbmRlZCBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0ICBSZW15IENhcmQgPGNhcmRAbWFzaS5pYnAuZnI+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYm9yYXRvaXJlIE1BU0ksIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqIENvcHlyaWdodCAxOTk1LCAxOTk2LCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDk0LzAxLzA5CS0gQ3JlYXRpb24KKyAqIDk0LzAyLzI3CS0gUG9ydGVkIHRvIHVzZSB0aGUgZXh0MmZzIGxpYnJhcnkKKyAqLworCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImpmc191c2VyLmgiCisjaW5jbHVkZSA8dXVpZC91dWlkLmg+CisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjZGVmaW5lIGluX3VzZShtLCB4KQkoZXh0MmZzX3Rlc3RfYml0ICgoeCksIChtKSkpCisKK3N0YXRpYyBjb25zdCBjaGFyICogcHJvZ3JhbV9uYW1lID0gImR1bXBlMmZzIjsKK3N0YXRpYyBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworc3RhdGljIGludCBoZXhfZm9ybWF0ID0gMDsKK3N0YXRpYyBpbnQgYmxvY2tzNjQgPSAwOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYgKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gIgorCQkgIlstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIiksIHByb2dyYW1fbmFtZSk7CisJZXhpdCAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X251bWJlcih1bnNpZ25lZCBsb25nIGxvbmcgbnVtKQoreworCWlmIChoZXhfZm9ybWF0KSB7CisJCWlmIChibG9ja3M2NCkKKwkJCXByaW50ZigiMHglMDhsbHgiLCBudW0pOworCQllbHNlCisJCQlwcmludGYoIjB4JTA0bGx4IiwgbnVtKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbGx1IiwgbnVtKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcmFuZ2UodW5zaWduZWQgbG9uZyBsb25nIGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBiKQoreworCWlmIChoZXhfZm9ybWF0KSB7CisJCWlmIChibG9ja3M2NCkKKwkJCXByaW50ZigiMHglMDhsbHgtMHglMDhsbHgiLCBhLCBiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIweCUwNGxseC0weCUwNGxseCIsIGEsIGIpOworCX0gZWxzZQorCQlwcmludGYoIiVsbHUtJWxsdSIsIGEsIGIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9mcmVlKHVuc2lnbmVkIGxvbmcgZ3JvdXAsIGNoYXIgKiBiaXRtYXAsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG51bSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCByYXRpbykKK3sKKwlpbnQgcCA9IDA7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgajsKKworCW9mZnNldCAvPSByYXRpbzsKKwlvZmZzZXQgKz0gZ3JvdXAgKiBudW07CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlpZiAoIWluX3VzZSAoYml0bWFwLCBpKSkKKwkJeworCQkJaWYgKHApCisJCQkJcHJpbnRmICgiLCAiKTsKKwkJCXByaW50X251bWJlcigoaSArIG9mZnNldCkgKiByYXRpbyk7CisJCQlmb3IgKGogPSBpOyBqIDwgbnVtICYmICFpbl91c2UgKGJpdG1hcCwgaik7IGorKykKKwkJCQk7CisJCQlpZiAoLS1qICE9IGkpIHsKKwkJCQlmcHV0YygnLScsIHN0ZG91dCk7CisJCQkJcHJpbnRfbnVtYmVyKChqICsgb2Zmc2V0KSAqIHJhdGlvKTsKKwkJCQlpID0gajsKKwkJCX0KKwkJCXAgPSAxOworCQl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2JnX29wdChpbnQgYmdfZmxhZ3MsIGludCBtYXNrLAorCQkJICBjb25zdCBjaGFyICpzdHIsIGludCAqZmlyc3QpCit7CisJaWYgKGJnX2ZsYWdzICYgbWFzaykgeworCQlpZiAoKmZpcnN0KSB7CisJCQlmcHV0cygiIFsiLCBzdGRvdXQpOworCQkJKmZpcnN0ID0gMDsKKwkJfSBlbHNlCisJCQlmcHV0cygiLCAiLCBzdGRvdXQpOworCQlmcHV0cyhzdHIsIHN0ZG91dCk7CisJfQorfQorc3RhdGljIHZvaWQgcHJpbnRfYmdfb3B0cyhleHQyX2ZpbHN5cyBmcywgZGdycF90IGkpCit7CisJaW50IGZpcnN0ID0gMSwgYmdfZmxhZ3MgPSAwOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pCisJCWJnX2ZsYWdzID0gZXh0MmZzX2JnX2ZsYWdzKGZzLCBpKTsKKworCXByaW50X2JnX29wdChiZ19mbGFncywgRVhUMl9CR19JTk9ERV9VTklOSVQsICJJTk9ERV9VTklOSVQiLAorIAkJICAgICAmZmlyc3QpOworCXByaW50X2JnX29wdChiZ19mbGFncywgRVhUMl9CR19CTE9DS19VTklOSVQsICJCTE9DS19VTklOSVQiLAorIAkJICAgICAmZmlyc3QpOworCXByaW50X2JnX29wdChiZ19mbGFncywgRVhUMl9CR19JTk9ERV9aRVJPRUQsICJJVEFCTEVfWkVST0VEIiwKKyAJCSAgICAgJmZpcnN0KTsKKwlpZiAoIWZpcnN0KQorCQlmcHV0YygnXScsIHN0ZG91dCk7CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYmdfcmVsX29mZnNldChleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBibG9jaywgaW50IGl0YWJsZSwKKwkJCQlibGs2NF90IGZpcnN0X2Jsb2NrLCBibGs2NF90IGxhc3RfYmxvY2spCit7CisJaWYgKChibG9jayA+PSBmaXJzdF9ibG9jaykgJiYgKGJsb2NrIDw9IGxhc3RfYmxvY2spKSB7CisJCWlmIChpdGFibGUgJiYgYmxvY2sgPT0gZmlyc3RfYmxvY2spCisJCQlyZXR1cm47CisJCXByaW50ZigiICgrJXUpIiwgKHVuc2lnbmVkKShibG9jayAtIGZpcnN0X2Jsb2NrKSk7CisJfSBlbHNlIGlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSB7CisJCWRncnBfdCBmbGV4X2dycCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibG9jayk7CisJCXByaW50ZigiIChiZyAjJXUgKyAldSkiLCBmbGV4X2dycCwKKwkJICAgICAgICh1bnNpZ25lZCkoYmxvY2stZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcyxmbGV4X2dycCkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfZGVzYyAoZXh0Ml9maWxzeXMgZnMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCWJsazY0X3QJZmlyc3RfYmxvY2ssIGxhc3RfYmxvY2s7CisJYmxrNjRfdAlzdXBlcl9ibGssIG9sZF9kZXNjX2JsaywgbmV3X2Rlc2NfYmxrOworCWNoYXIgKmJsb2NrX2JpdG1hcD1OVUxMLCAqaW5vZGVfYml0bWFwPU5VTEw7CisJY29uc3QgY2hhciAqdW5pdHMgPSBfKCJibG9ja3MiKTsKKwlpbnQgaW5vZGVfYmxvY2tzX3Blcl9ncm91cCwgb2xkX2Rlc2NfYmxvY2tzLCByZXNlcnZlZF9nZHQ7CisJaW50CQlibG9ja19uYnl0ZXMsIGlub2RlX25ieXRlczsKKwlpbnQgaGFzX3N1cGVyOworCWJsazY0X3QJCWJsa19pdHIgPSBFWFQyRlNfQjJDKGZzLCBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJZXh0Ml9pbm9fdAlpbm9faXRyID0gMTsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykpCisJCXVuaXRzID0gXygiY2x1c3RlcnMiKTsKKworCWJsb2NrX25ieXRlcyA9IEVYVDJfQ0xVU1RFUlNfUEVSX0dST1VQKGZzLT5zdXBlcikgLyA4OworCWlub2RlX25ieXRlcyA9IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpIC8gODsKKworCWlmIChmcy0+YmxvY2tfbWFwKQorCQlibG9ja19iaXRtYXAgPSBtYWxsb2MoYmxvY2tfbmJ5dGVzKTsKKwlpZiAoZnMtPmlub2RlX21hcCkKKwkJaW5vZGVfYml0bWFwID0gbWFsbG9jKGlub2RlX25ieXRlcyk7CisKKwlpbm9kZV9ibG9ja3NfcGVyX2dyb3VwID0gKChmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCQkJICAgRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikpICsKKwkJCQkgIEVYVDJfQkxPQ0tfU0laRShmcy0+c3VwZXIpIC0gMSkgLworCQkJCSBFWFQyX0JMT0NLX1NJWkUoZnMtPnN1cGVyKTsKKwlyZXNlcnZlZF9nZHQgPSBmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworCWZpcnN0X2Jsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCWVsc2UKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisJCWZpcnN0X2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgaSk7CisJCWxhc3RfYmxvY2sgPSBleHQyZnNfZ3JvdXBfbGFzdF9ibG9jazIoZnMsIGkpOworCisJCWV4dDJmc19zdXBlcl9hbmRfYmdkX2xvYzIoZnMsIGksICZzdXBlcl9ibGssCisJCQkJCSAgJm9sZF9kZXNjX2JsaywgJm5ld19kZXNjX2JsaywgMCk7CisKKwkJcHJpbnRmIChfKCJHcm91cCAlbHU6IChCbG9ja3MgIiksIGkpOworCQlwcmludF9yYW5nZShmaXJzdF9ibG9jaywgbGFzdF9ibG9jayk7CisJCWZwdXRzKCIpIiwgc3Rkb3V0KTsKKwkJcHJpbnRfYmdfb3B0cyhmcywgaSk7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSB7CisJCQl1bnNpZ25lZCBjc3VtID0gZXh0MmZzX2JnX2NoZWNrc3VtKGZzLCBpKTsKKwkJCXVuc2lnbmVkIGV4cF9jc3VtID0gZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bShmcywgaSk7CisKKwkJCXByaW50ZihfKCIgIENoZWNrc3VtIDB4JTA0eCIpLCBjc3VtKTsKKwkJCWlmIChjc3VtICE9IGV4cF9jc3VtKQorCQkJCXByaW50ZihfKCIgKEVYUEVDVEVEIDB4JTA0eCkiKSwgZXhwX2NzdW0pOworCQkJcHJpbnRmKF8oIiwgdW51c2VkIGlub2RlcyAldVxuIiksCisJCQkgICAgICAgZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpKTsKKwkJfQorCQloYXNfc3VwZXIgPSAoKGk9PTApIHx8IHN1cGVyX2Jsayk7CisJCWlmIChoYXNfc3VwZXIpIHsKKwkJCXByaW50ZiAoXygiICAlcyBzdXBlcmJsb2NrIGF0ICIpLAorCQkJCWkgPT0gMCA/IF8oIlByaW1hcnkiKSA6IF8oIkJhY2t1cCIpKTsKKwkJCXByaW50X251bWJlcihzdXBlcl9ibGspOworCQl9CisJCWlmIChvbGRfZGVzY19ibGspIHsKKwkJCXByaW50ZigiJXMiLCBfKCIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIpKTsKKwkJCXByaW50X3JhbmdlKG9sZF9kZXNjX2JsaywKKwkJCQkgICAgb2xkX2Rlc2NfYmxrICsgb2xkX2Rlc2NfYmxvY2tzIC0gMSk7CisJCQlpZiAocmVzZXJ2ZWRfZ2R0KSB7CisJCQkJcHJpbnRmKCIlcyIsIF8oIlxuICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIpKTsKKwkJCQlwcmludF9yYW5nZShvbGRfZGVzY19ibGsgKyBvbGRfZGVzY19ibG9ja3MsCisJCQkJCSAgICBvbGRfZGVzY19ibGsgKyBvbGRfZGVzY19ibG9ja3MgKworCQkJCQkgICAgcmVzZXJ2ZWRfZ2R0IC0gMSk7CisJCQl9CisJCX0gZWxzZSBpZiAobmV3X2Rlc2NfYmxrKSB7CisJCQlmcHV0YyhoYXNfc3VwZXIgPyAnLCcgOiAnICcsIHN0ZG91dCk7CisJCQlwcmludGYoIiVzIiwgXygiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIikpOworCQkJcHJpbnRfbnVtYmVyKG5ld19kZXNjX2Jsayk7CisJCQloYXNfc3VwZXIrKzsKKwkJfQorCQlpZiAoaGFzX3N1cGVyKQorCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJZnB1dHMoXygiICBCbG9jayBiaXRtYXAgYXQgIiksIHN0ZG91dCk7CisJCXByaW50X251bWJlcihleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpOworCQlwcmludF9iZ19yZWxfb2Zmc2V0KGZzLCBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSksIDAsCisJCQkJICAgIGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrKTsKKwkJZnB1dHMoXygiLCBJbm9kZSBiaXRtYXAgYXQgIiksIHN0ZG91dCk7CisJCXByaW50X251bWJlcihleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpOworCQlwcmludF9iZ19yZWxfb2Zmc2V0KGZzLCBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSksIDAsCisJCQkJICAgIGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrKTsKKwkJZnB1dHMoXygiXG4gIElub2RlIHRhYmxlIGF0ICIpLCBzdGRvdXQpOworCQlwcmludF9yYW5nZShleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSwKKwkJCSAgICBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSArCisJCQkgICAgaW5vZGVfYmxvY2tzX3Blcl9ncm91cCAtIDEpOworCQlwcmludF9iZ19yZWxfb2Zmc2V0KGZzLCBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSwgMSwKKwkJCQkgICAgZmlyc3RfYmxvY2ssIGxhc3RfYmxvY2spOworCQlwcmludGYgKF8oIlxuICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgIgorCQkJICAiJXUgZGlyZWN0b3JpZXMlcyIpLAorCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBpKSwgdW5pdHMsCisJCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnQoZnMsIGkpLAorCQkJZXh0MmZzX2JnX3VzZWRfZGlyc19jb3VudChmcywgaSksCisJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkgPyAiIiA6ICJcbiIpOworCQlpZiAoZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpKQorCQkJcHJpbnRmIChfKCIsICV1IHVudXNlZCBpbm9kZXNcbiIpLAorCQkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkKGZzLCBpKSk7CisJCWlmIChibG9ja19iaXRtYXApIHsKKwkJCWZwdXRzKF8oIiAgRnJlZSBibG9ja3M6ICIpLCBzdGRvdXQpOworCQkJcmV0dmFsID0gZXh0MmZzX2dldF9ibG9ja19iaXRtYXBfcmFuZ2UyKGZzLT5ibG9ja19tYXAsCisJCQkJIGJsa19pdHIsIGJsb2NrX25ieXRlcyA8PCAzLCBibG9ja19iaXRtYXApOworCQkJaWYgKHJldHZhbCkKKwkJCQljb21fZXJyKCJsaXN0X2Rlc2MiLCByZXR2YWwsCisJCQkJCSJ3aGlsZSByZWFkaW5nIGJsb2NrIGJpdG1hcCIpOworCQkJZWxzZQorCQkJCXByaW50X2ZyZWUoaSwgYmxvY2tfYml0bWFwLAorCQkJCQkgICBmcy0+c3VwZXItPnNfY2x1c3RlcnNfcGVyX2dyb3VwLAorCQkJCQkgICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaywKKwkJCQkJICAgRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKTsKKwkJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJCQlibGtfaXRyICs9IGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXA7CisJCX0KKwkJaWYgKGlub2RlX2JpdG1hcCkgeworCQkJZnB1dHMoXygiICBGcmVlIGlub2RlczogIiksIHN0ZG91dCk7CisJCQlyZXR2YWwgPSBleHQyZnNfZ2V0X2lub2RlX2JpdG1hcF9yYW5nZTIoZnMtPmlub2RlX21hcCwKKwkJCQkgaW5vX2l0ciwgaW5vZGVfbmJ5dGVzIDw8IDMsIGlub2RlX2JpdG1hcCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWNvbV9lcnIoImxpc3RfZGVzYyIsIHJldHZhbCwKKwkJCQkJIndoaWxlIHJlYWRpbmcgaW5vZGUgYml0bWFwIik7CisJCQllbHNlCisJCQkJcHJpbnRfZnJlZShpLCBpbm9kZV9iaXRtYXAsCisJCQkJCSAgIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwLAorCQkJCQkgICAxLCAxKTsKKwkJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJCQlpbm9faXRyICs9IGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwOworCQl9CisJfQorCWlmIChibG9ja19iaXRtYXApCisJCWZyZWUoYmxvY2tfYml0bWFwKTsKKwlpZiAoaW5vZGVfYml0bWFwKQorCQlmcmVlKGlub2RlX2JpdG1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfYmFkX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywgaW50IGR1bXApCit7CisJYmFkYmxvY2tzX2xpc3QJCWJiX2xpc3QgPSAwOworCWJhZGJsb2Nrc19pdGVyYXRlCWJiX2l0ZXI7CisJYmxrX3QJCQlibGs7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY29uc3QgY2hhcgkJKmhlYWRlciwgKmZtdDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX2lub2RlKGZzLCAmYmJfbGlzdCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9iYl9pbm9kZSIsIHJldHZhbCwgMCk7CisJCXJldHVybjsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4oYmJfbGlzdCwgJmJiX2l0ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfYmVnaW4iLCByZXR2YWwsCisJCQkiJXMiLCBfKCJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZHVtcCkgeworCQloZWFkZXIgPSBmbXQgPSAiJXVcbiI7CisJfSBlbHNlIHsKKwkJaGVhZGVyID0gIF8oIkJhZCBibG9ja3M6ICV1Iik7CisJCWZtdCA9ICIsICV1IjsKKwl9CisJd2hpbGUgKGV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlKGJiX2l0ZXIsICZibGspKSB7CisJCXByaW50ZihoZWFkZXIgPyBoZWFkZXIgOiBmbXQsIGJsayk7CisJCWhlYWRlciA9IDA7CisJfQorCWV4dDJmc19iYWRibG9ja3NfbGlzdF9pdGVyYXRlX2VuZChiYl9pdGVyKTsKKwlpZiAoIWR1bXApCisJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmJfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2lubGluZV9qb3VybmFsX2luZm9ybWF0aW9uKGV4dDJfZmlsc3lzIGZzKQoreworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqc2I7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXh0Ml9maWxlX3QJCWpvdXJuYWxfZmlsZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlpbm9fdAkJCWlubyA9IGZzLT5zdXBlci0+c19qb3VybmFsX2ludW07CisJY2hhcgkJCWJ1ZlsxMDI0XTsKKwlfX3UzMgkJCSptYXNrX3B0ciwgbWFzaywgbTsKKwlpbnQJCQlpLCBqLCBzaXplLCBwcmludGVkID0gMDsKKworCWlmIChmcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfSU1BR0VfRklMRSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBpbm8sICAmaW5vZGUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbjIoZnMsIGlubywgJmlub2RlLCAwLCAmam91cm5hbF9maWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoam91cm5hbF9maWxlLCBidWYsIHNpemVvZihidWYpLCAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siKSk7CisJCWV4aXQoMSk7CisJfQorCWV4dDJmc19maWxlX2Nsb3NlKGpvdXJuYWxfZmlsZSk7CisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwlpZiAoYmUzMl90b19jcHUoanNiLT5zX2hlYWRlci5oX21hZ2ljKSAhPSBKRlNfTUFHSUNfTlVNQkVSKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiSm91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBpbnZhbGlkIVxuIikpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoIiVzIiwgXygiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIpKTsKKwlmb3IgKGk9MCwgbWFza19wdHI9JmpzYi0+c19mZWF0dXJlX2NvbXBhdDsgaSA8MzsgaSsrLG1hc2tfcHRyKyspIHsKKwkJbWFzayA9IGJlMzJfdG9fY3B1KCptYXNrX3B0cik7CisJCWZvciAoaj0wLG09MTsgaiA8IDMyOyBqKyssIG08PD0xKSB7CisJCQlpZiAobWFzayAmIG0pIHsKKwkJCQlwcmludGYoIiAlcyIsIGUycF9qcm5sX2ZlYXR1cmUyc3RyaW5nKGksIG0pKTsKKwkJCQlwcmludGVkKys7CisJCQl9CisJCX0KKwl9CisJaWYgKHByaW50ZWQgPT0gMCkKKwkJcHJpbnRmKCIgKG5vbmUpIik7CisJcHJpbnRmKCJcbiIpOworCWZwdXRzKF8oIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIiksIHN0ZG91dCk7CisJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpICYmCisJICAgIChpbm9kZS5pX2ZsYWdzICYgRVhUNF9IVUdFX0ZJTEVfRkwpKQorCQlzaXplID0gaW5vZGUuaV9ibG9ja3MgLyAoZnMtPmJsb2Nrc2l6ZSAvIDEwMjQpOworCWVsc2UKKwkJc2l6ZSA9IGlub2RlLmlfYmxvY2tzID4+IDE7CisJaWYgKHNpemUgPCA4MTkyKQorCQlwcmludGYoIiV1a1xuIiwgc2l6ZSk7CisJZWxzZQorCQlwcmludGYoIiV1TVxuIiwgc2l6ZSA+PiAxMCk7CisJcHJpbnRmKF8oIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKwkJICJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorCQkgIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIpLAorCSAgICAgICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19tYXhsZW4pLAorCSAgICAgICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19zZXF1ZW5jZSksCisJICAgICAgICh1bnNpZ25lZCBpbnQpbnRvaGwoanNiLT5zX3N0YXJ0KSk7CisJaWYgKGpzYi0+c19lcnJubyAhPSAwKQorCQlwcmludGYoXygiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIiksCisJCSAgICAgICAoaW50KSBudG9obChqc2ItPnNfZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfam91cm5hbF9pbmZvcm1hdGlvbihleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCWJ1ZlsxMDI0XTsKKwljaGFyCQlzdHJbODBdOworCXVuc2lnbmVkIGludAlpOworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqc2I7CisKKwkvKiBHZXQgdGhlIGpvdXJuYWwgc3VwZXJibG9jayAqLworCWlmICgocmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywKKwkJCQkJICAgIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICsgMSwKKwkJCQkJICAgIC0xMDI0LCBidWYpKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siKSk7CisJCWV4aXQoMSk7CisJfQorCWpzYiA9IChqb3VybmFsX3N1cGVyYmxvY2tfdCAqKSBidWY7CisJaWYgKChqc2ItPnNfaGVhZGVyLmhfbWFnaWMgIT0gKHVuc2lnbmVkKSBudG9obChKRlNfTUFHSUNfTlVNQkVSKSkgfHwKKwkgICAgKGpzYi0+c19oZWFkZXIuaF9ibG9ja3R5cGUgIT0KKwkgICAgICh1bnNpZ25lZCkgbnRvaGwoSkZTX1NVUEVSQkxPQ0tfVjIpKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiKSk7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKF8oIlxuSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorCQkgIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKwkJICJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisJCSAiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKwkJICJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisJCSAiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIiksCisJICAgICAgICh1bnNpZ25lZCBpbnQpbnRvaGwoanNiLT5zX2Jsb2Nrc2l6ZSksICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19tYXhsZW4pLAorCSAgICAgICAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19maXJzdCksICh1bnNpZ25lZCBpbnQpbnRvaGwoanNiLT5zX3NlcXVlbmNlKSwKKwkgICAgICAgKHVuc2lnbmVkIGludCludG9obChqc2ItPnNfc3RhcnQpLCAodW5zaWduZWQgaW50KW50b2hsKGpzYi0+c19ucl91c2VycykpOworCisJZm9yIChpPTA7IGkgPCBudG9obChqc2ItPnNfbnJfdXNlcnMpOyBpKyspIHsKKwkJdXVpZF91bnBhcnNlKCZqc2ItPnNfdXNlcnNbaSoxNl0sIHN0cik7CisJCXByaW50ZihpID8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIKKwkJICAgICAgIDogXygiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIiksCisJCSAgICAgICBzdHIpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfZXh0ZW5kZWRfb3B0cyhjb25zdCBjaGFyICpvcHRzLCBibGs2NF90ICpzdXBlcmJsb2NrLAorCQkJCWludCAqYmxvY2tzaXplKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnAsICphcmcsICpiYWRvcHQgPSAwOworCWludAlsZW47CisJaW50CWRvX3VzYWdlID0gMDsKKworCWxlbiA9IHN0cmxlbihvcHRzKTsKKwlidWYgPSBtYWxsb2MobGVuKzEpOworCWlmICghYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCXN0cmNweShidWYsIG9wdHMpOworCWZvciAodG9rZW4gPSBidWY7IHRva2VuICYmICp0b2tlbjsgdG9rZW4gPSBuZXh0KSB7CisJCXAgPSBzdHJjaHIodG9rZW4sICcsJyk7CisJCW5leHQgPSAwOworCQlpZiAocCkgeworCQkJKnAgPSAwOworCQkJbmV4dCA9IHArMTsKKwkJfQorCQlhcmcgPSBzdHJjaHIodG9rZW4sICc9Jyk7CisJCWlmIChhcmcpIHsKKwkJCSphcmcgPSAwOworCQkJYXJnKys7CisJCX0KKwkJaWYgKHN0cmNtcCh0b2tlbiwgInN1cGVyYmxvY2siKSA9PSAwIHx8CisJCSAgICBzdHJjbXAodG9rZW4sICJzYiIpID09IDApIHsKKwkJCWlmICghYXJnKSB7CisJCQkJZG9fdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpzdXBlcmJsb2NrID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJZG9fdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJibG9ja3NpemUiKSA9PSAwIHx8CisJCQkgICBzdHJjbXAodG9rZW4sICJicyIpID09IDApIHsKKwkJCWlmICghYXJnKSB7CisJCQkJZG9fdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpibG9ja3NpemUgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCWRvX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkb191c2FnZSsrOworCQkJYmFkb3B0ID0gdG9rZW47CisJCX0KKwl9CisJaWYgKGRvX3VzYWdlKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJcbkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuXG4iCisJCQkiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgIgorCQkJImFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorCQkJIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cblxuIgorCQkJIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorCQkJIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisJCQkiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIpLAorCQkJYmFkb3B0ID8gYmFkb3B0IDogIiIpOworCQlmcmVlKGJ1Zik7CisJCWV4aXQoMSk7CisJfQorCWZyZWUoYnVmKTsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2ZpbHN5cwlmczsKKwlpbnQJCXByaW50X2JhZGJsb2NrcyA9IDA7CisJYmxrNjRfdAkJdXNlX3N1cGVyYmxvY2sgPSAwOworCWludAkJdXNlX2Jsb2Nrc2l6ZSA9IDA7CisJaW50CQlpbWFnZV9kdW1wID0gMDsKKwlpbnQJCWZvcmNlID0gMDsKKwlpbnQJCWZsYWdzOworCWludAkJaGVhZGVyX29ubHkgPSAwOworCWludAkJYzsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCWZwcmludGYgKHN0ZGVyciwgImR1bXBlMmZzICVzICglcylcbiIsIEUyRlNQUk9HU19WRVJTSU9OLAorCQkgRTJGU1BST0dTX0RBVEUpOworCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKworCXdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgImJmaGl4Vm86IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYic6CisJCQlwcmludF9iYWRibG9ja3MrKzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWZvcmNlKys7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQloZWFkZXJfb25seSsrOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW1hZ2VfZHVtcCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJcGFyc2VfZXh0ZW5kZWRfb3B0cyhvcHRhcmcsICZ1c2Vfc3VwZXJibG9jaywKKwkJCQkJICAgICZ1c2VfYmxvY2tzaXplKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBleGl0ICovCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXHRVc2luZyAlc1xuIiksCisJCQkJZXJyb3JfbWVzc2FnZShFWFQyX0VUX0JBU0UpKTsKKwkJCWV4aXQoMCk7CisJCWNhc2UgJ3gnOgorCQkJaGV4X2Zvcm1hdCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJfQorCWlmIChvcHRpbmQgPiBhcmdjIC0gMSkKKwkJdXNhZ2UoKTsKKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworCWZsYWdzID0gRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LIHwgRVhUMl9GTEFHX1NPRlRTVVBQX0ZFQVRVUkVTIHwgRVhUMl9GTEFHXzY0QklUUzsKKwlpZiAoZm9yY2UpCisJCWZsYWdzIHw9IEVYVDJfRkxBR19GT1JDRTsKKwlpZiAoaW1hZ2VfZHVtcCkKKwkJZmxhZ3MgfD0gRVhUMl9GTEFHX0lNQUdFX0ZJTEU7CisKKwlpZiAodXNlX3N1cGVyYmxvY2sgJiYgIXVzZV9ibG9ja3NpemUpIHsKKwkJZm9yICh1c2VfYmxvY2tzaXplID0gRVhUMl9NSU5fQkxPQ0tfU0laRTsKKwkJICAgICB1c2VfYmxvY2tzaXplIDw9IEVYVDJfTUFYX0JMT0NLX1NJWkU7CisJCSAgICAgdXNlX2Jsb2Nrc2l6ZSAqPSAyKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfb3BlbiAoZGV2aWNlX25hbWUsIGZsYWdzLAorCQkJCQkgICAgICB1c2Vfc3VwZXJibG9jaywKKwkJCQkJICAgICAgdXNlX2Jsb2Nrc2l6ZSwgdW5peF9pb19tYW5hZ2VyLAorCQkJCQkgICAgICAmZnMpOworCQkJaWYgKCFyZXR2YWwpCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcmV0dmFsID0gZXh0MmZzX29wZW4gKGRldmljZV9uYW1lLCBmbGFncywgdXNlX3N1cGVyYmxvY2ssCisJCQkJICAgICAgdXNlX2Jsb2Nrc2l6ZSwgdW5peF9pb19tYW5hZ2VyLCAmZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksCisJCQkgZGV2aWNlX25hbWUpOworCQlwcmludGYoIiVzIiwgXygiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iKSk7CisJCWV4aXQgKDEpOworCX0KKwlmcy0+ZGVmYXVsdF9iaXRtYXBfdHlwZSA9IEVYVDJGU19CTUFQNjRfUkJUUkVFOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJYmxvY2tzNjQgPSAxOworCWlmIChwcmludF9iYWRibG9ja3MpIHsKKwkJbGlzdF9iYWRfYmxvY2tzKGZzLCAxKTsKKwl9IGVsc2UgeworCQlsaXN0X3N1cGVyIChmcy0+c3VwZXIpOworCQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfSk9VUk5BTF9ERVYpIHsKKwkJCXByaW50X2pvdXJuYWxfaW5mb3JtYXRpb24oZnMpOworCQkJZXh0MmZzX2Nsb3NlKGZzKTsKKwkJCWV4aXQoMCk7CisJCX0KKwkJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCQkgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpICYmCisJCSAgICAoZnMtPnN1cGVyLT5zX2pvdXJuYWxfaW51bSAhPSAwKSkKKwkJCXByaW50X2lubGluZV9qb3VybmFsX2luZm9ybWF0aW9uKGZzKTsKKwkJbGlzdF9iYWRfYmxvY2tzKGZzLCAwKTsKKwkJaWYgKGhlYWRlcl9vbmx5KSB7CisJCQlleHQyZnNfY2xvc2UgKGZzKTsKKwkJCWV4aXQgKDApOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19yZWFkX2JpdG1hcHMgKGZzKTsKKwkJbGlzdF9kZXNjIChmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXByaW50ZihfKCJcbiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIiksCisJCQkgICAgICAgcHJvZ3JhbV9uYW1lLCBkZXZpY2VfbmFtZSwKKwkJCSAgICAgICBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQl9CisJfQorCWV4dDJmc19jbG9zZSAoZnMpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9lMmZyZWVmcmFnLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9lMmZyZWVmcmFnLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0YmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2UyZnJlZWZyYWcuOC5pbgpAQCAtMCwwICsxLDk2IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlRIIEUyRlJFRUZSQUcgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZTJmcmVlZnJhZyBcLSByZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIGluZm9ybWF0aW9uCisuU0ggU1lOT1BTSVMKKy5CIGUyZnJlZWZyYWcKK1sKKy5CIFwtYyBjaHVua19rYgorXQorWworLkIgXC1oCitdCisuQiBmaWxlc3lzCisKKy5TSCBERVNDUklQVElPTgorLkIgZTJmcmVlZnJhZworaXMgdXNlZCB0byByZXBvcnQgZnJlZSBzcGFjZSBmcmFnbWVudGF0aW9uIG9uIGV4dDIvMy80IGZpbGUgc3lzdGVtcy4KKy5JIGZpbGVzeXMKK2lzIHRoZSBmaWxlc3lzdGVtIGRldmljZSBuYW1lIChlLmcuCisuSVIgL2Rldi9oZGMxICIsICIgL2Rldi9tZDAgKS4KK1RoZQorLkIgZTJmcmVlZnJhZworcHJvZ3JhbSB3aWxsIHNjYW4gdGhlIGJsb2NrIGJpdG1hcCBpbmZvcm1hdGlvbiB0byBjaGVjayBob3cgbWFueSBmcmVlIGJsb2NrcworYXJlIHByZXNlbnQgYXMgY29udGlndW91cyBhbmQgYWxpZ25lZCBmcmVlIHNwYWNlLiBUaGUgcGVyY2VudGFnZSBvZiBjb250aWd1b3VzCitmcmVlIGJsb2NrcyBvZiBzaXplIGFuZCBvZiBhbGlnbm1lbnQKKy5JUiBjaHVua19rYgoraXMgcmVwb3J0ZWQuICBJdCBhbHNvIGRpc3BsYXlzIHRoZSBtaW5pbXVtL21heGltdW0vYXZlcmFnZSBmcmVlIGNodW5rIHNpemUgaW4KK3RoZSBmaWxlc3lzdGVtLCBhbG9uZyB3aXRoIGEgaGlzdG9ncmFtIG9mIGFsbCBmcmVlIGNodW5rcy4gIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBiZSB1c2VkIHRvIGdhdWdlIHRoZSBsZXZlbCBvZiBmcmVlIHNwYWNlIGZyYWdtZW50YXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0uCisuU0ggT1BUSU9OUworLlRQCisuQkkgXC1jICIgY2h1bmtfa2IiCitJZiBhIGNodW5rIHNpemUgaXMgc3BlY2lmaWVkLCB0aGVuCisuQiBlMmZyZWVmcmFnCit3aWxsIHByaW50IGhvdyBtYW55IGZyZWUgY2h1bmtzIG9mIHNpemUKKy5JIGNodW5rX2tiCithcmUgYXZhaWxhYmxlIGluIHVuaXRzIG9mIGtpbG9ieXRlcyAoS2IpLiAgVGhlIGNodW5rIHNpemUgbXVzdCBiZSBhCitwb3dlciBvZiB0d28gYW5kIGJlIGxhcmdlciB0aGFuIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZS4KKy5UUAorLkJJIFwtaAorUHJpbnQgdGhlIHVzYWdlIG9mIHRoZSBwcm9ncmFtLgorLlNIIEVYQU1QTEUKKyMgZTJmcmVlZnJhZyAvZGV2L3Zncm9vdC9sdmhvbWUKKy5icgorRGV2aWNlOiAvZGV2L3Zncm9vdC9sdmhvbWUKKy5icgorQmxvY2tzaXplOiA0MDk2IGJ5dGVzCisuYnIKK1RvdGFsIGJsb2NrczogMTUwNDA4NQorLmJyCitGcmVlIGJsb2NrczogMjkyOTk1ICgxOS41JSkKKy5icgorCitNaW4uIGZyZWUgZXh0ZW50OiA0IEtCCisuYnIKK01heC4gZnJlZSBleHRlbnQ6IDI0MDA4IEtCCisuYnIKK0F2Zy4gZnJlZSBleHRlbnQ6IDI1MiBLQgorLmJyCisKK0hJU1RPR1JBTSBPRiBGUkVFIEVYVEVOVCBTSVpFUzoKKy5icgorRXh0ZW50IFNpemUgUmFuZ2UgOiAgIEZyZWUgZXh0ZW50cyAgIEZyZWUgQmxvY2tzICBQZXJjZW50CisuYnIKKyAgICA0Sy4uLiAgICA4Sy0gOiAgICAgICAgICAgNzA0ICAgICAgICAgICA3MDQgICAgIDAuMiUKKy5icgorICAgIDhLLi4uICAgMTZLLSA6ICAgICAgICAgICA4MTAgICAgICAgICAgMTk3OSAgICAgMC43JQorLmJyCisgICAxNksuLi4gICAzMkstIDogICAgICAgICAgIDg0MyAgICAgICAgICA0NDY3ICAgICAxLjUlCisuYnIKKyAgIDMySy4uLiAgIDY0Sy0gOiAgICAgICAgICAgNTc5ICAgICAgICAgIDYyNjMgICAgIDIuMSUKKy5icgorICAgNjRLLi4uICAxMjhLLSA6ICAgICAgICAgICA0OTMgICAgICAgICAxMTA2NyAgICAgMy44JQorLmJyCisgIDEyOEsuLi4gIDI1NkstIDogICAgICAgICAgIDM5NCAgICAgICAgIDE4MDk3ICAgICA2LjIlCisuYnIKKyAgMjU2Sy4uLiAgNTEySy0gOiAgICAgICAgICAgMjgxICAgICAgICAgMjU0NzcgICAgIDguNyUKKy5icgorICA1MTJLLi4uIDEwMjRLLSA6ICAgICAgICAgICAyNTMgICAgICAgICA0NDkxNCAgICAxNS4zJQorLmJyCisgICAgMU0uLi4gICAgMk0tIDogICAgICAgICAgIDE0MyAgICAgICAgIDUxODk3ICAgIDE3LjclCisuYnIKKyAgICAyTS4uLiAgICA0TS0gOiAgICAgICAgICAgIDczICAgICAgICAgNTA2ODMgICAgMTcuMyUKKy5icgorICAgIDRNLi4uICAgIDhNLSA6ICAgICAgICAgICAgMzcgICAgICAgICA1MjQxNyAgICAxNy45JQorLmJyCisgICAgOE0uLi4gICAxNk0tIDogICAgICAgICAgICAgNyAgICAgICAgIDE5MDI4ICAgICA2LjUlCisuYnIKKyAgIDE2TS4uLiAgIDMyTS0gOiAgICAgICAgICAgICAxICAgICAgICAgIDYwMDIgICAgIDIuMCUKKy5TSCBBVVRIT1IKK1RoaXMgdmVyc2lvbiBvZiBlMmZyZWVmcmFnIHdhcyB3cml0dGVuIGJ5IFJ1cGVzaCBUaGFrYXJlLCBhbmQgbW9kaWZpZWQgYnkKK0FuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHN1bi5jb20+LCBhbmQgS2FscGFrIFNoYWguCisuU0ggU0VFIEFMU08KKy5JUiBkZWJ1Z2ZzICg4KSwKKy5JUiBkdW1wZTJmcyAoOCksCisuSVIgZTJmc2NrICg4KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZTJmcmVlZnJhZy5jIGIvZTJmc3Byb2dzL21pc2MvZTJmcmVlZnJhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmRjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9lMmZyZWVmcmFnLmMKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBlMmZyZWVmcmFnIC0gcmVwb3J0IGZpbGVzeXN0ZW0gZnJlZS1zcGFjZSBmcmFnbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBBdXRob3I6IFJ1cGVzaCBUaGFrYXJlIDxydXBlc2hAc3VuLmNvbT4KKyAqICAgICAgICAgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAc3VuLmNvbT4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuCisgKiAlRW5kLUhlYWRlciUKKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZTJmcmVlZnJhZy5oIgorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQoreworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIFstYyBjaHVua3NpemUgaW4ga2JdIFstaF0gIgorCQkiZGV2aWNlX25hbWVcbiIsIHByb2cpOworI2lmbmRlZiBERUJVR0ZTCisJZXhpdCgxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHVsX2xvZzIodW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgIGludCAgICAgbCA9IDA7CisKKyAgICAgICAgYXJnID4+PSAxOworICAgICAgICB3aGlsZSAoYXJnKSB7CisgICAgICAgICAgICAgICAgbCsrOworICAgICAgICAgICAgICAgIGFyZyA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jaHVua19pbmZvKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgY2h1bmtfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCWluZm8tPmJsb2Nrc2l6ZV9iaXRzID0gdWxfbG9nMigodW5zaWduZWQgbG9uZylmcy0+YmxvY2tzaXplKTsKKwlpZiAoaW5mby0+Y2h1bmtieXRlcykgeworCQlpbmZvLT5jaHVua2JpdHMgPSB1bF9sb2cyKGluZm8tPmNodW5rYnl0ZXMpOworCQlpbmZvLT5ibGtzX2luX2NodW5rID0gaW5mby0+Y2h1bmtieXRlcyA+PiBpbmZvLT5ibG9ja3NpemVfYml0czsKKwl9IGVsc2UgeworCQlpbmZvLT5jaHVua2JpdHMgPSB1bF9sb2cyKERFRkFVTFRfQ0hVTktTSVpFKTsKKwkJaW5mby0+Ymxrc19pbl9jaHVuayA9IERFRkFVTFRfQ0hVTktTSVpFID4+IGluZm8tPmJsb2Nrc2l6ZV9iaXRzOworCX0KKworCWluZm8tPm1pbiA9IH4wVUw7CisJaW5mby0+bWF4ID0gaW5mby0+YXZnID0gMDsKKwlpbmZvLT5yZWFsX2ZyZWVfY2h1bmtzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSElTVDsgaSsrKSB7CisJCWluZm8tPmhpc3RvZ3JhbS5mY19jaHVua3NbaV0gPSAwOworCQlpbmZvLT5oaXN0b2dyYW0uZmNfYmxvY2tzW2ldID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jaHVua19zdGF0cyhzdHJ1Y3QgY2h1bmtfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNodW5rX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBpZHg7CisKKwlpZHggPSB1bF9sb2cyKGNodW5rX3NpemUpICsgMTsKKwlpZiAoaWR4ID49IE1BWF9ISVNUKQorCQlpZHggPSBNQVhfSElTVC0xOworCWluZm8tPmhpc3RvZ3JhbS5mY19jaHVua3NbaWR4XSsrOworCWluZm8tPmhpc3RvZ3JhbS5mY19ibG9ja3NbaWR4XSArPSBjaHVua19zaXplOworCisJaWYgKGNodW5rX3NpemUgPiBpbmZvLT5tYXgpCisJCWluZm8tPm1heCA9IGNodW5rX3NpemU7CisJaWYgKGNodW5rX3NpemUgPCBpbmZvLT5taW4pCisJCWluZm8tPm1pbiA9IGNodW5rX3NpemU7CisJaW5mby0+YXZnICs9IGNodW5rX3NpemU7CisJaW5mby0+cmVhbF9mcmVlX2NodW5rcysrOworfQorCitzdGF0aWMgdm9pZCBzY2FuX2Jsb2NrX2JpdG1hcChleHQyX2ZpbHN5cyBmcywgc3RydWN0IGNodW5rX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2Nrc19jb3VudCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2h1bmtzID0gKGJsb2Nrc19jb3VudCArIGluZm8tPmJsa3NfaW5fY2h1bmspID4+CisJCQkJKGluZm8tPmNodW5rYml0cyAtIGluZm8tPmJsb2Nrc2l6ZV9iaXRzKTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2h1bmtfbnVtOworCXVuc2lnbmVkIGxvbmcgbGFzdF9jaHVua19zaXplID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2h1bmtfc3RhcnRfYmxrID0gMDsKKwlpbnQgdXNlZDsKKworCWZvciAoY2h1bmtfbnVtID0gMDsgY2h1bmtfbnVtIDwgY2h1bmtzOyBjaHVua19udW0rKykgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgYmxrLCBudW1fYmxrczsKKwkJaW50IGNodW5rX2ZyZWU7CisKKwkJLyogTGFzdCBjaHVuayBtYXkgYmUgc21hbGxlciAqLworCQlpZiAoY2h1bmtfc3RhcnRfYmxrICsgaW5mby0+Ymxrc19pbl9jaHVuayA+IGJsb2Nrc19jb3VudCkKKwkJCW51bV9ibGtzID0gYmxvY2tzX2NvdW50IC0gY2h1bmtfc3RhcnRfYmxrOworCQllbHNlCisJCQludW1fYmxrcyA9IGluZm8tPmJsa3NfaW5fY2h1bms7CisKKwkJY2h1bmtfZnJlZSA9IDA7CisKKwkJLyogSW5pdGlhbGl6ZSBzdGFydGluZyBibG9jayBmb3IgZmlyc3QgY2h1bmsgY29ycmVjdGx5IGVsc2UKKwkJICogdGhlcmUgaXMgYSBzZWdmYXVsdCB3aGVuIGJsb2Nrc2l6ZSA9IDEwMjQgaW4gd2hpY2ggY2FzZQorCQkgKiBibG9ja19tYXAtPnN0YXJ0ID0gMSAqLworCQlmb3IgKGJsayA9IDA7IGJsayA8IG51bV9ibGtzOyBibGsrKywgY2h1bmtfc3RhcnRfYmxrKyspIHsKKwkJCWlmIChjaHVua19udW0gPT0gMCAmJiBibGsgPT0gMCkgeworCQkJCWJsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCQkJCWNodW5rX3N0YXJ0X2JsayA9IGJsazsKKwkJCX0KKwkJCXVzZWQgPSBleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwKKwkJCQljaHVua19zdGFydF9ibGsgPj4gZnMtPmNsdXN0ZXJfcmF0aW9fYml0cyk7CisJCQlpZiAoIXVzZWQpIHsKKwkJCQlsYXN0X2NodW5rX3NpemUrKzsKKwkJCQljaHVua19mcmVlKys7CisJCQl9CisKKwkJCWlmICh1c2VkICYmIGxhc3RfY2h1bmtfc2l6ZSAhPSAwKSB7CisJCQkJdXBkYXRlX2NodW5rX3N0YXRzKGluZm8sIGxhc3RfY2h1bmtfc2l6ZSk7CisJCQkJbGFzdF9jaHVua19zaXplID0gMDsKKwkJCX0KKwkJfQorCisJCWlmIChjaHVua19mcmVlID09IGluZm8tPmJsa3NfaW5fY2h1bmspCisJCQlpbmZvLT5mcmVlX2NodW5rcysrOworCX0KKwlpZiAobGFzdF9jaHVua19zaXplICE9IDApCisJCXVwZGF0ZV9jaHVua19zdGF0cyhpbmZvLCBsYXN0X2NodW5rX3NpemUpOworfQorCitzdGF0aWMgZXJyY29kZV90IGdldF9jaHVua19pbmZvKGV4dDJfZmlsc3lzIGZzLCBzdHJ1Y3QgY2h1bmtfaW5mbyAqaW5mbywKKwkJCQlGSUxFICpmKQoreworCXVuc2lnbmVkIGxvbmcgdG90YWxfY2h1bmtzOworCWNvbnN0IGNoYXIgKnVuaXRwID0gIktNR1RQRVpZIjsKKwlpbnQgdW5pdHMgPSAxMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMCwgZW5kOworCWludCBpLCByZXR2YWwgPSAwOworCisJc2Nhbl9ibG9ja19iaXRtYXAoZnMsIGluZm8pOworCisJZnByaW50ZihmLCAiVG90YWwgYmxvY2tzOiAlbGx1XG5GcmVlIGJsb2NrczogJXUgKCUwLjFmJSUpXG4iLAorCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciksIGZzLT5zdXBlci0+c19mcmVlX2Jsb2Nrc19jb3VudCwKKwkJKGRvdWJsZSlmcy0+c3VwZXItPnNfZnJlZV9ibG9ja3NfY291bnQgKiAxMDAgLworCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpOworCisJaWYgKGluZm8tPmNodW5rYnl0ZXMpIHsKKwkJZnByaW50ZihmLCAiXG5DaHVua3NpemU6ICVsdSBieXRlcyAoJXUgYmxvY2tzKVxuIiwKKwkJCWluZm8tPmNodW5rYnl0ZXMsIGluZm8tPmJsa3NfaW5fY2h1bmspOworCQl0b3RhbF9jaHVua3MgPSAoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpICsKKwkJCQlpbmZvLT5ibGtzX2luX2NodW5rKSA+PgorCQkJKGluZm8tPmNodW5rYml0cyAtIGluZm8tPmJsb2Nrc2l6ZV9iaXRzKTsKKwkJZnByaW50ZihmLCAiVG90YWwgY2h1bmtzOiAlbHVcbkZyZWUgY2h1bmtzOiAlbHUgKCUwLjFmJSUpXG4iLAorCQkJdG90YWxfY2h1bmtzLCBpbmZvLT5mcmVlX2NodW5rcywKKwkJCShkb3VibGUpaW5mby0+ZnJlZV9jaHVua3MgKiAxMDAgLyB0b3RhbF9jaHVua3MpOworCX0KKworCS8qIERpc3BsYXkgY2h1bmsgaW5mb3JtYXRpb24gaW4gS0IgKi8KKwlpZiAoaW5mby0+cmVhbF9mcmVlX2NodW5rcykgeworCQl1bnNpZ25lZCBpbnQgc2NhbGUgPSBmcy0+YmxvY2tzaXplID4+IDEwOworCQlpbmZvLT5taW4gPSBpbmZvLT5taW4gKiBzY2FsZTsKKwkJaW5mby0+bWF4ID0gaW5mby0+bWF4ICogc2NhbGU7CisJCWluZm8tPmF2ZyA9IGluZm8tPmF2ZyAvIGluZm8tPnJlYWxfZnJlZV9jaHVua3MgKiBzY2FsZTsKKwl9IGVsc2UgeworCQlpbmZvLT5taW4gPSAwOworCX0KKworCWZwcmludGYoZiwgIlxuTWluLiBmcmVlIGV4dGVudDogJWx1IEtCIFxuTWF4LiBmcmVlIGV4dGVudDogJWx1IEtCXG4iCisJCSJBdmcuIGZyZWUgZXh0ZW50OiAlbHUgS0JcbiIsIGluZm8tPm1pbiwgaW5mby0+bWF4LCBpbmZvLT5hdmcpOworCWZwcmludGYoZiwgIk51bS4gZnJlZSBleHRlbnQ6ICVsdVxuIiwgaW5mby0+cmVhbF9mcmVlX2NodW5rcyk7CisKKwlmcHJpbnRmKGYsICJcbkhJU1RPR1JBTSBPRiBGUkVFIEVYVEVOVCBTSVpFUzpcbiIpOworCWZwcmludGYoZiwgIiVzIDogICUxMnMgICUxMnMgICU3c1xuIiwgIkV4dGVudCBTaXplIFJhbmdlIiwKKwkJIkZyZWUgZXh0ZW50cyIsICJGcmVlIEJsb2NrcyIsICJQZXJjZW50Iik7CisJZm9yIChpID0gMDsgaSA8IE1BWF9ISVNUOyBpKyspIHsKKwkJZW5kID0gMSA8PCAoaSArIGluZm8tPmJsb2Nrc2l6ZV9iaXRzIC0gdW5pdHMpOworCQlpZiAoaW5mby0+aGlzdG9ncmFtLmZjX2NodW5rc1tpXSAhPSAwKSB7CisJCQljaGFyIGVuZF9zdHJbMzJdOworCisJCQlzcHJpbnRmKGVuZF9zdHIsICIlNWx1JWMtIiwgZW5kLCAqdW5pdHApOworCQkJaWYgKGkgPT0gTUFYX0hJU1QtMSkKKwkJCQlzdHJjcHkoZW5kX3N0ciwgIm1heCAiKTsKKwkJCWZwcmludGYoZiwgIiU1bHUlYy4uLiU3cyAgOiAgJTEybHUgICUxMmx1ICAlNi4yZiUlXG4iLAorCQkJCXN0YXJ0LCAqdW5pdHAsIGVuZF9zdHIsCisJCQkJaW5mby0+aGlzdG9ncmFtLmZjX2NodW5rc1tpXSwKKwkJCQlpbmZvLT5oaXN0b2dyYW0uZmNfYmxvY2tzW2ldLAorCQkJCShkb3VibGUpaW5mby0+aGlzdG9ncmFtLmZjX2Jsb2Nrc1tpXSAqIDEwMCAvCisJCQkJZnMtPnN1cGVyLT5zX2ZyZWVfYmxvY2tzX2NvdW50KTsKKwkJfQorCQlzdGFydCA9IGVuZDsKKwkJaWYgKHN0YXJ0ID09IDE8PDEwKSB7CisJCQlzdGFydCA9IDE7CisJCQl1bml0cyArPSAxMDsKKwkJCXVuaXRwKys7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9kZXZpY2UoY2hhciAqZGV2aWNlX25hbWUsIGV4dDJfZmlsc3lzIGZzKQoreworCWludCByZXR2YWwgPSBleHQyZnNfY2xvc2UoZnMpOworCisJaWYgKHJldHZhbCkKKwkJY29tX2VycihkZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgY2xvc2luZyB0aGUgZmlsZXN5c3RlbS5cbiIpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X2luZm8oZXh0Ml9maWxzeXMgZnMsIHN0cnVjdCBjaHVua19pbmZvICpjaHVua19pbmZvLCBGSUxFICpmKQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwOworCisJZnByaW50ZihmLCAiRGV2aWNlOiAlc1xuIiwgZnMtPmRldmljZV9uYW1lKTsKKwlmcHJpbnRmKGYsICJCbG9ja3NpemU6ICV1IGJ5dGVzXG4iLCBmcy0+YmxvY2tzaXplKTsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGZzLT5kZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBibG9jayBiaXRtYXAiKTsKKwkJY2xvc2VfZGV2aWNlKGZzLT5kZXZpY2VfbmFtZSwgZnMpOworCQlleGl0KDEpOworCX0KKworCWluaXRfY2h1bmtfaW5mbyhmcywgY2h1bmtfaW5mbyk7CisKKwlyZXR2YWwgPSBnZXRfY2h1bmtfaW5mbyhmcywgY2h1bmtfaW5mbywgZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGZzLT5kZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgY29sbGVjdGluZyBjaHVuayBpbmZvIik7CisgICAgICAgICAgICAgICAgY2xvc2VfZGV2aWNlKGZzLT5kZXZpY2VfbmFtZSwgZnMpOworCQlleGl0KDEpOworCX0KK30KKworI2lmbmRlZiBERUJVR0ZTCitzdGF0aWMgdm9pZCBvcGVuX2RldmljZShjaGFyICpkZXZpY2VfbmFtZSwgZXh0Ml9maWxzeXMgKmZzKQoreworCWludCByZXR2YWw7CisJaW50IGZsYWcgPSBFWFQyX0ZMQUdfRk9SQ0UgfCBFWFQyX0ZMQUdfNjRCSVRTOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlX25hbWUsIGZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycihkZXZpY2VfbmFtZSwgcmV0dmFsLCAid2hpbGUgb3BlbmluZyBmaWxlc3lzdGVtIik7CisJCWV4aXQoMSk7CisJfQorCSgqZnMpLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7Cit9CisjZW5kaWYKKworI2lmZGVmIERFQlVHRlMKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKK3ZvaWQgZG9fZnJlZWZyYWcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisjZW5kaWYKK3sKKwlzdHJ1Y3QgY2h1bmtfaW5mbyBjaHVua19pbmZvOworCWV4dDJfZmlsc3lzIGZzID0gTlVMTDsKKwljaGFyICpwcm9nbmFtZTsKKwljaGFyICplbmQ7CisJaW50IGM7CisKKyNpZmRlZiBERUJVR0ZTCisJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisJCXJldHVybjsKKyNlbHNlCisJY2hhciAqZGV2aWNlX25hbWU7CisKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworI2VuZGlmCisJcHJvZ25hbWUgPSBhcmd2WzBdOworCW1lbXNldCgmY2h1bmtfaW5mbywgMCwgc2l6ZW9mKGNodW5rX2luZm8pKTsKKworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYzpoIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYyc6CisJCQljaHVua19pbmZvLmNodW5rYnl0ZXMgPSBzdHJ0b3VsbChvcHRhcmcsICZlbmQsIDApOworCQkJaWYgKCplbmQgIT0gJ1wwJykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBjaHVuayBzaXplICclcydcbiIsCisJCQkJCXByb2duYW1lLCBvcHRhcmcpOworCQkJCXVzYWdlKHByb2duYW1lKTsKKwkJCX0KKwkJCWlmIChjaHVua19pbmZvLmNodW5rYnl0ZXMgJgorCQkJICAgIChjaHVua19pbmZvLmNodW5rYnl0ZXMgLSAxKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNodW5rIHNpemUgbXVzdCBiZSBhICIKKwkJCQkJInBvd2VyIG9mIDIuXG4iLCBhcmd2WzBdKTsKKwkJCQl1c2FnZShwcm9nbmFtZSk7CisJCQl9CisJCQljaHVua19pbmZvLmNodW5rYnl0ZXMgKj0gMTAyNDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKHByb2duYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisjaWZuZGVmIERFQlVHRlMKKwlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogbWlzc2luZyBkZXZpY2UgbmFtZS5cbiIsIHByb2duYW1lKTsKKwkJdXNhZ2UocHJvZ25hbWUpOworCX0KKworCWRldmljZV9uYW1lID0gYXJndltvcHRpbmRdOworCisJb3Blbl9kZXZpY2UoZGV2aWNlX25hbWUsICZmcyk7CisjZWxzZQorCWZzID0gY3VycmVudF9mczsKKyNlbmRpZgorCisJaWYgKGNodW5rX2luZm8uY2h1bmtieXRlcyAmJiAoY2h1bmtfaW5mby5jaHVua2J5dGVzIDwgZnMtPmJsb2Nrc2l6ZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogY2h1bmtzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsICIKKwkJCSJ0byBmaWxlc3lzdGVtIGJsb2Nrc2l6ZS5cbiIsIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJY29sbGVjdF9pbmZvKGZzLCAmY2h1bmtfaW5mbywgc3Rkb3V0KTsKKyNpZm5kZWYgREVCVUdGUworCWNsb3NlX2RldmljZShkZXZpY2VfbmFtZSwgZnMpOworCisJcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2UyZnJlZWZyYWcuaCBiL2UyZnNwcm9ncy9taXNjL2UyZnJlZWZyYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQxZWVmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZTJmcmVlZnJhZy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2RlZmluZSBERUZBVUxUX0NIVU5LU0laRSAoMTAyNCoxMDI0KQorCisjZGVmaW5lIE1BWF9ISVNUCTMyCitzdHJ1Y3QgZnJlZV9jaHVua19oaXN0b2dyYW0geworCXVuc2lnbmVkIGxvbmcgZmNfY2h1bmtzW01BWF9ISVNUXTsKKwl1bnNpZ25lZCBsb25nIGZjX2Jsb2Nrc1tNQVhfSElTVF07Cit9OworCitzdHJ1Y3QgY2h1bmtfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjaHVua2J5dGVzOwkvKiBjaHVuayBzaXplIGluIGJ5dGVzICovCisJaW50IGNodW5rYml0czsJCQkvKiBjaHVuayBzaXplIGluIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIGZyZWVfY2h1bmtzOwkvKiB0b3RhbCBmcmVlIGNodW5rcyBvZiBnaXZlbiBzaXplICovCisJdW5zaWduZWQgbG9uZyByZWFsX2ZyZWVfY2h1bmtzOyAvKiBmcmVlIGNodW5rcyBvZiBhbnkgc2l6ZSAqLworCWludCBibG9ja3NpemVfYml0czsJCS8qIGZzIGJsb2Nrc2l6ZSBpbiBiaXRzICovCisJaW50IGJsa3NfaW5fY2h1bms7CQkvKiBudW1iZXIgb2YgYmxvY2tzIGluIGEgY2h1bmsgKi8KKwl1bnNpZ25lZCBsb25nIG1pbiwgbWF4LCBhdmc7CS8qIGNodW5rIHNpemUgc3RhdHMgKi8KKwlzdHJ1Y3QgZnJlZV9jaHVua19oaXN0b2dyYW0gaGlzdG9ncmFtOyAvKiBoaXN0b2dyYW0gb2YgYWxsIGNodW5rIHNpemVzKi8KK307CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9lMmltYWdlLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9lMmltYWdlLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwMDJkNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2UyaW1hZ2UuOC5pbgpAQCAtMCwwICsxLDI4NSBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMjAwMSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBFMklNQUdFIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UyaW1hZ2UgXC0gU2F2ZSBjcml0aWNhbCBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtIG1ldGFkYXRhIHRvIGEgZmlsZQorLlNIIFNZTk9QU0lTCisuQiBlMmltYWdlCitbCisuQiBcLXJ8UQorXQorWworLkIgXC1mcgorXQorLkkgZGV2aWNlCisuSSBpbWFnZS1maWxlCisuYnIKKy5CIGUyaW1hZ2UKKy5CIFwtSQorLkkgZGV2aWNlCisuSSBpbWFnZS1maWxlCisuYnIKKy5CIGUyaW1hZ2UKKy5CIFwtcmEKK1sKKy5CIFwtY2ZucAorXQorWworLkIgXC1vCisuSSBzcmNfb2Zmc2V0CitdCitbCisuQiBcLU8KKy5JIGRlc3Rfb2Zmc2V0CitdCisuSSBzcmNfZnMKK1sKKy5JIGRlc3RfZnMKK10KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBlMmltYWdlCitwcm9ncmFtIHdpbGwgc2F2ZSBjcml0aWNhbCBleHQyLCBleHQzLCBvciBleHQ0IGZpbGVzeXN0ZW0gbWV0YWRhdGEgbG9jYXRlZCBvbgorLkkgZGV2aWNlCit0byBhIGZpbGUgc3BlY2lmaWVkIGJ5CisuSVIgaW1hZ2UtZmlsZSAuCitUaGUgaW1hZ2UgZmlsZSBtYXkgYmUgZXhhbWluZWQgYnkKKy5CIGR1bXBlMmZzCithbmQKKy5CUiAgZGVidWdmcyAsCitieSB1c2luZyB0aGUKKy5CIFwtaQorb3B0aW9uIHRvIHRob3NlIHByb2dyYW1zLiAgVGhpcyBjYW4gYXNzaXN0IGFuIGV4cGVydCBpbgorcmVjb3ZlcmluZyBjYXRhc3Ryb3BoaWNhbGx5IGNvcnJ1cHRlZCBmaWxlc3lzdGVtcy4gIEluIHRoZSBmdXR1cmUsCitlMmZzY2sgd2lsbCBiZSBlbmhhbmNlZCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgaW1hZ2UgZmlsZSB0byBoZWxwCityZWNvdmVyIGEgYmFkbHkgZGFtYWdlZCBmaWxlc3lzdGVtLgorLlBQCitXaGVuIHNhdmluZyBhbiBlMmltYWdlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHVzaW5nIGVpdGhlciB0aGUKKy5CIFwtcgorb3IKKy5CIFwtUQorb3B0aW9ucywgdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSB1bm1vdW50ZWQgb3IgYmUgbW91bnRlZCByZWFkL29ubHksIGluIG9yZGVyCitmb3IgdGhlIGltYWdlIGZpbGUgdG8gYmUgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyByZXF1aXJlbWVudCBjYW4gYmUKK292ZXJyaWRlbiB1c2luZyB0aGUKKy5CIFwtZgorb3B0aW9uLCBidXQgdGhlIHJlc3VsdGluZyBpbWFnZSBmaWxlIGlzIHZlcnkgbGlrZWx5IG5vdCBnb2luZyB0byBiZSB1c2VmdWwuCisuUFAKK0lmCisuSSBpbWFnZS1maWxlCitpcyBcLSwgdGhlbiB0aGUgb3V0cHV0IG9mCisuQiBlMmltYWdlCit3aWxsIGJlIHNlbnQgdG8gc3RhbmRhcmQgb3V0cHV0LCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHBpcGVkIHRvCithbm90aGVyIHByb2dyYW0sIHN1Y2ggYXMKKy5CUiBnemlwICgxKS4KKyhOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2hlbgorY3JlYXRpbmcgYSByYXcgaW1hZ2UgZmlsZSB1c2luZyB0aGUKKy5CIFwtcgorb3B0aW9uLCBzaW5jZSB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIG5vcm1hbCBpbWFnZSBmaWxlLCBvciBRQ09XMgoraW1hZ2UgY3VycmVudGx5CityZXF1aXJlcyByYW5kb20gYWNjZXNzIHRvIHRoZSBmaWxlLCB3aGljaCBjYW5ub3QgYmUgZG9uZSB1c2luZyBhCitwaXBlLiAgVGhpcyByZXN0cmljdGlvbiB3aWxsIGhvcGVmdWxseSBiZSBsaWZ0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZgorLkJSIGUyaW1hZ2UgLikKKy5QUAorSXQgaXMgYSB2ZXJ5IGdvb2QgaWRlYSB0byBjcmVhdGUgaW1hZ2UgZmlsZXMgZm9yIGFsbCBvZgorZmlsZXN5c3RlbXMgb24gYSBzeXN0ZW0gYW5kIHNhdmUgdGhlIHBhcnRpdGlvbgorbGF5b3V0ICh3aGljaCBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZQorLkIgZmRpc2sgXC1sCitjb21tYW5kKSBhdCByZWd1bGFyIGludGVydmFscyAtLS0gYXQgYm9vdCB0aW1lLCBhbmQvb3IgZXZlcnkgd2VlayBvciBzby4KK1RoZSBpbWFnZSBmaWxlIHNob3VsZCBiZSBzdG9yZWQgb24gc29tZSBmaWxlc3lzdGVtIG90aGVyIHRoYW4KK3RoZSBmaWxlc3lzdGVtIHdob3NlIGRhdGEgaXQgY29udGFpbnMsIHRvIGVuc3VyZSB0aGF0IHRoaXMgZGF0YSBpcworYWNjZXNzaWJsZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBiYWRseSBkYW1hZ2VkLgorLlBQCitUbyBzYXZlIGRpc2sgc3BhY2UsCisuQiBlMmltYWdlCitjcmVhdGVzIHRoZSBpbWFnZSBmaWxlIGFzIGEgc3BhcnNlIGZpbGUsIG9yIGluIFFDT1cyIGZvcm1hdC4KK0hlbmNlLCBpZiB0aGUgc3BhcnNlIGltYWdlIGZpbGUKK25lZWRzIHRvIGJlIGNvcGllZCB0byBhbm90aGVyIGxvY2F0aW9uLCBpdCBzaG91bGQKK2VpdGhlciBiZSBjb21wcmVzc2VkIGZpcnN0IG9yIGNvcGllZCB1c2luZyB0aGUKKy5CIFwtXC1zcGFyc2U9YWx3YXlzCitvcHRpb24gdG8gdGhlIEdOVSB2ZXJzaW9uIG9mCisuQlIgY3AgLgorVGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgUUNPVzIgaW1hZ2UsIHdoaWNoIGlzIG5vdCBzcGFyc2UuCisuUFAKK1RoZSBzaXplIG9mIGFuIGV4dDIgaW1hZ2UgZmlsZSBkZXBlbmRzIHByaW1hcmlseSBvbiB0aGUgc2l6ZSBvZiB0aGUKK2ZpbGVzeXN0ZW1zIGFuZCBob3cgbWFueSBpbm9kZXMgYXJlIGluIHVzZS4gIEZvciBhIHR5cGljYWwgMTAgZ2lnYWJ5dGUKK2ZpbGVzeXN0ZW0sIHdpdGggMjAwLDAwMCBpbm9kZXMgaW4gdXNlIG91dCBvZiAxLjIgbWlsbGlvbiBpbm9kZXMsIHRoZQoraW1hZ2UgZmlsZSB3aWxsIGJlIGFwcHJveGltYXRlbHkgMzUgbWVnYWJ5dGVzOyBhIDQgZ2lnYWJ5dGUgZmlsZXN5c3RlbSB3aXRoCisxNSwwMDAgaW5vZGVzIGluIHVzZSBvdXQgb2YgNTUwLDAwMCBpbm9kZXMgd2lsbCByZXN1bHQgaW4gYSAzIG1lZ2FieXRlCitpbWFnZSBmaWxlLiAgSW1hZ2UgZmlsZXMgdGVuZCB0byBiZSBxdWl0ZQorY29tcHJlc3NpYmxlOyBhbiBpbWFnZSBmaWxlIHRha2luZyB1cCAzMiBtZWdhYnl0ZXMgb2Ygc3BhY2Ugb24KK2Rpc2sgd2lsbCBnZW5lcmFsbHkgY29tcHJlc3MgZG93biB0byAzIG9yIDQgbWVnYWJ5dGVzLgorLlBQCisuU0ggUkVTVE9SSU5HIEZJTEVTWVNURU0gTUVUQURBVEEgVVNJTkcgQU4gSU1BR0UgRklMRQorLlBQCitUaGUKKy5CIFwtSQorb3B0aW9uIHdpbGwgY2F1c2UgZTJpbWFnZSB0byBpbnN0YWxsIHRoZSBtZXRhZGF0YSBzdG9yZWQgaW4gdGhlIGltYWdlCitmaWxlIGJhY2sgdG8gdGhlIGRldmljZS4gIEl0IGNhbiBiZSB1c2VkIHRvIHJlc3RvcmUgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEKK2JhY2sgdG8gdGhlIGRldmljZSBpbiBlbWVyZ2VuY3kgc2l0dWF0aW9ucy4KKy5QUAorLkIgV0FSTklORyEhISEKK1RoZQorLkIgXC1JCitvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGRlc3BlcmF0aW9uIG1lYXN1cmUgd2hlbiBvdGhlcgorYWx0ZXJuYXRpdmVzIGhhdmUgZmFpbGVkLiAgSWYgdGhlIGZpbGVzeXN0ZW0gaGFzIGNoYW5nZWQgc2luY2UgdGhlIGltYWdlCitmaWxlIHdhcyBjcmVhdGVkLCBkYXRhCisuQiB3aWxsCitiZSBsb3N0LiAgSW4gZ2VuZXJhbCwgeW91IHNob3VsZCBtYWtlIGEgZnVsbCBpbWFnZQorYmFja3VwIG9mIHRoZSBmaWxlc3lzdGVtIGZpcnN0LCBpbiBjYXNlIHlvdSB3aXNoIHRvIHRyeSBvdGhlciByZWNvdmVyeQorc3RyYXRlZ2llcyBhZnRlcndhcmRzLgorLlBQCisuU0ggUkFXIElNQUdFIEZJTEVTCitUaGUKKy5CIFwtcgorb3B0aW9uIHdpbGwgY3JlYXRlIGEgcmF3IGltYWdlIGZpbGUgaW5zdGVhZCBvZiBhIG5vcm1hbCBpbWFnZSBmaWxlLgorQSByYXcgaW1hZ2UgZmlsZSBkaWZmZXJzCitmcm9tIGEgbm9ybWFsIGltYWdlIGZpbGUgaW4gdHdvIHdheXMuICBGaXJzdCwgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaXMKK3BsYWNlZCBpbiB0aGUgcHJvcGVyIHBvc2l0aW9uIHNvIHRoYXQgZTJmc2NrLCBkdW1wZTJmcywgZGVidWdmcywKK2V0Yy5cJiBjYW4gYmUgcnVuIGRpcmVjdGx5IG9uIHRoZSByYXcgaW1hZ2UgZmlsZS4gIEluIG9yZGVyIHRvIG1pbmltaXplCit0aGUgYW1vdW50IG9mIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgYSByYXcgaW1hZ2UgZmlsZSwgdGhlIGZpbGUgaXMKK2NyZWF0ZWQgYXMgYSBzcGFyc2UgZmlsZS4gIChCZXdhcmUgb2YgY29weWluZyBvcgorY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyB0aGlzIGZpbGUgd2l0aCB1dGlsaXRpZXMgdGhhdCBkb24ndCB1bmRlcnN0YW5kCitob3cgdG8gY3JlYXRlIHNwYXJzZSBmaWxlczsgdGhlIGZpbGUgd2lsbCBiZWNvbWUgYXMgbGFyZ2UgYXMgdGhlCitmaWxlc3lzdGVtIGl0c2VsZiEpICBTZWNvbmRseSwgdGhlIHJhdyBpbWFnZSBmaWxlIGFsc28gaW5jbHVkZXMgaW5kaXJlY3QKK2Jsb2NrcyBhbmQgZGlyZWN0b3J5IGJsb2Nrcywgd2hpY2ggdGhlIHN0YW5kYXJkIGltYWdlIGZpbGUgZG9lcyBub3QgaGF2ZSwKK2FsdGhvdWdoIHRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorLlBQCitSYXcgaW1hZ2UgZmlsZXMgYXJlIHNvbWV0aW1lcyB1c2VkIHdoZW4gc2VuZGluZyBmaWxlc3lzdGVtcyB0byB0aGUgbWFpbnRhaW5lcgorYXMgcGFydCBvZiBidWcgcmVwb3J0cyB0byBlMmZzcHJvZ3MuICBXaGVuIHVzZWQgaW4gdGhpcyBjYXBhY2l0eSwgdGhlCityZWNvbW1lbmRlZCBjb21tYW5kIGlzIGFzIGZvbGxvd3MgKHJlcGxhY2UgaGRhMSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkZXZpY2UpOgorLlBQCisuYnIKKwlcZkJlMmltYWdlIFwtciAvZGV2L2hkYTEgXC0gfCBiemlwMiA+IGhkYTEuZTJpLmJ6MlxmUgorLlBQCitUaGlzIHdpbGwgb25seSBzZW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiwgd2l0aG91dCBhbnkgZGF0YSBibG9ja3MuCitIb3dldmVyLCB0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGNhbiBzdGlsbCByZXZlYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSB0aGF0IHRoZSBidWcgcmVwb3J0ZXIKK21heSB3aXNoIHRvIGtlZXAgY29uZmlkZW50aWFsLiAgVG8gYWRkcmVzcyB0aGlzIGNvbmNlcm4sIHRoZQorLkIgXC1zCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZQorLkIgZTJpbWFnZQordG8gc2NyYW1ibGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHplcm8gb3V0IGFueSB1bnVzZWQgcG9ydGlvbnMKK29mIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGJlZm9yZSB3cml0aW5nIHRoZSBpbWFnZSBmaWxlLiAgSG93ZXZlciwKK3RoZQorLkIgXC1zCitvcHRpb24gd2lsbCBwcmV2ZW50IGFuYWx5c2lzIG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gaGFzaC10cmVlIGluZGV4ZWQKK2RpcmVjdG9yaWVzLgorLlBQCitOb3RlIHRoYXQgdGhpcyB3aWxsIHdvcmsgZXZlbiBpZiB5b3Ugc3Vic3RpdHV0ZSAiL2Rldi9oZGExIiBmb3IgYW5vdGhlciByYXcKK2Rpc2sgaW1hZ2UsIG9yIFFDT1cyIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZCBieQorLkJSIGUyaW1hZ2UgLgorLlBQCisuU0ggUUNPVzIgSU1BR0UgRklMRVMKK1RoZQorLkIgXC1RCitvcHRpb24gd2lsbCBjcmVhdGUgYSBRQ09XMiBpbWFnZSBmaWxlIGluc3RlYWQgb2YgYSBub3JtYWwsIG9yIHJhdyBpbWFnZSBmaWxlLgorQSBRQ09XMiBpbWFnZSBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHRoZSByYXcgaW1hZ2UgZG9lcywgaG93ZXZlciB1bmxpa2UKK3RoZSByYXcgaW1hZ2UgaXQgaXMgbm90IHNwYXJzZS4gVGhlIFFDT1cyIGltYWdlIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZGlzaworc3BhY2UgYnkgc3RvcmluZyBkYXRhIGluIHNwZWNpYWwgZm9ybWF0IHdpdGggcGFjayBkYXRhIGNsb3NlbHkgdG9nZXRoZXIsIGhlbmNlCithdm9pZGluZyBob2xlcyB3aGlsZSBzdGlsbCBtaW5pbWl6aW5nIHNpemUuCisuUFAKK0luIG9yZGVyIHRvIHNlbmQgZmlsZXN5c3RlbSB0byB0aGUgbWFpbnRhaW5lciBhcyBhIHBhcnQgb2YgYnVnIHJlcG9ydCB0bworZTJmc3Byb2dzLCB1c2UgZm9sbG93aW5nIGNvbW1hbmRzIChyZXBsYWNlIGhkYTEgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGV2aWNlKToKKy5QUAorLmJyCitcCVxmQmUyaW1hZ2UgXC1RIC9kZXYvaGRhMSBoZGExLnFjb3cyXGZSCisuYnIKK1wJXGZCYnppcDIgLXogaGRhMS5xY293MlxmUgorLlBQCitUaGlzIHdpbGwgb25seSBzZW5kIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiwgd2l0aG91dCBhbnkgZGF0YSBibG9ja3MuCitIb3dldmVyLCB0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGNhbiBzdGlsbCByZXZlYWwKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSB0aGF0IHRoZSBidWcgcmVwb3J0ZXIKK21heSB3aXNoIHRvIGtlZXAgY29uZmlkZW50aWFsLiAgVG8gYWRkcmVzcyB0aGlzIGNvbmNlcm4sIHRoZQorLkIgXC1zCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZC4gIFRoaXMgd2lsbCBjYXVzZQorLkIgZTJpbWFnZQordG8gc2NyYW1ibGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHplcm8gb3V0IGFueSB1bnVzZWQgcG9ydGlvbnMKK29mIHRoZSBkaXJlY3RvcnkgYmxvY2tzIGJlZm9yZSB3cml0aW5nIHRoZSBpbWFnZSBmaWxlLiAgSG93ZXZlciwgdGhlCisuQiBcLXMKK29wdGlvbiB3aWxsIHByZXZlbnQgYW5hbHlzaXMgb2YgcHJvYmxlbXMgcmVsYXRlZCB0byBoYXNoLXRyZWUgaW5kZXhlZAorZGlyZWN0b3JpZXMuCisuUFAKK05vdGUgdGhhdCBRQ09XMiBpbWFnZSBjcmVhdGVkIGJ5CisuQiBlMmltYWdlCitpcyByZWd1bGFyIFFDT1cyIGltYWdlIGFuZCBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHRvb2xzIGF3YXJlIG9mIFFDT1cyIGZvcm1hdAorc3VjaCBhcyBmb3IgZXhhbXBsZQorLkJSIHFlbXUtaW1nIC4KKy5QUAorWW91IGNhbiBjb252ZXJ0IGEgcWNvdzIgaW1hZ2UgaW50byBhIHJhdyBpbWFnZSB3aXRoOgorLlBQCisuYnIKK1wJXGZCZTJpbWFnZSBcLXIgaGRhMS5xY293MiBoZGExLnJhd1xmUgorLmJyCisuUFAKK1RoaXMgY2FuIGJlIHVzZWZ1bCB0byB3cml0ZSBhIHFjb3cyIGltYWdlIGNvbnRhaW5pbmcgYWxsIGRhdGEgdG8gYQorc3BhcnNlIGltYWdlIGZpbGUgd2hlcmUgaXQgY2FuIGJlIGxvb3AgbW91bnRlZCwgb3IgdG8gYSBkaXNrIHBhcnRpdGlvbi4KK05vdGUgdGhhdCB0aGlzIG1heSBub3Qgd29yayB3aXRoIHFjb3cyIGltYWdlcyBub3QgZ2VuZXJhdGVkIGJ5IGUyaW1hZ2UuCisuUFAKKy5TSCBJTkNMVURJTkcgREFUQQorTm9ybWFsbHkKKy5CIGUyaW1hZ2UKK29ubHkgaW5jbHVkZXMgZnMgbWV0YWRhdGEsIG5vdCByZWd1bGFyIGZpbGUgZGF0YS4gIFRoZQorLkIgXC1hCitvcHRpb24gY2FuIGJlIHNwZWNpZmllZCB0byBpbmNsdWRlIGFsbCBkYXRhLiAgVGhpcyB3aWxsCitnaXZlIGFuIGltYWdlIHRoYXQgaXMgc3VpdGFibGUgdG8gdXNlIHRvIGNsb25lIHRoZSBlbnRpcmUgRlMgb3IKK2ZvciBiYWNrdXAgcHVycG9zZXMuICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gb25seSB3b3JrcyB3aXRoIHRoZQorcmF3IG9yIFFDT1cyIGZvcm1hdHMuICBUaGUKKy5CIFwtcAorc3dpdGNoIG1heSBiZSBnaXZlbiB0byBzaG93IHByb2dyZXNzLiAgSWYgdGhlIGZpbGUgc3lzdGVtIGlzIGJlaW5nCitjbG9uZWQgdG8gYSBmbGFzaC1iYXNlZCBzdG9yYWdlIGRldmljZSAod2hlcmUgcmVhZHMgYXJlIHZlcnkgZmFzdCBhbmQKK3doZXJlIGl0IGlzIGRlc2lyYWJsZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3cml0ZXMgdG8gcmVkdWNlIHdyaXRlIHdlYXIKK29uIHRoZSBkZXZpY2UpLCB0aGUKKy5CIFwtYworb3B0aW9uIHdoaWNoIGNhdXNlIGUyaW1hZ2UgdG8gdHJ5IHJlYWRpbmcgYSBibG9jayBmcm9tIHRoZSBkZXN0aW5hdGlvbgordG8gc2VlIGlmIGl0IGlzIGlkZW50aWNhbCB0byB0aGUgYmxvY2sgd2hpY2gKKy5CIGUyaW1hZ2UKK2lzIGFib3V0IHRvIGNvcHkuICBJZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSB0aGUgc2FtZSwgdGhlIHdyaXRlIGNhbiBiZQorc2tpcHBlZC4gIFRoZQorLkIgXC1uCitvcHRpb24gd2lsbCBjYXVzZSBhbGwgb2YgdGhlIHdyaXRlcyB0byBiZSBuby1vcHMsIGFuZCBwcmludCB0aGUgYmxvY2tzCit0aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuLgorLlBQCisuU0ggT0ZGU0VUUworTm9ybWFsbHkgYSBmaWxlc3lzdGVtIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFydGl0aW9uLCBhbmQKKy5CIGUyaW1hZ2UKK2lzIHJ1biBvbiB0aGUgcGFydGl0aW9uLiAgV2hlbiB3b3JraW5nIHdpdGggaW1hZ2UgZmlsZXMsIHlvdSBkb24ndAoraGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIHRoZSBwYXJ0aXRpb24gZGV2aWNlLCBzbyB5b3UgY2FuIHNwZWNpZnkKK3RoZSBvZmZzZXQgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gc3RhcnRzIGRpcmVjdGx5IHdpdGggdGhlCisuQiBcLW8KK29wdGlvbi4gIFNpbWlsYXJseSB0aGUKKy5CIFwtTworb3B0aW9uIHNwZWNpZmllcyB0aGUgb2Zmc2V0IHRoYXQgc2hvdWxkIGJlIHNlZWtlZCB0byBpbiB0aGUgZGVzdGluYXRpb24KK2JlZm9yZSB3cml0aW5nIHRoZSBmaWxlc3lzdGVtLgorLlBQCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYQorLkIgZGQKK2ltYWdlIG9mIGEgd2hvbGUgaGFyZCBkcml2ZSB0aGF0IGNvbnRhaW5zIGFuIGV4dDIgZnMgaW4gYSBwYXJ0aXRpb24KK3N0YXJ0aW5nIGF0IDEgTWlCLCB5b3UgY2FuIGNsb25lIHRoYXQgZnMgd2l0aDoKKy5QUAorLmJyCitcCVxmQmUyaW1hZ2UgXC1hcm8gMTA0ODU3NiBpbWcgL2Rldi9zZGExXGZSCisuYnIKKy5QUAorT3IgeW91IGNhbiBjbG9uZSBhIGZzIGludG8gYW4gaW1hZ2UgZmlsZSwgbGVhdmluZyByb29tIGluIHRoZSBmaXJzdAorTWlCIGZvciBhIHBhcnRpdGlvbiB0YWJsZSB3aXRoOgorLlBQCisuYnIKK1wJXGZCZTJpbWFnZSAtYXJPIDEwNDg1NzYgL2Rldi9zZGExIGltZ1xmUgorLmJyCisuUFAKK0lmIHlvdSBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZmZzZXQsIGFuZCBvbmx5IG9uZSBmaWxlLCBhbiBpbi1wbGFjZQorbW92ZSB3aWxsIGJlIHBlcmZvcm1lZCwgYWxsb3dpbmcgeW91IHRvIHNhZmVseSBtb3ZlIHRoZSBmaWxlc3lzdGVtCitmcm9tIG9uZSBvZmZzZXQgdG8gYW5vdGhlci4KKy5TSCBBVVRIT1IKKy5CIGUyaW1hZ2UKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gKHR5dHNvQG1pdC5lZHUpLgorLlNIIEFWQUlMQUJJTElUWQorLkIgZTJpbWFnZQoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGR1bXBlMmZzICg4KSwKKy5CUiBkZWJ1Z2ZzICg4KQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9lMmltYWdlLmMgYi9lMmZzcHJvZ3MvbWlzYy9lMmltYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNGQxMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2UyaW1hZ2UuYwpAQCAtMCwwICsxLDE2NjIgQEAKKy8qCisgKiBlMmltYWdlLmMgLS0tIFByb2dyYW0gd2hpY2ggd3JpdGVzIGFuIGltYWdlIGZpbGUgYmFja2luZyB1cAorICogY3JpdGljYWwgbWV0YWRhdGEgZm9yIHRoZSBmaWxlc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAyMDAwLCAyMDAxIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJleHQyZnMvZTJpbWFnZS5oIgorI2luY2x1ZGUgImV4dDJmcy9xY293Mi5oIgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBRQ09XX09GTEFHX0NPUElFRCAgICAgKDFMTCA8PCA2MykKKyNkZWZpbmUgTk9fQkxLICgoYmxrNjRfdCkgLTEpCisKKy8qIEltYWdlIHR5cGVzICovCisjZGVmaW5lIEUySU1BR0VfUkFXCTEKKyNkZWZpbmUgRTJJTUFHRV9RQ09XMgkyCisKKy8qIEltYWdlIGZsYWdzICovCisjZGVmaW5lIEUySU1BR0VfSU5TVEFMTF9GTEFHCTEKKyNkZWZpbmUgRTJJTUFHRV9TQ1JBTUJMRV9GTEFHCTIKKyNkZWZpbmUgRTJJTUFHRV9JU19RQ09XMl9GTEFHCTQKKyNkZWZpbmUgRTJJTUFHRV9DSEVDS19aRVJPX0ZMQUcJOAorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJlMmltYWdlIjsKK3N0YXRpYyBjaGFyICogZGV2aWNlX25hbWUgPSBOVUxMOworc3RhdGljIGNoYXIgYWxsX2RhdGE7CitzdGF0aWMgY2hhciBvdXRwdXRfaXNfYmxrOworc3RhdGljIGNoYXIgbm9wX2ZsYWc7CisvKiB3cml0aW5nIHRvIGJsayBkZXZpY2U6IGRvbid0IHNraXAgemVyb2VkIGJsb2NrcyAqLworc3RhdGljIGJsazY0X3Qgc291cmNlX29mZnNldCwgZGVzdF9vZmZzZXQ7CitzdGF0aWMgY2hhciBtb3ZlX21vZGU7CitzdGF0aWMgY2hhciBzaG93X3Byb2dyZXNzOworc3RhdGljIGNoYXIgKmNoZWNrX2J1ZjsKK3N0YXRpYyBpbnQgc2tpcHBlZF9ibG9ja3M7CisKK3N0YXRpYyBibGs2NF90IGFsaWduX29mZnNldChibGs2NF90IG9mZnNldCwgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIChvZmZzZXQgKyBuIC0gMSkgJiB+KChibGs2NF90KSBuIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2JpdHNfZnJvbV9zaXplKHNpemVfdCBzaXplKQoreworCWludCByZXMgPSAwOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKHNpemUgIT0gMSkgeworCQkvKiBOb3QgYSBwb3dlciBvZiB0d28gKi8KKwkJaWYgKHNpemUgJiAxKQorCQkJcmV0dXJuIC0xOworCisJCXNpemUgPj49IDE7CisJCXJlcysrOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWyAtcnxRIF0gWyAtZnIgXSBkZXZpY2UgaW1hZ2UtZmlsZVxuIiksCisJCXByb2dyYW1fbmFtZSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiAgICAgICAlcyAtSSBkZXZpY2UgaW1hZ2UtZmlsZVxuIiksIHByb2dyYW1fbmFtZSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiAgICAgICAlcyAtcmEgIFsgIC1jZm5wICBdIFsgLW8gc3JjX29mZnNldCBdICIKKwkJCSAgIlsgLU8gZGVzdF9vZmZzZXQgXSBzcmNfZnMgWyBkZXN0X2ZzIF1cbiIpLAorCQlwcm9ncmFtX25hbWUpOworCWV4aXQgKDEpOworfQorCitzdGF0aWMgZXh0Ml9sb2ZmX3Qgc2Vla19yZWxhdGl2ZShpbnQgZmQsIGludCBvZmZzZXQpCit7CisJZXh0Ml9sb2ZmX3QgcmV0ID0gZXh0MmZzX2xsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX0NVUik7CisJaWYgKHJldCA8IDApIHsKKwkJcGVycm9yKCJzZWVrX3JlbGF0aXZlIik7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBleHQyX2xvZmZfdCBzZWVrX3NldChpbnQgZmQsIGV4dDJfbG9mZl90IG9mZnNldCkKK3sKKwlleHQyX2xvZmZfdCByZXQgPSBleHQyZnNfbGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlwZXJyb3IoInNlZWtfc2V0Iik7CisJCWV4aXQoMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJsb2NrIHdlIGFyZSBhYm91dCB0byB3cml0ZSBpcyBpZGVudGljYWwgdG8KKyAqIHdoYXQgaXMgYWxyZWFkeSBvbiB0aGUgZGlzay4KKyAqLworc3RhdGljIGludCBjaGVja19ibG9jayhpbnQgZmQsIHZvaWQgKmJ1Ziwgdm9pZCAqY2J1ZiwgaW50IGJsb2Nrc2l6ZSkKK3sKKwljaGFyICpjcCA9IGNidWY7CisJaW50IGNvdW50ID0gYmxvY2tzaXplLCByZXQ7CisKKwlpZiAoY2J1ZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJcmV0ID0gcmVhZChmZCwgY3AsIGNvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXBlcnJvcigiY2hlY2tfYmxvY2siKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJY291bnQgLT0gcmV0OworCQljcCArPSByZXQ7CisJfQorCXJldCA9IG1lbWNtcChidWYsIGNidWYsIGJsb2Nrc2l6ZSk7CisJc2Vla19yZWxhdGl2ZShmZCwgLWJsb2Nrc2l6ZSk7CisJcmV0dXJuIChyZXQgPT0gMCkgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJpY193cml0ZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGJsb2Nrc2l6ZSwgYmxrNjRfdCBibG9jaykKK3sKKwlpbnQgY291bnQsIGZyZWVfYnVmID0gMDsKKwllcnJjb2RlX3QgZXJyOworCisJaWYgKCFibG9ja3NpemUpCisJCXJldHVybjsKKworCWlmICghYnVmKSB7CisJCWZyZWVfYnVmID0gMTsKKwkJZXJyID0gZXh0MmZzX2dldF9hcnJheXplcm8oMSwgYmxvY2tzaXplLCAmYnVmKTsKKwkJaWYgKGVycikgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIGVyciwKKwkJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlciIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJaWYgKG5vcF9mbGFnKSB7CisJCXByaW50ZihfKCJXcml0aW5nIGJsb2NrICVsbHVcbiIpLCAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisJCWlmIChmZCAhPSAxKQorCQkJc2Vla19yZWxhdGl2ZShmZCwgYmxvY2tzaXplKTsKKwkJcmV0dXJuOworCX0KKwljb3VudCA9IHdyaXRlKGZkLCBidWYsIGJsb2Nrc2l6ZSk7CisJaWYgKGNvdW50ICE9IGJsb2Nrc2l6ZSkgeworCQlpZiAoY291bnQgPT0gLTEpCisJCQllcnIgPSBlcnJubzsKKwkJZWxzZQorCQkJZXJyID0gMDsKKworCQlpZiAoYmxvY2spCisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJyLAorCQkJCV8oImVycm9yIHdyaXRpbmcgYmxvY2sgJWxsdSIpLCBibG9jayk7CisJCWVsc2UKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnIsIF8oImVycm9yIGluIHdyaXRlKCkiKSk7CisKKwkJZXhpdCgxKTsKKwl9CisJaWYgKGZyZWVfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2hlYWRlcihpbnQgZmQsIHZvaWQgKmhkciwgaW50IGhkcl9zaXplLCBpbnQgd3J0X3NpemUpCit7CisJY2hhciAqaGVhZGVyX2J1ZjsKKwlpbnQgcmV0OworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKGhkcl9zaXplID4gd3J0X3NpemUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIpKTsKKwl9CisKKwlyZXQgPSBleHQyZnNfZ2V0X21lbSh3cnRfc2l6ZSwgJmhlYWRlcl9idWYpOworCWlmIChyZXQpIHsKKwkJZnB1dHMoXygiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIiksIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCisJc2Vla19zZXQoZmQsIDApOworCW1lbXNldChoZWFkZXJfYnVmLCAwLCB3cnRfc2l6ZSk7CisKKwlpZiAoaGRyKQorCQltZW1jcHkoaGVhZGVyX2J1ZiwgaGRyLCBoZHJfc2l6ZSk7CisKKwlnZW5lcmljX3dyaXRlKGZkLCBoZWFkZXJfYnVmLCB3cnRfc2l6ZSwgTk9fQkxLKTsKKworCWV4dDJmc19mcmVlX21lbSgmaGVhZGVyX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ltYWdlX2ZpbGUoZXh0Ml9maWxzeXMgZnMsIGludCBmZCkKK3sKKwlzdHJ1Y3QgZXh0Ml9pbWFnZV9oZHIJaGRyOworCXN0cnVjdCBzdGF0CQlzdDsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCXdyaXRlX2hlYWRlcihmZCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBleHQyX2ltYWdlX2hkciksIGZzLT5ibG9ja3NpemUpOworCW1lbXNldCgmaGRyLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfaW1hZ2VfaGRyKSk7CisKKwloZHIub2Zmc2V0X3N1cGVyID0gc2Vla19yZWxhdGl2ZShmZCwgMCk7CisJcmV0dmFsID0gZXh0MmZzX2ltYWdlX3N1cGVyX3dyaXRlKGZzLCBmZCwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIikpOworCQlleGl0KDEpOworCX0KKworCWhkci5vZmZzZXRfaW5vZGUgPSBzZWVrX3JlbGF0aXZlKGZkLCAwKTsKKwlyZXR2YWwgPSBleHQyZnNfaW1hZ2VfaW5vZGVfd3JpdGUoZnMsIGZkLAorCQkJCSAgKGZkICE9IDEpID8gSU1BR0VSX0ZMQUdfU1BBUlNFV1JJVEUgOiAwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIikpOworCQlleGl0KDEpOworCX0KKworCWhkci5vZmZzZXRfYmxvY2ttYXAgPSBzZWVrX3JlbGF0aXZlKGZkLCAwKTsKKwlyZXR2YWwgPSBleHQyZnNfaW1hZ2VfYml0bWFwX3dyaXRlKGZzLCBmZCwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaGRyLm9mZnNldF9pbm9kZW1hcCA9IHNlZWtfcmVsYXRpdmUoZmQsIDApOworCXJldHZhbCA9IGV4dDJmc19pbWFnZV9iaXRtYXBfd3JpdGUoZnMsIGZkLCBJTUFHRVJfRkxBR19JTk9ERU1BUCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaGRyLm1hZ2ljX251bWJlciA9IEVYVDJfRVRfTUFHSUNfRTJJTUFHRTsKKwlzdHJjcHkoaGRyLm1hZ2ljX2Rlc2NyaXB0b3IsICJFeHQyIEltYWdlIDEuMCIpOworCWdldGhvc3RuYW1lKGhkci5mc19ob3N0bmFtZSwgc2l6ZW9mKGhkci5mc19ob3N0bmFtZSkpOworCXN0cm5jcHkoaGRyLmZzX2RldmljZV9uYW1lLCBkZXZpY2VfbmFtZSwgc2l6ZW9mKGhkci5mc19kZXZpY2VfbmFtZSktMSk7CisJaGRyLmZzX2RldmljZV9uYW1lW3NpemVvZihoZHIuZnNfZGV2aWNlX25hbWUpIC0gMV0gPSAwOworCWhkci5mc19ibG9ja3NpemUgPSBmcy0+YmxvY2tzaXplOworCisJaWYgKHN0YXQoZGV2aWNlX25hbWUsICZzdCkgPT0gMCkKKwkJaGRyLmZzX2RldmljZSA9IHN0LnN0X3JkZXY7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPT0gMCkgeworCQloZHIuaW1hZ2VfZGV2aWNlID0gc3Quc3RfZGV2OworCQloZHIuaW1hZ2VfaW5vZGUgPSBzdC5zdF9pbm87CisJfQorCW1lbWNweShoZHIuZnNfdXVpZCwgZnMtPnN1cGVyLT5zX3V1aWQsIHNpemVvZihoZHIuZnNfdXVpZCkpOworCisJaGRyLmltYWdlX3RpbWUgPSB0aW1lKDApOworCXdyaXRlX2hlYWRlcihmZCwgJmhkciwgc2l6ZW9mKHN0cnVjdCBleHQyX2ltYWdlX2hkciksIGZzLT5ibG9ja3NpemUpOworfQorCisvKgorICogVGhlc2Ugc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byB3cml0ZSBhIFJBVyBpbWFnZSBmaWxlLgorICovCitzdGF0aWMgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtZXRhX2Jsb2NrX21hcDsKK3N0YXRpYyBleHQyZnNfYmxvY2tfYml0bWFwIHNjcmFtYmxlX2Jsb2NrX21hcDsJLyogRGlyZWN0b3J5IGJsb2NrcyB0byBiZSBzY3JhbWJsZWQgKi8KK3N0YXRpYyBibGs2NF90IG1ldGFfYmxvY2tzX2NvdW50OworCitzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgeworCWV4dDJfaW5vX3QJaW5vOworCWludAkJaXNfZGlyOworfTsKKworLyoKKyAqIFRoZXNlIHN1YnJvdXRpbmVzIHNob3J0IGNpcmN1aXRzIGV4dDJmc19nZXRfYmxvY2tzIGFuZAorICogZXh0MmZzX2NoZWNrX2RpcmVjdG9yeTsgd2UgdXNlIHRoZW0gc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBpbm9kZQorICogc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGxldHRpbmcgdGhlIGV4dDJmcyBsaWJyYXJ5IHJlYWQKKyAqIHRoZSBpbm9kZSBhZ2Fpbi4KKyAqLworc3RhdGljIGlub190IHN0YXNoZWRfaW5vID0gMDsKK3N0YXRpYyBzdHJ1Y3QgZXh0Ml9pbm9kZSAqc3Rhc2hlZF9pbm9kZTsKKworc3RhdGljIGVycmNvZGVfdCBtZXRhX2dldF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSBleHQyX2lub190IGlubywKKwkJCQkgYmxrX3QgKmJsb2NrcykKK3sKKwlpbnQJaTsKKworCWlmICgoaW5vICE9IHN0YXNoZWRfaW5vKSB8fCAhc3Rhc2hlZF9pbm9kZSkKKwkJcmV0dXJuIEVYVDJfRVRfQ0FMTEJBQ0tfTk9USEFORExFRDsKKworCWZvciAoaT0wOyBpIDwgRVhUMl9OX0JMT0NLUzsgaSsrKQorCQlibG9ja3NbaV0gPSBzdGFzaGVkX2lub2RlLT5pX2Jsb2NrW2ldOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IG1ldGFfY2hlY2tfZGlyZWN0b3J5KGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCQkgICAgICBleHQyX2lub190IGlubykKK3sKKwlpZiAoKGlubyAhPSBzdGFzaGVkX2lubykgfHwgIXN0YXNoZWRfaW5vZGUpCisJCXJldHVybiBFWFQyX0VUX0NBTExCQUNLX05PVEhBTkRMRUQ7CisKKwlpZiAoIUxJTlVYX1NfSVNESVIoc3Rhc2hlZF9pbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIEVYVDJfRVRfTk9fRElSRUNUT1JZOworCXJldHVybiAwOworfQorCitzdGF0aWMgZXJyY29kZV90IG1ldGFfcmVhZF9pbm9kZShleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJIGV4dDJfaW5vX3QgaW5vLAorCQkJCSBzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUpCit7CisJaWYgKChpbm8gIT0gc3Rhc2hlZF9pbm8pIHx8ICFzdGFzaGVkX2lub2RlKQorCQlyZXR1cm4gRVhUMl9FVF9DQUxMQkFDS19OT1RIQU5ETEVEOworCSppbm9kZSA9ICpzdGFzaGVkX2lub2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2VfaW5vZGVfc2hvcnRjdXRzKGV4dDJfZmlsc3lzIGZzLCBpbnQgdXNlX3Nob3J0Y3V0cykKK3sKKwlpZiAodXNlX3Nob3J0Y3V0cykgeworCQlmcy0+Z2V0X2Jsb2NrcyA9IG1ldGFfZ2V0X2Jsb2NrczsKKwkJZnMtPmNoZWNrX2RpcmVjdG9yeSA9IG1ldGFfY2hlY2tfZGlyZWN0b3J5OworCQlmcy0+cmVhZF9pbm9kZSA9IG1ldGFfcmVhZF9pbm9kZTsKKwkJc3Rhc2hlZF9pbm8gPSAwOworCX0gZWxzZSB7CisJCWZzLT5nZXRfYmxvY2tzID0gMDsKKwkJZnMtPmNoZWNrX2RpcmVjdG9yeSA9IDA7CisJCWZzLT5yZWFkX2lub2RlID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBibGs2NF90ICpibG9ja19uciwKKwkJCSAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnA7CisKKwlwID0gKHN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdCAqKSBwcml2X2RhdGE7CisKKwlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLCAqYmxvY2tfbnIpOworCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJaWYgKHNjcmFtYmxlX2Jsb2NrX21hcCAmJiBwLT5pc19kaXIgJiYgYmxvY2tjbnQgPj0gMCkKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihzY3JhbWJsZV9ibG9ja19tYXAsICpibG9ja19ucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19maWxlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgIGJsazY0X3QgKmJsb2NrX25yLAorCQkJICAgICAgZTJfYmxrY250X3QgYmxvY2tjbnQsCisJCQkgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWlmIChibG9ja2NudCA8IDAgfHwgYWxsX2RhdGEpIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihtZXRhX2Jsb2NrX21hcCwgKmJsb2NrX25yKTsKKwkJbWV0YV9ibG9ja3NfY291bnQrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfdGFibGVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzKQoreworCWJsazY0X3QJZmlyc3RfYmxvY2ssIGI7CisJdW5zaWduZWQgaW50CWksajsKKworCWZpcnN0X2Jsb2NrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJLyoKKwkgKiBNYXJrIHByaW1hcnkgc3VwZXJibG9jaworCSAqLworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsIGZpcnN0X2Jsb2NrKTsKKwltZXRhX2Jsb2Nrc19jb3VudCsrOworCisJLyoKKwkgKiBNYXJrIHRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgZGVzY3JpcHRvcnMKKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgZnMtPmRlc2NfYmxvY2tzOyBqKyspIHsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihtZXRhX2Jsb2NrX21hcCwKKwkJCSBleHQyZnNfZGVzY3JpcHRvcl9ibG9ja19sb2MyKGZzLCBmaXJzdF9ibG9jaywgaikpOworCX0KKwltZXRhX2Jsb2Nrc19jb3VudCArPSBmcy0+ZGVzY19ibG9ja3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQkvKgorCQkgKiBNYXJrIHRoZSBibG9ja3MgdXNlZCBmb3IgdGhlIGlub2RlIHRhYmxlCisJCSAqLworCQlpZiAoKG91dHB1dF9pc19ibGsgfHwKKwkJICAgICAhZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSkgJiYKKwkJICAgIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKSB7CisJCQl1bnNpZ25lZCBpbnQgZW5kID0gKHVuc2lnbmVkKSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJCS8qIHNraXAgdW51c2VkIGJsb2NrcyAqLworCQkJaWYgKCFvdXRwdXRfaXNfYmxrICYmCisJCQkgICAgRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKQorCQkJCWVuZCAtPSAoZXh0MmZzX2JnX2l0YWJsZV91bnVzZWQoZnMsIGkpIC8KKwkJCQkJRVhUMl9JTk9ERVNfUEVSX0JMT0NLKGZzLT5zdXBlcikpOworCQkJZm9yIChqID0gMCwgYiA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQkJICAgICBqIDwgZW5kOworCQkJICAgICBqKyssIGIrKykgeworCQkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsIGIpOworCQkJCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBibG9jayBiaXRtYXAKKwkJICovCisJCWlmICghZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSAmJgorCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLAorCQkJCSAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKTsKKwkJCW1ldGFfYmxvY2tzX2NvdW50Kys7CisJCX0KKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBpbm9kZSBiaXRtYXAKKwkJICovCisJCWlmICghZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKSAmJgorCQkgICAgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKG1ldGFfYmxvY2tfbWFwLAorCQkJCSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpOworCQkJbWV0YV9ibG9ja3NfY291bnQrKzsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIHRoZSBzcGVjaWZpZWQgYmxvY2sgaXMgYWxsIHplcm9zCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfemVyb19ibG9jayhjaGFyICpidWYsIGludCBibG9ja3NpemUpCit7CisJY2hhcgkqY3AgPSBidWY7CisJaW50CWxlZnQgPSBibG9ja3NpemU7CisKKwlpZiAob3V0cHV0X2lzX2JsaykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGxlZnQgPiAwKSB7CisJCWlmICgqY3ArKykKKwkJCXJldHVybiAwOworCQlsZWZ0LS07CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5hbWVfaWRbMjU2XTsKKworI2RlZmluZSBFWFQ0X01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQorCitzdGF0aWMgdm9pZCBzY3JhbWJsZV9kaXJfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrLCBjaGFyICpidWYpCit7CisJY2hhciAqcCwgKmVuZCwgKmNwOworCXN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICpkaXJlbnQ7CisJdW5zaWduZWQgaW50IHJlY19sZW47CisJaW50IGlkLCBsZW47CisKKwllbmQgPSBidWYgKyBmcy0+YmxvY2tzaXplOworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZC04OyBwICs9IHJlY19sZW4pIHsKKwkJZGlyZW50ID0gKHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICopIHA7CisJCXJlY19sZW4gPSBkaXJlbnQtPnJlY19sZW47CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisJCXJlY19sZW4gPSBleHQyZnNfc3dhYjE2KHJlY19sZW4pOworI2VuZGlmCisJCWlmIChyZWNfbGVuID09IEVYVDRfTUFYX1JFQ19MRU4gfHwgcmVjX2xlbiA9PSAwKQorCQkJcmVjX2xlbiA9IGZzLT5ibG9ja3NpemU7CisJCWVsc2UgCisJCQlyZWNfbGVuID0gKHJlY19sZW4gJiA2NTUzMikgfCAoKHJlY19sZW4gJiAzKSA8PCAxNik7CisjaWYgMAorCQlwcmludGYoInJlY19sZW4gPSAlZCwgbmFtZV9sZW4gPSAlZFxuIiwgcmVjX2xlbiwgZGlyZW50LT5uYW1lX2xlbik7CisjZW5kaWYKKwkJaWYgKHJlY19sZW4gPCA4IHx8IChyZWNfbGVuICUgNCkgfHwKKwkJICAgIChwK3JlY19sZW4gPiBlbmQpKSB7CisJCQlwcmludGYoXygiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogIgorCQkJCSAiYmFkIHJlY19sZW4gKCVkKVxuIiksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxrLCByZWNfbGVuKTsKKwkJCXJlY19sZW4gPSBlbmQgLSBwOworCQkJKHZvaWQpIGV4dDJmc19zZXRfcmVjX2xlbihmcywgcmVjX2xlbiwKKwkJCQkJKHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqKSBkaXJlbnQpOworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorCQkJZGlyZW50LT5yZWNfbGVuID0gZXh0MmZzX3N3YWIxNihkaXJlbnQtPnJlY19sZW4pOworI2VuZGlmCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGlyZW50LT5uYW1lX2xlbiArIDhVID4gcmVjX2xlbikgeworCQkJcHJpbnRmKF8oIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6ICIKKwkJCQkgImJhZCBuYW1lX2xlbiAoJWQpXG4iKSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibGssIGRpcmVudC0+bmFtZV9sZW4pOworCQkJZGlyZW50LT5uYW1lX2xlbiA9IHJlY19sZW4gLSA4OworCQkJY29udGludWU7CisJCX0KKwkJY3AgPSBwKzg7CisJCWxlbiA9IHJlY19sZW4gLSBkaXJlbnQtPm5hbWVfbGVuIC0gODsKKwkJaWYgKGxlbiA+IDApCisJCQltZW1zZXQoY3ArZGlyZW50LT5uYW1lX2xlbiwgMCwgbGVuKTsKKwkJaWYgKGRpcmVudC0+bmFtZV9sZW49PTEgJiYgY3BbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCWlmIChkaXJlbnQtPm5hbWVfbGVuPT0yICYmIGNwWzBdID09ICcuJyAmJiBjcFsxXSA9PSAnLicpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoY3AsICdBJywgZGlyZW50LT5uYW1lX2xlbik7CisJCWxlbiA9IGRpcmVudC0+bmFtZV9sZW47CisJCWlkID0gbmFtZV9pZFtsZW5dKys7CisJCXdoaWxlICgobGVuID4gMCkgJiYgKGlkID4gMCkpIHsKKwkJCSpjcCArPSBpZCAlIDI2OworCQkJaWQgPSBpZCAvIDI2OworCQkJY3ArKzsKKwkJCWxlbi0tOworCQl9CisJfQorfQorCitzdGF0aWMgY2hhciBnb3Rfc2lnaW50OworCitzdGF0aWMgdm9pZCBzaWdpbnRfaGFuZGxlcihpbnQgdW51c2VkIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlnb3Rfc2lnaW50ID0gMTsKKwlzaWduYWwgKFNJR0lOVCwgU0lHX0RGTCk7Cit9CisKKyNkZWZpbmUgY2FsY19wZXJjZW50KGEsIGIpICgoaW50KSAoKDEwMC4wICogKCgoZmxvYXQpIChhKSkgLyBcCisJCQkJCSAgICAgKChmbG9hdCkgKGIpKSkpICsgMC41KSkKKyNkZWZpbmUgY2FsY19yYXRlKHQsIGIsIGQpICgoKGZsb2F0KSh0KSAvICgoMTAyNCAqIDEwMjQpIC8gKGIpKSkgLyAoZCkpCisKK3N0YXRpYyBpbnQgcHJpbnRfcHJvZ3Jlc3MoYmxrNjRfdCBudW0sIGJsazY0X3QgdG90YWwpCit7CisJcmV0dXJuIGZwcmludGYoc3RkZXJyLCBfKCIlbGx1IC8gJWxsdSBibG9ja3MgKCVkJSUpIiksIG51bSwgdG90YWwsCisJCSAgICAgIGNhbGNfcGVyY2VudChudW0sIHRvdGFsKSk7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dF9tZXRhX2RhdGFfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmQsIGludCBmbGFncykKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWJsazY0X3QJCWJsazsKKwljaGFyCQkqYnVmLCAqemVyb19idWY7CisJaW50CQlzcGFyc2UgPSAwOworCWJsazY0X3QJCXN0YXJ0ID0gMDsKKwlibGs2NF90CQlkaXN0YW5jZSA9IDA7CisJYmxrNjRfdAkJZW5kID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCXRpbWVfdAkJbGFzdF91cGRhdGUgPSAwOworCXRpbWVfdAkJc3RhcnRfdGltZSA9IDA7CisJYmxrNjRfdAkJdG90YWxfd3JpdHRlbiA9IDA7CisJaW50CQlic2NvdW50ID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGZzLT5ibG9ja3NpemUsICZidWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhmcy0+YmxvY2tzaXplLCAmemVyb19idWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChzaG93X3Byb2dyZXNzKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJDb3B5aW5nICIpKTsKKwkJYnNjb3VudCA9IHByaW50X3Byb2dyZXNzKHRvdGFsX3dyaXR0ZW4sIG1ldGFfYmxvY2tzX2NvdW50KTsKKwkJZmZsdXNoKHN0ZGVycik7CisJCWxhc3RfdXBkYXRlID0gdGltZShOVUxMKTsKKwkJc3RhcnRfdGltZSA9IHRpbWUoTlVMTCk7CisJfQorCS8qIHdoZW4gZG9pbmcgYW4gaW4gcGxhY2UgbW92ZSB0byB0aGUgcmlnaHQsIHlvdSBjYW4ndCBzdGFydAorCSAgIGF0IHRoZSBiZWdpbm5pbmcgb3IgeW91IHdpbGwgb3ZlcndyaXRlIGRhdGEsIHNvIGluc3RlYWQKKwkgICBkaXZpZGUgdGhlIGZzIHVwIGludG8gZGlzdGFuY2Ugc2l6ZSBjaHVua3MgYW5kIHdyaXRlIHRoZW0KKwkgICBpbiByZXZlcnNlLiAqLworCWlmIChtb3ZlX21vZGUgJiYgZGVzdF9vZmZzZXQgPiBzb3VyY2Vfb2Zmc2V0KSB7CisJCWRpc3RhbmNlID0gKGRlc3Rfb2Zmc2V0IC0gc291cmNlX29mZnNldCkgLyBmcy0+YmxvY2tzaXplOworCQlpZiAoZGlzdGFuY2UgPCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpCisJCQlzdGFydCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtIGRpc3RhbmNlOworCX0KKwlpZiAobW92ZV9tb2RlKQorCQlzaWduYWwgKFNJR0lOVCwgc2lnaW50X2hhbmRsZXIpOworbW9yZV9ibG9ja3M6CisJaWYgKGRpc3RhbmNlKQorCQlzZWVrX3NldChmZCwgKHN0YXJ0ICogZnMtPmJsb2Nrc2l6ZSkgKyBkZXN0X29mZnNldCk7CisJZm9yIChibGsgPSBzdGFydDsgYmxrIDwgZW5kOyBibGsrKykgeworCQlpZiAoZ290X3NpZ2ludCkgeworCQkJaWYgKGRpc3RhbmNlKSB7CisJCQkJLyogbW92aW5nIHRvIHRoZSByaWdodCAqLworCQkJCWlmIChkaXN0YW5jZSA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgfHwKKwkJCQkgICAgc3RhcnQgPT0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpIC0gZGlzdGFuY2UpCisJCQkJCWtpbGwgKGdldHBpZCgpLCBTSUdJTlQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBtb3ZpbmcgdG8gdGhlIGxlZnQgKi8KKwkJCQlpZiAoYmxrIDwgKHNvdXJjZV9vZmZzZXQgLSBkZXN0X29mZnNldCkgLyBmcy0+YmxvY2tzaXplKQorCQkJCQlraWxsIChnZXRwaWQoKSwgU0lHSU5UKTsKKwkJCX0KKwkJCWlmIChzaG93X3Byb2dyZXNzKQorCQkJCWZwdXRjKCdccicsIHN0ZGVycik7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJTdG9wcGluZyBub3cgd2lsbCBkZXN0cm95IHRoZSBmaWxlc3lzdGVtLCAiCisJCQkJICJpbnRlcnJ1cHQgYWdhaW4gaWYgeW91IGFyZSBzdXJlXG4iKSk7CisJCQlpZiAoc2hvd19wcm9ncmVzcykgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJDb3B5aW5nICIpKTsKKwkJCQlic2NvdW50ID0gcHJpbnRfcHJvZ3Jlc3ModG90YWxfd3JpdHRlbiwKKwkJCQkJCQkgbWV0YV9ibG9ja3NfY291bnQpOworCQkJCWZmbHVzaChzdGRlcnIpOworCQkJfQorCisJCQlnb3Rfc2lnaW50ID0gMDsKKwkJfQorCQlpZiAoc2hvd19wcm9ncmVzcyAmJiBsYXN0X3VwZGF0ZSAhPSB0aW1lKE5VTEwpKSB7CisJCQl0aW1lX3QgZHVyYXRpb247CisJCQlsYXN0X3VwZGF0ZSA9IHRpbWUoTlVMTCk7CisJCQl3aGlsZSAoYnNjb3VudC0tKQorCQkJCWZwdXRjKCdcYicsIHN0ZGVycik7CisJCQlic2NvdW50ID0gcHJpbnRfcHJvZ3Jlc3ModG90YWxfd3JpdHRlbiwKKwkJCQkJCSBtZXRhX2Jsb2Nrc19jb3VudCk7CisJCQlkdXJhdGlvbiA9IHRpbWUoTlVMTCkgLSBzdGFydF90aW1lOworCQkJaWYgKGR1cmF0aW9uID4gNSkgeworCQkJCXRpbWVfdCBlc3QgPSAoZHVyYXRpb24gKiBtZXRhX2Jsb2Nrc19jb3VudCAvCisJCQkJCSAgICAgIHRvdGFsX3dyaXR0ZW4pIC0gZHVyYXRpb247CisJCQkJY2hhciBidWZmWzMwXTsKKwkJCQlzdHJmdGltZShidWZmLCAzMCwgIiVUIiwgZ210aW1lKCZlc3QpKTsKKwkJCQlic2NvdW50ICs9IGZwcmludGYoc3RkZXJyLAorCQkJCQkJICAgXygiICVzIHJlbWFpbmluZyBhdCAlLjJmIE1CL3MiKSwKKwkJCQkJCSAgIGJ1ZmYsIGNhbGNfcmF0ZSh0b3RhbF93cml0dGVuLAorCQkJCQkJCQkgICBmcy0+YmxvY2tzaXplLAorCQkJCQkJCQkgICBkdXJhdGlvbikpOworCQkJfQorCQkJZmZsdXNoIChzdGRlcnIpOworCQl9CisJCWlmICgoYmxrID49IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKSAmJgorCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihtZXRhX2Jsb2NrX21hcCwgYmxrKSkgeworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLCAxLCBidWYpOworCQkJaWYgKHJldHZhbCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJCV8oImVycm9yIHJlYWRpbmcgYmxvY2sgJWxsdSIpLCBibGspOworCQkJfQorCQkJdG90YWxfd3JpdHRlbisrOworCQkJaWYgKHNjcmFtYmxlX2Jsb2NrX21hcCAmJgorCQkJICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoc2NyYW1ibGVfYmxvY2tfbWFwLCBibGspKQorCQkJCXNjcmFtYmxlX2Rpcl9ibG9jayhmcywgYmxrLCBidWYpOworCQkJaWYgKChmbGFncyAmIEUySU1BR0VfQ0hFQ0tfWkVST19GTEFHKSAmJgorCQkJICAgIGNoZWNrX3plcm9fYmxvY2soYnVmLCBmcy0+YmxvY2tzaXplKSkKKwkJCQlnb3RvIHNwYXJzZV93cml0ZTsKKwkJCWlmIChzcGFyc2UpCisJCQkJc2Vla19yZWxhdGl2ZShmZCwgc3BhcnNlKTsKKwkJCXNwYXJzZSA9IDA7CisJCQlpZiAoY2hlY2tfYmxvY2soZmQsIGJ1ZiwgY2hlY2tfYnVmLCBmcy0+YmxvY2tzaXplKSkgeworCQkJCXNlZWtfcmVsYXRpdmUoZmQsIGZzLT5ibG9ja3NpemUpOworCQkJCXNraXBwZWRfYmxvY2tzKys7CisJCQl9IGVsc2UKKwkJCQlnZW5lcmljX3dyaXRlKGZkLCBidWYsIGZzLT5ibG9ja3NpemUsIGJsayk7CisJCX0gZWxzZSB7CisJCXNwYXJzZV93cml0ZToKKwkJCWlmIChmZCA9PSAxKSB7CisJCQkJaWYgKCFub3BfZmxhZykKKwkJCQkJZ2VuZXJpY193cml0ZShmZCwgemVyb19idWYsCisJCQkJCQkgICAgICBmcy0+YmxvY2tzaXplLCBibGspOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3BhcnNlICs9IGZzLT5ibG9ja3NpemU7CisJCQlpZiAoc3BhcnNlID4gMTAyNCoxMDI0KSB7CisJCQkJc2Vla19yZWxhdGl2ZShmZCwgMTAyNCoxMDI0KTsKKwkJCQlzcGFyc2UgLT0gMTAyNCoxMDI0OworCQkJfQorCQl9CisJfQorCWlmIChkaXN0YW5jZSAmJiBzdGFydCkgeworCQlpZiAoc3RhcnQgPCBkaXN0YW5jZSkgeworCQkJZW5kID0gc3RhcnQ7CisJCQlzdGFydCA9IDA7CisJCX0gZWxzZSB7CisJCQllbmQgLT0gZGlzdGFuY2U7CisJCQlzdGFydCAtPSBkaXN0YW5jZTsKKwkJCWlmIChlbmQgPCBkaXN0YW5jZSkgeworCQkJCS8qIHBhc3Qgb3ZlcmxhcCwgZG8gcmVzdCBpbiBvbmUgZ28gKi8KKwkJCQllbmQgPSBzdGFydDsKKwkJCQlzdGFydCA9IDA7CisJCQl9CisJCX0KKwkJc3BhcnNlID0gMDsKKwkJZ290byBtb3JlX2Jsb2NrczsKKwl9CisJc2lnbmFsIChTSUdJTlQsIFNJR19ERkwpOworCWlmIChzaG93X3Byb2dyZXNzKSB7CisJCXRpbWVfdCBkdXJhdGlvbiA9IHRpbWUoTlVMTCkgLSBzdGFydF90aW1lOworCQljaGFyIGJ1ZmZbMzBdOworCQl3aGlsZSAoYnNjb3VudC0tKQorCQkJZnB1dGMoJ1xiJywgc3RkZXJyKTsKKwkJc3RyZnRpbWUoYnVmZiwgMzAsICIlVCIsIGdtdGltZSgmZHVyYXRpb24pKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlxiXGJcYlxiXGJcYlxiXGJDb3BpZWQgJWxsdSAvICVsbHUgIgorCQkJICJibG9ja3MgKCVsbHUlJSkgaW4gJXMgYXQgJS4yZiBNQi9zICAgICAgIFxuIiksCisJCSAgICAgICB0b3RhbF93cml0dGVuLCBtZXRhX2Jsb2Nrc19jb3VudCwKKwkJICAgICAgIGNhbGNfcGVyY2VudCh0b3RhbF93cml0dGVuLCBtZXRhX2Jsb2Nrc19jb3VudCksIGJ1ZmYsCisJCSAgICAgICBjYWxjX3JhdGUodG90YWxfd3JpdHRlbiwgZnMtPmJsb2Nrc2l6ZSwgZHVyYXRpb24pKTsKKwl9CisjaWZkZWYgSEFWRV9GVFJVTkNBVEU2NAorCWlmIChzcGFyc2UpIHsKKwkJZXh0Ml9sb2ZmX3Qgb2Zmc2V0OworCQlpZiAoZGlzdGFuY2UpCisJCQlvZmZzZXQgPSBzZWVrX3NldChmZCwKKwkJCQkJICBmcy0+YmxvY2tzaXplICogZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpICsgZGVzdF9vZmZzZXQpOworCQllbHNlCisJCQlvZmZzZXQgPSBzZWVrX3JlbGF0aXZlKGZkLCBzcGFyc2UpOworCisJCWlmIChmdHJ1bmNhdGU2NChmZCwgb2Zmc2V0KSA8IDApIHsKKwkJCXNlZWtfcmVsYXRpdmUoZmQsIC0xKTsKKwkJCWdlbmVyaWNfd3JpdGUoZmQsIHplcm9fYnVmLCAxLCBOT19CTEspOworCQl9CisJfQorI2Vsc2UKKwlpZiAoc3BhcnNlICYmICFkaXN0YW5jZSkgeworCQlzZWVrX3JlbGF0aXZlKGZkLCBzcGFyc2UtMSk7CisJCWdlbmVyaWNfd3JpdGUoZmQsIHplcm9fYnVmLCAxLCBOT19CTEspOworCX0KKyNlbmRpZgorCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sMV90YWJsZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1hZ2UpCit7CisJX191NjQgKmwxX3RhYmxlOworCWVycmNvZGVfdCByZXQ7CisKKwlyZXQgPSBleHQyZnNfZ2V0X2FycmF5emVybyhpbWFnZS0+bDFfc2l6ZSwgc2l6ZW9mKF9fdTY0KSwgJmwxX3RhYmxlKTsKKwlpZiAocmV0KSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXQsIF8oIndoaWxlIGFsbG9jYXRpbmcgbDEgdGFibGUiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaW1hZ2UtPmwxX3RhYmxlID0gbDFfdGFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbDJfY2FjaGUoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltYWdlKQoreworCXVuc2lnbmVkIGludCBjb3VudCwgaTsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9sMl9jYWNoZSAqY2FjaGU7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfdGFibGUgKnRhYmxlOworCWVycmNvZGVfdCByZXQ7CisKKwlyZXQgPSBleHQyZnNfZ2V0X2FycmF5emVybygxLCBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfbDJfY2FjaGUpLAorCQkJCSAgICZjYWNoZSk7CisJaWYgKHJldCkKKwkJZ290byBhbGxvY19lcnI7CisKKwljb3VudCA9IChpbWFnZS0+bDFfc2l6ZSA+IEwyX0NBQ0hFX1BSRUFMTE9DKSA/IEwyX0NBQ0hFX1BSRUFMTE9DIDoKKwkJIGltYWdlLT5sMV9zaXplOworCisJY2FjaGUtPmNvdW50ID0gY291bnQ7CisJY2FjaGUtPmZyZWUgPSBjb3VudDsKKwljYWNoZS0+bmV4dF9vZmZzZXQgPSBpbWFnZS0+bDJfb2Zmc2V0OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcmV0ID0gZXh0MmZzX2dldF9hcnJheXplcm8oMSwKKwkJCQlzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfbDJfdGFibGUpLCAmdGFibGUpOworCQlpZiAocmV0KQorCQkJZ290byBhbGxvY19lcnI7CisKKwkJcmV0ID0gZXh0MmZzX2dldF9hcnJheXplcm8oaW1hZ2UtPmwyX3NpemUsCisJCQkJCQkgICBzaXplb2YoX191NjQpLCAmdGFibGUtPmRhdGEpOworCQlpZiAocmV0KQorCQkJZ290byBhbGxvY19lcnI7CisKKwkJdGFibGUtPm5leHQgPSBjYWNoZS0+ZnJlZV9oZWFkOworCQljYWNoZS0+ZnJlZV9oZWFkID0gdGFibGU7CisJfQorCisJaW1hZ2UtPmwyX2NhY2hlID0gY2FjaGU7CisJcmV0dXJuOworCithbGxvY19lcnI6CisJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldCwgXygid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIpKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBwdXRfbDJfY2FjaGUoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBleHQyX3Fjb3cyX2wyX2NhY2hlICpjYWNoZSA9IGltYWdlLT5sMl9jYWNoZTsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSAqdG1wLCAqdGFibGU7CisKKwlpZiAoIWNhY2hlKQorCQlyZXR1cm47CisKKwl0YWJsZSA9IGNhY2hlLT5mcmVlX2hlYWQ7CisJY2FjaGUtPmZyZWVfaGVhZCA9IE5VTEw7CithZ2FpbjoKKwl3aGlsZSAodGFibGUpIHsKKwkJdG1wID0gdGFibGU7CisJCXRhYmxlID0gdGFibGUtPm5leHQ7CisJCWV4dDJmc19mcmVlX21lbSgmdG1wLT5kYXRhKTsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZ0bXApOworCX0KKworCWlmIChjYWNoZS0+ZnJlZSAhPSBjYWNoZS0+Y291bnQpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIldhcm5pbmc6IFRoZXJlIGFyZSBzdGlsbCB0YWJsZXMgaW4gdGhlICIKKwkJCQkgICJjYWNoZSB3aGlsZSBwdXR0aW5nIHRoZSBjYWNoZSwgZGF0YSB3aWxsICIKKwkJCQkgICJiZSBsb3N0IHNvIHRoZSBpbWFnZSBtYXkgbm90IGJlIHZhbGlkLlxuIikpOworCQl0YWJsZSA9IGNhY2hlLT51c2VkX2hlYWQ7CisJCWNhY2hlLT51c2VkX2hlYWQgPSBOVUxMOworCQlnb3RvIGFnYWluOworCX0KKworCWV4dDJmc19mcmVlX21lbSgmY2FjaGUpOworfQorCitzdGF0aWMgaW50IGluaXRfcmVmY291bnQoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltZywgYmxrNjRfdCB0YWJsZV9vZmZzZXQpCit7CisJc3RydWN0CWV4dDJfcWNvdzJfcmVmY291bnQJKnJlZjsKKwlibGs2NF90IHRhYmxlX2NsdXN0ZXJzOworCWVycmNvZGVfdCByZXQ7CisKKwlyZWYgPSAmKGltZy0+cmVmY291bnQpOworCisJLyoKKwkgKiBPbmUgcmVmY291bnQgYmxvY2sgYWRkcmVzc2VzIDIwNDggY2x1c3RlcnMsIG9uZSByZWZjb3VudCB0YWJsZQorCSAqIGFkZHJlc3NlcyBjbHVzdGVyL3NpemVvZihfX3U2NCkgcmVmY291bnQgYmxvY2tzLCBhbmQgd2UgbmVlZAorCSAqIHRvIGFkZHJlc3MgbWV0YV9ibG9ja3NfY291bnQgY2x1c3RlcnMgKyBxY293MiBtZXRhZGF0YSBjbHVzdGVycworCSAqIGluIHRoZSB3b3JzdCBjYXNlLgorCSAqLworCXRhYmxlX2NsdXN0ZXJzID0gbWV0YV9ibG9ja3NfY291bnQgKyAodGFibGVfb2Zmc2V0ID4+CisJCQkJCSAgICAgIGltZy0+Y2x1c3Rlcl9iaXRzKTsKKwl0YWJsZV9jbHVzdGVycyA+Pj0gKGltZy0+Y2x1c3Rlcl9iaXRzICsgNiAtIDEpOworCXRhYmxlX2NsdXN0ZXJzID0gKHRhYmxlX2NsdXN0ZXJzID09IDApID8gMSA6IHRhYmxlX2NsdXN0ZXJzOworCisJcmVmLT5yZWZjb3VudF90YWJsZV9vZmZzZXQgPSB0YWJsZV9vZmZzZXQ7CisJcmVmLT5yZWZjb3VudF90YWJsZV9jbHVzdGVycyA9IHRhYmxlX2NsdXN0ZXJzOworCXJlZi0+cmVmY291bnRfdGFibGVfaW5kZXggPSAwOworCXJlZi0+cmVmY291bnRfYmxvY2tfaW5kZXggPSAwOworCisJLyogQWxsb2NhdGUgcmVmY291bnQgdGFibGUgKi8KKwlyZXQgPSBleHQyZnNfZ2V0X2FycmF5emVybyhyZWYtPnJlZmNvdW50X3RhYmxlX2NsdXN0ZXJzLAorCQkJCSAgIGltZy0+Y2x1c3Rlcl9zaXplLCAmcmVmLT5yZWZjb3VudF90YWJsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEFsbG9jYXRlIHJlZmNvdW50IGJsb2NrICovCisJcmV0ID0gZXh0MmZzX2dldF9hcnJheXplcm8oMSwgaW1nLT5jbHVzdGVyX3NpemUsICZyZWYtPnJlZmNvdW50X2Jsb2NrKTsKKwlpZiAocmV0KQorCQlleHQyZnNfZnJlZV9tZW0oJnJlZi0+cmVmY291bnRfdGFibGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbml0aWFsaXplX3Fjb3cyX2ltYWdlKGludCBmZCwgZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBleHQyX3Fjb3cyX2hkciAqaGVhZGVyOworCWJsazY0X3QgdG90YWxfc2l6ZSwgb2Zmc2V0OworCWludCBzaGlmdCwgbDJfYml0cywgaGVhZGVyX3NpemUsIGwxX3NpemUsIHJldDsKKwlpbnQgY2x1c3Rlcl9iaXRzID0gZ2V0X2JpdHNfZnJvbV9zaXplKGZzLT5ibG9ja3NpemUpOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKworCS8qIEFsbG9jYXRlIGhlYWRlciAqLworCXJldCA9IGV4dDJmc19nZXRfbWVtemVybyhzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSwgJmhlYWRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXRvdGFsX3NpemUgPSBleHQyZnNfYmxvY2tzX2NvdW50KHNiKSA8PCBjbHVzdGVyX2JpdHM7CisJaW1hZ2UtPmNsdXN0ZXJfc2l6ZSA9IGZzLT5ibG9ja3NpemU7CisJaW1hZ2UtPmwyX3NpemUgPSAxIDw8IChjbHVzdGVyX2JpdHMgLSAzKTsKKwlpbWFnZS0+Y2x1c3Rlcl9iaXRzID0gY2x1c3Rlcl9iaXRzOworCWltYWdlLT5mZCA9IGZkOworCisJaGVhZGVyLT5tYWdpYyA9IGV4dDJmc19jcHVfdG9fYmUzMihRQ09XX01BR0lDKTsKKwloZWFkZXItPnZlcnNpb24gPSBleHQyZnNfY3B1X3RvX2JlMzIoUUNPV19WRVJTSU9OKTsKKwloZWFkZXItPnNpemUgPSBleHQyZnNfY3B1X3RvX2JlNjQodG90YWxfc2l6ZSk7CisJaGVhZGVyLT5jbHVzdGVyX2JpdHMgPSBleHQyZnNfY3B1X3RvX2JlMzIoY2x1c3Rlcl9iaXRzKTsKKworCWhlYWRlcl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpICsgNykgJiB+NzsKKwlvZmZzZXQgPSBhbGlnbl9vZmZzZXQoaGVhZGVyX3NpemUsIGltYWdlLT5jbHVzdGVyX3NpemUpOworCisJaGVhZGVyLT5sMV90YWJsZV9vZmZzZXQgPSBleHQyZnNfY3B1X3RvX2JlNjQob2Zmc2V0KTsKKwlpbWFnZS0+bDFfb2Zmc2V0ID0gb2Zmc2V0OworCisJbDJfYml0cyA9IGNsdXN0ZXJfYml0cyAtIDM7CisJc2hpZnQgPSBjbHVzdGVyX2JpdHMgKyBsMl9iaXRzOworCWwxX3NpemUgPSAoKHRvdGFsX3NpemUgKyAoMUxMIDw8IHNoaWZ0KSAtIDEpID4+IHNoaWZ0KTsKKwloZWFkZXItPmwxX3NpemUgPSBleHQyZnNfY3B1X3RvX2JlMzIobDFfc2l6ZSk7CisJaW1hZ2UtPmwxX3NpemUgPSBsMV9zaXplOworCisJLyogTWFrZSBzcGFjZSBmb3IgTDEgdGFibGUgKi8KKwlvZmZzZXQgKz0gYWxpZ25fb2Zmc2V0KGwxX3NpemUgKiBzaXplb2YoYmxrNjRfdCksIGltYWdlLT5jbHVzdGVyX3NpemUpOworCisJLyogSW5pdGlhbGl6ZSByZWZjb3VudGluZyAqLworCXJldCA9IGluaXRfcmVmY291bnQoaW1hZ2UsIG9mZnNldCk7CisJaWYgKHJldCkgeworCQlleHQyZnNfZnJlZV9tZW0oJmhlYWRlcik7CisJCXJldHVybiByZXQ7CisJfQorCWhlYWRlci0+cmVmY291bnRfdGFibGVfb2Zmc2V0ID0gZXh0MmZzX2NwdV90b19iZTY0KG9mZnNldCk7CisJaGVhZGVyLT5yZWZjb3VudF90YWJsZV9jbHVzdGVycyA9CisJCWV4dDJmc19jcHVfdG9fYmUzMihpbWFnZS0+cmVmY291bnQucmVmY291bnRfdGFibGVfY2x1c3RlcnMpOworCW9mZnNldCArPSBpbWFnZS0+Y2x1c3Rlcl9zaXplOworCW9mZnNldCArPSBpbWFnZS0+cmVmY291bnQucmVmY291bnRfdGFibGVfY2x1c3RlcnMgPDwKKwkJaW1hZ2UtPmNsdXN0ZXJfYml0czsKKworCS8qIE1ha2Ugc3BhY2UgZm9yIEwyIHRhYmxlcyAqLworCWltYWdlLT5sMl9vZmZzZXQgPSBvZmZzZXQ7CisJb2Zmc2V0ICs9IGltYWdlLT5jbHVzdGVyX3NpemU7CisKKwkvKiBNYWtlIHNwYWNlIGZvciBmaXJzdCByZWZjb3VudCBibG9jayAqLworCWltYWdlLT5yZWZjb3VudC5yZWZjb3VudF9ibG9ja19vZmZzZXQgPSBvZmZzZXQ7CisKKwlpbWFnZS0+aGRyID0gaGVhZGVyOworCS8qIEluaXRpYWxpemUgbDEgYW5kIGwyIHRhYmxlcyAqLworCWluaXRfbDFfdGFibGUoaW1hZ2UpOworCWluaXRfbDJfY2FjaGUoaW1hZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcWNvdzJfaW1hZ2Uoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKmltZykKK3sKKwlpZiAoIWltZykKKwkJcmV0dXJuOworCisJaWYgKGltZy0+aGRyKQorCQlleHQyZnNfZnJlZV9tZW0oJmltZy0+aGRyKTsKKworCWlmIChpbWctPmwxX3RhYmxlKQorCQlleHQyZnNfZnJlZV9tZW0oJmltZy0+bDFfdGFibGUpOworCisJaWYgKGltZy0+cmVmY291bnQucmVmY291bnRfdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmaW1nLT5yZWZjb3VudC5yZWZjb3VudF90YWJsZSk7CisJaWYgKGltZy0+cmVmY291bnQucmVmY291bnRfYmxvY2spCisJCWV4dDJmc19mcmVlX21lbSgmaW1nLT5yZWZjb3VudC5yZWZjb3VudF9ibG9jayk7CisKKwlwdXRfbDJfY2FjaGUoaW1nKTsKKworCWV4dDJmc19mcmVlX21lbSgmaW1nKTsKK30KKworLyoqCisgKiBQdXQgdGFibGUgZnJvbSB1c2VkIGxpc3QgKHVzZWRfaGVhZCkgaW50byBmcmVlIGxpc3QgKGZyZWVfaGVhZCkuCisgKiBsMl90YWJsZSBpcyB1c2VkIHRvIHJldHVybiBwb2ludGVyIHRvIHRoZSBuZXh0IHVzZWQgdGFibGUgKHVzZWRfaGVhZCkuCisgKi8KK3N0YXRpYyB2b2lkIHB1dF91c2VkX3RhYmxlKHN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlICppbWcsCisJCQkgIHN0cnVjdCBleHQyX3Fjb3cyX2wyX3RhYmxlICoqbDJfdGFibGUpCit7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfY2FjaGUgKmNhY2hlID0gaW1nLT5sMl9jYWNoZTsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSAqdGFibGU7CisKKwl0YWJsZSA9IGNhY2hlLT51c2VkX2hlYWQ7CisJY2FjaGUtPnVzZWRfaGVhZCA9IHRhYmxlLT5uZXh0OworCisJYXNzZXJ0KHRhYmxlKTsKKwlpZiAoIXRhYmxlLT5uZXh0KQorCQljYWNoZS0+dXNlZF90YWlsID0gTlVMTDsKKworCS8qIENsZWFuIHRoZSB0YWJsZSBmb3IgY2FzZSB3ZSB3aWxsIG5lZWQgdG8gdXNlIGl0IGFnYWluICovCisJbWVtc2V0KHRhYmxlLT5kYXRhLCAwLCBpbWctPmNsdXN0ZXJfc2l6ZSk7CisJdGFibGUtPm5leHQgPSBjYWNoZS0+ZnJlZV9oZWFkOworCWNhY2hlLT5mcmVlX2hlYWQgPSB0YWJsZTsKKworCWNhY2hlLT5mcmVlKys7CisKKwkqbDJfdGFibGUgPSBjYWNoZS0+dXNlZF9oZWFkOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9sMl9jYWNoZShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1hZ2UpCit7CisJYmxrNjRfdCBzZWVrID0gMDsKKwlleHQyX2xvZmZfdCBvZmZzZXQ7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfY2FjaGUgKmNhY2hlID0gaW1hZ2UtPmwyX2NhY2hlOworCXN0cnVjdCBleHQyX3Fjb3cyX2wyX3RhYmxlICp0YWJsZSA9IGNhY2hlLT51c2VkX2hlYWQ7CisJaW50IGZkID0gaW1hZ2UtPmZkOworCisJLyogU3RvcmUgY3VycmVudCBwb3NpdGlvbiAqLworCW9mZnNldCA9IHNlZWtfcmVsYXRpdmUoZmQsIDApOworCisJYXNzZXJ0KHRhYmxlKTsKKwl3aGlsZSAoY2FjaGUtPmZyZWUgPCBjYWNoZS0+Y291bnQpIHsKKwkJaWYgKHNlZWsgIT0gdGFibGUtPm9mZnNldCkgeworCQkJc2Vla19zZXQoZmQsIHRhYmxlLT5vZmZzZXQpOworCQkJc2VlayA9IHRhYmxlLT5vZmZzZXQ7CisJCX0KKworCQlnZW5lcmljX3dyaXRlKGZkLCAoY2hhciAqKXRhYmxlLT5kYXRhLCBpbWFnZS0+Y2x1c3Rlcl9zaXplLAorCQkJICAgICAgTk9fQkxLKTsKKwkJcHV0X3VzZWRfdGFibGUoaW1hZ2UsICZ0YWJsZSk7CisJCXNlZWsgKz0gaW1hZ2UtPmNsdXN0ZXJfc2l6ZTsKKwl9CisKKwkvKiBSZXN0b3JlIHByZXZpb3VzIHBvc2l0aW9uICovCisJc2Vla19zZXQoZmQsIG9mZnNldCk7Cit9CisKKy8qKgorICogR2V0IGZpcnN0IGZyZWUgdGFibGUgKGZyb20gZnJlZV9oZWFkKSBhbmQgcHV0IGl0IGludG8gdGFpbCBvZiB1c2VkIGxpc3QKKyAqICh0byB1c2VkX3RhaWwpLgorICogbDJfdGFibGUgaXMgdXNlZCB0byByZXR1cm4gcG9pbnRlciB0byBtb3ZlZCB0YWJsZS4KKyAqIFJldHVybnMgMSBpZiB0aGUgY2FjaGUgaXMgZnVsbCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9mcmVlX3RhYmxlKHN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlICppbWFnZSwKKwkJCSAgc3RydWN0IGV4dDJfcWNvdzJfbDJfdGFibGUgKipsMl90YWJsZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9sMl90YWJsZSAqdGFibGU7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfY2FjaGUgKmNhY2hlID0gaW1hZ2UtPmwyX2NhY2hlOworCisJaWYgKDAgPT0gY2FjaGUtPmZyZWUpCisJCWZsdXNoX2wyX2NhY2hlKGltYWdlKTsKKworCXRhYmxlID0gY2FjaGUtPmZyZWVfaGVhZDsKKwlhc3NlcnQodGFibGUpOworCWNhY2hlLT5mcmVlX2hlYWQgPSB0YWJsZS0+bmV4dDsKKworCWlmIChjYWNoZS0+dXNlZF90YWlsKQorCQljYWNoZS0+dXNlZF90YWlsLT5uZXh0ID0gdGFibGU7CisJZWxzZQorCQkvKiBGaXJzdCBpdGVtIGluIHRoZSB1c2VkIGxpc3QgKi8KKwkJY2FjaGUtPnVzZWRfaGVhZCA9IHRhYmxlOworCisJY2FjaGUtPnVzZWRfdGFpbCA9IHRhYmxlOworCWNhY2hlLT5mcmVlLS07CisKKwkqbDJfdGFibGUgPSB0YWJsZTsKK30KKworc3RhdGljIGludCBhZGRfbDJfaXRlbShzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1nLCBibGs2NF90IGJsaywKKwkJICAgICAgIGJsazY0X3QgZGF0YSwgYmxrNjRfdCBuZXh0KQoreworCXN0cnVjdCBleHQyX3Fjb3cyX2wyX2NhY2hlICpjYWNoZSA9IGltZy0+bDJfY2FjaGU7CisJc3RydWN0IGV4dDJfcWNvdzJfbDJfdGFibGUgKnRhYmxlID0gY2FjaGUtPnVzZWRfdGFpbDsKKwlibGs2NF90IGwxX2luZGV4ID0gYmxrIC8gaW1nLT5sMl9zaXplOworCWJsazY0X3QgbDJfaW5kZXggPSBibGsgJiAoaW1nLT5sMl9zaXplIC0gMSk7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIE5lZWQgdG8gY3JlYXRlIG5ldyB0YWJsZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwKKwkgKiBvciBpZiBpdCBpcyBmdWxsCisJICovCisJaWYgKCF0YWJsZSB8fCAodGFibGUtPmwxX2luZGV4ICE9IGwxX2luZGV4KSkgeworCQlnZXRfZnJlZV90YWJsZShpbWcsICZ0YWJsZSk7CisJCXRhYmxlLT5sMV9pbmRleCA9IGwxX2luZGV4OworCQl0YWJsZS0+b2Zmc2V0ID0gY2FjaGUtPm5leHRfb2Zmc2V0OworCQljYWNoZS0+bmV4dF9vZmZzZXQgPSBuZXh0OworCQlpbWctPmwxX3RhYmxlW2wxX2luZGV4XSA9CisJCQlleHQyZnNfY3B1X3RvX2JlNjQodGFibGUtPm9mZnNldCB8IFFDT1dfT0ZMQUdfQ09QSUVEKTsKKwkJcmV0Kys7CisJfQorCisJdGFibGUtPmRhdGFbbDJfaW5kZXhdID0gZXh0MmZzX2NwdV90b19iZTY0KGRhdGEgfCBRQ09XX09GTEFHX0NPUElFRCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1cGRhdGVfcmVmY291bnQoaW50IGZkLCBzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZSAqaW1nLAorCQkJICAgYmxrNjRfdCBvZmZzZXQsIGJsazY0X3QgcmZibGtfcG9zKQoreworCXN0cnVjdAlleHQyX3Fjb3cyX3JlZmNvdW50CSpyZWY7CisJX191MzIJdGFibGVfaW5kZXg7CisJaW50IHJldCA9IDA7CisKKwlyZWYgPSAmKGltZy0+cmVmY291bnQpOworCXRhYmxlX2luZGV4ID0gb2Zmc2V0ID4+ICgyICogaW1nLT5jbHVzdGVyX2JpdHMgLSAxKTsKKworCS8qCisJICogTmVlZCB0byBjcmVhdGUgbmV3IHJlZmNvdW50IGJsb2NrIHdoZW4gdGhlIG9mZnNldCBhZGRyZXNzZXMKKwkgKiBhbm90aGVyIGl0ZW0gaW4gdGhlIHJlZmNvdW50IHRhYmxlCisJICovCisJaWYgKHRhYmxlX2luZGV4ICE9IHJlZi0+cmVmY291bnRfdGFibGVfaW5kZXgpIHsKKworCQlzZWVrX3NldChmZCwgcmVmLT5yZWZjb3VudF9ibG9ja19vZmZzZXQpOworCisJCWdlbmVyaWNfd3JpdGUoZmQsIChjaGFyICopcmVmLT5yZWZjb3VudF9ibG9jaywKKwkJCSAgICAgIGltZy0+Y2x1c3Rlcl9zaXplLCBOT19CTEspOworCQltZW1zZXQocmVmLT5yZWZjb3VudF9ibG9jaywgMCwgaW1nLT5jbHVzdGVyX3NpemUpOworCisJCXJlZi0+cmVmY291bnRfdGFibGVbcmVmLT5yZWZjb3VudF90YWJsZV9pbmRleF0gPQorCQkJZXh0MmZzX2NwdV90b19iZTY0KHJlZi0+cmVmY291bnRfYmxvY2tfb2Zmc2V0KTsKKwkJcmVmLT5yZWZjb3VudF9ibG9ja19vZmZzZXQgPSByZmJsa19wb3M7CisJCXJlZi0+cmVmY291bnRfYmxvY2tfaW5kZXggPSAwOworCQlyZWYtPnJlZmNvdW50X3RhYmxlX2luZGV4ID0gdGFibGVfaW5kZXg7CisJCXJldCsrOworCX0KKworCS8qCisJICogV2UgYXJlIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCB3ZSBhcmUgY3JlYXRpbmcgdGhlIHFjb3cyCisJICogaW1hZ2Ugc2VxdWVudGlhbGx5LCBoZW5jZSB3ZSB3aWxsIGFsd2F5cyBhbGxvY2F0ZSByZWZjb3VudAorCSAqIGJsb2NrIGl0ZW1zIHNlcXVlbnRpYWx5LgorCSAqLworCXJlZi0+cmVmY291bnRfYmxvY2tbcmVmLT5yZWZjb3VudF9ibG9ja19pbmRleF0gPSBleHQyZnNfY3B1X3RvX2JlMTYoMSk7CisJcmVmLT5yZWZjb3VudF9ibG9ja19pbmRleCsrOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3luY19yZWZjb3VudChpbnQgZmQsIHN0cnVjdCBleHQyX3Fjb3cyX2ltYWdlICppbWcpCit7CisJc3RydWN0CWV4dDJfcWNvdzJfcmVmY291bnQJKnJlZjsKKworCXJlZiA9ICYoaW1nLT5yZWZjb3VudCk7CisKKwlyZWYtPnJlZmNvdW50X3RhYmxlW3JlZi0+cmVmY291bnRfdGFibGVfaW5kZXhdID0KKwkJZXh0MmZzX2NwdV90b19iZTY0KHJlZi0+cmVmY291bnRfYmxvY2tfb2Zmc2V0KTsKKwlzZWVrX3NldChmZCwgcmVmLT5yZWZjb3VudF90YWJsZV9vZmZzZXQpOworCWdlbmVyaWNfd3JpdGUoZmQsIChjaGFyICopcmVmLT5yZWZjb3VudF90YWJsZSwKKwkJcmVmLT5yZWZjb3VudF90YWJsZV9jbHVzdGVycyA8PCBpbWctPmNsdXN0ZXJfYml0cywgTk9fQkxLKTsKKworCXNlZWtfc2V0KGZkLCByZWYtPnJlZmNvdW50X2Jsb2NrX29mZnNldCk7CisJZ2VuZXJpY193cml0ZShmZCwgKGNoYXIgKilyZWYtPnJlZmNvdW50X2Jsb2NrLCBpbWctPmNsdXN0ZXJfc2l6ZSwKKwkJICAgICAgTk9fQkxLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3Fjb3cyX21ldGFfZGF0YV9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGludCBmZCkKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGs2NF90CQkJYmxrLCBvZmZzZXQsIHNpemUsIGVuZDsKKwljaGFyCQkJKmJ1ZjsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9pbWFnZQkqaW1nOworCXVuc2lnbmVkIGludAkJaGVhZGVyX3NpemU7CisKKwkvKiBhbGxvY2F0ZSAgc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UgKi8KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaW1hZ2UpLCAmaW1nKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGV4dDJfcWNvdzJfaW1hZ2UiKSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gaW5pdGlhbGl6ZV9xY293Ml9pbWFnZShmZCwgZnMsIGltZyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJXygid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiKSk7CisJCWV4aXQoMSk7CisJfQorCWhlYWRlcl9zaXplID0gYWxpZ25fb2Zmc2V0KHNpemVvZihzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIpLAorCQkJCSAgIGltZy0+Y2x1c3Rlcl9zaXplKTsKKwl3cml0ZV9oZWFkZXIoZmQsIGltZy0+aGRyLCBzaXplb2Yoc3RydWN0IGV4dDJfcWNvdzJfaGRyKSwgaGVhZGVyX3NpemUpOworCisJLyogUmVmY291bnQgYWxsIHFjb3cyIHJlbGF0ZWQgbWV0YWRhdGEgdXAgdG8gcmVmY291bnRfYmxvY2tfb2Zmc2V0ICovCisJZW5kID0gaW1nLT5yZWZjb3VudC5yZWZjb3VudF9ibG9ja19vZmZzZXQ7CisJc2Vla19zZXQoZmQsIGVuZCk7CisJYmxrID0gZW5kICsgaW1nLT5jbHVzdGVyX3NpemU7CisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPD0gZW5kOyBvZmZzZXQgKz0gaW1nLT5jbHVzdGVyX3NpemUpIHsKKwkJaWYgKHVwZGF0ZV9yZWZjb3VudChmZCwgaW1nLCBvZmZzZXQsIGJsaykpIHsKKwkJCWJsayArPSBpbWctPmNsdXN0ZXJfc2l6ZTsKKwkJCS8qCisJCQkgKiBJZiB3ZSBjcmVhdGUgbmV3IHJlZmNvdW50IGJsb2NrLCB3ZSBuZWVkIHRvIHJlZmNvdW50CisJCQkgKiBpdCBhcyB3ZWxsLgorCQkJICovCisJCQllbmQgKz0gaW1nLT5jbHVzdGVyX3NpemU7CisJCX0KKwl9CisJc2Vla19zZXQoZmQsIG9mZnNldCk7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplLCAmYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVyIikpOworCQlleGl0KDEpOworCX0KKwkvKiBXcml0ZSBxY293MiBkYXRhIGJsb2NrcyAqLworCWZvciAoYmxrID0gMDsgYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOyBibGsrKykgeworCQlpZiAoKGJsayA+PSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJiYKKwkJICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsIGJsaykpIHsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywgMSwgYnVmKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCQlfKCJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiKSwgYmxrKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzY3JhbWJsZV9ibG9ja19tYXAgJiYKKwkJCSAgICBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKHNjcmFtYmxlX2Jsb2NrX21hcCwgYmxrKSkKKwkJCQlzY3JhbWJsZV9kaXJfYmxvY2soZnMsIGJsaywgYnVmKTsKKwkJCWlmIChjaGVja196ZXJvX2Jsb2NrKGJ1ZiwgZnMtPmJsb2Nrc2l6ZSkpCisJCQkJY29udGludWU7CisKKwkJCWlmICh1cGRhdGVfcmVmY291bnQoZmQsIGltZywgb2Zmc2V0LCBvZmZzZXQpKSB7CisJCQkJLyogTWFrZSBzcGFjZSBmb3IgYW5vdGhlciByZWZjb3VudCBibG9jayAqLworCQkJCW9mZnNldCArPSBpbWctPmNsdXN0ZXJfc2l6ZTsKKwkJCQlzZWVrX3NldChmZCwgb2Zmc2V0KTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgY3JlYXRlZCB0aGUgbmV3IHJlZmNvdW50IGJsb2NrLCB0aGlzCisJCQkJICogbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHJlZmNvdW50IGl0IGFzIHdlbGwuCisJCQkJICogU28gdGhlIHByZXZpb3VzIHVwZGF0ZV9yZWZjb3VudCByZWZjb3VudGVkCisJCQkJICogdGhlIGJsb2NrIGl0c2VsZiBhbmQgbm93IHdlIGFyZSBnb2luZyB0bworCQkJCSAqIGNyZWF0ZSByZWZjb3VudCBmb3IgZGF0YS4gTmV3IHJlZmNvdW50CisJCQkJICogYmxvY2sgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIQorCQkJCSAqLworCQkJCWlmICh1cGRhdGVfcmVmY291bnQoZmQsIGltZywgb2Zmc2V0LCBvZmZzZXQpKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJQcm9ncmFtbWluZyBlcnJvcjogIgorCQkJCQkJIm11bHRpcGxlIHNlcXVlbnRpYWwgcmVmY291bnQgIgorCQkJCQkJImJsb2NrcyBjcmVhdGVkIVxuIikpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCX0KKworCQkJZ2VuZXJpY193cml0ZShmZCwgYnVmLCBmcy0+YmxvY2tzaXplLCBibGspOworCisJCQlpZiAoYWRkX2wyX2l0ZW0oaW1nLCBibGssIG9mZnNldCwKKwkJCQkJb2Zmc2V0ICsgaW1nLT5jbHVzdGVyX3NpemUpKSB7CisJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCWlmICh1cGRhdGVfcmVmY291bnQoZmQsIGltZywgb2Zmc2V0LAorCQkJCQlvZmZzZXQgKyBpbWctPmNsdXN0ZXJfc2l6ZSkpIHsKKwkJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCQlpZiAodXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwKKwkJCQkJCQkgICAgb2Zmc2V0KSkgeworCQkJCQkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJQcm9ncmFtbWluZyBlcnJvcjogbXVsdGlwbGUgc2VxdWVudGlhbCByZWZjb3VudCAiCisJCQkgICJibG9ja3MgY3JlYXRlZCFcbiIpKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQl9CisJCQkJb2Zmc2V0ICs9IGltZy0+Y2x1c3Rlcl9zaXplOworCQkJCXNlZWtfc2V0KGZkLCBvZmZzZXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvZmZzZXQgKz0gaW1nLT5jbHVzdGVyX3NpemU7CisJCX0KKwl9CisJdXBkYXRlX3JlZmNvdW50KGZkLCBpbWcsIG9mZnNldCwgb2Zmc2V0KTsKKwlmbHVzaF9sMl9jYWNoZShpbWcpOworCXN5bmNfcmVmY291bnQoZmQsIGltZyk7CisKKwkvKiBXcml0ZSBsMV90YWJsZSovCisJc2Vla19zZXQoZmQsIGltZy0+bDFfb2Zmc2V0KTsKKwlzaXplID0gaW1nLT5sMV9zaXplICogc2l6ZW9mKF9fdTY0KTsKKwlnZW5lcmljX3dyaXRlKGZkLCAoY2hhciAqKWltZy0+bDFfdGFibGUsIHNpemUsIE5PX0JMSyk7CisKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJZnJlZV9xY293Ml9pbWFnZShpbWcpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yYXdfaW1hZ2VfZmlsZShleHQyX2ZpbHN5cyBmcywgaW50IGZkLCBpbnQgdHlwZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdAlwYjsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQkJaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCQkJc2NhbjsKKwlleHQyX2lub190CQkJaW5vOworCWVycmNvZGVfdAkJCXJldHZhbDsKKwljaGFyICoJCQkJYmxvY2tfYnVmOworCisJbWV0YV9ibG9ja3NfY291bnQgPSAwOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsIF8oImluLXVzZSBibG9jayBtYXAiKSwKKwkJCQkJICAgICAgJm1ldGFfYmxvY2tfbWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBFMklNQUdFX1NDUkFNQkxFX0ZMQUcpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgInNjcmFtYmxlIGJsb2NrIG1hcCIsCisJCQkJCQkgICAgICAmc2NyYW1ibGVfYmxvY2tfbWFwKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSBhbGxvY2F0aW5nIHNjcmFtYmxlIGJsb2NrIGJpdG1hcCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwltYXJrX3RhYmxlX2Jsb2Nrcyhmcyk7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByaW50ZihfKCJTY2FubmluZyBpbm9kZXMuLi5cbiIpKTsKKworCXJldHZhbCA9IGV4dDJmc19vcGVuX2lub2RlX3NjYW4oZnMsIDAsICZzY2FuKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIiVzIiwKKwkJCV8oIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShmcy0+YmxvY2tzaXplICogMywgJmJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIkNhbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl1c2VfaW5vZGVfc2hvcnRjdXRzKGZzLCAxKTsKKwlzdGFzaGVkX2lub2RlID0gJmlub2RlOworCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbmV4dF9pbm9kZShzY2FuLCAmaW5vLCAmaW5vZGUpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfQkFEX0JMT0NLX0lOX0lOT0RFX1RBQkxFKQorCQkJY29udGludWU7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQkJXygid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoaW5vID09IDApCisJCQlicmVhazsKKwkJaWYgKCFpbm9kZS5pX2xpbmtzX2NvdW50KQorCQkJY29udGludWU7CisJCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkpIHsKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIobWV0YV9ibG9ja19tYXAsCisJCQkJCWV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKSk7CisJCQltZXRhX2Jsb2Nrc19jb3VudCsrOworCQl9CisJCWlmICghZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpKQorCQkJY29udGludWU7CisKKwkJc3Rhc2hlZF9pbm8gPSBpbm87CisJCXBiLmlubyA9IGlubzsKKwkJcGIuaXNfZGlyID0gTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpOworCQlpZiAoTElOVVhfU19JU0RJUihpbm9kZS5pX21vZGUpIHx8CisJCSAgICAoTElOVVhfU19JU0xOSyhpbm9kZS5pX21vZGUpICYmCisJCSAgICAgZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpKSB8fAorCQkgICAgaW5vID09IGZzLT5zdXBlci0+c19qb3VybmFsX2ludW0pIHsKKwkJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLAorCQkJCQlCTE9DS19GTEFHX1JFQURfT05MWSwgYmxvY2tfYnVmLAorCQkJCQlwcm9jZXNzX2Rpcl9ibG9jaywgJnBiKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCQlfKCJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIpLAorCQkJCQlpbm8pOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGlub2RlLmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpIHx8CisJCQkgICAgaW5vZGUuaV9ibG9ja1tFWFQyX0lORF9CTE9DS10gfHwKKwkJCSAgICBpbm9kZS5pX2Jsb2NrW0VYVDJfRElORF9CTE9DS10gfHwKKwkJCSAgICBpbm9kZS5pX2Jsb2NrW0VYVDJfVElORF9CTE9DS10gfHwgYWxsX2RhdGEpIHsKKwkJCQlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsCisJCQkJICAgICAgIGlubywgQkxPQ0tfRkxBR19SRUFEX09OTFksIGJsb2NrX2J1ZiwKKwkJCQkgICAgICAgcHJvY2Vzc19maWxlX2Jsb2NrLCAmcGIpOworCQkJCWlmIChyZXR2YWwpIHsKKwkJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQkJXygid2hpbGUgaXRlcmF0aW5nIG92ZXIgaW5vZGUgJXUiKSwgaW5vKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJdXNlX2lub2RlX3Nob3J0Y3V0cyhmcywgMCk7CisKKwlpZiAodHlwZSAmIEUySU1BR0VfUUNPVzIpCisJCW91dHB1dF9xY293Ml9tZXRhX2RhdGFfYmxvY2tzKGZzLCBmZCk7CisJZWxzZQorCQlvdXRwdXRfbWV0YV9kYXRhX2Jsb2NrcyhmcywgZmQsIGZsYWdzKTsKKworCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKwlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKwlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAobWV0YV9ibG9ja19tYXApOworCWlmICh0eXBlICYgRTJJTUFHRV9TQ1JBTUJMRV9GTEFHKQorCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoc2NyYW1ibGVfYmxvY2tfbWFwKTsKK30KKworc3RhdGljIHZvaWQgaW5zdGFsbF9pbWFnZShjaGFyICpkZXZpY2UsIGNoYXIgKmltYWdlX2ZuLCBpbnQgdHlwZSkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWV4dDJfZmlsc3lzIGZzOworCWludCBvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfSU1BR0VfRklMRSB8IEVYVDJfRkxBR182NEJJVFM7CisJaW50IGZkID0gMDsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKwlpb19jaGFubmVsCWlvOworCisJaWYgKHR5cGUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIlJhdyBhbmQgcWNvdzIgaW1hZ2VzIGNhbm5vdCIKKwkJCQkJICAgImJlIGluc3RhbGxlZCIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCisJcmV0dmFsID0gZXh0MmZzX29wZW4gKGltYWdlX2ZuLCBvcGVuX2ZsYWcsIDAsIDAsCisJCQkgICAgICBpb19wdHIsICZmcyk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksCisJCQkgaW1hZ2VfZm4pOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JpdG1hcHMgKGZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oImVycm9yIHJlYWRpbmcgYml0bWFwcyIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmZCA9IGV4dDJmc19vcGVuX2ZpbGUoaW1hZ2VfZm4sIE9fUkRPTkxZLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcihpbWFnZV9mbik7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gaW9fcHRyLT5vcGVuKGRldmljZSwgSU9fRkxBR19SVywgJmlvKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoZGV2aWNlLCAwLCBfKCJ3aGlsZSBvcGVuaW5nIGRldmljZSBmaWxlIikpOworCQlleGl0KDEpOworCX0KKworCWV4dDJmc19yZXdyaXRlX3RvX2lvKGZzLCBpbyk7CisKKwlzZWVrX3NldChmZCwgZnMtPmltYWdlX2hlYWRlci0+b2Zmc2V0X2lub2RlKTsKKworCXJldHZhbCA9IGV4dDJmc19pbWFnZV9pbm9kZV9yZWFkKGZzLCBmZCwgMCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGltYWdlX2ZuLCAwLCAid2hpbGUgcmVzdG9yaW5nIHRoZSBpbWFnZSB0YWJsZSIpOworCQlleGl0KDEpOworCX0KKworCWNsb3NlKGZkKTsKKwlleHQyZnNfY2xvc2UgKGZzKTsKK30KKworc3RhdGljIHN0cnVjdCBleHQyX3Fjb3cyX2hkciAqY2hlY2tfcWNvdzJfaW1hZ2UoaW50ICpmZCwgY2hhciAqbmFtZSkKK3sKKworCSpmZCA9IGV4dDJmc19vcGVuX2ZpbGUobmFtZSwgT19SRE9OTFksIDA2MDApOworCWlmICgqZmQgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBxY293Ml9yZWFkX2hlYWRlcigqZmQpOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwlpbnQgYzsKKwllcnJjb2RlX3QgcmV0dmFsOworCWV4dDJfZmlsc3lzIGZzOworCWNoYXIgKmltYWdlX2ZuLCBvZmZzZXRfb3B0WzY0XTsKKwlzdHJ1Y3QgZXh0Ml9xY293Ml9oZHIgKmhlYWRlciA9IE5VTEw7CisJaW50IG9wZW5fZmxhZyA9IEVYVDJfRkxBR182NEJJVFM7CisJaW50IGltZ190eXBlID0gMDsKKwlpbnQgZmxhZ3MgPSAwOworCWludCBtb3VudF9mbGFncyA9IDA7CisJaW50IHFjb3cyX2ZkID0gMDsKKwlpbnQgZmQgPSAwOworCWludCByZXQgPSAwOworCWludCBpZ25vcmVfcndfbW91bnQgPSAwOworCWludCBjaGVjayA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJZnByaW50ZiAoc3RkZXJyLCAiZTJpbWFnZSAlcyAoJXMpXG4iLCBFMkZTUFJPR1NfVkVSU0lPTiwKKwkJIEUyRlNQUk9HU19EQVRFKTsKKwlpZiAoYXJnYyAmJiAqYXJndikKKwkJcHJvZ3JhbV9uYW1lID0gKmFyZ3Y7CisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIm5yc0lRYWZvOk86cGMiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnSSc6CisJCQlmbGFncyB8PSBFMklNQUdFX0lOU1RBTExfRkxBRzsKKwkJCWJyZWFrOworCQljYXNlICdRJzoKKwkJCWlmIChpbWdfdHlwZSkKKwkJCQl1c2FnZSgpOworCQkJaW1nX3R5cGUgfD0gRTJJTUFHRV9RQ09XMjsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWlmIChpbWdfdHlwZSkKKwkJCQl1c2FnZSgpOworCQkJaW1nX3R5cGUgfD0gRTJJTUFHRV9SQVc7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlmbGFncyB8PSBFMklNQUdFX1NDUkFNQkxFX0ZMQUc7CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlhbGxfZGF0YSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZ25vcmVfcndfbW91bnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbm9wX2ZsYWcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJc291cmNlX29mZnNldCA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQlkZXN0X29mZnNldCA9IHN0cnRvdWxsKG9wdGFyZywgTlVMTCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlzaG93X3Byb2dyZXNzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCWNoZWNrID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoKTsKKwkJfQorCWlmIChvcHRpbmQgPT0gYXJnYyAtIDEgJiYKKwkgICAgKHNvdXJjZV9vZmZzZXQgfHwgZGVzdF9vZmZzZXQpKQorCQkgICAgbW92ZV9tb2RlID0gMTsKKwllbHNlIGlmIChvcHRpbmQgIT0gYXJnYyAtIDIgKQorCQl1c2FnZSgpOworCisJaWYgKGFsbF9kYXRhICYmICFpbWdfdHlwZSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgXygiLWEgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgIgorCQkJCQkgICAid2l0aCByYXcgb3IgUUNPVzIgaW1hZ2VzLiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKChzb3VyY2Vfb2Zmc2V0IHx8IGRlc3Rfb2Zmc2V0KSAmJiBpbWdfdHlwZSAhPSBFMklNQUdFX1JBVykgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCV8oIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAobW92ZV9tb2RlICYmIGltZ190eXBlICE9IEUySU1BR0VfUkFXKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJXygiTW92ZSBtb2RlIGlzIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAobW92ZV9tb2RlICYmICFhbGxfZGF0YSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCV8oIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZF07CisJaWYgKG1vdmVfbW9kZSkKKwkJaW1hZ2VfZm4gPSBkZXZpY2VfbmFtZTsKKwllbHNlIGltYWdlX2ZuID0gYXJndltvcHRpbmQrMV07CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oImNoZWNraW5nIGlmIG1vdW50ZWQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGltZ190eXBlICYmICFpZ25vcmVfcndfbW91bnQgJiYKKwkgICAgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSAmJgorCSAgICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5SdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCAiCisJCQkiZmlsZXN5c3RlbSBjYW4gcmVzdWx0IGluIGFuXG4iCisJCQkiaW5jb25zaXN0ZW50IGltYWdlIHdoaWNoIHdpbGwgbm90IGJlIHVzZWZ1bCAiCisJCQkiZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiIKKwkJCSJVc2UgLWYgb3B0aW9uIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0LlxuIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChmbGFncyAmIEUySU1BR0VfSU5TVEFMTF9GTEFHKSB7CisJCWluc3RhbGxfaW1hZ2UoZGV2aWNlX25hbWUsIGltYWdlX2ZuLCBpbWdfdHlwZSk7CisJCWV4aXQgKDApOworCX0KKworCWlmIChpbWdfdHlwZSAmIEUySU1BR0VfUkFXKSB7CisJCWhlYWRlciA9IGNoZWNrX3Fjb3cyX2ltYWdlKCZxY293Ml9mZCwgZGV2aWNlX25hbWUpOworCQlpZiAoaGVhZGVyKSB7CisJCQlmbGFncyB8PSBFMklNQUdFX0lTX1FDT1cyX0ZMQUc7CisJCQlnb3RvIHNraXBfZGV2aWNlOworCQl9CisJfQorCXNwcmludGYob2Zmc2V0X29wdCwgIm9mZnNldD0lbGx1Iiwgc291cmNlX29mZnNldCk7CisJcmV0dmFsID0gZXh0MmZzX29wZW4yKGRldmljZV9uYW1lLCBvZmZzZXRfb3B0LCBvcGVuX2ZsYWcsIDAsIDAsCisJCQkgICAgICB1bml4X2lvX21hbmFnZXIsICZmcyk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksCisJCQkgZGV2aWNlX25hbWUpOworCQlmcHV0cyhfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpLCBzdGRvdXQpOworCQlleGl0KDEpOworCX0KKworc2tpcF9kZXZpY2U6CisJaWYgKHN0cmNtcChpbWFnZV9mbiwgIi0iKSA9PSAwKQorCQlmZCA9IDE7CisJZWxzZSB7CisJCWludCBvX2ZsYWdzID0gT19DUkVBVHxPX1JEV1I7CisKKwkJaWYgKGltZ190eXBlICE9IEUySU1BR0VfUkFXKQorCQkJb19mbGFncyB8PSBPX1RSVU5DOworCQlpZiAoYWNjZXNzKGltYWdlX2ZuLCBGX09LKSAhPSAwKQorCQkJZmxhZ3MgfD0gRTJJTUFHRV9DSEVDS19aRVJPX0ZMQUc7CisJCWZkID0gZXh0MmZzX29wZW5fZmlsZShpbWFnZV9mbiwgb19mbGFncywgMDYwMCk7CisJCWlmIChmZCA8IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLCBpbWFnZV9mbik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWlmIChkZXN0X29mZnNldCkKKwkJc2Vla19zZXQoZmQsIGRlc3Rfb2Zmc2V0KTsKKworCWlmICgoaW1nX3R5cGUgJiBFMklNQUdFX1FDT1cyKSAmJiAoZmQgPT0gMSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIlFDT1cyIGltYWdlIGNhbiBub3QgYmUgd3JpdHRlbiB0byAiCisJCQkJCSAgICJ0aGUgc3Rkb3V0IVxuIikpOworCQlleGl0KDEpOworCX0KKwlpZiAoZmQgIT0gMSkgeworCQlpZiAoZnN0YXQoZmQsICZzdCkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiQ2FuIG5vdCBzdGF0IG91dHB1dFxuIik7CisJCQlleGl0KDEpOworCQl9CisJCWlmIChTX0lTQkxLKHN0LnN0X21vZGUpKQorCQkJb3V0cHV0X2lzX2JsayA9IDE7CisJfQorCWlmIChmbGFncyAmIEUySU1BR0VfSVNfUUNPVzJfRkxBRykgeworCQlyZXQgPSBxY293Ml93cml0ZV9yYXdfaW1hZ2UocWNvdzJfZmQsIGZkLCBoZWFkZXIpOworCQlpZiAocmV0KSB7CisJCQlpZiAocmV0ID09IC1RQ09XX0NPTVBSRVNTRUQpCisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkltYWdlICglcykgaXMgY29tcHJlc3NlZFxuIiksCisJCQkJCWltYWdlX2ZuKTsKKwkJCWlmIChyZXQgPT0gLVFDT1dfRU5DUllQVEVEKQorCQkJCWZwcmludGYoc3RkZXJyLCBfKCJJbWFnZSAoJXMpIGlzIGVuY3J5cHRlZFxuIiksCisJCQkJCWltYWdlX2ZuKTsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXQsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UiCisJCQkJICAiICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIpLAorCQkJCWRldmljZV9uYW1lLCBpbWFnZV9mbik7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNoZWNrKSB7CisJCWlmIChpbWdfdHlwZSAhPSBFMklNQUdFX1JBVykgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtYyBvcHRpb24gb25seSBzdXBwb3J0ZWQgIgorCQkJCQkgICJpbiByYXcgbW9kZVxuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoZmQgPT0gMSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtYyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCAiCisJCQkJCSAgIndoZW4gd3JpdGluZyB0byBzdGRvdXRcbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmNoZWNrX2J1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgYWxsb2NhdGluZyBjaGVja19idWYiKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWlmIChzaG93X3Byb2dyZXNzICYmIChpbWdfdHlwZSAhPSBFMklNQUdFX1JBVykpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgIgorCQkJCSAgImluIHJhdyBtb2RlXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChpbWdfdHlwZSkKKwkJd3JpdGVfcmF3X2ltYWdlX2ZpbGUoZnMsIGZkLCBpbWdfdHlwZSwgZmxhZ3MpOworCWVsc2UKKwkJd3JpdGVfaW1hZ2VfZmlsZShmcywgZmQpOworCisJZXh0MmZzX2Nsb3NlIChmcyk7CisJaWYgKGNoZWNrKQorCQlwcmludGYoXygiJWQgYmxvY2tzIGFscmVhZHkgY29udGFpbmVkIHRoZSBkYXRhIHRvIGJlIGNvcGllZC5cbiIpLAorCQkgICAgICAgc2tpcHBlZF9ibG9ja3MpOworCitvdXQ6CisJaWYgKGhlYWRlcikKKwkJZnJlZShoZWFkZXIpOworCWlmIChxY293Ml9mZCkKKwkJY2xvc2UocWNvdzJfZmQpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2UyaW5pdHJkX2hlbHBlci5jIGIvZTJmc3Byb2dzL21pc2MvZTJpbml0cmRfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2NzJhMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2UyaW5pdHJkX2hlbHBlci5jCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogZTJpbml0cmRfaGVscGVyLmMgLSBHZXQgdGhlIGZpbGVzeXN0ZW0gdGFibGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwNCBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKworI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgImJsa2lkL2Jsa2lkLmgiCisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJlMmluaXRyZF9oZWxwZXIiOworc3RhdGljIGNoYXIgKiBkZXZpY2VfbmFtZTsKK3N0YXRpYyBpbnQgb3Blbl9mbGFnOworc3RhdGljIGludCByb290X3R5cGU7CitzdGF0aWMgYmxraWRfY2FjaGUgY2FjaGUgPSBOVUxMOworCitzdHJ1Y3QgbWVtX2ZpbGUgeworCWNoYXIJKmJ1ZjsKKwlpbnQJc2l6ZTsKKwlpbnQJcHRyOworfTsKKworc3RydWN0IGZzX2luZm8geworCWNoYXIgICpkZXZpY2U7CisJY2hhciAgKm1vdW50cHQ7CisJY2hhciAgKnR5cGU7CisJY2hhciAgKm9wdHM7CisJaW50ICAgZnJlcTsKKwlpbnQgICBwYXNzbm87CisJaW50ICAgZmxhZ3M7CisJc3RydWN0IGZzX2luZm8gKm5leHQ7Cit9OworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQlfKCJVc2FnZTogJXMgLXIgZGV2aWNlXG4iKSwgcHJvZ3JhbV9uYW1lKTsKKwlleGl0ICgxKTsKK30KKworc3RhdGljIGVycmNvZGVfdCBnZXRfZmlsZShleHQyX2ZpbHN5cyBmcywgY29uc3QgY2hhciAqIGZpbGVuYW1lLAorCQkgICBzdHJ1Y3QgbWVtX2ZpbGUgKnJldF9maWxlKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhciAJCSpidWY7CisJZXh0Ml9maWxlX3QJZTJfZmlsZSA9IE5VTEw7CisJdW5zaWduZWQgaW50CWdvdDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKwlleHQyX2lub190CWlubzsKKworCXJldF9maWxlLT5idWYgPSAwOworCXJldF9maWxlLT5zaXplID0gMDsKKwlyZXRfZmlsZS0+cHRyID0gMDsKKworCXJldHZhbCA9IGV4dDJmc19uYW1laShmcywgRVhUMl9ST09UX0lOTywgRVhUMl9ST09UX0lOTywKKwkJCSAgICAgIGZpbGVuYW1lLCAmaW5vKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGlub2RlLmlfc2l6ZV9oaWdoIHx8IChpbm9kZS5pX3NpemUgPiA2NTUzNikpCisJCXJldHVybiBFRkJJRzsKKworCWJ1ZiA9IG1hbGxvYyhpbm9kZS5pX3NpemUgKyAxKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKwltZW1zZXQoYnVmLCAwLCBpbm9kZS5pX3NpemUrMSk7CisKKwlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGZzLCBpbm8sIDAsICZlMl9maWxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKworCXJldHZhbCA9IGV4dDJmc19maWxlX3JlYWQoZTJfZmlsZSwgYnVmLCBpbm9kZS5pX3NpemUsICZnb3QpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlyZXRfZmlsZS0+YnVmID0gYnVmOworCXJldF9maWxlLT5zaXplID0gKGludCkgZ290OworCXJldHVybiAwOworCitlcnJvdXQ6CisJZnJlZShidWYpOworCWlmIChlMl9maWxlKQorCQlleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY2hhciAqZ2V0X2xpbmUoc3RydWN0IG1lbV9maWxlICpmaWxlKQoreworCWNoYXIJKmNwLCAqcmV0OworCWludAlzID0gMDsKKworCWNwID0gZmlsZS0+YnVmICsgZmlsZS0+cHRyOworCXdoaWxlICgqY3AgJiYgKmNwICE9ICdcbicpIHsKKwkJY3ArKzsKKwkJcysrOworCX0KKwlyZXQgPSBtYWxsb2MocysxKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisJcmV0W3NdPTA7CisJbWVtY3B5KHJldCwgZmlsZS0+YnVmICsgZmlsZS0+cHRyLCBzKTsKKwl3aGlsZSAoKmNwICYmICgqY3AgPT0gJ1xuJyB8fCAqY3AgPT0gJ1xyJykpIHsKKwkJY3ArKzsKKwkJcysrOworCX0KKwlmaWxlLT5wdHIgKz0gczsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1lbV9maWxlX2VvZihzdHJ1Y3QgbWVtX2ZpbGUgKmZpbGUpCit7CisJcmV0dXJuIChmaWxlLT5wdHIgPj0gZmlsZS0+c2l6ZSk7Cit9CisKKy8qCisgKiBmc3RhYiBwYXJzaW5nIGNvZGUKKyAqLworc3RhdGljIGNoYXIgKnN0cmluZ19jb3B5KGNvbnN0IGNoYXIgKnMpCit7CisJY2hhcgkqcmV0OworCisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwlyZXQgPSBtYWxsb2Moc3RybGVuKHMpKzEpOworCWlmIChyZXQpCisJCXN0cmNweShyZXQsIHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfYmxhbmsoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqc2tpcF9vdmVyX3dvcmQoY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCAmJiAhaXNzcGFjZSgqY3ApKQorCQljcCsrOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX3dvcmQoY2hhciAqKmJ1ZikKK3sKKwljaGFyICp3b3JkLCAqbmV4dDsKKworCXdvcmQgPSAqYnVmOworCWlmICgqd29yZCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdvcmQgPSBza2lwX292ZXJfYmxhbmsod29yZCk7CisJbmV4dCA9IHNraXBfb3Zlcl93b3JkKHdvcmQpOworCWlmICgqbmV4dCkKKwkJKm5leHQrKyA9IDA7CisJKmJ1ZiA9IG5leHQ7CisJcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2VzY2FwZShjaGFyICp3b3JkKQoreworCWNoYXIJKnAsICpxOworCWludAlhYywgaTsKKworCWlmICghd29yZCkKKwkJcmV0dXJuOworCisJZm9yIChwID0gd29yZCwgcSA9IHdvcmQ7ICpwOyBwKyssIHErKykgeworCQkqcSA9ICpwOworCQlpZiAoKnAgIT0gJ1xcJykKKwkJCWNvbnRpbnVlOworCQlpZiAoKisrcCA9PSAwKQorCQkJYnJlYWs7CisJCWlmICgqcCA9PSAndCcpIHsKKwkJCSpxID0gJ1x0JzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgqcCA9PSAnbicpIHsKKwkJCSpxID0gJ1xuJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghaXNkaWdpdCgqcCkpIHsKKwkJCSpxID0gKnA7CisJCQljb250aW51ZTsKKwkJfQorCQlhYyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHArKykgeworCQkJaWYgKCFpc2RpZ2l0KCpwKSkKKwkJCQlicmVhazsKKwkJCWFjID0gKGFjICogOCkgKyAoKnAgLSAnMCcpOworCQl9CisJCSpxID0gYWM7CisJCXAtLTsKKwl9CisJKnEgPSAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZzdGFiX2xpbmUoY2hhciAqbGluZSwgc3RydWN0IGZzX2luZm8gKmZzKQoreworCWNoYXIJKmRldiwgKmRldmljZSwgKm1udHBudCwgKnR5cGUsICpvcHRzLCAqZnJlcSwgKnBhc3NubywgKmNwOworCisJaWYgKChjcCA9IHN0cmNocihsaW5lLCAnIycpKSkKKwkJKmNwID0gMDsJLyogSWdub3JlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGNvbW1lbnQgY2hhciAqLworCWNwID0gbGluZTsKKworCWRldmljZSA9IHBhcnNlX3dvcmQoJmNwKTsKKwltbnRwbnQgPSBwYXJzZV93b3JkKCZjcCk7CisJdHlwZSA9IHBhcnNlX3dvcmQoJmNwKTsKKwlvcHRzID0gcGFyc2Vfd29yZCgmY3ApOworCWZyZXEgPSBwYXJzZV93b3JkKCZjcCk7CisJcGFzc25vID0gcGFyc2Vfd29yZCgmY3ApOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtMTsJLyogQWxsb3cgYmxhbmsgbGluZXMgKi8KKworCWlmICghbW50cG50IHx8ICF0eXBlKQorCQlyZXR1cm4gLTE7CisKKwlwYXJzZV9lc2NhcGUoZGV2aWNlKTsKKwlwYXJzZV9lc2NhcGUobW50cG50KTsKKwlwYXJzZV9lc2NhcGUodHlwZSk7CisJcGFyc2VfZXNjYXBlKG9wdHMpOworCXBhcnNlX2VzY2FwZShmcmVxKTsKKwlwYXJzZV9lc2NhcGUocGFzc25vKTsKKworCWRldiA9IGJsa2lkX2dldF9kZXZuYW1lKGNhY2hlLCBkZXZpY2UsIE5VTEwpOworCWlmIChkZXYpCisJCWRldmljZSA9IGRldjsKKworCWlmIChzdHJjaHIodHlwZSwgJywnKSkKKwkJdHlwZSA9IDA7CisKKwlmcy0+ZGV2aWNlID0gc3RyaW5nX2NvcHkoZGV2aWNlKTsKKwlmcy0+bW91bnRwdCA9IHN0cmluZ19jb3B5KG1udHBudCk7CisJZnMtPnR5cGUgPSBzdHJpbmdfY29weSh0eXBlKTsKKwlmcy0+b3B0cyA9IHN0cmluZ19jb3B5KG9wdHMgPyBvcHRzIDogIiIpOworCWZzLT5mcmVxID0gZnJlcSA/IGF0b2koZnJlcSkgOiAtMTsKKwlmcy0+cGFzc25vID0gcGFzc25vID8gYXRvaShwYXNzbm8pIDogLTE7CisJZnMtPmZsYWdzID0gMDsKKwlmcy0+bmV4dCA9IE5VTEw7CisKKwlmcmVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9mc3RhYl9saW5lKHN0cnVjdCBmc19pbmZvICpmcykKK3sKKwlpZiAoZnMtPmRldmljZSkKKwkJZnMtPmRldmljZSA9IDA7CisJaWYgKGZzLT5tb3VudHB0KQorCQlmcy0+bW91bnRwdCA9IDA7CisJaWYgKGZzLT50eXBlKQorCQlmcy0+dHlwZSA9IDA7CisJaWYgKGZzLT5vcHRzKQorCQlmcy0+b3B0cyA9IDA7CisJbWVtc2V0KGZzLCAwLCBzaXplb2Yoc3RydWN0IGZzX2luZm8pKTsKK30KKworCitzdGF0aWMgdm9pZCBQUlMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJydiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ3InOgorCQkJcm9vdF90eXBlKys7CisJCQlicmVhazsKKworCQljYXNlICd2JzoKKwkJCXByaW50ZigiJXMgJXMgKCVzKVxuIiwgcHJvZ3JhbV9uYW1lLAorCQkJICAgICAgIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9CisJaWYgKG9wdGluZCA8IGFyZ2MgLSAxIHx8IG9wdGluZCA9PSBhcmdjKQorCQl1c2FnZSgpOworCWRldmljZV9uYW1lID0gYmxraWRfZ2V0X2Rldm5hbWUoTlVMTCwgYXJndltvcHRpbmRdLCBOVUxMKTsKKwlpZiAoIWRldmljZV9uYW1lKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2W29wdGluZF0pOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3Jvb3RfdHlwZShleHQyX2ZpbHN5cyBmcykKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBtZW1fZmlsZSBmaWxlOworCWNoYXIgCQkqYnVmOworCXN0cnVjdCBmc19pbmZvIGZzX2luZm87CisJaW50CQlyZXQ7CisKKwlyZXR2YWwgPSBnZXRfZmlsZShmcywgIi9ldGMvZnN0YWIiLCAmZmlsZSk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiY291bGRuJ3Qgb3BlbiAvZXRjL2ZzdGFiIik7CisJCWV4aXQoMSk7CisJfQorCisJd2hpbGUgKCFtZW1fZmlsZV9lb2YoJmZpbGUpKSB7CisJCWJ1ZiA9IGdldF9saW5lKCZmaWxlKTsKKwkJaWYgKCFidWYpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBwYXJzZV9mc3RhYl9saW5lKGJ1ZiwgJmZzX2luZm8pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gbmV4dF9saW5lOworCisJCWlmICghc3RyY21wKGZzX2luZm8ubW91bnRwdCwgIi8iKSkKKwkJCXByaW50ZigiJXNcbiIsIGZzX2luZm8udHlwZSk7CisKKwkJZnJlZV9mc3RhYl9saW5lKCZmc19pbmZvKTsKKworCW5leHRfbGluZToKKwkJZnJlZShidWYpOworCX0KK30KKworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWV4dDJfZmlsc3lzIGZzOworCWlvX21hbmFnZXIgaW9fcHRyOworCisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKworCWJsa2lkX2dldF9jYWNoZSgmY2FjaGUsIE5VTEwpOworCVBSUyhhcmdjLCBhcmd2KTsKKworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwlpZiAoZ2V0ZW52KCJURVNUX0lPX0ZMQUdTIikgfHwgZ2V0ZW52KCJURVNUX0lPX0JMT0NLIikpIHsKKwkJaW9fcHRyID0gdGVzdF9pb19tYW5hZ2VyOworCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwl9IGVsc2UKKyNlbmRpZgorCQlpb19wdHIgPSB1bml4X2lvX21hbmFnZXI7CisJcmV0dmFsID0gZXh0MmZzX29wZW4gKGRldmljZV9uYW1lLCBvcGVuX2ZsYWcsIDAsIDAsIGlvX3B0ciwgJmZzKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKwkJZXhpdCgxKTsKKworCWlmIChyb290X3R5cGUpCisJCWdldF9yb290X3R5cGUoZnMpOworCisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZXR1cm4gKGV4dDJmc19jbG9zZSAoZnMpID8gMSA6IDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZTJsYWJlbC44LmluIGIvZTJmc3Byb2dzL21pc2MvZTJsYWJlbC44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjA4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9lMmxhYmVsLjguaW4KQEAgLTAsMCArMSw1MyBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMTk5MywgMTk5NCwgMTk5NSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIiAKKy5USCBFMkxBQkVMIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2UybGFiZWwgXC0gQ2hhbmdlIHRoZSBsYWJlbCBvbiBhbiBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtCisuU0ggU1lOT1BTSVMKKy5CIGUybGFiZWwKKy5JIGRldmljZQorWworLkkgbmV3LWxhYmVsCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGUybGFiZWwKK3dpbGwgZGlzcGxheSBvciBjaGFuZ2UgdGhlIGZpbGVzeXN0ZW0gbGFiZWwgb24gdGhlIGV4dDIsIGV4dDMsIG9yIGV4dDQgCitmaWxlc3lzdGVtIGxvY2F0ZWQgb24KKy5JIGRldmljZS4gIAorLlBQCitJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgCisuSSBuZXctbGFiZWwKK2lzIG5vdCBwcmVzZW50LCAKKy5CIGUybGFiZWwKK3dpbGwgc2ltcGx5IGRpc3BsYXkgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSBsYWJlbC4KKy5QUAorSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CisuSSBuZXctbGFiZWwKK2lzIHByZXNlbnQsIHRoZW4gCisuQiBlMmxhYmVsCit3aWxsIHNldCB0aGUgZmlsZXN5c3RlbSBsYWJlbCB0byBiZQorLklSIG5ldy1sYWJlbCAuCitFeHQyIGZpbGVzeXN0ZW0gbGFiZWxzIGNhbiBiZSBhdCBtb3N0IDE2IGNoYXJhY3RlcnMgbG9uZzsgaWYKKy5JIG5ldy1sYWJlbCAKK2lzIGxvbmdlciB0aGFuIDE2IGNoYXJhY3RlcnMsIAorLkIgZTJsYWJlbAord2lsbCB0cnVuY2F0ZSBpdCBhbmQgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UuICAKKy5QUAorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZpbGVzeXN0ZW0gbGFiZWwgdXNpbmcgdGhlCisuQiBcLUwKK29wdGlvbiBvZiAKKy5CUiB0dW5lMmZzICg4KS4KKy5QUAorLlNIIEFVVEhPUgorLkIgZTJsYWJlbCAKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gKHR5dHNvQG1pdC5lZHUpLgorLlNIIEFWQUlMQUJJTElUWQorLkIgZTJsYWJlbAoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBta2UyZnMgKDgpLAorLkJSIHR1bmUyZnMgKDgpCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2UybGFiZWwuYyBiL2UyZnNwcm9ncy9taXNjL2UybGFiZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTYxMDFhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZTJsYWJlbC5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogZTJsYWJlbC5jCQktIFByaW50IG9yIGNoYW5nZSB0aGUgdm9sdW1lIGxhYmVsIG9uIGFuIGV4dDIgZnMKKyAqCisgKiBXcml0dGVuIGJ5IEFuZHJpZXMgQnJvdXdlciAoYWViQGN3aS5ubCksIDk3MDcxNAorICoKKyAqIENvcHlyaWdodCAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDIDB4RUY1MworCisjZGVmaW5lIFZPTE5BTVNaIDE2CisKK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKwljaGFyICBzX2R1bW15MFs1Nl07CisJdW5zaWduZWQgY2hhciAgc19tYWdpY1syXTsKKwljaGFyICBzX2R1bW15MVs2Ml07CisJY2hhciAgc192b2x1bWVfbmFtZVtWT0xOQU1TWl07CisJY2hhciAgc19sYXN0X21vdW50ZWRbNjRdOworCWNoYXIgIHNfZHVtbXkyWzgyNF07Cit9IHNiOworCitzdGF0aWMgaW50IG9wZW5fZTJmcyAoY2hhciAqZGV2LCBpbnQgbW9kZSkKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW4oZGV2LCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJICAgICBwZXJyb3IoZGV2KTsKKwkgICAgIGZwcmludGYgKHN0ZGVyciwgXygiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIpLCBkZXYpOworCSAgICAgZXhpdCgxKTsKKwl9CisJaWYgKGxzZWVrKGZkLCAxMDI0LCBTRUVLX1NFVCkgIT0gMTAyNCkgeworCSAgICAgcGVycm9yKGRldik7CisJICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIpKTsKKwkgICAgIGV4aXQoMSk7CisJfQorCWlmIChyZWFkKGZkLCAoY2hhciAqKSAmc2IsIHNpemVvZihzYikpICE9IHNpemVvZihzYikpIHsKKwkgICAgIHBlcnJvcihkZXYpOworCSAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIpKTsKKwkgICAgIGV4aXQoMSk7CisJfQorCWlmIChzYi5zX21hZ2ljWzBdICsgMjU2KnNiLnNfbWFnaWNbMV0gIT0gRVhUMl9TVVBFUl9NQUdJQykgeworCSAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iKSk7CisJICAgICBleGl0KDEpOworCX0KKworCXJldHVybiBmZDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbGFiZWwgKGNoYXIgKmRldikKK3sKKwljaGFyIGxhYmVsW1ZPTE5BTVNaKzFdOworCisJb3Blbl9lMmZzIChkZXYsIE9fUkRPTkxZKTsKKwlzdHJuY3B5KGxhYmVsLCBzYi5zX3ZvbHVtZV9uYW1lLCBWT0xOQU1TWik7CisJbGFiZWxbVk9MTkFNU1pdID0gMDsKKwlwcmludGYoIiVzXG4iLCBsYWJlbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5nZV9sYWJlbCAoY2hhciAqZGV2LCBjaGFyICpsYWJlbCkKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fZTJmcyhkZXYsIE9fUkRXUik7CisJbWVtc2V0KHNiLnNfdm9sdW1lX25hbWUsIDAsIFZPTE5BTVNaKTsKKwlzdHJuY3B5KHNiLnNfdm9sdW1lX25hbWUsIGxhYmVsLCBWT0xOQU1TWik7CisJaWYgKHN0cmxlbihsYWJlbCkgPiBWT0xOQU1TWikKKwkJZnByaW50ZihzdGRlcnIsIF8oIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIikpOworCWlmIChsc2VlayhmZCwgMTAyNCwgU0VFS19TRVQpICE9IDEwMjQpIHsKKwkgICAgIHBlcnJvcihkZXYpOworCSAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iKSk7CisJICAgICBleGl0KDEpOworCX0KKwlpZiAod3JpdGUoZmQsIChjaGFyICopICZzYiwgc2l6ZW9mKHNiKSkgIT0gc2l6ZW9mKHNiKSkgeworCSAgICAgcGVycm9yKGRldik7CisJICAgICBmcHJpbnRmIChzdGRlcnIsIF8oImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIikpOworCSAgICAgZXhpdCgxKTsKKwl9Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWlmIChhcmdjID09IDIpCisJICAgICBwcmludF9sYWJlbChhcmd2WzFdKTsKKwllbHNlIGlmIChhcmdjID09IDMpCisJICAgICBjaGFuZ2VfbGFiZWwoYXJndlsxXSwgYXJndlsyXSk7CisJZWxzZSB7CisJICAgICBmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIpKTsKKwkgICAgIGV4aXQoMSk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZTJ1bmRvLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9lMnVuZG8uOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmYwNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZTJ1bmRvLjguaW4KQEAgLTAsMCArMSw0NCBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMjAwOCBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIgorLlRIIEUyVU5ETyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitlMnVuZG8gXC0gUmVwbGF5IGFuIHVuZG8gbG9nIGZvciBhbiBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtCisuU0ggU1lOT1BTSVMKKy5CIGUydW5kbworWworLkIgXC1mCitdCisuSSB1bmRvX2xvZyBkZXZpY2UKKy5TSCBERVNDUklQVElPTgorLkIgZTJ1bmRvCit3aWxsIHJlcGxheSB0aGUgdW5kbyBsb2cKKy5JIHVuZG9fbG9nCitmb3IgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbSBmb3VuZCBvbgorLklSIGRldmljZSAuCitUaGlzIGNhbiBiZQordXNlZCB0byB1bmRvIGEgZmFpbGVkIG9wZXJhdGlvbiBieSBhbiBlMmZzcHJvZ3MgcHJvZ3JhbS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtZgorTm9ybWFsbHksCisuQiBlMnVuZG8KK3dpbGwgY2hlY2sgdGhlIGZpbGVzeXN0ZW0gVVVJRCBhbmQgbGFzdCBtb2RpZmllZCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUKK3VuZG8gbG9nIG1hdGNoZXMgd2l0aCB0aGUgZmlsZXN5c3RlbSBvbiB0aGUgZGV2aWNlLiAgSWYgdGhleSBkbyBub3QKK21hdGNoLAorLkIgZTJ1bmRvCit3aWxsIHJlZnVzZSB0byBhcHBseSB0aGUgdW5kbyBsb2cgYXMgYSBzYWZldHkgbWVjaGFuaXNtLiAgVGhlCisuQiBcLWYKK29wdGlvbiBkaXNhYmxlcyB0aGlzIHNhZmV0eSBtZWNoYW5pc20uCisuU0ggQVVUSE9SCisuQiBlMnVuZG8KK3dhcyB3cml0dGVuIGJ5IEFuZWVzaCBLdW1hciBLLlYuIChhbmVlc2gua3VtYXJAbGludXgudm5ldC5pYm0uY29tKQorLlNIIEFWQUlMQUJJTElUWQorLkIgZTJ1bmRvCitpcyBwYXJ0IG9mIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBhbmQgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIFNFRSBBTFNPCisuQlIgbWtlMmZzICg4KSwKKy5CUiB0dW5lMmZzICg4KQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9lMnVuZG8uYyBiL2UyZnNwcm9ncy9taXNjL2UydW5kby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTUzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9lMnVuZG8uYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIGUydW5kby5jIC0gUmVwbGF5IGFuIHVuZG8gbG9nIG9udG8gYW4gZXh0Mi8zLzQgZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAbGludXgudm5ldC5pYm0uY29tPgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSAiZXh0MmZzL3RkYi5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG10aW1lX2tleVtdID0gImZpbGVzeXN0ZW0gTVRJTUUiOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdXVpZF9rZXlbXSA9ICJmaWxlc3lzdGVtIFVVSUQiOworc3RhdGljIHVuc2lnbmVkIGNoYXIgYmxrc2l6ZV9rZXlbXSA9ICJmaWxlc3lzdGVtIEJMS1NJWkUiOworCitzdGF0aWMgY2hhciAqcHJnX25hbWU7CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsCisJCV8oIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iKSwgcHJnX25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZmlsZXN5c3RlbShUREJfQ09OVEVYVCAqdGRiLCBpb19jaGFubmVsIGNoYW5uZWwpCit7CisJX191MzIgICBzX210aW1lOworCV9fdTggICAgc191dWlkWzE2XTsKKwllcnJjb2RlX3QgcmV0dmFsOworCVREQl9EQVRBIHRkYl9rZXksIHRkYl9kYXRhOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHN1cGVyOworCisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShjaGFubmVsLCBTVVBFUkJMT0NLX09GRlNFVCk7CisJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGNoYW5uZWwsIDEsIC1TVVBFUkJMT0NLX1NJWkUsICZzdXBlcik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsCisJCQkiJXMiLCBfKCJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIpKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl0ZGJfa2V5LmRwdHIgPSBtdGltZV9rZXk7CisJdGRiX2tleS5kc2l6ZSA9IHNpemVvZihtdGltZV9rZXkpOworCXRkYl9kYXRhID0gdGRiX2ZldGNoKHRkYiwgdGRiX2tleSk7CisJaWYgKCF0ZGJfZGF0YS5kcHRyKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVERCX1NVQ0NFU1MgKyB0ZGJfZXJyb3IodGRiKTsKKwkJY29tX2VycihwcmdfbmFtZSwgcmV0dmFsLAorCQkJXygiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIiksIHRkYl9lcnJvcnN0cih0ZGIpKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzX210aW1lID0gKihfX3UzMiAqKXRkYl9kYXRhLmRwdHI7CisJaWYgKHN1cGVyLnNfbXRpbWUgIT0gc19tdGltZSkgeworCisJCWNvbV9lcnIocHJnX25hbWUsIDAsCisJCQlfKCJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIpLAorCQkJc19tdGltZSk7CisKKwkJcmV0dXJuICAtMTsKKwl9CisKKworCXRkYl9rZXkuZHB0ciA9IHV1aWRfa2V5OworCXRkYl9rZXkuZHNpemUgPSBzaXplb2YodXVpZF9rZXkpOworCXRkYl9kYXRhID0gdGRiX2ZldGNoKHRkYiwgdGRiX2tleSk7CisJaWYgKCF0ZGJfZGF0YS5kcHRyKSB7CisJCXJldHZhbCA9IEVYVDJfRVRfVERCX1NVQ0NFU1MgKyB0ZGJfZXJyb3IodGRiKTsKKwkJY29tX2VycihwcmdfbmFtZSwgcmV0dmFsLAorCQkJXygiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIiksIHRkYl9lcnJvcnN0cih0ZGIpKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJbWVtY3B5KHNfdXVpZCwgdGRiX2RhdGEuZHB0ciwgc2l6ZW9mKHNfdXVpZCkpOworCWlmIChtZW1jbXAoc191dWlkLCBzdXBlci5zX3V1aWQsIHNpemVvZihzX3V1aWQpKSkgeworCQljb21fZXJyKHByZ19uYW1lLCAwLCAiJXMiLAorCQkJXygiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2Jsa19zaXplKFREQl9DT05URVhUICp0ZGIsIGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKwlpbnQgYmxvY2tfc2l6ZTsKKwllcnJjb2RlX3QgcmV0dmFsOworCVREQl9EQVRBIHRkYl9rZXksIHRkYl9kYXRhOworCisJdGRiX2tleS5kcHRyID0gYmxrc2l6ZV9rZXk7CisJdGRiX2tleS5kc2l6ZSA9IHNpemVvZihibGtzaXplX2tleSk7CisJdGRiX2RhdGEgPSB0ZGJfZmV0Y2godGRiLCB0ZGJfa2V5KTsKKwlpZiAoIXRkYl9kYXRhLmRwdHIpIHsKKwkJcmV0dmFsID0gRVhUMl9FVF9UREJfU1VDQ0VTUyArIHRkYl9lcnJvcih0ZGIpOworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsCisJCQlfKCJGYWlsZWQgdGRiX2ZldGNoICVzXG4iKSwgdGRiX2Vycm9yc3RyKHRkYikpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWJsb2NrX3NpemUgPSAqKGludCAqKXRkYl9kYXRhLmRwdHI7CisjaWZkZWYgREVCVUcKKwlwcmludGYoIkJsb2NrIHNpemUgJWRcbiIsIGJsb2NrX3NpemUpOworI2VuZGlmCisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShjaGFubmVsLCBibG9ja19zaXplKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBjLGZvcmNlID0gMDsKKwlUREJfQ09OVEVYVCAqdGRiOworCVREQl9EQVRBIGtleSwgZGF0YTsKKwlpb19jaGFubmVsIGNoYW5uZWw7CisJZXJyY29kZV90IHJldHZhbDsKKwlpbnQgIG1vdW50X2ZsYWdzOworCWJsazY0X3QgIGJsa19udW07CisJY2hhciAqZGV2aWNlX25hbWUsICp0ZGJfZmlsZTsKKwlpb19tYW5hZ2VyIG1hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisJYWRkX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKworCXByZ19uYW1lID0gYXJndlswXTsKKwl3aGlsZSgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCQljYXNlICdmJzoKKwkJCQlmb3JjZSA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXVzYWdlKCk7CisJCX0KKwl9CisKKwlpZiAoYXJnYyAhPSBvcHRpbmQgKyAyKQorCQl1c2FnZSgpOworCisJdGRiX2ZpbGUgPSBhcmd2W29wdGluZF07CisJZGV2aWNlX25hbWUgPSBhcmd2W29wdGluZCsxXTsKKworCXRkYiA9IHRkYl9vcGVuKHRkYl9maWxlLCAwLCAwLCBPX1JET05MWSwgMDYwMCk7CisKKwlpZiAoIXRkYikgeworCQljb21fZXJyKHByZ19uYW1lLCBlcnJubywKKwkJCQlfKCJGYWlsZWQgdGRiX29wZW4gJXNcbiIpLCB0ZGJfZmlsZSk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQoZGV2aWNlX25hbWUsICZtb3VudF9mbGFncyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByZ19uYW1lLCByZXR2YWwsIF8oIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgIgorCQkJCSIlcyBpcyBtb3VudGVkLlxuIiksIGRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHsKKwkJY29tX2VycihwcmdfbmFtZSwgcmV0dmFsLCAiJXMiLCBfKCJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuICIKKwkJCQkJCSJvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR2YWwgPSBtYW5hZ2VyLT5vcGVuKGRldmljZV9uYW1lLAorCQkJCUlPX0ZMQUdfRVhDTFVTSVZFIHwgSU9fRkxBR19SVywgICZjaGFubmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJnX25hbWUsIHJldHZhbCwKKwkJCQlfKCJGYWlsZWQgdG8gb3BlbiAlc1xuIiksIGRldmljZV9uYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoIWZvcmNlICYmIGNoZWNrX2ZpbGVzeXN0ZW0odGRiLCBjaGFubmVsKSkgeworCQlleGl0KDEpOworCX0KKworCWlmIChzZXRfYmxrX3NpemUodGRiLCBjaGFubmVsKSkgeworCQlleGl0KDEpOworCX0KKworCWZvciAoa2V5ID0gdGRiX2ZpcnN0a2V5KHRkYik7IGtleS5kcHRyOyBrZXkgPSB0ZGJfbmV4dGtleSh0ZGIsIGtleSkpIHsKKwkJaWYgKCFzdHJjbXAoKGNoYXIgKikga2V5LmRwdHIsIChjaGFyICopIG10aW1lX2tleSkgfHwKKwkJICAgICFzdHJjbXAoKGNoYXIgKikga2V5LmRwdHIsIChjaGFyICopIHV1aWRfa2V5KSB8fAorCQkgICAgIXN0cmNtcCgoY2hhciAqKSBrZXkuZHB0ciwgKGNoYXIgKikgYmxrc2l6ZV9rZXkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRhdGEgPSB0ZGJfZmV0Y2godGRiLCBrZXkpOworCQlpZiAoIWRhdGEuZHB0cikgeworCQkJY29tX2VycihwcmdfbmFtZSwgMCwKKwkJCQlfKCJGYWlsZWQgdGRiX2ZldGNoICVzXG4iKSwgdGRiX2Vycm9yc3RyKHRkYikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlibGtfbnVtID0gKihibGs2NF90ICopa2V5LmRwdHI7CisJCXByaW50ZihfKCJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iKSwKKwkJCQkJCQlkYXRhLmRzaXplLCBibGtfbnVtKTsKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChjaGFubmVsLCBibGtfbnVtLAorCQkJCQkJLWRhdGEuZHNpemUsIGRhdGEuZHB0cik7CisJCWlmIChyZXR2YWwgPT0gLTEpIHsKKwkJCWNvbV9lcnIocHJnX25hbWUsIHJldHZhbCwKKwkJCQkJXygiRmFpbGVkIHdyaXRlICVzXG4iKSwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJaW9fY2hhbm5lbF9jbG9zZShjaGFubmVsKTsKKwl0ZGJfY2xvc2UodGRiKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZTRkZWZyYWcuOC5pbiBiL2UyZnNwcm9ncy9taXNjL2U0ZGVmcmFnLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlMWJjOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2U0ZGVmcmFnLjguaW4KQEAgLTAsMCArMSw4MCBAQAorLlRIIEU0REVGUkFHIDggIk1heSAyMDA5IiAiZTRkZWZyYWcgdmVyc2lvbiAyLjAiCisuU0ggTkFNRQorZTRkZWZyYWcgXC0gb25saW5lIGRlZnJhZ21lbnRlciBmb3IgZXh0NCBmaWxlc3lzdGVtCisuU0ggU1lOT1BTSVMKKy5CIGU0ZGVmcmFnCitbCisuQiBcLWMKK10KK1sKKy5CIFwtdgorXQorLkkgdGFyZ2V0CitcJi4uLgorLlNIIERFU0NSSVBUSU9OCisuQiBlNGRlZnJhZworcmVkdWNlcyBmcmFnbWVudGF0aW9uIG9mIGV4dGVudCBiYXNlZCBmaWxlLiBUaGUgZmlsZSB0YXJnZXRlZCBieQorLkIgZTRkZWZyYWcKK2lzIGNyZWF0ZWQgb24gZXh0NCBmaWxlc3lzdGVtIG1hZGUgd2l0aCAiLU8gZXh0ZW50IiBvcHRpb24gKHNlZQorLkJSIG1rZTJmcyAoOCkpLgorVGhlIHRhcmdldGVkIGZpbGUgZ2V0cyBtb3JlIGNvbnRpZ3VvdXMgYmxvY2tzIGFuZCBpbXByb3ZlcyB0aGUgZmlsZSBhY2Nlc3MKK3NwZWVkLgorLlBQCisuSSB0YXJnZXQKK2lzIGEgcmVndWxhciBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBkZXZpY2UgdGhhdCBpcyBtb3VudGVkIGFzIGV4dDQgZmlsZXN5c3RlbS4KK0lmCisuSSB0YXJnZXQKK2lzIGEgZGlyZWN0b3J5LAorLkIgZTRkZWZyYWcKK3JlZHVjZXMgZnJhZ21lbnRhdGlvbiBvZiBhbGwgZmlsZXMgaW4gaXQuIElmCisuSSB0YXJnZXQKK2lzIGEgZGV2aWNlLAorLkIgZTRkZWZyYWcKK2dldHMgdGhlIG1vdW50IHBvaW50IG9mIGl0IGFuZCByZWR1Y2VzIGZyYWdtZW50YXRpb24gb2YgYWxsIGZpbGVzIGluIHRoaXMgbW91bnQKK3BvaW50LgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1jCitHZXQgYSBjdXJyZW50IGZyYWdtZW50YXRpb24gY291bnQgYW5kIGFuIGlkZWFsIGZyYWdtZW50YXRpb24gY291bnQsIGFuZAorY2FsY3VsYXRlIGZyYWdtZW50YXRpb24gc2NvcmUgYmFzZWQgb24gdGhlbS4gQnkgc2VlaW5nIHRoaXMgc2NvcmUsIHdlIGNhbgorZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIGV4ZWN1dGUKKy5CIGU0ZGVmcmFnCit0bworLklSIHRhcmdldCAuCitXaGVuIHVzZWQgd2l0aAorLkIgXC12CitvcHRpb24sIHRoZSBjdXJyZW50IGZyYWdtZW50YXRpb24gY291bnQgYW5kIHRoZSBpZGVhbCBmcmFnbWVudGF0aW9uIGNvdW50IGFyZQorcHJpbnRlZCBmb3IgZWFjaCBmaWxlLgorLklQCitBbHNvIHRoaXMgb3B0aW9uIG91dHB1dHMgdGhlIGF2ZXJhZ2UgZGF0YSBzaXplIGluIG9uZSBleHRlbnQuIElmIHlvdSBzZWUgaXQsCit5b3UnbGwgZmluZCB0aGUgZmlsZSBoYXMgaWRlYWwgZXh0ZW50cyBvciBub3QuIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBleHRlbnQKK3NpemUgaXMgMTMxMDcyS0IgaW4gZXh0NCBmaWxlc3lzdGVtIChpZiBibG9jayBzaXplIGlzIDRLQikuCisuSVAKK0lmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwKKy5JIHRhcmdldAoraXMgbmV2ZXIgZGVmcmFnbWVudGVkLgorLlRQCisuQiBcLXYKK1ByaW50IGVycm9yIG1lc3NhZ2VzIGFuZCB0aGUgZnJhZ21lbnRhdGlvbiBjb3VudCBiZWZvcmUgYW5kIGFmdGVyIGRlZnJhZyBmb3IKK2VhY2ggZmlsZS4KKy5TSCBOT1RFUworLkIgZTRkZWZyYWcKK2RvZXMgbm90IHN1cHBvcnQgc3dhcCBmaWxlLCBmaWxlcyBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeSwgYW5kIGZpbGVzIGFsbG9jYXRlZAoraW4gaW5kaXJlY3QgYmxvY2tzLiBXaGVuCisuSSB0YXJnZXQKK2lzIGEgZGV2aWNlIG9yIGEgbW91bnQgcG9pbnQsCisuQiBlNGRlZnJhZworZG9lc24ndCBkZWZyYWdtZW50IGZpbGVzIGluIG1vdW50IHBvaW50IG9mIG90aGVyIGRldmljZS4KKy5QUAorTm9uLXByaXZpbGVnZWQgdXNlcnMgY2FuIGV4ZWN1dGUKKy5CIGU0ZGVmcmFnCit0byB0aGVpciBvd24gZmlsZSwgYnV0IHRoZSBzY29yZSBpcyBub3QgcHJpbnRlZCBpZgorLkIgXC1jCitvcHRpb24gaXMgc3BlY2lmaWVkLiBUaGVyZWZvcmUsIGl0IGlzIGRlc2lyYWJsZSB0byBiZSBleGVjdXRlZCBieSByb290IHVzZXIuCisuU0ggQVVUSE9SCitXcml0dGVuIGJ5IEFraXJhIEZ1aml0YSA8YS1mdWppdGFAcnMuanAubmVjLmNvbT4gYW5kIFRha2FzaGkgU2F0bworPHQtc2F0b0B5ay5qcC5uZWMuY29tPi4KKy5TSCBTRUUgQUxTTworLkJSIG1rZTJmcyAoOCksCisuQlIgbW91bnQgKDgpLgorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9lNGRlZnJhZy5jIGIvZTJmc3Byb2dzL21pc2MvZTRkZWZyYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNlMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZTRkZWZyYWcuYwpAQCAtMCwwICsxLDIwODIgQEAKKy8qCisgKiBlNGRlZnJhZy5jIC0gZXh0NCBmaWxlc3lzdGVtIGRlZnJhZ21lbnRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBORUMgU29mdHdhcmUgVG9ob2t1LCBMdGQuCisgKgorICogQXV0aG9yOiBBa2lyYSBGdWppdGEJPGEtZnVqaXRhQHJzLmpwLm5lYy5jb20+CisgKiAgICAgICAgIFRha2FzaGkgU2F0bwk8dC1zYXRvQHlrLmpwLm5lYy5jb20+CisgKi8KKworI2lmbmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRQorI2VuZGlmCisKKyNpZm5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisjZW5kaWYKKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmdHcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtbnRlbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX3R5cGVzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2ZpZW1hcC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisKKy8qIEEgcmVsYXRpdmVseSBuZXcgaW9jdGwgaW50ZXJmYWNlIC4uLiAqLworI2lmbmRlZiBFWFQ0X0lPQ19NT1ZFX0VYVAorI2RlZmluZSBFWFQ0X0lPQ19NT1ZFX0VYVCAgICAgIF9JT1dSKCdmJywgMTUsIHN0cnVjdCBtb3ZlX2V4dGVudCkKKyNlbmRpZgorCisvKiBNYWNybyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgUFJJTlRfRVJSX01TRyhtc2cpCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIChtc2cpKQorI2RlZmluZSBJTl9GVFdfUFJJTlRfRVJSX01TRyhtc2cpCVwKKwlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcdFx0WyBORyBdXG4iLCAobXNnKSkKKyNkZWZpbmUgUFJJTlRfRklMRV9OQU1FKGZpbGUpCWZwcmludGYoc3RkZXJyLCAiIFwiJXNcIlxuIiwgKGZpbGUpKQorI2RlZmluZSBQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8obXNnKQlcCisJZnByaW50ZihzdGRlcnIsICJcdCVzOiVzXHRbIE5HIF1cbiIsIChtc2cpLCBzdHJlcnJvcihlcnJubykpCisjZGVmaW5lIFNUQVRJU1RJQ19FUlJfTVNHKG1zZykJXAorCWZwcmludGYoc3RkZXJyLCAiXHQlc1xuIiwgKG1zZykpCisjZGVmaW5lIFNUQVRJU1RJQ19FUlJfTVNHX1dJVEhfRVJSTk8obXNnKQlcCisJZnByaW50ZihzdGRlcnIsICJcdCVzOiVzXG4iLCAobXNnKSwgc3RyZXJyb3IoZXJybm8pKQorI2RlZmluZSBtaW4oeCwgeSkgKCgoeCkgPiAoeSkpID8gKHkpIDogKHgpKQorI2RlZmluZSBDQUxDX1NDT1JFKHJhdGlvKSBcCisJKChyYXRpbykgPiAxMCA/ICg4MCArIDIwICogKHJhdGlvKSAvIDEwMCkgOiAoOCAqIChyYXRpbykpKQorLyogV3JhcCB1cCB0aGUgZnJlZSBmdW5jdGlvbiAqLworI2RlZmluZSBGUkVFKHRtcCkJCQkJXAorCWRvIHsJCQkJCVwKKwkJaWYgKCh0bXApICE9IE5VTEwpCQlcCisJCQlmcmVlKHRtcCk7CQlcCisJfSB3aGlsZSAoMCkJCQkJXAorLyogSW5zZXJ0IGxpc3QyIGFmdGVyIGxpc3QxICovCisjZGVmaW5lIGluc2VydChsaXN0MSwgbGlzdDIpCQkJXAorCWRvIHsJCQkJCVwKKwkJbGlzdDItPm5leHQgPSBsaXN0MS0+bmV4dDsJXAorCQlsaXN0MS0+bmV4dC0+cHJldiA9IGxpc3QyOwlcCisJCWxpc3QyLT5wcmV2ID0gbGlzdDE7CQlcCisJCWxpc3QxLT5uZXh0ID0gbGlzdDI7CQlcCisJfSB3aGlsZSAoMCkKKworLyogVG8gZGVsZXRlIHVudXNlZCB3YXJuaW5nICovCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkKKyNlbmRpZgorCisvKiBUaGUgbW9kZSBvZiBkZWZyYWcgKi8KKyNkZWZpbmUgREVUQUlMCQkJMHgwMQorI2RlZmluZSBTVEFUSVNUSUMJCTB4MDIKKworI2RlZmluZSBERVZOQU1FCQkJMAorI2RlZmluZSBESVJOQU1FCQkJMQorI2RlZmluZSBGSUxFTkFNRQkJMgorCisjZGVmaW5lIEZUV19PUEVOX0ZECQkyMDAwCisKKyNkZWZpbmUgRlNfRVhUNAkJCSJleHQ0IgorI2RlZmluZSBST09UX1VJRAkJMAorCisjZGVmaW5lIEJPVU5EX1NDT1JFCQk1NQorI2RlZmluZSBTSE9XX0ZSQUdfRklMRVMJNQorCisvKiBNYWdpYyBudW1iZXIgZm9yIGV4dDQgKi8KKyNkZWZpbmUgRVhUNF9TVVBFUl9NQUdJQwkweEVGNTMKKworLyogRGVmaW5pdGlvbiBvZiBmbGV4X2JnICovCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHCQkweDAyMDAKKworLyogVGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIGZvciBpb2N0bCBGU19JT0NfRklFTUFQCisgKiBFWFRFTlRfTUFYX0NPVU5UOgl0aGUgbWF4aW11bSBudW1iZXIgb2YgZXh0ZW50cyBmb3IgZXhjaGFuZ2luZyBiZXR3ZWVuCisgKgkJCWtlcm5lbC1zcGFjZSBhbmQgdXNlci1zcGFjZSBwZXIgaW9jdGwKKyAqLworI2RlZmluZSBFWFRFTlRfTUFYX0NPVU5UCTUxMgorCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZXJyb3IgbWVzc2FnZSAqLworI2RlZmluZSBNU0dfVVNBR0UJCVwKKyJVc2FnZQk6IGU0ZGVmcmFnIFstdl0gZmlsZS4uLnwgZGlyZWN0b3J5Li4ufCBkZXZpY2UuLi5cblwKKwk6IGU0ZGVmcmFnICAtYyAgZmlsZS4uLnwgZGlyZWN0b3J5Li4ufCBkZXZpY2UuLi5cbiIKKworI2RlZmluZSBOR01TR19FWFQ0CQkiRmlsZXN5c3RlbSBpcyBub3QgZXh0NCBmaWxlc3lzdGVtIgorI2RlZmluZSBOR01TR19GSUxFX0VYVEVOVAkiRmFpbGVkIHRvIGdldCBmaWxlIGV4dGVudHMiCisjZGVmaW5lIE5HTVNHX0ZJTEVfSU5GTwkJIkZhaWxlZCB0byBnZXQgZmlsZSBpbmZvcm1hdGlvbiIKKyNkZWZpbmUgTkdNU0dfRklMRV9PUEVOCQkiRmFpbGVkIHRvIG9wZW4iCisjZGVmaW5lIE5HTVNHX0ZJTEVfVU5SRUcJIkZpbGUgaXMgbm90IHJlZ3VsYXIgZmlsZSIKKyNkZWZpbmUgTkdNU0dfTE9TVF9GT1VORAkiQ2FuIG5vdCBwcm9jZXNzIFwibG9zdCtmb3VuZFwiIgorCisvKiBEYXRhIHR5cGUgZm9yIGZpbGVzeXN0ZW0td2lkZSBibG9ja3MgbnVtYmVyICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBleHQ0X2ZzYmxrX3Q7CisKK3N0cnVjdCBmaWVtYXBfZXh0ZW50X2RhdGEgeworCV9fdTY0IGxlbjsJCQkvKiBibG9ja3MgY291bnQgKi8KKwlfX3U2NCBsb2dpY2FsOwkJLyogc3RhcnQgbG9naWNhbCBibG9jayBudW1iZXIgKi8KKwlleHQ0X2ZzYmxrX3QgcGh5c2ljYWw7CQkvKiBzdGFydCBwaHlzaWNhbCBibG9jayBudW1iZXIgKi8KK307CisKK3N0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgeworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKnByZXY7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9kYXRhIGRhdGE7CS8qIGV4dGVudCBiZWxvbmcgdG8gZmlsZSAqLworfTsKKworc3RydWN0IGZpZW1hcF9leHRlbnRfZ3JvdXAgeworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2dyb3VwICpwcmV2OworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2dyb3VwICpuZXh0OworCV9fdTY0IGxlbjsJLyogbGVuZ3RoIG9mIHRoaXMgY29udGludW91cyByZWdpb24gKi8KKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpzdGFydDsJLyogc3RhcnQgZXh0ICovCisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZW5kOwkJLyogZW5kIGV4dCAqLworfTsKKworc3RydWN0IG1vdmVfZXh0ZW50IHsKKwlfX3MzMiByZXNlcnZlZDsJLyogb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yICovCisJX191MzIgZG9ub3JfZmQ7CS8qIGRvbm9yIGZpbGUgZGVzY3JpcHRvciAqLworCV9fdTY0IG9yaWdfc3RhcnQ7CS8qIGxvZ2ljYWwgc3RhcnQgb2Zmc2V0IGluIGJsb2NrIGZvciBvcmlnICovCisJX191NjQgZG9ub3Jfc3RhcnQ7CS8qIGxvZ2ljYWwgc3RhcnQgb2Zmc2V0IGluIGJsb2NrIGZvciBkb25vciAqLworCV9fdTY0IGxlbjsJLyogYmxvY2sgbGVuZ3RoIHRvIGJlIG1vdmVkICovCisJX191NjQgbW92ZWRfbGVuOwkvKiBtb3ZlZCBibG9jayBsZW5ndGggKi8KK307CisKK3N0cnVjdCBmcmFnX3N0YXRpc3RpY19pbm8geworCWludCBub3dfY291bnQ7CS8qIHRoZSBmaWxlJ3MgZXh0ZW50cyBjb3VudCBvZiBiZWZvcmUgZGVmcmFnICovCisJaW50IGJlc3RfY291bnQ7IC8qIHRoZSBiZXN0IGZpbGUncyBleHRlbnRzIGNvdW50ICovCisJX191NjQgc2l6ZV9wZXJfZXh0OwkvKiBzaXplKEtCKSBwZXIgZXh0ZW50ICovCisJZmxvYXQgcmF0aW87CS8qIHRoZSByYXRpbyBvZiBmcmFnbWVudGF0aW9uICovCisJY2hhciBtc2dfYnVmZmVyW1BBVEhfTUFYICsgMV07CS8qIHBhdGhuYW1lIG9mIHRoZSBmaWxlICovCit9OworCitzdGF0aWMgY2hhcglsb3N0X2ZvdW5kX2RpcltQQVRIX01BWCArIDFdOworc3RhdGljIGludAlibG9ja19zaXplOworc3RhdGljIGludAlleHRlbnRzX2JlZm9yZV9kZWZyYWc7CitzdGF0aWMgaW50CWV4dGVudHNfYWZ0ZXJfZGVmcmFnOworc3RhdGljIGludAltb2RlX2ZsYWc7CitzdGF0aWMgdW5zaWduZWQgaW50CWN1cnJlbnRfdWlkOworc3RhdGljIHVuc2lnbmVkIGludAlkZWZyYWdlZF9maWxlX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGludAlmcmFnX2ZpbGVzX2JlZm9yZV9kZWZyYWc7CitzdGF0aWMgdW5zaWduZWQgaW50CWZyYWdfZmlsZXNfYWZ0ZXJfZGVmcmFnOworc3RhdGljIHVuc2lnbmVkIGludAlyZWd1bGFyX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGludAlzdWNjZWVkX2NudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJdG90YWxfY291bnQ7CitzdGF0aWMgX191OCBsb2dfZ3JvdXBzX3Blcl9mbGV4Oworc3RhdGljIF9fdTMyIGJsb2Nrc19wZXJfZ3JvdXA7CitzdGF0aWMgX191MzIgZmVhdHVyZV9pbmNvbXBhdDsKK3N0YXRpYyBleHQ0X2ZzYmxrX3QJZmlsZXNfYmxvY2tfY291bnQ7CitzdGF0aWMgc3RydWN0IGZyYWdfc3RhdGlzdGljX2lubwlmcmFnX3JhbmtbU0hPV19GUkFHX0ZJTEVTXTsKKworCisvKiBMb2NhbCBkZWZpbml0aW9ucyBvZiBzb21lIHN5c2NhbGxzIGdsaWJjIG1heSBub3QgeWV0IGhhdmUgKi8KKworI2lmbmRlZiBIQVZFX1BPU0lYX0ZBRFZJU0UKKyN3YXJuaW5nIFVzaW5nIGxvY2FsbHkgZGVmaW5lZCBwb3NpeF9mYWR2aXNlIGludGVyZmFjZS4KKworI2lmbmRlZiBfX05SX2ZhZHZpc2U2NF82NAorI2Vycm9yIFlvdXIga2VybmVsIGhlYWRlcnMgZG9udCBkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQKKyNlbmRpZgorCisvKgorICogZmFkdmlzZSgpIC0JCUdpdmUgYWR2aWNlIGFib3V0IGZpbGUgYWNjZXNzLgorICoKKyAqIEBmZDoJCQlkZWZyYWcgdGFyZ2V0IGZpbGUncyBkZXNjcmlwdG9yLgorICogQG9mZnNldDoJCWZpbGUgb2Zmc2V0LgorICogQGxlbjoJCWFyZWEgbGVuZ3RoLgorICogQGFkdmlzZToJCXByb2Nlc3MgZmxhZy4KKyAqLworc3RhdGljIGludCBwb3NpeF9mYWR2aXNlKGludCBmZCwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbiwgaW50IGFkdmlzZSkKK3sKKwlyZXR1cm4gc3lzY2FsbChfX05SX2ZhZHZpc2U2NF82NCwgZmQsIG9mZnNldCwgbGVuLCBhZHZpc2UpOworfQorI2VuZGlmIC8qICEgSEFWRV9GQURWSVNFNjRfNjQgKi8KKworI2lmbmRlZiBIQVZFX1NZTkNfRklMRV9SQU5HRQorI3dhcm5pbmcgVXNpbmcgbG9jYWxseSBkZWZpbmVkIHN5bmNfZmlsZV9yYW5nZSBpbnRlcmZhY2UuCisKKyNpZm5kZWYgX19OUl9zeW5jX2ZpbGVfcmFuZ2UKKyNpZm5kZWYgX19OUl9zeW5jX2ZpbGVfcmFuZ2UyIC8qIHBwYyAqLworI2Vycm9yIFlvdXIga2VybmVsIGhlYWRlcnMgZG9udCBkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBzeW5jX2ZpbGVfcmFuZ2UoKSAtCVN5bmMgZmlsZSByZWdpb24uCisgKgorICogQGZkOgkJCWRlZnJhZyB0YXJnZXQgZmlsZSdzIGRlc2NyaXB0b3IuCisgKiBAb2Zmc2V0OgkJZmlsZSBvZmZzZXQuCisgKiBAbGVuZ3RoOgkJYXJlYSBsZW5ndGguCisgKiBAZmxhZzoJCXByb2Nlc3MgZmxhZy4KKyAqLworaW50IHN5bmNfZmlsZV9yYW5nZShpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFnKQoreworI2lmZGVmIF9fTlJfc3luY19maWxlX3JhbmdlCisJcmV0dXJuIHN5c2NhbGwoX19OUl9zeW5jX2ZpbGVfcmFuZ2UsIGZkLCBvZmZzZXQsIGxlbmd0aCwgZmxhZyk7CisjZWxzZQorCXJldHVybiBzeXNjYWxsKF9fTlJfc3luY19maWxlX3JhbmdlMiwgZmQsIGZsYWcsIG9mZnNldCwgbGVuZ3RoKTsKKyNlbmRpZgorfQorI2VuZGlmIC8qICEgSEFWRV9TWU5DX0ZJTEVfUkFOR0UgKi8KKworI2lmbmRlZiBIQVZFX0ZBTExPQ0FURTY0Cisjd2FybmluZyBVc2luZyBsb2NhbGx5IGRlZmluZWQgZmFsbG9jYXRlIHN5c2NhbGwgaW50ZXJmYWNlLgorCisjaWZuZGVmIF9fTlJfZmFsbG9jYXRlCisjZXJyb3IgWW91ciBrZXJuZWwgaGVhZGVycyBkb250IGRlZmluZSBfX05SX2ZhbGxvY2F0ZQorI2VuZGlmCisKKy8qCisgKiBmYWxsb2NhdGU2NCgpIC0JTWFuaXB1bGF0ZSBmaWxlIHNwYWNlLgorICoKKyAqIEBmZDoJCQlkZWZyYWcgdGFyZ2V0IGZpbGUncyBkZXNjcmlwdG9yLgorICogQG1vZGU6CQlwcm9jZXNzIGZsYWcuCisgKiBAb2Zmc2V0OgkJZmlsZSBvZmZzZXQuCisgKiBAbGVuOgkJZmlsZSBzaXplLgorICovCitzdGF0aWMgaW50IGZhbGxvY2F0ZTY0KGludCBmZCwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pCit7CisJcmV0dXJuIHN5c2NhbGwoX19OUl9mYWxsb2NhdGUsIGZkLCBtb2RlLCBvZmZzZXQsIGxlbik7Cit9CisjZW5kaWYgLyogISBIQVZFX0ZBTExPQ0FURSAqLworCisvKgorICogZ2V0X21vdW50X3BvaW50KCkgLQlHZXQgZGV2aWNlJ3MgbW91bnQgcG9pbnQuCisgKgorICogQGRldm5hbWU6CQl0aGUgZGV2aWNlJ3MgbmFtZS4KKyAqIEBtb3VudF9wb2ludDoJdGhlIG1vdW50IHBvaW50LgorICogQGRpcl9wYXRoX2xlbjoJdGhlIGxlbmd0aCBvZiBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X21vdW50X3BvaW50KGNvbnN0IGNoYXIgKmRldm5hbWUsIGNoYXIgKm1vdW50X3BvaW50LAorCQkJCQkJCWludCBkaXJfcGF0aF9sZW4pCit7CisJLyogUmVmZXIgdG8gL2V0Yy9tdGFiICovCisJY29uc3QgY2hhcgkqbXRhYiA9IE1PVU5URUQ7CisJRklMRQkJKmZwID0gTlVMTDsKKwlzdHJ1Y3QgbW50ZW50CSptbnQgPSBOVUxMOworCXN0cnVjdCBzdGF0NjQJc2I7CisKKwlpZiAoc3RhdDY0KGRldm5hbWUsICZzYikgPCAwKSB7CisJCXBlcnJvcihOR01TR19GSUxFX0lORk8pOworCQlQUklOVF9GSUxFX05BTUUoZGV2bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmcCA9IHNldG1udGVudChtdGFiLCAiciIpOworCWlmIChmcCA9PSBOVUxMKSB7CisJCXBlcnJvcigiQ291bGRuJ3QgYWNjZXNzIC9ldGMvbXRhYiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKChtbnQgPSBnZXRtbnRlbnQoZnApKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0NjQgbXM7CisKKwkJLyoKKwkJICogVG8gaGFuZGxlIGRldmljZSBzeW1saW5rcywgd2Ugc2VlIGlmIHRoZQorCQkgKiBkZXZpY2UgbnVtYmVyIG1hdGNoZXMsIG5vdCB0aGUgbmFtZQorCQkgKi8KKwkJaWYgKHN0YXQ2NChtbnQtPm1udF9mc25hbWUsICZtcykgPCAwKQorCQkJY29udGludWU7CisJCWlmIChzYi5zdF9yZGV2ICE9IG1zLnN0X3JkZXYpCisJCQljb250aW51ZTsKKworCQllbmRtbnRlbnQoZnApOworCQlpZiAoc3RyY21wKG1udC0+bW50X3R5cGUsIEZTX0VYVDQpID09IDApIHsKKwkJCXN0cm5jcHkobW91bnRfcG9pbnQsIG1udC0+bW50X2RpciwKKwkJCQlkaXJfcGF0aF9sZW4pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJUFJJTlRfRVJSX01TRyhOR01TR19FWFQ0KTsKKwkJcmV0dXJuIC0xOworCX0KKwllbmRtbnRlbnQoZnApOworCVBSSU5UX0VSUl9NU0coIkZpbGVzeXN0ZW0gaXMgbm90IG1vdW50ZWQiKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBpc19leHQ0KCkgLQkJV2hldGhlciBvbiBhbiBleHQ0IGZpbGVzeXN0ZW0uCisgKgorICogQGZpbGU6CQl0aGUgZmlsZSdzIG5hbWUuCisgKi8KK3N0YXRpYyBpbnQgaXNfZXh0NChjb25zdCBjaGFyICpmaWxlLCBjaGFyICpkZXZuYW1lKQoreworCWludCAJbWF4bGVuID0gMDsKKwlpbnQJbGVuLCByZXQ7CisJRklMRQkqZnAgPSBOVUxMOworCWNoYXIJKm1udF90eXBlID0gTlVMTDsKKwkvKiBSZWZlciB0byAvZXRjL210YWIgKi8KKwljb25zdCBjaGFyCSptdGFiID0gTU9VTlRFRDsKKwljaGFyCWZpbGVfcGF0aFtQQVRIX01BWCArIDFdOworCXN0cnVjdCBtbnRlbnQJKm1udCA9IE5VTEw7CisJc3RydWN0IHN0YXRmczY0CWZzYnVmOworCisJLyogR2V0IGZ1bGwgcGF0aCAqLworCWlmIChyZWFscGF0aChmaWxlLCBmaWxlX3BhdGgpID09IE5VTEwpIHsKKwkJcGVycm9yKCJDb3VsZG4ndCBnZXQgZnVsbCBwYXRoIik7CisJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdGF0ZnM2NChmaWxlX3BhdGgsICZmc2J1ZikgPCAwKSB7CisJCXBlcnJvcigiRmFpbGVkIHRvIGdldCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIik7CisJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChmc2J1Zi5mX3R5cGUgIT0gRVhUNF9TVVBFUl9NQUdJQykgeworCQlQUklOVF9FUlJfTVNHKE5HTVNHX0VYVDQpOworCQlyZXR1cm4gLTE7CisJfQorCisJZnAgPSBzZXRtbnRlbnQobXRhYiwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlwZXJyb3IoIkNvdWxkbid0IGFjY2VzcyAvZXRjL210YWIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXdoaWxlICgobW50ID0gZ2V0bW50ZW50KGZwKSkgIT0gTlVMTCkgeworCQlpZiAobW50LT5tbnRfZnNuYW1lWzBdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlsZW4gPSBzdHJsZW4obW50LT5tbnRfZGlyKTsKKwkJcmV0ID0gbWVtY21wKGZpbGVfcGF0aCwgbW50LT5tbnRfZGlyLCBsZW4pOworCQlpZiAocmV0ICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAobWF4bGVuID49IGxlbikKKwkJCWNvbnRpbnVlOworCisJCW1heGxlbiA9IGxlbjsKKworCQltbnRfdHlwZSA9IHJlYWxsb2MobW50X3R5cGUsIHN0cmxlbihtbnQtPm1udF90eXBlKSArIDEpOworCQlpZiAobW50X3R5cGUgPT0gTlVMTCkgeworCQkJZW5kbW50ZW50KGZwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQltZW1zZXQobW50X3R5cGUsIDAsIHN0cmxlbihtbnQtPm1udF90eXBlKSArIDEpOworCQlzdHJuY3B5KG1udF90eXBlLCBtbnQtPm1udF90eXBlLCBzdHJsZW4obW50LT5tbnRfdHlwZSkpOworCQlzdHJuY3B5KGxvc3RfZm91bmRfZGlyLCBtbnQtPm1udF9kaXIsIFBBVEhfTUFYKTsKKwkJc3RybmNweShkZXZuYW1lLCBtbnQtPm1udF9mc25hbWUsIHN0cmxlbihtbnQtPm1udF9mc25hbWUpICsgMSk7CisJfQorCisJZW5kbW50ZW50KGZwKTsKKwlpZiAobW50X3R5cGUgJiYgc3RyY21wKG1udF90eXBlLCBGU19FWFQ0KSA9PSAwKSB7CisJCUZSRUUobW50X3R5cGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlGUkVFKG1udF90eXBlKTsKKwkJUFJJTlRfRVJSX01TRyhOR01TR19FWFQ0KTsKKwkJcmV0dXJuIC0xOworCX0KK30KKworLyoKKyAqIGNhbGNfZW50cnlfY291bnRzKCkgLQlDYWxjdWxhdGUgZmlsZSBjb3VudHMuCisgKgorICogQGZpbGU6CQlmaWxlIG5hbWUuCisgKiBAYnVmOgkJZmlsZSBpbmZvLgorICogQGZsYWc6CQlmaWxlIHR5cGUuCisgKiBAZnR3YnVmOgkJdGhlIHBvaW50ZXIgb2YgYSBzdHJ1Y3QgRlRXLgorICovCitzdGF0aWMgaW50IGNhbGNfZW50cnlfY291bnRzKGNvbnN0IGNoYXIgKmZpbGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQljb25zdCBzdHJ1Y3Qgc3RhdDY0ICpidWYsIGludCBmbGFnIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJc3RydWN0IEZUVyAqZnR3YnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpZiAoU19JU1JFRyhidWYtPnN0X21vZGUpKQorCQlyZWd1bGFyX2NvdW50Kys7CisKKwl0b3RhbF9jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwYWdlX2luX2NvcmUoKSAtCUdldCBpbmZvcm1hdGlvbiBvbiB3aGV0aGVyIHBhZ2VzIGFyZSBpbiBjb3JlLgorICoKKyAqIEBmZDoJCQlkZWZyYWcgdGFyZ2V0IGZpbGUncyBkZXNjcmlwdG9yLgorICogQGRlZnJhZ19kYXRhOglkYXRhIHVzZWQgZm9yIGRlZnJhZy4KKyAqIEB2ZWM6CQlwYWdlIHN0YXRlIGFycmF5LgorICogQHBhZ2VfbnVtOgkJcGFnZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgcGFnZV9pbl9jb3JlKGludCBmZCwgc3RydWN0IG1vdmVfZXh0ZW50IGRlZnJhZ19kYXRhLAorCQkJdW5zaWduZWQgY2hhciAqKnZlYywgdW5zaWduZWQgaW50ICpwYWdlX251bSkKK3sKKwlsb25nCXBhZ2VzaXplOworCXZvaWQJKnBhZ2UgPSBOVUxMOworCWxvZmZfdAlvZmZzZXQsIGVuZF9vZmZzZXQsIGxlbmd0aDsKKworCWlmICh2ZWMgPT0gTlVMTCB8fCAqdmVjICE9IE5VTEwpCisJCXJldHVybiAtMTsKKworCXBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCWlmIChwYWdlc2l6ZSA8IDApCisJCXJldHVybiAtMTsKKwkvKiBJbiBtbWFwLCBvZmZzZXQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSAqLworCW9mZnNldCA9IChsb2ZmX3QpZGVmcmFnX2RhdGEub3JpZ19zdGFydCAqIGJsb2NrX3NpemU7CisJbGVuZ3RoID0gKGxvZmZfdClkZWZyYWdfZGF0YS5sZW4gKiBibG9ja19zaXplOworCWVuZF9vZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGg7CisJLyogUm91bmQgdGhlIG9mZnNldCBkb3duIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHBhZ2VzaXplICovCisJb2Zmc2V0ID0gKG9mZnNldCAvIHBhZ2VzaXplKSAqIHBhZ2VzaXplOworCWxlbmd0aCA9IGVuZF9vZmZzZXQgLSBvZmZzZXQ7CisKKwlwYWdlID0gbW1hcChOVUxMLCBsZW5ndGgsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIG9mZnNldCk7CisJaWYgKHBhZ2UgPT0gTUFQX0ZBSUxFRCkKKwkJcmV0dXJuIC0xOworCisJKnBhZ2VfbnVtID0gMDsKKwkqcGFnZV9udW0gPSAobGVuZ3RoICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplOworCSp2ZWMgPSAodW5zaWduZWQgY2hhciAqKWNhbGxvYygqcGFnZV9udW0sIDEpOworCWlmICgqdmVjID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCS8qIEdldCBpbmZvcm1hdGlvbiBvbiB3aGV0aGVyIHBhZ2VzIGFyZSBpbiBjb3JlICovCisJaWYgKG1pbmNvcmUocGFnZSwgKHNpemVfdClsZW5ndGgsICp2ZWMpID09IC0xIHx8CisJCW11bm1hcChwYWdlLCBsZW5ndGgpID09IC0xKSB7CisJCUZSRUUoKnZlYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRlZnJhZ19mYWR2aXNlKCkgLQlQcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEuCisgKgorICogQGZkOgkJCWRlZnJhZyB0YXJnZXQgZmlsZSdzIGRlc2NyaXB0b3IuCisgKiBAZGVmcmFnX2RhdGE6CWRhdGEgdXNlZCBmb3IgZGVmcmFnLgorICogQHZlYzoJCXBhZ2Ugc3RhdGUgYXJyYXkuCisgKiBAcGFnZV9udW06CQlwYWdlIG51bWJlci4KKyAqLworc3RhdGljIGludCBkZWZyYWdfZmFkdmlzZShpbnQgZmQsIHN0cnVjdCBtb3ZlX2V4dGVudCBkZWZyYWdfZGF0YSwKKwkJICAgdW5zaWduZWQgY2hhciAqdmVjLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0pCit7CisJaW50CWZsYWcgPSAxOworCWxvbmcJcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisJaW50CWZhZHZpc2VfZmxhZyA9IFBPU0lYX0ZBRFZfRE9OVE5FRUQ7CisJaW50CXN5bmNfZmxhZyA9IFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSB8CisJCQkgICAgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIHwKKwkJCSAgICBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUjsKKwl1bnNpZ25lZCBpbnQJaTsKKwlsb2ZmX3QJb2Zmc2V0OworCisJaWYgKHBhZ2VzaXplIDwgMSkKKwkJcmV0dXJuIC0xOworCisJb2Zmc2V0ID0gKGxvZmZfdClkZWZyYWdfZGF0YS5vcmlnX3N0YXJ0ICogYmxvY2tfc2l6ZTsKKwlvZmZzZXQgPSAob2Zmc2V0IC8gcGFnZXNpemUpICogcGFnZXNpemU7CisKKwkvKiBTeW5jIGZpbGUgZm9yIGZhZHZpc2UgcHJvY2VzcyAqLworCWlmIChzeW5jX2ZpbGVfcmFuZ2UoZmQsIG9mZnNldCwKKwkJKGxvZmZfdClwYWdlc2l6ZSAqIHBhZ2VfbnVtLCBzeW5jX2ZsYWcpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogVHJ5IHRvIHJlbGVhc2UgYnVmZmVyIGNhY2hlIHdoaWNoIHRoaXMgcHJvY2VzcyB1c2VkLAorCSAqIHRoZW4gb3RoZXIgcHJvY2VzcyBjYW4gdXNlIHRoZSByZWxlYXNlZCBidWZmZXIKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9udW07IGkrKykgeworCQlpZiAoKHZlY1tpXSAmIDB4MSkgPT0gMCkgeworCQkJb2Zmc2V0ICs9IHBhZ2VzaXplOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBvc2l4X2ZhZHZpc2UoZmQsIG9mZnNldCwgcGFnZXNpemUsIGZhZHZpc2VfZmxhZykgPCAwKSB7CisJCQlpZiAoKG1vZGVfZmxhZyAmIERFVEFJTCkgJiYgZmxhZykgeworCQkJCXBlcnJvcigiXHRGYWlsZWQgdG8gZmFkdmlzZSIpOworCQkJCWZsYWcgPSAwOworCQkJfQorCQl9CisJCW9mZnNldCArPSBwYWdlc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNoZWNrX2ZyZWVfc2l6ZSgpIC0JQ2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggZGlzayBzcGFjZS4KKyAqCisgKiBAZmQ6CQkJZGVmcmFnIHRhcmdldCBmaWxlJ3MgZGVzY3JpcHRvci4KKyAqIEBmaWxlOgkJZmlsZSBuYW1lLgorICogQGJsa19jb3VudDoJCWZpbGUgYmxvY2tzLgorICovCitzdGF0aWMgaW50IGNoZWNrX2ZyZWVfc2l6ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZpbGUsIGV4dDRfZnNibGtfdCBibGtfY291bnQpCit7CisJZXh0NF9mc2Jsa190CWZyZWVfYmxrX2NvdW50OworCXN0cnVjdCBzdGF0ZnM2NAlmc2J1ZjsKKworCWlmIChmc3RhdGZzNjQoZmQsICZmc2J1ZikgPCAwKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTygKKwkJCQkiRmFpbGVkIHRvIGdldCBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIik7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENvbXB1dGUgZnJlZSBzcGFjZSBmb3Igcm9vdCBhbmQgbm9ybWFsIHVzZXIgc2VwYXJhdGVseSAqLworCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkKKwkJZnJlZV9ibGtfY291bnQgPSBmc2J1Zi5mX2JmcmVlOworCWVsc2UKKwkJZnJlZV9ibGtfY291bnQgPSBmc2J1Zi5mX2JhdmFpbDsKKworCWlmIChmcmVlX2Jsa19jb3VudCA+PSBibGtfY291bnQpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FTk9TUEM7Cit9CisKKy8qCisgKiBmaWxlX2ZyYWdfY291bnQoKSAtCUdldCBmaWxlIGZyYWdtZW50IGNvdW50LgorICoKKyAqIEBmZDoJCQlkZWZyYWcgdGFyZ2V0IGZpbGUncyBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgaW50IGZpbGVfZnJhZ19jb3VudChpbnQgZmQpCit7CisJaW50CXJldDsKKwlzdHJ1Y3QgZmllbWFwCWZpZW1hcF9idWY7CisKKwkvKiBXaGVuIGZtX2V4dGVudF9jb3VudCBpcyAwLAorCSAqIGlvY3RsIGp1c3QgZ2V0IGZpbGUgZnJhZ21lbnQgY291bnQuCisJICovCisJbWVtc2V0KCZmaWVtYXBfYnVmLCAwLCBzaXplb2Yoc3RydWN0IGZpZW1hcCkpOworCWZpZW1hcF9idWYuZm1fc3RhcnQgPSAwOworCWZpZW1hcF9idWYuZm1fbGVuZ3RoID0gRklFTUFQX01BWF9PRkZTRVQ7CisJZmllbWFwX2J1Zi5mbV9mbGFncyB8PSBGSUVNQVBfRkxBR19TWU5DOworCisJcmV0ID0gaW9jdGwoZmQsIEZTX0lPQ19GSUVNQVAsICZmaWVtYXBfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBmaWVtYXBfYnVmLmZtX21hcHBlZF9leHRlbnRzOworfQorCisvKgorICogZmlsZV9jaGVjaygpIC0JQ2hlY2sgZmlsZSdzIGF0dHJpYnV0ZXMuCisgKgorICogQGZkOgkJCWRlZnJhZyB0YXJnZXQgZmlsZSdzIGRlc2NyaXB0b3IuCisgKiBAYnVmOgkJYSBwb2ludGVyIG9mIHRoZSBzdHJ1Y3Qgc3RhdDY0LgorICogQGZpbGU6CQlmaWxlIG5hbWUuCisgKiBAZXh0ZW50czoJCWZpbGUgZXh0ZW50cy4KKyAqIEBibGtfY291bnQ6CQlmaWxlIGJsb2Nrcy4KKyAqLworc3RhdGljIGludCBmaWxlX2NoZWNrKGludCBmZCwgY29uc3Qgc3RydWN0IHN0YXQ2NCAqYnVmLCBjb25zdCBjaGFyICpmaWxlLAorCQlpbnQgZXh0ZW50cywgZXh0NF9mc2Jsa190IGJsa19jb3VudCkKK3sKKwlpbnQJcmV0OworCXN0cnVjdCBmbG9jawlsb2NrOworCisJLyogV3JpdGUtbG9jayBjaGVjayBpcyBtb3JlIHJlbGlhYmxlICovCisJbG9jay5sX3R5cGUgPSBGX1dSTENLOworCWxvY2subF9zdGFydCA9IDA7CisJbG9jay5sX3doZW5jZSA9IFNFRUtfU0VUOworCWxvY2subF9sZW4gPSAwOworCisJLyogRnJlZSBzcGFjZSAqLworCXJldCA9IGNoZWNrX2ZyZWVfc2l6ZShmZCwgZmlsZSwgYmxrX2NvdW50KTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAoKG1vZGVfZmxhZyAmIERFVEFJTCkgJiYgcmV0ID09IC1FTk9TUEMpIHsKKwkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbS1sldS8ldV0gXCIlc1wiXHRcdCIKKwkJCQkiICBleHRlbnRzOiAlZCAtPiAlZFxuIiwgZGVmcmFnZWRfZmlsZV9jb3VudCwKKwkJCQl0b3RhbF9jb3VudCwgZmlsZSwgZXh0ZW50cywgZXh0ZW50cyk7CisJCQlJTl9GVFdfUFJJTlRfRVJSX01TRygKKwkJCSJEZWZyYWcgc2l6ZSBpcyBsYXJnZXIgdGhhbiBmaWxlc3lzdGVtJ3MgZnJlZSBzcGFjZSIpOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBBY2Nlc3MgYXV0aG9yaXR5ICovCisJaWYgKGN1cnJlbnRfdWlkICE9IFJPT1RfVUlEICYmCisJCWJ1Zi0+c3RfdWlkICE9IGN1cnJlbnRfdWlkKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbS1sldS8ldV0gXCIlc1wiXHRcdCIKKwkJCQkiICBleHRlbnRzOiAlZCAtPiAlZFxuIiwgZGVmcmFnZWRfZmlsZV9jb3VudCwKKwkJCQl0b3RhbF9jb3VudCwgZmlsZSwgZXh0ZW50cywgZXh0ZW50cyk7CisJCQlJTl9GVFdfUFJJTlRfRVJSX01TRygKKwkJCQkiRmlsZSBpcyBub3QgY3VycmVudCB1c2VyJ3MgZmlsZSIKKwkJCQkiIG9yIGN1cnJlbnQgdXNlciBpcyBub3Qgcm9vdCIpOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBMb2NrIHN0YXR1cyAqLworCWlmIChmY250bChmZCwgRl9HRVRMSywgJmxvY2spIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oCisJCQkJIkZhaWxlZCB0byBnZXQgbG9jayBpbmZvcm1hdGlvbiIpOworCQl9CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKGxvY2subF90eXBlICE9IEZfVU5MQ0spIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJSU5fRlRXX1BSSU5UX0VSUl9NU0coIkZpbGUgaGFzIGJlZW4gbG9ja2VkIik7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogaW5zZXJ0X2V4dGVudF9ieV9sb2dpY2FsKCkgLQlTZXF1ZW50aWFsbHkgaW5zZXJ0IGV4dGVudCBieSBsb2dpY2FsLgorICoKKyAqIEBleHRfbGlzdF9oZWFkOgl0aGUgaGVhZCBvZiBsb2dpY2FsIGV4dGVudCBsaXN0LgorICogQGV4dDoJCXRoZSBleHRlbnQgZWxlbWVudCB3aGljaCB3aWxsIGJlIGluc2VydGVkLgorICovCitzdGF0aWMgaW50IGluc2VydF9leHRlbnRfYnlfbG9naWNhbChzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICoqZXh0X2xpc3RfaGVhZCwKKwkJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dCkKK3sKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0CSpleHRfbGlzdF90bXAgPSAqZXh0X2xpc3RfaGVhZDsKKworCWlmIChleHQgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwkvKiBGaXJzdCBlbGVtZW50ICovCisJaWYgKCpleHRfbGlzdF9oZWFkID09IE5VTEwpIHsKKwkJKCpleHRfbGlzdF9oZWFkKSA9IGV4dDsKKwkJKCpleHRfbGlzdF9oZWFkKS0+cHJldiA9ICpleHRfbGlzdF9oZWFkOworCQkoKmV4dF9saXN0X2hlYWQpLT5uZXh0ID0gKmV4dF9saXN0X2hlYWQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChleHQtPmRhdGEubG9naWNhbCA8PSBleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCkgeworCQkvKiBJbnNlcnQgYmVmb3JlIGhlYWQgKi8KKwkJaWYgKGV4dF9saXN0X3RtcC0+ZGF0YS5sb2dpY2FsIDwKKwkJCWV4dC0+ZGF0YS5sb2dpY2FsICsgZXh0LT5kYXRhLmxlbikKKwkJCS8qIE92ZXJsYXAgKi8KKwkJCWdvdG8gb3V0OworCQkvKiBBZGp1c3QgaGVhZCAqLworCQkqZXh0X2xpc3RfaGVhZCA9IGV4dDsKKwl9IGVsc2UgeworCQkvKiBJbnNlcnQgaW50byB0aGUgbWlkZGxlIG9yIGxhc3Qgb2YgdGhlIGxpc3QgKi8KKwkJZG8geworCQkJaWYgKGV4dC0+ZGF0YS5sb2dpY2FsIDwgZXh0X2xpc3RfdG1wLT5kYXRhLmxvZ2ljYWwpCisJCQkJYnJlYWs7CisJCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF90bXAtPm5leHQ7CisJCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSAoKmV4dF9saXN0X2hlYWQpKTsKKwkJaWYgKGV4dC0+ZGF0YS5sb2dpY2FsIDwKKwkJICAgIGV4dF9saXN0X3RtcC0+cHJldi0+ZGF0YS5sb2dpY2FsICsKKwkJCWV4dF9saXN0X3RtcC0+cHJldi0+ZGF0YS5sZW4pCisJCQkvKiBPdmVybGFwICovCisJCQlnb3RvIG91dDsKKworCQlpZiAoZXh0X2xpc3RfdG1wICE9ICpleHRfbGlzdF9oZWFkICYmCisJCSAgICBleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCA8CisJCSAgICBleHQtPmRhdGEubG9naWNhbCArIGV4dC0+ZGF0YS5sZW4pCisJCQkvKiBPdmVybGFwICovCisJCQlnb3RvIG91dDsKKwl9CisJZXh0X2xpc3RfdG1wID0gZXh0X2xpc3RfdG1wLT5wcmV2OworCS8qIEluc2VydCAiZXh0IiBhZnRlciAiZXh0X2xpc3RfdG1wIiAqLworCWluc2VydChleHRfbGlzdF90bXAsIGV4dCk7CisJcmV0dXJuIDA7CitvdXQ6CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorCisvKgorICogaW5zZXJ0X2V4dGVudF9ieV9waHlzaWNhbCgpIC0JU2VxdWVudGlhbGx5IGluc2VydCBleHRlbnQgYnkgcGh5c2ljYWwuCisgKgorICogQGV4dF9saXN0X2hlYWQ6CXRoZSBoZWFkIG9mIHBoeXNpY2FsIGV4dGVudCBsaXN0LgorICogQGV4dDoJCXRoZSBleHRlbnQgZWxlbWVudCB3aGljaCB3aWxsIGJlIGluc2VydGVkLgorICovCitzdGF0aWMgaW50IGluc2VydF9leHRlbnRfYnlfcGh5c2ljYWwoc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqKmV4dF9saXN0X2hlYWQsCisJCQlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHQpCit7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqZXh0X2xpc3RfdG1wID0gKmV4dF9saXN0X2hlYWQ7CisKKwlpZiAoZXh0ID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJLyogRmlyc3QgZWxlbWVudCAqLworCWlmICgqZXh0X2xpc3RfaGVhZCA9PSBOVUxMKSB7CisJCSgqZXh0X2xpc3RfaGVhZCkgPSBleHQ7CisJCSgqZXh0X2xpc3RfaGVhZCktPnByZXYgPSAqZXh0X2xpc3RfaGVhZDsKKwkJKCpleHRfbGlzdF9oZWFkKS0+bmV4dCA9ICpleHRfbGlzdF9oZWFkOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZXh0LT5kYXRhLnBoeXNpY2FsIDw9IGV4dF9saXN0X3RtcC0+ZGF0YS5waHlzaWNhbCkgeworCQkvKiBJbnNlcnQgYmVmb3JlIGhlYWQgKi8KKwkJaWYgKGV4dF9saXN0X3RtcC0+ZGF0YS5waHlzaWNhbCA8CisJCQkJCWV4dC0+ZGF0YS5waHlzaWNhbCArIGV4dC0+ZGF0YS5sZW4pCisJCQkvKiBPdmVybGFwICovCisJCQlnb3RvIG91dDsKKwkJLyogQWRqdXN0IGhlYWQgKi8KKwkJKmV4dF9saXN0X2hlYWQgPSBleHQ7CisJfSBlbHNlIHsKKwkJLyogSW5zZXJ0IGludG8gdGhlIG1pZGRsZSBvciBsYXN0IG9mIHRoZSBsaXN0ICovCisJCWRvIHsKKwkJCWlmIChleHQtPmRhdGEucGh5c2ljYWwgPCBleHRfbGlzdF90bXAtPmRhdGEucGh5c2ljYWwpCisJCQkJYnJlYWs7CisJCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF90bXAtPm5leHQ7CisJCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSAoKmV4dF9saXN0X2hlYWQpKTsKKwkJaWYgKGV4dC0+ZGF0YS5waHlzaWNhbCA8CisJCSAgICBleHRfbGlzdF90bXAtPnByZXYtPmRhdGEucGh5c2ljYWwgKworCQkJCWV4dF9saXN0X3RtcC0+cHJldi0+ZGF0YS5sZW4pCisJCQkvKiBPdmVybGFwICovCisJCQlnb3RvIG91dDsKKworCQlpZiAoZXh0X2xpc3RfdG1wICE9ICpleHRfbGlzdF9oZWFkICYmCisJCSAgICBleHRfbGlzdF90bXAtPmRhdGEucGh5c2ljYWwgPAorCQkJCWV4dC0+ZGF0YS5waHlzaWNhbCArIGV4dC0+ZGF0YS5sZW4pCisJCQkvKiBPdmVybGFwICovCisJCQlnb3RvIG91dDsKKwl9CisJZXh0X2xpc3RfdG1wID0gZXh0X2xpc3RfdG1wLT5wcmV2OworCS8qIEluc2VydCAiZXh0IiBhZnRlciAiZXh0X2xpc3RfdG1wIiAqLworCWluc2VydChleHRfbGlzdF90bXAsIGV4dCk7CisJcmV0dXJuIDA7CitvdXQ6CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorCisvKgorICogaW5zZXJ0X2V4dHNfZ3JvdXAoKSAtCUluc2VydCBhIGV4dHNfZ3JvdXAuCisgKgorICogQGV4dF9ncm91cF9oZWFkOgkJdGhlIGhlYWQgb2YgYSBleHRzX2dyb3VwIGxpc3QuCisgKiBAZXh0c19ncm91cDoJCQl0aGUgZXh0c19ncm91cCBlbGVtZW50IHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQuCisgKi8KK3N0YXRpYyBpbnQgaW5zZXJ0X2V4dHNfZ3JvdXAoc3RydWN0IGZpZW1hcF9leHRlbnRfZ3JvdXAgKipleHRfZ3JvdXBfaGVhZCwKKwkJCQlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCAqZXh0c19ncm91cCkKK3sKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cAkqZXh0X2dyb3VwX3RtcCA9IE5VTEw7CisKKwlpZiAoZXh0c19ncm91cCA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogSW5pdGlhbGl6ZSBsaXN0ICovCisJaWYgKCpleHRfZ3JvdXBfaGVhZCA9PSBOVUxMKSB7CisJCSgqZXh0X2dyb3VwX2hlYWQpID0gZXh0c19ncm91cDsKKwkJKCpleHRfZ3JvdXBfaGVhZCktPnByZXYgPSAqZXh0X2dyb3VwX2hlYWQ7CisJCSgqZXh0X2dyb3VwX2hlYWQpLT5uZXh0ID0gKmV4dF9ncm91cF9oZWFkOworCQlyZXR1cm4gMDsKKwl9CisKKwlleHRfZ3JvdXBfdG1wID0gKCpleHRfZ3JvdXBfaGVhZCktPnByZXY7CisJaW5zZXJ0KGV4dF9ncm91cF90bXAsIGV4dHNfZ3JvdXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBqb2luX2V4dGVudHMoKSAtCQlGaW5kIGNvbnRpbnVvdXMgcmVnaW9uKGV4dHNfZ3JvdXApLgorICoKKyAqIEBleHRfbGlzdF9oZWFkOgkJdGhlIGhlYWQgb2YgdGhlIGV4dGVudCBsaXN0LgorICogQGV4dF9ncm91cF9oZWFkOgkJdGhlIGhlYWQgb2YgdGhlIHRhcmdldCBleHRzX2dyb3VwIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgam9pbl9leHRlbnRzKHN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X2hlYWQsCisJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2dyb3VwICoqZXh0X2dyb3VwX2hlYWQpCit7CisJX191NjQJbGVuID0gZXh0X2xpc3RfaGVhZC0+ZGF0YS5sZW47CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3Rfc3RhcnQgPSBleHRfbGlzdF9oZWFkOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9IGV4dF9saXN0X2hlYWQtPm5leHQ7CisKKwlkbyB7CisJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2dyb3VwCSpleHRfZ3JvdXBfdG1wID0gTlVMTDsKKworCQkvKiBUaGlzIGV4dGVudCBhbmQgcHJldmlvdXMgZXh0ZW50IGFyZSBub3QgY29udGludW91cywKKwkJICogc28sIGFsbCBwcmV2aW91cyBleHRlbnRzIGFyZSB0cmVhdGVkIGFzIGFuIGV4dGVudCBncm91cC4KKwkJICovCisJCWlmICgoZXh0X2xpc3RfdG1wLT5wcmV2LT5kYXRhLmxvZ2ljYWwgKworCQkJZXh0X2xpc3RfdG1wLT5wcmV2LT5kYXRhLmxlbikKKwkJCQkhPSBleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCkgeworCQkJZXh0X2dyb3VwX3RtcCA9CisJCQkJbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCkpOworCQkJaWYgKGV4dF9ncm91cF90bXAgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCW1lbXNldChleHRfZ3JvdXBfdG1wLCAwLAorCQkJCXNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCkpOworCQkJZXh0X2dyb3VwX3RtcC0+bGVuID0gbGVuOworCQkJZXh0X2dyb3VwX3RtcC0+c3RhcnQgPSBleHRfbGlzdF9zdGFydDsKKwkJCWV4dF9ncm91cF90bXAtPmVuZCA9IGV4dF9saXN0X3RtcC0+cHJldjsKKworCQkJaWYgKGluc2VydF9leHRzX2dyb3VwKGV4dF9ncm91cF9oZWFkLAorCQkJCWV4dF9ncm91cF90bXApIDwgMCkgeworCQkJCUZSRUUoZXh0X2dyb3VwX3RtcCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJZXh0X2xpc3Rfc3RhcnQgPSBleHRfbGlzdF90bXA7CisJCQlsZW4gPSBleHRfbGlzdF90bXAtPmRhdGEubGVuOworCQkJZXh0X2xpc3RfdG1wID0gZXh0X2xpc3RfdG1wLT5uZXh0OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUaGlzIGV4dGVudCBhbmQgcHJldmlvdXMgZXh0ZW50IGFyZSBjb250aW51b3VzLAorCQkgKiBzbywgdGhleSBiZWxvbmcgdG8gdGhlIHNhbWUgZXh0ZW50IGdyb3VwLCBhbmQgd2UgY2hlY2sKKwkJICogaWYgdGhlIG5leHQgZXh0ZW50IGJlbG9uZ3MgdG8gdGhlIHNhbWUgZXh0ZW50IGdyb3VwLgorCQkgKi8KKwkJbGVuICs9IGV4dF9saXN0X3RtcC0+ZGF0YS5sZW47CisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwl9IHdoaWxlIChleHRfbGlzdF90bXAgIT0gZXh0X2xpc3RfaGVhZC0+bmV4dCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdldF9maWxlX2V4dGVudHMoKSAtCUdldCBmaWxlJ3MgZXh0ZW50IGxpc3QuCisgKgorICogQGZkOgkJCWRlZnJhZyB0YXJnZXQgZmlsZSdzIGRlc2NyaXB0b3IuCisgKiBAZXh0X2xpc3RfaGVhZDoJdGhlIGhlYWQgb2YgdGhlIGV4dGVudCBsaXN0LgorICovCitzdGF0aWMgaW50IGdldF9maWxlX2V4dGVudHMoaW50IGZkLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICoqZXh0X2xpc3RfaGVhZCkKK3sKKwlfX3UzMglpOworCWludAlyZXQ7CisJaW50CWV4dF9idWZfc2l6ZSwgZmllX2J1Zl9zaXplOworCV9fdTY0CXBvcyA9IDA7CisJc3RydWN0IGZpZW1hcAkqZmllbWFwX2J1ZiA9IE5VTEw7CisJc3RydWN0IGZpZW1hcF9leHRlbnQJKmV4dF9idWYgPSBOVUxMOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QJKmV4dF9saXN0ID0gTlVMTDsKKworCS8qIENvbnZlcnQgdW5pdHMsIGluIGJ5dGVzLgorCSAqIEJlIGNhcmVmdWwgOiBub3csIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbiBleHRlbnQgaXMgNDhiaXQsCisJICogYW5kIHRoZSBtYXhpbXVtIGJsb2Nrc2l6ZSBmb3IgZXh0NCBpcyA0SygxMmJpdCksCisJICogc28gdGhlcmUgaXMgbm8gb3ZlcmZsb3csIGJ1dCBpbiBmdXR1cmUgaXQgbWF5IGJlIGNoYW5nZWQuCisJICovCisKKwkvKiBBbGxvYyBzcGFjZSBmb3IgZmllbWFwICovCisJZXh0X2J1Zl9zaXplID0gRVhURU5UX01BWF9DT1VOVCAqIHNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudCk7CisJZmllX2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmaWVtYXApICsgZXh0X2J1Zl9zaXplOworCisJZmllbWFwX2J1ZiA9IG1hbGxvYyhmaWVfYnVmX3NpemUpOworCWlmIChmaWVtYXBfYnVmID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWV4dF9idWYgPSBmaWVtYXBfYnVmLT5mbV9leHRlbnRzOworCW1lbXNldChmaWVtYXBfYnVmLCAwLCBmaWVfYnVmX3NpemUpOworCWZpZW1hcF9idWYtPmZtX2xlbmd0aCA9IEZJRU1BUF9NQVhfT0ZGU0VUOworCWZpZW1hcF9idWYtPmZtX2ZsYWdzIHw9IEZJRU1BUF9GTEFHX1NZTkM7CisJZmllbWFwX2J1Zi0+Zm1fZXh0ZW50X2NvdW50ID0gRVhURU5UX01BWF9DT1VOVDsKKworCWRvIHsKKwkJZmllbWFwX2J1Zi0+Zm1fc3RhcnQgPSBwb3M7CisJCW1lbXNldChleHRfYnVmLCAwLCBleHRfYnVmX3NpemUpOworCQlyZXQgPSBpb2N0bChmZCwgRlNfSU9DX0ZJRU1BUCwgZmllbWFwX2J1Zik7CisJCWlmIChyZXQgPCAwIHx8IGZpZW1hcF9idWYtPmZtX21hcHBlZF9leHRlbnRzID09IDApCisJCQlnb3RvIG91dDsKKwkJZm9yIChpID0gMDsgaSA8IGZpZW1hcF9idWYtPmZtX21hcHBlZF9leHRlbnRzOyBpKyspIHsKKwkJCWV4dF9saXN0ID0gTlVMTDsKKwkJCWV4dF9saXN0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0KSk7CisJCQlpZiAoZXh0X2xpc3QgPT0gTlVMTCkKKwkJCQlnb3RvIG91dDsKKworCQkJZXh0X2xpc3QtPmRhdGEucGh5c2ljYWwgPSBleHRfYnVmW2ldLmZlX3BoeXNpY2FsCisJCQkJCQkvIGJsb2NrX3NpemU7CisJCQlleHRfbGlzdC0+ZGF0YS5sb2dpY2FsID0gZXh0X2J1ZltpXS5mZV9sb2dpY2FsCisJCQkJCQkvIGJsb2NrX3NpemU7CisJCQlleHRfbGlzdC0+ZGF0YS5sZW4gPSBleHRfYnVmW2ldLmZlX2xlbmd0aAorCQkJCQkJLyBibG9ja19zaXplOworCisJCQlyZXQgPSBpbnNlcnRfZXh0ZW50X2J5X3BoeXNpY2FsKAorCQkJCQlleHRfbGlzdF9oZWFkLCBleHRfbGlzdCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCUZSRUUoZXh0X2xpc3QpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCS8qIFJlY29yZCBmaWxlJ3MgbG9naWNhbCBvZmZzZXQgdGhpcyB0aW1lICovCisJCXBvcyA9IGV4dF9idWZbRVhURU5UX01BWF9DT1VOVC0xXS5mZV9sb2dpY2FsICsKKwkJCWV4dF9idWZbRVhURU5UX01BWF9DT1VOVC0xXS5mZV9sZW5ndGg7CisJCS8qCisJCSAqIElmIGZtX2V4dGVudHMgYXJyYXkgaGFzIGJlZW4gZmlsbGVkIGFuZAorCQkgKiB0aGVyZSBhcmUgZXh0ZW50cyBsZWZ0LCBjb250aW51ZSB0byBjeWNsZS4KKwkJICovCisJfSB3aGlsZSAoZmllbWFwX2J1Zi0+Zm1fbWFwcGVkX2V4dGVudHMKKwkJCQkJPT0gRVhURU5UX01BWF9DT1VOVCAmJgorCQkhKGV4dF9idWZbRVhURU5UX01BWF9DT1VOVC0xXS5mZV9mbGFncworCQkJCQkmIEZJRU1BUF9FWFRFTlRfTEFTVCkpOworCisJRlJFRShmaWVtYXBfYnVmKTsKKwlyZXR1cm4gMDsKK291dDoKKwlGUkVFKGZpZW1hcF9idWYpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGdldF9sb2dpY2FsX2NvdW50KCkgLQlHZXQgdGhlIGZpbGUgbG9naWNhbCBleHRlbnRzIGNvdW50LgorICoKKyAqIEBsb2dpY2FsX2xpc3RfaGVhZDoJdGhlIGhlYWQgb2YgdGhlIGxvZ2ljYWwgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2xvZ2ljYWxfY291bnQoc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqbG9naWNhbF9saXN0X2hlYWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfdG1wICA9IGxvZ2ljYWxfbGlzdF9oZWFkOworCisJZG8geworCQlyZXQrKzsKKwkJZXh0X2xpc3RfdG1wID0gZXh0X2xpc3RfdG1wLT5uZXh0OworCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSBsb2dpY2FsX2xpc3RfaGVhZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ2V0X3BoeXNpY2FsX2NvdW50KCkgLQlHZXQgdGhlIGZpbGUgcGh5c2ljYWwgZXh0ZW50cyBjb3VudC4KKyAqCisgKiBAcGh5c2ljYWxfbGlzdF9oZWFkOgl0aGUgaGVhZCBvZiB0aGUgcGh5c2ljYWwgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3BoeXNpY2FsX2NvdW50KHN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKnBoeXNpY2FsX2xpc3RfaGVhZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF90bXAgPSBwaHlzaWNhbF9saXN0X2hlYWQ7CisKKwlkbyB7CisJCWlmICgoZXh0X2xpc3RfdG1wLT5kYXRhLnBoeXNpY2FsICsgZXh0X2xpc3RfdG1wLT5kYXRhLmxlbikKKwkJCQkhPSBleHRfbGlzdF90bXAtPm5leHQtPmRhdGEucGh5c2ljYWwpIHsKKwkJCS8qIFRoaXMgZXh0ZW50IGFuZCBuZXh0IGV4dGVudCBhcmUgbm90IGNvbnRpbnVvdXMuICovCisJCQlyZXQrKzsKKwkJfQorCisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwl9IHdoaWxlIChleHRfbGlzdF90bXAgIT0gcGh5c2ljYWxfbGlzdF9oZWFkKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBjaGFuZ2VfcGh5c2ljYWxfdG9fbG9naWNhbCgpIC0JQ2hhbmdlIGxpc3QgZnJvbSBwaHlzaWNhbCB0byBsb2dpY2FsLgorICoKKyAqIEBwaHlzaWNhbF9saXN0X2hlYWQ6CXRoZSBoZWFkIG9mIHBoeXNpY2FsIGV4dGVudCBsaXN0LgorICogQGxvZ2ljYWxfbGlzdF9oZWFkOgl0aGUgaGVhZCBvZiBsb2dpY2FsIGV4dGVudCBsaXN0LgorICovCitzdGF0aWMgaW50IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKAorCQkJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqKnBoeXNpY2FsX2xpc3RfaGVhZCwKKwkJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKipsb2dpY2FsX2xpc3RfaGVhZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9ICpwaHlzaWNhbF9saXN0X2hlYWQ7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfbmV4dCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKworCXdoaWxlICgxKSB7CisJCWlmIChleHRfbGlzdF90bXAgPT0gZXh0X2xpc3RfbmV4dCkgeworCQkJcmV0ID0gaW5zZXJ0X2V4dGVudF9ieV9sb2dpY2FsKAorCQkJCWxvZ2ljYWxfbGlzdF9oZWFkLCBleHRfbGlzdF90bXApOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCisJCQkqcGh5c2ljYWxfbGlzdF9oZWFkID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJZXh0X2xpc3RfdG1wLT5wcmV2LT5uZXh0ID0gZXh0X2xpc3RfdG1wLT5uZXh0OworCQlleHRfbGlzdF90bXAtPm5leHQtPnByZXYgPSBleHRfbGlzdF90bXAtPnByZXY7CisJCSpwaHlzaWNhbF9saXN0X2hlYWQgPSBleHRfbGlzdF9uZXh0OworCisJCXJldCA9IGluc2VydF9leHRlbnRfYnlfbG9naWNhbCgKKwkJCWxvZ2ljYWxfbGlzdF9oZWFkLCBleHRfbGlzdF90bXApOworCQlpZiAocmV0IDwgMCkgeworCQkJRlJFRShleHRfbGlzdF90bXApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X25leHQ7CisJCWV4dF9saXN0X25leHQgPSBleHRfbGlzdF9uZXh0LT5uZXh0OworCX0KKworCXJldHVybiAwOworfQorCisvKiBnZXRfZmlsZV9ibG9ja3MoKSAtICBHZXQgdG90YWwgZmlsZSBibG9ja3MuCisgKgorICogQGV4dF9saXN0X2hlYWQ6CXRoZSBleHRlbnQgbGlzdCBoZWFkIG9mIHRoZSB0YXJnZXQgZmlsZQorICovCitzdGF0aWMgZXh0NF9mc2Jsa190IGdldF9maWxlX2Jsb2NrcyhzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF9oZWFkKQoreworCWV4dDRfZnNibGtfdCBibGtfY291bnQgPSAwOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9IGV4dF9saXN0X2hlYWQ7CisKKwlkbyB7CisJCWJsa19jb3VudCArPSBleHRfbGlzdF90bXAtPmRhdGEubGVuOworCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF90bXAtPm5leHQ7CisJfSB3aGlsZSAoZXh0X2xpc3RfdG1wICE9IGV4dF9saXN0X2hlYWQpOworCisJcmV0dXJuIGJsa19jb3VudDsKK30KKworLyoKKyAqIGZyZWVfZXh0KCkgLQkJRnJlZSB0aGUgZXh0ZW50IGxpc3QuCisgKgorICogQGV4dF9saXN0X2hlYWQ6CXRoZSBleHRlbnQgbGlzdCBoZWFkIG9mIHdoaWNoIHdpbGwgYmUgZnJlZS4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9leHQoc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqZXh0X2xpc3RfaGVhZCkKK3sKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0CSpleHRfbGlzdF90bXAgPSBOVUxMOworCisJaWYgKGV4dF9saXN0X2hlYWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd2hpbGUgKGV4dF9saXN0X2hlYWQtPm5leHQgIT0gZXh0X2xpc3RfaGVhZCkgeworCQlleHRfbGlzdF90bXAgPSBleHRfbGlzdF9oZWFkOworCQlleHRfbGlzdF9oZWFkLT5wcmV2LT5uZXh0ID0gZXh0X2xpc3RfaGVhZC0+bmV4dDsKKwkJZXh0X2xpc3RfaGVhZC0+bmV4dC0+cHJldiA9IGV4dF9saXN0X2hlYWQtPnByZXY7CisJCWV4dF9saXN0X2hlYWQgPSBleHRfbGlzdF9oZWFkLT5uZXh0OworCQlmcmVlKGV4dF9saXN0X3RtcCk7CisJfQorCWZyZWUoZXh0X2xpc3RfaGVhZCk7Cit9CisKKy8qCisgKiBmcmVlX2V4dHNfZ3JvdXAoKSAtCQlGcmVlIHRoZSBleHRzX2dyb3VwLgorICoKKyAqIEAqZXh0X2dyb3VwX2hlYWQ6CXRoZSBleHRzX2dyb3VwIGxpc3QgaGVhZCB3aGljaCB3aWxsIGJlIGZyZWUuCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfZXh0c19ncm91cChzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cCAqZXh0X2dyb3VwX2hlYWQpCit7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfZ3JvdXAJKmV4dF9ncm91cF90bXAgPSBOVUxMOworCisJaWYgKGV4dF9ncm91cF9oZWFkID09IE5VTEwpCisJCXJldHVybjsKKworCXdoaWxlIChleHRfZ3JvdXBfaGVhZC0+bmV4dCAhPSBleHRfZ3JvdXBfaGVhZCkgeworCQlleHRfZ3JvdXBfdG1wID0gZXh0X2dyb3VwX2hlYWQ7CisJCWV4dF9ncm91cF9oZWFkLT5wcmV2LT5uZXh0ID0gZXh0X2dyb3VwX2hlYWQtPm5leHQ7CisJCWV4dF9ncm91cF9oZWFkLT5uZXh0LT5wcmV2ID0gZXh0X2dyb3VwX2hlYWQtPnByZXY7CisJCWV4dF9ncm91cF9oZWFkID0gZXh0X2dyb3VwX2hlYWQtPm5leHQ7CisJCWZyZWUoZXh0X2dyb3VwX3RtcCk7CisJfQorCWZyZWUoZXh0X2dyb3VwX2hlYWQpOworfQorCisvKgorICogZ2V0X2Jlc3RfY291bnQoKSAtCUdldCB0aGUgZmlsZSBiZXN0IGV4dGVudHMgY291bnQuCisgKgorICogQGJsb2NrX2NvdW50OgkJdGhlIGZpbGUncyBwaHlzaWNhbCBibG9jayBjb3VudC4KKyAqLworc3RhdGljIGludCBnZXRfYmVzdF9jb3VudChleHQ0X2ZzYmxrX3QgYmxvY2tfY291bnQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgZmxleF9iZ19udW07CisKKwkvKiBDYWxjdWF0ZSBiZXN0IGV4dGVudHMgY291bnQgKi8KKwlpZiAoZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSB7CisJCWZsZXhfYmdfbnVtID0gMSA8PCBsb2dfZ3JvdXBzX3Blcl9mbGV4OworCQlyZXQgPSAoKGJsb2NrX2NvdW50IC0gMSkgLworCQkJKChleHQ0X2ZzYmxrX3QpYmxvY2tzX3Blcl9ncm91cCAqCisJCQkJZmxleF9iZ19udW0pKSArIDE7CisJfSBlbHNlCisJCXJldCA9ICgoYmxvY2tfY291bnQgLSAxKSAvIGJsb2Nrc19wZXJfZ3JvdXApICsgMTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIGZpbGVfc3RhdGlzdGljKCkgLQlHZXQgc3RhdGlzdGljIGluZm8gb2YgdGhlIGZpbGUncyBmcmFnbWVudHMuCisgKgorICogQGZpbGU6CQl0aGUgZmlsZSdzIG5hbWUuCisgKiBAYnVmOgkJdGhlIHBvaW50ZXIgb2YgdGhlIHN0cnVjdCBzdGF0NjQuCisgKiBAZmxhZzoJCWZpbGUgdHlwZS4KKyAqIEBmdHdidWY6CQl0aGUgcG9pbnRlciBvZiBhIHN0cnVjdCBGVFcuCisgKi8KK3N0YXRpYyBpbnQgZmlsZV9zdGF0aXN0aWMoY29uc3QgY2hhciAqZmlsZSwgY29uc3Qgc3RydWN0IHN0YXQ2NCAqYnVmLAorCQkJaW50IGZsYWcgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJc3RydWN0IEZUVyAqZnR3YnVmIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKwlpbnQJZmQ7CisJaW50CXJldDsKKwlpbnQJbm93X2V4dF9jb3VudCwgYmVzdF9leHRfY291bnQgPSAwLCBwaHlzaWNhbF9leHRfY291bnQ7CisJaW50CWksIGo7CisJX191NjQJc2l6ZV9wZXJfZXh0ID0gMDsKKwlmbG9hdAlyYXRpbyA9IDAuMDsKKwlleHQ0X2ZzYmxrX3QJYmxrX2NvdW50ID0gMDsKKwljaGFyCW1zZ19idWZmZXJbUEFUSF9NQVggKyAyNF07CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdCAqcGh5c2ljYWxfbGlzdF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpsb2dpY2FsX2xpc3RfaGVhZCA9IE5VTEw7CisKKwlkZWZyYWdlZF9maWxlX2NvdW50Kys7CisKKwlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCWlmICh0b3RhbF9jb3VudCA9PSAxICYmIHJlZ3VsYXJfY291bnQgPT0gMSkKKwkJCXByaW50ZigiPEZpbGU+XG4iKTsKKwkJZWxzZSB7CisJCQlwcmludGYoIlsldS8ldV0iLCBkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCk7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfQorCX0KKwlpZiAobG9zdF9mb3VuZF9kaXJbMF0gIT0gJ1wwJyAmJgorCSAgICAhbWVtY21wKGZpbGUsIGxvc3RfZm91bmRfZGlyLCBzdHJubGVuKGxvc3RfZm91bmRfZGlyLCBQQVRIX01BWCkpKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHKE5HTVNHX0xPU1RfRk9VTkQpOworCQl9CisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIVNfSVNSRUcoYnVmLT5zdF9tb2RlKSkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TRyhOR01TR19GSUxFX1VOUkVHKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBY2Nlc3MgYXV0aG9yaXR5ICovCisJaWYgKGN1cnJlbnRfdWlkICE9IFJPT1RfVUlEICYmCisJCWJ1Zi0+c3RfdWlkICE9IGN1cnJlbnRfdWlkKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHKAorCQkJCSJGaWxlIGlzIG5vdCBjdXJyZW50IHVzZXIncyBmaWxlIgorCQkJCSIgb3IgY3VycmVudCB1c2VyIGlzIG5vdCByb290Iik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW1wdHkgZmlsZSAqLworCWlmIChidWYtPnN0X3NpemUgPT0gMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TRygiRmlsZSBzaXplIGlzIDAiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYXMgbm8gYmxvY2tzICovCisJaWYgKGJ1Zi0+c3RfYmxvY2tzID09IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0coIkZpbGUgaGFzIG5vIGJsb2NrcyIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWZkID0gb3BlbjY0KGZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVNUQVRJU1RJQ19FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9PUEVOKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgZmlsZSdzIHBoeXNpY2FsIGV4dGVudHMgICovCisJcmV0ID0gZ2V0X2ZpbGVfZXh0ZW50cyhmZCwgJnBoeXNpY2FsX2xpc3RfaGVhZCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0dfV0lUSF9FUlJOTyhOR01TR19GSUxFX0VYVEVOVCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoZSBjb3VudCBvZiBmaWxlJ3MgY29udGludW91cyBwaHlzaWNhbCByZWdpb24gKi8KKwlwaHlzaWNhbF9leHRfY291bnQgPSBnZXRfcGh5c2ljYWxfY291bnQocGh5c2ljYWxfbGlzdF9oZWFkKTsKKworCS8qIENoYW5nZSBsaXN0IGZyb20gcGh5c2ljYWwgdG8gbG9naWNhbCAqLworCXJldCA9IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKCZwaHlzaWNhbF9saXN0X2hlYWQsCisJCQkJCQkJJmxvZ2ljYWxfbGlzdF9oZWFkKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlTVEFUSVNUSUNfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfRVhURU5UKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDb3VudCBmaWxlIGZyYWdtZW50cyBiZWZvcmUgZGVmcmFnICovCisJbm93X2V4dF9jb3VudCA9IGdldF9sb2dpY2FsX2NvdW50KGxvZ2ljYWxfbGlzdF9oZWFkKTsKKworCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkgeworCQkvKiBDYWxjdWxhdGUgdGhlIHNpemUgcGVyIGV4dGVudCAqLworCQlibGtfY291bnQgPSBnZXRfZmlsZV9ibG9ja3MobG9naWNhbF9saXN0X2hlYWQpOworCisJCWJlc3RfZXh0X2NvdW50ID0gZ2V0X2Jlc3RfY291bnQoYmxrX2NvdW50KTsKKworCQkvKiBlNGRlZnJhZyByb3VuZHMgc2l6ZV9wZXJfZXh0IHVwIHRvIGEgYmxvY2sgc2l6ZSBib3VuZGFyeSAqLworCQlzaXplX3Blcl9leHQgPSBibGtfY291bnQgKiAoYnVmLT5zdF9ibGtzaXplIC8gMTAyNCkgLworCQkJCQkJCW5vd19leHRfY291bnQ7CisKKwkJcmF0aW8gPSAoZmxvYXQpKHBoeXNpY2FsX2V4dF9jb3VudCAtIGJlc3RfZXh0X2NvdW50KSAqIDEwMCAvCisJCQkJCQkJYmxrX2NvdW50OworCisJCWV4dGVudHNfYmVmb3JlX2RlZnJhZyArPSBub3dfZXh0X2NvdW50OworCQlleHRlbnRzX2FmdGVyX2RlZnJhZyArPSBiZXN0X2V4dF9jb3VudDsKKwkJZmlsZXNfYmxvY2tfY291bnQgKz0gYmxrX2NvdW50OworCX0KKworCWlmICh0b3RhbF9jb3VudCA9PSAxICYmIHJlZ3VsYXJfY291bnQgPT0gMSkgeworCQkvKiBGaWxlIG9ubHkgKi8KKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJaW50IGNvdW50ID0gMDsKKwkJCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QgKmV4dF9saXN0X3RtcCA9CisJCQkJCQlsb2dpY2FsX2xpc3RfaGVhZDsKKworCQkJLyogUHJpbnQgZXh0ZW50cyBpbmZvICovCisJCQlkbyB7CisJCQkJY291bnQrKzsKKwkJCQlwcmludGYoIltleHQgJWRdOlx0c3RhcnQgJWxsdTpcdGxvZ2ljYWwgIgorCQkJCQkJIiVsbHU6XHRsZW4gJWxsdVxuIiwgY291bnQsCisJCQkJCQlleHRfbGlzdF90bXAtPmRhdGEucGh5c2ljYWwsCisJCQkJCQlleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbCwKKwkJCQkJCWV4dF9saXN0X3RtcC0+ZGF0YS5sZW4pOworCQkJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwkJCX0gd2hpbGUgKGV4dF9saXN0X3RtcCAhPSBsb2dpY2FsX2xpc3RfaGVhZCk7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiJS00MHMlMTBzLyUtMTBzJTlzXG4iLAorCQkJCQkiPEZpbGU+IiwgIm5vdyIsICJiZXN0IiwgInNpemUvZXh0Iik7CisJCQlpZiAoY3VycmVudF91aWQgPT0gUk9PVF9VSUQpIHsKKwkJCQlpZiAoc3RybGVuKGZpbGUpID4gNDApCisJCQkJCXByaW50ZigiJXNcbiU1MGQvJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCWZpbGUsIG5vd19leHRfY291bnQsCisJCQkJCQliZXN0X2V4dF9jb3VudCwgc2l6ZV9wZXJfZXh0KTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJS00MHMlMTBkLyUtMTBkJTZsbHUgS0JcbiIsCisJCQkJCQlmaWxlLCBub3dfZXh0X2NvdW50LAorCQkJCQkJYmVzdF9leHRfY291bnQsIHNpemVfcGVyX2V4dCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJsZW4oZmlsZSkgPiA0MCkKKwkJCQkJcHJpbnRmKCIlc1xuJTUwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCQlmaWxlLCBub3dfZXh0X2NvdW50LAorCQkJCQkJCSItIiwgIi0iKTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiJS00MHMlMTBkLyUtMTBzJTdzXG4iLAorCQkJCQkJCWZpbGUsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQkJfQorCQl9CisJCXN1Y2NlZWRfY250Kys7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJLyogUHJpbnQgc3RhdGlzdGljIGluZm8gKi8KKwkJc3ByaW50Zihtc2dfYnVmZmVyLCAiWyV1LyV1XSVzIiwKKwkJCQlkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCwgZmlsZSk7CisJCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkgeworCQkJaWYgKHN0cmxlbihtc2dfYnVmZmVyKSA+IDQwKQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyVzXG4iCisJCQkJCQkiJTUwZC8lLTEwZCU2bGx1IEtCXG4iLAorCQkJCQkJbXNnX2J1ZmZlciwgbm93X2V4dF9jb3VudCwKKwkJCQkJCWJlc3RfZXh0X2NvdW50LCBzaXplX3Blcl9leHQpOworCQkJZWxzZQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyUtNDBzIgorCQkJCQkJIiUxMGQvJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQliZXN0X2V4dF9jb3VudCwgc2l6ZV9wZXJfZXh0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJsZW4obXNnX2J1ZmZlcikgPiA0MCkKKwkJCQlwcmludGYoIlwwMzNbNzk7MEhcMDMzW0slc1xuJTUwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQkJZWxzZQorCQkJCXByaW50ZigiXDAzM1s3OTswSFwwMzNbSyUtNDBzJTEwZC8lLTEwcyU3c1xuIiwKKwkJCQkJCW1zZ19idWZmZXIsIG5vd19leHRfY291bnQsCisJCQkJCQkJIi0iLCAiLSIpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNIT1dfRlJBR19GSUxFUzsgaSsrKSB7CisJCWlmIChyYXRpbyA+PSBmcmFnX3JhbmtbaV0ucmF0aW8pIHsKKwkJCWZvciAoaiA9IFNIT1dfRlJBR19GSUxFUyAtIDE7IGogPiBpOyBqLS0pIHsKKwkJCQltZW1zZXQoJmZyYWdfcmFua1tqXSwgMCwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBmcmFnX3N0YXRpc3RpY19pbm8pKTsKKwkJCQlzdHJuY3B5KGZyYWdfcmFua1tqXS5tc2dfYnVmZmVyLAorCQkJCQlmcmFnX3JhbmtbaiAtIDFdLm1zZ19idWZmZXIsCisJCQkJCXN0cm5sZW4oZnJhZ19yYW5rW2ogLSAxXS5tc2dfYnVmZmVyLAorCQkJCQlQQVRIX01BWCkpOworCQkJCWZyYWdfcmFua1tqXS5ub3dfY291bnQgPQorCQkJCQlmcmFnX3JhbmtbaiAtIDFdLm5vd19jb3VudDsKKwkJCQlmcmFnX3Jhbmtbal0uYmVzdF9jb3VudCA9CisJCQkJCWZyYWdfcmFua1tqIC0gMV0uYmVzdF9jb3VudDsKKwkJCQlmcmFnX3Jhbmtbal0uc2l6ZV9wZXJfZXh0ID0KKwkJCQkJZnJhZ19yYW5rW2ogLSAxXS5zaXplX3Blcl9leHQ7CisJCQkJZnJhZ19yYW5rW2pdLnJhdGlvID0KKwkJCQkJZnJhZ19yYW5rW2ogLSAxXS5yYXRpbzsKKwkJCX0KKwkJCW1lbXNldCgmZnJhZ19yYW5rW2ldLCAwLAorCQkJCQlzaXplb2Yoc3RydWN0IGZyYWdfc3RhdGlzdGljX2lubykpOworCQkJc3RybmNweShmcmFnX3JhbmtbaV0ubXNnX2J1ZmZlciwgZmlsZSwKKwkJCQkJCXN0cm5sZW4oZmlsZSwgUEFUSF9NQVgpKTsKKwkJCWZyYWdfcmFua1tpXS5ub3dfY291bnQgPSBub3dfZXh0X2NvdW50OworCQkJZnJhZ19yYW5rW2ldLmJlc3RfY291bnQgPSBiZXN0X2V4dF9jb3VudDsKKwkJCWZyYWdfcmFua1tpXS5zaXplX3Blcl9leHQgPSBzaXplX3Blcl9leHQ7CisJCQlmcmFnX3JhbmtbaV0ucmF0aW8gPSByYXRpbzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3VjY2VlZF9jbnQrKzsKKworb3V0OgorCWNsb3NlKGZkKTsKKwlmcmVlX2V4dChwaHlzaWNhbF9saXN0X2hlYWQpOworCWZyZWVfZXh0KGxvZ2ljYWxfbGlzdF9oZWFkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHByaW50X3Byb2dyZXNzIC0JUHJpbnQgZGVmcmFnIHByb2dyZXNzCisgKgorICogQGZpbGU6CQlmaWxlIG5hbWUuCisgKiBAc3RhcnQ6CQlsb2dpY2FsIG9mZnNldCBmb3IgZGVmcmFnIHRhcmdldCBmaWxlCisgKiBAZmlsZV9zaXplOgkJZGVmcmFnIHRhcmdldCBmaWxlc2l6ZQorICovCitzdGF0aWMgdm9pZCBwcmludF9wcm9ncmVzcyhjb25zdCBjaGFyICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBmaWxlX3NpemUpCit7CisJaW50IHBlcmNlbnQgPSAoc3RhcnQgKiAxMDApIC8gZmlsZV9zaXplOworCXByaW50ZigiXDAzM1s3OTswSFwwMzNbS1sldS8ldV0lczpcdCUzZCUlIiwKKwkJZGVmcmFnZWRfZmlsZV9jb3VudCwgdG90YWxfY291bnQsIGZpbGUsIG1pbihwZXJjZW50LCAxMDApKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIGNhbGxfZGVmcmFnKCkgLQlFeGVjdXRlIHRoZSBkZWZyYWcgcHJvZ3JhbS4KKyAqCisgKiBAZmQ6CQkJdGFyZ2V0IGZpbGUgZGVzY3JpcHRvci4KKyAqIEBkb25vcl9mZDoJCWRvbm9yIGZpbGUgZGVzY3JpcHRvci4KKyAqIEBmaWxlOgkJCXRhcmdldCBmaWxlIG5hbWUuCisgKiBAYnVmOgkJCXBvaW50ZXIgb2YgdGhlIHN0cnVjdCBzdGF0NjQuCisgKiBAZXh0X2xpc3RfaGVhZDoJaGVhZCBvZiB0aGUgZXh0ZW50IGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgY2FsbF9kZWZyYWcoaW50IGZkLCBpbnQgZG9ub3JfZmQsIGNvbnN0IGNoYXIgKmZpbGUsCisJY29uc3Qgc3RydWN0IHN0YXQ2NCAqYnVmLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0ICpleHRfbGlzdF9oZWFkKQoreworCWxvZmZfdAlzdGFydCA9IDA7CisJdW5zaWduZWQgaW50CXBhZ2VfbnVtOworCXVuc2lnbmVkIGNoYXIJKnZlYyA9IE5VTEw7CisJaW50CWRlZnJhZ2VkX3JldCA9IDA7CisJaW50CXJldDsKKwlzdHJ1Y3QgbW92ZV9leHRlbnQJbW92ZV9kYXRhOworCXN0cnVjdCBmaWVtYXBfZXh0ZW50X2xpc3QJKmV4dF9saXN0X3RtcCA9IE5VTEw7CisKKwltZW1zZXQoJm1vdmVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtb3ZlX2V4dGVudCkpOworCW1vdmVfZGF0YS5kb25vcl9mZCA9IGRvbm9yX2ZkOworCisJLyogUHJpbnQgZGVmcmFnIHByb2dyZXNzICovCisJcHJpbnRfcHJvZ3Jlc3MoZmlsZSwgc3RhcnQsIGJ1Zi0+c3Rfc2l6ZSk7CisKKwlleHRfbGlzdF90bXAgPSBleHRfbGlzdF9oZWFkOworCWRvIHsKKwkJbW92ZV9kYXRhLm9yaWdfc3RhcnQgPSBleHRfbGlzdF90bXAtPmRhdGEubG9naWNhbDsKKwkJLyogTG9naWNhbCBvZmZzZXQgb2Ygb3JpZyBhbmQgZG9ub3Igc2hvdWxkIGJlIHNhbWUgKi8KKwkJbW92ZV9kYXRhLmRvbm9yX3N0YXJ0ID0gbW92ZV9kYXRhLm9yaWdfc3RhcnQ7CisJCW1vdmVfZGF0YS5sZW4gPSBleHRfbGlzdF90bXAtPmRhdGEubGVuOworCQltb3ZlX2RhdGEubW92ZWRfbGVuID0gMDsKKworCQlyZXQgPSBwYWdlX2luX2NvcmUoZmQsIG1vdmVfZGF0YSwgJnZlYywgJnBhZ2VfbnVtKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCQlwcmludGYoIlxuIik7CisJCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKAorCQkJCQkJIkZhaWxlZCB0byBnZXQgZmlsZSBtYXAiKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJcdFsgTkcgXVxuIik7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBFWFQ0X0lPQ19NT1ZFX0VYVCAqLworCQlkZWZyYWdlZF9yZXQgPQorCQkJaW9jdGwoZmQsIEVYVDRfSU9DX01PVkVfRVhULCAmbW92ZV9kYXRhKTsKKworCQkvKiBGcmVlIHBhZ2VzICovCisJCXJldCA9IGRlZnJhZ19mYWR2aXNlKGZkLCBtb3ZlX2RhdGEsIHZlYywgcGFnZV9udW0pOworCQlpZiAodmVjKSB7CisJCQlmcmVlKHZlYyk7CisJCQl2ZWMgPSBOVUxMOworCQl9CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQkJcHJpbnRmKCJcbiIpOworCQkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTygKKwkJCQkJIkZhaWxlZCB0byBmcmVlIHBhZ2UiKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJcdFsgTkcgXVxuIik7CisJCQl9CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoZGVmcmFnZWRfcmV0IDwgMCkgeworCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJCXByaW50ZigiXG4iKTsKKwkJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oCisJCQkJCSJGYWlsZWQgdG8gZGVmcmFnIHdpdGggIgorCQkJCQkiRVhUNF9JT0NfTU9WRV9FWFQgaW9jdGwiKTsKKwkJCQlpZiAoZXJybm8gPT0gRU5PVFRZKQorCQkJCQlwcmludGYoIlx0QXQgbGVhc3QgMi42LjMxLXJjMSBvZiAiCisJCQkJCQkidmFuaWxsYSBrZXJuZWwgaXMgcmVxdWlyZWRcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoIlx0WyBORyBdXG4iKTsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBBZGp1c3QgbG9naWNhbCBvZmZzZXQgZm9yIG5leHQgaW9jdGwgKi8KKwkJbW92ZV9kYXRhLm9yaWdfc3RhcnQgKz0gbW92ZV9kYXRhLm1vdmVkX2xlbjsKKwkJbW92ZV9kYXRhLmRvbm9yX3N0YXJ0ID0gbW92ZV9kYXRhLm9yaWdfc3RhcnQ7CisKKwkJc3RhcnQgPSBtb3ZlX2RhdGEub3JpZ19zdGFydCAqIGJ1Zi0+c3RfYmxrc2l6ZTsKKworCQkvKiBQcmludCBkZWZyYWcgcHJvZ3Jlc3MgKi8KKwkJcHJpbnRfcHJvZ3Jlc3MoZmlsZSwgc3RhcnQsIGJ1Zi0+c3Rfc2l6ZSk7CisKKwkJLyogRW5kIG9mIGZpbGUgKi8KKwkJaWYgKHN0YXJ0ID49IGJ1Zi0+c3Rfc2l6ZSkKKwkJCWJyZWFrOworCisJCWV4dF9saXN0X3RtcCA9IGV4dF9saXN0X3RtcC0+bmV4dDsKKwl9IHdoaWxlIChleHRfbGlzdF90bXAgIT0gZXh0X2xpc3RfaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGZpbGVfZGVmcmFnKCkgLQkJQ2hlY2sgZmlsZSBhdHRyaWJ1dGVzIGFuZCBjYWxsIGlvY3RsIHRvIGRlZnJhZy4KKyAqCisgKiBAZmlsZToJCXRoZSBmaWxlJ3MgbmFtZS4KKyAqIEBidWY6CQl0aGUgcG9pbnRlciBvZiB0aGUgc3RydWN0IHN0YXQ2NC4KKyAqIEBmbGFnOgkJZmlsZSB0eXBlLgorICogQGZ0d2J1ZjoJCXRoZSBwb2ludGVyIG9mIGEgc3RydWN0IEZUVy4KKyAqLworc3RhdGljIGludCBmaWxlX2RlZnJhZyhjb25zdCBjaGFyICpmaWxlLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0ICpidWYsCisJCQlpbnQgZmxhZyBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQlzdHJ1Y3QgRlRXICpmdHdidWYgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWludAlmZDsKKwlpbnQJZG9ub3JfZmQgPSAtMTsKKwlpbnQJcmV0OworCWludAliZXN0OworCWludAlmaWxlX2ZyYWdzX3N0YXJ0LCBmaWxlX2ZyYWdzX2VuZDsKKwlpbnQJb3JpZ19waHlzaWNhbF9jbnQsIGRvbm9yX3BoeXNpY2FsX2NudCA9IDA7CisJY2hhcgl0bXBfaW5vZGVfbmFtZVtQQVRIX01BWCArIDhdOworCWV4dDRfZnNibGtfdAkJCWJsa19jb3VudCA9IDA7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqb3JpZ19saXN0X3BoeXNpY2FsID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9saXN0CSpvcmlnX2xpc3RfbG9naWNhbCA9IE5VTEw7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqZG9ub3JfbGlzdF9waHlzaWNhbCA9IE5VTEw7CisJc3RydWN0IGZpZW1hcF9leHRlbnRfbGlzdAkqZG9ub3JfbGlzdF9sb2dpY2FsID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cAkqb3JpZ19ncm91cF9oZWFkID0gTlVMTDsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudF9ncm91cAkqb3JpZ19ncm91cF90bXAgPSBOVUxMOworCisJZGVmcmFnZWRfZmlsZV9jb3VudCsrOworCisJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQlwcmludGYoIlsldS8ldV0iLCBkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKworCWlmIChsb3N0X2ZvdW5kX2RpclswXSAhPSAnXDAnICYmCisJICAgICFtZW1jbXAoZmlsZSwgbG9zdF9mb3VuZF9kaXIsIHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsIFBBVEhfTUFYKSkpIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJSU5fRlRXX1BSSU5UX0VSUl9NU0coTkdNU0dfTE9TVF9GT1VORCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFTX0lTUkVHKGJ1Zi0+c3RfbW9kZSkpIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJSU5fRlRXX1BSSU5UX0VSUl9NU0coTkdNU0dfRklMRV9VTlJFRyk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW1wdHkgZmlsZSAqLworCWlmIChidWYtPnN0X3NpemUgPT0gMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlJTl9GVFdfUFJJTlRfRVJSX01TRygiRmlsZSBzaXplIGlzIDAiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYXMgbm8gYmxvY2tzICovCisJaWYgKGJ1Zi0+c3RfYmxvY2tzID09IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJU1RBVElTVElDX0VSUl9NU0coIkZpbGUgaGFzIG5vIGJsb2NrcyIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWZkID0gb3BlbjY0KGZpbGUsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9PUEVOKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBHZXQgZmlsZSdzIGV4dGVudHMgKi8KKwlyZXQgPSBnZXRfZmlsZV9leHRlbnRzKGZkLCAmb3JpZ19saXN0X3BoeXNpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCB0aGUgY291bnQgb2YgZmlsZSdzIGNvbnRpbnVvdXMgcGh5c2ljYWwgcmVnaW9uICovCisJb3JpZ19waHlzaWNhbF9jbnQgPSBnZXRfcGh5c2ljYWxfY291bnQob3JpZ19saXN0X3BoeXNpY2FsKTsKKworCS8qIENoYW5nZSBsaXN0IGZyb20gcGh5c2ljYWwgdG8gbG9naWNhbCAqLworCXJldCA9IGNoYW5nZV9waHlzaWNhbF90b19sb2dpY2FsKCZvcmlnX2xpc3RfcGh5c2ljYWwsCisJCQkJCQkJJm9yaWdfbGlzdF9sb2dpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIENvdW50IGZpbGUgZnJhZ21lbnRzIGJlZm9yZSBkZWZyYWcgKi8KKwlmaWxlX2ZyYWdzX3N0YXJ0ID0gZ2V0X2xvZ2ljYWxfY291bnQob3JpZ19saXN0X2xvZ2ljYWwpOworCisJYmxrX2NvdW50ID0gZ2V0X2ZpbGVfYmxvY2tzKG9yaWdfbGlzdF9sb2dpY2FsKTsKKwlpZiAoZmlsZV9jaGVjayhmZCwgYnVmLCBmaWxlLCBmaWxlX2ZyYWdzX3N0YXJ0LCBibGtfY291bnQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZnN5bmMoZmQpIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byBzeW5jKGZzeW5jKSIpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjdXJyZW50X3VpZCA9PSBST09UX1VJRCkKKwkJYmVzdCA9IGdldF9iZXN0X2NvdW50KGJsa19jb3VudCk7CisJZWxzZQorCQliZXN0ID0gMTsKKworCWlmIChmaWxlX2ZyYWdzX3N0YXJ0IDw9IGJlc3QpCisJCWdvdG8gY2hlY2tfaW1wcm92ZW1lbnQ7CisKKwkvKiBDb21iaW5lIGV4dGVudHMgdG8gZ3JvdXAgKi8KKwlyZXQgPSBqb2luX2V4dGVudHMob3JpZ19saXN0X2xvZ2ljYWwsICZvcmlnX2dyb3VwX2hlYWQpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTyhOR01TR19GSUxFX0VYVEVOVCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogQ3JlYXRlIGRvbm9yIGlub2RlICovCisJbWVtc2V0KHRtcF9pbm9kZV9uYW1lLCAwLCBQQVRIX01BWCArIDgpOworCXNwcmludGYodG1wX2lub2RlX25hbWUsICIlLipzLmRlZnJhZyIsCisJCQkJKGludClzdHJubGVuKGZpbGUsIFBBVEhfTUFYKSwgZmlsZSk7CisJZG9ub3JfZmQgPSBvcGVuNjQodG1wX2lub2RlX25hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgU19JUlVTUik7CisJaWYgKGRvbm9yX2ZkIDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlpZiAoZXJybm8gPT0gRUVYSVNUKQorCQkJCVBSSU5UX0VSUl9NU0dfV0lUSF9FUlJOTygKKwkJCQkiRmlsZSBpcyBiZWluZyBkZWZyYWdlZCBieSBvdGhlciBwcm9ncmFtIik7CisJCQllbHNlCisJCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfT1BFTik7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogVW5saW5rIGRvbm9yIGlub2RlICovCisJcmV0ID0gdW5saW5rKHRtcF9pbm9kZV9uYW1lKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byB1bmxpbmsiKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZG9ub3IgaW5vZGUgKi8KKwlvcmlnX2dyb3VwX3RtcCA9IG9yaWdfZ3JvdXBfaGVhZDsKKwlkbyB7CisJCXJldCA9IGZhbGxvY2F0ZTY0KGRvbm9yX2ZkLCAwLAorCQkgIChsb2ZmX3Qpb3JpZ19ncm91cF90bXAtPnN0YXJ0LT5kYXRhLmxvZ2ljYWwgKiBibG9ja19zaXplLAorCQkgIChsb2ZmX3Qpb3JpZ19ncm91cF90bXAtPmxlbiAqIGJsb2NrX3NpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJCVBSSU5UX0ZJTEVfTkFNRShmaWxlKTsKKwkJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oIkZhaWxlZCB0byBmYWxsb2NhdGUiKTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb3JpZ19ncm91cF90bXAgPSBvcmlnX2dyb3VwX3RtcC0+bmV4dDsKKwl9IHdoaWxlIChvcmlnX2dyb3VwX3RtcCAhPSBvcmlnX2dyb3VwX2hlYWQpOworCisJLyogR2V0IGRvbm9yIGlub2RlJ3MgZXh0ZW50cyAqLworCXJldCA9IGdldF9maWxlX2V4dGVudHMoZG9ub3JfZmQsICZkb25vcl9saXN0X3BoeXNpY2FsKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKSB7CisJCQlQUklOVF9GSUxFX05BTUUoZmlsZSk7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9FWFRFTlQpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCS8qIENhbGN1YXRlIGRvbm9yIGlub2RlJ3MgY29udGludW91cyBwaHlzaWNhbCByZWdpb24gKi8KKwlkb25vcl9waHlzaWNhbF9jbnQgPSBnZXRfcGh5c2ljYWxfY291bnQoZG9ub3JfbGlzdF9waHlzaWNhbCk7CisKKwkvKiBDaGFuZ2UgZG9ub3IgZXh0ZW50IGxpc3QgZnJvbSBwaHlzaWNhbCB0byBsb2dpY2FsICovCisJcmV0ID0gY2hhbmdlX3BoeXNpY2FsX3RvX2xvZ2ljYWwoJmRvbm9yX2xpc3RfcGh5c2ljYWwsCisJCQkJCQkJJmRvbm9yX2xpc3RfbG9naWNhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJUFJJTlRfRklMRV9OQU1FKGZpbGUpOworCQkJUFJJTlRfRVJSX01TR19XSVRIX0VSUk5PKE5HTVNHX0ZJTEVfRVhURU5UKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKK2NoZWNrX2ltcHJvdmVtZW50OgorCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJaWYgKGZpbGVfZnJhZ3Nfc3RhcnQgIT0gMSkKKwkJCWZyYWdfZmlsZXNfYmVmb3JlX2RlZnJhZysrOworCisJCWV4dGVudHNfYmVmb3JlX2RlZnJhZyArPSBmaWxlX2ZyYWdzX3N0YXJ0OworCX0KKworCWlmIChmaWxlX2ZyYWdzX3N0YXJ0IDw9IGJlc3QgfHwKKwkJCW9yaWdfcGh5c2ljYWxfY250IDw9IGRvbm9yX3BoeXNpY2FsX2NudCkgeworCQlwcmludGYoIlwwMzNbNzk7MEhcMDMzW0tbJXUvJXVdJXM6XHQlM2QlJSIsCisJCQlkZWZyYWdlZF9maWxlX2NvdW50LCB0b3RhbF9jb3VudCwgZmlsZSwgMTAwKTsKKwkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkKKwkJCXByaW50ZigiICBleHRlbnRzOiAlZCAtPiAlZCIsCisJCQkJZmlsZV9mcmFnc19zdGFydCwgZmlsZV9mcmFnc19zdGFydCk7CisKKwkJcHJpbnRmKCJcdFsgT0sgXVxuIik7CisJCXN1Y2NlZWRfY250Kys7CisKKwkJaWYgKGZpbGVfZnJhZ3Nfc3RhcnQgIT0gMSkKKwkJCWZyYWdfZmlsZXNfYWZ0ZXJfZGVmcmFnKys7CisKKwkJZXh0ZW50c19hZnRlcl9kZWZyYWcgKz0gZmlsZV9mcmFnc19zdGFydDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRGVmcmFnIHRoZSBmaWxlICovCisJcmV0ID0gY2FsbF9kZWZyYWcoZmQsIGRvbm9yX2ZkLCBmaWxlLCBidWYsIGRvbm9yX2xpc3RfbG9naWNhbCk7CisKKwkvKiBDb3VudCBmaWxlIGZyYWdtZW50cyBhZnRlciBkZWZyYWcgYW5kIHByaW50IGV4dGVudHMgaW5mbyAqLworCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJZmlsZV9mcmFnc19lbmQgPSBmaWxlX2ZyYWdfY291bnQoZmQpOworCQlpZiAoZmlsZV9mcmFnc19lbmQgPCAwKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlQUklOVF9FUlJfTVNHX1dJVEhfRVJSTk8oTkdNU0dfRklMRV9JTkZPKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGZpbGVfZnJhZ3NfZW5kICE9IDEpCisJCQlmcmFnX2ZpbGVzX2FmdGVyX2RlZnJhZysrOworCisJCWV4dGVudHNfYWZ0ZXJfZGVmcmFnICs9IGZpbGVfZnJhZ3NfZW5kOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJcHJpbnRmKCIgIGV4dGVudHM6ICVkIC0+ICVkIiwKKwkJCWZpbGVfZnJhZ3Nfc3RhcnQsIGZpbGVfZnJhZ3NfZW5kKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcHJpbnRmKCJcdFsgT0sgXVxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisJc3VjY2VlZF9jbnQrKzsKKworb3V0OgorCWNsb3NlKGZkKTsKKwlpZiAoZG9ub3JfZmQgIT0gLTEpCisJCWNsb3NlKGRvbm9yX2ZkKTsKKwlmcmVlX2V4dChvcmlnX2xpc3RfcGh5c2ljYWwpOworCWZyZWVfZXh0KG9yaWdfbGlzdF9sb2dpY2FsKTsKKwlmcmVlX2V4dChkb25vcl9saXN0X3BoeXNpY2FsKTsKKwlmcmVlX2V4dHNfZ3JvdXAob3JpZ19ncm91cF9oZWFkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG1haW4oKSAtCQlFeHQ0IG9ubGluZSBkZWZyYWcuCisgKgorICogQGFyZ2M6CQl0aGUgbnVtYmVyIG9mIHBhcmFtZXRlci4KKyAqIEBhcmd2W106CQl0aGUgcG9pbnRlciBhcnJheSBvZiBwYXJhbWV0ZXIuCisgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50CW9wdDsKKwlpbnQJaSwgaiwgcmV0ID0gMDsKKwlpbnQJZmxhZ3MgPSBGVFdfUEhZUyB8IEZUV19NT1VOVDsKKwlpbnQJYXJnX3R5cGUgPSAtMTsKKwlpbnQJc3VjY2Vzc19mbGFnID0gMDsKKwljaGFyCWRpcl9uYW1lW1BBVEhfTUFYICsgMV07CisJY2hhcglkZXZfbmFtZVtQQVRIX01BWCArIDFdOworCXN0cnVjdCBzdGF0NjQJYnVmOworCWV4dDJfZmlsc3lzIGZzID0gTlVMTDsKKworCS8qIFBhcnNlIGFyZ3VtZW50cyAqLworCWlmIChhcmdjID09IDEpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgInZjIikpICE9IEVPRikgeworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICd2JzoKKwkJCW1vZGVfZmxhZyB8PSBERVRBSUw7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQltb2RlX2ZsYWcgfD0gU1RBVElTVElDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChhcmdjID09IG9wdGluZCkKKwkJZ290byBvdXQ7CisKKwljdXJyZW50X3VpZCA9IGdldHVpZCgpOworCisJLyogTWFpbiBwcm9jZXNzICovCisJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN1Y2NlZWRfY250ID0gMDsKKwkJcmVndWxhcl9jb3VudCA9IDA7CisJCXRvdGFsX2NvdW50ID0gMDsKKwkJZnJhZ19maWxlc19iZWZvcmVfZGVmcmFnID0gMDsKKwkJZnJhZ19maWxlc19hZnRlcl9kZWZyYWcgPSAwOworCQlleHRlbnRzX2JlZm9yZV9kZWZyYWcgPSAwOworCQlleHRlbnRzX2FmdGVyX2RlZnJhZyA9IDA7CisJCWRlZnJhZ2VkX2ZpbGVfY291bnQgPSAwOworCQlmaWxlc19ibG9ja19jb3VudCA9IDA7CisJCWJsb2Nrc19wZXJfZ3JvdXAgPSAwOworCQlmZWF0dXJlX2luY29tcGF0ID0gMDsKKwkJbG9nX2dyb3Vwc19wZXJfZmxleCA9IDA7CisKKwkJbWVtc2V0KGRpcl9uYW1lLCAwLCBQQVRIX01BWCArIDEpOworCQltZW1zZXQoZGV2X25hbWUsIDAsIFBBVEhfTUFYICsgMSk7CisJCW1lbXNldChsb3N0X2ZvdW5kX2RpciwgMCwgUEFUSF9NQVggKyAxKTsKKwkJbWVtc2V0KGZyYWdfcmFuaywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgZnJhZ19zdGF0aXN0aWNfaW5vKSAqIFNIT1dfRlJBR19GSUxFUyk7CisKKwkJaWYgKChtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpICYmIGkgPiBvcHRpbmQpCisJCQlwcmludGYoIlxuIik7CisKKyNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOCisJCVBSSU5UX0VSUl9NU0coIkVuZGlhbidzIHR5cGUgaXMgbm90IGJpZy9saXR0bGUgZW5kaWFuIik7CisJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJY29udGludWU7CisjZW5kaWYKKworCQlpZiAobHN0YXQ2NChhcmd2W2ldLCAmYnVmKSA8IDApIHsKKwkJCXBlcnJvcihOR01TR19GSUxFX0lORk8pOworCQkJUFJJTlRfRklMRV9OQU1FKGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgaS5lLiBsdm0gZGV2aWNlIHN5bWxpbmtzICovCisJCWlmIChTX0lTTE5LKGJ1Zi5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0YXQ2NAlidWYyOworCisJCQlpZiAoc3RhdDY0KGFyZ3ZbaV0sICZidWYyKSA9PSAwICYmCisJCQkgICAgU19JU0JMSyhidWYyLnN0X21vZGUpKQorCQkJCWJ1ZiA9IGJ1ZjI7CisJCX0KKworCQlpZiAoU19JU0JMSyhidWYuc3RfbW9kZSkpIHsKKwkJCS8qIEJsb2NrIGRldmljZSAqLworCQkJc3RybmNweShkZXZfbmFtZSwgYXJndltpXSwgc3Rybmxlbihhcmd2W2ldLCBQQVRIX01BWCkpOworCQkJaWYgKGdldF9tb3VudF9wb2ludChhcmd2W2ldLCBkaXJfbmFtZSwgUEFUSF9NQVgpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChsc3RhdDY0KGRpcl9uYW1lLCAmYnVmKSA8IDApIHsKKwkJCQlwZXJyb3IoTkdNU0dfRklMRV9JTkZPKTsKKwkJCQlQUklOVF9GSUxFX05BTUUoYXJndltpXSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhcmdfdHlwZSA9IERFVk5BTUU7CisJCQlpZiAoIShtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpKQorCQkJCXByaW50ZigiZXh0NCBkZWZyYWdtZW50YXRpb24gZm9yIGRldmljZSglcylcbiIsCisJCQkJCWFyZ3ZbaV0pOworCQl9IGVsc2UgaWYgKFNfSVNESVIoYnVmLnN0X21vZGUpKSB7CisJCQkvKiBEaXJlY3RvcnkgKi8KKwkJCWlmIChhY2Nlc3MoYXJndltpXSwgUl9PSykgPCAwKSB7CisJCQkJcGVycm9yKGFyZ3ZbaV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYXJnX3R5cGUgPSBESVJOQU1FOworCQkJc3RybmNweShkaXJfbmFtZSwgYXJndltpXSwgc3Rybmxlbihhcmd2W2ldLCBQQVRIX01BWCkpOworCQl9IGVsc2UgaWYgKFNfSVNSRUcoYnVmLnN0X21vZGUpKSB7CisJCQkvKiBSZWd1bGFyIGZpbGUgKi8KKwkJCWFyZ190eXBlID0gRklMRU5BTUU7CisJCX0gZWxzZSB7CisJCQkvKiBJcnJlZ3VsYXIgZmlsZSAqLworCQkJUFJJTlRfRVJSX01TRyhOR01TR19GSUxFX1VOUkVHKTsKKwkJCVBSSU5UX0ZJTEVfTkFNRShhcmd2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2V0IGJsb2Nrc2l6ZSAqLworCQlibG9ja19zaXplID0gYnVmLnN0X2Jsa3NpemU7CisKKwkJLyogRm9yIGRldmljZSBjYXNlLAorCQkgKiBmaWxlc3lzdGVtIHR5cGUgY2hlY2tlZCBpbiBnZXRfbW91bnRfcG9pbnQoKQorCQkgKi8KKwkJaWYgKGFyZ190eXBlID09IEZJTEVOQU1FIHx8IGFyZ190eXBlID09IERJUk5BTUUpIHsKKwkJCWlmIChpc19leHQ0KGFyZ3ZbaV0sIGRldl9uYW1lKSA8IDApCisJCQkJY29udGludWU7CisJCQlpZiAocmVhbHBhdGgoYXJndltpXSwgZGlyX25hbWUpID09IE5VTEwpIHsKKwkJCQlwZXJyb3IoIkNvdWxkbid0IGdldCBmdWxsIHBhdGgiKTsKKwkJCQlQUklOVF9GSUxFX05BTUUoYXJndltpXSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoY3VycmVudF91aWQgPT0gUk9PVF9VSUQpIHsKKwkJCS8qIEdldCBzdXBlciBibG9jayBpbmZvICovCisJCQlyZXQgPSBleHQyZnNfb3BlbihkZXZfbmFtZSwgMCwgMCwgYmxvY2tfc2l6ZSwKKwkJCQkJdW5peF9pb19tYW5hZ2VyLCAmZnMpOworCQkJaWYgKHJldCkgeworCQkJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpIHsKKwkJCQkJcGVycm9yKCJDYW4ndCBnZXQgc3VwZXIgYmxvY2sgaW5mbyIpOworCQkJCQlQUklOVF9GSUxFX05BTUUoYXJndltpXSk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlibG9ja3NfcGVyX2dyb3VwID0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCQlmZWF0dXJlX2luY29tcGF0ID0gZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQ7CisJCQlsb2dfZ3JvdXBzX3Blcl9mbGV4ID0gZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisKKwkJCWV4dDJmc19jbG9zZShmcyk7CisJCX0KKworCQlzd2l0Y2ggKGFyZ190eXBlKSB7CisJCQlpbnQgbW91bnRfZGlyX2xlbiA9IDA7CisKKwkJY2FzZSBESVJOQU1FOgorCQkJaWYgKCEobW9kZV9mbGFnICYgU1RBVElTVElDKSkKKwkJCQlwcmludGYoImV4dDQgZGVmcmFnbWVudGF0aW9uICIKKwkJCQkJImZvciBkaXJlY3RvcnkoJXMpXG4iLCBhcmd2W2ldKTsKKworCQkJbW91bnRfZGlyX2xlbiA9IHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsIFBBVEhfTUFYKTsKKworCQkJc3RybmNhdChsb3N0X2ZvdW5kX2RpciwgIi9sb3N0K2ZvdW5kIiwKKwkJCQlQQVRIX01BWCAtIHN0cm5sZW4obG9zdF9mb3VuZF9kaXIsIFBBVEhfTUFYKSk7CisKKwkJCS8qIE5vdCB0aGUgY2FzZSgiZTRkZWZyYWcgIG1vdW50X3Bpb250X2RpciIpICovCisJCQlpZiAoZGlyX25hbWVbbW91bnRfZGlyX2xlbl0gIT0gJ1wwJykgeworCQkJCS8qCisJCQkJICogImU0ZGVmcmFnIG1vdW50X3Bpb250X2Rpci9sb3N0K2ZvdW5kIgorCQkJCSAqIG9yICJlNGRlZnJhZyBtb3VudF9waW9udF9kaXIvbG9zdCtmb3VuZC8iCisJCQkJICovCisJCQkJaWYgKHN0cm5jbXAobG9zdF9mb3VuZF9kaXIsIGRpcl9uYW1lLAorCQkJCQkgICAgc3Rybmxlbihsb3N0X2ZvdW5kX2RpciwKKwkJCQkJCSAgICBQQVRIX01BWCkpID09IDAgJiYKKwkJCQkgICAgKGRpcl9uYW1lW3N0cm5sZW4obG9zdF9mb3VuZF9kaXIsCisJCQkJCQkgICAgICBQQVRIX01BWCldID09ICdcMCcgfHwKKwkJCQkgICAgIGRpcl9uYW1lW3N0cm5sZW4obG9zdF9mb3VuZF9kaXIsCisJCQkJCQkgICAgICBQQVRIX01BWCldID09ICcvJykpIHsKKwkJCQkJUFJJTlRfRVJSX01TRyhOR01TR19MT1NUX0ZPVU5EKTsKKwkJCQkJUFJJTlRfRklMRV9OQU1FKGFyZ3ZbaV0pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvKiAiZTRkZWZyYWcgbW91bnRfcGlvbnRfZGlyL2Vsc2VfZGlyIiAqLworCQkJCW1lbXNldChsb3N0X2ZvdW5kX2RpciwgMCwgUEFUSF9NQVggKyAxKTsKKwkJCX0KKwkJY2FzZSBERVZOQU1FOgorCQkJaWYgKGFyZ190eXBlID09IERFVk5BTUUpIHsKKwkJCQlzdHJuY3B5KGxvc3RfZm91bmRfZGlyLCBkaXJfbmFtZSwKKwkJCQkJc3RybmxlbihkaXJfbmFtZSwgUEFUSF9NQVgpKTsKKwkJCQlzdHJuY2F0KGxvc3RfZm91bmRfZGlyLCAiL2xvc3QrZm91bmQvIiwKKwkJCQkJUEFUSF9NQVggLSBzdHJubGVuKGxvc3RfZm91bmRfZGlyLAorCQkJCQkJCSAgIFBBVEhfTUFYKSk7CisJCQl9CisKKwkJCW5mdHc2NChkaXJfbmFtZSwgY2FsY19lbnRyeV9jb3VudHMsIEZUV19PUEVOX0ZELCBmbGFncyk7CisKKwkJCWlmIChtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpIHsKKwkJCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKQorCQkJCQlwcmludGYoIiUtNDBzJTEwcy8lLTEwcyU5c1xuIiwKKwkJCQkJIjxGaWxlPiIsICJub3ciLCAiYmVzdCIsICJzaXplL2V4dCIpOworCisJCQkJaWYgKCEobW9kZV9mbGFnICYgREVUQUlMKSAmJgorCQkJCQkJY3VycmVudF91aWQgIT0gUk9PVF9VSUQpIHsKKwkJCQkJcHJpbnRmKCIgRG9uZS5cbiIpOworCQkJCQlzdWNjZXNzX2ZsYWcgPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQluZnR3NjQoZGlyX25hbWUsIGZpbGVfc3RhdGlzdGljLAorCQkJCQkJCUZUV19PUEVOX0ZELCBmbGFncyk7CisKKwkJCQlpZiAoc3VjY2VlZF9jbnQgIT0gMCAmJgorCQkJCQljdXJyZW50X3VpZCA9PSBST09UX1VJRCkgeworCQkJCQlpZiAobW9kZV9mbGFnICYgREVUQUlMKQorCQkJCQkJcHJpbnRmKCJcbiIpOworCQkJCQlwcmludGYoIiUtNDBzJTEwcy8lLTEwcyU5c1xuIiwKKwkJCQkJCSI8RnJhZ21lbnRlZCBmaWxlcz4iLCAibm93IiwKKwkJCQkJCSJiZXN0IiwgInNpemUvZXh0Iik7CisJCQkJCWZvciAoaiA9IDA7IGogPCBTSE9XX0ZSQUdfRklMRVM7IGorKykgeworCQkJCQkJaWYgKHN0cmxlbihmcmFnX3Jhbmtbal0uCisJCQkJCQkJbXNnX2J1ZmZlcikgPiAzNykgeworCQkJCQkJCXByaW50ZigiJWQuICVzXG4lNTBkLyIKKwkJCQkJCQkiJS0xMGQlNmxsdSBLQlxuIiwKKwkJCQkJCQlqICsgMSwKKwkJCQkJCQlmcmFnX3Jhbmtbal0ubXNnX2J1ZmZlciwKKwkJCQkJCQlmcmFnX3Jhbmtbal0ubm93X2NvdW50LAorCQkJCQkJCWZyYWdfcmFua1tqXS5iZXN0X2NvdW50LAorCQkJCQkJCWZyYWdfcmFua1tqXS4KKwkJCQkJCQkJc2l6ZV9wZXJfZXh0KTsKKwkJCQkJCX0gZWxzZSBpZiAoc3RybGVuKGZyYWdfcmFua1tqXS4KKwkJCQkJCQltc2dfYnVmZmVyKSA+IDApIHsKKwkJCQkJCQlwcmludGYoIiVkLiAlLTM3cyUxMGQvIgorCQkJCQkJCSIlLTEwZCU2bGx1IEtCXG4iLAorCQkJCQkJCWogKyAxLAorCQkJCQkJCWZyYWdfcmFua1tqXS5tc2dfYnVmZmVyLAorCQkJCQkJCWZyYWdfcmFua1tqXS5ub3dfY291bnQsCisJCQkJCQkJZnJhZ19yYW5rW2pdLmJlc3RfY291bnQsCisJCQkJCQkJZnJhZ19yYW5rW2pdLgorCQkJCQkJCQlzaXplX3Blcl9leHQpOworCQkJCQkJfSBlbHNlCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBGaWxlIHRyZWUgd2FsayAqLworCQkJbmZ0dzY0KGRpcl9uYW1lLCBmaWxlX2RlZnJhZywgRlRXX09QRU5fRkQsIGZsYWdzKTsKKwkJCXByaW50ZigiXG5cdFN1Y2Nlc3M6XHRcdFx0WyAldS8ldSBdXG4iLCBzdWNjZWVkX2NudCwKKwkJCQl0b3RhbF9jb3VudCk7CisJCQlwcmludGYoIlx0RmFpbHVyZTpcdFx0XHRbICV1LyV1IF1cbiIsCisJCQkJdG90YWxfY291bnQgLSBzdWNjZWVkX2NudCwgdG90YWxfY291bnQpOworCQkJaWYgKG1vZGVfZmxhZyAmIERFVEFJTCkgeworCQkJCXByaW50ZigiXHRUb3RhbCBleHRlbnRzOlx0XHRcdCU0ZC0+JWRcbiIsCisJCQkJCWV4dGVudHNfYmVmb3JlX2RlZnJhZywKKwkJCQkJZXh0ZW50c19hZnRlcl9kZWZyYWcpOworCQkJCXByaW50ZigiXHRGcmFnbWVudGVkIHBlcmNlbnRhZ2U6XHRcdCIKKwkJCQkJIiUzbGx1JSUtPiVsbHUlJVxuIiwKKwkJCQkJIXJlZ3VsYXJfY291bnQgPyAwIDoKKwkJCQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCWZyYWdfZmlsZXNfYmVmb3JlX2RlZnJhZyAqIDEwMCkgLworCQkJCQlyZWd1bGFyX2NvdW50LAorCQkJCQkhcmVndWxhcl9jb3VudCA/IDAgOgorCQkJCQkoKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJZnJhZ19maWxlc19hZnRlcl9kZWZyYWcgKiAxMDApIC8KKwkJCQkJcmVndWxhcl9jb3VudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBGSUxFTkFNRToKKwkJCXRvdGFsX2NvdW50ID0gMTsKKwkJCXJlZ3VsYXJfY291bnQgPSAxOworCQkJc3RybmNhdChsb3N0X2ZvdW5kX2RpciwgIi9sb3N0K2ZvdW5kLyIsCisJCQkJUEFUSF9NQVggLSBzdHJubGVuKGxvc3RfZm91bmRfZGlyLAorCQkJCQkJICAgUEFUSF9NQVgpKTsKKwkJCWlmIChzdHJuY21wKGxvc3RfZm91bmRfZGlyLCBkaXJfbmFtZSwKKwkJCQkgICAgc3Rybmxlbihsb3N0X2ZvdW5kX2RpciwKKwkJCQkJICAgIFBBVEhfTUFYKSkgPT0gMCkgeworCQkJCVBSSU5UX0VSUl9NU0coTkdNU0dfTE9TVF9GT1VORCk7CisJCQkJUFJJTlRfRklMRV9OQU1FKGFyZ3ZbaV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAobW9kZV9mbGFnICYgU1RBVElTVElDKSB7CisJCQkJZmlsZV9zdGF0aXN0aWMoYXJndltpXSwgJmJ1ZiwgRlRXX0YsIE5VTEwpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCJleHQ0IGRlZnJhZ21lbnRhdGlvbiBmb3IgJXNcbiIsCisJCQkJCQkJCSBhcmd2W2ldKTsKKwkJCS8qIERlZnJhZyBzaW5nbGUgZmlsZSBwcm9jZXNzICovCisJCQlmaWxlX2RlZnJhZyhhcmd2W2ldLCAmYnVmLCBGVFdfRiwgTlVMTCk7CisJCQlpZiAoc3VjY2VlZF9jbnQgIT0gMCkKKwkJCQlwcmludGYoIiBTdWNjZXNzOlx0XHRcdFsxLzFdXG4iKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiBTdWNjZXNzOlx0XHRcdFswLzFdXG4iKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3VjY2VlZF9jbnQgIT0gMCkKKwkJCXN1Y2Nlc3NfZmxhZyA9IDE7CisJCWlmIChtb2RlX2ZsYWcgJiBTVEFUSVNUSUMpIHsKKwkJCWlmIChjdXJyZW50X3VpZCAhPSBST09UX1VJRCkgeworCQkJCXByaW50ZigiIERvbmUuXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFzdWNjZWVkX2NudCkgeworCQkJCWlmIChtb2RlX2ZsYWcgJiBERVRBSUwpCisJCQkJCXByaW50ZigiXG4iKTsKKworCQkJCWlmIChhcmdfdHlwZSA9PSBERVZOQU1FKQorCQkJCQlwcmludGYoIiBJbiB0aGlzIGRldmljZSglcyksICIKKwkJCQkJIm5vbmUgY2FuIGJlIGRlZnJhZ21lbnRlZC5cbiIsIGFyZ3ZbaV0pOworCQkJCWVsc2UgaWYgKGFyZ190eXBlID09IERJUk5BTUUpCisJCQkJCXByaW50ZigiIEluIHRoaXMgZGlyZWN0b3J5KCVzKSwgIgorCQkJCQkibm9uZSBjYW4gYmUgZGVmcmFnbWVudGVkLlxuIiwgYXJndltpXSk7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiBUaGlzIGZpbGUoJXMpICIKKwkJCQkJImNhbid0IGJlIGRlZnJhZ21lbnRlZC5cbiIsIGFyZ3ZbaV0pOworCQkJfSBlbHNlIHsKKwkJCQlmbG9hdCBmaWxlc19yYXRpbyA9IDAuMDsKKwkJCQlmbG9hdCBzY29yZSA9IDAuMDsKKwkJCQlfX3U2NCBzaXplX3Blcl9leHQgPSBmaWxlc19ibG9ja19jb3VudCAqCisJCQkJCQkoYnVmLnN0X2Jsa3NpemUgLyAxMDI0KSAvCisJCQkJCQlleHRlbnRzX2JlZm9yZV9kZWZyYWc7CisJCQkJZmlsZXNfcmF0aW8gPSAoZmxvYXQpKGV4dGVudHNfYmVmb3JlX2RlZnJhZyAtCisJCQkJCQlleHRlbnRzX2FmdGVyX2RlZnJhZykgKgorCQkJCQkJMTAwIC8gZmlsZXNfYmxvY2tfY291bnQ7CisJCQkJc2NvcmUgPSBDQUxDX1NDT1JFKGZpbGVzX3JhdGlvKTsKKwkJCQlwcmludGYoIlxuIFRvdGFsL2Jlc3QgZXh0ZW50c1x0XHRcdFx0JWQvJWRcbiIKKwkJCQkJIiBBdmVyYWdlIHNpemUgcGVyIGV4dGVudCIKKwkJCQkJIlx0XHRcdCVsbHUgS0JcbiIKKwkJCQkJIiBGcmFnbWVudGF0aW9uIHNjb3JlXHRcdFx0XHQlLjBmXG4iLAorCQkJCQkJZXh0ZW50c19iZWZvcmVfZGVmcmFnLAorCQkJCQkJZXh0ZW50c19hZnRlcl9kZWZyYWcsCisJCQkJCQlzaXplX3Blcl9leHQsIHNjb3JlKTsKKwkJCQlwcmludGYoIiBbMC0zMCBubyBwcm9ibGVtOiIKKwkJCQkJIiAzMS01NSBhIGxpdHRsZSBiaXQgZnJhZ21lbnRlZDoiCisJCQkJCSIgNTYtIG5lZWRzIGRlZnJhZ11cbiIpOworCisJCQkJaWYgKGFyZ190eXBlID09IERFVk5BTUUpCisJCQkJCXByaW50ZigiIFRoaXMgZGV2aWNlICglcykgIiwgYXJndltpXSk7CisJCQkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gRElSTkFNRSkKKwkJCQkJcHJpbnRmKCIgVGhpcyBkaXJlY3RvcnkgKCVzKSAiLAorCQkJCQkJCQlhcmd2W2ldKTsKKwkJCQllbHNlCisJCQkJCXByaW50ZigiIFRoaXMgZmlsZSAoJXMpICIsIGFyZ3ZbaV0pOworCisJCQkJaWYgKHNjb3JlID4gQk9VTkRfU0NPUkUpCisJCQkJCXByaW50ZigibmVlZHMgZGVmcmFnbWVudGF0aW9uLlxuIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoImRvZXMgbm90IG5lZWQgIgorCQkJCQkJCSJkZWZyYWdtZW50YXRpb24uXG4iKTsKKwkJCX0KKwkJCXByaW50ZigiIERvbmUuXG4iKTsKKwkJfQorCisJfQorCisJaWYgKHN1Y2Nlc3NfZmxhZykKKwkJcmV0dXJuIDA7CisKKwlleGl0KDEpOworCitvdXQ6CisJcHJpbnRmKE1TR19VU0FHRSk7CisJZXhpdCgxKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZXh0NC41LmluIGIvZTJmc3Byb2dzL21pc2MvZXh0NC41LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDk0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9leHQ0LjUuaW4KQEAgLTAsMCArMSwyNTcgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDE5OTUgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIKKy5USCBFWFQ0IDUgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2V4dDIgXC0gdGhlIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorLmJyCitleHQyIFwtIHRoZSB0aGlyZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorLmJyCitleHQ0IFwtIHRoZSBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKy5TSCBERVNDUklQVElPTgorVGhlIHNlY29uZCwgdGhpcmQsIGFuZCBmb3VydGggZXh0ZW5kZWQgZmlsZSBzeXN0ZW1zLCBvciBleHQyLCBleHQzLCBhbmQKK2V4dDQgYXMgdGhleSBhcmUgY29tbW9ubHkga25vd24sIGFyZSBMaW51eCBmaWxlIHN5c3RlbXMgdGhhdCBoYXZlCitoaXN0b3JpY2FsbHkgYmVlbiB0aGUgZGVmYXVsdCBmaWxlIHN5c3RlbSBmb3IgbWFueSBMaW51eCBkaXN0cmlidXRpb25zLgorVGhleSBhcmUgZ2VuZXJhbCBwdXJwb3NlIGZpbGUgc3lzdGVtcyB0aGF0IGhhdmUgYmVlbiBkZXNpZ25lZCBmb3IKK2V4dGVuc2liaWxpdHkgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgSW4gcGFydGljdWxhciwgZmlsZSBzeXN0ZW1zCitwcmV2aW91c2x5IGludGVuZGVkIGZvciB1c2Ugd2l0aCB0aGUgZXh0MiBhbmQgZXh0MyBmaWxlIHN5c3RlbXMgY2FuIGJlCittb3VudGVkIHVzaW5nIHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciwgYW5kIGluZGVlZCBpbiBtYW55IG1vZGVybgorTGludXggZGlzdHJpYnV0aW9ucywgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGhhcyBiZWVuIGNvbmZpZ3VyZWQKK2hhbmRsZSBtb3VudCByZXF1ZXN0cyBmb3IgZXh0MiBhbmQgZXh0MyBmaWxlIHN5c3RlbXMuCisuU0ggRklMRSBTWVNURU0gRkVBVFVSRVMKK0EgZmlsZSBzeXN0ZW0gZm9ybWF0ZWQgZm9yIGV4dDIsIGV4dDMsIG9yIGV4dDQgY2FuIGJlIGhhdmUgc29tZQorY29sbGVjdGlvbiBvZiB0aGUgZm9sbG93IGZpbGUgc3lzdGVtIGZlYXR1cmUgZmxhZ3MgZW5hYmxlZC4gIFNvbWUgb2YKK3RoZXNlIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV4dDIsCitleHQzLCBhbmQgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXJzLCBkZXBlbmRpbmcgb24gTGludXgga2VybmVsIHZlcnNpb24gaW4KK3VzZS4gIE9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCBzdWNoIGFzIHRoZSBHTlUvSFVSRCBvciBGcmVlQlNELCBvbmx5CithIHZlcnkgcmVzdHJpY3RpdmUgc2V0IG9mIGZpbGUgc3lzdGVtIGZlYXR1cmVzIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlaXIKK2ltcGxlbWVudGF0aW9ucyBvZiBleHQyLgorLlJTIDEuMmkKKy5UUAorLkIgNjRiaXQKKy5icgorRW5hYmxlcyB0aGUgZmlsZSBzeXN0ZW0gdG8gYmUgbGFyZ2VyIHRoYW4gMl4zMiBibG9ja3MuICBUaGlzIGZlYXR1cmUgaXMgc2V0CithdXRvbWF0aWNhbGx5LCBhcyBuZWVkZWQsIGJ1dCBpdCBjYW4gYmUgdXNlZnVsIHRvIHNwZWNpZnkgdGhpcyBmZWF0dXJlCitleHBsaWNpdGx5IGlmIHRoZSBmaWxlIHN5c3RlbSBtaWdodCBuZWVkIHRvIGJlIHJlc2l6ZWQgbGFyZ2VyIHRoYW4gMl4zMgorYmxvY2tzLCBldmVuIGlmIGl0IHdhcyBzbWFsbGVyIHRoYW4gdGhhdCB0aHJlc2hvbGQgd2hlbiBpdCB3YXMKK29yaWdpbmFsbHkgY3JlYXRlZC4gIE5vdGUgdGhhdCBzb21lIG9sZGVyIGtlcm5lbHMgYW5kIG9sZGVyIHZlcnNpb25zCitvZiBlMmZzcHJvZ3Mgd2lsbCBub3Qgc3VwcG9ydCBmaWxlIHN5c3RlbXMgd2l0aCB0aGlzIGV4dDQgZmVhdHVyZSBlbmFibGVkLgorLlRQCisuQiBiaWdhbGxvYworLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBlbmFibGVzIGNsdXN0ZXJlZCBibG9jayBhbGxvY2F0aW9uLCBzbyB0aGF0IHRoZSB1bml0IG9mCithbGxvY2F0aW9uIGlzIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZiBibG9ja3MuICBUaGF0IGlzLCBlYWNoIGJpdCBpbiB0aGUKK3doYXQgaGFkIHRyYWRpdGlvbmFsbHkgYmVlbiBrbm93biBhcyB0aGUgYmxvY2sgYWxsb2NhdGlvbiBiaXRtYXAgbm93CitpbmRpY2F0ZXMgd2hldGhlciBhIGNsdXN0ZXIgaXMgaW4gdXNlIG9yIG5vdCwgd2hlcmUgYSBjbHVzdGVyIGlzIGJ5CitkZWZhdWx0IGNvbXBvc2VkIG9mIDE2IGJsb2Nrcy4gIFRoaXMgZmVhdHVyZSBjYW4gZGVjcmVhc2UgdGhlIHRpbWUKK3NwZW50IG9uIGRvaW5nIGJsb2NrIGFsbG9jYXRpb24gYW5kIGJyaW5ncyBzbWFsbGVyIGZyYWdtZW50YXRpb24sIGVzcGVjaWFsbHkKK2ZvciBsYXJnZSBmaWxlcy4gIFRoZSBzaXplIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisuQiBcLUMgb3B0aW9uLgorLklQCisuQiBXYXJuaW5nOgorVGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQsIGFuZCBtYXkgbm90IGJlIGZ1bGx5CitzdXBwb3J0ZWQgd2l0aCB5b3VyIGtlcm5lbCBvciBtYXkgaGF2ZSB2YXJpb3VzIGJ1Z3MuICBQbGVhc2Ugc2VlIHRoZSB3ZWIKK3BhZ2UgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgZGV0YWlscy4KK01heSBjbGFzaCB3aXRoIGRlbGF5ZWQgYWxsb2NhdGlvbiAoc2VlCisuQlIgbm9kZWxhbGxvYyBtb3VudCBvcHRpb24pLgorLklQCitUaGlzIGZlYXR1cmUgcmVxdWlyZXMgdGhhdCB0aGUKKy5CIGV4dGVudAorZmVhdHVyZXMgYmUgZW5hYmxlZC4KKy5UUAorLkIgZGlyX2luZGV4CisuYnIKK1VzZSBoYXNoZWQgYi10cmVlcyB0byBzcGVlZCB1cCBuYW1lIGxvb2t1cHMgaW4gbGFyZ2UgZGlyZWN0b3JpZXMuICBUaGlzCitmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSBleHQzIGFuZCBleHQ0IGZpbGUgc3lzdGVtcywgYW5kIGlzIGlnbm9yZWQgYnkKK2V4dDIgZmlsZSBzeXN0ZW1zLgorLlRQCisuQiBkaXJfbmxpbmsKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgYWxsb3dzIG1vcmUgdGhhbiA2NTAwMCBzdWJkaXJlY3RvcmllcyBwZXIgZGlyZWN0b3J5LgorLlRQCisuQiBleHRlbnQKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgYWxsb3dzIHRoZSBtYXBwaW5nIG9mIGxvZ2ljYWwgYmxvY2sgbnVtYmVycyBmb3IgYQorcGFydGljdWxhciBpbm9kZSB0byBwaHlzaWNhbCBibG9ja3Mgb24gdGhlIHN0b3JhZ2UgZGV2aWNlIHRvIGJlIHN0b3JlZAordXNpbmcgYW4gZXh0ZW50IHRyZWUsIHdoaWNoIGlzIGEgbW9yZSBlZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmUgdGhhbiB0aGUKK3RyYWRpdGlvbmFsIGluZGlyZWN0IGJsb2NrIHNjaGVtZSB1c2VkIGJ5IHRoZSBleHQyIGFuZCBleHQzIGZpbGUKK3N5c3RlbXMuICBUaGUgdXNlIG9mIHRoZSBleHRlbnQgdHJlZSBkZWNyZWFzZXMgbWV0YWRhdGEgYmxvY2sgb3ZlcmhlYWQsCitpbXByb3ZlcyBmaWxlIHN5c3RlbSBwZXJmb3JtYW5jZSwgYW5kIGRlY3JlYXNlcyB0aGUgbmVlZGVkIHRvIHJ1bgorLkJSIGUyZnNjayAoOCkKK29uIHRoZSBmaWxlIHN5c3RlbS4KKyhOb3RlOiBib3RoCisuQiBleHRlbnQKK2FuZAorLkIgZXh0ZW50cworYXJlIGFjY2VwdGVkIGFzIHZhbGlkIG5hbWVzIGZvciB0aGlzIGZlYXR1cmUgZm9yCitoaXN0b3JpY2FsL2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuKQorLlRQCisuQiBleHRyYV9pc2l6ZQorLmJyCitUaGlzIGV4dDQgZmVhdHVyZSByZXNlcnZlcyBhIHNwZWNpZmljIGFtb3VudCBvZiBzcGFjZSBpbiBlYWNoIGlub2RlIGZvcgorZXh0ZW5kZWQgbWV0YWRhdGEgc3VjaCBhcyBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgYW5kIGZpbGUgY3JlYXRpb24gdGltZSwKK2V2ZW4gaWYgdGhlIGN1cnJlbnQga2VybmVsIGRvZXMgbm90IGN1cnJlbnQgbmVlZCB0byByZXNlcnZlIHRoaXMgbXVjaAorc3BhY2UuICBXaXRob3V0IHRoaXMgZmVhdHVyZSwgdGhlIGtlcm5lbCB3aWxsIHJlc2VydmUgdGhlIGFtb3VudCBvZgorc3BhY2UgZm9yIGZlYXR1cmVzIGN1cnJlbnRseSBpdCBjdXJyZW50bHkgbmVlZHMsIGFuZCB0aGUgcmVzdCBtYXkgYmUKK2NvbnN1bWVkIGJ5IGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisKK0ZvciB0aGlzIGZlYXR1cmUgdG8gYmUgdXNlZnVsIHRoZSBpbm9kZSBzaXplIG11c3QgYmUgMjU2IGJ5dGVzIGluIHNpemUKK29yIGxhcmdlci4KKy5UUAorLkIgZXh0X2F0dHIKKy5icgorVGhpcyBmZWF0dXJlIGVuYWJsZXMgdGhlIHVzZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzLiAgVGhpcyBmZWF0dXJlIGlzCitzdXBwb3J0ZWQgYnkgZXh0MiwgZXh0MywgYW5kIGV4dDQuCisuVFAKKy5CIGZpbGV0eXBlCisuYnIKK1RoaXMgZmVhdHVyZSBlbmFibGVzIHRoZSBzdG9yYWdlIGZpbGUgdHlwZSBpbmZvcm1hdGlvbiBpbiBkaXJlY3RvcnkKK2VudHJpZXMuICBUaGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IGV4dDIsIGV4dDMsIGFuZCBleHQ0LgorLlRQCisuVFAKKy5CIGZsZXhfYmcKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgYWxsb3dzIHRoZSBwZXItYmxvY2sgZ3JvdXAgbWV0YWRhdGEgKGFsbG9jYXRpb24KK2JpdG1hcHMKK2FuZCBpbm9kZSB0YWJsZXMpCit0byBiZSBwbGFjZWQgYW55d2hlcmUgb24gdGhlIHN0b3JhZ2UgbWVkaWEuICBJbiBhZGRpdGlvbiwKKy5CIG1rZTJmcword2lsbCBwbGFjZSB0aGUgcGVyLWJsb2NrIGdyb3VwIG1ldGFkYXRhIHRvZ2V0aGVyIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdAorYmxvY2sgZ3JvdXAgb2YgZWFjaCAiZmxleF9iZyBncm91cCIuICAgVGhlIHNpemUgb2YgdGhlIGZsZXhfYmcgZ3JvdXAKK2NhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisuQiBcLUcKK29wdGlvbi4KKy5UUAorLkIgaGFzX2pvdXJuYWwKKy5icgorQ3JlYXRlIGEgam91cm5hbCB0byBlbnN1cmUgZmlsZXN5c3RlbSBjb25zaXN0ZW5jeSBldmVuIGFjcm9zcyB1bmNsZWFuCitzaHV0ZG93bnMuICBTZXR0aW5nIHRoZSBmaWxlc3lzdGVtIGZlYXR1cmUgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUKKy5CIFwtagorb3B0aW9uLiAgVGhpcyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSBleHQzIGFuZCBleHQ0LCBhbmQgaWdub3JlZCBieSB0aGUKK2V4dDIgZmlsZSBzeXN0ZW0gZHJpdmVyLgorLlRQCisuQiBodWdlX2ZpbGUKKy5icgorVGhpcyBleHQ0IGZlYXR1cmUgYWxsb3dzIGZpbGVzIHRvIGJlIGxhcmdlciB0aGFuIDIgdGVyYWJ5dGVzIGluIHNpemUuCisuVFAKKy5CIGpvdXJuYWxfZGV2CisuYnIKK1RoaXMgZmVhdHVyZSBpcyBlbmFibGVkIG9uIHRoZSBzdXBlcmJsb2NrIGZvdW5kIG9uIGFuIGV4dGVybmFsIGpvdXJuYWwKK2RldmljZS4gIFRoZSBibG9jayBzaXplIGZvciB0aGUgZXh0ZXJuYWwgam91cm5hbCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZQorZmlsZSBzeXN0ZW0gd2hpY2ggdXNlcyBpdC4KKy5JUAorVGhlIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlIGNhbiBiZSB1c2VkIGJ5IGEgZmlsZSBzeXN0ZW0gYnkgc3BlY2lmeWluZwordGhlCisuQiBcLUoKKy5CUiBkZXZpY2U9IDxleHRlcm5hbC1kZXZpY2U+CitvcHRpb24gdG8KKy5CUiBta2UyZnMgKDgpCitvcgorLkJSIHR1bmUyZnMoOCkuCisuVFAKKy5CIGxhcmdlX2ZpbGUKKy5icgorVGhpcyBmZWF0dXJlIGZsYWcgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYnkgbW9kZXJuIGtlcm5lbHMgd2hlbiBhIGZpbGUKK2xhcmdlciB0aGFuIDIgZ2lnYWJ5dGVzIGlzIGNyZWF0ZWQuICBWZXJ5IG9sZCBrZXJuZWxzIGNvdWxkIG5vdAoraGFuZGxlIGxhcmdlIGZpbGVzLCBzbyB0aGlzIGZlYXR1cmUgZmxhZyB3YXMgdXNlZCB0byBwcm9oaWJpdCB0aG9zZQora2VybmVscyBmcm9tIG1vdW50aW5nIGZpbGUgc3lzdGVtcyB0aGF0IHRoZXkgY291bGQgbm90IHVuZGVyc3RhbmQuCisuXCIgLlRQCisuXCIgLkIgbWV0YWRhdGFfY3N1bQorLlwiIC5icgorLlwiIFRoaXMgZXh0NCBmZWF0dXJlIGVuYWJsZXMgbWV0YWRhdGEgY2hlY2tzdW1taW5nLiAgVGhpcyBmZWF0dXJlIHN0b3JlcworLlwiIGNoZWNrc3VtcyBmb3IgYWxsIG9mIHRoZSBmaWxlc3lzdGVtIG1ldGFkYXRhIChzdXBlcmJsb2NrLCBncm91cAorLlwiIGRlc2NyaXB0b3IgYmxvY2tzLCBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcywgZGlyZWN0b3JpZXMsIGFuZAorLlwiIGV4dGVudCB0cmVlIGJsb2NrcykuICBUaGUgY2hlY2tzdW0gYWxnb3JpdGhtIHVzZWQgZm9yIHRoZSBtZXRhZGF0YQorLlwiIGJsb2NrcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHVzZWQgZm9yIGdyb3VwIGRlc2NyaXB0b3JzIHdpdGggdGhlCisuXCIgLkIgdW5pbml0X2JnCisuXCIgZmVhdHVyZSwgdGhlc2UgdHdvIGZlYXR1cmVzIGFyZSBpbmNvbXBhdGlibGUgYW5kCisuXCIgLkIgbWV0YWRhdGFfY3N1bQorLlwiIHdpbGwgYmUgdXNlZCBwcmVmZXJlbnRpYWxseSBpbnN0ZWFkIG9mCisuXCIgLkJSIHVuaW5pdF9iZyAuCisuXCIgLmJyCisuXCIgLkIgRnV0dXJlIGZlYXR1cmUsIGF2YWlsYWJsZSBpbiBlMmZzcHJvZ3MgMS40My1XSVAKKy5UUAorLkIgbWV0YV9iZworLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBhbGxvd3MgZmlsZSBzeXN0ZW1zIHRvIGJlIHJlc2l6ZWQgb24tbGluZSB3aXRob3V0IGV4cGxpY2l0bHkKK25lZWRpbmcgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgZ3Jvd3RoIGluIHRoZSBzaXplIG9mIHRoZSBibG9jayBncm91cAorZGVzY3JpcHRvcnMuICBUaGlzIHNjaGVtZSBpcyBhbHNvIHVzZWQgdG8gcmVzaXplIGZpbGUgc3lzdGVtcyB3aGljaCBhcmUKK2xhcmdlciB0aGFuIDJeMzIgYmxvY2tzLiAgSXQgaXMgbm90IHJlY29tbWVuZGVkIHRoYXQgdGhpcyBmZWF0dXJlIGJlIHNldAord2hlbiBhIGZpbGUgc3lzdGVtIGlzIGNyZWF0ZWQsIHNpbmNlIHRoaXMgYWx0ZXJuYXRlIG1ldGhvZCBvZiBzdG9yaW5nCit0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciB3aWxsIHNsb3cgZG93biB0aGUgdGltZSBuZWVkZWQgdG8gbW91bnQgdGhlCitmaWxlIHN5c3RlbSwgYW5kIG5ld2VyIGtlcm5lbHMgY2FuIGF1dG9tYXRpY2FsbHkgc2V0IHRoaXMgZmVhdHVyZSBhcworbmVjZXNzYXJ5IHdoZW4gZG9pbmcgYW4gb25saW5lIHJlc2l6ZSBhbmQgbm8gbW9yZSByZXNlcnZlZCBzcGFjZSBpcworYXZhaWxhYmxlIGluIHRoZSByZXNpemUgaW5vZGUuCisuVFAKKy5CIG1tcAorLmJyCitUaGlzIGV4dDQgZmVhdHVyZSBwcm92aWRlcyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIChNTVApLiAgTU1QIGhlbHBzIHRvCitwcm90ZWN0IHRoZSBmaWxlc3lzdGVtIGZyb20gYmVpbmcgbXVsdGlwbHkgbW91bnRlZCBhbmQgaXMgdXNlZnVsIGluCitzaGFyZWQgc3RvcmFnZSBlbnZpcm9ubWVudHMuCitAUVVPVEFfTUFOX0NPTU1FTlRALlRQCitAUVVPVEFfTUFOX0NPTU1FTlRALkIgcXVvdGEKK0BRVU9UQV9NQU5fQ09NTUVOVEAuYnIKK0BRVU9UQV9NQU5fQ09NTUVOVEBDcmVhdGUgcXVvdGEgaW5vZGVzIChpbm9kZSAjMyBmb3IgdXNlcnF1b3RhIGFuZCBpbm9kZQorQFFVT1RBX01BTl9DT01NRU5UQCM0IGZvciBncm91cCBxdW90YSkgYW5kIHNldCB0aGVtIGluIHRoZSBzdXBlcmJsb2NrLgorQFFVT1RBX01BTl9DT01NRU5UQFdpdGggdGhpcyBmZWF0dXJlLCB0aGUgcXVvdGFzIHdpbGwgYmUgZW5hYmxlZAorQFFVT1RBX01BTl9DT01NRU5UQGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLgorQFFVT1RBX01BTl9DT01NRU5UQC5JUAorQFFVT1RBX01BTl9DT01NRU5UQENhdXNlcyB0aGUgcXVvdGEgZmlsZXMgKGkuZS4sIHVzZXIucXVvdGEgYW5kCitAUVVPVEFfTUFOX0NPTU1FTlRAZ3JvdXAucXVvdGEgd2hpY2ggZXhpc3RlZAorQFFVT1RBX01BTl9DT01NRU5UQGluIHRoZSBvbGRlciBxdW90YSBkZXNpZ24pIHRvIGJlIGhpZGRlbiBpbm9kZXMuCitAUVVPVEFfTUFOX0NPTU1FTlRALklQCitAUVVPVEFfTUFOX0NPTU1FTlRALkIgV2FybmluZzoKK0BRVU9UQV9NQU5fQ09NTUVOVEBUaGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCwKK0BRVU9UQV9NQU5fQ09NTUVOVEBhbmQgbWF5IG5vdCBiZSBmdWxseSBzdXBwb3J0ZWQgd2l0aCB5b3VyIGtlcm5lbAorQFFVT1RBX01BTl9DT01NRU5UQG9yIG1heSBoYXZlIHZhcmlvdXMgYnVncy4gIFBsZWFzZQorQFFVT1RBX01BTl9DT01NRU5UQHNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YQorQFFVT1RBX01BTl9DT01NRU5UQGZvciBtb3JlIGRldGFpbHMuCisuVFAKKy5CIHJlc2l6ZV9pbm9kZQorLmJyCitUaGlzIGZpbGUgc3lzdGVtIGZlYXR1cmUgaW5kaWNhdGVzIHRoYXQgc3BhY2UgaGFzIGJlZW4gcmVzZXJ2ZWQgc28KK3RoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGNhbiBiZSBleHRlbmRlZCBieSB0aGUgZmlsZSBzeXN0ZW0gaXMKK3Jlc2l6ZWQgd2hpbGUgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQuICBUaGUgb25saW5lIHJlc2l6ZSBvcGVyYXRpb24KK2lzIGNhcnJpZWQgb3V0IGJ5IHRoZSBrZXJuZWwsIHRyaWdnZXJlZCwgYnkKKy5CUiByZXNpemUyZnMgKDgpLgorQnkgZGVmYXVsdAorLkIgbWtlMmZzCit3aWxsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBlbm91Z2ggc3BhY2Ugc28gdGhhdCB0aGUKK2ZpbGVzeXN0ZW0gbWF5IGdyb3cgdG8gMTAyNCB0aW1lcyBpdHMgaW5pdGlhbCBzaXplLiAgVGhpcyBjYW4gYmUgY2hhbmdlZAordXNpbmcgdGhlCisuQiByZXNpemUKK2V4dGVuZGVkIG9wdGlvbi4KKy5JUAorVGhpcyBmZWF0dXJlIHJlcXVpcmVzIHRoYXQgdGhlCisuQiBzcGFyc2Vfc3VwZXIKK2ZlYXR1cmUgYmUgZW5hYmxlZC4KKy5UUAorLkIgc3BhcnNlX3N1cGVyCisuYnIKK1RoaXMgZmlsZSBzeXN0ZW0gZmVhdHVyZSBpcyBzZXQgb24gYWxsIG1vZGVybiBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlCitzeXN0ZW0uICBJdCBpbmRpY2F0ZXMgdGhhdCBiYWNrdXAgY29waWVzIG9mIHRoZSBzdXBlcmJsb2NrIGFuZCBibG9jaworZ3JvdXAgZGVzY3JpcHRvcnMgYmUgcHJlc2VudCBvbmx5IG9uIGEgZmV3IGJsb2NrIGdyb3VwcywgYW5kIG5vdCBhbGwgb2YKK3RoZW0uCisuVFAKKy5CIHVuaW5pdF9iZworLmJyCitUaGlzIGV4dDQgZmlsZSBzeXN0ZW0gZmVhdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK3dpbGwgYmUgcHJvdGVjdGVkIHVzaW5nIGNoZWNrc3VtcywgbWFraW5nIGl0IHNhZmUgZm9yCisuQlIgbWtlMmZzICg4KQordG8gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gd2l0aG91dCBpbml0aWFsaXppbmcgYWxsIG9mIHRoZSBibG9jayBncm91cHMuCitUaGUga2VybmVsIHdpbGwga2VlcCBhIGhpZ2ggd2F0ZXJtYXJrIG9mIHVudXNlZCBpbm9kZXMsIGFuZCBpbml0aWFsaXplCitpbm9kZSB0YWJsZXMgYW5kIGJsb2NrIGxhemlseS4gIFRoaXMgZmVhdHVyZSBzcGVlZHMgdXAgdGhlIHRpbWUgdG8gY2hlY2sKK3RoZSBmaWxlIHN5c3RlbSB1c2luZworLkJSIGUyZnNjayAoOCksCithbmQgaXQgYWxzbyBzcGVlZHMgdXAgdGhlIHRpbWUgcmVxdWlyZWQgZm9yCisuQlIgbWtlMmZzICg4KQordG8gY3JlYXRlIHRoZSBmaWxlIHN5c3RlbS4KKy5SRQorLlNIIFNFRSBBTFNPCisuQlIgbWtlMmZzICg4KSwKKy5CUiBta2UyZnMuY29uZiAoNSksCisuQlIgZTJmc2NrICg4KSwKKy5CUiBkdW1wZTJmcyAoOCksCisuQlIgdHVuZTJmcyAoOCksCisuQlIgZGVidWdmcyAoOCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2ZpbGVmcmFnLjguaW4gYi9lMmZzcHJvZ3MvbWlzYy9maWxlZnJhZy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZDdiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9maWxlZnJhZy44LmluCkBAIC0wLDAgKzEsNjIgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggRklMRUZSQUcgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZmlsZWZyYWcgXC0gcmVwb3J0IG9uIGZpbGUgZnJhZ21lbnRhdGlvbgorLlNIIFNZTk9QU0lTCisuQiBmaWxlZnJhZworWworLkJJIFwtYiBibG9ja3NpemUKK10KK1sKKy5CIFwtQmVrc3Z4WAorXQorWworLkkgZmlsZXMuLi4KK10KKy5TSCBERVNDUklQVElPTgorLkIgZmlsZWZyYWcKK3JlcG9ydHMgb24gaG93IGJhZGx5IGZyYWdtZW50ZWQgYSBwYXJ0aWN1bGFyIGZpbGUgbWlnaHQgYmUuICBJdCBtYWtlcyAKK2FsbG93YW5jZXMgZm9yIGluZGlyZWN0IGJsb2NrcyBmb3IgZXh0MiBhbmQgZXh0MyBmaWxlc3lzdGVtcywgYnV0IGNhbiBiZQordXNlZCBvbiBmaWxlcyBmb3IgYW55IGZpbGVzeXN0ZW0uCisuUFAKK1RoZSAKKy5CIGZpbGVmcmFnCitwcm9ncmFtIGluaXRpYWxseSBhdHRlbXB0cyB0byBnZXQgdGhlCitleHRlbnQgaW5mb3JtYXRpb24gdXNpbmcgRklFTUFQIGlvY3RsIHdoaWNoIGlzIG1vcmUgZWZmaWNpZW50IGFuZCBmYXN0ZXIuCitJZiBGSUVNQVAgaXMgbm90IHN1cHBvcnRlZCB0aGVuIGZpbGVmcmFnIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIEZJQk1BUC4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtQgorRm9yY2UgdGhlIHVzZSBvZiB0aGUgb2xkZXIgRklCTUFQIGlvY3RsIGluc3RlYWQgb2YgdGhlIEZJRU1BUCBpb2N0bCBmb3IKK3Rlc3RpbmcgcHVycG9zZXMuCisuVFAKKy5CSSBcLWIgYmxvY2tzaXplCitVc2UKKy5JIGJsb2Nrc2l6ZQoraW4gYnl0ZXMgZm9yIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSBmaWxlc3lzdGVtIGJsb2Nrc2l6ZS4KK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZgorLkJSIGZpbGVmcmFnICwKK2lmCisuSSBibG9ja3NpemUKK2lzIHVuc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIDEwMjQgYnl0ZXMuCisuVFAKKy5CIFwtZQorUHJpbnQgb3V0cHV0IGluIGV4dGVudCBmb3JtYXQsIGV2ZW4gZm9yIGJsb2NrLW1hcHBlZCBmaWxlcy4KKy5UUAorLkJJIFwtaworVXNlIDEwMjRcLWJ5dGUgYmxvY2tzaXplIGZvciBvdXRwdXQgKGlkZW50aWNhbCB0byAnXC1iIDEwMjQnKS4KKy5UUAorLkIgXC1zCitTeW5jIHRoZSBmaWxlIGJlZm9yZSByZXF1ZXN0aW5nIHRoZSBtYXBwaW5nLgorLlRQCisuQiBcLXYKK0JlIHZlcmJvc2Ugd2hlbiBjaGVja2luZyBmb3IgZmlsZSBmcmFnbWVudGF0aW9uLgorLlRQCisuQiBcLXgKK0Rpc3BsYXkgbWFwcGluZyBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzLgorLlRQCisuQiBcLVgKK0Rpc3BsYXkgZXh0ZW50IGJsb2NrIG51bWJlcnMgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LgorLlNIIEFVVEhPUgorLkIgZmlsZWZyYWcKK3dhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+LgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZmlsZWZyYWcuYyBiL2UyZnNwcm9ncy9taXNjL2ZpbGVmcmFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzMGEyOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2ZpbGVmcmFnLmMKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBmaWxlZnJhZy5jIC0tIHJlcG9ydCBpZiBhIHBhcnRpY3VsYXIgZmlsZSBpcyBmcmFnbWVudGVkCisgKgorICogQ29weXJpZ2h0IDIwMDMgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpZm5kZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IG1haW4odm9pZCkgeworCWZwdXRzKCJUaGlzIHByb2dyYW0gaXMgb25seSBzdXBwb3J0ZWQgb24gTGludXghXG4iLCBzdGRlcnIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKyNlbHNlCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kOworI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvZmQuaD4KKyNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJfdHlwZXMuaD4KKyNpbmNsdWRlIDxleHQyZnMvZmllbWFwLmg+CisKK2ludCB2ZXJib3NlID0gMDsKK2ludCBibG9ja3NpemU7CQkvKiBVc2Ugc3BlY2lmaWVkIGJsb2Nrc2l6ZSAoZGVmYXVsdCAxa0IpICovCitpbnQgc3luY19maWxlID0gMDsJLyogZnN5bmMgZmlsZSBiZWZvcmUgZ2V0dGluZyB0aGUgbWFwcGluZyAqLworaW50IHhhdHRyX21hcCA9IDA7CS8qIGdldCB4YXR0ciBtYXBwaW5nICovCitpbnQgZm9yY2VfYm1hcDsJLyogZm9yY2UgdXNlIG9mIEZJQk1BUCBpbnN0ZWFkIG9mIEZJRU1BUCAqLworaW50IGZvcmNlX2V4dGVudDsJLyogcHJpbnQgb3V0cHV0IGluIGV4dGVudCBmb3JtYXQgYWx3YXlzICovCitpbnQgbG9naWNhbF93aWR0aCA9IDg7CitpbnQgcGh5c2ljYWxfd2lkdGggPSAxMDsKK2NvbnN0IGNoYXIgKmV4dF9mbXQgPSAiJTRkOiAlKmxsdS4uJSpsbHU6ICUqbGx1Li4lKmxsdTogJTZsbHU6ICVzXG4iOworY29uc3QgY2hhciAqaGV4X2ZtdCA9ICIlNGQ6ICUqbGx4Li4lKmxseDogJSpsbHguLiUqbGx4OiAlNmxseDogJXNcbiI7CisKKyNkZWZpbmUgRklMRUZSQUdfRklFTUFQX0ZMQUdTX0NPTVBBVCAoRklFTUFQX0ZMQUdfU1lOQyB8IEZJRU1BUF9GTEFHX1hBVFRSKQorCisjZGVmaW5lIEZJQk1BUAkJX0lPKDB4MDAsIDEpCS8qIGJtYXAgYWNjZXNzICovCisjZGVmaW5lIEZJR0VUQlNaCV9JTygweDAwLCAyKQkvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqLworCisjZGVmaW5lIExVU1RSRV9TVVBFUl9NQUdJQyAweDBCRDAwQkQwCisKKyNkZWZpbmUJRVhUNF9FWFRFTlRTX0ZMCQkJMHgwMDA4MDAwMCAvKiBJbm9kZSB1c2VzIGV4dGVudHMgKi8KKyNkZWZpbmUJRVhUM19JT0NfR0VURkxBR1MJCV9JT1IoJ2YnLCAxLCBsb25nKQorCitzdGF0aWMgaW50IGludF9sb2cyKGludCBhcmcpCit7CisJaW50ICAgICBsID0gMDsKKworCWFyZyA+Pj0gMTsKKwl3aGlsZSAoYXJnKSB7CisJCWwrKzsKKwkJYXJnID4+PSAxOworCX0KKwlyZXR1cm4gbDsKK30KKworc3RhdGljIGludCBpbnRfbG9nMTAodW5zaWduZWQgbG9uZyBsb25nIGFyZykKK3sKKwlpbnQgICAgIGwgPSAwOworCisJYXJnID0gYXJnIC8gMTA7CisJd2hpbGUgKGFyZykgeworCQlsKys7CisJCWFyZyA9IGFyZyAvIDEwOworCX0KKwlyZXR1cm4gbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkaXZfY2VpbCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisJaWYgKCFhKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKChhIC0gMSkgLyBiKSArIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2JtYXAoaW50IGZkLCB1bnNpZ25lZCBsb25nIGJsb2NrLCB1bnNpZ25lZCBsb25nICpwaHlfYmxrKQoreworCWludAlyZXQ7CisJdW5zaWduZWQgaW50IGI7CisKKwliID0gYmxvY2s7CisJcmV0ID0gaW9jdGwoZmQsIEZJQk1BUCwgJmIpOyAvKiBGSUJNQVAgdGFrZXMgcG9pbnRlciB0byBpbnRlZ2VyICovCisJaWYgKHJldCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVQRVJNKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHBlcm1pc3Npb24gdG8gdXNlIEZJQk1BUCBpb2N0bDsgIgorCQkJCSJtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzXG4iKTsKKwkJfQorCX0KKwkqcGh5X2JsayA9IGI7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9leHRlbnRfaGVhZGVyKHZvaWQpCit7CisJcHJpbnRmKCIgZXh0OiAlKnMgJSpzIGxlbmd0aDogJSpzIGZsYWdzOlxuIiwKKwkgICAgICAgbG9naWNhbF93aWR0aCAqIDIgKyAzLAorCSAgICAgICAibG9naWNhbF9vZmZzZXQ6IiwKKwkgICAgICAgcGh5c2ljYWxfd2lkdGggKiAyICsgMywgInBoeXNpY2FsX29mZnNldDoiLAorCSAgICAgICBwaHlzaWNhbF93aWR0aCArIDEsCisJICAgICAgICJleHBlY3RlZDoiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZXh0ZW50X2luZm8oc3RydWN0IGZpZW1hcF9leHRlbnQgKmZtX2V4dGVudCwgaW50IGN1cl9leCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZCwgaW50IGJsa19zaGlmdCwKKwkJCSAgICAgIGV4dDJmc19zdHJ1Y3Rfc3RhdCAqc3QpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHBoeXNpY2FsX2JsazsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbG9naWNhbF9ibGs7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4dF9sZW47CisJdW5zaWduZWQgbG9uZyBsb25nIGV4dF9ibGtzOworCWNoYXIgZmxhZ3NbMjU2XSA9ICIiOworCisJLyogRm9yIGlubGluZSBkYXRhIGFsbCBvZmZzZXRzIHNob3VsZCBiZSBpbiBieXRlcywgbm90IGJsb2NrcyAqLworCWlmIChmbV9leHRlbnQtPmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSkKKwkJYmxrX3NoaWZ0ID0gMDsKKworCWV4dF9sZW4gPSBmbV9leHRlbnQtPmZlX2xlbmd0aCA+PiBibGtfc2hpZnQ7CisJZXh0X2Jsa3MgPSAoZm1fZXh0ZW50LT5mZV9sZW5ndGggLSAxKSA+PiBibGtfc2hpZnQ7CisJbG9naWNhbF9ibGsgPSBmbV9leHRlbnQtPmZlX2xvZ2ljYWwgPj4gYmxrX3NoaWZ0OworCXBoeXNpY2FsX2JsayA9IGZtX2V4dGVudC0+ZmVfcGh5c2ljYWwgPj4gYmxrX3NoaWZ0OworCisJaWYgKGV4cGVjdGVkKQorCQlzcHJpbnRmKGZsYWdzLCBleHRfZm10ID09IGhleF9mbXQgPyAiJSpsbHg6ICIgOiAiJSpsbHU6ICIsCisJCQlwaHlzaWNhbF93aWR0aCwgZXhwZWN0ZWQgPj4gYmxrX3NoaWZ0KTsKKwllbHNlCisJCXNwcmludGYoZmxhZ3MsICIlLipzICAiLCBwaHlzaWNhbF93aWR0aCwgIiAgICAgICAgICAgICAgICAgICAiKTsKKworCWlmIChmbV9leHRlbnQtPmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9VTktOT1dOKQorCQlzdHJjYXQoZmxhZ3MsICJ1bmtub3duLCIpOworCWlmIChmbV9leHRlbnQtPmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9ERUxBTExPQykKKwkJc3RyY2F0KGZsYWdzLCAiZGVsYWxsb2MsIik7CisJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX0RBVEFfRU5DUllQVEVEKQorCQlzdHJjYXQoZmxhZ3MsICJlbmNyeXB0ZWQsIik7CisJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEKQorCQlzdHJjYXQoZmxhZ3MsICJub3RfYWxpZ25lZCwiKTsKKwlpZiAoZm1fZXh0ZW50LT5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkUpCisJCXN0cmNhdChmbGFncywgImlubGluZSwiKTsKKwlpZiAoZm1fZXh0ZW50LT5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRfREFUQV9UQUlMKQorCQlzdHJjYXQoZmxhZ3MsICJ0YWlsX3BhY2tlZCwiKTsKKwlpZiAoZm1fZXh0ZW50LT5mZV9mbGFncyAmIEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOKQorCQlzdHJjYXQoZmxhZ3MsICJ1bndyaXR0ZW4sIik7CisJaWYgKGZtX2V4dGVudC0+ZmVfZmxhZ3MgJiBGSUVNQVBfRVhURU5UX01FUkdFRCkKKwkJc3RyY2F0KGZsYWdzLCAibWVyZ2VkLCIpOworCisJaWYgKGZtX2V4dGVudC0+ZmVfbG9naWNhbCArIGZtX2V4dGVudC0+ZmVfbGVuZ3RoID49IChfX3U2NCkgc3QtPnN0X3NpemUpCisJCXN0cmNhdChmbGFncywgImVvZiwiKTsKKworCS8qIFJlbW92ZSB0cmFpbGluZyBjb21tYSwgaWYgYW55ICovCisJaWYgKGZsYWdzWzBdKQorCQlmbGFnc1tzdHJsZW4oZmxhZ3MpIC0gMV0gPSAnXDAnOworCisJcHJpbnRmKGV4dF9mbXQsIGN1cl9leCwgbG9naWNhbF93aWR0aCwgbG9naWNhbF9ibGssCisJICAgICAgIGxvZ2ljYWxfd2lkdGgsIGxvZ2ljYWxfYmxrICsgZXh0X2Jsa3MsCisJICAgICAgIHBoeXNpY2FsX3dpZHRoLCBwaHlzaWNhbF9ibGssCisJICAgICAgIHBoeXNpY2FsX3dpZHRoLCBwaHlzaWNhbF9ibGsgKyBleHRfYmxrcywKKwkgICAgICAgZXh0X2xlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGZpbGVmcmFnX2ZpZW1hcChpbnQgZmQsIGludCBibGtfc2hpZnQsIGludCAqbnVtX2V4dGVudHMsCisJCQkgICBleHQyZnNfc3RydWN0X3N0YXQgKnN0KQoreworCWNoYXIgYnVmWzE2Mzg0XTsKKwlzdHJ1Y3QgZmllbWFwICpmaWVtYXAgPSAoc3RydWN0IGZpZW1hcCAqKWJ1ZjsKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudCAqZm1fZXh0ID0gJmZpZW1hcC0+Zm1fZXh0ZW50c1swXTsKKwlpbnQgY291bnQgPSAoc2l6ZW9mKGJ1ZikgLSBzaXplb2YoKmZpZW1hcCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgZmllbWFwX2V4dGVudCk7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdGF0aWMgaW50IGZpZW1hcF9pbmNvbXBhdF9wcmludGVkOworCWludCBmaWVtYXBfaGVhZGVyX3ByaW50ZWQgPSAwOworCWludCB0b3RfZXh0ZW50cyA9IDAsIG4gPSAwOworCWludCBsYXN0ID0gMDsKKwlpbnQgcmM7CisKKwltZW1zZXQoZmllbWFwLCAwLCBzaXplb2Yoc3RydWN0IGZpZW1hcCkpOworCisJaWYgKHN5bmNfZmlsZSkKKwkJZmxhZ3MgfD0gRklFTUFQX0ZMQUdfU1lOQzsKKworCWlmICh4YXR0cl9tYXApCisJCWZsYWdzIHw9IEZJRU1BUF9GTEFHX1hBVFRSOworCisJZG8geworCQlmaWVtYXAtPmZtX2xlbmd0aCA9IH4wVUxMOworCQlmaWVtYXAtPmZtX2ZsYWdzID0gZmxhZ3M7CisJCWZpZW1hcC0+Zm1fZXh0ZW50X2NvdW50ID0gY291bnQ7CisJCXJjID0gaW9jdGwoZmQsIEZTX0lPQ19GSUVNQVAsICh1bnNpZ25lZCBsb25nKSBmaWVtYXApOworCQlpZiAocmMgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUJBRFIgJiYgZmllbWFwX2luY29tcGF0X3ByaW50ZWQgPT0gMCkgeworCQkJCXByaW50ZigiRklFTUFQIGZhaWxlZCB3aXRoIHVuc3VwcG9ydGVkICIKKwkJCQkgICAgICAgImZsYWdzICV4XG4iLCBmaWVtYXAtPmZtX2ZsYWdzKTsKKwkJCQlmaWVtYXBfaW5jb21wYXRfcHJpbnRlZCA9IDE7CisJCQl9CisJCQlyZXR1cm4gcmM7CisJCX0KKworCQkvKiBJZiAwIGV4dGVudHMgYXJlIHJldHVybmVkLCB0aGVuIG1vcmUgaW9jdGxzIGFyZSBub3QgbmVlZGVkICovCisJCWlmIChmaWVtYXAtPmZtX21hcHBlZF9leHRlbnRzID09IDApCisJCQlicmVhazsKKworCQlpZiAodmVyYm9zZSAmJiAhZmllbWFwX2hlYWRlcl9wcmludGVkKSB7CisJCQlwcmludF9leHRlbnRfaGVhZGVyKCk7CisJCQlmaWVtYXBfaGVhZGVyX3ByaW50ZWQgPSAxOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGZpZW1hcC0+Zm1fbWFwcGVkX2V4dGVudHM7IGkrKykgeworCQkJaWYgKGZtX2V4dFtpXS5mZV9sb2dpY2FsICE9IDAgJiYKKwkJCSAgICBmbV9leHRbaV0uZmVfcGh5c2ljYWwgIT0gZXhwZWN0ZWQpIHsKKwkJCQl0b3RfZXh0ZW50cysrOworCQkJfSBlbHNlIHsKKwkJCQlleHBlY3RlZCA9IDA7CisJCQkJaWYgKCF0b3RfZXh0ZW50cykKKwkJCQkJdG90X2V4dGVudHMgPSAxOworCQkJfQorCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRfZXh0ZW50X2luZm8oJmZtX2V4dFtpXSwgbiwgZXhwZWN0ZWQsCisJCQkJCQkgIGJsa19zaGlmdCwgc3QpOworCisJCQlleHBlY3RlZCA9IGZtX2V4dFtpXS5mZV9waHlzaWNhbCArIGZtX2V4dFtpXS5mZV9sZW5ndGg7CisJCQlpZiAoZm1fZXh0W2ldLmZlX2ZsYWdzICYgRklFTUFQX0VYVEVOVF9MQVNUKQorCQkJCWxhc3QgPSAxOworCQkJbisrOworCQl9CisKKwkJZmllbWFwLT5mbV9zdGFydCA9IChmbV9leHRbaSAtIDFdLmZlX2xvZ2ljYWwgKworCQkJCSAgICBmbV9leHRbaSAtIDFdLmZlX2xlbmd0aCk7CisJfSB3aGlsZSAobGFzdCA9PSAwKTsKKworCSpudW1fZXh0ZW50cyA9IHRvdF9leHRlbnRzOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgRVhUMl9ESVJFQ1QJMTIKKworc3RhdGljIGludCBmaWxlZnJhZ19maWJtYXAoaW50IGZkLCBpbnQgYmxrX3NoaWZ0LCBpbnQgKm51bV9leHRlbnRzLAorCQkJICAgZXh0MmZzX3N0cnVjdF9zdGF0ICpzdCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnVtYmxvY2tzLCBpbnQgaXNfZXh0MikKK3sKKwlzdHJ1Y3QgZmllbWFwX2V4dGVudAlmbV9leHQ7CisJdW5zaWduZWQgbG9uZwkJaSwgbGFzdF9ibG9jazsKKwl1bnNpZ25lZCBsb25nIGxvbmcJbG9naWNhbDsKKwkJCQkvKiBCbG9ja3MgcGVyIGluZGlyZWN0IGJsb2NrICovCisJY29uc3QgbG9uZwkJYnBpYiA9IHN0LT5zdF9ibGtzaXplIC8gNDsKKwlpbnQJCQljb3VudDsKKworCWlmIChmb3JjZV9leHRlbnQpIHsKKwkJbWVtc2V0KCZmbV9leHQsIDAsIHNpemVvZihmbV9leHQpKTsKKwkJZm1fZXh0LmZlX2ZsYWdzID0gRklFTUFQX0VYVEVOVF9NRVJHRUQ7CisJfQorCisJaWYgKHN5bmNfZmlsZSkKKwkJZnN5bmMoZmQpOworCisJZm9yIChpID0gMCwgbG9naWNhbCA9IDAsICpudW1fZXh0ZW50cyA9IDAsIGNvdW50ID0gbGFzdF9ibG9jayA9IDA7CisJICAgICBpIDwgbnVtYmxvY2tzOworCSAgICAgaSsrLCBsb2dpY2FsICs9IHN0LT5zdF9ibGtzaXplKSB7CisJCXVuc2lnbmVkIGxvbmcgYmxvY2sgPSAwOworCQlpbnQgcmM7CisKKwkJaWYgKGlzX2V4dDIgJiYgbGFzdF9ibG9jaykgeworCQkJaWYgKCgoaSAtIEVYVDJfRElSRUNUKSAlIGJwaWIpID09IDApCisJCQkJbGFzdF9ibG9jaysrOworCQkJaWYgKCgoaSAtIEVYVDJfRElSRUNUIC0gYnBpYikgJSAoYnBpYiAqIGJwaWIpKSA9PSAwKQorCQkJCWxhc3RfYmxvY2srKzsKKwkJCWlmICgoKGkgLSBFWFQyX0RJUkVDVCAtIGJwaWIgLSBicGliICogYnBpYikgJQorCQkJICAgICAoKCh1bnNpZ25lZCBsb25nIGxvbmcpYnBpYikgKiBicGliICogYnBpYikpID09IDApCisJCQkJbGFzdF9ibG9jaysrOworCQl9CisJCXJjID0gZ2V0X2JtYXAoZmQsIGksICZibG9jayk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWlmIChibG9jayA9PSAwKQorCQkJY29udGludWU7CisJCWlmICgqbnVtX2V4dGVudHMgPT0gMCkgeworCQkJKCpudW1fZXh0ZW50cykrKzsKKwkJCWlmIChmb3JjZV9leHRlbnQpIHsKKwkJCQlwcmludF9leHRlbnRfaGVhZGVyKCk7CisJCQkJZm1fZXh0LmZlX3BoeXNpY2FsID0gYmxvY2sgKiBzdC0+c3RfYmxrc2l6ZTsKKwkJCX0KKwkJfQorCQljb3VudCsrOworCQlpZiAoZm9yY2VfZXh0ZW50ICYmIGxhc3RfYmxvY2sgIT0gMCAmJgorCQkgICAgKGJsb2NrICE9IGxhc3RfYmxvY2sgKyAxIHx8CisJCSAgICAgZm1fZXh0LmZlX2xvZ2ljYWwgKyBmbV9leHQuZmVfbGVuZ3RoICE9IGxvZ2ljYWwpKSB7CisJCQlwcmludF9leHRlbnRfaW5mbygmZm1fZXh0LCAqbnVtX2V4dGVudHMgLSAxLAorCQkJCQkgIChsYXN0X2Jsb2NrICsgMSkgKiBzdC0+c3RfYmxrc2l6ZSwKKwkJCQkJICBibGtfc2hpZnQsIHN0KTsKKwkJCWZtX2V4dC5mZV9sb2dpY2FsID0gbG9naWNhbDsKKwkJCWZtX2V4dC5mZV9waHlzaWNhbCA9IGJsb2NrICogc3QtPnN0X2Jsa3NpemU7CisJCQlmbV9leHQuZmVfbGVuZ3RoID0gMDsKKwkJCSgqbnVtX2V4dGVudHMpKys7CisJCX0gZWxzZSBpZiAodmVyYm9zZSAmJiBsYXN0X2Jsb2NrICYmIChibG9jayAhPSBsYXN0X2Jsb2NrICsgMSkpIHsKKwkJCXByaW50ZigiRGlzY29udGludWl0eTogQmxvY2sgJWxkIGlzIGF0ICVsdSAod2FzICVsdSlcbiIsCisJCQkgICAgICAgaSwgYmxvY2ssIGxhc3RfYmxvY2sgKyAxKTsKKwkJCSgqbnVtX2V4dGVudHMpKys7CisJCX0KKwkJZm1fZXh0LmZlX2xlbmd0aCArPSBzdC0+c3RfYmxrc2l6ZTsKKwkJbGFzdF9ibG9jayA9IGJsb2NrOworCX0KKworCWlmIChmb3JjZV9leHRlbnQpCisJCXByaW50X2V4dGVudF9pbmZvKCZmbV9leHQsICpudW1fZXh0ZW50cyAtIDEsCisJCQkJICBsYXN0X2Jsb2NrICogc3QtPnN0X2Jsa3NpemUsIGJsa19zaGlmdCwgc3QpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBmcmFnX3JlcG9ydChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0YXRmcyBmc2luZm87CisJZXh0MmZzX3N0cnVjdF9zdGF0IHN0OworCWludAkJYmxrX3NoaWZ0OworCWxvbmcJCWZkOworCXVuc2lnbmVkIGxvbmcJbnVtYmxvY2tzOworCWludAkJZGF0YV9ibG9ja3NfcGVyX2N5bCA9IDE7CisJaW50CQludW1fZXh0ZW50cyA9IDEsIGV4cGVjdGVkID0gfjA7CisJaW50CQlpc19leHQyID0gMDsKKwlzdGF0aWMgZGV2X3QJbGFzdF9kZXZpY2U7CisJdW5zaWduZWQgaW50CWZsYWdzOworCWludAkJd2lkdGg7CisKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTjY0KSAmJiAhZGVmaW5lZChfX09TWF9BVkFJTEFCTEVfQlVUX0RFUFJFQ0FURUQpCisJZmQgPSBvcGVuNjQoZmlsZW5hbWUsIE9fUkRPTkxZKTsKKyNlbHNlCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisjZW5kaWYKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigib3BlbiIpOworCQlyZXR1cm47CisJfQorCisjaWYgZGVmaW5lZChIQVZFX0ZTVEFUNjQpICYmICFkZWZpbmVkKF9fT1NYX0FWQUlMQUJMRV9CVVRfREVQUkVDQVRFRCkKKwlpZiAoZnN0YXQ2NChmZCwgJnN0KSA8IDApIHsKKyNlbHNlCisJaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgeworI2VuZGlmCisJCWNsb3NlKGZkKTsKKwkJcGVycm9yKCJzdGF0Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGFzdF9kZXZpY2UgIT0gc3Quc3RfZGV2KSB7CisJCWlmIChmc3RhdGZzKGZkLCAmZnNpbmZvKSA8IDApIHsKKwkJCWNsb3NlKGZkKTsKKwkJCXBlcnJvcigiZnN0YXRmcyIpOworCQkJcmV0dXJuOworCQl9CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCJGaWxlc3lzdGVtIHR5cGUgaXM6ICVseFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZykgZnNpbmZvLmZfdHlwZSk7CisJfQorCXN0LnN0X2Jsa3NpemUgPSBmc2luZm8uZl9ic2l6ZTsKKwlpZiAoaW9jdGwoZmQsIEVYVDNfSU9DX0dFVEZMQUdTLCAmZmxhZ3MpIDwgMCkKKwkJZmxhZ3MgPSAwOworCWlmICghKGZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSAmJgorCSAgICAoKGZzaW5mby5mX3R5cGUgPT0gMHhlZjUxKSB8fCAoZnNpbmZvLmZfdHlwZSA9PSAweGVmNTIpIHx8CisJICAgICAoZnNpbmZvLmZfdHlwZSA9PSAweGVmNTMpKSkKKwkJaXNfZXh0MisrOworCisJaWYgKGlzX2V4dDIpIHsKKwkJbG9uZyBjeWxncm91cHMgPSBkaXZfY2VpbChmc2luZm8uZl9ibG9ja3MsIGZzaW5mby5mX2JzaXplICogOCk7CisKKwkJaWYgKHZlcmJvc2UgJiYgbGFzdF9kZXZpY2UgIT0gc3Quc3RfZGV2KQorCQkJcHJpbnRmKCJGaWxlc3lzdGVtIGN5bGluZGVyIGdyb3VwcyBhcHByb3hpbWF0ZWx5ICVsZFxuIiwKKwkJCSAgICAgICBjeWxncm91cHMpOworCisJCWRhdGFfYmxvY2tzX3Blcl9jeWwgPSBmc2luZm8uZl9ic2l6ZSAqIDggLQorCQkJCQkoZnNpbmZvLmZfZmlsZXMgLyA4IC8gY3lsZ3JvdXBzKSAtIDM7CisJfQorCWxhc3RfZGV2aWNlID0gc3Quc3RfZGV2OworCisJd2lkdGggPSBpbnRfbG9nMTAoZnNpbmZvLmZfYmxvY2tzKTsKKwlpZiAod2lkdGggPiBwaHlzaWNhbF93aWR0aCkKKwkJcGh5c2ljYWxfd2lkdGggPSB3aWR0aDsKKworCW51bWJsb2NrcyA9IChzdC5zdF9zaXplICsgZnNpbmZvLmZfYnNpemUgLSAxKSAvIGZzaW5mby5mX2JzaXplOworCWlmIChibG9ja3NpemUgIT0gMCkKKwkJYmxrX3NoaWZ0ID0gaW50X2xvZzIoYmxvY2tzaXplKTsKKwllbHNlCisJCWJsa19zaGlmdCA9IGludF9sb2cyKGZzaW5mby5mX2JzaXplKTsKKworCXdpZHRoID0gaW50X2xvZzEwKG51bWJsb2Nrcyk7CisJaWYgKHdpZHRoID4gbG9naWNhbF93aWR0aCkKKwkJbG9naWNhbF93aWR0aCA9IHdpZHRoOworCWlmICh2ZXJib3NlKQorCQlwcmludGYoIkZpbGUgc2l6ZSBvZiAlcyBpcyAlbGx1ICglbHUgYmxvY2slcyBvZiAlZCBieXRlcylcbiIsCisJCSAgICAgICBmaWxlbmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdC5zdF9zaXplLAorCQkgICAgICAgbnVtYmxvY2tzICogZnNpbmZvLmZfYnNpemUgPj4gYmxrX3NoaWZ0LAorCQkgICAgICAgbnVtYmxvY2tzID09IDEgPyAiIiA6ICJzIiwgMSA8PCBibGtfc2hpZnQpOworCisJaWYgKGZvcmNlX2JtYXAgfHwKKwkgICAgZmlsZWZyYWdfZmllbWFwKGZkLCBibGtfc2hpZnQsICZudW1fZXh0ZW50cywgJnN0KSAhPSAwKSB7CisJCWV4cGVjdGVkID0gZmlsZWZyYWdfZmlibWFwKGZkLCBibGtfc2hpZnQsICZudW1fZXh0ZW50cywKKwkJCQkJICAgJnN0LCBudW1ibG9ja3MsIGlzX2V4dDIpOworCQlpZiAoZXhwZWN0ZWQgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RUWSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZJQk1BUCB1bnN1cHBvcnRlZFxuIiwKKwkJCQkJZmlsZW5hbWUpOworCQkJfSBlbHNlIGlmIChlcnJubyAhPSBFUEVSTSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZJQk1BUCBlcnJvcjogJXMiLAorCQkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCX0KKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisJCWV4cGVjdGVkID0gZXhwZWN0ZWQgLyBkYXRhX2Jsb2Nrc19wZXJfY3lsICsgMTsKKwl9CisKKwlpZiAobnVtX2V4dGVudHMgPT0gMSkKKwkJcHJpbnRmKCIlczogMSBleHRlbnQgZm91bmQiLCBmaWxlbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiVzOiAlZCBleHRlbnRzIGZvdW5kIiwgZmlsZW5hbWUsIG51bV9leHRlbnRzKTsKKwkvKiBjb3VudCwgYW5kIHRodXMgZXhwZWN0ZWQsIG9ubHkgc2V0IGZvciBpbmRpcmVjdCBGSUJNQVAnZCBmaWxlcyAqLworCWlmIChpc19leHQyICYmIGV4cGVjdGVkICYmIGV4cGVjdGVkIDwgbnVtX2V4dGVudHMpCisJCXByaW50ZigiLCBwZXJmZWN0aW9uIHdvdWxkIGJlICVkIGV4dGVudCVzXG4iLCBleHBlY3RlZCwKKwkJCShleHBlY3RlZCA+IDEpID8gInMiIDogIiIpOworCWVsc2UKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK291dF9jbG9zZToKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstYntibG9ja3NpemV9XSBbLUJla2xzdnhYXSBmaWxlIC4uLlxuIiwKKwkJcHJvZ25hbWUpOworCWV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiphcmd2KQoreworCWNoYXIgKipjcHA7CisJaW50IGM7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIkJiOjpla3N2eFgiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnQic6CisJCQlmb3JjZV9ibWFwKys7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCQlpZiAob3B0YXJnKSB7CisJCQkJY2hhciAqZW5kOworCQkJCWJsb2Nrc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCAmZW5kLCAwKTsKKwkJCQlpZiAoZW5kKSB7CisJCQkJCXN3aXRjaCAoZW5kWzBdKSB7CisJCQkJCWNhc2UgJ2cnOgorCQkJCQljYXNlICdHJzoKKwkJCQkJCWJsb2Nrc2l6ZSAqPSAxMDI0OworCQkJCQkJLyogbm8gYnJlYWsgKi8KKwkJCQkJY2FzZSAnbSc6CisJCQkJCWNhc2UgJ00nOgorCQkJCQkJYmxvY2tzaXplICo9IDEwMjQ7CisJCQkJCQkvKiBubyBicmVhayAqLworCQkJCQljYXNlICdrJzoKKwkJCQkJY2FzZSAnSyc6CisJCQkJCQlibG9ja3NpemUgKj0gMTAyNDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeyAvKiBBbGxvdyAtYiB3aXRob3V0IGFyZ3VtZW50IGZvciBjb21wYXQuIFJlbW92ZQorCQkJCSAgKiB0aGlzIGV2ZW50dWFsbHkgc28gIi1iIHtibG9ja3NpemV9IiB3b3JrcyAqLworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IC1iIG5lZWRzIGEgYmxvY2tzaXplICIKKwkJCQkJIm9wdGlvbiwgYXNzdW1pbmcgMTAyNC1ieXRlIGJsb2Nrcy5cbiIsCisJCQkJCWFyZ3ZbMF0pOworCQkJCWJsb2Nrc2l6ZSA9IDEwMjQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlmb3JjZV9leHRlbnQrKzsKKwkJCWlmICghdmVyYm9zZSkKKwkJCQl2ZXJib3NlKys7CisJCQlicmVhazsKKwkJY2FzZSAnayc6CisJCQlibG9ja3NpemUgPSAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3luY19maWxlKys7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlKys7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQl4YXR0cl9tYXArKzsKKwkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJCWV4dF9mbXQgPSBoZXhfZm10OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZShhcmd2WzBdKTsKKwkJCWJyZWFrOworCQl9CisJaWYgKG9wdGluZCA9PSBhcmdjKQorCQl1c2FnZShhcmd2WzBdKTsKKwlmb3IgKGNwcD1hcmd2K29wdGluZDsgKmNwcDsgY3BwKyspCisJCWZyYWdfcmVwb3J0KCpjcHApOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9maW5kZnMuOC5pbiBiL2UyZnNwcm9ncy9taXNjL2ZpbmRmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NGNiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9maW5kZnMuOC5pbgpAQCAtMCwwICsxLDMzIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIEZJTkRGUyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitmaW5kZnMgXC0gRmluZCBhIGZpbGVzeXN0ZW0gYnkgbGFiZWwgb3IgVVVJRAorLlNIIFNZTk9QU0lTCisuQiBmaW5kZnMgCisuQkkgTEFCRUw9IGxhYmVsCisuc3AKKy5CIGZpbmRmcworLkJJIFVVSUQ9IHV1aWQKKy5TSCBERVNDUklQVElPTgorLkIgZmluZGZzCit3aWxsIHNlYXJjaCB0aGUgZGlza3MgaW4gdGhlIHN5c3RlbSBsb29raW5nIGZvciBhIGZpbGVzeXN0ZW0gd2hpY2ggaGFzIAorYSBsYWJlbCBtYXRjaGluZworLkkgbGFiZWwKK29yIGEgVVVJRCBlcXVhbCB0byAKKy5JUiB1dWlkIC4KK0lmIHRoZSBmaWxlc3lzdGVtIGlzIGZvdW5kLCB0aGUgZGV2aWNlIG5hbWUgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwKK2JlIHByaW50ZWQgb24gc3Rkb3V0LgorLlBQCisuU0ggQVVUSE9SCisuQiBmaW5kZnMgCit3YXMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvICh0eXRzb0BtaXQuZWR1KS4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGZpbmRmcworaXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBmc2NrICg4KQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9maW5kc3VwZXIuYyBiL2UyZnNwcm9ncy9taXNjL2ZpbmRzdXBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2M4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9maW5kc3VwZXIuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIGZpbmRzdXBlciAtLS0gcXVpY2sgaGFja2VkIHVwIHByb2dyYW0gdG8gZmluZCBleHQyIHN1cGVyYmxvY2tzLgorICoKKyAqIFRoaXMgaXMgYSBoYWNrLCBhbmQgcmVhbGx5IHNob3VsZG4ndCBiZSBpbnN0YWxsZWQgYW55d2hlcmUuICBJZiB5b3UKKyAqIG5lZWQgYSBwcm9ncmFtIHdoaWNoIGRvZXMgdGhpcyBzb3J0IG9mIGZ1bmN0aW9uYWxpdHksIHBsZWFzZSB0cnkKKyAqIHVzaW5nIGdwYXJ0IHByb2dyYW0uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IDE5OTgtMjAwMCwgVGhlb2RvcmUgVHMnby4KKyAqCisgKiBXZWxsLCBoZXJlJ3MgbXkgbGludXggdmVyc2lvbiBvZiBmaW5kc3VwZXIuCisgKiBJJ20gc3VyZSB5b3UgY291bGRhIGRvbmUgaXQgZmFzdGVyLiAgOikKKyAqIElNSE8gdGhlcmUgaXNuJ3QgYXMgbXVjaCBpbnRlcmVzdGluZyBkYXRhIHRvIHByaW50IGluIHRoZQorICogbGludXggc3VwZXJibG9jayBhcyB0aGVyZSBpcyBpbiB0aGUgU3VuT1Mgc3VwZXJibG9jay0tZGlzayBnZW9tZXRyeSBpcworICogbm90IHRoZXJlLi4uYW5kIGxpbnV4IHNlZW1zIHRvIHVwZGF0ZSB0aGUgZGF0ZXMgaW4gYWxsIHRoZSBzdXBlcmJsb2Nrcy4KKyAqIFN1bk9TIGRvZXNuJ3QgZXZlciB0b3VjaCB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIGFmdGVyIHRoZSBmcyBpcyBjcmVhdGVkLAorICogYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHNvIHRoZSBkYXRlIGlzIG1vcmUgaW50ZXJlc3RpbmcgSU1ITyBhbmQgY2VydGFpbmx5CisgKiBtYXJrcyB3aGljaCBzdXBlcmJsb2NrcyBhcmUgYmFja3VwIG9uZXMuCisgKgorICogSSB3YW50ZWQgdG8gYWRkIG1zZG9zIHN1cHBvcnQsIGJ1dCBJIGNvdWxkbid0IG1ha2UgaGVhZHMgb3IgdGFpbHMKKyAqIG9mIHRoZSBrZXJuZWwgaW5jbHVkZSBmaWxlcyB0byBmaW5kIGFueXRoaW5nIEkgY291bGQgbG9vayBmb3IgaW4gbXNkb3MuCisgKgorICogUmVhZGluZyBldmVyeSBibG9jayBvZiBhIFN1biBwYXJ0aXRpb24gaXMgZmFpcmx5IHF1aWNrLiAgRG9pbmcgdGhlCisgKiBzYW1lIHVuZGVyIGxpbnV4IChzbG93ZXIgaGFyZHdhcmUgSSBzdXBwb3NlKSBqdXN0IGlzbid0IHRoZSBzYW1lLgorICogSXQgbWlnaHQgYmUgbW9yZSB1c2VmdWwgdG8gZGVmYXVsdCB0byByZWFkaW5nIHRoZSBmaXJzdCAoc2Vjb25kPykgYmxvY2sKKyAqIG9uIGVhY2ggY3lsOyBob3dldmVyLCBpZiB0aGUgZGlzayBnZW9tZXRyeSBpcyB3cm9uZywgdGhpcyBpcyB1c2VsZXNzLgorICogQnV0IHlhIGNvdWxkIHN0aWxsIGdldCB0aGUgY3lsIHNpemUgdG8gcHJpbnQgdGhlIG51bWJlcnMgYXMgY3lscyBpbnN0ZWFkCisgKiBvZiBibG9ja3MuLi4KKyAqCisgKiBydW4gdGhpcyBhcyAoZm9yIGV4YW1wbGUpCisgKiAgIGZpbmRzdXBlciAvZGV2L2hkYQorICogICBmaW5kc3VwZXIgL2Rldi9oZGEgNDM3NzYwIDEwMjQgICAobXkgZGlzayBoYXMgY3lscyBvZiA4NTUqNTEyKQorICoKKyAqIEkgc3VwcG9zZSB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ2d1cmUgb3V0IGEgd2F5IHRvIGRldGVybWluZSBpZgorICogdGhlIGJsb2NrIGZvdW5kIGlzIHRoZSBmaXJzdCBzdXBlcmJsb2NrIHNvbWVob3csIGFuZCBpZiBzbywgYnVpbGQKKyAqIGEgcGFydGl0aW9uIHRhYmxlIGZyb20gdGhlIHN1cGVyYmxvY2tzIGZvdW5kLi4uIGJ1dCB0aGlzIGlzIHN0aWxsCisgKiB1c2VmdWwgYXMgaXMuCisgKgorICoJCVN0ZXZlCisgKiBzc2RAbmV2ZXRzLm9hdS5vcmcKKyAqIHNzZEBtYWUuZW5nci51Y2YuZWR1CisgKgorICogQWRkaXRpb25hbCBub3RlcyBieSBBbmRyZWFzIERpbGdlciA8YWRpbGdlckB0dXJib2xpbnV4LmNvbT46CisgKiAtIGZpeGVkIHRvIHN1cHBvcnQgPiAyRyBkZXZpY2VzIGJ5IHVzaW5nIGxzZWVrNjQKKyAqIC0gYWRkIHJlbGlhYmlsaXR5IGNoZWNraW5nIGZvciB0aGUgc3VwZXJibG9jayB0byBhdm9pZCByYW5kb20gZ2FyYmFnZQorICogLSBhZGQgYWRhcHRpdmUgcHJvZ3Jlc3MgbWV0ZXIKKyAqCisgKiBJdCBfc2hvdWxkXyBhbHNvIGhhbmRsZSBzaWduYWxzIGFuZCB0ZWxsIHlvdSB0aGUgZW5kaW5nIGJsb2NrLCBzbworICogdGhhdCB5b3UgY2FuIHJlc3VtZSBhdCBhIGxhdGVyIHRpbWUsIGJ1dCBpdCBkb2Vzbid0IHlldC4uLgorICoKKyAqIE5vdGUgdGhhdCBncGFydCBkb2VzIG5vdCBhcHBlYXIgdG8gZmluZCBhbGwgc3VwZXJibG9ja3MgdGhhdCBhcmVuJ3QgYWxpZ25lZAorICogd2l0aCB0aGUgc3RhcnQgb2YgYSBwb3NzaWJsZSBwYXJ0aXRpb24sIHNvIGl0IGlzIG5vdCB1c2VmdWwgaW4gc3lzdGVtcworICogd2l0aCBMVk0gb3Igc2ltaWxhciBzZXR1cHMgd2hpY2ggZG9uJ3QgdXNlIGZhdCBwYXJ0aXRpb24gYWxpZ25tZW50LgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyoKKyAqIERvY3VtZW50YXRpb24gYWRkZW5kdW0gYWRkZWQgYnkgQW5kcmVhcyBkd2d1ZXN0QHdpbi50dWUubmwvYWViQGN3aS5ubAorICoKKyAqIFRoZSBwcm9ncmFtIGZpbmRzdXBlciBpcyBhIHV0aWxpdHkgdGhhdCBzY2FucyBhIGRpc2sgYW5kIGZpbmRzCisgKiBjb3BpZXMgb2YgZXh0MiBzdXBlcmJsb2NrcyAoYnkgY2hlY2tpbmcgZm9yIHRoZSBleHQyIHNpZ25hdHVyZSkuCisgKgorICogRm9yIGVhY2ggc3VwZXJibG9jayBmb3VuZCwgaXQgcHJpbnRzIHRoZSBvZmZzZXQgaW4gYnl0ZXMsIHRoZQorICogb2Zmc2V0IGluIDEwMjQtYnl0ZSBibG9ja3MsIHRoZSBzaXplIG9mIHRoZSBleHQyIHBhcnRpdGlvbiBpbiBmcworICogYmxvY2tzLCB0aGUgZmlsZXN5c3RlbSBibG9ja3NpemUgKGluIGJ5dGVzKSwgdGhlIGJsb2NrIGdyb3VwIG51bWJlcgorICogKGFsd2F5cyAwIGZvciBvbGRlciBleHQyIHN5c3RlbXMpLCBhbmQgYSB0aW1lc3RhbXAgKHNfbXRpbWUpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBwYXJ0aXRpb25zIHRoYXQgaGF2ZSBiZWVuCisgKiBsb3N0LiAgVGhlIHN1cGVyYmxvY2sgZm9yIGJsb2NrIGdyb3VwIDAgaXMgZm91bmQgMSBibG9jayAoMgorICogc2VjdG9ycykgYWZ0ZXIgdGhlIHBhcnRpdGlvbiBzdGFydC4KKyAqCisgKiBGb3IgbmV3IHN5c3RlbXMgdGhhdCBoYXZlIGEgYmxvY2sgZ3JvdXAgbnVtYmVyIGluIHRoZSBzdXBlcmJsb2NrIGl0CisgKiBpcyBpbW1lZGlhdGVseSBjbGVhciB3aGljaCBzdXBlcmJsb2NrIGlzIHRoZSBmaXJzdCBvZiBhIHBhcnRpdGlvbi4KKyAqIEZvciBvbGQgc3lzdGVtcyB3aGVyZSBubyBncm91cCBudW1iZXJzIGFyZSBnaXZlbiwgdGhlIGZpcnN0CisgKiBzdXBlcmJsb2NrIGNhbiBiZSByZWNvZ25pc2VkIGJ5IHRoZSB0aW1lc3RhbXA6IGFsbCBzdXBlcmJsb2NrCisgKiBjb3BpZXMgaGF2ZSB0aGUgY3JlYXRpb24gdGltZSBpbiBzX210aW1lLCBleGNlcHQgdGhlIGZpcnN0LCB3aGljaAorICogaGFzIHRoZSBsYXN0IHRpbWUgZTJmc2NrIG9yIHR1bmUyZnMgd3JvdGUgdG8gdGhlIGZpbGVzeXN0ZW0uCisgKgorICovCisKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBXSFkoZm10LCBhcmcuLi4pIHsgcHJpbnRmKCJcciVMZDogIiBmbXQsIHNrLCAjI2FyZykgOyBjb250aW51ZTsgfQorI2Vsc2UKKyNkZWZpbmUgV0hZKGZtdCwgYXJnLi4uKSB7IGNvbnRpbnVlOyB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiVXNhZ2U6ICBmaW5kc3VwZXIgZGV2aWNlIFtza2lwYnl0ZXMgW3N0YXJ0a2JdXVxuIikpOworCWV4aXQoMSk7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgc2tpcHJhdGU9NTEyOwkJLyogb25lIHNlY3RvciAqLworCWxvZmZfdCBzaz0wLCBza2w9MDsKKwlpbnQgZmQ7CisJY2hhciAqczsKKwl0aW1lX3QgdG0sIGxhc3QgPSB0aW1lKDApOworCWxvZmZfdCBpbnRlcnZhbCA9IDEwMjQgKiAxMDI0OworCWludCBjLCBwcmludF9qbmxfY29waWVzID0gMDsKKwljb25zdCBjaGFyICogZGV2aWNlX25hbWU7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgZXh0MjsKKwkvKiBpbnRlcmVzdGluZyBmaWVsZHM6IEVYVDJfU1VQRVJfTUFHSUMKKwkgKiAgICAgIHNfYmxvY2tzX2NvdW50IHNfbG9nX2Jsb2NrX3NpemUgc19tdGltZSBzX21hZ2ljIHNfbGFzdGNoZWNrICovCisKKyNpZmRlZiBFTkFCTEVfTkxTCisJc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7CisJYmluZHRleHRkb21haW4oTkxTX0NBVF9OQU1FLCBMT0NBTEVESVIpOworCXRleHRkb21haW4oTkxTX0NBVF9OQU1FKTsKKwlzZXRfY29tX2Vycl9nZXR0ZXh0KGdldHRleHQpOworI2VuZGlmCisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJqIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnaic6CisJCQlwcmludF9qbmxfY29waWVzKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9CisKKwlpZiAob3B0aW5kID09IGFyZ2MpCisJCXVzYWdlKCk7CisKKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworCisJaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwkJc2tpcHJhdGUgPSBzdHJ0b2woYXJndltvcHRpbmRdLCAmcywgMCk7CisJCWlmIChzID09IGFyZ3Zbb3B0aW5kXSkgeworCQkJZnByaW50ZihzdGRlcnIsXygic2tpcGJ5dGVzIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iKSwgcyk7CisJCQlleGl0KDEpOworCQl9CisJCW9wdGluZCsrOworCX0KKwlpZiAoc2tpcHJhdGUgJiAweDFmZikgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oInNraXBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplXG4iKSk7CisJCWV4aXQoMik7CisJfQorCWlmIChvcHRpbmQgPCBhcmdjKSB7CisJCXNrID0gc2tsID0gc3RydG9sbChhcmd2W29wdGluZF0sICZzLCAwKSA8PCAxMDsKKwkJaWYgKHMgPT0gYXJndltvcHRpbmRdKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJzdGFydGtiIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iKSwgcyk7CisJCQlleGl0KDEpOworCQl9CisJCW9wdGluZCsrOworCX0KKwlpZiAoc2sgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJzdGFydGtiIHNob3VsZCBiZSBwb3NpdGl2ZSwgbm90ICVsbHVcbiIpLHNrKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlmZCA9IG9wZW4oZGV2aWNlX25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcihkZXZpY2VfbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJLyogTm93LCBnbyBsb29raW5nIGZvciB0aGUgc3VwZXJibG9jayEgKi8KKwlwcmludGYoXygic3RhcnRpbmcgYXQgJWxsdSwgd2l0aCAldSBieXRlIGluY3JlbWVudHNcbiIpLCBzaywgc2tpcHJhdGUpOworCWlmIChwcmludF9qbmxfY29waWVzKQorCQlwcmludGYoXygiWypdIHByb2JhYmx5IHN1cGVyYmxvY2sgd3JpdHRlbiBpbiB0aGUgZXh0MyAiCisJCQkgImpvdXJuYWwgc3VwZXJibG9jayxcblx0c28gc3RhcnQvZW5kL2dycCB3cm9uZ1xuIikpOworCXByaW50ZihfKCJieXRlX29mZnNldCAgYnl0ZV9zdGFydCAgICAgYnl0ZV9lbmQgIGZzX2Jsb2NrcyBibGtzeiAgZ3JwICBsYXN0X21vdW50X3RpbWUgICAgICAgICAgIHNiX3V1aWQgbGFiZWxcbiIpKTsKKwlmb3IgKDsgbHNlZWs2NChmZCwgc2ssIFNFRUtfU0VUKSAhPSAtMSAmJgorCSAgICAgICByZWFkKGZkLCAmZXh0MiwgNTEyKSA9PSA1MTI7IHNrICs9IHNraXByYXRlKSB7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxhc3RfdXVpZFsxNl0gPSAiYmxhaCI7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBic2l6ZSwgZ3Jwc2l6ZTsKKwkJaW50IGpubF9jb3B5LCBzYl9vZmZzZXQ7CisKKwkJaWYgKHNrICYmICEoc2sgJiAoaW50ZXJ2YWwgLSAxKSkpIHsKKwkJCXRpbWVfdCBub3csIGRpZmY7CisKKwkJCW5vdyA9IHRpbWUoMCk7CisJCQlkaWZmID0gbm93IC0gbGFzdDsKKworCQkJaWYgKGRpZmYgPiAwKSB7CisJCQkJcyA9IGN0aW1lKCZub3cpOworCQkJCXNbMjRdID0gMDsKKwkJCQlwcmludGYoIlxyJTExTHU6ICU4THVrQi9zIEAgJXMiLCBzaywKKwkJCQkgICAgICAgKCgoc2sgLSBza2wpKSAvIGRpZmYpID4+IDEwLCBzKTsKKwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCX0KKwkJCWlmIChkaWZmIDwgNSkKKwkJCQlpbnRlcnZhbCA8PD0gMTsKKwkJCWVsc2UgaWYgKGRpZmYgPiAyMCkKKwkJCQlpbnRlcnZhbCA+Pj0gMTsKKwkJCWxhc3QgPSBub3c7CisJCQlza2wgPSBzazsKKwkJfQorCQlpZiAoZXh0Mi5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMpCisJCQljb250aW51ZTsKKwkJaWYgKGV4dDIuc19sb2dfYmxvY2tfc2l6ZSA+IDYpCisJCQlXSFkoImxvZyBibG9jayBzaXplID4gNiAoJXUpXG4iLCBleHQyLnNfbG9nX2Jsb2NrX3NpemUpOworCQlpZiAoZXh0MmZzX3JfYmxvY2tzX2NvdW50KCZleHQyKSA+IGV4dDJmc19ibG9ja3NfY291bnQoJmV4dDIpKQorCQkJV0hZKCJyX2Jsb2Nrc19jb3VudCA+IGJsb2Nrc19jb3VudCAoJXUgPiAldSlcbiIsCisJCQkgICAgZXh0MmZzX3JfYmxvY2tzX2NvdW50KCZleHQyKSwKKwkJCSAgICBleHQyZnNfYmxvY2tzX2NvdW50KCZleHQyKSk7CisJCWlmIChleHQyZnNfZnJlZV9ibG9ja3NfY291bnQoJmV4dDIpID4gZXh0MmZzX2Jsb2Nrc19jb3VudCgmZXh0MikpCisJCQlXSFkoImZyZWVfYmxvY2tzX2NvdW50ID4gYmxvY2tzX2NvdW50XG4gKCV1ID4gJXUpXG4iLAorCQkJICAgIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudCgmZXh0MiksCisJCQkgICAgZXh0MmZzX2Jsb2Nrc19jb3VudCgmZXh0MikpOworCQlpZiAoZXh0Mi5zX2ZyZWVfaW5vZGVzX2NvdW50ID4gZXh0Mi5zX2lub2Rlc19jb3VudCkKKwkJCVdIWSgiZnJlZV9pbm9kZXNfY291bnQgPiBpbm9kZXNfY291bnQgKCV1ID4gJXUpXG4iLAorCQkJICAgIGV4dDIuc19mcmVlX2lub2Rlc19jb3VudCwgZXh0Mi5zX2lub2Rlc19jb3VudCk7CisKKwkJdG0gPSBleHQyLnNfbXRpbWU7CisJCXMgPSBjdGltZSgmdG0pOworCQlzWzI0XSA9IDA7CisJCWJzaXplID0gMSA8PCAoZXh0Mi5zX2xvZ19ibG9ja19zaXplICsgMTApOworCQlncnBzaXplID0gYnNpemUgKiBleHQyLnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJaWYgKG1lbWNtcChleHQyLnNfdXVpZCwgbGFzdF91dWlkLCBzaXplb2YobGFzdF91dWlkKSkgPT0gMCAmJgorCQkgICAgZXh0Mi5zX3Jldl9sZXZlbCA+IDAgJiYgZXh0Mi5zX2Jsb2NrX2dyb3VwX25yID09IDApIHsKKwkJCWpubF9jb3B5ID0gMTsKKwkJfSBlbHNlIHsKKwkJCWpubF9jb3B5ID0gMDsKKwkJCW1lbWNweShsYXN0X3V1aWQsIGV4dDIuc191dWlkLCBzaXplb2YobGFzdF91dWlkKSk7CisJCX0KKwkJaWYgKGV4dDIuc19ibG9ja19ncm91cF9uciA9PSAwIHx8IGJzaXplID09IDEwMjQpCisJCQlzYl9vZmZzZXQgPSAxMDI0OworCQllbHNlCisJCQlzYl9vZmZzZXQgPSAwOworCQlpZiAoam5sX2NvcHkgJiYgIXByaW50X2pubF9jb3BpZXMpCisJCQljb250aW51ZTsKKwkJcHJpbnRmKCJcciUxMUx1ICUxMUx1JXMgJTExTHUlcyAlOXUgJTVMdSAlNHUlcyAlcyAlMDJ4JTAyeCUwMnglMDJ4ICVzXG4iLAorCQkgICAgICAgc2ssIHNrIC0gZXh0Mi5zX2Jsb2NrX2dyb3VwX25yICogZ3Jwc2l6ZSAtIHNiX29mZnNldCwKKwkJICAgICAgIGpubF9jb3B5ID8gIioiOiIgIiwKKwkJICAgICAgIHNrICsgZXh0MmZzX2Jsb2Nrc19jb3VudCgmZXh0MikgKiBic2l6ZSAtCisJCSAgICAgICAgICAgIGV4dDIuc19ibG9ja19ncm91cF9uciAqIGdycHNpemUgLSBzYl9vZmZzZXQsCisJCSAgICAgICBqbmxfY29weSA/ICIqIiA6ICIgIiwgZXh0MmZzX2Jsb2Nrc19jb3VudCgmZXh0MiksIGJzaXplLAorCQkgICAgICAgZXh0Mi5zX2Jsb2NrX2dyb3VwX25yLCBqbmxfY29weSA/ICIqIiA6ICIgIiwgcywKKwkJICAgICAgIGV4dDIuc191dWlkWzBdLCBleHQyLnNfdXVpZFsxXSwKKwkJICAgICAgIGV4dDIuc191dWlkWzJdLCBleHQyLnNfdXVpZFszXSwgZXh0Mi5zX3ZvbHVtZV9uYW1lKTsKKwl9CisJcHJpbnRmKF8oIlxuJTExTHU6IGZpbmlzaGVkIHdpdGggZXJybm8gJWRcbiIpLCBzaywgZXJybm8pOworCWNsb3NlKGZkKTsKKworCXJldHVybiBlcnJubzsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2ZzY2suOC5pbiBiL2UyZnNwcm9ncy9taXNjL2ZzY2suOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGZkOGNlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZnNjay44LmluCkBAIC0wLDAgKzEsNDE0IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTkzLCAxOTk0LCAxOTk1IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIEZTQ0sgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQorZnNjayBcLSBjaGVjayBhbmQgcmVwYWlyIGEgTGludXggZmlsZSBzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgZnNjaworWworLkIgXC1zQVZSVE1OUAorXQorWworLkIgXC1DCitbCisuSSBmZAorXQorXQorWworLkIgXC10CisuSSBmc3R5cGUKK10gCisuSSBbZmlsZXN5cyAuLi4gXQorW1wtXC1dIFsKKy5CIGZzLXNwZWNpZmljLW9wdGlvbnMKK10KKy5TSCBERVNDUklQVElPTgorLkIgZnNjaworaXMgdXNlZCB0byBjaGVjayBhbmQgb3B0aW9uYWxseSByZXBhaXIgb25lIG9yIG1vcmUgTGludXggZmlsZSBzeXN0ZW1zLiAgCisuSSBmaWxlc3lzCitjYW4gYmUgYSBkZXZpY2UgbmFtZSAoZS5nLgorLklSIC9kZXYvaGRjMSAiLCAiIC9kZXYvc2RiMiApLAorYSBtb3VudCBwb2ludCAoZS5nLgorLklSIC8gIiwgIiAvdXNyICIsICIgL2hvbWUgKSwKK29yIGFuIGV4dDIgbGFiZWwgb3IgVVVJRCBzcGVjaWZpZXIgKGUuZy4KK1VVSUQ9ODg2OGFiZjYtODhjNS00YTgzLTk4YjgtYmZjMjQwNTdmN2JkIG9yIExBQkVMPXJvb3QpLiAgCitOb3JtYWxseSwgdGhlIAorLkIgZnNjayAKK3Byb2dyYW0gd2lsbCB0cnkgdG8gaGFuZGxlIGZpbGVzeXN0ZW1zIG9uIGRpZmZlcmVudCBwaHlzaWNhbCBkaXNrIGRyaXZlcyAKK2luIHBhcmFsbGVsIHRvIHJlZHVjZSB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgbmVlZGVkIHRvIGNoZWNrIGFsbCBvZiB0aGUKK2ZpbGVzeXN0ZW1zLgorLlBQCitJZiBubyBmaWxlc3lzdGVtcyBhcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgCisuQiBcLUEgCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgCisuQiBmc2NrCit3aWxsIGRlZmF1bHQgdG8gY2hlY2tpbmcgZmlsZXN5c3RlbXMgaW4KKy5CIC9ldGMvZnN0YWIKK3NlcmlhbGx5LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSAKKy5CIFwtQXMKK29wdGlvbnMuCisuUFAKK1RoZSBleGl0IGNvZGUgcmV0dXJuZWQgYnkKKy5CIGZzY2sKK2lzIHRoZSBzdW0gb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorLmJyCitcCTBcCVwtXCBObyBlcnJvcnMKKy5icgorXAkxXAlcLVwgRmlsZSBzeXN0ZW0gZXJyb3JzIGNvcnJlY3RlZAorLmJyCitcCTJcCVwtXCBTeXN0ZW0gc2hvdWxkIGJlIHJlYm9vdGVkCisuYnIKK1wJNFwJXC1cIEZpbGUgc3lzdGVtIGVycm9ycyBsZWZ0IHVuY29ycmVjdGVkCisuYnIKK1wJOFwJXC1cIE9wZXJhdGlvbmFsIGVycm9yCisuYnIKK1wJMTZcCVwtXCBVc2FnZSBvciBzeW50YXggZXJyb3IKKy5icgorXAkzMlwJXC1cIEZzY2sgY2FuY2VsZWQgYnkgdXNlciByZXF1ZXN0CisuYnIKK1wJMTI4XAlcLVwgU2hhcmVkIGxpYnJhcnkgZXJyb3IKKy5icgorVGhlIGV4aXQgY29kZSByZXR1cm5lZCB3aGVuIG11bHRpcGxlIGZpbGUgc3lzdGVtcyBhcmUgY2hlY2tlZCAKK2lzIHRoZSBiaXQtd2lzZSBPUiBvZiB0aGUgZXhpdCBjb2RlcyBmb3IgZWFjaAorZmlsZSBzeXN0ZW0gdGhhdCBpcyBjaGVja2VkLgorLlBQCitJbiBhY3R1YWxpdHksCisuQiBmc2NrCitpcyBzaW1wbHkgYSBmcm9udC1lbmQgZm9yIHRoZSB2YXJpb3VzIGZpbGUgc3lzdGVtIGNoZWNrZXJzCisoXGZCZnNja1xmUi5cZklmc3R5cGVcZlIpIGF2YWlsYWJsZSB1bmRlciBMaW51eC4gIFRoZSBmaWxlCitzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlciBpcyBzZWFyY2hlZCBmb3IgaW4KKy5JIC9zYmluCitmaXJzdCwgdGhlbiBpbgorLkkgL2V0Yy9mcworYW5kCisuSVIgL2V0YyAsCithbmQgZmluYWxseSBpbiB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluIHRoZSBQQVRIIGVudmlyb25tZW50Cit2YXJpYWJsZS4gIFBsZWFzZSBzZWUgdGhlIGZpbGUgc3lzdGVtLXNwZWNpZmljIGNoZWNrZXIgbWFudWFsIHBhZ2VzIGZvcgorZnVydGhlciBkZXRhaWxzLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1zCitTZXJpYWxpemUgCisuQiBmc2NrIAorb3BlcmF0aW9ucy4gIFRoaXMgaXMgYSBnb29kIGlkZWEgaWYgeW91IGFyZSBjaGVja2luZyBtdWx0aXBsZQorZmlsZXN5c3RlbXMgYW5kIHRoZSBjaGVja2VycyBhcmUgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZS4gIChOb3RlOgorLkJSIGUyZnNjayAoOCkKK3J1bnMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZSBieSBkZWZhdWx0LiAgVG8gbWFrZSAKKy5CUiBlMmZzY2sgKDgpCitydW4gaW4gYSBub24taW50ZXJhY3RpdmUgbW9kZSwgeW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlCisuQiBcLXAKK29yCisuQiBcLWEKK29wdGlvbiwgaWYgeW91IHdpc2ggZm9yIGVycm9ycyB0byBiZSBjb3JyZWN0ZWQgYXV0b21hdGljYWxseSwgb3IgdGhlIAorLkIgXC1uCitvcHRpb24gaWYgeW91IGRvIG5vdC4pCisuVFAKKy5CSSBcLXQgIiBmc2xpc3QiCitTcGVjaWZpZXMgdGhlIHR5cGUocykgb2YgZmlsZSBzeXN0ZW0gdG8gYmUgY2hlY2tlZC4gIFdoZW4gdGhlCisuQiBcLUEgCitmbGFnIGlzIHNwZWNpZmllZCwgb25seSBmaWxlc3lzdGVtcyB0aGF0IG1hdGNoIAorLkkgZnNsaXN0CithcmUgY2hlY2tlZC4gIFRoZQorLkkgZnNsaXN0CitwYXJhbWV0ZXIgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlc3lzdGVtcyBhbmQgb3B0aW9ucworc3BlY2lmaWVycy4gIEFsbCBvZiB0aGUgZmlsZXN5c3RlbXMgaW4gdGhpcyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBtYXkgYmUKK3ByZWZpeGVkIGJ5IGEgbmVnYXRpb24gb3BlcmF0b3IgCisuUkIgJyBubyAnCitvciAKKy5SQiAnICEgJywKK3doaWNoIHJlcXVlc3RzIHRoYXQgb25seSB0aG9zZSBmaWxlc3lzdGVtcyBub3QgbGlzdGVkIGluCisuSSBmc2xpc3QKK3dpbGwgYmUgY2hlY2tlZC4gIElmIGFsbCBvZiB0aGUgZmlsZXN5c3RlbXMgaW4gCisuSSBmc2xpc3QKK2FyZSBub3QgcHJlZml4ZWQgYnkgYSBuZWdhdGlvbiBvcGVyYXRvciwgdGhlbiBvbmx5IHRob3NlIGZpbGVzeXN0ZW1zCitsaXN0ZWQKK2luCisuSSBmc2xpc3QKK3dpbGwgYmUgY2hlY2tlZC4KKy5zcAorT3B0aW9ucyBzcGVjaWZpZXJzIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgY29tbWEtc2VwYXJhdGVkCisuSVIgZnNsaXN0IC4KK1RoZXkgbXVzdCBoYXZlIHRoZSBmb3JtYXQgCisuQkkgb3B0cz0gZnMtb3B0aW9uXGZSLgorSWYgYW4gb3B0aW9ucyBzcGVjaWZpZXIgaXMgcHJlc2VudCwgdGhlbiBvbmx5IGZpbGVzeXN0ZW1zIHdoaWNoIGNvbnRhaW4KKy5JIGZzLW9wdGlvbgoraW4gdGhlaXIgbW91bnQgb3B0aW9ucyBmaWVsZCBvZiAKKy5CIC9ldGMvZnN0YWIKK3dpbGwgYmUgY2hlY2tlZC4gIElmIHRoZSBvcHRpb25zIHNwZWNpZmllciBpcyBwcmVmaXhlZCBieSBhIG5lZ2F0aW9uCitvcGVyYXRvciwgdGhlbiBvbmx5IAordGhvc2UgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZQorLkkgZnMtb3B0aW9uCitpbiB0aGVpciBtb3VudCBvcHRpb25zIGZpZWxkIG9mCisuQiAvZXRjL2ZzdGFiIAord2lsbCBiZSBjaGVja2VkLgorLnNwCitGb3IgZXhhbXBsZSwgaWYKKy5CIG9wdHM9cm8KK2FwcGVhcnMgaW4KKy5JUiBmc2xpc3QgLAordGhlbiBvbmx5IGZpbGVzeXN0ZW1zIGxpc3RlZCBpbgorLkIgL2V0Yy9mc3RhYiAKK3dpdGggdGhlCisuQiBybworb3B0aW9uIHdpbGwgYmUgY2hlY2tlZC4KKy5zcAorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBNYW5kcmFrZSBkaXN0cmlidXRpb25zIHdob3NlIGJvb3Qgc2NyaXB0cworZGVwZW5kIHVwb24gYW4gdW5hdXRob3JpemVkIFVJIGNoYW5nZSB0byB0aGUKKy5CIGZzY2sKK3Byb2dyYW0sIGlmIGEgZmlsZXN5c3RlbSB0eXBlIG9mCisuQiBsb29wCitpcyBmb3VuZCBpbgorLklSIGZzbGlzdCAsCitpdCBpcyB0cmVhdGVkIGFzIGlmCisuQiBvcHRzPWxvb3AKK3dlcmUgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZQorLkIgXC10CitvcHRpb24uCisuc3AKK05vcm1hbGx5LCB0aGUgZmlsZXN5c3RlbSB0eXBlIGlzIGRlZHVjZWQgYnkgc2VhcmNoaW5nIGZvcgorLkkgZmlsZXN5cworaW4gdGhlIAorLkkgL2V0Yy9mc3RhYiAKK2ZpbGUgYW5kIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5LgorSWYgdGhlIHR5cGUgY2FuIG5vdCBiZSBkZWR1Y2VkLCBhbmQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBmaWxlc3lzdGVtIAorZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIAorLkIgXC10IAorb3B0aW9uLCAKKy5CIGZzY2sKK3dpbGwgdXNlIHRoZSBzcGVjaWZpZWQgZmlsZXN5c3RlbSB0eXBlLiAgSWYgdGhpcyB0eXBlIGlzIG5vdAorYXZhaWxhYmxlLCB0aGVuIHRoZSBkZWZhdWx0IGZpbGUgc3lzdGVtIHR5cGUgKGN1cnJlbnRseSBleHQyKSBpcyB1c2VkLiAKKy5UUAorLkIgXC1BCitXYWxrIHRocm91Z2ggdGhlCisuSSAvZXRjL2ZzdGFiCitmaWxlIGFuZCB0cnkgdG8gY2hlY2sgYWxsIGZpbGUgc3lzdGVtcyBpbiBvbmUgcnVuLiAgVGhpcyBvcHRpb24gaXMKK3R5cGljYWxseSB1c2VkIGZyb20gdGhlCisuSSAvZXRjL3JjCitzeXN0ZW0gaW5pdGlhbGl6YXRpb24gZmlsZSwgaW5zdGVhZCBvZiBtdWx0aXBsZSBjb21tYW5kcyBmb3IgY2hlY2tpbmcKK2Egc2luZ2xlIGZpbGUgc3lzdGVtLgorLnNwCitUaGUgcm9vdCBmaWxlc3lzdGVtIHdpbGwgYmUgY2hlY2tlZCBmaXJzdCB1bmxlc3MgdGhlCisuQiBcLVAKK29wdGlvbiBpcyBzcGVjaWZpZWQgKHNlZSBiZWxvdykuICBBZnRlciB0aGF0LCAKK2ZpbGVzeXN0ZW1zIHdpbGwgYmUgY2hlY2tlZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoZSAKKy5JIGZzX3Bhc3NubyAKKyh0aGUgc2l4dGgpIGZpZWxkIGluIHRoZSAKKy5JIC9ldGMvZnN0YWIKK2ZpbGUuICAKK0ZpbGVzeXN0ZW1zIHdpdGggYSAKKy5JIGZzX3Bhc3NubwordmFsdWUgb2YgMCBhcmUgc2tpcHBlZCBhbmQgYXJlIG5vdCBjaGVja2VkIGF0IGFsbC4gIEZpbGVzeXN0ZW1zIHdpdGggYQorLkkgZnNfcGFzc25vCit2YWx1ZSBvZiBncmVhdGVyIHRoYW4gemVybyB3aWxsIGJlIGNoZWNrZWQgaW4gb3JkZXIsIAord2l0aCBmaWxlc3lzdGVtcyB3aXRoIHRoZSBsb3dlc3QKKy5JIGZzX3Bhc3NubyAKK251bWJlciBiZWluZyBjaGVja2VkIGZpcnN0LgorSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpbGVzeXN0ZW1zIHdpdGggdGhlIHNhbWUgcGFzcyBudW1iZXIsIAorZnNjayB3aWxsIGF0dGVtcHQgdG8gY2hlY2sgdGhlbSBpbiBwYXJhbGxlbCwgYWx0aG91Z2ggaXQgd2lsbCBhdm9pZCBydW5uaW5nIAorbXVsdGlwbGUgZmlsZXN5c3RlbSBjaGVja3Mgb24gdGhlIHNhbWUgcGh5c2ljYWwgZGlzay4gIAorLnNwCitIZW5jZSwgYSB2ZXJ5IGNvbW1vbiBjb25maWd1cmF0aW9uIGluIAorLkkgL2V0Yy9mc3RhYgorZmlsZXMgaXMgdG8gc2V0IHRoZSByb290IGZpbGVzeXN0ZW0gdG8gaGF2ZSBhIAorLkkgZnNfcGFzc25vCit2YWx1ZSBvZiAxCithbmQgdG8gc2V0IGFsbCBvdGhlciBmaWxlc3lzdGVtcyB0byBoYXZlIGEKKy5JIGZzX3Bhc3NubwordmFsdWUgb2YgMi4gIFRoaXMgd2lsbCBhbGxvdworLkIgZnNjawordG8gYXV0b21hdGljYWxseSBydW4gZmlsZXN5c3RlbSBjaGVja2VycyBpbiBwYXJhbGxlbCBpZiBpdCBpcyBhZHZhbnRhZ2VvdXMKK3RvIGRvIHNvLiAgU3lzdGVtIGFkbWluaXN0cmF0b3JzIG1pZ2h0IGNob29zZQorbm90IHRvIHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24gaWYgdGhleSBuZWVkIHRvIGF2b2lkIG11bHRpcGxlIGZpbGVzeXN0ZW0KK2NoZWNrcyBydW5uaW5nIGluIHBhcmFsbGVsIGZvciBzb21lIHJlYXNvbiAtLS0gZm9yIGV4YW1wbGUsIGlmIHRoZQorbWFjaGluZSBpbiBxdWVzdGlvbiBpcyBzaG9ydCBvbiBtZW1vcnkgc28gdGhhdAorZXhjZXNzaXZlIHBhZ2luZyBpcyBhIGNvbmNlcm4uCisuVFAKKy5CIFwtQ1xmUiBbIFxmSSAiZmQiIFxmUiBdCitEaXNwbGF5IGNvbXBsZXRpb24vcHJvZ3Jlc3MgYmFycyBmb3IgdGhvc2UgZmlsZXN5c3RlbSBjaGVja2VycyAoY3VycmVudGx5IAorb25seSBmb3IgZXh0MiBhbmQgZXh0Mykgd2hpY2ggc3VwcG9ydCB0aGVtLiAgIEZzY2sgd2lsbCBtYW5hZ2UgdGhlCitmaWxlc3lzdGVtIGNoZWNrZXJzIHNvIHRoYXQgb25seSBvbmUgb2YgdGhlbSB3aWxsIGRpc3BsYXkgIAorYSBwcm9ncmVzcyBiYXIgYXQgYSB0aW1lLiAgR1VJIGZyb250LWVuZHMgbWF5IHNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IKKy5JUiBmZCAsCitpbiB3aGljaCBjYXNlIHRoZSBwcm9ncmVzcyBiYXIgaW5mb3JtYXRpb24gd2lsbCBiZSBzZW50IHRvIHRoYXQgZmlsZSBkZXNjcmlwdG9yLgorLlRQCisuQiBcLU0KK0RvIG5vdCBjaGVjayBtb3VudGVkIGZpbGVzeXN0ZW1zIGFuZCByZXR1cm4gYW4gZXhpdCBjb2RlIG9mIDAKK2ZvciBtb3VudGVkIGZpbGVzeXN0ZW1zLgorLlRQCisuQiBcLU4KK0Rvbid0IGV4ZWN1dGUsIGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUuCisuVFAKKy5CIFwtUAorV2hlbiB0aGUgCisuQiBcLUEKK2ZsYWcgaXMgc2V0LCBjaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIHBhcmFsbGVsIHdpdGggdGhlIG90aGVyIGZpbGVzeXN0ZW1zLgorVGhpcyBpcyBub3QgdGhlIHNhZmVzdCB0aGluZyBpbiB0aGUgd29ybGQgdG8gZG8sCitzaW5jZSBpZiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGluIGRvdWJ0IHRoaW5ncyBsaWtlIHRoZSAKKy5CUiBlMmZzY2sgKDgpIAorZXhlY3V0YWJsZSBtaWdodCBiZSBjb3JydXB0ZWQhICBUaGlzIG9wdGlvbiBpcyBtYWlubHkgcHJvdmlkZWQKK2ZvciB0aG9zZSBzeXNhZG1pbnMgd2hvIGRvbid0IHdhbnQgdG8gcmVwYXJ0aXRpb24gdGhlIHJvb3QKK2ZpbGVzeXN0ZW0gdG8gYmUgc21hbGwgYW5kIGNvbXBhY3QgKHdoaWNoIGlzIHJlYWxseSB0aGUgcmlnaHQgc29sdXRpb24pLgorLlRQCisuQiBcLVIKK1doZW4gY2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcyB3aXRoIHRoZQorLkIgXC1BCitmbGFnLCBza2lwIHRoZSByb290IGZpbGUgc3lzdGVtIChpbiBjYXNlIGl0J3MgYWxyZWFkeSBtb3VudGVkIHJlYWQtd3JpdGUpLgorLlRQCisuQiBcLVQKK0Rvbid0IHNob3cgdGhlIHRpdGxlIG9uIHN0YXJ0dXAuCisuVFAKKy5CIFwtVgorUHJvZHVjZSB2ZXJib3NlIG91dHB1dCwgaW5jbHVkaW5nIGFsbCBmaWxlIHN5c3RlbS1zcGVjaWZpYyBjb21tYW5kcwordGhhdCBhcmUgZXhlY3V0ZWQuCisuVFAKKy5CIGZzLXNwZWNpZmljLW9wdGlvbnMKK09wdGlvbnMgd2hpY2ggYXJlIG5vdCB1bmRlcnN0b29kIGJ5IAorLkIgZnNjayAKK2FyZSBwYXNzZWQgdG8gdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlci4gIFRoZXNlIGFyZ3VtZW50cworLkIgbXVzdAorbm90IHRha2UgYXJndW1lbnRzLCBhcyB0aGVyZSBpcyBubword2F5IGZvciAKKy5CIGZzY2sKK3RvIGJlIGFibGUgdG8gcHJvcGVybHkgZ3Vlc3Mgd2hpY2ggYXJndW1lbnRzIHRha2Ugb3B0aW9ucyBhbmQgd2hpY2gKK2Rvbid0LgorLklQCitPcHRpb25zIGFuZCBhcmd1bWVudHMgd2hpY2ggZm9sbG93IHRoZQorLkIgXC1cLQorYXJlIHRyZWF0ZWQgYXMgZmlsZSBzeXN0ZW0tc3BlY2lmaWMgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gdGhlCitmaWxlIHN5c3RlbS1zcGVjaWZpYyBjaGVja2VyLgorLklQCitQbGVhc2Ugbm90ZSB0aGF0IGZzY2sgaXMgbm90CitkZXNpZ25lZCB0byBwYXNzIGFyYml0cmFyaWx5IGNvbXBsaWNhdGVkIG9wdGlvbnMgdG8gZmlsZXN5c3RlbS1zcGVjaWZpYworY2hlY2tlcnMuICBJZiB5b3UncmUgZG9pbmcgc29tZXRoaW5nIGNvbXBsaWNhdGVkLCBwbGVhc2UganVzdAorZXhlY3V0ZSB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBjaGVja2VyIGRpcmVjdGx5LiAgSWYgeW91IHBhc3MgCisuQiBmc2NrCitzb21lIGhvcnJpYmx5IGNvbXBsaWNhdGVkIG9wdGlvbiBhbmQgYXJndW1lbnRzLCBhbmQgaXQgZG9lc24ndCBkbword2hhdCB5b3UgZXhwZWN0LCAKKy5CIGRvbid0IGJvdGhlciByZXBvcnRpbmcgaXQgYXMgYSBidWcuCitZb3UncmUgYWxtb3N0IGNlcnRhaW5seSBkb2luZyBzb21ldGhpbmcgdGhhdCB5b3Ugc2hvdWxkbid0IGJlIGRvaW5nCit3aXRoIAorLkJSIGZzY2suCisuUFAKK09wdGlvbnMgdG8gZGlmZmVyZW50IGZpbGVzeXN0ZW0tc3BlY2lmaWMgZnNjaydzIGFyZSBub3Qgc3RhbmRhcmRpemVkLgorSWYgaW4gZG91YnQsIHBsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZXMgb2YgdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMKK2NoZWNrZXIuICBBbHRob3VnaCBub3QgZ3VhcmFudGVlZCwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQKK2J5IG1vc3QgZmlsZSBzeXN0ZW0gY2hlY2tlcnM6CisuVFAKKy5CIFwtYQorQXV0b21hdGljYWxseSByZXBhaXIgdGhlIGZpbGUgc3lzdGVtIHdpdGhvdXQgYW55IHF1ZXN0aW9ucyAodXNlCit0aGlzIG9wdGlvbiB3aXRoIGNhdXRpb24pLiAgTm90ZSB0aGF0IAorLkJSIGUyZnNjayAoOCkKK3N1cHBvcnRzIAorLkIgXC1hCitmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIFRoaXMgb3B0aW9uIGlzIG1hcHBlZCB0byAKKy5CUiBlMmZzY2sgJ3MKKy5CIFwtcAorb3B0aW9uIHdoaWNoIGlzIHNhZmUgdG8gdXNlLCB1bmxpa2UgdGhlIAorLkIgXC1hIAorb3B0aW9uIHRoYXQgc29tZSBmaWxlIHN5c3RlbSBjaGVja2VycyBzdXBwb3J0LgorLlRQCisuQiBcLW4KK0ZvciBzb21lIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlcnMsIHRoZSAKKy5CIFwtbgorb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGZzLXNwZWNpZmljIGZzY2sgdG8gYXZvaWQgYXR0ZW1wdGluZyB0byByZXBhaXIgYW55IAorcHJvYmxlbXMsIGJ1dCBzaW1wbHkgcmVwb3J0IHN1Y2ggcHJvYmxlbXMgdG8gc3Rkb3V0LiAgVGhpcyBpcyBob3dldmVyCitub3QgdHJ1ZSBmb3IgYWxsIGZpbGVzeXN0ZW0tc3BlY2lmaWMgY2hlY2tlcnMuICBJbiBwYXJ0aWN1bGFyLCAKKy5CUiBmc2NrLnJlaXNlcmZzICg4KQord2lsbCBub3QgcmVwb3J0IGFueSBjb3JydXB0aW9uIGlmIGdpdmVuIHRoaXMgb3B0aW9uLgorLkJSIGZzY2subWluaXggKDgpCitkb2VzIG5vdCBzdXBwb3J0IHRoZSAKKy5CIFwtbiAKK29wdGlvbiBhdCBhbGwuCisuVFAKKy5CIFwtcgorSW50ZXJhY3RpdmVseSByZXBhaXIgdGhlIGZpbGVzeXN0ZW0gKGFzayBmb3IgY29uZmlybWF0aW9ucykuICBOb3RlOiBJdAoraXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWEgdG8gdXNlIHRoaXMgb3B0aW9uIGlmIG11bHRpcGxlIGZzY2sncyBhcmUgYmVpbmcKK3J1biBpbiBwYXJhbGxlbC4gIEFsc28gbm90ZSB0aGF0IHRoaXMgaXMgCisuQlIgZTJmc2NrICdzCitkZWZhdWx0IGJlaGF2aW9yOyBpdCBzdXBwb3J0cyB0aGlzIG9wdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK3JlYXNvbnMgb25seS4KKy5UUAorLkIgXC15CitGb3Igc29tZSBmaWxlc3lzdGVtLXNwZWNpZmljIGNoZWNrZXJzLCB0aGUgCisuQiBcLXkgCitvcHRpb24gd2lsbCBjYXVzZSB0aGUgZnMtc3BlY2lmaWMgZnNjayB0byBhbHdheXMgYXR0ZW1wdCB0byBmaXggYW55CitkZXRlY3RlZCBmaWxlc3lzdGVtIGNvcnJ1cHRpb24gYXV0b21hdGljYWxseS4gIFNvbWV0aW1lcyBhbiBleHBlcnQgbWF5CitiZSBhYmxlIHRvIGRvIGJldHRlciBkcml2aW5nIHRoZSBmc2NrIG1hbnVhbGx5LiAgTm90ZSB0aGF0IAorLkIgbm90CithbGwgZmlsZXN5c3RlbS1zcGVjaWZpYyBjaGVja2VycyBpbXBsZW1lbnQgdGhpcyBvcHRpb24uICBJbiBwYXJ0aWN1bGFyIAorLkJSIGZzY2subWluaXggKDgpCithbmQKKy5CUiBmc2NrLmNyYW1mcyAoOCkKK2RvZXMgbm90IHN1cHBvcnQgdGhlCisuQiAteQorb3B0aW9uIGFzIG9mIHRoaXMgd3JpdGluZy4KKy5TSCBBVVRIT1IKK1RoZW9kb3JlIFRzJ28gKHR5dHNvQG1pdC5lZHUpCisuU0ggRklMRVMKKy5JUiAvZXRjL2ZzdGFiIC4KKy5TSCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKK1RoZQorLkIgZnNjaworcHJvZ3JhbSdzIGJlaGF2aW9yIGlzIGFmZmVjdGVkIGJ5IHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorLlRQCisuQiBGU0NLX0ZPUkNFX0FMTF9QQVJBTExFTAorSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIAorLkIgZnNjaword2lsbCBhdHRlbXB0IHRvIHJ1biBhbGwgb2YgdGhlIHNwZWNpZmllZCBmaWxlc3lzdGVtcyBpbiBwYXJhbGxlbCwKK3JlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgZmlsZXN5c3RlbXMgYXBwZWFyIHRvIGJlIG9uIHRoZSBzYW1lCitkZXZpY2UuICAoVGhpcyBpcyB1c2VmdWwgZm9yIFJBSUQgc3lzdGVtcyBvciBoaWdoLWVuZCBzdG9yYWdlIHN5c3RlbXMKK3N1Y2ggYXMgdGhvc2Ugc29sZCBieSBjb21wYW5pZXMgc3VjaCBhcyBJQk0gb3IgRU1DLikKKy5UUAorLkIgRlNDS19NQVhfSU5TVAorVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIHN5c3RlbQorY2hlY2tlcnMgdGhhdCBjYW4gYmUgcnVubmluZyBhdCBvbmUgdGltZS4gIFRoaXMgYWxsb3dzIGNvbmZpZ3VyYXRpb25zCit3aGljaCBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIGRpc2tzIHRvIGF2b2lkIAorLkIgZnNjaworc3RhcnRpbmcgdG9vIG1hbnkgZmlsZSBzeXN0ZW0gY2hlY2tlcnMgYXQgb25jZSwgd2hpY2ggbWlnaHQgb3ZlcmxvYWQKK0NQVSBhbmQgbWVtb3J5IHJlc291cmNlcyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gIElmIHRoaXMgdmFsdWUgaXMKK3plcm8sIHRoZW4gYW4gdW5saW1pdGVkIG51bWJlciBvZiBwcm9jZXNzZXMgY2FuIGJlIHNwYXduZWQuICBUaGlzIGlzCitjdXJyZW50bHkgdGhlIGRlZmF1bHQsIGJ1dCBmdXR1cmUgdmVyc2lvbnMgb2YKKy5CIGZzY2sKK21heSBhdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGhvdyBtYW55IGZpbGUgc3lzdGVtIGNoZWNrcyBjYW4KK2JlIHJ1biBiYXNlZCBvbiBnYXRoZXJpbmcgYWNjb3VudGluZyBkYXRhIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisuVFAKKy5CIFBBVEgKK1RoZSAKKy5CIFBBVEgKK2Vudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQgdG8gZmluZCBmaWxlIHN5c3RlbSBjaGVja2Vycy4gIEEgc2V0IG9mCitzeXN0ZW0gZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGZpcnN0OiAKKy5CUiAvc2JpbiAsCisuQlIgL3NiaW4vZnMuZCAsCisuQlIgIC9zYmluL2ZzICwKKy5CUiAvZXRjL2ZzICwKK2FuZCAKKy5CUiAvZXRjIC4KK1RoZW4gdGhlIHNldCBvZiBkaXJlY3RvcmllcyBmb3VuZCBpbiB0aGUKKy5CIFBBVEgKK2Vudmlyb25tZW50IGFyZSBzZWFyY2hlZC4KKy5UUAorLkIgRlNUQUJfRklMRQorVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbGxvd3MgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIAordG8gb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIG9mIHRoZSAKKy5CIC9ldGMvZnN0YWIKK2ZpbGUuICBJdCBpcyBhbHNvIHVzZWZ1bCBmb3IgZGV2ZWxvcGVycyB3aG8gYXJlIHRlc3RpbmcKKy5CUiBmc2NrIC4KKy5TSCBTRUUgQUxTTworLkJSIGZzdGFiICg1KSwKKy5CUiBta2ZzICg4KSwKKy5CUiBmc2NrLmV4dDIgKDgpCitvcgorLkJSIGZzY2suZXh0MyAoOCkKK29yCisuQlIgZTJmc2NrICg4KSwKKy5CUiBjcmFtZnNjayAoOCksCisuQlIgZnNjay5taW5peCAoOCksCisuQlIgZnNjay5tc2RvcyAoOCksCisuQlIgZnNjay5qZnMgKDgpLAorLkJSIGZzY2submZzICg4KSwKKy5CUiBmc2NrLnZmYXQgKDgpLAorLkJSIGZzY2sueGZzICg4KSwKKy5CUiBmc2NrLnhpYWZzICg4KSwKKy5CUiByZWlzZXJmc2NrICg4KS4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2ZzY2suYyBiL2UyZnNwcm9ncy9taXNjL2ZzY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjUwNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvZnNjay5jCkBAIC0wLDAgKzEsMTM0MiBAQAorLyoKKyAqIHBmc2NrIC0tLSBBIGdlbmVyaWMsIHBhcmFsbGVsaXppbmcgZnJvbnQtZW5kIGZvciB0aGUgZnNjayBwcm9ncmFtLgorICogSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBydW4gZnNjayBwcm9ncmFtcyBpbiBwYXJhbGxlbCBpZiB0aGUKKyAqIGRldmljZXMgYXJlIG9uIHNlcGFyYXRlIHNwaW5kbGVzLiAgSXQgaXMgYmFzZWQgb24gdGhlIHNhbWUgaWRlYXMgYXMKKyAqIHRoZSBnZW5lcmljIGZyb250IGVuZCBmb3IgZnNjayBieSBEYXZpZCBFbmdlbCBhbmQgRnJlZCB2YW4gS2VtcGVuLAorICogYnV0IGl0IGhhcyBiZWVuIGNvbXBsZXRlbHkgcmV3cml0dGVuIGZyb20gc2NyYXRjaCB0byBzdXBwb3J0CisgKiBwYXJhbGxlbCBleGVjdXRpb24uCisgKgorICogV3JpdHRlbiBieSBUaGVvZG9yZSBUcydvLCA8dHl0c29AbWl0LmVkdT4KKyAqCisgKiBNaXF1ZWwgdmFuIFNtb29yZW5idXJnIChtaXF1ZWxzQGRyaW5rZWwub3cub3JnKSAyMC1PY3QtMTk5NDoKKyAqICAgbyBDaGFuZ2VkIC10IGZzdHlwZSB0byBiZWhhdmUgbGlrZSB3aXRoIG1vdW50IHdoZW4gLUEgKGFsbCBmaWxlCisgKiAgICAgc3lzdGVtcykgb3IgLU0gKGxpa2UgbW91bnQpIGlzIHNwZWNpZmllZC4KKyAqICAgbyBmc2NrIGxvb2tzIGlmIGl0IGNhbiBmaW5kIHRoZSBmc2NrLnR5cGUgcHJvZ3JhbSB0byBkZWNpZGUKKyAqICAgICBpZiBpdCBzaG91bGQgaWdub3JlIHRoZSBmcyB0eXBlLiBUaGlzIHdheSBtb3JlIGZzY2sgcHJvZ3JhbXMKKyAqICAgICBjYW4gYmUgYWRkZWQgd2l0aG91dCBjaGFuZ2luZyB0aGlzIGZyb250LWVuZC4KKyAqICAgbyAtUiBmbGFnIHNraXAgcm9vdCBmaWxlIHN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisgKiAJMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBieSAgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZm9yIGluY2x1c2lvbiBvZiBzYV9oYW5kbGVyIGluIFNvbGFyaXMgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpZiBIQVZFX1BBVEhTX0gKKyNpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorI2lmIEhBVkVfTUFMTE9DX0gKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lHTkFMX0gKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAiYmxraWQvYmxraWQuaCIKKworI2lmbmRlZiBfUEFUSF9NTlRUQUIKKyNkZWZpbmUJX1BBVEhfTU5UVEFCCSIvZXRjL2ZzdGFiIgorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICppZ25vcmVkX3R5cGVzW10gPSB7CisJImlnbm9yZSIsCisJImlzbzk2NjAiLAorCSJuZnMiLAorCSJwcm9jIiwKKwkic3ciLAorCSJzd2FwIiwKKwkidG1wZnMiLAorCSJkZXZwdHMiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWFsbHlfd2FudGVkW10gPSB7CisJIm1pbml4IiwKKwkiZXh0MiIsCisJImV4dDMiLAorCSJleHQ0IiwKKwkiZXh0NGRldiIsCisJImpmcyIsCisJInJlaXNlcmZzIiwKKwkieGlhZnMiLAorCSJ4ZnMiLAorCU5VTEwKK307CisKKyNkZWZpbmUgQkFTRV9NRCAiL2Rldi9tZCIKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMgZm9yIG9wdGlvbnMKKyAqLworc3RhdGljIGNoYXIgKmRldmljZXNbTUFYX0RFVklDRVNdOworc3RhdGljIGNoYXIgKmFyZ3NbTUFYX0FSR1NdOworc3RhdGljIGludCBudW1fZGV2aWNlcywgbnVtX2FyZ3M7CisKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDA7CitzdGF0aWMgaW50IGRvYWxsID0gMDsKK3N0YXRpYyBpbnQgbm9leGVjdXRlID0gMDsKK3N0YXRpYyBpbnQgc2VyaWFsaXplID0gMDsKK3N0YXRpYyBpbnQgc2tpcF9yb290ID0gMDsKK3N0YXRpYyBpbnQgaWdub3JlX21vdW50ZWQgPSAwOworc3RhdGljIGludCBub3RpdGxlID0gMDsKK3N0YXRpYyBpbnQgcGFyYWxsZWxfcm9vdCA9IDA7CitzdGF0aWMgaW50IHByb2dyZXNzID0gMDsKK3N0YXRpYyBpbnQgcHJvZ3Jlc3NfZmQgPSAwOworc3RhdGljIGludCBmb3JjZV9hbGxfcGFyYWxsZWwgPSAwOworc3RhdGljIGludCBudW1fcnVubmluZyA9IDA7CitzdGF0aWMgaW50IG1heF9ydW5uaW5nID0gMDsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgY2FuY2VsX3JlcXVlc3RlZCA9IDA7CitzdGF0aWMgaW50IGtpbGxfc2VudCA9IDA7CitzdGF0aWMgY2hhciAqcHJvZ25hbWU7CitzdGF0aWMgY2hhciAqZnN0eXBlID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZnNfaW5mbyAqZmlsZXN5c19pbmZvID0gTlVMTCwgKmZpbGVzeXNfbGFzdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGZzY2tfaW5zdGFuY2UgKmluc3RhbmNlX2xpc3Q7CitzdGF0aWMgY29uc3QgY2hhciAqZnNja19wcmVmaXhfcGF0aCA9ICIvc2Jpbjovc2Jpbi9mcy5kOi9zYmluL2ZzOi9ldGMvZnM6L2V0YyI7CitzdGF0aWMgY2hhciAqZnNja19wYXRoID0gMDsKK3N0YXRpYyBibGtpZF9jYWNoZSBjYWNoZSA9IE5VTEw7CisKK3N0YXRpYyBjaGFyICpzdHJpbmdfY29weShjb25zdCBjaGFyICpzKQoreworCWNoYXIJKnJldDsKKworCWlmICghcykKKwkJcmV0dXJuIDA7CisJcmV0ID0gbWFsbG9jKHN0cmxlbihzKSsxKTsKKwlpZiAocmV0KQorCQlzdHJjcHkocmV0LCBzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0cmluZ190b19pbnQoY29uc3QgY2hhciAqcykKK3sKKwlsb25nIGw7CisJY2hhciAqcDsKKworCWwgPSBzdHJ0b2wocywgJnAsIDApOworCWlmICgqcCB8fCBsID09IExPTkdfTUlOIHx8IGwgPT0gTE9OR19NQVggfHwgbCA8IDAgfHwgbCA+IElOVF9NQVgpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAoaW50KSBsOworfQorCitzdGF0aWMgaW50IGlnbm9yZShzdHJ1Y3QgZnNfaW5mbyAqKTsKKworc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFuayhjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfd29yZChjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF9saW5lKGNoYXIgKmxpbmUpCit7CisJY2hhcgkqcDsKKworCXdoaWxlICgqbGluZSkgeworCQlwID0gbGluZSArIHN0cmxlbihsaW5lKSAtIDE7CisJCWlmICgoKnAgPT0gJ1xuJykgfHwgKCpwID09ICdccicpKQorCQkJKnAgPSAwOworCQllbHNlCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV93b3JkKGNoYXIgKipidWYpCit7CisJY2hhciAqd29yZCwgKm5leHQ7CisKKwl3b3JkID0gKmJ1ZjsKKwlpZiAoKndvcmQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3b3JkID0gc2tpcF9vdmVyX2JsYW5rKHdvcmQpOworCW5leHQgPSBza2lwX292ZXJfd29yZCh3b3JkKTsKKwlpZiAoKm5leHQpCisJCSpuZXh0KysgPSAwOworCSpidWYgPSBuZXh0OworCXJldHVybiB3b3JkOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9lc2NhcGUoY2hhciAqd29yZCkKK3sKKwljaGFyCSpwLCAqcTsKKwlpbnQJYWMsIGk7CisKKwlpZiAoIXdvcmQpCisJCXJldHVybjsKKworCWZvciAocCA9IHdvcmQsIHEgPSB3b3JkOyAqcDsgcCsrLCBxKyspIHsKKwkJKnEgPSAqcDsKKwkJaWYgKCpwICE9ICdcXCcpCisJCQljb250aW51ZTsKKwkJaWYgKCorK3AgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoKnAgPT0gJ3QnKSB7CisJCQkqcSA9ICdcdCc7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKnAgPT0gJ24nKSB7CisJCQkqcSA9ICdcbic7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWlzZGlnaXQoKnApKSB7CisJCQkqcSA9ICpwOworCQkJY29udGludWU7CisJCX0KKwkJYWMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrLCBwKyspIHsKKwkJCWlmICghaXNkaWdpdCgqcCkpCisJCQkJYnJlYWs7CisJCQlhYyA9IChhYyAqIDgpICsgKCpwIC0gJzAnKTsKKwkJfQorCQkqcSA9IGFjOworCQlwLS07CisJfQorCSpxID0gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9pbnN0YW5jZShzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaSkKK3sKKwlmcmVlKGktPnByb2cpOworCWZyZWUoaS0+ZGV2aWNlKTsKKwlmcmVlKGktPmJhc2VfZGV2aWNlKTsKKwlmcmVlKGkpOworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBmc19pbmZvICpjcmVhdGVfZnNfZGV2aWNlKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqbW50cG50LAorCQkJCQljb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpvcHRzLAorCQkJCQlpbnQgZnJlcSwgaW50IHBhc3NubykKK3sKKwlzdHJ1Y3QgZnNfaW5mbyAqZnM7CisKKwlpZiAoIShmcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGZzX2luZm8pKSkpCisJCXJldHVybiBOVUxMOworCisJZnMtPmRldmljZSA9IHN0cmluZ19jb3B5KGRldmljZSk7CisJZnMtPm1vdW50cHQgPSBzdHJpbmdfY29weShtbnRwbnQpOworCWZzLT50eXBlID0gc3RyaW5nX2NvcHkodHlwZSk7CisJZnMtPm9wdHMgPSBzdHJpbmdfY29weShvcHRzID8gb3B0cyA6ICIiKTsKKwlmcy0+ZnJlcSA9IGZyZXE7CisJZnMtPnBhc3NubyA9IHBhc3NubzsKKwlmcy0+ZmxhZ3MgPSAwOworCWZzLT5uZXh0ID0gTlVMTDsKKworCWlmICghZmlsZXN5c19pbmZvKQorCQlmaWxlc3lzX2luZm8gPSBmczsKKwllbHNlCisJCWZpbGVzeXNfbGFzdC0+bmV4dCA9IGZzOworCWZpbGVzeXNfbGFzdCA9IGZzOworCisJcmV0dXJuIGZzOworfQorCisKKworc3RhdGljIGludCBwYXJzZV9mc3RhYl9saW5lKGNoYXIgKmxpbmUsIHN0cnVjdCBmc19pbmZvICoqcmV0X2ZzKQoreworCWNoYXIJKmRldiwgKmRldmljZSwgKm1udHBudCwgKnR5cGUsICpvcHRzLCAqZnJlcSwgKnBhc3NubywgKmNwOworCXN0cnVjdCBmc19pbmZvICpmczsKKworCSpyZXRfZnMgPSAwOworCXN0cmlwX2xpbmUobGluZSk7CisJY3AgPSBsaW5lOworCisJZGV2aWNlID0gcGFyc2Vfd29yZCgmY3ApOworCWlmICghZGV2aWNlIHx8ICpkZXZpY2UgPT0gJyMnKQorCQlyZXR1cm4gMDsJLyogSWdub3JlIGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cyAqLworCW1udHBudCA9IHBhcnNlX3dvcmQoJmNwKTsKKwl0eXBlID0gcGFyc2Vfd29yZCgmY3ApOworCW9wdHMgPSBwYXJzZV93b3JkKCZjcCk7CisJZnJlcSA9IHBhcnNlX3dvcmQoJmNwKTsKKwlwYXNzbm8gPSBwYXJzZV93b3JkKCZjcCk7CisKKwlpZiAoIW1udHBudCB8fCAhdHlwZSkKKwkJcmV0dXJuIC0xOworCisJcGFyc2VfZXNjYXBlKGRldmljZSk7CisJcGFyc2VfZXNjYXBlKG1udHBudCk7CisJcGFyc2VfZXNjYXBlKHR5cGUpOworCXBhcnNlX2VzY2FwZShvcHRzKTsKKwlwYXJzZV9lc2NhcGUoZnJlcSk7CisJcGFyc2VfZXNjYXBlKHBhc3Nubyk7CisKKwlkZXYgPSBibGtpZF9nZXRfZGV2bmFtZShjYWNoZSwgZGV2aWNlLCBOVUxMKTsKKwlpZiAoZGV2KQorCQlkZXZpY2UgPSBkZXY7CisKKwlpZiAoc3RyY2hyKHR5cGUsICcsJykpCisJCXR5cGUgPSAwOworCisJZnMgPSBjcmVhdGVfZnNfZGV2aWNlKGRldmljZSwgbW50cG50LCB0eXBlID8gdHlwZSA6ICJhdXRvIiwgb3B0cywKKwkJCSAgICAgIGZyZXEgPyBhdG9pKGZyZXEpIDogLTEsCisJCQkgICAgICBwYXNzbm8gPyBhdG9pKHBhc3NubykgOiAtMSk7CisJZnJlZShkZXYpOworCisJaWYgKCFmcykKKwkJcmV0dXJuIC0xOworCSpyZXRfZnMgPSBmczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50ZXJwcmV0X3R5cGUoc3RydWN0IGZzX2luZm8gKmZzKQoreworCWNoYXIJKnQ7CisKKwlpZiAoc3RyY21wKGZzLT50eXBlLCAiYXV0byIpICE9IDApCisJCXJldHVybjsKKwl0ID0gYmxraWRfZ2V0X3RhZ192YWx1ZShjYWNoZSwgIlRZUEUiLCBmcy0+ZGV2aWNlKTsKKwlpZiAodCkgeworCQlmcmVlKGZzLT50eXBlKTsKKwkJZnMtPnR5cGUgPSB0OworCX0KK30KKworLyoKKyAqIExvYWQgdGhlIGZpbGVzeXN0ZW0gZGF0YWJhc2UgZnJvbSAvZXRjL2ZzdGFiCisgKi8KK3N0YXRpYyB2b2lkIGxvYWRfZnNfaW5mbyhjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlGSUxFCSpmOworCWNoYXIJYnVmWzEwMjRdOworCWludAlsaW5lbm8gPSAwOworCWludAlvbGRfZnN0YWIgPSAxOworCXN0cnVjdCBmc19pbmZvICpmczsKKworCWlmICgoZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIiksCisJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJbGluZW5vKys7CisJCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpCisJCQlicmVhazsKKwkJYnVmW3NpemVvZihidWYpLTFdID0gMDsKKwkJaWYgKHBhcnNlX2ZzdGFiX2xpbmUoYnVmLCAmZnMpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIldBUk5JTkc6IGJhZCBmb3JtYXQgIgorCQkJCSJvbiBsaW5lICVkIG9mICVzXG4iKSwgbGluZW5vLCBmaWxlbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWZzKQorCQkJY29udGludWU7CisJCWlmIChmcy0+cGFzc25vIDwgMCkKKwkJCWZzLT5wYXNzbm8gPSAwOworCQllbHNlCisJCQlvbGRfZnN0YWIgPSAwOworCX0KKworCWZjbG9zZShmKTsKKworCWlmIChvbGRfZnN0YWIgJiYgZmlsZXN5c19pbmZvKSB7CisJCWZwdXRzKCJcMDA3XDAwN1wwMDciLCBzdGRlcnIpOworCQlmcHV0cyhfKAorCQkiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisJCSIJZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorCQkiCXNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuXG4iKSwgc3RkZXJyKTsKKworCQlmb3IgKGZzID0gZmlsZXN5c19pbmZvOyBmczsgZnMgPSBmcy0+bmV4dCkgeworCQkJZnMtPnBhc3NubyA9IDE7CisJCX0KKwl9Cit9CisKKy8qIExvb2t1cCBmaWxlc3lzIGluIC9ldGMvZnN0YWIgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBlbnRyeS4gKi8KK3N0YXRpYyBzdHJ1Y3QgZnNfaW5mbyAqbG9va3VwKGNoYXIgKmZpbGVzeXMpCit7CisJc3RydWN0IGZzX2luZm8gKmZzOworCisJLyogTm8gZmlsZXN5cyBuYW1lIGdpdmVuLiAqLworCWlmIChmaWxlc3lzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZm9yIChmcyA9IGZpbGVzeXNfaW5mbzsgZnM7IGZzID0gZnMtPm5leHQpIHsKKwkJaWYgKCFzdHJjbXAoZmlsZXN5cywgZnMtPmRldmljZSkgfHwKKwkJICAgIChmcy0+bW91bnRwdCAmJiAhc3RyY21wKGZpbGVzeXMsIGZzLT5tb3VudHB0KSkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZnM7Cit9CisKKy8qIEZpbmQgZnNjayBwcm9ncmFtIGZvciBhIGdpdmVuIGZzIHR5cGUuICovCitzdGF0aWMgY2hhciAqZmluZF9mc2NrKGNoYXIgKnR5cGUpCit7CisgIGNoYXIgKnM7CisgIGNvbnN0IGNoYXIgKnRwbDsKKyAgc3RhdGljIGNoYXIgcHJvZ1syNTZdOworICBjaGFyICpwID0gc3RyaW5nX2NvcHkoZnNja19wYXRoKTsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgLyogQXJlIHdlIGxvb2tpbmcgZm9yIGEgcHJvZ3JhbSBvciBqdXN0IGEgdHlwZT8gKi8KKyAgdHBsID0gKHN0cm5jbXAodHlwZSwgImZzY2suIiwgNSkgPyAiJXMvZnNjay4lcyIgOiAiJXMvJXMiKTsKKworICBmb3IocyA9IHN0cnRvayhwLCAiOiIpOyBzOyBzID0gc3RydG9rKE5VTEwsICI6IikpIHsKKwlzcHJpbnRmKHByb2csIHRwbCwgcywgdHlwZSk7CisJaWYgKHN0YXQocHJvZywgJnN0KSA9PSAwKSBicmVhazsKKyAgfQorICBmcmVlKHApOworICByZXR1cm4ocyA/IHByb2cgOiBOVUxMKTsKK30KKworc3RhdGljIGludCBwcm9ncmVzc19hY3RpdmUoTk9BUkdTKQoreworCXN0cnVjdCBmc2NrX2luc3RhbmNlICppbnN0OworCisJZm9yIChpbnN0ID0gaW5zdGFuY2VfbGlzdDsgaW5zdDsgaW5zdCA9IGluc3QtPm5leHQpIHsKKwkJaWYgKGluc3QtPmZsYWdzICYgRkxBR19ET05FKQorCQkJY29udGludWU7CisJCWlmIChpbnN0LT5mbGFncyAmIEZMQUdfUFJPR1JFU1MpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBFeGVjdXRlIGEgcGFydGljdWxhciBmc2NrIHByb2dyYW0sIGFuZCBsaW5rIGl0IGludG8gdGhlIGxpc3Qgb2YKKyAqIGNoaWxkIHByb2Nlc3NlcyB3ZSBhcmUgd2FpdGluZyBmb3IuCisgKi8KK3N0YXRpYyBpbnQgZXhlY3V0ZShjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKm1udHB0LAorCQkgICBpbnQgaW50ZXJhY3RpdmUpCit7CisJY2hhciAqcywgKmFyZ3ZbODBdLCBwcm9nWzgwXTsKKwlpbnQgIGFyZ2MsIGk7CisJc3RydWN0IGZzY2tfaW5zdGFuY2UgKmluc3QsICpwOworCXBpZF90CXBpZDsKKworCWluc3QgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2NrX2luc3RhbmNlKSk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gRU5PTUVNOworCW1lbXNldChpbnN0LCAwLCBzaXplb2Yoc3RydWN0IGZzY2tfaW5zdGFuY2UpKTsKKworCXNwcmludGYocHJvZywgImZzY2suJXMiLCB0eXBlKTsKKwlhcmd2WzBdID0gc3RyaW5nX2NvcHkocHJvZyk7CisJYXJnYyA9IDE7CisKKwlmb3IgKGk9MDsgaSA8bnVtX2FyZ3M7IGkrKykKKwkJYXJndlthcmdjKytdID0gc3RyaW5nX2NvcHkoYXJnc1tpXSk7CisKKwlpZiAocHJvZ3Jlc3MpIHsKKwkJaWYgKChzdHJjbXAodHlwZSwgImV4dDIiKSA9PSAwKSB8fAorCQkgICAgKHN0cmNtcCh0eXBlLCAiZXh0MyIpID09IDApIHx8CisJCSAgICAoc3RyY21wKHR5cGUsICJleHQ0IikgPT0gMCkgfHwKKwkJICAgIChzdHJjbXAodHlwZSwgImV4dDRkZXYiKSA9PSAwKSkgeworCQkJY2hhciB0bXBbODBdOworCisJCQl0bXBbMF0gPSAwOworCQkJaWYgKCFwcm9ncmVzc19hY3RpdmUoKSkgeworCQkJCXNucHJpbnRmKHRtcCwgODAsICItQyVkIiwgcHJvZ3Jlc3NfZmQpOworCQkJCWluc3QtPmZsYWdzIHw9IEZMQUdfUFJPR1JFU1M7CisJCQl9IGVsc2UgaWYgKHByb2dyZXNzX2ZkKQorCQkJCXNucHJpbnRmKHRtcCwgODAsICItQyVkIiwgcHJvZ3Jlc3NfZmQgKiAtMSk7CisJCQlpZiAodG1wWzBdKQorCQkJCWFyZ3ZbYXJnYysrXSA9IHN0cmluZ19jb3B5KHRtcCk7CisJCX0KKwl9CisKKwlhcmd2W2FyZ2MrK10gPSBzdHJpbmdfY29weShkZXZpY2UpOworCWFyZ3ZbYXJnY10gPSAwOworCisJcyA9IGZpbmRfZnNjayhwcm9nKTsKKwlpZiAocyA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJmc2NrOiAlczogbm90IGZvdW5kXG4iKSwgcHJvZyk7CisJCWZyZWUoaW5zdCk7CisJCXJldHVybiBFTk9FTlQ7CisJfQorCisJaWYgKHZlcmJvc2UgfHwgbm9leGVjdXRlKSB7CisJCXByaW50ZigiWyVzICglZCkgLS0gJXNdICIsIHMsIG51bV9ydW5uaW5nLAorCQkgICAgICAgbW50cHQgPyBtbnRwdCA6IGRldmljZSk7CisJCWZvciAoaT0wOyBpIDwgYXJnYzsgaSsrKQorCQkJcHJpbnRmKCIlcyAiLCBhcmd2W2ldKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCS8qIEZvcmsgYW5kIGV4ZWN1dGUgdGhlIGNvcnJlY3QgcHJvZ3JhbS4gKi8KKwlpZiAobm9leGVjdXRlKQorCQlwaWQgPSAtMTsKKwllbHNlIGlmICgocGlkID0gZm9yaygpKSA8IDApIHsKKwkJcGVycm9yKCJmb3JrIik7CisJCWZyZWUoaW5zdCk7CisJCXJldHVybiBlcnJubzsKKwl9IGVsc2UgaWYgKHBpZCA9PSAwKSB7CisJCWlmICghaW50ZXJhY3RpdmUpCisJCQljbG9zZSgwKTsKKwkJKHZvaWQpIGV4ZWN2KHMsIGFyZ3YpOworCQlwZXJyb3IoYXJndlswXSk7CisJCWZyZWUoaW5zdCk7CisJCWV4aXQoRVhJVF9FUlJPUik7CisJfQorCisJZm9yIChpPTA7IGkgPCBhcmdjOyBpKyspCisJCWZyZWUoYXJndltpXSk7CisKKwlpbnN0LT5waWQgPSBwaWQ7CisJaW5zdC0+cHJvZyA9IHN0cmluZ19jb3B5KHByb2cpOworCWluc3QtPnR5cGUgPSBzdHJpbmdfY29weSh0eXBlKTsKKwlpbnN0LT5kZXZpY2UgPSBzdHJpbmdfY29weShkZXZpY2UpOworCWluc3QtPmJhc2VfZGV2aWNlID0gYmFzZV9kZXZpY2UoZGV2aWNlKTsKKwlpbnN0LT5zdGFydF90aW1lID0gdGltZSgwKTsKKwlpbnN0LT5uZXh0ID0gTlVMTDsKKworCS8qCisJICogRmluZCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBzbyB3ZSBhZGQgdGhlIGluc3RhbmNlIG9uIGF0IHRoZSBlbmQuCisJICovCisJZm9yIChwID0gaW5zdGFuY2VfbGlzdDsgcCAmJiBwLT5uZXh0OyBwID0gcC0+bmV4dCk7CisKKwlpZiAocCkKKwkJcC0+bmV4dCA9IGluc3Q7CisJZWxzZQorCQlpbnN0YW5jZV9saXN0ID0gaW5zdDsKKworCXJldHVybiAwOworfQorCisvKgorICogU2VuZCBhIHNpZ25hbCB0byBhbGwgb3V0c3RhbmRpbmcgZnNjayBjaGlsZCBwcm9jZXNzZXMKKyAqLworc3RhdGljIGludCBraWxsX2FsbChpbnQgc2lnbnVtKQoreworCXN0cnVjdCBmc2NrX2luc3RhbmNlICppbnN0OworCWludAluID0gMDsKKworCWZvciAoaW5zdCA9IGluc3RhbmNlX2xpc3Q7IGluc3Q7IGluc3QgPSBpbnN0LT5uZXh0KSB7CisJCWlmIChpbnN0LT5mbGFncyAmIEZMQUdfRE9ORSkKKwkJCWNvbnRpbnVlOworCQlraWxsKGluc3QtPnBpZCwgc2lnbnVtKTsKKwkJbisrOworCX0KKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIFdhaXQgZm9yIG9uZSBjaGlsZCBwcm9jZXNzIHRvIGV4aXQ7IHdoZW4gaXQgZG9lcywgdW5saW5rIGl0IGZyb20KKyAqIHRoZSBsaXN0IG9mIGV4ZWN1dGluZyBjaGlsZCBwcm9jZXNzZXMsIGFuZCByZXR1cm4gaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNja19pbnN0YW5jZSAqd2FpdF9vbmUoaW50IGZsYWdzKQoreworCWludAlzdGF0dXM7CisJaW50CXNpZzsKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdCwgKmluc3QyLCAqcHJldjsKKwlwaWRfdAlwaWQ7CisKKwlpZiAoIWluc3RhbmNlX2xpc3QpCisJCXJldHVybiBOVUxMOworCisJaWYgKG5vZXhlY3V0ZSkgeworCQlpbnN0ID0gaW5zdGFuY2VfbGlzdDsKKwkJcHJldiA9IDA7CisjaWZkZWYgUkFORE9NX0RFQlVHCisJCXdoaWxlIChpbnN0LT5uZXh0ICYmIChyYW5kb20oKSAmIDEpKSB7CisJCQlwcmV2ID0gaW5zdDsKKwkJCWluc3QgPSBpbnN0LT5uZXh0OworCQl9CisjZW5kaWYKKwkJaW5zdC0+ZXhpdF9zdGF0dXMgPSAwOworCQlnb3RvIHJldF9pbnN0OworCX0KKworCS8qCisJICogZ2NjIC1XYWxsIGZhaWxzIHNhdmluZyB0aHJvdyBhZ2FpbnN0IHN0dXBpZGl0eQorCSAqIChpbnN0IGFuZCBwcmV2IGFyZSB0aG91Z2h0IHRvIGJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKQorCSAqLworCWluc3QgPSBwcmV2ID0gTlVMTDsKKworCWRvIHsKKwkJcGlkID0gd2FpdHBpZCgtMSwgJnN0YXR1cywgZmxhZ3MpOworCQlpZiAoY2FuY2VsX3JlcXVlc3RlZCAmJiAha2lsbF9zZW50KSB7CisJCQlraWxsX2FsbChTSUdURVJNKTsKKwkJCWtpbGxfc2VudCsrOworCQl9CisJCWlmICgocGlkID09IDApICYmIChmbGFncyAmIFdOT0hBTkcpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChwaWQgPCAwKSB7CisJCQlpZiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChlcnJubyA9PSBFQ0hJTEQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIiksCisJCQkJCXByb2duYW1lKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXBlcnJvcigid2FpdCIpOworCQkJY29udGludWU7CisJCX0KKwkJZm9yIChwcmV2ID0gMCwgaW5zdCA9IGluc3RhbmNlX2xpc3Q7CisJCSAgICAgaW5zdDsKKwkJICAgICBwcmV2ID0gaW5zdCwgaW5zdCA9IGluc3QtPm5leHQpIHsKKwkJCWlmIChpbnN0LT5waWQgPT0gcGlkKQorCQkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIWluc3QpOworCisJaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorCQlzdGF0dXMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworCWVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKwkJc2lnID0gV1RFUk1TSUcoc3RhdHVzKTsKKwkJaWYgKHNpZyA9PSBTSUdJTlQpIHsKKwkJCXN0YXR1cyA9IEVYSVRfVU5DT1JSRUNURUQ7CisJCX0gZWxzZSB7CisJCQlwcmludGYoXygiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCAiCisJCQkgICAgICAgIndpdGggc2lnbmFsICVkLlxuIiksCisJCQkgICAgICAgaW5zdC0+cHJvZywgaW5zdC0+ZGV2aWNlLCBzaWcpOworCQkJc3RhdHVzID0gRVhJVF9FUlJPUjsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ZihfKCIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIiksCisJCSAgICAgICBpbnN0LT5wcm9nLCBpbnN0LT5kZXZpY2UsIHN0YXR1cyk7CisJCXN0YXR1cyA9IEVYSVRfRVJST1I7CisJfQorCWluc3QtPmV4aXRfc3RhdHVzID0gc3RhdHVzOworCWluc3QtPmZsYWdzIHw9IEZMQUdfRE9ORTsKKwlpZiAocHJvZ3Jlc3MgJiYgKGluc3QtPmZsYWdzICYgRkxBR19QUk9HUkVTUykgJiYKKwkgICAgIXByb2dyZXNzX2FjdGl2ZSgpKSB7CisJCWZvciAoaW5zdDIgPSBpbnN0YW5jZV9saXN0OyBpbnN0MjsgaW5zdDIgPSBpbnN0Mi0+bmV4dCkgeworCQkJaWYgKGluc3QyLT5mbGFncyAmIEZMQUdfRE9ORSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJjbXAoaW5zdDItPnR5cGUsICJleHQyIikgJiYKKwkJCSAgICBzdHJjbXAoaW5zdDItPnR5cGUsICJleHQzIikgJiYKKwkJCSAgICBzdHJjbXAoaW5zdDItPnR5cGUsICJleHQ0IikgJiYKKwkJCSAgICBzdHJjbXAoaW5zdDItPnR5cGUsICJleHQ0ZGV2IikpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogSWYgd2UndmUganVzdCBzdGFydGVkIHRoZSBmc2NrLCB3YWl0IGEgdGlueQorCQkJICogYml0IGJlZm9yZSBzZW5kaW5nIHRoZSBraWxsLCB0byBnaXZlIGl0CisJCQkgKiB0aW1lIHRvIHNldCB1cCB0aGUgc2lnbmFsIGhhbmRsZXIKKwkJCSAqLworCQkJaWYgKGluc3QyLT5zdGFydF90aW1lIDwgdGltZSgwKSsyKSB7CisJCQkJaWYgKGZvcmsoKSA9PSAwKSB7CisJCQkJCXNsZWVwKDEpOworCQkJCQlraWxsKGluc3QyLT5waWQsIFNJR1VTUjEpOworCQkJCQlleGl0KDApOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWtpbGwoaW5zdDItPnBpZCwgU0lHVVNSMSk7CisJCQlpbnN0Mi0+ZmxhZ3MgfD0gRkxBR19QUk9HUkVTUzsKKwkJCWJyZWFrOworCQl9CisJfQorcmV0X2luc3Q6CisJaWYgKHByZXYpCisJCXByZXYtPm5leHQgPSBpbnN0LT5uZXh0OworCWVsc2UKKwkJaW5zdGFuY2VfbGlzdCA9IGluc3QtPm5leHQ7CisJaWYgKHZlcmJvc2UgPiAxKQorCQlwcmludGYoXygiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iKSwKKwkJICAgICAgIGluc3QtPmRldmljZSwgaW5zdC0+ZXhpdF9zdGF0dXMpOworCW51bV9ydW5uaW5nLS07CisJcmV0dXJuIGluc3Q7Cit9CisKKyNkZWZpbmUgRkxBR19XQUlUX0FMTAkJMAorI2RlZmluZSBGTEFHX1dBSVRfQVRMRUFTVF9PTkUJMQorLyoKKyAqIFdhaXQgdW50aWwgYWxsIGV4ZWN1dGluZyBjaGlsZCBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQ7IHJldHVybiB0aGUKKyAqIGxvZ2ljYWwgT1Igb2YgYWxsIG9mIHRoZWlyIGV4aXQgY29kZSB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbnQgd2FpdF9tYW55KGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdDsKKwlpbnQJZ2xvYmFsX3N0YXR1cyA9IDA7CisJaW50CXdhaXRfZmxhZ3MgPSAwOworCisJd2hpbGUgKChpbnN0ID0gd2FpdF9vbmUod2FpdF9mbGFncykpKSB7CisJCWdsb2JhbF9zdGF0dXMgfD0gaW5zdC0+ZXhpdF9zdGF0dXM7CisJCWZyZWVfaW5zdGFuY2UoaW5zdCk7CisjaWZkZWYgUkFORE9NX0RFQlVHCisJCWlmIChub2V4ZWN1dGUgJiYgKGZsYWdzICYgV05PSEFORykgJiYgIShyYW5kb20oKSAlIDMpKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJaWYgKGZsYWdzICYgRkxBR19XQUlUX0FUTEVBU1RfT05FKQorCQkJd2FpdF9mbGFncyA9IFdOT0hBTkc7CisJfQorCXJldHVybiBnbG9iYWxfc3RhdHVzOworfQorCisvKgorICogUnVuIHRoZSBmc2NrIHByb2dyYW0gb24gYSBwYXJ0aWN1bGFyIGRldmljZQorICoKKyAqIElmIHRoZSB0eXBlIGlzIHNwZWNpZmllZCB1c2luZyAtdCwgYW5kIGl0IGlzbid0IHByZWZpeGVkIHdpdGggIm5vIgorICogKGFzIGluICJub2V4dDIiKSBhbmQgb25seSBvbmUgZmlsZXN5c3RlbSB0eXBlIGlzIHNwZWNpZmllZCwgdGhlbgorICogdXNlIHRoYXQgdHlwZSByZWdhcmRsZXNzIG9mIHdoYXQgaXMgc3BlY2lmaWVkIGluIC9ldGMvZnN0YWIuCisgKgorICogSWYgdGhlIHR5cGUgaXNuJ3Qgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSBlaXRoZXIgdGhlIHR5cGUKKyAqIHNwZWNpZmllZCBpbiAvZXRjL2ZzdGFiLCBvciBERUZBVUxUX0ZTVFlQRS4KKyAqLworc3RhdGljIHZvaWQgZnNja19kZXZpY2Uoc3RydWN0IGZzX2luZm8gKmZzLCBpbnQgaW50ZXJhY3RpdmUpCit7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgcmV0dmFsOworCisJaW50ZXJwcmV0X3R5cGUoZnMpOworCisJaWYgKHN0cmNtcChmcy0+dHlwZSwgImF1dG8iKSAhPSAwKQorCQl0eXBlID0gZnMtPnR5cGU7CisJZWxzZSBpZiAoZnN0eXBlICYmIHN0cm5jbXAoZnN0eXBlLCAibm8iLCAyKSAmJgorCSAgICBzdHJuY21wKGZzdHlwZSwgIm9wdHM9IiwgNSkgJiYgc3RybmNtcChmc3R5cGUsICJsb29wIiwgNCkgJiYKKwkgICAgIXN0cmNocihmc3R5cGUsICcsJykpCisJCXR5cGUgPSBmc3R5cGU7CisJZWxzZQorCQl0eXBlID0gREVGQVVMVF9GU1RZUEU7CisKKwludW1fcnVubmluZysrOworCXJldHZhbCA9IGV4ZWN1dGUodHlwZSwgZnMtPmRldmljZSwgZnMtPm1vdW50cHQsIGludGVyYWN0aXZlKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgIgorCQkJImZvciAlc1xuIiksIHByb2duYW1lLCByZXR2YWwsIHR5cGUsIGZzLT5kZXZpY2UpOworCQludW1fcnVubmluZy0tOworCX0KK30KKworCisvKgorICogRGVhbCB3aXRoIHRoZSBmc2NrIC10IGFyZ3VtZW50LgorICovCitzdGF0aWMgc3RydWN0IGZzX3R5cGVfY29tcGlsZSB7CisJY2hhciAqKmxpc3Q7CisJaW50ICp0eXBlOworCWludCAgbmVnYXRlOworfSBmc190eXBlX2NvbXBpbGVkOworCisjZGVmaW5lIEZTX1RZUEVfTk9STUFMCTAKKyNkZWZpbmUgRlNfVFlQRV9PUFQJMQorI2RlZmluZSBGU19UWVBFX05FR09QVAkyCisKK3N0YXRpYyBjb25zdCBjaGFyICpmc190eXBlX3N5bnRheF9lcnJvciA9CitOXygiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisgICAid2l0aCAnbm8nIG9yICchJy5cbiIpOworCitzdGF0aWMgdm9pZCBjb21waWxlX2ZzX3R5cGUoY2hhciAqZnNfdHlwZSwgc3RydWN0IGZzX3R5cGVfY29tcGlsZSAqY21wKQoreworCWNoYXIgCSpjcCwgKmxpc3QsICpzOworCWludAludW0gPSAyOworCWludAluZWdhdGUsIGZpcnN0X25lZ2F0ZSA9IDE7CisKKwlpZiAoZnNfdHlwZSkgeworCQlmb3IgKGNwPWZzX3R5cGU7ICpjcDsgY3ArKykgeworCQkJaWYgKCpjcCA9PSAnLCcpCisJCQkJbnVtKys7CisJCX0KKwl9CisKKwljbXAtPmxpc3QgPSBtYWxsb2MobnVtICogc2l6ZW9mKGNoYXIgKikpOworCWNtcC0+dHlwZSA9IG1hbGxvYyhudW0gKiBzaXplb2YoaW50KSk7CisJaWYgKCFjbXAtPmxpc3QgfHwgIWNtcC0+dHlwZSkgeworCQlmcHV0cyhfKCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlleGl0KEVYSVRfRVJST1IpOworCX0KKwltZW1zZXQoY21wLT5saXN0LCAwLCBudW0gKiBzaXplb2YoY2hhciAqKSk7CisJbWVtc2V0KGNtcC0+dHlwZSwgMCwgbnVtICogc2l6ZW9mKGludCkpOworCWNtcC0+bmVnYXRlID0gMDsKKworCWlmICghZnNfdHlwZSkKKwkJcmV0dXJuOworCisJbGlzdCA9IHN0cmluZ19jb3B5KGZzX3R5cGUpOworCW51bSA9IDA7CisJcyA9IHN0cnRvayhsaXN0LCAiLCIpOworCXdoaWxlKHMpIHsKKwkJbmVnYXRlID0gMDsKKwkJaWYgKHN0cm5jbXAocywgIm5vIiwgMikgPT0gMCkgeworCQkJcyArPSAyOworCQkJbmVnYXRlID0gMTsKKwkJfSBlbHNlIGlmICgqcyA9PSAnIScpIHsKKwkJCXMrKzsKKwkJCW5lZ2F0ZSA9IDE7CisJCX0KKwkJaWYgKHN0cmNtcChzLCAibG9vcCIpID09IDApCisJCQkvKiBsb29wIGlzIHJlYWxseSBzaG9ydC1oYW5kIGZvciBvcHRzPWxvb3AgKi8KKwkJCWdvdG8gbG9vcF9zcGVjaWFsX2Nhc2U7CisJCWVsc2UgaWYgKHN0cm5jbXAocywgIm9wdHM9IiwgNSkgPT0gMCkgeworCQkJcyArPSA1OworCQlsb29wX3NwZWNpYWxfY2FzZToKKwkJCWNtcC0+dHlwZVtudW1dID0gbmVnYXRlID8gRlNfVFlQRV9ORUdPUFQgOiBGU19UWVBFX09QVDsKKwkJfSBlbHNlIHsKKwkJCWlmIChmaXJzdF9uZWdhdGUpIHsKKwkJCQljbXAtPm5lZ2F0ZSA9IG5lZ2F0ZTsKKwkJCQlmaXJzdF9uZWdhdGUgPSAwOworCQkJfQorCQkJaWYgKChuZWdhdGUgJiYgIWNtcC0+bmVnYXRlKSB8fAorCQkJICAgICghbmVnYXRlICYmIGNtcC0+bmVnYXRlKSkgeworCQkJCWZwdXRzKF8oZnNfdHlwZV9zeW50YXhfZXJyb3IpLCBzdGRlcnIpOworCQkJCWV4aXQoRVhJVF9VU0FHRSk7CisJCQl9CisJCX0KKyNpZiAwCisJCXByaW50ZigiQWRkaW5nICVzIHRvIGxpc3QgKHR5cGUgJWQpLlxuIiwgcywgY21wLT50eXBlW251bV0pOworI2VuZGlmCisJICAgICAgICBjbXAtPmxpc3RbbnVtKytdID0gc3RyaW5nX2NvcHkocyk7CisJCXMgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKwl9CisJZnJlZShsaXN0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIGEgcGFydGljdWxhciBvcHRpb24gYXBwZWFycyBpbiBhCisgKiBjb21tYS1kZWxpbWl0ZWQgb3B0aW9ucyBsaXN0CisgKi8KK3N0YXRpYyBpbnQgb3B0X2luX2xpc3QoY29uc3QgY2hhciAqb3B0LCBjaGFyICpvcHRsaXN0KQoreworCWNoYXIJKmxpc3QsICpzOworCisJaWYgKCFvcHRsaXN0KQorCQlyZXR1cm4gMDsKKwlsaXN0ID0gc3RyaW5nX2NvcHkob3B0bGlzdCk7CisKKwlzID0gc3RydG9rKGxpc3QsICIsIik7CisJd2hpbGUocykgeworCQlpZiAoc3RyY21wKHMsIG9wdCkgPT0gMCkgeworCQkJZnJlZShsaXN0KTsKKwkJCXJldHVybiAxOworCQl9CisJCXMgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKwl9CisgICAgICAgIGZyZWUobGlzdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNlZSBpZiB0aGUgZmlsZXN5c3RlbSBtYXRjaGVzIHRoZSBjcml0ZXJpYSBnaXZlbiBieSB0aGUgLXQgb3B0aW9uICovCitzdGF0aWMgaW50IGZzX21hdGNoKHN0cnVjdCBmc19pbmZvICpmcywgc3RydWN0IGZzX3R5cGVfY29tcGlsZSAqY21wKQoreworCWludCBuLCByZXQgPSAwLCBjaGVja2VkX3R5cGUgPSAwOworCWNoYXIgKmNwOworCisJaWYgKGNtcC0+bGlzdCA9PSAwIHx8IGNtcC0+bGlzdFswXSA9PSAwKQorCQlyZXR1cm4gMTsKKworCWZvciAobj0wOyAoY3AgPSBjbXAtPmxpc3Rbbl0pOyBuKyspIHsKKwkJc3dpdGNoIChjbXAtPnR5cGVbbl0pIHsKKwkJY2FzZSBGU19UWVBFX05PUk1BTDoKKwkJCWNoZWNrZWRfdHlwZSsrOworCQkJaWYgKHN0cmNtcChjcCwgZnMtPnR5cGUpID09IDApIHsKKwkJCQlyZXQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRlNfVFlQRV9ORUdPUFQ6CisJCQlpZiAob3B0X2luX2xpc3QoY3AsIGZzLT5vcHRzKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQljYXNlIEZTX1RZUEVfT1BUOgorCQkJaWYgKCFvcHRfaW5fbGlzdChjcCwgZnMtPm9wdHMpKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNoZWNrZWRfdHlwZSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gKGNtcC0+bmVnYXRlID8gIXJldCA6IHJldCk7Cit9CisKKy8qIENoZWNrIGlmIHdlIHNob3VsZCBpZ25vcmUgdGhpcyBmaWxlc3lzdGVtLiAqLworc3RhdGljIGludCBpZ25vcmUoc3RydWN0IGZzX2luZm8gKmZzKQoreworCWNvbnN0IGNoYXIgKippcDsKKwlpbnQgd2FudGVkID0gMDsKKworCS8qCisJICogSWYgdGhlIHBhc3MgbnVtYmVyIGlzIDAsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZnMtPnBhc3NubyA9PSAwKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIGJpbmQgbW91bnQsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAob3B0X2luX2xpc3QoImJpbmQiLCBmcy0+b3B0cykpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQlfKCIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzIG51bWJlclxuIiksCisJCQlmcy0+bW91bnRwdCk7CisJCXJldHVybiAxOworCX0KKworCWludGVycHJldF90eXBlKGZzKTsKKworCS8qCisJICogSWYgYSBzcGVjaWZpYyBmc3R5cGUgaXMgc3BlY2lmaWVkLCBhbmQgaXQgZG9lc24ndCBtYXRjaCwKKwkgKiBpZ25vcmUgaXQuCisJICovCisJaWYgKCFmc19tYXRjaChmcywgJmZzX3R5cGVfY29tcGlsZWQpKSByZXR1cm4gMTsKKworCS8qIEFyZSB3ZSBpZ25vcmluZyB0aGlzIHR5cGU/ICovCisJZm9yKGlwID0gaWdub3JlZF90eXBlczsgKmlwOyBpcCsrKQorCQlpZiAoc3RyY21wKGZzLT50eXBlLCAqaXApID09IDApIHJldHVybiAxOworCisJLyogRG8gd2UgcmVhbGx5IHJlYWxseSB3YW50IHRvIGNoZWNrIHRoaXMgZnM/ICovCisJZm9yKGlwID0gcmVhbGx5X3dhbnRlZDsgKmlwOyBpcCsrKQorCQlpZiAoc3RyY21wKGZzLT50eXBlLCAqaXApID09IDApIHsKKwkJCXdhbnRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJLyogU2VlIGlmIHRoZSA8ZnNjay5mcz4gcHJvZ3JhbSBpcyBhdmFpbGFibGUuICovCisJaWYgKGZpbmRfZnNjayhmcy0+dHlwZSkgPT0gTlVMTCkgeworCQlpZiAod2FudGVkKQorCQkJZnByaW50ZihzdGRlcnIsIF8oImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIpLAorCQkJCWZzLT5kZXZpY2UsIGZzLT50eXBlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogV2UgY2FuIGFuZCB3YW50IHRvIGNoZWNrIHRoaXMgZmlsZSBzeXN0ZW0gdHlwZS4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnMgVFJVRSBpZiBhIHBhcnRpdGlvbiBvbiB0aGUgc2FtZSBkaXNrIGlzIGFscmVhZHkgYmVpbmcKKyAqIGNoZWNrZWQuCisgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2FscmVhZHlfYWN0aXZlKGNoYXIgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZnNja19pbnN0YW5jZSAqaW5zdDsKKwljaGFyICpiYXNlOworCisJaWYgKGZvcmNlX2FsbF9wYXJhbGxlbCkKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBCQVNFX01ECisJLyogRG9uJ3QgY2hlY2sgYSBzb2Z0IHJhaWQgZGlzayB3aXRoIGFueSBvdGhlciBkaXNrICovCisJaWYgKGluc3RhbmNlX2xpc3QgJiYKKwkgICAgKCFzdHJuY21wKGluc3RhbmNlX2xpc3QtPmRldmljZSwgQkFTRV9NRCwgc2l6ZW9mKEJBU0VfTUQpLTEpIHx8CisJICAgICAhc3RybmNtcChkZXZpY2UsIEJBU0VfTUQsIHNpemVvZihCQVNFX01EKS0xKSkpCisJCXJldHVybiAxOworI2VuZGlmCisKKwliYXNlID0gYmFzZV9kZXZpY2UoZGV2aWNlKTsKKwkvKgorCSAqIElmIHdlIGRvbid0IGtub3cgdGhlIGJhc2UgZGV2aWNlLCBhc3N1bWUgdGhhdCB0aGUgZGV2aWNlIGlzCisJICogYWxyZWFkeSBhY3RpdmUgaWYgdGhlcmUgYXJlIGFueSBmc2NrIGluc3RhbmNlcyBydW5uaW5nLgorCSAqLworCWlmICghYmFzZSkKKwkJcmV0dXJuIChpbnN0YW5jZV9saXN0ICE9IDApOworCWZvciAoaW5zdCA9IGluc3RhbmNlX2xpc3Q7IGluc3Q7IGluc3QgPSBpbnN0LT5uZXh0KSB7CisJCWlmICghaW5zdC0+YmFzZV9kZXZpY2UgfHwgIXN0cmNtcChiYXNlLCBpbnN0LT5iYXNlX2RldmljZSkpIHsKKwkJCWZyZWUoYmFzZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlmcmVlKGJhc2UpOworCXJldHVybiAwOworfQorCisvKiBDaGVjayBhbGwgZmlsZSBzeXN0ZW1zLCB1c2luZyB0aGUgL2V0Yy9mc3RhYiB0YWJsZS4gKi8KK3N0YXRpYyBpbnQgY2hlY2tfYWxsKE5PQVJHUykKK3sKKwlzdHJ1Y3QgZnNfaW5mbyAqZnMgPSBOVUxMOworCWludCBzdGF0dXMgPSBFWElUX09LOworCWludCBub3RfZG9uZV95ZXQgPSAxOworCWludCBwYXNzbm8gPSAxOworCWludCBwYXNzX2RvbmU7CisKKwlpZiAodmVyYm9zZSkKKwkJZnB1dHMoXygiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIpLCBzdGRvdXQpOworCisJLyoKKwkgKiBEbyBhbiBpbml0aWFsIHNjYW4gb3ZlciB0aGUgZmlsZXN5c3RlbTsgbWFyayBmaWxlc3lzdGVtcworCSAqIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkIGFzIGRvbmUsIGFuZCByZXNvbHZlIGFueSAiYXV0byIKKwkgKiBmaWxlc3lzdGVtIHR5cGVzIChkb25lIGFzIGEgc2lkZS1lZmZlY3Qgb2YgY2FsbGluZyBpZ25vcmUoKSkuCisJICovCisJZm9yIChmcyA9IGZpbGVzeXNfaW5mbzsgZnM7IGZzID0gZnMtPm5leHQpIHsKKwkJaWYgKGlnbm9yZShmcykpCisJCQlmcy0+ZmxhZ3MgfD0gRkxBR19ET05FOworCX0KKworCS8qCisJICogRmluZCBhbmQgY2hlY2sgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKwkgKi8KKwlpZiAoIXBhcmFsbGVsX3Jvb3QpIHsKKwkJZm9yIChmcyA9IGZpbGVzeXNfaW5mbzsgZnM7IGZzID0gZnMtPm5leHQpIHsKKwkJCWlmICghc3RyY21wKGZzLT5tb3VudHB0LCAiLyIpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChmcykgeworCQkJaWYgKCFza2lwX3Jvb3QgJiYgIWlnbm9yZShmcykgJiYKKwkJCSAgICAhKGlnbm9yZV9tb3VudGVkICYmIGlzX21vdW50ZWQoZnMtPmRldmljZSkpKSB7CisJCQkJZnNja19kZXZpY2UoZnMsIDEpOworCQkJCXN0YXR1cyB8PSB3YWl0X21hbnkoRkxBR19XQUlUX0FMTCk7CisJCQkJaWYgKHN0YXR1cyA+IEVYSVRfTk9OREVTVFJVQ1QpCisJCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQlmcy0+ZmxhZ3MgfD0gRkxBR19ET05FOworCQl9CisJfQorCS8qCisJICogVGhpcyBpcyBmb3IgdGhlIGJvbmUtaGVhZGVkIHVzZXIgd2hvIGVudGVycyB0aGUgcm9vdAorCSAqIGZpbGVzeXN0ZW0gdHdpY2UuICBTa2lwIHJvb3Qgd2lsbCBza2VwIGFsbCByb290IGVudHJpZXMuCisJICovCisJaWYgKHNraXBfcm9vdCkKKwkJZm9yIChmcyA9IGZpbGVzeXNfaW5mbzsgZnM7IGZzID0gZnMtPm5leHQpCisJCQlpZiAoIXN0cmNtcChmcy0+bW91bnRwdCwgIi8iKSkKKwkJCQlmcy0+ZmxhZ3MgfD0gRkxBR19ET05FOworCisJd2hpbGUgKG5vdF9kb25lX3lldCkgeworCQlub3RfZG9uZV95ZXQgPSAwOworCQlwYXNzX2RvbmUgPSAxOworCisJCWZvciAoZnMgPSBmaWxlc3lzX2luZm87IGZzOyBmcyA9IGZzLT5uZXh0KSB7CisJCQlpZiAoY2FuY2VsX3JlcXVlc3RlZCkKKwkJCQlicmVhazsKKwkJCWlmIChmcy0+ZmxhZ3MgJiBGTEFHX0RPTkUpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogSWYgdGhlIGZpbGVzeXN0ZW0ncyBwYXNzIG51bWJlciBpcyBoaWdoZXIKKwkJCSAqIHRoYW4gdGhlIGN1cnJlbnQgcGFzcyBudW1iZXIsIHRoZW4gd2UgZG9uJ3QKKwkJCSAqIGRvIGl0IHlldC4KKwkJCSAqLworCQkJaWYgKGZzLT5wYXNzbm8gPiBwYXNzbm8pIHsKKwkJCQlub3RfZG9uZV95ZXQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChpZ25vcmVfbW91bnRlZCAmJiBpc19tb3VudGVkKGZzLT5kZXZpY2UpKSB7CisJCQkJZnMtPmZsYWdzIHw9IEZMQUdfRE9ORTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiBhIGZpbGVzeXN0ZW0gb24gYSBwYXJ0aWN1bGFyIGRldmljZSBoYXMKKwkJCSAqIGFscmVhZHkgYmVlbiBzcGF3bmVkLCB0aGVuIHdlIG5lZWQgdG8gZGVmZXIKKwkJCSAqIHRoaXMgdG8gYW5vdGhlciBwYXNzLgorCQkJICovCisJCQlpZiAoZGV2aWNlX2FscmVhZHlfYWN0aXZlKGZzLT5kZXZpY2UpKSB7CisJCQkJcGFzc19kb25lID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBTcGF3biBvZmYgdGhlIGZzY2sgcHJvY2VzcworCQkJICovCisJCQlmc2NrX2RldmljZShmcywgc2VyaWFsaXplKTsKKwkJCWZzLT5mbGFncyB8PSBGTEFHX0RPTkU7CisKKwkJCS8qCisJCQkgKiBPbmx5IGRvIG9uZSBmaWxlc3lzdGVtIGF0IGEgdGltZSwgb3IgaWYgd2UKKwkJCSAqIGhhdmUgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGZzY2sncyBleHRhbnQKKwkJCSAqIGF0IG9uZSB0aW1lLCBhcHBseSB0aGF0IGxpbWl0LgorCQkJICovCisJCQlpZiAoc2VyaWFsaXplIHx8CisJCQkgICAgKG1heF9ydW5uaW5nICYmIChudW1fcnVubmluZyA+PSBtYXhfcnVubmluZykpKSB7CisJCQkJcGFzc19kb25lID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY2FuY2VsX3JlcXVlc3RlZCkKKwkJCWJyZWFrOworCQlpZiAodmVyYm9zZSA+IDEpCisJCQlwcmludGYoXygiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iKSwgcGFzc25vKTsKKwkJc3RhdHVzIHw9IHdhaXRfbWFueShwYXNzX2RvbmUgPyBGTEFHX1dBSVRfQUxMIDoKKwkJCQkgICAgRkxBR19XQUlUX0FUTEVBU1RfT05FKTsKKwkJaWYgKHBhc3NfZG9uZSkgeworCQkJaWYgKHZlcmJvc2UgPiAxKQorCQkJCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCQlwYXNzbm8rKzsKKwkJfSBlbHNlCisJCQlub3RfZG9uZV95ZXQrKzsKKwl9CisJaWYgKGNhbmNlbF9yZXF1ZXN0ZWQgJiYgIWtpbGxfc2VudCkgeworCQlraWxsX2FsbChTSUdURVJNKTsKKwkJa2lsbF9zZW50Kys7CisJfQorCXN0YXR1cyB8PSB3YWl0X21hbnkoRkxBR19XQUlUX0FUTEVBU1RfT05FKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCB1c2FnZShOT0FSR1MpCit7CisJZnB1dHMoXygiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iKSwgc3RkZXJyKTsKKwlleGl0KEVYSVRfVVNBR0UpOworfQorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorc3RhdGljIHZvaWQgc2lnbmFsX2NhbmNlbChpbnQgc2lnIEZTQ0tfQVRUUigodW51c2VkKSkpCit7CisJY2FuY2VsX3JlcXVlc3RlZCsrOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIFBSUyhpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludAlpLCBqOworCWNoYXIJKmFyZywgKmRldiwgKnRtcCA9IDA7CisJY2hhcglvcHRpb25zWzEyOF07CisJaW50CW9wdCA9IDA7CisJaW50ICAgICBvcHRzX2Zvcl9mc2NrID0gMDsKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisJc3RydWN0IHNpZ2FjdGlvbglzYTsKKworCS8qCisJICogU2V0IHVwIHNpZ25hbCBhY3Rpb24KKwkgKi8KKwltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc3RydWN0IHNpZ2FjdGlvbikpOworCXNhLnNhX2hhbmRsZXIgPSBzaWduYWxfY2FuY2VsOworCXNpZ2FjdGlvbihTSUdJTlQsICZzYSwgMCk7CisJc2lnYWN0aW9uKFNJR1RFUk0sICZzYSwgMCk7CisjZW5kaWYKKworCW51bV9kZXZpY2VzID0gMDsKKwludW1fYXJncyA9IDA7CisJaW5zdGFuY2VfbGlzdCA9IDA7CisKKwlwcm9nbmFtZSA9IGFyZ3ZbMF07CisKKwlmb3IgKGk9MTsgaSA8IGFyZ2M7IGkrKykgeworCQlhcmcgPSBhcmd2W2ldOworCQlpZiAoIWFyZykKKwkJCWNvbnRpbnVlOworCQlpZiAoKGFyZ1swXSA9PSAnLycgJiYgIW9wdHNfZm9yX2ZzY2spIHx8IHN0cmNocihhcmcsICc9JykpIHsKKwkJCWlmIChudW1fZGV2aWNlcyA+PSBNQVhfREVWSUNFUykgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCIlczogdG9vIG1hbnkgZGV2aWNlc1xuIiksCisJCQkJCXByb2duYW1lKTsKKwkJCQlleGl0KEVYSVRfRVJST1IpOworCQkJfQorCQkJZGV2ID0gYmxraWRfZ2V0X2Rldm5hbWUoY2FjaGUsIGFyZywgTlVMTCk7CisJCQlpZiAoIWRldiAmJiBzdHJjaHIoYXJnLCAnPScpKSB7CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0byBzZWUgaWYgd2UgZmFpbGVkIGJlY2F1c2UKKwkJCQkgKiAvcHJvYy9wYXJ0aXRpb25zIGlzbid0IGZvdW5kLgorCQkJCSAqLworCQkJCWlmIChhY2Nlc3MoIi9wcm9jL3BhcnRpdGlvbnMiLCBSX09LKSA8IDApIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuIC9wcm9jL3BhcnRpdGlvbnM6ICVzXG4iLAorCQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJJcyAvcHJvYyBtb3VudGVkP1xuIik7CisJCQkJCWV4aXQoRVhJVF9FUlJPUik7CisJCQkJfQorCQkJCS8qCisJCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYmVjYXVzZQorCQkJCSAqIHdlJ3JlIG5vdCBydW5uaW5nIGFzIHJvb3QKKwkJCQkgKi8KKwkJCQlpZiAoZ2V0ZXVpZCgpKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJIk11c3QgYmUgcm9vdCB0byBzY2FuIGZvciBtYXRjaGluZyBmaWxlc3lzdGVtczogJXNcbiIsIGFyZyk7CisJCQkJZWxzZQorCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJIkNvdWxkbid0IGZpbmQgbWF0Y2hpbmcgZmlsZXN5c3RlbTogJXNcbiIsIGFyZyk7CisJCQkJZXhpdChFWElUX0VSUk9SKTsKKwkJCX0KKwkJCWRldmljZXNbbnVtX2RldmljZXMrK10gPSBkZXYgPyBkZXYgOiBzdHJpbmdfY29weShhcmcpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFyZ1swXSAhPSAnLScgfHwgb3B0c19mb3JfZnNjaykgeworCQkJaWYgKG51bV9hcmdzID49IE1BWF9BUkdTKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIpLAorCQkJCQlwcm9nbmFtZSk7CisJCQkJZXhpdChFWElUX0VSUk9SKTsKKwkJCX0KKwkJCWFyZ3NbbnVtX2FyZ3MrK10gPSBzdHJpbmdfY29weShhcmcpOworCQkJY29udGludWU7CisJCX0KKwkJZm9yIChqPTE7IGFyZ1tqXTsgaisrKSB7CisJCQlpZiAob3B0c19mb3JfZnNjaykgeworCQkJCW9wdGlvbnNbKytvcHRdID0gYXJnW2pdOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoIChhcmdbal0pIHsKKwkJCWNhc2UgJ0EnOgorCQkJCWRvYWxsKys7CisJCQkJYnJlYWs7CisJCQljYXNlICdDJzoKKwkJCQlwcm9ncmVzcysrOworCQkJCWlmIChhcmdbaisxXSkgeworCQkJCQlwcm9ncmVzc19mZCA9IHN0cmluZ190b19pbnQoYXJnK2orMSk7CisJCQkJCWlmIChwcm9ncmVzc19mZCA8IDApCisJCQkJCQlwcm9ncmVzc19mZCA9IDA7CisJCQkJCWVsc2UKKwkJCQkJCWdvdG8gbmV4dF9hcmc7CisJCQkJfSBlbHNlIGlmICgoaSsxKSA8IGFyZ2MgJiYKKwkJCQkJICAgIXN0cm5jbXAoYXJndltpKzFdLCAiLSIsIDEpID09IDApIHsKKwkJCQkJcHJvZ3Jlc3NfZmQgPSBzdHJpbmdfdG9faW50KGFyZ3ZbaV0pOworCQkJCQlpZiAocHJvZ3Jlc3NfZmQgPCAwKQorCQkJCQkJcHJvZ3Jlc3NfZmQgPSAwOworCQkJCQllbHNlIHsKKwkJCQkJCSsraTsKKwkJCQkJCWdvdG8gbmV4dF9hcmc7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdWJzoKKwkJCQl2ZXJib3NlKys7CisJCQkJYnJlYWs7CisJCQljYXNlICdOJzoKKwkJCQlub2V4ZWN1dGUrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNraXBfcm9vdCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJbm90aXRsZSsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnTSc6CisJCQkJaWdub3JlX21vdW50ZWQrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1AnOgorCQkJCXBhcmFsbGVsX3Jvb3QrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNlcmlhbGl6ZSsrOworCQkJCWJyZWFrOworCQkJY2FzZSAndCc6CisJCQkJdG1wID0gMDsKKwkJCQlpZiAoZnN0eXBlKQorCQkJCQl1c2FnZSgpOworCQkJCWlmIChhcmdbaisxXSkKKwkJCQkJdG1wID0gYXJnK2orMTsKKwkJCQllbHNlIGlmICgoaSsxKSA8IGFyZ2MpCisJCQkJCXRtcCA9IGFyZ3ZbKytpXTsKKwkJCQllbHNlCisJCQkJCXVzYWdlKCk7CisJCQkJZnN0eXBlID0gc3RyaW5nX2NvcHkodG1wKTsKKwkJCQljb21waWxlX2ZzX3R5cGUoZnN0eXBlLCAmZnNfdHlwZV9jb21waWxlZCk7CisJCQkJZ290byBuZXh0X2FyZzsKKwkJCWNhc2UgJy0nOgorCQkJCW9wdHNfZm9yX2ZzY2srKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJz8nOgorCQkJCXVzYWdlKCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW9wdGlvbnNbKytvcHRdID0gYXJnW2pdOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJbmV4dF9hcmc6CisJCWlmIChvcHQpIHsKKwkJCW9wdGlvbnNbMF0gPSAnLSc7CisJCQlvcHRpb25zWysrb3B0XSA9ICdcMCc7CisJCQlpZiAobnVtX2FyZ3MgPj0gTUFYX0FSR1MpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIiksCisJCQkJCXByb2duYW1lKTsKKwkJCQlleGl0KEVYSVRfRVJST1IpOworCQkJfQorCQkJYXJnc1tudW1fYXJncysrXSA9IHN0cmluZ19jb3B5KG9wdGlvbnMpOworCQkJb3B0ID0gMDsKKwkJfQorCX0KKwlpZiAoZ2V0ZW52KCJGU0NLX0ZPUkNFX0FMTF9QQVJBTExFTCIpKQorCQlmb3JjZV9hbGxfcGFyYWxsZWwrKzsKKwlpZiAoKHRtcCA9IGdldGVudigiRlNDS19NQVhfSU5TVCIpKSkKKwkgICAgbWF4X3J1bm5pbmcgPSBhdG9pKHRtcCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGksIHN0YXR1cyA9IDA7CisJaW50IGludGVyYWN0aXZlID0gMDsKKwljaGFyICpvbGRwYXRoID0gZ2V0ZW52KCJQQVRIIik7CisJY29uc3QgY2hhciAqZnN0YWI7CisJc3RydWN0IGZzX2luZm8gKmZzOworCisJc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgQlVGU0laKTsKKwlzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisjZW5kaWYKKwlibGtpZF9nZXRfY2FjaGUoJmNhY2hlLCBOVUxMKTsKKwlQUlMoYXJnYywgYXJndik7CisKKwlpZiAoIW5vdGl0bGUpCisJCXByaW50ZigiZnNjayAlcyAoJXMpXG4iLCBFMkZTUFJPR1NfVkVSU0lPTiwgRTJGU1BST0dTX0RBVEUpOworCisJZnN0YWIgPSBnZXRlbnYoIkZTVEFCX0ZJTEUiKTsKKwlpZiAoIWZzdGFiKQorCQlmc3RhYiA9IF9QQVRIX01OVFRBQjsKKwlsb2FkX2ZzX2luZm8oZnN0YWIpOworCisJLyogVXBkYXRlIG91ciBzZWFyY2ggcGF0aCB0byBpbmNsdWRlIHVuY29tbW9uIGRpcmVjdG9yaWVzLiAqLworCWlmIChvbGRwYXRoKSB7CisJCWZzY2tfcGF0aCA9IG1hbGxvYyAoc3RybGVuIChmc2NrX3ByZWZpeF9wYXRoKSArIDEgKworCQkJCSAgICBzdHJsZW4gKG9sZHBhdGgpICsgMSk7CisJCWlmICghZnNja19wYXRoKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmc2NrX3BhdGhcbiIsIHByb2duYW1lKTsKKwkJCWV4aXQoRVhJVF9FUlJPUik7CisJCX0KKwkJc3RyY3B5IChmc2NrX3BhdGgsIGZzY2tfcHJlZml4X3BhdGgpOworCQlzdHJjYXQgKGZzY2tfcGF0aCwgIjoiKTsKKwkJc3RyY2F0IChmc2NrX3BhdGgsIG9sZHBhdGgpOworCX0gZWxzZSB7CisJCWZzY2tfcGF0aCA9IHN0cmluZ19jb3B5KGZzY2tfcHJlZml4X3BhdGgpOworCX0KKworCWlmICgobnVtX2RldmljZXMgPT0gMSkgfHwgKHNlcmlhbGl6ZSkpCisJCWludGVyYWN0aXZlID0gMTsKKworCS8qIElmIC1BIHdhcyBzcGVjaWZpZWQgKCJjaGVjayBhbGwiKSwgZG8gdGhhdCEgKi8KKwlpZiAoZG9hbGwpCisJCXJldHVybiBjaGVja19hbGwoKTsKKworCWlmIChudW1fZGV2aWNlcyA9PSAwKSB7CisJCXNlcmlhbGl6ZSsrOworCQlpbnRlcmFjdGl2ZSsrOworCQlyZXR1cm4gY2hlY2tfYWxsKCk7CisJfQorCWZvciAoaSA9IDAgOyBpIDwgbnVtX2RldmljZXM7IGkrKykgeworCQlpZiAoY2FuY2VsX3JlcXVlc3RlZCkgeworCQkJaWYgKCFraWxsX3NlbnQpIHsKKwkJCQlraWxsX2FsbChTSUdURVJNKTsKKwkJCQlraWxsX3NlbnQrKzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWZzID0gbG9va3VwKGRldmljZXNbaV0pOworCQlpZiAoIWZzKSB7CisJCQlmcyA9IGNyZWF0ZV9mc19kZXZpY2UoZGV2aWNlc1tpXSwgMCwgImF1dG8iLAorCQkJCQkgICAgICAwLCAtMSwgLTEpOworCQkJaWYgKCFmcykKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaWdub3JlX21vdW50ZWQgJiYgaXNfbW91bnRlZChmcy0+ZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCQlmc2NrX2RldmljZShmcywgaW50ZXJhY3RpdmUpOworCQlpZiAoc2VyaWFsaXplIHx8CisJCSAgICAobWF4X3J1bm5pbmcgJiYgKG51bV9ydW5uaW5nID49IG1heF9ydW5uaW5nKSkpIHsKKwkJCXN0cnVjdCBmc2NrX2luc3RhbmNlICppbnN0OworCisJCQlpbnN0ID0gd2FpdF9vbmUoMCk7CisJCQlpZiAoaW5zdCkgeworCQkJCXN0YXR1cyB8PSBpbnN0LT5leGl0X3N0YXR1czsKKwkJCQlmcmVlX2luc3RhbmNlKGluc3QpOworCQkJfQorCQkJaWYgKHZlcmJvc2UgPiAxKQorCQkJCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCX0KKwl9CisJc3RhdHVzIHw9IHdhaXRfbWFueShGTEFHX1dBSVRfQUxMKTsKKwlmcmVlKGZzY2tfcGF0aCk7CisJYmxraWRfcHV0X2NhY2hlKGNhY2hlKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvZnNjay5oIGIvZTJmc3Byb2dzL21pc2MvZnNjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGY3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9mc2NrLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGZzY2suaAorICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZSBOT0FSR1Mgdm9pZAorI2Vsc2UKKyNkZWZpbmUgTk9BUkdTCisjZGVmaW5lIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEZTQ0tfQVRUUih4KSBfX2F0dHJpYnV0ZV9fKHgpCisjZWxzZQorI2RlZmluZSBGU0NLX0FUVFIoeCkKKyNlbmRpZgorCisKKyNpZm5kZWYgREVGQVVMVF9GU1RZUEUKKyNkZWZpbmUgREVGQVVMVF9GU1RZUEUJImV4dDIiCisjZW5kaWYKKworI2RlZmluZSBNQVhfREVWSUNFUyAzMgorI2RlZmluZSBNQVhfQVJHUyAzMgorCisjZGVmaW5lIEVYSVRfT0sgICAgICAgICAgMAorI2RlZmluZSBFWElUX05PTkRFU1RSVUNUIDEKKyNkZWZpbmUgRVhJVF9ERVNUUlVDVCAgICAyCisjZGVmaW5lIEVYSVRfVU5DT1JSRUNURUQgNAorI2RlZmluZSBFWElUX0VSUk9SICAgICAgIDgKKyNkZWZpbmUgRVhJVF9VU0FHRSAgICAgICAxNgorI2RlZmluZSBFWElUX0xJQlJBUlkgICAgIDEyOAorCisvKgorICogSW50ZXJuYWwgc3RydWN0dXJlIGZvciBtb3VudCB0YWJlbCBlbnRyaWVzLgorICovCisKK3N0cnVjdCBmc19pbmZvIHsKKwljaGFyICAqZGV2aWNlOworCWNoYXIgICptb3VudHB0OworCWNoYXIgICp0eXBlOworCWNoYXIgICpvcHRzOworCWludCAgIGZyZXE7CisJaW50ICAgcGFzc25vOworCWludCAgIGZsYWdzOworCXN0cnVjdCBmc19pbmZvICpuZXh0OworfTsKKworI2RlZmluZSBGTEFHX0RPTkUgMQorI2RlZmluZSBGTEFHX1BST0dSRVNTIDIKKworLyoKKyAqIFN0cnVjdHVyZSB0byBhbGxvdyBleGl0IGNvZGVzIHRvIGJlIHN0b3JlZAorICovCitzdHJ1Y3QgZnNja19pbnN0YW5jZSB7CisJaW50CXBpZDsKKwlpbnQJZmxhZ3M7CisJaW50CWV4aXRfc3RhdHVzOworCXRpbWVfdAlzdGFydF90aW1lOworCWNoYXIgKglwcm9nOworCWNoYXIgKgl0eXBlOworCWNoYXIgKglkZXZpY2U7CisJY2hhciAqCWJhc2VfZGV2aWNlOworCXN0cnVjdCBmc2NrX2luc3RhbmNlICpuZXh0OworfTsKKworZXh0ZXJuIGNoYXIgKmJhc2VfZGV2aWNlKGNvbnN0IGNoYXIgKmRldmljZSk7CitleHRlcm4gY29uc3QgY2hhciAqaWRlbnRpZnlfZnMoY29uc3QgY2hhciAqZnNfbmFtZSwgY29uc3QgY2hhciAqZnNfdHlwZXMpOworCisvKiBpc21vdW50ZWQuaCAqLworZXh0ZXJuIGludCBpc19tb3VudGVkKGNvbnN0IGNoYXIgKmZpbGUpOwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvaXNtb3VudGVkLmMgYi9lMmZzcHJvZ3MvbWlzYy9pc21vdW50ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY2MmY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvaXNtb3VudGVkLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBpc21vdW50ZWQuYyAtLS0gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LDE5OTYsMTk5NywxOTk4LDE5OTksMjAwMCwyMDA4IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZmRlZiBIQVZFX0xJTlVYX0ZEX0gKKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9NTlRFTlRfSAorI2luY2x1ZGUgPG1udGVudC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiZnNjay5oIgorCisvKgorICogZXh0MmZzX2NoZWNrX2lmX21vdW50ZWQgZmxhZ3MKKyAqLworI2RlZmluZSBNRl9NT1VOVEVECQkxCisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisKKyNpZmRlZiBIQVZFX1NFVE1OVEVOVAorc3RhdGljIGNoYXIgKnNraXBfb3Zlcl9ibGFuayhjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJY3ArKzsKKwlyZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICpza2lwX292ZXJfd29yZChjaGFyICpjcCkKK3sKKwl3aGlsZSAoKmNwICYmICFpc3NwYWNlKCpjcCkpCisJCWNwKys7CisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgY2hhciAqcGFyc2Vfd29yZChjaGFyICoqYnVmKQoreworCWNoYXIgKndvcmQsICpuZXh0OworCisJd29yZCA9ICpidWY7CisJaWYgKCp3b3JkID09IDApCisJCXJldHVybiAwOworCisJd29yZCA9IHNraXBfb3Zlcl9ibGFuayh3b3JkKTsKKwluZXh0ID0gc2tpcF9vdmVyX3dvcmQod29yZCk7CisJaWYgKCpuZXh0KQorCQkqbmV4dCsrID0gMDsKKwkqYnVmID0gbmV4dDsKKwlyZXR1cm4gd29yZDsKK30KKyNlbmRpZgorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBhIGZpbGUgaW4gL2V0Yy9tdGFiIGZvcm1hdCB0byBzZWUgaWYgYQorICogZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgUmV0dXJucyBhbiBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0CisgKiBvciBjYW4ndCBiZSBvcGVuZWQuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgY2hlY2tfbW50ZW50X2ZpbGUoY29uc3QgY2hhciAqbXRhYl9maWxlLCBjb25zdCBjaGFyICpmaWxlLAorCQkJCSAgIGludCAqbW91bnRfZmxhZ3MpCit7CisjaWZkZWYgSEFWRV9TRVRNTlRFTlQKKwlzdHJ1Y3Qgc3RhdAlzdF9idWY7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJZGV2X3QJCWZpbGVfZGV2PTAsIGZpbGVfcmRldj0wOworCWlub190CQlmaWxlX2lubz0wOworCUZJTEUgCQkqZjsKKwljaGFyCQlidWZbMTAyNF0sICpkZXZpY2UgPSAwLCAqbW50X2RpciA9IDAsICpjcDsKKworCSptb3VudF9mbGFncyA9IDA7CisJaWYgKChmID0gc2V0bW50ZW50IChtdGFiX2ZpbGUsICJyIikpID09IE5VTEwpCisJCXJldHVybiBlcnJubzsKKwlpZiAoc3RhdChmaWxlLCAmc3RfYnVmKSA9PSAwKSB7CisJCWlmIChTX0lTQkxLKHN0X2J1Zi5zdF9tb2RlKSkgeworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCQkJZmlsZV9yZGV2ID0gc3RfYnVmLnN0X3JkZXY7CisjZW5kaWYJLyogX19HTlVfXyAqLworCQl9IGVsc2UgeworCQkJZmlsZV9kZXYgPSBzdF9idWYuc3RfZGV2OworCQkJZmlsZV9pbm8gPSBzdF9idWYuc3RfaW5vOworCQl9CisJfQorCXdoaWxlICgxKSB7CisJCWlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZikpIHsKKwkJCWRldmljZSA9IG1udF9kaXIgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnVmW3NpemVvZihidWYpLTFdID0gMDsKKworCQljcCA9IGJ1ZjsKKwkJZGV2aWNlID0gcGFyc2Vfd29yZCgmY3ApOworCQlpZiAoIWRldmljZSB8fCAqZGV2aWNlID09ICcjJykKKwkJCXJldHVybiAwOwkvKiBJZ25vcmUgYmxhbmsgbGluZXMgYW5kIGNvbW1lbnRzICovCisJCW1udF9kaXIgPSBwYXJzZV93b3JkKCZjcCk7CisKKwkJaWYgKGRldmljZVswXSAhPSAnLycpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyY21wKGZpbGUsIGRldmljZSkgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoc3RhdChkZXZpY2UsICZzdF9idWYpID09IDApIHsKKwkJCWlmIChTX0lTQkxLKHN0X2J1Zi5zdF9tb2RlKSkgeworI2lmbmRlZiBfX0dOVV9fCisJCQkJaWYgKGZpbGVfcmRldiAmJiAoZmlsZV9yZGV2ID09IHN0X2J1Zi5zdF9yZGV2KSkKKwkJCQkJYnJlYWs7CisjZW5kaWYJLyogX19HTlVfXyAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZmlsZV9kZXYgJiYgKChmaWxlX2RldiA9PSBzdF9idWYuc3RfZGV2KSAmJgorCQkJCQkJIChmaWxlX2lubyA9PSBzdF9idWYuc3RfaW5vKSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKG1udF9kaXIgPT0gMCkgeworI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBicm9rZW4gd2l0aCByZXNwZWN0IHRvIHN0YXQgZGV2aWNlcyAqLworCQkvKgorCQkgKiBEbyBhbiBleHRyYSBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyB0aGUgcm9vdCBkZXZpY2UuICBXZQorCQkgKiBjYW4ndCB0cnVzdCAvZXRjL210YWIsIGFuZCAvcHJvYy9tb3VudHMgd2lsbCBvbmx5IGxpc3QKKwkJICogL2Rldi9yb290IGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLiAgQXJnaC4gIEluc3RlYWQgd2UKKwkJICogY2hlY2sgaWYgdGhlIGdpdmVuIGRldmljZSBoYXMgdGhlIHNhbWUgbWFqb3IvbWlub3IgbnVtYmVyCisJCSAqIGFzIHRoZSBkZXZpY2UgdGhhdCB0aGUgcm9vdCBkaXJlY3RvcnkgaXMgb24uCisJCSAqLworCQlpZiAoZmlsZV9yZGV2ICYmIChzdGF0KCIvIiwgJnN0X2J1ZikgPT0gMCkgJiYKKwkJICAgIChzdF9idWYuc3RfZGV2ID09IGZpbGVfcmRldikpCisJCQkqbW91bnRfZmxhZ3MgPSBNRl9NT1VOVEVEOworI2VuZGlmCS8qIF9fR05VX18gKi8KKwkJZ290byBlcnJvdXQ7CisJfQorI2lmbmRlZiBfX0dOVV9fIC8qIFRoZSBHTlUgaHVyZCBpcyBkZWZpY2llbnQ7IHdoYXQgZWxzZSBpcyBuZXc/ICovCisJLyogVmFsaWRhdGUgdGhlIGVudHJ5IGluIGNhc2UgL2V0Yy9tdGFiIGlzIG91dCBvZiBkYXRlICovCisJLyoKKwkgKiBXZSBuZWVkIHRvIGJlIHBhcmFub2lkLCBiZWNhdXNlIHNvbWUgYnJva2VuIGRpc3RyaWJ1dGlvbnMKKwkgKiAocmVhZDogU2xhY2t3YXJlKSBkb24ndCBpbml0aWFsaXplIC9ldGMvbXRhYiBiZWZvcmUgY2hlY2tpbmcKKwkgKiBhbGwgb2YgdGhlIG5vbi1yb290IGZpbGVzeXN0ZW1zIG9uIHRoZSBkaXNrLgorCSAqLworCWlmIChzdGF0KG1udF9kaXIsICZzdF9idWYpIDwgMCkgeworCQlyZXR2YWwgPSBlcnJubzsKKwkJaWYgKHJldHZhbCA9PSBFTk9FTlQpIHsKKyNpZmRlZiBERUJVRworCQkJcHJpbnRmKCJCb2d1cyBlbnRyeSBpbiAlcyEgICglcyBkb2VzIG5vdCBleGlzdClcbiIsCisJCQkgICAgICAgbXRhYl9maWxlLCBtbnRfZGlyKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlnb3RvIGVycm91dDsKKwl9CisJaWYgKGZpbGVfcmRldiAmJiAoc3RfYnVmLnN0X2RldiAhPSBmaWxlX3JkZXYpKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCJCb2d1cyBlbnRyeSBpbiAlcyEgICglcyBub3QgbW91bnRlZCBvbiAlcylcbiIsCisJCSAgICAgICBtdGFiX2ZpbGUsIGZpbGUsIG1udF9kaXIpOworI2VuZGlmIC8qIERFQlVHICovCisJCWdvdG8gZXJyb3V0OworCX0KKyNlbmRpZiAvKiBfX0dOVV9fICovCisJKm1vdW50X2ZsYWdzID0gTUZfTU9VTlRFRDsKKworCXJldHZhbCA9IDA7CitlcnJvdXQ6CisJZW5kbW50ZW50IChmKTsKKwlyZXR1cm4gcmV0dmFsOworI2Vsc2UgLyogIUhBVkVfU0VUTU5URU5UICovCisJcmV0dXJuIDA7CisjZW5kaWYgLyogSEFWRV9NTlRFTlRfSCAqLworfQorCitpbnQgaXNfbW91bnRlZChjb25zdCBjaGFyICpmaWxlKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQltb3VudF9mbGFncyA9IDA7CisKKyNpZmRlZiBfX2xpbnV4X18KKwlyZXR2YWwgPSBjaGVja19tbnRlbnRfZmlsZSgiL3Byb2MvbW91bnRzIiwgZmlsZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gMDsKKwlpZiAobW91bnRfZmxhZ3MpCisJCXJldHVybiAxOworI2VuZGlmIC8qIF9fbGludXhfXyAqLworCXJldHZhbCA9IGNoZWNrX21udGVudF9maWxlKCIvZXRjL210YWIiLCBmaWxlLCAmbW91bnRfZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiAwOworCXJldHVybiAobW91bnRfZmxhZ3MpOworfQorCisjaWZkZWYgREVCVUcKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoYXJnYyA8IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGV2aWNlXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoaXNfbW91bnRlZChhcmd2WzFdKSkKKwkJcHJpbnRmKCJcdCVzIGlzIG1vdW50ZWQuXG4iLCBhcmd2WzFdKTsKKwlleGl0KDApOworfQorI2VuZGlmIC8qIERFQlVHICovCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9qZnNfdXNlci5oIGIvZTJmc3Byb2dzL21pc2MvamZzX3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDcwY2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvamZzX3VzZXIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0pGU19VU0VSX0gKKyNkZWZpbmUgX0pGU19VU0VSX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBrZGV2X3Q7CisKKyNpbmNsdWRlIDxleHQyZnMva2VybmVsLWpiZC5oPgorCisjZW5kaWYgLyogX0pGU19VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2xvZ3NhdmUuOC5pbiBiL2UyZnNwcm9ncy9taXNjL2xvZ3NhdmUuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGZiZTQxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvbG9nc2F2ZS44LmluCkBAIC0wLDAgKzEsNjEgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDIwMDMgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuVEggTE9HU0FWRSA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitsb2dzYXZlIFwtIHNhdmUgdGhlIG91dHB1dCBvZiBhIGNvbW1hbmQgaW4gYSBsb2dmaWxlCisuU0ggU1lOT1BTSVMKKy5CIGxvZ3NhdmUKK1sKKy5CIFwtYXN2CitdCisuSSBsb2dmaWxlIGNtZF9wcm9nIFsgLi4uIF0KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBsb2dzYXZlCitwcm9ncmFtIHdpbGwgZXhlY3V0ZQorLkkgY21kX3Byb2cgCit3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQocyksIGFuZCBzYXZlIGEgY29weSBvZiBpdHMgb3V0cHV0IHRvCisuSVIgbG9nZmlsZSAuCitJZiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgZm9yCisuSSBsb2dmaWxlCitkb2VzIG5vdCBleGlzdCwgCisuQiBsb2dzYXZlCit3aWxsIGFjY3VtdWxhdGUgdGhlIG91dHB1dCBpbiBtZW1vcnkgdW50aWwgaXQgY2FuIGJlIHdyaXR0ZW4gb3V0LgorQSBjb3B5IG9mIHRoZSBvdXRwdXQgd2lsbCBhbHNvIGJlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgb3V0cHV0LgorLlBQCitJZiAKKy5JIGNtZF9wcm9nCitpcyBhIHNpbmdsZSBoeXBoZW4gKCctJyksIHRoZW4gaW5zdGVhZCBvZiBleGVjdXRpbmcgYSBwcm9ncmFtLAorLkIgbG9nc2F2ZQord2lsbCB0YWtlIGl0cyBpbnB1dCBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZCBzYXZlIGl0IGluCisuSSBsb2dmaWxlCisuUFAKKy5CIGxvZ3NhdmUKK2lzIHVzZWZ1bCBmb3Igc2F2aW5nIHRoZSBvdXRwdXQgb2YgaW5pdGlhbCBib290IHNjcmlwdHMgCit1bnRpbCB0aGUgL3ZhciBwYXJ0aXRpb24gaXMgbW91bnRlZCwgc28gdGhlIG91dHB1dCBjYW4gYmUgd3JpdHRlbiB0byAKKy92YXIvbG9nLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1hCitUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBvdXRwdXQgdG8gYmUgYXBwZW5kZWQgdG8gCisuSVIgbG9nZmlsZSAsCitpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdHMgY3VycmVudCBjb250ZW50cy4KKy5UUAorLkIgXC1zCitUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIAorLkIgbG9nc2F2ZQordG8gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cgZmlsZSB0ZXh0IHdoaWNoIGlzIGJyYWNrZXRlZCB3aXRoIGEgY29udHJvbC1BIAorKEFTQ0lJIDAwMSBvciBTdGFydCBvZiBIZWFkZXIpIGFuZCBjb250cm9sLUIgKEFTQ0lJIDAwMiBvciBTdGFydCBvZgorVGV4dCkuICBUaGlzIGFsbG93cyBwcm9ncmVzcyBiYXIgaW5mb3JtYXRpb24gdG8gYmUgdmlzaWJsZSB0byB0aGUgdXNlcgorb24gdGhlIGNvbnNvbGUsIHdoaWxlIG5vdCBiZWluZyB3cml0dGVuIHRvIHRoZSBsb2cgZmlsZS4KKy5UUAorLkIgXC12CitUaGlzIG9wdGlvbiB3aWxsIG1ha2UKKy5CIGxvZ3NhdmUKK3RvIGJlIG1vcmUgdmVyYm9zZSBpbiBpdHMgb3V0cHV0IHRvIHRoZSB1c2VyLgorLlNIIEFVVEhPUgorVGhlb2RvcmUgVHMnbyAodHl0c29AbWl0LmVkdSkKKy5TSCBTRUUgQUxTTworLkJSIGZzY2sgKDgpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9sb2dzYXZlLmMgYi9lMmZzcHJvZ3MvbWlzYy9sb2dzYXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1YmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2xvZ3NhdmUuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIGxvZ3NhdmUuYyAtLS0gQSBwcm9ncmFtIHdoaWNoIHNhdmVzIHRoZSBvdXRwdXQgb2YgYSBwcm9ncmFtIHVudGlsCisgKgkvdmFyL2xvZyBpcyBtb3VudGVkLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIHNhX2hhbmRsZXIgaW4gU29sYXJpcyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorCitzdGF0aWMgaW50CW91dGZkID0gLTE7CitzdGF0aWMgaW50CW91dGJ1ZnNpemUgPSAwOworc3RhdGljIHZvaWQJKm91dGJ1ZiA9IDA7CitzdGF0aWMgaW50CXZlcmJvc2UgPSAwOworc3RhdGljIGludAlkb19za2lwID0gMDsKK3N0YXRpYyBpbnQJc2tpcF9tb2RlID0gMDsKK3N0YXRpYyBwaWRfdAljaGlsZF9waWQgPSAtMTsKKworc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqcHJvZ25hbWUpCit7CisJcHJpbnRmKCJVc2FnZTogJXMgWy1hc3ZdIGxvZ2ZpbGUgcHJvZ3JhbVxuIiwgcHJvZ25hbWUpOworCWV4aXQoMSk7Cit9CisKKyNkZWZpbmUgU0VORF9MT0cJMHgwMQorI2RlZmluZSBTRU5EX0NPTlNPTEUJMHgwMgorI2RlZmluZSBTRU5EX0JPVEgJMHgwMworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaWYgd3JpdGUgcmV0dXJucyBhCisgKiBwYXJ0aWFsIHdyaXRlLCBvciBhbiBFR0FJTi9FSU5UUiBlcnJvci4KKyAqLworc3RhdGljIGludCB3cml0ZV9hbGwoaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IHJldDsKKwlpbnQgYyA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOKSB8fCAoZXJybm8gPT0gRUlOVFIpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIC0xOworCQl9CisJCWNvdW50IC09IHJldDsKKwkJYnVmICs9IHJldDsKKwkJYyArPSByZXQ7CisJfQorCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCBzZW5kX291dHB1dChjb25zdCBjaGFyICpidWZmZXIsIGludCBjLCBpbnQgZmxhZykKK3sKKwljb25zdCBjaGFyCSpjcDsKKwljaGFyCQkqbjsKKwlpbnQJCWNudCwgZCwgZGVsOworCisJaWYgKGMgPT0gMCkKKwkJYyA9IHN0cmxlbihidWZmZXIpOworCisJaWYgKGZsYWcgJiBTRU5EX0NPTlNPTEUpIHsKKwkJY250ID0gYzsKKwkJY3AgPSBidWZmZXI7CisJCXdoaWxlIChjbnQpIHsKKwkJCWRlbCA9IDA7CisJCQlmb3IgKGQ9MDsgZCA8IGNudDsgZCsrKSB7CisJCQkJaWYgKHNraXBfbW9kZSAmJgorCQkJCSAgICAoY3BbZF0gPT0gJ1wwMDEnIHx8IGNwW2RdID09ICdcMDAyJykpIHsKKwkJCQkJZGVsID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJd3JpdGVfYWxsKDEsIGNwLCBkKTsKKwkJCWlmIChkZWwpCisJCQkJZCsrOworCQkJY250IC09IGQ7CisJCQljcCArPSBkOworCQl9CisJfQorCWlmICghKGZsYWcgJiBTRU5EX0xPRykpCisJCXJldHVybjsKKwlpZiAob3V0ZmQgPiAwKQorCQl3cml0ZV9hbGwob3V0ZmQsIGJ1ZmZlciwgYyk7CisJZWxzZSB7CisJCW4gPSByZWFsbG9jKG91dGJ1Ziwgb3V0YnVmc2l6ZSArIGMpOworCQlpZiAobikgeworCQkJb3V0YnVmID0gbjsKKwkJCW1lbWNweSgoKGNoYXIgKilvdXRidWYpK291dGJ1ZnNpemUsIGJ1ZmZlciwgYyk7CisJCQlvdXRidWZzaXplICs9IGM7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fcmVhZChpbnQgZmQpCit7CisJaW50CWM7CisJY2hhcglidWZmZXJbNDA5Nl0sICpjcCwgKnNlcDsKKworCWMgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCWlmIChjIDw9IDApCisJCXJldHVybiBjOworCWlmIChkb19za2lwKSB7CisJCXNlbmRfb3V0cHV0KGJ1ZmZlciwgYywgU0VORF9DT05TT0xFKTsKKwkJYnVmZmVyW2NdID0gMDsKKwkJY3AgPSBidWZmZXI7CisJCXdoaWxlICgqY3ApIHsKKwkJCWlmIChza2lwX21vZGUpIHsKKwkJCQljcCA9IHN0cmNocihjcCwgJ1wwMDInKTsKKwkJCQlpZiAoIWNwKQorCQkJCQlyZXR1cm4gMDsKKwkJCQljcCsrOworCQkJCXNraXBfbW9kZSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzZXAgPSBzdHJjaHIoY3AsICdcMDAxJyk7CisJCQlpZiAoc2VwKQorCQkJCSpzZXAgPSAwOworCQkJc2VuZF9vdXRwdXQoY3AsIDAsIFNFTkRfTE9HKTsKKwkJCWlmIChzZXApIHsKKwkJCQljcCA9IHNlcCArIDE7CisJCQkJc2tpcF9tb2RlID0gMTsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCXNlbmRfb3V0cHV0KGJ1ZmZlciwgYywgU0VORF9CT1RIKTsKKwlyZXR1cm4gYzsKK30KKworc3RhdGljIHZvaWQgc2lnbmFsX3Rlcm0oaW50IHNpZykKK3sKKwlpZiAoY2hpbGRfcGlkID4gMCkKKwkJa2lsbChjaGlsZF9waWQsIHNpZyk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3Byb2dyYW0oY2hhciAqKmFyZ3YpCit7CisJaW50CWZkc1syXTsKKwlpbnQJc3RhdHVzLCByYywgcGlkOworCWNoYXIJYnVmZmVyWzgwXTsKKyNpZmRlZiBIQVZFX1NJR05BTF9ICisJc3RydWN0IHNpZ2FjdGlvbglzYTsKKyNlbmRpZgorCisJaWYgKHBpcGUoZmRzKSA8IDApIHsKKwkJcGVycm9yKCJwaXBlIik7CisJCWV4aXQoMSk7CisJfQorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorCW1lbXNldCgmc2EsIDAsIHNpemVvZihzdHJ1Y3Qgc2lnYWN0aW9uKSk7CisJc2Euc2FfaGFuZGxlciA9IHNpZ25hbF90ZXJtOworCXNpZ2FjdGlvbihTSUdJTlQsICZzYSwgMCk7CisJc2lnYWN0aW9uKFNJR1RFUk0sICZzYSwgMCk7CisjaWZkZWYgU0FfUkVTVEFSVAorCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKyNlbmRpZgorI2VuZGlmCisKKwlwaWQgPSBmb3JrKCk7CisJaWYgKHBpZCA8IDApIHsKKwkJcGVycm9yKCJ2Zm9yayIpOworCQlleGl0KDEpOworCX0KKwlpZiAocGlkID09IDApIHsKKwkJZHVwMihmZHNbMV0sMSk7CQkvKiBmZHNbMV0gcmVwbGFjZXMgc3Rkb3V0ICovCisJCWR1cDIoZmRzWzFdLDIpOyAgCS8qIGZkc1sxXSByZXBsYWNlcyBzdGRlcnIgKi8KKwkJY2xvc2UoZmRzWzBdKTsJLyogZG9uJ3QgbmVlZCB0aGlzIGhlcmUgKi8KKwkJY2xvc2UoZmRzWzFdKTsKKworCQlleGVjdnAoYXJndlswXSwgYXJndik7CisJCXBlcnJvcihhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJY2hpbGRfcGlkID0gcGlkOworCWNsb3NlKGZkc1sxXSk7CisKKwl3aGlsZSAoISh3YWl0cGlkKHBpZCwgJnN0YXR1cywgV05PSEFORyApKSkgeworCQlkb19yZWFkKGZkc1swXSk7CisJfQorCWNoaWxkX3BpZCA9IC0xOworCWRvX3JlYWQoZmRzWzBdKTsKKwljbG9zZShmZHNbMF0pOworCisJaWYgKCBXSUZFWElURUQoc3RhdHVzKSApIHsKKwkJcmMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworCQlpZiAocmMpIHsKKwkJCXNlbmRfb3V0cHV0KGFyZ3ZbMF0sIDAsIFNFTkRfQk9USCk7CisJCQlzcHJpbnRmKGJ1ZmZlciwgIiBkaWVkIHdpdGggZXhpdCBzdGF0dXMgJWRcbiIsIHJjKTsKKwkJCXNlbmRfb3V0cHV0KGJ1ZmZlciwgMCwgU0VORF9CT1RIKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChXSUZTSUdOQUxFRChzdGF0dXMpKSB7CisJCQlzZW5kX291dHB1dChhcmd2WzBdLCAwLCBTRU5EX0JPVEgpOworCQkJc3ByaW50ZihidWZmZXIsICJkaWVkIHdpdGggc2lnbmFsICVkXG4iLAorCQkJCVdURVJNU0lHKHN0YXR1cykpOworCQkJc2VuZF9vdXRwdXQoYnVmZmVyLCAwLCBTRU5EX0JPVEgpOworCQkJcmMgPSAxOworCQl9CisJCXJjID0gMDsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNvcHlfZnJvbV9zdGRpbih2b2lkKQoreworCWludAljLCBiYWRfcmVhZCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQljID0gZG9fcmVhZCgwKTsKKwkJaWYgKChjID09IDAgKSB8fAorCQkgICAgKChjIDwgMCkgJiYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpKSkgeworCQkJaWYgKGJhZF9yZWFkKysgPiAzKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPCAwKSB7CisJCQlwZXJyb3IoInJlYWQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYmFkX3JlYWQgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJYywgcGlkLCByYzsKKwljaGFyCSpvdXRmbiwgKipjcHA7CisJaW50CW9wZW5mbGFncyA9IE9fQ1JFQVR8T19XUk9OTFl8T19UUlVOQzsKKwlpbnQJc2VuZF9mbGFnID0gU0VORF9MT0c7CisJaW50CWRvX3N0ZGluOworCXRpbWVfdAl0OworCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIrYXN2IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYSc6CisJCQlvcGVuZmxhZ3MgJj0gfk9fVFJVTkM7CisJCQlvcGVuZmxhZ3MgfD0gT19BUFBFTkQ7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlkb19za2lwID0gMTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UrKzsKKwkJCXNlbmRfZmxhZyB8PSBTRU5EX0NPTlNPTEU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAob3B0aW5kID09IGFyZ2MgfHwgb3B0aW5kKzEgPT0gYXJnYykKKwkJdXNhZ2UoYXJndlswXSk7CisJb3V0Zm4gPSBhcmd2W29wdGluZF07CisJb3B0aW5kKys7CisJYXJndiArPSBvcHRpbmQ7CisJYXJnYyAtPSBvcHRpbmQ7CisKKwlvdXRmZCA9IG9wZW4ob3V0Zm4sIG9wZW5mbGFncywgMDY0NCk7CisJZG9fc3RkaW4gPSAhc3RyY21wKGFyZ3ZbMF0sICItIik7CisKKwlzZW5kX291dHB1dCgiTG9nIG9mICIsIDAsIHNlbmRfZmxhZyk7CisJaWYgKGRvX3N0ZGluKQorCQlzZW5kX291dHB1dCgic3RkaW4iLCAwLCBzZW5kX2ZsYWcpOworCWVsc2UgeworCQlmb3IgKGNwcCA9IGFyZ3Y7ICpjcHA7IGNwcCsrKSB7CisJCQlzZW5kX291dHB1dCgqY3BwLCAwLCBzZW5kX2ZsYWcpOworCQkJc2VuZF9vdXRwdXQoIiAiLCAwLCBzZW5kX2ZsYWcpOworCQl9CisJfQorCXNlbmRfb3V0cHV0KCJcbiIsIDAsIHNlbmRfZmxhZyk7CisJdCA9IHRpbWUoMCk7CisJc2VuZF9vdXRwdXQoY3RpbWUoJnQpLCAwLCBzZW5kX2ZsYWcpOworCXNlbmRfb3V0cHV0KCJcbiIsIDAsIHNlbmRfZmxhZyk7CisKKwlpZiAoZG9fc3RkaW4pCisJCXJjID0gY29weV9mcm9tX3N0ZGluKCk7CisJZWxzZQorCQlyYyA9IHJ1bl9wcm9ncmFtKGFyZ3YpOworCisJc2VuZF9vdXRwdXQoIlxuIiwgMCwgc2VuZF9mbGFnKTsKKwl0ID0gdGltZSgwKTsKKwlzZW5kX291dHB1dChjdGltZSgmdCksIDAsIHNlbmRfZmxhZyk7CisJc2VuZF9vdXRwdXQoIi0tLS0tLS0tLS0tLS0tLS1cbiIsIDAsIHNlbmRfZmxhZyk7CisKKwlpZiAob3V0YnVmKSB7CisJCXBpZCA9IGZvcmsoKTsKKwkJaWYgKHBpZCA8IDApIHsKKwkJCXBlcnJvcigiZm9yayIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAocGlkKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIkJhY2tncm91bmRpbmcgdG8gc2F2ZSAlcyBsYXRlclxuIiwKKwkJCQkgICAgICAgb3V0Zm4pOworCQkJZXhpdChyYyk7CisJCX0KKwkJc2V0c2lkKCk7CS8qIFRvIGF2b2lkIGdldHRpbmcga2lsbGVkIGJ5IGluaXQgKi8KKwkJd2hpbGUgKG91dGZkIDwgMCkgeworCQkJb3V0ZmQgPSBvcGVuKG91dGZuLCBvcGVuZmxhZ3MsIDA2NDQpOworCQkJc2xlZXAoMSk7CisJCX0KKwkJd3JpdGVfYWxsKG91dGZkLCBvdXRidWYsIG91dGJ1ZnNpemUpOworCQlmcmVlKG91dGJ1Zik7CisJfQorCWlmIChvdXRmZCA+PSAwKQorCQljbG9zZShvdXRmZCk7CisKKwlleGl0KHJjKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2xzYXR0ci4xLmluIGIvZTJmc3Byb2dzL21pc2MvbHNhdHRyLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5OGEzNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2xzYXR0ci4xLmluCkBAIC0wLDAgKzEsNDUgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuVEggTFNBVFRSIDEgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK2xzYXR0ciBcLSBsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorLlNIIFNZTk9QU0lTCisuQiBsc2F0dHIKK1sKKy5CIFwtUlZhZHYKK10KK1sKKy5JIGZpbGVzLi4uCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGxzYXR0cgorbGlzdHMgdGhlIGZpbGUgYXR0cmlidXRlcyBvbiBhIHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbS4gIFNlZQorLkJSIGNoYXR0ciAoMSkKK2ZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIGFuZCB3aGF0IHRoZXkgbWVhbi4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtUgorUmVjdXJzaXZlbHkgbGlzdCBhdHRyaWJ1dGVzIG9mIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBjb250ZW50cy4KKy5UUAorLkIgXC1WCitEaXNwbGF5IHRoZSBwcm9ncmFtIHZlcnNpb24uCisuVFAKKy5CIFwtYQorTGlzdCBhbGwgZmlsZXMgaW4gZGlyZWN0b3JpZXMsIGluY2x1ZGluZyBmaWxlcyB0aGF0IHN0YXJ0IHdpdGggYC4nLgorLlRQCisuQiBcLWQKK0xpc3QgZGlyZWN0b3JpZXMgbGlrZSBvdGhlciBmaWxlcywgcmF0aGVyIHRoYW4gbGlzdGluZyB0aGVpciBjb250ZW50cy4KKy5UUAorLkIgXC12CitMaXN0IHRoZSBmaWxlJ3MgdmVyc2lvbi9nZW5lcmF0aW9uIG51bWJlci4KKy5TSCBBVVRIT1IKKy5CIGxzYXR0cgord2FzIHdyaXR0ZW4gYnkgUmVteSBDYXJkIDxSZW15LkNhcmRAbGludXgub3JnPi4gIEl0IGlzIGN1cnJlbnRseSBiZWluZworbWFpbnRhaW5lZCBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BhbHVtLm1pdC5lZHU+LgorLlNIIEJVR1MKK1RoZXJlIGFyZSBub25lIDotKS4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIGxzYXR0cgoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIGNoYXR0ciAoMSkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL2xzYXR0ci5jIGIvZTJmc3Byb2dzL21pc2MvbHNhdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhY2FjZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL2xzYXR0ci5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogbHNhdHRyLmMJCS0gTGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYW4gZXh0MiBmaWxlIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCAgUmVteSBDYXJkIDxjYXJkQG1hc2kuaWJwLmZyPgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJvcmF0b2lyZSBNQVNJLCBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqCisgKiBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzEwLzMwCS0gQ3JlYXRpb24KKyAqIDkzLzExLzEzCS0gUmVwbGFjZSBzdGF0KCkgY2FsbHMgYnkgbHN0YXQoKSB0byBhdm9pZCBsb29wcworICogOTQvMDIvMjcJLSBJbnRlZ3JhdGVkIGluIFRlZCdzIGRpc3RyaWJ1dGlvbgorICogOTgvMTIvMjkJLSBEaXNwbGF5IHZlcnNpb24gaW5mbyBvbmx5IHdoZW4gLVYgc3BlY2lmaWVkIChHIE0gU2lwZSkKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lmZGVmIEhBVkVfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gaW50IG9wdGluZDsKK2V4dGVybiBjaGFyICpvcHRhcmc7CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkgX19hdHRyaWJ1dGVfXyh4KQorI2Vsc2UKKyNkZWZpbmUgRVhUMkZTX0FUVFIoeCkKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJsc2F0dHIiOworCitzdGF0aWMgaW50IGFsbDsKK3N0YXRpYyBpbnQgZGlyc19vcHQ7CitzdGF0aWMgdW5zaWduZWQgcGZfb3B0aW9uczsKK3N0YXRpYyBpbnQgcmVjdXJzaXZlOworc3RhdGljIGludCB2ZXJib3NlOworc3RhdGljIGludCBnZW5lcmF0aW9uX29wdDsKKworI2lmZGVmIF9MRlM2NF9MQVJHRUZJTEUKKyNkZWZpbmUgTFNUQVQJCWxzdGF0NjQKKyNkZWZpbmUgU1RSVUNUX1NUQVQJc3RydWN0IHN0YXQ2NAorI2Vsc2UKKyNkZWZpbmUgTFNUQVQJCWxzdGF0CisjZGVmaW5lIFNUUlVDVF9TVEFUCXN0cnVjdCBzdGF0CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iKSwgcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IGxpc3RfYXR0cmlidXRlcyAoY29uc3QgY2hhciAqIG5hbWUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGdlbmVyYXRpb247CisKKwlpZiAoZmdldGZsYWdzIChuYW1lLCAmZmxhZ3MpID09IC0xKSB7CisJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sIF8oIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiKSwKKwkJCSBuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZ2VuZXJhdGlvbl9vcHQpIHsKKwkJaWYgKGZnZXR2ZXJzaW9uIChuYW1lLCAmZ2VuZXJhdGlvbikgPT0gLTEpIHsKKwkJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQkJIF8oIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIpLAorCQkJCSBuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcmludGYgKCIlNWx1ICIsIGdlbmVyYXRpb24pOworCX0KKwlpZiAocGZfb3B0aW9ucyAmIFBGT1BUX0xPTkcpIHsKKwkJcHJpbnRmKCIlLTI4cyAiLCBuYW1lKTsKKwkJcHJpbnRfZmxhZ3Moc3Rkb3V0LCBmbGFncywgcGZfb3B0aW9ucyk7CisJCWZwdXRjKCdcbicsIHN0ZG91dCk7CisJfSBlbHNlIHsKKwkJcHJpbnRfZmxhZ3Moc3Rkb3V0LCBmbGFncywgcGZfb3B0aW9ucyk7CisJCXByaW50ZigiICVzXG4iLCBuYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHNhdHRyX2Rpcl9wcm9jIChjb25zdCBjaGFyICosIHN0cnVjdCBkaXJlbnQgKiwgdm9pZCAqKTsKKworc3RhdGljIGludCBsc2F0dHJfYXJncyAoY29uc3QgY2hhciAqIG5hbWUpCit7CisJU1RSVUNUX1NUQVQJc3Q7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoTFNUQVQgKG5hbWUsICZzdCkgPT0gLTEpIHsKKwkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCBlcnJubywgXygid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiKSwKKwkJCSBuYW1lKTsKKwkJcmV0dmFsID0gLTE7CisJfSBlbHNlIHsKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIWRpcnNfb3B0KQorCQkJcmV0dmFsID0gaXRlcmF0ZV9vbl9kaXIgKG5hbWUsIGxzYXR0cl9kaXJfcHJvYywgTlVMTCk7CisJCWVsc2UKKwkJCXJldHZhbCA9IGxpc3RfYXR0cmlidXRlcyAobmFtZSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbHNhdHRyX2Rpcl9wcm9jIChjb25zdCBjaGFyICogZGlyX25hbWUsIHN0cnVjdCBkaXJlbnQgKiBkZSwKKwkJCSAgICB2b2lkICogcHJpdmF0ZSBFWFQyRlNfQVRUUigodW51c2VkKSkpCit7CisJU1RSVUNUX1NUQVQJc3Q7CisJY2hhciAqcGF0aDsKKwlpbnQgZGlyX2xlbiA9IHN0cmxlbihkaXJfbmFtZSk7CisKKwlwYXRoID0gbWFsbG9jKGRpcl9sZW4gKyBzdHJsZW4gKGRlLT5kX25hbWUpICsgMik7CisKKwlpZiAoZGlyX2xlbiAmJiBkaXJfbmFtZVtkaXJfbGVuLTFdID09ICcvJykKKwkJc3ByaW50ZiAocGF0aCwgIiVzJXMiLCBkaXJfbmFtZSwgZGUtPmRfbmFtZSk7CisJZWxzZQorCQlzcHJpbnRmIChwYXRoLCAiJXMvJXMiLCBkaXJfbmFtZSwgZGUtPmRfbmFtZSk7CisJaWYgKExTVEFUIChwYXRoLCAmc3QpID09IC0xKQorCQlwZXJyb3IgKHBhdGgpOworCWVsc2UgeworCQlpZiAoZGUtPmRfbmFtZVswXSAhPSAnLicgfHwgYWxsKSB7CisJCQlsaXN0X2F0dHJpYnV0ZXMgKHBhdGgpOworCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkgJiYgcmVjdXJzaXZlICYmCisJCQkgICAgc3RyY21wKGRlLT5kX25hbWUsICIuIikgJiYKKwkJCSAgICBzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpIHsKKwkJCQlwcmludGYgKCJcbiVzOlxuIiwgcGF0aCk7CisJCQkJaXRlcmF0ZV9vbl9kaXIgKHBhdGgsIGxzYXR0cl9kaXJfcHJvYywgTlVMTCk7CisJCQkJcHJpbnRmICgiXG4iKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlKHBhdGgpOworCXJldHVybiAwOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwlpbnQgYzsKKwlpbnQgaTsKKwlpbnQgZXJyLCByZXR2YWwgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJSVmFkbHYiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ1InOgorCQkJCXJlY3Vyc2l2ZSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdWJzoKKwkJCQl2ZXJib3NlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2EnOgorCQkJCWFsbCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCQlkaXJzX29wdCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCQlwZl9vcHRpb25zID0gUEZPUFRfTE9ORzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCWdlbmVyYXRpb25fb3B0ID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdXNhZ2UoKTsKKwkJfQorCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYgKHN0ZGVyciwgImxzYXR0ciAlcyAoJXMpXG4iLAorCQkJIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJaWYgKG9wdGluZCA+IGFyZ2MgLSAxKSB7CisJCWlmIChsc2F0dHJfYXJncyAoIi4iKSA9PSAtMSkKKwkJCXJldHZhbCA9IDE7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKSB7CisJCQllcnIgPSBsc2F0dHJfYXJncyAoYXJndltpXSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHZhbCA9IDE7CisJCX0KKwl9CisJZXhpdChyZXR2YWwpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvbWtlMmZzLWh1cmQuY29uZiBiL2UyZnNwcm9ncy9taXNjL21rZTJmcy1odXJkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNTI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL21rZTJmcy1odXJkLmNvbmYKQEAgLTAsMCArMSw0MiBAQAorW2RlZmF1bHRzXQorCWJhc2VfZmVhdHVyZXMgPSBzcGFyc2Vfc3VwZXIsZmlsZXR5cGUscmVzaXplX2lub2RlLGRpcl9pbmRleCxleHRfYXR0cgorCWRlZmF1bHRfbW50b3B0cyA9IGFjbCx1c2VyX3hhdHRyCisJZW5hYmxlX3BlcmlvZGljX2ZzY2sgPSAwCisJYmxvY2tzaXplID0gNDA5NgorCWlub2RlX3NpemUgPSAxMjgKKwlpbm9kZV9yYXRpbyA9IDE2Mzg0CisKK1tmc190eXBlc10KKwlleHQzID0geworCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsCisJfQorCWV4dDQgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUKKwkJYXV0b182NC1iaXRfc3VwcG9ydCA9IDEKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCX0KKwlzbWFsbCA9IHsKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWZsb3BweSA9IHsKKwkJaW5vZGVfcmF0aW8gPSA4MTkyCisJfQorCWJpZyA9IHsKKwkJaW5vZGVfcmF0aW8gPSAzMjc2OAorCX0KKwlodWdlID0geworCQlpbm9kZV9yYXRpbyA9IDY1NTM2CisJfQorCW5ld3MgPSB7CisJCWlub2RlX3JhdGlvID0gNDA5NgorCX0KKwlsYXJnZWZpbGUgPSB7CisJCWlub2RlX3JhdGlvID0gMTA0ODU3NgorCX0KKwlsYXJnZWZpbGU0ID0geworCQlpbm9kZV9yYXRpbyA9IDQxOTQzMDQKKwl9CisJaHVyZCA9IHsKKwkgICAgIGJsb2Nrc2l6ZSA9IDQwOTYKKwkgICAgIGlub2RlX3NpemUgPSAxMjgKKwl9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuOC5pbiBiL2UyZnNwcm9ncy9taXNjL21rZTJmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTUwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuOC5pbgpAQCAtMCwwICsxLDcwMCBAQAorLlwiIC0qLSBucm9mZiAtKi0KKy5cIiBDb3B5cmlnaHQgMTk5MywgMTk5NCwgMTk5NSBieSBUaGVvZG9yZSBUcydvLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy5cIiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKy5cIgorLlRIIE1LRTJGUyA4ICJARTJGU1BST0dTX01PTlRIQCBARTJGU1BST0dTX1lFQVJAIiAiRTJmc3Byb2dzIHZlcnNpb24gQEUyRlNQUk9HU19WRVJTSU9OQCIKKy5TSCBOQU1FCitta2UyZnMgXC0gY3JlYXRlIGFuIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW0KKy5TSCBTWU5PUFNJUworLkIgbWtlMmZzCitbCisuQiBcLWMKK3wKKy5CIFwtbAorLkkgZmlsZW5hbWUKK10KK1sKKy5CIFwtYgorLkkgYmxvY2stc2l6ZQorXQorWworLkIgXC1ECitdCitbCisuQiBcLWYKKy5JIGZyYWdtZW50LXNpemUKK10KK1sKKy5CIFwtZworLkkgYmxvY2tzLXBlci1ncm91cAorXQorWworLkIgXC1HCisuSSBudW1iZXItb2YtZ3JvdXBzCitdCitbCisuQiBcLWkKKy5JIGJ5dGVzLXBlci1pbm9kZQorXQorWworLkIgXC1JCisuSSBpbm9kZS1zaXplCitdCitbCisuQiBcLWoKK10KK1sKKy5CIFwtSgorLkkgam91cm5hbC1vcHRpb25zCitdCitbCisuQiBcLU4KKy5JIG51bWJlci1vZi1pbm9kZXMKK10KK1sKKy5CIFwtbgorXQorWworLkIgXC1tCisuSSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZQorXQorWworLkIgXC1vCisuSSBjcmVhdG9yLW9zCitdCitbCisuQiBcLU8KKy5JUiBmZWF0dXJlIFssLi4uXQorXQorWworLkIgXC1xCitdCitbCisuQiBcLXIKKy5JIGZzLXJldmlzaW9uLWxldmVsCitdCitbCisuQiBcLUUKKy5JIGV4dGVuZGVkLW9wdGlvbnMKK10KK1sKKy5CIFwtdgorXQorWworLkIgXC1GCitdCitbCisuQiBcLUwKKy5JIHZvbHVtZS1sYWJlbAorXQorWworLkIgXC1NCisuSSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5CitdCitbCisuQiBcLVMKK10KK1sKKy5CIFwtdAorLkkgZnMtdHlwZQorXQorWworLkIgXC1UCisuSSB1c2FnZS10eXBlCitdCitbCisuQiBcLVUKKy5JIFVVSUQKK10KK1sKKy5CIFwtVgorXQorLkkgZGV2aWNlCitbCisuSSBibG9ja3MtY291bnQKK10KK0BKREVWQC5zcAorQEpERVZALkIgIm1rZTJmcyBcLU8gam91cm5hbF9kZXYiCitASkRFVkBbCitASkRFVkAuQiBcLWIKK0BKREVWQC5JIGJsb2NrLXNpemUKK0BKREVWQF0KKy5cIiBObyBleHRlcm5hbC1qb3VybmFsIHNwZWNpZmljIGpvdXJuYWwgb3B0aW9ucyB5ZXQgKHNpemUgaXMgaWdub3JlZCkKKy5cIiBASkRFVkBbCisuXCIgQEpERVZALkIgXC1KCisuXCIgQEpERVZALkkgam91cm5hbC1vcHRpb25zCisuXCIgQEpERVZAXQorQEpERVZAWworQEpERVZALkIgXC1MCitASkRFVkAuSSB2b2x1bWUtbGFiZWwKK0BKREVWQF0KK0BKREVWQFsKK0BKREVWQC5CIFwtbgorQEpERVZAXQorQEpERVZAWworQEpERVZALkIgXC1xCitASkRFVkBdCitASkRFVkBbCitASkRFVkAuQiBcLXYKK0BKREVWQF0KK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQFsKK0BKREVWQC5JIGJsb2Nrcy1jb3VudAorQEpERVZAXQorLlNIIERFU0NSSVBUSU9OCisuQiBta2UyZnMKK2lzIHVzZWQgdG8gY3JlYXRlIGFuIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZXN5c3RlbSwgdXN1YWxseSBpbiBhIGRpc2sKK3BhcnRpdGlvbi4KKy5JIGRldmljZQoraXMgdGhlIHNwZWNpYWwgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXZpY2UgKGUuZworLklSIC9kZXYvaGRYWCApLgorLkkgYmxvY2tzLWNvdW50CitpcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBvbiB0aGUgZGV2aWNlLiAgSWYgb21pdHRlZCwKKy5CIG1rZTJmcworYXV0b21hZ2ljYWxseSBmaWd1cmVzIHRoZSBmaWxlIHN5c3RlbSBzaXplLiAgSWYgY2FsbGVkIGFzCisuQiBta2ZzLmV4dDMKK2Egam91cm5hbCBpcyBjcmVhdGVkIGFzIGlmIHRoZQorLkIgXC1qCitvcHRpb24gd2FzIHNwZWNpZmllZC4KKy5QUAorVGhlIGRlZmF1bHRzIG9mIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlc3lzdGVtLCBpZiBub3QKK292ZXJyaWRkZW4gYnkgdGhlIG9wdGlvbnMgbGlzdGVkIGJlbG93LCBhcmUgY29udHJvbGxlZCBieSB0aGUKKy5CIC9ldGMvbWtlMmZzLmNvbmYKK2NvbmZpZ3VyYXRpb24gZmlsZS4gIFNlZSB0aGUKKy5CUiBta2UyZnMuY29uZiAoNSkKK21hbnVhbCBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisuU0ggT1BUSU9OUworLlRQCisuQkkgXC1iICIgYmxvY2stc2l6ZSIKK1NwZWNpZnkgdGhlIHNpemUgb2YgYmxvY2tzIGluIGJ5dGVzLiAgVmFsaWQgYmxvY2stc2l6ZSB2YWx1ZXMgYXJlIDEwMjQsCisyMDQ4IGFuZCA0MDk2IGJ5dGVzIHBlciBibG9jay4gIElmIG9taXR0ZWQsCitibG9jay1zaXplIGlzIGhldXJpc3RpY2FsbHkgZGV0ZXJtaW5lZCBieSB0aGUgZmlsZXN5c3RlbSBzaXplIGFuZAordGhlIGV4cGVjdGVkIHVzYWdlIG9mIHRoZSBmaWxlc3lzdGVtIChzZWUgdGhlCisuQiBcLVQKK29wdGlvbikuICBJZgorLkkgYmxvY2stc2l6ZQoraXMgcHJlY2VkZWQgYnkgYSBuZWdhdGl2ZSBzaWduICgnLScpLCB0aGVuCisuQiBta2UyZnMKK3dpbGwgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHRoZQorYXBwcm9wcmlhdGUgYmxvY2sgc2l6ZSwgd2l0aCB0aGUgY29uc3RyYWludCB0aGF0IHRoZSBibG9jayBzaXplIHdpbGwgYmUKK2F0IGxlYXN0CisuSSBibG9jay1zaXplCitieXRlcy4gIFRoaXMgaXMgdXNlZnVsIGZvciBjZXJ0YWluIGhhcmR3YXJlIGRldmljZXMgd2hpY2ggcmVxdWlyZSB0aGF0Cit0aGUgYmxvY2tzaXplIGJlIGEgbXVsdGlwbGUgb2YgMmsuCisuVFAKKy5CIFwtYworQ2hlY2sgdGhlIGRldmljZSBmb3IgYmFkIGJsb2NrcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpbGUgc3lzdGVtLiAgSWYKK3RoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCB0d2ljZSwgdGhlbiBhIHNsb3dlciByZWFkLXdyaXRlCit0ZXN0IGlzIHVzZWQgaW5zdGVhZCBvZiBhIGZhc3QgcmVhZC1vbmx5IHRlc3QuCisuVFAKKy5CIFwtQyAiIGNsdXN0ZXItc2l6ZSIKK1NwZWNpZnkgdGhlIHNpemUgb2YgY2x1c3RlciBpbiBieXRlcyBmb3IgZmlsZXN5c3RlbXMgdXNpbmcgdGhlIGJpZ2FsbG9jCitmZWF0dXJlLiAgVmFsaWQgY2x1c3Rlci1zaXplIHZhbHVlcyBhcmUgZnJvbSAyMDQ4IHRvIDI1Nk0gYnl0ZXMgcGVyCitjbHVzdGVyLiAgVGhpcyBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMKK2VuYWJsZWQuICAoU2VlIHRoZQorLkIgZXh0NCAoNSkKK21hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgYmlnYWxsb2MuKSAgIFRoZSBkZWZhdWx0IGNsdXN0ZXIgc2l6ZSBpZgorYmlnYWxsb2MgaXMgZW5hYmxlZCBpcyAxNiB0aW1lcyB0aGUgYmxvY2sgc2l6ZS4KKy5UUAorLkIgXC1ECitVc2UgZGlyZWN0IEkvTyB3aGVuIHdyaXRpbmcgdG8gdGhlIGRpc2suICBUaGlzIGF2b2lkcyBta2UyZnMgZGlydHlpbmcgYQorbG90IG9mIGJ1ZmZlciBjYWNoZSBtZW1vcnksIHdoaWNoIG1heSBpbXBhY3Qgb3RoZXIgYXBwbGljYXRpb25zIHJ1bm5pbmcKK29uIGEgYnVzeSBzZXJ2ZXIuICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIG1rZTJmcyB0byBydW4gbXVjaCBtb3JlCitzbG93bHksIGhvd2V2ZXIsIHNvIHRoZXJlIGlzIGEgdHJhZGVvZmYgdG8gdXNpbmcgZGlyZWN0IEkvTy4KKy5UUAorLkJJIFwtRSAiIGV4dGVuZGVkLW9wdGlvbnMiCitTZXQgZXh0ZW5kZWQgb3B0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0uICBFeHRlbmRlZCBvcHRpb25zIGFyZSBjb21tYQorc2VwYXJhdGVkLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgdXNpbmcgdGhlIGVxdWFscyAoJz0nKSBzaWduLiAgVGhlCisuQiBcLUUKK29wdGlvbiB1c2VkIHRvIGJlCisuQiBcLVIKK2luIGVhcmxpZXIgdmVyc2lvbnMgb2YKKy5CUiBta2UyZnMgLgorVGhlCisuQiBcLVIKK29wdGlvbiBpcyBzdGlsbCBhY2NlcHRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCBpcyBkZXByZWNhdGVkLgorVGhlIGZvbGxvd2luZyBleHRlbmRlZCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuUlMgMS4yaQorLlRQCisuQkkgbW1wX3VwZGF0ZV9pbnRlcnZhbD0gaW50ZXJ2YWwKK0FkanVzdCB0aGUgaW5pdGlhbCBNTVAgdXBkYXRlIGludGVydmFsIHRvCisuSSBpbnRlcnZhbAorc2Vjb25kcy4gIFNwZWNpZnlpbmcgYW4KKy5JIGludGVydmFsCitvZiAwIG1lYW5zIHRvIHVzZSB0aGUgZGVmYXVsdCBpbnRlcnZhbC4gIFRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwgbXVzdAorYmUgbGVzcyB0aGFuIDMwMCBzZWNvbmRzLiAgUmVxdWlyZXMgdGhhdCB0aGUKKy5CIG1tcAorZmVhdHVyZSBiZSBlbmFibGVkLgorLlRQCisuQkkgc3RyaWRlPSBzdHJpZGUtc2l6ZQorQ29uZmlndXJlIHRoZSBmaWxlc3lzdGVtIGZvciBhIFJBSUQgYXJyYXkgd2l0aAorLkkgc3RyaWRlLXNpemUKK2ZpbGVzeXN0ZW0gYmxvY2tzLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlYWQgb3Igd3JpdHRlbiB0byBkaXNrCitiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGRpc2ssIHdoaWNoIGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyB0aGUKKy5JIGNodW5rIHNpemUuCitUaGlzIG1vc3RseSBhZmZlY3RzIHBsYWNlbWVudCBvZiBmaWxlc3lzdGVtIG1ldGFkYXRhIGxpa2UgYml0bWFwcyBhdAorLkIgbWtlMmZzCit0aW1lIHRvIGF2b2lkIHBsYWNpbmcgdGhlbSBvbiBhIHNpbmdsZSBkaXNrLCB3aGljaCBjYW4gaHVydCBwZXJmb3JtYW5jZS4KK0l0IG1heSBhbHNvIGJlIHVzZWQgYnkgdGhlIGJsb2NrIGFsbG9jYXRvci4KKy5UUAorLkJJIHN0cmlwZV93aWR0aD0gc3RyaXBlLXdpZHRoCitDb25maWd1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIGEgUkFJRCBhcnJheSB3aXRoCisuSSBzdHJpcGUtd2lkdGgKK2ZpbGVzeXN0ZW0gYmxvY2tzIHBlciBzdHJpcGUuIFRoaXMgaXMgdHlwaWNhbGx5IHN0cmlkZS1zaXplICogTiwgd2hlcmUKK04gaXMgdGhlIG51bWJlciBvZiBkYXRhLWJlYXJpbmcgZGlza3MgaW4gdGhlIFJBSUQgKGUuZy4gZm9yIFJBSUQgNSB0aGVyZSBpcyBvbmUKK3Bhcml0eSBkaXNrLCBzbyBOIHdpbGwgYmUgdGhlIG51bWJlciBvZiBkaXNrcyBpbiB0aGUgYXJyYXkgbWludXMgMSkuCitUaGlzIGFsbG93cyB0aGUgYmxvY2sgYWxsb2NhdG9yIHRvIHByZXZlbnQgcmVhZC1tb2RpZnktd3JpdGUgb2YgdGhlCitwYXJpdHkgaW4gYSBSQUlEIHN0cmlwZSBpZiBwb3NzaWJsZSB3aGVuIHRoZSBkYXRhIGlzIHdyaXR0ZW4uCisuVFAKKy5CSSByZXNpemU9IG1heC1vbmxpbmUtcmVzaXplCitSZXNlcnZlIGVub3VnaCBzcGFjZSBzbyB0aGF0IHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIGNhbiBncm93Cit0byBzdXBwb3J0IGEgZmlsZXN5c3RlbSB0aGF0IGhhcworLkkgbWF4LW9ubGluZS1yZXNpemUKK2Jsb2Nrcy4KKy5UUAorLkIgbGF6eV9pdGFibGVfaW5pdFxmUltcZkI9IFxmSTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxmUl0KK0lmIGVuYWJsZWQgYW5kIHRoZSB1bmluaXRfYmcgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgaW5vZGUgdGFibGUgd2lsbAorbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5CisuQlIgbWtlMmZzIC4KK1RoaXMgc3BlZWRzIHVwIGZpbGVzeXN0ZW0KK2luaXRpYWxpemF0aW9uIG5vdGljZWFibHksIGJ1dCBpdCByZXF1aXJlcyB0aGUga2VybmVsIHRvIGZpbmlzaAoraW5pdGlhbGl6aW5nIHRoZSBmaWxlc3lzdGVtIGluIHRoZSBiYWNrZ3JvdW5kIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMKK2ZpcnN0IG1vdW50ZWQuICBJZiB0aGUgb3B0aW9uIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDEgdG8KK2VuYWJsZSBsYXp5IGlub2RlIHRhYmxlIHplcm9pbmcuCisuVFAKKy5CIGxhenlfam91cm5hbF9pbml0XGZSW1xmQj0gXGZJPDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XGZSXQorSWYgZW5hYmxlZCwgdGhlIGpvdXJuYWwgaW5vZGUgd2lsbCBub3QgYmUgZnVsbHkgemVyb2VkIG91dCBieQorLkJSIG1rZTJmcyAuCitUaGlzIHNwZWVkcyB1cCBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIG5vdGljZWFibHksIGJ1dCBjYXJyaWVzIHNvbWUKK3NtYWxsIHJpc2sgaWYgdGhlIHN5c3RlbSBjcmFzaGVzIGJlZm9yZSB0aGUgam91cm5hbCBoYXMgYmVlbiBvdmVyd3JpdHRlbgorZW50aXJlbHkgb25lIHRpbWUuICBJZiB0aGUgb3B0aW9uIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDEgdG8KK2VuYWJsZSBsYXp5IGpvdXJuYWwgaW5vZGUgemVyb2luZy4KKy5UUAorLkJJIHJvb3Rfb3duZXIgWz11aWQ6Z2lkXQorU3BlY2lmeSB0aGUgbnVtZXJpYyB1c2VyIGFuZCBncm91cCBJRCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkuICBJZiBubyBVSUQ6R0lECitpcyBzcGVjaWZpZWQsIHVzZSB0aGUgdXNlciBhbmQgZ3JvdXAgSUQgb2YgdGhlIHVzZXIgcnVubmluZyBcZkJta2UyZnNcZlIuCitJbiBcZkJta2UyZnNcZlIgMS40MiBhbmQgZWFybGllciB0aGUgVUlEIGFuZCBHSUQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IHdlcmUKK3NldCBieSBkZWZhdWx0IHRvIHRoZSBVSUQgYW5kIEdJRCBvZiB0aGUgdXNlciBydW5uaW5nIHRoZSBta2UyZnMgY29tbWFuZC4KK1RoZSBcZkJyb290X293bmVyPVxmUiBvcHRpb24gYWxsb3dzIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGVzZSB2YWx1ZXMsCithbmQgYXZvaWQgc2lkZS1lZmZlY3RzIGZvciB1c2VycyB0aGF0IGRvIG5vdCBleHBlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZQorZmlsZXN5c3RlbSB0byBjaGFuZ2UgYmFzZWQgb24gdGhlIHVzZXIgcnVubmluZyBcZkJta2UyZnNcZlIuCisuVFAKKy5CIHRlc3RfZnMKK1NldCBhIGZsYWcgaW4gdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpbmRpY2F0aW5nIHRoYXQgaXQgbWF5IGJlCittb3VudGVkIHVzaW5nIGV4cGVyaW1lbnRhbCBrZXJuZWwgY29kZSwgc3VjaCBhcyB0aGUgZXh0NGRldiBmaWxlc3lzdGVtLgorLlRQCisuQkkgZGlzY2FyZAorQXR0ZW1wdCB0byBkaXNjYXJkIGJsb2NrcyBhdCBta2ZzIHRpbWUgKGRpc2NhcmRpbmcgYmxvY2tzIGluaXRpYWxseSBpcyB1c2VmdWwKK29uIHNvbGlkIHN0YXRlIGRldmljZXMgYW5kIHNwYXJzZSAvIHRoaW4tcHJvdmlzaW9uZWQgc3RvcmFnZSkuIFdoZW4gdGhlIGRldmljZQorYWR2ZXJ0aXNlcyB0aGF0IGRpc2NhcmQgYWxzbyB6ZXJvZXMgZGF0YSAoYW55IHN1YnNlcXVlbnQgcmVhZCBhZnRlciB0aGUgZGlzY2FyZAorYW5kIGJlZm9yZSB3cml0ZSByZXR1cm5zIHplcm8pLCB0aGVuIG1hcmsgYWxsIG5vdC15ZXQtemVyb2VkIGlub2RlIHRhYmxlcyBhcworemVyb2VkLiBUaGlzIHNpZ25pZmljYW50bHkgc3BlZWRzIHVwIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgc2V0CithcyBkZWZhdWx0LgorLlRQCisuQkkgbm9kaXNjYXJkCitEbyBub3QgYXR0ZW1wdCB0byBkaXNjYXJkIGJsb2NrcyBhdCBta2ZzIHRpbWUuCitAUVVPVEFfTUFOX0NPTU1FTlRALlRQCitAUVVPVEFfTUFOX0NPTU1FTlRALkJJIHF1b3RhdHlwZQorQFFVT1RBX01BTl9DT01NRU5UQFNwZWNpZnkgd2hpY2ggcXVvdGEgdHlwZSAoJ3Vzcicgb3IgJ2dycCcpIGlzIHRvIGJlCitAUVVPVEFfTUFOX0NPTU1FTlRAaW5pdGlhbGl6ZWQuIFRoaXMgb3B0aW9uIGhhcyBlZmZlY3Qgb25seSBpZiB0aGUKK0BRVU9UQV9NQU5fQ09NTUVOVEAuQiBxdW90YQorQFFVT1RBX01BTl9DT01NRU5UQGZlYXR1cmUgaXMgc2V0LiBXaXRob3V0IHRoaXMgZXh0ZW5kZWQgb3B0aW9uLCB0aGUgZGVmYXVsdAorQFFVT1RBX01BTl9DT01NRU5UQGJlaGF2aW9yIGlzIHRvIGluaXRpYWxpemUgYm90aCB1c2VyIGFuZCBncm91cCBxdW90YXMuCisuUkUKKy5UUAorLkJJIFwtZiAiIGZyYWdtZW50LXNpemUiCitTcGVjaWZ5IHRoZSBzaXplIG9mIGZyYWdtZW50cyBpbiBieXRlcy4KKy5UUAorLkIgXC1GCitGb3JjZQorLkIgbWtlMmZzCit0byBjcmVhdGUgYSBmaWxlc3lzdGVtLCBldmVuIGlmIHRoZSBzcGVjaWZpZWQgZGV2aWNlIGlzIG5vdCBhIHBhcnRpdGlvbgorb24gYSBibG9jayBzcGVjaWFsIGRldmljZSwgb3IgaWYgb3RoZXIgcGFyYW1ldGVycyBkbyBub3QgbWFrZSBzZW5zZS4KK0luIG9yZGVyIHRvIGZvcmNlCisuQiBta2UyZnMKK3RvIGNyZWF0ZSBhIGZpbGVzeXN0ZW0gZXZlbiBpZiB0aGUgZmlsZXN5c3RlbSBhcHBlYXJzIHRvIGJlIGluIHVzZQorb3IgaXMgbW91bnRlZCAoYSB0cnVseSBkYW5nZXJvdXMgdGhpbmcgdG8gZG8pLCB0aGlzIG9wdGlvbiBtdXN0IGJlCitzcGVjaWZpZWQgdHdpY2UuCisuVFAKKy5CSSBcLWcgIiBibG9ja3MtcGVyLWdyb3VwIgorU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBpbiBhIGJsb2NrIGdyb3VwLiAgVGhlcmUgaXMgZ2VuZXJhbGx5IG5vCityZWFzb24gZm9yIHRoZSB1c2VyIHRvIGV2ZXIgc2V0IHRoaXMgcGFyYW1ldGVyLCBhcyB0aGUgZGVmYXVsdCBpcyBvcHRpbWFsCitmb3IgdGhlIGZpbGVzeXN0ZW0uICAoRm9yIGFkbWluaXN0cmF0b3JzIHdobyBhcmUgY3JlYXRpbmcKK2ZpbGVzeXN0ZW1zIG9uIFJBSUQgYXJyYXlzLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHVzZSB0aGUKKy5JIHN0cmlkZQorUkFJRCBwYXJhbWV0ZXIgYXMgcGFydCBvZiB0aGUKKy5CIFwtRQorb3B0aW9uIHJhdGhlciB0aGFuIG1hbmlwdWxhdGluZyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwZXIgZ3JvdXAuKQorVGhpcyBvcHRpb24gaXMgZ2VuZXJhbGx5IHVzZWQgYnkgZGV2ZWxvcGVycyB3aG8KK2FyZSBkZXZlbG9waW5nIHRlc3QgY2FzZXMuCisuSVAKK0lmIHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZQorLkIgXC1nCitvcHRpb24gd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgaW4gYSBibG9jayBncm91cC4KKy5UUAorLkJJIFwtRyAiIG51bWJlci1vZi1ncm91cHMiCitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYmxvY2sgZ3JvdXBzIHRoYXQgd2lsbCBiZSBwYWNrZWQgdG9nZXRoZXIgdG8KK2NyZWF0ZSBhIGxhcmdlciB2aXJ0dWFsIGJsb2NrIGdyb3VwIChvciAiZmxleF9iZyBncm91cCIpIGluIGFuCitleHQ0IGZpbGVzeXN0ZW0uICBUaGlzIGltcHJvdmVzIG1ldGEtZGF0YSBsb2NhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29uIG1ldGEtZGF0YSBoZWF2eSB3b3JrbG9hZHMuICBUaGUgbnVtYmVyIG9mIGdyb3VwcyBtdXN0IGJlIGEgcG93ZXIKK29mIDIgYW5kIG1heSBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgCisuQiBmbGV4X2JnCitmaWxlc3lzdGVtIGZlYXR1cmUgaXMgZW5hYmxlZC4KKy5UUAorLkJJIFwtaSAiIGJ5dGVzLXBlci1pbm9kZSIKK1NwZWNpZnkgdGhlIGJ5dGVzL2lub2RlIHJhdGlvLgorLkIgbWtlMmZzCitjcmVhdGVzIGFuIGlub2RlIGZvciBldmVyeQorLkkgYnl0ZXMtcGVyLWlub2RlCitieXRlcyBvZiBzcGFjZSBvbiB0aGUgZGlzay4gIFRoZSBsYXJnZXIgdGhlCisuSSBieXRlcy1wZXItaW5vZGUKK3JhdGlvLCB0aGUgZmV3ZXIgaW5vZGVzIHdpbGwgYmUgY3JlYXRlZC4gIFRoaXMgdmFsdWUgZ2VuZXJhbGx5IHNob3VsZG4ndAorYmUgc21hbGxlciB0aGFuIHRoZSBibG9ja3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0sIHNpbmNlIGluIHRoYXQgY2FzZSBtb3JlCitpbm9kZXMgd291bGQgYmUgbWFkZSB0aGFuIGNhbiBldmVyIGJlIHVzZWQuICBCZSB3YXJuZWQgdGhhdCBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIGNoYW5nZSB0aGlzIHJhdGlvIG9uIGEgZmlsZXN5c3RlbSBhZnRlciBpdCBpcyBjcmVhdGVkLCBzbyBiZQorY2FyZWZ1bCBkZWNpZGluZyB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIuICBOb3RlIHRoYXQgcmVzaXppbmcKK2EgZmlsZXN5c3RlbSBjaGFuZ2VzIHRoZSBudW1lciBvZiBpbm9kZXMgdG8gbWFpbnRhaW4gdGhpcyByYXRpby4KKy5UUAorLkJJIFwtSSAiIGlub2RlLXNpemUiCitTcGVjaWZ5IHRoZSBzaXplIG9mIGVhY2ggaW5vZGUgaW4gYnl0ZXMuCitUaGUKKy5JIGlub2RlLXNpemUKK3ZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiAyIGxhcmdlciBvciBlcXVhbCB0byAxMjguICBUaGUgbGFyZ2VyIHRoZQorLkkgaW5vZGUtc2l6ZQordGhlIG1vcmUgc3BhY2UgdGhlIGlub2RlIHRhYmxlIHdpbGwgY29uc3VtZSwgYW5kIHRoaXMgcmVkdWNlcyB0aGUgdXNhYmxlCitzcGFjZSBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgY2FuIGFsc28gbmVnYXRpdmVseSBpbXBhY3QgcGVyZm9ybWFuY2UuCitJdCBpcyBub3QKK3Bvc3NpYmxlIHRvIGNoYW5nZSB0aGlzIHZhbHVlIGFmdGVyIHRoZSBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisuSVAKK0luIGtlcm5lbHMgYWZ0ZXIgMi42LjEwIGFuZCBzb21lCitlYXJsaWVyIHZlbmRvciBrZXJuZWxzIGl0IGlzIHBvc3NpYmxlIHRvIHV0aWxpemUgaW5vZGVzIGxhcmdlciB0aGFuCisxMjggYnl0ZXMgdG8gc3RvcmUKK2V4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorRXh0ZW5kZWQgYXR0cmlidXRlcworc3RvcmVkIGluIGxhcmdlIGlub2RlcyBhcmUgbm90IHZpc2libGUgd2l0aCBvbGRlciBrZXJuZWxzLCBhbmQgc3VjaAorZmlsZXN5c3RlbXMgd2lsbCBub3QgYmUgbW91bnRhYmxlIHdpdGggMi40IGtlcm5lbHMgYXQgYWxsLiAgCisuSVAKK1RoZSBkZWZhdWx0IGlub2RlIHNpemUgaXMgY29udHJvbGxlZCBieSB0aGUKKy5CUiBta2UyZnMuY29uZiAoNSkKK2ZpbGUuICBJbiB0aGUKKy5CIG1rZTJmcy5jb25mCitmaWxlIHNoaXBwZWQgd2l0aCBlMmZzcHJvZ3MsIHRoZSBkZWZhdWx0IGlub2RlIHNpemUgaXMgMjU2IGJ5dGVzIGZvcgorbW9zdCBmaWxlIHN5c3RlbXMsIGV4Y2VwdCBmb3Igc21hbGwgZmlsZSBzeXN0ZW1zIHdoZXJlIHRoZSBpbm9kZSBzaXplCit3aWxsIGJlIDEyOCBieXRlcy4KKy5UUAorLkIgXC1qCitDcmVhdGUgdGhlIGZpbGVzeXN0ZW0gd2l0aCBhbiBleHQzIGpvdXJuYWwuICBJZiB0aGUKKy5CIFwtSgorb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGpvdXJuYWwgcGFyYW1ldGVycyB3aWxsIGJlIHVzZWQgdG8KK2NyZWF0ZSBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGpvdXJuYWwgKGdpdmVuIHRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtKQorc3RvcmVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBiZSB1c2luZyBhIGtlcm5lbAord2hpY2ggaGFzIGV4dDMgc3VwcG9ydCBpbiBvcmRlciB0byBhY3R1YWxseSBtYWtlIHVzZSBvZiB0aGUgam91cm5hbC4KKy5UUAorLkJJIFwtSiAiIGpvdXJuYWwtb3B0aW9ucyIKK0NyZWF0ZSB0aGUgZXh0MyBqb3VybmFsIHVzaW5nIG9wdGlvbnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUuCitKb3VybmFsIG9wdGlvbnMgYXJlIGNvbW1hCitzZXBhcmF0ZWQsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB1c2luZyB0aGUgZXF1YWxzICgnPScpICBzaWduLgorVGhlIGZvbGxvd2luZyBqb3VybmFsIG9wdGlvbnMgYXJlIHN1cHBvcnRlZDoKKy5SUyAxLjJpCisuVFAKKy5CSSBzaXplPSBqb3VybmFsLXNpemUKK0NyZWF0ZSBhbiBpbnRlcm5hbCBqb3VybmFsIChpLmUuLCBzdG9yZWQgaW5zaWRlIHRoZSBmaWxlc3lzdGVtKSBvZiBzaXplCisuSSBqb3VybmFsLXNpemUKK21lZ2FieXRlcy4KK1RoZSBzaXplIG9mIHRoZSBqb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBmaWxlc3lzdGVtIGJsb2NrcworKGkuZS4sIDFNQiBpZiB1c2luZyAxayBibG9ja3MsIDRNQiBpZiB1c2luZyA0ayBibG9ja3MsIGV0Yy4pCithbmQgbWF5IGJlIG5vIG1vcmUgdGhhbiAxMCwyNDAsMDAwIGZpbGVzeXN0ZW0gYmxvY2tzIG9yIGhhbGYgdGhlIHRvdGFsCitmaWxlIHN5c3RlbSBzaXplICh3aGljaGV2ZXIgaXMgc21hbGxlcikKK0BKREVWQC5UUAorQEpERVZALkJJIGRldmljZT0gZXh0ZXJuYWwtam91cm5hbAorQEpERVZAQXR0YWNoIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBqb3VybmFsIGJsb2NrIGRldmljZSBsb2NhdGVkIG9uCitASkRFVkAuSVIgZXh0ZXJuYWwtam91cm5hbCAuCitASkRFVkBUaGUgZXh0ZXJuYWwKK0BKREVWQGpvdXJuYWwgbXVzdCBhbHJlYWR5IGhhdmUgYmVlbiBjcmVhdGVkIHVzaW5nIHRoZSBjb21tYW5kCitASkRFVkAuSVAKK0BKREVWQC5CIG1rZTJmcyAtTyBqb3VybmFsX2RldgorQEpERVZALkkgZXh0ZXJuYWwtam91cm5hbAorQEpERVZALklQCitASkRFVkBOb3RlIHRoYXQKK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUKK0BKREVWQHNhbWUgYmxvY2sgc2l6ZSBhcyB0aGUgbmV3IGZpbGVzeXN0ZW0uCitASkRFVkBJbiBhZGRpdGlvbiwgd2hpbGUgdGhlcmUgaXMgc3VwcG9ydCBmb3IgYXR0YWNoaW5nCitASkRFVkBtdWx0aXBsZSBmaWxlc3lzdGVtcyB0byBhIHNpbmdsZSBleHRlcm5hbCBqb3VybmFsLAorQEpERVZAdGhlIExpbnV4IGtlcm5lbCBhbmQKK0BKREVWQC5CUiBlMmZzY2sgKDgpCitASkRFVkBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgc2hhcmVkIGV4dGVybmFsIGpvdXJuYWxzIHlldC4KK0BKREVWQC5JUAorQEpERVZASW5zdGVhZCBvZiBzcGVjaWZ5aW5nIGEgZGV2aWNlIG5hbWUgZGlyZWN0bHksCitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYnkgZWl0aGVyCitASkRFVkAuQkkgTEFCRUw9IGxhYmVsCitASkRFVkBvcgorQEpERVZALkJJIFVVSUQ9IFVVSUQKK0BKREVWQHRvIGxvY2F0ZSB0aGUgZXh0ZXJuYWwgam91cm5hbCBieSBlaXRoZXIgdGhlIHZvbHVtZSBsYWJlbCBvciBVVUlECitASkRFVkBzdG9yZWQgaW4gdGhlIGV4dDIgc3VwZXJibG9jayBhdCB0aGUgc3RhcnQgb2YgdGhlIGpvdXJuYWwuICBVc2UKK0BKREVWQC5CUiBkdW1wZTJmcyAoOCkKK0BKREVWQHRvIGRpc3BsYXkgYSBqb3VybmFsIGRldmljZSdzIHZvbHVtZSBsYWJlbCBhbmQgVVVJRC4gIFNlZSBhbHNvIHRoZQorQEpERVZALkIgLUwKK0BKREVWQG9wdGlvbiBvZgorQEpERVZALkJSIHR1bmUyZnMgKDgpLgorLlJFCitASkRFVkAuSVAKK0BKREVWQE9ubHkgb25lIG9mIHRoZQorQEpERVZALkJSIHNpemUgIiBvciAiIGRldmljZQorQEpERVZAb3B0aW9ucyBjYW4gYmUgZ2l2ZW4gZm9yIGEgZmlsZXN5c3RlbS4KKy5UUAorLkJJIFwtbCAiIGZpbGVuYW1lIgorUmVhZCB0aGUgYmFkIGJsb2NrcyBsaXN0IGZyb20KKy5JUiBmaWxlbmFtZSAuCitOb3RlIHRoYXQgdGhlIGJsb2NrIG51bWJlcnMgaW4gdGhlIGJhZCBibG9jayBsaXN0IG11c3QgYmUgZ2VuZXJhdGVkCit1c2luZyB0aGUgc2FtZSBibG9jayBzaXplIGFzIHVzZWQgYnkKKy5CUiBta2UyZnMgLgorQXMgYSByZXN1bHQsIHRoZQorLkIgXC1jCitvcHRpb24gdG8KKy5CIG1rZTJmcworaXMgYSBtdWNoIHNpbXBsZXIgYW5kIGxlc3MgZXJyb3ItcHJvbmUgbWV0aG9kIG9mIGNoZWNraW5nIGEgZGlzayBmb3IgYmFkCitibG9ja3MgYmVmb3JlIGZvcm1hdHRpbmcgaXQsIGFzCisuQiBta2UyZnMKK3dpbGwgYXV0b21hdGljYWxseSBwYXNzIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgdG8gdGhlCisuQiBiYWRibG9ja3MKK3Byb2dyYW0uCisuVFAKKy5CSSBcLUwgIiBuZXctdm9sdW1lLWxhYmVsIgorU2V0IHRoZSB2b2x1bWUgbGFiZWwgZm9yIHRoZSBmaWxlc3lzdGVtIHRvCisuSVIgbmV3LXZvbHVtZS1sYWJlbCAuCitUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlCit2b2x1bWUgbGFiZWwgaXMgMTYgYnl0ZXMuCisuVFAKKy5CSSBcLW0gIiByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZSIKK1NwZWNpZnkgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGZpbGVzeXN0ZW0gYmxvY2tzIHJlc2VydmVkIGZvcgordGhlIHN1cGVyLXVzZXIuICBUaGlzIGF2b2lkcyBmcmFnbWVudGF0aW9uLCBhbmQgYWxsb3dzIHJvb3Qtb3duZWQKK2RhZW1vbnMsIHN1Y2ggYXMKKy5CUiBzeXNsb2dkICg4KSwKK3RvIGNvbnRpbnVlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBhZnRlciBub24tcHJpdmlsZWdlZCBwcm9jZXNzZXMgYXJlCitwcmV2ZW50ZWQgZnJvbSB3cml0aW5nIHRvIHRoZSBmaWxlc3lzdGVtLiAgVGhlIGRlZmF1bHQgcGVyY2VudGFnZQoraXMgNSUuCisuVFAKKy5CSSBcLU0gIiBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5IgorU2V0IHRoZSBsYXN0IG1vdW50ZWQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgbWlnaHQgYmUgdXNlZnVsCitmb3IgdGhlIHNha2Ugb2YgdXRpbGl0aWVzIHRoYXQga2V5IG9mZiBvZiB0aGUgbGFzdCBtb3VudGVkIGRpcmVjdG9yeSB0bworZGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlc3lzdGVtIHNob3VsZCBiZSBtb3VudGVkLgorLlRQCisuQiBcLW4KK0NhdXNlcworLkIgbWtlMmZzCit0byBub3QgYWN0dWFsbHkgY3JlYXRlIGEgZmlsZXN5c3RlbSwgYnV0IGRpc3BsYXkgd2hhdCBpdAord291bGQgZG8gaWYgaXQgd2VyZSB0byBjcmVhdGUgYSBmaWxlc3lzdGVtLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmFja3VwIHN1cGVyYmxvY2tzIGZvciBhIHBhcnRpY3VsYXIKK2ZpbGVzeXN0ZW0sIHNvIGxvbmcgYXMgdGhlCisuQiBta2UyZnMKK3BhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZCB3aGVuIHRoZQorZmlsZXN5c3RlbSB3YXMgb3JpZ2luYWxseSBjcmVhdGVkIGFyZSB1c2VkIGFnYWluLiAgKFdpdGggdGhlCisuQiBcLW4KK29wdGlvbiBhZGRlZCwgb2YgY291cnNlISkKKy5UUAorLkJJIFwtTiAiIG51bWJlci1vZi1pbm9kZXMiCitPdmVycmlkZXMgdGhlIGRlZmF1bHQgY2FsY3VsYXRpb24gb2YgdGhlIG51bWJlciBvZiBpbm9kZXMgdGhhdCBzaG91bGQgYmUKK3Jlc2VydmVkIGZvciB0aGUgZmlsZXN5c3RlbSAod2hpY2ggaXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBibG9ja3MgYW5kCit0aGUKKy5JIGJ5dGVzLXBlci1pbm9kZQorcmF0aW8pLiAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgbnVtYmVyCitvZiBkZXNpcmVkIGlub2RlcyBkaXJlY3RseS4KKy5UUAorLkJJIFwtbyAiIGNyZWF0b3Itb3MiCitPdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICJjcmVhdG9yIG9wZXJhdGluZyBzeXN0ZW0iIGZpZWxkIG9mIHRoZQorZmlsZXN5c3RlbS4gIFRoZSBjcmVhdG9yIGZpZWxkIGlzIHNldCBieSBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBPUyB0aGUKKy5CIG1rZTJmcworZXhlY3V0YWJsZSB3YXMgY29tcGlsZWQgZm9yLgorLlRQCisuQiAiXC1PIFxmSWZlYXR1cmVcZlJbLC4uLl0iCitDcmVhdGUgYSBmaWxlc3lzdGVtIHdpdGggdGhlIGdpdmVuIGZlYXR1cmVzIChmaWxlc3lzdGVtIG9wdGlvbnMpLAorb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIG9wdGlvbnMuICBUaGUgZmVhdHVyZXMgdGhhdCBhcmUKK2VuYWJsZWQgYnkgZGVmYXVsdCBhcmUgc3BlY2lmaWVkIGJ5IHRoZQorLkkgYmFzZV9mZWF0dXJlcworcmVsYXRpb24sIGVpdGhlciBpbiB0aGUKKy5JIFtkZWZhdWx0c10KK3NlY3Rpb24gaW4gdGhlCisuQiAvZXRjL21rZTJmcy5jb25mCitjb25maWd1cmF0aW9uIGZpbGUsCitvciBpbiB0aGUKKy5JIFtmc190eXBlc10KK3N1YnNlY3Rpb25zIGZvciB0aGUgdXNhZ2UgdHlwZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZQorLkIgXC1UCitvcHRpb24sIGZ1cnRoZXIgbW9kaWZpZWQgYnkgdGhlCisuSSBmZWF0dXJlcworcmVsYXRpb24gZm91bmQgaW4gdGhlCisuSSBbZnNfdHlwZXNdCitzdWJzZWN0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0gYW5kIHVzYWdlIHR5cGVzLiAgU2VlIHRoZQorLkJSIG1rZTJmcy5jb25mICg1KQorbWFudWFsIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KK1RoZSBmaWxlc3lzdGVtIHR5cGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZvdW5kIGluIHRoZQorLkkgW2ZzX3R5cGVzXQorc2VjdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBnbG9iYWwgZGVmYXVsdCBmb3VuZCBpbgorLklSIFtkZWZhdWx0c10gLgorLnNwCitUaGUgZmlsZXN5c3RlbSBmZWF0dXJlIHNldCB3aWxsIGJlIGZ1cnRoZXIgZWRpdGVkCit1c2luZyBlaXRoZXIgdGhlIGZlYXR1cmUgc2V0IHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbiwKK29yIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgYnkgdGhlCisuSSBkZWZhdWx0X2ZlYXR1cmVzCityZWxhdGlvbiBmb3IgdGhlIGZpbGVzeXN0ZW0gdHlwZSBiZWluZyBjcmVhdGVkLCBvciBpbiB0aGUKKy5JIFtkZWZhdWx0c10KK3NlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5zcAorVGhlIGZpbGVzeXN0ZW0gZmVhdHVyZSBzZXQgaXMgY29tcHJpc2VkIG9mIGEgbGlzdCBvZiBmZWF0dXJlcywgc2VwYXJhdGVkCitieSBjb21tYXMsIHRoYXQgYXJlIHRvIGJlIGVuYWJsZWQuICBUbyBkaXNhYmxlIGEgZmVhdHVyZSwgc2ltcGx5CitwcmVmaXggdGhlIGZlYXR1cmUgbmFtZSB3aXRoIGEgIGNhcmV0ICgnXicpIG9yIGEgbWludXMgKCctJykgY2hhcmFjdGVyLgorRmVhdHVyZXMgd2l0aCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuCitUaGUgcHNldWRvLWZpbGVzeXN0ZW0gZmVhdHVyZSAibm9uZSIgd2lsbCBjbGVhciBhbGwgZmlsZXN5c3RlbSBmZWF0dXJlcy4KKy5UUAorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIHdoaWNoIGNhbiBiZSBzZXQsIHBsZWFzZSBzZWUKK3RoZSBtYW51YWwgcGFnZQorLkJSIGV4dDQgKDUpLgorLlRQCisuQiBcLXEKK1F1aWV0IGV4ZWN1dGlvbi4gIFVzZWZ1bCBpZgorLkIgbWtlMmZzCitpcyBydW4gaW4gYSBzY3JpcHQuCisuVFAKKy5CSSBcLXIgIiByZXZpc2lvbiIKK1NldCB0aGUgZmlsZXN5c3RlbSByZXZpc2lvbiBmb3IgdGhlIG5ldyBmaWxlc3lzdGVtLiAgTm90ZSB0aGF0IDEuMgora2VybmVscyBvbmx5IHN1cHBvcnQgcmV2aXNpb24gMCBmaWxlc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIHRvCitjcmVhdGUgcmV2aXNpb24gMSBmaWxlc3lzdGVtcy4KKy5UUAorLkIgXC1TCitXcml0ZSBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycyBvbmx5LiAgVGhpcyBpcyB1c2VmdWwgaWYgYWxsIG9mCit0aGUgc3VwZXJibG9jayBhbmQgYmFja3VwIHN1cGVyYmxvY2tzIGFyZSBjb3JydXB0ZWQsIGFuZCBhIGxhc3QtZGl0Y2gKK3JlY292ZXJ5IG1ldGhvZCBpcyBkZXNpcmVkLiAgSXQgY2F1c2VzCisuQiBta2UyZnMKK3RvIHJlaW5pdGlhbGl6ZSB0aGUKK3N1cGVyYmxvY2sgYW5kIGdyb3VwIGRlc2NyaXB0b3JzLCB3aGlsZSBub3QgdG91Y2hpbmcgdGhlIGlub2RlIHRhYmxlCithbmQgdGhlIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzLiAgVGhlCisuQiBlMmZzY2sKK3Byb2dyYW0gc2hvdWxkIGJlIHJ1biBpbW1lZGlhdGVseSBhZnRlciB0aGlzIG9wdGlvbiBpcyB1c2VkLCBhbmQgdGhlcmUKK2lzIG5vIGd1YXJhbnRlZSB0aGF0IGFueSBkYXRhIHdpbGwgYmUgc2FsdmFnZWFibGUuICBJdCBpcyBjcml0aWNhbCB0bworc3BlY2lmeSB0aGUgY29ycmVjdCBmaWxlc3lzdGVtIGJsb2Nrc2l6ZSB3aGVuIHVzaW5nIHRoaXMgb3B0aW9uLAorb3IgdGhlcmUgaXMgbm8gY2hhbmNlIG9mIHJlY292ZXJ5LgorLlwiIC5UUAorLlwiIC5CSSBcLXQgIiB0ZXN0IgorLlwiIENoZWNrIHRoZSBkZXZpY2UgZm9yIGJhZCBibG9ja3MgYmVmb3JlIGNyZWF0aW5nIHRoZSBmaWxlIHN5c3RlbQorLlwiIHVzaW5nIHRoZSBzcGVjaWZpZWQgdGVzdC4KKy5UUAorLkJJIFwtdCAiIGZzLXR5cGUiCitTcGVjaWZ5IHRoZSBmaWxlc3lzdGVtIHR5cGUgKGkuZS4sIGV4dDIsIGV4dDMsIGV4dDQsIGV0Yy4pIHRoYXQgaXMKK3RvIGJlIGNyZWF0ZWQuCitJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLAorLkIgbWtlMmZzCit3aWxsIHBpY2sgYSBkZWZhdWx0IGVpdGhlciB2aWEgaG93Cit0aGUgY29tbWFuZCB3YXMgcnVuIChmb3IgZXhhbXBsZSwgdXNpbmcgYSBuYW1lIG9mIHRoZSBmb3JtIG1rZnMuZXh0MiwKK21rZnMuZXh0MywgZXRjLikgb3IgdmlhIGEgZGVmYXVsdCBhcyBkZWZpbmVkIGJ5IHRoZQorLkIgL2V0Yy9ta2UyZnMuY29uZgorZmlsZS4gICBUaGlzIG9wdGlvbiBjb250cm9scyB3aGljaCBmaWxlc3lzdGVtIG9wdGlvbnMgYXJlIHVzZWQgYnkKK2RlZmF1bHQsIGJhc2VkIG9uIHRoZQorLkIgZnN0eXBlcworY29uZmlndXJhdGlvbiBzdGFuemEgaW4KKy5CUiAvZXRjL21rZTJmcy5jb25mIC4KKy5zcAorSWYgdGhlCisuQiBcLU8KK29wdGlvbiBpcyB1c2VkIHRvIGV4cGxpY2l0bHkgYWRkIG9yIHJlbW92ZSBmaWxlc3lzdGVtIG9wdGlvbnMgdGhhdAorc2hvdWxkIGJlIHNldCBpbiB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlc3lzdGVtLCB0aGUKK3Jlc3VsdGluZyBmaWxlc3lzdGVtIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSByZXF1ZXN0ZWQKKy5JUiBmcy10eXBlIC4KKyhlLmcuLCAiXGZCbWtlMmZzIFwtdCBleHQzIFwtTyBleHRlbnQgL2Rldi9zZFhYXGZSIiB3aWxsIGNyZWF0ZSBhCitmaWxlc3lzdGVtIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZXh0MyBpbXBsZW1lbnRhdGlvbiBhcyBmb3VuZCBpbgordGhlIExpbnV4IGtlcm5lbDsgYW5kICJcZkJta2UyZnMgXC10IGV4dDMgXC1PIF5oYXNfam91cm5hbCAvZGV2L2hkWFhcZlIiCit3aWxsIGNyZWF0ZSBhIGZpbGVzeXN0ZW0gdGhhdCBkb2VzIG5vdCBoYXZlIGEgam91cm5hbCBhbmQgaGVuY2Ugd2lsbCBub3QKK2JlIHN1cHBvcnRlZCBieSB0aGUgZXh0MyBmaWxlc3lzdGVtIGNvZGUgaW4gdGhlIExpbnV4IGtlcm5lbC4pCisuVFAKKy5CSSBcLVQgIiB1c2FnZS10eXBlWywuLi5dIgorU3BlY2lmeSBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgdXNlZCwgc28gdGhhdAorLkIgbWtlMmZzCitjYW4gY2hvb3NlIG9wdGltYWwgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzIGZvciB0aGF0IHVzZS4gIFRoZSB1c2FnZQordHlwZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKy5CUiAvZXRjL21rZTJmcy5jb25mIC4KK1RoZSB1c2VyIG1heSBzcGVjaWZ5IG9uZSBvciBtb3JlIHVzYWdlIHR5cGVzCit1c2luZyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0LgorLnNwCitJZiB0aGlzIG9wdGlvbiBpcyBpcyBub3Qgc3BlY2lmaWVkLAorLkIgbWtlMmZzCit3aWxsIHBpY2sgYSBzaW5nbGUgZGVmYXVsdCB1c2FnZSB0eXBlIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtIHRvCitiZSBjcmVhdGVkLiAgSWYgdGhlIGZpbGVzeXN0ZW0gc2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMyBtZWdhYnl0ZXMsCisuQiBta2UyZnMKK3dpbGwgdXNlIHRoZSBmaWxlc3lzdGVtIHR5cGUKKy5JUiBmbG9wcHkgLgorSWYgdGhlIGZpbGVzeXN0ZW0gc2l6ZSBpcyBncmVhdGVyIHRoYW4gMyBidXQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCis1MTIgbWVnYWJ5dGVzLAorLkJSIG1rZTJmcyAoOCkKK3dpbGwgdXNlIHRoZSBmaWxlc3lzdGVtIHR5cGUKKy5JUiBzbWFsbCAuCitJZiB0aGUgZmlsZXN5c3RlbSBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA0IHRlcmFieXRlcyBidXQgbGVzcyB0aGFuCisxNiB0ZXJhYnl0ZXMsCisuQlIgbWtlMmZzICg4KQord2lsbCB1c2UgdGhlIGZpbGVzeXN0ZW0gdHlwZQorLklSIGJpZyAuCitJZiB0aGUgZmlsZXN5c3RlbSBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxNiB0ZXJhYnl0ZXMsCisuQlIgbWtlMmZzICg4KQord2lsbCB1c2UgdGhlIGZpbGVzeXN0ZW0gdHlwZQorLklSIGh1Z2UgLgorT3RoZXJ3aXNlLAorLkJSIG1rZTJmcyAoOCkKK3dpbGwgdXNlIHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gdHlwZQorLklSIGRlZmF1bHQgLgorLlRQCisuQkkgXC1VICIgVVVJRCIKK0NyZWF0ZSB0aGUgZmlsZXN5c3RlbSB3aXRoIHRoZSBzcGVjaWZpZWQgVVVJRC4KKy5UUAorLkIgXC12CitWZXJib3NlIGV4ZWN1dGlvbi4KKy5UUAorLkIgXC1WCitQcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YKKy5CIG1rZTJmcworYW5kIGV4aXQuCisuU0ggRU5WSVJPTk1FTlQKKy5UUAorLkJJIE1LRTJGU19TWU5DCitJZiBzZXQgdG8gbm9uLXplcm8gaW50ZWdlciB2YWx1ZSwgaXRzIHZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBvZnRlbgorLkJSIHN5bmMgKDIpCitpcyBjYWxsZWQgZHVyaW5nIGlub2RlIHRhYmxlIGluaXRpYWxpemF0aW9uLgorLlRQCisuQkkgTUtFMkZTX0NPTkZJRworRGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoc2VlCisuQlIgbWtlMmZzLmNvbmYgKDUpKS4KKy5UUAorLkJJIE1LRTJGU19GSVJTVF9NRVRBX0JHCitJZiBzZXQgdG8gbm9uLXplcm8gaW50ZWdlciB2YWx1ZSwgaXRzIHZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGZpcnN0IG1ldGEKK2Jsb2NrIGdyb3VwLiBUaGlzIGlzIG1vc3RseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorLlRQCisuQkkgTUtFMkZTX0RFVklDRV9TRUNUU0laRQorSWYgc2V0IHRvIG5vbi16ZXJvIGludGVnZXIgdmFsdWUsIGl0cyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBwaHlzaWNhbAorc2VjdG9yIHNpemUgb2YgdGhlCisuSVIgZGV2aWNlIC4KKy5UUAorLkJJIE1LRTJGU19TS0lQX0NIRUNLX01TRworSWYgc2V0LCBkbyBub3Qgc2hvdyB0aGUgbWVzc2FnZSBvZiBmaWxlc3lzdGVtIGF1dG9tYXRpYyBjaGVjayBjYXVzZWQgYnkKK21vdW50IGNvdW50IG9yIGNoZWNrIGludGVydmFsLgorLlNIIEFVVEhPUgorVGhpcyB2ZXJzaW9uIG9mCisuQiBta2UyZnMKK2hhcyBiZWVuIHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4uCisuU0ggQlVHUworLkIgbWtlMmZzCithY2NlcHRzIHRoZQorLkIgXC1mCitvcHRpb24gYnV0IGN1cnJlbnRseSBpZ25vcmVzIGl0IGJlY2F1c2UgdGhlIHNlY29uZAorZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudHMgeWV0LgorLmJyCitUaGVyZSBtYXkgYmUgb3RoZXIgb25lcy4gIFBsZWFzZSwgcmVwb3J0IHRoZW0gdG8gdGhlIGF1dGhvci4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIG1rZTJmcworaXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCBTRUUgQUxTTworLkJSIG1rZTJmcy5jb25mICg1KSwKKy5CUiBiYWRibG9ja3MgKDgpLAorLkJSIGR1bXBlMmZzICg4KSwKKy5CUiBlMmZzY2sgKDgpLAorLkJSIHR1bmUyZnMgKDgpLAorLkJSIGV4dDQgKDUpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuYyBiL2UyZnNwcm9ncy9taXNjL21rZTJmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzNkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuYwpAQCAtMCwwICsxLDI3NTQgQEAKKy8qCisgKiBta2UyZnMuYyAtIE1ha2UgYSBleHQyZnMgZmlsZXN5c3RlbS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisgKiAJMjAwMywgMjAwNCwgMjAwNSBieSBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworLyogVXNhZ2U6IG1rZTJmcyBbb3B0aW9uc10gZGV2aWNlCisgKgorICogVGhlIGRldmljZSBtYXkgYmUgYSBibG9jayBkZXZpY2Ugb3IgYSBpbWFnZSBvZiBvbmUsIGJ1dCB0aGlzIGlzbid0CisgKiBlbmZvcmNlZCAoYnV0IGl0J3Mgbm90IG11Y2ggZnVuIG9uIGEgY2hhcmFjdGVyIGRldmljZSA6LSkuCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIFBBVEhfTUFYIGluIFNvbGFyaXMgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxibGtpZC9ibGtpZC5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzUC5oIgorI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAicHJvZl9lcnIuaCIKKyNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKworI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKKworI2RlZmluZSBNQVhfMzJfTlVNICgoKCh1bnNpZ25lZCBsb25nIGxvbmcpIDEpIDw8IDMyKSAtIDEpCisKKyNpZm5kZWYgX19zcGFyY19fCisjZGVmaW5lIFpBUF9CT09UQkxPQ0sKKyNlbmRpZgorCisjaWZuZGVmIFJPT1RfU1lTQ09ORkRJUgorI2RlZmluZSBST09UX1NZU0NPTkZESVIgIi9ldGMiCisjZW5kaWYKKworI2RlZmluZSBESVNDQVJEX1NURVBfTUIJCSgyMDQ4KQorCitleHRlcm4gaW50IGlzYXR0eShpbnQpOworZXh0ZXJuIEZJTEUgKmZwb3Blbihjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKm1vZGUpOworCitzdGF0aWMgY29uc3QgY2hhciAqIHByb2dyYW1fbmFtZSA9ICJta2UyZnMiOworc3RhdGljIGNvbnN0IGNoYXIgKiBkZXZpY2VfbmFtZSAvKiA9IE5VTEwgKi87CisKKy8qIENvbW1hbmQgbGluZSBvcHRpb25zICovCitzdGF0aWMgaW50CWNmbGFnOworc3RhdGljIGludAl2ZXJib3NlOworc3RhdGljIGludAlxdWlldDsKK3N0YXRpYyBpbnQJc3VwZXJfb25seTsKK3N0YXRpYyBpbnQJZGlzY2FyZCA9IDE7CS8qIGF0dGVtcHQgdG8gZGlzY2FyZCBkZXZpY2UgYmVmb3JlIGZzIGNyZWF0aW9uICovCitzdGF0aWMgaW50CWRpcmVjdF9pbzsKK3N0YXRpYyBpbnQJZm9yY2U7CitzdGF0aWMgaW50CW5vYWN0aW9uOworc3RhdGljIHVpZF90CXJvb3RfdWlkOworc3RhdGljIGdpZF90CXJvb3RfZ2lkOworaW50CWpvdXJuYWxfc2l6ZTsKK2ludAlqb3VybmFsX2ZsYWdzOworc3RhdGljIGludAlsYXp5X2l0YWJsZV9pbml0Oworc3RhdGljIGNoYXIJKmJhZF9ibG9ja3NfZmlsZW5hbWUgPSBOVUxMOworc3RhdGljIF9fdTMyCWZzX3N0cmlkZTsKK3N0YXRpYyBpbnQJcXVvdGF0eXBlID0gLTE7ICAvKiBJbml0aWFsaXplIGJvdGggdXNlciBhbmQgZ3JvdXAgcXVvdGFzIGJ5IGRlZmF1bHQgKi8KKworc3RhdGljIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIGZzX3BhcmFtOworc3RhdGljIGNoYXIgKmZzX3V1aWQgPSBOVUxMOworc3RhdGljIGNoYXIgKmNyZWF0b3Jfb3M7CitzdGF0aWMgY2hhciAqdm9sdW1lX2xhYmVsOworc3RhdGljIGNoYXIgKm1vdW50X2RpcjsKK2NoYXIgKmpvdXJuYWxfZGV2aWNlOworc3RhdGljIGludCBzeW5jX2tsdWRnZTsJLyogU2V0IHVzaW5nIHRoZSBNS0UyRlNfU1lOQyBlbnYuIG9wdGlvbiAqLworc3RhdGljIGNoYXIgKipmc190eXBlczsKKworc3RhdGljIHByb2ZpbGVfdAlwcm9maWxlOworCitzdGF0aWMgaW50IHN5c19wYWdlX3NpemUgPSA0MDk2Oworc3RhdGljIGludCBsaW51eF92ZXJzaW9uX2NvZGUgPSAwOworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gIgorCSJbLUMgY2x1c3Rlci1zaXplXVxuXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gIgorCSJbLUogam91cm5hbC1vcHRpb25zXVxuIgorCSJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorCSJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisJIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdICIKKwkiWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG5cdFstTyBmZWF0dXJlWywuLi5dXSAiCisJIlstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKwkiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gIgorCSJbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtY291bnRdXG4iKSwKKwkJcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IGludF9sb2cyKHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcpCit7CisJaW50CWwgPSAwOworCisJYXJnID4+PSAxOworCXdoaWxlIChhcmcpIHsKKwkJbCsrOworCQlhcmcgPj49IDE7CisJfQorCXJldHVybiBsOworfQorCitzdGF0aWMgaW50IGludF9sb2cxMCh1bnNpZ25lZCBsb25nIGxvbmcgYXJnKQoreworCWludAlsOworCisJZm9yIChsPTA7IGFyZyA7IGwrKykKKwkJYXJnID0gYXJnIC8gMTA7CisJcmV0dXJuIGw7Cit9CisKKyNpZmRlZiBfX2xpbnV4X18KK3N0YXRpYyBpbnQgcGFyc2VfdmVyc2lvbl9udW1iZXIoY29uc3QgY2hhciAqcykKK3sKKwlpbnQJbWFqb3IsIG1pbm9yLCByZXY7CisJY2hhcgkqZW5kcHRyOworCWNvbnN0IGNoYXIgKmNwID0gczsKKworCWlmICghcykKKwkJcmV0dXJuIDA7CisJbWFqb3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJbWlub3IgPSBzdHJ0b2woY3AsICZlbmRwdHIsIDEwKTsKKwlpZiAoY3AgPT0gZW5kcHRyIHx8ICplbmRwdHIgIT0gJy4nKQorCQlyZXR1cm4gMDsKKwljcCA9IGVuZHB0ciArIDE7CisJcmV2ID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CisJaWYgKGNwID09IGVuZHB0cikKKwkJcmV0dXJuIDA7CisJcmV0dXJuICgoKChtYWpvciAqIDI1NikgKyBtaW5vcikgKiAyNTYpICsgcmV2KTsKK30KKyNlbmRpZgorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciByZWFkX2JiX2ZpbGUgYW5kIHRlc3RfZGlzaworICovCitzdGF0aWMgdm9pZCBpbnZhbGlkX2Jsb2NrKGV4dDJfZmlsc3lzIGZzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwgYmxrX3QgYmxrKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIiksIGJsayk7CisJcmV0dXJuOworfQorCisvKgorICogUmVhZHMgdGhlIGJhZCBibG9ja3MgbGlzdCBmcm9tIGEgZmlsZQorICovCitzdGF0aWMgdm9pZCByZWFkX2JiX2ZpbGUoZXh0Ml9maWxzeXMgZnMsIGJhZGJsb2Nrc19saXN0ICpiYl9saXN0LAorCQkJIGNvbnN0IGNoYXIgKmJhZF9ibG9ja3NfZmlsZSkKK3sKKwlGSUxFCQkqZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJZiA9IGZvcGVuKGJhZF9ibG9ja3NfZmlsZSwgInIiKTsKKwlpZiAoIWYpIHsKKwkJY29tX2VycigicmVhZF9iYWRfYmxvY2tzX2ZpbGUiLCBlcnJubywKKwkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuICVzIiksIGJhZF9ibG9ja3NfZmlsZSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX0ZJTEUoZnMsIGYsIGJiX2xpc3QsIGludmFsaWRfYmxvY2spOworCWZjbG9zZSAoZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9iYl9GSUxFIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIikpOworCQlleGl0KDEpOworCX0KK30KKworLyoKKyAqIFJ1bnMgdGhlIGJhZGJsb2NrcyBwcm9ncmFtIHRvIHRlc3QgdGhlIGRpc2sKKyAqLworc3RhdGljIHZvaWQgdGVzdF9kaXNrKGV4dDJfZmlsc3lzIGZzLCBiYWRibG9ja3NfbGlzdCAqYmJfbGlzdCkKK3sKKwlGSUxFCQkqZjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIJCWJ1ZlsxMDI0XTsKKworCXNwcmludGYoYnVmLCAiYmFkYmxvY2tzIC1iICVkIC1YICVzJXMlcyAlbGx1IiwgZnMtPmJsb2Nrc2l6ZSwKKwkJcXVpZXQgPyAiIiA6ICItcyAiLCAoY2ZsYWcgPiAxKSA/ICItdyAiIDogIiIsCisJCWZzLT5kZXZpY2VfbmFtZSwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpLTEpOworCWlmICh2ZXJib3NlKQorCQlwcmludGYoXygiUnVubmluZyBjb21tYW5kOiAlc1xuIiksIGJ1Zik7CisJZiA9IHBvcGVuKGJ1ZiwgInIiKTsKKwlpZiAoIWYpIHsKKwkJY29tX2VycigicG9wZW4iLCBlcnJubywKKwkJCV8oIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIpLCBidWYpOworCQlleGl0KDEpOworCX0KKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9GSUxFKGZzLCBmLCBiYl9saXN0LCBpbnZhbGlkX2Jsb2NrKTsKKwlwY2xvc2UoZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfcmVhZF9iYl9GSUxFIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIikpOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2JhZF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsIGJhZGJsb2Nrc19saXN0IGJiX2xpc3QpCit7CisJZGdycF90CQkJaTsKKwlibGtfdAkJCWo7CisJdW5zaWduZWQgCQltdXN0X2JlX2dvb2Q7CisJYmxrX3QJCQlibGs7CisJYmFkYmxvY2tzX2l0ZXJhdGUJYmJfaXRlcjsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlibGtfdAkJCWdyb3VwX2Jsb2NrOworCWludAkJCWdyb3VwOworCWludAkJCWdyb3VwX2JhZDsKKworCWlmICghYmJfbGlzdCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycyAqbXVzdCogYmUKKwkgKiBnb29kOyBpZiBub3QsIGFib3J0LgorCSAqLworCW11c3RfYmVfZ29vZCA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICsgMSArIGZzLT5kZXNjX2Jsb2NrczsKKwlmb3IgKGkgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsgaSA8PSBtdXN0X2JlX2dvb2Q7IGkrKykgeworCQlpZiAoZXh0MmZzX2JhZGJsb2Nrc19saXN0X3Rlc3QoYmJfbGlzdCwgaSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJCbG9jayAlZCBpbiBwcmltYXJ5ICIKKwkJCQkic3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIiksIGkpOworCQkJZnByaW50ZihzdGRlcnIsIF8oIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCAiCisJCQkJImluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIpLAorCQkJCWZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrLCBtdXN0X2JlX2dvb2QpOworCQkJZnB1dHMoXygiQWJvcnRpbmcuLi4uXG4iKSwgc3RkZXJyKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNlZSBpZiBhbnkgb2YgdGhlIGJhZCBibG9ja3MgYXJlIHNob3dpbmcgdXAgaW4gdGhlIGJhY2t1cAorCSAqIHN1cGVyYmxvY2tzIGFuZC9vciBncm91cCBkZXNjcmlwdG9ycy4gIElmIHNvLCBpc3N1ZSBhCisJICogd2FybmluZyBhbmQgYWRqdXN0IHRoZSBibG9jayBjb3VudHMgYXBwcm9wcmlhdGVseS4KKwkgKi8KKwlncm91cF9ibG9jayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrICsKKwkJZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwlmb3IgKGkgPSAxOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlncm91cF9iYWQgPSAwOworCQlmb3IgKGo9MDsgaiA8IGZzLT5kZXNjX2Jsb2NrcysxOyBqKyspIHsKKwkJCWlmIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYl9saXN0LAorCQkJCQkJICAgICAgIGdyb3VwX2Jsb2NrICsgaikpIHsKKwkJCQlpZiAoIWdyb3VwX2JhZCkKKwkJCQkJZnByaW50ZihzdGRlcnIsCitfKCJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIgliYWQgYmxvY2tzLlxuXG4iKSwKKwkJCQkJCWdyb3VwX2Jsb2NrKTsKKwkJCQlncm91cF9iYWQrKzsKKwkJCQlncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBncm91cF9ibG9jaytqKTsKKwkJCQlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncm91cCkgKyAxKTsKKwkJCQlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCQkJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9hZGQoZnMtPnN1cGVyLCAxKTsKKwkJCX0KKwkJfQorCQlncm91cF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisKKwkvKgorCSAqIE1hcmsgYWxsIHRoZSBiYWQgYmxvY2tzIGFzIHVzZWQuLi4KKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbihiYl9saXN0LCAmYmJfaXRlcik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfYmFkYmxvY2tzX2xpc3RfaXRlcmF0ZV9iZWdpbiIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIikpOworCQlleGl0KDEpOworCX0KKwl3aGlsZSAoZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGUoYmJfaXRlciwgJmJsaykpCisJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgRVhUMkZTX0IyQyhmcywgYmxrKSk7CisJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2l0ZXJhdGVfZW5kKGJiX2l0ZXIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9pbm9kZV90YWJsZXMoZXh0Ml9maWxzeXMgZnMsIGludCBsYXp5X2ZsYWcsIGludCBpdGFibGVfemVyb2VkKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJYmxrOworCWRncnBfdAkJaTsKKwlpbnQJCW51bTsKKwlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworCisJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdChmcywgJnByb2dyZXNzLAorCQkJCSAgICAgXygiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIpLAorCQkJCSAgICAgZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfdXBkYXRlKGZzLCAmcHJvZ3Jlc3MsIGkpOworCisJCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpOworCQludW0gPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKworCQlpZiAobGF6eV9mbGFnKQorCQkJbnVtID0gZXh0MmZzX2Rpdl9jZWlsKChmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAtCisJCQkJCSAgICAgICBleHQyZnNfYmdfaXRhYmxlX3VudXNlZChmcywgaSkpICoKKwkJCQkJICAgICAgRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlciksCisJCQkJCSAgICAgIEVYVDJfQkxPQ0tfU0laRShmcy0+c3VwZXIpKTsKKwkJaWYgKCFsYXp5X2ZsYWcgfHwgaXRhYmxlX3plcm9lZCkgeworCQkJLyogVGhlIGtlcm5lbCBkb2Vzbid0IG5lZWQgdG8gemVybyB0aGUgaXRhYmxlIGJsb2NrcyAqLworCQkJZXh0MmZzX2JnX2ZsYWdzX3NldChmcywgaSwgRVhUMl9CR19JTk9ERV9aRVJPRUQpOworCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGkpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc196ZXJvX2Jsb2NrczIoZnMsIGJsaywgbnVtLCAmYmxrLCAmbnVtKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIlxuQ291bGQgbm90IHdyaXRlICVkICIKKwkJCQkgICJibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIpLAorCQkJCW51bSwgYmxrLCBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoc3luY19rbHVkZ2UpIHsKKwkJCWlmIChzeW5jX2tsdWRnZSA9PSAxKQorCQkJCXN5bmMoKTsKKwkJCWVsc2UgaWYgKChpICUgc3luY19rbHVkZ2UpID09IDApCisJCQkJc3luYygpOworCQl9CisJfQorCWV4dDJmc196ZXJvX2Jsb2NrczIoMCwgMCwgMCwgMCwgMCk7CisJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfY2xvc2UoZnMsICZwcm9ncmVzcywKKwkJCQkgICAgICBfKCJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIikpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfcm9vdF9kaXIoZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90CQlyZXR2YWw7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisKKwlyZXR2YWwgPSBleHQyZnNfbWtkaXIoZnMsIEVYVDJfUk9PVF9JTk8sIEVYVDJfUk9PVF9JTk8sIDApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiZXh0MmZzX21rZGlyIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChyb290X3VpZCAhPSAwIHx8IHJvb3RfZ2lkICE9IDApIHsKKwkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoZnMsIEVYVDJfUk9PVF9JTk8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoImV4dDJmc19yZWFkX2lub2RlIiwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlpbm9kZS5pX3VpZCA9IHJvb3RfdWlkOworCQlleHQyZnNfc2V0X2lfdWlkX2hpZ2goaW5vZGUsIHJvb3RfdWlkID4+IDE2KTsKKwkJaW5vZGUuaV9naWQgPSByb290X2dpZDsKKwkJZXh0MmZzX3NldF9pX2dpZF9oaWdoKGlub2RlLCByb290X2dpZCA+PiAxNik7CisKKwkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShmcywgRVhUMl9ST09UX0lOTywgJmlub2RlKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiZXh0MmZzX3dyaXRlX2lub2RlIiwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIndoaWxlIHNldHRpbmcgcm9vdCBpbm9kZSBvd25lcnNoaXAiKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfbG9zdF9hbmRfZm91bmQoZXh0Ml9maWxzeXMgZnMpCit7CisJdW5zaWduZWQgaW50CQlscGZfc2l6ZSA9IDA7CisJZXJyY29kZV90CQlyZXR2YWw7CisJZXh0Ml9pbm9fdAkJaW5vOworCWNvbnN0IGNoYXIJCSpuYW1lID0gImxvc3QrZm91bmQiOworCWludAkJCWk7CisKKwlmcy0+dW1hc2sgPSAwNzc7CisJcmV0dmFsID0gZXh0MmZzX21rZGlyKGZzLCBFWFQyX1JPT1RfSU5PLCAwLCBuYW1lKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19ta2RpciIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIikpOworCQlleGl0KDEpOworCX0KKworCXJldHZhbCA9IGV4dDJmc19sb29rdXAoZnMsIEVYVDJfUk9PVF9JTk8sIG5hbWUsIHN0cmxlbihuYW1lKSwgMCwgJmlubyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyX2xvb2t1cCIsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChpPTE7IGkgPCBFWFQyX05ESVJfQkxPQ0tTOyBpKyspIHsKKwkJLyogRW5zdXJlIHRoYXQgbG9zdCtmb3VuZCBpcyBhdCBsZWFzdCAyIGJsb2Nrcywgc28gd2UgYWx3YXlzCisJCSAqIHRlc3QgbGFyZ2UgZW1wdHkgYmxvY2tzIGZvciBiaWctYmxvY2sgZmlsZXN5c3RlbXMuICAqLworCQlpZiAoKGxwZl9zaXplICs9IGZzLT5ibG9ja3NpemUpID49IDE2KjEwMjQgJiYKKwkJICAgIGxwZl9zaXplID49IDIgKiBmcy0+YmxvY2tzaXplKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGZzLCBpbm8pOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJleHQyZnNfZXhwYW5kX2RpciIsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVhdGVfYmFkX2Jsb2NrX2lub2RlKGV4dDJfZmlsc3lzIGZzLCBiYWRibG9ja3NfbGlzdCBiYl9saXN0KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlleHQyZnNfbWFya19pbm9kZV9iaXRtYXAyKGZzLT5pbm9kZV9tYXAsIEVYVDJfQkFEX0lOTyk7CisJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihmcywgRVhUMl9CQURfSU5PLCArMSwgMCk7CisJcmV0dmFsID0gZXh0MmZzX3VwZGF0ZV9iYl9pbm9kZShmcywgYmJfbGlzdCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfdXBkYXRlX2JiX2lub2RlIiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiKSk7CisJCWV4aXQoMSk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHJlc2VydmVfaW5vZGVzKGV4dDJfZmlsc3lzIGZzKQoreworCWV4dDJfaW5vX3QJaTsKKworCWZvciAoaSA9IEVYVDJfUk9PVF9JTk8gKyAxOyBpIDwgRVhUMl9GSVJTVF9JTk9ERShmcy0+c3VwZXIpOyBpKyspCisJCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoZnMsIGksICsxLCAwKTsKKwlleHQyZnNfbWFya19pYl9kaXJ0eShmcyk7Cit9CisKKyNkZWZpbmUgQlNEX0RJU0tNQUdJQyAgICgweDgyNTY0NTU3VUwpICAvKiBUaGUgZGlzayBtYWdpYyBudW1iZXIgKi8KKyNkZWZpbmUgQlNEX01BR0lDRElTSyAgICgweDU3NDU1NjgyVUwpICAvKiBUaGUgZGlzayBtYWdpYyBudW1iZXIgcmV2ZXJzZWQgKi8KKyNkZWZpbmUgQlNEX0xBQkVMX09GRlNFVCAgICAgICAgNjQKKworc3RhdGljIHZvaWQgemFwX3NlY3RvcihleHQyX2ZpbHN5cyBmcywgaW50IHNlY3QsIGludCBuc2VjdCkKK3sKKwljaGFyICpidWY7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBpbnQgKm1hZ2ljOworCisJYnVmID0gbWFsbG9jKDUxMipuc2VjdCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRmKF8oIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iKSwKKwkJICAgICAgIHNlY3QsIHNlY3QgKyBuc2VjdCAtIDEpOworCQlleGl0KDEpOworCX0KKworCWlmIChzZWN0ID09IDApIHsKKwkJLyogQ2hlY2sgZm9yIGEgQlNEIGRpc2tsYWJlbCwgYW5kIGRvbid0IGVyYXNlIGl0IGlmIHNvICovCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIDAsIC01MTIsIGJ1Zik7CisJCWlmIChyZXR2YWwpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIiksCisJCQkJZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJZWxzZSB7CisJCQltYWdpYyA9ICh1bnNpZ25lZCBpbnQgKikgKGJ1ZiArIEJTRF9MQUJFTF9PRkZTRVQpOworCQkJaWYgKCgqbWFnaWMgPT0gQlNEX0RJU0tNQUdJQykgfHwKKwkJCSAgICAoKm1hZ2ljID09IEJTRF9NQUdJQ0RJU0spKQorCQkJCXJldHVybjsKKwkJfQorCX0KKworCW1lbXNldChidWYsIDAsIDUxMipuc2VjdCk7CisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIDUxMik7CisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIHNlY3QsIC01MTIqbnNlY3QsIGJ1Zik7CisJaW9fY2hhbm5lbF9zZXRfYmxrc2l6ZShmcy0+aW8sIGZzLT5ibG9ja3NpemUpOworCWZyZWUoYnVmKTsKKwlpZiAocmV0dmFsKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIpLAorCQkJc2VjdCwgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2pvdXJuYWxfZGV2KGV4dDJfZmlsc3lzIGZzKQoreworCXN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgcHJvZ3Jlc3M7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY2hhcgkJCSpidWY7CisJYmxrNjRfdAkJCWJsaywgZXJyX2JsazsKKwlpbnQJCQljLCBjb3VudCwgZXJyX2NvdW50OworCisJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9qb3VybmFsX3N1cGVyYmxvY2soZnMsCisJCQkJICBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlciksIDAsICZidWYpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2VycigiY3JlYXRlX2pvdXJuYWxfZGV2IiwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoam91cm5hbF9mbGFncyAmIEVYVDJfTUtKT1VSTkFMX0xBWllJTklUKQorCQlnb3RvIHdyaXRlX3N1cGVyYmxvY2s7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19pbml0KGZzLCAmcHJvZ3Jlc3MsCisJCQkJICAgICBfKCJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiKSwKKwkJCQkgICAgIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSk7CisJYmxrID0gMDsKKwljb3VudCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWlmIChjb3VudCA+IDEwMjQpCisJCQljID0gMTAyNDsKKwkJZWxzZQorCQkJYyA9IGNvdW50OworCQlyZXR2YWwgPSBleHQyZnNfemVyb19ibG9ja3MyKGZzLCBibGssIGMsICZlcnJfYmxrLCAmZXJyX2NvdW50KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2VycigiY3JlYXRlX2pvdXJuYWxfZGV2IiwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgIgorCQkJCSAgIihibG9jayAlbGx1LCBjb3VudCAlZCkiKSwKKwkJCQllcnJfYmxrLCBlcnJfY291bnQpOworCQkJZXhpdCgxKTsKKwkJfQorCQlibGsgKz0gYzsKKwkJY291bnQgLT0gYzsKKwkJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfdXBkYXRlKGZzLCAmcHJvZ3Jlc3MsIGJsayk7CisJfQorCWV4dDJmc196ZXJvX2Jsb2NrczIoMCwgMCwgMCwgMCwgMCk7CisKKwlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLCBOVUxMKTsKK3dyaXRlX3N1cGVyYmxvY2s6CisJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sCisJCQkJCWZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrKzEsCisJCQkJCTEsIGJ1Zik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJjcmVhdGVfam91cm5hbF9kZXYiLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIpKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc3RhdHMoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnMgPSBmcy0+c3VwZXI7CisJY2hhciAJCQlidWZbODBdOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqb3M7CisJYmxrNjRfdAkJCWdyb3VwX2Jsb2NrOworCWRncnBfdAkJCWk7CisJaW50CQkJbmVlZCwgY29sX2xlZnQ7CisKKwlpZiAoZXh0MmZzX2Jsb2Nrc19jb3VudCgmZnNfcGFyYW0pICE9IGV4dDJmc19ibG9ja3NfY291bnQocykpCisJCWZwcmludGYoc3RkZXJyLCBfKCJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG5cbiIpLAorCQkgICAgICAgZXh0MmZzX2Jsb2Nrc19jb3VudCgmZnNfcGFyYW0pIC0gZXh0MmZzX2Jsb2Nrc19jb3VudChzKSk7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJc3RybmNweShidWYsIHMtPnNfdm9sdW1lX25hbWUsIHNpemVvZihzLT5zX3ZvbHVtZV9uYW1lKSk7CisJcHJpbnRmKF8oIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIpLCBidWYpOworCW9zID0gZTJwX29zMnN0cmluZyhmcy0+c3VwZXItPnNfY3JlYXRvcl9vcyk7CisJaWYgKG9zKQorCQlwcmludGYoXygiT1MgdHlwZTogJXNcbiIpLCBvcyk7CisJZnJlZShvcyk7CisJcHJpbnRmKF8oIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIpLCBmcy0+YmxvY2tzaXplLAorCQlzLT5zX2xvZ19ibG9ja19zaXplKTsKKwlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSkKKwkJcHJpbnRmKF8oIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIiksCisJCSAgICAgICBmcy0+YmxvY2tzaXplIDw8IGZzLT5jbHVzdGVyX3JhdGlvX2JpdHMsCisJCSAgICAgICBzLT5zX2xvZ19jbHVzdGVyX3NpemUpOworCWVsc2UKKwkJcHJpbnRmKF8oIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIpLCBFWFQyX0NMVVNURVJfU0laRShzKSwKKwkJICAgICAgIHMtPnNfbG9nX2NsdXN0ZXJfc2l6ZSk7CisJcHJpbnRmKF8oIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIpLAorCSAgICAgICBzLT5zX3JhaWRfc3RyaWRlLCBzLT5zX3JhaWRfc3RyaXBlX3dpZHRoKTsKKwlwcmludGYoXygiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIiksIHMtPnNfaW5vZGVzX2NvdW50LAorCSAgICAgICBleHQyZnNfYmxvY2tzX2NvdW50KHMpKTsKKwlwcmludGYoXygiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIiksCisJCWV4dDJmc19yX2Jsb2Nrc19jb3VudChzKSwKKwkgICAgICAgMTAwLjAgKiAgZXh0MmZzX3JfYmxvY2tzX2NvdW50KHMpIC8gZXh0MmZzX2Jsb2Nrc19jb3VudChzKSk7CisJcHJpbnRmKF8oIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIpLCBzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWlmIChyb290X3VpZCAhPSAwIHx8IHJvb3RfZ2lkICE9IDApCisJCXByaW50ZihfKCJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIiksIHJvb3RfdWlkLCByb290X2dpZCk7CisJaWYgKHMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykKKwkJcHJpbnRmKF8oIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iKSwKKwkJICAgICAgIChzLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgKyBmcy0+ZGVzY19ibG9ja3MpICoKKwkJICAgICAgIEVYVDJfREVTQ19QRVJfQkxPQ0socykgKiBzLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOworCWlmIChmcy0+Z3JvdXBfZGVzY19jb3VudCA+IDEpCisJCXByaW50ZihfKCIldSBibG9jayBncm91cHNcbiIpLCBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJZWxzZQorCQlwcmludGYoXygiJXUgYmxvY2sgZ3JvdXBcbiIpLCBmcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJaWYgKEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGZzLT5zdXBlciwKKwkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykpCisJCXByaW50ZihfKCIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIpLAorCQkgICAgICAgcy0+c19ibG9ja3NfcGVyX2dyb3VwLCBzLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCk7CisJZWxzZQorCQlwcmludGYoXygiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIiksCisJCSAgICAgICBzLT5zX2Jsb2Nrc19wZXJfZ3JvdXAsIHMtPnNfY2x1c3RlcnNfcGVyX2dyb3VwKTsKKwlwcmludGYoXygiJXUgaW5vZGVzIHBlciBncm91cFxuIiksIHMtPnNfaW5vZGVzX3Blcl9ncm91cCk7CisKKwlpZiAoZnMtPmdyb3VwX2Rlc2NfY291bnQgPT0gMSkgeworCQlwcmludGYoIlxuIik7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIiVzIiwgXygiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIpKTsKKwlncm91cF9ibG9jayA9IHMtPnNfZmlyc3RfZGF0YV9ibG9jazsKKwljb2xfbGVmdCA9IDA7CisJZm9yIChpID0gMTsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJZ3JvdXBfYmxvY2sgKz0gcy0+c19ibG9ja3NfcGVyX2dyb3VwOworCQlpZiAoIWV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpKQorCQkJY29udGludWU7CisJCWlmIChpICE9IDEpCisJCQlwcmludGYoIiwgIik7CisJCW5lZWQgPSBpbnRfbG9nMTAoZ3JvdXBfYmxvY2spICsgMjsKKwkJaWYgKG5lZWQgPiBjb2xfbGVmdCkgeworCQkJcHJpbnRmKCJcblx0Iik7CisJCQljb2xfbGVmdCA9IDcyOworCQl9CisJCWNvbF9sZWZ0IC09IG5lZWQ7CisJCXByaW50ZigiJWxsdSIsIGdyb3VwX2Jsb2NrKTsKKwl9CisJcHJpbnRmKCJcblxuIik7Cit9CisKKy8qCisgKiBTZXQgdGhlIFNfQ1JFQVRPUl9PUyBmaWVsZC4gIFJldHVybiB0cnVlIGlmIE9TIGlzIGtub3duLAorICogb3RoZXJ3aXNlLCAwLgorICovCitzdGF0aWMgaW50IHNldF9vcyhzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IsIGNoYXIgKm9zKQoreworCWlmIChpc2RpZ2l0ICgqb3MpKQorCQlzYi0+c19jcmVhdG9yX29zID0gYXRvaSAob3MpOworCWVsc2UgaWYgKHN0cmNhc2VjbXAob3MsICJsaW51eCIpID09IDApCisJCXNiLT5zX2NyZWF0b3Jfb3MgPSBFWFQyX09TX0xJTlVYOworCWVsc2UgaWYgKHN0cmNhc2VjbXAob3MsICJHTlUiKSA9PSAwIHx8IHN0cmNhc2VjbXAob3MsICJodXJkIikgPT0gMCkKKwkJc2ItPnNfY3JlYXRvcl9vcyA9IEVYVDJfT1NfSFVSRDsKKwllbHNlIGlmIChzdHJjYXNlY21wKG9zLCAiZnJlZWJzZCIpID09IDApCisJCXNiLT5zX2NyZWF0b3Jfb3MgPSBFWFQyX09TX0ZSRUVCU0Q7CisJZWxzZSBpZiAoc3RyY2FzZWNtcChvcywgImxpdGVzIikgPT0gMCkKKwkJc2ItPnNfY3JlYXRvcl9vcyA9IEVYVDJfT1NfTElURVM7CisJZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBQQVRIX1NFVCAiUEFUSD0vc2JpbiIKKworc3RhdGljIHZvaWQgcGFyc2VfZXh0ZW5kZWRfb3B0cyhzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqcGFyYW0sCisJCQkJY29uc3QgY2hhciAqb3B0cykKK3sKKwljaGFyCSpidWYsICp0b2tlbiwgKm5leHQsICpwLCAqYXJnLCAqYmFkb3B0ID0gMDsKKwlpbnQJbGVuOworCWludAlyX3VzYWdlID0gMDsKKworCWxlbiA9IHN0cmxlbihvcHRzKTsKKwlidWYgPSBtYWxsb2MobGVuKzEpOworCWlmICghYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCXN0cmNweShidWYsIG9wdHMpOworCWZvciAodG9rZW4gPSBidWY7IHRva2VuICYmICp0b2tlbjsgdG9rZW4gPSBuZXh0KSB7CisJCXAgPSBzdHJjaHIodG9rZW4sICcsJyk7CisJCW5leHQgPSAwOworCQlpZiAocCkgeworCQkJKnAgPSAwOworCQkJbmV4dCA9IHArMTsKKwkJfQorCQlhcmcgPSBzdHJjaHIodG9rZW4sICc9Jyk7CisJCWlmIChhcmcpIHsKKwkJCSphcmcgPSAwOworCQkJYXJnKys7CisJCX0KKwkJaWYgKHN0cmNtcCh0b2tlbiwgImRlc2Mtc2l6ZSIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh0b2tlbiwgImRlc2Nfc2l6ZSIpID09IDApIHsKKwkJCWludCBkZXNjX3NpemU7CisKKwkJCWlmICghKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCQkgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIpLCB0b2tlbik7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHBhcmFtLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MgIT0gMCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iKSwKKwkJCQkJdG9rZW4sIHBhcmFtLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWJhZG9wdCA9IHRva2VuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGVzY19zaXplID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCB8fCAoZGVzY19zaXplICYgKGRlc2Nfc2l6ZSAtIDEpKSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIGRlc2Nfc2l6ZTogJyVzJ1xuIiksIGFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcGFyYW0tPnNfZGVzY19zaXplID0gZGVzY19zaXplOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIm1tcF91cGRhdGVfaW50ZXJ2YWwiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXBhcmFtLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJzdHJpZGUiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXBhcmFtLT5zX3JhaWRfc3RyaWRlID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWlmICgqcCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAic3RyaXBlLXdpZHRoIikgPT0gMCB8fAorCQkJICAgc3RyY21wKHRva2VuLCAic3RyaXBlX3dpZHRoIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJYmFkb3B0ID0gdG9rZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJhbS0+c19yYWlkX3N0cmlwZV93aWR0aCA9IHN0cnRvdWwoYXJnLCAmcCwgMCk7CisJCQlpZiAoKnApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJyZXNpemUiKSkgeworCQkJYmxrNjRfdCByZXNpemU7CisJCQl1bnNpZ25lZCBsb25nIGJwZywgcnN2X2dyb3VwczsKKwkJCXVuc2lnbmVkIGxvbmcgZ3JvdXBfZGVzY19jb3VudCwgZGVzY19ibG9ja3M7CisJCQl1bnNpZ25lZCBpbnQgZ2RwYiwgYmxvY2tzaXplOworCQkJaW50IHJzdl9nZGI7CisKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWJhZG9wdCA9IHRva2VuOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXNpemUgPSBwYXJzZV9udW1fYmxvY2tzMihhcmcsCisJCQkJCQkgICBwYXJhbS0+c19sb2dfYmxvY2tfc2l6ZSk7CisKKwkJCWlmIChyZXNpemUgPT0gMCkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQlfKCJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAocmVzaXplIDw9IGV4dDJmc19ibG9ja3NfY291bnQocGFyYW0pKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQkJCV8oIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgIgorCQkJCQkgICJ0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iKSk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUocGFyYW0pOworCQkJYnBnID0gcGFyYW0tPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJCWlmICghYnBnKQorCQkJCWJwZyA9IGJsb2Nrc2l6ZSAqIDg7CisJCQlnZHBiID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhwYXJhbSk7CisJCQlncm91cF9kZXNjX2NvdW50ID0gKF9fdTMyKSBleHQyZnNfZGl2NjRfY2VpbCgKKwkJCQlleHQyZnNfYmxvY2tzX2NvdW50KHBhcmFtKSwgYnBnKTsKKwkJCWRlc2NfYmxvY2tzID0gKGdyb3VwX2Rlc2NfY291bnQgKworCQkJCSAgICAgICBnZHBiIC0gMSkgLyBnZHBiOworCQkJcnN2X2dyb3VwcyA9IGV4dDJmc19kaXY2NF9jZWlsKHJlc2l6ZSwgYnBnKTsKKwkJCXJzdl9nZGIgPSBleHQyZnNfZGl2X2NlaWwocnN2X2dyb3VwcywgZ2RwYikgLQorCQkJCWRlc2NfYmxvY2tzOworCQkJaWYgKHJzdl9nZGIgPiAoaW50KSBFWFQyX0FERFJfUEVSX0JMT0NLKHBhcmFtKSkKKwkJCQlyc3ZfZ2RiID0gRVhUMl9BRERSX1BFUl9CTE9DSyhwYXJhbSk7CisKKwkJCWlmIChyc3ZfZ2RiID4gMCkgeworCQkJCWlmIChwYXJhbS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJXygiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIikpOworCQkJCQlmcmVlKGJ1Zik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCXBhcmFtLT5zX2ZlYXR1cmVfY29tcGF0IHw9CisJCQkJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFOworCisJCQkJcGFyYW0tPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyA9IHJzdl9nZGI7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInRlc3RfZnMiKSkgeworCQkJcGFyYW0tPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19URVNUX0ZJTEVTWVM7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgImxhenlfaXRhYmxlX2luaXQiKSkgeworCQkJaWYgKGFyZykKKwkJCQlsYXp5X2l0YWJsZV9pbml0ID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCWVsc2UKKwkJCQlsYXp5X2l0YWJsZV9pbml0ID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAibGF6eV9qb3VybmFsX2luaXQiKSkgeworCQkJaWYgKGFyZykKKwkJCQlqb3VybmFsX2ZsYWdzIHw9IHN0cnRvdWwoYXJnLCAmcCwgMCkgPworCQkJCQkJRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQgOiAwOworCQkJZWxzZQorCQkJCWpvdXJuYWxfZmxhZ3MgfD0gRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQ7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInJvb3Rfb3duZXIiKSkgeworCQkJaWYgKGFyZykgeworCQkJCXJvb3RfdWlkID0gc3RydG91bChhcmcsICZwLCAwKTsKKwkJCQlpZiAoKnAgIT0gJzonKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJXygiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iKSwKKwkJCQkJCWFyZyk7CisJCQkJCXJfdXNhZ2UrKzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXArKzsKKwkJCQlyb290X2dpZCA9IHN0cnRvdWwocCwgJnAsIDApOworCQkJCWlmICgqcCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCV8oIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIiksCisJCQkJCQlhcmcpOworCQkJCQlyX3VzYWdlKys7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcm9vdF91aWQgPSBnZXR1aWQoKTsKKwkJCQlyb290X2dpZCA9IGdldGdpZCgpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJkaXNjYXJkIikpIHsKKwkJCWRpc2NhcmQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJub2Rpc2NhcmQiKSkgeworCQkJZGlzY2FyZCA9IDA7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInF1b3RhdHlwZSIpKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQliYWRvcHQgPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RybmNtcChhcmcsICJ1c3IiLCAzKSkgeworCQkJCXF1b3RhdHlwZSA9IDA7CisJCQl9IGVsc2UgaWYgKCFzdHJuY21wKGFyZywgImdycCIsIDMpKSB7CisJCQkJcXVvdGF0eXBlID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJfdXNhZ2UrKzsKKwkJCWJhZG9wdCA9IHRva2VuOworCQl9CisJfQorCWlmIChyX3VzYWdlKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJcbkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuXG4iCisJCQkiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgIgorCQkJImFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorCQkJIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cblxuIgorCQkJIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorCQkJIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorCQkJIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorCQkJIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKwkJCSJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisJCQkiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKwkJCSJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisJCQkiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorCQkJIlx0dGVzdF9mc1xuIgorCQkJIlx0ZGlzY2FyZFxuIgorCQkJIlx0bm9kaXNjYXJkXG4iCisJCQkiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG5cbiIpLAorCQkJYmFkb3B0ID8gYmFkb3B0IDogIiIpOworCQlmcmVlKGJ1Zik7CisJCWV4aXQoMSk7CisJfQorCWlmIChwYXJhbS0+c19yYWlkX3N0cmlkZSAmJgorCSAgICAocGFyYW0tPnNfcmFpZF9zdHJpcGVfd2lkdGggJSBwYXJhbS0+c19yYWlkX3N0cmlkZSkgIT0gMCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlxuV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gIgorCQkJCSAgIm11bHRpcGxlIG9mIHN0cmlkZSAldS5cblxuIiksCisJCQlwYXJhbS0+c19yYWlkX3N0cmlwZV93aWR0aCwgcGFyYW0tPnNfcmFpZF9zdHJpZGUpOworCisJZnJlZShidWYpOworfQorCitzdGF0aWMgX191MzIgb2tfZmVhdHVyZXNbM10gPSB7CisJLyogQ29tcGF0ICovCisJRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCB8CisJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFIHwKKwkJRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVggfAorCQlFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSLAorCS8qIEluY29tcGF0ICovCisJRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfAorCQlFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UU3wKKwkJRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWfAorCQlFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CR3wKKwkJRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkd8CisJCUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQsCisJLyogUi9PIGNvbXBhdCAqLworCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEV8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFfAorCQlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUnwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTXwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQ3wKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQXwKKyNlbmRpZgorCQkwCit9OworCisKK3N0YXRpYyB2b2lkIHN5bnRheF9lcnJfcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBsb25nIGVyciwgaW50IGxpbmVfbnVtKQoreworCWZwcmludGYoc3RkZXJyLAorCQlfKCJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG5cdCVzXG4iKSwKKwkJZmlsZW5hbWUsIGxpbmVfbnVtLCBlcnJvcl9tZXNzYWdlKGVycikpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfZm5bXSA9IHsgUk9PVF9TWVNDT05GRElSICIvbWtlMmZzLmNvbmYiLCAwIH07CisKK3N0YXRpYyB2b2lkIGVkaXRfZmVhdHVyZShjb25zdCBjaGFyICpzdHIsIF9fdTMyICpjb21wYXRfYXJyYXkpCit7CisJaWYgKCFzdHIpCisJCXJldHVybjsKKworCWlmIChlMnBfZWRpdF9mZWF0dXJlKHN0ciwgY29tcGF0X2FycmF5LCBva19mZWF0dXJlcykpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIiksCisJCQlzdHIpOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgZWRpdF9tbnRvcHRzKGNvbnN0IGNoYXIgKnN0ciwgX191MzIgKm1udG9wdHMpCit7CisJaWYgKCFzdHIpCisJCXJldHVybjsKKworCWlmIChlMnBfZWRpdF9tbnRvcHRzKHN0ciwgbW50b3B0cywgfjApKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iKSwKKwkJCXN0cik7CisJCWV4aXQoMSk7CisJfQorfQorCitzdHJ1Y3Qgc3RyX2xpc3QgeworCWNoYXIgKipsaXN0OworCWludCBudW07CisJaW50IG1heDsKK307CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5pdF9saXN0KHN0cnVjdCBzdHJfbGlzdCAqc2wpCit7CisJc2wtPm51bSA9IDA7CisJc2wtPm1heCA9IDA7CisJc2wtPmxpc3QgPSBtYWxsb2MoKHNsLT5tYXgrMSkgKiBzaXplb2YoY2hhciAqKSk7CisJaWYgKCFzbC0+bGlzdCkKKwkJcmV0dXJuIEVOT01FTTsKKwlzbC0+bGlzdFswXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgcHVzaF9zdHJpbmcoc3RydWN0IHN0cl9saXN0ICpzbCwgY29uc3QgY2hhciAqc3RyKQoreworCWNoYXIgKipuZXdfbGlzdDsKKworCWlmIChzbC0+bnVtID49IHNsLT5tYXgpIHsKKwkJc2wtPm1heCArPSAyOworCQluZXdfbGlzdCA9IHJlYWxsb2Moc2wtPmxpc3QsIChzbC0+bWF4KzEpICogc2l6ZW9mKGNoYXIgKikpOworCQlpZiAoIW5ld19saXN0KQorCQkJcmV0dXJuIEVOT01FTTsKKwkJc2wtPmxpc3QgPSBuZXdfbGlzdDsKKwl9CisJc2wtPmxpc3Rbc2wtPm51bV0gPSBtYWxsb2Moc3RybGVuKHN0cikrMSk7CisJaWYgKHNsLT5saXN0W3NsLT5udW1dID09IDApCisJCXJldHVybiBFTk9NRU07CisJc3RyY3B5KHNsLT5saXN0W3NsLT5udW1dLCBzdHIpOworCXNsLT5udW0rKzsKKwlzbC0+bGlzdFtzbC0+bnVtXSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0cl9saXN0KGNoYXIgKipsaXN0KQoreworCWNoYXIgKipjcHA7CisKKwlmb3IgKGNwcCA9IGxpc3Q7ICpjcHA7IGNwcCsrKSB7CisJCXByaW50ZigiJyVzJyIsICpjcHApOworCQlpZiAoY3BwWzFdKQorCQkJZnB1dHMoIiwgIiwgc3Rkb3V0KTsKKwl9CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworLyoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBwcm9maWxlIGhhcyB0aGUgZ2l2ZW4gc3Vic2VjdGlvbgorICovCitzdGF0aWMgaW50IHByb2ZpbGVfaGFzX3N1YnNlY3Rpb24ocHJvZmlsZV90IHByb2YsIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCQkJICBjb25zdCBjaGFyICpzdWJzZWN0aW9uKQoreworCXZvaWQJCQkqc3RhdGU7CisJY29uc3QgY2hhcgkJKm5hbWVzWzRdOworCWNoYXIJCQkqbmFtZTsKKwlpbnQJCQlyZXQgPSAwOworCisJbmFtZXNbMF0gPSBzZWN0aW9uOworCW5hbWVzWzFdID0gc3Vic2VjdGlvbjsKKwluYW1lc1syXSA9IDA7CisKKwlpZiAocHJvZmlsZV9pdGVyYXRvcl9jcmVhdGUocHJvZiwgbmFtZXMsCisJCQkJICAgIFBST0ZJTEVfSVRFUl9MSVNUX1NFQ1RJT04gfAorCQkJCSAgICBQUk9GSUxFX0lURVJfUkVMQVRJT05TX09OTFksICZzdGF0ZSkpCisJCXJldHVybiAwOworCisJaWYgKChwcm9maWxlX2l0ZXJhdG9yKCZzdGF0ZSwgJm5hbWUsIDApID09IDApICYmIG5hbWUpIHsKKwkJZnJlZShuYW1lKTsKKwkJcmV0ID0gMTsKKwl9CisKKwlwcm9maWxlX2l0ZXJhdG9yX2ZyZWUoJnN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqKnBhcnNlX2ZzX3R5cGUoY29uc3QgY2hhciAqZnNfdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICp1c2FnZV90eXBlcywKKwkJCSAgICBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IsCisJCQkgICAgYmxrNjRfdCBmc19ibG9ja3NfY291bnQsCisJCQkgICAgY2hhciAqcHJvZ25hbWUpCit7CisJY29uc3QgY2hhcgkqZXh0X3R5cGUgPSAwOworCWNoYXIJCSpwYXJzZV9zdHI7CisJY2hhcgkJKnByb2ZpbGVfdHlwZSA9IDA7CisJY2hhcgkJKmNwLCAqdDsKKwljb25zdCBjaGFyCSpzaXplX3R5cGU7CisJc3RydWN0IHN0cl9saXN0CWxpc3Q7CisJdW5zaWduZWQgbG9uZyBsb25nIG1lZzsKKwlpbnQJCWlzX2h1cmQgPSAwOworCisJaWYgKGluaXRfbGlzdCgmbGlzdCkpCisJCXJldHVybiAwOworCisJaWYgKGNyZWF0b3Jfb3MgJiYgKCFzdHJjYXNlY21wKGNyZWF0b3Jfb3MsICJHTlUiKSB8fAorCQkJICAgIXN0cmNhc2VjbXAoY3JlYXRvcl9vcywgImh1cmQiKSkpCisJCWlzX2h1cmQgPSAxOworCisJaWYgKGZzX3R5cGUpCisJCWV4dF90eXBlID0gZnNfdHlwZTsKKwllbHNlIGlmIChpc19odXJkKQorCQlleHRfdHlwZSA9ICJleHQyIjsKKwllbHNlIGlmICghc3RyY21wKHByb2dyYW1fbmFtZSwgIm1rZTNmcyIpKQorCQlleHRfdHlwZSA9ICJleHQzIjsKKwllbHNlIGlmICghc3RyY21wKHByb2dyYW1fbmFtZSwgIm1rZTRmcyIpKQorCQlleHRfdHlwZSA9ICJleHQ0IjsKKwllbHNlIGlmIChwcm9nbmFtZSkgeworCQlleHRfdHlwZSA9IHN0cnJjaHIocHJvZ25hbWUsICcvJyk7CisJCWlmIChleHRfdHlwZSkKKwkJCWV4dF90eXBlKys7CisJCWVsc2UKKwkJCWV4dF90eXBlID0gcHJvZ25hbWU7CisKKwkJaWYgKCFzdHJuY21wKGV4dF90eXBlLCAibWtmcy4iLCA1KSkgeworCQkJZXh0X3R5cGUgKz0gNTsKKwkJCWlmIChleHRfdHlwZVswXSA9PSAwKQorCQkJCWV4dF90eXBlID0gMDsKKwkJfSBlbHNlCisJCQlleHRfdHlwZSA9IDA7CisJfQorCisJaWYgKCFleHRfdHlwZSkgeworCQlwcm9maWxlX2dldF9zdHJpbmcocHJvZmlsZSwgImRlZmF1bHRzIiwgImZzX3R5cGUiLCAwLAorCQkJCSAgICJleHQyIiwgJnByb2ZpbGVfdHlwZSk7CisJCWV4dF90eXBlID0gcHJvZmlsZV90eXBlOworCQlpZiAoIXN0cmNtcChleHRfdHlwZSwgImV4dDIiKSAmJiAoam91cm5hbF9zaXplICE9IDApKQorCQkJZXh0X3R5cGUgPSAiZXh0MyI7CisJfQorCisKKwlpZiAoIXByb2ZpbGVfaGFzX3N1YnNlY3Rpb24ocHJvZmlsZSwgImZzX3R5cGVzIiwgZXh0X3R5cGUpICYmCisJICAgIHN0cmNtcChleHRfdHlwZSwgImV4dDIiKSkgeworCQlwcmludGYoXygiXG5Zb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAiCisJCQkgIiVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIpLCBleHRfdHlwZSk7CisJCWlmICghc3RyY21wKGV4dF90eXBlLCAiZXh0MyIpIHx8ICFzdHJjbXAoZXh0X3R5cGUsICJleHQ0IikgfHwKKwkJICAgICFzdHJjbXAoZXh0X3R5cGUsICJleHQ0ZGV2IikpIHsKKwkJCXByaW50ZigiJXMiLCBfKCJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuICIKKwkJCQkgICAgICAgInVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cblxuIikpOworCQl9CisJCWlmICghZm9yY2UpIHsKKwkJCXByaW50ZigiJXMiLCBfKCJBYm9ydGluZy4uLlxuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCW1lZyA9ICgxMDI0ICogMTAyNCkgLyBFWFQyX0JMT0NLX1NJWkUoc2IpOworCWlmIChmc19ibG9ja3NfY291bnQgPCAzICogbWVnKQorCQlzaXplX3R5cGUgPSAiZmxvcHB5IjsKKwllbHNlIGlmIChmc19ibG9ja3NfY291bnQgPCA1MTIgKiBtZWcpCisJCXNpemVfdHlwZSA9ICJzbWFsbCI7CisJZWxzZSBpZiAoZnNfYmxvY2tzX2NvdW50IDwgNCAqIDEwMjQgKiAxMDI0ICogbWVnKQorCQlzaXplX3R5cGUgPSAiZGVmYXVsdCI7CisJZWxzZSBpZiAoZnNfYmxvY2tzX2NvdW50IDwgMTYgKiAxMDI0ICogMTAyNCAqIG1lZykKKwkJc2l6ZV90eXBlID0gImJpZyI7CisJZWxzZQorCQlzaXplX3R5cGUgPSAiaHVnZSI7CisKKwlpZiAoIXVzYWdlX3R5cGVzKQorCQl1c2FnZV90eXBlcyA9IHNpemVfdHlwZTsKKworCXBhcnNlX3N0ciA9IG1hbGxvYyhzdHJsZW4odXNhZ2VfdHlwZXMpKzEpOworCWlmICghcGFyc2Vfc3RyKSB7CisJCWZyZWUocHJvZmlsZV90eXBlKTsKKwkJZnJlZShsaXN0Lmxpc3QpOworCQlyZXR1cm4gMDsKKwl9CisJc3RyY3B5KHBhcnNlX3N0ciwgdXNhZ2VfdHlwZXMpOworCisJaWYgKGV4dF90eXBlKQorCQlwdXNoX3N0cmluZygmbGlzdCwgZXh0X3R5cGUpOworCWNwID0gcGFyc2Vfc3RyOworCXdoaWxlICgxKSB7CisJCXQgPSBzdHJjaHIoY3AsICcsJyk7CisJCWlmICh0KQorCQkJKnQgPSAnXDAnOworCisJCWlmICgqY3ApIHsKKwkJCWlmIChwcm9maWxlX2hhc19zdWJzZWN0aW9uKHByb2ZpbGUsICJmc190eXBlcyIsIGNwKSkKKwkJCQlwdXNoX3N0cmluZygmbGlzdCwgY3ApOworCQkJZWxzZSBpZiAoc3RyY21wKGNwLCAiZGVmYXVsdCIpICE9IDApCisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIlxuV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90ICIKKwkJCQkJICAiZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuXG4iKSwKKwkJCQkJY3ApOworCQl9CisJCWlmICh0KQorCQkJY3AgPSB0KzE7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlmcmVlKHBhcnNlX3N0cik7CisJZnJlZShwcm9maWxlX3R5cGUpOworCWlmIChpc19odXJkKQorCQlwdXNoX3N0cmluZygmbGlzdCwgImh1cmQiKTsKKwlyZXR1cm4gKGxpc3QubGlzdCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShjaGFyICoqdHlwZXMsIGNvbnN0IGNoYXIgKm9wdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmRlZl92YWwpCit7CisJY2hhciAqcmV0ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaT0wOyB0eXBlc1tpXTsgaSsrKTsKKwlmb3IgKGktPTE7IGkgPj0wIDsgaS0tKSB7CisJCXByb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlLCAiZnNfdHlwZXMiLCB0eXBlc1tpXSwKKwkJCQkgICBvcHQsIDAsICZyZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZWZhdWx0cyIsIG9wdCwgMCwgZGVmX3ZhbCwgJnJldCk7CisJcmV0dXJuIChyZXQpOworfQorCitzdGF0aWMgaW50IGdldF9pbnRfZnJvbV9wcm9maWxlKGNoYXIgKip0eXBlcywgY29uc3QgY2hhciAqb3B0LCBpbnQgZGVmX3ZhbCkKK3sKKwlpbnQgcmV0OworCWNoYXIgKipjcHA7CisKKwlwcm9maWxlX2dldF9pbnRlZ2VyKHByb2ZpbGUsICJkZWZhdWx0cyIsIG9wdCwgMCwgZGVmX3ZhbCwgJnJldCk7CisJZm9yIChjcHAgPSB0eXBlczsgKmNwcDsgY3BwKyspCisJCXByb2ZpbGVfZ2V0X2ludGVnZXIocHJvZmlsZSwgImZzX3R5cGVzIiwgKmNwcCwgb3B0LCByZXQsICZyZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBkb3VibGUgZ2V0X2RvdWJsZV9mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsCisJCQkJICAgICAgZG91YmxlIGRlZl92YWwpCit7CisJZG91YmxlIHJldDsKKwljaGFyICoqY3BwOworCisJcHJvZmlsZV9nZXRfZG91YmxlKHByb2ZpbGUsICJkZWZhdWx0cyIsIG9wdCwgMCwgZGVmX3ZhbCwgJnJldCk7CisJZm9yIChjcHAgPSB0eXBlczsgKmNwcDsgY3BwKyspCisJCXByb2ZpbGVfZ2V0X2RvdWJsZShwcm9maWxlLCAiZnNfdHlwZXMiLCAqY3BwLCBvcHQsIHJldCwgJnJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoY2hhciAqKnR5cGVzLCBjb25zdCBjaGFyICpvcHQsIGludCBkZWZfdmFsKQoreworCWludCByZXQ7CisJY2hhciAqKmNwcDsKKworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4ocHJvZmlsZSwgImRlZmF1bHRzIiwgb3B0LCAwLCBkZWZfdmFsLCAmcmV0KTsKKwlmb3IgKGNwcCA9IHR5cGVzOyAqY3BwOyBjcHArKykKKwkJcHJvZmlsZV9nZXRfYm9vbGVhbihwcm9maWxlLCAiZnNfdHlwZXMiLCAqY3BwLCBvcHQsIHJldCwgJnJldCk7CisJcmV0dXJuIHJldDsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIgKm1rZTJmc19kZWZhdWx0X3Byb2ZpbGU7CitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9maWxlc1tdID0geyAiPGRlZmF1bHQ+IiwgMCB9OworCisjaWZkZWYgSEFWRV9CTEtJRF9QUk9CRV9HRVRfVE9QT0xPR1kKKy8qCisgKiBTZXRzIHRoZSBnZW9tZXRyeSBvZiBhIGRldmljZSAoc3RyaXBlL3N0cmlkZSksIGFuZCByZXR1cm5zIHRoZQorICogZGV2aWNlJ3MgYWxpZ25tZW50IG9mZnNldCwgaWYgYW55LCBvciBhIG5lZ2F0aXZlIGVycm9yLgorICovCitzdGF0aWMgaW50IGdldF9kZXZpY2VfZ2VvbWV0cnkoY29uc3QgY2hhciAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqZnNfcGFyYW0sCisJCQkgICAgICAgaW50IHBzZWN0b3Jfc2l6ZSkKK3sKKwlpbnQgcmMgPSAtMTsKKwlpbnQgYmxvY2tzaXplOworCWJsa2lkX3Byb2JlIHByOworCWJsa2lkX3RvcG9sb2d5IHRwOworCXVuc2lnbmVkIGxvbmcgbWluX2lvOworCXVuc2lnbmVkIGxvbmcgb3B0X2lvOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciBhIHJlZ3VsYXIgZmlsZSAqLworCWlmICghc3RhdChmaWxlLCAmc3RhdGJ1ZikgJiYgU19JU1JFRyhzdGF0YnVmLnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCXByID0gYmxraWRfbmV3X3Byb2JlX2Zyb21fZmlsZW5hbWUoZmlsZSk7CisJaWYgKCFwcikKKwkJZ290byBvdXQ7CisKKwl0cCA9IGJsa2lkX3Byb2JlX2dldF90b3BvbG9neShwcik7CisJaWYgKCF0cCkKKwkJZ290byBvdXQ7CisKKwltaW5faW8gPSBibGtpZF90b3BvbG9neV9nZXRfbWluaW11bV9pb19zaXplKHRwKTsKKwlvcHRfaW8gPSBibGtpZF90b3BvbG9neV9nZXRfb3B0aW1hbF9pb19zaXplKHRwKTsKKwlibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUoZnNfcGFyYW0pOworCWlmICgobWluX2lvID09IDApICYmIChwc2VjdG9yX3NpemUgPiBibG9ja3NpemUpKQorCQltaW5faW8gPSBwc2VjdG9yX3NpemU7CisJaWYgKChvcHRfaW8gPT0gMCkgJiYgbWluX2lvKQorCQlvcHRfaW8gPSBtaW5faW87CisJaWYgKChvcHRfaW8gPT0gMCkgJiYgKHBzZWN0b3Jfc2l6ZSA+IGJsb2Nrc2l6ZSkpCisJCW9wdF9pbyA9IHBzZWN0b3Jfc2l6ZTsKKworCS8qIHNldHRpbmcgc3RyaXBlL3N0cmlkZSB0byBibG9ja3NpemUgaXMgcG9pbnRsZXNzICovCisJaWYgKG1pbl9pbyA+IGJsb2Nrc2l6ZSkKKwkJZnNfcGFyYW0tPnNfcmFpZF9zdHJpZGUgPSBtaW5faW8gLyBibG9ja3NpemU7CisJaWYgKG9wdF9pbyA+IGJsb2Nrc2l6ZSkKKwkJZnNfcGFyYW0tPnNfcmFpZF9zdHJpcGVfd2lkdGggPSBvcHRfaW8gLyBibG9ja3NpemU7CisKKwlyYyA9IGJsa2lkX3RvcG9sb2d5X2dldF9hbGlnbm1lbnRfb2Zmc2V0KHRwKTsKK291dDoKKwlibGtpZF9mcmVlX3Byb2JlKHByKTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgUFJTKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50CQliLCBjOworCWludAkJY2x1c3Rlcl9zaXplID0gMDsKKwljaGFyIAkJKnRtcCwgKipjcHA7CisJaW50CQlibG9ja3NpemUgPSAwOworCWludAkJaW5vZGVfcmF0aW8gPSAwOworCWludAkJaW5vZGVfc2l6ZSA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGV4X2JnX3NpemUgPSAwOworCWRvdWJsZQkJcmVzZXJ2ZWRfcmF0aW8gPSAtMS4wOworCWludAkJbHNlY3Rvcl9zaXplID0gMCwgcHNlY3Rvcl9zaXplID0gMDsKKwlpbnQJCXNob3dfdmVyc2lvbl9vbmx5ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnVtX2lub2RlcyA9IDA7IC8qIHVuc2lnbmVkIGxvbmcgbG9uZyB0byBjYXRjaCB0b28tbGFyZ2UgaW5wdXQgKi8KKwllcnJjb2RlX3QJcmV0dmFsOworCWNoYXIgKgkJb2xkcGF0aCA9IGdldGVudigiUEFUSCIpOworCWNoYXIgKgkJZXh0ZW5kZWRfb3B0cyA9IDA7CisJY2hhciAqCQlmc190eXBlID0gMDsKKwljaGFyICoJCXVzYWdlX3R5cGVzID0gMDsKKwlibGs2NF90CQlkZXZfc2l6ZTsKKwkvKgorCSAqIE5PVEU6IEEgZmV3IHdvcmRzIGFib3V0IGZzX2Jsb2Nrc19jb3VudCBhbmQgYmxvY2tzaXplOgorCSAqCisJICogSW5pdGlhbGx5LCBibG9ja3NpemUgaXMgc2V0IHRvIHplcm8sIHdoaWNoIGltcGxpZXMgMTAyNC4KKwkgKiBJZiAtYiBpcyBzcGVjaWZpZWQsIGJsb2Nrc2l6ZSBpcyB1cGRhdGVkIHRvIHRoZSB1c2VyJ3MgdmFsdWUuCisJICoKKwkgKiBOZXh0LCB0aGUgZGV2aWNlIHNpemUgb3IgdGhlIHVzZXIncyAiYmxvY2tzIiBjb21tYW5kIGxpbmUgYXJndW1lbnQKKwkgKiBpcyB1c2VkIHRvIHNldCBmc19ibG9ja3NfY291bnQ7IHRoZSB1bml0cyBhcmUgYmxvY2tzaXplLgorCSAqCisJICogTGF0ZXIsIGlmIGJsb2Nrc2l6ZSBoYXNuJ3QgYmVlbiBzZXQgYW5kIHRoZSBwcm9maWxlIHNwZWNpZmllcyBhCisJICogYmxvY2tzaXplLCB0aGVuIGJsb2Nrc2l6ZSBpcyB1cGRhdGVkIGFuZCBmc19ibG9ja3NfY291bnQgaXMgc2NhbGVkCisJICogYXBwcm9wcmlhdGVseS4gIE5vdGUgdGhlIGNoYW5nZSBpbiB1bml0cyEKKwkgKgorCSAqIEZpbmFsbHksIHdlIGNvbXBsYWluIGFib3V0IGZzX2Jsb2Nrc19jb3VudCA+IDJeMzIgb24gYSBub24tNjRiaXQgZnMuCisJICovCisJYmxrNjRfdAkJZnNfYmxvY2tzX2NvdW50ID0gMDsKKyNpZmRlZiBfX2xpbnV4X18KKwlzdHJ1Y3QgCQl1dHNuYW1lIHV0OworI2VuZGlmCisJbG9uZwkJc3lzdmFsOworCWludAkJc19vcHQgPSAtMSwgcl9vcHQgPSAtMTsKKwljaGFyCQkqZnNfZmVhdHVyZXMgPSAwOworCWludAkJdXNlX2JzaXplOworCWNoYXIJCSpuZXdwYXRoOworCWludAkJcGF0aGxlbiA9IHNpemVvZihQQVRIX1NFVCkgKyAxOworCisJaWYgKG9sZHBhdGgpCisJCXBhdGhsZW4gKz0gc3RybGVuKG9sZHBhdGgpOworCW5ld3BhdGggPSBtYWxsb2MocGF0aGxlbik7CisJaWYgKCFuZXdwYXRoKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisJc3RyY3B5KG5ld3BhdGgsIFBBVEhfU0VUKTsKKworCS8qIFVwZGF0ZSBvdXIgUEFUSCB0byBpbmNsdWRlIC9zYmluICAqLworCWlmIChvbGRwYXRoKSB7CisJCXN0cmNhdCAobmV3cGF0aCwgIjoiKTsKKwkJc3RyY2F0IChuZXdwYXRoLCBvbGRwYXRoKTsKKwl9CisJcHV0ZW52IChuZXdwYXRoKTsKKworCXRtcCA9IGdldGVudigiTUtFMkZTX1NZTkMiKTsKKwlpZiAodG1wKQorCQlzeW5jX2tsdWRnZSA9IGF0b2kodG1wKTsKKworCS8qIERldGVybWluZSB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSBpZiBwb3NzaWJsZSAqLworI2lmZGVmIEhBVkVfU1lTQ09ORgorI2lmICghZGVmaW5lZChfU0NfUEFHRVNJWkUpICYmIGRlZmluZWQoX1NDX1BBR0VfU0laRSkpCisjZGVmaW5lIF9TQ19QQUdFU0laRSBfU0NfUEFHRV9TSVpFCisjZW5kaWYKKyNpZmRlZiBfU0NfUEFHRVNJWkUKKwlzeXN2YWwgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisJaWYgKHN5c3ZhbCA+IDApCisJCXN5c19wYWdlX3NpemUgPSBzeXN2YWw7CisjZW5kaWYgLyogX1NDX1BBR0VTSVpFICovCisjZW5kaWYgLyogSEFWRV9TWVNDT05GICovCisKKwlpZiAoKHRtcCA9IGdldGVudigiTUtFMkZTX0NPTkZJRyIpKSAhPSBOVUxMKQorCQljb25maWdfZm5bMF0gPSB0bXA7CisJcHJvZmlsZV9zZXRfc3ludGF4X2Vycl9jYihzeW50YXhfZXJyX3JlcG9ydCk7CisJcmV0dmFsID0gcHJvZmlsZV9pbml0KGNvbmZpZ19mbiwgJnByb2ZpbGUpOworCWlmIChyZXR2YWwgPT0gRU5PRU5UKSB7CisJCXJldHZhbCA9IHByb2ZpbGVfaW5pdChkZWZhdWx0X2ZpbGVzLCAmcHJvZmlsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIHByb2ZpbGVfZXJyb3I7CisJCXJldHZhbCA9IHByb2ZpbGVfc2V0X2RlZmF1bHQocHJvZmlsZSwgbWtlMmZzX2RlZmF1bHRfcHJvZmlsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIHByb2ZpbGVfZXJyb3I7CisJfSBlbHNlIGlmIChyZXR2YWwpIHsKK3Byb2ZpbGVfZXJyb3I6CisJCWZwcmludGYoc3RkZXJyLCBfKCJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IgorCQkJCSAgIiAoZXJyb3I6ICVsZCkuXG4iKSwgcmV0dmFsKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCWFkZF9lcnJvcl90YWJsZSgmZXRfcHJvZl9lcnJvcl90YWJsZSk7CisJbWVtc2V0KCZmc19wYXJhbSwgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrKSk7CisJZnNfcGFyYW0uc19yZXZfbGV2ZWwgPSAxOyAgLyogQ3JlYXRlIHJldmlzaW9uIDEgZmlsZXN5c3RlbXMgbm93ICovCisKKyNpZmRlZiBfX2xpbnV4X18KKwlpZiAodW5hbWUoJnV0KSkgeworCQlwZXJyb3IoInVuYW1lIik7CisJCWV4aXQoMSk7CisJfQorCWxpbnV4X3ZlcnNpb25fY29kZSA9IHBhcnNlX3ZlcnNpb25fbnVtYmVyKHV0LnJlbGVhc2UpOworCWlmIChsaW51eF92ZXJzaW9uX2NvZGUgJiYgbGludXhfdmVyc2lvbl9jb2RlIDwgKDIqNjU1MzYgKyAyKjI1NikpCisJCWZzX3BhcmFtLnNfcmV2X2xldmVsID0gMDsKKyNlbmRpZgorCisJaWYgKGFyZ2MgJiYgKmFyZ3YpIHsKKwkJcHJvZ3JhbV9uYW1lID0gZ2V0X3Byb2duYW1lKCphcmd2KTsKKworCQkvKiBJZiBjYWxsZWQgYXMgbWtmcy5leHQzLCBjcmVhdGUgYSBqb3VybmFsIGlub2RlICovCisJCWlmICghc3RyY21wKHByb2dyYW1fbmFtZSwgIm1rZnMuZXh0MyIpIHx8CisJCSAgICAhc3RyY21wKHByb2dyYW1fbmFtZSwgIm1rZTNmcyIpKQorCQkJam91cm5hbF9zaXplID0gLTE7CisJfQorCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LAorCQkgICAgImI6Y2c6aTpqbDptOm5vOnFyOnM6dDp2QzpERTpGRzpJOko6S0w6TTpOOk86UjpTVDpVOlYiKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdiJzoKKwkJCWJsb2Nrc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKG9wdGFyZywgLTEpOworCQkJYiA9IChibG9ja3NpemUgPiAwKSA/IGJsb2Nrc2l6ZSA6IC1ibG9ja3NpemU7CisJCQlpZiAoYiA8IEVYVDJfTUlOX0JMT0NLX1NJWkUgfHwKKwkJCSAgICBiID4gRVhUMl9NQVhfQkxPQ0tfU0laRSkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIpLCBvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoYmxvY2tzaXplID4gNDA5NikKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCAiCisJCQkJCQkgICJ1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIiksCisJCQkJCWJsb2Nrc2l6ZSk7CisJCQlpZiAoYmxvY2tzaXplID4gMCkKKwkJCQlmc19wYXJhbS5zX2xvZ19ibG9ja19zaXplID0KKwkJCQkJaW50X2xvZzIoYmxvY2tzaXplID4+CisJCQkJCQkgRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgkvKiBDaGVjayBmb3IgYmFkIGJsb2NrcyAqLworCQkJY2ZsYWcrKzsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCWNsdXN0ZXJfc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKG9wdGFyZywgLTEpOworCQkJaWYgKGNsdXN0ZXJfc2l6ZSA8PSBFWFQyX01JTl9DTFVTVEVSX1NJWkUgfHwKKwkJCSAgICBjbHVzdGVyX3NpemUgPiBFWFQyX01BWF9DTFVTVEVSX1NJWkUpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlkaXJlY3RfaW8gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIikpOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAnRSc6CisJCQlleHRlbmRlZF9vcHRzID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ0YnOgorCQkJZm9yY2UrKzsKKwkJCWJyZWFrOworCQljYXNlICdnJzoKKwkJCWZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cCA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWlmICgoZnNfcGFyYW0uc19ibG9ja3NfcGVyX2dyb3VwICUgOCkgIT0gMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IikpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnRyc6CisJCQlmbGV4X2JnX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCQlfKCJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIikpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoZmxleF9iZ19zaXplIDwgMSB8fAorCQkJICAgIChmbGV4X2JnX3NpemUgJiAoZmxleF9iZ19zaXplLTEpKSAhPSAwKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJCV8oImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW5vZGVfcmF0aW8gPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoaW5vZGVfcmF0aW8gPCBFWFQyX01JTl9CTE9DS19TSVpFIHx8CisJCQkgICAgaW5vZGVfcmF0aW8gPiBFWFQyX01BWF9CTE9DS19TSVpFICogMTAyNCB8fAorCQkJICAgICp0bXApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiKSwKKwkJCQkJb3B0YXJnLCBFWFQyX01JTl9CTE9DS19TSVpFLAorCQkJCQlFWFQyX01BWF9CTE9DS19TSVpFICogMTAyNCk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdJJzoKKwkJCWlub2RlX3NpemUgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIpLCBvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCQlpZiAoIWpvdXJuYWxfc2l6ZSkKKwkJCQlqb3VybmFsX3NpemUgPSAtMTsKKwkJCWJyZWFrOworCQljYXNlICdKJzoKKwkJCXBhcnNlX2pvdXJuYWxfb3B0cyhvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ0snOgorCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQkJXygiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kICIKKwkJCQkgICJzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICIKKwkJCQkgICJcJy1FIG5vZGlzY2FyZFwnIGV4dGVuZGVkIG9wdGlvbiAiCisJCQkJICAiaW5zdGVhZCFcbiIpKTsKKwkJCWRpc2NhcmQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJYmFkX2Jsb2Nrc19maWxlbmFtZSA9IHJlYWxsb2MoYmFkX2Jsb2Nrc19maWxlbmFtZSwKKwkJCQkJCSAgICAgIHN0cmxlbihvcHRhcmcpICsgMSk7CisJCQlpZiAoIWJhZF9ibG9ja3NfZmlsZW5hbWUpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLCAiJXMiLAorCQkJCQlfKCJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiKSk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCXN0cmNweShiYWRfYmxvY2tzX2ZpbGVuYW1lLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ0wnOgorCQkJdm9sdW1lX2xhYmVsID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJcmVzZXJ2ZWRfcmF0aW8gPSBzdHJ0b2Qob3B0YXJnLCAmdG1wKTsKKwkJCWlmICggKnRtcCB8fCByZXNlcnZlZF9yYXRpbyA+IDUwIHx8CisJCQkgICAgIHJlc2VydmVkX3JhdGlvIDwgMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJbW91bnRfZGlyID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbm9hY3Rpb24rKzsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCW51bV9pbm9kZXMgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgbnVtIGlub2RlcyAtICVzIiksIG9wdGFyZyk7CisJCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQljcmVhdG9yX29zID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJZnNfZmVhdHVyZXMgPSBvcHRhcmc7CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlxdWlldCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyX29wdCA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIiksIG9wdGFyZyk7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWZzX3BhcmFtLnNfcmV2X2xldmVsID0gcl9vcHQ7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CS8qIGRlcHJlY2F0ZWQgKi8KKwkJCXNfb3B0ID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJc3VwZXJfb25seSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlpZiAoZnNfdHlwZSkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCSAgICBfKCJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJZnNfdHlwZSA9IHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ1QnOgorCQkJaWYgKHVzYWdlX3R5cGVzKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJICAgIF8oIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIikpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQl1c2FnZV90eXBlcyA9IHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJZnNfdXVpZCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogUHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQgKi8KKwkJCXNob3dfdmVyc2lvbl9vbmx5Kys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwl9CisJaWYgKChvcHRpbmQgPT0gYXJnYykgJiYgIXNob3dfdmVyc2lvbl9vbmx5KQorCQl1c2FnZSgpOworCWRldmljZV9uYW1lID0gYXJndltvcHRpbmQrK107CisKKwlpZiAoIXF1aWV0IHx8IHNob3dfdmVyc2lvbl9vbmx5KQorCQlmcHJpbnRmIChzdGRlcnIsICJta2UyZnMgJXMgKCVzKVxuIiwgRTJGU1BST0dTX1ZFUlNJT04sCisJCQkgRTJGU1BST0dTX0RBVEUpOworCisJaWYgKHNob3dfdmVyc2lvbl9vbmx5KSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJcdFVzaW5nICVzXG4iKSwKKwkJCWVycm9yX21lc3NhZ2UoRVhUMl9FVF9CQVNFKSk7CisJCWV4aXQoMCk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIGJsb2Nrc2l6ZSBzcGVjaWZpZWQgYW5kIHRoZXJlIGlzIGEgam91cm5hbAorCSAqIGRldmljZSwgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgdGhlIGJsb2Nrc2l6ZQorCSAqLworCWlmIChibG9ja3NpemUgPD0gMCAmJiBqb3VybmFsX2RldmljZSkgeworCQlleHQyX2ZpbHN5cwlqZnM7CisJCWlvX21hbmFnZXIJaW9fcHRyOworCisjaWZkZWYgQ09ORklHX1RFU1RJT19ERUJVRworCQlpZiAoZ2V0ZW52KCJURVNUX0lPX0ZMQUdTIikgfHwgZ2V0ZW52KCJURVNUX0lPX0JMT0NLIikpIHsKKwkJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJCXRlc3RfaW9fYmFja2luZ19tYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCQl9IGVsc2UKKyNlbmRpZgorCQkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCQlyZXR2YWwgPSBleHQyZnNfb3Blbihqb3VybmFsX2RldmljZSwKKwkJCQkgICAgIEVYVDJfRkxBR19KT1VSTkFMX0RFVl9PSywgMCwKKwkJCQkgICAgIDAsIGlvX3B0ciwgJmpmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIpLAorCQkJCWpvdXJuYWxfZGV2aWNlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKChibG9ja3NpemUgPCAwKSAmJiAoamZzLT5ibG9ja3NpemUgPCAodW5zaWduZWQpICgtYmxvY2tzaXplKSkpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiAiCisJCQkJICAibWluaW11bSBibG9ja3NpemUgJWRcbiIpLCBqZnMtPmJsb2Nrc2l6ZSwKKwkJCQktYmxvY2tzaXplKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYmxvY2tzaXplID0gamZzLT5ibG9ja3NpemU7CisJCXByaW50ZihfKCJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIpLCBibG9ja3NpemUpOworCQlmc19wYXJhbS5zX2xvZ19ibG9ja19zaXplID0KKwkJCWludF9sb2cyKGJsb2Nrc2l6ZSA+PiBFWFQyX01JTl9CTE9DS19MT0dfU0laRSk7CisJCWV4dDJmc19jbG9zZShqZnMpOworCX0KKworCWlmIChvcHRpbmQgPCBhcmdjKSB7CisJCWZzX2Jsb2Nrc19jb3VudCA9IHBhcnNlX251bV9ibG9ja3MyKGFyZ3Zbb3B0aW5kKytdLAorCQkJCQkJICAgZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZSk7CisJCWlmICghZnNfYmxvY2tzX2NvdW50KSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIiksCisJCQkJYXJndltvcHRpbmQgLSAxXSwgZGV2aWNlX25hbWUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kIDwgYXJnYykKKwkJdXNhZ2UoKTsKKworCWlmICghZm9yY2UpCisJCWNoZWNrX3BsYXVzaWJpbGl0eShkZXZpY2VfbmFtZSk7CisJY2hlY2tfbW91bnQoZGV2aWNlX25hbWUsIGZvcmNlLCBfKCJmaWxlc3lzdGVtIikpOworCisJLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBkZXZpY2UgKGlmIHBvc3NpYmxlKSAqLworCWlmIChub2FjdGlvbiAmJiBmc19ibG9ja3NfY291bnQpIHsKKwkJZGV2X3NpemUgPSBmc19ibG9ja3NfY291bnQ7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlCisJCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3NpemUyKGRldmljZV9uYW1lLAorCQkJCQkJIEVYVDJfQkxPQ0tfU0laRSgmZnNfcGFyYW0pLAorCQkJCQkJICZkZXZfc2l6ZSk7CisKKwlpZiAocmV0dmFsICYmIChyZXR2YWwgIT0gRVhUMl9FVF9VTklNUExFTUVOVEVEKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBmaWxlc3lzdGVtIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCWlmICghZnNfYmxvY2tzX2NvdW50KSB7CisJCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9VTklNUExFTUVOVEVEKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSAiCisJCQkJIm11c3Qgc3BlY2lmeVxudGhlIHNpemUgb2YgdGhlICIKKwkJCQkiZmlsZXN5c3RlbVxuIikpOworCQkJZXhpdCgxKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZXZfc2l6ZSA9PSAwKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gICIKKwkJCQkgICJJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG5cdCIKKwkJCQkgICJwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCAiCisJCQkJICAiYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG5cdCIKKwkJCQkgICJhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5ICIKKwkJCQkgICJhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuXHQiCisJCQkJICAidG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKKwkJCQkgICkpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlmc19ibG9ja3NfY291bnQgPSBkZXZfc2l6ZTsKKwkJCWlmIChzeXNfcGFnZV9zaXplID4gRVhUMl9CTE9DS19TSVpFKCZmc19wYXJhbSkpCisJCQkJZnNfYmxvY2tzX2NvdW50ICY9IH4oKGJsazY0X3QpICgoc3lzX3BhZ2Vfc2l6ZSAvCisJCQkJCSAgICAgRVhUMl9CTE9DS19TSVpFKCZmc19wYXJhbSkpLTEpKTsKKwkJfQorCX0gZWxzZSBpZiAoIWZvcmNlICYmIChmc19ibG9ja3NfY291bnQgPiBkZXZfc2l6ZSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQlfKCJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIpKTsKKwkJcHJvY2VlZF9xdWVzdGlvbigpOworCX0KKworCWlmICghZnNfdHlwZSkKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZXZpY2VzIiwgZGV2aWNlX25hbWUsCisJCQkJICAgImZzX3R5cGUiLCAwLCAmZnNfdHlwZSk7CisJaWYgKCF1c2FnZV90eXBlcykKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJkZXZpY2VzIiwgZGV2aWNlX25hbWUsCisJCQkJICAgInVzYWdlX3R5cGVzIiwgMCwgJnVzYWdlX3R5cGVzKTsKKworCS8qCisJICogV2UgaGF2ZSB0aGUgZmlsZSBzeXN0ZW0gKG9yIGRldmljZSkgc2l6ZSwgc28gd2UgY2FuIG5vdworCSAqIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZSBzeXN0ZW0gdHlwZXMgc28gdGhlIGZzIGNhbgorCSAqIGJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZC4KKwkgKi8KKwlmc190eXBlcyA9IHBhcnNlX2ZzX3R5cGUoZnNfdHlwZSwgdXNhZ2VfdHlwZXMsICZmc19wYXJhbSwKKwkJCQkgZnNfYmxvY2tzX2NvdW50ID8gZnNfYmxvY2tzX2NvdW50IDogZGV2X3NpemUsCisJCQkJIGFyZ3ZbMF0pOworCWlmICghZnNfdHlwZXMpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJLyogRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIHNob3VsZCBiZSBlbmFibGVkICovCisKKwl0bXAgPSBOVUxMOworCWlmIChmc19wYXJhbS5zX3Jldl9sZXZlbCAhPSBFWFQyX0dPT0RfT0xEX1JFVikgeworCQl0bXAgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImJhc2VfZmVhdHVyZXMiLAorCQkgICAgICAic3BhcnNlX3N1cGVyLGZpbGV0eXBlLHJlc2l6ZV9pbm9kZSxkaXJfaW5kZXgiKTsKKwkJZWRpdF9mZWF0dXJlKHRtcCwgJmZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQpOworCQlmcmVlKHRtcCk7CisKKwkJLyogQW5kIHdoaWNoIG1vdW50IG9wdGlvbnMgYXMgd2VsbCAqLworCQl0bXAgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImRlZmF1bHRfbW50b3B0cyIsCisJCQkJCSAgICAgICJhY2wsdXNlcl94YXR0ciIpOworCQllZGl0X21udG9wdHModG1wLCAmZnNfcGFyYW0uc19kZWZhdWx0X21vdW50X29wdHMpOworCQlpZiAodG1wKQorCQkJZnJlZSh0bXApOworCisJCWZvciAoY3BwID0gZnNfdHlwZXM7ICpjcHA7IGNwcCsrKSB7CisJCQl0bXAgPSBOVUxMOworCQkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJmc190eXBlcyIsICpjcHAsCisJCQkJCSAgICJmZWF0dXJlcyIsICIiLCAmdG1wKTsKKwkJCWlmICh0bXAgJiYgKnRtcCkKKwkJCQllZGl0X2ZlYXR1cmUodG1wLCAmZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCk7CisJCQlpZiAodG1wKQorCQkJCWZyZWUodG1wKTsKKwkJfQorCQl0bXAgPSBnZXRfc3RyaW5nX2Zyb21fcHJvZmlsZShmc190eXBlcywgImRlZmF1bHRfZmVhdHVyZXMiLAorCQkJCQkgICAgICAiIik7CisJfQorCWVkaXRfZmVhdHVyZShmc19mZWF0dXJlcyA/IGZzX2ZlYXR1cmVzIDogdG1wLAorCQkgICAgICZmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0KTsKKwlpZiAodG1wKQorCQlmcmVlKHRtcCk7CisKKwkvKiBHZXQgdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplcywgaWYgYXZhaWxhYmxlICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2VjdHNpemUoZGV2aWNlX25hbWUsICZsc2VjdG9yX3NpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCXJldHZhbCA9IGV4dDJmc19nZXRfZGV2aWNlX3BoeXNfc2VjdHNpemUoZGV2aWNlX25hbWUsICZwc2VjdG9yX3NpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiKSk7CisJCWV4aXQoMSk7CisJfQorCisJdG1wID0gZ2V0ZW52KCJNS0UyRlNfREVWSUNFX1NFQ1RTSVpFIik7CisJaWYgKHRtcCAhPSBOVUxMKQorCQlsc2VjdG9yX3NpemUgPSBhdG9pKHRtcCk7CisJdG1wID0gZ2V0ZW52KCJNS0UyRlNfREVWSUNFX1BIWVNfU0VDVFNJWkUiKTsKKwlpZiAodG1wICE9IE5VTEwpCisJCXBzZWN0b3Jfc2l6ZSA9IGF0b2kodG1wKTsKKworCS8qIE9sZGVyIGtlcm5lbHMgbWF5IG5vdCBoYXZlIHBoeXNpY2FsL2xvZ2ljYWwgZGlzdGluY3Rpb24gKi8KKwlpZiAoIXBzZWN0b3Jfc2l6ZSkKKwkJcHNlY3Rvcl9zaXplID0gbHNlY3Rvcl9zaXplOworCisJaWYgKGJsb2Nrc2l6ZSA8PSAwKSB7CisJCXVzZV9ic2l6ZSA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiYmxvY2tzaXplIiwgNDA5Nik7CisKKwkJaWYgKHVzZV9ic2l6ZSA9PSAtMSkgeworCQkJdXNlX2JzaXplID0gc3lzX3BhZ2Vfc2l6ZTsKKwkJCWlmICgobGludXhfdmVyc2lvbl9jb2RlIDwgKDIqNjU1MzYgKyA2KjI1NikpICYmCisJCQkgICAgKHVzZV9ic2l6ZSA+IDQwOTYpKQorCQkJCXVzZV9ic2l6ZSA9IDQwOTY7CisJCX0KKwkJaWYgKGxzZWN0b3Jfc2l6ZSAmJiB1c2VfYnNpemUgPCBsc2VjdG9yX3NpemUpCisJCQl1c2VfYnNpemUgPSBsc2VjdG9yX3NpemU7CisJCWlmICgoYmxvY2tzaXplIDwgMCkgJiYgKHVzZV9ic2l6ZSA8ICgtYmxvY2tzaXplKSkpCisJCQl1c2VfYnNpemUgPSAtYmxvY2tzaXplOworCQlibG9ja3NpemUgPSB1c2VfYnNpemU7CisJCWZzX2Jsb2Nrc19jb3VudCAvPSAoYmxvY2tzaXplIC8gMTAyNCk7CisJfSBlbHNlIHsKKwkJaWYgKGJsb2Nrc2l6ZSA8IGxzZWN0b3Jfc2l6ZSkgewkJCS8qIEltcG9zc2libGUgKi8KKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFSU5WQUwsICIlcyIsCisJCQkJXygid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCAiCisJCQkJICAiZm9yIGRldmljZVxuIikpOworCQkJZXhpdCgxKTsKKwkJfSBlbHNlIGlmICgoYmxvY2tzaXplIDwgcHNlY3Rvcl9zaXplKSAmJgorCQkJICAgKHBzZWN0b3Jfc2l6ZSA8PSBzeXNfcGFnZV9zaXplKSkgewkvKiBTdWJvcHRpbWFsICovCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyAiCisJCQkJImxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIiksCisJCQkJYmxvY2tzaXplLCBwc2VjdG9yX3NpemUpOworCQl9CisJfQorCisJZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZSA9CisJCWludF9sb2cyKGJsb2Nrc2l6ZSA+PiBFWFQyX01JTl9CTE9DS19MT0dfU0laRSk7CisKKwkvKgorCSAqIFdlIG5vdyBuZWVkIHRvIGRvIGEgc2FuaXR5IGNoZWNrIG9mIGZzX2Jsb2Nrc19jb3VudCBmb3IKKwkgKiAzMi1iaXQgdnMgNjQtYml0IGJsb2NrIG51bWJlciBzdXBwb3J0LgorCSAqLworCWlmICgoZnNfYmxvY2tzX2NvdW50ID4gTUFYXzMyX05VTSkgJiYKKwkgICAgIShmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpICYmCisJICAgIGdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywgImF1dG9fNjQtYml0X3N1cHBvcnQiLCAwKSkgeworCQlmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgfD0gRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUOworCQlmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0ICY9IH5FWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERTsKKwl9CisJaWYgKChmc19ibG9ja3NfY291bnQgPiBNQVhfMzJfTlVNKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgIgorCQkJCSAgInRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG5cdCIKKwkJCQkgICJpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIiksCisJCQlwcm9ncmFtX25hbWUsIGZzX2Jsb2Nrc19jb3VudCwgZGV2aWNlX25hbWUsCisJCQlFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKSk7CisJCWV4aXQoMSk7CisJfQorCisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoJmZzX3BhcmFtLCBmc19ibG9ja3NfY291bnQpOworCisJaWYgKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQlmc190eXBlc1swXSA9IHN0cmR1cCgiam91cm5hbCIpOworCQlmc190eXBlc1sxXSA9IDA7CisJfQorCisJaWYgKHZlcmJvc2UpIHsKKwkJZnB1dHMoXygiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIpLCBzdGRvdXQpOworCQlwcmludF9zdHJfbGlzdChmc190eXBlcyk7CisJfQorCisJaWYgKHJfb3B0ID09IEVYVDJfR09PRF9PTERfUkVWICYmCisJICAgIChmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0IHx8IGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCB8fAorCSAgICAgZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCAiCisJCQkJCSJ3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoc19vcHQgPiAwKSB7CisJCWlmIChyX29wdCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQkJXygiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgIgorCQkJCSAgIndpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9CisJCQlFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUjsKKwl9IGVsc2UgaWYgKHNfb3B0ID09IDApCisJCWZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgJj0KKwkJCX5FWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUjsKKworCWlmIChqb3VybmFsX3NpemUgIT0gMCkgeworCQlpZiAocl9vcHQgPT0gRVhUMl9HT09EX09MRF9SRVYpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggIgorCQkJCQkJInJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCB8PQorCQkJRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTDsKKwl9CisKKwkvKiBHZXQgcmVzZXJ2ZWRfcmF0aW8gZnJvbSBwcm9maWxlIGlmIG5vdCBzcGVjaWZpZWQgb24gY21kIGxpbmUuICovCisJaWYgKHJlc2VydmVkX3JhdGlvIDwgMC4wKSB7CisJCXJlc2VydmVkX3JhdGlvID0gZ2V0X2RvdWJsZV9mcm9tX3Byb2ZpbGUoCisJCQkJCWZzX3R5cGVzLCAicmVzZXJ2ZWRfcmF0aW8iLCA1LjApOworCQlpZiAocmVzZXJ2ZWRfcmF0aW8gPiA1MCB8fCByZXNlcnZlZF9yYXRpbyA8IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiKSwKKwkJCQlyZXNlcnZlZF9yYXRpbyk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikgeworCQlyZXNlcnZlZF9yYXRpbyA9IDA7CisJCWZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCA9IEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVjsKKwkJZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCA9IDA7CisJCWZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgPSAwOworIAl9CisKKwkvKiBDaGVjayB0aGUgdXNlcidzIG1rZnMgb3B0aW9ucyBmb3IgNjRiaXQgKi8KKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkgJiYKKwkgICAgIShmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykpIHsKKwkJcHJpbnRmKCIlcyIsIF8oIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCAiCisJCQkgICAgICAgImZpbGVzeXN0ZW0uICBQYXNzIC1PIGV4dGVudHMgdG8gcmVjdGlmeS5cbiIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvKiBTZXQgZmlyc3QgbWV0YSBibG9ja2dyb3VwIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLworCS8qICh0aGlzIGlzIG1vc3RseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKSAqLworCWlmICgoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpICYmCisJICAgICgodG1wID0gZ2V0ZW52KCJNS0UyRlNfRklSU1RfTUVUQV9CRyIpKSkpCisJCWZzX3BhcmFtLnNfZmlyc3RfbWV0YV9iZyA9IGF0b2kodG1wKTsKKwlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpIHsKKwkJaWYgKCFjbHVzdGVyX3NpemUpCisJCQljbHVzdGVyX3NpemUgPSBnZXRfaW50X2Zyb21fcHJvZmlsZShmc190eXBlcywKKwkJCQkJCQkgICAgImNsdXN0ZXJfc2l6ZSIsCisJCQkJCQkJICAgIGJsb2Nrc2l6ZSoxNik7CisJCWZzX3BhcmFtLnNfbG9nX2NsdXN0ZXJfc2l6ZSA9CisJCQlpbnRfbG9nMihjbHVzdGVyX3NpemUgPj4gRVhUMl9NSU5fQ0xVU1RFUl9MT0dfU0laRSk7CisJCWlmIChmc19wYXJhbS5zX2xvZ19jbHVzdGVyX3NpemUgJiYKKwkJICAgIGZzX3BhcmFtLnNfbG9nX2NsdXN0ZXJfc2l6ZSA8IGZzX3BhcmFtLnNfbG9nX2Jsb2NrX3NpemUpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSAiCisJCQkJICAic21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZSBpZiAoY2x1c3Rlcl9zaXplKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJXygic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgIgorCQkJICAiYmlnYWxsb2MgZmVhdHVyZSIpKTsKKwkJZXhpdCgxKTsKKwl9IGVsc2UKKwkJZnNfcGFyYW0uc19sb2dfY2x1c3Rlcl9zaXplID0gZnNfcGFyYW0uc19sb2dfYmxvY2tfc2l6ZTsKKworCWlmIChpbm9kZV9yYXRpbyA9PSAwKSB7CisJCWlub2RlX3JhdGlvID0gZ2V0X2ludF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJpbm9kZV9yYXRpbyIsCisJCQkJCQkgICA4MTkyKTsKKwkJaWYgKGlub2RlX3JhdGlvIDwgYmxvY2tzaXplKQorCQkJaW5vZGVfcmF0aW8gPSBibG9ja3NpemU7CisJCWlmIChpbm9kZV9yYXRpbyA8IEVYVDJfQ0xVU1RFUl9TSVpFKCZmc19wYXJhbSkpCisJCQlpbm9kZV9yYXRpbyA9IEVYVDJfQ0xVU1RFUl9TSVpFKCZmc19wYXJhbSk7CisJfQorCisjaWZkZWYgSEFWRV9CTEtJRF9QUk9CRV9HRVRfVE9QT0xPR1kKKwlyZXR2YWwgPSBnZXRfZGV2aWNlX2dlb21ldHJ5KGRldmljZV9uYW1lLCAmZnNfcGFyYW0sIHBzZWN0b3Jfc2l6ZSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIpLAorCQkJZGV2aWNlX25hbWUpOworCX0gZWxzZSBpZiAocmV0dmFsKSB7CisJCXByaW50ZihfKCIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIpLAorCQkgICAgICAgZGV2aWNlX25hbWUsIHJldHZhbCk7CisJCXByaW50ZihfKCJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAiCisJCQkgICIocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iKSk7CisJfQorI2VuZGlmCisKKwlibG9ja3NpemUgPSBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBzX2Rlc2Nfc2l6ZSBzbyB0aGF0IHRoZSBwYXJzZV9leHRlbmRlZF9vcHRzKCkKKwkgKiBjYW4gY29ycmVjdGx5IGhhbmRsZSAiLUUgcmVzaXplPU5OTiIgaWYgdGhlIDY0LWJpdCBvcHRpb24KKwkgKiBpcyBzZXQuCisJICovCisJaWYgKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJZnNfcGFyYW0uc19kZXNjX3NpemUgPSBFWFQyX01JTl9ERVNDX1NJWkVfNjRCSVQ7CisKKwkvKiBUaGlzIGNoZWNrIHNob3VsZCBoYXBwZW4gYmV5b25kIHRoZSBsYXN0IGFzc2lnbm1lbnQgdG8gYmxvY2tzaXplICovCisJaWYgKGJsb2Nrc2l6ZSA+IHN5c19wYWdlX3NpemUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIiksCisJCQkJYmxvY2tzaXplLCBzeXNfcGFnZV9zaXplKTsKKwkJCXByb2NlZWRfcXVlc3Rpb24oKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgXygiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtICIKKwkJCQkgICIobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iKSwKKwkJCWJsb2Nrc2l6ZSwgc3lzX3BhZ2Vfc2l6ZSk7CisJfQorCisJbGF6eV9pdGFibGVfaW5pdCA9IDA7CisJaWYgKGFjY2VzcygiL3N5cy9mcy9leHQ0L2ZlYXR1cmVzL2xhenlfaXRhYmxlX2luaXQiLCBSX09LKSA9PSAwKQorCQlsYXp5X2l0YWJsZV9pbml0ID0gMTsKKworCWxhenlfaXRhYmxlX2luaXQgPSBnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsCisJCQkJCQkgImxhenlfaXRhYmxlX2luaXQiLAorCQkJCQkJIGxhenlfaXRhYmxlX2luaXQpOworCWRpc2NhcmQgPSBnZXRfYm9vbF9mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJkaXNjYXJkIiAsIGRpc2NhcmQpOworCWpvdXJuYWxfZmxhZ3MgfD0gZ2V0X2Jvb2xfZnJvbV9wcm9maWxlKGZzX3R5cGVzLAorCQkJCQkgICAgICAgImxhenlfam91cm5hbF9pbml0IiwgMCkgPworCQkJCQkgICAgICAgRVhUMl9NS0pPVVJOQUxfTEFaWUlOSVQgOiAwOworCWpvdXJuYWxfZmxhZ3MgfD0gRVhUMl9NS0pPVVJOQUxfTk9fTU5UX0NIRUNLOworCisJLyogR2V0IG9wdGlvbnMgZnJvbSBwcm9maWxlICovCisJZm9yIChjcHAgPSBmc190eXBlczsgKmNwcDsgY3BwKyspIHsKKwkJdG1wID0gTlVMTDsKKwkJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJmc190eXBlcyIsICpjcHAsICJvcHRpb25zIiwgIiIsICZ0bXApOworCQkJaWYgKHRtcCAmJiAqdG1wKQorCQkJCXBhcnNlX2V4dGVuZGVkX29wdHMoJmZzX3BhcmFtLCB0bXApOworCQkJZnJlZSh0bXApOworCX0KKworCWlmIChleHRlbmRlZF9vcHRzKQorCQlwYXJzZV9leHRlbmRlZF9vcHRzKCZmc19wYXJhbSwgZXh0ZW5kZWRfb3B0cyk7CisKKwkvKiBDYW4ndCBzdXBwb3J0IGJpZ2FsbG9jIGZlYXR1cmUgd2l0aG91dCBleHRlbnRzIGZlYXR1cmUgKi8KKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSAmJgorCSAgICAhKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0ICIKKwkJCSAgImV4dGVudHMgZmVhdHVyZSIpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSAmJgorCSAgICAoZnNfcGFyYW0uc19mZWF0dXJlX2NvbXBhdCAmIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyAiCisJCQkJCSJmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisJCQkJCSJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkICIKKwkJCQkJInNpbXVsdGFuZW91c2x5LlxuIikpOworCQlleGl0KDEpOworCX0KKworCWlmICghcXVpZXQgJiYKKwkgICAgKGZzX3BhcmFtLnNfZmVhdHVyZV9yb19jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JJR0FMTE9DKSkKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgIgorCQkJCSAgInN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisJCQkJICAiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvIgorCQkJCSAgImluZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuXG4iKSk7CisKKwlpZiAoIXF1aWV0ICYmCisJICAgIChmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSkpCisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJcbldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzICIKKwkJCQkgICJzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorCQkJCSAgIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnLyIKKwkJCQkgICJpbmRleC5waHAvUXVvdGEgZm9yIG1vcmUgaW5mb3JtYXRpb25cblxuIikpOworCisJLyogU2luY2Ugc3BhcnNlX3N1cGVyIGlzIHRoZSBkZWZhdWx0LCB3ZSB3b3VsZCBvbmx5IGhhdmUgYSBwcm9ibGVtCisJICogaGVyZSBpZiBpdCB3YXMgZXhwbGljaXRseSBkaXNhYmxlZC4KKwkgKi8KKwlpZiAoKGZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQgJiBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkgJiYKKwkgICAgIShmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0JkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCV8oInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAib24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChmc19wYXJhbS5zX2Jsb2Nrc19wZXJfZ3JvdXApIHsKKwkJaWYgKGZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cCA8IDI1NiB8fAorCQkgICAgZnNfcGFyYW0uc19ibG9ja3NfcGVyX2dyb3VwID4gOCAqICh1bnNpZ25lZCkgYmxvY2tzaXplKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZW4gdGhlIC1nIG9wdGlvbiB3aWxsCisJICogc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzIHBlciBncm91cC4KKwkgKi8KKwlpZiAoZnNfcGFyYW0uc19mZWF0dXJlX3JvX2NvbXBhdCAmIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpIHsKKwkJZnNfcGFyYW0uc19jbHVzdGVyc19wZXJfZ3JvdXAgPSBmc19wYXJhbS5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWZzX3BhcmFtLnNfYmxvY2tzX3Blcl9ncm91cCA9IDA7CisJfQorCisJaWYgKGlub2RlX3NpemUgPT0gMCkKKwkJaW5vZGVfc2l6ZSA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiaW5vZGVfc2l6ZSIsIDApOworCWlmICghZmxleF9iZ19zaXplICYmIChmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkJICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKQorCQlmbGV4X2JnX3NpemUgPSBnZXRfaW50X2Zyb21fcHJvZmlsZShmc190eXBlcywKKwkJCQkJCSAgICAiZmxleF9iZ19zaXplIiwgMTYpOworCWlmIChmbGV4X2JnX3NpemUpIHsKKwkJaWYgKCEoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICAgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQlfKCJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvICIKKwkJCQkgICJmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWZzX3BhcmFtLnNfbG9nX2dyb3Vwc19wZXJfZmxleCA9IGludF9sb2cyKGZsZXhfYmdfc2l6ZSk7CisJfQorCisJaWYgKGlub2RlX3NpemUgJiYgZnNfcGFyYW0uc19yZXZfbGV2ZWwgPj0gRVhUMl9EWU5BTUlDX1JFVikgeworCQlpZiAoaW5vZGVfc2l6ZSA8IEVYVDJfR09PRF9PTERfSU5PREVfU0laRSB8fAorCQkgICAgaW5vZGVfc2l6ZSA+IEVYVDJfQkxPQ0tfU0laRSgmZnNfcGFyYW0pIHx8CisJCSAgICBpbm9kZV9zaXplICYgKGlub2RlX3NpemUgLSAxKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIpLAorCQkJCWlub2RlX3NpemUsIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSwKKwkJCQlibG9ja3NpemUpOworCQkJZXhpdCgxKTsKKwkJfQorCQlmc19wYXJhbS5zX2lub2RlX3NpemUgPSBpbm9kZV9zaXplOworCX0KKworCS8qIE1ha2Ugc3VyZSBudW1iZXIgb2YgaW5vZGVzIHNwZWNpZmllZCB3aWxsIGZpdCBpbiAzMiBiaXRzICovCisJaWYgKG51bV9pbm9kZXMgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgbjsKKwkJbiA9IGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSAqIGJsb2Nrc2l6ZSAvIGlub2RlX3JhdGlvOworCQlpZiAobiA+IE1BWF8zMl9OVU0pIHsKKwkJCWlmIChmc19wYXJhbS5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkJICAgIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVCkKKwkJCQludW1faW5vZGVzID0gTUFYXzMyX05VTTsKKwkJCWVsc2UgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSAiCisJCQkJCSAgImlub2RlIHJhdGlvPyIpLCBuKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChudW1faW5vZGVzID4gTUFYXzMyX05VTSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCV8oInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIpLAorCQkJICBudW1faW5vZGVzKTsKKwkJZXhpdCgxKTsKKwl9CisJLyoKKwkgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGlub2RlcyBiYXNlZCBvbiB0aGUgaW5vZGUgcmF0aW8KKwkgKi8KKwlmc19wYXJhbS5zX2lub2Rlc19jb3VudCA9IG51bV9pbm9kZXMgPyBudW1faW5vZGVzIDoKKwkJKGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSAqIGJsb2Nrc2l6ZSkgLyBpbm9kZV9yYXRpbzsKKworCWlmICgoKCh1bnNpZ25lZCBsb25nIGxvbmcpZnNfcGFyYW0uc19pbm9kZXNfY291bnQpICoKKwkgICAgIChpbm9kZV9zaXplID8gaW5vZGVfc2l6ZSA6IEVYVDJfR09PRF9PTERfSU5PREVfU0laRSkpID49CisJICAgICgoZXh0MmZzX2Jsb2Nrc19jb3VudCgmZnNfcGFyYW0pKSAqCisJICAgICBFWFQyX0JMT0NLX1NJWkUoJmZzX3BhcmFtKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAiCisJCQkJCSAgIigldSkgdG9vIGJpZyBmb3IgYVxuXHQiCisJCQkJCSAgImZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2NrcywgIgorCQkJCQkgICJzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG5cdCIKKwkJCQkJICAib3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIpLAorCQkJaW5vZGVfc2l6ZSA/IGlub2RlX3NpemUgOiBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUsCisJCQlmc19wYXJhbS5zX2lub2Rlc19jb3VudCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSk7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2NrcyB0byByZXNlcnZlCisJICovCisJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldCgmZnNfcGFyYW0sIHJlc2VydmVkX3JhdGlvICoKKwkJCQkgIGV4dDJmc19ibG9ja3NfY291bnQoJmZzX3BhcmFtKSAvIDEwMC4wKTsKKworCWZyZWUoZnNfdHlwZSk7CisJZnJlZSh1c2FnZV90eXBlcyk7Cit9CisKK3N0YXRpYyBpbnQgc2hvdWxkX2RvX3VuZG8oY29uc3QgY2hhciAqbmFtZSkKK3sKKwllcnJjb2RlX3QgcmV0dmFsOworCWlvX2NoYW5uZWwgY2hhbm5lbDsKKwlfX3UxNglzX21hZ2ljOworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHN1cGVyOworCWlvX21hbmFnZXIgbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwlpbnQgY3N1bV9mbGFnLCBmb3JjZV91bmRvOworCisJY3N1bV9mbGFnID0gRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoJmZzX3BhcmFtLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CisJZm9yY2VfdW5kbyA9IGdldF9pbnRfZnJvbV9wcm9maWxlKGZzX3R5cGVzLCAiZm9yY2VfdW5kbyIsIDApOworCWlmICghZm9yY2VfdW5kbyAmJiAoIWNzdW1fZmxhZyB8fCAhbGF6eV9pdGFibGVfaW5pdCkpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gbWFuYWdlci0+b3BlbihuYW1lLCBJT19GTEFHX0VYQ0xVU0lWRSwgICZjaGFubmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IGhhbmRsZSBlcnJvciBjYXNlcyBpbnN0ZWFkIHdlCisJCSAqIGRlY2xhcmUgdGhhdCB0aGUgZmlsZSBzeXN0ZW0gZG9lc24ndCBleGlzdAorCQkgKiBhbmQgbGV0IHRoZSByZXN0IG9mIG1rZTJmcyB0YWtlIGNhcmUgb2YKKwkJICogZXJyb3IKKwkJICovCisJCXJldHZhbCA9IDA7CisJCWdvdG8gb3Blbl9lcnJfb3V0OworCX0KKworCWlvX2NoYW5uZWxfc2V0X2Jsa3NpemUoY2hhbm5lbCwgU1VQRVJCTE9DS19PRkZTRVQpOworCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChjaGFubmVsLCAxLCAtU1VQRVJCTE9DS19TSVpFLCAmc3VwZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnJfb3V0OworCX0KKworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorCXNfbWFnaWMgPSBleHQyZnNfc3dhYjE2KHN1cGVyLnNfbWFnaWMpOworI2Vsc2UKKwlzX21hZ2ljID0gc3VwZXIuc19tYWdpYzsKKyNlbmRpZgorCisJaWYgKHNfbWFnaWMgPT0gRVhUMl9TVVBFUl9NQUdJQykKKwkJcmV0dmFsID0gMTsKKworZXJyX291dDoKKwlpb19jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOworCitvcGVuX2Vycl9vdXQ6CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG1rZTJmc19zZXR1cF90ZGIoY29uc3QgY2hhciAqbmFtZSwgaW9fbWFuYWdlciAqaW9fcHRyKQoreworCWVycmNvZGVfdCByZXR2YWwgPSBFTk9NRU07CisJY2hhciAqdGRiX2RpciA9IE5VTEwsICp0ZGJfZmlsZSA9IE5VTEw7CisJY2hhciAqZGV2X25hbWUsICp0bXBfbmFtZTsKKwlpbnQgZnJlZV90ZGJfZGlyID0gMDsKKworCS8qCisJICogQ29uZmlndXJhdGlvbiB2aWEgYSBjb25mIGZpbGUgd291bGQgYmUKKwkgKiBuaWNlCisJICovCisJdGRiX2RpciA9IGdldGVudigiRTJGU1BST0dTX1VORE9fRElSIik7CisJaWYgKCF0ZGJfZGlyKSB7CisJCXByb2ZpbGVfZ2V0X3N0cmluZyhwcm9maWxlLCAiZGVmYXVsdHMiLAorCQkJCSAgICJ1bmRvX2RpciIsIDAsICIvdmFyL2xpYi9lMmZzcHJvZ3MiLAorCQkJCSAgICZ0ZGJfZGlyKTsKKwkJZnJlZV90ZGJfZGlyID0gMTsKKwl9CisKKwlpZiAoIXN0cmNtcCh0ZGJfZGlyLCAibm9uZSIpIHx8ICh0ZGJfZGlyWzBdID09IDApIHx8CisJICAgIGFjY2Vzcyh0ZGJfZGlyLCBXX09LKSkgeworCQlpZiAoZnJlZV90ZGJfZGlyKQorCQkJZnJlZSh0ZGJfZGlyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG1wX25hbWUgPSBzdHJkdXAobmFtZSk7CisJaWYgKCF0bXBfbmFtZSkKKwkJZ290byBlcnJvdXQ7CisJZGV2X25hbWUgPSBiYXNlbmFtZSh0bXBfbmFtZSk7CisJdGRiX2ZpbGUgPSBtYWxsb2Moc3RybGVuKHRkYl9kaXIpICsgOCArIHN0cmxlbihkZXZfbmFtZSkgKyA3ICsgMSk7CisJaWYgKCF0ZGJfZmlsZSkgeworCQlmcmVlKHRtcF9uYW1lKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCXNwcmludGYodGRiX2ZpbGUsICIlcy9ta2UyZnMtJXMuZTJ1bmRvIiwgdGRiX2RpciwgZGV2X25hbWUpOworCWZyZWUodG1wX25hbWUpOworCisJaWYgKCFhY2Nlc3ModGRiX2ZpbGUsIEZfT0spKSB7CisJCWlmICh1bmxpbmsodGRiX2ZpbGUpIDwgMCkgeworCQkJcmV0dmFsID0gZXJybm87CisJCQlnb3RvIGVycm91dDsKKwkJfQorCX0KKworCXNldF91bmRvX2lvX2JhY2tpbmdfbWFuYWdlcigqaW9fcHRyKTsKKwkqaW9fcHRyID0gdW5kb19pb19tYW5hZ2VyOworCXJldHZhbCA9IHNldF91bmRvX2lvX2JhY2t1cF9maWxlKHRkYl9maWxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludGYoXygiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lICIKKwkJICJ1c2luZyB0aGUgY29tbWFuZDpcbiIKKwkJICIgICAgZTJ1bmRvICVzICVzXG5cbiIpLCB0ZGJfZmlsZSwgbmFtZSk7CisKKwlpZiAoZnJlZV90ZGJfZGlyKQorCQlmcmVlKHRkYl9kaXIpOworCWZyZWUodGRiX2ZpbGUpOworCXJldHVybiAwOworCitlcnJvdXQ6CisJaWYgKGZyZWVfdGRiX2RpcikKKwkJZnJlZSh0ZGJfZGlyKTsKKwlmcmVlKHRkYl9maWxlKTsKKwljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQlfKCJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iKSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBta2UyZnNfZGlzY2FyZF9kZXZpY2UoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJmc19udW1lcmljX3Byb2dyZXNzX3N0cnVjdCBwcm9ncmVzczsKKwlibGs2NF90IGJsb2NrcyA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwlibGs2NF90IGNvdW50ID0gRElTQ0FSRF9TVEVQX01COworCWJsazY0X3QgY3VyOworCWludCByZXR2YWwgPSAwOworCisJLyoKKwkgKiBMZXQncyB0cnkgaWYgZGlzY2FyZCByZWFsbHkgd29ya3Mgb24gdGhlIGRldmljZSwgc28KKwkgKiB3ZSBkbyBub3QgcHJpbnQgbnVtZXJpYyBwcm9ncmVzcyByZXN1bHRpbmcgaW4gZmFpbHVyZQorCSAqIGFmdGVyd2FyZHMuCisJICovCisJcmV0dmFsID0gaW9fY2hhbm5lbF9kaXNjYXJkKGZzLT5pbywgMCwgZnMtPmJsb2Nrc2l6ZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwljdXIgPSBmcy0+YmxvY2tzaXplOworCisJY291bnQgKj0gKDEwMjQgKiAxMDI0KTsKKwljb3VudCAvPSBmcy0+YmxvY2tzaXplOworCisJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdChmcywgJnByb2dyZXNzLAorCQkJCSAgICAgXygiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiKSwKKwkJCQkgICAgIGJsb2Nrcyk7CisJd2hpbGUgKGN1ciA8IGJsb2NrcykgeworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc191cGRhdGUoZnMsICZwcm9ncmVzcywgY3VyKTsKKworCQlpZiAoY3VyICsgY291bnQgPiBibG9ja3MpCisJCQljb3VudCA9IGJsb2NrcyAtIGN1cjsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX2Rpc2NhcmQoZnMtPmlvLCBjdXIsIGNvdW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCWJyZWFrOworCQljdXIgKz0gY291bnQ7CisJfQorCisJaWYgKHJldHZhbCkgeworCQlleHQyZnNfbnVtZXJpY19wcm9ncmVzc19jbG9zZShmcywgJnByb2dyZXNzLAorCQkJCSAgICAgIF8oImZhaWxlZCAtICIpKTsKKwkJaWYgKCFxdWlldCkKKwkJCXByaW50ZigiJXNcbiIsZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwl9IGVsc2UKKwkJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfY2xvc2UoZnMsICZwcm9ncmVzcywKKwkJCQkgICAgICBfKCJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIikpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZml4X2NsdXN0ZXJfYmdfY291bnRzKGV4dDJfZmlsc3lzIGZzKQoreworCWJsazY0X3QJY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCB0b3RfZnJlZTsKKwl1bnNpZ25lZCBudW0gPSAwOworCWludAlncnBfZnJlZSwgbnVtX2ZyZWUsIGdyb3VwOworCisJbnVtX2NsdXN0ZXJzID0gRVhUMkZTX0IyQyhmcywgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKTsKKwl0b3RfZnJlZSA9IG51bV9mcmVlID0gZ3JvdXAgPSBncnBfZnJlZSA9IDA7CisJZm9yIChjbHVzdGVyID0gRVhUMkZTX0IyQyhmcywgZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCSAgICAgY2x1c3RlciA8IG51bV9jbHVzdGVyczsgY2x1c3RlcisrKSB7CisJCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLAorCQkJCQkgICAgICAgRVhUMkZTX0MyQihmcywgY2x1c3RlcikpKSB7CisJCQlncnBfZnJlZSsrOworCQkJdG90X2ZyZWUrKzsKKwkJfQorCQludW0rKzsKKwkJaWYgKChudW0gPT0gZnMtPnN1cGVyLT5zX2NsdXN0ZXJzX3Blcl9ncm91cCkgfHwKKwkJICAgIChjbHVzdGVyID09IG51bV9jbHVzdGVycy0xKSkgeworCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXAsIGdycF9mcmVlKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJCQludW0gPSAwOworCQkJZ3JwX2ZyZWUgPSAwOworCQkJZ3JvdXArKzsKKwkJfQorCX0KKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgRVhUMkZTX0MyQihmcywgdG90X2ZyZWUpKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfcXVvdGFfaW5vZGVzKGV4dDJfZmlsc3lzIGZzKQoreworCXF1b3RhX2N0eF90IHFjdHg7CisKKwlxdW90YV9pbml0X2NvbnRleHQoJnFjdHgsIGZzLCAtMSk7CisJcXVvdGFfY29tcHV0ZV91c2FnZShxY3R4KTsKKwlxdW90YV93cml0ZV9pbm9kZShxY3R4LCBxdW90YXR5cGUpOworCXF1b3RhX3JlbGVhc2VfY29udGV4dCgmcWN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZXJyY29kZV90CXJldHZhbCA9IDA7CisJZXh0Ml9maWxzeXMJZnM7CisJYmFkYmxvY2tzX2xpc3QJYmJfbGlzdCA9IDA7CisJdW5zaWduZWQgaW50CWpvdXJuYWxfYmxvY2tzOworCXVuc2lnbmVkIGludAlpLCBjaGVja2ludGVydmFsOworCWludAkJbWF4X21udF9jb3VudDsKKwlpbnQJCXZhbCwgaGFzaF9hbGc7CisJaW50CQlmbGFnczsKKwlpbnQJCW9sZF9iaXRtYXBzOworCWlvX21hbmFnZXIJaW9fcHRyOworCWNoYXIJCXRkYl9zdHJpbmdbNDBdOworCWNoYXIJCSpoYXNoX2FsZ19zdHI7CisJaW50CQlpdGFibGVfemVyb2VkID0gMDsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKwlQUlMoYXJnYywgYXJndik7CisKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCisJaWYgKHNob3VsZF9kb191bmRvKGRldmljZV9uYW1lKSkgeworCQlyZXR2YWwgPSBta2UyZnNfc2V0dXBfdGRiKGRldmljZV9uYW1lLCAmaW9fcHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBzdXBlcmJsb2NrLi4uLgorCSAqLworCWZsYWdzID0gRVhUMl9GTEFHX0VYQ0xVU0lWRTsKKwlpZiAoZGlyZWN0X2lvKQorCQlmbGFncyB8PSBFWFQyX0ZMQUdfRElSRUNUX0lPOworCXByb2ZpbGVfZ2V0X2Jvb2xlYW4ocHJvZmlsZSwgIm9wdGlvbnMiLCAib2xkX2JpdG1hcHMiLCAwLCAwLAorCQkJICAgICZvbGRfYml0bWFwcyk7CisJaWYgKCFvbGRfYml0bWFwcykKKwkJZmxhZ3MgfD0gRVhUMl9GTEFHXzY0QklUUzsKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHdlIHByaW50IGhvdyBtYW55IGlub2RlIHRhYmxlcyBvciBibG9jayBncm91cHMKKwkgKiBvciB3aGF0ZXZlciB3ZSd2ZSB3cml0dGVuIHNvIGZhci4gIFRoZSBxdWlldCBmbGFnIGRpc2FibGVzCisJICogdGhpcywgYWxvbmcgd2l0aCBhIGxvdCBvZiBvdGhlciBvdXRwdXQuCisJICovCisJaWYgKCFxdWlldCkKKwkJZmxhZ3MgfD0gRVhUMl9GTEFHX1BSSU5UX1BST0dSRVNTOworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKGRldmljZV9uYW1lLCBmbGFncywgJmZzX3BhcmFtLCBpb19wdHIsICZmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGRldmljZV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siKSk7CisJCWV4aXQoMSk7CisJfQorCisJLyogQ2FsY3VsYXRlIGpvdXJuYWwgYmxvY2tzICovCisJaWYgKCFqb3VybmFsX2RldmljZSAmJiAoKGpvdXJuYWxfc2l6ZSkgfHwKKwkJKGZzX3BhcmFtLnNfZmVhdHVyZV9jb21wYXQgJgorCQkgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpKQorCQlqb3VybmFsX2Jsb2NrcyA9IGZpZ3VyZV9qb3VybmFsX3NpemUoam91cm5hbF9zaXplLCBmcyk7CisKKwkvKiBDYW4ndCB1bmRvIGRpc2NhcmQgLi4uICovCisJaWYgKCFub2FjdGlvbiAmJiBkaXNjYXJkICYmIChpb19wdHIgIT0gdW5kb19pb19tYW5hZ2VyKSkgeworCQlyZXR2YWwgPSBta2UyZnNfZGlzY2FyZF9kZXZpY2UoZnMpOworCQlpZiAoIXJldHZhbCAmJiBpb19jaGFubmVsX2Rpc2NhcmRfemVyb2VzX2RhdGEoZnMtPmlvKSkgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRmKCIlcyIsCisJCQkJICAgICAgIF8oIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAiCisJCQkJCSAiMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iKSk7CisJCQlsYXp5X2l0YWJsZV9pbml0ID0gMTsKKwkJCWl0YWJsZV96ZXJvZWQgPSAxOworCQl9CisJfQorCisJc3ByaW50Zih0ZGJfc3RyaW5nLCAidGRiX2RhdGFfc2l6ZT0lZCIsIGZzLT5ibG9ja3NpemUgPD0gNDA5NiA/CisJCTMyNzY4IDogZnMtPmJsb2Nrc2l6ZSAqIDgpOworCWlvX2NoYW5uZWxfc2V0X29wdGlvbnMoZnMtPmlvLCB0ZGJfc3RyaW5nKTsKKworCWlmIChmc19wYXJhbS5zX2ZsYWdzICYgRVhUMl9GTEFHU19URVNUX0ZJTEVTWVMpCisJCWZzLT5zdXBlci0+c19mbGFncyB8PSBFWFQyX0ZMQUdTX1RFU1RfRklMRVNZUzsKKworCWlmICgoZnNfcGFyYW0uc19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgIChFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UU3xFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykpIHx8CisJICAgIChmc19wYXJhbS5zX2ZlYXR1cmVfcm9fY29tcGF0ICYKKwkgICAgIChFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRXxFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNfAorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LfAorCSAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRVhUUkFfSVNJWkUpKSkKKwkJZnMtPnN1cGVyLT5zX2tieXRlc193cml0dGVuID0gMTsKKworCS8qCisJICogV2lwZSBvdXQgdGhlIG9sZCBvbi1kaXNrIHN1cGVyYmxvY2sKKwkgKi8KKwlpZiAoIW5vYWN0aW9uKQorCQl6YXBfc2VjdG9yKGZzLCAyLCA2KTsKKworCS8qCisJICogUGFyc2Ugb3IgZ2VuZXJhdGUgYSBVVUlEIGZvciB0aGUgZmlsZXN5c3RlbQorCSAqLworCWlmIChmc191dWlkKSB7CisJCWlmICh1dWlkX3BhcnNlKGZzX3V1aWQsIGZzLT5zdXBlci0+c191dWlkKSAhPTApIHsKKwkJCWNvbV9lcnIoZGV2aWNlX25hbWUsIDAsICJjb3VsZCBub3QgcGFyc2UgVVVJRDogJXNcbiIsCisJCQkJZnNfdXVpZCk7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlCisJCXV1aWRfZ2VuZXJhdGUoZnMtPnN1cGVyLT5zX3V1aWQpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBkaXJlY3RvcnkgaW5kZXggdmFyaWFibGVzCisJICovCisJaGFzaF9hbGdfc3RyID0gZ2V0X3N0cmluZ19mcm9tX3Byb2ZpbGUoZnNfdHlwZXMsICJoYXNoX2FsZyIsCisJCQkJCSAgICAgICAiaGFsZl9tZDQiKTsKKwloYXNoX2FsZyA9IGUycF9zdHJpbmcyaGFzaChoYXNoX2FsZ19zdHIpOworCWZyZWUoaGFzaF9hbGdfc3RyKTsKKwlmcy0+c3VwZXItPnNfZGVmX2hhc2hfdmVyc2lvbiA9IChoYXNoX2FsZyA+PSAwKSA/IGhhc2hfYWxnIDoKKwkJRVhUMl9IQVNIX0hBTEZfTUQ0OworCXV1aWRfZ2VuZXJhdGUoKHVuc2lnbmVkIGNoYXIgKikgZnMtPnN1cGVyLT5zX2hhc2hfc2VlZCk7CisKKwkvKgorCSAqIFBlcmlvZGljIGNoZWNrcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB2aWEgY29uZmlnIGZpbGUuCisJICogTm90ZSB3ZSBvdmVycmlkZSB0aGUga2VybmVsIGluY2x1ZGUgZmlsZSdzIGlkZWEgb2Ygd2hhdCB0aGUgZGVmYXVsdAorCSAqIGNoZWNrIGludGVydmFsIChuZXZlcikgc2hvdWxkIGJlLiAgSXQncyBhIGdvb2QgaWRlYSB0byBjaGVjayBhdAorCSAqIGxlYXN0ICpvY2Nhc2lvbmFsbHkqLCBzcGVjaWFsbHkgc2luY2Ugc2VydmVycyB3aWxsIG5ldmVyIHJhcmVseSBnZXQKKwkgKiB0byByZWJvb3QsIHNpbmNlIExpbnV4IGlzIHNvIHJvYnVzdCB0aGVzZSBkYXlzLiAgOi0pCisJICoKKwkgKiAxODAgZGF5cyAoc2l4IG1vbnRocykgc2VlbXMgbGlrZSBhIGdvb2QgdmFsdWUuCisJICovCisjaWZkZWYgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTAorI3VuZGVmIEVYVDJfREZMX0NIRUNLSU5URVJWQUwKKyNlbmRpZgorI2RlZmluZSBFWFQyX0RGTF9DSEVDS0lOVEVSVkFMICg4NjQwMEwgKiAxODBMKQorCisJaWYgKGdldF9ib29sX2Zyb21fcHJvZmlsZShmc190eXBlcywgImVuYWJsZV9wZXJpb2RpY19mc2NrIiwgMCkpIHsKKwkJZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwgPSBFWFQyX0RGTF9DSEVDS0lOVEVSVkFMOworCQlmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudCA9IEVYVDJfREZMX01BWF9NTlRfQ09VTlQ7CisJCS8qCisJCSAqIEFkZCAiaml0dGVyIiB0byB0aGUgc3VwZXJibG9jaydzIGNoZWNrIGludGVydmFsIHNvIHRoYXQgd2UKKwkJICogZG9uJ3QgY2hlY2sgYWxsIHRoZSBmaWxlc3lzdGVtcyBhdCB0aGUgc2FtZSB0aW1lLiAgV2UgdXNlIGEKKwkJICoga2x1ZGd5IGhhY2sgb2YgdXNpbmcgdGhlIFVVSUQgdG8gZGVyaXZlIGEgcmFuZG9tIGppdHRlciB2YWx1ZQorCQkgKi8KKwkJZm9yIChpID0gMCwgdmFsID0gMCA7IGkgPCBzaXplb2YoZnMtPnN1cGVyLT5zX3V1aWQpOyBpKyspCisJCQl2YWwgKz0gZnMtPnN1cGVyLT5zX3V1aWRbaV07CisJCWZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50ICs9IHZhbCAlIEVYVDJfREZMX01BWF9NTlRfQ09VTlQ7CisJfSBlbHNlCisJCWZzLT5zdXBlci0+c19tYXhfbW50X2NvdW50ID0gLTE7CisKKwkvKgorCSAqIE92ZXJyaWRlIHRoZSBjcmVhdG9yIE9TLCBpZiBhcHBsaWNhYmxlCisJICovCisJaWYgKGNyZWF0b3Jfb3MgJiYgIXNldF9vcyhmcy0+c3VwZXIsIGNyZWF0b3Jfb3MpKSB7CisJCWNvbV9lcnIgKHByb2dyYW1fbmFtZSwgMCwgXygidW5rbm93biBvcyAtICVzIiksIGNyZWF0b3Jfb3MpOworCQlleGl0KDEpOworCX0KKworCS8qCisJICogRm9yIHRoZSBIdXJkLCB3ZSB3aWxsIHR1cm4gb2ZmIGZpbGV0eXBlIHNpbmNlIGl0IGRvZXNuJ3QKKwkgKiBzdXBwb3J0IGl0LgorCSAqLworCWlmIChmcy0+c3VwZXItPnNfY3JlYXRvcl9vcyA9PSBFWFQyX09TX0hVUkQpCisJCWZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICY9CisJCQl+RVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFOworCisJLyoKKwkgKiBTZXQgdGhlIHZvbHVtZSBsYWJlbC4uLgorCSAqLworCWlmICh2b2x1bWVfbGFiZWwpIHsKKwkJbWVtc2V0KGZzLT5zdXBlci0+c192b2x1bWVfbmFtZSwgMCwKKwkJICAgICAgIHNpemVvZihmcy0+c3VwZXItPnNfdm9sdW1lX25hbWUpKTsKKwkJc3RybmNweShmcy0+c3VwZXItPnNfdm9sdW1lX25hbWUsIHZvbHVtZV9sYWJlbCwKKwkJCXNpemVvZihmcy0+c3VwZXItPnNfdm9sdW1lX25hbWUpKTsKKwl9CisKKwkvKgorCSAqIFNldCB0aGUgbGFzdCBtb3VudCBkaXJlY3RvcnkKKwkgKi8KKwlpZiAobW91bnRfZGlyKSB7CisJCW1lbXNldChmcy0+c3VwZXItPnNfbGFzdF9tb3VudGVkLCAwLAorCQkgICAgICAgc2l6ZW9mKGZzLT5zdXBlci0+c19sYXN0X21vdW50ZWQpKTsKKwkJc3RybmNweShmcy0+c3VwZXItPnNfbGFzdF9tb3VudGVkLCBtb3VudF9kaXIsCisJCQlzaXplb2YoZnMtPnN1cGVyLT5zX2xhc3RfbW91bnRlZCkpOworCX0KKworCWlmICghcXVpZXQgfHwgbm9hY3Rpb24pCisJCXNob3dfc3RhdHMoZnMpOworCisJaWYgKG5vYWN0aW9uKQorCQlleGl0KDApOworCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWKSB7CisJCWNyZWF0ZV9qb3VybmFsX2Rldihmcyk7CisJCWV4aXQoZXh0MmZzX2Nsb3NlKGZzKSA/IDEgOiAwKTsKKwl9CisKKwlpZiAoYmFkX2Jsb2Nrc19maWxlbmFtZSkKKwkJcmVhZF9iYl9maWxlKGZzLCAmYmJfbGlzdCwgYmFkX2Jsb2Nrc19maWxlbmFtZSk7CisJaWYgKGNmbGFnKQorCQl0ZXN0X2Rpc2soZnMsICZiYl9saXN0KTsKKworCWhhbmRsZV9iYWRfYmxvY2tzKGZzLCBiYl9saXN0KTsKKwlmcy0+c3RyaWRlID0gZnNfc3RyaWRlID0gZnMtPnN1cGVyLT5zX3JhaWRfc3RyaWRlOworCWlmICghcXVpZXQpCisJCXByaW50ZigiJXMiLCBfKCJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIikpOworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV90YWJsZXMoZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIpKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKCFxdWlldCkKKwkJcHJpbnRmKCIlcyIsIF8oImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iKSk7CisKKwlyZXR2YWwgPSBleHQyZnNfY29udmVydF9zdWJjbHVzdGVyX2JpdG1hcChmcywgJmZzLT5ibG9ja19tYXApOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIlxuXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIikpOworCQlleGl0KDEpOworCX0KKworCWlmIChzdXBlcl9vbmx5KSB7CisJCWZzLT5zdXBlci0+c19zdGF0ZSB8PSBFWFQyX0VSUk9SX0ZTOworCQlmcy0+ZmxhZ3MgJj0gfihFWFQyX0ZMQUdfSUJfRElSVFl8RVhUMl9GTEFHX0JCX0RJUlRZKTsKKwkJLyogCisJCSAqIFRoZSBjb21tYW5kICJta2UyZnMgLVMiIGlzIHVzZWQgdG8gcmVjb3ZlcgorCQkgKiBjb3JydXB0ZWQgZmlsZSBzeXN0ZW1zLCBzbyBkbyBub3QgbWFyayBhbnkgb2YgdGhlCisJCSAqIGlub2RlcyBhcyB1bnVzZWQ7IHdlIHdhbnQgZTJmc2NrIHRvIGNvbnNpZGVyIGFsbAorCQkgKiBpbm9kZXMgYXMgcG90ZW50aWFsbHkgY29udGFpbmluZyByZWNvdmVyYWJsZSBkYXRhLgorCQkgKi8KKwkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykKKwkJCQlleHQyZnNfYmdfaXRhYmxlX3VudXNlZF9zZXQoZnMsIGksIDApOworCQl9CisJfSBlbHNlIHsKKwkJLyogcnN2IG11c3QgYmUgYSBwb3dlciBvZiB0d28gKDY0a0IgaXMgTUQgUkFJRCBzYiBhbGlnbm1lbnQpICovCisJCWJsazY0X3QgcnN2ID0gNjU1MzYgLyBmcy0+YmxvY2tzaXplOworCQlibGs2NF90IGJsb2NrcyA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsKKwkJYmxrNjRfdCBzdGFydDsKKwkJYmxrNjRfdCByZXRfYmxrOworCisjaWZkZWYgWkFQX0JPT1RCTE9DSworCQl6YXBfc2VjdG9yKGZzLCAwLCAyKTsKKyNlbmRpZgorCisJCS8qCisJCSAqIFdpcGUgb3V0IGFueSBvbGQgTUQgUkFJRCAob3Igb3RoZXIpIG1ldGFkYXRhIGF0IHRoZSBlbmQKKwkJICogb2YgdGhlIGRldmljZS4gIFRoaXMgd2lsbCBhbHNvIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2UgaXMKKwkJICogYXMgbGFyZ2UgYXMgd2UgdGhpbmsuICBCZSBjYXJlZnVsIHdpdGggdmVyeSBzbWFsbCBkZXZpY2VzLgorCQkgKi8KKwkJc3RhcnQgPSAoYmxvY2tzICYgfihyc3YgLSAxKSk7CisJCWlmIChzdGFydCA+IHJzdikKKwkJCXN0YXJ0IC09IHJzdjsKKwkJaWYgKHN0YXJ0ID4gMCkKKwkJCXJldHZhbCA9IGV4dDJmc196ZXJvX2Jsb2NrczIoZnMsIHN0YXJ0LCBibG9ja3MgLSBzdGFydCwKKwkJCQkJCSAgICAmcmV0X2JsaywgTlVMTCk7CisKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iKSwKKwkJCQlyZXRfYmxrKTsKKwkJfQorCQl3cml0ZV9pbm9kZV90YWJsZXMoZnMsIGxhenlfaXRhYmxlX2luaXQsIGl0YWJsZV96ZXJvZWQpOworCQljcmVhdGVfcm9vdF9kaXIoZnMpOworCQljcmVhdGVfbG9zdF9hbmRfZm91bmQoZnMpOworCQlyZXNlcnZlX2lub2Rlcyhmcyk7CisJCWNyZWF0ZV9iYWRfYmxvY2tfaW5vZGUoZnMsIGJiX2xpc3QpOworCQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkJICAgIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX3Jlc2l6ZV9pbm9kZShmcyk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJY29tX2VycigiZXh0MmZzX2NyZWF0ZV9yZXNpemVfaW5vZGUiLCByZXR2YWwsCisJCQkJCSIlcyIsCisJCQkJXygid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfQorCisJaWYgKGpvdXJuYWxfZGV2aWNlKSB7CisJCWV4dDJfZmlsc3lzCWpmczsKKworCQlpZiAoIWZvcmNlKQorCQkJY2hlY2tfcGxhdXNpYmlsaXR5KGpvdXJuYWxfZGV2aWNlKTsKKwkJY2hlY2tfbW91bnQoam91cm5hbF9kZXZpY2UsIGZvcmNlLCBfKCJqb3VybmFsIikpOworCisJCXJldHZhbCA9IGV4dDJmc19vcGVuKGpvdXJuYWxfZGV2aWNlLCBFWFQyX0ZMQUdfUld8CisJCQkJICAgICBFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0ssIDAsCisJCQkJICAgICBmcy0+YmxvY2tzaXplLCB1bml4X2lvX21hbmFnZXIsICZqZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iKSwKKwkJCQlqb3VybmFsX2RldmljZSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICghcXVpZXQpIHsKKwkJCXByaW50ZihfKCJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIpLAorCQkJICAgICAgIGpvdXJuYWxfZGV2aWNlKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9kZXZpY2UoZnMsIGpmcyk7CisJCWlmKHJldHZhbCkgeworCQkJY29tX2VyciAocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJIF8oIlxuXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIiksCisJCQkJIGpvdXJuYWxfZGV2aWNlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCFxdWlldCkKKwkJCXByaW50ZigiJXMiLCBfKCJkb25lXG4iKSk7CisJCWV4dDJmc19jbG9zZShqZnMpOworCQlmcmVlKGpvdXJuYWxfZGV2aWNlKTsKKwl9IGVsc2UgaWYgKChqb3VybmFsX3NpemUpIHx8CisJCSAgIChmc19wYXJhbS5zX2ZlYXR1cmVfY29tcGF0ICYKKwkJICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwpKSB7CisJCWlmIChzdXBlcl9vbmx5KSB7CisJCQlwcmludGYoIiVzIiwgXygiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIpKTsKKwkJCWZzLT5zdXBlci0+c19qb3VybmFsX2ludW0gPSBFWFQyX0pPVVJOQUxfSU5POworCQkJZ290byBub19qb3VybmFsOworCQl9CisKKwkJaWYgKCFqb3VybmFsX2Jsb2NrcykgeworCQkJZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICY9CisJCQkJfkVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJCQlnb3RvIG5vX2pvdXJuYWw7CisJCX0KKwkJaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKF8oIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIpLAorCQkJICAgICAgIGpvdXJuYWxfYmxvY2tzKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9pbm9kZShmcywgam91cm5hbF9ibG9ja3MsCisJCQkJCQkgIGpvdXJuYWxfZmxhZ3MpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJCV8oIlxuXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiKSk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICghcXVpZXQpCisJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworCX0KK25vX2pvdXJuYWw6CisJaWYgKCFzdXBlcl9vbmx5ICYmCisJICAgIGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCkgeworCQlyZXR2YWwgPSBleHQyZnNfbW1wX2luaXQoZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJcbkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlICIKKwkJCQkgICJtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoIXF1aWV0KQorCQkJcHJpbnRmKF8oIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCAiCisJCQkJICJ3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIiksCisJCQkgICAgICAgZnMtPnN1cGVyLT5zX21tcF91cGRhdGVfaW50ZXJ2YWwpOworCX0KKworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRSgmZnNfcGFyYW0sCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQklHQUxMT0MpKQorCQlmaXhfY2x1c3Rlcl9iZ19jb3VudHMoZnMpOworCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRSgmZnNfcGFyYW0sCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpKQorCQljcmVhdGVfcXVvdGFfaW5vZGVzKGZzKTsKKworCWlmICghcXVpZXQpCisJCXByaW50ZigiJXMiLCBfKCJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCAiCisJCSAgICAgICAiZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiKSk7CisJY2hlY2tpbnRlcnZhbCA9IGZzLT5zdXBlci0+c19jaGVja2ludGVydmFsOworCW1heF9tbnRfY291bnQgPSBmcy0+c3VwZXItPnNfbWF4X21udF9jb3VudDsKKwlyZXR2YWwgPSBleHQyZnNfY2xvc2UoZnMpOworCWlmIChyZXR2YWwpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJcbldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIpKTsKKwl9IGVsc2UgaWYgKCFxdWlldCkgeworCQlwcmludGYoIiVzIiwgXygiZG9uZVxuXG4iKSk7CisJCWlmICghZ2V0ZW52KCJNS0UyRlNfU0tJUF9DSEVDS19NU0ciKSkKKwkJCXByaW50X2NoZWNrX21lc3NhZ2UobWF4X21udF9jb3VudCwgY2hlY2tpbnRlcnZhbCk7CisJfQorCisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZW1vdmVfZXJyb3JfdGFibGUoJmV0X3Byb2ZfZXJyb3JfdGFibGUpOworCXByb2ZpbGVfcmVsZWFzZShwcm9maWxlKTsKKwlmb3IgKGk9MDsgZnNfdHlwZXNbaV07IGkrKykKKwkJZnJlZShmc190eXBlc1tpXSk7CisJZnJlZShmc190eXBlcyk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL21rZTJmcy5jb25mLjUuaW4gYi9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuY29uZi41LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MjVkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuY29uZi41LmluCkBAIC0wLDAgKzEsNDMxIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiIAorLlRIIG1rZTJmcy5jb25mIDUgIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK21rZTJmcy5jb25mIFwtIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWtlMmZzCisuU0ggREVTQ1JJUFRJT04KKy5JIG1rZTJmcy5jb25mCitpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciAKKy5CUiBta2UyZnMgKDgpLiAgCitJdCBjb250cm9scyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIHVzZWQgYnkgCisuQlIgbWtlMmZzICg4KQord2hlbiBpdCBpcyBjcmVhdGluZyBleHQyLCBleHQzLCBvciBleHQ0IGZpbGVzeXN0ZW1zLgorLlBQCitUaGUKKy5JIG1rZTJmcy5jb25mCitmaWxlIHVzZXMgYW4gSU5JLXN0eWxlIGZvcm1hdC4gIFN0YW56YXMsIG9yIHRvcC1sZXZlbCBzZWN0aW9ucywgYXJlIAorZGVsaW1pdGVkIGJ5IHNxdWFyZSBicmFjZXM6IFsgXS4gIFdpdGhpbiBlYWNoIHNlY3Rpb24sIGVhY2ggbGluZSAKK2RlZmluZXMgYSByZWxhdGlvbiwgd2hpY2ggYXNzaWducyB0YWdzIHRvIHZhbHVlcywgb3IgdG8gYSBzdWJzZWN0aW9uLAord2hpY2ggY29udGFpbnMgZnVydGhlciByZWxhdGlvbnMgb3Igc3Vic2VjdGlvbnMuICAgCisuXCIgVGFncyBjYW4gYmUgYXNzaWduZWQgbXVsdGlwbGUgdmFsdWVzCitBbiBleGFtcGxlIG9mIHRoZSBJTkktc3R5bGUgZm9ybWF0IHVzZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgCitmb2xsb3dzIGJlbG93OgorLlAKKwlbc2VjdGlvbjFdCisuYnIKKwkJdGFnMSA9IHZhbHVlX2EKKy5icgorCQl0YWcxID0gdmFsdWVfYgorLmJyCisJCXRhZzIgPSB2YWx1ZV9jCisuUAorCVtzZWN0aW9uIDJdCisuYnIKKwkJdGFnMyA9IHsKKy5icgorCQkJc3VidGFnMSA9IHN1YnRhZ192YWx1ZV9hCisuYnIKKwkJCXN1YnRhZzEgPSBzdWJ0YWdfdmFsdWVfYgorLmJyCisJCQlzdWJ0YWcyID0gc3VidGFnX3ZhbHVlX2MKKy5icgorCQl9CisuYnIKKwkJdGFnMSA9IHZhbHVlX2QKKy5icgorCQl0YWcyID0gdmFsdWVfZQorLmJyCisJfQorLlAKK0NvbW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24gKCc7Jykgb3IgYSBoYXNoICgnIycpIGNoYXJhY3RlciAKK2F0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1lbnQsIGFuZCBhcmUgdGVybWluYXRlZCBieSB0aGUgZW5kIG9mIAorbGluZSBjaGFyYWN0ZXIuCisuUAorVGFncyBhbmQgdmFsdWVzIG11c3QgYmUgcXVvdGVkIHVzaW5nIGRvdWJsZSBxdW90ZXMgaWYgdGhleSBjb250YWluCitzcGFjZXMuICBXaXRoaW4gYSBxdW90ZWQgc3RyaW5nLCB0aGUgc3RhbmRhcmQgYmFja3NsYXNoIGludGVycHJldGF0aW9ucyAKK2FwcGx5OiAiXGVuIiAoZm9yIHRoZSBuZXdsaW5lIGNoYXJhY3RlciksIAorIlxldCIgKGZvciB0aGUgdGFiIGNoYXJhY3RlciksICJcZWIiIChmb3IgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIpLCAKK2FuZCAiXGVcZSIgKGZvciB0aGUgYmFja3NsYXNoIGNoYXJhY3RlcikuCisuUAorU29tZSByZWxhdGlvbnMgZXhwZWN0IGEgYm9vbGVhbiB2YWx1ZS4gIFRoZSBwYXJzZXIgaXMgcXVpdGUgbGliZXJhbCBvbgorcmVjb2duaXppbmcgYGB5ZXMnJywgJ2B5JycsIGBgdHJ1ZScnLCBgYHQnJywgYGAxJycsIGBgb24nJywgZXRjLiBhcyBhCitib29sZWFuIHRydWUgdmFsdWUsIGFuZCBgYG5vJycsIGBgbicnLCBgYGZhbHNlJycsIGBgbmlsJycsIGBgMCcnLAorYGBvZmYnJyBhcyBhIGJvb2xlYW4gZmFsc2UgdmFsdWUuCisuUAorVGhlIGZvbGxvd2luZyBzdGFuemFzIGFyZSB1c2VkIGluIHRoZSAKKy5JIG1rZTJmcy5jb25mCitmaWxlLiAgVGhleSB3aWxsIGJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBmdXR1cmUgc2VjdGlvbnMgb2YgdGhpcworZG9jdW1lbnQuCisuVFAgCisuSSBbZGVmYXVsdHNdCitDb250YWlucyByZWxhdGlvbnMgd2hpY2ggZGVmaW5lIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMKK3VzZWQgYnkKKy5CUiBta2UyZnMgKDgpLgorSW4gZ2VuZXJhbCwgdGhlc2UgZGVmYXVsdHMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZWZpbml0aW9uIGluIHRoZQorLkIgZnNfdHlwZXMKK3N0YW56YSwgb3IgYnkgYW4gY29tbWFuZC1saW5lIG9wdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlci4KKy5UUCAKKy5JIFtmc190eXBlc10KK0NvbnRhaW5zIHJlbGF0aW9ucyB3aGljaCBkZWZpbmUgZGVmYXVsdHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3Igc3BlY2lmaWMKK2ZpbGVzeXN0ZW0gdHlwZXMuICBUaGUgZmlsZXN5c3RlbSB0eXBlIGNhbiBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSB1c2luZwordGhlIAorLkIgLVQKK29wdGlvbiB0bworLkJSIG1rZTJmcyAoOCkuCisuU0ggVEhFIFtkZWZhdWx0c10gU1RBTlpBCitUaGUgZm9sbG93aW5nIHJlbGF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgCisuSSBbZGVmYXVsdHNdCitzdGFuemEuCisuVFAKKy5JIGJhc2VfZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBmaWxlc3lzdGVtcyBmZWF0dXJlcyB3aGljaCBhcmUgZW5hYmxlZCBpbgorbmV3bHkgY3JlYXRlZCBmaWxlc3lzdGVtcy4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorLkkgYmFzZV9mZWF0dXJlcworcmVsYXRpb24gZm91bmQgaW4gdGhlIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZSBzdWJzZWN0aW9uIG9mCit0aGUKKy5JIFtmc190eXBlc10gCitzdGFuemEuCisuVFAKKy5JIGRlZmF1bHRfZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGEgc2V0IG9mIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIG9yCityZW1vdmVkIHRvIHRoZSBmZWF0dXJlcyBsaXN0ZWQgaW4gdGhlCisuSSBiYXNlX2ZlYXR1cmVzCityZWxhdGlvbi4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIAorLkkgZGVmYXVsdF9mZWF0dXJlcworaW4gdGhlIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZSBzdWJzZWN0aW9uIG9mCisuSVIgW2ZzX3R5cGVzXSAsCithbmQgYnkgdGhlIAorLkIgLU8KK2NvbW1hbmQtbGluZSBvcHRpb24KK3RvIAorLkJSIG1rZTJmcyAoOCkuCisuVFAKKy5JIGVuYWJsZV9wZXJpb2RpY19mc2NrCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgcGVyaW9kaWMgZmlsZXN5c3RlbSBjaGVja3Mgc2hvdWxkIGJlCitlbmZvcmNlZCBhdCBib290IHRpbWUuICBJZiBzZXQgdG8gdHJ1ZSwgY2hlY2tzIHdpbGwgYmUgZm9yY2VkIGV2ZXJ5CisxODAgZGF5cywgb3IgYWZ0ZXIgYSByYW5kb20gbnVtYmVyIG9mIG1vdW50cy4gIFRoZXNlIHZhbHVlcyBtYXkKK2JlIGNoYW5nZWQgbGF0ZXIgdmlhIHRoZQorLkIgLWkKK2FuZAorLkIgLWMKK2NvbW1hbmQtbGluZSBvcHRpb25zIHRvCisuQlIgdHVuZTJmcyAoOCkuCisuVFAKKy5JIGZvcmNlX3VuZG8KK1RoaXMgYm9vbGVhbiByZWxhdGlvbiwgaWYgc2V0IHRvIGEgdmFsdWUgb2YgdHJ1ZSwgZm9yY2VzCisuQiBta2UyZnMKK3RvIGFsd2F5cyB0cnkgdG8gY3JlYXRlIGFuIHVuZG8gZmlsZSwgZXZlbiBpZiB0aGUgdW5kbyBmaWxlIG1pZ2h0IGJlCitodWdlIGFuZCBpdCBtaWdodCBleHRlbmQgdGhlIHRpbWUgdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtIGltYWdlCitiZWNhdXNlIHRoZSBpbm9kZSB0YWJsZSBpc24ndCBiZWluZyBpbml0aWFsaXplZCBsYXppbHkuCisuVFAKKy5JIGZzX3R5cGUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gdHlwZSBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBpdCB2aWEgdGhlCisuQiBcLXQKK29wdGlvbiwgb3IgaWYKKy5CIG1rZTJmcworaXMgbm90IHN0YXJ0ZWQgdXNpbmcgYSBwcm9ncmFtIG5hbWUgb2YgdGhlIGZvcm0KKy5CSSBta2ZzLiBmcy10eXBlXGZSLgorSWYgYm90aCB0aGUgdXNlciBhbmQgdGhlCisuQiBta2UyZnMuY29uZgorZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBmaWxlc3lzdGVtIHR5cGUsIG1rZTJmcyB3aWxsIHVzZSBhCitkZWZhdWx0IGZpbGVzeXN0ZW0gdHlwZSBvZgorLklSIGV4dDMKK2lmIGEgam91cm5hbCB3YXMgcmVxdWVzdGVkIHZpYSBhIGNvbW1hbmQtbGluZSBvcHRpb24sIG9yCisuSSBleHQyCitpZiBub3QuCisuVFAKKy5JIGJsb2Nrc2l6ZQorVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYmxvY2tzaXplIGlmIHRoZSB1c2VyIGRvZXMgbm90CitzcGVjaWZ5IGEgYmxvY2tzaXplIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlsZXN5c3RlbS10eXBlCitzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSBhIGJsb2Nrc2l6ZS4KKy5UUAorLkkgaGFzaF9hbGcKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHVzZWQgZm9yIHRoZQorbmV3IGZpbGVzeXN0ZW1zIHdpdGggaGFzaGVkIGItdHJlZSBkaXJlY3Rvcmllcy4gIFZhbGlkIGFsZ29yaXRobXMKK2FjY2VwdGVkIGFyZToKKy5JUiBsZWdhY3kgLAorLklSIGhhbGZfbWQ0ICwKK2FuZAorLklSIHRlYSAuCisuVFAKKy5JIGlub2RlX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBpbm9kZSByYXRpbyBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBvbmUgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSBmaWxlc3lzdGVtLXR5cGUKK3NwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCBzcGVjaWZ5IGEgZGVmYXVsdAoraW5vZGUgcmF0aW8uCisuVFAKKy5JIGlub2RlX3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGlub2RlIHNpemUgaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgZmlsZXN5c3RlbS10eXBlCitzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSBhIGRlZmF1bHQKK2lub2RlIHNpemUuCisuVFAKKy5JIHJlc2VydmVkX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwZXJjZW50YWdlIG9mIGZpbGVzeXN0ZW0gYmxvY2tzCityZXNlcnZlZCBmb3IgdGhlIHN1cGVyLXVzZXIsIGlmIHRoZSB1c2VyIGRvZXMgbm90CitzcGVjaWZ5IG9uZSBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIGZpbGVzeXN0ZW0tdHlwZQorc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRvZXMgbm90IHNwZWNpZnkgYSBkZWZhdWx0CityZXNlcnZlZCByYXRpby4gVGhpcyB2YWx1ZSBjYW4gYmUgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuCisuVFAKKy5JIHVuZG9fZGlyCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB1bmRvIGZpbGUgc2hvdWxkIGJlCitzdG9yZWQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlCisuQiBFMkZTUFJPR1NfVU5ET19ESVIKK2Vudmlyb25tZW50IHZhcmlhYmxlLiAgSWYgdGhlIGRpcmVjdG9yeSBsb2NhdGlvbiBpcyBzZXQgdG8gdGhlIHZhbHVlCisuSVIgbm9uZSAsCisuQiBta2UyZnMKK3dpbGwgbm90IGNyZWF0ZSBhbiB1bmRvIGZpbGUuCisuU0ggVEhFIFtmc190eXBlc10gU1RBTlpBCitFYWNoIHRhZyBpbiB0aGUKKy5JIFtmc190eXBlc10gCitzdGFuemEgbmFtZXMgYSBmaWxlc3lzdGVtIHR5cGUgb3IgdXNhZ2UgdHlwZSB3aGljaCBjYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGUKKy5CIFwtdAorb3IKKy5CIFwtVAorb3B0aW9ucyB0bworLkJSIG1rZTJmcyAoOCksCityZXNwZWN0aXZlbHkuCisuUAorVGhlCisuQiBta2UyZnMKK3Byb2dyYW0gY29uc3RydWN0cyBhIGxpc3Qgb2YgZnNfdHlwZXMgYnkgY29uY2F0ZW5hdGluZyB0aGUgZmlsZXN5c3RlbQordHlwZSAoaS5lLiwgZXh0MiwgZXh0MywgZXRjLikgd2l0aCB0aGUgdXNhZ2UgdHlwZSBsaXN0LiAgRm9yIG1vc3QKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucywKKy5CIG1rZTJmcword2lsbCBsb29rIGZvciBhIHN1YnNlY3Rpb24gaW4gdGhlCisuSSBbZnNfdHlwZXNdCitzdGFuemEgY29ycmVzcG9uZGluZyB3aXRoIGVhY2ggZW50cnkgaW4gdGhlIGNvbnN0cnVjdGVkIGxpc3QsIHdpdGggbGF0ZXIKK2VudHJpZXMgb3ZlcnJpZGluZyBlYXJsaWVyIGZpbGVzeXN0ZW0gb3IgdXNhZ2UgdHlwZXMuCitGb3IKK2V4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKy5CIG1rZTJmcy5jb25mCitmcmFnbWVudDoKKy5QCitbZGVmYXVsdHNdCisuYnIKKwliYXNlX2ZlYXR1cmVzID0gc3BhcnNlX3N1cGVyLGZpbGV0eXBlLHJlc2l6ZV9pbm9kZSxkaXJfaW5kZXgKKy5icgorCWJsb2Nrc2l6ZSA9IDQwOTYKKy5icgorCWlub2RlX3NpemUgPSAyNTYKKy5icgorCWlub2RlX3JhdGlvID0gMTYzODQKKy5icgorCisuYnIKK1tmc190eXBlc10KKy5icgorCWV4dDMgPSB7CisuYnIKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbAorLmJyCisJfQorLmJyCisJZXh0NCA9IHsKKy5icgorCQlmZWF0dXJlcyA9IGV4dGVudHMsZmxleF9iZworLmJyCisJCWlub2RlX3NpemUgPSAyNTYKKy5icgorCX0KKy5icgorCXNtYWxsID0geworLmJyCisJCWJsb2Nrc2l6ZSA9IDEwMjQKKy5icgorCQlpbm9kZV9yYXRpbyA9IDQwOTYKKy5icgorCX0KKy5icgorCWZsb3BweSA9IHsKKy5icgorCQlmZWF0dXJlcyA9IF5yZXNpemVfaW5vZGUKKy5icgorCQlibG9ja3NpemUgPSAxMDI0CisuYnIKKwkJaW5vZGVfc2l6ZSA9IDEyOAorLmJyCisJfQorLlAKK0lmIG1rZTJmcyBzdGFydGVkIHdpdGggYSBwcm9ncmFtIG5hbWUgb2YKKy5CUiBta2UyZnMuZXh0NCAsCit0aGVuIHRoZSBmaWxlc3lzdGVtIHR5cGUgb2YgZXh0NCB3aWxsIGJlIHVzZWQuICBJZiB0aGUgZmlsZXN5c3RlbSBpcworc21hbGxlciB0aGFuIDMgbWVnYWJ5dGVzLCBhbmQgbm8gdXNhZ2UgdHlwZSBpcyBzcGVjaWZpZWQsIHRoZW4KKy5CIG1rZTJmcword2lsbCB1c2UgYSBkZWZhdWx0Cit1c2FnZSB0eXBlIG9mCisuSVIgZmxvcHB5IC4KK1RoaXMgcmVzdWx0cyBpbiBhbiBmc190eXBlcyBsaXN0IG9mICJleHQ0LCBmbG9wcHkiLiAgIEJvdGggdGhlIGV4dDQKK3N1YnNlY3Rpb24gYW5kIHRoZSBmbG9wcHkgc3Vic2VjdGlvbiBkZWZpbmUgYW4KKy5JIGlub2RlX3NpemUKK3JlbGF0aW9uLCBidXQgc2luY2UgdGhlIGxhdGVyIGVudHJpZXMgaW4gdGhlIGZzX3R5cGVzIGxpc3Qgc3VwZXJzZWRlCitlYXJsaWVyIG9uZXMsIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgZnNfdHlwZXMuZmxvcHB5Lmlub2RlX3NpemUKK3dpbGwgYmUgdXNlZCwgc28gdGhlIGZpbGVzeXN0ZW0gIHdpbGwgaGF2ZSBhbiBpbm9kZSBzaXplIG9mIDEyOC4KKy5QCitUaGUgZXhjZXB0aW9uIHRvIHRoaXMgcmVzb2x1dGlvbiBpcyB0aGUKKy5JIGZlYXR1cmVzCit0YWcsIHdoaWNoIGlzIHNwZWNpZmllcyBhIHNldCBvZiBjaGFuZ2VzIHRvIHRoZSBmZWF0dXJlcyB1c2VkIGJ5IHRoZQorZmlsZXN5c3RlbSwgYW5kIHdoaWNoIGlzIGN1bXVsYXRpdmUuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgZmlyc3QKK3RoZSBjb25maWd1cmF0aW9uIHJlbGF0aW9uIGRlZmF1bHRzLmJhc2VfZmVhdHVyZXMgd291bGQgZW5hYmxlIGFuCitpbml0aWFsIGZlYXR1cmUgc2V0IHdpdGggdGhlIHNwYXJzZV9zdXBlciwgZmlsZXR5cGUsIHJlc2l6ZV9pbm9kZSwgYW5kCitkaXJfaW5kZXggZmVhdHVyZXMgZW5hYmxlZC4gIFRoZW4gY29uZmlndXJhdGlvbiByZWxhdGlvbgorZnNfdHlwZXMuZXh0NC5mZWF0dXJlcyB3b3VsZCBlbmFibGUgdGhlIGV4dGVudHMgYW5kIGZsZXhfYmcKK2ZlYXR1cmVzLCBhbmQgZmluYWxseSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGlvbgorZnNfdHlwZXMuZmxvcHB5LmZlYXR1cmVzIHdvdWxkIHJlbW92ZQordGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlLCByZXN1bHRpbmcgaW4gYSBmaWxlc3lzdGVtIGZlYXR1cmUgc2V0Citjb25zaXN0aW5nIG9mIHRoZSBzcGFyc2Vfc3VwZXIsIGZpbGV0eXBlLCByZXNpemVfaW5vZGUsIGRpcl9pbmRleCwKK2V4dGVudHNfYW5kIGZsZXhfYmcgZmVhdHVyZXMuCisuUAorRm9yIGVhY2ggZmlsZXN5c3RlbSB0eXBlLCB0aGUgZm9sbG93aW5nIHRhZ3MgbWF5IGJlIHVzZWQgaW4gdGhhdCAKK2ZzX3R5cGUncyBzdWJzZWN0aW9uOgorLlRQCisuSSBiYXNlX2ZlYXR1cmVzCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZmVhdHVyZXMgd2hpY2ggYXJlIGluaXRpYWxseSBlbmFibGVkIGZvciB0aGlzCitmaWxlc3lzdGVtIHR5cGUuICBPbmx5IG9uZQorLkkgYmFzZV9mZWF0dXJlcword2lsbCBiZSB1c2VkLCBzbyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50cmllcyBpbiB0aGUgZnNfdHlwZXMgbGlzdAord2hvc2Ugc3Vic2VjdGlvbnMgZGVmaW5lIHRoZQorLkkgYmFzZV9mZWF0dXJlcworcmVsYXRpb24sIG9ubHkgdGhlIGxhc3Qgd2lsbCBiZSB1c2VkIGJ5CisuQlIgbWtlMmZzICg4KS4KKy5UUAorLkkgZmVhdHVyZXMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmVhdHVyZXMgZWRpdAorcmVxdWVzdHMgd2hpY2ggbW9kaWZ5IHRoZSBmZWF0dXJlIHNldAordXNlZCBieSB0aGUgbmV3bHkgY29uc3RydWN0ZWQgZmlsZXN5c3RlbS4gIFRoZSBzeW50YXggaXMgdGhlIHNhbWUgYXMgdGhlCisuQiAtTworY29tbWFuZC1saW5lIG9wdGlvbiB0bworLkJSIG1rZTJmcyAoOCk7Cit0aGF0IGlzLCBhIGZlYXR1cmUgY2FuIGJlIHByZWZpeGVkIGJ5IGEgY2FyZXQgKCdeJykgc3ltYm9sIHRvIGRpc2FibGUKK2EgbmFtZWQgZmVhdHVyZS4gIEVhY2gKKy5JIGZlYXR1cmUKK3JlbGF0aW9uIHNwZWNpZmllZCBpbiB0aGUgZnNfdHlwZXMgbGlzdCB3aWxsIGJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyCitmb3VuZCBpbiB0aGUgZnNfdHlwZXMgbGlzdC4KKy5UUAorLkkgZGVmYXVsdF9mZWF0dXJlcworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgc2V0IG9mIGZlYXR1cmVzIHdoaWNoIHNob3VsZCBiZSBlbmFibGVkIG9yIAorZGlzYWJsZWQgYWZ0ZXIgYXBwbHlpbmcgdGhlIGZlYXR1cmVzIGxpc3RlZCBpbiB0aGUKKy5JIGJhc2VfZmVhdHVyZXMKK2FuZAorLkkgZmVhdHVyZXMKK3JlbGF0aW9ucy4gIEl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZQorLkIgLU8KK2NvbW1hbmQtbGluZSBvcHRpb24gdG8KKy5CUiBta2UyZnMgKDgpLgorLlRQCisuSSBhdXRvXzY0LWJpdF9zdXBwb3J0CitUaGlzIHJlbGF0aW9uIGlzIGEgYm9vbGVhbiB3aGljaCBzcGVjaWZpZXMgd2hldGhlcgorLkJSIG1rZTJmcyAoOCkKK3Nob3VsZCBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgNjRiaXQgZmVhdHVyZSBpZiB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3IKK3RoZSBmaWxlIHN5c3RlbSByZXF1aXJlcyB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZC4gIFRoZSByZXNpemVfaW5vZGUKK2ZlYXR1cmUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHNpbmNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCA2NC1iaXQKK2Jsb2NrIG51bWJlcnMuCisuVFAKKy5JIGRlZmF1bHRfbW50b3B0cworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIHNldCBvZiBtb3VudCBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBlbmFibGVkCitieSBkZWZhdWx0LiAgVGhlc2UgbWF5IGJlIGNoYW5nZWQgYXQgYSBsYXRlciB0aW1lIHdpdGggdGhlCisuQiAtbworY29tbWFuZC1saW5lIG9wdGlvbiB0bworLkJSIHR1bmUyZnMgKDgpLgorLlRQCisuSSBibG9ja3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZSBpZiB0aGUgdXNlciBkb2VzIG5vdAorc3BlY2lmeSBhIGJsb2Nrc2l6ZSBvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuSSBsYXp5X2l0YWJsZV9pbml0CitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGlub2RlIHRhYmxlIHNob3VsZCAKK2JlIGxhemlseSBpbml0aWFsaXplZC4gIEl0IG9ubHkgaGFzIG1lYW5pbmcgaWYgdGhlIHVuaW5pdF9iZyBmZWF0dXJlIGlzCitlbmFibGVkLiAgSWYgbGF6eV9pdGFibGVfaW5pdCBpcyB0cnVlIGFuZCB0aGUgdW5pbml0X2JnIGZlYXR1cmUgaXMKK2VuYWJsZWQsICB0aGUgaW5vZGUgdGFibGUgd2lsbAorbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IAorLkJSIG1rZTJmcyAoOCkuCitUaGlzIHNwZWVkcyB1cCBmaWxlc3lzdGVtCitpbml0aWFsaXphdGlvbiBub3RpY2VhYmx5LCBidXQgaXQgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBmaW5pc2gKK2luaXRpYWxpemluZyB0aGUgZmlsZXN5c3RlbSBpbiB0aGUgYmFja2dyb3VuZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzCitmaXJzdCBtb3VudGVkLgorLlRQCisuSSBpbm9kZV9yYXRpbworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgaW5vZGUgcmF0aW8gaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuVFAKKy5JIGlub2RlX3NpemUKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGlub2RlIHNpemUgaWYgdGhlIHVzZXIgZG9lcyBub3QKK3NwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuVFAKKy5JIHJlc2VydmVkX3JhdGlvCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwZXJjZW50YWdlIG9mIGZpbGVzeXN0ZW0gYmxvY2tzCityZXNlcnZlZCBmb3IgdGhlIHN1cGVyLXVzZXIsIGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgb25lIG9uIHRoZSBjb21tYW5kCitsaW5lLgorLlRQCisuSSBoYXNoX2FsZworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdXNlZCBmb3IgdGhlCituZXcgZmlsZXN5c3RlbXMgd2l0aCBoYXNoZWQgYi10cmVlIGRpcmVjdG9yaWVzLiAgVmFsaWQgYWxnb3JpdGhtcworYWNjZXB0ZWQgYXJlOgorLklSIGxlZ2FjeSAsCisuSVIgaGFsZl9tZDQgLAorYW5kCisuSVIgdGVhIC4KKy5UUAorLkkgZmxleF9iZ19zaXplCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJsb2NrIGdyb3VwcyB0aGF0IHdpbGwgYmUgcGFja2VkCit0b2dldGhlciB0byBjcmVhdGUgb25lIGxhcmdlIHZpcnR1YWwgYmxvY2sgZ3JvdXAgb24gYW4gZXh0NCBmaWxlc3lzdGVtLgorVGhpcyBpbXByb3ZlcyBtZXRhLWRhdGEgbG9jYWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9uIG1ldGEtZGF0YSBoZWF2eQord29ya2xvYWRzLiAgVGhlIG51bWJlciBvZiBncm91cHMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgYW5kIG1heSBvbmx5IGJlCitzcGVjaWZpZWQgaWYgdGhlIGZsZXhfYmcgZmlsZXN5c3RlbSBmZWF0dXJlIGlzIGVuYWJsZWQuCisuVFAKKy5JIG9wdGlvbnMKK1RoaXMgcmVsYXRpb24gc3BlY2lmaWVzIGFkZGl0aW9uYWwgZXh0ZW5kZWQgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUKK3RyZWF0ZWQgYnkKKy5CUiBta2UyZnMgKDgpCithcyBpZiB0aGV5IHdlcmUgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudCBvZiB0aGUKKy5CIC1FCitvcHRpb24uICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBleHRlbmRlZCBvcHRpb25zIHVzZWQKK2J5CisuQlIgbWtlMmZzICg4KQorb24gYSBwZXItZmlsZXN5c3RlbSB0eXBlIGJhc2lzLgorLlRQCisuSSBkaXNjYXJkCitUaGlzIGJvb2xlYW4gcmVsYXRpb24gc3BlY2lmaWVzIHdoZXRoZXIgdGhlCisuQlIgbWtlMmZzICg4KQorc2hvdWxkIGF0dGVtcHQgdG8gZGlzY2FyZCBkZXZpY2UgcHJpb3IgdG8gZmlsZXN5c3RlbSBjcmVhdGlvbi4KKy5UUAorLkkgY2x1c3Rlcl9zaXplCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBjbHVzdGVyIHNpemUgaWYgdGhlIGJpZ2FsbG9jIGZpbGUKK3N5c3RlbSBmZWF0dXJlIGlzIGVuYWJsZWQuICBJdCBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlCisuQiBcLUMKK2NvbW1hbmQgbGluZSBvcHRpb24gdG8KKy5CUiBta2UyZnMgKDgpCisuU0ggVEhFIFtkZXZpY2VzXSBTVEFOWkEKK0VhY2ggdGFnIGluIHRoZQorLkkgW2RldmljZXNdIAorc3RhbnphIG5hbWVzIGRldmljZSBuYW1lIHNvIHRoYXQgcGVyLWRldmljZSBkZWZhdWx0cyBjYW4gYmUgc3BlY2lmaWVkLgorLlRQCisuSSBmc190eXBlCitUaGlzIHJlbGF0aW9uIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgZm9yIHRoZQorLkIgXC10CitvcHRpb24sIGlmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorLlRQCisuSSB1c2FnZV90eXBlcworVGhpcyByZWxhdGlvbiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIGZvciB0aGUKKy5CIFwtVAorb3B0aW9uLCBpZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5TSCBGSUxFUworLlRQCisuSSAvZXRjL21rZTJmcy5jb25mCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciAKKy5CUiBta2UyZnMgKDgpLgorLlNIIFNFRSBBTFNPCisuQlIgbWtlMmZzICg4KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvbWtlMmZzLmNvbmYuaW4gYi9lMmZzcHJvZ3MvbWlzYy9ta2UyZnMuY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODcxZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvbWtlMmZzLmNvbmYuaW4KQEAgLTAsMCArMSw1MyBAQAorW2RlZmF1bHRzXQorCWJhc2VfZmVhdHVyZXMgPSBzcGFyc2Vfc3VwZXIsZmlsZXR5cGUscmVzaXplX2lub2RlLGRpcl9pbmRleCxleHRfYXR0cgorCWRlZmF1bHRfbW50b3B0cyA9IGFjbCx1c2VyX3hhdHRyCisJZW5hYmxlX3BlcmlvZGljX2ZzY2sgPSAwCisJYmxvY2tzaXplID0gNDA5NgorCWlub2RlX3NpemUgPSAyNTYKKwlpbm9kZV9yYXRpbyA9IDE2Mzg0CisKK1tmc190eXBlc10KKwlleHQzID0geworCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsCisJfQorCWV4dDQgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUKKwkJYXV0b182NC1iaXRfc3VwcG9ydCA9IDEKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCX0KKwlleHQ0ZGV2ID0geworCQlmZWF0dXJlcyA9IGhhc19qb3VybmFsLGV4dGVudCxodWdlX2ZpbGUsZmxleF9iZyx1bmluaXRfYmcsZGlyX25saW5rLGV4dHJhX2lzaXplCisJCWlub2RlX3NpemUgPSAyNTYKKwkJb3B0aW9ucyA9IHRlc3RfZnM9MQorCX0KKwlzbWFsbCA9IHsKKwkJYmxvY2tzaXplID0gMTAyNAorCQlpbm9kZV9zaXplID0gMTI4CisJCWlub2RlX3JhdGlvID0gNDA5NgorCX0KKwlmbG9wcHkgPSB7CisJCWJsb2Nrc2l6ZSA9IDEwMjQKKwkJaW5vZGVfc2l6ZSA9IDEyOAorCQlpbm9kZV9yYXRpbyA9IDgxOTIKKwl9CisJYmlnID0geworCQlpbm9kZV9yYXRpbyA9IDMyNzY4CisJfQorCWh1Z2UgPSB7CisJCWlub2RlX3JhdGlvID0gNjU1MzYKKwl9CisJbmV3cyA9IHsKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWxhcmdlZmlsZSA9IHsKKwkJaW5vZGVfcmF0aW8gPSAxMDQ4NTc2CisJCWJsb2Nrc2l6ZSA9IC0xCisJfQorCWxhcmdlZmlsZTQgPSB7CisJCWlub2RlX3JhdGlvID0gNDE5NDMwNAorCQlibG9ja3NpemUgPSAtMQorCX0KKwlodXJkID0geworCSAgICAgYmxvY2tzaXplID0gNDA5NgorCSAgICAgaW5vZGVfc2l6ZSA9IDEyOAorCX0KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL21rbG9zdCtmb3VuZC44LmluIGIvZTJmc3Byb2dzL21pc2MvbWtsb3N0K2ZvdW5kLjguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyNzQwYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL21rbG9zdCtmb3VuZC44LmluCkBAIC0wLDAgKzEsNDMgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgQ29weXJpZ2h0IDE5OTMsIDE5OTQsIDE5OTUgYnkgVGhlb2RvcmUgVHMnby4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuVEggTUtMT1NUK0ZPVU5EIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK21rbG9zdCtmb3VuZCBcLSBjcmVhdGUgYSBsb3N0K2ZvdW5kIGRpcmVjdG9yeSBvbiBhIG1vdW50ZWQgTGludXgKK3NlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorLlNIIFNZTk9QU0lTCisuQiBta2xvc3QrZm91bmQKKy5TSCBERVNDUklQVElPTgorLkIgbWtsb3N0K2ZvdW5kCitpcyB1c2VkIHRvIGNyZWF0ZSBhCisuSSBsb3N0K2ZvdW5kCitkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQKK2ZpbGUgc3lzdGVtLiAgVGhlcmUgaXMgbm9ybWFsbHkgYQorLkkgbG9zdCtmb3VuZAorZGlyZWN0b3J5IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiBlYWNoIGZpbGVzeXN0ZW0uCisuUFAKKy5CIG1rbG9zdCtmb3VuZAorcHJlLWFsbG9jYXRlcyBkaXNrIGJsb2NrcyB0byB0aGUKKy5JIGxvc3QrZm91bmQKK2RpcmVjdG9yeSBzbyB0aGF0IHdoZW4KKy5CUiBlMmZzY2sgKDgpCitpcyBiZWluZyBydW4gdG8gcmVjb3ZlciBhIGZpbGVzeXN0ZW0sIGl0IGRvZXMgbm90IG5lZWQgdG8gYWxsb2NhdGUgYmxvY2tzIGluCit0aGUgZmlsZXN5c3RlbSB0byBzdG9yZSBhIGxhcmdlIG51bWJlciBvZiB1bmxpbmtlZCBmaWxlcy4gIFRoaXMgZW5zdXJlcyB0aGF0CisuQiBlMmZzY2sKK3dpbGwgbm90IGhhdmUgdG8gYWxsb2NhdGUgZGF0YSBibG9ja3MgaW4gdGhlIGZpbGVzeXN0ZW0gZHVyaW5nIHJlY292ZXJ5LgorLlNIIE9QVElPTlMKK1RoZXJlIGFyZSBub25lLgorLlNIIEFVVEhPUgorLkIgbWtsb3N0K2ZvdW5kCitoYXMgYmVlbiB3cml0dGVuIGJ5IFJlbXkgQ2FyZCA8UmVteS5DYXJkQGxpbnV4Lm9yZz4uICBJdCBpcyBjdXJyZW50bHkgYmVpbmcKK21haW50YWluZWQgYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AYWx1bS5taXQuZWR1Pi4KKy5TSCBCVUdTCitUaGVyZSBhcmUgbm9uZSA6LSkKKy5TSCBBVkFJTEFCSUxJVFkKKy5CIG1rbG9zdCtmb3VuZAoraXMgcGFydCBvZiB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQuCisuU0ggU0VFIEFMU08KKy5CUiBlMmZzY2sgKDgpLAorLkJSIG1rZTJmcyAoOCkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL21rbG9zdCtmb3VuZC5jIGIvZTJmc3Byb2dzL21pc2MvbWtsb3N0K2ZvdW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3ZDg2OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL21rbG9zdCtmb3VuZC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBta2xvc3QrZm91bmQuYwktIENyZWF0ZXMgYSBkaXJlY3RvcnkgbG9zdCtmb3VuZCBvbiBhIG1vdW50ZWQgc2Vjb25kCisgKgkJCSAgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqCisgKiBUaGlzIGZpbGUgY2FuIGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UKKyAqLworCisvKgorICogSGlzdG9yeToKKyAqIDkzLzA0LzIyCS0gQ3JlYXRpb24KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKworI2RlZmluZSBMUEYgImxvc3QrZm91bmQiCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCWNoYXIgbmFtZSBbRVhUMl9OQU1FX0xFTl07CisJY2hhciBwYXRoIFtzaXplb2YgKExQRikgKyAxICsgMjU2XTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgaSwgajsKKwlpbnQgZDsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworI2VuZGlmCisJZnByaW50ZiAoc3RkZXJyLCAibWtsb3N0K2ZvdW5kICVzICglcylcbiIsIEUyRlNQUk9HU19WRVJTSU9OLAorCQkgRTJGU1BST0dTX0RBVEUpOworCWlmIChhcmdjICE9IDEpIHsKKwkJKHZvaWQpYXJndjsgLyogYXZvaWQgdW51c2VkIGFyZ3VtZW50IHdhcm5pbmcgKi8KKwkJZnByaW50ZiAoc3RkZXJyLCAiJXMiLCBfKCJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChta2RpciAoTFBGLCAwNzAwKSA9PSAtMSkgeworCQlwZXJyb3IgKCJta2RpciIpOworCQlleGl0KDEpOworCX0KKworCWkgPSAwOworCW1lbXNldCAobmFtZSwgJ3gnLCAyNDYpOworCWRvIHsKKwkJc3ByaW50ZiAobmFtZSArIDI0NiwgIiUwOGQiLCBpKTsKKwkJc3RyY3B5IChwYXRoLCBMUEYpOworCQlzdHJjYXQgKHBhdGgsICIvIik7CisJCXN0cmNhdCAocGF0aCwgbmFtZSk7CisJCWlmICgoZCA9IGNyZWF0IChwYXRoLCAwNjQ0KSkgPT0gLTEpIHsKKwkJCXBlcnJvciAoImNyZWF0Iik7CisJCQlleGl0ICgxKTsKKwkJfQorCQlpKys7CisJCWNsb3NlIChkKTsKKwkJaWYgKHN0YXQgKExQRiwgJnN0KSA9PSAtMSkgeworCQkJcGVycm9yICgic3RhdCIpOworCQkJZXhpdCAoMSk7CisJCX0KKwl9IHdoaWxlIChzdC5zdF9zaXplIDw9IChFWFQyX05ESVJfQkxPQ0tTIC0gMSkgKiBzdC5zdF9ibGtzaXplKTsKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJCXNwcmludGYgKG5hbWUgKyAyNDYsICIlMDhkIiwgaik7CisJCXN0cmNweSAocGF0aCwgTFBGKTsKKwkJc3RyY2F0IChwYXRoLCAiLyIpOworCQlzdHJjYXQgKHBhdGgsIG5hbWUpOworCQlpZiAodW5saW5rIChwYXRoKSA9PSAtMSkgeworCQkJcGVycm9yICgidW5saW5rIik7CisJCQlleGl0ICgxKTsKKwkJfQorCX0KKwlleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL25scy1lbmFibGUuaCBiL2UyZnNwcm9ncy9taXNjL25scy1lbmFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFkY2MxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvbmxzLWVuYWJsZS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZmRlZiBFTkFCTEVfTkxTCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2RlZmluZSBfKGEpIChnZXR0ZXh0IChhKSkKKyNpZmRlZiBnZXR0ZXh0X25vb3AKKyNkZWZpbmUgTl8oYSkgZ2V0dGV4dF9ub29wIChhKQorI2Vsc2UKKyNkZWZpbmUgTl8oYSkgKGEpCisjZW5kaWYKKyNkZWZpbmUgUF8oc2luZ3VsYXIsIHBsdXJhbCwgbikgKG5nZXR0ZXh0IChzaW5ndWxhciwgcGx1cmFsLCBuKSkKKyNpZm5kZWYgTkxTX0NBVF9OQU1FCisjZGVmaW5lIE5MU19DQVRfTkFNRSAiZTJmc3Byb2dzIgorI2VuZGlmCisjaWZuZGVmIExPQ0FMRURJUgorI2RlZmluZSBMT0NBTEVESVIgIi91c3Ivc2hhcmUvbG9jYWxlIgorI2VuZGlmCisjZWxzZQorI2RlZmluZSBfKGEpIChhKQorI2RlZmluZSBOXyhhKSBhCisjZGVmaW5lIFBfKHNpbmd1bGFyLCBwbHVyYWwsIG4pICgobikgPT0gMSA/IChzaW5ndWxhcikgOiAocGx1cmFsKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvcGFydGluZm8uYyBiL2UyZnNwcm9ncy9taXNjL3BhcnRpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2MTY1NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL3BhcnRpbmZvLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIHBhcnRpbmZvLmMKKyAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxhaW4gS25hZmYsIDxhbGtuYWZmQGlubmV0Lmx1Pi4KKyAqCisgKiBDbGVhbmVkIHVwIGJ5IFRoZW9kb3JlIFRzJ28sIDx0eXRzb0BtaXQuZWR1Pi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX0lPKSAmJiAhZGVmaW5lZChCTEtHRVRTSVpFKQorI2RlZmluZSBCTEtHRVRTSVpFIF9JTygweDEyLDk2KQkvKiByZXR1cm4gZGV2aWNlIHNpemUgKi8KKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGhkX2dlb21ldHJ5IGxvYzsKKwlpbnQgZmQsIGk7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjID09IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG5cblByaW50cyBvdXQgdGhlICIKKwkJCSJwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorCQkJIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuXG4iKSwgYXJndlswXSwgYXJndlswXSk7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChpPTE7IGkgPCBhcmdjOyBpKyspIHsKKwkJZmQgPSBvcGVuKGFyZ3ZbaV0sIE9fUkRPTkxZKTsKKworCQlpZiAoZmQgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2Fubm90IG9wZW4gJXM6ICVzIiksCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlvY3RsKGZkLCBIRElPX0dFVEdFTywgJmxvYykgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiKSwKKwkJCQlhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2UoZmQpOworCQkJY29udGludWU7CisJCX0KKworCisJCWlmIChpb2N0bChmZCwgQkxLR0VUU0laRSwgJnNpemUpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiKSwKKwkJCQlhcmd2W2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2UoZmQpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmludGYoXygiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iKSwKKwkJICAgICAgIGFyZ3ZbaV0sCisJCSAgICAgICBsb2MuaGVhZHMsIChpbnQpbG9jLnNlY3RvcnMsIGxvYy5jeWxpbmRlcnMsCisJCSAgICAgICAoaW50KWxvYy5zdGFydCwgc2l6ZSwgKGludCkgbG9jLnN0YXJ0ICsgc2l6ZSAtMSk7CisJCWNsb3NlKGZkKTsKKwl9CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL3Byb2ZpbGUtdG8tYy5hd2sgYi9lMmZzcHJvZ3MvbWlzYy9wcm9maWxlLXRvLWMuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjRlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy9wcm9maWxlLXRvLWMuYXdrCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9hd2sKK0JFR0lOIHsKKyAgcHJpbnRmKCJjb25zdCBjaGFyICpta2UyZnNfZGVmYXVsdF9wcm9maWxlID0gXG4iKTsKK30KKworeworICBwcmludGYoIiAgXCIlc1xcblwiXG4iLCAkMCk7Cit9CisKK0VORCB7CisgIHByaW50ZigiO1xuIiwgc3RyKQorfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy44LmluIGIvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjEwODAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy90dW5lMmZzLjguaW4KQEAgLTAsMCArMSw2OTYgQEAKKy5cIiBSZXZpc2lvbiAxLjAgOTMvMDYvMyAyMzowMCAgY2hrCisuXCIgSW5pdGlhbCByZXZpc2lvbgorLlwiCisuXCIKKy5USCBUVU5FMkZTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3R1bmUyZnMgXC0gYWRqdXN0IHR1bmFibGUgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzIG9uIGV4dDIvZXh0My9leHQ0IGZpbGVzeXN0ZW1zCisuU0ggU1lOT1BTSVMKKy5CIHR1bmUyZnMKK1sKKy5CIFwtbAorXQorWworLkIgXC1jCisuSSBtYXgtbW91bnQtY291bnRzCitdCitbCisuQiBcLWUKKy5JIGVycm9ycy1iZWhhdmlvcgorXQorWworLkIgXC1mCitdCitbCisuQiBcLWkKKy5JIGludGVydmFsLWJldHdlZW4tY2hlY2tzCitdCitbCisuQiBcLWoKK10KK1sKKy5CIFwtSgorLkkgam91cm5hbC1vcHRpb25zCitdCitbCisuQiBcLW0KKy5JIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlCitdCitbCisuQiBcLW8KKy5SSSBbXl1tb3VudC1vcHRpb25zIFssLi4uXQorXQorWworLkIgXC1yCisuSSByZXNlcnZlZC1ibG9ja3MtY291bnQKK10KK1sKKy5CIFwtcworLkkgc3BhcnNlLXN1cGVyLWZsYWcKK10KK1sKKy5CIFwtdQorLkkgdXNlcgorXQorWworLkIgXC1nCisuSSBncm91cAorXQorWworLkIgXC1DCisuSSBtb3VudC1jb3VudAorXQorWworLkIgXC1FCisuSSBleHRlbmRlZC1vcHRpb25zCitdCitbCisuQiBcLUwKKy5JIHZvbHVtZS1uYW1lCitdCitbCisuQiBcLU0KKy5JIGxhc3QtbW91bnRlZC1kaXJlY3RvcnkKK10KK1sKKy5CIFwtTyAKKy5SSSBbXl0gZmVhdHVyZSBbLC4uLl0KK10KK1sKKy5CIFwtUQorLkkgcXVvdGEtb3B0aW9ucworXQorWworLkIgXC1UCisuSSB0aW1lLWxhc3QtY2hlY2tlZAorXQorWworLkIgXC1VCisuSSBVVUlECitdCitkZXZpY2UKKy5TSCBERVNDUklQVElPTgorLkJJIHR1bmUyZnMKK2FsbG93cyB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gYWRqdXN0IHZhcmlvdXMgdHVuYWJsZSBmaWxlc3lzdGVtIAorcGFyYW1ldGVycyBvbiBMaW51eCBleHQyLCBleHQzLCBvciBleHQ0IGZpbGVzeXN0ZW1zLiAgVGhlIGN1cnJlbnQgdmFsdWVzIAorb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgZGlzcGxheWVkIGJ5IHVzaW5nIHRoZQorLkIgLWwKK29wdGlvbiB0bworLkJSIHR1bmUyZnMgKDgpCitwcm9ncmFtLCBvciBieSB1c2luZyB0aGUKKy5CUiBkdW1wZTJmcyAoOCkKK3Byb2dyYW0uCisuUFAKK1RoZQorLkkgZGV2aWNlCitzcGVjaWZpZXIgY2FuIGVpdGhlciBiZSBhIGZpbGVuYW1lIChpLmUuLCAvZGV2L3NkYTEpLCBvciBhIExBQkVMIG9yIFVVSUQKK3NwZWNpZmllcjogIlxmQkxBQkVMPVxmSXZvbHVtZS1uYW1lXGZSIiBvciAiXGZCVVVJRD1cZkl1dWlkXGZSIi4gIChpLmUuLAorTEFCRUw9aG9tZSBvciBVVUlEPWU0MDQ4NmM2LTg0ZDUtNGYyZi1iOTljLTAzMjI4MTc5OWM5ZCkuCisuU0ggT1BUSU9OUworLlRQCisuQkkgXC1jICIgbWF4LW1vdW50LWNvdW50cyIKK0FkanVzdCB0aGUgbnVtYmVyIG9mIG1vdW50cyBhZnRlciB3aGljaCB0aGUgZmlsZXN5c3RlbSB3aWxsIGJlIGNoZWNrZWQgYnkgCisuQlIgZTJmc2NrICg4KS4gIAorSWYKKy5JIG1heC1tb3VudC1jb3VudHMKK2lzIDAgb3IgXC0xLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2lsbCBiZSBkaXNyZWdhcmRlZCAKK2J5CisuQlIgZTJmc2NrICg4KQorYW5kIHRoZSBrZXJuZWwuCisuc3AKK1N0YWdnZXJpbmcgdGhlIG1vdW50LWNvdW50cyBhdCB3aGljaCBmaWxlc3lzdGVtcyBhcmUgZm9yY2libHkKK2NoZWNrZWQgd2lsbCBhdm9pZCBhbGwgZmlsZXN5c3RlbXMgYmVpbmcgY2hlY2tlZCBhdCBvbmUgdGltZQord2hlbiB1c2luZyBqb3VybmFsZWQgZmlsZXN5c3RlbXMuCisuc3AKK1lvdSBzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgdGhlIGNvbnNlcXVlbmNlcyBvZiBkaXNhYmxpbmcKK21vdW50LWNvdW50LWRlcGVuZGVudCBjaGVja2luZyBlbnRpcmVseS4gIEJhZCBkaXNrIGRyaXZlcywgY2FibGVzLAorbWVtb3J5LCBhbmQga2VybmVsIGJ1Z3MgY291bGQgYWxsIGNvcnJ1cHQgYSBmaWxlc3lzdGVtIHdpdGhvdXQKK21hcmtpbmcgdGhlIGZpbGVzeXN0ZW0gZGlydHkgb3IgaW4gZXJyb3IuICBJZiB5b3UgYXJlIHVzaW5nCitqb3VybmFsaW5nIG9uIHlvdXIgZmlsZXN5c3RlbSwgeW91ciBmaWxlc3lzdGVtIHdpbGwKKy5CIG5ldmVyCitiZSBtYXJrZWQgZGlydHksIHNvIGl0IHdpbGwgbm90IG5vcm1hbGx5IGJlIGNoZWNrZWQuICBBCitmaWxlc3lzdGVtIGVycm9yIGRldGVjdGVkIGJ5IHRoZSBrZXJuZWwgd2lsbCBzdGlsbCBmb3JjZQorYW4gZnNjayBvbiB0aGUgbmV4dCByZWJvb3QsIGJ1dCBpdCBtYXkgYWxyZWFkeSBiZSB0b28gbGF0ZQordG8gcHJldmVudCBkYXRhIGxvc3MgYXQgdGhhdCBwb2ludC4KKy5zcAorU2VlIGFsc28gdGhlCisuQiBcLWkKK29wdGlvbiBmb3IgdGltZS1kZXBlbmRlbnQgY2hlY2tpbmcuCisuVFAKKy5CSSBcLUMgIiBtb3VudC1jb3VudCIKK1NldCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuCitJZiBzZXQgdG8gYSBncmVhdGVyIHZhbHVlIHRoYW4gdGhlIG1heC1tb3VudC1jb3VudHMgcGFyYW1ldGVyCitzZXQgYnkgdGhlIAorLkIgXC1jCitvcHRpb24sCisuQlIgZTJmc2NrICg4KSAKK3dpbGwgY2hlY2sgdGhlIGZpbGVzeXN0ZW0gYXQgdGhlIG5leHQgcmVib290LgorLlRQCisuQkkgXC1lICIgZXJyb3ItYmVoYXZpb3IiCitDaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwgY29kZSB3aGVuIGVycm9ycyBhcmUgZGV0ZWN0ZWQuCitJbiBhbGwgY2FzZXMsIGEgZmlsZXN5c3RlbSBlcnJvciB3aWxsIGNhdXNlCisuQlIgZTJmc2NrICg4KQordG8gY2hlY2sgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIG5leHQgYm9vdC4KKy5JIGVycm9yLWJlaGF2aW9yCitjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuUlMgMS4yaQorLlRQIDEuMmkKKy5CIGNvbnRpbnVlCitDb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLgorLlRQCisuQiByZW1vdW50LXJvCitSZW1vdW50IGZpbGVzeXN0ZW0gcmVhZC1vbmx5LgorLlRQCisuQiBwYW5pYworQ2F1c2UgYSBrZXJuZWwgcGFuaWMuCisuUkUKKy5UUAorLkJJIFwtRSAiIGV4dGVuZGVkLW9wdGlvbnMiCitTZXQgZXh0ZW5kZWQgb3B0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0uICBFeHRlbmRlZCBvcHRpb25zIGFyZSBjb21tYQorc2VwYXJhdGVkLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgdXNpbmcgdGhlIGVxdWFscyAoJz0nKSBzaWduLgorVGhlIGZvbGxvd2luZyBleHRlbmRlZCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuUlMgMS4yaQorLlRQCisuQiBjbGVhcl9tbXAKK1Jlc2V0IHRoZSBNTVAgYmxvY2sgKGlmIGFueSkgYmFjayB0byB0aGUgY2xlYW4gc3RhdGUuICBVc2Ugb25seSBpZgorYWJzb2x1dGVseSBjZXJ0YWluIHRoZSBkZXZpY2UgaXMgbm90IGN1cnJlbnRseSBtb3VudGVkIG9yIGJlaW5nCitmc2NrZWQsIG9yIG1ham9yIGZpbGVzeXN0ZW0gY29ycnVwdGlvbiBjYW4gcmVzdWx0LiAgTmVlZHMgJy1mJy4KKy5UUAorLkJJIG1tcF91cGRhdGVfaW50ZXJ2YWw9IGludGVydmFsCitBZGp1c3QgdGhlIGluaXRpYWwgTU1QIHVwZGF0ZSBpbnRlcnZhbCB0bworLkkgaW50ZXJ2YWwKK3NlY29uZHMuICBTcGVjaWZ5aW5nIGFuCisuSSBpbnRlcnZhbAorb2YgMCBtZWFucyB0byB1c2UgdGhlIGRlZmF1bHQgaW50ZXJ2YWwuICBUaGUgc3BlY2lmaWVkIGludGVydmFsIG11c3QKK2JlIGxlc3MgdGhhbiAzMDAgc2Vjb25kcy4gIFJlcXVpcmVzIHRoYXQgdGhlCisuQiBtbXAKK2ZlYXR1cmUgYmUgZW5hYmxlZC4KKy5UUAorLkJJIHN0cmlkZT0gc3RyaWRlLXNpemUKK0NvbmZpZ3VyZSB0aGUgZmlsZXN5c3RlbSBmb3IgYSBSQUlEIGFycmF5IHdpdGgKKy5JIHN0cmlkZS1zaXplCitmaWxlc3lzdGVtIGJsb2Nrcy4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZWFkIG9yIHdyaXR0ZW4gdG8gZGlzaworYmVmb3JlIG1vdmluZyB0byBuZXh0IGRpc2suIFRoaXMgbW9zdGx5IGFmZmVjdHMgcGxhY2VtZW50IG9mIGZpbGVzeXN0ZW0KK21ldGFkYXRhIGxpa2UgYml0bWFwcyBhdAorLkJSIG1rZTJmcyAoMikKK3RpbWUgdG8gYXZvaWQgcGxhY2luZyB0aGVtIG9uIGEgc2luZ2xlIGRpc2ssIHdoaWNoIGNhbiBodXJ0IHRoZSBwZXJmb3JtYW5jZS4KK0l0IG1heSBhbHNvIGJlIHVzZWQgYnkgYmxvY2sgYWxsb2NhdG9yLgorLlRQCisuQkkgc3RyaXBlX3dpZHRoPSBzdHJpcGUtd2lkdGgKK0NvbmZpZ3VyZSB0aGUgZmlsZXN5c3RlbSBmb3IgYSBSQUlEIGFycmF5IHdpdGgKKy5JIHN0cmlwZS13aWR0aAorZmlsZXN5c3RlbSBibG9ja3MgcGVyIHN0cmlwZS4gVGhpcyBpcyB0eXBpY2FsbHkgYmUgc3RyaWRlLXNpemUgKiBOLCB3aGVyZQorTiBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgZGlza3MgaW4gdGhlIFJBSUQgKGUuZy4gUkFJRCA1IE4rMSwgUkFJRCA2IE4rMikuCitUaGlzIGFsbG93cyB0aGUgYmxvY2sgYWxsb2NhdG9yIHRvIHByZXZlbnQgcmVhZC1tb2RpZnktd3JpdGUgb2YgdGhlCitwYXJpdHkgaW4gYSBSQUlEIHN0cmlwZSBpZiBwb3NzaWJsZSB3aGVuIHRoZSBkYXRhIGlzIHdyaXR0ZW4uCisuVFAKKy5CSSBoYXNoX2FsZz0gaGFzaC1hbGcKK1NldCB0aGUgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB1c2VkIGZvciBmaWxlc3lzdGVtcyB3aXRoIGhhc2hlZCBiLXRyZWUKK2RpcmVjdG9yaWVzLiAgVmFsaWQgYWxnb3JpdGhtcyBhY2NlcHRlZCBhcmU6CisuSVIgbGVnYWN5ICwKKy5JUiBoYWxmX21kNCAsCithbmQKKy5JUiB0ZWEgLgorLlRQCisuQkkgbW91bnRfb3B0cz0gbW91bnRfb3B0aW9uX3N0cmluZworU2V0IGEgc2V0IG9mIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgZmlsZQorc3lzdGVtIGlzIG1vdW50ZWQuICBVbmxpa2UgdGhlIGJpdG1hc2stYmFzZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHdoaWNoCitjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlCisuQiAtbworb3B0aW9uLAorLkkgbW91bnRfb3B0aW9uX3N0cmluZworaXMgYW4gYXJiaXRyYXJ5IHN0cmluZyB3aXRoIGEgbWF4aW11bSBsZW5ndGggb2YgNjMgYnl0ZXMsIHdoaWNoIGlzCitzdG9yZWQgaW4gdGhlIHN1cGVyYmxvY2suCisuSVAKK1RoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciB3aWxsIGZpcnN0IGFwcGx5Cit0aGUgYml0bWFzay1iYXNlZCBkZWZhdWx0IG9wdGlvbnMsIGFuZCB0aGVuIHBhcnNlIHRoZQorLklSIG1vdW50X29wdGlvbl9zdHJpbmcgLAorYmVmb3JlIHBhcnNpbmcgdGhlIG1vdW50IG9wdGlvbnMgcGFzc2VkIGZyb20gdGhlCisuQlIgbW91bnQgKDgpCitwcm9ncmFtLgorLklQCitUaGlzIHN1cGVyYmxvY2sgc2V0dGluZyBpcyBvbmx5IGhvbm9yZWQgaW4gMi42LjM1KyBrZXJuZWxzOworYW5kIG5vdCBhdCBhbGwgYnkgdGhlIGV4dDIgYW5kIGV4dDMgZmlsZSBzeXN0ZW0gZHJpdmVycy4KKy5UUAorLkIgdGVzdF9mcworU2V0IGEgZmxhZyBpbiB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGluZGljYXRpbmcgdGhhdCBpdCBtYXkgYmUKK21vdW50ZWQgdXNpbmcgZXhwZXJpbWVudGFsIGtlcm5lbCBjb2RlLCBzdWNoIGFzIHRoZSBleHQ0ZGV2IGZpbGVzeXN0ZW0uCisuVFAKKy5CIF50ZXN0X2ZzCitDbGVhciB0aGUgdGVzdF9mcyBmbGFnLCBpbmRpY2F0aW5nIHRoZSBmaWxlc3lzdGVtIHNob3VsZCBvbmx5IGJlIG1vdW50ZWQKK3VzaW5nIHByb2R1Y3Rpb24tbGV2ZWwgZmlsZXN5c3RlbSBjb2RlLgorLlJFCisuVFAKKy5CIFwtZgorRm9yY2UgdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIGV2ZW4gaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLiAgVGhpcyAKK29wdGlvbiBpcyB1c2VmdWwgd2hlbiByZW1vdmluZyB0aGUgCisuQiBoYXNfam91cm5hbAorZmlsZXN5c3RlbSBmZWF0dXJlIGZyb20gYSBmaWxlc3lzdGVtIHdoaWNoIGhhcyAKK2FuIGV4dGVybmFsIGpvdXJuYWwgKG9yIGlzIGNvcnJ1cHRlZAorc3VjaCB0aGF0IGl0IGFwcGVhcnMgdG8gaGF2ZSBhbiBleHRlcm5hbCBqb3VybmFsKSwgYnV0IHRoYXQgCitleHRlcm5hbCBqb3VybmFsIGlzIG5vdCBhdmFpbGFibGUuICAgCisuc3AKKy5CIFdBUk5JTkc6CitSZW1vdmluZyBhbiBleHRlcm5hbCBqb3VybmFsIGZyb20gYSBmaWxlc3lzdGVtIHdoaWNoIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQKK3dpdGhvdXQgZmlyc3QgcmVwbGF5aW5nIHRoZSBleHRlcm5hbCBqb3VybmFsIGNhbiByZXN1bHQgaW4KK3NldmVyZSBkYXRhIGxvc3MgYW5kIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4KKy5UUAorLkJJIFwtZyAiIGdyb3VwIgorU2V0IHRoZSBncm91cCB3aGljaCBjYW4gdXNlIHRoZSByZXNlcnZlZCBmaWxlc3lzdGVtIGJsb2Nrcy4KK1RoZSAKKy5JIGdyb3VwCitwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtZXJpY2FsIGdpZCBvciBhIGdyb3VwIG5hbWUuICBJZiBhIGdyb3VwIG5hbWUgaXMgZ2l2ZW4sCitpdCBpcyBjb252ZXJ0ZWQgdG8gYSBudW1lcmljYWwgZ2lkIGJlZm9yZSBpdCBpcyBzdG9yZWQgaW4gdGhlIHN1cGVyYmxvY2suCisuVFAKKy5CIFwtaSAiIFxmSWludGVydmFsLWJldHdlZW4tY2hlY2tzXGZSW1xmQmRcZlJ8XGZCbVxmUnxcZkJ3XGZSXSIKK0FkanVzdCB0aGUgbWF4aW1hbCB0aW1lIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW0gY2hlY2tzLiAKK05vIHN1ZmZpeCBvcgorLkIgZAord2lsbCBpbnRlcnByZXQgdGhlIG51bWJlcgorLkkgaW50ZXJ2YWwtYmV0d2Vlbi1jaGVja3MKK2FzIGRheXMsCisuQiBtCithcyBtb250aHMsIGFuZAorLkIgdworYXMgd2Vla3MuICBBIHZhbHVlIG9mIHplcm8gd2lsbCBkaXNhYmxlIHRoZSB0aW1lLWRlcGVuZGVudCBjaGVja2luZy4KKy5zcAorSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBlaXRoZXIKKy5CIFwtYworKG1vdW50LWNvdW50LWRlcGVuZGVudCkgb3IKKy5CIFwtaQorKHRpbWUtZGVwZW5kZW50KSBjaGVja2luZyBiZSBlbmFibGVkIHRvIGZvcmNlIHBlcmlvZGljIGZ1bGwKKy5CUiBlMmZzY2sgKDgpCitjaGVja2luZyBvZiB0aGUgZmlsZXN5c3RlbS4gIEZhaWx1cmUgdG8gZG8gc28gbWF5IGxlYWQgdG8gZmlsZXN5c3RlbQorY29ycnVwdGlvbiAoZHVlIHRvIGJhZCBkaXNrcywgY2FibGVzLCBtZW1vcnksIG9yIGtlcm5lbCBidWdzKSBnb2luZwordW5ub3RpY2VkLCB1bHRpbWF0ZWx5IHJlc3VsdGluZyBpbiBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbi4KKy5UUAorLkIgXC1qCitBZGQgYW4gZXh0MyBqb3VybmFsIHRvIHRoZSBmaWxlc3lzdGVtLiAgSWYgdGhlIAorLkIgXC1KCitvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgam91cm5hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUKK2FuIGFwcHJvcHJpYXRlbHkgc2l6ZWQgam91cm5hbCAoZ2l2ZW4gdGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0pIAorc3RvcmVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBiZSB1c2luZyBhIGtlcm5lbAord2hpY2ggaGFzIGV4dDMgc3VwcG9ydCBpbiBvcmRlciB0byBhY3R1YWxseSBtYWtlIHVzZSBvZiB0aGUgam91cm5hbC4KKy5JUAorSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBqb3VybmFsIG9uIGEgbW91bnRlZCBmaWxlc3lzdGVtLCBhbgoraW1tdXRhYmxlIGZpbGUsCisuQlIgLmpvdXJuYWwgLAord2lsbCBiZSBjcmVhdGVkIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBmaWxlc3lzdGVtLCBhcyBpdCBpcwordGhlIG9ubHkgc2FmZSB3YXkgdG8gY3JlYXRlIHRoZSBqb3VybmFsIGlub2RlIHdoaWxlIHRoZSBmaWxlc3lzdGVtIGlzCittb3VudGVkLiAgV2hpbGUgdGhlIGV4dDMgam91cm5hbCBpcyB2aXNpYmxlLCBpdCBpcyBub3Qgc2FmZSB0bworZGVsZXRlIGl0LCBvciBtb2RpZnkgaXQgd2hpbGUgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZDsgZm9yIHRoaXMKK3JlYXNvbiB0aGUgZmlsZSBpcyBtYXJrZWQgaW1tdXRhYmxlLgorV2hpbGUgY2hlY2tpbmcgdW5tb3VudGVkIGZpbGVzeXN0ZW1zLCAKKy5CUiBlMmZzY2sgKDgpCit3aWxsIGF1dG9tYXRpY2FsbHkgbW92ZSAKKy5CIC5qb3VybmFsCitmaWxlcyB0byB0aGUgaW52aXNpYmxlLCByZXNlcnZlZCBqb3VybmFsIGlub2RlLiAgRm9yIGFsbCBmaWxlc3lzdGVtcworZXhjZXB0IGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLCAgdGhpcyBzaG91bGQgaGFwcGVuIGF1dG9tYXRpY2FsbHkgYW5kCituYXR1cmFsbHkgZHVyaW5nIHRoZSBuZXh0IHJlYm9vdCBjeWNsZS4gIFNpbmNlIHRoZSByb290IGZpbGVzeXN0ZW0gaXMKK21vdW50ZWQgcmVhZC1vbmx5LAorLkJSIGUyZnNjayAoOCkKK211c3QgYmUgcnVuIGZyb20gYSByZXNjdWUgZmxvcHB5IGluIG9yZGVyIHRvIGVmZmVjdCB0aGlzIHRyYW5zaXRpb24uCisuSVAKK09uIHNvbWUgZGlzdHJpYnV0aW9ucywgc3VjaCBhcyBEZWJpYW4sIGlmIGFuIGluaXRpYWwgcmFtZGlzayBpcyB1c2VkLAordGhlIGluaXRyZCBzY3JpcHRzIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IGFuIGV4dDIgcm9vdCBmaWxlc3lzdGVtCit0byBleHQzIGlmIHRoZSAgCisuQlIgL2V0Yy9mc3RhYgorZmlsZSBzcGVjaWZpZXMgdGhlIGV4dDMgZmlsZXN5c3RlbSBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBvcmRlciB0bworYXZvaWQgcmVxdWlyaW5nIHRoZSB1c2Ugb2YgYSByZXNjdWUgZmxvcHB5IHRvIGFkZCBhbiBleHQzIGpvdXJuYWwgdG8KK3RoZSByb290IGZpbGVzeXN0ZW0uCisuVFAKKy5CUiBcLUogIiBqb3VybmFsLW9wdGlvbnMiCitPdmVycmlkZSB0aGUgZGVmYXVsdCBleHQzIGpvdXJuYWwgcGFyYW1ldGVycy4gSm91cm5hbCBvcHRpb25zIGFyZSBjb21tYQorc2VwYXJhdGVkLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgdXNpbmcgdGhlIGVxdWFscyAoJz0nKSAgc2lnbi4KK1RoZSBmb2xsb3dpbmcgam91cm5hbCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuUlMgMS4yaQorLlRQCisuQkkgc2l6ZT0gam91cm5hbC1zaXplCitDcmVhdGUgYSBqb3VybmFsIHN0b3JlZCBpbiB0aGUgZmlsZXN5c3RlbSBvZiBzaXplCisuSSBqb3VybmFsLXNpemUKK21lZ2FieXRlcy4gICBUaGUgc2l6ZSBvZiB0aGUgam91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgZmlsZXN5c3RlbSBibG9ja3MKKyhpLmUuLCAxTUIgaWYgdXNpbmcgMWsgYmxvY2tzLCA0TUIgaWYgdXNpbmcgNGsgYmxvY2tzLCBldGMuKQorYW5kIG1heSBiZSBubyBtb3JlIHRoYW4gMTAyLDQwMCBmaWxlc3lzdGVtIGJsb2Nrcy4KK1RoZXJlIG11c3QgYmUgZW5vdWdoIGZyZWUgc3BhY2UgaW4gdGhlIGZpbGVzeXN0ZW0gdG8gY3JlYXRlIGEgam91cm5hbCBvZgordGhhdCBzaXplLgorQEpERVZALlRQCitASkRFVkAuQkkgZGV2aWNlPSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBBdHRhY2ggdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIGpvdXJuYWwgYmxvY2sgZGV2aWNlIGxvY2F0ZWQgb24KK0BKREVWQC5JUiBleHRlcm5hbC1qb3VybmFsIC4KK0BKREVWQFRoZSBleHRlcm5hbCAKK0BKREVWQGpvdXJuYWwgbXVzdCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIHVzaW5nIHRoZSBjb21tYW5kCitASkRFVkAuSVAKK0BKREVWQC5CIG1rZTJmcyAtTyBqb3VybmFsX2RldiAKK0BKREVWQC5JIGV4dGVybmFsLWpvdXJuYWwKK0BKREVWQC5JUAorQEpERVZATm90ZSB0aGF0CitASkRFVkAuSSBleHRlcm5hbC1qb3VybmFsCitASkRFVkBtdXN0IGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBzYW1lIGJsb2NrCitASkRFVkBzaXplIGFzIGZpbGVzeXN0ZW1zIHdoaWNoIHdpbGwgYmUgdXNpbmcgaXQuCitASkRFVkBJbiBhZGRpdGlvbiwgd2hpbGUgdGhlcmUgaXMgc3VwcG9ydCBmb3IgYXR0YWNoaW5nCitASkRFVkBtdWx0aXBsZSBmaWxlc3lzdGVtcyB0byBhIHNpbmdsZSBleHRlcm5hbCBqb3VybmFsLAorQEpERVZAdGhlIExpbnV4IGtlcm5lbCBhbmQgCitASkRFVkAuQlIgZTJmc2NrICg4KQorQEpERVZAZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IHNoYXJlZCBleHRlcm5hbCBqb3VybmFscyB5ZXQuCitASkRFVkAuSVAKK0BKREVWQEluc3RlYWQgb2Ygc3BlY2lmeWluZyBhIGRldmljZSBuYW1lIGRpcmVjdGx5LAorQEpERVZALkkgZXh0ZXJuYWwtam91cm5hbAorQEpERVZAY2FuIGFsc28gYmUgc3BlY2lmaWVkIGJ5IGVpdGhlcgorQEpERVZALkJJIExBQkVMPSBsYWJlbAorQEpERVZAb3IKK0BKREVWQC5CSSBVVUlEPSBVVUlECitASkRFVkB0byBsb2NhdGUgdGhlIGV4dGVybmFsIGpvdXJuYWwgYnkgZWl0aGVyIHRoZSB2b2x1bWUgbGFiZWwgb3IgVVVJRAorQEpERVZAc3RvcmVkIGluIHRoZSBleHQyIHN1cGVyYmxvY2sgYXQgdGhlIHN0YXJ0IG9mIHRoZSBqb3VybmFsLiAgVXNlCitASkRFVkAuQlIgZHVtcGUyZnMgKDgpCitASkRFVkB0byBkaXNwbGF5IGEgam91cm5hbCBkZXZpY2UncyB2b2x1bWUgbGFiZWwgYW5kIFVVSUQuICBTZWUgYWxzbyB0aGUKK0BKREVWQC5CIC1MCitASkRFVkBvcHRpb24gb2YKK0BKREVWQC5CUiB0dW5lMmZzICg4KS4KKy5SRQorQEpERVZALklQCitASkRFVkBPbmx5IG9uZSBvZiB0aGUKK0BKREVWQC5CUiBzaXplICIgb3IgIiBkZXZpY2UKK0BKREVWQG9wdGlvbnMgY2FuIGJlIGdpdmVuIGZvciBhIGZpbGVzeXN0ZW0uCisuVFAKKy5CIFwtbAorTGlzdCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jaywgaW5jbHVkaW5nIHRoZSBjdXJyZW50Cit2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IHZpYSB0aGlzIHByb2dyYW0uCisuVFAKKy5CSSBcLUwgIiB2b2x1bWUtbGFiZWwiCitTZXQgdGhlIHZvbHVtZSBsYWJlbCBvZiB0aGUgZmlsZXN5c3RlbS4gIAorRXh0MiBmaWxlc3lzdGVtIGxhYmVscyBjYW4gYmUgYXQgbW9zdCAxNiBjaGFyYWN0ZXJzIGxvbmc7IGlmCisuSSB2b2x1bWUtbGFiZWwgCitpcyBsb25nZXIgdGhhbiAxNiBjaGFyYWN0ZXJzLCAKKy5CIHR1bmUyZnMKK3dpbGwgdHJ1bmNhdGUgaXQgYW5kIHByaW50IGEgd2FybmluZy4gIFRoZSB2b2x1bWUgbGFiZWwgY2FuIGJlIHVzZWQKK2J5CisuQlIgbW91bnQgKDgpLAorLkJSIGZzY2sgKDgpLAorYW5kCisuQlIgL2V0Yy9mc3RhYiAoNSkKKyhhbmQgcG9zc2libHkgb3RoZXJzKSBieSBzcGVjaWZ5aW5nCisuQkkgTEFCRUw9IHZvbHVtZV9sYWJlbAoraW5zdGVhZCBvZiBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlIG5hbWUgbGlrZQorLkJSIC9kZXYvaGRhNSAuCisuVFAKKy5CSSBcLW0gIiByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZSIKK1NldCB0aGUgcGVyY2VudGFnZSBvZiB0aGUgZmlsZXN5c3RlbSB3aGljaCBtYXkgb25seSBiZSBhbGxvY2F0ZWQKK2J5IHByaXZpbGVnZWQgcHJvY2Vzc2VzLiAgIFJlc2VydmluZyBzb21lIG51bWJlciBvZiBmaWxlc3lzdGVtIGJsb2NrcyAKK2ZvciB1c2UgYnkgcHJpdmlsZWdlZCBwcm9jZXNzZXMgaXMgZG9uZSAKK3RvIGF2b2lkIGZpbGVzeXN0ZW0gZnJhZ21lbnRhdGlvbiwgYW5kIHRvIGFsbG93IHN5c3RlbQorZGFlbW9ucywgc3VjaCBhcyAKKy5CUiBzeXNsb2dkICg4KSwKK3RvIGNvbnRpbnVlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBhZnRlciBub24tcHJpdmlsZWdlZCBwcm9jZXNzZXMgYXJlIAorcHJldmVudGVkIGZyb20gd3JpdGluZyB0byB0aGUgZmlsZXN5c3RlbS4gIE5vcm1hbGx5LCB0aGUgZGVmYXVsdCBwZXJjZW50YWdlIAorb2YgcmVzZXJ2ZWQgYmxvY2tzIGlzIDUlLgorLlRQCisuQkkgXC1NICIgbGFzdC1tb3VudGVkLWRpcmVjdG9yeSIKK1NldCB0aGUgbGFzdC1tb3VudGVkIGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzeXN0ZW0uCisuVFAKKy5CUiBcLW8gIiBbXl1cZkltb3VudC1vcHRpb25cZlJbLC4uLl0iCitTZXQgb3IgY2xlYXIgdGhlIGluZGljYXRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgaW4gdGhlIGZpbGVzeXN0ZW0uCitEZWZhdWx0IG1vdW50IG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW91bnQgb3B0aW9ucyBzcGVjaWZpZWQgCitlaXRoZXIgaW4gCisuQlIgL2V0Yy9mc3RhYiAoNSkKK29yIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvCisuQlIgbW91bnQgKDgpLiAgIAorT2xkZXIga2VybmVscyBtYXkgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlOyBpbiBwYXJ0aWN1bGFyLAora2VybmVscyB3aGljaCBwcmVkYXRlIDIuNC4yMCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgaWdub3JlIHRoZQorZGVmYXVsdCBtb3VudCBvcHRpb25zIGZpZWxkIGluIHRoZSBzdXBlcmJsb2NrLgorLklQCitNb3JlIHRoYW4gb25lIG1vdW50IG9wdGlvbiBjYW4gYmUgY2xlYXJlZCBvciBzZXQgYnkgc2VwYXJhdGluZworZmVhdHVyZXMgd2l0aCBjb21tYXMuICBNb3VudCBvcHRpb25zIHByZWZpeGVkIHdpdGggYSAKK2NhcmV0IGNoYXJhY3RlciAoJ14nKSB3aWxsIGJlIGNsZWFyZWQgaW4gdGhlIGZpbGVzeXN0ZW0ncyBzdXBlcmJsb2NrOyAKK21vdW50IG9wdGlvbnMgd2l0aG91dCBhIHByZWZpeCBjaGFyYWN0ZXIgb3IgcHJlZml4ZWQgd2l0aCBhIHBsdXMgCitjaGFyYWN0ZXIgKCcrJykgd2lsbCBiZSBhZGRlZCB0byB0aGUgZmlsZXN5c3RlbS4KKy5JUAorVGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zIGNhbiBiZSBzZXQgb3IgY2xlYXJlZCB1c2luZworLkJSIHR1bmUyZnMgOgorLlJTIDEuMmkKKy5UUAorLkIgZGVidWcKK0VuYWJsZSBkZWJ1Z2dpbmcgY29kZSBmb3IgdGhpcyBmaWxlc3lzdGVtLgorLlRQCisuQiBic2Rncm91cHMKK0VtdWxhdGUgQlNEIGJlaGF2aW9yIHdoZW4gY3JlYXRpbmcgbmV3IGZpbGVzOiB0aGV5IHdpbGwgdGFrZSB0aGUgZ3JvdXAtaWQKK29mIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhleSB3ZXJlIGNyZWF0ZWQuICBUaGUgc3RhbmRhcmQgU3lzdGVtIFYgYmVoYXZpb3IKK2lzIHRoZSBkZWZhdWx0LCB3aGVyZSBuZXdseSBjcmVhdGVkIGZpbGVzIHRha2Ugb24gdGhlIGZzZ2lkIG9mIHRoZSBjdXJyZW50Citwcm9jZXNzLCB1bmxlc3MgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIHNldGdpZCBiaXQgc2V0LCBpbiB3aGljaCBjYXNlIGl0IHRha2VzIAordGhlIGdpZCBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3J5LCBhbmQgYWxzbyBnZXRzIHRoZSBzZXRnaWQgYml0IHNldCBpZiBpdCBpcyAKK2EgZGlyZWN0b3J5IGl0c2VsZi4KKy5UUAorLkIgdXNlcl94YXR0cgorRW5hYmxlIHVzZXItc3BlY2lmaWVkIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisuVFAKKy5CIGFjbAorRW5hYmxlIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzLgorLlRQCisuQiB1aWQxNgorRGlzYWJsZXMgMzItYml0IFVJRHMgYW5kIEdJRHMuICBUaGlzIGlzIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGgKK29sZGVyIGtlcm5lbHMgd2hpY2ggb25seSBzdG9yZSBhbmQgZXhwZWN0IDE2LWJpdCB2YWx1ZXMuCisuVFAKKy5CIGpvdXJuYWxfZGF0YQorV2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGggam91cm5hbGxpbmcgZW5hYmxlZCwgYWxsIGRhdGEKKyhub3QganVzdCBtZXRhZGF0YSkgaXMgY29tbWl0dGVkIGludG8gdGhlIGpvdXJuYWwgcHJpb3IgdG8gYmVpbmcgd3JpdHRlbgoraW50byB0aGUgbWFpbiBmaWxlc3lzdGVtLgorLlRQCisuQiBqb3VybmFsX2RhdGFfb3JkZXJlZAorV2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGggam91cm5hbGxpbmcgZW5hYmxlZCwgYWxsIGRhdGEgaXMgZm9yY2VkCitkaXJlY3RseSBvdXQgdG8gdGhlIG1haW4gZmlsZSBzeXN0ZW0gcHJpb3IgdG8gaXRzIG1ldGFkYXRhIGJlaW5nIGNvbW1pdHRlZCAKK3RvIHRoZSBqb3VybmFsLgorLlRQCisuQiBqb3VybmFsX2RhdGFfd3JpdGViYWNrCitXaGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgd2l0aCBqb3VybmFsbGluZyBlbmFibGVkLCBkYXRhIG1heSBiZQord3JpdHRlbiBpbnRvIHRoZSBtYWluIGZpbGVzeXN0ZW0gYWZ0ZXIgaXRzIG1ldGFkYXRhIGhhcyBiZWVuIGNvbW1pdHRlZAordG8gdGhlIGpvdXJuYWwuICBUaGlzIG1heSBpbmNyZWFzZSB0aHJvdWdocHV0LCBob3dldmVyLCBpdCBtYXkgYWxsb3cgb2xkCitkYXRhIHRvIGFwcGVhciBpbiBmaWxlcyBhZnRlciBhIGNyYXNoIGFuZCBqb3VybmFsIHJlY292ZXJ5LgorLlRQCisuQiBub2JhcnJpZXIKK1RoZSBmaWxlIHN5c3RlbSB3aWxsIGJlIG1vdW50ZWQgd2l0aCBiYXJyaWVyIG9wZXJhdGlvbnMgaW4gdGhlIGpvdXJuYWwKK2Rpc2FibGVkLiAgKFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZXh0NCBmaWxlCitzeXN0ZW0gZHJpdmVyIGluIDIuNi4zNSsga2VybmVscy4pCisuVFAKKy5CIGJsb2NrX3ZhbGlkaXR5CitUaGUgZmlsZSBzeXN0ZW0gd2lsbCBiZSBtb3VudGVkIHdpdGggdGhlIGJsb2NrX3ZhbGlkaXR5IG9wdGlvbiBlbmFibGVkLAord2hpY2ggY2F1c2VzIGV4dHJhIGNoZWNrcyB0byBiZSBwZXJmb3JtZWQgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGZyb20KK3RoZSBmaWxlIHN5c3RlbS4gIFRoaXMgcHJldmVudHMgY29ycnVwdGVkIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNhdXNpbmcKK2ZpbGUgc3lzdGVtIGRhbWFnZSBieSBvdmVyd3JpdGluZyBwYXJ0cyBvZiB0aGUgaW5vZGUgdGFibGUgb3IgYmxvY2sKK2dyb3VwIGRlc2NyaXB0b3JzLiAgVGhpcyBjb21lcyBhdCB0aGUgY29zdCBvZiBpbmNyZWFzZWQgbWVtb3J5IGFuZCBDUFUKK292ZXJoZWFkLCBzbyBpdCBpcyBlbmFibGVkIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIChUaGlzIG9wdGlvbiBpcworY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBpbiAyLjYuMzUrCitrZXJuZWxzLikKKy5UUAorLkIgZGlzY2FyZAorVGhlIGZpbGUgc3lzdGVtIHdpbGwgYmUgbW91bnRlZCB3aXRoIHRoZSBkaXNjYXJkIG1vdW50IG9wdGlvbi4gIFRoaXMgd2lsbAorY2F1c2UgdGhlIGZpbGUgc3lzdGVtIGRyaXZlciB0byBhdHRlbXB0IHRvIHVzZSB0aGUgdHJpbS9kaXNjYXJkIGZlYXR1cmUKK29mIHNvbWUgc3RvcmFnZSBkZXZpY2VzIChzdWNoIGFzIFNTRCdzIGFuZCB0aGluLXByb3Zpc2lvbmVkIGRyaXZlcworYXZhaWxhYmxlIGluIHNvbWUgZW50ZXJwcmlzZSBzdG9yYWdlIGFycmF5cykgdG8gaW5mb3JtIHRoZSBzdG9yYWdlCitkZXZpY2UgdGhhdCBibG9ja3MgYmVsb25naW5nIHRvIGRlbGV0ZWQgZmlsZXMgY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIKK3B1cnBvc2VzLiAgKFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgZXh0NCBmaWxlCitzeXN0ZW0gZHJpdmVyIGluIDIuNi4zNSsga2VybmVscy4pCisuVFAKKy5CIG5vZGVsYWxsb2MKK1RoZSBmaWxlIHN5c3RlbSB3aWxsIGJlIG1vdW50ZWQgd2l0aCB0aGUgbm9kZWxhbGxvYyBtb3VudCBvcHRpb24uICBUaGlzCit3aWxsIGRpc2FibGUgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBmZWF0dXJlLiAgKFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseQorb25seSBzdXBwb3J0ZWQgYnkgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGluIDIuNi4zNSsga2VybmVscy4pCisuUkUKKy5UUAorLkJSIFwtTyAiIFteXVxmSWZlYXR1cmVcZlJbLC4uLl0iCitTZXQgb3IgY2xlYXIgdGhlIGluZGljYXRlZCBmaWxlc3lzdGVtIGZlYXR1cmVzIChvcHRpb25zKSBpbiB0aGUgZmlsZXN5c3RlbS4KK01vcmUgdGhhbiBvbmUgZmlsZXN5c3RlbSBmZWF0dXJlIGNhbiBiZSBjbGVhcmVkIG9yIHNldCBieSBzZXBhcmF0aW5nCitmZWF0dXJlcyB3aXRoIGNvbW1hcy4gIEZpbGVzeXN0ZW0gZmVhdHVyZXMgcHJlZml4ZWQgd2l0aCBhIAorY2FyZXQgY2hhcmFjdGVyICgnXicpIHdpbGwgYmUgY2xlYXJlZCBpbiB0aGUgZmlsZXN5c3RlbSdzIHN1cGVyYmxvY2s7IAorZmlsZXN5c3RlbSBmZWF0dXJlcyB3aXRob3V0IGEgcHJlZml4IGNoYXJhY3RlciBvciBwcmVmaXhlZCB3aXRoIGEgcGx1cyAKK2NoYXJhY3RlciAoJysnKSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmaWxlc3lzdGVtLiAgRm9yIGEgZGV0YWlsZWQKK2Rlc2NyaXB0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSBmZWF0dXJlcywgcGxlYXNlIHNlZSB0aGUgbWFuIHBhZ2UKKy5CUiBleHQ0ICg1KS4KKy5JUAorVGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIGZlYXR1cmVzIGNhbiBiZSBzZXQgb3IgY2xlYXJlZCB1c2luZworLkJSIHR1bmUyZnMgOgorLlJTIDEuMmkKKy5UUAorLkIgZGlyX2luZGV4CitVc2UgaGFzaGVkIGItdHJlZXMgdG8gc3BlZWQgdXAgbG9va3VwcyBmb3IgbGFyZ2UgZGlyZWN0b3JpZXMuCisuVFAKKy5CIGRpcl9ubGluaworQWxsb3cgbW9yZSB0aGFuIDY1MDAwIHN1YmRpcmVjdG9yaWVzIHBlciBkaXJlY3RvcnkuCisuVFAKKy5CIGV4dGVudAorRW5hYmxlIHRoZSB1c2Ugb2YgZXh0ZW50IHRyZWVzIHRvIHN0b3JlIHRoZSBsb2NhdGlvbiBvZiBkYXRhIGJsb2NrcyBpbiBpbm9kZXMuCisuVFAKKy5CIGV4dHJhX2lzaXplCitFbmFibGUgdGhlIGV4dGVuZGVkIGlub2RlIGZpZWxkcyB1c2VkIGJ5IGV4dDQuCisuVFAKKy5CIGZpbGV0eXBlCitTdG9yZSBmaWxlIHR5cGUgaW5mb3JtYXRpb24gaW4gZGlyZWN0b3J5IGVudHJpZXMuCisuVFAKKy5CIGZsZXhfYmcKK0FsbG93IGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlcyBmb3IgYSBibG9jayBncm91cCB0byBiZSBwbGFjZWQKK2FueXdoZXJlIG9uIHRoZSBzdG9yYWdlIG1lZGlhLiAgXGZCVHVuZTJmc1xmUiB3aWxsIG5vdCByZW9yZ2FuaXplCit0aGUgbG9jYXRpb24gb2YgdGhlIGlub2RlIHRhYmxlcyBhbmQgYWxsb2NhdGlvbiBiaXRtYXBzLCBhcworLkJSIG1rZTJmcyAoOCkKK3dpbGwgZG8gd2hlbiBpdCBjcmVhdGVzIGEgZnJlc2hseSBmb3JtYXR0ZWQgZmlsZSBzeXN0ZW0gd2l0aAorLkIgZmxleF9iZworZW5hYmxlZC4KKy5UUAorLkIgaGFzX2pvdXJuYWwKK1VzZSBhIGpvdXJuYWwgdG8gZW5zdXJlIGZpbGVzeXN0ZW0gY29uc2lzdGVuY3kgZXZlbiBhY3Jvc3MgdW5jbGVhbiBzaHV0ZG93bnMuCitTZXR0aW5nIHRoZSBmaWxlc3lzdGVtIGZlYXR1cmUgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgCisuQiBcLWoKK29wdGlvbi4KKy5UUAorLkIgaHVnZV9maWxlCitTdXBwb3J0IGZpbGVzIGxhcmdlciB0aGFuIDIgdGVyYWJ5dGVzIGluIHNpemUuCisuVFAKKy5CIGxhcmdlX2ZpbGUKK0ZpbGVzeXN0ZW0gY2FuIGNvbnRhaW4gZmlsZXMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIDJHQi4KKy5UUAorLkIgcmVzaXplX2lub2RlCitSZXNlcnZlIHNwYWNlIHNvIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9yIHRhYmxlIG1heSBncm93IGluIHRoZQorZnV0dXJlLgorLkIgVHVuZTJmcyAKK29ubHkgc3VwcG9ydHMgY2xlYXJpbmcgdGhpcyBmaWxlc3lzdGVtIGZlYXR1cmUuCisuVFAKKy5CIG1tcAorRW5hYmxlIG9yIGRpc2FibGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiAoTU1QKSBmZWF0dXJlLgorQFFVT1RBX01BTl9DT01NRU5UQC5UUAorQFFVT1RBX01BTl9DT01NRU5UQC5CIHF1b3RhCitAUVVPVEFfTUFOX0NPTU1FTlRARW5hYmxlIGludGVybmFsIGZpbGUgc3lzdGVtIHF1b3RhIGlub2Rlcy4KKy5UUAorLkIgc3BhcnNlX3N1cGVyCitMaW1pdCB0aGUgbnVtYmVyIG9mIGJhY2t1cCBzdXBlcmJsb2NrcyB0byBzYXZlIHNwYWNlIG9uIGxhcmdlIGZpbGVzeXN0ZW1zLgorLlRQCisuQiB1bmluaXRfYmcKK0FsbG93IHRoZSBrZXJuZWwgdG8gaW5pdGlhbGl6ZSBiaXRtYXBzIGFuZCBpbm9kZSB0YWJsZXMgbGF6aWx5LCBhbmQgdG8KK2tlZXAgYSBoaWdoIHdhdGVybWFyayBmb3IgdGhlIHVudXNlZCBpbm9kZXMgaW4gYSBmaWxlc3lzdGVtLCB0byByZWR1Y2UKKy5CUiBlMmZzY2sgKDgpCit0aW1lLiAgVGhpcyBmaXJzdCBlMmZzY2sgcnVuIGFmdGVyIGVuYWJsaW5nIHRoaXMgZmVhdHVyZSB3aWxsIHRha2UgdGhlCitmdWxsIHRpbWUsIGJ1dCBzdWJzZXF1ZW50IGUyZnNjayBydW5zIHdpbGwgdGFrZSBvbmx5IGEgZnJhY3Rpb24gb2YgdGhlCitvcmlnaW5hbCB0aW1lLCBkZXBlbmRpbmcgb24gaG93IGZ1bGwgdGhlIGZpbGUgc3lzdGVtIGlzLgorLlJFCisuSVAKK0FmdGVyIHNldHRpbmcgb3IgY2xlYXJpbmcgCisuQlIgc3BhcnNlX3N1cGVyICwKKy5CUiB1bmluaXRfYmcgLAorLkJSIGZpbGV0eXBlICwKK29yCisuQiByZXNpemVfaW5vZGUKK2ZpbGVzeXN0ZW0gZmVhdHVyZXMsCisuQlIgZTJmc2NrICg4KQorbXVzdCBiZSBydW4gb24gdGhlIGZpbGVzeXN0ZW0gdG8gcmV0dXJuIHRoZSBmaWxlc3lzdGVtIHRvIGEgY29uc2lzdGVudCBzdGF0ZS4KKy5CIFR1bmUyZnMKK3dpbGwgcHJpbnQgYSBtZXNzYWdlIHJlcXVlc3RpbmcgdGhhdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuCisuQlIgZTJmc2NrICg4KQoraWYgbmVjZXNzYXJ5LiAgQWZ0ZXIgc2V0dGluZyB0aGUgCisuQiBkaXJfaW5kZXgKK2ZlYXR1cmUsIAorLkIgZTJmc2NrIC1ECitjYW4gYmUgcnVuIHRvIGNvbnZlcnQgZXhpc3RpbmcgZGlyZWN0b3JpZXMgdG8gdGhlIGhhc2hlZCBCLXRyZWUgZm9ybWF0LgorRW5hYmxpbmcgY2VydGFpbiBmaWxlc3lzdGVtIGZlYXR1cmVzIG1heSBwcmV2ZW50IHRoZSBmaWxlc3lzdGVtIGZyb20gYmVpbmcKK21vdW50ZWQgYnkga2VybmVscyB3aGljaCBkbyBub3Qgc3VwcG9ydCB0aG9zZSBmZWF0dXJlcy4gIEluIHBhcnRpY3VsYXIsIHRoZQorLkJSIHVuaW5pdF9iZworYW5kCisuQlIgZmxleF9iZworZmVhdHVyZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBleHQ0IGZpbGVzeXN0ZW0uCisuVFAKKy5CSSBcLXAgIiBtbXBfY2hlY2tfaW50ZXJ2YWwiCitTZXQgdGhlIGRlc2lyZWQgTU1QIGNoZWNrIGludGVydmFsIGluIHNlY29uZHMuIEl0IGlzIDUgc2Vjb25kcyBieSBkZWZhdWx0LgorLlRQCisuQkkgXC1yICIgcmVzZXJ2ZWQtYmxvY2tzLWNvdW50IgorU2V0IHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgZmlsZXN5c3RlbSBibG9ja3MuCisuVFAKKy5CSSBcLVEgIiBxdW90YS1vcHRpb25zIgorU2V0cyAncXVvdGEnIGZlYXR1cmUgb24gdGhlIHN1cGVyYmxvY2sgYW5kIHdvcmtzIG9uIHRoZSBxdW90YSBmaWxlcyBmb3IgdGhlCitnaXZlbiBxdW90YSB0eXBlLiBRdW90YSBvcHRpb25zIGNvdWxkIGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CisuUlMgMS4yaQorLlRQCisuQlIgW15ddXNycXVvdGEKK1NldHMvY2xlYXJzIHVzZXIgcXVvdGEgaW5vZGUgaW4gdGhlIHN1cGVyYmxvY2suCisuVFAKKy5CUiBbXl1ncnBxdW90YQorU2V0cy9jbGVhcnMgZ3JvdXAgcXVvdGEgaW5vZGUgaW4gdGhlIHN1cGVyYmxvY2suCisuUkUKKy5UUAorLkJJIFwtVCAiIHRpbWUtbGFzdC1jaGVja2VkIgorU2V0IHRoZSB0aW1lIHRoZSBmaWxlc3lzdGVtIHdhcyBsYXN0IGNoZWNrZWQgdXNpbmcKKy5CUiAgZTJmc2NrIC4KK1RoZSB0aW1lIGlzIGludGVycHJldGVkIHVzaW5nIHRoZSBjdXJyZW50IChsb2NhbCkgdGltZXpvbmUuCitUaGlzIGNhbiBiZSB1c2VmdWwgaW4gc2NyaXB0cyB3aGljaCB1c2UgYSBMb2dpY2FsIFZvbHVtZSBNYW5hZ2VyIHRvIG1ha2UKK2EgY29uc2lzdGVudCBzbmFwc2hvdCBvZiBhIGZpbGVzeXN0ZW0sIGFuZCB0aGVuIGNoZWNrIHRoZSBmaWxlc3lzdGVtIAorZHVyaW5nIG9mZiBob3VycyB0byBtYWtlIHN1cmUgaXQgaGFzbid0IGJlZW4gY29ycnVwdGVkIGR1ZSB0byAKK2hhcmR3YXJlIHByb2JsZW1zLCBldGMuICBJZiB0aGUgZmlsZXN5c3RlbSB3YXMgY2xlYW4sIHRoZW4gdGhpcyBvcHRpb24gY2FuIAorYmUgdXNlZCB0byBzZXQgdGhlIGxhc3QgY2hlY2tlZCB0aW1lIG9uIHRoZSBvcmlnaW5hbCBmaWxlc3lzdGVtLiAgVGhlIGZvcm1hdCAKK29mIAorLkkgdGltZS1sYXN0LWNoZWNrZWQKK2lzIHRoZSBpbnRlcm5hdGlvbmFsIGRhdGUgZm9ybWF0LCB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3BlY2lmaWVyLCBpLmUuCitZWVlZTU1ERFtISFtNTVtTU11dXS4gICBUaGUga2V5d29yZCAKKy5CIG5vdworaXMgYWxzbyBhY2NlcHRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgbGFzdCBjaGVja2VkIHRpbWUgd2lsbCBiZSBzZXQgdG8gdGhlIAorY3VycmVudCB0aW1lLgorLlRQCisuQkkgXC11ICIgdXNlciIKK1NldCB0aGUgdXNlciB3aG8gY2FuIHVzZSB0aGUgcmVzZXJ2ZWQgZmlsZXN5c3RlbSBibG9ja3MuCisuSSB1c2VyCitjYW4gYmUgYSBudW1lcmljYWwgdWlkIG9yIGEgdXNlciBuYW1lLiAgSWYgYSB1c2VyIG5hbWUgaXMgZ2l2ZW4sIGl0IAoraXMgY29udmVydGVkIHRvIGEgbnVtZXJpY2FsIHVpZCBiZWZvcmUgaXQgaXMgc3RvcmVkIGluIHRoZSBzdXBlcmJsb2NrLgorLlRQCisuQkkgXC1VICIgVVVJRCIKK1NldCB0aGUgdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKFVVSUQpIG9mIHRoZSBmaWxlc3lzdGVtIHRvCisuSVIgVVVJRCAuCitUaGUgZm9ybWF0IG9mIHRoZSBVVUlEIGlzIGEgc2VyaWVzIG9mIGhleCBkaWdpdHMgc2VwYXJhdGVkIGJ5IGh5cGhlbnMsIAorbGlrZSB0aGlzOiAKKyJjMWI5ZDVhMi1mMTYyLTExY2YtOWVjZS0wMDIwYWZjNzZmMTYiLiAgCitUaGUgCisuSSBVVUlECitwYXJhbWV0ZXIgbWF5IGFsc28gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisuUlMgMS4yaQorLlRQCisuSSBjbGVhcgorY2xlYXIgdGhlIGZpbGVzeXN0ZW0gVVVJRAorLlRQCisuSSByYW5kb20KK2dlbmVyYXRlIGEgbmV3IHJhbmRvbWx5LWdlbmVyYXRlZCBVVUlECisuVFAKKy5JIHRpbWUKK2dlbmVyYXRlIGEgbmV3IHRpbWUtYmFzZWQgVVVJRAorLlJFCisuSVAKK1RoZSBVVUlEIG1heSBiZSB1c2VkIGJ5CisuQlIgbW91bnQgKDgpLAorLkJSIGZzY2sgKDgpLAorYW5kCisuQlIgL2V0Yy9mc3RhYiAoNSkKKyhhbmQgcG9zc2libHkgb3RoZXJzKSBieSBzcGVjaWZ5aW5nCisuQkkgVVVJRD0gdXVpZAoraW5zdGVhZCBvZiBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlIG5hbWUgbGlrZQorLkJSIC9kZXYvaGRhMSAuCisuSVAKK1NlZQorLkJSIHV1aWRnZW4gKDgpCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK0lmIHRoZSBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIGdvb2QgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VjaCBhcworLkkgL2Rldi9yYW5kb20KK29yCisuSVIgL2Rldi91cmFuZG9tICwKKy5CIHR1bmUyZnMKK3dpbGwgYXV0b21hdGljYWxseSB1c2UgYSB0aW1lLWJhc2VkIFVVSUQgaW5zdGVhZCBvZiBhIHJhbmRvbWx5LWdlbmVyYXRlZCBVVUlELgorLlNIIEJVR1MKK1dlIGhhdmVuJ3QgZm91bmQgYW55IGJ1Z3MgeWV0LiAgVGhhdCBkb2Vzbid0IG1lYW4gdGhlcmUgYXJlbid0IGFueS4uLgorLlNIIEFVVEhPUgorLkIgdHVuZTJmcyAKK3dhcyB3cml0dGVuIGJ5IFJlbXkgQ2FyZCA8UmVteS5DYXJkQGxpbnV4Lm9yZz4uICBJdCBpcyBjdXJyZW50bHkgYmVpbmcKK21haW50YWluZWQgYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AYWx1bS5taXQuZWR1Pi4KKy5CIHR1bmUyZnMKK3VzZXMgdGhlIGV4dDJmcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4uCitUaGlzIG1hbnVhbCBwYWdlIHdhcyB3cml0dGVuIGJ5IENocmlzdGlhbiBLdWh0eiA8Y2hrQGRhdGEtaGguSGFuc2UuREU+LgorVGltZS1kZXBlbmRlbnQgY2hlY2tpbmcgd2FzIGFkZGVkIGJ5IFV3ZSBPaHNlIDx1d2VAdGlya2EuZ3VuLmRlPi4KKy5TSCBBVkFJTEFCSUxJVFkKKy5CIHR1bmUyZnMKK2lzIHBhcnQgb2YgdGhlIGUyZnNwcm9ncyBwYWNrYWdlIGFuZCBpcyBhdmFpbGFibGUgZnJvbSAKK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIIFNFRSBBTFNPCisuQlIgZGVidWdmcyAoOCksCisuQlIgZHVtcGUyZnMgKDgpLAorLkJSIGUyZnNjayAoOCksCisuQlIgbWtlMmZzICg4KSwKKy5CUiBleHQ0ICg1KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy5jIGIvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTNjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy90dW5lMmZzLmMKQEAgLTAsMCArMSwyMjc0IEBACisvKgorICogdHVuZTJmcy5jIC0gQ2hhbmdlIHRoZSBmaWxlIHN5c3RlbSBwYXJhbWV0ZXJzIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQgIFJlbXkgQ2FyZCA8Y2FyZEBtYXNpLmlicC5mcj4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFib3JhdG9pcmUgTUFTSSwgSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKgorICogQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKy8qCisgKiBIaXN0b3J5OgorICogOTMvMDYvMDEJLSBDcmVhdGlvbgorICogOTMvMTAvMzEJLSBBZGRlZCB0aGUgLWMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgbWF4aW1hbCBtb3VudCBjb3VudHMKKyAqIDkzLzEyLzE0CS0gQWRkZWQgLWwgZmxhZyB0byBsaXN0IGNvbnRlbnRzIG9mIHN1cGVyYmxvY2sKKyAqICAgICAgICAgICAgICAgIE0uSi5FLiBNb2wgKG1hcmNlbEBkdXRlY2EuZXQudHVkZWxmdC5ubCkKKyAqICAgICAgICAgICAgICAgIEYuVy4gdGVuIFdvbGRlIChmcmFua3lAZHV0ZWNhLmV0LnR1ZGVsZnQubmwpCisgKiA5My8xMi8yOQktIEFkZGVkIHRoZSAtZSBvcHRpb24gdG8gY2hhbmdlIGVycm9ycyBiZWhhdmlvcgorICogOTQvMDIvMjcJLSBQb3J0ZWQgdG8gdXNlIHRoZSBleHQyZnMgbGlicmFyeQorICogOTQvMDMvMDYJLSBBZGRlZCB0aGUgY2hlY2tzIGludGVydmFsIGZyb20gVXdlIE9oc2UgKHV3ZUB0aXJrYS5ndW4uZGUpCisgKi8KKworI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBmb3IgaW5jbHVzaW9uIG9mIHN0cnB0aW1lKCkgKi8KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPgkvKiBmb3Igc3RyY2FzZWNtcCgpICovCisjZWxzZQorI2RlZmluZSBfQlNEX1NPVVJDRQkvKiBmb3IgaW5jbHVzaW9uIG9mIHN0cmNhc2VjbXAoKSB2aWEgPHN0cmluZy5oPiAqLworI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorI2luY2x1ZGUgInV1aWQvdXVpZC5oIgorI2luY2x1ZGUgImUycC9lMnAuaCIKKyNpbmNsdWRlICJqZnNfdXNlci5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJibGtpZC9ibGtpZC5oIgorI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKworI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKKyNkZWZpbmUgUU9QVF9FTkFCTEUJKDEpCisjZGVmaW5lIFFPUFRfRElTQUJMRQkoLTEpCisKK2V4dGVybiBpbnQgYXNrX3luKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGRlZik7CisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJ0dW5lMmZzIjsKK2NoYXIgKmRldmljZV9uYW1lOworY2hhciAqbmV3X2xhYmVsLCAqbmV3X2xhc3RfbW91bnRlZCwgKm5ld19VVUlEOworY2hhciAqaW9fb3B0aW9uczsKK3N0YXRpYyBpbnQgY19mbGFnLCBDX2ZsYWcsIGVfZmxhZywgZl9mbGFnLCBnX2ZsYWcsIGlfZmxhZywgbF9mbGFnLCBMX2ZsYWc7CitzdGF0aWMgaW50IG1fZmxhZywgTV9mbGFnLCBRX2ZsYWcsIHJfZmxhZywgc19mbGFnID0gLTEsIHVfZmxhZywgVV9mbGFnLCBUX2ZsYWc7CitzdGF0aWMgaW50IElfZmxhZzsKK3N0YXRpYyBpbnQgY2xlYXJfbW1wOworc3RhdGljIHRpbWVfdCBsYXN0X2NoZWNrX3RpbWU7CitzdGF0aWMgaW50IHByaW50X2xhYmVsOworc3RhdGljIGludCBtYXhfbW91bnRfY291bnQsIG1vdW50X2NvdW50LCBtb3VudF9mbGFnczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludGVydmFsOworc3RhdGljIGJsazY0X3QgcmVzZXJ2ZWRfYmxvY2tzOworc3RhdGljIGRvdWJsZSByZXNlcnZlZF9yYXRpbzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2dpZCwgcmVzdWlkOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGVycm9yczsKK3N0YXRpYyBpbnQgb3Blbl9mbGFnOworc3RhdGljIGNoYXIgKmZlYXR1cmVzX2NtZDsKK3N0YXRpYyBjaGFyICptbnRvcHRzX2NtZDsKK3N0YXRpYyBpbnQgc3RyaWRlLCBzdHJpcGVfd2lkdGg7CitzdGF0aWMgaW50IHN0cmlkZV9zZXQsIHN0cmlwZV93aWR0aF9zZXQ7CitzdGF0aWMgY2hhciAqZXh0ZW5kZWRfY21kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV3X2lub2RlX3NpemU7CitzdGF0aWMgY2hhciAqZXh0X21vdW50X29wdHM7CitzdGF0aWMgaW50IHVzcnF1b3RhLCBncnBxdW90YTsKKworaW50IGpvdXJuYWxfc2l6ZSwgam91cm5hbF9mbGFnczsKK2NoYXIgKmpvdXJuYWxfZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBibGtfbW92ZV9saXN0OworCitzdHJ1Y3QgYmxrX21vdmUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlibGs2NF90IG9sZF9sb2M7CisJYmxrNjRfdCBuZXdfbG9jOworfTsKKworCitzdGF0aWMgY29uc3QgY2hhciAqcGxlYXNlX2ZzY2sgPSBOXygiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iKTsKKworI2lmZGVmIENPTkZJR19CVUlMRF9GSU5ERlMKK3ZvaWQgZG9fZmluZGZzKGludCBhcmdjLCBjaGFyICoqYXJndik7CisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwKKwkJXygiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSAiCisJCSAgIlstZyBncm91cF1cbiIKKwkJICAiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKwkJICAiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdICIKKwkJICAiWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCBtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorCQkgICJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdICIKKwkJICAiWy1MIHZvbHVtZV9sYWJlbF1cbiIKKwkJICAiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisjaWZkZWYgQ09ORklHX1FVT1RBCisJCSAgIlx0Wy1RIHF1b3RhX29wdGlvbnNdXG4iCisjZW5kaWYKKwkJICAiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSAiCisJCSAgIlstVSBVVUlEXVxuXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iKSwgcHJvZ3JhbV9uYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgX191MzIgb2tfZmVhdHVyZXNbM10gPSB7CisJLyogQ29tcGF0ICovCisJRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCB8CisJCUVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYLAorCS8qIEluY29tcGF0ICovCisJRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFIHwKKwkJRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMgfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRyB8CisJCUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAsCisJLyogUi9PIGNvbXBhdCAqLworCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSB8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOS3wKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRXwKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSB8CisjaWZkZWYgQ09ORklHX1FVT1RBCisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEgfAorI2VuZGlmCisJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSCit9OworCitzdGF0aWMgX191MzIgY2xlYXJfb2tfZmVhdHVyZXNbM10gPSB7CisJLyogQ29tcGF0ICovCisJRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCB8CisJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFIHwKKwkJRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgsCisJLyogSW5jb21wYXQgKi8KKwlFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUgfAorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRyB8CisJCUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAsCisJLyogUi9PIGNvbXBhdCAqLworCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSB8CisJCUVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFfAorCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0RJUl9OTElOS3wKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRXwKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSB8CisjZW5kaWYKKwkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTQorfTsKKworLyoKKyAqIFJlbW92ZSBhbiBleHRlcm5hbCBqb3VybmFsIGZyb20gdGhlIGZpbGVzeXN0ZW0KKyAqLworc3RhdGljIGludCByZW1vdmVfam91cm5hbF9kZXZpY2UoZXh0Ml9maWxzeXMgZnMpCit7CisJY2hhcgkJKmpvdXJuYWxfcGF0aDsKKwlleHQyX2ZpbHN5cwlqZnM7CisJY2hhcgkJYnVmWzEwMjRdOworCWpvdXJuYWxfc3VwZXJibG9ja190CSpqc2I7CisJaW50CQlpLCBucl91c2VyczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJY29tbWl0X3JlbW92ZV9qb3VybmFsID0gMDsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKworCWlmIChmX2ZsYWcpCisJCWNvbW1pdF9yZW1vdmVfam91cm5hbCA9IDE7IC8qIGZvcmNlIHJlbW92YWwgZXZlbiBpZiBlcnJvciAqLworCisJdXVpZF91bnBhcnNlKGZzLT5zdXBlci0+c19qb3VybmFsX3V1aWQsIGJ1Zik7CisJam91cm5hbF9wYXRoID0gYmxraWRfZ2V0X2Rldm5hbWUoTlVMTCwgIlVVSUQiLCBidWYpOworCisJaWYgKCFqb3VybmFsX3BhdGgpIHsKKwkJam91cm5hbF9wYXRoID0KKwkJCWV4dDJmc19maW5kX2Jsb2NrX2RldmljZShmcy0+c3VwZXItPnNfam91cm5hbF9kZXYpOworCQlpZiAoIWpvdXJuYWxfcGF0aCkKKwkJCWdvdG8gbm9fdmFsaWRfam91cm5hbDsKKwl9CisKKyNpZmRlZiBDT05GSUdfVEVTVElPX0RFQlVHCisJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCWlvX3B0ciA9IHRlc3RfaW9fbWFuYWdlcjsKKwkJdGVzdF9pb19iYWNraW5nX21hbmFnZXIgPSB1bml4X2lvX21hbmFnZXI7CisJfSBlbHNlCisjZW5kaWYKKwkJaW9fcHRyID0gdW5peF9pb19tYW5hZ2VyOworCXJldHZhbCA9IGV4dDJmc19vcGVuKGpvdXJuYWxfcGF0aCwgRVhUMl9GTEFHX1JXfAorCQkJICAgICBFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0ssIDAsCisJCQkgICAgIGZzLT5ibG9ja3NpemUsIGlvX3B0ciwgJmpmcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLCAiJXMiLAorCQkJXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIpKTsKKwkJZ290byBub192YWxpZF9qb3VybmFsOworCX0KKwlpZiAoIShqZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCSAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFVikpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIiksCisJCQlqb3VybmFsX3BhdGgpOworCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCisJLyogR2V0IHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgKi8KKwlpZiAoKHJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChqZnMtPmlvLCAxLCAtMTAyNCwgYnVmKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIikpOworCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCisJanNiID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopIGJ1ZjsKKwlpZiAoKGpzYi0+c19oZWFkZXIuaF9tYWdpYyAhPSAodW5zaWduZWQpbnRvaGwoSkZTX01BR0lDX05VTUJFUikpIHx8CisJICAgIChqc2ItPnNfaGVhZGVyLmhfYmxvY2t0eXBlICE9ICh1bnNpZ25lZCludG9obChKRlNfU1VQRVJCTE9DS19WMikpKSB7CisJCWZwdXRzKF8oIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iKSwgc3RkZXJyKTsKKwkJZ290byBub192YWxpZF9qb3VybmFsOworCX0KKworCS8qIEZpbmQgdGhlIGZpbGVzeXN0ZW0gVVVJRCAqLworCW5yX3VzZXJzID0gbnRvaGwoanNiLT5zX25yX3VzZXJzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfdXNlcnM7IGkrKykgeworCQlpZiAobWVtY21wKGZzLT5zdXBlci0+c191dWlkLCAmanNiLT5zX3VzZXJzW2kgKiAxNl0sIDE2KSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID49IG5yX3VzZXJzKSB7CisJCWZwdXRzKF8oIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIpLAorCQkgICAgICBzdGRlcnIpOworCQljb21taXRfcmVtb3ZlX2pvdXJuYWwgPSAxOworCQlnb3RvIG5vX3ZhbGlkX2pvdXJuYWw7CisJfQorCW5yX3VzZXJzLS07CisJZm9yIChpID0gMDsgaSA8IG5yX3VzZXJzOyBpKyspCisJCW1lbWNweSgmanNiLT5zX3VzZXJzW2kgKiAxNl0sICZqc2ItPnNfdXNlcnNbKGkgKyAxKSAqIDE2XSwgMTYpOworCWpzYi0+c19ucl91c2VycyA9IGh0b25sKG5yX3VzZXJzKTsKKworCS8qIFdyaXRlIGJhY2sgdGhlIGpvdXJuYWwgc3VwZXJibG9jayAqLworCWlmICgocmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChqZnMtPmlvLCAxLCAtMTAyNCwgYnVmKSkpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwKKwkJCSJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jay4iKTsKKwkJZ290byBub192YWxpZF9qb3VybmFsOworCX0KKworCWNvbW1pdF9yZW1vdmVfam91cm5hbCA9IDE7CisKK25vX3ZhbGlkX2pvdXJuYWw6CisJaWYgKGNvbW1pdF9yZW1vdmVfam91cm5hbCA9PSAwKSB7CisJCWZwdXRzKF8oIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorCQkJIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iKSwKKwkJICAgICAgc3RkZXJyKTsKKwkJcmV0dXJuIDE7CisJfQorCWZzLT5zdXBlci0+c19qb3VybmFsX2RldiA9IDA7CisJdXVpZF9jbGVhcihmcy0+c3VwZXItPnNfam91cm5hbF91dWlkKTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZnB1dHMoXygiSm91cm5hbCByZW1vdmVkXG4iKSwgc3Rkb3V0KTsKKwlmcmVlKGpvdXJuYWxfcGF0aCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciByZW1vdmVfam91cm5hbF9pbm9kZSAqLworc3RhdGljIGludCByZWxlYXNlX2Jsb2Nrc19wcm9jKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90ICpibG9ja25yLAorCQkJICAgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSAgICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgICAgICAgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJICAgICAgIHZvaWQgKnByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQoreworCWJsazY0X3QJYmxvY2s7CisJaW50CWdyb3VwOworCisJYmxvY2sgPSAqYmxvY2tucjsKKwlleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxvY2spOworCWdyb3VwID0gZXh0MmZzX2dyb3VwX29mX2JsazIoZnMsIGJsb2NrKTsKKwlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBncm91cCwgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KGZzLCBncm91cCkgKyAxKTsKKwlleHQyZnNfZ3JvdXBfZGVzY19jc3VtX3NldChmcywgZ3JvdXApOworCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudF9hZGQoZnMtPnN1cGVyLCBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpOworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlIHRoZSBqb3VybmFsIGlub2RlIGZyb20gdGhlIGZpbGVzeXN0ZW0KKyAqLworc3RhdGljIGVycmNvZGVfdCByZW1vdmVfam91cm5hbF9pbm9kZShleHQyX2ZpbHN5cyBmcykKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlpbm9fdAkJCWlubyA9IGZzLT5zdXBlci0+c19qb3VybmFsX2ludW07CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgaW5vLCAgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiKSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChpbm8gPT0gRVhUMl9KT1VSTkFMX0lOTykgeworCQlyZXR2YWwgPSBleHQyZnNfcmVhZF9iaXRtYXBzKGZzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiKSk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19ibG9ja19pdGVyYXRlMyhmcywgaW5vLAorCQkJCQkgICAgICAgQkxPQ0tfRkxBR19SRUFEX09OTFksIE5VTEwsCisJCQkJCSAgICAgICByZWxlYXNlX2Jsb2Nrc19wcm9jLCBOVUxMKTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIikpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKwkJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCX0gZWxzZQorCQlpbm9kZS5pX2ZsYWdzICY9IH5FWFQyX0lNTVVUQUJMRV9GTDsKKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoZnMsIGlubywgJmlub2RlKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsICIlcyIsCisJCQlfKCJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiKSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWZzLT5zdXBlci0+c19qb3VybmFsX2ludW0gPSAwOworCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVXBkYXRlIHRoZSBkZWZhdWx0IG1vdW50IG9wdGlvbnMKKyAqLworc3RhdGljIGludCB1cGRhdGVfbW50b3B0cyhleHQyX2ZpbHN5cyBmcywgY2hhciAqbW50b3B0cykKK3sKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2IgPSBmcy0+c3VwZXI7CisKKwlpZiAoZTJwX2VkaXRfbW50b3B0cyhtbnRvcHRzLCAmc2ItPnNfZGVmYXVsdF9tb3VudF9vcHRzLCB+MCkpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIpLAorCQkJbW50b3B0cyk7CisJCXJldHVybiAxOworCX0KKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19mc2NrX25lZWRlZChleHQyX2ZpbHN5cyBmcykKK3sKKwlpZiAoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykKKwkJcmV0dXJuIDA7CisJcHJpbnRmKCJcbiVzXG4iLCBfKHBsZWFzZV9mc2NrKSk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkKKwkJcHJpbnRmKF8oIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIikpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZXF1ZXN0X2ZzY2tfYWZ0ZXJ3YXJkcyhleHQyX2ZpbHN5cyBmcykKK3sKKwlzdGF0aWMgaW50IHJlcXVlc3RlZCA9IDA7CisKKwlpZiAocmVxdWVzdGVkKyspCisJCXJldHVybjsKKwlmcy0+c3VwZXItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJcHJpbnRmKCJcbiVzXG4iLCBfKHBsZWFzZV9mc2NrKSk7CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkKKwkJcHJpbnRmKCIlcyIsIF8oIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIikpOworfQorCisvKgorICogVXBkYXRlIHRoZSBmZWF0dXJlIHNldCBhcyBwcm92aWRlZCBieSB0aGUgdXNlci4KKyAqLworc3RhdGljIGludCB1cGRhdGVfZmVhdHVyZV9zZXQoZXh0Ml9maWxzeXMgZnMsIGNoYXIgKmZlYXR1cmVzKQoreworCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICpzYiA9IGZzLT5zdXBlcjsKKwlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICpnZDsKKwlfX3UzMgkJb2xkX2ZlYXR1cmVzWzNdOworCWRncnBfdAkJaTsKKwlpbnQJCXR5cGVfZXJyOworCXVuc2lnbmVkIGludAltYXNrX2VycjsKKworI2RlZmluZSBGRUFUVVJFX09OKHR5cGUsIG1hc2spICghKG9sZF9mZWF0dXJlc1sodHlwZSldICYgKG1hc2spKSAmJiBcCisJCQkJKCgmc2ItPnNfZmVhdHVyZV9jb21wYXQpWyh0eXBlKV0gJiAobWFzaykpKQorI2RlZmluZSBGRUFUVVJFX09GRih0eXBlLCBtYXNrKSAoKG9sZF9mZWF0dXJlc1sodHlwZSldICYgKG1hc2spKSAmJiBcCisJCQkJICEoKCZzYi0+c19mZWF0dXJlX2NvbXBhdClbKHR5cGUpXSAmIChtYXNrKSkpCisjZGVmaW5lIEZFQVRVUkVfQ0hBTkdFRCh0eXBlLCBtYXNrKSAoKG1hc2spICYgXAorCQkgICAgIChvbGRfZmVhdHVyZXNbKHR5cGUpXSBeICgmc2ItPnNfZmVhdHVyZV9jb21wYXQpWyh0eXBlKV0pKQorCisJb2xkX2ZlYXR1cmVzW0UyUF9GRUFUVVJFX0NPTVBBVF0gPSBzYi0+c19mZWF0dXJlX2NvbXBhdDsKKwlvbGRfZmVhdHVyZXNbRTJQX0ZFQVRVUkVfSU5DT01QQVRdID0gc2ItPnNfZmVhdHVyZV9pbmNvbXBhdDsKKwlvbGRfZmVhdHVyZXNbRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVRdID0gc2ItPnNfZmVhdHVyZV9yb19jb21wYXQ7CisKKwlpZiAoZTJwX2VkaXRfZmVhdHVyZTIoZmVhdHVyZXMsICZzYi0+c19mZWF0dXJlX2NvbXBhdCwKKwkJCSAgICAgIG9rX2ZlYXR1cmVzLCBjbGVhcl9va19mZWF0dXJlcywKKwkJCSAgICAgICZ0eXBlX2VyciwgJm1hc2tfZXJyKSkgeworCQlpZiAoIW1hc2tfZXJyKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iKSwKKwkJCQlmZWF0dXJlcyk7CisJCWVsc2UgaWYgKHR5cGVfZXJyICYgRTJQX0ZFQVRVUkVfTkVHQVRFX0ZMQUcpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgIgorCQkJCQkgICJub3Qgc3VwcG9ydGVkLlxuIiksCisJCQkJZTJwX2ZlYXR1cmUyc3RyaW5nKHR5cGVfZXJyICYKKwkJCQkJCSAgIEUyUF9GRUFUVVJFX1RZUEVfTUFTSywKKwkJCQkJCSAgIG1hc2tfZXJyKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnICIKKwkJCQkJICAibm90IHN1cHBvcnRlZC5cbiIpLAorCQkJCWUycF9mZWF0dXJlMnN0cmluZyh0eXBlX2VyciwgbWFza19lcnIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX0NPTVBBVCwgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpIHsKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgJiYKKwkJICAgICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkgeworCQkJZnB1dHMoXygiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgIgorCQkJCSJjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKwkJCQkidW5tb3VudGVkIG9yIG1vdW50ZWQgIgorCQkJCSJyZWFkLW9ubHkuXG4iKSwgc3RkZXJyKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChzYi0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKSB7CisJCQlmcHV0cyhfKCJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICAiCisJCQkJIlBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorCQkJCSJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIpLCBzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHNiLT5zX2pvdXJuYWxfaW51bSkgeworCQkJaWYgKHJlbW92ZV9qb3VybmFsX2lub2RlKGZzKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoc2ItPnNfam91cm5hbF9kZXYpIHsKKwkJCWlmIChyZW1vdmVfam91cm5hbF9kZXZpY2UoZnMpKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCWlmIChGRUFUVVJFX09OKEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSkgeworCQlpbnQgZXJyb3I7CisKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgfHwKKwkJICAgIChtb3VudF9mbGFncyAmIEVYVDJfTUZfUkVBRE9OTFkpKSB7CisJCQlmcHV0cyhfKCJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisJCQkJImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisJCQkJInJlYWQtb25seS5cbiIpLCBzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQllcnJvciA9IGV4dDJmc19tbXBfaW5pdChmcyk7CisJCWlmIChlcnJvcikgeworCQkJZnB1dHMoXygiXG5FcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCAiCisJCQkJInByb3RlY3Rpb24gZmVhdHVyZS4iKSwgc3RkZXJyKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyoKKwkJICogV2Ugd2FudCB0byB1cGRhdGUgZ3JvdXAgZGVzYyB3aXRoIHRoZSBuZXcgZnJlZSBibG9ja3MgY291bnQKKwkJICovCisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisKKwkJcHJpbnRmKF8oIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCAiCisJCQkgIndpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIpLAorCQkgICAgICAgc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCk7CisJfQorCisJaWYgKEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX0lOQ09NUEFULCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTU1QKSkgeworCQlpbnQgZXJyb3I7CisKKwkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9SRUFET05MWSkgeworCQkJZnB1dHMoXygiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKwkJCQkiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iKSwKKwkJCQlzdGRlcnIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQllcnJvciA9IGV4dDJmc19yZWFkX2JpdG1hcHMoZnMpOworCQlpZiAoZXJyb3IpIHsKKwkJCWZwdXRzKF8oIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWVycm9yID0gZXh0MmZzX21tcF9yZWFkKGZzLCBzYi0+c19tbXBfYmxvY2ssIE5VTEwpOworCQlpZiAoZXJyb3IpIHsKKwkJCXN0cnVjdCBtbXBfc3RydWN0ICptbXBfY21wID0gZnMtPm1tcF9jbXA7CisKKwkJCWlmIChlcnJvciA9PSBFWFQyX0VUX01NUF9NQUdJQ19JTlZBTElEKQorCQkJCXByaW50ZihfKCJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90ICIKKwkJCQkJICJtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iKSwKKwkJCQkJIEVYVDRfTU1QX01BR0lDLCBtbXBfY21wLT5tbXBfbWFnaWMpOworCQkJZWxzZQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJvciwgIiVzIiwKKwkJCQkJXygid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIikpOworCQkJZ290byBtbXBfZXJyb3I7CisJCX0KKworCQkvKiBXZSBuZWVkIHRvIGZvcmNlIG91dCB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgYXMgd2VsbCAqLworCQlmcy0+ZmxhZ3MgJj0gfkVYVDJfRkxBR19TVVBFUl9PTkxZOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBzYi0+c19tbXBfYmxvY2ssIC0xKTsKK21tcF9lcnJvcjoKKwkJc2ItPnNfbW1wX2Jsb2NrID0gMDsKKwkJc2ItPnNfbW1wX3VwZGF0ZV9pbnRlcnZhbCA9IDA7CisJfQorCisJaWYgKEZFQVRVUkVfT04oRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSkgeworCQkvKgorCQkgKiBJZiBhZGRpbmcgYSBqb3VybmFsIGZsYWcsIGxldCB0aGUgY3JlYXRlIGpvdXJuYWwKKwkJICogY29kZSBiZWxvdyBoYW5kbGUgc2V0dGluZyB0aGUgZmxhZyBhbmQgY3JlYXRpbmcgdGhlCisJCSAqIGpvdXJuYWwuICBXZSBzdXBwbHkgYSBkZWZhdWx0IHNpemUgaWYgbmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKCFqb3VybmFsX3NpemUpCisJCQlqb3VybmFsX3NpemUgPSAtMTsKKwkJc2ItPnNfZmVhdHVyZV9jb21wYXQgJj0gfkVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUw7CisJfQorCisJaWYgKEZFQVRVUkVfT04oRTJQX0ZFQVRVUkVfQ09NUEFULCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpIHsKKwkJaWYgKCFzYi0+c19kZWZfaGFzaF92ZXJzaW9uKQorCQkJc2ItPnNfZGVmX2hhc2hfdmVyc2lvbiA9IEVYVDJfSEFTSF9IQUxGX01ENDsKKwkJaWYgKHV1aWRfaXNfbnVsbCgodW5zaWduZWQgY2hhciAqKSBzYi0+c19oYXNoX3NlZWQpKQorCQkJdXVpZF9nZW5lcmF0ZSgodW5zaWduZWQgY2hhciAqKSBzYi0+c19oYXNoX3NlZWQpOworCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9JTkNPTVBBVCwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7CisJCWlmIChleHQyZnNfY2hlY2tfZGVzYyhmcykpIHsKKwkJCWZwdXRzKF8oIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgIgorCQkJCSJjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKwkJCQkiaW5jb25zaXN0ZW50LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkpIHsKKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgJiYKKwkJICAgICEobW91bnRfZmxhZ3MgJiBFWFQyX01GX1JFQURPTkxZKSkgeworCQkJZnB1dHMoXygiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlICIKKwkJCQkiY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisJCQkJInVubW91bnRlZCBvciBtb3VudGVkICIKKwkJCQkicmVhZC1vbmx5LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChGRUFUVVJFX09OKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWdkID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBpKTsKKwkJCWdkLT5iZ19pdGFibGVfdW51c2VkID0gMDsKKwkJCWdkLT5iZ19mbGFncyA9IEVYVDJfQkdfSU5PREVfWkVST0VEOworCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGkpOworCQl9CisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJfQorCisJaWYgKEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWdkID0gZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBpKTsKKwkJCWlmICgoZ2QtPmJnX2ZsYWdzICYgRVhUMl9CR19JTk9ERV9aRVJPRUQpID09IDApIHsKKwkJCQkvKiAKKwkJCQkgKiBYWFggd2hhdCB3ZSByZWFsbHkgc2hvdWxkIGRvIGlzIHphcAorCQkJCSAqIHVuaW5pdGlhbGl6ZWQgaW5vZGUgdGFibGVzIGluc3RlYWQuCisJCQkJICovCisJCQkJcmVxdWVzdF9mc2NrX2FmdGVyd2FyZHMoZnMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZ2QtPmJnX2l0YWJsZV91bnVzZWQgPSAwOworCQkJZ2QtPmJnX2ZsYWdzID0gMDsKKwkJCWdkLT5iZ19jaGVja3N1bSA9IDA7CisJCX0KKwkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwl9CisKKwlpZiAoRkVBVFVSRV9PTihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkgeworCQkvKgorCQkgKiBTZXQgdGhlIFFfZmxhZyBoZXJlIGFuZCBoYW5kbGUgdGhlIHF1b3RhIG9wdGlvbnMgaW4gdGhlIGNvZGUKKwkJICogYmVsb3cuCisJCSAqLworCQlpZiAoIVFfZmxhZykgeworCQkJUV9mbGFnID0gMTsKKwkJCS8qIEVuYWJsZSBib3RoIHVzZXIgcXVvdGEgYW5kIGdyb3VwIHF1b3RhIGJ5IGRlZmF1bHQgKi8KKwkJCXVzcnF1b3RhID0gUU9QVF9FTkFCTEU7CisJCQlncnBxdW90YSA9IFFPUFRfRU5BQkxFOworCQl9CisJCXNiLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5FWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBOworCX0KKworCWlmIChGRUFUVVJFX09GRihFMlBfRkVBVFVSRV9ST19JTkNPTVBBVCwKKwkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkgeworCQkvKgorCQkgKiBTZXQgdGhlIFFfZmxhZyBoZXJlIGFuZCBoYW5kbGUgdGhlIHF1b3RhIG9wdGlvbnMgaW4gdGhlIGNvZGUKKwkJICogYmVsb3cuCisJCSAqLworCQlpZiAoUV9mbGFnKQorCQkJZnB1dHMoXygiXG5XYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSciCisJCQkJImFyZ3VtZW50cy5cbiIpLCBzdGRlcnIpOworCQlRX2ZsYWcgPSAxOworCQkvKiBEaXNhYmxlIGJvdGggdXNlciBxdW90YSBhbmQgZ3JvdXAgcXVvdGEgYnkgZGVmYXVsdCAqLworCQl1c3JxdW90YSA9IFFPUFRfRElTQUJMRTsKKwkJZ3JwcXVvdGEgPSBRT1BUX0RJU0FCTEU7CisJfQorCisJaWYgKHNiLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFViAmJgorCSAgICAoc2ItPnNfZmVhdHVyZV9jb21wYXQgfHwgc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgfHwKKwkgICAgIHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQpKQorCQlleHQyZnNfdXBkYXRlX2R5bmFtaWNfcmV2KGZzKTsKKworCWlmIChGRUFUVVJFX0NIQU5HRUQoRTJQX0ZFQVRVUkVfUk9fSU5DT01QQVQsCisJCQkgICAgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpIHx8CisJICAgIEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpIHx8CisJICAgIEZFQVRVUkVfQ0hBTkdFRChFMlBfRkVBVFVSRV9JTkNPTVBBVCwKKwkJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpIHx8CisJICAgIEZFQVRVUkVfQ0hBTkdFRChFMlBfRkVBVFVSRV9DT01QQVQsCisJCQkgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpIHx8CisJICAgIEZFQVRVUkVfT0ZGKEUyUF9GRUFUVVJFX1JPX0lOQ09NUEFULAorCQkJRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFKSkKKwkJcmVxdWVzdF9mc2NrX2FmdGVyd2FyZHMoZnMpOworCisJaWYgKChvbGRfZmVhdHVyZXNbRTJQX0ZFQVRVUkVfQ09NUEFUXSAhPSBzYi0+c19mZWF0dXJlX2NvbXBhdCkgfHwKKwkgICAgKG9sZF9mZWF0dXJlc1tFMlBfRkVBVFVSRV9JTkNPTVBBVF0gIT0gc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCkgfHwKKwkgICAgKG9sZF9mZWF0dXJlc1tFMlBfRkVBVFVSRV9ST19JTkNPTVBBVF0gIT0gc2ItPnNfZmVhdHVyZV9yb19jb21wYXQpKQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBhIGpvdXJuYWwgdG8gdGhlIGZpbGVzeXN0ZW0uCisgKi8KK3N0YXRpYyBpbnQgYWRkX2pvdXJuYWwoZXh0Ml9maWxzeXMgZnMpCit7CisJdW5zaWduZWQgbG9uZyBqb3VybmFsX2Jsb2NrczsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzCWpmczsKKwlpb19tYW5hZ2VyCWlvX3B0cjsKKworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCSAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMKSB7CisJCWZwdXRzKF8oIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIpLCBzdGRlcnIpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKGpvdXJuYWxfZGV2aWNlKSB7CisJCWNoZWNrX3BsYXVzaWJpbGl0eShqb3VybmFsX2RldmljZSk7CisJCWNoZWNrX21vdW50KGpvdXJuYWxfZGV2aWNlLCAwLCBfKCJqb3VybmFsIikpOworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwkJaWYgKGdldGVudigiVEVTVF9JT19GTEFHUyIpIHx8IGdldGVudigiVEVTVF9JT19CTE9DSyIpKSB7CisJCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKwkJcmV0dmFsID0gZXh0MmZzX29wZW4oam91cm5hbF9kZXZpY2UsIEVYVDJfRkxBR19SV3wKKwkJCQkgICAgIEVYVDJfRkxBR19KT1VSTkFMX0RFVl9PSywgMCwKKwkJCQkgICAgIGZzLT5ibG9ja3NpemUsIGlvX3B0ciwgJmpmcyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygiXG5cdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIpLAorCQkJCWpvdXJuYWxfZGV2aWNlKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXByaW50ZihfKCJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIiksCisJCSAgICAgICBqb3VybmFsX2RldmljZSk7CisJCWZmbHVzaChzdGRvdXQpOworCisJCXJldHZhbCA9IGV4dDJmc19hZGRfam91cm5hbF9kZXZpY2UoZnMsIGpmcyk7CisJCWV4dDJmc19jbG9zZShqZnMpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgcmV0dmFsLAorCQkJCV8oIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiKSwKKwkJCQlqb3VybmFsX2RldmljZSk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlmcHV0cyhfKCJkb25lXG4iKSwgc3Rkb3V0KTsKKwl9IGVsc2UgaWYgKGpvdXJuYWxfc2l6ZSkgeworCQlmcHV0cyhfKCJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiKSwgc3Rkb3V0KTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWpvdXJuYWxfYmxvY2tzID0gZmlndXJlX2pvdXJuYWxfc2l6ZShqb3VybmFsX3NpemUsIGZzKTsKKworCQlyZXR2YWwgPSBleHQyZnNfYWRkX2pvdXJuYWxfaW5vZGUoZnMsIGpvdXJuYWxfYmxvY2tzLAorCQkJCQkJICBqb3VybmFsX2ZsYWdzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCQlfKCJcblx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiKSk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9IGVsc2UKKwkJCWZwdXRzKF8oImRvbmVcbiIpLCBzdGRvdXQpOworCQkvKgorCQkgKiBJZiB0aGUgZmlsZXN5c3RlbSB3YXNuJ3QgbW91bnRlZCwgd2UgbmVlZCB0byBmb3JjZQorCQkgKiB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgb3V0LgorCQkgKi8KKwkJaWYgKChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgPT0gMCkKKwkJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJfQorCXByaW50X2NoZWNrX21lc3NhZ2UoZnMtPnN1cGVyLT5zX21heF9tbnRfY291bnQsCisJCQkgICAgZnMtPnN1cGVyLT5zX2NoZWNraW50ZXJ2YWwpOworCXJldHVybiAwOworCitlcnI6CisJZnJlZShqb3VybmFsX2RldmljZSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9xdW90YV9vcHRpb25zKGV4dDJfZmlsc3lzIGZzKQoreworCXF1b3RhX2N0eF90IHFjdHg7CisJZXh0Ml9pbm9fdCBxZl9pbm87CisKKwlpZiAoIXVzcnF1b3RhICYmICFncnBxdW90YSkKKwkJLyogTm90aGluZyB0byBkby4gKi8KKwkJcmV0dXJuOworCisJcXVvdGFfaW5pdF9jb250ZXh0KCZxY3R4LCBmcywgLTEpOworCisJaWYgKHVzcnF1b3RhID09IFFPUFRfRU5BQkxFIHx8IGdycHF1b3RhID09IFFPUFRfRU5BQkxFKQorCQlxdW90YV9jb21wdXRlX3VzYWdlKHFjdHgpOworCisJaWYgKHVzcnF1b3RhID09IFFPUFRfRU5BQkxFICYmICFmcy0+c3VwZXItPnNfdXNyX3F1b3RhX2ludW0pIHsKKwkJaWYgKChxZl9pbm8gPSBxdW90YV9maWxlX2V4aXN0cyhmcywgVVNSUVVPVEEsCisJCQkJCQlRRk1UX1ZGU19WMSkpID4gMCkKKwkJCXF1b3RhX3VwZGF0ZV9saW1pdHMocWN0eCwgcWZfaW5vLCBVU1JRVU9UQSk7CisJCXF1b3RhX3dyaXRlX2lub2RlKHFjdHgsIFVTUlFVT1RBKTsKKwl9IGVsc2UgaWYgKHVzcnF1b3RhID09IFFPUFRfRElTQUJMRSkgeworCQlxdW90YV9yZW1vdmVfaW5vZGUoZnMsIFVTUlFVT1RBKTsKKwl9CisKKwlpZiAoZ3JwcXVvdGEgPT0gUU9QVF9FTkFCTEUgJiYgIWZzLT5zdXBlci0+c19ncnBfcXVvdGFfaW51bSkgeworCQlpZiAoKHFmX2lubyA9IHF1b3RhX2ZpbGVfZXhpc3RzKGZzLCBHUlBRVU9UQSwKKwkJCQkJCVFGTVRfVkZTX1YxKSkgPiAwKQorCQkJcXVvdGFfdXBkYXRlX2xpbWl0cyhxY3R4LCBxZl9pbm8sIEdSUFFVT1RBKTsKKwkJcXVvdGFfd3JpdGVfaW5vZGUocWN0eCwgR1JQUVVPVEEpOworCX0gZWxzZSBpZiAoZ3JwcXVvdGEgPT0gUU9QVF9ESVNBQkxFKSB7CisJCXF1b3RhX3JlbW92ZV9pbm9kZShmcywgR1JQUVVPVEEpOworCX0KKworCXF1b3RhX3JlbGVhc2VfY29udGV4dCgmcWN0eCk7CisKKwlpZiAoKHVzcnF1b3RhID09IFFPUFRfRU5BQkxFKSB8fCAoZ3JwcXVvdGEgPT0gUU9QVF9FTkFCTEUpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBfKCJcbldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsICIKKwkJCQkgICJ1bmRlciBkZXZlbG9wbWVudFxuIgorCQkJCSAgIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnLyIKKwkJCQkgICJpbmRleC5waHAvUXVvdGEgZm9yIG1vcmUgaW5mb3JtYXRpb25cblxuIikpOworCQlmcy0+c3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgfD0gRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0gZWxzZSBpZiAoIWZzLT5zdXBlci0+c191c3JfcXVvdGFfaW51bSAmJgorCQkgICAhZnMtPnN1cGVyLT5zX2dycF9xdW90YV9pbnVtKSB7CisJCWZzLT5zdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+RVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCX0KKworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19RVU9UQQorc3RhdGljIHZvaWQgcGFyc2VfcXVvdGFfb3B0cyhjb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnA7CisJaW50CWxlbjsKKworCWxlbiA9IHN0cmxlbihvcHRzKTsKKwlidWYgPSBtYWxsb2MobGVuKzEpOworCWlmICghYnVmKSB7CisJCWZwdXRzKF8oIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSAiCisJCQkib3B0aW9ucyFcbiIpLCBzdGRlcnIpOworCQlleGl0KDEpOworCX0KKwlzdHJjcHkoYnVmLCBvcHRzKTsKKwlmb3IgKHRva2VuID0gYnVmOyB0b2tlbiAmJiAqdG9rZW47IHRva2VuID0gbmV4dCkgeworCQlwID0gc3RyY2hyKHRva2VuLCAnLCcpOworCQluZXh0ID0gMDsKKwkJaWYgKHApIHsKKwkJCSpwID0gMDsKKwkJCW5leHQgPSBwKzE7CisJCX0KKworCQlpZiAoc3RyY21wKHRva2VuLCAidXNycXVvdGEiKSA9PSAwKSB7CisJCQl1c3JxdW90YSA9IFFPUFRfRU5BQkxFOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIl51c3JxdW90YSIpID09IDApIHsKKwkJCXVzcnF1b3RhID0gUU9QVF9ESVNBQkxFOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgImdycHF1b3RhIikgPT0gMCkgeworCQkJZ3JwcXVvdGEgPSBRT1BUX0VOQUJMRTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJeZ3JwcXVvdGEiKSA9PSAwKSB7CisJCQlncnBxdW90YSA9IFFPUFRfRElTQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWZwdXRzKF8oIlxuQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuXG4iCisJCQkJIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgIgorCQkJCSIocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorCQkJCSJcdFteXXVzcnF1b3RhXG4iCisJCQkJIlx0W15dZ3JwcXVvdGFcbiIKKwkJCQkiXG5cbiIpLCBzdGRlcnIpOworCQkJZnJlZShidWYpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcGFyc2VfZTJsYWJlbF9vcHRpb25zKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCit7CisJaWYgKChhcmdjIDwgMikgfHwgKGFyZ2MgPiAzKSkgeworCQlmcHV0cyhfKCJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIiksIHN0ZGVycik7CisJCWV4aXQoMSk7CisJfQorCWlvX29wdGlvbnMgPSBzdHJjaHIoYXJndlsxXSwgJz8nKTsKKwlpZiAoaW9fb3B0aW9ucykKKwkJKmlvX29wdGlvbnMrKyA9IDA7CisJZGV2aWNlX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmd2WzFdLCBOVUxMKTsKKwlpZiAoIWRldmljZV9uYW1lKSB7CisJCWNvbV9lcnIoImUybGFiZWwiLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisJb3Blbl9mbGFnID0gRVhUMl9GTEFHX0pPVVJOQUxfREVWX09LOworCWlmIChhcmdjID09IDMpIHsKKwkJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19SVzsKKwkJTF9mbGFnID0gMTsKKwkJbmV3X2xhYmVsID0gYXJndlsyXTsKKwl9IGVsc2UKKwkJcHJpbnRfbGFiZWwrKzsKK30KKworc3RhdGljIHRpbWVfdCBwYXJzZV90aW1lKGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QJdG0JdHM7CisKKwlpZiAoc3RyY21wKHN0ciwgIm5vdyIpID09IDApIHsKKwkJcmV0dXJuICh0aW1lKDApKTsKKwl9CisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisjaWZkZWYgSEFWRV9TVFJQVElNRQorCXN0cnB0aW1lKHN0ciwgIiVZJW0lZCVIJU0lUyIsICZ0cyk7CisjZWxzZQorCXNzY2FuZihzdHIsICIlNGQlMmQlMmQlMmQlMmQlMmQiLCAmdHMudG1feWVhciwgJnRzLnRtX21vbiwKKwkgICAgICAgJnRzLnRtX21kYXksICZ0cy50bV9ob3VyLCAmdHMudG1fbWluLCAmdHMudG1fc2VjKTsKKwl0cy50bV95ZWFyIC09IDE5MDA7CisJdHMudG1fbW9uIC09IDE7CisJaWYgKHRzLnRtX3llYXIgPCAwIHx8IHRzLnRtX21vbiA8IDAgfHwgdHMudG1fbW9uID4gMTEgfHwKKwkgICAgdHMudG1fbWRheSA8IDAgfHwgdHMudG1fbWRheSA+IDMxIHx8IHRzLnRtX2hvdXIgPiAyMyB8fAorCSAgICB0cy50bV9taW4gPiA1OSB8fCB0cy50bV9zZWMgPiA2MSkKKwkJdHMudG1fbWRheSA9IDA7CisjZW5kaWYKKwlpZiAodHMudG1fbWRheSA9PSAwKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJXygiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiKSwKKwkJCXN0cik7CisJCXVzYWdlKCk7CisJfQorCXRzLnRtX2lzZHN0ID0gLTE7CisJcmV0dXJuIChta3RpbWUoJnRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3R1bmUyZnNfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGM7CisJY2hhciAqdG1wOworCXN0cnVjdCBncm91cCAqZ3I7CisJc3RydWN0IHBhc3N3ZCAqcHc7CisJY2hhciBvcHRzdHJpbmdbMTAwXSA9ICJjOmU6Zmc6aTpqbG06bzpyOnM6dTpDOkU6STpKOkw6TTpPOlQ6VToiOworCisjaWZkZWYgQ09ORklHX1FVT1RBCisJc3RyY2F0KG9wdHN0cmluZywgIlE6Iik7CisjZW5kaWYKKwlvcGVuX2ZsYWcgPSAwOworCisJcHJpbnRmKCJ0dW5lMmZzICVzICglcylcbiIsIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZykpICE9IEVPRikKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2MnOgorCQkJbWF4X21vdW50X2NvdW50ID0gc3RydG9sKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCB8fCBtYXhfbW91bnRfY291bnQgPiAxNjAwMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgbW91bnRzIGNvdW50IC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJaWYgKG1heF9tb3VudF9jb3VudCA9PSAwKQorCQkJCW1heF9tb3VudF9jb3VudCA9IC0xOworCQkJY19mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCW1vdW50X2NvdW50ID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXAgfHwgbW91bnRfY291bnQgPiAxNjAwMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgbW91bnRzIGNvdW50IC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJQ19mbGFnID0gMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWlmIChzdHJjbXAob3B0YXJnLCAiY29udGludWUiKSA9PSAwKQorCQkJCWVycm9ycyA9IEVYVDJfRVJST1JTX0NPTlRJTlVFOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgInJlbW91bnQtcm8iKSA9PSAwKQorCQkJCWVycm9ycyA9IEVYVDJfRVJST1JTX1JPOworCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgInBhbmljIikgPT0gMCkKKwkJCQllcnJvcnMgPSBFWFQyX0VSUk9SU19QQU5JQzsKKwkJCWVsc2UgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQllX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ0UnOgorCQkJZXh0ZW5kZWRfY21kID0gb3B0YXJnOworCQkJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdmJzogLyogRm9yY2UgKi8KKwkJCWZfZmxhZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlyZXNnaWQgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlpZiAoKnRtcCkgeworCQkJCWdyID0gZ2V0Z3JuYW0ob3B0YXJnKTsKKwkJCQlpZiAoZ3IgPT0gTlVMTCkKKwkJCQkJdG1wID0gb3B0YXJnOworCQkJCWVsc2UgeworCQkJCQlyZXNnaWQgPSBnci0+Z3JfZ2lkOworCQkJCQkqdG1wID0gMDsKKwkJCQl9CisJCQl9CisJCQlpZiAoKnRtcCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQlnX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaW50ZXJ2YWwgPSBzdHJ0b3VsKG9wdGFyZywgJnRtcCwgMCk7CisJCQlzd2l0Y2ggKCp0bXApIHsKKwkJCWNhc2UgJ3MnOgorCQkJCXRtcCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnXDAnOgorCQkJY2FzZSAnZCc6CisJCQljYXNlICdEJzogLyogZGF5cyAqLworCQkJCWludGVydmFsICo9IDg2NDAwOworCQkJCWlmICgqdG1wICE9ICdcMCcpCisJCQkJCXRtcCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnbSc6CisJCQljYXNlICdNJzogLyogbW9udGhzISAqLworCQkJCWludGVydmFsICo9IDg2NDAwICogMzA7CisJCQkJdG1wKys7CisJCQkJYnJlYWs7CisJCQljYXNlICd3JzoKKwkJCWNhc2UgJ1cnOiAvKiB3ZWVrcyAqLworCQkJCWludGVydmFsICo9IDg2NDAwICogNzsKKwkJCQl0bXArKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImJhZCBpbnRlcnZhbCAtICVzIiksIG9wdGFyZyk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCWlfZmxhZyA9IDE7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAnaic6CisJCQlpZiAoIWpvdXJuYWxfc2l6ZSkKKwkJCQlqb3VybmFsX3NpemUgPSAtMTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdKJzoKKwkJCXBhcnNlX2pvdXJuYWxfb3B0cyhvcHRhcmcpOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJbF9mbGFnID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdMJzoKKwkJCW5ld19sYWJlbCA9IG9wdGFyZzsKKwkJCUxfZmxhZyA9IDE7CisJCQlvcGVuX2ZsYWcgfD0gRVhUMl9GTEFHX1JXIHwKKwkJCQlFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0s7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlyZXNlcnZlZF9yYXRpbyA9IHN0cnRvZChvcHRhcmcsICZ0bXApOworCQkJaWYgKCp0bXAgfHwgcmVzZXJ2ZWRfcmF0aW8gPiA1MCB8fAorCQkJICAgIHJlc2VydmVkX3JhdGlvIDwgMCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQlfKCJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIpLAorCQkJCQlvcHRhcmcpOworCQkJCXVzYWdlKCk7CisJCQl9CisJCQltX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJbmV3X2xhc3RfbW91bnRlZCA9IG9wdGFyZzsKKwkJCU1fZmxhZyA9IDE7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlpZiAobW50b3B0c19jbWQpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwgIiVzIiwKKwkJCQkJXygiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiKSk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCW1udG9wdHNfY21kID0gb3B0YXJnOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJaWYgKGZlYXR1cmVzX2NtZCkgeworCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCQlfKCItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIpKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJZmVhdHVyZXNfY21kID0gb3B0YXJnOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJCWNhc2UgJ1EnOgorCQkJUV9mbGFnID0gMTsKKwkJCXBhcnNlX3F1b3RhX29wdHMob3B0YXJnKTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgJ3InOgorCQkJcmVzZXJ2ZWRfYmxvY2tzID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKCp0bXApIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIiksCisJCQkJCW9wdGFyZyk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCXJfZmxhZyA9IDE7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAncyc6IC8qIERlcHJlY2F0ZWQgKi8KKwkJCXNfZmxhZyA9IGF0b2kob3B0YXJnKTsKKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCWJyZWFrOworCQljYXNlICdUJzoKKwkJCVRfZmxhZyA9IDE7CisJCQlsYXN0X2NoZWNrX3RpbWUgPSBwYXJzZV90aW1lKG9wdGFyZyk7CisJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQlicmVhazsKKwkJY2FzZSAndSc6CisJCQkJcmVzdWlkID0gc3RydG91bChvcHRhcmcsICZ0bXAsIDApOworCQkJCWlmICgqdG1wKSB7CisJCQkJCXB3ID0gZ2V0cHduYW0ob3B0YXJnKTsKKwkJCQkJaWYgKHB3ID09IE5VTEwpCisJCQkJCQl0bXAgPSBvcHRhcmc7CisJCQkJCWVsc2UgeworCQkJCQkJcmVzdWlkID0gcHctPnB3X3VpZDsKKwkJCQkJCSp0bXAgPSAwOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgqdG1wKSB7CisJCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCQkJXygiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIpLAorCQkJCQkJb3B0YXJnKTsKKwkJCQkJdXNhZ2UoKTsKKwkJCQl9CisJCQkJdV9mbGFnID0gMTsKKwkJCQlvcGVuX2ZsYWcgPSBFWFQyX0ZMQUdfUlc7CisJCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJbmV3X1VVSUQgPSBvcHRhcmc7CisJCQlVX2ZsYWcgPSAxOworCQkJb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXIHwKKwkJCQlFWFQyX0ZMQUdfSk9VUk5BTF9ERVZfT0s7CisJCQlicmVhazsKKwkJY2FzZSAnSSc6CisJCQluZXdfaW5vZGVfc2l6ZSA9IHN0cnRvdWwob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgqdG1wKSB7CisJCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJCV8oImJhZCBpbm9kZSBzaXplIC0gJXMiKSwKKwkJCQkJb3B0YXJnKTsKKwkJCQl1c2FnZSgpOworCQkJfQorCQkJaWYgKCEoKG5ld19pbm9kZV9zaXplICYKKwkJCSAgICAgICAobmV3X2lub2RlX3NpemUgLSAxKSkgPT0gMCkpIHsKKwkJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQkJXygiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgIgorCQkJCQkgICJwb3dlciBvZiB0d28tICVzIiksCisJCQkJCW9wdGFyZyk7CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCW9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVzsKKwkJCUlfZmxhZyA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCX0KKwlpZiAob3B0aW5kIDwgYXJnYyAtIDEgfHwgb3B0aW5kID09IGFyZ2MpCisJCXVzYWdlKCk7CisJaWYgKCFvcGVuX2ZsYWcgJiYgIWxfZmxhZykKKwkJdXNhZ2UoKTsKKwlpb19vcHRpb25zID0gc3RyY2hyKGFyZ3Zbb3B0aW5kXSwgJz8nKTsKKwlpZiAoaW9fb3B0aW9ucykKKwkJKmlvX29wdGlvbnMrKyA9IDA7CisJZGV2aWNlX25hbWUgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmd2W29wdGluZF0sIE5VTEwpOworCWlmICghZGV2aWNlX25hbWUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIlVuYWJsZSB0byByZXNvbHZlICclcyciKSwKKwkJCWFyZ3Zbb3B0aW5kXSk7CisJCWV4aXQoMSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0JVSUxEX0ZJTkRGUwordm9pZCBkb19maW5kZnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIJKmRldjsKKworCWlmICgoYXJnYyAhPSAyKSB8fAorCSAgICAoc3RybmNtcChhcmd2WzFdLCAiTEFCRUw9IiwgNikgJiYgc3RybmNtcChhcmd2WzFdLCAiVVVJRD0iLCA1KSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogZmluZGZzIExBQkVMPTxsYWJlbD58VVVJRD08dXVpZD5cbiIpOworCQlleGl0KDIpOworCX0KKwlkZXYgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmd2WzFdLCBOVUxMKTsKKwlpZiAoIWRldikgeworCQljb21fZXJyKCJmaW5kZnMiLCAwLCBfKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIiksCisJCQlhcmd2WzFdKTsKKwkJZXhpdCgxKTsKKwl9CisJcHV0cyhkZXYpOworCWV4aXQoMCk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBwYXJzZV9leHRlbmRlZF9vcHRzKGV4dDJfZmlsc3lzIGZzLCBjb25zdCBjaGFyICpvcHRzKQoreworCWNoYXIJKmJ1ZiwgKnRva2VuLCAqbmV4dCwgKnAsICphcmc7CisJaW50CWxlbiwgaGFzaF9hbGc7CisJaW50CXJfdXNhZ2UgPSAwOworCisJbGVuID0gc3RybGVuKG9wdHMpOworCWJ1ZiA9IG1hbGxvYyhsZW4rMSk7CisJaWYgKCFidWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsCisJCQlfKCJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCXN0cmNweShidWYsIG9wdHMpOworCWZvciAodG9rZW4gPSBidWY7IHRva2VuICYmICp0b2tlbjsgdG9rZW4gPSBuZXh0KSB7CisJCXAgPSBzdHJjaHIodG9rZW4sICcsJyk7CisJCW5leHQgPSAwOworCQlpZiAocCkgeworCQkJKnAgPSAwOworCQkJbmV4dCA9IHArMTsKKwkJfQorCQlhcmcgPSBzdHJjaHIodG9rZW4sICc9Jyk7CisJCWlmIChhcmcpIHsKKwkJCSphcmcgPSAwOworCQkJYXJnKys7CisJCX0KKwkJaWYgKHN0cmNtcCh0b2tlbiwgImNsZWFyLW1tcCIpID09IDAgfHwKKwkJICAgIHN0cmNtcCh0b2tlbiwgImNsZWFyX21tcCIpID09IDApIHsKKwkJCWNsZWFyX21tcCA9IDE7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAibW1wX3VwZGF0ZV9pbnRlcnZhbCIpID09IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgaW50djsKKwkJCWlmICghYXJnKSB7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaW50diA9IHN0cnRvdWwoYXJnLCAmcCwgMCk7CisJCQlpZiAoKnApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIiksCisJCQkJCWFyZyk7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGludHYgPT0gMCkgeworCQkJCWludHYgPSBFWFQ0X01NUF9VUERBVEVfSU5URVJWQUw7CisJCQl9IGVsc2UgaWYgKGludHYgPiBFWFQ0X01NUF9NQVhfVVBEQVRFX0lOVEVSVkFMKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iKSwKKwkJCQkJaW50dik7CisJCQkJcl91c2FnZSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcHJpbnRmKFBfKCJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlICIKKwkJCQkgICJpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iLAorCQkJCSAgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgIgorCQkJCSAgImludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iLCBpbnR2KSwKKwkJCSAgICAgICBpbnR2KTsKKwkJCWZzLT5zdXBlci0+c19tbXBfdXBkYXRlX2ludGVydmFsID0gaW50djsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAidGVzdF9mcyIpKSB7CisJCQlmcy0+c3VwZXItPnNfZmxhZ3MgfD0gRVhUMl9GTEFHU19URVNUX0ZJTEVTWVM7CisJCQlwcmludGYoIlNldHRpbmcgdGVzdCBmaWxlc3lzdGVtIGZsYWdcbiIpOworCQkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJedGVzdF9mcyIpKSB7CisJCQlmcy0+c3VwZXItPnNfZmxhZ3MgJj0gfkVYVDJfRkxBR1NfVEVTVF9GSUxFU1lTOworCQkJcHJpbnRmKCJDbGVhcmluZyB0ZXN0IGZpbGVzeXN0ZW0gZmxhZ1xuIik7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAic3RyaWRlIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJpZGUgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJpZGVfc2V0ID0gMTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJzdHJpcGUtd2lkdGgiKSA9PSAwIHx8CisJCQkgICBzdHJjbXAodG9rZW4sICJzdHJpcGVfd2lkdGgiKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmlwZV93aWR0aCA9IHN0cnRvdWwoYXJnLCAmcCwgMCk7CisJCQlpZiAoKnApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJXygiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIpLAorCQkJCQlhcmcpOworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmlwZV93aWR0aF9zZXQgPSAxOworCQl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgImhhc2hfYWxnIikgPT0gMCB8fAorCQkJICAgc3RyY21wKHRva2VuLCAiaGFzaC1hbGciKSA9PSAwKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWhhc2hfYWxnID0gZTJwX3N0cmluZzJoYXNoKGFyZyk7CisJCQlpZiAoaGFzaF9hbGcgPCAwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCV8oIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iKSwKKwkJCQkJYXJnKTsKKwkJCQlyX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmcy0+c3VwZXItPnNfZGVmX2hhc2hfdmVyc2lvbiA9IGhhc2hfYWxnOworCQkJcHJpbnRmKF8oIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSAiCisJCQkJICJ0byAlcyAoJWQpXG4iKSwKKwkJCSAgICAgICBhcmcsIGhhc2hfYWxnKTsKKwkJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAibW91bnRfb3B0cyIpKSB7CisJCQlpZiAoIWFyZykgeworCQkJCXJfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdHJsZW4oYXJnKSA+PSBzaXplb2YoZnMtPnN1cGVyLT5zX21vdW50X29wdHMpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJFeHRlbmRlZCBtb3VudCBvcHRpb25zIHRvbyBsb25nXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWV4dF9tb3VudF9vcHRzID0gc3RyZHVwKGFyZyk7CisJCX0gZWxzZQorCQkJcl91c2FnZSsrOworCX0KKwlpZiAocl91c2FnZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiXG5CYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG5cbiIKKwkJCSJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCAiCisJCQkiYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisJCQkiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuXG4iCisJCQkiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisJCQkiXHRjbGVhcl9tbXBcbiIKKwkJCSJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKwkJCSJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKwkJCSJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKwkJCSJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisJCQkiXHR0ZXN0X2ZzXG4iCisJCQkiXHRedGVzdF9mc1xuIikpOworCQlmcmVlKGJ1Zik7CisJCXJldHVybiAxOworCX0KKwlmcmVlKGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbGwgaW4gdGhlIGJsb2NrIGJpdG1hcCBibWFwIHdpdGggdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUKKyAqIGJsb2NrcyB0byBiZSBtb3ZlZAorICovCitzdGF0aWMgaW50IGdldF9tb3ZlX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMsIGludCBuZXdfaW5vX2Jsa3NfcGVyX2dycCwKKwkJCSAgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisJZGdycF90IGk7CisJaW50IHJldHZhbDsKKwlleHQyX2JhZGJsb2Nrc19saXN0IGJiX2xpc3QgPSAwOworCWJsazY0X3QgaiwgbmVlZGVkX2Jsb2NrcyA9IDA7CisJYmxrNjRfdCBzdGFydF9ibGssIGVuZF9ibGs7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9iYl9pbm9kZShmcywgJmJiX2xpc3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQlzdGFydF9ibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSArCisJCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCisJCWVuZF9ibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSArCisJCQkJCW5ld19pbm9fYmxrc19wZXJfZ3JwOworCisJCWZvciAoaiA9IHN0YXJ0X2JsazsgaiA8IGVuZF9ibGs7IGorKykgeworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgaikpIHsKKwkJCQkvKgorCQkJCSAqIElGIHRoZSBibG9jayBpcyBhIGJhZCBibG9jayB3ZSBmYWlsCisJCQkJICovCisJCQkJaWYgKGV4dDJmc19iYWRibG9ja3NfbGlzdF90ZXN0KGJiX2xpc3QsIGopKSB7CisJCQkJCWV4dDJmc19iYWRibG9ja3NfbGlzdF9mcmVlKGJiX2xpc3QpOworCQkJCQlyZXR1cm4gRU5PU1BDOworCQkJCX0KKworCQkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgaik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogV2UgYXJlIGdvaW5nIHRvIHVzZSB0aGlzIGJsb2NrIGZvcgorCQkJCSAqIGlub2RlIHRhYmxlLiBTbyBtYXJrIHRoZW0gdXNlZC4KKwkJCQkgKi8KKwkJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIGopOworCQkJfQorCQl9CisJCW5lZWRlZF9ibG9ja3MgKz0gZW5kX2JsayAtIHN0YXJ0X2JsazsKKwl9CisKKwlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZnJlZShiYl9saXN0KTsKKwlpZiAobmVlZGVkX2Jsb2NrcyA+IGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlyZXR1cm4gRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh0MmZzX2lzX21ldGFfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QgYmxrKQoreworCWRncnBfdCBncm91cDsKKwlncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCWlmIChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXApID09IGJsaykKKwkJcmV0dXJuIDE7CisJaWYgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBncm91cCkgPT0gYmxrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHQyZnNfaXNfYmxvY2tfaW5fZ3JvdXAoZXh0Ml9maWxzeXMgZnMsIGRncnBfdCBncm91cCwgYmxrNjRfdCBibGspCit7CisJYmxrNjRfdCBzdGFydF9ibGssIGVuZF9ibGs7CisJc3RhcnRfYmxrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2sgKworCQkJRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikgKiBncm91cDsKKwkvKgorCSAqIFdlIGNhbm5vdCBnZXQgbmV3IGJsb2NrIGJleW9uZCBlbmRfYmxrIGZvciBmb3IgdGhlIGxhc3QgYmxvY2sgZ3JvdXAKKwkgKiBzbyB3ZSBjYW4gY2hlY2sgd2l0aCBFWFQyX0JMT0NLU19QRVJfR1JPVVAgZXZlbiBmb3IgbGFzdCBibG9jayBncm91cAorCSAqLworCWVuZF9ibGsgICA9IHN0YXJ0X2JsayArIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCWlmIChibGsgPj0gc3RhcnRfYmxrICYmIGJsayA8PSBlbmRfYmxrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb3ZlX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisKKwljaGFyICpidWY7CisJZGdycF90IGdyb3VwID0gMDsKKwllcnJjb2RlX3QgcmV0dmFsOworCWludCBtZXRhX2RhdGEgPSAwOworCWJsazY0X3QgYmxrLCBuZXdfYmxrLCBnb2FsOworCXN0cnVjdCBibGtfbW92ZSAqYm12OworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJ1Zik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZvciAobmV3X2JsayA9IGJsayA9IGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCSAgICAgYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOyBibGsrKykgeworCQlpZiAoIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChleHQyZnNfaXNfbWV0YV9ibG9jayhmcywgYmxrKSkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9jayBpcyBtYXBwaW5nIGEgZnMgbWV0YSBkYXRhIGJsb2NrCisJCQkgKiBsaWtlIGdyb3VwIGRlc2MvYmxvY2sgYml0bWFwL2lub2RlIGJpdG1hcC4gV2UKKwkJCSAqIHNob3VsZCBmaW5kIGEgYmxvY2sgaW4gdGhlIHNhbWUgZ3JvdXAgYW5kIGZpeAorCQkJICogdGhlIHJlc3BlY3RpdmUgZnMgbWV0YWRhdGEgcG9pbnRlcnMuIE90aGVyd2lzZQorCQkJICogZmFpbAorCQkJICovCisJCQlncm91cCA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCQkJZ29hbCA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGdyb3VwKTsKKwkJCW1ldGFfZGF0YSA9IDE7CisKKwkJfSBlbHNlIHsKKwkJCWdvYWwgPSBuZXdfYmxrOworCQl9CisJCXJldHZhbCA9IGV4dDJmc19uZXdfYmxvY2syKGZzLCBnb2FsLCBOVUxMLCAmbmV3X2Jsayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJLyogbmV3IGZzIG1ldGEgZGF0YSBibG9jayBzaG91bGQgYmUgaW4gdGhlIHNhbWUgZ3JvdXAgKi8KKwkJaWYgKG1ldGFfZGF0YSAmJiAhZXh0MmZzX2lzX2Jsb2NrX2luX2dyb3VwKGZzLCBncm91cCwgbmV3X2JsaykpIHsKKwkJCXJldHZhbCA9IEVOT1NQQzsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCS8qIE1hcmsgdGhpcyBibG9jayBhcyBhbGxvY2F0ZWQgKi8KKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBuZXdfYmxrKTsKKworCQkvKiBBZGQgaXQgdG8gYmxvY2sgbW92ZSBsaXN0ICovCisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgYmxrX21vdmUpLCAmYm12KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX291dDsKKworCQlibXYtPm9sZF9sb2MgPSBibGs7CisJCWJtdi0+bmV3X2xvYyA9IG5ld19ibGs7CisKKwkJbGlzdF9hZGQoJihibXYtPmxpc3QpLCAmYmxrX21vdmVfbGlzdCk7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgYmxrLCAxLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCisJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLCBuZXdfYmxrLCAxLCBidWYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCX0KKworZXJyX291dDoKKwlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGJsazY0X3QgdHJhbnNsYXRlX2Jsb2NrKGJsazY0X3QgYmxrKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBibGtfbW92ZSAqYm12OworCisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmJsa19tb3ZlX2xpc3QpIHsKKwkJYm12ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGJsa19tb3ZlLCBsaXN0KTsKKwkJaWYgKGJtdi0+b2xkX2xvYyA9PSBibGspCisJCQlyZXR1cm4gYm12LT5uZXdfbG9jOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIGJsazY0X3QgKmJsb2NrX25yLAorCQkJIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkgaW50IHJlZl9vZmZzZXQgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlibGs2NF90IG5ld19ibGs7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwID0gKGV4dDJmc19ibG9ja19iaXRtYXApIHByaXZfZGF0YTsKKworCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCAqYmxvY2tfbnIpKQorCQlyZXR1cm4gMDsKKwluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKCpibG9ja19ucik7CisJaWYgKG5ld19ibGspIHsKKwkJKmJsb2NrX25yID0gbmV3X2JsazsKKwkJLyoKKwkJICogVGhpcyB3aWxsIGZvcmNlIHRoZSBleHQyZnNfd3JpdGVfaW5vZGUgaW4gdGhlIGl0ZXJhdG9yCisJCSAqLworCQlyZXQgfD0gQkxPQ0tfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlub2RlX3NjYW5fYW5kX2ZpeChleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWV4dDJfaW5vX3QgaW5vOworCWJsazY0X3QgYmxrOworCWNoYXIgKmJsb2NrX2J1ZiA9IDA7CisJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisJZXh0Ml9pbm9kZV9zY2FuCXNjYW4gPSBOVUxMOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSAqIDMsICZibG9ja19idWYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKGZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0OworCisJd2hpbGUgKDEpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9uZXh0X2lub2RlKHNjYW4sICZpbm8sICZpbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJaWYgKCFpbm8pCisJCQlicmVhazsKKworCQlpZiAoaW5vZGUuaV9saW5rc19jb3VudCA9PSAwKQorCQkJY29udGludWU7IC8qIGlub2RlIG5vdCBpbiB1c2UgKi8KKworCQkvKiBGSVhNRSEhCisJCSAqIElmIHdlIGVuZCB1cCBtb2RpZnlpbmcgdGhlIGpvdXJuYWwgaW5vZGUKKwkJICogdGhlIHNiLT5zX2pubF9ibG9ja3Mgd2lsbCBkaWZmZXIuIEJ1dCBhCisJCSAqIHN1YnNlcXVlbnQgZTJmc2NrIGZpeGVzIHRoYXQuCisJCSAqIERvIHdlIG5lZWQgdG8gZml4IHRoaXMgPz8KKwkJICovCisKKwkJaWYgKGV4dDJmc19maWxlX2FjbF9ibG9jayhmcywgJmlub2RlKSAmJgorCQkgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLAorCQkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2soZnMsICZpbm9kZSkpKSB7CisJCQlibGsgPSB0cmFuc2xhdGVfYmxvY2soZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrKGZzLAorCQkJCQkJCQkgICAgJmlub2RlKSk7CisJCQlpZiAoIWJsaykKKwkJCQljb250aW51ZTsKKworCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChmcywgJmlub2RlLCBibGspOworCisJCQkvKgorCQkJICogV3JpdGUgdGhlIGlub2RlIHRvIGRpc2sgc28gdGhhdCBpbm9kZSB0YWJsZQorCQkJICogcmVzaXppbmcgY2FuIHdvcmsKKwkJCSAqLworCQkJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBpbm8sICZpbm9kZSk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyX291dDsKKwkJfQorCisJCWlmICghZXh0MmZzX2lub2RlX2hhc192YWxpZF9ibG9ja3MyKGZzLCAmaW5vZGUpKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBpbm8sIDAsIGJsb2NrX2J1ZiwKKwkJCQkJICAgICAgIHByb2Nlc3NfYmxvY2ssIGJtYXApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfb3V0OworCisJfQorCitlcnJfb3V0OgorCWV4dDJmc19mcmVlX21lbSgmYmxvY2tfYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIHNjYW4gZm9yIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIHRoYXQgbWF5IG5lZWQgdG8gYmUKKyAqIG1vdmVkLiAgVGhpcyBjYW4gdGFrZSBwbGFjZSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgZm9ybWF0dGVkIGZvcgorICogUkFJRCBhcnJheXMgdXNpbmcgdGhlIG1rZTJmcydzIGV4dGVuZGVkIG9wdGlvbiAic3RyaWRlIi4KKyAqLworc3RhdGljIGludCBncm91cF9kZXNjX3NjYW5fYW5kX2ZpeChleHQyX2ZpbHN5cyBmcywgZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwKQoreworCWRncnBfdCBpOworCWJsazY0X3QgYmxrLCBuZXdfYmxrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBibGspKSB7CisJCQluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKGJsayk7CisJCQlpZiAoIW5ld19ibGspCisJCQkJY29udGludWU7CisJCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQl9CisKKwkJYmxrID0gZXh0MmZzX2lub2RlX2JpdG1hcF9sb2MoZnMsIGkpOworCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihibWFwLCBibGspKSB7CisJCQluZXdfYmxrID0gdHJhbnNsYXRlX2Jsb2NrKGJsayk7CisJCQlpZiAoIW5ld19ibGspCisJCQkJY29udGludWU7CisJCQlleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZnMsIGksIG5ld19ibGspOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4cGFuZF9pbm9kZV90YWJsZShleHQyX2ZpbHN5cyBmcywgdW5zaWduZWQgbG9uZyBuZXdfaW5vX3NpemUpCit7CisJZGdycF90IGk7CisJYmxrNjRfdCBibGs7CisJZXJyY29kZV90IHJldHZhbDsKKwlpbnQgbmV3X2lub19ibGtzX3Blcl9ncnA7CisJdW5zaWduZWQgaW50IGo7CisJY2hhciAqb2xkX2l0YWJsZSA9IE5VTEwsICpuZXdfaXRhYmxlID0gTlVMTDsKKwljaGFyICp0bXBfb2xkX2l0YWJsZSA9IE5VTEwsICp0bXBfbmV3X2l0YWJsZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBvbGRfaW5vX3NpemU7CisJaW50IG9sZF9pdGFibGVfc2l6ZSwgbmV3X2l0YWJsZV9zaXplOworCisJb2xkX2l0YWJsZV9zaXplID0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgKiBmcy0+YmxvY2tzaXplOworCW9sZF9pbm9fc2l6ZSA9IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpOworCisJbmV3X2lub19ibGtzX3Blcl9ncnAgPSBleHQyZnNfZGl2X2NlaWwoCisJCQkJCUVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpICoKKwkJCQkJbmV3X2lub19zaXplLAorCQkJCQlmcy0+YmxvY2tzaXplKTsKKworCW5ld19pdGFibGVfc2l6ZSA9IG5ld19pbm9fYmxrc19wZXJfZ3JwICogZnMtPmJsb2Nrc2l6ZTsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKG9sZF9pdGFibGVfc2l6ZSwgJm9sZF9pdGFibGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShuZXdfaXRhYmxlX3NpemUsICZuZXdfaXRhYmxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXQ7CisKKwl0bXBfb2xkX2l0YWJsZSA9IG9sZF9pdGFibGU7CisJdG1wX25ld19pdGFibGUgPSBuZXdfaXRhYmxlOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIGJsaywKKwkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwgb2xkX2l0YWJsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZm9yIChqID0gMDsgaiA8IEVYVDJfSU5PREVTX1BFUl9HUk9VUChmcy0+c3VwZXIpOyBqKyspIHsKKwkJCW1lbWNweShuZXdfaXRhYmxlLCBvbGRfaXRhYmxlLCBvbGRfaW5vX3NpemUpOworCisJCQltZW1zZXQobmV3X2l0YWJsZStvbGRfaW5vX3NpemUsIDAsCisJCQkJCW5ld19pbm9fc2l6ZSAtIG9sZF9pbm9fc2l6ZSk7CisKKwkJCW5ld19pdGFibGUgKz0gbmV3X2lub19zaXplOworCQkJb2xkX2l0YWJsZSArPSBvbGRfaW5vX3NpemU7CisJCX0KKworCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLworCQlvbGRfaXRhYmxlID0gdG1wX29sZF9pdGFibGU7CisJCW5ld19pdGFibGUgPSB0bXBfbmV3X2l0YWJsZTsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgYmxrLAorCQkJCQluZXdfaW5vX2Jsa3NfcGVyX2dycCwgbmV3X2l0YWJsZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogVXBkYXRlIHRoZSBtZXRhIGRhdGEgKi8KKwlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCA9IG5ld19pbm9fYmxrc19wZXJfZ3JwOworCWZzLT5zdXBlci0+c19pbm9kZV9zaXplID0gbmV3X2lub19zaXplOworCitlcnJfb3V0OgorCWlmIChvbGRfaXRhYmxlKQorCQlleHQyZnNfZnJlZV9tZW0oJm9sZF9pdGFibGUpOworCisJaWYgKG5ld19pdGFibGUpCisJCWV4dDJmc19mcmVlX21lbSgmbmV3X2l0YWJsZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhleHQyX2ZpbHN5cyBmcykKK3sKKwlibGs2NF90CQlibGs7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgaW50CWdyb3VwID0gMDsKKwl1bnNpZ25lZCBpbnQJY291bnQgPSAwOworCWludAkJdG90YWxfZnJlZSA9IDA7CisJaW50CQlncm91cF9mcmVlID0gMDsKKworCS8qCisJICogRmlyc3QgY2FsY3VsYXRlIHRoZSBibG9jayBzdGF0aXN0aWNzCisJICovCisJZm9yIChibGsgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkgICAgIGJsayA8IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKTsgYmxrKyspIHsKKwkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIoZnMtPmJsb2NrX21hcCwgYmxrKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfZnJlZSsrOworCQl9CisJCWNvdW50Kys7CisJCWlmICgoY291bnQgPT0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHx8CisJCSAgICAoYmxrID09IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKSkgeworCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXArKywKKwkJCQkJCQlncm91cF9mcmVlKTsKKwkJCWNvdW50ID0gMDsKKwkJCWdyb3VwX2ZyZWUgPSAwOworCQl9CisJfQorCXRvdGFsX2ZyZWUgPSBFWFQyRlNfQzJCKGZzLCB0b3RhbF9mcmVlKTsKKwlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgdG90YWxfZnJlZSk7CisKKwkvKgorCSAqIE5leHQsIGNhbGN1bGF0ZSB0aGUgaW5vZGUgc3RhdGlzdGljcworCSAqLworCWdyb3VwX2ZyZWUgPSAwOworCXRvdGFsX2ZyZWUgPSAwOworCWNvdW50ID0gMDsKKwlncm91cCA9IDA7CisKKwkvKiBQcm90ZWN0IGxvb3AgZnJvbSB3cmFwLWFyb3VuZCBpZiBzX2lub2Rlc19jb3VudCBtYXhlZCAqLworCWZvciAoaW5vID0gMTsgaW5vIDw9IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgJiYgaW5vID4gMDsgaW5vKyspIHsKKwkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2lub2RlX2JpdG1hcDIoZnMtPmlub2RlX21hcCwgaW5vKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfZnJlZSsrOworCQl9CisJCWNvdW50Kys7CisJCWlmICgoY291bnQgPT0gZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApIHx8CisJCSAgICAoaW5vID09IGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpKSB7CisJCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBncm91cCsrLAorCQkJCQkJCWdyb3VwX2ZyZWUpOworCQkJY291bnQgPSAwOworCQkJZ3JvdXBfZnJlZSA9IDA7CisJCX0KKwl9CisJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gdG90YWxfZnJlZTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG5leHQsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgcG5leHQgPSBwb3MtPm5leHQ7IHBvcyAhPSAoaGVhZCk7IFwKKwkgICAgIHBvcyA9IHBuZXh0LCBwbmV4dCA9IHBvcy0+bmV4dCkKKworc3RhdGljIHZvaWQgZnJlZV9ibGtfbW92ZV9saXN0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICp0bXA7CisJc3RydWN0IGJsa19tb3ZlICpibXY7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJmJsa19tb3ZlX2xpc3QpIHsKKwkJYm12ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGJsa19tb3ZlLCBsaXN0KTsKKwkJbGlzdF9kZWwoZW50cnkpOworCQlleHQyZnNfZnJlZV9tZW0oJmJtdik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCByZXNpemVfaW5vZGUoZXh0Ml9maWxzeXMgZnMsIHVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlpbnQgbmV3X2lub19ibGtzX3Blcl9ncnA7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBibWFwOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGVfYml0bWFwKGZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwdXRzKF8oIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIiksIHN0ZGVycik7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IGV4dDJmc19yZWFkX2Jsb2NrX2JpdG1hcChmcyk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIpLCBzdGRlcnIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlJTklUX0xJU1RfSEVBRCgmYmxrX21vdmVfbGlzdCk7CisKKworCW5ld19pbm9fYmxrc19wZXJfZ3JwID0gZXh0MmZzX2Rpdl9jZWlsKAorCQkJCQlFWFQyX0lOT0RFU19QRVJfR1JPVVAoZnMtPnN1cGVyKSoKKwkJCQkJbmV3X3NpemUsCisJCQkJCWZzLT5ibG9ja3NpemUpOworCisJLyogV2UgbWF5IGNoYW5nZSB0aGUgZmlsZSBzeXN0ZW0uCisJICogTWFyayB0aGUgZmlsZSBzeXN0ZW0gYXMgaW52YWxpZCBzbyB0aGF0CisJICogdGhlIHVzZXIgaXMgcHJvbXB0ZWQgdG8gcnVuIGZzY2suCisJICovCisJZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX1ZBTElEX0ZTOworCisJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2Jsb2NrX2JpdG1hcChmcywgXygiYmxvY2tzIHRvIGJlIG1vdmVkIiksCisJCQkJCQkmYm1hcCk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gIgorCQkJCSJpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIpLCBzdGRlcnIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSBnZXRfbW92ZV9iaXRtYXBzKGZzLCBuZXdfaW5vX2Jsa3NfcGVyX2dycCwgYm1hcCk7CisJaWYgKHJldHZhbCkgeworCQlmcHV0cyhfKCJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iKSwgc3RkZXJyKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlyZXR2YWwgPSBtb3ZlX2Jsb2NrKGZzLCBibWFwKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwdXRzKF8oIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIpLAorCQkgICAgICBzdGRlcnIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHZhbCA9IGlub2RlX3NjYW5fYW5kX2ZpeChmcywgYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0X3VuZG87CisKKwlyZXR2YWwgPSBncm91cF9kZXNjX3NjYW5fYW5kX2ZpeChmcywgYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0X3VuZG87CisKKwlyZXR2YWwgPSBleHBhbmRfaW5vZGVfdGFibGUoZnMsIG5ld19zaXplKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9vdXRfdW5kbzsKKworCWV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhmcyk7CisKKwlmcy0+c3VwZXItPnNfc3RhdGUgfD0gRVhUMl9WQUxJRF9GUzsKKwkvKiBtYXJrIHN1cGVyIGJsb2NrIGFuZCBibG9jayBiaXRtYXAgYXMgZGlydHkgKi8KKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCitlcnJfb3V0OgorCWZyZWVfYmxrX21vdmVfbGlzdCgpOworCWV4dDJmc19mcmVlX2Jsb2NrX2JpdG1hcChibWFwKTsKKworCXJldHVybiByZXR2YWw7CisKK2Vycl9vdXRfdW5kbzoKKwlmcmVlX2Jsa19tb3ZlX2xpc3QoKTsKKwlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAoYm1hcCk7CisJZnB1dHMoXygiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisJCQkiUnVuIGUydW5kbyB0byB1bmRvIHRoZSAiCisJCQkiZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iKSwgc3RkZXJyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdHVuZTJmc19zZXR1cF90ZGIoY29uc3QgY2hhciAqbmFtZSwgaW9fbWFuYWdlciAqaW9fcHRyKQoreworCWVycmNvZGVfdCByZXR2YWwgPSAwOworCWNvbnN0IGNoYXIgKnRkYl9kaXI7CisJY2hhciAqdGRiX2ZpbGU7CisJY2hhciAqZGV2X25hbWUsICp0bXBfbmFtZTsKKworI2lmIDAgLyogRklYTUUhISAqLworCS8qCisJICogQ29uZmlndXJhdGlvbiB2aWEgYSBjb25mIGZpbGUgd291bGQgYmUKKwkgKiBuaWNlCisJICovCisJcHJvZmlsZV9nZXRfc3RyaW5nKHByb2ZpbGUsICJzY3JhdGNoX2ZpbGVzIiwKKwkJCQkJImRpcmVjdG9yeSIsIDAsIDAsCisJCQkJCSZ0ZGJfZGlyKTsKKyNlbmRpZgorCXRtcF9uYW1lID0gc3RyZHVwKG5hbWUpOworCWlmICghdG1wX25hbWUpIHsKKwlhbGxvY19mbl9mYWlsOgorCQljb21fZXJyKHByb2dyYW1fbmFtZSwgRU5PTUVNLCAiJXMiLAorCQkJXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIpKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisJZGV2X25hbWUgPSBiYXNlbmFtZSh0bXBfbmFtZSk7CisKKwl0ZGJfZGlyID0gZ2V0ZW52KCJFMkZTUFJPR1NfVU5ET19ESVIiKTsKKwlpZiAoIXRkYl9kaXIpCisJCXRkYl9kaXIgPSAiL3Zhci9saWIvZTJmc3Byb2dzIjsKKworCWlmICghc3RyY21wKHRkYl9kaXIsICJub25lIikgfHwgKHRkYl9kaXJbMF0gPT0gMCkgfHwKKwkgICAgYWNjZXNzKHRkYl9kaXIsIFdfT0spKQorCQlyZXR1cm4gMDsKKworCXRkYl9maWxlID0gbWFsbG9jKHN0cmxlbih0ZGJfZGlyKSArIDkgKyBzdHJsZW4oZGV2X25hbWUpICsgNyArIDEpOworCWlmICghdGRiX2ZpbGUpCisJCWdvdG8gYWxsb2NfZm5fZmFpbDsKKwlzcHJpbnRmKHRkYl9maWxlLCAiJXMvdHVuZTJmcy0lcy5lMnVuZG8iLCB0ZGJfZGlyLCBkZXZfbmFtZSk7CisKKwlpZiAoIWFjY2Vzcyh0ZGJfZmlsZSwgRl9PSykpIHsKKwkJaWYgKHVubGluayh0ZGJfZmlsZSkgPCAwKSB7CisJCQlyZXR2YWwgPSBlcnJubzsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIpLAorCQkJCXRkYl9maWxlKTsKKwkJCWZyZWUodGRiX2ZpbGUpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCXNldF91bmRvX2lvX2JhY2tpbmdfbWFuYWdlcigqaW9fcHRyKTsKKwkqaW9fcHRyID0gdW5kb19pb19tYW5hZ2VyOworCXNldF91bmRvX2lvX2JhY2t1cF9maWxlKHRkYl9maWxlKTsKKwlwcmludGYoXygiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biAiCisJCSAidGhlIGNvbW1hbmRcbiAgICBlMnVuZG8gJXMgJXNcblxuIiksCisJCSB0ZGJfZmlsZSwgbmFtZSk7CisJZnJlZSh0ZGJfZmlsZSk7CisJZnJlZSh0bXBfbmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmbmRlZiBCVUlMRF9BU19MSUIKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyNlbHNlCitpbnQgdHVuZTJmc19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyNlbmRpZiAgLyogQlVJTERfQVNfTElCICovCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlleHQyX2ZpbHN5cyBmczsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqc2I7CisJaW9fbWFuYWdlciBpb19wdHIsIGlvX3B0cl9vcmlnID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisjaWZkZWYgRU5BQkxFX05MUworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWJpbmR0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSwgTE9DQUxFRElSKTsKKwl0ZXh0ZG9tYWluKE5MU19DQVRfTkFNRSk7CisJc2V0X2NvbV9lcnJfZ2V0dGV4dChnZXR0ZXh0KTsKKyNlbmRpZgorCWlmIChhcmdjICYmICphcmd2KQorCQlwcm9ncmFtX25hbWUgPSAqYXJndjsKKwlhZGRfZXJyb3JfdGFibGUoJmV0X2V4dDJfZXJyb3JfdGFibGUpOworCisjaWZkZWYgQ09ORklHX0JVSUxEX0ZJTkRGUworCWlmIChzdHJjbXAoZ2V0X3Byb2duYW1lKGFyZ3ZbMF0pLCAiZmluZGZzIikgPT0gMCkKKwkJZG9fZmluZGZzKGFyZ2MsIGFyZ3YpOworI2VuZGlmCisJaWYgKHN0cmNtcChnZXRfcHJvZ25hbWUoYXJndlswXSksICJlMmxhYmVsIikgPT0gMCkKKwkJcGFyc2VfZTJsYWJlbF9vcHRpb25zKGFyZ2MsIGFyZ3YpOworCWVsc2UKKwkJcGFyc2VfdHVuZTJmc19vcHRpb25zKGFyZ2MsIGFyZ3YpOworCisjaWZkZWYgQ09ORklHX1RFU1RJT19ERUJVRworCWlmIChnZXRlbnYoIlRFU1RfSU9fRkxBR1MiKSB8fCBnZXRlbnYoIlRFU1RfSU9fREVCVUciKSkgeworCQlpb19wdHIgPSB0ZXN0X2lvX21hbmFnZXI7CisJCXRlc3RfaW9fYmFja2luZ19tYW5hZ2VyID0gdW5peF9pb19tYW5hZ2VyOworCX0gZWxzZQorI2VuZGlmCisJCWlvX3B0ciA9IHVuaXhfaW9fbWFuYWdlcjsKKworcmV0cnlfb3BlbjoKKwlpZiAoKG9wZW5fZmxhZyAmIEVYVDJfRkxBR19SVykgPT0gMCB8fCBmX2ZsYWcpCisJCW9wZW5fZmxhZyB8PSBFWFQyX0ZMQUdfU0tJUF9NTVA7CisKKwlvcGVuX2ZsYWcgfD0gRVhUMl9GTEFHXzY0QklUUzsKKworCS8qIGtlZXAgdGhlIGZpbGVzeXN0ZW0gc3RydWN0IGFyb3VuZCB0byBkdW1wIE1NUCBkYXRhICovCisJb3Blbl9mbGFnIHw9IEVYVDJfRkxBR19OT0ZSRUVfT05fRVJST1I7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlX25hbWUsIGlvX29wdGlvbnMsIG9wZW5fZmxhZywKKwkJCSAgICAgIDAsIDAsIGlvX3B0ciwgJmZzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlpZiAocmV0dmFsID09IEVYVDJfRVRfTU1QX0ZTQ0tfT04gfHwKKwkJICAgIHJldHZhbCA9PSBFWFQyX0VUX01NUF9VTktOT1dOX1NFUSkKKwkJCWR1bXBfbW1wX21zZyhmcy0+bW1wX2J1ZiwKKwkJCQkgICAgIF8oIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSAiCisJCQkJICAgICAgICJpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisJCQkJICAgICAgICIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iKSk7CisJCWVsc2UgaWYgKHJldHZhbCA9PSBFWFQyX0VUX01NUF9GQUlMRUQpCisJCQlkdW1wX21tcF9tc2coZnMtPm1tcF9idWYsIE5VTEwpOworCQllbHNlIGlmIChyZXR2YWwgPT0gRVhUMl9FVF9NTVBfTUFHSUNfSU5WQUxJRCkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCV8oIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgIgorCQkJCSAgInJ1bm5pbmc6XG4nZTJmc2NrIC1mICVzJ1xuIiksIGRldmljZV9uYW1lKTsKKwkJZWxzZSBpZiAocmV0dmFsICE9IEVYVDJfRVRfTU1QX0ZBSUxFRCkKKwkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJICAgICBfKCJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIpKTsKKworCQlleHQyZnNfZnJlZShmcyk7CisJCWV4aXQoMSk7CisJfQorCWZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisKKwlpZiAoSV9mbGFnICYmICFpb19wdHJfb3JpZykgeworCQkvKgorCQkgKiBDaGVjayB0aGUgaW5vZGUgc2l6ZSBpcyByaWdodCBzbyB3ZSBjYW4gaXNzdWUgYW4KKwkJICogZXJyb3IgbWVzc2FnZSBhbmQgYmFpbCBiZWZvcmUgc2V0dGluZyB1cCB0aGUgdGRiCisJCSAqIGZpbGUuCisJCSAqLworCQlpZiAobmV3X2lub2RlX3NpemUgPT0gRVhUMl9JTk9ERV9TSVpFKGZzLT5zdXBlcikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIiksCisJCQkJbmV3X2lub2RlX3NpemUpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWlmIChuZXdfaW5vZGVfc2l6ZSA8IEVYVDJfSU5PREVfU0laRShmcy0+c3VwZXIpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKwkJCQlfKCJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJaWYgKG5ld19pbm9kZV9zaXplID4gZnMtPmJsb2Nrc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIpLAorCQkJCW5ld19pbm9kZV9zaXplLCBmcy0+YmxvY2tzaXplKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCisJCS8qCisJCSAqIElmIGlub2RlIHJlc2l6ZSBpcyByZXF1ZXN0ZWQgdXNlIHRoZQorCQkgKiBVbmRvIEkvTyBtYW5hZ2VyCisJCSAqLworCQlpb19wdHJfb3JpZyA9IGlvX3B0cjsKKwkJcmV0dmFsID0gdHVuZTJmc19zZXR1cF90ZGIoZGV2aWNlX25hbWUsICZpb19wdHIpOworCQlpZiAocmV0dmFsKSB7CisJCQlyYyA9IDE7CisJCQlnb3RvIGNsb3NlZnM7CisJCX0KKwkJaWYgKGlvX3B0ciAhPSBpb19wdHJfb3JpZykgeworCQkJZXh0MmZzX2Nsb3NlKGZzKTsKKwkJCWdvdG8gcmV0cnlfb3BlbjsKKwkJfQorCX0KKworCXNiID0gZnMtPnN1cGVyOworCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCisJaWYgKHByaW50X2xhYmVsKSB7CisJCS8qIEZvciBlMmxhYmVsIGVtdWxhdGlvbiAqLworCQlwcmludGYoIiUuKnNcbiIsIChpbnQpIHNpemVvZihzYi0+c192b2x1bWVfbmFtZSksCisJCSAgICAgICBzYi0+c192b2x1bWVfbmFtZSk7CisJCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisJCWdvdG8gY2xvc2VmczsKKwl9CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoImV4dDJmc19jaGVja19pZl9tb3VudCIsIHJldHZhbCwKKwkJCV8oIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJcmMgPSAxOworCQlnb3RvIGNsb3NlZnM7CisJfQorCS8qIE5vcm1hbGx5IHdlIG9ubHkgbmVlZCB0byB3cml0ZSBvdXQgdGhlIHN1cGVyYmxvY2sgKi8KKwlmcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX1NVUEVSX09OTFk7CisKKwlpZiAoY19mbGFnKSB7CisJCXNiLT5zX21heF9tbnRfY291bnQgPSBtYXhfbW91bnRfY291bnQ7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIiksCisJCSAgICAgICBtYXhfbW91bnRfY291bnQpOworCX0KKwlpZiAoQ19mbGFnKSB7CisJCXNiLT5zX21udF9jb3VudCA9IG1vdW50X2NvdW50OworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIpLCBtb3VudF9jb3VudCk7CisJfQorCWlmIChlX2ZsYWcpIHsKKwkJc2ItPnNfZXJyb3JzID0gZXJyb3JzOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iKSwgZXJyb3JzKTsKKwl9CisJaWYgKGdfZmxhZykgeworCQlzYi0+c19kZWZfcmVzZ2lkID0gcmVzZ2lkOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iKSwgcmVzZ2lkKTsKKwl9CisJaWYgKGlfZmxhZykgeworCQlpZiAoaW50ZXJ2YWwgPj0gKDFVTEwgPDwgMzIpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIiksCisJCQkJaW50ZXJ2YWwpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCXNiLT5zX2NoZWNraW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlwcmludGYoXygiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIiksCisJCSAgICAgICBpbnRlcnZhbCk7CisJfQorCWlmIChtX2ZsYWcpIHsKKwkJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChzYiwgcmVzZXJ2ZWRfcmF0aW8gKgorCQkJCQkgIGV4dDJmc19ibG9ja3NfY291bnQoc2IpIC8gMTAwLjApOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZiAoXygiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIpLAorCQkJcmVzZXJ2ZWRfcmF0aW8sIGV4dDJmc19yX2Jsb2Nrc19jb3VudChzYikpOworCX0KKwlpZiAocl9mbGFnKSB7CisJCWlmIChyZXNlcnZlZF9ibG9ja3MgPiBleHQyZnNfYmxvY2tzX2NvdW50KHNiKS8yKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiKSwKKwkJCQlyZXNlcnZlZF9ibG9ja3MpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWV4dDJmc19yX2Jsb2Nrc19jb3VudF9zZXQoc2IsIHJlc2VydmVkX2Jsb2Nrcyk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIpLAorCQkgICAgICAgcmVzZXJ2ZWRfYmxvY2tzKTsKKwl9CisJaWYgKHNfZmxhZyA9PSAxKSB7CisJCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikKKwkJCWZwdXRzKF8oIlxuVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlICIKKwkJCQkic3VwZXJibG9ja3MuXG4iKSwgc3RkZXJyKTsKKwkJZWxzZSB7CisJCQlzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PQorCQkJCUVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSOworCQkJc2ItPnNfc3RhdGUgJj0gfkVYVDJfVkFMSURfRlM7CisJCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCQlwcmludGYoXygiXG5TcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIiksCisJCQkgICAgICAgXyhwbGVhc2VfZnNjaykpOworCQl9CisJfQorCWlmIChzX2ZsYWcgPT0gMCkgeworCQlmcHV0cyhfKCJcbkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iKSwKKwkJICAgICAgc3RkZXJyKTsKKwkJcmMgPSAxOworCQlnb3RvIGNsb3NlZnM7CisJfQorCWlmIChUX2ZsYWcpIHsKKwkJc2ItPnNfbGFzdGNoZWNrID0gbGFzdF9jaGVja190aW1lOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIpLAorCQkgICAgICAgY3RpbWUoJmxhc3RfY2hlY2tfdGltZSkpOworCX0KKwlpZiAodV9mbGFnKSB7CisJCXNiLT5zX2RlZl9yZXN1aWQgPSByZXN1aWQ7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIpLCByZXN1aWQpOworCX0KKwlpZiAoTF9mbGFnKSB7CisJCWlmIChzdHJsZW4obmV3X2xhYmVsKSA+IHNpemVvZihzYi0+c192b2x1bWVfbmFtZSkpCisJCQlmcHV0cyhfKCJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIpLAorCQkJICAgICAgc3RkZXJyKTsKKwkJbWVtc2V0KHNiLT5zX3ZvbHVtZV9uYW1lLCAwLCBzaXplb2Yoc2ItPnNfdm9sdW1lX25hbWUpKTsKKwkJc3RybmNweShzYi0+c192b2x1bWVfbmFtZSwgbmV3X2xhYmVsLAorCQkJc2l6ZW9mKHNiLT5zX3ZvbHVtZV9uYW1lKSk7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9CisJaWYgKE1fZmxhZykgeworCQltZW1zZXQoc2ItPnNfbGFzdF9tb3VudGVkLCAwLCBzaXplb2Yoc2ItPnNfbGFzdF9tb3VudGVkKSk7CisJCXN0cm5jcHkoc2ItPnNfbGFzdF9tb3VudGVkLCBuZXdfbGFzdF9tb3VudGVkLAorCQkJc2l6ZW9mKHNiLT5zX2xhc3RfbW91bnRlZCkpOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCWlmIChtbnRvcHRzX2NtZCkgeworCQlyYyA9IHVwZGF0ZV9tbnRvcHRzKGZzLCBtbnRvcHRzX2NtZCk7CisJCWlmIChyYykKKwkJCWdvdG8gY2xvc2VmczsKKwl9CisJaWYgKGZlYXR1cmVzX2NtZCkgeworCQlyYyA9IHVwZGF0ZV9mZWF0dXJlX3NldChmcywgZmVhdHVyZXNfY21kKTsKKwkJaWYgKHJjKQorCQkJZ290byBjbG9zZWZzOworCX0KKwlpZiAoZXh0ZW5kZWRfY21kKSB7CisJCXJjID0gcGFyc2VfZXh0ZW5kZWRfb3B0cyhmcywgZXh0ZW5kZWRfY21kKTsKKwkJaWYgKHJjKQorCQkJZ290byBjbG9zZWZzOworCQlpZiAoY2xlYXJfbW1wICYmICFmX2ZsYWcpIHsKKwkJCWZwdXRzKF8oIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gIgorCQkJCSJJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIiksCisJCQkgICAgICBzdGRlcnIpOworCQkJZ290byBjbG9zZWZzOworCQl9CisJfQorCWlmIChjbGVhcl9tbXApIHsKKwkJcmMgPSBleHQyZnNfbW1wX2NsZWFyKGZzKTsKKwkJZ290byBjbG9zZWZzOworCX0KKwlpZiAoam91cm5hbF9zaXplIHx8IGpvdXJuYWxfZGV2aWNlKSB7CisJCXJjID0gYWRkX2pvdXJuYWwoZnMpOworCQlpZiAocmMpCisJCQlnb3RvIGNsb3NlZnM7CisJfQorCisJaWYgKFFfZmxhZykgeworCQlpZiAobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHsKKwkJCWZwdXRzKF8oIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiAiCisJCQkJInRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIpLCBzdGRlcnIpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWhhbmRsZV9xdW90YV9vcHRpb25zKGZzKTsKKwl9CisKKwlpZiAoVV9mbGFnKSB7CisJCWludCBzZXRfY3N1bSA9IDA7CisJCWRncnBfdCBpOworCisJCWlmIChzYi0+c19mZWF0dXJlX3JvX2NvbXBhdCAmCisJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSB7CisJCQkvKgorCQkJICogQ2hhbmdpbmcgdGhlIFVVSUQgcmVxdWlyZXMgcmV3cml0aW5nIGFsbCBtZXRhZGF0YSwKKwkJCSAqIHdoaWNoIGNhbiByYWNlIHdpdGggYSBtb3VudGVkIGZzLiAgRG9uJ3QgYWxsb3cgdGhhdC4KKwkJCSAqLworCQkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCQkJZnB1dHMoXygiVGhlIFVVSUQgbWF5IG9ubHkgYmUgIgorCQkJCQkiY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzICIKKwkJCQkJInVubW91bnRlZC5cbiIpLCBzdGRlcnIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoY2hlY2tfZnNja19uZWVkZWQoZnMpKQorCQkJCWV4aXQoMSk7CisKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUgaWYgdGhlIGJsb2NrIGdyb3VwIGNoZWNrc3VtcyBhcmUKKwkJCSAqIGNvcnJlY3Qgc28gd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB0byBzZXQKKwkJCSAqIHRoZW0gbGF0ZXIgb24uCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQkJCWlmICghZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoZnMsIGkpKQorCQkJCQlicmVhazsKKwkJCWlmIChpID49IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJCXNldF9jc3VtID0gMTsKKwkJfQorCQlpZiAoKHN0cmNhc2VjbXAobmV3X1VVSUQsICJudWxsIikgPT0gMCkgfHwKKwkJICAgIChzdHJjYXNlY21wKG5ld19VVUlELCAiY2xlYXIiKSA9PSAwKSkgeworCQkJdXVpZF9jbGVhcihzYi0+c191dWlkKTsKKwkJfSBlbHNlIGlmIChzdHJjYXNlY21wKG5ld19VVUlELCAidGltZSIpID09IDApIHsKKwkJCXV1aWRfZ2VuZXJhdGVfdGltZShzYi0+c191dWlkKTsKKwkJfSBlbHNlIGlmIChzdHJjYXNlY21wKG5ld19VVUlELCAicmFuZG9tIikgPT0gMCkgeworCQkJdXVpZF9nZW5lcmF0ZShzYi0+c191dWlkKTsKKwkJfSBlbHNlIGlmICh1dWlkX3BhcnNlKG5ld19VVUlELCBzYi0+c191dWlkKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsICIlcyIsCisJCQkJXygiSW52YWxpZCBVVUlEIGZvcm1hdFxuIikpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWlmIChzZXRfY3N1bSkgeworCQkJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspCisJCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGkpOworCQkJZnMtPmZsYWdzICY9IH5FWFQyX0ZMQUdfU1VQRVJfT05MWTsKKwkJfQorCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJfQorCWlmIChJX2ZsYWcpIHsKKwkJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCQlmcHV0cyhfKCJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSAiCisJCQkJImNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyAiCisJCQkJInVubW91bnRlZC5cbiIpLCBzdGRlcnIpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisJCSAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykgeworCQkJZnB1dHMoXygiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgIgorCQkJCSJmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisJCQkJImZlYXR1cmUgZW5hYmxlZC5cbiIpLAorCQkJICAgICAgc3RkZXJyKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xvc2VmczsKKwkJfQorCQkvKgorCQkgKiBXZSB3YW50IHRvIHVwZGF0ZSBncm91cCBkZXNjcmlwdG9yIGFsc28KKwkJICogd2l0aCB0aGUgbmV3IGZyZWUgaW5vZGUgY291bnQKKwkJICovCisJCWZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX1NVUEVSX09OTFk7CisJCWlmIChyZXNpemVfaW5vZGUoZnMsIG5ld19pbm9kZV9zaXplKSA9PSAwKSB7CisJCQlwcmludGYoXygiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIiksCisJCQkJCQkJbmV3X2lub2RlX3NpemUpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCIlcyIsIF8oIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIikpOworCQkJcmMgPSAxOworCQkJZ290byBjbG9zZWZzOworCQl9CisJfQorCisJaWYgKGxfZmxhZykKKwkJbGlzdF9zdXBlcihzYik7CisJaWYgKHN0cmlkZV9zZXQpIHsKKwkJc2ItPnNfcmFpZF9zdHJpZGUgPSBzdHJpZGU7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwkJcHJpbnRmKF8oIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIpLCBzdHJpZGUpOworCX0KKwlpZiAoc3RyaXBlX3dpZHRoX3NldCkgeworCQlzYi0+c19yYWlkX3N0cmlwZV93aWR0aCA9IHN0cmlwZV93aWR0aDsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCQlwcmludGYoXygiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIpLCBzdHJpcGVfd2lkdGgpOworCX0KKwlpZiAoZXh0X21vdW50X29wdHMpIHsKKwkJc3RybmNweSgoY2hhciAqKShmcy0+c3VwZXItPnNfbW91bnRfb3B0cyksIGV4dF9tb3VudF9vcHRzLAorCQkJc2l6ZW9mKGZzLT5zdXBlci0+c19tb3VudF9vcHRzKSk7CisJCWZzLT5zdXBlci0+c19tb3VudF9vcHRzW3NpemVvZihmcy0+c3VwZXItPnNfbW91bnRfb3B0cyktMV0gPSAwOworCQlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJCXByaW50ZihfKCJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iKSwKKwkJICAgICAgIGV4dF9tb3VudF9vcHRzKTsKKwkJZnJlZShleHRfbW91bnRfb3B0cyk7CisJfQorCWZyZWUoZGV2aWNlX25hbWUpOworCXJlbW92ZV9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisKK2Nsb3NlZnM6CitpZiAocmMpIHsKKwkJZXh0MmZzX21tcF9zdG9wKGZzKTsKKyNpZm5kZWYgQlVJTERfQVNfTElCCisJCWV4aXQoMSk7CisjZW5kaWYKKwl9CisJcmV0dXJuIChleHQyZnNfY2xvc2UoZnMpID8gMSA6IDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy5oIGIvZTJmc3Byb2dzL21pc2MvdHVuZTJmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2U0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy90dW5lMmZzLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIHR1bmUyZnMuaCAtIENoYW5nZSB0aGUgZmlsZSBzeXN0ZW0gcGFyYW1ldGVycyBvbiBhbiBleHQyIGZpbGUgc3lzdGVtCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9UVU5FMkZTX0hfCisjZGVmaW5lIF9UVU5FMkZTX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGFrZXMgZXhhY3RseSB0aGUgc2FtZSBhcmdzIGFzIHRoZSB0dW5lMmZzIGV4ZWN0dWFibGUuCisgKiBJcyB0aGUgZW50cnlwb2ludCBmb3IgbGlidHVuZTJmcy4KKyAqLworaW50IHR1bmUyZnNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL3V0aWwuYyBiL2UyZnNwcm9ncy9taXNjL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJjYzdmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvdXRpbC5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogdXRpbC5jIC0tLSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdHVuZTJmcyBhbmQgbWtlMmZzCisgKgorICogQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgYnkgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9NQUpPUl9ICisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJldC9jb21fZXJyLmgiCisjaW5jbHVkZSAiZTJwL2UycC5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyNpbmNsdWRlICJibGtpZC9ibGtpZC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworI2lmbmRlZiBIQVZFX1NUUkNBU0VDTVAKK2ludCBzdHJjYXNlY21wIChjaGFyICpzMSwgY2hhciAqczIpCit7CisJd2hpbGUgKCpzMSAmJiAqczIpIHsKKwkJaW50IGNoMSA9ICpzMSsrLCBjaDIgPSAqczIrKzsKKwkJaWYgKGlzdXBwZXIgKGNoMSkpCisJCQljaDEgPSB0b2xvd2VyIChjaDEpOworCQlpZiAoaXN1cHBlciAoY2gyKSkKKwkJCWNoMiA9IHRvbG93ZXIgKGNoMik7CisJCWlmIChjaDEgIT0gY2gyKQorCQkJcmV0dXJuIGNoMSAtIGNoMjsKKwl9CisJcmV0dXJuICpzMSA/IDEgOiAqczIgPyAtMSA6IDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEdpdmVuIGFyZ3ZbMF0sIHJldHVybiB0aGUgcHJvZ3JhbSBuYW1lLgorICovCitjaGFyICpnZXRfcHJvZ25hbWUoY2hhciAqYXJndl96ZXJvKQoreworCWNoYXIJKmNwOworCisJY3AgPSBzdHJyY2hyKGFyZ3ZfemVybywgJy8nKTsKKwlpZiAoIWNwICkKKwkJcmV0dXJuIGFyZ3ZfemVybzsKKwllbHNlCisJCXJldHVybiBjcCsxOworfQorCit2b2lkIHByb2NlZWRfcXVlc3Rpb24odm9pZCkKK3sKKwljaGFyIGJ1ZlsyNTZdOworCWNvbnN0IGNoYXIgKnNob3J0X3llcyA9IF8oInlZIik7CisKKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlmcHV0cyhfKCJQcm9jZWVkIGFueXdheT8gKHksbikgIiksIHN0ZG91dCk7CisJYnVmWzBdID0gMDsKKwlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSB8fAorCSAgICBzdHJjaHIoc2hvcnRfeWVzLCBidWZbMF0pID09IDApCisJCWV4aXQoMSk7Cit9CisKK3ZvaWQgY2hlY2tfcGxhdXNpYmlsaXR5KGNvbnN0IGNoYXIgKmRldmljZSkKK3sKKwlpbnQgdmFsOworCWV4dDJmc19zdHJ1Y3Rfc3RhdCBzOworCisJdmFsID0gZXh0MmZzX3N0YXQoZGV2aWNlLCAmcyk7CisKKwlpZih2YWwgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIiksCisJCQlkZXZpY2UsIGVycm9yX21lc3NhZ2UoZXJybm8pKTsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCWZwdXRzKF8oIlxuVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyAiCisJCQkJImRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iKSwgc3RkZXJyKTsKKwkJZXhpdCgxKTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisJLyogT24gRnJlZUJTRCwgYWxsIGRpc2sgZGV2aWNlcyBhcmUgY2hhcmFjdGVyIHNwZWNpYWxzICovCisJaWYgKCFTX0lTQkxLKHMuc3RfbW9kZSkgJiYgIVNfSVNDSFIocy5zdF9tb2RlKSkKKyNlbHNlCisJaWYgKCFTX0lTQkxLKHMuc3RfbW9kZSkpCisjZW5kaWYKKwl7CisJCXByaW50ZihfKCIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIpLCBkZXZpY2UpOworCQlwcm9jZWVkX3F1ZXN0aW9uKCk7CisJCXJldHVybjsKKwl9CisKKyNpZmRlZiBIQVZFX0xJTlVYX01BSk9SX0gKKyNpZm5kZWYgTUFKT1IKKyNkZWZpbmUgTUFKT1IoZGV2KQkoKGRldik+PjgpCisjZGVmaW5lIE1JTk9SKGRldikJKChkZXYpICYgMHhmZikKKyNlbmRpZgorI2lmbmRlZiBTQ1NJX0JMS19NQUpPUgorI2lmZGVmIFNDU0lfRElTSzBfTUFKT1IKKyNpZmRlZiBTQ1NJX0RJU0s4X01BSk9SCisjZGVmaW5lIFNDU0lfRElTS19NQUpPUihNKSAoKE0pID09IFNDU0lfRElTSzBfTUFKT1IgfHwgXAorICAoKE0pID49IFNDU0lfRElTSzFfTUFKT1IgJiYgKE0pIDw9IFNDU0lfRElTSzdfTUFKT1IpIHx8IFwKKyAgKChNKSA+PSBTQ1NJX0RJU0s4X01BSk9SICYmIChNKSA8PSBTQ1NJX0RJU0sxNV9NQUpPUikpCisjZWxzZQorI2RlZmluZSBTQ1NJX0RJU0tfTUFKT1IoTSkgKChNKSA9PSBTQ1NJX0RJU0swX01BSk9SIHx8IFwKKyAgKChNKSA+PSBTQ1NJX0RJU0sxX01BSk9SICYmIChNKSA8PSBTQ1NJX0RJU0s3X01BSk9SKSkKKyNlbmRpZiAvKiBkZWZpbmVkKFNDU0lfRElTSzhfTUFKT1IpICovCisjZGVmaW5lIFNDU0lfQkxLX01BSk9SKE0pIChTQ1NJX0RJU0tfTUFKT1IoKE0pKSB8fCAoTSkgPT0gU0NTSV9DRFJPTV9NQUpPUikKKyNlbHNlCisjZGVmaW5lIFNDU0lfQkxLX01BSk9SKE0pICAoKE0pID09IFNDU0lfRElTS19NQUpPUiB8fCAoTSkgPT0gU0NTSV9DRFJPTV9NQUpPUikKKyNlbmRpZiAvKiBkZWZpbmVkKFNDU0lfRElTSzBfTUFKT1IpICovCisjZW5kaWYgLyogZGVmaW5lZChTQ1NJX0JMS19NQUpPUikgKi8KKwlpZiAoKChNQUpPUihzLnN0X3JkZXYpID09IEhEX01BSk9SICYmCisJICAgICAgTUlOT1Iocy5zdF9yZGV2KSU2NCA9PSAwKSB8fAorCSAgICAgKFNDU0lfQkxLX01BSk9SKE1BSk9SKHMuc3RfcmRldikpICYmCisJICAgICAgTUlOT1Iocy5zdF9yZGV2KSUxNiA9PSAwKSkpIHsKKwkJcHJpbnRmKF8oIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iKSwKKwkJICAgICAgIGRldmljZSk7CisJCXByb2NlZWRfcXVlc3Rpb24oKTsKKwl9CisjZW5kaWYKK30KKwordm9pZCBjaGVja19tb3VudChjb25zdCBjaGFyICpkZXZpY2UsIGludCBmb3JjZSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWludAkJbW91bnRfZmxhZ3M7CisKKwlyZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2UsICZtb3VudF9mbGFncyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCJleHQyZnNfY2hlY2tfaWZfbW91bnQiLCByZXR2YWwsCisJCQlfKCJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIiksCisJCQlkZXZpY2UpOworCQlyZXR1cm47CisJfQorCWlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgbW91bnRlZDsgIiksIGRldmljZSk7CisJCWlmIChmb3JjZSA+PSAyKSB7CisJCQlmcHV0cyhfKCJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzICIKKwkJCQkiaW5jb3JyZWN0LlxuIiksIHN0ZGVycik7CisJCQlyZXR1cm47CisJCX0KKwlhYm9ydF9ta2UyZnM6CisJCWZwcmludGYoc3RkZXJyLCBfKCJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIpLCB0eXBlKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9CVVNZKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiKSwKKwkJCWRldmljZSk7CisJCWlmIChmb3JjZSA+PSAyKSB7CisJCQlmcHV0cyhfKCJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIpLCBzdGRlcnIpOworCQkJcmV0dXJuOworCQl9CisJCWdvdG8gYWJvcnRfbWtlMmZzOworCX0KK30KKwordm9pZCBwYXJzZV9qb3VybmFsX29wdHMoY29uc3QgY2hhciAqb3B0cykKK3sKKwljaGFyCSpidWYsICp0b2tlbiwgKm5leHQsICpwLCAqYXJnOworCWludAlsZW47CisJaW50CWpvdXJuYWxfdXNhZ2UgPSAwOworCisJbGVuID0gc3RybGVuKG9wdHMpOworCWJ1ZiA9IG1hbGxvYyhsZW4rMSk7CisJaWYgKCFidWYpIHsKKwkJZnB1dHMoXygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgIgorCQkJIm9wdGlvbnMhXG4iKSwgc3RkZXJyKTsKKwkJZXhpdCgxKTsKKwl9CisJc3RyY3B5KGJ1Ziwgb3B0cyk7CisJZm9yICh0b2tlbiA9IGJ1ZjsgdG9rZW4gJiYgKnRva2VuOyB0b2tlbiA9IG5leHQpIHsKKwkJcCA9IHN0cmNocih0b2tlbiwgJywnKTsKKwkJbmV4dCA9IDA7CisJCWlmIChwKSB7CisJCQkqcCA9IDA7CisJCQluZXh0ID0gcCsxOworCQl9CisJCWFyZyA9IHN0cmNocih0b2tlbiwgJz0nKTsKKwkJaWYgKGFyZykgeworCQkJKmFyZyA9IDA7CisJCQlhcmcrKzsKKwkJfQorI2lmIDAKKwkJcHJpbnRmKCJKb3VybmFsIG9wdGlvbj0lcywgYXJndW1lbnQ9JXNcbiIsIHRva2VuLAorCQkgICAgICAgYXJnID8gYXJnIDogIk5PTkUiKTsKKyNlbmRpZgorCQlpZiAoc3RyY21wKHRva2VuLCAiZGV2aWNlIikgPT0gMCkgeworCQkJam91cm5hbF9kZXZpY2UgPSBibGtpZF9nZXRfZGV2bmFtZShOVUxMLCBhcmcsIE5VTEwpOworCQkJaWYgKCFqb3VybmFsX2RldmljZSkgeworCQkJCWlmIChhcmcpCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJcbkNvdWxkIG5vdCBmaW5kICIKKwkJCQkJCSJqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIiksCisJCQkJCQlhcmcpOworCQkJCWpvdXJuYWxfdXNhZ2UrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJzaXplIikgPT0gMCkgeworCQkJaWYgKCFhcmcpIHsKKwkJCQlqb3VybmFsX3VzYWdlKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlqb3VybmFsX3NpemUgPSBzdHJ0b3VsKGFyZywgJnAsIDApOworCQkJaWYgKCpwKQorCQkJCWpvdXJuYWxfdXNhZ2UrKzsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJ2MV9zdXBlcmJsb2NrIikgPT0gMCkgeworCQkJam91cm5hbF9mbGFncyB8PSBFWFQyX01LSk9VUk5BTF9WMV9TVVBFUjsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UKKwkJCWpvdXJuYWxfdXNhZ2UrKzsKKwl9CisJaWYgKGpvdXJuYWxfdXNhZ2UpIHsKKwkJZnB1dHMoXygiXG5CYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cblxuIgorCQkJIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgIgorCQkJImFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorCQkJIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cblxuIgorCQkJIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisJCQkiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorCQkJIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cblxuIgorCQkJIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuICIKKwkJCSIxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cblxuIiksIHN0ZGVycik7CisJCWZyZWUoYnVmKTsKKwkJZXhpdCgxKTsKKwl9CisJZnJlZShidWYpOworfQorCisvKgorICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygam91cm5hbCBibG9ja3MgdG8gdXNlLCBlaXRoZXIgdmlhCisgKiB1c2VyLXNwZWNpZmllZCAjIG9mIG1lZ2FieXRlcywgb3IgdmlhIHNvbWUgaW50ZWxsaWdlbnRseSBzZWxlY3RlZAorICogZGVmYXVsdHMuCisgKgorICogRmluZCBhIHJlYXNvbmFibGUgam91cm5hbCBmaWxlIHNpemUgKGluIGJsb2NrcykgZ2l2ZW4gdGhlIG51bWJlciBvZiBibG9ja3MKKyAqIGluIHRoZSBmaWxlc3lzdGVtLiAgRm9yIHZlcnkgc21hbGwgZmlsZXN5c3RlbXMsIGl0IGlzIG5vdCByZWFzb25hYmxlIHRvCisgKiBoYXZlIGEgam91cm5hbCB0aGF0IGZpbGxzIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBmaWxlc3lzdGVtLgorICovCit1bnNpZ25lZCBpbnQgZmlndXJlX2pvdXJuYWxfc2l6ZShpbnQgc2l6ZSwgZXh0Ml9maWxzeXMgZnMpCit7CisJaW50IGpfYmxvY2tzOworCisJal9ibG9ja3MgPSBleHQyZnNfZGVmYXVsdF9qb3VybmFsX3NpemUoZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKTsKKwlpZiAoal9ibG9ja3MgPCAwKSB7CisJCWZwdXRzKF8oIlxuRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIiksIHN0ZGVycik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzaXplID4gMCkgeworCQlqX2Jsb2NrcyA9IHNpemUgKiAxMDI0IC8gKGZzLT5ibG9ja3NpemUJLyAxMDI0KTsKKwkJaWYgKGpfYmxvY2tzIDwgMTAyNCB8fCBqX2Jsb2NrcyA+IDEwMjQwMDAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5UaGUgcmVxdWVzdGVkIGpvdXJuYWwgIgorCQkJCSJzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorCQkJCSJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gICIKKwkJCQkiQWJvcnRpbmcuXG4iKSwKKwkJCQlqX2Jsb2Nrcyk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICgodW5zaWduZWQpIGpfYmxvY2tzID4gZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLyAyKSB7CisJCQlmcHV0cyhfKCJcbkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIiksCisJCQkgICAgICBzdGRlcnIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlyZXR1cm4gal9ibG9ja3M7Cit9CisKK3ZvaWQgcHJpbnRfY2hlY2tfbWVzc2FnZShpbnQgbW50LCB1bnNpZ25lZCBpbnQgY2hlY2spCit7CisJaWYgKG1udCA8IDApCisJCW1udCA9IDA7CisJaWYgKCFtbnQgJiYgIWNoZWNrKQorCQlyZXR1cm47CisJcHJpbnRmKF8oIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgIgorCQkgImNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisJCSAiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgIgorCQkgIlVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIiksCisJICAgICAgIG1udCwgKChkb3VibGUpIGNoZWNrKSAvICgzNjAwICogMjQpKTsKK30KKwordm9pZCBkdW1wX21tcF9tc2coc3RydWN0IG1tcF9zdHJ1Y3QgKm1tcCwgY29uc3QgY2hhciAqbXNnKQoreworCisJaWYgKG1zZykKKwkJcHJpbnRmKCJNTVAgY2hlY2sgZmFpbGVkOiAlc1xuIiwgbXNnKTsKKwlpZiAobW1wKSB7CisJCXRpbWVfdCB0ID0gbW1wLT5tbXBfdGltZTsKKworCQlwcmludGYoIk1NUCBlcnJvciBpbmZvOiBsYXN0IHVwZGF0ZTogJXMgbm9kZTogJXMgZGV2aWNlOiAlc1xuIiwKKwkJICAgICAgIGN0aW1lKCZ0KSwgbW1wLT5tbXBfbm9kZW5hbWUsIG1tcC0+bW1wX2JkZXZuYW1lKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy91dGlsLmggYi9lMmZzcHJvZ3MvbWlzYy91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3MmMzOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL3V0aWwuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogdXRpbC5oIC0tLSBoZWFkZXIgZmlsZSBkZWZpbmluZyBwcm90b3R5cGVzIGZvciBoZWxwZXIgZnVuY3Rpb25zCisgKiB1c2VkIGJ5IHR1bmUyZnMgYW5kIG1rZTJmcworICoKKyAqIENvcHlyaWdodCAyMDAwIGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCitleHRlcm4gaW50CSBqb3VybmFsX3NpemU7CitleHRlcm4gaW50CSBqb3VybmFsX2ZsYWdzOworZXh0ZXJuIGNoYXIJKmpvdXJuYWxfZGV2aWNlOworCisjaWZuZGVmIEhBVkVfU1RSQ0FTRUNNUAorZXh0ZXJuIGludCBzdHJjYXNlY21wIChjaGFyICpzMSwgY2hhciAqczIpOworI2VuZGlmCitleHRlcm4gY2hhciAqZ2V0X3Byb2duYW1lKGNoYXIgKmFyZ3ZfemVybyk7CitleHRlcm4gdm9pZCBwcm9jZWVkX3F1ZXN0aW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgY2hlY2tfcGxhdXNpYmlsaXR5KGNvbnN0IGNoYXIgKmRldmljZSk7CitleHRlcm4gdm9pZCBwYXJzZV9qb3VybmFsX29wdHMoY29uc3QgY2hhciAqb3B0cyk7CitleHRlcm4gdm9pZCBjaGVja19tb3VudChjb25zdCBjaGFyICpkZXZpY2UsIGludCBmb3JjZSwgY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gdW5zaWduZWQgaW50IGZpZ3VyZV9qb3VybmFsX3NpemUoaW50IHNpemUsIGV4dDJfZmlsc3lzIGZzKTsKK2V4dGVybiB2b2lkIHByaW50X2NoZWNrX21lc3NhZ2UoaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9tbXBfbXNnKHN0cnVjdCBtbXBfc3RydWN0ICptbXAsIGNvbnN0IGNoYXIgKm1zZyk7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy91dWlkZC44LmluIGIvZTJmc3Byb2dzL21pc2MvdXVpZGQuOC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVlMzkxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvdXVpZGQuOC5pbgpAQCAtMCwwICsxLDk3IEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAyMDA3IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIFRoaXMgZmlsZSBtYXkgYmUgY29waWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorLlwiCisuVEggVVVJREQgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZGQgXC0gVVVJRCBnZW5lcmF0aW9uIGRhZW1vbgorLlNIIFNZTk9QU0lTCisuQiB1dWlkZAorWworLkIgXC1kCitdCitbCisuQiBcLXAKKy5JIHBpZGZpbGUKK10KK1sKKy5CIFwtcworLkkgc29ja2V0cGF0aAorXQorWworLkIgXC1UCisuSSB0aW1lb3V0CitdCisKKy5CIHV1aWRkCitbCisuQiBcLXIKK3wKKy5CIFwtdAorXQorWworLkIgXC1uCisuSSBudW1iZXIKK10KK1sKKy5CIFwtcworLkkgc29ja2V0cGF0aAorXQorCisuQiB1dWlkZCBcLWsKKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB1dWlkZAorZGFlbW9uIGlzIHVzZWQgYnkgdGhlIFVVSUQgbGlicmFyeSB0byBnZW5lcmF0ZQordW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXJzIChVVUlEcyksIGVzcGVjaWFsbHkgdGltZS1iYXNlZCBVVUlEJ3MKK2luIGEgc2VjdXJlIGFuZCBndWFyYW50ZWVkLXVuaXF1ZSBmYXNoaW9uLCBldmVuIGluIHRoZSBmYWNlIG9mIGxhcmdlCitudW1iZXJzIG9mIHRocmVhZHMgdHJ5aW5nIHRvIGdyYWIgVVVJRCdzIHJ1bm5pbmcgb24gZGlmZmVyZW50IENQVSdzLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC1kCitSdW4KKy5CIHV1aWRkCitpbiBkZWJ1Z2dpbmcgbW9kZS4gIFRoaXMgcHJldmVudHMgdXVpZGQgZnJvbSBydW5uaW5nIGFzIGEgZGFlbW9uLgorLlRQCisuQiBcLWsKK0lmIGEgY3VycmVudGx5IHV1aWRkIGRhZW1vbiBpcyBydW5uaW5nLCBraWxsIGl0LgorLlRQCisuQkkgXC1uICIgbnVtYmVyIgorV2hlbiBpc3N1aW5nIGEgdGVzdCByZXF1ZXN0IHRvIGEgcnVubmluZyB1dWlkZCwgcmVxdWVzdCBhIGJ1bGsgcmVzcG9uc2UKK29mCisuSSBudW1iZXIKK1VVSUQncy4KKy5UUAorLkJJIFwtcCAgIiBwaWRmaWxlIgorU3BlY2lmeSB0aGUgcGF0aG5hbWUgd2hlcmUgdGhlIHBpZCBmaWxlIHNob3VsZCBiZSB3cml0dGVuLiAgQnkgZGVmYXVsdCwKK3RoZSBwaWQgZmlsZSBpcyB3cml0dGVuIHRvIC92YXIvbGliL2xpYnV1aWQvdXVpZGQucGlkLgorLlRQCisuQkkgXC1zICIgc29ja2V0cGF0aCIKK1NwZWNpZnkgdGhlIHBhdGhuYW1lIHVzZWQgZm9yIHRoZSB1bml4LWRvbWFpbiBzb2NrZXQgdXNlZCBieSB1dWlkZC4gIEJ5CitkZWZhdWx0LCB0aGUgcGF0aG5hbWUgdXNlZCBpcyAvdmFyL2xpYi9saWJ1dWlkL3JlcXVlc3QuICBUaGlzIGlzIHByaW1hcmlseQorZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc2luY2UgdGhlIHBhdGhuYW1lIGlzIGhhcmQtY29kZWQgaW4gdGhlIGxpYnV1aWQKK2xpYnJhcnkuCisuVFAKKy5CIFwtcgorVGVzdCB1dWlkZCBieSB0cnlpbmcgdG8gY29ubmVjdCB0byBhIHJ1bm5pbmcgdXVpZGQgZGFlbW9uIGFuZAorcmVxdWVzdCBpdCB0byByZXR1cm4gYSByYW5kb20tYmFzZWQgVVVJRC4KKy5UUAorLkIgXC10CitUZXN0IHV1aWRkIGJ5IHRyeWluZyB0byBjb25uZWN0IHRvIGEgcnVubmluZyB1dWlkZCBkYWVtb24gYW5kCityZXF1ZXN0IGl0IHRvIHJldHVybiBhIHRpbWUtYmFzZWQgVVVJRC4KKy5UUAorLkJJIFwtVCAiIHRpbWVvdXQiCitTcGVjaWZ5IGEgdGltZW91dCBmb3IgdXVpZGQuICBJZiBzcGVjaWZpZWQsIHRoZW4gdXVpZGQgd2lsbCBleGl0IGFmdGVyCisuSSB0aW1lb3V0CitzZWNvbmRzIG9mIGluYWN0aXZpdHkuCisuU0ggQVVUSE9SCitUaGUKKy5CIHV1aWRkCitkYWVtb24gIHdhcyB3cml0dGVuIGJ5IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+LgorLlNIIEFWQUlMQUJJTElUWQorLkIgdXVpZGQKK2lzIHBhcnQgb2YgbGlidXVpZCBmcm9tIHRoZSBlMmZzcHJvZ3MgcGFja2FnZSBhbmQgaXMgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LgorLlNIICJTRUUgQUxTTyIKKy5CUiBsaWJ1dWlkICgzKSwKKy5CUiB1dWlkZ2VuICgxKQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL21pc2MvdXVpZGQuYyBiL2UyZnNwcm9ncy9taXNjL3V1aWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwYzllMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL3V1aWRkLmMKQEAgLTAsMCArMSw1OTggQEAKKy8qCisgKiB1dWlkZC5jIC0tLSBVVUlELWdlbmVyYXRpb24gZGFlbW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3ICBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFIC8qIGZvciBzZXRyZXNbdWddaWQoKSAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7CitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNpbmNsdWRlICJ1dWlkL3V1aWRkLmgiCisjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQ09ERV9BVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIENPREVfQVRUUih4KQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdICIKKwkJCSAgIlstVCB0aW1lb3V0XVxuIiksIHByb2duYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgXygiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIpLAorCQlwcm9nbmFtZSk7CisJZnByaW50ZihzdGRlcnIsIF8oIiAgICAgICAlcyAta1xuIiksIHByb2duYW1lKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBkaWUoY29uc3QgY2hhciAqbXNnKQoreworCXBlcnJvcihtc2cpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kYWVtb24odm9pZCkKK3sKKwlwaWRfdCBwaWQ7CisJdWlkX3QgZXVpZDsKKworCXBpZCA9IGZvcmsoKTsKKwlpZiAocGlkID09IC0xKSB7CisJCXBlcnJvcigiZm9yayIpOworCQlleGl0KDEpOworCX0gZWxzZSBpZiAocGlkICE9IDApIHsKKwkgICAgZXhpdCgwKTsKKwl9CisKKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKwljbG9zZSgyKTsKKwlvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCW9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisJb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKworCWlmIChjaGRpcigiLyIpKSB7fQkvKiBTaWxlbmNlIHdhcm5fdW51c2VkX3Jlc3VsdCB3YXJuaW5nICovCisJKHZvaWQpIHNldHNpZCgpOworCWV1aWQgPSBnZXRldWlkKCk7CisJaWYgKHNldHJldWlkKGV1aWQsIGV1aWQpIDwgMCkKKwkJZGllKCJzZXRyZXVpZCIpOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2FsbChpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3QgcmV0OworCXNzaXplX3QgYyA9IDA7CisJaW50IHRyaWVzID0gMDsKKworCW1lbXNldChidWYsIDAsIGNvdW50KTsKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXJldCA9IHJlYWQoZmQsIGJ1ZiwgY291bnQpOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICgoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSIHx8IHJldCA9PSAwKSAmJgorCQkJICAgICh0cmllcysrIDwgNSkpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gYyA/IGMgOiAtMTsKKwkJfQorCQlpZiAocmV0ID4gMCkKKwkJCXRyaWVzID0gMDsKKwkJY291bnQgLT0gcmV0OworCQlidWYgKz0gcmV0OworCQljICs9IHJldDsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfYWxsKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJaW50IGMgPSAwOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAoKGVycm5vID09IEVBR0FJTikgfHwgKGVycm5vID09IEVJTlRSKSkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljb3VudCAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJCWMgKz0gcmV0OworCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsZWFudXBfcGlkZmlsZSwgKmNsZWFudXBfc29ja2V0OworCitzdGF0aWMgdm9pZCB0ZXJtaW5hdGVfaW50cihpbnQgc2lnbm8gQ09ERV9BVFRSKCh1bnVzZWQpKSkKK3sKKwkodm9pZCkgdW5saW5rKGNsZWFudXBfcGlkZmlsZSk7CisJaWYgKGNsZWFudXBfc29ja2V0KQorCQkodm9pZCkgdW5saW5rKGNsZWFudXBfc29ja2V0KTsKKwlleGl0KDApOworfQorCitzdGF0aWMgaW50IGNhbGxfZGFlbW9uKGNvbnN0IGNoYXIgKnNvY2tldF9wYXRoLCBpbnQgb3AsIGNoYXIgKmJ1ZiwKKwkJICAgICAgIGludCBidWZsZW4sIGludCAqbnVtLCBjb25zdCBjaGFyICoqZXJyX2NvbnRleHQpCit7CisJY2hhciBvcF9idWZbOF07CisJaW50IG9wX2xlbjsKKwlpbnQgczsKKwlzc2l6ZV90IHJldDsKKwlpbnQzMl90IHJlcGx5X2xlbiA9IDA7CisJc3RydWN0IHNvY2thZGRyX3VuIHNydl9hZGRyOworCisJaWYgKCgob3AgPT0gNCkgfHwgKG9wID09IDUpKSAmJiAhbnVtKSB7CisJCWlmIChlcnJfY29udGV4dCkKKwkJCSplcnJfY29udGV4dCA9IF8oImJhZCBhcmd1bWVudHMiKTsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKHMgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApKSA8IDApIHsKKwkJaWYgKGVycl9jb250ZXh0KQorCQkJKmVycl9jb250ZXh0ID0gXygic29ja2V0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzcnZfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJuY3B5KHNydl9hZGRyLnN1bl9wYXRoLCBzb2NrZXRfcGF0aCwgc2l6ZW9mKHNydl9hZGRyLnN1bl9wYXRoKSk7CisJc3J2X2FkZHIuc3VuX3BhdGhbc2l6ZW9mKHNydl9hZGRyLnN1bl9wYXRoKS0xXSA9ICdcMCc7CisKKwlpZiAoY29ubmVjdChzLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopICZzcnZfYWRkciwKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKSA8IDApIHsKKwkJaWYgKGVycl9jb250ZXh0KQorCQkJKmVycl9jb250ZXh0ID0gXygiY29ubmVjdCIpOworCQljbG9zZShzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvcCA9PSA1KSB7CisJCWlmICgoKm51bSkqMTYgPiBidWZsZW4tNCkKKwkJCSpudW0gPSAoYnVmbGVuLTQpIC8gMTY7CisJfQorCW9wX2J1ZlswXSA9IG9wOworCW9wX2xlbiA9IDE7CisJaWYgKChvcCA9PSA0KSB8fCAob3AgPT0gNSkpIHsKKwkJbWVtY3B5KG9wX2J1ZisxLCBudW0sIHNpemVvZihpbnQpKTsKKwkJb3BfbGVuICs9IHNpemVvZihpbnQpOworCX0KKworCXJldCA9IHdyaXRlX2FsbChzLCBvcF9idWYsIG9wX2xlbik7CisJaWYgKHJldCA8IG9wX2xlbikgeworCQlpZiAoZXJyX2NvbnRleHQpCisJCQkqZXJyX2NvbnRleHQgPSBfKCJ3cml0ZSIpOworCQljbG9zZShzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHJlYWRfYWxsKHMsIChjaGFyICopICZyZXBseV9sZW4sIHNpemVvZihyZXBseV9sZW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAoZXJyX2NvbnRleHQpCisJCQkqZXJyX2NvbnRleHQgPSBfKCJyZWFkIGNvdW50Iik7CisJCWNsb3NlKHMpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChyZXBseV9sZW4gPCAwIHx8IHJlcGx5X2xlbiA+IGJ1ZmxlbikgeworCQlpZiAoZXJyX2NvbnRleHQpCisJCQkqZXJyX2NvbnRleHQgPSBfKCJiYWQgcmVzcG9uc2UgbGVuZ3RoIik7CisJCWNsb3NlKHMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldCA9IHJlYWRfYWxsKHMsIChjaGFyICopIGJ1ZiwgcmVwbHlfbGVuKTsKKworCWlmICgocmV0ID4gMCkgJiYgKG9wID09IDQpKSB7CisJCWlmIChyZXBseV9sZW4gPj0gKGludCkgKDE2K3NpemVvZihpbnQpKSkKKwkJCW1lbWNweShidWYrMTYsIG51bSwgc2l6ZW9mKGludCkpOworCQllbHNlCisJCQkqbnVtID0gLTE7CisJfQorCWlmICgocmV0ID4gMCkgJiYgKG9wID09IDUpKSB7CisJCWlmICgqbnVtID49IChpbnQpIHNpemVvZihpbnQpKQorCQkJbWVtY3B5KGJ1ZiwgbnVtLCBzaXplb2YoaW50KSk7CisJCWVsc2UKKwkJCSpudW0gPSAtMTsKKwl9CisKKwljbG9zZShzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlcl9sb29wKGNvbnN0IGNoYXIgKnNvY2tldF9wYXRoLCBjb25zdCBjaGFyICpwaWRmaWxlX3BhdGgsCisJCQlpbnQgZGVidWcsIGludCB0aW1lb3V0LCBpbnQgcXVpZXQpCit7CisJc3RydWN0IHNvY2thZGRyX3VuCW15X2FkZHIsIGZyb21fYWRkcjsKKwlzdHJ1Y3QgZmxvY2sJCWZsOworCXNvY2tsZW5fdAkJZnJvbWxlbjsKKwlpbnQzMl90CQkJcmVwbHlfbGVuID0gMDsKKwl1dWlkX3QJCQl1dTsKKwltb2RlX3QJCQlzYXZlX3VtYXNrOworCWNoYXIJCQlyZXBseV9idWZbMTAyNF0sICpjcDsKKwljaGFyCQkJb3AsIHN0clszN107CisJaW50CQkJaSwgcywgbnMsIGxlbiwgbnVtOworCWludAkJCWZkX3BpZGZpbGUsIHJldDsKKworCWZkX3BpZGZpbGUgPSBvcGVuKHBpZGZpbGVfcGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY2NCk7CisJaWYgKGZkX3BpZGZpbGUgPCAwKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuL2NyZWF0ZSAlczogJXNcbiIsCisJCQkJcGlkZmlsZV9wYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDEpOworCX0KKwljbGVhbnVwX3BpZGZpbGUgPSBwaWRmaWxlX3BhdGg7CisJY2xlYW51cF9zb2NrZXQgPSAwOworCXNpZ25hbChTSUdBTFJNLCB0ZXJtaW5hdGVfaW50cik7CisJYWxhcm0oMzApOworIAlmbC5sX3R5cGUgPSBGX1dSTENLOworIAlmbC5sX3doZW5jZSA9IFNFRUtfU0VUOworIAlmbC5sX3N0YXJ0ID0gMDsKKyAJZmwubF9sZW4gPSAwOworIAlmbC5sX3BpZCA9IDA7CisgCXdoaWxlIChmY250bChmZF9waWRmaWxlLCBGX1NFVExLVywgJmZsKSA8IDApIHsKKwkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQljb250aW51ZTsKKwkJaWYgKCFxdWlldCkKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvY2sgJXM6ICVzXG4iLAorCQkJCXBpZGZpbGVfcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisJcmV0ID0gY2FsbF9kYWVtb24oc29ja2V0X3BhdGgsIDAsIHJlcGx5X2J1Ziwgc2l6ZW9mKHJlcGx5X2J1ZiksIDAsIDApOworCWlmIChyZXQgPiAwKSB7CisJCWlmICghcXVpZXQpCisJCQlwcmludGYoXygidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIpLAorCQkJICAgICAgIHJlcGx5X2J1Zik7CisJCWV4aXQoMSk7CisJfQorCWFsYXJtKDApOworCisJaWYgKChzID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGRuJ3QgY3JlYXRlIHVuaXggc3RyZWFtICIKKwkJCQkJICAic29ja2V0OiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDEpOworCX0KKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzb2NrZXQgaXNuJ3QgdXNpbmcgZmQgbnVtYmVycyAwLTIgdG8gYXZvaWQgaXQKKwkgKiBnZXR0aW5nIGNsb3NlZCBieSBjcmVhdGVfZGFlbW9uKCkKKwkgKi8KKwl3aGlsZSAoIWRlYnVnICYmIHMgPD0gMikgeworCQlzID0gZHVwKHMpOworCQlpZiAocyA8IDApIHsKKwkJCXBlcnJvcigiZHVwIik7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJLyoKKwkgKiBDcmVhdGUgdGhlIGFkZHJlc3Mgd2Ugd2lsbCBiZSBiaW5kaW5nIHRvLgorCSAqLworCW15X2FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJc3RybmNweShteV9hZGRyLnN1bl9wYXRoLCBzb2NrZXRfcGF0aCwgc2l6ZW9mKG15X2FkZHIuc3VuX3BhdGgpKTsKKwlteV9hZGRyLnN1bl9wYXRoW3NpemVvZihteV9hZGRyLnN1bl9wYXRoKS0xXSA9ICdcMCc7CisJKHZvaWQpIHVubGluayhzb2NrZXRfcGF0aCk7CisJc2F2ZV91bWFzayA9IHVtYXNrKDApOworCWlmIChiaW5kKHMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikgJm15X2FkZHIsCisJCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSkgPCAwKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJDb3VsZG4ndCBiaW5kIHVuaXggc29ja2V0ICVzOiAlc1xuIiksCisJCQkJc29ja2V0X3BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMSk7CisJfQorCSh2b2lkKSB1bWFzayhzYXZlX3VtYXNrKTsKKworCWlmIChsaXN0ZW4ocywgNSkgPCAwKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggIgorCQkJCQkgICJzb2NrZXQgJXM6ICVzXG4iKSwgc29ja2V0X3BhdGgsCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwljbGVhbnVwX3NvY2tldCA9IHNvY2tldF9wYXRoOworCWlmICghZGVidWcpCisJCWNyZWF0ZV9kYWVtb24oKTsKKwlzaWduYWwoU0lHSFVQLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsKFNJR0lOVCwgdGVybWluYXRlX2ludHIpOworCXNpZ25hbChTSUdURVJNLCB0ZXJtaW5hdGVfaW50cik7CisJc2lnbmFsKFNJR0FMUk0sIHRlcm1pbmF0ZV9pbnRyKTsKKwlzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisKKwlzcHJpbnRmKHJlcGx5X2J1ZiwgIiU4ZFxuIiwgZ2V0cGlkKCkpOworCWlmIChmdHJ1bmNhdGUoZmRfcGlkZmlsZSwgMCkpIHt9IC8qIFNpbGVuY2Ugd2Fybl91bnVzZWRfcmVzdWx0ICovCisJd3JpdGVfYWxsKGZkX3BpZGZpbGUsIHJlcGx5X2J1Ziwgc3RybGVuKHJlcGx5X2J1ZikpOworCWlmIChmZF9waWRmaWxlID4gMSkKKwkJY2xvc2UoZmRfcGlkZmlsZSk7IC8qIFVubG9jayB0aGUgcGlkIGZpbGUgKi8KKworCXdoaWxlICgxKSB7CisJCWZyb21sZW4gPSBzaXplb2YoZnJvbV9hZGRyKTsKKwkJaWYgKHRpbWVvdXQgPiAwKQorCQkJYWxhcm0odGltZW91dCk7CisJCW5zID0gYWNjZXB0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmZyb21fYWRkciwgJmZyb21sZW4pOworCQlhbGFybSgwKTsKKwkJaWYgKG5zIDwgMCkgeworCQkJaWYgKChlcnJubyA9PSBFQUdBSU4pIHx8IChlcnJubyA9PSBFSU5UUikpCisJCQkJY29udGludWU7CisJCQlwZXJyb3IoImFjY2VwdCIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlsZW4gPSByZWFkKG5zLCAmb3AsIDEpOworCQlpZiAobGVuICE9IDEpIHsKKwkJCWlmIChsZW4gPCAwKQorCQkJCXBlcnJvcigicmVhZCIpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCAiCisJCQkJCSAibGVuID0gJWRcbiIpLCBsZW4pOworCQkJZ290byBzaHV0ZG93bl9zb2NrZXQ7CisJCX0KKwkJaWYgKChvcCA9PSA0KSB8fCAob3AgPT0gNSkpIHsKKwkJCWlmIChyZWFkX2FsbChucywgKGNoYXIgKikgJm51bSwgc2l6ZW9mKG51bSkpICE9IDQpCisJCQkJZ290byBzaHV0ZG93bl9zb2NrZXQ7CisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRmKF8oIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIpLAorCQkJCSAgICAgICBvcCwgbnVtKTsKKwkJfSBlbHNlIGlmIChkZWJ1ZykKKwkJCXByaW50Zigib3BlcmF0aW9uICVkXG4iLCBvcCk7CisKKwkJc3dpdGNoKG9wKSB7CisJCWNhc2UgVVVJRERfT1BfR0VUUElEOgorCQkJc3ByaW50ZihyZXBseV9idWYsICIlZCIsIGdldHBpZCgpKTsKKwkJCXJlcGx5X2xlbiA9IHN0cmxlbihyZXBseV9idWYpKzE7CisJCQlicmVhazsKKwkJY2FzZSBVVUlERF9PUF9HRVRfTUFYT1A6CisJCQlzcHJpbnRmKHJlcGx5X2J1ZiwgIiVkIiwgVVVJRERfTUFYX09QKTsKKwkJCXJlcGx5X2xlbiA9IHN0cmxlbihyZXBseV9idWYpKzE7CisJCQlicmVhazsKKwkJY2FzZSBVVUlERF9PUF9USU1FX1VVSUQ6CisJCQludW0gPSAxOworCQkJdXVpZF9fZ2VuZXJhdGVfdGltZSh1dSwgJm51bSk7CisJCQlpZiAoZGVidWcpIHsKKwkJCQl1dWlkX3VucGFyc2UodXUsIHN0cik7CisJCQkJcHJpbnRmKF8oIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iKSwgc3RyKTsKKwkJCX0KKwkJCW1lbWNweShyZXBseV9idWYsIHV1LCBzaXplb2YodXUpKTsKKwkJCXJlcGx5X2xlbiA9IHNpemVvZih1dSk7CisJCQlicmVhazsKKwkJY2FzZSBVVUlERF9PUF9SQU5ET01fVVVJRDoKKwkJCW51bSA9IDE7CisJCQl1dWlkX19nZW5lcmF0ZV9yYW5kb20odXUsICZudW0pOworCQkJaWYgKGRlYnVnKSB7CisJCQkJdXVpZF91bnBhcnNlKHV1LCBzdHIpOworCQkJCXByaW50ZihfKCJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iKSwgc3RyKTsKKwkJCX0KKwkJCW1lbWNweShyZXBseV9idWYsIHV1LCBzaXplb2YodXUpKTsKKwkJCXJlcGx5X2xlbiA9IHNpemVvZih1dSk7CisJCQlicmVhazsKKwkJY2FzZSBVVUlERF9PUF9CVUxLX1RJTUVfVVVJRDoKKwkJCXV1aWRfX2dlbmVyYXRlX3RpbWUodXUsICZudW0pOworCQkJaWYgKGRlYnVnKSB7CisJCQkJdXVpZF91bnBhcnNlKHV1LCBzdHIpOworCQkJCXByaW50ZihQXygiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgIgorCQkJCQkgICJzdWJzZXF1ZW50IFVVSURcbiIsCisJCQkJCSAgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkICIKKwkJCQkJICAic3Vic2VxdWVudCBVVUlEc1xuIiwgbnVtKSwKKwkJCQkgICAgICAgc3RyLCBudW0pOworCQkJfQorCQkJbWVtY3B5KHJlcGx5X2J1ZiwgdXUsIHNpemVvZih1dSkpOworCQkJcmVwbHlfbGVuID0gc2l6ZW9mKHV1KTsKKwkJCW1lbWNweShyZXBseV9idWYrcmVwbHlfbGVuLCAmbnVtLCBzaXplb2YobnVtKSk7CisJCQlyZXBseV9sZW4gKz0gc2l6ZW9mKG51bSk7CisJCQlicmVhazsKKwkJY2FzZSBVVUlERF9PUF9CVUxLX1JBTkRPTV9VVUlEOgorCQkJaWYgKG51bSA8IDApCisJCQkJbnVtID0gMTsKKwkJCWlmIChudW0gPiAxMDAwKQorCQkJCW51bSA9IDEwMDA7CisJCQlpZiAobnVtKjE2ID4gKGludCkgKHNpemVvZihyZXBseV9idWYpLXNpemVvZihudW0pKSkKKwkJCQludW0gPSAoc2l6ZW9mKHJlcGx5X2J1Ziktc2l6ZW9mKG51bSkpIC8gMTY7CisJCQl1dWlkX19nZW5lcmF0ZV9yYW5kb20oKHVuc2lnbmVkIGNoYXIgKikgcmVwbHlfYnVmICsKKwkJCQkJICAgICAgc2l6ZW9mKG51bSksICZudW0pOworCQkJaWYgKGRlYnVnKSB7CisJCQkJcHJpbnRmKF8oIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iKSwgbnVtKTsKKwkJCQlmb3IgKGk9MCwgY3A9cmVwbHlfYnVmK3NpemVvZihudW0pOworCQkJCSAgICAgaSA8IG51bTsgaSsrLCBjcCs9MTYpIHsKKwkJCQkJdXVpZF91bnBhcnNlKCh1bnNpZ25lZCBjaGFyICopY3AsIHN0cik7CisJCQkJCXByaW50ZigiXHQlc1xuIiwgc3RyKTsKKwkJCQl9CisJCQl9CisJCQlyZXBseV9sZW4gPSAobnVtKjE2KSArIHNpemVvZihudW0pOworCQkJbWVtY3B5KHJlcGx5X2J1ZiwgJm51bSwgc2l6ZW9mKG51bSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRmKF8oIkludmFsaWQgb3BlcmF0aW9uICVkXG4iKSwgb3ApOworCQkJZ290byBzaHV0ZG93bl9zb2NrZXQ7CisJCX0KKwkJd3JpdGVfYWxsKG5zLCAoY2hhciAqKSAmcmVwbHlfbGVuLCBzaXplb2YocmVwbHlfbGVuKSk7CisJCXdyaXRlX2FsbChucywgcmVwbHlfYnVmLCByZXBseV9sZW4pOworCXNodXRkb3duX3NvY2tldDoKKwkJY2xvc2UobnMpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnNvY2tldF9wYXRoID0gVVVJRERfU09DS0VUX1BBVEg7CisJY29uc3QgY2hhcgkqcGlkZmlsZV9wYXRoID0gVVVJRERfUElERklMRV9QQVRIOworCWNvbnN0IGNoYXIJKmVycl9jb250ZXh0OworCWNoYXIJCWJ1ZlsxMDI0XSwgKmNwOworCWNoYXIgICAJCXN0clszN10sICp0bXA7CisJdXVpZF90CQl1dTsKKwl1aWRfdAkJdWlkOworCWdpZF90IAkJZ2lkOworCWludAkJaSwgYywgcmV0OworCWludAkJZGVidWcgPSAwLCBkb190eXBlID0gMCwgZG9fa2lsbCA9IDAsIG51bSA9IDA7CisJaW50CQl0aW1lb3V0ID0gMCwgcXVpZXQgPSAwLCBkcm9wX3ByaXZzID0gMDsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworI2VuZGlmCisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJka246cXA6czp0VDpyIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnZCc6CisJCQlkZWJ1ZysrOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnayc6CisJCQlkb19raWxsKys7CisJCQlkcm9wX3ByaXZzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCW51bSA9IHN0cnRvbChvcHRhcmcsICZ0bXAsIDApOworCQkJaWYgKChudW0gPCAwKSB8fCAqdG1wKSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkJhZCBudW1iZXI6ICVzXG4iKSwgb3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcGlkZmlsZV9wYXRoID0gb3B0YXJnOworCQkJZHJvcF9wcml2cyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncSc6CisJCQlxdWlldCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc29ja2V0X3BhdGggPSBvcHRhcmc7CisJCQlkcm9wX3ByaXZzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWRvX3R5cGUgPSBVVUlERF9PUF9USU1FX1VVSUQ7CisJCQlkcm9wX3ByaXZzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdUJzoKKwkJCXRpbWVvdXQgPSBzdHJ0b2wob3B0YXJnLCAmdG1wLCAwKTsKKwkJCWlmICgodGltZW91dCA8IDApIHx8ICp0bXApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiQmFkIG51bWJlcjogJXNcbiIpLCBvcHRhcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlkb190eXBlID0gVVVJRERfT1BfUkFORE9NX1VVSUQ7CisJCQlkcm9wX3ByaXZzID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoYXJndlswXSk7CisJCX0KKwl9CisJdWlkID0gZ2V0dWlkKCk7CisJaWYgKHVpZCAmJiBkcm9wX3ByaXZzKSB7CisJCWdpZCA9IGdldGdpZCgpOworI2lmZGVmIEhBVkVfU0VUUkVTR0lECisJCWlmIChzZXRyZXNnaWQoZ2lkLCBnaWQsIGdpZCkgPCAwKQorCQkJZGllKCJzZXRyZXNnaWQiKTsKKyNlbHNlCisJCWlmIChzZXRyZWdpZChnaWQsIGdpZCkgPCAwKQorCQkJZGllKCJzZXRyZWdpZCIpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NFVFJFU1VJRAorCQlpZiAoc2V0cmVzdWlkKHVpZCwgdWlkLCB1aWQpIDwgMCkKKwkJCWRpZSgic2V0cmVzdWlkIik7CisjZWxzZQorCQlpZiAoc2V0cmV1aWQodWlkLCB1aWQpIDwgMCkKKwkJCWRpZSgic2V0cmV1aWQiKTsKKyNlbmRpZgorCX0KKwlpZiAobnVtICYmIGRvX3R5cGUpIHsKKwkJcmV0ID0gY2FsbF9kYWVtb24oc29ja2V0X3BhdGgsIGRvX3R5cGUrMiwgYnVmLAorCQkJCSAgc2l6ZW9mKGJ1ZiksICZudW0sICZlcnJfY29udGV4dCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGYoXygiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIpLAorCQkJICAgICAgIGVycl9jb250ZXh0LCBzdHJlcnJvcihlcnJubykpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoZG9fdHlwZSA9PSBVVUlERF9PUF9USU1FX1VVSUQpIHsKKwkJCWlmIChyZXQgIT0gc2l6ZW9mKHV1KSArIHNpemVvZihudW0pKQorCQkJCWdvdG8gdW5leHBlY3RlZF9zaXplOworCisJCQl1dWlkX3VucGFyc2UoKHVuc2lnbmVkIGNoYXIgKikgYnVmLCBzdHIpOworCisJCQlwcmludGYoUF8oIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIsCisJCQkJICAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIsIG51bSksCisJCQkgICAgICAgc3RyLCBudW0pOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCIlcyIsIF8oIkxpc3Qgb2YgVVVJRCdzOlxuIikpOworCQkJY3AgPSBidWYgKyA0OworCQkJaWYgKHJldCAhPSAoaW50KSAoc2l6ZW9mKG51bSkgKyBudW0qc2l6ZW9mKHV1KSkpCisJCQkJZ290byB1bmV4cGVjdGVkX3NpemU7CisJCQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrLCBjcCs9MTYpIHsKKwkJCQl1dWlkX3VucGFyc2UoKHVuc2lnbmVkIGNoYXIgKikgY3AsIHN0cik7CisJCQkJcHJpbnRmKCJcdCVzXG4iLCBzdHIpOworCQkJfQorCQl9CisJCWV4aXQoMCk7CisJfQorCWlmIChkb190eXBlKSB7CisJCXJldCA9IGNhbGxfZGFlbW9uKHNvY2tldF9wYXRoLCBkb190eXBlLCAoY2hhciAqKSAmdXUsCisJCQkJICBzaXplb2YodXUpLCAwLCAmZXJyX2NvbnRleHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRmKF8oIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iKSwKKwkJCSAgICAgICBlcnJfY29udGV4dCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKHJldCAhPSBzaXplb2YodXUpKSB7CisJCXVuZXhwZWN0ZWRfc2l6ZToKKwkJCXByaW50ZihfKCJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIiksCisJCQkgICAgICAgcmV0KTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJdXVpZF91bnBhcnNlKHV1LCBzdHIpOworCisJCXByaW50ZigiJXNcbiIsIHN0cik7CisJCWV4aXQoMCk7CisJfQorCisJaWYgKGRvX2tpbGwpIHsKKwkJcmV0ID0gY2FsbF9kYWVtb24oc29ja2V0X3BhdGgsIDAsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIDApOworCQlpZiAoKHJldCA+IDApICYmICgoZG9fa2lsbCA9IGF0b2koKGNoYXIgKikgYnVmKSkgPiAwKSkgeworCQkJcmV0ID0ga2lsbChkb19raWxsLCBTSUdURVJNKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJaWYgKCFxdWlldCkKKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQlfKCJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgIgorCQkJCQkJICAiYXQgcGlkICVkOiAlc1xuIiksIGRvX2tpbGwsCisJCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlpZiAoIXF1aWV0KQorCQkJCXByaW50ZihfKCJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIpLAorCQkJCSAgICAgICBkb19raWxsKTsKKwkJfQorCQlleGl0KDApOworCX0KKworCXNlcnZlcl9sb29wKHNvY2tldF9wYXRoLCBwaWRmaWxlX3BhdGgsIGRlYnVnLCB0aW1lb3V0LCBxdWlldCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy91dWlkZC5yYyBiL2UyZnNwcm9ncy9taXNjL3V1aWRkLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNTY0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvbWlzYy91dWlkZC5yYwpAQCAtMCwwICsxLDU1IEBACisjISAvYmluL3NoIC1lCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1dWlkZAorIyBSZXF1aXJlZC1TdGFydDogICAgJHRpbWUgJGxvY2FsX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkdGltZSAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiB1dWlkZCBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIEluaXQgc2NyaXB0IGZvciB0aGUgdXVpZCBnZW5lcmF0aW9uIGRhZW1vbgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgQXV0aG9yOgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CisjCitzZXQgLWUKKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorREFFTU9OPS91c3Ivc2Jpbi91dWlkZAorUElERklMRT0vdmFyL3J1bi91dWlkZC91dWlkZC5waWQKKwordGVzdCAteCAkREFFTU9OIHx8IGV4aXQgMAorCisuIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWxvZ19kYWVtb25fbXNnICJTdGFydGluZyB1dWlkIGdlbmVyYXRvciIgInV1aWRkIgorCXN0YXJ0X2RhZW1vbiAtcCAkUElERklMRSAkREFFTU9OCisJbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICBzdG9wKQorCWxvZ19kYWVtb25fbXNnICJTdG9wcGluZyB1dWlkZCBnZW5lcmF0b3IiICJ1dWlkZCIKKwlraWxscHJvYyAtcCAkUElERklMRSAkREFFTU9OCisJbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICBzdGF0dXMpCisJaWYgcGlkb2Zwcm9jIC1wICRQSURGSUxFICREQUVNT04gPiYgL2Rldi9udWxsIDsgdGhlbgorCSAgICBlY2hvICIkREFFTU9OIGlzIHJ1bm5pbmciOworCSAgICBleGl0IDA7CisJZWxzZQorCSAgICBlY2hvICIkREFFTU9OIGlzIE5PVCBydW5uaW5nIjsKKwkgICAgaWYgdGVzdCAtZiAvdmFyL3J1bi91dWlkZC5waWQ7IHRoZW4gZXhpdCAyOyBmaQorCSAgICBleGl0IDM7CisJZmkKKwk7OworICBmb3JjZS1yZWxvYWR8cmVzdGFydCkKKyAgICAkMCBzdG9wCisgICAgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC91dWlkZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvbWlzYy91dWlkZ2VuLjEuaW4gYi9lMmZzcHJvZ3MvbWlzYy91dWlkZ2VuLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1ZTgwZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9taXNjL3V1aWRnZW4uMS5pbgpAQCAtMCwwICsxLDYzIEBACisuXCIgQ29weXJpZ2h0IDE5OTkgQW5kcmVhcyBEaWxnZXIgKGFkaWxnZXJAZW5lbC51Y2FsZ2FyeS5jYSkKKy5cIgorLlwiIFRoaXMgbWFuIHBhZ2Ugd2FzIGNyZWF0ZWQgZm9yIGxpYnV1aWQuc28uMS4xIGZyb20gZTJmc3Byb2dzLTEuMTQuCisuXCIgCisuXCIgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisuXCIgCisuXCIgQ3JlYXRlZCAgV2VkIE1hciAxMCAxNzo0MjoxMiAxOTk5LCBBbmRyZWFzIERpbGdlcgorLlRIIFVVSURHRU4gMSAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuU0ggTkFNRQordXVpZGdlbiBcLSBjb21tYW5kXC1saW5lIHV0aWxpdHkgdG8gY3JlYXRlIGEgbmV3IFVVSUQgdmFsdWUKKy5TSCBTWU5PUFNJUworLkIgdXVpZGdlbiAKK1sKKy5CIFwtcgorfAorLkIgXC10CitdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgdXVpZGdlbgorcHJvZ3JhbSBjcmVhdGVzIChhbmQgcHJpbnRzKSAKK2EgbmV3IHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSB1c2luZyB0aGUKKy5CUiBsaWJ1dWlkICgzKQorbGlicmFyeS4gIFRoZSBuZXcgVVVJRCBjYW4gcmVhc29uYWJseSBiZSBjb25zaWRlcmVkIHVuaXF1ZSBhbW9uZyAKK2FsbCBVVUlEcyBjcmVhdGVkIG9uIHRoZSBsb2NhbCBzeXN0ZW0sIAorYW5kIGFtb25nIFVVSURzIGNyZWF0ZWQgb24gb3RoZXIgc3lzdGVtcyBpbiB0aGUgcGFzdAorYW5kIGluIHRoZSBmdXR1cmUuCisuUFAKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgVVVJRCdzIHdoaWNoIAorLkIgdXVpZGdlbgorY2FuIGdlbmVyYXRlOiB0aW1lLWJhc2VkIFVVSUQncyBhbmQgcmFuZG9tLWJhc2VkIFVVSUQncy4gIEJ5IAorZGVmYXVsdCAKKy5CIHV1aWRnZW4KK3dpbGwgZ2VuZXJhdGUgYSByYW5kb20tYmFzZWQgVVVJRCBpZiBhIGhpZ2gtcXVhbGl0eSByYW5kb20gbnVtYmVyCitnZW5lcmF0b3IgaXMgcHJlc2VudC4gIE90aGVyd2lzZSwgaXQgd2lsbCBjaG9zZSBhIHRpbWUtYmFzZWQgVVVJRC4gIEl0IAoraXMgcG9zc2libGUgdG8gZm9yY2UgdGhlIGdlbmVyYXRpb24gb2Ygb25lIG9mIHRoZXNlIHR3byAKK1VVSUQgdHlwZXMgYnkgdXNpbmcgdGhlCisuQiBcLXIKK29yCisuQiBcLXQKK29wdGlvbnMuCisuU0ggT1BUSU9OUworLlRQCisuQiBcLXIKK0dlbmVyYXRlIGEgcmFuZG9tLWJhc2VkIFVVSUQuICBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgVVVJRCBjb25zaXN0aW5nIG1vc3RseQorb2YgcmFuZG9tIGJpdHMuICBJdCByZXF1aXJlcyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGhhdmUgYSBoaWdoCitxdWFsaXR5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBzdWNoIGFzCisuSVIgL2Rldi9yYW5kb20gLgorLlRQCisuQiBcLXQKK0dlbmVyYXRlIGEgdGltZS1iYXNlZCBVVUlELiAgVGhpcyBtZXRob2QgY3JlYXRlcyBhIFVVSUQgYmFzZWQgb24gdGhlIHN5c3RlbSAKK2Nsb2NrIHBsdXMgdGhlIHN5c3RlbSdzIGV0aGVybmV0IGhhcmR3YXJlIGFkZHJlc3MsIGlmIHByZXNlbnQuCisuU0ggIkNPTkZPUk1JTkcgVE8iCitPU0YgRENFIDEuMQorLlNIIEFVVEhPUgorLkIgdXVpZGdlbgord2FzIHdyaXR0ZW4gYnkgQW5kcmVhcyBEaWxnZXIgZm9yIGxpYnV1aWQuCisuU0ggQVZBSUxBQklMSVRZCisuQiB1dWlkZ2VuCitpcyBwYXJ0IG9mIGxpYnV1aWQgZnJvbSB0aGUgZTJmc3Byb2dzIHBhY2thZ2UgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC4KKy5TSCAiU0VFIEFMU08iCisuQlIgbGlidXVpZCAoMykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9taXNjL3V1aWRnZW4uYyBiL2UyZnNwcm9ncy9taXNjL3V1aWRnZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzg1YTVjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL21pc2MvdXVpZGdlbi5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBnZW5fdXVpZC5jIC0tLSBnZW5lcmF0ZSBhIERDRS1jb21wYXRpYmxlIHV1aWQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIEFuZHJlYXMgRGlsZ2VyIGFuZCBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVE9QVF9ICisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZWxzZQorZXh0ZXJuIGludCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZyk7CitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKyNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisKKyNkZWZpbmUgRE9fVFlQRV9USU1FCTEKKyNkZWZpbmUgRE9fVFlQRV9SQU5ET00JMgorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstcl0gWy10XVxuIiksIHByb2duYW1lKTsKKwlleGl0KDEpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50ICAgIGM7CisJaW50ICAgIGRvX3R5cGUgPSAwOworCWNoYXIgICBzdHJbMzddOworCXV1aWRfdCB1dTsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworI2VuZGlmCisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ0ciIpKSAhPSBFT0YpCisJCXN3aXRjaCAoYykgeworCQljYXNlICd0JzoKKwkJCWRvX3R5cGUgPSBET19UWVBFX1RJTUU7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlkb190eXBlID0gRE9fVFlQRV9SQU5ET007CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQl9CisKKwlzd2l0Y2ggKGRvX3R5cGUpIHsKKwljYXNlIERPX1RZUEVfVElNRToKKwkJdXVpZF9nZW5lcmF0ZV90aW1lKHV1KTsKKwkJYnJlYWs7CisJY2FzZSBET19UWVBFX1JBTkRPTToKKwkJdXVpZF9nZW5lcmF0ZV9yYW5kb20odXUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1dWlkX2dlbmVyYXRlKHV1KTsKKwkJYnJlYWs7CisJfQorCisJdXVpZF91bnBhcnNlKHV1LCBzdHIpOworCisJcHJpbnRmKCIlc1xuIiwgc3RyKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL0xJTkdVQVMgYi9lMmZzcHJvZ3MvcG8vTElOR1VBUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA3MjUyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL0xJTkdVQVMKQEAgLTAsMCArMSBAQAorY2EgY3MgZGUgZXMgZnIgaWQgaXQgbmwgcGwgc3YgdHIgdmkgemhfQ04KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9NYWtlZmlsZS5pbi5pbiBiL2UyZnNwcm9ncy9wby9NYWtlZmlsZS5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGJkMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsMzczIEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE0CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKKworU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gJChkYXRhZGlyKS9sb2NhbGUKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK01TR0ZNVCA9IEBNU0dGTVRACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK01TR01FUkdFID0gbXNnbWVyZ2UKK01TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKK01TR0lOSVQgPSBtc2dpbml0CitNU0dDT05WID0gbXNnY29udgorTVNHRklMVEVSID0gbXNnZmlsdGVyCisKK1BPRklMRVMgPSBAUE9GSUxFU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAorRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKKyQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCitESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluICQoRE9NQUlOKS5wb3Qgc3RhbXAtcG8gXAorJChQT0ZJTEVTKSAkKEdNT0ZJTEVTKSBcCiskKERJU1RGSUxFUy5leHRyYTEpICQoRElTVEZJTEVTLmV4dHJhMikgJChESVNURklMRVMuZXh0cmEzKQorCitQT1RGSUxFUyA9IFwKKworQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJJChFKSAiJChNU0dGTVQpIC1jIC1vICRAICQ8IgorCSQoUSkgJChNU0dGTVQpIC1jIC1vIHQtJEAgJDwgJiYgbXYgdC0kQCAkQAorCisucG8uZ21vOgorCUBsYW5nPWBlY2hvICQqIHwgc2VkIC1lICdzLC4qLywsJ2A7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH1ybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCisKKy5zaW4uc2VkOgorCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAorCW12IHQtJEAgJEAKKworCithbGw6IGFsbC1AVVNFX05MU0AKKworYWxsLXllczogQE1BSU5UQUlORVJfQ01UQHN0YW1wLXBvCithbGwtbm86CisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCXRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQGVjaG8gInRvdWNoIHN0YW1wLXBvIgorCUBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVAorCUBtdiBzdGFtcC1wb1Qgc3RhbXAtcG8KKworIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAorIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKKyMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KKyMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQgXAorCSQoc3JjZGlyKS9hdC1leHBhbmQucGwKKwkkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKKwkgIC0tZGlyZWN0b3J5PSQodG9wX2J1aWxkZGlyKSBcCisJICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBcCisJICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAorCSAgLS1tc2dpZC1idWdzLWFkZHJlc3M9JyQoTVNHSURfQlVHU19BRERSRVNTKScKKwlwZXJsICQoc3JjZGlyKS9hdC1leHBhbmQucGwgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikucG8ubmV3CisJbXYgJChET01BSU4pLnBvICQoRE9NQUlOKS5wby5iYWsKKwltdiAkKERPTUFJTikucG8ubmV3ICQoRE9NQUlOKS5wbworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwkgIGVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0VfVVBEQVRFKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90IjsgXAorCSAgY2QgJChzcmNkaXIpICYmICQoTVNHTUVSR0VfVVBEQVRFKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQke2xhbmd9LnBvLWNyZWF0ZTsgXAorCWZpCisKKworaW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQoraW5zdGFsbC1leGVjOgoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSBcCisJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJICBmb3IgZmlsZSBpbiBNYWtldmFyczsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGwtZGF0YS1ubzogYWxsCitpbnN0YWxsLWRhdGEteWVzOiBhbGwKKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGRhdGFkaXIpCisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gcmVhbGNhdD0kJGNhdDsgZWxzZSByZWFsY2F0PSQoc3JjZGlyKS8kJGNhdDsgZmk7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJHJlYWxjYXQgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbzsgXAorCSAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgYXMgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbyI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGxuIC1zIC4uL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgbG4gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBjcCAtcCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBsaW5rIGFzICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIjsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtZXhlYyBpbnN0YWxsZGlycy1kYXRhCitpbnN0YWxsZGlycy1leGVjOgoraW5zdGFsbGRpcnMtZGF0YTogaW5zdGFsbGRpcnMtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsZGlycy1kYXRhLW5vOgoraW5zdGFsbGRpcnMtZGF0YS15ZXM6CisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChkYXRhZGlyKQorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCAKKwlybSAtZiBzdGFtcC1wb1QKKwlybSAtZiBjb3JlIGNvcmUuKiAkKERPTUFJTikucG8gJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICoubmV3LnBvCisJcm0gLWYgJChET01BSU4pLnBvLmJhaworCXJtIC1mciAqLm8KKworY2xlYW46IG1vc3RseWNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCisKK2Rpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQorZGlzdCBkaXN0ZGlyOgorCSQoTUFLRSkgdXBkYXRlLXBvCisJQCQoTUFLRSkgZGlzdDIKKyMgVGhpcyBpcyBhIHNlcGFyYXRlIHRhcmdldCBiZWNhdXNlICd1cGRhdGUtcG8nIG11c3QgYmUgZXhlY3V0ZWQgYmVmb3JlLgorZGlzdDI6ICQoRElTVEZJTEVTKQorCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgTWFrZXZhcnMudGVtcGxhdGUiOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2c7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nIjsgXAorCWZpOyBcCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gXAorCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nLiQkaTsgdGhlbiBcCisJICAgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZy4kJGkiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0IC1mICQoc3JjZGlyKS9MSU5HVUFTOyB0aGVuIGRpc3RzPSIkJGRpc3RzIExJTkdVQVMiOyBmaTsgXAorCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcik7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcik7IFwKKwkgIGZpOyBcCisJZG9uZQorCit1cGRhdGUtcG86IE1ha2VmaWxlCisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCXRlc3QgLXogIiQoVVBEQVRFUE9GSUxFUykiIHx8ICQoTUFLRSkgJChVUERBVEVQT0ZJTEVTKQorCSQoTUFLRSkgdXBkYXRlLWdtbworCisjIEdlbmVyYWwgcnVsZSBmb3IgY3JlYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tY3JlYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tY3JlYXRlJCQvLydgOyBcCisJZWNobyAiRmlsZSAkJGxhbmcucG8gZG9lcyBub3QgZXhpc3QuIElmIHlvdSBhcmUgYSB0cmFuc2xhdG9yLCB5b3UgY2FuIGNyZWF0ZSBpdCB0aHJvdWdoICdtc2dpbml0Jy4iIDE+JjI7IFwKKwlleGl0IDEKKworIyBHZW5lcmFsIHJ1bGUgZm9yIHVwZGF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLXVwZGF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZSQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkbGFuZy5uZXcucG8iOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgJChNU0dNRVJHRSkgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgdGhlbiBcCisJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCSAgZWxzZSBcCisJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKwkgICAgICA6OyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKKyQoRFVNTVlQT0ZJTEVTKToKKwordXBkYXRlLWdtbzogTWFrZWZpbGUgJChHTU9GSUxFUykKKwlAOgorCitNYWtlZmlsZTogTWFrZWZpbGUuaW4uaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgQFBPTUFLRUZJTEVERVBTQAorCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRALmluIENPTkZJR19IRUFERVJTPSBcCisJICAgICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL01ha2V2YXJzIGIvZTJmc3Byb2dzL3BvL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDlkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vTWFrZXZhcnMKQEAgLTAsMCArMSw0MSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gLS1rZXl3b3JkPVBfOjEsMgorCisjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKyMgJChET01BSU4pLnBvdCBmaWxlLiAgU2V0IHRoaXMgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHN1cnJvdW5kaW5nCisjIHBhY2thZ2UuICAoTm90ZSB0aGF0IHRoZSBtc2dzdHIgc3RyaW5ncywgZXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncworIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisjIGV4cGVjdGVkIHRvIHRyYW5zZmVyIHRoZSBjb3B5cmlnaHQgZm9yIHRoZWlyIHRyYW5zbGF0aW9ucyB0byB0aGlzIHBlcnNvbgorIyBvciBlbnRpdHksIG9yIHRvIGRpc2NsYWltIHRoZWlyIGNvcHlyaWdodC4gIFRoZSBlbXB0eSBzdHJpbmcgc3RhbmRzIGZvcgorIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKyMgdGhlaXIgY29weXJpZ2h0LgorQ09QWVJJR0hUX0hPTERFUiA9IFRoZW9kb3JlIFRzJydvCisKKyMgVGhpcyBpcyB0aGUgZW1haWwgYWRkcmVzcyBvciBVUkwgdG8gd2hpY2ggdGhlIHRyYW5zbGF0b3JzIHNoYWxsIHJlcG9ydAorIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKyMgLSBTdHJpbmdzIHdoaWNoIGFyZSBub3QgZW50aXJlIHNlbnRlbmNlcywgc2VlIHRoZSBtYWludGFpbmVyIGd1aWRlbGluZXMKKyMgICBpbiB0aGUgR05VIGdldHRleHQgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAnUHJlcGFyaW5nIFN0cmluZ3MnLgorIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKyMgICB1bmRlcnN0b29kLgorIyAtIFN0cmluZ3Mgd2hpY2ggbWFrZSBpbnZhbGlkIGFzc3VtcHRpb25zIGFib3V0IG5vdGF0aW9uIG9mIGRhdGUsIHRpbWUgb3IKKyMgICBtb25leS4KKyMgLSBQbHVyYWxpc2F0aW9uIHByb2JsZW1zLgorIyAtIEluY29ycmVjdCBFbmdsaXNoIHNwZWxsaW5nLgorIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorIyBJdCBjYW4gYmUgeW91ciBlbWFpbCBhZGRyZXNzLCBvciBhIG1haWxpbmcgbGlzdCBhZGRyZXNzIHdoZXJlIHRyYW5zbGF0b3JzCisjIGNhbiB3cml0ZSB0byB3aXRob3V0IGJlaW5nIHN1YnNjcmliZWQsIG9yIHRoZSBVUkwgb2YgYSB3ZWIgcGFnZSB0aHJvdWdoCisjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCitNU0dJRF9CVUdTX0FERFJFU1MgPSB0eXRzb0BhbHVtLm1pdC5lZHUKKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9QT1RGSUxFUy5pbiBiL2UyZnNwcm9ncy9wby9QT1RGSUxFUy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjBkZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL1BPVEZJTEVTLmluCkBAIC0wLDAgKzEsNDkgQEAKK2UyZnNjay9iYWRibG9ja3MuYworZTJmc2NrL2RpY3QuYworZTJmc2NrL2RpcmluZm8uYworZTJmc2NrL2R4X2RpcmluZm8uYworZTJmc2NrL2VoYW5kbGVyLmMKK2UyZnNjay9lbXB0eWRpci5jCitlMmZzY2svZXh0ZW5kLmMKK2UyZnNjay9mbHVzaGIuYworZTJmc2NrL2lzY2FuLmMKK2UyZnNjay9qb3VybmFsLmMKK2UyZnNjay9tZXNzYWdlLmMKK2UyZnNjay9wYXNzMWIuYworZTJmc2NrL3Bhc3MxLmMKK2UyZnNjay9wYXNzMi5jCitlMmZzY2svcGFzczMuYworZTJmc2NrL3Bhc3M0LmMKK2UyZnNjay9wYXNzNS5jCitlMmZzY2svcHJvYmxlbS5jCitlMmZzY2svcmVjb3ZlcnkuYworZTJmc2NrL3JlZ2lvbi5jCitlMmZzY2svc2NhbnRlc3QuYworZTJmc2NrL3N1cGVyLmMKK2UyZnNjay91bml4LmMKK2UyZnNjay91dGlsLmMKK21pc2MvYmFkYmxvY2tzLmMKK21pc2MvYmFzZV9kZXZpY2UuYworbWlzYy9ibGtpZC5jCittaXNjL2NoYXR0ci5jCittaXNjL2R1bXBlMmZzLmMKK21pc2MvZTJpbWFnZS5jCittaXNjL2UybGFiZWwuYworbWlzYy9lMnVuZG8uYworbWlzYy9mc2NrLmMKK21pc2MvbG9nc2F2ZS5jCittaXNjL2xzYXR0ci5jCittaXNjL21rZTJmcy5jCittaXNjL21rbG9zdCtmb3VuZC5jCittaXNjL3BhcnRpbmZvLmMKK21pc2MvdHVuZTJmcy5jCittaXNjL3V0aWwuYworbWlzYy91dWlkZC5jCittaXNjL3V1aWRnZW4uYworcmVzaXplL2V4dGVudC5jCityZXNpemUvbWFpbi5jCityZXNpemUvb25saW5lLmMKK3Jlc2l6ZS9yZXNpemUyZnMuYworcmVzaXplL3NpbV9wcm9ncmVzcy5jCitsaWIvZXh0MmZzL2V4dDJfZXJyLmMKK2UyZnNjay9wcm9mX2Vyci5jCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vUnVsZXMtcXVvdCBiL2UyZnNwcm9ncy9wby9SdWxlcy1xdW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vUnVsZXMtcXVvdApAQCAtMCwwICsxLDQ3IEBACisjIFNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgZm9yIEVuZ2xpc2ggbWVzc2FnZSBjYXRhbG9ncyB3aXRoIHF1b3RhdGlvbiBtYXJrcy4KKworRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKworLlNVRkZJWEVTOiAuaW5zZXJ0LWhlYWRlciAucG8tdXBkYXRlLWVuCisKK2VuQHF1b3QucG8tY3JlYXRlOgorCSQoTUFLRSkgZW5AcXVvdC5wby11cGRhdGUKK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKwkkKE1BS0UpIGVuQGJvbGRxdW90LnBvLXVwZGF0ZQorCitlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KK2VuQGJvbGRxdW90LnBvLXVwZGF0ZTogZW5AYm9sZHF1b3QucG8tdXBkYXRlLWVuCisKKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZS1lbiQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgR0VUVEVYVExJQkRJUj1gY2QgJCh0b3Bfc3JjZGlyKS9zcmMgJiYgcHdkYDsgZXhwb3J0IEdFVFRFWFRMSUJESVI7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwlsbD1gZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvQC4qLy8nYDsgXAorCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgJChNU0dJTklUKSAtaSAkKERPTUFJTikucG90IC0tbm8tdHJhbnNsYXRvciAtbCAkJGxsIC1vIC0gMj4vZGV2L251bGwgfCBzZWQgLWYgJCR0bXBkaXIvJCRsYW5nLmluc2VydC1oZWFkZXIgfCAkKE1TR0NPTlYpIC10IFVURi04IHwgJChNU0dGSUxURVIpIHNlZCAtZiBgZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvLipALy8nYC5zZWQgMj4vZGV2L251bGwgPiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZWxzZSBcCisJICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AcXVvdC5pbnNlcnQtaGVhZGVyCisKK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQGJvbGRxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90Cittb3N0bHljbGVhbi1xdW90OgorCXJtIC1mICouaW5zZXJ0LWhlYWRlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL2F0LWV4cGFuZC5wbCBiL2UyZnNwcm9ncy9wby9hdC1leHBhbmQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4NmVlMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9hdC1leHBhbmQucGwKQEAgLTAsMCArMSwxNDcgQEAKKyMhL3Vzci9iaW4vcGVybAorCitteSBAdHJhbnNsYXRvcl9oZWxwID0gKAorICIjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsXG4iLAorICIjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLFxuIiwKKyAiIy4gdGhlcmUgaXMgYW4gXEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgXCJcQGlcIiBhcmUgZXhwYW5kZWQgdG9cbiIsCisgIiMuIFwiaW5vZGVcIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGVcbiIsCisgIiMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93XG4iLAorICIjLiB0aGUgXEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLlxuIiwKKyAiIy5cbiIsCisgIiMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgXEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc29cbiIsCisgIiMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLlxuIiwKKyAiIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLFxuIiwKKyAiIy4gaWYgXCJiYmxvY2tcIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgXCJcQGJcIiB3b3VsZCBiZSBleHBhbmRlZCB0byBcImJsb2NrXCIpXG4iLAorICIjLiBpcyB0cmFuc2xhdGVkIGFzIFwiZGRhdGVudmVybHVzdFwiLCB0aGVuIFwiXEBkXCIgd2lsbCBiZSBleHBhbmRlZCB0b1xuIiwKKyAiIy4gXCJkYXRlbnZlcmx1c3RcIi4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGVcbiIsCisgIiMuIFxALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuXG4iLAorICIjLlxuIiwKKyAiIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzXG4iLAorICIjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc29cbiIsCisgIiMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdFxuIiwKKyAiIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggXCIlRFwiIGFuZCBcIiVJXCIgYXJlIHR3by1jaGFyYWN0ZXJcbiIsCisgIiMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCBcIiVJdVwiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZFxuIiwKKyAiIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLlxuIiwKKyAiIy4gIFxuIiwKKyAiIy4JJWIJPGJsaz4JCQlibG9jayBudW1iZXJcbiIsCisgIiMuCSVCCTxibGtjb3VudD4JCWludGVnZXJcbiIsCisgIiMuCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlclxuIiwKKyAiIy4JJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyXG4iLAorICIjLgklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmdcbiIsCisgIiMuCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuXG4iLAorICIjLgklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW5cbiIsCisgIiMuCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZVxuIiwKKyAiIy4JJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyXG4iLAorICIjLgklZwk8Z3JvdXA+CQkJaW50ZWdlclxuIiwKKyAiIy4JJWkJPGlubz4JCQlpbm9kZSBudW1iZXJcbiIsCisgIiMuCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZVxuIiwKKyAiIy4JJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZVxuIiwKKyAiIy4JJUliCTxpbm9kZT4gLT4gaV9ibG9ja3NcbiIsCisgIiMuCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnRcbiIsCisgIiMuCSVJbQk8aW5vZGU+IC0+IGlfbW9kZVxuIiwKKyAiIy4JJUlNCTxpbm9kZT4gLT4gaV9tdGltZVxuIiwKKyAiIy4JJUlGCTxpbm9kZT4gLT4gaV9mYWRkclxuIiwKKyAiIy4JJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbFxuIiwKKyAiIy4JJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsXG4iLAorICIjLgklSXUJPGlub2RlPiAtPiBpX3VpZFxuIiwKKyAiIy4JJUlnCTxpbm9kZT4gLT4gaV9naWRcbiIsCisgIiMuCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlclxuIiwKKyAiIy4JJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT5cbiIsCisgIiMuCSVOCTxudW0+XG4iLAorICIjLgklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz5cbiIsCisgIiMuCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXNcbiIsCisgIiMuCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTFxuIiwKKyAiIy4JCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pXG4iLAorICIjLgklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj5cbiIsCisgIiMuCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzXG4iLAorICIjLgkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuXG4iLAorICIjLgklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nXG4iLAorICIjLgklUwkJYmFja3VwIHN1cGVyYmxvY2tcbiIsCisgIiMuCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdFxuIiwKKyAiIy5cbiIpOworCitteSAkaXNfcHJvYmxlbV9maWxlID0gMDsKK215ICRzYXZlX21zZzsKK215ICRtc2dfYWNjdW0gPSAiIjsKK215ICRtc2c7CitteSAkZXhwYW5kZWQgPSAwOworbXkgJGxpbmVzID0gMDsKKworc3ViIGRvX2V4cGFuZCB7CisgICAgJG1zZyA9fiBzL1xAYS9leHRlbmRlZCBhdHRyaWJ1dGUvZzsKKyAgICAkbXNnID1+IHMvXEBBL2Vycm9yIGFsbG9jYXRpbmcvZzsKKyAgICAkbXNnID1+IHMvXEBiL2Jsb2NrL2c7CisgICAgJG1zZyA9fiBzL1xAQi9iaXRtYXAvZzsKKyAgICAkbXNnID1+IHMvXEBjL2NvbXByZXNzL2c7CisgICAgJG1zZyA9fiBzL1xAQy9jb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrL2c7CisgICAgJG1zZyA9fiBzL1xAaS9pbm9kZS9nOworICAgICRtc2cgPX4gcy9cQEkvaWxsZWdhbC9nOworICAgICRtc2cgPX4gcy9cQGovam91cm5hbC9nOworICAgICRtc2cgPX4gcy9cQEQvZGVsZXRlZC9nOworICAgICRtc2cgPX4gcy9cQGQvZGlyZWN0b3J5L2c7CisgICAgJG1zZyA9fiBzL1xAZS9lbnRyeS9nOworICAgICRtc2cgPX4gcy9cQEUvZW50cnkgJyVEbicgaW4gJXAgKCVpKS9nOworICAgICRtc2cgPX4gcy9cQGYvZmlsZXN5c3RlbS9nOworICAgICRtc2cgPX4gcy9cQEYvZm9yIGlub2RlICVpICglUSkgaXMvZzsKKyAgICAkbXNnID1+IHMvXEBnL2dyb3VwL2c7CisgICAgJG1zZyA9fiBzL1xAaC9IVFJFRSBkaXJlY3RvcnkgaW5vZGUvZzsKKyAgICAkbXNnID1+IHMvXEBsL2xvc3QrZm91bmQvZzsKKyAgICAkbXNnID1+IHMvXEBML2lzIGEgbGluay9nOworICAgICRtc2cgPX4gcy9cQG0vbXVsdGlwbHktY2xhaW1lZC9nOworICAgICRtc2cgPX4gcy9cQG4vaW52YWxpZC9nOworICAgICRtc2cgPX4gcy9cQG8vb3JwaGFuZWQvZzsKKyAgICAkbXNnID1+IHMvXEBwL3Byb2JsZW0gaW4vZzsKKyAgICAkbXNnID1+IHMvXEBxL3F1b3RhL2c7CisgICAgJG1zZyA9fiBzL1xAci9yb290IGlub2RlL2c7CisgICAgJG1zZyA9fiBzL1xAcy9zaG91bGQgYmUvZzsKKyAgICAkbXNnID1+IHMvXEBTL3N1cGVyYmxvY2svZzsKKyAgICAkbXNnID1+IHMvXEB1L3VuYXR0YWNoZWQvZzsKKyAgICAkbXNnID1+IHMvXEB2L2RldmljZS9nOworICAgICRtc2cgPX4gcy9cQHgvZXh0ZW50L2c7CisgICAgJG1zZyA9fiBzL1xAei96ZXJvLWxlbmd0aC9nOworICAgICRtc2cgPX4gcy9cQFxAL0AvZzsKK30KKworCit3aGlsZSAoPD4pIHsKKyAgICAkbGluZXMrKzsKKyAgICBpZiAoJGxpbmVzID09IDYpIHsKKwlwcmludCBAdHJhbnNsYXRvcl9oZWxwOworICAgIH0KKyAgICBpZiAoL14jOiAvKQorICAgIHsKKwkkaXNfcHJvYmxlbV9maWxlID0gKC9eIzogZTJmc2NrXC9wcm9ibGVtLykgPyAxIDogMDsKKyAgICB9CisgICAgJG1zZyA9ICIiOworICAgIGlmICgvXm1zZ2lkIC8gJiYgJGlzX3Byb2JsZW1fZmlsZSkgeworCSgkbXNnKSA9IC9ebXNnaWQgIiguKikiJC87CisJJHNhdmVfbXNnaWQgPSAkXzsKKwlpZiAoJG1zZyA9fiAvXEAvKSB7CisJICAgICRleHBhbmRlZCsrOworCX0KKwkmZG9fZXhwYW5kKCk7CisJaWYgKCRtc2cgbmUgIiIpIHsKKwkgICAgJG1zZ19hY2N1bSA9ICRtc2dfYWNjdW0gLiAiIy4gXEAtZXhwYW5kZWQ6ICRtc2dcbiI7CisJfQorCW5leHQ7CisgICAgfQorICAgIGlmICgvXiIvICYmICRpc19wcm9ibGVtX2ZpbGUpIHsKKwkoJG1zZykgPSAvXiIoLiopIiQvOworCSRzYXZlX21zZ2lkID0gJHNhdmVfbXNnaWQgLiAkXzsKKwlpZiAoJG1zZyA9fiAvXEAvKSB7CisJICAgICRleHBhbmRlZCsrOworCX0KKwkmZG9fZXhwYW5kKCk7CisJJG1zZ19hY2N1bSA9ICRtc2dfYWNjdW0gLiAiIy4gXEAtZXhwYW5kZWQ6ICRtc2dcbiI7CisJbmV4dDsKKyAgICB9CisgICAgaWYgKC9ebXNnc3RyIC8gJiYgJGlzX3Byb2JsZW1fZmlsZSkgeworCWlmICgkZXhwYW5kZWQpIHsKKwkgICAgcHJpbnQgJG1zZ19hY2N1bTsKKwl9CisJcHJpbnQgJHNhdmVfbXNnaWQ7CisJJG1zZ19hY2N1bSA9ICIiOworCSRleHBhbmRlZCA9IDA7CisgICAgfQorICAgIHByaW50ICRfOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL2JvbGRxdW90LnNlZCBiL2UyZnNwcm9ncy9wby9ib2xkcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MzdhYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9ib2xkcXVvdC5zZWQKQEAgLTAsMCArMSwxMCBAQAorcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCitzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCitzLyAnXChbXmAnXSpcKScgLyDigJhcMeKAmSAvZworcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworcy/igJzigJ0vIiIvZworcy/igJwv4oCcG1sxbS9nCitzL+KAnS8bWzBt4oCdL2cKK3Mv4oCYL+KAmBtbMW0vZworcy/igJkvG1swbeKAmS9nCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vY2EuZ21vIGIvZTJmc3Byb2dzL3BvL2NhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFlZWJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2NhLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vY2EucG8gYi9lMmZzcHJvZ3MvcG8vY2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyMzBiNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9jYS5wbwpAQCAtMCwwICsxLDY2NTQgQEAKKyMgVHJhbnNsYXRpb24gb2YgZTJmc3Byb2dzLTEuNDAuOCB0byBDYXRhbGFuLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgRGF2aWQgUGxhbmVsbGEgTW9sYXMgPGRhdmlkLnBsYW5lbGxhQGdtYWlsLmNvbT4sIDIwMDcsIDIwMDguCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCTxibGtjb3VudD4JCWludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjQyLjhcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTMtMDYtMTYgMDg6MTctMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTMtMDktMjUgMDU6NTkrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogV2FsdGVyIEdhcmNpYS1Gb250ZXMgPHdhbHRlci5nYXJjaWFAdXBmLmVkdT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDYXRhbGFuIDxjYUBkb2Rkcy5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGNhXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1Qb2VkaXQtQm9va21hcmtzOiA0MzQsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIkJsb2MgZXJyb25pICV1IGZvcmEgZGVscyBsw61taXRzOyBzJ2lnbm9yYXLDoC5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJlbiBjb21wcm92YXIgbCdlc3RhdCBkZWwgbm9kZS1pIGRlIGJsb2NzIGVycm9uaXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImVuIGxsZWdpciBlbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9pc2Nhbi5jOjExMCBlMmZzY2svc2NhbnRlc3QuYzoxMDcKKyM6IGUyZnNjay91bml4LmM6MTMzMiBlMmZzY2svdW5peC5jOjE0MjAgbWlzYy9iYWRibG9ja3MuYzoxMjE0CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjIgbWlzYy9iYWRibG9ja3MuYzoxMjM2IG1pc2MvYmFkYmxvY2tzLmM6MTI0OAorIzogbWlzYy9kdW1wZTJmcy5jOjU4OCBtaXNjL2UyaW1hZ2UuYzoxMTk2IG1pc2MvZTJpbWFnZS5jOjEzMjQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzcgbWlzYy9ta2UyZnMuYzoxOTYgbWlzYy90dW5lMmZzLmM6MTkwNyByZXNpemUvbWFpbi5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgcG9wZW4gZW4gwqslc8K7IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMDMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgImVuIGxsZWdpciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyBkZWwgZml0eGVyIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJlbiBhY3R1YWxpdHphciBlbCBub2RlLWkgZGUgYmxvY2sgZXJyb25pcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIkF2w61zOiBzJ2hhIHRyb2JhdCBlbCBibG9jIGludsOgbGlkICV1IGVuIGVsIG5vZGUtaSBkZSBibG9jcyBlcnJvbmlzLiAgUydoYSBlc2JvcnJhdC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgYmxvYyAlbHUgKCVzKSBtZW50cmUgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIGJsb2MgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JhIGwnZXJyb3IiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiRm9yw6dhIGxhIHJlc2NyaXB0dXJhIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBibG9jICVsdSAoJXMpIG1lbnRyZSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgZWwgYmxvYyAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJsb2NzIGRlIGRpcmVjdG9yaSBidWl0cyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJtYXBhIGRlIGRpcmVjdG9yaSBidWl0IgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiRWwgYmxvYyBkZSBkaXJlY3RvcmkgJXUgKCMlZCkgZW4gZWwgbm9kZS1pICV1IMOpcyBidWl0XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIGZpdHhlciBuYmxvY3MgbWlkYWRlbGJsb2NcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiTm9tYnJlIGRlIGJsb2NzIGludsOgbGlkXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgZWwgYmxvYyBkZWwgYsO6ZmVyIChtaWRhPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIGRpc2NcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiTCdpb2N0bCBCTEtGTFNCVUYgbm8gZXN0w6AgaW1wbGVtZW50YXQuICBObyBlcyBwb2RlbiBidWlkYXIgZWxzIGLDumZlcnMuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIFstRl0gWy1JIGJsb2NzX2RlbF9iw7pmZXJfZGVsX25vZGVfaV0gZGlzcG9zaXRpdVxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAiZW4gb2JyaXIgJXMgcGVyIGEgYnVpZGFyLWxvIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk2NyByZXNpemUvbWFpbi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImVuIGludGVudGFyIGJ1aWRhciAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMDkxCittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJlbiBvYnJpciBsJ2VzY2FuZWlnIGRlIG5vZGVzLWkiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMTA5Cittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJlbiBvYnRlbmlyIGVsIG5vZGUtaSBzZWfDvGVudCIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBub2Rlcy1pIGVzY2FuZWphdHMuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTIyCittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAicydlc3TDoCBsbGVnaW50IGVsIHPDunBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBubyBzJ2hhIHRyb2JhdCBjYXAgc8O6cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIHbDoGxpZFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyDDqXMgbWFzc2EgY3VydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiByZWN1cGVyYWNpw7MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IG5vIGVzIHJlY3VwZXJhcsOgIGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyBtZW50cmUgc2lndWkgZGUgbm9tw6lzIGxlY3R1cmFcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgImVuIGludGVudGFyIHRvcm5hciBhIG9icmlyICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHJpYnV0IGFtcGxpYXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJvciBlbiBsYSB1YmljYWNpw7MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCbWFwYSBkZSBiaXRzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2NvbXByZXNzacOzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDZW50cmEgZW4gY29uZmxpY3RlIGFtYiBhbGd1biBhbHRyZSBAYiBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaW5vZGUtaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSWlswrdsZWdhbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAianJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRHN1cHJpbWl0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImRkaXJlY3RvcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZW50cmFkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBlIMKrJURuwrsgYSAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNworbXNnaWQgIkZmb3IgQGkgJWkgKCVRKSBpcyIKK21zZ3N0ciAiRnBlciBhIGwnQGkgJWkgKCVRKSDDqXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZWwgQGQgSFRSRUUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMwCittc2dpZCAibGxvc3QrZm91bmQiCittc2dzdHIgImxsb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkzDqXMgdW4gZW5sbGHDpyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibXJlY2xhbWF0IG3Dumx0aXBsZW1lbnQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5ubyB2w6BsaWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvb3JmZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW1hIGVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJyQGkgYXJyZWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic2hhdXJpYSBkZSBzZXIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzw7pwZXJAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidWRlc2Fjb2JsYXQocykiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidmRpc3Bvc2l0aXUiCisKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbnRfKGZpbGVfc3lzdGVtcykuIEhpIGhhIGxhIHViaWNhY2nDsyBiYXNhZGEgZW4gYmxvY3MgaSBsYSB1YmljYWNpw7MgYmFzYWRhIGVuIMKrZXh0ZW50c8K7IChkcG0pLgorIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4ZXh0ZW5zacOzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MworbXNnaWQgInp6ZXJvLWxlbmd0aCIKK21zZ3N0ciAiem1pZGEgemVybyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIE5VTEw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3CisjLCBmdXp6eQorbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RlLWkgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4CisjLCBmdXp6eQorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCBkZXNjcmlwdG9yIGRlIGdydXA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCBjYXJyZWdhZG9yPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjAKK21zZ2lkICI8VGhlIHVuZGVsZXRlIGRpcmVjdG9yeSBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RlLWkgZGVsIGRpcmVjdG9yaSBkZSBkZXNmZXIgbGVzIHN1cHJlc3Npb25zPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCBkZXNjcmlwdG9yIGRlIGdydXA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RlLWkgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8Tm9kZS1pIHJlc2VydmF0IDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxOb2RlLWkgcmVzZXJ2YXQgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzMworbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZml0eGVyIG5vcm1hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzUKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJkaXNwb3NpdGl1IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiZGlzcG9zaXRpdSBkJ2FjY8OpcyBwZXIgYmxvYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDEKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJjb25kdWN0ZSBhbWIgbm9tIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MworbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImVubGxhw6cgc2ltYsOybGljIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICJzw7Jjb2wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgInRpcHMgZGUgZml0eGVyIGRlc2NvbmVndXQgYW1iIG1vZGUgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMgorIywgZnV6enkKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAicydlc3TDoCBsbGVnaW50IGVsIGJsb2MgZGUgZGlyZWN0b3JpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNAorIywgZnV6enkKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgInMnZXN0w6AgbGxlZ2ludCBlbCBibG9jIGRlIGRpcmVjdG9yaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKKyMsIGZ1enp5Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJzJ2VzdMOgIGxsZWdpbnQgZWwgYmxvYyBkZSBkaXJlY3RvcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4CisjLCBmdXp6eQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIsO6bHRpbSBibG9jIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMAorIywgZnV6enkKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJiYmxvYyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGRlIG5vZGVzLWkgcmVjbGFtYXQgbcO6bHRpcGxlbWVudCIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYxMCBlMmZzY2svcGFzczFiLmM6NzMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImVycm9yIGludGVybjogbm8gcydoYSB0cm9iYXQgZHVwX2JsayBwZXIgYSAldVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJzJ2hhIHRvcm5hdCBkZSBsYSBmdW5jacOzIGNsb25lX2ZpbGVfYmxvY2siCisKKyMgRklYTUUgKGRwbSkKKyM6IGUyZnNjay9wYXNzMWIuYzo4NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJlcnJvciBpbnRlcm46IG5vIHMnaGEgcG9ndXQgY2VyY2FyIGVsIHJlZ2lzdHJlIGRlIGJsb2MgZCdhdHJpYnV0cyBhbXBsaWF0cyAoRUEpIHBlciBhICV1IgorCisjIEZJWE1FIChkcG0pCisjOiBlMmZzY2svcGFzczFiLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiZXJyb3IgaW50ZXJuOiBubyBzJ2hhIHBvZ3V0IGNlcmNhciBlbCByZWdpc3RyZSBkZSBub2RlLWkgZCdhdHJpYnV0cyBhbXBsaWF0cyAoRUEpIHBlciBhICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgInMnZXN0w6AgbGxlZ2ludCBlbCBibG9jIGRlIGRpcmVjdG9yaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NTk4Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rlcy1pIGVuIMO6cyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjA5Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rlcy1pIGRlIGRpcmVjdG9yaXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYxOQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kZXMtaSBkZSBmaXR4ZXJzIG5vcm1hbHMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgZGUgYmxvY3MgZW4gw7pzIgorCisjOiBlMmZzY2svcGFzczEuYzo2OTUKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInMnZXN0w6Agb2JyaW5nIGwnZXNjYW5laWcgZGUgbm9kZXMtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzI5Cittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAicydlc3TDoCBvYnRlbmludCBlbCBub2RlLWkgc2Vnw7xlbnQgZGUgbCdlc2NhbmVpZyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTIzOQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgInMnZXN0YW4gbGxlZ2ludCBlbHMgYmxvY3MgaW5kaXJlY3RlcyBkZWwgbm9kZS1pICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rlcy1pIG1hbG1lc29zIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzY5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAibm9kZS1pIGVuIGVsIG1hcGEgZGUgbm9kZXMtaSBtYWxtZXNvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4OQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQxNgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY2MAorbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjY2Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NzIKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlBhcyAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDUKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiTm8gZXMgcG90IGNvbnRpbnVhci4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIiIKKworIyBGSVhNRTogwqtNZW3DsnJpYSBtw6B4aW1hwrs/IChkcG0pCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJQaWMgZGUgbWVtw7JyaWEiCisKKyM6IGUyZnNjay9wYXNzMy5jOjEzNgorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiUGFzIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjMyMgorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlBhcyA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiUGFzIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKHNlbnNlIHByZWd1bnRhKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiQXJyZWdsYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJFc2JvcnJhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlJldWJpY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiVWJpY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkV4cGFuZGVpeCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIkNvbm5lY3RhIGFtYiAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JlYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIlNhbHZhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlRydW5jYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJFc2JvcnJhIGVsIG5vZGUtaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJJbnRlcnJvbXAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGl2aWRlaXgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiQ29udGludWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiQ2xvbmEgZWxzIGJsb2NzIHJlY2xhbWF0cyBtw7psdGlwbGVtZW50IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIlN1cHJpbWVpeCBlbCBmaXR4ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU3VwcmltZWl4IGVscyBtaXNzYXRnZXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkRlc2bDqXMgbCdlbmxsYcOnIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkVzYm9ycmEgbCfDrW5kZXggSFRyZWUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiVG9ybmEgYSBjcmVhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKENBUCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiQVJSRUdMQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJFU0JPUlJBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUkVVQklDQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFTU0lHTkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkVYUEFORElUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlJFQ09OTkVDVEFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiQ1JFQVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiU0FMVkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUlVOQ0FUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiTk9ERS1JIEVTQk9SUkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiSU5URVJST01QVVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiRElWSURJVCIKKworIyBGSVhNRQorIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIkNPTlRJTlVBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiQ0xPTkFUUyBFTFMgQkxPQ1MgUkVDTEFNQVRTIE3DmkxUSVBMRU1FTlQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJVFhFUiBTVVBSSU1JVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlNVUFJJTUlUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkVOTExBw4cgREVTRkVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiw41OREVYIEhUUkVFIEVTQk9SUkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiRVMgVE9STkFSw4AgQSBDUkVBUiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiRWwgQGIgQEIgcGVyIGFsIEBnICVnIG5vIMOpcyBhIEBnLiAgKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJFbCBAaSBAQiBwZXIgYWwgQGcgJWcgbm8gw6lzIGEgQGcuICAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhdWxhIGRlIG5vZGVzLWkgcGVyIGFsIEBnICVnIG5vIMOpcyBhbCBAZy4gKEBiICViKVxuIgorIkFWw41TOiBQT1NTSUJMRSBQw4hSRFVBIERFIERBREVTIEdSRVUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAlUyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MlxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIEBTLCBvIGLDqSBubyBkZXNjcml1IHVuIEBmXG4iCisiZXh0MiBjb3JyZWN0ZS4gU2kgZWwgQHYgw6lzIHbDoGxpZCBpIHJlYWxtZW50IGNvbnTDqSB1biBAZlxuIgorImV4dDIgKGkgbm8gcGFzIGQnaW50ZXJjYW52aSwgdWZzIG8gYWxndW4gYWx0cmUpLCBsbGF2b3JzIGVsIEBTXG4iCisiZXN0w6AgbWFsbcOocywgcGVyIGxhIHF1YWwgY29zYSBwb2RldSBwcm92YXIgZCdleGVjdXRhciBsJ2UyZnNjayBhbWJcbiIKKyJ1biBAUyBhbHRlcm5hdGl1OlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJMYSBtaWRhIGRlbCBAZiAoc2Vnb25zIGVsIEBTKSDDqXMgZGUgJWIgQGJzXG4iCisiTGEgbWlkYSBmw61zaWNhIGRlbCBAdiDDqXMgZGUgJWMgQGJzXG4iCisiU2VndXJhbWVudCBlbCBAUyBvIGLDqSBsYSB0YXVsYSBkZSBwYXJ0aWNpb25zIGVzdGFuIG1hbG1lc29zLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJtaWRhX2RlbF9AYiBkZWwgQFMgPSAlYiwgbWlkYSBkZWxzIGZyYWdtZW50cyA9ICVjLlxuIgorIkFxdWVzdGEgdmVyc2nDsyBkZSBsJ2UyZnNjayBubyBmdW5jaW9uYSBhbWIgbWlkZXMgZGUgZnJhZ21lbnQgcXVlIG5vXG4iCisiY29pbmNpZGVpeGVuIGFtYiBsYSBtaWRhIGRlbCBAYi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQGJzX3Blcl9ncnVwIGRlbCBAUyA9ICViLCBoYXVyaWEgZCdoYXZlciBlc3RhdCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MAorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJwcmltZXJfQGJfZGVfZGFkZXMgZGVsIEBTID0gJWIsIGhhdXJpYSBkJ2hhdmVyIGVzdGF0ICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NQorbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiRWwgQGYgbm8gdMOpIGNhcCBVVUlEOyBzZSBsaSduIGdlbmVyYXLDoCB1bi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIkVsIEBTIGVzdMOgIG1hbG3DqHMuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIEB2IGbDrXNpYzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3OQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiRWwgbm9tYnJlIGRlIG5vZGVzLWkgZW4gZWwgQFMgw6lzICVpIChAcyAlaikuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgzCittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiRWwgSHVyZCBubyDDqXMgY29tcGF0aWJsZSBhbWIgbGEgZnVuY2lvbmFsaXRhdCBkZSB0aXB1cyBkZSBmaXR4ZXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkVsIEBTIHTDqSB1biBAaiBleHQzIEBuIChAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiRWwgQGogZXh0ZXJuIHTDqSBtw7psdGlwbGVzIHVzdWFyaXMgZGVsIEBmIChubyBjb21wYXRpYmxlKS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk4Cittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBlbCBAaiBleHRlcm5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybiB0w6kgdW4gQFMgbWFsbcOoc1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybiBubyDDqXMgY29tcGF0aWJsZSBhbWIgYXF1ZXN0IEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiBmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjEKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiRWwgQFMgZGVsIEBqIGV4dDMgZXN0w6AgbWFsbcOocy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiRWwgc2VueWFsYWRvciBkZSByZWN1cGVyYWNpw7MgZXN0w6AgYnVpdCwgcGVyw7IgZWwgQGogdMOpIGRhZGVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorIywgZnV6enkKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkVsIEBTIHTDqSBlbCBzZW55YWxhZG9yIGV4dDMgwqtuZWVkc19yZWNvdmVyecK7IChyZWN1cGVyYWNpw7NfbmVjZXNzw6ByaWEpIGFjdGl2YXQsIHBlcsOyIG5vIHTDqSBjYXAgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM2CisjLCBmdXp6eQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiRWwgc2VueWFsYWRvciBkZSByZWN1cGVyYWNpw7MgZXN0w6AgYnVpdCwgcGVyw7IgZWwgQGogdMOpIGRhZGVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJFc2JvcnJhIGVsIEBqIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIkVsIEBmIHTDqSBlbHMgc2VueWFsYWRvcnMgZGUgZnVuY2lvbmFsaXRhdCAoZmVhdHVyZSkgZGVmaW5pdHMsIHBlcsOyIMOpcyB1biBAZiBkZSByZXZpc2nDsyAwLiAgIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBpIEBvICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgbWlkYT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKKyMsIGZ1enp5Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgdHJvYmF0IGEgbCdAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCisjLCBmdXp6eQorbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJAYiBqYSBlc2JvcnJhdCAjJUIgKCViKSB0cm9iYXQgYSBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJAaSBAbyBASSAlaSBlbiBlbCBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJAaSBAbyBASSAlaSBhIGxhIGxsaXN0YSBkZSBub2Rlcy1pIEBvcy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3NgorIywgZnV6enkKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiRWwgQFMgZGVsIEBqIGV4dDMgdMOpIHVuIHNlbnlhbGFkb3IgZGVzY29uZWd1dCBkZSBmdW5jaW9uYWxpdGF0IGRlIG5vbcOpcyBsZWN0dXJhIGRlZmluaXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkVsIEBTIGRlbCBAaiBleHQzIHTDqSB1biBzZW55YWxhZG9yIGRlc2NvbmVndXQgZGUgZnVuY2lvbmFsaXRhdCBkZSBub23DqXMgbGVjdHVyYSBkZWZpbml0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIkxhIHZlcnNpw7MgZGVsIEBqIG5vIGZ1bmNpb25hIGFtYiBhcXVlc3QgZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlMnZXN0w6AgdHJhc2xsYWRhbnQgZWwgQGogZGUgLyVzIGFsIEBpIG9jdWx0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIHRyYXNsbGFkYXIgZWwgQGo6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMQorbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2hhbiB0cm9iYXQgY2FtcHMgZGUgQFMgZCd1biBAaiBkZSBWMiAoZW4gdW4gQGogZGUgVjEpLlxuIgorIlMnZXN0YW4gZXNib3JyYW50IGVscyBjYW1wcyBtw6lzIGVubGzDoCBkZWwgQFMgZGVsIEBqIGRlIFYxLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJFeGVjdXRhIGVsIEBqIGRlIHRvdGVzIG1hbmVyZXMiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiRWwgc2VueWFsYWRvciBkZSByZWN1cGVyYWNpw7Mgbm8gZXN0w6AgZGVmaW5pdCBlbiBsYSBjw7JwaWEgZGVsIEBTLCBwZXIgbGEgcXVhbCBjb3NhIHMnZXhlY3V0YXLDoCBlbCBAaiBkZSB0b3RlcyBtYW5lcmVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisiUydlc3TDoCBmZW50IHVuYSBjw7JwaWEgZGUgc2VndXJldGF0IGRlIGxhIGluZm9ybWFjacOzIGRlbCBAYiBkZSBub2Rlcy1pIGRlbCBAai5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjIKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMworbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzOAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICJMYSBkYXJyZXJhIGhvcmEgZGUgbXVudGF0Z2UgZGVsIEBTIMOpcyBlbiBlbCBmdXR1ci4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MworIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICJMYSBkYXJyZXJhIGhvcmEgZCdlc2NyaXB0dXJhIGRlbCBAUyDDqXMgZW4gZWwgZnV0dXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIkxhIHRyYW5zYWNjacOzIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgJWkgZXN0w6AgbWFsbWVzYSwgc2UgbidoYSBpbnRlcnJvbXB1dCBsYSByZXBldGljacOzXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgxCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KSAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzkyCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICJFc3RhYmxpbWVudCBkZWwgbm9tYnJlIGRlIGJsb2NzIHJlc2VydmF0cyBhICVsdVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4CisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAYnMgY291bnQgdG8gJWMgKHdhcyAlYilcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGVsIG5vbWJyZSBkZSBibG9jcyByZXNlcnZhdHMgYSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworIywgZnV6enkKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKyJTJ2VzdMOgIHRyYXNsbGFkYW50IGVsIEBqIGRlIC8lcyBhbCBAaSBvY3VsdC5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAibWlkYSBkZSBibG9jIGludsOgbGlkYSAtICVzIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQYXMgMTogY29tcHJvdmFjacOzIGRlIG5vZGVzLWksIEBicyBpIG1pZGVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJlbCBAciBubyDDqXMgdW4gQGQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0OQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiZWwgQHIgdMOpIGVsIGR0aW1lIGRlZmluaXQgKHNlZ3VyYW1lbnQgZGVndXQgYSB1biBta2UyZnMgYW50aWMpLiIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkVsIEBpICVpICglUSkgdMOpIHVuIG1vZGUgQG4uICAiCisKKyMgRklYTUUgZHRpbWUgKGRwbSkKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJFbCBAaSAlaSBARCB0w6kgdW4gZHRpbWUgemVyby4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiRWwgQGkgJWkgcydlc3TDoCB1dGlsaXR6YW50LCBwZXLDsiB0w6kgZHRpbWUgZGVmaW5pdC4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJFbCBAaSAlaSDDqXMgdW4gQGQgZGUgQHouICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3OQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg5Cittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk5Cittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDQKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIkhpIGhhIHVuIG7Dum1lcm8gKCVCKSBkZSBAYiBubyB2w6BsaWQgKCViKSBhbCBAaSBkZSBAYiBlcnJvbmlzLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE0Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkVsIEBpICVpIHTDqSBAYnMgbm8gdsOgbGlkcy4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJIaSBoYSBtYXNzYSBAYiBubyB2w6BsaWRzIGFsIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiSGkgaGEgdW4gbsO6bWVybyAoJUIpIGRlIEBiIG5vIHbDoGxpZCAoJWIpIGFsIEBpIGRlIEBiIGVycm9uaXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzQKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkVsIEBpIGRlIEBiIGVycm9uaXMgdMOpIEBicyBubyB2w6BsaWRzLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiUydlc3TDoCB1dGlsaXR6YW50IGVsIEBiIGR1cGxpY2F0IG8gZXJyb25pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDQKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2kgZWwgQGIgZXN0w6AgcmVhbG1lbnQgbWFsbcOocywgZWwgQGYgbm8gZXMgcG9kcsOgIHJlcGFyYXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJFbCBAUyBwcmltYXJ5ICglYikgw6lzIGEgbGEgbGxpc3RhIGRlIEBicyBlcnJvbmlzLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc4Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiQXbDrXM6IGVsIEBTICglYikgZGVsIGdydXAgJXMgw6lzIGVycm9uaS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICJBdsOtczogbGEgY8OycGlhIGRlbHMgZGVzY3JpcHRvcnMgZGUgQGcgZGVsIGdydXAgJWcgdMOpIHVuIEBiIGVycm9uaSAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICJFcyBwcm9iYWJsZSBxdWUgcydoYWdpIHByb2R1w690IHVuIGVycm9yIGRlIHByb2dyYW1hY2nDszogZWwgQGIgIyViIGhhIGVzdGF0IHJlY2xhbWF0IHNlbnNlIG1vdGl1IGEgcHJvY2Vzc19iYWRfQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkBBIGRlIGxhIG1lbcOycmlhIGludGVybcOoZGlhIGRlbCBAYiBwZXIgYSByZXViaWNhciAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgcmV1YmljYW50ICVnIGRlbCBAZyAlcyBkZSAlYiBhICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUydlc3TDoCByZXViaWNhbnQgJWcgZGVsIEBnICVzIGEgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE1Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIkF2w61zOiBubyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBAYiAlYiBkZSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjAKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJBdsOtczogbm8gcydoYSBwb2d1dCBlc2NyaXVyZSBlbCBAYiAlYiBwZXIgYSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUgZTJmc2NrL3Byb2JsZW0uYzoxNDc0Cittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAQSBkZWwgQEIgZGVsIEBpICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAQSBkZWwgQEIgZGVsIEBiICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjYW5lamFyIGVscyBub2Rlcy1pICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGl0ZXJhciBhIHRyYXbDqXMgZGVscyBAYnMgZGVsIEBpICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU1Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXNhciBsYSBpbmZvcm1hY2nDsyBkZWwgbm9tYnJlIGRlIG5vZGVzLWkgKEBpPSVpLCBub21icmU9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBkZXNhciBsYSBpbmZvcm1hY2nDsyBkZWwgQGIgZGUgQGQgKEBpPSVpLCBAYj0lYiwgbsO6bT0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gbGxlZ2lyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICJFbCBAaSAlaSB0w6kgZWwgc2VueWFsYWRvciBkZSBAYyBkZWZpbml0IGVuIHVuIEBmIHF1ZSBubyDDqXMgY29tcGF0aWJsZSBhbWIgbGEgQGMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJFbCBAaSBkZWwgQGogbm8gcyd1dGlsaXR6YSwgcGVyw7IgY29udMOpIGRhZGVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzA1Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiRWwgQGogbm8gw6lzIHVuIGZpdHhlciBub3JtYWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiRWwgQGkgJWkgw6lzIHBhcnQgZGUgbGEgbGxpc3RhIGRlIG5vZGVzLWkgQG9zLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNgorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIlMnaGFuIHRyb2JhdCBub2Rlcy1pIHF1ZSBzw7NuIHBhcnQgZCd1bmEgbGxpc3RhIGVubGxhw6dhZGEgZCdvcmZlcyBtYWxtZXNhLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMQorbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgQGIgZCdAYSBkZWwgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJFbCBAaSAlaSB0w6kgdW4gQGIgZCdAYSAlYiBtYWxtw6hzLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgQGIgZCdAYSAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MQorIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiZWwgbm9tYnJlIGRlIHJlZmVyw6huY2llcyBkZWwgQGkgJXMgw6lzICVJbCwgQHMgJU4uIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0NgorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBlbCBAYiBkJ0BhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MQorbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU2Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gQEEgZGVsIEBiIGQnQGEgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJFbCBAYiBkJ0BhIGVzdMOgIG1hbG3DqHMgKGNvbMK3bGlzacOzIGVuIGxhIHViaWNhY2nDsykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2NgorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJFbCBAYiBkJ0BhIGVzdMOgIG1hbG3DqHMgKG5vbSBAbikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkVsIEBiIGQnQGEgZXN0w6AgbWFsbcOocyAodmFsb3IgQG4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJFbCBAaSAlaSDDqXMgbWFzc2EgZ3Jhbi4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCisjLCBmdXp6eQorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkVsIEBiICMlQiAoJWIpIGZhIHF1ZSBlbCBAZCBzaWd1aSBtYXNzYSBncmFuLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkVsIEBiICMlQiAoJWIpIGZhIHF1ZSBlbCBmaXR4ZXIgc2lndWkgbWFzc2EgZ3Jhbi4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJFbCBAYiAjJUIgKCViKSBmYSBxdWUgbCdlbmxsYcOnIHNpbWLDsmxpYyBzaWd1aSBtYXNzYSBncmFuLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIkVsIEBpICVpIHTDqSBlbCBzZW55YWxhZG9yIElOREVYX0ZMIGRlZmluaXQgZW4gdW4gQGYgcXVlIG5vIMOpcyBjb21wYXRibGUgYW1iIGwnaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJFbCBAaSAlaSB0w6kgZWwgc2VueWFsYWRvciBJTkRFWF9GTCBkZWZpbml0IHBlcsOyIG5vIMOpcyB1biBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI1Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIEBpIHTDqSB1bmEgbWlkYSBhZGRpY2lvbmFsICglSVMpIHF1w6ggbm8gw6lzIHbDoGxpZGFcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkxhIGxsYXJnYWRhIGRlbCBub20gKCVOKSBkZSBsJ0BhIGRlbCBAaSAlaSBubyDDqXMgdsOgbGlkYVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIGRlc3BsYcOnYW1lbnQgZGVsIHZhbG9yICglTikgZGUgbCdAYSBkZWwgQGkgJWkgbm8gw6lzIHbDoGxpZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJFbCBAYiBkZWwgdmFsb3IgKCVOKSBkZSBsJ0BhIGRlbCBAaSAlaSBubyDDqXMgdsOgbGlkIChoYXVyaWEgZGUgc2VyIDApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMYSBtaWRhIGRlbCB2YWxvciAoJU4pIGRlIGwnQGEgZGVsIEBpICVpIG5vIMOpcyB2w6BsaWRhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMJ0BhIGRlbCBAaSAlaSB0w6kgdW4gcmVzdW0gKCVOKSBxdWUgbm8gw6lzIHbDoGxpZFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY2Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJFbCBAaSAlaSDDqXMgdW4gJUl0LCBwZXLDsiBzZW1ibGEgc2VyIHVuIGRpcmVjdG9yaSBlbiByZWFsaXRhdC5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgbCdhcmJyZSBkJ0B4IGFsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODIKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIkVsIEBpICVpIHTDqSBlbCBzZW55YWxhZG9yIEVYVEVOVFNfRkwgZGVmaW5pdCBlbiB1biBAZiBxdWUgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGwnZXh0ZW5zacOzLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTIKK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCBlbiBpdGVyYXIgcGVscyBAYnMgZGUgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI2CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkVsIEBqIG5vIMOpcyB1biBmaXR4ZXIgbm9ybWFsLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkVsIEBpIGRlbCBAaiBubyBzJ3V0aWxpdHphLCBwZXLDsiBjb250w6kgZGFkZXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM2CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIkVsIEBpICVpIHMnZXN0w6AgdXRpbGl0emFudCwgcGVyw7IgdMOpIGR0aW1lIGRlZmluaXQuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQxCisjLCBmdXp6eQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIjxFbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcz4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDYKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICIiCisiSW50ZXJpb3IgQHggbm9kZSBsZXZlbCAlTiBvZiBAaSAlaTpcbiIKKyJMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjcKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJAYihzKSByZWNsYW1hdChzKSBtw7psdGlwbGVtZW50IGRlbCBAaSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY2FuZWphciBlbHMgbm9kZXMtaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gaXRlcmFyIHBlbHMgQGJzIGFsIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMyBlMmZzY2svcHJvYmxlbS5jOjEzMTgKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWp1c3RhciBlbCBub21icmUgZGUgcmVmZXLDqG5jaWVzIGRlbCBAYiBkJ0BhICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDgKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIlBhcyAxQzogZXNjYW5laWcgZGVscyBkaXJlY3RvcmlzIGRlbHMgbm9kZXMtaSBhbWIgQGJzIHJlY2xhbWF0cyBtw7psdGlwbGVtZW50XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNAorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYXMgMUQ6IGNvbmNpbGlhY2nDsyBkZWxzIEBicyByZWNsYW1hdHMgbcO6bHRpcGxlbWVudFxuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxOQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiRWwgZml0eGVyICVRIChAaSAjJWksIGhvcmEgZGUgbW9kICVJTSkgXG4iCisiICB0w6kgJUIgQGIocykgQG0sIGNvbXBhcnRpdHMgYW1iICVOIGZpdHhlcihzKTpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIGhvcmEgZGUgbW9kaWZpY2FjacOzICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwCittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PG1ldGFkYWRlcyBkZWwgQGY+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiKEhpIGhhICVOIG5vZGVzLWkgcXVlIGNvbnRlbmVuIEBicyBtw7psdGlwbGVtZW50IHJlY2xhbWF0cy4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAYnMgcmVjbGFtYXRzIG3Dumx0aXBsZW1lbnQgamEgcmVhc3NpZ25hdHMgbyBjbG9uYXRzLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjbG9uYXIgZWwgZml0eGVyOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDU5Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiUGFzIDI6IGNvbXByb3ZhY2nDsyBkZSBsJ2VzdHJ1Y3R1cmEgZGVsIEBkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2OQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzQKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc5Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkwnQEUgQEwgYSDCqy7CuyIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg0Cittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkwnQEUgYXB1bnRhIGFsIEBpICglRGkpIHViaWNhdCBlbiB1biBAYiBtYWxtw6hzLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4OQorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJMJ0BFIEBMIGFsIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk0Cittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJMJ0BFIEBMIGFsIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5OQorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIkVsIG5vbSBkZSBsJ0BFIGNvbnTDqSBjYXLDoGN0ZXJzIG5vIHbDoGxpZHMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJNYW5jYSBlbCDCqy7CuyBlbiBlbCBAaSBkZSBAZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTWFuY2EgZWwgwqsuLsK7IGVuIGVsIEBpIGRlIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNAorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIkxhIHByaW1lcmEgQGUgwqslRG7CuyAoQGk9JURpKSBlbiBlbCBAaSBkZSBAZCAlaSAoJXApIEBzIMKrLsK7XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiTGEgc2Vnb25hIEBlIMKrJURuwrsgKEBpPSVEaSkgZW4gZWwgQGkgZGUgQGQgJWkgKCVwKSBAcyDCqy4uwrtcbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjQKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyOQorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzQKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzOQorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ0Cittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0OQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgdMOpIHVuIG1vZGUgQG4gKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAaSBkZSBAZCAlaSwgQGIgJUIsIGRlc3BsYcOnYW1lbnQgJU46IGVsIG5vbSBkZSBmaXR4ZXIgw6lzIG1hc3NhIGxsYXJnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU5CisjLCBmdXp6eQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJAaSBkZSBAZCAlaSwgQGIgJUIsIGRlc3BsYcOnYW1lbnQgJU46IGVsIG5vbSBkZSBmaXR4ZXIgw6lzIG1hc3NhIGxsYXJnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NAorIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkVsIEBpIGRlIEBkICVpIHTDqSB1biBAYiAjJUIgbm8gdWJpY2F0LiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2OQorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJMJ0BlIGRlIEBkIMKrLsK7IGVuIGVsIEBpIGRlIEBkICVpIG5vIGFjYWJhIGVuIE5VTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkwnQGUgZGUgQGQgwqsuLsK7IGVuIGVsIEBpIGRlIEBkICVpIG5vIGFjYWJhIGVuIE5VTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgw6lzIHVuIEB2IGRlIGNhcsOgY3RlcnMgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgw6lzIHVuIEB2IGRlIGJsb2NzIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkwnQEUgw6lzIHVuIGR1cGxpY2F0IGRlIGwnQGUgwqsuwrtcbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk0Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkwnQEUgw6lzIHVuIGR1cGxpY2F0IGRlIGwnQGUgwqsuLsK7XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OSBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybjogbm8gcydoYSB0cm9iYXQgZGlyX2luZm8gcGVyIGEgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNAorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgZGUgbCdlc3RydWN0dXJhIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCBlbiBpdGVyYXIgcGVscyBAYnMgZGUgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxOQorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgQGIgZGUgQGQgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIEBiIGRlIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGVzdWJpY2FyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkwnQGUgZGUgQGQgcGVyIGEgwqsuwrsgYSAlcCAoJWkpIMOpcyBncmFuLiBcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSDDqXMgdW5hIEZJRk8gbm8gdsOgbGlkYS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgw6lzIHVuIHPDsmNvbCBASS5cbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJyVEbicgaW4gJXAgKCVpKSB0byAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU0Cittc2dpZCAiU2V0dGluZyBmaWxldHlwZSBmb3IgQEUgdG8gJU4uXG4iCittc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIHRpcHVzIGRlIGZpdHhlciBwZXIgYSBsJ0BFIGEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU5Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJFbCB0aXB1cyBkZSBmaXR4ZXIgZGUgbCdARSDDqXMgaW5jb3JyZWN0ZSAow6lzICVEdCwgQHMgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkVsIHRpcHVzIGRlIGZpdHhlciBkZSBsQEUgZXN0w6AgZGVmaW5pdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjkKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICJFbCBub20gZGUgbCdARSDDqXMgZGUgQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiTCdlbmxsYcOnIHNpbWLDsmxpYyAlUSAoQGkgIyVpKSDDqXMgQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzkKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiRWwgQGIgZCdAYSBARiBAbiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODQKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiRWwgQGYgY29udMOpIGZpdHhlcnMgZ3JhbnMsIHBlcsOyIGxpIG1hbmNhIGVsIHNlbnlhbGFkb3IgTEFSR0VfRklMRSBhbCBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4OQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBAcCBhbCBAaCAlZDogZWwgbm9kZSAoJUIpIG5vIGVzdMOgIHJlZmVyZW5jaWF0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIEBwIGFsIEBoICVkOiBlbCBub2RlICglQikgZXN0w6AgcmVmZXJlbmNpYXQgZHVlcyB2ZWdhZGVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICJAcCBlbiBlbCBAaCAlZDogZWwgbm9kZSAoJUIpIHTDqSB1bmEgcHJvZnVuZGl0YXQgKCVOKSBAbmFcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJlbCBAaCAlZCAoJXEpIMOpcyBAbi4gICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEzCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjgKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkBwIGVuIGVsIEBoICVkOiBlbCBub2RlICglQikgdMOpIHVuYSBwcm9mdW5kaXRhdCAoJU4pIEBuYVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzMKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIkBwIGVuIGVsIEBoICVkOiBlbCBub2RlICglQikgdMOpIHVuYSBwcm9mdW5kaXRhdCAoJU4pIEBuYVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIkBwIGVuIGVsIEBoICVkOiBlbCBub2RlICglQikgdMOpIHVuYSBwcm9mdW5kaXRhdCAoJU4pIEBuYVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDMKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIkBwIGVuIGVsIEBoICVkOiBlbCBub2RlICglQikgdMOpIHVuYSBwcm9mdW5kaXRhdCAoJU4pIEBuYVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ4Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJTJ2hhIHRyb2JhdCB1bmEgQEUgZHVwbGljYWRhLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkwnQEUgdMOpIHVuIG5vbSBkZSBmaXR4ZXIgcXVlIG5vIMOpcyDDum5pYy5cbiIKKyJMaSBoYXVyw61ldSBkZSBjYW52aWFyIGVsIG5vbSBhICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTJ2hhIHRyb2JhdCB1bmEgQGUgwqslRG7Cuy5cbiIKKyJcdEVzIG1hcmNhcsOgICVwICglaSkgcGVyIGEgw6lzc2VyIHJlY29uc3RydcOvdC5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjMKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjgKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIk5vIHMnZXNwZXJhdmEgZWwgQGIgYWwgQGggJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzcyCittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc3Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MgorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4OQorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIlBhcyAzOiBjb21wcm92YWNpw7MgZGUgbGEgY29ubmVjdGl2aXRhdCBkZWxzIEBkc1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkVsIEByIG5vIGVzdMOgIHViaWNhdC4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiTm8gaGkgaGEgcHJvdSBlc3BhaSBlbiBlbCBAZCBAbC4gICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiQGkgZGUgQGQgJWkgZGVzY29ubmVjdGF0ICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCAvQGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE0Cittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIsKrLi7CuyBhICVRICglaSkgw6lzICVQICglaiksIEBzICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTkKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIkVsIGRpcmVjdG9yaSAvQGwgbm8gZXhpc3RlaXggbyBlc3TDoCBtYWxtw6hzLiAgTm8gZXMgcG90IHJlY29ubmVjdGFyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXhwYW5kaXIgZWwgZGlyZWN0b3JpIC9AbDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVjb25uZWN0YXIgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciBlbCBkaXJlY3RvcmkgL0BsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jazogJW0gZW4gaW50ZW50YXIgY3JlYXIgZWwgQGQgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2lub2RlOiAlbSBlbiBpbnRlbnRhciBjcmVhciBlbCBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIGVuIGNyZWFyIGVsIEBiIGRlIEBkIG5vdVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSBlbiBjcmVhciBlbCBAYiBkZSBAZCBub3UgcGVyIGEgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gYWp1c3RhciBlbCBub21icmUgZGUgbm9kZXMtaSBhbCBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCByZXBhcmFyIGVsIHBhcmUgZGVsIEBpICVpOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgcmVwYXJhciBlbCBwYXJlIGRlbCBAaSAlaTogbm8gcydoYSB0cm9iYXQgbCdAZSBkZSBAZCBwYXJlXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWwgQGQgYXJyZWwgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjcmVhciBlbCBAZCAvQGwgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODkKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgImVsIEByIG5vIMOpcyB1biBAZDsgcydpbnRlcnJvbXByw6AuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTQKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIk5vIGVzIHBvdCBjb250aW51YXIgc2Vuc2UgdW4gQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBubyDDqXMgdW4gQGQgKG5vZGUtaT0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQYXMgM0E6IG9wdGltaXR6YWNpw7MgZGVscyBkaXJlY3RvcmlzXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgbCdpdGVyYWRvciBkaXJzX3RvX2hhc2g6ICVtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9wdGltaXR6YXIgZWwgZGlyZWN0b3JpICVxICglZCk6ICVtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIlMnZXN0YW4gb3B0aW1pdHphbnQgZWxzIGRpcmVjdG9yaXM6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlBhcyA0OiBjb21wcm92YWNpw7MgZGVscyBub21icmVzIGRlIHJlZmVyw6huY2llc1xuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkBpIGRlIEB6ICVpIEB1LiAgIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAaSAlaSBAdVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1OAorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJlbCBub21icmUgZGUgcmVmZXLDqG5jaWVzIGRlbCBAaSAlcyDDqXMgJUlsLCBAcyAlTi4iCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQVbDjVM6IFMnSEEgUFJPRFXDj1QgVU4gRVJST1IgREUgUFJPR1JBTUFDScOTIEVOIEVMIEUyRlNDSyFcbiIKKyJcdE8gQsOJIEFMR1VOIENBUCBERSBQQVJEQUwgKE8gU0lHVUksIFRVKSBFU1TDgCBDT01QUk9WQU5UIFVOIFNJU1RFTUFcbiIKKyJcdERFIEZJVFhFUlMgTVVOVEFUIChFTiBWSVUpLlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gw6lzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IMOpcyAlSWwuICBIYXVyaWVuIGRlIGNvaW5jaWRpciFcbiIKKworIyBGSVhNRQorIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MgorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICJQYXMgNTogY29tcHJvdmFjacOzIGRlbCByZXN1bSBkZSBsYSBpbmZvcm1hY2nDsyBkZWwgQGdcbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc3Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MgorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg3Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA3Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiRWwgbm9tYnJlIGRlIG5vZGVzLWkgbGxpdXJlcyBubyBlcyBjb3JyZWN0ZSBwZXIgYWwgQGcgbsO6bS4gJWcgKCVpLCByZWNvbXB0ZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjMyCittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJFbCBub21icmUgZGUgZGlyZWN0b3JpcyBubyBlcyBjb3JyZWN0ZSBwZXIgYWwgQGcgbsO6bS4gJWcgKCVpLCByZWNvbXB0ZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkVsIG5vbWJyZSBkZSBub2Rlcy1pIGxsaXVyZXMgbm8gZXMgY29ycmVjdGUgKCVpLCByZWNvbXB0ZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQyCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJFbCBub21icmUgZGUgQGJzIGxsaXVyZXMgbm8gZXMgY29ycmVjdGUgcGVyIGFsIEBnIG7Dum0uICVnICglaSwgcmVjb21wdGU9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDcKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJFbCBub21icmUgZGUgQGJzIGxsaXVyZXMgbm8gZXMgY29ycmVjdGUgKCVpLCByZWNvbXB0ZT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjUyCittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MworIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcwNQorIywgZnV6enkKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiVG9ybmEgYSBjcmVhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEwCittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBhbWIgdW4gY29kaSBubyBnZXN0aW9uYXQgKDB4JXgpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1NCBlMmZzY2svcHJvYmxlbS5jOjE5NTgKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUkFUIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtw7JyaWEgdXRpbGl0emFkYTogJWQsIHRlbXBzIHRyYW5zY29ycmVndXQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAibWlkYSBkZWwgbm9kZS1pPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgImVuIGluaWNpYXIgbCdleHBsb3JhY2nDsyBkZWxzIG5vZGVzLWkiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImVuIGZlciBsJ2V4cGxvcmFjacOzIGRlbHMgbm9kZXMtaSIKKworIzogZTJmc2NrL3N1cGVyLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJlbiBmZXIgbGEgY3JpZGEgYSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwZXIgYWwgbm9kZS1pICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJlbiBmZXIgbGEgY3JpZGEgYSBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50IHBlciBhbCBub2RlLWkgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MgorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIlRydW5jYW1lbnQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MworbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJOZXRlamEiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiRm9ybWEgZCfDunM6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHPDunBlcmJsb2NdIFstQiBtaWRhZGVibG9jXVxuIgorIlx0XHRbLUkgYmxvY3NfZGVfbWVtX2ludGVybV9kZWxfbm9kZS1pXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgZml0eGVyX2RlX2Jsb2NzX2Vycm9uaXNdIFstQyBmZF0gWy1qIHJlZ19kZV90cmFuc19leHRlcm5dXG4iCisiXHRcdFstRSBvcGNpb25zX2FtcGxpYWRlc10gZGlzcG9zaXRpdVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQWp1ZGEgZCdlbWVyZ8OobmNpYTpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgUmVwYXJhY2nDsyBhdXRvbcOgdGljYSAoc2Vuc2UgcHJlZ3VudGVzKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBObyBmYWNpcyBjYXAgY2FudmkgYWwgc2lzdGVtYSBkZSBmaXR4ZXJzXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZWl4IMKrc8OtwrsgcGVyIGEgdG90ZXMgbGVzIHByZWd1bnRlc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDb21wcm92YSBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIGkgYWZlZ2VpeC1sb3MgYSBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pc1xuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3LDp2EgbGEgY29tcHJvdmFjacOzIGVuY2FyYSBxdWUgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIHMnaGFnaSBtYXJjYXQgY29tIGEgbmV0XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IGZpdHhlcnMgKCUwZC4lZCUlIG5vIGNvbnRpZ3VzKSwgJXUvJXUgYmxvY3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIyBpbmQ6IGluZGlyZWN0LCBkaW5kOiBkb3VibGUgaW5kaXJlY3QsIHRpbmQ6IHRyaXBsZSBpbmRpcmVjdCAoZHBtKQorIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgIG5vbWJyZSBkZSBub2Rlcy1pIGFtYiBibG9jcyBpbmQvZGluZC90aW5kOiAldS8ldS8ldVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIldSBub2Rlcy1pLCAldSBibG9jc1xuIgorbXNnc3RyWzFdICIldSBub2Rlcy1pLCAldSBibG9jc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiZml0eGVyIG5vcm1hbCIKK21zZ3N0clsxXSAiZml0eGVyIG5vcm1hbCIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gImZpdHhlciBub3JtYWwiCittc2dzdHJbMV0gImZpdHhlciBub3JtYWwiCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gImRpcmVjdG9yaSIKK21zZ3N0clsxXSAiZGlyZWN0b3JpIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gImRpc3Bvc2l0aXUiCittc2dzdHJbMV0gImRpc3Bvc2l0aXUiCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gImRpc3Bvc2l0aXUgZCdhY2PDqXMgcGVyIGJsb2MiCittc2dzdHJbMV0gImRpc3Bvc2l0aXUgZCdhY2PDqXMgcGVyIGJsb2MiCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiZW5sbGHDpyBzaW1iw7JsaWMiCittc2dzdHJbMV0gImVubGxhw6cgc2ltYsOybGljIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiZW5sbGHDpyBzaW1iw7JsaWMiCittc2dzdHJbMV0gImVubGxhw6cgc2ltYsOybGljIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gInPDsmNvbCIKK21zZ3N0clsxXSAic8OyY29sIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk4NSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgImVuIGRldGVybWluYXIgc2kgJXMgZXN0w6AgbXVudGF0LiIKKworIzogZTJmc2NrL3VuaXguYzoyNTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiQXbDrXMhICAlcyBlc3TDoCBtdW50YXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjYyCittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgY29udGludWFyLCBzJ2ludGVycm9tcHLDoC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiXGFcYVxhXGFBVsONUyEhISAgTCdleGVjdWNpw7MgZGUgbCdlMmZzY2sgZW4gdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIG11bnRhdFxuIgorInBvdCBjYXVzYXItbGkgZGFueXMgR1JFVVMuXGFcYVxhXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY5Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJFc3RldSBzZWd1ciBxdWUgdm9sZXUgY29udGludWFyPyIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAicydoYSBpbnRlcnJvbXB1dCBsYSBjb21wcm92YWNpw7MuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzYxCittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBjb250w6kgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzIGFtYiBlcnJvcnMiCisKKyM6IGUyZnNjay91bml4LmM6MzYzCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiBubyBlcyB2YSBkZXNtdW50YXIgY29ycmVjdGFtZW50IgorCisjOiBlMmZzY2svdW5peC5jOjM2NQorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgbGVzIGNhcmFjdGVyw61zdGlxdWVzIGRlbCBzdXBlcmJsb2MgcHJpbWFyaSBzw7NuIGRpZmVyZW50cyBkZSBsZXMgZGVsIGRlIGxhIGPDsnBpYSBkZSBzZWd1cmV0YXQiCisKKyM6IGUyZnNjay91bml4LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIHMnaGEgbXVudGF0ICV1IHZlZ2FkZXMgc2Vuc2UgaGF2ZXIgZXN0YXQgY29tcHJvdmF0IgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJ0w6kgbGEgZGFycmVyYSBob3JhIGRlIGNvbXByb3ZhY2nDsyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIMOpcyBlbiBlbCBmdXR1ciIKKworIzogZTJmc2NrL3VuaXguYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgbm8gcydoYSBjb21wcm92YXQgZGVzIGRlIGZhICV1IGRpZXMiCisKKyM6IGUyZnNjay91bml4LmM6MzkxCittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgZXMgZm9yw6dhcsOgIGxhIGNvbXByb3ZhY2nDsy5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiBuZXQsICV1LyV1IGZpdHhlcnMsICV1LyV1IGJsb2NzIgorCisjOiBlMmZzY2svdW5peC5jOjQ0MworbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHMnaGEgYWpvcm5hdCBsYSBjb21wcm92YWNpw7M7IHMnZXN0w6AgdXRpbGl0emFudCBsYSBiYXRlcmlhKSIKKworIzogZTJmc2NrL3VuaXguYzo0NDYKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGVzIGNvbXByb3ZhcsOgIGRlc3Byw6lzIGRlbCBtdW50YXRnZSBzZWfDvGVudCkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoZXMgY29tcHJvdmFyw6AgZW4gJWxkIG11bnRhZGVzKSIKKworIzogZTJmc2NrL3VuaXguYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRVJST1I6IG5vIHMnaGEgcG9ndXQgb2JyaXIgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJMYSB2ZXJzacOzIGRlbHMgYXRyaWJ1dHMgYW1wbGlhdHMgbm8gw6lzIHbDoGxpZGEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJFcyBkZXNjb25laXggbCdvcGNpw7MgYW1wbGlhZGE6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiSGkgaGEgdW4gZXJyb3IgZGUgc2ludGF4aSBhbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBkZSBsJ2UyZnNjayAoJXMsIGzDrW5pYSAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB2YWxpZGFyIGVsIGRlc2NyaXB0b3IgZGUgZml0eGVyICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5MgorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MDcKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIk5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW5hIGRlIGxlcyBvcGNpb25zIC1wLy1hLCAtbiBvIC15IGEgbGEgdmVnYWRhLiIKKworIzogZTJmc2NrL3VuaXguYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIkwnb3BjacOzIC10IG5vIGVzdMOgIGltcGxlbWVudGFkYSBlbiBhcXVlc3RhIHZlcnNpw7MgZGUgbCdlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODU5IGUyZnNjay91bml4LmM6OTMxIG1pc2MvdHVuZTJmcy5jOjgxMSBtaXNjL3R1bmUyZnMuYzoxMTAwCisjOiBtaXNjL3R1bmUyZnMuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgwqslc8K7IgorCisjOiBlMmZzY2svdW5peC5jOjkxMAorIywgZnV6enkKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKyIlczogbGVzIG9wY2lvbnMgLW4gaSAtdyBzw7NuIG11dHVhbG1lbnQgZXhjbHVzaXZlcy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzo5MTUKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisiJXM6IGxlcyBvcGNpb25zIC1uIGkgLXcgc8OzbiBtdXR1YWxtZW50IGV4Y2x1c2l2ZXMuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTIwCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorIiVzOiBsZXMgb3BjaW9ucyAtbiBpIC13IHPDs24gbXV0dWFsbWVudCBleGNsdXNpdmVzLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIk5vIGVzIHBvZGVuIHV0aWxpdHphciBsZXMgb3BjaW9ucyAtYyBpIC1sLy1MIGFsIG1hdGVpeCB0ZW1wcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyDCqyVzwrsgbm8gw6lzIHVuIGVudGVyXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkwnYXJndW1lbnQgbm8gbnVtw6hyaWMgZGUgLSVjIG5vIMOpcyB2w6BsaWQgKMKrJXPCuylcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlIHdhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAiZW4gY29uZmlndXJhciBlbCBzw7pwZXJibG9jIgorCisjOiBlMmZzY2svdW5peC5jOjExNDQgbWlzYy90dW5lMmZzLmM6MTkxMgorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIkVycm9yOiBsYSB2ZXJzacOzIGRlIGxhIGJpYmxpb3RlY2EgZGUgbCdleHQyZnMgw6lzIG1hc3NhIGFudGlnYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjAyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAiZW4gaW50ZW50YXIgaW5pY2lhbGl0emFyIGVsIHByb2dyYW1hIgorCisjOiBlMmZzY2svdW5peC5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRTJ3V0aWxpdHphICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJjYWwgdW4gdGVybWluYWwgcGVyIGEgbGVzIHJlcGFyYWNpb25zIGludGVyYWN0aXZlcyIKKworIzogZTJmc2NrL3VuaXguYzoxMjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIlczogJXMgcHJvdmFudCBlbHMgYmxvY3MgZGUgY8OycGlhIGRlIHNlZ3VyZXRhdC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTIKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTw7pwZXJibG9jIG5vIHbDoGxpZCwiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MworbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJFbHMgZGVzY3JpcHRvcnMgZGUgZ3J1cCBubyBlc3RhbiBlbiBib24gZXN0YXQuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIlczogJXMgcHJvdmFudCBlbHMgYmxvY3MgZGUgY8OycGlhIGRlIHNlZ3VyZXRhdC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXM6IG5vIHMnaGEgdHJvYmF0IGNhcCBzw7pwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgdsOgbGlkXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMzNQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSB2ZXJzacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgw6lzIG1hc3NhIHJlY2VudCBwZXIgYSBhcXVlc3RhIHZlcnNpw7MgZGUgbCdlMmZzY2suXG4iCisiKE8gYsOpIGVsIHN1cGVyYmxvYyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGVzdMOgIG1hbG3DqHMpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0MQorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIlBvdCBzZXIgcXVlIGFpeMOyIHNpZ3VpIHVuYSBwYXJ0aWNpw7MgZGUgbWlkYSB6ZXJvP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJDYWwgcXVlIHRpbmd1ZXUgYWNjw6lzIGRlICVzIGFsIHNpc3RlbWEgZGUgZml0eGVycyBvIGLDqSBxdWUgc2lndWV1IGwndXN1YXJpIHByaW1hcmlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJQb3Qgc2VyIHF1ZSBubyBleGlzdGVpeGkgZWwgZGlzcG9zaXRpdSBvIGLDqSBxdWUgc2lndWkgZCdpbnRlcmNhbnZpP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTIKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiUG90IHNlciBxdWUgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGwnaGFnaSBtdW50YXQgbyBvYmVydCB1biBhbHRyZSBwcm9ncmFtYSBkZSBtYW5lcmEgZXhjbHVzaXZhP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKKyMsIGZ1enp5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiUG90IHNlciBxdWUgbm8gZXhpc3RlaXhpIGVsIGRpc3Bvc2l0aXUgbyBiw6kgcXVlIHNpZ3VpIGQnaW50ZXJjYW52aT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJFbCBkaXNjIGVzdMOgIHByb3RlZ2l0IGNvbnRyYSBlc2NyaXB0dXJhOyB1dGlsaXR6ZXUgbCdvcGNpw7NcbiIKKyItbiBwZXIgYSBmZXIgdW5hIGNvbXByb3ZhY2nDsyBkZSBub23DqXMtbGVjdHVyYSBkZWwgZGlzcG9zaXRpdS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDIzCittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJIYXVyw61ldSBkJ29idGVuaXIgdW5hIHZlcnNpw7MgbcOpcyByZWNlbnQgZGUgbCdlMmZzY2siCisKKyM6IGUyZnNjay91bml4LmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJlbiBjb21wcm92YXIgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIHBlciBhICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0NzgKK21zZ2lkICJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSBjaGVjay5cbiIKK21zZ3N0ciAiQXbDrXM6IHMnb21ldHLDoCBsYSByZWN1cGVyYWNpw7MgZGVsIHJlZ2lzdHJlIGRlIGNhbnZpcyBwZXJxdcOoIHMnZXN0w6AgY29tcHJvdmFudCBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZW4gbW9kZSBkZSBub23DqXMtbGVjdHVyYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBkZWZpbmlyIGVscyBzZW55YWxhZG9ycyBkZWwgc3VwZXJibG9jIGEgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJlbiByZWN1cGVyYXIgZWwgcmVnaXN0cmUgZGUgY2FudmlzIGV4dDMgZGUgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIHTDqSBmdW5jaW9uYWxpdGF0cyBubyBpbXBsZW1lbnRhZGVzOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIkF2w61zOiBlbCBmdW5jaW9uYW1lbnQgYW1iIGNvbXByZXNzacOzIMOpcyBleHBlcmltZW50YXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTU5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pIGRlbHMgYmxvY3MgZXJyb25pcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTk3Cittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICJBaXjDsiBubyDDqXMgdW4gYm9uIHByZXNhZ2ksIHBlcsOyIHMnaW50ZW50YXLDoCBjb250aW51YXIuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiQ3JlYWNpw7MgZGVsIHJlZ2lzdHJlIGRlIGNhbnZpcyAoJWQgYmxvY3MpOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY0OAorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgRmV0LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDkKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogcmVnaXN0cmUgZGUgY2FudmlzIHJlY3JlYXQgLSBlbCBzaXN0LiBkZSBmaXR4ZXJzIHRvcm5hIGEgc2VyIGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3MgorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIHRvcm5hbnQgYSBpbmljaWFyIGwnZTJmc2NrIGRlcyBkZWwgY29tZW7Dp2FtZW50Li4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3NgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJlbiByZWluaWNpYXIgZWwgY29udGV4dCIKKworIzogZTJmc2NrL3VuaXguYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBzJ2hhIGNhbmNlbMK3bGF0IGwnZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJzJ2hhIGludGVycm9tcHV0IgorCisjOiBlMmZzY2svdW5peC5jOjE3MDAgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIFMnSEEgTU9ESUZJQ0FUIEVMIFNJU1RFTUEgREUgRklUWEVSUyAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogUkVJTklDSUVVIEVMIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxMiBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogQVbDjVM6IGVsIHNpc3RlbWEgZGUgZml0eGVycyBlbmNhcmEgdMOpIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAiZW4gZXN0YWJsaXIgbGEgaW5mb3JtYWNpw7MgZGUgc3VtYSBkZSB2ZXJpZmljYWNpw7MgZGVsIGdydXAgZGUgYmxvY3MiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgInNTIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjxzPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAocy9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgInMnaGEgY2FuY2VswrdsYXRcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAic8OtXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibm9cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5vXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gc8OtXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJzw60iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgImVuIHRvcm5hciBhIGludGVudGFyIGxhIGxlY3R1cmEgZGVscyBtYXBlcyBkZSBiaXRzIHBlciBhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgImVzY3JpcHR1cmEgZGVscyBtYXBlcyBkZSBiaXRzIGRlIGJsb2MgaSBkZSBub2RlLWkiCisKKyM6IGUyZnNjay91dGlsLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgImVuIHRvcm5hciBhIGVzY3JpdXJlIGVscyBtYXBlcyBkZSBiaXRzIGRlIGJsb2MgaSBkZSBub2RlLWkgcGVyIGRlICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IElOQ09OU0lTVMOITkNJQSBJTkVTUEVSQURBOyBFWEVDVVRFVSBmc2NrIE1BTlVBTE1FTlQuXG4iCisiXHQow6lzIGEgZGlyLCBzZW5zZSBsZXMgb3BjaW9ucyAtYSBvIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJNZW3DsnJpYSB1dGlsaXR6YWRhOiAlZGsvJWRrICglZGsvJWRrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJNZW3DsnJpYSB1dGlsaXR6YWRhOiAlZCwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ0ZW1wczogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJ0ZW1wcyB0cmFuc2NvcnJlZ3V0OiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImVuIGxsZWdpciBlbCBub2RlLWkgJWxkIGEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgbm9kZS1pICVsZCBhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjc4NQorbXNnaWQgIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyBydW5uaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjkKKyMsIGZ1enp5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiZmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJGb3JtYSBkJ8O6czogJXMgWy1iIG1pZGFfZGVsX2Jsb2NdIFstaSBmaXR4ZXJfZCdlbnRyYWRhXSBbLW8gZml0eGVyX2RlX3NvcnRpZGFdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9jc19hX2xhX3ZlZ2FkYV0gWy1kIGZhY3Rvcl9kZV9yZXRhcmRfZW50cmVfbGVjdHVyZXNdIFstZSBibG9jc19lcnJvbmlzX23DoHhdXG4iCisiICAgICAgIFstcCBub21icmVfZGVfcGFzc29zXSBbLXQgcGF0csOzX2RlX3Byb3ZhIFstdCBwYXRyw7NfZGVfcHJvdmEgWy4uLl1dXVxuIgorIiAgICAgICBkaXNwb3NpdGl1IFtkYXJyZXJfYmxvYyBbYmxvY19kJ2luaWNpXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBsZXMgb3BjaW9ucyAtbiBpIC13IHPDs24gbXV0dWFsbWVudCBleGNsdXNpdmVzLlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzIyCittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIkNvbXByb3ZhY2nDsyBhbWIgdW4gcGF0csOzIGFyYml0cmFyaTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0MAorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICJDb21wcm92YWNpw7MgYW1iIGVsIHBhdHLDsyAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzIgbWlzYy9iYWRibG9ja3MuYzo0NDUKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAiZHVyYW50IGxhIGNlcmNhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIlZhbG9yIGVzdHJhbnkgKCVsZCkgYSBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiZHVyYW50IGwnZXhlY3VjacOzIGRlIGV4dDJmc19zeW5jX2RldmljZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0ODkgbWlzYy9iYWRibG9ja3MuYzo3NDkKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICJlbiBpbmljaWFyIGxhIGl0ZXJhY2nDsyBwZXIgbGEgbGxpc3RhIGRlIGJsb2NzIGVycm9uaXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJlbiB1YmljYXIgZWxzIGLDumZlcnMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkNvbXByb3ZhY2nDsyBkZWxzIGJsb2NzICVsdSBhICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMgorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIGVuIG1vZGUgZGUgbm9tw6lzLWxlY3R1cmFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIlMnZXN0w6AgY29tcHJvdmFudCBzaSBoaSBoYSBibG9jcyBlcnJvbmlzIChwcm92YSBkZSBub23DqXMtbGVjdHVyYSk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJIaSBoYSBtYXNzYSBibG9jcyBlcnJvbmlzLCBzJ2ludGVycm9tcHLDoCBsYSBjb21wcm92YWNpw7NcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MDkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IHNpIGhpIGhhIGJsb2NzIGVycm9uaXMgZW4gbW9kZSBkZSBsZWN0dXJhLWVzY3JpcHR1cmFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkRlbHMgYmxvY3MgJWx1IGEgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxlY3R1cmEgaSBjb21wYXJhY2nDszogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiUydlc3TDoCBjb21wcm92YW50IHNpIGhpIGhhIGJsb2NzIGVycm9uaXMgZW4gbW9kZSBkZSBsZWN0dXJhLWVzY3JpcHR1cmEgbm8gZGVzdHJ1Y3RpdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJTJ2VzdMOgIGNvbXByb3ZhbnQgc2kgaGkgaGEgYmxvY3MgZXJyb25pcyAocHJvdmEgZW4gbW9kZSBkZSBsZWN0dXJhLWVzY3JpcHR1cmEgbm8gZGVzdHJ1Y3RpdSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIlMnaGEgaW50ZXJjZXB0YXQgdW5hIGludGVycnVwY2nDszsgcydpbmljaWFyYW4gbGVzIHRhc3F1ZXMgZGUgbmV0ZWphXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiZHVyYW50IGwnZXNjcmlwdHVyYSBkZSBsZXMgZGFkZXMgZGUgcHJvdmEsIGJsb2MgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk4OCBtaXNjL3V0aWwuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBlc3TDoCBtdW50YXQ7ICIKKworIyBGSVhNRTogSG9wZSAtIGVzcGVyZW0gPyAoZHBtKQorIzogbWlzYy9iYWRibG9ja3MuYzo5OTAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAicydoYSBmb3LDp2F0IGJhZGJsb2NrcyBkZSB0b3RlcyBtYW5lcmVzLiAgU2VndXJhbWVudCAvZXRjL210YWIgc2lndWkgaW5jb3JyZWN0ZS5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImwnZXhlY3VjacOzIGRlIGJhZGJsb2NrcyBubyDDqXMgc2VndXJhIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZXN0w6AgZXNzZW50IHV0aWxpdHphdCBwZWwgc2lzdGVtYTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAicydoYSBmb3LDp2F0IGJhZGJsb2NrcyBkZSB0b3RlcyBtYW5lcmVzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICIlcyBubyB2w6BsaWQgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIm5vIGVzIHBvdCBhc3NpZ25hciBtZW3DsnJpYSBwZXIgYWwgcGF0csOzX2RlX3Byb3ZhIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJOb23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuIHBhdHLDs19kZV9wcm92YSBjb20gYSBtw6B4aW0gZW4gbW9kZSBkZSBub23DqXMtbGVjdHVyYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTY5Cittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiTm8gZXMgcG90IHV0aWxpdHphciB1biBwYXRyw7NfZGVfcHJvdmEgYXJiaXRyYXJpIGVuIG1vZGUgZGUgbm9tw6lzLWxlY3R1cmEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIGRpc3Bvc2l0aXU7XG4iCisibCdoYXVyZXUgZCdlc3BlY2lmaWNhciBtYW51YWxtZW50XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4OQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZGV2aWNlIHNpemUiCittc2dzdHIgImVuIGludGVudGFyIGRldGVybWluYXIgbGEgbWlkYSBkZWwgZGlzcG9zaXRpdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAiw7psdGltIGJsb2MiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJwcmltZXIgYmxvYyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsdSIKK21zZ3N0ciAiYmxvYyBkJ2luaWNpIG5vIHbDoGxpZCAoJWx1KTogaGF1cmlhIGRlIHNlciBtZW5vciBkZSAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI1OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgImVuIGNyZWFyIGxhIGxsaXN0YSBkZSBibG9jcyBlcnJvbmlzIGVuIG1lbcOycmlhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNzQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJlbiBhZmVnaXIgYSBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyBlbiBtZW3DsnJpYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiUGFzIGNvbXBsZXRhdDsgcydoYW4gdHJvYmF0ICV1IGJsb2NzIGVycm9uaXMuXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiAlcyBbLVJWZl0gWy0rPUFhY0RkaWpzU3VdIFstdiB2ZXJzacOzXSBmaXR4ZXJzLi4uXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAidmVyc2nDsyBubyB2w6BsaWRhIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgImVuIGludGVudGFyIG1vc3RyYXIgbGEgaW5mb3JtYWNpw7MgZGUgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImVuIGxsZWdpciBlbHMgc2VueWFsYWRvcnMgYSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiUydoYW4gZXN0YWJsZXJ0IGVscyBzZW55YWxhZG9ycyBkZSAlcyBjb20gYSAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImVuIGVzdGFibGlyIGVscyBzZW55YWxhZG9ycyBhICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiUydoYSBlc3RhYmxlcnQgbGEgdmVyc2nDsyBkZSAlcyBhICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgImVuIGVzdGFibGlyIGxhIHZlcnNpw7MgYSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbGEgdmFyaWFibGUgZGVsIGNhbcOtIGEgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNgorbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IG5vIMOpcyBjb21wYXRpYmxlIGFtYiAtIGkgK1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjMxNAorbXNnaWQgIk11c3QgdXNlICctdicsID0sIC0gb3IgK1xuIgorbXNnc3RyICJDYWwgdXRpbGl0emFyIMKrLXbCuywgPSwgLSBvICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiRm9ybWEgZCfDunM6ICVzIFstYmZoaXhWXSBbLW9iIHN1cGVyYmxvY10gWy1vQiBtaWRhZGVsYmxvY10gZGlzcG9zaXRpdVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiYmJsb2MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXAgJWx1OiAoYmxvY3MgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiU3VtYSBkZSB2ZXJpZmljYWNpw7MgMHglMDR4LCBub2Rlcy1pIG5vIHV0aWxpdHphdHMgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgJXUgbm9kZXMtaSBubyB1dGlsaXR6YXRzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiIHN1cGVyYmxvYyAlcyBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW1hcmkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIkPDsnBpYSBkZSBzZWd1cmV0YXQiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgZGVzY3JpcHRvcnMgZGUgZ3J1cCBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIGRlc2NyaXB0b3IgZGUgZ3J1cCBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNAorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiIE1hcGEgZGUgYml0cyBkZWwgYmxvYyBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOAorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCBtYXBhIGRlIGJpdHMgZGVsIG5vZGUtaSBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MgorbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgdGF1bGEgZGUgbm9kZXMtaSBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1IGJsb2NzIGxsaXVyZXMsICV1IG5vZGVzLWkgbGxpdXJlcywgJXUgZGlyZWN0b3JpcyAlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSBub2Rlcy1pIG5vIHV0aWxpdHphdHNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OAorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBCbG9jcyBsaXVyZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI2OQorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBOb2Rlcy1pIGxsaXVyZXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJlbiBpbXByaW1pciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiQmxvY3MgZXJyb25pczogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzA2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzkKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIlVzdWFyaXMgZGVsIHJlZ2lzdHJlIGRlIGNhbnZpczogICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2OAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJNaWRhIGRlbCByZWdpc3RyZSBkZSBjYW52aXM6ICAgICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJNaWRhIGRlIGJsb2MgZGVsIHJlZy4gZGUgY2FudmlzOiAgICAgICV1XG4iCisiTGxhcmdhZGEgZGVsIHJlZy4gZGUgY2FudmlzOiAgICAgICAgICAldVxuIgorIlByaW1lciBibG9jIGRlbCByZWcuIGRlIGNhbnZpczogICAgICAgJXVcbiIKKyJTZXHDvMOobmNpYSBkZWwgcmVnLiBkZSBjYW52aXM6ICAgICAgICAgMHglMDh4XG4iCisiSW5pY2kgZGVsIHJlZ2lzdHJlIGRlIGNhbnZpczogICAgICAgICAldVxuIgorIk5vbWJyZSBkJ3VzdWFyaXMgZGVsIHJlZy4gZGUgY2FudmlzOiAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJVc3VhcmlzIGRlbCByZWdpc3RyZSBkZSBjYW52aXM6ICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjIyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImVuIGxsZWdpciBlbCBzdXBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIk5vIHMnaGFuIHRyb2JhdCBlbHMgbsO6bWVyb3MgbcOgZ2ljcyBkZWwgc3VwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1pZGEgZGUgYmxvYyBkZWwgcmVnLiBkZSBjYW52aXM6ICAgICAgJXVcbiIKKyJMbGFyZ2FkYSBkZWwgcmVnLiBkZSBjYW52aXM6ICAgICAgICAgICV1XG4iCisiUHJpbWVyIGJsb2MgZGVsIHJlZy4gZGUgY2FudmlzOiAgICAgICAldVxuIgorIlNlccO8w6huY2lhIGRlbCByZWcuIGRlIGNhbnZpczogICAgICAgICAweCUwOHhcbiIKKyJJbmljaSBkZWwgcmVnaXN0cmUgZGUgY2FudmlzOiAgICAgICAgICV1XG4iCisiTm9tYnJlIGQndXN1YXJpcyBkZWwgcmVnLiBkZSBjYW52aXM6ICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiVXN1YXJpcyBkZWwgcmVnaXN0cmUgZGUgY2FudmlzOiAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQyIG1pc2MvbWtlMmZzLmM6NjY2IG1pc2MvdHVuZTJmcy5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGEgYW5hbGl0emFyIGxlcyBvcGNpb25zXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6BtZXRyZSBkZWwgc3VwZXJibG9jIG5vIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcsOgbWV0cmUgZGUgbWlkYSBkZSBibG9jIG5vIHbDoGxpZGE6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1NCBtaXNjL21rZTJmcy5jOjE1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdEVuIHV0aWxpdHphciAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTkwIG1pc2MvZTJpbWFnZS5jOjEzMjYgbWlzYy90dW5lMmZzLmM6MTkyMworIzogcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIk5vIHMnaGEgdHJvYmF0IHVuIHPDunBlcmJsb2MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyB2w6BsaWQuXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbHMgbWFwZXMgZGUgYml0czogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6OTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJzSVFhXSBkZXZpY2UgaW1hZ2VfZmlsZVxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogJXMgWy1yc0ldIGRpc3Bvc2l0aXUgZml0eGVyX2ltYXRnZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQ0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgc3VwZXJibG9jIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODIKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJlbiBlc2NyaXVyZSBsYSB0YXVsYSBkZSBub2Rlcy1pIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODkKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgbWFwYSBkZSBiaXRzIGRlbHMgYmxvY3MiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJlbiBlc2NyaXVyZSBlbCBtYXBhIGRlIGJpdHMgZGVscyBub2Rlcy1pIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBubyBlcyBwb3Qgb2JyaXIgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBubyBlcyBwb3QgYW5hciBhbCBzw7pwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGxsZWdpciBlbCBzw7pwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogYXF1ZXN0IG5vIMOpcyB1biBzaXN0ZW1hIGRlIGZpdHhlcnMgZXh0MlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJBdsOtczogbCdldGlxdWV0YSDDqXMgbWFzc2EgbGxhcmdhLCBlcyB0cnVuY2Fyw6AuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IG5vIGVzIHBvdCB0b3JuYXIgYSBhbmFyIGFsIHPDunBlcmJsb2NcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmxlOiBzJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGVsIHN1cGVyYmxvY1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiBlMmxhYmVsIGRpc3Bvc2l0aXUgW2V0aXF1ZXRhbm92YV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogJXMgPGZpdHhlciBkZSB0cmFuc2FjY2lvbnM+IDxzaXN0ZW1hIGRlIGZpdHhlcnM+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTm8gcydoYW4gcG9ndXQgbGxlZ2lyIGxlcyBkYWRlcyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJIYSBmYWxsYXQgbGEgdGRiX2ZldGNoICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIkwnaG9yYSBkZSBtdW50YXRnZSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIGNvbmNvcmRhIGFtYiAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJMJ1VVSUQgZGVsIHNpc3RlbWEgZGUgZml0eGVycyBubyBjb25jb3JkYSBcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIkhhIGZhbGxhdCBsYSB0ZGJfb3BlbiAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZGV0ZXJtaW5hciBzaSAlcyBlc3TDoCBtdW50YXQuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiZTJ1bmRvIG5vbcOpcyBzJ2hhdXJpYSBkJ2V4ZWN1dGFyIGVuIHVuIHNpc3RlbWEgZGUgZml0eGVycyBzZW5zZSBtdW50YXJcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJTJ2hhIHRvcm5hdCBhIGR1ciBhIHRlcm1lIGxhIHRyYW5zYWNjacOzIGRlIG1pZGEgJXpkIGEgbGEgdWJpY2FjacOzICVsZFxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiSGEgZmFsbGF0IGwnZXNjcmlwdHVyYSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiQVbDjVM6IG5vIHMnaGEgcG9ndXQgb2JyaXIgJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiQVbDjVM6IGZvcm1hdCBlcnJvbmkgYSBsYSBsw61uaWEgJWQgZGUgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiXGFcYVxhQVbDjVM6IEVsIGZpdHhlciAvZXRjL2ZzdGFiIG5vIGNvbnTDqSBlbCBjYW1wIHBhc3NubyBkZSBsJ2ZzY2suXG4iCisiXHRTJ2ludGVudGFyw6AgYXJlZ2xhci1obyB0ZW1wb3JhbG1lbnQsIHBlcsOyIGhvIGhhdXLDrWV1IGRlXG4iCisiXHRzb2x1Y2lvbmFyIGFycmVnbGFudCBlbCBmaXR4ZXIgL2V0Yy9mc3RhYiBjb20gbcOpcyBhdmlhdCBtaWxsb3IuXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBubyBzJ2hhIHRyb2JhdFxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDogbm8gaGkgaGEgY2FwIG3DqXMgcHJvY8OpcyBmaWxsIT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIkF2w61zLi4uICVzIHBlciBhbCBkaXNwb3NpdGl1ICVzIGhhIHNvcnRpdCBhbWIgZWwgc2VueWFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IGwnZXN0YXQgw6lzICV4LCBjb3NhIHF1ZSBubyBoYXVyaWEgZGUgc3VjY2VpciBtYWkuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiUydoYSBmaW5hbGl0emF0IGFtYiAlcyAoZXN0YXQgZGUgc29ydGlkYSAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6IHMnaGEgcHJvZHXDr3QgbCdlcnJvciAlZCBlbiBleGVjdXRhciBsJ2ZzY2suJXMgcGVyIGEgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJPIGLDqSB0b3RzIG8gY2FwIGRlbHMgc2lzdGVtZXMgZGUgZml0eGVycyBwYXNzYXRzIGEgbCdvcGNpw7MgLXQgcydoYW4gZGUgcHJlZml4YXJcbiIKKyJhbWIgwqtub8K7IG8gwqshwrsuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbcOycmlhIHBlciBhbCBzaXN0ZW1hIGRlIGZpdHhlcnNcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgbnVtYmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogbm8gZXMgcG90IGNvbXByb3ZhciAlczogbm8gcydoYSB0cm9iYXQgZWwgZnNjay4lc1xuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICJTJ2VzdGFuIGNvbXByb3ZhbnQgdG90cyBlbHMgc2lzdGVtZXMgZGUgZml0eGVycy5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1lbiBlc3BlcmEtLSAocGFzICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIkZvcm1hIGQnw7pzOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgdGlwdXNkZXNpc3RkZWZpdHhlcnNdIFtvcGNpb25zLWRlbHNpc3RkZWZpdHhlcnNdIFtzaXN0ZGVmaXR4ZXJzIC4uLl1cbiIKKworIzogbWlzYy9mc2NrLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgZGV2aWNlc1xuIgorbXNnc3RyICIlczogcydoYW4gZXNwZWNpZmljYXQgbWFzc2EgZGlzcG9zaXRpdXNcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHMnaGFuIGVzcGVjaWZpY2F0IG1hc3NhIGFyZ3VtZW50c1xuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogJXMgWy1SVmFkbHZdIFtmaXR4ZXJzLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIkVuIGxsZWdpciBlbHMgc2VueWFsYWRvcnMgYSAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIkVuIGxsZWdpciBsYSB2ZXJzacOzIGEgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtY291bnRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJTJ2VzdMOgIGV4ZWN1dGFudCBsJ29yZHJlOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgImVuIGludGVudGFyIGV4ZWN1dGFyIMKrJXPCuyIKKworIzogbWlzYy9ta2UyZnMuYzoyMzIKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgImVuIHByb2Nlc3NhciBsYSBsbGlzdGEgZGUgYmxvY3MgZXJyb25pcyBkZXMgZGVsIHByb2dyYW1hIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJFbHMgYmxvY3MgJXUgZmlucyBhICV1IGhhbiBkJ8Opc3NlciBjb3JyZWN0ZXMgcGVyIGEgcG9kZXIgY3JlYXIgdW4gc2lzdGVtYSBkZSBmaXR4ZXJzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIGludGVycm9tcGVudC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdsOtczogZWwgc8O6cGVyYmxvYyBvIGRlc2NyaXB0b3JzIGRlIGdydXAgZGUgY8OycGlhIGRlIHNlZ3VyZXRhdCBhbCBibG9jICV1XG4iCisiXHRjb250ZW5lbiBibG9jcyBlcnJvbmlzLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMwMworbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJlbiBtYXJjYXIgZWxzIGJsb2NzIGVycm9uaXMgY29tIGEgdXRpbGl0emF0cyIKKworIzogbWlzYy9ta2UyZnMuYzozMjAKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJFc2NyaXB0dXJhIGRlIGxlcyB0YXVsZXMgZGUgbm9kZXMtaToiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzQxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiTm8gcydoYW4gcG9ndXQgZXNjcml1cmUgJWQgYmxvY3MgYSBsYSB0YXVsYSBkZSBub2Rlcy1pIGFtYiBpbmljaSBhICV1OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjM1NSBtaXNjL21rZTJmcy5jOjIyNTcgbWlzYy9ta2UyZnMuYzoyNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImZldCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNjYKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAiZW4gY3JlYXIgZWwgZGlyZWN0b3JpIGFycmVsIgorCisjOiBtaXNjL21rZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiZW4gbGxlZ2lyIGVsIG5vZGUgYXJyZWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiZW4gZXN0YWJsaXIgbGEgcHJvcGlldGF0IGRlbCBub2RlLWkgYXJyZWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAzCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImVuIGNyZWFyIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgImVuIGNlcmNhciBlbCAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MjMKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImVuIGV4cGFuZGlyIGVsIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJlbiBlc3RhYmxpciBlbCBub2RlLWkgZGUgYmxvY3MgZXJyb25pcyIKKworIzogbWlzYy9ta2UyZnMuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiUydoYSBleGhhdXJpdCBsYSBtZW3DsnJpYSBlbiBlc2JvcnJhciBlbHMgc2VjdG9ycyAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJBdsOtczogbm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgYmxvYyAwOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICJBdsOtczogbm8gcydoYSBwb2d1dCBlc2JvcnJhciBlbCBzZWN0b3IgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA3Cittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZW4gaW5pY2lhbGl0emFyIGVsIHPDunBlcmJsb2MgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyIKKworIzogbWlzYy9ta2UyZnMuYzo1MTUKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIlMnZXN0YW4gZXNjcml2aW50IHplcm9zIGFsIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zOiIKKworIzogbWlzYy9ta2UyZnMuYzo1MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAiZW4gZXNjcml1cmUgemVyb3MgYWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgKGJsb2MgJXUsIHJlY29tcHRlICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo1NDUKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgc8O6cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL21rZTJmcy5jOjU2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImF2w61zOiAldSBibG9jcyBubyB1dGlsaXR6YXRzLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkV0aXF1ZXRhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnM9JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlRpcHVzIGRlIHNpc3RlbWEgb3BlcmF0aXU6ICIKKworIyBGSVhNRTogbG9nCisjOiBtaXNjL21rZTJmcy5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIk1pZGEgZGVsIGJsb2M9JXUgKGxvZz0ldSlcbiIKKworIyBGSVhNRTogbG9nCisjOiBtaXNjL21rZTJmcy5jOjU3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIk1pZGEgZGVsIGJsb2M9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJNaWRhIGRlbCBmcmFnbWVudD0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgbm9kZXMtaSwgJXUgYmxvY3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJXUgYmxvY3MgKCUyLjJmJSUpIHJlc2VydmF0cyBwZXIgYWwgc3VwZXJ1c3VhcmlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJCbG9jIGRlIGRhZGVzIGluaWNpYWw9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJNw6B4aW0gZGUgYmxvY3MgZGVsIHNpc3RlbWEgZGUgZml0eGVycz0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGdydXBzIGRlIGJsb2NzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGdydXAgZGUgYmxvY3NcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9jcyBwZXIgZ3J1cCwgJXUgZnJhZ21lbnRzIHBlciBncnVwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY3MgcGVyIGdydXAsICV1IGZyYWdtZW50cyBwZXIgZ3J1cFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IG5vZGVzLWkgcGVyIGdydXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiQ8OycGllcyBkZSBzZWd1cmV0YXQgZGVsIHN1cGVyYmxvYyBkZXNhZGVzIGVuIGVscyBibG9jczogIgorCisjOiBtaXNjL21rZTJmcy5jOjY5MSBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgImVsIHBhdHLDs19kZV9wcm92YSBubyDDqXMgdsOgbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6BtZXRyZSBkZSBjYW52aSBkZSBtaWRhIG5vIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIkVsIG3DoHhpbSBkZWwgY2FudmkgZGUgbWlkYSBoYSBkZSBzZXIgbcOpcyBncmFuIHF1ZSBsYSBtaWRhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiRWwgY2FudmkgZGUgbWlkYSBlbiBsw61uaWEgbm8gw6lzIGNvbXBhdGlibGUgYW1iIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgcmV2aXNpw7MgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgwMSBtaXNjL21rZTJmcy5jOjgxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgIlMnaGEgZXN0YWJsZXJ0IHVuYSBvcGNpw7MgZGUgbXVudGF0Z2Ugbm8gdsOgbGlkYTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyw6BtZXRyZSBkZWwgc3VwZXJibG9jIG5vIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJFcnJvciBkZSBzaW50YXhpIGVuIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBta2UyZnMgKCVzLCBsw61uaWEgbm8uICVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJTJ2hhIGRlZmluaXQgdW5hIG9wY2nDsyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIHbDoGxpZGE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTMyIG1pc2MvdHVuZTJmcy5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIlMnaGEgZXN0YWJsZXJ0IHVuYSBvcGNpw7MgZGUgbXVudGF0Z2Ugbm8gdsOgbGlkYTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiQXbDrXM6IG5vIHMnaGEgZGVmaW5pdCBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgJXMgYWwgZml0eGVyIG1rZTJmcy5jb25mLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2VndXJhbWVudCBjYWwgcXVlIGluc3RhbMK3bGV1IHVuIGZpdHhlciBta2UyZnMuY29uZiBhY3R1YWxpdHphdC5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIGludGVycm9tcGVudC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbcOycmlhIHBlciBhbCBzaXN0ZW1hIGRlIGZpdHhlcnNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAibWlkYSBkZSBibG9jIGludsOgbGlkYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICJBdsOtczogbGEgbWlkYSBkZSBibG9jICVkIG5vIGVzIHBvdCB1dGlsaXR6YXIgYSBsYSBtYWpvcmlhIGRlbHMgc2lzdGVtZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAibWlkYSBkZSBibG9jIGludsOgbGlkYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODcKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzk5Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk5vbWJyZSBubyB2w6BsaWQgcGVyIGFscyBibG9jcyBwZXIgZ3J1cCIKKworIzogbWlzYy9ta2UyZnMuYzoxNDA0Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImVsIG5vbWJyZSBkZSBibG9jcyBwZXIgZ3J1cCBoYSBkZSBzZXIgbcO6bHRpcGxlIGRlIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxMgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk7Dum1lcm8gbm8gdsOgbGlkIHBlciBhIGxhIG1pZGEgZGUgZmxleF9iZyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE4Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJsYSBtaWRhIGRlIGZsZXhfYmcgaGEgZGUgc2VyIHVuYSBwb3TDqG5jaWEgZGUgMiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJyw6B0aW8gZGUgbm9kZXMtaSAlcyBubyB2w6BsaWRhIChtw61uICVkL23DoHggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm1pZGEgZGUgbm9kZS1pIGVycsOybmlhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgbm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NjAKK21zZ2lkICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDczCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAicGVyY2VudGF0Z2UgZGUgYmxvY3MgcmVzZXJ2YXRzIG5vIHbDoGxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlIG5vZGVzLWkgbm8gdsOgbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAibml2ZWxsIGRlIHJldmlzacOzIGVycm9uaSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MTkKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIi1vIG5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW5hIHZlZ2FkYSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBub23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuYSB2ZWdhZGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MCBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgZWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJMYSBtaWRhIGRlIGJsb2MgZGVsIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zICglZCkgw6lzIG1lbm9yIHF1ZSBsYSBtaWRhIG3DrW5pbWEgZGUgYmxvYyAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIk1pZGEgZGUgYmxvYyBkZWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYSB1dGlsaXR6YXI6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAibm9tYnJlIGRlIGJsb2NzIG5vIHbDoGxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTMKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNiByZXNpemUvbWFpbi5jOjM2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJlbiBpbnRlbnRhciBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjMyCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGRldGVybWluYXIgbGEgbWlkYSBkZWwgZGlzcG9zaXRpdTsgaGF1IGQnZXNwZWNpZmljYXJcbiIKKyJsYSBtaWRhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM5Cittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyJMYSBtaWRhIGRlbCBkaXNwb3NpdGl1IHMnaGEgbGxlZ2l0IGNvbSBhIHplcm8uIE8gYsOpIGhldSBlc3BlY2lmaWNhdCB1bmFcbiIKKyJcdHBhcnRpY2nDsyBubyB2w6BsaWRhLCBvIGLDqSBsYSB0YXVsYSBkZSBwYXJ0aWNpb25zIG5vIHMnaGEgdG9ybmF0IGEgbGxlZ2lyXG4iCisiXHRkZXNwcsOpcyBkJ2V4ZWN1dGFyIGwnZmRpc2sgZGVndXQgYSB1bmEgcGFydGljacOzIG9jdXBhZGEgaSBlbiDDunMuIFBvdFxuIgorIlx0c2VyIHF1ZSBow6BnaXUgZGUgcmVpbmljaWFyIHBlcnF1w6ggZXMgcHVndWkgdG9ybmFyIGEgbGxlZ2lyIGxhIHRhdWxhIGRlLlxuIgorIlx0cGFydGljaW9ucy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjU2Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkxhIG1pZGEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDDqXMgbcOpcyBncmFuIHF1ZSBsYSBtaWRhIGFwYXJlbnQgZGVsIGRpc3Bvc2l0aXUuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgbGxpc3RhIGRlIHNpc3RlbWVzIGRlIGZpdHhlcnNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBsYSBtaWRhIGRlbCBkaXNwb3NpdGl1ICVzIMOpcyBtYXNzYSBncmFuIHBlciBhIGV4cHJlc3Nhci1sYSBlbiAzMiBiaXRzXG4iCisiXHRzJ3V0aWxpdHphcsOgIHVuYSBtaWRhIGRlIGJsb2MgZGUgJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc0NgorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiTGVzIGZ1bmNpb25zIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm8gc8OzbiBjb21wYXRpYmxlcyBhbWIgc2lzdGVtZXMgZGUgZml0eGVycyBkZSByZXZpc2nDsyAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiRWxzIHPDunBlcmJsb2NzIGRpc3BlcnNvcyBubyBzw7NuIGNvbXBhdGlibGVzIGFtYiBzaXN0ZW1lcyBkZSBmaXR4ZXJzIGRlIHJldmlzacOzIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkVscyByZWdpc3RyZXMgZGUgY2FudmlzIG5vIHPDs24gY29tcGF0aWJsZXMgYW1iIHNpc3RlbWVzIGRlIGZpdHhlcnMgZGUgcmV2aXNpw7MgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInBlcmNlbnRhdGdlIGRlIGJsb2NzIHJlc2VydmF0cyBubyB2w6BsaWQgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiTGVzIGZ1bmNpb25zIHJlc2l6ZV9pbm9kZSBpIG1ldGFfYmcgbm8gc8OzbiBjb21wYXRpYmxlcy5cbiIKKyJObyBlcyBwb2RlbiBhY3RpdmFyIGRlIG1hbmVyYSBzaW11bHTDoG5pYS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODE5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiZW4gaW50ZW50YXIgZGV0ZXJtaW5hciBsYSBtaWRhIGRlbCBzZWN0b3IgZGVsIG1hcXVpbmFyaSIKKworIzogbWlzYy9ta2UyZnMuYzoxODI1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgImVuIGludGVudGFyIGRldGVybWluYXIgbGEgbWlkYSBkZWwgc2VjdG9yIGRlbCBtYXF1aW5hcmkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg1OAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiZW4gZXN0YWJsaXIgbGEgaW5mb3JtYWNpw7MgZGUgc3VtYSBkZSB2ZXJpZmljYWNpw7MgZGVsIGdydXAgZGUgYmxvY3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MQorIywgZnV6enkKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICJFbCBtw6B4aW0gZGVsIGNhbnZpIGRlIG1pZGEgaGEgZGUgc2VyIG3DqXMgZ3JhbiBxdWUgbGEgbWlkYSBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODcKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk2OAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTgyIG1pc2MvdHVuZTJmcy5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIHF1b3RhIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTMKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMDIKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiZWwgbm9tYnJlIGRlIGJsb2NzIHBlciBncnVwIGVzdMOgIGZvcmEgZGUgbCdpbnRlcnZhbCBwZXJtw6hzIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMjYKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiTGEgZnVuY2nDsyBmbGV4X2JnIG5vIGVzdMOgIGhhYmlsaXRhZGEsIHBlciBsYSBxdWFsIGNvc2Egbm8gw6lzIHBlcm3DqHMgZXNwZWNpZmljYXIgbGEgbWlkYSBkZSBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAibWlkYSBkZSBub2RlLWkgbm8gdsOgbGlkYSAoJWQpIChtw61uICVkL23DoHggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJoaSBoYSBtYXNzYSBub2Rlcy1pICglbGx1KSwgdm9sZXUgaW5jcmVtZW50YXItbmUgbGEgcsOgdGlvPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAiaGkgaGEgbWFzc2Egbm9kZXMtaSAoJWxsdSksIGhhdXLDrWV1IGQnZXNwZWNpZmljYXItbmUgdW4gbm9tYnJlIG1lbm9yIGEgMl4zMiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisiRWwgcHJvZHVjdGUgaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgw6lzIG1hc3NhIGdyYW4gcGVyIGFcbiIKKyJcdHVuIHNpc3RlbWEgZGUgZml0eGVycyBhbWIgJWx1IGJsb2NzLiBFc3BlY2lmaXF1ZXUgdW5hIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG1ham9yIG8gYsOpIHVuIG5vbWJyZSBtZW5vciBkZSBub2Rlcy1pICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlMnZXN0w6Agc29icmVlc2NyaXZpbnQgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGV4aXN0ZW50OyBsYSBxdWFsIGNvc2EgZXMgcG90IGRlc2ZlciBzaSBlc2NyaXZpdTpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxMAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdGVuIGludGVudGFyIGNyZWFyIGVsIGZpdHhlciBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMzYKKyMsIGZ1enp5Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIk1pZGEgZGUgYmxvYyBkZWwgZGlzcG9zaXRpdSBkZSByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYSB1dGlsaXR6YXI6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIzNjAKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgImVuIGNvbmZpZ3VyYXIgZWwgc8O6cGVyYmxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAic2lzdGVtYSBvcGVyYXRpdSBkZXNjb25lZ3V0IC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiRXNjcmlwdHVyYSBkZSBsZXMgdGF1bGVzIGRlIG5vZGVzLWk6IgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgImVuIGludGVudGFyIGFzc2lnbmFyIGxlcyB0YXVsZXMgZGVsIHNpc3RlbWEgZGUgZml0eGVycyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTE3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgImVuIGVzY3JpdXJlIGVsIG1hcGEgZGUgYml0cyBkZWxzIGJsb2NzIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiZW4gZXNjcml1cmUgemVyb3MgYWwgYmxvYyAldSBhbCBmaW5hbCBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NzMKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJlbiByZXNlcnZhciBibG9jcyBwZXIgYWwgY2FudmkgZGUgbWlkYSBlbiBsw61uaWEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4NCBtaXNjL3R1bmUyZnMuYzo2NDUKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJyZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiQWRkaWNpw7MgZCd1biByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYWwgZGlzcG9zaXRpdSAlczoiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiXHRlbiBpbnRlbnRhciBhZmVnaXIgdW4gcmVnaXN0cmUgZGUgY2FudmlzIGFsIGRpc3Bvc2l0aXUgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwOCBtaXNjL21rZTJmcy5jOjI2NDAgbWlzYy90dW5lMmZzLmM6Njc0IG1pc2MvdHVuZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImZldFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhY2nDsyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zICgldSBibG9jcyk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjM2Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRlbiBpbnRlbnRhciBjcmVhciBlbCByZWdpc3RyZSBkZSBjYW52aXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY0NyBtaXNjL3R1bmUyZnMuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiRXNjcmlwdHVyYSBkZSBsYSBpbmZvcm1hY2nDsyBkZWxzIHPDunBlcmJsb2NzIGkgZGUgY29tcHRhYmlsaXRhdCBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzOiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJBdsOtczogaGkgaGEgaGFndXQgcHJvYmxlbWVzIGVuIGVzY3JpdXJlIGVscyBzw7pwZXJibG9jcy4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisiZmV0XG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiRm9ybWEgZCfDunM6ICAlcyBkaXNwb3NpdGl1Li4uXG4iCisiXG4iCisiTW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIHBhcnRpY2lvbmFtZW50IHBlciBhIGNhZGEgZGlzcG9zaXRpdSBlc3BlY2lmaWNhdC5cbiIKKyJQZXIgZXhlbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IG9icmlyICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJObyBlcyBwb3Qgb2J0ZW5pciBsYSBnZW9tZXRyaWEgZGUgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IG9idGVuaXIgbGEgbWlkYSBkZSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgaW5pY2k9JThkIG1pZGE9JThsdSBmaW5hbD0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3Cittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkhhdXLDrWV1IGQnZXhlY3V0YXIgbCdlMmZzY2sgZW4gZWwgc2lzdGVtYSBkZSBmaXR4ZXJzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJlbiBpbnRlbnRhciBvYnJpciBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgZXh0ZXJuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgc8O6cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgbCdVVUlEIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZW4gZWwgZGlzcG9zaXRpdSBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjkKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiUydoYSBzdXByaW1pdCBlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEzCittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJlbiBsbGVnaXIgZWxzIG1hcGVzIGRlIGJpdHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyMQorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImVuIG5ldGVqYXIgZWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMzMgorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiZW4gZXNjcml1cmUgYWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKGkgcmVpbmljaWV1IGRlc3Byw6lzKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiTGEgZnVuY2nDsyBkZSBuZXRlamEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDCqyVzwrsgbm8gZXN0w6AgaW1wbGVtZW50YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJMJ2VzdGFibGltZW50IGRlIGxhIGZ1bmNpw7MgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDCqyVzwrsgbm8gZXN0w6AgaW1wbGVtZW50YWRhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZnVuY2nDsyBoYXNfam91cm5hbCBub23DqXMgZXMgcG90IGVzYm9ycmFyIHNpIGVsIHNpc3RlbWEgZGUgZml0eGVycyBub1xuIgorImVzdMOgIG11bnRhdCwgbyBiw6kgZXN0w6AgbXVudGF0IGVuIG1vZGUgZGUgbm9tw6lzIGxlY3R1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQyNAorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkVsIHNlbnlhbGFkb3IgbmVlZHNfcmVjb3ZlcnkgZXN0w6AgZXN0YWJsZXJ0LiBIYXVyw61ldSBkJ2V4ZWN1dGFyIGwnZTJmc2NrXG4iCisiYWJhbnMgZGUgbmV0ZWphciBlbCBzZW55YWxhZG9yIGhhc19qb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NDMKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGZ1bmNpw7MgaHVnZV9maWxlIG5vbcOpcyBlcyBwb3QgZXNib3JyYXIgc2kgZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vXG4iCisiZXN0w6AgbXVudGF0LCBvIGLDqSBlc3TDoCBtdW50YXQgZW4gbW9kZSBkZSBub23DqXMgbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDcwCittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJlbiBsbGVnaXIgZWxzIG1hcGVzIGRlIGJpdHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0OTIKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJlbiBsbGVnaXIgZWwgbm9kZS1pIGRlbHMgYmxvY3MgZXJyb25pcyIKKworIzogbWlzYy90dW5lMmZzLmM6NTI0Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZnVuY2nDsyBodWdlX2ZpbGUgbm9tw6lzIGVzIHBvdCBlc2JvcnJhciBzaSBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm9cbiIKKyJlc3TDoCBtdW50YXQsIG8gYsOpIGVzdMOgIG11bnRhdCBlbiBtb2RlIGRlIG5vbcOpcyBsZWN0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1OTUKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY0MAorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGphIHTDqSB1biByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdGVuIGludGVudGFyIG9icmlyIGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9ucyBhICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICJDcmVhY2nDsyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGFsIGRpc3Bvc2l0aXUgJXM6IgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAiZW4gYWZlZ2lyIHVuIHNpc3RlbWEgZGUgZml0eGVycyBhbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMgYSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6Njc2Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICJDcmVhY2nDsyBkZWwgbm9kZS1pIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnM6IgorCisjOiBtaXNjL3R1bmUyZnMuYzo2ODUKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0ZW4gaW50ZW50YXIgY3JlYXIgZWwgZml0eGVyIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBtZW3DsnJpYSBwZXIgYSBhbmFsaXR6YXIgbGVzIG9wY2lvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCBjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGwnZXNwZWNpZmljYWRvciBkZSBkYXRhL2hvcmE6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlIG11bnRhdGdlcyBlcnJvbmkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJjb21wb3J0YW1lbnQgZCdlcnJvciBlcnJvbmkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJub20gZGUgZ3J1cC9naWQgZXJyb25pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiaW50ZXJ2YWwgZXJyb25pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAicsOgdGlvIGRlIGJsb2NzIHJlc2VydmF0cyBlcnLDsm5pYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDAzCittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIG5vbcOpcyBlcyBwb3QgZXNwZWNpZmljYXIgdW5hIHZlZ2FkYSIKKworIzogbWlzYy90dW5lMmZzLmM6MTAxMgorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyBub23DqXMgZXMgcG90IGVzcGVjaWZpY2FyIHVuYSB2ZWdhZGEiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJuw7ptZXJvIGRlIGJsb2NzIHJlc2VydmF0cyBlcnJvbmkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJub20gZCd1c3VhcmkvdWlkIGVycm9uaSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDczCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm1pZGEgZGVsIG5vZGUtaSBlcnLDsm5pYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIkxhIG1pZGEgZGVsIG5vZGUtaSBoYSBkZSBzZXIgdW5hIHBvdMOobmNpYSBkZSAyIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJFc3RhYmxpbWVudCBkZWwgbm9tYnJlIG3DoHhpbSBkZSBtdW50YXRnZXMgYSAlZFxuIgorbXNnc3RyWzFdICJFc3RhYmxpbWVudCBkZWwgbm9tYnJlIG3DoHhpbSBkZSBtdW50YXRnZXMgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiQWxnb3Jpc21lIGRlIHJlc3VtIG5vIHbDoGxpZDogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJFc3RhYmxpbWVudCBkZSBsJ2FsZ29yaXNtZSBkZSByZXN1bSBwcmVkZXRlcm1pbmF0IGEgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzIzCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICJlbiBsbGVnaXIgZWxzIG1hcGVzIGRlIGJpdHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgImVuIGVzY3JpdXJlIGVsIG1hcGEgZGUgYml0cyBkZWxzIGJsb2NzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2NzIGEgbW91cmUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU5CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiZW4gcmVzZXJ2YXIgYmxvY3MgcGVyIGFsIGNhbnZpIGRlIG1pZGEgZW4gbMOtbmlhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzkxCittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNhbnZpYXIgbGEgbWlkYSBkZWwgbm9kZS1pLlxuIgorIkV4ZWN1dGV1IGwnZTJ1bmRvIHBlciBhIGRlc2ZlciBlbHMgY2FudmlzIGFsIHNpc3RlbWEgZGUgZml0eGVycy4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MTgKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhc3NpZ25hciBtZW3DsnJpYSBwZXIgYWwgc2lzdGVtYSBkZSBmaXR4ZXJzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgc3VwcmltaXIgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2kgdm9sZXUgZGVzZmVyIGxlcyBvcGVyYWNpb25zIGRlbCB0dW5lMmZzIGV4ZWN1dGV1IGwnb3JkcmVcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIkxhIG1pZGEgZGVsIG5vZGUtaSBqYSDDqXMgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJTaHJpbmtpbmcgdGhlIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICJMYSByZWR1Y2Npw7MgZGUgbGEgbWlkYSBkZWwgbm9kZS1pIG5vIGVzdMOgIGltcGxlbWVudGFkYVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIm1pZGEgZGUgbm9kZS1pIG5vIHbDoGxpZGEgKCVkKSAobcOtbiAlZC9tw6B4ICVkKSIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGVsIG5vbWJyZSBtw6B4aW0gZGUgbXVudGF0Z2VzIGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGVsIG5vbWJyZSBkZSBtdW50YXRnZXMgYWN0dWFsIGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlbCBjb21wb3J0YW1lbnQgZCdlcnJvciBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJFc3RhYmxpbWVudCBkZWwgR0lEIGRlbHMgYmxvY3MgcmVzZXJ2YXRzIGEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkVzdGFibGltZW50IGRlIGwnaW50ZXJ2YWwgZW50cmUgY29tcHJvdmFjaW9ucyBhICVsdSBzZWdvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlIGwnaW50ZXJ2YWwgZW50cmUgY29tcHJvdmFjaW9ucyBhICVsdSBzZWdvbnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGVsIG5vbWJyZSBkZSBibG9jcyByZXNlcnZhdHMgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJlbCBub21icmUgZGUgYmxvY3MgcmVzZXJ2YXRzIMOpcyBtYXNzYSBncmFuICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlbCBub21icmUgZGUgYmxvY3MgcmVzZXJ2YXRzIGEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTAKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgc2l0ZW1hIGRlIGZpdHhlcnMgamEgdMOpIHPDunBlcmJsb2NzIGRpc3BlcnNvcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlMnaGEgZXN0YWJsZXJ0IGVsIHNlbnlhbGFkb3IgZGUgc8O6cGVyYmxvYyBkaXNwZXJzLiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MjA2MgorbXNnaWQgIiIKKyJcbiIKKyJDbGVhcmluZyB0aGUgc3BhcnNlIHN1cGVyZmxhZyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgbmV0ZWphIGRlbCBzZW55YWxhZG9yIGRlIHPDunBlcmJsb2MgZGlzcGVycyBubyBlc3TDoCBpbXBsZW1lbnRhZGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlIGxhIGRhcnJlcmEgY29tcHJvdmFjacOzIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiRXN0YWJsaW1lbnQgZGUgbCdVSUQgZGVscyBibG9jcyByZXNlcnZhdHMgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwOAorbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTI2CisjLCBmdXp6eQorbXNnaWQgIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIkxhIG1pZGEgZGVsIG5vZGUtaSBub23DqXMgZXMgcG90IGNhbnZpYXIgcXVhbiBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXN0w6AgZGVzbXVudGF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU5Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJFbCBmb3JtYXQgZGUgbCdVVUlEIG5vIMOpcyB2w6BsaWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3MgorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIkxhIG1pZGEgZGVsIG5vZGUtaSBub23DqXMgZXMgcG90IGNhbnZpYXIgcXVhbiBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMgZXN0w6AgZGVzbXVudGF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgwCittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlIGxhIG1pZGEgZGUgbm9kZS1pIGEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIkVzdGFibGltZW50IGRlbCBub21icmUgZGUgbXVudGF0Z2VzIGFjdHVhbCBhICVkXG4iCisKKyM6IG1pc2MvdXRpbC5jOjc0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiVm9sZXUgY29udGludWFyIGRlIHRvdGVzIG1hbmVyZXM/IChzLG4pIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmZXIgYWwgY3JpZGEgc3RhdCAlcyAtLSVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjkyCittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJsYSBxdWUgZWwgZGlzcG9zaXRpdSBubyBleGlzdGVpeC4gQXNzZWd1cmV1LXZvcyBxdWUgbCdoZXUgZXNwZWNpZmljYXQgY29ycmVjdGFtZW50XG4iCisKKyM6IG1pc2MvdXRpbC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAiZWwgJXMgbm8gw6lzIHVuIGRpc3Bvc2l0aXUgZXNwZWNpYWwgZGUgYmxvY3MuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyDDqXMgZWwgZGlzcG9zaXRpdSBjb21wbGV0LCBubyBwYXMgbm9tw6lzIHVuYSBwYXJ0aWNpw7NcbiIKKworIzogbWlzYy91dGlsLmM6MTU0Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgInMnaGEgZm9yw6dhdCBlbCBta2UyZnMgZGUgdG90ZXMgbWFuZXJlcy4gQW1iIHVuYSBtaWNhIGRlIHNvcnQgZWwgZml0eGVyIC9ldGMvbXRhYiDDqXMgaW5jb3JyZWN0ZS5cbiIKKworIzogbWlzYy91dGlsLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJubyBlcyBmYXLDoCB1biAlcyBhcXXDrVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNjYKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAicydoYSBmb3LDp2F0IGVsIG1rZTJmcyBkZSB0b3RlcyBtYW5lcmVzLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxODIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHViaWNhdCBtZW3DsnJpYSBwZXIgYSBhbmFsaXR6YXIgbGVzIG9wY2lvbnMgZGVsIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICJObyBzJ2hhbiB0cm9iYXQgZWxzIG7Dum1lcm9zIG3DoGdpY3MgZGVsIHN1cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIgorCisjOiBtaXNjL3V0aWwuYzoyMjgKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI1OAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgw6lzIG1hc3NhIHBldGl0IHBlciBhIHVuIHJlZ2lzdHJlIGRlIHRyYW5zYWNjaW9uc1xuIgorCisjOiBtaXNjL3V0aWwuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgbWlkYSBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIMOpcyBtYXNzYSBncmFuIHBlciBhbCBzaXN0ZW1hIGRlIGZpdHhlcnMuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiBzJ2hhbiBlc3BlY2lmaWNhdCBtYXNzYSBhcmd1bWVudHNcbiIKKworIzogbWlzYy91dWlkZC5jOjE3MgorbXNnaWQgImNvbm5lY3QiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5MQorbXNnaWQgIndyaXRlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTkKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdlc3BlY2lmaWNhZG9yIGRlIGRhdGEvaG9yYTogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVjb25uZWN0YXIgJWk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCByZWNvbm5lY3RhciAlaTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjM1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBsbGVnaXIgZWwgQGkgJWk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiTGEgdmVyc2nDsyBkZWxzIGF0cmlidXRzIGFtcGxpYXRzIG5vIMOpcyB2w6BsaWRhLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc2IG1pc2MvdXVpZGQuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTMzIG1pc2MvdXVpZGQuYzo1NjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY3JlYXIgZWwgQGQgL0BsICglcyk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJGb3JtYSBkJ8O6czogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIEJvbGNhdCBkZSBsJ2V4dGVuc2nDszpcbiIKKworIyBGSVhNRTogwqtTb3J0ZWTCuyAoZHBtKQorIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdE7Dum09JWQsIE1pZGE9JWQsIEN1cnNvcj0lZCwgT3JkZW5hdD0lZFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZvcm1hIGQnw7pzOiAlcyBbLWQgc2VueWFsYWRvcnNfZGVfZGVwdXJhY2nDs10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRpc3Bvc2l0aXUgW21pZGEgbm92YV1cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkFtcGxpYWNpw7MgZGUgbGEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogcmVzaXplL21haW4uYzo2OAorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJSZXViaWNhY2nDsyBkZWxzIGJsb2NzIgorCisjOiByZXNpemUvbWFpbi5jOjcxCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkVzY2FuZWlnIGRlIGxhIHRhdWxhIGRlIG5vZGVzLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzQKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJBY3R1YWxpdHphY2nDsyBkZSBsZXMgcmVmZXLDqG5jaWVzIGRlbHMgbm9kZXMtaSIKKworIzogcmVzaXplL21haW4uYzo3NworbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVHJhc2xsYXQgZGUgbGEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiUGFzIGRlc2NvbmVndXQhPyIKKworIzogcmVzaXplL21haW4uYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkluaWNpIGRlbCBwYXMgJWQgKG3DoHggPSAlbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWRcbiIKKyJhdCB5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgImVuIG9icmlyICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJlb24gb2J0ZW5pciBsYSBpbmZvcm1hY2nDsyBkJ8Krc3RhdMK7IHBlciBhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjMzNyByZXNpemUvbWFpbi5jOjQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkV4ZWN1dGV1IMKrZTJmc2NrIC1mICVzwrsgcHJpbWVyLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJNaWRhIG3DrW5pbWEgZXN0aW1hZGEgZGVsIHNpc3RlbWEgZGUgZml0eGVyczogJXVcbiIKKworIzogcmVzaXplL21haW4uYzozNzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIm1pZGEgZGUgbm9kZS1pIGVycsOybmlhIC0gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkzCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJMYSBtaWRhIGRlIGJsb2MgZGVsIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zICglZCkgw6lzIG1lbm9yIHF1ZSBsYSBtaWRhIG3DrW5pbWEgZGUgYmxvYyAlZFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwNworbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHBhcnRpY2nDsyAobyBkaXNwb3NpdGl1KSBjb250ZW5pZG9yYSB0w6kgdW5hIG1pZGEgZGUgbm9tw6lzICV1ICglZGspIGJsb2NzLlxuIgorIk4naGV1IHJlcXVlcml0IHVuYSBtaWRhIG5vdmEgZGUgJXUgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1IGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVyIGphIHTDqSAldSBibG9jcy4gTm8gY2FsIGZlciByZXNcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGEgJXMgdMOpIGFyYSB1bmEgbWlkYSBkZSAldSBibG9jcy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlc2l6ZSAlcyIKK21zZ3N0ciAiZW4gaW50ZW50YXIgcmVkaW1lbnNpb25hciAlcyIKKworIzogcmVzaXplL21haW4uYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZml0eGVycyBhICVzIHTDqSBhcmEgdW5hIG1pZGEgZGUgJXUgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgImVuIGludGVudGFyIG1vc3RyYXIgbGEgaW5mb3JtYWNpw7MgZGUgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiRWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGEgJXMgZXN0w6AgbXVudGF0IGEgJXM7IGNhbCB1biBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYVxuIgorCisjOiByZXNpemUvb25saW5lLmM6ODMKKyMsIGZ1enp5Cittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTGEgcmVkdWNjacOzIGRlIG1pZGEgZW4gbMOtbmlhIGRlICV1IGEgJXUgbm8gw6lzIGNvbXBhdGlibGUuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMDgKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpdHhlcnMgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGVsIGNhbnZpIGRlIG1pZGEgZW4gbMOtbmlhIgorCisjOiByZXNpemUvb25saW5lLmM6MTE3CisjLCBmdXp6eQorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgImVuIHJlc2VydmFyIGJsb2NzIHBlciBhbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYSIKKworIzogcmVzaXplL29ubGluZS5jOjEyNAorIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIkVsIG51Y2xpIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYSIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJlbiBpbnRlbnRhciBvYnJpciBlbCBwdW50IGRlIG11bnRhdGdlICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTU2IHJlc2l6ZS9vbmxpbmUuYzoxNzMKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiUydoYSBkZW5lZ2F0IGVsIHBlcm3DrXMgcGVyIGEgY2FudmlhciBsYSBtaWRhIGRlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTkgcmVzaXplL29ubGluZS5jOjE3OQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIkVuIGNvbXByb3ZhciBsYSBjb21wYXRpYmlsaXRhdCBhbWIgZWwgY2FudmkgZGUgbWlkYSBlbiBsw61uaWEiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNzYKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkVsIG51Y2xpIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYSIKKworIzogcmVzaXplL29ubGluZS5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiQ2FudmkgZGUgbWlkYSBlbiBsw61uaWEgZGUgJXMgYSAldSAoJWRrKSBibG9jcy5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjIxOQorbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIkVuIGludGVudGFyIGFtcGxpYXIgZWwgZGFycmVyIGdydXAiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIkVuIGludGVudGFyIGFmZWdpciBlbCBncnVwICMlZCIKKworIzogcmVzaXplL29ubGluZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIkVsIHNpc3RlbWEgZGUgZml0eGVycyBhICVzIGVzdMOgIG11bnRhdCBhICVzLCBpIGFxdWVzdCBzaXN0ZW1hIG5vIMOpcyBjb21wYXRpYmxlIGFtYiBlbCBjYW52aSBkZSBtaWRhIGVuIGzDrW5pYS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJlbCBub21icmUgZGUgbm9kZXMtaSAoJWxsdSkgaGEgZGUgc2VyIG1lbm9yIHF1ZSAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjYzMQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgcmVzZXJ2YXRzIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6ODc1Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgZGUgbWV0YWRhZGVzIgorCisjIEZJWE1FOiAoZHBtKQorIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIkFpeMOyIG5vIGhhdXJpYSBkZSBwYXNzYXIgbWFpOiBjYW52aSBkZSBtaWRhIGRlbCBub2RlLWkgbWFsbWVzYVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuOCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorIywgZnV6enkKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJzJ2VzdMOgIGxsZWdpbnQgZWwgc8O6cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgZGVzY3JpcHRvcnMgZGUgZ3J1cCBhICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIsIGRlc2NyaXB0b3JzIGRlIGdydXAgYSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZW4gZXNjcml1cmUgZWwgbWFwYSBkZSBiaXRzIGRlbHMgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJlc2NyaXB0dXJhIGRlbHMgbWFwZXMgZGUgYml0cyBkZSBibG9jIGkgZGUgbm9kZS1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJlbiBlc2NyaXVyZSBlbCBtYXBhIGRlIGJpdHMgZGVscyBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJlbiBlc2NyaXVyZSBlbCBtYXBhIGRlIGJpdHMgZGVscyBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJlbiBlc2NyaXVyZSBsYSB0YXVsYSBkZSBub2Rlcy1pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRXNjYW5laWcgZGUgbGEgdGF1bGEgZGUgbm9kZXMtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIkxhIG1pZGEgZGVsIHNpc3RlbWEgZGUgZml0eGVycyDDqXMgbcOpcyBncmFuIHF1ZSBsYSBtaWRhIGFwYXJlbnQgZGVsIGRpc3Bvc2l0aXUuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCisjLCBmdXp6eQorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICIsIG1hcGEgZGUgYml0cyBkZWwgbm9kZS1pIGEgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiBNYXBhIGRlIGJpdHMgZGVsIGJsb2MgYSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiTm9tYnJlIGRlIGJsb2NzIGludsOgbGlkXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTm9tYnJlIGRlIGJsb2NzIGludsOgbGlkXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAicydlc3RhbiBsbGVnaW50IGVscyBibG9jcyBpbmRpcmVjdGVzIGRlbCBub2RlLWkgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAicydlc3RhbiBsbGVnaW50IGVscyBibG9jcyBpbmRpcmVjdGVzIGRlbCBub2RlLWkgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAicydlc3RhbiBsbGVnaW50IGVscyBibG9jcyBpbmRpcmVjdGVzIGRlbCBub2RlLWkgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiBNYXBhIGRlIGJpdHMgZGVsIGJsb2MgYSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiwgbWFwYSBkZSBiaXRzIGRlbCBub2RlLWkgYSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICIlcyB0w6kgZnVuY2lvbmFsaXRhdHMgbm8gaW1wbGVtZW50YWRlczoiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiJXMgdMOpIGZ1bmNpb25hbGl0YXRzIG5vIGltcGxlbWVudGFkZXM6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWVycm9yIGVuIGxhIHViaWNhY2nDsyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFzc2lnbmFyIG1lbcOycmlhIHBlciBhbCBzaXN0ZW1hIGRlIGZpdHhlcnNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXNzaWduYXIgbWVtw7JyaWEgcGVyIGFsIHNpc3RlbWEgZGUgZml0eGVyc1xuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5CisjLCBmdXp6eQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiRWwgYmxvYyBkZSBkaXJlY3RvcmkgJXUgKCMlZCkgZW4gZWwgbm9kZS1pICV1IMOpcyBidWl0XG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKKyMsIGZ1enp5Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJNaWRhIGRlIGJsb2MgZGVsIGRpc3Bvc2l0aXUgZGUgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGEgdXRpbGl0emFyOiAlZFxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgc8O6cGVyYmxvYyBkZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiZW4gaW50ZW50YXIgb2JyaXIgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zIGV4dGVybiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCBlbCBzw7pwZXJibG9jIGRlbCByZWdpc3RyZSBkZSB0cmFuc2FjY2lvbnNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJhYXRyaWJ1dCBhbXBsaWF0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0CisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICI8RWwgbm9kZS1pIGRlbCBkZXNjcmlwdG9yIGRlIGdydXA+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlBhcsOgbWV0cmUgZGUgY2FudmkgZGUgbWlkYSBubyB2w6BsaWQ6ICVzXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzEzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE2IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiIgorCisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXh0ZW50XyhmaWxlX3N5c3RlbXMpLiBIaSBoYSBsYSB1YmljYWNpw7MgYmFzYWRhIGVuIGJsb2NzIGkgbGEgdWJpY2FjacOzIGJhc2FkYSBlbiDCq2V4dGVudHPCuyAoZHBtKS4KKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAieGV4dGVuc2nDsyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCAvQGwuICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDYKK21zZ2lkICJJL08gQ2hhbm5lbCBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBibG9jayBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDcKK21zZ2lkICJDYW4ndCBjaGVjayBpZiBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgZHVlIHRvIG1pc3NpbmcgbXRhYiBmaWxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MgorbXNnaWQgIk1NUDogYmxvY2sgbnVtYmVyIGJleW9uZCBmaWxlc3lzdGVtIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2CisjLCBmdXp6eQorbXNnaWQgIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCittc2dzdHIgIjxFbCBub2RlLWkgZGVsIGRlc2NyaXB0b3IgZGUgZ3J1cD4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworIywgZnV6enkKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIkPDsnBpZXMgZGUgc2VndXJldGF0IGRlbCBzdXBlcmJsb2MgZGVzYWRlcyBlbiBlbHMgYmxvY3M6ICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJlbiBjcmVhciAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgImVuIGNyZWFyIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJTJ2hhIGRlZmluaXQgdW5hIG9wY2nDsyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIG5vIHbDoGxpZGE6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY2xvbmFyIGVsIGZpdHhlcjogJW1cbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPEVsIG5vZGUtaSBkZSBsJ8OtbmRleCBkZSBsZXMgQUNMPiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8RWwgbm9kZS1pIGRlIGxlcyBkYWRlcyBkZSBsZXMgQUNMPiIKKworI34gbXNnaWQgIkBTIGRvZXNuJ3QgaGF2ZSBoYXNfQGogZmxhZywgYnV0IGhhcyBleHQzIEBqICVzLlxuIgorI34gbXNnc3RyICJFbCBAUyBubyB0w6kgdW4gc2VueWFsYWRvciDCq2hhc19qb3VybmFswrsgKHTDqV9AaiksIHBlcsOyIHTDqSBlbCBAaiBleHQzICVzLlxuIgorCisjfiBtc2dpZCAiRXJyb3Igd2hpbGUgZGVsZXRpbmcgZXh0ZW50OiAlbVxuIgorI34gbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIHN1cHJpbWlyIGwnZXh0ZW5zacOzOiAlbVxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIlZvbGV1IHRvcm5hciBhIGNyZWFyIGVsIGpvcm5hbCBwZXIgYSBmZXIgcXVlIGVsIHNpc3RlbWEgZGUgZml0eGVycyB0b3JuaSBhIHNlciBleHQzP1xuIgorCisjfiBtc2dpZCAiJXMgaXMgbW91bnRlZC4gICIKKyN+IG1zZ3N0ciAiJXMgZXN0w6AgbXVudGF0LiAgIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZXRlcm1pbmFyIGxhIG1pZGEgZGVsIHJlZ2lzdHJlIGRlIGNhbnZpcyIKKworI34gbXNnaWQgImJhZCBibG9jayBzaXplIC0gJXMiCisjfiBtc2dzdHIgIm1pZGEgZGVsIGJsb2MgZXJyb25pIC0gJXMiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZyYWdtZW50IHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAibWlkYSBkZSBmcmFnbWVudCBpbnbDoGxpZGEgLSAlcyIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIkF2w61zOiBlbHMgZnJhZ21lbnRzIG5vIHPDs24gY29tcGF0aWJsZXMuIFMnaWdub3JhcsOgIGwnb3BjacOzIC1mXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIk5PIHMnaGEgc3VwcmltaXQgZWwgcmVnaXN0cmUgZGUgdHJhbnNhY2Npb25zXG4iCisKKyN+IG1zZ2lkICIjXHRcdCAldSAtPiAldSAoJWQpXG4iCisjfiBtc2dzdHIgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKworI34gbXNnaWQgIiIKKyN+ICIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisjfiAiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IGxhIGNvbWJpbmFjacOzIGRlIGxlcyBmdW5jaW9ucyBmbGV4X2JnIGlcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGVsIHJlc2l6ZTJmcy5cbiIKKworI34gbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUiCisjfiBtc2dzdHIgImVuIGZlciBsYSBjcmlkYSBhIGV4dDJmc19ibG9ja19pdGVyYXRlIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAiZW4gZmVyIGxhIGNyaWRhIGEgbGEgZnVuY2nDsyBkJ2l0ZXJhY2nDsyIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICJlbiB1YmljYXIgbGEgbWVtw7JyaWEgaW50ZXJtw6hkaWEgcGVyIGFsIG5vZGUtaSIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAiZW4gbGxlZ2lyIGxhIHRhdWxhIGRlbHMgbm9kZXMtaSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgImVuIGVzY3JpdXJlIGxhIHRhdWxhIGRlbHMgbm9kZXMtaSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXM6IGwnb3JkcmUgZGVscyBieXRlcyBkZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIGphIGVzdMOgIG5vcm1hbGl0emF0LlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAtICVzIgorI34gbXNnc3RyICJibG9jIGQnaW5pY2kgbm8gdsOgbGlkIC0gJXMiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vY3MuZ21vIGIvZTJmc3Byb2dzL3BvL2NzLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzdjMDdmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2NzLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vY3MucG8gYi9lMmZzcHJvZ3MvcG8vY3MucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3OWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9jcy5wbwpAQCAtMCwwICsxLDcwMjMgQEAKKyMgQ3plY2ggdHJhbnNsYXRpb24gb2YgZTJmc3Byb2dzCisjIENvcHlyaWdodCAoQykgMjAwOCBUaGVvZG9yZSBUc28gKG1zZ2lkcykKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4sIDIwMDMuCisjIFBldHIgUGlzYXIgPHBldHIucGlzYXJAYXRsYXMuY3o+LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MgMS40Mi44XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEzLTA2LTE2IDA4OjE3LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTExLTI2IDE3OjEwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldHIgUGlzYXIgPHBldHIucGlzYXJAYXRsYXMuY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPHRyYW5zbGF0aW9uLXRlYW0tY3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBjc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xKSA/IDAgOiAobj49MiAmJiBuPD00KSA/IDEgOiAyO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAixaBwYXRuw70gYmxvayAldSBtaW1vIHJvenNhaDsgaWdub3JvdsOhbi5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJwxZlpIGtvbnRyb2xlIHNwcsOhdm5vc3RpIGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJwxZlpIMSNdGVuw60gaXV6bHUgxaFwYXRuw71jaCBibG9rxa8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svaXNjYW4uYzoxMTAgZTJmc2NrL3NjYW50ZXN0LmM6MTA3CisjOiBlMmZzY2svdW5peC5jOjEzMzIgZTJmc2NrL3VuaXguYzoxNDIwIG1pc2MvYmFkYmxvY2tzLmM6MTIxNAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjIyIG1pc2MvYmFkYmxvY2tzLmM6MTIzNiBtaXNjL2JhZGJsb2Nrcy5jOjEyNDgKKyM6IG1pc2MvZHVtcGUyZnMuYzo1ODggbWlzYy9lMmltYWdlLmM6MTE5NiBtaXNjL2UyaW1hZ2UuYzoxMzI0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM3IG1pc2MvbWtlMmZzLmM6MTk2IG1pc2MvdHVuZTJmcy5jOjE5MDcgcmVzaXplL21haW4uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgInDFmWkgcG9rdXN1IG90ZXbFmcOtdCAlcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJwxZlpIHBva3VzdSBwb3BlbiDigJ4lc+KAnCIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjAzCittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJwxZlpIG5hxI3DrXTDoW7DrSBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIHplIHNvdWJvcnUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInDFmWkgYWt0dWFsaXphY2kgaXV6bHUgxaFwYXRuw71jaCBibG9rxa8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiB2wqBpdXpsdSDFoXBhdG7DvWNoIGJsb2vFryBuYWxlemVuIG5lcG92b2xlbsO9IGJsb2sgJXUuIFZ5bWF6w6FuLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gYmxva3UgJWx1ICglcykgYsSbaGVtICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgxI10ZW7DrSBibG9rdSAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIklnbm9yb3ZhdCBjaHlidSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJWeW51dGl0IHDFmWVwc8OhbsOtIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6w6FwaXN1IGJsb2t1ICVsdSAoJXMpIHDFmWkgJXMuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgesOhcGlzdSBibG9rdSAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo1NworbXNnaWQgImVtcHR5IGRpcmJsb2NrcyIKK21zZ3N0ciAicHLDoXpkbsOpIGJsb2t5IGFkcmVzw6HFmcWvIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgIm1hcGEgcHLDoXpkbsO9Y2ggYWRyZXPDocWZxa8iCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJQcsOhemRuw70gYmxvayBhZHJlc8OhxZllICV1ICgjJWQpIHbCoGl1emx1ICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIG7DoXpldl9zb3Vib3J1IHBfYmxva8WvIHZlbGlrb3N0X2Jsb2t1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk5lcGxhdG7DvSBwb8SNZXQgYmxva8WvIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIGJsb2t1ICh2ZWxpa29zdD0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIlBvdcW+aXTDrTogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICIiCisiaW9jdGwgQkxLRkxTQlVGIG5lcG9kcG9yb3bDoW5vISBOZW1vaHUgc3luY2hyb25pem92YXQgdnlyb3Zuw6F2YWPDrSBwYW3Em3RpLlxuIgorIlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIlBvdcW+aXTDrTogJXMgWy1GXSBbLUkgYmxva3lfaW5vZGVfYnVmZmVyxa9dIHphxZnDrXplbsOtXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIgorbXNnc3RyICJwxZlpIG90ZXbDrXLDoW7DrSAlcyBwcm8gc3luY2hyb25pemFjaSIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NjcgcmVzaXplL21haW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSBzeW5jaHJvbml6b3ZhdCAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMDkxCittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJwxZlpIHphaMOhamVuw60gcHLFr2Nob2R1IGl1emx5IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTEwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAicMWZaSB6w61za8OhdsOhbsOtIGRhbMWhw61obyBpdXpsdSIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICJwcm96a291bcOhbm8gJXUgaXV6bMWvLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIsSNdGVuw60gc3VwZXJibG9rdSDFvnVybsOhbHVcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIgorbXNnc3RyICIlczogbmVuYWxlemVuIHBsYXRuw70gc3VwZXJibG9rIMW+dXJuw6FsdVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IMW+dXJuw6FsIHDFmcOtbGnFoSBrcsOhdGvDvVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBvYm5vdnVqZSBzZSDFvnVybsOhbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IHYgcmXFvmltdSBqZW4gcHJvIMSNdGVuw60gc2Ugxb51cm7DoWwgb2Jub3ZvdmF0IG5lYnVkZVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugem5vdnUgb3RldsWZw610ICVzIgorCisjIFRoZXNlIHNob3J0Y3V0cyBhcmUgYSBuaWdodG1hcmUuCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFyb3rFocOtxZllbsO9IGF0cmlidXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFjaHliYSBwxZlpIGFsb2thY2kiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0bWFwIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2tvbXByaW1vdmF0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDa29saWR1amUgcyBqaW7DvW0gYmxva2VtIHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWlub2RlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJbmVwb3ZvbGVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqxb51cm7DoWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkRvZHN0cmFuxJtuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImRhZHJlc8OhxZkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlcG9sb8W+a2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVwb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc3lzdMOpbSBzb3Vib3LFryIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwcm8gaW5vZGUgJWkgKCVRKSBqZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdza3VwaW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoaXV6ZWwgSFRSRUUgYWRyZXPDocWZZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGplIG9ka2F6IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtdsOtY2Uga3LDoXQgYWxva292w6FubyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibm5lcGxhdG7DvSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9vc2nFmWVsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwcHJvYmzDqW0gdiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFrdsOzdGEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInJrb8WZZW5vdsO9IGl1emVsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNtxJtsbyBieSBiw710IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc3VwZXJibG9rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1bmVwxZlpcG9qZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidnphxZnDrXplbsOtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInhyb3pzYWgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6bnVsb3bDqSBkw6lsa3kiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIE5VTEw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxJdXplbCDFoXBhdG7DvWNoIGJsb2vFrz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIGt2w7N0eSB1xb5pdmF0ZWzFrz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxJdXplbCBrdsOzdHkgc2t1cGluPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIHphdmFkxJvEjWUgc3lzdMOpbXU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPEl1emVsIGFkcmVzw6HFmWUgdW5kZWxldGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxJdXplbCBkZXNrcmlwdG9ydSBza3VwaW55PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8SXV6ZWwgxb51cm7DoWx1PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxSZXplcnZvdmFuw70gaXV6ZWwgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPFJlemVydm92YW7DvSBpdXplbCAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJvYnnEjWVqbsO9IHNvdWJvciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzUKK21zZ2lkICJkaXJlY3RvcnkiCittc2dzdHIgImFkcmVzw6HFmSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJ6bmFrb3bDqSB6YcWZw616ZW7DrSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzkKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImJsb2tvdsOpIHphxZnDrXplbsOtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgInBvam1lbm92YW7DoSByb3VyYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDMKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzeW1ib2xpY2vDvSBvZGtheiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDUgbWlzYy91dWlkZC5jOjE2MQorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAic29rZXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgIm5lem7DoW3DvSBkcnVoIHNvdWJvcnUgb8KgbcOzZHUgMCVvIgorCisjIEV4cGFuc2lvbiBvZiAlQiBpbiBzaW5ndWxhciBub21pbmF0aXYKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIyCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIm5lcMWZw61tw70gYmxvayIKKworIyBFeHBhbnNpb24gb2YgJUIgaW4gc2luZ3VsYXIgbm9taW5hdGl2CisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNAorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiZHZvam7DoXNvYm7EmyBuZXDFmcOtbcO9IGJsb2siCisKKyMgRXhwYW5zaW9uIG9mICVCIGluIHNpbmd1bGFyIG5vbWluYXRpdgorIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgInRyb2puw6Fzb2JuxJsgbmVwxZnDrW3DvSBibG9rIgorCisjIEV4cGFuc2lvbiBvZiAlQiBpbiBzaW5ndWxhciBub21pbmF0aXYKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAicMWZZWtsYWRvdsO9IGJsb2siCisKKyMgRXhwYW5zaW9uIG9mICVCIGluIHNpbmd1bGFyIG5vbWluYXRpdgorIzogZTJmc2NrL21lc3NhZ2UuYzo0MzAKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJibG9rIMSNLiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIG7Em2tvbGlrcsOhdCBhbG9rb3ZhbsO9Y2ggaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjEwIGUyZnNjay9wYXNzMWIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIgorbXNnc3RyICJ2bml0xZluw60gY2h5YmE6IG5lbW9odSBuYWrDrXQgZHVwX2JsayBwcm8gJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJ2csOhY2Vuw70geiBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJWbml0xZluw60gY2h5YmE6IG5lbW9odSBuYWrDrXQgesOhem5hbSBFQSBibG9rdSBwcm8gJWxsdSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGlub2RlIHJlY29yZCBmb3IgJXUiCittc2dzdHIgIlZuaXTFmW7DrSBjaHliYTogbmVtb2h1IG5hasOtdCB6w6F6bmFtIEVBIGl1emx1IHBybyAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICLEjXRlbsOtIGFkcmVzw6HFmW92w6lobyBibG9rdSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NTk4Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBwb3XFvsOtdmFuw71jaCBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYwOQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaXV6bMWvIGFkcmVzw6HFmcWvIgorCisjOiBlMmZzY2svcGFzczEuYzo2MTkKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGl1emzFryBvYnnEjWVqbsO9Y2ggc291Ym9yxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgcG91xb7DrXZhbsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svcGFzczEuYzo2OTUKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIm90ZXbDrXLDoW7DrSBwcsWvemt1bXUgaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczEuYzo3MjkKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJ6w61za8OhdsOhbsOtIGRhbMWhw61obyBpdXpsdSB6wqBwcsWvemt1bXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyMzkKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIlByxa9jaG9kIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgIsSNdHUgbmVwxZnDrW3DqSBibG9reSBpdXpsdSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM0NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgxaFwYXRuw71jaCBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNjkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpdXplbCB2IG1hcMSbIMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg5Cittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBpbWFnaWMgaXV6bMWvIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDE2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgbsSba29saWtyw6F0IGFsb2tvdmFuw71jaCBibG9rxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgYmxva8WvIHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjIyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKTogb8SNZWvDoXbDoW5vICU2bHUsIG9iZHLFvmVubyBmeXouICU2bHUgKGJsb2vFryAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjYwCittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJiaXRtYXBhIGJsb2vFryIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY2NgorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwYSBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NzIKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAidGFidWxrYSBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUHLFr2Nob2QgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIk5lbW9odSBwb2tyYcSNb3ZhdC4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgaG90b3bDvWNoIGl1emzFryIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiTWF4aW11bSBwYW3Em3RpIgorCisjOiBlMmZzY2svcGFzczMuYzoxMzYKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlByxa9jaG9kIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjMyMgorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwYSBkZXRla2NlIGN5a2zFryBpdXpsxa8iCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiUHLFr2Nob2QgNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlByxa9jaG9kIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKMW+w6FkbsOhIHbDvXp2YSkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIk9wcmF2aXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiVnltYXphdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJQxZllbcOtc3RpdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJBbG9rb3ZhdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiWnbEm3TFoWl0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiUMWZaXBvaml0IGRvIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJWeXR2b8WZaXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJaYWNocsOhbml0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlVzZWtub3V0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIlZ5xI1pc3RpdCBpdXplbCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJQxZllcnXFoWl0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIlJvemTEm2xpdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJQb2tyYcSNb3ZhdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJLbG9ub3ZhdCB2w61jZSBrcsOhdCBhbG9rb3ZhbsOpIGJsb2t5IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIk9kc3RyYW5pdCBzb3Vib3IiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiUG90bGHEjWl0IHpwcsOhdnkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIk9kc3RyYW5pdCBvZGtheiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICJWeW1hemF0IGluZGV4IEhUcmVlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIlpub3Z1IHZ5dHZvxZlpdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKMW9w4FETsOdKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJPUFJBVkVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIlZZTUFaw4FOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUMWYRU3DjVNUxJpOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiQUxPS09Ww4FOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJaVsSaVMWgRU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlDFmElQT0pFTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJWWVRWT8WYRU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIlpBQ0hSw4FOxJpOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiVVNFS05VVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJTk9ERSBWWU1BWsOBTkEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJQxZhFUlXFoEVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJST1pExJpMRU5PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiUE9LUkHEjFVKSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiVsONQ0UgS1LDgVQgQUxPS09WQU7DiSBCTE9LVSBOQUtMT05PVsOBTlkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIlNPVUJPUiBPRFNUUkFOxJpOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiUE9UTEHEjEVOTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJPREtBWiBPRFNUUkFOxJpOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSU5ERVggSFRSRUUgVllNQVrDgU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJCVURFIFpOT1ZVIFZZVFZPxZhFTk8iCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkJpdG1hcGEgYmxva8WvIHBybyBza3VwaW51ICVnIG5lbsOtIHZlIHNrdXBpbsSbLiAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQml0bWFwYSBpdXpsxa8gcHJvIHNrdXBpbnUgJWcgbmVuw60gdmUgc2t1cGluxJsuIChibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJUYWJ1bGthIGl1emzFryBwcm8gc2t1cGludSAlZyBuZW7DrSB2ZSBza3VwaW7Emy4gKGJsb2sgJWIpXG4iCisiVkFST1bDgU7DjTogTU/FvU7DgSBWw4HFvU7DgSBaVFLDgVRBIERBVC5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU3VwZXJibG9rIG5lbW9obCBiw710IG5hxI10ZW4gbmVibyBuZXBvcGlzdWplIHNwcsOhdm7DvSBzeXN0w6ltIHNvdWJvcsWvXG4iCisiZXh0Mi4gUG9rdWQgamUgemHFmcOtemVuw60gcGxhdG7DqSBhIG9wcmF2ZHUgb2JzYWh1amUgc3lzdMOpbSBzb3Vib3LFr1xuIgorImV4dDIgKGEgbmUgc3dhcCBuZWJvIG7Em2NvIGppbsOpaG8pLCBwYWsgamUgc3VwZXJibG9rXG4iCisicG/FoWtvemVuIGEgbcWvxb5ldGUgemt1c2l0IHNwdXN0aXQgZTJmc2NrIHMgamluw71tIHN1cGVyYmxva2VtOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPHphxZnDrXplbsOtPlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJWZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFryAocG9kbGUgc3VwZXJibG9rdSkgamUgJWIgYmxva8WvXG4iCisiRnl6aWNrw6EgdmVsaWtvc3QgemHFmcOtemVuw60gamUgJWMgYmxva8WvXG4iCisiQnXEjyBzdXBlcmJsb2sgbmVibyB0YWJ1bGthIG9kZMOtbMWvIGplIHByYXZkxJtwb2RvYm7EmyBwb8Wha296ZW5hIVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJWIHN1cGVyYmxva3UgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRhdG8gdmVyemUgZTJmc2NrIG5lcG9kcG9ydWplIHZlbGlrb3N0aSBmcmFnbWVudMWvIHLFr3puw6lcbiIKKyJvZCB2ZWxpa29zdGkgYmxva3UuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlYgc3VwZXJibG9rdSBibG9ja3NfcGVyX2dyb3VwID0gJWIsIG3Em2xvIGJ5IGLDvXQgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiViBzdXBlcmJsb2t1IGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgbcSbbG8gYnkgYsO9dCAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG5lbcSbbCBVVUlEOyBnZW5lcnVqaSBqZS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3puw6Fta2E6IFBva3VkIGV4aXN0dWplIHbDrWNlIGJsb2vFryBiaXRtYXAgaXV6bMWvIG5lYm8gYmxva8WvLFxuIgorImt0ZXLDqSB2ecW+YWR1asOtIHDFmWVtw61zdMSbbsOtLCBuZWJvIGplZG5hIMSNw6FzdCB0YWJ1bGt5IGl1emzFryxcbiIKKyJrdGVyw6EgbXVzw60gYsO9dCBwxZllc3VudXRhLCBtb8W+bsOhIGJ1ZGV0ZSByYWTEm2ppIGNodMOtdCBuZWpkxZnDrXZlXG4iCisic3B1c3RpdCBlMmZzY2sgc8KgcMWZZXDDrW5hxI1lbSDigJ4tYiAlU+KAnC4gUHJvYmzDqW0gamUgbW/Fvm7DoSBqZW5cbiIKKyJ2wqBwcmltw6FybsOtbSBkZXNrcmlwdG9ydSBza3VwaW55IGJsb2vFryBhIHrDoWxvxb5uw60gZGVza3JpcHRvcnlcbiIKKyJza3VwaW55IGJsb2vFryBtb2hvdSBiw710IHbCoHBvxZnDoWRrdS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIlYgc3VwZXJibG9rdSBuYWxlemVubyBwb8Wha296ZW7DrS4gKCVzID0gJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2U6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHpqacWhxaVvdsOhbsOtIHZlbGlrb3N0aSBmeXppY2vDqWhvIHphxZnDrXplbsOtOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJQb8SNZXQgaXV6bMWvIHYgc3VwZXJibG9rdSBqZSAlaSwgbcSbbCBieSBiw710ICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQgbmVwb2Rwb3J1amUgdmxhc3Rub3N0IGZpbGV0eXBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIlN1cGVyYmxvayBtw6EgbmVwbGF0bsO9IMW+dXJuw6FsIChpdXplbCAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiRXh0ZXJuw60gxb51cm7DoWwgcG91xb7DrXbDoSB2w61jZSBzeXN0w6ltxa8gc291Ym9yxa8gKG5lcG9kcG9yb3bDoW5vKS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk4Cittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJOZW1vaHUgbmFsw6l6dCBleHRlcm7DrSDFvnVybsOhbFxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRXh0ZXJuw60gxb51cm7DoWwgbcOhIMWhcGF0bsO9IHN1cGVyYmxva1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkV4dGVybsOtIMW+dXJuw6FsIG5lcG9kcG9ydWplIHRlbnRvIHN5c3TDqW0gc291Ym9yxa9cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTMKK21zZ2lkICIiCisiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEBqIGZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9rIMW+dXJuw6FsdSBzeXN0w6ltdSBzb3Vib3LFryBqZSBuZXpuw6Ftw6lobyB0eXB1ICVOIChuZXBvZHBvcm92w6FubykuXG4iCisiSmUgcHJhdmTEm3BvZG9ibsOpLCDFvmUgdmHFoWUga29waWUgZTJmc2NrIGplIHN0YXLDoSBhL25lYm8gbmVwb2Rwb3J1amUgdGVudG8gZm9ybcOhdCDFvnVybsOhbHUuXG4iCisiSmUgdGFrw6kgbW/Fvm7DqSwgxb5lIHN1cGVyYmxvayDFvnVybsOhbHUgamUgcG/FoWtvemVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjEKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJTdXBlcmJsb2sgxb51cm7DoWx1IGplIHBvxaFrb3plbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiAlcyBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJQxZnDrXpuYWsgc3VwZXJibG9rdSBoYXNfam91cm5hbCAobcOhX8W+dXJuw6FsKSBuZW7DrSBuYXN0YXZlbiwgYXbFoWFrIMW+dXJuw6Fsb3bDvSAlcyBqZSBwxZnDrXRvbWVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiU3VwZXJibG9rIG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgbmVlZHNfcmVjb3ZlcnkgKHBvdMWZZWJ1amVfb2Jub3ZpdCksIGF2xaFhayDFvsOhZG7DvSDFvnVybsOhbCBuZWV4aXN0dWplLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzNgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiUMWZw616bmFrIHN1cGVyYmxva3UgbmVlZHNfcmVjb3ZlcnkgKHBvdMWZZWJ1amVfb2Jub3ZpdCkgbmVuw60gbmFzdGF2ZW4sIGF2xaFhayDFvnVybsOhbCBvYnNhaHVqZSBkYXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJWeW1hemF0IMW+dXJuw6FsIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbcOhIHDFmcOtem5hayh5KSB2bGFzdG5vc3TDrSBuYXN0YXZlbnksIGHEjWtvbGl2IHNlIGplZG7DoSBvIHJldml6aSAwLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUxCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgb3NpxZllbMO9IGl1emVsICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBwcsOhdmE9JUltLCB2ZWxpa29zdD0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJOZXBsYXRuw70gJUIgKCViKSBuYWxlemVuIHYgb3NpxZllbMOpbSBpdXpsdSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkppxb4gdnltYXphbsO9ICVCICglYikgbmFsZXplbiB2IG9zacWZZWzDqW0gaXV6bHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIlbCoHN1cGVyYmxva3UgbmVwbGF0bsO9IG9zacWZZWzDvSBpdXplbCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJOZXBsYXRuw70gaXV6ZWwgJWkgdiBzZXpuYW11IG9zacWZZWzDvWNoIGl1emzFry5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3NgorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJTdXBlcmJsb2sgxb51cm7DoWx1IG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgbmV6bsOhbcOpIHZsYXN0bm9zdGkg4oCeamVuIHBybyDEjXRlbsOt4oCcLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgxCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIlN1cGVyYmxvayDFvnVybsOhbHUgbcOhIG5hc3RhdmVuIHDFmcOtem5hayBuZXpuw6Ftw6kgdmxhc3Rub3N0aSDigJ5uZWtvbXBhdGliaWxuw63igJwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiVmVyemUgxb51cm7DoWx1IG5lcG9kcG9yb3bDoW5hIHTDrW10byBlMmZzY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiUMWZZXNvdXbDoW0gxb51cm7DoWwgeiAvJXMgZG8gc2tyeXTDqWhvIGl1emx1LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJDaHliYSBwxZlpIHDFmWVzdW51IMW+dXJuw6FsdTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAxCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5hbGV6ZW5hIG5lcGxhdG7DoSBwb2xlIHN1cGVyYmxva3Ugxb51cm7DoWx1IFYyICh6wqDFvnVybsOhbHUgVjEpLlxuIgorIk1hxb51IHBvbGUgemEgc3VwZXJibG9rZW0gxb51cm7DoWx1IFYx4oCmXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJQxZllc3RvIHNwdXN0aXQgxb51cm7DoWwiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiUMWZw616bmFrIG9ibm92ZW7DrSBuZW7DrSBuYXN0YXZlbiB2IHrDoWxvxb5uw61tIHN1cGVyYmxva3UsIHRha8W+ZSBwxZllc3RvIHNwb3XFoXTDrW0gxb51cm7DoWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE3Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJaw6Fsb2h1amkgaW5mb3JtYWNlIG/CoGJsb2t1IGl1emzFryDFvnVybsOhbHUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzIyCittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIlNvdWJvcm92w70gc3lzdMOpbSBuZW3DoSB6YXBudXQgcMWZZXDDrW5hxI0gcmVzaXplX2lub2RlLFxuIgorImFsZSBzX3Jlc2VydmVkX2dkdF9ibG9ja3MgamUgJU4sIGHEjWtvbGl2IGJ5IG3Em2xvIGLDvXQgbnVsYS4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiUmVzaXplX2lub2RlIG5lbsOtIHphcG51dG8sIGF2xaFhayBpdXplbCBwcm8gbcSbbsSbbsOtIHZlbGlrb3N0aSBuZW7DrSBudWxhLiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJJdXplbCBuYSBtxJtuxJtuw60gdmVsaWtvc3RpIG5lbsOtIHBsYXRuw70uICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzOAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyLEjGFzIHBvc2xlZG7DrWhvIHDFmWlwb2plbsOtIHN1cGVyYmxva3UgKCV0LFxuIgorIlx0bnluw60gPSAlVCkgbGXFvsOtIHbCoGJ1ZG91Y25vc3RpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQzCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIsSMYXMgcG9zbGVkbsOtaG8gesOhcGlzdSBzdXBlcmJsb2t1ICgldCxcbiIKKyJcdG55bsOtID0gJVQpIGxlxb7DrSB2wqBidWRvdWNub3N0aS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiTsOhcG92xJtkYSBzdXBlcmJsb2t1IHBybyBleHRlcm7DrSBzdXBlcmJsb2sgYnkgbcSbbGEgYsO9dCAlWC4gIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1MgorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisiRG8gc291Ym9yb3bDqWhvIHN5c3TDqW11IHDFmWlkw6F2w6FtIG7DoXBvdsSbZHUgcHJvIGRpcmhhc2guXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiS29udHJvbG7DrSBzb3XEjWV0IGRlc2tyaXB0b3J1IHNrdXBpbnkgJWcgamUgJTA0eCwgbcSbbCBieSBiw710ICUwNHkuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIkRlc2tyaXB0b3Igc2t1cGlueSAlZyBvem5hxI1lbiBqYWtvIG5laW5pY2lhbGl6b3ZhbsO9IGJleiBzYWR5IHZsYXN0bm9zdMOtLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICJEZXNrcmlwdG9yIHNrdXBpbnkgJWcgbcOhIG5lcGxhdG7DvSBwb8SNZXQgbmVwb3XFvml0w71jaCBibG9rxa8gJWIuICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzIKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIlBvc2xlZG7DrSBiaXRtYXBhIGJsb2vFryBza3VwaW55IG5lbsOtIGluaWNpYWxpem92w6FuYS4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICJUcmFuc2FrY2Ugxb51cm7DoWx1ICVpIGJ5bGEgcG/FoWtvemVuYSwgcMWZZWhyw6Fuw60gYnlsbyB6cnXFoWVuby5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiUMWZw616bmFrIHRlc3RfZnMgamUgbmFzdGF2ZW4gKGEgZXh0NCBqZSBkb3N0dXBuw70pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkgIAorIzogZTJmc2NrL3Byb2JsZW0uYzozODYKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkgICIKK21zZ3N0ciAiIgorIsSMYXMgcG9zbGVkbsOtaG8gcMWZaXBvamVuw60gc3VwZXJibG9rdSBsZcW+w60gdsKgYnVkb3Vjbm9zdGkuXG4iCisiXHQocm96ZMOtbCBtZW7FocOtIG5lxb4gZGVuLCBwcmF2ZMSbcG9kb2JuxJsganNvdSBjaHlibsSbIG5hc3RhdmVueSBoYXJkd2Fyb3bDqSBob2RpbnkgICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTIKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkuICAiCittc2dzdHIgIiIKKyLEjGFzIHBvc2xlZG7DrWhvIHrDoXBpc3Ugc3VwZXJibG9rdSBsZcW+w60gdsKgYnVkb3Vjbm9zdGkuXG4iCisiXHQocm96ZMOtbCBtZW7FocOtIG5lxb4gZGVuLCBwcmF2ZMSbcG9kb2JuxJsganNvdSBjaHlibsSbIG5hc3RhdmVueSBoYXJkd2Fyb3bDqSBob2RpbnkuICIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIkplZGVuIG5lYm8gdsOtY2Uga29udHJvbG7DrWNoIHNvdcSNdMWvIGRlc2tyaXB0b3J1IHNrdXBpbnkgYmxva8WvIGplIGNoeWJuw71jaC4gIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAzCittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgcG/EjWV0IHZvbG7DvWNoIGl1emzFryBuYSAlaiAoYnlsICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4Cittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgcG/EjWV0IHZvbG7DvWNoIGJsb2vFryBuYSAlYyAoYnlsICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEzCittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJJdXplbCBrdsOzdHkgJWkgKCVRKSBzZSBvem5hxI11amUgamFrbyBza3J5dMO9LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTgKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIlN1cGVyYmxvayBtw6EgxaFwYXRuw70gYmxva8KgTU1QLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIlN1cGVyYmxvayBtw6EgbmVwbGF0bsOhIMSNw61zbGEgTU1QLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgImV4dDJmc19vcGVuMjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUHLFr2Nob2QgMTogS29udHJvbHVqw60gc2UgaXV6bHksIGJsb2t5IGEgdmVsaWtvc3RpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJLb8WZZW5vdsO9IGl1emVsIG5lbsOtIGFkcmVzw6HFmS4gIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDkKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIktvxZllbm92w70gaXV6ZWwgbcOhIG5hc3RhdmVuIGR0aW1lIChtb8W+bsOhIGt2xa9saSBzdGFyw6ltIG1rZTJmcykuICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlJlemVydm92YW7DvSBpdXplbCAlaSAoJVEpIG3DoSDFoXBhdG7DvSBtw7NkLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJPZHN0cmFuxJtuw70gaXV6ZWwgJWkgbcOhIG51bG92w70gZHRpbWUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiSXV6ZWwgJWkgc2UgcG91xb7DrXbDoSwgYWxlIG3DoSBuYXN0YXZlbiBkdGltZS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiSXV6ZWwgJWkgamUgYWRyZXPDocWZIG51bG92w6kgZMOpbGt5LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiQml0bWFwYSBibG9rxa8gc2t1cGlueSAlZyB2ICViIGtvbGlkdWplIHMgamluw71tIGJsb2tlbSBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzkKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJCaXRtYXBhIGl1emzFryBza3VwaW55ICVnIHYgJWIga29saWR1amUgcyBqaW7DvW0gYmxva2VtIHN5c3TDqW11IHNvdWJvcsWvLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg0Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiVGFidWxrYSBpdXpsxa8gc2t1cGlueSAlZyB2ICViIGtvbGlkdWplIHMgamluw71tIGJsb2tlbSBzeXN0w6ltdSBzb3Vib3LFry5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg5Cittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiQml0bWFwYSBibG9rxa8gc2t1cGlueSAlZyAoJWIpIGplIMWhcGF0bsOhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkJpdG1hcGEgaXV6bMWvIHNrdXBpbnkgJWcgKCViKSBqZSDFoXBhdG7DoS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5OQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiVsKgaXV6bHUgJWkgamUgaV9zaXplICVJcywgbcSbbGEgYnkgYsO9dCAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIlbCoGl1emx1ICVpIGplIGlfYmxvY2tzICVJYiwgbcSbbG8gYnkgYsO9dCAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiTmVwbGF0bsO9ICVCICglYikgdsKgaXV6bHUgJWkuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNAorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgc2UgcMWZZWtyw712w6EgcyBtZXRhZGF0eSBzeXN0w6ltdSBzb3Vib3LFryB2wqBpdXpsdSAlaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkl1emVsICVpIG3DoSBuZXBsYXRuw70gYmxvayh5KS4gIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyBuZXBsYXRuw71jaCBibG9rxa8gdsKgaXV6bHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIk5lcGxhdG7DvSAlQiAoJWIpIHbCoGl1emx1IMWhcGF0bsO9Y2ggYmxva8WvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzQKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkl1emVsIMWhcGF0bsO9Y2ggYmxva8WvIG3DoSBuZXBsYXRuw70gYmxvayh5KS4gIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiUG91xb7DrXbDoSBzZSBkdXBsaWvDoXRuw60gbmVibyDFoXBhdG7DvSBibG9rIVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ0Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICLFoHBhdG7DvSBibG9rICViIHBvdcW+w612w6FuIGpha28gbmVwxZnDrW3DvSBibG9rIMWhcGF0bsO9Y2ggYmxva8WvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkl1emVsIMWhcGF0bsO9Y2ggYmxva8WvIHNlIHByYXZkxJtwb2RvYm7EmyBwb8Wha29kaWwuIFrFmWVqbcSbIGJ5c3RlIG3Em2xpIG55bsOtXG4iCisiemFzdGF2aXQgYSB2ecWhZXTFmWl0IHNvdWJvcm92w70gc3lzdMOpbSBuYSDFoXBhdG7DqSBibG9reSBwxZnDrWthemVtIOKAnmUyZnNjayAtY+KAnFxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkplLWxpIGJsb2sgb3ByYXZkdSDFoXBhdG7DvSwgbmVtxa/FvmUgYsO9dCBzeXN0w6ltIHNvdWJvcsWvIG9wcmF2ZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk3Fr8W+ZXRlIHRlbnRvIGJsb2sgdnltYXphdCB6ZSBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIGEgZG91ZmF0LCDFvmVcbiIKKyJ0ZW50byBibG9rIGplIHZlIHNrdXRlxI1ub3N0aSB2IHBvxZnDoWRrdS4gQWxlIHphIG5pYyBuZXJ1xI3DrW1lLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJQcmltw6FybsOtIHN1cGVyYmxvayAoJWIpIGplIG5hIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MgorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJCbG9rICViIHYgcHJpbcOhcm7DrWNoIGRlc2tyaXB0b3JlY2ggc2t1cGluIGplIG5hIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa9cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIlZhcm92w6Fuw606IHN1cGVyYmxvayBza3VwaW55ICVnICglYikgamUgxaFwYXRuw70uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgzCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiVmFyb3bDoW7DrTogS29waWUgZGVza3JpcHRvcsWvIHNrdXBpbiB2ZSBza3VwaW7EmyAlZyBtw6EgxaFwYXRuw70gYmxvayAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICJDaHliYSBwxZlpIHByb2dyYW1vdsOhbsOtPyBCbG9rICMlYiBiZXpkxa92b2RuxJsgcG91xb5pdCB2IHByb2Nlc3NfYmFkX2Jsb2Nrcy5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBhbG9rYWNpICVOIHNvdXZpc2zDvWNoIGJsb2vFryB2ZSBza3VwaW7EmyBibG9rxa8gJWcgcHJvICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBhbG9rYWNpIHZ5cm92bsOhdmFjw60gcGFtxJt0aSBibG9rxa8gcHJvIHDFmWVtw61zdMSbbsOtICVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA1Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUMWZZW3DrXPFpXVqaSAlcyBza3VwaW55ICVnIHogJWIgZG8gJWPigKZcbiIKKworIyBGSVhNRTogbm8tYy1mb3JtYXQgc28gdGhhdCBJIGNhbiByZW9yZGVyIGl0IHByb3Blcmx5CisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIlDFmWVtw61zxaV1amkgc2t1cGlueSAlZyAlcyBkbyAlY+KAplxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTUKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiVmFyb3bDoW7DrTogbmVtb2h1IG5hxI3DrXN0IGJsb2sgJXMgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIwCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiVmFyb3bDoW7DrTogbmVtb2h1IHphcHNhdCBibG9rICViIHBybyAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUgZTJmc2NrL3Byb2JsZW0uYzoxNDc0Cittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBhbG9rYWNpIGJpdG1hcHkgaXV6bMWvICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBhbG9rYWNpIGJpdG1hcHkgYmxva8WvICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgaW5mb3JtYWPDrSBvZGthesWvIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgcG9sZSBibG9rxa8gYWRyZXPDocWZZTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHprb3Vtw6Fuw60gaXV6bMWvICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGl0ZXJhY2kgcMWZZXMgYmxva3kgdsKgaXV6bHUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU1Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB1a2zDoWTDoW7DrSBpbmZvcm1hY2UgbyDEjWV0bm9zdGkgaXV6bHUgKGl1emVsPSVpLCBwb8SNZXQ9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB1a2zDoWTDoW7DrSBpbmZvcm1hY2UgbyBibG9rdSBhZHJlc8OhxZllIChpdXplbD0laSwgYmxvaz0lYiwgxI3DrXM9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gaXV6bHUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIkl1emVsICVpIG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgaW1hZ2ljLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGVjacOhbG7DrSBzb3Vib3IgKHphxZnDrXplbsOtL3NvY2tldC9maWZvL3N5bWJvbGlja8O9IG9ka2F6LCBpdXplbCAlaSlcbiIKKyJtw6EgbmFzdGF2ZW4gcMWZw616bmFrIGltbXV0YWJsZSBuZWJvIGFwcGVuZC1vbmx5LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiSXV6ZWwgJWkgbcOhIG5hc3RhdmVuIHDFmcOtem5hayBrb21wcmltYWNlIG5hIHN5c3TDqW11IHNvdWJvcsWvIGJleiBwb2Rwb3J5IGtvbXByaW1hY2UuICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJTcGVjacOhbG7DrSAoemHFmcOtemVuw60vc29ja2V0L2ZpZm8pIGl1emVsICVpIG3DoSBuZW51bG92b3UgZMOpbGt1LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAwCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkl1emVsIMW+dXJuw6FsdSBzZSBuZXBvdcW+w612w6EsIGFsZSBvYnNhaHVqZSBkYXRhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICLFvXVybsOhbCBuZW7DrSBvYnnEjWVqbsO9IHNvdWJvci4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIkl1emVsICVpIGJ5bCBzb3XEjcOhc3TDrSBzZXpuYW11IG9zacWZZWzDvWNoIGl1emzFry4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNgorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIk5hbGV6ZW55IGl1emx5LCBrdGVyw6kgYnlseSBzb3XEjcOhc3TDrSBwb8Wha296ZW7DqWhvIHNwb2pvdsOpaG8gc2V6bmFtdSBvc2nFmWVsw71jaC4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMQorbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgc3RydWt0dXJ5IHJlZmNvdW50ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiQ2h5YmEgcMWZaSDEjXRlbsOtIGJsb2t1IHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIgcHJvIGl1emVsICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJJdXplbCAlaSBtw6EgxaFwYXRuw70gYmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiAoJW0pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIkJsb2sgcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiBtw6EgcG/EjWV0IG9ka2F6xa8gJXIsIG3Em2wgYnkgYsO9dCAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDYKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgesOhcGlzdSBibG9rdSByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViIG3DoSBoX2Jsb2NrcyA+IDEuICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU2Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBibG9rdSByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvICViLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJCbG9rIHJvesWhw63FmWVuw71jaCBhdHJpYnV0xa8gJWIgamUgcG/FoWtvemVuIChrb2xpemUgYWxva2FjZSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkJsb2sgcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiBqZSBwb8Wha296ZW4gKG5lcGxhdG7DvSBuw6F6ZXYpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkJsb2sgcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiBqZSBwb8Wha296ZW4gKG5lcGxhdG7DoSBob2Rub3RhKS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJJdXplbCAlaSBqZSBwxZnDrWxpxaEgdmVsa8OhLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MAorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgenDFr3NvYnVqZSwgxb5lIGFkcmVzw6HFmSBqZSBwxZnDrWxpxaEgdmVsa8O9LiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg1Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHpwxa9zb2J1amUsIMW+ZSBzb3Vib3IgamUgcMWZw61sacWhIHZlbGvDvS4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSB6cMWvc29idWplLCDFvmUgc3ltYm9saWNrw70gb2RrYXogamUgcMWZw61sacWhIHZlbGvDvS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIkl1emVsICVpIG3DoSBuYXN0YXZlbiBwxZnDrXpuYWsgSU5ERVhfRkwgbmEgc3lzdMOpbXUgc291Ym9yxa8gYmV6IHBvZHBvcnkgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJJdXplbCAlaSBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIElOREVYX0ZMLCBhbGUgbmVuw60gYWRyZXPDocWZLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJJdXplbCBIVFJFRSBhZHJlc8OhxZllICVpIG3DoSBuZXBsYXRuw70ga2/FmWVub3bDvSB1emVsLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWkgbcOhIG5lcG9kcG9yb3Zhbm91IHZlcnppIGhhc2hlICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiSXV6ZWwgSFRSRUUgYWRyZXPDocWZZSAlaSBwb3XFvsOtdsOhIG5la29tcGF0aWJpbG7DrSBwxZnDrXpuYWsga2/FmWVub3bDqWhvIHV6bHUgaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWkgbcOhIGhsb3Via3Ugc3Ryb211ICglTiksIGt0ZXLDoSBqZSBwxZnDrWxpxaEgdmVsa8OhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI1Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKyJJdXplbCDFoXBhdG7DvWNoIGJsb2vFryBtw6EgbmVwxZnDrW3DvSBibG9rICglYiksIGt0ZXLDvSBqZSB2wqByb3pwb3J1IHPCoG1ldGFkYXR5XG4iCisic291Ym9yb3bDqWhvIHN5c3TDqW11LiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIihabm92dSkgdnl0dm/FmWVuw60gaXV6bHUgcHJvIHptxJtueSB2ZWxpa29zdGkgc2VsaGFsbzogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkl1emVsICVpIG3DoSB2ZWxpa29zdCBuYXbDrWMgKCVJUyksIGt0ZXLDoSBuZW7DrSBwbGF0bsOhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJSb3rFocOtxZllbsO9IGF0cmlidXQgdsKgaXV6bHUgJWkgbcOhIGTDqWxrdSBqbcOpbmEgKCVOKSwga3RlcsOhIG5lbsOtIHBsYXRuw6FcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJSb3rFocOtxZllbsO9IGF0cmlidXQgdsKgaXV6bHUgJWkgbcOhIHBvemljaSBob2Rub3R5ICglTiksIGt0ZXLDoSBuZW7DrSBwbGF0bsOhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIlJvesWhw63FmWVuw70gYXRyaWJ1dCB2wqBpdXpsdSAlaSBtw6EgYmxvayBob2Rub3QgKCVOKSwga3RlcsO9IG5lbsOtIHBsYXRuw70gKG11c8OtIGLDvXQgMClcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIlJvesWhw63FmWVuw70gYXRyaWJ1dCB2wqBpdXpsdSAlaSBtw6EgdmVsaWtvc3QgaG9kbm90eSAoJU4pLCBrdGVyw6EgbmVuw60gcGxhdG7DoVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiUm96xaHDrcWZZW7DvSBhdHJpYnV0IHbCoGl1emx1ICVpIG3DoSBoYXNoICglTiksIGt0ZXLDvSBuZW7DrSBwbGF0bsO9XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjYKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIkl1emVsICVpIGplICVJdCwgYWxlIHZlIHNrdXRlxI1ub3N0aSB2eXBhZMOhIG5hIGFkcmVzw6HFmS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBwcm/EjcOtdMOhbsOtIHN0cm9tdSBAeCB2IGl1emx1ICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJQcsWvY2hvZCByb3pzYWh5IGl1emx1ICVpIHNlbGhhbFxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkl1emVsICVpIG3DoSBuZXBsYXRuw70gcm96c2FoXG4iCisiXHQobG9naWNrw70gYmxvayAlYywgbmVwbGF0bsO9IGZ5emlja8O9IGJsb2sgJWIsIGTDqWxrYSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJdXplbCAlaSBtw6EgbmVwbGF0bsO9IHJvenNhaFxuIgorIlx0KGxvZ2lja8O9IGJsb2sgJWMsIGZ5emlja8O9IGJsb2sgJWIsIG5lcGxhdG7DoSBkw6lsa2EgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICJJdXplbCAlaSBtw6EgbmFzdGF2ZW4gcMWZw616bmFrIEVYVEVOVFNfRkwgbmEgc3lzdMOpbXUgc291Ym9yxa8gYmV6IHBvZHBvcnkgcm96c2Foxa8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICJJdXplbCAlaSByb3pzYWhvdsO9IGZvcm3DoXQsIGFsZSBzdXBlcmJsb2t1IGNoeWLDrSB2bGFzdG5vc3QgRVhURU5UU1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiSXV6bHUgJWkgY2h5YsOtIEVYVEVOVF9GTCwgYWxlIGplIHbCoHJvenNhaG92w6ltIGZvcm3DoXR1XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiUnljaGzDvSBzeW1ib2xpY2vDvSBvZGtheiAlaSBuYSBuYXN0YXZlbm8gRVhURU5UX0ZMLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSXV6ZWwgJWkgbcOhIHpwxZllaMOhemVuw6kgcm96c2FoeVxuIgorIlx0KG5lcGxhdG7DvSBsb2dpY2vDvSBibG9rICVjLCBmeXppY2vDvSBibG9rICViLCBkw6lsa2EgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE2Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiSXV6ZWwgJWkgbcOhIG5lcGxhdG7DvSB1emVsIHJvenNhaMWvIChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIHDFmWV2b2R1IGJpdG1hcHkgYmxva8WvIHN1YmNsdXN0ZXJ1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNgorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkl1emVsIGt2w7N0eSBuZW7DrSBvYnnEjWVqbsO9IHNvdWJvci4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiSXV6ZWwga3bDs3R5IHNlIG5lcG91xb7DrXbDoSwgYWxlIG9ic2FodWplIGRhdGEuICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzYKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJJdXplbCBrdsOzdHkgamUgcHJvIHXFvml2YXRlbGUgdmlkaXRlbG7DvS4gIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQxCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiSXV6ZWwgxaFwYXRuw71jaCBibG9rxa8gc2UgemTDoSBiw710IG5lcGxhdG7DvS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkl1emVsICVpIG3DoSByb3pzYWggb8KgbnVsb3bDqSBkw6lsY2VcbiIKKyJcdChuZXBsYXRuw70gbG9naWNrw70gYmxvayAlYywgZnl6aWNrw70gYmxvayAlYilcbiIKKworIyA/Pz8gV1RGCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyLDmnJvdmXFiCB2bml0xZluw61jaCByb3pzYWhvdsO9IHV6bMWvICVOIGl1emx1ICVpOlxuIgorIkxvZ2lja8O9IHphxI3DoXRlayAlYiBuZW9kcG92w61kw6EgbG9naWNrw6ltdSB6YcSNw6F0a3UgJWMgbmEgZGFsxaHDrSDDunJvdm5pLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkl1emVsICVpLCBrb25lYyByb3pzYWh1IHDFmWVrcmHEjXVqZSBwb3ZvbGVub3UgaG9kbm90dVxuIgorIlx0KGxvZ2lja8O9IGJsb2sgJWMsIGZ5emlja8O9IGJsb2sgJWIsIGTDqWxrYSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY3Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTcG91xaF0w61tIGRvZGF0ZcSNbsOpIHByxa9jaG9keSwgYWJ5Y2ggdnnFmWXFoWlsIGJsb2t5LCBrZSBrdGVyw71tIHNlIGhsw6Fzw61cbiIKKyJ2w61jZSBpdXpsxa/igKZcbiIKKyJQcsWvY2hvZCAxQjogWm5vdnUgdnnFoWV0xZl1amkgdsOtY2Uga3LDoXQgYWxva292YW7DqSBibG9reVxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJWw61jZSBrcsOhdCBhbG9rb3ZhbsO9KMOpKSBibG9rKHkpIHbCoGl1emx1ICVpOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgemtvdW3DoW7DrSBpdXpsxa8gKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgYWxva2FjaSBiaXRtYXB5IGl1emzFryAoaW5vZGVfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBpdGVyYWNpIHDFmWVzIGJsb2t5IHbCoGl1emx1ICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMyBlMmZzY2svcHJvYmxlbS5jOjEzMTgKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgw7pwcmF2xJsgcG/EjXR1IG9ka2F6xa8gYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYiAoaXV6ZWwgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDA4Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJQcsWvY2hvZCAxQzogSGxlZMOhbsOtIGl1emzFryBzIGR1cGxpa292YW7DvW1pIGJsb2t5IHYgYWRyZXPDocWZw61jaC5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE0Cittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlByxa9jaG9kIDFEOiBPcHJhdnVqaSBkdXBsaWvDoXRuw60gYmxva3lcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTkKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiU291Ym9yICVRIChpdXplbCAlaSwgxI1hcyB6bcSbbnkgJUlNKSBcbiIKKyIgIG3DoSAlciBkdXBsaWtvdmFuw70oY2gpIGJsb2soxa8pIHNkw61sZW7DvShjaCkgbWV6aSAlTiBzb3Vib3J5L3NvdWJvcmVtOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1Cittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIiAgICAgICAgJVEgKGl1emVsICVpLCDEjWFzIHptxJtueSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMAorbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZGF0YSBzeXN0w6ltdSBzb3Vib3LFrz5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEV4aXN0dWplICVOIGl1emzFryBvYnNhaHVqw61jw61jaCB2w61jZSBrcsOhdCBhbG9rb3ZhbsOpIGJsb2t5LilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0MAorbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1cGxpa8OhdG7DrSBibG9reSBqacW+IHDFmWnFmWF6ZW55IG5lYm8gbmFrbG9ub3bDoW55LlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiTmVtb2h1IGtsb25vdmF0IHNvdWJvcjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1OQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlByxa9jaG9kIDI6IEtvbnRyb2x1amUgc2Ugc3RydWt0dXJ1IGFkcmVzw6HFmcWvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIsWgcGF0bsOpIMSNw61zbG8gaXV6bHUgcHJvIOKAni7igJwgdiBpdXpsdSBhZHJlc8OhxZllICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY5Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHbCoCVwICglaSkgbcOhIMWhcGF0bsOpIMSNw61zbG8gaXV6bHU6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzQKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSBtw6Egb2RzdHJhbsSbbsO9L25lcG91xb7DrXZhbsO9IGl1emVsICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc5Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgamUgb2RrYXogbmEg4oCeLuKAnCAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NAorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIHVrYXp1amUgbmEgaXV6ZWwgKCVEaSkgdW3DrXN0xJtuw70gdmUgxaFwYXRuw6ltIGJsb2t1LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4OQorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIGplIG9ka2F6IG5hIGFkcmVzw6HFmSAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NAorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHYgJXAgKCVpKSBqZSBvZGtheiBuYSBrb8WZZW5vdsO9IGl1emVsLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5OQorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgbcOhIHZlIHN2w6ltIGptw6luxJsgbmVwbGF0bsOpIHpuYWt5LlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQ2h5YsOtIOKAni7igJwgdsKgaXV6bHUgYWRyZXPDocWZZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQ2h5YsOtIOKAni4u4oCcIHbCoGl1emx1IGFkcmVzw6HFmWUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE0Cittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiUHJ2bsOtIHBvbG/FvmthIOKAniVEbuKAnCAoaXV6ZWw9JURpKSB2wqBpdXpsdSBhZHJlc8OhxZllICVpICglcCkgYnkgbcSbbGEgYsO9dCDigJ4u4oCcXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiRHJ1aMOhIHBvbG/FvmthIOKAniVEbuKAnCAoaXV6ZWw9JURpKSB2wqBpdXpsdSBhZHJlc8OhxZllICVpIGJ5IG3Em2xhIGLDvXQg4oCeLi7igJxcbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjQKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlSUYsIG3Em2xhIGJ5IGLDvXQgbnVsYS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjkKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbCBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlSWYsIG3Em2xvIGJ5IGLDvXQgbnVsYS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNAorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlTiwgbcSbbG8gYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzkKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnJhZyBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlTiwgbcSbbG8gYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ0Cittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mc2l6ZSBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlTiwgbcSbbGEgYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0OQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIkl1emVsICVpICglUSkgbcOhIMWhcGF0bsO9IG3Ds2QgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkl1emVsIGFkcmVzw6HFmWUgJWksICVCLCBwb3N1biAlTjogYWRyZXPDocWZIHBvxaFrb3plblxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1OQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJJdXplbCBhZHJlc8OhxZllICVpLCBibG9rICVCLCBwb3ppY2UgJU46IG7DoXpldiBzb3Vib3J1IHDFmcOtbGnFoSBkbG91aMO9XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NAorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAiSXV6ZWwgYWRyZXPDocWZZSAlaSBtw6EgbmVhbG9rb3ZhbsO9ICVCLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIlBvbG/FvmthIGFkcmVzw6HFmWUg4oCeLuKAnCB2wqBpdXpsdSBhZHJlc8OhxZllICVpIG5lbsOtIHVrb27EjWVuYSBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiUG9sb8W+a2EgYWRyZXPDocWZZSDigJ4uLuKAnCB2wqBpdXpsdSBhZHJlc8OhxZllICVpIG5lbsOtIHVrb27EjWVuYSBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiSXV6ZWwgJWkgKCVxKSBqZSBuZXBsYXRuw6kgem5ha292w6kgemHFmcOtemVuw60uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkl1emVsICVpICglUSkgamUgbmVwbGF0bsOpIGJsb2tvdsOpIHphxZnDrXplbsOtLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkgamUgZHVwbGlrw6F0bsOtIHBvbG/FvmthIOKAni7igJwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NAorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIGplIGR1cGxpa8OhdG7DrSBwb2xvxb5rYSDigJ4uLuKAnC5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk5IGUyZnNjay9wcm9ibGVtLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iCittc2dzdHIgIkludGVybsOtIGNoeWJhOiBuZW1vaHUgbmFqw610IGRpcl9pbmZvIHBybyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA0Cittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHbCoCVwICglaSkgbcOhIHJlY19sZW4gJURyLCBtxJtsYSBieSBiw710ICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgc3RydWt0dXJ5IGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBpdGVyb3bDoW7DrSBwxZllcyBibG9reSBhZHJlc8OhxZllOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgxI10ZW7DrSBibG9rdSBhZHJlc8OhxZllICViIChpdXplbCAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6w6FwaXN1IGJsb2t1IGFkcmVzw6HFmWUgJWIgKGl1emVsICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgbm92w6lobyBibG9rdSBhZHJlc8OhxZllIHBybyBpdXplbCAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgZGVhbG9rYWNpIGl1emx1ICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIlBvbG/FvmthIGFkcmVzw6HFmWUgcHJvIOKAni7igJwgdsKgJXAgKCVpKSBqZSB2ZWxrw6EuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBGSUZPLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDQKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEZJRk8uXG4iCittc2dzdHIgIkl1emVsICVpICglUSkgamUgbmVwbGF0bsOhIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0OQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJJdXplbCAlaSAoJVEpIGplIG5lcGxhdG7DvSBzb2NrZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgZmlsZXR5cGUgcHJvIHBvbG/Fvmt1IOKAniVEbuKAnCB2ICVwICglaSkgbmEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU5Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdsKgJXAgKCVpKSBtw6EgY2h5Ym7DvSBmaWxldHlwZSAoYnlsICVEdCwgbcSbbCBieSBiw710ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjQKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdiAlcCAoJWkpIG3DoSBuYXN0YXZlbiBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjkKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICJQb2xvxb5rYSDigJ4lRG7igJwgdsKgJXAgKCVpKSBtw6EgbsOhemV2IG51bG92w6kgZMOpbGt5LlxuIgorCisjLiBALWV4cGFuZGVkOiBTeW1saW5rICVRIChpbm9kZSAjJWkpIGlzIGludmFsaWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3NAorbXNnaWQgIlN5bWxpbmsgJVEgKEBpICMlaSkgaXMgQG4uXG4iCittc2dzdHIgIlN5bWJvbGlja8O9IG9ka2F6ICVRIChpdXplbCAjJWkpIG5lbsOtIHBsYXRuw70uXG4iCisKKyMgRklYTUU6IEBGIGFscmVhZHkgZW5kcyB3aXRoICdpcycKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzkKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQmxvayByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvIHBybyBpdXplbCAlaSAoJVEpIG5lbsOtIHBsYXRuw70gKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg0Cittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gb2JzYWh1amUgdmVsa8OpIHNvdWJvcnksIGFsZSB2IHN1cGVyYmxva3UgbmVtw6EgcMWZw616bmFrIExBUkdFX0ZJTEUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODkKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDogbmEgJUIgbmVleGlzdHVqZSBvZGthelxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiBuYSAlQiB2ZWRvdSBkdmEgb2RrYXp5XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6ICVCIG3DoSDFoXBhdG7DvSBtaW4gaGFzaFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDQKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiAlQiBtw6EgxaFwYXRuw70gbWF4IGhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA5Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiTmVwbGF0bsO9IGl1emVsIEhUUkVFIGFkcmVzw6HFmWUgJWQgKCVxKS4gIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTMKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkICglcSk6IMWhcGF0bsOpIMSNw61zbG8gYmxva3UgJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJQcm9ibMOpbSB2wqBpdXpsdSBIVFJFRSBhZHJlc8OhxZllICVkOiBrb8WZZW5vdsO9IHV6ZWwgbmVuw60gcGxhdG7DvVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjgKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDogJUIgbcOhIMWhcGF0bsO9IGxpbWl0ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMzCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6ICVCIG3DoSDFoXBhdG7DvSBwb8SNZXQgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiUHJvYmzDqW0gdsKgaXV6bHUgSFRSRUUgYWRyZXPDocWZZSAlZDogJUIgbcOhIG5lc2V0xZnDrWTEm25vdSBoYXNoIHRhYnVsa3VcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQzCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIlByb2Jsw6ltIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQ6ICVCIG3DoSDFoXBhdG5vdSBobG91Ymt1ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0OAorbXNnaWQgIkR1cGxpY2F0ZSBARSBmb3VuZC4gICIKK21zZ3N0ciAiTmFsZXplbmEgZHVwbGlrw6F0bsOtIHBvbG/FvmthIOKAniVEbuKAnCB2ICVwICglaSkuICIKKworIyBGSVhNRTogbm8tYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTMKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiUG9sb8W+a2Eg4oCeJURu4oCcIHbCoCVwICglaSkgbmVtw6EgamVkaW5lxI1uw70gbsOhemV2IHNvdWJvcnUuXG4iCisiUMWZZWptZW5vdmF0IG5hICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJOYWxlemVuYSBkdXBsaWvDoXRuw60gcG9sb8W+a2Eg4oCeJURu4oCcLlxuIgorIlx0T3puYcSNdWppICVwICglaSkgcHJvIHDFmWVzdGF2YnUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYzCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIHBybyBpdXplbCAlaSAoJVEpIGplICVOLCBtxJtsIGJ5IGLDvXQgbnVsYS5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJOZW/EjWVrw6F2YW7DvSBibG9rIHbCoGl1emx1IEhUUkVFIGFkcmVzw6HFmWUgJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzcyCittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIlBvbG/FvmthIOKAniVEaeKAnCB2wqAlcCAoJWkpIG9ka2F6dWplIG5hIGl1emVsICVEaSB2ZSBza3VwaW7EmyAlZywga2RlIGplIG5hc3RhdmVubyBfSU5PREVfVU5JTklULlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzcKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiUG9sb8W+a2Eg4oCeJURu4oCcIHbCoCVwICglaSkgb2RrYXp1amUgbmEgaXV6ZWwgJURpIG5hbGV6ZW7DvSB2ZSBza3VwaW7EmyAlZyBvYmxhc3RpIG5lcG91xb5pdMO9Y2ggaXV6bMWvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgyCittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBwcm8gaXV6ZWwgJWkgKCVRKSBqZSAlTiwgbcSbbG8gYnkgYsO9dCBudWxhLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg5Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUHLFr2Nob2QgMzogS29udHJvbHVqZSBzZSBkb3Nhxb5pdGVsbm9zdCBhZHJlc8OhxZnFr1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIktvxZllbm92w70gaXV6ZWwgbmVhbG9rb3bDoW4uICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiTmVuw60gbcOtc3RvIHYgYWRyZXPDocWZaSBsb3N0K2ZvdW5kLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk5lcMWZaXBvamVuw70gYWRyZXPDocWZb3bDvSBpdXplbCAlaSAoJXApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA5Cittc2dpZCAiL0BsIG5vdCBmb3VuZC4gICIKK21zZ3N0ciAiL2xvc3QrZm91bmQgbmVuYWxlemVuby4gIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNAorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICLigJ4uLuKAnCB2ICVRICglaSkgamUgJVAgKCVqKSwgbcSbbG8gYnkgYsO9dCAlcSAoJWQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE5Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICLFoHBhdG7DqSBuZWJvIG5lZXhpc3R1asOtY8OtIC9sb3N0K2ZvdW5kLiBOZW1vaHUgem5vdnUgcMWZaXBvaml0LlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIk5lbW9odSB6dsSbdMWhaXQgL2xvc3QrZm91bmQ6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJOZW1vaHUgem5vdnUgcMWZaXBvaml0ICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBwb2t1c3UgbmFqw610IC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jazogJW0gcMWZaSBwb2t1c3Ugdnl0dm/FmWl0IGFkcmVzw6HFmSAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZTogJW0gcMWZaSBwb2t1c3Ugdnl0dm/FmWl0IGFkcmVzw6HFmSAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gcMWZaSBwb2t1c3Ugdnl0dsOhxZllbsOtIG5vdsOpaG8gYWRyZXPDocWZZSAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHDFmWkgesOhcGlzdSBibG9rdSBhZHJlc8OhxZllIHBybyAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJDaHliYSBwxZlpIMO6cHJhdsSbIMSNZXRub3N0aSBpdXpsdSB2wqBpdXpsdSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTmVtb2h1IG9wcmF2aXQgcm9kacSNZSBpdXpsdSAlaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJOZW1vaHUgb3ByYXZpdCByb2RpxI1lIGl1emx1ICVpOiBOZW1vaHUgbmFqw610IHBvbG/Fvmt1IHJvZGnEjW92c2vDqWhvIGFkcmVzw6HFmWVcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB2eXR2w6HFmWVuw60ga2/FmWVub3bDqWhvIGFkcmVzw6HFmWUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB2eXR2w6HFmWVuw60gYWRyZXPDocWZZSAvbG9zdCtmb3VuZCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4OQorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiS2/FmWVub3bDvSBpdXplbCBuZW7DrSBhZHJlc8OhxZk7IGtvbsSNw61tLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk0Cittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJOZW1vaHUgcG9rcmHEjW92YXQgYmV6IGtvxZllbm92w6lobyBpdXpsdS5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgbmVuw60gYWRyZXPDocWZIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiUHLFr2Nob2QgM0E6IE9wdGltYWxpenVqaSBhZHJlc8OhxZllXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiTmVtb2h1IHZ5dHZvxZlpdCBpdGVyw6F0b3IgZGlyc190b19oYXNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIk5lbW9odSBvcHRpbWFsaXpvdmF0IGFkcmVzw6HFmSAlcSAoJWQpOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltYWxpenVqaSBhZHJlc8OhxZllOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQcsWvY2hvZCA0OiBLb250cm9sdWrDrSBzZSBwb8SNdHkgb2RrYXrFr1xuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIk9zacWZZWzDvSBpdXplbCAlaSBzwqBudWxvdm91IGTDqWxrb3UuICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiT3NpxZllbMO9IGl1emVsICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIlBvxI1ldCBvZGthesWvIG5hIGl1emVsICVpIGplICVJbCwgbcSbbCBieSBiw710ICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVkFST1bDgU7DjTogQ0hZQkEgUMWYSSBQUk9HUkFNT1bDgU7DjSBFMkZTQ0shXG4iCisiXHRORUJPIE7EmktETyBOQVRWUkRMw50gKFZZKSBLT05UUk9MVUpFIFDFmElQT0pFTsOdIChQT1XFvcONVkFOw50pIFNZU1TDiU1cbiIKKyJcdFNPVUJPUsWuLlxuIgorImlub2RlX2xpbmtfaW5mb1slaV0gamUgJU4sIGlub2RlLmlfbGlua3NfY291bnQgamUgJUlsLiBNxJtseSBieSBiw710IHN0ZWpuw6khXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzIKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUHLFr2Nob2QgNTogS29udHJvbHVqw60gc2Ugc291aHJubsOpIGluZm9ybWFjZSBza3VwaW5cbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc3Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJWw71wbMWIIG5hIGtvbmNpIGJpdG1hcHkgaXV6bMWvIG5lbsOtIG5hc3RhdmVuYS4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODIKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlbDvXBsxYggbmEga29uY2kgYml0bWFweSBibG9rxa8gbmVuw60gbmFzdGF2ZW5hLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODcKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJSb3pkw61seSB2IGJpdG1hcMSbIGJsb2vFrzogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA3Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiUm96ZMOtbHkgdiBiaXRtYXDEmyBpdXpsxa86ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjcKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlBvxI1ldCB2b2xuw71jaCBpdXpsxa8gdmUgc2t1cGluxJsgxI0u4oCvJWcgxaFwYXRuxJsgKCVpLCBzcG/EjXRlbm89JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzMgorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiUG/EjWV0IGFkcmVzw6HFmcWvIHZlIHNrdXBpbsSbIMSNLuKAryVnIMWhcGF0bsSbICglaSwgc3BvxI10ZW5vPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM3Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiUG/EjWV0IHZvbG7DvWNoIGl1emzFryDFoXBhdG7EmyAoJWksIHNwb8SNdGVubz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQyCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJQb8SNZXQgdm9sbsO9Y2ggYmxva8WvIHZlIHNrdXBpbsSbIMSNLuKAryVnIMWhcGF0bsSbICglYiwgc3BvxI10ZW5vPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ3Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiUG/EjWV0IHZvbG7DvWNoIGJsb2vFryDFoXBhdG7EmyAoJWIsIHNwb8SNdGVubz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjUyCittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICJDSFlCQSBQxZhJIFBST0dSQU1PVsOBTsONOiBocmFuaWNlICglYiwgJWMpIGJpdG1hcHkgc3lzdMOpbXUgc291Ym9yxa8gKCMlTikgbmVvZHBvdsOtZGFqw60gdnlwb8SNdGVuw71tIGhyYW5pY8OtbSBiaXRtYXB5ICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYTogcG9rYcW+ZW7DvSBrb25lYyBiaXRtYXB5ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGtvcMOtcm92w6Fuw60gZG8gbsOhaHJhZG7DrSBiaXRtYXB5IGl1emzFrzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJDaHliYSBwxZlpIGtvcMOtcm92w6Fuw60gZG8gbsOhaHJhZG7DrSBiaXRtYXB5IGJsb2vFrzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MworIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiQmxvayh5KSBza3VwaW55ICVnIGplL2pzb3UgcG91xb7DrXbDoW4oeSksIGFsZSBza3VwaW5hIGplIG96bmHEjWVuYSBqYWtvIEJMT0NLX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICJJdXplbC9pdXpseSBza3VwaW55ICVnIGplL2pzb3UgcG91xb7DrXbDoW4oeSksIGFsZSBza3VwaW5hIGplIG96bmHEjWVuYSBqYWtvIElOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MDUKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiWm5vdnUgdnl0dm/FmWl0IMW+dXJuw6FsIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MTAKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiQWt0dWFsaXpvdmF0IMO6ZGFqZSBvwqBrdsOzdMOhY2ggcHJvIGRydWgga3bDs3QgJU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIk5lb2JzbG91xb5lbsO9IGvDs2QgY2h5YnkgKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NTQgZTJmc2NrL3Byb2JsZW0uYzoxOTU4Cittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiSUdOT1JPVsOBTk8iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJQb3XFvml0w6EgcGFtxJvFpTogJWQsIHN0csOhdmVuw70gxI1hczogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2l6ZSBvZiBpbm9kZT0lZFxuIgorbXNnc3RyICJ2ZWxpa29zdCBpdXpsdT0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJwxZlpIHNwb3XFoXTEm27DrSBwcm9obMOtZGt5IGl1emzFryIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAicMWZaSBwcm92w6FkxJtuw60gcHJvaGzDrWRreSBpdXpsxa8iCisKKyM6IGUyZnNjay9zdXBlci5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAicMWZaSB2b2zDoW7DrSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwcm8gaXV6ZWwgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAicMWZaSB2b2zDoW7DrSBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBwcm8gaXV6ZWwgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MgorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIlVzZWvDoXbDoW0iCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MworbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJNYcW+dSIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJQb3XFvml0w606ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxva10gWy1CIHZlbGlrb3N0X2Jsb2t1XVxuIgorIlx0XHRbLUkgYmxva3lfaXV6bG92w71jaF9idWZmZXLFr10gWy1QIHZlbGlrb3N0X3pwcmFjb3bDoXZhbsO9Y2hfaXV6bMWvXVxuIgorIlx0XHRbLWx8LUwgc291Ym9yX8WhcGF0bsO9Y2hfYmxva8WvXSBbLUMgZmRdIFstaiBleHRlcm7DrV/FvnVybsOhbF1cbiIKKyJcdFx0Wy1FIHJvesWhw63FmWVuw6ktcMWZZXDDrW5hxI1lXSB6YcWZw616ZW7DrVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiTsOhcG92xJtkYSB2IG5vdXppOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWNrw6Egb3ByYXZhICjFvsOhZG7DqSBvdMOhemt5KVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBOZXByb3bDoWTEm3Qgxb7DoWRuw6kgem3Em255IHN5c3TDqW11IHNvdWJvcsWvXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIFDFmWVkcG9rbMOhZGF0IOKAnmFub+KAnCB1wqB2xaFlY2ggb3TDoXpla1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBIbGVkYXQgxaFwYXRuw6kgYmxva3kgYSBwxZlpZGF0IGplIGRvIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa9cbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgVnludXRpdCBrb250cm9sdSwgaSBrZHnFviBqZSBzeXN0w6ltIHNvdWJvcsWvIG96bmHEjWVuIMSNaXN0w71cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIELDvXQgcG9kcm9ibsO9XG4iCisiIC1iIHN1cGVyYmxvayAgICAgICAgIFBvdcW+w610IGFsdGVybmF0aXZuw60gc3VwZXJibG9rXG4iCisiIC1CIHZlbGlrb3N0X2Jsb2t1ICAgIFZudXRpdCB2ZWxpa29zdCBibG9rdSBwxZlpIGhsZWTDoW7DrSBzdXBlcmJsb2t1XG4iCisiIC1qIGV4dGVybsOtX8W+dXJuw6FsICAgIE5hc3Rhdml0IHVtw61zdMSbbsOtIGV4dGVybsOtaG8gxb51cm7DoWx1XG4iCisiIC1sIHNvdWJvcl/FoXBhdG7DvWNoX2Jsb2vFr1xuIgorIiAgICAgICAgICAgICAgICAgICAgICBQxZlpZGF0IGRvIHNlem5hbXUgxaFwYXRuw71jaCBibG9rxa9cbiIKKyIgLUwgc291Ym9yX8WhcGF0bsO9Y2hfYmxva8WvXG4iCisiICAgICAgICAgICAgICAgICAgICAgIE5hc3Rhdml0IHNlem5hbSDFoXBhdG7DvWNoIGJsb2vFr1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJSd1LyUndSBzb3Vib3LFryAoJTBkLCVkICUlIG5lc291dmlzbMO9Y2gpLCAlJ2xsdS8lJ2xsdSBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBwb3XFvml0w70gaXV6ZWwgKCUyLjJm4oCvJSUgesKgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IHBvdcW+aXTDqSBpdXpseSAoJTIuMmbigK8lJcKgesKgJXUpXG4iCittc2dzdHJbMl0gIiIKKyJcbiIKKyIlMTJ1IHBvdcW+aXTDvWNoIGl1emzFryAoJTIuMmbigK8lJSB6wqAldSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgbmVzb3V2aXNsw70gc291Ym9yICglMGQsJWTigK8lJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuZXNvdXZpc2zDqSBzb3Vib3J5ICglMGQsJWTigK8lJSlcbiIKK21zZ3N0clsyXSAiJTEydSBuZXNvdXZpc2zDvWNoIHNvdWJvcsWvICglMGQsJWTigK8lJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuZXNvdXZpc2zDvSBhZHJlc8OhxZkgKCUwZCwlZOKAryUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5lc291dmlzbMOpIGFkcmVzw6HFmWUgKCUwZCwlZOKAryUlKVxuIgorbXNnc3RyWzJdICIlMTJ1IG5lc291dmlzbMO9Y2ggYWRyZXPDocWZxa8gKCUwZCwlZOKAryUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgIFBvxI1ldCBpdXpsxa8gc8KgaW5kL2RpbmQvdGluZCBibG9reTogJSd1LyUndS8lJ3VcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgSGlzdG9ncmFtIGhsb3Via3kgcm96c2FodTogIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiUxMmxsdSBwb3XFvml0w70gYmxvayAoJTIuMmbigK8lJSB6wqAlbGx1KVxuIgorbXNnc3RyWzFdICIlMTJsbHUgcG91xb5pdMOpIGJsb2t5ICglMi4yZuKAryUlIHrCoCVsbHUpXG4iCittc2dzdHJbMl0gIiUxMmxsdSBwb3XFvml0w71jaCBibG9rxa8gKCUyLjJm4oCvJSUgesKgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgY2h5Ym7DvSBibG9rXG4iCittc2dzdHJbMV0gIiUxMnUgY2h5Ym7DqSBibG9reVxuIgorbXNnc3RyWzJdICIlMTJ1IGNoeWJuw71jaCBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB2ZWxrw70gc291Ym9yXG4iCittc2dzdHJbMV0gIiUxMnUgdmVsa8OpIHNvdWJvcnlcbiIKK21zZ3N0clsyXSAiJTEydSB2ZWxrw71jaCBzb3Vib3LFr1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBvYnnEjWVqbsO9IHNvdWJvclxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBvYnnEjWVqbsOpIHNvdWJvcnlcbiIKK21zZ3N0clsyXSAiIgorIlxuIgorIiUxMnUgb2J5xI1lam7DvWNoIHNvdWJvcsWvXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJTEydSBhZHJlc8OhxZlcbiIKK21zZ3N0clsxXSAiJTEydSBhZHJlc8OhxZllXG4iCittc2dzdHJbMl0gIiUxMnUgYWRyZXPDocWZxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgem5ha292w6kgemHFmcOtemVuw61cbiIKK21zZ3N0clsxXSAiJTEydSB6bmFrb3bDoSB6YcWZw616ZW7DrVxuIgorbXNnc3RyWzJdICIlMTJ1IHpuYWtvdsO9Y2ggemHFmcOtemVuw61cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJsb2tvdsOpIHphxZnDrXplbsOtXG4iCittc2dzdHJbMV0gIiUxMnUgYmxva292w6EgemHFmcOtemVuw61cbiIKK21zZ3N0clsyXSAiJTEydSBibG9rb3bDvWNoIHphxZnDrXplbsOtXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgcm91cmFcbiIKK21zZ3N0clsxXSAiJTEydSByb3VyeVxuIgorbXNnc3RyWzJdICIlMTJ1IHJvdXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBvZGthelxuIgorbXNnc3RyWzFdICIlMTJ1IG9ka2F6eVxuIgorbXNnc3RyWzJdICIlMTJ1IG9ka2F6xa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIlMTJ1IHN5bWJvbGlja8O9IG9ka2F6IgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbGlja8OpIG9ka2F6eSIKK21zZ3N0clsyXSAiJTEydSBzeW1ib2xpY2vDvWNoIG9ka2F6xa8iCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIigldSByeWNobMO9IHN5bWJvbGlja8O9IG9ka2F6KVxuIgorbXNnc3RyWzFdICIoJXUgcnljaGzDqSBzeW1ib2xpY2vDqSBvZGthenkpXG4iCittc2dzdHJbMl0gIigldSByeWNobMO9Y2ggc3ltYm9saWNrw71jaCBvZGthesWvKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKK21zZ3N0clsxXSAiJTEydSBzb2NrZXR5XG4iCittc2dzdHJbMl0gIiUxMnUgc29ja2V0xa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBzb3Vib3JcbiIKK21zZ3N0clsxXSAiJTEydSBzb3Vib3J5XG4iCittc2dzdHJbMl0gIiUxMnUgc291Ym9yxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk4NSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgInDFmWkgemppxaHFpW92w6Fuw60sIGplc3RsaSBqZSAlcyBwxZlpcG9qZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjI1MgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgJXMuXG4iCittc2dzdHIgIlBvem9yISAlcyBqZSAlcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJXMuXG4iCittc2dzdHIgIiVzIGplICVzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisiTmVtb2h1IHBva3JhxI1vdmF0LCBrb27EjcOtbS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJQT1pPUiEhISBTb3Vib3JvdsO9IHN5c3TDqW0gamUgcMWZaXBvamVuLiBCdWRldGUtbGkgcG9rcmHEjW92YXQsXG4iCisiKioqWlDFrlNPQsONVEUgVsOBxb1Ow4kqKiogcG/FoWtvemVuw60gc3lzdMOpbXUgc291Ym9yxa8uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY5Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJDaGNldGUgb3ByYXZkdSBwb2tyYcSNb3ZhdCIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAia29udHJvbGEgcMWZZXJ1xaFlbmEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzYxCittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBvYnNhaHVqZSBzeXN0w6ltIHNvdWJvcsWvIHMgY2h5YmFtaSIKKworIzogZTJmc2NrL3VuaXguYzozNjMKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5lYnlsIMSNaXN0xJsgb2Rwb2plbiIKKworIzogZTJmc2NrL3VuaXguYzozNjUKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIHZsYXN0bm9zdGkgcHJpbcOhcm7DrWhvIHN1cGVyYmxva3Ugc2UgbGnFocOtIG9kIHrDoWxvxb5uw61obyIKKworIzogZTJmc2NrL3VuaXguYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgYnlsIHDFmWlwb2plbiAldWtyw6F0IGJleiBrb250cm9seSIKKworIzogZTJmc2NrL3VuaXguYzozNzYKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIG3DoSDEjWFzIHBvc2xlZG7DrSBrb250cm9seSBzeXN0w6ltdSBzb3Vib3LFryB2wqBidWRvdWNub3N0aSIKKworIzogZTJmc2NrL3VuaXguYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgbmVieWwga29udHJvbG92w6FuICV1IGRuw60iCisKKyM6IGUyZnNjay91bml4LmM6MzkxCittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwga29udHJvbGEgdnludWNlbmEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiDEjWlzdMO9LCAlJ3UvJSd1IHNvdWJvcsWvLCAlJ2xsdS8lJ2xsdSBibG9rxa8iCisKKyM6IGUyZnNjay91bml4LmM6NDQzCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoa29udHJvbGEgb2Rsb8W+ZW5hLCBixJvFvsOtbSBuYcKgYmF0ZXJpaSkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ2Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChrb250cm9sYSBwbyBwxZnDrcWhdMOtbSBwxZlpcG9qZW7DrSkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoa29udHJvbGEgemEgJWxkIHDFmWlwb2plbsOtKSIKKworIzogZTJmc2NrL3VuaXguYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiQ0hZQkE6IE5lbW9odSBvdGV2xZnDrXQgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJOZXBsYXRuw6EgdmVyemUgRUEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJOZXpuw6Ftw70gcm96xaHDrcWZZW7DvSBwxZllcMOtbmHEjTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJTeW50YWt0aWNrw6EgY2h5YmEgdsKga29uZmlndXJhxI1uw61tIHNvdWJvcnUgZTJmc2NrICglcywgxZnDoWRlayDEjS7CoCVkKVxuIgorIlx0JXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgdmFsaWRhdGluZyBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkNoeWJhIHDFmWkgb3bEm8WZb3bDoW7DrSBwbGF0bm9zdGkgZGVza3JpcHRvcnUgc291Ym9ydSAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3OTIKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJOZXBsYXRuw70gZGVza3JpcHRvciBzb3Vib3LFryBpbmZvcm1hY2UgbyBkb2tvbsSNZW7DrSIKKworIzogZTJmc2NrL3VuaXguYzo4MDcKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIk3Fr8W+ZSBiw710IHphZMOhbiBqZW4gamVkZW4gesKgcMWZZXDDrW5hxI3FryAtcC8tYSwgLW4gbmVibyAteS4iCisKKyM6IGUyZnNjay91bml4LmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJQxZllcMOtbmHEjSAtdCBuZW7DrSB2IHTDqXRvIHZlcnppIGUyZnNjayBwb2Rwb3JvdsOhbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NTkgZTJmc2NrL3VuaXguYzo5MzEgbWlzYy90dW5lMmZzLmM6ODExIG1pc2MvdHVuZTJmcy5jOjExMDAKKyM6IG1pc2MvdHVuZTJmcy5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiTmVsemUgdnnFmWXFoWl0IOKAniVz4oCcIgorCisjOiBlMmZzY2svdW5peC5jOjkxMAorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lIC1uIGEgLUQgc2UgdnrDoWplbW7EmyB2eWx1xI11asOtLiIKKworIzogZTJmc2NrL3VuaXguYzo5MTUKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlDFmWVww61uYcSNZSAtbiBhIC1jIHNlIHZ6w6FqZW1uxJsgdnlsdcSNdWrDrS4iCisKKyM6IGUyZnNjay91bml4LmM6OTIwCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJQxZllcMOtbmHEjWUgLW4gYSAtbC8tTCBzZSB2esOhamVtbsSbIHZ5bHXEjXVqw60uIgorCisjOiBlMmZzY2svdW5peC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIlDFmWVww61uYcSNZSAtYyBhIC1sLy1MIG5lbW9ob3UgYsO9dCBwb3XFvml0eSB6w6Fyb3ZlxYguXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcg4oCeJXPigJwgbmVuw60gY2Vsw71tIMSNw61zbGVtXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lcGxhdG7DvSBuZcSNw61zZWxuw70gYXJndW1lbnQgdcKgLSVjICjigJ4lc+KAnClcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlIHdhaXQuLi5cbiIKK21zZ3N0ciAiSW50ZXJ2YWwgTU1QIGplICV1IHNla3VuZCBhIGNlbGtvdsOhIGRvYmEgxI1la8OhbsOtIGplICV1IHNla3VuZC4gUHJvc8OtbSBvwqBzdHJwZW7DreKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJwxZlpIGtvbnRyb2xlIGJsb2t1IE1NUCIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ0IG1pc2MvdHVuZTJmcy5jOjE5MTIKK21zZ2lkICIiCisiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKyIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iCittc2dzdHIgIiIKKyJKc3RlLWxpIHNpIGppc3RpLCDFvmUgc291Ym9yb3bDvSBzeXN0w6ltIG5lbsOtIHBvdcW+w612w6FuIG5hIMW+w6FkbsOpbSB1emx1LCBzcHVzxaV0ZTpcbiIKKyLigJ50dW5lMmZzIC1mIC1FIGNsZWFyX21tcCBaQcWYw41aRU7DjeKAnFxuIgorCisjOiBlMmZzY2svdW5peC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIkNoeWJhOiBzdGFyw6EgdmVyemUga25paG92bnkgZXh0MmZzIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJwxZlpIHBva3VzdSBpbmljaWFsaXpvdmF0IHByb2dyYW0iCisKKyM6IGUyZnNjay91bml4LmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdFBvdcW+w612w6FtICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJwcm8gaW50ZXJha3Rpdm7DrSBvcHJhdnkgcG90xZllYnVqaSB0ZXJtaW7DoWwiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIHprb3XFocOtbSB6w6Fsb8W+bsOtIGJsb2t54oCmXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI5MgorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIk5lcGxhdG7DvSBzdXBlcmJsb2ssIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTMKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiRGVza3JpcHRvcnkgc2t1cGluIHZ5cGFkYWrDrSDFoXBhdG7Em+KApiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAiJXM6ICVzIHDFmWkgcG91xb5pdMOtIHrDoWxvxb5uw61jaCBibG9rxa8iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBuw6F2cmF0IGvCoHDFr3ZvZG7DrW11IHN1cGVyYmxva3VcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzM1Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlJldml6ZSBzeXN0w6ltdSBzb3Vib3LFryBqZSB6xZllam3EmyBwxZnDrWxpxaEgdnlzb2vDoSBwcm8gdHV0byB2ZXJ6aSBlMmZzY2suXG4iCisiKE5lYm8gamUgc3VwZXJibG9rIHN5c3TDqW11IHNvdWJvcsWvIHBvxaFrb3plbilcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQxCittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiTW9obCBieSB0b3RvIGLDvXQgb2Rkw61sIG51bG92w6kgZMOpbGt5P1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJNdXPDrXRlIG3DrXQgcMWZw61zdHVwICVzIGsgc3lzdMOpbXUgc291Ym9yxa8gbmVibyBiw710IHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJQcmF2ZMSbcG9kb2JuxJsgbmVleGlzdHVqw61jw60gbmVibyBvZGtsw6FkYWPDrSB6YcWZw616ZW7DrT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzUyCittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gcMWZaXBvamVuIG5lYm8gb3RldsWZZW4gdsO9bHXEjW7EmyBqaW7DvW0gcHJvZ3JhbWVtP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJQcmF2ZMSbcG9kb2JuxJsgbmVleGlzdHVqw61jw60gemHFmcOtemVuw60/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1OAorbXNnaWQgIiIKKyJEaXNrIHdyaXRlLXByb3RlY3RlZDsgdXNlIHRoZSAtbiBvcHRpb24gdG8gZG8gYSByZWFkLW9ubHlcbiIKKyJjaGVjayBvZiB0aGUgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiRGlzayBjaHLDoW7Em24gcHJvdGkgesOhcGlzdTsgcG91xb5panRlIHDFmWVww61uYcSNIC1uIHBybyBwcm92ZWRlbsOtXG4iCisia29udHJvbHkgemHFmcOtemVuw60gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MjMKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIlNlxb5lxYh0ZSBub3bEm2rFocOtIHZlcnppIGUyZnNjayEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJwxZlpIGtvbnRyb2xlIMW+dXJuw6FsdSBleHQzIHBybyAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDc4Cittc2dpZCAiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gY2hlY2suXG4iCittc2dzdHIgIiIKKyJWYXJvdsOhbsOtOiBwxZllc2tha3VqaSBvYm5vdnUgxb51cm7DoWx1LCBwcm90b8W+ZSBwcm92w6Fkw61tIGtvbnRyb2x1IHN5c3TDqW11XG4iCisic291Ym9yxa8gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgIm5lbW9odSBuYXN0YXZpdCBwxZnDrXpuYWt5IHN1cGVyYmxva3UgbmEgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJwxZlpIG9ibm92xJsgxb51cm7DoWx1IGV4dDMgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIG3DoSBuZXBvZHBvcm92YW5vdSB2bGFzdG5vc3QoaSk6IgorCisjOiBlMmZzY2svdW5peC5jOjE1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICIlczogcG96b3I6IHBvZHBvcmEga29tcHJlc2UgamUgZXhwZXJpbWVudMOhbG7DrS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogRTJmc2NrIG5lcMWZZWxvxb5lbiBzIHBvZHBvcm91IEhUUkVFLFxuIgorIlx0YWxlIHN5c3TDqW0gc291Ym9yxa8gJXMgbcOhIGFkcmVzw6HFmWUgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyBwxZlpIMSNdGVuw60gaXV6bHUgxaFwYXRuw71jaCBibG9rxa9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTk3Cittc2dpZCAiVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLlxuIgorbXNnc3RyICJUb3RvIG5ldnlwYWTDoSBkb2LFmWUsIGFsZSB6a3Vzw61tZSBwb2tyYcSNb3ZhdOKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJWeXR2w6HFmcOtIHNlIMW+dXJuw6FsICglZCBibG9rxa8pOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY0OAorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgSG90b3ZvLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDkKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogxb51cm7DoWwgYnkgem5vdnUgdnl0dm/FmWVuwqDigJMgc291Ym9yb3bDvSBzeXN0w6ltIHNlIG9wxJt0IHN0YWwgZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjcyCittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIlNwb3XFoXTDrW0gZTJmc2NrIG9kIHphxI3DoXRrdeKAplxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzYKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAicMWZaSBudWxvdsOhbsOtIGtvbnRleHR1IgorCisjOiBlMmZzY2svdW5peC5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBwxZllcnXFoWVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJwxZllcnXFoWVuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDAgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIFNZU1TDiU0gU09VQk9Sxa4gQllMIFpNxJpOxJpOICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBaTk9WVSBaQVZFxI5URSBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MTIgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFZBUk9Ww4FOw406IFN5c3TDqW0gc291Ym9yxa8gbcOhIHN0w6FsZSBjaHlieSAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAicMWZaSBuYXN0YXZvdsOhbsOtIGluZm9ybWFjZSBvwqBrb250cm9sbsOtbSBzb3XEjXR1IHNrdXBpbnkgYmxva8WvIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo3MAorbXNnaWQgInlZIgorbXNnc3RyICJhQSIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8YT4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKGEvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJwxZllcnXFoWVubyFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAiYW5vXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IG5lXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gYW5vXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJhbm8iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5lIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgImUyZnNja19yZWFkX2JpdG1hcHM6IG5lcGxhdG7DvSBibG9rKHkpIGJpdG1hcHkgcHJvICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIsSNdGVuw60gYml0bWFwIGl1emzFryBhIGJsb2vFryIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAicMWZaSBvcGFrb3ZhbsOpbSBwb2t1c3UgbmHEjcOtc3QgYml0bWFweSBwcm8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiesOhcGlzdSBiaXRtYXAgYmxva8WvIGEgaXV6bMWvIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJwxZlpIHDFmWVwaXN1IGJpdG1hcCBibG9rxa8gYSBpdXpsxa8gcHJvICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IE5FT8SMRUvDgVZBTsOBIE5FS09OWklTVEVOQ0U7IFNQVVPFpFRFIGZzY2sgUlXEjE7Emi5cbiIKKyJcdCh0ai4gYmV6IHDFmWVww61uYcSNxa8gLWEgbmVibyAtcClcbiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJQb3XFvml0w6EgcGFtxJvFpTogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiUG91xb5pdMOhIHBhbcSbxaU6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICLEjWFzOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgInN0csOhdmVuw70gxI1hczogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInDFmWkgxI10ZW7DrSBpdXpsdSAlbHUgdsKgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJwxZlpIHrDoXBpc3UgaXV6bHUgJWx1IHbCoCVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiUMWZaSBhbG9rYWNpIG51bG92YWPDrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzIHJ1bm5pbmcuXG4iCittc2dzdHIgIk5FxIxFS0FOw4EgTkVLT05aSVNURU5DRTogc291Ym9yb3bDvSBzeXN0w6ltIGplIG3Em27Em24sIHphdMOtbWNvIGZzY2sgYsSbxb7DrS5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2OQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImhvdG92byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSBtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiUG91xb5pdMOtOiAlcyBbLWIgdmVsaWtvc3RfYmxva3VdIFstaSB2c3R1cG7DrV9zb3Vib3JdIFstbyB2w71zdHVwbsOtX3NvdWJvcl1cbiIKKyIgICBbLXN2d25mXSBbLWMgYmxva8WvX25hamVkbm91XSBbLWQgxI1pbml0ZWxfenBvxb5kxJtuw61fbWV6aV/EjXRlbsOtbWldXG4iCisiICAgWy1lIG1heF/FoXBhdG7DvWNoX2Jsb2vFr10gWy1wIHBvxI1ldF9wcsWvY2hvZMWvXVxuIgorIiAgIFstdCB6a3XFoWVibsOtX3Z6b3JlayBbLXQgemt1xaFlYm7DrV92em9yZWsgW+KApl1dXVxuIgorIiAgIHphxZnDrXplbsOtIFtwb3NsZWRuw61fYmxvayBbcHJ2bsOtX2Jsb2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IFDFmWVww61uYcSNZSDigJ4tbuKAnCBhIOKAni134oCcIHNlIHZ6w6FqZW1uxJsgdnlsdcSNdWrDrS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmbigK8lJSBob3Rvdm8sICVzIHVwbHludWxvLiAoJWQvJWQvJWQgY2h5YikiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzIyCittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlprb3XFocOtbSBzwqBuw6Fob2Ruw71tIHZ6b3JrZW06ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiWmtvdcWhw61tIHNlIHZ6b3JrZW0gMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInDFmWkgcG9zdW51IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIkRpdm7DoSBob2Rub3RhICglbGQpIHYgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ2OQorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInDFmWkgZXh0MmZzX3N5bmNfZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ4OSBtaXNjL2JhZGJsb2Nrcy5jOjc0OQorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgInDFmWkgemHEjcOhdGt1IGl0ZXJhY2UgdiBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwMyBtaXNjL2JhZGJsb2Nrcy5jOjYwMiBtaXNjL2JhZGJsb2Nrcy5jOjc1OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAicMWZaSBhbG9rYWNpIHZ5cm92bsOhdmFjw61jaCBwYW3Em3RpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJPdsSbxZl1asOtIHNlIGJsb2t5ICVsdSBhxb4gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgdiByZcW+aW11IGplbiBwcm8gxI10ZW7DrVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgKHRlc3QgamVuIHBybyDEjXRlbsOtKTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOCBtaXNjL2JhZGJsb2Nrcy5jOjYzNCBtaXNjL2JhZGJsb2Nrcy5jOjY3NgorIzogbWlzYy9iYWRibG9ja3MuYzo4MjIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyDFoXBhdG7DvWNoIGJsb2vFrywgcMWZZXJ1xaF1amkgdGVzdFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYwOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJIbGVkYWrDrSBzZSDFoXBhdG7DqSBibG9reSB2IHJlxb5pbXUgxI10ZW7DrSBpIHrDoXBpc1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiT2QgYmxva3UgJWx1IGRvICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY2NgorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICLEjHRlbsOtIGEgcG9yb3Zuw6Fuw606ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIkhsZWRhasOtIHNlIMWhcGF0bsOpIGJsb2t5IHYgbmVkZXN0cnVrdGl2bsOtbSByZcW+aW11IMSNdGVuw60gaSB6w6FwaXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiSGxlZGFqw60gc2UgxaFwYXRuw6kgYmxva3kgKG5lZGVzdHJ1a3Rpdm7DrSB0ZXN0IMSNdGVuw60gaSB6w6FwaXN1KVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiWmFjaHljZW5vIHDFmWVydcWhZW7DrSwgdWtsw616w60gc2VcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJwxZlpIHRlc3RvdmFjw61tIHrDoXBpc3UgZGF0LCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgamUgcMWZaXBvamVuOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgImJhZGJsb2NrcyBwxZllc3RvIHZ5bnVjZW4uIERvdWbDoW0sIMW+ZSAvZXRjL210YWIgamUgbmVzcHLDoXZuw70uXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJuZW7DrSBiZXpwZcSNbsOpIHNwb3XFoXTEm3QgYmFkYmxvY2tzIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgamUgempldm7EmyBzeXN0w6ltZW0gcHLDoXbEmyBwb3XFvsOtdsOhbjsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmFkYmxvY2tzIHDFmWVzdG8gdnludWNlbi5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAibmVwbGF0bsO9ICVzwqDigJMgJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcGFtxJvFpSBwcm8gemt1xaFlYm7DrV92em9yZWvCoOKAkyAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTYzCittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlbCoHJlxb5pbXUgcG91aMOpaG8gxI10ZW7DrSBsemUgemFkYXQgbmVqdsO9xaFlIGplZGVuIHprdcWhZWJuw61fdnpvcmVrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjkKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJWwqByZcW+aW11IHBvdWjDqWhvIMSNdGVuw60gbmVuw60gbsOhaG9kbsO9IHprdcWhZWJuw61fdnpvcmVrIHDFmcOtcHVzdG7DvSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTgzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKyJOZW1vaHUgemppc3RpdCB2ZWxpa29zdCB6YcWZw616ZW7DrTsgbXVzw610ZSB2ZWxpa29zdFxuIgorInphZGF0IHJ1xI1uxJtcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugemppc3RpdCB2ZWxpa29zdCB6YcWZw616ZW7DrSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAicG9zbGVkbsOtIGJsb2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJwcnZuw60gYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsdSIKK21zZ3N0ciAixaFwYXRuw70gcG/EjcOhdGXEjW7DrSBibG9rICglbHUpOiBtdXPDrSBiw710IG1lbsWhw60gbmXFviAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI1OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgInDFmWkgdnl0dsOhxZllbsOtIHNlem5hbSDFoXBhdG7DvWNoIGJsb2vFryB2IHBhbcSbdGkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI3NAorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInDFmWkgcMWZaWTDoXbDoW7DrSBkbyBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIHYgcGFtxJt0aSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICJQcsWvY2hvZCBkb2tvbsSNZW4sIG5hbGV6ZW5vICV1IMWhcGF0bsO9Y2ggYmxva8WvICglZC8lZC8lZCBjaHliKS5cbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstUlZmXSBbLSs9QWFDY0RkZWlqc1N1XSBbLXYgdmVyemVdIHNvdWJvcnnigKZcbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICLFoXBhdG7DoSB2ZXJ6ZcKg4oCTICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJwxZlpIHBva3VzdSBzdGF0ICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJwxZlpIMSNdGVuw60gcMWZw616bmFrxa8gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIlDFmcOtem5ha3kgJXMgbmFzdGF2ZW55IG5hICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAicMWZaSBuYXN0YXZvdsOhbsOtIHDFmcOtem5ha8WvICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiVmVyemUgJXMgbmFzdGF2ZW5hIG5hICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgInDFmWkgbmFzdGF2b3bDoW7DrSB2ZXJ6ZSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwcm9txJtub3UgcGF0aCB2IGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDYKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBqZSBuZXNsdcSNaXRlbG7DqSBzIC0gYSArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE0Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIk11c8OtdGUgcG91xb7DrXQgJy12JywgPSwgLSBuZWJvICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz1OXSBbLW8gYmxvY2tzaXplPU5dIHphxZnDrXplbsOtXG4iCisKKyMgVW5pdCBuYW1lIGFmdGVyIG51bWVyaWMgdmFsdWUKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2vFryIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OAorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICJjbHVzdGVyxa8iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiU2t1cGluYSAlbHU6IChCbG9reSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgS29udHJvbG7DrSBzb3XEjWV0IDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoT8SMRUvDgVbDgU5PIDB4JTA0eCkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgbmVwb3XFvml0w71jaCBpdXpsxa8gJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvayB2ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW3DoXJuw60iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlrDoWxvxb5uw60iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgRGVza3JpcHRvcnkgc2t1cGluIHYgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBSZXplcnZvdmFuw6kgR0RUIGJsb2t5IG5hICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBEZXNrcmlwdG9yIHNrdXBpbnkgdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQml0bWFwYSBibG9rxa8gdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzgKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgQml0bWFwYSBpdXpsxa8gdiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDIKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFRhYnVsa2EgaXV6bMWvIHYgIgorCisjIFRoZSBzZWNvbmQgc3RyaW5nIGlzIGkxOG5lZCBgYmxvY2tzJyBvciBgY2x1c3RlcnMnCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSB2b2xuw71jaCAlcywgJXUgdm9sbsO9Y2ggaXV6bMWvLCAldSBhZHJlc8OhxZnFryVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1IG5lcG91xb5pdMO9Y2ggaXV6bMWvXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTgKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgVm9sbsOpIGJsb2t5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNjkKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgVm9sbsOpIGl1emx5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAicMWZaSB0aXNrdSBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICLFoHBhdG7DqSBibG9reTogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzA2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIMSNdGVuw60gaXV6bHUgxb51cm7DoWx1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIG90ZXbDrXLDoW7DrSBpdXpsdSDFvnVybsOhbHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgInDFmWkgxI10ZW7DrSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJWbGFzdG5vc3RpIMW+dXJuw6FsdTogICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiVmVsaWtvc3Qgxb51cm7DoWx1OiAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiRMOpbGthIMW+dXJuw6FsdTogICAgICAgICAgICAldVxuIgorIlNla3ZlbmNlIMW+dXJuw6FsdTogICAgICAgICAweCUwOHhcbiIKKyJaYcSNw6F0ZWsgxb51cm7DoWx1OiAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiQ2h5Ym92w6kgxI3DrXNsbyDFvnVybsOhbHU6ICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjIyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInDFmWkgxI10ZW7DrSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIk5lbW9odSBuYWrDrXQgbWFnaWNrw6EgxI3DrXNsYSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiVmVsaWtvc3QgYmxva3Ugxb51cm7DoWx1OiAgICV1XG4iCisiRMOpbGthIMW+dXJuw6FsdTogICAgICAgICAgICAldVxuIgorIlBydm7DrSBibG9rIMW+dXJuw6FsdTogICAgICAgJXVcbiIKKyJTZWt2ZW5jZSDFvnVybsOhbHU6ICAgICAgICAgMHglMDh4XG4iCisiWmHEjcOhdGVrIMW+dXJuw6FsdTogICAgICAgICAgJXVcbiIKKyJQb8SNZXQgdcW+aXZhdGVsxa8gxb51cm7DoWx1OiAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIlXFvml2YXRlbMOpIMW+dXJuw6FsdTogICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjYgbWlzYy90dW5lMmZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBhbcSbxaUgcHJvIHpwcmFjb3bDoW7DrSBwxZllcMOtbmHEjcWvIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBwYXJhbWV0ciBzdXBlcmJsb2s6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gcGFyYW1ldHIgYmxvY2tzaXplICh2ZWxpa29zdF9ibG9rdSk6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKyJcbiIKKyJaYWTDoW4oeSkgxaFwYXRuw70ow6kpIHDFmWVww61uYcSNKGUpOiAlc1xuIgorIlxuIgorIlJvesWhw63FmWVuw6kgcMWZZXDDrW5hxI1lIGpzb3Ugb2RkxJtsZW55IMSNw6Fya2FtaSBhIG1vaG91IG3DrXQgYXJndW1lbnQsIGt0ZXLDvSBqZVxuIgorIlx0b2RkxJtsZW4gem5hbcOpbmtlbSByb3Zuw6Egc2UgKOKAnj3igJwpLlxuIgorIlxuIgorIlBsYXRuw6kgcm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUganNvdTpcbiIKKyJcdHN1cGVyYmxvY2s9PMSNw61zbG8gc3VwZXJibG9rdT5cbiIKKyJcdGJsb2Nrc2l6ZT08dmVsaWtvc3QgYmxva3U+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NTQgbWlzYy9ta2UyZnMuYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRQb3XFvsOtdsOhbSAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTkwIG1pc2MvZTJpbWFnZS5jOjEzMjYgbWlzYy90dW5lMmZzLmM6MTkyMworIzogcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIk5lbW9odSBuYWrDrXQgcGxhdG7DvSBzdXBlcmJsb2sgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBjaHliYSBwxZlpIMSNdGVuw60gYml0bWFwOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRYV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBbLXJzSVFhXSBaQcWYw41aRU7DjSBTT1VCT1JfU19PQlJBWkVNXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiQ2h5YmE6IGhsYXZpxI1rYSBqZSB2xJt0xaHDrSBuZcW+IHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0NAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHZ5cm92bsOhdmFjw60gcGFtxJvFpSBobGF2acSNa3lcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0Cittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJwxZlpIHrDoXBpc3Ugc3VwZXJibG9rdSIKKworIzogbWlzYy9lMmltYWdlLmM6MTgyCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAicMWZaSB6w6FwaXN1IHRhYnVsa3kgaXV6bMWvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODkKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAicMWZaSB6w6FwaXN1IGJpdG1hcHkgYmxva8WvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAicMWZaSB6w6FwaXN1IGJpdG1hcHkgaXV6bMWvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAicMWZaSBwb2t1c3UgcMWZZXbDqXN0IG9icmF6IHFjb3cyICglcykgZG8gYmluw6FybsOtIG9icmF6dSAoJXMpIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBuZW1vaHUgb3RldsWZw610ICVzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogbmVtb2h1IHNlIHBvc3Vub3V0IG5hIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogY2h5YmEgcMWZaSDEjXRlbsOtIHN1cGVyYmxva3VcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBuZW7DrSBzeXN0w6ltIHNvdWJvcsWvIGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiVmFyb3bDoW7DrTogam1lbm92a2EgcMWZw61sacWhIGRsb3Vow6EsIHprcmFjdWppLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBuZW1vaHUgc2UgemFzZSBwb3N1bm91dCBuYSBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBjaHliYSBwxZlpIHrDoXBpc3Ugc3VwZXJibG9rdVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIlBvdcW+aXTDrTogZTJsYWJlbCB6YcWZw616ZW7DrSBbbm92w6FqbWVub3ZrYV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIDxUUkFOU0FLxIxOw41fU09VQk9SPiA8U09VQk9ST1bDnV9TWVNUw4lNPlxuIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIk5lbW9odSBuYcSNw61zdCBkYXRhIHNvdWJvcm92w6lobyBzeXN0w6ltdSBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAidGRiX2ZldGNoICVzIHNlbGhhbG9cbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAixIxhcyBwxZlpcG9qZW7DrSBzeXN0w6ltdSBzb3Vib3LFryBzZSBuZXNob2R1amUgc8KgJXVcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiVVVJRCBzeXN0w6ltdSBzb3Vib3LFryBzZSBuZXNob2R1amUgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJ0ZGJfb3BlbiAlcyBzZWxoYWxvXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6amnFocWlb3bDoW7DrSwgamVzdGxpIGplICVzIHDFmWlwb2plbi5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8gYnkgbcSbbCBiw710IHBvdcWhdMSbbiBqZW4gbmEgbmVwxZlpcG9qZW7DqW0gc3lzdMOpbXUgc291Ym9yxa9cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiU2VsaGFsbyBvdGV2xZllbsOtICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiUMWZZWhyYW7DoSB0cmFuc2FrY2Ugb8KgdmVsaWtvc3RpICV6ZCBuYSBwb3ppY2kgJWxsdVxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiU2VsaGFsIHrDoXBpcyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiVkFST1bDgU7DjTogbmVtb2h1IG90ZXbFmcOtdCAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJWQVJPVsOBTsONOiDFoXBhdG7DvSBmb3Jtw6F0IG5hIMWZw6Fka3UgJWQgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJQT1pPUjogVsOhxaEgL2V0Yy9mc3RhYiBuZW9ic2FodWplIHBvbGUgc8KgcG/FmWFkw61tIGtvbnRyb2x5LlxuIgorIlx0Tnluw60gc2Ugc8KgdMOtbSBsemUgdnlwb8WZw6FkYXQsIGFsZSAvZXRjL2ZzdGFiIGJ5c3RlIG3Em2xpXG4iCisiXHRvcHJhdml0LCBqYWsgbmVqZMWZw612ZSBidWRldGUgbW9jaS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5lbmFsZXplblxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDogxb3DoWRuw70gZGFsxaHDrSBzeW5vdnNrw70gcHJvY2VzPyE/XG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJWYXJvdsOhbsOt4oCmICVzIHBybyB6YcWZw616ZW7DrSAlcyBza29uxI1pbCBzZSBzaWduw6FsZW0gJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogc3RhdiBqZSAleCwgbmVtxJtsbyBieSBzZSBuaWtkeSBzdMOhdC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJEb2tvbsSNZW4gcyAlcyAoc3RhdiB1a29uxI1lbsOtICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlczogQ2h5YmEgJWQgcMWZaSBzcG91xaF0xJtuw60gZnNjay4lcyBwcm8gJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJCdcSPIHbFoWVjaG55IG5lYm8gxb7DoWRuw70gdHlwIHN5c3TDqW11IHNvdWJvcsWvIHDFmWVkYW7DvSAtdCBtdXPDrSBtw610IHDFmWVkcG9udVxuIgorIuKAnm5v4oCcIG5lYm8g4oCeIeKAnC5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIk5lbW9odSBhbG9rb3ZhdCBwYW3Em8WlIHBybyB0eXB5IHN5c3TDqW11IHNvdWJvcsWvXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzIG51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IHDFmWVza2FrdWppIGNoeWJuw70gxZnDoWRlayB2wqAvZXRjL2ZzdGFiOiBwxZlpcG9qZW7DrSB0eXB1IGJpbmQgc8KgbmVudWxvdsO9bVxuIgorInBvxZlhZMOtbSBwcsWvY2hvZHUgc2tyemUgZnNja1xuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBuZW1vaHUgemtvbnRyb2xvdmF0ICVzOiBmc2NrLiVzIG5lbmFsZXplblxuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICJLb250cm9sdWrDrSBzZSB2xaFlY2hueSBzeXN0w6lteSBzb3Vib3LFry5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS3EjWVrw6FtLS0gKHByxa9jaG9kICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIlBvdcW+aXTDrTogZnNjayBbLUFNTlBSVFZdIFstQyBbZmRdXSBbLXQgdHlwc3NdIFtwxZllcMOtbmHEjWUtc3NdIFtzeXN0w6ltc291Ym9yxa/igKZdXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHDFmcOtbGnFoSBtbm9obyB6YcWZw616ZW7DrVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogcMWZw61sacWhIG1ub2hvIGFyZ3VtZW50xa9cbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBbLVJWYWRsdl0gW3NvdWJvcnnigKZdXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiUMWZaSDEjXRlbsOtIHDFmcOtem5ha8WvICVzIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiUMWZaSDEjXRlbsOtIHZlcnplICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLWNvdW50XVxuIgorbXNnc3RyICIiCisiUG91xb5pdMOtOiAlcyBbLWN8LWwgbsOhemV2c291Ym9ydV0gWy1iIHZlbGlrb3N0LWJsb2t1XSBbLUMgdmVsa29zdC1jbHVzdGVydV1cbiIKKyJcdFstaSBiYWp0xa8tbmEtaXV6ZWxdIFstSSB2ZWxpa29zdC1pdXpsdV0gWy1KIHDFmWVww61uYcSNZS3FvnVybsOhbHVdXG4iCisiXHRbLUcgdmVsaWtvc3QgbWV0YSBza3VwaW55XSBbLU4gcG/EjWV0LWl1emzFr11cbiIKKyJcdFstbSBwcm9jZW50YS1yZXplcnZvdmFuw71jaC1ibG9rxa9dIFstbyBvcy1hdXRvcmFdXG4iCisiXHRbLWcgYmxva8WvLXZlLXNrdXBpbsSbXSBbLUwgam1lbm92a2Etc3Zhemt1XVxuIgorIlx0Wy1NIGFkcmVzw6HFmS1wb3NsZWRuw61oby1wxZlpcG9qZW7DrV0gWy1PIHZsYXN0bm9zdFss4oCmXV0gWy1yIHJldml6ZS1zc11cbiIKKyJcdFstRSByb3rFocOtxZllbsO9LXDFmWVww61uYcSNWyzigKZdXSBbLXQgZHJ1aC1zc10gWy1UIHpwxa9zb2ItcG91xb5pdMOtXSBbLVUgVVVJRF1cbiIKKyJcdFstam5xdkRGS1NWXSB6YcWZw616ZW7DrSBbcG/EjWV0LWJsb2vFr11cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJTcG91xaF0w61tIHDFmcOta2F6OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgInDFmWkgcG9rdXN1IHNwdXN0aXQg4oCeJXPigJwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjMyCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJwxZlpIHpwcmFjb3bDoXbDoW7DrSBzZXpuYW11IMWhcGF0bsO9Y2ggYmxva8WvIHogcHJvZ3JhbXUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICJCbG9rICVkIHYgb2JsYXN0aSBwcmltw6FybsOtaG8gc3VwZXJibG9rdS9kZXNrcmlwdG9yxa8gc2t1cGluIMWhcGF0bsO9LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJCbG9reSAldSBhxb4gJXUgbXVzw60gYsO9dCBwcm8gdnl0dm/FmWVuw60gc3lzdMOpbXUgc291Ym9yxa8gdiBwb8WZw6Fka3UuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY0Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIktvbsSNw61t4oCmXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB0aGUgYmFja3VwIHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvcnMgYXQgYmxvY2sgJXUgY29udGFpblxuIgorIlx0YmFkIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlZhcm92w6Fuw606IHrDoWxvxb5uw60gc3VwZXJibG9rL2Rlc2tyaXB0b3J5IHNrdXBpbiB2wqBibG9rdSAldSBvYnNhaHVqw61cbiIKKyJcdMWhcGF0bsOpIGJsb2t5LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMwMworbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJwxZlpIG96bmHEjW92w6Fuw60gxaFwYXRuw71jaCBibG9rxa8gamFrbyBwb3XFvml0w6kiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiWmFwaXN1amkgdGFidWxreSBpdXpsxa86ICIKKworIzogbWlzYy9ta2UyZnMuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5lbW9odSB6YXBzYXQgJWQgYmxva8WvIGRvIHRhYnVsa3kgaXV6bMWvIHBvxI3DrW5hamUgJWxsdTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNTUgbWlzYy9ta2UyZnMuYzoyMjU3IG1pc2MvbWtlMmZzLmM6MjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJob3Rvdm8gICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjM2NgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJwxZlpIHZ5dHbDocWZZW7DrSBrb8WZZW5vdsOpaG8gYWRyZXPDocWZZSIKKworIzogbWlzYy9ta2UyZnMuYzozNzMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgInDFmWkgxI10ZW7DrSBrb8WZZW5vdsOpaG8gaXV6bHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAicMWZaSBuYXN0YXZvdsOhbsOtIHZsYXN0bmljdHbDrSBrb8WZZW5vdsOpaG8gaXV6bHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAzCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInDFmWkgdnl0dsOhxZllbsOtIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgInDFmWkgdnlobGVkw6F2w6Fuw60gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJwxZlpIHp2xJt0xaFvdsOhbsOtIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJwxZlpIG5hc3Rhdm92w6Fuw60gaXV6bHUgxaFwYXRuw71jaCBibG9rxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIk5lZG9zdGF0ZWsgcGFtxJt0aSBwxZlpIG1hesOhbsOtIHNla3RvcsWvICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIlZhcm92w6Fuw606IG5lbW9odSBuYcSNw61zdCBibG9rIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIlZhcm92w6Fuw606IG5lbW9odSB2eW1hemF0IHNla3RvciAlZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDcKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJwxZlpIGluaWNpYWxpemFjaSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIzogbWlzYy9ta2UyZnMuYzo1MTUKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIk51bHVqaSB6YcWZw616ZW7DrSDFvnVybsOhbHU6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJwxZlpIG51bG92w6Fuw60gemHFmcOtemVuw60gxb51cm7DoWx1IChibG9rICVsbHUsIHBvxI1ldCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQ1Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInDFmWkgesOhcGlzdSBzdXBlcmJsb2t1IMW+dXJuw6FsdSIKKworIyBUT0RPIHBsdXJhbGl6ZQorIzogbWlzYy9ta2UyZnMuYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInBvem9yOiBuZXBvdcW+aXRvICUnbGx1IGJsb2vFry5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJKbWVub3ZrYSBzeXN0w6ltdSBzb3Vib3LFrz0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJUeXAgT1M6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVmVsaWtvc3QgYmxva3U9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlZlbGlrb3N0IGNsdXN0ZXJ1PSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVmVsaWtvc3QgZnJhZ21lbnR1PSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiS3Jvaz0ldSBibG9rxa8sIMWgw63FmWthIHDDoXN1PSV1IGJsb2vFr1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGl1emzFrywgJWxsdSBibG9rxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2vFryAoJTIuMmbigK8lJSkgcmV6ZXJ2b3bDoW5vIHBybyBzdXBlcnXFvml2YXRlbGVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJQcnZuw60gYmxvayBkYXQ9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiVmxhc3Ruw61rIGtvxZllbm92w6lobyBhZHJlc8OhxZllPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1heGltdW0gYmxva8WvIHbCoHN5c3TDqW11IHNvdWJvcsWvPSUnbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IHNrdXBpbiBibG9rxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgc2t1cGluYSBibG9rxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2vFryB2ZSBza3VwaW7EmywgJXUgY2x1c3RlcsWvIHZlIHNrdXBpbsSbXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxva8WvIHZlIHNrdXBpbsSbLCAldSBmcmFnbWVudMWvIHZlIHNrdXBpbsSbXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaXV6bMWvIHZlIHNrdXBpbsSbXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlrDoWxvaHkgc3VwZXJibG9rdSB1bG/FvmVueSB2IGJsb2PDrWNoOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjkxIG1pc2MvdHVuZTJmcy5jOjExNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gaW50ZXJ2YWxfYWt0dWFsaXphY2VfbW1wOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBwYXJhbWV0ciBrcm9rdSAoc3RyaWRlKTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gcGFyYW1ldHIgxaHDrcWZa2EtcMOhc3UgKHN0cmlwZS13aWR0aCk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IHBhcmFtZXRyIHptxJtueSB2ZWxpa29zdGk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICJNYXhpbXVtIHptxJtueSB2ZWxrb3N0aSBtdXPDrSBiw710IHbEm3TFocOtIG5lxb4gdmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiUmV2aXplIDAgc291Ym9yb3bDqWhvIHN5c3TDqW11IG5lcG9kcG9ydWplIHptxJtudSB2ZWxpa29zdGkgemEgYsSbaHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MDEgbWlzYy9ta2UyZnMuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgIk5lcGxhdG7DvSB2bGFzdG7DrWsga2/FmWVudTog4oCeJXPigJxcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gcGFyYW1ldHIgZHJ1aHUga3bDs3Q6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlphZMOhbih5KSDFoXBhdG7DvSjDqSkgcMWZZXDDrW5hxI0oZSk6ICVzXG4iCisiXG4iCisiUm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUganNvdSBvZGTEm2xlbnkgxI3DoXJrYW1pIGEgbW9ob3UgbcOtdCBhcmd1bWVudCwga3RlcsO9IGplXG4iCisiXHRvZGTEm2xlbiB6bmFtw6lua2VtIHJvdm7DoSBzZSAo4oCePeKAnCkuXG4iCisiXG4iCisiUGxhdG7DqSByb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBqc291OlxuIgorIlx0c3RyaWRlPTxzaGx1ayAoY2h1bmspIGRhdCBuYSBqZWRub20gcmFpZG92w6ltIGRpc2t1IHbCoGJsb2PDrWNoPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxrcm9rIChzdHJpZGUpIFJBSUR1ICogZGF0b3bDvWNoIGRpc2vFryB2wqBibG9jw61jaD5cbiIKKyJcdHJlc2l6ZT08bWF4aW3DoWxuw60gdmVsaWtvc3Qgem3Em255IHZlbGlrb3N0aSB2wqBibG9jw61jaD5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PGzDrW7DoSBpbmljaWFsaXphY2UgaXRhYnVsa3k6IDAgemFrw6F6w6FubywgMSBwb3ZvbGVubz5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTxsw61uw6EgaW5pY2lhbGl6YWNlIMW+dXJuw6FsdTogMCB6YWvDoXrDoW5vLCAxIHBvdm9sZW5vPlxuIgorIlx0cm9vdF91aWQ9PFVJRCBrb8WZZW5vdsOpaG8gYWRyZXPDocWZZT5cbiIKKyJcdHJvb3RfZ2lkPTxHSUQga2/FmWVub3bDqWhvIGFkcmVzw6HFmWU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08ZHJ1aCBrdsOzdDogdXNyICh1xb5pdmF0ZWzDqSksIG5lYm8gZ3JwIChza3VwaW55KT5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm92w6Fuw606IMWhw63FmWthIHBydWh1IFJBSUR1ICV1IG5lbsOtIHN1ZMO9IG7DoXNvYmVrIGtyb2t1IChzdHJpZGUpICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkNoeWJhIHN5bnRheGUgdsKga29uZmlndXJhxI1uw61tIHNvdWJvcnUgbWtlMmZzICglcywgxZnDoWRlayDEjS7CoCVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70gc2FkYSBwxZllcMOtbmHEjcWvIHN5c3TDqW11IHNvdWJvcsWvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjkzMiBtaXNjL3R1bmUyZnMuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJOYXN0YXZlbiBuZXBsYXRuw70gcMWZZXDDrW5hxI0gcMWZaXBvamVuw606ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiVsOhxaEgc291Ym9yIG1rZTJmcy5jb25mIG5lZGVmaW51amUgZHJ1aCBzb3Vib3JvdsOpaG8gc3lzdMOpbXUgJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQcmF2ZMSbcG9kb2JuxJsgcG90xZllYnVqZXRlIG5haW5zdGFsb3ZhdCBha3R1YWxpem92YW7DvSBzb3Vib3IgbWtlMmZzLmNvbmYuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJQxZllcnXFoXVqZSBzZeKAplxuIgorCisjOiBtaXNjL21rZTJmcy5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3pvcjogZnNfdHlwZSAoZHJ1aCBTUykgJXMgbmVuw60gdsKgbWtlMmZzLmNvbmYgZGVmaW5vdsOhblxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBhbcSbxaUgcHJvIG5vdm91IHByb23Em25ub3UgUEFUSC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICJQcm9maWwgbmVieWxvIG1vxb5uw6kgc3Byw6F2bsSbIGluaWNpYWxpem92YXQgKGNoeWJhOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIsWhcGF0bsOhIHZlbGlrb3N0IGJsb2t1wqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIlZhcm92w6Fuw606IHZlbGlrb3N0IGJsb2t1ICVkIG5lbsOtIG5hIHbEm3TFoWluxJsgc3lzdMOpbcWvIHBvdcW+aXRlbG7DoS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgIsWhcGF0bsOhIHZlbGlrb3N0IGNsdXN0ZXJ1wqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM4NworbXNnaWQgIictUicgaXMgZGVwcmVjYXRlZCwgdXNlICctRScgaW5zdGVhZCIKK21zZ3N0ciAiUMWZZXDDrW5hxI0g4oCeLVLigJwgamUgemFzdGFyYWzDvSwgcG91xb5panRlIG3DrXN0byBuxJtqIOKAni1F4oCcIgorCisjOiBtaXNjL21rZTJmcy5jOjEzOTkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiTmVwbGF0bsO9IHBvxI1ldCBibG9rxa8gdmUgc2t1cGluxJsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQwNAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJibG9reSB2ZSBza3VwaW7EmyBtdXPDrSBiw710IG7DoXNvYmVrIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxMgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk5lcGxhdG7DqSDEjcOtc2xvIHBybyB2ZWxpa29zdCBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTgKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIlZlbGlrb3N0IGZsZXhfYmcgbXVzw60gYsO9dCBtb2NuaW5vdSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgIsWhcGF0bsO9IHBvZMOtbCBpdXpsxa8gJXMgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIsWhcGF0bsOhIHZlbGlrb3N0IGl1emx1wqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgbm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiUG96b3I6IFDFmWVww61uYcSNIC1LIGplIHphc3RhcmFsw70gYSBuZW3Em2wgYnkgc2UgamnFviBwb3XFvsOtdmF0LiBNw61zdG8gbsSbaiBwb3XFvmlqdGUgcm96xaHDrcWZZW7DvSBwxZllcMOtbmHEjSDigJ4tRSBub2Rpc2NhcmTigJwhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAidiBtYWxsb2MgcHJvIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIsWhcGF0bsOpIHByb2NlbnRvIHJlemVydm92YW7DvWNoIGJsb2vFr8Kg4oCTICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiY2h5Ym7DvSBwb8SNZXQgaXV6bMWvwqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAixaFwYXRuw6kgxI3DrXNsbyByZXZpemXCoOKAkyAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTE5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIlDFmWVww61uYcSNIC10IGx6ZSBwb3XFvsOtdCBqZW4gamVkbm91IgorCisjOiBtaXNjL21rZTJmcy5jOjE1MjcKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiUMWZZXDDrW5hxI0gLVQgbHplIHBvdcW+w610IGplbiBqZWRub3UiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MCBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugb3RldsWZw610IHphxZnDrXplbsOtIMW+dXJuw6FsdSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIlZlbGlrb3N0IGJsb2t1IHphxZnDrXplbsOtIMW+dXJuw6FsdSAoJWQpIG1lbsWhw60gbmXFviBtaW5pbcOhbG7DrSB2ZWxpa29zdCBibG9rdSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIlBvdcW+aWppIHZlbGlrb3N0IGJsb2t1IMW+dXJuw6Fsb3ZhY8OtaG8gemHFmcOtemVuw606ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICLFoXBhdG7DqSBibG9recKg4oCeJXPigJwgbmEgemHFmcOtemVuw60g4oCeJXPigJwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInN5c3TDqW0gc291Ym9yxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNiByZXNpemUvbWFpbi5jOjM2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJwxZlpIHBva3VzdSB6amlzdGl0IHZlbGlrb3N0IHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5lbW9odSB6amlzdGl0IHZlbGlrb3N0IHphxZnDrXplbsOtOyBtdXPDrXRlIHphZGF0XG4iCisidmVsaWtvc3Qgc3lzdMOpbXUgc291Ym9yxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjM5Cittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyJWZWxpa29zdCB6YcWZw616ZW7DrSBqZSBwcsO9IG51bGEuIFphZMOhbiBuZXBsYXRuw70gb2Rkw61sIG5lYm8gbmVieWxhXG4iCisiICAgICAgICAgdGFidWxrYSBvZGTDrWzFryBwbyBmZGlzayB6bm92dSBuYcSNdGVuYSwgcHJvdG/FvmUgem3Em27Em27DvVxuIgorIiAgICAgICAgIG9kZMOtbCBzZSBwb3XFvsOtdsOhLiBNb8W+bsOhIGJ1ZGV0ZSBtdXNldCBwcm8gb3DEm3Rvdm7DqSBuYcSNdGVuw61cbiIKKyIgICAgICAgICBzdsOpIHRhYnVsa3kgb2Rkw61sxa8gem5vdnUgemF2w6lzdCBzeXN0w6ltLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NTYKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryB2xJt0xaHDrSBuZcW+IHZlbGlrb3N0IHphxZnDrXplbsOtLiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIlNlem5hbSBkcnVoxa8gc291Ym9yb3bDvWNoIHN5c3TDqW11IHNlIG5lemRhxZlpbG8gcm96ZWJyYXRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IFZlbGlrb3N0IHphxZnDrXplbsOtICgweCVsbHggYmxva8WvKSAlcyBqZSBwxZnDrWxpxaEgdmVsa8OhLCBhYnkgYnlsYVxuIgorInZ5asOhZMWZZW5hIHbCoDMyIGJpdGVjaCB6YSBwb3XFvml0w60gYmxva3Ugb8KgdmVsaWtvc3RpICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NDYKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJmc190eXBlcyAoZHJ1aHkgU1MpIHBybyDFmWXFoWVuw60gdsKgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiVmxhc3Rub3N0aSBzeXN0w6ltdSBzb3Vib3LFryBuZWpzb3UgdsKgcmV2aXppIDAgcG9kcG9yb3bDoW55XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAixZjDrWRrw6kgc3VwZXJibG9reSBzeXN0w6ltdSBzb3Vib3LFryBuZWpzb3UgdsKgcmV2aXppIDAgcG9kcG9yb3bDoW55XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJSZXZpemUgMCBzeXN0w6ltdSBzb3Vib3LFryDFvnVybsOhbHkgbmVwb2Rwb3J1amVcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIsWhcGF0bsOpIHByb2NlbnRvIHJlemVydm92YW7DvWNoIGJsb2vFr8Kg4oCTICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiVmxhc3Rub3N0aSByZXNpemVfaW5vZGUgYSBtZXRhX2JnIG5lanNvdSBzbHXEjWl0ZWxuw6kuXG4iCisiT2LEmyBuZW1vaG91IGLDvXQgemFwbnV0eSBzb3XEjWFzbsSbLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJwxZlpIHBva3VzdSB6amlzdGl0IHZlbGlrb3N0IGhhcmR3YXJvdsOpaG8gc2VrdG9ydSIKKworIzogbWlzYy9ta2UyZnMuYzoxODI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAicMWZaSBwb2t1c3UgdXLEjWl0IHZlbGlrb3N0IGZ5emlja8OpaG8gc2VrdG9ydSIKKworIzogbWlzYy9ta2UyZnMuYzoxODU4Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgInDFmWkgbmFzdGF2b3bDoW7DrSB2ZWxpa29zdGkgYmxva3U7IHBybyB6YcWZw616ZW7DrSBwxZnDrWxpxaEgbWFsw6EgaG9kbm90YVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiUG96b3I6IHphZGFuw6EgdmVsaWtvc3QgYmxva3UgJWQgamUgbWVuxaHDrSBuZcW+IHZlbGlrb3N0IGZ5emlja8OpaG8gc2VrdG9ydSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODEKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICJWZWxpa29zdCBjbHVzdGVydSBuZW11c8OtIGLDvXQgbWVuxaHDrSBuZcW+IHZlbGlrb3N0IGJsb2t1LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODcKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJkZWZpbmljZSB2ZWxpa29zdGkgY2x1c3RlcnUgdnnFvmFkdWplIHZsYXN0bm9zdCBiaWdhbGxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJ2YXJvdsOhbsOtOiBOZW7DrSBtb8W+bsOpIHpqaXN0aXQgZ2VvbWV0cmlpICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiWmFyb3Zuw6Fuw60gJXMgcMWZZWRzdGF2dWplIHBvc3VuIG/CoCUnbHUgYmFqdMWvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICJUb3RvIG3Fr8W+ZSB2w6lzdCBrwqB2ZWxtaSDFoXBhdG7DqW11IHbDvWtvbnUsIGRvcG9ydcSNdWplIHNlIChub3bDqSkgdnl0dm/FmWVuw60gb2Rkw61sxa8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiVkLWJhanRvdsOpIGJsb2t5IHDFmcOtbGnFoSB2ZWxrw6kgcHJvIHN5c3TDqW0gKG1heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICJWYXJvdsOhbsOtOiAlZC1iYWp0b3bDqSBibG9reSBwxZnDrWxpxaEgdmVsa8OpIHBybyBzeXN0w6ltIChtYXggJWQpLCBkb251Y2VuIHBva3JhxI1vdmF0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk2OAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiVmxhc3Rub3N0IGJpZ2FsbG9jIG5lbHplIGJleiB2bGFzdG5vc3RpIHJvenNhaMWvIHphcG5vdXQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvem9yOiB2bGFzdG5vc3QgYmlnYWxsb2MgamUgc3TDoWxlIHZlIHbDvXZvamkuXG4iCisiUG9kcm9ibm9zdGkgbmFsZXpuZXRlIG5hIDxodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYz4uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk4MiBtaXNjL3R1bmUyZnMuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb3pvcjogdmxhc3Rub3N0IGt2w7N0eSBqZSBzdMOhbGUgdmUgdsO9dm9qaS5cbiIKKyJQb2Ryb2Jub3N0aSBuYWxlem5ldGUgbmEgPGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhPi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkzCittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJibG9reSB2eWhyYXplbsOpIHBybyB6bcSbbnUgdmVsaWtvc3RpIHphIGLEm2h1IG5lanNvdSBwb2Rwb3JvdsOhbnkgbmEgbmXFmcOtZGvDqW1cbiIKKyJcdHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMDIKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAicG/EjWV0IGJsb2vFryB2ZSBza3VwaW7EmyBtaW1vIHJvenNhaCIKKworIzogbWlzYy9ta2UyZnMuYzoyMDI2Cittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIlZsYXN0bm9zdCBmbGV4X2JnIG5lbsOtIHBvdm9sZW5hLCB0YWvFvmUgamVqw60gdmVsaWtvc3QgbmVtxa/FvmUgYsO9dCB6YWTDoW5hIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgaXV6bHUgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJwxZnDrWxpxaEgbW5vaG8gaXV6bMWvICglJ2xsdSksIHp2w73FoWl0IHBvbcSbciBpdXpsxa8/IgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJwxZnDrWxpxaEgbW5vaG8gaXV6bMWvICglJ2xsdSksIHphZGVqdGUgPCAyXjMyIGl1emzFryIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJ2ZWxpa29zdF9pdXpsdSAoJXUpICogcG/EjWV0X2l1emzFryAoJXUpIGplIG1vYyBuYVxuIgorIlx0c3lzdMOpbSBzb3Vib3LFryBzICUnbGx1IGJsb2t5LCB6YWRlanRlIHZ5xaHFocOtIHBvbcSbcl9pdXpsdSAoLWkpXG4iCisiXHRuZWJvIHNuacW+dGUgcG/EjWV0IGl1emzFryAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJQxZllcGlzdWppIGV4aXN0dWrDrWPDrSBzeXN0w6ltIHNvdWJvcsWvLCB0b3RvIG3Fr8W+ZSBiw710IG9kxI1pbsSbbm8gcMWZw61rYXplbTpcbiIKKyIgICBlMnVuZG8gJXMgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJwxZlpIHBva3VzdSBuYXN0YXZpdCBzb3Vib3IgcHJvIG9kdm9sw6Fuw60gem3Em25cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjM2Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIlphaGF6dWrDrSBzZSBibG9reSB6YcWZw616ZW7DrTogIgorCisjIENvbnRpbnVhdGlvbiBvZiAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAic2VsaGFsb8Kg4oCTICIKKworIzogbWlzYy9ta2UyZnMuYzoyMzYwCittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJwxZlpIG5hc3Rhdm92w6Fuw60gc3VwZXJibG9rdSIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIlNrYXJ0b3bDoW7DrSAoZGlzY2FyZCkgdXNwxJtsbyBhIGJ1ZGUgdnLDoWNlbm8gMHPCoOKAkyB2eW5lY2jDoSBzZSB2w71tYXogdGFidWxreSBpdXpsxa9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAibmV6bsOhbcO9IG9zwqDigJMgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJBbG9rdWrDrSBzZSB0YWJ1bGt5IHNrdXBpbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgInDFmWkgcG9rdXN1IGFsb2tvdmF0IHRhYnVsa3kgc3lzdMOpbXUgc291Ym9yxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUxNworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdHDFmWkgcMWZZXZvZHUgYml0bWFweSBzdWJjbHVzdGVyxa8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgInDFmWkgbnVsb3bDoW7DrSBibG9rdSAlbGx1IG5hIGtvbmNpIHN5c3TDqW11IHNvdWJvcsWvIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NzMKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJwxZlpIHJlemVydmFjaSBibG9rxa8gcHJvIHptxJtudSB2ZWxpa29zdGkgemEgYsSbaHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4NCBtaXNjL3R1bmUyZnMuYzo2NDUKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICLFvnVybsOhbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJQxZlpZMOhdsOhbSDFvnVybsOhbCBrIHphxZnDrXplbsOtICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiXHRwxZlpIHBva3VzdSBwxZlpZGF0IMW+dXJuw6FsIGsgemHFmcOtemVuw60gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwOCBtaXNjL21rZTJmcy5jOjI2NDAgbWlzYy90dW5lMmZzLmM6Njc0IG1pc2MvdHVuZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImhvdG92b1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiVsKgcmXFvmltdSBqZW4tc3VwZXJkYXRhIGJ1ZGUgdnluZWNow6FuYSB0dm9yYmEgxb51cm7DoWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIlZ5dHbDocWZw60gc2Ugxb51cm7DoWwgKCUndSBibG9rxa8pOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzNgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0cMWZaSBwb2t1c3Ugdnl0dm/FmWl0IMW+dXJuw6FsIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NDcgbWlzYy90dW5lMmZzLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiQ2h5YmEgcMWZaSB6YXDDrW7DoW7DrSBvY2hyYW55IHByb3RpIG7DoXNvYm7DqW11IHDFmWlwb2plbsOtLiIKKworIyBUT0RPOiBQbHVyYWxpemUKKyM6IG1pc2MvbWtlMmZzLmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiT2NocmFuYSBwcm90aSBuw6Fzb2Juw6ltdSBwxZlpcG9qZW7DrSBqZSB6YXBudXRhIHPCoGFrdHVhbGl6YcSNbsOtbSBpbnRlcnZhbGVtICVkIHNla3VuZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICJaYXBpc3VqaSBzdXBlcmJsb2t5IGEgw7rEjXRvdmFjw60gaW5mb3JtYWNlIHN5c3TDqW11IHNvdWJvcsWvOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiVmFyb3bDoW7DrSwgbcSbbCBqc2VtIHByb2Jsw6lteSBwxZlpIHrDoXBpc3Ugc3VwZXJibG9rxa8uIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImhvdG92b1xuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiUG91xb5pdMOtOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3XFvml0w606ICAlcyBaQcWYw41aRU7DjeKAplxuIgorIlxuIgorIlZ5cMOtxaFlIGluZm9ybWFjZSBvwqBvZGTDrWxlY2ggbmEga2HFvmTDqW0gemFkYW7DqW0gWkHFmMONWkVOw40uXG4iCisiTmEgcMWZw61rbGFkOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJOZWx6ZSBvdGV2xZnDrXQgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIk5lbHplIHrDrXNrYXQgZ2VvbWV0cmlpICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIk5lbHplIHrDrXNrYXQgdmVsaWtvc3QgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHphxI3DoXRlaz0lOGQgdmVsaWtvc3Q9JThsdSBrb25lYz0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3Cittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIlNwdXPFpXRlIHByb3PDrW0gbmEgdG9tdG8gc3lzdMOpbXUgc291Ym9yxa8gZTJmc2NrLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogJXMgWy1jIG1heF9wb8SNZXRfcMWZaXBvamVuw61dIFstZSBjaG92w6Fuw61fcMWZaV9jaHliw6FjaF1cbiIKKyJcdFstZyBza3VwaW5hXSBbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBwxZllcMOtbmHEjWVfxb51cm7DoWx1XSBbLWxdXG4iCisiXHRbLW0gcHJvY2VudG9fcmV6ZXJ2b3ZhbsO9Y2hfYmxva8WvXSBbLW8gW15dcMWZZXDDrW5hxI1lX3DFmWlwb2plbsOtWyzigKZdXVxuIgorIlx0Wy1wIGludGVydmFsX2FrdHVhbGl6YWNlX21tcF0gWy1yIHBvxI1ldF9yZXplcnZvdmFuw71jaF9ibG9rxa9dXG4iCisiXHRbLXUgdcW+aXZhdGVsXSBbLUMgcG/EjWV0X3DFmWlwb2plbsOtXSBbLUwgam1lbm92a2Ffc3Zhemt1XVxuIgorIlx0Wy1NIHBvc2xlZG7DrV9hZHJlc8OhxZlfcMWZaXBvamVuw61dIFstTyBbXl12bGFzdG5vc3RbLOKApl1dXG4iCisiXHRbLUUgcm96xaHDrcWZZW7DvS1wxZllcMOtbmHEjVss4oCmXV0gWy1UIMSNYXNfcG9zbGVkbsOtX2tvbnRyb2x5XSBbLVUgVVVJRF1cbiIKKyJcdFstSSBub3bDoV92ZWxpa29zdF9pdXpsdV0gemHFmcOtemVuw61cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugb3RldsWZw610IGV4dGVybsOtIMW+dXJuw6FsIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5lbsOtIHphxZnDrXplbsOtIMW+dXJuw6FsdS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiU3VwZXJibG9rIMW+dXJuw6FsdSBuZW5hbGV6ZW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiVVVJRCBzeXN0w6ltdSBzb3Vib3LFryBuZW5hbGV6ZW5vIG5hIHphxZnDrXplbsOtIMW+dXJuw6FsdS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJaYcWZw616ZW7DrSDFvnVybsOhbHUgbmVsemUgbmFsw6l6dC4gT2RzdHJhbsSbbm8gTkVCWUxPLlxuIgorIkNoeWLEm2rDrWPDrSB6YcWZw616ZW7DrSDFvnVybsOhbHUgbHplIG9kZWJyYXQgcMWZZXDDrW5hxI1lbSAtZi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY5Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIsW9dXJuw6FsIG9kc3RyYW7Em25cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzEzCittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJwxZlpIMSNdGVuw60gYml0bWFwIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMjEKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIMSNacWhdMSbbsOtIGl1emx1IMW+dXJuw6FsdSIKKworIzogbWlzYy90dW5lMmZzLmM6MzMyCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwxZlpIHrDoXBpc3UgaXV6bHUgxb51cm7DoWx1IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIihhIHBvIHTDqSByZWJvb3R1anRlISlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIk9kc3RyYW7Em27DrSB2bGFzdG5vc3RpIHN5c3TDqW11IHNvdWJvcsWvIOKAniVz4oCcIG5lbsOtIHBvZHBvcm92w6Fuby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiTmFzdGF2ZW7DoSB2bGFzdG5vc3RpIHN5c3TDqW11IHNvdWJvcsWvIOKAniVz4oCcIG5lbsOtIHBvZHBvcm92w6Fuby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDE2Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIlDFmcOtem5hayBoYXNfam91cm5hbCBtxa/FvmUgYsO9dCB2eW1hesOhbiBqZW4sIGtkecW+IGplIHN5c3TDqW0gc291Ym9yxa9cbiIKKyJvZHBvamVuIG5lYm8gcMWZaXBvamVuIGplbiBwcm8gxI10ZW7DrS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDI0Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiUMWZw616bmFrIG5lZWRzX3JlY292ZXJ5IGplIG5hc3RhdmVuLiBQxZllZCB2eW1hesOhbsOtbSBwxZnDrXpuYWt1IGhhc19qb3VybmFsXG4iCisicHJvc8OtbSBzcHVzxaV0ZSBlMmZzY2suXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ0MworbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJPY2hyYW51IHDFmWVkIG7DoXNvYm7DvW0gcMWZaXBvamVuw61tIG5lbHplIG5hc3Rhdml0LFxuIgorInBva3VkIGplIHN5c3TDqW0gc291Ym9yxa8gcMWZaXBvamVuIG5lYm8gamUtbGkgamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiT2NocmFuYSBwxZllZCBuw6Fzb2Juw71tIHDFmWlwb2plbsOtbSBieWxhIHphcG51dGEgc8KgaW50ZXJ2YWxlbSBha3R1YWxpemFjZSAlZOKAr3MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3MAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisiT2NocmFudSBwxZllZCBuw6Fzb2Juw71tIHDFmWlqZW7DrW0gbmVsemUgdnlwbm91dCxcbiIKKyJqZS1saSBzb3Vib3JvdsO9IHN5c3TDqW0gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzgKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSDEjXRlbsOtIGJpdG1hcFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIk1hZ2lja8OpIMSNw61zbG8gdsKgYmxva3UgTU1QIHNlIG5lc2hvZHVqZS4gT8SNZWvDoXbDoW5vOiAleCwgc2t1dGXEjW5vc3Q6ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5MgorbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAicMWZaSDEjXRlbsOtIGJsb2t1IE1NUC4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNAorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorIk9kc3RyYW7Em27DrSBwxZnDrXpuYWt1IGZsZXhfYmcgYnkgbW9obG8genDFr3NvYml0IG5la29uemlzdGVuY2kgc3lzdMOpbXVcbiIKKyJzb3Vib3LFry5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJQxZnDrXpuYWsgaHVnZV9maWxlIG3Fr8W+ZSBiw710IHZ5bWF6w6FuIGplbiwga2R5xb4gamUgc3lzdMOpbSBzb3Vib3LFr1xuIgorIm9kcG9qZW4gbmVibyBwxZlpcG9qZW4gamVuIHBybyDEjXRlbsOtLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1OTUKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiUG96b3I6IHDFmWVww61uYcSNIOKAnl5xdW90YeKAnCBwxZllYmlqZSBhcmd1bWVudHkg4oCe4oCTUeKAnC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjQwCittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIGppxb4gxb51cm7DoWwgbcOhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRwxZlpIHBva3VzdSBvdGV2xZnDrXQgxb51cm7DoWwgbmEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIlZ5dHbDocWZw60gc2Ugxb51cm7DoWwgbmEgemHFmcOtemVuw60gJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgInDFmWkgcMWZaWTDoXbDoW7DrSBzeXN0w6ltdSBzb3Vib3LFryBkbyDFvnVybsOhbHUgbmEgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3NgorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiVnl0dsOhxZnDrSBzZSBpdXplbCDFvnVybsOhbHU6ICIKKworIzogbWlzYy90dW5lMmZzLmM6Njg1Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdHDFmWkgcG9rdXN1IHZ5dHZvxZlpdCBzb3Vib3Igxb51cm7DoWx1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NjMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiTmVtb2h1IGFsb2tvdmF0IHBhbcSbxaUgcHJvIHpwcmFjb3bDoW7DrSBwxZllcMOtbmHEjcWvIGt2w7N0eSFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCBjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlphZMOhbnkgY2h5Ym7DqSBwxZllcMOtbmHEjWUga3bDs3R5LlxuIgorIlxuIgorIk7DoXNsZWR1asOtIGRvc3R1cG7DqSBwbGF0bsOpIHDFmWVww61uYcSNZSBrdsOzdHkgKG9kZMSbbHVqw60gc2UgxI3DoXJrb3UpOlxuIgorIlx0W15ddXNycXVvdGEgIChrdsOzdHkgdcW+aXZhdGVsxa8pXG4iCisiXHRbXl1ncnBxdW90YSAgKGt2w7N0eSBza3VwaW4pXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiTmVtb2h1IHpwcmFjb3ZhdCB1csSNZW7DrSBkYXRhL8SNYXN1OiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODcwIG1pc2MvdHVuZTJmcy5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgIsWhcGF0bsO9IHBvxI1ldCBwxZlpcG9qZW7DrSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgIsWhcGF0bsOpIGNob3bDoW7DrSBwxZlpIGNoeWLDoWNoIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAixaFwYXRuw6kgZ2lkL2ptw6lubyBza3VwaW55IC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAixaBwYXRuw70gaW50ZXJ2YWwgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICLFoXBhdG7DvSBwb2TDrWwgcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMDMKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbcWvxb5lIGLDvXQgemFkw6FubyBqZW4gamVkbm91IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG3Fr8W+ZSBiw710IHphZMOhbm8gamVuIGplZG5vdSIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIsWhcGF0bsO9IHBvxI1ldCByZXplcnZvdmFuw71jaCBibG9rxa8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICLFoXBhdG7DqSB1aWQvam3DqW5vIHXFvml2YXRlbGUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBpdXpsdcKg4oCTICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIlZlbGlrb3N0IGl1emx1IG11c8OtIGLDvXQgbW9jbmluYSBkdm91wqDigJMgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiaW50ZXJ2YWxfYWt0dWFsaXphY2VfbW1wIGplIHDFmcOtbGnFoSB2ZWxrw706ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIk5hc3RhdnVqZSBzZSBpbnRlcnZhbCBha3R1YWxpemFjZSBvY2hyYW55IHByb3RpIG7DoXNvYm7DqW11IHDFmWlwb2plbsOtIG5hICUnbHUgc2VrdW5kdVxuIgorbXNnc3RyWzFdICJOYXN0YXZ1amUgc2UgaW50ZXJ2YWwgYWt0dWFsaXphY2Ugb2NocmFueSBwcm90aSBuw6Fzb2Juw6ltdSBwxZlpcG9qZW7DrSBuYSAlJ2x1IHNla3VuZHlcbiIKK21zZ3N0clsyXSAiTmFzdGF2dWplIHNlIGludGVydmFsIGFrdHVhbGl6YWNlIG9jaHJhbnkgcHJvdGkgbsOhc29ibsOpbXUgcMWZaXBvamVuw60gbmEgJSdsdSBzZWt1bmRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJOZXBsYXRuw70ga3Jva3UgKHN0cmlkZSkgUkFJRHU6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiTmVwbGF0bsOhIMWhw63FmWthIHBydWh1IFJBSUR1IChzdHJpcGUtd2lkdGgpOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIk5lcGxhdG7DvSBoYXNob3ZhY8OtIGFsZ29yaXRtdXM6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiSW1wbGljaXRuw60gaGFzaG92YWPDrSBhbGdvcml0bXVzIHNlIG5hc3RhdnVqZSBuYSAlcyAoJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiWmFkw6FueSDFoXBhdG7DqSBwxZllcMOtbmHEjWUuXG4iCisiXG4iCisiUm96xaHDrcWZZW7DqSBwxZllcMOtbmHEjWUgc2Ugb2RkxJtsdWrDrSDEjcOhcmthbWkgYSBtb2hvdSBtw610IGFyZ3VtZW50LCBrdGVyw70gamVcbiIKKyJcdG9kZMSbbGVuIHpuYW3DqW5rZW0gcm92bsOhIHNlICjigJ494oCcKS5cbiIKKyJcbiIKKyJQbGF0bsOpIHJvesWhw63FmWVuw6kgcMWZZXDDrW5hxI1lIGpzb3U6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNob3ZhY8OtIGFsZ29yaXRtdXM+XG4iCisiXHRtb3VudF9vcHRzPTxyb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBpbXBsaWNpdG7DrSBwxZlpIHDFmWlwb2plbsOtPlxuIgorIlx0c3RyaWRlPTx2ZWxpa29zdCBzaGx1a3UgKGNodW5rKSBuYSBqZWRub20gcmFpZG92w6ltIGRpc2t1IHbCoGJsb2PDrWNoPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxrcm9rIChzdHJpZGUpIFJBSUR1ICogZGF0b3bDvWNoIGRpc2vFryB2wqBibG9jw61jaD5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAixIx0ZW7DrSBiaXRtYXB5IGl1emzFryBzZWxoYWxvLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzI4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIsSMdGVuw60gYml0bWFweSBibG9rxa8gc2VsaGFsb1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2t5IHBybyBwxZllc3VuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ4Cittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJCxJtoZW0genbEm3TFoW92w6Fuw60gaXV6bHUgc2VsaGFsYSBhbG9rYWNlIGJpdG1hcHkgYmxva8WvXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTQKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIk5lZG9zdGF0ZWsgbcOtc3RhIHBybyB6dsSbdMWhZW7DrSBpdXpsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU5Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJCxJtoZW0gem3Em255IHZlbGlrb3N0aSBpdXpsdSBzZWxoYWxhIHJlYWxva2FjZSBibG9rxa9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5MQorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBtxJtuxJtuw60gdmVsaWtvc3QgaXV6bHUuXG4iCisiU3B1c8WldGUgZTJ1bmRvLCBhYnlzdGUgdnLDoXRpbGkgem3Em255IHByb3ZlZGVuw6kgbmEgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MTgKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcGFtxJvFpSBwcm8gbsOhemV2IHNvdWJvcnUgVERCXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugc21hemF0ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiWm3Em255IHpwxa9zb2JlbsOpIHR1bmUyZnMgbHplIHp2csOhdGl0IHTDrW10byBwxZnDrWthemVtXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIk1hZ2lja8OpIMSNw61zbG8gYmxva3UgTU1QIGplIGNoeWJuw6kuIE3Fr8W+ZXRlIGplaiB6a3VzaXQgb3ByYXZpdCBwb21vY8OtOlxuIgorIuKAnmUyZnNjayAtZiAlc+KAnFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIlZlbGlrb3N0IGl1emx1IGppxb4gamUgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hyaW5raW5nIHRoZSBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiWm1lbsWhb3bDoW7DrSB2ZWxpa29zdGkgaXV6bHUgbmVuw60gcG9kcG9yb3bDoW5vXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBpbm9kZSBzaXplICVsdSAobWF4ICVkKVxuIgorbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBpdXpsdSAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIG1heGltw6FsbsOtIHBvxI1ldCBwxZlpcG9qZW7DrSBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgYWt0dcOhbG7DrSBwb8SNZXQgcMWZaXBvamVuw60gbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSBjaG92w6Fuw60gcMWZaSBjaHliw6FjaCBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiTmFzdGF2dWplIHNlIEdJRCByZXplcnZvdmFuw71jaCBibG9rxa8gbmEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiaW50ZXJ2YWwgbWV6aSBrb250cm9sYW1pIGplIHDFmcOtbGnFoSBkbG91aMO9ICglJ2x1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkludGVydmFsIG1lemkga29udHJvbGFtaSBzZSBuYXN0YXZ1amUgbmEgJSdsdSBzZWt1bmRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJQcm9jZW50byByZXplcnZvdmFuw71jaCBibG9rxa8gc2UgbmFzdGF2dWplIG5hICVn4oCvJSUgKCUnbGx1IGJsb2vFrylcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgInBvxI1ldCByZXplcnZvdmFuw71jaCBibG9rxa8gamUgcMWZw61sacWhIHZlbGvDvSAoJSdsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiUG/EjWV0IHJlemVydm92YW7DvWNoIGJsb2vFryBzZSBuYXN0YXZ1amUgbmEgJSdsbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTeXN0w6ltIHNvdWJvcsWvIGppxb4gbcOhIMWZw61ka8OpIHN1cGVyYmxva3kuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJQxZnDrXpuYWsgxZnDrWRrw71jaCBzdXBlcmJsb2vFryBuYXN0YXZlbi4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDYyCittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPZHN0cmFuxJtuw60gc3VwZXJwxZnDrXpuYWt1IMWZw61ka29zdGkgbmVuw60gcG9kcG9yb3bDoW5vLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJOYXN0YXZ1amUgc2UgxI1hcyBwb3NsZWRuw60ga29udHJvbHkgc3lzdMOpbXUgc291Ym9yxa8gbmEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIk5hc3RhdnVqZSBzZSBVSUQgcmV6ZXJ2b3ZhbsO9Y2ggYmxva8WvIG5hICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTA4Cittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICJDaHlibsOpIHBvdcW+aXTDrSBjbGVhcl9tbXAuIEplIHTFmWViYSBqZWogcG91xb7DrXQgc8KgLWZcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEyNgorbXNnaWQgIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIlZsYXN0bm9zdCBrdsOzdHkgc23DrSBiw710IHptxJtuxJtuYSwgamVuIGtkecW+IGplIHN5c3TDqW0gc291Ym9yxa8gb2Rwb2plbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1OQorbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiTmVwbGF0bsO9IGZvcm3DoXQgVVVJRFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTcyCittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiVmVsaWtvc3QgaXV6bHUgc23DrSBiw710IHptxJtuxJtuYSwgamVuIGtkecW+IGplIHN5c3TDqW0gc291Ym9yxa8gb2Rwb2plbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MAorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiTmEgc291Ym9yb3bDvWNoIHN5c3TDqW1lY2ggc2UgemFwbnV0b3Ugdmxhc3Rub3N0w60gZmxleF9iZyBuZW7DrSB6bcSbbmEgdmVsaWtvc3RpXG4iCisiaXV6bHUgcG9kcG9yb3bDoW5hLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiVmVsaWtvc3QgaXV6bHUgc2UgbmFzdGF2dWplIG5hICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJabcSbbmEgdmVsaWtvc3RpIGl1emx1IHNlbGhhbGEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICJWZWxpa29zdCBrcm9rdSAoc3RyaWRlKSBzZSBuYXN0YXZ1amUgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICLFoMOtxZlrYSBwcnVodSAoc3RyaXBlIHdpZHRoKSBzZSBuYXN0YXZ1amUgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIkltcGxpY2l0bsOtIHJvesWhw63FmWVuw6kgcMWZZXDDrW5hxI1lIHDFmWkgcMWZw61wb2plbsOtIHNlIG5hc3RhdnVqw60gbmEg4oCeJXPigJxcbiIKKworIzogbWlzYy91dGlsLmM6NzQKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJQxZllc3RvIHBva3JhxI1vdmF0PyAoYSxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorbXNnc3RyICJOZW1vaHUgc3RhdCAlcyAtLS0gJXNcbiIKKworIzogbWlzYy91dGlsLmM6OTIKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiWmHFmcOtemVuw60gesWZZWptxJsgbmVleGlzdHVqZTsgemFkYWxpIGpzdGUgamUgc3Byw6F2bsSbP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5lbsOtIHNwZWNpw6FsbsOtIGJsb2tvdsOpIHphxZnDrXplbsOtLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgamUgY2Vsw6kgemHFmcOtemVuw60sIG5lIGplbiBqZWRlbiBvZGTDrWwhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJta2UyZnMgcMWZZXN0byB2eW51Y2VuLiBEb3Vmw6FtLCDFvmUgL2V0Yy9tdGFiIGplIG5lc3Byw6F2bsOhLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIm5lYnVkdSB0YWR5IHZ5dHbDocWZZXQgJXMhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE2NgorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJta2UyZnMgc3Rlam7EmyB2eW51Y2VuLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxODIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICJOZW1vaHUgYWxva292YXQgcGFtxJvFpSBwcm8genByYWNvdsOhbsOtIHDFmWVww61uYcSNxa8gxb51cm7DoWx1IVxuIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOZWJ5bG8gbW/Fvm7DqSBuYWrDrXQgxb51cm7DoWxvdmFjw60gemHFmcOtemVuw60gb2Rwb3bDrWRhasOtY8OtICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJaYWTDoW55IMWhcGF0bsOpIHDFmWVww61uYcSNZSDFvnVybsOhbHUuXG4iCisiXG4iCisiUMWZZXDDrW5hxI1lIMW+dXJuw6FsdSBzZSBvZGTEm2x1asOtIMSNw6Fya2FtaSBhIG1vaG91IG3DrXQgYXJndW1lbnQsIGt0ZXLDvSBqZVxuIgorIlx0b2RkxJtsZW4gem5hbcOpbmtlbSByb3Zuw6Egc2UgKOKAnj3igJwpLlxuIgorIlxuIgorIlBsYXRuw6kgcMWZZXDDrW5hxI1lIMW+dXJuw6FsdSBqc291OlxuIgorIlx0c2l6ZT08dmVsaWtvc3Qgxb51cm7DoWx1IHbCoG1lZ2FiYWp0ZWNoPlxuIgorIlx0ZGV2aWNlPTx6YcWZw616ZW7DrSDFvnVybsOhbHU+XG4iCisiXG4iCisiVmVsaWtvc3Qgxb51cm7DoWx1IG11c8OtIGLDvXQgbWV6aSAxMDI0IGEgMTAyNDAwMDAgYmxva3kgc3lzdMOpbXUgc291Ym9yxa8uXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI1OAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTeXN0w6ltIHNvdWJvcsWvIHDFmcOtbGnFoSBtYWzDvSBuYSDFvnVybsOhbFxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQb8W+YWRvdmFuw6EgdmVsaWtvc3Qgxb51cm7DoWx1IGplICUnZCBibG9rxa87IG11c8OtIGLDvXRcbiIKKyJtZXppIDEwMjQgYSAxMDI0MDAgYmxva3kuIEtvbsSNw61tLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNzMKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWZWxpa29zdCDFvnVybsOhbHUgcMWZw61sacWhIHZlbGvDoSBwcm8gc3lzdMOpbSBzb3Vib3LFry5cbiIKKworIzogbWlzYy91dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJUZW50byBzeXN0w6ltIHNvdWJvcsWvIGJ1ZGUgYXV0b21hdGlja3kga29udHJvbG92w6FuIGthxb5kw71jaCAlZCBwxZlpcG9qZW7DrSBuZWJvXG4iCisiJWcgZG7DrSwgcG9kbGUgdG9obywgY28gbmFzdGFuZSBkxZnDrXZlLiBQcm8gem3Em251IHBvdcW+aWp0ZSB0dW5lMmZzIC1jIG5lYm8gLWkuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICJQb3XFvml0w606ICVzIFstZF0gWy1wIFNPVUJPUl9TX1BJRF0gWy1zIENFU1RBX0tfU09DS0VUVV0gWy1UIExIxa5UQV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIFBPxIxFVF0gWy1zIENFU1RBX0tfU09DS0VUVV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NAorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgImNoeWJuw6kgYXJndW1lbnR5IgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAicMWZaXBvamVuw60iCisKKyM6IG1pc2MvdXVpZGQuYzoxOTEKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAiesOhcGlzIgorCisjOiBtaXNjL3V1aWRkLmM6MTk5Cittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAixI10ZW7DrSBwb8SNdHUiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJjaHlibsOhIGTDqWxrYSBvZHBvdsSbZGkiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiZMOpbW9uIHV1aWRkIGppxb4gYsSbxb7DrSBqYWtvIFBJRCAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJOZWJ5bG8gbW/Fvm7DqSB2eXR2b8WZaXQgdW5peG92w70gcHJvdWRvdsO9IHNvY2tldDogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiVW5peG92w70gc29ja2V0IG5lYnlsbyBtb8W+bsOpIHDFmWlsZXBpdCBrwqAlczogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIk5hIHVuaXhvdsOpbSBzb2NrZXR1ICVzIG5lYnlsbyBtb8W+bsOpIHphxI3DrXQgcG9zbG91Y2hhdDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gesKga2xpZW50YSwgZMOpbGthID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIm9wZXJhY2UgJWQsIHDFmcOtY2hvesOtIHBvxI1ldCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyDEjWFzb3bDqSBVVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyBuw6Fob2Ruw6kgVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrVxuIgorbXNnc3RyWzFdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrVxuIgorbXNnc3RyWzJdICJWeXR2b8WZZW5vIMSNYXNvdsOpIFVVSUQgJXMgYSAlZCBuw6FzbGVkdWrDrWPDrWNoXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiVnl0dm/FmWVubyAlZCBVVUlEOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIk5lcGxhdG7DoSBvcGVyYWNlICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJDaHlibsOpIMSNw61zbG86ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzMgbWlzYy91dWlkZC5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJDaHliYSBwxZlpIHZvbMOhbsOtIGTDqW1vbmEgdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGEgbsOhc2xlZHVqw61jw60gJWQgVVVJRFxuIgorbXNnc3RyWzFdICIlcyBhIG7DoXNsZWR1asOtY8OtICVkIFVVSURcbiIKK21zZ3N0clsyXSAiJXMgYSBuw6FzbGVkdWrDrWPDrWNoICVkIFVVSURcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiU2V6bmFtIFVVSUQ6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiTmVvxI1la8OhdmFuw6EgZMOpbGthIG9kcG92xJtkaSB6ZSBzZXJ2ZXJ1ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiTmVieWxvIG1vxb5uw6kgemFiw610IHV1aWRkIHPCoFBJRCAlZDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiWmFiaXQgdXVpZGQgc8KgUElEICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiUG91xb5pdMOtOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgVsO9cGlzIHJvenNhaHU6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdMSMw61zPSVsbHUsIFZlbGlrb3N0PSVsbHUsIEt1cnpvcj0lbGx1LCBTZcWZYXplbm89JWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvdcW+aXTDrTogJXMgWy1kIGxhZGljw61fcMWZZXDDrW5hxI1lXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF1cbiIKKyIgICAgICAgICB6YcWZw616ZW7DrSBbbm92w6FfdmVsaWtvc3RdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjUKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJadsSbdMWhdWppIHRhYnVsa3UgaXV6bMWvIgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIlDFmWVzb3V2w6FtIGJsb2t5IgorCisjOiByZXNpemUvbWFpbi5jOjcxCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlByb2Now6F6w61tIHRhYnVsa3UgaXV6bMWvIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiQWt0dWFsaXp1amkgb2RrYXp5IG5hIGl1emx5IgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJQxZllc291dsOhbSB0YWJ1bGt1IGl1emzFryIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiTmV6bsOhbcO9IHByxa9jaG9kPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiWmHEjcOhdGVrIHByxa9jaG9kdSAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkXG4iCisiYXQgeW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlptxJtuYSB2ZWxpa29zdGkgc291Ym9yb3bDqWhvIHN5c3TDqW11IHPCoHZsYXN0bm9zdMOtIGJpZ2FsbG9jIG5lbsOtIHBsbsSbXG4iCisib3Rlc3RvdsOhbmEuIFBva3JhxI1vdsOhbsOtIGplbiBuYSB2bGFzdG7DrSBuZWJlenBlxI3DrSEgUMWZZWpldGUtbGkgc2kgcG9rcmHEjW92YXQsXG4iCisicG91xb5panRlIHDFmWVww61uYcSNIHZ5bnVjZW7DrS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAicMWZaSBvdGV2w61yw6Fuw60gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgInDFmWkgemppxaHFpW92w6Fuw60gc3RhdCBpbmZvcm1hY8OtIG8gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzM3IHJlc2l6ZS9tYWluLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiU3B1c8WldGUgcHJvc8OtbSBuZWpkxZnDrXZlIOKAnmUyZnNjayAtZiAlc+KAnC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJPZGhhZG92YW7DoSBtaW5pbcOhbG7DrSB2ZWxpa29zdCBzeXN0w6ltdSBzb3Vib3LFrzogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJDaHlibsOhIG5vdsOhIHZlbGlrb3N0OiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjM5MworbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICJOb3bDoSB2ZWxpa29zdCBqZSBwxZnDrWxpxaEsIGFieSBieWxhIHZ5asOhZMWZZW5hIHZlIDMyIGJpdGVjaFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTm92w6EgdmVsaWtvc3QgamUgbWVuxaHDrSBuZcW+IG1pbmltdW0gKCVsbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA3Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJOZXBsYXRuw6EgZMOpbGthIGtyb2t1IgorCisjOiByZXNpemUvbWFpbi5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiRG90xI1lbsO9IG9kZMOtbCAobmVibyB6YcWZw616ZW7DrSkgamUgamVuICUnbGx1ICglZGspIGJsb2vFryB2ZWxrw6kuXG4iCisiUG/FvmFkb3ZhbGkganN0ZSBub3ZvdSB2ZWxpa29zdCAlJ2xsdSBibG9rxa8uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiU291Ym9yb3bDvSBzeXN0w6ltIGppxb4gamUgZGxvdWjDvSAlJ2xsdSBibG9rxa8uIE5lbsOtIGNvIGTEm2xhdCFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIlZlbGlrb3N0IHN5c3TDqW11IHNvdWJvcsWvICVzIHNlIG3Em27DrSBuYSAlJ2xsdSAoJWRrKSBibG9rxa8uXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgInDFmWkgcG9rdXN1IHptxJtuaXQgdmVsaWtvc3QgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiUG8gcMWZZXJ1xaFlbsOpIHptxJtuxJsgdmVsaWtvc3RpLCBwcm9zw61tLCBvcHJhdnRlIHNvdWJvcm92w70gc3lzdMOpbSBwb21vY8OtXG4iCisi4oCeZTJmc2NrIC1meSAlc+KAnFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIG5hICVzIGplIG55bsOtICUnbGx1IGJsb2vFryBkbG91aMO9LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgInDFmWkgcG9rdXN1IHprcsOhdGl0ICVzIgorCisjOiByZXNpemUvb25saW5lLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyBvbi1saW5lIHJlc2l6aW5nIHJlcXVpcmVkXG4iCittc2dzdHIgIiIKKyJTeXN0w6ltIHNvdWJvcsWvIHYgJXMgamUgcMWZaXBvamVuIGRvICVzLFxuIgorInBvxb5hZG92w6FuYSB6bcSbbmEgdmVsaWtvc3RpIHphIGLEm2h1LlxuIgorCisjOiByZXNpemUvb25saW5lLmM6ODMKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJabWVuxaFvdsOhbsOtIHphIGLEm2h1IG5lbsOtIHBvZHBvcm92w6FubyIKKworIzogcmVzaXplL29ubGluZS5jOjEwOAorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIlN5c3TDqW0gc291Ym9yxa8gbmVwb2Rwb3J1amUgem3Em251IHZlbGlrb3N0aSB6YSBixJtodSIKKworIzogcmVzaXplL29ubGluZS5jOjExNworbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIk5lZG9zdGF0ZWsgcmV6ZXJ2b3ZhbsO9Y2ggR0RUIGJsb2vFryBwcm8gem3Em251IHZlbGlrb3N0aSB6YSBixJtodSIKKworIzogcmVzaXplL29ubGluZS5jOjEyNAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiSsOhZHJvIG5lcG9kcG9ydWplIHptxJtudSB2ZWxpa29zdGkgc291Ym9yb3bDqWhvIHN5c3TDqW11IG5hIHR1dG8gdmVsaWtvc3QiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAicMWZaSBwb2t1c3Ugb3RldsWZw610IHDFmcOtcG9qbsO9IGJvZCAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIlZ5xb7DoWTDoW5vIHN0YXLDqSByb3pocmFuw60gcHJvIHptxJtudSB2ZWxpa29zdGkuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTYgcmVzaXplL29ubGluZS5jOjE3MworbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICJQb3ZvbGVuw60ga2Ugem3Em27EmyB2ZWxpa29zdGkgc3lzdMOpbXUgc291Ym9yxa8gemFtw610bnV0byIKKworIzogcmVzaXplL29ubGluZS5jOjE1OSByZXNpemUvb25saW5lLmM6MTc5Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiUMWZaSB6amnFocWlb3bDoW7DrSBwb2Rwb3J5IHptxJtueSB2ZWxpa29zdGkgemEgYsSbaHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNzYKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkrDoWRybyBuZXBvZHBvcnVqZSB6bcSbbnUgdmVsaWtvc3QgemEgYsSbaHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiTcSbbsOtIHNlIHZlbGlrb3N0aSB6YSBixJtodSAlcyBuYSAlJ2xsdSAoJWRrKSBibG9rxa8uXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJQxZlpIHBva3VzdSByb3rFocOtxZlpdCBwb3NsZWRuw60gc2t1cGludSIKKworIzogcmVzaXplL29ubGluZS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiUMWZaSBwb2t1c3UgcMWZaWRhdCBza3VwaW51IMSNLsKgJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICJTeXN0w6ltIHNvdWJvcsWvIHbCoCVzIGplIHDFmWlwb2plbiBkbyAlcyBhIHptxJtuYSB2ZWxpa29zdCB6YSBixJtodSBuZW7DrSBuYSB0b210byBzeXN0w6ltdSBwb2Rwb3JvdsOhbmEuXG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAiaXV6bMWvICglJ2xsdSkgbXVzw60gYsO9dCBtw6luxJsgbmXFviAlJ3UiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2MzEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgInJlemVydm92YW7DqSBibG9reSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjg3NQorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgImJsb2t5IG1ldGEtZGF0IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiVG90byBieSBzZSBuaWtkeSBuZW3Em2xvIHN0w6F0OiBpdXpseSBwcm8gem3Em251IHZlbGlrb3N0aSBqc291IHBvxaFrb3plbnkhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi44IgorbXNnc3RyICJLbmlob3ZuYSBFWFQyRlMgdmVyemUgMS40Mi44IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBiYWRibG9ja3NfbGlzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGJhZGJsb2Nrc19pdGVyYXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpbm9kZV9zY2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gdW5peG92b3Ugc3RydWt0dXJ1IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX21hbmFnZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX2NoYW5uZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBzZXpuYW11IGJsb2vFryBhZHJlc8OhxZnFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHN0cnVrdHVydSBpY291bnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBzdHJ1a3R1cnUgUG93ZXJxdWVzdCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gZXh0MiBzdHJ1a3R1cnUgc291Ym9ydSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyBobGF2acSNa3Ugb2JyYXp1IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gc3RydWt0dXJ1IGlvX2NoYW5uZWwgaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gcHJvIHBvcGlzb3ZhxI0gcm96c2FodSBleHQ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdsKgc3VwZXJibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiUmV2aXplIHN5c3TDqW11IHNvdWJvcsWvIGplIHDFmcOtbGnFoSB2eXNva8OhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiUG9rdXMgemFwc2F0IGRvIHNvdWJvcm92w6lobyBzeXN0w6ltdSwga3RlcsO9IGplIGplbiBwcm8gxI10ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiRGVza3JpcHRvcnkgc2t1cGluIG5lbHplIHDFmWXEjcOtc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJEZXNrcmlwdG9yeSBza3VwaW4gbmVsemUgemFwc2F0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICJQb8Wha296ZW7DvSBkZXNrcmlwdG9yIHNrdXBpbnk6IGNoeWJuw70gYmxvayBwcm8gYml0bWFwdSBibG9rxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIlBvxaFrb3plbsO9IGRlc2tyaXB0b3Igc2t1cGlueTogY2h5Ym7DvSBibG9rIHBybyBiaXRtYXB1IGl1emzFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJQb8Wha296ZW7DvSBkZXNrcmlwdG9yIHNrdXBpbnk6IGNoeWJuw70gYmxvayBwcm8gdGFidWxrdSBpdXpsxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQml0bWFwdSBpdXpsxa8gbmVsemUgemFwc2F0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQml0bWFwdSBpdXpsxa8gbmVsemUgcMWZZcSNw61zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJCaXRtYXB1IGJsb2vFryBuZWx6ZSB6YXBzYXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJCaXRtYXB1IGJsb2vFryBuZWx6ZSBwxZllxI3DrXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDIKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVGFidWxrdSBpdXpsxa8gbmVsemUgemFwc2F0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJUYWJ1bGt1IGl1emzFryBuZWx6ZSBwxZllxI3DrXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIk7DoXNsZWR1asOtY8OtIGl1emVsIG5lbHplIHDFmWXEjcOtc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiU3lzdMOpbSBzb3Vib3LFryBtw6EgbmXEjWVrYW5vdSB2ZWxpa29zdCBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJBZHJlc8OhxZkgZXh0MiBwb8Wha296ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiUG9rdXMgcMWZZcSNw61zdCBibG9rIHplIHN5c3TDqW11IHNvdWJvcsWvIHZ5w7pzdGlsIHZlIHprcsOhY2Vuw6kgxI10ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJQb2t1cyB6YXBzYXQgYmxvayBkbyBzeXN0w6ltdSBzb3Vib3LFryB2ecO6c3RpbCB2ZSB6a3LDoWNlbsO9IHrDoXBpcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICJWwqBhZHJlc8OhxZlpIG5lbsOtIHZvbG7DqSBtw61zdG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCaXRtYXBhIGl1emzFryBuZW7DrSBuYcSNdGVuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIkJpdG1hcGEgYmxva8WvIG5lbsOtIG5hxI10ZW5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiTmVwbGF0bsOpIMSNw61zbG8gaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOZXBsYXRuw6kgxI3DrXNsbyBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIlZuaXTFmW7DrSBjaHliYSBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJOZWRvc3RhdGVrIG3DrXN0YSBwcm8gdsO9c3RhdmJ1IG5hdnLFvmVuw6kgc291Ym9yb3bDqWhvIHN5c3TDqW11IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJEbyBleHQyZnNfbWFya19ibG9ja19iaXRtYXAgcMWZZWTDoW5vIHpha8OhemFuw6kgxI3DrXNsbyBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJEbyBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCBwxZllZMOhbm8gemFrw6F6YW7DqSDEjcOtc2xvIGJsb2t1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICJEbyBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAgcMWZZWTDoW5vIHpha8OhemFuw6kgxI3DrXNsbyBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAgcMWZZWTDoW5vIHpha8OhemFuw6kgxI3DrXNsbyBpdXpsdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiUG9rdXMgcG9kdnJobm91dCBrb25lYyBiaXRtYXB5IGJsb2vFryB6YSBza3V0ZcSNbsO9IGtvbmVjIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlBva3VzIHBvZHZyaG5vdXQga29uZWMgYml0bWFweSBpdXpsxa8gemEgc2t1dGXEjW7DvSBrb25lYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiTmFsZXplbiB6YWvDoXphbsO9IG5lcMWZw61tw70gYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk5hbGV6ZW4gemFrw6F6YW7DvSBkdm9qbsOhc29ibsSbIG5lcMWZw61tw70gYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk5hbGV6ZSB6YWvDoXphbsO9IHRyb2puw6Fzb2JuxJsgbmVwxZnDrW3DvSBibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkJpdG1hcHkgYmxva8WvIHNlIG5lc2hvZHVqw60iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQml0bWFwdSBpdXpsxa8gc2UgbmVzaG9kdWrDrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIlpha8OhemFuw70gbmVibyBjaHlibsSbIHV0dm/FmWVuw70gbsOhemV2IHphxZnDrXplbsOtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIlNrdXBpbmEgYmxva8WvIHBvc3Ryw6Fkw6EgdGFidWxrdSBpdXpsxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiU3VwZXJibG9rIGV4dDIgamUgcG/FoWtvemVuw70iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiRG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAgcMWZZWTDoW5vIHpha8OhemFuw6kgxI3DrXNsbyBvYmVjbsO9Y2ggYml0xa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJEbyBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gb2JlY27DvWNoIGJpdMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIkRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIHDFmWVkw6FubyB6YWvDoXphbsOpIMSNw61zbG8gb2JlY27DvWNoIGJpdMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlphem5hbWVuw6FubyBwxZnDrWxpxaEgbW5vaG8gc3ltYm9saWNrw71jaCBvZGthesWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiRnVua2NlIHpwxJt0bsOpaG8gdm9sw6Fuw60gdGVudG8gcMWZw61wYWQgbmV1bcOtIG9ic2xvdcW+aXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiSXV6ZWwgcG9jaMOhesOtIHrCoGNoeWJuw6lobyBibG9rdSB0YWJ1bGt5IGl1emzFryIKKworIyBUT0RPOiBQbHVyYWxpemUKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIlNvdWJvcm92w70gc3lzdMOpbSBtw6EgbmVwb2Rwb3JvdmFub3Uow6kpIHZsYXN0bm9zdChpKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIlNvdWJvcm92w70gc3lzdMOpbSBtw6EgbmVwb2Rwb3JvdmFuw6kgdmxhc3Rub3N0aSwga3RlcsOpIGx6ZSBqZW4gxI3DrXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIkkvTyBDaGFubmVsIG5lZG9rw6F6YWwgcMWZZXN1bm91dCBwb3ppY2kgcHJvIMSNdGVuw60gbmVibyB6w6FwaXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWxva2FjZSBwYW3Em3RpIHNlbGhhbGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiRG8ga25paG92bnkgZXh0MiBwxZllZMOhbiBuZXBsYXRuw70gYXJndW1lbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlbCoHNvdWJvcm92w6ltIHN5c3TDqW11IGV4dDIgbmVieWxvIG1vxb5uw6kgYWxva292YXQgYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiVsKgc291Ym9yb3bDqW0gc3lzdMOpbXUgZXh0MiBuZWJ5bG8gbW/Fvm7DqSBhbG9rb3ZhdCBpdXplbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkl1emVsIGV4dDIgbmVuw60gYWRyZXPDocWZZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyBvZGthesWvIGRvIHRhYnVsa3kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJGdW5rY2UgZXh0Ml9sb29rdXAgc291Ym9yIG5lbmFsZXpsYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiU291Ym9yIG90ZXbFmWVuIGplbiBwcm8gxI10ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5Cittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJCbG9rIGFkcmVzw6HFmWUgZXh0MiBuZW5hbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJBZHJlc8OhxZkgZXh0MiBqacW+IGV4aXN0dWplIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiTmVpbXBsZW1lbnRvdmFuw6EgZnVua2NlIGtuaWhvdm55IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiVcW+aXZhdGVsIHpydcWhaWwgcG/FvmFkYXZlayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIlNvdWJvciBleHQyIGplIHDFmcOtbGnFoSB2ZWxrw70iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiRG9kYW7DqSDFvnVybsOhbG92YWPDrSB6YcWZw616ZW7DrSBuZW7DrSBibG9rb3bDvW0gemHFmcOtemVuw61tIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJTdXBlcmJsb2sgxb51cm7DoWx1IG5lbmFsZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICLFvXVybsOhbCBtdXPDrSBtw610IGFzcG/FiCAxMDI0IGJsb2vFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICJOZXBvZHBvcm92YW7DoSB2ZXJ6ZSDFvnVybsOhbHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiQ2h5YmEgcMWZaSBuYcSNw610w6Fuw60gZXh0ZXJuw61obyDFvnVybsOhbHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICLFvXVybsOhbCBuZW5hbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiSGFzaCBhZHJlc8OhxZnFryBuZXBvZHBvcm92w6FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOZXBsYXRuw6kgxI3DrXNsbyBibG9rdSByb3rFocOtxZllbsOpaG8gYXRyaWJ1dHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiU291Ym9yb3bDvSBzeXN0w6ltIG5lbHplIHZ5dHZvxZlpdCBzwqBwb8W+YWRvdmFuw71tIHBvxI10ZW0gaXV6bMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJTbsOtbWVrIGUyaW1hZ2Ugc2UgcHLDoXbEmyBuZXBvdcW+w612w6EiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiUMWZw61sacWhIG1ub2hvIHJlemVydm92YW7DvWNoIGJsb2vFryBkZXNrcmlwdG9yxa8gc2t1cGlueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICJJdXplbCB1csSNZW7DvSBwcm8gem3Em251IHZlbGlrb3N0aSBqZSBwb8Wha296ZW7DvSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiQnlsIHBva3VzIG5hc3Rhdml0IGJpdG1hcHUgYmxva8WvIHPCoGNoeWLEm2rDrWPDrW0gbmVwxZnDrW3DvW0gYmxva2VtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IMOac3DEm2NoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IERhdGFiw6F6ZSBwb8Wha296ZW5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBDaHliYSB2c3R1cHUvdsO9c3R1cHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogQ2h5YmEgemFteWvDoW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBOZWRvc3RhdGVrIHBhbcSbdGkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIlREQjogWsOhem5hbSBleGlzdHVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBaw6FtZWsgZXhpc3R1amUgbmEgamluw6ltIGtsw63EjWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IE5lcGxhdG7DvSBwYXJhbWV0ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUREI6IFrDoXpuYW0gbmVleGlzdHVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiBaw6FwaXMgbmVuw60gcG92b2xlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiU2V6bmFtIGJsb2vFryBhZHJlc8OhxZnFryBleHQyIGplIHByw6F6ZG7DvSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIlBva3VzIHptxJtuaXQgbWFwb3bDoW7DrSBibG9rxa8gcMWZZXMgYmxva292w70gaXRlcsOhdG9yIHVyxI1lbsO9IGplbiBwcm8gxI10ZW7DrSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyB1bG/FvmVub3UgY2VzdHUgZXh0NCByb3pzYWh1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gNjRiaXRvdm91IG9iZWNub3UgYml0bWFwdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHBybyA2NGJpdG92b3UgYml0bWFwdSBibG9rxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyBwcm8gNjRiaXRvdm91IGJpdG1hcHUgaXV6bMWvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvwqDigJMgUkVTRVJWRURfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG/CoOKAkyBSRVNFUlZFRF8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsb8Kg4oCTIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvwqDigJMgUkVTRVJWRURfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG/CoOKAkyBSRVNFUlZFRF8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsb8Kg4oCTIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvwqDigJMgUkVTRVJWRURfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIlBvxaFrb3plbsOhIGhsYXZpxI1rYSByb3pzYWh1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIlBvxaFrb3plbsO9IGluZGV4IHJvenNhaHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiUG/FoWtvemVuw70gcm96c2FoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJWwqBtYXDEmyByb3pzYWjFryBuZXpiw712w6Egdm9sbsOpIG3DrXN0byIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJdXplbCBuZXBvdcW+w612w6Egcm96c2FoeSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIsW9w6FkbsO9IOKAnmRhbMWhw63igJwgcm96c2FoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIsW9w6FkbsOhIOKAnnDFmWVkY2hvesOt4oCcIHJvenNhaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICLFvcOhZG7DvSDigJ5uYWTFmcOtemVuw73igJwgcm96c2FoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAixb3DoWRuw70g4oCecG9kxZnDrXplbsO94oCcIHJvenNhaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAixb3DoWRuw70gc291xI1hc27DvSB1emVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJPcGVyYWNlIGV4dDIgbmVuw60gcG9kcG9yb3bDoW5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIk5lbsOtIG3DrXN0byBwcm8gdmxvxb5lbsOtIHJvenNhaHUgZG8gdXpsdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiUm96ZMSbbGVuw60gYnkgdmVkbG8ga8KgcHLDoXpkbsOpbXUgdXpsdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIlJvenNhaCBuZW5hbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiT3BlcmFjZSBuYSBpdXpsZWNoIG9ic2FodWrDrWPDrWNoIHJvenNhaHkgbmVuw60gcG9kcG9yb3bDoW5hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICJEw6lsa2Egcm96c2FodSBuZW7DrSBwbGF0bsOhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiSS9PIENoYW5uZWwgbmVwb2Rwb3J1amUgNjRiaXRvdsOhIMSNw61zbGEgYmxva8WvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiS3bFr2xpIGNoeWLEm2rDrWPDrW11IHNvdWJvcnUgbXRhYiBuZWx6ZSB6amlzdGl0LCB6ZGEtbGkgamUgc3lzdMOpbSBzb3Vib3LFryBwxZlpcG9qZW7DvSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiU291Ym9yb3bDvSBzeXN0w6ltIGplIHDFmcOtbGnFoSB2ZWxrw70gbmEgdG8sIGFieSBzZSBwb3XFvmlseSB6YXN0YXJhbMOpIGJpdG1hcHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVA6IG5lcGxhdG7DqSBtYWdpY2vDqSDEjcOtc2xvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiB6YcWZw616ZW7DrSBqZSBwcsOhdsSbIGFrdGl2bsOtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiTU1QOiBwcsOhdsSbIGLEm8W+w60ga29udHJvbGEgc291Ym9yb3bDqWhvIHN5c3TDqW11IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDogxI3DrXNsbyBibG9rdSBzZSBuYWNow6F6w60gemEgaHJhbmljw60gc3lzdMOpbXUgc291Ym9yxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogcHLDoXbEmyBwcm9iw61ow6EgbmV6bsOhbcOhIG9wZXJhY2UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICJNTVA6IHN5c3TDqW11IHNvdWJvcsWvIHNlIHN0w6FsZSBwb3XFvsOtdsOhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICJNTVA6IG90ZXbFmWVuw60gc8KgT19ESVJFQ1Qgc2VsaGFsbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NgorbXNnaWQgIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCittc2dzdHIgIk5lc3Byw6F2bsOhIHZlbGlrb3N0IGRlc2tyaXB0b3J1IHNrdXBpbnkgYmxva8WvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBpdXpsdSBuZW9kcG92w61kw6EgaXV6bHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTgKK21zZ2lkICJJbm9kZSBiaXRtYXAgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYml0bWFwIgorbXNnc3RyICJLb250cm9sbsOtIHNvdcSNZXQgYml0bWFweSBpdXpsxa8gbmVvZHBvdsOtZMOhIGJpdG1hcMSbIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiS29udHJvbG7DrSBzb3XEjWV0IGJsb2t1IHJvenNhaMWvIG5lb2Rwb3bDrWTDoSBibG9rdSByb3pzYWjFryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiQmxvayBhZHJlc8OhxZnFryBuZW3DoSBtw61zdG8gcHJvIGtvbnRyb2xuw60gc291xI1ldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBibG9rdSBhZHJlc8OhxZnFryBuZW9kcG92w61kw6EgYmxva3UgYWRyZXPDocWZxa8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIktvbnRyb2xuw60gc291xI1ldCBibG9rdSByb3rFocOtxZllbsO9Y2ggYXRyaWJ1dMWvIG5lb2Rwb3bDrWTDoSBibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiS29udHJvbG7DrSBzb3XEjWV0IHN1cGVyYmxva3UgbmVvZHBvdsOtZMOhIHN1cGVyYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiTmV6bsOhbcO9IGFsZ29yaXRtdXMga29udHJvbG7DrWhvIHNvdcSNdHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJLb250cm9sbsOtIHNvdcSNZXQgYmxva3UgTU1QIG5lb2Rwb3bDrWTDoSBibG9rdSBNTVAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlNvdWJvciBleHQyIGppxb4gZXhpc3R1amUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsIHZlcnplIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdsKgcHJvZmlsZV9ub2RlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlNla2NlIHPCoHByb2ZpbGVtIG5lbmFsZXplbmEiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlJlbGFjZSBwcm9maWx1IG5lbmFsZXplbmEiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIlBva3VzIHDFmWlkYXQgcmVsYWNpIHV6bHUsIGt0ZXLDvSBuZW7DrSBzZWtjw60iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICJIbGF2acSNa2Egc2VrY2UgcHJvZmlsdSBtw6EgbmVudWxvdm91IGhvZG5vdHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiQ2h5Ym7DvSB6xZlldMSbemVuw70gc2V6bmFtIHZlIHN0cnVrdHXFmWUgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJDaHlibsOhIMO6cm92ZcWIIHNrdXBpbnkgdmUgc3RydWt0dcWZZSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkNoeWJuw70gdWthemF0ZWwgbmEgcm9kacSNZSB2ZSBzdHJ1a3R1xZllIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyB2wqBpdGVyw6F0b3J1IHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiVXpsdSBzZWtjZSBuZWx6ZSBuYXN0YXZpdCBob2Rub3R1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIHByb2ZpbGUgbGlicmFyeSIKK21zZ3N0ciAiRG8ga25paG92bnkgcHJvZmlsdSBwxZllZMOhbiBuZXBsYXRuw70gYXJndW1lbnQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlBva3VzIHptxJtuaXQgcHJvZmlsLCBrdGVyw70gamUgamVuIHBybyDEjXRlbsOtIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiSGxhdmnEjWthIHNla2NlIHByb2ZpbHUgbmVuw60gbmEgbmVqdnnFocWhw60gw7pyb3ZuaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiQ2h5YmEgc3ludGF4ZSB2ZSBobGF2acSNY2Ugc2VrY2UgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiQ2h5YmEgc3ludGF4ZSB2wqByZWxhY2kgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIk5hZGJ5dGXEjW7DoSB1emF2w61yYWPDrSB6w6F2b3JrYSB2wqBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJWwqBwcm9maWx1IGNoeWLDrSBvdGV2w61yYWPDrSB6w6F2b3JrYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICJDaHlibsOpIG1hZ2lja8OpIMSNw61zbG8gdsKgcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHbCoHByb2ZpbGVfc2VjdGlvbl90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMQorbXNnaWQgIkl0ZXJhdGlvbiB0aHJvdWdoIGFsbCB0b3AgbGV2ZWwgc2VjdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJQcsWvY2hvZCBza3J6ZSB2xaFlY2hueSB2cmNob2xvdsOpIHNla2NlIG5lbsOtIHBvZHBvcm92w6FuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiTmVwbGF0bsO9IG9iamVrdCBwcm9maWxlX3NlY3Rpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAixb3DoWRuw6kgZGFsxaHDrSBzZWtjZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiRG8gZG90YXpvdmFjw60gcnV0aW55IHDFmWVkw6FuYSBjaHlibsOhIG1ub8W+aW5hIG7DoXp2xa8iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIsW9w6FkbsO9IHNvdWJvciBzwqBwcm9maWxlbSBrwqBvdGV2xZllbsOtIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiQ2h5Ym7DqSBtYWdpY2vDqSDEjcOtc2xvIHbCoHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJTb3Vib3Igc8KgcHJvZmlsZW0gbmVieWxvIG1vxb5uw6kgb3RldsWZw610IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlNla2NlIGppxb4gZXhpc3R1amUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICJOZXBsYXRuw6EgcHJhdmRpdm9zdG7DrSBob2Rub3RhIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiTmVwbGF0bsOhIGNlbG/EjcOtc2VsbsOhIGhvZG5vdGEiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIkNoeWJuw6kgbWFnaWNrw6kgxI3DrXNsbyB2IHByb2ZpbGVfZmlsZV9kYXRhX3QiCisKKyN+IG1zZ2lkICJDbGVhcmluZyBleHRlbnQgZmxhZyBub3Qgc3VwcG9ydGVkIG9uICVzIgorI34gbXNnc3RyICJPZHN0cmFuxJtuw60gcMWZw616bmFrdSByb3pzYWh1IG5lbsOtIG5hICVzIHBvZHBvcm92w6FubyIKKworI34gbXNnaWQgIiIKKyN+ICIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisjfiAiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IEtvbWJpbmFjZSB2bGFzdG5vc3TDrSBmbGV4X2JnIGFcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgbmVuw60gcG9kcG9yb3bDoW5hIG7DoXN0cm9qZW0gcmVzaXplMmZzLlxuIgorCisjfiBtc2dpZCAiJXMgaXMgbW91bnRlZC4gICIKKyN+IG1zZ3N0ciAiJXMgamUgcMWZaXBvamVuLiAiCisKKyN+IG1zZ2lkICJAZyAlZyBAYiBAQiB1bmluaXRpYWxpemVkIGJ1dCBAaSBAQiBpbiB1c2UuXG4iCisjfiBtc2dzdHIgIkJpdG1hcGEgYmxva8WvIHNrdXBpbnkgJWcgbmVpbmljaWFsaXpvdsOhbmEsIGHEjWtvbGl2IGJpdG1hcGEgaXV6bMWvIGplIHBvdcW+aXRhLlxuIgorCisjfiBtc2dpZCAiQGkgJWkgc2hvdWxkIG5vdCBoYXZlIEVPRkJMT0NLU19GTCBzZXQgKHNpemUgJUlzLCBsYmxrICVyKVxuIgorI34gbXNnc3RyICJJdXplbCAlaSBieSBuZW3Em2wgbcOtdCBuYXN0YXZlbm8gRU9GQkxPQ0tTX0ZMICh2ZWxpa29zdCAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJWZWxpa29zdCDFvnVybsOhbHUgbmVsemUgdXLEjWl0IgorCisjfiBtc2dpZCAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIgorI34gbXNnc3RyICIjXHRcdCAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iCisKKyMgVE9ETzogTWlzc2luZy4uLiBub3QgcHJlc2VudCBpcyBkdXBsaWNhdGUKKyN+IG1zZ2lkICJNaXNzaW5nIGluZGlyZWN0IGJsb2NrIG5vdCBwcmVzZW50IgorI34gbXNnc3RyICJOZXDFmcOtbcO9IGJsb2sgbmVuw60gcMWZw610b21lbiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPEl1emVsIGluZGV4dSBBQ0w+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxJdXplbCBkYXQgQUNMPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgImtyw6F0a8O9IHrDoXBpcyAoamVuICVkIGJhanTFrykgcMWZaSB6w6FwaXN1IGhsYXZpxI1reSBvYnJhenUiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZyYWdtZW50IHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAixaFwYXRuw6EgdmVsaWtvc3QgZnJhZ21lbnR1wqDigJMgJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJWYXJvdsOhbsOtOiBmcmFnbWVudHkgbmVwb2Rwb3JvdsOhbnkuIElnbm9ydWppIHDFmWVww61uYcSNIC1mXG4iCisKKyMgQ2FsbGluZyBpcyBzdWJqZWN0CisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiVm9sw6Fuw60gQkxLRElTQ0FSRCBvZCAlbGx1IGRvICVsbHUgIgorCisjIENvbnRpbnVhdGlvbiBvZiAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ2lkICJzdWNjZWVkZWQuXG4iCisjfiBtc2dzdHIgInVzcMSbbG8uXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIsW9dXJuw6FsIE5FT0RTVFJBTsSaTlxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIlN1cGVyYmxvayBuZW3DoSBwxZnDrXpuYWsgaGFzX2pvdXJuYWwsIGFsZSBtw6Egxb51cm7DoWwgZXh0MyAlcy5cbiIKKworI34gbXNnaWQgIkVycm9yIHdoaWxlIGRlbGV0aW5nIGV4dGVudDogJW1cbiIKKyN+IG1zZ3N0ciAiQ2h5YmEgcMWZaSBtYXrDoW7DrSByb3pzYWh1OiAlbVxuIgorCisjfiBtc2dpZCAiUmVjcmVhdGUgam91cm5hbCB0byBtYWtlIHRoZSBmaWxlc3lzdGVtIGV4dDMgYWdhaW4/XG4iCisjfiBtc2dzdHIgIlpub3Z1IHZ5dHZvxZlpdCDFvnVybsOhbCwgYWJ5IHNlIHrDrXNrYWwgenDEm3Qgc291Ym9yb3bDvSBzeXN0w6ltIGV4dDM/XG4iCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICLFoXBhdG7DoSB2ZWxpa29zdCBibG9rdcKg4oCTICVzIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgInDFmWkgb3Bha292YW7DqW0gcG9rdXN1IHphcHNhdCBiaXRtYXB5IGJsb2vFryBwcm8gJXMiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyBzZWxoYWxvIHBybyAlczogJXNcbiIKKworIyBUb3RvIGplIG9wZW4oMikgcG91xb5pdMO9IGpha28gdGl0dWxlayBjaHlib3bDqWhvIGhsw6HFoWVuw60KKyN+IG1zZ2lkICJvcGVuIgorI34gbXNnc3RyICJvdGV2w61yw6Fuw60iCisKKyN+IG1zZ2lkICJIRElPX0dFVEdFTyBpb2N0bCIKKyN+IG1zZ3N0ciAiaW9jdGwgSERJT19HRVRHRU8iCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJpb2N0bCBCTEtHRVRTSVpFIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgIlJvesWhw63FmWVuw70gYXRyaWJ1dCB2wqBpdXpsdSAlaSBtw6EgaGFzaCAoJU4pLCBrdGVyw70gbmVuw60gcGxhdG7DvSAobXVzw60gYsO9dCAwKVxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKyN+IG1zZ3N0ciAicMWZaSB2b2zDoW7DrSBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKworI34gbXNnaWQgIndoaWxlIGNhbGxpbmcgaXRlcmF0b3IgZnVuY3Rpb24iCisjfiBtc2dzdHIgInDFmWkgdm9sw6Fuw60gZnVua2NlIGl0ZXLDoXRvcnUiCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAicMWZaSBhbG9rYWNpIHZ5cm92bsOhdmFjw60gcGFtxJt0aSBpbm9kZSIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAicMWZaSDEjXRlbsOtIHRhYnVsa3kgaW5vZGUgKHNrdXBpbmEgJWQpIgorCisjfiBtc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJwxZlpIHrDoXBpc3UgdGFidWxreSBpbm9kZSAoc2t1cGluYSAlZCkiCisKKyN+IG1zZ2lkICJQYXNzIDA6IERvaW5nIGJ5dGUtc3dhcCBvZiBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIlByxa9jaG9kIDA6IFByb3bDoWTDrW0gcMWZZWhvemVuw60gYmFqdMWvIHN5c3TDqW11IHNvdWJvcsWvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IHRoZSBmaWxlc3lzdGVtIG11c3QgYmUgZnJlc2hseSBjaGVja2VkIHVzaW5nIGZzY2tcbiIKKyN+ICJhbmQgbm90IG1vdW50ZWQgYmVmb3JlIHRyeWluZyB0byBieXRlLXN3YXAgaXQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogc3lzdMOpbSBzb3Vib3LFryBtdXPDrSBiw710IHDFmWVkIHBva3VzZW0gcMWZZWhvZGl0IGJhanR5XG4iCisjfiAixI1lcnN0dsSbIG90ZXN0b3bDoW4gcG9tb2PDrSBmc2NrIGEgbmVzbcOtIGLDvXQgcMWZaXBvamVuLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICJQxZllaG96ZW7DrSBiYWp0xa8iCisKKyN+IG1zZ2lkICJCeXRlLXN3YXBwaW5nIGZpbGVzeXN0ZW1zIG5vdCBjb21waWxlZCBpbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrXG4iCisjfiBtc2dzdHIgIlDFmWVob3plbsOtIGJhanTFryBzeXN0w6ltxa8gc291Ym9yxa8gbmVuw60gemFidWRvdsOhbm8gdiB0w6l0byB2ZXJ6aSBlMmZzY2tcbiIKKworI34gbXNnaWQgIkluY29tcGF0aWJsZSBvcHRpb25zIG5vdCBhbGxvd2VkIHdoZW4gYnl0ZS1zd2FwcGluZy5cbiIKKyN+IG1zZ3N0ciAiUMWZaSBwxZllaG96ZW7DrSBiYWp0xa8gbmVqc291IGRvdm9sZW55IG5la29tcGF0aWJpbG7DrSBwxZllcMOtbmHEjWUuXG4iCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXM6IFBvxZlhZMOtIGJhanTFryBzeXN0w6ltdSBzb3Vib3LFryBqacW+IG5vcm1hbGl6b3bDoW5vLlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAtICVzIgorI34gbXNnc3RyICLFoXBhdG7DvSBwb8SNw6F0ZcSNbsOtIGJsb2vCoOKAkyAlcyIKKworI34gbXNnaWQgIk5vdGU6IFRoaXMgaXMgYSBieXRlLXN3YXBwZWQgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJQb3puw6Fta2E6IFRlbnRvIHN5c3TDqW0gc291Ym9yxa8gbcOhIHDFmWVob3plbsOpIGJhanR5XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZXN5c3RlbSB0b28gbGFyZ2UuICBObyBtb3JlIHRoYW4gMioqMzEtMSBibG9ja3NcbiIKKyN+ICJcdCAoOFRCIHVzaW5nIGEgYmxvY2tzaXplIG9mIDRrKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTb3Vib3JvdsO9IHN5c3TDqW0gamUgcMWZw61sacWhIHZlbGvDvS4gVsKgc291xI1hc25vc3RpIG5lbsOtIHBvZHBvcm92w6FubyB2w61jZSBqYWtcbiIKKyN+ICJcdDIqKjMxLTEgYmxva8WvICg44oCvVEIgcMWZaSA0ayBibG9jw61jaCkuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHNvbWUgMi40IGtlcm5lbHMgZG8gbm90IHN1cHBvcnQgYmxvY2tzaXplcyBncmVhdGVyIHRoYW4gNDA5NlxuIgorI34gIlx0dXNpbmcgZXh0My4gIFVzZSAtYiA0MDk2IGlmIHRoaXMgaXMgYW4gaXNzdWUgZm9yIHlvdS5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlZhcm92w6Fuw606IG7Em2t0ZXLDoSBqw6FkcmEgesKgxZlhZHkgMi40IG5lcG9kcG9ydWrDrSBuYSBleHQzIGJsb2t5IHbEm3TFocOtIG5lxb4gNDA5NlxuIgorI34gIlx0SmUtbGkgdG8gdsOhxaEgcMWZw61wYWQsIHBvdcW+aWp0ZSDigJ4tYiA0MDk24oCcLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiV2FybmluZzogJWQtYnl0ZSBpbm9kZXMgbm90IHVzYWJsZSBvbiBvbGRlciBzeXN0ZW1zXG4iCisjfiBtc2dzdHIgIlZhcm92w6Fuw606ICVkYmFqdG92w6kgaXV6bHkgbmVqc291IG5hIHN0YXLFocOtY2ggc3lzdMOpbWVjaCBwb3XFvml0ZWxuw6lcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MgZGlzYWJsZWQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJTeXN0w6ltIHNvdWJvcsWvIGppxb4gbcOhIMWZw61ka8OpIHN1cGVyYmxva3kgemFrw6F6w6FueS5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIGNsZWFyZWQuICAlcyIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlDFmcOtem5hayDFmcOtZGvDvWNoIHN1cGVyYmxva8WvIHZ5bWF6w6FuLiAgJXMiCisKKyN+IG1zZ2lkICJDbG9uZSBkdXBsaWNhdGUvYmFkIGJsb2NrcyIKKyN+IG1zZ3N0ciAiS2xvbm92YXQgZHVwbGlrw6F0bsOtL8WhcGF0bsOpIGJsb2t5IgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlRoaXMgaW5jb25zaXN0ZW5jeSBjYW4gbm90IGJlIGZpeGVkIHdpdGggZTJmc2NrOyB0byBmaXggaXQsIHVzZVxuIgorI34gImR1bXBlMmZzIC1iIHRvIGR1bXAgb3V0IHRoZSBiYWQgQGIgbGlzdCBhbmQgZTJmc2NrIC1MIGZpbGVuYW1lXG4iCisjfiAidG8gcmVhZCBpdCBiYWNrIGluIGFnYWluLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiVHV0byBuZWtvbnppc3RlbmNpIG5lbHplIG9wcmF2aXQgcG9tb2PDrSBlMmZzY2s7IG9wcmF2dGUgamkgcG91xb5pdMOtbVxuIgorI34gImR1bXBlMmZzIC1iIHBybyB2w71waXMgc2V6bmFtdSDFoXBhdG7DvWNoIGJsb2vFryBhIGUyZnNjayAtTCBqbcOpbm9zb3Vib3J1XG4iCisjfiAicHJvIGplaG8gb3DEm3Rvdm7DqSBuYcSNdGVuw60uXG4iCisKKyN+IG1zZ2lkICJFcnJvciBhbGxvY2F0aW5nIEBhIEBiICViLiAgIgorI34gbXNnc3RyICJDaHliYSBwxZlpIGFsb2thY2kgYmxva3Ugcm96xaHDrcWZZW7DvWNoIGF0cmlidXTFryAlYi4gIgorCisjfiBtc2dpZCAiIgorI34gIkR1cGxpY2F0ZSBAYnMgZm91bmQuLi4gaW52b2tpbmcgZHVwbGljYXRlIEBiIHBhc3Nlcy5cbiIKKyN+ICJQYXNzIDFCOiBSZXNjYW4gZm9yIGR1cGxpY2F0ZS9iYWQgQGJzXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJOYWxlemVueSBkdXBsaWvDoXRuw60gYmxva3nigKYgc3BvdcWhdMOtbSBwcsWvY2hvZHkgcHJvIGR1cGxpa8OhdG7DrSBibG9reS5cbiIKKyN+ICJQcsWvY2hvZCAxQjogT3DEm3Rvdm7DqSBobGVkw6Fuw60gZHVwbGlrb3ZhbsO9Y2gvxaFwYXRuw71jaCBibG9rxa9cbiIKKworI34gbXNnaWQgIkR1cGxpY2F0ZS9iYWQgQGIocykgaW4gQGkgJWk6IgorI34gbXNnc3RyICJEdXBsaWtvdmFuw70vxaFwYXRuw70gYmxvayh5KSB2IGlub2RlICVpOiIKKworI34gbXNnaWQgIkZvcmNpYmx5IGNsZWFyaW5nIEhUUkVFIGZsYWcgb24gQGkgJWQgKCVxKS4gIChCZXRhIHRlc3QgY29kZSlcbiIKKyN+IG1zZ3N0ciAiVnludWNlbsSbIG1hxb51IHDFmcOtem5hayBIVFJFRSB2IGlub2RlICVkICglcSkuIChLw7NkIHYgYmV0YSB0ZXN0b3bDoW7DrSlcbiIKKworI34gbXNnaWQgIiIKKyN+ICIlOGQgYmxvY2tzIHVzZWQgKCVkJSUpXG4iCisjfiAiJThkIGJhZCBibG9ja3NcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiU4ZCBwb3XFvml0w71jaCBibG9rxa8gKCVkJSUpXG4iCisjfiAiJThkIMWhcGF0bsO9Y2ggYmxva8WvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiJThkIHJlZ3VsYXIgZmlsZXNcbiIKKyN+ICIlOGQgZGlyZWN0b3JpZXNcbiIKKyN+ICIlOGQgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorI34gIiU4ZCBibG9jayBkZXZpY2UgZmlsZXNcbiIKKyN+ICIlOGQgZmlmb3NcbiIKKyN+ICIlOGQgbGlua3NcbiIKKyN+ICIlOGQgc3ltYm9saWMgbGlua3MgKCVkIGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCisjfiAiJThkIHNvY2tldHNcbiIKKyN+ICItLS0tLS0tLVxuIgorI34gIiU4ZCBmaWxlc1xuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJThkIG9iecSNZWpuw71jaCBzb3Vib3LFr1xuIgorI34gIiU4ZCBhZHJlc8OhxZnFr1xuIgorI34gIiU4ZCBzb3Vib3LFryB6bmFrb3bDvWNoIHphxZnDrXplbsOtXG4iCisjfiAiJThkIHNvdWJvcsWvIGJsb2tvdsO9Y2ggemHFmcOtemVuw61cbiIKKyN+ICIlOGQgZmlmb1xuIgorI34gIiU4ZCBvZGthesWvXG4iCisjfiAiJThkIHN5bWJvbGlja8O9Y2ggb2RrYXrFryAoJWQgcnljaGzDvWNoIHN5bWJvbGlja8O9Y2ggb2RrYXrFrylcbiIKKyN+ICIlOGQgc29ja2V0xa9cbiIKKyN+ICItLS0tLS0tLVxuIgorI34gIiU4ZCBzb3Vib3LFr1xuIgorCisjfiBtc2dpZCAiIgorI34gIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorI34gImlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uICBWYWxpZCByYWlkIG9wdGlvbnMgYXJlOlxuIgorI34gIlx0ZWFfdmVyPTxlYV92ZXJzaW9uICgxIG9yIDIpXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJSb3rFocOtxZllbsOpIHDFmWVww61uYcSNZSBqc291IG9kZMSbbGVueSDEjcOhcmthbWkgYSBtb2hvdSBtw610IGFyZ3VtZW50LCBrdGVyw70gamVcbiIKKyN+ICJvZGTEm2xlbiB6bmFtw6lua2VtIHJvdm7DoSBzZSAo4oCePeKAnCkuIFBsYXRuw6kgcMWZZXDDrW5hxI1lIHJhaWQganNvdTpcbiIKKyN+ICJcdGVhX3Zlcj08dmVyemVfZWEgKDEgbmVibyAyKVxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI34gbXNnc3RyICJob3Rvdm8gICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyN+IG1zZ2lkICJkdXJpbmcgc2VlayBvbiBibG9jayAlZCIKKyN+IG1zZ3N0ciAicMWZaSBwb3N1bnUgbmEgYmxvayAlZCIKKworI34gbXNnaWQgIkluaXRpYWxpemluZyByYW5kb20gdGVzdCBkYXRhXG4iCisjfiBtc2dzdHIgIkluaWNpYWxpenVqaSBuw6Fob2Ruw6EgdGVzdG92YWPDrSBkYXRhXG4iCisKKyN+IG1zZ2lkICJiYWQgYmxvY2tzIHJhbmdlOiAlbHUtJWx1IgorI34gbXNnc3RyICLFoXBhdG7DvSByb3pzYWggYmxva8WvOiAlbHUtJWx1IgorCisjfiBtc2dpZCAiVXNhZ2U6ICBmaW5kc3VwZXIgZGV2aWNlIFtza2lwYnl0ZXMgW3N0YXJ0a2JdXVxuIgorI34gbXNnc3RyICJQb3XFvml0w606ICBmaW5kc3VwZXIgemHFmcOtemVuw60gW3DFmWVza2Frb3ZhdGJhanTFryBbc3RhcnRrYl1dXG4iCisKKyN+IG1zZ2lkICJza2lwYnl0ZXMgc2hvdWxkIGJlIGEgbnVtYmVyLCBub3QgJXNcbiIKKyN+IG1zZ3N0ciAicMWZZXNrYWtvdmF0YmFqdMWvIGJ5IG3Em2xvIGLDvXQgxI3DrXNsbywgbmUgJXNcbiIKKworI34gbXNnaWQgInNraXBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHNlY3RvciBzaXplXG4iCisjfiBtc2dzdHIgInDFmWVza2Frb3ZhdGJhanTFryBtdXPDrSBiw710IG7DoXNvYmVrIHZlbGlrb3N0aSBzZWt0b3J1XG4iCisKKyN+IG1zZ2lkICJzdGFydGtiIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iCisjfiBtc2dzdHIgInN0YXJ0a2IgYnkgbcSbbG8gYsO9dCDEjcOtc2xvLCBuZSAlc1xuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgcG9zaXRpdmUsIG5vdCAlTGRcbiIKKyN+IG1zZ3N0ciAic3RhcnRrYiBieSBtxJtsbyBiw710IGtsYWRuw6ksIG5lICVMZFxuIgorCisjfiBtc2dpZCAic3RhcnRpbmcgYXQgJUxkLCB3aXRoICVkIGJ5dGUgaW5jcmVtZW50c1xuIgorI34gbXNnc3RyICJ6YcSNw61uw6FtIG5hICVMZCBzIHDFmcOtcsWvc3RreSAlZCBiYWp0xa9cbiIKKworI34gbXNnaWQgIiAgICAgICB0aGlzb2ZmICAgICBibG9jayBmc19ibGtfc3ogIGJsa3N6IGdycCBsYXN0X21vdW50XG4iCisjfiBtc2dzdHIgIiAgICAgICB0ZW50b3BvcyAgICBibG9rICBmc19ibGtfc3ogIGJsa3N6IGdycCBsYXN0X21vdW50XG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiJTE0TGQ6IGZpbmlzaGVkIHdpdGggZXJybm8gJWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIiUxNExkOiBkb2tvbsSNZW5vIHMgZXJybm8gJWRcbiIKKworI34gbXNnaWQgIih1bmtub3duIG9zKSIKKyN+IG1zZ3N0ciAiKG5lem7DoW3DvSBvcykiCisKKyN+IG1zZ2lkICIiCisjfiAiVXNhZ2U6ICVzIDxkZXYxPiA8ZGV2Mj4gPGRldjM+XG4iCisjfiAiXG4iCisjfiAiVGhpcyBwcm9ncmFtIHByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzZXQgb2YgZGV2aWNlc1xuIgorI34gIkEgY29tbW9uIHdheSB0byB1c2UgdGhpcyBwcm9ncmFtIGlzOlxuIgorI34gIlxuIgorI34gIlx0JXMgL2Rldi9oZGE/XG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJQb3XFvml0w606ICVzIDx6YcWZMT4gPHphxZkyPiA8emHFmTM+XG4iCisjfiAiXG4iCisjfiAiVGVudG8gcHJvZ3JhbSB2eXRpc2tuZSBpbmZvcm1hY2UgbyBvZGTDrWxlY2ggcHJvIHNhZHUgemHFmcOtemVuw61cbiIKKyN+ICJPYnZ5a2zDvSB6cMWvc29iIHBvdcW+aXTDrSB0b2hvdG8gcHJvZ3JhbXUgamU6XG4iCisjfiAiXG4iCisjfiAiXHQlcyAvZGV2L2hkYT9cbiIKKyN+ICJcbiIKKworI34gbXNnaWQgInJlc2l6ZTJmcyAlcyAoJXMpXG4iCisjfiBtc2dzdHIgInJlc2l6ZTJmcyAlcyAoJXMpXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIgb2YgZnJlZSBibG9ja3M6ICVkLyVkLCBOZWVkZWQ6ICVkXG4iCisjfiBtc2dzdHIgIlBvxI1ldCB2b2xuw71jaCBibG9rxa86ICVkLyVkLCBQb3TFmWViYTogJWRcbiIKKworI34gbXNnaWQgIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIKKyN+IG1zZ3N0ciAiUMWZZWNow6F6w61tIGRvIHpvdWZhbMOpaG8gcmXFvmltdSBhbG9rYWNlIGJsb2vFr1xuIgorCisjfiBtc2dpZCAiTW92aW5nICVkIGJsb2NrcyAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiUMWZZXNvdXbDoW0gJWQgYmxva8WvICV1LT4ldVxuIgorCisjfiBtc2dpZCAiaW5vPSV1LCBibG9ja2NudD0lbGxkLCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiaW5vPSV1LCBwb8SNZXRibG9rxa89JWxsZCwgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiSXV6ZWwgcMWZZXN1bnV0ICV1LT4ldVxuIgorCisjfiBtc2dpZCAiSW5vZGUgdHJhbnNsYXRlIChkaXI9JXUsIG5hbWU9JS4qcywgJXUtPiV1KVxuIgorI34gbXNnc3RyICJQxZlla2xhZCBpbm9kZSAoYWRyPSV1LCBuw6F6ZXY9JS4qcywgJXUtPiV1KVxuIgorCisjfiBtc2dpZCAiSXRhYmxlIG1vdmUgZ3JvdXAgJWQgYmxvY2sgJXUtPiV1IChkaWZmICVkKVxuIgorI34gbXNnc3RyICJQxZllc3VuIGl0YWJsZSBza3VwaW5hICVkIGJsb2sgJXUtPiV1IChyb3pkw61sICVkKVxuIgorCisjfiBtc2dpZCAiJWQgYmxvY2tzIG9mIHplcm9zLi4uXG4iCisjfiBtc2dzdHIgIiVkIGJsb2vFryBudWzigKZcbiIKKworI34gbXNnaWQgIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iCisjfiBtc2dzdHIgIlDFmWVzdW4gdGFidWxreSBpbm9kZSBkb2tvbsSNZW4uXG4iCisKKyMgRklYTUU6IHVubG9jYWxpemFibGUKKyN+IG1zZ2lkICIlOGQgbGFyZ2UgZmlsZSVzXG4iCisjfiBtc2dzdHIgIiU4ZCB2ZWxrw71jaCBzb3Vib3LFryVzXG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vZGUuZ21vIGIvZTJmc3Byb2dzL3BvL2RlLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTEzOTljCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2RlLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vZGUucG8gYi9lMmZzcHJvZ3MvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlZDAwNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9kZS5wbwpAQCAtMCwwICsxLDY2MDMgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9uIG9mIGUyZnNwcm9ncworIyBDb3B5cmlnaHQgKEMpIDE5OTYgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMKKyMgT2xhZiBLbGVta2UgPG9sa2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwyMDAyLgorIyBNYXJjIExhbmdlciA8bWFyY0BtYXJjbGFuZ2VyLmRlPiwyMDAzLgorIyBQaGlsaXBwIFRob21hcyA8cHRoQHN1c2UuZGU+LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MtMS40Mi42XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA5LTIxIDEyOjE2LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTAxLTI3IDAwOjIzKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBoaWxpcHAgVGhvbWFzIDxwdGhAc3VzZS5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPHRyYW5zbGF0aW9uLXRlYW0tZGVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBkZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAi4oCeQmFkIGJsb2Nr4oCcICV1IGF1w59lcmhhbGIgZGVzIGfDvGx0aWdlbiBCZXJlaWNoczsgaWdub3JpZXJ0LlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInfDpGhyZW5kIGRlciBsb2dpc2NoZW4gUHLDvGZ1bmcgZGVzIOKAnkJhZCBCbG9ja+KAnC1Jbm9kZXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInfDpGhyZW5kIGRlcyBMZXNlbnMgZGVzIOKAnkJhZCBCbG9ja+KAnC1Jbm9kZXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svaXNjYW4uYzoxMTAgZTJmc2NrL3NjYW50ZXN0LmM6MTA3CisjOiBlMmZzY2svdW5peC5jOjEzMzQgZTJmc2NrL3VuaXguYzoxNDIyIG1pc2MvYmFkYmxvY2tzLmM6MTIxNAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjIyIG1pc2MvYmFkYmxvY2tzLmM6MTIzNiBtaXNjL2JhZGJsb2Nrcy5jOjEyNDgKKyM6IG1pc2MvZHVtcGUyZnMuYzo1ODggbWlzYy9lMmltYWdlLmM6MTE4OSBtaXNjL2UyaW1hZ2UuYzoxMzA3CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzIwIG1pc2MvbWtlMmZzLmM6MTkzIG1pc2MvdHVuZTJmcy5jOjE4OTggcmVzaXplL21haW4uYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgImJlaW0gVmVyc3VjaCwgJXMgenUgw7ZmZm5lbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIOKAniVz4oCcIG1pdHRlbHMg4oCecG9wZW7igJwgenUgw7ZmZm5lbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjAwCittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJiZWltIExlc2VuIGRlciDigJ5CYWQgQmxvY2vigJwtTGlzdGUgYXVzIGRlciBEYXRlaSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiYmVpbSBVcGRhdGVuIGRlcyDigJ5CYWQgQmxvY2vigJwtSW5vZGVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiV2FybnVuZzogTmljaHQgenVsw6Rzc2lnZXIgQmxvY2sgJXUgaW0g4oCeQmFkIEJsb2Nrc+KAnC1Jbm9kZSBnZWZ1bmRlbiEgQmVyZWluaWd0LlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJMZXNlZmVobGVyIC0gQmxvY2sgJWx1ICglcykgd8OkaHJlbmQgJXMuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiTGVzZWZlaGxlciAtIEJsb2NrICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiSWdub3JpZXJlIEZlaGxlciIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJSw7xja3NjaHJlaWJlbiBlcnp3aW5nZW4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJTY2hyZWliZmVobGVyIC0gQmxvY2sgJWx1ICglcykgd8OkaHJlbmQgJXMuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIlNjaHJlaWJmZWhsZXIgLSBCbG9jayAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo1NworbXNnaWQgImVtcHR5IGRpcmJsb2NrcyIKK21zZ3N0ciAibGVlcmUgVmVyemVpY2huaXNibMO2Y2tlIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgImxlZXJlIFZlcnplaWNobmlzbGlzdGUiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJsZWVyZXIgVmVyemVpY2huaXNibG9jayAldSAoIyVkKSBpbSBJbm9kZSAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBEYXRlaW5hbWUgbmJsb2NrcyBCbG9ja2dyw7bDn2VcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiQmxvY2thbnphaGwgbmljaHQgenVsw6Rzc2lnIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJFcyBrb25udGUga2VpbiBCbG9ja3B1ZmZlciAoR3LDtsOfZT0lZCkgcmVzZXJ2aWVydCB3ZXJkZW5cbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIkF1ZnJ1ZjogJXMgTGF1ZndlcmtcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiQkxLRkxTQlVGIGlvY3RsIG5pY2h0IHVudGVyc3TDvHR6dCEgIEthbm4gUHVmZmVyIG5pY2h0IGxlZXJlbi5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIEdlcsOkdFxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAiYmVpbSDDlmZmbmVuIHZvbiAlcyBmw7xyIGRpZSBQdWZmZXItTGVlcnVuZyIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NjkgcmVzaXplL21haW4uYzoyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgUsO8Y2tzY2hyZWliZXZlcnN1Y2hlcyBhdWYgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA4NAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiYmVpbSBTdGFydCBkZXMgSW5vZGUtU2NhbnMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMTAyCittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJiZWltIExhZGVuIGRlcyBuw6RjaHN0ZW4gSW5vZGVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IElub2RlcyB1bnRlcnN1Y2h0LlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUxMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIkxlc2UgSm91cm5hbC1TdXBlcmJsb2NrXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IGtlaW5lbiBnw7xsdGlnZW4gSm91cm5hbC1TdXBlcmJsb2NrIGdlZnVuZGVuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogRGFzIEpvdXJuYWwgaXN0IHp1IGt1cnpcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogc3RlbGxlIGRhcyBKb3VybmFsIHdpZWRlciBoZXJcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiVzOiBEYXMgSm91cm5hbCBpc3QgbnVyIGxlc2JhciAtIEtlaW5lIFdpZWRlcmhlcnN0ZWxsdW5nXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIGVybmV1dCB6dSDDtmZmbmVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFlcndlaXRlcnRlIEF0dHJpYnV0ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQUZlaGxlciBiZWltIFJlc2VydmllcmVuIHZvbiBQbGF0eiBmw7xyIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYkJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJCaXRtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJja29tcHJpbWllcmVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDS29uZmxpa3RlIG1pdCBlaW5lbSBhbmRlcmVuIERhdGVpc3lzdGVtZW5ibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTkKK21zZ2lkICJpaW5vZGUiCittc2dzdHIgImlJbm9kZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSWlsbGVnYWwoZXIpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqSm91cm5hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGdlbMO2c2NodCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkVmVyemVpY2huaXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlRWludHJhZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBlIOKAniVEbuKAnCBpbiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmRGF0ZWlzeXN0ZW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGZsO8ciBAaSAlaSAoJVEpIGlzdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdHcnVwcGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUUgQGRpbm9kZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGlzdCBlaW5lIFZlcmtuw7xwZnVuZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibW1laHJmYWNoIGJlYW5zcHJ1Y2h0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJudW5nw7xsdGlnIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib3ZlcndhaXN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwUHJvYmxlbSBpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFRdW90YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAiclJvb3QgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic3NvbGx0ZSBzZWluIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTU3VwZXJAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidW5pY2h0IHZlcmJ1bmRlbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2R2Vyw6R0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInhFcndlaXRlcnVuZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInptaXQgTMOkbmdlIE51bGwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPERlciBOVUxMIElub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8RGVyIOKAnkJhZCBCbG9ja3PigJwtSW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxEaWUgQmVudXR6ZXJxdW90YS1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxEaWUgR3J1cHBlbnF1b3RhLUlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPERlciDigJ5Cb290IExvYWRlcuKAnC1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8RGVyIOKAnnVuZGVsZXRlIGRpcmVjdG9yeeKAnC1Jbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPERlcyDigJ5ncm91cCBkZXNjcmlwdG9y4oCcLUlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8RGVyIEpvdXJuYWwtSW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPERlciByZXNlcnZpZXJ0ZSBJbm9kZSA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8RGVyIHJlc2VydmllcnRlIElub2RlIDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzMKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgIidyZWd1bMOkcmUgRGF0ZWkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJWZXJ6ZWljaG5pcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJ6ZWljaGVub3JpZW50aWVydGVzIEdlcsOkdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzkKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgIkJsb2NrZ2Vyw6R0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIm5hbWVkIHBpcGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQzCittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic3ltYm9saXNjaGUgVmVya27DvHBmdW5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICIgU29ja2V0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ1bmJla2FubnRlciBEYXRlaXR5cCBtaXQgTW9kdXMgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJpbmRpcmVrdGUgQmzDtmNrZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImRvcHBlbHQgaW5kaXJla3RlIEJsw7Zja2UiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkcmVpZmFjaCBpbmRpcmVrdGUgQmzDtmNrZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICLDnGJlcnNldHplcmJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgIkJsb2NrIE5yLiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtZWhyZmFjaCBiZWFuc3BydWNodGUgSW5vZGUtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MTAgZTJmc2NrL3Bhc3MxYi5jOjcyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImludGVybmVyIEZlaGxlcjogZHVwX2JsayBmw7xyICVsbHUgd3VyZGUgbmljaHQgZ2VmdW5kZW5cbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjgyMAorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAienVyw7xja2dlZ2ViZW4gdm9uIGNsb25lX2ZpbGVfYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgImludGVybmVyIEZlaGxlcjogRUEgQmxvY2tsaXN0ZSBmw7xyICVsbHUgd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJJbnRlcm5lciBGZWhsZXI6IEVBIElub2RlbGlzdGUgZsO8ciAldSB3dXJkZSBuaWNodCBnZWZ1bmRlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc2IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJsZXNlIFZlcnplaWNobmlzYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjU5OQorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgIuKAnmluLXVzZSBpbm9kZeKAnC1MaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjEwCittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAi4oCeZGlyZWN0b3J5IGlub2Rl4oCcLUxpc3RlIgorCisjOiBlMmZzY2svcGFzczEuYzo2MjAKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICLigJ5yZWd1bGFyIGZpbGUgaW5vZGXigJwtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIuKAnmluLXVzZSBibG9ja+KAnC1MaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk2Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJTdGFydGUgSW5vZGUtU2NhbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgbsOkY2hzdGVuIElub2RlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI0MAorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiRHVyY2hnYW5nIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgImxlc2UgaW5kaXJla3RlIEJsw7Zja2Ugdm9uIElub2RlICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ3Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiZmVobGVyaGFmdGUgSW5vZGUtTGlzdGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNzAKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJJbm9kZSBpbiDigJ5CYWQgQmxvY2tz4oCcLUxpc3RlIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzkwCittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAiaeKAnm1hZ2ljIGlub2Rl4oCcLUxpc3RlIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDE3Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgIm1laHJmYWNoIHJlZmVyZW56aWVydGUgQmxvY2tsaXN0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTUxOAorbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAiZXh0IGF0dHIgYmxvY2sgbWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoyMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYyk6IGVyd2FydGV0ZSAlNmx1IGVyaGllbHQgcGh5cyAlNmx1IChCbG9ja2FuemFobCAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjI3Cittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJCbG9jay1CaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2MzMKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgIklub2RlLUJpdG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjYzOQorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJJbm9kZS1UYWJlbGxlIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIkR1cmNoZ2FuZyAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDUKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiZGFzIFByb2dyYW1tIGthbm4gbmljaHQgZm9ydGZhaHJlbi4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIuKAnmlub2RlIGRvbmXigJwtQml0bWFwIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJQZWFrLU1lbW9yeSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJEdXJjaGdhbmcgMyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzIyCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICLigJ5pbm9kZSBsb29wIGRldGVjdGlvbuKAnC1CaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NQorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiRHVyY2hnYW5nIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJEdXJjaGdhbmcgNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIobmljaHQgaW50ZXJha3RpdikiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIlJlcGFyaWVyZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJCZXJlaW5pZ2UiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJHZWJlIGZyZWkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkVyd2VpdGVyZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIlZlcmJpbmRlIG5hY2ggL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkVyc3RlbGxlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiUmV0dGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiVmVya8O8cnplIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIkJlcmVpbmlnZSBJbm9kZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiQXVmdGVpbGVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkZvcnRzZXR6ZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAibWVocmZhY2ggcmVmZXJlbnppZXJ0ZSBCTMO2Y2tlIHdlcmRlbiBnZWtsb250IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIkzDtnNjaGUgRGF0ZWkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiQXVzZ2FiZW4gdW50ZXJkcsO8Y2tlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiVHJlbm5lbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICJCZXJlaW5pZ2UgSFRyZWUtSW5kZXgiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKE5JQ0hUUykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiUkVQQVJJRVJUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiQkVSRUlOSUdUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJaVVLDnENLR0VTRVRaVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiRlJFSUdFR0VCRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiRVJXRUlURVJUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIldJRURFUiBWRVJCVU5ERU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJBTkdFTEVHVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJHRVJFVFRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiQkVFTkRFVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0RFIEJFUkVJTklHVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIkFCR0VCUk9DSEVOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIkFCR0VTUEFMVEVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiU0VUWkUgRk9SVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiTUVIUkZBQ0ggUkVGRVJFTlpJRVJURSBCTMOWQ0tFIEdFS0xPTlQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkRBVEVJIEdFTMOWU0NIVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlVOVEVSRFLDnENLVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJHRVRSRU5OVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIkhUUkVFLUlOREVYIEJFUkVJTklHVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIldJUkQgV0lFREVSIEFVRkdFQkFVVCIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQGIgQEIgZsO8ciBAZyAlZyBpc3QgbmljaHQgaW4gQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQGkgQEIgZsO8ciBAZyAlZyBpc3QgbmljaHQgaW4gQGcuIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiQGkgVGFiZWxsZSBmw7xyIEBnICVnIGlzdCBuaWNodCBpbiBAZy4gKEBiICViKVxuIgorIldBUk5VTkc6IEdST1NTRVIgREFURU5WRVJMVVNUIElTVCBNw5ZHTElDSC5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRGVyIEBTIGlzdCB1bmxlc2JhciBiencuIGJlc2NocmVpYnQga2VpbiBnw7xsdGlnZXMgZXh0MlxuIgorIkBmLiBXZW5uIEB2IGfDvGx0aWcgaXN0IHVuZCBlaW4gZXh0MlxuIgorIkBmIChrZWluIHN3YXAgb2RlciB1ZnMgdXN3LikgZW50aMOkbHQsIGRhbm4gaXN0IGRlciBAU1xuIgorImJlc2Now6RkaWd0LCB1bmQgc2llIGvDtm5udGVuIGUyZnNjayBtaXQgZWluZW0gYW5kZXJlbiBAUzpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRGllIEBmLUdyw7bDn2UgKCBsYXV0IEBTKSBpc3QgJWIgQGJzXG4iCisiRGllIHBoeXNpa2FsaXNjaGUgR3LDtsOfZSB2b24gQHYgaXN0ICVjIEBic1xuIgorIkVudHdlZGVyIGRlciBAUyBvZGVyIGRpZSBQYXJ0aW9uc3RhYmVsbGUgaXN0IGJlc2Now6RkaWd0IVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJAUy1AYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiRGllc2UgVmVyc2lvbiB2b24gZTJmc2NrIHVudGVyc3TDvHR6dCBrZWluZSB2b24gQGItR3LDtsOfZW4gdmVyc2NoaWVkZW5lIEZyYWdtZW50Z3LDtsOfZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBic19wZXJfZ3JvdXAgaW0gQFMgPSAlYiwgc29sbHRlICVjIHNlaW5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiZmlyc3RfZGF0YV9AYiBpbSBAUyA9ICViLCBzb2xsdGUgJWMgc2VpblxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZiBoYXQga2VpbmVuIFVVSUQ7IGVzIHdpcmQgZWluZSBnZW5lcmllcnQuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiSGlud2VpczogV2VubiBtZWhyZXJlIElub2RlcyBvZGVyIEJpdG1hcC1CbMO2Y2tlXG4iCisibmV1IGdlb3JkbmV0IHdlcmRlbiBtw7xzc2VuLCBvZGVyIGVpbiBUZWlsIGRlciBJbm9kZS1UYWJlbGxlXG4iCisidmVyc2Nob2JlbiB3ZXJkZW4gbXVzcywga8O2bm50ZSBlcyBoZWxmZW4sIGUyZnNjayBlcnN0IGVpbm1hbFxuIgorIm1pdCBkZXIgT3B0aW9uIOKAni1iICVT4oCcIHp1IHN0YXJ0ZW4uIERhcyBQcm9ibGVtIGvDtm5udGVcbiIKKyJpbSBwcmltw6RyZW4gQmxvY2tncnVwcGVuYmV6ZWljaG5lciBsaWVnZW4gdW5kIHNlaW5lXG4iCisiU2ljaGVydW5nc2tvcGllIGluIE9yZG51bmcgc2Vpbi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIkJlc2Now6RkaWd1bmcgZ2VmdW5kZW4gaW4gQFMuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaSBkZXIgRmVzdHN0ZWxsdW5nIGRlciBHcsO2w59lIGRlcyBwaHlzaXNjaGVuIEB2OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJAaS1BbnphaGwgaW4gQFMgaXN0ICVpLCBzb2xsdGUgJWogc2Vpbi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODMKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJIdXJkIHVudGVyc3TDvHR6dCBrZWluZSBEYXRlaXR5cGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkBTIGhhdCBlaW4gZGVmZWt0ZXMgQGogKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJFeHRlcm5lcyBAaiBoYXQgbWVocmVyZSBAZi1OdXR6ZXIgKG5pY2h0IHVudGVyc3TDvHR6dCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiS2FubiBrZWluIGV4dGVybmVzIEBqIGZpbmRlblxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRXh0ZXJuZXMgQGogaGF0IHVuZ8O8bHRpZ2VuIEBTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDgKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAiRXh0ZXJuZXMgQGogdW50ZXJzdMO8dHp0IG5pY2h0IEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiBmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorIkRlciBTdXBlcmJsb2NrIGRlcyBEYXRlaXN5c3RlbS1Kb3VybmFscyBoYXQgZGVuIHVuYmVrYW5udGVuIFR5cGUgJU4gKG5pY2h0IHVudGVyc3TDvHR6dCkuXG4iCisiRXMgaXN0IG3DtmdsaWNoLCBkYXNzIGlociBlMmZzY2sgw6RsdGVyIGlzdCB1bmQvb2RlciBkaWVzZXMgQGotRm9ybWF0IG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKyJFcyBpc3QgZWJlbnNvIG3DtmdsaWNoLCBkYXNzIGRlciBAai1AUyBkZWZla3QgaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjEKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJkZXIgQGotQFMgaXN0IGRlZmVrdC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiAlcyBpcyBwcmVzZW50LlxuIgorbXNnc3RyICIiCisiRGVyIEJpdHNjaGFsdGVyIGhhc19qb3VybmFsIGltIFN1cGVyYmxvY2sgaXN0IG5pY2h0IGdlc2V0enQsIGFiZXIgZWluIFxuIgorIkBqICVzIGlzdCB2b3JoYW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMxCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICIiCisiSW0gQFMgaXN0IGRlciBCaXRzY2hhbHRlciDigJ5uZWVkc19yZWNvdmVyeeKAnCBnZXNldHp0LCBhYmVyIGVpbiBAaiBpc3RcbiIKKyJuaWNodCB2b3JoYW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM2Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICIiCisiRGVyIEJpdHNjaGFsdGVyIOKAnldpZWRlcmhlcnN0ZWxsdW5nIG7DtnRpZ+KAnCBpbSBAUyBpc3QgbmljaHQgZ2VzZXR6dCwgYWJlciBkYXNcbiIKKyJAaiBlbnRow6RsdCBEYXRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogQ2xlYXIgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDEKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiQmVyZWluaWdlIEBqIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIkBmIGhhdCBFaWdlbnNjaGZ0cy1CaXRzY2hhbHRlciBnZXNldHp0LCBpc3QgYWJlciBlaW4gUmV2aXNpb24tMC1AZi4gIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJASSBAYiAjJUIgKCViKSBpbiBAbyBAaSAlaSBnZWZ1bmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkJlcmVpdHMgYmVyZWluaWd0ZXIgJUIgKCViKSBpbiBAbyBAaSAlaSBnZWZ1bmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQEkgQG8gQGkgJWkgaW0gQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiSWxsZWdhbGVyIElub2RlICVpIGluIGRlciBMaXN0ZSBkZXIgdmVyd2Fpc3RlbiBJbm9kZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiZGVyIEBqLUBTIGhhdCBlaW5lbiB1bmJla2FubnRlbiBOdXItTGVzZW4tQml0c2NoYWx0ZXIgZ2VzZXR6dC5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MQorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICJpbSBAai1AUyBpc3QgZWluIHVuYmVrYW5udGVyIEJpdHNjaGFsdGVyIGbDvHIgaW5rb21wYXRpYmxlIEVpZ2Vuc2NoYWZ0IGdlc2V0enQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiZGllc2UgQGotVmVyc2lvbiB3aXJkIHZvbiBkaWVzZW0gZTJmc2NrIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJzY2hpZWJlIEBqIHZvbiAvJXMgenVtIHZlcnN0ZWNrdGVuIElub2RlLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBWZXJzY2hpZWJlbiB2b24gQGo6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMQorbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJVbnZvbGxzdMOkbmRpZ2UgVjItQGotQFMtRmVsZGVyICh2b20gVjEtSm91cm5hbCkgZ2VmdW5kZW4uXG4iCisiRGllIEZlbGRlciBuYWNoIGRlbSBWMS1Aai1AUyB3ZXJkZW4gYmVyZWluaWd0Li4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJTdGFydGUgQGogdHJvdHpkZW0iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkRlciBCaXRzY2hhbHRlciBmw5xyIFdpZWRlcmhlcnN0ZWxsdW5nIGlzdCBpbSBTaWNoZXJ1bmdzLVN1cGVyYmxvY2sgbmljaHRcbiIKKyJnZXNldHp0LCBkYXMgQGogd2lyZCBkYWhlciB0cm90emRlbSBnZXN0YXJ0ZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE3Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWUgSW5mb3JtYXRpb25lbiBkZXMgSm91cm5hbC1Jbm9kZWJsb2NrcyB3ZXJkZW4gZ2VzaWNoZXJ0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJGw7xyIEBmIGlzdCByZXNpemVfQGkgbmljaHQgZWluZ2VzY2hhbHRldCwgYWJlciBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpc3QgJU47IEBzIE51bGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiUmVzaXplX0BpIGlzdCBuaWNodCBha3RpdmllcnQsIGFiZXIgZGllIHp1IG1vZGlmZ2l6aWVyZW5kZSBAaSBpc3QgbmljaHQtTnVsbC4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMzCittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiUmVzaXplLUBpIGlzdCB1bmfDvGx0aWcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMzgKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXMgbGV0enRlbiBFaW5ow6RuZ2VucyB2b24gQFMgKCV0LFxuIgorIlx0amV0enQgPSAlVCkgbGllZ3QgaW4gZGVyIFp1a3VuZnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDMKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXMgbGV0enRlbiBTY2hyZWliZW5zIHZvbiBAUyAoJXQsXG4iCisiXHRqZXR6dCA9ICVUKSBsaWVndCBpbiBkZXIgWnVrdW5mdC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBAcyAlWC4gICIKK21zZ3N0ciAiQFMtSGlud2VpcyBmw7xyIGV4dGVybmVuIFN1cGVyYmxvY2sgQHMgJVguICAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzUyCittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyJGw7xnZSBWZXJ6ZWluaXNoYXNoLUhpbGZlIHp1IEBmIGhpbnp1LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIkRpZSBQcsO8ZnN1bW1lIGRlcyBAZy1EZXNrcmlwdG9ycyAlZyBpc3QgJTA0eCwgc2llIHNvbGx0ZSAlMDR5IHNlaW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICJAZy1EZXNrcmlwdG9yICVnIGlzdCBhbHMgbmljaHQgaW5pdGlhbGlzaWVydCBnZWtlbm56ZWljaG5ldCBvaG5lIGVpbmUgZ2VzZXR6dGUgRWlnZW5zY2hhZnQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIkBnLURlc2tyaXB0b3IgJWcgaGF0IGVpbmUgdW5nw7xsdGlnZSBBbnphaGwgdW5nZW51dHp0ZXIgSW5vZGVzIHZvbiAlYi4gICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzIKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkRpZSBsZXR6dGUgR3J1cHBlbi1CbG9ja2JpdG1hcCBpc3QgbmljaHQgaW5pdGlhbGlzaWVydC4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICJKb3VybmFsdHJhbnNha3Rpb24gJWkgd2FyIGJlc2Now6RkaWd0LCBkaWUgV2llZGVyaG9sdW5nIHd1cmRlIGFiZ2Vncm9jaGVuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MQorbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJEaWUgS2VubnVuZyB0ZXN0X2ZzIHd1cmRlIGdlc2V0enQgKHVuZCBleHQ0IGlzdCB2ZXJmw7xnYmFyKS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KSAgIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXMgbGV0enRlbiBFaW5ow6RuZ2VucyB2b24gQFMgbGllZ3QgaW4gZGVyIFp1a3VuZnQuXG4iCisiXHQod2VuaWdlciBhbHMgZWluIFRhZywgd2FocnNjaGVpbmxpY2ggYXVmZ3J1bmQgZmFsc2NoIGdlc2V0enRlciBIYXJkd2FyZS1VaHIpICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzkyCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpLiAgIgorbXNnc3RyICIiCisiRGVyIFplaXRwdW5rdCBkZXMgbGV0enRlbiBTY2hyZWliZW5zIHZvbiBAUyBsaWVndCBpbiBkZXIgWnVrdW5mdC5cbiIKKyJcdCh3ZW5pZ2VyIGFscyBlaW4gVGFnLCB3YWhyc2NoZWlubGljaCBhdWZncnVuZCBmYWxzY2ggZ2VzZXR6dGVyIEhhcmR3YXJlLVVocikgICIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIkRpZSBQcsO8ZnN1bW1lIGVpbmVzIG9kZXIgbWVocmVyZXIgQGctRGVza3JpcHRvcmVuIGlzdCB1bmfDvGx0aWcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDMKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIlNldHplIGRpZSBBbnphaGwgZGVyIGZyZWllbiBJbm9kZXMgYXVmICVqICh3YXIgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDgKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlNldHplIGRpZSBBbnphaGwgZGVyIGZyZWllbiBCbMO2Y2tlIGF1ZiAlYyAod2FyICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEzCittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJRdW90YS1Jbm9kZSAlaSAoJVEpIHdpcmQgdmVyc3RlY2t0LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTgKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgImRlciBAUyBoYXQgZWluZW4gdW5nw7xsdGlnZW4gTU1QLUJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgImRlciBAUyBiZXNpdHp0IGVpbmUgZmFsc2NoZSBNTVAtS2VubnVuZy4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICJleHQyZnNfb3BlbjI6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIkR1cmNoZ2FuZyAxOiBQcsO8ZmUgQGlzLCBAYnMgdW5kIEdyw7bDn2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJAciBpc3Qga2VpbiBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5Cittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJAciBoYXQgZHRpbWUgZ2VzZXR6dCAodmllbGxlaWNodCBkdXJjaCBlaW4genUgYWx0ZXMgbWtlMmZzKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlJlc2VydmllcnRlIEBpICVpICglUSkgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIE1vZHVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiZHRpbWUgaW4gQEQgQGkgJWkgaXN0IE51bGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkBpICVpIGlzdCBpbiBCZW51dHp1bmcsIGFiZXIgaGF0IGR0aW1lIGdlc2V0enQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJAaSAlaSBpc3QgZWluIFZlcnplaWNobmlzIG1pdCBMw6RuZ2UgTnVsbC4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzQKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJkaWUgQmxvY2tiaXRtYXAgdm9uIEBnICVnIGF1ZiAlYiDDvGJlcnNjaG5laWRlZCBzaWNoIG1pdCBlaW5lbSBhbmRlcmVuIEZTLUJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3OQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgImRpZSBAaS1AQiB2b24gQGcgJWcgYmVpICViIMO8YmVyc2NobmVpZGVkIHNpY2ggbWl0IGVpbmVtIGFuZGVyZW4gRlMtQmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODQKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJkaWUgQGktVGFibGxlIHZvbiBHcnVwcGUgJWcgYmVpICViIHN0ZWh0IGluIEtvbmZsaWt0IG1pdCBlaW5lbSBhbmRlcmVuIERhdGVpc3lzdGVtYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4OQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgImRpZSBAYi1AQiAoJWIpIHZvbiBAZyAlZyBpc3QgdW5nw7xsdGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJkaWUgQGktQEIgKCViKSB2b24gQGcgJWcgaXN0IHVuZ8O8bHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTkKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUgaXN0ICVJcywgc29sbHRlICVOIHNlaW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDQKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfQGJzIGlzdCAlSWIsIHNvbGx0ZSAlTiBzZWluLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiaWxsZWdhbGVyICVCICglYikgaW4gQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTQKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIMO8YmVybGFwcHQgQGYtTWV0YWRhdGVuIGluIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBpICVpIGhhdCB1bnp1bMOkc3NpZ2UobikgQmxvY2svQmzDtmNrZS4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJadSB2aWVsZSB1bnp1bMOkc3NpZ2UgQGJzIGluIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICJASSAlQiAoJWIpIGluIHVuZ8O8bHRpZ2VyIEBiLUBpLiAgIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM0Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJCYWQtQGIgQGkgaGF0IHVuenVsw6Rzc2lnZShuKSBCbG9jay9CbMO2Y2tlLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiRG9wcGVsdGVyIG9kZXIgdW56dWzDpHNzaWdlciBAYiBpbiBHZWJyYXVjaCFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQGIgJWIgd2lyZCBiZW51dHp0IGFscyBpbmRpcmVrdGVyIEJsb2NrIGRlciBCYWRibG9jay1Jbm9kZS4gICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGllIEJhZGJsb2NrLUluZG9kZSBpc3Qgd2FocnNjaGVpbmxpY2ggYmVzY2jDpGRpZ3Qgd29yZGVuLiBTaWUgc29sbHRlblxuIgorIm51biBpbm5laGFsdGVuIHVuZCDigJ5lMmZzY2sgLWPigJwgYXVzZsO8aHJlbiwgdW0gbmFjaCBkZWZla3RlbiBCbMO2Y2tlbiBpblxuIgorImRlbSBAZiB6dSBzdWNoZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiV2VubiBkZXIgQGIgd2lya2xpY2ggZGVmZWt0IGlzdCwga2FubiBkYXMgQGYgbmljaHQgcmVwYXJpZXJ0IHdlcmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2llIGvDtm5uZW4gZGllc2VuIEBiIHZvbiBkZXIgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgbMO2c2NoZW5cbiIKKyJ1bmQgaG9mZmVuLCBkYXMgZGllc2VyIHdpcmtsaWNoIGluIE9yZG51bmcgaXN0LCBlcyBnaWJ0IGFiZXJcbiIKKyJLRUlORSBHQVJBTlRJRU4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY3Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIkRlciBwcmltw6RyZSBAUyAoJWIpIGlzdCBhdWYgZGVyIExpc3RlIGRlciBkZWZla3RlbiBCbMO2Y2tlLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiQmxvY2sgJWIgaW0gcHJpbcOkcmVuIERlc2tyaXB0b3IgQGcgaXN0IGF1ZiBkZXIgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2VcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIldhcm51bmc6IGRlciBAUyB2b24gR3J1cHBlICVnICglYikgaXN0IGRlZmVrdC5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICJXYXJudW5nOiBkaWUgS29waWUgZGVzIEdydXBwZW4tRGVza3JpcHRvcnMgdm9uIEdydXBwZSAlZyBoYXQgZWluZW4gZGVmZWt0ZW4gQmxvY2sgKCViKS5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4OQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiUHJvZ3JhbW1mZWhsZXI/ICBAYiAjJWIgd2lyZCBvaG5lIEdydW5kIGluIHByb2Nlc3NfYmFkX0BiIHZlcmxhbmd0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJAQSAlTiB6dXNhbW1lbmjDpG5nZW5lbmRlKG0vbikgQmxvY2svQmzDtmNrZW4gaW4gZGVyIEBiLUBnICVnIGbDvHIgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJAQSBlaW5lbiBAYi1QdWZmZXIgenVtIFZlcnNjaGllYmVuIHZvbiAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlZlcnNjaGllYmUgR3J1cHBlICVnJ3MgJXMgdm9uICViIG5hY2ggJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJWZXJzY2hpZWJlIEBnICVnJ3MgJXMgbmFjaCAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTUKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiV2FybnVuZzogQGIgJWIgdm9uICVzIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjAKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJXYXJudW5nOiBAYiAlYiB2b24gJXMga29ubnRlIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUgZTJmc2NrL3Byb2JsZW0uYzoxNDYwCittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgZGllIEBpLUBCICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgZGllIEBpLUBCICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJAQSBkaWUg4oCeaWNvdW50IGxpbmsgaW5mb3JtYXRpb27igJw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgZGFzIEBkLUBiLUZlbGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIHfDpGhyZW5kIGRlcyBEdXJjaHN1Y2hlbnMgZGVyIEBpcyAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSXRlcmllcmVuIMO8YmVyIGRpZSBCbMO2Y2tlIGluIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFNwZWljaGVybiBkZXIgQGkgQW56YWhsLUluZm9ybWF0aW9uZW4gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIChpbm9kZT0laSwgYmxvY2s9JWIsIG51bT0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYwCittc2dpZCAiRXJyb3Igc3RvcmluZyBAZCBAYiBpbmZvcm1hdGlvbiAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTcGVpY2hlcm4gZGVyIEBkLUBiLUluZm9ybWF0aW9uZW4gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSBoYXQgZGVuIEltYWdpYy1CaXRzY2hhbHRlciBnZXNldHp0LiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiU3BlemllbGxlIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBEYXRlaSAoQGkgJWkpIGhhdCBkZW4gQml0c2NoYWx0ZXIgZsO8clxuIgorInVudmVyw6RuZGVyYmFyIG9kZXIgbnVyLWFuw6RuZ2VuIGdlc2V0enQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiQGkgJWkgaGF0IGRlbiBCaXRzY2hhbHRlciBmw7xyIEBjIGdlc2V0enQgYXVmIGVpbmVtIEBmIG9obmUgVW50ZXJzdMO8dHp1bmcgZGFmw7xyLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIlNwZXppZWxsZSAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhdCBkaWUgR3LDtsOfZSBOdWxsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAwCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBqICVpIHdpcmQgbmljaHQgdmVyd2VuZGV0LCBhYmVyIGVudGjDpGx0IERhdGVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzA1Cittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGogaXN0IGtlaW5lIHJlZ3Vsw6RyZSBEYXRlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJAaSAlaSB3YXIgVGVpbCBkZXIgTGlzdGUgdmVyd2Fpc3RlciBJbm9kZXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE2Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiQGlzIGdlZnVuZGVuLCBkaWUgVGVpbCBlaW5lciBkZWZla3RlbiB2ZXJrZXR0ZXRlbiBMaXN0ZSB2b24gdmVyd2Fpc3RlbiBAaXMgd2FyZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIxCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkBBIGRpZSByZWZjb3VudC1TdHJ1Y3R1cmUgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXMgQmxvY2tzIGbDvHIgZXJ3ZWl0ZXJ0ZSBBdHRyaWJ1dGUgJWIgZiBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzEKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIkBpICVpIGhhdCBlaW5lbiBkZWZla3RlbiBlcndlaXRlcnRlLUF0dHJpYnV0ZS1CbG9jayAlYi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBCbG9ja3MgZsO8ciBlcndlaXRlcnRlIEF0dHJpYnV0ZSAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJEZXIgUmVmZXJlbnp6w6RobGVyIGRlcyBCbG9ja3MgZsO8ciBAYSAlYiBpc3QgJXIsIHJpY2h0aWcgd8OkcmUgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVzIEJsb2NrcyBmw7xyIEBhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MQorbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgImRlciBCbG9jayBmw7xyIEBhICViIGhhdCBoX2Jsb2NrcyA+IDEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1NgorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICJAQSBkZW4gQmxvY2sgZsO8ciBlcndlaXRlcnRlIEF0dHJpYnV0ZSAlYi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgImRlciBAYiBmw7xyIEBhICViIGlzdCBkZWZla3QgKEtvbGxpc2lvbiBkZXIgUGxhdHphbmZvcmRlcnVuZ2VuKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkBhIEBiICViIGlzdCBkZWZla3QgKHVuZ8O8bHRpZ2VyIE5hbWUpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzcxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJkZXIgQGIgZsO8ciBAYSAlYiBpc3QgZGVmZWt0ICh1bmfDvGx0aWdlciBXZXJ0KS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGkgJWkgaXN0IHp1IGdyb8OfLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIG1hY2h0IEBkIHp1IGdyb8OfLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGIgIyVCICglYikgbWFjaHQgZGllIERhdGVpIHp1IGdyb8OfLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGIgIyVCICglYikgbWFjaHQgZGVuIFN5bWxpbmsgenUgZ3Jvw58uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiQGkgJWkgaGF0IElOREVYX0ZMIEZsYWcgYXVmIEBmIGdlc2V0enQgb2huZSBIVFJFRS1VbnRlcnN0w7x0enVuZy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkBpICVpIGhhdCBkZW4gSU5ERVhfRkwtQml0c2NoYWx0ZXIgZ2VzZXR6dCwgaXN0IGFiZXIga2VpbiBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiQGggJWkgaGF0IGVpbmVuIHVudm9sbHN0w6RuZGlnZW4gV3VyemVsa25vdGVuICjigJ5yb290IG5vZGXigJwpLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkBoICVpIGhhdCBlaW5lIG5pY2h0IHVudGVyc3TDvHR6dGUgSGFzaC1WZXJzaW9uICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiQGggJWkgYmVudXR6dCBlaW5lbiBuaWNodCB1bnRlcnN0w7x0enRlbiBCaXRzY2hhbHRlciBmw7xyIGVpbmVuIEh0cmVlLVd1cnplbGtub3Rlbi5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIwCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiQGggJWkgaGF0IGVpbmUgenUgZ3Jvw59lIFZlcnplaWNobmlzdGllZmUgdm9uICglTilcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorImRlciBAaSBmw7xyIGRlZmVrdGUgQmzDtmNrZSBoYXQgZWluZW4gaW5kaXJla3RlbiBAYiAoJWIpLCBkZXIgbWl0XG4iCisiZGVuIEBmLU1ldGFkYXRlbiBpbiBLb25mbGlrdCBzdGVodC4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiRXJ6ZXVndW5nIHZvbiBWZXJncsO2c3NlcnVuZ3MtQGkgc2NoZWl0ZXJ0ZTogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBoICVpIGhhdCBlaW5lIHVuZ8O8bHRpZ2UgRXh0cmFncsO2w59lICglSVMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJlaW4gZXJ3ZWl0ZXJ0ZXMgQXR0cmlidXQgaW4gQGkgJWkgaGF0IGVpbmUgdW5nw7xsdGlnZSBuYW1lbGVuIHZvbiAlTlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImVpbiBlcndlaXRlcnRlcyBBdHRyaWJ1dCBpbiBAaSAlaSBoYXQgZWluZW4gdW5nw7xsdGlnZW4gV2VydGV2ZXJzYXR6IHZvbiAlTlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJlaW4gZXJ3ZWl0ZXJ0ZXMgQXR0cmlidXQgaW4gQGkgJWkgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIFdlcnRlYmxvY2sgdm9uICVOIChtdcOfIDAgc2VpbilcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImVpbiBlcndlaXRlcnRlcyBBdHRyaWJ1dCBpbiBAaSAlaSBoYXQgZWluZSB1bmfDvGx0aWdlIFdlcnRlZ3LDtsOfZSB2b24gJU5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImVpbiBlcndlaXRlcnRlcyBBdHRyaWJ1dCBpbiBAaSAlaSBoYXQgZGVuIHVuZ8O8bHRpZ2VuIEhhc2ggJU5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiQGkgJWkgaXN0IGVpbiAlSXQsIGFiZXIgZXMgc2llaHQgc28gYXVzLCBhbHMgb2IgZXMgdGF0c8OkY2hsaWNoIGVpbiBWZXJ6ZWljaG5pcyBpc3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEl0ZXJpZXJlbiDDvGJlciBkZW4gQHhzLUJhdW0gQHggaW4gQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc2Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorIkRhcyBJdGVyaWVyZW4gZGVyIEVyd2VpdGVydW5nZW4gKGV4dGVudHMpIGluIEBpICVpIHNjaGVpdGVydGVcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODIKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBoYXQgZWluZSBAbmUgRXJ3ZWl0ZXJ1bmdcbiIKKyJcdChsb2dpc2NoZXIgQGIgJWMsIEBuIHBoeXNpc2NoZXIgQGIgJWIsIEzDpG5nZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBoYXQgZWluZSB1bmfDvGx0aWdlIEVyd2VpdGVydW5nXG4iCisiXHQobG9naXNjaGVyIEBiICVjLCBwaHlzaXNjaGVyIEBiICViLCBAbiBMw6RuZ2UgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuIgorbXNnc3RyICJAaSAlaSBoYXQgIEVYVEVOVFNfRkwtQml0c2NoYWx0ZXIgZ2VzZXR6dCwgb2J3b2hsIGRhcyBAZiBFcndlaXRlcnVuZ2VuIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIkBpICVpIGJlc2l0enQgZGFzIEVyd2VpdGVydW5nc2Zvcm1hdCwgYWJlciBkZW0gQFMgZmVobHQgZGllIEVpZ2Vuc2NoYWZ0IEVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgImRlciBAaSAlaSBmZWhsdCBFWFRFTlRfRkwsIHNpZSBoYXQgYWJlciBkYXMgRm9ybWF0IGVpbmVyIEVyd2VpdGVydW5nXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiSW4gc2NobmVsbGVtIFN5bWxpbmsgJWkgaXN0IEVYVEVOVF9GTCBnZXNldHp0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgaGF0IHVucmVnZWxtw6Rzc2lnZSBFcndlaXRlcnVuZ2VuXG4iCisiXHQoQG4gbG9naXNjaGVyIEBiICVjLCBwaHlzaXNjaGVyIEBiICViLCBMw6RuZ2UgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE2Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiQGkgJWkgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIEVyd2VpdGVydW5ncy1Lbm90ZW4gKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBVbXdhbmRlbG4gZGVyIFN1YmNsdXN0ZXItQmxvY2tiaXRtYXA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI2Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiZGllIEBxLUBpIGlzdCBrZWluZSByZWd1bMOkcmUgRGF0ZWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMQorbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAcS1AaSB3aXJkIG5pY2h0IGJlbnV0enQsIGVudGjDpGx0IGFiZXIgRGF0ZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM2Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiZGllIEBxLUBpIGlzdCBzaWNodGJhciBmw7xyIGRlbiBCZW51dHplci4gICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIkRpZSBJbm9kZSBmw7xyIGRlZmVrdGUgQmzDtmNrZSBzaWVodCB1bmfDvGx0aWcgYXVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGhhdCBlaW5lIEVyd2VpdGVydHVuZyBkZXIgTMOkbmdlIE51bGxcbiIKKyJcdChAbiBsb2dpc2NoZXIgQGIgJWMsIHBoeXNpc2NoZXIgQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiRsO8aHJlIHp1c8OkdHpsaWNoZSBMw6R1ZmUgZHVyY2gsIHVtIGRpZSB2b24gbWVociBhbHMgZWluZXIgQGkgYmVhbnNwcnVjaHRlbiBCbMO2Y2tlIHp1IGtsw6RyZW4uLi5cbiIKKyJEdXJjaGdhbmcgMUI6IFN1Y2hlIG5hY2ggbWVocmZhY2ggYmVhbnNwcnVjaHRlbiBCbMO2Y2tlblxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJAbWUocikgQmxvY2svQmzDtmNrZSBpbiBAaSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGZWhsZW4gYmVpbSBQcsO8ZmVuIGRlciBJbm9kZXMgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkBBIGRpZSBAaS1AQiAoaW5vZGVfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSXRlcmllcmVuIMO8YmVyIGRpZSBCbMO2Y2tlIGluIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg5IGUyZnNjay9wcm9ibGVtLmM6MTMwNAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaSBkZXIgQW5wYXNzdW5nIGRlcyBSZWZlcmVuenrDpGhsZXJzIGRlcyBCbG9ja3MgZsO8ciBAYSAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTQKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIkR1cmNoZ2FuZyAxQzogRHVyY2hzdWNoZSBWZXJ6ZWljaG5pc3NlIG5hY2ggQGlzIG1pdCBtZWhyZmFjaCBiZWxlZ3RlbiBCbMO2Y2tlbi5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAwCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIkR1cmNoZ2FuZyAxRDogR2xlaWNoZSBtZWhyZmFjaCBiZWxlZ3RlIEJsw7Zja2UgYWJcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDUKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiRGF0ZWkgJVEgKEBpICMlaSwgw4RuZGVydW5nc3plaXQgJUlNKSBcbiIKKyIgIGhhdCAlciBtZWhyZmFjaCBiZWxlZ3RlKG4pIEJsb2NrL0LDtmNrZSwgZ2VtZWluc2FtIGdlbnV0enQgbWl0ICVOIERhdGVpKGVuKTpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxMQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIMOEbmRlcnVuZ3N6ZWl0ICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE2Cittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PEBmLU1ldGFkYXRlbj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjEKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKGVzIGdpYnQgJU4gQGlzLCBkaWUgbWVocmZhY2ggYmVsZWd0ZSBCbMO2Y2tlIGVudGhhbHRlbi4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjYKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJtZWhyZmFjaCBiZWxlZ3RlIEJsw7Zja2Ugd3VyZGVuIGJlcmVpdHMgbmV1IHp1Z2VvcmRuZXQgYnp3LiBnZWtsb250LlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiS2FubiBlaW5lIERhdGVpIG5pY2h0IGtsb25lbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIkR1cmNoZ2FuZyAyOiBQcsO8ZmUgZGllIEBkc3RydWt0dXJcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiRmFsc2NoZSBAaW51bW1lciBmw7xyIOKAni7igJwgaW4gVmVyemVpY2huaXNpbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkBFIGhhdCBmYWxzY2hlIEBpLU5yLjogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2MAorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJARSBoYXQgZ2Vsw7ZzY2h0ZS91bmJlbnV0enQgQGkgJURpLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY1Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFIEBMIG5hY2gg4oCeLuKAnCAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzAKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiQEUgemVpZ3QgYXVmIGVpbmUgQGkgKCVEaSkgaW4gZWluZW0gZGVmZWt0ZW4gQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc1Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMIG1pdCBAZCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiQEUgQEwgbWl0IGRlciBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODUKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBoYXQgZWluIHVuenVsw6Rzc2lnZXMgWmVpY2hlbiBpbSBOYW1lbi5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkZlaGxlbmRlIOKAni7igJwgaW4gQGQgQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkZlaGxlbmRlciBFaW50cmFnIOKAni4u4oCcIGluIEBkaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAwCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiRGVyIGVyc3RlIEBlIOKAniVEbuKAnCAoQGk9JURpKSBpbiBAZC1AaSAlaSAoJXApIHNvbGx0ZSDigJ4u4oCcIHNlaW5cbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDUKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJEZXIgendlaXRlIEBlIOKAniVEbuKAnCAoaW5vZGU9JURpKSBpbiBAZC1AaSAlaSBzb2xsdGUg4oCeLi7igJwgc2VpblxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMAorbXNnaWQgImlfZmFkZHIgQEYgJUlGLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZhZGRyIEBGICVJRiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTUKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbCBARiAlSWYsIHNvbGx0ZSBOdWxsIHNlaW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjAKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgQEYgJUlkLCBzb2xsdGUgTnVsbCBzZWluLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjUKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnJhZyBARiAlTiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMAorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnNpemUgQEYgJU4sIEBzIG51bGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM1Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBoYXQgZWluZW4gdW5nw7xsdGlnZW4gTW9kdXMgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDAKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkBkLUBpICVpLCBAYiAlQiwgT2Zmc2V0ICVOOiBAZCBkZWZla3RcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDUKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGQtQGkgJWksIEBiICVCLCBvZmZzZXQgJU46IERhdGVpbmFtZSB6dSBsYW5nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MAorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAiQGQtQGkgJWkgaGF0IGVpbmVuIG5pY2h0IHp1Z2V3aWVzZW5lbiAlQi4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGQtQGUg4oCeLuKAnCBpbiBAZC1AaSAlaSBpc3QgbmljaHQgTlVMTC10ZXJtaW5pZXJ0XG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGQtQGUg4oCeLi7igJwgaW4gQGQtQGkgJWkgaXN0IG5pY2h0IE5VTEwtdGVybWluaWVydFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY1Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgaXN0IGVpbiBASSB6ZWljaGVub3JpZW50aWVydGVzIEdlcsOkdC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcwCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBpc3QgZWluIEBJIGJsb2Nrb3JpZW50aWVydGVzIEdlcsOkdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzUKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJARSBpc3QgZWluIGRvcHBlbHRlciBAZSBmw7xyIOKAni7igJwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MAorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJARSBpc3QgZWluIGRvcHBlbHRlciBAZSBmw7xyIOKAni4u4oCcLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODUgZTJmc2NrL3Byb2JsZW0uYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiSW50ZXJuZXIgRmVobGVyOiBrYW5uIGRpcl9pbmZvIGbDvHIgJWkgbmljaHQgZmluZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTAKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJARSBoYXQgZWluZSByZWNfbGVuIHZvbiAlRHIsIHNvbGx0ZSAlTiBzZWluLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJAQSBkaWUgaWNvdW50LVN0cnVjdHVyOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBEdXJjaGxhdWZlbiBkZXIgQGRibMO2Y2tlOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDUKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBAZGJsb2NrcyAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTAKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiB2b24gQGRibG9jayAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIGVpbmVuIG5ldWVuIEBkYmxvY2sgZsO8ciBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWkgZGVyIEZyZWlnYWJlIHZvbiBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJWZXJ6ZWljaG5pc2VpbnRyYWcgZsO8ciDigJ4u4oCcIGluICVwICglaSkgaXN0IGdyb8OfLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMwCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGlzdCBlaW4gQEkgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM1Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIkBpICVpICglUSkgaXN0IGVpbiBpbGxlZ2FsZXIgU29ja2V0LlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDAKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiU2V0emUgZGVuIERhdGVpdHlwZSBmw7xyIEBFIGF1ZiAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDUKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIGhhdCBlaW5lbiBmYWxzY2hlbiBEYXRlaXR5cCAod2FyICVEdCwgc29sbHRlICVOIHNlaW4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIGhhdCBEYXRlaXR5cCBnZXNldHp0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NQorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkBFIGhhdCBlaW5lbiBOYW1lbiBkZXIgTMOkbmdlIE51bGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYwCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBpbnZhbGlkLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY1Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIkBhIEBiIEBGIGlzdCBmYWxzY2ggKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcwCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIkBmIGVudGjDpGx0IGdyb8OfZSBEYXRlaWVuLCBhYmVyIGltIEBTIGRlbiBCaXRzY2hhbHRlciBMQVJHRV9GSUxFIG5pY2h0IGdlc2V0enQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzUKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGlzdCBuaWNodCByZWZlcmVuemllcnRcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgwCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGRvcHBlbHQgcmVmZXJlbnppZXJ0XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBoYXQgdW5nw7xsdGlnZW4gTWluaW11bWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjkwCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGhhdCB1bmfDvGx0aWdlbiBNYXhpbWFsaGFzaFxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTUKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJVbmfDvGx0aWdlIEBoICVkICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIEBoICVkICglcSk6IGZhbHNjaGUgQmxvY2tudW1tZXIgJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcCBAaCAlZDogV3VyemVsa25vdGVuaXN0IHVuZ8O8bHRpZ1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTQKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGhhdCBlaW5lIHVuZ8O8bHRpZ2UgQmVncmVuenVuZyAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxOQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgaGF0IGVpbmVuIHVuZ8O8bHRpZ2VuIFrDpGhsZXJzdGFuZCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgaGF0IGVpbmUgdW5zb3J0aWVydGUgSGFzaHRhYmVsbGVcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBoYXQgZWluZSB1bmfDvGx0aWdlIFRpZWZlICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzNAorbXNnaWQgIkR1cGxpY2F0ZSBARSBmb3VuZC4gICIKK21zZ3N0ciAiRG9wcGVsdGVyIEBFIGdlZnVuZGVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM5CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGhhdCBrZWluZW4gZWluZGV1dGlnZW4gRGF0ZWlubmFtZW4uXG4iCisiQmVuZW5uZSBpbiAlcyB1bSIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ0Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiRG9wcGVsdGVyIEBlIOKAniVEbuKAnCBnZWZ1bmRlbi5cbiIKKyJcdCVwICglaSkgd2lyZCBmw7xyIGRpZSBOZXVlcnN0ZWxsdW5nIG1hcmtpZXJ0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0OQorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU0Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJVbmVyd2FydGV0ZXIgQGIgaW4gQGggJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIkBFIHJlZmVyZW56aWVydCBAaSAlRGkgaW4gQGcgJWcsIGbDvHIgZGllIF9JTk9ERV9VTklOSVQgZ2VzZXR6dCBpc3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICJARSB2ZXJ3ZWlzdCBhdWYgQGkgJURpLCAgZGllIGltIEJlcmVpY2ggdW5nZW51dHp0ZXIgSW5vZGVzIHZvbiBAZyAlZyB6dSBmaW5kZW4gaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBARiAlTiwgc29sbHRlIE51bGwgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NQorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIkR1cmNoZ2FuZyAzOiBQcsO8ZmUgQGQtVmVya27DvHBmdW5nZW5cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJAciBuaWNodCB6dWdlb3JkbmV0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIktlaW4gUGxhdHogaW0gVmVyemVpY2huaXMgQGwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk5pY2h0IHZlcmJ1bmRlbmUgQGQtQGkgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9AbCBuaWNodCBnZWZ1bmRlbi4gICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDAKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAi4oCeLi7igJwgaW4gJVEgKCVpKSBpc3QgJVAgKCVqKSwgc29sbHRlICVxICglZCkgc2Vpbi5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiRmFsc2NoZXMgb2RlciBmZWhsZW5kZXMgVmVyemVpY2huaXMgL0BsLiAgV2llZGVydmVyYmluZGVuIG5pY2h0IG3DtmdsaWNoLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIkVyd2VpdGVybiB2b24gL0BsIG5pY2h0IG3DtmdsaWNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiV2llZGVydmVyYmluZGVuIHZvbiAlaSBuaWNodCBtw7ZnbGljaDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkZlaGxlciB3w6RocmVuZCBkZXIgU3VjaGUgbmFjaCAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BiOiAlbSB3w6RocmVuZCBkZXMgVmVyc3VjaGVzLCBAZCAvQGwgenUgZXJ6ZXVnZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BpOiAlbSB3w6RocmVuZCBkZXMgVmVyc3VjaGVzLCBAZCAvQGwgenUgZXJ6ZXVnZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3w6RocmVuZCBkZXMgVmVyc3VjaGVzLCBAZCAvQGwgenUgZXJ6ZXVnZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd8OkaHJlbmQgZGVzIFNjaHJlaWJlbnMgZGVzIEBkLUBicyBmw7xyIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJGZWhsZXIgd8OkaHJlbmQgZGVzIEFucGFzc2VucyBkZXIgQGktQW56YWhsIGF1ZiBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiS29ubnRlIGRlbiBFaWdlbnTDvG1lciB2b24gQGkgJWkgbmljaHQgcmVwYXJpZXJlbjogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJFaWdlbnTDvG1lciB2b24gQGkgJWkga29ubnRlIG5pY2h0IHJlcGFyaWVydCB3ZXJkZW46IFxuIgorIkBkZWludHJhZyBkZXMgRWlnZW50w7xtZXJzIHd1cmRlIG5pY2h0IGdlZnVuZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgV3VyemVsdmVyemVpY2huaXNzZXMgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIFZlcnplaWNobmlzc2VzIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NQorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiZGllIFd1cnplbGlub2RlIGlzdCBrZWluIEBkOyBBYmJydWNoLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgwCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJPaG5lIFd1cnplbGlub2RlIGlzdCB3ZWl0ZXJlcyBBcmJlaXRlbiBuaWNodCBtw7ZnbGljaC5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL0BsIGlzdCBrZWluIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NworbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIDNBOiBPcHRpbWllcmUgVmVyemVpY2huaXNzZVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgImRpcnNfdG9faGFzaCBJdGVyYXRvciBrb25udGUgbmljaHQgZXJ6ZXVndCB3ZXJkZW46ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNworbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiVmVyemVpY2huaXMgJXEgKCVkKSBrb25udGUgbmljaHQgb3B0aW1pZXJ0IHdlcmRlbjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTEyCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHRpbWllcmUgVmVyemVpY2huaXNzZTogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjkKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIDQ6IMOcYmVycHLDvGZlIGRpZSBSZWZlcmVuenrDpGhsZXJcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICJAdWUgQEkgJWkgQHouICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIkB1ZSBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0NAorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJEZXIgUmVmZXJlbnp6w6RobGVyIHZvbiBAaSAlaSBpc3QgJUlsLCBAcyBhYmVyICVOIHNlaW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiV0FSTlVORzogUFJPR1JBTU1JRVJGRUhMRVIgSU4gRTJGU0NLIVxuIgorIlx0T0RFUiBFSU4gVFJPVFRFTCAoU0lFKSBQUsOcRlQgRUlOIEVJTkdFSMOETkdURVMgKEFLVElWRVMpIERBVEVJU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXN0ICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzdCAlSWwuICBTaWUgc29sbHRlbiBpZGVudGlzY2ggc2VpbiFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1OAorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICJEdXJjaGdhbmcgNTogw5xiZXJwcsO8ZmUgZGllIHp1c2FtbWVuZ2VmYXNzdGUgR3J1cHBlbmluZm9ybWF0aW9uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQXVmZsO8bGxieXRlIGFtIEVuZGUgdm9uIEBpIEBCIGlzdCBuaWNodCBnZXNldHp0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2OAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQXVmZsO8bGxieXRlIGFtIEVuZGUgdm9uIEBiIEBCIGlzdCBuaWNodCBnZXNldHp0LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzMKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJVbnRlcnNjaGllZGUgaW4gZGVyIEBiLUBCOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1OTMKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJVbnRlcnNjaGllZGUgaW4gZGVyIEBpLUBCOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjEzCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJEaWUgQW56YWhsIGZyZWllciBAaXMgaXN0IGZhbHNjaCBmw7xyIEBnICMlZyAoJWksIGdlesOkaGx0PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTgKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIFZlcnplaWNobmlzc2UgaXN0IGZhbHNjaCBmw7xyIEBnICMlZyAoJWksIGdlesOkaGx0PSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIzCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiRGllIEFuemFobCBmcmVpZXIgQGlzIGlzdCBmYWxzY2ggKCVpLCBnZXrDpGhsdD0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjI4Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJEaWUgQW56YWhsIGZyZWllciBCbMO2Y2tlIGluIEBnICMlZyBpc3QgZmFsc2NoICglYiwgZ2V6w6RobHQ9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzMKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJEaWUgQW56YWhsIGZyZWllciBCbMO2Y2tlIGlzdCBmYWxzY2ggKCViLCBnZXrDpGhsdD0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM4Cittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICJQUk9HUkFNTUlFUkZFSExFUjogRGF0ZWlzeXN0ZW0gKCMlTikgQEItRW5kcHVua3RlICglYiwgJWMpIHBhc3NlbiBuaWNodCBtaXQgZGVuIGJlcmVjaG5ldGVuIEBCLUVuZHB1bmt0ZW4gKCVpLCAlaikgw7xiZXJlaW5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIkludGVybmVyIEZlaGxlcjogZGFzIEVuZGUgZGVyIEJpdG1hcCAoJU4pIHdpcmQgZXJyYXRlblxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkZlaGxlciBiZWltIGhpbmVpbmtvcGllcmVuIHZvbiBAaSBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIaW5laW5rb3BpZXJlbiBkZXIgRXJzYXR6LUJsb2NrYml0bWFwOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICJCbMO2Y2tlIHZvbiBAZyAlZyBzaW5kIGluIEJldXR6dW5nLCBvYndvaGwgQGcgYWxzIEJMT0NLX1VOSU5JVCBtYXJraWVydCBpc3RcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiRGllIEBpc3cgZGVyIEBnICVnIHNpbmQgaW4gQmVudXR6dW5nLCBvYndvaGwgQGcgYWxzIElOT0RFX1VOSU5JVCBtYXJraWVydCBpc3RcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkxCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIkBqIHdpcmQgd2llZGVyaGVyZ2VzdGVsbHQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5NgorbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJRdW90YS1JbmZvIGbDvHIgVHlwICVOIHdpcmQgYWt0dWFsaXNpZXJ0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICJVbmJlbnV0enRlciBGZWhsZXJjb2RlICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTQwIGUyZnNjay9wcm9ibGVtLmM6MTk0NAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIklHTk9SSUVSVCIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVkLCBlbGFwc2VkIHRpbWU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCittc2dzdHIgImJlbnV0enRlciBTcGVpY2hlcjogJWQsIHZlcmdhbmdlbmRlIFplaXQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiR3LDtsOfZSBkZXIgSW5vZGU9JWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiYmVpbSBTdGFydGVuIGRlciBJbm9kZXByw7xmdW5nIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ3w6RocmVuZCBkZXIgSW5vZGVwcsO8ZnVuZyIKKworIzogZTJmc2NrL3N1cGVyLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgQXVmcnVmcyB2b24gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZsO8ciBJbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgQXVmcnVmcyB2b24gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZsO8ciBJbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiS8O8cnplbiIKKworIzogZTJmc2NrL3N1cGVyLmM6MjczCittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIkJlcmVpbmlnZW4iCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiQXVmcnVmOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBTdXBlcmJsb2NrXSBbLUIgQmxvY2tncsO2w59lXVxuIgorIlx0XHRbLUkgSW5vZGVfUHVmZmVyX0Jsw7Zja2VdIFstUCBQcm96ZXNzX0lub2RlZ3LDtsOfZV1cbiIKKyJcdFx0Wy1sfC1MIEJhZF9CbG9ja3NfRGF0ZWldIFstQyBEYXRlaWRlc2tyaXB0b3JdIFstaiBleHRlcm5lc19Kb3VybmFsXVxuIgorIlx0XHRbLUUgZXJ3ZWl0ZXJ0ZV9PcHRpb25lbl0gR2Vyw6R0XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgbGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOb3RmYWxsaGlsZmU6XG4iCisiIC1wICAgICAgICBhdXRvbWF0aXNjaGUgUmVwYXJhdHVyIChrZWluZSBGcmFnZW4pXG4iCisiIC1uICAgICAgICBrZWluZSBWZXLDpG5kZXJ1bmdlbiBhbSBEYXRlaXN5c3RlbSB2b3JuZWhtZW5cbiIKKyIgLXkgICAgICAgIFwiIEphIFwiIGF1ZiBhbGxlIEZyYWdlbiBhbm5laG1lblxuIgorIiAtYyAgICAgICAgc3VjaGUgbmFjaCBkZWZla3RlbiBCbMO2Y2tlblxuIgorIiAtZiAgICAgICAgZXJ6d2luZ2UgZGllIMOcYmVycHLDvGZ1bmcgYXVjaCB3ZW5uIGFsbGVzIGkuTy4gZXJzY2hlaW50XG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBzZWkgZ2VzcHLDpGNoaWdcbiIKKyIgLWIgU3VwZXJibG9jICAgICAgICAgTnV0emUgU3VwZXJibG9ja2tvcGllXG4iCisiIC1CIEJsb2NrZ3LDtsOfZSAgICAgICAgZXJ6d2luZ2UgQmxvY2tncsO2w59lIGJlaW0gU3VjaGVuIHZvbSBTdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmVzLUpvdXJuYWwgIEFuZ2FiZSBkZXMgU3BlaWNoZXJvcnRlcyBkZXMgZXh0ZXJuZW4gSm91bmFsc1xuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICB6dXIgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgaGluenVmw7xnZW5cbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgTGlzdGUgZGVyIGRlZmVrdGVuIEJsw7Zja2UgZGVmaW5pZXJlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXUvJXUgZmlsZXMgKCUwZC4lZCUlIG5vbi1jb250aWd1b3VzKSwgJWxsdS8lbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIlczogJXUvJXUgRGF0ZWllbiAoJTBkLiVkJSUgbmljaHQgenVzYW1tZW5ow6RuZ2VuZCksICVsbHUvJWxsdSBCbMO2Y2tlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgSW5vZGUgaXN0IGluIEJlbnV0enVuZyAoJTIuMmYlJSB2b24gJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IElub2RlcyBzaW5kIGluIEJlbnV0enVuZyAoJTIuMmYlJSB2b24gJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IG5pY2h0IHp1c2FtbWVuaMOkbmdlbmRlIERhdGVpICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZSBEYXRlaWVuICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuaWNodCB6dXNhbW1lbmjDpG5nZW5kZXMgVmVyemVpY2huaXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5pY2h0IHp1c2FtbWVuaMOkbmdlbmRlIFZlcnplaWNobmlzc2UgKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgIyB2b24gSW5vZGVzIG1pdCBpbmQvZGluZC90aW5kIEJsw7Zja2VuOiAldS8ldS8ldVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3OQorbXNnaWQgIiAgICAgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiBIaXN0b2dyYW1tIGRlciBUaWVmZSB2b24gRXJ3ZWl0ZXJ1bmdlbjogIgorCisjOiBlMmZzY2svdW5peC5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiUxMmxsdSBCbG9jayB3aXJkIGJlbnV0enQgKCUyLjJmJSUgdm9uICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBCbMO2Y2tlIHdlcmRlbiBiZW51dHp0ICglMi4yZiUlIHZvbiAlbGx1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSB1bmfDvGx0aWdlciBCbG9ja1xuIgorbXNnc3RyWzFdICIlMTJ1IHVuZ8O8bHRpZ2UgQmzDtmNrZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGdyb8OfZSBEYXRlaVxuIgorbXNnc3RyWzFdICIlMTJ1IGdyb8OfZSBEYXRlaWVuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IHJlZ3Vsw6RyZSBEYXRlaVxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSByZWd1bMOkcmUgRGF0ZWllblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiUxMnUgVmVyemVpY2huaXNcbiIKK21zZ3N0clsxXSAiJTEydSBWZXJ6ZWljaG5pc3NlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHplaWNoZW5vcmllbnRpZXJ0ZSBHZXLDpHRlZGF0ZWlcbiIKK21zZ3N0clsxXSAiJTEydSB6ZWljaGVub3JpZW50aWVydGUgR2Vyw6R0ZWRhdGVpZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IEJsb2NrZ2Vyw6R0ZWRhdGVpXG4iCittc2dzdHJbMV0gIiUxMnUgQmxvY2tnZXLDpHRlZGF0ZWllblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IEZpZm9cbiIKK21zZ3N0clsxXSAiJTEydSBGaWZvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlMTJ1IFZlcmtuw7xwZnVuZ1xuIgorbXNnc3RyWzFdICIlMTJ1IFZlcmtuw7xwZnVuZ2VuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmciCittc2dzdHJbMV0gIiUxMnUgc3ltYm9saXNjaGUgVmVya27DvHBmdW5nZW4iCisKKyM6IGUyZnNjay91bml4LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgc2NobmVsbGUgc3ltYm9saXNjaGUgVmVya27DvHBmdW5nKVxuIgorbXNnc3RyWzFdICIgKCV1IHNjaG5lbGxlIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZ2VuKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBTb2NrZXRcbiIKK21zZ3N0clsxXSAiJTEydSBTb2NrZXRzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgRGF0ZWlcbiIKK21zZ3N0clsxXSAiJTEydSBEYXRlaWVuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjM0IG1pc2MvYmFkYmxvY2tzLmM6OTgzIG1pc2MvdHVuZTJmcy5jOjE5NzAgbWlzYy91dGlsLmM6MTQ3CisjOiByZXNpemUvbWFpbi5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJiZWkgZGVyIFByw7xmdW5nLCBvYiAlcyBlaW5nZWjDpG5ndCBpc3QuIgorCisjOiBlMmZzY2svdW5peC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nISAgJXMgaXMgJXMuXG4iCittc2dzdHIgIldhcm51bmchICAlcyBpc3QgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIlcyBpc3QgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0Cittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJGb3J0c2V0enVuZyBuaWNodCBtw7ZnbGljaCwgYnJlY2hlIGFiLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2NgorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIldBUk5VTkchISEgIERhcyBEYXRlaXN5c3RlbSBpc3QgZWluZ2Vow6RuZ3QsIFdlbm4gU2llIGZvcnRmYWhyZW4sICoqKldFUkRFTioqKlxuIgorIlNpZSAqKipTQ0hXRVJXSUVHRU5ERSoqKiBTY2jDpGRlbiBhbSBEYXRlaXN5c3RlbSB2ZXJ1cnNhY2hlbi5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIldpcmtsaWNoIGZvcnRmYWhyZW4iCisKKyM6IGUyZnNjay91bml4LmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgIlByw7xmdW5nIGFiZ2Vicm9jaGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2MworbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgZW50aMOkbHQgZWluIGZlaGxlcmhhZnRlcyBEYXRlaXN5c3RlbSIKKworIzogZTJmc2NrL3VuaXguYzozNjUKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIHd1cmRlIG5pY2h0IG9yZG51bmdzZ2Vtw6TDnyBhdXNnZWjDpG5ndCIKKworIzogZTJmc2NrL3VuaXguYzozNjcKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiRWlnZW5zY2hhZnRlbiBkZXMgcHJpbcOkcmVuIFN1cGVyYmxvY2tzIHVudGVyc2NoZWlkZW4gc2ljaCB2b20gQmFja3VwIgorCisjOiBlMmZzY2svdW5peC5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiB3dXJkZSAldSBtYWwgb2huZSDDnGJlcnByw7xmdW5nIGVpbmdlaMOkbmd0IgorCisjOiBlMmZzY2svdW5peC5jOjM3OAorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgaGF0IGVpbmVuIGluIGRlciBadWt1bmZ0IGxpZWdlbmRlbiBaZWl0cHVua3QgZGVyIGxldHp0ZW4gUMO8ZnVuZyBkZXMgRGF0ZWlzeXN0ZW1zIgorCisjOiBlMmZzY2svdW5peC5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiB3dXJkZSAldSBUYWdlIG9obmUgw5xiZXJwcsO8ZnVuZyBnZW51dHp0IgorCisjOiBlMmZzY2svdW5peC5jOjM5MworbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIFByw7xmdW5nIGVyend1bmdlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHNhdWJlciwgJXUvJXUgRGF0ZWllbiwgJWxsdS8lbGx1IEJsw7Zja2UiCisKKyM6IGUyZnNjay91bml4LmM6NDQ1Cittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoUHLDvGZ1bmcgbmFjaCBuw6RjaHN0ZW0gRWluaMOkbmdlbikiCisKKyM6IGUyZnNjay91bml4LmM6NDQ4Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChQcsO8ZnVuZyBuYWNoIG7DpGNoc3RlbSBFaW5ow6RuZ2VuKSIKKworIzogZTJmc2NrL3VuaXguYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChQcsO8ZnVuZyBuYWNoICVsZCBFaW5ow6RuZ2V2b3Jnw6RuZ2VuKSIKKworIzogZTJmc2NrL3VuaXguYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRmVobGVyOiBLYW5uIC9kZXYvbnVsbCAoJXMpIG5pY2h0IMO2ZmZuZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzo2NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJVbmJla2FubnRlIGVyd2VpdGVydGUgT3B0aW9uOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRheGZlaGxlciBpbiBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSB2b24gZTJmc2NrICglcywgWmVpbGUgJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRmVobGVyIGJlaSDDnGJlcnByw7xmdW5nIGRlcyBEYXRlaS1EZXNrcmlwdG9ycyAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3OTQKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJVbmfDvGx0aWdlciDigJ5jb21wbGV0aW9uIGluZm9ybWF0aW9u4oCcLURhdGVpLURlc2tyaXB0b3IiCisKKyM6IGUyZnNjay91bml4LmM6ODA5Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJOdXIgZWluZSBkZXIgT3B0aW9uZW4gLXAvLWEsIC1uIG9kZXIgLXkgZGFyZiBhbmdlZ2ViZW4gd2VyZGVuLiIKKworIzogZTJmc2NrL3VuaXguYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIkRpZSAtdCBPcHRpb24gd2lyZCB2b24gZGllc2VyIGUyZnNjay1WZXJzaW9uIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NjEgZTJmc2NrL3VuaXguYzo5MzMgbWlzYy90dW5lMmZzLmM6ODAyIG1pc2MvdHVuZTJmcy5jOjEwOTEKKyM6IG1pc2MvdHVuZTJmcy5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiTmljaHQgbcO2Z2xpY2gg4oCeJXPigJwgYXVmenVsw7ZzZW4iCisKKyM6IGUyZnNjay91bml4LmM6OTEyCittc2dpZCAiVGhlIC1uIGFuZCAtRCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLW4gdW5kIC1EIHNjaGxpZXNzZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMuIgorCisjOiBlMmZzY2svdW5peC5jOjkxNworbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC1uIHVuZCAtYyBzY2hsaWVzc2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKKworIzogZTJmc2NrL3VuaXguYzo5MjIKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkRpZSBPcHRpb25lbiAtbiB1bmQgLWwvLUwgc2NobGllc3NlbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGUyZnNjay91bml4LmM6OTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiRGllIC1jIHVuZCAtbC8tTCBPcHRpb25lbiBkw7xyZmVuIG5pY2h0IGdsZWljaHplaXRpZyB2ZXJ3ZW5kZXQgd2VyZGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIjJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgaXN0IGtlaW5lIEdhbnp6YWhsXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZ8O8bHRpZ2VzIG5pY2h0LW51bWVyaXNjaGVzIEFyZ3VtZW50IGbDvHIgLSVjIChcIiVzXCIpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJNTVAgaW50ZXJ2YWwgaXMgJXUgc2Vjb25kcyBhbmQgdG90YWwgd2FpdCB0aW1lIGlzICV1IHNlY29uZHMuIFBsZWFzZSB3YWl0Li4uXG4iCittc2dzdHIgIiIKKyJNTVAgSW50ZXJ2YWxsIGlzdCAldSBTZWt1bmRlbiB1bmQgZGllIGdlc2FtbXRlIFdhcnRlemVpdCBpc3QgJXUgU2VrdW5kZW4uXG4iCisiQml0dGUgd2FydGVuLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTEzOSBlMmZzY2svdW5peC5jOjExNDQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgImJlaW0gUHLDvGZlbiBkZXMgTU1QLUJsb2NrcyIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ2IG1pc2MvdHVuZTJmcy5jOjE5MDMKK21zZ2lkICIiCisiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKyIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iCittc2dzdHIgIiIKKyJXZW5uIFNpZSBzaWNoZXIgc2luZCwgZGHDnyBkYXMgRGF0ZWlzeXN0ZW0gYXVmIGtlaW5lbSBLbm90ZW4gYmVudXR6dCB3aXJkLFxuIgorInN0YXJ0ZW4gU2llIGJpdHRlOlxuIgorIuKAnnR1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V94oCcXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiRmVobGVyOiBleHQyZnMtQmlibGlvdGhla3MtVmVyc2lvbiBpc3QgenUgYWx0IVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJiZWkgZGVyIFByb2dyYW1taW5pdGlhbGlzaWVydW5nIgorCisjOiBlMmZzY2svdW5peC5jOjEyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRCZW51dHplICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzkKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJCZW7DtnRpZ2UgZWluIFRlcm1pbmFsIGbDvHIgaW50ZXJha3RpdmUgUmVwYXJhdHVyZW4iCisKKyM6IGUyZnNjay91bml4LmM6MTI5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIHZlcnN1Y2hlIGVzIG1pdCBCYWNrdXAtQmzDtmNrZW4uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjk0Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9jayB1bmfDvGx0aWciCisKKyM6IGUyZnNjay91bml4LmM6MTI5NQorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJHcnVwcGVuLURlc2tyaXB0b3JlbiBzY2hlaW5lbiBkZWZla3QgenUgc2Vpbi4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAiJXM6ICVzIGJlaW0gQmVudXR6ZW4gZGVyIEJhY2t1cC1CbMO2Y2tlIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogZXMgd2lyZCB6dW0gb3JpZ2luYWxlbiBTdXBlcmJsb2NrIHp1csO8Y2sgZ2VrZWhydFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMzcKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiRGllc2UgRGF0ZWlzeXN0ZW0tUmV2aXNpb24gaXN0IG9mZmVuc2ljaHRsaWNoIHp1IG5ldSBmw7xyIGRpZXNlIFZlcnNpb24gXG4iCisidm9uIGUyZnNjayAob2RlciBkZXIgRGF0ZWlzeXN0ZW0tU3VwZXJibG9jayBpc3QgZGVmZWt0KS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQzCittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiS8O2bm50ZSBlcyBlaW5lIFBhcnRpb24gZGVyIEzDpG5nZSBOdWxsIHNlaW4/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlNpZSBiZW7DtnRpZ2VuICVzLSBvZGVyIHJvb3QtUmVjaHRlIGbDvHIgZGFzIERhdGVpc3lzdGVtLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTEKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIk3DtmdsaWNoZXJ3ZWlzZSBpc3QgZGllIFBhcnRpdGlvbiBuaWNodCB2b3JoYW5kZW4gb2RlciBlaW5lIFN3YXAtUGFydGl0aW9uP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTQKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiIgorIklzdCBkYXMgRGF0ZWlzeXN0ZW0gZWluZ2Vow6RuZ3Qgb3IgZXhrbHVzaXYgdm9uIGVpbmVtIGFuZGVyZW4gUHJvZ3JhbW1cbiIKKyJcbiIKKyJnZcO2ZmZuZXQgd29yZGVuP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTcKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJJc3QgZGFzIEdlcsOkdCBtw7ZnbGljaGVyd2Vpc2UgbmljaHQgdm9yaGFuZGVuP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNjAKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkxhdWZ3ZXJrIGlzdCBzY2hyZWliZ2VzY2jDvHR6dCwgbnV0emVuIFNpZSBkaWUgLW4gT3B0aW9uXG4iCisidW0gZXMgaW0gTnVyLUxlc2VuLU1vZHVzIHp1IHByw7xmZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQyNQorbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiTmV1ZXJlIFZlcnNpb24gdm9uIGUyZnNjayBiZW7DtnRpZ3QhIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAid8OkaHJlbmQgZGVyIFByw7xmdW5nIGRlcyBleHQzLUpvdXJuYWxzIGbDvHIgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4MAorbXNnaWQgIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtIGNoZWNrLlxuIgorbXNnc3RyICJXYXJudW5nOiDDnGJlcnNwcmluZ2UgSm91cm5hbC1XaWVkZXJoZXJzdGVsbHVuZywgZGEgZGFzIERhdGVpc3lzdGVtIGltIE51ci1MZXNlbi1Nb2R1cyBpc3QuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAiU3VwZXJibG9jay1GbGFncyBrb25udGFuIGF1ZiAlcyBuaWNodCBnZXNldHp0IHdlcmRlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgImJlaSBkZXIgV2llZGVyaGVyc3RlbGx1bmcgZGVzIGV4dDMtSm91cm5hbHMgdm9uICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBiZXNpdHp0IG5pY2h0IHVudGVyc3TDvHR6dGUgRWlnZW5zY2hhZnQoZW4pOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IFdhcm51bmc6IERpZSBLb21wcmVzc2lvbnN1bnRlcnN0w7x0enVuZyBpc3QgZXhwZXJpbWVudGVsbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlczogZTJmc2NrIHd1cmRlIG9obmUgVW50ZXJzdMO8dHp1bmcgZsO8ciBIVFJFRSBrb21waWxpZXJ0LFxuIgorIlx0YWJlciBkYXMgRGF0ZWlzeXN0ZW0gJXMgYmVzaXR6dCBIVFJFRSBWZXJ6ZWljaG5pc3NlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgYmVpbSBMZXNlbiBkZXMgQmFkLUJsb2NrLUlub2Rlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1OTkKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIkRhcyB2ZXJoZWnDn3QgbmljaHRzIGd1dGVzLCBhYmVyIHdpciB2ZXJzdWNoZW4gZXMgdHJvdHpkZW0gLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiRXJzdGVsbGUgSm91cm5hbCAoJWQgQmzDtmNrZSk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjUwCittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBFcmxlZGlndC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjUxCittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIEpvdXJuYWwgd3VyZGUgd2llZGVyaGVyZ2VzdGVsbHQgLSBEYXRlaXN5c3RlbSBpc3QgbnVuIHdpZWRlciBleHQzICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzQKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiQmVnaW5uZSBlMmZzY2sgbmV1IC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzgKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAiYmVpbSBSw7xja3NldHplbiBkZXMgS29udGV4dHMiCisKKyM6IGUyZnNjay91bml4LmM6MTY4NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2NrIGFiZ2Vicm9jaGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2OTAKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJhYmdlYnJvY2hlbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzAyIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBEQVRFSVNZU1RFTSBXVVJERSBWRVLDhE5ERVJUICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBMSU5VWCBNVVNTIE5FVSBHRVNUQVJURVQgV0VSREVOICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxNCBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTlVORzogTm9jaCBGZWhsZXIgaW0gRGF0ZWlzeXN0ZW0gICoqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzU0Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvIgorbXNnc3RyICJiZWltIFNldHplbiBkZXIgQmxvY2tncnVwcGVuLVByw7xmc3VtbWVuaW5mbyIKKworIzogZTJmc2NrL3V0aWwuYzoxODkgbWlzYy91dGlsLmM6NzAKK21zZ2lkICJ5WSIKK21zZ3N0ciAiakoiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNAorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGo+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNgorbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOAorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChqL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMgorbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiYWJnZWJyb2NoZW4hXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM3Cittc2dpZCAieWVzXG4iCittc2dzdHIgImphXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM5Cittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVpblxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8gbmVpblxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGphXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAieWVzIgorbXNnc3RyICJqYSIKKworIzogZTJmc2NrL3V0aWwuYzoyNTcKK21zZ2lkICJubyIKK21zZ3N0ciAibmVpbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmw7xyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3NworbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgImxlc2UgSW5vZGUgdW5kIEJsb2NrIGJpdG1hcHMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInfDpGhyZW5kIGRlcyB3aWVkZXJob2x0ZW4gVmVyc3VjaGVzLCBCaXRtYXBzIGbDvHIgJXMgZWluenVsZXNlbiIKKworIzogZTJmc2NrL3V0aWwuYzoyOTcKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICJTY2hyZWliZSBCbG9jay0gdW5kIElub2RlLUJpdG1hcHMiCisKKyM6IGUyZnNjay91dGlsLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInfDpGhyZW5kIGRlcyB3aWVkZXJob2x0ZW4gVmVyc3VjaGVzLCBCbG9jay0gdW5kIElub2RlLUJpdG1hcHMgZsO8ciAlcyB6dSBzY2hyZWliZW4uIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IFVORVJXQVJURVRFIElOS09OU0lTVEVOWjsgZnNjayBNQU5VRUxMIEFVU0bDnEhSRU5cbiIKKyJcdChkLmguIG9obmUgLWEgb2RlciAtcCBPcHRpb24pXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiQmVudXR6dGVyIFNwZWljaGVyOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJCZW51dHp0ZXIgU3BlaWNoZXI6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJaZWl0OiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgImFiZ2VsYXVmZW5kZSBaZWl0OiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NiBlMmZzY2svdXRpbC5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiYmVpbSBMZXNlbiB2b24gSW5vZGUgJWx1IGluICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjQ3NCBlMmZzY2svdXRpbC5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gdm9uIElub2RlICVsdSBpbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzYKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgImJlaW0gcmVzZXJ2aWVyZW4gZWluZXMgUHVmZmVycyB6dW0gTnVsbGVuIgorCisjOiBlMmZzY2svdXRpbC5jOjc4OAorbXNnaWQgIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyBydW5uaW5nLlxuIgorbXNnc3RyICJVTkVSV0FSVEVURSBJTktPTlNJU1RFTlo6IGRhcyBEYXRlaXN5c3RlbSB3aXJkIG1vZGlmaXppZXJ0IHfDpGhyZW5kIGZzY2sgbMOkdWZ0LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiZXJsZWRpZ3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstYiBCbG9ja2dyw7bDn2VdIFstaSBFaW5nYWJlZGF0ZWldIFstbyBBdXNnYWJlZGF0ZWldIFstc3Z3bmZdXG4iCisiICAgICAgICBbLWMgQmzDtmNrZV9hdWZfZWlubWFsXSBbLWQgVmVyesO2Z2VydW5nc2Zha3Rvcl96d2lzY2hlbl9MZXNlZHVyY2hnw6RuZ2VuXVxuIgorIiAgICAgICAgWy1lIG1heGltYWxlX0JhZF9CbG9ja3NdIFstcCBBbnphaGxfRHVyY2hnw6RuZ2VdXG4iCisiICAgICAgICBbLXQgVGVzdG11c3RlciBbLXQgVGVzdG11c3RlciBbLi4uXV1dXG4iCisiICAgICAgICBHZXLDpHQgW2xldHp0ZXJfQmxvY2sgW1N0YXJ0YmxvY2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IERpZSBPcHRpb25lbiAtbiB1bmQgLXcgc2NobGllc3NlbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBlcmxlZGlndCwgJXMgdmVyc3RyaWNoZW4uICglZC8lZC8lZCBGZWhsZXIpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjMyMgorbXNnaWQgIlRlc3Rpbmcgd2l0aCByYW5kb20gcGF0dGVybjogIgorbXNnc3RyICJUZXN0ZSBtaXQgenVmw6RsbGlnZW4gTXVzdGVybjogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0MAorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICJUZXN0ZSBtaXQgTXVzdGVyIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJiZWltIFN1Y2hlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJNZXJrd8O8cmRpZ2VyIFdlcnQgKCVsZCkgaW4gZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ2OQorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInfDpGhyZW5kIGV4dDJmc19zeW5jX2RldmljZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0ODkgbWlzYy9iYWRibG9ja3MuYzo3NDkKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICJiZWltIEJlZ2lubiBkZXMg4oCeQmFkIEJsb2Nr4oCcLUxpc3RlbmR1cmNobGF1ZnMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJiZWltIFp1d2Vpc2VuIHZvbiBQdWZmZXJuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJQcsO8ZmUgdm9uIEJsb2NrICVsdSBiaXMgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiU3VjaGUgbmFjaCBkZWZla3RlbiBCbMO2Y2tlbiBpbSBOdXItTGVzZW4tTW9kdXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIlN1Y2hlIG5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gKE51ci1MZXNlbi1Nb2R1cyk6IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOCBtaXNjL2JhZGJsb2Nrcy5jOjYzNCBtaXNjL2JhZGJsb2Nrcy5jOjY3NgorIzogbWlzYy9iYWRibG9ja3MuYzo4MjIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIlp1IHZpZWxlIGRlZmVrdGUgQmzDtmNrZSAtIFRlc3Qgd2lyZCBhYmdlYnJvY2hlblxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYwOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJTdWNoZSBuYWNoIGRlZmVrdGVuIEJsw7Zja2VuIChMZXNlbitTY2hyZWliZW4tTW9kdXMpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJWb24gQmxvY2sgJWx1IGJpcyAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2NjYKK21zZ2lkICJSZWFkaW5nIGFuZCBjb21wYXJpbmc6ICIKK21zZ3N0ciAiTGVzZW4gdW5kIFZlcmdsZWljaGVuOiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlN1Y2hlIG5hY2ggZGVmZWt0ZW4gQmzDtmNrZW4gaW0gemVyc3TDtnJ1bmdzZnJlaWVuIExlc2VuK1NjaHJlaWJlbi1Nb2R1c1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJTdWNoZSBuYWNoIGRlZmVrdGVuIEJsw7Zja2VuICh6ZXJzdMO2cnVuZ3NmcmVpZXIgTGVzZW4rU2NocmVpYmVuLU1vZHVzKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiVW50ZXJicm9jaGVuLCByw6R1bWUgYXVmXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVyIFRlc3QtRGF0ZW47IEJsb2NrICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgaXN0IGVpbmdlaMOkbmd0OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIkJhZGJsb2NrcyB3aXJkIHRyb3R6ZGVtIGVyend1bmdlbi4gSG9mZmVudGxpY2ggaXN0IC9ldGMvbXRhYiBuaWNodCBrb3JyZWt0LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5NQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAiZXMgaXN0IHp1IHVuc2ljaGVyLCBCYWRibG9ja3MgenUgc3RhcnRlbiFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwIG1pc2MvdXRpbC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzIHdpcmQgb2ZmZW5zaWNodGxpY2ggdm9tIFN5c3RlbSBnZW51dHp0OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJCYWRibG9ja3Mgd2lyZCB0cm90emRlbSBlcnp3dW5nZW4uIEhvZmZlbnRsaWNoIGlzdCAvZXRjL210YWIgbmljaHQga29ycmVrdC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZSAlcyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAiS2FubiBrZWluZW4gU3BlaWNoZXIgZsO8ciBUZXN0bXVzdGVyIHJlc2VydmllcmVuIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJFcyBkYXJmIGltIE51ci1MZXNlbi1Nb2R1cyBudXIgZWluIFRlc3RtdXN0ZXIgYW5nZWdlYmVuIHdlcmRlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTY5Cittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiWnVmw6RsbGlnZXMgVGVzdG11c3RlciBpc3QgaW0gTnVyLUxlc2VuLU1vZHVzIG5pY2h0IGVybGF1YnQiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICJHcsO2w59lIGRlcyBHZXLDpHRlcyBpc3QgbmljaHQgZmVzdHN0ZWxsYmFyLiBTaWUgbcO8c3NlbiBzaWUgbWFudWVsbCBhbmdlYmVuLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsIGRpZSBHZXLDpHRlZ3LDtsOfZSBmZXN0enVzdGVsbGVuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTQKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJsZXR6dGVyIEJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDAKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiZXJzdGVyIEJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWx1IgorbXNnc3RyICJVbmfDvGx0aWdlciBTdGFydGJsb2NrICglbHUpOiBlciBtdXNzIGtsZWluZXIgYWxzICVsdSBzZWluIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJlcnN0ZWxsZSBCYWQtQmxvY2stTGlzdGUgaW0gU3BlaWNoZXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI3NAorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImbDvGdlIHp1ciBCYWQtQmxvY2stTGlzdGUgaW0gU3BlaWNoZXIgaGluenUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiRHVyY2hnYW5nIGJlZW5kZXQsICV1IGRlZmVrdGUgQmzDtmNrZSBnZWZ1bmRlbi4gKCVkLyVkLyVkIEZlaGxlcilcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstUlZmXSBbLSs9QWFDY0RkZWlqc1N1XSBbLXYgVmVyc2lvbl0gRGF0ZWllbi4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgImZhbHNjaGUgVmVyc2lvbiAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAyIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJiZWltIEF1c2xlc2VuIGRlcyBTdGF0dXMgdm9uICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJiZWltIExlc2VucyBkZXIgRmxhZ3MgaW4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjE4IG1pc2MvY2hhdHRyLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGV4dGVudCBmbGFnIG5vdCBzdXBwb3J0ZWQgb24gJXMiCittc2dzdHIgIiIKKyJEYXMgWnVyw7xja3NldHplbiBkZXMgS2VubnplaWNoZW5zIGbDvHIg4oCeRXJ3ZWl0ZXJ1bmfigJwgd2lyZCBhdWYgJXNcbiIKKyJcdG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogbWlzYy9jaGF0dHIuYzoyMjMgbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiRmxhZ3Mgdm9uICVzIHdpZSBmb2xndCBnZXNldHp0OiAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImJlaW0gU2V0emVuIGRlciBGbGFncyBpbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIlZlcnNpb24gdm9uICVzIGdlc2V0enQgYXVmICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgImJlaW0gU2V0emVuIGRlciBWZXJzaW9uIGluICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiS29ubnRlIFBmYWQtVmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIG5pY2h0IHJlc2VydmllcmVuIgorCisjOiBtaXNjL2NoYXR0ci5jOjMyMworbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IGlzdCBpbmtvbXBhdGliZWwgbWl0IC0gdW5kICtcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMzEKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiQmVudXR6ZSDigJ4tduKAnCwgPSwgLSBvZGVyICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICJBdWZydWY6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08TnVtbWVyPl0gWy1vIGJsb2Nrc2l6ZT08TnVtbWVyPl0gR2Vyw6R0XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgIkJsw7Zja2UiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiQ2x1c3RlciIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcnVwcGUgJWx1OiAoQmzDtmNrZSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiBQcsO8ZnN1bW1lIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoMHglMDR4IEVSV0FSVEVUKSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCB1bmdlbnV0enRlIElub2RlcyAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXMgU3VwZXJibG9jayBpbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICJQcmltYXJ5IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICJCYWNrdXAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgR3J1cHBlbmRlc2tyaXB0b3JlbiBpbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIHJlc2VydmllcnRlIEdEVCBCbMO2Y2tlIGJlaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIsIEdydXBwZW5kZXNrcmlwdG9yIGluICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNAorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiICBCbG9jayBiaXRtYXAgaW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIElub2RlIEJpdG1hcCBpbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDIKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIElub2RlLVRhYmVsbGUgaW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAldSBmcmVpZSAlcywgJXUgZnJlaWUgSW5vZGVzLCAldSBWZXJ6ZWljaG5pc3NlJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgdW5nZW51dHp0ZSBJbm9kZXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OAorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBGcmVpZSBCbMO2Y2tlOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNjkKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgRnJlaWUgSW5vZGVzOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAiYmVpbSBBdXNnZWJlbiBkZXIg4oCeQmFkIEJsb2Nr4oCcLUxpc3RlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICJCYWQgQmxvY2tzOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMzMyBtaXNjL3R1bmUyZnMuYzozMDIKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImJlaW0gTGVzZW4gZGVzIEpvdXJuYWwtSW5vZGVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJiZWltIExlc2VuIGRlcyBKb3VybmFsLUlub2RlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgSm91cm5hbC1TdXBlcmJsb2NrcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJKb3VuYWxlaWdlbnNjaGFmdGVuOiAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY4Cittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIkpvdXJuYWxncsO2c3NlOiAgICAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiSm91cm5hbC1Mw6RuZ2U6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsLVNlcXVlbno6ICAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwtU3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIkpvdW5hbC1GZWhsZXJudW1tZXI6ICAgICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwMSBtaXNjL3R1bmUyZnMuYzoyMTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgSm91cm5hbC1TdXBlcmJsb2NrcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIktvbm50ZSBkaWUgbWFnaXNjaGUgTnVtbWVyIGRlcyBKb3VybmFsLVN1cGVyYmxvY2tzIG5pY2h0IGZpbmRlbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiSm91cm5hbCBCbG9ja2dyw7bDn2U6ICAgICAgICV1XG4iCisiSm91cm5hbCBMw6RuZ2U6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIFN0YXJ0YmxvY2s6ICAgICAgICV1XG4iCisiSm91cm5hbCBTZXF1ZW56OiAgICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIFN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBBbnphaGwgTnV0emVyOiAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiSm91bmFsbnV0emVyOiAgICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjUgbWlzYy90dW5lMmZzLmM6MTEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiU3BlaWNoZXIgenVtIFBhcnNlbiBkZXIgT3B0aW9uZW4ga29ubnRlIG5pY2h0IHJlc2VydmllcnQgd2VyZGVuIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFN1cGVyYmxvY2stUGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgQmxvY2tncsO2c3Nlbi1QYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKyJcbiIKKyJGYWxzY2hlIGVyd2VpdGVydGUgT3B0aW9uZW4gYW5nZWdlYmVuOiAlc1xuIgorIlxuIgorIkVyd2VpdGVydGUgT3B0aW9uZW4gd2VyZGVuIGR1cmNoIEtvbW1hdGFzIGdldHJlbm50LiBNYW5jaGUgZXJ3YXJ0ZW4gZWluXG4iCisiXHRBcmd1bWVudCwgd2VsY2hlcyBtaXQgR2xlaWNoaGVpdHN6ZWljaGVuICjigJ494oCcKSB6dWdld2llc2VuIHdpcmQuXG4iCisiXG4iCisiR8O8bHRpZ2UgZXJ3ZWl0ZXJ0ZSBPcHRpb25lbiBzaW5kOlxuIgorIlx0c3VwZXJibG9jaz08TnVtbWVyIGRlcyBTcHVwZXJibG9ja3M+XG4iCisiXHRibG9ja3NpemU9PEJsb2NrZ3LDtnNzZT5cbiIKKyJcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1NCBtaXNjL21rZTJmcy5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdEJlbnV0emUgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU5MCBtaXNjL2UyaW1hZ2UuYzoxMzA5IG1pc2MvdHVuZTJmcy5jOjE5MTQKKyM6IHJlc2l6ZS9tYWluLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJLYW5uIGtlaW5lbiBnw7xsdGlnZW4gRGF0ZWlzeXN0ZW0tU3VwZXJibG9jayBmaW5kZW4uXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBGZWhsZXIgYmVpbSBMZXNlbiB2b24gQml0bWFwczogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcnNJUV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiQXVmcnVmOiAlcyBbLXJzSU9dIEdlcsOkdGVkYXRlaSBBYmJpbGQtRGF0ZWlcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICJGZWhsZXI6IEdyw7bDn2UgZGVzIEhlYWRlcnMgw7xiZXJzdGVpZ3Qgd3J0X3NpemVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJIZWFkZXItUHVmZmVyIGtvbm50ZSBuaWNodCB6dWdld2llc2VuIHdlcmRlblxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzEKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgImJlaW0gU2NocmVpYmVuIGRlcyBTdXBlcmJsb2NrcyIKKworIzogbWlzYy9lMmltYWdlLmM6MTc5Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVyIElub2RlLVRhYmVsbGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJiZWltIFNjaHJlaWJlbiBkZXIgQmxvY2stQml0bWFwIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVyIElub2RlLUJpdG1hcCIKKworIzogbWlzYy9lMmltYWdlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgImJlaW0gVmVyc3VjaCwgZGFzIFFjb3cyLUltYWdlICglcykgaW4gZWluIHJvaGVzIEltYWdlICglcykgenUga29udmVydGllcmVuIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBLYW5uICVzIG5pY2h0IMO2ZmZuZW4uXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogTGVzZWZlaGxlciBpbSBTdXBlcmJsb2NrXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogS2VpbiBleHQyIERhdGVpc3lzdGVtXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIldhcm51bmc6IE5hbWUgenUgbGFuZywga8O8cnplIGlobi5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IEZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXMgU3VwZXJibG9ja3NcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJBdWZydWY6IGUybGFiZWwgR2Vyw6R0IFtuZXVlcl9OYW1lXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIkF1ZnJ1ZjogJXMgPFRyYW5zYWt0aW9uc2RhdGVpPiA8RGF0ZWlzeXN0ZW0+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiRGllIERhdGVpc3lzdGVtZGF0ZW4ga29ubnRlbiBuaWNodCBnZWxlc2VuYiB3ZXJkZW4gXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgInRkYl9mZXRjaCB2b24gJXMgaXN0IG1pc3NsdW5nZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiRGllIFplaXQgZGVzIGxldHp0ZW4gRWluaMOkbmdlbnMgZGVzIERhdGVpc3lzdGVtcyB3YXIgbmljaHQgJXVcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiRGllIFVVSUQgZGVzIERhdGVpc3lzdGVtcyBzdGltbXRlIG5pY2h0IMO8YmVyZWluIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAidGRiX29wZW4gdm9uICVzIGlzdCBtaXNzbHVuZ2VuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5xiZXJwcsO8ZmVuLCBvYiAlcyBlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiZTJ1bmRvIHNvbGx0ZSBudXIgYXVmIG5pY2h0LWVpbmdlaMOkbmd0ZW4gRGF0ZWlzeXN0ZW1lbiBsYXVmZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiJXMga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJadXLDvGNrZ2VzcGllbHRlIFRyYW5zYWt0aW9uIGRlciBHcsO2w59lICV6ZCBhbiBQb3NpdGlvbiAlbGx1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJHZXNjaGVpdGVydGVzIFNjaHJlaWJlbiB2b24gJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIldBUk5VTkc6IEtvbm50ZSAlcyBuaWNodCDDtmZmbmVuOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIldBUk5VTkc6IGZhbHNjaGVzIEZvcm1hdCBpbiBaZWlsZSAlZCB2b24gJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJXQVJOVU5HOiBJaHJlIC9ldGMvZnN0YWIgZW50aMOkbHQga2VpbmUgQW5nYWJlIGRhcsO8YmVyLCB3YW5uXG4iCisiXHRkYXMgRGF0ZWlzeXN0ZW0gZ2VwcsO8ZnQgd2VyZGVuIHNvbGwuICBJY2ggd2VyZGUgZGllc2VzXG4iCisiXHRpZ25vcmllcmVuLCBhYmVyIFNpZSBzb2xsdGVuIGlocmUgL2V0Yy9mc3RhYiBzbyBzY2huZWxsXG4iCisiXHR3aWUgbcO2Z2xpY2gga29ycmlnaWVyZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBuaWNodCBnZWZ1bmRlblxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDoga2VpbiBLaW5kcHJvemVzcyBtZWhyPyE/XG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJXYXJudW5nLi4uICVzIGbDvHIgR2Vyw6R0ICVzIHd1cmRlIG1pdCBTaWduYWwgJWQgYmVlbmRldC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBTdGF0dXMgaXN0ICV4LCBzb2xsdGUgbmllIHZvcmtvbW1lbi5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJCZWVuZGV0IG1pdCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBGZWhsZXIgJWQgYmVpIEF1c2bDvGhydW5nIHZvbiBmc2NrLiVzIGbDvHIgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJCZWkgLXQgbcO8c3NlbiBlbnR3ZWRlciBhbGxlbiBvZGVyIGtlaW5lbSBEYXRlaXN5c3RlbSBlaW4g4oCebm/igJwgYnp3LiDigJ4h4oCcXG4iCisidm9yYW5nZXN0ZWxsdCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJLYW5uIGtlaW5lbiBTcGVpY2hlciBmw7xyIERhdGVpc3lzdGVtdHlwZW4gcmVzZXJ2aWVyZW4uXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzIG51bWJlclxuIgorbXNnc3RyICIiCisiJXM6IMO8YmVyc3ByaW5nZSBkaWUgdW5nw7xsdGlnZSBaZWlsZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IG1pdFxuIgorIiBEdXJjaGdhbmdzbnVtbWVyIGbDvHIgZnNjaywgZGllIG5pY2h0IE51bGwgaXN0XG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGthbm4gJXMgbmljaHQgw7xiZXJwcsO8ZmVuOiBmc2NrLiVzIG5pY2h0IGdlZnVuZGVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIkFsbGUgRGF0ZWlzeXN0ZW1lIHdlcmRlbiDDvGJlcnByw7xmdC5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS13YXJ0ZW4tLSAoRHVyY2hnYW5nICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIkF1ZnJ1ZjogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IERhdGVzeXN0ZW10eXBdIFtGUy1PcHRpb25lbl0gW0RhdGVpc3lzdGVtLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiB6dSB2aWVsZSBHZXLDpHRlXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiB6dSB2aWVsZSBBcmd1bWVudGVcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiQXVmcnVmOiAlcyBbLVJWYWRsdl0gW0RhdGVpZW4uLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiQmVpbSBMZXNlbiBkZXIgRmxhZ3Mgdm9uICVzIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiQmVpbSBMZXNlbiBkZXIgVmVyc2lvbiB2b24gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtY291bnRdXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstY3wtbCBEYXRlaW5hbWVdIFstYiBCbG9ja2dyw7bDn2VdIFstQyBDbHVzdGVyZ3LDtsOfZV1cbiIKKyJcdFstaSBCeXRlcy1wcm8tSW5vZGVdIFstSSBJbm9kZWdyw7Zzc2VdIFstSiBKb3VybmFsLU9wdGlvbmVuXVxuIgorIlx0Wy1HIEdyw7bDn2VfZGVyX01ldGFncnVwcGVdIFstTiBBbnphaGxfZGVyX0lub2Rlc11cbiIKKyJcdFstbSBSZXNlcnZpZXJ0ZS1CbMO2Y2tlLVByb3plbnRdIFstbyBFcnpldWdlci1PU11cbiIKKyJcdFstZyBCbMO2Y2tlLXByby1HcnVwcGVdIFstTCBWb2x1bWUtTGFiZWxdXG4iCisiXHRbLU0gbGV0enRlcy1laW5nZWjDpG5ndGVzLVZlcnplaWNobmlzXSBbLU8gRWlnZW5zY2hhZnRbLC4uLl1dXG4iCisiXHRbLXIgZnMtUmV2aXNpb25dIFstRSBlcndlaXRlcnRlLU9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBEYXRlaXN5c3RlbXR5cF0gWy1UIFZlcndlbmR1bmdzLVR5cCBdIFstVSBVVUlEXSBbLWpucXZGS1NWXVxuIgorIlx0R2Vyw6R0IFtCbG9jay1BbnphaGxdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiRXMgd2lyZCBhdXNnZWbDvGhydDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ3w6RocmVuZCBkZXMgVmVyc3VjaHMsIOKAniVz4oCcIGF1c3p1ZsO8aHJlbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgImJlaW0gQXVzd2VydGVuIGRlciDigJ5CYWQgQmxvY2vigJwtTGlzdGUgdm9tIFByb2dyYW1tIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiQmxvY2sgJWQgaW0gcHJpbcOkcmVuIFN1cGVyYmxvY2svR3J1cHBlbmRlc2tyaXB0b3JiZXJlaWNoIGRlZmVrdC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIkRpZSBCbMO2Y2tlICV1IGJpcyBlaW5zY2hsaWXDn2xpY2ggJXUgbcO8c3NlbiBpbiBPcmR1bmcgc2VpbiwgdW0gZWluXG4iCisiXHREYXRlaXN5c3RlbSB6dSBlcnN0ZWxsZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxCittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIkFiYnJ1Y2guLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogZGllIFNpY2hlcnVuZyBkZXMgU3VwZXJibG9jayBiencuIEdydXBwZW5kZXNrcmlwdG9ycyBpbiBCbG9jayAldSBlbnRow6RsdFxuIgorIlx0ZGVmZWt0ZSBCbMO2Y2tlLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMwMAorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJiZWltIE1hcmtpZXJlbiB2b24gZGVmZWt0ZW4gQmzDtmNrZW4gYWxzIOKAnmJlbGVndOKAnCIKKworIzogbWlzYy9ta2UyZnMuYzozMTcKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICJJbm9kZS1UYWJlbGxlbiB3ZXJkZW4gZ2VzY2hyaWViZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVkIEJsw7Zja2Uga29ubnRlbiBuaWNodCBpbiBkaWUgSW5vZGVuLVRhYmVsbGVuIGJlZ2lubmVuZCBiZWkgJWxsdSBnZXNjaHJpZWJlbiB3ZXJkZW46ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzUzIG1pc2MvbWtlMmZzLmM6MjE4MSBtaXNjL21rZTJmcy5jOjI0MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiZXJsZWRpZ3QgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNjQKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAiYmVpbSBFcnN0ZWxsZW4gZGVzIFd1cnplbHZlcnplaWNobmlzc2VzIgorCisjOiBtaXNjL21rZTJmcy5jOjM3MQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgUm9vdC1Jbm9kZSIKKworIzogbWlzYy9ta2UyZnMuYzozODUKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJiZWltIFNldHplbiBkZXMgUm9vdC1Jbm9kZS1FaWdlbnTDvG1lcnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAzCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImJlaW0gRXJzdGVsbGVuIHZvbiAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MTAKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJiZWltIFN1Y2hlbiB2b24gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJiZWltIEV4cGFuZGllcmVuIHZvbiAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVzIOKAnkJhZCBCbG9ja+KAnC1Jbm9kZXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIlNwZWljaGVyIHZvbGwgYmVpbSBMw7ZzY2hlbiBkZXIgU2VrdG9yZW4gJWQtJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiV2FybnVuZzoga29ubnRlIEJsb2NrICVzIG5pY2h0IGxlc2VuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIldhcm51bmc6IGtvbm50ZSBTZWt0b3IgJWQ6ICVzIG5pY2h0IGzDtnNjaGVuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA3Cittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiYmVpbSBJbml0aWFsaXNpZXJlbiBkZXMgSm91cm5hbC1TdXBlcmJsb2NrcyIKKworIzogbWlzYy9ta2UyZnMuYzo1MTUKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIsOcYmVyc2NocmVpYmUgSm91cm5hbC1EZXZpY2UgbWl0IE51bGxlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgImJlaW0gw5xiZXJzY2hyZWliZW4gZGVzIEpvdXJuYWwtRGV2aWNlIG1pdCBOdWxsZW4gKEJsb2NrICVsbHUsIE5yLiAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQ2Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImJlaW0gU2NocmVpYmVuIGRlcyBKb3VybmFsLVN1cGVyYmxvY2tzIgorCisjOiBtaXNjL21rZTJmcy5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiV2FybnVuZzogJWxsdSBCbMO2Y2tlIHVuYmVudXR6dC5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJEYXRlaXN5c3RlbS1MYWJlbD0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJPUy1UeXA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQmxvY2tncsO2w59lPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJDbHVzdGVyZ3LDtsOfZT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkZyYWdtZW50Z3LDtsOfZT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIlN0cmlkZT0ldSBCbMO2Y2tlLCBTdHJpcGVicmVpdGU9JXUgQmzDtmNrZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IElub2RlcywgJWxsdSBCbMO2Y2tlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBCbMO2Y2tlICglMi4yZiUlKSByZXNlcnZpZXJ0IGbDvHIgZGVuIFN1cGVydXNlclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIkVyc3RlciBEYXRlbmJsb2NrPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1heGltYWxlIERhdGVpc3lzdGVtLUJsw7Zja2U9JWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBCbG9ja2dydXBwZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgQmxvY2tncnVwcGVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IEJsw7Zja2UgcHJvIEdydXBwZSwgJXUgQ2x1c3RlciBwcm8gR3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgQmzDtmNrZSBwcm8gR3J1cHBlLCAldSBGcmFnbWVudGUgcHJvIEdydXBwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IElub2RlcyBwcm8gR3J1cHBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlN1cGVyYmxvY2stU2ljaGVydW5nc2tvcGllbiBnZXNwZWljaGVydCBpbiBkZW4gQmzDtmNrZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzo2OTAgbWlzYy90dW5lMmZzLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VzIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgXCJzdHJpZGVcIi1QYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgU3RyaXBlYnJlaXRlLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBcInJlc2l6ZVwiLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIkRhcyBNYXhpbXVtIGRlciBWZXJncsO2c3NlcnVuZyBtdXNzIG9iZXJoYWxiIGFscyBkZXIgRGF0ZWlzeXN0ZW0tR3LDtnNzZSBsaWVnZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIk9ubGluZS1HcsO2c3NlbsOkbmRlcnVuZ2VuIHdlcmRlbiBiZWkgUmV2aXNvbiAwIERhdGVpc3lzdGVtZW4gbmljaHRcbiIKKyJcdHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxMQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFF1b3RhdHlwLVBhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZ8O8bHRpZ2UgT3B0aW9uKGVuKSBhbmdlZ2ViZW46ICVzXG4iCisiXG4iCisiRXJ3ZWl0ZXJ0ZSBPcHRpb25lbiB3ZXJkZW4gZHVyY2ggS29tbWF0YSBnZXRyZW5udC4gTWFuY2hlIGVyd2FydGVuIGVpblxuIgorIlx0QXJndW1lbnQsIHdlbGNoZXMgbWl0IEdsZWljaGhlaXRzemVpY2hlbiAo4oCePeKAnCkgenVnZXdpZXNlbiB3aXJkLlxuIgorIlxuIgorIlx0ZXJoYWx0ZW4gd2VsY2hlcyBtaXQgR2xlaWNoaGVpdHN6ZWljaGVuICjigJ494oCcKSB6dWdld2llc2VuIHdpcmQuXG4iCisiXG4iCisiZ8O8bHRpZ2UgZXJ3ZWl0ZXJ0ZSBPcHRpb25lbiBzaW5kOlxuIgorIlx0c3RyaWRlPTxSQUlEIFNlZ21lbnRncsO2c3NlIGluIEJsw7Zja2VuPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIFN0cmlkZSAqIERhdGVucGxhdHRlbiBpbiBCbMO2Y2tlbj5cbiIKKyJcdHJlc2l6ZT08T2JlcmdyZW56ZSBmw7xyIEdyw7Zzc2Vuw6RuZGVydW5nIGluIEJsw7Zja2VuPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCBmw7xyIEFiLSwgMSBmw7xyIEVpbnNjaGFsdGVuPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgZsO8ciBBYi0sIDEgZsO6ciBFaW5zY2hhbHRlbj5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT0RFUiBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJXYXJudW5nOiBSQUlEIFN0cmlwZS1CcmVpdGUgJXUgaXN0IGtlaW4gZ2FuenphaGxpZ2VzIFZpZWxmYWNoZXMgdm9uXG4iCisiXHRTdHJpZGUgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4IEZlaGxlciBpbiBkZXIgS29uZmlndXJhdGlvbnNkYXRlaSB2b24gbWtlZnMgKCVzLCBaZWlsZSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODk0IG1pc2MvdHVuZTJmcy5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBEYXRlaXN5c3RlbS1PcHRpb24gZ2VzZXR6dDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MDYgbWlzYy90dW5lMmZzLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBFaW5ow6RuZ2UtT3B0aW9uIGdlc2V0enQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiSWhyZSBta2UyZnMuY29uZiBEYXRlaSBlbmjDpGx0IGtlaW5lIERlZmluaXRpaW9uIGRlcyAlcyBEYXRlaXN5c3RlbXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaWUgbcO8c3NlbiB3YWhyc2NoZWlubGljaCBlaW5lIGFrdHVhbGlzaWVydGUgbWtlMmZzLmNvbmYgRGF0ZWkgaW5zdGFsbGllcmVuLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiQnJlY2hlIGFiLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldhcm51bmc6IERlciBmc190eXBlICVzIGlzdCBpbiBta2UyZnMuY29uZiBuaWNodCBkZWZpbmllcnRcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIkthbm4ga2VpbmVuIFNwZWljaGVyIGbDvHIgZGVuIG5ldWVuIFBBVEggcmVzZXJ2aWVyZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGluaXQgcHJvZmlsZSBzdWNjZXNzZnVsbHkgKGVycm9yOiAlbGQpLlxuIgorbXNnc3RyICJEYXMgUHJvZmlsIGtvbm50ZSBuaWNodCBlcmZvbGdyZWljaCBpbml0aWllcnQgd2VyZGVuIChGZWhsZXI6ICVsZCkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAiYmFkIGJsb2NrIEdyw7bDn2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiV2FybnVuZzogQmxvY2tncsO2w59lICVkIGlzdCBhdWYgZGVuIG1laXN0ZW4gU3lzdGVtZW4gdW5icmF1Y2hiYXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM1MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgQ2x1c3Rlcmdyw7bDn2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzY1Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgInVuenVsw6Rzc2lnZSBBbmdhYmUgZsO8ciBCbMO2Y2tlIHBybyBHcnVwcGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3MAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJBbnphaGwgZGVyIEJsw7Zja2UgcHJvIEdydXBwZSBtdXNzIGVpbiBWaWVsZmFjaGVzIHZvbiA4IHNlaW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3OAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIklsbGVnYWxlIFphaGwgZsO8ciBmbGV4X2JnIEdyw7bDn2UiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM4NAorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAiZmxleF9iZyBHcsO2w59lIG11c3MgZWluZSBad2VpZXJwb3Rlbnogc2VpbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJVbnp1bMOkc3NpZ2VzIElub2RlLVZlcmjDpGx0bmlzICVzIChNaW4gJWQvTWF4ICVkIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FIG5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIldhcm51bmc6IGRpZSBPcHRpb24gLUsgaXN0IHZlcmFsdGV0IHVuZCBzb2xsdGUgbmljaHQgbWVociB2ZXJ3ZW5kZXQgd2VyZGVuLiBWZXJ3ZW5kZW4gU2llIGJpdHRlIHN0YXR0ZGVzc2VuIGRpZSBlcndlaXRlcnRlIE9wdGlvbiDigJ4tRSBub2Rpc2NhcmTigJxcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE4Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIlVuenVsw6Rzc2lnZSBcIlJlc2VydmllcnRlIEJsw7Zja2VcIi1Qcm96ZW50YW5nYWJlIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgSW50ZXJ2YWxsIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiVW56dWzDpHNzaWdlIElub2RlLUdyw7bDn2UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIEludGVydmFsbCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0OTUKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtdCBkYXJmIG51ciBlaW1hbCBhbmdlZ2ViZW4gd2VyZGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MDMKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtVCBkYXJmIG51ciBlaW1hbCBhbmdlZ2ViZW4gd2VyZGVuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTMgbWlzYy9ta2UyZnMuYzoyNTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgImJlaW0gVmVyc3VjaCwgZGFzIEpvdXJuYWwtRGV2aWNlICVzIHp1IMO2ZmZuZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJKb3VybmFsLURldmljZSBCbG9ja2dyw7bDn2UgKCVkKSBrbGVpbmVyIGFscyBNaW5pbXVtLUJsb2NrZ3LDtsOfZSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIlZlcndlbmRlIGRpZSBCbG9ja2dyw7Zzc2UgZGVzIEdlcsOkdHM6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICJ1bmfDvGx0aWdlIEJsw7Zja2UgIOKAniVz4oCcIGF1ZiBHZXLDpHQg4oCeJXPigJwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4NgorbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgIkRhdGVpc3lzdGVtIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTkgcmVzaXplL21haW4uYzozNTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiYmVpbSBCZXN0aW1tZW4gZGVyIERhdGVpc3lzdGVtZ3LDtsOfZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjA1Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLb25udGUgZGllIEdlcsOkdGVncsO2w59lIG5pY2h0IGVybWl0dGVsbi4gR2ViZW5cbiIKKyJTaWUgZGllIEdyw7bDn2UgZGVzIERhdGVpc3lzdGVtcyBhblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTIKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIlp1csO8Y2tnZWdlYmVuZSBHZXLDpHRlZ3LDtsOfZSBpc3QgZ2xlaWNoIG51bGwuIEVzIHd1cmRlIGVpbmUgdW5nw7xsdGlnZVxuIgorIlx0UGFydGl0aW9uIGFuZ2VnZWJlbiBvZGVyIGRpZSBQYXJ0aXRpb25zdGFiZWxsZSB3dXJkZSBuYWNoIGVpbmVtXG4iCisiXHRmZGlzay1MYXVmIG5pY2h0IHdpZWRlciBlaW5nZWxlc2VuLCB3ZWlsIGVpbmUgdmVyw6RuZGVydGUgUGFydGl0aW9uXG4iCisiXHRpbiBHZWJyYXVjaCB1bmQgZ2VzcGVycnQgaXN0LiBTaWUga8O2bm50ZW4gZ2V6d3VuZ2VuIHNlaW4sIG5ldSB6dVxuIgorIlx0Ym9vdGVuLCB1bSBkaWUgUGFydGl0aW9uc3RhYmVsbGUgbmV1IGVpbnp1bGVzZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyOQorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJEYXRlaXN5c3RlbSBpc3QgZ3LDtsOfZXIgYWxzIGF1Z2Vuc2NoZWlubGljaCBkYXMgR2Vyw6R0IHNlbGJzdC4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJBbmFseXNlIGRlciBMaXN0ZSB2b24gRGF0ZWlzeXN0ZW1lbiB3YXIgbmljaHQgbcO2Z2xpY2hcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJTEkczogRGllIEdyw7bDn2Ugdm9uIEdlcsOkdCAlMyRzICgweCUyJGxseCkgbMOkc3N0IHNpY2ggYmVpIFZlcndlbmR1bmcgZWluZXJcbiIKKyJcdEJsb2NrZ3LDtsOfZSB2b24gJTQkZCBuaWNodCBtaXQgMzIgQml0cyBkYXJzdGVsbGVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MTkKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJmc190eXBlcyBmw7xyIG1rZTJmcy5jb25mIEzDtnN1bmc6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkRhdGVpc3lzdGVtLUVpZ2Vuc2NoYWZ0ZW4gd2VyZGVuIGbDvHIgRGF0ZWlzeXN0ZW1lIGRlciBSZXZpc2lvbiAwIG5pY2h0XG4iCisiXHR1bnRlcnN0w7x0enRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVmVydGVpbHRlIFN1cGVyYmzDtmNrZSB3ZXJkZW4gZsO8ciBEYXRlaXN5c3RlbWUgZGVyIFJldmlzaW9uIDAgbmljaHRcbiIKKyJcdHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiSm91cm5hbGUgd2VyZGVuIGbDvHIgRGF0ZWlzeXN0ZW1lIGRlciBSZXZpc2lvbiAwIG5pY2h0IHVudGVyc3TDvHR6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAiVW56dWzDpHNzaWdlIFwiUmVzZXJ2aWVydGUgQmzDtmNrZVwiLVByb3plbnRhbmdhYmUgLSAlbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorIkRpZSBFaWdlbnNjaGFmdGVuIHJlc2l6ZV9pbm9kZSB1bmQgbWV0YV9iZyBzaW5kIG5pY2h0IGtvbXBhdGliZWwuXG4iCisiU2llIGvDtm5uZW4gbmljaHQgZ2xlaWNoemVpdGlnIGFrdGl2aWVydCB3ZXJkZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc5MgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgImJlaW0gRXJtaXR0ZWxuIGRlciBIYXJkd2FyZS1TZWt0b3JncsO2w59lIgorCisjOiBtaXNjL21rZTJmcy5jOjE3OTgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJiZWltIEVybWl0dGVsbiBkZXIgcGh5c2lzY2hlbiBTZWt0b3JncsO2w59lIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzEKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiYmVpbSBTZXR6ZW4gZGVyIEJsb2NrZ3LDtsOfZTsgenUga2xlaW4gZsO8ciBkYXMgR2Vyw6R0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICJXYXJudW5nOiBkaWUgdm9yZ2VnZWJlbmUgQmxvY2tncsO2w59lICVkIGlzdCBrbGVpbmVyIGFscyBkaWUgcGh5c2lzY2hlIFNla3Rvcmdyw7bDn2UgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJXYXJudW5nOiBEaWUgR2VvbWV0cmllIGbDvHIgR2Vyw6R0ICVzIGtvbm50ZSBuaWNodCBlcmZyYWd0IHdlcmRlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIkRpZSBBdXNyaWNodHVuZyB2b24gJXMgaXN0IHVtICVsdSBCeXRlcyB2ZXJzY2hvYmVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisiRGFzIGvDtm5udGUgenUgc2VociBzY2hsZWNodGVyIExlaXN0dW5nIGbDvGhyZW4uIEVpbmUgKE5ldS0pUGFydGlvbmllcnVuZ1xuIgorIiB3aXJkIGVtcGZvaGxlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQtQnl0ZSBCbMO2Y2tlIHp1IGdyb8OfIGbDvHIgZGFzIFN5c3RlbSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIldhcm51bmc6ICVkLWJ5dGUgQmzDtmNrZSBzaW5kIHp1IGdyb8OfIGbDvHIgZGFzIFN5c3RlbSAobWF4ICVkKSwgZmFocmUgZGVubm9jaCBmb3J0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkyNQorbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisiRsO8ciBPbmxpbmUtR3LDtnNzZW7DpG5kZXJ1bmdlbiByZXNlcnZpZXJ0ZSBCbMO2Y2tlIHdlcmRlbiBhdWYgRGF0ZWlzeXN0ZW1lblxuIgorIlx0b2huZSBVbnRlcnN0w7x0enVuZyBmw7xyIEzDvGNrZW5rb21wcmVzc2lvbiAgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzQKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiQW56YWhsIGRlciBCbMO2Y2tlIHBybyBHcnVwcGUgYXVzc2VyaGFsYiBkZXMgZ8O8bHRpZ2VuIEJlcmVpY2hzIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDkKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiRWlnZW5zY2hhZnQgZmxleF9iZyB3dXJkZSBuaWNodCBha3RpdmllcnQsIGRhaGVyIGRhcmYgZmxleF9iZyBHcsO2c3NlIG5pY2h0IGFuZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJ1bmfDvGx0aWdlIElub2RlLUdyw7bDn2UgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJ6dSB2aWVsZSBJbm9kZXMgKCVsbHUpLCBJbm9kZS1WZXJow6RsdG5pcyBlcmjDtmhlbj8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgInp1IHZpZWxlIElub2RlcyAoJWxsdSksIHNpZSBtw7xzc2VuIHdlbmlnZXIgYWxzIDJeMzIgSW5vZGVzIGFuZ2ViZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisiSW5vZGVncsO2w59lICgldSkgKiBBbnphaGxfSW5vZGVzICgldSkgaXN0IHp1IGdyb3NzIGbDvHIgZWluXG4iCisiXHREYXRlaXN5c3RlbSBtaXQgJWxsdSBCbMO2Y2tlbiwgZ2ViZW4gU2llIGJpdHRlIGVudHdlZGVyIGVpbiBow7ZoZXJlc1xuIgorIlx0SW5vZGV2ZXJow6RsdG5pcyAoLWkpIG9kZXIgZWluZSBuaWVkcmlnZXJlIEFuemFobCBhbiBJbm9kZXMgKC1OKSBhbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiw5xiZXJzY2hyZWliZSBkYXMgYmVzdGVoZW5kZSBEYXRlaXN5c3RlbTsgZGllcyBrYW5uIHLDvGNrZ8OkbmdpZyBnZW1hY2h0IHdlcmRlblxuIgorImR1cmNoIGRlbiBCZWZlaGw6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMzMKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgImJlaW0gRXJzdGVsbGVuIGRlciBVbmRvZGF0ZWlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTU5Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIkJsw7Zja2UgZGVzIEdlcsOkdGVzIHdlcmRlbiB2ZXJ3b3JmZW46ICIKKworIzogbWlzYy9ta2UyZnMuYzoyMTc2Cittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICJuaWNodCBlcmZvbGdyZWljaCAtICIKKworIzogbWlzYy9ta2UyZnMuYzoyMjgzCittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJiZWltIEVyc3RlbGxlbiBkZXMgU3VwZXJibG9ja3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI5MgorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICJWZXJ3ZXJmZW4gd2FyIGVyZm9sZ3JlaWNoIHVuZCB3aXJkIE51bGxlbiB6dXLDvGNrbGllZmVybiAtIGRhcyBMw7ZzY2hlbiBkZXIgSW5vZGUtVGFiZWxsZSB3aXJkIMO8YmVyc3BydW5nZW4gXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgInVuYmVrYW5udGVzIE9TIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJQbGF0eiBmw7xyIEdydXBwZW50YWJlbGxlbiB3aXJkIGFuZ2Vmb3JkZXJ0OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzMQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAiYmVpbSBadW9yZG5lbiB2b24gRGF0ZWlzeXN0ZW10YWJlbGxlbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDQwCittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgY29udmVydGluZyBzdWJjbHVzdGVyIGJpdG1hcCIKK21zZ3N0ciAiIgorIlxuIgorIlx0YmVpbSBLb252ZXJ0aWVyZW4gZGVyIFN1YmNsdXN0ZXItQml0bWFwIgorCisjOiBtaXNjL21rZTJmcy5jOjI0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJiZWltIE51bGxlbiB2b24gQmxvY2sgJWxsdSBhbSBFbmRlIGRlcyBEYXRlaXN5c3RlbXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ5NgorbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgImJlaW0gTGVzZW4gZGVzIEJhZC1CbG9jay1Jbm9kZXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNyBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJKb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkVyc3RlbGxlIEpvdXJuYWwgYXVmIEdlcsOkdCAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0YmVpbSBFcnN0ZWxsZW4gZGVzIEpvdXJuYWxzIGF1ZiBHZXLDpHQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUzMSBtaXNjL21rZTJmcy5jOjI1NjMgbWlzYy90dW5lMmZzLmM6NjY5IG1pc2MvdHVuZTJmcy5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImVybGVkaWd0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICJEaWUgRXJ6ZXVndW5nIGVpbmVzIEpvdXJuYWxzIHdpcmQgaW0gTnVyLVN1cGVyIE1vZHVzIMO8YmVyc3BydW5nZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiRXJzdGVsbGUgSm91cm5hbCAoJXUgQmzDtmNrZSk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTU5Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRiZWltIEVyc3RlbGxlbiBkZXMgSm91cm5hbHMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU3MCBtaXNjL3R1bmUyZnMuYzo0NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKyJcbiIKKyJGZWhsZXIgYmVpbSBBa3RpdmllcmVuIGRlcyBTY2h1dHplcyB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuLiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICJEZXIgU2NodXR6IHZvciBtZWhyZmFjaGVtIEVpbmjDpG5nZW4gd3VyZGUgbWl0IGVpbmVtIEludGVydmFsbCB2b24gJWQgU2VrdW5kZW4gYWt0aXZpZXJ0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiU2NocmVpYmUgU3VwZXJibMO2Y2tlIHVuZCBEYXRlaXN5c3RlbS1BY2NvdW50aW5naW5mb3JtYXRpb25lbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIldhcm51bmc6IFByb2JsZW1lIGJlaW0gU2NocmVpYmVuIGRlciBTdXBlcmJsw7Zja2UuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImVybGVkaWd0XG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJBdWZydWY6IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF1ZnJ1ZjogJXMgR2Vyw6R0Li4uXG4iCisiXG4iCisiR2lidCBJbmZvcm1hdGlvbmVuIMO8YmVyIGRpZSBQYXJ0aXRpb25lbiBqZWRlcyBhbmdlZ2ViZW5lbiBHZXLDpHRlcyBhdXMuXG4iCisiWnVtIEJlaXNwaWVsOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IMO2ZmZuZW46ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIkdlb21ldHJpZSB2b24gJXMga2FubiBuaWNodCBlcm1pdHRlbHQgd2VyZGVuOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIkdyw7Zzc2Ugdm9uICVzIGthbm4gbmljaHQgZ2VsZXNlbiB3ZXJkZW46ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIFN0YXJ0PSU4ZCBHcsO2c3NlPSU4bHUgRW5kZT0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3Cittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkxhc3NlbiBTaWUgYml0dGUgZTJmc2NrIMO8YmVyIGRhcyBEYXRlaXN5c3RlbSBsYXVmZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYyBtYXhfbW91bnRzX2NvdW50XSBbLWUgZXJyb3JzX2JlaGF2aW9yXSBbLWcgZ3JvdXBdXG4iCisiXHRbLWkgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBqb3VybmFsX29wdGlvbnNdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlZF9ibG9ja3NfcGVyY2VudF0gWy1vIFteXW1vdW50X29wdGlvbnNbLC4uLl1dIFstcCBtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisiQXVmcnVmOiAlcyBbLWMgbWF4LUFuemFobC1FaW5ow6RuZ2VuXSBbLWUgRmVobGVyLVZlcmhhbHRlbl0gWy1nIEdydXBwZV1cbiIKKyJcdFstaSBJbnRlcnZhbGxbZHxtfHddXSBbLWpdIFstSiBKb3VybmFsLU9wdGlvbmVuXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2aWVydGVfQmzDtmNrZV9Qcm96ZW50XSBbLW8gW15dRWluaMOkbmdfT3B0aW9uZW5bLC4uLl1dIFstcCBtbXBfdXBkYXRlX2ludGVydmFsbF1cbiIKKyJcdFstciBBbnphaGxfcmVzZXJ2aWVydGVfQmzDtmNrZV0gWy11IEJlbnV0emVyXSBbLUMgQW56YWhsX0VpbmjDpG5nZW5dXG4iCisiXHRbLUwgVm9sdW1lX0xhYmVsXSBbLU0gbGV0enRlc19laW5nZWjDpG5ndGVzX1ZlcnplaWNobmlzXVxuIgorIlx0Wy1PIFteXUVpZ2Vuc2NoYWZ0WywuLi5dXSBbLUUgZXJ3ZWl0ZXJ0ZS1PcHRpb25bLC4uLl1dXG4iCisiXHRbLVQgbGV0enRlcl9QcsO8ZnplaXRwdW5rdF0gWy1VIFVVSURdIFstSSBuZXVlX0lub2RlZ3LDtnNzZV0gR2Vyw6R0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgImJlaW0gw5ZmZm5lbiBkZXMgZXh0ZXJuZW4gSm91cm5hbHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gSm91cm5hbC1HZXLDpHQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIkpvdXJuYWwtU3VwZXJibG9jayBuaWNodCBnZWZ1bmRlbiFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJVVUlEIGRlcyBEYXRlaXN5c3RlbXMgYXVmIEpvdXJuYWwtR2Vyw6R0IG5pY2h0IGdlZnVuZGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNTcKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRhcyBKb3VybmFsLUdlcsOkdCBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiBFcyB3dXJkZSBOSUNIVCBlbnRmZXJudFxuIgorIlZlcndlbmRlbiBTaWUgZGllIE9wdGlvbiAgLWYsIHVtIGRhcyBmZWhsZW5kZSBKb3VybmFsLUdlcsOkdCB6dSBlbnRmZXJuZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2NQorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJKb3VybmFsIGdlbMO2c2NodFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMDkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgImJlaW0gTGVzZW4gdm9uIEJpdG1hcHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxNworbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImJlaW0gQmVyZWluaWdlbiBkZXMgSm91cm5hbC1Jbm9kZXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyOAorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiYmVpbSBTY2hyZWliZW4gZGVzIEpvdXJuYWwtSW5vZGVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIih1bmQgaGludGVyaGVyIGRhcyBTeXN0ZW0gbmV1IHN0YXJ0ZW4hKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiRGFzIFp1csO8Y2tzZXR6ZW4gdm9uIERhdGVpc3lzdGVtLUVpZ2Vuc2NoYWZ0IOKAniVz4oCcIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJEYXMgU2V0emVuIGRlciBEYXRlaXN5c3RlbS1FaWdlbnNjaGFmdCDigJ4lc+KAnCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDExCittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkRpZSBoYXNfam91bmFsIEVpZ2Vuc2NoYWZ0IGthbm4gbnVyIHp1csO8Y2tnZXNldHp0IHdlcmRlbiwgd2VubiBkYXNcbiIKKyJEYXRlaXN5c3RlbSBuaWNodCBvZGVyIGltIE51ci1MZXNlbi1Nb2R1cyBlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQxOQorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkRhcyBuZWVkc19yZWNvdmVyeSBGbGFnIGlzdCBnZXNldHp0LiBCaXR0ZSBzdGFydGVuIHNpZSBlMmZzY2sgdm9yXG4iCisiZGVyIFp1csO8Y2tzZXR6dW5nIGRlcyBoYXNfam91cm5hbCBGbGFncy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDM4Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkRpZSBFaWdlbnNjaGFmdCBcIlNjaHV0eiB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuXCIga2FubiBudXIgbmljaHRcbiIKKyJ6dXLDvGNrZ2VzZXR6dCB3ZXJkZW4sIHdlbm4gZGFzIERhdGVpc3lzdGVtIG5pY2h0IG9kZXIgbnVyIHp1bSBMZXNlblxuIgorImVpbmdlaMOkbmd0IGlzdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJTY2h1dHogdm9yIG1laHJmYWNoZW0gRWluaMOkbmdlbiB3dXJkZSBha3RpdmllcnQgbWl0IGVpbmVtIEFrdHVhbGlzaWVydW5ncy1cbiIKKyJpbnRlcnZhbGwgdm9uICVkcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKyJEZXIgU2NodXR6IHZvciBtZWhyZmFjaGVtIEVpbmjDpG5nZW4ga2FubiBuaWNodCBkZWFrdGl2aWVydCB3ZXJkZW4sXG4iCisid2VubiBkYXMgRGF0ZWlzeXN0ZW0gbnVyIGxlc2JhciBpc3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3MworbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgQml0bWFwc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIkRpZSBtYWdpc2NoZSBaYWhsIGltIE1NUC1CbG9jayBwYXNzdCBuaWNodC4gRXJ3YXJ0ZXQ6ICV4LCB0YXRzw6RjaGxpY2g6ICV4XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4NworbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAiYmVpbSBMZXNlbiBkZXMgTU1QLUJsb2NrZXMuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MTkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKyJEYXMgWnVyw7xja3NldHplbiBkZXIgS2VubnVuZyBmbGV4X2JnIHfDvHJkZSBkYXMgRGF0ZWlzeXN0ZW0gaW5rb25zaXN0ZW50XG4iCisibWFjaGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkRpZSBodWdlX2ZpbGUgRWlnZW5zY2hhZnQga2FubiBudXIgenVyw7xja2dlc2V0enQgd2VyZGVuLCB3ZW5uIGRhc1xuIgorIkRhdGVpc3lzdGVtIG5pY2h0IG9kZXIgaW0gTnVyLUxlc2VuLU1vZHVzIGVpbmdlaMOkbmd0IGlzdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTkwCittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIldhcm51bmc6IGRpZSBPcHRpb24g4oCeXnF1b3Rh4oCcIGhhdCBWb3JyYW5nIHZvciDigJ4tUeKAnCBPcHRpb25lbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjM1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gaGF0IHNjaG9uIGVpbiBKb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRiZWltIMOWZmZuZW4gZGVzIEpvdXJuYWxzIGF1ZiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiRXJzdGVsbGUgSm91cm5hbCBhdWYgR2Vyw6R0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJiZWltIEhpbnp1ZsO8Z2VuIGRlcyBEYXRlaXN5c3RlbXMgenVtIEpvdXJuYWwgYXVmICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NzEKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkVyc3RlbGxlIEpvdXJuYWwtSW5vZGU6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjgwCittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGJlaW0gRXJzdGVsbGVuIGRlciBKb3VybmFsZGF0ZWkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc1NAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJTcGVpY2hlciB6dW0gUGFyc2VuIGRlciBRdW90YS1PcHRpb25lbiBrb25udGUgbmljaHQgcmVzZXJ2aWVydCB3ZXJkZW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc3NgorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcyB3dXJkZW4gdW5nw7xsdGlnZSBRdW90YS1PcHRpb25lbiBhbmdlZ2ViZW4uXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorIkRpZSBmb2xnZW5kZW4gUXVvdGFvcHRpb25lbiBzaW5kIHZlcmbDvGdiYXIgKGR1cmNoIEtvbW1hIGdldHJlbm50IGFuZ2ViZW4pOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS29ubnRlIERhdHVtL1plaXQgbmljaHQgcGFyc2VuOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODYxIG1pc2MvdHVuZTJmcy5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbW91bnRzIGNvdW50IC0gJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE1vdW50cy1aw6RobGVyIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgRmVobGVyLVZlcmhhbHRlbiAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgInVuZ8O8bHRpZ2UocikgR0lEIG9kZXIgR3J1cHBlbm5hbWUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBJbnRlcnZhbGwgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBSZXNlcnZpZXJ0ZS1CbMO2Y2tlLVZlcmjDpGx0bmlzIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk5NAorbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItbyBkYXJmIG51ciBlaW1hbCBhbmdlZ2ViZW4gd2VyZGVuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDAzCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIGRhcmYgbnVyIGVpbWFsIGFuZ2VnZWJlbiB3ZXJkZW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlIEFuemFobCB2b24gcmVzZXJ2aWVydGVuIEJsw7Zja2VuIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZShyKSBVSUQvQmVudXR6ZXJuYW1lIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiVW56dWzDpHNzaWdlIElub2RlZ3LDtsOfZSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIklub2RlZ3LDtnNzZSBtdXNzIGVpbmUgWndlaWVycG90ZW56IHNlaW4tICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIm1tcF91cGRhdGVfaW50ZXJ2YWwgaXN0IHp1IGdyb8OfOiAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJTZXR6ZSBkYXMgSW50ZXJ2YWxsIGbDvHIgZGVuIFNjaHV0eiB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuIGF1ZiAlbHUgU2VrdW5kZVxuIgorbXNnc3RyWzFdICJTZXR6ZSBkYXMgSW50ZXJ2YWxsIGbDvHIgZGVuIFNjaHV0eiB2b3IgbWVocmZhY2hlbSBFaW5ow6RuZ2VuIGF1ZiAlbHUgU2VrdW5kZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBSQUlEIFN0cmlkZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlIFJBSUQgU3RyaXBlLUJyZWl0ZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIyMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJVbmfDvGx0aWdlciBIYXNoYWxnb3JpdGhtdXM6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiRGVyIHN0YW5kYXJkIEhhc2hhbGdvcml0aG11cyB3aXJkIGF1ZiAlcyAoJWQpIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVbmfDvGx0aWdlIE9wdGlvbmVuIHd1cmRlbiBhbmdlZ2ViZW4uXG4iCisiXG4iCisiRXJ3ZWl0ZXJ0ZSBPcHRpb25lbiB3ZXJkZW4gbWl0IEtvbW1hdGFzIGdldHJlbm50IGFuZ2VnZWJlbiB1bmQgZXJ3YXJ0ZW5cbiIKKyJcdGV2ZW50dWVsbCBlaW4gQXJndW1lbnQsIHdlbGNoZXMgbWl0IEdsZWljaGhlaXRzemVpY2hlbiAo4oCePeKAnClcbiIKKyJcdHp1Z2V3aWVzZW53aXJkLlxuIgorIlxuIgorIkfDvGx0aWdlIGVyd2VpdGVydGUgT3B0aW9uZW4gc2luZDpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PEhhc2hhbGdvcml0aG11cz5cbiIKKyJcdG1vdW50X29wdHM9PGVyd2VpdGVydGUgU3RhbmRhcmQtRWluaMOkbmdvcHRpb25lbj5cbiIKKyJcdHN0cmlkZT08UkFJRCBTZWdtZW50Z3LDtnNzZSBwcm8gUExhdHRlIGluIEJsw7Zja2VuPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIFN0cmlkZSpEYXRlbnBsYXR0ZW4gaW4gQmzDtmNrZW4+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzE0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIkRpZSBJbm9kZS1CaXRtYXAga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MTkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiRGllIEJsb2NrLUJpdG1hcHMga29ubnRlbiBuaWNodCBnZWxlc2VuIHdlcmRlblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzM2IHJlc2l6ZS9yZXNpemUyZnMuYzo4MDIKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgInp1IHZlcnNjaGllYmVuZGUgQmzDtmNrZSIKKworIzogbWlzYy90dW5lMmZzLmM6MTczOQorbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiQmVpbSBWZXJncsO2c3Nlcm4gZGVyIElub2RlcyBrb25udGUga2VpbmUgQmxvY2stQml0bWFwIGFuZ2VsZWd0IHdlcmRlblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICJEZXIgUGxhdHogcmVpY2h0IG5pY2h0IGF1cyB1bSBkaWUgSW5vZGVncsO2c3NlIHp1IGVyaMO2aGVuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzUwCittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJCZWltIFZlcmdyw7Zzc2VybiBkZXIgSW5vZGVzIGtvbm50ZW4gZGllIEJsw7Zja2UgbmljaHQgdmVyc2Nob2JlbiB3ZXJkZW4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3ODIKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIFZlcsOkbmRlcm4gZGVyIElub2RlZ3LDtnNzZS5cbiIKKyJTdGFydGVuIFNpZSBlMnVuZG8gdW0gZGllIMOEbmRlcnVuZ2VuIGFtIERhdGVpc3lzdGVtIHLDvGNrZ8OkbmdpZyB6dSBtYWNoZW4uIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODA5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiS2FubiBrZWluZW4gU3BlaWNoZXIgZsO8ciBkZW4gdGRiLURhdGVpbmFtZW4gcmVzZXJ2aWVyZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIHp1IGzDtnNjaGVuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiVW0gZGllIEFrdGlvbmVuIHZvbiB0dW5lMmZzIHLDvGNrZ8OkbmdpZyB6dSBtYWNoZW4sIHN0YXJ0ZW4gU2llIGJpdHRlIGRlblxuIgorIkJlZmVobFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJEaWUgS2VubnVuZyBkZXMgTU1QIEJsb2NrZXMgaXN0IHVuZ8O8bHRpZy4gVmVyc3VjaGVuIFNpZSBpaG4gZHVyY2ggZm9sZ2VuZGVzXG4iCisiS29tbWFuZG8genUgcmVwYXJpZXJlbjpcbiIKKyLigJ5lMmZzY2sgLWYgJXPigJxcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICJEaWUgSW5vZGVncsO2c3NlIGlzdCBiZXJlaXRzICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNocmlua2luZyB0aGUgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIkRhcyBTY2hydW1wZmVuIGRlciBJbm9kZWdyw7Zzc2Ugd2lyZCBuaWNodCB1bnRlcnN0w7x0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk4MQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiRGllIG1heGltYWxlIEFuemFobCB2b24gRWluaMOkbmd1bmdlbiB3aXJkIGF1ZiAlZCBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkRpZSBkZXJ6ZWl0aWdlIEFuemFobCB2b24gRWluaMOkbmd1bmdlbiB3aXJkIGF1ZiAlZCBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJEYXMgRmVobGVyLVZlcmhhbHRlbiB3aXJkIGF1ZiAlZCBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJEaWUgR0lEIGbDvHIgcmVzZXJ2aWVydGUgQmzDtmNrZSB3aXJkIGF1ZiAlbHUgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkRhcyBJbnRlcnZhbGwgendpc2NoZW4gZGVuIFByw7xmdW5nZW4gaXN0IHp1IGdyb8OfICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiRGFzIEludGVydmFsbCB6d2lzY2hlbiB6d2VpIENoZWNrcyB3aXJkIGF1ZiAlbHUgU2VrdW5kZW4gZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIkRlciBQcm96ZW50c2F0eiByZXNlcnZpZXJ0ZXIgQsO2Y2tlIHdpcmQgYXVmICVnJSUgKCVsbHUgQmzDtmNrZSkgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAiRGllIEFuemFobCBkZXIgcmVzZXJ2aWVydGVuIEJsw7Zja2UgaXN0IHp1IGdyb3NzICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIkRpZSBBbnphaGwgZGVyIHJlc2VydmllcnRlbiBCbMO2Y2tlIHdpcmQgYXVmICVsbHUgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDM1Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhcyBEYXRlaXN5c3RlbSBoYXQgYmVyZWl0cyB2ZXJ0ZWlsdGUgU3VwZXJibMO2Y2tlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiS2VubnplaWNoZW4gZsO8ciB2ZXJ0ZWlsdGVuIFN1cGVyYmxvY2sgZ2VzZXR6dC4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNDcKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhcyBadXLDvGNrc2V0emVuIGRlcyBLZW5uemVpY2hlbnMgZsO8ciDigJ52ZXJ0ZWlsdGVyIFN1cGVyYmxvY2vigJwgd2lyZCBuaWNodFxuIgorIlx0dW50ZXJzdMO8dHp0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJEaWUgWmVpdCBkZXMgbGV0enRlbiBEYXRlaXN5c3RlbWNoZWNrcyB3aXJkIGF1ZiAlcyBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJEaWUgVUlEIGbDvHIgcmVzZXJ2aWVydGUgQmzDtmNrZSB3aXJkIGF1ZiAlbHUgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDkzCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaSBkZXIgVmVyd2VuZHVuZyB2b24gY2xlYXJfbW1wLiBFcyBtdXNzIHp1c2FtbWVuIG1pdCAtZlxuIgorInZlcndlbmRldCB3ZXJkZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjExMQorbXNnaWQgIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJRdW90YXMga8O2bm5lbiBudXIgYWt0aXZpZXJ0IGJ6dy4gZGVha3RpdmllcnQgd2VyZGVuLCB3ZW5uIGRhcyBEYXRlaXN5c3RlbSBuaWNodFxuIgorImVpbmdlaMOkbmd0IGlzdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQ0Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJVbmfDvGx0aWdlcyBVVUlEIEZvcm1hdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU3Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIkRpZSBHcsO2c3NlIGRlciBJbm9kZXMga2FubiBudXIgZ2XDpG5kZXJ0IHdlcmRlbiwgd2VubiBkYXMgRGF0ZWlzeXN0ZW1cbiIKKyJuaWNodCBlaW5nZWjDpG5ndCBpc3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjUKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIkRhcyDDhG5kZXJuIGRlciBJbm9kZWdyw7Zzc2Ugd2lyZCBhdWYgRGF0ZWlzeXN0ZW1lbiBtaXQgYWt0aXZpZXJ0ZXIgZmxleF9iZ1xuIgorIkVpZ2Vuc2NoYWZ0IG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIkRpZSBJbm9kZS1HcsO2w59lIHdpcmQgYXVmICVsdSBnZXNldHp0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIkRpZSBJbm9kZS1HcsO2w59lIGtvbm50ZSBuaWNodCBnZcOkbmRlcnQgd2VyZGViXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICJEaWUgU3RyaWRlLUdyw7bDn2Ugd2lyZCBhdWYgJWQgZ2VzZXR6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIkRpZSBTdHJpcGUtQnJlaXRlIHdpcmQgYXVmICVkIGdlc2V0enRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIkFscyBlcndlaXRlcnRlIEVpbmjDpG5nLU9wdGlvbmVuIHdlcmRlbiBpbiBadWt1bmZ0IOKAniVz4oCcIHZlcndlbmRldFxuIgorCisjOiBtaXNjL3V0aWwuYzo3NAorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIlRyb3R6ZGVtIGZvcnRzZXR6ZW4/IChqLG4pICIKKworIzogbWlzYy91dGlsLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCittc2dzdHIgIlN0YXR1cyBmw7xyICVzIGtvbm50ZSBuaWNodCBlcm1pdHRlbHQgd2VyZGVuIC0tLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJEYXMgR2Vyw6R0IGV4aXN0aWVydCBvZmZlbnNpY2h0bGljaCBuaWNodDsgaGFiZW4gU2llIGVzIHJpY2h0aWcgYW5nZWdlYmVuP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGlzdCBrZWluIHNwZXppZWxsZXMgQmxvY2stR2Vyw6R0LlxuIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgaXN0IGRhcyBnYW56ZSBHZXLDpHQsIG5pY2h0IG51ciBlaW5lIFBhcnRpdGlvbiFcbiIKKworIzogbWlzYy91dGlsLmM6MTU0Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIm1rZTJmcyB0cm90emRlbSBlcnp3dW5nZW4uIEhvZmZlbnRsaWNoIGlzdCAvZXRjL210YWIgdW5nw7xsdGlnLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIndlcmRlIGRvcnQga2VpbiAlcyBlcnN0ZWxsZW4hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE2NgorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJta2UyZnMgd2lyZCBzb3dpZXNvIGVyend1bmdlbi5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS29ubnRlIGtlaW5lbiBTcGVpY2hlciB6dXIgQW5hbHlzZSBkZXIgSm91cm5hbC1PcHRpb25lbiBhbmZvcmRlcm4hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhcyBKb3VybmFsZ2Vyw6R0ICVzIGlzdCBuaWNodCBhdWZmaW5kYmFyXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVbmfDvGx0aWdlIEpvdXJuYWwtT3B0aW9uZW4gd3VyZGVuIGFuZ2VnZWJlbi5cbiIKKyJcbiIKKyJKb3VybmFsLU9wdGlvbmVuIHdlcmRlbiBkdXJjaCBLb21tYXRhcyBnZXRyZW5udC4gTWFuY2hlIGVyd2FydGVuIGVpblxuIgorIlx0QXJndW1lbnQsIHdlbGNoZXMgbWl0IEdsZWljaGhlaXRzemVpY2hlbiAo4oCePeKAnCkgenVnZXdpZXNlbiB3aXJkLlxuIgorIlxuIgorIkfDvGx0aWdlIEpvdXJuYWwtT3B0aW9uZW4gc2luZDpcbiIKKyJcdHNpemU9PEpvdXJuYWxncsO2w59lIGluIE1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08Sm91cm5hbC1HZXLDpHQ+XG4iCisiXG4iCisiRGllIEdyw7Zzc2UgZGVzIEpvdXJuYWxzIG11c3Mgendpc2NoZW4gMTAyNCB1bmQgMTAyNDAwMDAgRGF0ZWlzeXN0ZW0tQmzDtmNrZW5cbiIKKyJcdGxpZWdlbi5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6MjU4Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRhcyBEYXRlaXN5c3RlbSBpc3QgenUga2xlaW4gZsO8ciBlaW4gSm91cm5hbFxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEaWUgYW5nZWdlYmVuZSBKb3VybmFsZ3LDtsOfZSBiZXRyw6RndCAlZCBCbMO2Y2tlLiBTaWUgbXVzcyBhYmVyIHp3aXNjaGVuXG4iCisiMTAyNCB1bmQgMTAyNDAwMDAgRGF0ZWlzeXN0ZW0tQmzDtmNrZW4gbGllZ2VuLiBBYmJydWNoISBcbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGFzIEpvdXJuYWwgaXN0IHp1IGdyb8OfIGbDvHIgZGllc2VzIERhdGVpc3lzdGVtLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkRhcyBEYXRlaXN5c3RlbSB3aXJkIGF1dG9tYXRpc2NoIG5hY2ggamV3ZWlscyAlZCBFaW5ow6RuZy1Wb3Jnw6RuZ2VuIGJ6dy5cbiIKKyJhbGxlICVnIFRhZ2Ugw7xiZXJwcsO8ZnQsIGplIG5hY2hkZW0sIHdhcyB6dWVyc3QgZWludHJpdHQuIERpZXMga2FubiBkdXJjaFxuIgorInR1bmUyZnMgLWMgb2RlciAtaSBnZcOkbmRlcnQgd2VyZGVuLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiQXVmcnVmICVzIFstZF0gWy1wIFBpZC1EYXRlaV0gWy1zIFNvY2tldHBmYWRdIFstVCBUaW1lb3V0XVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICVzIFstcnx0XSBbLW4gWmFobF0gWy1zIFNvY2tldHBmYWRdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTQKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgQXJndW1lbnRlIgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAidmVyYmluZGVuIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgInNjaHJlaWJlbiIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIkFuemhsIExlc2V6dWdyaWZmZSIKKworIzogbWlzYy91dWlkZC5jOjIwNQorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIlVuZ8O8bHRpZ2UgQW50d29ydC1Mw6RuZ2UiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiRGVyIFV1aWQtRGFlbW9uIGzDpHVmdCBiZXJlaXRzIG1pdCBQSUQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiRGVyIFVuaXggU3RyZWFtc29ja2V0IGtvbm50ZSBuaWNodCBlcnpldWd0IHdlcmRlbjogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiVmVyYmluZGVuIG1pdCBkZW0gVW5peC1Tb2NrZXQgJXMgd2FyIG5pY2h0IG3DtmdsaWNoOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiRGFzIExhdXNjaGVuIGFtIFVuaXgtU29ja2V0ICVzIHdhciBuaWNodCBtw7ZnbGljaDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiB2b20gS2xpZW50ZW4sIEzDpG5nZSA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJPcGVyYXRpb24gJWQsIGVpbmdlaGVuZGUgWmFobCA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiRXJ6ZXVndGUgWmVpdC1VVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiRXJ6ZXVndGUgWnVmYWxscy1VVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIlplaXQtVVVJRCAlcyB1bmQgJWQgd2VpdGVyZSBVVUlEIHd1cmRlbiBlcnpldWd0XG4iCittc2dzdHJbMV0gIlplaXQtVVVJRCAlcyB1bmQgJWQgd2VpdGVyZSBVVUlEcyB3dXJkZW4gZXJ6ZXVndFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIkVyemV1Z3RlICVkIFVVSURzOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIlVuZ8O8bHRpZ2UgT3BlcmF0aW9uICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgWmFobDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzMyBtaXNjL3V1aWRkLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEF1ZnJ1ZiBkZXMgVVVJRC1Ew6Rtb25zICglcyk6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIlcyB1bmQgZWluZSB3ZWl0ZXJlIFVVSURcbiIKK21zZ3N0clsxXSAiJXMgdW5kIHdlaXRlcmUgJWQgVVVJRHNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiTGlzdGUgZGVyIFVVSURzOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIEzDpG5nZSBkZXIgQW50d29ydCB2b24gU2VydmVyICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiRGVyIHV1aWRkIG1pdCBwaWQgJWQga29ubnRlIG5pY2h0IGJlZW5kZXQgd2VyZGVuOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJEZXIgdXVpZGQgbWl0IHBpZCAlZCB3dXJkZSBnZXdhbHRzYW0gYmVlbmRldFxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIkF1ZnJ1ZjogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIEV4dGVudCBkdW1wOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHRaYWhsPSVsbHUsIEdyw7bDn2U9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRpZXJ0PSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdWZydWY6ICVzIFstZCBEZWJ1Z19PcHRpb25lbl0gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIEdlcsOkdCBbbmV1ZV9HcsO2w59lXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY1Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVmVyZ3LDtsOfZXJlIGRpZSBJbm9kZS1UYWJlbGxlIgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIlZlcnRlaWxlIGRpZSBCbMO2Y2tlIG5ldSIKKworIzogcmVzaXplL21haW4uYzo3MQorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJQcsO8ZmUgZGllIElub2RlLVRhYmVsbGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzQKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJBa3R1YWxpc2llcmUgZGllIElub2RlLVJlZmVyZW56ZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NzcKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlZlcnNjaGllYmUgZGllIElub2RlLVRhYmVsbGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODAKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlVuYmVrYW5udGVyIER1cmNoZ2FuZz8hPyIKKworIzogcmVzaXplL21haW4uYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIlN0YXJ0IHZvbiBEdXJjaGdhbmcgJWQgKG1heCA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAiYmVpbSDDlmZmbmVuIHZvbiAlcyIKKworIyBjLWZvcm1hdAorIzogcmVzaXplL21haW4uYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAiYmVpbSBFcm1pdHRlbG4gZGVyIFN0YXR1c2luZm9ybWF0aW9uIGbDvHIgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzI1IHJlc2l6ZS9tYWluLmM6NDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiQml0dGUgenVlcnN0IOKAnmUyZnNjayAtZiAlc+KAnCBsYXVmZW4gbGFzc2VuLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIkdlc2Now6R0enRlIG1pbmltYWxlIEdyw7Zzc2UgZGVzIERhdGVpc3lzdGVtczogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgbmV1ZSBHcsO2w59lOiAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjM4MQorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICJEaWUgbmV1ZSBHcsO2w59lIGthbm4gbmljaHQgbWVociBtaXQgMzIgQml0cyBkYXJnZXN0ZWxsdCB3ZXJkZW5cbiIKKworIzogcmVzaXplL21haW4uYzozODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIkRpZSBuZXVlIEdyw7bDn2UgaXN0IGtsZWluZXIgYWxzIGRhcyBNaW5pbXVtICglbGx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM5NQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBTdHJpZGUtTMOkbmdlIgorCisjOiByZXNpemUvbWFpbi5jOjQxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiRGllIFBhcnRpdGlvbiAob2RlciBkYXMgR2Vyw6R0KSBpc3QgbnVyICVsbHUgKCVkaykgQmzDtmNrZSBncm/Dny5cbiIKKyJTaWUgaGF0dGVuIGFiZXIgJWxsdSBCbMO2Y2tlIHZvcmdlZ2ViZW4uXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiRGFzIERhdGVpc3lzdGVtIGlzdCBzY2hvbiAlbGx1IEJsw7Zja2UgZ3Jvw58uIE5pY2h0cyB6dSB0dW4hXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorbXNnc3RyICIiCisiJXM6IERpZSBLb21iaW5hdGlvbiBkZXIgRWlnZW5zY2hhZnRlbiBmbGV4X2JnIHVuZFxuIgorInQhcmVzaXplX2lub2RlIHdpcmQgdm9uIHJlc2l6ZTJmcyBuaWNodCB1bnRlcmVzdMO8dHp0LlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIkRpZSBHcsO2c3NlIGRlcyBEYXRlaXN5c3RlbXMgYXVmICVzIHdpcmQgYXVmICVsbHUgKCVkaykgQmzDtmNrZSBnZcOkbmRlcnQuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgImJlaW0gVmVyc3VjaCwgZGllIEdyw7bDn2Ugdm9uICVzIHp1IMOkbmRlcm4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiQml0dGUgZsO8aHJlbiBTaWUg4oCeZTJmc2NrIC1meSAlc+KAnCBhdXMsIHVtIGRhcyBEYXRlaXN5c3RlbVxuIgorIm5hY2ggZGVyIGFiZ2Vicm9jaGVuZW4gR3LDtnNzZW7DpG5kZXJ1bmcgenUgcmVwYXJpZXJlbi5cbiIKKworIzogcmVzaXplL21haW4uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1IGJsb2NrcyBsb25nLlxuIgorIlxuIgorbXNnc3RyICIiCisiRGFzIERhdGVpc3lzdGVtIGF1ZiAlcyBpc3QgbnVuICVsbHUgQmzDtmNrZSBncm/Dny5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJiZWltIFZlcnN1Y2gsICVzIHp1IGvDvHJ6ZW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIGF1ZiAlcyBpc3QgYXVmICVzIGVpbmdlaMOkbmd0OyBPbmxpbmUtR3LDtnNzZW52ZXLDpG5kZXJ1bmcgbsO2dGlnXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0NAorbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRpZSBPbmxpbmUtVmVya2xlaW5lcnVuZyB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogcmVzaXplL29ubGluZS5jOjY5Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIHVudGVyc3TDvHR6dCBrZWluZSBPbmxpbmUtR3LDtnNzZW52ZXLDpG5kZXJ1bmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo3OAorbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIm5pY2h0IGdlbnVnIHJlc2VydmllcnRlIEdEVC1CbMO2Y2tlIGbDvHIgZGllIEdyw7bDn2Vuw6RuZGVydW5nIgorCisjOiByZXNpemUvb25saW5lLmM6ODUKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIkRlciBLZXJuZWwgbMOkc3N0IGVpbmUgVmVyw6RuZGVydW5nIGRlciBHcsO2w59lIGVpbmVzIERhdGVpc3lzdGVtcyBkaWVzZW4gQXVzbWHDn2VzIG5pY2h0IHp1IgorCisjOiByZXNpemUvb25saW5lLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAiYmVpbSBWZXJzdWNoLCBFaW5ow6RuZ3B1bmt0ICVzIHp1IMO2ZmZuZW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTUgcmVzaXplL29ubGluZS5jOjEzMgorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICJadWdyaWZmIHZlcndlaWdlcnQgZsO8ciBkaWUgR3LDtnNzZW7DpG5kZXJ1bmcgZGVzIERhdGVpc3lzdGVtcyIKKworIzogcmVzaXplL29ubGluZS5jOjExOCByZXNpemUvb25saW5lLmM6MTM4Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiQmVpbSDDnGJlcnByw7xmZW4sIG9iIE9ubGluZS1WZXJncsO2c3NlcnVuZyB1bnRlcnN0w7x0enQgd2lyZCIKKworIzogcmVzaXplL29ubGluZS5jOjEzNQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRGVyIEtlcm5lbCB1bnRlcnN0w7x0enQgZGllIE9ubGluZS1WZXJncsO2c3NlcnVuZyBuaWNodCIKKworIzogcmVzaXplL29ubGluZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJFaW5lIE9ubGluZS1HcsO2c3NlbsOkbmRlcnVuZyB2b24gJXMgYXVmICVsbHUgKCVkaykgQmzDtmNrZSB3aXJkIGR1cmNoZ2Vmw7xocnQuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNzgKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJCZWltIFZlcnN1Y2gsIGRpZSBsZXR6dGUgR3J1cHBlIHp1IGVyd2VpdGVybiIKKworIzogcmVzaXplL29ubGluZS5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiQmVpbSBWZXJzdWNoLCBHcnVwcGUgJWQgaGluenUgenUgZsO8Z2VuIgorCisjOiByZXNpemUvb25saW5lLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbiIKK21zZ3N0ciAiRGF0ZWlzeXN0ZW0gYXVmICVzIGlzdCBhdWYgJXMgZWluZ2Vow6RuZ3QgdW5kIE9ubGluZS1HcsO2c3NlbsOkbmRlcnVuZyB3aXJkIGF1ZiBkaWVzZW0gU3lzdGVtIG5pY2h0IHVudGVyc3TDvHR6dC5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJEaWUgQW56YWhsIGRlciBJbmRvZXMgKCVsbHUpIG11c3MgdW50ZXIgJXUgbGllZ2VuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NTgyCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJyZXNlcnZpZXJ0ZSBCbMO2Y2tlIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6ODA3Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiTWV0YWRhdGVuLUJsw7Zja2UiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJEYXMgc29sbHRlIG5pZW1hbHMgcGFzc2llcmVuOiBEaWUgenUgdmVyw6RuZGVybmRlIElub2RlIGlzdCBkZWZla3QhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi42IgorbXNnc3RyICJFWFQyRlMgQmlibGlvdGhlayBWZXJzaW9uIDEuNDIuNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGV4dDJfZmlsc3lzIFN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgYmFkYmxvY2tzX2xpc3QgU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBiYWRibG9ja3NfaXRlcmF0ZSBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgaW5vZGVfc2NhbiBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgaW9fY2hhbm5lbCBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciB1bml4IGlvX2NoYW5uZWwgU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGlvX21hbmFnZXIgU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgYmxvY2tfYml0bWFwIFN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGlub2RlX2JpdG1hcCBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGdlbmVyaWNfYml0bWFwIFN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIHRlc3QgaW9fY2hhbm5lbCBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIFZlcnplaWNobmlzYmxvY2stTGlzdGUgU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgaWNvdW50IFN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBTdHJ1a3R1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBleHQyIGZpbGUgU3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIEV4dDIgQWJiaWxkLVZvcnNwYW5uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBJbm9kZSBpb19jaGFubmVsIFN0cnVrdHVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZGllIGV4dDQgRXh0ZW50IEhhbmRsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiVW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIGltIFN1cGVyYmxvY2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIkRpZSBEYXRlaXN5c3RlbXJldmlzaW9uIGlzdCB6dSBob2NoIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiRXMgd2lyZCB2ZXJzdWNodCwgYXVmIGVpbiBudXIgenVtIExlc2VuIGdlw7ZmZm5ldGVzIERhdGVpc3lzdGVtIHp1IHNjaHJlaWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiRGllIEdydXBwZW5kZXNrcmlwdG9yZW4ga8O2bm5lbiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkRpZSBHcnVwcGVuZGVza3JpcHRvcmVuIGvDtm5uZW4gbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICJCZXNjaMOkZGlndGVyIEdydXBwZW5kZXNrcmlwdG9yOiBuaWNodCBsZXNiYXJlciBCbG9jayDDvHIgZGllIEJsb2NrLUJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQmVzY2jDpGRpZ3RlciBHcnVwcGVuZGVza3JpcHRvcjogbmljaHQgbGVzYmFyZXIgQmxvY2sgw7xyIGRpZSBJbm9kZS1CaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiQmVzY2jDpGRpZ3RlciBHcnVwcGVuZGVza3JpcHRvcjogbmljaHQgbGVzYmFyZXIgQmxvY2sgw7xyIGRpZSBJbm9kZXRhYmVsbGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiRGllIElub2RlLUJpdG1hcCBrYW5uIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkRpZSBJbm9kZS1CaXRtYXAga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIkRpZSBCbG9jay1CaXRtYXAga2FubiBuaWNodCBnZXNjaHJpZWJlbiB3ZXJkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIkRpZSBCbG9jay1CaXRtYXAga2FubiBuaWNodCBnZWxlc2VuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkVpbmUgSW5vZGV0YWJlbGxlIGthbm4gbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJFaW5lIElub2RldGFiZWxsZSBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIkRlciBuw6RjaHN0ZSBJbm9kZSBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIkRhcyBEYXRlaXN5c3RlbSBoYXQgZWluZSB1bmVyd2FydGV0ZSBCbG9ja2dyw7bDn2UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiRVhUMiBWZXJ6ZWljaG5pcyBiZXNjaMOkZGlndCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICJFaW4gQmxvY2sga29ubnRlIG5pY2h0IGluIGVpbmVtIFp1ZyBnZWxlc2VuIHdlcmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJFaW4gQmxvY2sga29ubnRlIG5pY2h0IHZvbGxzdMOkbmRpZyBpbiBlaW5lbSBadWcgZ2VzY2hyaWViZW4gd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIktlaW4gZnJlaWVyIFBsYXR6IGltIFZlcnplaWNobmlzIHZvcmhhbmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIkRpZSBJbm9kZS1CaXRtYXAgd3VyZGUgbmljaHQgZ2VsYWRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUxCittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIkRpZSBCbG9jay1CaXRtYXAgd3VyZGUgbmljaHQgZ2VsYWRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIlVuenVsw6Rzc2lnZSBJbm9kZW51bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIlVuenVsw6Rzc2lnZSBCbG9ja251bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIkludGVybmVyIEZlaGxlciBpbiBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJEZXIgUGxhdHogcmVpY2h0IG5pY2h0IGF1cywgdW0gZGFzIGdld8O8bnNjaHRlIERhdGVpc3lzdGVtIHp1IGVyemV1Z2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJleHQyZnNfbWFya19ibG9ja19iaXRtYXAgd3VyZGUgZWluZSB1bnp1bMOkc3NpZ2UgQmxvY2tudW1tZXIgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCB3dXJkZSBlaW5lIHVuenVsw6Rzc2lnZSBCbG9ja251bW1lciDDvGJlcmdlYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICJleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAgd3VyZGUgZWluZSB1bnp1bMOkc3NpZ2UgQmxvY2tudW1tZXIgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIHd1cmRlIGVpbmUgdW56dWzDpHNzaWdlIEJsb2NrbnVtbWVyIMO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAgd3VyZGUgZWluZSB1bnp1bMOkc3NpZ2UgQmxvY2tudW1tZXIgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIHd1cmRlIGVpbmUgdW56dWzDpHNzaWdlIEJsb2NrbnVtbWVyIMO8YmVyZ2ViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiRXMgd3VyZGUgdmVyc3VjaHQsIGRhcyBFbmRlIGRlciBCbG9ja2JpdG1hcCDDvGJlciBkYXMgZWNodGUgRW5kZSBoaW5hdXMgenUgdmVyc2NoaWViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiRXMgd3VyZGUgdmVyc3VjaHQsIGRhcyBFbmRlIGRlciBJbm9kZWJpdG1hcCDDvGJlciBkYXMgZWNodGUgRW5kZSBoaW5hdXMgenUgdmVyc2NoaWViZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkVzIHd1cmRlIGVpbiBkb3BwZWx0IGluZGlyZWt0ZXIgQmxvY2sgZ2VmdW5kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorbXNnaWQgIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJFcyB3dXJkZW4gZG9wcGVsdCBpbmRpcmVrdGUgQmzDtmNrZSBnZWZ1bmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkVzIHd1cmRlIGVpbiBkcmVpZmFjaCBpbmRpcmVrdGVyIEJsb2NrIGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkRpZSBCbG9ja2JpdG1hcHMgc2luZCBuaWNodCBpZGVudGlzY2giCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiRGllIElub2RlYml0bWFwcyBzaW5kIG5pY2h0IGlkZW50aXNjaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIlVuenVsw6Rzc2lnZXIgb2RlciBkZWZvcm1pZXJ0ZXIgR2Vyw6R0ZW5hbWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRWluZXIgQmxvY2tncnVwcGUgZmVobHQgZWluZSBJTm9kZXRhYmVsbGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiRGVyIEV4dDItU3VwZXJibG9jayBpc3QgYmVzY2jDpGRpZ3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAgd3VyZGUgZWluZSB1bnp1bMOkc3NpZ2UgZ2VuZXJpc2NoZSBCaXRudW1tZXIgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgImV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAgd3VyZGUgZWluZSB1bnp1bMOkc3NpZ2UgZ2VuZXJpc2NoZSBCaXRudW1tZXIgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCB3dXJkZSBlaW5lIHVuenVsw6Rzc2lnZSBnZW5lcmlzY2hlIEJpdG51bW1lciDDvGJlcmdlYmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIkVzIHd1cmRlbiB6dSB2aWVsZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmdlbiBnZWZ1bmRlbi4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICJEaWUgUsO8Y2tydWYtRnVua3Rpb24gd2lyZCBzaWNoIHVtIGRpZXNlbiBGYWxsIG5pY2h0IGvDvG1tZXJuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkRlciBJbm9kZSBrb21tdCB2b24gZWluZW0gZGVmZWt0ZW4gQmxvY2sgaW4gZGVyIElub2RldGFiZWxsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiJXMgYmVzaXR6dCBuaWNodCB1bnRlcnN0w7x0enRlIEVpZ2Vuc2NoYWZ0KGVuKToiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJEYXMgRGF0ZWlzeXN0ZW0gYmVzaXR6dCBuaWNodCB1bnRlcnN0w7x0enRlIG51ci1sZXNlbiBFaWdlbnNjaGFmdChlbik6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIkUvQSBLYW5hbCBpc3QgYmVpbSBTdWNoZW4gd8OkaHJlbmQgZGVzIExlc2VucyBvZGVyIFNjaHJlaWJlbnMgZ2VzY2hlaXRlcnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRGllIFJlc2VydmllcnVuZyB2b24gSGF1cHRzcGVpY2hlciBpc3QgZ2VzY2hlaXRlcnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiRGVyIEV4dDItQmlibGlvdGhlayB3dXJkZSBlaW4gdW5nw7xsdGlnZXMgQXJndW1lbnQgw7xiZXJnZWJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2FubiBrZWluZW4gQmxvY2sgaW0gRXh0MiBEYXRlaXN5c3RlbSByZXNlcnZpZXJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2FubiBrZWluZW4gSW5vZGUgaW0gRXh0MiBEYXRlaXN5c3RlbSByZXNlcnZpZXJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkRpZSBFeHQyLUlub2RlIGlzdCBrZWluIFZlcnplaWNobmlzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJadSB2aWVsZSBSZWZlcmVuemVuIGluIGRlciBUYWJlbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiRGllIERhdGVpIHd1cmRlIHZvbiBleHQyX2xvb2t1cCBuaWNodCBnZWZ1bmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiRGllIERhdGVpIGlzdCBudXIgenVtIExlc2VuIGdlw7ZmZm5ldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5Cittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJEZXIgRXh0Mi1WZXJ6ZWljaG5pc2Jsb2NrIHd1cmRlIG5pY2h0IGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRGFzIEV4dDItVmVyemVpY2huaXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICJOaWNodCBpbXBsZW1lbnRpZXJ0ZSBFeHQyLUJpYmxpb3RoZWtzZnVua3Rpb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiQmVudXR6ZXIgZXJiYXQgZGVuIEFiYnJ1Y2giCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJFeHQyIERhdGFlaSB6dSBncm/DnyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJEYXMgYW5nZWdlYmVuZSBKb3VybmFsZ2Vyw6R0IGlzdCBrZWluIEJsb2NrZ2Vyw6R0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJEZXIgSm91cm5hbC1TdXBlcmJsb2NrIHd1cmRlIG5pY2h0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIkRhcyBKb3VybmFsIG11w58gbWluZGVzdGVucyAxMDI0IEJsw7Zja2UgdW1mYXNzZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBKb3VybmFsdmVyc2lvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIGRlcyBleHRlcm5lbiBKb3VybmFscyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIkRhcyBKb3VybmFsIHd1cmRlIG5pY2h0IGdlZnVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIlZlcnplaWNobmlzaGFzaCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiVW56dWzDpHNzaWdlIE51bW1lciBmw7xyIGRlbiBCbG9jayBmw7xyIGVyd2VpdGVydGUgQXR0cmlidXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIkVpbiBEYXRlaXN5c3RlbSBtaXQgZGVyIGdld8O8bnNjaHRlbiBBbnphaGwgdm9uIElub2RlcyBrYW5uIG5pY2h0IGVyemV1Z3Qgd2VyZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJEZXIgRTJpbWFnZS1TY2huYXBwc2NodXNzZSB3aXJkIG5pY2h0IGJlbnV0enQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiWnUgdmllbGUgcmVzZXJ2aWVydGUgR3J1cHBlbmJlc2NocmVpYnVuZ3NibMO2Y2tlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIkRlciB6dSBtb2RpZml6aWVyZW5kZSBJbm9kZSBpc3QgZGVmZWt0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJFcyB3dXJkZSB2ZXJzdWNodCwgZWluZSBCbG9jay1CbWFwIG1pdCBmZWhsZW5kZW0gaW5kaXJla3RlbSBCbG9jayB6dSBzZXR6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogRXJmb2xnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IERlZmVrdGUgRGF0ZW5iYW5rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBFQS1GZWhsZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIlREQjogRmVobGVyIGJlaW0gU3BlcnJlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBIYXVwdHNwZWljaGVyIGVyc2Now7ZwZnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIlREQjogRGVyIERhdGVuc2F0eiBleGlzdGllcnQgYmVyZWl0cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBEaWUgU3BlcnJlIGV4aXN0aWVydCBmw7xyIGFuZGVyZSBTY2jDvHNzZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IFVuZ8O8bHRpZ2VyIFBhcmFtZXRlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUREI6IERlciBEYXRlbnNhdHogZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IFNjaHJlaWJlbiBpc3RnIG5pY2h0IGVybGF1YnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkRpZSBFeHQyZnMtVmVyemVpY2huaXNibG9ja2xpc3RlIGlzdCBsZWVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiRXMgd2lyZCB2ZXJzdWNodCwgZWluIEJsb2NrbWFwcGluZyBtaXR0ZWxzIG51ci1sZXNlbmRlbiBCbG9ja2l0ZXJhdG9yZW4genUgbW9kaWZpemllcmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBkZW4gZ2VzaWNoZXJ0ZW4gUGZhZCBlaW5lIEV4dDQtRXJ3ZWl0ZXJ1bmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIGbDvHIgZGllIDY0LWJpdHRpZ2UgZ2VuZXJpc2NoZ2UgQml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgZsO8ciBlaW5lIDY0LWJpdHRpZ2UgQmxvY2tiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCBmw7xyIGVpbmUgNjQtYml0dGlnZSBJbm9kZWJpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCAtLS0gUkVTRVJWRURfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgLS0tIFJFU0VSVkVEXzE0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIC0tLSBSRVNFUlZFRF8xNSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCAtLS0gUkVTRVJWRURfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJGYWxzY2hlIG1hZ2lzY2hlIFphaGwgLS0tIFJFU0VSVkVEXzE3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiRmFsc2NoZSBtYWdpc2NoZSBaYWhsIC0tLSBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIkZhbHNjaGUgbWFnaXNjaGUgWmFobCAtLS0gUkVTRVJWRURfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIkRlZmVrdGVyIEVyd2VpdGVydW5ncy1Wb3JzcGFubiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJEZWZla3RlciBFcndlaXRlcnVuZ3NpbmRleCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICJEZWZla3RlIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJLZWluIGZyZWllciBQbGF0eiBtZWhyIGluIGRlciBFcndlaXRlcnVuZ3N0YWJlbGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM0Cittc2dpZCAiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCittc2dzdHIgIkRlciBJbm9kZSB2ZXJ3ZW5kZXQga2VpbmUgRXJ3ZWl0ZXJ1bmdlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIktlaW5lIOKAnm7DpGNoc3Rl4oCcIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIktlaW5lIOKAnnZvcmhlcmlnZeKAnCBFcndlaXRlcnVuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJLZWluZSDigJ5vYmVu4oCcIEVyd2VpdGVydW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiS2VpbmUg4oCedW50ZW7igJwgRXJ3ZWl0ZXJ1bmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIktlaW4gYWt0dWVsbGVyIEtub3RlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRXh0MmZzLU9wZXJhdGlvbiB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJLZWluIFBMYXR6IHZvcmhhbmRlbiwgdW0gZGllIEVyd2VpdGVydW5nIGltIEtub3RlbiBlaW56dWbDvGdlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiQXVmdGVpbGVuIHfDvHJkZSBpbiBlaW5lbSBsZWVyZW4gS25vdGVuIGVuZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiRXJ3ZWl0ZXJ1bmcgd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiRGllIE9wZXJhdGlvbiB3aXJkIGbDvHIgSW5vZGVzLCBkaWUgRXJ3ZWl0ZXJ1bmdlbiBiZWluaGFsdGVuLCBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIkzDpG5nZSBkZXIgRXJ3ZWl0ZXJ1bmcgaXN0IHVuZ8O8bHRpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkRlciBFQS1LYW5hbCB1bnRlcnN0w7x0enQga2VpbmUgNjQtYml0dGlnZW4gQmxvY2tudW1tZXJuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiw5xiZXJwcsO8ZnVuZyBvYiBkYXMgRGF0ZWlzeXN0ZW0gZWluZ2Vow6RuZ3QgaXN0IG1hbmdlbHMgbXRhYiBEYXRlaSBuaWNodCBtw7ZnbGljaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiRGFzIERhdGVpc3lzdGVtIGlzdCBmw7xyIGRpZSBWZXJ3ZW5kdW5nIHZvbiBhbHRlcnTDvG1saWNoZW4gQml0bWFwcyB6dSBncm/DnyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogdW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiTU1QOiBkYXMgR2Vyw6R0IGlzdCBkZXJ6ZWl0IGFrdGl2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiTU1QOiBmc2NrIHdpcmQgYXVzZ2Vmw7xocnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiTU1QOiBkaWUgQmxvY2tudW1tZXIgaXN0IGplbnNlaXRzIGRlcyBCZXJlaWNocyBkZXMgRGF0ZWlzeXN0ZW1zIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IGVpbmUgdW5iZWthbm50ZSBPcGVyYXRpb24gd2lyZCBhdXNnZWbDvGhydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIk1NUDogZGFzIERhdGVpc3lzdGVtIHdpcmQgbm9jaCB2ZXJ3ZW5kZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUDogZGFzIMOWZmZuZW4gbWl0IE9fRElSRUNUIGlzdCBnZXNjaGVpdGVydCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICJQcm9maWwgVmVyc2lrb24gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbiBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiRGllIFByb2ZpbHNla3Rpb24gd3VyZGUgbmljaHQgZ2VmdW5kZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIkRlciBQcm9maWxiZXp1ZyB3dXJkZSBuaWNodCBnZWZ1bmRlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiRXMgd2lyZCB2ZXJzdWNodCwgZWluZW4gQmV6dWcgenUgZWluZW0gS25vdGVuIGhpbnp1IHp1IGbDvGdlbiwgZGVyIGtlaW5lIFNla3Rpb24gaXN0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiRWluIFByb2ZpbHNla3Rpb24tVm9yc3Bhbm4gaGF0IGVpbmVuIFdlcnQgZGVyIG5pY2h0IE51bGwgaXN0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIlVOZ8O8bHRpZ2UgdmVya2V0dGV0ZSBMaXN0ZSBpbiBkZW4gUHJvZmlsc3RydWt0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJVbmfDvGx0aWdlIEdydXBwZW5lYmVuZSBpbiBkZW4gUHJvZmlsc3RydWt0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBaZWlnZXIgYXVmIEVsdGVybiBpbiBkZW4gUHJvZmlsc3RydWt0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiVW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIGltIFByb2ZpbC1JdGVyYXRvciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICJEZXIgV2VydCBrYW5uIGJlaW0gU2VrdGlvbnNrbm90ZW4gbmljaHQgZ2VzZXR6dCB3ZXJkZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICJFaW4gdW5nw7xsdGlnZXMgQXJndW1lbnQgd3VyZGUgZGVyIFByb2ZpbGllcnVuZ3NiaWJsaW90aGVrIMO8YmVyZ2ViZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIkVzIHdpcmQgdmVyc3VjaHQsIGVpbiBudXIgbGVzYmFyZXMgUHJvZmlsIHp1IG1vZGlmaXppZXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIlZvcnNwYW5uIGRlciBQcm9maWxzZWt0aW9uIGlzdCBuaWNodCBhdWYgZGVyIG9iZXJzdGVuIEViZW5lIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJTeW50YXhmZWhsZXIgaW0gVm9yc3Bhbm4gZGVzIFByb2ZpbHNla3RvciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiU3ludGF4ZmVobGVyIGltIFByb2ZpbGJlenVnIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNworbXNnaWQgIkV4dHJhIGNsb3NpbmcgYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiw5xiZXJ6w6RobGlnZSBzY2hsaWVzc2VuZGUgS2xhbW1lcm4gaW0gUHJvZmlsIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOAorbXNnaWQgIk1pc3Npbmcgb3BlbiBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJGZWhsZW5kZSDDtmZmbmVuZGUgS2xhbW1lciBpbSBQcm9maWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIGluIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbiBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiSXRlcmF0aW9uIMO8YmVyIGFsbGUgU2VrdGlvbmVuIGRlciBvYmVyc3RlbiBFYmVuZSB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFByb2ZpbHNla3Rpb25zb2JqZWt0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIktlaW5lIHdlaXRlcmVuIFNla3Rpb25lbiB2b3JoYW5kZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkVpbmUgdW5nw7xsdGlnZXIgU2F0eiB2b24gTmFtZW4gd3VyZGUgZGVyIEFiZnJhZ2Vyb3V0aW5lIMO8YmVyZ2ViZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIkVzIGlzdCBrZWluZSBQcm9maWxkYXRlaSBvZmZlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIlVuZ8O8bHRpZ2UgbWFnaXNjaGUgWmFobCBpbiBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiRGllIFByb2ZpbGRhdGVpIGtvbm50ZSBuaWNodCBnZcO2ZmZuZXQgd2VyZGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkRpZSBTZWt0aW9uIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgYm9vbHNjaGVyIFdlcnQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJVbmfDvGx0aWdlciBXZXJ0IGbDvHIgZWluZSBHYW56emFobCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBtYWdpc2NoZSBaYWhsIGluIHByb2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiJXMgaXMgbW91bnRlZC4gICIKKyN+IG1zZ3N0ciAiJXMgaXN0IGVpbmdlaMOkbmd0LiAgIgorCisjfiBtc2dpZCAiQGcgJWcgQGIgQEIgdW5pbml0aWFsaXplZCBidXQgQGkgQEIgaW4gdXNlLlxuIgorI34gbXNnc3RyICJEaWUgQGIgQEIgdm9uIEBnICVnIGlzdCBuaWNodCBpbml0aWFsaXNpZXJ0IGFiZXIgQGkgQEIgd2lyZCB2ZXJ3ZW5kZXQuXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIsKgaW4gQGkgJWkgc29sbHRlIEVPRkJMT0NLU19GTCBuaWNodCBnZXNldHp0IHNlaW4gKEdyw7bDn2UgJUlzLCBsYmxrICVyKVxuIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiS29ubnRlIGRpZSBHcsO2w59lIGRlcyBEYXRlaXN5c3RlbXMgbmljaHQgZXJtaXR0ZWxuIgorCisjfiBtc2dpZCAiI1x0XHQgJWxsdSAtPiAlbGx1ICglbGx1KVxuIgorI34gbXNnc3RyICIjXHRcdCAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxEZXIg4oCeQUNMIEluZGV44oCcLUlub2RlPiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8RGVyIOKAnkFDTCBEYXRh4oCcLUlub2RlPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGZyYWdtZW50IHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAiZmFsc2NoZSBGcmFnbWVudGdyw7bDn2UgLSAlcyIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIldhcm51bmc6IEZyYWdtZW50ZSB3ZXJkZW4gbmljaHQgdW50ZXJzdMO8dHp0LiBJZ25vcmllcmUgLWYgT3B0aW9uXG4iCisKKyN+IG1zZ2lkICJDYWxsaW5nIEJMS0RJU0NBUkQgZnJvbSAlbGx1IHRvICVsbHUgIgorI34gbXNnc3RyICJEZXIgQXVmcnVmIHZvbiBCTEtESVNDQVJEIGbDvHIgZGVuIEJlcmVpY2ggdm9uICVsbHUgYmlzICVsbHUgd2FyICIKKworI34gbXNnaWQgInN1Y2NlZWRlZC5cbiIKKyN+IG1zZ3N0ciAiZXJmb2xncmVpY2guXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIkpvdXJuYWwgTklDSFQgZ2Vsw7ZzY2h0XG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vZTJmc3Byb2dzLnBvdCBiL2UyZnNwcm9ncy9wby9lMmZzcHJvZ3MucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjQ4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vZTJmc3Byb2dzLnBvdApAQCAtMCwwICsxLDY0ODAgQEAKKyMgRTJmc3Byb2dzIHRyYW5zbGF0aW9uIHRlbXBsYXRlIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAKKyMgICAgIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsCisjICAgICAgMjAxMyBieSBUaGVvZG9yZSBUcydvCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4sIDIwMTMuCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4KKyMuICAKKyMuCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLgklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLgklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4JJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLgklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4JJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLgklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4JJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLgklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLgklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLgklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4JJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLgklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLgklTgk8bnVtPgorIy4JJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLgklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLgkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4JJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLgklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4JCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4JJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4JJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLgklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuOVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMy0xMi0yOCAyMjozMy0wNTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPUlOVEVHRVI7IHBsdXJhbD1FWFBSRVNTSU9OO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL3NjYW50ZXN0LmM6MTA3IGUyZnNjay91bml4LmM6MTMzNgorIzogZTJmc2NrL3VuaXguYzoxNDI2IG1pc2MvYmFkYmxvY2tzLmM6MTIyNiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzQKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI0OCBtaXNjL2JhZGJsb2Nrcy5jOjEyNjAgbWlzYy9kdW1wZTJmcy5jOjYwMgorIzogbWlzYy9lMmltYWdlLmM6MTM4NCBtaXNjL2UyaW1hZ2UuYzoxNTY3IG1pc2MvZTJpbWFnZS5jOjE1ODYKKyM6IG1pc2MvbWtlMmZzLmM6MTk2IG1pc2MvdHVuZTJmcy5jOjE5MzAgcmVzaXplL21haW4uYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIwMworbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMgZm9yIGZsdXNoaW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTcxIHJlc2l6ZS9tYWluLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEyNzgKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjEyOTcKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTI1Cittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNAorbXNnaWQgIkFlcnJvciBhbGxvY2F0aW5nIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM3Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDMKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ1IG1pc2MvdXVpZGQuYzoxNjEKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMgorbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI0Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI2Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMAorbXNnaWQgImJsb2NrICMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MTAgZTJmc2NrL3Bhc3MxYi5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjgyMQorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzo1OTgKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYwOQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjE5Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzo2MjggbWlzYy9lMmltYWdlLmM6MTI1MworbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk1Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTIzOQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNDYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNjkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTI3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjIzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NzQKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY4MAorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjg2Cittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNQorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczMuYzoxMzcKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6MzIzCittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2CisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAlUyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NQorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5CisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzkKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkzCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMDgKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMjEKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyNgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCAlcyBpcyBwcmVzZW50LlxuCittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqICVzIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMzEKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyMzYKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNDEKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0NiBlMmZzY2svcHJvYmxlbS5jOjcwMAorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNTEKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU2CisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KK21zZ2lkICJASSAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyNzEKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc2CisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MQorIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMQorIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA3CisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzEyCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzIyCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyOAorIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM4CisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQzCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIHNob3VsZCBiZSAlWC4gIAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNjcKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KSAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzkyCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4CisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MTMKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxOAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzOAorIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayA2NGJpdCBmaWxlc3lzdGVtcyBuZWVkcyBleHRlbnRzIHRvIGFjY2VzcyB0aGUgd2hvbGUgZGlzay4gIAorbXNnaWQgIkBTIDY0Yml0IGZpbGVzeXN0ZW1zIG5lZWRzIGV4dGVudHMgdG8gYWNjZXNzIHRoZSB3aG9sZSBkaXNrLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ1CisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5CisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU0CisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc5CisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5OQorIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNAorIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxOQorIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MjkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM0CisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0OQorIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU0CisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NgorIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3NworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4MworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4OAorIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OTQKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA1CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MjAKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwIGUyZnNjay9wcm9ibGVtLmM6MTQ3OQorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MzUKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbgorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ1CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NTUKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NjAKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY1CisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCittc2dpZCAiRXJyb3Igc3RvcmluZyBAZCBAYiBpbmZvcm1hdGlvbiAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkwCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5NQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCittc2dpZCAiQGogaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MjEKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI2CisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MzEKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2CisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3NTEKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MQorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2NgorIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MQorIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3NgorIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgxCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3ODUKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5NQorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MDUKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MTAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNQorIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMwCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NDYKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU2CisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NjEKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NjYKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NzEKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgxCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4NworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MTcKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyMQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMxCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzNgorIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MQorIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NDYKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NTEKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NTgKKyMuIEAtZXhwYW5kZWQ6IEludGVyaW9yIGV4dGVudCBub2RlIGxldmVsICVOIG9mIGlub2RlICVpOlxuCisjLiBALWV4cGFuZGVkOiBMb2dpY2FsIHN0YXJ0ICViIGRvZXMgbm90IG1hdGNoIGxvZ2ljYWwgc3RhcnQgJWMgYXQgbmV4dCBsZXZlbC4gIAorbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcyCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc4CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OTgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAzCisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDggZTJmc2NrL3Byb2JsZW0uYzoxMzIzCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxMworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE5CisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI0CisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMAorIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ1CisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjQKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3NAorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3OQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg0CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4OQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NAorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk5CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDQKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA5CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTkKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI0CisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyOQorIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM0CisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzkKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDQKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ5CisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1OQorIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY0CisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjkKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg0CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk0CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNCBlMmZzY2svcHJvYmxlbS5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwOQorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNAorIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjkKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzOQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDQKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ5CisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTQKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTkKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjQKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjkKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0CisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3OQorIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODQKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg5CisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk5CisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDQKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwOQorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE0CisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTgKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyOAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0OAorIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1MworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4CisjLCBuby1jLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYzCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2OAorIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzczCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MgorIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE0CisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI0CisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM5CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ5CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY0CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjkKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIHJvb3QgZGlyZWN0b3J5ICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciBjcmVhdGluZyByb290IEBkICglcyk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg5CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTQKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwOQorIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTMxCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTY3CisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc3CisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MgorIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODcKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTkyCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjEyCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjMyCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM3CisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQyCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDcKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTIKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1NworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjYzCittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY4CisjLCBjLWZvcm1hdAorIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3MworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTgKKyMsIGMtZm9ybWF0CisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcwMworIywgYy1mb3JtYXQKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEwCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzE1Cittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NTkgZTJmc2NrL3Byb2JsZW0uYzoxOTYzCittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6Mjc0Cittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzUKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjgwCittc2dpZCAiIgorIlxuIgorIkVtZXJnZW5jeSBoZWxwOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWMgcmVwYWlyIChubyBxdWVzdGlvbnMpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE1ha2Ugbm8gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbVxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBc3N1bWUgXCJ5ZXNcIiB0byBhbGwgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmFkYmxvY2sgIgorImxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODYKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBmaWxlICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMmxsdSBibG9jayB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEybGx1IGJsb2NrcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJWxsdSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzeW1ib2xpYyBsaW5rIgorbXNnaWRfcGx1cmFsICIlMTJ1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc29ja2V0XG4iCittc2dpZF9wbHVyYWwgIiUxMnUgc29ja2V0c1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTg3IG1pc2MvdHVuZTJmcy5jOjIwMDggbWlzYy91dGlsLmM6MTQ3CisjOiByZXNpemUvbWFpbi5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjY0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjY5Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjcxCittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM2MQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MzYzCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNjUKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNzYKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozOTEKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NDQ0Cittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo0NDcKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjY2OQorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc5MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc5NAorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MDkKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4NjEgZTJmc2NrL3VuaXguYzo5MzUgbWlzYy90dW5lMmZzLmM6ODI4IG1pc2MvdHVuZTJmcy5jOjExMjMKKyM6IG1pc2MvdHVuZTJmcy5jOjExNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkxNAorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkxOQorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyNAorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjk3OAorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEwMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNDEgZTJmc2NrL3VuaXguYzoxMTQ2Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE0OCBtaXNjL3R1bmUyZnMuYzoxOTM1Cittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE5OQorbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjQxCittc2dpZCAibmVlZCB0ZXJtaW5hbCBmb3IgaW50ZXJhY3RpdmUgcmVwYWlycyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjk2Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTcKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQwCittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDcKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU1Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM1NworbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTM2MQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzY0Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDI5Cittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ4NQorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDQKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTUKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTcKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjgxCittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg1Cittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjk3Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDkgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTcxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzIxIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzYxCittc2dpZCAid2hpbGUgc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI3OAorbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjkKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0MAorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDcwCittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ5MCBtaXNjL2JhZGJsb2Nrcy5jOjc1MgorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDUgbWlzYy9iYWRibG9ja3MuYzo2MDUgbWlzYy9iYWRibG9ja3MuYzo3NjMKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxNAorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjMKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MzAgbWlzYy9iYWRibG9ja3MuYzo2MzcgbWlzYy9iYWRibG9ja3MuYzo2NzkKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODI2Cittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTQgbWlzYy9iYWRibG9ja3MuYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2NjkKK21zZ2lkICJSZWFkaW5nIGFuZCBjb21wYXJpbmc6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg4Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkyIG1pc2MvdXRpbC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTQKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5OQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDQgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDcKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2OAorbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE3NAorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg4Cittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTkKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwNQorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbGx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWxsdSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBlbmQgYmxvY2sgKCVsbHUpOiBtdXN0IGJlIDMyLWJpdCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNzEKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4MAorbXNnaWQgImlucHV0IGZpbGUgLSBiYWQgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI4OCBtaXNjL2JhZGJsb2Nrcy5jOjEyOTcKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzA3Cittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzozMTUKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY5Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNAorbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE4Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMgorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjkKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNQorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM5Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDMKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTkKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI3NAorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzEwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1IG1pc2MvdHVuZTJmcy5jOjMxMworbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzUxCittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTcKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2NAorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXIgaW52YWxpZCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY3Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzgwCittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTUgbWlzYy90dW5lMmZzLmM6MjI5Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyMworbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NTYgbWlzYy9ta2UyZnMuYzo2NjYgbWlzYy90dW5lMmZzLmM6MTE2MAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NjggbWlzYy9ta2UyZnMuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjA0IG1pc2MvZTJpbWFnZS5jOjE1NjkgbWlzYy90dW5lMmZzLmM6MTk0NgorIzogcmVzaXplL21haW4uYzozMTgKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFsgLXJ8USBdIFsgLWZyIF0gZGV2aWNlIGltYWdlLWZpbGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1JIGRldmljZSBpbWFnZS1maWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgJXMgLXJhICBbICAtY2ZucCAgXSBbIC1vIHNyY19vZmZzZXQgXSBbIC1PIGRlc3Rfb2Zmc2V0IF0gc3JjX2ZzICIKKyJbIGRlc3RfZnMgXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2OSBtaXNjL2UyaW1hZ2UuYzo1NzMgbWlzYy9lMmltYWdlLmM6NTc4CisjOiBtaXNjL2UyaW1hZ2UuYzoxMTY3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXIiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgYmxvY2sgJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciB3cml0aW5nIGJsb2NrICVsbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTkwCittc2dpZCAiZXJyb3IgaW4gd3JpdGUoKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMDYKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoyMTEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjM5Cittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjI0OAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjU2Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MjY0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgZGlyZWN0b3J5IGJsb2NrICVsbHU6IGJhZCByZWNfbGVuICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBkaXJlY3RvcnkgYmxvY2sgJWxsdTogYmFkIG5hbWVfbGVuICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSAvICVsbHUgYmxvY2tzICglZCUlKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo1ODIgbWlzYy9lMmltYWdlLmM6NjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcHlpbmcgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RvcHBpbmcgbm93IHdpbGwgZGVzdHJveSB0aGUgZmlsZXN5c3RlbSwgaW50ZXJydXB0IGFnYWluIGlmIHlvdSBhcmUgc3VyZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgcmVtYWluaW5nIGF0ICUuMmYgTUIvcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo2NTQgbWlzYy9lMmltYWdlLmM6MTE3NworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciByZWFkaW5nIGJsb2NrICVsbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcYlxiXGJcYlxiXGJcYlxiQ29waWVkICVsbHUgLyAlbGx1IGJsb2NrcyAoJWxsdSUlKSBpbiAlcyBhdCAlLjJmIE1CLyIKKyJzICAgICAgIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjc0NgorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgbDEgdGFibGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6NzkxCittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBsMiBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IFRoZXJlIGFyZSBzdGlsbCB0YWJsZXMgaW4gdGhlIGNhY2hlIHdoaWxlIHB1dHRpbmcgdGhlIGNhY2hlLCBkYXRhICIKKyJ3aWxsIGJlIGxvc3Qgc28gdGhlIGltYWdlIG1heSBub3QgYmUgdmFsaWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTEzNQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgZXh0Ml9xY293Ml9pbWFnZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMTQyCittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGV4dDJfcWNvdzJfaW1hZ2UiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTE5OSBtaXNjL2UyaW1hZ2UuYzoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yOiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlZmNvdW50IGJsb2NrcyBjcmVhdGVkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEyNTcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjY2Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBzY3JhbWJsZSBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJTY2FubmluZyBpbm9kZXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMjg1Cittc2dpZCAiQ2FuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMjQgbWlzYy9lMmltYWdlLmM6MTMzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBpdGVyYXRpbmcgb3ZlciBpbm9kZSAldSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzY4Cittc2dpZCAiUmF3IGFuZCBxY293MiBpbWFnZXMgY2Fubm90YmUgaW5zdGFsbGVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOTEKK21zZ2lkICJlcnJvciByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQwMworbXNnaWQgIndoaWxlIG9wZW5pbmcgZGV2aWNlIGZpbGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUxMAorbXNnaWQgIi1hIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggcmF3IG9yIFFDT1cyIGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUxNgorbXNnaWQgIk9mZnNldHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoIHJhdyBpbWFnZXMuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE1MjEKK21zZ2lkICJNb3ZlIG1vZGUgaXMgb25seSBhbGxvd2VkIHdpdGggcmF3IGltYWdlcy4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTUyNgorbXNnaWQgIk1vdmUgbW9kZSByZXF1aXJlcyBhbGwgZGF0YSBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTM2Cittc2dpZCAiY2hlY2tpbmcgaWYgbW91bnRlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGUyaW1hZ2Ugb24gYSBSL1cgbW91bnRlZCBmaWxlc3lzdGVtIGNhbiByZXN1bHQgaW4gYW5cbiIKKyJpbmNvbnNpc3RlbnQgaW1hZ2Ugd2hpY2ggd2lsbCBub3QgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4iCisiVXNlIC1mIG9wdGlvbiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhhdC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNTk0Cittc2dpZCAiUUNPVzIgaW1hZ2UgY2FuIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBzdGRvdXQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbWFnZSAoJXMpIGlzIGNvbXByZXNzZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkltYWdlICglcykgaXMgZW5jcnlwdGVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgb3B0aW9uIG9ubHkgc3VwcG9ydGVkIGluIHJhdyBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTYzMAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiB3cml0aW5nIHRvIHN0ZG91dFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGNoZWNrX2J1ZiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtcCBvcHRpb24gb25seSBzdXBwb3J0ZWQgaW4gcmF3IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsb2NrcyBhbHJlYWR5IGNvbnRhaW5lZCB0aGUgZGF0YSB0byBiZSBjb3BpZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MzcwCittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyAiCisibnVtYmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLSIKKyJjb3VudF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjMyCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzozMDMKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjMyMAorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjM1NSBtaXNjL21rZTJmcy5jOjIzMTQgbWlzYy9ta2UyZnMuYzoyNTc3Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjM2NgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzczCittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQwMworbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDEwCittc2dpZCAid2hpbGUgbG9va2luZyB1cCAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMworbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA3Cittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjUxNQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1NDUKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MTIKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Njg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlcXVpcmVzICctTyA2NGJpdCdcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIG11c3QgYmUgYmVmb3JlICdyZXNpemU9JXUnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkZXNjX3NpemU6ICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjcyMiBtaXNjL3R1bmUyZnMuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjc4MQorbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODA1Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODMyIG1pc2MvbWtlMmZzLmM6ODQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjk1MSBtaXNjL3R1bmUyZnMuYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo5NjMgbWlzYy90dW5lMmZzLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjExMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjExMDcKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMTExCittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjExNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzI0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDA1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDM1Cittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0NworbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1MgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDY2Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDk5Cittc2dpZCAiIgorIldhcm5pbmc6IC1LIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICctRSAiCisibm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MTAKK21zZ2lkICJpbiBtYWxsb2MgZm9yIGJhZF9ibG9ja3NfZmlsZW5hbWUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTY5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTc3Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjMwIG1pc2MvbWtlMmZzLmM6MjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzNgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjYzCittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzYgcmVzaXplL21haW4uYzozNjgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2ODkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDYKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MjYKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzczCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg0OAorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODU1Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg3NQorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODg5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA2Cittc2dpZCAiIgorIkV4dGVudHMgTVVTVCBiZSBlbmFibGVkIGZvciBhIDY0LWJpdCBmaWxlc3lzdGVtLiAgUGFzcyAtTyBleHRlbnRzIHRvICIKKyJyZWN0aWZ5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkyNgorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTMyCittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk1NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCksIGZvcmNlZCB0byBjb250aW51ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAxMworbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMjAKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMjkKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzYgbWlzYy90dW5lMmZzLmM6NzU3Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDQ3Cittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDU2Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDgwCittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNjcKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjkzCittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMzA5Cittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQxOAorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MzQKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjkKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU3MworbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODIKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjM5Cittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NTAgbWlzYy90dW5lMmZzLmM6NjYyCittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjc0IG1pc2MvbWtlMmZzLmM6MjcwNCBtaXNjL3R1bmUyZnMuYzo2OTEgbWlzYy90dW5lMmZzLmM6NzA1Cittc2dpZCAiZG9uZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY4MQorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MDAKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNzEyIG1pc2MvdHVuZTJmcy5jOjQ2OAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MzAKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI3MzcKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjczOQorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTExCittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstUSBxdW90YV9vcHRpb25zXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDcKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY4Cittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6Mjc2Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzIwCittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyOAorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM3MSBtaXNjL3R1bmUyZnMuYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MzMKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ0MQorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4NworbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbm5vdFxuIgorImJlIGRpc2FibGVkIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHJlYWRvbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ5NQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MDkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIE1NUCBibG9jay4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTQxCittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU1MgorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjYxMgorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjU3Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjkzCittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjcwMgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjgwMworbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg2MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4OTEgbWlzYy90dW5lMmZzLmM6OTA0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMjQKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDMzCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE5NworIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI4MAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ2Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1MQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NjggcmVzaXplL3Jlc2l6ZTJmcy5jOjg3MAorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzcxCittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NzcKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc4MgorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODE0Cittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg0MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk2MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NjcKK21zZ2lkICJTaHJpbmtpbmcgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA2MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA2NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3MworbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDg1Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTMxCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNDkKK21zZ2lkICIiCisiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY4Cittc2dpZCAiVGhlIFVVSUQgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTk2Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDkKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTcKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjMzCittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjc0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNjYKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxODIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMjgKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI1OAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI3MworbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1rXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE1NAorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE3MgorbXNnaWQgImNvbm5lY3QiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5MQorbXNnaWQgIndyaXRlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTkKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQ3NiBtaXNjL3V1aWRkLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzMyBtaXNjL3V1aWRkLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ3Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHJlcGx5IGxlbmd0aCBmcm9tIHNlcnZlciAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjYKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjkKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjcyCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo3NQorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo3OAorbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjgxCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU1Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZCBhdFxuIgorInlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzM4IHJlc2l6ZS9tYWluLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzk0Cittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MDgKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1IGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MworbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjEwOAorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjExNworbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjEyNAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE1NiByZXNpemUvb25saW5lLmM6MTczCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE1OSByZXNpemUvb25saW5lLmM6MTc5Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTc2Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjI1Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2MzAKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjg3NQorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjE4NzMKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuOSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNAorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTMKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODQKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM0Cittc2dpZCAiSW5vZGUgZG9lcyBub3QgdXNlIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NQorbXNnaWQgIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9lbkBib2xkcXVvdC5oZWFkZXIgYi9lMmZzcHJvZ3MvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCkBAIC0wLDAgKzEsMjUgQEAKKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKyMKKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorIworIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjCisjIFRoaXMgY2F0YWxvZyBmdXJ0aGVybW9yZSBkaXNwbGF5cyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBxdW90YXRpb24gbWFya3MgaW4KKyMgYm9sZCBmYWNlLCBhc3N1bWluZyB0aGUgVlQxMDAvWFRlcm0gZXNjYXBlIHNlcXVlbmNlcy4KKyMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9lbkBxdW90LmhlYWRlciBiL2UyZnNwcm9ncy9wby9lbkBxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY0N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2VuQHF1b3QuaGVhZGVyCkBAIC0wLDAgKzEsMjIgQEAKKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKyMKKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKyMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCisjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgorIworIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisjIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vZXMuZ21vIGIvZTJmc3Byb2dzL3BvL2VzLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg3YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2VzLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vZXMucG8gYi9lMmZzcHJvZ3MvcG8vZXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0M2JhNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9lcy5wbwpAQCAtMCwwICsxLDcwNDcgQEAKKyMgTWVuc2FqZXMgZW4gZXNwYcOxb2wgcGFyYSBHTlUgZTJmc3Byb2dzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMKKyMgTWF4IGRlIE1lbmRpesOhYmFsIDxtYXhAdXBuLm14PiwgMjAwMywgMjAwNS4KKyMgQmVubm8gU2NodWxlbmJlcmcgPGJlbm5vQHZlcnRhYWx0Lm5sPiwgMjAwOC4KKyMKKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJPGJsa2NvdW50PgkJaW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzLTEuNDAuOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0wNi0xMiAxNDo0MC0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNi0wMSAyMzo1NiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCZW5ubyBTY2h1bGVuYmVyZyA8YmVubm9AdmVydGFhbHQubmw+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBlc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisKKyMgT2pvOiAiVG8gaWdub3JlIiBubyBlcyBpZ25vcmFyIHNpbm8gIm5vIHRlbmVyIGVuIGN1ZW50YSIsCisjICJwYXNhciBwb3IgYWx0byIsIGV0Yy4gWWEgc8OpIHF1ZSAiaWdub3JhciIgc2UgZW50aWVuZGUsIHBlcm8gc8OzbG8KKyMgcG9ycXVlIHN1IG1hbCB1c28gZXN0w6EgbXV5IGV4dGVuZGlkby4gc3YKKyMgwr9RdcOpIHRhbCAic2UgZGVzY2FydGEiPyBNZSBndXN0YXLDrWEgc2FiZXIgc2kgaGF5IGFsZ8O6biBnbG9zYXJpbyBkZQorIyBmcmFzZXMgcGFyYSB0cmFkdWNpciBwcm9ncmFtYXMgR05VLCBzb24gY29zYXMgcXVlIGRlYmVyw61hbiBzZXIKKyMgZXN0w6FuZGFyLiBtbQorIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIkVsIGJsb3F1ZSBkYcOxYWRvICV1IGVzdMOhIGZ1ZXJhIGRlbCBpbnRlcnZhbG87IHNlIGRlc2NhcnRhLlxuIgorCisjIEVuIGVsIEsmUiBzZSBoYWJsYSBkZSBub2RvLWkuIMK/Q3XDoWxlcyBzb24gbGFzIHJhem9uZXMgYSBmYXZvciB5IGVuIGNvbnRyYQorIyBkZSAibm9kbyBpIiBzb2JyZSAibm9kby1pIj8gc3YKKyMgRWwgcGx1cmFsLiBQZXJvIGVzdMOhIGJpZW4sIGFkb3B0byBsYSBjb252ZW5jacOzbiBLJlIuIG1tCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIHJldmlzYWJhIGxhIHNhbHVkIGRlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIyBZbyBwb25kcsOtYSBtZWpvciAiZWwgbm9kbyBpIGRlIGJsb3F1ZXMgZGHDsWFkb3MiLiBObyBzw6kgbXVjaG8gc29icmUgZWwKKyMgZm9ybWF0byBleHQyLCBwZXJvIGNyZW8gcXVlIGVzIG11eSBwb3NpYmxlIHF1ZSBoYXlhIHVuIG5vZG8taSBlc3BlY2lhbAorIyBjdXlhIHRhcmVhIHNlYSBwcmVjaXNhbWVudGUgbGEgZGUgcmVjb3JkYXIgY3XDoWxlcyBzb24gbG9zIGJsb3F1ZXMKKyMgZGHDsWFkb3MuIEludmVzdGlnYXJsbyBlbiBjYXNvIGRlIGR1ZGEuIHN2CisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9pc2Nhbi5jOjExMCBlMmZzY2svc2NhbnRlc3QuYzoxMDcKKyM6IGUyZnNjay91bml4LmM6MTI5OCBlMmZzY2svdW5peC5jOjEzODYgbWlzYy9iYWRibG9ja3MuYzoxMjE0CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjIgbWlzYy9iYWRibG9ja3MuYzoxMjM2IG1pc2MvYmFkYmxvY2tzLmM6MTI0OAorIzogbWlzYy9kdW1wZTJmcy5jOjU4OCBtaXNjL2UyaW1hZ2UuYzoxMTg5IG1pc2MvZTJpbWFnZS5jOjEzMDcKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMjAgbWlzYy9ta2UyZnMuYzoxOTIgbWlzYy90dW5lMmZzLmM6MTkwNyByZXNpemUvbWFpbi5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBhYnJpciB1bmEgdHViZXLDrWEgYSAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoxOTkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIHVuYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGRlc2RlIHVuIGZpY2hlcm8iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGFjdHVhbGl6YWJhIGVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zIgorCisjIFNvbGVtb3MgdHJhZHVjaXIgV2FybmluZyBwb3IgQXRlbmNpw7NuLiBzdgorIyBPaywgdW5pZm9ybWl6by4gbW0KKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBzZSBlbmNvbnRyw7MgdW4gYmxvcXVlIGlsZWdhbCAldSBlbiBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcy4gIgorIkxpbXBpYWRvLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGVsIGJsb3F1ZSAlbHUgKCVzKSBtaWVudHJhcyAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRXJyb3IgYWwgbGVlciBlbCBibG9xdWUgJWx1ICglcykuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJTZSBkZXNjYXJ0YSBlbCBlcnJvciIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJTZSBmdWVyemEgbGEgcmVlc2NyaXR1cmEiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBlbCBibG9xdWUgJWx1ICglcykgbWllbnRyYXMgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBlbCBibG9xdWUgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJibG9xdWVzIGRlIGRpcmVjdG9yaW8gdmFjw61vcyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJtYXBhIGRlIGRpcmVjdG9yaW9zIHZhY8OtbyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIkVsIGJsb3F1ZSBkZWwgZGlyZWN0b3JpbyAldSAoIyVkKSBlc3TDoSB2YWPDrW8gZW4gZWwgbm9kby1pICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIGZpY2hlcm8gbsO6bWVyb2RlYmxvcXVlcyB0YW1hw7FvZGVsYmxvcXVlXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIsKhTsO6bWVybyBpbnbDoWxpZG8gZGUgYmxvcXVlcyFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgZWwgYmxvcXVlIGRlbCBiw7pmZXIgKHRhbWHDsW89JWQpXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICJNb2RvIGRlIGVtcGxlbzogJXMgZGlzY29cbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiIgorIsKhTm8gZXN0w6EgaW1wbGVtZW50YWRvIGVsIGNvbnRyb2wgZGUgZW50cmFkYS9zYWxpZGEgZGVsIEJMS0ZMU0JVRiEgTm8gc2UgIgorInB1ZWRlbiB2YWNpYXIgbG9zIGLDumZlcnMuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAlcyBbLUZdIFstSSBibG9xdWVzX2RlbF9iw7pmZXJfZGVsX25vZG9faV0gZGlzcG9zaXRpdm9cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgIm1pZW50cmFzIHNlIGFicsOtYSAlcyBwYXJhIHN1IHZhY2lhZG8iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTM2IHJlc2l6ZS9tYWluLmM6Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIHZhY2lhciAlcyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTE5IGUyZnNjay9zY2FudGVzdC5jOjExNCBtaXNjL2UyaW1hZ2UuYzoxMDg0Cittc2dpZCAid2hpbGUgb3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbmljaWFiYSBsYSBleHBsb3JhY2nDs24gZGUgbG9zIG5vZG9zLWkiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMTAyCittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBvYnRlbsOtYSBlbCBub2RvLWkgc2lndWllbnRlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IG5vZG9zLWkgZXhwbG9yYWRvcy5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MTIKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJsZXllbmRvIGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXNcbiIKKworIyBPam86IE5vIGVzIHF1ZSBzZSBoYXlhIGVuY29udHJhZG8gdW4gc3VwZXJibG9xdWUgcXVlIHJlc3VsdGEgcXVlIG5vIGVzCisjIHbDoWxpZG8sIHNpbm8gcXVlIG5vIHNlIGhhIGVuY29udHJhZG8gbmluZ8O6biBzdXBlcmJsb3F1ZSBxdWUgc2VhIHbDoWxpZG8sCisjIHF1ZSBlcyBkaXN0aW50byAoYSBsbyBtZWpvciBubyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gc3VwZXJibG9xdWUKKyMgZW4gYWJzb2x1dG8pLiBDcmVvIHF1ZSBsYSB0cmFkdWNjacOzbiBkZWJlcsOtYSBjYW1iaWFyc2UuIHN2CisjIEVuIGVmZWN0bywgdGllbmVzIHRvZGEgbGEgcmF6w7NuLiBDb3JyZWdpZG8uIG1tCisjOiBlMmZzY2svam91cm5hbC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiIKKyIlczogbm8gc2UgZW5jb250csOzIHVuIHN1cGVyYmxvcXVlIHbDoWxpZG8gZW4gZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVzIGRlbWFzaWFkbyBjb3J0b1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiByZWN1cGVyYW5kbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiIKKyIlczogbm8gc2UgcHVlZGUgaGFjZXIgbGEgcmVjdXBlcmFjacOzbiBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVuIG1vZG8gIgorImRlIHPDs2xvIGxlY3R1cmFcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSByZWFicmlyICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHJpYnV0byBleHRlbmRpZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJvciBlbiBsYSByZXNlcnZhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb3F1ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCbWFwYSBkZSBiaXRzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2NvbXByZXNpw7NuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDRW50cmEgZW4gY29uZmxpY3RvIGNvbiBhbGfDum4gb3RybyBzaXN0ZW1hIGRlIGZpY2hlcm9zIEBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaW5vZG8taSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSWlsZWdhbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiamZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGJvcnJhZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZGRpcmVjdG9yaW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlZW50cmFkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUxhIEBlICclRG4nIHF1ZSBlc3TDoSBlbiAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZwYXJhIGVsIEBpICVpICglUSkgZXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoRWwgw4FSQk9MLUggZGVsIEBpIGRlbCBAZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGVzIHVuIGVubGFjZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibXJlY2xhbWFkbyBlbiBtw7psdGlwbGVzIG9jYXNpb25lcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibmludsOhbGlkbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm9odcOpcmZhbm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibGVtYSBlbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIHJhw616IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNkZWJlcsOtYSBzZXIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlckBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1ZGVzYWNvcGxhZG8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidmRpc3Bvc2l0aXZvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorIywgZnV6enkKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJlZW50cmFkYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpsb25naXR1ZCBjZXJvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RvLWkgTlVMTz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEVsIG5vZG8taSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RvLWkgZGVzY3JpcHRvciBkZWwgZ3J1cG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlbCBjYXJnYWRvciBkZSBhcnJhbnF1ZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8RWwgbm9kby1pIGRlbCBkaXJlY3RvcmlvIGRlIGRlc2JvcnJhZG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RvLWkgZGVzY3JpcHRvciBkZWwgZ3J1cG8+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxFbCBub2RvLWkgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8U2UgaGEgcmVzZXJ2YWRvIGVsIG5vZG8taSA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8U2UgaGEgcmVzZXJ2YWRvIGVsIG5vZG8taSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJmaWNoZXJvIHJlZ3VsYXIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJkaXJlY3RvcmlvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNworbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgImRpc3Bvc2l0aXZvIGRlIGNhcmFjdGVyZXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM5Cittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJkaXNwb3NpdGl2byBkZSBibG9xdWUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQxCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAidHViZXLDrWEgZGVzaWduYWRhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MworbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImVubGFjZSBzaW1iw7NsaWNvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICJ6w7NjYWxvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJ0aXBvIGRlIGZpY2hlcm8gZGVzY29ub2NpZG8gY29uIG1vZG8gMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMworIywgZnV6enkKK21zZ2lkICJpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAibGV5ZW5kbyBibG9xdWUgZGUgZGlyZWN0b3JpbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKKyMsIGZ1enp5Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJsZXllbmRvIGJsb3F1ZSBkZSBkaXJlY3RvcmlvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNworIywgZnV6enkKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImxleWVuZG8gYmxvcXVlIGRlIGRpcmVjdG9yaW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIlJldWJpY2FuZG8gYmxvcXVlcyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmJsb3F1ZSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGRlIG5vZG9zLWkgcmVjbGFtYWRvcyBlbiBtw7psdGlwbGVzIG9jYXNpb25lcyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYxMCBlMmZzY2svcGFzczFiLmM6NzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImVycm9yIGludGVybm86IG5vIHNlIGVuY29udHLDsyBlbCBkdXBfYmxrIHBhcmEgJXVcbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjgyMAorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAicmVncmVzYWRvIGRlbCBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubzogbm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGRpcl9pbmZvIHBhcmEgJWkuXG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubzogbm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGRpcl9pbmZvIHBhcmEgJWkuXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NiBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAibGV5ZW5kbyBibG9xdWUgZGUgZGlyZWN0b3JpbyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NTk5Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rvcy1pIHVzYWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjEwCittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rvcy1pIGRlIGRpcmVjdG9yaW8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyMAorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kb3MtaSBkZSBmaWNoZXJvcyBub3JtYWxlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjI5Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBibG9xdWVzIHVzYWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk2Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJpbmljaWFuZG8gbGEgZXhwbG9yYWNpw7NuIGRlIGxvcyBub2Rvcy1pIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJvYnRlbmllbmRvIGVsIHNpZ3VpZW50ZSBub2RvLWkgcGFyYSBleGFtaW5hciIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI0MAorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzbyAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjk3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJsZXllbmRvIGJsb3F1ZXMgaW5kaXJlY3RvcyBkZWwgbm9kby1pICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ3Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBub2Rvcy1pIGRhw7FhZG9zIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzcwCittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiZWwgbm9kby1pIGVzdMOhIGVuIGVsIG1hcGEgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM5MAorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgZGUgbm9kb3MtaSBjb24gJ2ltYWdpYyciCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTcKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwYSBkZSBibG9xdWVzIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MTgKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgZGUgYmxvcXVlcyBkZSBhdHJpYnV0b3MgZXh0ZW5kaWRvcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjYyNworbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibWFwYSBkZSBiaXRzIGRlIGJsb3F1ZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2MzMKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1hcGEgZGUgYml0cyBkZSBub2Rvcy1pIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjM5Cittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgInRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUGFzbyAyIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDUKKyMsIGZ1enp5Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBjb250aW51YXIsIHNlIGZpbmFsaXphLlxuIgorIlxuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJtYXBhIGRlIGJpdHMgZGUgbm9kb3MtaSBwYXNhZG9zIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJNZW1vcmlhIHBpY28iCisKKyM6IGUyZnNjay9wYXNzMy5jOjEzNgorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiUGFzbyAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgIm1hcGEgZGUgYml0cyBkZSBkZXRlY2Npw7NuIGRlIGNpY2xvcyBkZSBub2Rvcy1pIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTUKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIlBhc28gNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlBhc28gNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIobm8gaGF5IGN1cnNvcikiCisKKyMgWW8gcG9uZHLDrWEgbWVqb3IgIkFycmVnbGFyIiwgeWEgcXVlIGVzIHVuYSBwcmVndW50YSBxdWUgaGFjZSBxdWUgcXVlZGFyw61hCisjIG1lam9yIGVuIGZvcm1hIGltcGVyc29uYWwuIEbDrWphdGUgcXVlIHRvZG9zIGxvcyBkZW3DoXMgdmVyYm9zIHF1ZSBzaWd1ZW4KKyMgZXN0w6FuIGVuIGluZmluaXRpdm8uCisjIENpZXJ0by4gbW0KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIkFycmVnbGFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIkJvcnJhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJSZXViaWNhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJSZXNlcnZhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiRXhwYW5kaXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJDb25lY3RhciBhIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OQorbXNnaWQgIlNhbHZhZ2UiCittc2dzdHIgIlJlY3VwZXJhciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJUcnVuY2FyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIkJvcnJhciBub2RvLWkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiSW50ZXJydW1waXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGl2aWRpciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJDb250aW51YXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiQ2xvbmFyIGxvcyBibG9xdWVzIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiQm9ycmFyIGZpY2hlcm8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiRWxpbWluYXIgbWVuc2FqZXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkRlc3ZpbmN1bGFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkJvcnJhciBlbCDDrW5kaWNlIGRlbCDDoXJib2wtSCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJSZWNyZWFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoTklOR1VOTykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiQVJSRUdMQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiQk9SUkFETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUkVVQklDQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICJSRVNFUlZBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiRVhQQU5ESURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlJFQ09ORUNUQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiQ1JFQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIlJFQ1VQRVJBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIlRSVU5DQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiTk9ETy1JIEJPUlJBRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJJTlRFUlJVTVBJRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiRElWSURJRE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJDT05USU5VQU5ETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiU0UgQ0xPTkFST04gTE9TIEJMT1FVRVMgUkVDTEFNQURPUyBFTiBNw5pMVElQTEVTIE9DQVNJT05FUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiRklDSEVSTyBCT1JSQURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiU1VQUklNSURPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkRFU1ZJTkNVTEFETyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIlNFIEJPUlLDkyBFTCDDjU5ESUNFIERFTCDDgVJCT0wtSCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlNFIFJFQ1JFQVLDgSIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiIgorIkVsIG1hcGEgZGUgYml0cyBkZSBibG9xdWVzIHBhcmEgZWwgZ3J1cG8gJWcgbm8gZXN0w6EgZW4gZWwgZ3J1cG8uICAoYmxvcXVlICIKKyIlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiIgorIkVsIG1hcGEgZGUgYml0cyBkZSBub2Rvcy1pIHBhcmEgZWwgZ3J1cG8gJWcgbm8gZXN0w6EgZW4gZWwgZ3J1cG8uICAoYmxvcXVlICIKKyIlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiTGEgdGFibGEgZGUgbm9kb3MtaSBwYXJhIGVsIEBnICVnIG5vIGVzdMOhIGVuIGVsIEBnLiAgKEBiICViKVxuIgorIkFURU5DScOTTjogRVMgUE9TSUJMRSBRVUUgSEFZQSBVTkEgUMOJUkRJREEgREUgREFUT1MgU0VWRVJBLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgJVMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBAUyBwb2Ryw61hIG5vIHNlciBsZWlkbyBvIG5vIGRlc2NyaWJlIHVuIEBmIGV4dDIgY29ycmVjdG8uXG4iCisiU2kgZWwgQHYgZXMgdsOhbGlkbyB5IGVuIHZlcmRhZCBjb250aWVuZSB1biBAZiBleHQyICh5IG5vIHVubyBcbiIKKyJkZSBpbnRlcmNhbWJpbywgdWZzIG8gYWxnbyBtw6FzKSwgZW50b25jZXMgZWwgQFMgZXN0w6EgY29ycm9tcGlkb1xuIgorInkgcG9kcsOtYSBpbnRlbnRhcnNlIGVqZWN1dGFyIGVsIGUyZnNjayBjb24gdW4gQFMgYWx0ZXJuYXRpdm86XG4iCisiICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxbyBkZWwgQGYgKGRlIGFjdWVyZG8gY29uIGVsIEBTKSBlcyBkZSAlYiBAYnNcbiIKKyJFbCB0YW1hw7FvIGbDrXNpY28gZGVsIEB2IGVzIGRlICVjIEBic1xuIgorIsKhUHVlZGUgc2VyIHF1ZSBlbCBAUywgbyBsYSB0YWJsYSBkZSBwYXJ0aWNpb25lcywgZXN0w6luIGNvcnJ1cHRvcyFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxb19kZWxfQGIgZGVsIEBTIGVzICViLCBlbCB0YW1hw7FvIGRlbCBmcmFnbWVudG8gPSAlYy5cbiIKKyJFc3RhIHZlcnNpw7NuIGRlIGUyZnNjayBubyB0aWVuZSBpbXBsZW1lbnRhZG8gZWwgbWFuZWpvIGRlXG4iCisidGFtYcOxb3MgZGUgZnJhZ21lbnRvIGRpc3RpbnRvcyBhbCBkZWwgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkVsIEBic19wZXJfZ3JvdXAgZGVsIEBTID0gJWIgeSBkZWJlcsOtYSBoYWJlciBzaWRvICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkVsIGZpcnN0X2RhdGFfQGIgZGVsIEBTID0gJWIgeSBkZWJlcsOtYSBoYWJlciBzaWRvICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NQorbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiRWwgQGYgbm8gdGllbmUgdW4gVVVJRDsgc2UgZ2VuZXJhcsOhIHVuby5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJOb3RhOiBzaSB2YXJpb3MgYmxvcXVlcyBkZSBtYXBhcyBkZSBiaXRzIChkZSBub2Rvcy1pIG8gZGUgYmxvcXVlcylcbiIKKyJvIHBhcnRlIGRlIGxhIHRhYmxhIGRlIG5vZG9zLWkgbmVjZXNpdGFuIHJldWJpY2FjacOzbixcbiIKKyJlcyBwb3NpYmxlIHF1ZSBwcmltZXJvIHNlIHF1aWVyYSBpbnRlbnRhciBlamVjdXRhciBlMmZzY2sgY29uXG4iCisibGEgb3BjacOzbiAnLWIgJVMnLiBFbCBwcm9ibGVtYSBwb2Ryw61hIGVzdGFyIMO6bmljYW1lbnRlIGVuIGVsXG4iCisiZGVzY3JpcHRvciBwcmltYXJpbyBkZWwgZ3J1cG8gZGUgYmxvcXVlcyB5IHBvc2libGVtZW50ZSBlbFxuIgorImRlc2NyaXB0b3IgZGVsIGdydXBvIGRlIGJsb3F1ZXMgZGUgcmVzcGFsZG8gcHVkaWVyYSBlc3RhciBiaWVuLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5Cittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiRWwgQFMgZXN0w6EgY29ycnVwdG8uICAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgQHYgZsOtc2ljbzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3OQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiTGEgY3VlbnRhIEBpIGVuIGVsIEBTIGVzICVpLCBAcyAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODMKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJFbCBIdXJkIG5vIHRpZW5lIGltcGxlbWVudGFkYSBsYSBvcGNpw7NuIGRlIHRpcG9zIGRlIGZpY2hlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkBTIHRpZW5lIHVuIEBqIGV4dDMgQG4gKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJFbCBAaiBleHRlcm5vIHRpZW5lIHZhcmlvcyB1c3VhcmlvcyBkZWwgQGYgKG5vIGltcGxlbWVudGFkbykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiTm8gcHVlZG8gZW5jb250cmFyIHVuIEBqIGV4dGVybm9cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybm8gdGllbmUgdW4gQFMgZGHDsWFkb1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkVsIEBqIGV4dGVybm8gbm8gdGllbmUgaW1wbGVtZW50YWRvIGVzdGUgQGZcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTMKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJFbCBAUyBkZWwgQGogZXh0MyBlcyBkZSB1biB0aXBvIGRlc2Nvbm9jaWRvICVOIChubyBpbXBsZW1lbnRhZG8pLlxuIgorIkVzIHBvc2libGUgcXVlIHN1IGNvcGlhIGRlIGUyZnNjayBzZWEgbXV5IGFudGlndWEgeS9vIG5vIHRlbmdhIGltcGxlbWVudGFkb1xuIgorImVzdGUgZm9ybWF0byBkZSBAai5cbiIKKyJUYW1iacOpbiBlcyBwb3NpYmxlIHF1ZSBlbCBAUyBkZWwgQGogZXN0w6kgY29ycnVwdG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorIywgZnV6enkKK21zZ2lkICJAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICJFbCBAUyBkZWwgQGogZXh0MyBlc3TDoSBjb3JydXB0by5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgZGUgcmVjdXBlcmFjacOzbiBkZWwgZXh0MyBlc3TDoSBsaW1waWEsIHBlcm8gZWwgQGpcbiIKKyJjb250aWVuZSBpbmZvcm1hY2nDs24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMxCisjLCBmdXp6eQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiIgorIkVsIEBTIHRpZW5lIGV4dDMgeSBsYSBiYW5kZXJhIG5lZWRfcmVjb3ZlcnkgZXN0w6EgYWN0aXZhZGEsIHBlcm8gbm8gaGF5IEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIiIKKyJMYSBiYW5kZXJhIGRlIHJlY3VwZXJhY2nDs24gZGVsIGV4dDMgZXN0w6EgbGltcGlhLCBwZXJvIGVsIEBqXG4iCisiY29udGllbmUgaW5mb3JtYWNpw7NuLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJCb3JyYXIgZWwgQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDYgZTJmc2NrL3Byb2JsZW0uYzo2OTUKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorIkVsIEBmIHRpZW5lIHVuYShzKSBiYW5kZXJhKHMpIGVzcGVjaWFsKGVzKSwgcGVybyBlcyB1bmEgcmV2aXNpw7NuIDAgZGVsIEBmLiAgIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBpIEBvICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RvPSVJbSwgdGFtYcOxbz0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKKyMsIGZ1enp5Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgZW5jb250cmFkbyBlbiB1biBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCisjLCBmdXp6eQorbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJZYSBzZSBib3Jyw7MgZWwgQGIgIyVCICglYikgZW5jb250cmFkbyBlbiBlbCBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQGkgQG8gQEkgJWkgZW4gZWwgQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiQGkgQEkgJWkgZW4gbGEgbGlzdGEgZGUgQGkgQG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKyJFbCBAUyBkZWwgQGogZXh0MyB0aWVuZSBwdWVzdGEgdW5hIGJhbmRlcmEgZGVzY29ub2NpZGEgZW4gdW5hIGNhcmFjdGVyw61zdGljYSAiCisiZGUgc8OzbG8gbGVjdHVyYS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MQorIywgZnV6enkKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIkVsIEBTIGRlbCBAaiBleHQzIHRpZW5lIHB1ZXN0YSB1bmEgYmFuZGVyYSBkZXNjb25vY2lkYSBlbiB1bmEgY2FyYWN0ZXLDrXN0aWNhICIKKyJpbmNvbXBhdGlibGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiTGEgdmVyc2nDs24gZGVsIEBqIG5vIGVzdMOhIGltcGxlbWVudGFkYSBlbiBlc3RlIGUyZnNjay5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb3ZpZW5kbyBlbCBAaiBkZSAvJXMgYSB1biBub2RvLWkgb2N1bHRvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJFcnJvciBtb3ZpZW5kbyBlbCBAajogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAxCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNlIGVuY29udHJhcm9uIGNhbXBvcyBWMiBubyB2w6FsaWRvcyBlbiBlbCBAaiBkZWwgQFNcbiIKKyIoZGVsIFYxIGRlbCBAaikuXG4iCisiQm9ycmFuZG8gbG9zIGNhbXBvcyBxdWUgZXhjZWRlbiBsYSBWMSBkZWwgQGogZGVsIEBTLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJFamVjdXRhciBlbCBAaiBkZSB0b2RhcyBmb3JtYXMiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgZGUgcmVjdXBlcmFjacOzbiBubyBlc3TDoSBhY3RpdmFkYSBlbiBlbCBAUyBkZSByZXNwYWxkbyxcbiIKKyJwb3IgZXNvIHNlIGVqZWN1dGFyw6EgZGUgdG9kYXMgbWFuZXJhcyBlbCBAai5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTcKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlJlc3BhbGRhbmRvIGxhIGluZm9ybWFjacOzbiBkZWwgQGosIGVsIEBpIHkgZWwgQGIuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzIyCittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkVsIEBmIG5vIHRpZW5lICdyZXNpemVfaW5vZGUnIGhhYmlsaXRhZG8sIHBlcm8gJ3NfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcydcbiIKKyJlcyAlTjsgZGViZXLDrWEgc2VyIGNlcm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiIgorIkVsICdyZXNpemVfaW5vZGUnIG5vIGVzdMOhIGhhYmlsaXRhZG8sIHBlcm8gZWwgbm9kby1pIGRlIGNhbWJpbyBkZWwgdGFtYcOxbyBubyAiCisiZXMgY2Vyby4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJFbCBub2RvLWkgZGUgY2FtYmlvIGRlbCB0YW1hw7FvIG5vIGVzIHbDoWxpZG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiTGEgw7psdGltYSB2ZXogcXVlIHNlIG1vbnTDsyBlbCBzdXBlcmJsb3F1ZSBlcyBlbiBlbCBmdXR1cm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDMKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiTGEgw7psdGltYSB2ZXogcXVlIHNlIGVzY3JpYmnDsyBlbiBlbCBzdXBlcmJsb3F1ZSBlcyBlbiBlbCBmdXR1cm8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIkxhIHBpc3RhIGRlIHN1cGVyYmxvcXVlIHBhcmEgdW4gc3VwZXJibG9xdWUgZXh0ZXJubyBkZWJlcsOtYSBzZXIgJVguICAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzUyCittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBZ3JlZ2FuZG8gbGEgcGlzdGEgZGlyaGFzaCBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzcyCittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MQorbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkgIAorIzogZTJmc2NrL3Byb2JsZW0uYzozODYKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTIKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5ICIKKyJzZXQpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICJTZSBwb25lIGxhIGNhbnRpZGFkIGRlIGJsb3F1ZXMgcmVzZXJ2YWRvcyBhICVsdVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4CisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAYnMgY291bnQgdG8gJWMgKHdhcyAlYilcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBjYW50aWRhZCBkZSBibG9xdWVzIHJlc2VydmFkb3MgYSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworIywgZnV6enkKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKyJNb3ZpZW5kbyBlbCBAaiBkZSAvJXMgYSB1biBub2RvLWkgb2N1bHRvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTgKKyMsIGZ1enp5Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJ0YW1hw7FvIGRlbCBibG9xdWUgaW52w6FsaWRvIC0gJXMiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMworbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIyBQcmVmaWVybyBlbCBpbmZpbml0aXZvLCBwZXJvIGhheSBvY2FzaW9uZXMgZW4gcXVlIGVsIGdlcnVuZGlvIGVzCisjIGluZGlzcGVuc2FibGUsIGNvbW8gcG9yIGVqZW1wbG8gInZlcmlmaWNhbmRvIiwgInJldmlzYW5kbyIsIGVuIGRvbmRlCisjIGRhIGxhIGltcHJlc2nDs24gZGUgcXVlIGVuIGVzZSBtb21lbnRvIHNlIGVzdMOhbiBoYWNpZW5kbyBsYXMgY29zYXMuCisjIEVuIGVzdGUgY2FzbyBlbiBwYXJ0aWN1bGFyLCBjcmVvIHF1ZSBlcyBjb252ZW5pZW50ZSBlbCBnZXJ1bmRpby4gbW0KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQYXNvIDE6IFZlcmlmaWNhbmRvIG5vZG9zLWksIEBicyB5IHRhbWHDsW9zXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJlbCBAciBubyBlcyB1biBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5Cittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICIiCisiZWwgQHIgdGllbmUgcHVlc3RvIGVsIGR0aW1lIChwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIHVuYSB2ZXJzacOzbiBhbnRpZ3VhIGRlbCAiCisibWtlMmZzKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkVsIEBpIHJlc2VydmFkbyAlaSAlUSB0aWVuZSB1biBtb2RvIGluY29ycmVjdG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJAaSAlaSBARCwgdGllbmUgdW4gZHRpbWUgY2Vyby4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiQGkgJWkgZXN0w6EgZW4gdXNvLCBwZXJvIHRpZW5lIHB1ZXN0byBkdGltZS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIkBpICVpIGVzIHVuIEBkIGNvbiBAei4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzQKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAYiBkZWwgQEIgZGVsIEBnICVnIEBDIGVzdMOhIGVuICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3OQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkVsIEBpIGRlbCBAQiBkZWwgQGcgJWcgQEMgZW4gJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODQKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJMYSB0YWJsYSBkZSBAaSBkZWwgQGcgJWcgQEMgZW4gJWIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4OQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkVsIEBiIGRlbCBAQiAoJUIpIGRlbCBAZyAlZyBlc3TDoSBkYcOxYWRvLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJFbCBAaSBkZWwgQEIgKCVCKSBkZWwgQGcgJWcgZXN0w6EgZGHDsWFkby4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTkKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUgZXMgJUlzLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNAorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9AYnMgZXMgJUliLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJASSBAYiAjJUIgKCViKSBlbiBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNAorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICJAYiAjJUIgKCViKSBzZSBlbmNpbWEgY29uIGxvcyBtZXRhZGF0b3MgZGVsIEBmIGVuIGVsIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBpICVpIHRpZW5lIEBiKHMpIGludsOhbGlkbyhzKS4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJEZW1hc2lhZG9zIEBicyBpbnbDoWxpZG9zIGVuIGVsIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgZW4gZWwgQGIgZGVsIEBpIGRhw7FhZG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzQKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBiIGRlbCBAaSBkYcOxYWRvIHRpZW5lIEBiKHMpIGludsOhbGlkbyhzKS4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM5Cittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIsKhQGIgZHVwbGljYWRvIG8gZGHDsWFkbyBlc3TDoSBlbiB1c28hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDQKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIkVsIEBiICViIGRhw7FhZG8gc2UgdXNhIGRlIGZvcm1hIGluZGlyZWN0YSBjb21vIEBiIGRlbCBAaS4gICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgbm9kby1pIGRlIGJsb3F1ZXMgZGHDsWFkb3MgcHJvYmFibGVtZW50ZSBoYXlhIHNpZG8gY29ycm9tcGlkby5cbiIKKyJQcm9iYWJsZW1lbnRlIHNlIGRlYmVyw61hIGRldGVuZXIgYWhvcmEgZWwgcHJvZ3JhbWEgeSBlamVjdXRhclxuIgorImUyZnNjayAtYyBwYXJhIGJ1c2NhciBibG9xdWVzIGRhw7FhZG9zIGVuIGVsIEBmLlxuIgorCisjIE11Y2hhcyBvcmFjaW9uZXMgZW4gcGFzaXZhIGVuIGluZ2zDqXMgcXVlZGFuIG1lam9yIGVuIGZvcm1hIHJlZmxleGl2YQorIyBjdWFuZG8gc2UgdHJhZHVjZW4uCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpIGVsIEBiIGVzdMOhIHJlYWxtZW50ZSBkYcOxYWRvLCBlbCBAZiBubyBzZSBwdWVkZSBhcnJlZ2xhci5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiU2UgcHVlZGUgYm9ycmFyIGVzdGUgQGIgZGUgbGEgbGlzdGEgZGUgQGJzIHkgZXNwZXJhclxuIgorInF1ZSBlbCBAYiBlc3TDqSBjb3JyZWN0by4gIFBlcm8gbm8gaGF5IG5pbmd1bmEgZ2FyYW50w61hLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJFbCBAUyBwcmltYXJpbyAoJWIpIGVzdMOhIGVuIGxhIGxpc3RhIGRlIEBicyBkYcOxYWRvcy5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcyCittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyJFbCBibG9xdWUgJWIgZW4gbG9zIGRlc2NyaXB0b3JlcyBwcmltYXJpb3MgZGVsIEBnIGVzdMOhIGVuIGxhIGxpc3RhIGRlIEBicyAiCisiZGHDsWFkb3NcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIkF0ZW5jacOzbjogZWwgQFMgKCVCKSBkZWwgZ3J1cG8gJWcgZXN0w6EgZGHDsWFkby5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBsYSBjb3BpYSBkZSBsb3MgZGVzY3JpcHRvcmVzIGRlbCBAZyAlZyB0aWVuZSB1biBAYiAoJWIpIGRhw7FhZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKyLCv1NlcsOhIHVuIGVycm9yIGRlIHByb2dyYW1hY2nDs24/ICBFbCBAYiAjJWIgc2UgcmVjbGFtYSBzaW4gcmF6w7NuIGVuIGVsICIKKyJwcm9jZXNzX2JhZF9ibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQEEgJU4sIGVzIGNvbnRpZ3VhIGEgbG9zIEBicyBlbiBlbCBAYiBkZWwgQGcgJWcgcGFyYSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkBBIGRlbCBiw7pmZXIgZGVsIEBiIHBvciByZXViaWNhciAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlJldWJpY2FuZG8gJXMgZGVsIEBnICVnIGRlICViIGEgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJSZXViaWNhbmRvIGVsIEBnICVnIGRlICVzIGhhY2lhICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJBdGVuY2nDs246IG5vIHNlIHB1ZWRlIGxlZXIgZWwgQGIgJWIgZGUgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIwCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQXRlbmNpw7NuOiBubyBzZSBwdWVkZSBlc2NyaWJpciBlbCBAYiAlYiBwYXJhICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NjAKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJIYXkgdW4gQEEgZGVsIEBCIGRlbCBAaSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzMAorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkhheSB1biBAQSBkZWwgQGIgZGVsIEBCICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJAQSBlbiBsYSBjdWVudGEtaSBkZSBsYSBpbmZvcm1hY2nDs24gZGVsIGVubGFjZTogJW1cbiIKKworIyBhcnJheSAtPiBtYXRyaXoKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgZWwgYXJyZWdsbyBkZWwgQGIgZGUgQGRzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1pZW50cmFzIHNlIGV4cGxvcmFiYSBlbCBAaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaXRlcmFiYSBzb2JyZSBsb3MgQGJzIGVuIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBndWFyZGFyIGxhIGluZm9ybWFjacOzbiBkZSBsYSBjdWVudGEgZGVsIEBpIChAaT0laSwgY3VlbnRhPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjAKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBndWFyZGFyIGxhIGluZm9ybWFjacOzbiBkZWwgQGIgZGUgQGRzIChAaT0laSwgQGI9JWIsIG7Dum09JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSB0aWVuZSBwdWVzdGEgbGEgYmFuZGVyYSBpbWFnaWMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJFbCBmaWNoZXJvIGVzcGVjaWFsIChkaXNwb3NpdGl2by96w7NjYWxvL2ZpZm8vZW5sYWNlIHPDrW1ib2xpY28pIChAaSAlaSlcbiIKKyJubyBlcyBtb2RpZmljYWJsZSBvIHRpZW5lIGxhIGJhbmRlcmEgJ2FwcGVuZC1vbmx5JyAoc8OzbG8gYcOxYWRpcikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiIgorImVsIEBpICVpIHRpZW5lIGxhIGJhbmRlcmEgZGUgQGMgcHVlc3RhIGVuIGVsIEBmIHNpbiBxdWUgbGEgQGMgZXN0w6kgIgorImltcGxlbWVudGFkYS4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICIiCisiRWwgZmljaGVybyBlc3BlY2lhbCAoZGlzcG9zaXRpdm8vesOzY2Fsby9maWZvKSAoQGkgJWkpXG4iCisidGllbmUgdW4gdGFtYcOxbyBkaXN0aW50byBkZSBjZXJvLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJFbCBAaSBkZWwgQGogbm8gZXN0w6EgZW4gdXNvLCBwZXJvIGNvbnRpZW5lIGluZm9ybWFjacOzbi4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgImVsIEBqIG5vIGVzIHVuIGZpY2hlcm8gcmVndWxhci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIHdhcyBwYXJ0IG9mIHRoZSBAbyBAaSBsaXN0LiAgIgorbXNnc3RyICJlbCBAaSAlaSBlcmEgcGFydGUgZGUgbGEgbGlzdGEgZGUgbm9kb3MtaSBAb3MuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE2Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiIgorIkxvcyBub2Rvcy1pIGZ1ZXJvbiBwYXJ0ZSBkZSB1bmEgbGlzdGEgZW5sYXphZGEgcXVlIGVzdGFiYSBodcOpcmZhbmEgeSAiCisiZGHDsWFkYS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjEKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgZGUgbGEgZXN0cnVjdHVyYSByZWZjb3VudCAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgZWwgQGIgZGVsIEBhICViIHBhcmEgZWwgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJAaSAlaSB0aWVuZSB1biBAYiBkZWwgQGEgJWIgZGHDsWFkby4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgZWwgQGIgZGVsIEBhICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJFbCBAYiBkZWwgQGEgJWIgdGllbmUgdW5hIGN1ZW50YSBkZSByZWZlcmVuY2lhICVCIHkgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBlbCBAYiBkZSBAYSAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTEKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJFbCBAYiBkZWwgQGEgJWIgdGllbmUgaF9AYnMgPiAxLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQEEgZGUgQGEgQGIgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJlbCBAYiBkZWwgQGEgJWIgZXN0w6EgZGHDsWFkbyAoaHVibyB1bmEgY29saXNpw7NuIGVuIGxhIHJlc2VydmEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjYKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiZWwgQGIgZGVsIEBhICViIGVzdMOhIGRhw7FhZG8gKG5vbWJyZSBubyB2w6FsaWRvKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiZWwgQGIgZGVsIEBhICViIGVzdMOhIGRhw7FhZG8gKHZhbG9yIG5vIHbDoWxpZG8pLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJlbCBAaSAlaSBlcyBtdXkgZ3JhbmRlLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODAKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiZWwgQGIgIyVCICglYikgY2F1c2EgcXVlIGVsIEBkIHNlYSBtdXkgZ3JhbmRlLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgImVsIEBiICMlQiAoJWIpIGNhdXNhIHF1ZSBlbCBmaWNoZXJvIHNlYSBtdXkgZ3JhbmRlLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgImVsIEBiICMlQiAoJWIpIGNhdXNhIHF1ZSBlbCBlbmxhY2Ugc2ltYsOzbGljbyBzZWEgbXV5IGdyYW5kZS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICIiCisiZWwgQGkgJWkgdGllbmUgbGEgYmFuZGVyYSBJTkRFWF9GTCBwdWVzdGEgZW4gZWwgQGYgc2luIGVsIMOhcmJvbC1oICIKKyJpbXBsZW1lbnRhZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJAaSAlaSB0aWVuZSBwdWVzdGEgbGEgYmFuZGVyYSBJTkRFWF9GTCBwZXJvIG5vIGVzIHVuIEBkLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJFbCBAaCAlaSB0aWVuZSB1biBub2RvIHJhw616IG5vIHbDoWxpZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTAKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiRWwgQGggJWkgdGllbmUgdW5hIHZlcnNpw7NuIGRlIGhhc2ggbm8gaW1wbGVtZW50YWRhICglTilcbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkVsIEBoICVpIHV0aWxpemEgdW5hIGJhbmRlcmEgaW5jb21wYXRpYmxlIHBhcmEgZWwgbm9kbyByYcOteiBkZWwgw6FyYm9sIGguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkVsIEBoICVpIHRpZW5lIHVuYSBwcm9mdW5kaWRhZCAoJU4pIG11eSBncmFuZGVcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkVsIEBpIGRlbCBAYiBlc3TDoSBkYcOxYWRvIHkgdGllbmUgdW4gQGIgaW5kaXJlY3RvICglYikgcXVlXG4iCisiZW50cmEgZW4gY29uZmxpY3RvIGNvbiBsYSBtZXRhaW5mb3JtYWNpw7NuIGRlbCBAZi4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiRmFsbMOzIGxhIChyZSljcmVhY2nDs24gZGVsIG5vZG8taSBkZSBjYW1iaW8gZGUgdGFtYcOxbzogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIEBpICVpIHRpZW5lIHVuIHRhbWHDsW8gYWRpY2lvbmFsICglSVMpIHF1ZSBlcyBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWwgQGEgZW4gZWwgQGkgJWkgdGllbmUgdW5hIGxvbmdpdHVkIGRlIG5vbWJyZSAoJU4pIHF1ZSBlcyBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIEBhIGVuIEBpICVpIHRpZW5lIHVuIHZhbG9yIGRlIGRlc3BsYXphbWllbnRvICglTikgcXVlIGVzIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIkVsIEBhIGVuIGVsIEBpICVpIHRpZW5lIHVuIHZhbG9yIGRlIEBiICglTikgcXVlIGVzIEBuIChkZWJlIHNlciAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWwgQGEgZW4gZWwgQGkgJWkgdGllbmUgdW4gdmFsb3IgZGUgdGFtYcOxbyAoJU4pIHF1ZSBlcyBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjEKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVsIEBhIGVuIGVsIEBpICVpIHRpZW5lIHVuYSBsb25naXR1ZCBkZSBub21icmUgKCVOKSBxdWUgZXMgQG5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiTm9kby1pICVpIGVzdMOhIG1hcmNhZG8gY29tbyB1biAlSXQgcGVybyBwYXJlY2Ugc2VyIHVuIGRpcmVjdG9yaW8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtaWVudHJhcyBzZSBpdGVyYWJhIHNvYnJlIGxvcyBAYnMgZW4gZWwgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc2Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4NworbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJlbCBAaSAlaSB0aWVuZSBsYSBiYW5kZXJhIElOREVYX0ZMIHB1ZXN0YSBlbiBlbCBAZiBzaW4gZWwgw6FyYm9sLWggIgorImltcGxlbWVudGFkby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEyCittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTYKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGl0ZXJhciBzb2JyZSBsb3MgQGJzIGRlbCBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiZWwgQGogbm8gZXMgdW4gZmljaGVybyByZWd1bGFyLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkVsIEBpIGRlbCBAaiBubyBlc3TDoSBlbiB1c28sIHBlcm8gY29udGllbmUgaW5mb3JtYWNpw7NuLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzNgorIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJAaSAlaSBlc3TDoSBlbiB1c28sIHBlcm8gdGllbmUgcHVlc3RvIGR0aW1lLiAgIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQxCisjLCBmdXp6eQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIjxFbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcz4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDYKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiU2UgZWplY3V0YW4gcGFzb3MgYWRpY2lvbmFsZXMgcGFyYSByZXNvbHZlciBsb3MgQGJzIHJlY2xhbWFkb3MgcG9yIG3DoXMgZGUgdW4gIgorIkBpLi4uXG4iCisiUGFzbyAxQjogU2UgdnVlbHZlbiBhIGV4cGxvcmFyIHBhcmEgbG9zIEBicyByZWNsYW1hZG9zIGVuIG3Dumx0aXBsZXMgIgorIm9jYXNpb25lc1xuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJCbG9xdWUocykgcmVjbGFtYWRvKHMpIGVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzIGVuIG5vZG8tICVpLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgZXhwbG9yYWJhbiBsb3Mgbm9kb3MtaSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgZGVsIEBCIGRlbCBAaSAoQGlfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaXRlcmFiYSBzb2JyZSBsb3MgQGJzIGVuIGVsIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg5IGUyZnNjay9wcm9ibGVtLmM6MTMwNAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yIGFsIGFqdXN0YXIgbGEgY3VlbnRhIGRlIHJlZmVyZW5jaWEgcGFyYSBlbCBAYiBkZWwgQGEgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICIiCisiUGFzbyAxQzogRXhwbG9yYW5kbyBsb3MgZGlyZWN0b3Jpb3MgcGFyYSBidXNjYXIgbm9kb3MtaSBjb24gQGJzIHJlY2xhbWFkb3MgIgorImVuIG3Dumx0aXBsZXMgb2Nhc2lvbmVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYXNvIDFEOiBSZWNvbmNpbGlhbmRvIGxvcyBAYnMgcmVjbGFtYWRvcyBlbiBtw7psdGlwbGVzIG9jYXNpb25lc1xuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwNQorIywgZnV6enkKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiRWwgZmljaGVybyAlUSAoQGkgIyVpLCBmZWNoYSBkZSBtb2RpZmljYWNpw7NuICVJTSlcbiIKKyJ0aWVuZSAlQiBAYihzKSByZWNsYW1hZG8ocykgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMsIGNvbXBhcnRpZG8ocykgY29uICVOICIKKyJmaWNoZXJvKHMpOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDExCittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKEBpICMlaSwgZmVjaGEgZGUgbW9kaWZpY2FjacOzbiAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNgorbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxtZXRhZGF0b3MgZGVsIEBmPlxuIgorCisjLiBALWV4cGFuZGVkOiAoVGhlcmUgYXJlICVOIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLilcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMQorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKyIoSGF5ICVOIG5vZG9zLWkgcXVlIGNvbnRpZW5lbiBAYnMgcmVjbGFtYWRvcyBlbiBtw7psdGlwbGVzIG9jYXNpb25lcy4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjYKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMb3MgQGJzIHJlY2xhbWFkb3MgZW4gbcO6bHRpcGxlcyBvY2FzaW9uZXMgeWEgc2UgcmVhc2lnbmFyb24gbyBzZSBjbG9uYXJvbi5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIGNsb25hciBlbCBmaWNoZXJvOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQ1Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiUGFzbyAyOiBWZXJpZmljYW5kbyBsYSBlc3RydWN0dXJhIGRlIEBkc1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJOw7ptZXJvIEBuIGRlbCBAaSBwYXJhICcuJyBlbiBlbCBAaSBkZWwgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGludmFsaWQgaW5vZGUgIzogJURpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTUKK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICJARSB0aWVuZSB1biBAaSBAbiAjOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYwCittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIHRpZW5lIHVuIEBpICVEaSBARC9ubyB1dGlsaXphZG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjUKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiQEUgQEwgYSAnLicgICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcwCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkBFIGFwdW50YSBhbCBAaSAoJURpKSB1YmljYWRvIGVuIHVuIEBiIGRhw7FhZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc1Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMIGFsIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBATCBhbCBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODUKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJMYSBARSBjb250aWVuZSBjYXJhY3RlcmVzIG5vIHbDoWxpZG9zIGVuIGVsIG5vbWJyZS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkZhbHRhICcuJyBlbiBlbCBAZCBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiRmFsdGEgJy4uJyBlbiBlbCBAaSBkZWwgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTAwCittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiTGEgcHJpbWVyYSBAZSAnJURuJyAoQGk9JURpKSBlbiBlbCBAaSBkZWwgQGQgJWkgKCVwKSBAcyAnLidcbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDUKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJMYSBzZWd1bmRhIEBlICclRG4nIChAaT0lRGkpIGVuIGVsIEBpIGRlbCBAZCAlaSBAcyAnLi4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEwCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZmFkZHIgQEYgJUlGLCBAcyBjZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExNQorbXNnaWQgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJFbCBpX2ZpbGVfYWNsIEBGICVJZiwgQHMgY2Vyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyMAorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZGlyX2FjbCBARiAlSWQsIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNQorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiRWwgaV9mcmFnIEBGICVOLCBAcyBjZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZzaXplIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTMwCittc2dpZCAiaV9mc2l6ZSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiRWwgaV9mc2l6ZSBARiAlTiwgQHMgY2Vyby5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzUKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIHRpZW5lIHVuIG1vZG8gQG4gKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDAKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJFbCBAaSBkZWwgQGQgJWksIEBiICVCLCBkZXNwbGF6YW1pZW50byAlTjogZWwgQGQgZXN0w6EgZGHDsWFkb1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NQorIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiIgorIkVsIEBpIGRlbCBAZCAlaSwgQGIgJUIsIGRlc3BsYXphbWllbnRvICVOOiBlbCBub21icmUgZGVsIGZpY2hlcm8gZXMgbXV5ICIKKyJsYXJnb1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTAKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJFbCBAaSAlaSBkZWwgQGQgdGllbmUgdW4gQGIgIyVCIHF1ZSBubyBlc3TDoSByZXNlcnZhZG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkxhIEBlIGVuIGVsIEBkICcuJyBlbiBlbCBAaSBkZWwgQGQgJWkgbm8gZXN0w6EgdGVybWluYWRhIGNvbiBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiTGEgQGUgYWwgQGQgJy4uJyBlbiBlbCBAaSAlaSBkZWwgQGQgbm8gZXN0w6EgdGVybWluYWRhIGNvbiBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjUKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiRWwgQGkgJWkgKCVRKSBlcyB1biBAdiBkZSBjYXLDoWN0ZXIgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkVsIEBpICVpICglUSkgZXMgdW4gQHYgZGUgQGIgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc1Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiTGEgQEUgZXN0w6EgZHVwbGljYWRhIGVuIGxhIEBlICcuJy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgwCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkxhIEBFIGVzdMOhIGR1cGxpY2FkYSBlbiBsYSBAZSAnLi4nLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODUgZTJmc2NrL3Byb2JsZW0uYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubzogbm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIGRpcl9pbmZvIHBhcmEgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MAorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkxhIEBFIHRpZW5lIHVuIHJlY19sZW4gZGUgJURyIHkgQHMgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkBBIGRlIGxhIGVzdHJ1Y3R1cmEgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBpdGVyYXIgc29icmUgbG9zIEBicyBkZWwgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNQorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgYWwgbGVlciBlbCBAYiAlYiBkZWwgQGQgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjEwCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBlbCBAYiAlYiBkZWwgQGQgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJAQSBkZWwgQGIgZGVsIEBkIHBhcmEgZWwgQGkgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBhbCBsaWJlcmFyIGVsIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJMYSBAZSBkZWwgQGQgcGFyYSAnLicgZXMgZ3JhbmRlLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjMwCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIGVzIHVuIEZJRk8gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJFbCBAaSAlaSAoJVEpIGVzIHVuIHPDs2NrZXQgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0MAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJTZSBwb25lIGVsIHRpcG8gZGUgZmljaGVybyBwYXJhIGxhIEBFIGEgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ1Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJMYSBARSB0aWVuZSB1biB0aXBvIGRlIGZpY2hlcm8gaW5jb3JyZWN0byAoZXJhICVEdCB5IEBzICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTAKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJMYSBARSB0aWVuZSBwdWVzdG8gZWwgdGlwbyBkZSBmaWNoZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NQorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkxhIEBFIHRpZW5lIHVuIG5vbWJyZSBkZSBAei5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjAKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICJFbCBlbmxhY2Ugc2ltYsOzbGljbyAlUSAoQGkgIyVpKSBlcyBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NQorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJFbCBAYiBkZWwgQGEgQEYgZXMgQG4gKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcwCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIiIKKyJFbCBAZiBjb250aWVuZSBmaWNoZXJvcyBtdXkgZ3JhbmRlcywgcGVybyBubyB0aWVuZSBsYSBiYW5kZXJhIExBUkdFX0ZJTEUgZW4gIgorImVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc1CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJIYXkgdW4gQHAgZW4gZWwgQGggJWQ6IGVsIG5vZG8gKCVCKSBubyBoYSBzaWRvIHJlZmVyZW5jaWFkby5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgwCisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4iCittc2dzdHIgIkhheSB1biBAcCBlbiBlbCBAaCAlZDogZWwgbm9kbyAoJUIpIGhhIHNpZG8gcmVmZXJlbmNpYWRvIGRvcyB2ZWNlcy5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg1CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkhheSB1biBAcCBlbiBlbCBAaCAlZDogZWwgbm9kbyAoJUIpIHRpZW5lIHVuIGhhc2ggbcOtbmltbyBpbmNvcnJlY3RvLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTAKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVuIGVsIEBoICVkOiBlbCBub2RvICglQikgdGllbmUgdW4gaGFzaCBtw6F4aW1vIGluY29ycmVjdG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NQorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIkVsIEBoICVkIGVzIEBuICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkhheSB1biBAcCBlbiBlbCBAaCAlZCAoJXEpOiBlbCBuw7ptZXJvIGRlbCBAYiAlYiBlcyBpbmNvcnJlY3RvLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiSGF5IHVuIEBwIGVuIGVsIEBoICVkOiBlbCBub2RvIHJhw616IGVzIEBuLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTQKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkhheSB1biBAcCBlbiBlbCBAaCAlZDogZWwgbm9kbyAoJUIpIHRpZW5lIHVuIGzDrW1pdGUgQG4gKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE5CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICJIYXkgdW4gQHAgZW4gZWwgQGggJWQ6IGVsIG5vZG8gKCVCKSB0aWVuZSB1bmEgY3VlbnRhIEBuICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI0CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiIgorIkhheSB1biBAcCBlbiBlbCBAaCAlZDogZWwgbm9kbyAoJUIpIHRpZW5lIHVuYSB0YWJsYSBkZSBoYXNoIG5vIG9yZGVuYWRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjkKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIkhheSB1biBAcCBlbiBlbCBAaCAlZDogZWwgbm9kbyAoJUIpIHN1IHByb2Z1bmRpZGFkIGVzIEBuLlxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM0Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJARSBlc3TDoSBkdXBsaWNhZGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzkKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiTGEgQEUgdGllbmUgdW4gbm9tYnJlIGRlIGZpY2hlcm8gbm8gw7puaWNvLlxuIgorIlNlIGNhbWJpYSBlbCBub21icmUgYSAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ0Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiU2UgZW5jb250csOzIHVuYSBAZSBkdXBsaWNhZGEgJyVEbicuXG4iCisiXHRTZSBtYXJjYSAlcCAoJWkpIHBhcmEgc2VyIHJlY29uc3RydWlkby5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDkKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiRWwgaV9ibG9ja3NfaGkgQEYgJU4sIEBzIGNlcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NAorIywgZnV6enkKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIkVsIEBkIGRlbCBAaSAlaSAoJXApIGVzdMOhIGRlc2NvbmVjdGFkb1xuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjMKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4CisjLCBmdXp6eQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIkVsIGlfZmlsZV9hY2wgQEYgJUlmLCBAcyBjZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGFzbyAzOiBSZXZpc2FuZG8gbGEgY29uZWN0aXZpZGFkIGRlIGRpcmVjdG9yaW9zXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiRWwgQHIgbm8gaGEgc2lkbyByZXNlcnZhZG8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIk5vIGhheSBlc3BhY2lvIGVuIGVsIEBkIEBsLiAgIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICJFbCBAZCBkZWwgQGkgJWkgKCVwKSBlc3TDoSBkZXNjb25lY3RhZG9cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICJObyBzZSBlbmNvbnRyw7MgL0BsLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwMAorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICInLi4nIGVuICVRIChpKSBlcyAlUCAoJWopIHkgZGViZXLDrWEgc2VyICVxICglZCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDUKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIkVsIC9AbCBubyBleGlzdGUgbyBlc3TDoSBkYcOxYWRvLiAgTm8gc2UgcHVlZGUgcmVjb25lY3Rhci5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJObyBzZSBwdWVkZSBleHBhbmRpciAvQGw6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWNvbmVjdGFyICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaW50ZW50YWJhIGVuY29udHJhciAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Jsb2NrOiAlbSBtaWVudHJhcyBzZSBpbnRlbnRhYmEgY3JlYXIgZWwgQGQgL0BsLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZTogJW0gY3VhbmRvIHNlIGludGVudGFiYSBjcmVhciBlbCBAZCAvQGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSBtaWVudHJhcyBzZSBjcmVhYmEgdW4gbnVldm8gQGIgZGUgQGQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gbWllbnRyYXMgc2UgZXNjcmliw61hIGVsIEBiIGRlIEBkIHBhcmEgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkVycm9yIG1pZW50cmFzIHNlIGFqdXN0YWJhIGxhIGN1ZW50YSBkZWwgQGkgZW4gZWwgQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGNvcnJlZ2lyIGFsIHBhZHJlIGRlbCBAaSAlaTogJW1cbiIKKyJcbiIKKworIyBlbCBwYWRyZQorIyBQZXJkw7NuLCBubyBlbnRpZW5kbywgc2UgaW50ZW50YSBhcnJlZ2xhciBBTCBwYWRyZSwgbm8gRUwgcGFkcmUgZGUgdW4gZGlyZWN0b3Jpby4KKyMgSGF5IGFsZ3VuYSByZWdsYSBxdWUgc2UgbWUgZXNjYXBlPyBtbQorIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJObyBzZSBwdWVkZSBhcnJlZ2xhciBhbCBwYWRyZSBkZWwgQGkgJWk6IG5vIHNlIHB1ZWRlIGVuY29udHJhciBsYSBAZSBhbCBAZCAiCisicGFkcmVcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgcm9vdCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHJvb3QgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgZWwgQGQgcmHDrXogKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgZWwgQGQgL0BsICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDc1Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJFbCBAciBubyBlcyB1biBAZDsgc2UgZmluYWxpemEgbGEgb3BlcmFjacOzbi5cbiIKKworIy4gQC1leHBhbmRlZDogQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4MAorbXNnaWQgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcHJvY2VkZXIgc2luIHVuIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICJFbCAvQGwgbm8gZXMgdW4gQGQgKGlubz0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk3Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQYXNvIDNBOiBPcHRpbWl6YW5kbyBkaXJlY3Rvcmlvc1xuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJGYWxsYSBhbCBjcmVhciBlbCBpdGVyYWRvciBkaXJzX3RvX2hhc2g6ICVtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDcKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJGYWxsbyBhbCBvcHRpbWl6YXIgZWwgZGlyZWN0b3JpbyAlcSAoJWQpOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTEyCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHRpbWl6YW5kbyBkaXJlY3RvcmlvczogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjkKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiUGFzbyA0OiBSZXZpc2FuZG8gbGFzIGN1ZW50YXMgZGUgcmVmZXJlbmNpYVxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkBpICVpIHF1ZSB0aWVuZSBAeiBlc3TDoSBAdS4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiZWwgQGkgJWkgZXN0w6EgQHVcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDQKK21zZ2lkICJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIKK21zZ3N0ciAiTGEgY3VlbnRhIGRlIHJlZmVyZW5jaWEgZGVsIEBpICVpIGVzICVJbCwgeSBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4Cittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKyLCoUFURU5DScOTTjogRVJST1IgREUgUFJPR1JBTUFDScOTTiBFTiBFMkZTQ0shXG4iCisiXHRPIEFMR8OaTiBUQVJBRE8gKFVTVEVEKSBFU1TDgSBSRVZJU0FORE8gVU4gU0lTVEVNQSBERSBGSUNIRVJPUyBNT05UQURPICIKKyIoVklWTykuXG4iCisiaW5vZGVfbGlua19pbmZvWyVpXSBlcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBlcyAlSWwuICDCoVkgZGViZXLDrWFuIHNlciBlbCAiCisibWlzbW8hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTgKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUGFzbyA1OiBSZXZpc2FuZG8gZWwgcmVzdW1lbiBkZSBpbmZvcm1hY2nDs24gZGUgZ3J1cG9zXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiTm8gZXN0w6EgcHVlc3RvIGVsIHJlbGxlbm8gYWwgZmluYWwgZGVsIEBCIGRlbCBAaS4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NjgKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIk5vIGVzdMOhIHB1ZXN0byBlbCByZWxsZW5vIGFsIGZpbmFsIGRlbCBAQiBkZWwgQGIuICIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MworbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkRpZmVyZW5jaWFzIGRlbCBAQiBkZWwgQGI6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5MworbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkRpZmVyZW5jaWFzIGRlbCBAQiBkZWwgQGk6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTMKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKyJMYSBjdWVudGEgZGUgbm9kb3MtaSBsaWJyZXMgZXMgaW5jb3JyZWN0YSBwYXJhIGVsIEBnICMlZyAoJWksIGNvbnRhZG9zPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTgKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKyJMYSBjdWVudGEgZGUgZGlyZWN0b3Jpb3MgZXMgaW5jb3JyZWN0YSBwYXJhIEBnICMlZyAoJWksIGNvbnRhZG9zPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIzCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiTGEgY3VlbnRhIGRlIG5vZG9zLWkgbGlicmVzIGVzIGluY29ycmVjdGEgKCVpLCBjb250YWRvcz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjI4Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisiTGEgY3VlbnRhIGRlIEBicyBsaWJyZXMgZXMgaW5jb3JyZWN0YSBwYXJhIGVsIEBnICMlZyAoJWIsIGNvbnRhZG9zPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjMzCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiTGEgY3VlbnRhIGRlIEBicyBsaWJyZXMgZXMgaW5jb3JyZWN0YSAoJWIsIGNvbnRhZG9zPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzgKK21zZ2lkICIiCisiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCICIKKyJlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIkVSUk9SIERFIFBST0dSQU1BQ0nDk046IGVsIEBmICgjJU4pIGxvcyBwdW50b3MgZmluYWxlcyBkZWwgJUIgKCViLCAlYykgbm8gIgorImNvaW5jaWRlbiBjb24gbG9zIHB1bnRvcyBmaW5hbGVzIGRlbCBAQiBjYWxjdWxhZG9zICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0NAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJFcnJvciBpbnRlcm5vOiBlbCBmaW5hbCBkZWwgYml0bWFwIG5vIHRpZW5lIHNlbnRpZG8gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGNvcGlhciBlbCByZWVtcGxhem8gZGVsIEBpIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yIGFsIGNvcGlhciBlbCByZWVtcGxhem8gZGVsIEBiIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkxCisjLCBmdXp6eQorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICJSZWNyZWFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTYKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICLCoUPDs2RpZ28gZGUgZXJyb3Igbm8gcHJldmlzdG8gKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NDAgZTJmc2NrL3Byb2JsZW0uYzoxOTQ0Cittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiU0UgSUdOT1JBIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtb3JpYSB1dGlsaXphZGE6ICVkLCB0aWVtcG8gdHJhbnNjdXJyaWRvOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInRhbWHDsW8gZGVsIG5vZG8taT0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJtaWVudHJhcyBzZSBjb21lbnphYmEgYSBleHBsb3JhciBsb3Mgbm9kb3MtaSIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXhwbG9yYWJhIGxvcyBub2Rvcy1pIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgIm1pZW50cmFzIHNlIGxsYW1hYmEgYSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwYXJhIGVsIG5vZG8taSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGxhbWFiYSBhIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQgcGFyYSBlbCBub2RvLWkgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MgorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIlRydW5jYW5kbyIKKworIzogZTJmc2NrL3N1cGVyLmM6MjczCittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIkJvcnJhbmRvIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1wYW55cmNkZnZzdERGU1ZdIFstYiBzdXBlcmJsb3F1ZV0gWy1CIHRhbWHDsW9kZWxibG9xdWVdXG4iCisiXHRcdFstSSBibG9xdWVzX2RlbF9iw7pmZXJfZGVsX25vZG8taV0gWy1QIHRhbWHDsW9fZGVsX3Byb2Nlc29fZGVsX25vZG8taV1cbiIKKyJcdFx0Wy1sfC1MIGZpY2hlcm9fZGVfYmxvcXVlc19kYcOxYWRvc10gWy1DIGZkXSBbLWogZmljaGVyby1kZS10cmFuc2FjY2lvbmVzLSIKKyJleHRlcm5vXVxuIgorIlx0XHRbLUUgb3BjaW9uZXMtZXh0ZW5kaWRhc10gZGlzcG9zaXRpdm9cbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBeXVkYSBkZSBlbWVyZ2VuY2lhOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBSZXBhcmFjacOzbiBhdXRvbcOhdGljYSAoc2luIGhhY2VyIHByZWd1bnRhcylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTm8gc2UgaGFjZW4gY2FtYmlvcyBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIENvbnRlc3RhciBcInNpXCIgYSB0b2RhcyBsYXMgcHJlZ3VudGFzXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIEJ1c2NhIGxvcyBibG9xdWVzIGRhw7FhZG9zIHkgbG9zIGFncmVnYSBhIGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3NcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRnVlcnphIGxhIHJldmlzacOzbiBhw7puIHNpIGVsIHNpc3RlbWEgZGUgZmljaGVyb3NcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgZXN0w6EgZXRpcXVldGFkbyBjb21vIGxpbXBpb1xuIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhIG3DoXMgbWVuc2FqZXMgZGUgZGlhZ27Ds3N0aWNvXG4iCisiIC1iIHN1cGVyYmxvcXVlICAgICAgICAgIFV0aWxpemEgZWwgc3VwZXJibG9xdWUgYWx0ZXJuYXRpdm9cbiIKKyIgLUIgdGFtYcOxb2RlbGJsb3F1ZSAgICAgIEZ1ZXJ6YSBlbCB0YW1hw7FvZGVsYmxvcXVlIGN1YW5kbyBidXNjYSAiCisiYWwgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJibG9xdWVcbiIKKyIgLWogZmljaGVyby1kZS10cmFuc2FjY2lvbmVzLWV4dGVybm8gXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIEluZGljYSBlbCBsdWdhciBlbiBkb25kZSBlc3TDoSBlbCBmaWNoZXJvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIGRlIHRyYW5zYWNjaW9uZXMgZXh0ZXJub1xuIgorIiAtbCBmaWNoZXJvX2RlX2Jsb3F1ZXNfZGHDsWFkb3MgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIEFncmVnYSBhIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3NcbiIKKyIgLUwgZmljaGVyb19kZV9ibG9xdWVzX2Rhw7FhZG9zIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICBQb25lIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAldS8ldSBmaWNoZXJvcyAoJTBkLiVkJSUgbm8gY29udGlndW9zKSwgJXUvJXUgYmxvcXVlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiU4dSBpbm9kZSB1c2VkICglMi4yZiUlKVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTh1IGlub2RlcyB1c2VkICglMi4yZiUlKVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJThkIG5vZG8taSB1dGlsaXphZG8gKCVkJSUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlOGQgbm9kb3MgaSB1dGlsaXphZG9zICglZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlOHUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlOGQgbm9kby1pIG5vIGNvbnRpZ3VvICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJThkIG5vZG9zIGkgbm8gY29udGlndW9zICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlOHUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlOGQgbm9kby1pIG5vIGNvbnRpZ3VvICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJThkIG5vZG9zIGkgbm8gY29udGlndW9zICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgIyBkZSBub2Rvcy1pIGNvbiBibG9xdWVzIGluZC9kaW5kL3RpbmQ6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5Cittc2dpZCAiICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOGxsdSBibG9jayB1c2VkICglMi4yZiUlKVxuIgorbXNnaWRfcGx1cmFsICIlOGxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSlcbiIKK21zZ3N0clswXSAiJThkIGJsb3F1ZSB1c2FkbyAoJWQlJSlcbiIKK21zZ3N0clsxXSAiJWQgYmxvcXVlcyB1c2Fkb3MgKCVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiU4dSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiU4ZCBibG9xdWUgZGHDsWFkb1xuIgorbXNnc3RyWzFdICIlOGQgYmxvcXVlcyBkYcOxYWRvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiU4ZCBmaWNoZXJvIGdyYW5kZVxuIgorbXNnc3RyWzFdICIlOGQgZmljaGVyb3MgZ3JhbmRlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiU4dSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiU4dSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gImZpY2hlcm8gcmVndWxhciIKK21zZ3N0clsxXSAiZmljaGVybyByZWd1bGFyIgorCisjOiBlMmZzY2svdW5peC5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlOHUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiJThkIGRpcmVjdG9yaW9cbiIKK21zZ3N0clsxXSAiJThkIGRpcmVjdG9yaW9zXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gImRpc3Bvc2l0aXZvIGRlIGNhcmFjdGVyZXMiCittc2dzdHJbMV0gImRpc3Bvc2l0aXZvIGRlIGNhcmFjdGVyZXMiCisKKyM6IGUyZnNjay91bml4LmM6MTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICJkaXNwb3NpdGl2byBkZSBibG9xdWUiCittc2dzdHJbMV0gImRpc3Bvc2l0aXZvIGRlIGJsb3F1ZSIKKworIzogZTJmc2NrL3VuaXguYzoxODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWZvc1xuIgorbXNnc3RyWzBdICIlOGQgZmlmb1xuIgorbXNnc3RyWzFdICIlOGQgZmlmb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoxODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiU4dSBsaW5rc1xuIgorbXNnc3RyWzBdICIlOGQgdsOtbmN1bG9cbiIKK21zZ3N0clsxXSAiJThkIHbDrW5jdWxvc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiU4dSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiZW5sYWNlIHNpbWLDs2xpY28iCittc2dzdHJbMV0gImVubGFjZSBzaW1iw7NsaWNvIgorCisjOiBlMmZzY2svdW5peC5jOjE5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiKCVkIHbDrW5jdWxvIHNpbWLDs2xpY28gcsOhcGlkbylcbiIKK21zZ3N0clsxXSAiKCVkIHbDrW5jdWxvcyBzaW1iw7NsaWNvcyByw6FwaWRvcylcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiesOzY2FsbyIKK21zZ3N0clsxXSAiesOzY2FsbyIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWxlc1xuIgorbXNnc3RyWzBdICIlOGQgZmljaGVyb1xuIgorbXNnc3RyWzFdICIlOGQgZmljaGVyb3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk3OSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIm1pZW50cmFzIHNlIGRldGVybWluYWJhIHNpICVzIGVzdMOhIG1vbnRhZG8uIgorCisjOiBlMmZzY2svdW5peC5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzICVzLlxuIgorbXNnc3RyICLCoUF0ZW5jacOzbiEgJXMgZXN0w6EgbW9udGFkby5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNDAKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGNvbnRpbnVhciwgc2UgZmluYWxpemEuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjQyCisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlxhXGFcYVxhwqHCoUFURU5DScOTTiEhICBFamVjdXRhciBlMmZzY2sgZW4gdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyBtb250YWRvXG4iCisicHVlZGUgY2F1c2FyIEdSQVZFUyBkYcOxb3MgYWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cYVxhXGFcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNDcKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIsK/RGUgdmVyZGFkIHF1aWVyZSBjb250aW51YXI/IgorCisjOiBlMmZzY2svdW5peC5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJyZXZpc2nDs24gdGVybWluYWRhLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjMzOQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgY29udGllbmUgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyBjb24gZXJyb3JlcyIKKworIzogZTJmc2NrL3VuaXguYzozNDEKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5vIGZ1ZSBkZXNtb250YWRvIGxpbXBpYW1lbnRlIgorCisjOiBlMmZzY2svdW5peC5jOjM0MworbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisiIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlbCBzdXBlcmJsb3F1ZSBwcmltYXJpbyBkaWZpZXJlbiBkZSBsYXMgZGUgbGEgY29waWEgZGUgIgorInNlZ3VyaWRhZCIKKworIzogZTJmc2NrL3VuaXguYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaGEgc2lkbyBtb250YWRvICV1IHZlY2VzIHNpbiBzZXIgcmV2aXNhZG8iCisKKyM6IGUyZnNjay91bml4LmM6MzU0CisjLCBmdXp6eQorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJTZSBwb25lIGxhIGhvcmEgZGUgbGEgw7psdGltYSByZXZpc2nDs24gYWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBhICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIHlhIGxsZXZhICV1IGTDrWFzIHNpbiBzZXIgcmV2aXNhZG8iCisKKyM6IGUyZnNjay91bml4LmM6MzY5Cittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgc2UgZnVlcnphIGxhIHJldmlzacOzbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiBsaW1waW8sICV1LyV1IGZpY2hlcm9zLCAldS8ldSBibG9xdWVzIgorCisjOiBlMmZzY2svdW5peC5jOjQyMQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKGNvbXByb2JhY2nDs24gYXBsYXphZGE7IGNvbiBiYXRlcsOtYXMpIgorCisjIE8gInJldmlzacOzbiBkZXNwdcOpcyBkZWwgc2lndWllbnRlIG1vbnRhamUiLgorIzogZTJmc2NrL3VuaXguYzo0MjQKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGNvbXByb2JhY2nDs24gZW4gZWwgc2lndWllbnRlIG1vbnRhamUpIgorCisjOiBlMmZzY2svdW5peC5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGNvbXByb2JhY2nDs24gZGVzcHXDqXMgZGUgJWxkIG1vbnRhamVzKSIKKworIzogZTJmc2NrL3VuaXguYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRVJST1I6IG5vIHNlIHB1ZWRlIGFicmlyIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiVmVyc2nDs24gZGUgRUEgbm8gdsOhbGlkYS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIk9wY2nDs24gZXh0ZW5kaWRhIGRlc2Nvbm9jaWRhOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkVycm9yIGRlIHNpbnRheGlzIGVuIGVsIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24gZGUgZTJmc2NrICglcywgbMOtbmVhICMlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJFcnJvciBhbCB2YWxpZGFyIGVsIGRlc2NyaXB0b3IgZGUgZmljaGVyb3MgJWQ6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzcwCittc2dpZCAiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiSW5mb3JtYWNpw7NuIGRlIGNvbnNpc3RlbmNpYSBubyB2w6FsaWRhIGVuIGVsIGRlc2NyaXB0b3IgZGUgZmljaGVyb3MiCisKKyM6IGUyZnNjay91bml4LmM6Nzg1Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJTw7NsbyBzZSBwdWVkZSBlc3BlY2lmaWNhciB1bmEgZGUgbGFzIG9wY2lvbmVzIC1wLy1hLCAtbiBvIC15LiIKKworIzogZTJmc2NrL3VuaXguYzo4MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIkxhIG9wY2nDs24gLXQgbm8gZXN0w6EgaW1wbGVtZW50YWRhIGVuIGVzdGEgdmVyc2nDs24gZGUgZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNyBlMmZzY2svdW5peC5jOjkwOSBtaXNjL3R1bmUyZnMuYzo4MTEgbWlzYy90dW5lMmZzLmM6MTEwMAorIzogbWlzYy90dW5lMmZzLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJObyBlcyBwb3NpYmxlIHJlc29sdmVyICclcyciCisKKyM6IGUyZnNjay91bml4LmM6ODg4CisjLCBmdXp6eQorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorIiVzOiBMYXMgb3BjaW9uZXMgLW4geSAtdyBzZSBleGNsdXllbiBtdXR1YW1lbnRlLlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg5MworIywgZnV6enkKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKyIlczogTGFzIG9wY2lvbmVzIC1uIHkgLXcgc2UgZXhjbHV5ZW4gbXV0dWFtZW50ZS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzo4OTgKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisiJXM6IExhcyBvcGNpb25lcyAtbiB5IC13IHNlIGV4Y2x1eWVuIG11dHVhbWVudGUuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiTGFzIG9wY2lvbmVzIC1jIHkgLWwvLUwgbm8gcHVlZGVuIHNlciB1dGlsaXphZGFzIHNpbXVsdMOhbmVhbWVudGUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm8gZXMgdW4gZW50ZXJvXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkFyZ3VtZW50byBubyBudW3DqXJpY28gaW52w6FsaWRvIHBhcmEgLSVjIChcIiVzXCIpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExMDYgZTJmc2NrL3VuaXguYzoxMTExCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWp1c3RhYmEgZWwgc3VwZXJibG9xdWUiCisKKyM6IGUyZnNjay91bml4LmM6MTExMyBtaXNjL3R1bmUyZnMuYzoxOTEyCittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiwqFFcnJvcjogbGEgdmVyc2nDs24gZGUgbGEgYmlibGlvdGVjYSBleHQyZnMgZXN0w6EgY2FkdWNhIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjExNzEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgaW5pY2lhbGl6YXIgZWwgcHJvZ3JhbWEiCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdEFsIGVtcGxlYXIgJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwNgorbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgInNlIG5lY2VzaXRhIHVuYSB0ZXJtaW5hbCBwYXJhIGhhY2VyIGxhcyByZXBhcmFjaW9uZXMgaW50ZXJhY3RpdmFzIgorCisjOiBlMmZzY2svdW5peC5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzOiAlcyBpbnRlbnRhbmRvIGxvcyBibG9xdWVzIGRlIHJlc3BhbGRvLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI1OAorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvcXVlIGVzIGludsOhbGlkbywiCisKKyM6IGUyZnNjay91bml4LmM6MTI1OQorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJMb3MgZGVzY3JpcHRvcmVzIGRlIGxvcyBncnVwb3MgcGFyZWNlbiBkYcOxYWRvcy4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBpbnRlbnRhbmRvIGxvcyBibG9xdWVzIGRlIHJlc3BhbGRvLi4uXG4iCisKKyMgT2pvOiBObyBlcyBxdWUgc2UgaGF5YSBlbmNvbnRyYWRvIHVuIHN1cGVyYmxvcXVlIHF1ZSByZXN1bHRhIHF1ZSBubyBlcworIyB2w6FsaWRvLCBzaW5vIHF1ZSBubyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gc3VwZXJibG9xdWUgcXVlIHNlYSB2w6FsaWRvLAorIyBxdWUgZXMgZGlzdGludG8gKGEgbG8gbWVqb3Igbm8gc2UgaGEgZW5jb250cmFkbyBuaW5nw7puIHN1cGVyYmxvcXVlCisjIGVuIGFic29sdXRvKS4gQ3JlbyBxdWUgbGEgdHJhZHVjY2nDs24gZGViZXLDrWEgY2FtYmlhcnNlLiBzdgorIyBFbiBlZmVjdG8sIHRpZW5lcyB0b2RhIGxhIHJhesOzbi4gQ29ycmVnaWRvLiBtbQorIzogZTJmc2NrL3VuaXguYzoxMjczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiIKKyIlczogbm8gc2UgZW5jb250csOzIHVuIHN1cGVyYmxvcXVlIHbDoWxpZG8gZW4gZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwMQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSB2ZXJzacOzbiBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcywgZW4gYXBhcmllbmNpYSwgbXV5IHN1cGVyaW9yIHBhcmEgIgorImVzdGFcbiIKKyJ2ZXJzacOzbiBkZSBlMmZzY2suIChPIGVsIHN1cGVyYmxvcXVlIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzdMOhIGRhw7FhZG8pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIsK/RXN0YSBwb2Ryw61hIHNlciB1bmEgcGFydGljacOzbiBkZSBsb25naXR1ZCBjZXJvP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJTZSBkZWJlIHRlbmVyIGFjY2VzbyAlcyBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIG8gc2VyIHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE1Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICLCv0VzIHBvc2libGUgcXVlIG5vIGV4aXN0YSBvIHF1ZSBzZWEgdW4gZGlzcG9zaXRpdm8gZGUgaW50ZXJjYW1iaW8/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxOAorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisiwr9TaXN0ZW1hIGRlIGZpY2hlcm9zIG1vbnRhZG8gbyBhYmllcnRvIGVuIGV4Y2x1c2l2YSBwb3Igb3RybyBwcm9ncmFtYT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzIxCisjLCBmdXp6eQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIsK/RXMgcG9zaWJsZSBxdWUgbm8gZXhpc3RhIG8gcXVlIHNlYSB1biBkaXNwb3NpdGl2byBkZSBpbnRlcmNhbWJpbz9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzI0Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJFbCBkaXNjbyBlc3TDoSBwcm90ZWdpZG8gY29udHJhIGVzY3JpdHVyYTsgdXRpbGljZSBsYSBvcGNpw7NuIC1uIHBhcmFcbiIKKyJoYWNlciB1bmEgcmV2aXNpw7NuIGRlIHPDs2xvIGxlY3R1cmEgYWwgZGlzcG9zaXRpdm8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM4OQorbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiwqFDb25zaWdhIHVuYSB2ZXJzacOzbiBtw6FzIG1vZGVybmEgZGUgZTJmc2NrISIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIHJldmlzYWJhIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBleHQzIHBhcmEgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ0OAorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJBdGVuY2nDs246IHNlIG9taXRpcsOhIGxhIHJlY3VwZXJhY2nDs24gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBkZWJpZG8gYSAiCisicXVlIHNlIGVzdMOhIGhhY2llbmRvIHVuYSByZXZpc2nDs24gZGUgc8OzbG8gbGVjdHVyYSBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJubyBlcyBwb3NpYmxlIHBvbmVyIGxhcyBiYW5kZXJhcyBkZSBzdXBlcmJsb3F1ZSBlbiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlY3VwZXJhYmEgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGV4dDMgZGUgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIHRpZW5lIGNhcmFjdGVyw61zdGljYXMgbm8gc29wb3J0YWRhczoiCisKKyM6IGUyZnNjay91bml4LmM6MTUwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhcm5pbmc6IGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuIgorbXNnc3RyICJBdGVuY2nDs246IGVsIHNvcG9ydGUgYSBsYSBjb21wcmVzacOzbiBlcyBleHBlcmltZW50YWwuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTUxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIkUyZnNjayBubyBlc3TDoSBjb21waWxhZG8gY29uIHNvcG9ydGUgYSDDgVJCT0xFUy1ILFxuIgorIlx0cGVybyBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zICVzIHRpZW5lIGRpcmVjdG9yaW9zIGNvbiDDgVJCT0xFUy1ILlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGXDrWFuIGxvcyBibG9xdWVzIGRhw7FhZG9zIGRlbCBub2RvLWkiCisKKyM6IGUyZnNjay91bml4LmM6MTU2OAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiRXN0byBubyBzZSBzZSB2ZSBtdXkgYmllbiwgcGVybyBzZSBpbnRlbnRhcsOhIGNvbnRpbnVhci4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyAoJWQgYmxvcXVlcyk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjE5Cittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBIZWNoby5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjIwCittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisiKioqIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBzZSBoYSBjcmVhZG8gZGUgbnVldm8gKioqXG4iCisiKioqIGVsIHNpc3RlbWEgZGUgZmljaGVyb3MgdnVlbHZlIGEgc2VyIGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY0MworbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJTZSByZWluaWNpYSBlMmZzY2sgZGVzZGUgZWwgcHJpbmNpcGlvLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY0NworbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJtaWVudHJhcyBzZSByZWFqdXN0YSBlbCBjb250ZXh0byIKKworIzogZTJmc2NrL3VuaXguYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBzZSBjYW5jZWxhIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjU5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiZmluYWxpemFkbyIKKworIzogZTJmc2NrL3VuaXguYzoxNjcxIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBFTCBTSVNURU1BIERFIEZJQ0hFUk9TIEZVRSBNT0RJRklDQURPICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBSRUlOSUNJRSBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODMgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIEFURU5DScOTTjogRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB0b2RhdsOtYSB0aWVuZSBlcnJvcmVzICIKKyIqKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MjMKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvIgorbXNnc3RyICJtaWVudHJhcyBzZSBwb27DrWEgZWwgbm9kby1pIGRlIGJsb3F1ZXMgZGHDsWFkb3MiCisKKyM6IGUyZnNjay91dGlsLmM6MTg5IG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgInNTIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MAorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDQKK21zZ2lkICI8eT4iCittc2dzdHIgIjxzPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDYKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDgKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAocy9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjIKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgIsKhY2FuY2VsYWRvIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzNworbXNnaWQgInllc1xuIgorbXNnc3RyICJzaVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOQorbXNnaWQgIm5vXG4iCittc2dzdHIgIm5vXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIsK/JXM/IG5vXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLCvyVzPyBzaVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NworbXNnaWQgInllcyIKK21zZ3N0ciAic2kiCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgImUyZnNja19yZWFkX2JpdG1hcHM6IGJsb3F1ZShzKSBpbGVnYWwoZXMpIGRlIG1hcGFzIGRlIGJpdHMgcGFyYSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyNzcKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJsZXllbmRvIGxvcyBtYXBhcyBkZSBiaXRzIGRlbCBub2RvLWkgeSBkZWwgYmxvcXVlIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmFuIGxlZXIgbG9zIG1hcGFzIGRlIGJpdHMgcGFyYSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTcKKyMsIGZ1enp5Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAiZXNjcmliaWVuZG8gbG9zIG1hcGFzIGRlIGJpdHMgZGVsIGJsb3F1ZSIKKworIzogZTJmc2NrL3V0aWwuYzozMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKyJtaWVudHJhcyBzZSByZWludGVudGFiYSBlc2NyaWJpciBsb3MgbWFwYXMgZGUgYml0cyBkZSBsb3Mgbm9kb3MtaSBwYXJhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IElOQ09OU0lTVEVOQ0lBIElORVNQRVJBREE7IEVKRUNVVEUgZnNjayBNQU5VQUxNRU5URS5cbiIKKyIoaS5lLiwgc2luIGxhcyBvcGNpb25lcyAtYSBvIC1wKVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJNZW1vcmlhIHV0aWxpemFkYTogJWRrLyVkayAoJWRrLyVkayksICIKKworIzogZTJmc2NrL3V0aWwuYzozOTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiTWVtb3JpYSB1dGlsaXphZGE6ICVkLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgImZlY2hhOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMQorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgInRpZW1wbyB0cmFuc2N1cnJpZG86ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ2IGUyZnNjay91dGlsLmM6NDYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGXDrWEgZWwgbm9kby1pICVsZCBlbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzQgZTJmc2NrL3V0aWwuYzo0ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc2NyaWLDrWEgZWwgbm9kby1pICVsZCBlbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzYKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYSBlbCBiw7pmZXIgcmVsbGVubyBjb24gY2Vyb3MiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg4Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5CisjLCBmdXp6eQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImhlY2hvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lICIKKyJtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICVzIFstYiB0YW1hw7FvX2RlbF9ibG9xdWVdIFstaSBmaWNoZXJvX2RlX2VudHJhZGFdIFstc3Z3bmZdXG4iCisiIFstYyBibG9xdWVzX2FfbGFfdmV6XSBbLXAgbsO6bV9kZV9wYXNvc10gWy10IHBhdHLDs25fZGVfcHJ1ZWJhIFstdCAiCisicGF0csOzbl9kZV9wcnVlYmEgXG4iCisiIFsuLi5dXV1cbiIKKyIgZGlzcG9zaXRpdm8gW2Jsb3F1ZV9maW5hbCBbYmxvcXVlX2luaWNpYWxdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IExhcyBvcGNpb25lcyAtbiB5IC13IHNlIGV4Y2x1eWVuIG11dHVhbWVudGUuXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiUHJvYmFuZG8gY29uIHVuIHBhdHLDs24gYWxlYXRvcmlvOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQwCittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIlByb2JhbmRvIGNvbiBlbCBwYXRyw7NuIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJkdXJhbnRlIGxhIGLDunNxdWVkYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJWYWxvciBleHRyYcOxbyAoJWxkKSBlbiBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiZHVyYW50ZSBlbCBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgY29tZW56YWJhIGxhIGl0ZXJhY2nDs24gZW4gbGEgbGlzdGEgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDMgbWlzYy9iYWRibG9ja3MuYzo2MDIgbWlzYy9iYWRibG9ja3MuYzo3NTkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYW4gbG9zIGLDumZlcmVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJSZXZpc2FuZG8gbG9zIGJsb3F1ZXMgZGVsICVsdSBhbCAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTIKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJSZXZpc2FuZG8gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgZW4gbW9kbyBkZSBzw7NsbyBsZWN0dXJhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJTZSBlc3TDoW4gcmV2aXNhbmRvIGxvcyBibG9xdWVzIGRhw7FhZG9zIChwcnVlYmEgZGUgc8OzbG8gbGVjdHVyYSk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjA5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlNlIGVzdMOhbiByZXZpc2FuZG8gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgZW4gbW9kbyBkZSBsZWN0dXJhLWVzY3JpdHVyYVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiRGVsIGJsb3F1ZSAlbHUgYWwgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxleWVuZG8geSBjb21wYXJhbmRvOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzcxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICIiCisiUmV2aXNhbmRvIGxvcyBibG9xdWVzIGRhw7FhZG9zIGVuIG1vZG8gbGVjdHVyYS1lc2NyaXR1cmEgbm8gZGVzdHJ1Y3Rpdm9cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiIgorIlJldmlzYW5kbyBsb3MgYmxvcXVlcyBkYcOxYWRvcyAocHJ1ZWJhIGRlIGxlY3R1cmEtZXNjcml0dXJhIG5vIGRlc3RydWN0aXZhKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiU2UgaW50ZXJjZXB0w7MgdW5hIGludGVycnVwY2nDs24sIHNlIGxpbXBpYSB0b2RvXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiZHVyYW50ZSBsYSBwcnVlYmEgZGUgZXNjcml0dXJhIGRlIGRhdG9zIGRlbCBibG9xdWUgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk4OCBtaXNjL3V0aWwuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBlc3TDoSBtb250YWRvOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJsb3MgYmxvcXVlcyBkYcOxYWRvcyBzZSBmdWVyemFuIGRlIHRvZGFzIGZvcm1hcy4gIFNlIGNyZWUgcXVlIC9ldGMvbXRhYiBlc3TDqSAiCisiaW5jb3JyZWN0by5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIsKhTm8gZXMgc2VndXJvIGVqZWN1dGFyIGxvcyBibG9xdWVzIGRhw7FhZG9zIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZXN0w6EgYXBhcmVudGVtZW50ZSBlbiB1c28gcG9yIGVsIHNpc3RlbWE7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgImxvcyBibG9xdWVzIGRhw7FhZG9zIHNlIGZ1ZXJ6YW4gZGUgdG9kYXMgZm9ybWFzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAidGFtYcOxbyBkZWwgYmxvcXVlIGludsOhbGlkbyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGVsIHBhdHLDs25fZGVfcHJ1ZWJhIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICIiCisiU8OzbG8gdW4gbcOheGltbyBkZSB1biBwYXRyw7NuX2RlX3BydWViYSBwdWVkZSBzZXIgZXNwZWNpZmljYWRvIGVuIG1vZG8gc8OzbG8gIgorImxlY3R1cmEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2OQorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIkVsIHBhdHLDs25fZGVfcHJ1ZWJhIGFsZWF0b3JpbyBubyBlc3TDoSBwZXJtaXRpZG8gZW4gbW9kbyBzw7NsbyBsZWN0dXJhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm87IHNlIGRlYmUgZXNwZWNpZmljYXJcbiIKKyJkZSBmb3JtYSBtYW51YWxcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm8iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5NAorIywgZnV6enkKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJSZXViaWNhbmRvIGJsb3F1ZXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorIywgZnV6enkKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiUHJpbWVyIGJsb3F1ZSBkZSBkYXRvcz0ldVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsdSIKK21zZ3N0ciAiYmxvcXVlIGluaWNpYWwgbm8gdsOhbGlkbyAoJWQpOiBkZWJlIHNlciBtZW5vcyBxdWUgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJjdWFuZG8gc2UgY3JlYWJhIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3MgZW4gbWVtb3JpYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjc0Cittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAiY3VhbmRvIHNlIGHDsWFkw61hIGEgbGEgbGlzdGEgZGUgYmxvcXVlcyBkYcOxYWRvcyBlbiBtZW1vcmlhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBhc3MgY29tcGxldGVkLCAldSBiYWQgYmxvY2tzIGZvdW5kLiAoJWQvJWQvJWQgZXJyb3JzKVxuIgorbXNnc3RyICJQYXNvIHRlcm1pbmFkbywgc2UgZW5jb250cmFyb24gJXUgYmxvcXVlcyBkYcOxYWRvcy5cbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9QWFjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJtb2RvIGRlIGVtcGxlbzogJXMgWy1SVl0gWy0rPUFhY0RkaWpzU3VdIFstdiB2ZXJzacOzbl0gZmljaGVyb3MuLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJ2ZXJzacOzbiBpbmNvcnJlY3RhIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSB2ZXIgZWwgZXN0YWRvIGRlbCBmaWNoZXJvICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc3RhYmFuIGxleWVuZG8gbGFzIGJhbmRlcmFzIGVuICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIxNyBtaXNjL2NoYXR0ci5jOjIzNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHNvcG9ydGEgZGVzYWN0aXZhciBsYSBjYXJhY3RlcsOtc3RpY2EgJyVzJyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMjIgbWlzYy9jaGF0dHIuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiTGFzIGJhbmRlcmFzIGRlICVzIGVzdMOhbiBwdWVzdGFzIGNvbW8gIgorCisjOiBtaXNjL2NoYXR0ci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBwb27DrWFuIGxhcyBiYW5kZXJhcyBlbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIkxhIHZlcnNpw7NuIGRlICVzIGVzdMOhIHB1ZXN0YSBjb21vICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzdGFiYSBwb25pZW5kbyBsYSB2ZXJzacOzbiBlbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlc2VydmFyIGxhIHZhcmlhYmxlIGRlIHJ1dGEgZW4gY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMyMgorbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IGVzIGluY29tcGF0aWJsZSBjb24gLSB5ICtcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMzAKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiU2UgZGViZSB1c2FyICctdicsID0sIC0gbyArXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1iZmhpeFZdIFstb2Igc3VwZXJibG9xdWVdIFstb0IgdGFtYcOxb2RlbGJsb3F1ZV0gIgorImRpc3Bvc2l0aXZvXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJiYmxvcXVlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY4Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJHcm91cCAlbHU6IChCbG9ja3MgIgorbXNnc3RyICJHcnVwbyAlbHU6IChCbG9xdWVzICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAibsO6bWVybyBkZSBsb3Mgbm9kb3MtaSBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvcXVlIGVuICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW1hcmlvIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICJSZXNwYWxkbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBkZXNjcmlwdG9yZXMgZGUgZ3J1cG8gZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBTZSByZXNlcnZhcm9uIGxvcyBibG9xdWVzIEdEVCBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgRGVzY3JpcHRvciBkZSBncnVwbyBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgTWFwYSBkZSBiaXRzIGRlIGJsb3F1ZSBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzgKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgbWFwYSBkZSBiaXRzIGRlIG5vZG8taSBlbiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDIKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIHRhYmxhIGRlIG5vZG9zLWkgZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJWQgYmxvcXVlcyBsaWJyZXMsICVkIG5vZG9zLWkgbGlicmVzLCAlIGRpcmVjdG9yaW9zXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1OAorbXNnaWQgIiAgRnJlZSBibG9ja3M6ICIKK21zZ3N0ciAiICBCbG9xdWVzIGxpYnJlczogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjY5Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIE5vZG9zLWkgbGlicmVzOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW1wcmltw61hIGxhIGxpc3RhIGRlIGJsb3F1ZXMgZGHDsWFkb3MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkJsb3F1ZXMgZGHDsWFkb3M6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzMzIG1pc2MvdHVuZTJmcy5jOjMwMgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGXDrWEgZWwgbm9kby1pIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzkKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYSBlbCBub2RvLWkgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIlVzdWFyaW9zIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY4Cittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIlRhbWHDsW8gZGUgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiVGFtYcOxbyBkZWwgYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAldVxuIgorIkxvbmdpdHVkIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgICAldVxuIgorIlByaW1lciBibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAldVxuIgorIlNlY3VlbmNpYSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICAgICAweCUwOHhcbiIKKyJJbmljaW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAgICAgICAgJXVcbiIKKyJOw7ptZXJvIGRlIHVzdWFyaW9zIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiVXN1YXJpb3MgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjE4Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGVuIGVuY29udHJhciBsb3MgbsO6bWVyb3MgbcOhZ2ljb3MgZGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlICIKKyJ0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJUYW1hw7FvIGRlbCBibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICV1XG4iCisiTG9uZ2l0dWQgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogICAgICAgICAgICV1XG4iCisiUHJpbWVyIGJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICV1XG4iCisiU2VjdWVuY2lhIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgIDB4JTA4eFxuIgorIkluaWNpbyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAgICAgICAgICAgICAldVxuIgorIk7Dum1lcm8gZGUgdXN1YXJpb3MgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIlVzdWFyaW9zIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXM6ICAgICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQyIG1pc2MvbWtlMmZzLmM6NjYyIG1pc2MvdHVuZTJmcy5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyLCoU5vIHNlIHB1ZWRlIHJlc2VydmFyIG1lbW9yaWEgcGFyYSBhbmFsaXphciBzaW50w6FjdGljYW1lbnRlIGxhcyBvcGNpb25lcyFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHN1cGVyYmxvcXVlIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHRhbWHDsW8gZGVsIGJsb3F1ZSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiTGFzIG9wY2lvbmVzIGVzcGVjaWZpY2FkYXMgc29uIGluY29ycmVjdGFzOiAlc1xuIgorIlxuIgorIk9wY2lvbmVzIGV4dGVuZGlkYXMgZGViZW4gZXN0YXIgc2VwYXJhZGFzIHBvciBjb21hcywgeSBwdWVkZW4gdG9tYXIgdW5cbiIKKyJcdGFyZ3VtZW50byBxdWUgc2UgYWp1c3RhIGNvbiB1biBzaWdubyBkZSBpZ3VhbCAoJz0nKS5cbiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXh0ZW5kaWRhcyB2w6FsaWRhcyBzb246XG4iCisiXHRzdXBlcmJsb2NrPTxuw7ptZXJvX2RlbF9zdXBlcmJsb3F1ZT5cbiIKKyJcdGJsb2Nrc2l6ZT08dGFtYcOxb19kZWxfYmxvcXVlPlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTU0IG1pc2MvbWtlMmZzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0U2UgZW1wbGVhICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1OTAgbWlzYy9lMmltYWdlLmM6MTMwOSBtaXNjL3R1bmUyZnMuYzoxOTIzCisjOiByZXNpemUvbWFpbi5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZG8gZW5jb250cmFyIHVuIHN1cGVyYmxvcXVlIHbDoWxpZG8gcGFyYSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgYWwgbGVlciBsb3MgbWFwYXMgZGUgYml0czogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJzSVFdIGRldmljZSBpbWFnZV9maWxlXG4iCittc2dzdHIgIk1vZG8gZGUgZW1wbGVvOiAlcyBbLXJzSV0gZGlzcG9zaXRpdm8gZmljaGVyb19kZV9pbWFnZW5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgZWwgYsO6ZmVyIGRlbCBlbmNhYmV6YWRvXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3MQorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXNjcmliw61hIGVsIHN1cGVyYmxvcXVlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzkKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc2NyaWLDrWEgbGEgdGFibGEgZGUgbm9kb3MtaSIKKworIzogbWlzYy9lMmltYWdlLmM6MTg2Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBtYXBhIGRlIGJpdHMgZGVsIGJsb3F1ZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTkzCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBtYXBhIGRlIGJpdHMgZGVsIG5vZG8taSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDogbm8gc2UgcHVlZGUgYWJyaXIgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBubyBzZSBwdWVkZSBidXNjYXIgYWwgc3VwZXJibG9xdWVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yIGxleWVuZG8gZWwgc3VwZXJibG9xdWVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBubyBlcyB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjA3NAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiQXRlbmNpw7NuOiBsYSBldGlxdWV0YSBlcyBtdXkgbGFyZ2EsIHNlIHRydW5jYS5cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2sgYWdhaW5cbiIKK21zZ3N0ciAiZTJsYWJlbDogZGUgbnVldm8sIG5vIHNlIHB1ZWRlIGVuY29udHJhciBhbCBzdXBlcmJsb3F1ZVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yIGFsIGVzY3JpYmlyIGVsIHN1cGVyYmxvcXVlXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiTW9kbyBkZSBlbXBsZW86IGUybGFiZWwgZGlzcG9zaXRpdm8gW251ZXZhYmFuZGVyYV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIkZhbGxhIGFsIGNyZWFyIGVsIGl0ZXJhZG9yIGRpcnNfdG9faGFzaDogJW0iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hICVzIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJtaWVudHJhcyBzZSBkZXRlcm1pbmFiYSBzaSAlcyBlc3TDoSBtb250YWRvLiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgJXMiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiQVRFTkNJw5NOOiBubyBzZSBwdWVkZSBhYnJpciAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJBVEVOQ0nDk046IGZvcm1hdG8gaW5jb3JyZWN0byBlbiBsYSBsw61uZWEgJWQgZGUgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzcwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiXGFcYVxhQVRFTkNJw5NOOiBFbCAvZXRjL2ZzdGFiIG5vIGNvbnRpZW5lIGVsIGNhbXBvIHBhc3NubyBmc2NrLlxuIgorIlNlIGludGVudGFyw6EgaGFjZXIgdW4gdHJ1Y28sIHBlcm8gc2UgZGViZXLDrWEgYXJyZWdsYXIgZWwgXG4iCisiZmljaGVybyAvZXRjL2ZzdGFiIHRhbiBwcm9udG8gY29tbyBzZWEgcG9zaWJsZS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5vIHNlIGVuY29udHLDs1xuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogZXNwZXJhOiDCv8Khwr9ObyBoYXkgbcOhcyBwcm9jZXNvcyBoaWpvcz8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQXRlbmNpw7NuLi4uICVzIHBhcmEgZWwgZGlzcG9zaXRpdm8gJXMgcXVlIGZpbmFsaXrDsyBjb24gbGEgc2XDsWFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IGVsIGVzdGF0dXMgZXMgJXgsIHkgbnVuY2EgZGViacOzIGhhYmVyIHN1Y2VkaWRvLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIlNlIGZpbmFsaXphIGNvbiAlcyAoZXN0YWRvIGRlIHNhbGlkYSAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6NzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBFcnJvciAlZCB3aGlsZSBleGVjdXRpbmcgZnNjay4lcyBmb3IgJXNcbiIKK21zZ3N0ciAiJXM6IEVycm9yICVkIG1pZW50cmFzIHNlIGVqZWN1dGFiYSBmc2NrLiAlcyBwYXJhICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiUHVlZGUgc2VyIHF1ZSB0b2RvcyBvIG5pbmd1bm8gZGUgbG9zIHRpcG9zIGRlIHNpc3RlbWFzIGRlIGZpY2hlcm9zIHF1ZSBzZSBcbiIKKyJwYXNhcm9uIGNvbiAtdCBkZWJhbiBlc3RhciBjb24gZWwgcHJlZmlqbyAnbm8nIG8gJyEwLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGxvcyB0aXBvcyBkZSBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyAiCisibnVtYmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogbm8gc2UgcHVlZGUgdmVyaWZpY2FyICVzOiBmc2NrLiVzIG5vIHNlIGVuY3VlbnRyYVxuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICJSZXZpc2FuZG8gdG9kb3MgbG9zIHNpc3RlbWFzIGRlIGZpY2hlcm9zLlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLWVzcGVyYW5kby0tIChwYXNvICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiIgorIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgdGlwb19kZV9zZl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgW29wY2lvbmVzX2RlX3NmXSBbc2lzdGVtYV9kZV9maWNoZXJvcyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IGRlbWFzaWFkb3MgZGlzcG9zaXRpdm9zXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiBkZW1hc2lhZG9zIGFyZ3VtZW50b3NcbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiTW9kbyBkZSBlbXBsZW86ICVzIFstUlZhZGx2XSBbZmljaGVyb3MuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiTWllbnRyYXMgc2UgbGXDrWFuIGxhcyBiYW5kZXJhcyBlbiAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIk1pZW50cmFzIHNlIGxlw61hIGxhIHZlcnNpw7NuIGVuICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy0iCisiY291bnRdXG4iCittc2dzdHIgIiIKKyJNb2RvIGRlIGVtcGxlbzogJXMgWy1jfC1sIG5vbWJyZS1kZWwtZmljaGVyb10gWy1iIHRhbWHDsW8tZGVsLWJsb3F1ZV1cbiIKKyJcdFstZiB0YW1hw7FvLWRlbC1mcmFnbWVudG9dIFstaSBieXRlcy1wb3Itbm9kby1pXSBbLUkgdGFtYcOxby1kZWwtbm9kby1pXVxuIgorIlx0Wy1KIG9wY2lvbmVzLWRlLWZpY2hlcm8tZGUtdHJhbnNhY2Npb25lc10gWy1OIG7Dum1lcm8tZGUtbm9kb3MtaV1cbiIKKyJcdFstbSBwb3JjZW50YWplLWRlLWJsb3F1ZXMtcmVzZXJ2YWRvc10gWy1vIFNPLWNyZWFkb3JdXG4iCisiXHRbLWcgYmxvcXVlcy1wb3ItZ3J1cG9dIFstTCBldGlxdWV0YS1kZS12b2x1bWVuXVxuIgorIlx0Wy1NIMO6bHRpbW8tZGlyZWN0b3Jpby1tb250YWRvXSBbLU8gY2FyYWN0ZXLDrXN0aWNhWywuLi5dXVxuIgorIlx0Wy1yIHJldmlzacOzbi1kZWwtc2ZdIFstRSBvcGNpw7NuLWV4dGVuZGlkYXssLi4uXV1cbiIKKyJcdFstVCB0aXBvLWRlbC1zZl0gWy1qbnF2RlNWXSBkaXNwb3NpdGl2byBbY3VlbnRhLWRlLWJsb3F1ZXNdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiRWplY3V0YW5kbyBvcmRlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZWplY3V0YXIgJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjgKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgIm1pZW50cmFzIHNlIHByb2Nlc2FiYSBsYSBsaXN0YSBkZSBibG9xdWVzIGRhw7FhZG9zIGRlbCBwcm9ncmFtYSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKyJFbCBibG9xdWUgJWQgZW4gZWwgw6FyZWEgZGVsIGRlc2NyaXB0b3IgcHJpbWFyaW8gZGVsIHN1cGVyYmxvcXVlL2dydXBvIGVzdMOhICIKKyJkYcOxYWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiTG9zIGJsb3F1ZXMgZGVsICV1IGFsICV1IGRlYmVuIGVzdGFyIGNvcnJlY3RvcyBwYXJhIHBvZGVyIGNvbnN0cnVpciB1biAiCisic2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjAKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiRmluYWxpemFuZG8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQXRlbmNpw7NuOiBsb3MgZGVzY3JpcHRvcmVzIGRlIHJlc3BhbGRvIGRlbCBzdXBlcmJsb3F1ZS9ncnVwbyBlbiBlbCBibG9xdWUgIgorIiV1XG4iCisiXHRjb250aWVuZW4gYmxvcXVlcyBkYcOxYWRvcy5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyOTkKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAibWllbnRyYXMgc2UgbWFyY2FiYW4gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgY29tbyB1dGlsaXphZG9zIgorCisjOiBtaXNjL21rZTJmcy5jOjMxNgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIkVzY3JpYmllbmRvIGxhcyB0YWJsYXMgZGUgbm9kb3MtaTogIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vIHNlIHB1ZWRlbiBlc2NyaWJpciAlZCBibG9xdWVzIGVuIGxhIHRhYmxhIGRlIG5vZG9zLWkgYWwgcHJpbmNpcGlvIGRlICV1OiAiCisiJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNTEgbWlzYy9ta2UyZnMuYzoyMTc1IG1pc2MvbWtlMmZzLmM6MjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJoZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJtaWVudHJhcyBzZSBjcmVhYmEgZWwgZGlyZWN0b3JpbyByYcOteiIKKworIzogbWlzYy9ta2UyZnMuYzozNjkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHJvb3QgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGVsIG5vZG8taSByYcOteiIKKworIzogbWlzYy9ta2UyZnMuYzozODMKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJtaWVudHJhcyBzZSBwb27DrWFuIGxvcyBwZXJtaXNvcyBkZWwgZHVlw7FvIGRlbCBub2RvLWkgcmHDrXoiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAxCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgIm1pZW50cmFzIHNlIGNyZWFiYSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MDgKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJtaWVudHJhcyBzZSByZXZpc2FiYSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MjEKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgIm1pZW50cmFzIHNlIGV4cGFuZMOtYSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgcG9uw61hIGVsIG5vZG8taSBkZSBibG9xdWVzIGRhw7FhZG9zIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJTZSBhZ290w7MgbGEgbWVtb3JpYSBjdWFuZG8gc2UgYm9ycmFiYW4gbG9zIHNlY3RvcmVzICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIkF0ZW5jacOzbjogbm8gc2UgcHVlZGUgbGVlciBlbCBibG9xdWUgMDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIKK21zZ3N0ciAiQXRlbmNpw7NuOiBubyBzZSBwdWVkZSBib3JyYXIgZWwgc2VjdG9yICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNQorbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIm1pZW50cmFzIHNlIGluaWNpYWxpemFiYSBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL21rZTJmcy5jOjUxMworbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiU2UgcmVsbGVuYSBjb24gY2Vyb3MgZWwgZGlzcG9zaXRpdm8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lczogIgorCisjOiBtaXNjL21rZTJmcy5jOjUyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisibWllbnRyYXMgc2UgaW5pY2lhbGl6YWJhIGNvbiBjZXJvcyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZGVsICIKKyJkaXNwb3NpdGl2byAoYmxvcXVlICV1LCBjdWVudGEgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjU0MworbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSBlc2NyaWLDrWEgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzo1NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdGVuY2nDs246IGhheSAldSBibG9xdWVzIHNpbiB1c2FyLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkV0aXF1ZXRhIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJUaXBvIGRlIFNPOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZWwgYmxvcXVlPSV1IChiaXTDoWNvcmE9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZWwgYmxvcXVlPSV1IChiaXTDoWNvcmE9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZWwgZnJhZ21lbnRvPSV1IChiaXTDoWNvcmE9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBub2Rvcy1pLCAldSBibG9xdWVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiV1IGJsb3F1ZXMgKCUyLjJmJSUpIHJlc2VydmFkb3MgcGFyYSBlbCBzdXBlcnVzdWFyaW9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJQcmltZXIgYmxvcXVlIGRlIGRhdG9zPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk7Dum1lcm8gbcOheGltbyBkZSBibG9xdWVzIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgYmxvcXVlIGRlIGdydXBvc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9xdWUgZGUgZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9xdWVzIHBvciBncnVwbywgJXUgZnJhZ21lbnRvcyBwb3IgZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9xdWVzIHBvciBncnVwbywgJXUgZnJhZ21lbnRvcyBwb3IgZ3J1cG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBub2Rvcy1pIHBvciBncnVwb1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJSZXNwYWxkbyBkZWwgc3VwZXJibG9xdWUgZ3VhcmRhZG8gZW4gbG9zIGJsb3F1ZXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzo2ODcgbWlzYy90dW5lMmZzLmM6MTE2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJwYXRyw7NuX2RlX3BydWViYSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlRhbWHDsW8gZGUgemFuY2FkYSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHphbmNhZGEgbm8gdsOhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHZhcmlhY2nDs24gZGUgdGFtYcOxbyBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc0NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkVsIG3DoXhpbW8gZGUgbGEgdmFyaWFjacOzbiBkZSB0YW1hw7FvIGRlYmUgc2VyIG1heW9yIHF1ZSBlbCB0YW1hw7FvIGRlbCBzaXN0ZW1hICIKKyJkZSBmaWNoZXJvcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiRWwgY2FtYmlvIGRlIHRhbWHDsW8gZW4gbMOtbmVhIG5vIGVzdMOhIHNvcG9ydGFkbyBjb24gc2lzdGVtYXMgZGUgYXJjaGl2b3MgZGUgIgorInJldmlzacOzbiAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlRhbWHDsW8gZGUgemFuY2FkYSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkxhcyBvcGNpb25lcyBlc3BlY2lmaWNhZGFzIHNvbiBpbmNvcnJlY3RhczogJXNcbiIKKyJcbiIKKyJPcGNpb25lcyBleHRlbmRpZGFzIGRlYmVuIGVzdGFyIHNlcGFyYWRhcyBwb3IgY29tYXMsIHkgcHVlZGVuIHRvbWFyIHVuXG4iCisiXHRhcmd1bWVudG8gcXVlIHNlIGFqdXN0YSBjb24gdW4gc2lnbm8gZGUgaWd1YWwgKCc9JykuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIGV4dGVuZGlkYXMgdsOhbGlkYXMgc29uOlxuIgorIlx0c3RyaWRlPTxsb25naXR1ZCBkZSBsYSB6YW5jYWRhIGVuIGJsb3F1ZXM+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PG3DoXhpbW8gZGUgdmFyaWFjacOzbiBkZSB0YW1hw7FvIGVuIGJsb3F1ZXM+XG4iCisiXG4iCisiXHR0ZXN0X2ZzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBta2UyZnMgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJFcnJvciBkZSBzaW50YXhpcyBlbiBlbCBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIG1rZTJmcyAoJXMsIGzDrW5lYSAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MSBtaXNjL3R1bmUyZnMuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIlNlIHB1c28gdW5hIG9wY2nDs24gbm8gdsOhbGlkYSBwYXJhIGVsIHNpc3RlbWEgZGUgZmljaGVyb3M6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTAzIG1pc2MvdHVuZTJmcy5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIlNlIHB1c28gdW5hIG9wY2nDs24gZGUgbW9udGFqZSBubyB2w6FsaWRhOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiRmluYWxpemFuZG8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGxvcyB0aXBvcyBkZSBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgInRhbWHDsW8gZGVsIGJsb3F1ZSBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorIkF0ZW5jacOzbjogZWwgdGFtYcOxbyBkZWwgYmxvcXVlICVkIG5vIHNlIHB1ZWRlIHV0aWxpemFyIGVuIG11Y2hvcyBzaXN0ZW1hcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJ0YW1hw7FvIGRlbCBibG9xdWUgaW52w6FsaWRvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2MgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJOw7ptZXJvIGlsZWdhbCBkZSBibG9xdWVzIHBvciBncnVwbyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzY3Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImxvcyBibG9xdWVzIHBvciBncnVwbyBkZWJlbiBzZXIgdW4gbcO6bHRpcGxvIGRlIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3NQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICLCoU7Dum1lcm8gaW52w6FsaWRvIGRlIGJsb3F1ZXMhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM4MQorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgInByb3BvcmNpw7NuIGRlIG5vZG9zLWkgaW52w6FsaWRhICVzIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE1Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJlbiBtYWxsb2MgcGFyYSBmaWNoZXJvX2RlX2Jsb3F1ZXNfZGHDsWFkb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgImVsIHBvcmNlbnRhamUgZGUgYmxvcXVlcyByZXNlcnZhZG9zIGVzIGludsOhbGlkbyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIm5pdmVsIGRlIHJldmlzacOzbiBpbmNvcnJlY3RvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFtYcOxbyBkZSBsb3Mgbm9kb3MtaSBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIm7Dum1lcm8gZGUgbG9zIG5vZG9zLWkgaW52w6FsaWRvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MgorIywgZnV6enkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8gc29sbyBwb2Ryw61hIHNlciBlc3BlY2lmaWNhZG8gdW5hIHZleiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTAwCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBzb2xvIHBvZHLDrWEgc2VyIGVzcGVjaWZpY2FkbyB1bmEgdmV6IgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTAgbWlzYy9ta2UyZnMuYzoyNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgIiIKKyJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGRlbCBkaXNwb3NpdGl2byAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKyJFbCB0YW1hw7FvIGRlbCBibG9xdWUgZGVsIGRpc3Bvc2l0aXZvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgKCVkKSBlc1xuIgorIm1lbm9yIHF1ZSBlbCB0YW1hw7FvIGRlbCBibG9xdWUgbcOtbmltbyAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJBw7FhZGllbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBhbCBkaXNwb3NpdGl2byAlczogIgorCisjIFRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJsb2NrcyBpcyBpbnZhbGlkLgorIzogbWlzYy9ta2UyZnMuYzoxNTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICJjdWVudGEgZGUgYmxvcXVlcyBubyB2w6FsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInNpc3RlbWEgZGUgZmljaGVyb3MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU5NiByZXNpemUvbWFpbi5jOjM3NAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGRldGVybWluYXIgZWwgdGFtYcOxbyBkZWwgZGlzcG9zaXRpdm87IHNlIGRlYmVyw6EgZXNwZWNpZmljYXJcbiIKKyJleHBsw61jaXRhbWVudGUgZWwgdGFtYcOxbyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIlNlIGluZm9ybcOzIHF1ZSBlbCB0YW1hw7FvIGRlbCBkaXNwb3Npdm8gZXMgY2Vyby4gIEVzIHBvc2libGUgcXVlIHNlIGhheWFcbiIKKyJcdGVzcGVjaWZpY2FkbyB1bmEgcGFydGljacOzbiBubyB2w6FsaWRhIG8gcXVlIGxhIHRhYmxhIGRlIHBhcnRpY2lvbmVzXG4iCisiXHRubyBoYXlhIHNpZG8gcmVsZcOtZGEgZGVzcHXDqXMgZGUgZWplY3V0YXIgZmRpc2sgZGViaWRvIGEgcXVlIHVuYSBcbiIKKyJcdHBhcnRpY2nDs24gbW9kaWZpY2FkYSBlc3TDoSBvY3VwYWRhIG8gZW4gdXNvLiAgRXMgbmVjZXNhcmlvIHJlaW5pY2lhclxuIgorIlx0cGFyYSBwb2RlciByZWxlZXIgbGEgdGFibGEgZGUgcGFydGljaW9uZXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBlcyBtw6FzIGdyYW5kZSBxdWUgZWwgdGFtYcOxbyBhcGFyZW50ZSBkZWwgZGlzcG9zaXRpdm8uIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzE2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTczMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJlbCBjYW1iaW8gZGUgdGFtYcOxbyBlbiBsw61uZWEgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyBubyBlc3TDoSBpbXBsZW1lbnRhZG8gIgorInBhcmEgbG9zIHNpc3RlbWFzIGRlIGZpY2hlcm9zIHF1ZSBubyBlc3TDoW4gZXNwYXJjaWRvcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiXG4iCisiRWwgdGFtYcOxbyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGVzIG11eSBncmFuZGUgcGFyYSBlbCBzaXN0ZW1hIGRlICIKKyJmaWNoZXJvcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJlbCBwb3JjZW50YWplIGRlIGJsb3F1ZXMgcmVzZXJ2YWRvcyBlcyBpbnbDoWxpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4OQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBkZXRlcm1pbmFyIGVsIHRhbWHDsW8gZGVsIHNlY3RvciBwb3IgaGFyZHdhcmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc5NQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBzZWN0b3IgcG9yIGhhcmR3YXJlIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgIm1pZW50cmFzIHNlIHBvbsOtYSBlbCBub2RvLWkgZGUgYmxvcXVlcyBkYcOxYWRvcyIKKworIzogbWlzYy9ta2UyZnMuYzoxODMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAibG9zIGJsb3F1ZXMgZGUgJWQgYnl0ZXMgc29uIG11eSBncmFuZGVzIHBhcmEgZWwgc2lzdGVtYSAobcOheCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorIkF0ZW5jacOzbjogbG9zIGJsb3F1ZXMgZGUgJWQgYnl0ZXMgc29uIG11eSBncmFuZGVzIHBhcmEgZWwgc2lzdGVtYSBcbiIKKyIobcOheCAlZCksIHNlIGhhY2UgdW4gZXNmdWVyem8gcGFyYSBjb250aW51YXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTIwCittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJlbCBjYW1iaW8gZGUgdGFtYcOxbyBlbiBsw61uZWEgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyBubyBlc3TDoSBpbXBsZW1lbnRhZG8gIgorInBhcmEgbG9zIHNpc3RlbWFzIGRlIGZpY2hlcm9zIHF1ZSBubyBlc3TDoW4gZXNwYXJjaWRvcyIKKworIzogbWlzYy9ta2UyZnMuYzoxOTI5Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImxhIGN1ZW50YSBkZSBibG9xdWVzIHBvciBncnVwbyBlc3TDoSBmdWVyYSBkZWwgaW50ZXJ2YWxvIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDQKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidGFtYcOxbyBpbmNvcnJlY3RvIGRlbCBub2RvLWkgJWQgKG3DrW4gJWQvbcOheCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgImRlbWFzaWFkb3Mgbm9kb3MtaSAoJWxsdSksIMK/YXVtZW50YXIgZWwgcmF0aW8gZGUgbG9zIG5vZG9zLWk/IgorCisjOiBtaXNjL21rZTJmcy5jOjE5ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJkZW1hc2lhZG9zIG5vZG9zLWkgKCVsbHUpLCBlc3BlY2lmaXF1ZSBtZW5vcyBxdWUgMl4zMiBub2Rvcy1pIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJ0YW1hw7FvX2RlX25vZG9zX2kgKCV1KSAqIG7Dum1lcm9fZGVfbm9kb3NfaSAoJXUpIGVzIGRlbWFzaWFkb1xuIgorImdyYW5kZSBwYXJhIHVuIHNpc3RlbWEgZGUgZmljaGVyb3MgY29uICVsdSBibG9xdWVzOyBlc3BlY2lmaXF1ZVxuIgorInVuIHJhdGlvIG1heW9yIGRlIG5vZG9zLWkgKC1pKSBvIHVuIG1lbm9yIG7Dum1lcm8gZGUgbm9kb3MtaSAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0bWllbnRyYXMgaW50ZW50YWJhIGNyZWFyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzoyMTU0CisjLCBmdXp6eQorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJBw7FhZGllbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBhbCBkaXNwb3NpdGl2byAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjIxNzAKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjc3Cittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJtaWVudHJhcyBzZSBhanVzdGFiYSBlbCBzdXBlcmJsb3F1ZSIKKworIzogbWlzYy9ta2UyZnMuYzoyMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAic2lzdGVtYSBvcGVyYXRpdm8gZGVzY29ub2NpZG8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNDIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJFc2NyaWJpZW5kbyBsYXMgdGFibGFzIGRlIG5vZG9zLWk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNDI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgcmVzZXJ2YXIgbGFzIHRhYmxhcyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNDM0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIm1pZW50cmFzIHNlIGVzY3JpYsOtYSBlbCBtYXBhIGRlIGJpdHMgZGVsIGJsb3F1ZSIKKworIzogbWlzYy9ta2UyZnMuYzoyNDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJtaWVudHJhcyBzZSBpbmljaWFsaXphYmEgYSBjZXJvIGVsIGJsb3F1ZSAldSBhbCBmaW5hbCBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNDkwCittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgcmVzZXJ2YWJhbiBsb3MgYmxvcXVlcyBwYXJhIGVsIGNhbWJpbyBkZSB0YW1hw7FvIGVuIGzDrW5lYSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTAxIG1pc2MvdHVuZTJmcy5jOjY0MAorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJBw7FhZGllbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBhbCBkaXNwb3NpdGl2byAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0bWllbnRyYXMgc2UgaW50ZW50YWJhIGHDsWFkaXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGFsIGRpc3Bvc2l0aXZvICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjUgbWlzYy9ta2UyZnMuYzoyNTU3IG1pc2MvdHVuZTJmcy5jOjY2OSBtaXNjL3R1bmUyZnMuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJoZWNob1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiQ3JlYW5kbyBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgKCVkIGJsb3F1ZXMpOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU1MworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0bWllbnRyYXMgc2UgaW50ZW50YWJhIGNyZWFyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTY0IG1pc2MvdHVuZTJmcy5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICIiCisiRXNjcmliaWVuZG8gc3VwZXJibG9xdWVzIHkgbGEgaW5mb3JtYWNpw7NuIGNvbnRhYmxlIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiQXRlbmNpw7NuLCBzZSB0dXZvIHVuIHByb2JsZW1hIGFsIGVzY3JpYmlyIGxvcyBzdXBlcmJsb3F1ZXMuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImhlY2hvXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJNb2RvIGRlIGVtcGxlbzogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgZW1wbGVvOiAlcyA8ZGV2MT4gPGRldjI+IDxkZXYzPlxuIgorIlxuIgorIkVzdGUgcHJvZ3JhbWEgbXVlc3RyYSBsYSBpbmZvcm1hY2nDs24gZGUgbGEgcGFydGljacOzbiBwYXJhIHVuIGNvbmp1bnRvIGRlXG4iCisiZGlzcG9zaXRpdm9zLiBVbmEgZm9ybWEgY29tw7puIGRlIHV0aWxpemFyIGVzdGUgcHJvZ3JhbWEgZXM6XG4iCisiXG4iCisiXHQlcyAvZGV2L2hkYT9cbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgImUybGFiZWw6IG5vIHNlIHB1ZWRlIGFicmlyICVzXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3Cittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIlBvciBmYXZvciBlamVjdXRlIGUyZnNjayBzb2JyZSBlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wICIKKyJtbXBfdXBkYXRlX2ludGVydmFsXVxuIgorIlx0Wy1yIHJlc2VydmVkX2Jsb2Nrc19jb3VudF0gWy11IHVzZXJdIFstQyBtb3VudF9jb3VudF0gWy1MIHZvbHVtZV9sYWJlbF1cbiIKKyJcdFstTSBsYXN0X21vdW50ZWRfZGlyXSBbLU8gW15dZmVhdHVyZVssLi4uXV1cbiIKKyJcdFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dIFstVCBsYXN0X2NoZWNrX3RpbWVdIFstVSBVVUlEXVxuIgorIlx0WyAtSSBuZXdfaW5vZGVfc2l6ZSBdIGRldmljZVxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICVzIFstYyBjdWVudGEtbcOheGltYS1kZS1tb250YWplc11cbiIKKyJcdFstZSBjb21wb3J0YW1pZW50by1kZS1lcnJvcmVzXSBbLWcgZ3J1cG9dIFstaSBpbnRlcnZhbG9bZHxtfHddXSBcbiIKKyJcdFstal0gWy1KIG9wY2lvbmVzLWRlbC1maWNoZXJvLWRlLXRyYW5zYWNjaW9uZXNdXG4iCisiXHRbLWxdIFstcyBiYW5kZXJhLWVzcGFyY2ltaWVudG9dIFstbSBwb3JjZW50YWplLWRlLWJsb3F1ZXMtcmVzZXJ2YWRvc11cbiIKKyJcdFstbyBbXl1vcGNpb25lcy1kZS1tb250YWplWywuLi5dXSBbLXIgY3VlbnRhLWRlLWJsb3F1ZXMtcmVzZXJ2YWRvc11cbiIKKyJcdFstdSB1c3VhcmlvXSBbLUMgY3VlbnRhLWRlLW1vbnRhamVzXSBbLUwgZXRpcXVldGEtZGUtdm9sdW1lbl1cbiIKKyJcdFstTSDDumx0aW1vLWRpcmVjdG9yaW8tbW9udGFkb10gWy1PIFteXWNhcmFjdGVyw61zdGljYVssLi4uXV1cbiIKKyJcdFstVCDDumx0aW1hLWZlY2hhLWRlLXJldmlzw7NuXSBbLVUgVVVJRF0gZGlzcG9zaXRpdm9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBleHRlcm5vIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5vIGVzIHVuIGRpc3Bvc2l0aXZvIGNvbiBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIsKhTm8gc2UgZW5jb250csOzIGVsIHN1cGVyYmxvcXVlIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIzNgorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIk5vIHNlIGVuY29udHLDsyBlbCBVVUlEIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVuIGVsIGZpY2hlcm8gZGVcbiIKKyJ0cmFuc2FjY2lvbmVzIGRlbCBkaXNwb3NpdGl2by5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjU3Cittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY1Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbGltaW5hZG9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzA5Cittc2dpZCAid2hpbGUgcmVhZGluZyBiaXRtYXBzIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYW4gbG9zIG1hcGFzIGRlIGJpdHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxNworbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIm1pZW50cmFzIHNlIGJvcnJhYmEgZWwgbm9kby1pIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyOAorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXNjcmliw61hIGVsIG5vZG8taSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKyJObyBzZSBzb3BvcnRhIGRlc2FjdGl2YXIgbGEgY2FyYWN0ZXLDrXN0aWNhICclcycgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJTZSBwb25lIGxhIGhvcmEgZGUgbGEgw7psdGltYSByZXZpc2nDs24gYWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBhICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQxMQorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSAnaGFzX2pvdXJuYWwnIHPDs2xvIHB1ZWRlIHNlciBib3JyYWRhIGN1YW5kbyBlbCBzaXN0ZW1hIGRlXG4iCisiZmljaGVyb3Mgbm8gZXN0w6EgbW9udGFkYSBvIGVzdMOhIGVuIG1vZG8gZGUgc8OzbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDE5Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSAnbmVlZHNfcmVjb3ZlcnknIGVzdMOhIHB1ZXN0YS4gIFBvciBmYXZvciBlamVjdXRlIGUyZnNjayBhbnRlc1xuIgorImRlIGRlYWN0aXZhciBsYSBiYW5kZXJhICdoYXNfam91cm5hbCcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQzOAorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSAnaGFzX2pvdXJuYWwnIHPDs2xvIHB1ZWRlIHNlciBib3JyYWRhIGN1YW5kbyBlbCBzaXN0ZW1hIGRlXG4iCisiZmljaGVyb3Mgbm8gZXN0w6EgbW9udGFkYSBvIGVzdMOhIGVuIG1vZG8gZGUgc8OzbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDczCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYW4gbG9zIG1hcGFzIGRlIGJpdHMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJtaWVudHJhcyBzZSBsZcOtYW4gbG9zIGJsb3F1ZXMgZGHDsWFkb3MgZGVsIG5vZG8taSIKKworIzogbWlzYy90dW5lMmZzLmM6NTE5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzMAorIywgZnV6enkKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgJ2hhc19qb3VybmFsJyBzw7NsbyBwdWVkZSBzZXIgYm9ycmFkYSBjdWFuZG8gZWwgc2lzdGVtYSBkZVxuIgorImZpY2hlcm9zIG5vIGVzdMOhIG1vbnRhZGEgbyBlc3TDoSBlbiBtb2RvIGRlIHPDs2xvIGxlY3R1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjM1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHlhIHRpZW5lIHVuIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0bWllbnRyYXMgc2UgaW50ZW50YWJhIGFicmlyIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiQ3JlYW5kbyB1biBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZW4gZWwgZGlzcG9zaXRpdm8gJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgIiIKKyJtaWVudHJhcyBzZSBhZ3JlZ2FiYSB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIGFsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBlbiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6NjcxCittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICJDcmVhbmRvIGVsIG5vZG8taSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY4MAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiXHRtaWVudHJhcyBpbnRlbnRhYmEgY3JlYXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NjMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIiIKKyLCoU5vIHNlIHB1ZWRlIHJlc2VydmFyIG1lbW9yaWEgcGFyYSBhbmFsaXphciBzaW50w6FjdGljYW1lbnRlIGxhcyBvcGNpb25lcyFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCAiCisiY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICIiCisiTm8gc2UgcHVlZGUgYW5hbGl6YXIgc2ludMOhY3RpY2FtZW50ZSBlbCBlc3BlY2lmaWNhZG9yIGRlIGZlY2hhL2hvcmE6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAiY3VlbnRhIGRlIG1vbnRhamVzIGluY29ycmVjdG9zIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiY29tcG9ydGFtaWVudG8gZGUgZXJyb3JlcyBpbmNvcnJlY3RvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAibm9tYnJlIGRlbCBnaWQvZ3J1cG8gaW5jb3JyZWN0byAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgImludGVydmFsbyBpbmNvcnJlY3RvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAicHJvcG9yY2nDs24gZGUgYmxvcXVlcyByZXNlcnZhZG9zIGluY29ycmVjdGEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAwMworbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItbyBzb2xvIHBvZHLDrWEgc2VyIGVzcGVjaWZpY2FkbyB1bmEgdmV6IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIHPDs2xvIHNlIHB1ZWRlIGVzcGVjaWZpY2FyIHVuYSB2ZXoiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrcyBjb3VudCAtICVzIgorbXNnc3RyICJjdWVudGEgZGUgYmxvcXVlcyByZXNlcnZhZG9zIGluY29ycmVjdGEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJub21icmUgZGUgdWlkL3VzdWFyaW8gaW5jb3JyZWN0byAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJ0YW1hw7FvIGRlIGxvcyBub2Rvcy1pIGludsOhbGlkbyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJtbXBfdXBkYXRlX2ludGVydmFsIHRvbyBiaWc6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICIiCisiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJTZSBwb25lIGxhIGN1ZW50YSBkZSBtb250YWplcyBtw6F4aW1hIGEgJWRcbiIKK21zZ3N0clsxXSAiU2UgcG9uZSBsYSBjdWVudGEgZGUgbW9udGFqZXMgbcOheGltYSBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIlBhcsOhbWV0cm8gZGUgemFuY2FkYSBubyB2w6FsaWRvOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHphbmNhZGEgbm8gdsOhbGlkbzogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiVGFtYcOxbyBkZSB6YW5jYWRhIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXNwZWNpZmljYWRhcyBzb24gaW5jb3JyZWN0YXMuXG4iCisiXG4iCisiTGFzIG9wY2lvbmVzIGV4dGVuZGlkYXMgZGViZW4gZXN0YXIgc2VwYXJhZGFzIHBvciBjb21hcywgeSBwdWVkZW4gdG9tYXIgdW5cbiIKKyJcdGFyZ3VtZW50byBxdWUgc2UgYWp1c3RhIGNvbiB1biBzaWdubyBkZSBpZ3VhbCAoJz0nKS5cbiIKKyJcbiIKKyJMYXMgb3BjaW9uZXMgZXh0ZW5kaWRhcyB2w6FsaWRhcyBzb246XG4iCisiXHRzdHJpZGU9PGxvbmdpdHVkIGRlIGxhIHphbmNhZGEgZW4gYmxvcXVlcz5cbiIKKyJcdHJlc2l6ZT08bcOheGltbyBkZSB2YXJpYWNpw7NuIGRlIHRhbWHDsW8gZW4gYmxvcXVlcz5cbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyMworIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAibWllbnRyYXMgc2UgbGXDrWFuIGxvcyBtYXBhcyBkZSBiaXRzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzI4CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJsZXllbmRvIGxvcyBtYXBhcyBkZSBiaXRzIGRlbCBub2RvLWkgeSBkZWwgYmxvcXVlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo3ODQKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb3F1ZXMgcG9yIHNlciBtb3ZpZG9zIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ4Cittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTQKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1OQorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIm1pZW50cmFzIHNlIHJlc2VydmFiYW4gbG9zIGJsb3F1ZXMgcGFyYSBlbCBjYW1iaW8gZGUgdGFtYcOxbyBlbiBsw61uZWEiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODE4CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIk5vIHNlIHB1ZWRlIHJlc2VydmFyIG1lbW9yaWEgcGFyYSBsb3MgdGlwb3MgZGUgc2lzdGVtYSBkZSBmaWNoZXJvc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgbW9kaWZpY2FyIGVsIHRhbWHDsW8gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBnaWQgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2hyaW5raW5nIHRoZSBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBob3JhIGRlIGxhIMO6bHRpbWEgcmV2aXNpw7NuIGFsIHNpc3RlbWEgZGUgZmljaGVyb3MgYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJTZSBwb25lIGxhIGN1ZW50YSBkZSBtb250YWplcyBtw6F4aW1hIGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiU2UgcG9uZSBsYSBjdWVudGEgZGUgbW9udGFqZXMgYWN0dWFsIGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIlNlIHBvbmUgZWwgY29tcG9ydGFtaWVudG8gZGUgZXJyb3JlcyBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJTZSBwb25lIGVsIGdpZCBkZSBsb3MgYmxvcXVlcyByZXNlcnZhZG9zICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICJTZSBwb25lIGVsIGludGVydmFsbyBlbnRyZSByZXZpc2lvbmVzIGVuICVsdSBzZWd1bmRvc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBpbnRlcnZhbG8gZW50cmUgcmV2aXNpb25lcyBlbiAlbHUgc2VndW5kb3NcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBwb3JjZW50YWplIGRlIGJsb3F1ZXMgcmVzZXJ2YWRvcyBhICVsdSAoJXUgYmxvcXVlcylcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJsYSBjYW50aWRhZCBkZSBibG9xdWVzIHJlc2VydmFkb3MgZXMgbXV5IGdyYW5kZSAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgY291bnQgdG8gJWxsdVxuIgorbXNnc3RyICJTZSBwb25lIGxhIGNhbnRpZGFkIGRlIGJsb3F1ZXMgcmVzZXJ2YWRvcyBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgeWEgdGllbmUgc3VwZXJibG9xdWVzIGRpc3BlcnNvcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIkxhIGJhbmRlcmEgZGUgc3VwZXJibG9xdWVzIGRpc3BlcnNvcyBlc3TDoSBwdWVzdGEuICAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NgorbXNnaWQgIiIKKyJcbiIKKyJDbGVhcmluZyB0aGUgc3BhcnNlIHN1cGVyZmxhZyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIlNlIHBvbmUgbGEgaG9yYSBkZSBsYSDDumx0aW1hIHJldmlzacOzbiBhbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIlNlIHBvbmUgZWwgdWlkIGRlIGxvcyBibG9xdWVzIHJlc2VydmFkb3MgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwMgorbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiTGEgYmFuZGVyYSAnaGFzX2pvdXJuYWwnIHPDs2xvIHB1ZWRlIHNlciBib3JyYWRhIGN1YW5kbyBlbCBzaXN0ZW1hIGRlXG4iCisiZmljaGVyb3Mgbm8gZXN0w6EgbW9udGFkYSBvIGVzdMOhIGVuIG1vZG8gZGUgc8OzbG8gbGVjdHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1MworbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiRm9ybWF0byBkZWwgVVVJRCBubyB2w6FsaWRvXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNjYKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorIkxhIGJhbmRlcmEgJ2hhc19qb3VybmFsJyBzw7NsbyBwdWVkZSBzZXIgYm9ycmFkYSBjdWFuZG8gZWwgc2lzdGVtYSBkZVxuIgorImZpY2hlcm9zIG5vIGVzdMOhIG1vbnRhZGEgbyBlc3TDoSBlbiBtb2RvIGRlIHPDs2xvIGxlY3R1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIlNlIHBvbmUgZWwgZ2lkIGRlIGxvcyBibG9xdWVzIHJlc2VydmFkb3MgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBnaWQgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiU2UgcG9uZSBlbCBnaWQgZGUgbG9zIGJsb3F1ZXMgcmVzZXJ2YWRvcyAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJTZSBwb25lIGxhIGN1ZW50YSBkZSBtb250YWplcyBhY3R1YWwgYSAlZFxuIgorCisjOiBtaXNjL3V0aWwuYzo3NAorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIsK/Q29udGludWFyIGRlIHRvZGFzIGZvcm1hcz8gKHMsbikgIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcG9uZXIgJXMgLS0tICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjkyCittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVuIGFwYXJpZW5jaWEsIGVsIGRpc3Bvc2l0aXZvIG5vIGV4aXN0ZTsgwr9TZSBlc3BlY2lmaWPDsyBjb3JyZWN0YW1lbnRlP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5vIGVzIHVuIGRpc3Bvc2l0aXZvIGVzcGVjaWFsIGRlIGJsb3F1ZXMuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICLCoSVzIGVzIHRvZG8gZWwgZGlzcG9zaXRpdm8sIG5vIHPDs2xvIHVuYSBwYXJ0aWNpw7NuIVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTQKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorIlNlIGZ1ZXJ6YSBkZSB0b2RhcyBmb3JtYXMgbWtlMmZzLiAgRXNwZXJlbW9zIHF1ZSAvZXRjL210YWIgc2VhIGluY29ycmVjdG8uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAiwqFObyBzZSBoYXLDoSB1biAlcyBhcXXDrSFcbiIKKworIzogbWlzYy91dGlsLmM6MTY2Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIlNlIGZ1ZXJ6YSBkZSB0b2RhcyBmb3JtYXMgbWtlMmZzLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxODIKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugam91cm5hbCBvcHRpb25zIVxuIgorbXNnc3RyICIiCisiwqFObyBzZSBwdWVkZSByZXNlcnZhciBtZW1vcmlhIHBhcmEgbGEgcmV2aXNpw7NuIHNpbnTDoWN0aWNhIGRlIGxhcyBvcGNpb25lcyAiCisiZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyFcbiIKKworIzogbWlzYy91dGlsLmM6MjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlbiBlbmNvbnRyYXIgbG9zIG7Dum1lcm9zIG3DoWdpY29zIGRlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSAiCisidHJhbnNhY2Npb25lcyIKKworIzogbWlzYy91dGlsLmM6MjI4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZSBlc3BlY2lmaWNhcm9uIG9wY2lvbmVzIGluY29ycmVjdGFzIHBhcmEgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzLlxuIgorIlxuIgorIkxhcyBvcGNpb25lcyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGRlYmVuIGVzdGFyIHNlcGFyYWRhcyBwb3IgY29tYXNcbiIKKyJ5IHB1ZWRlbiB0ZW5lciB1biBhcmd1bWVudG8gcXVlIHNlIHBvbmUgY29uIHVuIHNpZ25vIGRlIGlndWFsICgnPScpLlxuIgorIlxuIgorIkxhcyBvcGNpb25lcyB2w6FsaWRhcyBwYXJhIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBzb246XG4iCisiXHRzaXplPTx0YW1hw7FvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZW4gbWVnYWJ5dGVzPlxuIgorIiAgICAgICAgZGV2aWNlPTxkaXNwb3NpdGl2byBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzPlxuIgorIlxuIgorIkVsIHRhbWHDsW8gZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBkZWJlIGVzdGFyIGVudHJlIDEwMjQgeSAxMDI0MDAgIgorImJsb3F1ZXMgZGVsIHNpc3RlbWEgZGUgZmljaGVyb3MuXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI1OAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzIGRlbWFzaWFkbyBwZXF1ZcOxbyBwYXJhIHVuIGZpY2hlcm8gZGUgIgorInRyYW5zYWNjaW9uZXNcbiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiRWwgdGFtYcOxbyBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIHNvbGljaXRhZG8gZXMgZGUgJWQgYmxvcXVlcztcbiIKKyJkZWJlcsOtYSBlc3RhciBlbnRyZSAxMDI0IHkgMTAyNDAwMDAgYmxvcXVlcy4gIFNlIGZpbmFsaXphLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNzMKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbCB0YW1hw7FvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZXMgbXV5IGdyYW5kZSBwYXJhIGVsIHNpc3RlbWEgZGUgIgorImZpY2hlcm9zLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkVzdGUgc2lzdGVtYSBkZSBmaWNoZXJvcyBzZSByZXZpc2Fyw6EgYXV0b23DoXRpY2FtZW50ZSBjYWRhICVkIG1vbnRhamVzIG9cbiIKKyIlZyBkw61hcywgbG8gcXVlIHN1Y2VkYSBwcmltZXJvLiAgVXRpbGljZSB0dW5lMmZzIC1jIG8gLWkgcGFyYSBjYW1iaWFybG8uXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiBkZW1hc2lhZG9zIGFyZ3VtZW50b3NcbiIKKworIzogbWlzYy91dWlkZC5jOjE3MgorbXNnaWQgImNvbm5lY3QiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5MQorbXNnaWQgIndyaXRlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTkKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAiUGFyw6FtZXRybyBkZSB6YW5jYWRhIG5vIHbDoWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorIk5vIHNlIHB1ZWRlIGFuYWxpemFyIHNpbnTDoWN0aWNhbWVudGUgZWwgZXNwZWNpZmljYWRvciBkZSBmZWNoYS9ob3JhOiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgZW5jb250cmFyIGVsIHN1cGVyYmxvcXVlIGRlbCBleHQyLCIKKworIzogbWlzYy91dWlkZC5jOjMxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJObyBzZSBwdWVkZSByZWNvbmVjdGFyICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGVsIEBpICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIlZlcnNpw7NuIGRlIEVBIG5vIHbDoWxpZGEuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MzMgbWlzYy91dWlkZC5jOjU2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgZWwgQGQgL0BsICglcyk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJNb2RvIGRlIGVtcGxlbzogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIFZhY2lhZG8gZXh0ZW5zbzpcbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdE7Dum09JWQsIFRhbWHDsW89JWQsIEN1cnNvcj0lZCwgT3JkZW5hZG89JWRcbiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiTW9kbyBkZSBlbXBsZW86ICVzIFstZCBiYW5kZXJhc19kZV9kZXB1cmFjacOzbl0gWy1mXSBbLUZdIFxuIgorIlx0Wy1wXSBkaXNwb3NpdGl2byBbbnVldm8tdGFtYcOxb11cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkV4dGVuZGllbmRvIGxhIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjgKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiUmV1YmljYW5kbyBibG9xdWVzIgorCisjOiByZXNpemUvbWFpbi5jOjcxCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlJldmlzYW5kbyBsYSB0YWJsYSBkZSBub2Rvcy1pIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiQWN0dWFsaXphbmRvIGxhcyByZWZlcmVuY2lhcyBhIGxvcyBub2Rvcy1pIgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJNb3ZpZW5kbyBsYSB0YWJsYSBkZSBub2Rvcy1pIgorCisjOiByZXNpemUvbWFpbi5jOjgwCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICLCv8Khwr9QYXNvIGRlc2Nvbm9jaWRvPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiU2UgY29taWVuemEgZWwgcGFzbyAlZCAobcOheCA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgYWJyw61hICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXN0YWJhIHBvbmllbmRvIGxhIHZlcnNpw7NuIGVuICVzIgorCisjOiByZXNpemUvbWFpbi5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM0NCByZXNpemUvbWFpbi5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvciBmYXZvciBlamVjdXRlIGFudGVzICdlMmZzY2sgLWYgJXMnLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICIiCisiJXMgZXN0w6EgbW9udGFkbzsgwqFObyBzZSBwdWVkZSBjYW1iaWFyIGVsIHRhbWHDsW8gZGUgdW4gc2lzdGVtYSBkZSBmaWNoZXJvcyAiCisibW9udGFkbyFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgInRhbWHDsW8gZGUgbG9zIG5vZG9zLWkgaW52w6FsaWRvIC0gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkyCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICIiCisiRWwgdGFtYcOxbyBkZWwgYmxvcXVlIGRlbCBkaXNwb3NpdGl2byBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzICglZCkgZXNcbiIKKyJtZW5vciBxdWUgZWwgdGFtYcOxbyBkZWwgYmxvcXVlIG3DrW5pbW8gJWRcbiIKKworIzogcmVzaXplL21haW4uYzo0MTAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHphbmNhZGEgbm8gdsOhbGlkbzogJXNcbiIKKworIzogcmVzaXplL21haW4uYzo0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aWNpw7NuIGNvbnRlbmlkYSAobyBlbCBkaXNwb3NpdGl2bykgc8OzbG8gdGllbmUgJXUgKCVkaykgYmxvcXVlcy5cbiIKKyJZIHNlIGhhIHNvbGljaXRhZG8gdW4gbnVldm8gdGFtYcOxbyBkZSAldSBibG9xdWVzLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIHlhIHRpZW5lICV1IGJsb3F1ZXMuIMKhTm8gaGF5IG5hZGEgcXVlIGhhY2VyIVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVuICVzIHRpZW5lIGFob3JhICV1IGJsb3F1ZXMuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgIm1pZW50cmFzIHNlIGludGVudGFiYSBtb2RpZmljYXIgZWwgdGFtYcOxbyAlcyIKKworIzogcmVzaXplL21haW4uYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVsIHNpc3RlbWEgZGUgZmljaGVyb3MgZW4gJXMgdGllbmUgYWhvcmEgJXUgYmxvcXVlcy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAibWllbnRyYXMgc2UgaW50ZW50YWJhIHZlciBlbCBlc3RhZG8gZGVsIGZpY2hlcm8gJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6NDQKKyMsIGZ1enp5Cittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorIk5vIHNlIHNvcG9ydGEgZGVzYWN0aXZhciBsYSBjYXJhY3RlcsOtc3RpY2EgJyVzJyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcy5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjYzCittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdG1pZW50cmFzIHNlIGludGVudGFiYSBhYnJpciBlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMgZW4gJXNcbiIKKworIzogcmVzaXplL29ubGluZS5jOjkyIHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTUgcmVzaXplL29ubGluZS5jOjEyMgorIywgZnV6enkKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJtaWVudHJhcyBzZSByZXNlcnZhYmFuIGxvcyBibG9xdWVzIHBhcmEgZWwgY2FtYmlvIGRlIHRhbWHDsW8gZW4gbMOtbmVhIgorCisjOiByZXNpemUvb25saW5lLmM6MTA3CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiRWwgQGogZXh0ZXJubyBubyB0aWVuZSBpbXBsZW1lbnRhZG8gZXN0ZSBAZlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTE5CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRWwgQGogZXh0ZXJubyBubyB0aWVuZSBpbXBsZW1lbnRhZG8gZXN0ZSBAZlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE2MgorIywgZnV6enkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGV4dGVybm8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJsb3Mgbm9kb3MtaSAoJWxsdSkgZGViZW4gc2VyIG1lbm9zIGRlICV1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NTc2Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJibG9xdWVzIHJlc2VydmFkb3MiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo3ODkKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9xdWVzIGRlIG1ldGFkYXRvcyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJFc3RvIG51bmNhIGRlYmVyw61hIHN1Y2VkZXI6IMKhU2UgY2FtYmlhIGVsIHRhbWHDsW8gZGVsIG5vZG8taSBjb3JydXB0byFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAibGV5ZW5kbyBlbCBzdXBlcmJsb3F1ZSBkZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgZGVzY3JpcHRvcmVzIGRlIGdydXBvIGVuICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIsIGRlc2NyaXB0b3JlcyBkZSBncnVwbyBlbiAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZXNjcmliaWVuZG8gbG9zIG1hcGFzIGRlIGJpdHMgZGUgbG9zIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiZXNjcmliaWVuZG8gbG9zIG1hcGFzIGRlIGJpdHMgZGUgbG9zIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibGV5ZW5kbyBsb3MgbWFwYXMgZGUgYml0cyBkZWwgbm9kby1pIHkgZGVsIGJsb3F1ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYSBibG9jayBiaXRtYXAiCittc2dzdHIgImxleWVuZG8gbG9zIG1hcGFzIGRlIGJpdHMgZGVsIG5vZG8taSB5IGRlbCBibG9xdWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAibWllbnRyYXMgc2UgZXNjcmliw61hIGxhIHRhYmxhIGRlIG5vZG9zLWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJSZXZpc2FuZG8gbGEgdGFibGEgZGUgbm9kb3MtaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIiIKKyJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzIG3DoXMgZ3JhbmRlIHF1ZSBlbCB0YW1hw7FvIGFwYXJlbnRlIGRlbCBkaXNwb3NpdGl2by4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKKyMsIGZ1enp5Cittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiwgbWFwYSBkZSBiaXRzIGRlIG5vZG8taSBlbiAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiICBNYXBhIGRlIGJpdHMgZGUgYmxvcXVlIGVuICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICLCoU7Dum1lcm8gaW52w6FsaWRvIGRlIGJsb3F1ZXMhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiwqFOw7ptZXJvIGludsOhbGlkbyBkZSBibG9xdWVzIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImxleWVuZG8gYmxvcXVlcyBpbmRpcmVjdG9zIGRlbCBub2RvLWkgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAibGV5ZW5kbyBibG9xdWVzIGluZGlyZWN0b3MgZGVsIG5vZG8taSAldSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJsZXllbmRvIGJsb3F1ZXMgaW5kaXJlY3RvcyBkZWwgbm9kby1pICV1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIgIE1hcGEgZGUgYml0cyBkZSBibG9xdWUgZW4gIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKKyMsIGZ1enp5Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIsIG1hcGEgZGUgYml0cyBkZSBub2RvLWkgZW4gIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjkKK21zZ2lkICJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc1Cittc2dpZCAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiJXMgdGllbmUgY2FyYWN0ZXLDrXN0aWNhcyBubyBzb3BvcnRhZGFzOiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICIiCisiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyAlcyB0aWVuZSBhY3RpdmFkYXMgY2FyYWN0ZXLDrXN0aWNhcyBubyBzb3BvcnRhZGFzLlxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWVycm9yIGVuIGxhIHJlc2VydmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgcmVzZXJ2YXIgbWVtb3JpYSBwYXJhIGxvcyB0aXBvcyBkZSBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJObyBzZSBwdWVkZSByZXNlcnZhciBtZW1vcmlhIHBhcmEgbG9zIHRpcG9zIGRlIHNpc3RlbWEgZGUgZmljaGVyb3NcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorIywgZnV6enkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkVsIGJsb3F1ZSBkZWwgZGlyZWN0b3JpbyAldSAoIyVkKSBlc3TDoSB2YWPDrW8gZW4gZWwgbm9kby1pICV1XG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKKyMsIGZ1enp5Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJBw7FhZGllbmRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyBhbCBkaXNwb3NpdGl2byAlczogIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiwqFObyBzZSBlbmNvbnRyw7MgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJtaWVudHJhcyBzZSBpbnRlbnRhYmEgYWJyaXIgZWwgZmljaGVybyBkZSB0cmFuc2FjY2lvbmVzIGV4dGVybm8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiwqFObyBzZSBlbmNvbnRyw7MgZWwgc3VwZXJibG9xdWUgZGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lcyFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJhYXRyaWJ1dG8gZXh0ZW5kaWRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0CisjLCBmdXp6eQorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICI8RWwgbm9kby1pIGRlc2NyaXB0b3IgZGVsIGdydXBvPiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNworbXNnaWQgIlREQjogU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorIywgZnV6enkKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUYW1hw7FvIGRlIHphbmNhZGEgbm8gdsOhbGlkbzogJXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiZWVudHJhZGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDEKK21zZ2lkICJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKKyMsIGZ1enp5Cittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiTm8gc2UgZW5jb250csOzIC9AbC4gICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgInRhbWHDsW8gaW52w6FsaWRvIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIC0gJXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJtaWVudHJhcyBzZSBjcmVhYmEgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0CisjLCBmdXp6eQorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJtaWVudHJhcyBzZSBjcmVhYmEgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIlNlIHB1c28gdW5hIG9wY2nDs24gbm8gdsOhbGlkYSBwYXJhIGVsIHNpc3RlbWEgZGUgZmljaGVyb3M6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIk5vIHNlIHB1ZWRlIGNsb25hciBlbCBmaWNoZXJvOiAlbVxuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJQYXLDoW1ldHJvIGRlIHphbmNhZGEgbm8gdsOhbGlkbzogJXNcbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8RWwgw61uZGljZSBBQ0wgZGVsIG5vZG8taT4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPExhIGluZm9ybWFjacOzbiBBQ0wgZGVsIG5vZG8taT4iCisKKyN+IG1zZ2lkICIlcyBpcyBtb3VudGVkLiAgIgorI34gbXNnc3RyICIlcyBlc3TDoSBtb250YWRvLiAgIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiTm8gc2UgcHVlZGUgZGV0ZXJtaW5hciBlbCB0YW1hw7FvIGRlbCBmaWNoZXJvIGRlIHRyYW5zYWNjaW9uZXMiCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICJ0YW1hw7FvIGRlIGxvcyBibG9xdWVzIGRhw7FhZG9zIC0gJXMiCisKKyN+IG1zZ2lkICJzaG9ydCB3cml0ZSAob25seSAlZCBieXRlcykgZm9yIHdyaXRpbmcgaW1hZ2UgaGVhZGVyIgorI34gbXNnc3RyICIiCisjfiAic2UgZXNjcmliacOzIG11eSBwb2NvIChzw7NsbyAlZCBieXRlcykgcGFyYSBlbCBlbmNhYmV6YWRvIGRlIGxhIGltYWdlbiIKKworI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJUYW1hw7FvIGRlbCBmcmFnbWVudG8gaW52w6FsaWRvIC0gJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICIiCisjfiAiQXRlbmNpw7NuOiBubyBlc3TDoW4gaW1wbGVtZW50YWRvcyBsb3MgZnJhZ21lbnRvcy4gU2UgZGVzY2FydGEgbGEgb3BjacOzbiAtIgorI34gImZcbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiTk8gc2UgaGEgZWxpbWluYWRvIGVsIGZpY2hlcm8gZGUgdHJhbnNhY2Npb25lc1xuIgorCisjfiBtc2dpZCAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorI34gbXNnc3RyICIjXHRcdCAldSAtPiAldSAoJWQpXG4iCisKKyN+IG1zZ2lkICJAUyBkb2Vzbid0IGhhdmUgaGFzX0BqIGZsYWcsIGJ1dCBoYXMgZXh0MyBAaiAlcy5cbiIKKyN+IG1zZ3N0ciAiRWwgQFMgbm8gdGllbmUgbGEgYmFuZGVyYSBoYXNfam91cm5hbCwgcGVybyB0aWVuZSB1biBAaiBleHQzICVzLlxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkVycm9yIHdoaWxlIGRlbGV0aW5nIGV4dGVudDogJW1cbiIKKyN+IG1zZ3N0ciAiRXJyb3IgbWllbnRyYXMgc2UgaW50ZW50YWJhIGVuY29udHJhciAvQGw6ICVtXG4iCisKKyN+IG1zZ2lkICJSZWNyZWF0ZSBqb3VybmFsIHRvIG1ha2UgdGhlIGZpbGVzeXN0ZW0gZXh0MyBhZ2Fpbj9cbiIKKyN+IG1zZ3N0ciAiwr9SZWNyZWFyIGVsIEBqIHBhcmEgaGFjZXIgZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBleHQzIGRlIG51ZXZvP1xuIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJtaWVudHJhcyBzZSByZWludGVudGFiYSBlc2NyaWJpciBsb3MgbWFwYXMgZGUgYml0cyBkZWwgYmxvcXVlIHBhcmEgJXMiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyBmYWxsw7MgcGFyYSAlczogJXNcbiIKKworIyBCdWVubywgZW4gZXN0b3MgY2Fzb3MsIHkgYW50ZSBsYSBpbXBvc2liaWxpZGFkIGRlIHRyYWR1Y2lyIGxhcyBwYWxhYnJhcworIyBjb25zaWRlcm8gYWwgbWVub3MgcXVlIHNlIGRlYmUgdHJhZHVjaXIgYSBsYSBncmFtw6F0aWNhIGVzcGHDsW9sYToKKyMgLT4gaW9jdGwgZGUgSERJT19HRVRHRU8KKyN+IG1zZ2lkICJIRElPX0dFVEdFTyBpb2N0bCIKKyN+IG1zZ3N0ciAiSERJT19HRVRHRU8gaW9jdGwiCisKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJCTEtHRVRTSVpFIGlvY3RsIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbCBAYSBlbiBlbCBAaSAlaSB0aWVuZSB1biBhcnJlZ2xvIGFzb2NpYXRpdm8gKCVOKSBxdWUgZXMgQG4gKGRlYmUgc2VyICIKKyN+ICIwKVxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKyN+IG1zZ3N0ciAibWllbnRyYXMgc2UgbGxhbWFiYSBhIGV4dDJmc19ibG9ja19pdGVyYXRlIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAibWllbnRyYXMgc2UgbGxhbWFiYSBhIGxhIGZ1bmNpw7NuIGl0ZXJhZG9yYSIKKworI34gbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgaW5vZGUgYnVmZmVyIgorI34gbXNnc3RyICJtaWVudHJhcyBzZSByZXNlcnZhYmEgYWwgYsO6ZmVyIGRlbCBub2RvLWkiCisKKyN+IG1zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlIHRhYmxlIChncm91cCAlZCkiCisjfiBtc2dzdHIgIm1pZW50cmFzIHNlIGxlw61hIGxhIHRhYmxhIGRlIG5vZG9zLWkgKGdydXBvICVkKSIKKworI34gbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAibWllbnRyYXMgc2UgZXNjcmliw61hIGxhIHRhYmxhIGRlIG5vZG9zLWkgKGdydXBvICVkKSIKKworI34gbXNnaWQgIlBhc3MgMDogRG9pbmcgYnl0ZS1zd2FwIG9mIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiUGFzbyAwOiBIYWNpZW5kbyBsYSB0cmFzcG9zaWNpw7NuIGRlIGJ5dGVzIGRlbCBzaXN0ZW1hIGRlIGZpY2hlcm9zXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IHRoZSBmaWxlc3lzdGVtIG11c3QgYmUgZnJlc2hseSBjaGVja2VkIHVzaW5nIGZzY2tcbiIKKyN+ICJhbmQgbm90IG1vdW50ZWQgYmVmb3JlIHRyeWluZyB0byBieXRlLXN3YXAgaXQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyBkZWJlIHNlciByZXZpc2FkbyBkZXNkZSBjZXJvIHV0aWxpemFuZG9cbiIKKyN+ICJmc2NrIHkgbm8gZGViZSBlc3RhciBtb250YWRvIGN1YW5kbyBzZSBpbnRlbnRlIGhhY2VyIHVuYSB0cmFzcG9zaWNpw7NuIGRlICIKKyN+ICJieXRlcyBlbiDDqWwuXG4iCisKKyN+IG1zZ2lkICJCeXRlIHN3YXAiCisjfiBtc2dzdHIgIlRyYXNwb3NpY2nDs24gZGUgYnl0ZXMiCisKKyN+IG1zZ2lkICJCeXRlLXN3YXBwaW5nIGZpbGVzeXN0ZW1zIG5vdCBjb21waWxlZCBpbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMb3Mgc2lzdGVtYXMgY29uIHRyYXNwb3NpY2nDs24gZGUgYnl0ZXMgbm8gZXN0w6FuIGNvbXBpbGFkb3MgZW4gZXN0YSAiCisjfiAidmVyc2nDs24gZGUgZTJmc2NrXG4iCisKKyN+IG1zZ2lkICJJbmNvbXBhdGlibGUgb3B0aW9ucyBub3QgYWxsb3dlZCB3aGVuIGJ5dGUtc3dhcHBpbmcuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMYXMgb3BjaW9uZXMgaW5jb21wYXRpYmxlcyBubyBlc3TDoW4gcGVybWl0aWRhcyBjdWFuZG8gc2UgaGFjZSAiCisjfiAidHJhc3Bvc2ljacOzbiBkZSBieXRlcy5cbiIKKworI34gbXNnaWQgIiVzOiBGaWxlc3lzdGVtIGJ5dGUgb3JkZXIgYWxyZWFkeSBub3JtYWxpemVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IGVsIG9yZGVuIGRlIGxvcyBieXRlcyBkZWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB5YSBzZSBub3JtYWxpesOzLlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAtICVzIgorI34gbXNnc3RyICJibG9xdWUgaW5pY2lhbCBubyB2w6FsaWRvIC0gJXMiCisKKyN+IG1zZ2lkICJOb3RlOiBUaGlzIGlzIGEgYnl0ZS1zd2FwcGVkIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiTm90YTogZXN0ZSBlcyB1biBzaXN0ZW1hIGRlIGZpY2hlcm9zIGNvbiB0cmFzcG9zaWNpw7NuIGRlIGJ5dGVzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiRmlsZXN5c3RlbSB0b28gbGFyZ2UuICBObyBtb3JlIHRoYW4gMioqMzEtMSBibG9ja3NcbiIKKyN+ICJcdCAoOFRCIHVzaW5nIGEgYmxvY2tzaXplIG9mIDRrKSBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbCBzaXN0ZW1hIGRlIGZpY2hlcm9zIGVzIGRlbWFzaWFkbyBncmFuZGUuICBBY3R1YWxtZW50ZSBubyBzZVxuIgorI34gInNvcG9ydGFuIG3DoXMgZGUgMioqMzEtMSBibG9xdWVzICg4IFRCIGNvbiB1biB0YW1hw7FvIGRlIGJsb3F1ZSBkZSA0aykuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIldhcm5pbmc6IHNvbWUgMi40IGtlcm5lbHMgZG8gbm90IHN1cHBvcnQgYmxvY2tzaXplcyBncmVhdGVyIHRoYW4gNDA5NlxuIgorI34gIlx0dXNpbmcgZXh0My4gIFVzZSAtYiA0MDk2IGlmIHRoaXMgaXMgYW4gaXNzdWUgZm9yIHlvdS5cbiIKKyN+ICJcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIkF0ZW5jacOzbjogYWxndW5vcyBuw7pjbGVvcyAyLjQgbm8gb3BlcmFuIGNvbiB0YW1hw7FvcyBkZSBibG9xdWUgc3VwZXJpb3Jlc1xuIgorI34gImEgNDA5NiBjb24gZXh0My4gIFV0aWxpY2UgLWIgNDA5NiBzaSBlc3RvIGVzIHVuIHByb2JsZW1hIHBhcmEgdXN0ZWQuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGlub2RlcyBub3QgdXNhYmxlIG9uIG9sZGVyIHN5c3RlbXNcbiIKKyN+IG1zZ3N0ciAiIgorI34gIkF0ZW5jacOzbjogbG9zIG5vZG9zLWkgZGUgJWQgYnl0ZXMgbm8gc2UgcHVlZGVuIHV0aWxpemFyIGVuIG11Y2hvcyAiCisjfiAic2lzdGVtYXNcbiIKKworI34gbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyN+IG1zZ3N0ciAiaGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIGJsb2NrcyByYW5nZTogJWx1LSVsdSIKKyN+IG1zZ3N0ciAiaW50ZXJ2YWxvIGRlIGJsb3F1ZXMgZGHDsWFkb3M6ICVsdS0lbHUiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzIGRpc2FibGVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiRWwgc2lzdGVtYSBkZSBmaWNoZXJvcyB5YSB0aWVuZSBsb3Mgc3VwZXJibG9xdWVzIGRpc3BlcnNvcyAiCisjfiAiZGVzaGFiaWxpdGFkb3MuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBjbGVhcmVkLiAgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJMYSBiYW5kZXJhIGRlIHN1cGVyYmxvcXVlcyBkaXNwZXJzb3MgaGEgc2lkbyBib3JyYWRhLiAgJXMiCisKKyN+IG1zZ2lkICJDbG9uZSBkdXBsaWNhdGUvYmFkIGJsb2NrcyIKKyN+IG1zZ3N0ciAiQ2xvbmFyIGxvcyBibG9xdWVzIGR1cGxpY2Fkb3MvZGHDsWFkb3MiCisKKyN+IG1zZ2lkICJFcnJvciBhbGxvY2F0aW5nIEBhIEBiICViLiAgIgorI34gbXNnc3RyICJFcnJvciBhbCByZXNlcnZhciBlbCBAYiBkZWwgQGEgJWIuICAiCisKKyN+IG1zZ2lkICIiCisjfiAiRHVwbGljYXRlIEBicyBmb3VuZC4uLiBpbnZva2luZyBkdXBsaWNhdGUgQGIgcGFzc2VzLlxuIgorI34gIlBhc3MgMUI6IFJlc2NhbiBmb3IgZHVwbGljYXRlL2JhZCBAYnNcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlNlIGVuY29udHJhcm9uIEBicyBkdXBsaWNhZG9zLi4uIHNlIGludm9jYW4gbG9zIHBhc29zIHBhcmEgQGJzICIKKyN+ICJkdXBsaWNhZG9zLlxuIgorI34gIlBhc28gMUI6IFJlLWV4cGxvcmFjacOzbiBwYXJhIGJ1c2NhciBAYnMgZHVwbGljYWRvcy9kYcOxYWRvc1xuIgorCisjfiBtc2dpZCAiRHVwbGljYXRlL2JhZCBAYihzKSBpbiBAaSAlaToiCisjfiBtc2dzdHIgIkhheSBAYihzKSBkdXBsaWNhZG9zL2Rhw7FhZG9zIGVuIGVsIEBpICVpOiIKKworI34gbXNnaWQgIkZvcmNpYmx5IGNsZWFyaW5nIEhUUkVFIGZsYWcgb24gQGkgJWQgKCVxKS4gIChCZXRhIHRlc3QgY29kZSlcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlNlIGludGVudGEgYm9ycmFyIGEgbGEgZnVlcnphIGxhIGJhbmRlcmEgSFRSRUUgZW4gZWwgQGkgJWQgKCVxKS4gIChDw7NkaWdvICIKKyN+ICJkZSBwcnVlYmEgZW4gZXRhcGEgYmV0YSlcbiIKKworI34gbXNnaWQgIlVzYWdlOiAgZmluZHN1cGVyIGRldmljZSBbc2tpcGJ5dGVzIFtzdGFydGtiXV1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIk1vZG8gZGUgZW1wbGVvOiBmaW5kc3VwZXIgZGlzcG9zaXRpdm8gW2J5dGVzcG9yc2FsdGFyIFtwcmluY2lwaW8gKGVuICIKKyN+ICJrYildXVxuIgorCisjfiBtc2dpZCAic2tpcGJ5dGVzIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iCisjfiBtc2dzdHIgImJ5dGVzcG9yc2FsdGFyIGRlYmUgc2VyIHVuIG7Dum1lcm8sIG5vICVzXG4iCisKKyN+IG1zZ2lkICJza2lwYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZVxuIgorI34gbXNnc3RyICJieXRlc3BvcnNhbHRhciBkZWJlIHNlciB1biBtw7psdGlwbG8gZGVsIHRhbWHDsW8gZGVsIHNlY3RvclxuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJwcmluY2lwaW8gZGViZSBzZXIgdW4gbsO6bWVybywgbm8gJXNcbiIKKworI34gbXNnaWQgInN0YXJ0a2Igc2hvdWxkIGJlIHBvc2l0aXZlLCBub3QgJWxsZFxuIgorI34gbXNnc3RyICJwcmluY2lwaW8gZGViZSBzZXIgcG9zaXRpdm8sIG5vICVsbGRcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVsbGQsIHdpdGggJWQgYnl0ZSBpbmNyZW1lbnRzXG4iCisjfiBtc2dzdHIgInNlIGNvbWllbnphIGVuICVsbGQsIGNvbiBpbmNyZW1lbnRvcyBkZSAlZCBieXRlc1xuIgorCisjfiBtc2dpZCAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKyN+IG1zZ3N0ciAiICAgICAgZXN0ZSAgICAgICAgYmxvcXVlICBmc19ibGtfc3ogIGJsa3N6IGdycCB1bHRpbW9fbW9udGFkb1xuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIiUxNGxsZDogZmluaXNoZWQgd2l0aCBlcnJubyAlZFxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJTE0bGxkOiBzZSBmaW5hbGl6YSBjb24gZWwgZXJyb3IgbsO6bWVybyAlZFxuIgorCisjfiBtc2dpZCAiKHVua25vd24gb3MpIgorI34gbXNnc3RyICIoc28gZGVzY29ub2NpZG8pIgorCisjfiBtc2dpZCAicmVzaXplMmZzICVzICglcylcbiIKKyN+IG1zZ3N0ciAicmVzaXplMmZzICVzICglcylcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWQvJWQsIE5lZWRlZDogJWRcbiIKKyN+IG1zZ3N0ciAiTsO6bWVybyBkZSBibG9xdWVzIGxpYnJlczogJWQvJWQsIHNlIG5lY2VzaXRhbjogJWRcbiIKKworI34gbXNnaWQgIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIKKyN+IG1zZ3N0ciAiRW50cmFuZG8gYWwgbW9kbyBkZXNlc3BlcmFkbyBwYXJhIHJlc2VydmFyIGJsb3F1ZXNcbiIKKworI34gbXNnaWQgIk1vdmluZyAlZCBibG9ja3MgJXUtPiV1XG4iCisjfiBtc2dzdHIgIk1vdmllbmRvICVkIGJsb3F1ZXMgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJpbm89JXUsIGJsb2NrY250PSVsbGQsICV1LT4ldVxuIgorI34gbXNnc3RyICJpbm89JXUsIGJsb2NrY250PSVsbGQsICV1LSV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiTm9kbyBpIG1vdmlkbyAldS0+JXVcbiIKKworI34gbXNnaWQgIklub2RlIHRyYW5zbGF0ZSAoZGlyPSV1LCBuYW1lPSUuKnMsICV1LT4ldSlcbiIKKyN+IG1zZ3N0ciAiVHJhZHVjY2nDs24gZGUgbm9kby1pIChkaXI9JXUsIG5vbWJyZT0lLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIkxhIHRhYmxhIGkgbXVldmUgYWwgZ3J1cG8gJWQgYmxvcXVlICV1LT4ldSAoZGlmZXJlbmNpYSAlZClcbiIKKworI34gbXNnaWQgIiVkIGJsb2NrcyBvZiB6ZXJvcy4uLlxuIgorI34gbXNnc3RyICIlZCBibG9xdWVzIGRlIGNlcm9zLi4uXG4iCisKKyN+IG1zZ2lkICJJbm9kZSB0YWJsZSBtb3ZlIGZpbmlzaGVkLlxuIgorI34gbXNnc3RyICJFbCBtb3ZpbWllbnRvIGRlIGxhIHRhYmxhIGRlIGxvcyBub2RvcyBpIGhhIHRlcm1pbmFkby5cbiIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9mci5nbW8gYi9lMmZzcHJvZ3MvcG8vZnIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZGNhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vZnIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9mci5wbyBiL2UyZnNwcm9ncy9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDI3ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2ZyLnBvCkBAIC0wLDAgKzEsNjk4NCBAQAorIyBNZXNzYWdlcyBmcmFu52FpcyBwb3VyIEdOVSBjb25jZXJuYW50IGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIENvcHlyaWdodCCpIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE1pY2hlbCBSb2JpdGFpbGxlIDxyb2JpdGFpbEBJUk8uVU1vbnRyZWFsLkNBPiwgdHJhZHVjdGV1ciBkZXB1aXMvc2luY2UgMTk5Ni4KKyMgU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZW5zLWx5b24ub3JnPiwgMjAwNi0yMDEzLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHTlUgZTJmc3Byb2dzIDEuNDIuOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMy0wNi0xNiAwODoxNy0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0wOC0wNCAxNjo1MiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTYW11ZWwgVGhpYmF1bHQgPHNhbXVlbC50aGliYXVsdEBlbnMtbHlvbi5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJlbmNoIDx0cmFkdWNAdHJhZHVjLm9yZz5cbiIKKyJMYW5ndWFnZTogZnJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOC1iaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiQmxvYyBk6WZlY3R1ZXV4ICV1IGhvcnMgbGltaXRloDsgaWdub3LpLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImxvcnMgZHUgY29udHL0bGUgZGUgbCdpbnTpZ3JpdOkgZGUgbCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3RldXgiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsJ2ktbm9ldWQgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svaXNjYW4uYzoxMTAgZTJmc2NrL3NjYW50ZXN0LmM6MTA3CisjOiBlMmZzY2svdW5peC5jOjEzMzIgZTJmc2NrL3VuaXguYzoxNDIwIG1pc2MvYmFkYmxvY2tzLmM6MTIxNAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjIyIG1pc2MvYmFkYmxvY2tzLmM6MTIzNiBtaXNjL2JhZGJsb2Nrcy5jOjEyNDgKKyM6IG1pc2MvZHVtcGUyZnMuYzo1ODggbWlzYy9lMmltYWdlLmM6MTE5NiBtaXNjL2UyaW1hZ2UuYzoxMzI0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM3IG1pc2MvbWtlMmZzLmM6MTk2IG1pc2MvdHVuZTJmcy5jOjE5MDcgcmVzaXplL21haW4uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGQnb3V2ZXJ0dXJlIGRlICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGQnb3V2ZXJ0dXJlIHZpYSBwb3BlbigpIKugJXOguyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjAzCittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgg4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsYSBtaXNlIOAgam91ciBkZSBsJ2ktbm9ldWQgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICIiCisiQXZlcnRpc3NlbWVudKA6IGJsb2MgaWxs6WdhbCAldSByZXDpcukgZGFucyBsJ2ktbm9ldWQgZGVzIGJsb2NzXG4iCisiZOlmZWN0dWV1eC4gIEVmZmFj6S5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRXJyZXVyIGRlIGxlY3R1cmUgZHUgYmxvYyAlbHUgKCVzKSBsb3JzIGRlICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycmV1ciBkZSBsZWN0dXJlIGR1IGJsb2MgJWx1ICglcykuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJJZ25vcmVyIGwnZXJyZXVyIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIkZvcmNlciBsYSBy6S3pY3JpdHVyZSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwn6WNyaXR1cmUgZHUgYmxvYyAlbHUgKCVzKSBsb3JzIGRlICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBkJ+ljcml0dXJlIGR1IGJsb2MgJWx1ICglcykuICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJsb2NzIGRlcyBy6XBlcnRvaXJlcyB2aWRlcyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJjYXJ0ZSBkZXMgculwZXJ0b2lyZXMgdmlkZSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIkJsb2MgZGVzIHLpcGVydG9pcmVzICV1IChusCVkKSB2aWRlIGRhbnMgbCdpLW5vZXVkICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXOgOiAlcyBub20tZGUtZmljaGllciBub21icmUtZGUtYmxvY3MgdGFpbGxlLWRlcy1ibG9jc1xuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJOb21icmUgaWxs6WdhbCBkZSBibG9jc6AhXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIk5lIHBldXQgYWxsb3VlciBsZSB0YW1wb24gZGUgYmxvYyAodGFpbGxlPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBkaXNxdWVcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiTCdpb2N0bCBCTEtGTFNCVUYgbidlc3QgcGFzIHN1cHBvcnTpoCEgSW1wb3NzaWJsZSBkZSB2aWRlciBsZXMgdGFtcG9ucy5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICJVdGlsaXNhdGlvbqA6ICVzIFstRl0gWy1JoG5vbWJyZV9ibG9jc19kdV90YW1wb25fZF9pX25vZXVkXSBw6XJpcGjpcmlxdWVcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImxvcnMgZGUgbCdvdXZlcnR1cmUgZGUgJXMgcG91ciBsYSB2aWRhbmdlIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk2NyByZXNpemUvbWFpbi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIHZpZGFuZ2UgZGUgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA5MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibG9ycyBkZSBsJ291dmVydHVyZSBkZSBsJ2V4YW1lbiBkJ2ktbm9ldWRzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTEwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsJ29idGVudGlvbiBkZSBsJ2ktbm9ldWQgc3VpdmFudCIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSBpLW5vZXVkcyBleGFtaW7pcy5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjIKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJsZWN0dXJlIGVuIGNvdXJzIGR1IHN1cGVyYmxvYyBkdSBqb3VybmFsXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXOgOiBhdWN1biBzdXBlcmJsb2MgZGUgam91cm5hbCB2YWxpZGUgbidhIOl06SB0cm91dulcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzoDogam91cm5hbCB0cm9wIGNvdXJ0XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiByZWNvdmVyaW5nIGpvdXJuYWxcbiIKK21zZ3N0ciAiJXOgOiBy6WN1cOlyYXRpb24gZHUgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiIgorIiVzoDogYXVjdW5lIHLpY3Vw6XJhdGlvbiBkdSBqb3VybmFsIG4nZXN0IHBvc3NpYmxlIHRhbnQgcXUnaWwgZXN0IGVuXG4iCisibGVjdHVyZSBzZXVsZVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgcuktb3V2ZXJ0dXJlIGRlICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFhdHRyaWJ1dCDpdGVuZHUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJldXIgbG9ycyBkZSBsJ2FsbG9jYXRpb24iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0bWFwIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2NvbXByZXNzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDZXN0IGVuIGNvbmZsaXQgYXZlYyBkZXMgQGJzIGQnYXV0cmVzIHN5c3TobWVzIGRlIGZpY2hpZXJzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWktbm9ldWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklpbGzpZ2FsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqam91cm5hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRGVmZmFj6SIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkculwZXJ0b2lyZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImVlbnRy6WUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkVAZSCroCVEbqC7IGRhbnMgJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZnN5c3TobWUgZGUgZmljaGllcnMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGcG91ciBsJ0BpICVpICglUSkgZXN0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dyb3VwZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZSBAZCBkJ0hUUkVFIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMZXN0IHVuIGxpZW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm1y6WNsYW3pKHMpIHBsdXNpZXVycyBmb2lzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJuaW52YWxpZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvb3JwaGVsaW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibOhtZSBhdmVjIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAicXF1b3RhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJyQGkgcmFjaW5lIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNkZXZyYWl0IOp0cmUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlckBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1bm9uIGF0dGFjaOkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidnDpcmlwaOlyaXF1ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4ZXh0ZW50IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MworbXNnaWQgInp6ZXJvLWxlbmd0aCIKK21zZ3N0ciAiemRlIGxvbmd1ZXVyIHrpcm8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBOVUw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgZGVzIGJsb2NzIGTpZmVjdHVldXg+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgZGUgcXVvdGEgdXRpbGlzYXRldXI+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8TCdpLW5vZXVkIGRlIHF1b3RhIGRlIGdyb3VwZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgZHUgY2hhcmdldXIgZCdhbW9yY2U+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBkdSBy6XBlcnRvaXJlIGRlIHLpY3Vw6XJhdGlvbiBkZSBmaWNoaWVycyBlZmZhY+lzPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8TCdpLW5vZXVkIGRlc2NyaXB0ZXVyIGRlIGdyb3VwZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPEwnaS1ub2V1ZCBkZSBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxMJ2ktbm9ldWQgculzZXJ26SA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8TCdpLW5vZXVkIHLpc2VydukgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzMworbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiZmljaGllciBub3JtYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJy6XBlcnRvaXJlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNworbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgImZpY2hpZXIgZGUgcOlyaXBo6XJpcXVlIGVuIG1vZGUgY2FyYWN06HJlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiZmljaGllciBkZSBw6XJpcGjpcmlxdWUgZW4gbW9kZSBibG9jIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgInR1YmUgbm9tbekiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQzCittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAibGllbiBzeW1ib2xpcXVlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICJzb2NrZXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgInR5cGUgZGUgZmljaGllciBpbmNvbm51IGF2ZWMgdW4gbW9kZSAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIyCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2MgaW5kaXJlY3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI0Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jIGRvdWJsZW1lbnQgaW5kaXJlY3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI2Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9jIHRyaXBsZW1lbnQgaW5kaXJlY3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAiYmxvYyBkZSB0cmFkdWN0aW9uIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMAorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJsb2MgbrAiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGktbm9ldWRzIHLpY2xhbelzIHBsdXNpZXVycyBmb2lzIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjEwIGUyZnNjay9wYXNzMWIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIgorbXNnc3RyICJlcnJldXIgaW50ZXJuZaA6IG5lIHBldXQgdHJvdXZlciBkdXBfYmxrIHBvdXIgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJyZXRvdXJu6SBkZSBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJlcnJldXIgaW50ZXJuZaA6IGltcG9zc2libGUgZGUgdHJvdXZlciBsJ2VucmVnaXN0cmVtZW50IGRlIGJsb2MgRUEgcG91ciAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiZXJyZXVyIGludGVybmWgOiBpbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbCdlbnJlZ2lzdHJlbWVudCBkJ2ktbm9ldWQgRUEgcG91ciAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc1IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJsZWN0dXJlIGRlcyBibG9jcyBkZSBy6XBlcnRvaXJlIgorCisjOiBlMmZzY2svcGFzczEuYzo1OTgKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJjYXJ0ZSBkZXMgaS1ub2V1ZHMgdXRpbGlz6XMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYwOQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBpLW5vZXVkcyBkZSBy6XBlcnRvaXJlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjE5Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAiY2FydGUgZGVzIGktbm9ldWRzIGRlIGZpY2hpZXJzIG5vcm1hdXgiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBibG9jcyB1dGlsaXPpcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk1Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJsJ291dmVydHVyZSBkZSBsJ2V4YW1lbiBkZXMgaS1ub2V1ZHMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgImwnb2J0ZW50aW9uIGRlIGwnaS1ub2V1ZCBzdWl2YW50IGRlcHVpcyBsJ2V4YW1lbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTIzOQorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzc2WgMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibGVjdHVyZSBkZXMgYmxvY3MgaW5kaXJlY3RzIGRlIGwnaS1ub2V1ZCAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM0NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBpLW5vZXVkcyBk6WZlY3R1ZXV4IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzY5Cittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaS1ub2V1ZCBkYW5zIGxhIGNhcnRlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg5Cittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAiY2FydGUgZCdpLW5vZXVkcyBtYWdpcXVlcyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQxNgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJjYXJ0ZSBkZXMgYmxvY3MgculjbGFt6XMgcGx1c2lldXJzIGZvaXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImNhcnRlIGRlcyBibG9jcyBkJ2F0dHJpYnV0cyDpdGVuZHVzIgorCisjOiBlMmZzY2svcGFzczEuYzoyMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYymgOiAlNmx1IGF0dGVuZHUsIG9idGVudSBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjYwCittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJiaXRtYXAgZGUgYmxvY3MiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NjYKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImJpdG1hcCBkJ2ktbm9ldWRzIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjcyCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgInRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUGFzc2WgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIk5lIHBldXQgY29udGludWVyLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwIGQnaS1ub2V1ZHMgY29tcGzpdOlzIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJQb2ludGUgbeltb2lyZSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJQYXNzZaAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImJpdG1hcCBkZSBk6XRlY3Rpb24gZGVzIGJvdWNsZXMgZCdpLW5vZXVkcyIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk2Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJQYXNzZaA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiUGFzc2WgNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIocGFzIGQnaW52aXRlKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiQ29ycmlnZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiRWZmYWNlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJSZWxvY2FsaXNlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJBbGxvdWVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICLJdGVuZHJlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiQ29ubmVjdGVyIOAgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNy6WVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiUuljdXDpcmVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIlRyb25xdWVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIkVmZmFjZXIgbCdpLW5vZXVkIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkFycup0ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiU2NpbmRlciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJDb250aW51ZXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiQ2xvbmVyIGxlcyBibG9jcyBy6WNsYW3pcyBwbHVzaWV1cnMgZm9pcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJE6XRydWlyZSBsZSBmaWNoaWVyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIlN1cHByaW1lciBsZXMgbWVzc2FnZXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkTpbGllciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICJFZmZhY2VyIGwnaW5kZXggSFRyZWUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAiUmVjcullciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKEFVQ1VOKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJDT1JSSUfJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiRUZGQUPJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJSRUxPQ0FMSVPJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzCittc2dpZCAiQUxMT0NBVEVEIgorbXNnc3RyICJBTExPVckiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQKK21zZ2lkICJFWFBBTkRFRCIKK21zZ3N0ciAiyVRFTkRVIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlJFQ09OTkVDVMkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJDUsnJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIlLJQ1VQyVLJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUk9OUVXJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUgRUZGQUPJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiQVJSylTJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIlNDSU5EySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIlBPVVJTVUlURSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiQkxPQ1MgUslDTEFNyVMgUExVU0lFVVJTIEZPSVMgQ0xPTslTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJGSUNISUVSIETJVFJVSVQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJTVVBQUklNySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJEyUxJySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIklOREVYIEhUUkVFIEVGRkFDySIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlJFQ1LJRVJBIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJsZSBAQiBkZSBAYnMgcG91ciBsZSBAZyAlZyBuJ2VzdCBwYXMgZGFucyBsZSBAZy4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJsZSBAQiBkJ0BpcyBwb3VyIGxlIEBnICVnIG4nZXN0IHBhcyBkYW5zIGxlIEBnLiAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorImxhIHRhYmxlIGQnQGlzIHBvdXIgbGUgQGcgJWcgbidlc3QgcGFzIGRhbnMgbGUgQGcuIChAYiAlYilcbiIKKyJBVFRFTlRJT06gOiBQRVJURSBTyVbIUkUgREUgRE9OTslFUyBQT1NTSUJMRS5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiTGUgQFMgbidhIHB1IOp0cmUgbHUgb3UgbmUgY29udGllbnQgcGFzIHVuIEBmXG4iCisiZXh0MiBjb3JyZWN0LiBTaSBsZSBAdiBlc3QgdmFsaWRlIGV0IHF1J2lsIGNvbnRpZW50IHLpZWxsZW1lbnRcbiIKKyJ1biBAZiBleHQyIChldCBub24gcGFzIGRlIHR5cGUgc3dhcCwgdWZzIG91IGF1dHJlKSxcbiIKKyJhbG9ycyBsZSBAUyBlc3QgY29ycm9tcHUsIGV0IHZvdXMgcG91cnJpZXogdGVudGVyIGQnZXjpY3V0ZXJcbiIKKyJlMmZzY2sgYXZlYyB1biBhdXRyZSBAU6A6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMQorbXNnaWQgIiIKKyJUaGUgQGYgc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBAUykgaXMgJWIgQGJzXG4iCisiVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIEB2IGlzICVjIEBic1xuIgorIkVpdGhlciB0aGUgQFMgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSBkdSBAZiAoc2Vsb24gbGUgQFMpIGVzdCBkZSAlYiBAYnNcbiIKKyJMYSB0YWlsbGUgcGh5c2lxdWUgZHUgQHYgZXN0IGRlICVjIEBic1xuIgorIkxlIEBTIG91IGxhIHRhYmxlIGRlcyBwYXJ0aXRpb25zIGVzdCBwZXV0Lep0cmUgY29ycm9tcHVloCFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiQFMgQGJfc2l6ZaA9oCViLCBmcmFnc2l6ZaA9oCVjLlxuIgorIkNldHRlIHZlcnNpb24gZCdlMmZzY2sgbmUgc3VwcG9ydGUgcGFzIGxlcyBmcmFnbWVudHMgZGUgdGFpbGxlcyBkaWZm6XJlbnRlc1xuIgorImRlIGxhIHRhaWxsZSBkZXMgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgYXVyYWl0IGT7IOp0cmUgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBhdXJhaXQgZPsg6nRyZSAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMZSBAZiBuJ2EgcGFzIGQnVVVJRDsgb24gZW4gZ+lu6HJlIHVuLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5vdGWgOiBzaSBwbHVzaWV1cnMgaS1ub2V1ZHMgb3UgYmxvY3MgZGUgYml0bWFwcyBkZSBibG9jcyBvdVxuIgorInVuZSBwYXJ0aWUgZGUgbGEgdGFibGUgZGVzIGktbm9ldWRzIG7pY2Vzc2l0ZW50IHVuZSByZWxvY2FsaXNhdGlvbixcbiIKKyJ2b3VzIGTpc2lyZXJleiBwZXV0Lep0cmUgZXNzYXllciBlbiBwcmVtaWVyIGxpZXUgZCdleOljdXRlciBlMmZzY2tcbiIKKyJhdmVjIGwnb3B0aW9uIKugLWIgJVOguy4gTGUgcHJvYmzobWUgculzaWRlIHBldXQt6nRyZSBzZXVsZW1lbnRcbiIKKyJkYW5zIGxlcyBkZXNjcmlwdGV1cnMgZGUgZ3JvdXBlcyBkZSBibG9jcyBkdSBibG9jIHByaW1haXJlLCBhbG9yc1xuIgorInF1ZSBsZXMgZGVzY3JpcHRldXJzIGRlIGdyb3VwZXMgZGUgYmxvY3MgZGUgc2Vjb3VycyBzb250IHBldXQt6nRyZVxuIgorImVuIGJvbiDpdGF0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5Cittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiQ29ycnVwdGlvbiByZXDpcullIGRhbnMgbGUgQFMuICglc6A9oCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgZOl0ZXJtaW5hdGlvbiBkZSBsYSB0YWlsbGUgZHUgQHYgcGh5c2lxdWWgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJsZSBjb21wdGV1ciBkJ0BpIGRhbnMgbGUgQFMgZXN0ICVpLCBAcyAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODMKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJMZSBIdXJkIG5lIHN1cHBvcnRlIHBhcyBsYSBmb25jdGlvbm5hbGl06SBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJsZSBAUyBhIHVuIEBqIEBuIChAaaAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAiTGUgQGogZXh0ZXJuZSBhIHBsdXNpZXVycyB1dGlsaXNhdGV1cnMgZGUgQGYgKG5vbiBzdXBwb3J06SkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiTmUgcGV1dCB0cm91dmVyIGxlIEBqIGV4dGVybmVcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkxlIEBqIGV4dGVybmUgYSB1biBAUyBjb3Jyb21wdVxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkxlIEBqIGV4dGVybmUgbmUgc3VwcG9ydGUgcGFzIGNlIEBmXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiBmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorIkxlIEBTIGR1IEBqIGVzdCBkZSB0eXBlIGluY29ubnWgJU4gKG5vbiBzdXBwb3J06SkuXG4iCisiSWwgc2VtYmxlIHF1ZSB2b3RyZSBjb3BpZSBkJ2UyZnNjayBzb2l0IHVuIHBldSB2aWVpbGxvdHRlIGV0L291IG5lIHN1cHBvcnRlXG4iCisicGFzIGNlIGZvcm1hdCBkZSBAai5cbiIKKyJJbCBlc3QgYXVzc2kgcG9zc2libGUgcXVlIGxlIEBTIGR1IEBqIHNvaXQgY29ycm9tcHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkxlIEBTIGR1IEBqIGVzdCBjb3Jyb21wdS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiAlcyBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJMZSBkcmFwZWF1IGhhc19AaiBkdSBAUyBuJ2VzdCBwYXMgYWN0aXbpLCBtYWlzIHVuIEBqICVzIGVzdCBwculzZW50LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiTGUgQFMgYSBsZSBkcmFwZWF1IG5lZWRzX3JlY292ZXJ5IGFjdGl26SwgbWFpcyBuJ2EgcGFzIGRlIGRlIEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzNgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAibGUgZHJhcGVhdSBuZWVkc19yZWNvdmVyeSBuJ2VzdCBwYXMgYWN0aXbpLCBtYWlzIGxlIEBqIGNvbnRpZW50IGRlcyBkb25u6WVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJFZmZhY2VyIGxlIEBqIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgImxlIEBmIGEgZGVzIGRyYXBlYXV4IGRlIGZvbmN0aW9ubmFsaXTpcyBhY3RpdulzIG1haXMgZXN0IHVuIEBmIGRlIHZlcnNpb24gMC4gIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIGwnQGkgQG8gJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCB0YWlsbGU9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU2Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiJUIgKCViKSBASSByZXDpcukgZGFucyBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjEKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiROlq4CBlZmZh5+kgbGUgJUIgKCViKSByZXDpcukgZGFucyBsJ0BpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJAaSBAbyAlaSBASSBkYW5zIGxlIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBpICVpIEBJIGRhbnMgbGEgbGlzdGUgZGVzIEBpcyBAb3MuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiTGUgQFMgZHUgQGogYSB1biBkcmFwZWF1IGRlIGZvbmN0aW9ubmFsaXTpcyBpbmNvbm51IHPpbGVjdGlvbm7pIGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiTGUgQFMgZHUgQGogY29udGllbnQgdW4gZHJhcGVhdSBub24gcmVjb25udSBkZSBmb25jdGlvbm5hbGl06XMgaW5jb21wYXRpYmxlcy5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjg2Cittc2dpZCAiQGogdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuIgorbXNnc3RyICJjZXR0ZSB2ZXJzaW9uIGRlIEBqIG4nZXN0IHBhcyBzdXBwb3J06WUgcGFyIGNldCBlMmZzY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiROlwbGFjZW1lbnQgZHUgQGog4CBwYXJ0aXIgZGUgLyVzIHZlcnMgbCdAaSBjYWNo6S5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiRVJSRVVSIGxvcnMgZHUgZOlwbGFjZW1lbnQgZHUgQGqgOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDEKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ2hhbXBzIGRlIEBTIGRlIEBqIEBuIHJlcOly6XMgKOAgcGFydGlyIGR1IEBqIFYxKS5cbiIKKyJFZmZhY2VtZW50IGRlcyBjaGFtcHMgYXUtZGVs4CBkdSBAUyBkZSBAaiBWMS4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA3Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiRXjpY3V0ZXIgcXVhbmQgbeptZSBsZSBAaiIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxMgorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICJMZSBkcmFwZWF1IGRlIHLpY3Vw6XJhdGlvbiBuJ2VzdCBwYXMgYWN0aXbpIGRhbnMgbGUgQFMgZGUgc2Vjb3VycywgbGUgQGogc2VyYSBkb25jIHF1YW5kIG3qbWUgZXjpY3V06S5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTcKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFyY2hpdmFnZSBkZXMgaW5mb3JtYXRpb25zIGR1IEBiIGRlIGwnQGkgZHUgQGouXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzIyCittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorIkxlIEBmIG4nYSBwYXMgbCdvcHRpb24gcmVzaXplX2lub2RlIGFjdGl26WUsIG1haXMgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiZXN0ICVOoDsgQHMgeulyby4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyOAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIlJlc2l6ZV9pbm9kZSBuJ2VzdCBwYXMgYWN0aXbpLCBtYWlzIGwnQGkgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgbidlc3QgcGFzIG51bC4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMworbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIkwnQGkgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgbidlc3QgcGFzIHZhbGlkZS4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM4Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkxhIGRhdGUgZGUgZGVybmllciBtb250YWdlIGR1IEBTICgldCxcbiIKKyJcdG1haW50ZW5hbnQgPSAlVCkgZXN0IGRhbnMgbGUgZnV0dXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDMKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiTGEgZGF0ZSBkZSBkZXJuaehyZSDpY3JpdHVyZSBkdSBAUyAoJXQsXG4iCisiXHRtYWludGVuYW50ID0gJVQpIGVzdCBkYW5zIGxlIGZ1dHVyLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJMJ2luZGljYXRpb24gZHUgQFMgcG91ciBsZSBAUyBleHRlcm5lIEBzICVYLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzUyCittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBam91dCBkZSBsJ2luZGljYXRpb24gq6BkaXJoYXNooLsgYXUgQGYuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gICIKK21zZ3N0ciAiTGUgY2hlY2tzdW0gZHUgZGVzY3JpcHRldXIgZGUgQGcgJWcgZXN0ICUwNHgsIGRldnJhaXQg6nRyZSAlMDR5LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisiTGUgZGVzY3JpcHRldXIgZGUgQGcgJWcgZXN0IG1hcnF16SBjb21tZSBub24gaW5pdGlhbGlz6SBhbG9ycyBxdWUgbGFcbiIKKyJmb25jdGlvbm5hbGl06SBuJ2VzdCBwYXMgYWN0aXbpZS5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiTGUgZGVzY3JpcHRldXIgZGUgQGcgJWcgYSB1biBub21icmUgaW52YWxpZGUgZCdpLW5vZXVkcyBub24gdXRpbGlz6XMgJWIuICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzIKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkxlIEBCIGRlIEBiIGR1IGRlcm5pZXIgQGcgbidlc3QgcGFzIGluaXRpYWxpc+kuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICJMYSB0cmFuc2FjdGlvbiAlaSBkdSBqb3VybmFsIOl0YWl0IGNvcnJvbXB1ZSwgbGUgcmVqZXUgYSDpdOkgYWJhbmRvbm7pLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MQorbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJMZSBkcmFwZWF1IHRlc3RfZnMgZXN0IHBvc2l0aW9ubukgKGV0IGV4dDQgZXN0IGRpc3BvbmlibGUpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkgIAorIzogZTJmc2NrL3Byb2JsZW0uYzozODYKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkgICIKK21zZ3N0ciAiIgorIkxhIGRhdGUgZGUgZGVybmllciBtb250YWdlIGR1IEBTIGVzdCBkYW5zIGxlIGZ1dHVyLlxuIgorIlx0KGRlIG1vaW5zIGQndW4gam91ciwgcHJvYmFibGVtZW50IOAgY2F1c2UgZCd1bmUgaG9ybG9nZSBtYXTpcmllbGxlIG1hbCBjb25maWd1cullKSAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5MgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KS4gICIKK21zZ3N0ciAiIgorIkxhIGRhdGUgZGUgZGVybmnocmUg6WNyaXR1cmUgZHUgQFMgZXN0IGRhbnMgbGUgZnV0dXIuXG4iCisiXHQoZGUgbW9pbnMgZCd1biBqb3VyLCBwcm9iYWJsZW1lbnQg4CBjYXVzZSBkJ3VuZSBob3Jsb2dlIG1hdOlyaWVsbGUgbWFsIGNvbmZpZ3Vy6WUpICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJMZSBjaGVja3N1bSBkJ3VuIG91IGRlIHBsdXNpZXVycyBkZXNjcmlwdGV1cnMgZGUgQGcgZGUgQGIgZXN0IGludmFsaWRlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDMKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgY29tcHRldXIgZCdAaXMgbGlicmVzIOAgJWogKOl0YWl0ICVpKVxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4Cittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICJE6WZpbml0aW9uIGR1IGNvbXB0ZXVyIGRlcyBAYnMgbGlicmVzIOAgJWMgKOl0YWl0ICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEzCittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJEaXNzaW11bGF0aW9uIGRlIGwnQGkgZGUgQHEgJWkgKCVRKS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJMZSBAUyBhIHVuIEBiIE1NUCBpbnZhbGlkZS4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIkBTIGEgdW4gbnVt6XJvIG1hZ2lxdWUgTU1QIGludmFsaWRlLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXhldDJmc19jaGVja19kZXNjOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiUGFzc2WgMaA6IHbpcmlmaWNhdGlvbiBkZXMgQGlzLCBkZXMgQGJzIGV0IGRlcyB0YWlsbGVzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJsJ0ByIG4nZXN0IHBhcyB1biBAZC4gIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDkKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgImwnQHIgYSB1biBkdGltZSAocHJvYmFibGVtZW50IGVuIHJhaXNvbiBkJ3VuIHZpZXV4IG1rZTJmcykuICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgImwnQGkgculzZXJ26SAlaSAoJVEpIGEgdW4gbW9kZSBAbi4gIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAibCdAaSBARCAlaSBhIHVuIGR0aW1lIG51bC4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJsJ0BpICVpIGVzdCB1dGlsaXPpLCBtYWlzIGEgdW4gZHRpbWUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgImwnQGkgJWkgZXN0IHVuIEBkIEB6LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAibGUgQEIgZGUgQGJzIGR1IEBnICVnIOAgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc5Cittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAibGUgQEIgZCdAaXMgZHUgQGcgJWcg4CAlYiBAQy5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgImxhIHRhYmxlIGQnQGlzIGR1IEBnICVnIOAgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4OQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgImxlIEBCICglYikgZGUgQGJzIGR1IEBnICVnJ3MgZXN0IGNvcnJvbXB1LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgImxlIEBCICglYikgZCdAaXMgZHUgQGcgJWcncyBlc3QgY29ycm9tcHUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTkKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUgZXN0ICVJcywgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNAorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9AYnMgZXN0ICVJYiwgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgQEkgZGFucyBsJ0BpICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTQKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICJsZSAlQiAoJWIpIGNoZXZhdWNoZSBsZXMgbel0YWRvbm7pZXMgZGUgQGYgZGFucyBsJ0BpICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAibCdAaSAlaSBhIHVuKGRlcykgQGIocykgaWxs6WdhbChhdXgpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiVHJvcCBkZSBAYnMgaWxs6WdhdXggZGFucyBsJ0BpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICIlQiAoJWIpIEBJIGRhbnMgbCdAaSBkZXMgQGIgZOlmZWN0dWV1eC4gIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM0Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJMJ0BpIGRlcyBAYnMgZOlmZWN0dWV1eCBhIHVuKGRlcykgQGIocykgaWxs6WdhbChhdXgpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzOQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJAYiBkdXBsaXF16SBvdSBk6WZlY3R1ZXV4IGFjdHVlbGxlbWVudCB1dGlsaXPpoCFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiJWIgZOlmZWN0dWV1eCB1dGlsaXPpIGVuIHRhbnQgcXVlIEBiIGluZGlyZWN0IGQnQGkgZGVzIEBicyBk6WZlY3R1ZXV4LiAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkwnQGkgZGVzIEBicyBk6WZlY3R1ZXV4IGEgcHJvYmFibGVtZW50IOl06SBjb3Jyb21wdS4gVm91cyBkZXZyaWV6IGFycup0ZXJcbiIKKyJtYWludGVuYW50IGV0IGV46WN1dGVyIGUyZnNjayAtYyBwb3VyIGV4YW1pbmVyIGxlcyBibG9jcyBk6WZlY3R1ZXV4XG4iCisiZGFucyBsZSBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTaSBsZSBAYiBlc3QgcullbGxlbWVudCBk6WZlY3R1ZXV4LCBsZSBAZiBuZSBwZXV0IOp0cmUgculwYXLpLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJWb3VzIHBvdXZleiBzdXBwcmltZXIgbGUgQGIgZGUgbGEgbGlzdGUgZGVzIEBiIGVycm9u6XMgZXQgZXNw6XJlciBxdWVcbiIKKyJsZSBAYiBzb2l0IHLpZWxsZW1lbnQgZW4gYm9uIOl0YXQuIE1haXMgaWwgbid5IGEgYXVjdW5lIGdhcmFudGllLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJMZSBAUyBwcmltYWlyZSAoJWIpIGVzdCBzdXIgbGEgbGlzdGUgZGVzIEBicyBk6WZlY3R1ZXV4LlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiTGUgYmxvYyAlYiBkYW5zIGxlcyBkZXNjcmlwdGV1cnMgZGUgQGdzIHByaW1haXJlcyBlc3QgZGFucyBsYSBsaXN0ZSBkZXMgQGJzIGTpZmVjdHVldXhcbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBsZSBAUyAoJWIpIGR1IEBnICVnIGVzdCBjb3Jyb21wdS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICJBdmVydGlzc2VtZW50oDogbGEgY29waWUgZGVzIGRlc2NyaXB0ZXVycyBkZSBAZ3MgZHUgQGcgJWcgYSB1biBAYiAoJWIpIGTpZmVjdHVldXguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIkVycmV1ciBkZSBwcm9ncmFtbWF0aW9uoD8gQGIgbrAlYiByZWNsYW3pIHNhbnMgYXVjdW5lIHJhaXNvbiBkYW5zIHByb2Nlc3NfYmFkX2Jsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJAQSBkZSAlTiBAYihzKSBjb250aWd1cyBkYW5zIGxlIEBnIGRlIEBiICVnIHBvdXIgJXOgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgZCd1biB0YW1wb24gZGUgQGIgcG91ciBsYSByZWxvY2FsaXNhdGlvbiBkZSAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlJlbG9jYWxpc2F0aW9uIGR1ICVzIGR1IEBnICVnIGRlICViIHZlcnMgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICJSZWxvY2FsaXNhdGlvbiBwb3VyIGxlIEBnICVnIGR1ICVzIHZlcnMgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE1Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBpbXBvc3NpYmxlIGRlIGxpcmUgbGUgQGIgJWIgZGUgJXOgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgYmxvY2sgJWIgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBpbXBvc3NpYmxlIGQn6WNyaXJlIGxlIEBiICViIHBvdXIgJXOgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NzQKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBkdSBAQiBkJ0BpcyAoJU4poDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzAKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBkdSBAQiBkZSBAYnMgKCVOKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJAQSBkZSBsJ2luZm9ybWF0aW9uIGR1IGNvbXB0ZXVyIGRlIGxpZW5zoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJAQSBkdSB0YWJsZWF1IGRlcyBAYnMgZGUgQGRzoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIEBpcyAoJWkpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2V4YW1lbiBkZXMgQGlzICglaSmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgYm91Y2xlIGQnaXTpcmF0aW9uIHN1ciBsZXMgQGJzIGRhbnMgbCdAaSAlaaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU1Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgc3RvY2thZ2UgZHUgY29tcHRldXIgZCdpbmZvcm1hdGlvbiBkJ0BpIChAaT0laSwgY29tcHRldXI9JU4poDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjAKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IHN0b2NrYWdlIGRlIGwnaW5mb3JtYXRpb24gZHUgQGIgZGUgQGRzIChAaT0laSwgQGI9JWIsIG51bT0lTimgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnQGkgJWmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJsJ0BpICVpIGEgdW4gZHJhcGVhdSBpbWFnaWMgYWN0aXbpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJMZSBmaWNoaWVyIHNw6WNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIChAaSAlaSkgYSBsZSBkcmFwZWF1XG4iCisiaW1tdXRhYmxlIG91IGFwcGVuZC1vbmx5IGFjdGl26S4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgImwnQGkgJWkgYSBsZSBkcmFwZWF1IGRlIEBjaW9uIHF1aSBlc3QgaW5pdGlhbGlz6SBzdXIgdW4gQGYgc2FucyBzdXBwb3J0IGRlIEBjaW9uLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiTCdAaSBzcOljaWFsIChAdi9zb2NrZXQvZmlmbykgJWkgYSB1bmUgdGFpbGxlIG5vbiBudWxsZS4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJsJ0BpIGRlIEBqIG4nZXN0IHBhcyB1dGlsaXPpIG1haXMgY29udGllbnQgZGVzIGRvbm7pZXMuICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgImxlIEBqIG4nZXN0IHBhcyB1biBmaWNoaWVyIG5vcm1hbC4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgImwnQGkgJWkgZmFpdCBwYXJ0aWUgZGUgbGEgbGlzdGUgZGVzIEBpcyBAb3MuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTYKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICJkZXMgQGlzIHF1aSBmYWlzYWllbnQgcGFydGllIGQndW5lIGxpc3RlIGNoYe5u6WUgZCdvcnBoZWxpbnMgY29ycm9tcHVlIG9udCDpdOkgcmVw6XLpcy4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMQorbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBkJ3VuZSBzdHJ1Y3R1cmUgZGUgY29tcHRhZ2UgZGUgculm6XJlbmNlcyAoJU4poDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGR1IEBiICViIGQnQGEgcG91ciBsJ0BpICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJsJ0BpICVpIGEgdW4gbWF1dmFpcyBAYiAlYiBkJ0BhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFcnJldXIgZGUgbGVjdHVyZSBkdSBAYiAlYiBkJ0BhICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDEKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAibGUgQGIgJWIgZCdAYSBhIHVuIGNvbXB0ZXVyIGRlIHLpZulyZW5jZSAlciwgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDYKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycmV1ciBkJ+ljcml0dXJlIGR1IEBiICViIGQnQGEgKCVtKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTEKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJsZSBAYiAlYiBkJ0BhIGEgaF9ibG9ja3OgPqAxLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1NgorbXNnaWQgIkBBIEBhIEBiICViLiAgIgorbXNnc3RyICJAQSBkdSBAYiAlYiBkJ0BhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJsZSBAYiAlYiBkJ0BhIGVzdCBjb3Jyb21wdSAoY29sbGlzaW9uIGQnYWxsb2NhdGlvbikuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgImxlIEBiICViIGQnQGEgZXN0IGNvcnJvbXB1IChub20gQG4pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgImxlIEBiICViIGQnQGEgZXN0IGNvcnJvbXB1ICh2YWxldXIgQG4pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgImwnQGkgJWkgZXN0IHRyb3AgZ3JhbmQuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAibGUgJUIgKCViKSByZW5kIGxlIEBkIHRyb3AgZ3JhbmQuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3ODUKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgImxlICVCICglYikgcmVuZCBsZSBmaWNoaWVyIHRyb3AgZ3JhbmQuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgImxlICVCICglYikgcmVuZCBsZSBsaWVuIHN5bWJvbGlxdWUgdHJvcCBncmFuZC4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgImwnQGkgJWkgYSBsZSBkcmFwZWF1IElOREVYX0ZMIGFjdGl26SBzdXIgbGUgQGYgc2FucyBzdXBwb3J0IGRlcyBodHJlZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJsJ0BpICVpIGEgbGUgZHJhcGVhdSBJTkRFWF9GTCBhY3RpdukgbWFpcyBuJ2VzdCBwYXMgdW4gQGQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgImwnQGggJWkgYSB1biBub2V1ZCByb290IEBuLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgImwnQGggJWkgZGlzcG9zZSBkJ3VuZSB2ZXJzaW9uIGRlIGhhY2hhZ2Ugbm9uIHN1cHBvcnTpZSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iCittc2dzdHIgImwnQGggJWkgdXRpbGlzZSB1biBkcmFwZWF1IGRlIG5vZXVkIHJvb3QgaW5jb21wYXRpYmxlLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJsJ0BoICVpIGEgdW5lIGhhdXRldXIgZCdhcmJyZSAoJU4pIHF1aSBlc3QgdHJvcCBncmFuZGVcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAibCdAaSBkZXMgQGJzIGTpZmVjdHVldXggYSB1biBAYiBpbmRpcmVjdCAoJWIpIHF1aSBlbnRyZSBlbiBjb25mbGl0IGF2ZWMgbGVzIG3pdGFkb25u6WVzIGR1IEBmLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIkxhIChyZS0pY3LpYXRpb24gZGUgbCdAaSBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBhIOljaG916aA6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM2Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJsJ0BpICVpIGEgdW5lIHRhaWxsZSBleHRyYSAoJUlTKSBxdWkgZXN0IEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJsJ0BhIGRhbnMgbCdAaSAlaSBhIHVuZSBsb25ndWV1ciBkZSBub20gKCVOKSBxdWkgZXN0IEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAibCdAYSBkYW5zIGwnQGkgJWkgYSB1bmUgdmFsZXVyIGRlIGTpY2FsYWdlICglTikgcXVpIGVzdCBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJsJ0BhIGRhbnMgbCdAaSAlaSBhIHVuIEBiIGRlIHZhbGV1ciAoJU4pIHF1aSBlc3QgQG4gKGRvaXQg6nRyZSAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAibCdAYSBkYW5zIGwnQGkgJWkgYSB1bmUgdmFsZXVyIGRlIHRhaWxsZSAoJU4pIHF1aSBlc3QgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgImwnQGEgZGFucyBsJ0BpICVpIGEgdW4gaGFjaGFnZSAoJU4pIHF1aSBlc3QgQG5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAibCdAaSAlaSBlc3QgdW4gJUl0IG1haXMgaWwgc2VtYmxlIHF1J2lsIHNvaXQgZW4gZmFpdCB1biBy6XBlcnRvaXJlLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2l06XJhdGlvbiBzdXIgbCdhcmJyZSBkJ0B4cyBkYW5zIGwnQGkgJWmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJOJ2EgcHUgaXTpcmVyIHN1ciBsZXMgZXh0ZW50cyBkZSBsJ0BpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYymgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkwnQGkgJWkgYSB1biBleHRlbnQgQG5cbiIKKyJcdChAYiBsb2dpcXVlICVjLCBAYiBwaHlzaXF1ZSBAbiAlYiwgbG9uZ3VldXIgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg3Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiTCdAaSAlaSBhIHVuIGV4dGVudCBAblxuIgorIlx0KEBiIGxvZ2lxdWUgJWMsIEBiIHBoeXNpcXVlICViLCBsb25ndWV1ciBAbiAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgImwnQGkgJWkgYSBsZSBkcmFwZWF1IEVYVEVOVFNfRkwgYWN0aXbpIHN1ciBsZSBAZiBzYW5zIHN1cHBvcnQgZGVzIGV4dGVudHMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICJMJ0BpICVpIGEgdW4gZm9ybWF0IGQnZXh0ZW50LCBtYWlzIGxlIEBTIG4nYSBwYXMgbGEgZm9uY3Rpb25uYWxpdOkgRVhURU5UU1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiTCdAaSAlaSBuJ2EgcGFzIGxlIGRyYXBlYXUgRVhURU5UX0ZMLCBtYWlzIGEgdW4gZm9ybWF0IGQnZXh0ZW50XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiTGUgZmFzdCBzeW1saW5rICVpIGEgbGUgZHJhcGVhdSBFWFRFTlRfRkwgYWN0aXbpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEyCittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGEgZGVzIGV4dGVudHMgaG9ycyBkZSBwb3J06WVcbiIKKyJcdChAYiBsb2dpcXVlIEBuICVjLCBAYiBwaHlzaXF1ZSAlYiwgbG9uZ3VldXIgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE2Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiTCdAaSAlaSBhIHVuIG5vZXVkIGQnZXh0ZW50IGludmFsaWRlIChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY29udmVyc2lvbiBkdSBAQiBkZSBAYiBkZSBzb3VzLWNsdXN0ZXKgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNgorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkwnQGkgZGUgQHEgbidlc3QgcGFzIHVuIGZpY2hpZXIgbm9ybWFsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMQorbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJMJ0BpIGRlIEBxIG4nZXN0IHBhcyB1dGlsaXPpIG1haXMgY29udGllbnQgZGVzIGRvbm7pZXMuICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzYKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJMJ0BpIGRlIEBxIGVzdCB2aXNpYmxlIHBhciBsJ3V0aWxpc2F0ZXVyLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDEKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJMJ0BpIGRlcyBAYnMgZOlmZWN0dWV1eCBhIGwnYWlyIEBuLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDYKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisiTCdAaSAlaSBhIHVuIGV4dGVudCBkZSB0YWlsbGUgbnVsbGVcbiIKKyJcdChAYiBsb2dpcXVlIEBuICVjLCBAYiBwaHlzaXF1ZSAlYilcbiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisiRXh0ZW50IGludOlyaWV1ciBkZSBuaXZlYXUgZGUgbm9ldWQgJU4gZGUgbCdpLW5vZXVkICVpOlxuIgorIkxlIGTpYnV0IGxvZ2lxdWUgJWIgbmUgY29ycmVzcG9uZCBwYXMgYXUgZOlidXQgbG9naXF1ZSAlYyBkdSBuaXZlYXUgc3VpdmFudC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU5Cittc2dpZCAiIgorIkBpICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJEYW5zIGwnQGkgJWksIGxhIGZpbiBkZSBsJ2V4dGVudCBk6XBhc3NlIGxhIHZhbGV1ciBhdXRvcmlz6WVcbiIKKyJcdChAYiBsb2dpcXVlICVjLCBAYiBwaHlzaXF1ZSAlYiwgbG9uZ3VldXIgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NworbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiRXjpY3V0aW9uIGRlIHBhc3NlcyBhZGRpdGlvbm5lbGxlcyBwb3VyIHLpc291ZHJlIGxlcyBwcm9ibOhtZXMgZGUgQGJzIHLpY2xhbelzIHBhciBwbHVzIGQndW4gQGkuLi5cbiIKKyJQYXNzZaAxQqA6IHLpLWV4YW1lbiBwb3VyIGxlcyBAYnMgQG1cbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiQGIocykgQG0gZGFucyBsJ0BpICVpoDoiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2V4YW1lbiBkZXMgaS1ub2V1ZHMgKCVpKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJAQSBkdSBAQiBkJ0BpcyAoaV9ub2RlX2R1cF9tYXApoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZXMgaXTpcmF0aW9ucyBzdXIgbGVzIEBicyBkYW5zIGwnQGkgJWkgKCVzKaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMyBlMmZzY2svcHJvYmxlbS5jOjEzMTgKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBkJ2FqdXN0ZW1lbnQgZGUgcmVmY291bnQgcG91ciBsZSBAYiAlYiBkJ0BhIChAaSAlaSmgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDA4Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJQYXNzZSAxQ6A6IGV4YW1lbiBkZXMgculwZXJ0b2lyZXMgcG91ciBsZXMgQGlzIGF2ZWMgZGVzIEBicyBAbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTQKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiUGFzc2UgMUSgOiBhanVzdGVtZW50IGRlcyBAYnMgQG1cbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTkKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiTGUgZmljaGllciAlUSAoQGkgbrAlaSwgZGF0ZSBkZSBtb2RpZmljYXRpb24gJUlNKVxuIgorIiAgYSAlciBAYihzKSBAbSwgcGFydGFn6XMgYXZlYyAlTiBmaWNoaWVyKHMpoDpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSBusCVpLCBkYXRlIGRlIG1vZGlmaWNhdGlvbiAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMAorbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxt6XRhZG9ubullIGR1IEBmPlxuIgorCisjLiBALWV4cGFuZGVkOiAoVGhlcmUgYXJlICVOIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLilcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzNQorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKyIoSWwgeSBhICVOIEBpcyBjb250ZW5hbnQgZGVzIEBicyBAbS4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAYnMgQG0gZOlq4CDpdOkgculhc3NpZ27pcyBvdSBjbG9u6XMuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJOJ2EgcHUgY2xvbmVyIGxlIGZpY2hpZXKgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDU5Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiUGFzc2UgMqA6IHbpcmlmaWNhdGlvbiBkZSBsYSBzdHJ1Y3R1cmUgZGVzIEBkc1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJOdW3pcm8gZCdAaSBAbiBwb3VyIKugLqC7IGRhbnMgbCdAaSBkZSBAZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2OQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgImwnQEUgYSB1biBusCBkJ0BpIEBuoDogJURpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAlRGkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3NAorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJsJ0BFIGEgdW4gQGkgQEQvbm9uIHV0aWxpc+kgJURpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzkKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAibCdARSBATCB2ZXJzIKugLqC7ICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg0Cittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgImwnQEUgcG9pbnRlIHZlcnMgbCdAaSAoJURpKSBsb2NhbGlz6SBkYW5zIHVuIEBiIGTpZmVjdHVldXguXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg5Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgImwnQEUgQEwgdmVycyBsZSBAZCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NAorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAibCdARSBATCB2ZXJzIGwnQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk5Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAibCdARSBhIHVuIGNhcmFjdOhyZSBpbGzpZ2FsIGRhbnMgc29uIG5vbS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIqugLqC7IG1hbnF1YW50IGRhbnMgbCdAaSBkZSBAZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiq6AuLqC7IG1hbnF1YW50IGRhbnMgbCdAaSBkZSBAZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTQKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJMYSBwcmVtaehyZSBAZSCroCVEbqC7IChAaT0lRGkpIGRhbnMgbCdAaSBkZSBAZCAlaSAoJXApIEBzIKugLqC7XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiTGEgc2Vjb25kZSBAZSCroCVEbqC7IChAaT0lRGkpIGRhbnMgbCdAaSBkZSBAZCAlaSBAcyCroC4uoLtcbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjQKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBARiAlSUYsIEBzIHrpcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB66XJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM0Cittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9kaXJfYWNsIEBGICVJZCwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM5Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgQEYgJU4sIEBzIHrpcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDQKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCBAcyB66XJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0OQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgImwnQGkgJWkgKCVRKSBhIHVuIG1vZGUgQG4gKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkBpIGRlIEBkICVpLCAlQiwgZOlwbGFjZW1lbnQgJU6gOiBAZCBjb3Jyb21wdVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1OQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJAaSBkZSBAZCAlaSwgJUIsIGTpcGxhY2VtZW50ICVOoDogbm9tIGRlIGZpY2hpZXIgdHJvcCBsb25nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NAorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAibCdAaSBkZSBAZCAlaSBhIHVuICVCIG5vbiBhbGxvdekuICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAibCdAZSBkZSBAZCCroC6guyBkYW5zIGwnQGkgZGUgQGQgJWkgbidlc3QgcGFzIHRlcm1pbullIHBhcyB1biBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAibCdAZSBkZSBAZCCroC4uoLsgZGFucyBsJ0BpIGRlIEBkICVpIG4nZXN0IHBhcyB0ZXJtaW7pZSBwYXMgdW4gTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgImwnQGkgJWkgKCVRKSBlc3QgdW4gQHYgZGUgY2FyYWN06HJlIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODQKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJsJ0BpICVpICglUSkgZXN0IHVuIEB2IGRlIEBiIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgImwnQEUgZXN0IHVuIGRvdWJsb24gZGUgbCdAZSCroC6guy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk0Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgImwnQEUgZXN0IHVuIGRvdWJsb24gZGUgbCdAZSCroC4uoLsuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OSBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZaA6IGltcG9zc2libGUgZGUgdHJvdXZlciBkaXJfaW5mbyBwb3VyICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDQKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJsJ0BFIGEgdW4gcmVjX2xlbiBkZSAlRHIsIEBzICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJAQSBkJ3VuZSBzdHJ1Y3R1cmUgaWNvdW50oDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGQnaXTpcmF0aW9uIHN1ciBsZXMgQGJzIGRlIEBkoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE5Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgZGUgbGVjdHVyZSBkdSBAYiAlYiBkZSBAZCAoQGkgJWkpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgZCfpY3JpdHVyZSBkdSBAYiAlYiBkZSBAZCAoQGkgJWkpoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJAQSBkJ3VuIG5vdXZlYXUgQGIgZGUgQGQgcG91ciBsJ0BpICVpICglcymgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIGTpc2FsbG9jYXRpb24gZGUgbCdAaSAlaaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAibCdAZSBkZSBAZCBwb3VyIKugLqC7IGRhbnMgJXAgKCVpKSBlc3QgZ3JhbmRlLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ0Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJsJ0BpICVpICglUSkgZXN0IHVuIEZJRk8gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0OQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJsJ0BpICVpICglUSkgZXN0IHVuZSBzb2NrZXQgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJE6WZpbml0aW9uIGR1IHR5cGUgZGUgZmljaGllciBwb3VyIGwnQEUg4CAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTkKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgImwnQEUgYSB1biB0eXBlIGRlIGZpY2hpZXIgaW5jb3JyZWN0ICjpdGFpdCAlRHQsIEBzICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjQKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJsJ0BFIGEgdW4gdHlwZSBkZSBmaWNoaWVyIGluaXRpYWxpc+kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAibCdARSBhIHVuIG5vbSBAei5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzQKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICJMZSBsaWVuIHN5bWJvbGlxdWUgJVEgKEBpIG6wJWkpIGVzdCBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3OQorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJsZSBAYiBkJ0BhIEBGIEBuICglSWYpLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NAorbXNnaWQgIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIgorbXNnc3RyICJsZSBAZiBjb250aWVudCBkZSBncmFuZHMgZmljaGllcnMsIG1haXMgbidhIHBhcyBsZSBkcmFwZWF1IExBUkdFX0ZJTEUgYWN0aXbpIGRhbnMgbGUgQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODkKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIG4nZXN0IHBhcyBy6WbpcmVuY+lcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk0Cittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGVzdCBy6WbpcmVuY+kgZGV1eCBmb2lzXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIGwnQGggJWSgOiAlQiBhIHVuIGhhY2hhZ2UgbWluaW5hbCBlcnJvbulcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW4gaGFjaGFnZSBtYXhpbWFsIGVycm9u6VxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJAaCAlZCBAbiAoJXEpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxMworbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIGwnQGggJWQgKCVxKaA6IG51belybyBkZSBAYiAlYiBlcnJvbukuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcCBsJ0BoICVkoDogbGUgbm9ldWQgcm9vdCBlc3QgQG5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkBwIGwnQGggJWSgOiAlQiBhIHVuZSBsaW1pdGUgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzMKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW4gY29tcHRldXIgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiQHAgbCdAaCAlZKA6ICVCIGEgdW5lIHRhYmxlIGRlIGhhY2hhZ2Ugbm9uIG9yZG9ubullXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MworbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCBsJ0BoICVkoDogJUIgYSB1bmUgcHJvZm9uZGV1ciBAbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDgKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkBFIGRvdWJsb24gcmVw6XLpZS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGEgdW4gbm9tIGRlIGZpY2hpZXIgcXVpIG4nZXN0IHBhcyB1bmlxdWUuXG4iCisiUmVub21tYWdlIGVuICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZSAnJURuJyBkb3VibG9uIHJlcOly6S5cbiIKKyJcdE1hcnF1YWdlIGRlICVwICglaSkgY29tbWUgZGV2YW50IOp0cmUgcmUtY29uc3RydWl0LlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgeulyby5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJAYiBkYW5zIGwnQGggJWQgKCVxKSBpbmF0dGVuZHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICJARSBy6WbpcmVuY2UgbCdAaSAlRGkgZGFucyBsZSBAZyAlZyBv+SBfSU5PREVfVU5JTklUIGVzdCBwb3NpdGlvbm7pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzcKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiQEUgculm6XJlbmNlIGwnQGkgJURpIHRyb3V26SBkYW5zIGxhIHpvbmUgZCdpLW5vZXVkcyBub24gdXRpbGlz6XMgZHUgQGcgJWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODIKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB66XJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg5Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGFzc2WgM6A6IHbpcmlmaWNhdGlvbiBkZSBsYSBjb25uZWN0aXZpdOkgZGVzIEBkc1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgImwnQHIgbidlc3QgcGFzIGFsbG916S4gIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJQYXMgZCdlc3BhY2UgZGFucyBsZSBAZCBAbC4gIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICJAaSAlaSAoJXApIGRlIEBkIG5vbiBjb25uZWN06VxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9AbCBuJ2EgcGFzIOl06SB0cm91dukuICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTQKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiq6AuLqC7IGRhbnMgJVEgKCVpKSBlc3QgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiL0BsIGVycm9u6SBvdSBpbmV4aXN0ZW50LiBOZSBwZXV0IHJlY29ubmVjdGVyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIk5lIHBldXQg6XRlbmRyZSAvQGygOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiTmUgcGV1dCByZWNvbm5lY3RlciAlaaA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgcmVw6XJhZ2UgZGUgL0BsoDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGKgOiAlbSBsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBjculhdGlvbiBkdSBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfQGmgOiAlbSBsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBjculhdGlvbiBkdSBAZCAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfQGKgOiAlbSBsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBjculhdGlvbiBkJ3VuIG5vdXZlYXUgQGIgZGUgQGRcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfd3JpdGVfZGlyX0BioDogJW0gbG9ycyBkZSBsYSB0ZW50YXRpdmUgZCfpY3JpdHVyZSBkdSBAYiBkZSBAZCBwb3VyIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2FqdXN0ZW1lbnQgZHUgY29tcHRldXIgZCdAaSBzdXIgbCdAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiTidhIHB1IGNvcnJpZ2VyIGxlIHBhcmVudCBkZSBsJ0BpICVpoDogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJOJ2EgcHUgY29ycmlnZXIgbGUgcGFyZW50IGRlIGwnQGkgJWmgOiBuJ2EgcHUgdHJvdXZlciBsJ0BlIGR1IEBkIHBhcmVudFxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgZGUgY3LpYXRpb24gZHUgQGQgcmFjaW5lICglcymgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJldXIgZGUgY3LpYXRpb24gZHUgQGQgL0BsICglcymgOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4OQorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAibCdAciBuJ2VzdCBwYXMgdW4gQGSgOyBhcnLqdCBpbW3pZGlhdC5cbiIKKworIy4gQC1leHBhbmRlZDogQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5NAorbXNnaWQgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSBAci5cbiIKK21zZ3N0ciAiTmUgcGV1dCBwcm9j6WRlciBzYW5zIHVuIEByLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvQGwgbidlc3QgcGFzIHVuIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiUGFzc2UgM0GgOiBvcHRpbWlzYXRpb24gZGVzIHLpcGVydG9pcmVzXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiyWNoZWMgZGUgY3LpYXRpb24gZGUgbCdpdOlyYXRldXIgZGlyc190b19oYXNooDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICLJY2hlYyBkJ29wdGltaXNhdGlvbiBkdSBy6XBlcnRvaXJlICVxICglZCmgOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjYKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk9wdGltaXNhdGlvbiBkZXMgculwZXJ0b2lyZXOgOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQYXNzZSA0oDogdulyaWZpY2F0aW9uIGRlcyBjb21wdGV1cnMgZGUgculm6XJlbmNlXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQGkgJWkgQHogQHUuICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiQGkgJWkgQHVcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTgKK21zZ2lkICJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIKK21zZ3N0ciAibGUgY29tcHRldXIgZGUgculm6XJlbmNlIGRlIGwnQGkgJWkgZXN0ICVJbCwgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTYyCittc2dpZCAiIgorIldBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4iCisiXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGlzICVOLCBAaS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgQHMgdGhlIHNhbWUhXG4iCittc2dzdHIgIiIKKyJBVFRFTlRJT06gOiBCT0dVRSBERSBQUk9HUkFNTUFUSU9OIERBTlMgRTJGU0NLoCFcbiIKKyJcdE9VIFVOIElESU9UIChWT1VTKSBFU1QgRU4gVFJBSU4gREUgVslSSUZJRVIgVU4gU1lTVMhNRSBERVxuIgorIlx0RklDSElFUiBNT05UySAoQUNUSUYpLiBpbm9kZV9saW5rX2luZm9bJWldIGVzdCAlTixcbiIKKyJcdGktbm9kZS5pX2xpbmtzX2NvdW50IGVzdCAlSWwuIElscyBkZXZyYWllbnQg6nRyZSBsZXMgbeptZXOgIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcyCittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlBhc3NlIDWgOiB26XJpZmljYXRpb24gZGUgbCdpbmZvcm1hdGlvbiBkdSBzb21tYWlyZSBkZSBAZ1xuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzcKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIkxlIHJlbXBsaXNzYWdlIOAgbGEgZmluIGR1IEBCIGQnQGkgbidlc3QgcGFzIGluaXRpYWxpc+kuICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgyCittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJMZSByZW1wbGlzc2FnZSDgIGxhIGZpbiBkdSBAQiBkZSBAYnMgbidlc3QgcGFzIGluaXRpYWxpc+kuICIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4NworbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgImRpZmbpcmVuY2VzIGRlIEBCIGRlIEBic6A6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNworbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgImRpZmbpcmVuY2VzIGRlIEBCIGQnQGlzoDogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiTGUgZOljb21wdGUgZGVzIEBpcyBsaWJyZXMgZXN0IGVycm9u6SBwb3VyIGxlIEBnIG6wJWcgKCVpLCBk6WNvbXB06T0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IERpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjMyCittc2dpZCAiRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJMZSBk6WNvbXB0ZSBkZXMgculwZXJ0b2lyZXMgZXN0IGVycm9u6SBwb3VyIGxlIEBnIG6wJWcgKCVpLCBk6WNvbXB06T0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkxlIGTpY29tcHRlIGRlcyBAaXMgbGlicmVzIGVzdCBlcnJvbukgKCVpLCBk6WNvbXB06T0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQyCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJMZSBk6WNvbXB0ZSBkZXMgQGJzIGxpYnJlcyBlc3QgZXJyb27pIHBvdXIgbGUgQGcgbrAlZyAoJWIsIGTpY29tcHTpPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ3Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiTGUgZOljb21wdGUgZGVzIEBicyBsaWJyZXMgZXN0IGVycm9u6SAoJWIsIGTpY29tcHTpPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogUFJPR1JBTU1JTkcgRVJST1I6IGZpbGVzeXN0ZW0gKCMlTikgYml0bWFwIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIGJpdG1hcCAKKyMuIEAtZXhwYW5kZWQ6IGVuZHBvaW50cyAoJWksICVqKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTIKK21zZ2lkICJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgQEIgZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIkVSUkVVUiBERSBQUk9HUkFNTUFUSU9OoDogbGVzIHBvaW50cyBkZSB0ZXJtaW5haXNvbiAoJWIsICVjKSBkZSBAQnMgZHUgQGYgKG6wJU4pIG5lIGNvbmNvcmRlbnQgcGFzIGF2ZWMgbGVzIHBvaW50cyBkZSB0ZXJtaW5haXNvbiBkZSBAQnMgY2FsY3Vs6XMgKCVpLCAlailcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIkVycmV1ciBpbnRlcm5loDogYWp1c3RlbWVudCBhcHByb3hpbWF0aWYgZGUgbGEgZmluIGR1IGJpdG1hcCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY29waWUgZHUgQEIgZCdAaXMgZGUgcmVtcGxhY2VtZW50oDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBjb3BpZSBkdSBAQiBkZXMgQGJzIGRlIHJlbXBsYWNlbWVudKA6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIlVuIG91IGRlcyBAYihzKSBkdSBAZyAlZyBlbiBjb3VycyBkJ3V0aWxpc2F0aW9uIGFsb3JzIHF1ZSBsZSBAZyBlc3QgbWFycXXpIEJMT0NLX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICJVbiBvdSBkZXMgQGkocykgZHUgQGcgJWcgZW4gY291cnMgZCd1dGlsaXNhdGlvbiBhbG9ycyBxdWUgbGUgQGcgZXN0IG1hcnF16SBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzA1Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIlJlY3LpZXIgbGUgQGoiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxMAorbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJNaXNlIOAgam91ciBkZSBsJ2luZm9ybWF0aW9uIGRlIHF1b3RhIHBvdXIgbGUgdHlwZSBkZSBxdW90YSAlTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiQ29kZSBkJ2VycmV1ciBub24gdHJhaXTpICgweCV4KaAhXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1NCBlMmZzY2svcHJvYmxlbS5jOjE5NTgKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJJR05PUskiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJN6W1vaXJlIHV0aWxpc+lloDogJWQsIHRlbXBzIHJlcXVpc6A6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAidGFpbGxlIGRlIGwnaS1ub2V1ZD0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJsb3JzIGR1IGTpbWFycmFnZSBkZSBsJ2V4YW1lbiBkZXMgaS1ub2V1ZHMiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImxvcnMgZGUgbCdleGFtZW4gZGVzIGktbm9ldWRzIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgImxvcnMgZGUgbCdhcHBlbCBkZSBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwb3VyIGwnaS1ub2V1ZCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJsb3JzIGRlIGwnYXBwZWwg4CBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBwb3VyIGwnaS1ub2V1ZCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiTG9ycyBkZSBsYSB0cm9uY2F0dXJlIGRlIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzMKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiTG9ycyBkZSBsJ2VmZmFjZW1lbnQgZGUiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb26gOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlci1ibG9jXSBbLUIgdGFpbGxlLWRlLWJsb2NdXG4iCisiXHRcdFstSSBub21icmUtYmxvY3MtZHUtdGFtcG9uLWktbm9ldWRzXSBbLVAgdGFpbGxlLWktbm9ldWQtcHJvY2Vzc3VzXVxuIgorIlx0XHRbLWx8LUwgZmljaGllcnMtZGVzLWJsb2NzLWTpZmVjdHVldXhdIFstQyBmZF0gWy1qIGpvdXJuYWwtZXh0ZXJuZV1cbiIKKyJcdFx0Wy1FIG9wdGlvbnMt6XRlbmR1ZXNdIHDpcmlwaOlyaXF1ZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQWlkZSBkJ3VyZ2VuY2WgOlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBS6XBhcmF0aW9uIGF1dG9tYXRpcXVlIChzYW5zIHF1ZXN0aW9uKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBOJ2FwcGxpcXVlciBhdWN1biBjaGFuZ2VtZW50IGF1IHN5c3TobWUgZGUgZmljaGllcnNcbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgU3VwcG9zZXIgq6BvdWmguyBwb3VyIHRvdXRlcyBsZXMgcXVlc3Rpb25zXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIFbpcmlmaWVyIGxhIHBy6XNlbmNlIGRlIGJsb2NzIGTpZmVjdHVldXggZXQgbGVzXG4iCisiICAgICAgICAgICAgICAgICAgICAgIGFqb3V0ZXIg4CBsYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZXIgbGEgdulyaWZpY2F0aW9uIG3qbWUgc2kgbGUgc3lzdOhtZSBkZSBmaWNoaWVyc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICBlc3QgbWFycXXpIHByb3ByZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgVHJhdmFpbGxlciBlbiBtb2RlIGJhdmFyZFxuIgorIiAtYiBzdXBlci1ibG9jICAgICAgICBVdGlsaXNlciB1biBibG9jIGFsdGVybmF0aWYgcG91ciBsZSBzdXBlcmJsb2NcbiIKKyIgLUIgdGFpbGxlLWRlLWJsb2MgICAgRm9yY2VyIGxhIHRhaWxsZSBkZXMgYmxvY3MgbG9ycyBkZSBsYSByZWNoZXJjaGUgZHVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgc3VwZXJibG9jXG4iCisiIC1qIGpvdXJuYWwtZXh0ZXJuZSAgIETpZmluaXIgbGEgbG9jYWxpc2F0aW9uIGR1IGpvdXJuYWwgZXh0ZXJuZVxuIgorIiAtbCBmaWNoaWVyLWRlcy1ibG9jcy1lcnJvbulzXG4iCisiICAgICAgICAgICAgICAgICAgICAgIEFqb3V0ZXIg4CBsYSBsaXN0ZSBkZXMgYmxvY3MgZOlmZWN0dWV1eFxuIgorIiAtTCBmaWNoaWVyLWRlcy1ibG9jcy1lcnJvbulzXG4iCisiICAgICAgICAgICAgICAgICAgICAgIETpZmluaXIgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXhcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXOgOiAldS8ldSBmaWNoaWVycyAoJTBkLiVkJSUgbm9uIGNvbnRpZ/xzKSwgJWxsdS8lbGx1IGJsb2NzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgaS1ub2V1ZCB1dGlsaXPpICglMi4yZiUlLCBzdXIgJXUpXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IGktbm9ldWRzIHV0aWxpc+lzICglMi4yZiUlLCBzdXIgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hpZXIgbm9uIGNvbnRpZ3UgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hpZXJzIG5vbiBjb250aWd1cyAoJTBkLiVkJSUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiUxMnUgculwZXJ0b2lyZSBub24gY29udGlndSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgculwZXJ0b2lyZXMgbm9uIGNvbnRpZ3VzICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICBub21icmUgZCdpLW5vZXVkcyBhdmVjIGRlcyBibG9jcyBpbmQvZGluZC90aW5koDogJXUvJXUvJXVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgSGlzdG9ncmFtbWUgZGVzIHByb2ZvbmRldXJzIGQnZXh0ZW50c6A6ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUgYmxvYyB1dGlsaXPpICglMi4yZiUlLCBzdXIgJWxsdSlcbiIKK21zZ3N0clsxXSAiJTEybGx1IGJsb2NzIHV0aWxpc+lzICglMi4yZiUlLCBzdXIgJWxsdSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiUxMnUgYmxvYyBk6WZlY3R1ZXV4XG4iCittc2dzdHJbMV0gIiUxMnUgYmxvY3MgZOlmZWN0dWV1eFxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hpZXIgZGUgZ3JhbmRlIHRhaWxsZVxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hpZXJzIGRlIGdyYW5kZSB0YWlsbGVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgZmljaGllciBub3JtYWxcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUgZmljaGllcnMgbm9ybWF1eFxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiUxMnUgculwZXJ0b2lyZVxuIgorbXNnc3RyWzFdICIlMTJ1IHLpcGVydG9pcmVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpY2hpZXIgZGUgcOlyaXBo6XJpcXVlIGVuIG1vZGUgY2FyYWN06HJlXG4iCittc2dzdHJbMV0gIiUxMnUgZmljaGllcnMgZGUgcOlyaXBo6XJpcXVlIGVuIG1vZGUgY2FyYWN06HJlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBmaWNoaWVyIGRlIHDpcmlwaOlyaXF1ZSBlbiBtb2RlIGJsb2NcbiIKK21zZ3N0clsxXSAiJTEydSBmaWNoaWVycyBkZSBw6XJpcGjpcmlxdWUgZW4gbW9kZSBibG9jXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgZmlmb1xuIgorbXNnc3RyWzFdICIlMTJ1IGZpZm9zXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxpbmtzXG4iCittc2dzdHJbMF0gIiUxMnUgbGllblxuIgorbXNnc3RyWzFdICIlMTJ1IGxpZW5zXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBsaWVuIHN5bWJvbGlxdWUiCittc2dzdHJbMV0gIiUxMnUgbGllbnMgc3ltYm9saXF1ZXMiCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgbGllbiBzeW1ib2xpcXVlIHJhcGlkZSlcbiIKK21zZ3N0clsxXSAiICgldSBsaWVucyBzeW1ib2xpcXVlcyByYXBpZGVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKK21zZ3N0clsxXSAiJTEydSBzb2NrZXRzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZmljaGllclxuIgorbXNnc3RyWzFdICIlMTJ1IGZpY2hpZXJzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTgzIG1pc2MvdHVuZTJmcy5jOjE5ODUgbWlzYy91dGlsLmM6MTQ3CisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJsb3JzIGRlIGxhIGTpdGVybWluYXRpb24g4CBzYXZvaXIgc2kgJXMgZXN0IG1vbnTpLiIKKworIzogZTJmc2NrL3VuaXguYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzICVzLlxuIgorbXNnc3RyICJBdHRlbnRpb26gISAlcyBlc3QgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIlcyBlc3QgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJOZSBwZXV0IGNvbnRpbnVlciwgYXJy6nQgaW1t6WRpYXQuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiQVRURU5USU9OoCEhISBMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBtb2506S4gICBTaSB2b3VzIGNvbnRpbnVlelxuIgorInZvdXMgKioqQ0FVU0VSRVoqKiogZGVzIGRvbW1hZ2VzICoqKlPJVshSRVMqKiogYXUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjkKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIlNvdWhhaXRlei12b3VzIHLpZWxsZW1lbnQgY29udGludWVyIgorCisjOiBlMmZzY2svdW5peC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJ26XJpZmljYXRpb24gc3RvcHDpZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjEKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiIGNvbnRpZW50IHVuIHN5c3TobWUgZGUgZmljaGllcnMgY29tcG9ydGFudCBkZXMgZXJyZXVycyIKKworIzogZTJmc2NrL3VuaXguYzozNjMKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG4nYSBwYXMg6XTpIGTpbW9udOkgcHJvcHJlbWVudCIKKworIzogZTJmc2NrL3VuaXguYzozNjUKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIGxlcyBmb25jdGlvbm5hbGl06XMgZHUgc3VwZXJibG9jIHByaW1haXJlIGRpZmbocmVudCBkZSBjZWxsZXMgZGUgbGEgc2F1dmVnYXJkZSIKKworIzogZTJmc2NrL3VuaXguYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgYSDpdOkgbW9udOkgJXUgZm9pcyBzYW5zIGF2b2lyIOl06SB26XJpZmnpIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgYSB1bmUgZGF0ZSBkZSBkZXJuaehyZSB26XJpZmljYXRpb24gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBkYW5zIGxlIGZ1dHVyIgorCisjOiBlMmZzY2svdW5peC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBhIHBhc3PpICV1IGpvdXJzIHNhbnMgYXZvaXIg6XTpIHbpcmlmaekiCisKKyM6IGUyZnNjay91bml4LmM6MzkxCittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgdulyaWZpY2F0aW9uIGZvcmPpZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXOgOiBwcm9wcmUsICV1LyV1IGZpY2hpZXJzLCAlbGx1LyVsbHUgYmxvY3MiCisKKyM6IGUyZnNjay91bml4LmM6NDQzCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAodulyaWZpY2F0aW9uIHJlbWlzZSDgIHBsdXMgdGFyZKA6IHN1ciBiYXR0ZXJpZSkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ2Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiICh26XJpZmljYXRpb24gbG9ycyBkdSBwcm9jaGFpbiBtb250YWdlKSIKKworIzogZTJmc2NrL3VuaXguYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiICh26XJpZmljYXRpb24gZGFucyAlbGQgbW9udGFnZXMpIgorCisjOiBlMmZzY2svdW5peC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJFUlJFVVKgOiBuZSBwZXV0IG91dnJpciAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIlZlcnNpb24gRUEgaW52YWxpZGUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJPcHRpb24g6XRlbmR1ZSBpbmNvbm51ZaA6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiRXJyZXVyIGRlIHN5bnRheGUgZGFucyBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZCdlMmZzY2sgKCVzLFxuIgorIlx0bGlnbmUgbrAlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJFUlJFVVIgbG9ycyBkZSBsYSB2YWxpZGF0aW9uIGR1IGRlc2NyaXB0ZXVyIGRlIGZpY2hpZXIgJWSgOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5MgorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIkRlc2NyaXB0ZXVyIGRlIGZpY2hpZXIgZCdpbmZvcm1hdGlvbiBkZSBjb21wbOl0aW9uIGludmFsaWRlIgorCisjOiBlMmZzY2svdW5peC5jOjgwNworbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU2V1bGUgdW5lIGRlcyBvcHRpb25zIC1wLy1hLCAtbiBvdSAteSBwZXV0IOp0cmUgc3DpY2lmaellLiIKKworIzogZTJmc2NrL3VuaXguYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIkwnb3B0aW9uIC10IG4nZXN0IHBhcyBzdXBwb3J06WUgc3VyIGNldHRlIHZlcnNpb24gZCdlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODU5IGUyZnNjay91bml4LmM6OTMxIG1pc2MvdHVuZTJmcy5jOjgxMSBtaXNjL3R1bmUyZnMuYzoxMTAwCisjOiBtaXNjL3R1bmUyZnMuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgculzb3VkcmUgq6Alc6C7IgorCisjOiBlMmZzY2svdW5peC5jOjkxMAorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgLW4gZXQgLUQgc29udCBpbmNvbXBhdGlibGVzLiIKKworIzogZTJmc2NrL3VuaXguYzo5MTUKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkxlcyBvcHRpb25zIC1uIGV0IC1jIHNvbnQgaW5jb21wYXRpYmxlcy4iCisKKyM6IGUyZnNjay91bml4LmM6OTIwCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMZXMgb3B0aW9ucyAtbiBldCAtbC8tTCBzb250IGluY29tcGF0aWJsZXMuIgorCisjOiBlMmZzY2svdW5peC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIkxlcyBvcHRpb25zIC1jIGV0IC1sLy1MIG5lIHBldXZlbnQgcGFzIOp0cmUgdXRpbGlz6WVzIHNpbXVsdGFu6W1lbnQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG4nZXN0IHBhcyB1biBlbnRpZXJcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnQgbm9uIG51belyaXF1ZSBpbnZhbGlkZSBwb3VyIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2Ugd2FpdC4uLlxuIgorbXNnc3RyICJMJ2ludGVydmFsZSBkZSBwcm90ZWN0aW9uIGNvbnRyZSBtb250YWdlIG11bHRpcGxlIChNTVApIGVzdCBkZSAldSBzZWNvbmRlcyBldCB0ZW1wcyB0b3RhbCBkJ2F0dGVudGUgZXN0IGRlICV1IHNlY29uZHMuIFZldWlsbGV6IHBhdGllbnRlci4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJsb3JzIGRlIGxhIHbpcmlmaWNhdGlvbiBkdSBibG9jayBNTVAiCisKKyM6IGUyZnNjay91bml4LmM6MTE0NCBtaXNjL3R1bmUyZnMuYzoxOTEyCittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisiU2kgdm91cyDqdGVzIHP7cihlKSBxdWUgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBuJ2VzdCBlbiBjb3VycyBkJ3V0aWxpc2F0aW9uIHN1ciBhdWN1biBub2V1ZCwgbGFuY2VyOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJFcnJldXKgOiBsYSB2ZXJzaW9uIGRlIGxhIGJpYmxpb3Ro6HF1ZSBleHQyZnMgZXN0IHDpcmlt6WWgIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ2luaXRpYWxpc2F0aW9uIGR1IHByb2dyYW1tZSIKKworIzogZTJmc2NrL3VuaXguYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0VXRpbGlzYXRpb24gZGUgJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImEgYmVzb2luIGQndW4gdGVybWluYWwgcG91ciBkZXMgculwYXJhdGlvbnMgZW4gbW9kZSBpbnRlcmFjdGlmIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzoDogJXMgdGVudG9ucyBkJ3V0aWxpc2VyIGxlcyBibG9jcyBkZSBzYXV2ZXRhZ2UuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjkyCittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9jIGludmFsaWRlLCIKKworIzogZTJmc2NrL3VuaXguYzoxMjkzCittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkxlcyBkZXNjcmlwdGV1cnMgZGUgZ3JvdXBlIHNlbWJsZW50IGVuIG1hdXZhaXMg6XRhdC4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAiJXOgOiAlcyBsb3JzIGRlIGwndXRpbGlzYXRpb24gZGVzIGJsb2NzIGRlIHNhdXZldGFnZSIKKworIzogZTJmc2NrL3VuaXguYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiJXOgOiByZXRvdXIgYXUgc3VwZXJibG9jayBvcmlnaW5lbFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMzUKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiTGEgdmVyc2lvbiBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBhcHBhcmVtbWVudCB0cm9wIOlsZXbpZSBwb3VyIGNldHRlIFxuIgorInZlcnNpb24gZCdlMmZzY2suIChvdSBiaWVuIGxlIHN1cGVyYmxvYyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdFxuIgorImNvcnJvbXB1KVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDEKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJQZXV0Lep0cmUgY2V0dGUgcGFydGl0aW9uIGVzdC1lbGxlIGRlIHRhaWxsZSB66XJvoD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiVm91cyBkZXZleiBhdm9pciB1biBhY2PocyAlcyBhdSBzeXN06G1lIGRlIGZpY2hpZXJzIG91IOp0cmUgcm9vdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDkKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIlDpcmlwaOlyaXF1ZSBwZXV0Lep0cmUgaW5leGlzdGVudCBvdSBwb3VyIGxlIHN3YXCgP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTIKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiIgorIlN5c3TobWUgZGUgZmljaGllciBtb2506SBvdSBvdXZlcnQgZW4gbW9kZSBleGNsdXNpZiBwYXIgdW4gYXV0cmVcbiIKKyJwcm9ncmFtbWWgP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJQ6XJpcGjpcmlxdWUgcGV1dC3qdHJlIGluZXhpc3RhbnSgP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRpc3F1ZSBwcm906WfpIGVuIOljcml0dXJloDsgdXRpbGlzZXogbCdvcHRpb24gLW4gcG91ciBlZmZlY3R1ZXIgdW5lXG4iCisidulyaWZpY2F0aW9uIGR1IHDpcmlwaOlyaXF1ZSBlbiBsZWN0dXJlIHNldWxlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MjMKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIlZldWlsbGV6IG9idGVuaXIgdW5lIHZlcnNpb24gcGx1cyBy6WNlbnRlIGQnZTJmc2NroCEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHbpcmlmaWNhdGlvbiBkdSBqb3VybmFsIGV4dDMgcG91ciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDc4Cittc2dpZCAiV2FybmluZzogc2tpcHBpbmcgam91cm5hbCByZWNvdmVyeSBiZWNhdXNlIGRvaW5nIGEgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gY2hlY2suXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogc2F1dGUgbGEgculjdXDpcmF0aW9uIGR1IGpvdXJuYWwgcHVpc3F1ZSBsJ29uXG4iCisicHJvY+hkZSDgIGwnZXhhbWVuIGQndW4gc3lzdOhtZSBkZSBmaWNoaWVycyBlbiBsZWN0dXJlIHNldWxlLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgImltcG9zc2libGUgZCdpbml0aWFsaXNlciBsZXMgZHJhcGVhdXggZHUgc3VwZXJibG9jIHN1ciAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgImxvcnMgZGUgbGEgculjdXDpcmF0aW9uIGR1IGpvdXJuYWwgZXh0MyBkZSAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgYSB1bmUoZGVzKSBmb25jdGlvbm5hbGl06ShzKSBub24gc3VwcG9ydOllKHMpoDoiCisKKyM6IGUyZnNjay91bml4LmM6MTUzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIiVzoDogYXZlcnRpc3NlbWVudKA6IGxlIHN1cHBvcnQgZGUgbGEgY29tcHJlc3Npb24gZXN0IGV4cOlyaW1lbnRhbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogZTJmc2NrIG5vdCBjb21waWxlZCB3aXRoIEhUUkVFIHN1cHBvcnQsXG4iCisiXHRidXQgZmlsZXN5c3RlbSAlcyBoYXMgSFRSRUUgZGlyZWN0b3JpZXMuXG4iCittc2dzdHIgIiIKKyIlc6A6IGUyZnNjayBuJ2VzdCBwYXMgY29tcGls6SBhdmVjIGxlIHN1cHBvcnQgcG91ciBIVFJFRSxcbiIKKyJcdG1haXMgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyAlcyBhIGRlcyBy6XBlcnRvaXJlcyBIVFJFRS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXOgOiAlcyBsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbCdpLW5vZXVkIGRlcyBibG9jcyBk6WZlY3R1ZXV4XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5NworbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiQ2VsYSBuZSBzZW1ibGUgcGFzIOp0cmUgYmllbiwgbWFpcyBvbiB2YSBxdWFuZCBt6m1lIGVzc2F5ZXIuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiQ3LpYXRpb24gZHUgam91cm5hbCAoJWQgYmxvY3MpoDogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDgKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiQ29tcGzpdOkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBsZSBqb3VybmFsIGEg6XTpIHJlLWNy6ekgLSBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBkZSBub3V2ZWF1IGV4dDMgKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3MgorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJSZS1k6W1hcnJvbnMgZTJmc2NrIGRlcHVpcyBsZSBk6WJ1dC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzYKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAibG9ycyBkZSBsYSBy6WluaXRpYWxpc2F0aW9uIGR1IGNvbnRleHRlIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXOgOiBlMmZzY2sgYSDpdOkgYW5udWzpLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJhcnLqdOkiCisKKyM6IGUyZnNjay91bml4LmM6MTcwMCBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogTEUgU1lTVMhNRSBERSBGSUNISUVSUyBBIMlUySBNT0RJRknJICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzoDogKioqKiogUsktQU1PUkNFUiBMSU5VWCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MTIgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzoDogKipBVFRFTlRJT06gOiBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGNvbnRpZW50IGVuY29yZSBkZXMgZXJyZXVycyoqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGwnaW5mb3JtYXRpb24gZGUgY2hlY2tzdW0gZHUgZ3JvdXBlIGRlIGJsb2NzIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo3MAorbXNnaWQgInlZIgorbXNnc3RyICJvTyIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8bz4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKG8vbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJhbm51bOmgIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJvdWlcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJub25cbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXOgPyBub25cbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzoD8gb3VpXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAieWVzIgorbXNnc3RyICJvdWkiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5vbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzoDogYmxvYyhzKSBkZSBiaXRtYXAgaWxs6WdhbChhdXgpIHBvdXIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibGEgbGVjdHVyZSBkZXMgYml0bWFwcyBkJ2ktbm9ldWRzIGV0IGRlIGJsb2NzIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSByZS1sZWN0dXJlIGRlcyBiaXRtYXBzIHBvdXIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAibCfpY3JpdHVyZSBkZXMgYml0bWFwcyBkZSBibG9jcyBldCBkJ2ktbm9ldWRzIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJsb3JzIGQndW5lIG5vdXZlbGxlIHRlbnRhdGl2ZSBkJ+ljcml0dXJlIGRlIGJpdG1hcHMgZGUgYmxvY3MgZXQgZCdpLW5vZXVkcyBwb3VyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IElOQ09OU0lTVEVOQ0UgSU5BVFRFTkRVRaA7IEVYyUNVVEVaIGZzY2sgTUFOVUVMTEVNRU5ULlxuIgorIlx0KGkuZS4sIHNhbnMgb3B0aW9ucyAtYSBvdSAtcClcbiIKKworIzogZTJmc2NrL3V0aWwuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorbXNnc3RyICJN6W1vaXJlIHV0aWxpc+lloDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiTeltb2lyZSB1dGlsaXPpZaA6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ0ZW1wc6A6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidGVtcHMg6WNvdWzpoDogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsJ2ktbm9ldWQgJWx1IGRhbnMgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZGUgbCdpLW5vZXVkICVsdSBkYW5zICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNworbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZCd1biB0YW1wb24gZGUgbWlzZSDgIHrpcm8iCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzIHJ1bm5pbmcuXG4iCittc2dzdHIgIklOQ09IyVJFTkNFIElOQVRURU5EVUWgOiBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEg6XTpIG1vZGlmaekgcGVuZGFudCBsZSBk6XJvdWxlbWVudCBkZSBmc2NrLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiY29tcGzpdOkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICVzIFstYiB0YWlsbGVfZGVfYmxvY10gWy1pIGZpY2hpZXJfZF9lbnRy6WVdIFstbyBmaWNoaWVyX2RlX3NvcnRpZV1cbiIKKyIgICAgICAgWy1zdnduZl0gWy1jIGJsb2NzX+BfbGFfZm9pc10gWy1kIGZhY3RldXJfZOlsYWlfZW50cmVfbGVjdHVyZXNdXG4iCisiICAgICAgIFstZSBtYXhfYmxvY2tzX2TpZmVjdHVldXhdIFstcCBub21icmVfZGVfcGFzc2VzXVxuIgorIiAgICAgICBbLXQgbW90aWZfZGVfdGVzdCBbLXQgbW90aWZfZGVfdGVzdCBbLi4uXV1dXG4iCisiICAgICAgIHDpcmlwaOlyaXF1ZSBbZGVybmllcl9ibG9jIFtwcmVtaWVyX2Jsb2NdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IExlcyBvcHRpb25zIC1uIGV0IC13IHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBlZmZlY3R16SwgJXMg6WNvdWzpLiAoJWQvJWQvJWQgZXJyZXVycykiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzIyCittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlRlc3QgZW4gY291cnMgYXZlYyB1biBtb3RpZiBhbOlhdG9pcmWgOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQwCittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIlRlc3QgZW4gY291cnMgYXZlYyBsZSBtb3RpZiAweCIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNzIgbWlzYy9iYWRibG9ja3MuYzo0NDUKK21zZ2lkICJkdXJpbmcgc2VlayIKK21zZ3N0ciAibG9ycyBkZSBsYSByZWNoZXJjaGUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiVmFsZXVyIGJpemFycmUgKCVsZCkgZGFucyBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAibG9ycyBkZSBsJ2V46WN1dGlvbiBkJ2V4dDJmc19zeW5jX2RldmljZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0ODkgbWlzYy9iYWRibG9ja3MuYzo3NDkKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICJsb3JzIGR1IGTpYnV0IGRlIGwnaXTpcmF0aW9uIGRlIGxhIGxpc3RlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwMyBtaXNjL2JhZGJsb2Nrcy5jOjYwMiBtaXNjL2JhZGJsb2Nrcy5jOjc1OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZGVzIHRhbXBvbnMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIlbpcmlmaWNhdGlvbiBkZXMgYmxvY3MgJWx1IOAgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiVulyaWZpY2F0aW9uIGRlcyBibG9jcyBk6WZlY3R1ZXV4IGVuIG1vZGUgbGVjdHVyZSBzZXVsZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiVulyaWZpY2F0aW9uIGRlcyBibG9jcyBk6WZlY3R1ZXV4ICh0ZXN0IGVuIG1vZGUgbGVjdHVyZSBzZXVsZSmgOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI4IG1pc2MvYmFkYmxvY2tzLmM6NjM0IG1pc2MvYmFkYmxvY2tzLmM6Njc2CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgyMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiVHJvcCBkZSBibG9jcyBk6WZlY3R1ZXV4LCB0ZXN0IGFiYW5kb25u6VxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYwOQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJW6XJpZmljYXRpb24gZGVzIGJsb2NzIGTpZmVjdHVldXggZW4gbW9kZSBsZWN0dXJlLeljcml0dXJlXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJEdSBibG9jICVsdSBhdSBibG9jICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY2NgorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMZWN0dXJlIGV0IGNvbXBhcmFpc29uoDogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3MQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorIlbpcmlmaWNhdGlvbiBkZXMgYmxvY3MgZOlmZWN0dWV1eCBkYW5zIHVuIG1vZGUgbm9uIGRlc3RydWN0aWYgZGUgbGVjdHVyZS1cbiIKKyLpY3JpdHVyZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJW6XJpZmljYXRpb24gZGVzIGJsb2NzIGTpZmVjdHVldXggKHRlc3Qgbm9uIGRlc3RydWN0aWYgZGUgbGVjdHVyZS3pY3JpdHVyZSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIkludGVycnVwdGlvbiwgbmV0dG95YWdlIGVuIGNvdXJzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAibG9ycyBkdSB0ZXN0IGQn6WNyaXR1cmUgZGUgZG9ubullcywgYmxvYyAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTg4IG1pc2MvdXRpbC5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBtb3VudGVkOyAiCittc2dzdHIgIiVzIGVzdCBtb2506aA7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorImwnZXjpY3V0aW9uIGRlIGJhZGJsb2NrcyBlc3QgdG91dCBkZSBt6m1lIGZvcmPpZS5cbiIKKyJFc3Dpcm9ucyBxdWUgL2V0Yy9tdGFiIGVzdCBpbmNvcnJlY3QuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICJpbCBuJ2VzdCBwYXMgcHJ1ZGVudCBkJ2V46WN1dGVyIGJhZGJsb2Nrc6AhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMCBtaXNjL3V0aWwuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyBlc3QgYXBwYXJlbW1lbnQgdXRpbGlz6SBwYXIgbGUgc3lzdOhtZaA7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgImJsb2NzIGVycm9u6XMgZm9yY+lzIGRlIHRvdXRlcyBtYW5p6HJlcy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiJXMgaW52YWxpZGUgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgIm5lIHBldXQgYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgbW90aWZfZGVfdGVzdCAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjMKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiQXUgcGx1cyB1biBzZXVsIG1vdGlmX2RlX3Rlc3QgcGV1dCDqdHJlIHNw6WNpZukgZW4gbW9kZSBsZWN0dXJlIHNldWxlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjkKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJVbiBtb3RpZl9kZV90ZXN0IGFs6WF0b2lyZSBuJ2VzdCBwYXMgcGVybWlzIGVuIG1vZGUgbGVjdHVyZSBzZXVsZSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTgzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKyJOZSBwZXV0IGTpdGVybWluZXIgbGEgdGFpbGxlIGR1IHDpcmlwaOlyaXF1ZaA7IHZvdXMgZGV2ZXogc3DpY2lmaWVyXG4iCisibGEgdGFpbGxlIG1hbnVlbGxlbWVudFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBk6XRlcm1pbmF0aW9uIGRlIGxhIHRhaWxsZSBkdSBw6XJpcGjpcmlxdWUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5NAorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgImRlcm5pZXIgYmxvYyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAwCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgInByZW1pZXIgYmxvYyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsdSIKK21zZ3N0ciAiYmxvYyBkZSBk6XBhcnQgaW52YWxpZGUgKCVsdSmgOiBkb2l0IOp0cmUgbW9pbnMgZGUgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJsb3JzIGRlIGxhIGNy6WF0aW9uIGVuIG3pbW9pcmUgZCd1bmUgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI3NAorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImxvcnMgZGUgbCdham91dCBlbiBt6W1vaXJlIOAgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiUGFzc2UgY29tcGzpdOllLCAldSBibG9jcyBk6WZlY3R1ZXV4IHJlcOly6XMuICglZC8lZC8lZCBlcnJldXJzKVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWNoaWVycy4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgInZlcnNpb24gZXJyb27pZSAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJsb3JzIGRlIGwn6XZhbHVhdGlvbiBwYXIgc3RhdCgpIGRlICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZGVzIGRyYXBlYXV4IHN1ciAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiRHJhcGVhdXggZGUgJXMgaW5pdGlhbGlz6XMgY29tbWUgIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZGVzIGRyYXBlYXV4IHN1ciAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIlZlcnNpb24gZGUgJXMgaW5pdGlhbGlz6WUg4CAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZGUgbGEgdmVyc2lvbiBzdXIgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJOZSBwZXV0IGFsbG91ZXIgdW5lIHZhcmlhYmxlIGRlIGNoZW1pbiBkYW5zIGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDYKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLSBldCArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE0Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIlZvdXMgZGV2ZXogdXRpbGlzZXIgq6AtdqC7LCA9IC0gb3UgK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxub21icmU+XSBbLW8gYmxvY2tzaXplPTxub21icmU+XSBw6XJpcGjpcmlxdWVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiYmxvY3MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiY2x1c3RlcnMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3JvdXBlICVsdaA6IChCbG9jcyAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgQ2hlY2tzdW0gMHglMDR4IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIChBVFRFTkRVIDB4JTA0eCkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgaS1ub2V1ZHMgbm9uIHV0aWxpc+lzICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiIHN1cGVyYmxvYyAlcyDgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW1haXJlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICJTZWNvdXJzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIERlc2NyaXB0ZXVycyBkZSBncm91cGVzIOAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBCbG9jcyBy6XNlcnbpcyBHRFQg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgRGVzY3JpcHRldXIgZGUgZ3JvdXBlIOAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM0Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgQml0bWFwIGRlIGJsb2NzIOAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIEJpdG1hcCBkJ2ktbm9ldWRzIOAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQyCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiIFRhYmxlIGQnaS1ub2V1ZHMg4CAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1ICVzIGxpYnJlcywgJXUgaS1ub2V1ZHMgbGlicmVzLCAldSBy6XBlcnRvaXJlcyVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsICV1IGktbm9ldWRzIG5vbiB1dGlsaXPpc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgQmxvY3MgbGlicmVzoDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjY5Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgSS1ub2V1ZHMgbGlicmVzoDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzAwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImxvcnMgZGUgbCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkJsb2NzIGTpZmVjdHVldXigOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMzMyBtaXNjL3R1bmUyZnMuYzozMDYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsJ2ktbm9ldWQgZHUgam91cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMzOQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsJ291dmVydHVyZSBkZSBsJ2ktbm9ldWQgZHUgam91cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGR1IGpvdXJuYWwgZHUgc3VwZXJibG9jIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIkZvbmN0aW9uYWxpdOlzIGR1IGpvdXJuYWygOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiVGFpbGxlIGR1IGpvdXJuYWygOiAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiTG9uZ3VldXIgZHUgam91cm5hbKA6ICAgICAgJXVcbiIKKyJT6XF1ZW5jZSBkdSBqb3VybmFsoDogICAgICAweCUwOHhcbiIKKyJE6WJ1dCBkdSBqb3VybmFsoDogICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiTnVt6XJvIGVycmV1ciBkdSBqb3VybmFsOiAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDAxIG1pc2MvdHVuZTJmcy5jOjIyMgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZHUgam91cm5hbCBkdSBzdXBlcmJsb2MiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJOZSBwZXV0IHRyb3V2ZXIgbGVzIG51belyb3MgbWFnaXF1ZXMgZHUgc3VwZXJibG9jIGR1IGpvdXJuYWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlRhaWxsZSBkZSBibG9jIGR1IGpvdXJuYWygOiAgICAgICAgJXVcbiIKKyJMb25ndWV1ciBkdSBqb3VybmFsoDogICAgICAgICAgICAgICV1XG4iCisiUHJlbWllciBibG9jIGR1IGpvdXJuYWygOiAgICAgICAgICAldVxuIgorIlPpcXVlbmNlIGR1IGpvdXJuYWygOiAgICAgICAgICAgICAgMHglMDh4XG4iCisiROlidXQgZHUgam91cm5hbKA6ICAgICAgICAgICAgICAgICAldVxuIgorIk5vbWJyZSBkJ3V0aWxpc2F0ZXVycyBkdSBqb3VybmFsoDogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIlVzYWdlcnMgZHUgam91cm5hbKA6ICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MiBtaXNjL21rZTJmcy5jOjY2NiBtaXNjL3R1bmUyZnMuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgYW5hbHlzZXIgbGVzIG9wdGlvbnOgIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSBkZSBzdXBlcmJsb2MgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW3odHJlIGRlIHRhaWxsZSBkZSBibG9jIGludmFsaWRloDogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZSBvdSBkZXMgb3B0aW9ucyBzcOljaWZp6WVzIHNvbnQgZXJyb27pZXOgOiAlc1xuIgorIlxuIgorIkxlcyBvcHRpb25zIOl0ZW5kdWVzIHNvbnQgc+lwYXLpZXMgcGFyIGRlcyB2aXJndWxlcyBldCBwZXV2ZW50IHByZW5kcmUgdW5cbiIKKyJcdGFyZ3VtZW50IHF1aSBlc3QgZOlmaW5pIOAgbCdhaWRlIGQndW4gc2lnbmUgZCfpZ2FsaXTpICiroD2guykuXG4iCisiXG4iCisiTGVzIG9wdGlvbnMgdmFsaWRlcyBzb250OlxuIgorIlx0c3VwZXJibG9jaz08bnVt6XJvIGRlIHN1cGVyYmxvYz5cbiIKKyJcdGJsb2Nrc2l6ZT08dGFpbGxlIGRlIGJsb2M+XG4iCisiXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NTQgbWlzYy9ta2UyZnMuYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRVdGlsaXNhdGlvbiBkZSAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTkwIG1pc2MvZTJpbWFnZS5jOjEzMjYgbWlzYy90dW5lMmZzLmM6MTkyMworIzogcmVzaXplL21haW4uYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgZmluZCB2YWxpZCBmaWxlc3lzdGVtIHN1cGVyYmxvY2suXG4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciB1biBzdXBlcmJsb2MgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyB2YWxpZGUuXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXOgOiAlc6A6IGVycmV1ciBsb3JzIGRlIGxhIGxlY3R1cmUgZGVzIGJpdG1hcHOgOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRYV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBbLXJzSVFhXSBw6XJpcGjpcmlxdWUgZmljaGllcl9pbWFnZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkVycmV1cqA6IGxhIHRhaWxsZSBkJ2VuLXTqdGUgZXN0IHBsdXMgZ3JhbmRlIHF1ZSB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIk5lIHBldXQgYWxsb3VlciB1biB0YW1wb24gZCdlbi106nRlXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsJ+ljcml0dXJlIGR1IHN1cGVyYmxvYyIKKworIzogbWlzYy9lMmltYWdlLmM6MTgyCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAibG9ycyBkZSBsJ+ljcml0dXJlIGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZHUgYml0bWFwIGRlIGJsb2NzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAibG9ycyBkZSBsJ+ljcml0dXJlIGR1IGJpdG1hcCBkJ2ktbm9ldWRzIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAibG9ycyBkZSBsJ2Vzc2FpIGRlIGNvbnZlcnNpb24gZGUgbCdpbWFnZSBxY293MiAoJXMpIGVuIGltYWdlIGJydXRlICglcykiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWygOiBpbXBvc3NpYmxlIGQnb3V2cmlyICVzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbKA6IG5lIHBldXQgYXR0ZWluZHJlIGxlIHN1cGVyYmxvY1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbKA6IGVycmV1ciBkZSBsZWN0dXJlIGR1IHN1cGVyYmxvY1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWygOiBuJ2VzdCBwYXMgdW4gc3lzdOhtZSBkZSBmaWNoaWVycyBleHQyXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiDpdGlxdWV0dGUgdHJvcCBsb25ndWUsIHNlcmEgdHJvbnF16WUuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWygOiBuZSBwZXV0IGF0dGVpbmRyZSBsZSBzdXBlcmJsb2Mg4CBub3V2ZWF1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbKA6IGVycmV1ciBsb3JzIGRlIGwn6WNyaXR1cmUgZHUgc3VwZXJibG9jXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiBlMmxhYmVsIHDpcmlwaOlyaXF1ZSBbbm91dmVsbGVf6XRpcXVldHRlXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgPGZpY2hpZXIgdHJhbnNhY3Rpb24+IDxzeXN06G1lIGRlIGZpY2hpZXJzPlxuIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIsljaGVjIGRlIGxlY3R1cmUgZGVzIGRvbm7pZXMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiyWNoZWMgdGRiX2ZldGNoICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIE1vdW50IHRpbWUgZGlkbid0IG1hdGNoICV1XG4iCittc2dzdHIgIkxhIGRhdGUgZGUgbW9udGFnZSBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIG5lIGNvcnJlc3BvbmQgcGFzIOAgJXVcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiTCdVVUlEIGR1IHN5c3TobWUgZGUgZmljaGllcnMgbmUgY29ycmVzcG9uZCBwYXMgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICLJY2hlYyB0ZGJfb3BlbiAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGxhIGTpdGVybWluYXRpb24g4CBzYXZvaXIgc2kgJXMgZXN0IG1vbnTpLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgImUydW5kbyBuZSBkZXZyYWl0IOp0cmUgbGFuY+kgcXVlIHN1ciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIG5vbiBtb2506VxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICLJY2hlYyBsb3JzIGRlIGwnb3V2ZXJ0dXJlIGRlICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiUmVqZXUgZGUgbGEgdHJhbnNhY3Rpb24gZGUgdGFpbGxlICV6ZCDgIGxhIHBvc2l0aW9uICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIsljaGVjIOljcml0dXJlICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJBVFRFTlRJT06gOiBpbXBvc3NpYmxlIGQnb3V2cmlyICVzoDogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJBVFRFTlRJT06gOiBmb3JtYXQgZXJyb27pIHN1ciBsYSBsaWduZSAlZCBkZSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFUVEVOVElPTqA6IHZvdHJlIGZpY2hpZXIgL2V0Yy9mc3RhYiBuZSBjb250aWVudCBwYXMgZGUgY2hhbXBcbiIKKyJcdGRlIG51belybyBkZSBwYXNzZSBmc2NrLiBKZSB2YWlzIGFycmFuZ2VyIGNldHRlIHNpdHVhdGlvbiBwb3VyIHZvdXNcbiIKKyJcdG1haXMgdm91cyBkZXZyaWV6IGNvcnJpZ2VyIHZvdHJlIGZpY2hpZXIgL2V0Yy9mc3RhYiBhdXNzaSB09HQgcXVlXG4iCisiXHRwb3NzaWJsZS5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNja6A6ICVzoDogbm9uIHRyb3V26VxuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlc6A6IHdhaXSgOiBwbHVzIGRlIHByb2Nlc3N1cyBmaWxzoD8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQXZlcnRpc3NlbWVudC4uLiAlcyBwb3VyIGxlIHDpcmlwaOlyaXF1ZSAlcyBzJ2VzdCB0ZXJtaW7pIGF2ZWMgbGUgc2lnbmFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXOgOiBsJ+l0YXQgZXN0ICV4LCBuZSBkZXZyYWl0IGphbWFpcyBzZSBwcm9kdWlyZS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJUZXJtaW7pIGF2ZWMgJXMgKOl0YXQgZGUgZmluIGQnZXjpY3V0aW9uICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlc6A6IEVycmV1ciAlZCBsb3JzIGRlIGwnZXjpY3V0aW9uIGRlIGZzY2suJXMgcG91ciAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIlNvaXQgdG91cyBvdSBhdWN1biBkZXMgdHlwZXMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnMgcGFzc+lzIOAgLXQgZG9pdmVudFxuIgorIup0cmUgcHLpZml46XMgcGFyIKugbm+guyBvdSCroCGguy5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUgcG91ciBsZXMgdHlwZXMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnNcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgbnVtYmVyXG4iCittc2dzdHIgIiVzoDogc2F1dCBkZSBsYSBtYXV2YWlzZSBsaWduZSBkZSAvZXRjL2ZzdGFioDogbW9udGFnZSCroGJpbmSguyBhdmVjIHVuIG51belybyBkZSBwYXNzZSBmc2NrIG5vbiBudWxcbiIKKworIzogbWlzYy9mc2NrLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6IGNhbm5vdCBjaGVjayAlczogZnNjay4lcyBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNja6A6IG5lIHBldXQgcGFzIHbpcmlmaWVyICVzoDogZnNjay4lcyBub24gdHJvdXbpXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIlbpcmlmaWNhdGlvbiBkZSB0b3VzIGxlcyBzeXN06G1lcyBkZSBmaWNoaWVycy5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1lbiBhdHRlbnRlLS0gKHBhc3NlICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IHR5cGVfc3lzX2ZpY2hpZXJzXSBbb3B0aW9uc19zeXNfZmljaGllcnNdIFtzeXNfZmljaGllcnMuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXOgOiB0cm9wIGRlIHDpcmlwaOlyaXF1ZXNcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXOgOiB0cm9wIGQnYXJndW1lbnRzXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgWy1SVmFkbHZdIFtmaWNoaWVycy4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJMb3JzIGRlIGxhIGxlY3R1cmUgZGVzIGRyYXBlYXV4IHN1ciAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIkxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsYSB2ZXJzaW9uIHN1ciAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy1jb3VudF1cbiIKK21zZ3N0ciAiIgorIlV0aWxpc2F0aW9uoDogJXMgWy1jfC1sIG5vbS1kZS1maWNoaWVyXSBbLWIgdGFpbGxlLWRlLWJsb2NdIFstQyB0YWlsbGUtZGUtY2x1c3Rlcl1cbiIKKyJcdFstaSBvY3RldHMtcGFyLWktbm9ldWRdIFstSSB0YWlsbGUtZGVzLWktbm9ldWRzXVxuIgorIlx0Wy1KIG9wdGlvbnMtZGUtam91cm5hbF0gWy1HIHRhaWxsZS1ncm91cGUtZmxleF0gWy1OIG5vbWJyZS1kLWktbm9ldWRzXVxuIgorIlx0Wy1tIHBvdXJjZW50YWdlLWRlLWJsb2NzLXLpc2VydulzXVxuIgorIlx0Wy1vIHN5c3TobWUtZC1leHBsb2l0YXRpb24tZGUtY3LpYXRpb25dIFstZyBibG9jcy1wYXItZ3JvdXBlXVxuIgorIlx0Wy1MIOl0aXF1ZXR0ZS1kdS12b2x1bWVdIFstTSBkZXJuaWVyLXLpcGVydG9pcmUtbW9udOldXG4iCisiXHRbLU8gZm9uY3Rpb25uYWxpdOlbLC4uLl1dIFstciBy6XZpc2lvbi1kdS1zeXN06G1lLWRlLWZpY2hpZXJzXVxuIgorIlx0Wy1FIG9wdGlvbi3pdGVuZHVlWywuLi5dXSBbLXQgdHlwZS1zeXN06G1lLWRlLWZpY2hpZXJzXSBbLVQgdHlwZS1kJ3V0aWxpc2F0aW9uXVxuIgorIlx0Wy1VIFVVSURdIFstam5xdkZLU1ZdIHDpcmlwaOlyaXF1ZSBbbm9tYnJlLWRlLWJsb2NzXVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIkV46WN1dGlvbiBkZSBsYSBjb21tYW5kZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAiZHVyYW50IGxhIHRlbnRhdGl2ZSBkJ2V46WN1dGlvbiBkZSCroCVzoLsiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjMyCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJsb3JzIGR1IHRyYWl0ZW1lbnQgZGUgbGEgbGlzdGUgZGVzIGJsb2NzIGTpZmVjdHVldXgg4CBwYXJ0aXIgZHUgcHJvZ3JhbW1lIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiQmxvYyAlZCBkYW5zIGxhIHpvbmUgZHUgZGVzY3JpcHRldXIgZGUgc3VwZXJibG9jL2dyb3VwZSBwcmltYWlyZSBlc3QgZOlmZWN0dWV1eC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiTGVzIGJsb2NzIGRlICV1IOAgJXUgZG9pdmVudCDqdHJlIGVuIGJvbiDpdGF0IHBvdXIgZ+lu6XJlciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJBcnLqdCBpbW3pZGlhdC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogbGVzIHNhdXZlZ2FyZGVzIGRlcyBkZXNjcmlwdGV1cnMgZGUgc3VwZXJibG9jcy9ncm91cGVzIGF1XG4iCisiXHRibG9jICV1IGNvbnRpZW5uZW50IGRlcyBibG9jcyBk6WZlY3R1ZXV4LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMwMworbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJsb3JzIGR1IG1hcnF1YWdlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IGVuIHRhbnQgcXUndXRpbGlz6XMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiyWNyaXR1cmUgZGVzIHRhYmxlcyBkJ2ktbm9ldWRzoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiSW1wb3NzaWJsZSBkJ+ljcmlyZSAlZCBibG9jcyBkYW5zIGxhIHRhYmxlIGQnaS1ub2V1ZHMgZOlidXRhbnQg4CAlbGx1oDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNTUgbWlzYy9ta2UyZnMuYzoyMjU3IG1pc2MvbWtlMmZzLmM6MjUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJjb21wbOl06SAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjM2NgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICJsb3JzIGRlIGxhIGNy6WF0aW9uIGR1IHLpcGVydG9pcmUgcmFjaW5lIgorCisjOiBtaXNjL21rZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlIGwnaS1ub2V1ZCByYWNpbmUiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGxhIHByb3Byael06SBkZSBsJ2ktbm9ldWQgcmFjaW5lIgorCisjOiBtaXNjL21rZTJmcy5jOjQwMworbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJsb3JzIGRlIGxhIGNy6WF0aW9uIGRlIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgImxvcnMgZGUgbGEgcmVjaGVyY2hlIGRlIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMworbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAibG9ycyBkZSBsJ2V4dGVuc2lvbiBkZSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGRlIGwnaS1ub2V1ZCBkZXMgYmxvY3MgZOlmZWN0dWV1eCIKKworIzogbWlzYy9ta2UyZnMuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiTeltb2lyZSDpcHVpc+llIGxvcnMgZGUgbCdlZmZhY2VtZW50IGRlcyBzZWN0ZXVycyAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJBdmVydGlzc2VtZW50oDogaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGJsb2MgMKA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBpbXBvc3NpYmxlIGQnZWZmYWNlciBsZSBzZWN0ZXVyICVkoDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDcKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb24gZHUgam91cm5hbCBkdSBzdXBlcmJsb2MiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTE1Cittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICJNaXNlIOAgeulybyBkdSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbKA6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJsb3JzIGRlIGxhIG1pc2Ug4CB66XJvIGR1IHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsIChibG9jICVsbHUsIGNvbXB0ZSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQ1Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImxvcnMgZGUgbCfpY3JpdHVyZSBkdSBzdXBlcmJsb2MgZGUgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkF2ZXJ0aXNzZW1lbnSgOiAlbGx1IGJsb2NzIGludXRpbGlz6XMuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiyXRpcXVldHRlIGRlIHN5c3TobWUgZGUgZmljaGllcnM9JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAiVHlwZSBkZSBzeXN06G1lIGQnZXhwbG9pdGF0aW9uoDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJUYWlsbGUgZGUgYmxvYz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVGFpbGxlIGRlIGNsdXN0ZXI9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJUYWlsbGUgZGUgZnJhZ21lbnQ9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICKroFN0cmlkZaC7ID0gJXUgYmxvY3MsIKugU3RyaXBlIHdpZHRooLsgPSAldSBibG9jc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGktbm9ldWRzLCAlbGx1IGJsb2NzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJWxsdSBibG9jcyAoJTIuMmYlJSkgculzZXJ26XMgcG91ciBsZSBzdXBlciB1dGlsaXNhdGV1clxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIlByZW1pZXIgYmxvYyBkZSBkb25u6WVzPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJvb3QgZGlyZWN0b3J5IG93bmVyPSV1OiV1XG4iCittc2dzdHIgIlByb3Byael0YWlyZSBkdSBy6XBlcnRvaXJlIHJhY2luZT0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJOb21icmUgbWF4aW11bSBkZSBibG9jcyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgZ3JvdXBlcyBkZSBibG9jc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBncm91cGUgZGUgYmxvY1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY3MgcGFyIGdyb3VwZSwgJXUgY2x1c3RlcnMgcGFyIGdyb3VwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2NzIHBhciBncm91cGUsICV1IGZyYWdtZW50cyBwYXIgZ3JvdXBlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgaS1ub2V1ZHMgcGFyIGdyb3VwZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJTdXBlcmJsb2NzIGRlIHNlY291cnMgc3RvY2vpcyBzdXIgbGVzIGJsb2NzoDogIgorCisjOiBtaXNjL21rZTJmcy5jOjY5MSBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW3odHJlIKugc3RyaWRloLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlwZS13aWR0aKC7IGludmFsaWRloDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbeh0cmUgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSBtYXhpbWFsZSBkZSBsJ2FncmFuZGlzc2VtZW50IGRvaXQg6nRyZSBwbHVzIGdyYW5kZSBxdWUgbGEgdGFpbGxlXG4iCisiZHUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiTGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUgbidlc3QgcGFzIHN1cHBvcnTpZSBhdmVjIGxlcyBzeXN06G1lcyBkZVxuIgorImZpY2hpZXJzIGRlIHZlcnNpb24gMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgwMSBtaXNjL21rZTJmcy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAicm9vdF9vd25lciBpbnZhbGlkZaA6IKugJXOgu1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSBkZSB0eXBlIGRlIHF1b3RhIGludmFsaWRloDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVW5lIG91IGRlcyBvcHRpb25zIHNw6WNpZmnpZXMgc29udCBlcnJvbullc6A6ICVzXG4iCisiXG4iCisiTGVzIG9wdGlvbnMg6XRlbmR1ZXMgc29udCBz6XBhcullcyBwYXIgZGVzIHZpcmd1bGVzIGV0IHBldXZlbnQgcHJlbmRyZSB1blxuIgorIlx0YXJndW1lbnQgcXVpIGVzdCBk6WZpbmkg4CBsJ2FpZGUgZCd1biBzaWduZSBkJ+lnYWxpdOkgKKugPaC7KS5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyB2YWxpZGVzIHNvbnSgOlxuIgorIlx0c3RyaWRlPTx0YWlsbGUgZW4gYmxvY3MgZGVzIG1vcmNlYXV4IHBhciBkaXNxdWUgUkFJRD5cbiIKKyJcdHN0cmlwZS13aWR0aD08c3RyaWRlIFJBSUQgKiBub21icmUgZGUgZGlzcXVlcyBlbiBibG9jcz5cbiIKKyJcdHJlc2l6ZT08dGFpbGxlIG1heGltYWxlIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGJsb2NzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCBwb3VyIGTpc2FjdGl2ZXIsIDEgcG91ciBhY3RpdmVyPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgcG91ciBk6XNhY3RpdmVyLCAxIHBvdXIgYWN0aXZlcj5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgZHUgculwZXJ0b2lyZSByYWNpbmU+XG4iCisiXHRyb290X2dpZD08Z2lkIGR1IHLpcGVydG9pcmUgcmFjaW5lPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPVSBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdHRlbnRpb26gOiBsZSCroHN0cmlwZS13aWR0aKC7IFJBSUQgJXUgbidlc3QgcGFzIG11bHRpcGxlIGltcGFpciBkdSCroHN0cmlkZaC7ICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkVycmV1ciBkZSBzeW50YXhlIGRhbnMgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGRlIG1rZTJmc1xuIgorIlx0KCVzLCBsaWduZSBusCVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJKZXUgZCdvcHRpb25zIGRlIHN5c3TobWUgZGUgZmljaGllcnMgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjkzMiBtaXNjL3R1bmUyZnMuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJKZXUgZCdvcHRpb25zIHBvdXIgbGUgbW9udGFnZSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiVm90cmUgbWtlMmZzLmNvbmYgbmUgcHLpY2lzZSBwYXMgbGUgdHlwZSBkZSBzeXN06G1lIGRlIGZpY2hpZXJzIGRlXG4iCisiJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbCB2b3VzIGZhdXQgc2FucyBkb3V0ZSBpbnN0YWxsZXIgdW4gZmljaGllciBta2UyZnMuY29uZiBtaXMg4CBqb3VyLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAiQXJy6nQgaW1t6WRpYXQuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQXZlcnRpc3NlbWVudKA6IGxlIGZzX3R5cGUgJXMgbidlc3QgcGFzIGTpZmluaSBkYW5zIG1rZTJmcy5jb25mXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWxsb3VlciBkZSBsYSBt6W1vaXJlIHBvdXIgdW4gbm91dmVhdSBjaGVtaW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiTidhIHB1IGluaXRpYWxpc2VyIGxlIHByb2ZpbGFnZSBjb3JyZWN0ZW1lbnQgKGVycmV1cqA6ICVsZCkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM1NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrIHNpemUgLSAlcyIKK21zZ3N0ciAidGFpbGxlIGludmFsaWRlIGRlcyBibG9jcyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmxvY2tzaXplICVkIG5vdCB1c2FibGUgb24gbW9zdCBzeXN0ZW1zLlxuIgorbXNnc3RyICIiCisiQXZlcnRpc3NlbWVudKA6IGxhIHRhaWxsZSBkZSBibG9jICVkIG4nZXN0IHBhcyB1dGlsaXNhYmxlXG4iCisic3VyIGxhIHBsdXBhcnQgZGVzIHN5c3TobWVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAidGFpbGxlIGRlIGNsdXN0ZXIgaW52YWxpZGUgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzg3Cittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICKroC1SoLsgZXN0IGTpcHLpY2npLCB1dGlsaXNlciBwbHV09HQgq6AtRaC7IgorCisjOiBtaXNjL21rZTJmcy5jOjEzOTkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiTm9tYnJlIGRlIGJsb2NzIHBhciBncm91cGUgaWxs6WdhbCIKKworIzogbWlzYy9ta2UyZnMuYzoxNDA0Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImxlIG5vbWJyZSBkZSBibG9jcyBwYXIgZ3JvdXBlIGRvaXQg6nRyZSB1biBtdWx0aXBsZSBkZSA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTIKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJOb21icmUgaWxs6WdhbCBwb3VyIGxhIHRhaWxsZSBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTgKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIkxhIHRhaWxsZSBmbGV4X2JnIGRvaXQg6nRyZSB1bmUgcHVpc3NhbmNlIGRlIDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidGF1eCBkJ2ktbm9ldWRzIGludmFsaWRlcyAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FIG5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIkF2ZXJ0aXNzZW1lbnSgOiBsJ29wdGlvbiAtSyBlc3QgZOlwculjaellIGV0IG5lIGRldnJhaXQgcGx1cyDqdHJlIHV0aWxpc+llLiBVdGlsaXNlciBwbHV09HQgbCdvcHRpb24g6XRlbmR1ZSCroC1FIG5vZGlzY2FyZKC7oCFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDYwCittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJkYW5zIG1hbGxvYyBwb3VyIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgInBvdXJjZW50YWdlIGRlIGJsb2NzIHLpc2VydulzIGludmFsaWRlIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJtYXV2YWlzIG5vbWJyZSBkJ2ktbm9ldWRzIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAibWF1dmFpcyBudW3pcm8gZGUgdmVyc2lvbiAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MTkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiTCdvcHRpb24gLXQgbmUgcGV1dCDqdHJlIHNw6WNpZmnpZSBxdSd1bmUgZm9pcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIkwnb3B0aW9uIC1UIG5lIHBldXQg6nRyZSBzcOljaWZp6WUgcXUndW5lIGZvaXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MCBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZHUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWwgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisibGEgdGFpbGxlIGRlIGJsb2MgZHUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWwgKCVkKSBlc3QgcGx1cyBwZXRpdCBxdWUgbGFcbiIKKyJ0YWlsbGUgZGUgYmxvY3MgbWluaW11bSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uIGRlIGxhIHRhaWxsZSBkZSBibG9jIGR1IHDpcmlwaOlyaXF1ZSBkZSBqb3VybmFsoDogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImJsb2NzICclcycgaW52YWxpZGVzIHN1ciBsZSBw6XJpcGjpcmlxdWUgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInN5c3TobWUgZGUgZmljaGllcnMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNiByZXNpemUvbWFpbi5jOjM2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkZSBk6XRlcm1pbmF0aW9uIGRlIGxhIHRhaWxsZSBkdSBzeXN06G1lIGRlIGZpY2hpZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5lIHBldXQgZOl0ZXJtaW5lciBsYSB0YWlsbGUgZHUgcOlyaXBo6XJpcXVloDsgdm91cyBkZXZleiBzcOljaWZpZXJcbiIKKyJsYSB0YWlsbGUgZHUgc3lzdOhtZSBkZSBmaWNoaWVyc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkxhIHRhaWxsZSByYXBwb3J06WUgZHUgcOlyaXBo6XJpcXVlIGVzdCB66XJvLiBMYSBwYXJ0aXRpb24gc3DpY2lmaellIGVzdFxuIgorIlx0aW52YWxpZGUgb3UgbGEgdGFibGUgZGUgcGFydGl0aW9ucyBuJ2EgcGFzIOl06SByZWx1ZSBhcHLoc1xuIgorIlx0bCdleOljdXRpb24gZGUgZmRpc2ssIGT7IGF1IGZhaXQgcXVlIGxhIHBhcnRpdGlvbiBtb2RpZmnpZSDpdGFpdFxuIgorIlx0b2NjdXDpZSBldCB1dGlsaXPpZS4gVm91cyBkZXZleiBy6S1hbW9yY2VyIHBvdXIgZm9yY2VyIHVuZVxuIgorIlx0cmVsZWN0dXJlIGRlIGxhIHRhYmxlIGRlIHBhcnRpdGlvbnMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY1NgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJTeXN06G1lIGRlIGZpY2hpZXJzIHBsdXMgZ3JhbmQgcXVlIGxhIHRhaWxsZSBhcHBhcmVudGUgZHUgcOlyaXBo6XJpcXVlIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiyWNoZWMgZHUgcGFyY291cnMgZGUgbGEgbGlzdGUgZGUgdHlwZXMgZGUgc3lzdOhtZXMgZGUgZmljaGllcnNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IExhIHRhaWxsZSAoMHglbGx4IGJsb2NzKSBkdSBw6XJpcGjpcmlxdWUgJXMgZXN0IHRyb3AgZ3JhbmRlIHBvdXJcbiIKKyJcdHBvdXZvaXIg6nRyZSBleHByaW3pZSBzdXIgMzIgYml0cyBlbiB1dGlsaXNhbnQgdW5lIHRhaWxsZSBkZSBibG9jIGRlICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NDYKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJy6XNvbHV0aW9uIGRlIGZzX3R5cGVzIHBvdXIgbWtlMmZzLmNvbmagOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKyJGb25jdGlvbm5hbGl06XMgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBub24gc3VwcG9ydOllcyBwYXIgbGVzIHN5c3TobWVzIGRlXG4iCisiZmljaGllcnMgZGUgdmVyc2lvbiAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIkxlcyBzdXBlcmJsb2NzIGNyZXV4IG5lIHNvbnQgcGFzIHN1cHBvcnTpcyBwYXIgbGVzIHN5c3TobWVzIGRlXG4iCisiZmljaGllcnMgZGUgdmVyc2lvbiAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiTGVzIGpvdXJuYXV4IG5lIHNvbnQgcGFzIHN1cHBvcnTpcyBwYXIgbGVzIHN5c3TobWVzIGRlXG4iCisiZmljaGllcnMgZGUgdmVyc2lvbiAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJWxmIgorbXNnc3RyICJwb3VyY2VudGFnZSBkZSBibG9jcyBy6XNlcnbpcyBpbnZhbGlkZSAtICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiTGVzIGZvbmN0aW9ubmFsaXTpcyByZXNpemVfaW5vZGUgZXQgbWV0YV9iZyBuZSBzb250IHBhcyBjb21wYXRpYmxlcy5cbiIKKyJFbGxlcyBuZSBwZXV2ZW50IHBhcyDqdHJlIGFjdGl26WVzIHNpbXVsdGFu6W1lbnQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxOQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIGTpdGVybWluYXRpb24gZGUgbGEgdGFpbGxlIG1hdOlyaWVsbGUgZGUgc2VjdGV1ciIKKworIzogbWlzYy9ta2UyZnMuYzoxODI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgZOl0ZXJtaW5hdGlvbiBkZSBsYSB0YWlsbGUgZGUgc2VjdGV1ciBtYXTpcmllbCIKKworIzogbWlzYy9ta2UyZnMuYzoxODU4Cittc2dpZCAid2hpbGUgc2V0dGluZyBibG9ja3NpemU7IHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iCittc2dzdHIgImxvcnMgZGUgbGEgZOlmaW5pdGlvbiBkZSBsYSB0YWlsbGUgZGUgYmxvY6A7IHRyb3AgcGV0aXRlIHBvdXIgbGUgcOlyaXBo6XJpcXVlXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICJBdmVydGlzc2VtZW50oDogbGEgdGFpbGxlIGRlIGJsb2MgJWQgc3DpY2lmaellIGVzdCBwbHVzIHBldGl0ZSBxdWUgbGEgdGFpbGxlIGRlIHNlY3RldXIgcGh5c2lxdWUgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODgxCittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiTGEgdGFpbGxlIGQndW4gY2x1c3RlciBuZSBwZXV0IHBhcyDqdHJlIHBsdXMgcGV0aXRlIHF1ZSBsYSB0YWlsbGUgZCd1biBibG9jLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODcKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICJTcOljaWZpZXIgdW5lIHRhaWxsZSBkZSBjbHVzdGVyIG7pY2Vzc2l0ZSBsYSBmb25jdGlvbmFsaXTpIGJpZ2FsbG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgImF0dGVudGlvbqA6IEltcG9zc2libGUgZCdvYnRlbmlyIGxhIGfpb23pdHJpZSBkdSBw6XJpcGjpcmlxdWUgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJMJ2FsaWduZW1lbnQgZGUgJXMgZXN0IGTpY2Fs6SBkZSAlbHUgb2N0ZXRzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICJDZWxhIHBldXQgaW5kdWlyZSBkZSB0cuhzIG1hdXZhaXNlcyBwZXJmb3JtYW5jZXMsIGlsIGVzdCBzdWdn6XLpIGRlIChyZSktcGFydGl0aW9ubmVyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICJibG9jcyBkZSAlZCBvY3RldHMgdHJvcCBncm9zIHBvdXIgbGUgc3lzdOhtZSAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJBdmVydGlzc2VtZW50oDogYmxvY3MgZGUgJWQgb2N0ZXRzIHRyb3AgZ3JvcyBwb3VyIGxlIHN5c3TobWUgKG1heCAlZCksXG4iCisicG91cnN1aXRlIGZvcmPpZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NjgKK21zZ2lkICJDYW4ndCBzdXBwb3J0IGJpZ2FsbG9jIGZlYXR1cmUgd2l0aG91dCBleHRlbnRzIGZlYXR1cmUiCittc2dzdHIgIkxhIGZvbmN0aW9uYWxpdOkgYmlnYWxsb2MgbmUgcGV1dCBwYXMg6nRyZSBzdXBwb3J06WUgc2FucyBsYSBmb25jdGlvbmFsaXTpIGV4dGVudCIKKworIzogbWlzYy9ta2UyZnMuYzoxOTc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgYmlnYWxsb2MgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQXZlcnRpc3NlbWVudKA6IGxhIGZvbmN0aW9uYWxpdOkgYmlnYWxsb2MgZXN0IGVuY29yZSBlbiBjb3VycyBkZSBk6XZlbG9wcGVtZW50XG4iCisiVm9pciBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbnNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTgyIG1pc2MvdHVuZTJmcy5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIHF1b3RhIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkF2ZXJ0aXNzZW1lbnSgOiBsYSBmb25jdGlvbmFsaXTpIHF1b3RhIGVzdCBlbmNvcmUgZW4gY291cnMgZGUgZOl2ZWxvcHBlbWVudFxuIgorIlZvaXIgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgcG91ciBwbHVzIGQnaW5mb3JtYXRpb25zXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisibGEgculzZXJ2YXRpb24gZGUgYmxvY3MgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUgbidlc3QgcGFzXG4iCisic3VwcG9ydOllIHN1ciB1biBzeXN06G1lIGRlIGZpY2hpZXJzIG5vbiBjcmV1eCIKKworIzogbWlzYy9ta2UyZnMuYzoyMDAyCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImNvbXB0ZXVyIGRlIGJsb2NzIHBhciBncm91cGUgaG9ycyBsaW1pdGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAyNgorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJMYSBmb25jdGlvbm5hbGl06SBmbGV4X2JnIG4nZXN0IHBhcyBhY3RpdullLCBsYSB0YWlsbGUgZmxleF9iZyBuZSBwZXV0IGRvbmMgcGFzIOp0cmUgc3DpY2lmaellIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAlZCAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgInRyb3AgZCdpLW5vZXVkcyAoJWxsdSksIGF1Z21lbnRlciBsZSByYXRpbyBkJ2ktbm9ldWRzoD8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgInRyb3AgZCdpLW5vZXVkcyAoJWxsdSksIGluZGlxdWVyIDwgMl4zMiBpLW5vZXVkcyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJ0YWlsbGVfaV9ub2V1ZCAoJXUpICogbm9tYnJlX2lfbm9ldWRzICgldSkgdHJvcCBncmFuZCBwb3VyIHVuXG4iCisiXHRzeXN06G1lIGRlIGZpY2hpZXJzIGF2ZWMgJWxsdSBibG9jcywgaW5kaXF1ZXIgdW4gcmF0aW9faV9ub2V1ZCAoLWkpXG4iCisiXHRwbHVzIGdyYW5kIG91IHVuIG5vbWJyZSBkJ2ktbm9ldWQgcGx1cyBwZXRpdCAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLJY3Jhc2VtZW50IGR1IHN5c3TobWUgZGUgZmljaGllcnMgZXhpc3RhbnSgOyBjZWxhIHBldXQg6nRyZSBk6WZhaXQgZW4gdXRpbGlzYW50IGxhIGNvbW1hbmRloDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgbWlzZSBlbiBwbGFjZSBkdSBmaWNoaWVyIGQnYW5udWxhdGlvblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMzYKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiUmVqZXQgZGVzIGJsb2NzIGRlIHDpcmlwaOlyaXF1ZaA6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICLpY2hvdekgLSAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM2MAorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAibG9ycyBkZSBsJ2luaXRpYWxpc2F0aW9uIGR1IHN1cGVyYmxvYyIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIkwnZWZmYWNlbWVudCBhIHLpdXNzaSBldCByZXRvdXJuZXJhIGRlcyAwcyAgLSBzYXV0IGRlIGwnZWZmYWNlbWVudCBkZSBsYSB0YWJsZSBkZXMgaS1ub2V1ZHNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAic3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiBpbmNvbm51IC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJBbGxvY2F0aW9uIGRlcyB0YWJsZXMgZGUgZ3JvdXBloDogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGQnYWxsb2NhdGlvbiBkZXMgdGFibGVzIGRlIHN5c3TobWVzIGRlIGZpY2hpZXJzIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiXHRsb3JzIGRlIGxhIGNvbnZlcnNpb24gZHUgYml0bWFwIGRlIHNvdXMtY2x1c3RlciIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAibG9ycyBkZSBsYSBtaXNlIOAgeulybyBkdSBibG9jICVsbHUg4CBsYSBmaW4gZHUgc3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTczCittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAibG9ycyBkZSBsYSBy6XNlcnZhdGlvbiBkZSBibG9jcyBwb3VyIHVuIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGxpZ25lIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODQgbWlzYy90dW5lMmZzLmM6NjQ1Cittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAiam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJBam91dCBkdSBqb3VybmFsIGF1IHDpcmlwaOlyaXF1ZSAlc6A6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdGxvcnMgZGUgbGEgdGVudGF0aXZlIGQnYWpvdXQgZCd1biBqb3VybmFsIGF1IHDpcmlwaOlyaXF1ZSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjA4IG1pc2MvbWtlMmZzLmM6MjY0MCBtaXNjL3R1bmUyZnMuYzo2NzQgbWlzYy90dW5lMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAiY29tcGzpdOlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIlBhcyBkZSBjculhdGlvbiBkZSBqb3VybmFsIGVuIG1vZGUgc3VwZXItc2V1bFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJDculhdGlvbiBkdSBqb3VybmFsICgldSBibG9jcymgOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzNgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0bG9ycyBkZSBsYSB0ZW50YXRpdmUgZGUgY3LpYXRpb24gZHUgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQ3IG1pc2MvdHVuZTJmcy5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorIlxuIgorIkVycmV1ciBsb3JzIGRlIGwnYWN0aXZhdGlvbiBkZSBsYSBmb25jdGlvbm5hbGl06SBkZSBwcm90ZWN0aW9uIGNvbnRyZSBsZSBtb250YWdlIG11bHRpcGxlLiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaXMgZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZCBzZWNvbmRzLlxuIgorbXNnc3RyICJMYSBwcm90ZWN0aW9uIGNvbnRyZSBsZSBtb250YWdlIG11bHRpcGxlIGVzdCBhY3RpdullIGF2ZWMgdW4gaW50ZXJ2YWxlIGRlIG1pc2Ug4CBqb3VyIGRlICVkIHNlY29uZGVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIiIKKyLJY3JpdHVyZSBkZXMgc3VwZXJibG9jcyBldCBkZSBsJ2luZm9ybWF0aW9uIGRlIGNvbXB0YWJpbGl06SBkdSBzeXN06G1lIGRlXG4iCisiZmljaGllcnOgOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisiXG4iCisiQXR0ZW50aW9uLCBkZXMgcHJvYmzobWVzIHNvbnQgc3VydmVudXMgbG9ycyBkZSBsJ+ljcml0dXJlIGRlcyBzdXBlcmJsb2NzLiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJjb21wbOl06VxuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJVdGlsaXNhdGlvbqA6ICAlcyBw6XJpcGjpcmlxdWUuLi5cbiIKKyJcbiIKKyJJbXByaW1lIGwnaW5mb3JtYXRpb24gZGUgcGFydGl0aW9uIHBvdXIgY2hhcXVlIHDpcmlwaOlyaXF1ZSBpbmRpcXXpLlxuIgorIlBhciBleGVtcGxloDogJXMgL2Rldi9oZGFcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciAlc6A6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIGxhIGfpb23pdHJpZSBkZSAlc6A6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ29idGVuaXIgbGEgdGFpbGxlIGRlICVzoDogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXOgOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIGTpYnV0PSU4ZCB0YWlsbGU9JThsdSBmaW49JThkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNworbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJTVlAgZXjpY3V0ZXogZTJmc2NrIHN1ciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlV0aWxpc2F0aW9uoDogJXMgWy1jIGxpbWl0ZS1tYXhpbWFsZS1kZS1tb250YWdlXVxuIgorIlx0Wy1lIGNvbXBvcnRlbWVudC1lbi1jYXMtZC1lcnJldXJdIFstZyBncm91cGVdXG4iCisiXHRbLWkgaW50ZXJ2YWxsZVtkfG18d11dIFstal0gWy1KIG9wdGlvbnMtam91cm5hbF0gWy1sXVxuIgorIlx0Wy1tIHBvdXJjZW50YWdlLWRlLWJsb2NzLXLpc2VydulzXSBbLW8gW15db3B0aW9ucy1kZS1tb250YWdlWywuLi5dXVxuIgorIlx0Wy1wIGludGVydmFsZS1taXNlLeAtam91ci1tbXBdIFstciBub21icmUtZGUtYmxvY3MtculzZXJ26XNdXG4iCisiXHRbLXUgdXRpbGlzYXRldXJdIFstQyBub21icmUtZGUtbW9udGFnZV0gWy1MIOl0aXF1ZXR0ZS1kdS12b2x1bWVdXG4iCisiXHRbLU0gZGVybmllci1y6XBlcnRvaXJlLW1vbnTpXSBbLU8gW15dZm9uY3Rpb25uYWxpdOlbLC4uLl1dXG4iCisiXHRbLUUgb3B0aW9uLel0ZW5kdWVbLC4uLl1dIFstVCBkYXRlLWRlLWRlcm5p6HJlLXbpcmlmaWNhdGlvbl1cbiIKKyJcdFstVSBVVUlEXSBbLUkgbm91dmVsbGUtdGFpbGxlLWktbm9ldWRzXSBw6XJpcGjpcmlxdWVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZHUgam91cm5hbCBleHRlcm5lIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBw6XJpcGjpcmlxdWUgZGUgam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAiTGUgc3VwZXJibG9jIGRlIGpvdXJuYWwgbidhIHBhcyDpdOkgdHJvdXbpoCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwCittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiTCdVVUlEIGR1IHN5c3TobWUgZGUgZmljaGllcnMgbidhIHBhcyDpdOkgdHJvdXbpIHN1ciBsZSBw6XJpcGjpcmlxdWUgZGVcbiIKKyJqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIk5lIHBldXQgcmVw6XJlciBsZSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbC4gSWwgbidhIFBBUyDpdOkgc3VwcHJpbelcbiIKKyJVdGlsaXNlciBsJ29wdGlvbiAtZiBwb3VyIHN1cHByaW1lciBsZSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbCBtYW5xdWFudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY5Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkpvdXJuYWwgZW5sZXbpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMworbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAibG9ycyBkZSBsYSBsZWN0dXJlIGRlcyBiaXRtYXBzIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMjEKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJsb3JzIGRlIGwnZWZmYWNlbWVudCBkZSBsJ2ktbm9ldWQgZHUgam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6MzMyCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJsb3JzIGRlIGwn6WNyaXR1cmUgZGUgbCdpLW5vZXVkIGR1IGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKGV0IHJlYm9vdGV6IGFwcuhzoCEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiTGEgc3VwcHJlc3Npb24gZGUgbGEgZm9uY3Rpb25uYWxpdOkgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyAnJXMnIG4nZXN0IHBhc1xuIgorInN1cHBvcnTpZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIkwnYWpvdXQgZGUgbGEgZm9uY3Rpb25uYWxpdOkgZGUgc3lzdOhtZSBkZSBmaWNoaWVycyAnJXMnIG4nZXN0IHBhc1xuIgorInN1cHBvcnTpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25uYWxpdGnpIGhhc19qb3VybmFsIHBldXQg6nRyZSBk6XNhY3RpdullIHVuaXF1ZW1lbnQgbG9yc3F1ZSBsZVxuIgorInN5c3TobWUgZGUgZmljaGllcnMgZXN0IGTpbW9udOkgb3UgbW9udOkgZW4gbGVjdHVyZSBzZXVsZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDI0Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiTGUgZHJhcGVhdSBuZWVkc19yZWNvdmVyeSBlc3QgYWN0aXbpLiBTVlAgZXjpY3V0ZXogZTJmc2NrIGF2YW50XG4iCisiZGUgZOlzYWN0aXZlciBsZSBkcmFwZWF1IGhhc19qb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NDMKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiTGEgZm9uY3Rpb25uYWxpdOkgZGUgcHJvdGVjdGlvbiBjb250cmUgbGVzXG4iCisibW9udGFnZXMgbXVsdGlwbGVzIG5lIHBldXQg6nRyZSBhY3RpdullIGxvcnNxdWVcbiIKKyJsZSBzeXN06G1lIGRlIGZpY2hpZXIgZXN0IG1vbnTpIG91IGVuIGxlY3R1cmUgc2V1bGUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWRzLlxuIgorbXNnc3RyICJMYSBwcm90ZWN0aW9uIGNvbnRyZSBsZSBtb250YWdlIG11bHRpcGxlIGEg6XTpIGFjdGl26WUgYXZlYyB1biBpbnRlcnZhbGUgZGUgbWlzZSDgIGpvdXIgZGUgJWRzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkxhIGZvbmN0aW9ubmFsaXTpIGRlIHByb3RlY3Rpb24gY29udHJlIGxlIG1vbnRhZ2UgbXVsdGlwbGUgbmUgcGV1dFxuIgorIup0cmUgZOlzYWN0aXbpZSBzaSBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGVzdCBlbiBsZWN0dXJlIHNldWxlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzgKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgbGVjdHVyZSBkZXMgYml0bWFwc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIkxlIG51belybyBtYWdpcXVlIGRhbnMgbGUgYmxvYyBNTVAgbmUgY29ycmVzcG9uZCBwYXMuIGF0dGVuZHWgOiAleCwgYWN0dWVsoDogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZHUgYmxvYyBNTVAuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjQKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIkVmZmFjZXIgbGUgZHJhcGVhdSBmbGV4X2JnIHJlbmRyYWl0IGxlIHN5c3TobWUgZGUgZmljaGllcnMgaW5jb2jpcmVudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTM1Cittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJMYSBmb25jdGlvbm5hbGl06SBodWdlX2ZpbGUgcGV1dCDqdHJlIGTpc2FjdGl26WUgdW5pcXVlbWVudCBsb3JzcXVlIGxlXG4iCisic3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgZOltb2506SBvdSBtb2506SBlbiBsZWN0dXJlIHNldWxlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1OTUKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiQXZlcnRpc3NlbWVudKA6IGwnb3B0aW9uIKugXnF1b3RhoLsgc3VwcGxhbnRlIGxlcyBhcmd1bWVudHMgq6AtUaC7LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBk6WrgIHVuIGpvdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdGxvcnMgZGUgbGEgdGVudGF0aXZlIGQnb3V2ZXJ0dXJlIGR1IGpvdXJuYWwgc3VyICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIG9uIGRldmljZSAlczogIgorbXNnc3RyICJDculhdGlvbiBkdSBqb3VybmFsIHN1ciBsZSBw6XJpcGjpcmlxdWUgJXOgOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJsb3JzIGRlIGwnYWpvdXQgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyBhdSBqb3VybmFsIHN1ciAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6Njc2Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICJDculhdGlvbiBkZSBsJ2ktbm9ldWQgZHUgam91cm5hbKA6ICIKKworIzogbWlzYy90dW5lMmZzLmM6Njg1Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIGNy6WF0aW9uIGR1IGZpY2hpZXIgam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6NzYzCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUgcG91ciBhbmFseXNlciBsZXMgb3B0aW9ucyBkZSBxdW90YaAhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4NQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVbmUgb3UgZGVzIG9wdGlvbnMgZGUgcXVvdGEgc3DpY2lmaellcyBzb250IGVycm9u6WVzLlxuIgorIlxuIgorIkxlcyBvcHRpb25zIGRlIHF1b3RhIHN1aXZhbnRlcyBzb250IGRpc3BvbmlibGVzIChsZXMgZm91cm5pciBz6XBhcullcyBwYXIgZGVzIHZpcmd1bGVzKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIk5lIHBldXQgYW5hbHlzZXIgbGEgc3DpY2lmaWNhdGlvbiBkZSBkYXRlL2hldXJloDogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg3MCBtaXNjL3R1bmUyZnMuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJjb21wdGV1ciBkZSBtb250YWdlcyBlcnJvbukgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJtYXV2YWlzIGNvbXBvcnRlbWVudCBlbiBjYXMgZCdlcnJldXIgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJub20gZ2lkL2dyb3VwZSBlcnJvbukgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJpbnRlcnZhbGxlIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgInRhdXggZGUgYmxvY3MgculzZXJ26XMgZXJyb27pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMDMKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbmUgcGV1dCDqdHJlIHNw6WNpZmnpIHF1J3VuZSBmb2lzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG5lIHBldXQg6nRyZSBzcOljaWZp6SBxdSd1bmUgZm9pcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgImNvbXB0ZXVyIGRlIGJsb2NzIHLpc2VydulzIGVycm9u6SAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIm5vbSB1dGlsaXNhdGV1ci91aWQgZXJyb27pIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIkxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMgZG9pdCDqdHJlIHVuZSBwdWlzc2FuY2UgZGUgZGV1eCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdHJvcCBncmFuZKA6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIkTpZmluaXRpb24gZGUgbCdpbnRlcnZhbGUgZGUgbWlzZSDgIGpvdXIgZGUgbGEgcHJvdGVjdGlvbiBjb250cmUgbGVzIG1vbnRhZ2VzIG11bHRpcGxlcyDgICVsdSBzZWNvbmRlXG4iCittc2dzdHJbMV0gIkTpZmluaXRpb24gZGUgbCdpbnRlcnZhbGUgZGUgbWlzZSDgIGpvdXIgZGUgbGEgcHJvdGVjdGlvbiBjb250cmUgbGVzIG1vbnRhZ2VzIG11bHRpcGxlcyDgICVsdSBzZWNvbmRlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlkZSBSQUlEoLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIlBhcmFt6HRyZSCroHN0cmlwZS13aWR0aCBSQUlEoLsgaW52YWxpZGWgOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIkFsZ29yaXRobWUgZGUgaGFjaGFnZSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkZSBsJ2FsZ29yaXRobWUgZGUgaGFjaGFnZSBwYXIgZOlmYXV0IOAgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZSBvdSBkZXMgb3B0aW9ucyBzcOljaWZp6WVzIHNvbnQgZXJyb27pZXMuXG4iCisiXG4iCisiTGVzIG9wdGlvbnMg6XRlbmR1ZXMgc29udCBz6XBhcullcyBwYXIgZGVzIHZpcmd1bGVzIGV0IHBldXZlbnQgcHJlbmRyZSB1blxuIgorIlx0YXJndW1lbnQgcXVpIGVzdCBk6WZpbmkg4CBsJ2FpZGUgZCd1biBzaWduZSBkJ+lnYWxpdOkgKKugPaC7KS5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyDpdGVuZHVlcyB2YWxpZGVzIHNvbnQ6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxhbGdvcml0aG1lIGRlIGhhY2hhZ2U+XG4iCisiXHRtb3VudF9vcHRzPTxvcHRpb25zIGRlIG1vbnRhZ2VzIOl0ZW5kdWVzIHBhciBk6WZhdXQ+XG4iCisiXHRzdHJpZGU9PHRhaWxsZSBlbiBibG9jcyBkZXMgbW9yY2VhdXggcGFyIGRpc3F1ZSBSQUlEPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxzdHJpZGUgUkFJRCAqIG5vbWJyZSBkZSBkaXNxdWVzIGVuIGJsb2NzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyMworbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICLJY2hlYyBkZSBsZWN0dXJlIGR1IGJpdG1hcCBkJ2ktbm9ldWRzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiyWNoZWMgZGUgbGVjdHVyZSBkdSBiaXRtYXAgZGUgYmxvY1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2NzIOAgZOlwbGFjZXIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIk4nYSBwdSBhbGxvdWVyIGRlIGJpdG1hcCBkZSBibG9jcyBsb3JzIGQndW5lIGF1Z21lbnRhdGlvbiBkZSB0YWlsbGUgZCdpLW5vZXVkIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU0Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICJQYXMgYXNzZXogZCdlc3BhY2UgcG91ciBhdWdtZW50ZXIgbGEgdGFpbGxlIGQnaS1ub2V1ZCBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1OQorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiTidhIHB1IHJlbG9nZXIgZGVzIGJsb2NzIGxvcnMgZCd1biBjaGFuZ2VtZW50IGRlIHRhaWxsZSBkJ2ktbm9ldWQgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkVycmV1ciBsb3JzIGR1IGNoYW5nZW1lbnQgZGUgbGEgdGFpbGxlIGRlcyBpLW5vZXVkcy5cbiIKKyJFeOljdXRleiBlMnVuZG8gcG91ciBk6WZhaXJlIGxlcyBjaGFuZ2VtZW50cyBkdSBzeXN06G1lIGRlIGZpY2hpZXJzLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgxOAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUgcG91ciBsZSBub20gZHUgZmljaGllciB0ZGJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJsb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ2VmZmFjZW1lbnQgZGUgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb3VyIGTpZmFpcmUgbCdvcOlyYXRpb24gZGUgdHVuZTJmcywgdmV1aWxsZXogbGFuY2VyIGxhIGNvbW1hbmRlXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIkxlIG51belybyBtYWdpcXVlIGR1IGJsb2MgTU1QIGVzdCBpbmNvcnJlY3QuIEVzc2F5ZXIgZGUgbGUgY29ycmlnZXIgZW4gbGFu52FudDpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIkxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMgZXN0IGTpauAgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hyaW5raW5nIHRoZSBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiTGEgculkdWN0aW9uIGRlIGxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMgbidlc3QgcGFzIHN1cHBvcnTpZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiVGFpbGxlIGQnaS1ub2V1ZCBpbnZhbGlkZSAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkdSBub21icmUgbWF4aW1hbCBkZSBtb250YWdlcyDgICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgbm9tYnJlIGNvdXJhbnQgZGUgbW9udGFnZXMg4CAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkdSBjb21wb3J0ZW1lbnQgZW4gY2FzIGQnZXJyZXVyIOAgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgZ2lkIGRlcyBibG9jcyBy6XNlcnbpcyDgICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImwnaW50ZXJ2YWxsZSBlbnRyZSBsZXMgdulyaWZpY2F0aW9ucyBlc3QgdHJvcCBncmFuZCAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIkTpZmluaXRpb24gZGUgbCdpbnRlcnZhbGxlIGRlIHbpcmlmaWNhdGlvbiDgICVsdSBzZWNvbmRlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgcG91cmNlbnRhZ2UgZGUgYmxvY3MgculzZXJ26XMg4CAlZyUlICglbGx1IGJsb2NzKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAibGUgbm9tYnJlIGRlIGJsb2NzIHLpc2VydulzIGVzdCB0cm9wIGdyYW5kICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIkTpZmluaXRpb24gZHUgbm9tYnJlIGRlIGJsb2NzIHLpc2VydulzIOAgJWxsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDUwCittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBk6WrgIGRlcyBzdXBlcmJsb2NzIGNyZXV4LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiRHJhcGVhdSBkZSBzdXBlcmJsb2MgY3JldXggYWN0aXbpLiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MjA2MgorbXNnaWQgIiIKKyJcbiIKKyJDbGVhcmluZyB0aGUgc3BhcnNlIHN1cGVyZmxhZyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgc3VwcHJlc3Npb24gZHUgc3VwZXJmbGFnIGNyZXV4IG4nZXN0IHBhcyBzdXBwb3J06WUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB0aW1lIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRvICVzXG4iCittc2dzdHIgIiIKKyJE6WZpbml0aW9uIGRlIGxhIGRhdGUgZGUgbGEgZGVybmnocmUgdulyaWZpY2F0aW9uIGR1IHN5c3TobWUgZGVcbiIKKyJmaWNoaWVycyDgICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJE6WZpbml0aW9uIGRlIGwndWlkIGRlIGJsb2NzIHLpc2VydulzIOAgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMDgKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGwndXRpbGlzYXRpb24gZGUgY2xlYXJfbW1wLiBFbGxlIGRvaXQg6nRyZSB1dGlsaXPpZSBhdmVjIC1mXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMjYKK21zZ2lkICJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJMYSBmb25jdGlvbmFsaXTpIGRlIHF1b3RhIG5lIHBldXQg6nRyZSBjaGFuZ+llIHF1ZSBsb3JzcXVlIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IGTpbW9udOkuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTkKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIkZvcm1hdCBVVUlEIGludmFsaWRlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzIKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiTGEgdGFpbGxlIGRlcyBpLW5vZXVkcyBuZSBwZXV0IOp0cmUgY2hhbmfpZSBxdWUgbG9yc3F1ZSBsZSBzeXN06G1lXG4iCisiZGUgZmljaGllcnMgZXQgZOltb2506S5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MAorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiQ2hhbmdlciBsYSB0YWlsbGUgZGVzIGktbm9ldWRzIG4nZXN0IHBhcyBzdXBwb3J06SBwb3VyIGxlcyBzeXN06G1lcyBkZVxuIgorImZpY2hpZXJzIGF2ZWMgbGEgZm9uY3Rpb25hbGl06SBmbGV4X2JnIGFjdGl26WUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJE6WZpbml0aW9uIGRlIGxhIHRhaWxsZSBkZXMgaS1ub2V1ZHMg4CAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiTidhIHB1IGNoYW5nZXIgbGEgdGFpbGxlIGQnaS1ub2V1ZCBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIkTpZmluaXRpb24gZGUgbGEgdGFpbGxlIGRlIKugc3RyaWRloLsg4CAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIkTpZmluaXRpb24gZGUgbGEgdGFpbGxlIGR1IKugc3RyaXBlIHdpZHRooLsg4CAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiROlmaW5pdGlvbiBkZXMgb3B0aW9ucyBkZSBtb250YWdlIOl0ZW5kdWVzIHBhciBk6WZhdXQg4CCroCVzoLtcbiIKKworIzogbWlzYy91dGlsLmM6NzQKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJQcm9j6WRlciBtYWxncukgdG91dKA/IChvLG4pICIKKworIzogbWlzYy91dGlsLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCittc2dzdHIgIk5lIHBldXQg6XZhbHVlciBwYXIgc3RhdCgpICVzIC0tLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJMZSBw6XJpcGjpcmlxdWUgbidleGlzdGUgYXBwYXJlbW1lbnQgcGFzoDsgbCdhdmV6LXZvdXMgc3DpY2lmaelcbiIKKyJjb3JyZWN0ZW1lbnSgP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG4nZXN0IHBhcyB1biBw6XJpcGjpcmlxdWUgc3DpY2lhbCBlbiBtb2RlIGJsb2MuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIlcyBlc3QgbGUgcOlyaXBo6XJpcXVlIGVuIGludOlncmFsaXTpLCBwYXMgc2V1bGVtZW50IHVuZSBwYXJ0aXRpb26gIVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTQKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiIgorImwnZXjpY3V0aW9uIGRlIG1rZTJmcyBlc3QgdG91dCBkZSBt6m1lIGZvcmPpZS5cbiIKKyJFc3Dpcm9ucyBxdWUgL2V0Yy9tdGFiIGVzdCBpbmNvcnJlY3QuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAibmUgZmVyYSBwYXMgdW4gJXMgaWNpoCFcbiIKKworIzogbWlzYy91dGlsLmM6MTY2Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgImwnZXjpY3V0aW9uIGRlIG1rZTJmcyBlc3QgdG91dCBkZSBt6m1lIGZvcmPpZS5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiTidhIHB1IGFsbG91ZXIgZGUgbGEgbeltb2lyZSBwb3VyIGFuYWx5c2VyIGxlcyBvcHRpb25zIGR1IGpvdXJuYWygIVxuIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOJ2EgcHUgdHJvdXZlciBsZSBw6XJpcGjpcmlxdWUgZGUgam91cm5hbCBjb3JyZXNwb25kYW50IOAgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVuZSBvdSBkZXMgb3B0aW9ucyBkZSBqb3VybmFsIHNw6WNpZmnpZXMgc29udCBlcnJvbullcy5cbiIKKyJcbiIKKyJMZXMgb3B0aW9ucyBkZSBqb3VybmFsIHNvbnQgc+lwYXLpZXMgcGFyIGRlcyB2aXJndWxlcyBldCBwZXV2ZW50IHByZW5kcmUgdW5cbiIKKyJcdGFyZ3VtZW50IHF1aSBlc3QgZOlmaW5pIOAgbCdhaWRlIGQndW4gc2lnbmUgZCfpZ2FsaXTpICiroD2guykuXG4iCisiXG4iCisiTGVzIG9wdGlvbnMgZGUgam91cm5hbCB2YWxpZGVzIHNvbnSgOlxuIgorIlx0c2l6ZT08dGFpbGxlIGR1IGpvdXJuYWwgZW4gbelnYW9jdGV0cz5cbiIKKyJcdGRldmljZT08cOlyaXBo6XJpcXVlIGR1IGpvdXJuYWw+XG4iCisiXG4iCisiTGEgdGFpbGxlIGR1IGpvdXJuYWwgZG9pdCDqdHJlIGNvbXByaXNlIGVudHJlIDEwMjQgZXQgMTAyNDAwMDAgYmxvY3MgZHVcbiIKKyJzeXN06G1lIGRlIGZpY2hpZXJzLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNTgKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiTGUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgdHJvcCBwZXRpdCBwb3VyIHVuIGpvdXJuYWxcbiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgdGFpbGxlIGRlbWFuZOllIGR1IGpvdXJuYWwgZXN0IGRlICVkIGJsb2NzoDsgZWxsZSBkb2l0IOp0cmVcbiIKKyJlbnRyZSAxMDI0IGV0IDEwMjQwMDAwIGJsb2NzLiBBcnLqdCBpbW3pZGlhdC5cbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgdGFpbGxlIGR1IGpvdXJuYWwgZXN0IHRyb3AgZ3JhbmRlIHBvdXIgbGUgc3lzdOhtZSBkZSBmaWNoaWVycy5cbiIKKworIzogbWlzYy91dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIHNlcmEgYXV0b21hdGlxdWVtZW50IHbpcmlmaekgdG91cyBsZXMgJWQgbW9udGFnZXMgb3VcbiIKKyJhcHLocyAlZyBqb3Vycywgc2Vsb24gbGEgcHJlbWnocmUg6XZlbnR1YWxpdOkuIFV0aWxpc2VyIHR1bmUyZnMgLWMgb3UgLWlcbiIKKyJwb3VyIOljcmFzZXIgbGEgdmFsZXVyLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiVXRpbGlzYXRpb26gOiAlcyBbLWRdIFstcCBmaWNoaWVyLXBpZF0gWy1zIGNoZW1pbi1zb2NrZXRdIFstVCBk6WxhaV1cbiIKKworIzogbWlzYy91dWlkZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIGNoZW1pbi1zb2NrZXRdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTQKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJtYXV2YWlzIGFyZ3VtZW50cyIKKworIzogbWlzYy91dWlkZC5jOjE3MgorbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImNvbm5lY3Rpb24iCisKKyM6IG1pc2MvdXVpZGQuYzoxOTEKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAi6WNyaXR1cmUiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTkKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJub21icmUgZGUgbGVjdHVyZXMiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJsb25ndWV1ciBkZSBy6XBvbnNloGludmFsaWRlIgorCisjOiBtaXNjL3V1aWRkLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgImxlIGTpbW9uIHV1aWRkIGVzdCBk6WrgIGVuIGNvdXJzIGQnZXjpY3V0aW9uIGF2ZWMgcG91ciBwaWQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiTidhIHBhcyBwdSBjcullciBsYSBzb2NrZXQgdW5peCBkZSBmbHV4oDogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTidhIHBhcyBwdSBhdHRhY2hlciBsYSBzb2NrZXQgdW5peCAlc6A6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJOJ2EgcGFzIHB1IOljb3V0ZXIgc3VyIGxhIHNvY2tldCB1bml4ICVzoDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBsZWN0dXJlIGRlcHVpcyBsZSBjbGllbnQsIGxvbmd1ZXVyID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIm9w6XJhdGlvbiAlZCwgbnVtIGVudHJhbnQgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgZGUgdGVtcHMgZ+lu6XLpoDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgYWzpYXRvaXJlIGfpbuly6aA6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiVVVJRCBkZSB0ZW1wcyAlcyBldCAlZCBzdWl2YW50IGfpbuly6XNcbiIKK21zZ3N0clsxXSAiVVVJRCBkZSB0ZW1wcyAlcyBldCAlZCBzdWl2YW50cyBn6W7pculzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiR+lu6XLpICVkIFVVSURzoDpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJPcGVyYXRpb24gJWQgaW52YWxpZGVcbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NiBtaXNjL3V1aWRkLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIk5vbWJyZSBpbnZhbGlkZaA6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzMgbWlzYy91dWlkZC5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ2FwcGVsIGF1IGTpbW9uIHV1aWRkICglcymgOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgZXQgVVVJRCBzdWl2YW50XG4iCittc2dzdHJbMV0gIiVzIGV0ICVkIFVVSURzIHN1aXZhbnRzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIkxpc3RlIGRlcyBVVUlEc6A6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiTG9uZ3VldXIgZGUgculwb25zZSBpbmF0dGVuZHVlIGRlcHVpcyBsZSBzZXJ2ZXVyICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiTidhIHB1IHR1ZXIgbCd1dWlkZCBlbiBjb3VycyBkJ2V46WN1dGlvbiBzb3VzIGxlIHBpZCAlZKA6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIkEgdHXpIGwndXVpZCBlbiBjb3VycyBkJ2V46WN1dGlvbiBzb3VzIGxlIHBpZCAlZFxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uoDogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIFZpZGFuZ2UgZGVzIGV4dGVudHOgOlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHROYj0lbGx1LCBUYWlsbGU9JWxsdSwgQ3Vyc2V1cj0lbGx1LCBUcmnpcz0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb26gOiAlcyBbLWQgZHJhcGVhdXhfZGVfZGVidWddIFstZl0gWy1GXSBbLU1dIFsgLVBdIFstcF0gcOlyaXBo6XJpcXVlXG4iCisiIFtub3V2ZWxsZV90YWlsbGVdXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjUKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJFeHRlbnNpb24gZGUgbGEgdGFibGUgZCdpLW5vZXVkcyIKKworIzogcmVzaXplL21haW4uYzo2OAorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJSZWxvY2FsaXNhdGlvbiBkZSBibG9jcyIKKworIzogcmVzaXplL21haW4uYzo3MQorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJFeGFtZW4gZGUgbGEgdGFibGUgZCdpLW5vZXVkcyIKKworIzogcmVzaXplL21haW4uYzo3NAorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIk1pc2Ug4CBqb3VyIGRlcyBy6WbpcmVuY2VzIGQnaS1ub2V1ZHMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzcKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkTpcGxhY2VtZW50IGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODAKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlBhc3NlIGluY29ubnVloD8hPyEiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJE6WJ1dCBkZSBsYSBwYXNzZSAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkXG4iCisiYXQgeW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlJldGFpbGxlciB1biBzeXN06G1lIGRlIGZpY2hpZXIgYmlnYWxsb2MgbidhIHBhcyDpdOkgY29tcGzodGVtZW50IHRlc3TpLlxuIgorIlByb2PpZGV6IHNlbG9uIHZvdHJlIHByb3ByZSByaXNxdWWgISBVdGlsaXNleiBsJ29wdGlvbiBmb3JjZSBzaSB2b3VzXG4iCisidm91bGV6IGNvbnRpbnVlciBtYWxncukgdG91dC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAibG9ycyBkZSBsJ291dmVydHVyZSBkZSAlcyIKKworIzogcmVzaXplL21haW4uYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSBy6WN1cOlyYXJ0aW9uIGRlIGwn6XRhdCBkZSAlcyIKKworIzogcmVzaXplL21haW4uYzozMzcgcmVzaXplL21haW4uYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTVlAgZXjpY3V0ZXogq6BlMmZzY2sgLWYgJXOguyBkJ2Fib3JkLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iCittc2dzdHIgIlRhaWxsZSBtaW5pbWFsZSBlc3RpbellIGR1IHN5c3TobWUgZGUgZmljaGllcnOgOiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgInRhaWxsZSBkJ2ktbm9ldWQgaW52YWxpZGUgLSAlc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjM5MworbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICJMYSBub3V2ZWxsZSB0YWlsbGUgZXN0IHRyb3AgZ3JhbmRlIHBvdXIg6nRyZSBleHByaW3pZSBzdXIgMzIgYml0c1xuIgorCisjOiByZXNpemUvbWFpbi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTGEgbm91dmVsbGUgdGFpbGxlIGVzdCBwbHVzIHBldGl0ZSBxdWUgbGUgbWluaW11bSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MDcKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIkxvbmd1ZXVyIKugc3RyaWRloLsgaW52YWxpZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aXRpb24gKG91IGxlIHDpcmlwaOlyaXF1ZSkgY29udGVuYW50ZSBuJ2EgcXVlICVsbHUgKCVkaykgYmxvY3MuXG4iCisiVm91cyBhdmV6IGRlbWFuZOkgdW5lIG5vdXZlbGxlIHRhaWxsZSBkZSAlbGx1IGJsb2NzLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1IGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSBk6WrgICVsbHUgYmxvY3MuIFJpZW4g4CBtb2RpZmllcqAhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJFbiB0cmFpbiBkZSByZWRpbWVuc2lvbm5lciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIHN1ciAlcyDgICVsbHUgKCVkaykgYmxvY3MuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgImxvcnMgZGUgbGEgdGVudGF0aXZlIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGRlICVzIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorIlZldWlsbGV6IGxhbmNlciCroGUyZnNjayAtZnkgJXOguyBwb3VyIGNvcnJpZ2VyIGxlIHN5c3TobWUgZGUgZmljaGllcnNcbiIKKyJhcHLocyBsJ29w6XJhdGlvbiBkZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBhdm9ydOllLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMZSBzeXN06G1lIGRlIGZpY2hpZXJzICVzIGEgbWFpbnRlbmFudCB1bmUgdGFpbGxlIGRlICVsbHUgYmxvY3MuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB0cm9uY2F0dXJlIGRlICVzIgorCisjOiByZXNpemUvb25saW5lLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyBvbi1saW5lIHJlc2l6aW5nIHJlcXVpcmVkXG4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgZGUgJXMgZXN0IG1vbnTpIHN1ciAlc6A7IGxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGRvaXQg6nRyZSBlZmZlY3R16SBlbiBsaWduZVxuIgorCisjOiByZXNpemUvb25saW5lLmM6ODMKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJMYSBy6WR1Y3Rpb24gZW4gbGlnbmUgbidlc3QgcGFzIHN1cHBvcnTpZSIKKworIzogcmVzaXplL29ubGluZS5jOjEwOAorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgbmUgc3VwcG9ydGUgcGFzIGxlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVuIGxpZ25lIgorCisjOiByZXNpemUvb25saW5lLmM6MTE3Cittc2dpZCAiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIKK21zZ3N0ciAiUGFzIGFzc2V6IGRlIGJsb2NzIGdkdCBy6XNlcnbpcyBwb3VyIHVuIGNoYW5nZW1lbnQgZGUgdGFpbGxlIgorCisjOiByZXNpemUvb25saW5lLmM6MTI0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICJMZSBub3lhdSBuZSBzYWl0IHBhcyByZXRhaWxsZXIgdW4gc3lzdOhtZSBkZSBmaWNoaWVycyBkJ3VuZSB0ZWxsZSB0YWlsbGUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAibG9ycyBkZSBsYSB0ZW50YXRpdmUgZCdvdXZlcnR1cmUgZHUgcG9pbnQgZGUgbW9udGFnZSAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIlV0aWxpc2F0aW9uIGRlIGwnYW5jaWVubmUgaW50ZXJmYWNlIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTU2IHJlc2l6ZS9vbmxpbmUuYzoxNzMKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiUGVybWlzc2lvbiBkZSByZWRpbWVuc2lvbm5lciBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIHJlZnVz6WUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTkgcmVzaXplL29ubGluZS5jOjE3OQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIkxvcnMgZGUgbGEgdulyaWZpY2F0aW9uIGR1IHN1cHBvcnQgZGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNzYKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkxlIG5veWF1IG5lIHN1cHBvcnRlIHBhcyBsZSBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlbiBsaWduZSIKKworIzogcmVzaXplL29ubGluZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJFbiB0cmFpbiBkJ2VmZmVjdHVlciB1biBjaGFuZ2VtZW50IGRlIHRhaWxsZSBlbiBsaWduZSBkZSAlcyB2ZXJzICVsbHUgKCVkaykgYmxvY3MuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJMb3JzIGRlIGxhIHRlbnRhdGl2ZSBkJ+l0ZW5kcmUgbGUgZGVybmllciBncm91cGUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIkxvcnMgZGUgbGEgdGVudGF0aXZlIGQnYWpvdXQgZHUgZ3JvdXBlIG51belybyAlZCIKKworIzogcmVzaXplL29ubGluZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgZGUgJXMgZXN0IG1vbnTpIHN1ciAlcywgZXQgbGUgY2hhbmdlbWVudCBkZSB0YWlsbGUgZW4gbGlnbmUgbidlc3QgcGFzIHN1cHBvcnTpIHN1ciBjZSBzeXN06G1lLlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgImxlIG5vbWJyZSBkJ2ktbm9ldWRzICglbGx1KSBkb2l0IOp0cmUgcGx1cyBwZXRpdCBxdWUgJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2MzEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgImJsb2NzIHLpc2VydulzIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6ODc1Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiYmxvY3MgZGUgbel0YWRvbm7pZXMiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJOZSBkZXZyYWl0IGphbWFpcyBzZSBwcm9kdWlyZaA6IGktbm9ldWQgZGUgcmVkaW1lbnNpb25uZW1lbnQgY29ycm9tcHWgIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuOCIKK21zZ3N0ciAiTGlicmFpcmllIEVYVDJGUyB2ZXJzaW9uIDEuNDIuOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGV4dDJfZmlsc3lzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBiYWRibG9ja3NfaXRlcmF0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaW5vZGVfc2NhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBpb19jaGFubmVsIHVuaXgiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlvX21hbmFnZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGdlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGlvX2NoYW5uZWwgZGUgdGVzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGRlIGxpc3RlIGRlIGJsb2MgZGUgculwZXJ0b2lyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBpY291bnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsYSBzdHJ1Y3R1cmUgUG93ZXJxdWVzdCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGEgc3RydWN0dXJlIGRlIGZpY2hpZXIgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsJ2VuLXTqdGUgZCdpbWFnZSBFeHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxhIHN0cnVjdHVyZSBpb19jaGFubmVsIGQnaS1ub2V1ZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGUgaGFuZGxlIGQnZXh0ZW50IGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIGRhbnMgbGUgc3VwZXItYmxvYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiUul2aXNpb24gZGUgc3lzdOhtZSBkZSBmaWNoaWVyIHRyb3AgZ3JhbmRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiVGVudGF0aXZlIGQn6WNyaXR1cmUgZGFucyB1biBzeXN06G1lIGRlIGZpY2hpZXJzIG91dmVydCBlbiBsZWN0dXJlIHNldWxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzMKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICJOZSBwZXV0IGxpcmUgbGVzIGRlc2NyaXB0ZXVycyBkZSBncm91cGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiTmUgcGV1dCDpY3JpcmUgbGVzIGRlc2NyaXB0ZXVycyBkZSBncm91cGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICJEZXNjcmlwdGV1ciBkZSBncm91cGUgY29ycm9tcHWgOiBibG9jIGludmFsaWRlIHBvdXIgbGUgYml0bWFwIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJEZXNjcmlwdGV1ciBkZSBncm91cGUgY29ycm9tcHWgOiBibG9jIGludmFsaWRlIHBvdXIgbGUgYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRGVzY3JpcHRldXIgZGUgZ3JvdXBlIGNvcnJvbXB1oDogYmxvYyBpbnZhbGlkZSBwb3VyIGxhIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiTmUgcGV1dCDpY3JpcmUgdW4gYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJOZSBwZXV0IGxpcmUgdW4gYml0bWFwIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTmUgcGV1dCDpY3JpcmUgdW4gYml0bWFwIGRlIGJsb2NzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGFuIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTmUgcGV1dCBsaXJlIHVuIGJpdG1hcCBkZSBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5lIHBldXQg6WNyaXJlIHVuZSB0YWJsZSBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJOZSBwZXV0IGxpcmUgdW5lIHRhYmxlIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiTmUgcGV1dCBsaXJlIGwnaS1ub2V1ZCBzdWl2YW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUgdGFpbGxlIGRlIGJsb2MgaW5hdHRlbmR1ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJS6XBlcnRvaXJlIEVYVDIgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiTGEgdGVudGF0aXZlIGRlIGxlY3R1cmUgZCd1biBibG9jIGRlcHVpcyBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgcHJvZHVpdCB1bmUgbGVjdHVyZSB0cm9ucXXpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJMYSB0ZW50YXRpdmUgZCfpY3JpdHVyZSBkJ3VuIGJsb2NrIHZlcnMgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBhIHByb2R1aXQgdW5lIOljcml0dXJlIHRyb25xdellIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIlBhcyBkZSBwbGFjZSBsaWJyZSBkYW5zIGxlIHLpcGVydG9pcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJCaXRtYXAgZCdpLW5vZXVkcyBub24gY2hhcmfpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQml0bWFwIGRlIGJsb2NzIG5vbiBjaGFyZ+kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJOdW3pcm8gZCdpLW5vZXVkIGlsbOlnYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOdW3pcm8gZGUgYmxvYyBpbGzpZ2FsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiRXJyZXVyIGludGVybmUgZGFucyBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJQYXMgYXNzZXogZCdlc3BhY2UgcG91ciBjb25zdHJ1aXJlIGxlIHN5c3TobWUgZGUgZmljaGllcnMgcHJvcG9z6SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2NzIGlsbOlnYWwgcGFzc+kg4CBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIk51belybyBkZSBibG9jcyBpbGzpZ2FsIHBhc3PpIOAgZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjIKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBibG9jayBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlRlbnRhdGl2ZSBkZSB0cnVxdWFnZSBkZSBsYSBmaW4gZHUgYml0bWFwIGRlIGJsb2NzIGF1LWRlbOAgZGUgbGEgZmluIHLpZWxsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJUZW50YXRpdmUgZGUgdHJ1cXVhZ2UgZGUgbGEgZmluIGR1IGJpdG1hcCBkJ2ktbm9ldWRzIGF1LWRlbOAgZGUgbGEgZmluIHLpZWxsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiQmxvYyBpbmRpcmVjdCBpbGzpZ2FsIHJlcOly6SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkJsb2MgZG91YmxlbWVudCBpbmRpcmVjdCBpbGzpZ2FsIHJlcOly6SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIkJsb2MgdHJpcGxlbWVudCBpbmRpcmVjdCBpbGzpZ2FsIHJlcOly6SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJMZXMgYml0bWFwcyBkZSBibG9jcyBuZSBzb250IHBhcyBsZXMgbeptZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiTGVzIGJpdG1hcHMgZCdpLW5vZXVkcyBuZSBzb250IHBhcyBsZXMgbeptZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICJOb20gZGUgcOlyaXBo6XJpcXVlIGlsbOlnYWwgb3UgbWFsIGZvcm3pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIklsIG1hbnF1ZSB1bmUgdGFibGUgZCdpLW5vZXVkcyDgIHVuIGdyb3VwZSBkZSBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICJMZSBzdXBlcmJsb2MgZXh0MiBlc3QgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJpdCBn6W7pcmlxdWUgaWxs6WdhbCBwYXNz6SDgIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJpdCBn6W7pcmlxdWUgaWxs6WdhbCBwYXNz6SDgIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTnVt6XJvIGRlIGJpdCBn6W7pcmlxdWUgaWxs6WdhbCBwYXNz6SDgIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlRyb3AgZGUgbGllbnMgc3ltYm9saXF1ZXMgcmVuY29udHLpcy4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICJMYSBmb25jdGlvbiBkZSByYXBwZWwgbmUgdHJhaXRlcmEgcGFzIGNlIGNhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJMJ2ktbm9ldWQgcHJvdmllbnQgZCd1biBibG9jIGTpZmVjdHVldXggZGFucyBsYSB0YWJsZSBkJ2ktbm9ldWRzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXJzIGEgdW5lKGRlcykgZm9uY3Rpb25uYWxpdOkocykgbm9uIHN1cHBvcnTpZShzKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkxlIHN5c3TobWUgZGUgZmljaGllcnMgYSB1bmUoZGVzKSBmb25jdGlvbm5hbGl06ShzKSBlbiBsZWN0dXJlIHNldWxlIG5vbiBzdXBwb3J06WVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIkxlIGNhbmFsIGQnRS9TIG4nYSBwYXMgcHUgc2UgZOlwbGFjZXIgc3VyIHVuZSBsZWN0dXJlIG91IOljcml0dXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIsljaGVjIGQnYWxsb2NhdGlvbiBt6W1vaXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIkFyZ3VtZW50IGludmFsaWRlIHBhc3PpIOAgbGEgYmlibGlvdGjocXVlIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIk4nYSBwdSBhbGxvdWVyIGRlIGJsb2MgZGFucyBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIk4nYSBwdSBhbGxvdWVyIGQnaS1ub2V1ZCBkYW5zIGxlIHN5c3TobWUgZGUgZmljaGllcnMgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkwnaS1ub2V1ZCBleHQyIG4nZXN0IHBhcyB1biBy6XBlcnRvaXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJUcm9wIGRlIHLpZulyZW5jZXMgZGFucyBsYSB0YWJsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIkZpY2hpZXIgbm9uIHRyb3V26SBwYXIgZXh0Ml9sb29rdXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIkZpY2hpZXIgb3V2ZXJ0IGVuIGxlY3R1cmUgc2V1bGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiQmxvYyBkZSBy6XBlcnRvaXJlIGQnZXh0MiBub24gdHJvdXbpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGUgculwZXJ0b2lyZSBleHQyIGV4aXN0ZSBk6WrgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiRnVuY3Rpb24gZGUgYmlibGlvdGjocXVlIGV4dDIgbm9uIGltcGzpbWVudOllIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIlJlcXXqdGUgZCdhbm51bGF0aW9uIHV0aWxpc2F0ZXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRmljaGllciBleHQyIHRyb3AgZ3JhbmQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorbXNnaWQgIlN1cHBsaWVkIGpvdXJuYWwgZGV2aWNlIG5vdCBhIGJsb2NrIGRldmljZSIKK21zZ3N0ciAiTGUgcOlyaXBo6XJpcXVlIGRlIGpvdXJuYWwgZm91cm5pIG4nZXN0IHBhcyB1biBw6XJpcGjpcmlxdWUgZGUgYmxvYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiTGUgc3VwZXJibG9jIGRlIGpvdXJuYWwgbm9uIHRyb3V26SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICJMZSBqb3VybmFsIGRvaXQgYXZvaXIgYXUgbW9pbnMgMTAyNCBibG9jcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICJWZXJzaW9uIGRlIGpvdXJuYWwgbm9uIHN1cHBvcnTpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsJ291dmVydHVyZSBkdSBqb3VybmFsIGV4dGVybmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJKb3VybmFsIG5vbiB0cm91dukiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiSGFjaGFnZSBkZSBy6XBlcnRvaXJlIG5vbiBzdXBwb3J06SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTnVt6XJvIGRlIGJsb2MgZCdhdHRyaWJ1dCDpdGVuZHUgaWxs6WdhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICJOZSBwZXV0IGNy6WVyIGxlIHN5c3TobWUgZGUgZmljaGllcnMgYXZlYyBsZSBub21icmUgcmVxdWlzIGQnaS1ub2V1ZHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIkwnaW5zdGFudGFu6SBFMmltYWdlIG4nZXN0IHBhcyBlbiBjb3VycyBkJ3V0aWxpc2F0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIlRyb3AgZGUgYmxvY3MgZGUgZGVzY3JpcHRldXJzIGRlIGdyb3VwZXMgculzZXJ26XMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiTCdpLW5vZXVkIGRlIGNoYW5nZW1lbnQgZGUgdGFpbGxlIGVzdCBjb3Jyb21wdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiQSBlc3NheekgZGUgZOlmaW5pciBsZSBiaXRtYXAgZGUgYmxvY3MgYXZlYyB1biBibG9jIGluZGlyZWN0IG1hbnF1YW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREKgOiBTdWNj6HMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIlREQqA6IEJhc2UgZGUgZG9ubullcyBjb3Jyb21wdWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICJUREKgOiBFcnJldXIgRS9TIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREKgOiBFcnJldXIgZGUgdmVycm91aWxsYWdlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREKgOiBE6XBhc3NlbWVudCBt6W1vaXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREKgOiBMJ2VucmVnaXN0cmVtZW50IGV4aXN0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCoDogbGUgdmVycm91IGV4aXN0ZSBzdXIgZCdhdXRyZXMgY2zpcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQqA6IHBhcmFt6HRyZSBpbnZhbGlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUREKgOiBMJ2VucmVnaXN0cmVtZW50IG4nZXhpc3RlIHBhcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCoDogyWNyaXR1cmUgbm9uIHBlcm1pc2UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkxhIGxpc3RlIGRlIGJsb2NzIGRlIHLpcGVydG9pcmVzIGV4dDJmcyBlc3QgdmlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIlRlbnRhdGl2ZSBkZSBtb2RpZmljYXRpb24gZCd1biBwbGFuIGRlIGJsb2NzIHZpYSB1biBpdOlyYXRldXIgZGUgYmxvY3MgZW4gbGVjdHVyZSBzZXVsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgc2F2ZWQgcGF0aCIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgcG91ciBsZSBjaGVtaW4gZCdleHRlbnQgZXh0NCBzYXV26SIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxlIGJpdG1hcCBn6W7pcmlxdWUgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSBwb3VyIGxlIGJpdG1hcCBkZSBibG9jcyA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIHBvdXIgbGUgYml0bWFwIGQnaS1ub2V1ZHMgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSAtLS0gUslTRVJWyV8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIC0tLSBSyVNFUlbJXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJOdW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSAtLS0gUslTRVJWyV8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIk51belybyBtYWdpcXVlIGludmFsaWRlIC0tLSBSyVNFUlbJXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiTnVt6XJvIG1hZ2lxdWUgaW52YWxpZGUgLS0tIFLJU0VSVslfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIkVuLXTqdGUgZCdleHRlbnQgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiSW5kZXggZCdleHRlbnQgY29ycm9tcHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiRXh0ZW50IGNvcnJvbXB1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJQYXMgZGUgcGxhY2UgbGlicmUgZGFucyBsYSBjYXJ0ZSBkJ2V4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJMJ2ktbm9ldWQgbid1dGlsaXNlIHBhcyBkJ2V4dGVudHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICJQYXMgZCdleHRlbnQgJ25leHQnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIlBhcyBkJ2V4dGVudCAncHJldmlvdXMnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIlBhcyBkJ2V4dGVudCAndXAnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiUGFzIGQnZXh0ZW50ICdkb3duJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiUGFzIGRlIG5vZXVkIGNvdXJhbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk9w6XJhdGlvbiBleHQyZnMgbm9uIHN1cHBvcnTpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJQYXMgZGUgcGxhY2UgcG91ciBpbnPpcmVyIGwnZXh0ZW50IGRhbnMgbGUgbm9ldWQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIkTpY291cGVyIHByb2R1aXJhaXQgdW4gbm9ldWQgdmlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIkV4dGVudCBub24gdHJvdXbpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIk9w6XJhdGlvbiBub24gc3VwcG9ydOllIHBvdXIgbGVzIGktbm9ldWRzIGNvbnRlbmFudCBkZXMgZXh0ZW50cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiTGEgbG9uZ3VldXIgZCdleHRlbnQgZXN0IGludmFsaWRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiTGUgY2FuYWwgZCdFL1MgbmUgc3VwcG9ydGUgcGFzIGxlcyBudW3pcm9zIGRlIGJsb2MgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgdulyaWZpZXIgc2kgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBlc3QgbW9udOkg4CBjYXVzZSBkdSBtYW5xdWUgZGUgZmljaGllciBtdGFiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICJMZSBzeXN06G1lIGRlIGZpY2hpZXIgZXN0IHRyb3AgZ3JhbmQgcG91ciB1dGlsaXNlciBsJ2FuY2llbiBzdHlsZSBkZSBiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVCgOiBudW3pcm8gbWFnaXF1ZSBpbnZhbGlkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUKA6IHDpcmlwaOlyaXF1ZSBhY3R1ZWxsZW1lbnQgYWN0aWYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVCgOiBmc2NrIGVuIGNvdXJzIGQnZXjpY3V0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUKA6IG51belybyBkZSBibG9jIGVuLWRlaG9ycyBkZSBsYSBwb3J06WUgZHUgc3lzdOhtZSBkZSBmaWNoaWVycyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiTU1QoDogZW4gY291cnMgZCdvcOlyYXRpb24gaW5jb25udWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICJNTVCgOiBzeXN06G1lIGRlIGZpY2hpZXJzIGVuIGNvdXJzIGQndXRpbGlzYXRpb24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUKA6IGwnb3V2ZXJ0dXJlIGF2ZWMgT19ESVJFQ1QgYSDpY2hvdekiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTYKK21zZ2lkICJCbG9jayBncm91cCBkZXNjcmlwdG9yIHNpemUgaW5jb3JyZWN0IgorbXNnc3RyICJUYWlsbGUgZHUgZGVzY3JpcHRldXIgZGUgZ3JvdXBlIGRlIGJsb2NzIGluY29ycmVjdGUuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGRlIGwnaS1ub2V1ZCBuZSBjb3JyZXNwb25kIHBhcyDgIGwnaS1ub2V1ZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IGJpdG1hcCBkJ2ktbm9ldWQgbmUgY29ycmVzcG9uZCBwYXMgYXUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiTGEgc29tbWUgZGUgY29udHL0bGUgZHUgYmxvY2sgZCdleHRlbnQgbmUgY29ycmVzcG9uZCBwYXMgYXUgYmxvYyBkJ2V4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiTGUgYmxvYyBkZSBy6XBlcnRvaXJlIG4nYSBwYXMgZGUgcGxhY2UgcG91ciBsYSBzb21tZSBkZSBjb250cvRsZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IGJsb2MgZGUgculwZXJ0b2lyZSBuZSBjb3JyZXNwb25kIHBhcyBhdSBibG9jIGRlIHLpcGVydG9pcmUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIkxhIHNvbW1lIGRlIGNvbnRy9GxlIGR1IGJsb2MgZCdhdHRyaWJ1dCDpdGVuZHUgbmUgY29ycmVzcG9uZCBwYXMgYXUgYmxvYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MworbXNnaWQgIlN1cGVyYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggc3VwZXJibG9jayIKK21zZ3N0ciAiTGEgc29tbWUgZGUgY29udHL0bGUgZHUgc3VwZXJibG9jIG5lIGNvcnJlc3BvbmQgcGFzIGF1IHN1cGVyYmxvYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NAorbXNnaWQgIlVua25vd24gY2hlY2tzdW0gYWxnb3JpdGhtIgorbXNnc3RyICJBbGdvcml0aG1lIGRlIHNvbW1lIGRlIGNvbnRy9GxlIGluY29ubnUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJMYSBzb21tZSBkZSBjb250cvRsZSBkdSBibG9jIE1NUCBuZSBjb3JyZXNwb25kIHBhcyBhdSBibG9jIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGUgZmljaGllciBleHQyIGV4aXN0ZSBk6WrgIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIlByb2ZpbGFnZSB2ZXJzaW9uIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJWYWxldXIgbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIHByb2ZpbGVfbm9kZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJTZWN0aW9uIGRlIHByb2ZpbGFnZSBub24gdHJvdXbpZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKK21zZ2lkICJQcm9maWxlIHJlbGF0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUmVsYXRpb24gZGUgcHJvZmlsYWdlIG5vbiB0cm91dullIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICJUZW50YXRpdmUgZCdham91dCBkJ3VuZSByZWxhdGlvbiDgIHVuIG5vZXVkIHF1aSBuJ2VzdCBwYXMgdW5lIHNlY3Rpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICJVbiBlbi106nRlIGRlIHNlY3Rpb24gZGUgcHJvZmlsYWdlIGEgdW4gdmFsZXVyIG5vbiBudWxsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJMaXN0ZSBjaGHubullIGludmFsaWRlIGRhbnMgbGVzIHN0cnVjdHVyZXMgZGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk5pdmVhdSBkZSBncm91cGUgaW52YWxpZGUgZGFucyBsZXMgc3RydWN0dXJlcyBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiUG9pbnRldXIgcGFyZW50IGludmFsaWRlIGRhbnMgbGVzIHN0cnVjdHVyZXMgZGUgcHJvZmlsYWdlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJWYWxldXIgbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIGwnaXRlcmF0ZXVyIGRlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICJOZSBwZXV0IGTpZmluaXJlIGxhIHZhbGV1ciBzdXIgdW4gbm9ldWQgZGUgc2VjdGlvbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIkFyZ3VtZW50IGludmFsaWRlIHBhc3PpIOAgbGEgYmlibGlvdGjocXVlIGRlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiVGVudGF0aXZlIGRlIG1vZGlmaWVyIHVuIHByb2ZpbGFnZSBlbiBsZWN0dXJlIHNldWxlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiTCdlbi106nRlIGRlIHNlY3Rpb24gZGUgcHJvZmlsYWdlIG4nZXN0IHBhcyBuaXZlYXUgc29tbWV0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJFcnJldXIgZGUgc3ludGF4ZSBkYW5zIGwnZW4tdOp0ZSBkZSBzZWN0aW9uIGRlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiRXJyZXVyIGRlIHN5bnRheGUgZGFucyBsYSByZWxhdGlvbiBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJBY2NvbGFkZSBmZXJtYW50ZSBzdXBlcmZsdWUgZGFucyBsZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkFjY29sYWRlIG91dnJhbnRlIG1hbnF1YW50ZSBkYW5zIGxlIHByb2ZpbGFnZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICJWYWxldXIgbWFnaXF1ZSBpbnZhbGlkZSBkYW5zIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIlZhbGV1ciBtYWdpcXVlIGludmFsaWRlIGRhbnMgcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkl06XJhdGlvbiBzdXIgdG91dGVzIGxlcyBzZWN0aW9ucyBkZSBuaXZlYXUgc29tbWV0IG5vbiBzdXBwb3J06WUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJPYmplY3QgcHJvZmlsZV9zZWN0aW9uIGludmFsaWRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIlBsdXMgZGUgc2VjdGlvbnMiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkVuc2VtYmxlIGRlIG5vbSBpbnZhbGlkZSBwYXNz6SDgIGxhIHJvdXRpbmUgZGUgcmVxdep0ZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiUGFzIGRlIGZpY2hpZXIgZGUgcHJvZmlsYWdlIG91dmVydCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIlZhbGV1ciBtYWdpcXVlIGludmFsaWRlIGRhbnMgcHJvZmlsZV9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIk4nYSBwdSBvdXZyaXIgbGUgZmljaGllciBkZSBwcm9maWxhZ2UiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGEgc2VjdGlvbiBleGlzdGUgZOlq4CIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIlZhbGV1ciBib29s6WVubmUgaW52YWxpZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJWYWxldXIgZW50aehyZSBpbnZhbGlkZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiVmFsZXVyIG1hZ2lxdWUgaW52YWxpZGUgZGFucyBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKKyN+IG1zZ3N0ciAiTGEgc3VwcHJlc3Npb24gZHUgZHJhcGVhdSBleHRlbnQgbidlc3QgcGFzIHN1cHBvcnTpZSBzdXIgJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzoDogTGEgY29tYmluYWlzb24gZGVzIGZvbmN0aW9ubmFsaXTpc1xuIgorI34gIlx0ZmxleF9iZyBldCAhcmVzaXplX2lub2RlIG4nZXN0IHBhcyBzdXBwb3J06WUgcGFyIHJlc2l6ZTJmcy5cbiIKKworI34gbXNnaWQgIiVzIGlzIG1vdW50ZWQuICAiCisjfiBtc2dzdHIgIiVzIGVzdCBtb2506S4gIgorCisjfiBtc2dpZCAiQGcgJWcgQGIgQEIgdW5pbml0aWFsaXplZCBidXQgQGkgQEIgaW4gdXNlLlxuIgorI34gbXNnc3RyICIiCisjfiAiTGUgQEIgZGUgQGIgZHUgQGcgJWcgbidlc3QgcGFzIGluaXRpYWxpc+lcbiIKKyN+ICJhbG9ycyBxdWUgbGUgQEIgZCdAaSBlc3QgZW4gY291cnMgZCd1dGlsaXNhdGlvbi5cbiIKKworI34gbXNnaWQgIkBpICVpIHNob3VsZCBub3QgaGF2ZSBFT0ZCTE9DS1NfRkwgc2V0IChzaXplICVJcywgbGJsayAlcilcbiIKKyN+IG1zZ3N0ciAiTCdAaSAlaSBuZSBkZXZyYWl0IHBhcyBhdm9pciBFT0ZCTE9DS1NfRkwgZOlmaW5pICh0YWlsbGUgJUlzLCBsYmxrICVyKVxuIgorCisjfiBtc2dpZCAiQ291bGRuJ3QgZGV0ZXJtaW5lIGpvdXJuYWwgc2l6ZSIKKyN+IG1zZ3N0ciAiTidhIHB1IGTpdGVybWluZXIgbGEgdGFpbGxlIGR1IGpvdXJuYWwiCisKKyN+IG1zZ2lkICIjXHRcdCAlbGx1IC0+ICVsbHUgKCVsbHUpXG4iCisjfiBtc2dzdHIgIiNcdFx0ICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIKKworI34gbXNnaWQgIk1pc3NpbmcgaW5kaXJlY3QgYmxvY2sgbm90IHByZXNlbnQiCisjfiBtc2dzdHIgIkJsb2MgaW5kaXJlY3QgbWFucXVhbnQiCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxMJ2ktbm9ldWQgZCdpbmRleCBBQ0w+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxMJ2ktbm9ldWQgZGVzIGRvbm7pZXMgQUNMPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgIuljcml0dXJlIOljb3VydOllIChzZXVsZW1lbnQgJWQgb2N0ZXRzKSBwb3VyIGwn6WNyaXR1cmUgZGUgbCdlbi106nRlIGltYWdlIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgInRhaWxsZSBkZSBmcmFnbWVudCBpbnZhbGlkZSAtICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiQXZlcnRpc3NlbWVudKA6IGZyYWdtZW50cyBub24gc3VwcG9ydOlzLiBMJ29wdGlvbiAtZiBlc3QgaWdub3LpZVxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiQXBwZWwgZGUgQkxLRElTQ0FSRCBkZSAlbGx1IOAgJWxsdSAiCisKKyN+IG1zZ2lkICJzdWNjZWVkZWQuXG4iCisjfiBtc2dzdHIgImF2ZWMgc3VjY+hzLlxuIgorCisjfiBtc2dpZCAiSm91cm5hbCBOT1QgcmVtb3ZlZFxuIgorI34gbXNnc3RyICJMZSBqb3VybmFsIE4nQSBQQVMg6XTpIGVubGV26VxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIkxlIEBTIG5lIHNlbWJsZSBwYXMgYXZvaXIgbGUgZHJhcGVhdSBoYXNfam91cm5hbCwgbWFpcyBhIHVuICVzIGRlIEBqIGV4dDMuXG4iCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSBkZWxldGluZyBleHRlbnQ6ICVtXG4iCisjfiBtc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGRlIGwnZXh0ZW50oDogJW1cbiIKKworI34gbXNnaWQgIlJlY3JlYXRlIGpvdXJuYWwgdG8gbWFrZSB0aGUgZmlsZXN5c3RlbSBleHQzIGFnYWluP1xuIgorI34gbXNnc3RyICJSZWNy6WVyIGxlIGpvdXJuYWwgcG91ciByZW5kcmUgbGUgc3lzdOhtZSBkZSBmaWNoaWVycyBleHQzIGRlIG5vdXZlYXWgP1xuIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAidGFpbGxlIGRlcyBibG9jcyBk6WZlY3R1ZXV4IC0gJXMiCisKKyN+IG1zZ2lkICJ3aGlsZSByZXRyeWluZyB0byB3cml0ZSBibG9jayBiaXRtYXBzIGZvciAlcyIKKyN+IG1zZ3N0ciAibG9ycyBkJ3VuZSBub3V2ZWxsZSB0ZW50YXRpdmUgZCfpY3JpdHVyZSBkZXMgYml0bWFwcyBkZSBibG9jcyBwb3VyICVzIgorCisjfiBtc2dpZCAiJXMgZmFpbGVkIGZvciAlczogJXNcbiIKKyN+IG1zZ3N0ciAiJXMgYSDpY2hvdekgcG91ciAlc6A6ICVzXG4iCisKKyN+IG1zZ2lkICJvcGVuIgorI34gbXNnc3RyICJvcGVuIgorCisjfiBtc2dpZCAiSERJT19HRVRHRU8gaW9jdGwiCisjfiBtc2dzdHIgIkhESU9fR0VUR0VPIGlvY3RsIgorCisjfiBtc2dpZCAiQkxLR0VUU0laRSBpb2N0bCIKKyN+IG1zZ3N0ciAiQkxLR0VUU0laRSBpb2N0bCIKKworI34gbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorI34gbXNnc3RyICJsJ0BhIGRhbnMgbCdAaSAlaSBhIHVuIGhhc2ggKCVOKSBxdWkgZXN0IEBuIChkb2l0IOp0cmUgMClcbiIKKworI34gbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUiCisjfiBtc2dzdHIgImxvcnMgZGUgbCdhcHBlbCBkZSBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKworI34gbXNnaWQgIndoaWxlIGNhbGxpbmcgaXRlcmF0b3IgZnVuY3Rpb24iCisjfiBtc2dzdHIgImxvcnMgZGUgbCdhcHBlbCBkZSBsYSBmb25jdGlvbiBpdOlyYXRpb24iCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAibG9ycyBkZSBsJ2FsbG9jYXRpb24gZCd1biB0YW1wb24gZCdpLW5vZXVkIgorCisjfiBtc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJsb3JzIGRlIGxhIGxlY3R1cmUgZGUgbGEgdGFibGUgZCdpLW5vZXVkcyAoZ3JvdXBlICVkKSIKKworI34gbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAibG9ycyBkZSBsJ+ljcml0dXJlIGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMgKGdyb3VwZSAlZCkiCisKKyN+IG1zZ2lkICJQYXNzIDA6IERvaW5nIGJ5dGUtc3dhcCBvZiBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIlBhc3NlIDCgOiB0cmFpdGVtZW50IGRlIGwn6WNoYW5nZSBvY3RldCBwYXIgb2N0ZXQgZHUgc3lzdOhtZSBkZSBmaWNoaWVyc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiB0aGUgZmlsZXN5c3RlbSBtdXN0IGJlIGZyZXNobHkgY2hlY2tlZCB1c2luZyBmc2NrXG4iCisjfiAiYW5kIG5vdCBtb3VudGVkIGJlZm9yZSB0cnlpbmcgdG8gYnl0ZS1zd2FwIGl0LlxuIgorI34gbXNnc3RyICIiCisjfiAiJXOgOiBsZSBzeXN06G1lIGRlIGZpY2hpZXJzIGRvaXQgYXZvaXIg6XTpIHLpY2VtbWVudCB26XJpZmnpIGVuIHV0aWxpc2FudFxuIgorI34gImZzY2sgZXQgbmUgZG9pdCBwYXMgYXZvaXIg6XTpIG1vbnTpIGF2YW50IGQnZXNzYXllciB1biDpY2hhbmdlIHBhciBvY3RldCBkZVxuIgorI34gImNlbHVpLWNpLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICLJY2hhbmdlIGQnb2N0ZXRzIgorCisjfiBtc2dpZCAiQnl0ZS1zd2FwcGluZyBmaWxlc3lzdGVtcyBub3QgY29tcGlsZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIGUyZnNja1xuIgorI34gbXNnc3RyICIiCisjfiAiTGVzIHN5c3TobWVzIGRlIGZpY2hpZXJzIGF2ZWMg6WNoYW5nZSBkJ29jdGV0cyBuZSBzb250IHBhcyBjb21waWzpcyBwb3VyXG4iCisjfiAiY2V0dGUgdmVyc2lvbiBkJ2UyZnNja1xuIgorCisjfiBtc2dpZCAiSW5jb21wYXRpYmxlIG9wdGlvbnMgbm90IGFsbG93ZWQgd2hlbiBieXRlLXN3YXBwaW5nLlxuIgorI34gbXNnc3RyICJMZXMgb3B0aW9ucyBpbmNvbXBhdGlibGVzIG5lIHNvbnQgcGFzIGF1dG9yaXPpZXMgbG9ycyBkZSBsJ+ljaGFuZ2VzIGQnb2N0ZXRzLlxuIgorCisjfiBtc2dpZCAiJXM6IEZpbGVzeXN0ZW0gYnl0ZSBvcmRlciBhbHJlYWR5IG5vcm1hbGl6ZWQuXG4iCisjfiBtc2dzdHIgIiVzoDogbCdvcmRyZSBkZXMgb2N0ZXRzIGR1IHN5c3TobWUgZGUgZmljaGllcnMgYSBk6WrgIOl06SBub3JtYWxpc+kuXG4iCisKKyN+IG1zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrIC0gJXMiCisjfiBtc2dzdHIgImJsb2MgZGUgZOlwYXJ0IGludmFsaWRlIC0gJXMiCisKKyN+IG1zZ2lkICJOb3RlOiBUaGlzIGlzIGEgYnl0ZS1zd2FwcGVkIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiTm90ZaA6IGNlIHN5c3TobWUgZGUgZmljaGllcnMgZXN0IOAg6WNoYW5nZSBkJ29jdGV0c1xuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGVzeXN0ZW0gdG9vIGxhcmdlLiAgTm8gbW9yZSB0aGFuIDIqKjMxLTEgYmxvY2tzXG4iCisjfiAiXHQgKDhUQiB1c2luZyBhIGJsb2Nrc2l6ZSBvZiA0aykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICIiCisjfiAiU3lzdOhtZSBkZSBmaWNoaWVycyB0cm9wIGdyYW5kLiBQYXMgcGx1cyBkZSAyXjMxLTEgYmxvY3MgKDhUTyBwb3VyXG4iCisjfiAiXHQgdW5lIHRhaWxsZSBkZSBibG9jcyBkZSA0SykgbmUgc29udCBhY3R1ZWxsZW1lbnQgc3VwcG9ydOlzLiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJXYXJuaW5nOiBzb21lIDIuNCBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGJsb2Nrc2l6ZXMgZ3JlYXRlciB0aGFuIDQwOTZcbiIKKyN+ICJcdHVzaW5nIGV4dDMuICBVc2UgLWIgNDA5NiBpZiB0aGlzIGlzIGFuIGlzc3VlIGZvciB5b3UuXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJBdmVydGlzc2VtZW50oDogY2VydGFpbnMgbm95YXV4IDIuNCBuZSB0b2zocmVudCBwYXMgbGVzIHRhaWxsZXMgZGUgYmxvY3NcbiIKKyN+ICJcdHN1cOlyaWV1cmVzIOAgNDA5NiBhdmVjIGV4dDMuIFV0aWxpc2V6IC1iIDQwOTYgc2kgY2VsYSB2b3VzXG4iCisjfiAiXHRwb3NlIHByb2Js6G1lLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiV2FybmluZzogJWQtYnl0ZSBpbm9kZXMgbm90IHVzYWJsZSBvbiBvbGRlciBzeXN0ZW1zXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdmVydGlzc2VtZW50oDogbGVzIGktbm9ldWRzIGRlICVkIG9jdGV0cyBuZSBzb250IHBhcyB1dGlsaXNhYmxlcyBzdXIgbGVzXG4iCisjfiAiYW5jaWVucyBzeXN06G1lc1xuIgorCisjfiBtc2dpZCAiaW52YWxpZCBibG9ja3MgcmFuZ2U6ICVsdS0lbHUiCisjfiBtc2dzdHIgIul0ZW5kdWUgaW52YWxpZGUgZGVzIGJsb2NzoDogJWx1LSAlbHUiCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzIGRpc2FibGVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiTGVzIHN1cGVyYmxvY3MgY3JldXggc29udCBk6WrgIGTpc2FjdGl26XMgc3VyIGxlIHN5c3TobWUgZGUgZmljaGllcnMuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBjbGVhcmVkLiAgJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJEcmFwZWF1IGRlIHN1cGVyYmxvYyBjcmV1eCBk6XNhY3RpdukuICVzIgorCisjfiBtc2dpZCAiQ2xvbmUgZHVwbGljYXRlL2JhZCBibG9ja3MiCisjfiBtc2dzdHIgIkNsb25lciBsZXMgYmxvY3MgZHVwbGljYXRhcy9k6WZlY3R1ZXV4IgorCisjfiBtc2dpZCAiRXJyb3IgYWxsb2NhdGluZyBAYSBAYiAlYi4gICIKKyN+IG1zZ3N0ciAiRVJSRVVSIGQnYWxsb2NhdGlvbiBkJ3VuIEBiICViIGQnQGEuICIKKworI34gbXNnaWQgIiIKKyN+ICJEdXBsaWNhdGUgQGJzIGZvdW5kLi4uIGludm9raW5nIGR1cGxpY2F0ZSBAYiBwYXNzZXMuXG4iCisjfiAiUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIEBic1xuIgorI34gbXNnc3RyICIiCisjfiAiQGJzIGR1cGxpY2F0YXMgcmVw6XLpcy4uLiBpbnZvY2F0aW9uIGRlIGxhIHBhc3NlIGRlcyBAYnMgZHVwbGljYXRhcy5cbiIKKyN+ICJQYXNzZSAxQjogbm91dmVsbGUgc2NydXRhdGlvbiBwb3VyIGxlcyBAYnMgZHVwbGljYXRhcy9lcnJvbulzXG4iCisKKyN+IG1zZ2lkICJEdXBsaWNhdGUvYmFkIEBiKHMpIGluIEBpICVpOiIKKyN+IG1zZ3N0ciAiQGIocykgZHVwbGljYXRhcy9lcnJvbulzIGRhbnMgbCdAaSAlaaA6IgorCisjfiBtc2dpZCAiIgorI34gIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorI34gImlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uICBWYWxpZCByYWlkIG9wdGlvbnMgYXJlOlxuIgorI34gIlx0ZWFfdmVyPTxlYV92ZXJzaW9uICgxIG9yIDIpXG4iCisjfiAiXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgb3B0aW9ucyDpdGVuZHVlcyBzb250IHPpcGFy6WVzIHBhciBkZXMgdmlyZ3VsZXMsIGV0IHBldXZlbnQgcHJlbmRyZSB1biBhcmd1bWVudFxuIgorI34gImxlcXVlbCBwZXV0IOp0cmUgaW5pdGlhbGlz6SBwYXIgdW4gc2lnbmUgZCfpZ2FsaXTpICgnPScpLiBMZXMgb3B0aW9ucyBSQUlEIHZhbGlkZXMgc29udDpcbiIKKyN+ICJcdGVhX3Zlcj08ZWFfdmVyc2lvbiAoMSBvciAyKVxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6ICBmaW5kc3VwZXIgZGV2aWNlIFtza2lwYnl0ZXMgW3N0YXJ0a2JdXVxuIgorI34gbXNnc3RyICJVc2FnZaA6ICBmaW5kc3VwZXIgcOlyaXBo6XJpcXVlIFtvY3RldHNf4F9lc2NhbW90ZXIgW2TpYnV0X2VuX0tvXV1cbiIKKworI34gbXNnaWQgInNraXBieXRlcyBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJvY3RldHMg4CBlc2NhbW90ZXIgZG9pdCDqdHJlIHVuIG5vbWJyZSwgbm9uIHBhcyAlc1xuIgorCisjfiBtc2dpZCAic2tpcGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemVcbiIKKyN+IG1zZ3N0ciAib2N0ZXRzIOAgZXNjYW1vdGVyIGRvaXQg6nRyZSB1biBtdWx0aXBsZSBkZSBsYSB0YWlsbGUgZGUgc2VjdGV1clxuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJk6WJ1dCBlbiBLbyBkb2l0IOp0cmUgdW4gbm9tYnJlLCBub24gcGFzICVzXG4iCisKKyN+IG1zZ2lkICJzdGFydGtiIHNob3VsZCBiZSBwb3NpdGl2ZSwgbm90ICVMZFxuIgorI34gbXNnc3RyICJk6WJ1dCBlbiBLbyBkb2l0IOp0cmUgcG9zaXRpZiwgbm9uIHBhcyAlTGRcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVMZCwgd2l0aCAlZCBieXRlIGluY3JlbWVudHNcbiIKKyN+IG1zZ3N0ciAiZOlidXQg4CAlTGQsIGF2ZWMgdW4gaW5jcultZW50IGRlICVkIG9jdGV0c1xuIgorCisjfiBtc2dpZCAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKyN+IG1zZ3N0ciAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIlMTRMZDogZmluaXNoZWQgd2l0aCBlcnJubyAlZFxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiJTE0TGQ6IHRlcm1pbukgYXZlYyBlcnJubyAlZFxuIgorCisjfiBtc2dpZCAiIgorI34gIlVzYWdlOiAlcyA8ZGV2MT4gPGRldjI+IDxkZXYzPlxuIgorI34gIlxuIgorI34gIlRoaXMgcHJvZ3JhbSBwcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2V0IG9mIGRldmljZXNcbiIKKyN+ICJBIGNvbW1vbiB3YXkgdG8gdXNlIHRoaXMgcHJvZ3JhbSBpczpcbiIKKyN+ICJcbiIKKyN+ICJcdCVzIC9kZXYvaGRhP1xuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiVXNhZ2WgOiAlcyA8cOlyaXBoMT4gPHDpcmlwaDI+IDxw6XJpcGgzPlxuIgorI34gIlxuIgorI34gIkNlIHByb2dyYW1tZSBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZGVzIHBhcnRpdGlvbnMgcG91ciB1biBlbnNlbWJsZSBkZSBw6XJpcGjpcmlxdWVzXG4iCisjfiAiVW5lIGZh529uIHVzdWVsbGUgZCd1dGlsaXNlciBjZSBwcm9ncmFtbWUgZXN0OlxuIgorI34gIlxuIgorI34gIlx0JXMgL2Rldi9oZGE/XG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJGb3JjaWJseSBjbGVhcmluZyBIVFJFRSBmbGFnIG9uIEBpICVkICglcSkuICAoQmV0YSB0ZXN0IGNvZGUpXG4iCisjfiBtc2dzdHIgIkZvcmNlciBsYSBtaXNlIOAgeulybyBkdSBkcmFwZWF1IEhUUkVFIHN1ciBsJ0BpICVkICglcSkuIChDb2RlIGVuIHBoYXNlIGJldGEgdGVzdClcbiIKKworI34gbXNnaWQgIih1bmtub3duIG9zKSIKKyN+IG1zZ3N0ciAiKHN5c3TobWUgZCdleHBsb2l0YXRpb24gaW5jb25udSkiCisKKyN+IG1zZ2lkICJyZXNpemUyZnMgJXMgKCVzKVxuIgorI34gbXNnc3RyICJyZXNpemUyZnMgJXMgKCVzKVxuIgorCisjfiBtc2dpZCAiTnVtYmVyIG9mIGZyZWUgYmxvY2tzOiAlZC8lZCwgTmVlZGVkOiAlZFxuIgorI34gbXNnc3RyICJOb21icmUgZGUgYmxvY3MgbGlicmVzoDogJWQvJWQsIEEgYmVzb2luIGRlOiAlZFxuIgorCisjfiBtc2dpZCAiR29pbmcgaW50byBkZXNwZXJhdGlvbiBtb2RlIGZvciBibG9jayBhbGxvY2F0aW9uc1xuIgorI34gbXNnc3RyICJQYXNzYWdlIGVuIG1vZGUgZOlzZXNw6XLpIHBvdXIgbCdhbGxvY2F0aW9uIGRlIGJsb2NzXG4iCisKKyN+IG1zZ2lkICJNb3ZpbmcgJWQgYmxvY2tzICV1LT4ldVxuIgorI34gbXNnc3RyICJE6XBsYWNlbWVudCBkZSAlZCBibG9jcyAldS0+JXVcbiIKKworI34gbXNnaWQgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisjfiBtc2dzdHIgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiSS1ub2V1ZCBk6XBsYWPpICV1LT4ldVxuIgorCisjfiBtc2dpZCAiSW5vZGUgdHJhbnNsYXRlIChkaXI9JXUsIG5hbWU9JS4qcywgJXUtPiV1KVxuIgorI34gbXNnc3RyICJUcmFuc2xhdGlvbiBkJ2ktbm9ldWQgKHLpcGVydG9pcmU9JXUsIG5vbT0lLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIkTpcGxhY2VtZW50IGR1IGdyb3VwZSBJdGFibGUgJWQgYmxvYyAldS0+JXUgKGRpZmYgJWQpXG4iCisKKyN+IG1zZ2lkICIlZCBibG9ja3Mgb2YgemVyb3MuLi5cbiIKKyN+IG1zZ3N0ciAiJWQgYmxvY3MgZGUgeulyb3MuLi5cbiIKKworI34gbXNnaWQgIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iCisjfiBtc2dzdHIgIkTpcGxhY2VtZW50IGRlIGxhIHRhYmxlIGQnaS1ub2V1ZHMgY29tcGzpdOkuXG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vaWQuZ21vIGIvZTJmc3Byb2dzL3BvL2lkLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRlZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2lkLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vaWQucG8gYi9lMmZzcHJvZ3MvcG8vaWQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjY2VhNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9pZC5wbwpAQCAtMCwwICsxLDY3MjAgQEAKKyMgUGVzYW4gQmFoYXNhIEluZG9uZXNpYSB1bnR1ayBlMmZzcHJvZ3MKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZW9kb3JlIFRzbyAobXNnaWRzKQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBmcmVlbHkgY29weSBhbmQgZGlzdHJpYnV0ZQorIyB0aGlzIGZpbGUgYW5kIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHRoaXMKKyMgaGVhZGVyIGlzIG5vdCByZW1vdmVkIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgbWFya2VkCisjIGFzIHN1Y2guCisjIEFyaWYgRS4gTnVncm9obyA8YXJpZl9lbmRyb0B5YWhvby5jb20+LCAyMDA4LCAyMDA5LCAyMDEwLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MgMS40MS4xMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0wNi0xMiAxNDo0MC0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wNS0yNCAxMjozMCswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBcmlmIEUuIE51Z3JvaG8gPGFyaWZfZW5kcm9AeWFob28uY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBpZFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJCYWQgYmxvY2sgJXUgZGlsdWFyIGphbmdrYXVhbjsgZGlhYmFpa2FuLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImtldGlrYSBtZWxha3VrYW4gcGVuZ2VjaGVja2FuIGRpIGlub2RlIGJhZCBibG9jayIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgaW5vZGUgYmFkIGJsb2NrIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL2lzY2FuLmM6MTEwIGUyZnNjay9zY2FudGVzdC5jOjEwNworIzogZTJmc2NrL3VuaXguYzoxMjk4IGUyZnNjay91bml4LmM6MTM4NiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTQKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzYgbWlzYy9iYWRibG9ja3MuYzoxMjQ4CisjOiBtaXNjL2R1bXBlMmZzLmM6NTg4IG1pc2MvZTJpbWFnZS5jOjExODkgbWlzYy9lMmltYWdlLmM6MTMwNworIzogbWlzYy9lMmltYWdlLmM6MTMyMCBtaXNjL21rZTJmcy5jOjE5MiBtaXNjL3R1bmUyZnMuYzoxOTA3IHJlc2l6ZS9tYWluLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWthICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHBvcGVuICclcyciCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjE5OQorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgZGFsYW0gZGFmdGFyIGJhZCBibG9jayBkYXJpIGJlcmthcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbXBlcmJhcnVpIGlub2RlIGJhZCBibG9jayIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyJQZXJpbmdhdGFuOiBpbGxlZ2FsIGJsb2NrICV1IGRpdGVtdWthbiBkYWxhbSBpbm9kZSBiYWQgYmxvY2suIERpaGFwdXMuXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgYmxvY2sgJWx1ICglcykga2V0aWthICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYxIGUyZnNjay9laGFuZGxlci5jOjExMAorbXNnaWQgIklnbm9yZSBlcnJvciIKK21zZ3N0ciAiTWVuZ2FiYWlrYW4gZXJyb3IiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiTWVtYWtzYSBtZW51bGlzIGtlbWJhbGkiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvciBtZW51bGlzIGJsb2NrICVsdSAoJXMpIGtldGlrYSAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkVycm9yIG1lbnVsaXMgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJkaXJibG9jayBrb3NvbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiZGlyIG1hcCBrb3NvbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJEaXJla3RvcmkgYmxvY2sgJXUgKCMlZCkga29zb25nIGRhbGFtIGlub2RlICV1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgZmlsZW5hbWUgbmJsb2NrcyBibG9ja3NpemVcbiIKK21zZ3N0ciAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk5vbW9yIGRhcmkgYmxvY2sgdGlkYWsgbGVnYWwhXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBibG9jayBidWZmZXIgKHNpemU9JWQpXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIGJsb2NrIGJ1ZmZlciAodWt1cmFuPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYgaW9jdGwgdGlkYWsgZGlzdXBwb3J0ISBUaWRhayBkYXBhdCBtZW1mbHVzaCBidWZmZXIuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2NrXSBwZXJhbmdrYXRcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImtldGlrYSBtZW1idWthICVzIHVudHVrIGZsdXNoaW5nIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjkzNiByZXNpemUvbWFpbi5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbWZsdXNoICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEwODQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbWJ1a2EgaW5vZGUgc2NhbiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjExMDIKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgImtldGlrYSBtZW1wZXJvbGVoIGlub2RlIGJlcmlrdXRueWEiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiJXUgaW5vZGVzIGRpc2Nhbi5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MTIKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJtZW1iYWNhIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBqb3VybmFsIHN1cGVyYmxvY2sgdGlkYWsgdmFsaWQgZGl0ZW11a2FuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogam91cm5hbCB0ZXJsYWx1IHBlbmRla1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBtZXJlY292ZXJ5IGpvdXJuYWxcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdvbid0IGRvIGpvdXJuYWwgcmVjb3Zlcnkgd2hpbGUgcmVhZC1vbmx5XG4iCittc2dzdHIgIiVzOiB0aWRhayBha2FuIG1lbGFrdWthbiBqb3VybmFsIHJlY292ZXJ5IGtldGlrYSByZWFkLW9ubHlcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbWJ1a2EgJXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWVycm9yIG1lbmdhbG9rYXNpa2FuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2NrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJiaXRtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjY29tcHJlc3MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNrb25mbGlrIGRlbmdhbiBiZWJlcmFwYSBzaXN0ZW0gYmVya2FzIGxhaW4gQGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklpbGVnYWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpqb3VybmFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEZGVsZXRlZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkZGlyZWt0b3JpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZWVudHJpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUgJyVEbicgZGFsYW0gJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZnNpc3RlbSBiZXJrYXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGdW50dWsgQGkgJWkgKCVRKSBhZGFsYWgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhIVFJFRSBAZCBAaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGFkYWxhaCBzZWJ1YWggbGluayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibW11bHRpcGx5LWNsYWltZWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5pbnZhbGlkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib29ycGhhbmVkIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwcHJvYmxlbSBkYWxhbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicnJvb3QgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic3NlaGFydXNueWEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlckBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1dW5hdHRhY2hlZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2cGVyYW5na2F0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInhleHRlbnQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6emVyby1sZW5ndGgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU0Cittc2dpZCAiPFRoZSBOVUxMIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIEtvc29uZz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEJhZCBibG9jayBpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3CisjLCBmdXp6eQorbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxJbm9kZSBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxpbm9kZSBkZXNrcmlwc2kgZ3J1cD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjxib290IGxvYWRlciBpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8dW5kZWxldGUgZGlyZWt0b3JpIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8aW5vZGUgZGVza3JpcHNpIGdydXA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxJbm9kZSBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxJbm9kZSB0ZXJwZXNhbiA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8SW5vZGUgVGVycGVzYW4gMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzMworbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAiYmVya2FzIGJpYXNhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNQorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZGlyZWt0b3JpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNworbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgImthcmFrdGVyIGRldmljZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzkKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImJsb2NrIGRldmljZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDEKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJuYW1lZCBwaXBlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MworbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgInN5bWJvbGljIGxpbmsiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ1IG1pc2MvdXVpZGQuYzoxNjEKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgInNvY2tldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAidGlwZSBmaWxlIHRpZGFrIGRpa2V0YWh1aSBkZW5nYW4gbW9kZSAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2NrIHRpZGFrIGxhbmdzdW5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvayB0aWRhayBsYW5nc3VuZyBiZXJkdWEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI3Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJibG9rIHRpZGFrIGxhbmdzdW5nIGJlcnRpZ2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI5Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAiYmxvayBwZW5lcmplbWFoIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQzMQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJsb2sgIyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJrYWxpa2FuIHBldGEgaW5vZGUgeWFuZyBkaXR1bnR1dCIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYxMCBlMmZzY2svcGFzczFiLmM6NzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImludGVybmFsIGVycm9yOiB0aWRhayBkYXBhdCBtZW5lbXVrYW4gZHVwX2JsayB1bnR1ayAldVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIwCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJrZW1iYWxpIGRhcmkgY2xvbmVfZmlsZV9ibG9jayIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBibG9jayByZWNvcmQgZm9yICVsbHUiCittc2dzdHIgImludGVybmFsIGVycm9yOiB0aWRhayBkYXBhdCBtZW5lbXVrYW4gRUEgYmxvY2sgcmVjb3JkIHVudHVrICV1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiaW50ZXJuYWwgZXJyb3I6IHRpZGFrIGRhcGF0IG1lbmVtdWthbiBFQSBpbm9kZSByZWNvcmQgdW50dWsgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NiBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAibWVtYmFjYSBkaXJla3RvcmkgYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjU5OQorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgImluLXVzZSBpbm9kZSBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYxMAorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImRpcmVrdG9yaSBpbm9kZSBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyMAorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgImluLXVzZSBibG9jayBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY5NgorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAibWVtYnVrYSBpbm9kZSBzY2FuIgorCisjOiBlMmZzY2svcGFzczEuYzo3MzAKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICJtZW1wZXJvbGVoIGlub2RlIHNlbGFuanV0bnlhIGRhcmkgc2NhbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI0MAorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiVGFoYXAgMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibWVtYmFjYSBpbmRpcmVjdCBibG9jayBkYXJpIGlub2RlICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ3Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiaW5vZGUgbWFwIGJ1cnVrIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzcwCittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAiaW5vZGUgZGFsYW0gYmFkIGJsb2NrIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM5MAorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgImltYWdpYyBpbm9kZSBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTcKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAibXVsdGlwbHkgZGlrbGFpbSBibG9jayBtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MTgKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImV4dCBhdHRyIGJsb2NrIG1hcCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUoJWMpOiBkaXBlcmtpcmFrYW4gJTZsdSBkaXBlcm9sZWggcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjYyNworbXNnaWQgImJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiYmxvY2sgYml0bWFwIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjMzCittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJpbm9kZSBiaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2MzkKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiaW5vZGUgdGFibGUiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiVGFoYXAgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbGFuanV0a2FuLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUgc2VsZXNhaSBiaXRtYXAiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIlB1bmNhayBwZW1ha2FpYW4gbWVtb3JpIgorCisjOiBlMmZzY2svcGFzczMuYzoxMzYKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIlRhaGFwIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjMyMgorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUgZGV0ZWtzaSBsb29wIGJpdG1hcCIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk1Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJUYWhhcCA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiVGFoYXAgNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIodGlkYWsgYWRhIHByb21wdCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIkJldHVsa2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIkRpaGFwdXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAiRGlwaW5kYWhrYW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTUKK21zZ2lkICJBbGxvY2F0ZSIKK21zZ3N0ciAiRGlhbG9rYXNpa2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICJEaWV4cGFuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIk1lbnlhbWJ1bmdrYW4ga2UgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIk1lbWJ1YXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJNZW5nYW1iaWwiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiVHJ1bmNhdGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiTWVuZ2hhcHVzIGlub2RlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIk1lbWJhdGFsa2FuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIk1lbWJhZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiTWVsYW5qdXRrYW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiS29waSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJIYXB1cyBiZXJrYXMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU3VwcHJlc3MgcGVzYW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIlVubGluayIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OQorbXNnaWQgIkNsZWFyIEhUcmVlIGluZGV4IgorbXNnc3RyICJIYXB1cyBIVHJlZSBpbmRleCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJCdWF0IGtlbWJhbGkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihLT1NPTkcpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIkRJQkVUVUxLQU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJESUhBUFVTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICJESVBJTkRBSEtBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiRElBTE9LQVNJS0FOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkRJRVhQQU5EIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIkRJSFVCVU5HS0FOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiRElCVUFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIkRJQU1BTktBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OAorbXNnaWQgIlRSVU5DQVRFRCIKK21zZ3N0ciAiRElQT1RPTkciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKK21zZ2lkICJJTk9ERSBDTEVBUkVEIgorbXNnc3RyICJJTk9ERSBESUhBUFVTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiRElCQVRBTEtBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJESUJBR0kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJNRUxBTkpVVEtBTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiTVVMVElQTFktQ0xBSU1FRCBCTE9LIERJS09QSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiQkVSS0FTIERJSEFQVVMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJESUFLSElSSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJESUxFUEFTIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSFRSRUUgSU5ERVggRElIQVBVUyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIkFLQU4gTUVNQlVBVCBLRU1CQUxJIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAYiBAQiB1bnR1ayBAZyAlZyB0aWRhayBkYWxhbSBAZy4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAaSBAQiB1bnR1ayBARyAlRyB0aWRhayBkYWxhbSBAZy4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJAaSB0YWJsZSB1bnR1ayBAZyAlZyB0aWRhayBiZXJhZGEgZGFsYW0gQGcuIChAYiAlYilcbiIKKyJQRVJJTkdBVEFOOiBLRU1VTkdLSU5BTiBLRUhJTEFOR0FOIERBVEEgQkVTQVIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtLiAgSWYgdGhlIGRldmljZSBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIHN1cGVyYmxvY2tcbgorIy4gQC1leHBhbmRlZDogaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazpcbgorIy4gQC1leHBhbmRlZDogICAgIGUyZnNjayAtYiAlUyA8ZGV2aWNlPlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSBAUyBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MlxuIgorIkBmLiAgSWYgdGhlIEB2IGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuIgorIkBmIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgQFNcbiIKKyJpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBAUzpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkBTIHRpZGFrIGRhcGF0IGRpYmFjYSBhdGF1IHRpZGFrIGRhcGF0IG1lbmplbGFza2FuIGV4dDIgZGVuZ2FuIGJlbmFyXG4iCisiQGYuIEppa2EgQHYgdGlkYWsgdmFsaWQgZGFuIGluaSBiZXJpc2kgc2VidWFoIGV4dDJcbiIKKyJAZiAoZGFuIGJ1a2FuIHN3YXAgYXRhdSB1ZnMgYXRhdSBzZXN1YXR1IHlhbmcgbGFpbiksIG1ha2EgQFNcbiIKKyJrb3J1cCwgZGFuIGFuZGEgbXVuZ2tpbiBiaXNhIG1lbmNvYmEgbWVuamFsYW5rYW4gZTJmc2NrIHNlY2FyYSBhbHRlcm5hdGlmICIKKyJAUzpcbiIKKyIgICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBmaWxlc3lzdGVtIHNpemUgKGFjY29yZGluZyB0byB0aGUgc3VwZXJibG9jaykgaXMgJWIgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBkZXZpY2UgaXMgJWMgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IEVpdGhlciB0aGUgc3VwZXJibG9jayBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMQorbXNnaWQgIiIKKyJUaGUgQGYgc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBAUykgaXMgJWIgQGJzXG4iCisiVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIEB2IGlzICVjIEBic1xuIgorIkVpdGhlciB0aGUgQFMgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorIlVrdXJhbiBAZiAobWVudXJ1dCBkYXJpIEBTKSBhZGFsYWggJWIgQGJzXG4iCisiVWt1cmFuIGZpc2lrIGRhcmkgQHYgYWRhbGFoICVjIEBic1xuIgorIkthbGF1IG5nZ2FrIEBTIGF0YXUgdGFiZWwgcGFydGlzaSB5YW5nIG11bmdraW4ga29ydXAhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJWZXJzaSBlMmZzY2sgaW5pIHRpZGFrIG1lbmdpbXBsZW1lbnRhc2lrYW4gdW50dWsgdWt1cmFuIGZyYWdtZW50IHlhbmcgIgorImJlcmJlZGFcbiIKKyJkYXJpIEBiLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NQorbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNlaGFydXNueWEgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzZWhhcnVzbnlhICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NQorbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkBmIHRpZGFrIG1lbWlsaWtpIHNlYnVhaCBVVUlEOyBtZW1idWF0IHNhdHUuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ2F0YXRhbjogamlrYSBiZWJlcmFwYSBpbm9kZSBhdGF1IGJsb2sgYml0bWFwIGJsb2sgYXRhdSBiYWdpYW5cbiIKKyJkYXJpIHRhYmVsIGlub2RlIG1lbWJ1dHVoa2FuIHJlbG9rYXNpLCBhbmRhIG11bmdraW4gYmlzYSBtZW5jb2JhXG4iCisiZGVuZ2FuIG1lbmphbGFua2FuIGUyZnNjayBkZW5nYW4gcGlsaWhhbiAnLWIgJVMnIHRlcmxlYmloIGRhaHVsdS4gTWFzYWxhaFxuIgorInlhbmcgbXVuZ2tpbiB0aW1idWwgamlrYSBkZW5nYW4gbWVuZ2d1bmFrYW4gYmxvayBkZXNrcmlwc2kgdXRhbWEsIGRhblxuIgorImJsb2sgY2FkYW5nYW4gZ3J1cCBkZXNrcmlwc2kgbXVuZ2tpbiBPSy5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIktvcnVwc2kgZGl0ZW11a2FuIGRpIEBTLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbmVudHVrYW4gdWt1cmFuIGRhcmkgcGhpc2lrIEB2OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJAaSB0ZXJoaXR1bmcgZGFsYW0gQFMgYWRhbGFoICVpLCBAcyAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODMKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJIdXJkIHRpZGFrIG1lbmR1a3VuZyBsYXlhbmFuIGZpbGV0eXBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkBTIG1lbWlsaWtpIHNlYnVhaCBAbiBAaiAoQGkgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIkV4dGVybmFsIEBqIG1lbWlsaWtpIG11bHRpcGxlIEBmIGRhcmkgcGVuZ2d1bmEgKHRpZGFrIGRpbGF5YW5pKS5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk4Cittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5lbXVrYW4gZXh0ZXJuYWwgQGpcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkV4dGVybmFsIEBqIG1lbWlsaWtpIGJhZCBAU1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkV4dGVybmFsIEBqIHRpZGFrIG1lbGF5YW5pIGluaSBAZlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMworbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiQGYgQGogQFMgbWVtaWxpa2kgdGlwZSB5YW5nIHRpZGFrIGRpa2V0YWh1aSAlTiAodGlkYWsgZGlzdXBwb3J0KS5cbiIKKyJJbmkgc2FuZ2F0IG1lbXVuZ2tpbmthbiBqaWthIHNhbGluYW4gZGFyaSBlMmZzY2sgc3VkYWggbGFtYSBkYW4vYXRhdSB0aWRhayAiCisibWVsYXlhbmkgZm9ybWF0IEBqIGluaS5cbiIKKyJJbmkganVnYSBtdW5na2luIGppa2EgQGogQFMgdGVsYWggdGVya29ydXBzaS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIxCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiQGogQFMgdGVsYWggdGVya29ydXBzaS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhc19AaiBmbGFnIGlzIGNsZWFyLCBidXQgYSBAaiAlcyBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJAUyB0YW5kYSBoYXNfQGogaGlsYW5nLCB0ZXRhcGkgQGogJXMgYWRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiQFMgdGFuZGEgbmVlZHNfcmVjb3ZlcnkgYWRhLCB0ZXRhcGkgdGlkYWsgbWVtaWxpa2kgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM2Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IEBqIGhhcyBkYXRhLlxuIgorbXNnc3RyICJAUyB0YW5kYSBuZWVkX3JlY292ZXJ5IHN1ZGFoIGhpbGFuZywgdGV0YXBpIEBqIG1lbWlsaWtpIGRhdGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQxCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgIkhhcHVzIEBqIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIkBmIG1lbWlsaWtpIGZlYXR1cmUgZmxhZyhzKSBzZXQsIHRldGFwaSBtZW1pbGlraSBzZWJ1YWggcmV2aXNpIDAgQGYuIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgdWt1cmFuPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1NgorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkBJICVCICglYikgZGl0ZW11a2FuIGRhbGFtIEBvIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjEKK21zZ2lkICJBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiU3VkYWggZGloYXB1cyAlQiAoJWIpIGRpdGVtdWthbiBkYWxhbSBAbyBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQEkgQG8gQGkgJWkgZGFsYW0gQFMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgaW5vZGUgJWkgaW4gb3JwaGFuZWQgaW5vZGUgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQGkgJWkgaW4gQG8gQGkgbGlzdC5cbiIKK21zZ3N0ciAiQEkgQGkgJWkgZGFsYW0gZGFmdGFyIEBvIEBpLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc2Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkBqIEBTIG1lbWlsaWtpIHNlYnVhaCBmZWF0dXJlIHlhbmcgdGlkYWsgZGlrZXRhaHVpIGFrdGlmLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgxCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIiIKKyJAaiBAUyBtZW1pbGlraSBzZWJ1YWggZmVhdHVyZSB5YW5nIHRpZGFrIGtvbXBhdGliZWwgeWFuZyB0aWRhayBkaWtldGFodWkgIgorImFrdGlmLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgInZlcnNpIEBqIHRpZGFrIGRpc3VwcG9ydCBvbGVoIGUyZnNjayBpbmkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1vdmluZyBqb3VybmFsIGZyb20gLyVzIHRvIGhpZGRlbiBpbm9kZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNb3ZpbmcgQGogZnJvbSAvJXMgdG8gaGlkZGVuIEBpLlxuIgorIlxuIgorbXNnc3RyICIiCisiTWVtaW5kYWhrYW4gQGogZGFyaSAvJXMga2UgdGVyc2VtYnVueWkgQGkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVycm9yIG1lbWluZGFoa2FuIEBqOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDEKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiTWVuZW11a2FuIEBuIFYyIEBqIEBTIGZpZWxkcyAoZGFyaSBWMSBAaikuXG4iCisiTWVuZ2hhcHVzIGZpZWxkIGRpYXRhcyBkYXJpIFYxIEBqIEBTLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJKYWxhbmthbiBAaiBiYWdhaW1hbmFwdW4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIlJlY292ZXJ5IGZsYWcgdGlkYWsgZGlzZXQgZGFsYW0gYmFja3VwIEBTLCBqYWRpIG1lbmphbGFua2FuIEBqICIKKyJiYWdhaW1hbmFwdW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE3Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJNZW55aW1wYW4gaW5mb3JtYXNpIEBqIEBpIEBiLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJAZiB0aWRhayBtZW1pbGlraSByZXNpemVfQGkgYWt0aWYsIHRldGFwaSBfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImFkYWxhaCAlTjsgQHMgbm9sLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiUmVzaXplX0BpIHRpZGFrIGFrdGlmLCB0ZXRhcGkgcmVzaXplIEBpIGJ1a2FuIG5vbC4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJSZXNpemUgQGkgdGlkYWsgdmFsaWQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMzgKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiQFMgd2FrdHUgdGVyYWtoaXIgZGlwYXNhbmcgKCV0LFxuIgorIlx0c2VrYXJhbmcgPSAlVCkgYmVyYWRhIGRpIG1hc2EgeWFuZyBha2FuIGRhdGFuZy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MworbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJAUyB3YWt0dSB0ZXJha2hpciBkaXR1bGlzICgldCxcbiIKKyJcdHNla2FyYW5nID0gJVQpIGJlcmFkYSBkaSBtYXNhIHlhbmcgYWthbiBkYXRhbmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIkBTIHBldHVuanVrIHVudHVrIHN1cGVyYmxvayBsdWFyIEBzICVYLiAgIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1MgorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisiTWVuYW1iYWhrYW4gZGlyaGFzIGhpbnQga2UgQGYuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzU3CisjLCBmdXp6eQorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIkBnIGRlc2tyaXBzaSAlZyBjaGVja3N1bSB0aWRhayB2YWxpZC4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIkBnIGRlc2tyaXBzaSAlZyBkaXRhbmRhaSB1bmludGlhbGlzYXNpIHRhbnBhIG1lbnNldCBmZWF0dXJlLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICJAZyBkZXNrcmlwc2kgJWcgbWVtaWxpa2kgaW5vZGUgeWFuZyB0aWRhayB2YWxpZCB0ZXJoaXR1bmcgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzcyCittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICJUZXJha2hpciBAZyBAYiBAQiB0aWRhayB0ZXJpbml0aWFsaXNhc2kuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiSnVybmFsIHRyYW5zYWtzaSAlaSB0ZXJrb3J1cHNpLCBiYWxhc2FuIGRpYmF0YWxrYW4uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgxCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIlRhbmRhIHRlc3RfZnMgdGVsYWggYWt0aWYgKGRhbiBleHQ0IHRlcnNlZGlhKS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldCkgICIKK21zZ3N0ciAiIgorIkBTIHdha3R1IHBhc2FuZyB0ZXJha2hpciBiZXJhZGEgZGkgbWFzYSB5YW5nIGFrYW4gZGF0YW5nLlxuIgorIlx0KGxlYmloIGtlY2lsIHNlaGFyaSwgbXVuZ2tpbiBrYXJlbmEgcGVyYW5na2F0IGphbSBkaXNldCB0aWRhayBiZW5hcikgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5MgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldCkuICAiCittc2dzdHIgIiIKKyJAUyB3YWt0dSB0dWxpcyB0ZXJha2hpciBiZXJhZGEgZGltYXNhIHlhbmcgYWthbiBkYXRhbmcuXG4iCisiXHQobGViaWgga2VjaWwgc2VoYXJpLCBtdW5na2luIGthcmVuYSBwZXJhbmdrYXQgamFtIGRpc2V0IHRpZGFrIGJlbmFyKS4gIgorCisjLiBALWV4cGFuZGVkOiBPbmUgb3IgbW9yZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTgKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiU2F0dSBhdGF1IGxlYmloIEBiIEBnIHBlbmRlc2tyaXBzaSBjaGVja3N1bSB0aWRhayB2YWxpZC4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIk1lbnNldCBqdW1sYWggcmVzZXJ2ZWQgYmxvayBrZSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGJsb2NrcyBjb3VudCB0byAlYyAod2FzICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwOAorIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIk1lbnNldCBqdW1sYWggcmVzZXJ2ZWQgYmxvayBrZSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworIywgZnV6enkKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKyJNZW1pbmRhaGthbiBAaiBkYXJpIC8lcyBrZSB0ZXJzZW1idW55aSBAaS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiVWt1cmFuIGJsb2sgdGlkYWsgdmFsaWQgLSAlcyIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIzCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiVGFoYXAgMTogTWVtZXJpa3NhIEBpLCBAYnMsIGRhbiB1a3VyYW5cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ0Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkByIGJ1a2FuIHNlYnVhaCBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5Cittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICIiCisiQHIgbWVtaWxpa2kgZHRpbWUgdGVyc2V0IChtdW5na2luIGthcmVuYSBwZW5nZ3VuYWFuIG1rZTJmcyB2ZXJzaSBsYW1hKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlJlc2VydmVkIEBpICVpICglUSkgbWVtaWxpa2kgQG4gbW9kZS4gICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkBEIEBpICVpIG1lbWlsaWtpIGR0aW1lIG5vbC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiQGkgJWkgc2VkYW5nIGRpZ3VuYWthbiwgdGV0YXBpIG1pbGlraSBkdGltZSB0ZXJzZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJAaSAlaSBhZGFsYWggc2VidWFoIEB6IEBkLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NAorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkBnICVnJ3MgQGIgQEIgZGkgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc5Cittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiQGcgJWcncyBAaSBAQiBkaSAlYiBAQy5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIkBHICVnJ3MgQGkgdGFiZWwgZGkgJWIgQEMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4OQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBnICVnJ3MgQGIgQEIgKCViKSBhZGFsYWggYnVydWsuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBnICVnJ3MgQGkgQEIgKCViKSBhZGFsYWggYnVydWsuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk5Cittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9zaXplIGFkYWxhaCAlSXMsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX0BicyBhZGFsYWggJUliLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIkBJICVCICglYikgZGFsYW0gQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTQKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIHNhbGluZyBiZXJ0dW1wYW5nIHRpbmRpaCBAZiBtZXRhZGF0YSBkYWxhbSBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBAYihzKSBpbGVnYWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgaWxlZ2FsIEBicyBkYWxhbSBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGJhZCBibG9jayBpbm9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjkKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQEkgJUIgKCViKSBkYWxhbSBAYiBAaSBidXJ1ay4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiQGIgQGkgYnVydWsgbWVtaWxpa2kgaWxlZ2FsIEBiKHMpLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiRHVwbGlrYXNpIGF0YXUgQGIgYnVydWsgc2VkYW5nIGRpZ3VuYWthbiFcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiQGIgJWIgYnVydWsgeWFuZyBkaWd1bmFrYW4gc2FtYSBidXJ1a255YSBkZW5nYW4gQGIgQGkgaW5kaXJlY3QgQGIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkBiIEBpIGJ1cnVrIHRlbGFoIHRlcmtvcnVwc2kuIEFuZGEgc2VoYXJ1c255YSBiZXJoZW50aVxuIgorInNla2FyYW5nIGRhbiBtZW5qYWxhbmthbiBlMmZzY2sgLWMgdW50dWsgbWVuc2NhbiB1bnR1a1xuIgorIm1lbmNhcmkgYmxvayBidXJ1ayBkYWxhbSBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJKaWthIEBiIGFkYWxhaCBzYW5nYXQgYnVydWssIEBmIHRpZGFrIGRhcGF0IGRpYmV0dWxrYW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFlvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGVcbgorIy4gQC1leHBhbmRlZDogdGhhdCB0aGUgYmxvY2sgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjEKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkFuZGEgZGFwYXQgbWVuZ2hhcHVzIEBiIGluaSBkYXJpIGRhZnRhciBAYiBidXJ1ayBkYW4gYmVyaGFyYXBcbiIKKyJAYiBiZW5hciBiZW5hciBPSy4gVGV0YXBpIHRpZGFrIGdhcmFuc2kgdW50dWsgaGFsIGluaS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjcKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiQFMgKCViKSB1dGFtYSBiZXJhZGEgZGFsYW0gZGFmdGFyIEBiIGJ1cnVrLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiQmxvayAlYiBkYWxhbSBkZXNrcmlwc2kgQGcgdXRhbWEgYmVyYWRhIGRhbGFtIGRhZnRhciBAYiBidXJ1a1xuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc4Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiUGVyaW5nYXRhbjogR3J1cCAlZydzIEBTIChiKSBidXJ1ay5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiUGVyaW5nYXRhbjogR3J1cCAlZydzIHNhbGluYW4gZGFyaSBkZXNrcmlwc2kgQGcgbWVtaWxpa2kgc2VidWFoIEBiICglYikgIgorImJ1cnVrLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICIiCisiUHJvZ3JhbW1pbmcgZXJyb3I/IEBiICMlYiB0ZXJrbGFpbSB1bnR1ayB0aWRhayBhZGEgYWxhc2FuIGRhbGFtICIKKyJwcm9jZXNzX2JhZF9AYi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQEEgJU4ga29udGludSBAYihzKSBkYWxhbSBAYiBAZyAlZyB1bnR1ayAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkBBIEBiIGJ1ZmZlciB1bnR1ayByZWxva2FzaSAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIk1lbWluZGFoa2FuIEBnICVnJ3MgJXMgZGFyaSAlYiBrZSAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIk1lbWluZGFoa2FuIEBnICVnJ3MgJXMga2UgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE1Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHRpZGFrIGRhcGF0IG1lbWJhY2EgQGIgJWIgZGFyaSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjAKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJQZXJpbmdhdGFuOiB0aWRhayBkYXBhdCBtZW51bGlzIEBiICViIHVudHVrICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NjAKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzMAorbXNnaWQgIkBBIEBiIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIEBiIEBCICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJAQSBpY291bnQgbGluayBpbmZvcm1hc2k6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbGFrdWthbiBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yIGtldGlrYSBtZW5naXRlcmFzaSBtZWxhbHVpIEBicyBkYWxhbSBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTUKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW55aW1wYW4gQGkgY291bnQgaW5mb3JtYXNpIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVueWltcGFuIEBkIEBiIGluZm9ybWFzaSAoQGk9JWksIEBiPSViLCBudW09JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW1iYWNhIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBmbGFnIGltYWdpYyB0ZXJzZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGVzaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBiZXJrYXMgKEBpICVpKSBtZW1pbGlraSBrZXRhaGFuYW5cbiIKKyJhdGF1IGFwcGVuZC1vbmx5IGZsYWcgdGVyc2V0LiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBAY2lvbiBmbGFnIHRlcnNldCBwYWRhIEBmIHRhbnBhIGxheWFuYW4gQGNpb24uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiU3Blc2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIG1lbWlsaWtpIHVrdXJhbiBrb3NvbmcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAwCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkBqIEBpIHNlZGFuZyB0aWRhayBkaWd1bmFrYW4sIHRldGFwaSBiZXJpc2kgZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBqIGJ1a2FuIHNlYnVhaCBmaWxlIHJlZ3VsYXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiQGkgJWkgYWRhbGFoIGJhZ2lhbiBkYXJpIGRhZnRhciBAbyBAaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTYKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisiQGkgYWRhbGFoIGJhZ2lhbiBkYXJpIG9ycGhhbiB0ZXJrb3J1cHNpIHlhbmcgZGl0ZW11a2FuIGRhcmkgbGlua2VkIGxpc3QuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIxCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkVycm9yIG1lbWJhY2EgQGEgQGIgJWIgdW50dWsgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBzZWJ1YWggQGEgQGIgJWIgYnVydWsuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJyb3IgbWVtYmFjYSBAYSBAYiAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJAYSBAYiAlYiBtZW1pbGlraSBqdW1sYWggcmVmZXJlbnNpICVyLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDYKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVycm9yIG1lbnVsaXMgQGEgQGIgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQGEgQGIgJWIgbWVtaWxpa2kgaF9AYnMgPiAxLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQEEgQGEgQGIgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJAYSBAYiAlYiBhZGFsYWgga29ydXAgKGJlbnRyb2sgZGFsYW0gYWxva2FzaSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIG5hbWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2NgorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJAYSBAYiAlYiBhZGFsYWgga29ydXAgKEBuIG5hbWEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzcxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJAYSBAYiAlYiBhZGFsYWgga29ydXAgKEBuIHZhbHVlKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiQGkgJWkgdGVybGFsdSBiZXNhci4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSBtZW55ZWJhYmthbiBAZCB0ZXJsYWx1IGJlc2FyLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSBtZW55ZWJhYmthbiBiZXJrYXMgdGVybGFsdSBiZXNhci4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbWVueWViYWJrYW4gc3ltbGluayB0ZXJsYWx1IGJlc2FyLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIkBpICVpIG1lbWlsaWtpIElOREVYX0ZMIGZsYWcgdGVyc2V0IGRpIEBmIHRhbnBhIGJhbnR1YW4gaHRyZWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJAaSAlaSBtZW1pbGlraSBJTkRFWF9GTCBmbGFnIHRlcnNldCB0ZXRhcGkgdGlkYWsgc2VidWFoIEBkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkBoICVpIG1lbWlsaWtpIHNlYnVhaCBAbiB0aXRpayByb290LlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkBoICVpIG1lbWlsaWtpIHNlYnVhaCB2ZXJzaSBoYXNoIHlhbmcgdGlkYWsgZGlsYXlhbmkgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICIiCisiQGggJWkgbWVuZ2d1bmFrYW4gc2VidWFoIGh0cmVlIHlhbmcgdGlkYWsga29tcGF0aWJsZSBkaSB0aXRpayByb290IGZsYWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkBoICVpIG1lbWlsaWtpIHNlYnVhaCBrZWRhbGFtYW4gcG9ob24gKCVOKSB5YW5nIHRlcmxhbHUgYmVzYXJcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkJ1cnVrIEBiIEBpIG1lbWlsaWtpIHNlYnVhaCBAYiAoJWIpIHRpZGFrIGxhbmdzdW5nIHlhbmcga29uZmxpayBkZW5nYW5cbiIKKyJAZiBtZXRhZGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiUmVzaXplIEBpIGdhZ2FsIG1lbWJ1YXQga2VtYmFsaTogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBpICVpIG1lbWlsaWtpIHNlYnVhaCB1a3VyYW4gZXh0cmEgKCVJUykgeWFuZyBiZXJpc2kgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIGRhbGFtIEBpICVpIG1lbWlsaWtpIHNlYnVhaCBwYW5qYW5nIG5hbWEgKCVOKSB5YW5nIGJlcmlzaSBAblxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIGRhbGFtIEBpICVpIG1lbWlsaWtpIG5pbGFpIG9mc2V0ICglTikgeWFuZyBiZXJpc2kgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiIgorIkBhIGRhbGFtIEBpICVpIG1lbWlsaWtpIHNlYnVhaCBuaWxhaSBAYiAoJU4pIHlhbmcgYmVyaXNpIEBuIChzZWhhcnVzbnlhIDApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisiQGEgZGFsYW0gQGkgJWkgbWVtaWxpa2kgc2VidWFoIG5pbGFpIHlhbmcgYmVydWt1cmFuICglTikgeWFuZyBiZXJpc2kgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBhIGRhbGFtIEBpICVpIG1lbWlsaWtpIHNlYnVhaCBoYXNoICglTikgeWFuZyBiZXJpc2kgQG5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorIkBpICVpIGFkYWxhaCBzZWJ1YWggJUl0IHRldGFwaSBzZXBlcnRpbnlhIGJlbmFyIGJlbmFyIHNlYnVhaCBkaXJla3RvcmkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yIGtldGlrYSBtZW1iYWNhIGRpYXRhcyBAeCB0cmVlIGRhbGFtIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJHYWdhbCBtZW5naXRlcmFzaSBleHRlbnMgZGFsYW0gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODIKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBtZW1pbGlraSBzZWJ1YWggZXh0ZW5zaSBAblxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg3Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgbWVtaWxpa2kgc2VidWFoIGVudGVuc2kgQG5cbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiQGkgJWkgbWVtaWxpa2kgRVhURU5UU19GTCB0YW5kYSBzZXQgZGkgQGYgdGFucGEgc3VwcG9ydCBleHRlbnNpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiQGkgJWkgYWRhbGFoIHNlYnVhaCBmb3JtYXQgZXh0ZW5zaSwgdGV0YXBpIEBTIGhpbGFuZyBmZWF0dXJlIEVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIkBpICVpIGhpbGFuZyBFWFRFTlRfRkwsIHRldGFwaSBhZGFsYWggc2VidWFoIGZvcm1hdCBleHRlbnNpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiRmFzdCBzeW1saW5rICVpIG1lbWlsaWtpIEVYVEVOVF9GTCB0ZXJzZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEyCittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSB0ZWxhaCB0aWRhayB0ZXJhdHVyIGV4dGVuc2lueWFcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIkBpICVpIG1lbWlsaWtpIHNlYnVhaCB0aXRpayBla3N0ZW5zaSB0aWRhayB2YWxpZCAoYmxrICViLCBsYmxrICVjKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW5naXRlcmFzaSBtZWxhbHVpIEBkIEBiczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiQGogYnVrYW4gc2VidWFoIGZpbGUgcmVndWxhci4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMxCisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaiBAaSBzZWRhbmcgdGlkYWsgZGlndW5ha2FuLCB0ZXRhcGkgYmVyaXNpIGRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM2CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIkBpICVpIHNlZGFuZyBkaWd1bmFrYW4sIHRldGFwaSBtaWxpa2kgZHRpbWUgdGVyc2V0LiAgIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQxCisjLCBmdXp6eQorbXNnaWQgIlRoZSBiYWQgQGIgQGkgbG9va3MgQG4uICAiCittc2dzdHIgIjxCYWQgYmxvY2sgaW5vZGU+IgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKyJAaSAlaSB0ZWxhaCB0aWRhayB0ZXJhdHVyIGV4dGVuc2lueWFcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk1lbmphbGFua2FuIHRhaGFwIHRhbWJhaGFuIHVudHVrIG1lcmVzb2x2ZSBAYnMgZGlrbGFpbSBvbGVoIGxlYmloIGRhcmkgc2F0dSAiCisiQGkuLi5cbiIKKyJUYWhhcCAxQjogTWVuc2NhbiBrZW1iYWxpIHVudHVrIEBtIEBic1xuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG0gQGIocykgaW4gQGkgJWk6IgorbXNnc3RyICJAbSBAYihzKSBkYWxhbSBAaSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuc2NhbiBpbm9kZXMgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKGlub2RlX2R1cF9tYXApOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3OQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuZ2l0ZXJhc2kgZGkgQGJzIGRhbGFtIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg5IGUyZnNjay9wcm9ibGVtLmM6MTMwNAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVueWVzdWFpa2FuIHJlZmNvdW50IHVudHVrIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiVGFoYXAgMUM6IE1lbWVyaWtzYSBkaXJla3RvcmkgdW50dWsgQGlzIGRlbmdhbiBAbSBAYnNcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAwCittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlRhaGFwIDFEOiBNZW1iZXR1bGthbiBAbSBAYnNcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDUKK21zZ2lkICIiCisiRmlsZSAlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pIFxuIgorIiAgaGFzICVyIEBtIEBiKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuIgorbXNnc3RyICIiCisiQmVya2FzICVRIChAaSAjJWksIHdha3R1IGJlcnViYWggJUlNKSBcbiIKKyIgIG1lbWlsaWtpICVyIEBtIEBiKHMpLCBkaWJhZ2kgZGVuZ2FuICVOIGJlcmthczpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxMQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE2Cittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PEBmIG1ldGFkYXRhPlxuIgorCisjLiBALWV4cGFuZGVkOiAoVGhlcmUgYXJlICVOIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLilcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMQorbXNnaWQgIiIKKyIoVGhlcmUgYXJlICVOIEBpcyBjb250YWluaW5nIEBtIEBicy4pXG4iCisiXG4iCittc2dzdHIgIiIKKyIoQWRhICVOIEBpcyBiZXJpc2kgQG0gQGJzLilcbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNgorbXNnaWQgIiIKKyJAbSBAYnMgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkBtIEBicyB0ZWxhaCBkaWFzc2lnbiBhdGF1IGRpa29waS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbnlhbGluIGZpbGU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDUKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJUYWhhcCAyOiBNZW1lcmlrc2Egc3RydWt0dXIgQGRcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MAorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQG4gQGkganVtbGFoIHVudHVrICcuJyBkYWxhbSBAZCBAaSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkBFIG1lbWlsaWtpIEBuIEBpICM6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjAKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiQEUgbWVtaWxpa2kgQEQvdGlkYWsgZGlwYWthaSBAaSAlRGkuICAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY1Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFIEBMIGtlICcuJyAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzAKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiQEUgbWVudW5qdWsga2UgQGkgKCVEaSkgdGVybGV0YWsgZGkgZGFsYW0gQGIgYnVydWsuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc1Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMIGtlIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBATCBrZSBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODUKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBtZW1pbGlraSBrYXJha3RlciBpbGVnYWwgZGFsYW0gbmFtYW55YS5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkhpbGFuZyAnLicgZGFsYW0gQGQgQGkgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkhpbGFuZyAnLi4nIGRhbGFtIEBkIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMAorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIlBlcnRhbWEgQGUgJyVEbicgKEBpPSVEaSkgZGFsYW0gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDUKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJLZWR1YSBAZSAnJURuJyAoQGk9JURpKSBkYWxhbSBAZCBAaSAlaSBAcyAnLi4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEwCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgQEYgJUlGLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE1Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjAKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEyNQorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIEBGICVOLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzAKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCBAcyBub2wuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM1Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBtZW1pbGlraSBtb2RlIEBuICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQwCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAZCBAaSAlaSwgJUIsIG9mc2V0ICVOOiBAZCB0ZXJrb3J1cHNpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ1Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkBkIEBpICVpLCAlQiwgb2ZzZXQgJU46IG5hbWEgYmVya2FzIHRlcmxhbHUgcGFuamFuZ1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTAKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkBkIEBpICVpIG1lbWlsaWtpICMlQiB5YW5nIHRpZGFrIHRlcmFsb2thc2kuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIicuJyBAZCBAZSBkYWxhbSBAZCBAaSAlaSB0aWRhayB0ZXJha2hpcmkgZGVuZ2FuIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICInLi4nIEBkIEBlIGRhbGFtIEBkIEBpICVpIHRpZGFrIHRlcmFraGlyaSBkZW5nYW4gTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY1Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgYWRhbGFoIHNlYnVhaCBrYXJha3RlciBASSBAdi5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTcwCittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBhZGFsYWggc2VidWFoIEBJIEBiIEB2LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkBFIGFkYWxhaCBzYWxpbmFuICcuJyBAZS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTgwCittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkBFIGFkYWxhaCBkdXBsaWthc2kgZGFyaSAnLi4nIEBlLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODUgZTJmc2NrL3Byb2JsZW0uYzoxNDg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiSW50ZXJuYWwgZXJyb3I6IHRpZGFrIGRhcGF0IG1lbmNhcmkgZGlyX2luZm8gdW50dWsgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MAorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkBFIG1lbWlsaWtpIHJlY19sZW4gZGFyaSAlRHIsIEBzICVOLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJzdHJ1a3R1ciBAQSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbmdpdGVyYXNpIG1lbGFsdWkgQGQgQGJzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDUKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbWJhY2EgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjEwCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW51bGlzIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQEEgYmFydSBAZCBAYiB1bnR1ayBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbmRlYWxva2FzaWthbiBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJAZCBAZSB1bnR1ayAnLicgZGFsYW0gJXAgKCVpKSBiZXNhci5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBhZGFsYWggc2VidWFoIEBJIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGFkYWxhaCBzZWJ1YWggQEkgc29ja2V0LlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDAKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiU2V0dGluZyBmaWxldHlwZSB1bnR1ayBARSBrZSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDUKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIiIKKyJARSBtZW1pbGlraSBzZWJ1YWggdGlwZSBiZXJrYXMgeWFuZyB0aWRhayBiZW5hciAoc2ViZWx1bW55YSAlRHQsIEBzICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZmlsZXR5cGUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTAKK21zZ2lkICJARSBoYXMgZmlsZXR5cGUgc2V0LlxuIgorbXNnc3RyICJARSBtZW1pbGlraSBmaWxldHlwZSBzZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU1Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEUgbWVtaWxpa2kgc2VidWFoIG5hbWEgQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYwCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltbGluayAlUSAoQGkgIyVpKSBhZGFsYWggQG4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjUKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjcwCittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIkBmIGJlcmlzaSBiZXJrYXMgYmVzYXIsIHRldGFwaSBrdXJhbmcgTEFSR0VfRklMRSBmbGFnIGRhbGFtIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc1Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiB0aWRhayBtZW1pbGlraSByZWZlcmVuc2lcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgwCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIGR1YSByZWZlcmVuc2kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBtZW1pbGlraSBtaW4gaGFzaCBidXJ1a1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTAKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgbWVtaWxpa2kgbWF4IGhhcyBidXJ1a1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTUKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJAbiBAaCAlZCAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTkKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJAcCBAaCAlZCAoJXEpOiBidXJ1ayBAYiBub21vciAlYi5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6IHJvb3Qgbm9kZSBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIkBwIEBoICVkOiB0aXRpayByb290IGFkYWxhaCBAblxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTQKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIEBuIGJhdGFzICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzE5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBtZW1pbGlraSBAbiBqdW1sYWggKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyNAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIHNlYnVhaCB0YWJlbCBoYXNoIHlhbmcgdGlkYWsgdGVydXJ1dFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIG1lbWlsaWtpIEBuIGtlZGFsYW1hbiAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzQKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIkR1cGxpa2FzaSBARSBkaXRlbXVrYW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzkKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiQEUgbWVtaWxpa2kgc2VidWFoIG5hbWEgZmlsZSB5YW5nIHRpZGFrIHVuaXEuXG4iCisiTWVuZ3ViYWggbmFtYW55YSBrZSAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ0Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiRHVwbGlrYXNpIEBlICclRG4nIGRpdGVtdWthbi5cbiIKKyJcdCBNZW5hbmRhaSAlcCAoJWkpIHVudHVrIGRpYnVhdCBrZW1iYWxpLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0OQorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgbm9sLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTQKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIlRpZGFrIHRlcmR1Z2EgQGIgZGFsYW0gQGggJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIkBFIHJlZmVyZW5zaSBAaSAlRGkgZGFsYW0gQGcgJWcgZGltYW5hIF9JTk9ERV9VTklOSVQgdGVsYWggZGlzZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisiQEUgcmVmZXJlbnNpIEBpICVEaSBkaXRlbXVrYW4gZGFsYW0gQGcgJWcncyBkaSBkYWVyYWggaW5vZGUgeWFuZyB0aWRhayAiCisiZGlndW5ha2FuLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgbm9sLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc1Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiVGFoYXAgMzogTWVtZXJpa3NhIGtvbmVrdGl2aXRhcyBAZFxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkByIHRpZGFrIGRpYWxva2FzaWthbi4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiVGlkYWsgYWRhIHJ1YW5nIGRhbGFtIEBsIEBkLiAgIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICJUaWRhayB0ZXJodWJ1bmcgQGQgQGkgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9AbCB0aWRhayBkaXRlbXVrYW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDAwCittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIicuLicgZGFsYW0gJVEgKCVpKSBhZGFsYWggJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiQnVydWsgYXRhdSB0aWRhayBhZGEgL0BsLiBUaWRhayBkYXBhdCBkaWh1YnVuZ2thbiBrZW1iYWxpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZCBub3QgZXhwYW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGV4cGFuZCAvQGw6ICVtXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdleHBhbiAvQGw6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5naHVidW5na2FuICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbmNvYmEgbWVuY2FyaSAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X0BiOiAlbSBrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWF0IC9AbCBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19AaTogJW0ga2V0aWthIG1lbmNvYmEgdW50dWsgbWVtYnVhdCAvQGwgQGRcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM1CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19kaXJfQGI6ICVtIGtldGlrYSBtZW1idWF0IEBkIEBiIGJhcnVcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSBrZXRpa2EgbWVudWxpcyBAZCBAYiB1bnR1ayAvQGxcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiRXJyb3Iga2V0aWthIG1lbnllc3VhaWthbiBqdW1sYWggQGkgZGkgQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbWJldHVsa2FuIHBhcmVudCBkYXJpIEBpICVpOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbWJldHVsa2FuIHBhcmVudCBkYXJpIEBpICVpOiBUaWRhayBkYXBhdCBtZW5jYXJpIHBhcmVudCBAZCBAZVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvciBtZW1idWF0IHJvb3QgQGQgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVtYnVhdCAvQGwgQGQgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzUKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkByIGJ1a2FuIHNlYnVhaCBAZDogbWVtYmF0YWxrYW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODAKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbGFuanV0a2FuIHRhbnBhIHNlYnVhaCBAci5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ5MAorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL0BsIGJ1a2FuIHNlYnVhaCBAZCAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTcKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlRhaGFwIDNBOiBNZW5nb3B0aW1hc2kgZGlyZWt0b3JpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiR2FnYWwgbWVtYnVhdCBwZW5nLWl0ZXJhc2kgZGlyc190b19oYXNoOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDcKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIkdhZ2FsIG1lbmdvcHRpbWFzaSBkaXJla3RvcmkgJXEgKCVkKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTEyCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJNZW5nb3B0aW1hc2kgZGlyZWt0b3JpOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyOQorbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJUYWhhcCA0OiBNZW1lcmlrc2EganVtbGFoIHJlZmVyZW5zaVxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkB1IEB6IEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAdSBAaSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0NAorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSByZWYgY291bnQgYWRhbGFoICVJbCwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiUEVSSU5HQVRBTjogQlVHIERBTEFNIFBFTVJPR1JBTUFOIEUyRlNDSyFcbiIKKyJcdEFUQVUgU0VPUkFORyBLRVJBUyBLRVBBTEEgKEFOREEpIE1FTUVSSUtTQSBTRUJVQUggU0lTVEVNIEJFUktBUyAoSElEVVApICIKKyJZQU5HIFRFUlBBU0FORy5cbiIKKyJAaV9saW5rX2luZm9bJWldIGFkYWxhaCAlTiwgQGkuaV9saW5rc19jb3VudCBhZGFsYWggJUlsLiBNZXJla2EgQHMgYWRhbGFoICIKKyJzYW1hIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlRhaGFwIDU6IE1lbWVyaWtzYSByaW5na2FzYW4gaW5mb3JtYXNpIEBnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiTWVuYW1iYWhrYW4gcGFkIGRpYWtoaXIgZGFyaSBAaSBAQiB5YW5nIHRpZGFrIHRlcnNldC4gICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTY4Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJNZW5hbWJhaGthbiBwYWQgZGkgYWtoaXIgZGFyaSBAYiBAQiBhZGFsYWggdGVyIHNldC4gICIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MworbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkBiIEBCIHBlcmJlZGFhbjogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTkzCittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiQGkgQEIgcGVyYmVkYWFuOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjEzCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJLb3NvbmcgQGlzIHRlcmhpdHVuZyBzYWxhaCB1bnR1ayBAZyAjJWcgKCVpLCB0ZXJoaXR1bmc9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxOAorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiRGlyZWt0b3JpIHRlcmhpdHVuZyBzYWxhaCB1bnR1ayBAZyAjJWcgKCVpLCB0ZXJoaXR1bmc9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjMKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJLb3NvbmcgQGlzIHRlcmhpdHVuZyBzYWxhaCAoJWksIHRlcmhpdHVuZz0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjI4Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJLb3NvbmcgQGJzIHRlcmhpdHVuZyBzYWxhaCB1bnR1ayBAZyAjJWcgKCViLCB0ZXJoaXR1bmc9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzMKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJLb3NvbmcgQGJzIHRlcmhpdHVuZyBzYWxhaCAoJWIsIHRlcmhpdHVuZz0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM4Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKyJQUk9HUkFNTUlORyBFUlJPUjogQGYgKCMlTikgQEIgZW5kcG9pbnRzICglYiwgJWMpIHRpZGFrIGRhcGF0IG1lbmNvY29rYW4gIgorInBlcmhpdHVuZ2FuIEBCIHRpdGlrIHVqdW5nICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0NAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBiZXJha2hpciBkYXJpIGJpdG1hcCAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3IgbWVueWFsaW4gZGFsYW0gbWVuZ2dhbnRpIEBpIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yIG1lbnlhbGluIGRhbGFtIG1lbmdnYW50aSBAYiBAQjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiQGcgJWcgQGIocykgc2VkYW5nIGRpZ3VuYWthbiB0ZXRhcGkgQGcgdGVydGFuZGEgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIkBnICVnIEBpKHMpIHNlZGFuZyBkaWd1bmFrYW4gdGV0YXBpIEBnIHRlcnRhbmRhIElOT0RFX1VOSU5JVFxuIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTEKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiTWVtYnVhdCBrZW1iYWxpIEBqIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTYKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICJLb2RlIGVycm9yIHRpZGFrIHRlcnRhbmdhbmkgKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NDAgZTJmc2NrL3Byb2JsZW0uYzoxOTQ0Cittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiRElBQkFJS0FOIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtb3JpIHlhbmcgZGlndW5ha2FuOiAlZCwgd2FrdHUgeWFuZyBkaWd1bmFrYW46ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAidWt1cmFuIGRhcmkgaW5vZGU9JWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAia2V0aWthIG1lbXVsYWkgc2NhbiBkYXJpIGlub2RlIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJrZXRpa2EgbWVsYWt1a2FuIHBlbWVyaWtzYWFuIGlub2RlIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgImtldGlrYSBtZW1hbmdnaWwgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgdW50dWsgaW5vZGUgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgImtldGlrYSBtZW1hbmdnaWwgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudCB1bnR1ayBpbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiVHJ1bmNhdGluZyIKKworIzogZTJmc2NrL3N1cGVyLmM6MjczCittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIk1lbmdoYXB1cyIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2tdIFstQiB1a3VyYW4gYmxva11cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVuZC1vcHRpb25zXSBwZXJhbmdrYXRcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXJ0b2xvbmdhbiBkYXJ1cmF0OlxuIgorIiAtcCAgICAgICAgICAgICAgICAgICBPdG9tYXRpcyBwZXJiYWlrYW4gKHRhbnBhIHBlcnRhbnlhYW4pXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIFRpZGFrIG1lbWJ1YXQgcGVydWJhaGFuIGRpIHNpc3RlbSBiZXJrYXNcbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgTWVuZ2FzdW1zaSBcInllc1wiIHVudHVrIHNlbXVhIHBlcnRhbnlhYW5cbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgTWVtZXJpa3NhIGJsb2sgYnVydWsgZGFuIG1lbmFtYmFoa2FuIGhhc2lsbnlhIGtlICIKKyJkYWZ0YXIgYmxvayBidXJ1a1xuIgorIiAtZiAgICAgICAgICAgICAgICAgICBNZW1ha3NhIG1lbWVyaWtzYSB3YWxhdXB1biBzaXN0ZW0gYmVya2FzIGRpdGFuZGFpICIKKyJiZXJzaWhcbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIFRhbXBpbGthbiBwZXNhbiBwZXNhblxuIgorIiAtYiBzdXBlciBibG9rICAgICAgICBHdW5ha2FuIHN1cGVyYmxvayBsYWluXG4iCisiIC1CIHVrdXJhbiBibG9rICAgICAgIFBha3NhIG1lbmdndW5ha2FuIHVrdXJhbiBibG9rIGtldGlrYSBtZW5jYXJpIHN1cGVyICIKKyJibG9rXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2thc2kgZGFyaSBqb3VybmFsIGx1YXJcbiIKKyIgLWwgYmFkX2Jsb2tfZmlsZSAgICAgVGFtYmFoa2FuIGtlIGRhZnRhciBibG9rIGJ1cnVrXG4iCisiIC1MIGJhZF9ibG9rX2ZpbGUgICAgIFNldCBkYWZ0YXIgYmxvayBidXJ1a1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IGJlcmthcyAoJTBkLiVkJSUgdGlkYWsga29udGludSksICV1LyV1IGJsb2tcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlOHUgaW5vZGUgdXNlZCAoJTIuMmYlJSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiU4dSBpbm9kZXMgdXNlZCAoJTIuMmYlJSlcbiIKK21zZ3N0clswXSAiJXUgaW5vZGVzIGRpc2Nhbi5cbiIKK21zZ3N0clsxXSAiJXUgaW5vZGVzIGRpc2Nhbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlOHUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiU4dSBub24tY29udGlndW91cyBkaXJlY3RvcmllcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICAjIGRhcmkgaW5vZGVzIGRlbmdhbiBpbmQvZGluZC90aW5kIGJsb2s6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5Cittc2dpZCAiICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICBLZWRhbGFtYW4gRXh0ZW5zaSBoaXN0b2dyYW06ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJThsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJThsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlOHUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIldSBpbm9kZXMsICV1IGJsb2tcbiIKK21zZ3N0clsxXSAiJXUgaW5vZGVzLCAldSBibG9rXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlOHUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiYmVya2FzIGJpYXNhIgorbXNnc3RyWzFdICJiZXJrYXMgYmlhc2EiCisKKyM6IGUyZnNjay91bml4LmM6MTc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTh1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTh1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiYmVya2FzIGJpYXNhIgorbXNnc3RyWzFdICJiZXJrYXMgYmlhc2EiCisKKyM6IGUyZnNjay91bml4LmM6MTc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgZGlyZWN0b3J5XG4iCittc2dpZF9wbHVyYWwgIiU4dSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICJkaXJla3RvcmkiCittc2dzdHJbMV0gImRpcmVrdG9yaSIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAia2FyYWt0ZXIgZGV2aWNlIgorbXNnc3RyWzFdICJrYXJha3RlciBkZXZpY2UiCisKKyM6IGUyZnNjay91bml4LmM6MTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgYmxvY2sgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICJibG9jayBkZXZpY2UiCittc2dzdHJbMV0gImJsb2NrIGRldmljZSIKKworIzogZTJmc2NrL3VuaXguYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGZpZm9zXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgbGlua1xuIgorbXNnaWRfcGx1cmFsICIlOHUgbGlua3NcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTh1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyWzFdICJzeW1ib2xpYyBsaW5rIgorCisjOiBlMmZzY2svdW5peC5jOjE5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAic3ltYm9saWMgbGluayIKK21zZ3N0clsxXSAic3ltYm9saWMgbGluayIKKworIzogZTJmc2NrL3VuaXguYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IHNvY2tldHNcbiIKK21zZ3N0clswXSAic29ja2V0IgorbXNnc3RyWzFdICJzb2NrZXQiCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk3OSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgImtldGlrYSBzZWRhbmcgbWVuZW50dWthbiBhcGFrYWggJXMgc2VkYW5nIGRpbW91bnQuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzICVzLlxuIgorbXNnc3RyICJQZXJpbmdhdGFuISAlcyBzZWRhbmcgZGltb3VudC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNDAKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbGFuanV0a2FuLCBtZW1iYXRhbGthbi5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNDIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiXGFcYVxhXGFQRVJJTkdBVEFOISEhIFNpc3RlbSBiZXJrYXMgdGVsYWggdGVycGFzYW5nLiBKaWthIGFuZGEgbGFuanV0a2FuICIKKyJhbmRhICoqKkFLQU4qKipcbiIKKyJiaXNhIG1lbnllYmFia2FuIGtlcnVzYWthbiAqKipQQVJBSCoqKiBkaSBzaXN0ZW0gYmVya2FzLlxhXGFcYVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI0NworbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiQXBha2FoIGFuZGEgeWFraW4gaW5naW4gbWVsYW5qdXRrYW4iCisKKyM6IGUyZnNjay91bml4LmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgInBlbWVyaWtzYWFuIGRpYmF0YWxrYW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzM5Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBiZXJpc2kgc2VidWFoIGZpbGUgc3lzdGVtIGRlbmdhbiBlcnJvcnMiCisKKyM6IGUyZnNjay91bml4LmM6MzQxCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiB0aWRhayBiZXJzaWggc2V0ZWxhaCBkaXVubW91bnQuIgorCisjOiBlMmZzY2svdW5peC5jOjM0MworbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgc3VwZXJibG9rIHV0YW1hIG1lbWlsaWtpIGZlYXR1cmUgYmVyYmVkYSBkYXJpIGJhY2t1cCIKKworIzogZTJmc2NrL3VuaXguYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgdGVsYWggZGltb3VudCAldSBrYWxpIHRhbnBhIGRpbGFrdWthbiBwZW1lcmlrc2FhbiIKKworIzogZTJmc2NrL3VuaXguYzozNTQKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorIiBtZW1pbGlraSBzaXN0ZW0gYmVya2FzIHlhbmcgd2FrdHUgdGVyYWtoaXIgZGlwZXJpa3NhIGJlcmFkYSBkaSBtYXNhIHlhbmcgIgorImFrYW4gZGF0YW5nIgorCisjOiBlMmZzY2svdW5peC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiB0ZWxhaCBsZXdhdCAldSBoYXJpIHRhbnBhIGRpbGFrdWthbiBwZW1lcmlrc2FhbiIKKworIzogZTJmc2NrL3VuaXguYzozNjkKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBwZW1lcmlrc2FhbiBkaXBha3Nha2FuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IGJlcnNpaCwgJXUvJXUgYmVya2FzLCAldS8ldSBibG9rIgorCisjOiBlMmZzY2svdW5peC5jOjQyMQorbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHBlbWVyaWtzYWFuIGRpYmF0YWxrYW47IHBvd2VyIG1lbmdndW5ha2FuIGJhdGVyZSkiCisKKyM6IGUyZnNjay91bml4LmM6NDI0Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChwZW1lcmlrc2FhbiBkaWxha3VrYW4gc2V0ZWxhaCBtb3VudCBzZWxhbmp1dG55YSkiCisKKyM6IGUyZnNjay91bml4LmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAocGVtZXJpa3NhYW4gZGlsYWt1a2FuIGRhbGFtICVsZCBtb3VudHMpIgorCisjOiBlMmZzY2svdW5peC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJFUlJPUjogVGlkYWsgZGFwYXQgbWVtYnVrYSAvZGV2L251bGwgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIlZlcnNpIEVBIHRpZGFrIHZhbGlkLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiUGlsaWhhbiBleHRlbmRlZCB0aWRhayBkaWtldGFodWk6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4IGVycm9yIGRhbGFtIGJlcmthcyBrb25maWd1cmFzaSBlMmZzY2sgKCVzLCBiYXJpcyAjJWQpXG4iCisiXHQlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRXJyb3IgbWVtdmFsaWRhc2kgYmVya2FzIGRlc2tyaXBzaSAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3NzAKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJJbmZvcm1hc2kgRmlsZSBiZXJrYXMgY29tcGxldGlvbiB0aWRhayB2YWxpZCIKKworIzogZTJmc2NrL3VuaXguYzo3ODUKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIiIKKyJIYW55YSBzYWxhaCBzYXR1IGRhcmkgcGlsaWhhbiAtcC8tYSwgLW4gYXRhdSAteSB5YW5nIGJvbGVoIGRpc3Blc2lmaWthc2lrYW4uIgorCisjOiBlMmZzY2svdW5peC5jOjgwNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiUGlsaWhhbiAtdCB0aWRhayBkaWxheWFuaSBkYWxhbSB2ZXJzaSBlMmZzY2sgaW5pLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNyBlMmZzY2svdW5peC5jOjkwOSBtaXNjL3R1bmUyZnMuYzo4MTEgbWlzYy90dW5lMmZzLmM6MTEwMAorIzogbWlzYy90dW5lMmZzLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZXJlc29sdmUgJyVzJyIKKworIzogZTJmc2NrL3VuaXguYzo4ODgKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIlBpbGloYW4gLW4gZGFuIC1EIHRpZGFrIGtvbXBhdGliZWwuIgorCisjOiBlMmZzY2svdW5peC5jOjg5MworbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiUGlsaWhhbiAtbiBkYW4gLWMgdGlkYWsga29tcGF0aWJlbC4iCisKKyM6IGUyZnNjay91bml4LmM6ODk4Cittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJQaWxpaGFuIC1uIGRhbiAtbC8tTCB0aWRhayBrb21wYXRpYmVsLiIKKworIzogZTJmc2NrL3VuaXguYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICIiCisiUGlsaWhhbiAtYyBkYW4gLWwvLUwgdGlkYWsgYm9sZWggZGlndW5ha2FuIHNlY2FyYSBiZXJzYW1hYW4gZGFsYW0gc2F0dSAiCisid2FrdHUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgYnVrYW4gc2VidWFoIGludGVnZXJcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQXJndW1lbnQgYnVrYW4gbnVtZXJpayB0aWRhayB2YWxpZCB1bnR1ayAtJWMgKFwiJXNcIilcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgaW50ZXJ2YWwgaXMgJXUgc2Vjb25kcyBhbmQgdG90YWwgd2FpdCB0aW1lIGlzICV1IHNlY29uZHMuIFBsZWFzZSAiCisid2FpdC4uLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEwNiBlMmZzY2svdW5peC5jOjExMTEKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJrZXRpa2EgbWVuc2V0dXAgc3VwZXJibG9rIgorCisjOiBlMmZzY2svdW5peC5jOjExMTMgbWlzYy90dW5lMmZzLmM6MTkxMgorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIkVycm9yOiBleHQyZnMgdmVyc2kgbGlicmFyaSBrZXRpbmdnYWxhbiBqYW1hbiFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTcxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgdW50dWsgbWVuZ2luaXNpYWxpc2FzaSBhcGxpa2FzaSIKKworIzogZTJmc2NrL3VuaXguYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0TWVuZ2d1bmFrYW4gJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwNgorbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImJ1dHVoIHRlcm1pbmFsIHVudHVrIHJlcGFyYXNpIGludGVyYWN0aXZlIgorCisjOiBlMmZzY2svdW5peC5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzOiAlcyBtZW5jb2JhIG1lbWJhY2t1cCBibG9rLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI1OAorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlN1cGVyYmxvayB0aWRhayB2YWxpZCwiCisKKyM6IGUyZnNjay91bml4LmM6MTI1OQorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJEZXNrcmlwc2kgZ3J1cCB0ZXJsaWhhdCBidXJ1ay4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzOiAlcyBtZW5jb2JhIG1lbWJhY2t1cCBibG9rLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBrZW1iYWxpIGtlIHN1cGVyYmxvY2sgYXNsaVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDEKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiUmV2aXNpIHNpc3RlbSBiZXJrYXMga2VsaWhhdGFubnlhIHRlcmxhbHUgdGluZ2dpIHVudHVrIHZlcnNpIGUyZnNjayBpbmkuXG4iCisiKEF0YXUgc2lzdGVtIGJlcmthcyBzdXBlcmJsb2sgdGVya29ydXBzaSlcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzA3Cittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiTXVuZ2tpbmthbiBpbmkgc2VidWFoIHBhcnRpc2kgZGVuZ2FuIHBhbmphbmcgbm9sP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJBbmRhIGhhcnVzIG1lbWlsaWtpICVzIGFrc2VzIGtlIHNpc3RlbSBiZXJrYXMgYXRhdSBtZW5qYWRpIHJvb3RcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE1Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJNdW5na2luIHRpZGFrIGFkYSBhdGF1IHNlYnVhaCBwZXJhbmdrYXQgc3dhcD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE4Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKyJTaXN0ZW0gYmVya2FzIGRpbW91bnQgYXRhdSBkaWJ1a2Egc2VjYXJhIGV4Y2x1c2l2ZWx5IG9sZWggYXBsaWthc2kgbGFpbj9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzIxCisjLCBmdXp6eQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIk11bmdraW4gdGlkYWsgYWRhIGF0YXUgc2VidWFoIHBlcmFuZ2thdCBzd2FwP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjQKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRpc2sgdGVycHJvdGVrc2kgdW50dWsgZGl0dWxpczsgZ3VuYWthbiBwaWxpaGFuIC1uIHVudHVrIG1lbGFrdWthbiBzZWNhcmEgIgorImJhY2Etc2FqYVxuIgorImRhbGFtIG1lbWVyaWtzYSBwZXJhbmdrYXQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM4OQorbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiRGFwYXRrYW4gdmVyc2kgeWFuZyBsZWJpaCBiYXJ1IGRhcmkgZTJmc2NrISIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgImtldGlrYSBtZW1lcmlrc2EgZXh0MyBqdXJuYWwgdW50dWsgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ0OAorbXNnaWQgIiIKKyJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSAiCisiY2hlY2suXG4iCittc2dzdHIgIiIKKyJQZXJpbmdhdGFuOiBtZWxld2F0a2FuIHJlY292ZXJ5IGp1cm5hbCBrYXJlbmEgc2VkYW5nIG1lbGFrdWthbiBwZW1lcmlrc2FhbiAiCisiZGkgc2lzdGVtIGJlcmthcyB5YW5nIGJhY2Etc2FqYSAocmVhZC1vbmx5KS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW5zZXQgc3VwZXJibG9rIGZsYWcgZGkgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJrZXRpa2EgbWVyZWNvdmVyeSBleHQzIGp1cm5hbCBkYXJpICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICIlcyBtZW1pbGlraSBmZWF0dXJlIHlhbmcgdGlkYWsgZGlzdXBwb3J0OiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHN1cHBvcnQgdW50dWsga29tcHJlc2kgYWRhbGFoIGV4cGVyaW1lbnRhbC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiRTJmc2NrIHRpZGFrIGRpa29tcGlsYXNpIGRlbmdhbiBsYXlhbmFuIEhUUkVFLFxuIgorIlx0IHRldGFwaSBzaXN0ZW0gYmVya2FzICVzIG1lbWlsaWtpIGRpcmVrdG9yaSBIVFJFRS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgImtldGlrYSBzZWRhbmcgbWVtYmFjYSBpbm9kZSBibG9rIGJ1cnVrIgorCisjOiBlMmZzY2svdW5peC5jOjE1NjgKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIiIKKyJJbmkgYnVrYW4gcGVydGFuZGEgYmFpaywgdGFwaSBraXRhIGFrYW4gdGV0YXAgbWVuY29iYSB1bnR1ayBtZW5lcnVza2FuLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIk1lbWJ1YXQganVybmFsICglZCBibG9rKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2MTkKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIFNlbGVzYWkuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYyMAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBqdXJuYWwgdGVsYWggZGlidWF0IGtlbWJhbGkgLSBzaXN0ZW0gYmVya2FzIHNla2FyYW5nIGV4dDMgbGFnaSAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjQzCittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIk1lbmd1bGFuZyBrZW1iYWxpIGUyZnNjayBkYXJpIGF3YWwuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjQ3Cittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgImtldGlrYSBtZXJlc2V0IGNvbnRleHQiCisKKyM6IGUyZnNjay91bml4LmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2NrIGRpYmF0YWxrYW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY1OQorbXNnaWQgImFib3J0ZWQiCittc2dzdHIgImRpYmF0YWxrYW4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gVEVMQUggVEVSTU9ESUZJS0FTSSAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogUEVSSU5HQVRBTjogU2lzdGVtIGJlcmthcyBtYXNpaCBtZW1pbGlraSBlcnJvcnMgKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcyMworbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAia2V0aWthIHNlZGFuZyBtZW5zZXQgaW5mb3JtYXNpIGNoZWNrc3VtIGRpIGdydXAgYmxvayIKKworIzogZTJmc2NrL3V0aWwuYzoxODkgbWlzYy91dGlsLmM6NzAKK21zZ2lkICJ5WSIKK21zZ3N0ciAieVkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNAorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPHk+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNgorbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOAorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiKHkvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIyCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJkaWJhdGFsa2FuIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzNworbXNnaWQgInllc1xuIgorbXNnc3RyICJ5YVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOQorbXNnaWQgIm5vXG4iCittc2dzdHIgInRpZGFrXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyB0aWRha1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IHlhXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAieWVzIgorbXNnc3RyICJ5YSIKKworIzogZTJmc2NrL3V0aWwuYzoyNTcKK21zZ2lkICJubyIKK21zZ3N0ciAidGlkYWsiCisKKyM6IGUyZnNjay91dGlsLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxlZ2FsIGJpdG1hcCBibG9rIHVudHVrICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI3NworbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgIm1lbWJhY2EgaW5vZGUgZGFuIGJsb2sgYml0bWFwIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbmNvYmEgdW50dWsgbWVtYmFjYSBiaXRtYXAgdW50dWsgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk3Cittc2dpZCAid3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyIKK21zZ3N0ciAibWVudWxpcyBibG9rIGRhbiBpbm9kZSBiaXRtYXBzIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW51bGlzIGJsb2sgZGFuIGlub2RlIGJpdG1hcCB1bnR1ayAlcyIKKworIzogZTJmc2NrL3V0aWwuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBURVJKQURJIElOS09OU0lURU5TSSBZQU5HIFRJREFLIERJSEFSQVBLQU47IEpBTEFOS0FOIGZzY2sgU0VDQVJBICIKKyJNQU5VQUwuXG4iCisiXHQoaS5lLCB0YW5wYSBwaWxpaGFuIC1hIGF0YXUgLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiTWVtb3JpIHlhbmcgZGlndW5ha2FuOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJNZW1vcmkgeWFuZyBkaWd1bmFrYW46ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ3YWt0dTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJ3YWt0dSB5YW5nIGRpamFsYW5pOiAlNi4zZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NiBlMmZzY2svdXRpbC5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAia2V0aWthICBtZW1iYWNhIGlub2RlICVsdSBkYWxhbSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzQgZTJmc2NrL3V0aWwuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgImtldGlrYSBtZW51bGlzIGlub2RlICVsdSBkYWxhbSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzYKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgImtldGlrYSBtZW5nYWxva2FzaWthbiB6ZXJvaXppbmcgYnVmZmVyIgorCisjOiBlMmZzY2svdXRpbC5jOjc4OAorbXNnaWQgIiIKKyJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgIgorInJ1bm5pbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2OQorIywgZnV6enkKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJzZWxlc2FpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46ICVzIFstYiB1a3VyYW5fYmxva10gWy1pIGJlcmthc19tYXN1a2FuXSBbLW8gYmVya2FzX2tlbHVhcmFuXSBbLSIKKyJzdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2tfZGlfc2VrYWxpXSBbLXAganVtbGFoX3RhaGFwXSBbLWUgbWFrc2ltYWxfYmxva19idXJ1a10gWy1kICIKKyJmYWt0b3JfZGVsYXlfYW50YXJhX2JhY2FdXG4iCisiICAgICAgIFstZSBwYXR0ZXJuX3Rlc10gWy10IHBhdHRlcm5fdGVzdCBbLi4uXV1dXG4iCisiICAgICAgIHBlcmFuZ2thdCBbYmxva190ZXJha2hpciBbYmxva19wZXJ0YW1hXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBQaWxpaGFuIC1uIGRhbiAtdyBhZGFsYWggbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBzZWxlc2FpLCAlcyBiZXJqYWxhbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiTWVtZXJpa3NhIGRlbmdhbiBwYXR0ZXJuIHJhbmRvbTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0MAorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICJNZW1lcmlrc2EgZGVuZ2FuIHBhdHRlcm4gMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgImtldGlrYSBtZW5jYXJpKHNlZWspIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIk5pbGFpIGFuZWggKCVsZCkgZGFsYW0gZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ2OQorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgImtldGlrYSBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAia2V0aWthIGRpIGF3YWwgaXRlcmFzaSBkYWZ0YXJhIGJsb2sgYnVydWsiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJrZXRpa2EgbWVuZ2Fsb2thc2lrYW4gYnVmZmVyIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJNZW1lcmlrc2EgYmxvayAlbHUga2UgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiTWVtZXJpa3NhIGJsb2sgYnVydWsgZGFsYW0gbW9kZSBiYWNhLXNhamEgKHJlYWQtb25seSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIk1lbWVyaWtzYSBibG9rIGJ1cnVrIChwZW1lcmlrc2FhbiBiYWNhLXNhamEpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI4IG1pc2MvYmFkYmxvY2tzLmM6NjM0IG1pc2MvYmFkYmxvY2tzLmM6Njc2CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgyMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgYmxvayBidXJ1aywgbWVtYmF0YWxrYW4gcGVtZXJpa3NhYW5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MDkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiTWVtZXJpa3NhIHVudHVrIGJsb2sgYnVydWsgZGFsYW0gbW9kZSBiYWNhLXR1bGlzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJEYXJpIGJsb2sgJWx1IGtlICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY2NgorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJNZW1iYWNhIGRhbiBtZW1iYW5kaW5na2FuOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzcxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJNZW1lcmlrc2EgdW50dWsgYmxvayBidXJ1ayBkYWxhbCBtb2RlIHRpZGFrLW1lcnVzYWsgYmFjYS10dWxpc1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJNZW1lcmlrc2EgdW50dWsgYmxvayBidXJ1ayAocGVtZXJpa3NhYW4gdGlkYWstbWVydXNhayBiYWNhLXR1bGlzKVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisiXG4iCisiSW50ZXJ1cHNpIHRlcnRhbmdrYXAsIG1lbWJlcnNpaGthblxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgImtldGlrYSBtZW1lcmlrYXMgZGF0YSBkaXR1bGlzLCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgc2VkYW5nIGRpbW91bnQ7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTAKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiYmFkYmxva3MgdGV0YXAgZGlwYWtzYWthbi4gTXVkYWgtbXVkYWhhbiAvZXRjL210YWIgdGlkYWsgYmVuYXJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImluaSB0aWRhayBhbWFuIHVudHVrIG1lbmphbGFua2FuIGJhZGJsb2NrcyFcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwIG1pc2MvdXRpbC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIiVzIGtlbGloYXRhbm55YSBzZWRhbmcgZGlndW5ha2FuIG9sZWggc3lzdGVtOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJiYWRibG9ja3MgZGlwYWtzYWthbiBzYWphLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJ0aWRhayB2YWxpZCAlcyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIHRlc3RfcGF0dGVybiAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjMKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorIk1ha3NpbXVtIGRhcmkgc2F0dSB0ZXN0X3BhdHRlcm4gYm9sZWggZGlzcGVzaWZpa2FzaSBkYWxhbSBtb2RlIGJhY2Etc2FqYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTY5Cittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiUmFuZG9tIHRlc3RfcGF0dGVybiB0aWRhayBkaXBlcmJvbGVoa2FuIGRhbGFtIG1vZGUgYmFjYS1zYWphIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbmVudHVrYW4gdWt1cmFuIHBlcmFuZ2thdDsgYW5kYSBoYXJ1cyBtZW5zcGVzaWZpa2FzaWthblxuIgorInVrdXJhbiBwZXJhbmdrYXQgc2VjYXJhIG1hbnVhbFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5lbnR1a2FrbiB1a3VyYW4gcGVyYW5na2F0IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTQKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJibG9rIHRlcmFraGlyIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDAKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiYmxvayBwZXJ0YW1hIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWx1IgorbXNnc3RyICJhd2FsIGJsb2sgdGlkYWsgdmFsaWQgKCVsdSk6IGhhcnVzIGxlYmloIGtlY2lsIGRhcmkgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJrZXRpa2EgbWVtYnVhdCBkYWZ0YXIgYmxvayBidXJ1ayBkYWxhbSBtZW1vcmkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI3NAorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImtldGlrYSBtZW5hbWJhaGthbiBkYWZ0YXIgYmxvayBidXJ1ayBkYWxhbSBtZW1vcmkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlRhaGFwIHNlbGVzYWksICV1IGJsb2sgYnVydWsgZGl0ZW11a2FuLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhY0RkZWlqc1N1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1SVmZdIFstKz1BYWNEZGVpanNTdV0gWy12IHZlcnNpXSBiZXJrYXMuLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJ2ZXJzaSBidXJ1ayAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZWxha3VrYW4gc3RhdGlzdGlrICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBmbGFncyBkaSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTcgbWlzYy9jaGF0dHIuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKK21zZ3N0ciAiTWVuZ2hhcHVzIHRhbmRhIGVrc3RlbnNpIHlhbmcgdGlkYWsgZGlkdWt1bmcgZGkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjIyIG1pc2MvY2hhdHRyLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIkZsYWdzIGRhcmkgJXMgZGlzZXQgc2ViYWdhaSAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgImtldGlrYSBtZW5zZXQgZmxhZ3MgZGkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaSBkYXJpICVzIGRpc2V0IHNlYmFnYWkgJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAia2V0aWthIG1lbnNldCB2ZXJzaSBkaSAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgcGF0aCB2YXJpYWJsZSBpbiBjaGF0dHJfZGlyX3Byb2MiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIHZhcmlhYmxlIHBhdGggZGkgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMyMgorbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IHRpZGFrIGtvbXBhdGliZWwgZGVuZ2FuIC0gZGFuICtcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMzAKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiSGFydXMgbWVuZ2d1bmFrYW4gJy12JywgPSwgLSBhdGF1ICtcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2s9PGp1bWxhaD5dIFstbyB1a3VyYW5ibG9rPTxiZXNhcj5dICIKKyJwZXJhbmdrYXRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorIywgZnV6enkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJibG9jayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OAorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cCAlbHU6IChibG9rICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgQ2hlY2tzdW0gMHglMDR4LCBpbm9kZSB5YW5nIHRpZGFrIGRpZ3VuYWthbiAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCAldSBpbm9kZSB5YW5nIHRpZGFrIGRpZ3VuYWthblxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXMgc3VwZXJibG9rIGRpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlV0YW1hIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICJDYWRhbmdhbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwIGRlc2tyaXBzaSBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9rIGRpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBHcnVwIGRlc2tyaXBzaSBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQmxvayBiaXRtYXAgZGkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIElub2RlIGJpdG1hcCBkaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDIKK21zZ2lkICIiCisiXG4iCisiICBJbm9kZSB0YWJsZSBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIElub2RlIHRhYmVsIGRpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICV1IGJsb2sgYmViYXMsICV1IGlub2RlIGJlYmFzLCAldSBkaXJla3RvcmklcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSBpbm9kZSB5YW5nIHRpZGFrIGRpZ3VuYWthblxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEJsb2sgYmViYXM6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI2OQorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBJbm9kZSBiZWJhczogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzAwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImtldGlrYSBtZW5jZXRhayBkYWZ0YXIgYmxvayBidXJ1ayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiQmxvayBidXJ1azogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzAyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBqdXJuYWwgaW5vZGUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgImtldGlrYSBtZW1idWthIGp1cm5hbCBpbm9kZSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2Egc3VwZXIgYmxvayBqdXJuYWwiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiRmFzaWxpdGFzIGp1cm5hbDogICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2OAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJVa3VyYW4ganVybmFsOiAgICAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiUGFuamFuZyBqdXJuYWw6ICAgICAgICAgICAldVxuIgorIlVydXRhbiBqdXJuYWw6ICAgICAgICAgICAgMHglMDh4XG4iCisiQXdhbCBkYXJpIGp1cm5hbDogICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIlBlbmdndW5hIGp1cm5hbDogICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDAxIG1pc2MvdHVuZTJmcy5jOjIxOAorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJrZXRpa2FuIG1lbWJhY2Egc3VwZXJibG9rIGp1cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmNhcmkgbm9tb3IgbWFnaWMgZGkganVybmFsIHN1cGVyYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiVWt1cmFuIGJsb2sganVybmFsOiAgICAgICAldVxuIgorIlBhbmphbmcganVybmFsOiAgICAgICAgICAgJXVcbiIKKyJCbG9rIHBlcnRhbWEganVybmFsOiAgICAgICV1XG4iCisiVXJ1dGFuIGp1cm5hbDogICAgICAgICAgICAweCUwOHhcbiIKKyJBd2FsIGRhcmkganVybmFsOiAgICAgICAgICV1XG4iCisiSnVtbGFoIHBlbmdndW5hIGRhcmkganVybmFsOiAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiUGVuZ2d1bmEganVybmFsOiAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjIgbWlzYy90dW5lMmZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIG1lbXBhcnNlIHBpbGloYW4hXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdXBlcmJsb2NrIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldGVyIHN1cGVyYmxvayB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRlciB1a3VyYW4tYmxvayB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgYnVydWsgZGlzcGVzaWZpa2FzaWthbjogJXNcbiIKKyJcbiIKKyJQaWxpaGFuIGV4dGVuZGVkIGRpcGlzYWhrYW4gZGVuZ2FuIGtvbWEsIGRhbiBib2xlaCBtZW1iYXdhIGFyZ3VtZW50IGRpbWFuYVxuIgorIlx0aW5pIGRpIHNldCBvZmYgb2xlaCBzZWJ1YWggdGFuZGEgc2FtYSBkZW5nYW4gKCc9JykuXG4iCisiXG4iCisiUGlsaWhhbiBleHRlbmRlZCB5YW5nIHZhbGlkIGFkYWxhaDpcbiIKKyJcdHN1cGVyYmxvY2s9PG5vbW9yIHN1cGVyYmxvaz5cbiIKKyJcdGJsb2Nrc2l6ZT08YmVzYXIgYmxvaz5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1NCBtaXNjL21rZTJmcy5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdE1lbmdndW5ha2FuICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1OTAgbWlzYy9lMmltYWdlLmM6MTMwOSBtaXNjL3R1bmUyZnMuYzoxOTIzCisjOiByZXNpemUvbWFpbi5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuY2FyaSBzdXBlcmJsb2sgc2lzdGVtIGJlcmthcyB5YW5nIHZhbGlkLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgbWVtYmFjYSBiaXRtYXBzOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcnNJUV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1yc0ldIHBlcmFuZ2thdCBpbWFnZV9maWxlXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIGJ1ZmZlciBoZWFkZXJcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTcxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJrZXRpa2EgbWVudWxpcyBzdXBlcmJsb2siCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgImtldGlrYSBtZW51bGlzIHRhYmVsIGlub2RlIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgYmxvayBiaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5MworbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJrZXRpa2EgbWVudWxpcyBpbm9kZSBiaXRtYXAiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IHRpZGFrIGRhcGF0IG1lbWJ1a2EgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiB0aWRhayBkYXBhdCBtZW5jYXJpIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZXJyb3IgbWVtYmFjYSBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBidWthbiBzZWJ1YWggZXh0MiBzaXN0ZW0gYmVya2FzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IGxhYmVsIHRlcmxhbHUgcGFuamFuZywgbWVtb3RvbmcuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IHRpZGFrIGRhcGF0IG1lbmNhcmkgc3VwZXJibG9rIGxhZ2lcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBlcnJvciBtZW51bGlzIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIlBlbmdndW5hYW46IGUybGFiZWwgcGVyYW5na2F0IFtsYWJlbGJhcnVdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgPGJlcmthcyB0cmFuc2Frc2k+IDxzaXN0ZW0gYmVya2FzPlxuIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIkdhZ2FsIG1lbWJhY2EgZGF0YSBmaWxlc3lzdGVtIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjYyIG1pc2MvZTJ1bmRvLmM6ODMgbWlzYy9lMnVuZG8uYzoxMDggbWlzYy9lMnVuZG8uYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9mZXRjaCAlc1xuIgorbXNnc3RyICJHYWdhbCB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyB3YWt0dSBtb3VudCB0aWRhayBjb2NvayAldVxuIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIFVVSUQgdGlkYWsgY29jb2sgXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJHYWdhbCB0ZGJfb3BlbiAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkVycm9yIGtldGlrYSBtZW5lbnR1a2FuIGFwYWthaCAlcyBzdWRhaCBkaW1vdW50LlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIiIKKyJlMnVuZG8gc2VoYXJ1c255YSBoYW55YSBkaWphbGFua2FuIGRpIHNpc3RlbSBiZXJrYXMgeWFuZyBzdWRhaCBkaXVubW91bnRcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiR2FnYWwgbWVtYnVrYSAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJCYWxhc2FuIHVrdXJhbiB0cmFuc2Frc2kgJXpkIGRpIGxva2FzaSAlbGRcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIkdhZ2FsIG1lbnVsaXMgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIlBFUklOR0FUQU46IHRpZGFrIGRhcGF0IG1lbWJ1a2EgJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiUEVSSU5HQVRBTjogZm9ybWF0IGJ1cnVrIGRpIGJhcmkgJWQgZGFyaSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcYVxhXGFQRVJJTkdBVEFOOiAvZXRjL2ZzdGFiIGFuZGEgdGlkYWsgYmVyaXNpIGZzY2sgcGFzc25vXG4iCisiXHRwaWxpaGFuLiBTYXlhIGFrYW4ga2x1ZGUgYXJvdW5kIHRoaW5ncyB1bnR1ayBhbmRhLCB0ZXRhcGkgYW5kYVxuIgorIlx0c2VoYXJ1c255YSBtZW1iZXR1bGthbiBiZXJrYXMgL2V0Yy9mc3RhYiBhbmRhIHNlY2VwYXRueWEuXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiB0aWRhayBkaXRlbXVrYW5cbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IHR1bmdndTogVGlkYWsgYWRhIGxhZ2kgcHJvc2VzIGFuYWs/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIlBlcmluZ2F0YW4uLi4gJXMgdW50dWsgcGVyYW5na2F0ICVzIGtlbHVhciBkZW5nYW4gc2lueWFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IHN0YXR1cyBhZGFsYWggJXgsIHNlaGFydXNueWEgdGlkYWsgcGVybmFoIHRlcmphZGkuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiQmVyYWtoaXIgZGVuZ2FuICVzIChzdGF0dXMga2VsdWFyICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlczogRXJyb3IgJWQga2V0aWthIG1lbmphbGFua2FuIGZzY2suJXMgdW50dWsgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJTZW11YSBhdGF1IHRpZGFrIHNhbWEgc2VrYWxpIGRhcmkgdGlwZSBzaXN0ZW0gYmVya2FzIGRpbGV3YXRrYW4gbWVsYWx1aSAiCisicGlsaWhhbiAtdCBoYXJ1cyBkaXdhbGlcbiIKKyJkZW5nYW4gJ25vJyBhdGF1ICchJy5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayB0aXBlIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiBtZWxld2F0a2FuIGJhcmlzIGJ1cnVrIGRpIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgZGVuZ2FuIHRpZGFrIG5vbCBmc2NrICIKKyJ0YWhhcCBub21vclxuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiB0aWRhayBkYXBhdCBtZW1lcmlrc2EgJXM6IGZzY2suJXMgdGlkYWsgZGl0ZW11a2FuXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIk1lbWVyaWtzYSBzZW11YSBmaWxlc3l0ZW0uXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0tbWVudW5nZ3UtLSAodGFoYXAgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICIiCisiVXNhZ2U6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiBmc2NrIFstQU1OUFJUVl0gLUMgW2ZkXSBdIFstdCBmc3R5cGVdIFtmcy1waWxpaGFuXSAiCisiW2ZpbGVzeXMgLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiB0ZXJsYWx1IGJhbnlhayBwZXJhbmdrYXRcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHRlcmxhbHUgYmFueWFrIGFyZ3VtZW5cbiIKKworIzogbWlzYy9sc2F0dHIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogJXMgWy1SVmFkbHZdIFtiZXJrYXMuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiS2V0aWthIG1lbWJhY2EgZmxhZ3MgZGkgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJLZXRpa2EgbWVtYmFjYSB2ZXJzaSBkaSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgWy1jfC1sIG5hbWFmaWxlXSBbLWIgdWt1cmFuLWJsb2tdIFstZiB1a3VyYW4tZnJhZ21lbl1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSB1a3VyYW4taW5vZGVdIFstSiBwaWxpaGFuLWp1cm5hbF1cbiIKKyJcdFstRyB1a3VyYW4gbWV0YSBncnVwXSBbLU4ganVtbGFoLWRhcmktaW5vZGVdXG4iCisiXHRbLW0gcGVyc2VudGFzaS1yZXNlcnZlZC1ibG9rXSBbLW8gc2lzdGVtLW9wZXJhc2ktcGVtYnVhdF1cbiIKKyJcdFstZyBibG9rLXBlci1ncnVwXSBbLUwgbGFiZWwtdm9sdW1lXSBbLU0gZGlyZWt0b3JpLXRlcmFraGlyLWRpcGFzYW5nXVxuIgorIlx0Wy1PIGZhc2lsaXRhc1ssLi4uXV0gWy1yIHJldmlzaS1mc10gWy1FIHBpbGloYW4tdGFtYmFoYW5bLC4uLl1dXG4iCisiXHRbLVQgdHlwZS1mc10gWy1VIFVVSURdIFstam5xdkZLU1ZdIHBlcmFuZ2thdCBbanVtbGFoLWJsb2tdXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiTWVuamFsYW5rYW4gcGVyaW50YWg6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgdW50dWsgbWVuamFsYW5rYW4gJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoyMjgKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgImtldGlrYSBtZW1wcm9zZXMgZGFmdGFyIGRhcmkgYmxvayBidXJ1ayBkYXJpIGFwbGlrYXNpIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiQmxvayAlZCBkYWxhbSBkYWVyYWggZGVza3JpcHNpIHN1cGVyYmxvay9ncnVwIHV0YW1hIGJ1cnVrLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NworIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiQmxvayAldSBzYW1wYWkgJXUgaGFydXMgZGFsYW0ga2VhZGFhbiBiYWlrIHVudHVrIG1lbWJ1YXQgc2VidWFoIHNpc3RlbSAiCisiYmVya2FzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJNZW1iYXRhbGthbi4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQZXJpbmdhdGFuOiBkZXNrcmlwc2kgc3VwZXJibG9rL2dydXAgY2FkYW5nYW4gZGkgYmxvayAldSBiZXJpc2lcbiIKKyJcdGJsb2sgYnVydWsuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk5Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgImtldGlrYSBtZW5hbmRhaSBibG9rIGJ1cnVrIHNlYmFnYWkgZGlndW5ha2FuIgorCisjOiBtaXNjL21rZTJmcy5jOjMxNgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIk1lbnVsaXMgdGFiZWwgaW5vZGU6ICIKKworIzogbWlzYy9ta2UyZnMuYzozMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUaWRhayBkYXBhdCBtZW51bGlzICVkIGJsb2sgZGFsYW0gdGFiZWwgaW5vZGUgZGltdWxhaSBkaSAldTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNTEgbWlzYy9ta2UyZnMuYzoyMTc1IG1pc2MvbWtlMmZzLmM6MjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJzZWxlc2FpICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgImtldGlrYSBtZW1idWF0IGRpcmVrdG9yaSByb290IgorCisjOiBtaXNjL21rZTJmcy5jOjM2OQorbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgaW5vZGUgcm9vdCIKKworIzogbWlzYy9ta2UyZnMuYzozODMKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJrZXRpa2EgbWVuc2V0IGtlcGVtaWxpa2FuIGlub2RlIHJvb3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAxCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgImtldGlrYSBtZW1idWF0IC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQwOAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgImtldGlrYSBtZW5jYXJpIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAia2V0aWthIG1lbmdla3NwYW5zaSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAia2V0aWthIG1lbnNldCBpbm9kZSBibG9rIGJ1cnVrIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJLZWhhYmlzYW4gbWVtb3JpIG1lbmdoYXB1cyBzZWt0b3IgJWQtJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiUGVyaW5nYXRhbjogdGlkYWsgZGFwYXQgbWVtYmFjYSBibG9rIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHRpZGFrIGRhcGF0IG1lbmdoYXB1cyBzZWt0b3IgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA1Cittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAia2V0aWthIG1lbmdpbmlzaWFsaXNhc2kganVybmFsIHN1cGVyYmxvayIKKworIzogbWlzYy9ta2UyZnMuYzo1MTMKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIk1lbmdvc29uZ2thbiBwZXJhbmdrYXQganVybmFsOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgImtldGlrYSBtZW5nb3NvbmdrYW4gcGVyYW5na2F0IGp1cm5hbCAoYmxvayAldSwganVtbGFoICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo1NDMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMganVybmFsIHN1cGVyYmxvayIKKworIzogbWlzYy9ta2UyZnMuYzo1NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJwZXJpbmdhdGFuOiAldSBibG9rIHRpZGFrIGRpZ3VuYWthbi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIGxhYmVsPSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJUaXBlIE9TOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiVWt1cmFuIGJsb2s9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJVa3VyYW4gYmxvaz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIlVrdXJhbiBwZWNhaGFuPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiU3RyaWRlPSV1IGJsb2ssIExlYmFyIHN0cmlwZT0ldSBibG9rXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGlub2RlcywgJXUgYmxva1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIldSBibG9rICglMi4yZiUlKSByZXNlcnZlZCB1bnR1ayBzdXBlciB1c2VyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiRGF0YSBibG9rIHBlcnRhbWE9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiTWFrc2ltdW0gYmxvayBzaXN0ZW0gYmVya2FzPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgZ3J1cCBibG9rXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGdydXAgYmxva1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgY2x1c3RlcnMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2sgcGVyIGdydXAsICV1IHBvdG9uZ2FuIHBlciBncnVwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvayBwZXIgZ3J1cCwgJXUgcG90b25nYW4gcGVyIGdydXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpbm9kZSBwZXIgZ3J1cFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogIgorbXNnc3RyICJDYWRhbmdhbiBzdXBlcmJsb2sgZGlzaW1wYW4gZGkgYmxvazogIgorCisjOiBtaXNjL21rZTJmcy5jOjY4NyBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgInBpbGloYW4gbW91bnQgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldGVyIHN0cmlkZSB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0ZXIgc3RyaXBlLXdpZHRoIHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjczOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRlciByZXNpemUgdGlkYWsgdmFsaWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICJSZXNpemUgbWFrc2ltdW0gaGFydXMgbGViaWggYmVzYXIgZGFyaXBhZGEgdWt1cmFuIHNpc3RlbSBiZXJrYXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiT24tbGluZSByZXNpemluZyB0aWRhayBkaWxheWFuaSBkZW5nYW4gc2lzdGVtIGJlcmthcyByZXZpc2kgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0ZXIgc3RyaWRlIHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBpbGloYW4gYnVydWsgZGlzcGVzaWZpa2FzaWthbjogJXNcbiIKKyJcbiIKKyJQaWxpaGFuIGV4dGVuZGVkIGRpcGlzYWhrYW4gZGVuZ2FuIGtvbWEsIGRhbiBib2xlaCBtZW5nZ3VuYWthbiBhcmd1bWVuIHlhbmdcbiIKKyJcdGRpIHNldCBvZmYgb2xlaCB0YW5kYSBzYW1hIGRlbmdhbiAoJz0nKS5cbiIKKyJcbiIKKyJQaWxpaGFuIGV4dGVuZGVkIHlhbmcgdmFsaWQgYWRhbGFoOlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgZGFsYW0gYmxvaz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2sgZGFsYW0gYmxvaz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIHVrdXJhbiBtYWtzaW11bSBkYWxhbSBibG9rPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB1bnR1ayBtZW5vbmFrdGlma2FuLCAxIHVudHVrIG1lbmdha3RpZmthbj5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBlcmluZ2F0YW46IFJBSUQgc3RyaXBlLXdpZHRoICV1IGJ1a2FuIHNlYnVhaCBldmVuIG11bHRpcGxlIGRhcmkgc3RyaWRlICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRheCBlcnJvciBkYWxhbSBta2UyZnMgYmVya2FzIGtvbmZpZ3VyYXNpICglcywgYmFyaXMgIyVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4OTEgbWlzYy90dW5lMmZzLmM6MzkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJQaWxpaGFuIHNpc3RlbSBiZXJrYXMgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTAzIG1pc2MvdHVuZTJmcy5jOjM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1vdW50IG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgInBpbGloYW4gbW91bnQgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBlcmluZ2F0YW4hIEJlcmthcyBta2UyZnMuY29uZiBhbmRhIHRpZGFrIG1lbmRlZmluaXNpa2FuIHRpcGUgc2lzdGVtIGJlcmthcyAiCisiJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBbmRhIG11bmdraW4gYnV0dWggdW50dWsgbWVtYXNhbmcgc2VidWFoIHVwZGF0ZSBkYXJpIGJlcmthcyBta2UyZnMuY29uZi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJNZW1iYXRhbGthbi4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBtZW1vcmkgdW50dWsgbmFtYSBiZXJrYXMgdGRiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIlVrdXJhbiBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IHVrdXJhbmJsb2sgJWQgdGlkYWsgYmVyZ3VuYSBkYWxhbSBrZWJhbnlha2FuIHN5c3RlbS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJVa3VyYW4gYmxvayB0aWRhayB2YWxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjIKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiSnVtbGFoIGlsZWdhbCB1bnR1ayBibG9rIHBlciBncnVwIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjcKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAiYmxvayBwZXIgZ3J1cCBoYXJ1cyBrZWxpcGF0YW4gZGFyaSA4IgorCisjOiBtaXNjL21rZTJmcy5jOjEzNzUKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJKdW1sYWggaWxlZ2FsIHVudHVrIHVrdXJhbiBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODEKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgInVrdXJhbiBmbGV4X2JnIGhhcnVzIGtlbGlwYXRhbiBkYXJpIDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAicmFzaW8gZGFyaSBpbm9kZSB0aWRhayB2YWxpZCAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxNQorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiZGFsYW0gbWFsbG9jIHVudHVrIGJhZF9ibG9ja19maWxlbmFtZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNDI1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAicGVyc2VudGFzaSByZXNlcnZlZCBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ0MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAibGV2ZWwgcmV2aXNpIGJ1cnVrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAidWt1cmFuIGlub2RlIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJqdW1sYWggaW5vZGUgYnVydWsgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkyCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTAwCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUwIG1pc2MvbWtlMmZzLmM6MjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSBtZW1idWthIHBlcmFuZ2thdCBqdXJuYWwgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICIiCisiUGVyYW5na2F0IGp1cm5hbCB1a3VyYW5ibG9rICglZCkgbGViaWgga2VjaWwgZGFyaXBhZGEgbWluaW11bSB1a3VyYW5ibG9rICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyBqb3VybmFsIGRldmljZSdzIGJsb2Nrc2l6ZTogJWRcbiIKK21zZ3N0ciAiTWVuZ2d1bmFrYW4gcGVyYW5na2F0IGp1cm5hbCB1a3VyYW5ibG9rOiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImp1bWxhaCBibG9rIHRpZGFrIHZhbGlkIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInNpc3RlbSBiZXJrYXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU5NiByZXNpemUvbWFpbi5jOjM3NAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5lbnR1a2FuIHVrdXJhbiBzaXN0ZW0gYmVya2FzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIlRpZGFrIGRhcGF0IG1lbmVudHVrYW4gdWt1cmFuIHBlcmFuZ2thdDsgYW5kYSBoYXJ1cyBtZW5zcGVzaWZpa2FzaWthblxuIgorInVrdXJhbiBkYXJpIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjA5Cittc2dpZCAiIgorIkRldmljZSBzaXplIHJlcG9ydGVkIHRvIGJlIHplcm8uICBJbnZhbGlkIHBhcnRpdGlvbiBzcGVjaWZpZWQsIG9yXG4iCisiXHRwYXJ0aXRpb24gdGFibGUgd2Fzbid0IHJlcmVhZCBhZnRlciBydW5uaW5nIGZkaXNrLCBkdWUgdG9cbiIKKyJcdGEgbW9kaWZpZWQgcGFydGl0aW9uIGJlaW5nIGJ1c3kgYW5kIGluIHVzZS4gIFlvdSBtYXkgbmVlZCB0byByZWJvb3RcbiIKKyJcdHRvIHJlLXJlYWQgeW91ciBwYXJ0aXRpb24gdGFibGUuXG4iCittc2dzdHIgIiIKKyJVa3VyYW4gcGVyYW5na2F0IHlhbmcgZGlsYXBvcmthbiBub2wuIFBhcnRpc2kgeWFuZyBkaXNwZXNpZmlrYXNpa2FuIHRpZGFrICIKKyJ2YWxpZCwgYXRhdVxuIgorIlx0dGFiZWwgcGFydGlzaSB0aWRhayBkaWJhY2Ega2VtYmFsaSBzZXRlbGFoIG1lbmphbGFua2FuIGZkaXNrLCBrYXJlbmFcbiIKKyJcdHBhcnRpc2kgeWFuZyBkaXViYWggc2VkYW5nIHNpYnVrIGRhbiBzZWRhbmcgZGlndW5ha2FuLiBBbmRhIGJpc2EgbWVsYWt1a2FuICIKKyJyZWJvb3RcbiIKKyJcdHVudHVrIG1lbWJhY2Ega2VtYmFsaSB0YWJlbCBwYXJ0aXNpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjYKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyBsZWJpaCBiZXNhciBkYXJpIHVrdXJhbiBwZXJhbmdrYXQgeWFuZyB0ZXJsaWhhdC4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJHYWdhbCB1bnR1ayBtZW1wYXJzZSBkYWZ0YXIgdHlwZSBmc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IFVrdXJhbiBkYXJpIHBlcmFuZ2thdCAlcyB0ZXJsYWx1IGJlc2FyIHVudHVrIGRpZXhwcmVzaWthbiBkYWxhbSAzMiBiaXRcbiIKKyJcdG1lbmdndW5ha2FuIHNlYnVhaCB1a3VyYW5ibG9rIGRhcmkgJWQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcxNgorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgImZzX3R5cGVzIHVudHVrIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyBmZWF0dXJlcyB0aWRhayBkaWxheWFuaSBkZW5nYW4gc2lzdGVtIGJlcmthcyByZXZpc2kgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlNwYXJzZSBzdXBlcmJsb2sgdGlkYWsgZGlsYXlhbmkgZGVuZ2FuIHNpc3RlbSBiZXJrYXMgcmV2aXNpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkp1cm5hbCB0aWRhayBkaWxheWFuaSBkZW5nYW4gc2lzdGVtIGJlcmthcyByZXZpc2kgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInBlcnNlbnRhc2kgcmVzZXJ2ZWQgYmxvayB0aWRhayB2YWxpZCAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJyZXNpemVfaW5vZGUgZGFuIG1ldGFfYmcgZmVhdHVyZSB0aWRhayBzYWxpbmcga29tcGF0aWJlbC5cbiIKKyJNZXJha2EgdGlkYWsgZGFwYXQgZGlha3RpZmthbiBzZWNhcmEgYmVyc2FtYWFuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5lbnR1a2FuIHVrdXJhbiBzZWt0b3IgcGVyYW5na2F0IgorCisjOiBtaXNjL21rZTJmcy5jOjE3OTUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5lbnR1a2FuIHVrdXJhbiBmaXNpayBzZWt0b3IiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgyOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICIiCisia2V0aWthIHNlZGFuZyBtZWxha3VrYW4ga29uZmlndXJhc2kgdWt1cmFuIGJsb2s7dGVybGFsdSBrZWNpbCB1bnR1ayAiCisicGVyYW5na2F0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKyJQZXJpbmdhdGFuOiB1a3VyYW4gYmxvayB5YW5nIGRpc3Blc2lmaWthc2lrYW4gJWQgbGViaWgga2VjaWwgZGFyaXBhZGEgdWt1cmFuICIKKyJmaXNpayBzZWt0b3IgcGVyYW5na2F0ICVkLCB0ZXRhcCBkaWxhbmp1dGthblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIlBlcmluZ2F0YW46IFRpZGFrIGRhcGF0IG1lbmRhcGF0a2FuIGdlb21ldHJpIHVudHVrIHBlcmFuZ2thdCAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIiVzIHBlbnllc3VhaWFuIG9mc2V0IHNlYmVzYXIgJWx1IGJ5dGVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorIkluaSBtdW5na2luIGFrYW4gYmVydWp1bmcga2UgcGVyZm9ybWEgeWFuZyB0aWRhayBiYWlrLCBkaXNhcmFua2FuIHVudHVrICIKKyJtZWxha3VrYW4gcGVtYmFnaWFuIHVsYW5nLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIlZC1ieXRlIGJsb2tzIHRlcmxhbHUgYmVzYXIgdW50dWsgc3lzdGVtIChtYWtzaW1hbCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorIlBlcmluZ2F0YW46ICVkLWJ5dGUgYmxvayB0ZXJsYWx1IGJlc2FyIHVudHVrIHN5c3RlbSAobWFrc2ltYWwgJWQpLCBkaXBha3NhICIKKyJ1bnR1ayBtZWxhbmp1dGthblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MjAKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9rIHRpZGFrIGRpbGF5YW5pIGRpIG5vbi1zcGFyc2Ugc2lzdGVtIGJlcmthcyIKKworIzogbWlzYy9ta2UyZnMuYzoxOTI5Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImp1bWxhaCBibG9rIHBlciBncnVwIGRpbHVhciBqYW5na2F1YW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk0NAorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisiRmxleF9iZyBmZWF0dXJlIHRpZGFrIGRpYWt0aWZrYW4sIGphZGkgdWt1cmFuIGZsZXhfYncgbXVuZ2tpbiB0aWRhayBkYXBhdCAiCisiZGlzcGVzaWZpa2FzaWthbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgInVrdXJhbiBpbm9kZSB0aWRhayB2YWxpZCAlZCAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgInRlcmxhbHUgYmFueWFrIGlub2RlICglbGx1KSwgbmFpa2thbiByYXNpbyBpbm9kZT8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgInRlcmxhbHUgYmFueWFrIGlub2RlICglbGx1KSwgc3Blc2lmaWthc2lrYW4gPCAywrMyIGlub2RlIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZV9jb3VudCAoJXUpIHRlcmxhbHUgYmVzYXIgdW50dWsgc2VidWFoXG4iCisiXHRzaXN0ZW0gYmVya2FzIGRlbmdhbiAlbHUgYmxvaywgc3Blc2lmaWthbiBsZWJpaCB0aW5nZ2kgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0YXRhdSBsZWJpaCByZW5kYWgganVtbGFoIGlub2RlICgtTikuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1lbWFrc2EgbWVudWxpcyBzaXN0ZW0gYmVya2FzIHlhbmcgc3VkYWggYWRhOyBpbmkgdGlkYWsgZGFwYXQgZGl1bmRvIGRlbmdhbiAiCisicGVyaW50YWg6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMjgKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSBtZW1idWF0IGZpbGUganVybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjIxNTQKKyMsIGZ1enp5Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIk1lbmdndW5ha2FuIHBlcmFuZ2thdCBqdXJuYWwgdWt1cmFuYmxvazogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTcwCisjLCBmdXp6eQorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiZ2FnYWwuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAia2V0aWthIG1lbnNldHVwIHN1cGVyYmxvayIKKworIzogbWlzYy9ta2UyZnMuYzoyMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAib3MgdGlkYWsgZGlrZXRhaHVpIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiTWVudWxpcyB0YWJlbCBpbm9kZTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MjUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbmdhbG9rYXNpa2FuIHRhYmVsIHNpc3RlbSBiZXJrYXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICJrZXRpa2EgbWVudWxpcyBibG9rIGJpdG1hcCIKKworIzogbWlzYy9ta2UyZnMuYzoyNDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgImtldGlrYSBtZW5na29zb25na2FuIGJsb2sgJXUgZGkgYWtoaXIgZGFyaSBzaXN0ZW0gYmVya2FzIgorCisjOiBtaXNjL21rZTJmcy5jOjI0OTAKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJrZXRpa2EgbWVucmVzZXJ2ZSBibG9rIHVudHVrIG9ubGluZSByZXNpemUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwMSBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJqdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiTWVuYW1iYWhrYW4ganVybmFsIGtlIHBlcmFuZ2thdCAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0a2V0aWthIG1lbmNvYmEgdW50dWsgbWVuYW1iYWhrYW4ganVybmFsIGtlIHBlcmFuZ2thdCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTI1IG1pc2MvbWtlMmZzLmM6MjU1NyBtaXNjL3R1bmUyZnMuYzo2NjkgbWlzYy90dW5lMmZzLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAic2VsZXNhaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiTWVsZXdhdGthbiBwZW1idWF0YW4ganVybmFsIGRhbGFtIG1vZGUgc3VwZXItc2FqYVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJNZW1idWF0IGp1cm5hbCAoJXUgYmxvayk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTUzCittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWF0IGp1cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTY0IG1pc2MvdHVuZTJmcy5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICJNZW51bGlzIHN1cGVyYmxvayBkYW4gaW5mb3JtYXNpIGFrdW50YXNpIHNpc3RlbSBiZXJrYXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJQZXJpbmdhdGFuLCBtZW1pbGlraSBtYXNhbGFoIG1lbnVsaXMgZGlsdWFyIHN1cGVyYmxvay4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisic2VsZXNhaVxuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiUGVuZ2d1bmFhbjogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogJXMgcGVyYW5na2F0Li4uXG4iCisiXG4iCisiVGFtcGlsa2FuIGluZm9ybWFzaSBwYXJ0aXNpIHVudHVrIHNldGlhcCBwZXJhbmdrYXQgeWFuZyBkaWJlcmlrYW4uXG4iCisiQ29udG9oOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW1idWthICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1wZXJvbGVoIGdlb21ldHJ5IGRhcmkgJXM7ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtcGVyb2xlaCB1a3VyYW4gZGFyaSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgYXdhbD0lOGQgdWt1cmFuPSU4bHUgYWtoaXI9JTZkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNworbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJUb2xvbmcgamFsYW5rYW4gZTJmc2NrIHVudHVrIHNpc3RlbSBiZXJrYXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiAlcyBbLWMganVtbGFoX21heF9tb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdydXBdXG4iCisiXHRbLXQgaW50ZXJ2YWxbZHxtfHddXSBbLWpdIFstSiBwaWxpaGFuX2p1cm5hbF0gWy1sXVxuIgorIlx0Wy1tIHBlcnNlbnRhc2lfcmVzZXJ2ZWRfYmxva10gWy1vIFteXXBpbGloYW5fbW91bnRbLC4uLl1dIFxuIgorIlx0Wy1yIGp1bWxhaF9yZXNlcnZlZF9ibG9rXSBbLXUgcGVuZ2d1bmFdIFstQyBqdW1sYWhfbW91bnRdIFstTCAiCisibGFiZWxfdm9sdW1lXVxuIgorIlx0Wy1FIHBpbGloYW4tdGFtYmFoYW5bLC4uLl1dIFstVCB3YWt0dV90ZXJha2hpcl9kaXBlcmlrc2FdIFstVSBVVUlEXVxuIgorIlx0Wy1JIHVrdXJhbl9pbm9kZV9iYXJ1XSBwZXJhbmdrYXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgbWVtYnVrYSBqdXJuYWwgZXh0ZXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgYnVrYW4gc2VidWFoIHBlcmFuZ2thdCBqdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyNQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIkp1cm5hbCBzdXBlcmJsb2sgdGlkYWsgZGl0ZW11a2FuIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzYKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgVVVJRCB0aWRhayBkaXRlbXVrYW4gZGFsYW0gcGVyYW5na2F0IGp1cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjU3Cittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY1Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkp1cm5hbCBkaWhhcHVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAia2V0aWthIG1lbWJhY2EgYml0bWFwIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTcKK21zZ2lkICJ3aGlsZSBjbGVhcmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJrZXRpa2EgbWVuZ2hhcHVzIGlub2RlIGp1cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6MzI4Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJrZXRpa2EgbWVudWxpcyBpbm9kZSBqdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKGRhbiByZWJvb3Qgc2V0ZWxhaCBpbmkhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiTWVuZ2hhcHVzIGZlYXR1cmUgc2lzdGVtIGJlcmthcyAnJXMnIHRpZGFrIGRpbGF5YW5pLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJUYXRhbmFuIGZpdHVyIHNpc3RlbSBiZXJrYXMgJyVzJyB0aWRhayBkaWxheWFuaS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDExCittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkhhc19qb3VybmFsIGZlYXR1cmUgbXVuZ2tpbiBoYW55YSBiaXNhIGRpaGFwdXMga2V0aWthIHNpc3RlbSBiZXJrYXMgc2VkYW5nXG4iCisiZGltb3VudCBiYWNhLXNhamEgYXRhdSB0aWRhayBkaW1vdW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTkKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJOZWVkc19yZWNvdmVyeSBmbGFnIGRpc2V0LiBUb2xvbmcgamFsYW5rYW4gZTJmc2NrIHNlYmVsdW0gbWVuZ2hhcHVzXG4iCisiaGFzX2pvdXJuYWwgZmxhZy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDM4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJIdWdlX2ZpbGUgZmVhdHVyZSBoYW55YSBib2xlaCBkaWhhcHVzIGtldGlrYSBzaXN0ZW0gYmVya2FzIHNlZGFuZ1xuIgorImRpbW91bnQgYmFjYS1zYWphIGF0YXUgdGlkYWsgZGltb3VudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDczCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBiaXRtYXAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbWJhY2EgaW5vZGUgYmxvayBidXJ1ayIKKworIzogbWlzYy90dW5lMmZzLmM6NTE5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiTWVuZ2hhcHVzIGZsZXhfYmcgZmxhZyBha2FuIG1lbmdha2liYXRrYW4gc2lzdGVtIGJlcmthcyBtZW5qYWRpXG4iCisidGlkYWsga29uc2lzdGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzAKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkh1Z2VfZmlsZSBmZWF0dXJlIGhhbnlhIGJvbGVoIGRpaGFwdXMga2V0aWthIHNpc3RlbSBiZXJrYXMgc2VkYW5nXG4iCisiZGltb3VudCBiYWNhLXNhamEgYXRhdSB0aWRhayBkaW1vdW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1OTAKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjYzNQorbXNnaWQgIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIGEgam91cm5hbC5cbiIKK21zZ3N0ciAiU2lzdGVtIGJlcmthcyB0ZWxhaCBtZW1pbGlraSBzZWJ1YWgganVybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHRrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW1idWthIGp1cm5hbCBkaSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiTWVtYnVhdCBqdXJuYWwgZGkgcGVyYW5na2F0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJrZXRpa2EgbWVuYW1iYWhrYW4gc2lzdGVtIGJlcmthcyBkaSBqdXJuYWwgZGkgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3MQorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiTWVtYnVhdCBqdXJuYWwgaW5vZGU6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjgwCittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJcdGtldGlrYSBtZW5jb2JhIG1lbWJ1YXQgZmlsZSBqdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIG1lbXBhcnNlIHBpbGloYW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4NQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVtcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg3MCBtaXNjL3R1bmUyZnMuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJqdW1sYWggbW91bnQgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJwZXJpbGFrdSBlcnJvciBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIm5hbWEgZ2lkL2dydXAgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJpbnRlcnZhbCBidXJ1ayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgInJhc2lvIHJlc2VydmVkIGJsb2sgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAwMworbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItbyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy90dW5lMmZzLmM6MTAxMgorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyBoYW55YSBib2xlaCBkaXNwZXNpZmlrYXNpa2FuIHNla2FsaSIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgImp1bWxhaCByZXNlcnZlZCBibG9rIGJ1cnVrIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIKK21zZ3N0ciAibmFtYSB1aWQvcGVuZ2d1bmEgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJ1a3VyYW4gaW5vZGUgYnVydWsgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICJVa3VyYW4gaW5vZGUgaGFydXMga2VsaXBhdGFuIGRhcmkgZHVhIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiTWVuc2V0IG1ha3NpbWFsIGp1bWxhaCBtb3VudCBrZSAlZFxuIgorbXNnc3RyWzFdICJNZW5zZXQgbWFrc2ltYWwganVtbGFoIG1vdW50IGtlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaGFzaCBhbGdvcml0aG06ICVzXG4iCittc2dzdHIgIkFsZ29yaXRtYSBoYXNoIHRpZGFrIHZhbGlkOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIk1lbnNldCBkZWZhdWx0IGFsZ29yaXRtYSBoYXNoIGtlICVzICglZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiUGlsaWhhbiBidXJ1ayBkaXNwZXNpZmlrYXNpa2FuLlxuIgorIlxuIgorIlBpbGloYW4gZXh0ZW5kZWQgZGlwaXNhaGthbiBvbGVoIGtvbWEsIGRhbiBib2xlaCBtZW5nYW1iaWwgYXJndW1lblxuIgorIlx0eWFuZyBkaSBzZXQgb2Ygb2xlaCBzZWJ1YWggdGFuZGEgc2FtYSBkZW5nYW4gKCc9JykuXG4iCisiXG4iCisiUGlsaWhhbiBleHRlbmRlZCB5YW5nIHZhbGlkIGFkYWxhaDpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayB1a3VyYW4gY2h1bmsgZGFsYW0gYmxvaz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrIGRhbGFtIGJsb2s+XG4iCisiXHRoYXNoX2FsZz08YWxnb3JpdG1hX2hhc2g+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzIzCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICJrZXRpa2EgbWVtYmFjYSBiaXRtYXAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIm1lbWJhY2EgaW5vZGUgZGFuIGJsb2sgYml0bWFwIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo3ODQKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2sgYWthbiBkaXBpbmRhaGthbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc0OAorbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorIkdhZ2FsIHVudHVrIG1lbmdhbG9rYXNpa2FuIGJpdG1hcCBibG9rIGtldGlrYSBtZW5pbmdrYXRrYW4gdWt1cmFuIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTQKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGluY3JlYXNlIGlub2RlIHNpemUgXG4iCittc2dzdHIgIlRpZGFrIGN1a3VwIHJ1YW5nIHVudHVrIG1lbmluZ2thdGthbiB1a3VyYW4gaW5vZGUgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIkdhZ2FsIHVudHVrIG1lbWluZGFoa2FuIGJsb2sga2V0aWthIHBlbmd1YmFoYW4gdWt1cmFuIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzkxCittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKyJFcnJvciBkYWxhbSBtZW5ndWJhaCB1a3VyYW4gZGFyaSB1a3VyYW4gaW5vZGUuXG4iCisiSmFsYW5rYW4gZTJ1bmRvIHVudHVrIHVuZG8gcGVydWJhaGFuIHNpc3RlbSBiZXJrYXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MTgKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5nYWxva2FzaWthbiBtZW1vcmkgdW50dWsgbmFtYSBiZXJrYXMgdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAia2V0aWthIG1lbmNvYmEgdW50dWsgbWVuZ2hhcHVzICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiVW50dWsgbWVuZ2VtYmFsaWthbiBvcGVyYXNpIHR1bmUyZnMgbW9ob24gamFsYW5rYW4gcGVyaW50YWhcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiVWt1cmFuIGlub2RlIHRlbGFoICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNocmlua2luZyB0aGUgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIk1lbmdlY2lsa2FuIHVrdXJhbiBpbm9kZSB5YW5nIHRpZGFrIGRpbGF5YW5pXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIk1lbnNldCBtYWtzaW1hbCBqdW1sYWggbW91bnQga2UgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCBtb3VudCBzZWthcmFuZyBrZSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiTWVuc2V0IHBlcmlsYWt1IGVycm9yIGtlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJNZW5zZXQgZ2lkIHJlc2VydmVkIGJsb2sga2UgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIk1lbnNldCBpbnRlcnZhbCBkaWFudGFyYSBjaGVjayBrZSAlbHUgZGV0aWtcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIk1lbnNldCBpbnRlcnZhbCBkaWFudGFyYSBjaGVjayBrZSAlbHUgZGV0aWtcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiTWVuc2V0IHBlcnNlbnRhc2kgcmVzZXJ2ZWQgYmxvayBrZSAlZyUlICgldSBibG9rKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgImp1bWxhaCByZXNlcnZlZCBibG9rIHRlcmxhbHUgYmVzYXIgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCByZXNlcnZlZCBibG9rIGtlICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNpc3RlbSBiZXJrYXMgdGVsYWggbWVtaWxpa2kgc3BhcnNlIHN1cGVyYmxvay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2sgZmxhZyBkaXNldC4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk1lbmdoYXB1cyBzcGFyc2Ugc3VwZXJmbGFnIHRpZGFrIGRpbGF5YW5pLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJNZW5zZXQgd2FrdHUgc2lzdGVtIGJlcmthcyB0ZXJha2hpciBkaXBlcmlrc2Ega2UgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIk1lbnNldCB1aWQgcmVzZXJ2ZWQgYmxvayBrZSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwMgorbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTIwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiVWt1cmFuIGlub2RlIG11bmdraW4gYWthbiBiZXJ1YmFoIGtldGlrYSBzaXN0ZW0gYmVya2FzIHRpZGFrIGRpbW91bnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTMKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIkludmFsaWQgZm9ybWF0IFVVSURcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2NgorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJVa3VyYW4gaW5vZGUgbXVuZ2tpbiBha2FuIGJlcnViYWgga2V0aWthIHNpc3RlbSBiZXJrYXMgdGlkYWsgZGltb3VudC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3NAorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiUGVuZ3ViYWhhbiB1a3VyYW4gaW5vZGUgdGlkYWsgZGlkdWt1bmcgdW50dWsgc2lzdGVtIGJlcmthcyBkZW5nYW4gZmxleF9iZ1xuIgorImZpdHVyIGFrdGlmLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAiTWVuc2V0IHVrdXJhbiBpbm9kZSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIkdhZ2FsIHVudHVrIG1lbWluZGFoa2FuIGJsb2sga2V0aWthIHBlbmd1YmFoYW4gdWt1cmFuIGlub2RlIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiTWVuc2V0IHVrdXJhbiBzdHJpZGUga2UgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJNZW5zZXQgbGViYXIgc3RyaXBlIGtlICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiTWVuc2V0IGp1bWxhaCBtb3VudCBzZWthcmFuZyBrZSAlZFxuIgorCisjOiBtaXNjL3V0aWwuYzo3NAorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIkphbGFua2FuIHNhamE/ICh5LG4pICIKKworIzogbWlzYy91dGlsLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbGFrdWthbiBzdGF0aXN0aWsgJXMgLS0tICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjkyCittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIlBlcmFuZ2thdCBrZWxpaGF0YW5ueWEgdGlkYWsgYWRhOyBhcGFrYWggYW5kYSBtZW5zcGVzaWZpa2FzaWthbm55YSBkZW5nYW4gIgorImJlbmFyP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGJ1a2FuIHNlYnVhaCBwZXJhbmdrYXQgYmxvayBzcGVzaWFsLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgYWRhbGFoIHNlbHVydWggcGVyYW5na2F0bSBidWthbiBoYW55YSBzZWJ1YWggcGFydGlzaSFcbiIKKworIzogbWlzYy91dGlsLmM6MTU0Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIm1rZTJmcyBkaXBha3Nha2FuIHNhamEuIE11ZGFoIG11ZGFoYW4gL2V0Yy9tdGFiIHRpZGFrIGJlbmFyLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgInRpZGFrIGFrYW4gbWVtYnVhdCBzZWJ1YWggJXMgZGlzaW5pIVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNjYKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWtlMmZzIGRpcGFrc2FrYW4gc2FqYS5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2Fsb2thc2lrYW4gbWVtb3JpIHVudHVrIG1lbXBhcnNlIHBpbGloYW4ganVybmFsIVxuIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUaWRhayBkYXBhdCBtZW5lbXVrYW4gcGVyYW5na2F0IGp1cm5hbCB5YW5nIGNvY29rICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJQaWxpaGFuIGp1cm5hbCBidXJ1ayBkaXNwZXNpZmlrYXNpa2FuLlxuIgorIlxuIgorIlBpbGloYW4ganVybmFsIGRpcGlzYWhrYW4gZGVuZ2FuIGtvbWEsIGRhbiBib2xlaCBtZW5nZ3VuYWthbiBhcmd1bWVuIHlhbmdcbiIKKyJcdGRpc2V0IG9mZiBkZW5nYW4gc2VidWFoIHRhbmRhIHNhbWEgZGVuZ2FuICgnPScpLlxuIgorIlxuIgorIlBpbGloYW4ganVybmFsIHZhbGlkIGFkYWxhaDpcbiIKKyJcdHNpemU9PHVrdXJhbiBqdXJuYWwgZGFsYW0gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxwZXJhbmdrYXQganVybmFsPlxuIgorIlxuIgorIlVrdXJhbiBqdXJuYWwgaGFydXMgZGlhbnRhcmEgMTAyNCBkYW4gMTAyNDAwMDAgYmxvayBzaXN0ZW0gYmVya2FzLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNTgKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiU2lzdGVtIGJlcmthcyB0ZXJsYWx1IGtlY2lsIHVudHVrIHNlYnVhaCBqdXJuYWxcbiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiVWt1cmFuIGp1cm5hbCB5YW5nIGRpbWludGEgYWRhbGFoICVkIGJsb2s7IGluaSBoYXJ1cyBiZXJhZGFcbiIKKyJkaWFudGFyYSAxMDI0IGRhbiAxMDI0MDAwMCBibG9rLiBNZW1iYXRhbGthbi5cbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiVWt1cmFuIGp1cm5hbCB0ZXJsYWx1IGJlc2FyIHVudHVrIHNpc3RlbSBiZXJrYXMuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiU2lzdGVtIGJlcmthcyBpbmkgYWthbiBzZWNhcmEgb3RvbWF0aXMgZGlwZXJpa3NhIHNldGlhcCAlZCBtb3VudHMgYXRhdVxuIgorIiVnIGhhcmksIHlhbmcgbWFuYSB5YW5nIGRhdGFuZyBsZWJpaCBkdWx1LiBHdW5ha2FuIHR1bmUyZnMgLWMgYXRhdSAtaVxuIgorInVudHVrIG1lbmd1YmFobnlhLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIC1rXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE1NAorIywgZnV6enkKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICIlczogdGVybGFsdSBiYW55YWsgYXJndW1lblxuIgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwNQorIywgZnV6enkKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJQYW5qYW5nIHN0cmlkZSB0aWRhayB2YWxpZCIKKworIzogbWlzYy91dWlkZC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW1wYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiVGlkYWsgZGFwYXQgbWVuZ2h1YnVuZ2thbiAlaTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjMxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJUaWRhayBkYXBhdCBtZW5naHVidW5na2FuICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICJFcnJvciBtZW1iYWNhIEBpICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIlZlcnNpIEVBIHRpZGFrIHZhbGlkLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc2IG1pc2MvdXVpZGQuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTMzIG1pc2MvdXVpZGQuYzo1NjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkVycm9yIG1lbWJ1YXQgL0BsIEBkICglcyk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJQZW5nZ3VuYWFuOiAlcyBbLXJdIFstdF1cbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgRXh0ZW50IGR1bXA6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHROdW09JWQsIFVrdXJhbj0lZCwgQ3Vyc29yPSVkLCBTb3J0ZWQ9JWRcbiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJQZW5nZ3VuYWFuOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBwZXJhbmdrYXQgIgorIlt1a3VyYW5fYmFydV1cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIk1lbXBlcmJlc2FyIHRhYmVsIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIk1lbWluZGFoa2FuIGJsb2siCisKKyM6IHJlc2l6ZS9tYWluLmM6NzEKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTWVtZXJpa3NhIHRhYmVsIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTWVtcGVyYmFydWkgcmVmZXJlbnNpIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJNZW1pbmRhaGthbiB0YWJlbCBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiVGFoYXAgdGlkYWsgZGlrZXRhaHVpPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiQXdhbCB0YWhhcCAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJrZXRpa2EgbWVtYnVrYSAlcyIKKworIzogcmVzaXplL21haW4uYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAia2V0aWthIG1lbXBlcm9sZWggaW5mb3JtYXNpIHN0YXRpc3RpayB1bnR1ayAlcyIKKworIzogcmVzaXplL21haW4uYzozMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCittc2dzdHIgIiIKKyIlczogS29tYmluYXNpIGRhcmkgZmxleF9iZyBkYW5cbiIKKyJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgdGlkYWsgZGlsYXlhbmkgb2xlaCByZXNpemUyZnMuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQ0IHJlc2l6ZS9tYWluLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiVG9sb25nIGphbGFua2FuICdlMmZzY2sgLWYgJXMnIHRlcmxlYmloIGRhaHVsdS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiRXN0aW1hc2kgbWluaW11bSBkYXJpIHVrdXJhbiBzaXN0ZW0gYmVya2FzOiAldVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJVa3VyYW4gaW5vZGUgYmFydSB0aWRhayB2YWxpZDogJXNcbiIKKworIzogcmVzaXplL21haW4uYzozOTIKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIlVrdXJhbiBiYXJ1IGxlYmloIGtlY2lsIGRhcmlwYWRhIG1pbmltdW0gKCV1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQxMAorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiUGFuamFuZyBzdHJpZGUgdGlkYWsgdmFsaWQiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiUGFydGlzaSAoYXRhdSBwZXJhbmdrYXQpIGhhbnlhIGJlcmlzaSAldSAoJWRrKSBibG9rLlxuIgorIkFuZGEgbWVtaW50YSB1a3VyYW4gYmFydSAldSBibG9rLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJTaXN0ZW0gYmVya2FzIHRlbGFoIG1lbWlsaWtpIHBhbmphbmcgJXUgYmxvay4gVGlkYWsgYWRhIHlhbmcgaGFydXMgIgorImRpbGFrdWthbiAhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiTWVuZ3ViYWggc2lzdGVtIGJlcmthcyBkaSAlcyBrZSAldSAoJWRrKSBibG9rLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJrZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5ndWJhaCB1a3VyYW4gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiTW9ob24gamFsYW5rYW4gJ2UyZnNjayAtZnkgJXMnIHVudHVrIG1lbWJldHVsa2FuIHNpc3RlbSBiZXJrYXNcbiIKKyJzZXRlbGFoIHBlbWJhdGFsYW4gb3BlcmFzaSBwZW5ndWJhaGFuIHVrdXJhbi5cbiIKKworIzogcmVzaXplL21haW4uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlNpc3RlbSBiZXJrYXMgZGkgJXMgc2VrYXJhbmcgbWVtaWxpa2kgcGFuamFuZyAldSBibG9rLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIHVudHVrIG1lbW90b25nICVzIgorCisjOiByZXNpemUvb25saW5lLmM6NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyBvbi1saW5lIHJlc2l6aW5nIHJlcXVpcmVkXG4iCittc2dzdHIgIlNpc3RlbSBiZXJrYXMgZGkgJXMgZGltb3VudCBkaSAlczsgb24tbGluZSByZXNpemluZyBkaWJ1dHVoa2FuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0NAorIywgZnV6enkKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJPbi1saW5lIHNocmlua2luZyBkYXJpICV1IGtlICV1IHRpZGFrIGRpbGF5YW5pLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6NjMKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIHRpZGFrIG1lbGF5YW5pIG9ubGluZSByZXNpemluZyIKKworIzogcmVzaXplL29ubGluZS5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbWJ1a2EgbW91bnRwb2ludCAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjkyIHJlc2l6ZS9vbmxpbmUuYzoxMTYKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiSWppbiBkaXRvbGFrIGtldGlrYSBtZW5ndWJhaCB1a3VyYW4gc2lzdGVtIGJlcmthcyIKKworIzogcmVzaXplL29ubGluZS5jOjk1IHJlc2l6ZS9vbmxpbmUuYzoxMjIKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJLZXRpa2EgbWVtZXJpa3NhIHVudHVrIGxheWFuYW4gb24tbGluZSByZXNpemluZyIKKworIzogcmVzaXplL29ubGluZS5jOjEwNworIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIktlcm5lbCB0aWRhayBtZWxheWFuaSBvbmxpbmUgcmVzaXppbmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIktlcm5lbCB0aWRhayBtZWxheWFuaSBvbmxpbmUgcmVzaXppbmciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIk1lbmphbGFua2FuIHNlYnVhaCBvbi1saW5lIHJlc2l6ZSBkYXJpICVzIGtlICV1ICglZGspIGJsb2suXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNjIKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJLZXRpa2EgbWVuY29iYSB1bnR1ayBtZW5nZXh0ZW4gZ3J1cCB0ZXJha2hpciIKKworIzogcmVzaXplL29ubGluZS5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiS2V0aWthIG1lbmNvYmEgdW50dWsgbWVuYW1iYWhrYW4gZ3J1cCAjJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJTaXN0ZW0gYmVya2FzIGRpICVzIGRpbW91bnQgZGkgJXMsIGRhbiBvbi1saW5lIHJlc2l6aW5nIHRpZGFrIGRpc3VwcG9ydCBkaSAiCisic3lzdGVtIGluaS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJpbm9kZSAoJWxsdSkgaGFydXMgbGViaWgga2VjaWwgZGFyaSAldSIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjU3NgorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAicmVzZXJ2ZWQgYmxvayIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjc4OQorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGEtZGF0YSBibG9rIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiU2VoYXJ1c255YSB0aWRhayBwZXJuYWggdGVyamFkaTogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi40IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCisjLCBmdXp6eQorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIm1lbWJhY2Egam91cm5hbCBzdXBlcmJsb2NrXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgR3J1cCBkZXNrcmlwc2kgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwgR3J1cCBkZXNrcmlwc2kgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzUKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNgorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1lbnVsaXMgaW5vZGUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1lbnVsaXMgaW5vZGUgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYSBibG9jayBiaXRtYXAiCittc2dzdHIgIm1lbWJhY2EgaW5vZGUgZGFuIGJsb2sgYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibWVtYmFjYSBpbm9kZSBkYW4gYmxvayBiaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAia2V0aWthIG1lbnVsaXMgdGFiZWwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJNZW1lcmlrc2EgdGFiZWwgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDUKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJTaXN0ZW0gYmVya2FzIGxlYmloIGJlc2FyIGRhcmkgdWt1cmFuIHBlcmFuZ2thdCB5YW5nIHRlcmxpaGF0LiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiLCBJbm9kZSBiaXRtYXAgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiAgQmxvayBiaXRtYXAgZGkgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk5vbW9yIGRhcmkgYmxvY2sgdGlkYWsgbGVnYWwhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiTm9tb3IgZGFyaSBibG9jayB0aWRhayBsZWdhbCFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1CisjLCBmdXp6eQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiVGlkYWsgY3VrdXAgcnVhbmcgdW50dWsgbWVuaW5na2F0a2FuIHVrdXJhbiBpbm9kZSBcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVyZHVhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVyZHVhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImJsb2sgdGlkYWsgbGFuZ3N1bmcgYmVydGlnYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3CisjLCBmdXp6eQorbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiICBCbG9rIGJpdG1hcCBkaSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiwgSW5vZGUgYml0bWFwIGRpICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIiVzIG1lbWlsaWtpIGZlYXR1cmUgeWFuZyB0aWRhayBkaXN1cHBvcnQ6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIiVzIG1lbWlsaWtpIGZlYXR1cmUgeWFuZyB0aWRhayBkaXN1cHBvcnQ6IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWVycm9yIG1lbmdhbG9rYXNpa2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgzCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayB0aXBlIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbmdhbG9rYXNpa2FuIG1lbW9yaSB1bnR1ayB0aXBlIHNpc3RlbSBiZXJrYXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorIywgZnV6enkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkRpcmVrdG9yaSBibG9jayAldSAoIyVkKSBrb3NvbmcgZGFsYW0gaW5vZGUgJXVcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorIywgZnV6enkKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIk1lbmdndW5ha2FuIHBlcmFuZ2thdCBqdXJuYWwgdWt1cmFuYmxvazogJWRcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkp1cm5hbCBzdXBlcmJsb2sgdGlkYWsgZGl0ZW11a2FuIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorIywgZnV6enkKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgImtldGlrYSBtZW5jb2JhIG1lbWJ1a2EganVybmFsIGV4dGVybmFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIkp1cm5hbCBzdXBlcmJsb2sgdGlkYWsgZGl0ZW11a2FuIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgImFleHRlbmRlZCBhdHRyaWJ1dGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIjxpbm9kZSBkZXNrcmlwc2kgZ3J1cD4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDUKK21zZ2lkICJSZXNpemUgaW5vZGUgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2CisjLCBmdXp6eQorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorIkdhZ2FsIHVudHVrIG1lbmdhbG9rYXNpa2FuIGJpdG1hcCBibG9rIGtldGlrYSBtZW5pbmdrYXRrYW4gdWt1cmFuIGlub2RlXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTEKK21zZ2lkICJUREI6IE91dCBvZiBtZW1vcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKKyMsIGZ1enp5Cittc2dpZCAiVERCOiBJbnZhbGlkIHBhcmFtZXRlciIKK21zZ3N0ciAiUGFyYW1ldGVyIHN0cmlkZSB0aWRhayB2YWxpZDogJXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAieGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICIvQGwgdGlkYWsgZGl0ZW11a2FuLiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworIywgZnV6enkKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJrZXRpa2EgbWVtYnVhdCAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgImtldGlrYSBtZW1idWF0IC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJQaWxpaGFuIHNpc3RlbSBiZXJrYXMgdGlkYWsgdmFsaWQgZGlzZXQ6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIlRpZGFrIGRhcGF0IG1lbnlhbGluIGZpbGU6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIlBhbmphbmcgc3RyaWRlIHRpZGFrIHZhbGlkIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfZGF0YV90IgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBpbmRleCBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wgaW5kZXggaW5vZGU+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wgZGF0YSBpbm9kZT4iCisKKyN+IG1zZ2lkICJAZyAlZyBAYiBAQiB1bmluaXRpYWxpemVkIGJ1dCBAaSBAQiBpbiB1c2UuXG4iCisjfiBtc2dzdHIgIkBnICVnIEBiIEBCIHRpZGFrIHRlcmluaXRpYWxpc2FzaSB0ZXRhcGkgQGkgQEIgc2VkYW5nIGRpZ3VuYWthbi5cbiIKKworI34gbXNnaWQgIkBpICVpIHNob3VsZCBub3QgaGF2ZSBFT0ZCTE9DS1NfRkwgc2V0IChzaXplICVJcywgbGJsayAlcilcbiIKKyN+IG1zZ3N0ciAiQGkgJWkgc2VoYXJ1c255YSBFT0ZCTE9DS1NfRkwgdGlkYWsgYWt0aWYgKHVrdXJhbiAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICIlcyBpcyBtb3VudGVkLiAgIgorI34gbXNnc3RyICIlcyBzZWRhbmcgZGltb3VudC4gICAiCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJUaWRhayBkYXBhdCBtZW5lbnR1a2FuIHVrdXJhbiBqdXJuYWwiCisKKyN+IG1zZ2lkICJzaG9ydCB3cml0ZSAob25seSAlZCBieXRlcykgZm9yIHdyaXRpbmcgaW1hZ2UgaGVhZGVyIgorI34gbXNnc3RyICJtZW51bGlzIHBlbmRlayAoaGFueWEgJWQgYnl0ZXMpIHVudHVrIG1lbnVsaXMgaGVhZGVyIGltYWdlIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgInVrdXJhbiBwb3Rvbmdhbi9mcmFnbWVuIHRpZGFrIHZhbGlkIC0gJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJQZXJpbmdhdGFuOiBmcmFnbWVudCB0aWRhayBkaWxheWFuaS4gTWVuZ2FiYWlrYW4gcGlsaWhhbiAtZlxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiTWVtYW5nZ2lsIEJMS0RJU0NBUkQgZGFyaSAlbGx1IGtlICVsbHUgIgorCisjfiBtc2dpZCAic3VjY2VlZGVkLlxuIgorI34gbXNnc3RyICJiZXJoYXNpbC5cbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiSnVybmFsIFRJREFLIGRpaGFwdXNcbiIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorCisjfiBtc2dpZCAiU2V0dGluZyBzaXN0ZW0gYmVya2FzIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorI34gbXNnc3RyICJNZW5zZXQgc2lzdGVtIGJlcmthcyBmZWF0dXJlICclcycgdGlkYWsgZGlsYXlhbmkuXG4iCisKKyN+IG1zZ2lkICJAUyBkb2Vzbid0IGhhdmUgaGFzX0BqIGZsYWcsIGJ1dCBoYXMgZXh0MyBAaiAlcy5cbiIKKyN+IG1zZ3N0ciAiQFMgdGlkYWsgbWVtaWxpa2kgQGogdGFuZGEsIHRldGFwaSBtZW1pbGlraSBleHQzIEBqICVzLlxuIgorCisjfiBtc2dpZCAiRXJyb3Igd2hpbGUgZGVsZXRpbmcgZXh0ZW50OiAlbVxuIgorI34gbXNnc3RyICJFcnJvciBrZXRpa2EgbWVuZ2hhcHVzIGV4dGVuc2k6ICVtXG4iCisKKyN+IG1zZ2lkICJSZWNyZWF0ZSBqb3VybmFsIHRvIG1ha2UgdGhlIGZpbGVzeXN0ZW0gZXh0MyBhZ2Fpbj9cbiIKKyN+IG1zZ3N0ciAiTWVtYnVhdCBrZW1iYWxpIGp1cm5hbCB1bnR1ayBtZW1idWF0IHNpc3RlbSBiZXJrYXMgZXh0MyBsYWdpP1xuIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAidWt1cmFuIGJsb2sgYnVydWsgLSAlcyIKKworI34gbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHdyaXRlIGJsb2NrIGJpdG1hcHMgZm9yICVzIgorI34gbXNnc3RyICJrZXRpa2Egc2VkYW5nIG1lbmNvYmEgdW50dWsgbWVudWxpcyBibG9rIGJpdG1hcCB1bnR1ayAlcyIKKworI34gbXNnaWQgIiVzIGZhaWxlZCBmb3IgJXM6ICVzXG4iCisjfiBtc2dzdHIgIiVzIGdhZ2FsIHVudHVrICVzOiAlc1xuIgorCisjfiBtc2dpZCAib3BlbiIKKyN+IG1zZ3N0ciAiYnVrYSIKKworI34gbXNnaWQgIkhESU9fR0VUR0VPIGlvY3RsIgorI34gbXNnc3RyICJIRElPX0dFVEdFTyBpb2N0bCIKKworI34gbXNnaWQgIkJMS0dFVFNJWkUgaW9jdGwiCisjfiBtc2dzdHIgIkJMS0dFVFNJWkUgaW9jdGwiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9lMmZzcHJvZ3MvcG8vaW5zZXJ0LWhlYWRlci5zaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2ZGUwMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9pbnNlcnQtaGVhZGVyLnNpbgpAQCAtMCwwICsxLDIzIEBACisjIFNlZCBzY3JpcHQgdGhhdCBpbnNlcnRzIHRoZSBmaWxlIGNhbGxlZCBIRUFERVIgYmVmb3JlIHRoZSBoZWFkZXIgZW50cnkuCisjCisjIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCisjIGNvbW1hbmRzLiBBdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSwgaW5zZXJ0IHRoZSBmaWxlLiBBdCB0aGUgZm9sbG93aW5nCisjIG9jY3VycmVuY2VzLCBkbyBub3RoaW5nLiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcKKyMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKy9ebXNnaWQgL3sKK3gKKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KK3MvbS9tLwordGEKKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KK3IgSEVBREVSCisjIE91dHB1dCB0aGUgZmlsZSdzIGNvbnRlbnRzIGJ5IHJlYWRpbmcgdGhlIG5leHQgbGluZS4gQnV0IGRvbid0IGxvc2UgdGhlCisjIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgorZworTgorYmIKKzphCisjIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgoreAorOmIKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9pdC5nbW8gYi9lMmZzcHJvZ3MvcG8vaXQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODMxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vaXQuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby9pdC5wbyBiL2UyZnNwcm9ncy9wby9pdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEwYjAwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL2l0LnBvCkBAIC0wLDAgKzEsNjg5OSBAQAorIyBJdGFsaWFuIHRyYW5zbGF0aW9uIGZvciBlMmZzcHJvZ3MKKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBBbmRyZWEgU3BhZGFjY2luaSA8bHVwaW44NUBlbWFpbC5pdD4sIDIwMDQKKyMgTWFyY28gQ29sb21ibyA8bS5jb2xvbWJvQGVkLmFjLnVrPiwgMjAwNAorIyBUT0RPOiBTaXN0ZW1hcmUgQGIsIGRhICdibG9jY28nIGEgJ2Jsb2NjJywgZSBzcGVjaWZpY2FyZSBtYW51YWxtZW50ZSBpIAorIyBzaW5nb2xhcmkgZWQgaSBwbHVyYWxpCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCTxibGtjb3VudD4JCWludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncyAxLjM2LWIyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA2LTEyIDE0OjQwLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTAxLTE4IDE3OjUyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFuZHJlYSBTcGFkYWNjaW5pIDxsdXBpbjg1QGVtYWlsLml0PlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPHRwQGxpc3RzLmxpbnV4Lml0PlxuIgorIkxhbmd1YWdlOiBpdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJCbG9jY28gbm9uIHZhbGlkbyAldSBmdW9yaSBkYWxsJ2ludGVydmFsbG87IGlnbm9yYXRvLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImR1cmFudGUgaWwgY29udHJvbGxvIHN1bGwnaW50ZWdyaXTgIGRlbGwnaW5vZGUgbnVtZXJvIDEiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgImR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ2lub2RlIG51bWVybyAxIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL2lzY2FuLmM6MTEwIGUyZnNjay9zY2FudGVzdC5jOjEwNworIzogZTJmc2NrL3VuaXguYzoxMjk4IGUyZnNjay91bml4LmM6MTM4NiBtaXNjL2JhZGJsb2Nrcy5jOjEyMTQKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzYgbWlzYy9iYWRibG9ja3MuYzoxMjQ4CisjOiBtaXNjL2R1bXBlMmZzLmM6NTg4IG1pc2MvZTJpbWFnZS5jOjExODkgbWlzYy9lMmltYWdlLmM6MTMwNworIzogbWlzYy9lMmltYWdlLmM6MTMyMCBtaXNjL21rZTJmcy5jOjE5MiBtaXNjL3R1bmUyZnMuYzoxOTA3IHJlc2l6ZS9tYWluLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJkdXJhbnRlIGwnYXBlcnR1cmEgZGkgJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAicHJvdmFuZG8gYWQgZWZmZXR0dWFyZSBpbCBwb3BlbiBkaSAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoxOTkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgImR1cmFudGUgbGEgbGV0dHVyYSBkZWxsYSBsaXN0YSBkaSBibG9jY2hpIG5vbiB2YWxpZGkgZGEgZmlsZSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiYWdnaW9ybmFuZG8gbCdpbm9kZSBkaSB1biBibG9jY28gZGlmZXR0b3NvIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lIGJsb2NjbyBpbGxlZ2FsZSAldSB0cm92YXRvIG5lbGwnaW5vZGUgZGkgdW4gYmxvY2NvIGRpZmV0dG9zby4gIgorIkF6emVyYXRvLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBsZXR0dXJhIGRlbCBibG9jY28gJWx1ICglcykgZHVyYW50ZSAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBsZXR0dXJhIGRlbCBibG9jY28gJWx1ICglcykuICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJJZ25vcmEgbCdlcnJvcmUiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiRm9yemEgbGEgcmlzY3JpdHR1cmEiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBzY3JpdHR1cmEgZGVsIGJsb2NjbyAlbHUgKCVzKSBtZW50cmUgJXMuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgc2NyaXR0dXJhIGRlbCBibG9jY28gJWx1ICglcykuICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJsb2NjaGkgZGlyZWN0b3J5IHZ1b3RpIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgIm1hcHBhIGRpcmVjdG9yeSB2dW90YSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICJCbG9jY28gZGlyZWN0b3J5ICVkICgjJWQpIHZ1b3RvIG5lbGwnaW5vZGUgJWRcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICIlczogJXMgbm9tZWZpbGUgbmJsb2NjaGkgZGltX2Jsb2Njb1xuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgb2YgYmxvY2tzIVxuIgorbXNnc3RyICJOdW1lcm8gZGkgYmxvY2NoaSBub24gdmFsaWRvIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBpbCBidWZmZXIgYmxvY2NvIChkaW1lbnNpb25lPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiVXRpbGl6em86ICVzIGRpc2NvXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgIklvY3RsIEJMS0ZMU0JVRiBub24gc3VwcG9ydGF0byEgSW1wb3NzaWJpbGUgc3Z1b3RhcmUgaSBidWZmZXIuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiVXRpbGl6em86ICVzIFstRl0gWy1JIGJsb2NjaGlfYnVmZmVyX2lub2RlXSBkZXZpY2VcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgImFwcmVuZG8gJXMgcGVyIGxvIHN2dW90YW1lbnRvIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjkzNiByZXNpemUvbWFpbi5jOjI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInByb3ZhbmRvIGEgc3Z1b3RhcmUgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA4NAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiYXZ2aWFuZG8gbGEgc2NhbnNpb25lIGRlZ2xpIGlub2RlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTEwMgorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBzdWNjZXNzaXZvIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIlZCBpbm9kZSBhbmFsaXp6YXRpLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUxMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImxldHR1cmEgZGVsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IG5vbiDoIHN0YXRvIHRyb3ZhdG8gdW4gc3VwZXJibG9jY28gdmFsaWRvIGRlbCBqb3VybmFsXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogam91cm5hbCB0cm9wcG8gY29ydG9cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogcmlwcmlzdGlubyBkZWwgam91cm5hbFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHJpcHJpdGluYXJlIGlsIGpvdXJuYWwgaW4gbW9kYWxpdOAgc29sYSBsZXR0dXJhXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJkdXJhbnRlIGxhIHJpYXBlcnR1cmEgZGkgJXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYWF0dHJpYnV0byBlc3Rlc28iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFlcnJvcmUgYWxsb2NhbmRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2NjbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCbWFwcGEgZGVpIGJpdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTcKK21zZ2lkICJjY29tcHJlc3MiCittc2dzdHIgImNjb21wcmltaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ2VudHJhIGluIGNvbmZsaXR0byBjb24gYWx0cmkgQGIoaSkgZGVsIGZzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWlub2RlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJaWxsZWdhbGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpqb3VybmFsIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEY2FuY2VsbGF0byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkZGlyZWN0b3J5IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZWVsZW1lbnRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZmZpbGVzeXN0ZW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGcGVyIGwnQGkgJWkgKCVRKSDoIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dydXBwbyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBkZWxsYSBAZCBIVFJFRSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTOggdW4gY29sbGVnYW1lbnRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorIywgZnV6enkKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibWFwcGEgZGVnbGkgaW5vZGUgcmljaGllc3RhIHBp+SB2b2x0ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAib29yZmFubyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW1hIGluIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNgorbXNnaWQgInFxdW90YSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNworbXNnaWQgInJyb290IEBpIgorbXNnc3RyICJyQGkgcm9vdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzgKK21zZ2lkICJzc2hvdWxkIGJlIgorbXNnc3RyICJzZG92cmViYmUgZXNzZXJlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc3VwZXJAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInZkZXZpY2UiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCisjLCBmdXp6eQorbXNnaWQgInhleHRlbnQiCittc2dzdHIgImVlbGVtZW50byIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpsdW5naGV6emEtemVybyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgTlVMTD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIG51bWVybyAxPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbCBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxJbm9kZSBkZWwgZGVzY3JpdHRvcmUgZGkgZ3J1cHBvPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbCBib290IGxvYWRlcj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgZGVsbGEgZGlyZWN0b3J5IHVuZGVsZXRlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjEKK21zZ2lkICI8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IgorbXNnc3RyICI8SW5vZGUgZGVsIGRlc2NyaXR0b3JlIGRpIGdydXBwbz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPElub2RlIGRlbCBqb3VybmFsPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjxJbm9kZSByaXNlcnZhdG8gOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPElub2RlIHJpc2VydmF0byAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCisjLCBmdXp6eQorbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAibWFwcGEgZGVnbGkgaW5vZGUgZGVpIGZpbGUgcmVnb2xhcmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1CisjLCBmdXp6eQorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZGRpcmVjdG9yeSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAidmRldmljZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDEKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQzCittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gZmlsZSB0eXBlIHdpdGggbW9kZSAwJW8iCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjMKKyMsIGZ1enp5Cittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImxldHR1cmEgZGVpIGJsb2NjaGkgaW5kaXJldHRpIGRlbGwnaW5vZGUgJXUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI1CisjLCBmdXp6eQorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAibGV0dHVyYSBkZWkgYmxvY2NoaSBpbmRpcmV0dGkgZGVsbCdpbm9kZSAldSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKKyMsIGZ1enp5Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJsZXR0dXJhIGRlaSBibG9jY2hpIGluZGlyZXR0aSBkZWxsJ2lub2RlICV1IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyOQorIywgZnV6enkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJSaWxvY2F6aW9uZSBkZWkgYmxvY2NoaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzEKKyMsIGZ1enp5Cittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmJsb2NjbyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSByaWNoaWVzdGEgcGn5IHZvbHRlIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjEwIGUyZnNjay9wYXNzMWIuYzo3MjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAiZXJyb3JlIGludGVybm87IGltcG9zc2liaWxlIHRyb3ZhcmUgZHVwX2JsayBwZXIgJWRcbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjgyMAorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAicml0b3JuYXRvIGRhIGNsb25lX2ZpbGVfYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJFcnJvcmUgaW50ZXJubzogaW1wb3NzaWJpbGUgdHJvdmFyZSBkaXJfaW5mbyBwZXIgJWkuXG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiRXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIHRyb3ZhcmUgZGlyX2luZm8gcGVyICVpLlxuIgorCisjOiBlMmZzY2svcGFzczEuYzo0NzYgZTJmc2NrL3Bhc3MyLmM6NzgyCisjLCBmdXp6eQorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJsZXR0dXJhIGRlaSBibG9jY2hpIGluZGlyZXR0aSBkZWxsJ2lub2RlICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo1OTkKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSBpbiB1dGlsaXp6byIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjEwCittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAibWFwcGEgZGVnbGkgaW5vZGUgZGVsbGUgZGlyZWN0b3J5IgorCisjOiBlMmZzY2svcGFzczEuYzo2MjAKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSBkZWkgZmlsZSByZWdvbGFyaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjI5Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwcGEgZGVpIGJsb2NjaGkgaW4gdXRpbGl6em8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjY5NgorIywgZnV6enkKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInNjYW5zaW9uZSBkZWdsaSBpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCisjLCBmdXp6eQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgImxlZ2dlbmRvIGwnaW5vZGUgc3VjY2Vzc2l2byIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI0MAorbXNnaWQgIlBhc3MgMSIKK21zZ3N0ciAiUGFzc28gMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI5NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibGV0dHVyYSBkZWkgYmxvY2NoaSBpbmRpcmV0dGkgZGVsbCdpbm9kZSAldSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM0NworbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgIm1hcHBhIGRlZ2xpIGlub2RlIG5vbiB2YWxpZGEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNzAKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpbm9kZSBuZWxsYSBtYXBwYSBkZWkgYmxvY2NoaSBkaWZldHRvc2kiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzOTAKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBwYSBkZWdsaSBpbm9kZSBpbWFnaWMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTcKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAibWFwcGEgZGVpIGJsb2NjaGkgcmljaGllc3RhIHBp+SB2b2x0ZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTUxOAorbXNnaWQgImV4dCBhdHRyIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyMjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjI3Cittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJtYXBwYSBkZWkgYml0IGRlbCBibG9jY28iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2MzMKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgIm1hcHBhIGRlaSBiaXQgZGVsbCdpbm9kZSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjYzOQorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJ0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiUGFzc28gMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1CisjLCBmdXp6eQorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgY29udGludWFyZSwgb3BlcmF6aW9uZSBhbm51bGxhdGEuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiTWVtb3JpYSBkaSBwaWNjbyIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJQYXNzbyAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKKyMsIGZ1enp5Cittc2dpZCAiaW5vZGUgbG9vcCBkZXRlY3Rpb24gYml0bWFwIgorbXNnc3RyICJtYXBwYSBkZWkgYml0IGRlbCBjaWNsbyBkaSByaWxldmFtZW50byBpbm9kZSIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk1Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJQYXNzbyA0IgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAiUGFzc28gNSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorbXNnaWQgIihubyBwcm9tcHQpIgorbXNnc3RyICIobmVzc3VuIHByb21wdCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIlNpc3RlbWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiQXp6ZXJhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlJpbG9jYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJBbGxvY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkVzcGFuZGkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJDb2xsZWdhIGEgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJTYWx2YSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJUcm9uY2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiQXp6ZXJhIGlub2RlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkFubnVsbGEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiRGl2aWRpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1CisjLCBmdXp6eQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJtYXBwYSBkZWkgYmxvY2NoaSByaWNoaWVzdGEgcGn5IHZvbHRlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIkNhbmNlbGxhIGZpbGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiU29wcHJpbWkgbWVzc2FnZ2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkVmZmV0dHVhIGwndW5saW5rIC0tIFNjb2xsZWdhIEZJWE1FIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkF6emVyYSBsJ2luZGljZSBIVHJlZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJSaWNyZWEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihORVNTVU5PKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICJTSVNURU1BVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJBWlpFUkFUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiUklMT0NBVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkFMTE9DQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkVTUEFOU08iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiUklDT05ORVNTTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIkNSRUFUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJTQUxWQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICJUUk9OQ0FUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIklOT0RFIEFaWkVSQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiSU5URVJST1RUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJESVZJU08iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKKyMsIGZ1enp5Cittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJDTE9OQVRJIEJMT0NDSEkgRFVQTElDQVRJL05PTiBWQUxJREkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJTEUgQ0FOQ0VMTEFUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlNPUFBSRVNTTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJTQ09MTEVHQVRPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiSU5ESUNFIEhUUkVFIFBVTElUTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlJJQ1JFRVJBJyIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQEIgZGVsIEBiIHBlciBpbCBAZyAlZyBub24g6CBpbiBAZy4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAQiBkZWxsJ0BpIHBlciBpbCBAZyAlZyBub24g6CBpbiBAZy4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJMYSB0YXZvbGEgZGVnbGkgQGkgcGVyIGlsIEBnICVnIG5vbiDoIGluIEBnLiAoQGIgJWIpXG4iCisiQVRURU5aSU9ORTogU09OTyBQT1NTSUJJTEkgTk9URVZPTEkgUEVSRElURSBESSBEQVRJLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgJVMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbCBAUyDoIGlsbGVnZ2liaWxlLCBvIG5vbiBkZXNjcml2ZSB1biBjb3JyZXR0byBAZiBleHQyXG4iCisiU2UgaWwgQHYg6CB2YWxpZG8gZSBjb250aWVuZSByZWFsbWVudGUgdW4gQGYgZXh0MlxuIgorIihlIG5vbiBzd2FwLCB1ZnMgbyBhbHRybyksIGFsbG9yYSBpbCBAUyDoIGNvcnJvdHRvLCBlIHNpIHBvdHJlYmJlXG4iCisicHJvdmFyZSBhZCBlc2VndWlyZSBlMmZzY2sgY29uIHVuIEBTIGFsdGVybmF0aXZvOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJMYSBkaW1lbnNpb25lIGRlbCBAZiAoc2Vjb25kbyBpbCBAUykg6CAlYiBAYihpKVxuIgorIkxhIGRpbWVuc2lvbmUgZmlzaWNhIGRlbCBAdiDoICVjIEBiKGkpXG4iCisiyCBwcm9iYWJpbGUgY2hlIGlsIEBTIG8gbGEgdGF2b2xhIGRlbGxlIHBhcnRpemlvbmkgc2lhbm8gY29ycm90dGkhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkRpbWVuc2lvbmUgZGVsIEBiIGRlbCBAUyA9ICViLCBkaW1lbnNpb25lIGZyYW1tZW50byA9ICVjLlxuIgorIlF1ZXN0YSB2ZXJzaW9uZSBkaSBlMmZzY2sgbm9uIHN1cHBvcnRhIGRpbWVuc2lvbmkgZGkgZnJhbW1lbnRvXG4iCisiZGlmZmVyZW50aSBkYWxsYSBkaW1lbnNpb25lIGRlbCBAYi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgQGIoaSlfcGVyX2dydXBwbyA9ICViLCBhdnJlYmJlIGRvdnV0byBlc3NlcmUgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKKyMsIGZ1enp5Cittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlByaW1vIEBiIGNvbnRlbmVudGUgZGF0aSBkZWwgQFMgPSAlYiwgYXZyZWJiZSBkb3Z1dG8gZXNzZXJlICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NQorbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImlsIEBmIG5vbiBhdmV2YSB1biBVVUlEOyBnZW5lcmF6aW9uZSBkaSB1biBVVUlELlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJOb3RhOiBzZSBtb2x0ZSBtYXBwZSBkZWkgYml0IGRlZ2xpIGlub2RlIG8gZGVpIGJsb2NjaGlcbiIKKyJyaWNoaWVkb25vIGlsIHJpbG9jYW1lbnRvLCBvIHVuYSBwYXJ0ZSBkZWxsYSB0YXZvbGEgZGVnbGlcbiIKKyJpbm9kZSBkZXZlIGVzc2VyZSBzcG9zdGF0YSwgc2kgcHXyIHByaW1hIHByb3ZhcmUgYWQgZXNlZ3VpcmVcbiIKKyJlMmZzY2sgY29uIGwnb3B6aW9uZSAnLWIgJVMnLiBJbCBwcm9ibGVtYSBwb3RyZWJiZSByaXNpZWRlcmVcbiIKKyJuZWwgZGVzY3JpdHRvcmUgZGkgZ3J1cHBvIGRlaSBibG9jY2hpIHByaW1hcmlvLCBlZCBpbCBkZXNjcml0dG9yZVxuIgorImRpIGdydXBwbyBkZWkgYmxvY2NoaSBwb3RyZWJiZSBlc3NlcmUgT0suXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJUcm92YXRhIGNvcnJ1emlvbmUgbmVsIEBTLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkVycm9yZSBkZXRlcm1pbmFuZG8gbGEgZGltZW5zaW9uZSBkZWwgQHYgZmlzaWNvOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5CisjLCBmdXp6eQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiSWwgbnVtZXJvIGRpIEBpIGluIEBTIOggJWksIGRvdnJlYmJlIGVzc2VyZSAlai5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODMKK21zZ2lkICJUaGUgSHVyZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWxldHlwZSBmZWF0dXJlLlxuIgorbXNnc3RyICJJbCBrZXJuZWwgSHVyZCBub24gc3VwcG9ydGEgbGEgY2FyYXR0ZXJpc3RpY2EgZmlsZXR5cGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIklsIEBTIGhhIHVuIEBqIGV4dDMgbm9uIHZhbGlkbyAoQGkgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIklsIEBqIGVzdGVybm8gaGEgZGl2ZXJzaSB1dGVudGkgZGVsIEBmIChub24gc3VwcG9ydGF0bykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBAaiBlc3Rlcm5vXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJJbCBAaiBlc3Rlcm5vIGhhIHVuIEBTIG5vbiB2YWxpZG9cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwOAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJJbCBAaiBlc3Rlcm5vIG5vbiBzdXBwb3J0YSBxdWVzdG8gQGZcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTMKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiAiCisiZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJJbCBAUyBkZWwgQGogZXh0MyDoIGRlbCB0aXBvIHNjb25vc2NpdXRvICVOIChub24gc3VwcG9ydGF0bykuXG4iCisiRScgcHJvYmFiaWxlIGNoZSBxdWVzdGEgY29waWEgZGkgZTJmc2NrIHNpYSB2ZWNjaGlhIGUvbyBub24gc3VwcG9ydGkgcXVlc3RvICIKKyJmb3JtYXRvIGRpIEBqLlxuIgorIkUnIGFuY2hlIHBvc3NpYmlsZSBjaGUgaWwgQFMgZGVsIEBqIHNpYSBjb3Jyb3R0by5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIxCisjLCBmdXp6eQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIklsIEBTIGRlbCBAaiBleHQzIOggY29ycm90dG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCAlcyBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqICVzIGlzIHByZXNlbnQuXG4iCittc2dzdHIgImZsYWcgZGVsIHJlY3VwZXJvIGV4dDMgcHVsaXRvLCBtYSBpbCBAaiBjb250aWVuZSBhbmNvcmEgZGF0aS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzEKKyMsIGZ1enp5Cittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJJbCBAUyBoYSBpbCBmbGFnIGV4dDMgbmVlZHNfcmVjb3ZlcnkgaW1wb3N0YXRvLCBtYSBub24gaGEgQGouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM2CisjLCBmdXp6eQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiZmxhZyBkZWwgcmVjdXBlcm8gZXh0MyBwdWxpdG8sIG1hIGlsIEBqIGNvbnRpZW5lIGFuY29yYSBkYXRpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJBenplcmFyZSBAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0NiBlMmZzY2svcHJvYmxlbS5jOjY5NQorbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUxCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGFsaXTgPSVJbSwgZGltZW5zaW9uZT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKKyMsIGZ1enp5Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgdHJvdmF0byBpbiB1biBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCisjLCBmdXp6eQorbXNnaWQgIkFscmVhZHkgY2xlYXJlZCAlQiAoJWIpIGZvdW5kIGluIEBvIEBpICVpLlxuIgorbXNnc3RyICJHaeAgYXp6ZXJhdG8gaWwgQGIgIyVCICglYikgdHJvdmF0byBpbiB1biBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiQGkgQG8gQEkgJWkgbmVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBpIEBJICVpIG5lbGxhIGxpc3RhIGRlZ2xpIEBpIEBvLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc2CisjLCBmdXp6eQorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisiSWwgQFMgZGVsIEBqIGV4dDMgaGEgaW1wb3N0YXRvIGlsIGZsYWcgYSBzb2xhIGxldHR1cmEgZGkgdW5hIGNhcmF0dGVyaXN0aWNhICIKKyJzY29ub3NjaXV0YS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIGluY29tcGF0aWJsZSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4MQorIywgZnV6enkKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorIklsIEBTIGRlbCBAaiBleHQzIGhhIGltcG9zdGF0byBpbCBmbGFnIGRpIHVuYSBjYXJhdHRlcmlzdGljYSBub24gIgorImNvbXBhdGliaWxlLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIlZlcnNpb25lIGRlbCBAaiBub24gc3VwcG9ydGF0YSBkYSBxdWVzdG8gZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTcG9zdGFtZW50byBkaSBAaiBkYSAvJXMgYWxsJ2lub2RlIG5hc2Nvc3RvLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyJFcnJvcmUgc3Bvc3RhbmRvIEBqOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDEKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRyb3ZhdGkgZGVpIGNhbXBpIFYyIGRlbCBAUyBkZWwgQGogbm9uIHZhbGlkaSAoZGFsIGpvdXJuYWwgVjEpLlxuIgorIlB1bGl0dXJhIGRlaSBjYW1waSBhbCBkaSBs4CBkZWwgQFMgZGVsIEBqIFYxLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJFc2VndWlyZSBAaiBjb211bnF1ZSIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxMgorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICJGbGFnIGRpIHJlY3VwZXJvIG5vbiBpbXBvc3RhdG8gbmVsIEBTIGRpIGJhY2t1cCwgZXNlZ3VvIEBqIGNvbXVucXVlLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisiRXNlY3V6aW9uZSBkZWwgYmFja3VwIGRlbGwnaW5mb3JtYXppb25lIEBqIEBpIEBiLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjgKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMzCisjLCBmdXp6eQorbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIkwnQHIgbm9uIOggdW5hIEBkLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMzgKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDMKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg2Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KSAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzkyCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAiCisic2V0KS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBPbmUgb3IgbW9yZSBibG9jayBncm91cCBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTgKK21zZ2lkICJPbmUgb3IgbW9yZSBAYiBAZyBkZXNjcmlwdG9yIGNoZWNrc3VtcyBhcmUgaW52YWxpZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAzCisjLCBmdXp6eQorbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBudW1lcm8gZGkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGJsb2NrcyBjb3VudCB0byAlYyAod2FzICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwOAorIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgbnVtZXJvIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIGEgJWx1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTMKKyMsIGZ1enp5Cittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICIiCisiU3Bvc3RhbWVudG8gZGkgQGogZGEgLyVzIGFsbCdpbm9kZSBuYXNjb3N0by5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiZGltZW5zaW9uZSBkZWwgYmxvY2NvIGRpZmV0dG9zbyAtICVzIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQYXNzbyAxOiBDb250cm9sbG8gZGkgQGksIEBiKGkpIGUgZGltZW5zaW9uaVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDQKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiTCdAciBub24g6CB1bmEgQGQuICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5Cittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICIiCisiTCdAciBoYSBpbCBkdGltZSBpbXBvc3RhdG8gKHByb2JhYmlsbWVudGUgYSBjYXVzYSBkaSB1biB2ZWNjaGlvIG1rZTJmcykuIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU0CisjLCBmdXp6eQorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkwnQGkgcmlzZXJ2YXRvICVpICVRIGhhIHVuYSBtb2RhbGl04CBlcnJhdGEuICIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkwnQGkgQEQgICVpIGhhIGR0aW1lIHplcm8uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkwnQGkgJWkg6CBpbiB1c28sIG1hIGhhIGlsIGR0aW1lIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgYSBAeiBAZC4gICIKK21zZ3N0ciAiTCdAaSAlaSDoIHVuYSBAZCBhIEB6LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiTGEgQEIgZGVpIEBiKGkpIGRlbCBAZyAlZyBhICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3OQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkxhIEBCIGRlZ2xpIEBpIGRlbCBAZyAlZyBhICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg0Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiTGEgdGF2b2xhIGRlZ2xpIEBpIGRlbCBAZyAlZyBhICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJMYSBAQiBkZWkgQGIoaSkgZGVsIEBnICVnICglYikgbm9uIOggdmFsaWRhLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkxhIEBCIGRlZ2xpIEBpIGRlbCBAZyAlZyAoJWIpIG5vbiDoIHZhbGlkYS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5OQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfc2l6ZSDoICVJcywgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNAorIywgZnV6enkKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiQGkgJWksIGlfYmxvY2tzIOggJUliLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5CisjLCBmdXp6eQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIkBiIEBJICMlQiAoJWIpIG5lbGwnQGkgJWkuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNAorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJMJ0BpICVpIGhhIEBiKGkpIGlsbGVnYWxpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiVHJvcHBpIEBiKGkpIGlsbGVnYWxpIGluIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIGJhZCBAYiBAaS4gICIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgbmVsbCdAaSBkZWwgQGIgbm9uIHZhbGlkby4gIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM0CisjLCBmdXp6eQorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiTCdAaSBkZWwgQGIgbm9uIHZhbGlkbyBoYSBAYihpKSBpbGxlZ2FsaS4gIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiQGIgZHVwbGljYXRvIG8gbm9uIHZhbGlkbyBpbiB1c28hXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICJJbCBAYiAlYiB1c2EgY29tZSBAaSBkZWwgQGIgbm9uIHZhbGlkbyB1biBAYiBpbmRpcmV0dG8uICIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4KKyMuIEAtZXhwYW5kZWQ6IHNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGluIHRoZSBmaWxlc3lzdGVtLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0OQorbXNnaWQgIiIKKyJcbiIKKyJUaGUgYmFkIEBiIEBpIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuIgorInNob3VsZCBzdG9wIG5vdyBhbmQgcnVuIGUyZnNjayAtYyB0byBzY2FuIGZvciBiYWQgYmxvY2tzXG4iCisiaW4gdGhlIEBmLlxuIgorbXNnc3RyICIiCisiXG4iCisiTCdAaSBkZWwgQGIgbm9uIHZhbGlkbyDoIHN0YXRvIHByb2JhYmlsbWVudGUgY29ycm90dG8uIEUnIGNvbnNpZ2xpYWJpbGVcbiIKKyJmZXJtYXJzaSBvcmEgZWQgZXNlZ3VpcmUgZTJmc2NrIC1jIHBlciBjZXJjYXJlIGJsb2NjaGkgbm9uIHZhbGlkaVxuIgorIm5lbCBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZSBpbCBAYiDoIG1vbHRvIGNvcnJvdHRvLCBpbCBAZiBub24gcHXyIGVzc2VyZSByaXBhcmF0by5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorIywgZnV6enkKK21zZ2lkICIiCisiWW91IGNhbiByZW1vdmUgdGhpcyBAYiBmcm9tIHRoZSBiYWQgQGIgbGlzdCBhbmQgaG9wZVxuIgorInRoYXQgdGhlIEBiIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUnIHBvc3NpYmlsZSBlbGltaW5hcmUgcXVlc3RvIEBiIChlIHNwZXJhcmUgaWwgbWVnbGlvKSBkYWxsYVxuIgorImxpc3RhIGRlaSBAYihpKSBub24gdmFsaWRpLCBlIHNwZXJhcmUgY2hlIHNpYSBkYXZ2ZXJvIGEgcG9zdG8sIG1hXG4iCisibm9uIGNpIHNvbm8gZ2FyYW56aWUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY3Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIklsIEBTIHByaW1hcmlvICglYikg6CBuZWxsYSBsaXN0aSBkZWkgQGIoaSkgbm9uIHZhbGlkaS5cbiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcyCittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKyJJbCBibG9jY28gJWIgbmVpIGRlc2NyaXR0b3JpIHByaW1hcmkgZGVsIEBnIOggbmVsbGEgbGlzdGEgZGVpIEBiKGkpIG5vbiAiCisidmFsaWRpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzgKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJBdHRlbnppb25lOiBJbCBAUyAoJWIpIGRlbCBncnVwcG8gJWcgbm9uIOggdmFsaWRvLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4MworIywgZnV6enkKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisiQXR0ZW56aW9uZTogTGEgY29waWEgZGVpIGRlc2NyaXR0b3JpIGRpIEBnIGRlbCBncnVwcG8gJWcgaGEgdW4gQGIgKCViKSBub24gIgorInZhbGlkby5cbiIKKworIy4gQC1leHBhbmRlZDogUHJvZ3JhbW1pbmcgZXJyb3I/ICBibG9jayAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX2Jsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4OQorbXNnaWQgIlByb2dyYW1taW5nIGVycm9yPyAgQGIgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9AYi5cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBkaSBwcm9ncmFtbWF6aW9uZT8gQGIgIyViIHJlY2xhbWF0byBzZW56YSByYWdpb25lIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorIywgZnV6enkKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiQEEgJU4gQGIoaSkgY29udGlndWkgbmVsIEBnIGRpIEBiICVnIHBlciAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkBBIGlsIGJ1ZmZlciBAYiBwZXIgbGEgcmlsb2NhemlvbmUgZGkgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDUKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICJSaWxvY2F6aW9uZSBkZWwgJXMgZGVsIEBnICVnIGRhICViIGEgJWMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmlsb2NhemlvbmUgZGVsICVzIGRlbCBAZyAlZyBpbiAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAlYiBvZiAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTUKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBAYiAlYiBvZiAlczogJW1cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZTogaW1wb3NzaWJpbGUgbGVnZ2VyZSBAYiAlYiBkaSAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHdyaXRlIGJsb2NrICViIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjAKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgQGIgJWIgZm9yICVzOiAlbVxuIgorbXNnc3RyICJBdHRlbnppb25lOiBpbXBvc3NpYmlsZSBzY3JpdmVyZSBAYiAlYiBwZXIgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjI1IGUyZnNjay9wcm9ibGVtLmM6MTQ2MAorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkBBIGxhIEBCIGRlbGwnQGkgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzAKKyMsIGZ1enp5Cittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgbGEgQEIgZGVsbCdAaSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4iCittc2dzdHIgIkBBIGxlIGluZm9ybWF6aW9uaSBkZWwgY29sbGVnYW1lbnRvIGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgbCdhcnJheSBkZWkgQGIgZGkgQGQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGFuYWxpenphbmRvIEBpcyAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjb3JyZW5kbyBpIEBiKGkpIG5lbGwnQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU1Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBzYWx2YW5kbyBsZSBpbmZvcm1hemlvbmkgc3VsIG51bWVybyBkaSBAaSAoQGk9JWksIG51bWVybz0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgZGlyZWN0b3J5IGJsb2NrIGluZm9ybWF0aW9uIChpbm9kZT0laSwgYmxvY2s9JWIsIG51bT0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYwCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkVycm9yZSBzYWx2YW5kbyBsZSBpbmZvcm1hemlvbmkgc3VpIEBiKGkpIGRpIEBkIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsbCdAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiTCdAaSAlaSBoYSBpbCBmbGFnIGltYWdpYyBpbXBvc3RhdG8uICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlVuIGZpbGUgKEBpICVpKSBzcGVjaWFsZSAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgaGEgaWwgZmxhZ1xuIgorImltbXV0YWJsZSBvIGFwcGVuZC1vbmx5IGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiIgorIlVuIGZpbGUgKEBpICVpKSBzcGVjaWFsZSAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgaGEgaWwgZmxhZ1xuIgorImltbXV0YWJsZSBvIGFwcGVuZC1vbmx5IGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorIywgZnV6enkKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiTCdAaSAlaSDoIGluIHVzbywgbWEgaGEgaWwgZHRpbWUgaW1wb3N0YXRvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJJbCBAaiBub24g6CB1biBmaWxlIHJlZ29sYXJlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIkwnQGkgJWkgZmFjZXZhIHBhcnRlIGRlbGxhIGxpc3RhIGRlZ2xpIEBpIG9yZmFuaS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNgorIywgZnV6enkKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisidHJvdmF0aSBAaSBjaGUgZmFjZXZhbm8gcGFydGUgZGkgdW5hIGxpc3RhIGRpIG9yZmFuaSBjb3Jyb3R0aSBjb2xsZWdhdGkuICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjEKKyMsIGZ1enp5Cittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIkBBIGxhIHN0cnV0dHVyYSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkVycm9yZSBsZWdnZW5kbyBsJ0BhIGRpIEBiICViIHBlciBsJ0BpICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCisjLCBmdXp6eQorbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiTCdAaSAlaSBoYSB1biBAYSBkaSBAYiAlYiBub24gdmFsaWRvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJyb3JlIGxlZ2dlbmRvIGwnQGEgZGkgQGIgJWIgKCVtKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MQorIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiTCdAYSBkaSBAYiAlYiDoIGNvbnRhdG8gY29tZSAlYiwgZG92cmViYmUgZXNzZXJlICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRXJyb3JlIHNjcml2ZW5kbyBsJ0BhIEBiICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIkwnQGEgQGIgJWIgaGEgaWwgdmFsb3JlIGhfYmxvY2tzID4gMS4gIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKKyMsIGZ1enp5Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkwnQGkgJWkgaGEgdW4gQGEgZGkgQGIgJWIgbm9uIHZhbGlkby4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MQorIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkwnQGEgZGkgQGIgJWIg6CBjb3Jyb3R0byAoY29sbGlzaW9uZSBkaSBhbGxvY2F6aW9uZSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2CisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIG5hbWUpLiAgIgorbXNnc3RyICJMJ0BhIGRpIEBiICViIOggY29ycm90dG8gKG5vbWUgbm9uIHZhbGlkbykuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MQorIywgZnV6enkKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkwnQGEgZGkgQGIgJWIg6CBjb3Jyb3R0byAodmFsb3JlIG5vbiB2YWxpZG8pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkwnQGkgJWkg6CB0cm9wcG8gZ3JhbmRlLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MAorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJJbCBAYiAjJUIgKCViKSBmYSBkaXZlbnRhcmUgaWwgQGQgdHJvcHBvIGdyYW5kZS4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorIywgZnV6enkKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIklsIEBiICMlQiAoJWIpIGZhIGRpdmVudGFyZSBpbCBmaWxlIHRyb3BwbyBncmFuZGUuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJJbCBAYiAjJUIgKCViKSBmYSBkaXZlbnRhcmUgaWwgbGluayBzaW1ib2xpY28gdHJvcHBvIGdyYW5kZS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGdhIGlsIGZsYWcgSU5ERVhfRkwgaW1wb3N0YXRvIG5lbCBAZiBzZW56YSBpbCBzdXBwb3J0byBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkwnQGkgJWkgaGEgaWwgZmxhZyBJTkRFWF9GTCBpbXBvc3RhdG8sIG1hIG5vbiDoIHVuIEBkLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBub2RvIHJvb3Qgbm9uIHZhbGlkby5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMAorbXNnaWQgIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggbm9uIHN1cHBvcnRhdGEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICJMJ0BoICVpIHVzYSB1biBmbGFnIGRpIG5vZG8gaHRyZWUgZGkgcm9vdCBub24gY29tcGF0aWJpbGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW4gbGl2ZWxsbyBkaSBwcm9mb25kaXTgICglTikgdHJvcHBvIGVsZXZhdG9cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkwnQGkgZGVsIEBiIG5vbiB2YWxpZG8gaGEgdW4gQGIgaW5kaXJldHRvICglYikgY2hlIGVudHJhIGluXG4iCisiY29uZmxpdHRvIGNvbiBpbCBtZXRhZGF0YSBkZWwgQGYuICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKKyMsIGZ1enp5Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIGxpdmVsbG8gZGkgcHJvZm9uZGl04CAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorIywgZnV6enkKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBsaXZlbGxvIGRpIHByb2ZvbmRpdOAgKCVOKSB0cm9wcG8gZWxldmF0b1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0NgorIywgZnV6enkKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIGxpdmVsbG8gZGkgcHJvZm9uZGl04CAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuIGxpdmVsbG8gZGkgcHJvZm9uZGl04CAoJU4pIHRyb3BwbyBlbGV2YXRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1NgorIywgZnV6enkKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1biBsaXZlbGxvIGRpIHByb2ZvbmRpdOAgKCVOKSB0cm9wcG8gZWxldmF0b1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjEKKyMsIGZ1enp5Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkwnQGggJWkgaGEgdW4gbGl2ZWxsbyBkaSBwcm9mb25kaXTgICglTikgdHJvcHBvIGVsZXZhdG9cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgQHggdHJlZSBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIHNjb3JyZW5kbyBpIEBiKGkpIG5lbGwnQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc2Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4NworbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKyJMJ0BpICVpIGdhIGlsIGZsYWcgSU5ERVhfRkwgaW1wb3N0YXRvIG5lbCBAZiBzZW56YSBpbCBzdXBwb3J0byBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFzdCBzeW1saW5rICVpIGhhcyBFWFRFTlRfRkwgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEyCittc2dpZCAiIgorIkBpICVpIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50c1xuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTYKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgQGIgQEI6ICVtXG4iCittc2dzdHIgIkVycm9yZSBzY29ycmVuZG8gaSBAYihpKSBkZWxsZSBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiSWwgQGogbm9uIOggdW4gZmlsZSByZWdvbGFyZS4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkwnQGkgJWkg6CBpbiB1c28sIG1hIGhhIGlsIGR0aW1lIGltcG9zdGF0by4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzNgorIywgZnV6enkKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJMJ0BpICVpIOggaW4gdXNvLCBtYSBoYSBpbCBkdGltZSBpbXBvc3RhdG8uICIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MQorIywgZnV6enkKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICI8SW5vZGUgbnVtZXJvIDE+IgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTMKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlICVpOgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiQGIgQEkgIyVCICglYikgbmVsbCdAaSAlaS4gIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGFuYWxpenphbmRvIGdsaSBpbm9kZSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAQSBAaSBAQiAoQGlfZHVwX21hcCk6ICVtXG4iCittc2dzdHIgIkBBIGxhIEBCIGRlZ2xpIEBpIChpbm9kZV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgc2NvcnJlbmRvIGkgQGIoaSkgbmVsbCdAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4OSBlMmZzY2svcHJvYmxlbS5jOjEzMDQKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisiRXJyb3JlIHNpc3RlbWFuZG8gaWwgY29udGVnZ2lvIGRlaSByaWZlcmltZW50aSBwZXIgaWwgQGIgQGEgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk0CisjLCBmdXp6eQorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlBhc3NvIDFDOiBBbmFsaXNpIGRlbGxlIGRpcmVjdG9yeSByZWxhdGl2YSBhZ2xpIEBpIGNvbiBAYihpKSBkdXBsaWNhdGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMAorIywgZnV6enkKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiUGFzc28gMUQ6IFJpY29uY2lsaWFtZW50byBkZWwgQGIoaSkgZHVwbGljYXRpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDA1CisjLCBmdXp6eQorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJJbCBmaWxlICVRIChAaSAjJWksIHVsdGltYSBtb2RpZmljYSAlSU0pIFxuIgorIiAgaGEgJWIgQGIoaSkgZHVwbGljYXRpLCBjb25kaXZpc2kgY29uICVOIGZpbGU6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTEKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoQGkgIyVpLCB1bHRpbWEgbW9kaWZpY2EgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTYKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8bWV0YWRhdGEgZGVsIEBmPlxuIgorCisjLiBALWV4cGFuZGVkOiAoVGhlcmUgYXJlICVOIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLilcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyMQorIywgZnV6enkKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKENpIHNvbm8gJW4gQGkgY29udGVuZW50aSBAYihpKSBkdXBsaWNhdG8vbm9uIHZhbGlkbyhpKS4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjYKKyMsIGZ1enp5Cittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGIoaSkgZHVwbGljYXRpIGdp4CByaWFzc2VnbmF0aSBvIGNsb25hdGkuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjbG9uYXJlIGlsIGZpbGU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDUKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJQYXNzbyAyOiBBbmFsaXNpIGRlbGxhIHN0cnV0dHVyYSBkZWxsZSBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRpIEBpIG5vbiB2YWxpZG8gcGVyICcuJyBuZWxsJ0BpIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDU1CisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIkwnQEUgaGEgdW4gQGkgbm9uIHZhbGlkbyAjOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDYwCisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBARC91bnVzZWQgQGkgJURpLiAgIgorbXNnc3RyICJMJ0BFIGhhIEBpIG5vbiB1dGlsaXp6YXRvL0BEICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY1Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkwnQEUgQEwgYSAnLicgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHBvaW50cyB0byBpbm9kZSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzAKK21zZ2lkICJARSBwb2ludHMgdG8gQGkgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBAYi5cbiIKK21zZ3N0ciAiTCdARSBwdW50YSBhbGwnQGkgKCVEaSksIHBvc2l6aW9uYXRvIGluIHVuIEBiIG5vbiB2YWxpZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc1Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkwnQEUgQEwgYWxsYSBAZCAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4MAorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiTCdARSBATCBhbGwnQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg1Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiTCdARSBoYSBjYXJhdHRlcmkgbm9uIHZhbGlkaSBuZWwgc3VvIG5vbWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICInLicgbWFuY2FudGUgbmVsbCdAaSAlaSBkZWxsYSBAZC5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4uJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiJy4uJyBtYW5jYW50ZSBuZWxsJ0BpICVpIGRlbGxhIEBkLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMAorIywgZnV6enkKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJJbCBwcmltbyBAZSAnJURuJyAoaW5vZGU9JURpKSBuZWxsJ0BpICVpIGRlbGxhIEBkICglcCkgQHMgJy4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA1CisjLCBmdXp6eQorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIklsIHNlY29uZG8gQGUgJyVEbicgKGlub2RlPSVEaSkgbmVsbCdAaSAlaSBkZWxsYSBAZCAoJXApIEBzICcuJ1xuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZhZGRyIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJRiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExMAorIywgZnV6enkKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBARiAlSUYgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTUKKyMsIGZ1enp5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjAKKyMsIGZ1enp5Cittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9kaXJfYWNsIEBGICVJZCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjUKKyMsIGZ1enp5Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgQEYgJU4gQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMAorIywgZnV6enkKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM1CisjLCBmdXp6eQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIkwnQG8gJWkgKCVRKSBoYSB1bmEgbW9kYWxpdOAgbm9uIHZhbGlkYSAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0MAorIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkBpICVpIGRlbGxhIEBkLCBvZmZzZXQgJU46IEBkIGNvcnJvdHRhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ1CisjLCBmdXp6eQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJAaSAlaSBkZWxsYSBAZCwgb2Zmc2V0ICVOOiBub21lIGZpbGUgdHJvcHBvIGx1bmdvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1MAorIywgZnV6enkKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkwnQGkgJWkgZGVsbGEgQGQgaGEgdW4gQGIgKCMlQikgbm9uIGFsbG9jYXRvLiAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkwnQGUgZGVsbGEgQGQgJy4nIG5lbGwnQGkgJWkgZGVsbGEgQGQgbm9uIOggdGVybWluYXRvIGRhIE5VTExcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJMJ0BlIGRlbGxhIEBkICcuLicgbmVsbCdAaSAlaSBkZWxsYSBAZCBub24g6CB0ZXJtaW5hdG8gZGEgTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY1Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkwnQGkgJWkgKCVRKSDoIHVuIEB2IGEgY2FyYXR0ZXJpIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzAKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJMJ0BpICVpICglUSkg6CB1biBAdiBhIEBiKGkpIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NQorIywgZnV6enkKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJMJ0BFIOggdW4gZHVwbGljYXRvIGRlbGwnQGUgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODAKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiTCdARSDoIHVuIGR1cGxpY2F0byBkZWxsJ0BlICcuLicuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NSBlMmZzY2svcHJvYmxlbS5jOjE0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubzogaW1wb3NzaWJpbGUgdHJvdmFyZSBkaXJfaW5mbyBwZXIgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MAorIywgZnV6enkKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICJMJ0BFIGhhIHJlY19sZW4gZGkgJURyLCBkb3ZyZWJiZSBlc3NlcmUgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkBBIGxhIHN0cnV0dHVyYSBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkVycm9yZSBzY29ycmVuZG8gaSBAYihpKSBkZWxsZSBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA1Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgbGVnZ2VuZG8gaWwgQGIgZGVsbGEgQGQgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjEwCittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgc2NyaXZlbmRvIGlsIEBiIGRlbGxhIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9jayBmb3IgaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIG5ldyBAZCBAYiBmb3IgQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQEEgdW4gbnVvdm8gQGIgZGVsbGEgQGQgcGVyIGwnQGkgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGRlYWxsb2NhbmRvIGwnQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkwnQGUgZGVsbGEgQGQgZGkgJy4nIOggZ3JhbmRlLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBGSUZPLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzAKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEZJRk8uXG4iCittc2dzdHIgIkwnQGkgJWkgKCVRKSDoIHVuYSBGSUZPIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzUKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiTCdAaSAlaSAoJVEpIOggdW4gc29ja2V0IEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDAKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCB0aXBvIGRpIGZpbGUgcGVyIGwnQEUgYSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDUKKyMsIGZ1enp5Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJMJ0BFIG5vbiDoIGRlbCBnaXVzdG8gdGlwbyBkaSBmaWxlIChlcmEgJUR0LCBkb3ZyZWJiZSBlc3NlcmUgJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkUnIGltcG9zdGF0byBpbCB0aXBvIGRpIGZpbGUgcGVyIGwnQEUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU1CisjLCBmdXp6eQorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIklsIG5vbWUgZGVsbCdARSDoIGRpIGx1bmdoZXp6YSBudWxsYS5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjAKKyMsIGZ1enp5Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiSWwgc3ltbGluayAlUSAoQGkgIyVpKSBub24g6CB2YWxpZG8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNjUKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3MAorbXNnaWQgIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIgorbXNnc3RyICIiCisiSWwgQGYgY29udGllbmUgZmlsZXMgZGkgZ3JhbmRpIGRpbWVuc2lvbmksIG1hIG5lbCBAUyBub24g6CBzcGVjaWZpY2F0byBpbCAiCisiZmxhZyBMQVJHRV9GSUxFLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc1CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglQikgbm9uIHJlZmVyZW56aWF0b1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODAKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbm9kbyAoJWIpIHJlZmVyZW56aWF0byBkdWUgdm9sdGVcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg1CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkBwIHVuIEBoICglZCk6IG5vZG8gKCVCKSBjb24gaGFzaCBtaW5pbW8gbm9uIHZhbGlkb1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTAKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbm9kbyAoJWIpIGNvbiBoYXNoIG1hc3NpbW8gbm9uIHZhbGlkb1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTUKKyMsIGZ1enp5Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiQGggJWQgbm9uIHZhbGlkbyAoJXEpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIHVuIEBoICVkICglcSk6IEBiIG5vbiB2YWxpZG8gbnVtZXJvICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIkBwIHVuIEBoICglZCk6IG5vZG8gcm9vdCBub24gdmFsaWRvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbm9kbyAoJUIpIGNvbiBsaW1pdGUgbm9uIHZhbGlkbyAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxOQorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgdW4gQGggKCVkKTogbnVtZXJvICglTikgZGkgbm9kbyAoJUIpIG5vbiB2YWxpZG9cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjQKKyMsIGZ1enp5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglQikgY29uIHRhYmVsbGEgaGFzaCBub24gb3JkaW5hdGFcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI5CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCB1biBAaCAoJWQpOiBub2RvICglQikgY29uIHByb2ZvbmRpdOAgbm9uIHZhbGlkYVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM0Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJUcm92YXRvIEBFIGR1cGxpY2F0by4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM5CisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGhhIHVuIG5vbWUgZmlsZSBub24gdW5pdm9jby5cbiIKKyJDYW1iaWFyZSBpbCBub21lIGluICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDQKKyMsIGZ1enp5Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiVHJvdmF0byBAZSBkdXBsaWNhdG8gJyVEbicuXG4iCisiXHQlcCAoJWkpIOggZGEgcmljb3N0cnVpcmUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ5CisjLCBmdXp6eQorbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1NAorIywgZnV6enkKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIkBoICVkIG5vbiB2YWxpZG8gKCVxKS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjMKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4CisjLCBmdXp6eQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJQYXNzbyAzOiBDb250cm9sbG8gZGVsbGEgY29ubmV0dGl2aXTgIGRpIEBkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgwCittc2dpZCAiQHIgbm90IGFsbG9jYXRlZC4gICIKK21zZ3N0ciAiQHIgbm9uIGFsbG9jYXRvLiIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg1Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiTm9uIGMn6CBzcGF6aW8gbmVsbGEgQGQgQGwiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGwgbm9uIHRyb3ZhdGEuICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDAKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiJy4uJyBpbiAlUSAoJWkpIOggJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNQorIywgZnV6enkKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIi9AbCBub24gdmFsaWRhIG8gaW5lc2lzdGVudGUuIEltcG9zc2liaWxlIHJpY29ubmV0dGVyZS5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc3BhbmRlcmUgL0BsOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpY29ubmV0dGVyZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkVycm9yZSBjZXJjYW5kbyAvQGw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jazogJW0gY2VyY2FuZG8gZGkgY3JlYXJlIGxhIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19AaTogJW0gY2VyY2FuZG8gZGkgY3JlYXJlIGxhIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiZXh0MmZfbmV3X2Rpcl9ibG9jazogJW0gY3JlYW5kbyB1biBudW92byBAYiBAZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSBzY3JpdmVuZG8gaWwgQGIgQGQgcGVyIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJFcnJvcmUgYWdnaXVzdGFuZG8gaWwgbnVtZXJvIEBpIG5lbGwnQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJFcnJvcmUgY3JlYW5kbyBsYSBAZCByb290ICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkVycm9yZSBjcmVhbmRvIGxhIEBkIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NQorIywgZnV6enkKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkwnQHIgbm9uIOggdW5hIEBkOyBjYW5jZWxsYXppb25lLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgwCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBwcm9jZWRlcmUgc2VuemEgdW4gQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBub24g6CB1bmEgQGQgKGlubz0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk3Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQYXNzbyAzQTogT3R0aW1penphemlvbmUgZGVsbGUgZGlyZWN0b3J5XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJzX3RvX2hhc2ggaXRlcmF0b3I6ICVtXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSB1biBpdGVyYXRvcmUgZGlyc190b19oYXNoOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA3CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0aW1penphcmUgbGEgZGlyZWN0b3J5ICVxICglZCk6ICVtIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTIKK21zZ2lkICJPcHRpbWl6aW5nIGRpcmVjdG9yaWVzOiAiCittc2dzdHIgIk90dGltaXp6YXppb25lIGRlbGxlIGRpcmVjdG9yeTogIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjkKK21zZ2lkICJQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHNcbiIKK21zZ3N0ciAiUGFzcyA0OiBDb250cm9sbG8gZGVsIG51bWVybyBkZWkgcmlmZXJpbWVudGlcbiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiQGkgQG8gQEkgJWkgbmVsIEBTLlxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ0CisjLCBmdXp6eQorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJJbCBjb250YXRvcmUgcmlmZXJpbWVudGkgZGVsbCdAaSAlaSDoICVJbCwgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbgorIy4gQC1leHBhbmRlZDogXHRPUiBTT01FIEJPTkVIRUFEIChZT1UpIElTIENIRUNLSU5HIEEgTU9VTlRFRCAoTElWRSkgRklMRVNZU1RFTS5cbgorIy4gQC1leHBhbmRlZDogaW5vZGVfbGlua19pbmZvWyVpXSBpcyAlTiwgaW5vZGUuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IHNob3VsZCBiZSB0aGUgc2FtZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQ4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQVRURU5aSU9ORTogRVJST1JFIERJIFBST0dSQU1NQVpJT05FIElOIEUyRlNDSyFcbiIKKyJcdE8gUVVBTENIRSBURVNUQSBWVU9UQSAoVFUpIFNUQSBDT05UUk9MTEFORE8gVU4gRklMRVNZU1RFTSBNT05UQVRPIChMSVZFKS5cbiIKKyJAaV9saW5rX2luZm9bJWldIOggJU4sIEBpLmlfbGlua3NfY291bnQg6CAlSWwuIERvdnJlYmJlcm8gZXNzZXJlIGlkZW50aWNpIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4CisjLCBmdXp6eQorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICJQYXNzbyA1OiBDb250cm9sbG8gZGVsIHJpZXBpbG9nbyBkZWxsZSBpbmZvcm1hemlvbmkgZGVsIEBnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworIywgZnV6enkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlJpZW1waW1lbnRvIGFsbGEgZmluZSBkaSBAaSBAQiBub24gaW1wb3N0YXRvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2OAorIywgZnV6enkKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlJpZW1waW1lbnRvIGFsbGEgZmluZSBkaSBAYiBAQiBub24gaW1wb3N0YXRvLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzMKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJEaWZmZXJlbnplIG5lbGxhIEBCIGRlaSBAYjogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTkzCittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiRGlmZmVyZW56ZSBuZWxsYSBAQiBkZWdsaSBAaTogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxMworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRlZ2xpIEBpIGxpYmVyaSBlcnJhdG8gcGVyIGlsIEBnICMlZyAoJWksIGNvbnRhdGk9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYxOAorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRlbGxlIGRpcmVjdG9yeSBlcnJhdG8gcGVyIGlsIEBnICMlZyAoJWksIGNvbnRhdGk9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjMKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJOdW1lcm8gZGVnbGkgQGkgbGliZXJpIGVycmF0byAoJWksIGNvbnRhdGk9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyOAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRlaSBAYihpKSBsaWJlcmkgZXJyYXRvIHBlciBpbCBAZyAjJWcgKCViLCBjb250YXRpPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjMzCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRlaSBAYihpKSBsaWJlcmkgZXJyYXRvICglYiwgY29udGF0aT0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM4Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ0CisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICIiCisiRXJyb3JlIGludGVybm86IGltcG9zc2liaWxlIGluZGl2aWR1YXJlIGxhIGZpbmUgZGVsbGEgbWFwcGEgZGkgYml0ICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ0BpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBpbm9kZShzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBpKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MQorIywgZnV6enkKK21zZ2lkICJSZWNyZWF0ZSBAaiIKK21zZ3N0ciAiUmljcmVhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTYKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICJDb2RpY2UgZXJyb3JlIG5vbiBnZXN0aXRvICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTQwIGUyZnNjay9wcm9ibGVtLmM6MTk0NAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIklHTk9SQVRPIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiTWVtb3JpYSB1c2F0YTogJWQsIHRlbXBvIHJpbWFzdG86ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiZGltZW5zaW9uZSBkaSB1biBpbm9kZT0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJpbml6aWFuZG8gbGEgc2NhbnNpb25lIGRlZ2xpIGlub2RlIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJkdXJhbnRlIGxhIHNjYW5zaW9uZSBkZWxsJ2lub2RlIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgImNoaWFtYW5kbyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBwZXIgbCdpbm9kZSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiY2hpYW1hbmRvIGV4dDJmc19hZGp1c3RfZWFfcmVmb2N1bnQgcGVyIGwnaW5vZGUgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MgorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6MjczCittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiVXRpbGl6em86ICVzIFstcGFueXJjZGZ2c3RERlNWXSBbLWIgc3VwZXJibG9jY29dIFstQiBkaW1lbnNpb25lX2Jsb2Njb11cbiIKKyJcdFx0Wy1JIGJsb2NjaGlfYnVmZmVyX2lub2RlXSBbLVAgcHJvY2Vzc2FfZGltZW5zaW9uZV9pbm9kZV1cbiIKKyJcdFx0Wy1sfC1MIGZpbGVfYmxvY2NoaV9ub25fdmFsaWRpXSBbLUMgZmRdIFstaiBleHQtam91cm5hbF1cbiIKKyJcdFx0Wy1FIG9wemlvbmktZXN0ZXNlXSBkZXZpY2VcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayAiCisibGlzdFxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3JjZSBjaGVja2luZyBldmVuIGlmIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGNsZWFuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBaXV0byBkaSBlbWVyZ2VuemE6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIFJpcGFyYXppb25lIGF1dG9tYXRpY2EgKHNlbnphIGRvbWFuZGUpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIE5vbiBlZmZldHR1YXJlIGNhbWJpYW1lbnRpIG5lbCBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIFJpc3Bvc3RhIGFmZmVybWF0aXZhIGEgdHV0dGUgbGUgZG9tYW5kZVxuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDZXJjYSBibG9jY2hpIG5vbiB2YWxpZGksIGVkIGFnZ2l1bmdpbGkgYWxsYSBsaXN0YSBkZWkgIgorImJsb2NjaGkgbm9uIHZhbGlkaVxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBGb3J6YSBpbCBjb250cm9sbG8gYW5jaGUgc2UgaWwgZmlsZXN5c3RlbSDoIHNlZ25hdG8gIgorImNvbWUgcHVsaXRvXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgTW9kYWxpdOAgcHJvbGlzc2FcbiIKKyIgLWIgc3VwZXJibG9jY28gICAgICAgVXNhIHVuIHN1cGVyYmxvY2NvIGFsdGVybmF0aXZvXG4iCisiIC1CIGRpbV9ibG9jY28gICAgICAgIEZvcnphIGxhIGRpbWVuc2lvbmUgZGVpIGJsb2NjaGkgZHVyYW50ZSBsYSByaWNlcmNhIGRlbCAiCisic3VwZXJibG9jY29cbiIKKyIgLWogam91cm5hbC1lc3Rlcm5vICAgU3BlY2lmaWNhIGxhIHBvc2l6aW9uZSBkZWwgam91cm5hbCBlc3Rlcm5vXG4iCisiIC1sIGZpbGVfYmFkX2Jsb2NrcyAgIEFnZ2l1bmdpIGFsbGEgbGlzdGEgZGVpIGJsb2NjaGkgbm9uIHZhbGlkaVxuIgorIiAtTCBmaWxlX2JhZF9ibG9ja3MgICBJbXBvc3RhIGxhIGxpc3RhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAlZC8lZCBmaWxlcyAoJTBkLiVkJSUgbm9uIGNvbnRpZ3VpKSwgJWQvJWQgYmxvY2NoaVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiU4dSBpbm9kZSB1c2VkICglMi4yZiUlKVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTh1IGlub2RlcyB1c2VkICglMi4yZiUlKVxuIgorbXNnc3RyWzBdICIlZCBpbm9kZSBhbmFsaXp6YXRpLlxuIgorbXNnc3RyWzFdICIlZCBpbm9kZSBhbmFsaXp6YXRpLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiU4dSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICAjIGRpIGlub2RlIGNvbiBibG9jY2hpIGluZC9kaW5kL3RpbmQ6ICVkLyVkLyVkXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5Cittc2dpZCAiICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4bGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUpXG4iCittc2dpZF9wbHVyYWwgIiU4bGx1IGJsb2NrcyB1c2VkICglMi4yZiUlKVxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJXUgaW5vZGUsICV1IGJsb2NjaGlcbiIKK21zZ3N0clsxXSAiJXUgaW5vZGUsICV1IGJsb2NjaGlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBsYXJnZSBmaWxlc1xuIgorbXNnc3RyWzBdICJtYXBwYSBkZWdsaSBpbm9kZSBkZWkgZmlsZSByZWdvbGFyaSIKK21zZ3N0clsxXSAibWFwcGEgZGVnbGkgaW5vZGUgZGVpIGZpbGUgcmVnb2xhcmkiCisKKyM6IGUyZnNjay91bml4LmM6MTc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTh1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTh1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAibWFwcGEgZGVnbGkgaW5vZGUgZGVpIGZpbGUgcmVnb2xhcmkiCittc2dzdHJbMV0gIm1hcHBhIGRlZ2xpIGlub2RlIGRlaSBmaWxlIHJlZ29sYXJpIgorCisjOiBlMmZzY2svdW5peC5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlOHUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAiZGRpcmVjdG9yeSIKK21zZ3N0clsxXSAiZGRpcmVjdG9yeSIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlOHUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlOHUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gInZkZXZpY2UiCittc2dzdHJbMV0gInZkZXZpY2UiCisKKyM6IGUyZnNjay91bml4LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWZvc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGxpbmtzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTh1IHN5bWJvbGljIGxpbmtzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk3OSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgImRldGVybWluYW5kbyBzZSAlcyDoIG1vbnRhdG8uIgorCisjOiBlMmZzY2svdW5peC5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzICVzLlxuIgorbXNnc3RyICJBdHRlbnppb25lISAlcyDoIG1vbnRhdG8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjQwCittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBjb250aW51YXJlLCBvcGVyYXppb25lIGFubnVsbGF0YS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNDIKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiXGFcYVxhXGFBVFRFTlpJT05FISEhIEVzZWd1aXJlIGUyZnNjayBzdSB1biBmaWxlc3lzdGVtIG1vbnRhdG8gcG90cmViYmVcbiIKKyJjYXVzYXJlIFNFUkkgZGFubmkgYWwgZmlsZXN5c3RlbS5cYVxhXGFcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNDcKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIkNvbnRpbnVhcmUiCisKKyM6IGUyZnNjay91bml4LmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgImNvbnRyb2xsbyBhbm51bGxhdG8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzM5Cittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBjb250aWVuZSB1biBmaWxlc3lzdGVtIGNvbiBlcnJvcmkiCisKKyM6IGUyZnNjay91bml4LmM6MzQxCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiBub24g6CBzdGF0byBzbW9udGF0byBpbiBtYW5pZXJhIGNvcnJldHRhIgorCisjOiBlMmZzY2svdW5peC5jOjM0MworbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIOggc3RhdG8gbW9udGF0byAldSB2b2x0ZSBzZW56YSBlc3NlcmUgY29udHJvbGxhdG8iCisKKyM6IGUyZnNjay91bml4LmM6MzU0CisjLCBmdXp6eQorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIiCisiSW1wb3N0YXppb25lIGRpIGRhdGEgZWQgb3JhIGRlbGwndWx0aW1vIGNvbnRyb2xsbyBkZWwgZmlsZXN5c3RlbSBhICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIG5vbiDoIHN0YXRvIGNvbnRyb2xsYXRvIG5lZ2xpIHVsdGltaSAldSBnaW9ybmkiCisKKyM6IGUyZnNjay91bml4LmM6MzY5Cittc2dpZCAiLCBjaGVjayBmb3JjZWQuXG4iCittc2dzdHIgIiwgY29udHJvbGxvIGZvcnphdG8uXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDAyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogYSBwb3N0bywgJWQvJWQgZmlsZSwgJWQvJWQgYmxvY2NoaSIKKworIzogZTJmc2NrL3VuaXguYzo0MjEKKyMsIGZ1enp5Cittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoY29udHJvbGxvIGRvcG8gaWwgcHJvc3NpbW8gbW91bnQpIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoY29udHJvbGxvIGRvcG8gaWwgcHJvc3NpbW8gbW91bnQpIgorCisjOiBlMmZzY2svdW5peC5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGNvbnRyb2xsbyB0cmEgJWxkIG1vdW50KSIKKworIzogZTJmc2NrL3VuaXguYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiRVJST1JFOiBJbXBvc3NpYmlsZSBhcHJpcmUgL2Rldi9udWxsICglcylcbiIKKworIzogZTJmc2NrL3VuaXguYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICJWZXJzaW9uZSBFQSBub24gdmFsaWRhLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjY3MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjY5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB2YWxpZGF0aW5nIGZpbGUgZGVzY3JpcHRvciAlZDogJXNcbiIKK21zZ3N0ciAiRXJyb3JlIGNvbnZhbGlkYW5kbyBpbCBkZXNjcml0dG9yZSBkaSBmaWxlICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc3MAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJJbmZvcm1hemlvbmkgZGkgY29tcGxldGFtZW50byBkZXNjcml0dG9yZSBkaSBmaWxlIG5vbiB2YWxpZGUiCisKKyM6IGUyZnNjay91bml4LmM6Nzg1CisjLCBmdXp6eQorbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU29sbyB1bmEgdHJhIGxlIG9wemlvbmkgLXAvLWEsIC1uIG8gLXkgcHXyIGVzc2VyZSBzcGVjaWZpY2F0YS4iCisKKyM6IGUyZnNjay91bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJMJ29wemlvbmUgLXQgbm9uIOggc3VwcG9ydGF0YSBkYSBxdWVzdGEgdmVyc2lvbmUgZGkgZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjgzNyBlMmZzY2svdW5peC5jOjkwOSBtaXNjL3R1bmUyZnMuYzo4MTEgbWlzYy90dW5lMmZzLmM6MTEwMAorIzogbWlzYy90dW5lMmZzLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgJyVzJyIKKworIzogZTJmc2NrL3VuaXguYzo4ODgKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4OTMKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4OTgKKyMsIGZ1enp5Cittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJMZSBvcHppb25pIC1jIGUgLUkvLUwgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGNvbnRlbXBvcmFuZWFtZW50ZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJMZSBvcHppb25pIC1jIGUgLUkvLUwgbm9uIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGNvbnRlbXBvcmFuZWFtZW50ZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo5OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2UgIgorIndhaXQuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExMDYgZTJmc2NrL3VuaXguYzoxMTExCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAiaW1wb3N0YW5kbyBpbCBzdXBlcmJsb2NjbyIKKworIzogZTJmc2NrL3VuaXguYzoxMTEzIG1pc2MvdHVuZTJmcy5jOjE5MTIKK21zZ2lkICIiCisiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKyIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJFcnJvcmU6IHZlcnNpb25lIG9ic29sZXRhIGRlbGxhIGxpYnJlcmlhIGV4dDJmcyFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTcxCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAidGVudGFuZG8gZGkgaW5pemlhbGl6emFyZSBpbCBwcm9ncmFtbWEiCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdFV0aWxpenphbmRvICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDYKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJzZXJ2ZSBpbCB0ZXJtaW5hbGUgcGVyIGlsIHJpcGFybyBpbnRlcmF0dGl2byIKKworIzogZTJmc2NrL3VuaXguYzoxMjU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXMgY2VyY2FuZG8gdHJhIGkgYmxvY2NoaSBkaSBiYWNrdXAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjU4Cittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEyNTkKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiSSBkZXNjcml0dG9yaSBkaSBncnVwcG8gc2VtYnJhbm8gbm9uIHZhbGlkaS4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMjY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgdXNpbmcgdGhlIGJhY2t1cCBibG9ja3MiCittc2dzdHIgIiVzIGNlcmNhbmRvIHRyYSBpIGJsb2NjaGkgZGkgYmFja3VwLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogbm9uIOggc3RhdG8gdHJvdmF0byB1biBzdXBlcmJsb2NjbyB2YWxpZG8gZGVsIGpvdXJuYWxcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAxCittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkxhIHJldmlzaW9uZSBkZWwgZmlsZXN5c3RlbSBzZW1icmEgdHJvcHBvIGFsdGEgcGVyIHF1ZXN0YSB2ZXJzaW9uZSBkaSAiCisiZTJmc2NrLlxuIgorIihPIGlsIHN1cGVyYmxvY2NvIGRlbCBmaWxlc3lzdGVtIOggY29ycm90dG8pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIkUnIHBvc3NpYmlsZSBjaGUgcXVlc3RhIHNpYSB1bmEgcGFydGl6aW9uZSBkaSBkaW1lbnNpb25lIHplcm8/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIlNlcnZlIGFjY2Vzc28gZGkgdGlwbyAlcyBhbCBmaWxlc3lzdGVtLCBvIOggbmVjZXNzYXJpbyBlc3NlcmUgcm9vdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIkRldmljZSBub24gZXNpc3RlbnRlIG8gZGkgc3dhcD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE4Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzIxCisjLCBmdXp6eQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIkRldmljZSBub24gZXNpc3RlbnRlIG8gZGkgc3dhcD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzI0Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJEaXNjbyBwcm90ZXR0byBkYSBzY3JpdHR1cmE6IHVzYXJlIGwnb3B6aW9uZSAtbiBwZXIgY29udHJvbGxhcmVcbiIKKyJpbiBtb2RhbGl04CBzb2xhIGxldHR1cmEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM4OQorbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiVXRpbGl6emFyZSB1bmEgdmVyc2lvbmUgcGn5IG51b3ZhIGRpIGUyZnNjay4iCisKKyM6IGUyZnNjay91bml4LmM6MTQzNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJjb250cm9sbGFuZG8gaWwgam91cm5hbCBleHQzIHBlciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNDQ4Cittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorIkF0dGVuemlvbmU6IGVzc2VuZG8gdW4gY29udHJvbGxvIGEgc29sYSBsZXR0dXJhLCBpbCBqb3VybmFsIG5vbiB2ZXJy4CAiCisicmlwcmlzdGluYXRvLlxuIgorCisjIGZ1enp5CisjOiBlMmZzY2svdW5peC5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZWkgaSBmbGFnIGRlbCBzdXBlcmJsb2NjbyBhICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAicmlwcmlzdGluYW5kbyBpbCBqb3VybmFsIGV4dDMgZGkgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocyk6IgorbXNnc3RyICJMJ0BoICVpIGhhIHVuYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggbm9uIHN1cHBvcnRhdGEgKCVOKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZTogaWwgc3VwcG9ydG8gcGVyIGxhIGNvbXByZXNzaW9uZSDoIHNwZXJpbWVudGFsZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiRTJmc2NrIG5vbiDoIHN0YXRvIGNvbXBpbGF0byBjb24gaWwgc3VwcG9ydG8gSFRSRUUsXG4iCisiXHRtYSBpbCBmaWxlc3lzdGVtICVzIGNvbnRpZW5lIGRpcmVjdG9yeSBIVFJFRS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgImxlZ2dlbmRvIGwnaW5vZGUgbnVtZXJvIDEiCisKKyM6IGUyZnNjay91bml4LmM6MTU2OAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiUXVlc3RvIG5vbiDoIHVuIGJ1b24gc2Vnbm8sIG1hIHNpIHRlbnRlcuAgZGkgY29udGludWFyZS4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICJDcmVhemlvbmUgZGVsIGpvdXJuYWwgKCVkIGJsb2NjaGkpOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTYxOQorIywgZnV6enkKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiZmF0dG9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjIwCittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY0MworbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICJSaWF2dmlvIGRpIGUyZnNjayBkYWxsJ2luaXppby4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDcKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAicmVzZXR0YW5kbyBpbCBjb250ZXN0byIKKworIzogZTJmc2NrL3VuaXguYzoxNjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgY2FuY2VsbGF0by5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjU5Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiYW5udWxsYXRvIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzEgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIElMIEZJTEVTWVNURU0gRScgU1RBVE8gTU9ESUZJQ0FUTyAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogUklBVlZJQVJFIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4MyBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogQVRURU5aSU9ORTogSWwgZmlsZXN5c3RlbSBjb250aWVuZSBhbmNvcmEgZXJyb3JpICIKKyIqKioqKioqKioqKipcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzIzCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAiaW1wb3N0YW5kbyBsJ2lub2RlIGRlbCBibG9jY28gZGlmZXR0b3NvIgorCisjOiBlMmZzY2svdXRpbC5jOjE4OSBtaXNjL3V0aWwuYzo3MAorbXNnaWQgInlZIgorbXNnc3RyICJzUyIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA0Cittc2dpZCAiPHk+IgorbXNnc3RyICI8cz4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA2Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA4Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKHMvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIyCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJjYW5jZWxsYXRvIVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzNworbXNnaWQgInllc1xuIgorbXNnc3RyICJz7FxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOQorbXNnaWQgIm5vXG4iCittc2dzdHIgIm5vXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBub1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IHPsXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAieWVzIgorbXNnc3RyICJz7CIKKworIzogZTJmc2NrL3V0aWwuYzoyNTcKK21zZ2lkICJubyIKK21zZ3N0ciAibm8iCisKKyM6IGUyZnNjay91dGlsLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjI3NworbXNnaWQgInJlYWRpbmcgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMiCittc2dzdHIgImxldHR1cmEgZGVsbGUgbWFwcGUgZGkgYml0IGlub2RlIGUgYmxvY2NvIgorCisjOiBlMmZzY2svdXRpbC5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXRyeWluZyB0byByZWFkIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJyaXByb3ZhbmRvIGEgbGVnZ2VyZSBsZSBtYXBwZSBkaSBiaXQgcGVyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5NworIywgZnV6enkKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICJzY3JpdmVuZG8gbGUgbWFwcGUgZGkgYml0IGRpIGJsb2NjbyIKKworIzogZTJmc2NrL3V0aWwuYzozMDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInJpcHJvdmFuZG8gYSBzY3JpdmVyZSBsZSBtYXBwZSBkaSBiaXQgZGkgaW5vZGUgcGVyICVzIgorCisjIGZ1enp5CisjOiBlMmZzY2svdXRpbC5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IElOQ09OU0lTVEVOWkEgSU5BU1BFVFRBVEE6IEVTRUdVSVJFIGZzY2sgTUFOVUFMTUVOVEUuXG4iCisiXHQoZXMuLCBzZW56YSBsZSBvcHppb25pIC1hIG8gLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIk1lbW9yaWEgdXNhdGE6ICVkay8lZGsgKCVkay8lZGspLCAiCisKKyM6IGUyZnNjay91dGlsLmM6Mzk5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIk1lbW9yaWEgdXNhdGE6ICVkLCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgImR1cmF0YTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJ0ZW1wbyByaW1hbmVudGU6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ2IGUyZnNjay91dGlsLmM6NDYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSAlbGQgaW4gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc0IGUyZnNjay91dGlsLmM6NDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAic2NyaXZlbmRvIGwnaW5vZGUgJWxkIGluICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjYzNgorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgemVyb2l6aW5nIGJ1ZmZlciIKK21zZ3N0ciAiYWxsb2NhbmRvIGkgYnVmZmVyIHplcm9pemluZyIKKworIzogZTJmc2NrL3V0aWwuYzo3ODgKK21zZ2lkICIiCisiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzICIKKyJydW5uaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjkKKyMsIGZ1enp5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiZmF0dG8gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIlVzbzogJXMgWy1iIGRpbV9ibG9jY29dIFstaSBmaWxlX2RpX2lucHV0XSBbLW8gZmlsZV9kaV9vdXRwdXRdIFstc3Z3bmZdXG4iCisiIFstYyBibG9ja3NfYXRfb25jZV0gWy1wIG51bV9wYXNzaV0gWy10IG1vZGVsbG9fZGlfcHJvdmEgWy10ICIKKyJtb2RlbGxvX2RpX3Byb3ZhIFsuLi5dXV1cbiIKKyIgZGV2aWNlIFtibG9jY29fZmluYWxlIFtibG9jY29faW5pemlhbGVdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiQ29udHJvbGxvIGNvbiB1biBtb2RlbGxvIGNhc3VhbGU6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiQ29udHJvbGxvIGNvbiBtb2RlbGxvIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJkdXJhbnRlIGxhIHJpY2VyY2EiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiVmFsb3JlIHN0cmFubyAoJWxkKSBuZWxsYSBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiZHVyYW50ZSBsYSBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAiaW5pemlhbmRvIGEgc2NvcnJlcmUgbGEgbGlzdGEgZGVpIGJsb2NjaGkgZGlmZXR0b3NpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwMyBtaXNjL2JhZGJsb2Nrcy5jOjYwMiBtaXNjL2JhZGJsb2Nrcy5jOjc1OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAiYWxsb2NhbmRvIGkgYnVmZmVyIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICJDb250cm9sbG8gZGVpIGJsb2NjaGkgZGEgJWx1IGEgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiUmljZXJjYSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIGluIG1vZGFsaXTgIHNvbGEgbGV0dHVyYVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiUmljZXJjYSBkZWkgYmxvY2NoaSBub24gdmFsaWRpICh0ZXN0IGEgc29sYSBsZXR0dXJhKTogIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOCBtaXNjL2JhZGJsb2Nrcy5jOjYzNCBtaXNjL2JhZGJsb2Nrcy5jOjY3NgorIzogbWlzYy9iYWRibG9ja3MuYzo4MjIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MDkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiUmljZXJjYSBkZWkgYmxvY2NoaSBub24gdmFsaWRpIGluIG1vZGFsaXTgIGxldHR1cmEtc2NyaXR0dXJhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJEYWwgYmxvY2NvICVsdSBhbCBibG9jY28gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxldHR1cmEgZSBjb25mcm9udG86ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKyJSaWNlcmNhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkgaW4gbW9kYWxpdOAgbGV0dHVyYS1zY3JpdHR1cmEgbm9uICIKKyJkaXN0cnV0dGl2YVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICIiCisiUmljZXJjYSBkZWkgYmxvY2NoaSBub24gdmFsaWRpICh0ZXN0IGluIG1vYWxpdOAgbGV0dHVyYS1zY3JpdHR1cmEgbm9uICIKKyJkaXN0cnV0dGl2YSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIlJpbGV2YXRvIGludGVycnVwdCwgcHVsaXppYSBpbiBjb3Jzb1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgImR1cmFudGUgbGEgc2NyaXR0dXJhIGRlaSBkYXRpIGRlbCB0ZXN0LCBibG9jY28gJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk4OCBtaXNjL3V0aWwuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyDoIG1vbnRhdG86ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTAKKyMsIGZ1enp5Cittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgImZvcnphdG8gY29tdW5xdWUgYmFkYmxvY2tzLiBTcGVyaWFtbyBjaGUgL2V0Yy9tdGFiIHNpIGVycmF0by5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIm5vbiDoIHNpY3VybyBlc2VndWlyZSBiYWRibG9ja3MhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMCBtaXNjL3V0aWwuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMworIywgZnV6enkKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiZm9yemF0byBjb211bnF1ZSBiYWRibG9ja3MuIFNwZXJpYW1vIGNoZSAvZXRjL210YWIgc2kgZXJyYXRvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBkZWwgYmxvY2NvIGRpZmV0dG9zbyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWxsb2NhcmUgbWVtb3JpYSBwZXIgaWwgbW9kZWxsbyBkaSBwcm92YSAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjMKK21zZ2lkICJNYXhpbXVtIG9mIG9uZSB0ZXN0X3BhdHRlcm4gbWF5IGJlIHNwZWNpZmllZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiIgorIkUnIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSB1biBzb2xvIG1vZGVsbG8gZGkgcHJvdmEgaW4gbW9kYWxpdOAgc29sYSBsZXR0dXJhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjkKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJNb2RlbGxvIGRpIHByb3ZhIGNhc3VhbGUgbm9uIGNvbnNlbnRpdG8gaW4gbW9kYWxpdOAgc29sYSBsZXR0dXJhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGRldGVybWluYXJlIGxhIGRpbWVuc2lvbmUgZGVsIGRldmljZTpcbiIKKyJzcGVjaWZpY2FybGEgbWFudWFsbWVudGVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAidGVudGFuZG8gZGkgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgZGV2aWNlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTQKKyMsIGZ1enp5Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAiUmlsb2NhemlvbmUgZGVpIGJsb2NjaGkiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorIywgZnV6enkKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAiUHJpbW8gYmxvY2NvIGRhdGk9JXVcbiIKKworIyBmdXp6eQorIzogbWlzYy9iYWRibG9ja3MuYzoxMjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbHUiCittc2dzdHIgImJsb2NjbyBpbml6aWFsZSBub24gdmFsaWRvIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI1OQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJjcmVhbmRvIGxhIGxpc3RhIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkgaW4gbWVtb3JpYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjc0CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgImFnZ2l1bmdlbmRvIHVuIGVsZW1lbnRvIGFsbGEgbGlzdGEgZGVpIGJsb2NjaGkgZGlmZXR0b3NpIGluIG1lbW9yaWEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlBhc3NvIGNvbXBsZXRhdG8uICV1IGJsb2NjaGkgbm9uIHZhbGlkaSB0cm92YXRpLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYWNEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgInVzbzogJXMgWy1SVl0gWy0rPUFhY0RkaWpzU3VdIFstdiB2ZXJzaW9uZV0gZmlsZS4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgInZlcnNpb25lIG5vbiB2YWxpZGEgLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidGVudGFuZG8gZGkgZmFyZSBsbyBzdGF0IGRpICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJsZWdnZW5kbyBpIGZsYWcgZGkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjE3IG1pc2MvY2hhdHRyLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGV4dGVudCBmbGFnIG5vdCBzdXBwb3J0ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMjIgbWlzYy9jaGF0dHIuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiZmxhZyBkaSAlcyBpbXBvc3RhdGkgY29tZSIKKworIzogbWlzYy9jaGF0dHIuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiaW1wb3N0YW5kbyBpIGZsYWcgZGkgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaW9uZSBkaSAlcyBpbXBvc3RhdGEgYSAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJpbXBvc3RhbmRvIGxhIHZlcnNpb25lIGEgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBsYSB2YXJpYWJpbGUgZGkgcGVyY29yc28gbmVsbGEgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMyMgorbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IOggaW5jb21wYXRpYmlsZSBjb24gKyBlIC1cbiIKKworIzogbWlzYy9jaGF0dHIuYzozMzAKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiU2kgZGV2ZSB1c2FyZSAnLXYnLCA9LCAtIG8gK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGRldmljZVxuIgorbXNnc3RyICJVc286ICVzIFstYmZoaXhWXSBbLW9iIHN1cGVyYmxvY2NvXSBbLW9CIGRpbV9ibG9jY29dIGRldmljZVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiYmJsb2NjbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OAorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cHBvICVsdTogKEJsb2NjaGkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICJkaW1lbnNpb25lIGlub2RlIG5vbiB2YWxpZGEgLSAlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgc3VwZXJibG9jY28gJXMgYSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICJQcmltYXJpbyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiQmFja3VwIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIERlc2NyaXR0b3JpIGRpIGdydXBwbyBhICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgImJsb2NjaGkgcmlzZXJ2YXRpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIERlc2NyaXR0b3JpIGRpIGdydXBwbyBhIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM0Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIE1hcHBhIGRlaSBiaXQgZGkgYmxvY2NvIGEgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOAorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiLCBtYXBwYSBkZWkgYml0IGlub2RlIGEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQyCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBUYXZvbGEgZGVnbGkgaW5vZGUgYSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICAlZCBibG9jY2hpIGxpYmVyaSwgJWQgaW5vZGUgbGliZXJpLCAlZCBkaXJlY3RvcnlcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEJsb2NjaGkgbGliZXJpOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNjkKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgSW5vZGUgbGliZXJpOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAic3RhbXBhbmRvIGxhIGxpc3RhIGRlaSBibG9jY2hpIGRpZmV0dG9zaSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkJsb2NjaGkgbm9uIHZhbGlkaTogJWQiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzAyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIG9wZW5pbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAibGVnZ2VuZG8gbCdpbm9kZSBkZWwgam91cm5hbCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgImxlZ2dlbmRvIGlsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2OAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJEaW1lbnNpb25lIGRlaSBibG9jY2hpIGRlbCBqb3VybmFsOiAgICVkXG4iCisiRGltZW5zaW9uZSBkZWwgam91cm5hbDogICAgICAgICAgICAgICAlZFxuIgorIlByaW1vIGJsb2NjbyBkZWwgam91cm5hbDogICAgICAgICAgICAgJWRcbiIKKyJTZXF1ZW56YSBkZWwgam91cm5hbDogICAgICAgICAgICAgICAgIG94JTA4eFxuIgorIkluaXppbyBkZWwgam91cm5hbDogICAgICAgICAgICAgICAgICAgJWRcbiIKKyJOdW1lcm8gZGkgdXRlbnRpIGRlbCBqb3VybmFsOiAgICAgICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjE4Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgImxlZ2dlbmRvIGlsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDA5Cittc2dpZCAiQ291bGRuJ3QgZmluZCBqb3VybmFsIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVycyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpIG1hZ2ljIG51bWJlcnMgZGVsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDEzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiRGltZW5zaW9uZSBkZWkgYmxvY2NoaSBkZWwgam91cm5hbDogICAlZFxuIgorIkRpbWVuc2lvbmUgZGVsIGpvdXJuYWw6ICAgICAgICAgICAgICAgJWRcbiIKKyJQcmltbyBibG9jY28gZGVsIGpvdXJuYWw6ICAgICAgICAgICAgICVkXG4iCisiU2VxdWVuemEgZGVsIGpvdXJuYWw6ICAgICAgICAgICAgICAgICBveCUwOHhcbiIKKyJJbml6aW8gZGVsIGpvdXJuYWw6ICAgICAgICAgICAgICAgICAgICVkXG4iCisiTnVtZXJvIGRpIHV0ZW50aSBkZWwgam91cm5hbDogICAgICAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQyIG1pc2MvbWtlMmZzLmM6NjYyIG1pc2MvdHVuZTJmcy5jOjExMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBmYXJlIGlsIHBhcnNpbmcgZGVsbGUgb3B6aW9uaSByYWlkIVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0cm8gZGkgc3RyaWRlIG5vbiB2YWxpZG8uXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9wemlvbmkgcmFpZCBub24gdmFsaWRlLlxuIgorIlxuIgorIkxlIG9wemlvbmkgcmFpZCBzb25vIHNlcGFydGUgZGEgdmlyZ29sZSwgZSBwb3Nzb25vIGF2ZXJlIHVuIHBhcmFtZXRybywgY2hlXG4iCisiXHToIHBhc3NhdG8gZGEgdW4gc2Vnbm8gZGkgdWd1YWxlICgnPScpLlxuIgorIlxuIgorIkxlIG9wemlvbmkgcmFpZCB2YWxpZGUgc29ubzpcbiIKKyJcdHN0cmlkZT1sdW5naGV6emEgc3RyaWRlIGluIGJsb2NjaGk+XG4iCisiXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NTQgbWlzYy9ta2UyZnMuYzoxNTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRVc2FuZG8gJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU5MCBtaXNjL2UyaW1hZ2UuYzoxMzA5IG1pc2MvdHVuZTJmcy5jOjE5MjMKKyM6IHJlc2l6ZS9tYWluLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIHVuIHZhbGlkbyBzdXBlcmJsb2NjbyBwZXIgaWwgZmlsZXN5c3RlbS5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yZSBsZWdnZW5kbyBsZSBtYXBwZSBkaSBiaXQ6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRXSBkZXZpY2UgaW1hZ2VfZmlsZVxuIgorbXNnc3RyICJVc286ICVzIFstcl0gZGlzcG9zaXRpdm8gZmlsZV9pbW1hZ2luZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBpbCBidWZmZXIgZCdpbnRlc3RhemlvbmVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTcxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJzY3JpdmVuZG8gaWwgc3VwZXJibG9jY28iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgInNjcml2ZW5kbyBsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGEgbWFwcGEgZGVpIGJpdCBkZWwgYmxvY2NvIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAic2NyaXZlbmRvIGxhIG1hcHBhIGRlaSBiaXQgZGVsbCdpbm9kZSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDogaW1wb3NzaWJpbGUgYXByaXJlICVzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogaW1wb3NzaWJpbGUgcmFnZ2l1bmdlcmUgaWwgc3VwZXJibG9jY29cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yZSBkdXJhbnRlIGxhIGxldHR1cmEgZGVsIHN1cGVyYmxvY2NvXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDogbm9uIOggdW4gZmlsZXN5c3RlbSBleHQyXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IHRyb25jYW1lbnRvIGRlbGwnZXRpY2hldHRhLCB0cm9wcG8gbHVuZ2EuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIHNwb3N0YXJzaSBudW92YW1lbnRlIHN1bCBzdXBlcmJsb2Njb1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGVycm9yZSBkdXJhbnRlIGxhIHNjcml0dHVyYSBkZWwgc3VwZXJibG9jY29cbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJVc286IGUybGFiZWwgZGV2aWNlIFtudW92YV9ldGljaGV0dGFdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjUyCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjcmVhcmUgdW4gaXRlcmF0b3JlIGRpcnNfdG9faGFzaDogJW0iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiYXZ2aWFuZG8gbGEgc2NhbnNpb25lIGRlZ2xpIGlub2RlIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICJkZXRlcm1pbmFuZG8gc2UgJXMg6CBtb250YXRvLiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJkdXJhbnRlIGwnYXBlcnR1cmEgZGkgJXMiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcGxheWVkIHRyYW5zYWN0aW9uIG9mIHNpemUgJXpkIGF0IGxvY2F0aW9uICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiQVRURU5aSU9ORTogaW1wb3NzaWJpbGUgYXByaXJlICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIkFUVEVOWklPTkU6IGZvcm1hdG8gbm9uIHZhbGlkbyBhbGxhIGxpbmVhICVkIGRpICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorIywgZnV6enkKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxhXGFcYUFUVEVOWklPTkU6IElsIGZpbGUgL2V0Yy9mc3RhYiBub24gY29udGllbmUgaWwgY2FtcG8gZnNja1xuIgorIlx0cGFzc24uIEwnZXJyb3JlIHZlcnLgIGlnbm9yYXRvLCBtYSBpbCBmaWxlIC9ldGMvZnN0YWIgZG92cmViYmVcbiIKKyJcdGVzc2VyZSBzaXN0ZW1hdG8gYWwgcGn5IHByZXN0by5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IG5vbiB0cm92YXRvXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiBhc3BldHRhOiBOb24gY2kgc29ubyBwcm9jZXNzaSBmaWdsaT8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiQXR0ZW56aW9uZS4uLiAlcyBwZXIgaWwgZGV2aWNlICVzIOggdXNjaXRvIGNvbiBpbCBzZWduYWxlICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IGxvIHN0YXRvIOggJXgsIG5vbiBkb3ZyZWJiZSBhdnZlbmlyZSBtYWkuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiVGVybWluYXRvIGNvbiAlcyAoc3RhdG8gZGkgdXNjaXRhICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlczogRXJyb3JlICVkIGVzZWd1ZW5kbyBmc2NrLiAlcyBwZXIgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKyJUdXR0aSBvIG5lc3N1biB0aXBvIGRpIGZpbGVzeXN0ZW0gcGFzc2F0aSBjb24gbCdvcHppb25lIC10IGRldm9ubyBlc3NlcmUgIgorInByZWNlZHV0aVxuIgorImRhICdubycgbyAnIScuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc2MQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZXN5c3RlbSB0eXBlc1xuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBpIHRpcGkgZGkgZmlsZXN5c3RlbVxuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBza2lwcGluZyBiYWQgbGluZSBpbiAvZXRjL2ZzdGFiOiBiaW5kIG1vdW50IHdpdGggbm9uemVybyBmc2NrIHBhc3MgIgorIm51bWJlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGltcG9zc2liaWxlIGNvbnRyb2xsYXJlICVzOiBmc2NrLiVzIG5vbiB0cm92YXRvXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIkNvbnRyb2xsbyBkaSB0dXR0aSBpIGZpbGVzeXN0ZW0uXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0tYXR0ZXNhLS0gKHBhc3NvICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4CisjLCBmdXp6eQorbXNnaWQgIiIKKyJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiVXNvOiBmc2NrIFstQUNOUFJUVl0gWy10IHRpcG9mc10gW29wemlvbmktZnNdIFtmaWxlc3lzIC4uLl1cbiIKKworIzogbWlzYy9mc2NrLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgZGV2aWNlc1xuIgorbXNnc3RyICIlczogdHJvcHBpIGRldmljZVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogdHJvcHBpIHBhcmFtZXRyaVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJVc286ICVzIFtSVmFkbHZdIFtmaWxlIC4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJEdXJhbnRlIGxhIGxldHR1cmEgZGVpIGZsYWcgZGkgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJEdXJhbnRlIGxhIGxldHR1cmEgZGVsbGEgdmVyc2lvbmUgZGkgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLSIKKyJjb3VudF1cbiIKK21zZ3N0ciAiIgorIlVzbzogJXMgWy1jfC10fC1sIG5vbWVmaWxlXSBbLWIgZGltX2Jsb2NjaGldIFstZiBkaW1fZnJhbW1lbnRvXVxuIgorIlx0Wy1pIGJ5dGUtcGVyLWlub2RlXSBbLWpdIFstSiBvcHppb25pLWpvdXJuYWxdIFstTiBudW1lcm8tZGktaW5vZGVdXG4iCisiXHRbLW0gcGVyY2VudHVhbGUtYmxvY2NoaS1yaXNlcnZhdGldIFstbyBvcy1vcmlnaW5lXSBbLWcgYmxvY2NoaS1wZXItIgorImdydXBwb11cbiIKKyJcdFstTCBldGljaGV0dGEtdm9sdW1lXSBbLU0gdWx0aW1hLWRpci1tb250YXRhXSBbLU8gY2FyYXR0ZXJpc3RpY2FbLC4uLl1dXG4iCisiXHRbLXIgcmV2aXNpb25lLWZzXSBbLVIgb3B6X3JhaWRdIFstcXZTVl0gZGV2aWNlIFtudW1lcm8tYmxvY2NoaV1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJFc2VjdXppb25lIGRlbCBjb21hbmRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJwcm92YW5kbyBhIGNhcmljYXJlICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI4Cittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJhbmFsaXp6YW5kbyB1bmEgbGlzdGEgZGkgYmxvY2NoaSBub24gdmFsaWRpIGRhbCBwcm9ncmFtbWEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrICVkIGluIHByaW1hcnkgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yIGFyZWEgYmFkLlxuIgorbXNnc3RyICIiCisiQmxvY2NvICVkIG5vbiB2YWxpZG8gbmVsIHN1cGVyYmxvY2NvIHByaW1hcmlvL2FyZWEgZGVsIGRlc2NyaXR0b3JlIGRpICIKKyJncnVwcG8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiSSBibG9jY2hpIGRhICVkIGEgJWQgZGV2b25vIGVzc2VyZSB2YWxpZGkgcGVyIGNvc3RydWlyZSB1biBmaWxlc3lzdGVtLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJBbm51bGxhbWVudG8uLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lOiBpbCBzdXBlcmJsb2NjbyBkaSBiYWNrdXAvZGVzY3JpdHRvcmkgZGkgZ3J1cHBvIGFpIGJsb2NjaGkgJWRcbiIKKyJcdGNvbnRlbmdvbm8gYmxvY2NoaSBub24gdmFsaWRpLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI5OQorbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICJjb250cmFzc2VnbmFuZG8gaSBibG9jY2hpIG5vbiB2YWxpZGkgY29tZSB1dGlsaXp6YXRpIgorCisjOiBtaXNjL21rZTJmcy5jOjMxNgorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIlNjcml0dHVyYSBkZWxsZSB0YXZvbGUgZGVnbGkgaW5vZGU6ICIKKworIzogbWlzYy9ta2UyZnMuYzozMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbXBvc3NpYmlsZSBzY3JpdmVyZSAlZCBibG9jY2hpIG5lbGxhIHRhdm9sYSBkZWdsaSBpbm9kZSBpbml6aWFuZG8gZGEgJWQ6ICIKKyIlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjM1MSBtaXNjL21rZTJmcy5jOjIxNzUgbWlzYy9ta2UyZnMuYzoyNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImZhdHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzYyCittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgImNyZWFuZG8gbGEgZGlyZWN0b3J5IHJvb3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzY5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJjcmVhbmRvIGwnaW5vZGUgcm9vdCIKKworIzogbWlzYy9ta2UyZnMuYzozODMKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJpbXBvc3RhbmRvIGkgcGVybWVzc2kgZGVsbCdpbm9kZSByb290IgorCisjOiBtaXNjL21rZTJmcy5jOjQwMQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJjcmVhbmRvIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQwOAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgImNlcmNhbmRvIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQyMQorbXNnaWQgIndoaWxlIGV4cGFuZGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiZXNwYW5kZW5kbyAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzYKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiaW1wb3N0YW5kbyBsJ2lub2RlIGRlbCBibG9jY28gZGlmZXR0b3NvIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2MworIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJGaW5lIG1lbW9yaWEgY2FuY2VsbGFuZG8gaSBzZXR0b3JpICVkLSVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IGltcG9zc2liaWxlIGxlZ2dlcmUgaWwgYmxvY2NvIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkF0dGVuemlvbmU6IGltcG9zc2liaWxlIGNhbmNlbGxhcmUgaWwgc2V0dG9yZSAlZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDUKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJpbml6aWFsaXp6YW5kbyBpbCBzdXBlcmJsb2NjbyBkZWwgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzo1MTMKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIkF6emVyYW1lbnRvIGRlbCBkZXZpY2UgZGkgam91cm5hbGluZzogIgorCisjOiBtaXNjL21rZTJmcy5jOjUyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJhenplcmFuZG8gaWwgZGV2aWNlIGRpIGpvdXJuYWxpbmcgKGJsb2NjbyAldSwgbnVtZXJvICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo1NDMKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAic2NyaXZlbmRvIGlsIHN1cGVyYmxvY2NvIGRlbCBqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjU1OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorImF0dGVuemlvbmU6ICVkIGJsb2NjaGkgaW51dGlsaXp6YXRpLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2MworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkV0aWNoZXR0YSBkZWwgZmlsZXN5c3RlbT0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAiVGlwbyBTTzogIgorCisjOiBtaXNjL21rZTJmcy5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkRpbWVuc2lvbmUgYmxvY2NvPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRGltZW5zaW9uZSBibG9jY289JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJEaW1lbnNpb25lIGZyYW1tZW50bz0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgaW5vZGUsICV1IGJsb2NjaGlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVsbHUgYmxvY2tzICglMi4yZiUlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXJcbiIKK21zZ3N0ciAiJXUgYmxvY2NoaSAoJTIuMmYlJSkgcmlzZXJ2YXRpIHBlciBsJ3V0ZW50ZSByb290XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiUHJpbW8gYmxvY2NvIGRhdGk9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIkV0aWNoZXR0YSBkZWwgZmlsZXN5c3RlbT0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgZ3J1cHBpIGRpIGJsb2NjaGlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGdydXBwbyBkaSBibG9jY2hpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY2NoaSBwZXIgZ3J1cHBvLCAldSBmcmFtbWVudGkgcGVyIGdydXBwb1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2NjaGkgcGVyIGdydXBwbywgJXUgZnJhbW1lbnRpIHBlciBncnVwcG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpbm9kZSBwZXIgZ3J1cHBvXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIkJhY2t1cCBkZWwgc3VwZXJibG9jY28gc2FsdmF0aSBuZWkgYmxvY2NoaTogIgorCisjOiBtaXNjL21rZTJmcy5jOjY4NyBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIm1vZGVsbG8gZGkgcHJvdmEgbm9uIHZhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjcxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpcGUtd2lkdGggcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJQYXJhbWV0cm8gZGkgc3RyaWRlIG5vbiB2YWxpZG8uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPcHppb25pIHJhaWQgbm9uIHZhbGlkZS5cbiIKKyJcbiIKKyJMZSBvcHppb25pIHJhaWQgc29ubyBzZXBhcnRlIGRhIHZpcmdvbGUsIGUgcG9zc29ubyBhdmVyZSB1biBwYXJhbWV0cm8sIGNoZVxuIgorIlx06CBwYXNzYXRvIGRhIHVuIHNlZ25vIGRpIHVndWFsZSAoJz0nKS5cbiIKKyJcbiIKKyJMZSBvcHppb25pIHJhaWQgdmFsaWRlIHNvbm86XG4iCisiXHRzdHJpZGU9bHVuZ2hlenphIHN0cmlkZSBpbiBibG9jY2hpPlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6ODkxIG1pc2MvdHVuZTJmcy5jOjM5MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiU2V0IGRpIG9wemlvbmkgZGVsIGZpbGVzeXN0ZW0gbm9uIHZhbGlkbzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MDMgbWlzYy90dW5lMmZzLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiSW5zaWVtZSBkaSBvcHppb25pIGRpIG1vdW50IG5vbiB2YWxpZG86ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBbm51bGxhbWVudG8uLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGkgdGlwaSBkaSBmaWxlc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICJkaW1lbnNpb25lIGRlbCBibG9jY28gZGlmZXR0b3NvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lOiBsYSBkaW1lbnNpb25lIGRpIGJsb2NjbyAlZCBub24g6CB1dGlsaXp6YWJpbGUgc3UgbW9sdGkgc2lzdGVtaS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJkaW1lbnNpb25lIGRlbCBibG9jY28gZGlmZXR0b3NvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2MgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJOdW1lcm8gZGkgYmxvY2NoaSBwZXIgZ3J1cHBvIG5vbiB2YWxpZG8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2NworbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJpIGJsb2NjaGkgcGVyIGdydXBwbyBkZXZvbm8gZXNzZXJlIG11bHRpcGxpIGRpIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3NQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJOdW1lcm8gZGkgYmxvY2NoaSBub24gdmFsaWRvIVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODEKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidGFzc28gZGkgaW5vZGUgbm9uIHZhbGlkbyAlcyAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQwMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FICIKKyJub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxNQorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAibmVsbGEgbWFsbG9jIHBlciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlcyIKK21zZ3N0ciAicGVyY2VudHVhbGUgZGkgYmxvY2NoaSByaXNlcnZhdGkgbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICJ2ZXJzaW9uZSBub24gdmFsaWRhIC0gJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBpbm9kZSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBpbm9kZSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ5MgorIywgZnV6enkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8gcHXyIGVzc2VyZSBzcGVjaWZpY2F0YSBzb2xvIHVuYSB2b2x0YSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTAwCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItbyBwdfIgZXNzZXJlIHNwZWNpZmljYXRhIHNvbG8gdW5hIHZvbHRhIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTAgbWlzYy9ta2UyZnMuYzoyNTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgImR1cmFudGUgbCdhcGVydHVyYSBkZWwgZGlzcG9zaXRpdm8gZGkgam91cm5hbGluZyAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIiIKKyJEaW1lbnNpb25lIGRlaSBibG9jY2hpIGRlbCBkZXZpY2UgZGkgam91cm5hbGluZyAoJWQpIG1pbm9yZSBkZWxsYSBkaW0gbWluaW1hICIKKyJkZWkgYmxvY2NoaSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJBZ2dpdW50YSBkZWwgam91cm5hbCBhbCBkZXZpY2UgJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICJudW1lcm8gZGVpIGJsb2NjaGkgbm9uIHZhbGlkaSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODMKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJmaWxlc3lzdGVtIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTYgcmVzaXplL21haW4uYzozNzQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAidGVudGFuZG8gZGkgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgZmlsZXN5c3RlbSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAyCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsYSBkaW1lbnNpb25lIGRlbCBkZXZpY2U6IGJpc29nbmFcbiIKKyJzcGVjaWZpY2FyZSBsYSBkaW1lbnNpb25lIGRlbCBmaWxlc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwOQorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiU2VtYnJhIGNoZSBsYSBkaW1lbnNpb25lIGRlbCBkZXZpY2Ugc2lhIHplcm8uIFNwZWNpZmljYXRhIHBhcnRpemlvbmUgbm9uXG4iCisiXHR2YWxpZGEgbyBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkgbm9uIOggc3RhdGEgcmlsZXR0YSBkb3BvICIKKyJsJ2VzZWN1emlvbmVcbiIKKyJcdGRpIGZkaXNrLCBwb2ljaOkgdW5hIHBhcnRpemlvbmUgbW9kaWZpY2F0YSBlcmEgb2NjdXBhdGEuIFBvdHJlYmJlIGVzc2VyZVxuIgorIlx0bmVjZXNzYXJpbyByaWF2dmlhcmUgcGVyIHJpbGVnZ2VyZSBsYSB0YWJlbGxhIGRlbGxlIHBhcnRpemlvbmkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJJbCBmaWxlc3lzdGVtIOggcGn5IGdyYW5kZSBkZWxsYSBkaW1lbnNpb25lIGFwcGFyZW50ZSBkZWwgZGV2aWNlLiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTcxNgorbXNnaWQgImZzX3R5cGVzIGZvciBta2UyZnMuY29uZiByZXNvbHV0aW9uOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiXG4iCisiRGltZW5zaW9uZSBkZWwgam91cm5hbCB0cm9wcG8gZ3JhbmRlIHBlciBpbCBmaWxlc3lzdGVtLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInBlcmNlbnR1YWxlIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIG5vbiB2YWxpZGEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4OQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgInByb3ZhbmRvIGEgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgc2V0dG9yZSBoYXJkd2FyZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNzk1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgInByb3ZhbmRvIGEgZGV0ZXJtaW5hcmUgbGEgZGltZW5zaW9uZSBkZWwgc2V0dG9yZSBoYXJkd2FyZSIKKworIzogbWlzYy9ta2UyZnMuYzoxODI4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICJpbXBvc3RhbmRvIGwnaW5vZGUgZGVsIGJsb2NjbyBkaWZldHRvc28iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgzMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgImJsb2NjaGkgZGkgJWQgYnl0ZSB0cm9wcG8gZ3JhbmRpIHBlciBpbCBzaXN0ZW1hIChtYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJBdHRlbnppb25lOiBibG9jY2hpIGRpICVkIGJ5dGVzIHRyb3BwbyBncmFuZGkgcGVyIGlsIHNpc3RlbWEgKG1heCAlZCksICIKKyJjb250aW51byBjb211bnF1ZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MjAKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MjkKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiY29udGVnZ2lvIGRlaSBibG9jY2hpIHBlciBncnVwcG8gZnVvcmkgZGFsbCdpbnRlcnZhbGxvIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDQKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgImRpbWVuc2lvbmUgZGVsbCdpbm9kZSBub24gdmFsaWRhOiAlZCAobWluICVkL21heCAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTgxCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTI4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0Y2VyY2FuZG8gZGkgY3JlYXJlIGlsIGZpbGUgZGkgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyMTU0CisjLCBmdXp6eQorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJBZ2dpdW50YSBkZWwgam91cm5hbCBhbCBkZXZpY2UgJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyMTcwCittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI3NworIywgZnV6enkKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgImltcG9zdGFuZG8gaWwgc3VwZXJibG9jY28iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgInNvIHNjb25vc2NpdXRvIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAiU2NyaXR0dXJhIGRlbGxlIHRhdm9sZSBkZWdsaSBpbm9kZTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI0MjUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgInRlbnRhbmRvIGRpIGFsbG9jYXJlIGxlIHRhYmVsbGUgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGEgbWFwcGEgZGVpIGJpdCBkZWwgYmxvY2NvIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYXp6ZXJhbmRvIGlsIGJsb2NjbyAldSBhbGxhIGZpbmUgZGVsIGZpbGVzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ5MAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwMSBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGpvdXJuYWwgdG8gZGV2aWNlICVzOiAiCittc2dzdHIgIkFnZ2l1bnRhIGRlbCBqb3VybmFsIGFsIGRldmljZSAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0Y2VyY2FuZG8gZGkgYWdpZ3VuZ2VyZSBpbCBqb3VybmFsIGFsIGRldmljZSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTI1IG1pc2MvbWtlMmZzLmM6MjU1NyBtaXNjL3R1bmUyZnMuYzo2NjkgbWlzYy90dW5lMmZzLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAiZmF0dG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICgldSBibG9ja3MpOiAiCittc2dzdHIgIkNyZWF6aW9uZSBkZWwgam91cm5hbCAoJWQgYmxvY2NoaSk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTUzCittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRjZXJjYW5kbyBkaSBjcmVhcmUgaWwgam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTY0IG1pc2MvdHVuZTJmcy5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICIiCisiU2NyaXR0dXJhIGRlbGxlIGluZm9ybWF6aW9uaSBkZWkgc3VwZXJibG9jY2hpIGUgZGVsbCdhY2NvdW50aW5nIGRlbCAiCisiZmlsZXN5c3RlbTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIkF0dGVuemlvbmUsIHByb2JsZW1pIGR1cmFudGUgbGEgc2NyaXR0dXJhIGRlaSBzdXBlcmJsb2NjaGkuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImZhdHRvXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJVc286IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJVc286ICVzIDxkZXYxPiA8ZGV2Mj4gPGRldjM+XG4iCisiXG4iCisiUXVlc3RvIHByb2dyYW1tYSBzdGFtcGEgbGUgaW5mb3JtYXppb25pIGRpIHBhcnRpemlvbmUgcGVyIHVuIGluc2llbWUgZGkgIgorImRldmljZVxuIgorIlVuIHV0aWxpenpvIGNvbXVuZSBkaSBxdWVzdG8gcHJvZ3JhbW1hIOg6XG4iCisiXG4iCisiXHQlcyAvZGV2L2hkYT9cbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgImUybGFiZWw6IGltcG9zc2liaWxlIGFwcmlyZSAlc1xuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBnZW9tZXRyeSBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNworbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJFc2VndWlyZSBlMmZzY2sgc3VsIGZpbGVzeXN0ZW0uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJVc286ICVzIFstYyBtYXgtbnVtZXJvLW1vdW50XSBbLWUgY29tcG9ydGFtZW50by1lcnJvcmldIFstZyBncnVwcG9dXG4iCisiXHRbLWkgaW50ZXJ2YWxsb1tkfG18d11dIFstal0gWy1KIG9wemlvbmktam91cm5hbF1cbiIKKyJcdFstbF0gWy1zIGZsYWctc3BhcnNlXSBbLW0gcGVyY2VudHVhbGUtYmxvY2NoaS1yaXNlcnZhdGldXG4iCisiXHRbLW8gW15db3B6aW9uaS1tb3VudFssLi4uXV0gWy1yIG51bWVyby1ibG9jY2hpLXJpc2VydmF0aV1cbiIKKyJcdFstdSB1dGVudGVdIFstQyBudW1lcm8tbW91bnRdIFstTCBldGljaGV0dGEtdm9sdW1lXSBbLU0gdWx0aW1hLWRpci0iCisibW9udGF0YV1cbiIKKyJcdFstTyBbXl1jYXJhdHRlcmlzdGljYVssLi4uXV0gWy1UIHVsdGltby1jb250cm9sbG9dIFstVSBVVUlEXSBkZXZpY2VcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiY2VyY2FuZG8gZGkgYXByaXJlIGlsIGpvdXJuYWwgZXN0ZXJubyIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBub24g6CB1biBkaXNwb3NpdGl2byBkaSBqb3VybmFsaW5nLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJTdXBlcmJsb2NjbyBkZWwgam91cm5hbCBub24gdHJvdmF0byFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjM2Cittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJVVUlEIGRlbCBmaWxlc3lzdGVtIG5vbiB0cm92YXRvIHN1bCBkaXNwb3NpdGl2byBkaSBqb3VybmFsaW5nLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNTcKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjUKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiSm91cm5hbCByaW1vc3NvXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMwOQorbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAibGVnZ2VuZG8gbGUgbWFwcGUgZGVpIGJpdCIKKworIzogbWlzYy90dW5lMmZzLmM6MzE3Cittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiYXp6ZXJhbmRvIGwnaW5vZGUgZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyOAorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAic2NyaXZlbmRvIGwnaW5vZGUgZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIkltcG9zdGF6aW9uZSBkaSBkYXRhIGVkIG9yYSBkZWxsJ3VsdGltbyBjb250cm9sbG8gZGVsIGZpbGVzeXN0ZW0gYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTEKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIklsIGZsYWcgaGFzX2pvdXJuYWwgcHXyIGVzc2VyZSBhenplcmF0byBxdWFuZG8gaWwgZmlsZXN5c3RlbSBub25cbiIKKyLoIG1vbnRhdG8gbyDoIG1vbnRhdG8gc29sbyBpbiBsZXR0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTkKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJJbCBmbGFnIG5lZWRzX3JlY292ZXJ5IOggaW1wb3N0YXRvLiBFc2VndWlyZSBlMmZzY2sgcHJpbWEgZGkgYXp6ZXJhcmVcbiIKKyJpbCBmbGFnIGhhc19qb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MzgKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIklsIGZsYWcgaGFzX2pvdXJuYWwgcHXyIGVzc2VyZSBhenplcmF0byBxdWFuZG8gaWwgZmlsZXN5c3RlbSBub25cbiIKKyLoIG1vbnRhdG8gbyDoIG1vbnRhdG8gc29sbyBpbiBsZXR0dXJhLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjUKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzMKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBiaXRtYXBzXG4iCittc2dzdHIgImxlZ2dlbmRvIGxlIG1hcHBlIGRlaSBiaXQiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIG51bWVybyAxIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MTkKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NTMwCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiSWwgZmxhZyBoYXNfam91cm5hbCBwdfIgZXNzZXJlIGF6emVyYXRvIHF1YW5kbyBpbCBmaWxlc3lzdGVtIG5vblxuIgorIuggbW9udGF0byBvIOggbW9udGF0byBzb2xvIGluIGxldHR1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjM1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICJJbCBmaWxlc3lzdGVtIGhhIGdp4CB1biBqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHR0ZW50YW5kbyBkaSBhcHJpcmUgaWwgam91cm5hbCBpbiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiQ3JlYW5kbyBpbCBqb3VybmFsIHBlciBpbCBkZXZpY2UgJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgImFnZ2l1bmdlbmRvIHVuIGZpbGVzeXN0ZW0gYWwgam91cm5hbCBpbiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6NjcxCittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICJDcmVhemlvbmUgZGVsbCdpbm9kZSBkZWwgam91cm5hbDogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2ODAKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0Y2VyY2FuZG8gZGkgY3JlYXJlIGlsIGZpbGUgZGkgam91cm5hbCIKKworIzogbWlzYy90dW5lMmZzLmM6NzYzCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhbGxvY2FyZSBtZW1vcmlhIHBlciBmYXJlIGlsIHBhcnNpbmcgZGVsbGUgb3B6aW9uaSByYWlkIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3ODUKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoICIKKyJjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcGFyc2UgZGF0ZS90aW1lIHNwZWNpZmllcjogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGNvbXByZW5kZXJlIGlsIGZvcm1hdG8gZGkgZGF0YS9vcmE6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAibnVtZXJvIGRpIG1vdW50IG5vbiB2YWxpZGkgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiY29tcG9ydGFtZW50byByZWxhdGl2byBhZCB1biBlcnJvcmUgbm9uIHZhbGlkbyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgImdpZC9ub21lIGdydXBwbyBub24gdmFsaWRvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAiaW50ZXJ2YWxsbyBub24gdmFsaWRvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAicGVyY2VudHVhbGUgZGkgYmxvY2NoaSByaXNlcnZhdGkgbm9uIHZhbGlkYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDAzCittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIHB18iBlc3NlcmUgc3BlY2lmaWNhdGEgc29sbyB1bmEgdm9sdGEiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMTIKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLU8gcHXyIGVzc2VyZSBzcGVjaWZpY2F0YSBzb2xvIHVuYSB2b2x0YSIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgIm51bWVybyBkaSBibG9jY2hpIHJpc2VydmF0aSBub24gdmFsaWRvIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIKK21zZ3N0ciAidWlkL25vbWUgdXRlbnRlIG5vbiB2YWxpZG8gLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZGltZW5zaW9uZSBpbm9kZSBub24gdmFsaWRhIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIiIKKyJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIkltcG9zdGF6aW9uZSBkZWwgbnVtZXJvIG1hc3NpbW8gZGkgbW91bnQgYSAlZFxuIgorbXNnc3RyWzFdICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBtYXNzaW1vIGRpIG1vdW50IGEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiSW5zaWVtZSBkaSBvcHppb25pIGRpIG1vdW50IG5vbiB2YWxpZG86ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiUGFyYW1ldHJvIGRpIHN0cmlkZSBub24gdmFsaWRvLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiT3B6aW9uaSByYWlkIG5vbiB2YWxpZGUuXG4iCisiXG4iCisiTGUgb3B6aW9uaSByYWlkIHNvbm8gc2VwYXJ0ZSBkYSB2aXJnb2xlLCBlIHBvc3Nvbm8gYXZlcmUgdW4gcGFyYW1ldHJvLCBjaGVcbiIKKyJcdOggcGFzc2F0byBkYSB1biBzZWdubyBkaSB1Z3VhbGUgKCc9JykuXG4iCisiXG4iCisiTGUgb3B6aW9uaSByYWlkIHZhbGlkZSBzb25vOlxuIgorIlx0c3RyaWRlPWx1bmdoZXp6YSBzdHJpZGUgaW4gYmxvY2NoaT5cbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyMworIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAibGVnZ2VuZG8gbGUgbWFwcGUgZGVpIGJpdCIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyOAorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAibGV0dHVyYSBkZWxsZSBtYXBwZSBkaSBiaXQgaW5vZGUgZSBibG9jY28iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDUgcmVzaXplL3Jlc2l6ZTJmcy5jOjc4NAorbXNnaWQgImJsb2NrcyB0byBiZSBtb3ZlZCIKK21zZ3N0ciAiYmxvY2NoaSBkYSBzcG9zdGFyZSIKKworIzogbWlzYy90dW5lMmZzLmM6MTc0OAorbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU0Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlbG9jYXRlIGJsb2NrcyBkdXJpbmcgaW5vZGUgcmVzaXplIFxuIgorbXNnc3RyICJsZWdnZW5kbyBsJ2lub2RlIGRlaSBibG9jY2hpIG5vbiB2YWxpZGkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODE4CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGkgdGlwaSBkaSBmaWxlc3lzdGVtXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgInByb3ZhbmRvIGEgcmlkaW1lbnNpb25hcmUgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBnaWQgZGVpIGJsb2NjaGkgcmlzZXJ2YXRpIGEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNocmlua2luZyB0aGUgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKyJJbXBvc3RhemlvbmUgZGkgZGF0YSBlZCBvcmEgZGVsbCd1bHRpbW8gY29udHJvbGxvIGRlbCBmaWxlc3lzdGVtIGEgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBudW1lcm8gbWFzc2ltbyBkaSBtb3VudCBhICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgbnVtZXJvIGF0dHVhbGUgZGkgbW91bnQgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgY29tcG9ydGFtZW50byBkYSBlcnJvcmUgYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBnaWQgZGVpIGJsb2NjaGkgcmlzZXJ2YXRpIGEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsJ2ludGVydmFsbG8gdHJhIGkgY29udHJvbGxpIGEgJWx1IHNlY29uZGlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsbCdpbnRlcnZhbGxvIHRyYSBpIGNvbnRyb2xsaSBhICVsdSBzZWNvbmRpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIiIKKyJJbXBvc3RhemlvbmUgZGVsbGEgcGVyY2VudHVhbGUgZGkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHUgKCV1IGJsb2NjaGkpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlc2VydmVkIGJsb2NrcyBjb3VudCBpcyB0b28gYmlnICglbGx1KSIKK21zZ3N0ciAiaWwgbnVtZXJvIGRpIGJsb2NjaGkgcmlzZXJ2YXRpIOggdHJvcHBvIGFsdG8gKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbCBudW1lcm8gZGkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA0NAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbCBmaWxlc3lzdGVtIGhhIGdp4CBkZWkgc3VwZXJibG9jY2hpIHNwYXJzaS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU2Cittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgorIkltcG9zdGF6aW9uZSBkaSBkYXRhIGVkIG9yYSBkZWxsJ3VsdGltbyBjb250cm9sbG8gZGVsIGZpbGVzeXN0ZW0gYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGwndWlkIGRlaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTAyCittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMjAKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJJbCBmbGFnIGhhc19qb3VybmFsIHB18iBlc3NlcmUgYXp6ZXJhdG8gcXVhbmRvIGlsIGZpbGVzeXN0ZW0gbm9uXG4iCisi6CBtb250YXRvIG8g6CBtb250YXRvIHNvbG8gaW4gbGV0dHVyYS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE1MworbXNnaWQgIkludmFsaWQgVVVJRCBmb3JtYXRcbiIKK21zZ3N0ciAiRm9ybWF0byBVVUlEIG5vbiB2YWxpZG9cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE2NgorIywgZnV6enkKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiSWwgZmxhZyBoYXNfam91cm5hbCBwdfIgZXNzZXJlIGF6emVyYXRvIHF1YW5kbyBpbCBmaWxlc3lzdGVtIG5vblxuIgorIuggbW9udGF0byBvIOggbW9udGF0byBzb2xvIGluIGxldHR1cmEuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzQKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgZ2lkIGRlaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiZHVyYW50ZSBsJ2FwZXJ0dXJhIGRpICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWwgZ2lkIGRlaSBibG9jY2hpIHJpc2VydmF0aSBhICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIGdpZCBkZWkgYmxvY2NoaSByaXNlcnZhdGkgYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsIG51bWVybyBhdHR1YWxlIGRpIG1vdW50IGEgJWRcbiIKKworIzogbWlzYy91dGlsLmM6NzQKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJQcm9jZWRlcmUgY29tdW5xdWU/IChzLG4pICIKKworIzogbWlzYy91dGlsLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGZhcmUgc3RhdCBkaSAlcyAtLS0gJXNcbiIKKworIzogbWlzYy91dGlsLmM6OTIKK21zZ2lkICIiCisiXG4iCisiVGhlIGRldmljZSBhcHBhcmVudGx5IGRvZXMgbm90IGV4aXN0OyBkaWQgeW91IHNwZWNpZnkgaXQgY29ycmVjdGx5P1xuIgorbXNnc3RyICIiCisiXG4iCisiU2VtYnJhIGNoZSBpbCBkaXNwb3NpdGl2byBub24gZXNpc3RhOyDoIHN0YXRvIHNwZWNpZmljYXRvIGNvcnJldHRhbWVudGU/XG4iCisKKyM6IG1pc2MvdXRpbC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgbm9uIOggdW4gZGV2aWNlIHNwZWNpYWxlIGEgYmxvY2NoaS5cbiIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIOggdW4gZGV2aWNlIGludGVybywgbm9uIHNvbG8gdW5hIHBhcnRpemlvbmUuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisibWtlMmZzIOggc3RhdG8gZm9yemF0byBjb211bnF1ZS4gU2kgc3BlcmEgY2hlIC9ldGMvbXRhYiBzaWEgc2JhZ2xpYXRvLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgIm5vbiBmYXLyIHVuICVzIHF1aSFcbiIKKworIzogbWlzYy91dGlsLmM6MTY2Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGZhcmUgaWwgcGFyc2luZyBkZWxsZSBvcHppb25pIGRlbCBqb3VybmFsIVxuIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGkgbWFnaWMgbnVtYmVycyBkZWwgc3VwZXJibG9jY28gZGVsIGpvdXJuYWwiCisKKyM6IG1pc2MvdXRpbC5jOjIyOAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiQmFkIGpvdXJuYWwgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiSm91cm5hbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgam91cm5hbCBvcHRpb25zIGFyZTpcbiIKKyJcdHNpemU9PGpvdXJuYWwgc2l6ZSBpbiBtZWdhYnl0ZXM+XG4iCisiXHRkZXZpY2U9PGpvdXJuYWwgZGV2aWNlPlxuIgorIlxuIgorIlRoZSBqb3VybmFsIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGZpbGVzeXN0ZW0gYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU29ubyBzdGF0ZSBzcGVjaWZpY2F0ZSBvcHppb25pIG5vbiB2YWxpZGUgcGVyIGlsIGpvdXJuYWwuXG4iCisiXG4iCisiTGUgb3B6aW9uaSBwZXIgaWwgam91cm5hbCBzb25vIHNlcGFyYXRlIGRhIHZpcmdvbGUsIGUgcG9zc29ubyBhdmVyZSB1biAiCisicGFyYW1ldHJvLFxuIgorIlx0cGFzc2F0byBkYSB1biBzZWdubyBkaSB1Z3VhbGUgKCc9JykuXG4iCisiXG4iCisiT3B6aW9uaSB2YWxpZGUgcGVyIGlsIGpvdXJuYWwgc29ubzpcbiIKKyJcdHNpemU9PGRpbWVuc2lvbmUgZGVsIGpvdXJuYWwgaW4gTUI+XG4iCisiXHRkZXZpY2U9PGRpc3Bvc2l0aXZvIGRpIGpvdXJuYWw+XG4iCisiXG4iCisiTGEgZGltZW5zaW9uZSBkZWwgam91cm5hbCBkZXYnZXNzZXJlIGNvbXByZXNvIHRyYSAxMDI0IGUgMTAyNDAwIGJsb2NjaGkgZGVsICIKKyJmaWxlc3lzdGVtLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNTgKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiRmlsZXN5c3RlbSB0cm9wcG8gcGljY29sbyBwZXIgdW4gam91cm5hbFxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiTGEgZGltZW5zaW9uZSBzcGVjaWZpY2F0YSBkZWwgam91cm5hbCDoIGRpICVkIGJsb2NjaGksIG1hIGVzc2FcbiIKKyJkZXYnZXNzZXJlIGNvbXByZXNhIHRyYSAxMDI0IGUgMTAyNDAwIGJsb2NjaGkuIE9wZXJhemlvbmUgYW5udWxsYXRhLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNzMKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEaW1lbnNpb25lIGRlbCBqb3VybmFsIHRyb3BwbyBncmFuZGUgcGVyIGlsIGZpbGVzeXN0ZW0uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiUXVlc3RvIGZpbGVzeXN0ZW0gdmVycuAgYXV0b21hdGljYW1lbnRlIGNvbnRyb2xsYXRvIG9nbmkgJWQgbW91bnQsIG9cbiIKKyIlZyBnaW9ybmksIGEgc2Vjb25kYSBkaSBxdWFsZSB2ZW5nYSBwcmltYS4gVXNhcmUgdHVuZTJmcyAtYyBvIC1pIHBlciAiCisiY2FtYmlhcmUuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiB0cm9wcGkgcGFyYW1ldHJpXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNzIKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTEKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTk5Cittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MjA1CisjLCBmdXp6eQorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbWlzYy91dWlkZC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb21wcmVuZGVyZSBpbCBmb3JtYXRvIGRpIGRhdGEvb3JhOiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBzdXBlcmJsb2NjbyBleHQyIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpY29ubmV0dGVyZSAlaTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjM1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgbGV0dHVyYSBkZWxsJ0BpICVpOiAlbVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIlZlcnNpb25lIEVBIG5vbiB2YWxpZGEuXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MzMgbWlzYy91dWlkZC5jOjU2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRXJyb3JlIGNyZWFuZG8gbGEgQGQgL0BsICglcyk6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJVc286ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCisjLCBmdXp6eQorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgRHVtcCBlc3Rlc286XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiVXNvOiAlcyBbLWQgZmxhZ19kaV9kZWJ1Z10gWy1mXSBbLUZdIFstcF0gZGV2aWNlIFtudW92YS1kaW1lbnNpb25lXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY1Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRXN0ZW5zaW9uZSBkZWxsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjgKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiUmlsb2NhemlvbmUgZGVpIGJsb2NjaGkiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzEKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiU2NhbnNpb25lIGRlbGxhIHRhdm9sYSBkZWdsaSBpbm9kZSIKKworIzogcmVzaXplL21haW4uYzo3NAorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGVpIHJpZmVyaW1lbnRpIGRlZ2xpIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJTcG9zdGFtZW50byBkZWxsYSB0YXZvbGEgZGVnbGkgaW5vZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6ODAKK21zZ2lkICJVbmtub3duIHBhc3M/IT8iCittc2dzdHIgIlBhc3NvIHNjb25vc2NpdXRvPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiSW5pemlvIGRlbCBwYXNzbyAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAiYXZ2aWFuZG8gbGEgc2NhbnNpb25lIGRlZ2xpIGlub2RlIgorCisjOiByZXNpemUvbWFpbi5jOjI2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAiaW1wb3N0YW5kbyBsYSB2ZXJzaW9uZSBhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM0NCByZXNpemUvbWFpbi5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkVzZWd1aXJlIHByaW1hICdlMmZzY2sgLWYgJXMnLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjM0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICIiCisiJXMg6CBtb250YXRvOyBpbXBvc3NpYmlsZSByaWRpbWVuc2lvbmFyZSB1biBmaWxlc3lzdGVtIG1vbnRhdG8hXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJkaW1lbnNpb25lIGlub2RlIG5vbiB2YWxpZGEgLSAlcyIKKworIzogcmVzaXplL21haW4uYzozOTIKK21zZ2lkICJOZXcgc2l6ZSB0b28gbGFyZ2UgdG8gYmUgZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIiIKKyJEaW1lbnNpb25lIGRlaSBibG9jY2hpIGRlbCBkZXZpY2UgZGkgam91cm5hbGluZyAoJWQpIG1pbm9yZSBkZWxsYSBkaW0gbWluaW1hICIKKyJkZWkgYmxvY2NoaSAlZFxuIgorCisjOiByZXNpemUvbWFpbi5jOjQxMAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogcmVzaXplL21haW4uYzo0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMYSBwYXJ0aXppb25lIChvIGRldmljZSkgY29udGVuZW50ZSDoIHNvbG8gZGkgJWQgKCVkaykgYmxvY2NoaS5cbiIKKyJFJyBzdGF0YSByaWNoaWVzdGEgdW5hIG51b3ZhIGRpbWVuc2lvbmUgZGkgJWQgYmxvY2NoaS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiSWwgZmlsZXN5c3RlbSDoIGdp4CBsdW5nbyAlZCBibG9jY2hpLiBOdWxsYSBkYSBmYXJlIVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKyJJbCBmaWxlc3lzdGVtIHN1ICVzIOggb3JhIGx1bmdvICVkIGJsb2NjaGkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgInByb3ZhbmRvIGEgcmlkaW1lbnNpb25hcmUgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJJbCBmaWxlc3lzdGVtIHN1ICVzIOggb3JhIGx1bmdvICVkIGJsb2NjaGkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgInRlbnRhbmRvIGRpIGZhcmUgbG8gc3RhdCBkaSAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0NAorIywgZnV6enkKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisiSW1wb3N0YXppb25lIGRpIGRhdGEgZWQgb3JhIGRlbGwndWx0aW1vIGNvbnRyb2xsbyBkZWwgZmlsZXN5c3RlbSBhICVzXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo2MworbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICIiCisiXG4iCisiXHR0ZW50YW5kbyBkaSBhcHJpcmUgaWwgam91cm5hbCBpbiAlc1xuIgorCisjOiByZXNpemUvb25saW5lLmM6OTIgcmVzaXplL29ubGluZS5jOjExNgorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5NSByZXNpemUvb25saW5lLmM6MTIyCisjLCBmdXp6eQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgImxlZ2dlbmRvIGwnaW5vZGUgZGVpIGJsb2NjaGkgbm9uIHZhbGlkaSIKKworIzogcmVzaXplL29ubGluZS5jOjEwNworIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIklsIEBqIGVzdGVybm8gbm9uIHN1cHBvcnRhIHF1ZXN0byBAZlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTE5CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiSWwgQGogZXN0ZXJubyBub24gc3VwcG9ydGEgcXVlc3RvIEBmXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MTYyCisjLCBmdXp6eQorbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgImNlcmNhbmRvIGRpIGFwcmlyZSBpbCBqb3VybmFsIGVzdGVybm8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJkdXJhbnRlIGwnYXBlcnR1cmEgZGkgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiAiCisidGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo1NzYKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgImJsb2NjaGkgcmlzZXJ2YXRpIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6Nzg5Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuNCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fbWFuYWdlciBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBibG9ja19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgUG93ZXJxdWVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBFeHQyIEltYWdlIEhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorIywgZnV6enkKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJsZXR0dXJhIGRlbCBzdXBlcmJsb2NjbyBkZWwgam91cm5hbFxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIsIERlc2NyaXR0b3JpIGRpIGdydXBwbyBhICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIsIERlc2NyaXR0b3JpIGRpIGdydXBwbyBhICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJzY3JpdmVuZG8gbGUgbWFwcGUgZGkgYml0IGRpIGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgInNjcml2ZW5kbyBsZSBtYXBwZSBkaSBiaXQgZGkgaW5vZGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAibGV0dHVyYSBkZWxsZSBtYXBwZSBkaSBiaXQgaW5vZGUgZSBibG9jY28iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICJsZXR0dXJhIGRlbGxlIG1hcHBlIGRpIGJpdCBpbm9kZSBlIGJsb2NjbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJzY3JpdmVuZG8gbGEgdGF2b2xhIGRlZ2xpIGlub2RlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiU2NhbnNpb25lIGRlbGxhIHRhdm9sYSBkZWdsaSBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bmV4cGVjdGVkIGJsb2NrIHNpemUiCittc2dzdHIgIklsIGZpbGVzeXN0ZW0g6CBwafkgZ3JhbmRlIGRlbGxhIGRpbWVuc2lvbmUgYXBwYXJlbnRlIGRlbCBkZXZpY2UuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCisjLCBmdXp6eQorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICIsIG1hcHBhIGRlaSBiaXQgaW5vZGUgYSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiICBNYXBwYSBkZWkgYml0IGRpIGJsb2NjbyBhICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiTnVtZXJvIGRpIGJsb2NjaGkgbm9uIHZhbGlkbyFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOdW1lcm8gZGkgYmxvY2NoaSBub24gdmFsaWRvIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTQKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBleHQyZnNfZXhwYW5kX2RpciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU2Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjEKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgImxldHR1cmEgZGVpIGJsb2NjaGkgaW5kaXJldHRpIGRlbGwnaW5vZGUgJXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAibGV0dHVyYSBkZWkgYmxvY2NoaSBpbmRpcmV0dGkgZGVsbCdpbm9kZSAldSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJsZXR0dXJhIGRlaSBibG9jY2hpIGluZGlyZXR0aSBkZWxsJ2lub2RlICV1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIgIE1hcHBhIGRlaSBiaXQgZGkgYmxvY2NvIGEgICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4CisjLCBmdXp6eQorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiLCBtYXBwYSBkZWkgYml0IGlub2RlIGEgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjkKK21zZ2lkICJJbGxlZ2FsIG9yIG1hbGZvcm1lZCBkZXZpY2UgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcxCittc2dpZCAiVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc1Cittc2dpZCAiVG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKSIKK21zZ3N0ciAiTCdAaCAlaSBoYSB1bmEgdmVyc2lvbmUgZGVsbCdoYXNoIG5vbiBzdXBwb3J0YXRhICglTilcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJMJ0BoICVpIGhhIHVuYSB2ZXJzaW9uZSBkZWxsJ2hhc2ggbm9uIHN1cHBvcnRhdGEgKCVOKVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWVycm9yZSBhbGxvY2FuZG8iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWxsb2NhcmUgbWVtb3JpYSBwZXIgaSB0aXBpIGRpIGZpbGVzeXN0ZW1cbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkltcG9zc2liaWxlIGFsbG9jYXJlIG1lbW9yaWEgcGVyIGkgdGlwaSBkaSBmaWxlc3lzdGVtXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NgorbXNnaWQgIlRvbyBtYW55IHJlZmVyZW5jZXMgaW4gdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKKyMsIGZ1enp5Cittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJCbG9jY28gZGlyZWN0b3J5ICVkICgjJWQpIHZ1b3RvIG5lbGwnaW5vZGUgJWRcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkwCittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NAorIywgZnV6enkKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIkFnZ2l1bnRhIGRlbCBqb3VybmFsIGFsIGRldmljZSAlczogIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKKyMsIGZ1enp5Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiU3VwZXJibG9jY28gZGVsIGpvdXJuYWwgbm9uIHRyb3ZhdG8hXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NgorbXNnaWQgIkpvdXJuYWwgbXVzdCBiZSBhdCBsZWFzdCAxMDI0IGJsb2NrcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIGxvYWRpbmcgZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiY2VyY2FuZG8gZGkgYXByaXJlIGlsIGpvdXJuYWwgZXN0ZXJubyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICJTdXBlcmJsb2NjbyBkZWwgam91cm5hbCBub24gdHJvdmF0byFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJhYXR0cmlidXRvIGVzdGVzbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorIywgZnV6enkKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiPElub2RlIGRlbCBkZXNjcml0dG9yZSBkaSBncnVwcG8+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiZWVsZW1lbnRvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzkKK21zZ2lkICJObyBjdXJyZW50IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQxCittc2dpZCAiTm8gcm9vbSB0byBpbnNlcnQgZXh0ZW50IGluIG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCisjLCBmdXp6eQorbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIi9AbCBub24gdHJvdmF0YS4gIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKKyMsIGZ1enp5Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiZGltZW5zaW9uZSBmaWxlc3lzdGVtIG5vbiB2YWxpZGEgLSAlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMQorbXNnaWQgIlByb2ZpbGUgdmVyc2lvbiAwLjAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCisjLCBmdXp6eQorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgImNyZWFuZG8gL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0CisjLCBmdXp6eQorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJjcmVhbmRvIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJTZXQgZGkgb3B6aW9uaSBkZWwgZmlsZXN5c3RlbSBub24gdmFsaWRvOiAlc1xuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3CisjLCBmdXp6eQorbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjbG9uYXJlIGlsIGZpbGU6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIlBhcmFtZXRybyBkaSBzdHJpZGUgbm9uIHZhbGlkby5cbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8SW5vZGUgZGVsbCdpbmRpY2UgQUNMPiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8SW5vZGUgZGVpIGRhdGkgQUNMPiIKKworI34gbXNnaWQgIiVzIGlzIG1vdW50ZWQuICAiCisjfiBtc2dzdHIgIiVzIOggbW9udGF0by4gIgorCisjfiBtc2dpZCAiYmFkIGJsb2NrIHNpemUgLSAlcyIKKyN+IG1zZ3N0ciAiZGltZW5zaW9uZSBkZWwgYmxvY2NvIGRpZmV0dG9zbyAtICVzIgorCisjLCBmdXp6eQorI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJkaW1lbnNpb25lIGRlbCBmcmFtbWVudG8gbm9uIHZhbGlkYSAtICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiQXR0ZW56aW9uZTogZnJhbW1lbnRpIG5vbiBzdXBwb3J0YXRpLiBPcHppb25lIC1mIGlnbm9yYXRhXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIkpvdXJuYWwgTk9OIHJpbW9zc29cbiIKKworI34gbXNnaWQgIiNcdFx0ICV1IC0+ICV1ICglZClcbiIKKyN+IG1zZ3N0ciAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIklsIEBTIG5vbiBoYSBpbCBmbGFnIGhhc19AaiwgbWEgaGEgaWwgQGogZXh0MyAlcy5cbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKKyN+IG1zZ3N0ciAiTCdAaCAlaSBoYSB1biBsaXZlbGxvIGRpIHByb2ZvbmRpdOAgKCVOKSB0cm9wcG8gZWxldmF0b1xuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKyN+IG1zZ3N0ciAiY2hpYW1hbmRvIGV4dDJmc19ibG9ja19pdGVyYXRlIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAiY2hpYW1hbmRvIGxhIGZ1bnppb25lIGl0ZXJhdHJpY2UiCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAiYWxsb2NhbmRvIGlsIGJ1ZmZlciBpbm9kZSIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAibGVnZ2VuZG8gbGEgdGF2b2xhIGRlZ2xpIGlub2RlIChncnVwcG8gJWQpIgorCisjfiBtc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJzY3JpdmVuZG8gbGEgdGF2b2xhIGRlZ2xpIGlub2RlIChncnVwcG8gJWQpIgorCisjfiBtc2dpZCAiUGFzcyAwOiBEb2luZyBieXRlLXN3YXAgb2YgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJQYXNzIDA6IEVzZWN1emlvbmUgZGVsIGJ5dGUtc3dhcCBkZWwgZmlsZXN5c3RlbVxuIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiB0aGUgZmlsZXN5c3RlbSBtdXN0IGJlIGZyZXNobHkgY2hlY2tlZCB1c2luZyBmc2NrXG4iCisjfiAiYW5kIG5vdCBtb3VudGVkIGJlZm9yZSB0cnlpbmcgdG8gYnl0ZS1zd2FwIGl0LlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IGlsIGZpbGVzeXN0ZW0gZGV2J2Vzc2VyZSBjb250cm9sbGF0byBkYSBwb2NvIHV0aWxpenphbmRvIGZzY2tcbiIKKyN+ICJlIGRldidlc3NlcmUgc21vbnRhdG8gcHJpbWEgZGkgcHJvdmFyZSBhZCBlc2VndWlybmUgaWwgYnl0ZS1zd2FwLlxuIgorCisjfiBtc2dpZCAiQnl0ZSBzd2FwIgorI34gbXNnc3RyICJCeXRlLXN3YXAiCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXM6IE9yZGluZSBkZWkgYnl0ZSBkZWwgZmlsZXN5c3RlbSBnaeAgbm9ybWFsaXp6YXRvLlxuIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgInJpcHJvdmFuZG8gYSBzY3JpdmVyZSBsZSBtYXBwZSBkaSBiaXQgZGkgYmxvY2NvIHBlciAlcyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJOb3RlOiBUaGlzIGlzIGEgYnl0ZS1zd2FwcGVkIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiTm90YTogUXVlc3RvIOggdW4gZmlsZXN5c3RlbSBhIGJ5dGUgc2NhbWJpYXRpXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiV2FybmluZzogJWQtYnl0ZSBpbm9kZXMgbm90IHVzYWJsZSBvbiBvbGRlciBzeXN0ZW1zXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdHRlbnppb25lOiBnbGkgaW5vZGUgZGkgJWQgYnl0ZSBub24gc29ubyB1dGlsaXp6YWJpbGkgc3UgbW9sdGkgc2lzdGVtaVxuIgorCisjfiBtc2dpZCAiQ2xvbmUgZHVwbGljYXRlL2JhZCBibG9ja3MiCisjfiBtc2dzdHIgIkNsb25hIGkgYmxvY2NoaSBkdXBsaWNhdGkvbm9uIHZhbGlkaSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJFcnJvciBhbGxvY2F0aW5nIEBhIEBiICViLiAgIgorI34gbXNnc3RyICJFcnJvcmUgYWxsb2NhbmRvIGwnQGEgZGkgQGIgJWIuICIKKworI34gbXNnaWQgIiIKKyN+ICJEdXBsaWNhdGUgQGJzIGZvdW5kLi4uIGludm9raW5nIGR1cGxpY2F0ZSBAYiBwYXNzZXMuXG4iCisjfiAiUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIEBic1xuIgorI34gbXNnc3RyICIiCisjfiAiQGIoaSkgZHVwbGljYXRpIHRyb3ZhdGkuLi4gaW52b2NhcmUgaSBwYXNzaSByZWxhdGl2aSBhaSBAYihpKSBkdXBsaWNhdGkuXG4iCisjfiAiUGFzc28gMUI6IE51b3ZhIGFuYWxpc2kgcmVsYXRpdmEgYWkgQGIoaSkgZHVwbGljYXRpL25vbiB2YWxpZGlcbiIKKworI34gbXNnaWQgIkR1cGxpY2F0ZS9iYWQgQGIocykgaW4gQGkgJWk6IgorI34gbXNnc3RyICJAYiBkdXBsaWNhdG8vbm9uIHZhbGlkbyhpKSBpbiBAaSAlaToiCisKKyN+IG1zZ2lkICJGb3JjaWJseSBjbGVhcmluZyBIVFJFRSBmbGFnIG9uIEBpICVkICglcSkuICAoQmV0YSB0ZXN0IGNvZGUpXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJQdWxpemlhIGZvcnphdGEgZGVsIGZsYWcgSFRSRUUgbmVsbCdAaSAlZCAoJXEpLiAoQ29kaWNlIGluIGJldGEgdGVzdGluZylcbiIKKworI34gbXNnaWQgIiIKKyN+ICJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyN+ICJpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLiAgVmFsaWQgcmFpZCBvcHRpb25zIGFyZTpcbiIKKyN+ICJcdGVhX3Zlcj08ZWFfdmVyc2lvbiAoMSBvciAyKVxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiTGUgb3B6aW9uaSBlc3Rlc2Ugc29ubyBzZXBhcmF0ZSBkYSB2aXJnb2xlLCBlIHBvdHJlYmJlcm8gYXZlcmUgdW4gIgorI34gInBhcmFtZXRybyxcbiIKKyN+ICJzcGVjaWZpY2F0byBkYSB1biBzZWdubyBkaSB1Z3VhbGUgKCc9JykuIE9wemlvbmkgcmFpZCB2YWxpZGUgc29ubzpcbiIKKyN+ICJcdGVhX3Zlcj08dmVyc2lvbmVfZWEgKDEgbyAyKVxuIgorI34gIlxuIgorI34gIlx0ZWFfdmVyPTx2ZXJzaW9uZV9lYSAoMSBvIDIpXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisjfiBtc2dzdHIgImZhdHRvICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworI34gbXNnaWQgImJhZCBibG9ja3MgcmFuZ2U6ICVsdS0lbHUiCisjfiBtc2dzdHIgImludGVydmFsbG8gYmxvY2NoaSBub24gdmFsaWRpOiAlbHUtJWx1IgorCisjfiBtc2dpZCAiVXNhZ2U6ICBmaW5kc3VwZXIgZGV2aWNlIFtza2lwYnl0ZXMgW3N0YXJ0a2JdXVxuIgorI34gbXNnc3RyICJVc286IGZpbmRzdXBlciBkZXZpY2UgW2J5dGVfZGFfc2FsdGFyZSBba2JfaW5pemlvXV1cbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJza2lwYnl0ZXMgc2hvdWxkIGJlIGEgbnVtYmVyLCBub3QgJXNcbiIKKyN+IG1zZ3N0ciAiYnl0ZV9kYV9zYWx0YXJlIGRldmUgZXNzZXJlIHVuIG51bWVybywgbm9uICVzXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAic2tpcGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc2VjdG9yIHNpemVcbiIKKyN+IG1zZ3N0ciAiIgorI34gImJ5dGVfZGFfc2FsdGFyZSBkZXZlIGVzc2VyZSB1biBtdWx0aXBsbyBkZWxsYSBkaW1lbnNpb25lIGRlbCBzZXR0b3JlXG4iCisKKyN+IG1zZ2lkICJzdGFydGtiIHNob3VsZCBiZSBhIG51bWJlciwgbm90ICVzXG4iCisjfiBtc2dzdHIgImtiX2luaXppbyBkZXZlIGVzc2VyZSB1biBudW1lcm8sIG5vbiAlc1xuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgcG9zaXRpdmUsIG5vdCAlbGxkXG4iCisjfiBtc2dzdHIgImtiX2luaXppbyBkZXZlIGVzc2VyZSBwb3NpdGl2bywgbm9uICVsbGRcbiIKKworI34gbXNnaWQgInN0YXJ0aW5nIGF0ICVsbGQsIHdpdGggJWQgYnl0ZSBpbmNyZW1lbnRzXG4iCisjfiBtc2dzdHIgImluaXppbyBhICVsbGQsIGNvbiBpbmNyZW1lbnRpIGRpICVkIGJ5dGVcbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICIlMTRsbGQ6IGZpbmlzaGVkIHdpdGggZXJybm8gJWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIiUxNGxsZDogdGVybWluYXRvIGNvbiBlcnJvcmUgbnVtZXJvICVkXG4iCisKKyN+IG1zZ2lkICIodW5rbm93biBvcykiCisjfiBtc2dzdHIgIihzbyBzY29ub3NjaXV0bykiCisKKyN+IG1zZ2lkICIlcyBmYWlsZWQgZm9yICVzOiAlc1xuIgorI34gbXNnc3RyICIlcyDoIGZhbGxpdG8gcGVyICVzOiAlc1xuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkhESU9fR0VUR0VPIGlvY3RsIgorI34gbXNnc3RyICJpb2N0bCBIRElPX0dFVEdFTyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJCTEtHRVRTSVpFIGlvY3RsIgorI34gbXNnc3RyICJpb2N0bCBCTEtHRVRTSVpFIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2NrcyBkaXNhYmxlZC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIklsIGZpbGVzeXN0ZW0gaGEgZ2ngIGRlaSBzdXBlcmJsb2NjaGkgc3BhcnNpIGRpc2F0dGl2YXRpLlxuIgorCisjfiBtc2dpZCAicmVzaXplMmZzICVzICglcylcbiIKKyN+IG1zZ3N0ciAicmVzaXplMmZzICVzICglcylcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWQvJWQsIE5lZWRlZDogJWRcbiIKKyN+IG1zZ3N0ciAiTnVtZXJvIGRpIGJsb2NjaGkgbGliZXJpOiAlZC8lZCwgcmljaGllc3RpOiAlZFxuIgorCisjfiBtc2dpZCAiR29pbmcgaW50byBkZXNwZXJhdGlvbiBtb2RlIGZvciBibG9jayBhbGxvY2F0aW9uc1xuIgorI34gbXNnc3RyICJBdHRpdmF6aW9uZSAnZGVzcGVyYXRpb24gbW9kZScgcGVyIGwnYWxsb2NhemlvbmUgZGVpIGJsb2NjaGlcbiIKKworI34gbXNnaWQgIk1vdmluZyAlZCBibG9ja3MgJXUtPiV1XG4iCisjfiBtc2dzdHIgIlNwb3N0YW1lbnRvIGRpICVkIGJsb2NjaGkgJXUtJXVcbiIKKworI34gbXNnaWQgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisjfiBtc2dzdHIgImlubz0ldSwgbnVtYmxvY2NoaT0lbGxkLCAldS0+JXVcbiIKKworI34gbXNnaWQgIklub2RlIG1vdmVkICV1LT4ldVxuIgorI34gbXNnc3RyICJJbm9kZSBtb3NzbyAldS0+JXVcbiIKKworI34gbXNnaWQgIiVkIGJsb2NrcyBvZiB6ZXJvcy4uLlxuIgorI34gbXNnc3RyICIlZCBibG9jY2hpIGRpIHplcmkuLi5cbiIKKworI34gbXNnaWQgIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iCisjfiBtc2dzdHIgIlNwb3N0YW1lbnRvIGRlbGxhIHRhdm9sYSBkZWdsaSBpbm9kZSB0ZXJtaW5hdG8uXG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vbmwuZ21vIGIvZTJmc3Byb2dzL3BvL25sLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWM2ZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL25sLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vbmwucG8gYi9lMmZzcHJvZ3MvcG8vbmwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5MjdhYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9ubC5wbwpAQCAtMCwwICsxLDY4NDQgQEAKKyMgRHV0Y2ggdHJhbnNsYXRpb25zIGZvciBlMmZzcHJvZ3MuCisjIENvcHlyaWdodCAoQykgMjAxMyBUaGVvZG9yZSBUc28gKG1zZ2lkcykKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIworIyAiWmUgaGllbGQgbWUgc3RhYW5kZSBlbiB6ZWkgZGF0IG1pam4gb3BzdGVsCisjIGhhYXIgJ3ZyZXNlbGlqayB3YXMgdGVnZW5nZXZhbGxlbicuCisjIElrIHdhcyBtZXRlZW4gaW4gZGUgemV2ZW5kZSBoZW1lbC4iCisjCisjCisjIEJlbm5vIFNjaHVsZW5iZXJnIDxiZW5ub0B2ZXJ0YWFsdC5ubD4sIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMuCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCTxibGtjb3VudD4JCWludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncy0xLjQyLjhcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogdHl0c29AYWx1bS5taXQuZWR1XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTMtMDYtMTYgMDg6MTctMDQwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTMtMDctMzAgMTI6NDQrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQmVubm8gU2NodWxlbmJlcmcgPGJlbm5vQHZlcnRhYWx0Lm5sPlxuIgorIkxhbmd1YWdlLVRlYW06IER1dGNoIDx2ZXJ0YWxpbmdAdnJpanNjaHJpZnQub3JnPlxuIgorIkxhbmd1YWdlOiBubFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjBcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIlNsZWNodCBibG9rICV1IGxpZ3QgYnVpdGVuIGJlcmVpazsgZ2VuZWdlZXJkLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInRpamRlbnMgY29udHJvbGUgdmFuIGRlIHNsZWNodGVibG9ra2VuLWlub2RlIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBkZSBzbGVjaHRlYmxva2tlbi1pbm9kZSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9pc2Nhbi5jOjExMCBlMmZzY2svc2NhbnRlc3QuYzoxMDcKKyM6IGUyZnNjay91bml4LmM6MTMzMiBlMmZzY2svdW5peC5jOjE0MjAgbWlzYy9iYWRibG9ja3MuYzoxMjE0CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjIgbWlzYy9iYWRibG9ja3MuYzoxMjM2IG1pc2MvYmFkYmxvY2tzLmM6MTI0OAorIzogbWlzYy9kdW1wZTJmcy5jOjU4OCBtaXNjL2UyaW1hZ2UuYzoxMTk2IG1pc2MvZTJpbWFnZS5jOjEzMjQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzcgbWlzYy9ta2UyZnMuYzoxOTYgbWlzYy90dW5lMmZzLmM6MTkwNyByZXNpemUvbWFpbi5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAidGlqZGVucyBvcGVuZW4gdmFuICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHBvcGVuICclcyciCittc2dzdHIgInRpamRlbnMgZWVuIHBvcGVuKCkgdmFuICVzIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMDMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4gdWl0IGJlc3RhbmQiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInRpamRlbnMgYmlqd2Vya2VuIHZhbiBkZSBpbm9kZSB2YW4gZWVuIHNsZWNodCBibG9rIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiBvbmdlbGRpZyBibG9rICV1IGdldm9uZGVuIGluIGlub2RlIHZhbiBzbGVjaHQgYmxvay4gIEdld2lzdC5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBibG9rICVsdSAoJXMpIHRpamRlbnMgJXMuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBsZXplbiB2YW4gYmxvayAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJGb3V0IG5lZ2VyZW4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjYyCittc2dpZCAiRm9yY2UgcmV3cml0ZSIKK21zZ3N0ciAiSGVyc2NocmlqdmVuIGFmZHdpbmdlbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2sgJWx1ICglcykgdGlqZGVucyAlcy4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykuICAiCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJsZWdlIG1hcGJsb2trZW4iCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAibGVnZSBtYXB0YWJlbCIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIkxlZWcgbWFwYmxvayAldSAoIyVkKSBpbiBpbm9kZSAldS5cbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBmaWxlbmFtZSBuYmxvY2tzIGJsb2Nrc2l6ZVxuIgorbXNnc3RyICJHZWJydWlrIHZhbiAlczogICVzIGJlc3RhbmRzbmFhbSBibG9ra2VuYWFudGFsIGJsb2tncm9vdHRlXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFhbnRhbCBibG9ra2VuIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJLYW4gZ2VlbiBibG9rYnVmZmVyIHJlc2VydmVyZW4gKGdyb290dGU9JWQpLlxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiR2VicnVpazogICVzIHNjaGlqZm5hYW1cbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiaW9jdGwoQkxLRkxTQlVGKSB3b3JkdCBuaWV0IG9uZGVyc3RldW5kISAgS2FuIGJ1ZmZlcnMgbmlldCBsZWVnbWFrZW4uXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiR2VicnVpazogICVzIFstRl0gWy1JIGlub2RlYnVmZmVyYmxva2tlbl0gYXBwYXJhYXRcbiIKKworIzogZTJmc2NrL2lzY2FuLmM6ODEgZTJmc2NrL3VuaXguYzo5NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyBmb3IgZmx1c2hpbmciCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiAlcyBvbSBkZXplIGxlZWcgdGUgbWFrZW4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTY3IHJlc2l6ZS9tYWluLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAidGlqZGVucyBsZWVnbWFrZW4gdmFuICVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMTkgZTJmc2NrL3NjYW50ZXN0LmM6MTE0IG1pc2MvZTJpbWFnZS5jOjEwOTEKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZvb3IgaW5vZGUtc2NhbiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjExMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInRpamRlbnMgaGFsZW4gdmFuIHZvbGdlbmRlIGlub2RlIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGlub2RlcyBnZXNjYW5kLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvay4uLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBnZWVuIGdlbGRpZyBqb3VybmFsLXN1cGVyYmxvayBnZXZvbmRlblxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IGpvdXJuYWwgaXMgdGUga29ydFxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBoZXJzdGVsbGVuIHZhbiBqb3VybmFsLi4uXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogZ2VlbiBoZXJzdGVsbGluZyB2YW4gam91cm5hbCBiaWogYWxsZWVuLWxlemVuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJ0aWpkZW5zIGhlcm9wZW5lbiB2YW4gJXMiCisKKyMgQmVoYWx2ZSBFIGVuIEYgd29yZGVuIGRlIHZvbGdlbmRlIDMwIGxldHRlcmFma29ydGluZ2VuIG5pZXQgZ2VicnVpa3QuCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkI8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjAKK21zZ2lkICJJaWxsZWdhbCIKK21zZ3N0ciAiSTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjEKK21zZ2lkICJqam91cm5hbCIKK21zZ3N0ciAiajxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJkPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUl0ZW0gJyVEbicgaW4gJXAgKCVpKSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZjxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZ2b29yIGlub2RlICVpICglUSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiaDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJMPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICJtPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJuPGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNAorbXNnaWQgIm9vcnBoYW5lZCIKK21zZ3N0ciAibzxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicDxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInE8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInI8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAiczxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiUzxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAidTxmb3V0PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2PGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIng8Zm91dD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6PGZvdXQ+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxkZSBOVUxMLWlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8ZGUgc2xlY2h0ZWJsb2trZW4taW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworbXNnaWQgIjxUaGUgdXNlciBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxkZSBnZWJydWlrZXJzcXVvdGEtaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorbXNnaWQgIjxUaGUgZ3JvdXAgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8ZGUgZ3JvZXBzcXVvdGEtaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8ZGUgb3BzdGFydC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYwCittc2dpZCAiPFRoZSB1bmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGU+IgorbXNnc3RyICI8ZGUgd2lzLW9uZ2VkYWFubWFraW5nc21hcC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPGRlIGdyb2Vwc2Jlc2NocmlqdmVyLWlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI8ZGUgam91cm5hbC1pbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8Z2VyZXNlcnZlZXJkZSBpbm9kZSA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8Z2VyZXNlcnZlZXJkZSBpbm9kZSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJub3JtYWFsIGJlc3RhbmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJtYXAiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM3Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAiYnl0ZS1hcHBhcmFhdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzkKK21zZ2lkICJibG9jayBkZXZpY2UiCittc2dzdHIgImJsb2stYXBwYXJhYXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQxCittc2dpZCAibmFtZWQgcGlwZSIKK21zZ3N0ciAiYmVub2VtZGUgcGlqcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDMKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzeW1ib2xpc2NoZSBrb3BwZWxpbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ1IG1pc2MvdXVpZGQuYzoxNjEKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgInNvY2tldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAib25iZWtlbmQgYmVzdGFuZHN0eXBlIG1ldCBtb2R1cyAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIyCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImluZGlyZWN0IGJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI0Cittc2dpZCAiZG91YmxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJkdWJiZWwtaW5kaXJlY3QgYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImRyaWV2b3VkaWctaW5kaXJlY3QgYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjgKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICJ2ZXJ0YWxlcmJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMwCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxva251bW1lciIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICJrYWFydCB2YW4gbWVlcnZvdWRpZy1nZWNsYWltZGUgaW5vZGVzIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjEwIGUyZnNjay9wYXNzMWIuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNhbid0IGZpbmQgZHVwX2JsayBmb3IgJWxsdVxuIgorbXNnc3RyICIqaW50ZXJuZSBmb3V0Kjoga2FuIGdlZW4gJ2R1cF9ibGsnIHZvb3IgJWxsdSB2aW5kZW5cbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjgyMQorbXNnaWQgInJldHVybmVkIGZyb20gY2xvbmVfZmlsZV9ibG9jayIKK21zZ3N0ciAiIyMjIHRlcnVnZ2VrZWVyZCB2YW4gY2xvbmVfZmlsZV9ibG9jaygpIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICIqaW50ZXJuZSBmb3V0Kjoga2FuIGRlIHJlY29yZCB2YW4gRUEtYmxva2tlbiB2b29yICVsbHUgbmlldCBvcHZyYWdlbiIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGlub2RlIHJlY29yZCBmb3IgJXUiCittc2dzdHIgIippbnRlcm5lIGZvdXQqOiBrYW4gZGUgcmVjb3JkIHZhbiBFQS1pbm9kZXMgdm9vciAldSBuaWV0IG9wdnJhZ2VuIgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIG1hcGJsb2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjU5OAorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgImJpdGthYXJ0IHZhbiBnZWJydWlrdGUgaW5vZGVzIgorCisjOiBlMmZzY2svcGFzczEuYzo2MDkKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gbWFwcGVuIgorCisjOiBlMmZzY2svcGFzczEuYzo2MTkKK21zZ2lkICJyZWd1bGFyIGZpbGUgaW5vZGUgbWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gbm9ybWFsZSBiZXN0YW5kZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgImJpdGthYXJ0IHZhbiBnZWJydWlrdGUgYmxva2tlbiIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk1Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ0aWpkZW5zIHN0YXJ0ZW4gdmFuIGlub2RlLXNjYW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgInRpamRlbnMgaGFsZW4gdmFuIHZvbGdlbmRlIGlub2RlIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjM5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJTdGFwIDEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgImxlemVuIHZhbiBpbmRpcmVjdGUgYmxva2tlbiB2YW4gaW5vZGUgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNDYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gc2xlY2h0ZSBpbm9kZXMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNjkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpbm9kZSBzdGFhdCBpbiBrYWFydCB2YW4gc2xlY2h0ZSBibG9ra2VuIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg5Cittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAiaW1hZ2ljLWlub2Rla2FhcnQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAia2FhcnQgdmFuIG1lZXJ2b3VkaWctZ2VjbGFpbWRlIGJsb2trZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImthYXJ0IHZhbiBibG9ra2VuIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjIyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKTogdmVyd2FjaHR0ZSAlNmx1LCBrcmVlZyBmeXNpZWsgJTZsdSAoYmxva2tlbmFhbnRhbCAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjYwCittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJibG9rLWJpdGthYXJ0IgorCisjOiBlMmZzY2svcGFzczEuYzoyNjY2Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJpbm9kZS1iaXRrYWFydCIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY3MgorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJpbm9kZXRhYmVsIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlN0YXAgMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIkthbiBuaWV0IHZlcmRlcmdhYW4uIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJiaXRrYWFydCB2YW4gYmVoYW5kZWxkZSBpbm9kZXMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIlBpZWtnZWhldWdlbmdlYnJ1aWsiCisKKyM6IGUyZnNjay9wYXNzMy5jOjEzNgorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiU3RhcCAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImJpdGthYXJ0IHZhbiBpbm9kZS1sdXNkZXRlY3RpZSIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk2Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJTdGFwIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJTdGFwIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKGdlZW4gcHJvbXB0KSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiUmVwYXJlcmVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIldpc3NlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJIZXJwbGFhdHNlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJQbGFhdHNlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiVWl0YnJlaWRlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIlZlcmJpbmRlbiBtZXQgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkFhbm1ha2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiQmVyZ2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIkFma2FwcGVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIklub2RlIHdpc3NlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJBZmJyZWtlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJTcGxpdHNlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJEb29yZ2FhbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJNZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuIGtsb25lbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICJCZXN0YW5kIHZlcndpamRlcmVuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIkJlcmljaHRlbiBvbmRlcmRydWtrZW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkxvc21ha2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIidodHJlZSctaW5kZXggd2lzc2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIkhlcmFhbm1ha2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoR0VFTikiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiR0VSRVBBUkVFUkQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJHRVdJU1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIkhFUlBMQUFUU1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMKK21zZ2lkICJBTExPQ0FURUQiCittc2dzdHIgIkdFUExBQVRTVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJVSVRHRUJSRUlEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIkhFUlZFUkJPTkRFTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIkFBTkdFTUFBS1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiR0VCT1JHRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIkFGR0VLQVBUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUgR0VXSVNUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiQUZHRUJST0tFTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJHRVNQTElUU1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICJWRVJERVJHQUFORCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MworbXNnaWQgIk1VTFRJUExZLUNMQUlNRUQgQkxPQ0tTIENMT05FRCIKK21zZ3N0ciAiTUVFUlZPVURJRy1HRUNMQUlNREUgQkxPS0tFTiBHRUtMT09ORCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiQkVTVEFORCBWRVJXSUpERVJEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiT05ERVJEUlVLVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJMT1NHRU1BQUtUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiJ0hUUkVFJy1JTkRFWCBHRVdJU1QiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJaQUwgSEVSQUFOTUFLRU4iCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImJsb2stYml0a2FhcnQgdm9vciBncm9lcCAlZyB6aXQgbmlldCBpbiBncm9lcCAgKGJsb2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImlub2RlLWJpdGthYXJ0IHZvb3IgZ3JvZXAgJWcgeml0IG5pZXQgaW4gZ3JvZXAgIChibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJpbm9kZXRhYmVsIHZvb3IgZ3JvZXAgJWcgeml0IG5pZXQgaW4gZ3JvZXAgIChibG9rICViKVxuIgorIldBQVJTQ0hVV0lORzogRVJOU1RJRyBWRVJMSUVTIFZBTiBHRUdFVkVOUyBJUyBNT0dFTElKSy5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSGV0IHN1cGVyYmxvayBpcyBvbmxlZXNiYWFyIG9mIG9tc2NocmlqZnQgZ2VlbiBnZWxkaWcgZXh0Mi1iZXN0YW5kc3N5c3RlZW0uXG4iCisiQWxzIGhldCBhcHBhcmFhdCBqdWlzdCBpcyBlbiB3ZXJrZWxpamsgZWVuIGV4dDItYmVzdGFuZHNzeXN0ZWVtIGJldmF0XG4iCisiKGVuIG5pZXQgc3dhcCBvZiBVRlMgb2YgaWV0cyBhbmRlcnMpLCBkYW4gaXMgaGV0IHN1cGVyYmxvayBiZXNjaGFkaWdkLlxuIgorIlUga3VudCBkYW4gcHJvYmVyZW4gZWVuIGFuZGVyIHN1cGVyYmxvayB0ZSBnZWJydWlrZW4sIGJpanZvb3JiZWVsZDpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxhcHBhcmFhdD5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiVm9sZ2VucyBoZXQgc3VwZXJibG9rIGlzIGRlIGdyb290dGUgdmFuIGhldCBiZXN0YW5kc3N5c3RlZW0gJWIgYmxva2tlbi5cbiIKKyJNYWFyIGRlIGZ5c2lla2UgZ3Jvb3R0ZSB2YW4gaGV0IGFwcGFyYWF0IGlzICVjIGJsb2trZW4uXG4iCisiV2FhcnNjaGlqbmxpamsgaXMgb2Z3ZWwgaGV0IHN1cGVyYmxvayBvZndlbCBkZSBwYXJ0aXRpZXRhYmVsIGJlc2NoYWRpZ2QhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvazogYmxva2dyb290dGUgPSAlYiwgZnJhZ21lbnRncm9vdHRlID0gJWMuXG4iCisiRGV6ZSB2ZXJzaWUgdmFuICdlMmZzY2snIG9uZGVyc3RldW50IGdlZW5cbiIKKyJmcmFnbWVudGdyb290dGUgZGllIHZlcnNjaGlsdCB2YW4gZGUgYmxva2dyb290dGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlN1cGVyYmxvazogYmxva2tlbl9wZXJfZ3JvZXAgPSAlYiwgem91ICVjIG1vZXRlbiB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MAorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTdXBlcmJsb2s6IGVlcnN0ZV9nZWdldmVuc19ibG9rID0gJWIsIHpvdSAlYyBtb2V0ZW4gemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGdlZW4gVVVJRDsgZXIgd29yZHQgZWVudGplIGFhbmdlbWFha3QuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiT3BtZXJraW5nOiBhbHMgbWVlcmRlcmUgYmxva2tlbiB2YW4gaW5vZGUtYml0a2FhcnRlbiBvZiBibG9rLWJpdGthYXJ0ZW5cbiIKKyJoZXJwbGFhdHN0IG1vZXRlbiB3b3JkZW4sIG9mIGVlbiBkZWVsIHZhbiBkZSBpbm9kZXRhYmVsLCBrdW50IHUgYmV0ZXJcbiIKKyJlZXJzdCAnZTJmc2NrJyB1aXR2b2VyZW4gbWV0IGRlIG9wdGllICctYiAlUycuICBNaXNzY2hpZW4gZG9ldCBoZXRcbiIKKyJwcm9ibGVlbSB6aWNoIGFsbGVlbiB2b29yIGluIGhldCBlZXJzdGUgc3VwZXJibG9rOyBlZW4gcmVzZXJ2ZWtvcGllIGlzXG4iCisibW9nZWxpamsgbm9nIGluIG9yZGUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJCZXNjaGFkaWdpbmcgZ2V2b25kZW4gaW4gaGV0IHN1cGVyYmxvazogICVzID0gJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBiZXBhbGVuIHZhbiBkZSBncm9vdHRlIHZhbiBmeXNpZWsgYXBwYXJhYXQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGNvdW50IGluIHN1cGVyYmxvY2sgaXMgJWksIHNob3VsZCBiZSAlai5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzkKK21zZ2lkICJAaSBjb3VudCBpbiBAUyBpcyAlaSwgQHMgJWouXG4iCittc2dzdHIgIklub2RldGFsIGluIHN1cGVyYmxvayBpcyAlaSwgem91ICVqIG1vZXRlbiB6aWpuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkRlIEh1cmQgb25kZXJzdGV1bnQgZGUgYmVzdGFuZHN0eXBlbmZ1bmN0aWUgbmlldC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJTdXBlcmJsb2sgaGVlZnQgZWVuIG9uZ2VsZGlnIGpvdXJuYWwgKGlub2RlICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICIiCisiSGV0IGV4dGVybmUgam91cm5hbCBoZWVmdCBtZWVyZGVyZSBiZXN0YW5kc3N5c3RlZW0tZ2VicnVpa2VycztcbiIKKyJkaXQgd29yZHQgbmlldCBvbmRlcnN0ZXVuZC5cbiIKKworIy4gQC1leHBhbmRlZDogQ2FuJ3QgZmluZCBleHRlcm5hbCBqb3VybmFsXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk4Cittc2dpZCAiQ2FuJ3QgZmluZCBleHRlcm5hbCBAalxuIgorbXNnc3RyICJLYW4gZ2VlbiBleHRlcm4gam91cm5hbCB2aW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJIZXQgZXh0ZXJuZSBqb3VybmFsIGhlZWZ0IGVlbiBzbGVjaHQgc3VwZXJibG9rLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkhldCBleHRlcm5lIGpvdXJuYWwgb25kZXJzdGV1bnQgZGl0IGJlc3RhbmRzc3lzdGVlbSBuaWV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMworbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJIZXQgc3VwZXJibG9rIHZhbiBoZXQgam91cm5hbCBpcyB2YW4gZWVuIG9uYmVrZW5kIGVuIG5pZXQtb25kZXJzdGV1bmQgdHlwZSAlTi5cbiIKKyJWZXJtb2VkZWxpamsgZ2VicnVpa3QgdSBlZW4gb3VkZXIgJ2UyZnNjayctcHJvZ3JhbW1hIGRhdCBkZXplIGpvdXJuYWwtaW5kZWxpbmdcbiIKKyJuaWV0IG9uZGVyc3RldW50LiAgSGV0IGthbiBvb2sgemlqbiBkYXQgaGV0IGpvdXJuYWwtc3VwZXJibG9rIGJlc2NoYWRpZ2QgaXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkhldCBzdXBlcmJsb2sgdmFuIGhldCBqb3VybmFsIGlzIGJlc2NoYWRpZ2QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCAlcyBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiSm91cm5hbC12bGFnIGluIHN1cGVyYmxvayBpcyBuaWV0IGdlemV0LCBtYWFyIGVyIGlzIHdlbCBlZW4gam91cm5hbCAlcy5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIGpvdXJuYWwgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzEKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIlJlZGRpbmdzdmxhZyBpbiBzdXBlcmJsb2sgaXMgZ2V6ZXQsIG1hYXIgZXIgaXMgZ2VlbiBqb3VybmFsLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzNgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiUmVkZGluZ3N2bGFnIGluIHN1cGVyYmxvayBpcyBuaWV0IGdlemV0LCBtYWFyIGhldCBqb3VybmFsIGJldmF0IGdlZ2V2ZW5zLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJKb3VybmFsIHdpc3NlbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0NiBlMmZzY2svcHJvYmxlbS5jOjY5NQorbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0gaXMgZWVuIHZlcnNpZSAwLCBtYWFyIGhlZWZ0IGZ1bmN0aWV2bGFnKGdlbikgZ2V6ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVzIG9ycGhhbmVkIGlub2RlICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjUxCittc2dpZCAiJXMgQG8gQGkgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbiIKK21zZ3N0ciAiJXMgdmFuIHZlcndlZXNkZSBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU2Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiT25nZWxkaWcgYmxvayAlQiAoJWIpIGdldm9uZGVuIGluIHZlcndlZXNkZSBpbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIlJlZWRzLWdld2lzdCBibG9rICVCICglYikgZ2V2b25kZW4gaW4gdmVyd2Vlc2RlIGlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJPbmdlbGRpZ2UgdmVyd2Vlc2RlIGlub2RlICVpIGluIHN1cGVyYmxvay5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJPbmdlbGRpZ2UgaW5vZGUgJWkgaW4gbGlqc3QgdmFuIHZlcndlZXNkZSBpbm9kZXMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiSm91cm5hbC1zdXBlcmJsb2sgaGVlZnQgZWVuIG9uYmVrZW5kZSBhbGxlZW4tbGV6ZW4tZnVuY3RpZXZsYWcgZ2V6ZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiSm91cm5hbC1zdXBlcmJsb2sgaGVlZnQgZWVuIG9uYmVrZW5kZSBlbiBpbmNvbXBhdGliZWxlIGZ1bmN0aWV2bGFnIGdlemV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIkpvdXJuYWwtdmVyc2llIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQgZG9vciBkZXplIGUyZnNjay5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJKb3VybmFsIHdvcmR0IHZlcnBsYWF0c3QgdmFuIC8lcyBuYWFyIGVlbiB2ZXJib3JnZW4gaW5vZGUuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZvdXQgdGlqZGVucyB2ZXJwbGFhdHNlbiB2YW4gam91cm5hbDogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAxCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk9uZ2VsZGlnZSBWMi1qb3VybmFsLXN1cGVyYmxva3ZlbGRlbiBnZXZvbmRlbiBpbiBWMS1qb3VybmFsLlxuIgorIlZlbGRlbiB2b29yYmlqIGhldCBWMS1qb3VybmFsLXN1cGVyYmxvayB3b3JkZW4gZ2V3aXN0Li4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJKb3VybmFsIHRvY2ggYWZzcGVsZW4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgc3VwZXJibG9jaywgc28gcnVubmluZyBqb3VybmFsIGFueXdheS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTIKK21zZ2lkICJSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIEBTLCBzbyBydW5uaW5nIEBqIGFueXdheS5cbiIKK21zZ3N0ciAiIgorIlJlc2VydmVrb3BpZcOrbiB2YW4gaGV0IHN1cGVyYmxvayBrZW5uZW4gZ2VlbiByZWRkaW5nc3ZsYWc7XG4iCisiaGV0IG5pZXQtbGVnZSBqb3VybmFsIHdvcmR0IGRhYXJvbSBhZmdlc3BlZWxkLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisiTWFrZW4gdmFuIHJlc2VydmVrb3BpZSB2YW4gaW5mb3JtYXRpZSBpbiBqb3VybmFsLWlub2RlYmxva2tlbi4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJCZXN0YW5kc3N5c3RlZW0gaGVlZnQgZnVuY3RpZSAncmVzaXplX2lub2RlJyB1aXRnZXNjaGFrZWxkLFxuIgorIm1hYXIgJ3NfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcycgaXMgJU47IHpvdSBudWwgbW9ldGVuIHppam4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZV9pbm9kZSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgaW5vZGUgaXMgbm9uLXplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzI4Cittc2dpZCAiUmVzaXplX0BpIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBAaSBpcyBub24temVyby4gICIKK21zZ3N0ciAiRnVuY3RpZSAncmVzaXplX2lub2RlJyBpcyB1aXRnZXNjaGFrZWxkLCBtYWFyIGRlICdyZXNpemUnLWlub2RlIGlzIG5pZXQgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMworbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIk9uZ2VsZGlnZSAncmVzaXplJy1pbm9kZS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzOAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJMYWF0c3RlIGFhbmtvcHBlbGluZ3N0aWpkICgldCkgbGlndCB2b2xnZW5zIHN1cGVyYmxva1xuIgorIiAgICBpbiBkZSB0b2Vrb21zdCAobnUgPSAlVCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNDMKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiTGFhdHN0ZSBzY2hyaWpmdGlqZCAoJXQpIGxpZ3Qgdm9sZ2VucyBzdXBlcmJsb2tcbiIKKyIgICAgaW4gZGUgdG9la29tc3QgKG51ID0gJVQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJEZSBzdXBlcmJsb2toaW50IHZvb3IgZWVuIGV4dGVybiBzdXBlcmJsb2sgZGllbnQgJVggdGUgemlqbi4gICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlRvZXZvZWdlbiB2YW4gJ2Rpcmhhc2gnLWhpbnQgYWFuIGJlc3RhbmRzc3lzdGVlbS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJWYW4gZ3JvZXBzYmVzY2hyaWp2ZXIgJWcgaXMgZGUgY29udHJvbGVzb20gJTA0eCwgem91ICUwNHkgbW9ldGVuIHppam4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICJHcm9lcHNiZXNjaHJpanZlciAlZyBpcyBnZW1hcmtlZXJkIGFscyBvbmdlw69uaXRpYWxpc2VlcmQgem9uZGVyIGZ1bmN0aWVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzY3Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgIgorbXNnc3RyICJHcm9lcHNiZXNjaHJpanZlciAlZyBoZWVmdCBlZW4gb25nZWxkaWcgYWFudGFsICglYikgb25nZWJydWlrdGUgaW5vZGVzLiAgIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiQmxvay1iaXRrYWFydCB2YW4gbGFhdHN0ZSBncm9lcHNiZXNjaHJpanZlciBpcyBvbmdlw69uaXRpYWxpc2VlcmQuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiSm91cm5hbC10cmFuc2FjdGllICVpIGlzIGJlc2NoYWRpZ2Q7IGhldCBhZnNwZWxlbiBpcyBhZmdlYnJva2VuLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4MQorbXNnaWQgIlRoZSB0ZXN0X2ZzIGZsYWcgaXMgc2V0IChhbmQgZXh0NCBpcyBhdmFpbGFibGUpLiAgIgorbXNnc3RyICJEZSBmdW5jdGlldmxhZyAndGVzdF9mcycgaXMgZ2V6ZXQgKGVuIGV4dDQgaXMgYmVzY2hpa2JhYXIpLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg2Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpICAiCittc2dzdHIgIiIKKyJMYWF0c3RlIGFhbmtvcHBlbGluZ3N0aWpkIGxpZ3Qgdm9sZ2VucyBoZXQgc3VwZXJibG9rIGluIGRlIHRvZWtvbXN0LlxuIgorIiAgICAoTWFhciBtaW5kZXIgZGFuIGVlbiBkYWc7IHZlcm1vZWRlbGlqayBpcyBkZSBoYXJkd2FyZWtsb2sgb25qdWlzdCBpbmdlc3RlbGQuKSAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5MgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KS4gICIKK21zZ3N0ciAiIgorIkxhYXRzdGUgc2NocmlqZnRpamQgbGlndCB2b2xnZW5zIGhldCBzdXBlcmJsb2sgaW4gZGUgdG9la29tc3QuXG4iCisiICAgIChNYWFyIG1pbmRlciBkYW4gZWVuIGRhZzsgdmVybW9lZGVsaWprIGlzIGRlIGhhcmR3YXJla2xvayBvbmp1aXN0IGluZ2VzdGVsZC4pICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJFZW4gb2YgbWVlciBncm9lcHNiZXNjaHJpanZlcnMgaGViYmVuIGVlbiBvbmdlbGRpZ2UgY29udHJvbGVzb20uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBpbm9kZXMgY291bnQgdG8gJWogKHdhcyAlaSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDMKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIkhldCBhYW50YWwgdnJpamUgaW5vZGVzIGlzIG9wICVqIGdlemV0ICh3YXMgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDgKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIkhldCBhYW50YWwgdnJpamUgYmxva2tlbiBpcyBvcCAlYyBnZXpldCAod2FzICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEzCittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJEZSBxdW90YS1pbm9kZSAlaSAoJVEpIHdvcmR0IHZlcmJvcmdlbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJTdXBlcmJsb2sgaGVlZnQgb25nZWxkaWcgTU1QLWJsb2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMworbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiU3VwZXJibG9rIGhlZWZ0IG9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBNTVAuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yKCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICJleHQyZnNfY2hlY2tfZGVzYygpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiU3RhcCAxOiBDb250cm9sZSB2YW4gaW5vZGVzLCBibG9ra2VuLCBlbiBncm9vdHRlc1xuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDQKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiRGUgaG9vZmQtaW5vZGUgaXMgZ2VlbiBtYXAuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0OQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiRGUgdmVyd2lqZGVyaW5nc3RpamQgdmFuIGRlIGhvb2ZkLWlub2RlIGlzIG5pZXQgbnVsICh3YWFyc2NoaWpubGlqayB2ZXJvb3J6YWFrdCBkb29yIGVlbiBvdWRlIG1rZTJmcykuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2VydmVkIGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTQKK21zZ2lkICJSZXNlcnZlZCBAaSAlaSAoJVEpIGhhcyBAbiBtb2RlLiAgIgorbXNnc3RyICJHZXJlc2VydmVlcmRlIGlub2RlICVpICVRIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgbW9kdXMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJEZSB2ZXJ3aWpkZXJpbmdzdGlqZCB2YW4gdmVyd2lqZGVyZGUgaW5vZGUgJWkgaXMgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJJbm9kZSAlaSBpcyBpbiBnZWJydWlrLCBtYWFyIGhlZWZ0IGVlbiBpbmdldnVsZGUgdmVyd2lqZGVyaW5nc3RpamQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJJbm9kZSAlaSBpcyBlZW4gbWFwIG1ldCBsZW5ndGUgbnVsLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3NAorbXNnaWQgIkBnICVnJ3MgQGIgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIkRlIGJsb2stYml0a2FhcnQgdmFuIGdyb2VwICVnIGJvdHN0IGJpaiAlYiBtZXQgZWVuIGJlc3RhbmRzc3lzdGVlbWJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc5Cittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiRGUgaW5vZGUtYml0a2FhcnQgdmFuIGdyb2VwICVnIGJvdHN0IGJpaiAlYiBtZXQgZWVuIGJlc3RhbmRzc3lzdGVlbWJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODQKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJEZSBpbm9kZXRhYmVsIHZhbiBncm9lcCAlZyBib3RzdCBiaWogJWIgbWV0IGVlbiBiZXN0YW5kc3N5c3RlZW1ibG9rLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJEZSBibG9rLWJpdGthYXJ0ICViIHZhbiBncm9lcCAlZyBpcyBvbmdlbGRpZy4gICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk0Cittc2dpZCAiQGcgJWcncyBAaSBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiRGUgaW5vZGUtYml0a2FhcnQgJWIgdmFuIGdyb2VwICVnIGlzIG9uZ2VsZGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5OQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiSW5vZGUgJWksICdpX3NpemUnIGlzICVJcywgem91ICVOIG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIklub2RlICVpLCAnaV9ibG9ja3MnIGlzICVJYiwgem91ICVOIG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiT25nZWxkaWcgYmxvayAlQiAoJWIpIGluIGlub2RlICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE0Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiQmxvayAlQiAoJWIpIG92ZXJsYXB0IG1ldGFkYXRhIHZhbiBiZXN0YW5kc3N5c3RlZW0gaW4gaW5vZGUgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSW5vZGUgJWkgYmV2YXQgb25nZWxkaWcoZSkgYmxvayhrZW4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIlRlIHZlZWwgb25nZWxkaWdlIGJsb2trZW4gaW4gaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2sgJUIgKCViKSBpbiBzbGVjaHRlYmxva2tlbi1pbm9kZS4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiU2xlY2h0ZWJsb2trZW4taW5vZGUgYmV2YXQgb25nZWxkaWcoZSkgYmxvayhrZW4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiRWVuIGR1YmJlbCBvZiBzbGVjaHQgYmxvayBpcyBpbiBnZWJydWlrIVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ0Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICJTbGVjaHQgYmxvayAlYiBpcyBpbiBnZWJydWlrIGFscyBpbmRpcmVjdCBibG9rIHZvb3IgZGUgc2xlY2h0ZWJsb2trZW4taW5vZGUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRlIHNsZWNodGVibG9ra2VuLWlub2RlIGlzIHZlcm1vZWRlbGlqayBiZXNjaGFkaWdkLlxuIgorIlUga3VudCBudSBiZXRlciBzdG9wcGVuIGVuICdlMmZzY2sgLWMnIHVpdHZvZXJlbiBvbVxuIgorImhldCBiZXN0YW5kc3N5c3RlZW0gdGUgZG9vcnpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBbHMgaGV0IGJsb2sgZWNodCBzbGVjaHQgaXMsIGthbiBoZXQgYmVzdGFuZHNzeXN0ZWVtIG5pZXQgZ2VyZXBhcmVlcmQgd29yZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJVIGt1bnQgZGl0IGJsb2sgdWl0IGRlIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4gd2lzc2VuIGVuIGhvcGVuXG4iCisiZGF0IGhldCBibG9rIHRvY2ggZ29lZCBpcy4gIE1hYXIgZXIgemlqbiBnZWVuIGdhcmFudGllcy5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjcKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiSGV0IHByaW1haXJlIHN1cGVyYmxvayAoJWIpIHN0YWF0IGluIGRlIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MgorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJFZW4gZ3JvZXBzYmVzY2hyaWp2ZXJzYmxvayAoJWIpIHN0YWF0IGluIGRlIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzgKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGdyb2VwICVnIGhlZWZ0IGVlbiBzbGVjaHQgc3VwZXJibG9rICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgzCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiBncm9lcCAlZyBiZXZhdCBlZW4gc2xlY2h0IGJsb2sgKCViKSBpbiBkZSBncm9lcHNiZXNjaHJpanZlcnMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIkludGVybmUgZm91dD86IGJsb2sgJWIgaXMgem9uZGVyIHJlZGVuIGdlY2xhaW1kIGluIHByb2Nlc3NfYmFkX2Jsb2NrKCkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiAlTiBhYW5lZW5nc2xvdGVuIGJsb2trZW4gaW4gZ3JvZXAgJWcgdm9vciAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGIgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiBidWZmZXIgdm9vciB2ZXJwbGFhdHNlbiB2YW4gJXMuXG4iCisKKyMgc3JjL2RlbGVnYXRlLmM6MzY4CisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIkJlemlnIG1ldCB2ZXJwbGFhdHNlbiB2YW4gZ3JvZXAgJWcncyAlcyB2YW4gJWIgbmFhciAlYy4uLlxuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIHRvICVjLi4uXG4iCittc2dzdHIgIkJlemlnIG1ldCB2ZXJwbGFhdHNlbiB2YW4gZ3JvZXAgJWcncyAlcyBuYWFyICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGthbiBibG9rICViIHZhbiAlcyBuaWV0IGxlemVuOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgYmxvY2sgJWIgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzoga2FuIGJsb2sgJWIgdmFuICVzIG5pZXQgc2NocmlqdmVuOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NzQKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gaW5vZGUtYml0a2FhcnQgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzAKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gYmxvay1iaXRrYWFydCAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuICdpY291bnQnLWxpbmstaW5mb3JtYXRpZTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gYmxva3JlZWtzIHZvb3IgbWFwOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2FubmVuIHZhbiBpbm9kZXMgKCVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBsYW5nc2xvcGVuIHZhbiBibG9ra2VuIHZhbiBpbm9kZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTUKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgb3BzbGFhbiB2YW4gaW5vZGV0YWwgKGlub2RlPSVpLCBhYW50YWw9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIG9wc2xhYW4gdmFuIG1hcGJsb2trZW5pbmZvcm1hdGllIChpbm9kZT0laSwgYmxvaz0lYiwgYWFudGFsPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBpbm9kZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGltYWdpYyBmbGFnIHNldC4gICIKK21zZ3N0ciAiSW5vZGUgJWkgaGVlZnQgZGUgaW1hZ2ljLXZsYWcgZ2V6ZXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChpbm9kZSAlaSkgaGFzIGltbXV0YWJsZVxuCisjLiBALWV4cGFuZGVkOiBvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKEBpICVpKSBoYXMgaW1tdXRhYmxlXG4iCisib3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKyJTcGVjaWFhbCBiZXN0YW5kIChhcHBhcmFhdC9zb2NrZXQvZmlmby9zeW1saW5rKSBoZWVmdCBkZSBvbnZlcmFuZGVyYmFhci1cbiIKKyJvZiBkZSBhbGxlZW4tdG9ldm9lZ2VudmxhZyBnZXpldCAoaW5vZGUgJWkpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGRlIGNvbXByZXNzaWV2bGFnIGdlemV0IG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gem9uZGVyIGNvbXByZXNzaWUtb25kZXJzdGV1bmluZy4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJTcGVjaWFsZSBpbm9kZSAlaSAoYXBwYXJhYXQvc29ja2V0L2ZpZm8pIGhlZWZ0IG5pZXQgbGVuZ3RlIG51bC4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDAKK21zZ2lkICJAaiBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiSm91cm5hbC1pbm9kZSBpcyBuaWV0IGluIGdlYnJ1aWssIG1hYXIgYmV2YXQgZ2VnZXZlbnMuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJKb3VybmFsIGlzIGdlZW4gbm9ybWFhbCBiZXN0YW5kLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIklub2RlICVpIHdhcyBkZWVsIHZhbiBkZSBsaWpzdCB2YW4gdmVyd2Vlc2RlIGlub2Rlcy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTYKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICJJbm9kZXMgZ2V2b25kZW4gZGllIGRlZWwgd2FyZW4gdmFuIGVlbiBiZXNjaGFkaWdkZSBsaWpzdCB2YW4gdmVyd2Vlc2RlIGlub2Rlcy4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjEKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuICdyZWZjb3VudCctc3RydWN0dXVyICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBibG9rICViIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW4gdm9vciBpbm9kZSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzEKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIklub2RlICVpIGJldmF0IGVlbiBzbGVjaHQgYmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBibG9rICViIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW46ICVtICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIkJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBoZWVmdCB2ZXJ3aWp6aW5nc3RhbCAlciwgem91ICVOIG1vZXRlbiB6aWpuLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0NgorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHNjaHJpanZlbiB2YW4gYmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuOiAlbSAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTEKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJCbG9rICViIG1ldCB1aXRnZWJyZWlkZSBrZW5tZXJrZW4gaGVlZnQgaF9ibG9ja3MgPiAxLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbi4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBpcyBiZXNjaGFkaWdkIChyZXNlcnZlcmluZ3NvdmVybGFwKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBpcyBiZXNjaGFkaWdkIChvbmdlbGRpZ2UgbmFhbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkJsb2sgJWIgbWV0IHVpdGdlYnJlaWRlIGtlbm1lcmtlbiBpcyBiZXNjaGFkaWdkIChvbmdlbGRpZ2Ugd2FhcmRlKS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgdG9vIGJpZy4gICIKK21zZ3N0ciAiSW5vZGUgJWkgaXMgdGUgZ3Jvb3QuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4MAorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkJsb2sgJUIgKCViKSBtYWFrdCBtYXAgdGUgZ3Jvb3QuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg1Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJCbG9rICVCICglYikgbWFha3QgYmVzdGFuZCB0ZSBncm9vdC4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkJsb2sgJUIgKCViKSBtYWFrdCBzeW1ib2xpc2NoZSBrb3BwZWxpbmcgdGUgZ3Jvb3QuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgaGVlZnQgZGUgJ0lOREVYX0ZMJy12bGFnIGdlemV0IG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gem9uZGVyICdodHJlZSctb25kZXJzdGV1bmluZy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGRlICdJTkRFWF9GTCctdmxhZyBnZXpldCBtYWFyIGhldCBpcyBnZWVuIG1hcC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgdmFuICdodHJlZSctbWFwIGhlZWZ0IGVlbiBvbmdlbGRpZ2Ugd29ydGVsa25vb3AuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTAKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiSW5vZGUgJWkgdmFuICdodHJlZSctbWFwIGdlYnJ1aWt0IGVlbiBuaWV0LW9uZGVyc3RldW5kZSBoYXNoLXZlcnNpZSAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICJJbm9kZSAlaSB2YW4gJ2h0cmVlJy1tYXAgZ2VicnVpa3QgZWVuIGluY29tcGF0aWJlbGUgd29ydGVsa25vb3B2bGFnLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJJbm9kZSAlaSB2YW4gJ2h0cmVlJy1tYXAgaGVlZnQgZWVuIHRlIGdyb3RlIGJvb21kaWVwdGUgKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIlNsZWNodGVibG9ra2VuLWlub2RlIGJldmF0IGVlbiBpbmRpcmVjdCBibG9rICglYikgZGF0IHN0cmlqZGlnXG4iCisiaXMgbWV0IGRlIG1ldGFnZWdldmVucyB2YW4gaGV0IGJlc3RhbmRzc3lzdGVlbS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiQWFubWFrZW4gdmFuICdyZXNpemUnLWlub2RlIGlzIG1pc2x1a3Q6ICVtIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgZXh0cmEgZ3Jvb3R0ZSAoJUlTKS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSBuYWFtbGVuZ3RlICglTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWVuIHVpdGdlYnJlaWQga2VubWVyayBpbiBpbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlIHdhYXJkZW9mZnNldCAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJFZW4gdWl0Z2VicmVpZCBrZW5tZXJrIGluIGlub2RlICVpIGhlZWZ0IGVlbiBvbmdlbGRpZyB3YWFyZGVibG9rICglTiwgbW9ldCAwIHppam4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiRWVuIHVpdGdlYnJlaWQga2VubWVyayBpbiBpbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlIHdhYXJkZWdyb290dGUgKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkVlbiB1aXRnZWJyZWlkIGtlbm1lcmsgaW4gaW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSBoYXNoLXdhYXJkZSAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY2Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJJbm9kZSAlaSBpcyBnZW1hcmtlZXJkIGFscyBlZW4gJUl0LCBtYWFyIGxpamt0IGZlaXRlbGlqayBlZW4gbWFwIHRlIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBleHRlbnQgdHJlZSBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBkb29ybGV6ZW4gdmFuICdleHRlbnRzJy1ib29tIGluIGlub2RlICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJMYW5nc2xvcGVuIHZhbiAnZXh0ZW50cycgaW4gaW5vZGUgJWkgaXMgbWlzbHVrdFxuIgorIiAgICAob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgyCittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGVlZnQgZWVuIG9uZ2VsZGlnZSAnZXh0ZW50J1xuIgorIiAgKGxvZ2lzY2ggYmxvayAlYywgb25nZWxkaWcgZnlzaWVrIGJsb2sgJWIsIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlICdleHRlbnQnXG4iCisiICAobG9naXNjaCBibG9rICVjLCBmeXNpZWsgYmxvayAlYiwgb25nZWxkaWdlIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGRlICdFWFRFTlRTX0ZMJy12bGFnIGdlemV0IG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gem9uZGVyICdodHJlZSctb25kZXJzdGV1bmluZy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IHN1cGVyYmxvY2sgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gZXh0ZW50IGZvcm1hdCwgYnV0IEBTIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0IGV4dGVudC1vcG1hYWssIG1hYXIgc3VwZXJibG9rIGhlZWZ0IEVYVEVOVFMtZnVuY3RpZXZsYWcgbmlldCBnZXpldC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIklub2RlICVpIGhlZWZ0ICdleHRlbnQnLW9wbWFhaywgbWFhciBoZWVmdCAnRVhURU5UX0ZMJy12bGFnIG5pZXQgZ2V6ZXQuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiU25lbGxlIHN5bWJvbGlzY2hlIGtvcHBlbGluZyAlaSBoZWVmdCAnRVhURU5UX0ZMJy12bGFnIGdlemV0LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWkgaGVlZnQgJ2V4dGVudHMnIGRpZSBuaWV0IG9wIHZvbGdvcmRlIGxpZ2dlblxuIgorIiAgKG9uZ2VsZGlnIGxvZ2lzY2ggYmxvayAlYywgZnlzaWVrIGJsb2sgJWIsIGxlbmd0ZSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTYKK21zZ2lkICJAaSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuIgorbXNnc3RyICJJbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlICdleHRlbnQnLWtub29wIChibGsgJWIsIGxibGsgJWMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGNvbnZlcnRlcmVuIHZhbiBzdWJjbHVzdGVyYmxva2tlbi1iaXRrYWFydDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJRdW90YS1pbm9kZSBpcyBnZWVuIG5vcm1hYWwgYmVzdGFuZC4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMxCittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIlF1b3RhLWlub2RlIGlzIG5pZXQgaW4gZ2VicnVpaywgbWFhciBiZXZhdCBnZWdldmVucy4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzYKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJRdW90YS1pbm9kZSBpcyB6aWNodGJhYXIgdm9vciBkZSBnZWJydWlrZXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDEKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJEZSBzbGVjaHRlYmxva2tlbi1pbm9kZSBsaWprdCBvbmdlbGRpZy4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0NgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKyJJbm9kZSAlaSBoZWVmdCBlZW4gJ2V4dGVudCcgbWV0IGxlbmd0ZSBudWxcbiIKKyIgIChvbmdlbGRpZyBsb2dpc2NoIGJsb2sgJWMsIGZ5c2llayBibG9rICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyJJbndlbmRpZyAnZXh0ZW50Jy1rbm9vcG5pdmVhdSAlTiB2YW4gaW5vZGUgJWk6XG4iCisiTG9naXNjaCBiZWdpbiAlYiBrb210IG5pZXQgb3ZlcmVlbiBtZXQgbG9naXNjaCBiZWdpbiAlYyBvcCB2b2xnZW5kZSBuaXZlYXUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiSW5vZGUgJWk6IGVpbmRlIHZhbiAnZXh0ZW50JyBvdmVyc2NocmlqZHQgdG9lZ2VzdGFuZSB3YWFyZGVcbiIKKyIgIChsb2dpc2NoIGJsb2sgJWMsIGZ5c2llayBibG9rICViLCBsZW5ndGUgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NworbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiRXIgemlqbiBleHRyYSBzdGFwcGVuIG5vZGlnIHZvb3IgaGV0IG9udHdhcnJlbiB2YW4gYmxva2tlbiBkaWUgZG9vclxuIgorIm1lZXIgZGFuIMOpw6luIGlub2RlIGdlY2xhaW1kIHdvcmRlbi5cbiIKKyJTdGFwIDFCOiBPcG5pZXV3IHpvZWtlbiBuYWFyIG1lZXJ2b3VkaWctZ2VjbGFpbWRlIGJsb2trZW5cbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiTWVlcnZvdWRpZy1nZWNsYWltZCBibG9rIChvZiBibG9ra2VuKSBpbiBpbm9kZSAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgc2Nhbm5lbiB2YW4gaW5vZGVzICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gdmVydmFuZ2VuZGUgaW5vZGUtYml0a2FhcnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxhbmdzbG9wZW4gdmFuIGJsb2trZW4gdmFuIGlub2RlICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMyBlMmZzY2svcHJvYmxlbS5jOjEzMTgKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBiaWpzdGVsbGVuIHZhbiB2ZXJ3aWp6aW5nc3RhbCB2YW4gYmxvayAlYiBtZXQgdWl0Z2VicmVpZGUga2VubWVya2VuIChpbm9kZSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDgKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIlN0YXAgMUM6IERvb3J6b2VrZW4gdmFuIG1hcHBlbiBuYWFyIGlub2RlcyBtZXQgbWVlcnZvdWRpZy1nZWNsYWltZGUgYmxva2tlblxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTQKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiU3RhcCAxRDogVmVyem9lbmVuIHZhbiBtZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE5Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkJlc3RhbmQgJVEgKGlub2RlICVpLCB3aWp6aWdpbmdzdGlqZCAlSU0pXG4iCisiICAgIGJldmF0ICVyIG1lZXJ2b3VkaWctZ2VjbGFpbWQoZSkgYmxvayhrZW4pLCBnZWRlZWxkIG1ldCAlTiBiZXN0YW5kKGVuKTpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChpbm9kZSAlaSwgd2lqemlnaW5nc3RpamQgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8bWV0YWdlZ2V2ZW5zIHZhbiBiZXN0YW5kc3N5c3RlZW0+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihFciB6aWpuICVOIGlub2RlcyBtZXQgbWVlcnZvdWRpZy1nZWNsYWltZGUgYmxva2tlbi4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNZWVydm91ZGlnLWdlY2xhaW1kZSBibG9ra2VuIHppam4gYWwgZ2VrbG9vbmQgb2Ygb3BuaWV1dyB0b2VnZWtlbmQuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJLYW4gYmVzdGFuZCBuaWV0IGtsb25lbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1OQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlN0YXAgMjogQ29udHJvbGUgdmFuIG1hcHBlbnN0cnVjdHV1clxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJPbmdlbGRpZyBpbm9kZW51bW1lciB2b29yICcuJyBpbiBtYXAtaW5vZGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGludmFsaWQgaW5vZGUgIzogJURpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjkKK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICJARSBoZWVmdCBlZW4gb25nZWxkaWcgaW5vZGVudW1tZXI6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzQKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiQEUgYmV2YXQgZWVuIHZlcndpamRlcmRlIG9mIG9uZ2VicnVpa3RlIGlub2RlICVEaS4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3OQorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJARSBpcyBlZW4ga29wcGVsaW5nIG5hYXIgJy4nICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NAorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJARSB2ZXJ3aWpzdCBuYWFyIGVlbiBpbm9kZSAoJURpKSBpbiBlZW4gc2xlY2h0IGJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg5Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIGlzIGVlbiBrb3BwZWxpbmcgbmFhciBtYXAgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTQKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkBFIGlzIGVlbiBrb3BwZWxpbmcgbmFhciBkZSBob29mZC1pbm9kZS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTkKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBiZXZhdCBvbmdlbGRpZ2UgdGVrZW5zIGluIGRlIG5hYW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJPbnRicmVrZW5kZSAnLicgaW4gbWFwLWlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJPbnRicmVrZW5kZSAnLi4nIGluIG1hcC1pbm9kZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTQKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJFZXJzdGUgaXRlbSAnJURuJyAoaW5vZGU9JURpKSBpbiBtYXAtaW5vZGUgJWkgKCVwKSBtb2V0ICcuJyB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZWNvbmQgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpIHNob3VsZCBiZSAnLi4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExOQorbXNnaWQgIlNlY29uZCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSBAcyAnLi4nXG4iCittc2dzdHIgIlR3ZWVkZSBpdGVtICclRG4nIChpbm9kZT0lRGkpIGluIG1hcC1pbm9kZSAlaSBtb2V0ICcuLicgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjQKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZmFkZHInIEBGIGlzICVJRiwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjkKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiJ2lfZmlsZV9hY2wnIEBGIGlzICVJZiwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNAorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2Rpcl9hY2wnIEBGIGlzICVJZCwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM5Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9mcmFnJyBARiBpcyAlTiwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NAorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIidpX2ZzaXplJyBARiBpcyAlTiwgbW9ldCBudWwgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDkKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgbW9kdXMgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIk1hcC1pbm9kZSAlaSwgYmxvayAlQiwgcG9zaXRpZSAlTjogbWFwIGlzIGJlc2NoYWRpZ2RcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTkKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiTWFwLWlub2RlICVpLCBibG9rICVCLCBwb3NpdGllICVOOiBiZXN0YW5kc25hYW0gaXMgdGUgbGFuZ1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjQKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIk1hcC1pbm9kZSAlaSBiZXZhdCBlZW4gb25nZXJlc2VydmVlcmQgYmxvayAlQi4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiSXRlbSAnLicgaW4gbWFwLWlub2RlICVpIGVpbmRpZ3QgbmlldCBvcCBOVUxMLlxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkl0ZW0gJy4uJyBpbiBtYXAtaW5vZGUgJWkgZWluZGlndCBuaWV0IG9wIE5VTEwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgKCVRKSBpcyBlZW4gb25nZWxkaWcgYnl0ZS1hcHBhcmFhdC5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg0Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiSW5vZGUgJWkgKCVRKSBpcyBlZW4gb25nZWxkaWcgYmxvay1hcHBhcmFhdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODkKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJARSBpcyBlZW4gZHVwbGljYWF0LScuJy1pdGVtLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTQKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgaXMgZWVuIGR1cGxpY2FhdC0nLi4nLWl0ZW0uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OSBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIqSW50ZXJuZSBmb3V0Kjoga2FuICdkaXJfaW5mbycgdm9vciAlaSBuaWV0IHZpbmRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA0Cittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgaGVlZnQgZWVuICdyZWNfbGVuJyB2YW4gJURyLCB6b3UgJU4gbW9ldGVuIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IHN0cnVjdHVyZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyByZXNlcnZlcmVuIHZhbiAnaWNvdW50Jy1zdHJ1Y3R1dXI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGl0ZXJhdGluZyBvdmVyIGRpcmVjdG9yeSBibG9ja3M6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBpdGVyYXRpbmcgb3ZlciBAZCBAYnM6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBsYW5nc2xvcGVuIHZhbiBtYXBibG9ra2VuOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBsZXplbiB2YW4gbWFwYmxvayAlYiAoaW5vZGUgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjQKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBzY2hyaWp2ZW4gdmFuIG1hcGJsb2sgJWIgKGlub2RlICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gbmlldXcgbWFwYmxvayB2b29yIGlub2RlICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIHZyaWpnZXZlbiB2YW4gaW5vZGUgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBlbnRyeSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiTWFwaXRlbSB2b29yICcuJyBpbiAlcCAoJWkpIGlzIGdyb290LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ0Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJJbm9kZSAlaSAoJVEpIGlzIGVlbiBvbmdlbGRpZ2UgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIklub2RlICVpICglUSkgaXMgZWVuIG9uZ2VsZGlnZSBzb2NrZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJCZXN0YW5kc3R5cGUgdmFuIEBFIHdvcmR0IG9wICVOIGdlemV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIHNob3VsZCBiZSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1OQorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiQEUgaGVlZnQgZWVuIG9uZ2VsZGlnIGJlc3RhbmRzdHlwZSAoJUR0LCB6b3UgJU4gbW9ldGVuIHppam4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIGhlZWZ0IGVlbiBpbmdldnVsZCBiZXN0YW5kc3R5cGUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEUgaGVlZnQgZWVuIG5hYW0gbWV0IGxlbmd0ZSBudWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltYm9saXNjaGUga29wcGVsaW5nICVRIChpbm9kZSAlaSkgaXMgb25nZWxkaWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzkKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQmxvayB2YW4gdWl0Z2VicmVpZGUga2VubWVya2VuIEBGIGlzIG9uZ2VsZGlnICglSWYpLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NAorbXNnaWQgIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW0gYmV2YXQgZ3JvdGUgYmVzdGFuZGVuLCBtYWFyIGhlZWZ0IGluIGhldCBzdXBlcmJsb2sgbmlldCBkZSAnbGFyZ2UtZmlsZSctdmxhZyBnZXpldC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4OQorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogbmFhciAlQiB3b3JkdCBuaWV0IHZlcndlemVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibGVlbSBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZDogbmFhciAlQiB3b3JkdCB0d2VlIGtlZXIgdmVyd2V6ZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5OQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiAlQiBoZWVmdCBlZW4gb25nZWxkaWdlIG1pbmltdW0gaGFzaC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQ6ICVCIGhlZWZ0IGVlbiBvbmdlbGRpZ2UgbWF4aW11bSBoYXNoLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJPbmdlbGRpZ2UgJ2h0cmVlJy1tYXAtaW5vZGUgJWQgKCVxKS4gICIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKTogYmFkIGJsb2NrIG51bWJlciAlYi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEzCittc2dpZCAiQHAgQGggJWQgKCVxKTogYmFkIEBiIG51bWJlciAlYi5cbiIKK21zZ3N0ciAiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQgKCVxKTogb25nZWxkaWcgYmxva251bW1lciAlYi5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6IHJvb3Qgbm9kZSBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiBkZSB3b3J0ZWxrbm9vcCBpcyBvbmdlbGRpZy5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiAlQiBoZWVmdCBlZW4gb25nZWxkaWdlIGxpbWlldCAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzMKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiUHJvYmxlZW0gaW4gJ2h0cmVlJy1tYXAtaW5vZGUgJWQ6ICVCIGhlZWZ0IGVlbiBvbmdlbGRpZyBhYW50YWwgKCVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzgKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiAlQiBoZWVmdCBlZW4gb25nZW9yZGVuZGUgaGFzaC10YWJlbC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQzCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBkZXB0aCAoJU4pXG4iCittc2dzdHIgIlByb2JsZWVtIGluICdodHJlZSctbWFwLWlub2RlICVkOiAlQiBoZWVmdCBlZW4gb25nZWxkaWdlIGRpZXB0ZSAoJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ4Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJEdWJiZWwgaXRlbSAnJURuJyBpbiAlcCAoJWkpIGdldm9uZGVuLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGhlZWZ0IGVlbiBuaWV0LXVuaWVrZSBiZXN0YW5kc25hYW0uXG4iCisiSGVybm9lbWVuIHRvdCAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiRHViYmVsIGl0ZW0gJyVEbicgZ2V2b25kZW4uXG4iCisiICAgIE1hcCAlcCAoJWkpIHdvcmR0IGdlbWFya2VlcmQgb20gb3BuaWV1dyB0ZSB3b3JkZW4gb3BnZWJvdXdkLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9ibG9ja3NfaGknIEBGIGlzICVOLCBtb2V0IG51bCB6aWpuLlxuIgorCisjLiBALWV4cGFuZGVkOiBVbmV4cGVjdGVkIGJsb2NrIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjgKK21zZ2lkICJVbmV4cGVjdGVkIEBiIGluIEBoICVkICglcSkuXG4iCittc2dzdHIgIk9udmVyd2FjaHQgYmxvayBpbiAnaHRyZWUnLW1hcC1pbm9kZSAlZCAoJXEpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICJARSB2ZXJ3aWpzdCBuYWFyIGlub2RlICVEaSBpbiBncm9lcCAlZyBkaWUgZ2VtYXJrZWVyZCBpcyBhbHMgX0lOT0RFX1VOSU5JVC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc3Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIkBFIHZlcndpanN0IG5hYXIgaW5vZGUgJURpIGluIGhldCBnZWJpZWQgbWV0IG9uZ2VicnVpa3RlIGlub2RlcyB2YW4gZ3JvZXAgJWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODIKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICInaV9maWxlX2FjbCcgQEYgaXMgJU4sIG1vZXQgbnVsIHppam4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODkKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJTdGFwIDM6IENvbnRyb2xlIHZhbiB2ZXJiaW5kaW5nZW4gdHVzc2VuIG1hcHBlblxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkhvb2ZkLWlub2RlIGlzIG5pZXQgZ2VyZXNlcnZlZXJkLiAgIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJHZWVuIHJ1aW10ZSBtZWVyIGluIC9sb3N0K2ZvdW5kLiAgIgorCisjLiBALWV4cGFuZGVkOiBVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5jb25uZWN0ZWQgQGQgQGkgJWkgKCVwKVxuIgorbXNnc3RyICJPbnZlcmJvbmRlbiBtYXAtaW5vZGUgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9sb3N0K2ZvdW5kIG5pZXQgZ2V2b25kZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE0Cittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBtb2V0ICVxICglZCkgemlqbi5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiQmVzY2hhZGlnZGUgb2YgbmlldC1iZXN0YWFuZGUgL2xvc3QrZm91bmQuICBLYW4gaW5vZGUgbmlldCBoZXJ2ZXJiaW5kZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiS2FuIC9sb3N0K2ZvdW5kIG5pZXQgdWl0YnJlaWRlbjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWNvbm5lY3QgJWk6ICVtXG4iCittc2dzdHIgIkthbiBpbm9kZSAlaSBuaWV0IGhlcnZlcmJpbmRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyB6b2VrZW4gdmFuIC9sb3N0K2ZvdW5kOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19ibG9jaygpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZSgpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9ibG9jaygpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiBuaWV1dyBtYXBibG9rXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9ibG9jaygpOiAlbSB0aWpkZW5zIG1ha2VuIHZhbiBtYXBibG9rIHZvb3IgL2xvc3QrZm91bmRcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgYWRqdXN0aW5nIGlub2RlIGNvdW50IG9uIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBhZGp1c3RpbmcgQGkgY291bnQgb24gQGkgJWlcbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGJpandlcmtlbiB2YW4gaW5vZGV0YWwgdmFuIGlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiS2FuIG91ZGVydmVyd2lqemluZyB2YW4gaW5vZGUgJWkgbmlldCBoZXJzdGVsbGVuOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkthbiBvdWRlcnZlcndpanppbmcgdmFuIGlub2RlICVpIG5pZXQgaGVyc3RlbGxlbjoga2FuIGRlIG91ZGVybWFwIG5pZXQgdmluZGVuLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbWFrZW4gdmFuIGhvb2ZkbWFwICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgL0BsIEBkICglcyk6ICVtXG4iCittc2dzdHIgIkZvdXQgdGlqZGVucyBtYWtlbiB2YW4gL2xvc3QrZm91bmQtbWFwICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg5Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJEZSBob29mZC1pbm9kZSBpcyBnZWVuIG1hcC4gIEdlc3RvcHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTQKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIkthbiBuaWV0IHZlcmRlciB6b25kZXIgZWVuIGhvb2ZkLWlub2RlLlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCAoaW5vZGUgJWkpIGlzIGdlZW4gbWFwXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiU3RhcCAzQTogT3B0aW1hbGlzYXRpZSB2YW4gbWFwcGVuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiTWFrZW4gdmFuICdkaXJzX3RvX2hhc2gtaXRlcmF0b3InIGlzIG1pc2x1a3Q6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyMQorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiT3B0aW1hbGlzZXJlbiB2YW4gbWFwICVxICglZCkgaXMgbWlzbHVrdDogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTI2Cittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHRpbWFsaXNlcmVuIHZhbiBtYXBwZW46ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTQzCittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIlN0YXAgNDogQ29udHJvbGUgdmFuIHZlcndpanppbmdzYWFudGFsbGVuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiT252ZXJib25kZW4gaW5vZGUgJWkgbWV0IGxlbmd0ZSBudWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIk9udmVyYm9uZGVuIGlub2RlICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1OAorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJWZXJ3aWp6aW5nc2FhbnRhbCB2YW4gaW5vZGUgJWkgaXMgJUlsLCB6b3UgJU4gbW9ldGVuIHppam4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiV0FBUlNDSFVXSU5HOiBwcm9ncmFtbWFmb3V0IGluIGUyZnNjayFcbiIKKyIgICAgKm9mKiBVIEJFTlQgRUVOIEFBTkdFS09QUEVMRCBCRVNUQU5EU1NZU1RFRU0gQUFOIEhFVCBDT05UUk9MRVJFTiFcbiIKKyJcbiIKKyJpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC5cbiIKKyJEZXplIGhvcmVuIGhldHplbGZkZSB0ZSB6aWpuIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcyCittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlN0YXAgNTogQ29udHJvbGUgdmFuIGdyb2Vwc3NhbWVudmF0dGluZ2VuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiT3B2dWxsaW5nIGFhbiBoZXQgZWluZCB2YW4gaW5vZGUtYml0a2FhcnQgaXMgbmlldCBnZXpldC4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODIKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIk9wdnVsbGluZyBhYW4gaGV0IGVpbmQgdmFuIGJsb2stYml0a2FhcnQgaXMgbmlldCBnZXpldC4gIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg3Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiQmxvay1iaXRrYWFydC12ZXJzY2hpbGxlbjogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA3Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiSW5vZGUtYml0a2FhcnQtdmVyc2NoaWxsZW46ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjcKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlZlcmtlZXJkIGFhbnRhbCB2cmlqZSBpbm9kZXMgdm9vciBncm9lcCAjJWcgKCVpLCBnZXRlbGQ9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzMgorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiVmVya2VlcmQgYWFudGFsIG1hcHBlbiB2b29yIGdyb2VwICMlZyAoJWksIGdldGVsZD0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlZlcmtlZXJkIGFhbnRhbCBpbm9kZXMgKCVpLCBnZXRlbGQ9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0MgorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiVmVya2VlcmQgYWFudGFsIGJsb2trZW4gdm9vciBncm9lcCAjJWcgKCViLCBnZXRlbGQ9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDcKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJWZXJrZWVyZCBhYW50YWwgYmxva2tlbiAoJWIsIGdldGVsZD0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjUyCittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICJQUk9HUkFNTUFGT1VUIGluIGUyZnNjazogaW4gYmVzdGFuZHNzeXN0ZWVtICVOIGtvbWVuIGRlIGJpdGthYXJ0LWVpbmRwdW50ZW4gKCViLCAlYykgbmlldCBvdmVyZWVuIG1ldCBkZSBiZXJla2VuZGUgZWluZHB1bnRlbiAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTgKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiKkludGVybmUgZm91dCo6IGVpbmRlIHZhbiBiaXRtYXAgaXMgZ2Vmb2V6ZWxkICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICJGb3V0IHRpamRlbnMga29wacOrcmVuIG5hYXIgdmVydmFuZ2VuZGUgaW5vZGUtYml0a2FhcnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGtvcGnDq3JlbiBuYWFyIHZlcnZhbmdlbmRlIGJsb2stYml0a2FhcnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIkJsb2soa2VuKSB2YW4gZ3JvZXAgJWcgaW4gZ2VicnVpaywgbWFhciBncm9lcCBpcyBnZW1hcmtlZXJkIGFscyBCTE9DS19VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiSW5vZGUocykgdmFuIGdyb2VwICVnIGluIGdlYnJ1aWssIG1hYXIgZ3JvZXAgaXMgZ2VtYXJrZWVyZCBhbHMgSU5PREVfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlY3JlYXRlIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcwNQorbXNnaWQgIlJlY3JlYXRlIEBqIgorbXNnc3RyICJKb3VybmFsIGhlcmFhbm1ha2VuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MTAKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiUXVvdGEtaW5mb3JtYXRpZSBiaWp3ZXJrZW4gdm9vciBxdW90YXR5cGUgJU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIk9uYmVrZW5kZSBmb3V0Y29kZSAoMHgleCkhXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk1NCBlMmZzY2svcHJvYmxlbS5jOjE5NTgKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICJHRU5FR0VFUkQiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJHZWJydWlrdCBnZWhldWdlbjogJWQsIHZlcmxvcGVuIHRpamQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiZ3Jvb3R0ZSB2YW4gaW5vZGUgaXMgJWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidGlqZGVucyBzdGFydCB2YW4gaW5vZGUtc2NhbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidGlqZGVucyB1aXR2b2VyaW5nIHZhbiBpbm9kZS1zY2FuIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgInRpamRlbnMgYWFucm9lcCB2YW4gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUoKSB2b29yIGlub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgInRpamRlbnMgYWFucm9lcCB2YW4gZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIoKSB2b29yIGlub2RlICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzIKK21zZ2lkICJUcnVuY2F0aW5nIgorbXNnc3RyICJBZmthcHBlbiIKKworIzogZTJmc2NrL3N1cGVyLmM6MjczCittc2dpZCAiQ2xlYXJpbmciCittc2dzdHIgIldpc3NlbiIKKworIzogZTJmc2NrL3VuaXguYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHN1cGVyYmxvY2tdIFstQiBibG9ja3NpemVdXG4iCisiXHRcdFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBbLVAgcHJvY2Vzc19pbm9kZV9zaXplXVxuIgorIlx0XHRbLWx8LUwgYmFkX2Jsb2Nrc19maWxlXSBbLUMgZmRdIFstaiBleHRlcm5hbF9qb3VybmFsXVxuIgorIlx0XHRbLUUgZXh0ZW5kZWQtb3B0aW9uc10gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1jZGZrbnBzdHZ5REZTVl0gWy1iIHN1cGVyYmxva10gWy1CIGJsb2tncm9vdHRlXVxuIgorIiAgICAgICAgICBbLUMgYmVzdGFuZHNkZXNjcmlwdG9yXSBbLUUgdWl0Z2VicmVpZGVfb3B0aWVzXVxuIgorIiAgICAgICAgICBbLUkgaW5vZGVidWZmZXJibG9ra2VuXSBbLWogZXh0ZXJuX2pvdXJuYWxdXG4iCisiICAgICAgICAgIFstbHwtTCBzbGVjaHRlX2Jsb2trZW5iZXN0YW5kXSBbLVAgcHJvY2VzaW5vZGUtZ3Jvb3R0ZV1cbiIKKyIgICAgICAgICAgYXBwYXJhYXRcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayBsaXN0XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgZmlsZXN5c3RlbSBpcyBtYXJrZWQgY2xlYW5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vb2RodWxwOlxuIgorIiAtcCAgIEF1dG9tYXRpc2NoZSByZXBhcmF0aWUgKHpvbmRlciB2cmFnZW4pLlxuIgorIiAtbiAgIEJlc3RhbmRzc3l0ZWVtIG5pZXQgdmVyYW5kZXJlbjsgb3AgYWxsZSB2cmFnZW4gXCJuZWVcIiBhYW5uZW1lbi5cbiIKKyIgLXkgICBBbHMgYW50d29vcmQgb3AgYWxsZSB2cmFnZW4gXCJqYVwiIGFhbm5lbWVuLlxuIgorIiAtYyAgIE9wIHNsZWNodGUgYmxva2tlbiBjb250cm9sZXJlbiBlbiBkZXplIGFhbiBsaWpzdCB0b2V2b2VnZW4uXG4iCisiIC1mICAgRWVuIGNvbnRyb2xlIGFmZHdpbmdlbiwgb29rIGFscyBoZXQgYmVzdGFuZHNzeXN0ZWVtIHNjaG9vbiBpcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgR2VkZXRhaWxsZWVyZGUgdWl0dm9lciBwcm9kdWNlcmVuLlxuIgorIiAtYiBzdXBlcmJsb2sgICAgICAgIERpdCBzdXBlcmJsb2sgZ2VicnVpa2VuLlxuIgorIiAtQiBibG9rZ3Jvb3R0ZSAgICAgIERlemUgYmxva2dyb290dGUgZ2VicnVpa2VuIGJpaiB6b2VrZW4gbmFhciBzdXBlcmJsb2suXG4iCisiIC1qIGV4dGVybl9qb3VybmFsICAgRGl0IGV4dGVybmUgam91cm5hbCBnZWJydWlrZW4uXG4iCisiIC1sIHNsZWNodGVfYmxva2tlbmJlc3RhbmQgICBEZXplIGxpanN0IGFhbiBkZSBzbGVjaHRlX2Jsb2trZW5saWpzdCB0b2V2b2VnZW4uXG4iCisiIC1MIHNsZWNodGVfYmxva2tlbmJlc3RhbmQgICBEZXplIHNsZWNodGVfYmxva2tlbmxpanN0IGdlYnJ1aWtlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IGJlc3RhbmRlbiAoJTBkLiVkJSUgbmlldC1hYW5lZW5nZXNsb3RlbiksICVsbHUvJWxsdSBibG9ra2VuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IGlub2RlIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgaW5vZGVzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAldSlcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgaW5vZGUgZ2VicnVpa3QgKCUyLjJmJSUgdmFuICV1KVxuIgorbXNnc3RyWzFdICIiCisiXG4iCisiJTEydSBpbm9kZXMgZ2VicnVpa3QgKCUyLjJmJSUgdmFuICV1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuaWV0LWFhbmVlbmdlc2xvdGVuIGJlc3RhbmQgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzFdICIlMTJ1IG5pZXQtYWFuZWVuZ2VzbG90ZW4gYmVzdGFuZGVuICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBuaWV0LWFhbmVlbmdlc2xvdGVuIG1hcCAoJTBkLiVkJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgbmlldC1hYW5lZW5nZXNsb3RlbiBtYXBwZW4gKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgIGFhbnRhbCBpbm9kZXMgbWV0IGluZGlyZWN0ZSBibG9ra2VuOiAldSBlbmtlbCwgJXUgZHViYmVsLCAldSB0cmlwbGVcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIgICAgICAgICAgICAgRXh0ZW50cy1kaWVwdGVoaXN0b2dyYW06ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUgYmxvayBnZWJydWlrdCAoJTIuMmYlJSB2YW4gJWxsdSlcbiIKK21zZ3N0clsxXSAiJTEybGx1IGJsb2trZW4gZ2VicnVpa3QgKCUyLjJmJSUgdmFuICVsbHUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIlMTJ1IHNsZWNodCBibG9rXG4iCittc2dzdHJbMV0gIiUxMnUgc2xlY2h0ZSBibG9ra2VuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgZ3Jvb3QgYmVzdGFuZFxuIgorbXNnc3RyWzFdICIlMTJ1IGdyb3RlIGJlc3RhbmRlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBub3JtYWFsIGJlc3RhbmRcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUgbm9ybWFsZSBiZXN0YW5kZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IG1hcFxuIgorbXNnc3RyWzFdICIlMTJ1IG1hcHBlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBieXRlLWFwcGFyYWF0XG4iCittc2dzdHJbMV0gIiUxMnUgYnl0ZS1hcHBhcmF0ZW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJsb2stYXBwYXJhYXRcbiIKK21zZ3N0clsxXSAiJTEydSBibG9rLWFwcGFyYXRlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpZm9cbiIKK21zZ3N0clsxXSAiJTEydSBmaWZvJ3NcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJTEydSBrb3BwZWxpbmdcbiIKK21zZ3N0clsxXSAiJTEydSBrb3BwZWxpbmdlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgc3ltYm9saXNjaGUga29wcGVsaW5nIgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbGlzY2hlIGtvcHBlbGluZ2VuIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICIgKCV1IHNuZWxsZSBrb3BwZWxpbmcpXG4iCittc2dzdHJbMV0gIiAoJXUgc25lbGxlIGtvcHBlbGluZ2VuKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKK21zZ3N0clsxXSAiJTEydSBzb2NrZXRzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgYmVzdGFuZFxuIgorbXNnc3RyWzFdICIlMTJ1IGJlc3RhbmRlblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIzMiBtaXNjL2JhZGJsb2Nrcy5jOjk4MyBtaXNjL3R1bmUyZnMuYzoxOTg1IG1pc2MvdXRpbC5jOjE0NworIzogcmVzaXplL21haW4uYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIKK21zZ3N0ciAidGlqZGVucyBiZXBhbGVuIG9mICVzIGFhbmdla29wcGVsZCBpcy4iCisKKyM6IGUyZnNjay91bml4LmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nISAgJXMgaXMgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIlcyBpcyAlcy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkthbiBuaWV0IGRvb3JnYWFuLiAgR2VzdG9wdC5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIqKldBQVJTQ0hVV0lORyoqISEhICBIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIGFhbmdla29wcGVsZCFcbiIKKyIgICAgQWxzIHUgZG9vcmdhYXQgKipaQUwqKiBkaXQgdG90ICoqWldBUkUqKiBiZXNjaGFkaWdpbmdlbiBsZWlkZW4uXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY5Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJXaWx0IHUgZWNodCBkb29yZ2FhbiIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAiRGUgY29udHJvbGUgaXMgYWZnZWJyb2tlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzozNjEKK21zZ2lkICIgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycyIKK21zZ3N0ciAiIGJldmF0IGVlbiBiZXN0YW5kc3N5c3RlZW0gbWV0IGZvdXRlbiIKKworIzogZTJmc2NrL3VuaXguYzozNjMKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIGlzIG5pZXQgZ29lZCBvbnRrb3BwZWxkIgorCisjOiBlMmZzY2svdW5peC5jOjM2NQorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgaGV0IHByaW1haXJlIHN1cGVyYmxvayBoZWVmdCBhbmRlcmUgZnVuY3RpZXZsYWdnZW4gZ2V6ZXQgZGFuIGRlIHJlc2VydmVibG9ra2VuIgorCisjOiBlMmZzY2svdW5peC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBpcyAldSBrZWVyIGFhbmdla29wcGVsZCBnZXdlZXN0IHpvbmRlciBjb250cm9sZSIKKworIzogZTJmc2NrL3VuaXguYzozNzYKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIGlzIHNjaGlqbmJhYXIgaGV0IGxhYXRzdCBnZWNvbnRyb2xlZXJkIGluIGRlIHRvZWtvbXN0IgorCisjOiBlMmZzY2svdW5peC5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiBpcyBnZWR1cmVuZGUgJXUgZGFnZW4gbmlldCBnZWNvbnRyb2xlZXJkIgorCisjOiBlMmZzY2svdW5peC5jOjM5MQorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIGdlZHdvbmdlbiBjb250cm9sZS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo0MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHNjaG9vbiwgJXUvJXUgYmVzdGFuZGVuLCAlbGx1LyVsbHUgYmxva2tlbiIKKworIzogZTJmc2NrL3VuaXguYzo0NDMKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChjb250cm9sZSBpcyB1aXRnZXN0ZWxkOyBjb21wdXRlciBsb29wdCBvcCBhY2N1KSIKKworIzogZTJmc2NrL3VuaXguYzo0NDYKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKGNvbnRyb2xlIGJpaiB2b2xnZW5kZSBhYW5rb3BwZWxpbmcpIgorCisjOiBlMmZzY2svdW5peC5jOjQ0OAorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIgKGNvbnRyb2xlIG5hICVsZCBhYW5rb3BwZWxpbmdlbikiCisKKyM6IGUyZnNjay91bml4LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIkZPVVQ6IGthbiAvZGV2L251bGwgbmlldCBvcGVuZW4gKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIk9uZ2VsZGlnZSB2ZXJzaWUgdmFuIHVpdGdlYnJlaWRlIGtlbm1lcmtlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIk9uYmVrZW5kZSB1aXRnZWJyZWlkZSBvcHRpZTogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJTeW50YXhmb3V0IGluICdlMmZzY2snLWNvbmZpZ3VyYXRpZWJlc3RhbmQgKCVzLCByZWdlbCAjJWQpXG4iCisiICAgICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgdmFsaWRlcmVuIHZhbiBiZXN0YW5kc2Rlc3JpcHRvciAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3OTIKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJPbmdlbGRpZ2UgY29tcGxldGVyaW5nc2luZm9ybWF0aWUgdm9vciBiZXN0YW5kc2Rlc2NyaXB0b3IuIgorCisjOiBlMmZzY2svdW5peC5jOjgwNworbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU2xlY2h0cyDDqcOpbiB2YW4gZGUgb3B0aWVzIC1hLCAtcCwgLW4gb2YgLXkgbWFnIHdvcmRlbiBvcGdlZ2V2ZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiRGUgb3B0aWUgJy10JyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIGRvb3IgZGV6ZSB2ZXJzaWUgdmFuIGUyZnNjay5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NTkgZTJmc2NrL3VuaXguYzo5MzEgbWlzYy90dW5lMmZzLmM6ODExIG1pc2MvdHVuZTJmcy5jOjExMDAKKyM6IG1pc2MvdHVuZTJmcy5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS2FuIGFwcGFyYWF0ICclcycgbmlldCB2aW5kZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkxMAorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGUgb3B0aWVzICctbicgZW4gJy1EJyBnYWFuIG5pZXQgc2FtZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkxNQorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGUgb3B0aWVzICctbicgZW4gJy1jJyBnYWFuIG5pZXQgc2FtZW4uIgorCisjOiBlMmZzY2svdW5peC5jOjkyMAorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGUgb3B0aWVzICctbicgZW4gJy1sJyBvZiAnLUwnIGdhYW4gbmlldCBzYW1lbi4iCisKKyM6IGUyZnNjay91bml4LmM6OTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtYyBhbmQgdGhlIC1sLy1MIG9wdGlvbnMgbWF5IG5vdCBiZSBib3RoIHVzZWQgYXQgdGhlIHNhbWUgdGltZS5cbiIKK21zZ3N0ciAiRGUgb3B0aWVzICctYycgZW4gJy1sJyBvZiAnLUwnIGt1bm5lbiBuaWV0IHNhbWVuIGdlYnJ1aWt0IHdvcmRlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisiRTJGU0NLX0pCRF9ERUJVRyAtLSBcIiVzXCIgaXMgZ2VlbiBnZWhlZWwgZ2V0YWxcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiT25nZWxkaWcgbmlldC1udW1lcmllayBhcmd1bWVudCB2YW4gJy0lYyc6IFwiJXNcIlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2Ugd2FpdC4uLlxuIgorbXNnc3RyICJIZXQgTU1QLWludGVydmFsIGlzICV1IHNlY29uZGVuLCBlbiBkZSB0b3RhbGUgd2FjaHR0aWpkIGlzICV1IHNlY29uZGVuLiAgRXZlbiBnZWR1bGQuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTM3IGUyZnNjay91bml4LmM6MTE0MgorbXNnaWQgIndoaWxlIGNoZWNraW5nIE1NUCBibG9jayIKK21zZ3N0ciAidGlqZGVucyBjb250cm9sZXJlbiB2YW4gTU1QLWJsb2siCisKKyM6IGUyZnNjay91bml4LmM6MTE0NCBtaXNjL3R1bmUyZnMuYzoxOTEyCittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisiQWxzIHUgemVrZXIgd2VldCBkYXQgaGV0IGJlc3RhbmRzc3lzdGVlbSBuZXJnZW5zIGdlYnJ1aWt0IHdvcmR0LFxuIgorImdlZWYgZGFuIGRlemUgb3BkcmFjaHQ6ICd0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7YXBwYXJhYXR9J1xuIgorCisjOiBlMmZzY2svdW5peC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIkZvdXQ6IGRlIGV4dDJmcy1iaWJsaW90aGVlayBpcyB0ZSBvdWQhXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgInRpamRlbnMgcHJvZ3JhbW1hLWluaXRpYWxpc2F0aWUiCisKKyM6IGUyZnNjay91bml4LmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICIgICAgZ2VicnVpayBtYWtlbmQgdmFuICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJ2b29yIGludGVyYWN0aWV2ZSByZXBhcmF0aWVzIGlzIGVlbiB0ZXJtaW5hbCB2ZXJlaXN0IgorCisjOiBlMmZzY2svdW5peC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzOiAlcyByZXNlcnZla29waWVibG9ra2VuIHdvcmRlbiBiZWtla2VuLi4uXG4iCisKKyMgR2VicnVpayB2YW4gJy0tJyBpbiBkZXplIGVuIHZvbGdlbmRlIHN0cmluZyBpcyBvcHpldHRlbGlqazsKKyMgw6nDqW4gdmFuIGRlemUgc3RyaW5ncyB3b3JkdCBpbmdldnVsZCB2b29yIGRlIHR3ZWVkZSAlcyBoaWVyYm92ZW4uCisjOiBlMmZzY2svdW5peC5jOjEyOTIKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTdXBlcmJsb2sgaXMgb25nZWxkaWcgLS0iCisKKyM6IGUyZnNjay91bml4LmM6MTI5MworbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJHcm9lcHNiZXNjaHJpanZlcnMgemllbiBlciBzbGVjaHQgdWl0IC0tIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIlczogJXMgdGlqZGVucyBnZWJydWlrIHZhbiBkZSByZXNlcnZla29waWVibG9ra2VuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogZXIgd29yZHQgdGVydWdnZXZhbGxlbiBvcCBoZXQgZWVyc3RlIHN1cGVyYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMzUKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiRGUgYmVzdGFuZHNzeXN0ZWVtdmVyc2llIGlzIGJsaWprYmFhciB0ZSBuaWV1dyB2b29yIGRlemUgdmVyc2llIHZhbiBlMmZzY2suXG4iCisiKE9mIGhldCBzdXBlcmJsb2sgaXMgYmVzY2hhZGlnZC4pXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0MQorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIklzIGRpdCBtaXNzY2hpZW4gZWVuIHBhcnRpdGllIG1ldCBsZW5ndGUgbnVsP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJVIGRpZW50ICVzLXRvZWdhbmcgdG90IGhldCBiZXN0YW5kc3N5dGVlbSB0ZSBoZWJiZW4sIG9mIHJvb3QgdGUgemlqbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJNb2dlbGlqayBlZW4gbmlldC1iZXN0YWFuZCBhcHBhcmFhdCBvZiBlZW4gc3dhcC1hcHBhcmFhdD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzUyCittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIklzIGJlc3RhbmRzc3lzdGVlbSBleGNsdXNpZWYgYWFuZ2Vrb3BwZWxkIG9mIGdlb3BlbmQgZG9vciBlZW4gYW5kZXIgcHJvZ3JhbW1hP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJNb2dlbGlqayBlZW4gbmlldC1iZXN0YWFuZCBhcHBhcmFhdD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJEZSBzY2hpamYgaXMgc2NocmlqZmJldmVpbGlnZC4gIEdlYnJ1aWsgZGUgb3B0aWUgJy1uJyBvbSBlZW5cbiIKKyJhbGxlZW4tbGV6ZW5jb250cm9sZSB2YW4gaGV0IGFwcGFyYWF0IHVpdCB0ZSB2b2VyZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQyMworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiSW5zdGFsbGVlciBlZW4gbmlldXdlcmUgdmVyc2llIHZhbiBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBjb250cm9sZSB2YW4gaGV0IGV4dDMtam91cm5hbCB2YW4gJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ3OAorbXNnaWQgIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtIGNoZWNrLlxuIgorbXNnc3RyICIiCisiV2FhcnNjaHV3aW5nOiBhZnNwZWxlbiB2YW4gam91cm5hbCB3b3JkdCBvdmVyZ2VzbGFnZW5cbiIKKyJvbWRhdCBlZW4gYWxsZWVuLWxlemVuY29udHJvbGUgdWl0Z2V2b2VyZCB3b3JkdC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJLYW4gc3VwZXJibG9rdmxhZ2dlbiB2YW4gJXMgbmlldCB6ZXR0ZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWNvdmVyaW5nIGV4dDMgam91cm5hbCBvZiAlcyIKK21zZ3N0ciAidGlqZGVucyBhZnNwZWxlbiB2YW4gaGV0IGV4dDMtam91cm5hbCB2YW4gJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTUyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSAlcyBoZWVmdCBmdW5jdGllcyBpbmdlc2NoYWtlbGQgZGllIG5pZXQgb25kZXJzdGV1bmQgd29yZGVuOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IFdhYXJzY2h1d2luZzogY29tcHJlc3NpZS1vbmRlcnN0ZXVuaW5nIGlzIG5vZyBleHBlcmltZW50ZWVsLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIiVzOiBEZXplICdlMmZzY2snIGlzIG5pZXQgZ2Vjb21waWxlZXJkIG1ldCAnaHRyZWUnLW9uZGVyc3RldW5pbmcsXG4iCisiICAgIG1hYXIgaGV0IGJlc3RhbmRzc3lzdGVlbSAlcyBiZXZhdCAnaHRyZWUnLW1hcHBlbi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXM6ICVzIHRpamRlbnMgbGV6ZW4gdmFuIHNsZWNodGVibG9ra2VuLWlub2RlXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5NworbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiRGl0IHppZXQgZXIgbmlldCBnb2VkIHVpdCwgbWFhciB3ZSB6dWxsZW4gZG9vcmdhYW4uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCVkIGJsb2Nrcyk6ICIKK21zZ3N0ciAiQWFubWFrZW4gdmFuIGpvdXJuYWwgKCVkIGJsb2trZW4pOiAiCisKKyM6IGUyZnNjay91bml4LmM6MTY0OAorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICIgdm9sdG9vaWQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY0OQorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIioqKiBqb3VybmFsIGlzIG9wbmlldXcgYWFuZ2VtYWFrdCAtLSBoZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIG51IHdlZXIgZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjcyCittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgIkUyZnNjayB3b3JkdCBvcG5pZXV3IGdlc3RhcnQgdmFuYWYgaGV0IGJlZ2luLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3NgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJ0aWpkZW5zIHdpc3NlbiB2YW4gZGUgY29udGV4dCIKKworIzogZTJmc2NrL3VuaXguYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiAnZTJmc2NrJyBpcyBnZWFubnVsZWVyZC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiYWZnZWJyb2tlbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzAwIGUyZnNjay91dGlsLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKipcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKiBCRVNUQU5EU1NZU1RFRU0gSVMgVkVSQU5ERVJEICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcwNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiBIRVJTVEFSVCBVVyBTWVNURUVNICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxMiBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FBUlNDSFVXSU5HOiBiZXN0YW5kc3N5c3RlZW0gYmV2YXQgbm9nIGZvdXRlbiAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAidGlqZGVucyB6ZXR0ZW4gdmFuIGNvbnRyb2xlc29tIHZhbiBibG9rZ3JvZXAiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgImpKeVkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgIm5OIgorCisjOiBlMmZzY2svdXRpbC5jOjIwNQorbXNnaWQgIjx5PiIKK21zZ3N0ciAiPGo+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwNworbXNnaWQgIjxuPiIKK21zZ3N0ciAiPG4+IgorCisjOiBlMmZzY2svdXRpbC5jOjIwOQorbXNnaWQgIiAoeS9uKSIKK21zZ3N0ciAiIChqL24pIgorCisjOiBlMmZzY2svdXRpbC5jOjIyMworbXNnaWQgImNhbmNlbGxlZCFcbiIKK21zZ3N0ciAiZ2Vhbm51bGVlcmQhXG4iCisKKyMgc3JjL21haW4uYzo0MTcgc3JjL21haW4uYzo0MTggc3JjL21haW4uYzo0ODMgc3JjL21haW4uYzo0ODQgc3JjL21haW4uYzo0ODkKKyMgc3JjL21haW4uYzo0OTAgc3JjL21haW4uYzo1NzQKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgImphXG4iCisKKyMgc3JjL21haW4uYzo0MTcgc3JjL21haW4uYzo0MTggc3JjL21haW4uYzo0MzIgc3JjL21haW4uYzo0ODMgc3JjL21haW4uYzo0ODQKKyMgc3JjL21haW4uYzo0ODkgc3JjL21haW4uYzo0OTAgc3JjL21haW4uYzo1NzQKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVlXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBuZWVcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBqYVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiamEiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5lZSIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzKCk6IG9uZ2VsZGlnZSBiaXRrYWFydGJsb2trZW4gdm9vciAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJsZXplbiB2YW4gaW5vZGUtIGVuIGJsb2stYml0a2FhcnRlbiIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBoZXJsZXplbiB2YW4gYml0a2FhcnRlbiB2b29yICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgInNjaHJpanZlbiB2YW4gYmxvay0gZW4gaW5vZGUtYml0a2FhcnRlbiIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidGlqZGVucyBoZXJzY2hyaWp2ZW4gdmFuIGJsb2stIGVuIGlub2RlLWJpdGthYXJ0ZW4gdm9vciAlcyIKKworIzogZTJmc2NrL3V0aWwuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzOiBPTlZFUldBQ0hURSBJTkNPTlNJU1RFTlRJRTsgdm9lciAnZnNjaycgbWV0IGRlIGhhbmQgdWl0XG4iCisiICAgIChkYXQgd2lsIHplZ2dlbjogem9uZGVyIGRlIG9wdGllcyAnLWEnIG9mICctcCcpLlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIkdlYnJ1aWt0IGdlaGV1Z2VuOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJHZWJydWlrdCBnZWhldWdlbjogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgInRpamQ6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidmVybG9wZW4gdGlqZDogJTYuM2ZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0NDcgZTJmc2NrL3V0aWwuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGlub2RlICVsdSBpbiAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInRpamRlbnMgc2NocmlqdmVuIHZhbiBpbm9kZSAlbHUgaW4gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIG51bG1ha2luZ3NidWZmZXIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzIHJ1bm5pbmcuXG4iCittc2dzdHIgIk9OVkVSV0FDSFRFIElOQ09OU0lTVEVOVElFOiBoZXQgYmVzdGFuZHNzeXN0ZWVtIHdvcmR0IGdld2lqemlnZCB0ZXJ3aWpsICdmc2NrJyB1aXRnZXZvZXJkIHdvcmR0LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAidm9sdG9vaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1iIGJsb2tncm9vdHRlXSBbLWkgaW52b2VyYmVzdGFuZF0gWy1vIHVpdHZvZXJiZXN0YW5kXVxuIgorIiAgICAgICAgICBbLWMgYWFudGFsX2Jsb2trZW5fdGVnZWxpamtdIFstZCB2ZXJ0cmFnaW5nc2ZhY3Rvcl90dXNzZW5fbGVlc2FjdGllc11cbiIKKyIgICAgICAgICAgWy1lIG1heGltdW1fYWFudGFsX3NsZWNodGVfYmxva2tlbl0gWy1wIGFhbnRhbF9jb250cm9sZXNdXG4iCisiICAgICAgICAgIFstdCB0ZXN0cGF0cm9vbiBbLXQgdGVzdHBhdHJvb24gWy4uLl1dXSAgWy1mbnN2d11cbiIKKyIgICAgICAgICAgYXBwYXJhYXQgIFtlaW5kYmxvayBbYmVnaW5ibG9rXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBEZSBvcHRpZXMgJy1uJyBlbiAnLXcnIGdhYW4gbmlldCBzYW1lbi5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYlJSBnZWRhYW4sICVzIHZlcmxvcGVuICAoJWQvJWQvJWQgZm91dGVuKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdCB3b3JkdCB1aXRnZXZvZXJkIG1ldCBkaXQgd2lsbGVrZXVyaWdlIHBhdHJvb246ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiVGVzdCB3b3JkdCB1aXRnZXZvZXJkIG1ldCBwYXRyb29uIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJ0aWpkZW5zICdzZWVrJyIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJWcmVlbWRlIHdhYXJkZSAoJWxkKSBiaWogbGVlc3BvZ2luZ1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ2OQorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInRpamRlbnMgbGVlZ21ha2VuIHZhbiBkZSBidWZmZXJzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ4OSBtaXNjL2JhZGJsb2Nrcy5jOjc0OQorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgInRpamRlbnMgdm9vcmJlcmVpZGluZyB2YW4gaGV0IGxhbmdzbG9wZW4gdmFuIGRlIGxpanN0IG1ldCBzbGVjaHRlIGJsb2trZW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJ0aWpkZW5zIHJlc2VydmVyZW4gdmFuIGJ1ZmZlcnMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkNvbnRyb2xlcmVuIHZhbiBibG9ra2VuICVsdSB0b3QgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiWm9la2VuIG5hYXIgc2xlY2h0ZSBibG9ra2VuIGluIGFsbGVlbi1sZXplbi1tb2R1c1xuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiWm9la2VuIG5hYXIgc2xlY2h0ZSBibG9ra2VuIChhbGxlZW4tbGV6ZW4tdGVzdCk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJUZSB2ZWVsIHNsZWNodGUgYmxva2tlbiAtLSBjb250cm9sZSBpcyBhZmdlYnJva2VuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjA5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiBpbiBsZXplbi1lbi1zY2hyaWp2ZW4tbW9kdXNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIlZhbiBibG9rICVsdSB0b3QgJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIkxlemVuIGVuIHZlcmdlbGlqa2VuOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzcxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJab2VrZW4gbmFhciBzbGVjaHRlIGJsb2trZW4gaW4gbmlldC1kZXN0cnVjdGlldmUgbGV6ZW4tZW4tc2NocmlqdmVuLW1vZHVzXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzc3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIlpvZWtlbiBuYWFyIHNsZWNodGUgYmxva2tlbiAobmlldC1kZXN0cnVjdGlldmUgbGV6ZW4tZW4tc2NocmlqdmVuLXRlc3QpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgb250dmFuZ2VuLCBiZXppZyBtZXQgb3BzY2hvbmVuLi4uXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIHRlc3RwYXRyb29uLCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgaXMgYWFuZ2Vrb3BwZWxkOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIiIKKyJtYWFyICdiYWRibG9ja3MnIHdvcmR0IGdlZHdvbmdlbiB1aXRnZXZvZXJkLlxuIgorIkhvb3AgZGF0IC9ldGMvbXRhYiBvbmp1aXN0IGlzLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5NQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAiaGV0IGlzIG5pZXQgdmVpbGlnIG9tICdiYWRibG9ja3MnIHVpdCB0ZSB2b2VyZW4hXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMCBtaXNjL3V0aWwuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyB3b3JkdCBibGlqa2JhYXIgZ2VicnVpa3QgZG9vciBoZXQgc3lzdGVlbTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWFhciAnYmFkYmxvY2tzJyB3b3JkdCBnZWR3b25nZW4gdWl0Z2V2b2VyZC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAib25nZWxkaWdlICVzOiAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGVzdF9wYXR0ZXJuIC0gJXMiCittc2dzdHIgImthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gdm9vciB0ZXN0cGF0cm9vbiAtLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTYzCittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIkluIGFsbGVlbi1sZXplbi1tb2R1cyBtYWcgc2xlY2h0cyDDqcOpbiB0ZXN0cGF0cm9vbiBnZWdldmVuIHdvcmRlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTY5Cittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiSW4gYWxsZWVuLWxlemVuLW1vZHVzIGlzIGVlbiB3aWxsZWtldXJpZyB0ZXN0cGF0cm9vbiBuaWV0IHRvZWdlc3RhYW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICJLYW4gZGUgYXBwYXJhYXRncm9vdHRlIG5pZXQgYmVwYWxlbjsgZ2VlZiBkZSBncm9vdHRlIGhhbmRtYXRpZyBvcC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAidGlqZGVucyBiZXBhbGVuIHZhbiBhcHBhcmFhdGdyb290dGUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5NAorbXNnaWQgImxhc3QgYmxvY2siCittc2dzdHIgImxhYXRzdGUgYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAwCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgImVlcnN0ZSBibG9rIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWx1IgorbXNnc3RyICJvbmdlbGRpZyBiZWdpbmJsb2s6ICVsdSAtLSBtb2V0IGtsZWluZXIgZGFuICVsdSB6aWpuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJ0aWpkZW5zIG9wc3RlbGxlbiB2YW4gbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiBpbiBnZWhldWdlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjc0Cittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAidGlqZGVucyB0b2V2b2VnZW4gYWFuIGxpanN0IHZhbiBzbGVjaHRlIGJsb2trZW4gaW4gZ2VoZXVnZW4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiQ29udHJvbGUgaXMgdm9sdG9vaWQ7ICV1IHNsZWNodGUgYmxva2tlbiBnZXZvbmRlbiAoJWQvJWQvJWQgZm91dGVuKS5cbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiBWRVJTSUVdIEJFU1RBTkQuLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJvbmdlbGRpZ2UgdmVyc2llOiAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidGlqZGVucyBvcHZyYWdlbiB2YW4gZGUgc3RhdHVzIHZhbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gdmxhZ2dlbiBvcCAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiVmxhZ2dlbiB2YW4gJXMgZ2V6ZXQgYWxzICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAidGlqZGVucyB6ZXR0ZW4gdmFuIHZsYWdnZW4gb3AgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaWUgdmFuICVzIGdlemV0IGFscyAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJ0aWpkZW5zIHpldHRlbiB2YW4gdmVyc2llIG9wICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiS2FuIGdlZW4gcGFkdmFyaWFiZWxlIHJlc2VydmVyZW4gaW4gY2hhdHRyX2Rpcl9wcm9jKCkiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzA2Cittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIic9JyBnYWF0IG5pZXQgc2FtZW4gbWV0ICctJyBlbiAnKydcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTQKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiR2VicnVpayAnLXYnLCAnPScsICctJyBvZiAnKycuXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiR2VicnVpazogICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtbWVyPl0gWy1vIGJsb2Nrc2l6ZT08Z2V0YWw+XSBhcHBhcmFhdFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5Cittc2dpZCAiYmxvY2tzIgorbXNnc3RyICJibG9ra2VuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY4Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgImNsdXN0ZXJzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdyb2VwICVsdTogKEJsb2trZW4gIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgIENvbnRyb2xlc29tIGlzIDB4JTA0eCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiAoMHglMDR4IFdFUkQgVkVSV0FDSFQpIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsICV1IG9uZ2VicnVpa3RlIGlub2Rlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXMgc3VwZXJibG9rIG9wICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIlByaW1haXIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlJlc2VydmVrb3BpZSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcm9lcHNiZXNjaHJpanZlcnMgb3AgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBCbG9ra2VuIHZvb3IgZ3JvZXBzYmVzY2hyaWp2ZXJzdGFiZWwgZ2VyZXNlcnZlZXJkIG9wICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiBHcm9lcHNiZXNjaHJpanZlciBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQmxvay1iaXRrYWFydCBvcCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzgKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiwgSW5vZGUtYml0a2FhcnQgb3AgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQyCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBJbm9kZXRhYmVsIG9wICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJXUgdnJpamUgJXMsICV1IHZyaWplIGlub2RlcywgJXUgbWFwcGVuJXMiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAldSB1bnVzZWQgaW5vZGVzXG4iCittc2dzdHIgIiwgJXUgb25nZWJydWlrdGUgaW5vZGVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTgKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgVnJpamUgYmxva2tlbjogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjY5Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIFZyaWplIGlub2RlczogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzAwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInRpamRlbnMgcHJpbnRlbiB2YW4gbGlqc3QgdmFuIHNsZWNodGUgYmxva2tlbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiU2xlY2h0ZSBibG9ra2VuOiAldSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMzMyBtaXNjL3R1bmUyZnMuYzozMDYKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgbGV6ZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiBqb3VybmFsLWlub2RlIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJKb3VybmFsLWZ1bmN0aWVzOiAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM2OAorbXNnaWQgIkpvdXJuYWwgc2l6ZTogICAgICAgICAgICAgIgorbXNnc3RyICJHcm9vdHRlIHZhbiBqb3VybmFsOiAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorbXNnc3RyICIiCisiTGVuZ3RlIHZhbiBqb3VybmFsOiAgICAgICAldVxuIgorIkpvdXJuYWwtc2VxdWVudGllOiAgICAgICAgMHglMDh4XG4iCisiQmVnaW4gdmFuIGpvdXJuYWw6ICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiSm91cm5hbC1mb3V0bW51bW1lcjogICAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDAxIG1pc2MvdHVuZTJmcy5jOjIyMgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBqb3VybmFsLXN1cGVyYmxvayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIkthbiBtYWdpc2NoZSBnZXRhbGxlbiB2YW4gam91cm5hbC1zdXBlcmJsb2sgbmlldCB2aW5kZW4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkJsb2tncm9vdHRlIGluIGpvdXJuYWw6ICAgICAldVxuIgorIkxlbmd0ZSB2YW4gam91cm5hbDogICAgICAgICAldVxuIgorIkVlcnN0ZSBqb3VybmFsLWJsb2s6ICAgICAgICAldVxuIgorIktvcGNvZGUgdmFuIGpvdXJuYWwtcmVla3M6ICAweCUwOHhcbiIKKyJCZWdpbiB2YW4gam91cm5hbDogICAgICAgICAgJXVcbiIKKyJBYW50YWwgam91cm5hbC1nZWJydWlrZXJzOiAgJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHVzZXJzOiAgICAgICAgICAgICVzXG4iCittc2dzdHIgIkpvdXJuYWwtZ2VicnVpa2VyczogICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MiBtaXNjL21rZTJmcy5jOjY2NiBtaXNjL3R1bmUyZnMuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIG9tIG9wdGllcyB0ZSBvbnRsZWRlbiFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBzdXBlcmJsb2sgb3BnZWdldmVuOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWdlIGJsb2tncm9vdHRlIG9wZ2VnZXZlbjogJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9uZ2VsZGlnZSBvcHRpZSBvcGdlZ2V2ZW46ICVzXG4iCisiXG4iCisiVWl0Z2VicmVpZGUgb3B0aWVzIHdvcmRlbiBnZXNjaGVpZGVuIGRvb3Iga29tbWEncztcbiIKKyJodW4gYXJndW1lbnQgd29yZHQgdm9vcmFmZ2VnYWFuIGRvb3IgZWVuICc9Jy10ZWtlbi5cbiIKKyJcbiIKKyJHZWxkaWdlIHVpdGdlYnJlaWRlIG9wdGllcyB6aWpuOlxuIgorIiAgICBzdXBlcmJsb2NrPTxzdXBlcmJsb2tudW1tZXI+XG4iCisiICAgIGJsb2Nrc2l6ZT08Ymxva2dyb290dGU+XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NTQgbWlzYy9ta2UyZnMuYzoxNTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXNcbiIKK21zZ3N0ciAiXHRnZWJydWlrIG1ha2VuZCB2YW4gJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU5MCBtaXNjL2UyaW1hZ2UuYzoxMzI2IG1pc2MvdHVuZTJmcy5jOjE5MjMKKyM6IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWxkaWcgYmVzdGFuZHNzeXN0ZWVtLXN1cGVyYmxvayB2aW5kZW4uXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo2MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAlczogZXJyb3IgcmVhZGluZyBiaXRtYXBzOiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICVzOiBmb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJpdGthYXJ0ZW46ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJzSVFhXSBkZXZpY2UgaW1hZ2VfZmlsZVxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1yc0lRYV0gYXBwYXJhYXQgaW1hZ2ViZXN0YW5kXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiRm91dDogaGVhZGVyLWdyb290dGUgaXMgZ3JvdGVyIGRhbiB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIkthbiBnZWVuIGhlYWRlci1idWZmZXIgcmVzZXJ2ZXJlbi5cbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0Cittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIHNjaHJpanZlbiB2YW4gc3VwZXJibG9rIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODIKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJ0aWpkZW5zIGFhbm1ha2VuIHZhbiBpbm9kZXRhYmVsIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODkKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIGJsb2stYml0a2FhcnQiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJ0aWpkZW5zIHNjaHJpanZlbiB2YW4gaW5vZGUtYml0a2FhcnQiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICJ0aWpkZW5zIGNvbnZlcnRlcmVuIHZhbiBlZW4gcWNvdzItaW1hZ2UgKCVzKSBuYWFyIGVlbiByYXctaW1hZ2ViZXN0YW5kICglcykiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6IGthbiAlcyBuaWV0IG9wZW5lblxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGthbiBnZWVuICdzZWVrJyBkb2VuIG5hYXIgc3VwZXJibG9rXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBmb3V0IHRpamRlbnMgbGV6ZW4gdmFuIHN1cGVyYmxva1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IGRpdCBpcyBnZWVuIGV4dDItYmVzdGFuZHNzeXN0ZWVtXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzogbGFiZWwgaXMgdGUgbGFuZywgd29yZHQgYWZnZWthcHQuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IGthbiBuaWV0IG9wbmlldXcgJ3NlZWsnIGRvZW4gbmFhciBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBmb3V0IHRpamRlbnMgc2NocmlqdmVuIHZhbiBzdXBlcmJsb2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJHZWJydWlrOiAgZTJsYWJlbCBhcHBhcmFhdCBbbmlldXdfbGFiZWxdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiR2VicnVpazogICVzIDx0cmFuc2FjdGllYmVzdGFuZD4gPGJlc3RhbmRzc3lzdGVlbT5cbiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICJMZXplbiB2YW4gYmVzdGFuZHNzeXN0ZWVtZ2VnZXZlbnMgaXMgbWlzbHVrdCBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiTGV6ZW4gdmFuIHRyYW5zYWN0aWVnZWdldmVucyBpcyBtaXNsdWt0OiAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICJhYW5rb3BwZWxpbmdzdGlqZCB2YW4gYmVzdGFuZHNzeXN0ZWVtIGtvbXQgbmlldCBvdmVyZWVuIG1ldCAldSB1aXQgdHJhbnNhY3RpZWJlc3RhbmRcbiIKKworIzogbWlzYy9lMnVuZG8uYzo4OQorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBVVUlEIGRpZG4ndCBtYXRjaCBcbiIKK21zZ3N0ciAiVVVJRCdzIHZhbiBiZXN0YW5kc3N5c3RlZW0gZW4gdWl0IHRyYW5zYWN0aWViZXN0YW5kIGtvbWVuIG5pZXQgb3ZlcmVlblxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiT3BlbmVuIHZhbiB0cmFuc2FjdGllYmVzdGFuZCAlcyBpcyBtaXNsdWt0XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGJlcGFsZW4gb2YgJXMgYWFuZ2Vrb3BwZWxkIGlzLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgIlZvZXIgJ2UydW5kbycgYWxsZWVuIHVpdCBvcCBlZW4gbmlldC1hYW5nZWtvcHBlbGQgYmVzdGFuZHNzeXN0ZWVtLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICJPcGVuZW4gdmFuICVzIGlzIG1pc2x1a3RcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJFZW4gdHJhbnNhY3RpZSBtZXQgZ3Jvb3R0ZSAlemQgaXMgYWZnZXNwZWVsZCBvcCBsb2NhdGllICVsbHUuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJTY2hyaWp2ZW4gaXMgbWlzbHVrdDogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIldBQVJTQ0hVV0lORzoga2FuICVzIG5pZXQgb3BlbmVuOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIldBQVJTQ0hVV0lORzogZm91dGUgaW5kZWxpbmcgb3AgcmVnZWwgJWQgdmFuICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiV0FBUlNDSFVXSU5HOiAvZXRjL2ZzdGFiIGJldmF0IGdlZW4gemVzZGUgdmVsZCAoZWVuIGZzY2stdm9sZ251bW1lcikuXG4iCisiICAgIEVyIHdvcmR0IG51IG9taGVlbmdld2Vya3QsIG1hYXIgdSB6b3UgZGl0IHZlbGQgYmlqXG4iCisiICAgIGRlIGVlcnN0dm9sZ2VuZGUgZ2VsZWdlbmhlaWQgdG9lIGRpZW5lbiB0ZSB2b2VnZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBuaWV0IGdldm9uZGVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiB3YWl0OiBnZWVuIGRvY2h0ZXJwcm9jZXNzZW4gbWVlcj8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiAlcyB2b29yIGFwcGFyYWF0ICVzIHdlcmQgYmXDq2luZGlnZCBtZXQgc2lnbmFhbCAlZC5cbiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiVzICVzOiBkZSBzdGF0dXMgaXMgJXgsIGRpdCB6b3Ugbm9vaXQgdm9vciBtb2dlbiBrb21lbi5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICJBZmdlc2xvdGVuIG1ldCAlcyAoYWZzbHVpdHdhYXJkZSAlZCkuXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBGb3V0ICVkIHRpamRlbnMgdWl0dm9lcmluZyB2YW4gZnNjay4lcyB2b29yICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiw5NmIGdlZW4gw7NmIGFsbGUgYmVzdGFuZHNzc3lzdGVlbXNvb3J0ZW4gYmlqIG9wdGllIC10XG4iCisiZGllbmVuIHZvb3JhZmdlZ2FhbiB0ZSB3b3JkZW4gZG9vciAnbm8nIG9mICchJy5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIkthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gdm9vciBiZXN0YW5kc3N5c3RlZW1zb29ydGVuLlxuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyBudW1iZXJcbiIKK21zZ3N0ciAiIgorIiVzOiBvbmdlbGRpZ2UgcmVnZWwgaW4gL2V0Yy9mc3RhYiB3b3JkdCBvdmVyZ2VzbGFnZW46XG4iCisiemVzZGUgdmVsZCB2YW4gJ2JpbmQnLWFhbmtvcHBlbGluZyBpcyBuaWV0IG51bCAoZnNjay12b2xnbnVtbWVyKVxuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBrYW4gJXMgbmlldCBjb250cm9sZXJlbjogZnNjay4lcyBuaWV0IGdldm9uZGVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIkFsbGUgYmVzdGFuZHNzeXN0ZW1lbiB3b3JkZW4gZ2Vjb250cm9sZWVyZC5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS13YWNodGVuLS0gKHZvbGdudW1tZXIgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiIgorIkdlYnJ1aWs6ICBmc2NrIFstQU1OUFJUVl0gWy1DIFtkZXNjcmlwdG9yXV0gWy10IGJlc3RhbmRzc3lzdGVlbXNvb3J0XVxuIgorIiAgICAgICAgICBbYmVzdGFuZHNzeXN0ZWVtb3B0aWVzXSBbYmVzdGFuZHNzeXN0ZWVtLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiB0ZSB2ZWVsIGFwcGFyYXRlblxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczogdGUgdmVlbCBhcmd1bWVudGVuXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIkdlYnJ1aWs6ICAlcyBbLVJWYWRsdl0gW2Jlc3RhbmQuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiVGlqZGVucyBsZXplbiB2YW4gdmxhZ2dlbiBvcCAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIlRpamRlbnMgbGV6ZW4gdmFuIHZlcnNpZSBvcCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy1jb3VudF1cbiIKK21zZ3N0ciAiIgorIkdlYnJ1aWs6ICAlcyBbLWIgYmxva2dyb290dGVdIFstY3wtbCBiZXN0YW5kc25hYW1dIFstQyBjbHVzdGVyZ3Jvb3R0ZV1cbiIKKyIgICAgICAgICAgWy1nIGJsb2trZW5fcGVyX2dyb2VwXSBbLUcgZmxleGdyb2VwZ3Jvb3R0ZV0gWy1pIGJ5dGVzX3Blcl9pbm9kZV1cbiIKKyIgICAgICAgICAgWy1JIGlub2RlLWdyb290dGVdIFstSiBqb3VybmFsLW9wdGllc10gWy1MIGxhYmVsXSBbLU4gYWFudGFsX2lub2Rlc11cbiIKKyIgICAgICAgICAgWy1tIHBlcmNlbnRhZ2VfZ2VyZXNlcnZlZXJkZV9ibG9ra2VuXSBbLU0gbGFhdHN0ZV9hYW5rb3BwZWxpbmdzcHVudF1cbiIKKyIgICAgICAgICAgWy1vIG5hYW1fdmFuX2Fhbm1ha2VuZGVfYmVzdHVyaW5nc3N5dGVlbV0gWy1PIGZ1bmN0aWVbLC4uLl1dIFstVSBVVUlEXVxuIgorIiAgICAgICAgICBbLXIgYmVzdGFuZHNzeXN0ZWVtdmVyc2llXSBbLXQgYmVzdGFuZHNzeXN0ZWVtc29vcnRdIFstVCBnZWJydWlrc3R5cGVdXG4iCisiICAgICAgICAgIFstRSB1aXRnZWJyZWlkZV9vcHRpZVssLi4uXV0gWy1qbnF2REZLU1ZdICBhcHBhcmFhdCAgW2FhbnRhbF9ibG9ra2VuXVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIlVpdGdldm9lcmRlIG9wZHJhY2h0IGlzOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgInRpamRlbnMgdWl0dm9lcmluZyB2YW4gJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoyMzIKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgInRpamRlbnMgdmVyd2Vya2VuIHZhbiBkZSBnZW1hYWt0ZSBsaWpzdCB2YW4gc2xlY2h0ZSBibG9ra2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiQmxvayAlZCBpbiBoZXQgcHJpbWFpcmUgc3VwZXJibG9rIG9mIGRlIGdyb2Vwc2Jlc2NocmlqdmVycyBpcyBzbGVjaHQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKyJCbG9ra2VuICV1IHRvdCBlbiBtZXQgJXUgbW9ldGVuIGdvZWQgemlqblxuIgorIm9tIGVlbiBiZXN0YW5kc3N5c3RlZW0gYWFuIHRlIGt1bm5lbiBtYWtlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiR2VzdG9wdC4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJXYWFyc2NodXdpbmc6IGRlIHJlc2VydmVrb3BpZSB2YW4gaGV0IHN1cGVyYmxvayBlbiBkZSBncm9lcHNiZXNjaHJpanZlcnMsXG4iCisiYmVnaW5uZW5kIGJpaiBibG9rICV1LCBiZXZhdCBzbGVjaHRlIGJsb2trZW4uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzAzCittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgInRpamRlbnMgaGV0IG1hcmtlcmVuIHZhbiBzbGVjaHRlIGJsb2trZW4gKGFscyB6aWpuZGUgaW4gZ2VicnVpaykiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiU2NocmlqdmVuIHZhbiBpbm9kZXRhYmVsbGVuOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLYW4gJWQgYmxva2tlbiBpbiBpbm9kZXRhYmVsIG5pZXQgc2NocmlqdmVuLCBiZWdpbm5lbmQgYmlqICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzU1IG1pc2MvbWtlMmZzLmM6MjI1NyBtaXNjL21rZTJmcy5jOjI1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAidm9sdG9vaWQgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNjYKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAidGlqZGVucyBhYW5tYWtlbiB2YW4gaG9vZmRtYXAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzczCittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBob29mZC1pbm9kZSIKKworIzogbWlzYy9ta2UyZnMuYzozODUKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJ0aWpkZW5zIHpldHRlbiB2YW4gZWlnZW5hYXIgdmFuIGhvb2ZkLWlub2RlIgorCisjOiBtaXNjL21rZTJmcy5jOjQwMworbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0aWpkZW5zIGFhbm1ha2VuIHZhbiAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MTAKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0aWpkZW5zIHpvZWtlbiB2YW4gL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0aWpkZW5zIHVpdGJyZWlkZW4gdmFuIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ0aWpkZW5zIHpldHRlbiB2YW4gc2xlY2h0ZWJsb2trZW4taW5vZGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIk9udm9sZG9lbmRlIGdlaGV1Z2VuIHRpamRlbnMgd2lzc2VuIHZhbiBzZWN0b3JlbiAlZC0lZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiV2FhcnNjaHV3aW5nOiBrYW4gYmxvayAwIG5pZXQgbGV6ZW46ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzoga2FuIHNlY3RvciAlZCBuaWV0IHdpc3NlbjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDcKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIGluaXRpYWxpc2VyZW4gdmFuIGhldCBqb3VybmFsLXN1cGVyYmxvayIKKworIzogbWlzYy9ta2UyZnMuYzo1MTUKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIk51bG1ha2VuIHZhbiBqb3VybmFsLWFwcGFyYWF0OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgam91cm5hbCBkZXZpY2UgKGJsb2NrICVsbHUsIGNvdW50ICVkKSIKK21zZ3N0ciAidGlqZGVucyBudWxtYWtlbiB2YW4gam91cm5hbC1hcHBhcmFhdCAoYmxvayAlbGx1LCBudW1tZXIgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjU0NQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0aWpkZW5zIHNjaHJpanZlbiB2YW4gam91cm5hbC1zdXBlcmJsb2siCisKKyM6IG1pc2MvbWtlMmZzLmM6NTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJXYWFyc2NodXdpbmc6ICVsbHUgb25nZWJydWlrdGUgYmxva2tlbi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICJCZXN0YW5kc3N5c3RlZW1sYWJlbD0lc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICJTb29ydCBiZXN0dXJpbmdzc3lzdGVlbTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJCbG9rZ3Jvb3R0ZT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQ2x1c3Rlcmdyb290dGU9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJGcmFnbWVudGdyb290dGU9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICInc3RyaWRlJz0ldSBibG9ra2VuLCAnc3RyaXBlJy1icmVlZHRlPSV1IGJsb2trZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBpbm9kZXMsICVsbHUgYmxva2tlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiVsbHUgYmxva2tlbiAoJTIuMmYlJSkgZ2VyZXNlcnZlZXJkIHZvb3Igc3lzdGVlbWJlaGVlclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJGaXJzdCBkYXRhIGJsb2NrPSV1XG4iCittc2dzdHIgIkVlcnN0ZSBnZWdldmVuc2Jsb2s9JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiSG9vZmRtYXAtZWlnZW5hYXI9JXU6JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiTWF4aW11bSBhYW50YWwgYmVzdGFuZHNzeXN0ZWVtYmxva2tlbj0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGJsb2tncm9lcGVuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2tncm9lcFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxva2tlbiBwZXIgZ3JvZXAsICV1IGNsdXN0ZXJzIHBlciBncm9lcFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2trZW4gcGVyIGdyb2VwLCAldSBmcmFnbWVudGVuIHBlciBncm9lcFxuIgorCisjIHNyYy9tYWluLmM6NDI1CisjOiBtaXNjL21rZTJmcy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGlub2RlcyBwZXIgZ3JvZXBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6ICIKK21zZ3N0ciAiU3VwZXJibG9rcmVzZXJ2ZWtvcGllw6tuIG9wZ2VzbGFnZW4gaW4gYmxva2tlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjY5MSBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBhcmd1bWVudCB2YW4gJ3N0cmlkZSc6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgYXJndW1lbnQgdmFuICdzdHJpcGVfd2lkdGgnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc0MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IHZhbiAncmVzaXplJzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIkRlIG1heGltdW0gZ3Jvb3R0ZSBtb2V0IGdyb3RlciB6aWpuIGRhbiBkZSBodWlkaWdlIGJlc3RhbmRzc3lzdGVlbWdyb290dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6Nzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiTGl2ZSB2ZXJncm90ZW4gb2YgdmVya2xlaW5lbiBpcyBuaWV0IG1vZ2VsaWprIG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gdmFuIHZlcnNpZSAwLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgwMSBtaXNjL21rZTJmcy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiT25nZWxkaWdlIGhvb2ZkbWFwLWVpZ2VuYWFyOiAnJXMnXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgYXJndW1lbnQgdmFuICdxdW90YXR5cGUnOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2Ugb3B0aWUgb3BnZWdldmVuOiAlc1xuIgorIlxuIgorIlVpdGdlYnJlaWRlIG9wdGllcyB3b3JkZW4gZ2VzY2hlaWRlbiBkb29yIGtvbW1hJ3M7XG4iCisiaHVuIGFyZ3VtZW50IHdvcmR0IHZvb3JhZmdlZ2FhbiBkb29yIGVlbiAnPSctdGVrZW4uXG4iCisiXG4iCisiR2VsZGlnZSB1aXRnZWJyZWlkZSBvcHRpZXMgemlqbjpcbiIKKyIgICAgc3RyaWRlPTxhYW50YWwgYmxva2tlbiBkYXQgc2FtZW4gcGVyIFJBSUQtc2NoaWpmIHdvcmR0IGdlbGV6ZW4vZ2VzY2hyZXZlbj5cbiIKKyIgICAgc3RyaXBlX3dpZHRoPTxhYW50YWwgYmxva2tlbiBwZXIgc3RyaXBlPiAobWVlc3RhbCBzdHJpZGUgw5cgYWFudGFsIHNjaGlqdmVuKVxuIgorIiAgICByZXNpemU9PG1heGltdW0gZ3Jvb3R0ZSB2YW4gYmVzdGFuZHNzeXN0ZWVtIGluIGJsb2trZW4+XG4iCisiICAgIGxhenlfaXRhYmxlX2luaXQ9PDAgdm9vciB1aXRzY2hha2VsZW4sIDEgdm9vciBpbnNjaGFrZWxlbj5cbiIKKyIgICAgbGF6eV9qb3VybmFsX2luaXQ9PDAgdm9vciB1aXRzY2hha2VsZW4sIDEgdm9vciBpbnNjaGFrZWxlbj5cbiIKKyIgICAgcm9vdF91aWQ9PFVJRCB2YW4gaG9vZmRtYXA+XG4iCisiICAgIHJvb3RfZ2lkPTxHSUQgdmFuIGhvb2ZkbWFwPlxuIgorIiAgICB0ZXN0X2ZzXG4iCisiICAgIGRpc2NhcmRcbiIKKyIgICAgbm9kaXNjYXJkXG4iCisiICAgIHF1b3RhdHlwZT08dXNyIE9GIGdycD5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldhYXJzY2h1d2luZzogJ3N0cmlwZSctYnJlZWR0ZSAldSBpcyBnZWVuIGV2ZW4gdmVlbHZvdWQgdmFuICdzdHJpZGUnICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRheGZvdXQgaW4gbWtlMmZzLWNvbmZpZ3VyYXRpZWJlc3RhbmQgKCVzLCByZWdlbCAjJWQpXG4iCisiICAgICVzXG4iCisKKyMgRGl0IGdhYXQgb3ZlciBoZXQgYXJndW1lbnQgdmFuIG9wdGllIC1PLgorIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZ2UgYmVzdGFuZHNzeXN0ZWVtZnVuY3RpZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MzIgbWlzYy90dW5lMmZzLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWdlIGFhbmtvcHBlbGluZ3NvcHRpZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVdyBta2UyZnMuY29uZiBkZWZpbmllZXJ0IGdlZW4gYmVzdGFuZHNzeXN0ZWVtdHlwZSAlcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlUgZGllbnQgd2FhcnNjaGlqbmxpamsgZWVuIG5pZXV3ZXIgbWtlMmZzLmNvbmYtYmVzdGFuZCB0ZSBpbnN0YWxsZXJlbi5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIkdlc3RvcHQuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FhcnNjaHV3aW5nOiBiZXN0YW5kc3N5c3RlZW10eXBlICVzIGlzIG5pZXQgZ2VkZWZpbmllZXJkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBQQVRILlxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIHZvb3IgbmlldXdlIFBBVEguXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiSW5pdGlhbGlzZXJlbiB2YW4gcHJvZmlsZSBpcyBtaXNsdWt0IChmb3V0OiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgIm9uZ2VsZGlnZSBibG9rZ3Jvb3R0ZTogJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIldhYXJzY2h1d2luZzogYmxva2dyb290dGUgJWQgaXMgb3AgZGUgbWVlc3RlIHN5c3RlbWVuIG5pZXQgYnJ1aWtiYWFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjbHVzdGVyIHNpemUgLSAlcyIKK21zZ3N0ciAib25nZWxkaWdlIGNsdXN0ZXJncm9vdHRlOiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzg3Cittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICInb3B0aWUgJy1SJyBpcyB2ZXJvdWRlcmQ7IGdlYnJ1aWsgJy1FJyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzk5Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIk9uZ2VsZGlnIGFhbnRhbCBibG9ra2VuIHBlciBncm9lcCIKKworIzogbWlzYy9ta2UyZnMuYzoxNDA0Cittc2dpZCAiYmxvY2tzIHBlciBncm91cCBtdXN0IGJlIG11bHRpcGxlIG9mIDgiCittc2dzdHIgImFyZ3VtZW50IHZhbiAtZyAoYmxva2tlbiBwZXIgZ3JvZXApIGlzIGdlZW4gdmVlbHZvdWQgdmFuIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxMgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk9uZ2VsZGlnIGdldGFsIHZvb3IgbWV0YWdyb2VwZ3Jvb3R0ZSIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE4Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJNZXRhZ3JvZXBncm9vdHRlIG1vZXQgZWVuIG1hY2h0IHZhbiAyIHppam4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAib25nZWxkaWdlIGlub2RldmVyaG91ZGluZyAlcyAobWluICVkIC8gbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJvbmdlbGRpZ2UgZ3Jvb3R0ZSB2YW4gaW5vZGU6ICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FIG5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKyJXYWFyc2NodXdpbmc6IG9wdGllICctSycgaXMgdmVyb3VkZXJkIGVuIHpvdSB1IG5pZXQgbWVlciBtb2V0ZW4gZ2VicnVpa2VuO1xuIgorImdlYnJ1aWsgaW4gcGxhYXRzIGRhYXJ2YW4gZGUgdWl0Z2VicmVpZGUgb3B0aWUgJy1FIG5vZGlzY2FyZCcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAib252b2xkb2VuZGUgZ2VoZXVnZW4gaW4gYmFkX2Jsb2Nrc19maWxlbmFtZSgpIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICJvbmdlbGRpZyBwZXJjZW50YWdlIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbjogJXMiCisKKyMgbGliL3ByYW5nZS5jOjI5OSBsaWIvcHJhbmdlLmM6MzE2CisjOiBtaXNjL21rZTJmcy5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAib25nZWxkaWcgYWFudGFsIGlub2RlczogJXMiCisKKyMgbGliL3ByYW5nZS5jOjI5OSBsaWIvcHJhbmdlLmM6MzE2CisjOiBtaXNjL21rZTJmcy5jOjE1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgIm9uZ2VsZGlnIHZlcnNpZW51bW1lcjogJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUxOQorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJPcHRpZSAnLXQnIG1hZyBzbGVjaHRzIMOpw6luIGtlZXIgZ2VnZXZlbiB3b3JkZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJPcHRpZSAnLVQnIG1hZyBzbGVjaHRzIMOpw6luIGtlZXIgZ2VnZXZlbiB3b3JkZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MCBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAidGlqZGVucyBvcGVuZW4gdmFuIGpvdXJuYWwtYXBwYXJhYXQgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJCbG9rZ3Jvb3R0ZSAlZCB2YW4gam91cm5hbC1hcHBhcmFhdCBpcyBrbGVpbmVyIGRhbiBtaW5pbXVtIGJsb2tncm9vdHRlICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIkJsb2tncm9vdHRlIHZhbiBoZXQgam91cm5hbC1hcHBhcmFhdCB3b3JkdCBnZWJydWlrdDogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgIm9uZ2VsZGlnZSBibG9ra2VuICclcycgb3AgYXBwYXJhYXQgJyVzJyIKKworIzogbWlzYy9ta2UyZnMuYzoxNjEzCittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAiYmVzdGFuZHNzeXN0ZWVtIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjYgcmVzaXplL21haW4uYzozNjcKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAidGlqZGVucyBiZXBhbGVuIHZhbiBncm9vdHRlIHZhbiBiZXN0YW5kc3N5c3RlZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzMgorbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbVxuIgorbXNnc3RyICIiCisiS2FuIGRlIGdyb290dGUgdmFuIGhldCBhcHBhcmFhdCBuaWV0IGJlcGFsZW47XG4iCisidSBkaWVudCB6ZWxmIGRlIGdyb290dGUgdmFuIGhldCBiZXN0YW5kc3N5c3RlZW0gYWFuIHRlIGdldmVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkFwcGFyYWF0Z3Jvb3R0ZSB3b3JkdCBnZXJhcHBvcnRlZXJkIGFscyBudWwuICBEaXQgYmV0ZWtlbnQgZGF0IGVyIGVlblxuIgorIiAgICBvbmdlbGRpZ2UgcGFydGl0aWUgaXMgb3BnZWdldmVuLCBvZiBkYXQgZGUgcGFydGl0aWV0YWJlbCBuaWV0IG9wbmlldXdcbiIKKyIgICAgZ2VsZXplbiBpcyBuYSBnZWJydWlrIHZhbiBlZW4gcGFydGl0aW9uZXJpbmdzcHJvZ3JhbW1hLCB3ZWdlbnMgaGV0XG4iCisiICAgIGluLWdlYnJ1aWstemlqbiB2YW4gZWVuIGdld2lqemlnZGUgcGFydGl0aWUuICBNb2dlbGlqayBkaWVudCB1IHV3XG4iCisiICAgIGNvbXB1dGVyIHRlIGhlcnN0YXJ0ZW4gb20gZGUganVpc3RlIHBhcnRpdGlldGFiZWwgdGUgdmVya3Jpamdlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjU2Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSBpcyBncm90ZXIgZGFuIGRlIHNjaGlqbmJhcmUgYXBwYXJhYXRncm9vdHRlLiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIlZlcndlcmtlbiB2YW4gbGlqc3QgbWV0IGJlc3RhbmRzc3lzdGVlbXNvb3J0ZW4gaXMgbWlzbHVrdFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKyIlczogRGUgZ3Jvb3R0ZSAoMHglbGx4IGJsb2trZW4pIHZhbiBhcHBhcmFhdCAlcyBrYW4gbmlldCB1aXRnZWRydWt0XG4iCisiICAgIHdvcmRlbiBpbiAzMiBiaXRzIGJpaiBlZW4gYmxva2dyb290dGUgdmFuICVkLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NDYKK21zZ2lkICJmc190eXBlcyBmb3IgbWtlMmZzLmNvbmYgcmVzb2x1dGlvbjogIgorbXNnc3RyICJMaWpzdCBtZXQgYmVzdGFuZHNzeXN0ZWVtc29vcnRlbiB2b29yIG1rZTJmcy5jb25mOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc1MworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkV4dHJhIGZ1bmN0aWVzIHdvcmRlbiBuaWV0IG9uZGVyc3RldW5kIG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gdmFuIHZlcnNpZSAwLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlNjaGFhcnNlIHN1cGVyYmxva2tlbiB6aWpuIG5pZXQgbW9nZWxpamsgb3AgZWVuIGJlc3RhbmRzc3lzdGVlbSB2YW4gdmVyc2llIDAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJFZW4gam91cm5hbCBpcyBuaWV0IG1vZ2VsaWprIG9wIGVlbiBiZXN0YW5kc3N5c3RlZW0gdmFuIHZlcnNpZSAwLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAib25nZWxkaWcgcGVyY2VudGFnZSBnZXJlc2VydmVlcmRlIGJsb2trZW46ICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiRGUgZnVuY3RpZXMgJ3Jlc2l6ZV9pbm9kZScgZW4gJ21ldGFfYmcnIGdhYW4gbmlldCBzYW1lbi5cbiIKKyJaZSBrdW5uZW4gbmlldCBiZWlkZSBpbmdlc2NoYWtlbGQgd29yZGVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJ0aWpkZW5zIGJlcGFsZW4gdmFuIGRlIGhhcmR3YXJlLXNlY3Rvcmdyb290dGUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgyNQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgcGh5c2ljYWwgc2VjdG9yIHNpemUiCittc2dzdHIgInRpamRlbnMgYmVwYWxlbiB2YW4gZGUgZnlzaWVrZSBzZWN0b3Jncm9vdHRlIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NTgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAidGlqZGVucyBpbnN0ZWxsZW4gdmFuIGRlIGJsb2tncm9vdHRlOyB0ZSBrbGVpbiB2b29yIGFwcGFyYWF0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGRlIGdlZ2V2ZW4gYmxva2dyb290dGUgJWQgaXMga2xlaW5lciBkYW4gZGUgZnlzaWVrZSBzZWN0b3Jncm9vdHRlICVkIHZhbiBoZXQgYXBwYXJhYXRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODgxCittc2dpZCAiVGhlIGNsdXN0ZXIgc2l6ZSBtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgYmxvY2sgc2l6ZS5cbiIKK21zZ3N0ciAiRGUgY2x1c3Rlcmdyb290dGUgbWFnIG5pZXQga2xlaW5lciB6aWpuIGRhbiBkZSBibG9rZ3Jvb3R0ZS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODg3Cittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiaGV0IG9wZ2V2ZW4gdmFuIGVlbiBjbHVzdGVyZ3Jvb3R0ZSB2ZXJlaXN0IGRlICdiaWdhbGxvYyctZnVuY3RpZSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICJXYWFyc2NodXdpbmc6IGthbiBsb2dpc2NoZSBzY2hpamZvcGJvdXcgdmFuICVzIG5pZXQgdmVya3Jpamdlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJVaXRsaWpuaW5nIHZhbiAlcyBpcyAlbHUgYnl0ZXMgdmVyc2Nob3Zlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorIkRpdCBrYW4gemVlciBzbGVjaHRlIHByZXN0YXRpZXMgdG90IGdldm9sZyBoZWJiZW47XG4iCisiKGhlcilwYXJ0aXRpb25lcmluZyB3b3JkdCBhYW5iZXZvbGVuLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICJCbG9ra2VuIHZhbiAlZCBieXRlcyB6aWpuIHRlIGdyb290IHZvb3IgZGl0IHN5c3RlZW0gKG1heCAlZCkuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorIldhYXJzY2h1d2luZzogYmxva2tlbiB2YW4gJWQgYnl0ZXMgemlqbiB0ZSBncm9vdCB2b29yIGRpdCBzeXN0ZWVtLFxuIgorImhldCBtYXhpbXVtIGlzICVkIC0tIG1hYXIgJ21rZTJmcycgd29yZHQgZ2Vkd29uZ2VuIHVpdGdldm9lcmQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk2OAorbXNnaWQgIkNhbid0IHN1cHBvcnQgYmlnYWxsb2MgZmVhdHVyZSB3aXRob3V0IGV4dGVudHMgZmVhdHVyZSIKK21zZ3N0ciAiS2FuICdiaWdhbGxvYyctZnVuY3RpZSBuaWV0IG9uZGVyc3RldW5lbiB6b25kZXIgJ2V4dGVudHMnLWZ1bmN0aWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIldhYXJzY2h1d2luZzogZGUgJ2JpZ2FsbG9jJy1mdW5jdGllIGlzIG5vZyBpbiBvbnR3aWtrZWxpbmcuXG4iCisiWmllIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIHZvb3IgbWVlciBpbmZvcm1hdGllLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5ODIgbWlzYy90dW5lMmZzLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiV2FhcnNjaHV3aW5nOiBkZSAncXVvdGEnLWZ1bmN0aWUgaXMgbm9nIGluIG9udHdpa2tlbGluZy5cbiIKKyJaaWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgdm9vciBtZWVyIGluZm9ybWF0aWUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICJoZXQgcmVzZXJ2ZXJlbiB2YW4gYmxva2tlbiB2b29yIGJlc3RhbmRzc3lzdGVlbXZlcmdyb3Rpbmcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCBvcCBlZW4gbmlldC1zY2hhYXJzIGJlc3RhbmRzc3lzdGVlbSIKKworIzogbWlzYy9ta2UyZnMuYzoyMDAyCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgInRlbGxlciB2YW4gYmxva2tlbi1wZXItZ3JvZXAgbGlndCBidWl0ZW4gaGV0IHRvZWdlc3RhbmUgYmVyZWlrIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMjYKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiRGUgZnVuY3RpZSAnZmxleF9iZycgaXMgbmlldCBpbmdlc2NoYWtlbGQsIGR1cyBkZSBtZXRhZ3JvZXBncm9vdHRlIG1hZyBuaWV0IG9wZ2VnZXZlbiB3b3JkZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJvbmdlbGRpZ2UgaW5vZGUtZ3Jvb3R0ZSAlZCAobWluICVkIC8gbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAidGUgdmVlbCBpbm9kZXMgKCVsbHUpIC0tIGlub2RldmVyaG91ZGluZyB2ZXJob2dlbj8iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA2MworIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgInRlIHZlZWwgaW5vZGVzICglbGx1KSAtLSBnZWVmIG1pbmRlciBkYW4gMl4zMiBvcCIKKworIzogbWlzYy9ta2UyZnMuYzoyMDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKyJEZSBpbm9kZS1ydWltdGUgKGlub2RlLWdyb290dGUgJXUgKiBhYW50YWxfaW5vZGVzICV1KVxuIgorImlzIHRlIGdyb290IHZvb3IgZWVuIGJlc3RhbmRzc3lzdGVlbSBtZXQgJWxsdSBibG9ra2VuIC0tXG4iCisiICAgZ2VlZiBlZW4gaG9nZXJlIGJ5dGVzLXBlci1pbm9kZXZlcmhvdWRpbmcgb3AgKC1pKSxcbiIKKyIgICBvZiB2ZXJrbGVpbiBoZXQgYWFudGFsIGlub2RlcyAoLU4pLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJFZW4gYmVzdGFhbmQgYmVzdGFuZHNzeXN0ZWVtIHdvcmR0IG92ZXJzY2hyZXZlbjtcbiIKKyJkaXQga2FuIG9uZ2VkYWFuIGdlbWFha3Qgd29yZGVuIG1ldCBkZSBvcGRyYWNodDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAidGlqZGVucyBhYW5tYWtlbiB2YW4gJ3VuZG8nLWJlc3RhbmRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjM2Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIlZlcndlcnBlbiB2YW4gYmxva2tlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgImlzIG1pc2x1a3QgLSAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM2MAorbXNnaWQgIndoaWxlIHNldHRpbmcgdXAgc3VwZXJibG9jayIKK21zZ3N0ciAidGlqZGVucyBhYW5tYWtlbiB2YW4gc3VwZXJibG9rIgorCisjOiBtaXNjL21rZTJmcy5jOjIzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzICAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIKK21zZ3N0ciAiVmVyd2VycGluZyBpcyBnZWx1a3QgZW4gemFsIG51bGxlbiByZXRvdXJuZXJlbiAtLSB3aXNzZW4gdmFuIGlub2RlLXRhYmVsIHdvcmR0IG92ZXJnZXNsYWdlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICJvbmJla2VuZCBiZXN0dXJpbmdzc3lzdGVlbTogJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJSZXNlcnZlcmVuIHZhbiBncm9lcHN0YWJlbGxlbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgInRpamRlbnMgcmVzZXJ2ZXJlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtdGFiZWxsZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUxNworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyIgICAgdGlqZGVucyBjb252ZXJ0ZXJlbiB2YW4gc3ViY2x1c3Rlci1iaXRrYWFydCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAidGlqZGVucyBudWxtYWtlbiB2YW4gYmxvayAlbGx1IGFhbiBoZXQgZWluZCB2YW4gaGV0IGJlc3RhbmRzc3lzdGVlbSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTczCittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAidGlqZGVucyByZXNlcnZlcmVuIHZhbiB1aXRicmVpZGluZ3NibG9ra2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODQgbWlzYy90dW5lMmZzLmM6NjQ1Cittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAiam91cm5hbCIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJUb2V2b2VnZW4gdmFuIGpvdXJuYWwgYWFuIGFwcGFyYWF0ICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisiICAgIHRpamRlbnMgdG9ldm9lZ2VuIHZhbiBqb3VybmFsIGFhbiBhcHBhcmFhdCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjA4IG1pc2MvbWtlMmZzLmM6MjY0MCBtaXNjL3R1bmUyZnMuYzo2NzQgbWlzYy90dW5lMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAidm9sdG9vaWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIkFhbm1ha2VuIHZhbiBqb3VybmFsIHdvcmR0IG92ZXJnZXNsYWdlbiB3ZWdlbnMgb3B0aWUgJy1TJy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiQWFubWFrZW4gdmFuIGpvdXJuYWwgKCV1IGJsb2trZW4pOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzNgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIiAgICB0aWpkZW5zIGFhbm1ha2VuIHZhbiBqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NDcgbWlzYy90dW5lMmZzLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRm91dCB0aWpkZW5zIGluc2NoYWtlbGVuIHZhbiBNTVAgKGJlc2NoZXJtaW5nIHRlZ2VuIG1lZXJ2b3VkaWdlIGFhbmtvcHBlbGluZ2VuKS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorIkJlc2NoZXJtaW5nIHRlZ2VuIG1lZXJ2b3VkaWdlIGFhbmtvcHBlbGluZ2VuIGlzIGluZ2VzY2hha2VsZFxuIgorIm1ldCBlZW4gYmlqd2Vya2luZ3NpbnRlcnZhbCB2YW4gJWQgc2Vjb25kZW4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiU2NocmlqdmVuIHZhbiBzdXBlcmJsb2trZW4gZW4gYmVzdGFuZHNzeXN0ZWVtLW1ldGFnZWdldmVuczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIldhYXJzY2h1d2luZzogcHJvYmxlbWVuIHRpamRlbnMgc2NocmlqdmVuIHZhbiBzdXBlcmJsb2trZW4uIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorInZvbHRvb2lkXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJHZWJydWlrOiAgbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICAlcyBkZXZpY2UuLi5cbiIKKyJcbiIKKyJQcmludHMgb3V0IHRoZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gZm9yIGVhY2ggZ2l2ZW4gZGV2aWNlLlxuIgorIkZvciBleGFtcGxlOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorbXNnc3RyICIiCisiR2VicnVpazogICVzIGFwcGFyYWF0Li4uXG4iCisiXG4iCisiVG9vbnQgZGUgcGFydGl0aWUtaW5mb3JtYXRpZSB2b29yIGVsayBnZWdldmVuIGFwcGFyYWF0LlxuIgorIlxuIgorIlZvb3JiZWVsZDogICVzIC9kZXYvaGRhXG4iCisiXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIkthbiAlcyBuaWV0IG9wZW5lbjogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiS2FuIGdlb21ldHJpZSB2YW4gJXMgbmlldCBiZXBhbGVuOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIkthbiBncm9vdHRlIHZhbiAlcyBuaWV0IGJlcGFsZW46ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBrb3A9JTNkIHNlYz0lM2QgY2lsPSU0ZCAgIGJlZ2luPSU4ZCBncm9vdHRlPSU4bHUgZWluZGU9JThkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNworbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICJDb250cm9sZWVyIGhldCBiZXN0YW5kc3N5c3RlZW0gbWV0ICdlMmZzY2snLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkdlYnJ1aWs6ICAlcyBbLWMgbWF4aW11bV9hYW50YWxfYWFua29wcGVsaW5nZW5dIFstQyBhYW5rb3BwZWxpbmdlbnRhbF1cbiIKKyIgICAgICAgICAgWy1lIGdlZHJhZ19iaWpfZm91dGVuXSBbLUUgdWl0Z2VicmVpZGVfb3B0aWVbLC4uLl1dIFstZl0gWy1nIGdyb2VwXVxuIgorIiAgICAgICAgICBbLWkgaW50ZXJ2YWxbZHx3fG1dXSBbLWpdIFstSiBqb3VybmFsLW9wdGllc10gWy1sXSBbLUwgbGFiZWxdXG4iCisiICAgICAgICAgIFstbSBwZXJjZW50YWdlX2dlcmVzZXJ2ZWVyZGVfYmxva2tlbl0gWy1NIGxhYXRzdGVfYWFua29wcGVsaW5nc3B1bnRdXG4iCisiICAgICAgICAgIFstbyBbXl1hYW5rb3BwZWxpbmdzb3B0aWVzWywuLi5dXSBbLU8gW15dZnVuY3RpZVssLi4uXV1cbiIKKyIgICAgICAgICAgWy1wIE1NUC1iaWp3ZXJraW5nc2ludGVydmFsXSBbLXIgYWFudGFsX2dlcmVzZXJ2ZWVyZGVfYmxva2tlbl1cbiIKKyIgICAgICAgICAgWy1UIHRpamRzdGlwX3Zhbl9sYWF0c3RlX2NvbnRyb2xlXSBbLXUgZ2VicnVpa2VyXSBbLVUgVVVJRF1cbiIKKyIgICAgICAgICAgWy1JIG5pZXV3ZV9pbm9kZS1ncm9vdHRlXSAgYXBwYXJhYXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAidGlqZGVucyBvcGVuZW4gdmFuIGV4dGVybiBqb3VybmFsIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzOiBpcyBnZWVuIGpvdXJuYWwtYXBwYXJhYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyOQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQhXG4iCittc2dzdHIgIkdlZW4gam91cm5hbC1zdXBlcmJsb2sgZ2V2b25kZW4hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiVVVJRCB2YW4gYmVzdGFuZHNzeXN0ZWVtIG5pZXQgZ2V2b25kZW4gb3Agam91cm5hbC1hcHBhcmFhdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJLYW4gam91cm5hbC1hcHBhcmFhdCBuaWV0IGxva2FsaXNlcmVuLiAgSGV0IGlzIE5JRVQgdmVyd2lqZGVyZC5cbiIKKyJHZWJydWlrIG9wdGllICctZicgb20gaGV0IG9udGJyZWtlbmRlIGpvdXJuYWwtYXBwYXJhYXQgdGUgdmVyd2lqZGVyZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2OQorbXNnaWQgIkpvdXJuYWwgcmVtb3ZlZFxuIgorbXNnc3RyICJKb3VybmFsIGlzIHZlcndpamRlcmQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMworbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gYml0a2FhcnRlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MzIxCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyB3aXNzZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMzMgorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAidGlqZGVucyBzY2hyaWp2ZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKEVuIGhlcnN0YXJ0IGRhYXJuYSB1dyBjb21wdXRlciEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJIZXQgdWl0c2NoYWtlbGVuIHZhbiBiZXN0YW5kc3N5c3RlZW1mdW5jdGllICclcycgaXMgbmlldCBtb2dlbGlqay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiSGV0IGluc2NoYWtlbGVuIHZhbiBiZXN0YW5kc3N5c3RlZW1mdW5jdGllICclcycgaXMgbmlldCBtb2dlbGlqay5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDE2Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkRlIGpvdXJuYWwtdmxhZyBtYWcgYWxsZWVuIGdld2lzdCB3b3JkZW4gd2FubmVlciBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisib250a29wcGVsZCBpcyBvZiBhYW5nZWtvcHBlbGQgYWxzIGFsbGVlbi1sZXplbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDI0Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisiRGUgcmVkZGluZ3N2bGFnIHZhbiBoZXQgam91cm5hbCBpcyBnZXpldC5cbiIKKyJWb2VyIGVlcnN0ICdlMmZzY2snIHVpdCwgdm9vcmRhdCB1IGRlIGpvdXJuYWwtdmxhZyB3aXN0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NDMKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW4ndFxuIgorImJlIHNldCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yXG4iCisicmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiQmVzY2hlcm1pbmcgdGVnZW4gbWVlcnZvdWRpZ2UgYWFua29wcGVsaW5nZW4ga2FuXG4iCisibmlldCBpbmdlc2NoYWtlbGQgd29yZGVuIGFscyBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisiYWFuZ2Vrb3BwZWxkIG9mIGFsbGVlbi1sZXplbiBpcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKyJCZXNjaGVybWluZyB0ZWdlbiBtZWVydm91ZGlnZSBhYW5rb3BwZWxpbmdlbiBpcyBpbmdlc2NoYWtlbGRcbiIKKyJtZXQgZWVuIGJpandlcmtpbmdzaW50ZXJ2YWwgdmFuICVkIHNlY29uZGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkJlc2NoZXJtaW5nIHRlZ2VuIG1lZXJ2b3VkaWdlIGFhbmtvcHBlbGluZ2VuIGthblxuIgorIm5pZXQgdWl0Z2VzY2hha2VsZCB3b3JkZW4gYWxzIGhldCBiZXN0YW5kc3N5c3RlZW1cbiIKKyJhbGxlZW4tbGV6ZW4gaXMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3OAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGV6ZW4gdmFuIGJpdGthYXJ0ZW5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICJNYWdpc2NoIGdldGFsIGluIE1NUC1ibG9rIGtsb3B0IG5pZXQgLS0gdmVyd2FjaHQ6ICV4LCBnZXZvbmRlbjogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJ0aWpkZW5zIGxlemVuIHZhbiBNTVAtYmxvayIKKworIzogbWlzYy90dW5lMmZzLmM6NTI0Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiSGV0IHVpdHNjaGFrZWxlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtZnVuY3RpZSAnZmxleF9iZycgem91IGhldFxuIgorImJlc3RhbmRzc3lzdGVlbSBpbmNvbnNpc3RlbnQgbWFrZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRGUgJ2h1Z2VfZmlsZSctZnVuY3RpZXZsYWcgbWFnIGFsbGVlbiBnZXdpc3Qgd29yZGVuIHdhbm5lZXIgaGV0XG4iCisiYmVzdGFuZHNzeXN0ZWVtIG9udGtvcHBlbGQgaXMgb2YgYWFuZ2Vrb3BwZWxkIGFscyBhbGxlZW4tbGV6ZW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5NQorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJXYWFyc2NodXdpbmc6ICdecXVvdGEnLW9wdGllIG92ZXJzdGlqZ3QgJy1RJy1hcmd1bWVudGVuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkhldCBiZXN0YW5kc3N5c3RlZW0gaGVlZnQgYWwgZWVuIGpvdXJuYWwuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIgICAgdGlqZGVucyBvcGVuZW4gdmFuIGpvdXJuYWwgb3AgJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIkFhbm1ha2VuIHZhbiBqb3VybmFsIG9wIGFwcGFyYWF0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJ0aWpkZW5zIHRvZXZvZWdlbiB2YW4gYmVzdGFuZHNzeXN0ZWVtIGFhbiBqb3VybmFsIG9wICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NzYKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIkFhbm1ha2VuIHZhbiBqb3VybmFsLWlub2RlOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY4NQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiICAgIHRpamRlbnMgYWFubWFrZW4gdmFuIGpvdXJuYWwtaW5vZGUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJLYW4gZ2VlbiBnZWhldWdlbiByZXNlcnZlcmVuIG9tIHF1b3RhLW9wdGllcyB0ZSBvbnRsZWRlbiFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCBjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9uZ2VsZGlnZSBxdW90YS1vcHRpZSBvcGdlZ2V2ZW4uXG4iCisiXG4iCisiR2VsZGlnZSBxdW90YS1vcHRpZXMgemlqbiAodGUgc2NoZWlkZW4gbWV0IGVlbiBrb21tYSk6XG4iCisiICAgIFteXXVzcnF1b3RhXG4iCisiICAgIFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS2FuIGRhdHVtL3RpamQtc3BlY2lmaWNhdGllIG5pZXQgb250bGVkZW46ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAib25qdWlzdCBhYW5rb3BwZWxpbmdlbmFhbnRhbDogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAib25qdWlzdCBhcmd1bWVudCB2YW4gLWUgKGdlZHJhZyBiaWogZWVuIGZvdXQpOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJvbmp1aXN0ZSBHSUQgb2YgZ3JvZXBzbmFhbTogJXMiCisKKyMgbGliL3ByYW5nZS5jOjI5OSBsaWIvcHJhbmdlLmM6MzE2CisjOiBtaXNjL3R1bmUyZnMuYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgIm9uanVpc3QgaW50ZXJ2YWw6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgIm9uanVpc3RlIHZlcmhvdWRpbmcgKCVzKSB2b29yIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTAwMworbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICJPcHRpZSAnLW8nIG1hZyBzbGVjaHRzIMOpw6luIGtlZXIgZ2VnZXZlbiB3b3JkZW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMTIKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiT3B0aWUgJy1vJyBtYWcgc2xlY2h0cyDDqcOpbiBrZWVyIGdlZ2V2ZW4gd29yZGVuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAib25qdWlzdCBhYW50YWwgZ2VyZXNlcnZlZXJkZSBibG9ra2VuOiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdWlkL3VzZXIgbmFtZSAtICVzIgorbXNnc3RyICJvbmp1aXN0ZSBVSUQgb2YgZ2VicnVpa2Vyc25hYW06ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDczCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm9uZ2VsZGlnZSBncm9vdHRlIHZhbiBpbm9kZTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiSW5vZGUtZ3Jvb3R0ZSBtb2V0IGVlbiBtYWNodCB2YW4gMiB6aWpuIC0tIG5pZXQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiTU1QLWJpandlcmtpbmdzaW50ZXJ2YWwgaXMgdGUgZ3Jvb3Q6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIkhldCBNTVAtYmlqd2Vya2luZ3NpbnRlcnZhbCBpcyBvcCAlbHUgc2Vjb25kZSBnZXpldFxuIgorbXNnc3RyWzFdICJIZXQgTU1QLWJpandlcmtpbmdzaW50ZXJ2YWwgaXMgb3AgJWx1IHNlY29uZGVuIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgYXJndW1lbnQgdmFuICdzdHJpZGUnOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IHZhbiAnc3RyaXBlX3dpZHRoJzogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZyBoYXNoLWFsZ29yaXRtZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGRlZmF1bHQgaGFzaCBhbGdvcml0aG0gdG8gJXMgKCVkKVxuIgorbXNnc3RyICJIZXQgc3RhbmRhYXJkLWhhc2gtYWxnb3JpdG1lIGlzIG9wICVzICglZCkgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJPbmdlbGRpZ2Ugb3B0aWUgb3BnZWdldmVuLlxuIgorIlxuIgorIlVpdGdlYnJlaWRlIG9wdGllcyB3b3JkZW4gZ2VzY2hlaWRlbiBkb29yIGtvbW1hJ3M7XG4iCisiaHVuIGFyZ3VtZW50IHdvcmR0IHZvb3JhZmdlZ2FhbiBkb29yIGVlbiAnPSctdGVrZW4uXG4iCisiXG4iCisiR2VsZGlnZSB1aXRnZWJyZWlkZSBvcHRpZXMgemlqbjpcbiIKKyIgICAgY2xlYXJfbW1wXG4iCisiICAgIGhhc2hfYWxnPTxoYXNoLWFsZ29yaXRtZT5cbiIKKyIgICAgbW91bnRfb3B0cz08dWl0Z2VicmVpZGUgc3RhbmRhYXJkIGFhbmtvcHBlbGluZ3NvcHRpZXM+XG4iCisiICAgIHN0cmlkZT08YWFudGFsIGJsb2trZW4gZGF0IHNhbWVuIHBlciBSQUlELXNjaGlqZiB3b3JkdCBnZWxlemVuL2dlc2NocmV2ZW4+XG4iCisiICAgIHN0cmlwZV93aWR0aD08YWFudGFsIGJsb2trZW4gcGVyIHN0cmlwZT4gKG1lZXN0YWwgc3RyaWRlIMOXIGFhbnRhbCBzY2hpanZlbilcbiIKKyIgICAgdGVzdF9mc1xuIgorIiAgICBedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzIzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIkxlemVuIHZhbiBpbm9kZS1iaXRrYWFydCBpcyBtaXNsdWt0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiTGV6ZW4gdmFuIGJsb2stYml0a2FhcnQgaXMgbWlzbHVrdFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgInRlIHZlcnBsYWF0c2VuIGJsb2trZW4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIlJlc2VydmVyZW4gdmFuIGJsb2stYml0a2FhcnQgdGlqZGVucyBpbm9kZS1ncm9vdHRldmVyYW5kZXJpbmcgaXMgbWlzbHVrdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiRXIgaXMgb252b2xkb2VuZGUgcnVpbXRlIG9tIGRlIGlub2RlLWdyb290dGUgdGUgdmVyZ3JvdGVuLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1OQorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiSGVycGxhYXRzZW4gdmFuIGJsb2trZW4gdGlqZGVucyBpbm9kZS1ncm9vdHRldmVyYW5kZXJpbmcgaXMgbWlzbHVrdC4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkZvdXQgdGlqZGVucyB2ZXJhbmRlcmVuIHZhbiBkZSBpbm9kZS1ncm9vdHRlLlxuIgorIlZvZXIgJ2UydW5kbycgdWl0IG9tIGRlIGJlc3RhbmRzc3lzdGVlbXdpanppZ2luZ2VuIG9uZ2VkYWFuIHRlIG1ha2VuLiBcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgxOAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIkthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gdm9vciAndGRiJy1iZXN0YW5kc25hYW1cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICJ0aWpkZW5zIHZlcndpamRlcmVuIHZhbiAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTg1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVG8gdW5kbyB0aGUgdHVuZTJmcyBvcGVyYXRpb24gcGxlYXNlIHJ1biB0aGUgY29tbWFuZFxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRlIHZlcmFuZGVyaW5nZW4gZGllIGRvb3IgJ3R1bmUyZnMnIGdlbWFha3QgemlqblxuIgorImt1bm5lbiBvbmdlZGFhbiBnZW1hYWt0IHdvcmRlbiBtZXQgZGUgb3BkcmFjaHQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gTU1QLWJsb2suXG4iCisiUHJvYmVlciBoZXQgdGUgcmVwYXJlcmVuIG1ldDpcbiIKKyIgICAgZTJmc2NrIC1mICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiRGUgaW5vZGUtZ3Jvb3R0ZSBpcyBhbCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJTaHJpbmtpbmcgdGhlIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICJIZXQgdmVya2xlaW5lbiB2YW4gZGUgaW5vZGUtZ3Jvb3R0ZSBpcyBuaWV0IG1vZ2VsaWprLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAib25nZWxkaWdlIGlub2RlLWdyb290dGUgJWx1IChtYXggJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIkhldCBtYXhpbXVtIGFhbnRhbCBhYW5rb3BwZWxpbmdlbiBpcyBvcCAlZCBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJIZXQgaHVpZGlnZSBhYW50YWwgYWFua29wcGVsaW5nZW4gaXMgb3AgJWQgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIkdlZHJhZyBiaWogZm91dGVuIGlzIG9wICVkIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJHSUQgdmFuIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiBpcyBvcCAlbHUgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICJpbnRlcnZhbCB0dXNzZW4gY29udHJvbGVzIGlzIHRlIGdyb290ICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAiSW50ZXJ2YWwgdHVzc2VuIGNvbnRyb2xlcyBpcyBvcCAlbHUgc2Vjb25kZW4gZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJQZXJjZW50YWdlIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiBpcyBvcCAlZyUlIGdlemV0ICglbGx1IGJsb2trZW4pXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJhYW50YWwgZ2VyZXNlcnZlZXJkZSBibG9ra2VuIGlzIHRlIGdyb290ICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIkhldCBhYW50YWwgZ2VyZXNlcnZlZXJkZSBibG9ra2VuIGlzIG9wICVsbHUgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIGFsIHp1aW5pZyBtZXQgc3VwZXJibG9ra2VuLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiRGUgenVpbmlnLW1ldC1zdXBlcmJsb2trZW52bGFnIGlzIGFhbmdlemV0LiAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjIKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkhldCB1aXR6ZXR0ZW4gdmFuIGRlIHp1aW5pZy1tZXQtc3VwZXJibG9ra2VudmxhZyBpcyBuaWV0IG1vZ2VsaWprLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJUaWpkIHZhbiBsYWF0c3RlIGNvbnRyb2xlIGlzIG9wICVzIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJVSUQgdmFuIGdlcmVzZXJ2ZWVyZGUgYmxva2tlbiBpcyBvcCAlbHUgZ2V6ZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwOAorbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiRm91dCBpbiBnZWJydWlrIHZhbiAnY2xlYXJfbW1wJy4gIEhldCBtb2V0IHNhbWVuZ2FhbiBtZXQgJy1mJy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEyNgorbXNnaWQgIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIiIKKyJEZSBxdW90YS1mdW5jdGllIG1hZyBhbGxlZW4gZ2V3aWp6aWdkIHdvcmRlbiB3YW5uZWVyIGhldCBiZXN0YW5kc3N5c3RlZW1cbiIKKyJvbnRrb3BwZWxkIGlzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU5Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJPbmp1aXN0ZSBVVUlELWluZGVsaW5nXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzIKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisiRGUgaW5vZGUtZ3Jvb3R0ZSBtYWcgYWxsZWVuIGdld2lqemlnZCB3b3JkZW4gd2FubmVlciBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisib250a29wcGVsZCBpcy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MAorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiSGV0IHZlcmFuZGVyZW4gdmFuIGRlIGlub2RlLWdyb290dGUgaXMgbmlldCBtb2dlbGlqayB2b29yXG4iCisiYmVzdGFuZHNzeXN0ZW1lbiBtZXQgaW5nZXNjaGFrZWxkZSAnZmxleF9iZyctZnVuY3RpZXZsYWcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJEZSBpbm9kZS1ncm9vdGUgaXMgb3AgJWx1IGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIkhldCB2ZXJhbmRlcmVuIHZhbiBkZSBpbm9kZS1ncm9vdHRlIGlzIG1pc2x1a3QuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiRGUgJ3N0cmlkZSctbGVuZ3RlIGlzIG9wICVkIGdlemV0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiRGUgJ3N0cmlwZSctYnJlZWR0ZSBpcyBvcCAlZCBnZXpldFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiRGUgdWl0Z2VicmVpZGUgc3RhbmRhYXJkIGFhbmtvcHBlbGluZ3NvcHRpZXMgemlqbiBvcCAnJXMnIGdlemV0XG4iCisKKyM6IG1pc2MvdXRpbC5jOjc0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiVG9jaCBkb29yZ2Fhbj8gKGosbikgIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiS2FuIGRlIHN0YXR1cyB2YW4gJXMgbmlldCBvcHZyYWdlbiAtLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJIZXQgYXBwYXJhYXQgYmVzdGFhdCBibGlqa2JhYXIgbmlldDsgaGVlZnQgdSBoZXQganVpc3Qgb3BnZWdldmVuP1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGlzIGdlZW4gYmxvay1hcHBhcmFhdC5cbiIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGlzIGhldCBoZWxlIGFwcGFyYWF0LCBuaWV0IHNsZWNodHMgZWVuIHBhcnRpdGllIVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTQKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS4gIEhvcGUgL2V0Yy9tdGFiIGlzIGluY29ycmVjdC5cbiIKK21zZ3N0ciAiJ21rZTJmcycgd29yZHQgZ2Vkd29uZ2VuIHVpdGdldm9lcmQuICBIb29wIGRhdCAvZXRjL210YWIgb25qdWlzdCBpcy5cbiIKKworIzogbWlzYy91dGlsLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJ6YWwgaGllciBnZWVuICVzIG1ha2VuIVxuIgorCisjOiBtaXNjL3V0aWwuYzoxNjYKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiJ21rZTJmcycgd29yZHQgZ2Vkd29uZ2VuIHVpdGdldm9lcmQuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE4MgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIkthbiBnZWVuIGdlaGV1Z2VuIHJlc2VydmVyZW4gb20gam91cm5hbC1vcHRpZXMgdGUgb250bGVkZW4hXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkthbiBnZWVuIGpvdXJuYWwtYXBwYXJhYXQgdmluZGVuIGRhdCBvdmVyZWVua29tdCBtZXQgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIk9uZ2VsZGlnZSBqb3VybmFsLW9wdGllcyBvcGdlZ2V2ZW4uXG4iCisiXG4iCisiSm91cm5hbC1vcHRpZXMgd29yZGVuIGdlc2NoZWlkZW4gZG9vciBrb21tYSdzLFxuIgorImh1biBhcmd1bWVudCB3b3JkdCB2b29yYWZnZWdhYW4gZG9vciBlZW4gJz0nLXRla2VuLlxuIgorIlxuIgorIkdlbGRpZ2Ugam91cm5hbC1vcHRpZXMgemlqbjpcbiIKKyIgICAgc2l6ZT08am91cm5hbC1ncm9vdHRlIGluIG1lZ2FieXRlcz5cbiIKKyIgICAgZGV2aWNlPTxqb3VybmFsLWFwcGFyYWF0PlxuIgorIlxuIgorIkRlIGdyb290dGUgdmFuIGhldCBqb3VybmFsIGlzIG1pbmltYWFsIDEwMjQgZW4gbWF4aW1hYWwgMTAyNDAwMDAgYmxva2tlbi5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6MjU4Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIkJlc3RhbmRzc3lzdGVlbSBpcyB0ZSBrbGVpbiB2b29yIGVlbiBqb3VybmFsLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlRoZSByZXF1ZXN0ZWQgam91cm5hbCBzaXplIGlzICVkIGJsb2NrczsgaXQgbXVzdCBiZVxuIgorImJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgYmxvY2tzLiAgQWJvcnRpbmcuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJEZSBnZXZyYWFnZGUgam91cm5hbC1hZm1ldGluZyBpcyAlZCBibG9ra2VuOyBtYWFyIGRlemUgZGllbnRcbiIKKyJ0dXNzZW4gZGUgMTAyNCBlbiBkZSAxMC4yNDAuMDAwIGJsb2trZW4gdGUgbGlnZ2VuLiAgR2VzdG9wdC5cbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiSm91cm5hbC1hZm1ldGluZyBpcyB0ZSBncm9vdCB2b29yIGJlc3RhbmRzc3lzdGVlbS5cbiIKKworIzogbWlzYy91dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJEaXQgYmVzdGFuZHNzeXN0ZWVtIHphbCBhdXRvbWF0aXNjaCBnZWNvbnRyb2xlZXJkIHdvcmRlbiBuYSBlbGtlXG4iCisiJWQgYWFua29wcGVsaW5nZW4gb2YgbmEgJWcgZGFnZW4sIGFmaGFua2VsaWprIHZhbiB3YXQgaGV0IGVlcnN0IHZvb3Jrb210LlxuIgorIlUga3VudCAndHVuZTJmcycgbWV0ICctYycgb2YgJy1pJyBnZWJydWlrZW4gb20gZGl0IGJpaiB0ZSBzdGVsbGVuLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiR2VicnVpazogICVzIFstZF0gWy1wIFBJRC1iZXN0YW5kXSBbLXMgc29ja2V0LXBhZF0gWy1UIHRpamRzbGltaWV0XVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICAgICVzIFstcnx0XSBbLW4gbnVtbWVyXSBbLXMgc29ja2V0LXBhZF1cbiIKKworIzogbWlzYy91dWlkZC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NAorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIm9uZ2VsZGlnZSBhcmd1bWVudGVuIgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAidmVyYmluZGVuIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgInNjaHJpanZlbiIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgImdlbGV6ZW4gYWFudGFsIgorCisjOiBtaXNjL3V1aWRkLmM6MjA1Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAib25nZWxkaWdlIGFudHdvb3JkbGVuZ3RlIgorCisjOiBtaXNjL3V1aWRkLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgInV1aWRkLWRpZW5zdCBkcmFhaXQgYWwgb25kZXIgUElEICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHVuaXggc3RyZWFtIHNvY2tldDogJXMiCittc2dzdHIgIkthbiBnZWVuIFVOSVgtc3RyZWFtLXNvY2tldCBhYW5tYWtlbjogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiS2FuIFVOSVgtc3RyZWFtLXNvY2tldCAlcyBuaWV0IGJpbmRlbjogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsaXN0ZW4gb24gdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgIkthbiBuaWV0IGx1aXN0ZXJlbiBvcCBVTklYLXN0cmVhbS1zb2NrZXQgJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiRm91dCB0aWpkZW5zIGxlemVuIHZhbiBjbGnDq250OyBsZW5ndGUgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm9wZXJhdGlvbiAlZCwgaW5jb21pbmcgbnVtID0gJWRcbiIKK21zZ3N0ciAiYmV3ZXJraW5nICVkLCBnZWdldmVuIGdldGFsID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICJHZWdlbmVyZWVyZGUgdGlqZHMtVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIkdlZ2VuZXJlZXJkZSB3aWxsZWtldXJpZ2UgVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgJWQgc3Vic2VxdWVudCBVVUlEc1xuIgorbXNnc3RyWzBdICJUaWpkcy1VVUlEICVzIHdlcmQgZ2VnZW5lcmVlcmQsIGVuIMOpw6luIG9wdm9sZ2VuZGVcbiIKK21zZ3N0clsxXSAiVGlqZHMtVVVJRCAlcyB3ZXJkIGdlZ2VuZXJlZXJkLCBlbiAlZCBvcHZvbGdlbmRlXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiRXIgemlqbiAlZCBVVUlEJ3MgZ2VnZW5lcmVlcmQ6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiT25nZWxkaWdlIGJld2Vya2luZyAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc2IG1pc2MvdXVpZGQuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiT25nZWxkaWcgZ2V0YWw6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MzMgbWlzYy91dWlkZC5jOjU2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICJGb3V0IGJpaiBhYW5yb2VwZW4gdmFuIHV1aWRkLWRpZW5zdCAoJXMpOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFuZCBzdWJzZXF1ZW50IFVVSURcbiIKK21zZ2lkX3BsdXJhbCAiJXMgYW5kIHN1YnNlcXVlbnQgJWQgVVVJRHNcbiIKK21zZ3N0clswXSAiJXMgZW4gw6nDqW4gb3B2b2xnZW5kZSBVVUlEXG4iCittc2dzdHJbMV0gIiVzIGVuICVkIG9wdm9sZ2VuZGUgVVVJRCdzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGlzdCBvZiBVVUlEJ3M6XG4iCittc2dzdHIgIkxpanN0IHZhbiBVVUlEJ3M6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiT252ZXJ3YWNodGUgYW50d29vcmRsZW5ndGUgKCVkKSB2YW4gc2VydmVyXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiS2FuIHV1aWRkIG1ldCBQSUQgJWQgbmlldCBlbGltaW5lcmVuOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICJ1dWlkZCBtZXQgUElEICVkIGlzIGdlw6tsaW1pbmVlcmRcbiIKKworIzogbWlzYy91dWlkZ2VuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcl0gWy10XVxuIgorbXNnc3RyICJHZWJydWlrOiAgJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIChkZWJ1ZykgRXh0ZW50IGR1bXA6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiMgKGRlYnVnKVx0TnVtPSVsbHUgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJHZWJydWlrOiAgJXMgWy1kIGRlYnVndmxhZ2dlbl0gWy1mRk1wUF0gYXBwYXJhYXQgW25pZXV3ZV9ncm9vdHRlXVxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjY1Cittc2dpZCAiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiVWl0YnJlaWRlbiB2YW4gaW5vZGV0YWJlbCIKKworIzogcmVzaXplL21haW4uYzo2OAorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJWZXJwbGFhdHNlbiB2YW4gYmxva2tlbiIKKworIzogcmVzaXplL21haW4uYzo3MQorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJTY2FubmVuIHZhbiBpbm9kZXRhYmVsIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiQmlqd2Vya2VuIHZhbiBpbm9kZS12ZXJ3aWp6aW5nZW4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NzcKK21zZ2lkICJNb3ZpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlZlcnBsYWF0c2VuIHZhbiBpbm9kZXRhYmVsIgorCisjOiByZXNpemUvbWFpbi5jOjgwCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICJPbmJla2VuZGUgc3RhcD8hPyIKKworIzogcmVzaXplL21haW4uYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJCZWdpbiBwYXNzICVkIChtYXggPSAlbHUpXG4iCittc2dzdHIgIkJlZ2luIHZhbiBzdGFwICVkIChtYXggPSAlbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWRcbiIKKyJhdCB5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiSGV0IHZhbiBncm9vdHRlIHZlcmFuZGVyZW4gdmFuIGVlbiAnYmlnYWxsb2MnLWJlc3RhbmRzc3lzdGVlbSBpcyBub2dcbiIKKyJvbnZvbGRvZW5kZSBnZXRlc3QuICBEb29yZ2FhbiBpcyBnZWhlZWwgdm9vciBlaWdlbiByaXNpY28hICBHZWJydWlrXG4iCisiZGUgZHdhbmdvcHRpZSBhbHMgdSB0b2NoIGRvb3Igd2lsdCBnYWFuLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICJ0aWpkZW5zIG9wZW5lbiB2YW4gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgInRpamRlbnMgb3B2cmFnZW4gdmFuIHN0YXR1cyB2YW4gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzM3IHJlc2l6ZS9tYWluLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiVm9lciBlZXJzdCAnZTJmc2NrIC1mICVzJyB1aXQuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiR2VzY2hhdHRlIG1pbmltdW0gZ3Jvb3R0ZSB2YW4gaGV0IGJlc3RhbmRzc3lzdGVlbTogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJPbmdlbGRpZ2UgbmlldXdlIGdyb290dGU6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkzCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIk5pZXV3ZSBncm9vdHRlIGlzIHRlIGdyb290IG9tIHVpdGdlZHJ1a3QgdGUga3VubmVuIHdvcmRlbiBpbiAzMiBiaXRzLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiTmlldXdlIGdyb290dGUgaXMga2xlaW5lciBkYW4gbWluaW11bSAoJWxsdSkuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA3Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgbGVuZ3RoIgorbXNnc3RyICJPbmdlbGRpZ2UgbGVuZ3RlIHZvb3IgJ3N0cmlkZSciCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEZSBwYXJ0aXRpZSAob2YgaGV0IGFwcGFyYWF0KSBpcyBzbGVjaHRzICVsbHUgYmxva2tlbiAodmFuICVkSykuXG4iCisiVSB2cm9lZyBvbSBlZW4gbmlldXdlIGdyb290dGUgdmFuICVsbHUgYmxva2tlbi5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIGlzIGFsICVsbHUgYmxva2tlbiBncm9vdC4gIEVyIGlzIG5pZXRzIHRlIGRvZW4hXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJWYW4gZ3Jvb3R0ZSB2ZXJhbmRlcmVuIHZhbiBiZXN0YW5kc3N5c3RlZW0gb3AgJXMgbmFhciAlbGx1IGJsb2trZW4gKHZhbiAlZEspLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJ0aWpkZW5zIHZlcmFuZGVyZW4gdmFuIGRlIGdyb290dGUgdmFuICVzIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorIlZvZXIgJ2UyZnNjayAtZnkgJXMnIHVpdCBvbSBoZXQgYmVzdGFuZHNzeXN0ZWVtXG4iCisidGUgcmVwYXJlcmVuIG5hIGRlIGFmZ2Vicm9rZW4gZ3Jvb3R0ZXZlcmFuZGVyaW5nLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJIZXQgYmVzdGFuZHNzeXN0ZWVtIG9wICVzIGlzIG51ICVsbHUgYmxva2tlbiBncm9vdC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICJ0aWpkZW5zIGlua29ydGVuIHZhbiAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtIG9wICVzIGlzIGFhbmdla29wcGVsZCBvcCAlcztcbiIKKyJoZXQgdmVyZ3JvdGVuL3ZlcmtsZWluZW4gemFsIGxpdmUgZ2VkYWFuIG1vZXRlbiB3b3JkZW4uXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MworbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkhldCBsaXZlIGtyaW1wZW4gd29yZHQgbmlldCBvbmRlcnN0ZXVuZCIKKworIzogcmVzaXplL29ubGluZS5jOjEwOAorbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSBvbmRlcnN0ZXVudCBsaXZlIHZlcmdyb3Rlbi92ZXJrbGVpbmVuIG5pZXQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTcKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJOaWV0IGdlbm9lZyBnZXJlc2VydmVlcmRlIEdEVC1ibG9ra2VuIG9tIGdyb290dGUgdGUga3VubmVuIHZlcmFuZGVyZW4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIiIKKyJEZSBrZXJuZWwgb25kZXJzdGV1bnQgaGV0IHZlcmdyb3Rlbi92ZXJrbGVpbmVuIHZhblxuIgorImVlbiBiZXN0YW5kc3N5c3RlZW0gbWV0IGRlemUgYWZtZXRpbmdlbiBuaWV0IgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgInRpamRlbnMgb3BlbmVuIHZhbiBhYW5rb3BwZWxpbmdzcHVudCAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIk91ZGUgaW50ZXJmYWNlIHZvb3IgZ3Jvb3R0ZXZlcmFuZGVyaW5nIGlzIGdldnJhYWdkLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTU2IHJlc2l6ZS9vbmxpbmUuYzoxNzMKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiVG9lZ2FuZyBnZXdlaWdlcmQgdm9vciBoZXQgdmVyZ3JvdGVuL3ZlcmtsZWluZW4gdmFuIGJlc3RhbmRzc3lzdGVlbSIKKworIzogcmVzaXplL29ubGluZS5jOjE1OSByZXNpemUvb25saW5lLmM6MTc5Cittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAiVGlqZGVucyBjb250cm9sZSBvcCBvbmRlcnN0ZXVuaW5nIHZvb3IgbGl2ZSB2ZXJncm90ZW4vdmVya2xlaW5lbiIKKworIzogcmVzaXplL29ubGluZS5jOjE3NgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRGUga2VybmVsIG9uZGVyc3RldW50IGhldCBsaXZlIHZlcmdyb3Rlbi92ZXJrbGVpbmVuIG5pZXQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiVWl0dm9lcmVuIHZhbiBsaXZlIHZlcmFuZGVyaW5nIHZhbiAlcyBuYWFyICVsbHUgYmxva2tlbiAodmFuICVkSykuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJUaWpkZW5zIHVpdGJyZWlkZW4gdmFuIGRlIGxhYXRzdGUgZ3JvZXAiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGFkZCBncm91cCAjJWQiCittc2dzdHIgIlRpamRlbnMgdG9ldm9lZ2VuIHZhbiBncm9lcCAjJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICIiCisiQmVzdGFuZHNzeXN0ZWVtIG9wICVzIGlzIGFhbmdla29wcGxlZCBvcCAlcztcbiIKKyJvcCBkaXQgc3lzdGVlbSBpcyBsaXZlIHZlcmdyb3Rlbi92ZXJrbGVpbmVuIG5pZXQgbW9nZWxpamsuXG4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vZGVzICglbGx1KSBtdXN0IGJlIGxlc3MgdGhhbiAldSIKK21zZ3N0ciAiYWFudGFsIGlub2RlcyAoJWxsdSkgbW9ldCBrbGVpbmVyIHppam4gZGFuICV1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjMxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJnZXJlc2VydmVlcmRlIGJsb2trZW4iCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzUKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9ra2VuIHZvb3IgbWV0YWdlZ2V2ZW5zIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiWm91IG5vb2l0IG1vZ2VuIGdlYmV1cmVuOiBkZSAncmVzaXplJy1pbm9kZSBpcyBiZXNjaGFkaWdkIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuOCIKK21zZ3N0ciAiRVhUMkZTLWJpYmxpb3RoZWVrICB2ZXJzaWUgMS40Mi44IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdleHQyX2ZpbHN5cyctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19saXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdiYWRibG9ja3NfbGlzdCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJhZGJsb2Nrc19pdGVyYXRlIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdiYWRibG9ja3NfaXRlcmF0ZSctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2lub2RlX3NjYW4nLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdpb19jaGFubmVsJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIFVuaXgtJ2lvX2NoYW5uZWwnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdpb19tYW5hZ2VyJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdibG9ja19iaXRtYXAnLXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2lub2RlX2JpdG1hcCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yICdnZW5lcmljX2JpdG1hcCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHRlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciB0ZXN0LSdpb19jaGFubmVsJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgbWFwcGVuYmxva2xpanN0LXN0cnVjdHV1ciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgJ2ljb3VudCctc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBQb3dlcnF1ZXN0LSdpb19jaGFubmVsJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIGV4dDItYmVzdGFuZHMtc3RydWN0dXVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgRXh0Mi1pbWFnZWhlYWRlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIGlub2RlLSdpb19jaGFubmVsJy1zdHJ1Y3R1dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIHZvb3IgRXh0NC1leHRlbnQtaGFuZGxlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgbnVtYmVyIGluIHN1cGVyLWJsb2NrIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluIHN1cGVyYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtcmV2aXNpZSBpcyB0ZSBob29nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiUG9naW5nIHRvdCBzY2hyaWp2ZW4gbmFhciBiZXN0YW5kc3N5c3RlZW0gZGF0IGdlb3BlbmQgaXMgdm9vciBhbGxlZW4tbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkthbiBncm9lcHNiZXNjaHJpanZlcnMgbmlldCBsZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIkthbiBncm9lcHNiZXNjaHJpanZlcnMgbmlldCBzY2hyaWp2ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIkJlc2NoYWRpZ2RlIGdyb2Vwc2Jlc2NocmlqdmVyOiBvbmdlbGRpZyBibG9rIHZvb3IgYmxvay1iaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiQmVzY2hhZGlnZGUgZ3JvZXBzYmVzY2hyaWp2ZXI6IG9uZ2VsZGlnIGJsb2sgdm9vciBpbm9kZS1iaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJCZXNjaGFkaWdkZSBncm9lcHNiZXNjaHJpanZlcjogb25nZWxkaWcgYmxvayB2b29yIGlub2RldGFiZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGVlbiBpbm9kZS1iaXRrYWFydCBuaWV0IHNjaHJpanZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkthbiBlZW4gaW5vZGUtYml0a2FhcnQgbmlldCBsZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJLYW4gZWVuIGJsb2stYml0a2FhcnQgbmlldCBzY2hyaWp2ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJLYW4gZWVuIGJsb2stYml0a2FhcnQgbmlldCBsZXplbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkthbiBlZW4gaW5vZGV0YWJlbCBuaWV0IHNjaHJpanZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGVlbiBpbm9kZXRhYmVsIG5pZXQgbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiS2FuIHZvbGdlbmRlIGlub2RlIG5pZXQgbGV6ZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiQmVzdGFuZHNzeXN0ZWVtIGhlZWZ0IGVlbiBvbnZlcndhY2h0ZSBibG9rZ3Jvb3R0ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICJFWFQyLW1hcCBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIlBvZ2luZyB0b3QgbGV6ZW4gdmFuIGJsb2sgdWl0IGJlc3RhbmRzc3lzdGVlbSBsYXMgdGUgd2VpbmlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIlBvZ2luZyB0b3Qgc2NocmlqdmVuIHZhbiBibG9rIG5hYXIgYmVzdGFuZHNzeXN0ZWVtIHNjaHJlZWYgdGUgd2VpbmlnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIkdlZW4gdnJpamUgcnVpbXRlIG1lZXIgaW4gZGUgbWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiSW5vZGUtYml0a2FhcnQgaXMgbmlldCBnZWxhZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQmxvay1iaXRrYWFydCBpcyBuaWV0IGdlbGFkZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIgorbXNnc3RyICJPbmdlbGRpZyBpbm9kZW51bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIqKkludGVybmUgcHJvZ3JhbW1hZm91dCoqIGluIGV4dDJmc19leHBhbmRfZGlyKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiRXIgaXMgb252b2xkb2VuZGUgcnVpbXRlIG9tIGhldCB2b29yZ2VzdGVsZGUgYmVzdGFuZHNzeXN0ZWVtIHRlIGNyZcOrcmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBibG9rbnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCgpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAoKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgYmxva251bW1lciBnZWdldmVuIGFhbiBleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAoKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgYmxva251bW1lciBnZWdldmVuIGFhbiBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAoKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBibG9rbnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGJsb2tudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiUG9naW5nIG9tIGhldCBlaW5kIHZhbiBibG9rLWJpdGthYXJ0IHZvb3JiaWogaGV0IGVjaHRlIGVpbmQgdGUgc211cmZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQb2dpbmcgb20gaGV0IGVpbmQgdmFuIGlub2RlLWJpdGthYXJ0IHZvb3JiaWogaGV0IGVjaHRlIGVpbmQgdGUgc211cmZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT25nZWxkaWcgaW5kaXJlY3QgYmxvayBnZXZvbmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk9uZ2VsZGlnIGR1YmJlbC1pbmRpcmVjdCBibG9rIGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT25nZWxkaWcgZHJpZXZvdWRpZy1pbmRpcmVjdCBibG9rIGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIkJsb2stYml0a2FhcnRlbiB6aWpuIG5pZXQgaGV0emVsZmRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIklub2RlLWJpdGthYXJ0ZW4gemlqbiBuaWV0IGhldHplbGZkZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk9uZ2VsZGlnZSBvZiBtaXN2b3JtZGUgYXBwYXJhYXRuYWFtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkVyIG9udGJyZWVrdCBlZW4gYmxva2dyb2VwIGluIGRlIGlub2RldGFiZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiSGV0IEV4dDItc3VwZXJibG9rIGlzIGJlc2NoYWRpZ2QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MgorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgZ2VuZXJpZWsgYml0bnVtbWVyIGdlZ2V2ZW4gYWFuIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwKCkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJPbmdlbGRpZyBnZW5lcmllayBiaXRudW1tZXIgZ2VnZXZlbiBhYW4gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCgpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIGdlbmVyaWVrIGJpdG51bW1lciBnZWdldmVuIGFhbiBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCgpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIlRlIHZlZWwgc3ltYm9saXNjaGUga29wcGVsaW5nZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NgorbXNnaWQgIlRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBjYXNlIgorbXNnc3RyICJEZSBjYWxsYmFjay1mdW5jdGllIGthbiBkaXQgZ2V2YWwgbmlldCBhYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRGUgaW5vZGUga29tdCB1aXQgZWVuIHNsZWNodCBibG9rIGluIGRlIGlub2RldGFiZWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSBoZWVmdCBuaWV0LW9uZGVyc3RldW5kZSBmdW5jdGllcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSBoZWVmdCBuaWV0LW9uZGVyc3RldW5kZSBhbGxlZW4tbGV6ZW4gZnVuY3RpZXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiSW4tL3VpdHZvZXJrYW5hYWwga29uIGdlZW4gJ3NlZWsnIGRvZW4gYmlqIGxlemVuIG9mIHNjaHJpanZlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJPbnZvbGRvZW5kZSBnZWhldWdlbiBiZXNjaGlrYmFhciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICJPbmdlbGRpZyBhcmd1bWVudCBnZWdldmVuIGFhbiBFeHQyLWJpYmxpb3RoZWVrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgYmxvY2sgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJLYW4gZ2VlbiBibG9rIHJlc2VydmVyZW4gaW4gRXh0Mi1iZXN0YW5kc3N5c3RlZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkthbiBnZWVuIGlub2RlIHJlc2VydmVyZW4gaW4gRXh0Mi1iZXN0YW5kc3N5c3RlZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJFeHQyLWlub2RlIGlzIGdlZW4gbWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJUZSB2ZWVsIHZlcndpanppbmdlbiBpbiB0YWJlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIkJlc3RhbmQgaXMgbmlldCBnZXZvbmRlbiBkb29yICdleHQyX2xvb2t1cCgpJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg4Cittc2dpZCAiRmlsZSBvcGVuIHJlYWQtb25seSIKK21zZ3N0ciAiQmVzdGFuZCBpcyBnZW9wZW5kIHZvb3IgYWxsZWVuLWxlemVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkV4dDItbWFwYmxvayBuaWV0IGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRXh0Mi1tYXAgYmVzdGFhdCBhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIk9uZ2XDr21wbGVtZW50ZWVyZGUgRXh0Mi1iaWJsaW90aGVla2Z1bmN0aWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiQW5udWxlcmluZyBpcyB2ZXJ6b2NodCBkb29yIGdlYnJ1aWtlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIkV4dDItYmVzdGFuZCBpcyB0ZSBncm9vdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICJBYW5nZWdldmVuIGpvdXJuYWwtYXBwYXJhYXQgaXMgZ2VlbiBibG9rLWFwcGFyYWF0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTUKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJHZWVuIGpvdXJuYWwtc3VwZXJibG9rIGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIkpvdXJuYWwgbW9ldCBtaW5zdGVucyAxMDI0IGJsb2trZW4gemlqbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICJOaWV0LW9uZGVyc3RldW5kZSBqb3VybmFsLXZlcnNpZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJGb3V0IHRpamRlbnMgbGFkZW4gdmFuIGV4dGVybiBqb3VybmFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiR2VlbiBqb3VybmFsIGdldm9uZGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIk1hcC1oYXNoIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQiCisKKyMgQmVoYWx2ZSBFIGVuIEYgd29yZGVuIGRlIHZvbGdlbmRlIDMwIGxldHRlcmFma29ydGluZ2VuIG5pZXQgZ2VicnVpa3QuCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJPbmdlbGRpZyBibG9rbnVtbWVyIHZvb3IgdWl0Z2VicmVpZCBrZW5tZXJrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIkthbiBnZWVuIGJlc3RhbmRzc3lzdGVlbSBhYW5tYWtlbiBtZXQgaGV0IGdldnJhYWdkZSBhYW50YWwgaW5vZGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJFMmltYWdlLXNuYXBzaG90IHdvcmR0IG5pZXQgZ2VicnVpa3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiVGUgdmVlbCBnZXJlc2VydmVlcmRlIGdyb2Vwc2Jlc2NocmlqdmVyYmxva2tlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICJEZSByZXNpemUtaW5vZGUgaXMgYmVzY2hhZGlnZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiUG9naW5nIHRvdCB6ZXR0ZW4gdmFuIGJsb2stYml0a2FhcnQgbWV0IG9udGJyZWtlbmQgaW5kaXJlY3QgYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNworbXNnaWQgIlREQjogU3VjY2VzcyIKK21zZ3N0ciAiVERCOiBnZWx1a3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIlREQjogZGF0YWJhbmsgaXMgYmVzY2hhZGlnZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIlREQjogaW4tL3VpdHZvZXJmb3V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IHZlcmdyZW5kZWxpbmdzZm91dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBvbnZvbGRvZW5kZSBnZWhldWdlbiBiZXNjaGlrYmFhciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiByZWNvcmQgYmVzdGFhdCBhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBhbmRlcmUgc2xldXRlbHMgemlqbiB2ZXJncmVuZGVsZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjogb25nZWxkaWdlIHBhcmFtZXRlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJUREI6IHJlY29yZCBiZXN0YWF0IG5pZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlREQjogc2NocmlqdmVuIGlzIG5pZXQgdG9lZ2VzdGFhbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiRXh0MmZzLW1hcGJsb2trZW5saWpzdCBpcyBsZWVnIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiUG9naW5nIHRvdCB3aWp6aWdlbiB2YW4gYmxva3RvZXdpanppbmcgdmlhIGVlbiBhbGxlZW4tbGV6ZW4gaXRlcmF0b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciBvcGdlc2xhZ2VuIHBhZCB2YW4gRXh0NC1leHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIDY0LWJpdCBnZW5lcmlla2UgYml0a2FhcnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgdm9vciA2NC1iaXQgYmxvay1iaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiT25nZWxkaWcgbWFnaXNjaCBnZXRhbCB2b29yIDY0LWJpdCBpbm9kZS1iaXRrYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xNCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xNSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xNyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgIC0tICBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiRXh0ZW50LWhlYWRlciBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIkV4dGVudC1pbmRleCBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIkV4dGVudCBpcyBiZXNjaGFkaWdkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJHZWVuIHZyaWplIHJ1aW10ZSBtZWVyIGluIGV4dGVudC1rYWFydCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJbm9kZSBnZWJydWlrdCBnZWVuIGV4dGVudHMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICJFciBpcyBnZWVuICduZXh0JyBleHRlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiRXIgaXMgZ2VlbiAncHJldmlvdXMnIGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJFciBpcyBnZWVuICd1cCcgZXh0ZW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiRXIgaXMgZ2VlbiAnZG93bicgZXh0ZW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICJFciBpcyBnZWVuIGh1aWRpZ2Uga25vb3AiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkV4dDJmcy1iZXdlcmtpbmcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJFciBpcyBnZWVuIHJ1aW10ZSBvbSBlZW4gZXh0ZW50IGluIGRlIGtub29wIGluIHRlIHZvZWdlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiU3BsaXRzZW4gem91IHJlc3VsdGVyZW4gaW4gZWVuIGxlZ2Uga25vb3AiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICJFeHRlbnQgbmlldCBnZXZvbmRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICJCZXdlcmtpbmcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCB2b29yIGlub2RlcyBkaWUgZXh0ZW50cyBiZXZhdHRlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiRXh0ZW50LWxlbmd0ZSBpcyBvbmdlbGRpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkluLS91aXR2b2Vya2FuYWFsIG9uZGVyc3RldW50IGdlZW4gNjQtYml0IGJsb2tudW1tZXJzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorIkthbiBnZWVuIGNvbnRyb2xlIHVpdHZvZXJlbiBhbHMgaGV0IGJlc3RhbmRzc3lzdGVlbSBhYW5nZWtvcHBlbGQgaXNcbiIKKyJ3ZWdlbnMgZWVuIG9udGJyZWtlbmQgJ210YWInLWJlc3RhbmQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIkJlc3RhbmRzc3lzdGVlbSBpcyB0ZSBncm9vdCBvbSBvdWRlIGJpdGthYXJ0ZW4gdGUga3VubmVuIGdlYnJ1aWtlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogb25nZWxkaWcgbWFnaXNjaCBnZXRhbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUDogYXBwYXJhYXQgaXMgbW9tZW50ZWVsIGFjdGllZiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIk1NUDogJ2ZzY2snIHdvcmR0IHVpdGdldm9lcmQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiTU1QOiBibG9rbnVtbWVyIHZhbHQgYnVpdGVuIGJlcmVpayB2YW4gYmVzdGFuZHNzeXN0ZWVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IG9uZGVyZ2FhdCBlZW4gb25iZWtlbmRlIGJld2Vya2luZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIk1NUDogYmVzdGFuZHNzeXN0ZWVtIGlzIG5vZyBpbiBnZWJydWlrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU1Cittc2dpZCAiTU1QOiBvcGVuIHdpdGggT19ESVJFQ1QgZmFpbGVkIgorbXNnc3RyICJNTVA6IG9wZW5lbiBtZXQgJ09fRElSRUNUJyBpcyBtaXNsdWt0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiR3Jvb3R0ZSB2YW4gYmxva2dyb2Vwc2Jlc2NocmlqdmVyIGlzIG9uanVpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiQ29udHJvbGVzb20gdmFuIGlub2RlIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBpbm9kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIkNvbnRyb2xlc29tIHZhbiBpbm9kZS1iaXRrYWFydCBrb210IG5pZXQgb3ZlcmVlbiBtZXQgYml0a2FhcnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTkKK21zZ2lkICJFeHRlbnQgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZXh0ZW50IGJsb2NrIgorbXNnc3RyICJDb250cm9sZXNvbSB2YW4gZXh0ZW50LWJsb2sga29tdCBuaWV0IG92ZXJlZW4gbWV0IGV4dGVudC1ibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJNYXAtYmxvayBoZWVmdCBnZWVuIHJ1aW10ZSB2b29yIGVlbiBjb250cm9sZXNvbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIkNvbnRyb2xlc29tIHZhbiBtYXAtYmxvayBrb210IG5pZXQgb3ZlcmVlbiBtZXQgbWFwLWJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIkNvbnRyb2xlc29tIHZhbiB1aXRnZWJyZWlkZWtlbm1lcmtlbi1ibG9rIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBibG9rIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJDb250cm9sZXNvbSB2YW4gc3VwZXJibG9rIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBzdXBlcmJsb2siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiT25nZWxkaWcgY29udHJvbGVzb20tYWxnb3JpdG1lIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiQ29udHJvbGVzb20gdmFuIE1NUC1ibG9rIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBNTVAtYmxvayIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRXh0Mi1iZXN0YW5kIGJlc3RhYXQgYWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsZSAgdmVyc2llIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluICdwcm9maWxlX25vZGUnIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlByb2ZpbGUtc2VjdGllIG5pZXQgZ2V2b25kZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlByb2ZpbGUtcmVsYXRpZSBuaWV0IGdldm9uZGVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICJQb2dpbmcgdG90IGhldCB0b2V2b2VnZW4gdmFuIGVlbiByZWxhdGllIGFhbiBlZW4ga25vb3AgZGllIGdlZW4gc2VjdGllIGlzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiRWVuIHByb2ZpbGUtc2VjdGlla29wIGhlZWZ0IGVlbiB3YWFyZGUgZGllIG5pZXQgbnVsIGlzIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNworbXNnaWQgIkJhZCBsaW5rZWQgbGlzdCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk9uZ2VsZGlnZSBnZWtvcHBlbGRlIGxpanN0IGluIHByb2ZpbGUtc3RydWN0dXJlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJPbmdlbGRpZyBncm9lcHNuaXZlYXUgaW4gcHJvZmlsZS1zdHJ1Y3R1cmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIk9uZ2VsZGlnZSBwb2ludGVyIG5hYXIgb3VkZXIgaW4gcHJvZmlsZS1zdHJ1Y3R1cmVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluIHByb2ZpbGUtaXRlcmF0b3IiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiS2FuIHdhYXJkZSBuaWV0IGluc3RlbGxlbiBpbiBzZWN0aWVrbm9vcCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIk9uZ2VsZGlnIGFyZ3VtZW50IGdlZ2V2ZW4gYWFuIFByb2ZpbGUtYmlibGlvdGhlZWsiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlBvZ2luZyB0b3Qgd2lqemlnZW4gdmFuIGVlbiBhbGxlZW4tbGV6ZW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIlByb2ZpbGUtc2VjdGlla29wIGlzIG5pZXQgb3AgdG9wbml2ZWF1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJTeW50YXhmb3V0IGluIHByb2ZpbGUtc2VjdGlla29wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICJTeW50YXhmb3V0IGluIHByb2ZpbGUtcmVsYXRpZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIk92ZXJ0b2xsaWdlIHNsdWl0YWNjb2xhZGUgaW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiT250YnJla2VuZGUgb3BlbmluZ3NhY2NvbGFkZSBpbiBwcm9maWxlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gJ3Byb2ZpbGVfdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluICdwcm9maWxlX3NlY3Rpb25fdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkRvb3Jsb3BlbiB2YW4gYWxsZSB0b3BuaXZlYXUtc2VjdGllcyB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIgorCisjIERpdCBnYWF0IG92ZXIgaGV0IGFyZ3VtZW50IHZhbiBvcHRpZSAtTy4KKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJPbmdlbGRpZyAncHJvZmlsZV9zZWN0aW9uJy1vYmplY3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiRXIgemlqbiBnZWVuIHZlcmRlcmUgc2VjdGllcyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiT25nZWxkaWdlIG5hYW1zZXQgZ2VnZXZlbiBhYW4gYmV2cmFnaW5nc3JvdXRpbmUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIkVyIGlzIGdlZW4gb3BlbiBwcm9maWxlLWJlc3RhbmQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICJPbmdlbGRpZyBtYWdpc2NoIGdldGFsIGluICdwcm9maWxlX2ZpbGVfdCciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM3Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIkthbiBwcm9maWxlLWJlc3RhbmQgbmlldCBvcGVuZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiU2VjdGllIGJlc3RhYXQgYWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICJPbmdlbGRpZ2UgYm9vbGVhYW5zZSB3YWFyZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJPbmdlbGRpZyBnZWhlZWwgZ2V0YWwiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIk9uZ2VsZGlnIG1hZ2lzY2ggZ2V0YWwgaW4gJ3Byb2ZpbGVfZmlsZV9kYXRhX3QnIgorCisjfiBtc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKKyN+IG1zZ3N0ciAiSGV0IHVpdHpldHRlbiB2YW4gZGUgJ2V4dGVudCctZnVuY3RpZXZsYWcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZCBvcCAlcyIKKworI34gbXNnaWQgIiIKKyN+ICIlczogVGhlIGNvbWJpbmF0aW9uIG9mIGZsZXhfYmcgYW5kXG4iCisjfiAiXHQhcmVzaXplX2lub2RlIGZlYXR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVzaXplMmZzLlxuIgorI34gbXNnc3RyICIiCisjfiAiJXM6IERlIGZ1bmN0aWUgJ2ZsZXhfYmcnIHpvbmRlciBkZSBmdW5jdGllICdyZXNpemVfaW5vZGUnXG4iCisjfiAiICAgIHdvcmR0IGRvb3IgJ3Jlc2l6ZTJmcycgbmlldCBvbmRlcnN0ZXVuZC5cbiIKKworI34gbXNnaWQgIiVzIGlzIG1vdW50ZWQuICAiCisjfiBtc2dzdHIgIlBhcnRpdGllICVzIGlzIGFhbmdla29wcGVsZC4gICIKKworI34gbXNnaWQgIkBnICVnIEBiIEBCIHVuaW5pdGlhbGl6ZWQgYnV0IEBpIEBCIGluIHVzZS5cbiIKKyN+IG1zZ3N0ciAiR3JvZXBzYmVzY2hyaWp2ZXIgJWcgaGVlZnQgZWVuIG9uZ2XDr25pdGlhbGlzZWVyZGUgYmxvay1iaXRrYWFydCBtYWFyIGRlIGlub2RlLWJpdGthYXJ0IGlzIGluIGdlYnJ1aWsuXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIklub2RlICVpIHpvdSBuaWV0IGRlICdFT0ZCTE9DS1NfRkwnLXZsYWcgZ2V6ZXQgbW9ldGVuIGhlYmJlbiAoZ3Jvb3R0ZSAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJLYW4gam91cm5hbC1ncm9vdHRlIG5pZXQgYmVwYWxlbiIKKworI34gbXNnaWQgIk1pc3NpbmcgaW5kaXJlY3QgYmxvY2sgbm90IHByZXNlbnQiCisjfiBtc2dzdHIgIk9udGJyZWtlbmQgaW5kaXJlY3QgYmxvayBpcyBhZndlemlnIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8ZGUgQUNMLWluZGV4LWlub2RlPiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGRhdGEgaW5vZGU+IgorI34gbXNnc3RyICI8ZGUgQUNMLWRhdGEtaW5vZGU+IgorCisjfiBtc2dpZCAic2hvcnQgd3JpdGUgKG9ubHkgJWQgYnl0ZXMpIGZvciB3cml0aW5nIGltYWdlIGhlYWRlciIKKyN+IG1zZ3N0ciAib252b2xsZWRpZyBibG9rIChzbGVjaHRzICVkIGJ5dGVzKSB0aWpkZW5zIHNjaHJpanZlbiB2YW4gaW1hZ2Uta29wIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgIm9uZ2VsZGlnZSBmcmFnbWVudGdyb290dGU6ICVzIgorCisjfiBtc2dpZCAiV2FybmluZzogZnJhZ21lbnRzIG5vdCBzdXBwb3J0ZWQuICBJZ25vcmluZyAtZiBvcHRpb25cbiIKKyN+IG1zZ3N0ciAiV2FhcnNjaHV3aW5nOiBmcmFnbWVudGVuIHdvcmRlbiBuaWV0IG9uZGVyc3RldW5kOyBvcHRpZSAnLWYnIHdvcmR0IGdlbmVnZWVyZFxuIgorCisjfiBtc2dpZCAiQ2FsbGluZyBCTEtESVNDQVJEIGZyb20gJWxsdSB0byAlbGx1ICIKKyN+IG1zZ3N0ciAiQWFucm9lcGVuIHZhbiBCTEtESVNDQVJEIHZhbiAlbGx1IHRvdCAlbGx1ICIKKworI34gbXNnaWQgInN1Y2NlZWRlZC5cbiIKKyN+IG1zZ3N0ciAiaXMgZ2VzbGFhZ2QuXG4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIkpvdXJuYWwgaXMgTklFVCB2ZXJ3aWpkZXJkLlxuIgorCisjfiBtc2dpZCAiQFMgZG9lc24ndCBoYXZlIGhhc19AaiBmbGFnLCBidXQgaGFzIGV4dDMgQGogJXMuXG4iCisjfiBtc2dzdHIgIlN1cGVyYmxvayBoZWVmdCBqb3VybmFsLXZsYWcgbmlldCBnZXpldCwgbWFhciBoZWVmdCB3ZWwgZWVuIGV4dDMtam91cm5hbCAlcy5cbiIKKworI34gbXNnaWQgIkVycm9yIHdoaWxlIGRlbGV0aW5nIGV4dGVudDogJW1cbiIKKyN+IG1zZ3N0ciAiRm91dCB0aWpkZW5zIHZlcndpamRlcmVuIHZhbiBleHRlbnQ6ICVtXG4iCisKKyN+IG1zZ2lkICJSZWNyZWF0ZSBqb3VybmFsIHRvIG1ha2UgdGhlIGZpbGVzeXN0ZW0gZXh0MyBhZ2Fpbj9cbiIKKyN+IG1zZ3N0ciAiSGV0IGpvdXJuYWwgaGVyYWFubWFrZW4gb20gaGV0IGJlc3RhbmRzc3lzdGVlbSB3ZWVyIGV4dDMgdGUgbWFrZW4/XG4iCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICJvbmdlbGRpZ2UgYmxva2dyb290dGU6ICVzIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgInRpamRlbnMgaGVyc2NocmlqdmVuIHZhbiBibG9rLWJpdGthYXJ0ZW4gdm9vciAlcyIKKworI34gbXNnaWQgIiVzIGZhaWxlZCBmb3IgJXM6ICVzXG4iCisjfiBtc2dzdHIgIiVzIGlzIG1pc2x1a3Qgdm9vciAlczogJXNcbiIKKworI34gbXNnaWQgIkhESU9fR0VUR0VPIGlvY3RsIgorI34gbXNnc3RyICJPcHZyYWdlbiB2YW4gZ2VvbWV0cmllIgorCisjfiBtc2dpZCAiQkxLR0VUU0laRSBpb2N0bCIKKyN+IG1zZ3N0ciAiT3B2cmFnZW4gdmFuIGdyb290dGUiCisKKyN+IG1zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKKyN+IG1zZ3N0ciAiRWVuIHVpdGdlYnJlaWQga2VubWVyayBpbiBpbm9kZSAlaSBoZWVmdCBlZW4gb25nZWxkaWdlIGhhc2h3YWFyZGUgKCVOLCBtb2V0IDAgemlqbikuXG4iCisKKyN+IG1zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIgorI34gbXNnc3RyICJ0aWpkZW5zIGFhbnJvZXAgdmFuIGV4dDJmc19ibG9ja19pdGVyYXRlKCkiCisKKyN+IG1zZ2lkICJ3aGlsZSBjYWxsaW5nIGl0ZXJhdG9yIGZ1bmN0aW9uIgorI34gbXNnc3RyICJ0aWpkZW5zIGFhbnJvZXAgdmFuIGl0ZXJhdG9yLWZ1bmN0aWUiCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAidGlqZGVucyByZXNlcnZlcmVuIHZhbiBpbm9kZWJ1ZmZlciIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAidGlqZGVucyBsZXplbiB2YW4gaW5vZGV0YWJlbCAoZ3JvZXAgJWQpIgorCisjfiBtc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICJ0aWpkZW5zIHNjaHJpanZlbiB2YW4gaW5vZGV0YWJlbCAoZ3JvZXAgJWQpIgorCisjfiBtc2dpZCAiUGFzcyAwOiBEb2luZyBieXRlLXN3YXAgb2YgZmlsZXN5c3RlbVxuIgorI34gbXNnc3RyICJTdGFwIDA6IE9td2lzc2VsaW5nIHZhbiBob2dlIGVuIGxhZ2UgYnl0ZXMgaW4gaGVsZSBiZXN0YW5kc3N5c3RlZW1cbiIKKworI34gbXNnaWQgIiIKKyN+ICIlczogdGhlIGZpbGVzeXN0ZW0gbXVzdCBiZSBmcmVzaGx5IGNoZWNrZWQgdXNpbmcgZnNja1xuIgorI34gImFuZCBub3QgbW91bnRlZCBiZWZvcmUgdHJ5aW5nIHRvIGJ5dGUtc3dhcCBpdC5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiBoZXQgYmVzdGFuZHNzeXN0ZWVtIGRpZW50IG9wbmlldXcgZ2Vjb250cm9sZWVyZCB0ZSB3b3JkZW4gbWV0ICdmc2NrJ1xuIgorI34gImVuIG5pZXQgYWFuZ2Vrb3BwZWxkIHRlIHdvcmRlbiB2b29yZGF0IGRlIGJ5dGUtb213aXNzZWxpbmcgZ2ViZXVyZCBpcy5cbiIKKworI34gbXNnaWQgIkJ5dGUgc3dhcCIKKyN+IG1zZ3N0ciAiQnl0ZS1vbXdpc3NlbGluZyIKKworI34gbXNnaWQgIkJ5dGUtc3dhcHBpbmcgZmlsZXN5c3RlbXMgbm90IGNvbXBpbGVkIGluIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2tcbiIKKyN+IG1zZ3N0ciAiQnl0ZS1vbXdpc3NlbGluZyBpcyBuaWV0IG1vZ2VsaWprIG1ldCBkZXplIHZlcnNpZSB2YW4gZTJmc2NrLlxuIgorCisjfiBtc2dpZCAiSW5jb21wYXRpYmxlIG9wdGlvbnMgbm90IGFsbG93ZWQgd2hlbiBieXRlLXN3YXBwaW5nLlxuIgorI34gbXNnc3RyICJCaWogYnl0ZS1vbXdpc3NlbGluZyB6aWpuIGJvdHNlbmRlIG9wdGllcyBuaWV0IHRvZWdlc3RhYW4uXG4iCisKKyN+IG1zZ2lkICIlczogRmlsZXN5c3RlbSBieXRlIG9yZGVyIGFscmVhZHkgbm9ybWFsaXplZC5cbiIKKyN+IG1zZ3N0ciAiJXM6IGJ5dGV2b2xnb3JkZSB2YW4gYmVzdGFuZHNzeXN0ZWVtIGlzIGFsIGdlbm9ybWFsaXNlZXJkLlxuIgorCisjfiBtc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAtICVzIgorI34gbXNnc3RyICJvbmdlbGRpZyBiZWdpbmJsb2s6ICVzIgorCisjfiBtc2dpZCAiTm90ZTogVGhpcyBpcyBhIGJ5dGUtc3dhcHBlZCBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIk9wbWVya2luZzogZGl0IGlzIGVlbiBieXRlLXZlcndpc3NlbGQgYmVzdGFuZHNzeXN0ZWVtLlxuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGVzeXN0ZW0gdG9vIGxhcmdlLiAgTm8gbW9yZSB0aGFuIDIqKjMxLTEgYmxvY2tzXG4iCisjfiAiXHQgKDhUQiB1c2luZyBhIGJsb2Nrc2l6ZSBvZiA0aykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICIiCisjfiAiQmVzdGFuZHNzeXN0ZWVtIGlzIHRlIGdyb290LiAgTW9tZW50ZWVsIHppam4gbmlldCBtZWVyIGRhblxuIgorI34gIjIqKjMxLTEgYmxva2tlbiBtb2dlbGlqayAoOFRCIGJpaiBlZW4gYmxva2dyb290dGUgdmFuIDRLKS4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiV2FybmluZzogc29tZSAyLjQga2VybmVscyBkbyBub3Qgc3VwcG9ydCBibG9ja3NpemVzIGdyZWF0ZXIgdGhhbiA0MDk2XG4iCisjfiAiXHR1c2luZyBleHQzLiAgVXNlIC1iIDQwOTYgaWYgdGhpcyBpcyBhbiBpc3N1ZSBmb3IgeW91LlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiV2FhcnNjaHV3aW5nOiBzb21taWdlIDIuNC1rZXJuZWxzIG9uZGVyc3RldW5lbiB2b29yIGV4dDMgZ2VlblxuIgorI34gImJsb2tncm9vdHRlcyBncm90ZXIgZGFuIDQwOTYuICBHZWJydWlrIGluIGRhdCBnZXZhbCAnLWIgNDA5NicuXG4iCisjfiAiXG4iCisKKyN+IG1zZ2lkICJXYXJuaW5nOiAlZC1ieXRlIGlub2RlcyBub3QgdXNhYmxlIG9uIG9sZGVyIHN5c3RlbXNcbiIKKyN+IG1zZ3N0ciAiV2FhcnNjaHV3aW5nOiBpbm9kZXMgdmFuICVkIGJ5dGVzIHppam4gb25icnVpa2JhYXIgb3Agb3VkZXJlIHN5c3RlbWVuXG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vcGwuZ21vIGIvZTJmc3Byb2dzL3BvL3BsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVlM2ViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL3BsLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vcGwucG8gYi9lMmZzcHJvZ3MvcG8vcGwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3ZGIyYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9wbC5wbwpAQCAtMCwwICsxLDY2NzcgQEAKKyMgUG9saXNoIHRyYW5zbGF0aW9uIGZvciBlMmZzcHJvZ3MuCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBUaGVvZG9yZSBUc28gKG1zZ2lkcykKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBKYWt1YiBCb2d1c3ogPHFib29zaEBwbGQtbGludXgub3JnPiwgMjAwMi0yMDEzLgorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MgMS40Mi44XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEzLTA2LTE2IDA4OjE3LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTA4LTA0IDIwOjQxKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpha3ViIEJvZ3VzeiA8cWJvb3NoQHBsZC1saW51eC5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9saXNoIDx0cmFuc2xhdGlvbi10ZWFtLXBsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogcGxcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSA/IDAgOiBuJTEwPj0yICYmIG4lMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJXYWRsaXd5IGJsb2sgJXUgcG96YSB6YWtyZXNlbSAtIHppZ25vcm93YW55LlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgc3ByYXdkemFuaWEgcG9wcmF3bm/Fm2NpIGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9pc2Nhbi5jOjExMCBlMmZzY2svc2NhbnRlc3QuYzoxMDcKKyM6IGUyZnNjay91bml4LmM6MTMzMiBlMmZzY2svdW5peC5jOjE0MjAgbWlzYy9iYWRibG9ja3MuYzoxMjE0CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjIgbWlzYy9iYWRibG9ja3MuYzoxMjM2IG1pc2MvYmFkYmxvY2tzLmM6MTI0OAorIzogbWlzYy9kdW1wZTJmcy5jOjU4OCBtaXNjL2UyaW1hZ2UuYzoxMTk2IG1pc2MvZTJpbWFnZS5jOjEzMjQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzcgbWlzYy9ta2UyZnMuYzoxOTYgbWlzYy90dW5lMmZzLmM6MTkwNyByZXNpemUvbWFpbi5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb3R3b3J6ZW5pYSAlcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBwb3BlbiAnJXMnIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6OTQgbWlzYy9ta2UyZnMuYzoyMDMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGluIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIGZpbGUiCittc2dzdHIgInBvZGN6YXMgd2N6eXR5d2FuaWEgeiBwbGlrdSBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEwNQorbXNnaWQgIndoaWxlIHVwZGF0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyB1YWt0dWFsbmlhbmlhIGktd8SZesWCYSB3YWRsaXdlZ28gYmxva3UiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogaWxsZWdhbCBibG9jayAldSBmb3VuZCBpbiBiYWQgYmxvY2sgaW5vZGUuICBDbGVhcmVkLlxuIgorbXNnc3RyICJVd2FnYTogem5hbGV6aW9ubyBuaWVkb3B1c3pjemFsbnkgYmxvayAldSB3IGktd8SZxbpsZSB3YWRsaXdlZ28gYmxva3UuIFd5Y3p5c3pjem9uby5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiQsWCxIVkIHByenkgb2RjenljaWUgYmxva3UgJWx1ICglcykgcG9kY3phcyAlcy4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJCxYLEhWQgcHJ6eSBvZGN6eWNpZSBibG9rdSAlbHUgKCVzKS4gIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIlppZ25vcm93YcSHIGLFgsSFZCIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJXeW11c2nEhyBwb25vd255IHphcGlzIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiQsWCxIVkIHByenkgemFwaXNpZSBibG9rdSAlbHUgKCVzKSBwb2RjemFzICVzLiAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJCxYLEhWQgcHJ6eSB6YXBpc2llIGJsb2t1ICVsdSAoJXMpLiAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJwdXN0ZSBibG9raSBrYXRhbG9ndSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICJwdXN0YSBtYXBhIGthdGFsb2d1IgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiUHVzdHkgYmxvayBrYXRhbG9ndSAldSAoIyVkKSB3IGktd8SZxbpsZSAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBuYXp3YV9wbGlrdSBsaWN6YmFfYmxva8OzdyByb3ptaWFyX2Jsb2t1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIk5pZWRvcHVzemN6YWxuYSBsaWN6YmEgYmxva8OzdyFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgYnVmb3JhIGJsb2t1IChyb3ptaWFyPSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyBkeXNrXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJCTEtGTFNCVUYgaW9jdGwgbm90IHN1cHBvcnRlZCEgIENhbid0IGZsdXNoIGJ1ZmZlcnMuXG4iCittc2dzdHIgImlvY3RsIEJMS0ZMU0JVRiBuaWUgb2JzxYJ1Z2l3YW55ISBOaWUgbW/FvG5hIG9wcsOzxbxuacSHIGJ1Zm9yw7N3LlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1GXSBbLUkgYmxva2lfYnVmb3JhX2ktd8SZesWCw7N3XSB1cnrEhWR6ZW5pZVxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAicG9kY3phcyBvdHdpZXJhbmlhICVzIHcgY2VsdSBvcHLDs8W8bmllbmlhIgorCisjOiBlMmZzY2svaXNjYW4uYzo4NiBlMmZzY2svdW5peC5jOjk2NyByZXNpemUvbWFpbi5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG9wcsOzxbxuaWVuaWEgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA5MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAicG9kY3phcyBvdHdpZXJhbmlhIG9icmF6dSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjExMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgcG9iaWVyYW5pYSBuYXN0xJlwbmVnbyBpLXfEmXrFgmEiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiUHJ6ZXN6dWthbm8gaS13xJl6xYLDs3c6ICV1LlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIm9kY3p5dCBzdXBlcmJsb2t1IGtyb25pa2lcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIgorbXNnc3RyICIlczogbmllIHpuYWxlemlvbm8gcG9wcmF3bmVnbyBzdXBlcmJsb2t1IGtyb25pa2lcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiBrcm9uaWthIHphIGtyw7N0a2FcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogb2R0d2FyemFuaWUgeiBrcm9uaWtpXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogb2R0d29yemVuaWUgeiBrcm9uaWtpIG5pZSB6b3N0YW5pZSB3eWtvbmFuZSB3IHRyeWJpZSB0eWxrbyBkbyBvZGN6eXR1XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBwb25vd25lZ28gb3R3YXJjaWEgJXMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXJvenN6ZXJ6b255IGF0cnlidXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFixYLEhWQgcG9kY3phcyBwcnp5ZHppZWxhbmlhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNQorbXNnaWQgImJibG9jayIKK21zZ3N0ciAiYmJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdG1hcGEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJja29tcHJlc2phIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDa29uZmxpa3QgeiBpbm55bSBAYmllbSBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaS13xJl6ZcWCIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJbmllZG9wdXN6Y3phbG55IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqa3JvbmlrYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRHVzdW5pxJl0eSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjMKK21zZ2lkICJkZGlyZWN0b3J5IgorbXNnc3RyICJka2F0YWxvZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImV3cGlzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNQorbXNnaWQgIkVAZSAnJURuJyBpbiAlcCAoJWkpIgorbXNnc3RyICJFQGUgJyVEbicgdyAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmc3lzdGVtIHBsaWvDs3ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGZGxhIGktd8SZesWCYSAlaSAoJVEpIHd5bm9zaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImdncnVwYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhAaSBAZHUgSFRSRUUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMwCittc2dpZCAibGxvc3QrZm91bmQiCittc2dzdHIgImxsb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkxqZXN0IGRvd2nEhXphbmllbSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibXdpZWxva3JvdG5pZSB6YWRla2xhcm93YW55IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMworbXNnaWQgIm5pbnZhbGlkIgorbXNnc3RyICJuYsWCxJlkbnkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvb3NpZXJvY29ueSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzUKK21zZ2lkICJwcHJvYmxlbSBpbiIKK21zZ3N0ciAicHByb2JsZW0gdyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFsaW1pdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicmfFgsOzd255IEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNwb3dpbm5vIGJ5xIciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlNzdXBlckBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MAorbXNnaWQgInV1bmF0dGFjaGVkIgorbXNnc3RyICJ1bmllZG/FgsSFY3pvbnkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidnVyesSFZHplbmllIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInhla3N0ZW50IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MworbXNnaWQgInp6ZXJvLWxlbmd0aCIKK21zZ3N0ciAienplcm93ZWogZMWCdWdvxZtjaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8cHVzdHkgaS13xJl6ZcWCPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTUKK21zZ2lkICI8VGhlIGJhZCBibG9ja3MgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIHdhZGxpd3ljaCBibG9rw7N3PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8aS13xJl6ZcWCIGxpbWl0w7N3IHXFvHl0a293bmlrw7N3PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPGktd8SZemXFgiBsaW1pdMOzdyBncnVwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPGktd8SZemXFgiBib290LWxvYWRlcmE+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPGktd8SZemXFgiBrYXRhbG9ndSB1bmRlbGV0ZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPGktd8SZemXFgiBkZXNrcnlwdG9yYSBncnVweT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPGktd8SZemXFgiBrcm9uaWtpPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjx6YXJlemVyd293YW55IGktd8SZemXFgiA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8emFyZXplcndvd2FueSBpLXfEmXplxYIgMTA+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzMworbXNnaWQgInJlZ3VsYXIgZmlsZSIKK21zZ3N0ciAicGxpayB6d3lrxYJ5IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNQorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAia2F0YWxvZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJ1cnrEhWR6ZW5pZSB6bmFrb3dlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAidXJ6xIVkemVuaWUgYmxva293ZSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDEKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJuYXp3YW55IHBvdG9rIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MworbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImRvd2nEhXphbmllIHN5bWJvbGljem5lIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NSBtaXNjL3V1aWRkLmM6MTYxCittc2dpZCAic29ja2V0IgorbXNnc3RyICJnbmlhemRvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJuaWV6bmFueSByb2R6YWogcGxpa3UgdHlwdSAwJW8iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIyCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2sgcG/Fm3JlZG5pIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNAorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiYmxvayBwb2R3w7NqbmllIHBvxZtyZWRuaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImJsb2sgcG90csOzam5pZSBwb8WbcmVkbmkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAiYmxvayB0xYJ1bWFjesSFY3kiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMwCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAiYmxvayAjIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgIndpZWxva3JvdG5pZSB6YWRla2xhcm93YW5hIG1hcGEgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MTAgZTJmc2NrL3Bhc3MxYi5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImLFgsSFZCB3ZXduxJl0cnpueTsgbmllIG1vxbxuYSB6bmFsZcW6xIcgZHVwX2JsayBkbGEgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJwb3dyw7N0IHogY2xvbmVfZmlsZV9ibG9jayIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiYsWCxIVkIHdld27EmXRyem55OiBuaWUgbW/FvG5hIHpuYWxlxbrEhyByZWtvcmR1IGJsb2t1IEVBIGRsYSAlbGx1IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55OiBuaWUgbW/FvG5hIHpuYWxlxbrEhyByZWtvcmR1IGktd8SZesWCYSBFQSBkbGEgJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAib2Rjenl0dSBibG9rdSBrYXRhbG9ndSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NTk4Cittc2dpZCAiaW4tdXNlIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSB1xbx5d2FueWNoIGktd8SZesWCw7N3IgorCisjOiBlMmZzY2svcGFzczEuYzo2MDkKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICJtYXBhIGktd8SZesWCw7N3IGthdGFsb2fDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjYxOQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIm1hcGEgaS13xJl6xYLDs3cgend5a8WCeWNoIHBsaWvDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIm1hcGEgdcW8eXdhbnljaCBibG9rw7N3IgorCisjOiBlMmZzY2svcGFzczEuYzo2OTUKK21zZ2lkICJvcGVuaW5nIGlub2RlIHNjYW4iCittc2dzdHIgInJvenBvY3p5bmFuaWEgcHJ6ZXN6dWtpd2FuaWEgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgInBvYmllcmFuaWEgbmFzdMSZcG5lZ28gaS13xJl6xYJhIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjM5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJQcnplYmllZyAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICJvZGN6eXR1IG5pZWJlenBvxZtyZWRuaWNoIGJsb2vDs3cgaS13xJl6xYJhICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAiYsWCxJlkbmEgbWFwYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM2OQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgImktd8SZemXFgiB3IG1hcGllIHdhZGxpd3ljaCBibG9rw7N3IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzg5Cittc2dpZCAiaW1hZ2ljIGlub2RlIG1hcCIKK21zZ3N0ciAibWFwYSBpLXfEmXrFgsOzdyBpbWFnaWMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAid2llbG9rcm90bmllIHphZGVrbGFyb3dhbmEgbWFwYSBibG9rw7N3IgorCisjOiBlMmZzY2svcGFzczEuYzoxNTI3Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJtYXBhIGJsb2vDs3cgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3IgorCisjOiBlMmZzY2svcGFzczEuYzoyMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiJTZsdSglYyk6IG9jemVraXdhbm8gJTZsdSwgb3RyenltYW5vIHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NjAKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgYmxva8OzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY2NgorbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiYml0bWFwYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY3MgorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJ0YWJsaWNhIGktd8SZesWCw7N3IgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIlByemViaWVnIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNQorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJOaWUgbW/FvG5hIGtvbnR5bnVvd2HEhy4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgd3lrb25hbnljaCBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3Bhc3MzLmM6ODYKK21zZ2lkICJQZWFrIG1lbW9yeSIKK21zZ3N0ciAiTmFqd2nEmWtzemUgdcW8eWNpZSBwYW1pxJljaSIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICJQcnplYmllZyAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImJpdG1hcGEgd3lrcnl3YW5pYSBwxJl0bGkgaS13xJl6xYLDs3ciCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiUHJ6ZWJpZWcgNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIlByemViaWVnIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKGJleiBweXRhbmlhKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiUG9wcmF3acSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzCittc2dpZCAiQ2xlYXIiCittc2dzdHIgIld5Y3p5xZtjacSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIlByemVuaWXFm8SHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIlByenlkemllbGnEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiUm96c3plcnp5xIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcKK21zZ2lkICJDb25uZWN0IHRvIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJEb8WCxIVjennEhyBkbyAvbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiV3ljennFm2NpxIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJVcmF0b3dhxIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAiVWNpxIXEhyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MQorbXNnaWQgIkNsZWFyIGlub2RlIgorbXNnc3RyICJXeWN6ecWbY2nEhyBpLXfEmXplxYIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIKK21zZ2lkICJBYm9ydCIKK21zZ3N0ciAiUHJ6ZXJ3YcSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIlBvZHppZWxpxIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiS29udHludW93YcSHIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIlNrbG9ub3dhxIcgd2llbG9rcm90bmllIHphZGVrbGFyb3dhbmUgYmxva2kiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiVXN1bsSFxIcgcGxpayIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworbXNnaWQgIlN1cHByZXNzIG1lc3NhZ2VzIgorbXNnc3RyICJQb21pbsSFxIcga29tdW5pa2F0eSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiT2TFgsSFY3p5xIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiV3ljennFm2NpxIcgaW5kZWtzIEhUcmVlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIk9kdHdvcnp5xIciCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihOSUMpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIlBPUFJBV0lPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICJXWUNaWVNaQ1pPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIlBSWkVOSUVTSU9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiUFJaWURaSUVMT05PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIlJPWlNaRVJaT05PIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlBPRMWBxIRDWk9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NgorbXNnaWQgIkNSRUFURUQiCittc2dzdHIgIlVUV09SWk9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NworbXNnaWQgIlNBTFZBR0VEIgorbXNnc3RyICJVUkFUT1dBTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIlNLUsOTQ09OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4OQorbXNnaWQgIklOT0RFIENMRUFSRUQiCittc2dzdHIgIkktV8SYWkXFgSBXWUNaWVNaQ1pPTlkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJQUlpFUldBTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAiUE9EWklFTE9OTyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MgorbXNnaWQgIkNPTlRJTlVJTkciCittc2dzdHIgIktPTlRZTlVBQ0pBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJTS0xPTk9XQU5PIFdJRUxPS1JPVE5JRSBaQURFS0xBUk9XQU5FIEJMT0tJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0Cittc2dpZCAiRklMRSBERUxFVEVEIgorbXNnc3RyICJQTElLIFVTVU5JxJhUWSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIlBPTUlOScSYVE8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiT0TFgcSEQ1pPTk8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcKK21zZ2lkICJIVFJFRSBJTkRFWCBDTEVBUkVEIgorbXNnc3RyICJJTkRFS1MgSFRSRUUgV1lDWllTWkNaT05ZIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAiWk9TVEFOSUUgT0RUV09SWk9OWSIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3Cittc2dpZCAiQGIgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiQEIgQGLDs3cgZGxhIGdydXB5ICVnIG5pZSBqZXN0IHcgZ3J1cGllLiAoQGIgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkBCIGktd8SZesWCw7N3IGRsYSBncnVweSAlZyBuaWUgamVzdCB3IGdydXBpZS4gKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNgorbXNnaWQgIiIKKyJAaSB0YWJsZSBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorIldBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4iCittc2dzdHIgIiIKKyJ0YWJsaWNhIGktd8SZesWCw7N3IGRsYSBncnVweSAlZyBuaWUgamVzdCB3IGdydXBpZS4gKEBiICViKVxuIgorIlVXQUdBOiBNT8W7TElXQSBQT1dBxbtOQSBVVFJBVEEgREFOWUNILlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgJVMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAUyBuaWUgbcOzZ8WCIGJ5xIcgb2Rjenl0YW55IGx1YiBuaWUgb3Bpc3VqZSBwcmF3aWTFgm93ZWdvIHN5c3RlbXVcbiIKKyJwbGlrw7N3IGV4dDIuIEplxbxlbGkgQHYgamVzdCBwcmF3aWTFgm93ZSBpIG5hcHJhd2TEmSB6YXdpZXJhXG4iCisiQGYgZXh0MiAobmllIGplc3Qgc3dhcGVtLCB1ZnMtZW0gYW5pIG5pY3p5bSBpbm55bSksXG4iCisidG8gQFMgamVzdCB1c3prb2R6b255IC0gbW/FvG5hIHByw7Nib3dhxIcgdXJ1Y2hvbWnEhyBlMmZzY2sgeiBpbm55bVxuIgorIkBTaWVtOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJSb3ptaWFyIHN5c3RlbXUgcGxpa8OzdyAod2VkxYJ1ZyBAU3UpIHd5bm9zaSAlYiBAYsOzd1xuIgorIkZpenljem55IHJvem1pYXIgdXJ6xIVkemVuaWEgd3lub3NpICVjIEBiw7N3XG4iCisiTW/FvGxpd2UsIMW8ZSBAUyBhbGJvIHRhYmxpY2EgcGFydHljamkgamVzdCB1c3prb2R6b25hIVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2NrX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbgorIy4gQC1leHBhbmRlZDogVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuCisjLiBALWV4cGFuZGVkOiBmcm9tIHRoZSBibG9jayBzaXplLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOAorbXNnaWQgIiIKKyJAUyBAYl9zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4iCisiVGhpcyB2ZXJzaW9uIG9mIGUyZnNjayBkb2VzIG5vdCBzdXBwb3J0IGZyYWdtZW50IHNpemVzIGRpZmZlcmVudFxuIgorImZyb20gdGhlIEBiIHNpemUuXG4iCittc2dzdHIgIiIKKyJXIEBTdSBibG9ja19zaXplIChyb3ptLiBibG9rdSkgPSAlYiwgZnJhZ3NpemUgKHJvem0uIGZyYWdtZW50dSkgPSAlYy5cbiIKKyJUYSB3ZXJzamEgZTJmc2NrIG5pZSBvYnPFgnVndWplIHJvem1pYXLDs3cgZnJhZ21lbnR1IHLDs8W8bnljaCBvZCByb3ptaWFydVxuIgorIkBidS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiVyBAU3UgYmxvY2tzX3Blcl9ncm91cCAoYmxva8OzdyB3IGdydXBpZSkgPSAlYiwgcG93aW5ubyBiecSHICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlcgQFN1IGZpcnN0X2RhdGFfYmxvY2sgKDEuIEBiIGRhbnljaCkgPSAlYiwgcG93aW5pZW4gYnnEhyAlY1xuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUKK21zZ2lkICIiCisiQGYgZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAZiBuaWUgbWlhxYIgVVVJRC1hOyB3eWdlbmVyb3dhbm8uXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IGplxZtsaSBqYWtpZcWbIGJsb2tpIGJpdG1hcCBpLXfEmXrFgsOzdyBsdWIgYmxva8OzdyBhbGJvIGN6xJnFm8SHXG4iCisidGFiZWxpIGktd8SZesWCw7N3IHd5bWFnYSByZWxva2FjamksIG1vxbxuYSB1cnVjaG9tacSHIG5hanBpZXJ3IGUyZnNja1xuIgorInogb3BjasSFICctYiAlUycuIFByb2JsZW0gbW/FvGUgdGt3acSHIHR5bGtvIHcgZGVza3J5cHRvcmFjaCBnxYLDs3duZWpcbiIKKyJncnVweSBibG9rw7N3LCBhIHphcGFzb3dlIGRlc2tyeXB0b3J5IGdydXB5IGJsb2vDs3cgbW9nxIUgYnnEhyBwb3ByYXduZS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIlpuYWxlemlvbm8gdXN6a29kemVuaWEgdyBAU3UuICglcyA9ICVOKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBAdjogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgb2tyZcWbbGFuaWEgcm96bWlhcnUgZml6eWN6bmVnbyB1cnrEhWR6ZW5pYTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3OQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAibGljem5payBpLXfEmXrFgsOzdyB3IEBTdSB3eW5vc2kgJWksIHBvd2luaWVuIGJ5xIcgJWouXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgzCittc2dpZCAiVGhlIEh1cmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmlsZXR5cGUgZmVhdHVyZS5cbiIKK21zZ3N0ciAiSHVyZCBuaWUgb2JzxYJ1Z3VqZSB3xYJhc25vxZtjaSBmaWxldHlwZS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJAUyBtYSBixYLEmWRuxIUga3JvbmlrxJkgKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJaZXduxJl0cnpuYSBAaiBtYSB3aWVsdSB1xbx5dGtvd25pa8OzdyBzeXN0ZW11IHBsaWvDs3cgKG5pZSBvYnPFgnVnaXdhbmUpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTgKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgem5hbGXFusSHIHpld27EmXRyem5laiBrcm9uaWtpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICJaZXduxJl0cnpuYSBAaiBtYSBixYLEmWRueSBAU1xuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIlpld27EmXRyem5hIEBqIG5pZSBvYnPFgnVndWplIHRlZ28gc3lzdGVtdSBwbGlrw7N3XG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCittc2dpZCAiIgorIkBmIEBqIEBTIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuIgorIkl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBAaiBmb3JtYXQuXG4iCisiSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiIgorIkBTIGtyb25pa2kgc3lzdGVtdSBwbGlrw7N3IG1hIG5pZXpuYW55IHR5cCAlTiAobmllIG9ic8WCdWdpd2FueSkuXG4iCisiTW/FvGxpd2UsIMW8ZSB0YSBrb3BpYSBlMmZzY2sgamVzdCBzdGFyYSBpL2x1YiBuaWUgb2JzxYJ1Z3VqZSB0ZWdvIGZvcm1hdHVcbiIKKyJrcm9uaWtpLlxuIgorIk1vxbxsaXdlIHRlxbwsIMW8ZSBAUyBrcm9uaWtpIGplc3QgdXN6a29kem9ueS5cbiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjIxCittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiQFMga3JvbmlraSBqZXN0IHVzemtvZHpvbnkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCAlcyBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiZmxhZ2EgaGFzX2pvdXJuYWwgQFN1IGplc3Qgd3l6ZXJvd2FuYSwgYWxlIEBqICVzIGlzdG5pZWplLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiQFMgbWEgdXN0YXdpb27EhSBmbGFnxJkgbmVlZHNfcmVjb3ZlcnksIGFsZSBuaWUgbWEga3JvbmlraS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzYKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgImZsYWdhIG5lZWRzX3JlY292ZXJ5IEBTdSBqZXN0IHd5emVyb3dhbmEsIGFsZSBAaiB6YXdpZXJhIGRhbmUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENsZWFyIGpvdXJuYWwKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQxCittc2dpZCAiQ2xlYXIgQGoiCittc2dzdHIgIld5Y3p5xZtjacSHIGtyb25pa8SZIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgIkBmIG1hIHVzdGF3aW9uZSBmbGFnaSBjZWNoLCBhbGUgbWEgd2Vyc2rEmSAwIHN5c3RlbXUgcGxpa8Ozdy4gIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCB1cHJhd25pZW5pYT0lSW0sIHJvem1pYXI9JUlzKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjU2Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiem5hbGV6aW9ubyBASSAlQiAoJWIpIHcgQG9tIGktd8SZxbpsZSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIkp1xbwgd3ljenlzemN6b25vICVCICglYikgem5hbGV6aW9ueSB3IEBvbSBpLXfEmcW6bGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIkBJIEBvIEBpICVpIHcgQFN1LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIkBJIEBpICVpIHcgbGnFm2NpZSBAb2NoIGktd8SZesWCw7N3LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc2Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkBTIGtyb25pa2kgbWEgdXN0YXdpb27EhSBuaWV6bmFuxIUgZmxhZ8SZIHR5bGtvIGRvIG9kY3p5dHUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiQFMga3JvbmlraSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBuaWV6bmFuZWogY2VjaHkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiV2Vyc2phIGtyb25pa2kgbmllIG9ic8WCdWdpd2FuYSBwcnpleiB0ZW4gZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlByemVub3N6ZW5pZSBrcm9uaWtpIHogLyVzIGRvIHVrcnl0ZWdvIGktd8SZesWCYS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiQsWCxIVkIHBvZGN6YXMgcHJ6ZW5vc3plbmlhIGtyb25pa2k6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMQorbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJabmFsZXppb25vIGLFgsSZZG5lIHBvbGEgQFN1IGtyb25pa2kgVjIgKHoga3JvbmlraSBWMSkuXG4iCisiQ3p5c3pjemVuaWUgcMOzbCBzcG96YSBAU3Uga3JvbmlraSBWMS4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA3Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiV3lrb25hxIcgemFwaXN5IHoga3JvbmlraSIKKworIy4gQC1leHBhbmRlZDogUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBzdXBlcmJsb2NrLCBzbyBydW5uaW5nIGpvdXJuYWwgYW55d2F5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxMgorbXNnaWQgIlJlY292ZXJ5IGZsYWcgbm90IHNldCBpbiBiYWNrdXAgQFMsIHNvIHJ1bm5pbmcgQGogYW55d2F5LlxuIgorbXNnc3RyICIiCisiRmxhZ2Egb2R0d29yemVuaWEgbmllIHVzdGF3aW9uYSB3IHphcGFzb3d5bSBAU3UsXG4iCisid2nEmWMgd3lrb251asSZIHphcGlzeSB6IGtyb25pa2kgbWltbyB0by5cbiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTcKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiVHdvcnplbmllIGtvcGlpIHphcGFzb3dlaiBpbmZvcm1hY2ppIHogQGJ1IGktd8SZesWCYSBrcm9uaWtpLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJAZiBuaWUgbWEgd8WCxIVjem9uZWdvIHJlc2l6ZV9pbm9kZSwgYWxlIHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuIgorInd5bm9zaSAlTjsgQHMgemVyby4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyOAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIlJlc2l6ZV9pbm9kZSBuaWUgd8WCxIVjem9uZSwgYWxlIGktd8SZemXFgiB6bWlhbnkgcm96bWlhcnUgamVzdCBuaWV6ZXJvd3kuICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJpLXfEmXplxYIgem1pYW55IHJvem1pYXJ1IChyZXNpemUpIG5pZXByYXdpZMWCb3d5LiAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCBtb3VudCB0aW1lICgldCxcbgorIy4gQC1leHBhbmRlZDogXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMzgKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICIiCisiQ3phcyBvc3RhdG5pZWdvIG1vbnRvd2FuaWEgQFN1ICgldCxcbiIKKyJcdHRlcmF6ID0gJVQpIGplc3QgdyBwcnp5c3rFgm/Fm2NpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQzCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIkN6YXMgb3N0YXRuaWVnbyB6YXBpc3UgQFN1ICgldCxcbiIKKyJcdHRlcmF6ID0gJVQpIGplc3QgdyBwcnp5c3rFgm/Fm2NpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJQb2Rwb3dpZWTFuiBAU3UgZGxhIHpld27EmXRyem5lZ28gc3VwZXJibG9rdSBwb3dpbm5hIGJ5xIcgJVguICIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRvZGF3YW5pZSBwb2Rwb3dpZWR6aSBkaXJoYXNoIGRvIHN5c3RlbXUgcGxpa8Ozdy5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBkZXNrcnlwdG9yYSBncnVweSAlZyB0byAlMDR4LCBwb3dpbm5hIHd5bm9zacSHICUwNHkuICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIkRlc2tyeXB0b3IgZ3J1cHkgJWcgb3puYWN6b255IGpha28gbmllIHphaW5pY2pvd2FueSBiZXogemJpb3J1IGNlY2guXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIkRlc2tyeXB0b3IgZ3J1cHkgJWcgbWEgYsWCxJlkbsSFIGxpY3pixJkgbmllIHXFvHl3YW55Y2ggaS13xJl6xYLDs3cgJWIuICIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzIKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIkBCIEBidSBvc3RhdG5pZWogZ3J1cHkgbmllemFpbmljam93YW5hLiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiVHJhbnNha2NqYSAlaSBrcm9uaWtpIGJ5xYJhIHVzemtvZHpvbmEsIG9kdHdhcnphbmllIHByemVyd2Fuby5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiRmxhZ3MgdGVzdF9mcyBqZXN0IHVzdGF3aW9uYSAoaSBleHQ0IGplc3QgZG9zdMSZcG55KS4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg2Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpICAiCittc2dzdHIgIiIKKyJDemFzIG9zdGF0bmllZ28gbW9udG93YW5pYSBAU3UgamVzdCB3IHByenlzesWCb8WbY2lcbiIKKyJcdChvIG1uaWVqIG5pxbwgZHppZcWELCB6YXBld25lIHogcG93b2R1IHrFgmVnbyB1c3Rhd2llbmlhIHplZ2FyYSBzcHJ6xJl0b3dlZ28pICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSAKKyMuIEAtZXhwYW5kZWQ6IHNldCkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzkyCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpLiAgIgorbXNnc3RyICIiCisiQ3phcyBvc3RhdG5pZWdvIHphcGlzdSBAU3UgamVzdCB3IHByenlzesWCb8WbY2lcbiIKKyJcdChvIG1uaWVqIG5pxbwgZHppZcWELCB6YXBld25lIHogcG93b2R1IHrFgmVnbyB1c3Rhd2llbmlhIHplZ2FyYSBzcHJ6xJl0b3dlZ28pICAiCisKKyMuIEAtZXhwYW5kZWQ6IE9uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5OAorbXNnaWQgIk9uZSBvciBtb3JlIEBiIEBnIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgIgorbXNnc3RyICJKZWRlbiBsdWIgd2nEmWNlaiBkZXNrcnlwdG9yw7N3IGdydXAgYmxva8OzdyBqZXN0IGLFgsSZZG55Y2guICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBsaWN6Ynkgd29sbnljaCBpLXfEmXrFgsOzdyBuYSAlaiAoYnnFgm8gJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDgKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgbGljemJ5IHdvbG55Y2ggQGLDs3cgbmEgJWMgKGJ5xYJvICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBNYWtpbmcgcXVvdGEgaW5vZGUgJWkgKCVRKSBoaWRkZW4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDEzCittc2dpZCAiTWFraW5nIEBxIEBpICVpICglUSkgaGlkZGVuLlxuIgorbXNnc3RyICJabWlhbmEgaS13xJl6xYJhIEBxw7N3IG5hIHVrcnl0eS5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4Cittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgIgorbXNnc3RyICJAUyBtYSBixYLEmWRueSBibG9rIE1NUC4gIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MjMKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAiCittc2dzdHIgIkBTIG1hIGLFgsSZZG7EhSBsaWN6YsSZIG1hZ2ljem7EhSBNTVAuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX29wZW4yOiAlbVxuIgorbXNnc3RyICJleHQyZnNfb3BlbjI6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19jaGVja19kZXNjOiAlbVxuIgorbXNnc3RyICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIlByemViaWVnIDE6IFNwcmF3ZHphbmllIGktd8SZesWCw7N3LCBAYsOzdyBpIHJvem1pYXLDs3dcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ0Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkByIG5pZSBqZXN0IEBkaWVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0OQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAiQHIgbWEgdXN0YXdpb255IGR0aW1lICh6YXBld25lIHByemV6IHN0YXJ5IG1rZTJmcykuICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlphcmV6ZXJ3b3dhbnkgQGkgJWkgKCVRKSBtYSBixYLEmWRuZSB1cHJhd25pZW5pYS4gIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiQEQgQGkgJWkgbWEgemVyb3d5IGR0aW1lLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIHVzZSwgYnV0IGhhcyBkdGltZSBzZXQuICAiCittc2dzdHIgIkBpICVpIGplc3QgdcW8eXdhbnksIGFsZSBtYSB1c3Rhd2lvbnkgZHRpbWUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSB6ZXJvLWxlbmd0aCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGEgQHogQGQuICAiCittc2dzdHIgIkBpICVpIGplc3QgQGRpZW0gQHouICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzQKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBAYsOzdyBncnVweSAlZyB3ICViIGplc3QgdyBrb25mbGlrY2llIHogaW5ueW0gQGJpZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc5Cittc2dpZCAiQGcgJWcncyBAaSBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiQEIgaS13xJl6xYLDs3cgZ3J1cHkgJWcgdyAlYiBqZXN0IHcga29uZmxpa2NpZSB6IGlubnltIEBiaWVtLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIHRhYmxlIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg0Cittc2dpZCAiQGcgJWcncyBAaSB0YWJsZSBhdCAlYiBAQy5cbiIKK21zZ3N0ciAidGFibGljYSBpLXfEmXrFgsOzdyBncnVweSAlZyB3ICViIGplc3QgdyBrb25mbGlrY2llIHogaW5ueW0gQGJpZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4OQorbXNnaWQgIkBnICVnJ3MgQGIgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBCIEBiw7N3IGdydXB5ICVnICglYikgamVzdCBixYLEmWRuYS4gIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJAQiBpLXfEmXrFgsOzdyBncnVweSAlZyAoJWIpIGplc3QgYsWCxJlkbmEuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTkKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX3NpemUgd3lub3NpICVJcywgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNAorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9ibG9ja3Mgd3lub3NpICVJYiwgQHMgJU4uICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIkBJICVCICglYikgdyBpLXfEmcW6bGUgJWkuICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBvdmVybGFwcyBmaWxlc3lzdGVtIG1ldGFkYXRhIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxNAorbXNnaWQgIiVCICglYikgb3ZlcmxhcHMgQGYgbWV0YWRhdGEgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgbmFrxYJhZGEgc2nEmSBuYSBtZXRhZGFuZSBzeXN0ZW11IHBsaWvDs3cgdyBpLXfEmcW6bGUgJWkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSAlaSBtYSBuaWVkb3B1c3pjemFsbmUgQGJpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiWmEgZHXFvG8gbmllZG9wdXN6Y3phbG55Y2ggQGLDs3cgdyBpLXfEmcW6bGUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBiYWQgQGIgQGkuICAiCittc2dzdHIgIkBJICVCICglYikgdyBpLXfEmcW6bGUgd2FkbGl3eWNoIEBiw7N3LiAiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzQKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkktd8SZemXFgiB3YWRsaXd5Y2ggQGLDs3cgbWEgbmllZG9wdXN6Y3phbG5lIEBiaS4gIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgb3IgYmFkIGJsb2NrIGluIHVzZSFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzkKK21zZ2lkICJEdXBsaWNhdGUgb3IgYmFkIEBiIGluIHVzZSFcbiIKK21zZ3N0ciAiUG9kd8Ozam55IGx1YiB3YWRsaXd5IEBiIGplc3QgdcW8eXdhbnkhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDQKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIldhZGxpd3kgQGIgJWIgamVzdCB1xbx5d2FueSBqYWtvIG5pZWJpZXpwb8WbcmVkbmkgQGIgaS13xJnFusWCYSB6IHdhZGxpd3ltIEBiaWVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkktd8SZemXFgiB6IHdhZGxpd3ltIEBiaWVtIHpvc3RhxYIgcHJhd2RvcG9kb2JuaWUgdXN6a29kem9ueS5cbiIKKyJQcmF3ZG9wb2RvYm5pZSBuYWxlxbxhxYJvYnkgdGVyYXogemF0cnp5bWHEhyBpIHVydWNob21pxIcgZTJmc2NrIC1jXG4iCisiYWJ5IHByemVzenVrYcSHIEBmIHBvZCBrxIV0ZW0gd2FkbGl3eWNoIGJsb2vDs3cuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiSmXFvGVsaSBAYiBqZXN0IG5hcHJhd2TEmSB3YWRsaXd5LCBAZiBuaWUgbW/FvGUgYnnEhyBuYXByYXdpb255LlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJNb8W8bmEgd3ljennFm2NpxIcgdGVuIEBiIHogbGlzdHkgd2FkbGl3eWNoIEBiw7N3IGkgbWllxIcgbmFkemllasSZLFxuIgorIsW8ZSBAYiBqZXN0IG5hcHJhd2TEmSBkb2JyeS4gQWxlIG5pZSBtYSB0YWtpZWogZ3dhcmFuY2ppLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJHxYLDs3dueSBAUyAoJWIpIGplc3QgbmEgbGnFm2NpZSB3YWRsaXd5Y2ggQGLDs3cuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MgorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJCbG9rICViIHogZGVza3J5cHRvcsOzdyBnxYLDs3duZWogZ3J1cHkgamVzdCBuYSBsacWbY2llIHdhZGxpd3ljaCBAYsOzd1xuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc4Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiVXdhZ2E6IHcgZ3J1cGllICVnIEBTICglYikgamVzdCB3YWRsaXd5LlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIGdyb3VwIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBibG9jayAoJWIpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4MworbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgQGcgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIEBiICglYikuXG4iCittc2dzdHIgIlV3YWdhOiBrb3BpYSBkZXNrcnlwdG9yw7N3IGdydXB5ICVnIG1hIGLFgsSZZG55IEBiICglYikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIkLFgsSFZCBwcm9ncmFtdT8gQGIgIyViIHV6bmFueSBiZXogcG93b2R1IHcgcHJvY2Vzc19iYWRfYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBICVOIGNpxIVnxYJ5Y2ggQGLDs3cgdyBncnVwaWUgQGLDs3cgJWcgZGxhICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiQEEgYnVmb3JhIEBiw7N3IGRvIHByemVub3N6ZW5pYSAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlByemVub3N6ZW5pZSB3IGdydXBpZSAlZyAlcyB6ICViIGRvICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUHJ6ZW5vc3plbmllIHcgZ3J1cGllICVnICVzIGRvICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJVd2FnYTogbmllIG1vxbxuYSBvZGN6eXRhxIcgQGJ1ICViIHogJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIwCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiVXdhZ2E6IG5pZSBtb8W8bmEgemFwaXNhxIcgQGJ1ICViIGRvICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NzQKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBiaXRtYXB5IGktd8SZesWCw7N3ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgYml0bWFweSBpLXfEmXrFgsOzdyAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiQEEgaW5mb3JtYWNqaSBvIGxpY3puaWt1IGRvd2nEhXphxYQgKGljb3VudCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgdGFibGljeSBAZGNoIEBiw7N3OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHByemVzenVraXdhbmlhIGktd8SZesWCw7N3ICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBpdGVyYWNqaSBwbyBAYmFjaCB3IGktd8SZxbpsZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTUKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YXBpc3UgaW5mb3JtYWNqaSBvIGxpY3piaWUgaS13xJl6xYLDs3cgKEBpPSVpLCBsaWN6YmE9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgemFwaXN1IGluZm9ybWFjamkgbyBAZGNoIEBiYWNoIChAaT0laSwgQGI9JWIsIGxpY3piYT0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIG9kY3p5dHUgaS13xJl6xYJhICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJAaSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBpbWFnaWMuICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIlNwZWNqYWxueSBwbGlrIChAdi9nbmlhemRvL3BvdG9rL2Rvd2nEhXphbmllKSAoQGkgJWkpIG1hIHVzdGF3aW9uxIVcbiIKKyJmbGFnxJkgbmllbmFydXN6YWxub8WbY2kgKGltbXV0YWJsZSkgbHViIGRvcGlzeXdhbmlhIChhcHBlbmQtb25seSkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGNvbXByZXNzaW9uIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBjb21wcmVzc2lvbiBzdXBwb3J0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgQGNpb24gZmxhZyBzZXQgb24gQGYgd2l0aG91dCBAY2lvbiBzdXBwb3J0LiAgIgorbXNnc3RyICIiCisiQGkgJWkgbWEgdXN0YXdpb27EhSBmbGFnxJkga29tcHJlc2ppIG5hIHN5c3RlbWllIHBsaWvDs3cgYmV6IG9ic8WCdWdpXG4iCisia29tcHJlc2ppLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFNwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpYWwgKEB2L3NvY2tldC9maWZvKSBAaSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gICIKK21zZ3N0ciAiU3BlY2phbG55IChAdi9nbmlhemRvL3BvdG9rL2Rvd2nEhXphbmllKSBAaSAlaSBtYSBuaWV6ZXJvd3kgcm96bWlhci4gIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaSBrcm9uaWtpIG5pZSBqZXN0IHXFvHl3YW55LCBhbGUgemF3aWVyYSBkYW5lLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJAaiBuaWUgamVzdCB6d3lrxYJ5bSBwbGlraWVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiQGkgJWkgYnnFgiBjesSZxZtjacSFIGxpc3R5IG9zaWVyb2NvbnljaCBpLXfEmXrFgsOzdy4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNgorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIlpuYWxlemlvbm8gaS13xJl6xYJ5LCBrdMOzcmUgYnnFgnkgY3rEmcWbY2nEhSB1c3prb2R6b25laiBsaXN0eSBzaWVyb3QuICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjEKK21zZ2lkICJAQSByZWZjb3VudCBzdHJ1Y3R1cmUgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgc3RydWt0dXJ5IHJlZmNvdW50ICglTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgb2Rjenl0dSBAYnUgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViIGRsYSBpLXfEmXrFgmEgJWkuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzEKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIkBpICVpIG1hIGLFgsSZZG55IEBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYi4gIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgb2Rjenl0dSBAYnUgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViICglbSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDEKK21zZ2lkICJAYSBAYiAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBAcyAlTi4gICIKK21zZ3N0ciAiQGIgcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3ICViIG1hIGxpY3pixJkgb2RuaWVzaWXFhCAlciwgcG93aW5ubyBiecSHICVOLiAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YXBpc3UgQGJ1IHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiAoJW0pLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgaF9ibG9ja3MgPiAxLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc1MQorbXNnaWQgIkBhIEBiICViIGhhcyBoX0BicyA+IDEuICAiCittc2dzdHIgIkBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiBtYSBoX2Jsb2NrcyA+IDEuICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU2Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkBBIEBidSByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiBqZXN0IHVzemtvZHpvbnkgKGtvbGl6amEgcHJ6eWR6aWVsYW5pYSkuICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkBiIHJvenN6ZXJ6b255Y2ggYXRyeWJ1dMOzdyAlYiBqZXN0IHVzemtvZHpvbnkgKGLFgsSZZG5hIG5hendhKS4gIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzcxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICJAYiByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgamVzdCB1c3prb2R6b255IChixYLEmWRuYSB3YXJ0b8WbxIcpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkBpICVpIGplc3QgemJ5dCBkdcW8eS4gIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHBvd29kdWplLCDFvGUgQGQgamVzdCB6Ynl0IGR1xbx5LiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg1Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIHBvd29kdWplLCDFvGUgcGxpayBqZXN0IHpieXQgZHXFvHkuICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgcG93b2R1amUsIMW8ZSBkb3dpxIV6YW5pZSBqZXN0IHpieXQgZHXFvGUuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBodHJlZSBzdXBwb3J0LlxuIgorbXNnc3RyICJAaSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBJTkRFWF9GTCBuYSBzeXN0ZW1pZSBwbGlrw7N3IGJleiBvYnPFgnVnaSBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkBpICVpIG1hIHVzdGF3aW9uxIUgZmxhZ8SZIElOREVYX0ZMLCBhbGUgbmllIGplc3QgQGRpZW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkBoICVpIG1hIGLFgsSZZG55IGfFgsOzd255IHfEmXplxYIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTAKK21zZ2lkICJAaCAlaSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICglTilcbiIKK21zZ3N0ciAiQGggJWkgbWEgbmllIG9ic8WCdWdpd2FuxIUgd2Vyc2rEmSBoYXN6YSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iCittc2dzdHIgIkBoICVpIHXFvHl3YSBuaWVrb21wYXR5YmlsbmVqIGZsYWdpIGfFgsOzd25lZ28gd8SZesWCYSBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIwCittc2dpZCAiQGggJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbiIKK21zZ3N0ciAiQGggJWkgbWEgemJ5dCBkdcW8xIUgZ8WCxJlib2tvxZvEhyBkcnpld2EgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNQorbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiSS13xJl6ZcWCIHogd2FkbGl3eW0gQGJpZW0gbWEgbmllYmV6cG/Fm3JlZG5pIEBiICglYikgYsSZZMSFY3lcbiIKKyJ3IGtvbmZsaWtjaWUgeiBtZXRhZGFueW1pIHN5c3RlbXUgcGxpa8Ozdy4gIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJUd29yemVuaWUvb2R0d2FyemFuaWUgaS13xJl6xYJhIHptaWFueSByb3ptaWFydSBuaWUgcG93aW9kxYJvIHNpxJk6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM2Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAaSAlaSBtYSBkb2RhdGtvd3kgcm96bWlhciAoJUlTKSwgY28gamVzdCBixYLEmWRuZVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdyBpLXfEmcW6bGUgJWkgbWEgbmFtZWxlbiAoJU4pLCBjbyBqZXN0IGLFgsSZZG5lXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdyBpLXfEmcW6bGUgJWkgbWEgcHJ6ZXN1bmnEmWNpZSB3YXJ0b8WbY2kgKCVOKSwgY28gamVzdCBixYLEmWRuZVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgYmxvY2sgKCVOKSB3aGljaCBpcyBpbnZhbGlkIChtdXN0IGJlIDApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgQGIgKCVOKSB3aGljaCBpcyBAbiAobXVzdCBiZSAwKVxuIgorbXNnc3RyICJAYSB3IGktd8SZxbpsZSAlaSBtYSBAYiB3YXJ0b8WbY2kgKCVOKSwgY28gamVzdCBixYLEmWRuZSAobXVzaSBiecSHIDApXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1NgorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSB3IGktd8SZxbpsZSAlaSBtYSByb3ptaWFyIHdhcnRvxZtjaSAoJU4pLCBjbyBqZXN0IGLFgsSZZG5lXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSB3IGktd8SZxbpsZSAlaSBtYSBoYXNoICglTiksIGNvIGplc3QgYsWCxJlkbmVcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiQGkgJWkgdG8gJUl0LCBhbGUgd3lnbMSFZGEgamFrYnkgdyByemVjenl3aXN0b8WbY2kgYnnFgiBrYXRhbG9naWVtLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBjenl0YW5pYSBwbyBAeGFjaCB3IGktd8SZxbpsZSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzYKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisiTmllIHVkYcWCbyBzacSZIHByemVqxZvEhyBla3N0ZW50w7N3IHcgaS13xJnFumxlICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgyCittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgbWEgQG4gZWtzdGVudFxuIgorIlx0KEBiIGxvZ2ljem55ICVjLCBAbiBAYiBmaXp5Y3pueSAlYiwgZMWCdWdvxZvEhyAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBtYSBixYLEmWRueSBla3N0ZW50XG4iCisiXHQoQGIgbG9naWN6bnkgJWMsIEBiIGZpenljem55ICViLCBixYLEmWRuYSBkxYJ1Z2/Fm8SHICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiQGkgJWkgbWEgdXN0YXdpb27EhSBmbGFnxJkgRVhURU5UU19GTCBuYSBzeXN0ZW1pZSBwbGlrw7N3IGJleiBvYnPFgnVnaSBla3N0ZW50w7N3LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiQGkgJWkgbWEgZm9ybWF0IHogZWtzdGVudGFtaSwgYWxlIHcgc3VwZXJibG9rdSBicmFrdWplIHfFgmHFm2Npd2/Fm2NpIEVYVEVOVFNcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4iCittc2dzdHIgIkBpICVpIG5pZSBtYSBmbGFnaSBFWFRFTlRfRkwsIGFsZSBqZXN0IHcgZm9ybWFjaWUgeiBla3N0ZW50YW1pXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiU3p5YmtpZSBkb3dpxIV6YW5pZSBzeW1ib2xpY3puZSAlaSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBFWFRFTlRfRkwuICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTIKK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1hIGVrc3RlbnR5IHNwb3phIGtvbGVqbm/Fm2NpXG4iCisiXHQoQGIgQGIgbG9naWN6bnkgJWMsIEBiIGZpenljem55ICViLCBkxYJ1Z2/Fm8SHICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIkBpICVpIG1hIGLFgsSZZG55IHfEmXplxYIgZWtzdGVudHUgKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBwcnpla3N6dGHFgmNhbmlhIGJpdG1hcHkgQGLDs3cgcG9ka2xhc3RyYTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjYKK21zZ2lkICJAcSBAaSBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJAaSBAccOzdyBuaWUgamVzdCB6d3lrxYJ5bSBwbGlraWVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzMQorbXNnaWQgIkBxIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaSBAccOzdyBuaWUgamVzdCB1xbx5d2FueSwgYWxlIHphd2llcmEgZGFuZS4gIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzNgorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIkBpIEBxw7N3IGplc3Qgd2lkb2N6bnkgZGxhIHXFvHl0a293bmlrYS4gIgorCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGxvb2tzIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQxCittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiSS13xJl6ZcWCIHdhZGxpd3ljaCBAYsOzdyB3eWdsxIVkYSBuYSBixYLEmWRueS4gIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkBpICVpIG1hIGVrc3RlbnQgemVyb3dlaiBkxYJ1Z2/Fm2NpXG4iCisiXHQoQG4gQGIgbG9naWN6bnkgJWMsIEBiIGZpenljem55ICViLCBkxYJ1Z2/Fm8SHICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyJQb3ppb20gd2V3bsSZdHJ6bmVnbyB3xJl6xYJhIGVrc3RlbnR1ICVOIGktd8SZesWCYSAlaTpcbiIKKyJQb2N6xIV0ZWsgbG9naWN6bnkgJWIgbmllIHpnYWR6YSBzacSZIHogcG9jesSFdGtpZW0gbG9naWN6bnltICVjIGtvbGVqbmVnbyBwb3ppb211LiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWksIGtvbmllYyBla3N0ZW50dSBwcnpla3JhY3phIGRvendvbG9uxIUgd2FydG/Fm8SHXG4iCisiXHQoQGIgbG9naWN6bnkgJWMsIEBiIGZpenljem55ICViLCBkxYJ1Z2/Fm8SHICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjcKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlVydWNoYW1pYW5pZSBkb2RhdGtvd3ljaCBwcnplYmllZ8OzdyBkbyByb3p3acSFemFuaWEgYmxva8OzdyB6YWRla2xhcm93YW55Y2hcbiIKKyJwcnpleiB3acSZY2VqIG5pxbwgamVkZW4gQGkuLi5cbiIKKyJQcnplYmllZyAxQjogUG9ub3duZSBwcnplc3p1a2l3YW5pZSBAbWNoIEBiw7N3XG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkBtIEBiKGkpIHcgaS13xJnFumxlICVpOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHN6dWthbmlhIGktd8SZesWCYSAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgYml0bWFweSBpLXfEmXrFgsOzdyAoaW5vZGVfZHVwX21hcCk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgaXRlcmFjamkgcG8gQGJhY2ggdyBpLXfEmcW6bGUgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAzIGUyZnNjay9wcm9ibGVtLmM6MTMxOAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgcG9wcmF3aWFuaWEgcmVmY291bnQgZGxhIEBidSByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgJWIgKEBpICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwOAorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiUHJ6ZWJpZWcgMUM6IFByemVzenVraXdhbmllIGthdGFsb2fDs3cgcG9kIGvEhXRlbSBpLXfEmXrFgsOzdyB6IEBtbWkgQGJhbWlcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE0Cittc2dpZCAiUGFzcyAxRDogUmVjb25jaWxpbmcgQG0gQGJzXG4iCittc2dzdHIgIlByemViaWVnIDFEOiBVemdhZG5pYW5pZSBAbWNoIEBiw7N3XG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE5Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIlBsaWsgJVEgKEBpICMlaSwgY3phcyBtb2R5ZmlrYWNqaSAlSU0pIFxuIgorIiAgbWEgJXIgQG1jaCBAYsOzdywgZHppZWxvbnljaCB6ICVOIHBsaWthbWk6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjUKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoQGkgIyVpLCBjemFzIG1vZHlmaWthY2ppICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwCittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PG1ldGFkYW5lIHN5c3RlbXUgcGxpa8Ozdz5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKEplc3QgJU4gaS13xJl6xYLDs3cgemF3aWVyYWrEhWN5Y2ggcG9kd8Ozam5pZSB6YWRla2xhcm93YW5lIEBiaS4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQb2R3w7NqbmllIHphZGVrbGFyb3dhbmUgQGJpIGp1xbwgcHJ6ZXBpc2FuZSBsdWIgc2tsb25vd2FuZS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgc2tsb25vd2HEhyBwbGlrdTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1OQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIlByemViaWVnIDI6IFNwcmF3ZHphbmllIHN0cnVrdHVyeSBAZMOzd1xuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBuIEBpIG51bWJlciBmb3IgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJCxYLEmWRueSBudW1lciBpLXfEmXrFgmEgZGxhICcuJyB3IGktd8SZxbpsZSBAZHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGludmFsaWQgaW5vZGUgIzogJURpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjkKK21zZ2lkICJARSBoYXMgQG4gQGkgIzogJURpLlxuIgorbXNnc3RyICJARSBtYSBixYLEmWRueSBudW1lciBpLXfEmXrFgmE6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzQKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiQEUgbWEgQEQvbmllIHXFvHl3YW55IEBpICVEaS4gIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc5Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFIEBMIGRvICcuJyAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NAorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJARSB3c2thenVqZSBuYSBAaSAoJURpKSBwb8WCb8W8b255IHcgd2FkbGl3eW0gQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIGRpcmVjdG9yeSAlUCAoJURpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg5Cittc2dpZCAiQEUgQEwgdG8gQGQgJVAgKCVEaSkuXG4iCittc2dzdHIgIkBFIEBMIGRvIEBkdSAlUCAoJURpKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gdGhlIHJvb3QgaW5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5NAorbXNnaWQgIkBFIEBMIHRvIHRoZSBAci5cbiIKK21zZ3N0ciAiQEUgQEwgZG8gZ8WCw7N3bmVnbyBrYXRhbG9ndS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTkKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBtYSBuaWVkb3B1c3pjemFsbmUgem5ha2kgdyBuYXp3aWUuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJCcmFrdWplICcuJyB3IGktd8SZxbpsZSBAZHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkJyYWt1amUgJy4uJyB3IGktd8SZxbpsZSBAZHUgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE0Cittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiUGllcndzenltIEBlZW0gJyVEbicgKEBpPSVEaSkgdyBpLXfEmcW6bGUgQGR1ICVpICglcCkgQHMgJy4nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiRHJ1Z2ltIEBlZW0gJyVEbicgKEBpPSVEaSkgdyBpLXfEmcW6bGUgQGR1ICVpIEBzICcuLidcbiIKKworIy4gQC1leHBhbmRlZDogaV9mYWRkciBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSUYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjQKK21zZ2lkICJpX2ZhZGRyIEBGICVJRiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM0Cittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mcmFnIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM5Cittc2dpZCAiaV9mcmFnIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDQKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUgKCVJbSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0OQorbXNnaWQgIkBpICVpICglUSkgaGFzIEBuIG1vZGUgKCVJbSkuXG4iCittc2dzdHIgIkBpICVpICglUSkgbWEgYsWCxJlkbmUgdXByYXduaWVuaWEgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkBpIEBkdSAlaSwgJUIsIG9mZnNldCAlTjogQGQgdXN6a29kem9ueVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1OQorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuIgorbXNnc3RyICJAaSBAZHUgJWksICVCLCBvZmZzZXQgJU46IG5hendhIHBsaWt1IHpieXQgZMWCdWdhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NAorbXNnaWQgIkBkIEBpICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gICIKK21zZ3N0ciAiQGkgQGR1ICVpIG1hIG5pZSBwcnp5ZHppZWxvbnkgJUIuICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGUgQGR1ICcuJyB3IGktd8SZxbpsZSBAZHUgJWkgbmllIGplc3QgemFrb8WEY3pvbnkgcHJ6ZXogTlVMTFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkBlIEBkdSAnLi4nIHcgaS13xJnFumxlIEBkdSAlaSBuaWUgamVzdCB6YWtvxYRjem9ueSBwcnpleiBOVUxMXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBqZXN0IEBJbSBAdm0gem5ha293eW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgamVzdCBASW0gQHZtIEBib3d5bS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODkKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICJARSBqZXN0IHBvd2llbG9ueW0gQGVlbSAnLicuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5NAorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICJARSBqZXN0IHBvd2llbG9ueW0gQGVlbSAnLi4nLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTkgZTJmc2NrL3Byb2JsZW0uYzoxNDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVybmFsIGVycm9yOiBjb3VsZG4ndCBmaW5kIGRpcl9pbmZvIGZvciAlaS5cbiIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55OiBuaWUgbW/FvG5hIHpuYWxlxbrEhyBkaXJfaW5mbyBkbGEgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNAorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIkBFIG1hIHJlY19sZW4gJURyLCBAcyAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgc3RydWt0dXJ5IGljb3VudDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgaXRlcmFjamkgcG8gQGJhY2ggQGR1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIG9kY3p5dHUgQGIgJWIgQGR1IChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgemFwaXN1IEBiICViIEBkdSAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIG5vd2VnbyBAYnUgQGR1IGRsYSBpLXfEmXrFgmEgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6d2FsbmlhbmlhIGktd8SZesWCYSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJAZSBAZHUgZGxhICcuJyB3ICVwICglaSkgamVzdCBkdcW8eS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBqZXN0IEBJbSBGSUZPLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBqZXN0IEBJbSBnbmlhemRlbS5cbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJyVEbicgaW4gJXAgKCVpKSB0byAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU0Cittc2dpZCAiU2V0dGluZyBmaWxldHlwZSBmb3IgQEUgdG8gJU4uXG4iCittc2dzdHIgIlVzdGF3aW9ubyBmaWxldHlwZSBkbGEgQGV1ICclRG4nIHcgJXAgKCVpKSBuYSAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTkKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIG1hIGLFgsSZZG55IGZpbGV0eXBlIChiecWCICVEdCwgcG93aW5pZW4gYnnEhyAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY0Cittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAiQEUgbWEgdXN0YXdpb25lIGZpbGV0eXBlLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2OQorbXNnaWQgIkBFIGhhcyBhIEB6IG5hbWUuXG4iCittc2dzdHIgIkBFIG1hIG5henfEmSB6ZXJvd2VqIGTFgnVnb8WbY2kuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiRG93acSFemFuaWUgc3ltYm9saWN6bmUgJVEgKEBpICMlaSkgamVzdCBixYLEmWRuZS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3OQorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJAYiByb3pzemVyem9ueWNoIGF0cnlidXTDs3cgZGxhIGktd8SZesWCYSAlaSAoJVEpIGplc3QgYsWCxJlkbnkgKCVJZikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg0Cittc2dpZCAiQGYgY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gQFMuXG4iCittc2dzdHIgIkBmIHphd2llcmEgZHXFvGUgcGxpa2ksIGFsZSBicmFrIGZsYWdpIExBUkdFX0ZJTEUgdyBAU3UuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODkKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbmllIG1hIG9kd2/FgmHFhFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiAlQiBtYSBwb2R3w7NqbmUgb2R3b8WCYW5pZVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiAlQiBtYSBixYLEmWRueSBtaW5pbWFsbnkgaGFzelxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDQKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiAlQiBtYSBixYLEmWRueSBtYWtzeW1hbG55IGhhc3pcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA5Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiQsWCxJlkbmUgQGggJWQgKCVxKS4gIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTMKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkICglcSk6IGLFgsSZZG55IG51bWVyIEBidSAlYi5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6IHJvb3Qgbm9kZSBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyMworIywgYy1mb3JtYXQKK21zZ2lkICJAcCBAaCAlZDogcm9vdCBub2RlIGlzIEBuXG4iCittc2dzdHIgIkBwIGktd8SZxbpsZSBAZHUgSFRSRUUgJWQ6IGfFgsOzd255IHfEmXplxYIgamVzdCBixYLEmWRueVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgbGltaXQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjgKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGxpbWl0ICglTilcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgYsWCxJlkbnkgbGltaXQgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgY291bnQgKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzMKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiQHAgaS13xJnFumxlIEBkdSBIVFJFRSAlZDogJUIgbWEgYsWCxJlkbnkgbGljem5payAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiAlQiBtYSBuaWUgdXBvcnrEhWRrb3dhbsSFIHRhYmxpY8SZIGhhc3p1asSFY8SFXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MworbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJAcCBpLXfEmcW6bGUgQGR1IEhUUkVFICVkOiAlQiBtYSBixYLEmWRuxIUgZ8WCxJlib2tvxZvEhyAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDgKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIlpuYWxlemlvbm8gcG9kd8Ozam55IEBFLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTMKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiQEUgbWEgbmlldW5pa2FsbsSFIG5henfEmSBwbGlrdS5cbiIKKyJabWllbmnEhyBuYSAlcyIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiWm5hbGV6aW9ubyBwb2R3w7NqbnkgQGUgJyVEbicuXG4iCisiXHRaYXpuYWN6b25vICVwICglaSkgZG8gcHJ6ZWJ1ZG93YW5pYS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogaV9ibG9ja3NfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjMKK21zZ2lkICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2OAorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiTmllb2N6ZWtpd2FueSBAYiB3IGktd8SZxbpsZSBAZHUgSFRSRUUgJWQgKCVxKVxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzIKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiQGkgJURpIHpuYWxlemlvbnkgdyBncnVwaWUgJWcsIGt0w7NyYSBtYSB1c3Rhd2lvbsSFIGZsYWfEmSBfSU5PTkVfVU5JTklULlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzcKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiQGkgJURpIHpuYWxlemlvbnkgdyBncnVwaWUgJWcgb2JzemFydSBuaWUgdcW8eXdhbnljaCBpLXfEmXrFgsOzdy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4MgorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODkKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICJQcnplYmllZyAzOiBTcHJhd2R6YW5pZSDFgsSFY3pub8WbY2kgQGTDs3dcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTQKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJAciBqZXN0IG5pZSBwcnp5ZHppZWxvbnkuICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiQnJhayBtaWVqc2NhIHcgQGR1IEBsLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIk5pZSBwb2TFgsSFY3pvbnkgQGkgQGR1ICVpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyAvQGwuICIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTQKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAiJy4uJyB3ICVRICglaSkgamVzdCAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgb3Igbm9uLWV4aXN0ZW50IC9sb3N0K2ZvdW5kLiAgQ2Fubm90IHJlY29ubmVjdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE5Cittc2dpZCAiQmFkIG9yIG5vbi1leGlzdGVudCAvQGwuICBDYW5ub3QgcmVjb25uZWN0LlxuIgorbXNnc3RyICJCxYLEmWRueSBsdWIgbmllIGlzdG5pZWrEhWN5IC9AbC4gTmllIG1vxbxuYSBwb2TFgsSFY3p5xIcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiTmllIG1vxbxuYSByb3pzemVyennEhyAvQGw6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHBvZMWCxIVjennEhyAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvQGw6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHN6dWthbmlhIC9AbDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19ibG9jazogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGI6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfYmxvY2s6ICVtIHBvZGN6YXMgcHLDs2J5IHV0d29yemVuaWEgQGR1IC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19pbm9kZTogJW0gcG9kY3phcyBwcsOzYnkgdXR3b3J6ZW5pYSBAZHUgL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSBwb2RjemFzIHR3b3J6ZW5pYSBub3dlZ28gQGJ1IEBkdVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHBvZGN6YXMgemFwaXN1IEBidSBAZHUgZGxhIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBwb3ByYXdpYW5pYSBsaWN6YnkgaS13xJl6xYLDs3cgdyBpLXfEmcW6bGUgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEgcG9wcmF3acSHIHJvZHppY2EgaS13xJl6xYJhICVpOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEgcG9wcmF3acSHIHJvZHppY2EgaS13xJl6xYJhICVpOiBuaWUgem5hbGV6aW9ubyB3cGlzdSBAZHUgcm9kemljYVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB0d29yemVuaWEgZ8WCw7N3bmVnbyBAZHUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgdHdvcnplbmlhIEBkdSAvQGwgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODkKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkByIG5pZSBqZXN0IEBkaWVtOyBwcnplcndhbmllLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk0Cittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJOaWUgbW/FvG5hIGtvbnR5bnVvd2HEhyBiZXogZ8WCw7N3bmVnbyBrYXRhbG9ndS5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL0BsIG5pZSBqZXN0IEBkaWVtIChAaT0laSlcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTExCittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICJQcnplYmllZyAzQTogT3B0eW1hbGl6YWNqYSBrYXRhbG9nw7N3XG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiVHdvcnplbmllIGl0ZXJhdG9yYSBkaXJzX3RvX2hhc2ggbmllIHBvd2lvZMWCbyBzacSZOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MjEKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIk9wdHltYWxpemFjamEga2F0YWxvZ3UgJXEgKCVkKSBuaWUgcG93aW9kxYJhIHNpxJk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyNgorbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAiT3B0eW1hbGl6YWNqYSBrYXRhbG9nw7N3OiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQcnplYmllZyA0OiBTcHJhd2R6YW5pZSBsaWN6bmlrw7N3IG9kd2/FgmHFhFxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkB1IEBpIEB6ICVpLiAiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIkB1IEBpICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgImxpY3puaWsgb2R3b8WCYcWEIGktd8SZesWCYSAlaSB3eW5vc2kgJUlsLCBAcyAlTi4gIgorCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NjIKK21zZ2lkICIiCisiV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbiIKKyJcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXMgJU4sIEBpLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBAcyB0aGUgc2FtZSFcbiIKK21zZ3N0ciAiIgorIlVXQUdBOiBCxYHEhEQgUFJPR1JBTVUgVyBFMkZTQ0shXG4iCisiXHRMVUIgS1RPxZogQkVaTcOTWkdJIChUWSkgU1BSQVdEWkEgUE9ETU9OVE9XQU5ZICjFu1lXWSkgU1lTVEVNIFBMSUvDk1cuXG4iCisiaW5vZGVfbGlua19pbmZvWyVpXT0lTiwgaW5vZGUuaV9saW5rc19jb3VudD0lSWwuIFBvd2lubnkgYnnEhyB0YWtpZSBzYW1lIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTcyCittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIlByemViaWVnIDU6IFNwcmF3ZHphbmllIHN1bWFyeWN6bnljaCBpbmZvcm1hY2ppIG8gQGdjaFxuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzcKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIld5cGXFgm5pZW5pZSBuYSBrb8WEY3UgYml0bWFweSBpLXfEmXrFgsOzdyBuaWUgamVzdCB1c3Rhd2lvbmUuICIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTgyCittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGIgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJXeXBlxYJuaWVuaWUgbmEga2/FhGN1IGJpdG1hcHkgQGLDs3cgbmllIGplc3QgdXN0YXdpb25lLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODcKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJSw7PFvG5pY2UgYml0bWFweSBAYsOzdzogIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA3Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiUsOzxbxuaWNlIGJpdG1hcHkgaS13xJl6xYLDs3c6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjcKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSB3b2xueWNoIGktd8SZesWCw7N3IGRsYSBncnVweSAjJWcgKCVpLCBuYWxpY3pvbm8gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzMgorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIGthdGFsb2fDs3cgZGxhIGdydXB5ICMlZyAoJWksIG5hbGljem9ubyAlaikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSB3b2xueWNoIGktd8SZesWCw7N3ICglaSwgbmFsaWN6b25vICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDIKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSB3b2xueWNoIEBiw7N3IGRsYSBncnVweSAjJWcgKCViLCBuYWxpY3pvbm8gJWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDcKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgd29sbnljaCBAYsOzdyAoJWIsIG5hbGljem9ubyAlYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjUyCittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICJCxYHEhEQgUFJPR1JBTVU6IGtvxYRjZSBiaXRtYXAgc3lzdGVtdSBwbGlrw7N3ICgjJU4pICglYiwgJWMpIG5pZSB6Z2FkemFqxIUgc2nEmSB6IHBvbGljem9ueW1pIGtvxYRjYW1pIGJpdG1hcCAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTgKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55OiBmYcWCc3p5d3kga29uaWVjIGJpdG1hcHkgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIGtvcGlvd2FuaWEgdyB6YXN0xJlwY3plaiBiaXRtYXBpZSBpLXfEmXrFgsOzdzogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBrb3Bpb3dhbmlhIHcgemFzdMSZcGN6ZWogYml0bWFwaWUgQGLDs3c6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIkBiKGkpIGdydXB5ICVnIHPEhSB1xbx5d2FuZSwgYWxlIEBnIG1hIGZsYWfEmSBCTE9DS19VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiaS13xJl6xYJ5IGdydXB5ICVnIHPEhSB1xbx5d2FuZSwgYWxlIEBnIG1hIGZsYWfEmSBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzA1Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIk9kdHdvcnp5xIcga3JvbmlrxJkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxMAorbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICJVYWt0dWFsbmnEhyBpbmZvcm1hY2plIG8gbGltaXRhY2ggdHlwdSAlTiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxODI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaGFuZGxlZCBlcnJvciBjb2RlICgweCV4KSFcbiIKK21zZ3N0ciAiTmllIG9ic8WCdcW8b255IGtvZCBixYLEmWR1ICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTU0IGUyZnNjay9wcm9ibGVtLmM6MTk1OAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIlpJR05PUk9XQU5PIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiVcW8eXRhIHBhbWnEmcSHOiAlZCwgdXDFgnluxIXFgiBjemFzOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgInJvem1pYXIgaS13xJl6xYJhPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgInBvZGN6YXMgcm96cG9jenluYW5pYSBwcnplc3p1a2l3YW5pYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTMwCittc2dpZCAid2hpbGUgZG9pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAicG9kY3phcyBwcnplc3p1a2l3YW5pYSBpLXfEmXrFgsOzdyIKKworIzogZTJmc2NrL3N1cGVyLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZm9yIGlub2RlICVkIgorbXNnc3RyICJwb2RjemFzIHd5d2/FgmFuaWEgZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgZGxhIGktd8SZesWCYSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJwb2RjemFzIHd5d2/FgmFuaWEgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZGxhIGktd8SZesWCYSAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiU2tyYWNhbmllIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzMKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAiQ3p5c3pjemVuaWUiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiU2vFgmFkbmlhOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2tdIFstQiByb3ptX2Jsb2t1XVxuIgorIlx0XHRbLUkgYmxva8Ozd19idWZvcmFfaS13xJl6xYLDs3ddIFstUCByb3ptaWFyX2ktd8SZesWCYV1cbiIKKyJcdFx0Wy1sfC1MIHBsaWtfd2FkbGl3eWNoX2Jsb2vDs3ddIFstQyBmZF0gWy1qIHpld24ta3JvbmlrYV1cbiIKKyJcdFx0Wy1FIHJvenN6ZXJ6b25lLW9wY2plXSB1cnrEhWR6ZW5pZVxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQXdhcnlqbmEgcG9tb2M6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXR5Y3puZSBuYXByYXdpYW5pZSAoYmV6IHB5dGHFhClcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTmllIHd5a29ueXdhbmllIHptaWFuIHcgc3lzdGVtaWUgcGxpa8Ozd1xuIgorIiAteSAgICAgICAgICAgICAgICAgICBQcnp5asSZY2llIG9kcG93aWVkemkgXCJ0YWtcIiBuYSB3c3p5c3RraWUgcHl0YW5pYVxuIgorIiAtYyAgICAgICAgICAgICAgICAgICBTenVrYW5pZSB3YWRsaXd5Y2ggYmxva8OzdyBpIGRvZGFuaWUgaWNoIGRvIGxpc3R5XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIFd5bXVzemVuaWUgc3ByYXdkemVuaWEgbmF3ZXQgXCJjenlzdGVnb1wiIHN5c3RlbXUgcGxpa8Ozd1xuIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgUG9rYXp5d2FuaWUgd2nEmWtzemVqIGlsb8WbY2kgaW5mb3JtYWNqaVxuIgorIiAtYiBzdXBlcmJsb2sgICAgICAgICBVxbx5Y2llIGlubmVnbyBzdXBlcmJsb2t1XG4iCisiIC1CIHJvem0uYmxva3UgICAgICAgIFd5bXVzemVuaWUgcm96bWlhcnUgYmxva3UgcHJ6eSBwb3N6dWtpd2FuaXUgc3VwZXJibG9rdVxuIgorIiAtaiB6ZXduLWtyb25pa2EgICAgICBVc3Rhd2llbmllIHBvxYJvxbxlbmlhIHpld27EmXRyem5laiBrcm9uaWtpXG4iCisiIC1sIHBsaWtfesWCeWNoX2Jsb2vDs3cgRG9kYW5pZSBkbyBsaXN0eSB3YWRsaXd5Y2ggYmxva8Ozd1xuIgorIiAtTCBwbGlrX3rFgnljaF9ibG9rw7N3IFVzdGF3aWVuaWUgbGlzdHkgd2FkbGl3eWNoIGJsb2vDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IHBsaWvDs3cgKCUwZC4lZCUlIG5pZWNpxIVnxYJ5Y2gpLCAlbGx1LyVsbHUgYmxva8Ozd1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSBpbm9kZSB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IGlub2RlcyB1c2VkICglMi4yZiUlLCBvdXQgb2YgJXUpXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlMTJ1IHXFvHl0eSBpLXfEmXplxYIgKCUyLjJmJSUgeiAldSlcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUgdcW8eXRlIGktd8SZesWCeSAoJTIuMmYlJSB6ICV1KVxuIgorbXNnc3RyWzJdICIiCisiXG4iCisiJTEydSB1xbx5dHljaCBpLXfEmXrFgsOzdyAoJTIuMmYlJSB6ICV1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBwbGlrIG5pZWNpxIVnxYJ5ICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBwbGlraSBuaWVjacSFZ8WCZSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMl0gIiUxMnUgcGxpa8OzdyBuaWVjacSFZ8WCeWNoICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBrYXRhbG9nIG5pZWNpxIVnxYJ5ICglMGQuJWQlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBrYXRhbG9naSBuaWVjacSFZ8WCZSAoJTBkLiVkJSUpXG4iCittc2dzdHJbMl0gIiUxMnUga2F0YWxvZ8OzdyBuaWVjacSFZ8WCeWNoICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICBsaWN6YmEgaS13xJl6xYLDs3cgeiBibG9rYW1pIGluZC9kaW5kL3RpbmQ6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIEhpc3RvZ3JhbSBnxYLEmWJva2/Fm2NpIGVrc3RlbnTDs3c6ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUgdcW8eXR5IGJsb2sgKCUyLjJmJSUgeiAlbGx1KVxuIgorbXNnc3RyWzFdICIlMTJsbHUgdcW8eXRlIGJsb2tpICglMi4yZiUlIHogJWxsdSlcbiIKK21zZ3N0clsyXSAiJTEybGx1IHXFvHl0eWNoIGJsb2vDs3cgKCUyLjJmJSUgeiAlbGx1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSB3YWRsaXd5IGJsb2tcbiIKK21zZ3N0clsxXSAiJTEydSB3YWRsaXdlIGJsb2tpXG4iCittc2dzdHJbMl0gIiUxMnUgd2FkbGl3eWNoIGJsb2vDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBkdcW8eSBwbGlrXG4iCittc2dzdHJbMV0gIiUxMnUgZHXFvGUgcGxpa2lcbiIKK21zZ3N0clsyXSAiJTEydSBkdcW8eWNoIHBsaWvDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgend5a8WCeSBwbGlrXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IHp3eWvFgmUgcGxpa2lcbiIKK21zZ3N0clsyXSAiIgorIlxuIgorIiUxMnUgend5a8WCeWNoIHBsaWvDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IGthdGFsb2dcbiIKK21zZ3N0clsxXSAiJTEydSBrYXRhbG9naVxuIgorbXNnc3RyWzJdICIlMTJ1IGthdGFsb2fDs3dcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgcGxpayB1cnrEhWR6ZW5pYSB6bmFrb3dlZ29cbiIKK21zZ3N0clsxXSAiJTEydSBwbGlraSB1cnrEhWR6ZcWEIHpuYWtvd3ljaFxuIgorbXNnc3RyWzJdICIlMTJ1IHBsaWvDs3cgdXJ6xIVkemXFhCB6bmFrb3d5Y2hcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHBsaWsgdXJ6xIVkemVuaWEgYmxva293ZWdvXG4iCittc2dzdHJbMV0gIiUxMnUgcGxpa2kgdXJ6xIVkemXFhCBibG9rb3d5Y2hcbiIKK21zZ3N0clsyXSAiJTEydSBwbGlrw7N3IHVyesSFZHplxYQgYmxva293eWNoXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgcG90b2tcbiIKK21zZ3N0clsxXSAiJTEydSBwb3Rva2lcbiIKK21zZ3N0clsyXSAiJTEydSBwb3Rva8Ozd1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlMTJ1IGRvd2nEhXphbmllXG4iCittc2dzdHJbMV0gIiUxMnUgZG93acSFemFuaWFcbiIKK21zZ3N0clsyXSAiJTEydSBkb3dpxIV6YcWEXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBkb3dpxIV6YW5pZSBzeW1ib2xpY3puZSIKK21zZ3N0clsxXSAiJTEydSBkb3dpxIV6YW5pYSBzeW1ib2xpY3puZSIKK21zZ3N0clsyXSAiJTEydSBkb3dpxIV6YcWEIHN5bWJvbGljem55Y2giCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgc3p5YmtpZSBkb3dpxIV6YW5pZSBzeW1ib2xpY3puZSlcbiIKK21zZ3N0clsxXSAiICgldSBzenlia2llIGRvd2nEhXphbmlhIHN5bWJvbGljem5lKVxuIgorbXNnc3RyWzJdICIgKCV1IHN6eWJraWNoIGRvd2nEhXphxYQgc3ltYm9saWN6bnljaClcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiUxMnUgZ25pYXpkb1xuIgorbXNnc3RyWzFdICIlMTJ1IGduaWF6ZGFcbiIKK21zZ3N0clsyXSAiJTEydSBnbmlhemRcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSBwbGlrXG4iCittc2dzdHJbMV0gIiUxMnUgcGxpa2lcbiIKK21zZ3N0clsyXSAiJTEydSBwbGlrw7N3XG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTgzIG1pc2MvdHVuZTJmcy5jOjE5ODUgbWlzYy91dGlsLmM6MTQ3CisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJwb2RjemFzIHNwcmF3ZHphbmlhLCBjenkgJXMgamVzdCB6YW1vbnRvd2FueS4iCisKKyM6IGUyZnNjay91bml4LmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiVXdhZ2EhICVzIGplc3QgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIlcyBqZXN0ICVzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisiTmllIG1vxbxuYSBrb250eW51b3dhxIcsIHByemVyd2Fuby5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJVV0FHQSEhISBTeXN0ZW0gcGxpa8OzdyBqZXN0IHphbW9udG93YW55LiBLb250eW51YWNqYSAqKipTUE9XT0RVSkUqKipcbiIKKyIqKipQT1dBxbtORSoqKiB1c3prb2R6ZW5pZSBzeXN0ZW11IHBsaWvDs3cuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY5Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICJOYXByYXdkxJkga29udHludW93YcSHPyIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAic3ByYXdkemFuaWUgcHJ6ZXJ3YW5lLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2MQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgemF3aWVyYSBzeXN0ZW0gcGxpa8OzdyB6IGLFgsSZZGFtaSIKKworIzogZTJmc2NrL3VuaXguYzozNjMKK21zZ2lkICIgd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCIKK21zZ3N0ciAiIG5pZSBiecWCIGN6eXN0byBvZG1vbnRvd2FueSIKKworIzogZTJmc2NrL3VuaXguYzozNjUKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIGNlY2h5IGfFgsOzd25lZ28gc3VwZXJibG9rdSByw7PFvG5pxIUgc2nEmSBvZCBrb3BpaSB6YXBhc293ZWoiCisKKyM6IGUyZnNjay91bml4LmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgYmVlbiBtb3VudGVkICV1IHRpbWVzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGJ5xYIgbW9udG93YW55ICV1IHJhenkgYmV6IHNwcmF3ZHphbmlhIgorCisjOiBlMmZzY2svdW5peC5jOjM3NgorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICIgbWEgY3phcyBvc3RhdG5pZWdvIHNwcmF3ZHplbmlhIHN5c3RlbXUgcGxpa8OzdyB3IHByenlzesWCb8WbY2kiCisKKyM6IGUyZnNjay91bml4LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIHByemV0cndhxYIgJXUgZG5pIGJleiBzcHJhd2R6YW5pYSIKKworIzogZTJmc2NrL3VuaXguYzozOTEKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCB3eW11c3pvbm8gc3ByYXdkemVuaWUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiVzOiBjenlzdHksICV1LyV1IHBsaWvDs3csICVsbHUvJWxsdSBibG9rw7N3IgorCisjOiBlMmZzY2svdW5peC5jOjQ0MworbXNnaWQgIiAoY2hlY2sgZGVmZXJyZWQ7IG9uIGJhdHRlcnkpIgorbXNnc3RyICIgKHNwcmF3ZHplbmllIHdzdHJ6eW1hbmU7IHphc2lsYW5pZSB6IGJhdGVyaWkpIgorCisjOiBlMmZzY2svdW5peC5jOjQ0NgorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIiAoc3ByYXdkemVuaWUgcG8gbmFzdMSZcG55bSBtb250b3dhbml1KSIKKworIzogZTJmc2NrL3VuaXguYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiKHNwcmF3ZHplbmllIHphICVsZCBtb250b3dhxYQpIgorCisjOiBlMmZzY2svdW5peC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJCxYHEhEQ6IE5pZSBtb8W8bmEgb3R3b3J6ecSHIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiQsWCxJlkbmEgd2Vyc2phIEVBLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiTmllem5hbmEgb3BjamEgcm96c3plcnpvbmE6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gZTJmc2NrIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiQsWCxIVkIHNrxYJhZG5pIHcgcGxpa3Uga29uZmlndXJhY3lqbnltIGUyZnNjayAoJXMsIGxpbmlhICVkKVxuIgorIlx0JXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgdmFsaWRhdGluZyBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIGtvbnRyb2xpIGRlc2tyeXB0b3JhIHBsaWt1ICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5MgorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIkLFgsSZZG5lIGluZm9ybWFjamUgZG9wZcWCbmlhasSFY2UgZGVza3J5cHRvcmEgcGxpa8OzdyIKKworIzogZTJmc2NrL3VuaXguYzo4MDcKK21zZ2lkICJPbmx5IG9uZSBvZiB0aGUgb3B0aW9ucyAtcC8tYSwgLW4gb3IgLXkgbWF5IGJlIHNwZWNpZmllZC4iCittc2dzdHIgIk1vxbxuYSBwb2RhxIcgdHlsa28gamVkbsSFIHogb3BjamkgLXAvLWEsIC1uIGx1YiAteS4iCisKKyM6IGUyZnNjay91bml4LmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICJPcGNqYSAtdCBuaWUgamVzdCBvYnPFgnVnaXdhbmEgcHJ6ZXogdMSZIHdlcnNqxJkgZTJmc2NrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg1OSBlMmZzY2svdW5peC5jOjkzMSBtaXNjL3R1bmUyZnMuYzo4MTEgbWlzYy90dW5lMmZzLmM6MTEwMAorIzogbWlzYy90dW5lMmZzLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgcm96d2nEhXphxIcgJyVzJyIKKworIzogZTJmc2NrL3VuaXguYzo5MTAKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIk9wY2plIC1uIGkgLUQgc8SFIG5pZWtvbXBhdHliaWxuZS4iCisKKyM6IGUyZnNjay91bml4LmM6OTE1Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJPcGNqZSAtbiBpIC1jIHPEhSBuaWVrb21wYXR5YmlsbmUuIgorCisjOiBlMmZzY2svdW5peC5jOjkyMAorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiT3BjamUgLW4gaSAtbC8tTCBzxIUgbmlla29tcGF0eWJpbG5lLiIKKworIzogZTJmc2NrL3VuaXguYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJPcGNqZSAtYyBvcmF6IC1sLy1MIG5pZSBtb2fEhSBiecSHIHBvZGFuZSBqZWRub2N6ZcWbbmllLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBuaWUgamVzdCBsaWN6YsSFIGNhxYJrb3dpdMSFXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkLFgsSZZG55IGFyZ3VtZW50IG5pZWxpY3pib3d5IGRsYSAtJWMgKFwiJXNcIilcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlIHdhaXQuLi5cbiIKK21zZ3N0ciAiUHJ6ZWR6aWHFgiBNTVAgdG8gJXUgc2VrLCBhIGNhxYJrb3dpdHkgY3phcyBvY3pla2l3YW5pYSAldSBzZWsuIFByb3N6xJkgY3pla2HEhy4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJwb2RjemFzIHNwcmF3ZHphbmlhIGJsb2t1IE1NUCIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ0IG1pc2MvdHVuZTJmcy5jOjE5MTIKK21zZ2lkICIiCisiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKyIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iCittc2dzdHIgIiIKKyJKZcWbbGkgc3lzdGVtIHBsaWvDs3cgbmllIGplc3QgbmEgcGV3bm8gdcW8eXdhbnkgcHJ6ZXogxbxhZGVuIHN5c3RlbSwgbW/FvG5hIHVydWNob21pxIc6XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHt1cnrEhWR6ZW5pZX0nXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiQsWCxIVkOiB3ZXJzamEgYmlibGlvdGVraSBleHQyZnMgamVzdCB6YSBzdGFyYSFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjAyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgaW5pY2phbGl6YWNqaSBwcm9ncmFtdSIKKworIzogZTJmc2NrL3VuaXguYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0VcW8eXdhbmUgJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImludGVyYWt0eXduYSBuYXByYXdhIHd5bWFnYSB0ZXJtaW5hbGEiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIHByw7NiYSB1xbx5Y2lhIHphcGFzb3d5Y2ggYmxva8Ozdy4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTIKK21zZ2lkICJTdXBlcmJsb2NrIGludmFsaWQsIgorbXNnc3RyICJTdXBlcmJsb2sgYsWCxJlkbnksIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTMKK21zZ2lkICJHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiIKK21zZ3N0ciAiRGVza3J5cHRvcnkgZ3J1cCB3eWdsxIVkYWrEhSDFumxlLi4uIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICIlczogJXMgcG9kY3phcyBwcsOzYnkgdcW8eWNpYSB6YXBhc293eWNoIGJsb2vDs3ciCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBwb3dyYWNhbmllIGRvIG9yeWdpbmFsbmVnbyBzdXBlcmJsb2t1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTMzNQorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSByZXZpc2lvbiBpcyBhcHBhcmVudGx5IHRvbyBoaWdoIGZvciB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorIihPciB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQpXG4iCisiXG4iCittc2dzdHIgIiIKKyJXZXJzamEgc3lzdGVtdSBwbGlrw7N3IGplc3QgemJ5dCBkdcW8YSBkbGEgdGVqIHdlcnNqaSBlMmZzY2suXG4iCisiKGx1YiBzdXBlcmJsb2sgc3lzdGVtdSBwbGlrw7N3IGplc3QgdXN6a29kem9ueSlcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQxCittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiQ3p5IHRvIG1vxbxlIGplc3QgcGFydHljamEgemVyb3dlaiBkxYJ1Z2/Fm2NpP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IG11c3QgaGF2ZSAlcyBhY2Nlc3MgdG8gdGhlIGZpbGVzeXN0ZW0gb3IgYmUgcm9vdFxuIgorbXNnc3RyICJUcnplYmEgbWllxIcgZG9zdMSZcCAlcyBkbyBzeXN0ZW11IHBsaWvDs3cgbHViIGJ5xIcgcm9vdGVtXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0OQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBvciBzd2FwIGRldmljZT9cbiIKK21zZ3N0ciAiWmFwZXduZSBuaWUgaXN0bmllasSFY2UgdXJ6xIVkemVuaWUgbHViIHN3YXA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1MgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyB6YW1vbnRvd2FueSBsdWIgb3R3YXJ0eSBuYSB3ecWCxIVjem5vxZvEhyBwcnpleiBpbm55IHByb2dyYW0/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIlphcGV3bmUgbmllIGlzdG5pZWrEhWNlIHVyesSFZHplbmllP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkR5c2sgemFiZXpwaWVjem9ueSBwcnplZCB6YXBpc2VtOyBtb8W8bmEgdcW8ecSHIG9wY2ppIC1uIGFieSBzcHJhd2R6acSHXG4iCisidXJ6xIVkemVuaWUgdyB0cnliaWUgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDIzCittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJQb3RyemViYSBub3dzemVqIHdlcnNqaSBlMmZzY2shIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAicG9kY3phcyBzcHJhd2R6YW5pYSBrcm9uaWtpIGV4dDMgZGxhICVzIgorCisjOiBlMmZzY2svdW5peC5jOjE0NzgKK21zZ2lkICJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSBjaGVjay5cbiIKK21zZ3N0ciAiIgorIlV3YWdhOiBwb21pbmnEmXRvIG9kdHdhcnphbmllIHoga3JvbmlraSB6IHBvd29kdSBzcHJhd2R6YW5pYSB3IHRyeWJpZSB0eWxrb1xuIgorImRvIG9kY3p5dHUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc2V0IHN1cGVyYmxvY2sgZmxhZ3Mgb24gJXNcbiIKK21zZ3N0ciAibmllIG1vxbxuYSB1c3Rhd2nEhyBmbGFnIHN1cGVyYmxva3UgbmEgJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJwb2RjemFzIG9kdHdhcnphbmlhIHoga3JvbmlraSBleHQzIGRsYSAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgbWEgd8WCxIVjem9uZSBuaWUgb2JzxYJ1Z2l3YW5lIGNlY2h5OiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IHV3YWdhOiBvYnPFgnVnYSBrb21wcmVzamkgamVzdCBla3NwZXJ5bWVudGFsbmEuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiJXM6IGUyZnNjayBza29tcGlsb3dhbnkgYmV6IG9ic8WCdWdpIEhUUkVFLFxuIgorIlx0YWxlIHN5c3RlbSBwbGlrw7N3ICVzIG1hIGthdGFsb2dpIEhUUkVFLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZVxuIgorbXNnc3RyICIlczogJXMgcG9kY3phcyBvZGN6eXR1IGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8Ozd1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1OTcKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIk5pZSB3csOzxbx5IHRvIGRvYnJ6ZSwgYWxlIHNwcsOzYnVqxJkga29udHludW93YcSHLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIlR3b3J6ZW5pZSBrcm9uaWtpICglZCBibG9rw7N3KTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDgKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIFd5a29uYW5vLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDkKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKioga3JvbmlrYSB6b3N0YcWCYSBwb25vd25pZSB1dHdvcnpvbmEgLSBzeXN0ZW0gcGxpa8OzdyB0byB6bm93dSBleHQzICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzIKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiUmVzdGFydCBlMmZzY2sgb2QgcG9jesSFdGt1Li4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3NgorbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICJwb2RjemFzIHJlc2V0b3dhbmlhIGtvbnRla3N0dSIKKworIzogZTJmc2NrL3VuaXguYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgcHJ6ZXJ3YW55LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODgKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICJwcnplcndhbm8iCisKKyM6IGUyZnNjay91bml4LmM6MTcwMCBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogU1lTVEVNIFBMSUvDk1cgWk1PRFlGSUtPV0FOWSAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogV1lNQUdBTlkgUkVTVEFSVCBMSU5VS1NBICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxMiBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogVVdBR0E6IFN5c3RlbSBwbGlrw7N3IG5hZGFsIG1hIGLFgsSZZHkgKioqKioqKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3NTIKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm8iCittc2dzdHIgInBvZGN6YXMgdXN0YXdpYW5pYSBpbmZvcm1hY2ppIG8gc3VtaWUga29udHJvbG5laiBncnVweSBibG9rw7N3IgorCisjOiBlMmZzY2svdXRpbC5jOjE5MCBtaXNjL3V0aWwuYzo3MAorbXNnaWQgInlZIgorbXNnc3RyICJ0VHlZIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJuTiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjx0PiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxuPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAodC9uKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgImFudWxvd2FubyFcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyMzgKK21zZ2lkICJ5ZXNcbiIKK21zZ3N0ciAidGFrXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmllXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBuaWVcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyB0YWtcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgInRhayIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJubyIKK21zZ3N0ciAibmllIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgImUyZnNja19yZWFkX2JpdG1hcHM6IG5pZWRvcHVzemN6YWxuZSBibG9raSBiaXRtYXB5IGRsYSAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJvZGN6eXR1IGJpdG1hcCBpLXfEmXrFgsOzdyBpIGJsb2vDs3ciCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInBvZGN6YXMgcG9uYXdpYW5pYSBwcsOzYnkgb2Rjenl0dSBiaXRtYXAgZGxhICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgInphcGlzdSBiaXRtYXAgYmxva8OzdyBpIGktd8SZesWCw7N3IgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJwb2RjemFzIHBvbm93bmVnbyB6YXBpc3UgYml0bWFwIGJsaWvDs3cgaSBpLXfEmXrFgsOzdyBkbGEgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogTklFT0NaRUtJV0FOQSBOSUVTUMOTSk5PxZrEhjsgVFJaRUJBIFVSVUNIT01JxIYgZnNjayBSxJhDWk5JRS5cbiIKKyJcdCh0em4uIGJleiBvcGNqaSAtYSBhbmkgLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiVcW8eXRhIHBhbWnEmcSHOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVtb3J5IHVzZWQ6ICVsdSwgIgorbXNnc3RyICJVxbx5dGEgcGFtacSZxIc6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJjemFzOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbGFwc2VkIHRpbWU6ICU2LjNmXG4iCittc2dzdHIgInVwxYJ5bsSFxYIgY3phczogJTYuZlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjQ0NyBlMmZzY2svdXRpbC5jOjQ2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IGktd8SZesWCYSAlbHUgdyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgInBvZGN6YXMgemFwaXN1IGktd8SZesWCYSAlbHUgdyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgInBvZGN6YXMgcHJ6eWR6aWVsYW5pYSBidWZvcmEgemVydWrEhWNlZ28iCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzIHJ1bm5pbmcuXG4iCittc2dzdHIgIk5JRU9DWkVLSVdBTkEgTklFU1DDk0pOT8WaxIY6IHN5c3RlbSBwbGlrw7N3IHpvc3RhxYIgem1vZHlmaWtvd2FueSBwb2RjemFzIGR6aWHFgmFuaWEgZnNjay5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2OQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgInpha2/FhGN6b25vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1iIGJsb2NrX3NpemVdIFstaSBpbnB1dF9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBibG9ja3NfYXRfb25jZV0gWy1kIGRlbGF5X2ZhY3Rvcl9iZXR3ZWVuX3JlYWRzXSBbLWUgbWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorIlNrxYJhZG5pYTogJXMgWy1iIHJvem1fYmxva3VdIFstaSBwbGlrX3dlal0gWy1vIHBsaWtfd3lqXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxva8Ozd19uYXJhel0gWy1kIHdzcF9vcMOzxbpuX21pxJlkenlfb2Rjenl0YW1pXVxuIgorIiAgICAgICBbLWUgbWFrc193YWRsaXd5Y2hfYmxva8Ozd10gWy1wIHByemViaWVnw7N3XVxuIgorIiAgICAgICBbLXQgd3rDs3JfdGVzdG93eSBbLXQgd3rDs3JfdGVzdG93eSBbLi4uXV1dXG4iCisiICAgICAgIHVyesSFZHplbmllIFtvc3RhdG5pX2Jsb2sgW3BpZXJ3c3p5X2Jsb2tdXVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisiJXM6IE9wY2plIC1uIGkgLXcgd3lrbHVjemFqxIUgc2nEmSB3emFqZW1uaWUuXG4iCisiXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIkdvdG93ZSB3ICU2LjJmJSUsIG1pbsSZxYJvICVzIChixYLEmWTDs3c6ICVkLyVkLyVkKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdG93YW5pZSB3em9yY2VtIGxvc293eW06ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiVGVzdG93YW5pZSB3em9yY2VtIDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJwb2RjemFzIHByemVza2FraXdhbmlhIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIkR6aXduYSB3YXJ0b8WbxIcgKCVsZCkgdyBkb19yZWFkXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAicG9kY3phcyBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAicG9kY3phcyByb3pwb2N6eW5hbmlhIGl0ZXJhY2ppIHBvIGxpxZtjaWUgd2FkbGl3eWNoIGJsb2vDs3ciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJwb2RjemFzIHByenlkemllbGFuaWEgYnVmb3LDs3ciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIlNwcmF3ZHphbmllIGJsb2vDs3cgb2QgJWx1IGRvICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUxMgorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIGluIHJlYWQtb25seSBtb2RlXG4iCittc2dzdHIgIlBvc3p1a2l3YW5pZSB3YWRsaXd5Y2ggYmxva8OzdyB3IHRyeWJpZSB0eWxrbyBkbyBvZGN6eXR1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJQb3N6dWtpd2FuaWUgd2FkbGl3eWNoIGJsb2vDs3cgKHR5bGtvIG9kY3p5dCk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJaYnl0IGR1xbxvIHdhZGxpd3ljaCBibG9rw7N3LCBwcnplcndhbmllIHRlc3R1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjA5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlBvc3p1a2l3YW5pZSB3YWRsaXd5Y2ggYmxva8OzdyB3IHRyeWJpZSBvZGN6eXR1IGkgemFwaXN1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJPZCBibG9rdSAlbHUgZG8gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIk9kY3p5dCBpIHBvcsOzd255d2FuaWU6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIlBvc3p1a2l3YW5pZSB3YWRsaXd5Y2ggYmxva8OzdyB3IHRyeWJpZSB6IG5pZWRlc3RydWt0eXdueW0gemFwaXNlbVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJQb3N6dWtpd2FuaWUgd2FkbGl3eWNoIGJsb2vDs3cgKG9kY3p5dCBpIG5pZWRlc3RydWt0eXdueSB6YXBpcylcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIk90cnp5bWFubyBwcnplcndhbmllLCBzcHJ6xIV0YW1cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJwb2RjemFzIHphcGlzdSB0ZXN0b3d5Y2ggZGFueWNoLCBibG9rICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgamVzdCB6YW1vbnRvd2FueTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5MAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJiYWRibG9ja3Mgd3ltdXN6b25lIG1pbW8gdG8uIE1hbSBuYWR6aWVqxJksIMW8ZSAvZXRjL210YWIgc2nEmSBteWxpLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5NQorbXNnaWQgIml0J3Mgbm90IHNhZmUgdG8gcnVuIGJhZGJsb2NrcyFcbiIKK21zZ3N0ciAibmllIGplc3QgYmV6cGllY3puaWUgdXJ1Y2hhbWlhxIcgYmFkYmxvY2tzIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgamVzdCBuYWp3eXJhxbpuaWVqIHXFvHl3YW55IHByemV6IHN5c3RlbTsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmFkYmxvY2tzIHd5bXVzem9uZSBtaW1vIHRvLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJixYLEmWRueSAlcyAtICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAibmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgd3pvcnplY190ZXN0b3d5IC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJXIHRyeWJpZSBvZGN6eXR1LXphcGlzdSBtb8W8bmEgcG9kYcSHIG5hand5xbxlaiBqZWRlbiB3em9yemVjIHRlc3Rvd3kiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2OQorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlcgdHJ5YmllIHNhbWVnbyBvZGN6eXR1IG5pZSBtb8W8bmEgcG9kYcSHIHd6b3JjYV90ZXN0b3dlZ28iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiTmllIG1vxbxuYSBva3JlxZtsacSHIHJvem1pYXJ1IHVyesSFZHplbmlhOyB0cnplYmEgcG9kYcSHXG4iCisicm96bWlhciByxJljem5pZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBva3JlxZtsZW5pYSByb3ptaWFydSB1cnrEhWR6ZW5pYSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAib3N0YXRuaSBibG9rIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDAKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAicGllcndzenkgYmxvayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnRpbmcgYmxvY2sgKCVsdSk6IG11c3QgYmUgbGVzcyB0aGFuICVsdSIKK21zZ3N0ciAiYsWCxJlkbnkgcG9jesSFdGtvd3kgYmxvayAoJWx1KTogbXVzaSBiecSHIG1uaWVqc3p5IG5pxbwgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNTkKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyBpbi1tZW1vcnkgYmFkIGJsb2NrcyBsaXN0IgorbXNnc3RyICJwb2RjemFzIHR3b3J6ZW5pYSBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyB3IHBhbWnEmWNpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNzQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJwb2RjemFzIGRvZGF3YW5pYSBkbyBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyB3IHBhbWnEmWNpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlByemViaWVnIHpha2/FhGN6b255LCB6bmFsZXppb25vICV1IHdhZGxpd3ljaCBibG9rw7N3IChixYLEmWTDs3c6ICVkLyVkLyVkKS5cbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJTa8WCYWRuaWE6ICVzIFstUlZmXSBbLSs9QWFDY0RkZWlqc1N1XSBbLXYgd2Vyc2phXSBwbGlraS4uLlxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgImLFgsSZZG5hIHdlcnNqYSAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBzdGF0ICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgZmxhZyAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiRmxhZ2kgJXMgdXN0YXdpb25vIGpha28gIgorCisjOiBtaXNjL2NoYXR0ci5jOjIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgZmxhZyAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIldlcnNqYSAlcyB1c3Rhd2lvbmEgamFrbyAlbHVcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgd2Vyc2ppICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBwYXRoIHZhcmlhYmxlIGluIGNoYXR0cl9kaXJfcHJvYyIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgem1pZW5uZWogcGF0aCB3IGNoYXR0cl9kaXJfcHJvYyIKKworIzogbWlzYy9jaGF0dHIuYzozMDYKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBqZXN0IG5pZWtvbXBhdHliaWxuZSB6IC0gaSArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE0Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIlRyemViYSB1xbx5xIcgJy12JywgPSwgLSBsdWIgK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2s9PG51bWVyPl0gWy1vIGJsb2Nrc2l6ZT08cm96bWlhcj5dIHVyesSFZHplbmllXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2vDs3ciCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAia2xhc3Ryw7N3IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXBhICVsdTogKEJsb2tpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENoZWNrc3VtIDB4JTA0eCIKK21zZ3N0ciAiICBTdW1hIGtvbnRyb2xuYSAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKE9DWkVLSVdBTkEgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCBuaWUgdcW8eXdhbnljaCBpLXfEmXrFgsOzdzogJXVcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICVzIHN1cGVyYmxvayBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiR8WCw7N3bnkiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlphcGFzb3d5IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIERlc2tyeXB0b3J5IGdydXAgcG9kICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgWmFyZXplcndvd2FuZSBibG9raSBHRFQgcG9kICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyOAorIywgYy1mb3JtYXQKK21zZ2lkICIgR3JvdXAgZGVzY3JpcHRvciBhdCAiCittc2dzdHIgIiwgRGVza3J5cHRvcnkgZ3J1cCBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM0Cittc2dpZCAiICBCbG9jayBiaXRtYXAgYXQgIgorbXNnc3RyICIgIEJpdG1hcGEgYmxva8OzdyBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIGJpdG1hcGEgaS13xJl6xYLDs3cgcG9kICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MgorbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgVGFibGljYSBpLXfEmXrFgsOzdyBwb2QgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgICV1IGZyZWUgJXMsICV1IGZyZWUgaW5vZGVzLCAldSBkaXJlY3RvcmllcyVzIgorbXNnc3RyICIiCisiXG4iCisiICB3b2xueWNoICUyJHM6ICUxJHUsIHdvbG55Y2ggaS13xJl6xYLDs3c6ICUzJHUsIGthdGFsb2fDs3c6ICU0JHUlNSRzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJXUgdW51c2VkIGlub2Rlc1xuIgorbXNnc3RyICIsIG5pZSB1xbx5d2FueWNoIGktd8SZesWCw7N3OiAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIFdvbG5lIGJsb2tpOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNjkKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgV29sbmUgaS13xJl6xYJ5OiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAicG9kY3phcyB3eXBpc3l3YW5pYSBsaXN0eSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiV2FkbGl3ZSBibG9raTogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzA2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgaS13xJl6xYJhIGtyb25pa2kiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInBvZGN6YXMgb3R3aWVyYW5pYSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJDZWNoeSBrcm9uaWtpOiAgICAgICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiUm96bWlhciBrcm9uaWtpOiAgICAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJExYJ1Z2/Fm8SHIGtyb25pa2k6ICAgICAgICAgICAgICAldVxuIgorIlNla3dlbmNqYSBrcm9uaWtpOiAgICAgICAgICAgIDB4JTA4eFxuIgorIlBvY3rEhXRlayBrcm9uaWtpOiAgICAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiQsWCxIVkIGtyb25pa2k6ICAgICAgICAgICAgICVkXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjIyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgb2Rjenl0dSBzdXBlcmJsb2t1IGtyb25pa2kiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJOaWUgbW/FvG5hIHpuYWxlxbrEhyBtYWdpY3pueWNoIGxpY3piIHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiUm96bWlhciBibG9rdSBrcm9uaWtpOiAgICAgICAgJXVcbiIKKyJExYJ1Z2/Fm8SHIGtyb25pa2k6ICAgICAgICAgICAgICAldVxuIgorIlBpZXJ3c3p5IGJsb2sga3JvbmlraTogICAgICAgICV1XG4iCisiU2Vrd2VuY2phIGtyb25pa2k6ICAgICAgICAgICAgMHglMDh4XG4iCisiUG9jesSFdGVrIGtyb25pa2k6ICAgICAgICAgICAgICV1XG4iCisiTGljemJhIHXFvHl0a293bmlrw7N3IGtyb25pa2k6ICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiVcW8eXRrb3duaWN5IGtyb25pa2k6ICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjYgbWlzYy90dW5lMmZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgZG8gYW5hbGl6eSBvcGNqaSFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBwYXJhbWV0ciBzdXBlcmJsb2NrOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgYmxvY2tzaXplOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiUG9kYW5vIGLFgsSZZG5lIG9wY2plIHJvenN6ZXJ6b25lOiAlcy5cbiIKKyJcbiIKKyJPcGNqZSByb3pzemVyem9uZSBzxIUgb2RkemllbGFuZSBwcnplY2lua2FtaSBpIG1vZ8SFIHByenlqbW93YcSHIHBhcmFtZXRyLFxuIgorIlx0a3TDs3J5IGplc3QgdXN0YXdpYW55IHpuYWtpZW0gJz0nLlxuIgorIlxuIgorIlBvcHJhd25lIG9wY2plIHJvenN6ZXJ6b25lIHRvOlxuIgorIlx0c3VwZXJibG9jaz08bnVtZXIgc3VwZXJibG9rdT5cbiIKKyJcdGJsb2Nrc2l6ZT08cm96bWlhciBibG9rdT5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1NCBtaXNjL21rZTJmcy5jOjE1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlc1xuIgorbXNnc3RyICJcdFXFvHl3YW5lICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1OTAgbWlzYy9lMmltYWdlLmM6MTMyNiBtaXNjL3R1bmUyZnMuYzoxOTIzCisjOiByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiTmllIG1vxbxuYSB6bmFsZcW6xIcgcG9wcmF3bmVnbyBzdXBlcmJsb2t1IHN5c3RlbXUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGLFgsSFZCBwb2RjemFzIGN6eXRhbmlhIGJpdG1hcDogJXNcbiIKKworIzogbWlzYy9lMmltYWdlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstcnNJUWFdIGRldmljZSBpbWFnZV9maWxlXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1yc0lRYV0gdXJ6xIVkemVuaWUgcGxpa19vYnJhenVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICJCxYLEhWQ6IHJvem1pYXIgbmFnxYLDs3drYSBqZXN0IHdpxJlrc3p5IG5pxbwgd3J0X3NpemVcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQ0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJOaWUgbW/FvG5hIHByenlkemllbGnEhyBidWZvcmEgbmFnxYLDs3drYVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgemFwaXN1IHN1cGVyYmxva3UiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4MgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgInBvZGN6YXMgemFwaXN1IHRhYmVsaSBpLXfEmXrFgsOzdyIKKworIzogbWlzYy9lMmltYWdlLmM6MTg5Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgInBvZGN6YXMgemFwaXN1IGJpdG1hcHkgYmxva8OzdyIKKworIzogbWlzYy9lMmltYWdlLmM6MTk2Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgInBvZGN6YXMgemFwaXN1IGJpdG1hcHkgaS13xJl6xYLDs3ciCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBwcnpla3N6dGHFgmNlbmlhIG9icmF6dSBxY293MiAoJXMpIG5hIG9icmF6IHN1cm93eSAoJXMpIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBuaWUgbW/FvG5hIG90d29yennEhyAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IG5pZSBtb8W8bmEgcHJ6ZWrFm8SHIGRvIHN1cGVyYmxva3VcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGLFgsSFZCBwb2RjemFzIG9kY3p5dHUgc3VwZXJibG9rdVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IHRvIG5pZSBqZXN0IHN5c3RlbSBwbGlrw7N3IGV4dDJcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6OTcgbWlzYy90dW5lMmZzLmM6MjA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBsYWJlbCB0b28gbG9uZywgdHJ1bmNhdGluZy5cbiIKK21zZ3N0ciAiVXdhZ2E6IGV0eWtpZXRhIHphIGTFgnVnYSwgc2tyw7Njb25vLlxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9jayBhZ2FpblxuIgorbXNnc3RyICJlMmxhYmVsOiBuaWUgbW/FvG5hIHByemVqxZvEhyBwb25vd25pZSBkbyBzdXBlcmJsb2t1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogYsWCxIVkIHBvZGN6YXMgemFwaXN1IHN1cGVyYmxva3VcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTE3IG1pc2MvdHVuZTJmcy5jOjgwMworIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogZTJsYWJlbCBkZXZpY2UgW25ld2xhYmVsXVxuIgorbXNnc3RyICJTa8WCYWRuaWE6IGUybGFiZWwgdXJ6xIVkemVuaWUgW25vd2EtZXR5a2lldGFdXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIDx0cmFuc2FjdGlvbiBmaWxlPiA8ZmlsZXN5c3RlbT5cbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiAlcyA8cGxpa190cmFuc2FrY2ppPiA8c3lzdGVtX3BsaWvDs3c+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBkYW55Y2ggc3lzdGVtdSBwbGlrw7N3XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgInRkYl9mZXRjaCAlcyBuaWUgcG93aW9kxYJvIHNpxJlcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiQ3phcyBtb250b3dhbmlhIHN5c3RlbXUgcGxpa8OzdyBuaWUgb2Rwb3dpYWRhICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIlVVSUQgc3lzdGVtdSBwbGlrw7N3IG5pZSBwYXN1amVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgInRkYl9vcGVuICVzIG5pZSBwb3dpb2TFgm8gc2nEmVxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuXG4iCittc2dzdHIgIkLFgsSFZCBwb2RjemFzIHNwcmF3ZHphbmlhLCBjenkgJXMgamVzdCB6YW1vbnRvd2FueS5cbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNzUKK21zZ2lkICJlMnVuZG8gc2hvdWxkIG9ubHkgYmUgcnVuIG9uIHVubW91bnRlZCBmaWxlIHN5c3RlbVxuIgorbXNnc3RyICJlMnVuZG8gcG93aW5ubyBiecSHIHVydWNoYW1pYW5lIHR5bGtvIG5hIG9kbW9udG93YW55bSBzeXN0ZW1pZSBwbGlrw7N3XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICJPZHR3b3J6b25vIHRyYW5zYWtjasSZIHJvem1pYXJ1ICV6ZCB3IHBvxYJvxbxlbml1ICVsbHVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6YXBpc2HEhyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiVVdBR0E6IG5pZSBtb8W8bmEgb3R3b3J6ecSHICVzOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIlVXQUdBOiB6xYJ5IGZvcm1hdCB3IGxpbmlpICVkIHBsaWt1ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiVVdBR0E6IC9ldGMvZnN0YWIgbmllIHphd2llcmEgcG9sYSBwYXNzbm8gZGxhIGZzY2suXG4iCisiUG9taW7EmSB0ZW4gYsWCxIVkLCBhbGUgL2V0Yy9mc3RhYiBuYWxlxbx5IGphayBuYWpzenliY2llaiBwb3ByYXdpxIcuXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBuaWUgem5hbGV6aW9ub1xuIgorCisjOiBtaXNjL2ZzY2suYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdhaXQ6IE5vIG1vcmUgY2hpbGQgcHJvY2Vzcz8hP1xuIgorbXNnc3RyICIlczogd2FpdDogTmllIG1hIHdpxJljZWogcHJvY2Vzw7N3IHBvdG9tbnljaD8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiVXdhZ2EuLi4gJXMgZGxhIHVyesSFZHplbmlhICVzIHpha2/FhGN6ecWCIHNpxJkgc3lnbmHFgmVtICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IHN0YXR1cyB3eW5vc2kgJXgsIHRvIHNpxJkgbmllIHBvd2lubm8gbmlnZHkgemRhcnp5xIcuXG4iCisKKyM6IG1pc2MvZnNjay5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGaW5pc2hlZCB3aXRoICVzIChleGl0IHN0YXR1cyAlZClcbiIKK21zZ3N0ciAiU2tvxYRjem9ubyB6ICVzIChzdGF0dXMgd3lqxZtjaWEgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBCxYLEhWQgJWQgcG9kY3phcyB3eWtvbnl3YW5pYSBmc2NrLiVzIGRsYSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkFsYm8gd3N6eXN0a2llLCBhbGJvIMW8YWRlbiByb2R6YWogc3lzdGVtdSBwbGlrw7N3IHogcG9kYW55Y2ggcG8gLXQgbXVzaSBiecSHXG4iCisicG9wcnplZHpvbnkgJ25vJyBsdWIgJyEnLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgcm9kemFqZSBzeXN0ZW3Ds3cgcGxpa8Ozd1xuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyBudW1iZXJcbiIKK21zZ3N0ciAiJXM6IHBvbWluacSZdG8gYsWCxJlkbsSFIGxpbmnEmSB3IC9ldGMvZnN0YWI6IG1vbnRvd2FuaWUgYmluZCB6IG5pZXplcm93eW0gbnVtZXJlbSBwcnplYmllZ3UgZnNja1xuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiBuaWUgbW/FvG5hIHNwcmF3ZHppxIcgJXM6IGZzY2suJXMgbmllIHpuYWxlemlvbnlcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiU3ByYXdkemFuaWUgd3N6eXN0a2ljaCBzeXN0ZW3Ds3cgcGxpa8Ozdy5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1vY3pla2l3YW5pZS0tIChwcnplYmllZyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICJTa8WCYWRuaWE6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZGVza3J5cHRvciBdIF0gWy10IHJvZHphai1mc10gW29wY2plLWZzXSBbc3lzdGVtLXBsaWvDs3cgLi4uXVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBkZXZpY2VzXG4iCittc2dzdHIgIiVzOiB6YSBkdcW8byB1cnrEhWR6ZcWEXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiB6YSBkdcW8byBwYXJhbWV0csOzd1xuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJTa8WCYWRuaWE6ICVzIFstUlZhZGx2XSBbcGxpa2kuLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiUG9kY3phcyBvZGN6eXR1IGZsYWcgJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJQb2RjemFzIG9kY3p5dHUgd2Vyc2ppICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdIFstQyBjbHVzdGVyLXNpemVdXG4iCisiXHRbLWkgYnl0ZXMtcGVyLWlub2RlXSBbLUkgaW5vZGUtc2l6ZV0gWy1KIGpvdXJuYWwtb3B0aW9uc11cbiIKKyJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyJcdFstZyBibG9ja3MtcGVyLWdyb3VwXSBbLUwgdm9sdW1lLWxhYmVsXSBbLU0gbGFzdC1tb3VudGVkLWRpcmVjdG9yeV1cbiIKKyJcdFstTyBmZWF0dXJlWywuLi5dXSBbLXIgZnMtcmV2aXNpb25dIFstRSBleHRlbmRlZC1vcHRpb25bLC4uLl1dXG4iCisiXHRbLXQgZnMtdHlwZV0gWy1UIHVzYWdlLXR5cGUgXSBbLVUgVVVJRF0gWy1qbnF2REZLU1ZdIGRldmljZSBbYmxvY2tzLWNvdW50XVxuIgorbXNnc3RyICIiCisiU2vFgmFkbmlhOiAlcyBbLWN8LWwgbmF6d2EtcGxpa3VdIFstYiByb3ptLmJsb2t1XSBbLUMgcm96bS5rbGFzdHJhXVxuIgorIlx0Wy1pIGJhanTDs3ctbmEtaS13xJl6ZcWCXSBbLUkgcm96bS1pLXfEmXrFgmFdIFstSiBvcGNqZS1rcm9uaWtpXVxuIgorIlx0Wy1HIHJvem1pYXItZ3J1cHktZmxleF0gWy1OIGxpY3piYS1pLXfEmXrFgsOzd11cbiIKKyJcdFstbSBwcm9jZW50LXJlemVydy4tYmxva8Ozd10gWy1vIG9zLXR3w7NyY3ldXG4iCisiXHRbLWcgYmxva8Ozdy13LWdydXBpZV0gWy1MIGV0eWtpZXRhLXdvbHVtZW51XSBbLU0gb3N0Li1tb250Li1rYXRhbG9nXVxuIgorIlx0Wy1PIGNlY2hhWywuLi5dXSBbLXIgd2Vyc2phLWZzXSBbLUUgb3BjamEtcm96c3plcnpvbmFbLC4uLl1dXG4iCisiXHRbLXQgdHlwLWZzXSBbLVQgdHlwLXXFvHljaWFdIFstVSBVVUlEXSBbLWpucXZERktTVl0gdXJ6xIVkemVuaWUgW2xpY3piYS1ibG9rw7N3XVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJSdW5uaW5nIGNvbW1hbmQ6ICVzXG4iCittc2dzdHIgIlVydWNoYW1pYW5pZSBwb2xlY2VuaWE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBydW4gJyVzJyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgdXJ1Y2hvbWllbmlhICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjMyCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICJwb2RjemFzIHByemV0d2FyemFuaWEgbGlzdHkgd2FkbGl3eWNoIGJsb2vDs3cgeiBwcm9ncmFtdSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIldhZGxpd3kgYmxvayAlZCB3IGfFgsOzd255bSBzdXBlcmJsb2t1L29ic3phcnplIGRlc2tyeXB0b3JhIGdydXAuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrcyAldSB0aHJvdWdoICV1IG11c3QgYmUgZ29vZCBpbiBvcmRlciB0byBidWlsZCBhIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkJsb2tpIG9kICV1IGRvICV1IG11c3rEhSBiecSHIGRvYnJlLCBhYnkgc3R3b3J6ecSHIHN5c3RlbSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICJQcnplcndhbm8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVXdhZ2E6IHphcGFzb3d5IHN1cGVyYmxvay9kZXNrcnlwdG9yeSBncnVwIHcgYmxva3UgJXUgemF3aWVyYWrEhVxuIgorIlx0d2FkbGl3ZSBibG9raS5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzozMDMKK21zZ2lkICJ3aGlsZSBtYXJraW5nIGJhZCBibG9ja3MgYXMgdXNlZCIKK21zZ3N0ciAicG9kY3phcyB6YXpuYWN6YW5pYSB3YWRsaXd5Y2ggYmxva8OzdyBqYWtvIHXFvHl3YW5lIgorCisjOiBtaXNjL21rZTJmcy5jOjMyMAorbXNnaWQgIldyaXRpbmcgaW5vZGUgdGFibGVzOiAiCittc2dzdHIgIlphcGlzIHRhYmxpY3kgaS13xJl6xYLDs3c6ICIKKworIzogbWlzYy9ta2UyZnMuYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSB1ZGHFgm8gc2nEmSB6YXBpc2HEhyAlZCBibG9rw7N3IHcgdGFibGljeSBpLXfEmXrFgsOzdyBwb2N6xIV3c3p5IG9kICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzU1IG1pc2MvbWtlMmZzLmM6MjI1NyBtaXNjL21rZTJmcy5jOjI1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiemFrb8WEY3pvbm8gICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzY2Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgInBvZGN6YXMgdHdvcnplbmlhIGfFgsOzd25lZ28ga2F0YWxvZ3UiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzczCittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgZ8WCw7N3bmVnbyBpLXfEmXrFgmEiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAicG9kY3phcyB1c3Rhd2lhbmlhIHfFgmHFm2NpY2llbGEgZ8WCw7N3bmVnbyBpLXfEmXrFgmEiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAzCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInBvZGN6YXMgdHdvcnplbmlhIC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgInBvZGN6YXMgc3p1a2FuaWEgL2xvc3QrZm91bmQiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJwb2RjemFzIHJvenN6ZXJ6YW5pYSAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MzgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyB1c3Rhd2lhbmlhIGktd8SZesWCYSB3YWRsaXd5Y2ggYmxva8OzdyIKKworIzogbWlzYy9ta2UyZnMuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiQnJhayBwYW1pxJljaSBwb2RjemFzIGN6eXN6Y3plbmlhIHNla3RvcsOzdyAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJVd2FnYTogbmllIG1vxbxuYSBvZGN6eXRhxIcgYmxva3UgMDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIKK21zZ3N0ciAiVXdhZ2E6IG5pZSBtb8W8bmEgd3ljennFm2NpxIcgc2VrdG9yYSAlZDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDcKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJwb2RjemFzIGluaWNqYWxpemFjamkgc3VwZXJibG9rdSBrcm9uaWtpIgorCisjOiBtaXNjL21rZTJmcy5jOjUxNQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiWmVyb3dhbmllIHVyesSFZHplbmlhIGtyb25pa2k6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJwb2RjemFzIHplcm93YW5pYSB1cnrEhWR6ZW5pYSBrcm9uaWtpIChibG9rICVsbHUsIGxpY3piYSAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQ1Cittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgemFwaXN1IHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbWlzYy9ta2UyZnMuYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInV3YWdhOiAlbGx1IGJsb2vDs3cgbmllIHXFvHl3YW55Y2guXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gbGFiZWw9JXNcbiIKK21zZ3N0ciAiRXR5a2lldGEgc3lzdGVtdSBwbGlrw7N3PSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIlR5cCBPUzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGJsb2t1PSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsdXN0ZXIgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGtsYXN0cmE9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJSb3ptaWFyIGZyYWdtZW50dT0ldSAobG9nPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIlN0cmlkZT0ldSBibG9rw7N3LCBzemVyb2tvxZvEhyBTdHJpcGU9JXUgYmxva8Ozd1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGktd8SZesWCw7N3LCAlbGx1IGJsb2vDs3dcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2vDs3cgKCUyLjJmJSUpIHphcmV6ZXJ3b3dhbnljaCBkbGEgc3VwZXJ1xbx5dGtvd25pa2FcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJQaWVyd3N6eSBibG9rIGRhbnljaD0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICJXxYJhxZtjaWNpZWwgZ8WCw7N3bmVnbyBrYXRhbG9ndT0ldToldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBibG9rw7N3IHN5c3RlbXUgcGxpa8Ozdz0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGdydXAgYmxva8Ozd1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBncnVwYSBibG9rw7N3XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rw7N3IHcgZ3J1cGllLCAldSBrbGFzdHLDs3cgdyBncnVwaWVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9rw7N3IHcgZ3J1cGllLCAldSBmcmFnbWVudMOzdyB3IGdydXBpZVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiV1IGktd8SZesWCw7N3IHcgZ3J1cGllXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIktvcGllIHphcGFzb3dlIHN1cGVyYmxva3UgemFwaXNhbmUgdyBibG9rYWNoOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjkxIG1pc2MvdHVuZTJmcy5jOjExNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBva3JlcyB1YWt0dWFsbmlhbmlhIG1tcDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBwYXJhbWV0ciBzdHJpZGU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcGFyYW1ldHIgc3RyaXBlLXdpZHRoOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc0MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIkLFgsSZZG55IHBhcmFtZXRyIHJlc2l6ZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHJlc2l6ZSBtYXhpbXVtIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaWxlc3lzdGVtIHNpemUuXG4iCittc2dzdHIgIk1ha3N5bWFsbnkgcm96bWlhciAocmVzaXplKSBtdXNpIGJ5xIcgd2nEmWtzenkgb2Qgcm96bWlhcnUgc3lzdGVtdSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlptaWFuYSByb3ptaWFydSB3IGxvY2llIG5pZSBqZXN0IG9ic8WCdWdpd2FuYSBwcnpleiBzeXN0ZW15IHBsaWvDs3cgdyB3ZXJzamkgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjgwMSBtaXNjL21rZTJmcy5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiQsWCxJlkbnkgcm9vdF9vd25lcjogJyVzJ1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIkLFgsSZZG55IHBhcmFtZXRyIHF1b3RhdHlwZTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBkYXRhIGNodW5rIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHJlc2l6ZT08cmVzaXplIG1heGltdW0gc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRyb290X3VpZD08dWlkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0cm9vdF9naWQ9PGdpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgT1IgZ3JwPlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiUG9kYW5vIGLFgsSZZG5lIG9wY2plOiAlc1xuIgorIlxuIgorIk9wY2plIHJvenN6ZXJ6b25lIHPEhSBvZGR6aWVsYW5lIHByemVjaW5rYW1pIGkgbW9nxIUgcHJ6eWptb3dhxIcgcGFyYW1ldHIsXG4iCisiXHRrdMOzcnkgamVzdCB1c3Rhd2lhbnkgem5ha2llbSAnPScuXG4iCisiXG4iCisiUG9wcmF3bmUgb3BjamUgcm96c3plcnpvbmUgdG86XG4iCisiXHRzdHJpZGU9PHJvem1pYXIgcG9yY2ppIGRhbnljaCBSQUlEIG5hIGR5c2t1IHcgYmxva2FjaD5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUgKiBsaWN6YmEgZHlza8OzdyBkYW55Y2ggdyBibG9rYWNoPlxuIgorIlx0cmVzaXplPTxtYWtzeW1hbG55IHJvem1pYXIgcG93acSZa3N6ZW5pYSB3IGJsb2thY2g+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIGFieSB3ecWCxIVjennEhywgMSBhYnkgd8WCxIVjennEhz5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIGFieSB3ecWCxIVjennEhywgMSBhYnkgd8WCxIVjennEhz5cbiIKKyJcdHJvb3RfdWlkPTx1aWQga2F0YWxvZ3UgZ8WCw7N3bmVnbz5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQga2F0YWxvZ3UgZ8WCw7N3bmVnbz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdGRpc2NhcmRcbiIKKyJcdG5vZGlzY2FyZFxuIgorIlx0cXVvdGF0eXBlPTx1c3IgTFVCIGdycD5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhOiBSQUlEIHN0cmlwZS13aWR0aCAldSBuaWUgamVzdCBwYXJ6eXN0xIUgd2llbG9rcm90bm/Fm2NpxIUgc3RyaWRlICV1LlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkLFgsSFZCBza8WCYWRuaSB3IHBsaWt1IGtvbmZpZ3VyYWN5am55bSBta2UyZnMgKCVzLCBsaW5pYSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTIwIG1pc2MvdHVuZTJmcy5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZpbGVzeXN0ZW0gb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiVXN0YXdpb25hIGLFgsSZZG5hIG9wY2phIHN5c3RlbXUgcGxpa8OzdzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MzIgbWlzYy90dW5lMmZzLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiVXN0YXdpb25hIGLFgsSZZG5hIG9wY2phIG1vbnRvd2FuaWE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiVXdhZ2EhIFBsaWsgbWtlMmZzLmNvbmYgbmllIG9rcmXFm2xhIHR5cHUgc3lzdGVtdSBwbGlrw7N3ICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisiUHJhd2RvcG9kb2JuaWUgdHJ6ZWJhIHphaW5zdGFsb3dhxIcgdWFrdHVhbG5pb255IHBsaWsgbWtlMmZzLmNvbmYuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJQcnplcndhbm8uLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiVXdhZ2E6IHR5cCBzeXN0ZW11IHBsaWvDs3cgJXMgbmllIGplc3QgemRlZmluaW93YW55IHcgbWtlMmZzLmNvbmZcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgbmEgbm93xIUgUEFUSFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwb3ByYXduaWUgemFpbmljam93YcSHIHByb2ZpbHUgKGLFgsSFZDogJWxkKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGJsb2t1IC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBibG9ja3NpemUgJWQgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXMuXG4iCittc2dzdHIgIlV3YWdhOiByb3ptaWFyIGJsb2t1ICVkIG5pZSB1xbx5d2FsbnkgbmEgd2nEmWtzem/Fm2NpIHN5c3RlbcOzdy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzc3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHJvem1pYXIga2xhc3RyYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODcKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIictJScgamVzdCBwcnplc3RhcnphxYJlLCB6YW1pYXN0IG5pZWdvIG5hbGXFvHkgdcW8eXdhxIcgJy1FJyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzk5Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBibG9rw7N3IHcgZ3J1cGllIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MDQKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAibGljemJhIGJsb2vDs3cgdyBncnVwaWUgbXVzaSBiecSHIHdpZWxva3JvdG5vxZtjacSFIDgiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxMgorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBmbGV4X2JnIHNpemUiCittc2dzdHIgIk5pZWRvcHVzemN6YWxueSByb3ptaWFyIGZsZXhfYmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxOAorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAicm96bWlhciBmbGV4X2JnIG11c2kgYnnEhyBwb3TEmWfEhSAyIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgImLFgsSZZG55IHN0b3N1bmVrIGktd8SZesWCw7N3ICVzIChtaW4gJWQvbWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxNDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGktd8SZesWCYSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogLUsgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgJy1FIG5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIlV3YWdhOiBvcGNqYSAtSyBqZXN0IHByemVzdGFyemHFgmEgaSBuaWUgcG93aW5uYSBqdcW8IGJ5xIcgdcW8eXdhbmEuIFphbWlhc3QgbmllaiBuYWxlxbx5IHXFvHnEhyBvcGNqaSByb3pzemVyem9uZWogJy1FIG5vZGlzY2FyZCcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAidyBtYWxsb2MgZGxhIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgImLFgsSZZG55IHByb2NlbnQgemFyZXplcndvd2FueWNoIGJsb2vDs3cgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgImLFgsSZZG5hIGxpY3piYSBpLXfEmXrFgsOzdyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHBvemlvbSB3ZXJzamkgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTE5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIk9wY2phIC10IG1vxbxlIGJ5xIcgdcW8eXRhIHR5bGtvIHJheiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTI3Cittc2dpZCAiVGhlIC1UIG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIk9wY2phIC1UIG1vxbxlIGJ5xIcgdcW8eXRhIHR5bGtvIHJheiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTgwIG1pc2MvbWtlMmZzLmM6MjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBvdHdhcmNpYSB1cnrEhWR6ZW5pYSBrcm9uaWtpICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiUm96bWlhciBibG9rdSB1cnrEhWR6ZW5pYSB6IGtyb25pa8SFICglZCkgbW5pZWpzenkgb2QgbWluaW1hbG5lZ28gJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJVxbx5Y2llIHJvem1pYXJ1IGJsb2t1IHVyesSFZHplbmlhIGtyb25pa2k6ICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICJixYLEmWRuYSBsaWN6YmEgYmxva8OzdyAnJXMnIG5hIHVyesSFZHplbml1ICclcyciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgInN5c3RlbSBwbGlrw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjYgcmVzaXplL21haW4uYzozNjcKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgb2tyZcWbbGVuaWEgcm96bWlhcnUgc3lzdGVtdSBwbGlrw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorIk5pZSBtb8W8bmEgb2tyZcWbbGnEhyByb3ptaWFydSB1cnrEhWR6ZW5pYTsgcm96bWlhciBzeXN0ZW11XG4iCisicGxpa8OzdyBtdXNpIGJ5xIcgcG9kYW55XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzOQorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiT2Rjenl0YW55IHJvem1pYXIgdXJ6xIVkemVuaWEgd3lub3NpIHplcm8uIFBvZGFubyBixYLEmWRuxIUgcGFydHljasSZXG4iCisiXHRsdWIgdGFibGljYSBwYXJ0eWNqaSBuaWUgYnnFgmEgb2Rjenl0YW5hIHBvbm93bmllIHBvIHVydWNob21pZW5pdVxuIgorIlx0ZmRpc2thIHogcG93b2R1IHphasSZdGVqIG1vZHlmaWtvd2FuZWogcGFydHljamkuIFBvbm93bnkgb2Rjenl0XG4iCisiXHR0YWJsaWN5IHBhcnR5Y2ppIG1vxbxlIHd5bWFnYcSHIHJlYm9vdHUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY1NgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyB3acSZa3N6eSBvZCB3aWRvY3puZWdvIHJvem1pYXJ1IHVyesSFZHplbmlhLiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBmcyB0eXBlcyBsaXN0XG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnplYW5hbGl6b3dhxIcgbGlzdHkgdHlww7N3IHN5c3RlbcOzdyBwbGlrw7N3XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTczMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFNpemUgb2YgZGV2aWNlICgweCVsbHggYmxvY2tzKSAlcyB0b28gYmlnIHRvIGJlIGV4cHJlc3NlZFxuIgorIlx0aW4gMzIgYml0cyB1c2luZyBhIGJsb2Nrc2l6ZSBvZiAlZC5cbiIKK21zZ3N0ciAiIgorIiVzOiBSb3ptaWFyIHVyesSFZHplbmlhICgweCVsbHggYmxva8OzdykgJXMgamVzdCB6Ynl0IGR1xbx5LCBhYnkgd3lyYXppxIcgZ29cbiIKKyJcdHcgMzIgYml0YWNoIHByenkgdcW8eWNpdSByb3ptaWFydSBibG9rdSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQ2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiUm96d2luacSZY2llIGZzX3R5cGVzIGRsYSBta2UyZnMuY29uZjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJDZWNoeSBzeXN0ZW11IHBsaWvDs3cgbmllIG9ic8WCdWdpd2FuZSBwcnpleiBzeXN0ZW15IHBsaWvDs3cgdyB3ZXJzamkgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BhcnNlIHN1cGVyYmxvY2tzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlJ6YWRraWUgc3VwZXJibG9raSBuaWUgc8SFIG9ic8WCdWdpd2FuZSBwcnpleiBzeXN0ZW15IHBsaWvDs3cgdyB3ZXJzamkgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiS3JvbmlraSBuaWUgc8SFIG9ic8WCdWdpd2FuZSBwcnpleiBzeXN0ZW15IHBsaWvDs3cgdyB3ZXJzamkgMFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAiYsWCxJlkbnkgcHJvY2VudCB6YXJlemVyd293YW55Y2ggYmxva8OzdyAtICVsZiIKKworIzogbWlzYy9ta2UyZnMuYzoxODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgcmVzaXplX2lub2RlIGFuZCBtZXRhX2JnIGZlYXR1cmVzIGFyZSBub3QgY29tcGF0aWJsZS5cbiIKKyJUaGV5IGNhbiBub3QgYmUgYm90aCBlbmFibGVkIHNpbXVsdGFuZW91c2x5LlxuIgorbXNnc3RyICIiCisiQ2VjaHkgcmVzaXplX2lub2RlIGkgbWV0YV9iZyBuaWUgc8SFIGtvbXBhdHliaWxuZS5cbiIKKyJOaWUgbW/FvG5hIGljaCB3xYLEhWN6ecSHIGplZG5vY3plxZtuaWUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxOQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG9rcmXFm2xlbmlhIHJvem1pYXJ1IHNwcnrEmXRvd2VnbyBzZWt0b3JhIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjUKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHBoeXNpY2FsIHNlY3RvciBzaXplIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBva3JlxZtsZW5pYSByb3ptaWFydSBzZWt0b3JhIGZpenljem5lZ28iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg1OAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICJwb2RjemFzIHVzdGF3aWFuaWEgcm96bWlhcnUgYmxva3U7IHpieXQgbWHFgnkgZGxhIHVyesSFZHplbmlhXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICJVd2FnYTogcG9kYW55IHJvem1pYXIgYmxva3UgJWQgamVzdCBtbmllanN6eSBuacW8IHJvem1pYXIgc2VrdG9yYSBmaXp5Y3puZWdvICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIlJvem1pYXIga2xhc3RyYSBuaWUgbW/FvGUgYnnEhyBtbmllanN6eSBuacW8IHJvem1pYXIgYmxva3UuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4NworbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgIm9rcmXFm2xlbmllIHJvem1pYXJ1IGtsYXN0cmEgd3ltYWdhIHfFgmFzbm/Fm2NpIGJpZ2FsbG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgInV3YWdhOiBuaWUgdWRhxYJvIHNpxJkgb2Rjenl0YcSHIGdlb21ldHJpaSB1cnrEhWR6ZW5pYSBkbGEgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICJXeXLDs3duYW5pZSAlcyBqZXN0IHByemVzdW5pxJl0ZSBvICVsdSBiYWp0w7N3LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBtYXkgcmVzdWx0IGluIHZlcnkgcG9vciBwZXJmb3JtYW5jZSwgKHJlKS1wYXJ0aXRpb25pbmcgc3VnZ2VzdGVkLlxuIgorbXNnc3RyICJNb8W8ZSB0byBwb3dvZG93YcSHIGJhcmR6byBuaXNrxIUgd3lkYWpub8WbxIcsIHphbGVjYW5lIGplc3QgKHByemUpcGFydHljam9ub3dhbmllLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIlZC1iYWp0b3dlIGJsb2tpIHPEhSB6Ynl0IGR1xbxlIGRsYSBzeXN0ZW11IChtYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiVXdhZ2E6ICVkLWJhanRvd2UgYmxva2kgc8SFIHpieXQgZHXFvGUgZGxhIHN5c3RlbXUgKG1heCAlZCksIHd5bXVzem9ubyBrb250eW51YWNqxJlcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTY4Cittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICJPYnPFgnVnYSB3xYJhc25vxZtjaSBiaWdhbGxvYyBqZXN0IG5pZW1vxbxsaXdhIGJleiB3xYJhc25vxZtjaSBleHRlbnRzIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVd2FnYTogd8WCYXNub8WbxIcgYmlnYWxsb2MgamVzdCBuYWRhbCB3IHRyYWtjaWUgcm96d29qdS5cbiIKKyJXacSZY2VqIGluZm9ybWFjamkgcG9kIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk4MiBtaXNjL3R1bmUyZnMuYzo3NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBxdW90YSBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVd2FnYTogd8WCYXNub8WbxIcgcXVvdGEgamVzdCBuYWRhbCB3IHRyYWtjaWUgcm96d29qdVxuIgorIldpxJljZWogaW5mb3JtYWNqaSBwb2QgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGFcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkzCittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgInphcmV6ZXJ3b3dhbmUgYmxva2kgZG8gem1pYW55IHJvem1pYXJ1IHcgbG9jaWUgbmllIG9ic8WCdWdpd2FuZSBuYSBuaWVjacSFZ8WCeW0gc3lzdGVtaWUgcGxpa8OzdyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDAyCittc2dpZCAiYmxvY2tzIHBlciBncm91cCBjb3VudCBvdXQgb2YgcmFuZ2UiCittc2dzdHIgImxpY3piYSBibG9rw7N3IHcgZ3J1cGllIHNwb3phIHpha3Jlc3UiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAyNgorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICJDZWNoYSBmbGV4X2JnIG5pZSBqZXN0IHfFgsSFY3pvbmEsIHdpxJljIG5pZSBtb8W8bmEgb2tyZcWbbGnEhyByb3ptaWFydSBmbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiYsWCxJlkbnkgcm96bWlhciBpLXfEmXrFgmEgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJ6Ynl0IGR1xbxvIGktd8SZesWCw7N3ICglbGx1KSwgendpxJlrc3p5xIcgd3Nww7PFgmN6eW5uaWsgaS13xJl6xYLDs3c/IgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJ6Ynl0IGR1xbxvIGktd8SZesWCw7N3ICglbGx1KSwgbmFsZcW8eSBwb2RhxIcgPCAyXjMyIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorInJvem1faXfEmXrFgmEgKCV1KSAqIGxpY3piYV9pd8SZesWCw7N3ICgldSkgemJ5dCBkdcW8ZSBkbGEgc3lzdGVtdVxuIgorIlx0cGxpa8OzdyBvIGxpY3piaWUgYmxva8OzdyAlbGx1LCBuYWxlxbx5IHBvZGHEhyB3acSZa3N6eSB3c3DDs8WCY3p5bm5payAoLWkpXG4iCisiXHRsdWIgbW5pZWpzesSFIGxpY3pixJkgaS13xJl6xYLDs3cgKC1OKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiTmFkcGlzeXdhbmllIGlzdG5pZWrEhWNlZ28gc3lzdGVtdSBwbGlrw7N3OyBtb8W8bmEgdG8gd3ljb2ZhxIcgcG9sZWNlbmllbTpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxMAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgdXR3b3J6ZW5pYSBwbGlrdSBjb2ZuacSZY2lhICh1bmRvKVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMzYKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiUG9yenVjYW5pZSBibG9rw7N3IHVyesSFZHplbmlhOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAibmllIHBvd2lvZMWCbyBzacSZIC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjIzNjAKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgInBvZGN6YXMgdXN0YXdpYW5pYSBzdXBlcmJsb2t1IgorCisjOiBtaXNjL21rZTJmcy5jOjIzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY2FyZCBzdWNjZWVkZWQgYW5kIHdpbGwgcmV0dXJuIDBzICAtIHNraXBwaW5nIGlub2RlIHRhYmxlIHdpcGVcbiIKK21zZ3N0ciAiQ3p5c3pjemVuaWUgc2nEmSBwb3dpb2TFgm8gaSBixJlkemllIHp3cmFjYcSHIHplcmEgLSBwb21pbmnEmXRvIGN6eXN6Y3plbmllIHRhYmxpY3kgaS13xJl6xYLDs3dcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAibmllem5hbnkgb3MgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIlByenlkemllbGFuaWUgdGFibGljeSBncnVwOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgcHJ6eWR6aWVsZW5pYSB0YWJsaWMgc3lzdGVtdSBwbGlrw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjI1MTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiXHRwb2RjemFzIHByw7NieSBwcnpla3N6dGHFgmNlbmlhIGJpdG1hcHkgcG9ka2xhc3Ryw7N3IgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICJwb2RjemFzIHplcm93YW5pYSBibG9rdSAlbGx1IG5hIGtvxYRjdSBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU3MworbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInBvZGN6YXMgcmV6ZXJ3b3dhbmlhIGJsb2vDs3cgbmEgem1pYW7EmSByb3ptaWFydSB3IGxvY2llIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODQgbWlzYy90dW5lMmZzLmM6NjQ1Cittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAia3JvbmlrYSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICJEb2Rhbm8ga3JvbmlrxJkgZG8gdXJ6xIVkemVuaWEgJXM6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBhZGQgam91cm5hbCB0byBkZXZpY2UgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJcdHBvZGN6YXMgcHLDs2J5IGRvZGFuaWEga3JvbmlraSBkbyB1cnrEhWR6ZW5pYSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNjA4IG1pc2MvbWtlMmZzLmM6MjY0MCBtaXNjL3R1bmUyZnMuYzo2NzQgbWlzYy90dW5lMmZzLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmVcbiIKK21zZ3N0ciAid3lrb25hbm9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIlBvbWluacSZdG8gdHdvcnplbmllIGtyb25pa2kgdyB0cnliaWUgc3VwZXItb25seVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJUd29yemVuaWUga3JvbmlraSAoJXUgYmxva8Ozdyk6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjM2Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIgorbXNnc3RyICIiCisiXG4iCisiXHRwb2RjemFzIHByw7NieSB1dHdvcnplbmlhIGtyb25pa2kiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY0NyBtaXNjL3R1bmUyZnMuYzo0NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkVycm9yIHdoaWxlIGVuYWJsaW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZS4iCittc2dzdHIgIiIKKyJcbiIKKyJCxYLEhWQgcG9kY3phcyB3xYLEhWN6YW5pYSBmdW5rY2ppIHphYmV6cGllY3plbmlhIHByemVkIHdpZWxva3JvdG55bSBtb250b3dhbmllbS4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiWmFiZXpwaWVjemVuaWUgcHJ6ZWQgd2llbG9rcm90bnltIG1vbnRvd2FuaWVtIGplc3Qgd8WCxIVjem9uZSB6IG9rcmVzZW0gdWFrdHVhbG5pYW5pYSAlZCBzZWt1bmQuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiWmFwaXMgc3VwZXJibG9rw7N3IGkgcG9kc3Vtb3dhbmlhIHN5c3RlbXUgcGxpa8OzdzogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIlV3YWdhLCBwcm9ibGVteSB6IHphcGlzZW0gc3VwZXJibG9rw7N3LiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJ3eWtvbmFub1xuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiU2vFgmFkbmlhOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6ICVzIHVyesSFZHplbmllLi4uXG4iCisiXG4iCisiV3lwaXNhbmllIGluZm9ybWFjamkgbyBwYXJ0eWNqYWNoIG5hIGthxbxkeW0gcG9kYW55bSB1cnrEhWR6ZW5pdS5cbiIKKyJQcnp5a8WCYWQ6ICVzIC9kZXYvaGRhXG4iCisiXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIk5pZSBtb8W8bmEgb3R3b3J6ecSHICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJOaWUgbW/FvG5hIHBvYnJhxIcgZ2VvbWV0cmlpICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgc2l6ZSBvZiAlczogJXMiCittc2dzdHIgIk5pZSBtb8W8bmEgcG9icmHEhyByb3ptaWFydSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgcG9jesSFdGVrPSU4ZCByb3ptaWFyPSU4bHUga29uaWVjPSU4ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDcKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiUHJvc3rEmSB1cnVjaG9tacSHIGUyZnNjayBuYSBzeXN0ZW1pZSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIlNrxYJhZG5pYTogJXMgWy1jIG1heF9saWN6bmlrX21vbnRvd2HFhF0gWy1lIHRyYWt0Ll9ixYLEmWTDs3ddIFstZyBncnVwYV1cbiIKKyJcdFstaSBvZHN0xJlwW2R8bXx3XV0gWy1qXSBbLUogb3BjamVfa3JvbmlraV0gWy1sXVxuIgorIlx0Wy1tIHByb2NlbnRfcmV6ZXJ3Ll9ibG9rw7N3XSBbLW8gW15db3BjamVfbW9udG93YW5pYVssLi4uXV0gWy1wIG9rcmVzX3Vha3QuX21tcF1cbiIKKyJcdFstciBsaWN6YmFfemFyZXouX2Jsb2vDs3ddIFstdSB1xbx5dGtvd25pa10gWy1DIGxpY3puaWtfbW9udG93YcWEXVxuIgorIlx0Wy1MIGV0eWtpZXRhX3dvbHVtZW51XSBbLU0gb3N0YXRuaW9fbW9udC5fa2F0YWxvZ10gWy1PIFteXWNlY2hhWywuLi5dXVxuIgorIlx0Wy1FIG9wY2phX3JvenN6ZXJ6b25hWywuLi5dXSBbLVQgY3phc19vc3QuX3NwcmF3ZHouXSBbLVUgVVVJRF1cbiIKKyJcdFstSSBub3d5X3Jvem1pYXJfaS13xJl6xYJhXSB1cnrEhWR6ZW5pZVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJwb2RjemFzIHByw7NieSBvdHdvcnplbmlhIHpld27EmXRyem5laiBrcm9uaWtpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIG5pZSBqZXN0IHVyesSFZHplbmllbSBrcm9uaWtpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJOaWUgem5hbGV6aW9ubyBzdXBlcmJsb2t1IGtyb25pa2khXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI0MAorbXNnaWQgIkZpbGVzeXN0ZW0ncyBVVUlEIG5vdCBmb3VuZCBvbiBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiVVVJRCBzeXN0ZW11IHBsaWvDs3cgbmllIHpuYWxlemlvbnkgbmEgdXJ6xIVkemVuaXUga3JvbmlraS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJOaWUgbW/FvG5hIHpsb2thbGl6b3dhxIcgdXJ6xIVkemVuaWEga3JvbmlraS4gTklFIHpvc3RhxYJvIHVzdW5pxJl0ZS5cbiIKKyJNb8W8bmEgdcW8ecSHIG9wY2ppIC1mLCBhYnkgdXN1bsSFxIcgbmllaXN0bmllasSFY2UgdXJ6xIVkemVuaWUga3JvbmlraS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY5Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIktyb25pa2EgdXN1bmnEmXRhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMworbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAicG9kY3phcyBvZGN6eXR1IGJpdG1hcCIKKworIzogbWlzYy90dW5lMmZzLmM6MzIxCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAicG9kY3phcyBjenlzemN6ZW5pYSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy90dW5lMmZzLmM6MzMyCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJwb2RjemFzIHphcGlzdSBpLXfEmXrFgmEga3JvbmlraSIKKworIzogbWlzYy90dW5lMmZzLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIocHJvc3rEmSB6cmVzdGFydG93YcSHIHBvdGVtIHN5c3RlbSEpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICJVc3V3YW5pZSBjZWNoeSBzeXN0ZW11IHBsaWvDs3cgJyVzJyBuaWUgamVzdCBvYnPFgnVnaXdhbmUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgY2VjaHkgc3lzdGVtdSBwbGlrw7N3ICclcycgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRmxhZ2EgaGFzX2pvdXJuYWwgbW/FvGUgYnnEhyB3eWN6eXN6Y3pvbmEgdHlsa28ga2llZHkgc3lzdGVtIHBsaWvDs3dcbiIKKyJqZXN0IG9kbW9udG93YW55IGx1YiB6YW1vbnRvd2FueSB0eWxrbyBkbyBvZGN6eXR1LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MjQKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJGbGFnYSBuZWVkc19yZWNvdmVyeSBqZXN0IHVzdGF3aW9uYS4gUHJvc3rEmSB1cnVjaG9tacSHIGUyZnNjayBwcnplZFxuIgorImN6eXN6Y3plbmllbSBmbGFnaSBoYXNfam91cm5hbC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDQzCittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmtjamEgb2Nocm9ueSBwcnplZCB3aWVsb2tyb3RueW0gbW9udG93YW5pZW0gbmllIG1vxbxlIHpvc3RhxIdcbiIKKyJ3xYLEhWN6b25hLCBqZcWbbGkgc3lzdGVtIHBsaWvDs3cgamVzdCB6YW1vbnRvd2FueSBsdWIgdHlsa28gZG8gb2Rjenl0dS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIlphdmV6cGllY3plbmllIHByemVkIHdpZWxva3JvdG55bSBtb250b3dhbmllbSB6b3N0YcWCYSB3xYLEhWN6b25hIHogY3phc2VtIHVha3R1YWxuaWFuaWEgJWRzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmtjamEgemFiZXpwaWVjemVuaWEgcHJ6ZWQgd2llbG9rcm90bnltIG1vbnRvd2FuaWVtIG5pZSBtb8W8ZSB6b3N0YcSHXG4iCisid3nFgsSFY3pvbmEsIGplxZtsaSBzeXN0ZW0gcGxpa8OzdyBqZXN0IHR5bGtvIGRvIG9kY3p5dHUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3OAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyBvZGN6eXR1IGJpdG1hcFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIkxpY3piYSBtYWdpY3puYSB3IGJsb2t1IE1NUCBzacSZIG5pZSB6Z2FkemE7IG9jemVraXdhbm8gJXgsIGplc3QgJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJwb2RjemFzIG9kY3p5dHUgYmxva3UgTU1QLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI0Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICJXecWCxIVjemVuaWUgZmxhZ2kgZmxleF9iZyBzcG93b2R1amUgbmllc3DDs2pub8WbxIcgc3lzdGVtdSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIkZsYWdhIGh1Z2VfZmlsZSBtb8W8ZSBiecSHIHd5Y3p5c3pjem9uYSB0eWxrbyBraWVkeSBzeXN0ZW0gcGxpa8Ozd1xuIgorImplc3Qgb2Rtb250b3dhbnkgbHViIHphbW9udG93YW55IHR5bGtvIGRvIG9kY3p5dHUuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5NQorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJVd2FnYTogb3BjamEgJ15xdW90YScgbmFkcGlzdWplIGFyZ3VtZW50eSAnLVEnLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIlN5c3RlbSBwbGlrw7N3IGp1xbwgbWEga3JvbmlrxJkuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcdHBvZGN6YXMgcHLDs2J5IG90d29yemVuaWEga3JvbmlraSBuYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiVHdvcnplbmllIGtyb25pa2kgbmEgdXJ6xIVkemVuaXUgJXM6ICIKKworIzogbWlzYy90dW5lMmZzLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgInBvZGN6YXMgZG9kYXdhbmlhIHN5c3RlbXUgcGxpa8OzdyBkbyBrcm9uaWtpIG5hICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NzYKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsIGlub2RlOiAiCittc2dzdHIgIlR3b3J6ZW5pZSBpLXfEmXrFgmEga3JvbmlraTogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2ODUKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0cG9kY3phcyBwcsOzYnkgdXR3b3J6ZW5pYSBwbGlrdSBrcm9uaWtpIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NjMKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAiTmllIG1vxbxuYSBwcnp5ZHppZWxpxIcgcGFtacSZY2kgZG8gYW5hbGl6eSBvcGNqaSBsaW1pdMOzdyFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6Nzg1Cittc2dpZCAiIgorIlxuIgorIkJhZCBxdW90YSBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJGb2xsb3dpbmcgdmFsaWQgcXVvdGEgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIChwYXNzIGJ5IHNlcGFyYXRpbmcgd2l0aCBjb21tYSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZSBsaW1pdMOzdy5cbiIKKyJcbiIKKyJEb3N0xJlwbmUgc8SFIG5hc3TEmXB1asSFY2Ugb3BjamUgbGltaXTDs3cgKG1vxbxuYSBqZSBwcnpla2F6eXdhxIcgb2RkemllbG9uZSBwcnplY2lua2llbSk6XG4iCisiXHRbXl11c3JxdW90YVxuIgorIlx0W15dZ3JwcXVvdGFcbiIKKyJcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICJOaWUgbW/FvG5hIHByemVhbmFsaXpvd2HEhyBwb2RhbmVqIGRhdHkvY3phc3U6ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAiYsWCxJlkbmEgbGljemJhIG1vbnRvd2HFhCAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGVycm9yIGJlaGF2aW9yIC0gJXMiCittc2dzdHIgImLFgsSZZG5lIHRyYWt0b3dhbmllIGLFgsSZZMOzdyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgImLFgsSZZG55IGdpZC9uYXp3YSBncnVweSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgImLFgsSZZG55IG9kc3TEmXAgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJixYLEmWRueSBwcm9jZW50IHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMDMKK21zZ2lkICItbyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiLW8gbW/FvGUgYnnEhyBwb2RhbmUgdHlsa28gcmF6IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIG1vxbxlIGJ5xIcgcG9kYW5lIHR5bGtvIHJheiIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgImLFgsSZZG5hIGxpY3piYSB6YXJlemVyd293YW55Y2ggYmxva8OzdyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgImLFgsSZZG55IHVpZC9uYXp3YSB1xbx5dGtvd25pa2EgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICJixYLEmWRueSByb3ptaWFyIGktd8SZesWCYSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIlJvem1pYXIgaS13xJl6xYJhIG11c2kgYnnEhyBwb3TEmWfEhSBkd8OzamtpIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiT2tyZXMgdWFrdHVhbG5pYW5pYSBtbXAgemJ5dCBkdcW8eTogJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiVXN0YXdpYW5pZSBva3Jlc3UgdWFrdHVhbG5pYW5pYSB6YWJlenBpZWN6ZW5pYSBwcnplZCB3aWVsb2tyb3RueW0gbW9udG93YW5pZW0gbmEgJWx1IHNla3VuZMSZXG4iCittc2dzdHJbMV0gIlVzdGF3aWFuaWUgb2tyZXN1IHVha3R1YWxuaWFuaWEgemFiZXpwaWVjemVuaWEgcHJ6ZWQgd2llbG9rcm90bnltIG1vbnRvd2FuaWVtIG5hICVsdSBzZWt1bmR5XG4iCittc2dzdHJbMl0gIlVzdGF3aWFuaWUgb2tyZXN1IHVha3R1YWxuaWFuaWEgemFiZXpwaWVjemVuaWEgcHJ6ZWQgd2llbG9rcm90bnltIG1vbnRvd2FuaWVtIG5hICVsdSBzZWt1bmRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBwYXJhbWV0ciBSQUlEIHN0cmlkZTogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIxNworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaXBlLXdpZHRoOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBwYXJhbWV0ciBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBhbGdvcnl0bSBoYXN6b3dhbmlhOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgZG9tecWbbG5lZ28gYWxnb3J5dG11IGhhc3pvd2FuaWEgbmEgJXMgKCVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZS5cbiIKKyJcbiIKKyJPcGNqZSByb3pzemVyem9uZSBzxIUgb2RkemllbGFuZSBwcnplY2lua2FtaSBpIG1vZ8SFIHByenlqbW93YcSHIHBhcmFtZXRyLFxuIgorIlx0a3TDs3J5IGplc3QgdXN0YXdpYW55IHpuYWtpZW0gJz0nLlxuIgorIlxuIgorIlBvcHJhd25lIG9wY2plIHRvOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08YWxnb3J5dG0gaGFzem93YW5pYT5cbiIKKyJcdG1vdW50X29wdHM9PHJvenN6ZXJ6b25lIGRvbXnFm2xuZSBvcGNqZSBtb250b3dhbmlhPlxuIgorIlx0c3RyaWRlPTxyb3ptaWFyIHBvcmNqaSBkYW55Y2ggUkFJRCBuYSBkeXNrdSB3IGJsb2thY2g+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlICogbGljemJhIGR5c2vDs3cgZGFueWNoIHcgYmxva2FjaD5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBiaXRtYXB5IGktd8SZesWCw7N3XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyBiaXRtYXB5IGJsb2vDs3dcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc0NSByZXNpemUvcmVzaXplMmZzLmM6ODcwCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJibG9raSBkbyBwcnplbmllc2llbmlhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ4Cittc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJsb2NrIGJpdG1hcCB3aGVuIGluY3JlYXNpbmcgaW5vZGUgc2l6ZVxuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgcHJ6eWR6aWVsacSHIGJpdG1hcHkgYmxva8OzdyBwb2RjemFzIHp3acSZa3N6YW5pYSByb3ptaWFydSBpLXfEmXrFgmFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiWmEgbWHFgm8gbWllanNjYSwgYWJ5IHp3acSZa3N6ecSHIHJvem1pYXIgaS13xJl6xYJhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnplbWllxZtjacSHIGJsb2vDs3cgcG9kY3phcyB6bWlhbnkgcm96bWlhcnUgaS13xJl6xYJhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkLFgsSFZCBwb2RjemFzIHptaWFueSByb3ptaWFydSBpLXfEmXrFgmEuXG4iCisiTmFsZcW8eSB1cnVjaG9tacSHIGUydW5kbyB3IGNlbHUgd3ljb2ZhbmlhIHptaWFuIHcgc3lzdGVtaWUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgxOAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGRiIGZpbGVuYW1lXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIHBhbWnEmWNpIG5hIG5henfEmSBwbGlrw7N3IHRkYlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODQwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZWxldGUgJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IHVzdW5pxJljaWEgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJBYnkgd3ljb2ZhxIcgb3BlcmFjasSZIHR1bmUyZnMsIHByb3N6xJkgd3lkYcSHIHBvbGVjZW5pZVxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKyJMaWN6YmEgbWFnaWN6bmEgYmxva3UgTU1QIGplc3QgYsWCxJlkbmEuIE1vxbxuYSBwcsOzYm93YcSHIHRvIG5hcHJhd2nEhyB1cnVjaGFtaWFqxIVjOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGlub2RlIHNpemUgaXMgYWxyZWFkeSAlbHVcbiIKK21zZ3N0ciAiUm96bWlhciBpLXfEmXrFgmEganXFvCB3eW5vc2kgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hyaW5raW5nIHRoZSBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiWm1uaWVqc3phbmllIHJvem1pYXJ1IGktd8SZesWCYSBuaWUgamVzdCBvYnPFgnVnaXdhbmVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgIkLFgsSZZG55IHJvem1pYXIgaS13xJl6xYJhICVsdSAobWF4ICVkKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbWF4aW1hbCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJVc3Rhd2lhbmllIG1ha3N5bWFsbmVqIGxpY3pieSBtb250b3dhxYQgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBha3R1YWxuZWdvIGxpY3puaWthIG1vbnRvd2HFhCBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSB0cmFrdG93YW5pYSBixYLEmWTDs3cgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBnaWQgdG8gJWx1XG4iCittc2dzdHIgIlVzdGF3aWFuaWUgZ2lkLWEgemFyZXplcndvd2FueWNoIGJsb2vDs3cgbmEgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgaXMgdG9vIGJpZyAoJWx1KSIKK21zZ3N0ciAib2RzdMSZcCBwb21pxJlkenkgc3ByYXdkemVuaWFtaSBqZXN0IHpieXQgZHXFvHkgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICJVc3Rhd2lhbmllIG9kc3TEmXB1IHBvbWnEmWR6eSBzcHJhd2R6ZW5pYW1pIG5hICVsdSBzZWt1bmRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJVc3Rhd2lhbmllIHByb2NlbnR1IHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IG5hICVnJSUgKCVsbHUgYmxva8OzdylcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MgY291bnQgaXMgdG9vIGJpZyAoJWxsdSkiCittc2dzdHIgImxpY3piYSB6YXJlemVyd293YW55Y2ggYmxva8OzdyBqZXN0IHpieXQgZHXFvGEgKCVsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBsaWN6YnkgemFyZXplcndvd2FueWNoIGJsb2vDs3cgbmEgJWxsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDUwCittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlN5c3RlbSBwbGlrw7N3IGp1xbwgbWEgcnphZGtpZSBzdXBlcmJsb2tpLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisiXG4iCisiRmxhZ2EgcnphZGtpY2ggc3VwZXJibG9rw7N3IHVzdGF3aW9uYS4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjIKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlVzdXdhbmllIHN1cGVyZmxhZ2kgc3BhcnNlIG5pZSBqZXN0IG9ic8WCdWdpd2FuZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBjemFzdSBvc3RhdG5pZWdvIHNwcmF3ZHplbmlhIHN5c3RlbXUgcGxpa8OzdyBuYSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSB1aWQtYSB6YXJlemVyd293YW55Y2ggYmxva8OzdyBuYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEwOAorbXNnaWQgIkVycm9yIGluIHVzaW5nIGNsZWFyX21tcC4gSXQgbXVzdCBiZSB1c2VkIHdpdGggLWZcbiIKK21zZ3N0ciAiQsWCxIVkIHcgdcW8eWNpdSBjbGVhcl9tbXAuIE9wY2phIHRhIG11c2kgYnnEhyB1xbx5dGEgeiAtZlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTI2Cittc2dpZCAiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiRnVua2NqxJkgbGltaXTDs3cgbW/FvG5hIHptaWVuacSHIHR5bGtvIG5hIG5pZXphbW9udG93YW55bSBzeXN0ZW1pZSBwbGlrw7N3LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU5Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJCxYLEmWRueSBmb3JtYXQgVVVJRC1hXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzIKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJSb3ptaWFyIGktd8SZesWCYSBtb8W8bmEgem1pZW5pxIcgdHlsa28gbmEgbmllemFtb250b3dhbnltIHN5c3RlbWllIHBsaWvDs3cuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxODAKK21zZ2lkICIiCisiQ2hhbmdpbmcgdGhlIGlub2RlIHNpemUgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXN5c3RlbXMgd2l0aCB0aGUgZmxleF9iZ1xuIgorImZlYXR1cmUgZW5hYmxlZC5cbiIKK21zZ3N0ciAiIgorIlptaWFuYSByb3ptaWFydSBpLXfEmXrFgmEgbmllIGplc3Qgb2JzxYJ1Z2l3YW5hIGRsYSBzeXN0ZW3Ds3cgcGxpa8Ozd1xuIgorInogd8WCxIVjem9uxIUgY2VjaMSFIGZsZXhfYmcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJVc3Rhd2lhbmllIHJvem1pYXJ1IGktd8SZesWCYSBuYSAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHptaWVuacSHIHJvem1pYXJ1IGktd8SZesWCYVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSByb3ptaWFydSBzdHJpZGUgbmEgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICJVc3Rhd2lhbmllIHN6ZXJva2/Fm2NpIHN0cmlwZSBuYSBuYSAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSByb3pzemVyem9ueWNoIGRvbXnFm2xueWNoIG9wY2ppIG1vbnRvd2FuaWEgbmEgJyVzJ1xuIgorCisjOiBtaXNjL3V0aWwuYzo3NAorbXNnaWQgIlByb2NlZWQgYW55d2F5PyAoeSxuKSAiCittc2dzdHIgIktvbnR5bnVvd2HEhyBtaW1vIHRvPyAodCxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorbXNnc3RyICJOaWUgbW/FvG5hIHd5a29uYcSHIHN0YXQgbmEgJXMgLS0tICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjkyCittc2dpZCAiIgorIlxuIgorIlRoZSBkZXZpY2UgYXBwYXJlbnRseSBkb2VzIG5vdCBleGlzdDsgZGlkIHlvdSBzcGVjaWZ5IGl0IGNvcnJlY3RseT9cbiIKK21zZ3N0ciAiIgorIlxuIgorIlVyesSFZHplbmllIG5hand5cmHFum5pZWogbmllIGlzdG5pZWplOyBjenkgem9zdGHFgm8gcG9kYW5lIHBvcHJhd25pZT9cbiIKKworIzogbWlzYy91dGlsLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBuaWUgamVzdCBzcGVjamFsbnltIHVyesSFZHplbmllbSBibG9rb3d5bS5cbiIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGplc3QgY2HFgnltIHVyesSFZHplbmllbSwgYSBuaWUgdHlsa28gamVkbsSFIHBhcnR5Y2rEhSFcbiIKKworIzogbWlzYy91dGlsLmM6MTU0Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIm1rZTJmcyB3eW11c3pvbmUgbWltbyB0by4gTWFtIG5hZHppZWrEmSwgxbxlIC9ldGMvbXRhYiBzacSZIG15bGkuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAibmllIHpyb2JpxJkgdHV0YWogJXMhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE2NgorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJta2UyZnMgd3ltdXN6b25lIG1pbW8gdG8uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE4MgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIk5pZSBtb8W8bmEgcHJ6eWR6aWVsacSHIHBhbWnEmWNpIG5hIGFuYWxpesSZIG9wY2ppIGtyb25pa2khXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIk5pZSBtb8W8bmEgem5hbGXFusSHIHVyesSFZHplbmlhIGtyb25pa2kgcGFzdWrEhWNlZ28gZG8gJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlBvZGFubyBixYLEmWRuZSBvcGNqZSBrcm9uaWtpLlxuIgorIlxuIgorIk9wY2plIGtyb25pa2kgc8SFIG9kZHppZWxhbmUgcHJ6ZWNpbmthbWkgaSBtb2fEhSBwcnp5am1vd2HEhyBwYXJhbWV0cixcbiIKKyJcdGt0w7NyeSB1c3Rhd2lhIHNpxJkgem5ha2llbSAnPScuXG4iCisiXG4iCisiUG9wcmF3bmUgb3BjamUga3JvbmlraSB0bzpcbiIKKyJcdHNpemU9PHJvem1pYXIga3JvbmlraSB3IG1lZ2FiYWp0YWNoPlxuIgorIlx0ZGV2aWNlPTx1cnrEhWR6ZW5pZSBrcm9uaWtpPlxuIgorIlxuIgorIlJvem1pYXIga3JvbmlraSBtdXNpIGJ5xIcgcG9tacSZZHp5IDEwMjQgYSAxMDI0MDAwMCBibG9rYW1pIHN5c3RlbXUgcGxpa8Ozdy5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6MjU4Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIlN5c3RlbSBwbGlrw7N3IHphIG1hxYJ5IG5hIGtyb25pa8SZXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIsW7xIVkYW55IHJvem1pYXIga3JvbmlraSB0byAlZCBibG9rw7N3OyBtdXNpIGJ5xIdcbiIKKyJwb21pxJlkenkgMTAyNCBhIDEwMjQwMDAwIGJsb2vDs3cuIFByemVyd2Fuby5cbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiUm96bWlhciBrcm9uaWtpIHpieXQgZHXFvHkgZGxhIHN5c3RlbXUgcGxpa8Ozdy5cbiIKKworIzogbWlzYy91dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKyJUZW4gc3lzdGVtIHBsaWvDs3cgYsSZZHppZSBhdXRvbWF0eWN6bmllIHNwcmF3ZHphbnkgY28ga2HFvGRlICVkIG1vbnRvd2HFhFxuIgorImx1YiBjbyAlZyBkbmksIHphbGXFvG5pZSBjbyBuYXN0xIVwaSBwaWVyd3N6ZS4gTW/FvG5hIHRvIHptaWVuacSHIHBvcHJ6ZXpcbiIKKyJ0dW5lMmZzIC1jIGx1YiAtaS5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1kXSBbLXAgcGxpa19waWRdIFstcyDFm2NpZcW8a2FfZ25pYXpkYV0gWy1UIGxpbWl0X2N6YXN1XVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICAgICVzIFstcnx0XSBbLW4gaWxlXSBbLXMgxZtjaWXFvGthX2duaWF6ZGFdXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTQKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJixYLEmWRuZSBhcmd1bWVudHkiCisKKyM6IG1pc2MvdXVpZGQuYzoxNzIKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICLFgsSFY3plbmllIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgInphcGlzIgorCisjOiBtaXNjL3V1aWRkLmM6MTk5Cittc2dpZCAicmVhZCBjb3VudCIKK21zZ3N0ciAib2Rjenl0IGxpY3pieSIKKworIzogbWlzYy91dWlkZC5jOjIwNQorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgImLFgsSZZG5hIGTFgnVnb8WbxIcgb2Rwb3dpZWR6aSIKKworIzogbWlzYy91dWlkZC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICJkZW1vbiB1dWlkZCBqdcW8IGR6aWHFgmEgeiBwaWRlbSAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIHVuaWtzb3dlZ28gZ25pYXpkYSBzdHJ1bWllbmlvd2VnbzogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHBvZHBpxIXEhyBnbmlhemRhIHVuaWtzb3dlZ28gJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJOaWUgbW/FvG5hIG5hc8WCdWNoaXdhxIcgbmEgZ25pZcW6ZHppZSB1bmlrc293eW0gJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiQsWCxIVkIG9kY3p5dHUgb2Qga2xpZW50YSwgZMWCdWdvxZvEhyA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJvcGVyYWNqYSAlZCwgbGljemJhIHByenljaG9kesSFY2EgPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIld5Z2VuZXJvd2FueSBVVUlEIGN6YXNvd3k6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICJXeWdlbmVyb3dhbnkgVVVJRCBsb3Nvd3k6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpIGtvbGVqbnlcbiIKK21zZ3N0clsxXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpICVkIGtvbGVqbmVcbiIKK21zZ3N0clsyXSAiV3lnZW5lcm93YW55IFVVSUQgY3phc293eSAlcyBpICVkIGtvbGVqbnljaFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIld5Z2VuZXJvd2FubyAlZCBVVUlELcOzdzpcbiIKKworIzogbWlzYy91dWlkZC5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICJCxYLEmWRuYSBvcGVyYWNqYSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDc2IG1pc2MvdXVpZGQuYzo0OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlcjogJXNcbiIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTMzIG1pc2MvdXVpZGQuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgd3l3b8WCYW5pYSBkZW1vbmEgdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIGkga29sZWpueSBVVUlEXG4iCittc2dzdHJbMV0gIiVzIGkgJWQga29sZWpuZSBVVUlELXlcbiIKK21zZ3N0clsyXSAiJXMgaSAlZCBrb2xlam55Y2ggVVVJRC3Ds3dcbiIKKworIzogbWlzYy91dWlkZC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJMaXN0IG9mIFVVSUQnczpcbiIKK21zZ3N0ciAiTGlzdGEgVVVJRC3Ds3c6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiTmllb2N6ZWtpd2FuYSBkxYJ1Z2/Fm8SHIG9kcG93aWVkemkgc2Vyd2VyYTogJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgemFiacSHIHV1aWRkIGR6aWHFgmFqxIVjZWdvIHogcGlkZW0gJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIlphcGl0byB1dWlkZCBkemlhxYJhasSFY3kgeiBwaWRlbSAlZFxuIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIlNrxYJhZG5pYTogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIjIFpyenV0IGVrc3RlbnR1OlxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIgorbXNnc3RyICIjXHROdW09JWxsdSwgUm96bWlhcj0lbGx1LCBLdXJzb3I9JWxsdSwgU29ydG93YW5lPSVsbHVcbiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKyJTa8WCYWRuaWE6ICVzIFstZCBmbGFnaV/Fm2xlZHplbmlhXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gdXJ6xIVkemVuaWUgW25vd3lfcm96bV1cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIlJvenN6ZXJ6YW5pZSB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIlJlbG9rb3dhbmllIGJsb2vDs3ciCisKKyM6IHJlc2l6ZS9tYWluLmM6NzEKK21zZ2lkICJTY2FubmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiUHJ6ZXN6dWtpd2FuaWUgdGFibGljeSBpLXfEmXrFgsOzdyIKKworIzogcmVzaXplL21haW4uYzo3NAorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIlVha3R1YWxuaWFuaWUgb2R3b8WCYcWEIGRvIGktd8SZesWCw7N3IgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJQcnplbm9zemVuaWUgdGFibGljeSBpLXfEmXrFgsOzdyIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiTmllem5hbnkgcHJ6ZWJpZWc/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJQb2N6xIV0a293eSBwcnplYmllZyAlZCAobWFrc3ltYWxueSA9ICVsdSlcbiIKKworIzogcmVzaXplL21haW4uYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlJlc2l6aW5nIGJpZ2FsbG9jIGZpbGUgc3lzdGVtcyBoYXMgbm90IGJlZW4gZnVsbHkgdGVzdGVkLiAgUHJvY2VlZFxuIgorImF0IHlvdXIgb3duIHJpc2shICBVc2UgdGhlIGZvcmNlIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBnbyBhaGVhZCBhbnl3YXkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJabWlhbmEgcm96bWlhcsOzdyBzeXN0ZW3Ds3cgcGxpa8OzdyBiaWdhbGxvYyBuaWUgem9zdGHFgmEgamVzemN6ZSB3IHBlxYJuaVxuIgorInByemV0ZXN0b3dhbmEuIEtvbnR5bnVhY2phIHR5bGtvIG5hIHfFgmFzbmUgcnl6eWtvISBBYnkgbWltbyB3c3p5c3Rrb1xuIgorInRvIHd5a29uYcSHLCBuYWxlxbx5IHXFvHnEhyBvcGNqaSBmb3JjZS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAicG9kY3phcyBvdHdpZXJhbmlhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjI3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIHN0YXQgaW5mb3JtYXRpb24gZm9yICVzIgorbXNnc3RyICJwb2RjemFzIHBvYmllcmFuaWEgaW5mb3JtYWNqaSBzdGF0IGRsYSAlcyIKKworIzogcmVzaXplL21haW4uYzozMzcgcmVzaXplL21haW4uYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQcm9zesSZIHVydWNob21pxIcgbmFqcGllcncgJ2UyZnNjayAtZiAlcycuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiUHJ6eWJsacW8b255IG1pbmltYWxueSByb3ptaWFyIHN5c3RlbXUgcGxpa8OzdzogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJCxYLEmWRueSBub3d5IHJvem1pYXI6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkzCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIk5vd3kgcm96bWlhciB6Ynl0IGR1xbx5LCBieSBtw7NnxYIgYnnEhyB3eXJhxbxvbnkgdyAzMiBiaXRhY2hcbiIKKworIzogcmVzaXplL21haW4uYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV3IHNpemUgc21hbGxlciB0aGFuIG1pbmltdW0gKCVsbHUpXG4iCittc2dzdHIgIk5vd3kgcm96bWlhciBqZXN0IG1uaWVqc3p5IG5pxbwgbWluaW1hbG55ICglbGx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjQwNworbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAiQsWCxJlkbmEgZMWCdWdvxZvEhyBzdHJpZGUiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJQYXJ0eWNqYSB6YXdpZXJhasSFY2EgKGx1YiB1cnrEhWR6ZW5pZSkgbWEgdHlsa28gJWxsdSBibG9rw7N3ICglZGspLlxuIgorIlphxbzEhWRhbm8gbm93ZWdvIHJvem1pYXJ1ICVsbHUgYmxva8Ozdy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa8OzdyBqdcW8IG1hIHdpZWxrb8WbxIcgJWxsdSBibG9rw7N3LiBOaWUgbWEgbmljIGRvIHJvYm90eSFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIlptaWFuYSByb3ptaWFydSBzeXN0ZW11IHBsaWvDs3cgJXMgbmEgJWxsdSAoJWRrKSBibG9rw7N3LlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJwb2RjemFzIHByw7NieSB6bWlhbnkgcm96bWlhcnUgJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKyJhZnRlciB0aGUgYWJvcnRlZCByZXNpemUgb3BlcmF0aW9uLlxuIgorbXNnc3RyICIiCisiUHJvc3rEmSB1cnVjaG9tacSHICdlMmZzY2sgLWZ5ICVzJywgYWJ5IG5hcHJhd2nEhyBzeXN0ZW0gcGxpa8Ozd1xuIgorInBvIHByemVyd2FuZWogb3BlcmFjamkgem1pYW55IHJvem1pYXJ1LlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJTeXN0ZW0gcGxpa8OzdyBuYSAlcyBtYSB0ZXJheiAlbGx1IGJsb2vDs3cuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAicG9kY3phcyBwcsOzYnkgc2tyw7NjZW5pYSAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyAlcyBqZXN0IHphbW9udG93YW55IHBvZCAlczsgd3ltYWdhbmEgem1pYW5hIHJvem1pYXJ1IHcgbG9jaWVcbiIKKworIzogcmVzaXplL29ubGluZS5jOjgzCittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiWm1uaWVqc3phbmllIHcgbG9jaWUgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lIgorCisjOiByZXNpemUvb25saW5lLmM6MTA4Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiU3lzdGVtIHBsaWvDs3cgbmllIG9ic8WCdWd1amUgem1pYW55IHJvem1pYXJ1IHcgbG9jaWUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTcKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJaYnl0IG1hxYJvIHphcmV6ZXJ3b3dhbnljaCBibG9rw7N3IGdkdCBkbyB6bWlhbnkgcm96bWlhcnUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMjQKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCByZXNpemluZyBhIGZpbGUgc3lzdGVtIHRoaXMgbGFyZ2UiCittc2dzdHIgIkrEhWRybyBuaWUgb2JzxYJ1Z3VqZSB6bWlhbnkgcm96bWlhcnUgdGFrIGR1xbxlZ28gc3lzdGVtdSBwbGlrw7N3IgorCisjOiByZXNpemUvb25saW5lLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIG1vdW50cG9pbnQgJXMiCittc2dzdHIgInBvZGN6YXMgcHLDs2J5IG90d2FyY2lhIHB1bmt0dSBtb250b3dhbmlhICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiWmHFvMSFZGFubyBzdGFyZWdvIGludGVyZmVqc3UgcmVzaXplLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTU2IHJlc2l6ZS9vbmxpbmUuYzoxNzMKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiQnJhayB1cHJhd25pZcWEIGRvIHptaWFueSByb3ptaWFydSBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTkgcmVzaXplL29ubGluZS5jOjE3OQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIlBvZGN6YXMgc3ByYXdkemFuaWEgb2JzxYJ1Z2kgem1pYW55IHJvem1pYXJ1IHcgbG9jaWUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNzYKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkrEhWRybyBuaWUgb2JzxYJ1Z3VqZSB6bWlhbnkgcm96bWlhcnUgdyBsb2NpZSIKKworIzogcmVzaXplL29ubGluZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJXeWtvbnl3YW5pZSB6bWlhbnkgcm96bWlhcnUgdyBsb2NpZSAlcyBuYSAlbGx1ICglZGspIGJsb2vDs3cuXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJQb2RjemFzIHByw7NieSByb3pzemVyemVuaWEgb3N0YXRuaWVqIGdydXB5IgorCisjOiByZXNpemUvb25saW5lLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICJQb2RjemFzIHByw7NieSBkb2RhbmlhIGdydXB5ICMlZCIKKworIzogcmVzaXplL29ubGluZS5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uXG4iCittc2dzdHIgIlN5c3RlbSBwbGlrw7N3IG5hICVzIGplc3QgemFtb250b3dhbnkgcG9kICVzLCB6bWlhbmEgcm96bWlhcnUgdyBsb2NpZSBuaWUgamVzdCBvYnPFgnVnaXdhbmEgbmEgdHltIHN5c3RlbWllLlxuIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgImxpY3piYSBpLXfEmXrFgsOzdyAoJWxsdSkgbXVzaSBiecSHIG1uaWVqc3phIG5pxbwgJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2MzEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgInphcmV6ZXJ3b3dhbmUgYmxva2kiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzUKK21zZ2lkICJtZXRhLWRhdGEgYmxvY2tzIgorbXNnc3RyICJibG9raSBtZXRhZGFueWNoIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiTmlnZHkgc2nEmSBuaWUgcG93aW5ubyB6ZGFyennEhzogaS13xJl6ZcWCIHptaWFueSByb3ptaWFydSB1c3prb2R6b255IVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEKK21zZ2lkICJFWFQyRlMgTGlicmFyeSB2ZXJzaW9uIDEuNDIuOCIKK21zZ3N0ciAiQmlibGlvdGVrYSBFWFQyRlMgdyB3ZXJzamkgMS40Mi44IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBiYWRibG9ja3NfbGlzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGJhZGJsb2Nrc19pdGVyYXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpbm9kZV9zY2FuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlvX2NoYW5uZWwgdHlwdSB1bml4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpb19tYW5hZ2VyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGJsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBpbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrdHVyeSBnZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHN0cnVrcnV0eSBpb19jaGFubmVsIHR5cHUgdGVzdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGxpc3R5IGJsb2vDs3cga2F0YWxvZ3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgaWNvdW50IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IGlvX2NoYW5uZWwgdHlwdSBQb3dlcnF1ZXN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgc3RydWt0dXJ5IHBsaWt1IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgbmFnxYLDs3drYSBvYnJhenUgZXh0MiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIGRsYSBzdHJ1a3R1cnkgaW9fY2hhbm5lbCBpLXfEmXrFgmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIHVjaHd5dHUgZWtzdGVudHUgZXh0NCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIHcgc3VwZXJibG9rdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMxCittc2dpZCAiRmlsZXN5c3RlbSByZXZpc2lvbiB0b28gaGlnaCIKK21zZ3N0ciAiV2Vyc2phIHN5c3RlbXUgcGxpa8OzdyB6Ynl0IGR1xbxhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiUHLDs2JhIHphcGlzdSB3IHN5c3RlbWllIHBsaWvDs3cgb3R3YXJ0eW0gdHlsa28gZG8gb2Rjenl0dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiTmllIG1vxbxuYSBvZGN6eXRhxIcgZGVza3J5cHRvcsOzdyBncnVwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiTmllIG1vxbxuYSB6YXBpc2HEhyBkZXNrcnlwdG9yw7N3IGdydXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIlVzemtvZHpvbnkgZGVza3J5cHRvciBncnVweTogd2FkbGl3eSBibG9rIGJpdG1hcHkgYmxva8OzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiVXN6a29kem9ueSBkZXNrcnlwdG9yIGdydXB5OiB3YWRsaXd5IGJsb2sgYml0bWFweSBpLXfEmXrFgsOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJVc3prb2R6b255IGRlc2tyeXB0b3IgZ3J1cHk6IHdhZGxpd3kgYmxvayB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk5pZSBtb8W8bmEgemFwaXNhxIcgYml0bWFweSBpLXfEmXrFgsOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIk5pZSBtb8W8bmEgb2Rjenl0YcSHIGJpdG1hcHkgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiTmllIG1vxbxuYSB6YXBpc2HEhyBiaXRtYXB5IGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorbXNnaWQgIkNhbid0IHJlYWQgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJOaWUgbW/FvG5hIG9kY3p5dGHEhyBiaXRtYXB5IGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJOaWUgbW/FvG5hIHphcGlzYcSHIHRhYmxpY3kgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk5pZSBtb8W8bmEgb2Rjenl0YcSHIHRhYmxpY3kgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiTmllIG1vxbxuYSBvZGN6eXRhxIcga29sZWpuZWdvIGktd8SZesWCYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSBuaWVvY3pla2l3YW55IHJvem1pYXIgYmxva3UiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiS2F0YWxvZyBFWFQyIHVzemtvZHpvbnkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiUHLDs2JhIG9kY3p5dHUgYmxva3UgeiBzeXN0ZW11IHBsaWvDs3cgemFrb8WEY3p5xYJhIHNpxJkgc2tyw7Njb255bSBvZGN6eXRlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ4Cittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSBibG9jayB0byBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHdyaXRlIgorbXNnc3RyICJQcsOzYmEgemFwaXN1IGJsb2t1IHcgc3lzdGVtaWUgcGxpa8OzdyB6YWtvxYRjennFgmEgc2nEmSBza3LDs2NvbnltIHphcGlzZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiQnJhayB3b2xuZWdvIG1pZWpzY2EgdyBrYXRhbG9ndSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCittc2dpZCAiSW5vZGUgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIk5pZSB3Y3p5dGFubyBiaXRtYXB5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTmllIHdjenl0YW5vIGJpdG1hcHkgYmxva8OzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUyCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIk5pZWRvendvbG9uYSBsaWN6YmEgaS13xJl6xYLDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJOaWVkb3p3b2xvbmEgbGljemJhIGJsb2vDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgdyBleHQyZnNfZXhwYW5kX2RpciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU1Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBidWlsZCBwcm9wb3NlZCBmaWxlc3lzdGVtIgorbXNnc3RyICJaYSBtYcWCbyBtaWVqc2NhIGRvIHpidWRvd2FuaWEgcHJvcG9ub3dhbmVnbyBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBibG9rdSBwcnpla2F6YW55IGRvIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgYmxva3UgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGJsb2t1IHByemVrYXphbnkgZG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgaS13xJl6xYJhIHByemVrYXphbnkgZG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjAKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBpLXfEmXrFgmEgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGktd8SZesWCYSBwcnpla2F6YW55IGRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQcsOzYmEgc2ZhxYJzem93YW5pYSBrb8WEY2EgYml0bWFweSBibG9rw7N3IHphIHByYXdkeml3eW0ga2/FhGNlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJQcsOzYmEgc2ZhxYJzem93YW5pYSBrb8WEY2EgYml0bWFweSBpLXfEmXrFgsOzdyB6YSBwcmF3ZHppd3ltIGtvxYRjZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlpuYWxlemlvbm8gbmllZG96d29sb255IGJsb2sgcG/Fm3JlZG5pIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiWm5hbGV6aW9ubyBuaWVkb3p3b2xvbnkgYmxvayBwb2R3w7NqbmllIHBvxZtyZWRuaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlpuYWxlemlvbm8gbmllZG96d29sb255IGJsb2sgcG90csOzam5pZSBwb8WbcmVkbmkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQml0bWFweSBibG9rw7N3IG5pZSBzxIUgdGFraWUgc2FtZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJCaXRtYXB5IGktd8SZesWCw7N3IG5pZSBzxIUgdGFraWUgc2FtZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk5pZWRvendvbG9uYSBsdWIgxbpsZSB6YXBpc2FuYSBuYXp3YSB1cnrEhWR6ZW5pYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICJHcnVwYSBibG9rw7N3IG5pZSBtYSB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIlN1cGVyYmxvayBleHQyIGplc3QgdXN6a29kem9ueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJOaWVkb3p3b2xvbnkgbnVtZXIgYml0dSBwcnpla2F6YW55IGRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiTmllZG96d29sb255IG51bWVyIGJpdHUgcHJ6ZWthemFueSBkbyBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk5pZWRvendvbG9ueSBudW1lciBiaXR1IHByemVrYXphbnkgZG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiTmFwb3RrYW5vIHpieXQgZHXFvG8gZG93acSFemHFhCBzeW1ib2xpY3pueWNoLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkZ1bmtjamEgd3l3b8WCYW5pYSB6d3JvdG5lZ28gbmllIG9ic8WCdcW8eSB0ZWdvIHByenlwYWRrdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICJJLXfEmXplxYIgcG9jaG9kesSFY3kgeiB3YWRsaXdlZ28gYmxva3UgdyB0YWJsaWN5IGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzgKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSB3xYLEhWN6b25lIG5pZSBvYnPFgnVnaXdhbmUgY2VjaHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJTeXN0ZW0gcGxpa8OzdyBtYSB3xYLEhWN6b25lIG5pZSBvYnPFgnVnaXdhbmUgY2VjaHkgdHlsa28gZG8gb2Rjenl0dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJOaWUgcG93aW9kxYJvIHNpxJkgcHJ6ZW1pZXN6Y3plbmllIHcga2FuYcWCIHdlL3d5IHByenkgb2RjenljaWUgbHViIHphcGlzaWUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiUHJ6eWR6aWVsZW5pZSBwYW1pxJljaSBuaWUgcG93aW9kxYJvIHNpxJkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiUHJ6ZWthemFubyBixYLEmWRueSBhcmd1bWVudCBkbyBiaWJsaW90ZWtpIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnp5ZHppZWxpxIcgYmxva3UgdyBzeXN0ZW1pZSBwbGlrw7N3IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnp5ZHppZWxpxIcgaS13xJl6xYJhIHcgc3lzdGVtaWUgcGxpa8OzdyBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODUKK21zZ2lkICJFeHQyIGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiSS13xJl6ZcWCIGV4dDIgbmllIGplc3Qga2F0YWxvZ2llbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiWmJ5dCBkdcW8byBvZG5pZXNpZcWEIHcgdGFibGljeSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg3Cittc2dpZCAiRmlsZSBub3QgZm91bmQgYnkgZXh0Ml9sb29rdXAiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHBsaWt1IHcgZXh0Ml9sb29rdXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OAorbXNnaWQgIkZpbGUgb3BlbiByZWFkLW9ubHkiCittc2dzdHIgIlBsaWsgb3R3YXJ0eSB0eWxrbyBkbyBvZGN6eXR1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIGJsb2t1IGthdGFsb2d1IGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJLYXRhbG9nIGV4dDIganXFvCBpc3RuaWVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkxCittc2dpZCAiVW5pbXBsZW1lbnRlZCBleHQyIGxpYnJhcnkgZnVuY3Rpb24iCittc2dzdHIgIk5pZSB6YWltcGxlbWVudG93YW5hIGZ1bmtjamEgYmlibGlvdGVraSBleHQyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIsW7xIVkYW5pZSBwcnplcndhbmlhIG9kIHXFvHl0a293bmlrYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIlBsaWsgZXh0MiB6Ynl0IGR1xbx5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIlByemVrYXphbmUgdXJ6xIVkemVuaWUga3JvbmlraSBuaWUgamVzdCB1cnrEhWR6ZW5pZW0gYmxva293eW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHN1cGVyYmxva3Uga3JvbmlraSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICJLcm9uaWthIG11c2kgbWllxIcgcHJ6eW5ham1uaWVqIDEwMjQgYmxva2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiTmllIG9ic8WCdWdpd2FuYSB3ZXJzamEga3JvbmlraSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB3Y3p5dHl3YW5pYSB6ZXduxJl0cnpuZWoga3JvbmlraSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5Cittc2dpZCAiSm91cm5hbCBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIGtyb25pa2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiTmllIG9ic8WCdWdpd2FuZSBoYXN6b3dhbmllIGthdGFsb2d1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJCxYLEmWRueSBudW1lciBibG9rdSBhdHJ5YnV0dSByb3pzemVyem9uZWdvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAyCittc2dpZCAiQ2Fubm90IGNyZWF0ZSBmaWxlc3lzdGVtIHdpdGggcmVxdWVzdGVkIG51bWJlciBvZiBpbm9kZXMiCittc2dzdHIgIk5pZSBtb8W8bmEgdXR3b3J6ecSHIHN5c3RlbXUgcGxpa8OzdyBvIMW8xIVkYW5laiBsaWN6YmllIGktd8SZesWCw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJNaWdhd2thIGUyaW1hZ2UgbmllIGplc3QgdyB1xbx5Y2l1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA0Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIlpieXQgZHXFvG8gemFyZXplcndvd2FueWNoIGJsb2vDs3cgZGVza3J5cHRvcsOzdyBncnVwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIkktd8SZemXFgiB6bWlhbnkgcm96bWlhcnUgamVzdCB1c3prb2R6b255IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJQcsOzYm93YW5vIHVzdGF3acSHIGJpdG1hcMSZIGJsb2vDs3cgeiBicmFrdWrEhWN5bSBibG9raWVtIGJlenBvxZtyZWRuaW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDcKK21zZ2lkICJUREI6IFN1Y2Nlc3MiCittc2dzdHIgIlREQjogc3VrY2VzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IHVzemtvZHpvbmEgYmF6YSBkYW55Y2giCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICJUREI6IGLFgsSFZCB3ZS93eSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiVERCOiBixYLEhWQgYmxva293YW5pYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBicmFrIHBhbWnEmWNpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICJUREI6IHJla29yZCBpc3RuaWVqZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiVERCOiBpc3RuaWVqZSBibG9rYWRhIG5hIGlubnljaCBrbHVjemFjaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlREQjogYsWCxJlkbnkgcGFyYW1ldHIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiByZWtvcmQgbmllIGlzdG5pZWplIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IHphcGlzIG5pZWRvendvbG9ueSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiTGlzdGEgYmxva8OzdyBrYXRhbG9ndSBleHQyZnMgamVzdCBwdXN0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExOAorbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IGEgYmxvY2sgbWFwcGluZyB2aWEgYSByZWFkLW9ubHkgYmxvY2sgaXRlcmF0b3IiCittc2dzdHIgIlByw7NiYSB6bW9keWZpa293YW5pYSBtYXB5IGJsb2vDs3cgcG9wcnpleiBpdGVyYXRvciBibG9rw7N3IHR5bGtvIGRvIG9kY3p5dHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSDFm2NpZcW8a2kgemFjaG93YW55Y2ggZWtzdGVudMOzdyBleHQ0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgZ2VuZXJpYyBiaXRtYXAiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSBkbGEgb2fDs2xuZWogYml0bWFweSA2NC1iaXRvd2VqIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIDY0LWJpdG93ZWogYml0bWFweSBibG9rw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgaW5vZGUgYml0bWFwIgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgZGxhIDY0LWJpdG93ZWogYml0bWFweSBpLXfEmXrFgsOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSAtLS0gUkVTRVJWRURfMTMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE0IgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgLS0tIFJFU0VSVkVEXzE0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIC0tLSBSRVNFUlZFRF8xNSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSAtLS0gUkVTRVJWRURfMTYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE3IgorbXNnc3RyICJCxYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEgLS0tIFJFU0VSVkVEXzE3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiQsWCxJlkbmEgbGljemJhIG1hZ2ljem5hIC0tLSBSRVNFUlZFRF8xOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBtYWdpY3puYSAtLS0gUkVTRVJWRURfMTkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzAKK21zZ2lkICJDb3JydXB0IGV4dGVudCBoZWFkZXIiCittc2dzdHIgIlVzemtvZHpvbnkgbmFnxYLDs3dlayBla3N0ZW50dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMQorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGluZGV4IgorbXNnc3RyICJVc3prb2R6b255IGluZGVrcyBla3N0ZW50dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICJVc3prb2R6b255IGVrc3RlbnQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIkJyYWsgd29sbmVnbyBtaWVqc2NhIHcgbWFwaWUgZWtzdGVudMOzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJLXfEmXplxYIgbmllIHd5a29yenlzdHVqZSBla3N0ZW50w7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM1Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAiQnJhayBla3N0ZW50dSBuYXN0xJlwbmVnbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICJCcmFrIGVrc3RlbnR1IHBvcHJ6ZWRuaWVnbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJCcmFrIGVrc3RlbnR1ICd3IGfDs3LEmSciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzgKK21zZ2lkICJObyAnZG93bicgZXh0ZW50IgorbXNnc3RyICJCcmFrIGVrc3RlbnR1ICd3IGTDs8WCJyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiQnJhayBiaWXFvMSFY2VnbyB3xJl6xYJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJPcGVyYWNqYSBleHQyZnMgbmllIG9ic8WCdWdpd2FuYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJCcmFrIG1pZWpzY2EgbmEgd3N0YXdpZW5pZSBla3N0ZW50dSB3IHfEmcW6bGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIlBvZHppZWxlbmllIHV0d29yennFgm9ieSBwdXN0eSB3xJl6ZcWCIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiTmllIHpuYWxlemlvbm8gZWtzdGVudHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDQKK21zZ2lkICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgaW5vZGVzIGNvbnRhaW5pbmcgZXh0ZW50cyIKK21zZ3N0ciAiT3BlcmFjamEgbmllIG9ic8WCdWdpd2FuYSBkbGEgaS13xJl6xYLDs3cgemF3aWVyYWrEhWN5Y2ggZWtzdGVudHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIkLFgsSZZG5hIGTFgnVnb8WbxIcgZWtzdGVudHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDYKK21zZ2lkICJJL08gQ2hhbm5lbCBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBibG9jayBudW1iZXJzIgorbXNnc3RyICJLYW5hxYIgd2Uvd3kgbmllIG9ic8WCdWd1amUgNjQtYml0b3d5Y2ggbnVtZXLDs3cgYmxva8OzdyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIk5pZSBtb8W8bmEgc3ByYXdkemnEhywgY3p5IHN5c3RlbSBwbGlrw7N3IGplc3QgemFtb250b3dhbnkgeiBwb3dvZHUgYnJha3UgcGxpa3UgbXRhYiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiU3lzdGVtIHBsaWvDs3cgemJ5dCBkdcW8eSwgYWJ5IHXFvHnEhyBiaXRtYXAgc3RhcmVnbyB0eXB1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiTU1QOiBixYLEmWRuYSBsaWN6YmEgbWFnaWN6bmEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6IHVyesSFZHplbmllIG9iZWNuaWUgYWt0eXduZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MQorbXNnaWQgIk1NUDogZnNjayBiZWluZyBydW4iCittc2dzdHIgIk1NUDogZnNjayBqZXN0IHVydWNob21pb255IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDogbnVtZXIgYmxva3UgcG96YSB6YWtyZXNlbSBzeXN0ZW11IHBsaWvDs3ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogd3lrb255d2FuYSBqZXN0IG5pZXpuYW5hIG9wZXJhY2phIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBzeXN0ZW0gcGxpa8OzdyBuYWRhbCB3IHXFvHljaXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIk1NUDogb3R3YXJjaWUgeiBmbGFnxIUgT19ESVJFQ1QgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiTmllcG9wcmF3bnkgcm96bWlhciBkZXNrcnlwdG9yYSBncnVweSBibG9rw7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIlN1bWEga29udHJvbG5hIGktd8SZesWCYSBuaWUgemdhZHphIHNpxJkgeiBpLXfEmXrFgmVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU4Cittc2dpZCAiSW5vZGUgYml0bWFwIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJpdG1hcCIKK21zZ3N0ciAiU3VtYSBrb250cm9sbmEgYml0bWFweSBpLXfEmXrFgsOzdyBuaWUgemdhZHphIHNpxJkgeiBiaXRtYXDEhSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIlN1bWEga29udHJvbG5hIGJsb2t1IGVrc3RlbnTDs3cgbmllIHpnYWR6YSBzacSZIHogYmxva2llbSBla3N0ZW50w7N3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJCbG9rIGthdGFsb2d1IG5pZSBtYSBtaWVqc2NhIG5hIHN1bcSZIGtvbnRyb2xuxIUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjEKK21zZ2lkICJEaXJlY3RvcnkgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICJTdW1hIGtvbnRyb2xuYSBibG9rdSBrYXRhbG9ndSBuaWUgemdhZHphIHNpxJkgeiBibG9raWVtIGthdGFsb2d1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICJTdW1hciBrb250cm9sbmEgYmxva3Ugcm96c3plcnpvbnljaCBhdHJ5YnV0w7N3IG5pZSB6Z2FkemEgc2nEmSB6IGJsb2tpZW0iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKK21zZ2lkICJTdXBlcmJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIHN1cGVyYmxvY2siCittc2dzdHIgIlN1bWEga29udHJvbG5hIHN1cGVyYmxva3UgbmllIHpnYWR6YSBzacSZIHogc3VwZXJibG9raWVtIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY0Cittc2dpZCAiVW5rbm93biBjaGVja3N1bSBhbGdvcml0aG0iCittc2dzdHIgIk5pZXpuYW55IGFsZ29yeXRtIHN1bXkga29udHJvbG5laiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NQorbXNnaWQgIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCittc2dzdHIgIlN1bWEga29udHJvbG5hIGJsb2t1IE1NUCBuaWUgemdhZHphIHNpxJkgeiBibG9raWVtIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiUGxpayBleHQyIGp1xbwgaXN0bmllamUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsIHcgd2Vyc2ppIDAuMCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTIKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9ub2RlIgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbWFnaWN6bmEgdyBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiTmllIHpuYWxlemlvbm8gc2VrY2ppIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHJlbGFjamkgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTUKK21zZ2lkICJBdHRlbXB0IHRvIGFkZCBhIHJlbGF0aW9uIHRvIG5vZGUgd2hpY2ggaXMgbm90IGEgc2VjdGlvbiIKK21zZ3N0ciAiUHLDs2JhIGRvZGFuaWEgcmVsYWNqaSBkbyB3xJl6xYJhLCBrdMOzcnkgbmllIGplc3Qgc2VrY2rEhSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIk5hZ8WCw7N3ZWsgc2VrY2ppIHByb2ZpbHUgbWEgbmllemVyb3fEhSB3YXJ0b8WbxIciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiQsWCxJlkbmEgbGlzdGEgdyBzdHJ1a3R1cmFjaCBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkLFgsSZZG55IHBvemlvbSBncnVweSB3IHN0cnVrdHVyYWNoIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE5Cittc2dpZCAiQmFkIHBhcmVudCBwb2ludGVyIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiQsWCxJlkbnkgd3NrYcW6bmlrIHJvZHppY2EgdyBzdHJ1a3R1cmFjaCBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlIGl0ZXJhdG9yIgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbWFnaWN6bmEgdyBpdGVyYXRvcnplIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiTmllIG1vxbxuYSB1c3Rhd2nEhyB3YXJ0b8WbY2kgdyB3xJnFumxlIHNla2NqaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIkLFgsSZZG55IGFyZ3VtZW50IHByemVrYXphbnkgZG8gYmlibGlvdGVraSBwcm9maWx1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMworbXNnaWQgIkF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBwcm9maWxlIgorbXNnc3RyICJQcsOzYmEgem1vZHlmaWtvd2FuaWEgcHJvZmlsdSB0eWxrbyBkbyBvZGN6eXR1IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiTmFnxYLDs3dlayBzZWtjamkgcHJvZmlsdSBuaWUgbmEgbmFqd3nFvHN6eW0gcG96aW9taWUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI1Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIiCittc2dzdHIgIkLFgsSFZCBza8WCYWRuaSB3IG5hZ8WCw7N3a3Ugc2VrY2ppIHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIkLFgsSFZCBza8WCYWRuaSB3IHJlbGFjamkgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIk5hZG1pYXJvd3kgbmF3aWFzIHphbXlrYWrEhWN5IHcgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiQnJha3VqxIVjeSBuYXdpYXMgb3R3aWVyYWrEhWN5IHcgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbWFnaWN6bmEgdyBwcm9maWxlX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbWFnaWN6bmEgdyBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiSXRlcm93YW5pZSBwb3ByemV6IHdzenlzdGtpZSBzZWtjamUgbmFqd3nFvHN6ZWdvIHBvemlvbXUgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAiQsWCxJlkbnkgb2JpZWt0IHByb2ZpbGVfc2VjdGlvbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJOaWUgbWEgd2nEmWNlaiBzZWtjamkiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkLFgsSZZG55IG5hbWVzZXQgcHJ6ZWthemFueSBkbyBmdW5rY2ppIG9kcHl0dWrEhWNlaiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzUKK21zZ2lkICJObyBwcm9maWxlIGZpbGUgb3BlbiIKK21zZ3N0ciAiQnJhayBvdHdhcnRlZ28gcGxpa3UgcHJvZmlsdSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIkLFgsSZZG5hIHdhcnRvxZvEhyBtYWdpY3puYSB3IHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIHBsaWt1IHByb2ZpbHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiU2VrY2phIGp1xbwgaXN0bmllamUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM5Cittc2dpZCAiSW52YWxpZCBib29sZWFuIHZhbHVlIgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgbG9naWN6bmEiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJCxYLEmWRuYSB3YXJ0b8WbxIcgY2HFgmtvd2l0YSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiQsWCxJlkbmEgd2FydG/Fm8SHIG1hZ2ljem5hIHcgcHJvZmlsZV9maWxlX2RhdGFfdCIKKworI34gbXNnaWQgIkNsZWFyaW5nIGV4dGVudCBmbGFnIG5vdCBzdXBwb3J0ZWQgb24gJXMiCisjfiBtc2dzdHIgIlVzdXdhbmllIGZsYWdpIGVrc3RlbnTDs3cgbmllIGplc3Qgb2JzxYJ1Z2l3YW5lIG5hICVzIgorCisjfiBtc2dpZCAiIgorI34gIiVzOiBUaGUgY29tYmluYXRpb24gb2YgZmxleF9iZyBhbmRcbiIKKyN+ICJcdCFyZXNpemVfaW5vZGUgZmVhdHVyZXMgaXMgbm90IHN1cHBvcnRlZCBieSByZXNpemUyZnMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogS29tYmluYWNqYSBjZWNoIGZsZXhfYmcgaVxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBuaWUgamVzdCBvYnPFgnVnaXdhbmEgcHJ6ZXogcmVzaXplMmZzLlxuIgorCisjfiBtc2dpZCAiJXMgaXMgbW91bnRlZC4gICIKKyN+IG1zZ3N0ciAiJXMgamVzdCB6YW1vbnRvd2FueS4gIgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL3F1b3Quc2VkIGIvZTJmc3Byb2dzL3BvL3F1b3Quc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjJjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL2UyZnNwcm9ncy9wby9yZW1vdmUtcG90Y2RhdGUuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL3N2LmdtbyBiL2UyZnNwcm9ncy9wby9zdi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwYjAyZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby9zdi5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL3N2LnBvIGIvZTJmc3Byb2dzL3BvL3N2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTAzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vc3YucG8KQEAgLTAsMCArMSw2NjcwIEBACisjIFN3ZWRpc2ggbWVzc2FnZXMgZm9yIGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IMKpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMgR8O2cmFuIFVkZGVib3JnIDxnb2VyYW5AdWRkZWJvcmcuc2U+LCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLgorIworIyAkUmV2aXNpb246IDEuNzQgJAorIworIy4gVGhlIHN0cmluZ3MgaW4gZTJmc2NrJ3MgcHJvYmxlbS5jIGNhbiBiZSB2ZXJ5IGhhcmQgdG8gdHJhbnNsYXRlLAorIy4gc2luY2UgdGhlIHN0cmluZ3MgYXJlIGV4cGFuZGVkIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIEZpcnN0IG9mIGFsbCwKKyMuIHRoZXJlIGlzIGFuIEAtZXhwYW5zaW9uLCB3aGVyZSBzdHJpbmdzIGxpa2UgIkBpIiBhcmUgZXhwYW5kZWQgdG8KKyMuICJpbm9kZSIsIGFuZCBzbyBvbi4gIEluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0cmFuc2xhdG9ycywgdGhlCisjLiBlMmZzcHJvZ3MgcG8gdGVtcGxhdGUgZmlsZSBoYXMgYmVlbiBlbmhhbmNlZCB3aXRoIGNvbW1lbnRzIHRoYXQgc2hvdworIy4gdGhlIEAtZXhwYW5zaW9uLCBmb3IgdGhlIHN0cmluZ3MgaW4gdGhlIHByb2JsZW0uYyBmaWxlLgorIy4KKyMuIFRyYW5zbGF0b3JzIGFyZSBmcmVlIHRvIHVzZSB0aGUgQC1leHBhbnNpb24gZmFjaWxpdHkgaWYgdGhleSBzbworIy4gY2hvb3NlLCBieSBwcm92aWRpbmcgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIGUyZnNjay9tZXNzYWdlLmMuCisjLiBUaGVzZSB0cmFuc2xhdGlvbiBjYW4gY29tcGxldGVseSByZXBsYWNlIGFuIGV4cGFuc2lvbjsgZm9yIGV4YW1wbGUsCisjLiBpZiAiYmJsb2NrIiAod2hpY2ggaW5kaWNhdGVkIHRoYXQgIkBiIiB3b3VsZCBiZSBleHBhbmRlZCB0byAiYmxvY2siKQorIy4gaXMgdHJhbnNsYXRlZCBhcyAiZGRhdGVudmVybHVzdCIsIHRoZW4gIkBkIiB3aWxsIGJlIGV4cGFuZGVkIHRvCisjLiAiZGF0ZW52ZXJsdXN0Ii4gIEFsdGVybmF0aXZlbHksIHRyYW5zbGF0b3JzIGNhbiBzaW1wbHkgbm90IHVzZSB0aGUKKyMuIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGF0IGFsbC4KKyMuCisjLiBUaGUgc2Vjb25kIGV4cGFuc2lvbiB3aGljaCBpcyBkb25lIGZvciBlMmZzY2sncyBwcm9ibGVtLmMgbWVzc2FnZXMgaXMKKyMuIGEgZHluYW1pYyAlLWV4cGFuc2lvbiwgd2hpY2ggZXhwYW5kcyAlaSBhcyBhbiBpbm9kZSBudW1iZXIsIGFuZCBzbworIy4gb24uICBBIHRhYmxlIG9mIHRoZXNlIGV4cGFuc2lvbnMgY2FuIGJlIGZvdW5kIGJlbG93LiAgTm90ZSB0aGF0CisjLiAlLWV4cHJlc3Npb25zIHRoYXQgYmVnaW4gd2l0aCAiJUQiIGFuZCAiJUkiIGFyZSB0d28tY2hhcmFjdGVyCisjLiBleHBhbnNpb25zOyBzbyBmb3IgZXhhbXBsZSwgIiVJdSIgZXhwYW5kcyB0byB0aGUgaW5vZGUncyB1c2VyIGlkCisjLiBvd25lcnNoaXAgZmllbGQgKGlub2RlLT5pX3VpZCkuCisjLiAgCisjLiAJJWIJPGJsaz4JCQlibG9jayBudW1iZXIKKyMuIAklQgk8YmxrY291bnQ+CQlpbnRlZ2VyCisjLiAJJWMJPGJsazI+CQkJYmxvY2sgbnVtYmVyCisjLiAJJURpCTxkaXJlbnQ+IC0+IGlubwkJaW5vZGUgbnVtYmVyCisjLiAJJURuCTxkaXJlbnQ+IC0+IG5hbWUJc3RyaW5nCisjLiAJJURyCTxkaXJlbnQ+IC0+IHJlY19sZW4KKyMuIAklRGwJPGRpcmVudD4gLT4gbmFtZV9sZW4KKyMuIAklRHQJPGRpcmVudD4gLT4gZmlsZXR5cGUKKyMuIAklZAk8ZGlyPiAJCQlpbm9kZSBudW1iZXIKKyMuIAklZwk8Z3JvdXA+CQkJaW50ZWdlcgorIy4gCSVpCTxpbm8+CQkJaW5vZGUgbnVtYmVyCisjLiAJJUlzCTxpbm9kZT4gLT4gaV9zaXplCisjLiAJJUlTCTxpbm9kZT4gLT4gaV9leHRyYV9pc2l6ZQorIy4gCSVJYgk8aW5vZGU+IC0+IGlfYmxvY2tzCisjLiAJJUlsCTxpbm9kZT4gLT4gaV9saW5rc19jb3VudAorIy4gCSVJbQk8aW5vZGU+IC0+IGlfbW9kZQorIy4gCSVJTQk8aW5vZGU+IC0+IGlfbXRpbWUKKyMuIAklSUYJPGlub2RlPiAtPiBpX2ZhZGRyCisjLiAJJUlmCTxpbm9kZT4gLT4gaV9maWxlX2FjbAorIy4gCSVJZAk8aW5vZGU+IC0+IGlfZGlyX2FjbAorIy4gCSVJdQk8aW5vZGU+IC0+IGlfdWlkCisjLiAJJUlnCTxpbm9kZT4gLT4gaV9naWQKKyMuIAklagk8aW5vMj4JCQlpbm9kZSBudW1iZXIKKyMuIAklbQk8Y29tX2VyciBlcnJvciBtZXNzYWdlPgorIy4gCSVOCTxudW0+CisjLiAJJXAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+CisjLiAJJVAJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgPGRpcmVudD4tPmlubyB3aXRoIDxpbm8yPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4gIChJZiBkaXJlbnQgaXMgTlVMTAorIy4gCQkJCXRoZW4gcmV0dXJuIHRoZSBwYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubzI+KQorIy4gCSVxCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8ZGlyPgorIy4gCSVRCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPiB3aXRoIDxkaXI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LgorIy4gCSVzCTxzdHI+CQkJbWlzY2VsbGFuZW91cyBzdHJpbmcKKyMuIAklUwkJYmFja3VwIHN1cGVyYmxvY2sKKyMuIAklWAk8bnVtPgloZXhhZGVjaW1hbCBmb3JtYXQKKyMuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBlMmZzcHJvZ3MgMS40Mi44XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEzLTA2LTE2IDA4OjE3LTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTA4LTE5IDIyOjM1KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEfDtnJhbiBVZGRlYm9yZyA8Z29lcmFuQHVkZGVib3JnLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJMYW5ndWFnZTogc3ZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIkTDpWxpZ3QgYmxvY2sgJXUgdXRhbmbDtnIgZ2lsdGlndCBpbnRlcnZhbGw7IGlnbm9yZXJhcy5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ2aWQgcmltbGlnaGV0c2tvbnRyb2xsIGF2IGlub2RlbiBmw7ZyIGTDpWxpZ2EgYmxvY2siCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo1OAorbXNnaWQgIndoaWxlIHJlYWRpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgInZpZCBsw6RzbmluZyBhdiBpbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NzIgZTJmc2NrL2lzY2FuLmM6MTEwIGUyZnNjay9zY2FudGVzdC5jOjEwNworIzogZTJmc2NrL3VuaXguYzoxMzMyIGUyZnNjay91bml4LmM6MTQyMCBtaXNjL2JhZGJsb2Nrcy5jOjEyMTQKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIyMiBtaXNjL2JhZGJsb2Nrcy5jOjEyMzYgbWlzYy9iYWRibG9ja3MuYzoxMjQ4CisjOiBtaXNjL2R1bXBlMmZzLmM6NTg4IG1pc2MvZTJpbWFnZS5jOjExOTYgbWlzYy9lMmltYWdlLmM6MTMyNAorIzogbWlzYy9lMmltYWdlLmM6MTMzNyBtaXNjL21rZTJmcy5jOjE5NiBtaXNjL3R1bmUyZnMuYzoxOTA3IHJlc2l6ZS9tYWluLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuICVzIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMO2cHBuYSAlcyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyBwb3BlbiAnJXMnIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGFudsOkbmRhIHBvcGVuIFwiJXNcIiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjAzCittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgaSBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9jayBmcsOlbiBmaWwiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInZpZCB1cHBkYXRlcmluZyBhdiBpbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiVmFybmluZzogb3RpbGzDpXRldCBibG9jayAldSBoaXR0YXQgaSBpbm9kZW4gZsOlciBkw6VsaWdhIGJsb2NrLiAgVMO2bXQuXG4iCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgYmxvY2sgJWx1ICglcykgdmlkICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IGJsb2NrICVsdSAoJXMpLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIklnbm9yZXJhIGZlbCIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICJGcmFtdHZpbmdhIG9tc2tyaXZuaW5nIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgYmxvY2sgJWx1ICglcykgdmlkICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgYmxvY2sgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJ0b21tYSBrYXRhbG9nYmxvY2siCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAidG9tIGthdGFsb2drYXJ0YSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIlRvbXQga2F0YWxvZ2Jsb2NrICV1IChuci4gJWQpIGkgaW5vZCAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBmaWxuYW1uIG5ibG9jayBibG9ja3N0b3JsZWtcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAiT3RpbGzDpXRldCBhbnRhbCBibG9jayFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBibG9ja2J1ZmZlcnQgKHN0b3JsZWs9JWQpXG4iCisKKyM6IGUyZnNjay9mbHVzaGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgZGlza1xuIgorbXNnc3RyICJBbnbDpG5kbmluZzogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYtaW9jdGwgc3TDtmRzIGludGUhICBLYW4gaW50ZSB0w7ZtbWEgYnVmZmVydGFyLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLUZdIFstSSBpbm9kYnVmZmVydGJsb2NrXSBlbmhldFxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAidmlkIMO2cHBuaW5nIGF2ICVzIGbDtnIgdXRza3Jpdm5pbmciCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTY3IHJlc2l6ZS9tYWluLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBza3JpdmEgdXQgJXMiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA5MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidmlkIMO2cHBuaW5nIGF2IGlub2Rzw7ZrbmluZyIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjExMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgIm7DpHIgbsOkc3RhIGlub2QgaMOkbXRhZGVzIgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGlub2RlciBnZW5vbXPDtmt0YS5cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1MjIKK21zZ2lkICJyZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICJsw6RzZXIgam91cm5hbHN1cGVyYmxvY2tcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG5vIHZhbGlkIGpvdXJuYWwgc3VwZXJibG9jayBmb3VuZFxuIgorbXNnc3RyICIlczogaW5nZXQgZ2lsdGlndCBqb3VybmFsc3VwZXJibG9jayBoaXR0YWRlc1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogam91cm5hbCB0b28gc2hvcnRcbiIKK21zZ3N0ciAiJXM6IGpvdXJuYWxlbiBmw7ZyIGtvcnRcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczogw6V0ZXJow6RtdGFyIGpvdXJuYWxlblxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IMOldGVyaMOkbXRhciBpbnRlIGpvdXJuYWxlbiBpIHNrcml2c2t5ZGRhdCBsw6RnZVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjkwOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmUtb3BlbiAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCDDpXRlcsO2cHBuYSAlcyIKKworIyBGw7Zyc3RhIGJva3N0YXZlbiBpIGRldHRhIG9jaCBmw7ZsamFuZGUgbWVkZGVsYW5kZW4gw6RyIGV0dCBpbmRleCBzb20KKyMgYW52w6RuZHMgc29tIGVuIGbDtnJrb3J0bmluZyBpIGFuZHJhIG1lZGRlbGFuZGVuLCBvY2ggaW50ZSBza3JpdnMgdXQuCisjIFVwcHNsYWduaW5nZW4gc2tlciBww6UgZGV0IHVyc3BydW5nbGlnYSBtZWRkZWxhbmRldCwgc8OlIGRldCBzcGVsYXIKKyMgZWdlbnRsaWdlbiBpbmdlbiByb2xsIHZpbGtldCB0ZWNrZW4gc29tIHN0w6VyIGbDtnJzdCBpIGRlbiDDtnZlcnNhdHRhCisjIHN0csOkbmdlbi4gIERldCB2aWt0aWdhIMOkciBhdHQgZGV0IHN0w6VyIG7DpWdvbiBwbGF0c2jDpWxsYXJlIGTDpHIsIGbDtnJzdGEKKyMgdGVja25ldCBza3JpdnMgaW50ZSB1dCwgdmFyZSBzaWcgaSBvcmdpbmFsc3Ryw6RuZ2VuIGVsbGVyIGRlbiDDtnZlcnNhdHRhCisjIHN0csOkbmdlbi4gIEphZyB0eWNrdGUgZGV0IHZhciBiw6RzdCBhdHQgYmVow6VsbGEgb3JnaW5hbHRlY2tuZXQuCisjCisjIEphZyBoYXIgZmVscmFwcG9ydGVyYXQgaGVsYSBpZMOpbi4gIERldCBpbm5lYsOkciBqdSBhdHQgbWFuIGJ5Z2dlciBpaG9wCisjIG1lbmluZ2FyIGZyw6VuIGRlbGFyLCBvY2ggZGV0IGJydWthciBqdSBnw6Ugc8O2bmRlciBpIMO2dmVyc8OkdHRuaW5nYXIgbWVkCisjIG9saWthIGdlbnVzIG9jaCBkeWxpa3QuICBNZW4gZsO2cmZhdHRhcmVuIGhhciBlbiBkZWwgYnJhIGFyZ3VtZW50IG9tCisjIGF0dCBmw7Zya29ydG5pbmdzc3lzdGVtZXQgw6RyIGVuIGbDtnJkZWwgbsOkciBtYW4gc2thbGwgZsOlIHBsYXRzIG1lZCBzw6UKKyMgbXlja2V0IHNvbSBtw7ZqbGlndCBww6UgZW4gcsOkZGRuaW5nc2Rpc2tldHQuICBJIGRldCBmYWxsZXQgw6RyIMOkbmTDpQorIyBrbmFwcGFzdCDDtnZlcnPDpHR0bmluZ2FyIG1lZC4gIFPDpSBkZW4gYsOkc3RhIGzDtnNuaW5nZW4gw6RyIG5vZyBhdHQgbMOldGEKKyMgc3lzdGVtZXQgc29tIHPDpWRhbnQgZmlubmFzIGt2YXIsIG1lbiBpbnRlIGFudsOkbmRhIGRldCBhbGxzIGkgw7Z2ZXJzYXR0YQorIyBtZWRkZWxhbmRlbi4KKyM6IGUyZnNjay9tZXNzYWdlLmM6MTEzCittc2dpZCAiYWV4dGVuZGVkIGF0dHJpYnV0ZSIKK21zZ3N0ciAiYXV0w7ZrYXQgYXR0cmlidXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFmZWwgdmlkIGFsbG9rZXJpbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvY2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE2Cittc2dpZCAiQmJpdG1hcCIKK21zZ3N0ciAiQmJpdGthcnRhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY2tvbXByaW1lcmEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE4Cittc2dpZCAiQ2NvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgQGIiCittc2dzdHIgIkNrb25mbGlrdCBtZWQgbsOlZ290IGFubmF0IGZzIEBiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWlub2QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIklvdGlsbMOldGVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqam91cm5hbCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjIKK21zZ2lkICJEZGVsZXRlZCIKK21zZ3N0ciAiRHJhZGVyYWQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZGthdGFsb2ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI0Cittc2dpZCAiZWVudHJ5IgorbXNnc3RyICJlcG9zdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRXBvc3QgXCIlRG5cIiBpICVwICglaSkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI2Cittc2dpZCAiZmZpbGVzeXN0ZW0iCittc2dzdHIgImZmaWxzeXN0ZW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI3Cittc2dpZCAiRmZvciBAaSAlaSAoJVEpIGlzIgorbXNnc3RyICJGZsO2ciBpbm9kICVpICglUSkgw6RyIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOAorbXNnaWQgImdncm91cCIKK21zZ3N0ciAiZ2dydXBwIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyOQorbXNnaWQgImhIVFJFRSBAZCBAaSIKK21zZ3N0ciAiaEhUUkVFIGthdGFsb2ctaW5vZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTMOkciBlbiBsw6RuayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibWZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzMKK21zZ2lkICJuaW52YWxpZCIKK21zZ3N0ciAibm9naWx0aWciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvZsO2csOkbGRyYWzDtnMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInBwcm9ibGVtIGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM2Cittc2dpZCAicXF1b3RhIgorbXNnc3RyICJxa3ZvdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicnJvdGlub2QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic3NrdWxsZSB2YXJpdCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3N1cGVyYmxvY2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVsw7ZzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInZlbmhldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4dXRzdHLDpGNrbmluZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpub2xsw6RuZ2RzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxJbm9kIG5vbGw+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxJbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI8SW5vZGVuIGbDtnIgYW52w6RuZGFya3ZvdGVyPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPElub2RlbiBmw7ZyIGdydXBwa3ZvdGVyPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTkKK21zZ2lkICI8VGhlIGJvb3QgbG9hZGVyIGlub2RlPiIKK21zZ3N0ciAiPFVwcHN0YXJ0c3Byb2dyYW1pbm9kZW4+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPElub2RlbiBmw7ZyIMOldGVyaMOkbXRuaW5nIGF2IGJvcnR0YWduYSBrYXRhbG9nZXI+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxHcnVwcGlkZW50aWZpZXJhcmlub2Rlbj4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPEpvdXJuYWxpbm9kZW4+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFJlc2VydmVyYWQgaW5vZCA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8UmVzZXJ2ZXJhZCBpbm9kIDEwPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzMKK21zZ2lkICJyZWd1bGFyIGZpbGUiCittc2dzdHIgIm5vcm1hbCBmaWwiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICJrYXRhbG9nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNworbXNnaWQgImNoYXJhY3RlciBkZXZpY2UiCittc2dzdHIgInRlY2tlbmVuaGV0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAiYmxvY2tlbmhldCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDEKK21zZ2lkICJuYW1lZCBwaXBlIgorbXNnc3RyICJuYW1uZ2l2ZXQgcsO2ciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDMKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ1IG1pc2MvdXVpZGQuYzoxNjEKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgInV0dGFnIChzb2NrZXQpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJva8OkbmQgZmlsdHlwIG1lZCB0eXAgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMgorbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJpbmRpcmVrdCBibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjQKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImR1YmJlbHQgaW5kaXJla3QgYmxvY2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI2Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJ0cmlwcGVsdCBpbmRpcmVrdCBibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjgKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICLDtnZlcnPDpHR0bmluZ3NibG9jayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzAKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJibG9jayBuci4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAia2FydGEgw7Z2ZXIgZmxlcmZhbGRpZ3QgaSBhbnNwcsOla3N0YWduYSBpbm9kZXIiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo2MTAgZTJmc2NrL3Bhc3MxYi5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImludGVybnQgZmVsOiBrYW4gaW50ZSBoaXR0YSBkdXBfYmxrIGbDtnIgJWxsdVxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICLDpXRlcnbDpG5kZSBmcsOlbiBjbG9uZV9maWxlX2Jsb2NrIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICJpbnRlcm50IGZlbDogZGV0IGdpY2sgaW50ZSBhdHQgc2zDpSB1cHAgRUEtYmxvY2twb3N0IGbDtnIgJWxsdSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGlub2RlIHJlY29yZCBmb3IgJXUiCittc2dzdHIgImludGVybnQgZmVsOiBkZXQgZ2ljayBpbnRlIGF0dCBzbMOlIHVwcCBFQS1pbm9kcG9zdCBmw7ZyICV1IgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgImzDpHNlciBrYXRhbG9nYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjU5OAorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgImthcnRhIMO2dmVyIGFudsOkbmRhIGlub2RlciIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjA5Cittc2dpZCAiZGlyZWN0b3J5IGlub2RlIG1hcCIKK21zZ3N0ciAia2F0YWxvZ2lub2Rza2FydGEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYxOQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgImlub2Rza2FydGEgw7Z2ZXIgcmVndWxqw6RyYSBmaWxlciIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjI4Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAia2FydGEgw7Z2ZXIgYW52w6RuZGEgYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjY5NQorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiw7ZwcG5hciBpbm9kc8O2a25pbmciCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgImjDpG10YXIgbsOkc3RhIGlub2QgZnLDpW4gc8O2a25pbmciCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyMzkKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIlBhc3MgMSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAldSIKK21zZ3N0ciAibMOkc2VyIGluZGlyZWt0YmxvY2sgZsO2ciBpbm9kICV1IgorCisjOiBlMmZzY2svcGFzczEuYzoxMzQ2Cittc2dpZCAiYmFkIGlub2RlIG1hcCIKK21zZ3N0ciAia2FydGEgw7Z2ZXIgZMOlbGlnYSBpbm9kZXIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNjkKK21zZ2lkICJpbm9kZSBpbiBiYWQgYmxvY2sgbWFwIgorbXNnc3RyICJpbm9kIGkga2FydGEgw7Z2ZXIgZMOlbGlnYSBibG9jayIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4OQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgImltYWdpYyBpbm9kc2thcnRhIgorCisjOiBlMmZzY2svcGFzczEuYzoxNDE2Cittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBibG9jayBtYXAiCittc2dzdHIgImthcnRhIMO2dmVyIGZsZXJmYWxkaWd0IGkgYW5zcHLDpWtzdGFnbmEgYmxvY2siCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImthcnRhIMO2dmVyIGJsb2NrIGbDtnIgdXTDtmthZGUgYXR0cmlidXQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjIyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIlNmx1KCVjKTogZsO2cnbDpG50YWRlICU2bHUgZmljayBmeXMgJTZsdSAoYmxrYW50ICVsbGQpXG4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NjAKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgImJsb2NrYml0a2FydGEiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NjYKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImlub2RiaXRrYXJ0YSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjY3MgorbXNnaWQgImlub2RlIHRhYmxlIgorbXNnc3RyICJpbm9kc3RhYmVsbCIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICJQYXNzIDIiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNQorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICJLYW4gaW50ZSBmb3J0c8OkdHRhLiIKKworIzogZTJmc2NrL3Bhc3MzLmM6NzcKK21zZ2lkICJpbm9kZSBkb25lIGJpdG1hcCIKK21zZ3N0ciAiaW5vZCBrbGFyIGJpdGthcnRhIgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJNYXggbWlubmUiCisKKyM6IGUyZnNjay9wYXNzMy5jOjEzNgorbXNnaWQgIlBhc3MgMyIKK21zZ3N0ciAiUGFzcyAzIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImJpdGthcnRhIGbDtnIgdXBwdMOkY2t0IGF2IGlub2Rzc2xpbmdvciIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk2Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICJQYXNzIDQiCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICJQYXNzIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKGluZ2VuIHByb21wdCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIkZpeGEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiVMO2bSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NAorbXNnaWQgIlJlbG9jYXRlIgorbXNnc3RyICJSZWxva2VyYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJBbGxva2VyYSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAiRXhwYW5kZXJhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAiS29wcGxhIHRpbGwgL2xvc3QrZm91bmQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5Cittc2dpZCAiU2FsdmFnZSIKK21zZ3N0ciAiUsOkZGRhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIkthcGEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiVMO2bSBpbm9kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkF2YnJ5dCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICJEZWxhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkZvcnRzw6R0dCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NQorbXNnaWQgIkNsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIgorbXNnc3RyICJLbG9uYSBmbGVyZmFsZGlndCBpYW5zcHLDpWtzdGFnbmEgYmxvY2siCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiVGEgYm9ydCBmaWwiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiVW5kZXJ0cnljayBtZWRkZWxhbmRlbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAiQXZsw6Rua2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjkKK21zZ2lkICJDbGVhciBIVHJlZSBpbmRleCIKK21zZ3N0ciAiVMO2bSBIVHJlZS1pbmRleCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICLDhXRlcnNrYXBhIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIoSU5HRVQpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwCittc2dpZCAiRklYRUQiCittc2dzdHIgIkZJWEFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxCittc2dpZCAiQ0xFQVJFRCIKK21zZ3N0ciAiVMOWTUQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIlJFTE9LRVJBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiQUxMT0tFUkFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIkVYUEFOREVSQUQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODUKK21zZ2lkICJSRUNPTk5FQ1RFRCIKK21zZ3N0ciAiw4VURVJLT1BQTEFEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2Cittc2dpZCAiQ1JFQVRFRCIKK21zZ3N0ciAiU0tBUEFEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIlLDhEREQUQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIktBUEFUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PRCBUw5ZNRCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MAorbXNnaWQgIkFCT1JURUQiCittc2dzdHIgIkFWQlJVVEVUIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCittc2dpZCAiU1BMSVQiCittc2dzdHIgIkRFTEFEIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiRk9SVFPDhFRURVIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIkZMRVJGQUxESUcgSUFOU1BSw4VLU1RBR05BIEJMT0NLIEtMT05BREUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQKK21zZ2lkICJGSUxFIERFTEVURUQiCittc2dzdHIgIkZJTCBCT1JUVEFHRU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUKK21zZ2lkICJTVVBQUkVTU0VEIgorbXNnc3RyICJVTkRFUlRSWUNLVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NgorbXNnaWQgIlVOTElOS0VEIgorbXNnc3RyICJBVkzDhE5LQUQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTcKK21zZ2lkICJIVFJFRSBJTkRFWCBDTEVBUkVEIgorbXNnc3RyICJIVFJFRS1JTkRFWCBUw5ZNVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIktPTU1FUiDDhVRFUlNLQVBBIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJibG9ja2JpdGthcnRhIGbDtnIgZ3J1cHAgJWcgw6RyIGludGUgaSBncnVwcGVuLiAoYmxvY2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgImlub2RzYml0a2FydGEgZsO2ciBncnVwcCAlZyDDpHIgaW50ZSBpIGdydXBwZW4uICAoYmxvY2sgJWIpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIHRhYmxlIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2Cittc2dpZCAiIgorIkBpIHRhYmxlIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCisiV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbiIKK21zZ3N0ciAiIgorImlub2R0YWJlbGwgZsO2ciBncnVwcCAlZyDDpHIgaW50ZSBpIGdydXBwZW4uICAoYmxvY2sgJWIpXG4iCisiVkFSTklORzogQUxMVkFSTElHIERBVEFGw5ZSTFVTVCDDhFIgTcOWSkxJRy5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiU3VwZXJibG9ja2V0IGt1bmRlIGludGUgbMOkc2FzIGVsbGVyIGJlc2tyaXZlciBpbnRlIGV0dCBrb3JyZWt0XG4iCisiZXh0Mi1maWxzeXN0ZW0uICBPbSBlbmhldGVuIMOkciBnaWx0aWcgb2NoIGRlbiB2ZXJrbGlnZW4gaW5uZWjDpWxsZXIgZXR0XG4iCisiZXh0Mi1maWxzeXN0ZW0gKG9jaCBpbnRlIHbDpHhsaW5nc3V0cnltbWUgZWxsZXIgdWZzIGVsbGVyIG7DpWdvdCBhbm5hdClcbiIKKyLDpHIgc3VwZXJibG9ja2V0IHRyYXNpZ3QsIG9jaCBkdSBrYW4gZsO2cnPDtmthIGvDtnJhIG1lZCBldHQgYWx0ZXJuYXRpdnRcbiIKKyJzdXBlcmJsb2NrOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPGVuaGV0PlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgZmlsZXN5c3RlbSBzaXplIChhY2NvcmRpbmcgdG8gdGhlIHN1cGVyYmxvY2spIGlzICViIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZGV2aWNlIGlzICVjIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBFaXRoZXIgdGhlIHN1cGVyYmxvY2sgb3IgdGhlIHBhcnRpdGlvbiB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCFcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzEKK21zZ2lkICIiCisiVGhlIEBmIHNpemUgKGFjY29yZGluZyB0byB0aGUgQFMpIGlzICViIEBic1xuIgorIlRoZSBwaHlzaWNhbCBzaXplIG9mIHRoZSBAdiBpcyAlYyBAYnNcbiIKKyJFaXRoZXIgdGhlIEBTIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1zc3Rvcmxla2VuIChlbmxpZ3Qgc3VwZXJibG9ja2V0KSDDpHIgJWIgYmxvY2tcbiIKKyJEZW4gZnlzaXNrYSBzdG9ybGVrZW4gcMOlIGVuaGV0ZW4gw6RyICVjIGJsb2NrXG4iCisiU3VwZXJibG9ja2V0IGVsbGVyIHBhcnRpdGlvbnN0YWJlbGxlbiDDpHIgZsO2cm1vZGxpZ2VuIHRyYXNpZyFcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja19zaXplID0gJWIsIGZyYWdzaXplID0gJWMuXG4KKyMuIEAtZXhwYW5kZWQ6IFRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbgorIy4gQC1leHBhbmRlZDogZnJvbSB0aGUgYmxvY2sgc2l6ZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgKK21zZ2lkICIiCisiQFMgQGJfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuIgorIlRoaXMgdmVyc2lvbiBvZiBlMmZzY2sgZG9lcyBub3Qgc3VwcG9ydCBmcmFnbWVudCBzaXplcyBkaWZmZXJlbnRcbiIKKyJmcm9tIHRoZSBAYiBzaXplLlxuIgorbXNnc3RyICIiCisiU3VwZXJibG9ja2V0cyBibG9ja3N0b3JsZWsgPSAlYiwgZnJhZ21lbnRzdG9ybGVrID0gJWMuXG4iCisiRGVubmEgdmVyc2lvbiBhdiBlMmZzY2sgc3TDtmRqZXIgaW50ZSBhbmRyYSBmcmFnbWVudHN0b3JsZWthciDDpG5cbiIKKyJibG9ja3N0b3JsZWtlbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBibG9ja3NfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDUKK21zZ2lkICJAUyBAYnNfcGVyX2dyb3VwID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiU3VwZXJibG9ja2V0cyBibG9jayBwZXIgZ3J1cHAgPSAlYiwgc2t1bGxlIGhhIHZhcml0ICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIlN1cGVyYmxvY2tldHMgZsO2cnN0YSBkYXRhYmxvY2sgPSAlYiwgc2t1bGxlIGhhIHZhcml0ICVjXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NQorbXNnaWQgIiIKKyJAZiBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbiIKKyJcbiIKK21zZ3N0ciAiZmlsc3lzdGVtZXQgaGFkZSBpbmdlbiBVVUlEOyBnZW5lcmVyYXIgZW4uXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisiT2JzZXJ2ZXJhOiBvbSBkZXQgw6RyIGZsZXJhIGlub2QtIGVsbGVyIGJsb2NrYml0a2FydGVibG9jayBlbGxlciBlbiBkZWxcbiIKKyJhdiBpbm9kc3RhYmVsbGVuIHNvbSBtw6VzdGUgZmx5dHRhcywga2Fuc2tlIGR1IHZpbGwga8O2cmEgZTJmc2NrIG1lZFxuIgorImZsYWdnYW4gXCItYiAlU1wiIGbDtnJzdC4gIFByb2JsZW1ldCBrYW4gbGlnZ2EgYmFyYSBpIGRlbiBwcmltw6RyYVxuIgorImJsb2NrZ3J1cHBiZXNrcml2YXJlbiwgb2NoIHJlc2VydmJsb2NrZ3J1cHBiZXNrcml2YXJlbiBrYW4gdmFyYSBPSy5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ29ycnVwdGlvbiBmb3VuZCBpbiBzdXBlcmJsb2NrLiAgKCVzID0gJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OQorbXNnaWQgIkNvcnJ1cHRpb24gZm91bmQgaW4gQFMuICAoJXMgPSAlTikuXG4iCittc2dzdHIgIlNrYWRhIGhpdHRhZCBpIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYmVzdMOkbW5pbmcgYXYgZGVuIGZ5c2lza2EgZW5oZXRlbjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3OQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiaW5vZHNhbnRhbCBpIHN1cGVyYmxvY2sgw6RyICVpLCBza2FsbCB2YXJhICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQgc3TDtmRqZXIgaW50ZSBmdW5rdGlvbmVuIGZpbHR5cC5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJTdXBlcmJsb2NrIGhhciBlbiBvZ2lsdGlnIGpvdXJuYWwgKGlub2QgJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIkV4dGVybiBqb3VybmFsIGhhciBmbGVyYSBmaWxzeXN0ZW1zYW52w6RuZGFyZSAoc3TDtmRqcyBlaikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbid0IGZpbmQgZXh0ZXJuYWwgam91cm5hbFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5OAorbXNnaWQgIkNhbid0IGZpbmQgZXh0ZXJuYWwgQGpcbiIKK21zZ3N0ciAiS2FuIGludGUgaGl0dGEgZXh0ZXJuIGpvdXJuYWxcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgYmFkIHN1cGVyYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgYmFkIEBTXG4iCittc2dzdHIgIkV4dGVybiBqb3VybmFsIGhhciBkw6VsaWd0IHN1cGVyYmxvY2tcbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmlsZXN5c3RlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwOAorbXNnaWQgIkV4dGVybmFsIEBqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBAZlxuIgorbXNnc3RyICJFeHRlcm4gam91cm5hbCBzdMO2ZGplciBpbnRlIGRldHRhIGZpbHN5c3RlbVxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMworbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1zam91cm5hbHN1cGVyYmxvY2sgw6RyIGF2IG9rw6RuZCB0eXAgJU4gKGVqIHN0w7Z0dCkuXG4iCisiRGV0IMOkciB0cm9saWd0IGF0dCBkaXR0IGV4ZW1wbGFyIGF2IGUyZnNjayDDpHIgZ2FtbWFsdCBvY2gvZWxsZXIgaW50ZVxuIgorInN0w7ZkamVyIGRldHRhIGpvdXJuYWxmb3JtYXQuXG4iCisiRGV0IMOkciBvY2tzw6UgbcO2amxpZ3QgYXR0IGpvdXJuYWxzdXBlcmJsb2NrZXQgw6RyIHRyYXNpZ3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkpvdXJuYWxzdXBlcmJsb2NrIMOkciB0cmFzaWd0LlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgJXMgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqICVzIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIlN1cGVyYmxvY2tzZmxhZ2dhIGhhcl9qb3VybmFsIMOkciBub2xsc3TDpGxsZCwgbWVuIGVuIGpvdXJuYWwgJXMgZmlubnMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMxCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJTdXBlcmJsb2NrZmxhZ2dhIGJlaMO2dmVyX3LDpHR0YXMgw6RyIHNhdHQsIG1lbiBpbmdlbiBqb3VybmFsIGZpbm5zLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBqb3VybmFsIGhhcyBkYXRhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzNgorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiU3VwZXJibG9ja3NmbGFnZ2EgYmVow7Z2ZXJfcsOkdHRhcyDDpHIgbm9sbHN0w6RsbGQsIG1lbiBqb3VybmFsIGhhciBkYXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJUw7ZtIGpvdXJuYWwiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDYgZTJmc2NrL3Byb2JsZW0uYzo2OTUKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiZmlsc3lzdGVtZXQgaGFyIGZ1bmt0aW9uc2ZsYWdnb3Igc2F0dGEsIG1lbiDDpHIgZXR0IHJldmlzaW9uIDAtZmlsc3lzdGVtLiAgIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiVzIGbDtnLDpGxkcmFsw7ZzIGlub2QgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIHLDpHR0aWdoZXQ9JUltLCBzdG9ybGVrPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1NgorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIk9naWx0aWd0ICVCICglYikgaGl0dGF0IGkgZsO2csOkbGRyYWzDtnMgaW5vZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIlJlZGFuIHTDtm10ICVCICglYikgaGl0dGF0IGkgZsO2csOkbGRyYWzDtnMgaW5vZCAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBvcnBoYW5lZCBpbm9kZSAlaSBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAbyBAaSAlaSBpbiBAUy5cbiIKK21zZ3N0ciAiT2dpbHRpZyBmw7Zyw6RsZHJhbMO2cyBpbm9kICVpIGkgc3VwZXJibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJPZ2lsdGlnIGlub2QgJWkgaSBmw7Zyw6RsZHJhbMO2cyBpbm9kbGlzdGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvY2sgaGFyIG9rw6RuZCBza3JpdnNreWRkYWQgZnVua3Rpb25zZmxhZ2dhIHNhdHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiSm91cm5hbHN1cGVyYmxvY2sgaGFyIG9rw6RuZCBpbmtvbXBhdGliZWwgZnVua3Rpb25zZmxhZ2dhIHNhdHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiSm91cm5hbHZlcnNpb24gc3TDtmRzIGludGUgYXYgZGVubmEgZTJmc2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZseXR0YXIgam91cm5hbCBmcsOlbiAvJXMgdGlsbCBkb2xkIGlub2QuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZlbCB2aWQgZmx5dHRuaW5nIGF2IGpvdXJuYWw6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZvdW5kIGludmFsaWQgVjIgam91cm5hbCBzdXBlcmJsb2NrIGZpZWxkcyAoZnJvbSBWMSBqb3VybmFsKS5cbgorIy4gQC1leHBhbmRlZDogQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgam91cm5hbCBzdXBlcmJsb2NrLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMwMQorbXNnaWQgIiIKKyJGb3VuZCBAbiBWMiBAaiBAUyBmaWVsZHMgKGZyb20gVjEgQGopLlxuIgorIkNsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIEBqIEBTLi4uXG4iCisiXG4iCittc2dzdHIgIiIKKyJIaXR0YWRlIG9naWx0aWdhIFYyLWpvdXJuYWxzdXBlcmJsb2NrZsOkbHQgKGZyw6VuIFYxLWpvdXJuYWwpLlxuIgorIlTDtm1tZXIgZsOkbHQgZWZ0ZXIgVjEtam91cm5hbHN1cGVyYmxvY2sgLi4uXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJ1biBqb3VybmFsIGFueXdheQorIzogZTJmc2NrL3Byb2JsZW0uYzozMDcKK21zZ2lkICJSdW4gQGogYW55d2F5IgorbXNnc3RyICJLw7ZyIGpvdXJuYWwgw6RuZMOlIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzEyCittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIlLDpHR0bmluZ3NmbGFnZ2EgaW50ZSBzYXR0IGkgcmVzZXJ2c3VwZXJibG9jaywgc8OlIGvDtnIgam91cm5hbCDDpG5kw6UuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzE3Cittc2dpZCAiIgorIkJhY2tpbmcgdXAgQGogQGkgQGIgaW5mb3JtYXRpb24uXG4iCisiXG4iCittc2dzdHIgIiIKKyJTw6RrZXJoZXRza29waWVyYXIgYmxvY2tpbmZvcm1hdGlvbiBmw7ZyIGpvdXJuYWxpbm9kLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBoYXIgaW50ZSByZXNpemVfaW5vZGUgYWt0aXZlcmF0LCBtZW4gcl9yZXNlcnZlZF9nZHRfYmxvY2tzXG4iCisiw6RyICVOOyBza3VsbGUgdmFyaXQgbm9sbC4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjgKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICJSZXNpemVfaW5vZGUgw6RyIGludGUgYWt0aXZlcmF0LCBtZW4gc3Rvcmxla3PDpG5kcmluZ3Npbm9kZW4gw6RyIGludGUgbm9sbC4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJTdG9ybGVrc8OkbmRyaW5nc2lub2Qgw6RyIGludGUgZ2lsdGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM4Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorIlN1cGVyYmxvY2tldHMgc2VuYXN0ZSBtb250ZXJpbmdzdGlkICgldCxcbiIKKyJcdG51ID0gJVQpIMOkciBpIGZyYW10aWRlbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MworbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJTdXBlcmJsb2NrZXRzIHNlbmFzdGUgc2tyaXZuaW5nc3RpZCAoJXQsXG4iCisiXHRudSA9ICVUKSDDpHIgaSBmcmFtdGlkZW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGludCBmb3IgZXh0ZXJuYWwgc3VwZXJibG9jayBzaG91bGQgYmUgJVguICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgQHMgJVguICAiCittc2dzdHIgIlN1cGVyYmxvY2t0aXBzIGbDtnIgZXh0ZXJudCBzdXBlcmJsb2NrIGJvcmRlIHZhcmEgJVguIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1MgorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisiTMOkZ2dlciB0aWxsIGRpcmhhc2gtdGlwcyB0aWxsIGZpbHN5c3RlbS5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICJrb250cm9sbHN1bW1hIGbDtnIgZ3J1cHBiZXNrcml2YXJlICVnIMOkciAlMDR4LCBza2FsbCB2YXJhICUwNHkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICJncnVwcGJlc2tyaXZhcmUgJWcgw6RyIG1hcmtlcmFkIG9pbml0aWVyYWQgdXRhbiBhdHQgZWdlbnNrYXBlbiDDpHIgc2F0dC5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiZ3J1cHBiZXNrcml2YXJlICVnIGhhciBvZ2lsdGlndCBhbnRhbCBvYW52w6RuZGEgaW5vZGVyICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiU2lzdGEgZ3J1cHBibG9ja2JpdGthcnRhIG9pbml0aWVyYWQuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdHJhbnNhY3Rpb24gJWkgd2FzIGNvcnJ1cHQsIHJlcGxheSB3YXMgYWJvcnRlZC5cbiIKK21zZ3N0ciAiSm91cm5hbHRyYW5zYWt0aW9uICVpIHZhciB0cmFzaWcsIMOldGVydXBwc3BlbG5pbmdlbiBhdmJyw7Z0cy5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiRmxhZ2dhbiB0ZXN0X2ZzIMOkciBzYXR0IChvY2ggZXh0NCDDpHIgdGlsbGfDpG5saWd0KS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KSAgIgorbXNnc3RyICIiCisiU3VwZXJibG9ja2V0cyBzZW5hc3RlIG1vbnRlcmluZ3N0aWQgbGlnZ2VyIGkgZnJhbXRpZGVuLlxuIgorIlx0KG1lZCBtaW5kcmUgw6RuIGVuIGRhZywgZsO2cm1vZGxpZ2VuIGbDtnIgYXR0IGjDpXJkdmFydWtsb2NrYW4gZ8OlciBmZWwpIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5MgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KS4gICIKK21zZ3N0ciAiIgorIlN1cGVyYmxvY2tldHMgc2tyZXZzIHNlbmFzdCBpIGZyYW10aWRlbi5cbiIKKyJcdChtZWQgbWluZHJlIMOkbiBlbiBkYWcsIGbDtnJtb2RsaWdlbiBmw7ZyIGF0dCBow6VyZHZhcnVrbG9ja2FuIGfDpXIgZmVsKSIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIktvbnRyb2xsc3VtbWEgZsO2ciBlbiBlbGxlciBmbGVyYSBibG9ja2dydXBwYmVza3JpdmFyZSDDpHIgb2dpbHRpZy4gICIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiU8OkdHRlciBhbnRhbGV0IGZyaWEgaW5vZGVyICVqICh2YXIgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDgKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlPDpHR0ZXIgYW50YWxldCBmcmlhIGJsb2NrIHRpbGwgJWMgKHZhciAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiIgorIkfDtnIga3ZvdGlub2QgJWkgKCVRKSBkb2xkLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTgKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgInN1cGVyYmxvY2tldCBoYXIgZXR0IGZlbGFrdGlndCBNTVAtYmxvY2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMworbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAic3VwZXJibG9ja2V0IGhhciBvZ2lsdGlndCBNTVAtbWFnaXNrdCB0YWwuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJQYXNzIDE6IEtvbnRyb2xsZXJhciBpbm9kZXIsIGJsb2NrIG9jaCBzdG9ybGVrYXJcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ0Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIlJvb3Rpbm9kIMOkciBpbnRlIGVuIGthdGFsb2cuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0OQorbXNnaWQgIkByIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gICIKK21zZ3N0ciAicm90aW5vZCBoYXIgZHRpZCBzYXR0IChmw7ZybW9kbGlnZW4gcMOlIGdydW5kIGF2IGdhbW1hbCBta2UyZnMpLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNlcnZlZCBpbm9kZSAlaSAoJVEpIGhhcyBpbnZhbGlkIG1vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU0Cittc2dpZCAiUmVzZXJ2ZWQgQGkgJWkgKCVRKSBoYXMgQG4gbW9kZS4gICIKK21zZ3N0ciAiUmVzZXJ2ZXJhZCBpbm9kICVpICVRIGhhciBvZ2lsdGlnYSByw6R0dGlnaGV0ZXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGRlbGV0ZWQgaW5vZGUgJWkgaGFzIHplcm8gZHRpbWUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBEIEBpICVpIGhhcyB6ZXJvIGR0aW1lLiAgIgorbXNnc3RyICJSYWRlcmFkIGlub2QgJWkgaGFyIGR0aWQgbm9sbC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiSW5vZCAlaSBhbnbDpG5kcywgbWVuIGhhciBkdGlkIHNhdHQuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJJbm9kICVpIMOkciBlbiBub2xsw6RuZ2RzIGthdGFsb2cuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiR3J1cHAgJWc6cyBibG9ja2JpdGthcnRhIHZpZCAlYiBzdMOlciBpIGtvbmZsaWt0IG1lZCBhbm5hdCBmaWxzeXN0ZW1ibG9jay5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzkKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJHcnVwcCAlZzpzIGlub2RiaXRrYXJ0YSB2aWQgJWIgc3TDpXIgaSBrb25mbGlrdCBtZWQgYW5uYXQgZmlsc3lzdGVtYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODQKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJHcnVwcCAlZzpzIGlub2R0YWJlbGwgdmlkICViIHN0w6VyIGkga29uZmxpa3QgbWVkIGFubmF0IGZpbHN5c3RlbWJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJHcnVwcCAlZzpzIGJsb2NrYml0a2FydGEgKCViKSDDpXIgZmVsYWt0aWcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkdydXBwICVnOnMgaW5vZGJpdGthcnRhICglYikgw6RyIGZlbGFrdGlnLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9zaXplIGlzICVJcywgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5OQorbXNnaWQgIkBpICVpLCBpX3NpemUgaXMgJUlzLCBAcyAlTi4gICIKK21zZ3N0ciAiSW5vZCAlaSwgaV9zdG9ybGVrIMOkciAlSXMsIHNrdWxsZSB2YXJpdCAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfYmxvY2tzIGlzICVJYiwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwNAorbXNnaWQgIkBpICVpLCBpX0BicyBpcyAlSWIsIEBzICVOLiAgIgorbXNnc3RyICJJbm9kICVpLCBpX2Jsb2NrIMOkciAlSWIsIHNrdWxsZSB2YXJpdCAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIk9naWx0aWd0ICVCICglYikgaSBpbm9kICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE0Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiJUIgKCViKSDDtnZlcmxhcHBhciBmaWxzeXN0ZW1tZXRhZGF0YSBpIGlub2QgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSW5vZCAlaSBoYXIgb2dpbHRpZ2EgYmxvY2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiRsO2ciBtw6VuZ2Egb2dpbHRpZ2EgYmxvY2sgaSBpbm9kICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICJPZ2lsdGlndCAlQiAoJWIpIGkgaW5vZCBmw7ZyIGZlbGFrdGlnYSBibG9jay4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiRmVsYWt0aWcgYmxvY2tpbm9kIGhhciBvZ2lsdGlnYSBibG9jay4gICIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM5Cittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIkR1cGxpY2VyYXQgZWxsZXIgZmVsYWt0aWd0IGJsb2NrIGFudsOkbmRzIVxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgJWIgdXNlZCBhcyBiYWQgYmxvY2sgaW5vZGUgaW5kaXJlY3QgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ0Cittc2dpZCAiQmFkIEBiICViIHVzZWQgYXMgYmFkIEBiIEBpIGluZGlyZWN0IEBiLiAgIgorbXNnc3RyICJGZWxha3RpZ3QgYmxvY2sgJWIgYW52w6RudCBzb20gaW5kaXJla3RibG9jayBmw7ZyIGlub2QgZsO2ciBkw6VsaWdhIGJsb2NrLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ5Cittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIGhhciBhbnRhZ2xpZ2VuIGJsaXZpdCBza2FkYWQuICBEdSBiw7ZyXG4iCisiYW50YWdsaWdlbiBzbHV0YSBudSBvY2gga8O2cmEgZTJmc2NrIC1jIGbDtnIgYXR0IHPDtmthIGVmdGVyIGTDpWxpZ2EgYmxvY2tcbiIKKyJpIGZpbHN5c3RlbWV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogSWYgdGhlIGJsb2NrIGlzIHJlYWxseSBiYWQsIHRoZSBmaWxlc3lzdGVtIGNhbiBub3QgYmUgZml4ZWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTU2Cittc2dpZCAiIgorIlxuIgorIklmIHRoZSBAYiBpcyByZWFsbHkgYmFkLCB0aGUgQGYgY2FuIG5vdCBiZSBmaXhlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk9tIGJsb2NrZXQgdmVya2xpZ2VuIMOkciBkw6VsaWd0IGthbiBpbnRlIGZpbHN5c3RlbWV0IGxhZ2FzLlxuIgorCisjLiBALWV4cGFuZGVkOiBZb3UgY2FuIHJlbW92ZSB0aGlzIGJsb2NrIGZyb20gdGhlIGJhZCBibG9jayBsaXN0IGFuZCBob3BlXG4KKyMuIEAtZXhwYW5kZWQ6IHRoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYxCittc2dpZCAiIgorIllvdSBjYW4gcmVtb3ZlIHRoaXMgQGIgZnJvbSB0aGUgYmFkIEBiIGxpc3QgYW5kIGhvcGVcbiIKKyJ0aGF0IHRoZSBAYiBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gdGEgYm9ydCBkZXR0YSBibG9jayBmcsOlbiBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9jayBvY2ggaG9wcGFzXG4iCisiYXR0IGJsb2NrZXQgdmVya2xpZ2VuIMOkciBPSy4gbWVuIGRldCBmaW5ucyBpbmdhIGdhcmFuaXRlci5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIHByaW1hcnkgc3VwZXJibG9jayAoJWIpIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NjcKK21zZ2lkICJUaGUgcHJpbWFyeSBAUyAoJWIpIGlzIG9uIHRoZSBiYWQgQGIgbGlzdC5cbiIKK21zZ3N0ciAiRGV0IHByaW3DpHJhIHN1cGVyYmxvY2tldCAoJWIpIMOkciBww6UgbGlzdGFuIMO2dmVyIGTDpWxpZ2EgYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MgorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJCbG9jayAlYiBpIGRlIHByaW3DpHJhIGdydXBwYmVza3JpdmFybmEgw6RyIHDDpSBsaXN0YW4gw7Z2ZXIgZMOlbGlnYSBibG9ja1xuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc4Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiVmFybmluZzogR3J1cHAgJWc6cyBzdXBlcmJsb2NrICglYikgw6RyIGTDpWxpZ3QuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3MgY29weSBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgaGFzIGEgYmFkIGJsb2NrICglYikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTgzCittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBAZyBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgQGIgKCViKS5cbiIKK21zZ3N0ciAiVmFybmluZzogR3J1cHAgJWc6cyBrb3BpYSBhdiBncnVwcGJlc2tyaXZhcm5hIGhhciBldHQgZMOlbGlndCBibG9jayAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICJQcm9ncmFtbWVyaW5nc2ZlbD8gIEJsb2NrIG5yLiAlYiB0YXMgaSBhbnNwcsOlayB1dGFuIGFubGVkbmluZyBpIHByb2Nlc3NfYmFkX2Jsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nICVOIGNvbnRpZ3VvdXMgYmxvY2socykgaW4gYmxvY2sgZ3JvdXAgJWcgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU5NQorbXNnaWQgIkBBICVOIGNvbnRpZ3VvdXMgQGIocykgaW4gQGIgQGcgJWcgZm9yICVzOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgJU4ga29uc2VrdXRpdmEgYmxvY2sgaSBibG9ja2dydXBwICVnIGbDtnIgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJGaWwgdmlkIGFsbG9rZXJpbmcgYXYgYmxvY2tidWZmZXJ0IGbDtnIgcmVsb2tlcmluZyBhdiAlc1xuIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIlJlbG9rZXJhciBncnVwcCAlZzpzICVzIGZyw6VuICViIHRpbGwgJWMgLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAiUmVsb2tlcmFyIGdydXBwICVnOnMgJXMgdGlsbCAlYyAuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE1Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIlZhcm5pbmc6IGt1bmRlIGludGUgbMOkc2EgYmxvY2sgJWIgYXYgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIwCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAiVmFybmluZzoga3VuZGUgaW50ZSBza3JpdmEgYmxvY2sgJWIgYXYgJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjI1IGUyZnNjay9wcm9ibGVtLmM6MTQ3NAorbXNnaWQgIkBBIEBpIEBCICglTik6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBpbm9kYml0a2FydGEgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzAKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgYmxvY2tiaXRrYXJ0YSAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGljb3VudC1sw6Rua2luZm9ybWF0aW9uOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBrYXRhbG9nYmxvY2t2ZWt0b3I6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBnZW5vbXPDtmtuaW5nIGF2IGlub2RlciAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpdGVyZXJpbmcgw7Z2ZXIgYmxvY2sgaSBpbm9kICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgbGFncmluZyBhdiBpbm9kc3LDpGtuYXJpbmZvcm1hdGlvbiAoaW5vZD0laSwgYW50YWw9JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBsYWdyaW5nIGF2IGthdGFsb2dibG9ja3NpbmZvcm1hdGlvbiAoaW5vZD0laSwgYmxvY2s9JWIsIGFudGFsPSVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBpbm9kICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJJbm9kICVpIGhhciBmbGFnZ2FuIGltYWdpYyBzYXR0LiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiU3BlY2lhbGZpbCAoZW5oZXQvdXR0YWcgKHNvY2tldCkvZmlmby9zeW1sw6RuaykgKGlub2QgJWkpIGhhciBmbGFnZ2FuXG4iCisib2bDtnLDpG5kZXJsaWcgZWxsZXIgZW5kYXN0IHRpbGzDpGdnIHNhdHQuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIklub2QgJWkgaGFyIGtvbXByZXNzaW9uc2ZsYWdnYSBzYXR0IHDDpSBmaWxzeXN0ZW0gdXRhbiBrb21wcmVzc2lvbnNzdMO2ZC4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJTcGVjaWFsaW5vZCAoZW5oZXQvdXR0YWcgKHNvY2tldCkvZmlmbykgJWkgaGFyIG5vbGxza2lsZCBzdG9ybGVrLiAgIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJKb3VybmFsaW5vZCBhbnbDpG5kcywgbWVuIGlubmVow6VsbGVyIGRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaXMgbm90IHJlZ3VsYXIgZmlsZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MDUKK21zZ2lkICJAaiBpcyBub3QgcmVndWxhciBmaWxlLiAgIgorbXNnc3RyICJKb3VybmFsIMOkciBpbnRlIGVuIHZhbmxpZyBmaWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiSW5vZCAlaSB2YXIgbWVkIGkgbGlzdGFuIMO2dmVyIGbDtnLDpGxkcmFsw7ZzYSBpbm9kZXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzE2Cittc2dpZCAiQGlzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gICIKK21zZ3N0ciAiSW5vZGVyIHNvbSB2YXIgbWVkIGkgdHJhc2lnIGxpc3RhIMO2dmVyIGbDtnLDpGxkcmFsw7ZzYSBpbm9kZXIgaGl0dGFkLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMQorbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgcmVmZXJlbnNyw6RrbmFyc3RydWt0dXIgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IHV0w7ZrYWRlIGF0dHJpYnV0LWJsb2NrICViIGbDtnIgaW5vZCAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzEKK21zZ2lkICJAaSAlaSBoYXMgYSBiYWQgQGEgQGIgJWIuICAiCittc2dzdHIgIklub2QgJWkgaGFyIGV0dCBmZWxha3RpZ3QgdXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IHV0w7ZrYWRlIGF0dHJpYnV0LWJsb2NrICViICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIlV0w7ZrYWRlIGF0dHJpYnV0LWJsb2NrICViIGhhciByZWZlcmVuc3LDpGtuYXJlICVyLCBza2FsbCB2YXJhICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0NgorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgdXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiVXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgaGFyIGhfYmxvY2tzID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU2Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBibG9jayBmw7ZyIHV0w7ZrYWRlIGF0dHJpYnV0ICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiVXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgw6RyIHRyYXNpZ3QgKGFsbG9rZXJpbmdza29sbGlzaW9uKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIlV0w7ZrYWRlIGF0dHJpYnV0LWJsb2NrICViIMOkciB0cmFzaWd0IChvZ2lsdGlndCBuYW1uKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiVXTDtmthZGUgYXR0cmlidXQtYmxvY2sgJWIgw6RyIHRyYXNpZ3QgKG9naWx0aWd0IHbDpHJkZSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIklub2QgJWkgw6RyIGbDtnIgc3Rvci4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSBmw6VyIGthdGFsb2cgYXR0IGJsaSBmw7ZyIHN0b3IuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzg1Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGbDpXIgZmlsIGF0dCBibGkgZsO2ciBzdG9yLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiJUIgKCViKSBmw6VyIHN5bWzDpG5rIGF0dCBibGkgZsO2ciBzdG9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIklub2QgJWkgaGFyIGZsYWdnYSBJTkRFWF9GTCBzYXR0IHDDpSBmaWxzeXN0ZW0gdXRhbiBzdMO2ZCBmw7ZyIGh0cmVlLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBAZC5cbiIKK21zZ3N0ciAiSW5vZCAlaSBoYXIgZmxhZ2dhIElOREVYX0ZMIHNhdHQgbWVuIMOkciBpbnRlIGVuIGthdGFsb2cuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkhUUkVFIGthdGFsb2dpbm9kICVpIGhhciBlbiBvZ2lsdGlnIHJvdG5vZC5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMAorbXNnaWQgIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIgorbXNnc3RyICJIVFJFRSBrYXRhbG9nLWlub2QgJWkgaGFyIGVuIGhhc2h2ZXJzaW9uIHNvbSBpbnRlIHN0w7ZkcyAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4iCittc2dzdHIgIkhUUkVFIGthdGFsb2ctaW5vZCAlaSBhbnbDpG5kZXIgZW4gaW5rb21wYXRpYmVsIGh0cmVlIHJvdG5vZHNmbGFnZ2EuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkhUUkVFIGthdGFsb2ctaW5vZCAlaSBoYXIgZXR0IHRyw6RkZGp1cCAoJU4pIHNvbSDDpHIgZsO2ciBzdG9ydFxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNQorbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiSW5vZGVuIGbDtnIgZMOlbGlnYSBibG9jayBoYXIgZXR0IGluZGlyZWt0YmxvY2sgKCViKSBzb20gc3TDpXIgaSBrb25mbGlrdFxuIgorIm1lZCBmaWxzeXN0ZW1zbWV0YWRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6ZSBAaSAocmUpY3JlYXRpb24gZmFpbGVkOiAlbS4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdHQgw6V0ZXJza2FwYSBzdG9ybGVrc8OkbmRyaW5nc2lub2Q6ICVtLiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODM2Cittc2dpZCAiQGkgJWkgaGFzIGEgZXh0cmEgc2l6ZSAoJUlTKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJJbm9kICVpIGhhciBlbiBleHRyYSBzdG9ybGVrICglSVMpIHNvbSDDpHIgb2dpbHRpZ1xuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiVXTDtmthdCBhdHRyaWJ1dCBpIGlub2QgJWkgaGFyIGV0dCBuYW1lbGVuICglTikgc29tIMOkciBvZ2lsdGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiVXTDtmthdCBhdHRyaWJ1dCBpIGlub2QgJWkgaGFyIGVuIHbDpHJkZXBvc2l0aW9uICglTikgc29tIMOkciBvZ2lsdGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIlV0w7ZrYXQgYXR0cmlidXQgaSBpbm9kICVpIGhhciBldHQgdsOkcmRlYmxvY2sgKCVOKSBzb20gw6RyIG9naWx0aWd0IChtw6VzdGUgdmFyYSAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiVXTDtmthdCBhdHRyaWJ1dCBpIGlub2QgJWkgaGFyIGV0dCB2w6RyZGVzdG9ybGVrICglTikgc29tIMOkciBvZ2lsdGlnXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJVdMO2a2F0IGF0dHJpYnV0IGkgaW5vZCAlaSBoYXIgaGFzaCAoJU4pIHNvbSDDpHIgb2dpbHRpZ1xuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODY2Cittc2dpZCAiQGkgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuIgorbXNnc3RyICJpbm9kICVpIMOkciBlbiAlSXQgbWVuIGRldCBzZXIgdXQgc29tIGRldCBlZ2VudGxpZ2VuIMOkciBlbiBrYXRhbG9nLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIMO2dmVyIHV0c3Ryw6Rja25pbmdzdHLDpGQgaSBpbm9kICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgYXR0IGl0ZXJlcmEgw7Z2ZXIgdXRzdHLDpGNrbmluZ2FyIGkgaW5vZCAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorImlub2QgJWkgaGFyIGVuIG9naWx0aWcgdXRzdHLDpGNrbmluZ1xuIgorIlx0KGxvZ2lza3QgYmxvY2sgJWMsIG9naWx0aWd0IGZ5c2lza3QgYmxvY2sgJWIsIGzDpG5nZCAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViLCBpbnZhbGlkIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODcKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViLCBAbiBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJpbm9kICVpIGhhciBlbiBvZ2lsdGlnIHV0c3Ryw6Rja25pbmdcbiIKKyJcdChsb2dpc2t0IGJsb2NrICVjLCBmeXNpc2t0IGJsb2NrICViLCBvZ2lsdGlnIGzDpG5nZCAlTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gQGYgd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4iCittc2dzdHIgIklub2QgJWkgaGFyIGZsYWdnYW4gRVhURU5UU19GTCBzYXR0IHDDpSBmaWxzeXN0ZW1ldCB1dGFuIHN0w7ZkIGbDtnIgdXRzdHLDpGNrbmluZ2FyLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiaW5vZCAlaSDDpHIgaSB1dHN0csOkY2tuaW5nc2Zvcm1hdCwgbWVuIHN1cGVyYmxvY2tldCBzYWtuYXIgZWdlbnNrYXBlbiBFWFRFTlRTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICJpbm9kICVpIHNha25hciBFWFRFTlRfRkwsIG1lbiDDpHIgaSB1dHN0csOkY2tuaW5nc2Zvcm1hdFxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIlNuYWJiIHN5bWzDpG5rICVpIGhhciBFWFRFTlRfRkwgc2F0dC4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTIKK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorImlub2QgJWkgaGFyIHV0c3Ryw6Rja25pbmdhciBpIG9vcmRuaW5nXG4iCisiXHQob2dpbHRpZ3QgbG9naXNrdCBibG9jayAlYywgZnlzaXNrdCBibG9jayAlYiwgbMOkbmdkICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgImlub2QgJWkgaGFyIGVuIG9naWx0aWcgdXRzdHLDpGNrbmluZ3Nub2QgKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGtvbnZlcnRlcmluZyBhdiBibG9ja2JpdGthcnRhIMO2dmVyIHN1YmtsdXN0ZXI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI2Cittc2dpZCAiQHEgQGkgaXMgbm90IHJlZ3VsYXIgZmlsZS4gICIKK21zZ3N0ciAiS3ZvdGFpbm9kZW4gw6RyIGludGUgZW4gdmFubGlnIGZpbC4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMxCittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkt2b3Rpbm9kZW4gYW52w6RuZHMgaW50ZSwgbWVuIGlubmVow6VsbGVyIGRhdGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTM2Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiS3ZvdGlub2RlbiDDpHIgc3lubGlnIGbDtnIgYW52w6RuZGFyZW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDEKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJJbm9kZW4gZsO2ciBkw6VsaWdhIGJsb2NrIHZlcmthciBmZWxha3RpZy4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDYKK21zZ2lkICIiCisiQGkgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuIgorIlx0KEBuIGxvZ2ljYWwgQGIgJWMsIHBoeXNpY2FsIEBiICViKVxuIgorbXNnc3RyICIiCisiaW5vZCAlaSBoYXIgZW4gdXRzdHLDpGNrbmluZyBtZWQgbm9sbCBsw6RuZ2RcbiIKKyJcdChvZ2lsdGlndCBsb2dpc2t0IGJsb2NrICVjLCBmeXNpc2t0IGJsb2NrICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBJbnRlcmlvciBleHRlbnQgbm9kZSBsZXZlbCAlTiBvZiBpbm9kZSAlaTpcbgorIy4gQC1leHBhbmRlZDogTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiIgorIkludGVyaW9yIEB4IG5vZGUgbGV2ZWwgJU4gb2YgQGkgJWk6XG4iCisiTG9naWNhbCBzdGFydCAlYiBkb2VzIG5vdCBtYXRjaCBsb2dpY2FsIHN0YXJ0ICVjIGF0IG5leHQgbGV2ZWwuICAiCittc2dzdHIgIiIKKyJJbnRlcm4gdXRzdHLDpGNrbmluZ3Nub2QgcMOlIG5pdsOlICVOIGF2IGlub2QgJWk6XG4iCisiTG9naXNrIHN0YXJ0ICViIHN0w6RtbWVyIGludGUgbWVkIGxvZ2lzayBzdGFydCAlYyBww6UgbsOkc3RhIG5pdsOlLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NTkKK21zZ2lkICIiCisiQGkgJWksIGVuZCBvZiBleHRlbnQgZXhjZWVkcyBhbGxvd2VkIHZhbHVlXG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorImlub2QgJWksIHNsdXRldCBww6UgdXRzdHLDpGNrbmluZ2VuIMO2dmVyc2tyaWRlciB0aWxsw6V0ZXQgdsOkcmRlXG4iCisiXHQobG9naXNrdCBibG9jayAlYywgZnlzaXNrdCBibG9jayAlYiwgbMOkbmdkICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIGJsb2NrcyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgaW5vZGUuLi5cbgorIy4gQC1leHBhbmRlZDogUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5NjcKK21zZ2lkICIiCisiXG4iCisiUnVubmluZyBhZGRpdGlvbmFsIHBhc3NlcyB0byByZXNvbHZlIEBicyBjbGFpbWVkIGJ5IG1vcmUgdGhhbiBvbmUgQGkuLi5cbiIKKyJQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBAbSBAYnNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkvDtnIgeXR0ZXJsaWdnYXJlIHBhc3MgZsO2ciBhdHQgbMO2c2EgdXBwIGJsb2NrIHNvbSBhbnbDpG5kcyBhdiBtZXIgw6RuIGVuIGlub2QgLi4uXG4iCisiUGFzcyAxQjogU8O2a2VyIGlnZW4gZWZ0ZXIgYmxvY2sgc29tIGFudsOkbmRzIGZsZXJhIGfDpW5nZXJcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiRmxlcmZhbGRpZ3QgaWFuc3Byw6Vrc3RhZ25hIGJsb2NrIGkgaW5vZCAlaToiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGdlbm9tc8O2a25pbmcgYXYgaW5vZGVyICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaW5vZGUgYml0bWFwIChpbm9kZV9kdXBfbWFwKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGkgQEIgKEBpX2R1cF9tYXApOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGFsbG9rZXJpbmcgYXYgaW5vZGJpdGthcnRhIChpbm9kZV9kdXBfbWFwKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgYmxvY2tzIGluIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGl0ZXJlcmluZyDDtnZlciBibG9jayBpIGlub2QgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAzIGUyZnNjay9wcm9ibGVtLmM6MTMxOAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBqdXN0ZXJpbmcgYXYgcmVmZXJlbnNyw6RrbmFyZSBmw7ZyIGV4dGVybmEgYXR0cmlidXQtYmxvY2sgJWIgKGlub2QgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDA4Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJQYXNzIDFDOiBTw7ZrZXIga2F0YWxvZ2VyIGVmdGVyIGlub2RlciBtZWQgZmxlcmZhbGRpZ3QgaWFuc3Byw6Vrc3RhZ25hIGJsb2NrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNAorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJQYXNzIDFEOiBGw7ZybGlrYXIgZmxlcmZhbGRpZ3QgaWFuc3Byw6Vrc3RhZ25hIGJsb2NrXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpbGUgJVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKSBcbgorIy4gQC1leHBhbmRlZDogICBoYXMgJXIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDE5Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkZpbCAlUSAoaW5vZCBuci4gJWksIG1vZGlmaWVyaW5nc3RpZCAlSU0pIFxuIgorIiAgaGFyICVyIGZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSBibG9jaywgZGVsYWRlIG1lZCAlTiBmaWxlcjpcbiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAyNQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICJcdCVRIChpbm9kIG5yLiAlaSwgbW9kaWZpZXJpbmdzdGlkICVJTSlcbiIKKworIy4gQC1leHBhbmRlZDogXHQ8ZmlsZXN5c3RlbSBtZXRhZGF0YT5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDMwCittc2dpZCAiXHQ8QGYgbWV0YWRhdGE+XG4iCittc2dzdHIgIlx0PGZpbHN5c3RlbXNtZXRhZGF0YT5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzUKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisiKERldCBmaW5ucyAlTiBpbm9kZXIgc29tIGlubmVow6VsbGVyIGZsZXJmYWxkaWd0IGlhbnNwcsOla3N0YWduYSBibG9jay4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJGbGVyZmFsZGlnIGlhbnNwcsOla3N0YWduYSBibG9jayByZWRhbiDDtnZlcmzDpXRuYSBlbGxlciBrbG9uYWRlLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrbG9uYSBmaWw6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTkKK21zZ2lkICJQYXNzIDI6IENoZWNraW5nIEBkIHN0cnVjdHVyZVxuIgorbXNnc3RyICJQYXNzIDI6IEtvbnRyb2xsZXJhciBrYXRhbG9nc3RydWt0dXJcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiT2dpbHRpZ3QgaW5vZHNudW1tZXIgZsO2ciBcIi5cIiBpIGthdGFsb2dpbm9kICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY5Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgb2dpbHRpZ3QgaW5vZHNudW1tZXI6ICVEaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzQKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgcmFkZXJhZC9vYW52w6RuZCBpbm9kICVEaS4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gJy4nICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA3OQorbXNnaWQgIkBFIEBMIHRvICcuJyAgIgorbXNnc3RyICJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIMOkciBlbiBsw6RuayB0aWxsIFwiLlwiICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NAorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIHBla2FyIHDDpSBpbm9kICglRGkpIHNvbSBmaW5ucyBpIGV0dCB0cmFzaWd0IGJsb2NrLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4OQorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIMOkciBlbiBsw6RuayB0aWxsIGthdGFsb2cgJVAgKCVEaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTQKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGVuIGzDpG5rIHRpbGwgcm90aW5vZGVuLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5OQorbXNnaWQgIkBFIGhhcyBpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gaXRzIG5hbWUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgaGFyIG9naWx0aWdhIHRlY2tlbiBpIG5hbW5ldC5cbiIKKworIy4gQC1leHBhbmRlZDogTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIlwiLlwiIHNha25hcyBpIGthdGFsb2dpbm9kICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJcIi4uXCIgc2FrbmFzIGkga2F0YWxvZ2lub2QgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE0Cittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiRsO2cnN0YSBwb3N0IFwiJURuXCIgKGlub2Q9JURpKSBpIGthdGFsb2dpbm9kICVpICglcCkgc2t1bGxlIHZhcml0IFwiLlwiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiQW5kcmEgcG9zdCBcIiVEblwiIChpbm9kPSVEaSkgaSBrYXRhbG9naW5vZCAlaSBza3VsbGUgdmFyaXQgXCIuLlwiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI0Cittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmFkZHIgZsO2ciBpbm9kICVpICglUSkgw6RyICVJRiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgZsO2ciBpbm9kICVpICglUSkgw6RyICVJZiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZGlyX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWQsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzQKK21zZ2lkICJpX2Rpcl9hY2wgQEYgJUlkLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Rpcl9hY2wgZsO2ciBpbm9kICVpICglUSkgw6RyICVJZCwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzOQorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9mcmFnIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDQKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaGFzIGludmFsaWQgbW9kZSAoJUltKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQ5Cittc2dpZCAiQGkgJWkgKCVRKSBoYXMgQG4gbW9kZSAoJUltKS5cbiIKK21zZ3N0ciAiSW5vZCAlaSAoJVEpIGhhciBvZ2lsdGlnYSByw6R0dGlnaGV0ZXIgKCVJbSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogQGQgY29ycnVwdGVkXG4iCittc2dzdHIgIkthdGFsb2dpbm9kICVpLCAlQiwgcG9zaXRpb24gJU46IGthdGFsb2dlbiB0cmFzaWdcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTkKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiS2F0YWxvZ2lub2QgJWksICVCLCBwb3NpdGlvbiAlTjogZsO2ciBsw6VuZ3QgZmlsbmFtblxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjQKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkthdGFsb2dpbm9kICVpIGhhciBldHQgb2FsbG9rZXJhdCAlQi4gICIKKworIy4gQC1leHBhbmRlZDogJy4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiXCIuXCIta2F0YWxvZ3Bvc3QgaSBrYXRhbG9naW5vZCAlaSDDpHIgaW50ZSBub2xsdGVybWluZXJhZFxuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJy4uJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIlwiLi5cIi1rYXRhbG9ncG9zdCBpIGthdGFsb2dpbm9kICVpIMOkciBpbnRlIG5vbGx0ZXJtaW5lcmFkXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiSW5vZCAlaSAoJVEpIMOkciBlbiBvZ2lsdGlnIHRlY2tlbmVuaGV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExODQKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEBiIEB2LlxuIgorbXNnc3RyICJJbm9kICVpIChUUSDDpHIgZW4gb2dpbHRpZyBibG9ja2VuaGV0LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGR1cGxpY2VyYWQgXCIuXCItcG9zdC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk0Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgw6RyIGR1cGxpY2VyYWQgXCIuLlwiLXBvc3QuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OSBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJJbnRlcm50IGZlbDoga3VuZGUgaW50ZSBoaXR0YSBkaXJfaW5mbyBmw7ZyICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyByZWNfbGVuIG9mICVEciwgc2hvdWxkIGJlICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDQKK21zZ2lkICJARSBoYXMgcmVjX2xlbiBvZiAlRHIsIEBzICVOLlxuIgorbXNnc3RyICIiCisiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgcmVjX2xlbiAlRHIsIHNrdWxsZSB2YXJpdCAlTi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBhbGxva2VyaW5nIGF2IGljb3VudC1zdHJ1a3R1cjogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpdGVyZXJpbmcgw7Z2ZXIga2F0YWxvZ2Jsb2NrOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYga2F0YWxvZ2Jsb2NrICViIChpbm9kICVpKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBrYXRhbG9nYmxvY2sgJWIgKGlub2QgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQgYWxsb2tlcmluZyBhdiBueXR0IGthdGFsb2dibG9jayBmw7ZyIGlub2QgJWkgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIGRlYWxsb2tlcmluZyBhdiBpbm9kICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIkthdGFsb2dwb3N0IGbDtnIgXCIuXCIgaSAlcCAoJWkpIMOkciBzdG9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgRklGTy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ0Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBGSUZPLlxuIgorbXNnc3RyICJJbm9kICVpICglUSkgw6RyIGVuIG9naWx0aWcgRklGTy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIHNvY2tldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjQ5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBzb2NrZXQuXG4iCittc2dzdHIgIklub2QgJWkgKCVRKSDDpHIgZXR0IG9naWx0aWd0IHV0dGFnIChzb2NrZXQpLlxuIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTQKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiU8OkdHRlciBmaWx0eXAgZsO2ciBwb3N0IFwiJURuXCIgaSAlcCAoJWkpIHRpbGwgJU4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgc2hvdWxkIGJlICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjU5Cittc2dpZCAiQEUgaGFzIGFuIGluY29ycmVjdCBmaWxldHlwZSAod2FzICVEdCwgQHMgJU4pLlxuIgorbXNnc3RyICJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIGhhciBmZWxha3RpZyBmaWx0eXAgKHZhciAlRHQsIHNrdWxsZSB2YXJpdCAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY0Cittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgZmlsdHlwIHNhdHQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiUG9zdCBcIiVEblwiIGkgJXAgKCVpKSBoYXIgbm9sbMOkbmdkc25hbW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiU3ltbMOkbmsgJVEgKGlub2QgbnIuICVpKSDDpHIgb2dpbHRpZy5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAlaSAoJVEpIGlzIGludmFsaWQgKCVJZikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI3OQorbXNnaWQgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorbXNnc3RyICJVdMO2a2F0IGF0dHJpYnV0LWJsb2NrIGbDtnIgaW5vZCAlaSAoJVEpIMOkciBvZ2lsdGlndCAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODQKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiRmlsc3lzdGVtIGlubmVow6VsbGVyIHN0b3JhIGZpbGVyLCBtZW4gc2FrbmFyIGZsYWdnYW4gTEFSR0VfRklMRSBpIHN1cGVyYmxvY2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODkKK21zZ2lkICJAcCBAaCAlZDogJUIgbm90IHJlZmVyZW5jZWRcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBpbnRlIHJlZmVyZXJhZFxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIHJlZmVyZXJhdCB0dsOlIGfDpW5nZXJcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk5Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBoYXIgZmVsYWt0aWcgbWluLWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBiYWQgbWF4IGhhc2hcbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiAlQiBoYXIgZmVsYWt0aWcgbWF4LWhhc2hcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzA5Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiT2dpbHRpZyBIVFJFRS1rYXRhbG9naW5vZCAlZCAoJXEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTMKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQgKCVxKTogZmVsYWt0aWd0IGJsb2NrbnVtbWVyICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiUHJvYmxlbSBpIEhUUkVFLWthdGFsb2dpbm9kICVkOiBvZ2lsdGlnIHJvdG5vZC5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIlByb2JsZW0gaSBIVFJFRS1rYXRhbG9naW5vZCAlZDogJUIgaGFyIG9naWx0aWcgZ3LDpG5zICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMzCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIiIKKyJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBvZ2lsdGlndCBhbnRhbCAoJU4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzM4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBlbiBvb3JkbmFkIGhhc2gtdGFiZWxsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0MworbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJQcm9ibGVtIGkgSFRSRUUta2F0YWxvZ2lub2QgJWQ6ICVCIGhhciBvZ2lsdGlndCBkanVwICglTilcbiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGluICVwICglaSkgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM0OAorbXNnaWQgIkR1cGxpY2F0ZSBARSBmb3VuZC4gICIKK21zZ3N0ciAiRHVwbGljZXJhZCBwb3N0IFwiJURuXCIgaSAlcCAoJWkpIGhpdHRhZC4gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1MworIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKyJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIGhhciBldHQgaWNrZSB1bmlrdCBmaWxuYW1uLlxuIgorIkJ5dCBuYW1uIHRpbGwgJXMiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBmb3VuZC5cbgorIy4gQC1leHBhbmRlZDogXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1OAorbXNnaWQgIiIKKyJEdXBsaWNhdGUgQGUgJyVEbicgZm91bmQuXG4iCisiXHRNYXJraW5nICVwICglaSkgdG8gYmUgcmVidWlsdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkR1cGxpY2VyYWQgcG9zdCBcIiVEblwiIGhpdHRhZC5cbiIKKyJcdE1hcmtlcmFyICVwICglaSkgZsO2ciBvbWJ5Z2duYWQuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYzCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIGbDtnIgaW5vZCAlaSAoJVEpIMOkciAlTiwgc2t1bGxlIHZhcml0IG5vbGwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFVuZXhwZWN0ZWQgYmxvY2sgaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2OAorbXNnaWQgIlVuZXhwZWN0ZWQgQGIgaW4gQGggJWQgKCVxKS5cbiIKK21zZ3N0ciAiT3bDpG50YXQgYmxvY2sgaSBIVFJFRS1rYXRhbG9nICVkICglcSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3MgorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICJQb3N0IFwiJURuXCIgaSAlcCAoJWkpIHJlZmVyZXJhciBpbm9kICVEaSBpIGdydXBwICVnIGTDpHIgX0lOT0RFX1VOSU5JVCDDpHIgc2F0dC5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBmb3VuZCBpbiBncm91cCAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzc3Cittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgZm91bmQgaW4gQGcgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4iCittc2dzdHIgIlBvc3QgXCIlRG5cIiBpICVwICglaSkgcmVmZXJlcmFyIGlub2QgJURpIGZ1bm5lbiBpIG9hbnbDpG50IGlub2Rzb21yw6VkZSBpIGdydXBwICVnLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgyCittc2dpZCAiaV9maWxlX2FjbF9oaSBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiaV9maWxlX2FjbF9oaSBmw7ZyIGlub2QgJWkgKCVRKSDDpHIgJU4sIHNrdWxsZSB2YXJpdCBub2xsLlxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzg5Cittc2dpZCAiUGFzcyAzOiBDaGVja2luZyBAZCBjb25uZWN0aXZpdHlcbiIKK21zZ3N0ciAiUGFzcyAzOiBLb250cm9sbGVyYXIga2F0YWxvZ2bDtnJiaW5kZWxzZXJcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTQKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJSb3Rpbm9kIGludGUgYWxsb2tlcmFkLiAgIgorCisjLiBALWV4cGFuZGVkOiBObyByb29tIGluIGxvc3QrZm91bmQgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTkKK21zZ2lkICJObyByb29tIGluIEBsIEBkLiAgIgorbXNnc3RyICJJbmdlbiBwbGF0cyBpIGxvc3QrZm91bmQta2F0YWxvZy4gICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiT2bDtnJidW5kZW4ga2F0YWxvZ2lub2QgJWkgKCVwKVxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9sb3N0K2ZvdW5kIGludGUgZnVubmVuLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNAorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICJcIi4uXCIgaSAlUSAoJWkpIMOkciAlUCAoJWopLCBza3VsbGUgdmFyaXQgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiRmVsYWt0aWcgZWxsZXIgZWogZXhpc3RlcmFuZGUgL2xvc3QrZm91bmQuICBLYW4gaW50ZSDDpXRlcmFuc2x1dGEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBleHBhbmRlcmEgL2xvc3QrZm91bmQ6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICJLdW5kZSBpbnRlIMOldGVyZsO2cmJpbmRhICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBmw7Zyc8O2ayBhdHQgaGl0dGEgL2xvc3QrZm91bmQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Jsb2NrOiAlbSB2ZWQgZsO2cnPDtmsgYXR0IHNrYXBhIC9sb3N0K2ZvdW5kLWthdGFsb2dcbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19pbm9kZTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvbG9zdCtmb3VuZCBkaXJlY3RvcnlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfQGk6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL0BsIEBkXG4iCittc2dzdHIgImV4dDJmc19uZXdfaW5vZGU6ICVtIHZpZCBmw7Zyc8O2ayBhdHQgc2thcGEgL2xvc3QrZm91bmQta2F0YWxvZ1xuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gbsOkciBueXR0IGthdGFsb2dibG9jayBza2FwYWRlc1xuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgImV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHZpZCBza3Jpdm5pbmcgYXYga2F0YWxvZ2Jsb2NrZXQgZsO2ciAvbG9zdCtmb3VuZFxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJGZWwgdmlkIGp1c3RlcmluZyBhdiBpbm9kcsOka25hcmUgcMOlIGlub2QgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgcsOkdHRhIGbDtnLDpGxkZXIgdGlsbCBpbm9kICVpOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgcsOkdHRhIGbDtnLDpGxkZXIgdGlsbCBpbm9kICVpOiBLdW5kZSBpbnRlIGhpdHRhIGbDtnLDpGxkZXJrYXRhbG9ncG9zdFxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJGZWwgdmlkIHNrYXBhbmRlIGF2IHJvdGthdGFsb2cgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiAvbG9zdCtmb3VuZC1rYXRhbG9nICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5OyBhYm9ydGluZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg5Cittc2dpZCAiQHIgaXMgbm90IGEgQGQ7IGFib3J0aW5nLlxuIgorbXNnc3RyICJSb3Rpbm9kIMOkciBpbnRlIGVuIGthdGFsb2c7IGF2YnJ5dGVyLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk0Cittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJLYW4gaW50ZSBmb3J0c8OkdHRhIHV0YW4gZW4gcm90aW5vZC5cbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89JWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwNAorIywgYy1mb3JtYXQKK21zZ2lkICIvQGwgaXMgbm90IGEgQGQgKGlubz0laSlcbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgw6RyIGludGUgZW4ga2F0YWxvZyAoaW5vPSVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhc3MgM0E6IE9wdGltZXJhciBrYXRhbG9nZXJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IHNrYXBhIGRpcnNfdG9faGFzaC1pdGVyYXRvcjogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IG9wdGltZXJhIGthdGFsb2cgJXEgKCVkKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTI2Cittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJPcHRpbWVyYXIga2F0YWxvZ2VyOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJQYXNzIDQ6IEtvbnRyb2xsZXJhciByZWZlcmVuc3LDpGtuYXJlXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAeiBAaSAlaS4gICIKK21zZ3N0ciAiTMO2cyBub2xsw6RuZ2RzaW5vZCAlaS4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAibMO2cyBpbm9kICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIklub2QgJWkgcmVmZXJlbnNyw6RrbmFyZSDDpHIgJUlsLCBza3VsbGUgdmFyaXQgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVkFSTklORzogUFJPR1JBTU1FUklOR1NGRUwgSSBFMkZTQ0shXG4iCisiICAgIEVMTEVSIE7DhUdPTiBLTEFOVFNLQUxMRSAoRFUpIEtPTlRST0xMRVJBUiBFVFQgTU9OVEVSQVQgKEFLVElWVCkgRklMU1lTVEVNLlxuIgorImlub2RfbGlua19pbmZvWyVpXSDDpHIgJU4sIGlub2QuaV9saW5rc19jb3VudCDDpHIgJUlsLiAgRGUgc2t1bGxlIHZhcmEgc2FtbWEhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzIKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiUGFzcyA1OiBLb250cm9sbGVyYXIgZ3J1cHBzYW1tYW5mYXR0bmluZ3NpbmZvcm1hdGlvblxuIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBpbm9kZSBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzcKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAaSBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlV0ZnlsbG5hZCB2aWQgc2x1dGV0IGF2IGlub2RzYml0a2FydGEgw6RyIGludGUgc2F0dC4gIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODIKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIlV0ZnlsbG5hZCB2aWQgc2x1dGV0IGF2IGJsb2NrYml0a2FydGEgw6RyIGludGUgc2F0dC4gIgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTg3Cittc2dpZCAiQGIgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiQmxvY2tiaXRrYXJ0ZXNraWxsbmFkZXI6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwNworbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIklub2RzYml0a2FydGVza2lsbG5hZGVyOiAiCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjI3Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuIgorbXNnc3RyICJBbnRhbCBmcmlhIGlub2RlciDDpHIgZmVsIGbDtnIgZ3J1cHAgbnIuICVnICglaSwgcsOka25hZGU9JWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzMgorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiS2F0YWxvZ2FudGFsIGZlbCBmw7ZyIGdydXBwIG5yLiAlZyAoJWksIHLDpGtuYWRlPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM3Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiQW50YWwgZnJpYSBpbm9kZXIgw6RyIGZlbCAoJWksIHLDpGtuYWRlPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NDIKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIkFudGFsIGZyaWEgYmxvY2sgw6RyIGZlbCBmw7ZyIGdydXBwIG5yLiAlZyAoJWIsIHLDpGtuYWRlPSVjKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ3Cittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiQW50YWwgZnJpYSBibG9jayDDpHIgZmVsICglYiwgcsOka25hZGU9JWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQUk9HUkFNTUlORyBFUlJPUjogZmlsZXN5c3RlbSAoIyVOKSBiaXRtYXAgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgYml0bWFwIAorIy4gQC1leHBhbmRlZDogZW5kcG9pbnRzICglaSwgJWopXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1MgorbXNnaWQgIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiBlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIlBST0dSQU1NRVJJTkdTRkVMOiBmaWxzeXN0ZW0gKG5yLiAlTikgYml0a2FydGFzIMOkbmRwdW5rdGVyICglYiwgJWMpIHN0w6RtbWVyXG4iCisiaW50ZSBtZWQgYmVyw6RrbmFkZSBiaXRrYXJ0ZcOkbmRwdW5rdGVyICglaSwgJWopXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICJJbnRlcm50IGZlbDogZnVza2FyIHRpbGwgc2x1dCBww6UgYml0a2FydGEgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkZlbCB2aWQga29waWVyaW5nIGF2IGVyc8OkdHRuaW5nc2lub2Rza2FydGE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiRmVsIHZpZCBpbmtvcGllcmluZyBhdiBlcnPDpHR0bmluZ3NiaXRrYXJ0YTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgYmxvY2socykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5MworIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAYihzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbiIKK21zZ3N0ciAiYmxvY2sgaSBncnVwcCAlZyBhbnbDpG5kcyBtZW4gZ3J1cHBlbiDDpHIgbWFya2VyYWQgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgImlub2RlciBpIGdydXBwICVnIGFudsOkbmRzIG1lbiBncnVwcGVuIMOkciBtYXJrZXJhZCBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzA1Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIsOFdGVyc2thcGEgam91cm5hbCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNzEwCittc2dpZCAiVXBkYXRlIHF1b3RhIGluZm8gZm9yIHF1b3RhIHR5cGUgJU4iCittc2dzdHIgIlVwcGRhdGVyYSBrdm90aW5mb3JtYXRpb24gZsO2ciBrdm90dHlwICVOIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICJFaiBoYW50ZXJhZCBmZWxrb2QgKDB4JXgpIVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5NTQgZTJmc2NrL3Byb2JsZW0uYzoxOTU4Cittc2dpZCAiSUdOT1JFRCIKK21zZ3N0ciAiSUdOT1JFUkFUIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWQsIGVsYXBzZWQgdGltZTogJTYuM2YvJTYuM2YvJTYuM2ZcbiIKK21zZ3N0ciAiQW52w6RudCBtaW5uZTogJWQsIGbDtnJsdXBlbiB0aWQ6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAic3RvcmxlayBww6UgaW5vZD0lZFxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMTkKK21zZ2lkICJ3aGlsZSBzdGFydGluZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ2aWQgc3RhcnQgYXYgaW5vZHNnZW5vbXPDtmtuaW5nIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ2aWQgaW5vZHNnZW5vbXPDtmtuaW5nIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgInZpZCBhbnJvcCBhdiBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmw7ZyIGlub2QgJWQiCisKKyM6IGUyZnNjay9zdXBlci5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAidmlkIGFucm9wIGF2IGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnQyIGbDtnIgaW5vZCAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAiS2FwYXIiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MworbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJUw7ZtbWVyIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkFudsOkbmRuaW5nOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzdG9ybGVrXVxuIgorIlx0XHRbLUkgaW5vZGJ1ZmZlcnRibG9ja10gWy1QIHByb2Nlc3Npbm9kc3N0b3JsZWtdXG4iCisiXHRcdFstbHwtTCBkw6VsaWdhX2Jsb2NrX2ZpbF0gWy1DIGZkXSBbLWogZXh0ZXJuX2pvdXJuYWxdXG4iCisiXHRcdFstRSB1dMO2a2FkZS1mbGFnZ29yXSBlbmhldFxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiTsO2ZGhqw6RscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgUmVwZWFyZXJhIGF1dG9tYXRpc2t0IChpbmdhIGZyw6Vnb3IpXG4iCisiIC1uICAgICAgICAgICAgICAgICAgIEfDtnIgaW5nYSBmw7Zyw6RuZHJpbmdhciBhdiBmaWxzeXN0ZW1ldFxuIgorIiAteSAgICAgICAgICAgICAgICAgICBBbnRhIFwiamFcIiBzb20gc3ZhciBww6UgYWxsYSBmcsOlZ29yXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIExldGEgZWZ0ZXIgZMOlbGlnYSBibG9jayBvY2ggbMOkZ2cgdGlsbCBkZW0gaSBsaXN0YW5cbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRnJhbXR2aW5nYSBrb250cm9sbCDDpHZlbiBvbSBmaWxzeXN0ZW1ldCDDpHIgbWFya2VyYXQgcmVudFxuIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgVmFyIHV0ZsO2cmxpZ1xuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBBbnbDpG5kIGFsdGVybmF0aXZ0IHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzdG9ybGVrICAgICAgRnJhbXR2aW5nYSBibG9ja3N0b3JsZWsgdmlkIHPDtmthbmRlIGVmdGVyIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuX2pvdXJuYWwgICAgQmVzdMOkbSBwbGF0cyBmw7ZyIGRlbiBleHRlcm5hIGpvdXJuYWxlblxuIgorIiAtbCBkw6VsaWdhX2Jsb2NrX2ZpbCAgTMOkZ2cgdGlsbCB0aWxsIGxpc3RhbiDDtnZlciBkw6VsaWdhIGJsb2NrXG4iCisiIC1MIGTDpWxpZ2FfYmxvY2tfZmlsICBBbmdlIGxpc3RhIMO2dmVyIGTDpWxpZ2EgYmxvY2tcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IGZpbGVyICglMGQuJWQlJSBlaiBzYW1tYW5ow6RuZ2FuZGUpLCAlbGx1LyVsbHUgYmxvY2tcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBpbm9kIGFudsOkbmQgKCUyLjJmICUlLCBhdiAldSlcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiUxMnUgaW5vZGVyIGFudsOkbmRhICglMi4yZiAlJSwgYXYgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IGVqIGtvbnNla3V0aXYgZmlsICglMGQuJWQgJSUpXG4iCittc2dzdHJbMV0gIiUxMnUgZWoga29uc2VrdXRpdmEgZmlsZXIgKCUwZC4lZCAlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSBlaiBrb25zZWt1dGl2IGthdGFsb2cgKCUwZC4lZCAlJSlcbiIKK21zZ3N0clsxXSAiJTEydSBlaiBrb25zZWt1dGl2YSBrYXRhbG9nZXIgKCUwZC4lZCAlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiAgICAgICAgICAgICBhbnRhbCBpbm9kZXIgbWVkIGluZC9kaW5kL3RpbmQtYmxvY2s6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIEhpc3RvZ3JhbSDDtnZlciB1dHN0csOkY2tuaW5nYXJzIGRqdXA6ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUgYW52w6RudCBibG9jayAoJTIuMmYgJSUsIGF2ICVsbHUpXG4iCittc2dzdHJbMV0gIiUxMmxsdSBhbnbDpG5kYSBibG9jayAoJTIuMmYgJSUsIGF2ICVsbHUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgYmFkIGJsb2NrXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICIlMTJ1IGTDpWxpZ3QgYmxvY2tcbiIKK21zZ3N0clsxXSAiJTEydSBkw6VsaWdhIGJsb2NrXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgc3RvciBmaWxcbiIKK21zZ3N0clsxXSAiJTEydSBzdG9yYSBmaWxlclxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlc1xuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBub3JtYWwgZmlsXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlMTJ1IG5vcm1hbGEgZmlsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBkaXJlY3RvcnlcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBkaXJlY3Rvcmllc1xuIgorbXNnc3RyWzBdICIlMTJ1IGthdGFsb2dcbiIKK21zZ3N0clsxXSAiJTEydSBrYXRhbG9nZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgdGVja2VuZW5oZXRzZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgdGVja2VuZW5oZXRzZmlsZXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGJsb2NrZW5oZXRzZmlsXG4iCittc2dzdHJbMV0gIiUxMnUgYmxvY2tlbmhldHNmaWxlclxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpZm9cbiIKK21zZ3N0clsxXSAiJTEydSBmaWZvblxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlMTJ1IGzDpG5rXG4iCittc2dzdHJbMV0gIiUxMnUgbMOkbmthclxuIgorCisjOiBlMmZzY2svdW5peC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiUxMnUgc3ltYm9saWMgbGlua3MiCittc2dzdHJbMF0gIiUxMnUgc3ltYm9saXNrIGzDpG5rIgorbXNnc3RyWzFdICIlMTJ1IHN5bWJvbGlza2EgbMOkbmthciIKKworIzogZTJmc2NrL3VuaXguYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiICgldSBzbmFiYiBzeW1ib2xpc2sgbMOkbmspXG4iCittc2dzdHJbMV0gIiAoJXUgc25iYmEgc3ltYm9saXNrYSBsw6Rua2FyKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSB1dHRhZyAoc29ja2V0KVxuIgorbXNnc3RyWzFdICIlMTJ1IHV0dGFnIChzb2NrZXRzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IGZpbFxuIgorbXNnc3RyWzFdICIlMTJ1IGZpbGVyXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjMyIG1pc2MvYmFkYmxvY2tzLmM6OTgzIG1pc2MvdHVuZTJmcy5jOjE5ODUgbWlzYy91dGlsLmM6MTQ3CisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBkZXRlcm1pbmluZyB3aGV0aGVyICVzIGlzIG1vdW50ZWQuIgorbXNnc3RyICJuw6RyIGRldCBhdmdqb3JkZXMgb20gJXMgw6RyIG1vbnRlcmF0LiIKKworIzogZTJmc2NrL3VuaXguYzoyNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZyEgICVzIGlzICVzLlxuIgorbXNnc3RyICJWYXJuaW5nISAgJXMgw6RyICVzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyAlcy5cbiIKK21zZ3N0ciAiJXMgw6RyICVzLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2MgorbXNnaWQgIiIKKyJDYW5ub3QgY29udGludWUsIGFib3J0aW5nLlxuIgorIlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgZm9ydHPDpHR0YSwgYXZicnl0ZXIuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVkFSTklORyEhISAgRmlsc3lzdGVtZXQgw6RyIG1vbnRlcmF0LiAgT20gZHUgZm9ydHPDpHR0ZXIgKioqS09NTUVSKioqXG4iCisiZHUgYXR0IG9yc2FrYSAqKipBTExWQVJMSUcqKiogc2thZGEgcMOlIGZpbHN5c3RlbWV0LlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2OQorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiVmlsbCBkdSB2ZXJrbGlnZW4gZm9ydHPDpHR0YSIKKworIzogZTJmc2NrL3VuaXguYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hlY2sgYWJvcnRlZC5cbiIKK21zZ3N0ciAia29udHJvbGwgYXZicnV0ZW4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MzYxCittc2dpZCAiIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMiCittc2dzdHIgIiBpbm5laMOlbGxlciBldHQgZmlsc3lzdGVtIG1lZCBmZWwiCisKKyM6IGUyZnNjay91bml4LmM6MzYzCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiB2YXIgaW50ZSBmbMOkY2tmcml0dCBhdm1vbnRlcmF0IgorCisjOiBlMmZzY2svdW5peC5jOjM2NQorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgZGV0IHByaW3DpHJhIHN1cGVyYmxvY2tldHMgZWdlbnNrYXBlciBza2lsamVyIGZyw6VuIHJlc2VydmVucyIKKworIzogZTJmc2NrL3VuaXguYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgaGFyIG1vbnRlcmF0cyAldSBnw6VuZ2VyIHV0YW4gYXR0IGtvbnRyb2xsZXJhcyIKKworIzogZTJmc2NrL3VuaXguYzozNzYKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIGhhciB0aWRwdW5rdGVuIGbDtnIgc2VuYXN0ZSBmaWxzeXN0ZW1za29udHJvbGwgaSBmcmFtdGlkZW4iCisKKyM6IGUyZnNjay91bml4LmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBoYXMgZ29uZSAldSBkYXlzIHdpdGhvdXQgYmVpbmcgY2hlY2tlZCIKK21zZ3N0ciAiIGhhciBpbnRlIGtvbnRyb2xsZXJhdHMgcMOlICV1IGRhZ2FyIgorCisjOiBlMmZzY2svdW5peC5jOjM5MQorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIGtvbnRyb2xsIGZyYW10dmluZ2FkLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogcmVudCwgJXUvJXUgZmlsZXIsICVsbHUvJWxsdSBibG9jayIKKworIzogZTJmc2NrL3VuaXguYzo0NDMKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChrb250cm9sbCBzZW5hcmVsYWdkOyBww6UgYmF0dGVyaSkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ2Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChrb250cm9sbGVyYSBlZnRlciBuw6RzdGEgbW9udGVyaW5nKSIKKworIzogZTJmc2NrL3VuaXguYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChrb250cm9sbGVyYSBvbSAlbGQgbW9udGVyaW5nYXIpIgorCisjOiBlMmZzY2svdW5peC5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogQ291bGRuJ3Qgb3BlbiAvZGV2L251bGwgKCVzKVxuIgorbXNnc3RyICJGRUw6IEt1bmRlIGludGUgw7ZwcG5hIC9kZXYvbnVsbCAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiT2dpbHRpZyBFQS12ZXJzaW9uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiT2vDpG5kIHV0w7ZrYWQgZmxhZ2dhOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIlN5bnRheGZlbCBpIGUyZnNjazpzIGtvbmZpZ3VyYXRpb25zZmlsICglcywgcmFkIG5yICVkKVxuIgorIlx0JXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgdmFsaWRhdGluZyBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkZlbCB2aWQgdmFsaWRlcmluZyBhdiBmaWxpZGVudGlmaWVyYXJlICVkOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjc5MgorbXNnaWQgIkludmFsaWQgY29tcGxldGlvbiBpbmZvcm1hdGlvbiBmaWxlIGRlc2NyaXB0b3IiCittc2dzdHIgIk9naWx0aWcgZmlsaWRlbnRpZmllcmFyZSBmw7ZyIGbDtnJsb3Bwc2luZm9ybWF0aW9uIgorCisjOiBlMmZzY2svdW5peC5jOjgwNworbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiRW5kYXN0IGVuIGF2IGZsYWdnb3JuYSAtcC8tYSwgLW4gZWxsZXIgLXkga2FuIGFuZ2VzLiIKKworIzogZTJmc2NrL3VuaXguYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIkZsYWdnYW4gLXQgc3TDtmRqcyBpbnRlIGkgZGVubmEgdmVyc2lvbiBhdiBlMmZzY2suXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODU5IGUyZnNjay91bml4LmM6OTMxIG1pc2MvdHVuZTJmcy5jOjgxMSBtaXNjL3R1bmUyZnMuYzoxMTAwCisjOiBtaXNjL3R1bmUyZnMuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIkthbiBpbnRlIGhpdHRhIFwiJXNcIiIKKworIzogZTJmc2NrL3VuaXguYzo5MTAKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkZsYWdnb3JuYSAtbiBvY2ggLUQgw6RyIGlua29tcGF0aWJsYS4iCisKKyM6IGUyZnNjay91bml4LmM6OTE1Cittc2dpZCAiVGhlIC1uIGFuZCAtYyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJGbGFnZ29ybmEgLW4gb2NoIC1jIMOkciBpbmtvbXBhdGlibGEuIgorCisjOiBlMmZzY2svdW5peC5jOjkyMAorbXNnaWQgIlRoZSAtbiBhbmQgLWwvLUwgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRmxhZ2dvcm5hIC1uIG9jaCAtbC8tTCDDpHIgaW5rb21wYXRpYmxhLiIKKworIzogZTJmc2NrL3VuaXguYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJGbGFnZ29ybmEgLWMgb2NoIC1sLy1MIGthbiBpbnRlIGLDpWRhIGFudsOkbmRhcyBww6Ugc2FtbWEgZ8OlbmcuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIMOkciBpbnRlIGV0dCBoZWx0YWxcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiT2dpbHRpZ3QgaWNrZW51bWVyaWtzdCBhcmd1bWVudCB0aWxsIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2Ugd2FpdC4uLlxuIgorbXNnc3RyICJNTVAtaW50ZXJ2YWxsIMOkciAldSBzZWt1bmRlciBvY2ggZGVuIHRvdGFsYSB2w6RudGV0aWRlbiDDpHIgJXUgc2VrdW5kZXIuICBWYXIgZ29kIGRyw7ZqIC4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJ2aWQgdXBwc8OkdHRuaW5nIGF2IE1NUC1ibG9jayIKKworIzogZTJmc2NrL3VuaXguYzoxMTQ0IG1pc2MvdHVuZTJmcy5jOjE5MTIKK21zZ2lkICIiCisiSWYgeW91IGFyZSBzdXJlIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBpbiB1c2Ugb24gYW55IG5vZGUsIHJ1bjpcbiIKKyIndHVuZTJmcyAtZiAtRSBjbGVhcl9tbXAge2RldmljZX0nXG4iCittc2dzdHIgIiIKKyJPbSBkdSDDpHIgc8Oka2VyIHDDpSBhdHQgZmlsc3lzdGVtZXQgaW50ZSBhbnbDpG5kcyBww6UgbsOlZ29uIG5vZCwga8O2cjpcbiIKKyJcInR1bmUyZnMtZi1FIGNsZWFyX21tcCB7ZW5oZXR9XCJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBleHQyZnMgbGlicmFyeSB2ZXJzaW9uIG91dCBvZiBkYXRlIVxuIgorbXNnc3RyICJGZWw6IGV4dDJmcy1iaWJsaW90ZWt2ZXJzaW9uIGluYWt0dWVsbCFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjAyCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGluaXRpYWxpemUgcHJvZ3JhbSIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBpbml0aWVyYSBwcm9ncmFtIgorCisjOiBlMmZzY2svdW5peC5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHRVc2luZyAlcywgJXNcbiIKK21zZ3N0ciAiXHRBbnbDpG5kZXIgJXMsICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImJlaMO2dmVyIHRlcm1pbmFsIGbDtnIgaW50ZXJha3RpdmEgcmVwYXJhdGlvbmVyIgorCisjOiBlMmZzY2svdW5peC5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uXG4iCittc2dzdHIgIiVzOiAlcyBmw7Zyc8O2a2VyIG1lZCByZXNlcnZibG9jayAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjkyCittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU3VwZXJibG9ja2V0IMOkciBvZ2lsdGlndCwiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MworbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICJHcnVwcGJlc2tyaXZhcm5hIHNlciB0cmFzaWdhIHV0IC4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAiJXM6ICVzIG7DpHIgcmVzZXJ2YmxvY2tlbiBhbnbDpG5kZXMiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiBnw6VyIHRpbGxiYWthIHRpbGwgb3JnaW5hbHN1cGVyYmxvY2tcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzM1Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIHJldmlzaW9uIGlzIGFwcGFyZW50bHkgdG9vIGhpZ2ggZm9yIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCisiKE9yIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2sgaXMgY29ycnVwdClcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkZpbHN5c3RlbXNyZXZpc2lvbmVuIMOkciB1cHBlbmJhcmxpZ2VuIGbDtnIgaMO2ZyBmw7ZyIGRlbm5hIHZlcnNpb24gYXYgZTJmc2NrLlxuIgorIihFbGxlciBzw6Ugw6RyIGZpbHN5c3RlbWV0cyBzdXBlcmJsb2NrIHRyYXNpZ3QpXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0MQorbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIkthbiBkZXR0YSB2YXJhIGVuIG5vbGzDpG5nZHNwYXJ0aXRpb24/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIkR1IG3DpXN0ZSBoYSAlcy3DpXRrb21zdCB0aWxsIGZpbHN5c3RlbWV0IGVsbGVyIHZhcmEgcm9vdFxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDkKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIkthbnNrZSBpbnRlIGV4aXN0ZXJhciBlbGxlciB2w6R4bGluZ3NlbmhldD9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzUyCittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIkZpbHN5c3RlbWV0IG1vbnRlcmF0IGVsbGVyIMO2cHBuYXQgZXhrbHVzaXZ0IGF2IGV0dCBhbm5hdCBwcm9ncmFtP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgZGV2aWNlP1xuIgorbXNnc3RyICJLYW5za2UgZW4gZW5oZXQgc29tIGludGUgZXhpc3RlcmFyP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIlNrcml2c2t5ZGRhZCBkaXNrOyBhbnbDpG5kIGZsYWdnYW4gLW4gZsO2ciBhdHQgZ8O2cmEgZW4gbMOkc25pbmdza29udHJvbGxcbiIKKyJhdiBlbmhldGVuLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MjMKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIkjDpG10YSBlbiBueWFyZSB2ZXJzaW9uIGF2IGUyZnNjayEiCisKKyM6IGUyZnNjay91bml4LmM6MTQ2NworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBleHQzIGpvdXJuYWwgZm9yICVzIgorbXNnc3RyICJ2aWQga29udHJvbGwgYXYgZXh0My1qb3VybmFsIGbDtnIgJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ3OAorbXNnaWQgIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtIGNoZWNrLlxuIgorbXNnc3RyICJWYXJuaW5nOiBob3BwYXIgw7Z2ZXIgam91cm5hbMOldGVyaMOkbXRuaW5nIGVmdGVyc29tIGVuIGzDpHNuaW5nc2tvbnRyb2xsIGF2IGZpbHN5c3RlbSBnw7Zycy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzZXQgc3VwZXJibG9jayBmbGFncyBvbiAlc1xuIgorbXNnc3RyICJrYW4gaW50ZSBzw6R0dGEgc3VwZXJibG9ja3NmbGFnZ29yIHDDpSAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVjb3ZlcmluZyBleHQzIGpvdXJuYWwgb2YgJXMiCittc2dzdHIgInZpZCDDpXRlcmjDpG10bmluZyBhdiBleHQzLWpvdXJuYWwgZsO2ciAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgaGFyIGZ1bmt0aW9uZXIgc29tIGludGUgc3TDtmRzOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IHZhcm5pbmc6IGtvbXByaW1lcmluZ3NzdMO2ZCDDpHIgZXhwZXJpbWVudGVsbHQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IGUyZnNjayBub3QgY29tcGlsZWQgd2l0aCBIVFJFRSBzdXBwb3J0LFxuIgorIlx0YnV0IGZpbGVzeXN0ZW0gJXMgaGFzIEhUUkVFIGRpcmVjdG9yaWVzLlxuIgorbXNnc3RyICIiCisiJXM6IGUyZnNjayDDpHIgaW50ZSBrb21waWxlcmF0IG1lZCBIVFJFRS1zdMO2ZCxcbiIKKyJcdG1lbiBmaWxzeXN0ZW0gJXMgaGFyIEhUUkVFLWthdGFsb2dlci5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAiJXM6ICVzIHZpZCBsw6RzbmluZyBhdiBpbm9kIGbDtnIgZMOlbGlnYSBibG9ja1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1OTcKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIkRldHRhIGLDpWRhciBpbnRlIGdvdHQsIG1lbiB2aSBza2FsbCBmw7Zyc8O2a2EgYXR0IGZvcnRzw6R0dGEgLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIlNrYXBhciBqb3VybmFsICglZCBibG9jayk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjQ4Cittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBLbGFyLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDkKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogam91cm5hbGVuIGhhciDDpXRlcnNrYXBhdHMgLSBmaWxzeXN0ZW1ldCDDpHIgbnUgZXh0MyBpZ2VuICoqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzIKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAiU3RhcnRhciBvbSBlMmZzY2sgZnLDpW4gYsO2cmphbiAuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjc2Cittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgInZpZCDDpXRlcnN0w6RsbG5pbmcgYXYgb21naXZuaW5nIgorCisjOiBlMmZzY2svdW5peC5jOjE2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGUyZnNjayBjYW5jZWxlZC5cbiIKK21zZ3N0ciAiJXM6IGUyZnNjayBpbnN0w6RsbGQuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY4OAorbXNnaWQgImFib3J0ZWQiCittc2dzdHIgImF2YnJ1dGVuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDAgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqIEZJTFNZU1RFTUVUIE1PRElGSUVSQURFUyAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogU1RBUlRBIE9NIExJTlVYICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxMiBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogVkFSTklORzogRmlsc3lzdGVtZXQgaGFyIGZvcnRmYXJhbmRlIGZlbCAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAibsOkciBrb250cm9sbHN1bW1laW5mb3JtYXRpb24gZsO2ciBibG9ja2dydXBwIHNhdHRlcyIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAgbWlzYy91dGlsLmM6NzAKK21zZ2lkICJ5WSIKK21zZ3N0ciAieVlqSiIKKworIzogZTJmc2NrL3V0aWwuYzoxOTEKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8aj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKGovbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICJpbnN0w6RsbGQhXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgImphXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjQwCittc2dpZCAibm9cbiIKK21zZ3N0ciAibmVqXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8gbm9cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBuZWpcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyB5ZXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzPyBqYVxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiamEiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgIm5laiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBvZ2lsdGlnYSBiaXRrYXJ0ZWJsb2NrIGbDtnIgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAibMOkc2VyIGlub2QtIG9jaCBibG9ja2JpdGthcnRvciIKKworIzogZTJmc2NrL3V0aWwuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gcmVhZCBiaXRtYXBzIGZvciAlcyIKK21zZ3N0ciAidmlkIHVwcHJlcGF0IGbDtnJzw7ZrIGF0dCBsw6RzYSBiaXRrYXJ0YSBmw7ZyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjI5OAorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgInNraXZlciBibG9jay0gb2NoIGlub2RzYml0a2FydG9yIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ2aWQgb21za3Jpdm5pbmcgYXYgYmxvY2stIG9jaCBpbm9kc2JpdGthcnRvciBmw7ZyICVzIgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IE9Ww4ROVEFEIElOS09OU0VLVkVOUzsgS8OWUiBmc2NrIE1BTlVFTExULlxuIgorIlx0KGQudi5zLiwgdXRhbiBmbGFnZ29ybmEgLWEgZWxsZXIgLXApXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiQW52w6RudCBtaW5uZTogJWx1IGsvJWx1IGsgKCVsdSBrLyVsdSBrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIkFudsOkbnQgbWlubmU6ICVsdSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ0aWQ6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAiZsO2cmZsdXRlbiB0aWQ6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJuw6RyIGlub2QgJWx1IGkgJXMgbMOkc3RlcyIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSAlbHUgaW4gJXMiCittc2dzdHIgIm7DpHIgaW5vZCAlbHUgaSAlcyBza3JldnMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ2aWQgYWxsb2tlcmluZyBhdiBub2xsc3TDpGxsbmluZ3NidWZmZXJ0IgorCisjOiBlMmZzY2svdXRpbC5jOjc4NQorbXNnaWQgIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyBydW5uaW5nLlxuIgorbXNnc3RyICJPVsOETlRBRCBJTktPTlNJU1RFTlM6IGZpbHN5c3RlbWV0IG1vZGlmaWVyYXMgbWVkYW4gZnNjayBrw7Zycy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2OQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImtsYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSBtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstYiBibG9ja3N0b3JsZWtdIFstaSBpbmZpbF0gWy1vIHV0ZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgICAgICBbLWMgYmxvY2tfw6V0X2fDpW5nZW5dIFstZCBmw7ZyZHLDtmpuaW5nc2Zha3RvciBtZWxsYW4gbMOkc25pbmdhcl1cbiIKKyIgICAgICAgICAgICBbLWUgbWF4X2TDpWxpZ2FfYmxvY2tdIFstcCBhbnRhbF9wYXNzXVxuIgorIiAgICAgICAgICAgIFstdCB0ZXN0bcO2bnN0ZXIgWy10IHRlc3Rtw7Zuc3RlciBbLi4uXV1dXG4iCisiICAgICAgICAgICAgZW5oZXQgW3Npc3RhX2Jsb2NrIFtmw7Zyc3RhX2Jsb2NrXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiBGbGFnZ29ybmEgLW4gb2NoIC13IMOkciDDtm1zZXNpZGlndCB1dGVzbHV0YW5kZS5cbiIKKyJcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTYuMmYlJSBkb25lLCAlcyBlbGFwc2VkLiAoJWQvJWQvJWQgZXJyb3JzKSIKK21zZ3N0ciAiJTYuMmYgJSUga2xhciwgJXMgaGFyIGfDpXR0LiAoJWQvJWQvJWQgZmVsKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiVGVzdGFyIG1lZCBzbHVtcG3Dtm5zdGVyOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzQwCittc2dpZCAiVGVzdGluZyB3aXRoIHBhdHRlcm4gMHgiCittc2dzdHIgIlRlc3RhciBtZWQgbcO2bnN0ZXIgMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgInZpZCBzw7ZrbmluZyIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICJVbmRlcmxpZ3QgdsOkcmRlICglbGQpIGkgZG9fcmVhZFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ2OQorbXNnaWQgImR1cmluZyBleHQyZnNfc3luY19kZXZpY2UiCittc2dzdHIgInZpZCBleHQyZnNfc3luY19kZXZpY2UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAidmlkIGLDtnJqYW4gYXYgaXRlcmF0aW9uIMO2dmVyIGxpc3RhIGF2IGTDpWxpZ2EgYmxvY2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICJ2aWQgYWxsb2tlcmluZyBhdiBidWZmZXJ0YXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGJsb2NrcyAlbHUgdG8gJWx1XG4iCittc2dzdHIgIktvbnRyb2xsZXJhciBibG9jayAlbHUgdGlsbCAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTIKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIGkgc2tyaXZza3lkZGF0IGzDpGdlXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIChza3JpdnNreWRkYWQgdGVzdCk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICJGw7ZyIG3DpW5nYSBkw6VsaWdhIGJsb2NrLCBhdmJyeXRlciB0ZXN0ZXRcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MDkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiTGV0YXIgZWZ0ZXIgZMOlbGlnYSBibG9jayBpIGzDpHMtc2tyaXYtbMOkZ2VcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIkZyw6VuIGJsb2NrICVsdSB0aWxsICVsdVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY2NgorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICJMw6RzZXIgb2NoIGrDpG1mw7ZyOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzcxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIGkgaWNrZWbDtnJzdMO2cmFuZGUgbMOkcy1za3Jpdi1sw6RnZVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc3NworbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSB0ZXN0KVxuIgorbXNnc3RyICJMZXRhciBlZnRlciBkw6VsaWdhIGJsb2NrIChpY2tlZsO2cnN0w7ZyYW5kZSBsw6RzLXNrcml2LXRlc3QpXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzg0Cittc2dpZCAiIgorIlxuIgorIkludGVycnVwdCBjYXVnaHQsIGNsZWFuaW5nIHVwXG4iCittc2dzdHIgIiIKKyJcbiIKKyJBdmJyb3R0IGbDpW5nYXQsIHJlbnNhciB1cHBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyaW5nIHRlc3QgZGF0YSB3cml0ZSwgYmxvY2sgJWx1IgorbXNnc3RyICJ2aWQgdGVzdGRhdGFza3Jpdm5pbmcsIGJsb2NrICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgw6RyIG1vbnRlcmF0LCAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgImJhZGJsb2NrcyBmcmFtdHZpbmdhdCDDpG5kw6UuICBIb3BwYXMgL2V0Yy9tdGFiIMOkciBmZWxha3RpZy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgImRldCDDpHIgaW50ZSBzw6RrZXJ0IGF0dCBrw7ZyYSBiYWRibG9ja3MhXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMCBtaXNjL3V0aWwuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIlcyBhbnbDpG5kcyB1cHBlbmJhcmxpZ2VuIGF2IHN5c3RlbWV0OyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJiYWRibG9ja3MgZnJhbXR2aW5nYXQgw6RuZMOlLlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJvZ2lsdGlnICVzIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGbDtnIgdGVzdG3Dtm5zdGVyIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJIw7Znc3QgZXR0IHRlc3Rtw7Zuc3RlciBmw6VyIGFuZ2VzIGkgc2tyaXZza3lkZGF0IGzDpGdlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExNjkKK21zZ2lkICJSYW5kb20gdGVzdF9wYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICJTbHVtcHZpcyB0ZXN0bcO2bnN0ZXIgw6RyIGludGUgdGlsbMOldGV0IGkgc2tyaXZza3lkZGF0IGzDpGdlIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODMKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgbWFudWFsbHlcbiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgYXZnw7ZyYSBlbmhldHNzdG9ybGVrOyBkdSBtw6VzdGUgYW5nZVxuIgorInN0b3JsZWtlbiBtYW51ZWxsdFxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgZW5oZXRzc3RvcmxlayIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAic2lzdGEgYmxvY2siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICJmw7Zyc3RhIGJsb2NrIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWx1IgorbXNnc3RyICJmZWxha3RpZ3Qgc3RhcnRibG9jayAoJWx1KTogbcOlc3RlIHZhcmEgbWluZHJlIMOkbiAlbHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI1OQorbXNnaWQgIndoaWxlIGNyZWF0aW5nIGluLW1lbW9yeSBiYWQgYmxvY2tzIGxpc3QiCittc2dzdHIgIm7DpHIgbGlzdGEgw7Z2ZXIgZMOlbGlnYSBibG9jayBpIG1pbm5ldCBza2FwYWRlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjc0Cittc2dpZCAid2hpbGUgYWRkaW5nIHRvIGluLW1lbW9yeSBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAibsOkciB0aWxsw6RnZyBnam9yZGVzIHRpbGwgbGlzdGEgaSBtaW5uZXQgw7Z2ZXIgZMOlbGlnYSBibG9jayBnam9yZGVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGFzcyBjb21wbGV0ZWQsICV1IGJhZCBibG9ja3MgZm91bmQuICglZC8lZC8lZCBlcnJvcnMpXG4iCittc2dzdHIgIlBhc3MgYXZzbHV0YXQsICV1IGTDpWxpZ2EgYmxvY2sgaGl0dGFkZS4gKCVkLyVkLyVkIGZlbClcbiIKKworIzogbWlzYy9jaGF0dHIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcy4uLlxuIgorbXNnc3RyICJBbnbDpG5kbmluZzogJXMgWy1SVmZdIFstKz1BYUNjRGRlaWpzU3VdIFstdiB2ZXJzaW9uXSBmaWxlcuKAplxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgImZlbGFrdGlnIHZlcnNpb24gLSAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCB0YSBzdGF0dXMgcMOlICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgYXYgZmxhZ2dvciBww6UgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIkZsYWdnb3IgcMOlICVzIHNhdHRhIHNvbSAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInZpZCBzw6R0dG5pbmcgYXYgZmxhZ2dvciBww6UgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlZlcnNpb24gb2YgJXMgc2V0IGFzICVsdVxuIgorbXNnc3RyICJWZXJzaW9uIGF2ICVzIHNhdHQgc29tICVsdVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgInZpZCBzw6R0dG5pbmcgYXYgdmVyc2lvbiBww6UgJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIHPDtmt2w6Rnc3ZhcmlhYmVsIGkgY2hhdHRyX2Rpcl9wcm9jIgorCisjOiBtaXNjL2NoYXR0ci5jOjMwNgorbXNnaWQgIj0gaXMgaW5jb21wYXRpYmxlIHdpdGggLSBhbmQgK1xuIgorbXNnc3RyICI9IMOkciBpbmtvbXBhdGliZWx0IG1lZCAtIG9jaCArXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MzE0Cittc2dpZCAiTXVzdCB1c2UgJy12JywgPSwgLSBvciArXG4iCittc2dzdHIgIk3DpXN0ZSBhbnbDpG5kYSBcIi12XCIsID0sIC0gZWxsZXIgK1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLWJmaGl4Vl0gWy1vIHN1cGVyYmxvY2s9PG51bT5dIFstbyBibG9ja3NpemU9PG51bT5dIGVuaGV0XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImJsb2NrIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTY4Cittc2dpZCAiY2x1c3RlcnMiCittc2dzdHIgImtsdXN0ZXIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiR3JvdXAgJWx1OiAoQmxvY2tzICIKK21zZ3N0ciAiR3J1cHAgJWx1OiAoQmxvY2sgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ2hlY2tzdW0gMHglMDR4IgorbXNnc3RyICIgIEtvbnRyb2xsc3VtbWEgMHglMDR4IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoRVhQRUNURUQgMHglMDR4KSIKK21zZ3N0ciAiICgweCUwNHggRsOWUlbDhE5UQURFUykiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgIiwgb2FudsOkbmRhIGlub2RlciAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXNzdXBlcmJsb2NrIHZpZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJQcmltYXJ5IgorbXNnc3RyICJQcmltw6RydCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTMKK21zZ2lkICJCYWNrdXAiCittc2dzdHIgIlJlc2VydiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiLCBHcnVwcGJlc2tyaXZhcmUgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgUmVzZXJ2ZXJhZGUgR0RULWJsb2NrIHZpZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIgR3J1cHBiZXNrcml2YXJlIHZpZCAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgQmxvY2tiaXRrYXJ0YSB2aWQgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIElub2RzYml0a2FydGEgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MgorbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgSW5vZHN0YWJlbGwgdmlkICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJXUgZnJpdHQgJXMsICV1IGZyaWEgaW5vZGVyLCAldSBrYXRhbG9nZXIlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSBvYW52w6RuZGEgaW5vZGVyXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNTgKK21zZ2lkICIgIEZyZWUgYmxvY2tzOiAiCittc2dzdHIgIiAgRnJpYSBibG9jazogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjY5Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIEZyaWEgaW5vZGVyOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAidmlkIHV0c2tyaWZ0IGF2IGxpc3RhIMO2dmVyIGTDpWxpZ2EgYmxvY2siCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkTDpWxpZ2EgYmxvY2s6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzMzIG1pc2MvdHVuZTJmcy5jOjMwNgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IGpvdXJuYWxpbm9kIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJuw6RyIGpvdXJuYWxpbm9kZW4gw7ZwcG5hZGVzIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyIGJsb2NrIgorbXNnc3RyICJuw6RyIGpvdXJuYWxzdXBlcmJsb2NrZXQgbMOkc3RlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJKb3VybmFsZnVua3Rpb25lcjogICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzY4Cittc2dpZCAiSm91cm5hbCBzaXplOiAgICAgICAgICAgICAiCittc2dzdHIgIkpvdXJuYWxzdG9ybGVrOiAgICAgICAgICAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCittc2dzdHIgIiIKKyJKb3VybmFsbMOkbmdkOiAgICAgICAgICAgICAldVxuIgorIkpvdXJuYWxzZWt2ZW5zOiAgICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbHN0YXJ0OiAgICAgICAgICAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiSm91cm5hbGZlbG51bW1lcjogICAgICAgICAlZFxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDAxIG1pc2MvdHVuZTJmcy5jOjIyMgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgYXYgam91cm5hbHN1cGVyYmxvY2siCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGpvdXJuYWxzdXBlcmJsb2NrZXRzIG1hZ2lza2EgdGFsIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIGJsb2NrIHNpemU6ICAgICAgICV1XG4iCisiSm91cm5hbCBsZW5ndGg6ICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgZmlyc3QgYmxvY2s6ICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIG51bWJlciBvZiB1c2VyczogICV1XG4iCittc2dzdHIgIiIKKyJcbiIKKyJKb3VybmFsYmxvY2tzdG9ybGVrOiAgICAgICV1XG4iCisiSm91cm5hbGzDpG5nZDogICAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsZW5zIGbDtnJzdGEgYmxvY2s6ICAldVxuIgorIkpvdXJuYWxzZWt2ZW5zOiAgICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbHN0YXJ0OiAgICAgICAgICAgICAldVxuIgorIkpvdXJuYWxlbnMgYW52w6RuZGFyYW50YWw6ICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB1c2VyczogICAgICAgICAgICAlc1xuIgorbXNnc3RyICJKb3VybmFsYW52w6RuZGFyZTogICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDQyIG1pc2MvbWtlMmZzLmM6NjY2IG1pc2MvdHVuZTJmcy5jOjExMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIG9wdGlvbnMhXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgbWlubmUgZsO2ciBhdHQgdG9sa2EgZmxhZ2dvciFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHN1cGVyYmxvY2twYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIGJsb2Nrc3Rvcmxla3NwYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBleHRlbmRlZCBvcHRpb24ocykgc3BlY2lmaWVkOiAlc1xuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdHN1cGVyYmxvY2s9PHN1cGVyYmxvY2sgbnVtYmVyPlxuIgorIlx0YmxvY2tzaXplPTxibG9ja3NpemU+XG4iCittc2dzdHIgIiIKKyJcbiIKKyJGZWxha3RpZ2EgdXTDtmthZGUgZmxhZ2dvciBhbmdpdm5hOiAlc1xuIgorIlxuIgorIlV0w7ZrYWRlIGZsYWdnb3Igc2VwYXJlcmFzIG1lZCBrb21tYW4sIG9jaCBrYW4gdGEgZXR0IGFyZ3VtZW50IHNvbSBhdmRlbGFzIG1lZFxuIgorIlx0ZXR0IGxpa2hldHN0ZWNrZW4gKFwiPVwiKS5cbiIKKyJcbiIKKyJHaWx0aWdhIHV0w7ZrYWRlIGZsYWdnb3Igw6RyOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9ja251bW1lcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzdG9ybGVrPlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTU0IG1pc2MvbWtlMmZzLmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0QW52w6RuZGVyICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1OTAgbWlzYy9lMmltYWdlLmM6MTMyNiBtaXNjL3R1bmUyZnMuYzoxOTIzCisjOiByZXNpemUvbWFpbi5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBnaWx0aWd0IGZpbHN5c3RlbXNzdXBlcmJsb2NrLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogZmVsIHZpZCBsw6RzbmluZyBhdiBiaXRrYXJ0b3I6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJzSVFhXSBkZXZpY2UgaW1hZ2VfZmlsZVxuIgorbXNnc3RyICJBbnbDpG5kbmluZzogJXMgWy1yc0lRYV0gZW5oZXQgYXZiaWxkc2ZpbFxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIkZlbDogaHV2dWRzdG9ybGVrIMOkciBzdMO2cnJlIMOkbiB3cnRfc2l6ZVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgaHV2dWRidWZmZXJ0XG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3NAorbXNnaWQgIndoaWxlIHdyaXRpbmcgc3VwZXJibG9jayIKK21zZ3N0ciAidmlkIHNrcml2bmluZyBhdiBzdXBlcmJsb2NrIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODIKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGlub2R0YWJlbGwiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGJsb2NrYml0a2FydGEiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE5NgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgYml0bWFwIgorbXNnc3RyICJ2aWQgc2tyaXZuaW5nIGF2IGlub2RiaXRrYXJ0YSIKKworIzogbWlzYy9lMmltYWdlLmM6MTM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQga29udmVydGVyYSBlbiBxY293Mi1iaWxkICglcykgdGlsbCBlbiByw6UgYmlsZCAoJXMpIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBrYW4gaW50ZSDDtnBwbmEgJXNcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBrYW4gaW50ZSBzw7ZrYSB0aWxsIHN1cGVyYmxvY2tcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGZlbCB2aWQgbMOkc25pbmcgYXYgc3VwZXJibG9ja1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IGludGUgZXR0IGV4dDItZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIlZhcm5pbmc6IGV0aWtldHQgZsO2ciBsw6VuZywgYXZrb3J0YXIuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IGthbiBpbnRlIHPDtmthIHRpbGwgc3VwZXJibG9jayBpZ2VuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwNQorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciB3cml0aW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDogZmVsIHZpZCBza3Jpdm5pbmcgYXYgc3VwZXJibG9ja1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMTcgbWlzYy90dW5lMmZzLmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBlMmxhYmVsIGRldmljZSBbbmV3bGFiZWxdXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiBlMmxhYmVsIGVuaGV0IFtueS1ldGlrZXR0XVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyA8dHJhbnNha3Rpb25zZmlsPiA8Zmlsc3lzdGVtPlxuIgorCisjOiBtaXNjL2UydW5kby5jOjUyCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUgc3lzdGVtIGRhdGEgXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdHQgbMOkc2EgZmlsc3lzdGVtZGF0YSBcbiIKKworIzogbWlzYy9lMnVuZG8uYzo2MiBtaXNjL2UydW5kby5jOjgzIG1pc2MvZTJ1bmRvLmM6MTA4IG1pc2MvZTJ1bmRvLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfZmV0Y2ggJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCB0ZGJfZmV0Y2ggJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiRmlsc3lzdGVtZXRzIG1vbnRlcmluZ3MgdGlkIHN0w6RtbWVyIGludGUgbWVkICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0cyBVVUlEIHN0w6RtbWVyIGludGUgbWVkIFxuIgorCisjOiBtaXNjL2UydW5kby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAidGRiX29wZW4gbWlzc2x5Y2thZGVzICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiRmVsIG7DpHIgZGV0IGF2Z2pvcmRlcyBvbSAlcyDDpHIgbW9udGVyYXQuXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiZTJ1bmRvIHNrYWxsIGVuZGFzdCBrw7ZyYXMgcMOlIG9tb250ZXJhZGUgZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzXG4iCittc2dzdHIgIkRldCBnaWNrIGludGUgYXR0IMO2cHBuYSDDtnBwbmEgJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICLDhXRlcnVwcHNwZWxuaW5nIGF2IHRyYW5zYWt0aW9uIG1lZCBzdG9ybGVrICV6ZCBww6UgcGxhdHMgJWxsdVxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgd3JpdGUgJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHNrcml2YSAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogY291bGRuJ3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiVkFSTklORzoga3VuZGUgaW50ZSDDtnBwbmEgJXM6ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiVkFSTklORzogZmVsIGZvcm1hdCBww6UgcmFkICVkIGF2ICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiVkFSTklORzogRGluIC9ldGMvZnN0YWIgaW5uZWjDpWxsZXIgaW50ZSBmc2NrLXBhc3Nuci1mw6RsdGV0LlxuIgorIlx0SmFnIGZpeGFyIG1pZyBmw7ZyYmkgZGV0dGEgw6V0IGRpZywgbWVuIGR1XG4iCisiXHRiw7ZyIHLDpHR0YSBkaW4gL2V0Yy9mc3RhYi1maWwgc8OlIHNuYXJ0IGR1IGthbi5cbiIKKyJcbiIKKworIzogbWlzYy9mc2NrLmM6NDc4CisjLCBjLWZvcm1hdAorbXNnaWQgImZzY2s6ICVzOiBub3QgZm91bmRcbiIKK21zZ3N0ciAiZnNjazogJXM6IGludGUgZnVubmVuXG4iCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiVzOiB3YWl0OiBJbmdhIGZsZXIgYmFybnByb2Nlc3Nlcj8hP1xuIgorCisjOiBtaXNjL2ZzY2suYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZy4uLiAlcyBmb3IgZGV2aWNlICVzIGV4aXRlZCB3aXRoIHNpZ25hbCAlZC5cbiIKK21zZ3N0ciAiVmFybmluZy4uLiAlcyBmw7ZyIGVuaGV0ICVzIGF2c2x1dGFkZSBtZWQgc2lnbmFsICVkLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXM6IHN0YXR1cyBpcyAleCwgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIKK21zZ3N0ciAiJXMgJXM6IHN0YXR1cyDDpHIgJXgsIHNrdWxsZSBhbGRyaWcgaW50csOkZmZhLlxuIgorCisjOiBtaXNjL2ZzY2suYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluaXNoZWQgd2l0aCAlcyAoZXhpdCBzdGF0dXMgJWQpXG4iCittc2dzdHIgIkF2c2x1dGFkZSBtZWQgJXMgKHNsdXRzdGF0dXMgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBGZWwgJWQgbsOkciBmc2NrLiVzIGvDtnJkZXMgZsO2ciAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkFudGluZ2VuIGFsbGEgZWxsZXIgaW5nYSBhdiBmaWxzeXN0ZW1zdHlwZXJuYSBzb20gZ2VzIHRpbGwgLXQgbcOlc3RlIGhhXG4iCisicHJlZml4IFwibm9cIiBlbGxlciBcIiFcIi5cbiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgbWlubmUgZsO2ciBmaWxzeXN0ZW10eXBlclxuIgorCisjOiBtaXNjL2ZzY2suYzo4ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHNraXBwaW5nIGJhZCBsaW5lIGluIC9ldGMvZnN0YWI6IGJpbmQgbW91bnQgd2l0aCBub256ZXJvIGZzY2sgcGFzcyBudW1iZXJcbiIKK21zZ3N0ciAiJXM6IGhvcHBhciDDtnZlciBmZWxha3RpZyByYWQgaSAvZXRjL2ZzdGFiOiBiaW5kLW1vbnRlcmluZyBtZWQgZnNjay1wYXNzbnVtbWVyIHNvbSBpbnRlIMOkciBub2xsXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGthbiBpbnRlIGtvbnRyb2xsZXJhICVzOiBmc2NrLiVzIGZpbm5zIGludGVcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiS29udHJvbGxlcmFyIGFsbGEgZmlsc3lzdGVtLlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIi0td2FpdGluZy0tIChwYXNzICVkKVxuIgorbXNnc3RyICItLXbDpG50YXItLSAocGFzcyAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICJBbnbDpG5kbmluZzogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmaCBdIF0gWy10IGZzdHlwXSBbZnMtZmxhZ2dvcl0gW2ZpbHN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IGbDtnIgbcOlbmdhIGVuaGV0ZXJcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IGbDtnIgbcOlbmdhIGFyZ3VtZW50XG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLVJWYWRsdl0gW2ZpbGVyLi4uXVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIlZpZCBsw6RzbmluZyBhdiBmbGFnZ29yIHDDpSAlcyIKKworIzogbWlzYy9sc2F0dHIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIlZpZCBsw6RzbmluZyBhdiB2ZXJzaW9uIHDDpSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy1jb3VudF1cbiIKK21zZ3N0ciAiIgorIkFudsOkbmRuaW5nOiAlcyBbLWN8LWwgZmlsbmFtbl0gWy1iIGJsb2Nrc3Rvcmxla10gWy1DIGtsdXN0ZXJzdG9ybGVrXVxuIgorIlx0Wy1pIGJ5dGUtcGVyLWlub2RdIFstSSBpbm9kc3Rvcmxla10gWy1KIGpvdXJuYWxmbGFnZ29yXVxuIgorIlx0Wy1HIGZsZXhncnVwcHN0b3JsZWtdIFstTiBhbnRhbC1pbm9kZXJdXG4iCisiXHRbLW0gcmVzZXJ2YWRlLWJsb2NrLXByb2NlbnRdIFstbyBza2FwYXItb3NdXG4iCisiXHRbLWcgYmxvY2stcGVyLWdydXBwXSBbLUwgdm9seW1ldGlrZXR0XSBbLU0gc2VuYXN0LW1vbnRlcmFkLWthdGFsb2ddXG4iCisiXHRbLU8gZnVua3Rpb25bLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIHV0w7ZrYWQtZmxhZ2dhWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cF0gWy1UIGFudsOkbmRuaW5nc3R5cF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBlbmhldCBbYmxvY2thbnRhbF1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUnVubmluZyBjb21tYW5kOiAlc1xuIgorbXNnc3RyICJLw7ZyIGtvbW1hbmRvOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQga8O2cmEgXCIlc1wiIgorCisjOiBtaXNjL21rZTJmcy5jOjIzMgorbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAidmlkIGJlYXJiZXRuaW5nIGF2IGxpc3RhIMO2dmVyIGTDpWxpZ2EgYmxvY2sgZnLDpW4gcHJvZ3JhbSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIkJsb2NrICVkIGkgcHJpbcOkciBzdXBlcmJsb2NrLS9ncnVwcGJlc2tyaXZhcmUgw6RyIGZlbGFrdGlndC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiQmxvY2sgJXUgdGlsbCAldSBtw6VzdGUgdmFyYSBicmEgZsO2ciBhdHQgYnlnZ2EgZXR0IGZpbHN5c3RlbS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAiQXZicnl0ZXIuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVmFybmluZzogcmVzZXJ2c3VwZXJibG9jay0vLWdydXBwYmVza3JpdmFyZSB2aWQgYmxvY2sgJXUgaW5uZWjDpWxsZXJcbiIKKyJcdGTDpWxpZ2EgYmxvY2suXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzAzCittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgInZpZCBtYXJrZXJpbmcgYXYgZMOlbGlnYSBibG9jayBzb20gYW52w6RuZGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiU2tyaXZlciBpbm9kc3RhYmVsbGVyOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3Qgd3JpdGUgJWQgYmxvY2tzIGluIGlub2RlIHRhYmxlIHN0YXJ0aW5nIGF0ICVsbHU6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJLdW5kZSBpbnRlIHNrcml2YSAlZCBibG9jayBpIGlub2RzdGFiZWxsIHNvbSBiw7ZyamFyIHZpZCAlbGx1OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjM1NSBtaXNjL21rZTJmcy5jOjIyNTcgbWlzYy9ta2UyZnMuYzoyNTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgImtsYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzY2Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgcm9vdCBkaXIiCittc2dzdHIgInZpZCBza2FwYW5kZSBhdiByb3RrYXRhbG9nIgorCisjOiBtaXNjL21rZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IHJvdGlub2QiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mzg1Cittc2dpZCAid2hpbGUgc2V0dGluZyByb290IGlub2RlIG93bmVyc2hpcCIKK21zZ3N0ciAidmlkIGluc3TDpGxsbmluZyBhdiByb3Rpbm9kZW5zIMOkZ2Fyc2thcCIKKworIzogbWlzYy9ta2UyZnMuYzo0MDMKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyAvbG9zdCtmb3VuZCIKK21zZ3N0ciAidmlkIHNrYXBhbmRlIGF2IC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgInZpZCBzw7ZrbmluZyBlZnRlciAvbG9zdCtmb3VuZCIKKworIzogbWlzYy9ta2UyZnMuYzo0MjMKK21zZ2lkICJ3aGlsZSBleHBhbmRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInZpZCB1dHZpZGduaW5nIGF2IC9sb3N0K2ZvdW5kIgorCisjOiBtaXNjL21rZTJmcy5jOjQzOAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ2aWQgaW5zdMOkbGxuaW5nIGF2IGlub2QgZsO2ciBkw6VsaWdhIGJsb2NrIgorCisjOiBtaXNjL21rZTJmcy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJPdXQgb2YgbWVtb3J5IGVyYXNpbmcgc2VjdG9ycyAlZC0lZFxuIgorbXNnc3RyICJTbHV0IHDDpSBtaW5lIHZpZCByYWRlcmluZyBhdiBzZWt0b3JlciAlZC0lZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICJWYXJuaW5nOiBrdW5lIGludGUgbMOkc2EgYmxvY2sgMDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IGVyYXNlIHNlY3RvciAlZDogJXNcbiIKK21zZ3N0ciAiVmFybmluZzoga3VuZGUgaW50ZSByYWRlcmEgc2VrdG9yICVkOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjUwNworbXNnaWQgIndoaWxlIGluaXRpYWxpemluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgInZpZCBpbml0aWVyaW5nIGF2IGpvdXJuYWxzdXBlcmJsb2NrIgorCisjOiBtaXNjL21rZTJmcy5jOjUxNQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiTm9sbHN0w6RsbGVyIGpvdXJuYWxlbmhldDogIgorCisjOiBtaXNjL21rZTJmcy5jOjUyNworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgInZpZCBub2xsc3TDpGxsbmluZyBhdiBqb3VybmFsZW5oZXQgKGJsb2NrICVsbHUsIGFudGFsICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzo1NDUKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidmlkIHNrcml2bmluZyBhdiBqb3VybmFsc3VwZXJibG9jayIKKworIzogbWlzYy9ta2UyZnMuYzo1NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInZhcm5pbmc6ICVsbHUgYmxvY2sgb2FudsOkbmRhLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkZpbHN5c3RlbXNldGlrZXR0PSVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIk9TLXR5cDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJCbG9ja3N0b3JsZWs9JXUgKGxvZz0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIktsdXN0ZXJzdG9ybGVrPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiRnJhZ21lbnRzdG9ybGVrPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiS2xpdj0ldSBibG9jaywgcmVtc3ZpZGQ9JXUgYmxvY2tcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzLCAlbGx1IGJsb2Nrc1xuIgorbXNnc3RyICIldSBpbm9kZXIsICVsbHUgYmxvY2tcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIlbGx1IGJsb2NrICglMi4yZiUlKSByZXNlcnZlcmFkZSBmw7ZyIHN1cGVyYW52w6RuZGFyZW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICJGw7Zyc3RhIGRhdGFibG9jaz0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICJSb3RrYXRhbG9nw6RnYXJlPSV1OiV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIk1heGltYWx0IGFudGFsIGZpbHN5c3RlbXNibG9jaz0lbHVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiV1IGJsb2NrZ3J1cHBlclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cFxuIgorbXNnc3RyICIldSBibG9ja2dydXBwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBibG9jayBwZXIgZ3J1cHAsICV1IGtsdXN0ZXIgcGVyIGdydXBwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgYmxvY2sgcGVyIGdydXBwLCAldSBmcmFnbWVudCBwZXIgZ3J1cHBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIldSBpbm9kZXIgcGVyIGdydXBwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlN1cGVyYmxvY2trb3Bpb3IgbGFncmFkZSBww6UgYmxvY2s6ICIKKworIzogbWlzYy9ta2UyZnMuYzo2OTEgbWlzYy90dW5lMmZzLmM6MTE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCittc2dzdHIgIk9naWx0aWd0IG1tcF91cGRhdGVfaW50ZXJ2YWw6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBzdHJpZGUtcGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIk9naWx0aWcgcmVtc2JyZWRkc3BhcmFtZXRlcjogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHN0b3JsZWtzw6RuZHJpbmdzcGFyYW1ldGVyOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiU3Rvcmxla3PDpG5kcmluZ2VucyBtYXhpbXVtIG3DpXN0ZSB2YXJhIHN0w7ZycmUgw6RuIGZpbHN5c3RlbWV0cyBzdG9ybGVrLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjc3NAorIywgYy1mb3JtYXQKK21zZ2lkICJPbi1saW5lIHJlc2l6aW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIlN0b3JsZWtzw6RuZHJpbmcgdW5kZXIgZHJpZnQgc3TDtmRzIGludGUgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODAxIG1pc2MvbWtlMmZzLmM6ODEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcm9vdF9vd25lcjogJyVzJ1xuIgorbXNnc3RyICJPZ2lsdGlnIHJvdMOkZ2FyZTog4oCdJXPigJ1cbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIHF1b3RhdHlwZS1wYXJhbWV0ZXI6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkZlbGFrdGlnYSBmbGFnZ29yIGFuZ2l2bmE6ICVzXG4iCisiXG4iCisiVXTDtmthZGUgZmxhZ2dvciBzZXBhcmVyYXMgbWVkIGtvbW1hbiwgb2NoIGthbiB0YSBldHQgYXJndW1lbnQgc29tIGF2ZGVsYXMgbWVkXG4iCisiXHRldHQgbGlraGV0c3RlY2tlbiAoXCI9XCIpLlxuIgorIlxuIgorIkdpbHRpZ2EgdXTDtmthZGUgZmxhZ2dvciDDpHI6XG4iCisiXHRzdHJpZGU9PFJBSUQtZGF0YXN0eWNrZW4gcGVyIGRpc2sgaSBibG9jaz5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRC1rbGl2IMOCwrcgZGF0YWRpc2thciBpIGJsb2NrPlxuIgorIlx0cmVzaXplPTxtYXhpbWFsIHN0b3JsZWtzw6RuZHJpbmdzc3RvcmxlayBpIGJsb2NrPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCBmw7ZyIGF0dCBhdmFrdGl2ZXJhLCAxIGbDtnIgYXR0IGFrdGl2ZXJhPlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgZsO2ciBhdHQgYXZha3RpdmVyYSwgMSBmw7ZyIGF0dCBha3RpdmVyYT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgZsO2ciByb3RrYXRhbG9nZW4+XG4iCisiXHRyb290X2dpZD08Z2lkIGbDtnIgcm90a2F0YWxvZ2VuPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBFTExFUiBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJuaW5nOiBSQUlELXJlbXNicmVkZCAldSDDpHIgaW50ZSBlbiBqw6RtbiBtdWx0aXBlbCBhdiBrbGl2ZXQgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiU3ludGF4ZmVsIGkgbWtlMmZzIGtvbmZpZ3VyYXRpb25zZmlsICglcywgcmFkIG5yICVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIGZpbHN5c3RlbXNmbGFnZ2Egc2F0dDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MzIgbWlzYy90dW5lMmZzLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBtb250ZXJpbmdzZmxhZ2dhIHNhdHQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiWW91ciBta2UyZnMuY29uZiBmaWxlIGRvZXMgbm90IGRlZmluZSB0aGUgJXMgZmlsZXN5c3RlbSB0eXBlLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGluIG1rZTJmcy5jb25mLWZpbCBkZWZpbmllcmFyIGludGUgZmlsc3lzdGVtc3R5cGVuICVzLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisiRHUgYmVow7Z2ZXIgZsO2cm1vZGxpZ2VuIGluc3RhbGxlcmEgZW4gdXBwZGF0ZXJhZCBta2UyZnMuY29uZi1maWwuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICJBdmJyeXRlci4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBmc190eXBlICVzIGlzIG5vdCBkZWZpbmVkIGluIG1rZTJmcy5jb25mXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJuaW5nOiBmc190eXBlICVzIMOkciBpbnRlIGRlZmluaWVyYWQgaSBta2UyZnMuY29uZlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBtaW5uZSBmw7ZyIG55IFPDlktWw4RHLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaW5pdGllcmEgcHJvZmlsZW4gKGZlbDogJWxkKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzU3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICJmZWxha3RpZyBibG9ja3N0b3JsZWsgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiVmFybmluZzogYmxvY2tzdG9ybGVrICVkIMOkciBpbnRlIGFudsOkbmRiYXIgcMOlIGRlIGZsZXN0YSBzeXN0ZW0uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJmZWxha3RpZyBrbHVzdGVyc3RvcmxlayAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODcKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIuKAnS1S4oCdIHVuZGFuYmVkZXMsIGFudsOkbmQg4oCdLUXigJ0gaXN0w6RsbGV0IgorCisjOiBtaXNjL21rZTJmcy5jOjEzOTkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiT2dpbHRpZ3QgYW50YWwgZsO2ciBibG9jayBwZXIgZ3J1cHAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQwNAorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgbXVzdCBiZSBtdWx0aXBsZSBvZiA4IgorbXNnc3RyICJibG9jayBwZXIgZ3J1cHAgbcOlc3RlIHZhcmEgZW4gbXVsdGlwZWwgYXYgOCIKKworIzogbWlzYy9ta2UyZnMuYzoxNDEyCittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGZsZXhfYmcgc2l6ZSIKK21zZ3N0ciAiRmVsYWt0aWd0IHRhbCBmw7ZyIGZsZXhfYmctc3RvcmxlayIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE4Cittc2dpZCAiZmxleF9iZyBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIgorbXNnc3RyICJzdG9ybGVrIHDDpSBmbGV4X2JnIG3DpXN0ZSB2YXJhIGVuIG11bHRpcGVsIGF2IDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAib2dpbHRpZyBpbm9kc2bDtnJow6VsbGFuZGUgJXMgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgIm9naWx0aWcgaW5vZHNzdG9ybGVrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgbm9kaXNjYXJkJyBleHRlbmRlZCBvcHRpb24gaW5zdGVhZCFcbiIKK21zZ3N0ciAiVmFybmluZzogZmxhZ2dhbiAtSyB1bmRhbmJlZGVzIG9jaCBza2FsbCBpbnRlIGFudsOkbmRhcyBtZXJhLiAgQW52w6RuZCBkZW4gdXTDtmthZGUgZmxhZ2dhbiBcIi1FIG5vZGlzY2FyZFwiIGlzdMOkbGxldCFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDYwCittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICJpIG1hbGxvYyBmw7ZyIGJhZF9ibG9ja3NfZmlsZW5hbWUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIm9naWx0aWcgcHJvY2VudGFuZGVsIHJlc2VydmVyYWRlIGJsb2NrIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgaW5vZGVyIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUwNQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmV2aXNpb24gbGV2ZWwgLSAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IHZlcnNpb25zbml2w6UgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTE5Cittc2dpZCAiVGhlIC10IG9wdGlvbiBtYXkgb25seSBiZSB1c2VkIG9uY2UiCittc2dzdHIgIkZsYWdnYW4gLXQgZsOlciBlbmRhc3QgYW5nZXMgZW4gZ8OlbmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJGbGFnZ2FuIC1UIGbDpXIgZW5kYXN0IGFuZ2VzIGVuIGfDpW5nIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODAgbWlzYy9ta2UyZnMuYzoyNTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgZGV2aWNlICVzXG4iCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgw7ZwcG5hIGpvdXJuYWxlbmhldCAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIkpvdXJuYWxlbmhldGVucyBibG9ja3N0b3JsZWsgKCVkKSBtaW5kcmUgw6RuIG1pbnN0YSBibG9ja3N0b3JsZWsgJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICJBbnbDpG5kZXIgam91cm5hbGVuaGV0ZW5zIGJsb2Nrc3RvcmxlazogJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImZlbGFrdGlnYSBibG9jayBcIiVzXCIgcMOlIGVuaGV0IFwiJXNcIiIKKworIyAiRXR0IiBmw7ZyIGF0dCBkZXR0YSBzw6R0dHMgaW4gaSBhbm5hbiBzdHLDpG5nIGTDpHIgZGV0IGbDtnJlZ8OlcyBhdiAiYSIuCisjIMOEdmVuICJqb3VybmFsIiBrYW4gc8OkdHRhcyBpbiBww6Ugc2FtbWEgcGxhdHMuICBGZWxyYXBwb3J0ZXJhdC4KKyM6IG1pc2MvbWtlMmZzLmM6MTYxMworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgImV0dCBmaWxzeXN0ZW0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNiByZXNpemUvbWFpbi5jOjM2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgZmlsc3lzdGVtc3RvcmxlayIKKworIzogbWlzYy9ta2UyZnMuYzoxNjMyCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIGF2Z8O2cmEgZW5oZXRzc3RvcmxlazsgZHUgbcOlc3RlIGFuZ2VcbiIKKyJzdG9ybGVrZW4gcMOlIGZpbHN5c3RlbWV0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYzOQorbXNnaWQgIiIKKyJEZXZpY2Ugc2l6ZSByZXBvcnRlZCB0byBiZSB6ZXJvLiAgSW52YWxpZCBwYXJ0aXRpb24gc3BlY2lmaWVkLCBvclxuIgorIlx0cGFydGl0aW9uIHRhYmxlIHdhc24ndCByZXJlYWQgYWZ0ZXIgcnVubmluZyBmZGlzaywgZHVlIHRvXG4iCisiXHRhIG1vZGlmaWVkIHBhcnRpdGlvbiBiZWluZyBidXN5IGFuZCBpbiB1c2UuICBZb3UgbWF5IG5lZWQgdG8gcmVib290XG4iCisiXHR0byByZS1yZWFkIHlvdXIgcGFydGl0aW9uIHRhYmxlLlxuIgorbXNnc3RyICIiCisiRW5oZXRzc3RvcmxlayByYXBwb3J0ZXJhZGVzIHNvbSBub2xsLiAgT2dpbHRpZyBwYXJ0aXRpb24gYW5naXZlbiwgZWxsZXJcbiIKKyJcdHBhcnRpdGlvbnN0YWJlbGxlbiB2YXIgaW50ZSBvbWzDpHN0IGVmdGVyIGF0dCBoYSBrw7ZydCBmc2NrLCBww6UgZ3J1bmRcbiIKKyJcdGF2IGVuIG1vZGlmaWVyYWQgcGFydGl0aW9uIGFudsOkbmRzIG9jaCDDpHIgaSBicnVrLiAgRHUga2FuIGJlaMO2dmFcbiIKKyJcdHN0YXJ0YSBvbSBmw7ZyIGF0dCBsw6RzYSBvbSBkaW4gcGFydGl0aW9uc3RhYmVsbC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjU2Cittc2dpZCAiRmlsZXN5c3RlbSBsYXJnZXIgdGhhbiBhcHBhcmVudCBkZXZpY2Ugc2l6ZS4iCittc2dzdHIgIkZpbHN5c3RlbSBzdMO2cnJlIMOkbiBzeW5iYXIgZW5oZXRzc3Rvcmxlay4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgdG9sa2EgZnMtdHlwbGlzdGFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IFN0b3JsZWtlbiBww6UgZW5oZXQgKDB4JWxseCBibG9jaykgJXMgw6RyIGbDtnIgc3RvciBmw7ZyIGF0dCB1dHRyeWNrYXNcbiIKKyJcdG1lZCAzMiBiaXRhciBtZWQgYW52w6RuZG5pbmcgYXYgZW4gYmxvY2tzdG9ybGVrIHDDpSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQ2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAidXBwbMO2c25pbmcgYXYgZnNfdHlwZXMgZsO2ciBta2UyZnMuY29uZjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJGaWxzeXN0ZW1zZnVua3Rpb25lciBzb20gaW50ZSBzdMO2ZHMgbWVkIHJldmlzaW9uIDAtZmlsc3lzdGVtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiR2xlc2Egc3VwZXJibG9jayBzdMO2ZHMgaW50ZSBtZWQgcmV2aXNpb24gMC1maWxzeXN0ZW1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWxzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZXZpc2lvbiAwIGZpbGVzeXN0ZW1zXG4iCittc2dzdHIgIkpvdXJuYWxlciBzdMO2ZHMgaW50ZSBtZWQgcmV2aXNpb24gMC1maWxzeXN0ZW1cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIm9naWx0aWcgcHJvY2VudGFuZGVsIHJlc2VydmVyYWRlIGJsb2NrIC0gJWxmIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKyJFZ2Vuc2thcGVybmEgcmVzaXplX2lub2RlIG9jaCBtZXRhX2JnIMOkciBpbnRlIGtvbXBhdGlibGFcbiIKKyJEZSBrYW4gaW50ZSBiw6VkYSBha3RpdmVyYXMgc2FtdGlkaWd0LlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IGF2Z8O2cmEgaMOlcmR2YXJ1c2VrdG9yc3RvcmxlayIKKworIzogbWlzYy9ta2UyZnMuYzoxODI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBhdmfDtnJhIGZ5c2lzayBzZWt0b3JzdG9ybGVrIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NTgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAibsOkciBibG9ja3N0b3JsZWsgc2F0dGVzOyBmw7ZyIGxpdGVuIGbDtnIgZW5oZXRlblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogc3BlY2lmaWVkIGJsb2Nrc2l6ZSAlZCBpcyBsZXNzIHRoYW4gZGV2aWNlIHBoeXNpY2FsIHNlY3RvcnNpemUgJWRcbiIKK21zZ3N0ciAiVmFybmluZzogYW5naXZlbiBibG9ja3N0b3JsZWsgJWQgw6RyIG1pbmRyZSDDpG4gZW5oZXRlbnMgZnlzaXNrYSBzZWt0b3JzdG9ybGVrICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIktsdXN0ZXJzdG9ybGVrZW4gZsOlciBpbnRlIHZhcmEgbWluZHJlIMOkbiBibG9ja3N0b3JsZWtlbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODg3Cittc2dpZCAic3BlY2lmeWluZyBhIGNsdXN0ZXIgc2l6ZSByZXF1aXJlcyB0aGUgYmlnYWxsb2MgZmVhdHVyZSIKK21zZ3N0ciAiYXR0IGFuZ2UgZW4ga2x1c3RlcnN0b3JsZWsgZsO2cnV0c8OkdHRlciBmdW5rdGlvbmVuIGJpZ2FsbG9jIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVW5hYmxlIHRvIGdldCBkZXZpY2UgZ2VvbWV0cnkgZm9yICVzXG4iCittc2dzdHIgInZhcm5pbmc6IEthbiBpbnRlIHRhIHJlZGEgcMOlIGVuaGV0ZW5zIGdlb21ldHJpIGbDtnIgJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFsaWdubWVudCBpcyBvZmZzZXQgYnkgJWx1IGJ5dGVzLlxuIgorbXNnc3RyICIlcyBqdXN0ZXJpbmcgw6RyIGbDtnJza2p1dGVuIG1lZCAlbHUgYnl0ZS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiRGV0dGEga2FuIG1lZGbDtnJhIHbDpGxkaWd0IGTDpWxpZ2EgcHJlc3RhbmRhLCAob20pcGFydGl0aW9uZXJpbmcgZsO2cmVzbMOlcy5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSIKK21zZ3N0ciAiJWQtYnl0ZWJsb2NrIGbDtnIgc3RvcnQgZsO2ciBzeXN0ZW1ldCAobWF4ICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIlZhcm5pbmc6ICVkLWJ5dGVibG9jayBmw7ZyIHN0b3J0IGbDtnIgc3lzdGVtZXQgKG1heCAlZCksIHR2aW5nYXMgZm9ydHPDpHR0YVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NjgKK21zZ2lkICJDYW4ndCBzdXBwb3J0IGJpZ2FsbG9jIGZlYXR1cmUgd2l0aG91dCBleHRlbnRzIGZlYXR1cmUiCittc2dzdHIgIkthbiBpbnRlIHN0w7ZkamEgZnVua3Rpb25lbiBiaWdhbGxvYyB1dGFuIGZ1bmt0aW9uZW4gdXRzdHLDpGNrbmluZ2FyIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWYXJuaW5nOiBmdW5rdGlvbmVuIGJpZ2FsbG9jIMOkciBmb3J0ZmFyYW5kZSB1bmRlciB1dHZlY2tsaW5nXG4iCisiU2UgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZsO2ciBtZXIgaW5mb3JtYXRpb25cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTgyIG1pc2MvdHVuZTJmcy5jOjc0MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIHF1b3RhIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm5pbmc6IGZ1bmt0aW9uZW4ga3ZvdCDDpHIgZm9ydGZhcmFuZGUgdW5kZXIgdXR2ZWNrbGluZ1xuIgorIlNlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL1F1b3RhIGbDtnIgbWVyIGluZm9ybWF0aW9uXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICJyZXNlcnZlcmFkZSBibG9jayBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgdW5kZXIgZHJpZnQgc3TDtmRzIGludGUgcMOlIGlja2UtZ2xlc2EgZmlsc3lzdGVtIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMDIKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiYW50YWwgYmxvY2sgcGVyIGdydXBwIHV0YW5mw7ZyIGdpbHRpZ3QgaW50ZXJ2YWxsIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMjYKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiRnVua3Rpb25lbiBmbGV4X2diIMOkciBpbnRlIGFrdGl2ZXJhZCwgc8OlIGZsZWdfYmctc3RvcmxlZyBrYW4gaW50ZSBhbmdlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDM4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgc2l6ZSAlZCAobWluICVkL21heCAlZCkiCittc2dzdHIgIm9naWx0aWcgaW5vZHN0b3JsZWsgJWQgKG1pbiAlZC9tYXggJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbm9kZXIgKCVsbHUpLCDDtmthIGlub2RzZsO2cmjDpWxsYW5kZXQ/IgorCisjOiBtaXNjL21rZTJmcy5jOjIwNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgc3BlY2lmeSA8IDJeMzIgaW5vZGVzIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBpbm9kZXIgKCVsbHUpLCBhbmdlIDwgMsKzwrIgaW5vZGVyIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorImlub2Rzc3RvcmxlayAoJXUpIMK3IGlub2RhbnRhbCAoJXUpIGbDtnIgc3RvcnQgZsO2ciBldHRcbiIKKyJcdGZpbHN5c3RlbSBtZWQgJWxsdSBibG9jaywgYW5nZSBow7ZncmUgaW5vZHNmw7ZyaMOlbGxhbmRlICgtaSlcbiIKKyJcdGVsbGVyIGzDpGdyZSBpbm9kYW50YWwgKC1OKS5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiU2tyaXZlciDDtnZlciBleGlzdGVyYW5kZSBmaWxzeXN0ZW0sIGRldHRhIGthbiBnw7ZyYXMgb2dqb3J0IG1lZCBrb21tYW5kb3Q6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMTAKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQgc2thcGEgZW4gZ8O2ci1vZ2pvcnQtZmlsXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIzNgorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICJVdHJhbmdlcmFyIGVuaGV0c2Jsb2NrOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjI1MgorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIC0gIgorCisjOiBtaXNjL21rZTJmcy5jOjIzNjAKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgInZpZCB1cHBzw6R0dG5pbmcgYXYgc3VwZXJibG9jayIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIlV0cmFuZ2VyaW5nIGx5Y2thZGVzIG9jaCBrb21tZXIgcmV0dXJuZXJhIDBzICAtIGhvcHBhciDDtnZlciByZW5zbmluZyBhdiBpbm9kc3RhYmVsbFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICJva8OkbnQgb3MgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoyNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkFsbG9rZXJhciBncnVwcHRhYmVsbGVyOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwOAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBhbGxvY2F0ZSBmaWxlc3lzdGVtIHRhYmxlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCBhbGxva2VyYSBmaWxzeXN0ZW1zdGFiZWxsZXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUxNworbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKyJcbiIKKyJcdHZpZCBrb252ZXJ0ZXJpbmcgYXYgdW5kZXJrbHVzdHJldHMgYml0a2FydGEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGJsb2NrICVsbHUgYXQgZW5kIG9mIGZpbGVzeXN0ZW0iCittc2dzdHIgInZpZCBub2xsc3TDpGxsbmluZyBhdiBibG9jayAlbGx1IHZpZCBzbHV0ZXQgYXYgZmlsc3lzdGVtZXQiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU3MworbXNnaWQgIndoaWxlIHJlc2VydmluZyBibG9ja3MgZm9yIG9ubGluZSByZXNpemUiCittc2dzdHIgInZpZCByZXNlcnZhdGlvbiBhdiBibG9jayBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgdW5kZXIgZHJpZnQiCisKKyMgIkVuIiBmw7ZyIGF0dCBkZXR0YSBzw6R0dHMgaW4gaSBhbm5hbiBzdHLDpG5nIGTDpHIgZGV0IGbDtnJlZ8OlcyBhdiAiYSIuCisjIMOEdmVuICJmaWxzeXN0ZW0iIGthbiBzw6R0dGFzIGluIHDDpSBzYW1tYSBwbGF0cy4gIEZlbHJhcHBvcnRlcmF0LgorIzogbWlzYy9ta2UyZnMuYzoyNTg0IG1pc2MvdHVuZTJmcy5jOjY0NQorbXNnaWQgImpvdXJuYWwiCittc2dzdHIgImVuIGpvdXJuYWwiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiTMOkZ2dlciB0aWxsIGpvdXJuYWwgdGlsbCBlbmhldCAlczogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0dmlkIGbDtnJzw7ZrIGF0dCBsw6RnZ2EgdGlsbCBqb3VybmFsIHRpbGwgZW5oZXQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwOCBtaXNjL21rZTJmcy5jOjI2NDAgbWlzYy90dW5lMmZzLmM6Njc0IG1pc2MvdHVuZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImtsYXJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIkhvcHBhciDDtnZlciBhdHQgc2thcGEgam9ybmFsIGkgbMOkZ2V0IGVuZGFzdCBzdXBlclxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJXUgYmxvY2tzKTogIgorbXNnc3RyICJTa2FwYXIgam91cm5hbCAoJXUgYmxvY2spOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzNgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0dmlkIGbDtnJzw7ZrIGF0dCBza2FwYSBqb3VybmFsIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NDcgbWlzYy90dW5lMmZzLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisiXG4iCisiRmVsIHZpZCBha3RpdmVyaW5nIGF2IGZ1bmt0aW9uZW4gZsO2ciBza3lkZCBtb3QgZmxlcmZhbGRpZyBtb250ZXJpbmcuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIlNreWRkIG1vdCBmbGVyZmFsZGlnIG1vbnRlcmluZyDDpHIgYWt0aXZlcmF0IG1lZCB1cHBkYXRlcmluZ3NpbnRlcnZhbGwgJWQgc2VrdW5kZXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAiU2tyaXZlciBzdXBlcmJsb2NrIG9jaCBmaWxzeXN0ZW1zYm9rZsO2cmluZ3NpbmZvcm1hdGlvbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmcsIGhhZCB0cm91YmxlIHdyaXRpbmcgb3V0IHN1cGVyYmxvY2tzLiIKK21zZ3N0ciAiIgorIlxuIgorIlZhcm5pbmcsIGhhZGUgcHJvYmxlbSBhdHQgc2tyaXZhIHV0IHN1cGVyYmxvY2suIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImtsYXJcbiIKKyJcbiIKKworIzogbWlzYy9ta2xvc3QrZm91bmQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogbWtsb3N0K2ZvdW5kXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiBta2xvc3QrZm91bmRcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogICVzIGRldmljZS4uLlxuIgorIlxuIgorIlByaW50cyBvdXQgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnaXZlbiBkZXZpY2UuXG4iCisiRm9yIGV4YW1wbGU6ICVzIC9kZXYvaGRhXG4iCisiXG4iCittc2dzdHIgIiIKKyJBbnbDpG5kbmluZzogICVzIGVuaGV0Li4uXG4iCisiXG4iCisiU2tyaXYgdXQgcGFydGl0aW9uc2luZm9ybWF0aW9uZW4gZsO2ciB2YXJqZSBhbmdpdmVuIGVuaGV0LlxuIgorIlRpbGwgZXhlbXBlbDogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiS2FuIGludGUgw7ZwcG5hICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICJLYW4gaW50ZSBmw6UgZ2VvbWV0cmluIGbDtnIgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBzaXplIG9mICVzOiAlcyIKK21zZ3N0ciAiS2FuIGludGUgZsOlIHN0b3JsZWsgYXYgJXM6ICVzIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgc3RhcnQ9JThkIHNpemU9JThsdSBlbmQ9JThkXG4iCittc2dzdHIgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzdG9ybGVrPSU4bHUgc2x1dD0lOGRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3Cittc2dpZCAiUGxlYXNlIHJ1biBlMmZzY2sgb24gdGhlIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIkvDtnIgZTJmc2NrIHDDpSBmaWxzeXN0ZW1ldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wIG1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJBbnbDpG5kbmluZzogJXMgWy1jIG1heF9hbnRhbF9tb250ZXJpbmdhcl0gWy1lIGZlbGJldGVlbmRlXSBbLWcgZ3J1cHBdXG4iCisiXHRbLWkgaW50ZXJ2YWxsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbGZsYWdnb3JdIFstbF1cbiIKKyJcdFstbSByZXNlcnZlcmFkZV9ibG9ja19wcm9jZW50XSBbLW8gW15dbW9udGVyaW5nc2ZsYWdnb3JbLC4uLl1dXG4iCisiXHRbLXAgbW1wX3VwcGRhdGVyaW5nc2ludGVydmFsbF0gWy1yIGFudGFsX3Jlc2VydmVyYWRlX2Jsb2NrXVxuIgorIlx0Wy11IGFudsOkbmRhcmVdIFstQyBhbnRhbF9tb250ZXJpbmdhcl0gWy1MIHZvbHltZXRpa2V0dF1cbiIKKyJcdFstTSBzZW5hc3RfbW9udGVyYWRfa2F0YWxvZ10gWy1PIFteXWZ1bmt0aW9uWywuLi5dXVxuIgorIlx0Wy1FIHV0w7ZrYWQtZmxhZ2dhWywuLi5dXSBbLVQgc2VuYXN0ZV9rb250cm9sbHRpZF0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG55X2lub2RzdG9ybGVrIF0gZW5oZXRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgZXh0ZXJuIGpvdXJuYWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgw6RyIGludGUgZW4gam91cm5hbGVuaGV0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJKb3VybmFsc3VwZXJibG9jayBpbnRlIGZ1bm5ldCFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjQwCittc2dpZCAiRmlsZXN5c3RlbSdzIFVVSUQgbm90IGZvdW5kIG9uIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICJGaWxzeXN0ZW1zIFVVSUQgaW50ZSBmdW5uZXQgcMOlIGpvdXJuYWxlbmhldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjYxCittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyJLYW4gaW50ZSBoaXR0YSBqb3VybmFsZW5oZXRlbi4gICBEZW4gdG9ncyBJTlRFIGJvcnQuXG4iCisiQW52w6RuZCBmbGFnZ2FuIC1mIGbDtnIgYXR0IHRhIGJvcnQgZW4gc2FrbmFkIGpvdXJuYWxlbmhldC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY5Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIkpvdXJuYWwgYm9ydHRhZ2VuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMxMworbXNnaWQgIndoaWxlIHJlYWRpbmcgYml0bWFwcyIKK21zZ3N0ciAidmlkIGzDpHNuaW5nIGF2IGJpdGthcnRvciIKKworIzogbWlzYy90dW5lMmZzLmM6MzIxCittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAidmlkIG5vbGxzdMOkbGxuaW5nIGF2IGpvdXJuYWxpbm9kIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMzIKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInZpZCBza3Jpdm5pbmcgYXYgam91cm5hbGlub2QiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjM2NworIywgYy1mb3JtYXQKK21zZ2lkICIoYW5kIHJlYm9vdCBhZnRlcndhcmRzISlcbiIKK21zZ3N0ciAiKG9jaCBzdGFydGEgb20gZWZ0ZXLDpXQhKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiTm9sbHN0w6RsbG5pbmcgYXYgZmlsc3lzdGVtc2Z1bmt0aW9uIFwiJXNcIiBzdMO2ZHMgaW50ZS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiQXR0IHPDpHR0YSBmaWxzeXN0ZW1zZnVua3Rpb24gXCIlc1wiIHN0w7ZkcyBpbnRlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRmxhZ2dhbiBoYXNfam91cm5hbCBmw6VyIGVuZGFzdCBub2xsc3TDpGxsYXMgbsOkciBmaWxzeXN0ZW1ldCDDpHJcbiIKKyJvbW9udGVyYXQgZWxsZXIgbW9udGVyYXQgZW5iYXJ0IGbDtnIgbMOkc25pbmcuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQyNAorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIkZsYWdnYW4gbmVlZHNfcmVjb3Zlcnkgw6RyIHNhdHQuICBLw7ZyIGUyZnNjayBmw7ZyZSBmbGFnZ2FuIGhhc19qb3VybmFsXG4iCisibm9sbHN0w6RsbHMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ0MworbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJGdW5rdGlvbmVuIGbDtnIgc2t5ZGQgbW90IGZsZXJmYWxkaWcgbW9udGVyaW5nXG4iCisia2FuIGludGUgc8OkdHRhcyBww6Ugb20gZmlsc3lzdGVtZXQgw6RyIG1vbnRlcmF0XG4iCisiZWxsZXIgc2tyaXZza3lkZGF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAiU2t5ZGQgbW90IGZsZXJmYWxkaWcgbW9udGVyaW5nIGhhciBha3RpdmVyYXRzIG1lZCB1cHBkYXRlcmluZ3NpbnRlcnZhbGxldCAlZCBzLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIkZ1bmt0aW9uZW4gZsO2ciBza3lkZCBtb3QgZmxlcmZhbGRpZyBtb250ZXJpbmcga2FuIGludGVcbiIKKyJhdmFrdGl2ZXJhcyBvbSBmaWxzeXN0ZW1ldCDDpHIgc2tyaXZza3lkZGF0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzgKK21zZ2lkICJFcnJvciB3aGlsZSByZWFkaW5nIGJpdG1hcHNcbiIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBiaXRrYXJ0b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hZ2ljIG51bWJlciBpbiBNTVAgYmxvY2sgZG9lcyBub3QgbWF0Y2guIGV4cGVjdGVkOiAleCwgYWN0dWFsOiAleFxuIgorbXNnc3RyICJNYWdpc2t0IHRhbCBpIE1NUC1ibG9jayBzdMOkbW1lciBpbnRlLiAgZsO2cnbDpG50YXQ6ICV4LCBmYWt0aXNrdDogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJ2aWQgbMOkc25pbmcgYXYgTU1QLWJsb2NrLiIKKworIzogbWlzYy90dW5lMmZzLmM6NTI0Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisiQXR0IG5vbGxzdMOkbGxhIGZsYWdnYW4gZmxleF9iZyBza3VsbGUgZsOlIGZpbHN5c3RlbWV0IGF0dCBibGlcbiIKKyJpbmtvbnNpc3RlbnQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzNQorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiRmxhZ2dhbiBodWdlX2ZpbGUgZsOlciBlbmRhc3Qgbm9sbHN0w6RsbGFzIG7DpHIgZmlsc3lzdGVtZXQgw6RyXG4iCisib21vbnRlcmF0IGVsbGVyIG1vbnRlcmF0IGVuYmFydCBmw7ZyIGzDpHNuaW5nLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1OTUKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogJ15xdW90YScgb3B0aW9uIG92ZXJyaWRlcyAnLVEnYXJndW1lbnRzLlxuIgorbXNnc3RyICIiCisiXG4iCisiVmFybmluZzogZmxhZ2dhbiBcIl5xdW90YVwiIMOlc2lkb3PDpHR0ZXIgXCItUVwiLWFyZ3VtZW50LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciByZWRhbiBlbiBqb3VybmFsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBvbiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiXHR2aWQgZsO2cnPDtmsgYXR0IMO2cHBuYSBqb3VybmFsIHDDpSAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiU2thcGFyIGpvdXJuYWwgcMOlIGVuaGV0ICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJ2aWQgdGlsbMOkZ2cgYXYgZmlsc3lzdGVtIHRpbGwgam91cm5hbCBww6UgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3NgorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiU2thcGFyIGpvdXJuYWxpbm9kOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY4NQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisiXG4iCisiXHR2aWQgZsO2cnPDtmsgYXR0IHNrYXBhIGpvdXJuYWxmaWwiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGFsbG9rZXJhIG1pbm5lIGbDtnIgYXR0IHRvbGthIGt2b3RmbGFnZ29yIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo3ODUKK21zZ2lkICIiCisiXG4iCisiQmFkIHF1b3RhIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkZvbGxvd2luZyB2YWxpZCBxdW90YSBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHBhc3MgYnkgc2VwYXJhdGluZyB3aXRoIGNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWd0IGt2b3RhbHRlcm5hdGl2IGFuZ2l2ZXQuXG4iCisiXG4iCisiRsO2bGphbmRlIGdpbHRpZ2Ega3ZvdGFsdGVybmF0aXYgZmlubnMgKHNraWNrYSBkZW0gc2VwYXJlcmFkZSBtZWQga29tbWF0ZWNrZW4pOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBkYXR1bS0vdGlkc2FuZ2l2ZWxzZTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg3MCBtaXNjL3R1bmUyZnMuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgYW50YWwgbW9udGVyaW5nYXIgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgZmVsYmV0ZWVuZGUgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBnaWQvZ3JvdXAgbmFtZSAtICVzIgorbXNnc3RyICJmZWxha3RpZ3QgZ2lkL2dydXBwbmFtbiAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGludGVydmFsIC0gJXMiCittc2dzdHIgImZlbGFrdGlndCBpbnRlcnZhbGwgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9jayByYXRpbyAtICVzIgorbXNnc3RyICJmZWxha3RpZyBhbmRlbCByZXNlcnZlcmFkZSBibG9jayAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDAzCittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1vIGbDpXIgZW5kYXN0IGFuZ2VzIGVuIGfDpW5nIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1PIGbDpXIgZW5kYXN0IGFuZ2VzIGVuIGfDpW5nIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGFudGFsIHJlc2VydmVyYWRlIGJsb2NrIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHVpZC91c2VyIG5hbWUgLSAlcyIKK21zZ3N0ciAiZmVsYWd0aWd0IHVpZC9hbnbDpG5kYXJuYW1uIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgaW5vZHNzdG9ybGVrIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiSW5vZHNzdG9ybGVrIG3DpXN0ZSB2YXJhIGVuIG11bHRpcGVsIGF2IHR2w6UtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIm1tcF91cGRhdGVfaW50ZXJ2YWwgw6RyIGbDtnIgc3RvcnQ6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZFxuIgorbXNnaWRfcGx1cmFsICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHJbMF0gIlPDpHR0ZXIgdXBwZGF0ZXJpbmdzaW50ZXJ2YWxsIGbDtnIgc2t5ZGQgbW90IGZsZXJmYWxkaWcgbW9udGVyaW5nIHRpbGwgJWx1IHNla3VuZFxuIgorbXNnc3RyWzFdICJTw6R0dGVyIHVwcGRhdGVyaW5nc2ludGVydmFsbCBmw7ZyIHNreWRkIG1vdCBmbGVyZmFsZGlnIG1vbnRlcmluZyB0aWxsICVsdSBzZWt1bmRlclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpZGU6ICVzXG4iCittc2dzdHIgIk9naWx0aWcgUkFJRC1rbGl2OiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIk9naWx0aWcgUkFJRC1yZW1zYnJlZGQ6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiT2dpbHRpZyBoYXNoLWFsZ29yaXRtOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIlPDpHR0ZXIgc3RhbmRhcmRoYXNoYWxnb3JpdG0gdGlsbCAlcyAoJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkJhZCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRjbGVhcl9tbXBcbiIKKyJcdGhhc2hfYWxnPTxoYXNoIGFsZ29yaXRobT5cbiIKKyJcdG1vdW50X29wdHM9PGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucz5cbiIKKyJcdHN0cmlkZT08UkFJRCBwZXItZGlzayBjaHVuayBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRCBzdHJpZGUqZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorbXNnc3RyICIiCisiXG4iCisiRmVsYWt0aWdhIGZsYWdnb3IgYW5naXZuYS5cbiIKKyJcbiIKKyJVdMO2a2FkZSBmbGFnZ29yIHNlcGFyZXJhcyBtZWQga29tbWFuLCBvY2gga2FuIHRhIGV0dCBhcmd1bWVudCBzb20gYXZkZWxhcyBtZWRcbiIKKyJcdGV0dCBsaWtoZXRzdGVja2VuIChcIj1cIikuXG4iCisiXG4iCisiR2lsdGlnYSB1dMO2a2FkZSBmbGFnZ29yIMOkcjpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2gtYWxnb3JpdG0+XG4iCisiICAgICAgICBtb3VudF9vcHRzPTx1dMO2a2FkZSBzdGFuZGFyZG1vbnRlcmluZ3NmbGFnZ29yPlxuIgorIlx0c3RyaWRlPTxSQUlELXN0eWNrZXN0b3JsZWsgcGVyIGRpc2sgaSBibG9jaz5cbiIKKyJcdHN0cmlwZV93aWR0aD08UkFJRC1rbGl2wrdkYXRhZGlza2FyIGkgYmxvY2s+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRedGVzdF9mc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzIzCittc2dpZCAiRmFpbGVkIHRvIHJlYWQgaW5vZGUgYml0bWFwXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdHQgbMOkc2EgaW5vZHNiaXRrYXJ0YVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzI4Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdHQgbMOkc2EgYmxvY2tiaXRrYXJ0YVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgImJsb2NrIGF0dCBmbHl0dGEiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgYmxvY2tiaXRrYXJ0YSBuw6RyIGlub2Rzc3Rvcmxla2VuIMO2a2FkZXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiSW50ZSB0aWxscsOkY2tsaWd0IG1lZCB1dHJ5bW1lIGbDtnIgYXR0IMO2a2EgaW5vZHNzdG9ybGVrZW4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBvbWxva2FsaXNlcmEgYmxvY2sgdW5kZXIgc3Rvcmxla3PDpG5kcmluZyBhdiBpbm9kZXIgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkZlbCBuw6RyIHN0b3JsZWtlbiBww6UgaW5vZGVyIMOkbmRyYWRlcy5cbiIKKyJLw7ZyIGUydW5kbyBmw7ZyIGF0dCBnw7ZyYSBmaWxzeXN0ZW1zw6RuZHJpbmdhcm5hIG9nam9yZGEuIFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODE4Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZGIgZmlsZW5hbWVcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBtaW5uZSBmw7ZyIHRkYi1maWxuYW1uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCB0YSBib3J0ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiRsO2ciBhdHQgZ8O2cmEgdHVuZTJmcy1vcGVyYXRpb25lbiBvZ2pvcmQsIGvDtnIga29tbWFuZG90XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJNTVAgYmxvY2sgbWFnaWMgaXMgYmFkLiBUcnkgdG8gZml4IGl0IGJ5IHJ1bm5pbmc6XG4iCisiJ2UyZnNjayAtZiAlcydcbiIKK21zZ3N0ciAiIgorIk1NUC1ibG9ja2V0cyBtYWdpc2thIHRhbCDDpHIgZmVsYWt0aWd0LiAgRsO2cnPDtmsgYXR0IHLDpHR0YSBkZXQgZ2Vub20gYXR0IGvDtnJhOlxuIgorIlwiZTJmc2NrLWYgJXNcIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBpbm9kZSBzaXplIGlzIGFscmVhZHkgJWx1XG4iCittc2dzdHIgIklub2Rzc3Rvcmxla2VuIMOkciByZWRhbiAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJTaHJpbmtpbmcgdGhlIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICJBdHQga3J5bXBhIGlub2Rzc3Rvcmxla2VuIHN0w7ZkcyBpbnRlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiT2dpbHRpZyBpbm9kc3RvcmxlayAlbHUgKG1heCAlZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiU8OkdHRlciBtYXggYW50YWwgbW9udGVyaW5nYXIgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICJTw6R0dGVyIGFrdHVlbGx0IGFudGFsIG1vbnRlcmluZ2FyIHRpbGwgJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGVycm9yIGJlaGF2aW9yIHRvICVkXG4iCittc2dzdHIgIlPDpHR0ZXIgZmVsYmV0ZWVuZGUgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiU8OkdHRlciBnaWQgZsO2ciByZXNlcnZlcmFkZSBibG9jayB0aWxsICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImludGVydmFsbCBtZWxsYW4ga29udHJvbGxlciDDpHIgZsO2ciBzdG9ydCAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAyNAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGludGVydmFsIGJldHdlZW4gY2hlY2tzIHRvICVsdSBzZWNvbmRzXG4iCittc2dzdHIgIlPDpHR0ZXIgaW50ZXJ2YWxsIG1lbGxhbiBrb250cm9sbGVyIHRpbGwgJWx1IHNla3VuZGVyXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAiU8OkdHRlciBwcm9jZW50IHJlc2VydmVyYWRlIGJsb2NrIHRpbGwgJWcgJSUgKCVsbHUgYmxvY2spXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJhbnRhbCByZXNlcnZlcmFkZSBibG9jayBmw7ZyIHN0b3J0ICglbGx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjA0NAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBjb3VudCB0byAlbGx1XG4iCittc2dzdHIgIlPDpHR0ZXIgYW50YWwgcmVzZXJ2ZXJhZGUgYmxvY2sgdGlsbCAlbGx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTAKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRmlsc3lzdGVtZXQgaGFyIHJlZGFuIGdsZXNhIHN1cGVyYmxvY2suXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyJGbGFnZ2FuIGbDtnIgZ2xlc2Egc3VwZXJibG9jayBzYXR0LiAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjIKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk5vbGxzdMOkbGxuaW5nIGF2IHN1cGVyZmxhZ2dhbiBnbGVzIHN0w7ZkcyBpbnRlLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICJTw6R0dGVyIHRpZHB1bmt0IGbDtnIgc2VuYXN0ZSBmaWxzeXN0ZW1za29udHJvbGwgdGlsbCAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHVpZCB0byAlbHVcbiIKK21zZ3N0ciAiU8OkdHRlciB1aWQgZsO2ciByZXNlcnZlcmFkZSBibG9jayB0aWxsICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTA4Cittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICJGZWwgdmlkIGFudsOkbmRuaW5nIGF2IGNsZWFyX21tcC4gIERldCBtw6VzdGUgYW52w6RuZGFzIG1lZCAtZlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTI2Cittc2dpZCAiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiS3ZvdGFmdW5rdGlvbmVuIGthbiBlbmRhc3Qgw6RuZHJhcyBuw6RyIGZpbHN5c3RlbWV0IMOkciBvbW9udGVyYXQuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTkKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIk9naWx0aWd0IFVVSUQtZm9ybWF0XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzIKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICJJbm9kc3N0b3JsZWtlbiBmw6VyIGVuZGFzdCDDpG5kcmFzIG7DpHIgZmlsc3lzdGVtZXQgw6RyIG9tb250ZXJhdC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4MAorbXNnaWQgIiIKKyJDaGFuZ2luZyB0aGUgaW5vZGUgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBmaWxlc3lzdGVtcyB3aXRoIHRoZSBmbGV4X2JnXG4iCisiZmVhdHVyZSBlbmFibGVkLlxuIgorbXNnc3RyICIiCisiQXR0IMOkbmRyYSBpbm9kc3N0b3JsZWsgc3TDtmRzIGludGUgZsO2ciBmaWxzeXN0ZW0gbWVkIGZ1bmt0aW9uZW4gZmxleF9iZ1xuIgorImFrdGl2ZXJhZC5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIlPDpHR0ZXIgaW5vZHNzdG9ybGVrIHRpbGwgJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBpbm9kZSBzaXplXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdHQgw6RuZHJhIGlub2Rzc3Rvcmxla1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAiU8OkdHRlciBrbGl2c3RvcmxlayB0aWxsICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiU8OkdHRlciByZW1zYnJlZGQgdGlsbCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zIHRvICclcydcbiIKK21zZ3N0ciAiU8OkdHRlciB1dMO2a2FkZSBzdGFuZGFyZG1vbnRlcmluZ3NmbGFnZ29yIHRpbGwgXCIlc1wiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjc0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAiRm9ydHPDpHR0IMOkbmTDpT8gKGosbikgIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlICVzIC0tLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJFbmhldGVuIGV4aXN0ZXJhciB1cHBlbmJhcmxpZ2VuIGludGU7IGFuZ2F2IGR1IGRlbiBrb3JyZWt0P1xuIgorCisjOiBtaXNjL3V0aWwuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIMOkciBpbnRlIGVuIGJsb2Nrc3BlY2lhbGVuaGV0LlxuIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgw6RyIGhlbGEgZW5oZXRlbiwgaW50ZSBiYXJhIGVuIHBhcnRpdGlvbiFcbiIKKworIzogbWlzYy91dGlsLmM6MTU0Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgIm1rZTJmcyBmcmFtdHZpbmdhdCDDpG5kw6UuICBIb3BwYXMgL2V0Yy9tdGFiIMOkciBmZWxha3RpZy5cbiIKKworIyAlcyBrYW4gYmxpICJmaWxzeXN0ZW0iIGVsbGVyICJqb3VybmFsIi4gIEphZyBoYXIgbGFndCB0aWxsICJlbiIKKyMgcmVzcGVrdGl2ZSAiZXR0IiBpIMO2dmVyc8OkdHRuaW5nYXJuYSBhdiBkZXNzYSBzdHLDpG5nYXIgaXN0w6RsbGV0LgorIyBGZWxyYXBwb3J0ZXJhdC4KKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAic2thcGFyIGludGUgJXMgaMOkciFcbiIKKworIzogbWlzYy91dGlsLmM6MTY2Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIm1rZTJmcyBmcmFtdHZpbmdhZCDDpG5kw6UuXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE4MgorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBqb3VybmFsIG9wdGlvbnMhXG4iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgbWlubmUgZsO2ciBhdHQgdG9sa2Egam91cm5hbGZsYWdnb3IhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IGZpbmQgam91cm5hbCBkZXZpY2UgbWF0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIkt1bmRlIGludGUgaGl0dGEgam91cm5hbGVuaGV0IHNvbSBtYXRjaGFyICVzXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIyOAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgam91cm5hbCBvcHRpb25zIHNwZWNpZmllZC5cbiIKKyJcbiIKKyJKb3VybmFsIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBqb3VybmFsIG9wdGlvbnMgYXJlOlxuIgorIlx0c2l6ZT08am91cm5hbCBzaXplIGluIG1lZ2FieXRlcz5cbiIKKyJcdGRldmljZT08am91cm5hbCBkZXZpY2U+XG4iCisiXG4iCisiVGhlIGpvdXJuYWwgc2l6ZSBtdXN0IGJlIGJldHdlZW4gMTAyNCBhbmQgMTAyNDAwMDAgZmlsZXN5c3RlbSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJGZWxha3RpZ2Egam91cm5hbGZsYWdnb3IgYW5naXZuYS5cbiIKKyJcbiIKKyJKb3VybmFsZmxhZ2dvciBzZXBhcmVyYXMgbWVkIGtvbW1hdGVja2VuLCBvY2gga2FuIHRhIGV0dCBhcmd1bWVudCBzb21cbiIKKyJcdGF2Z3LDpG5zYXMgbWVkIGV0dCBsaWtoZXRzdGVja2VuIChcIj1cIikuXG4iCisiXG4iCisiR2lsdGlnYSBqb3VybmFsZmxhZ2dvciDDpHI6XG4iCisiXHRzaXplPTxqb3VybmFsc3RvcmxlayBpIG1lZ2FieXRlPlxuIgorIlx0ZW5oZXQ9PGpvdXJuYWxlbmhldD5cbiIKKyJcbiIKKyJKb3VybmFsc3Rvcmxla2VuIG3DpXN0ZSB2YXJhIG1lbGxhbiAxMDI0IG9jaCAxMDI0MDAwMCBmaWxzeXN0ZW1zYmxvY2suXG4iCisiXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI1OAorbXNnaWQgIiIKKyJcbiIKKyJGaWxlc3lzdGVtIHRvbyBzbWFsbCBmb3IgYSBqb3VybmFsXG4iCittc2dzdHIgIiIKKyJcbiIKKyJGaWxzeXN0ZW0gZsO2ciBsaXRldCBmw7ZyIGVuIGpvdXJuYWxcbiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGVuIGJlZ8OkcmRhIGpvdXJuYWxzdG9ybGVrZW4gw6RyICVkIGJsb2NrOyBkZW4gbcOlc3RlIHZhcmFcbiIKKyJtZWxsYW4gMTAyNCBvY2ggMTAyNDAwMDAgYmxvY2suICBBdmJyeXRlci5cbiIKKworIzogbWlzYy91dGlsLmM6MjczCittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgc2l6ZSB0b28gYmlnIGZvciBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiXG4iCisiSm91cm5hbHN0b3JsZWtlbiBmw7ZyIHN0b3IgZsO2ciBmaWxzeXN0ZW0uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGVja2VkIGV2ZXJ5ICVkIG1vdW50cyBvclxuIgorIiVnIGRheXMsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFVzZSB0dW5lMmZzIC1jIG9yIC1pIHRvIG92ZXJyaWRlLlxuIgorbXNnc3RyICIiCisiRGV0dGEgZmlsc3lzdGVtIGtvbW1lciBhdXRvbWF0aXNrdCBrb250cm9sbGVyYXMgdmFyICVkIG1vbnRlcmluZyBlbGxlclxuIgorIiVnIGRhZywgdmlsa2V0IHNvbSBrb21tZXIgZsO2cnN0LiAgQW52w6RuZCB0dW5lMmZzIC1jIGVsbGVyIC1pIGbDtnIgYXR0IMOkbmRyYS5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIkFudsOkbmRuaW5nOiAlcyBbLWRdIFstcCBwaWQtZmlsXSBbLXMgdXR0YWdzc8O2a3bDpGddIFstVCB0aWRzZ3LDpG5zXVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICVzIFstcnx0XSBbLW4gYW50XSBbLXMgc29ja2V0dXR0YWddXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiICAgICAgICVzIC1rXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoxNTQKK21zZ2lkICJiYWQgYXJndW1lbnRzIgorbXNnc3RyICJmZWxha3RpZ2EgYXJndW1lbnQiCisKKyM6IG1pc2MvdXVpZGQuYzoxNzIKK21zZ2lkICJjb25uZWN0IgorbXNnc3RyICJhbnNsdXQiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTEKK21zZ2lkICJ3cml0ZSIKK21zZ3N0ciAic2tyaXYiCisKKyM6IG1pc2MvdXVpZGQuYzoxOTkKK21zZ2lkICJyZWFkIGNvdW50IgorbXNnc3RyICJsw6RzYW50YWwiCisKKyM6IG1pc2MvdXVpZGQuYzoyMDUKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICJmZWxha3RpZyBzdmFyc2zDpG5nZCIKKworIzogbWlzYy91dWlkZC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICJ1dWlkZC1kZW1vbmVuIHNvbSBrw7ZycyByZWRhbiBtZWQgcGlkICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY3JlYXRlIHVuaXggc3RyZWFtIHNvY2tldDogJXMiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgdW5peC1zdHLDtm11dHRhZzogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBiaW5kYSB1bml4LXV0dGFnICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBseXNzbmEgcMOlIHVuaXgtdXR0YWcgJXM6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBmcm9tIGNsaWVudCwgbGVuID0gJWRcbiIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBmcsOlbiBrbGllbnQsIGxlbiA9ICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICJvcGVyYXRpb24gJWQsIGlua29tbWFuZGUgYW50ID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICJHZW5lcmVyYWRlIHRpZHMtVVVJRDogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIkdlbmVyZXJhZGUgc2x1bXBtw6Rzc2lndCBVVUlEOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIkdlbmVyZXJhZGUgdGlkcy1VVUlEICVzIG9jaCBlZnRlcmbDtmxqYW5kZSBVVUlEXG4iCittc2dzdHJbMV0gIkdlbmVyZXJhZGUgdGlkcy1VVUlEICVzIG9jaCAlZCBlZnRlcmbDtmxqYW5kZSBVVUlEOmVyXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiR2VuZXJlcmFkZSAlZCBVVUlEOmVyOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uICVkXG4iCittc2dzdHIgIk9naWx0aWcgb3BlcmF0aW9uICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJGZWxha3RpZ3QgdGFsOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTMzIG1pc2MvdXVpZGQuYzo1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2FsbGluZyB1dWlkZCBkYWVtb24gKCVzKTogJXNcbiIKK21zZ3N0ciAiRmVsIHZpZCBhbnJvcCBhdiB1dWlkZC1kZW1vbmVuICglcyk6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICIlcyBhbmQgc3Vic2VxdWVudCAlZCBVVUlEc1xuIgorbXNnc3RyWzBdICIlcyBvY2ggZWZ0ZXJmw7ZsamFuZGUgVVVJRFxuIgorbXNnc3RyWzFdICIlcyBvY2ggZWZ0ZXJmw7ZsamFuZGUgJWQgVVVJRDplclxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJMaXN0YSDDtnZlciBVVUlEOmVyOlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgcmVwbHkgbGVuZ3RoIGZyb20gc2VydmVyICVkXG4iCittc2dzdHIgIk92w6RudGFkIHN2YXJzbMOkbmdkIGZyw6VuIHNlcnZlcm4gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBraWxsIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkOiAlc1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIGTDtmRhIHV1aWRkIHNvbSBrw7ZyIG1lZCBwaWQgJWQ6ICVzXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiS2lsbGVkIHV1aWRkIHJ1bm5pbmcgYXQgcGlkICVkXG4iCittc2dzdHIgIkTDtmRhZGUgdXVpZGQgc29tIGvDtnJkZSBtZWQgcGlkICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiQW52w6RuZG5pbmc6ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIyBPbXLDpWRlc2R1bXA6XG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdEFudGFsPSVsbHUsIFN0b3JsZWs9JWxsdSwgTWFya8O2cj0lbGx1LCBTb3J0ZXJhZD0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiQW52w6RuZG5pbmc6ICVzIFstZCBmZWxzw7ZrbmluZ2ZsYWdnb3JdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBlbmhldCBbbnlfc3Rvcmxla11cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIlV0w7ZrYXIgaW5vZHN0YWJlbGxlbiIKKworIzogcmVzaXplL21haW4uYzo2OAorbXNnaWQgIlJlbG9jYXRpbmcgYmxvY2tzIgorbXNnc3RyICJGbHl0dGFyIG9tIGJsb2NrIgorCisjOiByZXNpemUvbWFpbi5jOjcxCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIlPDtmtlciBpZ2Vub20gaW5vZHN0YWJlbGwiCisKKyM6IHJlc2l6ZS9tYWluLmM6NzQKK21zZ2lkICJVcGRhdGluZyBpbm9kZSByZWZlcmVuY2VzIgorbXNnc3RyICJVcHBkYXRlcmFyIGlub2RzcmVmZXJlbnNlciIKKworIzogcmVzaXplL21haW4uYzo3NworbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRmx5dHRhciBpbm9kc3RhYmVsbCIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiT2vDpG50IHBhc3M/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJCw7ZyamEgcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkXG4iCisiYXQgeW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkF0dCDDpG5kcmEgc3RvcmxlayBww6UgYmlnYWxsb2MtZmlsc3lzdGVtIGhhciBpbnRlIHRlc3RhdHMgZnVsbHQgdXQuXG4iCisiRm9ydHPDpHR0IHDDpSBlZ2VuIHJpc2shICBBbnbDpG5kIGRlbiB0dmluZ2FuZGUgZmxhZ2dhbiBvbSBkdSB2aWxsIGfDtnJhXG4iCisiZGV0IMOkbmTDpS5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAibsOkciAlcyDDtnBwbmFkZXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgIm7DpHIgc3RhdHVzaW5mb3JtYXRpb24gZsO2ciAlcyBow6RtdGFkZXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6MzM3IHJlc2l6ZS9tYWluLmM6NDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuIgorIlxuIgorbXNnc3RyICIiCisiS8O2ciBcImUyZnNjayAtZiAlc1wiIGbDtnJzdC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICJVcHBza2F0dGFkIG1pbnN0YSBzdG9ybGVrIHDDpSBmaWxzeXN0ZW1ldDogJWxsdVxuIgorCisjOiByZXNpemUvbWFpbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJPZ2lsdGlnIG55IHN0b3JsZWs6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkzCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIk55IHN0b3JsZWsgZsO2ciBzdG9yIGbDtnIgYXR0IHV0dHJ5Y2thcyBpIDMyIGJpdGFyXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJOeSBzdG9ybGVrIG1pbmRyZSDDpG4gbWluaW11bSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MDcKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIk9naWx0aWcgc3RyaWRlLWzDpG5nZCIKKworIzogcmVzaXplL21haW4uYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb250YWluaW5nIHBhcnRpdGlvbiAob3IgZGV2aWNlKSBpcyBvbmx5ICVsbHUgKCVkaykgYmxvY2tzLlxuIgorIllvdSByZXF1ZXN0ZWQgYSBuZXcgc2l6ZSBvZiAlbGx1IGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRlbiByeW1tYW5kZSBwYXJ0aXRpb25lbiAoZWxsZXIgZW5oZXRlbikgw6RyIGJhcmEgJWxsdSAoJWQgaykgYmxvY2suXG4iCisiRHUgYmVnw6RyZGUgZW4gbnkgc3RvcmxlayBww6UgJWxsdSBibG9jay5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmaWxlc3lzdGVtIGlzIGFscmVhZHkgJWxsdSBibG9ja3MgbG9uZy4gIE5vdGhpbmcgdG8gZG8hXG4iCisiXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCDDpHIgcmVkYW4gJWxsdSBibG9jayBsw6VuZ3QuICBJbmdldCBiZWjDtnZlciBnw7ZyYXMhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICLDhG5kcmFyIHN0b3JsZWsgcMOlIGZpbHN5c3RlbWV0IHDDpSAlcyB0aWxsICVsbHUgKCVkIGspIGJsb2NrLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICJ2aWQgZsO2cnPDtmsgYXR0IMOkbmRyYSBzdG9ybGVrIHDDpSAlcyIKKworIzogcmVzaXplL21haW4uYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKyJLw7ZyIFwiZTJmc2NrIC1meSAlc1wiIGbDtnIgYXR0IGxhZ2EgZmlsc3lzdGVtZXRcbiIKKyJlZnRlciBkZW4gYXZicnV0bmEgc3Rvcmxla3PDpG5kcmluZ2VuLlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJGaWxzeXN0ZW1ldCBww6UgJXMgw6RyIG51ICVsbHUgYmxvY2sgbMOlbmd0LlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gdHJ1bmNhdGUgJXMiCittc2dzdHIgInZpZCBmw7Zyc8O2ayBhdHQga29ydGEgYXYgJXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiRmlsc3lzdGVtIHDDpSAlcyDDpHIgbW9udGVyYXQgcMOlICVzLCBvbi1saW5lLXN0b3JsZWtzw6RuZHJpbmcga3LDpHZzXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo4MworbXNnaWQgIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkF0dCBrcnltcGEgdXBwa29wcGxhdCBzdMO2ZGpzIGludGUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMDgKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBzdMO2ZGplciBpbnRlIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjExNworbXNnaWQgIk5vdCBlbm91Z2ggcmVzZXJ2ZWQgZ2R0IGJsb2NrcyBmb3IgcmVzaXppbmciCittc2dzdHIgIkludGUgdGlsbHLDpGNrbGlndCBtZWQgcmVzZXJ2ZXJhZGUgZ2R0LWJsb2NrIGbDtnIgc3Rvcmxla3PDpG5kcmluZyIKKworIzogcmVzaXplL29ubGluZS5jOjEyNAorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiS8Okcm5hbiBzdMO2ZGplciBpbnRlIMOkbmRyaW5nIGF2IHN0b3JsZWsgcMOlIHPDpSBzdG9yYSBmaWxzeXN0ZW0iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAidmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgbW9udGVyaW5nc3B1bmt0ICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAiR2FtbWFsdCBncsOkbnNzbml0dCBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgYmVnw6RydC5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjE1NiByZXNpemUvb25saW5lLmM6MTczCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIlLDpHR0aWdoZXQgYXR0IMOkbmRyYSBzdG9ybGVrIHDDpSBmaWxzeXN0ZW0gbmVrYXMiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxNTkgcmVzaXplL29ubGluZS5jOjE3OQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIlZpZCBrb250cm9sbCBhdiBzdMO2ZCBmw7ZyIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjE3NgorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiS8Okcm5hbiBzdMO2ZGplciBpbnRlIHN0b3JsZWtzw6RuZHJpbmcgdXBwa29wcGxhdCIKKworIzogcmVzaXplL29ubGluZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJQZXJmb3JtaW5nIGFuIG9uLWxpbmUgcmVzaXplIG9mICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICJVdGbDtnIgZW4gc3Rvcmxla3PDpG5kcmluZyBvbi1saW5lIGF2ICVzIHRpbGwgJWxsdSAoJWQgaykgYmxvY2suXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMTkKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIgorbXNnc3RyICJWaWQgZsO2cnPDtmsgYXR0IHV0w7ZrYSBkZW4gc2lzdGEgZ3J1cHBlbiIKKworIzogcmVzaXplL29ubGluZS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiVmlkIGbDtnJzw7ZrIGF0dCDDtnBwbmEgZ3J1cHAgbnIuICVkIgorCisjOiByZXNpemUvb25saW5lLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbiIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgcMOlICVzIMOkciBtb250ZXJhdCBww6UgJXMsIG9jaCBzdG9ybGVrc8OkbmRyaW5nIG9uLWxpbmUgc3TDtmRzIGludGUgcMOlIGRldHRhIHN5c3RlbS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJpbm9kZXIgKCVsbHUpIG3DpXN0ZSB2YXJhIG1pbmRyZSDDpG4gJXUiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo2MzEKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgInJlc2VydmVyYWRlIGJsb2NrIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6ODc1Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAibWV0YWRhdGFibG9jayIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjE4MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIlNrdWxsZSBhbGRyaWcgaW50csOkZmZhOiBzdG9ybGVrc8OkbmRyaW5nc2lub2RlbiB0cmFzaWchXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi44IgorbXNnc3RyICJFWFQyRlMtYmlibGlvdGVrIHZlcnNpb24gMS40Mi44IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDJfZmlsc3lzIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgZXh0Ml9maWxzeXMtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGJhZGJsb2Nrc19saXN0LXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBiYWRibG9ja3NfaXRlcmF0ZS1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBpbm9kZV9zY2FuLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGlvX2NoYW5uZWwtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciB1bml4LWlvX2NoYW5uZWwtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgaW9fbWFuYWdlci1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGJsb2NrX2JpdG1hcC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGlub2RlX2JpdG1hcC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGbDtnIgZ2VuZXJpY19iaXRtYXAtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciB0ZXN0IGlvX2NoYW5uZWwtcG9zdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGthdGFsb2dlbmJsb2NrbGlzdGVwb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGljb3VudC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIFBvd2VyUXVlc3QtaW9fY2hhbm5lbC1wb3N0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGV4dDItZmlsc3RydWt0dXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIkZlbCBtYWdpc2t0IHRhbCBmw7ZyIGV4dDItYXZiaWxkc2h1dnVkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBpbm9kcy1pb19jaGFubmVsLXBvc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0NCBleHRlbnQgaGFuZGxlIgorbXNnc3RyICJGZWwgbWFnaXNrdCB0YWwgZsO2ciBleHQ0LXV0c3Ryw6Rja25pbmdzaGFuZHRhZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgdGFsIGkgc3VwZXJibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICJGaWxlc3lzdGVtdmVyc2lvbmVuIMOkciBmw7ZyIGjDtmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgc2tyaXZhIHRpbGwgZXR0IGZpbHN5c3RlbSDDtnBwbmF0IHNrcml2c2t5ZGRhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgZ3J1cHBiZXNrcml2YXJlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzQKK21zZ2lkICJDYW4ndCB3cml0ZSBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdydXBwYmVza3JpdmFyZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiVHJhc2lnIGdydXBwYmVza3JpdmFyZTogZmVsYWt0aWd0IGJsb2NrIGbDtnIgYmxvY2tiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiVHJhc2lnIGdydXBwYmVza3JpdmFyZTogZmVsYWt0aWd0IGJsb2NrIGbDtnIgaW5vZHNiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM3Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIHRhYmxlIgorbXNnc3RyICJUcmFzaWcgZ3J1cHBiZXNrcml2YXJlOiBkw6VsaWd0IGJsb2NrIGbDtnIgaW5vZHN0YWJlbGwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOAorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGVuIGlub2RzYml0a2FydGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBlbiBpbm9kc2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBibG9jayBiaXRtYXAiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBlbiBibG9ja2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDEKK21zZ2lkICJDYW4ndCByZWFkIGFuIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgZW4gYmxvY2tiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkthbiBpbnRlIHNrcml2YSBlbiBpbm9kc3RhYmVsbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgZW4gaW5vZHN0YWJlbGwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NAorbXNnaWQgIkNhbid0IHJlYWQgbmV4dCBpbm9kZSIKK21zZ3N0ciAiS2FuIGludGUgbMOkc2EgbsOkc3RhIGlub2QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiRmlsc3lzdGVtZXQgaGFyIG92w6RudGFkIGJsb2Nrc3Rvcmxlay4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiRVhUMi1rYXRhbG9nIHNrYWRhZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgbMOkc2EgYmxvY2sgZnLDpW4gZmlsc3lzdGVtZXQgcmVzdWx0ZXJhZGUgaSBlbiBrb3J0IGzDpHNuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIkbDtnJzw7ZrIGF0dCBza3JpdmEgYmxvY2sgdGlsbCBmaWxzeXN0ZW1ldCByZXN1bHRlcmFkZSBpIGVuIGtvcnQgc2tyaXZuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIkluZ2V0IGxlZGlndCB1dHJ5bW1lIGkga2F0YWxvZ2VuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiSW5vZHNiaXRrYXJ0YW4gaW50ZSBpbmzDpHN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiQmxvY2tiaXRrYXJ0YW4gaW50ZSBpbmzDpHN0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiT3RpbGzDpXRldCBpbm9kc251bW1lciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIk90aWxsw6V0ZXQgYmxvY2tudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICJJbnRlcm50IGZlbCBpIGV4dDJmc19leHBhbmRfZGlyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTUKK21zZ2lkICJOb3QgZW5vdWdoIHNwYWNlIHRvIGJ1aWxkIHByb3Bvc2VkIGZpbGVzeXN0ZW0iCittc2dzdHIgIkludGUgdGlsbHLDpGNrbGlndCBtZWQgdXRyeW1tZSBmw7ZyIGF0dCBieWdnYSBkZXQgZsO2cmVzbGFnbmEgZmlsc3lzdGVtZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NgorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgYmxvY2tudW1tZXIgc2tpY2thdCB0aWxsIGV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU3Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGJsb2NrbnVtbWVyIHNraWNrYXQgdGlsbCBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBibG9ja251bW1lciBza2lja2F0IHRpbGwgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGlub2RzbnVtbWVyIHNraWNrYXQgdGlsbCBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBpbm9kc251bW1lciBza2lja2F0IHRpbGwgZXh0MmZzX3VubWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgaW5vZHNudW1tZXIgc2tpY2thdCB0aWxsIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgZnVza2EgdGlsbCBzbHV0ZXQgYXYgYmxvY2tiaXRrYXJ0YW4gYm9ydG9tIGRldCByaWt0aWdhIHNsdXRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYzCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgaW5vZGUgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgZnVza2EgdGlsbCBzbHV0ZXQgYXYgaW5vZHNiaXRrYXJ0YW4gYm9ydG9tIGRldCByaWt0aWdhIHNsdXRldCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY0Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiT3RpbGzDpXRldCBpbmRpcmVrdGJsb2NrIGhpdHRhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY1Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk90aWxsw6V0ZXQgZHViYmVsdCBpbmRpcmVrdGJsb2NrIGhpdHRhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2Cittc2dpZCAiSWxsZWdhbCB0cmlwbHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIk90aWxsw6V0ZXQgdHJpcHBlbHQgaW5kaXJla3RibG9jayBoaXR0YXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworbXNnaWQgIkJsb2NrIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiQmxvY2tiaXRrYXJ0b3JuYSDDpHIgaW50ZSBkZXNhbW1hIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjgKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIklub2RzYml0a2FydG9ybmEgw6RyIGludGUgZGVzYW1tYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIk90aWxsw6V0ZXQgZWxsZXIgZmVsZm9ybWF0IGVuaGV0c25hbW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiRW4gYmxvY2tncnVwcCBzYWtuYXIgZW4gaW5vZHN0YWJlbGwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiRXh0Mi1zdXBlcmJsb2NrZXQgw6RyIHNrYWRhdCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJPdGlsbMOldGV0IGdlbmVyaXNrdCBiaXR0YWwgc2tpY2thdCB0aWxsIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzMKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiT3RpbGzDpXRldCBnZW5lcmlza3QgYml0dGFsIHNraWNrYXQgdGlsbCBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzQKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIk90aWxsw6V0ZXQgZ2VuZXJpc2t0IGJpdHRhbCBza2lja2F0IHRpbGwgZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiQWxsdGbDtnIgbcOlbmdhIHN5bWJvbGlza2EgbMOkbmthciBww6V0csOkZmZhZGUuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiw4V0ZXJhbnJvcHNmdW5rdGlvbmVuIGtvbW1lciBpbnRlIGF0dCBoYW50ZXJhIGRldHRhIGZhbGwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiSW5vZGVuIMOkciBmcsOlbiBldHQgZMOlbGlndCBibG9jayBpIGlub2RzdGFiZWxsZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIkZpbHN5c3RlbWV0IGhhciBmdW5rdGlvbmVyIHNvbSBpbnRlIHN0w7ZkanMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICJGaWxzeXN0ZW1ldCBoYXIgZW5kYXN0LWzDpHNiYXJ0LWZ1bmt0aW9uZXIgc29tIGludGUgc3TDtmRqcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICJJTy1rYW5hbGVuIG1pc3NseWNrYWRlcyBzw7ZrYSB2aWQgbMOkc25pbmcgZWxsZXIgc2tyaXZuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODEKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIk1pbm5lc2FsbG9rZXJpbmcgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkiCittc2dzdHIgIk9naWx0aWd0IGFyZ3VtZW50ZXQgc2tpY2thdCB0aWxsIGV4dDItYmlibGlvdGVrZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIkt1bmRlIGludGUgYWxsb2tlcmEgYmxvY2sgaSBleHQyLWZpbHN5c3RlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg0Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGlub2RlIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhbGxva2VyYSBpbm9kZXIgaSBleHQyLWZpbHN5c3RlbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIkV4dDItaW5vZCDDpHIgaW50ZSBlbiBrYXRhbG9nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODYKK21zZ2lkICJUb28gbWFueSByZWZlcmVuY2VzIGluIHRhYmxlIgorbXNnc3RyICJGw7ZyIG3DpW5nYSByZWZlcmVuc2VyIGkgdGFiZWxsZW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NworbXNnaWQgIkZpbGUgbm90IGZvdW5kIGJ5IGV4dDJfbG9va3VwIgorbXNnc3RyICJGaWxlbiBoaXR0YWRlcyBpbnRlIGF2IGV4dDJfbG9va3VwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJGaWxlbiDDtnBwbmFzIHNrcml2c2t5ZGRhZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg5Cittc2dpZCAiRXh0MiBkaXJlY3RvcnkgYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJFeHQyLWthdGFsb2dibG9jayBoaXR0YWRlcyBpbnRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiRXh0Mi1rYXRhbG9nZW4gZmlubnMgcmVkYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICJPaW1wbGVtZW50ZXJhZCBleHQyLWJpYmxpb3Rla3NmdW5rdGlvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkyCittc2dpZCAiVXNlciBjYW5jZWwgcmVxdWVzdGVkIgorbXNnc3RyICJBbnbDpG5kYXJhbm51bGxlcmluZyBiZWfDpHJkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiRXh0Mi1maWwgZsO2ciBzdG9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIkFuZ2l2ZW4gam91cm5hbGVuaGV0IMOkciBpbnRlIGVuIGJsb2NrZW5oZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIkpvdXJuYWxzdXBlcmJsb2NrIGludGUgZnVubmV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIkpvdXJuYWxlbiBtw6VzdGUgdmFyYSBtaW5zdCAxMDI0IGJsb2NrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTcKK21zZ2lkICJVbnN1cHBvcnRlZCBqb3VybmFsIHZlcnNpb24iCittc2dzdHIgIkVqIHN0w7ZkZCBqb3VybmFsdmVyc2lvbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IGVuIGV4dGVybiBqb3VybmFsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiSm91cm5hbGVuIGludGUgZnVubmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAwCittc2dpZCAiRGlyZWN0b3J5IGhhc2ggdW5zdXBwb3J0ZWQiCittc2dzdHIgIkthdGFsb2ctaGFzaCBzdMO2ZGpzIGludGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKK21zZ2lkICJJbGxlZ2FsIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBudW1iZXIiCittc2dzdHIgIk9naWx0aWd0IGJsb2NrbnVtbWVyIGbDtnIgdXTDtmthdCBhdHRyaWJ1dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICJLYW4gaW50ZSBza2FwYSBldHQgZmlsc3lzdGVtIG1lZCBiZWfDpHJ0IGFudGFsIGlub2RlciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMworbXNnaWQgIkUyaW1hZ2Ugc25hcHNob3Qgbm90IGluIHVzZSIKK21zZ3N0ciAiRTJpbWFnZS3DtmdvbmJsaWNrc2JpbGQgYW52w6RuZHMgaW50ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorbXNnaWQgIlRvbyBtYW55IHJlc2VydmVkIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIgorbXNnc3RyICJGw7ZyIG3DpW5nYSByZXNlcnZlcmFkZSBncnVwcGlkZW50aWZpZXJhcmJsb2NrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIlN0b3JsZWtzw6RuZHJpbmdzaW5vZGVuIMOkciB0cmFzaWciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIkbDtnJzw7ZrdGUgc8OkdHRhIGVuIGJsb2NrYml0a2FydGEgbWVkIHNha25hdCBpbmRpcmVrdGJsb2NrIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IEdpY2sgYnJhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICJUREI6IFRyYXNpZyBkYXRhYmFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA5Cittc2dpZCAiVERCOiBJTyBFcnJvciIKK21zZ3N0ciAiVERCOiBJL08tZmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IEzDpXNuaW5nc2ZlbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiVERCOiBTbHV0IHDDpSBtaW5uZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMgorbXNnaWQgIlREQjogUmVjb3JkIGV4aXN0cyIKK21zZ3N0ciAiVERCOiBQb3N0ZW4gZmlubnMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIlREQjogTMOlcyBmaW5ucyBww6UgYW5kcmEgbnlja2xhciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIlRCRDogT2dpbHRpZyBwYXJhbWV0ZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTUKK21zZ2lkICJUREI6IFJlY29yZCBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVERCOiBQb3N0ZW4gZmlubnMgaW50ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNgorbXNnaWQgIlREQjogV3JpdGUgbm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVERCOiBTa3Jpdm5pbmcgw6RyIGludGUgdGlsbMOldGVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE3Cittc2dpZCAiRXh0MmZzIGRpcmVjdG9yeSBibG9jayBsaXN0IGlzIGVtcHR5IgorbXNnc3RyICJFeHQyZnMta2F0YWxvZ2Jsb2NrbGlzdGFuIMOkciB0b20iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTgKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSBhIGJsb2NrIG1hcHBpbmcgdmlhIGEgcmVhZC1vbmx5IGJsb2NrIGl0ZXJhdG9yIgorbXNnc3RyICJGw7Zyc8O2ayBhdHQgw6RuZHJhIGVuIGJsb2NrbWFwcG5pbmcgdmlhIGVuIGVuZGFzdCBsw6RzYmFyIGJsb2NraXRlcmF0b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IHNhdmVkIHBhdGgiCittc2dzdHIgIkZlbCBtYWdpc2t0IG51bW1lciBmw7ZyIHNwYXJhZCBzw7ZrdsOkZyB0aWxsIGV4dDQtdXRzdHLDpGNrbmluZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJGZWwgbWFnaXNrdCBudW1tZXIgZsO2ciA2NC1iaXRhcnMgYWxsbcOkbiBiaXRrYXJ0YSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIGbDtnIgNjQtYml0YXJzIGJsb2NrYml0a2FydGEiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIkZlbCBtYWdpc2t0IG51bW1lciBmw7ZyIDY0LWJpdGFycyBpbm9kc2JpdGthcnRhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzEzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNCIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE2IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNyIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE3IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOCIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiRmVsIG1hZ2lza3QgbnVtbWVyIC0tLSBSRVNFUlZFUkFUXzE5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMwCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaGVhZGVyIgorbXNnc3RyICJUcmFzaWd0IHV0c3Ryw6Rja25pbmdzaHV2dWQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiVHJhc2lndCB1dHN0csOkY2tuaW5nc2luZGV4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMyCittc2dpZCAiQ29ycnVwdCBleHRlbnQiCittc2dzdHIgIlRyYXNpZyB1dHN0csOkY2tuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMzCittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiBleHRlbnQgbWFwIgorbXNnc3RyICJJbmdldCBmcml0dCB1dHJ5bW1lIGkgdXRzdHLDpGNrbmluZ3NrYXJ0YW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzQKK21zZ2lkICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKK21zZ3N0ciAiSW5vZGVyIGFudsOkbmRlciBpbnRlIHV0c3Ryw6Rja25pbmdhciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIkluZ2VuIFwibsOkc3RhXCIgdXRzdHLDpGNrbmluZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICJJbmdlbiBcImbDtnJlZ8OlZW5kZVwiIHV0c3Ryw6Rja25pbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiSW5nZW4gXCJ1cHBcIi11dHN0csOkY2tuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiSW5nZW4gXCJuZXJcIi11dHN0csOkY2tuaW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICJJbmdlbiBha3R1ZWxsIG5vZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRXh0MmZzLW9wZXJhdGlvbmVuIHN0w7ZkanMgaW50ZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJJbmdlbiBwbGF0cyBhdHQgbMOkZ2dhIGluIGVuIHV0c3Ryw6Rja25pbmcgaSBub2RlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiVXBwZGVsbmluZyBza3VsbGUgcmVzdWx0ZXJhIGkgZW4gdG9tIG5vZCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworbXNnaWQgIkV4dGVudCBub3QgZm91bmQiCittc2dzdHIgIlV0c3LDpGNrbmluZ2VuIGludGUgZnVubmVuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIk9wZXJhdGlvbnNuIHN0w7ZkanMgaW50ZSBmw7ZyIGlub2RlciBzb20gaW5uZWjDpWxsZXIgdXRzdHLDpGNrbmluZ2FyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ1Cittc2dpZCAiRXh0ZW50IGxlbmd0aCBpcyBpbnZhbGlkIgorbXNnc3RyICJVdHN0csOkY2tuaW5nc2zDpG5nZGVuIMOkciBmZWxha3RpZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkkvTy1rYW5hbGVyIHN0w7ZkamVyIGludGUgNjQtYml0YXJzIGJsb2NrbnVtbWVyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiS2FuIGludGUga29udHJvbGxlcmEgb20gZmlsc3lzdGVtIMOkciBtb250ZXJhZGUgZsO2ciBhdHQgYXR0IG10YWItZmlsZW4gc2FrbmFzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICJGaWxzeXN0ZW1lbiDDpHIgZsO2ciBzdG9yYSBmw7ZyIGF0dCBhbnbDpG5kYSBnYW1tYWxkYWdzIGJpdGthcnRvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OQorbXNnaWQgIk1NUDogaW52YWxpZCBtYWdpYyBudW1iZXIiCittc2dzdHIgIk1NUDogb2dpbHRpZ3QgbWFnaXNrdCBudW1tZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICJNTVA6IGVuaGV0ZW4gw6RyIGbDtnIgbsOkcnZhcmFuZGUgYWt0aXYiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sga8O2cnMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiTU1QOiBibG9ja251bW1lciB1dGFuZsO2ciBmaWxzeXN0ZW1ldHMgcsOkY2t2aWRkIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICJNTVA6IHV0ZsO2ciBlbiBva8OkbmQgb3BlcmF0aW9uIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0Cittc2dpZCAiTU1QOiBmaWxlc3lzdGVtIHN0aWxsIGluIHVzZSIKK21zZ3N0ciAiTU1QOiBmaWxzeXN0ZW1ldCBhbnbDpG5kcyBmb3J0ZmFyYW5kZSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiDDtnBwbmluZyBtZWQgT19ESVJFQ1QgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiU3RvcmxlayBww6UgYmxvY2tncnVwcGJlc2tyaXZhcmUgZmVsYWt0aWciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTcKK21zZ2lkICJJbm9kZSBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBpbm9kZSIKK21zZ3N0ciAiSW5vZGVucyBrb250cm9sbHN1bW1hIHN0w6RtbWVyIGludGUgbWVkIGlub2RlbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIktvbnRyb2xsc3VtbWFuIGbDtnIgaW5vZHNiaXRrYXJ0YW4gc3TDpG1tZXIgaW50ZSBtZWQgYml0a2FydGFuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiVXTDtmtuaW5nZW5zIGJsb2Nra29udHJvbGxzdW1tYSBzdMOkbW1lciBpbnRlIHV0w7ZrbmluZ3NibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJLYXRhbG9nYmxvY2tldCBoYXIgaW50ZSBwbGF0cyBmw7ZyIGtvbnRyb2xsc3VtbWFuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiS2F0YWxvZ2Jsb2Nrc3VtbWFuIHN0w6RtbWVyIGludGUgbWVkIGthdGFsb2dibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICJLb250cm9sbHN1bW1hbiBmw7ZyIGJsb2NrZXQgZsO2ciB1dMO2a2FkZSBhdHRyaWJ1dCBzdMOkbW1lciBpbnRlIG1lZCBibG9ja2V0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJLb250cm9sbHN1bW1hbiBmw7ZyIHN1cGVyYmxvY2tldCBzdMOkbW1lciBpbnRlIG1lZCBzdXBlcmJsb2NrZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiT2vDpG5kIGtvbnRyb2xsc3VtbWVhbGdvcml0bSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NQorbXNnaWQgIk1NUCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBNTVAgYmxvY2siCittc2dzdHIgIktvbnRyb2xsc3VtbWFuIGbDtnIgTU1QLWJsb2NrZXQgc3TDpG1tZXIgaW50ZSBtZWQgTU1QLWJsb2NrZXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjYKK21zZ2lkICJFeHQyIGZpbGUgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkV4dDItZmlsZW4gZmlubnMgcmVkYW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsIHZlcnNpb24gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIkZlbGFrdGlndCBtYWdpc2t0IHbDpHJkZSBpIHByb2ZpbGVfbm9kZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gbm90IGZvdW5kIgorbXNnc3RyICJQcm9maWxzZWt0aW9uZW4gaW50ZSBmdW5uZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE0Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIlByb2ZpbHJlbGF0aW9uZW4gaW50ZSBmdW5uZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIkbDtnJzw7ZrIGF0dCBsw6RnZ2EgdGlsbCBlbiByZWxhdGlvbiB0aWxsIGVuIG5vZCBzb20gaW50ZSDDpHIgZW4gc2VrdGlvbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIkV0dCBodXZ1ZCB0aWxsIGVuIHByb2ZpbHNla3Rpb24gaGFyIGV0dCB2w6RyZGUgc2tpbHQgZnLDpW4gbm9sbCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJGZWxha3RpZyBsw6Rua2FkIGxpc3RhIGkgcHJvZmlsc3RydWt0dXJlciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTgKK21zZ2lkICJCYWQgZ3JvdXAgbGV2ZWwgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJGZWxha3RpZyBncnVwcG5pdsOlIGkgcHJvZmlsc3RydWt0dXJlciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICJGZWxha3RpZyBmw7Zyw6RsZHJhcGVrYXJlIGkgcHJvZmlsc3RydWt0dXJlciIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiRmVsYWt0aWd0IG1hZ2lza3QgdsOkcmRlIGkgcHJvZmlsaXRlcmF0b3IiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiS2FuIGludGUgc8OkdHRhIHbDpHJkZSBww6Ugc2VrdGlvbnNub2QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICJPZ2lsdGlndCBhcmd1bWVudCBza2lja2F0IHRpbGwgcHJvZmlsYmlibGlvdGVrZXQiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIkbDtnJzw7ZrIGF0dCDDpG5kcmEgZW4gZW5kYXN0IGzDpHNiYXIgcHJvZmlsIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiSHV2dWRldCB0aWxsIHByb2ZpbHNla3Rpb25lbiDDpHIgaW50ZSBww6UgdG9wcG5pdsOlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiU3ludGF4ZmVsIGkgaHV2dWRldCB0aWxsIHByb2ZpbHNla3Rpb25lbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiU3ludGF4ZmVsIGkgZW4gcHJvZmlscmVsYXRpb24iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICJFeHRyYSBhdnNsdXRhbmRlIGtsYW1tZXIgaSBwcm9maWxlbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiSW5sZWRhbmRlIGtsYW1tZXIgc2FrbmFzIGkgcHJvZmlsZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiRmVsYWt0aWd0IG1hZ2lza3QgdsOkcmRlIGkgcHJvZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3NlY3Rpb25fdCIKK21zZ3N0ciAiRmVsYWt0aWd0IG1hZ2lza3QgdsOkcmRlIGkgcHJvZmlsZV9zZWN0aW9uX3QiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIkl0ZXJhdGlvbiDDtnZlciBhbGxhIHRvcHBuaXbDpXNla3Rpb25lciBzdMO2ZGpzIGludGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMyCittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICJPZ2lsdGlndCBwcm9maWxlX3NlY3Rpb24tb2JqZWt0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMworbXNnaWQgIk5vIG1vcmUgc2VjdGlvbnMiCittc2dzdHIgIkluZ2EgZmxlciBzZWt0aW9uZXIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM0Cittc2dpZCAiQmFkIG5hbWVzZXQgcGFzc2VkIHRvIHF1ZXJ5IHJvdXRpbmUiCittc2dzdHIgIkZlbGFrdGlnIG5hbW5tw6RuZ2Qgc2tpY2thZCB0aWxsIGZyw6VnZXJ1dGluZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIkluZ2VuIHByb2ZpbGZpbCDDtnBwZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM2Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV90IgorbXNnc3RyICJGZWxha3RpZ3QgbWFnaXNrdCB2w6RyZGUgaSBwcm9maWxlX2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgcHJvZmlsZmlsZW4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM4Cittc2dpZCAiU2VjdGlvbiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiU2VrdGlvbmVuIGZpbm5zIHJlZGFuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOQorbXNnaWQgIkludmFsaWQgYm9vbGVhbiB2YWx1ZSIKK21zZ3N0ciAiT2dpbHRpZ3QgYm9vbGVza3QgdsOkcmRlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzo0MAorbXNnaWQgIkludmFsaWQgaW50ZWdlciB2YWx1ZSIKK21zZ3N0ciAiT2dpbHRpZ3QgaGVsdGFsc3bDpHJkZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiRmVsYWt0aWd0IG1hZ2lza3QgdsOkcmRlIGkgcHJvZmlsZV9maWxlX2RhdGFfdCIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby90ci5nbW8gYi9lMmZzcHJvZ3MvcG8vdHIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjJkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vdHIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9wby90ci5wbyBiL2UyZnNwcm9ncy9wby90ci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThhMGNjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL3RyLnBvCkBAIC0wLDAgKzEsNzE1OCBAQAorIyBUdXJraXNoIHRyYW5zbGF0aW9ucyBmb3IgZTJmc3Byb2dzIG1lc3NhZ2VzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBlMmZzcHJvZ3MgcGFja2FnZS4KKyMKKyMgTmlsZ8O8biBCZWxtYSBCdWfDvG5lciA8bmlsZ3VuQGJ1Z3VuZXIubmFtZS50cj4sIDIwMDEsLi4uLCAyMDA3LgorIyBWb2xrYW4gR2V6ZXIgPHZsa25nenJAZ21haWwuY29tPiwgMjAxMy4KKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJPGJsa2NvdW50PgkJaW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzIDEuNDIuOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMy0wNi0xNiAwODoxNy0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0xMS0wMSAyMjo0OSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBWb2xrYW4gR2V6ZXIgPHZsa25nenJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdHJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoyMyBtaXNjL21rZTJmcy5jOjE4MAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2sgJXUgb3V0IG9mIHJhbmdlOyBpZ25vcmVkLlxuIgorbXNnc3RyICJIYXRhbMSxIGJsb2sgJXUga2Fwc2FtZMSxxZ/EsTsgeW9rc2F5xLFsZMSxLlxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NDYKK21zZ2lkICJ3aGlsZSBzYW5pdHkgY2hlY2tpbmcgdGhlIGJhZCBibG9ja3MgaW5vZGUiCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7xuZGUgZG/En3J1bHVrIGRlbmV0bGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6NTgKK21zZ2lkICJ3aGlsZSByZWFkaW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svaXNjYW4uYzoxMTAgZTJmc2NrL3NjYW50ZXN0LmM6MTA3CisjOiBlMmZzY2svdW5peC5jOjEzMzIgZTJmc2NrL3VuaXguYzoxNDIwIG1pc2MvYmFkYmxvY2tzLmM6MTIxNAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjIyIG1pc2MvYmFkYmxvY2tzLmM6MTIzNiBtaXNjL2JhZGJsb2Nrcy5jOjEyNDgKKyM6IG1pc2MvZHVtcGUyZnMuYzo1ODggbWlzYy9lMmltYWdlLmM6MTE5NiBtaXNjL2UyaW1hZ2UuYzoxMzI0CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzM3IG1pc2MvbWtlMmZzLmM6MTk2IG1pc2MvdHVuZTJmcy5jOjE5MDcgcmVzaXplL21haW4uYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgIi0gJXMgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAiLSAnJXMnIHZlcmkgeW9sdSBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjk0IG1pc2MvbWtlMmZzLmM6MjAzCittc2dpZCAid2hpbGUgcmVhZGluZyBpbiBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBmaWxlIgorbXNnc3RyICItIGRvc3lhZGFuIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpbmluIG9rdW5tYXPEsSBzxLFyYXPEsW5kYSBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzoxMDUKK21zZ2lkICJ3aGlsZSB1cGRhdGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7wgZ8O8bmNlbGxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIlV5YXLEsTogSGF0YWzEsSBibG9rIGTDvMSfw7xtw7xuZGUgJXUuIGJsb2sga3VyYWxkxLHFn8SxOyB0ZW1pemxlbmRpLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpIHdoaWxlICVzLiAgIgorbXNnc3RyICIlMyRzIGnFn2xlbWkgc8SxcmFzxLFuZGEgYmxvayAlMSRsdSBva3VudXJrZW4gaGF0YSBvbHXFn3R1ICglMiRzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiYmxvayAlbHUgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSAoJXMpLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIkhhdGEgZ8O2cm1lemRlbiBnZWxpbmRpIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MgorbXNnaWQgIkZvcmNlIHJld3JpdGUiCittc2dzdHIgIlllbmlkZW4geWF6IgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiJTMkcyBpxZ9sZW1pIHPEsXJhc8SxbmRhIGJsb2sgJTEkbHUgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSAoJTIkcykuICAiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICIlbHUgYmxvxJ91IHlhesSxbMSxcmtlbiBoYXRhOiAlcy4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgImJvxZ8gZGl6aW4gYmxva2xhcsSxIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo2MgorbXNnaWQgImVtcHR5IGRpciBtYXAiCittc2dzdHIgImJvxZ8gZGl6aW4gZcWfbGVtaSIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW1wdHkgZGlyZWN0b3J5IGJsb2NrICV1ICgjJWQpIGluIGlub2RlICV1XG4iCittc2dzdHIgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyBkb3N5YV9pc21pIGJsb2tfc2F5xLFzxLEgYmxva19ib3l1XG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIkJsb2sgc2F5xLFzxLEga3VyYWxkxLHFn8SxIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICJCbG9rIHRhbXBvbnUgYXlyxLFsYW1hZMSxIChib3l1PSVkKVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIGRpc2tcbiIKK21zZ3N0ciAiS3VsbGFuxLFtxLE6ICVzIGRpc2tcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJMS0ZMU0JVRiBpb2N0bCBub3Qgc3VwcG9ydGVkISAgQ2FuJ3QgZmx1c2ggYnVmZmVycy5cbiIKK21zZ3N0ciAiQkxLRkxTQlVGIGlvY3RsIGRlc3Rla2xlbm1peW9yISAgVGFtcG9ubGFyIGJvxZ9hbHTEsWxhbWFkxLEuXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLUZdIFstSSBpbm9kZV9idWZmZXJfYmxvY2tzXSBkZXZpY2VcbiIKK21zZ3N0ciAiS3VsbGFuxLFtxLE6ICVzIFstRl0gWy1JIGTDvMSfw7xtX3RhbXBvbl9ibG9rbGFyxLFdIGF5Z8SxdFxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAiJXMgdGVtaXpsaWsgacOnaW4gYcOnxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL2lzY2FuLmM6ODYgZTJmc2NrL3VuaXguYzo5NjcgcmVzaXplL21haW4uYzoyODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGZsdXNoICVzIgorbXNnc3RyICIlcyBib8WfYWx0xLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA5MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdGFyYW1hc8SxIGJhxZ9sYXTEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMjcgbWlzYy9lMmltYWdlLmM6MTEwOQorbXNnaWQgIndoaWxlIGdldHRpbmcgbmV4dCBpbm9kZSIKK21zZ3N0ciAic29ucmFraSBkw7zEn8O8bWUgZ2XDp2lsaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svaXNjYW4uYzoxMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHNjYW5uZWQuXG4iCittc2dzdHIgIiV1IGTDvMSfw7xtIHRhcmFuZMSxLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUyMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgImfDvG5sw7xrIGRvc3lhc8SxIHN1cGVyIGJsb8SfdSBva3VudXlvclxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiBnZcOnZXJsaSBnw7xtbMO8ayBkb3N5YXPEsSBzdXBlciBibG/En3UgeW9rXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogZ8O8bWzDvGsgZG9zeWFzxLEgw6dvayBrxLFzYVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiBnw7xubMO8ayBkb3N5YXPEsW5hIGfDtnJlIGt1cnRhcsSxbMSxeW9yXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczogc2FsdC1va3VudXIgZHVydW1kYXlrZW4gZ8O8bmzDvGsgZG9zeWFzxLFuYSBnw7ZyZSBrdXJ0YXJtYSB5YXDEsWxhbWF6XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6OTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICIlcyB5ZW5pZGVuIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImFlayDDtnplbGxpayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTQKK21zZ2lkICJBZXJyb3IgYWxsb2NhdGluZyIKK21zZ3N0ciAiQWF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJiYmxvayIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTYKK21zZ2lkICJCYml0bWFwIgorbXNnc3RyICJCYml0ZcWfbGVtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNworbXNnaWQgImNjb21wcmVzcyIKK21zZ3N0ciAiY3PEsWvEscWfdMSxcm1hIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJDYmF6xLEgZG9zeWEgc2lzdGVtaSBibG9rbGFyxLEgaWxlIMOnZWxpxZ9peW9yIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOQorbXNnaWQgImlpbm9kZSIKK21zZ3N0ciAiaWTDvMSfw7xtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJa3VyYWxkxLHFn8SxIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMQorbXNnaWQgImpqb3VybmFsIgorbXNnc3RyICJqZ8O8bmzDvGsiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkRzaWxpbmVuIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImRkaXppbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImVnaXJkaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBFIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmZG9zeWEgc2lzdGVtaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkYlaSAoJVEpIGTDvMSfw7xtw7wgacOnaW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnZ3J1cCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjkKK21zZ2lkICJoSFRSRUUgQGQgQGkiCittc2dzdHIgImhIVFJFRSBkaXppbiBkw7zEn8O8bSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzAKK21zZ2lkICJsbG9zdCtmb3VuZCIKK21zZ3N0ciAibGxvc3QrZm91bmQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMxCittc2dpZCAiTGlzIGEgbGluayIKK21zZ3N0ciAiTGJpciBiYcSfZMSxciIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzIKK21zZ2lkICJtbXVsdGlwbHktY2xhaW1lZCIKK21zZ3N0ciAibcOnb2sgZMO8xJ/DvG1sw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5nZcOnZXJzaXoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICJvYXJ0xLFrIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzNQorbXNnaWQgInBwcm9ibGVtIGluIgorbXNnc3RyICJwc29ydW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM2Cittc2dpZCAicXF1b3RhIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM3Cittc2dpZCAicnJvb3QgQGkiCittc2dzdHIgInJrw7ZrIGTDvMSfw7xtw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM4Cittc2dpZCAic3Nob3VsZCBiZSIKK21zZ3N0ciAic29sbWFsxLF5ZMSxIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOQorbXNnaWQgIlNzdXBlckBiIgorbXNnc3RyICJTc8O8cGVyIGJsb2siCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInViYcSfbGFudMSxc8SxeiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDEKK21zZ2lkICJ2ZGV2aWNlIgorbXNnc3RyICJ2YXlnxLF0IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MgorbXNnaWQgInhleHRlbnQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDMKK21zZ2lkICJ6emVyby1sZW5ndGgiCittc2dzdHIgInpzxLFmxLFyIHV6dW5sdWtsdSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTQKK21zZ2lkICI8VGhlIE5VTEwgaW5vZGU+IgorbXNnc3RyICI8TlVMTCBkw7zEn8O8bT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU1Cittc2dpZCAiPFRoZSBiYWQgYmxvY2tzIGlub2RlPiIKK21zZ3N0ciAiPEhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTcKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPGfDvG5sw7xrIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OAorIywgZnV6enkKK21zZ2lkICI8VGhlIGdyb3VwIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjzDlm55w7xrbGV5aWNpIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPEt1cnRhcsSxbGFuIGRpemluaW4gZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPEdydXAgdGFuxLFtbGF5xLFjxLEgZMO8xJ/DvG3DvD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYyCittc2dpZCAiPFRoZSBqb3VybmFsIGlub2RlPiIKK21zZ3N0ciAiPGfDvG5sw7xrIGTDvMSfw7xtw7w+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MworbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSA5PiIKK21zZ3N0ciAiPFllZGVrIGTDvMSfw7xtIDk+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2NAorbXNnaWQgIjxSZXNlcnZlZCBpbm9kZSAxMD4iCittc2dzdHIgIjxZZWRlayBkw7zEn8O8bSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJvbGHEn2FuIGRvc3lhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNQorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAiZGl6aW4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM3Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAia2FyYWt0ZXIgYXlnxLF0xLEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM5Cittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJheWfEsXTEsSBlbmdlbGxlIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgImlzaW1saSB2ZXJpIHlvbHUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQzCittc2dpZCAic3ltYm9saWMgbGluayIKK21zZ3N0ciAic2VtYm9saWsgYmHEnyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDUgbWlzYy91dWlkZC5jOjE2MQorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAieXV2YSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAiMCVvIGtpcGluZGUgYmlsaW5tZXllbiBkb3N5YSB0w7xyw7wiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIyCisjLCBmdXp6eQorbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJrdWxsYW7EsW1kYWtpIGJsb2sgZcWfbGVtaSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjQKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKKyMsIGZ1enp5Cittc2dpZCAidHJpcGxlIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICIldSBkw7zEn8O8bcO8bsO8biBkb2xheWzEsSBibG9rbGFyxLEgb2t1bnV5b3IiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4CisjLCBmdXp6eQorbXNnaWQgInRyYW5zbGF0b3IgYmxvY2siCittc2dzdHIgIm1ldGEtdmVyaSBibG9rbGFyxLEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMwCisjLCBmdXp6eQorbXNnaWQgImJsb2NrICMiCittc2dzdHIgImJibG9rIgorCisjOiBlMmZzY2svcGFzczFiLmM6MjIyCittc2dpZCAibXVsdGlwbHkgY2xhaW1lZCBpbm9kZSBtYXAiCittc2dzdHIgInRla3JhcmxhbmFuIGJsb2tsYXLEsW4gZMO8xJ/DvG0gZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYxMCBlMmZzY2svcGFzczFiLmM6NzMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY2FuJ3QgZmluZCBkdXBfYmxrIGZvciAlbGx1XG4iCittc2dzdHIgImnDpyBoYXRhOyAldSBpw6dpbiBkdXBfYmxrIGJ1bHVuYW3EsXlvclxuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIxCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICJjbG9uZV9maWxlX2Jsb2NrIGnFn2xldmluZGVuIGTDtm5kw7xyw7xsZMO8IgorCisjOiBlMmZzY2svcGFzczFiLmM6ODQzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAiacOnIGhhdGE7ICV1IGnDp2luIGR1cF9ibGsgYnVsdW5hbcSxeW9yXG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICLEsMOnIGhhdGE6ICV1IGnDp2luIGRpemluIGJpbGdpbGVyaSBidWx1bmFtxLF5b3IuIgorCisjOiBlMmZzY2svcGFzczEuYzo0NzUgZTJmc2NrL3Bhc3MyLmM6NzgyCittc2dpZCAicmVhZGluZyBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgImJsb2sgZGl6aW5pIG9rdW51eW9yIgorCisjOiBlMmZzY2svcGFzczEuYzo1OTgKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICJrdWxsYW7EsW1kYWtpIGTDvMSfw7xtIGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYwOQorbXNnaWQgImRpcmVjdG9yeSBpbm9kZSBtYXAiCittc2dzdHIgImRpemluIGTDvMSfw7xtw7wgZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjE5Cittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAibm9ybWFsIGRvc3lhIGTDvMSfw7xtw7wgZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjI4Cittc2dpZCAiaW4tdXNlIGJsb2NrIG1hcCIKK21zZ3N0ciAia3VsbGFuxLFtZGFraSBibG9rIGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjY5NQorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdGFyYW1hIGHDp8SxbMSxeW9yIgorCisjOiBlMmZzY2svcGFzczEuYzo3MjkKK21zZ2lkICJnZXR0aW5nIG5leHQgaW5vZGUgZnJvbSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyMzkKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIjEuIGdlw6dpxZ8iCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgIiV1IGTDvMSfw7xtw7xuw7xuIGRvbGF5bMSxIGJsb2tsYXLEsSBva3VudXlvciIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM0NgorbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgImhhdGFsxLEgZMO8xJ/DvG0gZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM2OQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgImhhdGFsxLEgYmxvayBlxZ9sZW1pbmRla2kgZMO8xJ/DvG0iCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzODkKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICJpbWFnaWMgZMO8xJ/DvG0gZcWfbGVtaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTQxNgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgYmxvY2sgbWFwIgorbXNnc3RyICJ0ZWtyYXJsYW5hbiBibG9rbGFyxLFuIGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgImVrIMO2emVsbGlrIGJsb8SfdSBlxZ9sZW1pIgorCisjOiBlMmZzY2svcGFzczEuYzoyMjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2bHUoJWMpOiBleHBlY3RpbmcgJTZsdSBnb3QgcGh5cyAlNmx1IChibGtjbnQgJWxsZClcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjYwCittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJibG9rIGJpdGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NjYKK21zZ2lkICJpbm9kZSBiaXRtYXAiCittc2dzdHIgImTDvMSfw7xtIGJpdGXFn2xlbWkiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2NzIKK21zZ2lkICJpbm9kZSB0YWJsZSIKK21zZ3N0ciAiZMO8xJ/DvG0gdGFibG9zdSIKKworIzogZTJmc2NrL3Bhc3MyLmM6MjgzCittc2dpZCAiUGFzcyAyIgorbXNnc3RyICIyLiBnZcOnacWfIgorCisjOiBlMmZzY2svcGFzczIuYzo4MDUKK21zZ2lkICJDYW4gbm90IGNvbnRpbnVlLiIKK21zZ3N0ciAiRGV2YW0gZWRpbGVtaXlvci4iCisKKyM6IGUyZnNjay9wYXNzMy5jOjc3Cittc2dpZCAiaW5vZGUgZG9uZSBiaXRtYXAiCittc2dzdHIgImTDvMSfw7xtbGVyaSBpbmRla3NsaSBiaXRlxZ9sZW0iCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIkRvcnVrIGJlbGxlayIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICIzLiBnZcOnacWfIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgImTDvMSfw7xtIGTDtm5nw7xzw7wgc2FwdGFtYSBiaXRlxZ9sZW1pIgorCisjOiBlMmZzY2svcGFzczQuYzoxOTYKK21zZ2lkICJQYXNzIDQiCittc2dzdHIgIjQuIGdlw6dpxZ8iCisKKyM6IGUyZnNjay9wYXNzNS5jOjc0Cittc2dpZCAiUGFzcyA1IgorbXNnc3RyICI1LiBnZcOnacWfIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUxCittc2dpZCAiKG5vIHByb21wdCkiCittc2dzdHIgIihrb211dCBpc3RlbWkgeW9rKSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MgorbXNnaWQgIkZpeCIKK21zZ3N0ciAiRMO8emVsdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICJUZW1pemxlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0Cittc2dpZCAiUmVsb2NhdGUiCittc2dzdHIgIktvbnVtbGFuZMSxciIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NQorbXNnaWQgIkFsbG9jYXRlIgorbXNnc3RyICJUYWhzaXMgZXQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTYKK21zZ2lkICJFeHBhbmQiCittc2dzdHIgIkdlbmnFn2xldCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIi9sb3N0K2ZvdW5kIGEgYmHEn2xhbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiT2x1xZ90dXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJLdXJ0YXLEsWxhY2FrbGFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwCittc2dpZCAiVHJ1bmNhdGUiCittc2dzdHIgIkvEsXJwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIkTDvMSfw7xtw7wgdGVtaXpsZSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MgorbXNnaWQgIkFib3J0IgorbXNnc3RyICJWYXpnZcOnIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzCittc2dpZCAiU3BsaXQiCittc2dzdHIgIkF5xLFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkRldmFtIGV0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIsOHb2sgZMO8xJ/DvG1sw7wgYmxva2xhcsSxIGtvcHlhbGFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2Cittc2dpZCAiRGVsZXRlIGZpbGUiCittc2dzdHIgIkRvc3lhecSxIFNpbCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NworbXNnaWQgIlN1cHByZXNzIG1lc3NhZ2VzIgorbXNnc3RyICLEsGxldGlsZXJpIGVuZ2VsbGUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjgKK21zZ2lkICJVbmxpbmsiCittc2dzdHIgIkJhxJ/EsSBrYWxkxLFyIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIkhUcmVlIGluZGVrc2luaSB0ZW1pemxlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwCittc2dpZCAiUmVjcmVhdGUiCittc2dzdHIgIlllbmlkZW4gb2x1xZ90dXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkKK21zZ2lkICIoTk9ORSkiCittc2dzdHIgIihIxLDDh0LEsFLEsCkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAiRMOcWkVMVMSwTETEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MQorbXNnaWQgIkNMRUFSRUQiCittc2dzdHIgIlRFTcSwWkxFTkTEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MgorbXNnaWQgIlJFTE9DQVRFRCIKK21zZ3N0ciAiS09OVU1MQU5ESSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAiVEFIU8SwUyBFRMSwTETEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICJHRU7EsMWeTEVUxLBMRMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIlRFS1JBUiBCQcSeTEFOREkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICJPTFXFnlRVUlVMRFUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAiS1VSVEFSSUxBQsSwTMSwUkxFUiBMxLBTVEVMRU5ExLAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIktJUlBJTERJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiRMOcxJ7DnE0gVEVNxLBaTEVORMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAiVkFaR0XDh8SwTETEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5MQorbXNnaWQgIlNQTElUIgorbXNnc3RyICJBWVJJTERJIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAiU8OcUsOcWU9SIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICLDh09LIETDnMSew5xNTMOcIEJMT0tMQVIgS09QWUFMQU5ESSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiRE9TWUEgU8SwTMSwTkTEsCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NQorbXNnaWQgIlNVUFBSRVNTRUQiCittc2dzdHIgIkVOR0VMTEVORMSwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIkJBxJ4gS0FMRElSSUxESSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIkhUUkVFIMSwTkRFS1PEsCBURU3EsFpMRU5ExLAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTgKK21zZ2lkICJXSUxMIFJFQ1JFQVRFIgorbXNnc3RyICJURUtSQVIgT0xVxZ5UVVJVTEFDQUsiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIiVnIGdydWJ1bnVuIGJsb2sgYml0ZcWfbGVtaSBncnVwIGnDp2luZGUgZGXEn2lsLiAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGZvciBncm91cCAlZyBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTExCittc2dpZCAiQGkgQEIgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKK21zZ3N0ciAiJWcgZ3J1YnVudW4gZMO8xJ/DvG0gYml0ZcWfbGVtaSBncnVwIGnDp2luZGUgZGXEn2lsLiAoYmxvayAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiJWcgZ3J1YnVudW4gZMO8xJ/DvG0gdGFibG9zdSBncnVwIGnDp2luZGUgZGXEn2lsLiAoYmxvayAlYilcbiIKKyJVWUFSSTogQ8SwRETEsCBWRVLEsCBLQVlCSSBPTEFTSUxJxJ5JLlxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgJVMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTw7xwZXIgYmxvayBva3VuYW3EsXlvciB5YSBkYSBkb8SfcnUgZXh0MiBkb3N5YSBzaXN0ZW1pIHRhbsSxbWxhbcSxeW9yLlxuIgorIkF5Z8SxdCBnZcOnZXJsaXlzZSB2ZSBnZXLDp2VrdGVuIGJpciBleHQyIGRvc3lhIHNpc3RlbWkgacOnZXJpeW9yc2EsXG4iCisiKHZlIGJpciB0YWthcyBiw7Zsw7xtw7wgdmV5YSB1ZnMgeWEgZGEgaGVyIG5leXNlIGRlxJ9pbHNlKVxuIgorInPDvHBlciBibG9rIGJvenVsbXXFnyBkZW1la3Rpci4gQmHFn2thIGJpciBzw7xwZXIgYmxvayBpbGUgZTJmc2NrIMOnYWzEscWfdMSxcm1hecSxXG4iCisiZGVuZW1lbGlzaW5pejpcbiIKKyIgICAgICBlMmZzY2sgLWIgJVMgPGF5Z8SxdD5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSB1enVubHXEn3UgKHPDvHBlcmJsb2sgaWxlIGlsacWfa2lsaSkgJWIgYmxvayxcbiIKKyJheWfEsXTEsW4gZ2Vyw6dlayBib3l1dHUgaXNlICVjIGJsb2t0dXIuXG4iCisiSGVtIHPDvHBlciBibG9rIGhlbSBkZSBkaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3UgYm96dWsgb2xhYmlsaXIhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIlPDvHBlcmJsb2sgYmxva191enVubHXEn3UgPSAlYiwgYWTEsW1sYW1hX3V6dW5sdcSfdSA9ICVjLlxuIgorIkJ1IGUyZnNjayBzw7xyw7xtw7xuZGUgYWTEsW1sYW1hIHV6dW5sdWtsYXLEsW7EsW4gYmxvayB1enVubHVrbGFyxLFuZGFuXG4iCisiZmFya2zEsSBvbG1hc8SxIGRlc3Rla2xlbm1peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NQorbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTw7xwZXJibG9rIGdydXBfYmHFn8SxbmFfYmxva19zYXnEsXPEsSA9ICViOyAlYyBvbG1hbMSxeWTEsVxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGZpcnN0X2RhdGFfYmxvY2sgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MAorbXNnaWQgIkBTIGZpcnN0X2RhdGFfQGIgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICJTw7xwZXIgYmxvayBpbGtfdmVyaV9ibG/En3UgPSAlYjsgJWMgb2xtYWzEsXlkxLFcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSBiaXIgVVVJRCBpw6dlcm1peW9yOyBiaXIgdGFuZSDDvHJldGlsaXlvci5cbiIKKyJcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGU6IGlmIHNldmVyYWwgaW5vZGUgb3IgYmxvY2sgYml0bWFwIGJsb2NrcyBvciBwYXJ0XG4iCisib2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeVxuIgorInJ1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiAlUycgb3B0aW9uIGZpcnN0LiAgVGhlIHByb2JsZW1cbiIKKyJtYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kXG4iCisidGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suXG4iCisiXG4iCittc2dzdHIgIiIKKyJCaWxnaTogVGHFn8Sxbm1hc8SxIGdlcmVrZW4gZMO8xJ/DvG0gdGFibG9zdW51biBiaXIgcGFyw6dhc8SxIG9sYW5cbiIKKyJ5YSBkYSB5ZW5pZGVuIGtvbnVtbGFubWFzxLEgZ2VyZWtlbiBibG9rIGJpdGXFn2xlbSBibG9rbGFyxLFcbiIKKyJ5YSBkYSBkw7zEn8O8bWxlcmkgdmFyc2EsIGUyZnNjayd5xLEgw7ZuY2UgJy1iICVTJyBzZcOnZW5lxJ9peWxlXG4iCisiw6dhbMSxxZ90xLFybWFsxLFzxLFuxLF6LiBTb3J1biBzYWRlY2UgYmlyaW5jaWwgYmxvxJ91biBncnVwXG4iCisidGFuxLFtbGF5xLFjxLFzxLEgaWxlIGlsZ2lsaSBvbGFiaWxpciB2ZSB5ZWRla2xlbWUgYmxvxJ91IGdydXBcbiIKKyJ0YW7EsW1sYXnEsWPEsXPEsSBkYSBkb8SfcnUgb2xhYmlsaXIuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICJTw7xwZXJibG9rIGnDp2luZGUgYm96dWtsdWsgc2FwdGFuZMSxLiAoJXMgPSAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIGRldmljZTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGV0ZXJtaW5pbmcgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgQHY6ICVtXG4iCittc2dzdHIgIkF5Z8SxdMSxbiBmaXppa3NlbCB1enVubHXEn3Ugc2FwdGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgY291bnQgaW4gc3VwZXJibG9jayBpcyAlaSwgc2hvdWxkIGJlICVqLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3OQorbXNnaWQgIkBpIGNvdW50IGluIEBTIGlzICVpLCBAcyAlai5cbiIKK21zZ3N0ciAiU8O8cGVyYmxvayBpw6dpbmRla2kgZMO8xJ/DvG0gc2F5xLFzxLEgJWk7ICVqIG9sbWFsxLF5ZMSxLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQsIGRvc3lhIHTDvHLDvCDDtnplbGxpxJ9pbmkgZGVzdGVrbGVtZXouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgJWkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIlPDvHBlcmJsb2sgaGF0YWzEsSBleHQzIGfDvG5sw7zEn8O8IGnDp2VyaXlvciAoZMO8xJ/DvG0gJWkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBtdWx0aXBsZSBmaWxlc3lzdGVtIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTkzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIG11bHRpcGxlIEBmIHVzZXJzICh1bnN1cHBvcnRlZCkuXG4iCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIMOnb2sgc2F5xLFkYSBkb3N5YSBzaXN0ZW1pIGt1bGxhbsSxY8Sxc8SxIGnDp2VyaXlvci4gKGRlc3Rla2xlbm1peW9yKVxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTgKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIGJ1bHVuYW3EsXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiRMSxxZ8gZ8O8bmzDvGsgaGF0YWzEsSBzw7xwZXJibG9rIGnDp2VyaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIGJ1IGRvc3lhIHNpc3RlbWluaSBkZXN0ZWtsZW1peW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gam91cm5hbCBzdXBlcmJsb2NrIGlzIHVua25vd24gdHlwZSAlTiAodW5zdXBwb3J0ZWQpLlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgam91cm5hbCAKKyMuIEAtZXhwYW5kZWQ6IGZvcm1hdC5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGUgam91cm5hbCBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjEzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogZm9ybWF0LlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIEBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIiIKKyJFeHQzIGfDvG5sw7zEn8O8IHPDvHBlcmJsb2sgdMO8csO8ICVOIGJpbGlubWl5b3IgKGRlc3Rla2xlbm1peW9yKS5cbiIKKyJCdSBrb3B5YSwgYnUgZG9zeWEgc2lzdGVtaSB0YXJhZsSxbmRhbiBkZXN0ZWtsZW5tZXllbiB2ZS95YVxuIgorImVza2kgYmlyIGJpw6dpbSBnaWJpIGfDtnLDvG7DvHlvci5cbiIKKyJBeXLEsWNhLCBnw7xubMO8ayBzw7xwZXJibG9rdW51biBib3p1ayBvbG1hc8SxIGRhIG3DvG1rw7xuLlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjEKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaXMgY29ycnVwdC5cbiIKK21zZ3N0ciAiRXh0MyBnw7xubMO8xJ/DvCBzw7xwZXJibG9rdSBib3p1ay5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXNfam91cm5hbCBmbGFnIGlzIGNsZWFyLCBidXQgYSBqb3VybmFsICVzIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiZXh0MyBrdXJ0YXJtYSBiYXlyYcSfxLEgdGVtaXogYW1hIGfDvG5sw7xrIHZlcmkgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorIywgZnV6enkKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldCwgYnV0IG5vIEBqIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIlPDvHBlcmJsb2sgZXh0MyBuZWVkc19yZWNvdmVyeSBiYXlyYcSfxLEgacOnZXJpeW9yIGFtYSBnw7xubMO8ayB5b2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBjbGVhciwgYnV0IGpvdXJuYWwgaGFzIGRhdGEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjM2CisjLCBmdXp6eQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgY2xlYXIsIGJ1dCBAaiBoYXMgZGF0YS5cbiIKK21zZ3N0ciAiZXh0MyBrdXJ0YXJtYSBiYXlyYcSfxLEgdGVtaXogYW1hIGfDvG5sw7xrIHZlcmkgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJHw7xubMO8xJ/DvCBUZW1pemxlIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIGZpbGVzeXN0ZW0uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MjQ2IGUyZnNjay9wcm9ibGVtLmM6Njk1Cittc2dpZCAiQGYgaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgQGYuICAiCittc2dzdHIgImRvc3lhc2lzdGVtaW5pbiDDtnplbGxpayBiYXlyYWtsYXLEsSBldGtpbiBhbWEgZG9zeWFzaXN0ZW1pbmluIHPDvHLDvG3DvCAwLiIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTEKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICIlcyBhcnTEsWsgZMO8xJ/DvG0gJWkgKGt1bGxfa2ltbD0lSXUsIGdydXBfa2ltbD0lSWcsIGtpcD0lSW0sIGJveT0lSXMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTYKKyMsIGZ1enp5Cittc2dpZCAiQEkgJUIgKCViKSBmb3VuZCBpbiBAbyBAaSAlaS5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgacOnaW5kZWtpIGJsb2sgIyVCICglYikga3VyYWxkxLHFn8SxLlxuIgorCisjLiBALWV4cGFuZGVkOiBBbHJlYWR5IGNsZWFyZWQgJUIgKCViKSBmb3VuZCBpbiBvcnBoYW5lZCBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjEKKyMsIGZ1enp5Cittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgImFydMSxayBkw7zEn8O8bSAlaSBpw6dpbmRla2kgYmxvayAjJUIgKCViKSB6YXRlbiB0ZW1pemxlbm1pxZ8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgInPDvHBlciBibG9rIGnDp2luZGVraSBhcnTEsWsgZMO8xJ/DvG0gJWkga3VyYWxkxLHFn8SxLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgImFydMSxayBkw7zEn8O8bSBsaXN0ZXNpbmRla2kgZMO8xJ/DvG0gJWkga3VyYWxkxLHFn8SxXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biByZWFkLW9ubHkgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNzYKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkV4dDMgZ8O8bmzDvMSfw7wgc8O8cGVyIGJsb8SfdSBiaWxpbm1leWVuIHNhbHQtb2t1bnVyIMO2emVsbGlrbGkgYmlyIGJheXJhayBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKKyMsIGZ1enp5Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkV4dDMgZ8O8bmzDvMSfw7xuw7xuIHPDvHBlciBibG/En3UgYmlsaW5tZXllbiB1eXVtc3V6IMO2emVsbGlrbGkgYmlyIGJheXJhayBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgdmVyc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZTJmc2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI4NgorbXNnaWQgIkBqIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbiIKK21zZ3N0ciAiZ8O8bmzDvGsgc8O8csO8bcO8IGJ1IGUyZnNjayB0YXJhZsSxbmRhbiBkZXN0ZWtsZW5taXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyJHw7xubMO8ayAvJXMgZGVuIGdpemxpIGTDvMSfw7xtZSB0YcWfxLFuxLF5b3IuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIG1vdmluZyBqb3VybmFsOiAlbVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIG1vdmluZyBAajogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorImfDvG5sw7xrIHRhxZ/EsW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDEKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiR2XDp2Vyc2l6IFYyIGfDvG5sw7zEn8O8IHPDvHBlciBibG9rIGFsYW5sYXLEsSBidWx1bmR1IChWMSBnw7xubMO8xJ/DvG5kZW4pLlxuIgorIlYxIGfDvG5sw7zEn8O8IHPDvHBlciBibG/En3VuZGFuIHNvbnJha2kgYWxhbmxhciB0ZW1pemxlbml5b3IuLi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogUnVuIGpvdXJuYWwgYW55d2F5CisjOiBlMmZzY2svcHJvYmxlbS5jOjMwNworbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIkfDvG5sw7zEn8O8IHlpbmUgZGUgw6dhbMSxxZ90xLFyIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzEyCittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIlllZGVrIHPDvHBlciBibG9rZGEga3VydGFybWEgYmF5cmHEn8SxIHRlbWl6IG9sZHXEn3VuZGFuIGfDvG5sw7xrIGhlcsWfZXllIHJhxJ9tZW4gw6dhbMSxxZ9hY2FrLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisiR8O8bmzDvGsgZMO8xJ/DvG3DvCBibG9rIGJpbGdpbGVyaSB5ZWRla2xlbml5b3IuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSByZXNpemVfaW5vZGUgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpcyAlTjsgc2hvdWxkIGJlIHplcm8uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzIyCittc2dpZCAiIgorIkBmIGRvZXMgbm90IGhhdmUgcmVzaXplX0BpIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9AYnNcbiIKKyJpcyAlTjsgQHMgemVyby4gICIKK21zZ3N0ciAiIgorImRvc3lhIHNpc3RlbWluZGUgcmVzaXplX8Sxbm9kZSBldGtpbiBkZcSfaWwsIGFtYSBzX3Jlc2VydmVkX2dkdF9ibG9ja3MgacOnaW5cbiIKKyIlTiBkZcSfZXJpIHZhcjsgc8SxZsSxciBvbG1hbMSxeWTEsS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjgKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICJSZXNpemVfaW5vZGUgZXRraW4gZGXEn2lsLCBhbWEgZMO8xJ/DvG0gYm95dXRsYW5kxLFybWEgc8SxZsSxcmRhbiBmYXJrbMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzMworbXNnaWQgIlJlc2l6ZSBAaSBub3QgdmFsaWQuICAiCittc2dzdHIgIkTDvMSfw7xtIGJveXV0bGFuZMSxcm1hIGdlw6dlcnNpei4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzOAorIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCBtb3VudCB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICJTw7xwZXJibG/En3VuIHNvbiBiYcSfbGFtYSB6YW1hbsSxIGdlbGVjZWt0ZS4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0MworIywgZnV6enkKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lICgldCxcbiIKKyJcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorbXNnc3RyICJTw7xwZXJibG9rdW4gc29uIHlhem1hIHphbWFuxLEgZ2VsZWNla3RlLiAgIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJoYXJpY2kgc8O8cGVyYmxva3UgJVggb2xtYXPEsSBnZXJla2VuIGRvc3lhc2lzdGVtaSBpw6dpbiBzw7xwZXJibG9rIGltYXPEsSIKKworIy4gQC1leHBhbmRlZDogQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNTIKK21zZ2lkICIiCisiQWRkaW5nIGRpcmhhc2ggaGludCB0byBAZi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBoYXMgaW52YWxpZCB1bnVzZWQgaW5vZGVzIGNvdW50ICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM2NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBMYXN0IGdyb3VwIGJsb2NrIGJpdG1hcCB1bmluaXRpYWxpemVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3MgorbXNnaWQgIkxhc3QgQGcgQGIgQEIgdW5pbml0aWFsaXplZC4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozODEKK21zZ2lkICJUaGUgdGVzdF9mcyBmbGFnIGlzIHNldCAoYW5kIGV4dDQgaXMgYXZhaWxhYmxlKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzg2Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuIgorIlx0KGJ5IGxlc3MgdGhhbiBhIGRheSwgcHJvYmFibHkgZHVlIHRvIHRoZSBoYXJkd2FyZSBjbG9jayBiZWluZyBpbmNvcnJlY3RseSBzZXQpICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTIKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGlzIGNvdW50IHRvICVqICh3YXMgJWkpXG4iCittc2dzdHIgIlllZGVrIGJsb2sgc2F5xLFzxLEgJWx1IG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGJsb2NrcyBjb3VudCB0byAlYyAod2FzICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwOAorIywgZnV6enkKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIlllZGVrIGJsb2sgc2F5xLFzxLEgJWx1IG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworIywgZnV6enkKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKyJHw7xubMO8ayAvJXMgZGVuIGdpemxpIGTDvMSfw7xtZSB0YcWfxLFuxLF5b3IuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxOAorIywgZnV6enkKK21zZ2lkICJAUyBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgbWFnaWMuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDIzCittc2dpZCAiQFMgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDAKK21zZ2lkICJQYXNzIDE6IENoZWNraW5nIEBpcywgQGJzLCBhbmQgc2l6ZXNcbiIKK21zZ3N0ciAiMS4gZ2XDp2nFnzogZMO8xJ/DvG1sZXIsIGJsb2tsYXIgdmUgdXp1bmx1a2xhciBkZW5ldGxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ0Cittc2dpZCAiQHIgaXMgbm90IGEgQGQuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBiaXIgZGl6aW4gZGXEn2lsLiAgIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDkKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBpw6dpbiBkdGltZSBiZWxpcnRpbG1pxZ8gKGVza2kgbWtlMmZzJ2RlbiBkb2xhecSxIG9sYWJpbGlyKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIlllZGVrIGTDvMSfw7xtICVpICglUSkgaGF0YWzEsSBraXAgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiU2lsaW5lbiBkw7zEn8O8bSAlaSBzxLFmxLFyIGR0aW1lIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkga3VsbGFuxLFtZGEsIGFtYSBkdGltZSBiZWxpcnRpbG1pxZ8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBiaXIgc8SxZsSxciB1enVubHVrbHUgZGl6aW5kaXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiJWcgZ3J1YnVudW4gJWIgZGVraSBibG9rIGJpdGXFn2xlbWkgZGnEn2VyIGRvc3lhIHNpc3RlbWkgYmxva2xhcsSxIGlsZSDDp2VsacWfaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzkKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICIlZyBncnVidW51biAlYiBkZWtpIGTDvMSfw7xtIGJpdGXFn2xlbWkgZGnEn2VyIGRvc3lhIHNpc3RlbWkgYmxva2xhcsSxIGlsZSDDp2VsacWfaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiVnIGdydWJ1bnVuICViIGRla2kgZMO8xJ/DvG0gdGFibG9zdSBkacSfZXIgZG9zeWEgc2lzdGVtaSBibG9rbGFyxLEgaWxlIMOnZWxpxZ9peW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIlZyBncnVidW51biBibG9rIGJpdGXFn2xlbWkgKCViKSBoYXRhbMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIlZyBncnVidW51biBkw7zEn8O8bSBiaXRlxZ9sZW1pICglYikgaGF0YWzEsS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWksIGlfc2l6ZSBpcyAlSXMsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTkKK21zZ2lkICJAaSAlaSwgaV9zaXplIGlzICVJcywgQHMgJU4uICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGTDvMSfw7xtIHV6dW5sdcSfdSAlSXMsICVOIG9sbWFsxLF5ZMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkRvc3lhIGTDvMSfw7xtICVpLCBibG9rIGTDvMSfw7xtw7wgJUliLCAlTiBvbG1hbMSxeWTEsS4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorIywgZnV6enkKK21zZ2lkICJASSAlQiAoJWIpIGluIEBpICVpLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbmRla2kgYmxvayAjJUIgKCViKSBrdXJhbGTEscWfxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTQKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgacOnaW5kZWtpIGJsb2sgIyVCICglYikgZG9zeWEgc2lzdGVtaSBtZXRhdmVyaXNpbmluIMO8emVyaW5lIHRhxZ/EsXlvci4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBrdXJhbGTEscWfxLEgYmxvayhsYXIpIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogVG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGlsbGVnYWwgQGJzIGluIEBpICVpLlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbmRlIMOnb2sgZmF6bGEga3VyYWxkxLHFn8SxIGJsb2suXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgJUIgKCViKSBpbiBiYWQgYmxvY2sgaW5vZGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTI5CisjLCBmdXp6eQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICJIYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBpw6dpbmRla2kgYmxvayAlQiAoJWIpIGt1cmFsZMSxxZ/EsS4gICIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBpbGxlZ2FsIGJsb2NrKHMpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzNAorbXNnaWQgIkJhZCBAYiBAaSBoYXMgaWxsZWdhbCBAYihzKS4gICIKK21zZ3N0ciAiSGF0YWzEsSBibG9rIGTDvMSfw7xtw7wga3VyYWxkxLHFn8SxIGJsb2sobGFyKSBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzOQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJUZWtyYXJsYW5txLHFnyB5YSBkYSBoYXRhbMSxIGJsb2sga3VsbGFuxLFtZGEhXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayAlYiB1c2VkIGFzIGJhZCBibG9jayBpbm9kZSBpbmRpcmVjdCBibG9jay4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDQKK21zZ2lkICJCYWQgQGIgJWIgdXNlZCBhcyBiYWQgQGIgQGkgaW5kaXJlY3QgQGIuICAiCittc2dzdHIgIkhhdGFsxLEgYmxvayAlYiwgaGF0YWzEsSBibG9rIGTDvMSfw7xtw7wgZG9sYXlsxLEgYmxvxJ91IG9sYXJhayBrdWxsYW7EsWxtxLHFny4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBUaGUgYmFkIGJsb2NrIGlub2RlIGhhcyBwcm9iYWJseSBiZWVuIGNvcnJ1cHRlZC4gIFlvdSBwcm9iYWJseVxuCisjLiBALWV4cGFuZGVkOiBzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuCisjLiBALWV4cGFuZGVkOiBpbiB0aGUgZmlsZXN5c3RlbS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NDkKK21zZ2lkICIiCisiXG4iCisiVGhlIGJhZCBAYiBAaSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbiIKKyJzaG91bGQgc3RvcCBub3cgYW5kIHJ1biBlMmZzY2sgLWMgdG8gc2NhbiBmb3IgYmFkIGJsb2Nrc1xuIgorImluIHRoZSBAZi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkhhdGFsxLEgYmxvayBkw7zEn8O8bcO8IGdhbGliYSBib3p1bG11xZ8uIEJ1IGR1cnVtZGEgaGVyxZ9leWkgZHVyZHVydXBcbiIKKyJkb3N5YSBzaXN0ZW1pbmRla2kgaGF0YWzEsSBibG9rbGFyxLEgdGFyYW1hayBpw6dpbiBlMmZzY2sgLWNcbiIKKyLDp2FsxLHFn3TEsXJtYWzEsXPEsW7EsXouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NTYKK21zZ2lkICIiCisiXG4iCisiSWYgdGhlIEBiIGlzIHJlYWxseSBiYWQsIHRoZSBAZiBjYW4gbm90IGJlIGZpeGVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiQmxvayBnZXLDp2VrdGVuIGhhdGFsxLF5c2EsIGRvc3lhIHNpc3RlbWkgZMO8emVsdGlsZW1lei5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQnUgYmxvxJ91IGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpbmRlbiBzaWxlYmlsaXIgdmUgYnUgYmxvxJ91biBnZXLDp2VrdGVuXG4iCisiZG/En3J1IG9sZHXEn3VudSB1bWFiaWxpcnNpbml6LCBhbmNhayBoacOnYmlyIGdhcmFudGlzaSB5b2t0dXIuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY3Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIkJpcmluY2lsIGRvc3lhIHNpc3RlbWkgKCViKSBoYXRhbMSxIGJsb2tsYXIgbGlzdGVzaW5kZSBrYXnEsXRsxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEJsb2NrICViIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3MgorbXNnaWQgIkJsb2NrICViIGluIHRoZSBwcmltYXJ5IEBnIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgQGIgbGlzdFxuIgorbXNnc3RyICJCaXJpbmNpbCBncnVwIHRhbsSxbWxhcsSxbmRha2kgYmxvayAlYiwgaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2luZGUga2F5xLF0bMSxXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IEdyb3VwICVnJ3Mgc3VwZXJibG9jayAoJWIpIGlzIGJhZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzgKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIEBTICglYikgaXMgYmFkLlxuIgorbXNnc3RyICJVeWFyxLE6ICVnIGdydWJ1bnVuIHN1cGVyYmxvxJ91ICglYikgaGF0YWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICJVeWFyxLEgJWcgZ3J1YnVudW4gZ3J1cCB0YW7EsW1sYXLEsSBrb3B5YXPEsSBiaXIgaGF0YWzEsSBibG9rIGnDp2VyaXlvciAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICJQcm9ncmFtbGFtYSBoYXRhc8SxPyAgYmxvayAlYiwgaGF0YWzEsSBibG9rIGnFn2xlbWluZGUgc2ViZXBzaXogb2xhcmFrIHRhbGVwIGVkaWxkaS5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiJXMgacOnaW4gJWcgYmxvayBncnVidW5kYSAlTiBiaXRpxZ9payBibG/En2EgeWVyIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICIlcyB0ZWtyYXIga29udW1sYW1hc8SxIGnDp2luIGJsb2sgdGFtcG9udW5hIHllciBheXLEsWzEsXJrZW4gaGF0YSBvbHXFn3R1XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjA1Cittc2dpZCAiUmVsb2NhdGluZyBAZyAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbiIKK21zZ3N0ciAiJWcgZ3J1YnVudW4gJXMgJWIgZGVuICVjIHllIGFrdGFyxLFsxLF5b3IuLi5cbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICIlZyBncnVidW51biAlcyAlYyB5ZSBha3RhcsSxbMSxeW9yLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICJVeWFyxLE6ICVzbmluICViIGJsb8SfdSBva3VuYW1hZMSxOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgYmxvY2sgJWIgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iCittc2dzdHIgIlV5YXLEsTogJXNuaW4gJWIgYmxvxJ91IHlhesSxbGFtYWTEsTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUgZTJmc2NrL3Byb2JsZW0uYzoxNDc0Cittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gYml0ZcWfbGVtaSAoJU4pIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gYml0ZcWfbGVtaSAoJU4pIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgaWNvdW50IGxpbmsgaW5mb3JtYXRpb246ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSBzYXnEsXPEsSBiYcSfIGJpbGdpc2luZSB5ZXIgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBkaXJlY3RvcnkgYmxvY2sgYXJyYXk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBkIEBiIGFycmF5OiAlbVxuIgorbXNnc3RyICJEaXppbiBibG/En3UgZGl6aXNpbmUgeWVyIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiRMO8xJ/DvG1sZXIgKCVpKSB0YXJhbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbmRla2kgYmxva2xhciDDvHplcmluZGUgacWfbGVtbGVyIHRla3JhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHN0b3JpbmcgaW5vZGUgY291bnQgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBjb3VudD0lTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjU1Cittc2dpZCAiRXJyb3Igc3RvcmluZyBAaSBjb3VudCBpbmZvcm1hdGlvbiAoQGk9JWksIGNvdW50PSVOKTogJW1cbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtIHNhecSxc8SxIGJpbGdpc2kgKGTDvMSfw7xtID0gJWksIHNhecSxc8SxID0gJU4pXG4iCisic2FrbGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjAKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKyJEaXppbiBibG/En3UgYmlsZ2lzaSAoZMO8xJ/DvG0gPSAlaSwgYmxvayA9ICViLCBudW0gPSAlTilcbiIKKyJzYWtsYW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBva3VudXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgaW1hZ2ljIGZsYWcgc2V0LiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpbWFnaWMgYmF5cmHEn8SxIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorIsOWemVsIChheWfEsXQvc29rZXQvZmlmby9zZW1iYcSfKSBkb3N5YSAoZMO8xJ/DvG0gJWkpLFxuIgorInNhbHQtZWtsZW5pciB5YSBkYSBkZcSfacWfbWV6IGJheXJhxJ/EsSBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgc8Sxa8SxxZ90xLFybWEgZGVzdGVrbGVubWV5ZW4gZG9zeWEgc2lzdGVtaW5kZSBzxLFrxLHFn3TEsXJtYSBiYXlyYcSfxLEgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8pIGlub2RlICVpIGhhcyBub24temVybyBzaXplLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWFsIChAdi9zb2NrZXQvZmlmbykgQGkgJWkgaGFzIG5vbi16ZXJvIHNpemUuICAiCittc2dzdHIgIsOWemVsIChheWfEsXQvc29rZXQvZmlmbykgZMO8xJ/DvG0gJWkgc8SxZsSxcmRhbiBmYXJrbMSxIGJveXV0dGEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAwCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkfDvG5sw7xrIGTDvMSfw7xtw7wga3VsbGFuxLFtZGEgZGXEn2lsIGFtYSB2ZXJpIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkfDvG5sw7xrIGRvc3lhc8SxIG5vcm1hbCBiaXIgZG9zeWEgZGXEn2lsLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIkTDvMSfw7xtICVpIMO2a3PDvHogZMO8xJ/DvG0gbGlzdGVzaW5pbiBwYXLDp2FzxLF5ZMSxLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxNgorbXNnaWQgIkBpcyB0aGF0IHdlcmUgcGFydCBvZiBhIGNvcnJ1cHRlZCBvcnBoYW4gbGlua2VkIGxpc3QgZm91bmQuICAiCittc2dzdHIgIkJvenVrIGJpciBhcnTEsWsgYmHEn2zEsSBsaXN0ZW5pbiBiaXIgcGFyw6dhc8SxbsSxIGJ1bHVuZHVyYW4gZMO8xJ/DvG1sZXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIxCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgInJlZmNvdW50IHZlcmkgeWFwxLFzxLEgacOnaW4geWVyIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGZvciBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MjYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViIGZvciBAaSAlaS4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgacOnaW4gZWsgw7Z6ZWxsaWsgYmxvxJ91ICViIG9rdW51cmtlbiBoYXRhIG9sdcWfdHUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICJEw7zEn8O8bSAlaSAlYiBoYXRhbMSxIGVrIMO2emVsbGlrIGJsb8SfdW51IGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MzYKK21zZ2lkICJFcnJvciByZWFkaW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkVrIMO2emVsbGlrIGJsb8SfdSAlYiBva3VudXJrZW4gaGF0YSBvbHXFn3R1ICglbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCisjLCBmdXp6eQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJFayDDtnplbGxpa2xlciBibG/En3UgJWIgJUIgYmHFn3Z1cnUgc2F5xLFzxLFuYSBzYWhpcCwgJU4gb2xtYWzEsXlkxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQ2Cittc2dpZCAiRXJyb3Igd3JpdGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICJFayDDtnplbGxpayBibG/En3UgJWIgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIGhfYmxvY2tzID4gMS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTEKK21zZ2lkICJAYSBAYiAlYiBoYXMgaF9AYnMgPiAxLiAgIgorbXNnc3RyICJFayDDtnplbGxpa2xlciBibG/En3UgJWIgacOnaW4gIGhfYmxvY2tzID4gMS4gICIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzU2Cittc2dpZCAiQEEgQGEgQGIgJWIuICAiCittc2dzdHIgIkVrIMO2emVsbGlrbGVyIGJsb8SfdSAlYiBheXLEsWzEsXJrZW4gaGF0YS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAiCittc2dzdHIgIkVrIMO2emVsbGlrIGJsb8SfdSAlYiBib3p1ayAodGFoc2lzIMOnYXTEscWfbWFzxLEpLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjYKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWtsZXIgYmxvxJ91ICViIGJvenVrIChnZcOnZXJzaXogaXNpbSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChpbnZhbGlkIHZhbHVlKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NzEKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiB2YWx1ZSkuICAiCittc2dzdHIgIkVrIMO2emVsbGlrbGVyIGJsb8SfdSAlYiBib3p1ayAoZ2XDp2Vyc2l6IGRlxJ9lcikuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgImTDvMSfw7xtICVpIMOnb2sgYsO8ecO8ay4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCisjLCBmdXp6eQorbXNnaWQgIiVCICglYikgY2F1c2VzIEBkIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIkJsb2sgIyVCICglYikgw6dvayBiw7x5w7xrIGRpemluIG9sdcWfdHVydXlvci4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3ODUKKyMsIGZ1enp5Cittc2dpZCAiJUIgKCViKSBjYXVzZXMgZmlsZSB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICJCbG9rICMlQiAoJWIpIMOnb2sgYsO8ecO8ayBkb3N5YSBvbHXFn3R1cnV5b3IuICAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzkwCisjLCBmdXp6eQorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiQmxvayAjJUIgKCViKSDDp29rIGLDvHnDvGsgc2VtYm9saWsgYmHEnyBvbHXFn3R1cnV5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgaHRyZWUgc3VwcG9ydC5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgaHRyZWUgZGVzdGXEn2kgYnVsdW5tYXlhbiBkb3N5YSBzaXN0ZW1pbmRlIElOREVYX0ZMIGJheXJhxJ/EsSBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgYnV0IGlzIG5vdCBhIEBkLlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBJTkRFWF9GTCBiYXlyYcSfxLEgacOnZXJpeW9yIGFtYSBvIGJpciBkaXppbiBkZcSfaWwuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIGhhcyBhbiBAbiByb290IG5vZGUuXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWkgZ2XDp2Vyc2l6IGJpciBrw7ZrIGTDvMSfw7xtw7wgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWkgZGVzdGVrbGVubWV5ZW4gYmlyIGhhc2ggc8O8csO8bcO8ICglTikgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVpIHV5dW1zdXogYmlyIGh0cmVlIGvDtmsgZMO8xJ/DvG3DvCBiYXlyYcSfxLEga3VsbGFuxLF5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyMAorbXNnaWQgIkBoICVpIGhhcyBhIHRyZWUgZGVwdGggKCVOKSB3aGljaCBpcyB0b28gYmlnXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWkgw6dvayBiw7x5w7xrIGJpciBhxJ9hw6cgZGVyaW5sacSfaW5lICglTikgc2FoaXBcbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrIGlub2RlIGhhcyBhbiBpbmRpcmVjdCBibG9jayAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBtZXRhZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjUKK21zZ2lkICIiCisiQmFkIEBiIEBpIGhhcyBhbiBpbmRpcmVjdCBAYiAoJWIpIHRoYXQgY29uZmxpY3RzIHdpdGhcbiIKKyJAZiBtZXRhZGF0YS4gICIKK21zZ3N0ciAiIgorIkhhdGFsxLEgZMO8xJ/DvG0gYmxvxJ91IGRvc3lhIHNpc3RlbWluaW4gbWV0YSB2ZXJpc2kgaWxlIMOnZWxpxZ9lblxuIgorImJpciBkb2xheWzEsSBibG9rICglYikgacOnZXJpeW9yLiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiRMO8xJ/DvG3DvCBib3l1dGxhbmTEsXJtYWsgacOnaW4gKHRla3Jhcikgb2x1xZ90dXJtYSBiYcWfYXLEsXPEsXo6ICVtIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bSBnZcOnZXJzaXogYmlyIGVrIGJveXV0IGnDp2VyaXlvciAoJUlTKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiJWkuIGTDvMSfw7xtZGVraSBlayDDtnplbGxpayBnZcOnZXJzaXogYmlyIGlzaW0gYWxhbsSxIGnDp2VyaXlvciAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiJWkuIGTDvMSfw7xtZGVraSBlayDDtnplbGxpayBnZcOnZXJzaXogYmlyIGRlxJ9lciBiYcWfbGFuZ8SxY8SxIGnDp2VyaXlvciAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciBkZcSfZXIgYmxvxJ91IGnDp2VyaXlvciAoJU4pLCAwIG9sbWFsxLFcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciBkZcSfZXIgacOnZXJpeW9yICglTilcbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCisjLCBmdXp6eQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIlaS4gZMO8xJ/DvG1kZWtpIGVrIMO2emVsbGlrIGdlw6dlcnNpeiBiaXIgaXNpbSBhbGFuxLEgacOnZXJpeW9yICglTilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiQGkgJWkgYmlyICVJdCBhbmNhayBnZXLDp2VrdGVuIGJpciBkaXppbiBnaWJpIGfDtnLDvG7DvHlvci5cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIGV4dGVudCB0cmVlIGluIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgcmVhZGluZyBvdmVyIEB4IHRyZWUgaW4gQGkgJWk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rbGFyIMO8emVyaW5kZSBpxZ9sZW1sZXIgdGVrcmFybGFuxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBpbm9kZSAlaVxuCisjLiBALWV4cGFuZGVkOiBcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NzYKK21zZ2lkICIiCisiRmFpbGVkIHRvIGl0ZXJhdGUgZXh0ZW50cyBpbiBAaSAlaVxuIgorIlx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrICViLCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgyCittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBAbiBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg3Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBFWFRFTlRTX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBleHRlbnRzIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgaHRyZWUgZGVzdGXEn2kgYnVsdW5tYXlhbiBkb3N5YSBzaXN0ZW1pbmRlIElOREVYX0ZMIGJheXJhxJ/EsSBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBAUyBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhc3Qgc3ltbGluayAlaSBoYXMgRVhURU5UX0ZMIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE2Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJEaXppbiBibG9rbGFyxLEgeWluZWxlbmlya2VuIGhhdGE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI2CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkfDvG5sw7xrIGRvc3lhc8SxIG5vcm1hbCBiaXIgZG9zeWEgZGXEn2lsLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIkfDvG5sw7xrIGTDvMSfw7xtw7wga3VsbGFuxLFtZGEgZGXEn2lsIGFtYSB2ZXJpIGnDp2VyaXlvci4gICIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzYKKyMsIGZ1enp5Cittc2dpZCAiQHEgQGkgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gICIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkga3VsbGFuxLFtZGEsIGFtYSBkdGltZSBiZWxpcnRpbG1pxZ8uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDEKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGJhZCBAYiBAaSBsb29rcyBAbi4gICIKK21zZ3N0ciAiPEhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8PiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0NgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFxuCisjLiBALWV4cGFuZGVkOiBSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLlxuCisjLiBALWV4cGFuZGVkOiBQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2NworbXNnaWQgIiIKKyJcbiIKKyJSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgQGJzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBAaS4uLlxuIgorIlBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIEBtIEBic1xuIgorbXNnc3RyICIiCisiXG4iCisiQmlyZGVuIGZhemxhIGTDvMSfw7xtIGdlcmVrdGlyZW4gYmxva2xhcsSxIMOnw7Z6w7xtbGVtZWsgacOnaW4gZWsgZ2XDp2nFn2xlciB5YXDEsWzEsXlvci4uLlxuIgorIkdlw6dpxZ8gMUI6IMOHb2sgZMO8xJ/DvG1sw7wgYmxva2xhciB5ZW5pZGVuIHRhcmFuxLF5b3JcbiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgacOnaW5kZSDDp29rIGTDvMSfw7xtbMO8IGJsb2tsYXIgdmFyOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkTDvMSfw7xtbGVyICglaSkgdGFyYW7EsXJrZW4gaGF0YSBvbHXFn3R1OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gYml0ZcWfbGVtaSAoaW5vZGVfZHVwX21hcCkgacOnaW4geWVyIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBAYnMgaW4gQGkgJWkgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luZGVraSBibG9rbGFyIMO8emVyaW5kZWtpIGnFn2xlbWxlciB0ZWtyYXJsYW7EsXJrZW5cbiIKKyJoYXRhIG9sdcWfdHUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDAzIGUyZnNjay9wcm9ibGVtLmM6MTMxOAorbXNnaWQgIkVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgQGEgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWtsZXIgYmxvxJ91ICViIChkw7zEn8O8bSAlaSkgacOnaW4gcmVmY291bnQgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDgKK21zZ2lkICJQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgQGlzIHdpdGggQG0gQGJzXG4iCittc2dzdHIgIkdlw6dpxZ8gMUM6IFRla3JhcmxhbmFuIGJsb2tsYXLEsW4gZMO8xJ/DvG1sZXJpIGnDp2luIGRpemlubGVyIHRhcmFuxLF5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNAorbXNnaWQgIlBhc3MgMUQ6IFJlY29uY2lsaW5nIEBtIEBic1xuIgorbXNnc3RyICJHZcOnacWfIDFEOiDDh29rIGTDvMSfw7xtbMO8IGJsb2tsYXIgeWVuaWRlbiBoYWxsZWRpbGl5b3JcbiIKKworIy4gQC1leHBhbmRlZDogRmlsZSAlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pIFxuCisjLiBALWV4cGFuZGVkOiAgIGhhcyAlciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAlTiBmaWxlKHMpOlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTkKKyMsIGZ1enp5Cittc2dpZCAiIgorIkZpbGUgJVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKSBcbiIKKyIgIGhhcyAlciBAbSBAYihzKSwgc2hhcmVkIHdpdGggJU4gZmlsZShzKTpcbiIKK21zZ3N0ciAiIgorIkRvc3lhICVRIChkw7zEn8O8bSAlaSwgZGXEn2nFn2lrbGlrIHphbWFuxLEgJUlNKSBcbiIKKyIgICVOIGRvc3lhIGlsZSBwYXlsYcWfxLFtbMSxLCDDp29rIGTDvMSfw7xtbMO8ICVCIGJsb2sgacOnZXJpeW9yOlxuIgorCisjLiBALWV4cGFuZGVkOiBcdCVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDI1Cittc2dpZCAiXHQlUSAoQGkgIyVpLCBtb2QgdGltZSAlSU0pXG4iCittc2dzdHIgIlx0JVEgKGTDvMSfw7xtICVpLCBkZcSfacWfaWtsaWsgemFtYW7EsSAlSU0pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAzMAorbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxkb3N5YSBzaXN0ZW1pIG1ldGF2ZXJpc2k+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIijDh29rIGTDvMSfw7xtbMO8IGJsb2sgacOnZXJlbiAlTiBkw7zEn8O8bSB2YXIuKVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDQwCittc2dpZCAiIgorIkBtIEBicyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLlxuIgorIlxuIgorbXNnc3RyICIiCisiw4dvayBkw7zEn8O8bWzDvCBibG9rbGFyIHphdGVuIHllbmlkZW4gYXRhbm3EscWfIHlhIGRhIGtvcHlhbGFubcSxxZ90xLEuXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjbG9uZSBmaWxlOiAlbVxuIgorbXNnc3RyICJEb3N5YSBrb3B5YWxhbmFtYWTEsTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1OQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIkdlw6dpxZ8gMjogRGl6aW4geWFwxLFzxLEgZGVuZXRsZW5peW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgacOnaW5kZWtpICcuJyBpw6dpbiBkw7zEn8O8bSBudW1hcmFzxLEgZ2XDp2Vyc2l6LlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY5Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgaGF0YWzEsSBkw7zEn8O8bSBudW1hcmFzxLEgacOnZXJpeW9yOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc0Cittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIHNpbGlubWnFny9rdWxsYW7EsWxtYXlhbiBkw7zEn8O8bSAlRGkgacOnZXJpeW9yLiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc5Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIkBFICcuJyB5YSBiaXIgYmHEn2TEsXIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcG9pbnRzIHRvIGlub2RlICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4NAorbXNnaWQgIkBFIHBvaW50cyB0byBAaSAoJURpKSBsb2NhdGVkIGluIGEgYmFkIEBiLlxuIgorbXNnc3RyICJARSBiaXIgaGF0YWzEsSBibG9rIGnDp2luZGVraSBkw7zEn8O8bcO8ICglRGkpIGfDtnN0ZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byBkaXJlY3RvcnkgJVAgKCVEaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA4OQorbXNnaWQgIkBFIEBMIHRvIEBkICVQICglRGkpLlxuIgorbXNnc3RyICJARSBkaXppbiAlUCAoJURpKSBpw6dpbiBiaXIgYmHEn2TEsXIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvIHRoZSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTQKK21zZ2lkICJARSBATCB0byB0aGUgQHIuXG4iCittc2dzdHIgIkBFIGvDtmsgZMO8xJ/DvG3DvG5lIGJpciBiYcSfZMSxci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTkKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBpc21pbmRlIGt1cmFsZMSxxZ/EsSBrYXJha3RlcmxlciBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGnDp2luZGUgJy4nIGVrc2lrLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGnDp2luZGUgJy4uJyBla3Npay5cbiIKKworIy4gQC1leHBhbmRlZDogRmlyc3QgZW50cnkgJyVEbicgKGlub2RlPSVEaSkgaW4gZGlyZWN0b3J5IGlub2RlICVpICglcCkgc2hvdWxkIGJlICcuJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTQKK21zZ2lkICJGaXJzdCBAZSAnJURuJyAoQGk9JURpKSBpbiBAZCBAaSAlaSAoJXApIEBzICcuJ1xuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpICglcCkgacOnaW5kZWtpIGlsayBnaXJkaSAnJURuJyAoZMO8xJ/DvG09JURpKSAnLicgb2xtYWzEsXlkxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNlY29uZCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgc2hvdWxkIGJlICcuLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE5Cittc2dpZCAiU2Vjb25kIEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpIEBzICcuLidcbiIKK21zZ3N0ciAiRGl6aW4gZMO8xJ/DvG3DvCAlaSBpw6dpbmRla2kgaWtpbmNpIGdpcmRpICclRG4nIChkw7zEn8O8bT0lRGkpICcuLicgb2xtYWzEsXlkxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI0Cittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgJUlGIGnDp2luIGlfZmFkZHIsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjkKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlSWYgacOnaW4gaV9maWxlX2FjbCwgc8SxZsSxciBvbG1hbMSxLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTM0Cittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlSWQgacOnaW4gaV9kaXJfYWNsLCBzxLFmxLFyIG9sbWFsxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnJhZyBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzOQorbXNnaWQgImlfZnJhZyBARiAlTiwgQHMgemVyby5cbiIKK21zZ3N0ciAiZMO8xJ/DvG0gJWkgKCVRKSAlTiBpw6dpbiBpX2ZyYWcsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE0NAorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgICVOIGnDp2luIGlfZnNpemUsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDkKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSAoJVEpIGJpciBoYXRhbMSxIGtpcCAoJUltKSBpw6dlcml5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZGlyZWN0b3J5IGNvcnJ1cHRlZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTQKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpLCBibG9rICVCLCBrb251bSAlTjogZGl6aW4gYm96dWtcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTkKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWksIGJsb2sgJUIsIGtvbnVtICVOOiBkb3N5YSBpc21pIMOnb2sgdXp1blxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNjQKKyMsIGZ1enp5Cittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGJpciBheXLEsWxtYXlhbiBibG9rICMlQiBpw6dlcml5b3IuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgZGVraSAnLicgZGl6aW4gZ2lyZGlzaSBOVUxMIHNvbmxhbmTEsXJtYWzEsSBkZcSfaWxcbiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIicuLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJEaXppbiBkw7zEn8O8bcO8ICVpIGRla2kgJy4uJyBkaXppbiBnaXJkaXNpIE5VTEwgc29ubGFuZMSxcm1hbMSxIGRlxJ9pbFxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTc5Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBjaGFyYWN0ZXIgQHYuXG4iCittc2dzdHIgIkTDvMSfw7xtICVpICglUSkgYmlyIGt1cmFsZMSxxZ/EsSBrYXJha3RlciBheWfEsXTEsS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGJsb2NrIGRldmljZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg0Cittc2dpZCAiQGkgJWkgKCVRKSBpcyBhbiBASSBAYiBAdi5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgKCVRKSBiaXIga3VyYWxkxLHFn8SxIGJsb2sgYXlnxLF0xLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTg5Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuJyBAZS5cbiIKK21zZ3N0ciAiQEUgdGVrcmFybGF5YW4gJy4nIGdpcmRpc2kgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTQKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4uJyBAZS5cbiIKK21zZ3N0ciAiQEUgdGVrcmFybGF5YW4gJy4uJyBnaXJkaXNpIGnDp2VyaXlvci5cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk5IGUyZnNjay9wcm9ibGVtLmM6MTQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgZmluZCBkaXJfaW5mbyBmb3IgJWkuXG4iCittc2dzdHIgIsSww6cgaGF0YTogJWkgacOnaW4gZGl6aW4gYmlsZ2lsZXJpIGJ1bHVuYW3EsXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA0Cittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgJURyIGthecSxdCB1enVubHXEn3VuZGEsICVOIG9sbWFsxLF5ZMSxLlxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBzdHJ1Y3R1cmU6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgc3RydWN0dXJlOiAlbVxuIgorbXNnc3RyICJpY291bnQgdmVyaSB5YXDEsXPEsSBpw6dpbiB5ZXIgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgaXRlcmF0aW5nIG92ZXIgZGlyZWN0b3J5IGJsb2NrczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGl0ZXJhdGluZyBvdmVyIEBkIEBiczogJW1cbiIKK21zZ3N0ciAiRGl6aW4gYmxva2xhcsSxIHlpbmVsZW5pcmtlbiBoYXRhOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTkKK21zZ2lkICJFcnJvciByZWFkaW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkRpemluIGJsb8SfdSAlYiAoZMO8xJ/DvG0gJWkpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiRGl6aW4gYmxvxJ91ICViIChkw7zEn8O8bSAlaSkgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBpw6dpbiB5ZW5pIGRpemluIGJsb2t1IGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgZGVhbGxvY2F0aW5nIGlub2RlICVpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVhbGxvY2F0aW5nIEBpICVpOiAlbVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSBixLFyYWvEsWzEsXJrZW4gaGF0YTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQGQgQGUgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbiIKK21zZ3N0ciAiJy4nIGnDp2luIGRpemluIGdpcmRpc2kgYsO8ecO8ay4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiRMO8xJ/DvG0gJWkgKCVRKSBiaXIga3VyYWxkxLHFn8SxIEZJRk8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0OQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSAoJVEpIGJpciBrdXJhbGTEscWfxLEgc29rZXQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICJARSBpw6dpbiBkb3N5YSB0w7xyw7wgJU4gb2xhcmFrIGJlbGlybGVuaXlvci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTkKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIHlhbmzEscWfIGRvc3lhIHTDvHLDvG5kZSAoJUR0IGlkaSwgJU4gb2xtYWzEsXlkxLEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI2NAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIkBFIGnDp2luIGRvc3lhIHTDvHLDvCBiZWxpcnRpbG1pxZ8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEVuaW4gaXNtaSBzxLFmxLFyIHV6dW5sdWt0YS5cbiIKKworIy4gQC1leHBhbmRlZDogU3ltbGluayAlUSAoaW5vZGUgIyVpKSBpcyBpbnZhbGlkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzQKK21zZ2lkICJTeW1saW5rICVRIChAaSAjJWkpIGlzIEBuLlxuIgorbXNnc3RyICIlUSBzZW1ib2xpayBiYcSfxLEgKGTDvMSfw7xtICVpKSBnZcOnZXJzaXouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBmb3IgaW5vZGUgJWkgKCVRKSBpcyBpbnZhbGlkICglSWYpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzkKK21zZ2lkICJAYSBAYiBARiBAbiAoJUlmKS5cbiIKK21zZ3N0ciAiQEYgZWsgw7Z6ZWxsaWsgYmxvxJ91IGdlw6dlcnNpeiAoJUlmKS5cbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODQKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSDDp29rIGLDvHnDvGsgZG9zeWFsYXIgacOnZXJpeW9yLCBhbWEgc8O8cGVyYmxva3RhIExBUkdFX0ZJTEUgYmF5cmHEn8SxIHlva1xuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjg5CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgcmVmZXJhbnNzxLF6XG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiByZWZlcmVuY2VkIHR3aWNlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5NAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgaWtpIGtlcmUgcmVmZXJhbnNsxLFcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBiYWQgbWluIGhhc2hcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk5CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1pbiBoYXNoXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSBoYXRhbGkgYXNnYXJpIGhhc2ggacOnZXJpeW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwNAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgIGhhdGFsaSBhemFtaSBoYXNoIGnDp2VyaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBpbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKK21zZ2lkICJAbiBAaCAlZCAoJXEpLiAgIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkICglcSkgZ2XDp2Vyc2l6LiAgIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMTMKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGJsb2sgbnVtYXJhc8SxICViIGhhdGFsxLEuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGvDtmsgZMO8xJ/DvG3DvCBnZcOnZXJzaXpcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI4CisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgaGF0YWzEsSBzxLFuxLFyICglTikgacOnZXJpeW9yXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzMworIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGNvdW50ICglTilcbiIKK21zZ3N0ciAiSFRSRUUgZGl6aW4gZMO8xJ/DvG3DvCAlZCBpw6dpbmRlIHNvcnVuOiBkw7zEn8O8bSAoJUIpIGhhdGFsxLEgc2F5xLFtICglTikgacOnZXJpeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorIywgZnV6enkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4iCittc2dzdHIgIkhUUkVFIGRpemluIGTDvMSfw7xtw7wgJWQgacOnaW5kZSBzb3J1bjogZMO8xJ/DvG0gKCVCKSBzxLFyYXPEsXogYml0IGhhc2ggdGFibG9zdSBpw6dlcml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGRlcHRoICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQzCisjLCBmdXp6eQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICJIVFJFRSBkaXppbiBkw7zEn8O8bcO8ICVkIGnDp2luZGUgc29ydW46IGTDvMSfw7xtICglQikgZ2XDp2Vyc2l6IGRlcmlubGlrIGnDp2VyaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ4Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJZaW5lbGVubWnFnyBARSBidWx1bmR1LiAgIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4KKyMuIEAtZXhwYW5kZWQ6IFJlbmFtZSB0byAlcworIzogZTJmc2NrL3Byb2JsZW0uYzoxMzUzCisjLCBuby1jLWZvcm1hdAorbXNnaWQgIiIKKyJARSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuIgorIlJlbmFtZSB0byAlcyIKK21zZ3N0ciAiIgorIkBFIGJlbnplcnNpeiBvbG1heWFuIGJpciBkb3N5YSBpc21pIGnDp2VyaXlvci5cbiIKKyIlcyBvbGFyYWsgZGXEn2nFn3RpcmlsbWVsaSIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU4Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisiJyVEbicgZ2lyZGlzaSB5aW5lbGVubWnFny5cbiIKKyJcdCVwICglaSkgeWVuaWRlbiBrdXJndWxhbm1hayDDvHplcmUgaW1sZW5peW9yLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgImlfYmxvY2tzX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2Jsb2Nrc19oaSBARiAlTiwgQHMgc8SxZsSxci5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJCZWtsZW5tZXllbiBAYiwgQGggacOnaW5kZSAlZCAoJXEpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGluIGdyb3VwICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzIKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBpbiBAZyAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHJlZmVyZW5jZXMgaW5vZGUgJURpIGZvdW5kIGluIGdyb3VwICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzcKK21zZ2lkICJARSByZWZlcmVuY2VzIEBpICVEaSBmb3VuZCBpbiBAZyAlZydzIHVudXNlZCBpbm9kZXMgYXJlYS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZpbGVfYWNsX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzgyCisjLCBmdXp6eQorbXNnaWQgImlfZmlsZV9hY2xfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImTDvMSfw7xtICVpICglUSkgJUlmIGnDp2luIGlfZmlsZV9hY2wsIHPEsWbEsXIgb2xtYWzEsS5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4OQorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIkdlw6dpxZ8gMzogRGl6aW4gYmHEn2xhbmFiaWxpcmxpxJ9pIGRlbmV0bGVuaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIG5vdCBhbGxvY2F0ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5NAorbXNnaWQgIkByIG5vdCBhbGxvY2F0ZWQuICAiCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCB0YWhzaXNsaSBkZcSfaWwuICAiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5OQorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgImxvc3QrZm91bmQgZGl6aW5pbmRlIHllciB5b2suICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIkRpemluIGTDvMSfw7xtw7wgJWkgKCVwKSBiYcSfbGFudMSxc8SxelxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBub3QgZm91bmQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwOQorbXNnaWQgIi9AbCBub3QgZm91bmQuICAiCittc2dzdHIgIi9sb3N0K2ZvdW5kIGRpemluaSB5b2suICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBzaG91bGQgYmUgJXEgKCVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDE0Cittc2dpZCAiJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIEBzICVxICglZCkuXG4iCittc2dzdHIgIiVRICglaSkgZGFraSAnLi4nICVQICglaiksIHPDvHBlcmJsb2sgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIHlhIHlvayB5YSBkYSBoYXRhbMSxLiB0ZWtyYXIgYmHEn2xhbsSxbGFtxLF5b3IuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkIG5vdCBleHBhbmQgL2xvc3QrZm91bmQ6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZXhwYW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIGdlbmnFn2xldGlsZW1peW9yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiJWkgeWUgdGVrcmFyIGJhxJ9sYW7EsWxhbcSxeW9yOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIGJ1bHVubWF5YSDDp2FsxLHFn8SxbMSxcmthbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisiZXh0MmZzX25ld19ibG9jazogJW1cbiIKKyIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrYW4gaGF0YSBvbHXFn3R1LlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiIgorImV4dDJmc19uZXdfaW5vZGU6ICVtXG4iCisiL2xvc3QrZm91bmQgZGl6aW5pIG9sdcWfdHVydWxtYXlhIMOnYWzEscWfxLFsxLFya2FuIGhhdGEgb2x1xZ90dS5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX25ld19kaXJfYmxvY2s6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2tcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19uZXdfZGlyX0BiOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgQGQgQGJcbiIKK21zZ3N0ciAiIgorImV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbVxuIgorInllbmkgZGl6aW4gYmxvxJ91IG9sdcWfdHVydWx1cmtlbiBoYXRhLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBkaXJlY3RvcnkgYmxvY2sgZm9yIC9sb3N0K2ZvdW5kXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfd3JpdGVfZGlyX0BiOiAlbSB3aGlsZSB3cml0aW5nIHRoZSBAZCBAYiBmb3IgL0BsXG4iCittc2dzdHIgIiIKKyJleHQyZnNfd3JpdGVfZGlyX2Jsb2NrOiAlbVxuIgorIi9sb3N0K2ZvdW5kIGnDp2luIGRpemluIGJsb8SfdSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1LlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBhZGp1c3RpbmcgaW5vZGUgY291bnQgb24gaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGFkanVzdGluZyBAaSBjb3VudCBvbiBAaSAlaVxuIgorbXNnc3RyICJEw7zEn8O8bSAlaSDDvHplcmluZGUgZMO8xJ/DvG0gc2F5xLFzxLEgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkTDvMSfw7xtICVpIGnDp2luIMO8c3QgZMO8xJ/DvG0gYmVsaXJsZW5lbWVkaTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgZGlyZWN0b3J5IGVudHJ5XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkbid0IGZpeCBwYXJlbnQgb2YgQGkgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IEBkIEBlXG4iCisiXG4iCittc2dzdHIgIiIKKyJEw7zEn8O8bSAlaSBpw6dpbiDDvHN0IGTDvMSfw7xtIGJlbGlybGVuZW1lZGk6IMO8c3QgZGl6aW4gZ2lyZGlzaSBidWx1bmFtYWTEsVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJLw7ZrIGRpemluaSBvbHXFn3R1cnVsdXJrZW4gaGF0YSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyAvbG9zdCtmb3VuZCBkaXJlY3RvcnkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIC9AbCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3Rvcnk7IGFib3J0aW5nLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0ODkKK21zZ2lkICJAciBpcyBub3QgYSBAZDsgYWJvcnRpbmcuXG4iCittc2dzdHIgIkvDtmsgZMO8xJ/DvG3DvCBiaXIgZGl6aW4gZGXEn2lsOyDDp8Sxa8SxbMSxeW9yLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk0Cittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICJCaXIga8O2ayBkw7zEn8O8bcO8IG9sbWFrc8SxesSxbiBpxZ9sZW5lbWV6LlxuIgorCisjLiBALWV4cGFuZGVkOiAvbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkgKGlubz0laSlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIi9AbCBpcyBub3QgYSBAZCAoaW5vPSVpKVxuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBiaXIgZGl6aW4gZGXEn2lsIChkw7zEn8O8bSA9ICVpKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTEKK21zZ2lkICJQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzXG4iCittc2dzdHIgIlBhc3MgM0E6IERpemlubGVyIGVuaXlpbGVuaXlvclxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJkaXJzX3RvX2hhc2ggeWluZWxleWljaSBvbHXFn3R1cnVsYW1hZMSxOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byBvcHRpbWl6ZSBkaXJlY3RvcnkgJXEgKCVkKTogJW1cbiIKK21zZ3N0ciAiRGl6aW4gJXEgKCVkKSBlbml5aWxlbmVtZWRpOiAlbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTI2Cittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICJFbml5aWxlbmVuIGRpemlubGVyOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJHZcOnacWfIDQ6IEJhxZ92dXJ1IHNhecSxc8SxIGRlbmV0bGVuaXlvclxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgImFydMSxayBkw7zEn8O8bSAlaSBzxLFmxLFyIHV6dW5sdWt0YS4gICIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQGkgJWlcbiIKK21zZ3N0ciAiYXJ0xLFrIGTDvMSfw7xtICVpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHJlZiBjb3VudCBpcyAlSWwsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiQGkgJWkgcmVmIGNvdW50IGlzICVJbCwgQHMgJU4uICAiCittc2dzdHIgIkTDvMSfw7xtICVpIGnDp2luIGJhxZ92dXJ1IHNhecSxc8SxICVJbCwgJU4gb2xtYWzEsXlkxLEuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiVVlBUkk6IEUyRlNDSydEQSBZQVpJTElNIEhBVEFTSSFcbiIKKyIgICAgWUEgREEgQsSwUiBNQU5LQUZBIChTxLBaKSBCQcSeTEkgKENBTkxJKSBET1NZQSBTxLBTVEVNxLBOxLAgREVORVRMRVTEsFlPUi5cbiIKKyIgICAgICAgICAocGFyZG9uLCB5YXphciBCT05FSEVBRCAoWU9VKSB5YXptxLHFnyBkYSlcbiIKKyJpbm9kZV9saW5rX2luZm9bJWldID0gJU4sIGlub2RlLmlub2RlX2xpbmtzX2NvdW50ID0gJUlsLlxuIgorIkJ1bmxhciBheW7EsSBvbG1hbMSxeWTEsSFcbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MgorbXNnaWQgIlBhc3MgNTogQ2hlY2tpbmcgQGcgc3VtbWFyeSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICI1LiBHZcOnacWfOiBncnVwIMO2emV0IGJpbGdpbGVyaSBkZW5ldGxlbml5b3JcbiIKKworIy4gQC1leHBhbmRlZDogUGFkZGluZyBhdCBlbmQgb2YgaW5vZGUgYml0bWFwIGlzIG5vdCBzZXQuIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTc3Cittc2dpZCAiUGFkZGluZyBhdCBlbmQgb2YgQGkgQEIgaXMgbm90IHNldC4gIgorbXNnc3RyICJEw7zEn8O8bSBiaXRlxZ9sZW1pbmluIHNvbnVuZGFraSBhbGFuIGJlbGlybGVubWVtacWfLiAiCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MgorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQmxvayBiaXRlxZ9sZW1pbmluIHNvbnVuZGFraSBhbGFuIGJlbGlybGVubWVtacWfLiAiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODcKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJibG9rIGJpdGXFn2xlbWkgZmFya2xhcsSxOiAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MDcKK21zZ2lkICJAaSBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJkw7zEn8O8bSBiaXRlxZ9sZW1pIGZhcmtsYXLEsTogIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gc2VyYmVzdCBkw7zEn8O8bSBzYXnEsXPEsSB5YW5sxLHFnyAoJWksIHNhecSxbGFuID0gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzMgorbXNnaWQgIkRpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gZGl6aW4gc2F5xLFzxLEgeWFubMSxxZ8gKCVpLCBzYXnEsWxhbiA9ICVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM3Cittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiU2VyYmVzdCBkw7zEn8O8bSBzYXnEsXPEsSB5YW5sxLHFnyAoJWksIHNhecSxbGFuID0gJWopLlxuIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0MgorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiJWcuIGdydXAgacOnaW4gc2VyYmVzdCBibG9rIHNhecSxc8SxIHlhbmzEscWfICglYiwgc2F5xLFsYW4gPSAlYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0NworbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIlNlcmJlc3QgYmxvayBzYXnEsXPEsSB5YW5sxLHFnyAoJWIsIHNhecSxbGFuID0gJWMpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQUk9HUkFNTUlORyBFUlJPUjogZmlsZXN5c3RlbSAoIyVOKSBiaXRtYXAgZW5kcG9pbnRzICglYiwgJWMpIGRvbid0IG1hdGNoIGNhbGN1bGF0ZWQgYml0bWFwIAorIy4gQC1leHBhbmRlZDogZW5kcG9pbnRzICglaSwgJWopXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1MgorbXNnaWQgIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiBlbmRwb2ludHMgKCVpLCAlailcbiIKK21zZ3N0ciAiIgorIlBST0dSQU1MQU1BIEhBVEFTSTogZG9zeWEgc2lzdGVtaSAoIyVOKSBiaXRlxZ9sZW0gc8SxbsSxcmxhcsSxICglYiwgJWMpXG4iCisiaWxlIGhlc2FwbGFuYW4gYml0ZcWfbGVtIHPEsW7EsXJsYXLEsSAoJWksICVqKSB1eXXFn211eW9yXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY1OAorbXNnaWQgIkludGVybmFsIGVycm9yOiBmdWRnaW5nIGVuZCBvZiBiaXRtYXAgKCVOKVxuIgorbXNnc3RyICLEsMOnIGhhdGE6IGJpdGXFn2xlbWluIHNvbnVuZGEgYm96dWxtYSAoJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgaW5vZGUgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAaSBAQjogJW1cbiIKK21zZ3N0ciAiWWVkZWsgZMO8xJ/DvG0gYml0ZcWfbGVtaW5kZSBrb3B5YWxhbWEgaGF0YXPEsTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBibG9jayBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBiIEBCOiAlbVxuIgorbXNnc3RyICJZZWRlayBibG9rIGJpdGXFn2xlbWluZGUga29weWFsYW1hIGhhdGFzxLE6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGJsb2NrKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGIocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgQkxPQ0tfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcgaW5vZGUocykgaW4gdXNlIGJ1dCBncm91cCBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJAZyAlZyBAaShzKSBpbiB1c2UgYnV0IEBnIGlzIG1hcmtlZCBJTk9ERV9VTklOSVRcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWNyZWF0ZSBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MDUKKyMsIGZ1enp5Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIlllbmlkZW4gb2x1xZ90dXIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTcxMAorbXNnaWQgIlVwZGF0ZSBxdW90YSBpbmZvIGZvciBxdW90YSB0eXBlICVOIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIkVsZGUgZWRpbGVtZXllbiBoYXRhIGtvZHUgKCgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTU0IGUyZnNjay9wcm9ibGVtLmM6MTk1OAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIllPS1NBWUlMREkiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJLdWxsYW7EsWxhbiBiZWxsZWs6ICVkLCBnZcOnZW4gc8O8cmU6ICU2LjNmLyU2LjNmLyU2LjNmXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91ID0gJWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YXJhbWFzxLEgYmHFn2xhdMSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjEzMAorbXNnaWQgIndoaWxlIGRvaW5nIGlub2RlIHNjYW4iCittc2dzdHIgIi0gZMO8xJ/DvG0gdGFyYW1hc8SxIHlhcMSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9zdXBlci5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiRMO8xJ/DvG0gJWQgacOnaW4gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgacWfbGV2aSDDp2HEn3LEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2FkanVzdF9lYV9yZWZjb3VudDIgZm9yIGlub2RlICVkIgorbXNnc3RyICJEw7zEn8O8bSAlZCBpw6dpbiBleHQyZnNfYmxvY2tfaXRlcmF0ZSBpxZ9sZXZpIMOnYcSfcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MgorbXNnaWQgIlRydW5jYXRpbmciCittc2dzdHIgIkvEsXJwxLFsxLF5b3IiCisKKyM6IGUyZnNjay9zdXBlci5jOjI3MworbXNnaWQgIkNsZWFyaW5nIgorbXNnc3RyICJUZW1pemxlbml5b3IiCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbLXBhbnlyY2RmdnN0REZTVl0gWy1iIHN1cGVyYmxva10gWy1CIGJsb2tib3l1XVxuIgorIlx0Wy1JIGTDvMSfw7xtX3RhbXBvbnVfYmxva19zYXnEsXPEsV0gWy1QIGnFn2xlbV9kw7zEn8O8bcO8X2JveXVdXG4iCisiXHRbLWx8LUwgaGF0YWzEsV9ibG9rbGFyX2Rvc3lhc8SxXSBbLUMgZG9zeWFfdGFuxLFtbGF5xLFjxLFdXG4iCisiXHRbLWogZMSxxZ9fZ8O8bmzDvGtfYXlnxLF0xLFdIFstRSBla19zZcOnZW5la2xlcl0gIGF5Z8SxdFxuIgorIkxpbnV4IGlraW5jaSBnZWxpxZ9tacWfIGRvc3lhIHNpc3RlbWluaW4gKGUyZnMpIGRlbmV0bGVubWVzaSBpw6dpblxuIgorImt1bGxhbsSxbMSxci4gZXh0MyBkZXN0ZWtsZW5tacWfdGlyLlxuIgorIlxuIgorIlNlw6dlbmVrbGVyOlxuIgorIiAgIC1hICAgICAgICAgICAgICAgICAgICAgICAgLXAgaWxlIGF5bsSxXG4iCisiICAgLUMgZG9zeWFfdGFuxLFtbGF5xLFjxLEgICAgICBlMmZzY2snecSxIMOnYWzEscWfdMSxcmFuIHV5Z3VsYW1hbGFyY2Ega3VsbGFuxLFsxLFyXG4iCisiICAgLWQgICAgICAgICAgICAgICAgICAgICAgICBIYXRhIGF5xLFrbGFtYSBpbGV0aWxlcmluaSBnw7ZzdGVyaXJcbiIKKyIgICAtRCAgICAgICAgICAgICAgICAgICAgICAgIGRpemlubGVyIGVuaXlpbGVuaXJcbiIKKyIgICAtRiAgICAgICAgICAgICAgICAgICAgICAgIHRhbXBvbiBiZWxsZWsgacWfbGVtIMO2bmNlc2kgYm/Fn2FsdMSxbMSxclxuIgorIiAgIC1yICAgICAgICAgICAgICAgICAgICAgICAgYnUgc2XDp2VuZWsgeW9rc2F5xLFsxLFyXG4iCisiICAgLXMgICAgICAgICAgICAgICAgICAgICAgICBkb3N5YSBzaXN0ZW1pIGJheXQgc8SxcmFsYW1hc8SxIHRlcnNzZSBrdWxsYW7EsWzEsXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgc8SxcmFkYSBpc2UgZXRraXNpemRpci5cbiIKKyIgICAtUyAgICAgICAgICAgICAgICAgICAgICAgIE1ldmN1dCBiYXl0IHPEsXJhbGFtYXPEsW5hIGJha8SxbG1ha3PEsXrEsW4gZG9zeWFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpc3RlbWluaW4gYmF5dCBzxLFyYWxhbWFzxLEgdGVycyDDp2V2cmlsaXJcbiIKKyIgICAtdCAgICAgICAgICAgICAgICAgICAgICAgIGlzdGF0aXN0aWtsZXIgZ8O2c3RlcmlsaXIsIGlraSBrZXJlIHZlcmlsbWnFn3NlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXIgZ2XDp2nFn2luIGlzdGF0aXN0aWtsZXJpIGRlIGfDtnN0ZXJpbGlyLlxuIgorIiAgIC1WICAgICAgICAgICAgICAgICAgICAgICAgc8O8csO8bSBiaWxnaWxlcmkgZ8O2c3RlcmlsaXIgdmUgw6fEsWthclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrIGxpc3RcbiIKKyIgLWYgICAgICAgICAgICAgICAgICAgRm9yY2UgY2hlY2tpbmcgZXZlbiBpZiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBjbGVhblxuIgorbXNnc3RyICIiCisiXG4iCisiQWNpbCB5YXJkxLFtOlxuIgorIiAgIC1wICAgICAgICAgICAgICAgICAgICAgICAgSGnDpyBzb3J1IHNvcm1hZGFuIHNpc3RlbSBvdG9tYXRpayBvbmFyxLFsxLFyXG4iCisiICAgLW4gICAgICAgICAgICAgICAgICAgICAgICBkb3N5YSBzaXN0ZW1pIHNhbHQtb2t1bnVyIGHDp8SxbMSxci4gRGVuZXRpbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc8SxcmFzxLFuZGEgdMO8bSBzb3J1bGFyYSBIQVlJUiBjZXZhYsSxIHZlcmlsZGnEn2lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNhecSxbMSxci5cbiIKKyIgICAteSAgICAgICAgICAgICAgICAgICAgICAgIERlbmV0aW0gc8SxcmFzxLFuZGEgdMO8bSBzb3J1bGFyYSBFVkVUIGNldmFixLFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlsZGnEn2kgdmFyc2F5xLFsxLFyLlxuIgorIiAgIC1jICAgICAgICAgICAgICAgICAgICAgICAgdmFyc2EgaGF0YWzEsSBibG9rbGFyIGJ1bHVudXIgdmUgaGF0YWzEsSBibG9rbGFyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZXNpbmUgZWtsZW5pclxuIgorIiAgIC1mICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBiw7Zsw7xtw7wgdGVtaXogYmlsZSBvbHNhIGRlbmV0aW0geWFwxLFsxLFyXG4iCisKKyM6IGUyZnNjay91bml4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAtdiAgICAgICAgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisiIC1iIHN1cGVyYmxvY2sgICAgICAgIFVzZSBhbHRlcm5hdGl2ZSBzdXBlcmJsb2NrXG4iCisiIC1CIGJsb2Nrc2l6ZSAgICAgICAgIEZvcmNlIGJsb2Nrc2l6ZSB3aGVuIGxvb2tpbmcgZm9yIHN1cGVyYmxvY2tcbiIKKyIgLWogZXh0ZXJuYWxfam91cm5hbCAgU2V0IGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBqb3VybmFsXG4iCisiIC1sIGJhZF9ibG9ja3NfZmlsZSAgIEFkZCB0byBiYWRibG9ja3MgbGlzdFxuIgorIiAtTCBiYWRfYmxvY2tzX2ZpbGUgICBTZXQgYmFkYmxvY2tzIGxpc3RcbiIKK21zZ3N0ciAiIgorIiAgIC12ICAgICAgICAgICAgICAgICAgICAgICAgYXlyxLFudMSxbMSxIGJpbGdpIHZlcmlsaXJcbiIKKyIgICAtYiBzdXBlcmJsb2sgICAgICAgICAgICAgIG5vcm1hbCBzw7xwZXJibG9rIHllcmluZSBiZWxpcnRpbGVuIGt1bGxhbsSxbMSxclxuIgorIiAgIC1CIGJsb2tib3l1ICAgICAgICAgICAgICAgc8O8cGVyYmxvayBhcmFuxLFya2VuIGt1bGxhbsSxbGFuIGJsb2sgYm95dVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVyaW5lIGJlbGlydGlsZW4ga3VsbGFuxLFsxLFyXG4iCisiICAgLWogZMSxxZ8tZ8O8bmzDvGstYXlnxLF0xLEgICAgICBnw7xubMO8ayBkb3N5YXPEsW7EsW4gYXJhbmFjYcSfxLEgYXlnxLF0IGJlbGlydGlsaXJcbiIKKyIgICAtbCBoYXRhbMSxX2Jsb2tsYXJfZG9zeWFzxLEgYmVsaXJ0aWxlbiBkb3N5YWRha2kgaGF0YWzEsSBibG9rbGFyIGxpc3RleWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVrbGVuaXJcbiIKKyIgICAtTCBoYXRhbMSxX2Jsb2tsYXJfZG9zeWFzxLEgaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2kgYmVsaXJ0aWxlbiBkb3N5YWRha2lsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsZSBvbHXFn3R1cnVsdXJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAldS8ldSBmaWxlcyAoJTBkLiVkJSUgbm9uLWNvbnRpZ3VvdXMpLCAlbGx1LyVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiVzOiAlZC8lZCBkb3N5YSAoJSUlMGQuJWQgeWFueWFuYSBvbG1heWFuIGTDvMSfw7xtKSwgJXUvJXUgYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJThkIGTDvMSfw7xtIGt1bGxhbsSxbGTEsSAoJSUlZClcbiIKK21zZ3N0clsxXSAiIgorIlxuIgorIiU4ZCBkw7zEn8O8bSBrdWxsYW7EsWxkxLEgKCUlJWQpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGUgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGZpbGVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJThkIGJpdGnFn2lrIG9sbWF5YW4gZMO8xJ/DvG0gKCUlJTBkLiVkKVxuIgorbXNnc3RyWzFdICIlOGQgYml0acWfaWsgb2xtYXlhbiBkw7zEn8O8bSAoJSUlMGQuJWQpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yeSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3JpZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlOGQgYml0acWfaWsgb2xtYXlhbiBkw7zEn8O8bSAoJSUlMGQuJWQpXG4iCittc2dzdHJbMV0gIiU4ZCBiaXRpxZ9payBvbG1heWFuIGTDvMSfw7xtICglJSUwZC4lZClcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICAgICAjIG9mIGlub2RlcyB3aXRoIGluZC9kaW5kL3RpbmQgYmxvY2tzOiAldS8ldS8ldVxuIgorbXNnc3RyICIgICAgICAgICBpbmQvZGluZC90aW5kIGJsb2tsYXLEsW7EsW4gZMO8xJ/DvG0gc2F5xLFsYXLEsTogJWQvJWQvJWRcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzkKK21zZ2lkICIgICAgICAgICAgICAgRXh0ZW50IGRlcHRoIGhpc3RvZ3JhbTogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTg4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dpZF9wbHVyYWwgIiUxMmxsdSBibG9ja3MgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICVsbHUpXG4iCittc2dzdHJbMF0gIiU4ZCBibG9rIGt1bGxhbsSxbGTEsSAoJSUlZClcbiIKK21zZ3N0clsxXSAiJThkIGJsb2sga3VsbGFuxLFsZMSxICglJSVkKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBiYWQgYmxvY2tcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBiYWQgYmxvY2tzXG4iCittc2dzdHJbMF0gIiU4ZCBoYXRhbMSxIGJsb2tcbiIKK21zZ3N0clsxXSAiJThkIGhhdGFsxLEgYmxva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsYXJnZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGFyZ2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJThkIGLDvHnDvGsgZG9zeWFcbiIKK21zZ3N0clsxXSAiJThkIGLDvHnDvGsgZG9zeWFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIiIKKyJcbiIKKyIlOGQgbm9ybWFsIGRvc3lhXG4iCittc2dzdHJbMV0gIiIKKyJcbiIKKyIlOGQgbm9ybWFsIGRvc3lhXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiU4ZCBkaXppblxuIgorbXNnc3RyWzFdICIlOGQgZGl6aW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgY2hhcmFjdGVyIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlOGQga2FyYWt0ZXIgYXlnxLF0xLEgZG9zeWFzxLFcbiIKK21zZ3N0clsxXSAiJThkIGthcmFrdGVyIGF5Z8SxdMSxIGRvc3lhc8SxXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgYmxvY2sgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIiU4ZCBibG9rIGF5Z8SxdMSxIGRvc3lhc8SxXG4iCittc2dzdHJbMV0gIiU4ZCBibG9rIGF5Z8SxdMSxIGRvc3lhc8SxXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGZpZm9cbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBmaWZvc1xuIgorbXNnc3RyWzBdICIlOGQgZmlmb1xuIgorbXNnc3RyWzFdICIlOGQgZmlmb1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBsaW5rXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbGlua3NcbiIKK21zZ3N0clswXSAiJThkIGJhxJ9cbiIKK21zZ3N0clsxXSAiJThkIGJhxJ9cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJThkIHNlbWJvbGlrIGJhxJ8iCittc2dzdHJbMV0gIiU4ZCBzZW1ib2xpayBiYcSfIgorCisjOiBlMmZzY2svdW5peC5jOjIxMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmspXG4iCittc2dpZF9wbHVyYWwgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rcylcbiIKK21zZ3N0clswXSAiICglZCBoxLF6bMSxIHNlbWJvbGlrIGJhxJ8pXG4iCittc2dzdHJbMV0gIiAoJWQgaMSxemzEsSBzZW1ib2xpayBiYcSfKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTEydSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBzb2NrZXRzXG4iCittc2dzdHJbMF0gIiU4ZCBzb2tldFxuIgorbXNnc3RyWzFdICIlOGQgc29rZXRcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpbGVzXG4iCittc2dzdHJbMF0gIiU4ZCBkb3N5YVxuIgorbXNnc3RyWzFdICIlOGQgZG9zeWFcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk4NSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIi0gJXMnaW4gYmHEn2zEsSBvbHVwIG9sbWFkxLHEn8SxIHNhcHRhbm1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1LiIKKworIzogZTJmc2NrL3VuaXguYzoyNTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiVXlhcsSxISAgJXMgYmHEn2zEsS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNjIKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRldmFtIGVkaWxlbWl5b3IuIMOnxLFrxLFsxLF5b3IuXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjY0CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJXQVJOSU5HISEhICBUaGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLiAgIElmIHlvdSBjb250aW51ZSB5b3UgKioqV0lMTCoqKlxuIgorImNhdXNlICoqKlNFVkVSRSoqKiBmaWxlc3lzdGVtIGRhbWFnZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIioqKipExLBLS0FUISEhISAgZTJmc2NrJ27EsW4gYmHEn2zEsSBiaXIgZG9zeWEgc2lzdGVtaW5kZSDDp2FsxLHFn3TEsXLEsWxtYXPEsVxuIgorIsOHT0sgQ8SwRETEsCBoYXNhcmxhcmEgc2ViZXAgb2xhYmlsaXIuKioqKlxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjI2OQorbXNnaWQgIkRvIHlvdSByZWFsbHkgd2FudCB0byBjb250aW51ZSIKK21zZ3N0ciAiR2Vyw6dla3RlbiBkZXZhbSBldG1layBpc3RpeW9yIG11c3VudXo/IgorCisjOiBlMmZzY2svdW5peC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJjaGVjayBhYm9ydGVkLlxuIgorbXNnc3RyICJkZW5ldGltIGR1cmR1LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2MQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgaGF0YWzEsSBiaXIgZG9zeWEgc2lzdGVtaSBpw6dlcml5b3IiCisKKyM6IGUyZnNjay91bml4LmM6MzYzCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiB1c3Vsw7xuY2Ugc2lzdGVtZGVuIGF5csSxbG1hbcSxxZ8iCisKKyM6IGUyZnNjay91bml4LmM6MzY1Cittc2dpZCAiIHByaW1hcnkgc3VwZXJibG9jayBmZWF0dXJlcyBkaWZmZXJlbnQgZnJvbSBiYWNrdXAiCittc2dzdHIgIiBiaXJpbmNpbCBzw7xwZXJibG9rIMO2emVsbGlrbGVyaSB5ZWRla2xlbWVkZW4gZmFya2zEsSIKKworIzogZTJmc2NrL3VuaXguYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgZGVuZXRsZW5tZWtzaXppbiAldSBrZXJlIGJhxJ9sYW5kxLEiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2CisjLCBmdXp6eQorbXNnaWQgIiBoYXMgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdGltZSBpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmluIHNvbiBkZW5ldGltIHphbWFuxLEgJXMgeWFwxLFsxLF5b3JcbiIKKworIzogZTJmc2NrL3VuaXguYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgZGVuZXRsZW5tZWtzaXppbiAldSBnw7xuIGdlw6d0aSIKKworIzogZTJmc2NrL3VuaXguYzozOTEKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCBkZW5ldGltIGJhxZ9sYXTEsWxhY2FrLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNsZWFuLCAldS8ldSBmaWxlcywgJWxsdS8lbGx1IGJsb2NrcyIKK21zZ3N0ciAiJXM6IHRlbWl6LCAlZC8lZCBkb3N5YSwgJXUvJXUgYmxvayIKKworIzogZTJmc2NrL3VuaXguYzo0NDMKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIChkZW5ldGxlbWUgZXJ0ZWxlbmRpOyBiYXRhcnlhKSIKKworIzogZTJmc2NrL3VuaXguYzo0NDYKK21zZ2lkICIgKGNoZWNrIGFmdGVyIG5leHQgbW91bnQpIgorbXNnc3RyICIgKHNpc3RlbSBiYcSfbGFuZMSxa3RhbiBzb25yYSBkZW5ldGxlKSIKKworIzogZTJmc2NrL3VuaXguYzo0NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChjaGVjayBpbiAlbGQgbW91bnRzKSIKK21zZ3N0ciAiIChzaXN0ZW0gJWxkIGtlcmUgYmHEn2xhbmTEscSfxLFuZGEgZGVuZXRsZSkiCisKKyM6IGUyZnNjay91bml4LmM6NTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIkhBVEE6IC9kZXYvbnVsbCBhw6fEsWxhbWFkxLEgKCVzKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIEVBIHZlcnNpb24uXG4iCittc2dzdHIgIkVrIMO2emVsbGlrIHPDvHLDvG3DvCBnZcOnZXJzaXouXG4iCisKKyM6IGUyZnNjay91bml4LmM6Njk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gZXh0ZW5kZWQgb3B0aW9uOiAlc1xuIgorbXNnc3RyICJCaWxpbm1leWVuIGVrIHNlw6dlbmVrOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorImUyZnNjayB5YXDEsWxhbmTEsXJtYSBkb3N5YXPEsW5kYSAoJXMsICVkLnNhdMSxcmRhKSBzw7Z6ZGl6aW1pIGhhdGFzxLFcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJEb3N5YSB0YW7EsW1sYXnEsWPEsSAlZCBkZcSfZXJsZW5kaXJpbGlya2VuIGhhdGE6ICVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6NzkyCittc2dpZCAiSW52YWxpZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uIGZpbGUgZGVzY3JpcHRvciIKK21zZ3N0ciAiVGFtYW1sYW1hIGJpbGdpc2kgZG9zeWEgdGFuxLFtbGF5xLFjxLFzxLEgZ2XDp2Vyc2l6IgorCisjOiBlMmZzY2svdW5peC5jOjgwNworbXNnaWQgIk9ubHkgb25lIG9mIHRoZSBvcHRpb25zIC1wLy1hLCAtbiBvciAteSBtYXkgYmUgc3BlY2lmaWVkLiIKK21zZ3N0ciAiU2FkZWNlIC1wLy1hLCAtbiB2ZXlhIC15IHNlw6dlbmVrbGVyaW5kZW4gc2FkZWNlIGJpcmkgYmVsaXJ0aWxlYmlsaXIuIgorCisjOiBlMmZzY2svdW5peC5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLXQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKK21zZ3N0ciAiIC10IHNlw6dlbmXEn2kgZTJmc2NrJ27EsW4gYnUgc8O8csO8bcO8bmRlIGRlc3Rla2xlbm1peW9yLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjg1OSBlMmZzY2svdW5peC5jOjkzMSBtaXNjL3R1bmUyZnMuYzo4MTEgbWlzYy90dW5lMmZzLmM6MTEwMAorIzogbWlzYy90dW5lMmZzLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIgorbXNnc3RyICInJXMnIMOnw7Z6w7xtbGVuZW1peW9yIgorCisjOiBlMmZzY2svdW5peC5jOjkxMAorbXNnaWQgIlRoZSAtbiBhbmQgLUQgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkxNQorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjkyMAorIywgZnV6enkKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiAtYyBzZcOnZW5lxJ9pIGlsZSAtbCB2ZSAtTCBzZcOnZW5la2xlcmkgYXluxLEgYW5kYSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgLWMgYW5kIHRoZSAtbC8tTCBvcHRpb25zIG1heSBub3QgYmUgYm90aCB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4iCittc2dzdHIgIiAtYyBzZcOnZW5lxJ9pIGlsZSAtbCB2ZSAtTCBzZcOnZW5la2xlcmkgYXluxLEgYW5kYSBiaXJsaWt0ZSBrdWxsYW7EsWxhbWF6LlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEwMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkUyRlNDS19KQkRfREVCVUcgXCIlc1wiIG5vdCBhbiBpbnRlZ2VyXG4iCisiXG4iCittc2dzdHIgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBiaXIgdGFtc2F5xLEgZGXEn2lsXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlNhecSxc2FsIG9sbWF5YW4gZ2XDp2Vyc2l6IGJhxJ/EsW1zxLF6IGRlxJ9pxZ9rZW4sIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTU1QIGludGVydmFsIGlzICV1IHNlY29uZHMgYW5kIHRvdGFsIHdhaXQgdGltZSBpcyAldSBzZWNvbmRzLiBQbGVhc2Ugd2FpdC4uLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTEzNyBlMmZzY2svdW5peC5jOjExNDIKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICItIHPDvHBlcmJsb2sgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91bml4LmM6MTE0NCBtaXNjL3R1bmUyZnMuYzoxOTEyCittc2dpZCAiIgorIklmIHlvdSBhcmUgc3VyZSB0aGUgZmlsZXN5c3RlbSBpcyBub3QgaW4gdXNlIG9uIGFueSBub2RlLCBydW46XG4iCisiJ3R1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHtkZXZpY2V9J1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiSGF0YTogZXh0MmZzIGtpdGFwbMSxayBzw7xyw7xtw7wgdXlndW4gZGXEn2lsIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMDIKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICItIHV5Z3VsYW1hIGJhxZ9sYXTEsWxtYXlhIMOnZWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3VuaXguYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0VXNpbmcgJXMsICVzXG4iCittc2dzdHIgIlx0JXMsICVzIGt1bGxhbsSxbMSxeW9yXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIzNworbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgImV0a2lsZcWfaW1saSBvbmFyxLFtIGnDp2luIHXDp2JpcmltIGdlcmVrbGkiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIGJsb2tsYXLEsSB5ZWRla2xlbWV5ZSDDp2FsxLHFn8SxeW9yLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTI5MgorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIlPDvHBlcmJsb2sgZ2XDp2Vyc2l6LCIKKworIzogZTJmc2NrL3VuaXguYzoxMjkzCittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkdydXAgdGFuxLFtbGF5xLFjxLFsYXIgaGF0YWzEsSBnw7Zyw7xuw7x5b3IuLi4iCisKKyM6IGUyZnNjay91bml4LmM6MTMwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBkw7zEn8O8bcO8IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6IGdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgc3VwZXJibG9ja1xuIgorbXNnc3RyICIlczogZ2XDp2VybGkgZ8O8bWzDvGsgZG9zeWFzxLEgc3VwZXIgYmxvxJ91IHlva1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMzUKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiRG9zeWEgc2lzdGVtaSBlMmZzY2snbsSxbiBidSBzw7xyw7xtw7xuZGVuIGRhaGEgecO8a3NlayBiaXIgc8O8csO8bcO8XG4iCisiZGVzdGVrbGl5b3IgZ2liaS4gKFlhIGRhIGRvc3lhIHNpc3RlbWluaW4gc8O8cGVyYmxvxJ91IGJvenVrIG9sYWJpbGlyKVxuIgorIlxuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNDEKK21zZ2lkICJDb3VsZCB0aGlzIGJlIGEgemVyby1sZW5ndGggcGFydGl0aW9uP1xuIgorbXNnc3RyICJCdSBzxLFmxLFyIHV6dW5sdWtsdSBiaXIgZGlzayBiw7Zsw7xtw7wgb2xhYmlsaXIgbWk/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWluZSAlcyBlcmnFn2ltaW5peiBvbG1hbMSxIHlhIGRhIHJvb3Qgb2xtYWzEsXPEsW7EsXpcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJCdSBtZXZjdXQgb2xtYXlhbiBiaXIgYXlnxLF0IHlhIGRhIGJpciB0YWthcyBheWfEsXTEsSBtxLEgYWNhYmE/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1MgorbXNnaWQgIkZpbGVzeXN0ZW0gbW91bnRlZCBvciBvcGVuZWQgZXhjbHVzaXZlbHkgYnkgYW5vdGhlciBwcm9ncmFtP1xuIgorbXNnc3RyICIiCisiRG9zeWFzaXN0ZW1pIGJhxZ9rYSBiaXIgdXlndWxhbWEgdGFyYWbEsW5kYW4gw7Z6ZWxsaWtsZSBiYcSfbGFubcSxxZ8gdmV5YSBhw6fEsWxtxLHFn1xuIgorIm9sYWJpbGlyIG1pP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTUKKyMsIGZ1enp5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiQnUgbWV2Y3V0IG9sbWF5YW4gYmlyIGF5Z8SxdCB5YSBkYSBiaXIgdGFrYXMgYXlnxLF0xLEgbcSxIGFjYWJhP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTgKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorIkRpc2sgeWF6bWEga29ydW1hbMSxOyAtbiBzZcOnZW5lxJ9pbmkga3VsbGFuYXJhayBzYWx0LW9rdSBraXBpbmRlXG4iCisiZGVuZXRpbSB5YXDEsW7EsXouXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTQyMworbXNnaWQgIkdldCBhIG5ld2VyIHZlcnNpb24gb2YgZTJmc2NrISIKK21zZ3N0ciAiZTJmc2NrJ27EsW4gZGFoYSB5ZW5pIGJpciBzw7xyw7xtw7xuw7wgYWzEsW4hIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAiLSAlcyBpw6dpbiBleHQzIGfDvG5sw7zEn8O8IGRlbmV0bGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdW5peC5jOjE0NzgKK21zZ2lkICJXYXJuaW5nOiBza2lwcGluZyBqb3VybmFsIHJlY292ZXJ5IGJlY2F1c2UgZG9pbmcgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSBjaGVjay5cbiIKK21zZ3N0ciAiIgorIlV5YXLEsTogRG9zeWEgc2lzdGVtaSBzYWx0LW9rdSBraXBpbmRlIGRlbmV0bGVuZGnEn2luZGVuXG4iCisiZ8O8bmzDvGsgZG9zeWFzxLFuYSBnw7ZyZSBrdXJ0YXJtYSBhdGxhbsSxeW9yLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgIiVzIMO8emVyaW5lIHPDvHBlcmJsb2sgYmF5cmFrbGFyxLEga29udWxhbWFkxLFcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICItICVzIGV4dDMgZ8O8bmzDvGsgZG9zeWFzxLEga3VydGFyxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91bml4LmM6MTUyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiVzIGRlc3Rla2xlbm1leWVuIMO2emVsbGlrKGxlcmkpOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogd2FybmluZzogY29tcHJlc3Npb24gc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG4iCittc2dzdHIgIlV5YXLEsTogc8Sxa8SxxZ90xLFybWEgZGVzdGXEn2kgZGVuZXlzZWxkaXIuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIkUyZnNjayBIVFJFRSBkZXN0ZcSfaSBpbGUgZGVybGVubWVtacWfLFxuIgorIlx0YW1hIGRvc3lhIHNpc3RlbWkgJXMgSFRSRUUgZGl6aW5sZXJpIGnDp2VyaXlvci5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIi0gaGF0YWzEsSBibG9rbGFyIGTDvMSfw7xtw7wgb2t1bm1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdW5peC5jOjE1OTcKK21zZ2lkICJUaGlzIGRvZXNuJ3QgYm9kZSB3ZWxsLCBidXQgd2UnbGwgdHJ5IHRvIGdvIG9uLi4uXG4iCittc2dzdHIgIkJ1IHBlayBoYXlyYSBhbGFtZXQgZGXEn2lsLCBhbWEgw7xzdMO8bmUgZ2lkaWxlY2VrLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIkfDvG5sw7xrIG9sdcWfdHVydWx1eW9yICglZCBibG9rKTogIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDgKK21zZ2lkICIgRG9uZS5cbiIKK21zZ3N0ciAiIFRhbWFtbGFuZMSxLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDkKK21zZ2lkICIiCisiXG4iCisiKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqKiogZ8O8bmzDvGsgeWVuaWRlbiBvbHXFn3R1cnVsZHUgLSBkb3N5YSBzaXN0ZW1pIHllbmlkZW4gZXh0MyAqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjcyCittc2dpZCAiUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uXG4iCittc2dzdHIgImUyZnNjayBiYcWfdGFuIGJhxZ9sxLF5b3IuLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjc2Cittc2dpZCAid2hpbGUgcmVzZXR0aW5nIGNvbnRleHQiCittc2dzdHIgIi0gYmHEn2xhbSBzxLFmxLFybGFuxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3VuaXguYzoxNjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBlMmZzY2sgY2FuY2VsZWQuXG4iCittc2dzdHIgIiVzOiBlMmZzY2sgZHVyZHVydWxkdS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiw6fEsWt0xLEiCisKKyM6IGUyZnNjay91bml4LmM6MTcwMCBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiogRE9TWUEgU8SwU1RFTcSwIERFxJ7EsMWeVMSwUsSwTETEsCAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczogKioqKiogTUFLxLBOQVlJIFlFTsSwREVOIEJBxZ5MQVRJTiAqKioqKlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MTIgZTJmc2NrL3V0aWwuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqKioqKiogV0FSTklORzogRmlsZXN5c3RlbSBzdGlsbCBoYXMgZXJyb3JzICoqKioqKioqKipcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFVZQVJJOiBEb3N5YSBzaXN0ZW1pIGhhbGEgaGF0YWzEsSAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc1MgorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2NrIGdyb3VwIGNoZWNrc3VtIGluZm8iCittc2dzdHIgIi0gaGF0YWzEsSBibG9rIGTDvMSfw7xtw7wgYmVsaXJsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgImVFIgorCisjOiBlMmZzY2svdXRpbC5jOjE5MQorbXNnaWQgIm5OIgorbXNnc3RyICJoSCIKKworIzogZTJmc2NrL3V0aWwuYzoyMDUKK21zZ2lkICI8eT4iCittc2dzdHIgIjxlPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDcKK21zZ2lkICI8bj4iCittc2dzdHIgIjxoPiIKKworIzogZTJmc2NrL3V0aWwuYzoyMDkKK21zZ2lkICIgKHkvbikiCittc2dzdHIgIiAoZS9oKSIKKworIzogZTJmc2NrL3V0aWwuYzoyMjMKK21zZ2lkICJjYW5jZWxsZWQhXG4iCittc2dzdHIgImR1cmR1cnVsZHUhXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM4Cittc2dpZCAieWVzXG4iCittc2dzdHIgImV2ZXRcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJoYXnEsXJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGhhecSxclxuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGV2ZXRcbiIKKyJcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTgKK21zZ2lkICJ5ZXMiCittc2dzdHIgImV2ZXQiCisKKyM6IGUyZnNjay91dGlsLmM6MjU4Cittc2dpZCAibm8iCittc2dzdHIgImhhecSxciIKKworIzogZTJmc2NrL3V0aWwuYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJmc2NrX3JlYWRfYml0bWFwczogaWxsZWdhbCBiaXRtYXAgYmxvY2socykgZm9yICVzIgorbXNnc3RyICJlMmZzY2tfcmVhZF9iaXRtYXBzOiAlcyBpw6dpbiBiaXRlxZ9sZW0gYmxva2xhcsSxIGt1cmFsZMSxxZ/EsSIKKworIzogZTJmc2NrL3V0aWwuYzoyNzgKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICJkw7zEn8O8bSB2ZSBibG9rIGJpdGXFn2xlbWxlcmkgb2t1bnV5b3IiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIi0gJXMgacOnaW4gYml0ZcWfbGVtbGVyaW4gb2t1bm1hc8SxIHlpbmVsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91dGlsLmM6Mjk4CisjLCBmdXp6eQorbXNnaWQgIndyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMiCittc2dzdHIgImJsb2sgYml0ZcWfbGVtbGVyaSB5YXrEsWzEsXlvciIKKworIzogZTJmc2NrL3V0aWwuYzozMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIi0gJXMgacOnaW4gZMO8xJ/DvG0gYml0ZcWfbGVtbGVyaW5pbiB5YXrEsWxtYXPEsSB5aW5lbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBlMmZzY2svdXRpbC5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiJXM6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuXG4iCisiXHQoaS5lLiwgd2l0aG91dCAtYSBvciAtcCBvcHRpb25zKVxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiJXM6IEJFS0xFTk1FWUVOIFVZR1VOU1VaTFVLOyBmc2NrIMOHQUxJxZ5USVJNQUxJU0lOSVouXG4iCisiXHQoLWEgdmUgLXAgc2XDp2VuZWtsZXJpbmkga3VsbGFubWFkYW4pXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIkt1bGxhbsSxbGFuIGJlbGxlazogJWRrLyVkayAoJWRrLyVkayksICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHUsICIKK21zZ3N0ciAiS3VsbGFuxLFsYW4gYmVsbGVrOiAlZCwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lOiAlNS4yZi8lNS4yZi8lNS4yZlxuIgorbXNnc3RyICJ6YW1hbjogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICJnZcOnZW4gc8O8cmU6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGlub2RlICVsdSBpbiAlcyIKK21zZ3N0ciAiLSAlbGQgZMO8xJ/DvG3DvCAlcyBkZW4gb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3V0aWwuYzo0NzUgZTJmc2NrL3V0aWwuYzo0ODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICItICVsZCBkw7zEn8O8bcO8ICVzIGUgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3V0aWwuYzo2MzcKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIHplcm9pemluZyBidWZmZXIiCittc2dzdHIgIi0gc8SxZsSxcmxhbWEgdGFtcG9uIGJlbGxlxJ9pIGF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg1Cittc2dpZCAiVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb2RpZmllZCB3aGlsZSBmc2NrIGlzIHJ1bm5pbmcuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2OQorIywgZnV6enkKK21zZ2lkICJkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorbXNnc3RyICJiaXR0aSAgICAgICAgICAgICAgICAgICAgICAgICAgIC5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSBtYXhfYmFkX2Jsb2Nrc11cbiIKKyIgICAgICAgWy1wIG51bV9wYXNzZXNdIFstdCB0ZXN0X3BhdHRlcm4gWy10IHRlc3RfcGF0dGVybiBbLi4uXV1dXG4iCisiICAgICAgIGRldmljZSBbbGFzdF9ibG9jayBbZmlyc3RfYmxvY2tdXVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFstYiBibG9rX2JveXVdIFstaSBnaXJkaV9kb3N5YXPEsV0gWy1vIMOnxLFrdMSxX2Rvc3lhc8SxXVxuIgorIiAgICAgICAgICBbLXN2d25mXSBbLWMgYmxva19zYXnEsXPEsV0gWy1wIGdlw6dpxZ9fc2F5xLFzxLFdXG4iCisiICAgICAgICAgIFstdCBkZW5lbWVfxZ9hYmxvbnUgWy10IGRlbmVtZV/Fn2FibG9udVxuIgorIiBbLi4uXV1dXG4iCisiICAgICAgICAgIGF5Z8SxdCBbc29uX2Jsb2sgW2lsa19ibG9rXV1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBUaGUgLW4gYW5kIC13IG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzOiAtbiB2ZSAtdyBzZcOnZW5la2xlcmkgYmlyYmlyaW5kZW4gYmHEn8SxbXPEsXpkxLFyLlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzIyCittc2dpZCAiVGVzdGluZyB3aXRoIHJhbmRvbSBwYXR0ZXJuOiAiCittc2dzdHIgIlJhc2dlbGUgxZ9hYmxvbiBpbGUgc8SxbmFuxLF5b3I6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAiU8SxbmFtYSDFn2FibG9udTogMHgiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgImVyacWfaW0gc8SxcmFzxLFuZGEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzgzCisjLCBjLWZvcm1hdAorbXNnaWQgIldlaXJkIHZhbHVlICglbGQpIGluIGRvX3JlYWRcbiIKK21zZ3N0ciAiZG9fcmVhZCBpw6dpbiB0dWhhZiBkZcSfZXIgKCVsZClcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NjkKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICJleHQyZnNfc3luY19kZXZpY2Ugc8SxcmFzxLFuZGEiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDg5IG1pc2MvYmFkYmxvY2tzLmM6NzQ5Cittc2dpZCAid2hpbGUgYmVnaW5uaW5nIGJhZCBibG9jayBsaXN0IGl0ZXJhdGlvbiIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2sgbGlzdGVzaSB5aW5lbGVtZXNpbmUgYmHFn2xhbsSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTAzIG1pc2MvYmFkYmxvY2tzLmM6NjAyIG1pc2MvYmFkYmxvY2tzLmM6NzU5Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyBidWZmZXJzIgorbXNnc3RyICItIHRhbXBvbiBiZWxsZWsgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiJWx1IGlsZSAlbHUgYXJhc8SxbmRha2kgYmxva2xhciBkZW5ldGxlbml5b3JcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTIKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICJIYXRhbMSxIGJsb2tsYXIgc2FsdC1va3VudXIga2lwdGUgZGVuZXRsZW5peW9yXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTIxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKHJlYWQtb25seSB0ZXN0KTogIgorbXNnc3RyICJIYXRhbMSxIGJsb2tsYXIgacOnaW4gZGVuZXRsZW5peW9yIChzYWx0LW9rdSB0ZXN0aSk6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjggbWlzYy9iYWRibG9ja3MuYzo2MzQgbWlzYy9iYWRibG9ja3MuYzo2NzYKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODIyCittc2dpZCAiVG9vIG1hbnkgYmFkIGJsb2NrcywgYWJvcnRpbmcgdGVzdFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjA5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIkhhdGFsxLEgYmxva2xhciBva3UteWF6IGtpcGluZGUgZGVuZXRsZW5peW9yXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjExIG1pc2MvYmFkYmxvY2tzLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gYmxvY2sgJWx1IHRvICVsdVxuIgorbXNnc3RyICJCbG9rICVsdSBkYW4gJWx1IHlhIGthZGFyXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIk9rdW51eW9yIHZlIGthcsWfxLFsYcWfdMSxcsSxbMSxeW9yOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NzcxCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gbm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgbW9kZVxuIgorbXNnc3RyICJIYXRhbMSxIGJsb2tsYXIgdmVyaSBib3ptYXlhbiBva3UteWF6IGtpcGluZGUgZGVuZXRsZW5peW9yXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzc3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIkhhdGFsxLEgYmxva2xhciBkZW5ldGxlbml5b3IgKHnEsWvEsWPEsSBvbG1heWFuIG9rdS15YXogc8SxbmFtYXPEsSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIktlc21lIHlha2FsYW5kxLEsIGthbGTEsXLEsWzEsXlvclxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJkdXJpbmcgdGVzdCBkYXRhIHdyaXRlLCBibG9jayAlbHUiCittc2dzdHIgInZlcmkgeWF6bWEgZGVuZW1lc2kgc8SxcmFzxLFuZGEsIGJsb2sgJWx1IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk4OCBtaXNjL3V0aWwuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyBiYcSfbGFuZMSxOyAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTkwCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuICBIb3BlIC9ldGMvbXRhYiBpcyBpbmNvcnJlY3QuXG4iCittc2dzdHIgImJhZGJsb2NrcyBuJ29sdXJzYSBvbHN1biDDp2FsxLHFn3TEsXLEsWxhY2FrLiDEsG7Fn2FsbGFoIC9ldGMvbXRhYiB5YW5sxLHFn3TEsXIuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICInYmFkYmxvY2tzJyDDp2FsxLHFn3TEsXJtYWsgZ8O8dmVubGkgZGXEn2lsIVxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDAgbWlzYy91dGlsLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGFwcGFyZW50bHkgaW4gdXNlIGJ5IHRoZSBzeXN0ZW07ICIKK21zZ3N0ciAiJXMgZ8O2csO8bsO8xZ9lIGfDtnJlIHNpc3RlbSB0YXJhZsSxbmRhbiBrdWxsYW7EsWzEsXlvcjsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwMDMKK21zZ2lkICJiYWRibG9ja3MgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAiYmFkYmxvY2tzIG4nb2x1cnNhIG9sc3VuIMOnYWzEscWfdMSxcsSxbGFjYWsuXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAyMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyAtICVzIgorbXNnc3RyICJibG9rIHV6dW5sdcSfdSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICJzxLFuYW1hIMWfYWJsb251IC0gJXMgacOnaW4gYmVsbGVrIGF5csSxbGFtYWTEsSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTYzCittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlNhbHQgb2t1bnVyIGtpcHRlIGVuIMOnb2sgYmlyIHPEsW5hbWEgxZ9hYmxvbnUgYmVsaXJ0aWxlYmlsaXIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2OQorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlNhbHQgb2t1bnVyIGtpcHRlIHJhc2dlbGUgc8SxbmFtYSDFn2FibG9udSBrdWxsYW7EsW3EsW5hIGl6aW4gdmVyaWxtZXoiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICJBeWfEsXQgYWxhbsSxIHNhcHRhbmFtYWTEsTsgRWxsZSBiaXIgZGXEn2VyIGdpcm1lbGlzaW5pelxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExODkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGRldmljZSBzaXplIgorbXNnc3RyICItIGF5Z8SxdCBhbGFuxLEgc2FwdGFubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE5NAorIywgZnV6enkKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICJCbG9rbGFyIHllbmlkZW4ga29udW1sYW5kxLFyxLFsxLF5b3IiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorIywgZnV6enkKK21zZ2lkICJmaXJzdCBibG9jayIKK21zZ3N0ciAixLBsayB2ZXJpIGJsb8SfdSA9ICV1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydGluZyBibG9jayAoJWx1KTogbXVzdCBiZSBsZXNzIHRoYW4gJWx1IgorbXNnc3RyICJiYcWfbGFuZ8Sxw6cgYmxvxJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjU5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAiaGF0YWzEsSBibG9rbGFyIGxpc3Rlc2kgYmVsbGVrdGUgb2x1xZ90dXJ1bHVya2VuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNzQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICJiZWxsZWt0ZWtpIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpbmUgZWtsZW5pcmtlbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiR2XDp2nFnyB0YW1hbWxhbmTEsSwgJXUgaGF0YWzEsSBibG9rIGJ1bHVuZHUuXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhQ2NEZGVpanNTdV0gWy12IHZlcnNpb25dIGZpbGVzLi4uXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogJXMgWy1SVl0gWy0rPUFhY0RkaWpzU3VdIFstdiBzw7xyw7xtXSBkb3N5YWxhci4uLlxuIgorIlxuIgorIkRvc3lhIMO2emVsbGlrbGVyaW5pIGRlxJ9pxZ90aXJtZWt0ZSBrdWxsYW7EsWzEsXIuXG4iCisiXG4iCisiU2VtYm9saWsga2lwIHNlw6dlbmVrbGVyaTpcbiIKKyJcbiIKKyJCdSBraXB0ZSDDtnplbGxpa2xlciArIGlsZSBtZXZjdXQgc2XDp2VuZWtsZXJlIGVrbGVuaXIsIC0gaWxlIGthbGTEsXLEsWzEsXIsXG4iCisiPSBpbGUgc2FkZWNlIGJlbGlydGlsZW4gw7Z6ZWxsaWtsZXIgacOnZXJpbGlyLlxuIgorIlxuIgorIiAgIEE6IGVyacWfaW0gemFtYW7EsSBnw7xuY2VsbGVubWV6XG4iCisiICAgYTogc2FkZWNlIGRvc3lhbsSxbiBzb251bmEgZWtsZW1lIHlhcMSxbGFiaWxpci4gcm9vdCBkZcSfacWfdGlyZWJpbGlyLlxuIgorIiAgIGM6IHPEsWvEscWfdMSxcsSxbG3EscWfOyBkb3N5YW7EsW4gb2t1bWEteWF6bWEgc8SxcmFzxLFuZGFraSBhw6fEsWxtYXPEsS9zxLFrxLHFn3TEsXLEsWxtYXPEsVxuIgorIiAgICAgIMOnZWtpcmRlxJ9pbiBkZW5ldGltaW5kZWRpci5cbiIKKyIgICBkOiBkw7Zrw7xtbGVubWV6OyBkdW1wIHV5Z3VsYW1hc8SxbmRhbiBldGtpbGVubWV6LlxuIgorIiAgIEQ6IGJpciBkaXppbmUgdXlndWxhbsSxciB2ZSBkaXppbmRla2kgZGXEn2nFn2lrbGlrbGVyIGXFn3phbWFubMSxIGnFn2xlbmlyLlxuIgorIiAgIGk6IGRlxJ9pxZ9tZXo7IGRvc3lhIGnDp2VyacSfaSBzaWxpbmVtZXosIHlhesSxbGFtYXosIGRvc3lheWEgYmHEnyBvbHXFn3R1cnVsYW1helxuIgorIiAgICAgIHZlIGlzbWkgZGXEn2nFn3RpcmlsZW1lei4gU2FkZWNlIHJvb3QgYnUgw7Z6ZWxsacSfaSBkZcSfacWfdGlyZWJpbGlyLlxuIgorIiAgIGo6IGfDvG5sw7xrbGVtZTsgZG9zeWEgc2lzdGVtaSBleHQzIG9sYXJhayBiYcSfbGFubcSxxZ9zYSBidSDDtnplbGxpayBldGtpc2l6ZGlyXG4iCisiICAgczogc2lsaW5tZSBnw7x2ZW5sacSfaTsgYnUgw7Z6ZWxsaWsgdmVyaWxlbiBiaXIgZG9zeWEgc2lsaW5kacSfaW5kZSB2ZXJpIGFsYW7EsVxuIgorIiAgICAgIHPEsWbEsXJsYXJsYSBkb2xkdXJ1bHVyXG4iCisiICAgUzogZcWfemFtYW5sxLEgZ8O8bmNlbGxlbWVsZXI7IGJ1IMO2emVsbGnEn2kgacOnZXJlbiBiaXIgZG9zeWF5YSB0w7xtXG4iCisiICAgICAgZGXEn2nFn2lrbGlrbGVyIGFuxLFuZGEgeWF6xLFsxLFyLCBzaXN0ZW1pbiAnc3luYycgc2XDp2VuZcSfaSBpbGUgYmHEn2xhbm1hc8SxbmFcbiIKKyIgICAgICBlxZ9kZcSfZXIgw7Z6ZWxsaWsgc2HEn2xhclxuIgorIiAgIHU6IHNpbGluZW1lbWV6bGlrOyBidSBkb3N5YSBzaWxpbmRpxJ9pbmRlIGnDp2VyacSfaSBzYWtsYW7EsXIsIHNpbGVjZWtcbiIKKyIgICAgICBrdWxsYW7EsWPEsXlhIHNpbGlubWUgc8SxcmFzxLFuZGEgc29ydWxtYXPEsW7EsSBzYcSfbGFyLlxuIgorIlxuIgorIlNlw6dlbmVrbGVyOlxuIgorIiAgIC1SICAgICAgICAgZGl6aW5sZXIgdmUgacOnZXJpa2xlcmluZGUgYXJkxLHFn8SxayBpxZ9sZW0geWFwxLFsxLFyXG4iCisiICAgLVYgICAgICAgICBzw7xyw7xtIGJpbGdpc2kgaWxlIGnFn2xlbSBoYWtrxLFuZGEgZGFoYSBheXLEsW50xLFsxLEgYmlsZ2kgdmVyaWxpclxuIgorIiAgIC12IHPDvHLDvG0gICBkb3N5YW7EsW4gc8O8csO8bS/DvHJldGltIG51bWFyYXPEsSBiZWxpcnRpbGlyXG4iCisiXG4iCisiw4dldmlyaSBoYXRhbGFyxLFuxLEgPGdudS10ckBiZWxnZWxlci5vcmc+IGFkcmVzaW5lIGJpbGRpcmluaXouXG4iCisiXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB2ZXJzaW9uIC0gJXNcbiIKK21zZ3N0ciAic8O8csO8bSBoYXRhbMSxIC0gJXNcbiIKKworIzogbWlzYy9jaGF0dHIuYzoyMDEgbWlzYy9sc2F0dHIuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHN0YXQgJXMiCittc2dzdHIgIi0gc3RhdCAlcyB5YXDEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9jaGF0dHIuYzoyMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiLSAlcyDDvHplcmluZGUgYmF5cmFrbGFyIG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjEzIG1pc2MvY2hhdHRyLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzIG9mICVzIHNldCBhcyAiCittc2dzdHIgIkJlbGlybGVuZW4gJXMgYmF5cmFrbGFyxLE6ICIKKworIzogbWlzYy9jaGF0dHIuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiLSAlcyDDvHplcmluZGUgYmF5cmFrbGFyIGJlbGlybGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiJXMgc8O8csO8bcO8ICVsdSBvbGFyYWsgYmVsaXJsZW5kaVxuIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHZlcnNpb24gb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRlIHPDvHLDvG0gYmVsaXJsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJjaGF0dHJfZGlyX3Byb2MgacWfbGV2aW5kZSBkb3N5YSB5b2x1IGRlxJ9pxZ9rZW5pbmUgeWVyIGF5csSxbGFtYWTEsSIKKworIzogbWlzYy9jaGF0dHIuYzozMDYKK21zZ2lkICI9IGlzIGluY29tcGF0aWJsZSB3aXRoIC0gYW5kICtcbiIKK21zZ3N0ciAiPSBpbGUgKyB2ZSAtIHV5dW1zdXpcbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTQKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiJy12JywgPSwgLSB2ZXlhICsga3VsbGFuxLFsbWFsxLFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbLWJmaGl4Vl0gWy1vYiBzw7xwZXJibG9rXSBbLW9CIGJsb2tib3l1XSBheWfEsXRcbiIKKyJcbiIKKyJEb3N5YSBzaXN0ZW1pIGJpbGdpbGVyaW5pIGTDtmvDvG1sZXIuXG4iCisiXG4iCisiU2XDp2VuZWtsZXI6XG4iCisiICAgLWIgICAgICAgICAgICAgIGhhdGFsxLEgb2xhcmFrIGltbGVubWnFnyBibG9rbGFyxLEgZ8O2c3RlcmlyXG4iCisiICAgLWYgICAgICAgICAgICAgIGRvc3lhIHNpc3RlbWkgZHVtcGUyZnMnaW4gYmlsbWVkacSfaSDDtnplbGxpa2xlciBpw6dlcnNlIGJpbGVcbiIKKyIgICAgICAgICAgICAgICAgICAgYmlsZ2lsZXJpbiBkw7Zrw7xtbGVubWVzaW5pIHNhxJ9sYXJcbiIKKyIgICAtaCAgICAgICAgICAgICAgZ3J1cCB0YW7EsW1sYXnEsWPEsWxhcsSxIGRlxJ9pbCBzYWRlY2Ugc8O8cGVyYmxvayBiaWxnaWxlcmluaVxuIgorIiAgICAgICAgICAgICAgICAgICBnw7ZzdGVyaXJcbiIKKyIgICAtaSAgICAgICAgICAgICAgYmVsaXJ0aWxlbiBheWfEsXQgacOnaW4gZTJpbWFnZSB0YXJhZsSxbmRhbiBvbHXFn3R1cnVsbXXFnyBkaXNrXG4iCisiICAgICAgICAgICAgICAgICAgIGfDtnLDvG50w7xzw7wgZG9zeWFzxLFuxLFuIHZlcmlsZXJpbmkgZ8O2c3RlcmlyXG4iCisiICAgLXggICAgICAgICAgICAgIGF5csSxbnTEsWzEsSBvbGFyYWsgZ3J1cGxhcsSxbiBiaWxnaWxlcmkgZ8O2c3RlcmlsaXJcbiIKKyIgICAtViAgICAgICAgICAgICAgc8O8csO8bSBiaWxnaWxlcmkgZ8O2c3RlcmlsaXIgdmUgw6fEsWthclxuIgorIiAgIC1vYiBzw7xwZXJibG9rICAgZG9zeWEgc2lzdGVtaW5pIHRhbsSxbWxheWFuIHPDvHBlcmJsb2sgYmVsaXJ0aWxpclxuIgorIiAgIC1vQiBibG9rYm95dSAgICBkb3N5YSBzaXN0ZW1pbmkgdGFuxLFtbGF5YW4gYmxvayB1enVubHXEn3UgYmVsaXJ0aWxpclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgImJsb2NrcyIKK21zZ3N0ciAiYmJsb2siCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIkdydXAgJWx1OiAgKEJsb2tsYXI6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKEVYUEVDVEVEIDB4JTA0eCkiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiLCB1bnVzZWQgaW5vZGVzICV1XG4iCittc2dzdHIgImTDvMSfw7xtIHNhecSxc8SxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICVzIHN1cGVyYmxvY2sgYXQgIgorbXNnc3RyICIgICAlcyBzw7xwZXJibG9rOiAgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAiICDEsGxrIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICJZZWRlayIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICIsIEdyb3VwIGRlc2NyaXB0b3JzIGF0ICIKK21zZ3N0ciAiIgorIiBcbiIKKyIgIEdydXAgdGFuxLFtbGF5xLFjxLE6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIFllZGVrIEdEVCBibG9rbGFyxLEgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIgorIiBcbiIKKyIgIEdydXAgdGFuxLFtbGF5xLFjxLE6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiAgICBCbG9rIGJpdGXFn2xlbWk6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzgKK21zZ2lkICIsIElub2RlIGJpdG1hcCBhdCAiCittc2dzdHIgIiIKKyIgXG4iCisiICAgRMO8xJ/DvG0gYml0ZcWfbGVtaTogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0MgorbXNnaWQgIiIKKyJcbiIKKyIgIElub2RlIHRhYmxlIGF0ICIKK21zZ3N0ciAiIgorIlxuIgorIiAgICAgRMO8xJ/DvG0gdGFibG9zdTogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKyJcbiIKKyIgICVkIHNlcmJlc3QgYmxvaywgJWQgc2VyYmVzdCBkw7zEn8O8bSwgJWQgZGl6aW5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgICBTZXJiZXN0IGJsb2tsYXI6ICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNjkKK21zZ2lkICIgIEZyZWUgaW5vZGVzOiAiCittc2dzdHIgIiAgU2VyYmVzdCBkw7zEn8O8bWxlcjogICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwMAorbXNnaWQgIndoaWxlIHByaW50aW5nIGJhZCBibG9jayBsaXN0IgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpIGJhc8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrczogJXUiCittc2dzdHIgIkhhdGFsxLEgYmxva2xhcjogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzA2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICItIGfDvG5sw7xrIGTDvMSfw7xtw7wgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMzOQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBvcGVuaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIi0gZ8O8bmzDvGsgZMO8xJ/DvG3DvCBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzQ1CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAiLSBnw7xubMO8ayBkb3N5YXPEsSBzw7xwZXJibG/En3Ugb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAiR8O8bmzDvGsga3VsbGFuxLFjxLFsYXLEsTogICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiR8O8bmzDvGsgYm95dXR1OiAgICAgICAgICAgICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIlxuIgorIkfDvG5sw7xrIGJsb8SfdSBib3l1OiAgICAgICAgJXVcbiIKKyJHw7xubMO8ayB1enVubHXEn3U6ICAgICAgICAgICV1XG4iCisiR8O8bmzDvGsgaWxrIGJsb8SfdTogICAgICAgICAldVxuIgorIkfDvG5sw7xrIHPEsXJhbGFtYXPEsTogICAgICAgIDB4JTA4eFxuIgorIkfDvG5sw7xrIGJhxZ9sYW5nxLFjxLE6ICAgICAgICAldVxuIgorIkfDvG5sw7xrIGt1bGxhbsSxY8SxIHNhecSxc8SxOiAgJWx1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZXJybm86ICAgICAgICAgICAgJWRcbiIKK21zZ3N0ciAiR8O8bmzDvGsga3VsbGFuxLFjxLFsYXLEsTogICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDEgbWlzYy90dW5lMmZzLmM6MjIyCittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIi0gZ8O8bmzDvGsgZG9zeWFzxLEgc8O8cGVyYmxvxJ91IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICJHw7xubMO8ayBkb3N5YXPEsSBzw7xwZXJibG/En3UgdGFuxLFtIG51bWFyYXPEsSBidWx1bmFtYWTEsSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiR8O8bmzDvGsgYmxvxJ91IGJveXU6ICAgICAgICAldVxuIgorIkfDvG5sw7xrIHV6dW5sdcSfdTogICAgICAgICAgJXVcbiIKKyJHw7xubMO8ayBpbGsgYmxvxJ91OiAgICAgICAgICV1XG4iCisiR8O8bmzDvGsgc8SxcmFsYW1hc8SxOiAgICAgICAgMHglMDh4XG4iCisiR8O8bmzDvGsgYmHFn2xhbmfEsWPEsTogICAgICAgICV1XG4iCisiR8O8bmzDvGsga3VsbGFuxLFjxLEgc2F5xLFzxLE6ICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiR8O8bmzDvGsga3VsbGFuxLFjxLFsYXLEsTogICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjYgbWlzYy90dW5lMmZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiU2XDp2VuZWtsZXJpIMOnw7Z6w7xtbGVtZWsgacOnaW4gYmVsbGVrIGF5csSxbGFtYWTEsSFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJHZcOnZXJzaXogc8O8cGVyIGJsb2sgcGFyYW1ldHJlc2k6ICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBibG9ja3NpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJHZS5lcnMseiBibG9rIGJveXV0IHBhcmFtZXRyZXNpOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiQm96dWsgZ2VuacWfbGV0aWxtacWfIHNlw6dlbmVrKGxlcikgYmVsaXJ0aWxkaTogJXNcbiIKKyJcbiIKKyJVemF0xLFsbcSxxZ8gc2XDp2VuZWtsZXIgdmlyZ8O8bGxlIGF5csSxbMSxciB2ZSBiaXIgZcWfaXR0aXIgKCc9Jykgc2ltZ2VzaSBpbGUgYXlhcmxhbmFiaWxlblxuIgorIlx0YmlyIGFyZ8O8bWFuIGFsYWJpbGlybGVyLlxuIgorIlxuIgorIkdlw6dlcmxpIGdlbmnFn2xldGlsbWnFnyBzZcOnZW5la2xlcjpcbiIKKyJcdHN1cGVyYmxvY2s9PHPDvHBlcmJsb2sgc2F5xLFzxLE+XG4iCisiXHRibG9ja3NpemU9PGJsb2sgYm95dXR1PlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTU0IG1pc2MvbWtlMmZzLmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0JXMga3VsbGFuxLFsxLF5b3JcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU5MCBtaXNjL2UyaW1hZ2UuYzoxMzI2IG1pc2MvdHVuZTJmcy5jOjE5MjMKKyM6IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJHZcOnZXJsaSBzw7xwZXJibG9rIGJ1bHVuYW1hZMSxLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiVzOiAlczogYml0ZcWfbGVtbGVyIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVzXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRYV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbLXJzSV0gQVlHSVQgRE9TWUFcbiIKKyJcbiIKKyJBWUdJVCDDvHplcmluZGVraSBleHQyIGRvc3lhIHNpc3RlbWluaW4ga3JpdGlrIHZlcmlsZXJpbmkgRE9TWUF5YSBrYXlkZWRlci5cbiIKKyLDlnJuOiA0R0IgbMSxayBiaXIgc2lzdGVtIGnDp2luIHlha2xhxZ/EsWsgM01CIGzEsWsgYmlyIGfDtnLDvG50w7wgZG9zeWFzxLFcbiIKKyJvbHXFn3R1cnVsdXIuIEJ1IGRvc3lhLCBkb3N5YSBzaXN0ZW1pbmkga3VydGFybWFrIGnDp2luIHV6bWFubGFyY2FcbiIKKyJrdWxsYW7EsWxhYmlsaXIuIEJlbGxpIGFyYWzEsWtsYXJsYSBidSBkb3N5YW7EsW4gYmHFn2thIGJpciBkb3N5YSBzaXN0ZW1pbmVcbiIKKyJrYXlkZWRpbG1lc2kgw7ZuZXJpbGlyLiAtciBzZcOnZW5lxJ9pIHRlbWVsIGJpw6dpbWxpIGJpciBkb3N5YSDDvHJldGlyLCDDp29rIGLDvHnDvGtcbiIKKyJvbGFjYcSfxLFuZGFuIMO2bmVyaWxtZXouIERPU1lBIHllcmluZSAtIHZlcmlsaXJzZSBkb3N5YSBzdGFuZGFydCDDp8Sxa3TEsXlhXG4iCisieWF6xLFsxLFyLlxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGhlYWRlciBzaXplIGlzIGJpZ2dlciB0aGFuIHdydF9zaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTQ0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgaGVhZGVyIGJ1ZmZlclxuIgorbXNnc3RyICJCYcWfbMSxayBpw6dpbiB0YW1wb24gYmVsbGVrIGF5csSxbGFtYWTEsVxuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNzQKK21zZ2lkICJ3aGlsZSB3cml0aW5nIHN1cGVyYmxvY2siCittc2dzdHIgIi0gc8O8cGVyYmxvxJ9hIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4MgorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIi0gZMO8xJ/DvG0gdGFibG9zdW5hIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE4OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgYmxvY2sgYml0bWFwIgorbXNnc3RyICItIGJsb2sgYml0ZcWfbGVtaSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiLSBkw7zEn8O8bSBiaXRlxZ9sZW1pIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGNvbnZlcnQgcWNvdzIgaW1hZ2UgKCVzKSBpbnRvIHJhdyBpbWFnZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBvcGVuICVzXG4iCittc2dzdHIgImUybGFiZWw6ICVzIGHDp8SxbGFtxLF5b3JcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IHNlZWsgdG8gc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBzw7xwZXJibG9rYSBlcmnFn2lsZW1peW9yXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHJlYWRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICJlMmxhYmVsOiBzw7xwZXJibG9rIG9rdW51cmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogbm90IGFuIGV4dDIgZmlsZXN5c3RlbVxuIgorbXNnc3RyICJlMmxhYmVsOiBiaXIgZXh0MiBkb3N5YSBzaXN0ZW1pIGRlxJ9pbFxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICJVeWFyxLE6IGV0aWtldCDDp29rIHV6dW4sIGvEsXJwxLFsxLF5b3IuXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IHPDvHBlcmJsb8SfYSB5aW5lIGVyacWfaWxlbWVkaVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IHPDvHBlcmJsb8SfYSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1XG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiIgorIiBcbiIKKyJLdWxsYW7EsW3EsTogZTJsYWJlbCBBWUdJVCBbZXRpa2V0XVxuIgorIkFZR0lUIGLDtmzDvG0gaXNtaW5pIGF0YW1hay9va3VtYWsgacOnaW4ga3VsbGFuxLFsxLFyLlxuIgorIlxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiLSBkb3N5YSBzaXN0ZW1pIHRhYmxvbGFyxLEgYXlyxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX29wZW4gJXNcbiIKK21zZ3N0ciAiJXMgYcOnxLFsxLFya2VuIgorCisjOiBtaXNjL2UydW5kby5jOjE2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICItICVzJ2luIGJhxJ9sxLEgb2x1cCBvbG1hZMSxxJ/EsSBzYXB0YW5tYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dS4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gJXNcbiIKK21zZ3N0ciAiLSAlcyBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJVWUFSSTogJXMgYcOnxLFsYW1hZMSxOiAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogYmFkIGZvcm1hdCBvbiBsaW5lICVkIG9mICVzXG4iCittc2dzdHIgIlVZQVJJOiAlMiRzIG5pbiAlMSRkLiBzYXTEsXLEsW5kYSBiacOnZW0gaGF0YXPEsVxuIgorCisjOiBtaXNjL2ZzY2suYzozNzAKKyMsIGZ1enp5Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdXIgL2V0Yy9mc3RhYiBkb2VzIG5vdCBjb250YWluIHRoZSBmc2NrIHBhc3Nub1xuIgorIlx0ZmllbGQuICBJIHdpbGwga2x1ZGdlIGFyb3VuZCB0aGluZ3MgZm9yIHlvdSwgYnV0IHlvdVxuIgorIlx0c2hvdWxkIGZpeCB5b3VyIC9ldGMvZnN0YWIgZmlsZSBhcyBzb29uIGFzIHlvdSBjYW4uXG4iCisiXG4iCittc2dzdHIgIiIKKyIgKioqRMSwS0tBVDogL2V0Yy9mc3RhYiBkb3N5YW7EsXpkYSBmc2NrIGdlw6dpxZ8gc2F5xLFzxLEgKHBhc3NubylcbiIKKyIgICAgICAgICAgICBhbGFuxLEgIGJ1bHVubXV5b3IuIEJ1IHNlZmVybGlrIGnFn2xlbSB5YXDEsWxhY2FrLFxuIgorIiAgICAgICAgICAgIGFuY2FrIGVuIGvEsXNhIHphbWFuZGEgL2V0Yy9mc3RhYiBkb3N5YW7EsXrEsVxuIgorIiAgICAgICAgICAgIGTDvHplbHRtZWxpc2luaXouXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiB5b2tcbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IGJla2xpeW9yOiBCYcWfa2EgYXN0IHPDvHJlw6cgeW9rPyE/XG4iCisKKyM6IG1pc2MvZnNjay5jOjYxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nLi4uICVzIGZvciBkZXZpY2UgJXMgZXhpdGVkIHdpdGggc2lnbmFsICVkLlxuIgorbXNnc3RyICJVeWFyxLEuLi4gJXMgJXMgYXlnxLF0xLEgacOnaW4gJWQgc2lueWFsaSBpbGUgw6fEsWt0xLEuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogZHVydW0gJXgsIGFzbGEgb2xtYW1hbMSxeWTEsS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICIlcyBpbGUgYml0dGkgKMOnxLFrxLHFnyBkdXJ1bXU6ICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzo3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IEVycm9yICVkIHdoaWxlIGV4ZWN1dGluZyBmc2NrLiVzIGZvciAlc1xuIgorbXNnc3RyICIlczogSGF0YSAlZDogZnNjay4lcyAlcyBpw6dpbiDDp2FsxLF0xLFyxLFsxLFya2VuIG9sdcWfdHUuXG4iCisKKyM6IG1pc2MvZnNjay5jOjc0MgorbXNnaWQgIiIKKyJFaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIGZpbGVzeXN0ZW0gdHlwZXMgcGFzc2VkIHRvIC10IG11c3QgYmUgcHJlZml4ZWRcbiIKKyJ3aXRoICdubycgb3IgJyEnLlxuIgorbXNnc3RyICIiCisiLXQgaWxlIGlzdGVyIHTDvG0gZG9zeWEgc2lzdGVtaSB0w7xybGVyaSBiZWxpcnRpbHNpbiBpc3RlciBiaXIgZG9zeWEgc2lzdGVtaVxuIgorInTDvHLDvCBiZWxpcnRpbG1lc2luLCB5YSAnbm8nIHlhIGRhICchJyDDtm5la2kga3VsbGFuxLFsbWFsxLFkxLFyLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSB0w7xybGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzIG51bWJlclxuIgorbXNnc3RyICIlczogL2V0Yy9mc3RhYiBpw6dlcmlzaW5kZWtpIGJvenVrIHNhdMSxciBhdGxhbsSxeW9yOiBzxLFmxLFyIG9sbWF5YW4gZnNjayBnZcOnacWfIHNhecSxc8SxIGlsZSBiYcSfbGFtYSBhdGFtYXPEsVxuIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICJmc2NrOiAlcyBkZW5ldGxlbmVtaXlvcjogZnNjay4lcyB5b2tcbiIKKworIzogbWlzYy9mc2NrLmM6OTY3Cittc2dpZCAiQ2hlY2tpbmcgYWxsIGZpbGUgc3lzdGVtcy5cbiIKK21zZ3N0ciAiVMO8bSBkb3N5YSBzaXN0ZW1sZXJpIGRlbmV0bGVuaXlvci5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS1iZWtsZW1lZGUtLSAoJWQuIGdlw6dpxZ8pXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNzgKK21zZ2lkICJVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdIFtmaWxlc3lzIC4uLl1cbiIKK21zZ3N0ciAiS3VsbGFuxLFtxLE6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBmc3R5cGVdIFtmcy1vcHRpb25zXSBbZmlsZXN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IGF5Z8SxdCBzYXnEsXPEsSDDp29rIGZhemxhXG4iCisKKyM6IG1pc2MvZnNjay5jOjExNTMgbWlzYy9mc2NrLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogdG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiBhcmfDvG1hbiBzYXnEsXPEsSBmYXpsYVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICIiCisiS3VsbGFuxLFtxLE6ICVzIFstUlZhZHZdIFtkb3N5YWxhci4uLl1cbiIKKyJcbiIKKyJEb3N5YWxhcsSxbiDDtnplbGxpa2xlcmluaSBsaXN0ZWxlci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtYSAgICAnLicgaWxlIGJhxZ9sYXlhbmxhciBkYWhpbCBkaXppbmxlcmluIGnDp2luZGVraSB0w7xtIGRvc3lhbGFyxLEgbGlzdGVsZXJcbiIKKyIgICAtZCAgICBkb3N5YWxhciBnaWJpIGRpemlubGVyaSBkZSBsaXN0ZWxlclxuIgorIiAgIC1SICAgIGRpemlubGVyIHZlIGnDp2VyaWtsZXJpIGFyZMSxxZ/EsWsgb2xhcmFrIGxpc3RlbGVuaXJcbiIKKyIgICAtViAgICBzw7xyw7xtIGJpbGdpbGVyaSBnw7ZzdGVyaWxpclxuIgorIiAgIC12ICAgIGRvc3lhbGFyxLFuIHPDvHLDvG0vw7xyZXRpbSBudW1hcmFsYXLEsW7EsSBsaXN0ZWxlclxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIi0gJXMgw7x6ZXJpbmRlIGJheXJha2xhciBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL2xzYXR0ci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHJlYWRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAiLSAlcyDDvHplcmluZGUgc8O8csO8bSBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjExNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy1jb3VudF1cbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbc2XDp2VuZWtsZXJdIGF5Z8SxdCBbYmxvay1zYXnEsXPEsV1cbiIKKyJcbiIKKyJHZW5lbGxpa2xlIGJpciBkaXNrIGLDtmzDvG3DvCDDvHplcmluZGUgYmlyIGV4dDIgZG9zeWEgc2lzdGVtaSBvbHXFn3R1cnVyLlxuIgorImV4dDMgZGUgZGVzdGVrbGVubWnFn3Rpci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtYiAxMDI0fDIwNDh8NDA5NiAgICAgICAgIGRvc3lhIHNpc3RlbWluaW4gYmxvayB1enVubHXEn3UgYmVsaXJ0aWxpclxuIgorIiAgIC1jICAgICAgICAgICAgICAgICAgICAgICAgc2FsdC1va3VudXIga2lwdGUgaGF0YWzEsSBibG9rbGFyIGFyYW7EsXJcbiIKKyIgICAtZiBhZMSxbS1ib3l1ICAgICAgICAgICAgICBidSBzw7xyw7xtZGUgYWTEsW0gYm95dSBibG9rIGJveXVuYSBlxZ9pdHRpclxuIgorIiAgIC1nIGhlci1ncnVwdGFraS1ibG9rLXNhecSxc8SxXG4iCisiICAgLWkgZMO8xJ/DvG0tdXp1bmx1xJ91ICAgICAgICAgYm/FnyBiaXIgZGl6aW5pbiBkaXNrIMO8emVyaW5kZSBrYXBsYXlhYmlsZWNlxJ9pXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbiBrw7zDp8O8ayBhbGFuLCBiYXl0IGNpbnNpbmRlbiB2ZXJpbGlyLlxuIgorIiAgIC1qICAgICAgICAgICAgICAgICAgICAgICAgZXh0MyBkb3N5YSBzaXN0ZW1pIGnDp2luIGfDvG5sw7xrIGRvc3lhc8SxIG9sdcWfdHVydXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1KIGlsZSBnw7xubMO8ayBkb3N5YXPEsW7EsW4gw7Z6ZWxsaWtsZXJpIHZlcmlsbWV6c2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvc3lhIMO2bnRhbsSxbWzEsSDDtnplbGxpa2xyZWxlIG9sdcWfdHVydWx1ci5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIETEsEtLQVQ6IExpbnV4IMOnZWtpcmRlxJ9pbmRlIGV4dDMgZGVzdGXEn2kgeW9rc2FcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpc3RlbSBleHQyIG9sYXJhayBrdWxsYW7EsWxhYmlsaXJcbiIKKyIgICAtSiBnw7xubMO8ay1zZcOnZW5la2xlcmkgICAgIGfDvG5sw7xrIHNlw6dlbmVrbGVyaSBhxZ9hxJ/EsWRhIHZlcmlsbWnFn3RpclxuIgorIiAgIC1sIERPU1lBICAgICAgICAgICAgICAgICAgaGF0YWzEsSBibG9rbGFyIERPU1lBZGFuIG9rdW51clxuIgorIiAgIC1MIGV0aWtldCAgICAgICAgICAgICAgICAgZG9zeWEgc2lzdGVtaW5lIGJpciBldGlrZXQgYXRhclxuIgorIiAgIC1tIHllZGVrLWJsb2stecO8emRlc2kgICAgIHJvb3Qga3VsbGFuxLFjxLEgacOnaW4gYXlyxLFsYW4geWVkZWsgYmxva2xhcsSxblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgecO8emRlc2kuIMOWbnRhbsSxbWzEsSBkZcSfZXJpICUlNSB0aXJcbiIKKyIgICAtTSBzb24tYmHEn2xhbmFuLWRpemluICAgICBkb3N5YSBzaXN0ZW1pbmUgc29uIGJhxJ9sYW5hbiBkaXppbiBiZWxpcnRpbGlyXG4iCisiICAgLU4gZMO8xJ/DvG0tc2F5xLFzxLEgICAgICAgICAgIHNpc3RlbWRla2kgdG9wbGFtIGTDvMSfw7xtIHNhecSxc8SxIGJlbGlydGlsaXJcbiIKKyIgICAtbyBpxZ9sZXRpbS1zaXN0ZW1pICAgICAgICBkb3N5YSBzaXN0ZW1pbmluICdjcmVhdG9yIG9zJyBhbGFuxLFuYSB5YXrEsWxhY2FrXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZcSfZXIuIE5vcm1hbGRlIExpbnV4J3R1ci5cbiIKKyIgICAtTyDDtnplbGxpa1ssLi4uXSAgICAgICAgICBiZWxpcnRpbGVuIMO2emVsbGlrdGUgZG9zeWEgc2lzdGVtaSBvbHXFn3R1cnVyLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw5Z6ZWxsaWtsZXIgYcWfYcSfxLFkYSB2ZXJpbG1pxZ90aXIuXG4iCisiICAgLXEgICAgICAgICAgICAgICAgICAgICAgICBpxZ9sZW0gc8SxcmFzxLFuZGEgYmlsZ2kgdmVyaWxtZXpcbiIKKyIgICAtciBkb3N5YS1zaXN0ZW1pLXPDvHLDvG3DvCAgIDEuMiDDp2VraXJkZWtsZXIgZMSxxZ/EsW5kYSDDtm50YW7EsW1sxLEgZGXEn2VyaSAxIGRpclxuIgorIiAgIC1SIHJhaWRfc2XDp2VuZWtsZXJpICAgICAgIGJ1IHNlw6dlbmVrbGVyIGnDp2luIG1hbiBzYXlmYXPEsW5hIGJha8SxbsSxelxuIgorIiAgIC1TICAgICAgICAgICAgICAgICAgICAgICAga3VydGFybWEgYW1hY8SxeWxhIHNhZGVjZSBzw7xwZXIgYmxvayB2ZSBncnVwXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YW7EsW1sYXnEsWPEsWxhciB5ZW5pZGVuIHlhesSxbMSxclxuIgorIiAgIC12ICAgICAgICAgICAgICAgICAgICAgICAgacWfbGVtIHPEsXJhc8SxbmRhIGF5csSxbnTEsWzEsSBiaWxnaSB2ZXJpbGlyXG4iCisiICAgLVYgICAgICAgICAgICAgICAgICAgICAgICBzw7xyw7xtIGJpbGdpbGVyaSBnw7ZzdGVyaWxpciB2ZSDDp8Sxa2FyXG4iCisiR8O8bmzDvGtsZW1lIHNlw6dlbmVrbGVyaTpcbiIKKyIgICAgIHNpemU9Z8O8bmzDvGstdXp1bmx1xJ91ICAgICBHw7xubMO8ayBkb3N5YXPEsW7EsW4gdXp1bmx1xJ91IE1CIG9sYXJhayBiZWxpcnRpbGlyXG4iCisiICAgICBkZXZpY2U9ZMSxxZ8tZ8O8bmzDvGstYXlnxLF0xLEgQmHFn2thIGJpciBheWfEsXQgw7x6ZXJpbmRla2kgZ8O8bmzDvGsgZG9zeWFzxLFuxLFuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3VsbGFuxLFsbWFzxLEgc2HEn2xhbsSxci5cbiIKKyJcbiIKKyLDlnplbGxpa2xlcjpcbiIKKyIgICAgIHNwYXJzZV9zdXBlciAgICBZZWRlayBzw7xwZXJibG9rbGFyxLFuIHNhecSxc8SxbsSxIHPEsW7EsXJsYW1ha3RhIGt1bGxhbsSxbMSxci5cbiIKKyIgICAgIGZpbGV0eXBlICAgICAgICBEaXppbiBrYXnEsXRsYXLEsW5kYSBkb3N5YSB0w7xyw7wgYmlsZ2lzaSBzYWtsYW7EsXIuXG4iCisiICAgICBoYXNfam91cm5hbCAgICAgLWogc2XDp2VuZcSfaSBpbGUgYXluxLEuIEJpciBleHQzIGfDvG5sw7xrIGRvc3lhc8SxIG9sdcWfdHVydXIuXG4iCisiXG4iCisiw4dldmlyaSBoYXRhbGFyxLFuxLEgPGdudS10ckBiZWxnZWxlci5vcmc+IGFkcmVzaW5lIGJpbGRpcmluaXouXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAiw4dhbMSxxZ9hbiBrb211dDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICItICclcycgw6dhbMSxxZ90xLFyxLFsxLFya2VuIG9sZHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjMyCittc2dpZCAid2hpbGUgcHJvY2Vzc2luZyBsaXN0IG9mIGJhZCBibG9ja3MgZnJvbSBwcm9ncmFtIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBsaXN0ZXNpIGnFn2xlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIkJpcmluY2lsIHPDvHBlcmJsb2svZ3J1cCB0YW7EsW3EsSBhbGFuxLFuZGFraSBibG9rICVkIGhhdGFsxLFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIkJpciBkb3N5YSBzaXN0ZW1pIG9sdcWfdHVydWx1cmtlbiAldSBkZW4gJXUgeWUga2FkYXIgb2xhblxuIgorImJsb2tsYXIgaGF0YXPEsXogb2xtYWsgem9ydW5kYWTEsXIuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY0Cittc2dpZCAiQWJvcnRpbmcuLi4uXG4iCittc2dzdHIgIsOHxLFrxLFsxLF5b3IuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiVXlhcsSxOiBCbG9rICV1IGRla2kgeWVkZWsgc8O8cGVyYmxvay9ncnVwIHRhbsSxbWxhcsSxXG4iCisiXHRoYXRhbMSxIGJsb2tsYXIgacOnZXJpeW9yLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjMwMworbXNnaWQgIndoaWxlIG1hcmtpbmcgYmFkIGJsb2NrcyBhcyB1c2VkIgorbXNnc3RyICItIGhhdGFsxLEgYmxva2xhciBrdWxsYW7EsWxtxLHFnyBvbGFyYWsgaW1sZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAiRMO8xJ/DvG0gdGFibG9sYXLEsSB5YXrEsWzEsXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjM0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCB3cml0ZSAlZCBibG9ja3MgaW4gaW5vZGUgdGFibGUgc3RhcnRpbmcgYXQgJWxsdTogJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiUyJHUgZGUgYmHFn2xheWFuIGTDvMSfw7xtIHRhYmxvc3VuZGFraSAlMSRkIGJsb2sgeWF6xLFsYW1hZMSxOiAlMyRzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzU1IG1pc2MvbWtlMmZzLmM6MjI1NyBtaXNjL21rZTJmcy5jOjI1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiYml0dGkgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNjYKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAiLSBrw7ZrIGRpemluIG9sdcWfdHVydWx1cmtlbiBoYXRhIgorCisjOiBtaXNjL21rZTJmcy5jOjM3MworbXNnaWQgIndoaWxlIHJlYWRpbmcgcm9vdCBpbm9kZSIKK21zZ3N0ciAiLSBrw7ZrIGTDvMSfw7xtw7wgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzozODUKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICItIGvDtmsgZMO8xJ/DvG3DvG7DvG4gc2FoaWJpIGJlbGlybGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjQwMworbXNnaWQgIndoaWxlIGNyZWF0aW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICItIC9sb3N0K2ZvdW5kIGRpemluaSBvbHXFn3R1cnVsdXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjQxMAorbXNnaWQgIndoaWxlIGxvb2tpbmcgdXAgL2xvc3QrZm91bmQiCittc2dzdHIgIi0gL2xvc3QrZm91bmQgZGl6aW5lIGJha8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICItIC9sb3N0K2ZvdW5kIGRpemluaSBnZW5pxZ9sZXRpbGlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzo0MzgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJhZCBibG9jayBpbm9kZSIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2sgZMO8xJ/DvG3DvCBiZWxpcmxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiJWQtJWQgYXJhc8SxbmRha2kgc2VrdMO2cmxlciBzaWxpbmlya2VuIGJlbGxlayB5ZXRtZWRpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrIDA6ICVzXG4iCittc2dzdHIgIlV5YXLEsTogYmxvayAwIG9rdW5hbWFkxLE6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIlV5YXLEsTogJWQuIHNla3TDtnIgc2lsaW5lbWVkaTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDcKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICItIGfDvG1sw7xrIHN1cGVyYmxvxJ91IGlsa2xlbmRpcmlsaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjUxNQorbXNnaWQgIlplcm9pbmcgam91cm5hbCBkZXZpY2U6ICIKK21zZ3N0ciAiR8O8bmzDvGsgYXlnxLF0xLEgdGVtaXpsZW5peW9yOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB6ZXJvaW5nIGpvdXJuYWwgZGV2aWNlIChibG9jayAlbGx1LCBjb3VudCAlZCkiCittc2dzdHIgIi0gZ8O8bmzDvGsgYXlnxLF0xLEgdGVtaXpsZW5pcmtlbiAoYmxvayAldSwgJWQgYmxvaykgaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjU0NQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICItIGfDvG5sw7xrIHPDvHBlcmJsb8SfdSB5YXrEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjU2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIndhcm5pbmc6ICVsbHUgYmxvY2tzIHVudXNlZC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorInV5YXLEsTogJXUgYmxvayBrdWxsYW7EsWxtYW3EscWfLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWkgaXNtaSA9ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJPUyB0eXBlOiAlc1xuIgorbXNnc3RyICLEsMWfbC4gU2lzdC4gdMO8csO8OiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQmxvayBib3l1ID0gJXUgKGfDvG5sw7xrIGtheWTEsSA9ICV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkJsb2sgYm95dSA9ICV1IChnw7xubMO8ayBrYXlkxLEgPSAldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJhZ21lbnQgc2l6ZT0ldSAobG9nPSV1KVxuIgorbXNnc3RyICJBZMSxbWxhbWEgYm95dSA9ICV1IChnw7xubMO8ayBrYXlkxLEgPSAldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3RyaWRlPSV1IGJsb2NrcywgU3RyaXBlIHdpZHRoPSV1IGJsb2Nrc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiV1IGTDvMSfw7xtLCAldSBibG9rXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiV1IGJsb2sgKCUlJTIuMmYpIHPDvHBlciBrdWxsYW7EsWPEsSBpw6dpbiBheXLEsWxkxLFcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlyc3QgZGF0YSBibG9jaz0ldVxuIgorbXNnc3RyICLEsGxrIHZlcmkgYmxvxJ91ID0gJXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUm9vdCBkaXJlY3Rvcnkgb3duZXI9JXU6JXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPSVsdVxuIgorbXNnc3RyICJBemFtaSBkb3N5YXNpc3RlbWkgYmxvxJ91IHNhecSxc8SxID0gJWx1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3Vwc1xuIgorbXNnc3RyICIldSBibG9rIGdydWJ1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IGJsb2sgZ3J1YnVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGNsdXN0ZXJzIHBlciBncm91cFxuIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hICV1IGJsb2sgdmUgJXUgc2VrbWVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2tzIHBlciBncm91cCwgJXUgZnJhZ21lbnRzIHBlciBncm91cFxuIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hICV1IGJsb2sgdmUgJXUgc2VrbWVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICJncnVwIGJhxZ/EsW5hICV1IGTDvMSfw7xtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlPDvHBlcmJsb2tsYXLEsW4gYnVsdW5kdcSfdSBibG9rbGFyOiIKKworIzogbWlzYy9ta2UyZnMuYzo2OTEgbWlzYy90dW5lMmZzLmM6MTE2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICJzxLFuYW1hIMWfYWJsb251IGdlw6dlcnNpejogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICInc3RyaWRlJyBwYXJhbWV0cmVzaSBnZcOnZXJzaXo6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaXBlLXdpZHRoIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IMOnaXpnaSBnZW5pxZ9saWsgcGFyYW1ldHJlc2k6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiWWVuaWRlbiBib3l1dGxhbWEgcGFyYW1ldHJlc2kgZ2XDp2Vyc2l6OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgcmVzaXplIG1heGltdW0gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0gc2l6ZS5cbiIKK21zZ3N0ciAiQXphbWkgeWVuaWRlbiBib3l1dGxhbWEgZGXEn2VyaSBkb3N5YSBzaXN0ZW1pIGJveXV0dW5kYW4gYsO8ecO8ayBvbG1hbMSxZMSxci5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJTYXTEsXJkYSBib3l1dGxhbmTEsXJtYSwgMC4gZ8O2emRlbiBnZcOnaXJtZWRla2kgZG9zeWEgc2lzdGVtbGVyaW5kZSBkZXN0ZWtsZW5tZW1la3RlZGlyXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODAxIG1pc2MvbWtlMmZzLmM6ODEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJvb3Rfb3duZXI6ICclcydcbiIKK21zZ3N0ciAiR2XDp2Vyc2l6IGRvc3lhIHNpc3RlbWkgc2XDp2VuZcSfaSBiZWxpcnRpZGk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHF1b3RhdHlwZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIidzdHJpZGUnIHBhcmFtZXRyZXNpIGdlw6dlcnNpejogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4NDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0cm9vdF91aWQ9PHVpZCBvZiByb290IGRpcmVjdG9yeT5cbiIKKyJcdHJvb3RfZ2lkPTxnaWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHR0ZXN0X2ZzXG4iCisiXHRkaXNjYXJkXG4iCisiXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIE9SIGdycD5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkJlbGlydGlsZW4gc2XDp2VuZWtsZXIgaGF0YWzEsS5cbiIKKyJcbiIKKyJFayBzZcOnZW5la2xlciB2aXJnw7xsbGVybGUgYXlyxLFsYXJhayBiZWxpcnRpbGlyLiBCaXIgc2XDp2VuZcSfZSBkZcSfZXJcbiIKKyJiZWxpcnRpbGVjZWtzZSBidSAnPScgacWfYXJldGluZGVuIHNvbnJhIHlhesSxbMSxci5cbiIKKyJcbiIKKyJHZcOnZXJsaSBlayBzZcOnZW5la2xlcjpcbiIKKyJcdHN0cmlkZT08YmxvayBjaW5zaW5kZW4gYWTEsW0gdXp1bmx1xJ91PlxuIgorIlx0cmVzaXplPTx5ZW5pZGVuIGJveXV0bGFuYWNhxJ/EsSBibG9rIHNhecSxc8SxPlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogUkFJRCBzdHJpcGUtd2lkdGggJXUgbm90IGFuIGV2ZW4gbXVsdGlwbGUgb2Ygc3RyaWRlICV1LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisibWtlMmZzIHlhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbmRhICglcywgJWQuc2F0xLFyZGEpIHPDtnpkaXppbWkgaGF0YXPEsVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJHZcOnZXJzaXogZG9zeWEgc2lzdGVtaSBzZcOnZW5lxJ9pOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjkzMiBtaXNjL3R1bmUyZnMuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtb3VudCBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICJHZcOnZXJzaXogZG9zeWEgc2lzdGVtaSBzZcOnZW5lxJ9pIGJlbGlydGlkaTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJZb3VyIG1rZTJmcy5jb25mIGZpbGUgZG9lcyBub3QgZGVmaW5lIHRoZSAlcyBmaWxlc3lzdGVtIHR5cGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGFuIHVwZGF0ZWQgbWtlMmZzLmNvbmYgZmlsZS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nLi4uXG4iCittc2dzdHIgIsOHxLFrxLFsxLF5b3IuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgZnNfdHlwZSAlcyBpcyBub3QgZGVmaW5lZCBpbiBta2UyZnMuY29uZlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTI3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSB0w7xybGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTMxNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBpbml0IHByb2ZpbGUgc3VjY2Vzc2Z1bGx5IChlcnJvcjogJWxkKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiVXlhcsSxOiBibG9rIHV6dW5sdcSfdSAlZCBiaXLDp29rIHNpc3RlbWRlIGt1bGxhbsSxbWTEscWfxLFkxLFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgImJsb2sgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzg3Cittc2dpZCAiJy1SJyBpcyBkZXByZWNhdGVkLCB1c2UgJy1FJyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM5OQorbXNnaWQgIklsbGVnYWwgbnVtYmVyIGZvciBibG9ja3MgcGVyIGdyb3VwIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hIGJsb2sgc2F5xLFzxLEga3VyYWxkxLHFn8SxIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MDQKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAiZ3J1cCBiYcWfxLFuYSBibG9rIHNhecSxc8SxIDgnaW4ga2F0bGFyxLEgb2xtYWzEsWTEsXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQxMgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJHcnVwIGJhxZ/EsW5hIGJsb2sgc2F5xLFzxLEga3VyYWxkxLHFn8SxIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTgKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaW5vZGUgcmF0aW8gJXMgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJkw7zEn8O8bSBvcmFuxLEgJXMgaGF0YWzEsSAoZW4gYXogJWQvZW4gw6dvayAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IC1LIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICctRSBub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiLSBiYWRfYmxvY2tzX2ZpbGVuYW1lIGnDp2luIGJlbGxlayBheXLEsWzEsXJrZW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgInllZGVrIGJsb2sgecO8emRlc2kgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bSBpbm9kZXMgLSAlcyIKK21zZ3N0ciAiZMO8xJ/DvG0gc2F5xLFzxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgImRlxJ9pxZ9pa2xpayBzZXZpeWVzaSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUxOQorIywgZnV6enkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworIywgZnV6enkKK21zZ2lkICJUaGUgLVQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAiLW8geWFsbsSxeiBiaXIga2VyZSBrdWxsYW7EsWxhYmlsaXIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU4MCBtaXNjL21rZTJmcy5jOjI1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gam91cm5hbCBkZXZpY2UgJXNcbiIKK21zZ3N0ciAiLSAlcyBnw7xubMO8ayBheWfEsXTEsSBhw6fEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGFcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgZGV2IGJsb2Nrc2l6ZSAoJWQpIHNtYWxsZXIgdGhhbiBtaW5pbXVtIGJsb2Nrc2l6ZSAlZFxuIgorbXNnc3RyICJHw7xubMO8ayBheWfEsXTEsW7EsW4gYmxvayBib3l1ICglZCkgYXNnYXJpIGJsb2sgYm95dW5kYW4gKCVkKSBrw7zDp8O8a1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIGpvdXJuYWwgZGV2aWNlJ3MgYmxvY2tzaXplOiAlZFxuIgorbXNnc3RyICIlcydlIGfDvG5sw7xrIGVrbGVuaXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2tzICclcycgb24gZGV2aWNlICclcyciCittc2dzdHIgImJsb2sgc2F5xLFzxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MTMKK21zZ2lkICJmaWxlc3lzdGVtIgorbXNnc3RyICJkb3N5YSBzaXN0ZW1pIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjYgcmVzaXplL21haW4uYzozNjcKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiLSBkb3N5YSBzaXN0ZW1pIHV6dW5sdcSfdSBzYXB0YW5tYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoxNjMyCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJBeWfEsXQgYWxhbsSxIHNhcHRhbmFtYWTEsTsgZG9zeWEgc2lzdGVtaSBpw6dpblxuIgorImJpciB1enVubHVrIGJlbGlydG1lbGlzaW5pelxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkF5Z8SxdHRha2kgYWxhbiBzxLFmxLFyIG9sYXJhayByYXBvcmxhbmTEsS4gIFlhIGRlxJ9pxZ90aXJpbGVuIGJpciBkaXNrIGLDtmzDvG3DvFxuIgorImhhbGEgbWXFn2d1bCB2ZXlhIGt1bGxhbsSxbWRhIG9sZHXEn3VuZGFuIGZkaXNrIMOnYWzEscWfdMSxcsSxbGTEsWt0YW4gc29ucmFcbiIKKyJkaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3UgeWVuaWRlbiBva3VuYW1hZMSxIHlhIGRhIHlhbmzEscWfIGLDtmzDvG0gYmVsaXJ0aWxkaS5cbiIKKyJEaXNrIGLDtmzDvG1sZW1lIHRhYmxvc3VudW4geWVuaWRlbiBva3VubWFzxLEgacOnaW4gc2lzdGVtaW5pemkgeWVuaWRlblxuIgorImJhxZ9sYXRtYWzEsXPEsW7EsXouXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY1NgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pbmluIHV6dW5sdcSfdSBnw7Zyw7xuw7xyZGVraSB1enVubHVrdGFuIGLDvHnDvGsuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQ2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICJEb3N5YXNpc3RlbWkgw7Z6ZWxsaWtsZXJpIDAgcmV2aXp5b25sdSBkb3N5YXNpc3RlbWxlcmluZGUgZGVzdGVrbGVubWl5b3JcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwYXJzZSBzdXBlcmJsb2NrcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVsZiIKK21zZ3N0ciAieWVkZWsgYmxvayB5w7x6ZGVzaSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MTkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGhhcmR3YXJlIHNlY3RvciBzaXplIgorbXNnc3RyICItIGRvbmFuxLFtc2FsIHNla3TDtnIgYm95dSBzYXB0YW5tYXlhIMOnYWzEscWfxLFsxLFya2VuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiLSBkb25hbsSxbXNhbCBzZWt0w7ZyIGJveXUgc2FwdGFubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODU4CisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICItIHllbmlkZW4gYm95dXRsYW1hIGnDp2luIGJsb2tsYXIgeWVkZWtsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBzcGVjaWZpZWQgYmxvY2tzaXplICVkIGlzIGxlc3MgdGhhbiBkZXZpY2UgcGh5c2ljYWwgc2VjdG9yc2l6ZSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MQorIywgZnV6enkKK21zZ2lkICJUaGUgY2x1c3RlciBzaXplIG1heSBub3QgYmUgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplLlxuIgorbXNnc3RyICJBemFtaSB5ZW5pZGVuIGJveXV0bGFtYSBkZcSfZXJpIGRvc3lhIHNpc3RlbWkgYm95dXR1bmRhbiBiw7x5w7xrIG9sbWFsxLFkxLFyLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODcKK21zZ2lkICJzcGVjaWZ5aW5nIGEgY2x1c3RlciBzaXplIHJlcXVpcmVzIHRoZSBiaWdhbGxvYyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIlZCBiYXl0bMSxayBibG9rbGFyIHNpc3RlbSBpw6dpbiDDp29rIGLDvHnDvGsgKGVuIMOnb2sgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiVXlhcsSxOiAlZCBiYXl0bMSxayBibG9rbGFyIHNpc3RlbSBpw6dpbiDDp29rIGLDvHnDvGsgKGVuIMOnb2sgJWQpLCBhbWEgZGV2YW0gZWRpbGl5b3JcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTY4Cittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGJpZ2FsbG9jIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnRcbiIKKyJTZWUgaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvQmlnYWxsb2MgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5ODIgbWlzYy90dW5lMmZzLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk5MworbXNnaWQgInJlc2VydmVkIG9ubGluZSByZXNpemUgYmxvY2tzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLXNwYXJzZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisic8O8cGVyYmxvayBhemFsdG1hc8SxIHV5Z3VsYW5tYW3EscWfIGRvc3lhIHNpc3RlbWluZGVcbiIKKyJ5ZWRlayBibG9rbGFyIGt1bGxhbsSxbGFyYWsgeWVuaWRlbiBib3l1dGxhbWEgZGVzdGVrbGVubWl5b3IuIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMDIKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiR3J1cCBiYcWfxLFuYSBibG9rIHNhecSxc8SxIGthcHNhbWTEscWfxLEiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAyNgorbXNnaWQgIkZsZXhfYmcgZmVhdHVyZSBub3QgZW5hYmxlZCwgc28gZmxleF9iZyBzaXplIG1heSBub3QgYmUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgJWQgKG1pbiAlZC9tYXggJWQpIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgJWQgaGF0YWzEsSAoZW4gYXogJWQvZW4gw6dvayAlZCkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCByYWlzZSBpbm9kZSByYXRpbz8iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImlub2RlX3NpemUgKCV1KSAqIGlub2Rlc19jb3VudCAoJXUpIHRvbyBiaWcgZm9yIGFcbiIKKyJcdGZpbGVzeXN0ZW0gd2l0aCAlbGx1IGJsb2Nrcywgc3BlY2lmeSBoaWdoZXIgaW5vZGVfcmF0aW8gKC1pKVxuIgorIlx0b3IgbG93ZXIgaW5vZGUgY291bnQgKC1OKS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW07IHRoaXMgY2FuIGJlIHVuZG9uZSB1c2luZyB0aGUgY29tbWFuZDpcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEwCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzZXR1cCB1bmRvIGZpbGVcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgZG9zeWFzxLEgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjIyMzYKK21zZ2lkICJEaXNjYXJkaW5nIGRldmljZSBibG9ja3M6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNTIKK21zZ2lkICJmYWlsZWQgLSAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMzYwCittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICItIHPDvHBlcmJsb2sgYXlhcmxhbsSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9zIC0gJXMiCittc2dzdHIgImJpbGlubWV5ZW4gacWfbGV0aW0gc2lzdGVtaSAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAiCittc2dzdHIgIkTDvMSfw7xtIHRhYmxvbGFyxLEgeWF6xLFsxLF5b3I6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNTA4Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICItIGRvc3lhIHNpc3RlbWkgdGFibG9sYXLEsSBheXLEsWxtYXlhIMOnYWzEscWfxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTE3CisjLCBmdXp6eQorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIi0gYmxvayBiaXRlxZ9sZW1pIHlhesSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU2MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBibG9jayAlbGx1IGF0IGVuZCBvZiBmaWxlc3lzdGVtIgorbXNnc3RyICItIGRvc3lhIHNpc3RlbWluaW4gc29udW5kYSBibG9rICV1IHPEsWbEsXJsYW7EsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI1NzMKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICItIHllbmlkZW4gYm95dXRsYW1hIGnDp2luIGJsb2tsYXIgeWVkZWtsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4NCBtaXNjL3R1bmUyZnMuYzo2NDUKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICJnw7xubMO8ayIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICIlcydlIGfDvG5sw7xrIGVrbGVuaXlvcjogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgJXMgZSBla2xlbm1leWUgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI2MDggbWlzYy9ta2UyZnMuYzoyNjQwIG1pc2MvdHVuZTJmcy5jOjY3NCBtaXNjL3R1bmUyZnMuYzo2ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZVxuIgorbXNnc3RyICJ0YW1hbVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgam91cm5hbCBjcmVhdGlvbiBpbiBzdXBlci1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiR8O8bmzDvGsgb2x1xZ90dXJ1bHV5b3IgKCVkIGJsb2spOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYzNgorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL21rZTJmcy5jOjI2NDcgbWlzYy90dW5lMmZzLmM6NDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFcnJvciB3aGlsZSBlbmFibGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAiCittc2dzdHIgIlPDvHBlcmJsb2tsYXLEsW4gdmUgZG9zeWEgc2lzdGVtaW5pbiBoZXNhcCBiaWxnaWxlcmkgeWF6xLFsxLF5b3I6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJVeWFyxLEsIHPDvHBlcmJsb2tsYXLEsW4gdGFtYW3EsW5hIHlhem1hIHNvcnVudSB2YXIuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRvbmVcbiIKKyJcbiIKK21zZ3N0ciAiIgorImJpdHRpXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICJLdWxsYW7EsW3EsTogbWtsb3N0K2ZvdW5kXG4iCisKKyM6IG1pc2MvcGFydGluZm8uYzo0MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyA8YXlnxLF0MT4gPGF5Z8SxdDI+IDxheWfEsXQzPlxuIgorIlxuIgorIkJpciBheWfEsXQga8O8bWVzaSBpw6dpbiBkaXNrIGLDtmzDvG1sZW1lIGJpbGdpbGVyaW5pIGfDtnN0ZXJpclxuIgorIkJ1IHV5Z3VsYW1hbsSxbiDDp29rIGt1bGxhbsSxbGFuIGJpw6dpbWk6XG4iCisiXG4iCisiXHQlcyAvZGV2L2hkYT9cbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgImUybGFiZWw6ICVzIGHDp8SxbGFtxLF5b3JcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDcKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiTMO8dGZlbiBkb3N5YSBzaXN0ZW1pbmRlIGUyZnNjayDDp2FsxLHFn3TEsXLEsW4uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgbW1wX3VwZGF0ZV9pbnRlcnZhbF1cbiIKKyJcdFstciByZXNlcnZlZF9ibG9ja3NfY291bnRdIFstdSB1c2VyXSBbLUMgbW91bnRfY291bnRdIFstTCB2b2x1bWVfbGFiZWxdXG4iCisiXHRbLU0gbGFzdF9tb3VudGVkX2Rpcl0gWy1PIFteXWZlYXR1cmVbLC4uLl1dXG4iCisiXHRbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXSBbLVQgbGFzdF9jaGVja190aW1lXSBbLVUgVVVJRF1cbiIKKyJcdFsgLUkgbmV3X2lub2RlX3NpemUgXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbc2XDp2VuZWtsZXJdIGF5Z8SxdFxuIgorIlxuIgorIkRvc3lhIHNpc3RlbWluaW4gYXlhcmxhbmFiaWxpciBwYXJhbWV0cmVsZXJpbmkgZGXEn2nFn3Rpcm1la3RlIGt1bGxhbsSxbMSxci5cbiIKKyJcbiIKKyJTZcOnZW5la2xlcjpcbiIKKyIgICAtYyBTQVlJICAgICAgICAgICAgICAgIMSwa2kgZG9zeWFzaXN0ZW1pIGRlbmV0aW1pIGFyYXPEsW5kYSBkb3N5YSBzaXN0ZW1pbmluXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBlbiDDp29rIGthw6cgZGVmYSBiYcSfbGFuYWJpbGVjZcSfaSBiZWxpcnRpbGlyLlxuIgorIiAgIC1DIFNBWUkgICAgICAgICAgICAgICAgLWMgaWxlIGF5bsSxXG4iCisiICAgLWUgaGF0YS1kYXZyYW7EscWfxLEgICAgICBIYXRhIG9sdcWfdHXEn3VuZGEgbmUgeWFwxLFsYWNhxJ/EsSBiZWxpcnRpbGlyLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJzogaGF0YSB5b2tzYXnEsWzEsXIuICdyZW1vdW50LXJvJzogZG9zeWFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIHNpc3RlbWkgc2FsdC1va3VudXIgb2xhcmFrIGJhxJ9sYW7EsXIuICdwYW5pYyc6XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICDDp2VraXJkZWsgcGFuacSfaSBvbHXFn3VyLlxuIgorIiAgIC1nIGdydXAgICAgICAgICAgICAgICAgWWVkZWsgYmxva2xhcsSxbiBoYW5naSBrdWxsYW7EsWPEsSBncnVidW5hIGF5csSxbGFjYcSfxLFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbGlydGlsaXIuIEdydXAgaXNtaSB5YSBkYSBudW1hcmFzxLEgdmVyaWxlYmlsaXIuXG4iCisiICAgLXUga3VsbGFuxLFjxLEgICAgICAgICAgIFllZGVrIGJsb2tsYXLEsW4gaGFuZ2kga3VsbGFuxLFjxLF5YSBheXLEsWxhY2HEn8SxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxpcnRpbGlyLiBLdWxsLiBpc21pIHlhIGRhIG51bWFyYXPEsSB2ZXJpbGViaWxpci5cbiIKKyIgICAtaSBzw7xyZVtkfG18d10gICAgICAgICDEsGtpIGRlbmV0aW0gYXJhc8SxbmRha2kgZW4gYsO8ecO8ayBzw7xyZSBiZWxpcnRpbGlyLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgR8O8bihkKSwgYXkobSksIGhhZnRhKHcpIG9sYXJhayB2ZXJpbGViaWxpci4gMCBpbGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIHphbWFuYSBiYcSfbMSxIGRlbmV0aW0gYXlhcsSxIGthbGTEsXLEsWzEsXIuXG4iCisiICAgLWogICAgICAgICAgICAgICAgICAgICBEb3N5YSBzaXN0ZW1pbmUgZ8O8bmzDvGsgZG9zeWFzxLEgZWtsZW5pci4gLUpcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIHNlw6dlbmXEn2kgaWxlIHNlw6dlbmVrbGVyIGJlbGlydGlsbWV6c2UgZG9zeWFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIMO2bnRhbsSxbWzEsSDDtnplbGxpa2xlcmxlIG9sdcWfdHVydWx1ci5cbiIKKyIgICAtSiBzZcOnZW5la1ssLi4uXSAgICAgICBBxZ9hxJ/EsWRhIGHDp8Sxa2xhbWFsYXLEsSB2ZXJpbGVuIHNlw6dlbmVrbGVyIGJ1cmFkYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlyZ8O8bGxlcmxlIGF5csSxbGFyYWsgdmVyaWxlYmlsaXIuXG4iCisiICAgLWwgICAgICAgICAgICAgICAgICAgICBEb3N5YSBzaXN0ZW1pbmluIMO2emVsbGlrbGVyaSBsaXN0ZWxlbmlyLlxuIgorIiAgIC1MIGV0aWtldCAgICAgICAgICAgICAgRG9zeWEgc2lzdGVtaW5pbiBiw7Zsw7xtIGlzbWkgYmVsaXJ0aWxpci5cbiIKKyIgICAtbSB5ZWRlay1ibG9rLXnDvHpkZXNpICBZZWRlayBibG9rbGFyxLFuIHnDvHpkZXNpIGJlbGlydGlsaXIuIMOWbnRhbsSxbWzEsSAlJTVcbiIKKyIgICAtTSBExLBaxLBOICAgICAgICAgICAgICAgRG9zeWEgc2lzdGVtaW5lIHNvbiBiYcSfbGFuYW4gZGl6aW4gYmVsaXJ0aWxpci5cbiIKKyIgICAtbyBbXl1zZcOnZW5la1ssLi4uXSAgICBCYcSfbGFtYSBzZcOnZW5la2xlcmlcbiIKKyIgICAtTyBbXl3DtnplbGxpa1ssLi4uXSAgICBBxZ9hxJ/EsWRhIGHDp8Sxa2xhbWFsYXLEsSB2ZXJpbGVuIMO2emVsbGlrbGVyIGJ1cmFkYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlyZ8O8bGxlcmxlIGF5csSxbGFyYWsgdmVyaWxlYmlsaXIuXG4iCisiICAgLXIgeWVkZWstYmxvay1zYXnEsXPEsSAgIFllZGVrIGJsb2tsYXLEsW4gc2F5xLFzxLEgYmVsaXJ0aWxpci5cbiIKKyIgICAtcyBbMHwxXSAgICAgICAgICAgICAgIMOHb2sgYsO8ecO8ayBkb3N5YSBzaXN0ZW1sZXJpbmRlIHllciBrYXphbmTEsXLEsXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAtTyBzcGFyc2Vfc3VwZXIgaWxlIGF5bsSxZMSxci5cbiIKKyIgICAtVCBzb24tZGVuZXRpbS16YW1hbsSxICBCZXRpa2xlcmxlIGt1bGxhbm1hayBpw6dpbmRpclxuIgorIiAgIC1VIFVVSUR8Y2xlYXJ8cmFuZG9tfHRpbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIERvc3lhIHNpc3RlbWluaW4gZXZyZW5zZWwgdGVrIGtpbWxpxJ9pIHZleWEgKFVVSUQpXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5naSB5w7ZudGVtbGUgYmVsaXJsZW5lY2XEn2kgYmVsaXJ0aWxpci4nY2xlYXInIGlsZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsaW5pcjsgJ3JhbmRvbScgcmFzZ2VsZSwgJ3RpbWUnIHphbWFuYSBnw7ZyZSBiaXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbWxpayDDvHJldGlyLlxuIgorIlxuIgorIkfDvG5sw7xrbGVtZSBzZcOnZW5la2xlcmk6XG4iCisiICAgICBzaXplPWfDvG5sw7xrLXV6dW5sdcSfdSAgICAgR8O8bmzDvGsgZG9zeWFzxLFuxLFuIHV6dW5sdcSfdSBNQiBvbGFyYWsgYmVsaXJ0aWxpclxuIgorIiAgICAgZGV2aWNlPWTEscWfLWfDvG5sw7xrLWF5Z8SxdMSxIEJhxZ9rYSBiaXIgYXlnxLF0IMO8emVyaW5kZWtpIGfDvG5sw7xrIGRvc3lhc8SxbsSxblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bGxhbsSxbG1hc8SxIHNhxJ9sYW7EsXIuXG4iCisiXG4iCisiw5Z6ZWxsaWtsZXI6XG4iCisiJ14nIMO2bmVraSBpbGUgdmVyaWxlbiDDtnplbGxpa2xlciBzw7xwZXJibG/En2EgZXNraWxlciBrYWxkxLFyxLFsYXJhayB5YXrEsWzEsXIuXG4iCisiJysnIMO2bmVraXlsZSB5YSBkYSDDtm5la3NpeiB2ZXJpbGVuIMO2emVsbGlrbGVyIHPDvHBlcmJsb2t0YWtpIMO2emVsbGlrbGVyZVxuIgorImVrbGVuaXIuXG4iCisiICAgICBzcGFyc2Vfc3VwZXIgICAgWWVkZWsgc8O8cGVyYmxva2xhcsSxbiBzYXnEsXPEsW7EsSBzxLFuxLFybGFtYWt0YSBrdWxsYW7EsWzEsXIuXG4iCisiICAgICBmaWxldHlwZSAgICAgICAgRGl6aW4ga2F5xLF0bGFyxLFuZGEgZG9zeWEgdMO8csO8IGJpbGdpc2kgc2FrbGFuxLFyLlxuIgorIiAgICAgaGFzX2pvdXJuYWwgICAgIC1qIHNlw6dlbmXEn2kgaWxlIGF5bsSxLiBCaXIgZXh0MyBnw7xubMO8ayBkb3N5YXPEsSBvbHXFn3R1cnVyLlxuIgorIlxuIgorIsOHZXZpcmkgaGF0YWxhcsSxbsSxIDxnbnUtdHJAYmVsZ2VsZXIub3JnPiBhZHJlc2luZSBiaWxkaXJpbml6LlxuIgorIlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICItIGTEscWfIGfDvG5sw7xrIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIGJpciBnw7xubMO8a2xlbWUgYXlnxLF0xLEgZGXEn2lsLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJHw7xubMO8ayBzw7xwZXJibG/En3UgeW9rIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDAKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIkfDvG5sw7xrbGVtZSBheWfEsXTEsW5kYSBkb3N5YSBzaXN0ZW1pbmluIGV2cmVuc2VsIHRlayBraW1sacSfaSAoVVVJRCkgeW9rLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjEKK21zZ2lkICIiCisiQ2Fubm90IGxvY2F0ZSBqb3VybmFsIGRldmljZS4gSXQgd2FzIE5PVCByZW1vdmVkXG4iCisiVXNlIC1mIG9wdGlvbiB0byByZW1vdmUgbWlzc2luZyBqb3VybmFsIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjkKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiR8O8bmzDvGsgc2lsaW5kaVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgIi0gYml0ZcWfbGVtbGVyIG9rdW51cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyMQorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgIi0gZ8O8bmzDvGsgZMO8xJ/DvG3DvCB0ZW1pemxlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6MzMyCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICItIGfDvG5sw7xrIGTDvMSfw7xtw7wgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIihhbmQgcmVib290IGFmdGVyd2FyZHMhKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhcmluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICInJXMnIGRvc3lhIHNpc3RlbWkgw7Z6ZWxsacSfaW5pIHRlbWl6bGVtZSBkZXN0ZWtsZW5taXlvci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBoYXNfam91cm5hbCBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorImhhc19qb3VybmFsIGJheXJhxJ/EsSBzYWRlY2UgZG9zeWEgc2lzdGVtaSBiYcSfbMSxIGRlxJ9pbGtlbiB5YSBkYSBzYWx0LW9rdW51clxuIgorImJhxJ9sxLF5a2VuIHRlbWl6bGVuZWJpbGlyLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MjQKK21zZ2lkICIiCisiVGhlIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LiAgUGxlYXNlIHJ1biBlMmZzY2sgYmVmb3JlIGNsZWFyaW5nXG4iCisidGhlIGhhc19qb3VybmFsIGZsYWcuXG4iCittc2dzdHIgIiIKKyJuZWVkc19yZWNvdmVyeSBiYXlyYcSfxLEgZ2VyZWtpeW9yLiBMw7x0ZmVuIGhhc19qb3VybmFsIGJheXJhxJ/EsVxuIgorInRlbWl6bGVubWVkZW4gw7ZuY2UgZTJmc2NrIMOnYWzEscWfdMSxcsSxbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDQzCisjLCBmdXp6eQorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJoYXNfam91cm5hbCBiYXlyYcSfxLEgc2FkZWNlIGRvc3lhIHNpc3RlbWkgYmHEn2zEsSBkZcSfaWxrZW4geWEgZGEgc2FsdC1va3VudXJcbiIKKyJiYcSfbMSxeWtlbiB0ZW1pemxlbmViaWxpci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDcwCittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDc4CisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICItIGJpdGXFn2xlbWxlciBva3VudXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCisjLCBmdXp6eQorbXNnaWQgIndoaWxlIHJlYWRpbmcgTU1QIGJsb2NrLiIKK21zZ3N0ciAiLSBoYXRhbMSxIGJsb2tsYXIgZMO8xJ/DvG3DvCBva3VubWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUyNAorbXNnaWQgIiIKKyJDbGVhcmluZyB0aGUgZmxleF9iZyBmbGFnIHdvdWxkIGNhdXNlIHRoZSB0aGUgZmlsZXN5c3RlbSB0byBiZVxuIgorImluY29uc2lzdGVudC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKKyMsIGZ1enp5Cittc2dpZCAiIgorIlRoZSBodWdlX2ZpbGUgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKyJoYXNfam91cm5hbCBiYXlyYcSfxLEgc2FkZWNlIGRvc3lhIHNpc3RlbWkgYmHEn2zEsSBkZcSfaWxrZW4geWEgZGEgc2FsdC1va3VudXJcbiIKKyJiYcSfbMSxeWtlbiB0ZW1pemxlbmViaWxpci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NTk1Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6ICdecXVvdGEnIG9wdGlvbiBvdmVycmlkZXMgJy1RJ2FyZ3VtZW50cy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkRvc3lhIHNpc3RlbWluZGUgYmlyIGfDvG5sw7xrIGRvc3lhc8SxIHphdGVuIHZhci5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorIlx0JXMgw7x6ZXJpbmRla2kgZ8O8bmzDvGsgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIiVzIMO8emVyaW5kZSBnw7xubMO8ayBkb3N5YXPEsSBvbHXFn3R1cnVsdXlvcjogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgYWRkaW5nIGZpbGVzeXN0ZW0gdG8gam91cm5hbCBvbiAlcyIKK21zZ3N0ciAiLSAlcyDDvHplcmluZGVraSBnw7xubMO8ayBkb3N5YXPEsW5hIGRvc3lhIHNpc3RlbWkgZWtsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3NgorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAiR8O8bmzDvGsgZMO8xJ/DvG3DvCBvbHXFn3R1cnVsdXlvcjogIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2ODUKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwgZmlsZSIKK21zZ3N0ciAiIgorIlxuIgorIlx0Z8O8bmzDvGsgZG9zeWFzxLEgb2x1xZ90dXJ1bG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzo3NjMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIHF1b3RhIG9wdGlvbnMhXG4iCittc2dzdHIgIlNlw6dlbmVrbGVyaSDDp8O2esO8bWxlbWVrIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLEhXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4NQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHBhcnNlIGRhdGUvdGltZSBzcGVjaWZpZXI6ICVzIgorbXNnc3RyICJUYXJpaC96YW1hbiBiZWxpcnRlY2kgw6fDtnrDvG1sZW5lbWVkaTogJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg3MCBtaXNjL3R1bmUyZnMuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1vdW50cyBjb3VudCAtICVzIgorbXNnc3RyICJiYcSfbGFtYSBzYXnEsXPEsSBoYXRhbMSxIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiaGF0YSBkYXZyYW7EscWfxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgImdydXAgaXNtaS9udW1hcmFzxLEgaGF0YWzEsSAtJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk1OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW50ZXJ2YWwgLSAlcyIKK21zZ3N0ciAic8O8cmUgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlc2VydmVkIGJsb2NrIHJhdGlvIC0gJXMiCittc2dzdHIgInllZGVrIGJsb2sgb3JhbsSxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAwMworbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItbyB5YWxuxLF6IGJpciBrZXJlIGt1bGxhbsSxbGFiaWxpciIKKworIzogbWlzYy90dW5lMmZzLmM6MTAxMgorbXNnaWQgIi1PIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICItTyB5YWxuxLF6IGJpciBrZXJlIGt1bGxhbsSxbGFiaWxpciIKKworIzogbWlzYy90dW5lMmZzLmM6MTAyNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IC0gJXMiCittc2dzdHIgInllZGVrIGJsb2sgc2F5xLFzxLEgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgImt1bGxhbsSxY8SxIGlzbWkvbnVtYXJhc8SxIGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAiZMO8xJ/DvG0gdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJJbm9kZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28tICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyWzBdICJFbiBmYXpsYSBiYcSfbGFtYSBzYXnEsXPEsSAlZCBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCittc2dzdHJbMV0gIkVuIGZhemxhIGJhxJ9sYW1hIHNhecSxc8SxICVkIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICInc3RyaWRlJyBwYXJhbWV0cmVzaSBnZcOnZXJzaXo6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJCZWxpcnRpbGVuIHNlw6dlbmVrbGVyIGhhdGFsxLEuXG4iCisiXG4iCisiRWsgc2XDp2VuZWtsZXIgdmlyZ8O8bGxlcmxlIGF5csSxbGFyYWsgYmVsaXJ0aWxpci4gQmlyIHNlw6dlbmXEn2UgZGXEn2VyXG4iCisiYmVsaXJ0aWxlY2Vrc2UgYnUgJz0nIGnFn2FyZXRpbmRlbiBzb25yYSB5YXrEsWzEsXIuXG4iCisiXG4iCisiR2XDp2VybGkgZWsgc2XDp2VuZWtsZXI6XG4iCisiXHRzdHJpZGU9PGJsb2sgY2luc2luZGVuIGFkxLFtIHV6dW5sdcSfdT5cbiIKKyJcdHJlc2l6ZT08eWVuaWRlbiBib3l1dGxhbmFjYcSfxLEgYmxvayBzYXnEsXPEsT5cbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyMworIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiLSBiaXRlxZ9sZW1sZXIgb2t1bnVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyOAorIywgZnV6enkKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBibG9jayBiaXRtYXBcbiIKK21zZ3N0ciAiZMO8xJ/DvG0gdmUgYmxvayBiaXRlxZ9sZW1sZXJpIG9rdW51eW9yIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo4NzAKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgInRhxZ/EsW5hY2FrIGJsb2tsYXIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU5CisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWxvY2F0ZSBibG9ja3MgZHVyaW5nIGlub2RlIHJlc2l6ZSBcbiIKK21zZ3N0ciAiLSB5ZW5pZGVuIGJveXV0bGFtYSBpw6dpbiBibG9rbGFyIHllZGVrbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzkxCittc2dpZCAiIgorIkVycm9yIGluIHJlc2l6aW5nIHRoZSBpbm9kZSBzaXplLlxuIgorIlJ1biBlMnVuZG8gdG8gdW5kbyB0aGUgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTgxOAorIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIHTDvHJsZXJpIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLFcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAiLSAlcyB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hyaW5raW5nIHRoZSBpbm9kZSBzaXplIGlzIG5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGlub2RlIHNpemUgJWx1IChtYXggJWQpXG4iCittc2dzdHIgImTDvMSfw7xtIHV6dW5sdcSfdSAlZCBoYXRhbMSxIChlbiBheiAlZC9lbiDDp29rICVkKSIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG1heGltYWwgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiRW4gZmF6bGEgYmHEn2xhbWEgc2F5xLFzxLEgJWQgb2xhcmFrIGJlbGlybGVuaXlvclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3VycmVudCBtb3VudCBjb3VudCB0byAlZFxuIgorbXNnc3RyICLFnmltZGlraSBiYcSfbGFtYSBzYXnEsXPEsSAlZCBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBlcnJvciBiZWhhdmlvciB0byAlZFxuIgorbXNnc3RyICJIYXRhIGRhdnJhbsSxxZ/EsSAlZCBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICJZZWRlayBibG9rbGFyxLFuIGdydXAgbnVtYXJhc8SxICVsdSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgIkRlbmV0aW1sZXIgYXJhc8SxbmRha2kgc8O8cmUgJWx1IHNhbml5ZSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICJEZW5ldGltbGVyIGFyYXPEsW5kYWtpIHPDvHJlICVsdSBzYW5peWUgb2xhcmFrIGJlbGlybGVuaXlvclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDMxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50YWdlIHRvICVnJSUgKCVsbHUgYmxvY2tzKVxuIgorbXNnc3RyICJZZWRlayBibG9rbGFyxLFuIHnDvHpkZXNpICUlJWcgKCV1IGJsb2spIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJ5ZWRlayBheXLEsWxtxLHFnyBibG9rIHNhecSxc8SxIMOnb2sgYsO8ecO8ayAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjA0NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgY291bnQgdG8gJWxsdVxuIgorbXNnc3RyICJZZWRlayBibG9rIHNhecSxc8SxICVsdSBvbGFyYWsgYmVsaXJsZW5peW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTAKK21zZ2lkICIiCisiXG4iCisiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzLlxuIgorbXNnc3RyICIiCisiXG4iCisiRG9zeWEgc2lzdGVtaW5kZWtpIHPDvHBlcmJsb2tsYXIgemF0ZW4gYXphbHTEsWxtxLHFny5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU3BhcnNlIHN1cGVyYmxvY2sgZmxhZyBzZXQuICAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlPDvHBlcmJsb2sgYXphbHRtYSBiYXlyYcSfxLEga29udWxkdS4gICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDYyCittc2dpZCAiIgorIlxuIgorIkNsZWFyaW5nIHRoZSBzcGFyc2Ugc3VwZXJmbGFnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3MAorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHRpbWUgZmlsZXN5c3RlbSBsYXN0IGNoZWNrZWQgdG8gJXNcbiIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaW5pbiBzb24gZGVuZXRpbSB6YW1hbsSxICVzIHlhcMSxbMSxeW9yXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICJBeXLEsWxhbiBibG9rbGFyxLFuIGt1bGxhbsSxY8SxIG51bWFyYXPEsSAlbHUgb2xhcmFrIGF5YXJsYW7EsXlvclxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTA4Cittc2dpZCAiRXJyb3IgaW4gdXNpbmcgY2xlYXJfbW1wLiBJdCBtdXN0IGJlIHVzZWQgd2l0aCAtZlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMjYKKyMsIGZ1enp5Cittc2dpZCAiVGhlIHF1b3RhIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorImhhc19qb3VybmFsIGJheXJhxJ/EsSBzYWRlY2UgZG9zeWEgc2lzdGVtaSBiYcSfbMSxIGRlxJ9pbGtlbiB5YSBkYSBzYWx0LW9rdW51clxuIgorImJhxJ9sxLF5a2VuIHRlbWl6bGVuZWJpbGlyLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTU5Cittc2dpZCAiSW52YWxpZCBVVUlEIGZvcm1hdFxuIgorbXNnc3RyICJHZcOnZXJzaXogVVVJRCBiacOnZW1pXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNzIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorImhhc19qb3VybmFsIGJheXJhxJ/EsSBzYWRlY2UgZG9zeWEgc2lzdGVtaSBiYcSfbMSxIGRlxJ9pbGtlbiB5YSBkYSBzYWx0LW9rdW51clxuIgorImJhxJ9sxLF5a2VuIHRlbWl6bGVuZWJpbGlyLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgwCittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbm9kZSBzaXplICVsdVxuIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YXJhbWFzxLEgYmHFn2xhdMSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpZGUgc2l6ZSB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdHJpcGUgd2lkdGggdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIsWeaW1kaWtpIGJhxJ9sYW1hIHNhecSxc8SxICVkIG9sYXJhayBiZWxpcmxlbml5b3JcbiIKKworIzogbWlzYy91dGlsLmM6NzQKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJZaW5lIGRlIGRldmFtIGVkaWxzaW4gbWk/IChlL2gpICIKKworIzogbWlzYy91dGlsLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJXMgLS0tICVzXG4iCittc2dzdHIgInN0YXQgJXMgeWFwxLFsYW1hZMSxIC0tLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJBeWfEsXQgZ8O2csO8bm3DvHlvcjsgZG/En3J1IGJlbGlydHRpxJ9pbml6ZSBlbWluIG1pc2luaXo/XG4iCisKKyM6IG1pc2MvdXRpbC5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAiJXMgYmxvayDDtnplbGxpa2xpIGJpciBheWfEsXQgZGXEn2lsLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgZW50aXJlIGRldmljZSwgbm90IGp1c3Qgb25lIHBhcnRpdGlvbiFcbiIKK21zZ3N0ciAiJXMgZGlza2luIHRhbWFtxLEhIEJpciBkaXNrIGLDtmzDvG3DvCBkZcSfaWwhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJta2UyZnMgbidvbHVyc2Egb2xzdW4gw6dhbMSxxZ90xLFyxLFsYWNhay4gxLBuxZ9hbGxhaCAvZXRjL210YWIgeWFubMSxxZ90xLFyLlxuIgorCisjOiBtaXNjL3V0aWwuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2lsbCBub3QgbWFrZSBhICVzIGhlcmUhXG4iCittc2dzdHIgImJ1cmFkYSBiaXIgJXMgeWFwxLFsbWF5YWNhayFcbiIKKworIzogbWlzYy91dGlsLmM6MTY2Cittc2dpZCAibWtlMmZzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgIm1rZTJmcyBuZSBvbHVyc2Egb2xzdW4gw6dhbMSxxZ90xLFyxLFsYWNhay5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiR8O8bmzDvGsgc2XDp2VuZWtsZXJpIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLEhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjIwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIkfDvG5sw7xrIGRvc3lhc8SxIHPDvHBlcmJsb8SfdSB0YW7EsW0gbnVtYXJhc8SxIGJ1bHVuYW1hZMSxIgorCisjOiBtaXNjL3V0aWwuYzoyMjgKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkfDvG5sw7xrIHNlw6dlbmVrbGVyaSBoYXRhbMSxIGJlbGlydGlsbWnFny5cbiIKKyJcbiIKKyJHw7xubMO8ayBzZcOnZW5la2xlcmkgJ2lzaW09ZGXEn2VyJyDDp2lmdGxlcmkgaGFsaW5kZVxuIgorInZpcmfDvGxsZXJsZSBheXLEsWxhcmFrIHZlcmlsaXIuXG4iCisiXG4iCisiR2XDp2VybGkgZ8O8bmzDvGtsZW1lIHNlw6dlbmVrbGVyaTpcbiIKKyJcdHNpemU9PE1CIG9sYXJhayBnw7xubMO8ayB1enVubHXEn3U+XG4iCisiXHRkZXZpY2U9PGfDvG5sw7xrIGRvc3lhc8SxbsSxbiBidWx1bmFjYcSfxLEgYXlnxLF0PlxuIgorIlxuIgorIkfDvG5sw7xrIGRvc3lhc8SxbsSxbiB1enVubHXEn3UgMTAyNCBpbGUgMTAyNDAwIGJsb2sgYXJhc8SxbmRhIHNlw6dpbGViaWxpci5cbiIKKyJcbiIKKworIzogbWlzYy91dGlsLmM6MjU4Cittc2dpZCAiIgorIlxuIgorIkZpbGVzeXN0ZW0gdG9vIHNtYWxsIGZvciBhIGpvdXJuYWxcbiIKK21zZ3N0ciAiIgorIlxuIgorIkRvc3lhIHNpc3RlbWkgYmlyIGfDvG5sw7xrIGnDp2luIMOnb2sga8O8w6fDvGtcbiIKKworIzogbWlzYy91dGlsLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgcmVxdWVzdGVkIGpvdXJuYWwgc2l6ZSBpcyAlZCBibG9ja3M7IGl0IG11c3QgYmVcbiIKKyJiZXR3ZWVuIDEwMjQgYW5kIDEwMjQwMDAwIGJsb2Nrcy4gIEFib3J0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjI3MworbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkfDvG5sw7xrIGRvc3lhc8SxIGRvc3lhIHNpc3RlbWkgacOnaW4gw6dvayBiw7x5w7xrLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkJ1IGRvc3lhIHNpc3RlbWkgaGVyICVkIGJhxJ9sYW1hZGEgYmlyIHlhIGRhICVnIGfDvG5kZSBiaXIsIGhhbmdpc2kgw7ZuY2VcbiIKKyJnZXLDp2VrbGXFn2lyc2UsIG90b21hdGlrIG9sYXJhayBkZW5ldGxlbmVjZWt0aXIuIEJ1IGRlxJ9lcmxlcmkgZGXEn2nFn3Rpcm1la1xuIgorImnDp2luIHR1bmUyZnMneWkgLWMgdmV5YSAtaSBzZcOnZW5lxJ9pIGlsZSDDp2FsxLHFn3TEsXLEsW7EsXouXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0OAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1kXSBbLXAgcGlkZmlsZV0gWy1zIHNvY2tldHBhdGhdIFstVCB0aW1lb3V0XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgWy1yfHRdIFstbiBudW1dIFstcyBzb2NrZXRwYXRoXVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgJXMgLWtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIiVzOiBhcmfDvG1hbiBzYXnEsXPEsSBmYXpsYVxuIgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwNQorbXNnaWQgImJhZCByZXNwb25zZSBsZW5ndGgiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1dWlkZCBkYWVtb24gYWxyZWFkeSBydW5uaW5nIGF0IHBpZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICJUYXJpaC96YW1hbiBiZWxpcnRlY2kgw6fDtnrDvG1sZW5lbWVkaTogJXMiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGJpbmQgdW5peCBzb2NrZXQgJXM6ICVzXG4iCittc2dzdHIgImV4dDIgc8O8cGVyYmxvxJ91IGJ1bHVuYW1hZMSxLCIKKworIzogbWlzYy91dWlkZC5jOjMxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbGlzdGVuIG9uIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICIlaSB5ZSB0ZWtyYXIgYmHEn2xhbsSxbGFtxLF5b3I6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkTDvMSfw7xtICVpIG9rdW51cmtlbiBoYXRhIG9sdcWfdHU6ICVtXG4iCisKKyM6IG1pc2MvdXVpZGQuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3BlcmF0aW9uICVkLCBpbmNvbWluZyBudW0gPSAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCByYW5kb20gVVVJRDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCAlZCBVVUlEJ3M6XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiRWsgw7Z6ZWxsaWsgc8O8csO8bcO8IGdlw6dlcnNpei5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NiBtaXNjL3V1aWRkLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzMyBtaXNjL3V1aWRkLmM6NTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICIvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgKCVzKTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIiIKKyJLdWxsYW7EsW3EsTogJXMgW3Nlw6dlbmVrXVxuIgorIkV2cmVuZGVraSB0ZWsgdGFuxLFtbGF5xLFjxLF5xLEgKFVVSUQpIG9sdcWfdHVydXIuXG4iCisiXG4iCisiU2XDp2VuZWtsZXI6XG4iCisiICAgLXIgICAgICByYXNnZWxlIHNhecSxIMO8cmV0ZWNpIGt1bGxhbsSxbGFyYWsgcmFzZ2VsZSBiaXIgbnVtYXJhIMO8cmV0aWxpclxuIgorIiAgIC10ICAgICAgdmFyc2EgZXRlcm5ldCBrYXJ0xLFuxLFuIGFkcmVzaSB2ZSBzaXN0ZW0gemFtYW7EsW5hIGfDtnJlIGJpclxuIgorIiAgICAgICAgICAgbnVtYXJhIMO8cmV0aXJcbiIKKyJcbiIKKyLDh2V2aXJpIGhhdGFsYXLEsW7EsSA8Z251LXRyQGJlbGdlbGVyLm9yZz4gYWRyZXNpbmUgYmlsZGlyaW5pei5cbiIKKyJcbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMgorbXNnaWQgIiMgRXh0ZW50IGR1bXA6XG4iCittc2dzdHIgIiMgRWsgZMO2a8O8bTpcbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiNcdE51bSA9ICVkLCBCb3kgPSAlZCwgxLBtbGXDpyA9ICVkLCBTxLFyYWzEsSA9ICVkXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdIFstcF0gZGV2aWNlIFtuZXdfc2l6ZV1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkt1bGxhbsSxbcSxOiAlcyBbc2XDp2VuZWtsZXJdIGF5Z8SxdCBbeWVuaS1ib3l1dF1cbiIKKyJcbiIKKyJEb3N5YSBzaXN0ZW1pbmkgeWVuaWRlbiBib3l1dGxhbmTEsXLEsXIuXG4iCisiXG4iCisiU2XDp2VuZWtsZXI6XG4iCisiICAgLWQgYmF5cmFrbGFyICAgIGhhdGEgYXnEsWtsYW1hIHNlw6dlbmXEn2kgaWxlIGRlcmxlbm1pxZ9zZSBoYXRhIGF5xLFrbGFtYVxuIgorIiAgICAgICAgICAgICAgICAgICBzZXZpeWVsZXJpIGJlbGlydGlsaXJcbiIKKyIgICAtZiAgICAgICAgICAgICAgYmF6xLEgZ8O8dmVubGlrIGRlbmV0aW1sZXJpbmkgZW5nZWxsZXllcmVrIGJveXV0bGFuZMSxcm1heWFcbiIKKyIgICAgICAgICAgICAgICAgICAgem9ybGFyXG4iCisiICAgLUYgICAgICAgICAgICAgIGJhxZ9sYW1hZGFuIMO2bmNlIGRvc3lhIHNpc3RlbWluaW4gdGFtcG9uIGJlbGxla2xlcmluaVxuIgorIiAgICAgICAgICAgICAgICAgICBib8WfYWx0xLFyXG4iCisiICAgLXAgICAgICAgICAgICAgIGnFn2xlbSBpbGVybGV5acWfaW5pIGfDtnN0ZXJlbiBiaXIgw6d1YnVrIMO8cmV0aXJcbiIKKyJcbiIKKyLDh2V2aXJpIGhhdGFsYXLEsW7EsSA8Z251LXRyQGJlbGdlbGVyLm9yZz4gYWRyZXNpbmUgYmlsZGlyaW5pei5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSBnZW5pxZ9sZXRpbGl5b3IiCisKKyM6IHJlc2l6ZS9tYWluLmM6NjgKK21zZ2lkICJSZWxvY2F0aW5nIGJsb2NrcyIKK21zZ3N0ciAiQmxva2xhciB5ZW5pZGVuIGtvbnVtbGFuZMSxcsSxbMSxeW9yIgorCisjOiByZXNpemUvbWFpbi5jOjcxCittc2dpZCAiU2Nhbm5pbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSB0YXJhbsSxeW9yIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAiRG9zeWEgaW5kZWtzaSBiYcWfdnVydWxhcsSxIGfDvG5jZWxsZW5peW9yIgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICJEb3N5YSBpbmRla3NpIHRhYmxvc3UgdGHFn8SxbsSxeW9yIgorCisjOiByZXNpemUvbWFpbi5jOjgwCittc2dpZCAiVW5rbm93biBwYXNzPyE/IgorbXNnc3RyICJiaWxpbm1leWVuIGdlw6dpxZ8/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJHZcOnacWfICVkIGJhxZ9sxLF5b3IgKGVuIMOnb2sgPSAlbHUpXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJSZXNpemluZyBiaWdhbGxvYyBmaWxlIHN5c3RlbXMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZC4gIFByb2NlZWRcbiIKKyJhdCB5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIG9wZW5pbmcgJXMiCittc2dzdHIgIiVzIGHDp8SxbMSxcmtlbiIKKworIzogcmVzaXplL21haW4uYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMgacOnaW4gZHVydW0gYmlsZ2lzaSBhbMSxbsSxcmtlbiIKKworIzogcmVzaXplL21haW4uYzozMzcgcmVzaXplL21haW4uYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIiIKKyJMw7x0ZmVuIMO2bmNlICdlMmZzY2sgLWYgJXMnIGtvbXV0dW51IMOnYWzEscWfdMSxcsSxbi5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIgorbXNnc3RyICJkw7zEn8O8bSB1enVubHXEn3UgaGF0YWzEsSAtICVzIgorCisjOiByZXNpemUvbWFpbi5jOjM5MworbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIKK21zZ3N0ciAiR8O8bmzDvGsgYXlnxLF0xLFuxLFuIGJsb2sgYm95dSAoJWQpIGFzZ2FyaSBibG9rIGJveXVuZGFuICglZCkga8O8w6fDvGtcbiIKKworIzogcmVzaXplL21haW4uYzo0MDcKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkgaXMgb25seSAlbGx1ICglZGspIGJsb2Nrcy5cbiIKKyJZb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUgb2YgJWxsdSBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJEaXNrIGLDtmzDvG3DvCAoeWEgZGEgYXlnxLF0KSBzYWRlY2UgJXUgKCVkaykgYmxvayBpw6dlcml5b3IuXG4iCisiU2l6IGlzZSAldSBibG9rbHVrIGJpciBib3l1dCBpc3RlZGluaXouXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gaXMgYWxyZWFkeSAlbGx1IGJsb2NrcyBsb25nLiAgTm90aGluZyB0byBkbyFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkRvc3lhIHNpc3RlbWkgemF0ZW4gJXUgYmxvayB1enVubHVrdGEuICBIacOnYmlyIMWfZXkgeWFwxLFsbWFkxLEhXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorIiVzIMO8emVyaW5kZWtpIGRvc3lhIHNpc3RlbWkgxZ9pbWRpICV1IGJsb2sgdXp1bmx1a3RhLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcmVzaXplICVzIgorbXNnc3RyICItICVzIHllbmlkZW4gYm95dXRsYW5kxLFyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogcmVzaXplL21haW4uYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZnkgJXMnIHRvIGZpeCB0aGUgZmlsZXN5c3RlbVxuIgorImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIiVzIMO8emVyaW5kZWtpIGRvc3lhIHNpc3RlbWkgxZ9pbWRpICV1IGJsb2sgdXp1bmx1a3RhLlxuIgorIlxuIgorCisjOiByZXNpemUvbWFpbi5jOjQ4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICItIHN0YXQgJXMgeWFwxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6ODMKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMDgKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSByZXNpemluZyIKK21zZ3N0ciAiRG9zeWFzaXN0ZW1pIMO2emVsbGlrbGVyaSAwIHJldml6eW9ubHUgZG9zeWFzaXN0ZW1sZXJpbmRlIGRlc3Rla2xlbm1peW9yXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTcKKyMsIGZ1enp5Cittc2dpZCAiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIKK21zZ3N0ciAiLSB5ZW5pZGVuIGJveXV0bGFtYSBpw6dpbiBibG9rbGFyIHllZGVrbGVuaXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiByZXNpemUvb25saW5lLmM6MTI0CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAiSHVyZCwgZG9zeWEgdMO8csO8IMO2emVsbGnEn2luaSBkZXN0ZWtsZW1lei5cbiIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAiIgorIlxuIgorIlx0JXMgw7x6ZXJpbmRla2kgZ8O8bmzDvGsgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHVcbiIKKworIzogcmVzaXplL29ubGluZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJPbGQgcmVzaXplIGludGVyZmFjZSByZXF1ZXN0ZWQuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE1NiByZXNpemUvb25saW5lLmM6MTczCittc2dpZCAiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE1OSByZXNpemUvb25saW5lLmM6MTc5CisjLCBmdXp6eQorbXNnaWQgIldoaWxlIGNoZWNraW5nIGZvciBvbi1saW5lIHJlc2l6aW5nIHN1cHBvcnQiCittc2dzdHIgIi0geWVuaWRlbiBib3l1dGxhbWEgacOnaW4gYmxva2xhciB5ZWRla2xlbmlya2VuIGhhdGEgb2x1xZ90dSIKKworIzogcmVzaXplL29ubGluZS5jOjE3NgorIywgZnV6enkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIkTEscWfIGfDvG5sw7xrIGJ1IGRvc3lhIHNpc3RlbWluaSBkZXN0ZWtsZW1peW9yXG4iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGVyZm9ybWluZyBhbiBvbi1saW5lIHJlc2l6ZSBvZiAlcyB0byAlbGx1ICglZGspIGJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjE5CisjLCBmdXp6eQorbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIi0gZMSxxZ8gZ8O8bmzDvGsgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldoaWxlIHRyeWluZyB0byBhZGQgZ3JvdXAgIyVkIgorbXNnc3RyICItICVzIGHDp8SxbG1heWEgw6dhbMSxxZ/EsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjOiByZXNpemUvb25saW5lLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlcywgYW5kIG9uLWxpbmUgcmVzaXppbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiCittc2dzdHIgIiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjYzMQorbXNnaWQgInJlc2VydmVkIGJsb2NrcyIKK21zZ3N0ciAieWVkZWsgYmxva2xhciIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjg3NQorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIm1ldGEtdmVyaSBibG9rbGFyxLEiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzoxODM3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNob3VsZCBuZXZlciBoYXBwZW46IHJlc2l6ZSBpbm9kZSBjb3JydXB0IVxuIgorbXNnc3RyICJCdSBvbG1hbWFsxLF5ZMSxOiBib3l1dGxhbmTEsXLEsXJrZW4gZMO8xJ/DvG3DvCBrYXliZXR0aWshXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi44IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0Ml9maWxzeXMgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGVfc2NhbiBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIHVuaXggaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIwCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZ2VuZXJpY19iaXRtYXAgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdGVzdCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjMKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGRpcmVjdG9yeSBibG9jayBsaXN0IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjQKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGljb3VudCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZXh0MiBmaWxlIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjcKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIEV4dDIgSW1hZ2UgSGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBoYW5kbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMwCisjLCBmdXp6eQorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgImfDvG5sw7xrIGRvc3lhc8SxIHN1cGVyIGJsb8SfdSBva3VudXlvclxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzEKK21zZ2lkICJGaWxlc3lzdGVtIHJldmlzaW9uIHRvbyBoaWdoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMgorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgdG8gZmlsZXN5c3RlbSBvcGVuZWQgcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIiCisiIFxuIgorIiAgR3J1cCB0YW7EsW1sYXnEsWPEsTogICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIiCisiIFxuIgorIiAgR3J1cCB0YW7EsW1sYXnEsWPEsTogICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM1Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJkw7zEn8O8bSBiaXRlxZ9sZW1sZXJpIHlhesSxbMSxeW9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgImTDvMSfw7xtIGJpdGXFn2xlbWxlcmkgeWF6xLFsxLF5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MAorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBibG9jayBiaXRtYXAiCittc2dzdHIgImJsb2sgYml0ZcWfbGVtbGVyaSB5YXrEsWzEsXlvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYW4gYmxvY2sgYml0bWFwIgorbXNnc3RyICJkw7zEn8O8bSB2ZSBibG9rIGJpdGXFn2xlbWxlcmkgb2t1bnV5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiLSBkw7zEn8O8bSB0YWJsb3N1bmEgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIkRvc3lhIGluZGVrc2kgdGFibG9zdSB0YXJhbsSxeW9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaW5pbiB1enVubHXEn3UgZ8O2csO8bsO8cmRla2kgdXp1bmx1a3RhbiBiw7x5w7xrLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ2Cittc2dpZCAiRVhUMiBkaXJlY3RvcnkgY29ycnVwdGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NworbXNnaWQgIkF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDgKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIGJsb2NrIHRvIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ5Cittc2dpZCAiTm8gZnJlZSBzcGFjZSBpbiB0aGUgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiIgorIiBcbiIKKyIgICBEw7zEn8O8bSBiaXRlxZ9sZW1pOiAgIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTEKKyMsIGZ1enp5Cittc2dpZCAiQmxvY2sgYml0bWFwIG5vdCBsb2FkZWQiCittc2dzdHIgIiAgICBCbG9rIGJpdGXFn2xlbWk6ICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MgorIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiQmxvayBzYXnEsXPEsSBrdXJhbGTEscWfxLEhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MworIywgZnV6enkKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiQmxvayBzYXnEsXPEsSBrdXJhbGTEscWfxLEhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiJXUgZMO8xJ/DvG3DvG7DvG4gZG9sYXlsxLEgYmxva2xhcsSxIG9rdW51eW9yIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBkb3VibHkgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIiV1IGTDvMSfw7xtw7xuw7xuIGRvbGF5bMSxIGJsb2tsYXLEsSBva3VudXlvciIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY2CisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgdHJpcGx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICIldSBkw7zEn8O8bcO8bsO8biBkb2xheWzEsSBibG9rbGFyxLEgb2t1bnV5b3IiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NworIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiAgICBCbG9rIGJpdGXFn2xlbWk6ICAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbm9kZSBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKyIgXG4iCisiICAgRMO8xJ/DvG0gYml0ZcWfbGVtaTogICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcwCittc2dpZCAiQSBibG9jayBncm91cCBpcyBtaXNzaW5nIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MQorbXNnaWQgIlRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzIKK21zZ2lkICJJbGxlZ2FsIGdlbmVyaWMgYml0IG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc0Cittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzYKK21zZ2lkICJUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgaGFuZGxlIHRoaXMgY2FzZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzcKK21zZ2lkICJUaGUgaW5vZGUgaXMgZnJvbSBhIGJhZCBibG9jayBpbiB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIkRvc3lhc2lzdGVtaSDDtnplbGxpa2xlcmkgMCByZXZpenlvbmx1IGRvc3lhc2lzdGVtbGVyaW5kZSBkZXN0ZWtsZW5taXlvclxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKKyMsIGZ1enp5Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5zdXBwb3J0ZWQgcmVhZC1vbmx5IGZlYXR1cmUocykiCittc2dzdHIgIkRvc3lhc2lzdGVtaSDDtnplbGxpa2xlcmkgMCByZXZpenlvbmx1IGRvc3lhc2lzdGVtbGVyaW5kZSBkZXN0ZWtsZW5taXlvclxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODAKK21zZ2lkICJJTyBDaGFubmVsIGZhaWxlZCB0byBzZWVrIG9uIHJlYWQgb3Igd3JpdGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQWF5csSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAiRG9zeWEgc2lzdGVtaSB0w7xybGVyaSBpw6dpbiBiZWxsZWsgYXlyxLFsYW1hZMSxXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJEb3N5YSBzaXN0ZW1pIHTDvHJsZXJpIGnDp2luIGJlbGxlayBheXLEsWxhbWFkxLFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorIywgZnV6enkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkTDvMSfw7xtICUzJGQgZGVraSBkaXppbiBibG9rdSAlMSR1ICgjJTIkZCkgYm/Fn1xuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTEKK21zZ2lkICJVbmltcGxlbWVudGVkIGV4dDIgbGlicmFyeSBmdW5jdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjkzCittc2dpZCAiRXh0MiBmaWxlIHRvbyBiaWciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk0Cittc2dpZCAiU3VwcGxpZWQgam91cm5hbCBkZXZpY2Ugbm90IGEgYmxvY2sgZGV2aWNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIgorbXNnc3RyICJHw7xubMO8ayBzw7xwZXJibG/En3UgeW9rIVxuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTYKK21zZ2lkICJKb3VybmFsIG11c3QgYmUgYXQgbGVhc3QgMTAyNCBibG9ja3MiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OAorIywgZnV6enkKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIi0gZMSxxZ8gZ8O8bmzDvGsgYcOnxLFsbWF5YSDDp2FsxLHFn8SxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5OQorIywgZnV6enkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiR8O8bmzDvGsgc8O8cGVyYmxvxJ91IHlvayFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMAorbXNnaWQgIkRpcmVjdG9yeSBoYXNoIHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDEKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgbnVtYmVyIgorbXNnc3RyICJhZWsgw7Z6ZWxsaWsiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDIKK21zZ2lkICJDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgcmVzZXJ2ZWQgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MiCittc2dzdHIgIjxHcnVwIHRhbsSxbWxhecSxY8SxIGTDvMSfw7xtw7w+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA1Cittc2dpZCAiUmVzaXplIGlub2RlIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNgorbXNnaWQgIlRyaWVkIHRvIHNldCBibG9jayBibWFwIHdpdGggbWlzc2luZyBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDgKK21zZ2lkICJUREI6IENvcnJ1cHQgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOQorbXNnaWQgIlREQjogSU8gRXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMAorbXNnaWQgIlREQjogTG9ja2luZyBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMworbXNnaWQgIlREQjogTG9jayBleGlzdHMgb24gb3RoZXIga2V5cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE0CisjLCBmdXp6eQorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIidzdHJpZGUnIHBhcmFtZXRyZXNpIGdlw6dlcnNpejogJXNcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKK21zZ2lkICJObyAnbmV4dCcgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzYKK21zZ2lkICJObyAncHJldmlvdXMnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM3Cittc2dpZCAiTm8gJ3VwJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOAorbXNnaWQgIk5vICdkb3duJyBleHRlbnQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQwCittc2dpZCAiRXh0MmZzIG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDEKK21zZ2lkICJObyByb29tIHRvIGluc2VydCBleHRlbnQgaW4gbm9kZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQyCittc2dpZCAiU3BsaXR0aW5nIHdvdWxkIHJlc3VsdCBpbiBlbXB0eSBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDMKKyMsIGZ1enp5Cittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiL2xvc3QrZm91bmQgZGl6aW5pIHlvay4gICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDUKK21zZ2lkICJFeHRlbnQgbGVuZ3RoIGlzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NworbXNnaWQgIkNhbid0IGNoZWNrIGlmIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBkdWUgdG8gbWlzc2luZyBtdGFiIGZpbGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0OAorbXNnaWQgIkZpbGVzeXN0ZW0gdG9vIGxhcmdlIHRvIHVzZSBsZWdhY3kgYml0bWFwcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ5Cittc2dpZCAiTU1QOiBpbnZhbGlkIG1hZ2ljIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUwCittc2dpZCAiTU1QOiBkZXZpY2UgY3VycmVudGx5IGFjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUxCittc2dpZCAiTU1QOiBmc2NrIGJlaW5nIHJ1biIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MworbXNnaWQgIk1NUDogdW5kZXJnb2luZyBhbiB1bmtub3duIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU0CisjLCBmdXp6eQorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgImRvc3lhIHNpc3RlbWkgdXp1bmx1xJ91IGhhdGFsxLEgLSAlcyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2CisjLCBmdXp6eQorbXNnaWQgIkJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QiCittc2dzdHIgIjxHcnVwIHRhbsSxbWxhecSxY8SxIGTDvMSfw7xtw7w+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU3Cittc2dpZCAiSW5vZGUgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggaW5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OQorbXNnaWQgIkV4dGVudCBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBleHRlbnQgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MAorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBjaGVja3N1bSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYxCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYyCittc2dpZCAiRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjMKKyMsIGZ1enp5Cittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJTw7xwZXJibG9rbGFyxLFuIGJ1bHVuZHXEn3UgYmxva2xhcjoiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY1Cittc2dpZCAiTU1QIGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIE1NUCBibG9jayIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTY2Cittc2dpZCAiRXh0MiBmaWxlIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTMKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiLSAvbG9zdCtmb3VuZCBkaXppbmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgb2x1xZ90dSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIi0gL2xvc3QrZm91bmQgZGl6aW5pIG9sdcWfdHVydWx1cmtlbiBoYXRhIG9sdcWfdHUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTYKK21zZ2lkICJBIHByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTcKK21zZ2lkICJCYWQgbGlua2VkIGxpc3QgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyMQorbXNnaWQgIkNhbid0IHNldCB2YWx1ZSBvbiBzZWN0aW9uIG5vZGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjMKK21zZ2lkICJBdHRlbXB0IHRvIG1vZGlmeSByZWFkLW9ubHkgcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNAorbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBoZWFkZXIgbm90IGF0IHRvcCBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI2Cittc2dpZCAiU3ludGF4IGVycm9yIGluIHByb2ZpbGUgcmVsYXRpb24iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyOQorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHByb2ZpbGVfc2VjdGlvbiBvYmplY3QiCittc2dzdHIgIkdlw6dlcnNpeiBkb3N5YSBzaXN0ZW1pIHNlw6dlbmXEn2k6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKKyMsIGZ1enp5Cittc2dpZCAiQ291bGRuJ3Qgb3BlbiBwcm9maWxlIGZpbGUiCittc2dzdHIgIkRvc3lhIGtvcHlhbGFuYW1hZMSxOiAlbVxuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKK21zZ2lkICJJbnZhbGlkIGludGVnZXIgdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDEKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX2RhdGFfdCIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgaW5kZXggaW5vZGU+IgorI34gbXNnc3RyICI8QUNMIGluZGVrc2luaW4gZMO8xJ/DvG3DvD4iCisKKyN+IG1zZ2lkICI8VGhlIEFDTCBkYXRhIGlub2RlPiIKKyN+IG1zZ3N0ciAiPEFDTCB2ZXJpc2luaW4gZMO8xJ/DvG3DvD4iCisKKyN+IG1zZ2lkICJAUyBkb2Vzbid0IGhhdmUgaGFzX0BqIGZsYWcsIGJ1dCBoYXMgZXh0MyBAaiAlcy5cbiIKKyN+IG1zZ3N0ciAiU8O8cGVyYmxvayBoYXNfam91cm5hbCBiYXlyYcSfxLEgacOnZXJtaXlvciwgYW1hIGV4dDMgZ8O8bmzDvMSfw7wgJXMgacOnZXJpeW9yLlxuIgorCisjfiBtc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCisjfiBtc2dzdHIgIiVpLiBkw7zEn8O8bWRla2kgZWsgw7Z6ZWxsaWsgZ2XDp2Vyc2l6IGJpciDDp8SxcnDEsSAoaGFzaCkgacOnZXJpeW9yICglTiksIDAgb2xtYWzEsVxuIgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSIKKyN+IG1zZ3N0ciAiZXh0MmZzX2Jsb2NrX2l0ZXJhdGUgacWfbGV2aSDDp2HEn3LEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IgorCisjfiBtc2dpZCAid2hpbGUgY2FsbGluZyBpdGVyYXRvciBmdW5jdGlvbiIKKyN+IG1zZ3N0ciAiLSB5aW5lbGVtZSBpxZ9sZXZpIMOnYcSfcsSxbMSxcmtlbiBoYXRhIG9sdcWfdHUiCisKKyN+IG1zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGlub2RlIGJ1ZmZlciIKKyN+IG1zZ3N0ciAiLSBkw7zEn8O8bSB0YW1wb24gYmVsbGXEn2kgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dSIKKworI34gbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgdGFibGUgKGdyb3VwICVkKSIKKyN+IG1zZ3N0ciAiLSBkw7zEn8O8bSB0YWJsb3N1IG9rdW51cmtlbiBoYXRhIG9sdcWfdHUgKGdydXAgJWQpIgorCisjfiBtc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSAoZ3JvdXAgJWQpIgorI34gbXNnc3RyICItIGTDvMSfw7xtIHRhYmxvc3UgeWF6xLFsxLFya2VuIGhhdGEgb2x1xZ90dSAoZ3J1cCAlZCkiCisKKyN+IG1zZ2lkICJQYXNzIDA6IERvaW5nIGJ5dGUtc3dhcCBvZiBmaWxlc3lzdGVtXG4iCisjfiBtc2dzdHIgIkdlw6dpxZ8gMDogZG9zeWEgc2lzdGVtaW5pbiBiYXl0IHPEsXJhbGFtYXPEsSBkw7x6ZWx0aWxpeW9yXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IHRoZSBmaWxlc3lzdGVtIG11c3QgYmUgZnJlc2hseSBjaGVja2VkIHVzaW5nIGZzY2tcbiIKKyN+ICJhbmQgbm90IG1vdW50ZWQgYmVmb3JlIHRyeWluZyB0byBieXRlLXN3YXAgaXQuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlczogZG9zeWEgc2l0ZW1pIGZzY2sga3VsbGFuxLFsYXJhayB0YW1hbWVuIGRlbmV0bGVubWVsaSB2ZVxuIgorI34gInRlcnMgYmF5dGxhciBub3JtYWwgZMO8emVuZSBkw7ZuZMO8csO8bG1lZGVuIGJhxJ9sYW5tYW1hbMSxZMSxci5cbiIKKworI34gbXNnaWQgIkJ5dGUgc3dhcCIKKyN+IG1zZ3N0ciAiVGVycyBiYXl0bMSxIgorCisjfiBtc2dpZCAiJXMgaXMgbW91bnRlZC4gICIKKyN+IG1zZ3N0ciAiJXMgYmHEn2xhbmTEsS4gICIKKworI34gbXNnaWQgIkJ5dGUtc3dhcHBpbmcgZmlsZXN5c3RlbXMgbm90IGNvbXBpbGVkIGluIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2tcbiIKKyN+IG1zZ3N0ciAiZTJmc2NrJ27EsW4gYnUgc8O8csO8bcO8bmRlIGRlcmxlbm1lbWnFnyB0ZXJzIGJheXRsxLEgc2lzdGVtbGVyIFxuIgorCisjfiBtc2dpZCAiSW5jb21wYXRpYmxlIG9wdGlvbnMgbm90IGFsbG93ZWQgd2hlbiBieXRlLXN3YXBwaW5nLlxuIgorI34gbXNnc3RyICJUZXJzIGJheXRsYXIgZMO8emVsdGlsaXJrZW4gdXl1bXN1eiBzZcOnZW5la2xlcmUgaXppbiB2ZXJpbG1lei5cbiIKKworI34gbXNnaWQgIiVzOiBGaWxlc3lzdGVtIGJ5dGUgb3JkZXIgYWxyZWFkeSBub3JtYWxpemVkLlxuIgorI34gbXNnc3RyICIlcyBEb3N5YSBzaXN0ZW1pbmRlIGJheXRsYXIgemF0ZW4gbm9ybWFsLlxuIgorCisjfiBtc2dpZCAid2hpbGUgcmV0cnlpbmcgdG8gd3JpdGUgYmxvY2sgYml0bWFwcyBmb3IgJXMiCisjfiBtc2dzdHIgIi0gJXMgacOnaW4gYmxvayBiaXRlxZ9sZW1sZXJpbmluIHlhesSxbG1hc8SxIHlpbmVsZW5pcmtlbiBoYXRhIG9sdcWfdHUiCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICJibG9rIHV6dW5sdcSfdSBoYXRhbMSxIC0gJXMiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGJsb2NrcyByYW5nZTogJWx1LSVsdSIKKyN+IG1zZ3N0ciAiaGF0YWzEsSBibG9rIGFyYWzEscSfxLE6ICVsdS0lbHUiCisKKyN+IG1zZ2lkICJOb3RlOiBUaGlzIGlzIGEgYnl0ZS1zd2FwcGVkIGZpbGVzeXN0ZW1cbiIKKyN+IG1zZ3N0ciAiQmlsZ2k6IEJ1IGJpciB0ZXJzLWJheXRsxLEgZG9zeWEgc2lzdGVtaVxuIgorCisjfiBtc2dpZCAic2hvcnQgd3JpdGUgKG9ubHkgJWQgYnl0ZXMpIGZvciB3cml0aW5nIGltYWdlIGhlYWRlciIKKyN+IG1zZ3N0ciAiZ8O2csO8bnTDvCBiYcWfbMSxxJ/EsW7EsSB5YXptYWsgacOnaW4ga8Sxc2EgeWF6bWEgKHNhZGVjZSAlZCBiYXl0KSIKKworI34gbXNnaWQgImludmFsaWQgZnJhZ21lbnQgc2l6ZSAtICVzIgorI34gbXNnc3RyICJzZWttZSBib3l1IGhhdGFsxLEgLSAlcyIKKworI34gbXNnaWQgIldhcm5pbmc6IGZyYWdtZW50cyBub3Qgc3VwcG9ydGVkLiAgSWdub3JpbmcgLWYgb3B0aW9uXG4iCisjfiBtc2dzdHIgIlV5YXLEsTogc2VrbWVsZXIgZGVzdGVrbGVubWVkacSfaW5kZW4gLWYgc2XDp2VuZcSfaSB5b2tzYXnEsWzEsXlvclxuIgorCisjfiBtc2dpZCAiIgorI34gIkZpbGVzeXN0ZW0gdG9vIGxhcmdlLiAgTm8gbW9yZSB0aGFuIDIqKjMxLTEgYmxvY2tzXG4iCisjfiAiXHQgKDhUQiB1c2luZyBhIGJsb2Nrc2l6ZSBvZiA0aykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICIiCisjfiAiRG9zeWEgc2lzdGVtaSDDp29rIGLDvHnDvGsuICAyKiozMS0xIGJsb2t0YW4gZmF6bGFzxLFcbiIKKyN+ICJcdCAoNGsnbMSxayBibG9rbGFybGEgOFRCIG3DvG1rw7xuKSBkZXN0ZWtsZW5taXlvci4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiV2FybmluZzogc29tZSAyLjQga2VybmVscyBkbyBub3Qgc3VwcG9ydCBibG9ja3NpemVzIGdyZWF0ZXIgdGhhbiA0MDk2XG4iCisjfiAiXHR1c2luZyBleHQzLiAgVXNlIC1iIDQwOTYgaWYgdGhpcyBpcyBhbiBpc3N1ZSBmb3IgeW91LlxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiVXlhcsSxOiBCYXrEsSAyLjQgw6dla2lyZGVrbGVyIGV4dDMga3VsbGFuxLFya2VuIDQwOTYnZGFuIGRhaGEgYsO8ecO8ayBibG9rXG4iCisjfiAiXHRib3lsYXLEsW7EsSBkZXN0ZWtsZW1lei4gQnUgc2l6aW4gacOnaW4gZGUgZ2XDp2VybGl5c2UsIC1iIDQwOTYgaHVsbGFuxLFuLlxuIgorI34gIlxuIgorCisjfiBtc2dpZCAiV2FybmluZzogJWQtYnl0ZSBpbm9kZXMgbm90IHVzYWJsZSBvbiBtb3N0IHN5c3RlbXNcbiIKKyN+IG1zZ3N0ciAiVXlhcsSxOiAlZCBiYXl0bMSxayBkw7zEn8O8bWxlciBiaXIgw6dvayBzaXN0ZW1kZSBrdWxsYW7EsW1kxLHFn8SxZMSxci5cbiIKKworI34gbXNnaWQgIkpvdXJuYWwgTk9UIHJlbW92ZWRcbiIKKyN+IG1zZ3N0ciAiR8O8bmzDvGsgc2lsaW5NRWRpXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgc3BhcnNlIHN1cGVyYmxvY2tzIGRpc2FibGVkLlxuIgorI34gbXNnc3RyICIiCisjfiAiXG4iCisjfiAiRG9zeWEgc2lzdGVtaW5kZSBzw7xwZXJibG9rIGF6YWx0bWEgYmF5cmHEn8SxIHphdGVuIGV0a2luIGRlxJ9pbC5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIGNsZWFyZWQuICAlcyIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIlPDvHBlcmJsb2sgYXphbHRtYSBiYXlyYcSfxLEgdGVtaXpsZW5kaS4gICVzIgorCisjfiBtc2dpZCAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorI34gbXNnc3RyICIjXHRcdCAldSAtPiAldSAoJWQpXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiJXMgaXMgbW91bnRlZDsgY2FuJ3QgcmVzaXplIGEgbW91bnRlZCBmaWxlc3lzdGVtIVxuIgorI34gIlxuIgorI34gbXNnc3RyICIlcyBiYcSfbMSxOyBiYcSfbMSxIGJpciBkb3N5YSBzaXN0ZW1pIHllbmlkZW4gYm95dXRsYW5kxLFyxLFsYW1heiFcbiIKKworI34gbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyN+IG1zZ3N0ciAiYml0dGkgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjfiBtc2dpZCAiQ2xvbmUgZHVwbGljYXRlL2JhZCBibG9ja3MiCisjfiBtc2dzdHIgInRla3JhcmzEsS9oYXRhbMSxIGJsb2tsYWxhcsSxIGtvcHlhbGEiCisKKyN+IG1zZ2lkICJFcnJvciBhbGxvY2F0aW5nIEBhIEBiICViLiAgIgorI34gbXNnc3RyICJFayDDtnplbGxpayBibG/En3UgJWIgYXlyxLFsxLFya2VuIGhhdGEgb2x1xZ90dS4gICIKKworI34gbXNnaWQgIiIKKyN+ICJEdXBsaWNhdGUgQGJzIGZvdW5kLi4uIGludm9raW5nIGR1cGxpY2F0ZSBAYiBwYXNzZXMuXG4iCisjfiAiUGFzcyAxQjogUmVzY2FuIGZvciBkdXBsaWNhdGUvYmFkIEBic1xuIgorI34gbXNnc3RyICIiCisjfiAiVGVrcmFybGFubcSxxZ8gYmxva2xhciBidWx1bmR1Li4uIHRla3JhcmxhbmFuIGJsb2sgdGFyYW1hc8SxIGJhxZ9sYXTEsWzEsXlvci5cbiIKKyN+ICJHZcOnacWfIDFCOiB0ZWtyYXJsYW5txLHFny9oYXRhbMSxIGJsb2tsYXIgeWVuaWRlbiB0YXJhbsSxeW9yXG4iCisKKyN+IG1zZ2lkICJEdXBsaWNhdGUvYmFkIEBiKHMpIGluIEBpICVpOiIKKyN+IG1zZ3N0ciAiRMO8xJ/DvG0gJWkgacOnaW5kZWtpIHRla3Jhcmxhbm3EscWfL2hhdGFsxLEgYmxvayhsYXIpOiIKKworI34gbXNnaWQgIiIKKyN+ICJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyN+ICJpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLiAgVmFsaWQgcmFpZCBvcHRpb25zIGFyZTpcbiIKKyN+ICJcdGVhX3Zlcj08ZWFfdmVyc2lvbiAoMSBvciAyKVxuIgorI34gIlxuIgorI34gbXNnc3RyICIiCisjfiAiQmVsaXJ0aWxlbiBlayBzZcOnZW5la2xlciBoYXRhbMSxLiBFayBzZcOnZW5la2xlciAnPScgacWfYXJldGxpIMOnaWZ0bGVyXG4iCisjfiAidmlyZ8O8bGxlcmxlIGF5csSxbGFyYWsgdmVyaWxpci4gR2XDp2VybGkgcmFpZCBzZcOnZW5la2xlcmk6XG4iCisjfiAiXHRlYV92ZXI9PGVrX8O2emVsbGlrX3PDvHLDvG3DvD4gKDEgeWEgZGEgMilcbiIKKyN+ICJcbiIKKworI34gbXNnaWQgIlVzYWdlOiAgZmluZHN1cGVyIGRldmljZSBbc2tpcGJ5dGVzIFtzdGFydGtiXV1cbiIKKyN+IG1zZ3N0ciAiS3VsbGFuxLFtxLE6ICBmaW5kc3VwZXIgYXlnxLF0IFthdGxhbmFjYWtfYmF5dGxhciBbYmHFn2xhbmfEscOnX2tiXV1cbiIKKworI34gbXNnaWQgInNraXBieXRlcyBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJhdGxhbmFjYWtfYmF5dGxhciBiaXIgc2F5xLEgb2xtYWzEsSwgJXMgZGXEn2lsXG4iCisKKyN+IG1zZ2lkICJza2lwYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBzZWN0b3Igc2l6ZVxuIgorI34gbXNnc3RyICJhdGxhbmFjYWtfYmF5dGxhciBzZWt0w7ZyIGJveXVudW4ga2F0bGFyxLEgb2xtYWzEsVxuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgYSBudW1iZXIsIG5vdCAlc1xuIgorI34gbXNnc3RyICJiYcWfbGFuZ8Sxw6dfa2IgYmlyIHNhecSxIG9sbWFsxLEsICVzIGRlxJ9pbFxuIgorCisjfiBtc2dpZCAic3RhcnRrYiBzaG91bGQgYmUgcG9zaXRpdmUsIG5vdCAlTGRcbiIKKyN+IG1zZ3N0ciAiYmHFn2xhbmfEscOnX2tiIHBvcml0aWYgb2xtYWzEsSwgJUxkIGRlxJ9pbFxuIgorCisjfiBtc2dpZCAic3RhcnRpbmcgYXQgJUxkLCB3aXRoICVkIGJ5dGUgaW5jcmVtZW50c1xuIgorI34gbXNnc3RyICIlTGQgZGUgYmHFn2xhecSxcCAlZCBiYXl0IGFydHTEsXLEsW1sYVxuIgorCisjfiBtc2dpZCAiICAgICAgIHRoaXNvZmYgICAgIGJsb2NrIGZzX2Jsa19zeiAgYmxrc3ogZ3JwIGxhc3RfbW91bnRcbiIKKyN+IG1zZ3N0ciAiICAgICAgIHRoaXNvZmYgICAgIGJsb2sgZHNfYmxva19ib3l1ICBibG9rYm95dSBncnVwIHNvbl9iYcSfbGFtYVxuIgorCisjfiBtc2dpZCAiIgorI34gIlxuIgorI34gIiUxNExkOiBmaW5pc2hlZCB3aXRoIGVycm5vICVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICIlMTRMZDogJWQgaGF0YXPEsSBpbGUgYml0dGlcbiIKKworI34gbXNnaWQgIiVzIGZhaWxlZCBmb3IgJXM6ICVzXG4iCisjfiBtc2dzdHIgIiVzICVzIGnDp2luIGJhxZ9hcsSxc8SxejogJXNcbiIKKworI34gbXNnaWQgIkhESU9fR0VUR0VPIGlvY3RsIgorI34gbXNnc3RyICJIRElPX0dFVEdFTyBpb2N0bCIKKworI34gbXNnaWQgIkJMS0dFVFNJWkUgaW9jdGwiCisjfiBtc2dzdHIgIkJMS0dFVFNJWkUgaW9jdGwiCisKKyN+IG1zZ2lkICJGb3JjaWJseSBjbGVhcmluZyBIVFJFRSBmbGFnIG9uIEBpICVkICglcSkuICAoQmV0YSB0ZXN0IGNvZGUpXG4iCisjfiBtc2dzdHIgIkTDvMSfw7xtICVkICglcSkgw7x6ZXJpbmRla2kgSFRSRUUgYmF5cmHEn8SxIHpvcmxhIHRlbWl6bGVuaXlvci4gIChCZXRhIHRlc3Qga29kdSlcbiIKKworI34gbXNnaWQgIih1bmtub3duIG9zKSIKKyN+IG1zZ3N0ciAiKGJpbGlubWV5ZW4gacWfbC4gc2lzdC4pIgorCisjfiBtc2dpZCAicmVzaXplMmZzICVzICglcylcbiIKKyN+IG1zZ3N0ciAicmVzaXplMmZzICVzICglcylcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWQvJWQsIE5lZWRlZDogJWRcbiIKKyN+IG1zZ3N0ciAiU2VyYmVzdCBibG9rIHNhecSxc8SxOiAlZC8lZCwgR2VyZWtlbjogJWRcbiIKKworI34gbXNnaWQgIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIKKyN+IG1zZ3N0ciAiQmxvayB0YWhzaXNsZXJpbmRlIHVtdXRzdXoga2lwZSBnZcOnaWxpeW9yXG4iCisKKyN+IG1zZ2lkICJNb3ZpbmcgJWQgYmxvY2tzICV1LT4ldVxuIgorI34gbXNnc3RyICIlZCBibG9rIHRhxZ/EsW7EsXlvciAldS0+JXVcbiIKKworI34gbXNnaWQgImlubz0ldSwgYmxvY2tjbnQ9JWxsZCwgJXUtPiV1XG4iCisjfiBtc2dzdHIgImTDvMSfw7xtID0gJXUsIGJsb2NrX3NhecSxc8SxID0gJWxsZCwgJXUtPiV1XG4iCisKKyN+IG1zZ2lkICJJbm9kZSBtb3ZlZCAldS0+JXVcbiIKKyN+IG1zZ3N0ciAiRMO8xJ/DvG0gdGHFn8SxbmTEsSAldS0+JXVcbiIKKworI34gbXNnaWQgIklub2RlIHRyYW5zbGF0ZSAoZGlyPSV1LCBuYW1lPSUuKnMsICV1LT4ldSlcbiIKKyN+IG1zZ3N0ciAiRMO8xJ/DvG0gw6dldmlyaXNpIChkaXppbiA9ICV1LCBpc2ltPSAlLipzLCAldS0+JXUpXG4iCisKKyN+IG1zZ2lkICJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAldS0+JXUgKGRpZmYgJWQpXG4iCisjfiBtc2dzdHIgIkTDvMSfw7xtIHRhYmxvc3UgJWQuIGdydWJ1biBibG9rbGFyxLEgJXUgLT4gJXUgYXJhc8SxbmRhIHRhxZ/EsW7EsXlvciAoZmFyayAlZClcbiIKKworI34gbXNnaWQgIiVkIGJsb2NrcyBvZiB6ZXJvcy4uLlxuIgorI34gbXNnc3RyICIlZCBzxLFmxLFybMSxIGJsb2suLi5cbiIKKworI34gbXNnaWQgIklub2RlIHRhYmxlIG1vdmUgZmluaXNoZWQuXG4iCisjfiBtc2dzdHIgIkTDvMSfw7xtIHRhYmxvc3VudW4gdGHFn8Sxbm1hc8SxIHRhbWFtbGFuZMSxLlxuIgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL3ZpLmdtbyBiL2UyZnNwcm9ncy9wby92aS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2N2FlMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby92aS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3BvL3ZpLnBvIGIvZTJmc3Byb2dzL3BvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4M2NjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcG8vdmkucG8KQEAgLTAsMCArMSw2Njk1IEBACisjIFZpZXRuYW1lc2UgdHJhbnNsYXRpb24gZm9yIGUyZnNwcm9ncy4KKyMgQ29weXJpZ2h0IMKpIDIwMTMgVGhlb2RvcmUgVHNvIChtc2dpZHMpCisjIENvcHlyaWdodCDCqSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZTJmc3Byb2dzIHBhY2thZ2UuCisjIENseXRpZSBTaWRkYWxsIDxjbHl0aWVAcml2ZXJsYW5kLm5ldC5hdT4sIDIwMDYtMjAxMC4KKyMgVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT4sIDIwMTItMjAxMy4KKyMKKyMuIFRoZSBzdHJpbmdzIGluIGUyZnNjaydzIHByb2JsZW0uYyBjYW4gYmUgdmVyeSBoYXJkIHRvIHRyYW5zbGF0ZSwKKyMuIHNpbmNlIHRoZSBzdHJpbmdzIGFyZSBleHBhbmRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuICBGaXJzdCBvZiBhbGwsCisjLiB0aGVyZSBpcyBhbiBALWV4cGFuc2lvbiwgd2hlcmUgc3RyaW5ncyBsaWtlICJAaSIgYXJlIGV4cGFuZGVkIHRvCisjLiAiaW5vZGUiLCBhbmQgc28gb24uICBJbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IgdHJhbnNsYXRvcnMsIHRoZQorIy4gZTJmc3Byb2dzIHBvIHRlbXBsYXRlIGZpbGUgaGFzIGJlZW4gZW5oYW5jZWQgd2l0aCBjb21tZW50cyB0aGF0IHNob3cKKyMuIHRoZSBALWV4cGFuc2lvbiwgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBwcm9ibGVtLmMgZmlsZS4KKyMuCisjLiBUcmFuc2xhdG9ycyBhcmUgZnJlZSB0byB1c2UgdGhlIEAtZXhwYW5zaW9uIGZhY2lsaXR5IGlmIHRoZXkgc28KKyMuIGNob29zZSwgYnkgcHJvdmlkaW5nIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiBlMmZzY2svbWVzc2FnZS5jLgorIy4gVGhlc2UgdHJhbnNsYXRpb24gY2FuIGNvbXBsZXRlbHkgcmVwbGFjZSBhbiBleHBhbnNpb247IGZvciBleGFtcGxlLAorIy4gaWYgImJibG9jayIgKHdoaWNoIGluZGljYXRlZCB0aGF0ICJAYiIgd291bGQgYmUgZXhwYW5kZWQgdG8gImJsb2NrIikKKyMuIGlzIHRyYW5zbGF0ZWQgYXMgImRkYXRlbnZlcmx1c3QiLCB0aGVuICJAZCIgd2lsbCBiZSBleHBhbmRlZCB0bworIy4gImRhdGVudmVybHVzdCIuICBBbHRlcm5hdGl2ZWx5LCB0cmFuc2xhdG9ycyBjYW4gc2ltcGx5IG5vdCB1c2UgdGhlCisjLiBALWV4cGFuc2lvbiBmYWNpbGl0eSBhdCBhbGwuCisjLgorIy4gVGhlIHNlY29uZCBleHBhbnNpb24gd2hpY2ggaXMgZG9uZSBmb3IgZTJmc2NrJ3MgcHJvYmxlbS5jIG1lc3NhZ2VzIGlzCisjLiBhIGR5bmFtaWMgJS1leHBhbnNpb24sIHdoaWNoIGV4cGFuZHMgJWkgYXMgYW4gaW5vZGUgbnVtYmVyLCBhbmQgc28KKyMuIG9uLiAgQSB0YWJsZSBvZiB0aGVzZSBleHBhbnNpb25zIGNhbiBiZSBmb3VuZCBiZWxvdy4gIE5vdGUgdGhhdAorIy4gJS1leHByZXNzaW9ucyB0aGF0IGJlZ2luIHdpdGggIiVEIiBhbmQgIiVJIiBhcmUgdHdvLWNoYXJhY3RlcgorIy4gZXhwYW5zaW9uczsgc28gZm9yIGV4YW1wbGUsICIlSXUiIGV4cGFuZHMgdG8gdGhlIGlub2RlJ3MgdXNlciBpZAorIy4gb3duZXJzaGlwIGZpZWxkIChpbm9kZS0+aV91aWQpLgorIy4gIAorIy4gCSViCTxibGs+CQkJYmxvY2sgbnVtYmVyCisjLiAJJUIJPGJsa2NvdW50PgkJaW50ZWdlcgorIy4gCSVjCTxibGsyPgkJCWJsb2NrIG51bWJlcgorIy4gCSVEaQk8ZGlyZW50PiAtPiBpbm8JCWlub2RlIG51bWJlcgorIy4gCSVEbgk8ZGlyZW50PiAtPiBuYW1lCXN0cmluZworIy4gCSVEcgk8ZGlyZW50PiAtPiByZWNfbGVuCisjLiAJJURsCTxkaXJlbnQ+IC0+IG5hbWVfbGVuCisjLiAJJUR0CTxkaXJlbnQ+IC0+IGZpbGV0eXBlCisjLiAJJWQJPGRpcj4gCQkJaW5vZGUgbnVtYmVyCisjLiAJJWcJPGdyb3VwPgkJCWludGVnZXIKKyMuIAklaQk8aW5vPgkJCWlub2RlIG51bWJlcgorIy4gCSVJcwk8aW5vZGU+IC0+IGlfc2l6ZQorIy4gCSVJUwk8aW5vZGU+IC0+IGlfZXh0cmFfaXNpemUKKyMuIAklSWIJPGlub2RlPiAtPiBpX2Jsb2NrcworIy4gCSVJbAk8aW5vZGU+IC0+IGlfbGlua3NfY291bnQKKyMuIAklSW0JPGlub2RlPiAtPiBpX21vZGUKKyMuIAklSU0JPGlub2RlPiAtPiBpX210aW1lCisjLiAJJUlGCTxpbm9kZT4gLT4gaV9mYWRkcgorIy4gCSVJZgk8aW5vZGU+IC0+IGlfZmlsZV9hY2wKKyMuIAklSWQJPGlub2RlPiAtPiBpX2Rpcl9hY2wKKyMuIAklSXUJPGlub2RlPiAtPiBpX3VpZAorIy4gCSVJZwk8aW5vZGU+IC0+IGlfZ2lkCisjLiAJJWoJPGlubzI+CQkJaW5vZGUgbnVtYmVyCisjLiAJJW0JPGNvbV9lcnIgZXJyb3IgbWVzc2FnZT4KKyMuIAklTgk8bnVtPgorIy4gCSVwCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vPgorIy4gCSVQCQlleHQyZnNfZ2V0X3BhdGhuYW1lIG9mIDxkaXJlbnQ+LT5pbm8gd2l0aCA8aW5vMj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuICAoSWYgZGlyZW50IGlzIE5VTEwKKyMuIAkJCQl0aGVuIHJldHVybiB0aGUgcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8yPikKKyMuIAklcQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGRpcj4KKyMuIAklUQkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4gd2l0aCA8ZGlyPiBhcworIy4gCQkJCXRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyMuIAklcwk8c3RyPgkJCW1pc2NlbGxhbmVvdXMgc3RyaW5nCisjLiAJJVMJCWJhY2t1cCBzdXBlcmJsb2NrCisjLiAJJVgJPG51bT4JaGV4YWRlY2ltYWwgZm9ybWF0CisjLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZTJmc3Byb2dzLTEuNDIuOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiB0eXRzb0BhbHVtLm1pdC5lZHVcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMy0wNi0xNiAwODoxNy0wNDAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0wNy0zMSAxNDoyNiswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlRlYW0tV2Vic2l0ZTogPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vdmkuaHRtbD5cbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS41LjVcbiIKKyJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiB1dGYtOFxuIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MjMgbWlzYy9ta2UyZnMuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJsb2NrICV1IG91dCBvZiByYW5nZTsgaWdub3JlZC5cbiIKK21zZ3N0ciAiS2jhu5FpIGjhu49uZyAldSBu4bqxbSBuZ2/DoGkgcGjhuqFtIHZpIG7Dqm4gYuG7iyBi4buPIHF1YS5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkga2nhu4NtIHRyYSBz4buxIMSRw7puZyBt4buxYyBuw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyBuw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZyIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjcyIGUyZnNjay9pc2Nhbi5jOjExMCBlMmZzY2svc2NhbnRlc3QuYzoxMDcKKyM6IGUyZnNjay91bml4LmM6MTMzMiBlMmZzY2svdW5peC5jOjE0MjAgbWlzYy9iYWRibG9ja3MuYzoxMjE0CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyMjIgbWlzYy9iYWRibG9ja3MuYzoxMjM2IG1pc2MvYmFkYmxvY2tzLmM6MTI0OAorIzogbWlzYy9kdW1wZTJmcy5jOjU4OCBtaXNjL2UyaW1hZ2UuYzoxMTk2IG1pc2MvZTJpbWFnZS5jOjEzMjQKKyM6IG1pc2MvZTJpbWFnZS5jOjEzMzcgbWlzYy9ta2UyZnMuYzoxOTYgbWlzYy90dW5lMmZzLmM6MTkwNyByZXNpemUvbWFpbi5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlcyIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIG3hu58gJXMiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIG3hu58gcG9wZW4g4oCcJXPigJ0iCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjIwMworbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyB2w6BvIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgaOG7j25nIHThu6sgdOG6rXAgdGluIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6rXAgbmjhuq10IG7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nIgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGlsbGVnYWwgYmxvY2sgJXUgZm91bmQgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ2xlYXJlZC5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IHTDrG0gdGjhuqV5IGto4buRaSBj4bqlbSAldSB0cm9uZyBuw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZyBuw6puIGLhu4sgeG/DoS5cbiIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBraOG7kWkgJWx1ICglcykgdHJvbmcga2hpICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIGto4buRaSAlbHUgKCVzKS4gICIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjEgZTJmc2NrL2VoYW5kbGVyLmM6MTEwCittc2dpZCAiSWdub3JlIGVycm9yIgorbXNnc3RyICJC4buPIHF1YSBs4buXaSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICLDiXAgYnXhu5ljIGdoaSBs4bqhaSIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6MTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyaXRpbmcgYmxvY2sgJWx1ICglcykgd2hpbGUgJXMuICAiCittc2dzdHIgIkfEg3AgbOG7l2kga2hpIGdoaSBraOG7kWkgJWx1ICglcykgdHJvbmcga2hpICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSBraOG7kWkgJWx1ICglcykuICAiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjU3Cittc2dpZCAiZW1wdHkgZGlyYmxvY2tzIgorbXNnc3RyICJraOG7kWkgdGjGsCBt4bulYyBy4buXbmciCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjYyCittc2dpZCAiZW1wdHkgZGlyIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIHRoxrAgbeG7pWMgcuG7l25nIgorCisjOiBlMmZzY2svZW1wdHlkaXIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJFbXB0eSBkaXJlY3RvcnkgYmxvY2sgJXUgKCMlZCkgaW4gaW5vZGUgJXVcbiIKK21zZ3N0ciAiS2jhu5FpIHRoxrAgbeG7pWMgcuG7l25nICV1ICgjJWQpIHRyb25nIG7DunQgdGjDtG5nIHRpbiAldVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiVzOiAlcyB0w6puIHThuq1wIHRpbiAgc+G7kSBraOG7kWkgIGPhu6Ega2jhu5FpXG4iCisKKyM6IGUyZnNjay9leHRlbmQuYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBvZiBibG9ja3MhXG4iCittc2dzdHIgIktow7RuZyBjaG8gcGjDqXAgc+G7kSBraOG7kWkgxJHDsyFcbiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGJsb2NrIGJ1ZmZlciAoc2l6ZT0lZClcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgxJHhu4dtIGto4buRaSAoY+G7oT0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIkPDoWNoIGTDuW5nOiAlcyDEkcSpYVxuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICJCTEtGTFNCVUYgaW9jdGwga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuIEtow7RuZyB0aOG7gyDEkeG6qXkgZOG7ryBsaeG7h3UgYuG7mSDEkeG7h20gbMOqbiDEkcSpYS5cbiIKKworIzogZTJmc2NrL2lzY2FuLmM6NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstRl0gWy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIGRldmljZVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstRl0gWy1JIEvEkE5dIHRoaeG6v3RfYuG7i1xuIgorIlxuIgorIltLxJBOOiBjw6FjIGto4buRaSDEkeG7h20gbsO6dCB0aMO0bmcgdGluXVxuIgorIlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo4MSBlMmZzY2svdW5peC5jOjk2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAidHJvbmcga2hpIG3hu58gJXMgxJHhu4MgxJHhuql5IGThu68gbGnhu4d1IGzDqm4gxJHEqWEiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTY3IHJlc2l6ZS9tYWluLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBmbHVzaCAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGPhu5EgxJHhuql5IGThu68gbGnhu4d1ICVzIGzDqm4gxJHEqWEiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA5MQorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAidHJvbmcga2hpIG3hu58gdmnhu4djIHF1w6l0IG7DunQgdGjDtG5nIHRpbiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTI3IG1pc2MvZTJpbWFnZS5jOjExMDkKK21zZ2lkICJ3aGlsZSBnZXR0aW5nIG5leHQgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSBs4bqleSBuw7p0IHRow7RuZyB0aW4ga+G6vyB0aeG6v3AiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMgc2Nhbm5lZC5cbiIKK21zZ3N0ciAiJXUgbsO6dCB0aMO0bmcgdGluIMSRw6MgxJHGsOG7o2MgcXXDqXQuXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTIyCittc2dpZCAicmVhZGluZyBqb3VybmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAixJFhbmcgxJHhu41jIHNpw6p1IGto4buRaSBuaOG6rXQga8O9XG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBubyB2YWxpZCBqb3VybmFsIHN1cGVyYmxvY2sgZm91bmRcbiIKK21zZ3N0ciAiJXM6IGtow7RuZyB0w6xtIHRo4bqleSBzacOqdSBraOG7kWkgbmjhuq10IGvDvSBo4bujcCBs4buHXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBqb3VybmFsIHRvbyBzaG9ydFxuIgorbXNnc3RyICIlczogbmjhuq10IGvDvSBxdcOhIG5n4bqvblxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcmVjb3ZlcmluZyBqb3VybmFsXG4iCittc2dzdHIgIiVzOiDEkWFuZyBwaOG7pWMgaOG7k2kgbmjhuq10IGvDvVxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd29uJ3QgZG8gam91cm5hbCByZWNvdmVyeSB3aGlsZSByZWFkLW9ubHlcbiIKK21zZ3N0ciAiJXM6IHPhur0ga2jDtG5nIHBo4bulYyBo4buTaSBuaOG6rXQga8O9IHRyb25nIGtoaSBjw7MgdMOsbmggdHLhuqFuZyBjaOG7iSDEkeG7jWNcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJlLW9wZW4gJXMiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSBt4bufIGzhuqFpICVzIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImF0aHXhu5ljIHTDrW5oIMSRw6MgbeG7nyBy4buZbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkFn4bq3cCBs4buXaSBraGkgY+G6pXAgcGjDoXQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJia2jhu5FpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkJt4bqjbmcg4bqjbmgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJjbsOpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMTgKK21zZ2lkICJDY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBAYiIKK21zZ3N0ciAiQ3h1bmcgxJHhu5l0IHbhu5tpIEBiIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDoWMiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMAorbXNnaWQgIklpbGxlZ2FsIgorbXNnc3RyICJJY+G6pW0iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImpuaOG6rXQga8O9IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMgorbXNnaWQgIkRkZWxldGVkIgorbXNnc3RyICJEYuG7iyB4b8OhIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyMworbXNnaWQgImRkaXJlY3RvcnkiCittc2dzdHIgImR0aMawIG3hu6VjIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNAorbXNnaWQgImVlbnRyeSIKK21zZ3N0ciAiZW3hu6VjIG5o4bqtcCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjUKK21zZ2lkICJFQGUgJyVEbicgaW4gJXAgKCVpKSIKK21zZ3N0ciAiRUBlIOKAnCVEbuKAnSB0cm9uZyAlcCAoJWkpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEyNgorbXNnaWQgImZmaWxlc3lzdGVtIgorbXNnc3RyICJmaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIkZjaG8gQGkgJWkgKCVRKSBsw6AiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI4Cittc2dpZCAiZ2dyb3VwIgorbXNnc3RyICJnbmjDs20iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUUgQGQgQGkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMwCittc2dpZCAibGxvc3QrZm91bmQiCittc2dzdHIgImxt4bqldCt0w6xtIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMQorbXNnaWQgIkxpcyBhIGxpbmsiCittc2dzdHIgIkxsw6AgbGnDqm4ga+G6v3QiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMyCittc2dpZCAibW11bHRpcGx5LWNsYWltZWQiCittc2dzdHIgIm3EkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm5raMO0bmcgaOG7o3AgbOG7hyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzQKK21zZ2lkICJvb3JwaGFuZWQiCittc2dzdHIgIm90aOG7q2EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgInB24bqlbiDEkeG7gSB0cm9uZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgInFo4bqhbiBuZ2jhuqFjaCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAickBpIGfhu5FjIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInNuw6puIGzDoCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzkKK21zZ2lkICJTc3VwZXJAYiIKK21zZ3N0ciAiU3Npw6p1QGIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQwCittc2dpZCAidXVuYXR0YWNoZWQiCittc2dzdHIgInVjaMawYS1j4buRLcSR4buLbmgiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQxCittc2dpZCAidmRldmljZSIKK21zZ3N0ciAidnRoaeG6v3QtYuG7iyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDIKK21zZ2lkICJ4ZXh0ZW50IgorbXNnc3RyICJ4beG7ny1y4buZbmciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ6ZMOgaSBi4bqxbmcga2jDtG5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gdsO0IGdpw6EgdHLhu4s+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjxOw7p0IHRow7RuZyB0aW4ga2jhu5FpIGjhu49uZz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU3Cittc2dpZCAiPFRoZSB1c2VyIHF1b3RhIGlub2RlPiIKK21zZ3N0ciAiPE7DunQgaOG6oW4gbmfhuqFjaCBuZ8aw4budaSBkw7luZz4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU4Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjxOw7p0IGjhuqFuIG5n4bqhY2ggbmjDs20+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1OQorbXNnaWQgIjxUaGUgYm9vdCBsb2FkZXIgaW5vZGU+IgorbXNnc3RyICI8bsO6dCB0aMO0bmcgdGluIGLhu5kgbuG6oXAga2jhu59pIMSR4buZbmc+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPG7DunQgdGjDtG5nIHRpbiBo4buneSB4b8OhIHRoxrAgbeG7pWM+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MQorbXNnaWQgIjxUaGUgZ3JvdXAgZGVzY3JpcHRvciBpbm9kZT4iCittc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gbcO0IHThuqMgbmjDs20+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MgorbXNnaWQgIjxUaGUgam91cm5hbCBpbm9kZT4iCittc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gbmjhuq10IGvDvT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYzCittc2dpZCAiPFJlc2VydmVkIGlub2RlIDk+IgorbXNnc3RyICI8bsO6dCB0aMO0bmcgdGluIMSRxrDhu6NjIGTDoG5oIHJpw6puZyA5PiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjQKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgMTA+IgorbXNnc3RyICI8bsO6dCB0aMO0bmcgdGluIMSRxrDhu6NjIGTDoG5oIHJpw6puZyAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICJ04bqtcCB0aW4gdGjGsOG7nW5nIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzNQorbXNnaWQgImRpcmVjdG9yeSIKK21zZ3N0ciAidGjGsCBt4bulYyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozMzcKK21zZ2lkICJjaGFyYWN0ZXIgZGV2aWNlIgorbXNnc3RyICJ0aGnhur90IGLhu4sga8O9IHThu7EiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM5Cittc2dpZCAiYmxvY2sgZGV2aWNlIgorbXNnc3RyICJ0aGnhur90IGLhu4sga2jhu5FpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIuG7kW5nIGThuqtuIGPDsyB0w6puIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MworbXNnaWQgInN5bWJvbGljIGxpbmsiCittc2dzdHIgImxpw6puIGvhur90IHTGsOG7o25nIHRyxrBuZyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDUgbWlzYy91dWlkZC5jOjE2MQorbXNnaWQgInNvY2tldCIKK21zZ3N0ciAi4buVIGPhuq9tIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGZpbGUgdHlwZSB3aXRoIG1vZGUgMCVvIgorbXNnc3RyICJraeG7g3UgdOG6rXAgdGluIGtow7RuZyByw7UgduG7m2kgY2jhur8gxJHhu5kgMCVvIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyMgorbXNnaWQgImluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJraOG7kWkgZ2nDoW4gdGnhur9wIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjQyNAorbXNnaWQgImRvdWJsZSBpbmRpcmVjdCBibG9jayIKK21zZ3N0ciAia2jhu5FpIGdpw6FuIHRp4bq/cCDEkcO0aSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjYKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgImto4buRaSBnacOhbiB0aeG6v3AgZ+G6pXAgYmEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDI4Cittc2dpZCAidHJhbnNsYXRvciBibG9jayIKK21zZ3N0ciAia2jhu5FpIGThu4tjaCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MzAKK21zZ2lkICJibG9jayAjIgorbXNnc3RyICJraOG7kWkgIyIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjIyMgorbXNnaWQgIm11bHRpcGx5IGNsYWltZWQgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIMSRYSB0dXnDqm4gYuG7kSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjYxMCBlMmZzY2svcGFzczFiLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mToga2jDtG5nIHTDrG0gdGjhuqV5IGto4buRaSB0csO5bmcgKGR1cF9ibGspIGNobyAlbGx1XG4iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4MjEKK21zZ2lkICJyZXR1cm5lZCBmcm9tIGNsb25lX2ZpbGVfYmxvY2siCittc2dzdHIgIsSRw6MgdHLhuqMgbOG6oWkgdOG7qyBraOG7kWkgdOG6rXAgdGluIG5ow6FpIChjbG9uZV9maWxlX2Jsb2NrKSIKKworIzogZTJmc2NrL3Bhc3MxYi5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcm5hbCBlcnJvcjogY291bGRuJ3QgbG9va3VwIEVBIGJsb2NrIHJlY29yZCBmb3IgJWxsdSIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mToga2jDtG5nIHRo4buDIHRyYSB0w6xtIG3hu6VjIGdoaSBraOG7kWkgRUEgY2hvICVsbHUiCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGxvb2t1cCBFQSBpbm9kZSByZWNvcmQgZm9yICV1IgorbXNnc3RyICJs4buXaSBu4buZaSBi4buZOiBraMO0bmcgdGjhu4MgdHJhIHTDrG0gbeG7pWMgZ2hpIG7DunQgdGjDtG5nIHRpbiBFQSBjaG8gJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjQ3NSBlMmZzY2svcGFzczIuYzo3ODIKK21zZ2lkICJyZWFkaW5nIGRpcmVjdG9yeSBibG9jayIKK21zZ3N0ciAixJFhbmcgxJHhu41jIGto4buRaSB0aMawIG3hu6VjIgorCisjOiBlMmZzY2svcGFzczEuYzo1OTgKK21zZ2lkICJpbi11c2UgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIMSRYW5nIMSRxrDhu6NjIGTDuW5nIgorCisjOiBlMmZzY2svcGFzczEuYzo2MDkKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIHRoxrAgbeG7pWMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYxOQorbXNnaWQgInJlZ3VsYXIgZmlsZSBpbm9kZSBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBuw7p0IHRow7RuZyB0aW4gdOG6rXAgdGluIGNodeG6qW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOAorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBraOG7kWkgxJFhbmcgxJHGsOG7o2MgZMO5bmciCisKKyM6IGUyZnNjay9wYXNzMS5jOjY5NQorbXNnaWQgIm9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAixJFhbmcgbeG7nyBi4bqjbiBxdcOpdCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wYXNzMS5jOjcyOQorbXNnaWQgImdldHRpbmcgbmV4dCBpbm9kZSBmcm9tIHNjYW4iCittc2dzdHIgIsSRYW5nIGzhuqV5IG7DunQgdGjDtG5nIHRpbiBr4bq/IHRp4bq/cCB04burIGLhuqNuIHF1w6l0IgorCisjOiBlMmZzY2svcGFzczEuYzoxMjM5Cittc2dpZCAiUGFzcyAxIgorbXNnc3RyICJM4bqnbiAxIgorCisjOiBlMmZzY2svcGFzczEuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgaW5kaXJlY3QgYmxvY2tzIG9mIGlub2RlICV1IgorbXNnc3RyICLEkWFuZyDEkeG7jWMga2jhu5FpIGdpw6FuIHRp4bq/cCBj4bunYSBuw7p0IHRow7RuZyB0aW4gJXUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzNDYKK21zZ2lkICJiYWQgaW5vZGUgbWFwIgorbXNnc3RyICLDoW5oIHjhuqEgbsO6dCB0aMO0bmcgdGluIHNhaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM2OQorbXNnaWQgImlub2RlIGluIGJhZCBibG9jayBtYXAiCittc2dzdHIgIm7DunQgdGjDtG5nIHRpbiB0cm9uZyDDoW5oIHjhuqEga2jhu5FpIHNhaSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM4OQorbXNnaWQgImltYWdpYyBpbm9kZSBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBuw7p0IHRow7RuZyB0aW4gbWEgdGh14bqtdCBpbWFnaWMiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTYKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiw6FuaCB44bqhIGto4buRaSDEkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE1MjcKK21zZ2lkICJleHQgYXR0ciBibG9jayBtYXAiCittc2dzdHIgIsOhbmggeOG6oSBraOG7kWkgZXh0IGF0dHIgKHRodeG7mWMgdMOtbmggdGjDqm0/KSIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlNmx1KCVjKTogZXhwZWN0aW5nICU2bHUgZ290IHBoeXMgJTZsdSAoYmxrY250ICVsbGQpXG4iCittc2dzdHIgIiU2bHUgKCVjKTogbW9uZyDEkeG7o2kgJTZsdSBjw7JuIG5o4bqtbiAlNmx1IHbhuq10IGzDvSAoxJHhur9tIGto4buRaSAlbGxkKVxuIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjYwCittc2dpZCAiYmxvY2sgYml0bWFwIgorbXNnc3RyICJt4bqjbmcg4bqjbmgga2jhu5FpIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjY2Cittc2dpZCAiaW5vZGUgYml0bWFwIgorbXNnc3RyICJt4bqjbmcg4bqjbmggbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svcGFzczEuYzoyNjcyCittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgImLhuqNuZyBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wYXNzMi5jOjI4MworbXNnaWQgIlBhc3MgMiIKK21zZ3N0ciAiTOG6p24gMiIKKworIzogZTJmc2NrL3Bhc3MyLmM6ODA1Cittc2dpZCAiQ2FuIG5vdCBjb250aW51ZS4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aeG6v3AgdOG7pWMuIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICJt4bqjbmcg4bqjbmggbsO6dCB0aMO0bmcgdGluIGhvw6BuIHThuqV0IgorCisjOiBlMmZzY2svcGFzczMuYzo4NgorbXNnaWQgIlBlYWsgbWVtb3J5IgorbXNnc3RyICJC4buZIG5o4bubIGNhbyDEkWnhu4NtIgorCisjOiBlMmZzY2svcGFzczMuYzoxMzYKK21zZ2lkICJQYXNzIDMiCittc2dzdHIgIkzhuqduIDMiCisKKyM6IGUyZnNjay9wYXNzMy5jOjMyMgorbXNnaWQgImlub2RlIGxvb3AgZGV0ZWN0aW9uIGJpdG1hcCIKK21zZ3N0ciAibeG6o25nIOG6o25oIHBow6F0IGhp4buHbiB2w7JuZyBs4bq3cCBuw7p0IHRow7RuZyB0aW4iCisKKyM6IGUyZnNjay9wYXNzNC5jOjE5NgorbXNnaWQgIlBhc3MgNCIKK21zZ3N0ciAiTOG6p24gNCIKKworIzogZTJmc2NrL3Bhc3M1LmM6NzQKK21zZ2lkICJQYXNzIDUiCittc2dzdHIgIkzhuqduIDUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTEKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKGtow7RuZyBuaOG6r2MpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyCittc2dpZCAiRml4IgorbXNnc3RyICJT4butYSBjaOG7r2EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTMKK21zZ2lkICJDbGVhciIKK21zZ3N0ciAiWG/DoSBz4bqhY2giCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAixJDhu4tuaCB24buLIGzhuqFpIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIkPhuqVwIHBow6F0IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2Cittc2dpZCAiRXhwYW5kIgorbXNnc3RyICJN4bufIHLhu5luZyIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NworbXNnaWQgIkNvbm5lY3QgdG8gL2xvc3QrZm91bmQiCittc2dzdHIgIkvhur90IG7hu5FpIMSR4bq/biAvbeG6pXQrdMOsbSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1OAorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiVOG6oW8iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICJD4bupdSB24bubdCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MAorbXNnaWQgIlRydW5jYXRlIgorbXNnc3RyICJD4bqvdCBuZ+G6r24iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEKK21zZ2lkICJDbGVhciBpbm9kZSIKK21zZ3N0ciAiWG/DoSBz4bqhY2ggbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIkjhu6d5IGLhu48iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMKK21zZ2lkICJTcGxpdCIKK21zZ3N0ciAiQ2hpYSB0w6FjaCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJUaeG6v3AgdOG7pWMiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUKK21zZ2lkICJDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcyIKK21zZ3N0ciAiTmjDoWkgdGhlbyBjw6FjIGto4buRaSDEkWEgdHV5w6puIGLhu5EiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjYKK21zZ2lkICJEZWxldGUgZmlsZSIKK21zZ3N0ciAiWG/DoSB04bqtcCB0aW4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKK21zZ2lkICJTdXBwcmVzcyBtZXNzYWdlcyIKK21zZ3N0ciAiVGh1IGjhu5NpIHRow7RuZyDEkWnhu4dwIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY4Cittc2dpZCAiVW5saW5rIgorbXNnc3RyICJC4buPIGxpw6puIGvhur90IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIlhvw6Egc+G6oWNoIGNo4buJIG3hu6VjIGhIVFJFRSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3MAorbXNnaWQgIlJlY3JlYXRlIgorbXNnc3RyICJU4bqhbyBs4bqhaSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OQorbXNnaWQgIihOT05FKSIKK21zZ3N0ciAiKEtIw5RORykiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAKK21zZ2lkICJGSVhFRCIKK21zZ3N0ciAixJDDgyBT4busQSBDSOG7rkEiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICLEkMODIFhPw4EgU+G6oENIIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyCittc2dpZCAiUkVMT0NBVEVEIgorbXNnc3RyICLEkMODIMSQ4buKTkggVuG7iiBM4bqgSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAixJDDgyBD4bqkUCBQSMOBVCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NAorbXNnaWQgIkVYUEFOREVEIgorbXNnc3RyICLEkMODIE3hu54gUuG7mE5HIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1Cittc2dpZCAiUkVDT05ORUNURUQiCittc2dzdHIgIsSQw4MgS+G6vlQgTuG7kEkgTOG6oEkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICLEkMODIFThuqBPIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3Cittc2dpZCAiU0FMVkFHRUQiCittc2dzdHIgIsSQw4MgQ+G7qFUgVuG7mlQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODgKK21zZ2lkICJUUlVOQ0FURUQiCittc2dzdHIgIsSQw4MgQ+G6rlQgTkfhuq5OIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiTsOaVCBUSMOUTkcgVElOIMSQw4MgWE/DgSBT4bqgQ0giCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAKK21zZ2lkICJBQk9SVEVEIgorbXNnc3RyICJC4buKIEjhu6ZZIELhu44iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTEKK21zZ2lkICJTUExJVCIKK21zZ3N0ciAixJDDgyBDSElBIFTDgUNIIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyCittc2dpZCAiQ09OVElOVUlORyIKK21zZ3N0ciAixJBBTkcgVEnhur5QIFThu6RDIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzCittc2dpZCAiTVVMVElQTFktQ0xBSU1FRCBCTE9DS1MgQ0xPTkVEIgorbXNnc3RyICJDw4FDIEtI4buQSSDEkEEgVFVZw4pOIELhu5AgxJDDgyDEkMav4buiQyBOSMOBSSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAiVOG6rFAgVElOIMSQw4MgQuG7iiBYw5NBIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAiQuG7iiBUSFUgSOG7kkkiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTYKK21zZ2lkICJVTkxJTktFRCIKK21zZ3N0ciAiQuG7iiBC4buOIExJw4pOIEvhur5UIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3Cittc2dpZCAiSFRSRUUgSU5ERVggQ0xFQVJFRCIKK21zZ3N0ciAiQ0jhu4ggTeG7pEMgSEPDglkgxJDDgyDEkMav4buiQyBYT8OBIFPhuqBDSCIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5OAorbXNnaWQgIldJTEwgUkVDUkVBVEUiCittc2dzdHIgIlPhurwgVOG6oE8gTOG6oEkiCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNworbXNnaWQgIkBiIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIkBiIEBCIGNobyBAZyAlZyBraMO0bmcgcGjhuqNpIHRyb25nIEBnLiAgKEBiICViKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEKK21zZ2lkICJAaSBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICJAaSBAQiBjaG8gQGcgJWcga2jDtG5nIHBo4bqjaSB0cm9uZyBAZy4gIChAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiQuG6o25nIEBpIGNobyBAZyAlZyBraMO0bmcgcGjhuqNpIHRyb25nIEBnLiAgKEBiICViKVxuIgorIkPhuqJOSCBCw4FPOiBDw5MgVEjhu4IgTeG6pFQgROG7riBMSeG7hlUgTkhJ4buAVS5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFRoZSBzdXBlcmJsb2NrIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0uICBJZiB0aGUgZGV2aWNlIGlzIHZhbGlkIGFuZCBpdCByZWFsbHkgY29udGFpbnMgYW4gZXh0MlxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9ja1xuCisjLiBALWV4cGFuZGVkOiBpcyBjb3JydXB0LCBhbmQgeW91IG1pZ2h0IHRyeSBydW5uaW5nIGUyZnNjayB3aXRoIGFuIGFsdGVybmF0ZSBzdXBlcmJsb2NrOlxuCisjLiBALWV4cGFuZGVkOiAgICAgZTJmc2NrIC1iICVTIDxkZXZpY2U+XG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIEBTIGNvdWxkIG5vdCBiZSByZWFkIG9yIGRvZXMgbm90IGRlc2NyaWJlIGEgY29ycmVjdCBleHQyXG4iCisiQGYuICBJZiB0aGUgQHYgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4iCisiQGYgKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBAU1xuIgorImlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIEBTOlxuIgorIiAgICBlMmZzY2sgLWIgJVMgPEB2PlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQFMga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyBob+G6t2Mga2jDtG5nIGRp4buFbiB04bqjIEBmIGtp4buDdSBleHQyIMSRw7puZy5cbiIKKyJAdiBo4bujcCBs4buHIHbDoCB0aOG6rXQgY2jhu6lhIEBmIGV4dDIgKGtow7RuZyBwaOG6o2kgdsO5bmcgdHJhbyDEkeG7lWkgaGF5IGfDrCBraMOhYylcbiIKKyJ0aMOsIEBTIGLhu4sgaOG7j25nOiDEkeG7gSBuZ2jhu4sgYuG6oW4gdGjhu60gY2jhuqF5IGUyZnNjayB24bubaSBAUyB4ZW4ga+G6vTpcbiIKKyIgICAgZTJmc2NrIC1iICVTIDxAdj5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiS8OtY2ggY+G7oSBAZiAodMO5eSB0aGVvIEBTKSBsw6AgJWIgQGJcbiIKKyJLw61jaCBj4buhIHbhuq10IGzDvSBj4bunYSBAdiBsw6AgJWMgQGJcbiIKKyJIb+G6t2MgQFMgaG/hurdjIGLhuqNuZyBwaMOibiB2w7luZyBy4bqldCBjw7MgdGjhu4MgYuG7iyBo4buPbmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorIkBTIGvDrWNoIGPhu6EgQGIgPSAlYiwga8OtY2ggY+G7oSDEkW/huqFuID0gJWMuXG4iCisiUGhpw6puIGLhuqNuIGUyZnNjayBuw6B5IGtow7RuZyBo4buXIHRy4bujIGvDrWNoIGPhu6EgxJFv4bqhblxuIgorImtow6FjIHbhu5tpIGvDrWNoIGPhu6EgQGIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1Cittc2dpZCAiQFMgQGJzX3Blcl9ncm91cCA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIkBTIEBiIG3hu5dpIG5ow7NtID0gJWIsIGPDsm4gbsOqbiBsw6AgJWNcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBmaXJzdF9kYXRhX2Jsb2NrID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTAKK21zZ2lkICJAUyBmaXJzdF9kYXRhX0BiID0gJWIsIHNob3VsZCBoYXZlIGJlZW4gJWNcbiIKK21zZ3N0ciAiQFMgQGIgZOG7ryBsaeG7h3UgdGjhu6kgbmjhuqV0ID0gJWIsIGPDsm4gbsOqbiBsw6AgJWNcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGYga2jDtG5nIGPDsyBVVUlEIG7Dqm4gxJFhbmcgdOG6oW8gcmEgbsOzLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnRcbiIKKyJvZiB0aGUgaW5vZGUgdGFibGUgcmVxdWlyZSByZWxvY2F0aW9uLCB5b3UgbWF5IHdpc2ggdG8gdHJ5XG4iCisicnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iICVTJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbVxuIgorIm1heSBsaWUgb25seSB3aXRoIHRoZSBwcmltYXJ5IGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmRcbiIKKyJ0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkdoaSBjaMO6OiBu4bq/dSB2w6BpIGto4buRaSBuw7p0IHRow7RuZyB0aW4gaGF5IGto4buRaSBt4bqjbmcg4bqjbmgga2jhu5FpXG4iCisiaGF5IHBo4bqnbiBj4bunYSBi4bqjbmcgbsO6dCB0aMO0bmcgdGluIGPhuqduIHRoaeG6v3QgxJHGsOG7o2MgxJHhu4tuaCB24buLIGzhuqFpLFxuIgorIsSR4buBIG5naOG7iyBi4bqhbiB0aOG7rSBjaOG6oXkgZTJmc2NrIHbhu5tpIHTDuXkgY2jhu41uIOKAnC1iICVT4oCdXG4iCisidHLGsOG7m2MgdGnDqm4uIFbhuqVuIMSR4buBIGPDsyB0aOG7gyBu4bqxbSBjaOG7iSB0cm9uZyBjw6FjIG3DtCB04bqjIG5ow7NtXG4iCisia2jhu5FpIGNow61uaCwgdGjDrCBjw6FjIG3DtCB04bqjIG5ow7NtIGto4buRaSBk4buxIHRy4buvIGPDsyB0aOG7gyBsw6AgxJHDum5nLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBDb3JydXB0aW9uIGZvdW5kIGluIHN1cGVyYmxvY2suICAoJXMgPSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY5Cittc2dpZCAiQ29ycnVwdGlvbiBmb3VuZCBpbiBAUy4gICglcyA9ICVOKS5cbiIKK21zZ3N0ciAiVMOsbSBz4buxIGLhu4sgaOG7j25nIHRyb25nIEBTLiAgKCVzID0gJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2U6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgeMOhYyDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgQHYgduG6rXQgbMO9OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJT4buRIMSR4bq/bSBAaSB0cm9uZyBAUyBsw6AgJWksIEBzICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmQga2jDtG5nIGjhu5cgdHLhu6MgdMOtbmggbsSDbmcga2nhu4N1IHThuq1wIHRpbi5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSAlaSkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkBTIGhhcyBhbiBAbiBAaiAoQGkgJWkpLlxuIgorbXNnc3RyICJAUyBjw7MgbeG7mXQgQG4gQGogKEBpICVpKS5cbiIKKworIy4gQC1leHBhbmRlZDogRXh0ZXJuYWwgam91cm5hbCBoYXMgbXVsdGlwbGUgZmlsZXN5c3RlbSB1c2VycyAodW5zdXBwb3J0ZWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE5MworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBtdWx0aXBsZSBAZiB1c2VycyAodW5zdXBwb3J0ZWQpLlxuIgorbXNnc3RyICJAaiBiw6puIG5nb8OgaSBjw7Mgbmhp4buBdSBuZ8aw4budaSBkw7luZyBAZiAoa2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MpLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTgKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBAaiBiw6puIG5nb8OgaVxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGhhcyBiYWQgc3VwZXJibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIwMworbXNnaWQgIkV4dGVybmFsIEBqIGhhcyBiYWQgQFNcbiIKK21zZ3N0ciAiQGogYsOqbiBuZ2/DoGkgY8OzIEBTIHNhaVxuIgorCisjLiBALWV4cGFuZGVkOiBFeHRlcm5hbCBqb3VybmFsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmaWxlc3lzdGVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjA4Cittc2dpZCAiRXh0ZXJuYWwgQGogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIEBmXG4iCittc2dzdHIgIkBqIGLDqm4gbmdvw6BpIGtow7RuZyBo4buXIHRy4bujIEBmIG7DoHlcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGxpa2VseSB0aGF0IHlvdXIgY29weSBvZiBlMmZzY2sgaXMgb2xkIGFuZC9vciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBqb3VybmFsIAorIy4gQC1leHBhbmRlZDogZm9ybWF0LlxuCisjLiBALWV4cGFuZGVkOiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaXMgY29ycnVwdC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMTMKK21zZ2lkICIiCisiQGYgQGogQFMgaXMgdW5rbm93biB0eXBlICVOICh1bnN1cHBvcnRlZCkuXG4iCisiSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEBqIGZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisiQFMgQGogQGYgY8OzIGtp4buDdSBs4bqhICVOIChraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oykuXG4iCisiUuG6pXQgY8OzIHRo4buDIGzDoCBi4bqhbiBjw7MgbeG7mXQgYuG6o24gc2FvIGUyZnNjayBjxakgbcOgL2hheSBraMO0bmcgaOG7lyB0cuG7oyDEkeG7i25oIGThuqFuZyBAaiBuw6B5LlxuIgorIkPFqW5nIGPDsyB0aOG7gyBsw6AgQFMgQGogYuG7iyBo4buPbmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkBTIEBqIGLhu4sgaOG7j25nLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgJXMgaXMgcHJlc2VudC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzX0BqIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIEBqICVzIGlzIHByZXNlbnQuXG4iCittc2dzdHIgIkPhu50gQFMgaGFzX0BqIHbhuqtuIHThu5F0LCBtw6AgY8WpbmcgY8OzIG3hu5l0IEBqICVzLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gam91cm5hbCBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIzMQorbXNnaWQgIkBTIG5lZWRzX3JlY292ZXJ5IGZsYWcgaXMgc2V0LCBidXQgbm8gQGogaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiQFMgxJHhurd0IGPhu50gbmVlZHNfcmVjb3ZlcnksIGPDsm4ga2jDtG5nIGPDsyBAai5cbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzYKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIkPhu50gQFMgbmVlZHNfcmVjb3ZlcnkgduG6q24gdOG7kXQsIGPDsm4gQGogY8OzIGThu68gbGnhu4d1LlxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorbXNnaWQgIkNsZWFyIEBqIgorbXNnc3RyICJYb8OhIHPhuqFjaCBAaiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBmaWxlc3lzdGVtLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0NiBlMmZzY2svcHJvYmxlbS5jOjY5NQorbXNnaWQgIkBmIGhhcyBmZWF0dXJlIGZsYWcocykgc2V0LCBidXQgaXMgYSByZXZpc2lvbiAwIEBmLiAgIgorbXNnc3RyICJAZiDEkeG6t3QgKGPDoWMpIGPhu50gdMOtbmggbsSDbmcsIGPDsm4gbMOgIEBmIGLhuqNuIHPhu61hIMSR4buVaSAwLiIKKworIy4gQC1leHBhbmRlZDogJXMgb3JwaGFuZWQgaW5vZGUgJWkgKHVpZD0lSXUsIGdpZD0lSWcsIG1vZGU9JUltLCBzaXplPSVJcylcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNTEKK21zZ2lkICIlcyBAbyBAaSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuIgorbXNnc3RyICJAaSBAbyAlcyAlaSAodWlkPSVJdSwgZ2lkPSVJZywgY2jhur8gxJHhu5k9JUltLCBj4buhPSVJcylcbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1NgorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIiVCICglYikgQGwgxJHGsOG7o2MgdMOsbSB0cm9uZyBAaSBAbyAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIsSQw6MgeG/DoSBz4bqhY2ggJUIgKCViKSDEkcaw4bujYyB0w6xtIHRyb25nIEBpIEBvICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIG9ycGhhbmVkIGlub2RlICVpIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBvIEBpICVpIGluIEBTLlxuIgorbXNnc3RyICJAaSBAbyAlaSBAbCB0cm9uZyBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCBpbm9kZSAlaSBpbiBvcnBoYW5lZCBpbm9kZSBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorbXNnc3RyICJASSBAaSAlaSBpbiBAbyBAaSBsaXN0LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjc2Cittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gcmVhZC1vbmx5IGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkBTIEBqIMSR4bq3dCBt4buZdCBj4budIHTDrW5oIG7Eg25nIGNo4buJIMSR4buNYyBraMO0bmcgcsO1LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjgxCittc2dpZCAiQGogQFMgaGFzIGFuIHVua25vd24gaW5jb21wYXRpYmxlIGZlYXR1cmUgZmxhZyBzZXQuXG4iCittc2dzdHIgIkBTIEBqIMSR4bq3dCBt4buZdCBj4budIHTDrW5oIG7Eg25nIGtow7RuZyB0xrDGoW5nIHRow61jaCBraMO0bmcgcsO1LlxuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgIlBoacOqbiBi4bqjbiBAaiBraMO0bmcgaOG7lyB0cuG7oyB0cm9uZyBlMmZzY2sgbsOgeS5cbiIKKworIy4gQC1leHBhbmRlZDogTW92aW5nIGpvdXJuYWwgZnJvbSAvJXMgdG8gaGlkZGVuIGlub2RlLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1vdmluZyBAaiBmcm9tIC8lcyB0byBoaWRkZW4gQGkuXG4iCisiXG4iCittc2dzdHIgIiIKKyLEkGFuZyBkaSBjaHV54buDbiBAaiB04burIC8lcyBzYW5nIEBpIGLhu4sg4bqpbi5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgbW92aW5nIGpvdXJuYWw6ICVtXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgbW92aW5nIEBqOiAlbVxuIgorIlxuIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIGRpIGNodXnhu4NuIEBqOiAlbVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuXG4KKyMuIEAtZXhwYW5kZWQ6IENsZWFyaW5nIGZpZWxkcyBiZXlvbmQgdGhlIFYxIGpvdXJuYWwgc3VwZXJibG9jay4uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMDEKK21zZ2lkICIiCisiRm91bmQgQG4gVjIgQGogQFMgZmllbGRzIChmcm9tIFYxIEBqKS5cbiIKKyJDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBAaiBAUy4uLlxuIgorIlxuIgorbXNnc3RyICIiCisiVMOsbSB0aOG6pXkgY8OhYyB0csaw4budbmcgQFMgQGogcGIyIEBuICh04burIEBqIHBiMSkuXG4iCisixJBhbmcgeG/DoSBz4bqhY2ggY8OhYyB0csaw4budbmcgbuG6sW0g4bufIGLDqm4ga2lhIEBTIEBqIHBiMS4uLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA3Cittc2dpZCAiUnVuIEBqIGFueXdheSIKK21zZ3N0ciAiVuG6q24gY2jhuqF5IEBqIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzEyCittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIkNoxrBhIMSR4bq3dCBj4budIHBo4bulYyBo4buTaSB0cm9uZyBAUyBk4buxIHRy4buvIG7Dqm4gduG6q24gY2jhuqF5IEBqLlxuIgorCisjLiBALWV4cGFuZGVkOiBCYWNraW5nIHVwIGpvdXJuYWwgaW5vZGUgYmxvY2sgaW5mb3JtYXRpb24uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMxNworbXNnaWQgIiIKKyJCYWNraW5nIHVwIEBqIEBpIEBiIGluZm9ybWF0aW9uLlxuIgorIlxuIgorbXNnc3RyICIiCisixJBhbmcgc2FvIGzGsHUgdGjDtG5nIHRpbiBAYiBAaSBAai5cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9pbm9kZSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfYmxvY2tzXG4KKyMuIEAtZXhwYW5kZWQ6IGlzICVOOyBzaG91bGQgYmUgemVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjIKK21zZ2lkICIiCisiQGYgZG9lcyBub3QgaGF2ZSByZXNpemVfQGkgZW5hYmxlZCwgYnV0IHNfcmVzZXJ2ZWRfZ2R0X0Bic1xuIgorImlzICVOOyBAcyB6ZXJvLiAgIgorbXNnc3RyICIiCisiQGYga2jDtG5nIGLhuq10IHJlc2l6ZV9AaSwgY8OybiBzX3Jlc2VydmVkX2dkdF9AYnMgbMOgICVOO1xuIgorIkBzIHPhu5Ega2jDtG5nLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemVfaW5vZGUgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIGlub2RlIGlzIG5vbi16ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyOAorbXNnaWQgIlJlc2l6ZV9AaSBub3QgZW5hYmxlZCwgYnV0IHRoZSByZXNpemUgQGkgaXMgbm9uLXplcm8uICAiCittc2dzdHIgIktow7RuZyBi4bqtdCByZXNpemVfQGksIGPDsm4gQGkgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBraMO0bmcgcGjhuqNpIHPhu5Ega2jDtG5nLi4gICIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMzMKK21zZ2lkICJSZXNpemUgQGkgbm90IHZhbGlkLiAgIgorbXNnc3RyICJAaSB0aGF5IMSR4buVaSBrw61jaCBj4buhIGtow7RuZyBwaOG6o2kgaOG7o3AgbOG7hy4gICIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgKCV0LFxuCisjLiBALWV4cGFuZGVkOiBcdG5vdyA9ICVUKSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjMzOAorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgKCV0LFxuIgorIlx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4iCittc2dzdHIgIiIKKyJHaeG7nSBn4bqvbiBr4bq/dCBAUyBjdeG7kWkgY8O5bmdcbiIKKyIoJXQsIGLDonkgZ2nhu50gPSAlVCkgbuG6sW0gdHJvbmcgdGjhu51pIHTGsMahbmcgbGFpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQzCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiR2nhu50gZ2hpIG5o4bubIEBTIGN14buRaSBjw7luZygldCwgYsOieSBnaeG7nSA9ICVUKSBu4bqxbSB0cm9uZyB0aMOsIHTGsMahbmcgbGFpLlxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICJM4budaSBn4bujaSDDvSBAUyBjaG8gc2nDqnUga2jhu5FpIGLDqm4gbmdvw6BpIEBzICVYLiAgIgorCisjLiBALWV4cGFuZGVkOiBBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1MgorbXNnaWQgIiIKKyJBZGRpbmcgZGlyaGFzaCBoaW50IHRvIEBmLlxuIgorIlxuIgorbXNnc3RyICIiCisixJBhbmcgdGjDqm0gbeG6uW8gZGlyaGFzaCB2w6BvIEBmLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM1NworbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgY2hlY2tzdW0gaXMgJTA0eCwgc2hvdWxkIGJlICUwNHkuICAiCittc2dzdHIgIk3DtCB04bqjIEBnICVnIGPDsyB04buVbmcga2nhu4NtIGzDoCAlMDR4LCBwaOG6o2kgbMOgICUwNHkuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCBkZXNjcmlwdG9yICVnIG1hcmtlZCB1bmluaXRpYWxpemVkIHdpdGhvdXQgZmVhdHVyZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbiIKK21zZ3N0ciAiTcO0IHThuqMgQGcgJWcgY8OzIG5ow6NuIGzDoCBjaMawYSBraOG7n2kgdOG6oW8gbcOgIGtow7RuZyBjw7MgdOG6rXAgdMOtbmggbsSDbmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIk3DtCB04bqjIEBnICVnIHNhaSDEkeG6v20gY8OhYyBuw7p0IHRow7RuZyB0aW4gY2jGsGEgZMO5bmcgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IExhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzcyCittc2dpZCAiTGFzdCBAZyBAYiBAQiB1bmluaXRpYWxpemVkLiAgIgorbXNnc3RyICJDaMawYSBraOG7n2kgdOG6oW8gQEIgQGIgQGcgY3Xhu5FpIGPDuW5nLiAgIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIHRyYW5zYWN0aW9uICVpIHdhcyBjb3JydXB0LCByZXBsYXkgd2FzIGFib3J0ZWQuXG4iCittc2dzdHIgIkdpYW8gZOG7i2NoIG5o4bqtdCBrw70gJWkgYuG7iyBo4buPbmcgbsOqbiBo4buneSBi4buPIHRp4bq/biB0csOsbmggcGjDoXQgbOG6oWkuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgxCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIkPhu50g4oCcdGVzdF9mc+KAnSDEkcaw4bujYyDEkeG6t3QgKHbDoCBleHQ0IHPhurVuIHPDoG5nKSIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgc2V0KSAgIgorbXNnc3RyICIiCisiR2nhu50gZ+G6r24ga+G6v3QgQFMgY3Xhu5FpIGPDuW5nIG7hurFtIHRyb25nIHTGsMahbmcgbGFpXG4iCisiXHQodGhlbyDDrXQgbmjhuqV0IG3hu5l0IG5nw6B5LCBy4bqldCBjw7MgdGjhu4MgZG8gxJHhu5NuZyBo4buTIHBo4bqnbiBj4bupbmcgYuG7iyBzYWkgbOG6rXApLiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozOTIKK21zZ2lkICIiCisiQFMgbGFzdCB3cml0ZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUuXG4iCisiXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IHNldCkuICAiCittc2dzdHIgIiIKKyJHaeG7nSBnaGkgbmjhu5sgQFMgY3Xhu5FpIGPDuW5nIG7hurFtIHRyb25nIHTGsMahbmcgbGFpXG4iCisiXHQodGhlbyDDrXQgbmjhuqV0IG3hu5l0IG5nw6B5LCBy4bqldCBjw7MgdGjhu4MgZG8gxJHhu5NuZyBo4buTIHBo4bqnbiBj4bupbmcgYuG7iyBzYWkgbOG6rXApLiIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIkzhu5dpOiBt4buZdCBoYXkgbmhp4buBdSB04buVbmcga2nhu4NtIGLhu5kgbcO0IHThuqMgQGcgQGIga2jDtG5nIHBo4bqjaSBo4bujcCBs4buHLiAgIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgaW5vZGVzIGNvdW50IHRvICVqICh3YXMgJWkpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDAzCittc2dpZCAiU2V0dGluZyBmcmVlIEBpcyBjb3VudCB0byAlaiAod2FzICVpKVxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3Qgc+G7kSBsxrDhu6NuZyBAaXMgdGjDoG5oICVqIChsw6AgJWkpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZnJlZSBibG9ja3MgY291bnQgdG8gJWMgKHdhcyAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MDgKK21zZ2lkICJTZXR0aW5nIGZyZWUgQGJzIGNvdW50IHRvICVjICh3YXMgJWIpXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBz4buRIGzGsOG7o25nIEBicyB0aMOgbmggJWMgKGzDoCAlYilcbiIKKworIy4gQC1leHBhbmRlZDogTWFraW5nIHF1b3RhIGlub2RlICVpICglUSkgaGlkZGVuLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxMworbXNnaWQgIk1ha2luZyBAcSBAaSAlaSAoJVEpIGhpZGRlbi5cbiIKK21zZ3N0ciAiTMOgbSBjaG8gQHEgQGlzICVpICglUSkg4bqpbiDEkWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQxOAorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAiQFMgY8OzIGto4buRaSBNTVAga2jDtG5nIGjhu6NwIGzhu4cuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMworbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiQFMgY8OzIHPhu5EgbcOgdSBuaGnhu4dtIE1NUCBraMO0bmcgaOG7o3AgbOG7hy4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc19vcGVuMjogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX29wZW4yOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQzMworIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfY2hlY2tfZGVzYzogJW1cbiIKK21zZ3N0ciAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0MAorbXNnaWQgIlBhc3MgMTogQ2hlY2tpbmcgQGlzLCBAYnMsIGFuZCBzaXplc1xuIgorbXNnc3RyICJM4bqnbiBxdWEgMTogxJFhbmcga2nhu4NtIHRyYSBjw6FjIEBpLCBAYiB2w6Aga8OtY2ggY+G7oVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDQKK21zZ2lkICJAciBpcyBub3QgYSBAZC4gICIKK21zZ3N0ciAiQHIga2jDtG5nIHBo4bqjaSBAZC4gICIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQ5Cittc2dpZCAiQHIgaGFzIGR0aW1lIHNldCAocHJvYmFibHkgZHVlIHRvIG9sZCBta2UyZnMpLiAgIgorbXNnc3RyICJAciDEkeG6t3QgZHRpbWUgKHLhuqV0IGPDsyB0aOG7gyBkbyBta2QyZnMgY8WpKS4gICIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIkBpICVpIMSRw6MgZMOgbmggcmnDqm5nICglUSkgY8OzIGNo4bq/IMSR4buZIEBuLiIKKworIy4gQC1leHBhbmRlZDogZGVsZXRlZCBpbm9kZSAlaSBoYXMgemVybyBkdGltZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEQgQGkgJWkgaGFzIHplcm8gZHRpbWUuICAiCittc2dzdHIgIkBpIEBEICVpIGPDsyBkdGltZSBi4bqxbmcga2jDtG5nLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICJAaSAlaSDEkWFuZyDEkcaw4bujYyBkw7luZywgY8OybiDEkeG6t3QgZHRpbWUuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICJAaSAlaSBsw6AgQGQgQHouICAgICIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzQKK21zZ2lkICJAZyAlZydzIEBiIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBAYiBj4bunYSBAZyAlZyB04bqhaSAlYiBAQy5cbiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSBiaXRtYXAgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0NzkKK21zZ2lkICJAZyAlZydzIEBpIEBCIGF0ICViIEBDLlxuIgorbXNnc3RyICJAQiBAaSBj4bunYSBAZyAlZyDhu58gJWIgQGMuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgdGFibGUgYXQgJWIgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODQKK21zZ2lkICJAZyAlZydzIEBpIHRhYmxlIGF0ICViIEBDLlxuIgorbXNnc3RyICJC4bqjbmcgQGkgY+G7p2EgQGcgJWcg4bufICViIEBDLlxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGJsb2NrIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0ODkKK21zZ2lkICJAZyAlZydzIEBiIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICJAYiBAQiAoJWIpIGPhu6dhIEBnICVnIGzDoCBzYWkiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgaW5vZGUgYml0bWFwICglYikgaXMgYmFkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ5NAorbXNnaWQgIkBnICVnJ3MgQGkgQEIgKCViKSBpcyBiYWQuICAiCittc2dzdHIgIkBCIEBpICglYikgY+G7p2EgQGcgJWcgbMOgIHNhaS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk5Cittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSwgaV9zaXplIGzDoCAlSXMsIEBzICVOLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSwgaV9ibG9ja3MgaXMgJUliLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA0Cittc2dpZCAiQGkgJWksIGlfQGJzIGlzICVJYiwgQHMgJU4uICAiCittc2dzdHIgIkBpICVpLCBpX0BicyBsw6AgJUliLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGluIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUwOQorbXNnaWQgIkBJICVCICglYikgaW4gQGkgJWkuICAiCittc2dzdHIgIiVCICglYikgQGwgbuG6sW0gdHJvbmcgQGkgJWkuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICVCICglYikgb3ZlcmxhcHMgZmlsZXN5c3RlbSBtZXRhZGF0YSBpbiBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTQKK21zZ2lkICIlQiAoJWIpIG92ZXJsYXBzIEBmIG1ldGFkYXRhIGluIEBpICVpLiAgIgorbXNnc3RyICIlQiAoJWIpIMSRw6ggbMOqbiBzacOqdSBk4buvIGxp4buHdSBAZiB0cm9uZyBAaSAlaS4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSAlaSBjw7MgQGIgY+G6pW0uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFRvbyBtYW55IGlsbGVnYWwgYmxvY2tzIGluIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBpbGxlZ2FsIEBicyBpbiBAaSAlaS5cbiIKK21zZ3N0ciAiUXXDoSBuaGnhu4F1IEBiIGPhuqVtIHRyb25nIEBpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICIlQiAoJWIpIEBsIG7hurFtIHRyb25nIEBpIEBiIHNhaS4gIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM0Cittc2dpZCAiQmFkIEBiIEBpIGhhcyBpbGxlZ2FsIEBiKHMpLiAgIgorbXNnc3RyICJAaSBAYiBzYWkgY8OzIEBiIGPhuqVtLiAiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBvciBiYWQgYmxvY2sgaW4gdXNlIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjUzOQorbXNnaWQgIkR1cGxpY2F0ZSBvciBiYWQgQGIgaW4gdXNlIVxuIgorbXNnc3RyICJAYiB0csO5bmcgaGF5IHNhaSDEkWFuZyDEkcaw4bujYyBkw7luZy5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiQGIgc2FpICViIMSRxrDhu6NjIGTDuW5nIGzDoG0gQGIgZ2nDoW4gdGnhur9wIGPhu6dhIEBpIEBiLiAgIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ5Cittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAaSBAbiBn4bqnbiBuaMawIGNo4bqvYyBjaOG6r24gxJHDoyBo4buPbmcuIMSQ4buBIG5naOG7iyBi4bqhbiBk4burbmcgbmdheSBiw6J5IGdp4budXG4iCisidsOgIGNo4bqheSBs4buHbmgg4oCcZTJmc2NrIC1j4oCdIMSR4buDIHF1w6l0IHTDrG0ga2jhu5FpIHNhaSB0cm9uZyBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJAYiB0aOG6rXQgc2FpIHRow6wga2jDtG5nIHRo4buDIHPhu61hIGNo4buvYSBAZi5cbiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisiQuG6oW4gY8OzIHRo4buDIGfhu6EgYuG7jyBAYiBuw6B5IGto4buPaSBkYW5oIHPDoWNoIGPDoWMgQGIgc2FpXG4iCisidsOgIG1vbmcgQGIgdGjhuq10IMSRw7puZy4gTmjGsG5nIG3DoCBraMO0bmcgYuG6o28gaMOgbmggZ8OsLlxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBUaGUgcHJpbWFyeSBzdXBlcmJsb2NrICglYikgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2NworbXNnaWQgIlRoZSBwcmltYXJ5IEBTICglYikgaXMgb24gdGhlIGJhZCBAYiBsaXN0LlxuIgorbXNnc3RyICJAUyBjaMOtbmggKCViKSBu4bqxbSB0csOqbiBkYW5oIHPDoWNoIGPDoWMgQGIgc2FpLlxuIgorCisjLiBALWV4cGFuZGVkOiBCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBncm91cCBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3RcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1NzIKK21zZ2lkICJCbG9jayAlYiBpbiB0aGUgcHJpbWFyeSBAZyBkZXNjcmlwdG9ycyBpcyBvbiB0aGUgYmFkIEBiIGxpc3RcbiIKK21zZ3N0ciAiS2jhu5FpICViIHRyb25nIG5o4buvbmcgbcO0IHThuqMgQGcgY2jDrW5oIGPDsyBu4bqxbSB0cm9uZyBkYW5oIHPDoWNoIGPDoWMgQGIgc2FpLlxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBHcm91cCAlZydzIHN1cGVyYmxvY2sgKCViKSBpcyBiYWQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTc4Cittc2dpZCAiV2FybmluZzogR3JvdXAgJWcncyBAUyAoJWIpIGlzIGJhZC5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IEBTIGPhu6dhIEBnICVnICglYikgbMOgIHNhaS5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICJD4bqjbmggYsOhbzogYuG6o24gc2FvIGPDoWMgbcO0IHThuqMgQGcgY+G7p2EgbmjDs20gJWcgY8OzIG3hu5l0IEBiIHNhaSAoJWIpLlxuIgorCisjLiBALWV4cGFuZGVkOiBQcm9ncmFtbWluZyBlcnJvcj8gIGJsb2NrICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTg5Cittc2dpZCAiUHJvZ3JhbW1pbmcgZXJyb3I/ICBAYiAjJWIgY2xhaW1lZCBmb3Igbm8gcmVhc29uIGluIHByb2Nlc3NfYmFkX0BiLlxuIgorbXNnc3RyICJM4buXaSBs4bqtcCB0csOsbmggPyBAYiAlYiDEkcaw4bujYyB0dXnDqm4gYuG7kSwga2jDtG5nIGPDsyBsw70gZG8sIHRyb25nIHByb2Nlc3NfYmFkX0BiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgJU4gY29udGlndW91cyBibG9jayhzKSBpbiBibG9jayBncm91cCAlZyBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTk1Cittc2dpZCAiQEEgJU4gY29udGlndW91cyBAYihzKSBpbiBAYiBAZyAlZyBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkBBICVOIEBiIGvhu4EgbmhhdSB0cm9uZyBAZyBAYiAlZyBjaG8gJXM6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYnVmZmVyIGZvciByZWxvY2F0aW5nICVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBiIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuIgorbXNnc3RyICJAQSBi4buZIMSR4buHbSBAYiDEkeG7gyDEkeG7i25oIHbhu4sgbOG6oWkgJXNcbiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIGZyb20gJWIgdG8gJWMuLi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MDUKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuIgorbXNnc3RyICLEkGFuZyDEkeG7i25oIHbhu4sgbOG6oWkgJXMgY+G7p2EgQGcgJWcgdOG7qyAlYiBzYW5nICVjLi4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFJlbG9jYXRpbmcgZ3JvdXAgJWcncyAlcyB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWxvY2F0aW5nIEBnICVnJ3MgJXMgdG8gJWMuLi5cbiIKK21zZ3N0ciAixJBhbmcgxJHhu4tuaCB24buLIGzhuqFpICUyJHMgY+G7p2EgQGcgJTEkZyBzYW5nICUzJGMuLi5cbiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgJWIgb2YgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjE1Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgQGIgJWIgb2YgJXM6ICVtXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBraMO0bmcgdGjhu4MgxJHhu41jIEBiICViIHRyw6puICVzOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBXYXJuaW5nOiBjb3VsZCBub3Qgd3JpdGUgYmxvY2sgJWIgZm9yICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyMAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBAYiAlYiBmb3IgJXM6ICVtXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBraMO0bmcgdGjhu4MgZ2hpIEBiICViIGNobyAlczogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpbm9kZSBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MjUgZTJmc2NrL3Byb2JsZW0uYzoxNDc0Cittc2dpZCAiQEEgQGkgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiQEEgQEIgQGkgKCVOKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBibG9jayBiaXRtYXAgKCVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2MzAKK21zZ2lkICJAQSBAYiBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBAQiBAYiAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiQEEgdGjDtG5nIHRpbiBsacOqbiBr4bq/dCBpY291bnQ6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgZGlyZWN0b3J5IGJsb2NrIGFycmF5OiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAZCBAYiBhcnJheTogJW1cbiIKK21zZ3N0ciAiQEEgbeG6o25nIEBkIEBkOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgQGlzICglaSk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBxdcOpdCBjw6FjIEBpICglaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGJsb2NrcyBpbiBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6t3AgbOG6oWkgdHLDqm4gY8OhYyBAYiB0cm9uZyBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBpbm9kZSBjb3VudCBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGNvdW50PSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NTUKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBpIGNvdW50IGluZm9ybWF0aW9uIChAaT0laSwgY291bnQ9JU4pOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6pXQgZ2nhu68gdGjDtG5nIHRpbiDEkeG6v20gQGkgKEBpPSVpLCDEkeG6v209JU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGRpcmVjdG9yeSBibG9jayBpbmZvcm1hdGlvbiAoaW5vZGU9JWksIGJsb2NrPSViLCBudW09JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY2MAorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGQgQGIgaW5mb3JtYXRpb24gKEBpPSVpLCBAYj0lYiwgbnVtPSVOKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuqV0IGdp4buvIHRow7RuZyB0aW4gQGQgQGIgKEBpPSVpLCBAYj0lYiwgc+G7kT0lTik6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgQGkgJWk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIkBpICVpIMSR4bq3dCBj4budIG1hIHRodeG6rXQgaW1hZ2ljLiAgIgorCisjLiBALWV4cGFuZGVkOiBTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgJWkpIGhhcyBpbW11dGFibGVcbgorIy4gQC1leHBhbmRlZDogb3IgYXBwZW5kLW9ubHkgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTcGVjaWFsIChAdi9zb2NrZXQvZmlmby9zeW1saW5rKSBmaWxlIChAaSAlaSkgaGFzIGltbXV0YWJsZVxuIgorIm9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgIgorbXNnc3RyICIiCisiVOG6rXAgdGluIChAduG7iy/hu5UgY+G6r20vRklGTy9sacOqbiBr4bq/dCB0xrDhu6NuZyB0csawbmcpIMSR4bq3YyBiaeG7h3RcbiIKKyIoQGkgJWkpIMSR4bq3dCBj4budIGtow7RuZyB0aGF5IMSR4buVaSAoaW1tdXRhYmxlKSBoYXlcbiIKKyJjaOG7iSBwaHUgdGjDqm0gKGFwcGVuZC1vbmx5KS4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIEBjaW9uIGZsYWcgc2V0IG9uIEBmIHdpdGhvdXQgQGNpb24gc3VwcG9ydC4gICIKK21zZ3N0ciAiQGkgJWkgxJHhurd0IGPhu50gQGMgdHLDqm4gQGYgbcOgIGtow7RuZyBo4buXIHRy4bujIGto4bqjIG7Eg25nIEBjLiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICJAaSAoQHYv4buVIGPhuq9tL0ZJRk8pICVpIGPDsyBrw61jaCBj4buhIGtow7RuZyBwaOG6o2kgc+G7kSBraMO0bmcuIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwMAorbXNnaWQgIkBqIEBpIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgIgorbXNnc3RyICJAaSBAaiBraMO0bmcgxJFhbmcgxJHGsOG7o2MgZMO5bmcsIGPDsm4gY2jhu6lhIGThu68gbGnhu4d1LiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBqIGtow7RuZyBwaOG6o2kgdOG6rXAgdGluIGNodeG6qW4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSB3YXMgcGFydCBvZiB0aGUgQG8gQGkgbGlzdC4gICIKK21zZ3N0ciAiQGkgJWkgxJHDoyB0aHXhu5ljIHbhu4Egc2FuaCBzw6FjaCBAaSBAby4gICIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTYKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICJUw6xtIHRo4bqleSBjw6FjIEBpIMSRw6MgdGh14buZYyB24buBIGRhbmggc8OhY2ggxJHDoyBsacOqbiBr4bq/dCB0aOG7q2EgYuG7iyBo4buPbmcuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyMQorbXNnaWQgIkBBIHJlZmNvdW50IHN0cnVjdHVyZSAoJU4pOiAlbVxuIgorbXNnc3RyICJAQSBj4bqldSB0csO6YyByZWZjb3VudCAoJU4pOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBmb3IgaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzI2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiBmb3IgQGkgJWkuICAiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgQGIgQGEgJWIgY2hvIEBpICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBiYWQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczMQorbXNnaWQgIkBpICVpIGhhcyBhIGJhZCBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQGkgJWkgY8OzIG3hu5l0IEBiIEBhICViLiAgIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciByZWFkaW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiAoJW0pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjczNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgKCVtKS4gICIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBAYiBAYSAlYiAoJW0pLiAgIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc0MQorbXNnaWQgIkBhIEBiICViIGhhcyByZWZlcmVuY2UgY291bnQgJXIsIEBzICVOLiAgIgorbXNnc3RyICJAYiBAYSAlYiBjw7Mgc+G7kSDEkeG6v20gdGhhbSBjaGnhur91ICVyLCBAcyAlTi4gICIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDYKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBnaGkgQGIgQGEgJWIgKCVtKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiQGIgQGEgJWIgY8OzIGhfQGIgPiAxLiAgIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiQEEgQGIgQGEgJWIuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBpcyBjb3JydXB0IChhbGxvY2F0aW9uIGNvbGxpc2lvbikuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzYxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgIgorbXNnc3RyICJAYiBAYSAlYiBi4buLIGjhu49uZyAoeHVuZyDEkeG7mXQgY+G6pXAgcGjDoXQpLiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgbmFtZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzY2Cittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gbmFtZSkuICAiCittc2dzdHIgIkBiIEBhICViIGLhu4sgaOG7j25nICh0w6puIEBuKS4gICIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGlzIGNvcnJ1cHQgKGludmFsaWQgdmFsdWUpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3MQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKEBuIHZhbHVlKS4gICIKK21zZ3N0ciAiQGIgQGEgJWIgYuG7iyBo4buPbmcgKGdpw6EgdHLhu4sgQG4pLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyB0b28gYmlnLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyB0b28gYmlnLiAgIgorbXNnc3RyICJAaSAlaSBxdcOhIGzhu5tuLiAgICAgIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIGNhdXNlcyBkaXJlY3RvcnkgdG8gYmUgdG9vIGJpZy4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3ODAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBAZCB0byBiZSB0b28gYmlnLiAgIgorbXNnc3RyICIlQiAoJWIpIGfDonkgcmEgQGQgcXXDoSBs4bubbi4gICAgICAgICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3ODUKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBmaWxlIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgZ8OieSByYSB04bqtcCB0aW4gcXXDoSBs4bubbi4gICAgICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo3OTAKK21zZ2lkICIlQiAoJWIpIGNhdXNlcyBzeW1saW5rIHRvIGJlIHRvbyBiaWcuICAiCittc2dzdHIgIiVCICglYikgbMOgbSBjaG8gbGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nIHF1w6EgbOG7m24uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIkBpICVpIMSR4bq3dCBj4budIElOREVYX0ZMIHRyw6puIEBmIGtow7RuZyBjw7MgaOG7lyB0cuG7oyBodHJlZS5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIkBpICVpIMSR4bq3dCBj4budIElOREVYX0ZMIG5oxrBuZyBraMO0bmcgcGjhuqNpIEBkLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgcm9vdCBub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgwNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSBoYXMgYW4gQG4gcm9vdCBub2RlLlxuIgorbXNnc3RyICJAaCAlaSBjw7MgbeG7mXQgbsO6dCBn4buRYyBAbi5cbiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxMAorbXNnaWQgIkBoICVpIGhhcyBhbiB1bnN1cHBvcnRlZCBoYXNoIHZlcnNpb24gKCVOKVxuIgorbXNnc3RyICJAaCAlaSBjw7MgbeG7mXQgcGhpw6puIGLhuqNuIGLEg20ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgdXNlcyBhbiBpbmNvbXBhdGlibGUgaHRyZWUgcm9vdCBub2RlIGZsYWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBoICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuIgorbXNnc3RyICJAaCAlaSBkw7luZyBj4budIG7DunQgZ+G7kWMgaHRyZWUga2jDtG5nIHTGsMahbmcgdGjDrWNoLlxuIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICJAaCAlaSBjw7MgxJHhu5kgc8OidSBjw6J5ICglTikgcXXDoSBs4bubblxuIgorCisjLiBALWV4cGFuZGVkOiBCYWQgYmxvY2sgaW5vZGUgaGFzIGFuIGluZGlyZWN0IGJsb2NrICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIG1ldGFkYXRhLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjgyNQorbXNnaWQgIiIKKyJCYWQgQGIgQGkgaGFzIGFuIGluZGlyZWN0IEBiICglYikgdGhhdCBjb25mbGljdHMgd2l0aFxuIgorIkBmIG1ldGFkYXRhLiAgIgorbXNnc3RyICIiCisiQGkgQGIgc2FpIGPDsyBt4buZdCBAYiBnacOhbiB0aeG6v3AgKCViKSB4dW5nIMSR4buZdCB24bubaVxuIgorInNpw6p1IGThu68gbGnhu4d1IEBmLiAgIgorCisjLiBALWV4cGFuZGVkOiBSZXNpemUgaW5vZGUgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uCisjOiBlMmZzY2svcHJvYmxlbS5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXNpemUgQGkgKHJlKWNyZWF0aW9uIGZhaWxlZDogJW0uIgorbXNnc3RyICJWaeG7h2MgdOG6oW8gKGzhuqFpKSBz4buxIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgQGkgYuG7iyBs4buXaTogJW0uIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIkBpICVpIGPDsyBt4buZdCBrw61jaCBj4buhIHRow6ptICglSVMpIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBuYW1lbGVuICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSB0cm9uZyBAaSAlaSBjw7MgbeG7mXQgbmFtZWxlbiAoJU4pIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQ2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgb2Zmc2V0ICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdHJvbmcgQGkgJWkgY8OzIG3hu5l0IGhp4buHdSBnacOhIHRy4buLICglTikgQG5cbiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIGJsb2NrICglTikgd2hpY2ggaXMgaW52YWxpZCAobXVzdCBiZSAwKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg1MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIHZhbHVlIEBiICglTikgd2hpY2ggaXMgQG4gKG11c3QgYmUgMClcbiIKK21zZ3N0ciAiQGEgdHJvbmcgQGkgJWkgY8OzIG3hu5l0IGdpw6EgdHLhu4sgQGIgKCVOKSBAbiAocGjhuqNpIGzDoCAwKVxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBzaXplICglTikgd2hpY2ggaXMgQG5cbiIKK21zZ3N0ciAiQGEgdHJvbmcgQGkgJWkgY8OzIG3hu5l0IGvDrWNoIGPhu6EgZ2nDoSB0cuG7iyAoJU4pIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSBoYXNoICglTikgd2hpY2ggaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2MQorbXNnaWQgIkBhIGluIEBpICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICJAYSB0cm9uZyBAaSAlaSBjw7MgbeG7mXQgY2h14buXaSBkdXkgbmjhuqV0ICglTikgbcOgIEBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NjYKK21zZ2lkICJAaSAlaSBpcyBhICVJdCBidXQgaXQgbG9va3MgbGlrZSBpdCBpcyByZWFsbHkgYSBkaXJlY3RvcnkuXG4iCittc2dzdHIgIkBpICVpIGzDoCAlSXQgbmjGsG5nIGjDrG5oIG5oxrAgbsOzIHRo4buxYyBz4buxIGzDoCB0aMawIG3hu6VjLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIHF1YSBjw6J5IEB4IHRyb25nIEBpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIGlub2RlICVpXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KG9wICVzLCBibGsgJWIsIGxibGsgJWMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg3NgorbXNnaWQgIiIKKyJGYWlsZWQgdG8gaXRlcmF0ZSBleHRlbnRzIGluIEBpICVpXG4iCisiXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgbOG6t3AgbOG6oWkgdOG6p20gdHJvbmcgQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGxvZ2ljYWwgYmxvY2sgJWMsIGludmFsaWQgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4ODIKK21zZ2lkICIiCisiQGkgJWkgaGFzIGFuIEBuIGV4dGVudFxuIgorIlx0KGxvZ2ljYWwgQGIgJWMsIEBuIHBoeXNpY2FsIEBiICViLCBsZW4gJU4pXG4iCittc2dzdHIgIiIKKyJAaSAlaSBjw7MgbeG7mXQgcGjhuqFtIHZpIEBuXG4iCisiXHQoQGIgaOG7o3AgbMO9ICVjLCBAYiB24bqtdCBsw70gQG4gJWIsIGTDoGkgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgaW52YWxpZCBsZW4gJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODg3Cittc2dpZCAiIgorIkBpICVpIGhhcyBhbiBAbiBleHRlbnRcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgQG4gbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgY8OzIG3hu5l0IHBo4bqhbSB2aSBAblxuIgorIlx0KEBiIGjhu6NwIGzDvSAlYywgQGIgduG6rXQgbMO9ICViLCBkw6BpIEBuICVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiQGkgJWkgxJHhurd0IGPhu50gRVhURU5UU19GTCB0csOqbiBAZiBtw6Aga2jDtG5nIGjhu5cgdHLhu6MgcGjhuqFtIHZpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiQGkgJWkgdGhlbyDEkeG7i25oIGThuqFuZyBwaOG6oW0gdmksIGPDsm4gQFMgdGhp4bq/dSB0w61uaCBuxINuZyBwaOG6oW0gdmkgKEVYVEVOVFMpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgbWlzc2luZyBFWFRFTlRfRkwsIGJ1dCBpcyBpbiBleHRlbnRzIGZvcm1hdFxuIgorbXNnc3RyICJAaSAlaSB0aGnhur91IEVYVEVOVFNfRkwsIG5oxrBuZyB0aGVvIMSR4buLbmggZOG6oW5nIHBo4bqhbSB2aVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIkxpw6puIGvhur90IHTGsOG7o25nIHRyxrBuZyBuaGFuaCAlaSDEkcOjIMSR4bq3dCBFWFRFTlRTX0ZMLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbgorIy4gQC1leHBhbmRlZDogXHQoaW52YWxpZCBsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxMgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHNcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWkgY8OzIGPDoWMgcGjhuqFtIHZpIHNhaSB0aOG7qSB04buxXG4iCisiXHQoQGIgaOG7o3AgbMO9ICVjLCBAYiB24bqtdCBsw70gJWIsIGTDoGkgJU4pXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTE2Cittc2dpZCAiQGkgJWkgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAlYiwgbGJsayAlYylcbiIKK21zZ3N0ciAiQGkgJWkgY8OzIG3hu5l0IG7DunQgdOG6p20ga2jDtG5nIGjhu6NwIGzhu4cgKGJsayAlYiwgbGJsayAlYylcbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIEBiIEBCOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY2h1eeG7g24gxJHhu5VpIGxpw6puIGN1bmcgY29uIEBiIEBCOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkyNgorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBxIEBpICBraMO0bmcgcGjhuqNpIHThuq1wIHRpbiB0aMO0bmcgdGjGsOG7nW5nLiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiQHEgQGkgxJFhbmcga2jDtG5nIMSRxrDhu6NjIGTDuW5nLCBuaMawbmcgY2jhu6lhIGThu68gbGnhu4d1LiIKKworIy4gQC1leHBhbmRlZDogcXVvdGEgaW5vZGUgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzYKK21zZ2lkICJAcSBAaSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgIgorbXNnc3RyICJAcSBAaSBz4bq1biBkw7luZy4iCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBiYWQgYmxvY2sgaW5vZGUgbG9va3MgaW52YWxpZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5NDEKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTQ2Cittc2dpZCAiIgorIkBpICVpIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnRcbiIKKyJcdChAbiBsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYilcbiIKK21zZ3N0ciAiIgorIkBpICVpIGPDsyBwaOG6p24gbeG7nyBy4buZbmcgbcOgIMSR4buZIGTDoGkgYuG6sW5nIGtow7RuZ1xuIgorIlx0KEBuIGzDtGfDrWMgQGIgJWMsIHbhuq10IGzDvSBAYiAlYilcbiIKKworIy4gQC1leHBhbmRlZDogSW50ZXJpb3IgZXh0ZW50IG5vZGUgbGV2ZWwgJU4gb2YgaW5vZGUgJWk6XG4KKyMuIEAtZXhwYW5kZWQ6IExvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1MworbXNnaWQgIiIKKyJJbnRlcmlvciBAeCBub2RlIGxldmVsICVOIG9mIEBpICVpOlxuIgorIkxvZ2ljYWwgc3RhcnQgJWIgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAlYyBhdCBuZXh0IGxldmVsLiAgIgorbXNnc3RyICIiCisi4bueIHRyb25nIG7DunQgQHggbeG7qWMgJU4vQGkgJWk6XG4iCisiS2jhu59pIMSR4bqndSBsw7QtZ8OtYyAlYiBraMO0bmcga2jhu5twIHbhu5tpIGto4bufaSDEkeG6p3UgbMO0LWfDrWMgJWMgdOG6oWkgbeG7qWMga+G6vyB0aeG6v3AuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBlbmQgb2YgZXh0ZW50IGV4Y2VlZHMgYWxsb3dlZCB2YWx1ZVxuCisjLiBALWV4cGFuZGVkOiBcdChsb2dpY2FsIGJsb2NrICVjLCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1OQorbXNnaWQgIiIKKyJAaSAlaSwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWVcbiIKKyJcdChsb2dpY2FsIEBiICVjLCBwaHlzaWNhbCBAYiAlYiwgbGVuICVOKVxuIgorbXNnc3RyICIiCisiQGkgJWksIMSRaeG7g20ga+G6v3QgdGjDumMgdsaw4bujdCBxdcOhIGdpw6EgdHLhu4sgY2hvIHBow6lwXG4iCisiXHQobMO0LWfDrWMgQGIgJWMsIHbhuq10IGzDvSBAYiAlYiwgZMOgaSAlTilcbiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTY3Cittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkOG6oW5nIGNo4bqheSBt4buZdCBz4buRIGzhuqduIHF1YSB0aMOqbSDEkeG7gyB0aMOhbyBn4buhIGPDoWMgQGIgxJHDoyB0dXnDqm4gYuG7kVxuIgorImLhu59pIG5oaeG7gXUgQGkuLi5cbiIKKyJM4bqnbiBxdWEgMUI6IMSRYW5nIHF1w6l0IGzhuqFpIHTDrG0gQGIgQG0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgJWk6CisjOiBlMmZzY2svcHJvYmxlbS5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJAbSBAYihzKSBpbiBAaSAlaToiCittc2dzdHIgIkBiIEBtIHRyb25nIEBpICVpOiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Nhbm5pbmcgaW5vZGVzICglaSk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBxdcOpdCBjw6FjIG7DunQgdGjDtG5nIHRpbiAoJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiQEEgQEIgQGkgKEBpX2R1cF9tYXApOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBs4bq3cCBs4bqhaSB0csOqbiBjw6FjIEBiIHRyb25nIEBpICVpICglcyk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGFkanVzdGluZyByZWZjb3VudCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwMyBlMmZzY2svcHJvYmxlbS5jOjEzMTgKK21zZ2lkICJFcnJvciBhZGp1c3RpbmcgcmVmY291bnQgZm9yIEBhIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkWnhu4F1IGNo4buJbmggc+G7kSDEkeG6v20gdGhhbSBjaGnhur91IGNobyBAYiBAYSAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3NcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDA4Cittc2dpZCAiUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIEBpcyB3aXRoIEBtIEBic1xuIgorbXNnc3RyICJM4bqnbiBxdWEgMUM6IMSRYW5nIHF1w6l0IGPDoWMgdGjGsCBt4bulYyB0w6xtIEBpIGPDsyBAYiBAbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMTQKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiTOG6p24gcXVhIDFEOiDEkWFuZyDEkWnhu4F1IGhvw6AgY8OhYyBAYiBAbVxuIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxOQorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKyJU4bqtcCB0aW4gJVEgKEBpICMlaSwgZ2nhu50gc+G7rWEgxJHhu5VpICVJTSkgXG4iCisiICBjw7MgJXIgQGIgQG0sIGNoaWEgc+G6uyB24bubaSAlTiB04bqtcCB0aW46XG4iCisKKyMuIEAtZXhwYW5kZWQ6IFx0JVEgKGlub2RlICMlaSwgbW9kIHRpbWUgJUlNKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjUKK21zZ2lkICJcdCVRIChAaSAjJWksIG1vZCB0aW1lICVJTSlcbiIKK21zZ3N0ciAiXHQlUSAoQGkgIyVpLCBnaeG7nSBz4butYSDEkeG7lWkgJUlNKVxuIgorCisjLiBALWV4cGFuZGVkOiBcdDxmaWxlc3lzdGVtIG1ldGFkYXRhPlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMzAKK21zZ2lkICJcdDxAZiBtZXRhZGF0YT5cbiIKK21zZ3N0ciAiXHQ8c2nDqnUgZOG7ryBsaeG7h3UgQGY+XG4iCisKKyMuIEAtZXhwYW5kZWQ6IChUaGVyZSBhcmUgJU4gaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM1Cittc2dpZCAiIgorIihUaGVyZSBhcmUgJU4gQGlzIGNvbnRhaW5pbmcgQG0gQGJzLilcbiIKKyJcbiIKK21zZ3N0ciAiIgorIihDw7MgJU4gQGlzIGNo4bupYSBAYiBAbS4pXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNDAKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJAYiBAbSDEkcOjIMSRxrDhu6NjIGfDoW4gbOG6oWkgaGF5IG5ow6JuIGLhuqNuLlxuIgorIlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY2xvbmUgZmlsZTogJW1cbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG5ow6FpIHRoZW8gdOG6rXAgdGluOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDU5Cittc2dpZCAiUGFzcyAyOiBDaGVja2luZyBAZCBzdHJ1Y3R1cmVcbiIKK21zZ3N0ciAiTOG6p24gcXVhIDI6IMSRYW5nIGtp4buDbSB0cmEgY+G6pXUgdHLDumMgQGRcbiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAbiBAaSBudW1iZXIgZm9yICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQ29uIHPhu5EgQGkgQG4gY2hvIGThuqV1IGNo4bqlbSDigJwu4oCdIHRyb25nIEBpIEBkICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBpbnZhbGlkIGlub2RlICM6ICVEaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY5Cittc2dpZCAiQEUgaGFzIEBuIEBpICM6ICVEaS5cbiIKK21zZ3N0ciAiQEUgY8OzIHPhu5EgaGnhu4d1IEBpIEBuOiAlRGkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlICVEaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDc0Cittc2dpZCAiQEUgaGFzIEBEL3VudXNlZCBAaSAlRGkuICAiCittc2dzdHIgIkBFIGPDsyBAaSBARC9jaMawYSBkw7luZyAlRGkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgYSBsaW5rIHRvICcuJyAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzkKK21zZ2lkICJARSBATCB0byAnLicgICIKK21zZ3N0ciAiQEUgQEwgxJHhur9uIOKAnC7igJ0gICIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg0Cittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIkBFIGNo4buJIHThu5tpIEBpICglRGkpIG7hurFtIHRyb25nIEBiIHNhaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwODkKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiQEUgQEwgxJHhur9uIEBkICVQICglRGkpLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDk0Cittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICJARSBATCB04bubaSBAci5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTkKK21zZ2lkICJARSBoYXMgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lLlxuIgorbXNnc3RyICJARSBjw7MgdMOqbiBjaOG7qWEga8O9IHThu7EgY+G6pW0uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJy4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJUaGnhur91IOKAnC7igJ0gdHJvbmcgQGkgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IE1pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIlRoaeG6v3Ug4oCcLi7igJ0gdHJvbmcgQGkgQGQgJWkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZpcnN0IGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApIHNob3VsZCBiZSAnLidcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTE0Cittc2dpZCAiRmlyc3QgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgKCVwKSBAcyAnLidcbiIKK21zZ3N0ciAiQGUg4oCcJURu4oCdIHRo4bupIG5o4bqldCAoQGk9JURpKSB0cm9uZyBAaSBAZCAlaSAoJXApIEBzIOKAnC7igJ1cbiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTkKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICJAZSDigJwlRG7igJ0gdGjhu6kgaGFpIChAaT0lRGkpIHRyb25nIEBpIEBkICVpIEBzIOKAnC4u4oCdXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI0Cittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIsSQ4buLYSBjaOG7iSBpX2ZhZGRyIGNobyBuw7p0IGluam9kZSAlaSAoJVEpIGzDoCAlSUYsIGPDsm4gbsOqbiBsw6Agc+G7kSBraMO0bmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlmLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTI5Cittc2dpZCAiaV9maWxlX2FjbCBARiAlSWYsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZmlsZV9hY2wgQEYgJUlmLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogaV9kaXJfYWNsIGZvciBpbm9kZSAlaSAoJVEpIGlzICVJZCwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzNAorbXNnaWQgImlfZGlyX2FjbCBARiAlSWQsIEBzIHplcm8uXG4iCittc2dzdHIgImlfZGlyX2FjbCBARiAlSWQsIEBzIHPhu5Ega2jDtG5nLlxuIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzkKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfZnJhZyBARiAlTiwgQHMgc+G7kSBraMO0bmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZnNpemUgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDQKK21zZ2lkICJpX2ZzaXplIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZzaXplIEBGICVOLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDkKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGPDsyBjaOG6vyDEkeG7mSBAbiAoJUltKS5cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBkaXJlY3RvcnkgY29ycnVwdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NAorbXNnaWQgIkBkIEBpICVpLCAlQiwgb2Zmc2V0ICVOOiBAZCBjb3JydXB0ZWRcbiIKK21zZ3N0ciAiQGkgQGQgJWksICVCLCBoaeG7h3UgJU46IEBkIGLhu4sgaOG7j25nXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGRpcmVjdG9yeSBpbm9kZSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTU5Cittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IGZpbGVuYW1lIHRvbyBsb25nXG4iCittc2dzdHIgIkBpIEBkICVpLCAlQiwgaGnhu4d1ICVOOiB0w6puIHThuq1wIHRpbiBxdcOhIGTDoGlcbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiB1bmFsbG9jYXRlZCAlQi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY0Cittc2dpZCAiQGQgQGkgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgIgorbXNnc3RyICJAaSBAZCAlaSBjw7MgbeG7mXQgJUIgY2jGsGEgY+G6pXAgcGjDoXQuICAiCisKKyMuIEAtZXhwYW5kZWQ6ICcuJyBkaXJlY3RvcnkgZW50cnkgaW4gZGlyZWN0b3J5IGlub2RlICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIicuJyBAZCBAZSBpbiBAZCBAaSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4iCittc2dzdHIgIkBlIEBkIOKAnC7igJ0gdHJvbmcgQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bqxbmcgTlVMTCAodsO0IGdpw6EgdHLhu4spXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGUgQGQg4oCcLi7igJ0gdHJvbmcgQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bqxbmcgTlVMTCAodsO0IGdpw6EgdHLhu4spXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIgZGV2aWNlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzkKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIGNoYXJhY3RlciBAdi5cbiIKK21zZ3N0ciAiQGkgJWkgKCVRKSBsw6AgQHYga8O9IHThu7EgQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIkBpICVpICglUSkgbMOgIEB2IEBiIEBJLlxuIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4OQorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLicgQGUuXG4iCittc2dzdHIgIkBFIGzDoCBAZSDigJwu4oCdIHRyw7luZy5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4uJyBlbnRyeS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTk0Cittc2dpZCAiQEUgaXMgZHVwbGljYXRlICcuLicgQGUuXG4iCittc2dzdHIgIkBFIGzDoCBAZSDigJwuLuKAnSB0csO5bmcuXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5OSBlMmZzY2svcHJvYmxlbS5jOjE0OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICJM4buXaSBu4buZaSBi4buZOiBraMO0bmcgdMOsbSB0aOG6pXkgdGjDtG5nIHRpbiB0aMawIG3hu6VjIChkaXJfaW5mbykgduG7gSAlaS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgcmVjX2xlbiBvZiAlRHIsIHNob3VsZCBiZSAlTi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjA0Cittc2dpZCAiQEUgaGFzIHJlY19sZW4gb2YgJURyLCBAcyAlTi5cbiIKK21zZ3N0ciAiQEUgY8OzIHJlY19sZW4gJURyLCBAcyAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiQEEgY+G6pXUgdHLDumMgaWNvdW50OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6t3AgbOG6oWkgdHLDqm4gY8OhYyBAYiBAZDogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBkaXJlY3RvcnkgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjE5Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAZCBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIEBiIEBkICViIChAaSAlaSk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdyaXRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyNAorbXNnaWQgIkVycm9yIHdyaXRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSBAYiBAZCAlYiAoQGkgJWkpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIG5ldyBkaXJlY3RvcnkgYmxvY2sgZm9yIGlub2RlICVpICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBuZXcgQGQgQGIgZm9yIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIkBBIEBiIEBkIG3hu5tpIGNobyBAaSAlaSAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZWFsbG9jYXRpbmcgaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWFsbG9jYXRpbmcgQGkgJWk6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBo4buneSBj4bqlcCBwaMOhdCBAaSAlaTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGVudHJ5IGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJAZCBAZSBmb3IgJy4nIGluICVwICglaSkgaXMgYmlnLlxuIgorbXNnc3RyICJAZCBAZSDEkeG7kWkgduG7m2kg4oCcLuKAnSB0cm9uZyAlcCAoJWkpIHF1w6EgbOG7m24uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBGSUZPLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDQKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIEZJRk8uXG4iCittc2dzdHIgIkBpICVpICglUSkgbMOgIG3hu5l0IEZJRk8gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBzb2NrZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0OQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgc29ja2V0LlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIGzDoCBt4buZdCDhu5UgY+G6r20gQEkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFNldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICclRG4nIGluICVwICglaSkgdG8gJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1NAorbXNnaWQgIlNldHRpbmcgZmlsZXR5cGUgZm9yIEBFIHRvICVOLlxuIgorbXNnc3RyICLEkMSDbmcgxJHhurd0IGtp4buDdSB04bqtcCB0aW4gY2hvIEBFIHRow6BuaCAlTi5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBzaG91bGQgYmUgJU4pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTkKK21zZ2lkICJARSBoYXMgYW4gaW5jb3JyZWN0IGZpbGV0eXBlICh3YXMgJUR0LCBAcyAlTikuXG4iCittc2dzdHIgIkBFIGPDsyBraeG7g3UgdOG6rXAgdGluIGtow7RuZyDEkcO6bmcgKMSRw6MgJUR0LCBAcyAlTikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGZpbGV0eXBlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY0Cittc2dpZCAiQEUgaGFzIGZpbGV0eXBlIHNldC5cbiIKK21zZ3N0ciAiQEUgxJHhurd0IGtp4buDdSB04bqtcCB0aW4uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgemVyby1sZW5ndGggbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY5Cittc2dpZCAiQEUgaGFzIGEgQHogbmFtZS5cbiIKK21zZ3N0ciAiQEUgY8OzIHTDqm4gQHouXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc0Cittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiTGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nICVRIChAaSAjJWkpIEBuLlxuIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc5Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIkBhIEBiIEBGIEBuICglSWYpLlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIHN1cGVyYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4NAorbXNnaWQgIkBmIGNvbnRhaW5zIGxhcmdlIGZpbGVzLCBidXQgbGFja3MgTEFSR0VfRklMRSBmbGFnIGluIEBTLlxuIgorbXNnc3RyICJAZiBjaOG7qWEgY8OhYyB04bqtcCB0aW4gbOG7m24gY8OybiB0aGnhur91IGPhu50gTEFSR0VfRklMRSB0cm9uZyBAUy5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI4OQorbXNnaWQgIkBwIEBoICVkOiAlQiBub3QgcmVmZXJlbmNlZFxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIga2jDtG5nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTQKK21zZ2lkICJAcCBAaCAlZDogJUIgcmVmZXJlbmNlZCB0d2ljZVxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgxJHGsOG7o2MgdGhhbSBjaGnhur91IGhhaSBs4bqnblxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTkKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgY8OzIGNodeG7l2kgZHV5IG5o4bqldCB04buRaSB0aGnhu4N1IHNhaVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDQKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtYXggaGFzaFxuIgorbXNnc3RyICJAcCBAaCAlZDogJUIgY8OzIGNodeG7l2kgZHV5IG5o4bqldCB04buRaSDEkWEgc2FpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMwOQorbXNnaWQgIkBuIEBoICVkICglcSkuICAiCittc2dzdHIgIkBoIEBuICVkICglcSkuICAiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkICglcSk6IGJhZCBibG9jayBudW1iZXIgJWIuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxMworbXNnaWQgIkBwIEBoICVkICglcSk6IGJhZCBAYiBudW1iZXIgJWIuXG4iCittc2dzdHIgIkBwIEBoICVkICglcSk6IHPhu5EgQGIgc2FpICViLlxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogcm9vdCBub2RlIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBwIEBoICVkOiByb290IG5vZGUgaXMgQG5cbiIKK21zZ3N0ciAiQHAgQGggJWQ6IG7DunQgZ+G7kWMgQG5cbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGxpbWl0ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI4Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBsaW1pdCAoJU4pXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBjw7MgZ2nhu5tpIGjhuqFuIEBuICglTilcbiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIGhhcyBpbnZhbGlkIGNvdW50ICglTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzMzCittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBAbiBjb3VudCAoJU4pXG4iCittc2dzdHIgIkBwIEBoICVkOiAlQiBjw7Mgc+G7kSDEkeG6v20gQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGPDsyBt4buZdCBi4bqjbmcgY2h14buXaSBkdXkgbmjhuqV0IGtow7RuZyDEkeG6t3QgdGjhu6kgdOG7sVxuIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGludmFsaWQgZGVwdGggKCVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNDMKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIEBuIGRlcHRoICglTilcbiIKK21zZ3N0ciAiQHAgQGggJWQ6ICVCIGPDsyBjaGnhu4F1IHPDonUgQG4gKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgaW4gJXAgKCVpKSBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ4Cittc2dpZCAiRHVwbGljYXRlIEBFIGZvdW5kLiAgIgorbXNnc3RyICJUw6xtIHRo4bqleSBARSB0csO5bmcuICAiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbgorIy4gQC1leHBhbmRlZDogUmVuYW1lIHRvICVzCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTMKKyMsIG5vLWMtZm9ybWF0Cittc2dpZCAiIgorIkBFIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuXG4iCisiUmVuYW1lIHRvICVzIgorbXNnc3RyICIiCisiQEUgY8OzIHTDqm4gdOG6rXAgdGluIGtow7RuZyBkdXkgbmjhuqV0LlxuIgorIlRoYXkgxJHhu5VpIHTDqm4gdGjDoG5oICVzIgorCisjLiBALWV4cGFuZGVkOiBEdXBsaWNhdGUgZW50cnkgJyVEbicgZm91bmQuXG4KKyMuIEAtZXhwYW5kZWQ6IFx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNTgKK21zZ2lkICIiCisiRHVwbGljYXRlIEBlICclRG4nIGZvdW5kLlxuIgorIlx0TWFya2luZyAlcCAoJWkpIHRvIGJlIHJlYnVpbHQuXG4iCisiXG4iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSBAZSDigJwlRG7igJ0gdHLDuW5nXG4iCisiXHRuw6puIG5ow6NuICVwICglaSkgY+G6p24gxJHGsOG7o2MgeMOieSBk4buxbmcgbOG6oWkuXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzYzCittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgImlfYmxvY2tzX2hpIEBGICVOLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzY4Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICJH4bq3cCBAYiBi4bqldCB0aMaw4budbmcgdHJvbmcgQGggJWQgKCVxKS5cbiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSByZWZlcmVuY2VzIGlub2RlICVEaSBpbiBncm91cCAlZyB3aGVyZSBfSU5PREVfVU5JTklUIGlzIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzcyCittc2dpZCAiQEUgcmVmZXJlbmNlcyBAaSAlRGkgaW4gQGcgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4iCittc2dzdHIgIkBFIHRoYW0gY2hp4bq/dSDEkeG6v24gQGkgJURpIHRyb25nIEBnICVnIOG7nyB24buLIHRyw60gxJHhurd0IF9JTk9ERV9VTklOSVQuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM3NworbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICJARSB0aGFtIGNoaeG6v3UgxJHhur9uIEBpICVEaSDEkcaw4bujYyB0w6xtIHRyb25nIHbDuW5nIG7DunQgdGjDtG5nIHRpbiBraMO0bmcgZMO5bmcgY+G7p2EgQGcgJWcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODIKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyBz4buRIGtow7RuZy5cbiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4OQorbXNnaWQgIlBhc3MgMzogQ2hlY2tpbmcgQGQgY29ubmVjdGl2aXR5XG4iCittc2dzdHIgIkzhuqduIDM6IMSQYW5nIGtp4buDbSB0cmEga2jhuqMgbsSDbmcga+G6v3QgbuG7kWkgY+G7p2EgQGRcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTQKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICJDaMawYSBj4bqlcCBwaMOhdCBAci4gICIKKworIy4gQC1leHBhbmRlZDogTm8gcm9vbSBpbiBsb3N0K2ZvdW5kIGRpcmVjdG9yeS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzk5Cittc2dpZCAiTm8gcm9vbSBpbiBAbCBAZC4gICIKK21zZ3N0ciAiS2jDtG5nIGPDsyBjaOG7lyBjw7JuIHLhuqNuaCB0cm9uZyBAZCBAbC4gICIKKworIy4gQC1leHBhbmRlZDogVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlICVpICglcClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuY29ubmVjdGVkIEBkIEBpICVpICglcClcbiIKK21zZ3N0ciAiQGkgQGQgJWkga2jDtG5nIMSRxrDhu6NjIGvhur90IG7hu5FpICglcClcbiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDkKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGwga2jDtG5nIHTDrG0gdGjhuqV5LiIKKworIy4gQC1leHBhbmRlZDogJy4uJyBpbiAlUSAoJWkpIGlzICVQICglaiksIHNob3VsZCBiZSAlcSAoJWQpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MTQKK21zZ2lkICInLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKK21zZ3N0ciAi4oCcLi7igJ0gdHJvbmcgJVEgKCVpKSBsw6AgJVAgKCVqKSwgQHMgJXEgKCVkKS5cbiIKKworIy4gQC1leHBhbmRlZDogQmFkIG9yIG5vbi1leGlzdGVudCAvbG9zdCtmb3VuZC4gIENhbm5vdCByZWNvbm5lY3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxOQorbXNnaWQgIkJhZCBvciBub24tZXhpc3RlbnQgL0BsLiAgQ2Fubm90IHJlY29ubmVjdC5cbiIKK21zZ3N0ciAiQ8OzIC9AbCBzYWkgaGF5IGtow7RuZyB04buTbiB04bqhaSBuw6puIGtow7RuZyB0aOG7gyBr4bq/dCBu4buRaSBs4bqhaS5cbiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyBy4buZbmcgL0BsOiAlbVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlY29ubmVjdCAlaTogJW1cbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIGzhuqFpICVpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSB0cnlpbmcgdG8gZmluZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9AbDogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4butIHTDrG0gL0BsOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Jsb2NrOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AYjogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19AYjogJW0gdHJvbmcga2hpIHRo4butIHThuqFvIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2lub2RlOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9sb3N0K2ZvdW5kIGRpcmVjdG9yeVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19AaTogJW0gd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSAvQGwgQGRcbiIKK21zZ3N0ciAiZXh0MmZzX25ld19AaTogJW0gdHJvbmcga2hpIHRo4butIHThuqFvIEBkIC9AbFxuIgorCisjLiBALWV4cGFuZGVkOiBleHQyZnNfbmV3X2Rpcl9ibG9jazogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSBibG9ja1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX25ld19kaXJfQGI6ICVtIHdoaWxlIGNyZWF0aW5nIG5ldyBAZCBAYlxuIgorbXNnc3RyICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gdHJvbmcga2hpIHRo4butIHThuqFvIEBiIEBkIG3hu5tpXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc193cml0ZV9kaXJfYmxvY2s6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIGRpcmVjdG9yeSBibG9jayBmb3IgL2xvc3QrZm91bmRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDU0CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dDJmc193cml0ZV9kaXJfQGI6ICVtIHdoaWxlIHdyaXRpbmcgdGhlIEBkIEBiIGZvciAvQGxcbiIKK21zZ3N0ciAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gdHJvbmcga2hpIGdoaSBAYiBAZCBjaG8gL0BsXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkWnhu4F1IGNo4buJbmggc+G7kSDEkeG6v20gQGkgdHLDqm4gQGkgJWlcbiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBz4butYSBjaOG7r2EgbsO6dCBjaGEgY+G7p2EgQGkgJWk6ICVtXG4iCisiXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENvdWxkbid0IGZpeCBwYXJlbnQgb2YgaW5vZGUgJWk6IENvdWxkbid0IGZpbmQgcGFyZW50IGRpcmVjdG9yeSBlbnRyeVxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZG4ndCBmaXggcGFyZW50IG9mIEBpICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBAZCBAZVxuIgorIlxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHPhu61hIGNo4buvYSBuw7p0IGNoYSBj4bunYSBAaSAlaToga2jDtG5nIHTDrG0gdGjhuqV5IEBlIEBkIGNoYVxuIgorIlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gQGQgZ+G7kWMgKCVzKTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIEBkIC9AbCAoJXMpOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ4OQorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHIga2jDtG5nIHBo4bqjaSBAZCBuw6puIGjhu6d5IGLhu48uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IENhbm5vdCBwcm9jZWVkIHdpdGhvdXQgYSByb290IGlub2RlLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTQKK21zZ2lkICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgQHIuXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aeG6v3AgdOG7pWMga2hpIGtow7RuZyBjw7MgQHIuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIi9AbCBraMO0bmcgcGjhuqNpIEBkIChpbm89JWkpXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUxMQorbXNnaWQgIlBhc3MgM0E6IE9wdGltaXppbmcgZGlyZWN0b3JpZXNcbiIKK21zZ3N0ciAiTOG6p24gcXVhIDNBOiDEkWFuZyB04buRaSDGsHUgaG/DoSBjw6FjIHRoxrAgbeG7pWNcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZGlyc190b19oYXNoIGl0ZXJhdG9yOiAlbVxuIgorbXNnc3RyICJM4buXaSB04bqhbyBi4buZIGzhurdwIGzhuqFpIHRoxrAgbeG7pWMgdOG7m2kgYsSDbSAoZGlyc190b19oYXNoKTogJW1cbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTIxCittc2dpZCAiRmFpbGVkIHRvIG9wdGltaXplIGRpcmVjdG9yeSAlcSAoJWQpOiAlbVxuIgorbXNnc3RyICJM4buXaSB04buRaSDGsHUgaG/DoSB0aMawIG3hu6VjICVxICglZCk6ICVtXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUyNgorbXNnaWQgIk9wdGltaXppbmcgZGlyZWN0b3JpZXM6ICIKK21zZ3N0ciAixJBhbmcgdOG7kWkgxrB1IGhvw6EgY8OhYyB0aMawIG3hu6VjOiAiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU0MworbXNnaWQgIlBhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50c1xuIgorbXNnc3RyICJM4bqnbiBxdWEgNDogxJFhbmcga2nhu4NtIHRyYSBjw6FjIHPhu5EgxJHhur9tIHRoYW0gY2hp4bq/dVxuIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHUgQHogQGkgJWkuICAiCittc2dzdHIgIkBpIEB1IEB6ICVpLiAgIgorCisjLiBALWV4cGFuZGVkOiB1bmF0dGFjaGVkIGlub2RlICVpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1MworIywgYy1mb3JtYXQKK21zZ2lkICJAdSBAaSAlaVxuIgorbXNnc3RyICJAaSBAdSAlaVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSByZWYgY291bnQgaXMgJUlsLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1OAorbXNnaWQgIkBpICVpIHJlZiBjb3VudCBpcyAlSWwsIEBzICVOLiAgIgorbXNnc3RyICJAaSAlaSBjw7Mgc+G7kSDEkeG6v20gdGhhbSBjaGnhur91ICVJbCwgQHMgJU4uICAiCisKKyMuIEAtZXhwYW5kZWQ6IFdBUk5JTkc6IFBST0dSQU1NSU5HIEJVRyBJTiBFMkZTQ0shXG4KKyMuIEAtZXhwYW5kZWQ6IFx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4KKyMuIEAtZXhwYW5kZWQ6IGlub2RlX2xpbmtfaW5mb1slaV0gaXMgJU4sIGlub2RlLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBzaG91bGQgYmUgdGhlIHNhbWUhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MgorbXNnaWQgIiIKKyJXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuIgorIlx0T1IgU09NRSBCT05FSEVBRCAoWU9VKSBJUyBDSEVDS0lORyBBIE1PVU5URUQgKExJVkUpIEZJTEVTWVNURU0uXG4iCisiQGlfbGlua19pbmZvWyVpXSBpcyAlTiwgQGkuaV9saW5rc19jb3VudCBpcyAlSWwuICBUaGV5IEBzIHRoZSBzYW1lIVxuIgorbXNnc3RyICIiCisiQ+G6ok5IIELDgU86IEfhurZQIEzhu5ZJIEzhuqxQIFRSw4xOSCBUUk9ORyBFMkZTQ0shXG4iCisiXHRIT+G6tkMgTkfGr+G7nEkgTkFPIMSQQU5HIEtJ4buCTSBUUkEgTeG7mFQgSOG7hiBUSOG7kE5HIFThuqxQIFRJTiDEkMODIEzhuq5QICjEkOG7mE5HKS5cbiIKKyJAaV9saW5rX2luZm9bJWldIGzDoCAlTiwgQGkuaV9saW5rc19jb3VudCBsw6AgJUlsOiBAcyB0csO5bmcuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvblxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NzIKK21zZ2lkICJQYXNzIDU6IENoZWNraW5nIEBnIHN1bW1hcnkgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiTOG6p24gcXVhIDU6IMSRYW5nIGtp4buDbSB0cmEgdGjDtG5nIHRpbiB0w7NtIHThuq90IG5ow7NtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3NworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQ2jGsGEgxJHhurd0IMSR4buZIMSR4buHbSB04bqhaSBr4bq/dCB0aMO6YyBj4bunYSBAQiBASS4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU4MgorbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBiIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiQ2jGsGEgxJHhurd0IMSR4buZIMSR4buHbSB04bqhaSBr4bq/dCB0aMO6YyBj4bunYSBAQiBAYi4iCisKKyMuIEAtZXhwYW5kZWQ6IGJsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1ODcKK21zZ2lkICJAYiBAQiBkaWZmZXJlbmNlczogIgorbXNnc3RyICJIaeG7h3UgQEIgQGI6IgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6IAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjA3Cittc2dpZCAiQGkgQEIgZGlmZmVyZW5jZXM6ICIKK21zZ3N0ciAiSGnhu4d1IEBCIEBpOiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MjcKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlPhu5EgxJHhur9tIGPDoWMgQGkgcuG6o25oIGtow7RuZyDEkcO6bmcgY2hvIEBnICMlZyAoJWksIMSRw6MgxJHhur9tPSVqKS5cbiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzIKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlPhu5EgxJHhur9tIGPDoWMgdGjGsCBt4bulYyBraMO0bmcgxJHDum5nIGNobyBAZyAjJWcgKCVpLCDEkcOjIMSR4bq/bT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgaW5vZGVzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYzNworbXNnaWQgIkZyZWUgQGlzIGNvdW50IHdyb25nICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIlPhu5EgxJHhur9tIGPDoWMgQGkgcuG6o25oIGtow7RuZyDEkcO6bmcgKCVpLCDEkcOjIMSR4bq/bT0laikuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjJWcgKCViLCBjb3VudGVkPSVjKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQyCittc2dpZCAiRnJlZSBAYnMgY291bnQgd3JvbmcgZm9yIEBnICMlZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICJT4buRIMSR4bq/bSBjw6FjIEBiIHLhuqNuaCBraMO0bmcgxJHDum5nIGNobyBAZyAjJWcgKCViLCDEkcOjIMSR4bq/bT0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEZyZWUgYmxvY2tzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0NworbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nICglYiwgY291bnRlZD0lYykuXG4iCittc2dzdHIgIlPhu5EgxJHhur9tIGPDoWMgQGIgcuG6o25oIGtow7RuZyDEkcO6bmcgKCViLCDEkcOjIMSR4bq/bT0lYykuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjUyCittc2dpZCAiUFJPR1JBTU1JTkcgRVJST1I6IEBmICgjJU4pIEBCIGVuZHBvaW50cyAoJWIsICVjKSBkb24ndCBtYXRjaCBjYWxjdWxhdGVkIEBCIGVuZHBvaW50cyAoJWksICVqKVxuIgorbXNnc3RyICJM4buWSSBM4bqsUCBUUsOMTkg6IHRyb25nIEBmICgjJU4pIGPDsyBjw6FjIMSRaeG7g20gY3Xhu5FpIEBCICglYiwgJWMpIGtow7RuZyB0xrDGoW5nIOG7qW5nIHbhu5tpIGPDoWMgxJFp4buDbSBjdeG7kWkgQEIgxJHDoyB0w61uaCAoJWksICVqKVxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTgKK21zZ2lkICJJbnRlcm5hbCBlcnJvcjogZnVkZ2luZyBlbmQgb2YgYml0bWFwICglTilcbiIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mTogxJFhbmcgbMOgbSBxdeG6pXkgcXXDoSBr4bq/dCB0aMO6YyBj4bunYSBt4bqjbmcg4bqjbmggKCVOKVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGlub2RlIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGkgQEI6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdsOgbyBAQiBAaSB0aGF5IHRo4bq/OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgQGIgQEI6ICVtXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdsOgbyBAQiBAYiB0aGF5IHRo4bq/OiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICJDw6FjIEBiIGPhu6dhIEBnICVnIMSRYW5nIMSRxrDhu6NjIGTDuW5nLCBjw7JuIEBnIGPDsyBuaMOjbiBsw6AgQkxPQ0tfVU5JTklUXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIkPDoWMgQGkgY+G7p2EgQGcgJWcgxJFhbmcgxJHGsOG7o2MgZMO5bmcsIGPDsm4gQGcgY8OzIG5ow6NuIGzDoCBJTk9ERV9VTklOSVRcbiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNzA1Cittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIlThuqFvIGzhuqFpIEBqIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE3MTAKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiQ+G6rXAgbmjhuq10IHRow7RuZyB0aW4gaOG6oW4gbmfhuqFjaCBjaG8ga2nhu4N1IGjhuqFuIG5n4bqhY2ggJU4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTgyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmhhbmRsZWQgZXJyb3IgY29kZSAoMHgleCkhXG4iCittc2dzdHIgIk3DoyBs4buXaSBjaMawYSBxdeG6o24gbMO9ICgweCV4KSFcbiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxOTU0IGUyZnNjay9wcm9ibGVtLmM6MTk1OAorbXNnaWQgIklHTk9SRUQiCittc2dzdHIgIkLhu4ogQuG7jiBRVUEiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICJC4buZIG5o4bubIMSRw6MgY2hp4bq/bTogJWQsIHRo4budaSBnaWFuIMSRw6MgcXVhOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzaXplIG9mIGlub2RlPSVkXG4iCittc2dzdHIgImvDrWNoIGPhu6EgbsO6dCB0aMO0bmcgdGluPSVkXG4iCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjExOQorbXNnaWQgIndoaWxlIHN0YXJ0aW5nIGlub2RlIHNjYW4iCittc2dzdHIgInRyb25nIGtoaSBraOG7n2kgY2jhuqF5IHRp4bq/biB0csOsbmggcXXDqXQgbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICJ0cm9uZyBraGkgY2jhuqF5IHRp4bq/biB0csOsbmggcXXDqXQgbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svc3VwZXIuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYmxvY2tfaXRlcmF0ZSBmb3IgaW5vZGUgJWQiCittc2dzdHIgInRyb25nIGtoaSBn4buNaSBow6BtIGzhurdwIGzhuqFpIGto4buRaSDigJxleHQyZnNfYmxvY2tfaXRlcmF0ZeKAnSBjaG8gbsO6dCB0aMO0bmcgdGluICVkIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgInRyb25nIGtoaSBn4buNaSBow6BtIOKAnGV4dDJmc19hZGp1c3RfZWFfcmVmY291bnTigJ0gY2hvIG7DunQgdGjDtG5nIHRpbiAlZCIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAixJBhbmcgY+G6r3Qgbmfhuq9uIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzMKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAixJBhbmcgeG/DoSBz4bqhY2giCisKKyM6IGUyZnNjay91bml4LmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLXBhbnlyY2RmdnRERlZdIFstYiBzdXBlcmJsb2NrXSBbLUIgYmxvY2tzaXplXVxuIgorIlx0XHRbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gWy1QIHByb2Nlc3NfaW5vZGVfc2l6ZV1cbiIKKyJcdFx0Wy1sfC1MIGJhZF9ibG9ja3NfZmlsZV0gWy1DIGZkXSBbLWogZXh0ZXJuYWxfam91cm5hbF1cbiIKKyJcdFx0Wy1FIGV4dGVuZGVkLW9wdGlvbnNdIGRldmljZVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstcGFueXJjZGZ2dERGVl0gWy1iIHNpw6p1X2to4buRaV0gWy1CIGPhu6Ffa2jhu5FpXVxuIgorIlx0XHRbLUkga2jhu5FpX8SR4buHbV9pbm9kZV0gWy1QIGPhu6FfaW5vZGVfeOG7rV9sw71dXG4iCisiXHRcdFstbHwtTCB04bqtcF90aW5fa2jhu5FpX3NhaV0gWy1DIGZkXSBbLWogbmjhuq10X2vDvV9uZ2/DoGldXG4iCisiXHRcdFstRSB0w7l5X2No4buNbl/EkcOjX23hu59fcuG7mW5nXSB0aGnhur90X2Lhu4tcbiIKKworIzogZTJmc2NrL3VuaXguYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRW1lcmdlbmN5IGhlbHA6XG4iCisiIC1wICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpYyByZXBhaXIgKG5vIHF1ZXN0aW9ucylcbiIKKyIgLW4gICAgICAgICAgICAgICAgICAgTWFrZSBubyBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtXG4iCisiIC15ICAgICAgICAgICAgICAgICAgIEFzc3VtZSBcInllc1wiIHRvIGFsbCBxdWVzdGlvbnNcbiIKKyIgLWMgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIGJhZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYWRibG9jayBsaXN0XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgZmlsZXN5c3RlbSBpcyBtYXJrZWQgY2xlYW5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlRy4bujIGdpw7pwIGto4bqpbiBj4bqlcDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgU+G7rWEgY2jhu69hIHThu7EgxJHhu5luZyAoa2jDtG5nIGPDsyBjw6J1IGjhu49pKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBLaMO0bmcgdGhheSDEkeG7lWkgaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorIiAteSAgICAgICAgICAgICAgICAgICBHaeG6oyBz4butIHRy4bqjIGzhu51pIOKAnEPDs+KAnSBt4buNaSBjw6J1IGjhu49pXG4iCisiIC1jICAgICAgICAgICAgICAgICAgIEtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpOiB0aMOqbSB2w6BvIGRhbmggc8OhY2gga2jhu5FpIHNhaVxuIgorIiAtZiAgICAgICAgICAgICAgICAgICBCdeG7mWMga2nhu4NtIHRyYSBuZ2F5IGPhuqMga2hpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIG5ow6NuIGzDoCBz4bqhY2hcbiIKKworIzogZTJmc2NrL3VuaXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIC12ICAgICAgICAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKyIgLWIgc3VwZXJibG9jayAgICAgICAgVXNlIGFsdGVybmF0aXZlIHN1cGVyYmxvY2tcbiIKKyIgLUIgYmxvY2tzaXplICAgICAgICAgRm9yY2UgYmxvY2tzaXplIHdoZW4gbG9va2luZyBmb3Igc3VwZXJibG9ja1xuIgorIiAtaiBleHRlcm5hbF9qb3VybmFsICBTZXQgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGpvdXJuYWxcbiIKKyIgLWwgYmFkX2Jsb2Nrc19maWxlICAgQWRkIHRvIGJhZGJsb2NrcyBsaXN0XG4iCisiIC1MIGJhZF9ibG9ja3NfZmlsZSAgIFNldCBiYWRibG9ja3MgbGlzdFxuIgorbXNnc3RyICIiCisiIC12ICAgICAgICAgICAgICAgICAgIFh14bqldCBjaGkgdGnhur90XG4iCisiIC1iIHNpw6p1X2to4buRaSAgICAgICAgIETDuW5nIHNpw6p1IGto4buRaSB4ZW4ga+G6vVxuIgorIiAtQiBj4buhX2to4buRaSAgICAgICAgICAgQnXhu5ljIGvDrWNoIGPhu6EgY+G7p2Ega2jhu5FpIGtoaSB0w6xtIHNpw6p1IGto4buRaVxuIgorIiAtaiBuaOG6rXRfa8O9X2LDqm5fbmdvw6BpIMSQ4bq3dCDEkeG7i2EgxJFp4buDbSBj4bunYSBuaOG6rXQga8O9IGLDqm4gbmdvw6BpXG4iCisiIC1sIHThuq1wX3Rpbl9raOG7kWlfc2FpICBUaMOqbSB2w6BvIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgc2FpXG4iCisiIC1MIHThuq1wX3Rpbl9raOG7kWlfc2FpICDEkOG6t3QgZGFuaCBzw6FjaCBjw6FjIGto4buRaSBzYWlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXM6ICV1LyV1IHThuq1wIHRpbiAoJTBkLiVkJSUga2jDtG5nIGvhu4EgbmhhdSksICVsbHUvJWxsdSBraOG7kWlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgaW5vZGUgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTEydSBpbm9kZXMgdXNlZCAoJTIuMmYlJSwgb3V0IG9mICV1KVxuIgorbXNnc3RyWzBdICIiCisiXG4iCisiJTEydSBpbm9kZSDEkcOjIMSRxrDhu6NjIGTDuW5nICglMi4yZiUlLCB2xrDhu6N0IHF1w6EgJXUpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgbm9uLWNvbnRpZ3VvdXMgZmlsZXMgKCUwZC4lZCUlKVxuIgorbXNnc3RyWzBdICIlMTJ1IHThu4dwIHRpbiBraMO0bmcga+G7gSBuaGF1ICglMGQuJWQlJSlcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBub24tY29udGlndW91cyBkaXJlY3RvcnkgKCUwZC4lZCUlKVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiJTEydSB0aMawIG3hu6VjIGtow7RuZyBr4buBIG5oYXUgKCUwZC4lZCUlKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgICAgICAgICAgIyBvZiBpbm9kZXMgd2l0aCBpbmQvZGluZC90aW5kIGJsb2NrczogJXUvJXUvJXVcbiIKK21zZ3N0ciAiICAgICAgICAgICAgICMgc+G7kSBpbm9kZSBjw7Mga2jhu5FpIGluZC9kaW5kL3RpbmQ6ICV1LyV1LyV1XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTc5Cittc2dpZCAiICAgICAgICAgICAgIEV4dGVudCBkZXB0aCBoaXN0b2dyYW06ICIKK21zZ3N0ciAiICAgICAgICAgICAgIMSQ4buTIHRo4buLIMSR4buZIHPDonU6ICIKKworIzogZTJmc2NrL3VuaXguYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEybGx1IGJsb2NrIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnaWRfcGx1cmFsICIlMTJsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUsIG91dCBvZiAlbGx1KVxuIgorbXNnc3RyWzBdICIlMTJsbHUga2jhu5FpIMSRw6MgZMO5bmcgKCUyLjJmJSUsIHbGsOG7o3QgcXXDoSAlbGx1KVxuIgorCisjOiBlMmZzY2svdW5peC5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJhZCBibG9ja3NcbiIKK21zZ3N0clswXSAiJTEydSBraOG7kWkgaOG7j25nXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgbGFyZ2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIiUxMnUgdOG6rXAgdGluIHF1w6EgbOG7m25cbiIKKworIzogZTJmc2NrL3VuaXguYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiUxMnUgcmVndWxhciBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyIlMTJ1IHJlZ3VsYXIgZmlsZXNcbiIKK21zZ3N0clswXSAiIgorIlxuIgorIiUxMnUgdOG6rXAgdGluIHRoxrDhu51uZ1xuIgorCisjOiBlMmZzY2svdW5peC5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGRpcmVjdG9yaWVzXG4iCittc2dzdHJbMF0gIiUxMnUgdGjGsCBt4bulY1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGNoYXJhY3RlciBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB0aGnhur90IGLhu4sga8O9IHThu7FcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBibG9jayBkZXZpY2UgZmlsZVxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGJsb2NrIGRldmljZSBmaWxlc1xuIgorbXNnc3RyWzBdICIlMTJ1IHThu4dwIHRpbiB0aGnhur90IGLhu4sga2jhu5FpXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgZmlmb1xuIgorbXNnaWRfcGx1cmFsICIlMTJ1IGZpZm9zXG4iCittc2dzdHJbMF0gIiUxMnUgZmlmb1xuIgorCisjOiBlMmZzY2svdW5peC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTEydSBsaW5rc1xuIgorbXNnc3RyWzBdICIlMTJ1IGxpw6puIGvhur90XG4iCisKKyM6IGUyZnNjay91bml4LmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUxMnUgc3ltYm9saWMgbGluayIKK21zZ2lkX3BsdXJhbCAiJTEydSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAiJTEydSBsacOqbiBr4bq/dCB0xrDhu6NuZyB0csawbmciCisKKyM6IGUyZnNjay91bml4LmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAoJXUgZmFzdCBzeW1ib2xpYyBsaW5rKVxuIgorbXNnaWRfcGx1cmFsICIgKCV1IGZhc3Qgc3ltYm9saWMgbGlua3MpXG4iCittc2dzdHJbMF0gIiAoJXUgbGnDqm4ga+G6v3QgdMaw4bujbmcgdHLGsG5nIG5oYW5oKVxuIgorCisjOiBlMmZzY2svdW5peC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlMTJ1IHNvY2tldFxuIgorbXNnaWRfcGx1cmFsICIlMTJ1IHNvY2tldHNcbiIKK21zZ3N0clswXSAiJTEydSBzb2NrZXRcbiIKKworIzogZTJmc2NrL3VuaXguYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTEydSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiUxMnUgZmlsZXNcbiIKK21zZ3N0clswXSAiJTEydSB04bqtcCB0aW5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk4NSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgInRyb25nIGtoaSBxdXnhur90IMSR4buLbmggbuG6v3UgJXMgxJHDoyBn4bqvbiBr4bq/dCBjaMawYS4iCisKKyM6IGUyZnNjay91bml4LmM6MjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW8hICAlcyBsw6AgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzICVzLlxuIgorbXNnc3RyICIlcyBsw6AgJXMuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjYyCittc2dpZCAiIgorIkNhbm5vdCBjb250aW51ZSwgYWJvcnRpbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdGnhur9wIHThu6VjIG7Dqm4gaOG7p3kgYuG7jy5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiV0FSTklORyEhISAgVGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4gICBJZiB5b3UgY29udGludWUgeW91ICoqKldJTEwqKipcbiIKKyJjYXVzZSAqKipTRVZFUkUqKiogZmlsZXN5c3RlbSBkYW1hZ2UuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJD4bqiTkggQsOBTyEhISAgSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIGfhuq9uIGvhur90LiBW4bqrbiB0aeG6v3AgdOG7pWMgdGjDrFxuIgorIsSRw6J5IGPDsyB0aOG7gyBsw6Agbmd1ecOqbiBuaMOibiAqKipMw4BNIEjhu45ORyBO4bq2TkcqKiogaOG7hyB0aOG7kW5nIHThuq1wIHRpbi5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoyNjkKK21zZ2lkICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gY29udGludWUiCittc2dzdHIgIkLhuqFuIHRo4buxYyBz4buxIG114buRbiB0aeG6v3AgdOG7pWMiCisKKyM6IGUyZnNjay91bml4LmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgImtp4buDbSB0cmEgYuG7iyBo4buneSBi4buPLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjM2MQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIgY2jhu6lhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIGzhu5dpIgorCisjOiBlMmZzY2svdW5peC5jOjM2MworbXNnaWQgIiB3YXMgbm90IGNsZWFubHkgdW5tb3VudGVkIgorbXNnc3RyICIgY2jGsGEgdGjDoW8gZ+G6r24ga+G6v3Qgc+G6oWNoIgorCisjOiBlMmZzY2svdW5peC5jOjM2NQorbXNnaWQgIiBwcmltYXJ5IHN1cGVyYmxvY2sgZmVhdHVyZXMgZGlmZmVyZW50IGZyb20gYmFja3VwIgorbXNnc3RyICIgdMOtbmggbsSDbmcgY+G7p2Egc2nDqnUga2jhu5FpIGNow61uaCBraMOhYyB24bubaSBi4bqjbiBzYW8gbMawdSIKKworIzogZTJmc2NrL3VuaXguYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBiZWVuIG1vdW50ZWQgJXUgdGltZXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgxJHDoyDEkcaw4bujYyBn4bqvbiBr4bq/dCAldSBs4bqnbiBtw6Aga2jDtG5nIMSRxrDhu6NjIGtp4buDbSB0cmEiCisKKyM6IGUyZnNjay91bml4LmM6Mzc2Cittc2dpZCAiIGhhcyBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0aW1lIGluIHRoZSBmdXR1cmUiCittc2dzdHIgIiBjw7MgZ2nhu50ga2nhu4NtIHRyYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGzhuqduIGN14buRaSBjw7luZyB0cm9uZyB0xrDGoW5nIGxhaSIKKworIzogZTJmc2NrL3VuaXguYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGhhcyBnb25lICV1IGRheXMgd2l0aG91dCBiZWluZyBjaGVja2VkIgorbXNnc3RyICIgxJHDoyBjaOG6oXkgdHJvbmcgJXUgbmfDoHkgbcOgIGtow7RuZyDEkcaw4bujYyBraeG7g20gdHJhIgorCisjOiBlMmZzY2svdW5peC5jOjM5MQorbXNnaWQgIiwgY2hlY2sgZm9yY2VkLlxuIgorbXNnc3RyICIsIGtp4buDbSB0cmEgYuG7iyDDqXAgYnXhu5ljLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2xlYW4sICV1LyV1IGZpbGVzLCAlbGx1LyVsbHUgYmxvY2tzIgorbXNnc3RyICIlczogc+G6oWNoLCAldS8ldSB04bqtcCB0aW4sICVsbHUvJWxsdSBraOG7kWkiCisKKyM6IGUyZnNjay91bml4LmM6NDQzCittc2dpZCAiIChjaGVjayBkZWZlcnJlZDsgb24gYmF0dGVyeSkiCittc2dzdHIgIiAoa2nhu4NtIHRyYSBi4buLIGhvw6NuOyBjaOG6oXkgYuG6sW5nIHBpbikiCisKKyM6IGUyZnNjay91bml4LmM6NDQ2Cittc2dpZCAiIChjaGVjayBhZnRlciBuZXh0IG1vdW50KSIKK21zZ3N0ciAiIChraeG7g20gdHJhIHNhdSBs4bqnbiBr4bq/IHRp4bq/cCBn4bqvbiBr4bq/dCkiCisKKyM6IGUyZnNjay91bml4LmM6NDQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoY2hlY2sgaW4gJWxkIG1vdW50cykiCittc2dzdHIgIiAoa2nhu4NtIHRyYSBzYXUgJWxkIGzhuqduIGfhuq9uIGvhur90KSIKKworIzogZTJmc2NrL3VuaXguYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IENvdWxkbid0IG9wZW4gL2Rldi9udWxsICglcylcbiIKK21zZ3N0ciAiTOG7lkk6IGtow7RuZyB0aOG7gyBt4bufIOKAnC9kZXYvbnVsbOKAnSAoJXMpXG4iCisKKyM6IGUyZnNjay91bml4LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgRUEgdmVyc2lvbi5cbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuIEVBIGtow7RuZyBo4bujcCBs4buHLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGV4dGVuZGVkIG9wdGlvbjogJXNcbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gxJHDoyBt4bufIHLhu5luZyBs4bqhOiAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIGUyZnNjayBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGPDuiBwaMOhcCB0cm9uZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggZTJmc2NrICglcywgZMOybmcgc+G7kSAlZClcbiIKKyJcdCVzXG4iCisKKyM6IGUyZnNjay91bml4LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHZhbGlkYXRpbmcgZmlsZSBkZXNjcmlwdG9yICVkOiAlc1xuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgaOG7o3AgbOG7hyBow7NhIG3DtCB04bqjIHThuq1wIHRpbiAlZDogJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3OTIKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICJNw7QgdOG6oyB04bqtcCB0aW4gdGjDtG5nIHRpbiBob8OgIGNo4buJbmgga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay91bml4LmM6ODA3Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICJDw7MgdGjhu4MgY2jhu4kgcmEgbeG7mXQgdHJvbmcgbmjhu69uZyB0w7l5IGNo4buNbiAtcC8tYSwgLW4gdsOgIC15LiIKKworIzogZTJmc2NrL3VuaXguYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC10IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdmVyc2lvbiBvZiBlMmZzY2suXG4iCittc2dzdHIgIlTDuXkgY2jhu41uIOKAnC104oCdIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIHRyb25nIHBoacOqbiBi4bqjbiBlMmZzY2sgbsOgeS5cbiIKKworIzogZTJmc2NrL3VuaXguYzo4NTkgZTJmc2NrL3VuaXguYzo5MzEgbWlzYy90dW5lMmZzLmM6ODExIG1pc2MvdHVuZTJmcy5jOjExMDAKKyM6IG1pc2MvdHVuZTJmcy5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlc29sdmUgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHF1eeG6v3QgxJHhu4tuaCDigJwlc+KAnSIKKworIzogZTJmc2NrL3VuaXguYzo5MTAKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIkhhaSB0w7l5IGNo4buNbiDigJwtbuKAnSB2w6Ag4oCcLUTigJ0ga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIG5oYXUuIgorCisjOiBlMmZzY2svdW5peC5jOjkxNQorbXNnaWQgIlRoZSAtbiBhbmQgLWMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiSGFpIHTDuXkgY2jhu41uIOKAnC1u4oCdIHbDoCDigJwtY+KAnSBraMO0bmcgdMawxqFuZyB0aMOtY2ggduG7m2kgbmhhdS4iCisKKyM6IGUyZnNjay91bml4LmM6OTIwCittc2dpZCAiVGhlIC1uIGFuZCAtbC8tTCBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJIYWkgdMO5eSBjaOG7jW4g4oCcLW7igJ0gdsOgIOKAnC1sLy1M4oCdIGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBuaGF1LiIKKworIzogZTJmc2NrL3VuaXguYzo5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICJLaMO0bmcgY2hvIHBow6lwIHPhu60gZOG7pW5nIMSR4buTbmcgdGjhu51pIGPhuqMgaGFpIHTDuXkgY2jhu41uIOKAnC0tY+KAnSB2w6Ag4oCcLS1sL0zigJ0uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTAyMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRTJGU0NLX0pCRF9ERUJVRyBcIiVzXCIgbm90IGFuIGludGVnZXJcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkUyRlNDS19KQkRfREVCVUcg4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBz4buRIG5ndXnDqm5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJbnZhbGlkIG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIC0lYyAoXCIlc1wiKVxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisixJDhu5FpIHPhu5Ega2jDtG5nIHRodeG7mWMgc+G7kSBraMO0bmcgaOG7o3AgbOG7hyDEkeG7kWkgduG7m2kgLSVjICjigJwlc+KAnSlcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMTIwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlIHdhaXQuLi5cbiIKK21zZ3N0ciAia2hv4bqjbmcgbmjhu4twIE1NUCBsw6AgJXUgZ2nDonkgY+G7mW5nIHbhu5tpIHThu5VuZyB0aOG7nWkgZ2lhbiBjaOG7nSBsw6AgJXUgZ2nDonkuIFZ1aSBsw7JuZyBjaOG7nS4uLlxuIgorCisjIEl0ZW0gaW4gdGhlIG1haW4gbWVudSB0byBzZWxlY3QgdGhpcyBwYWNrYWdlCisjOiBlMmZzY2svdW5peC5jOjExMzcgZTJmc2NrL3VuaXguYzoxMTQyCittc2dpZCAid2hpbGUgY2hlY2tpbmcgTU1QIGJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkga2nhu4NtIHRyYSBraOG7kWkgTU1QIgorCisjOiBlMmZzY2svdW5peC5jOjExNDQgbWlzYy90dW5lMmZzLmM6MTkxMgorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorIk7hur91IGLhuqFuIGtow7RuZyBjaOG6r2MgbMOgIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIMSRYW5nIHPhu60gZOG7pW5nIGLhuqV0IGvhu7MgbsO6dCBuw6BvLCBjaOG6oXkgbOG7h25oOlxuIgorIuKAnHR1bmUyZnMgLWYgLUUgY2xlYXJfbW1wIHt0aGnhur90X2Lhu4t94oCdXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogZXh0MmZzIGxpYnJhcnkgdmVyc2lvbiBvdXQgb2YgZGF0ZSFcbiIKK21zZ3N0ciAiTOG7l2k6IHBoacOqbiBi4bqjbiB0aMawIHZp4buHbiBleHQyZnMgcXXDoSBjxakuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTIwMgorbXNnaWQgIndoaWxlIHRyeWluZyB0byBpbml0aWFsaXplIHByb2dyYW0iCittc2dzdHIgInRyb25nIGtoaSBj4buRIGto4bufaSB04bqhbyBjaMawxqFuZyB0csOsbmgiCisKKyM6IGUyZnNjay91bml4LmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICJcdETDuW5nICVzLCAlc1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEyMzcKK21zZ2lkICJuZWVkIHRlcm1pbmFsIGZvciBpbnRlcmFjdGl2ZSByZXBhaXJzIgorbXNnc3RyICJj4bqnbiB0aGnhur90IGLhu4sgY3Xhu5FpIMSR4buDIHPhu61hIGNo4buvYSB0aGVvIGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGUyZnNjay91bml4LmM6MTI5MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi5cbiIKK21zZ3N0ciAiJXM6ICVzIMSRYW5nIHRo4butIGPDoWMga2jhu5FpIGThu7EgdHLhu68uLi5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMjkyCittc2dpZCAiU3VwZXJibG9jayBpbnZhbGlkLCIKK21zZ3N0ciAiU2nDqnUga2jhu5FpIGtow7RuZyBo4bujcCBs4buHLCIKKworIzogZTJmc2NrL3VuaXguYzoxMjkzCittc2dpZCAiR3JvdXAgZGVzY3JpcHRvcnMgbG9vayBiYWQuLi4iCittc2dzdHIgIkPDsyB24bq7IGzDoCBjw6FjIG3DtCB04bqjIG5ow7NtIHNhaS4uLiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSB1c2luZyB0aGUgYmFja3VwIGJsb2NrcyIKK21zZ3N0ciAiJXM6ICVzIHRyb25nIGtoaSDEkeG7jWMgbsO6dCB0aMO0bmcgdGluIGto4buRaSBo4buPbmciCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZ29pbmcgYmFjayB0byBvcmlnaW5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIiVzOiDEkWFuZyB0cuG7nyB24buBIHNpw6p1IGto4buRaSBn4buRY1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzMzUKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisiQ8OzIHbhursgbMOgIGLhuqNuIHPhu61hIMSR4buVaSBo4buHIHRo4buRbmcgdOG6rXAgdGluIHF1w6EgY2FvIGNobyBwaGnDqm4gYuG6o24gZTJmc2NrIG7DoHlcbiIKKyIoaG/hurdjIHNpw6p1IGto4buRaSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGLhu4sgaOG7j25nKS5cbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQxCittc2dpZCAiQ291bGQgdGhpcyBiZSBhIHplcm8tbGVuZ3RoIHBhcnRpdGlvbj9cbiIKK21zZ3N0ciAiUGjDom4gdsO5bmcgbsOgeSBjw7MgdGjhu4MgY8OzIMSR4buZIGTDoGkgYuG6sW5nIGtow7RuZyA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgbXVzdCBoYXZlICVzIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSBvciBiZSByb290XG4iCittc2dzdHIgIkLhuqFuIHBo4bqjaSBjw7MgcXV54buBbiB0cnV5IGPhuq1wICVzIHbDoG8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiwgaG/hurdjIGzDoCBuZ8aw4budaSBjaOG7pyAocm9vdClcbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzQ5Cittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IG9yIHN3YXAgZGV2aWNlP1xuIgorbXNnc3RyICJDw7MgdGjhu4MgbMOgIHRoaeG6v3QgYuG7iyBraMO0bmcgdOG7k24gdOG6oWksIGhv4bq3YyB0aGnhur90IGLhu4sgdHJhbyDEkeG7lWkgP1xuIgorCisjOiBlMmZzY2svdW5peC5jOjEzNTIKK21zZ2lkICJGaWxlc3lzdGVtIG1vdW50ZWQgb3Igb3BlbmVkIGV4Y2x1c2l2ZWx5IGJ5IGFub3RoZXIgcHJvZ3JhbT9cbiIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIMSRxrDhu6NjIGfhuq9uIGvhur90IGhheSBt4bufIGhvw6BuIHRvw6BuIGLhu59pIGNoxrDGoW5nIHRyw6xuaCBraMOhYyA/XG4iCisKKyM6IGUyZnNjay91bml4LmM6MTM1NQorbXNnaWQgIlBvc3NpYmx5IG5vbi1leGlzdGVudCBkZXZpY2U/XG4iCittc2dzdHIgIkPDsyB0aOG7gyBsw6AgdGhp4bq/dCBi4buLIGtow7RuZyB04buTbiB04bqhaT9cbiIKKworIzogZTJmc2NrL3VuaXguYzoxMzU4Cittc2dpZCAiIgorIkRpc2sgd3JpdGUtcHJvdGVjdGVkOyB1c2UgdGhlIC1uIG9wdGlvbiB0byBkbyBhIHJlYWQtb25seVxuIgorImNoZWNrIG9mIHRoZSBkZXZpY2UuXG4iCittc2dzdHIgIiIKKyLEkMSpYSBi4buLIGNo4buRbmcgZ2hpOyBow6N5IGTDuW5nIHTDuXkgY2jhu41uIOKAnC1u4oCdIMSR4buDIGNo4bqheVxuIgorInZp4buHYyBraeG7g20gdHJhIGNo4buJIMSR4buNYyB0csOqbiB0aGnhur90IGLhu4sgxJHDsy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDIzCittc2dpZCAiR2V0IGEgbmV3ZXIgdmVyc2lvbiBvZiBlMmZzY2shIgorbXNnc3RyICJM4bqleSBwaGnDqm4gYuG6o24gZTJmc2NrIG3hu5tpIGjGoW4hIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2hlY2tpbmcgZXh0MyBqb3VybmFsIGZvciAlcyIKK21zZ3N0ciAidHJvbmcga2hpIGtp4buDbSB0cmEgbmjhuq10IGvDvSBleHQzIHTDrG0gJXMiCisKKyM6IGUyZnNjay91bml4LmM6MTQ3OAorbXNnaWQgIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtIGNoZWNrLlxuIgorbXNnc3RyICJD4bqjbmggYsOhbzogxJFhbmcgYuG7jyBxdWEgdmnhu4djIHBo4bulYyBo4buTaSBuaOG6rXQga8O9IHbDrCDEkWFuZyBraeG7g20gdHJhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbeG7mXQgY8OhY2ggY2jhu4kgxJHhu41jLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG6t3QgY+G7nSBzacOqdSBraOG7kWkgdHLDqm4gJXNcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICJ0cm9uZyBraGkgcGjhu6VjIGjhu5NpIG5o4bqtdCBrw70gZXh0MyBj4bunYSAlcyIKKworIzogZTJmc2NrL3VuaXguYzoxNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpOiIKK21zZ3N0ciAiJXMgY8OzIHTDrW5oIG7Eg25nIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujOiIKKworIzogZTJmc2NrL3VuaXguYzoxNTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiJXM6IGPhuqNuaCBiw6FvOiBz4buxIGjhu5cgdHLhu6Mga2jhuqMgbsSDbmcgbsOpbiBsw6AgdGjhu7FjIG5naGnhu4dtLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorIiVzOiBlMmZzY2sga2jDtG5nIMSRxrDhu6NjIGJpw6puIGThu4tjaCB24bubaSBraOG6oyBuxINuZyBo4buXIHRy4bujIEhUUkVFLFxuIgorIlx0bmjGsG5nIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gJXMgY8OzIHRoxrAgbeG7pWMgSFRSRUUuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgd2hpbGUgcmVhZGluZyBiYWQgYmxvY2tzIGlub2RlXG4iCittc2dzdHIgIiVzOiAlcyB0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiBraOG7kWkgaOG7j25nXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTU5NworbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAixJDDonkga2jDtG5nIHBo4bqjaSBiw6FvIHRyxrDhu5tjIMSRaeG7gW0gaGF5LCBuaMawbmcgdGnhur9uIHRyw6xuaCBuw6B5IHPhur0gdGjhu60gdGnhur9wIHThu6VjLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDcmVhdGluZyBqb3VybmFsICglZCBibG9ja3MpOiAiCittc2dzdHIgIsSQYW5nIHThuqFvIG5o4bqtdCBrw70gKCVkIGto4buRaSk6ICIKKworIzogZTJmc2NrL3VuaXguYzoxNjQ4Cittc2dpZCAiIERvbmUuXG4iCittc2dzdHIgIiBIb8OgbiB04bqldC5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjQ5Cittc2dpZCAiIgorIlxuIgorIioqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKlxuIgorbXNnc3RyICIiCisiXG4iCisi4oCi4oCi4oCiIG5o4bqtdCBrw70gxJHDoyDEkcaw4bujYyB04bqhbyBs4bqhaSDigJQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBsw7pjIG7DoHkgbMOgIGV4dDMgbOG6oWkg4oCi4oCi4oCiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3MgorbXNnaWQgIlJlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLlxuIgorbXNnc3RyICLEkGFuZyBraOG7n2kgY2jhuqF5IGzhuqFpIGhvw6BuIHRvw6BuIGUyZnNjay4uLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NzYKK21zZ2lkICJ3aGlsZSByZXNldHRpbmcgY29udGV4dCIKK21zZ3N0ciAidHJvbmcga2hpIMSR4bq3dCBs4bqhaSBuZ+G7ryBj4bqjbmgiCisKKyM6IGUyZnNjay91bml4LmM6MTY4MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2NrIGLhu4sgaOG7p3kgYuG7jy5cbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjg4Cittc2dpZCAiYWJvcnRlZCIKK21zZ3N0ciAiYuG7iyBo4buneSBi4buPIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDAgZTJmc2NrL3V0aWwuYzo2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6IOKAouKAouKAouKAouKAoiBI4buGIFRI4buQTkcgVOG6rFAgVElOIELhu4ogU+G7rEEgxJDhu5RJIOKAouKAouKAouKAouKAolxuIgorCisjOiBlMmZzY2svdW5peC5jOjE3MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICoqKioqIFJFQk9PVCBMSU5VWCAqKioqKlxuIgorbXNnc3RyICIlczog4oCi4oCi4oCi4oCi4oCiIEjDg1kgS0jhu55JIMSQ4buYTkcgTOG6oEkgTElOVVgg4oCi4oCi4oCi4oCi4oCiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcxMiBlMmZzY2svdXRpbC5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiBXQVJOSU5HOiBGaWxlc3lzdGVtIHN0aWxsIGhhcyBlcnJvcnMgKioqKioqKioqKlxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiJXM6IOKAouKAouKAouKAouKAouKAouKAouKAouKAouKAoiBD4bqiTkggQsOBTzogSOG7hyB0aOG7kW5nIHThuq1wIHRpbiB24bqrbiBjw7JuIGPDsyBs4buXaSDigKLigKLigKLigKLigKLigKLigKLigKLigKLigKJcbiIKKyJcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNzUyCittc2dpZCAid2hpbGUgc2V0dGluZyBibG9jayBncm91cCBjaGVja3N1bSBpbmZvIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhurd0IHRow7RuZyB0aW4gdOG7lW5nIGtp4buDbSBuaMOzbSBraOG7kWkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkwIG1pc2MvdXRpbC5jOjcwCittc2dpZCAieVkiCittc2dzdHIgImNDeVkiCisKKyM6IGUyZnNjay91dGlsLmM6MTkxCittc2dpZCAibk4iCittc2dzdHIgImtLbk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA1Cittc2dpZCAiPHk+IgorbXNnc3RyICI8Yz4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA3Cittc2dpZCAiPG4+IgorbXNnc3RyICI8az4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA5Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKGMvaykiCisKKyM6IGUyZnNjay91dGlsLmM6MjIzCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICLEkcOjIGjhu6d5IVxuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOAorbXNnaWQgInllc1xuIgorbXNnc3RyICJjw7NcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNDAKK21zZ2lkICJub1xuIgorbXNnc3RyICJraMO0bmdcbiIKKworIzogZTJmc2NrL3V0aWwuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzPyBub1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGtow7RuZ1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IHllc1xuIgorIlxuIgorbXNnc3RyICIiCisiJXM/IGPDs1xuIgorIlxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgInllcyIKK21zZ3N0ciAiY8OzIgorCisjOiBlMmZzY2svdXRpbC5jOjI1OAorbXNnaWQgIm5vIgorbXNnc3RyICJraMO0bmciCisKKyM6IGUyZnNjay91dGlsLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgImUyZnNja19yZWFkX2JpdG1hcHM6IGlsbGVnYWwgYml0bWFwIGJsb2NrKHMpIGZvciAlcyIKK21zZ3N0ciAiZTJmc2NrX3JlYWRfYml0bWFwczoga2jhu5FpIG3huqNuZyDhuqNuaCBj4bqlbSBjaG8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6Mjc4Cittc2dpZCAicmVhZGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcyIKK21zZ3N0ciAixJFhbmcgxJHhu41jIG3huqNuZyDhuqNuaCBraeG7g3UgY+G6oyBoYWkgbsO6dCB0aMO0bmcgdGluIHbDoCBraOG7kWkiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSDEkeG7jWMgbeG6o25nIOG6o25oIGNobyAlcyIKKworIzogZTJmc2NrL3V0aWwuYzoyOTgKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICLEkWFuZyBnaGkgY8OhYyBt4bqjbmcg4bqjbmgga2nhu4N1IGto4buRaSB2w6AgbsO6dCB0aMO0bmcgdGluIgorCisjOiBlMmZzY2svdXRpbC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZXdyaXRpbmcgYmxvY2sgYW5kIGlub2RlIGJpdG1hcHMgZm9yICVzIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIGzhuqFpIGPDoWMgbeG6o25nIOG6o25oIGtp4buDdSBraOG7kWkgdsOgIG7DunQgdGjDtG5nIHRpbiBjaG8gJXMiCisKKyM6IGUyZnNjay91dGlsLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyIlczogVU5FWFBFQ1RFRCBJTkNPTlNJU1RFTkNZOyBSVU4gZnNjayBNQU5VQUxMWS5cbiIKKyJcdChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyIlczogTcOCVSBUSFXhuqpOIELhuqRUIFRIxq/hu5xORzogSMODWSBU4buwIENI4bqgWSBmc2NrLlxuIgorIlx0KHThu6ljIGzDoCBraMO0bmcgY8OzIHTDuXkgY2jhu41uIOKAnC1h4oCdIGhheSDigJwtcOKAnSkuXG4iCisKKyM6IGUyZnNjay91dGlsLmM6Mzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIKK21zZ3N0ciAiVsO5bmcgbmjhu5sgxJHGsOG7o2MgZMO5bmc6ICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjQwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIlbDuW5nIG5o4bubIMSRxrDhu6NjIGTDuW5nOiAlbHUsICIKKworIzogZTJmc2NrL3V0aWwuYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIKK21zZ3N0ciAidGjhu51pIGdpYW46ICU1LjJmLyU1LjJmLyU1LjJmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVsYXBzZWQgdGltZTogJTYuM2ZcbiIKK21zZ3N0ciAidGjhu51pIGdpYW4gxJHDoyBxdWE6ICU2LjNmXG4iCisKKyM6IGUyZnNjay91dGlsLmM6NDQ3IGUyZnNjay91dGlsLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiAlbHUgdHJvbmcgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NDc1IGUyZnNjay91dGlsLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG7DunQgdGjDtG5nIHRpbiAlbHUgdHJvbmcgJXMiCisKKyM6IGUyZnNjay91dGlsLmM6NjM3Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICJ0cm9uZyBraGkgY+G6pXAgcGjDoXQgYuG7mSDEkeG6v20gbMOgbSBz4buRIGtow7RuZyIKKworIzogZTJmc2NrL3V0aWwuYzo3ODUKK21zZ2lkICJVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k6IHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vZGlmaWVkIHdoaWxlIGZzY2sgaXMgcnVubmluZy5cbiIKK21zZ3N0ciAiTcOCVSBUSFXhuqpOOiBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRYW5nIMSRxrDhu6NjIHPhu61hIGNo4buvYSB0cm9uZyBraGkgbOG7h25oIGZzY2sgxJFhbmcgY2jhuqF5LlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaG/DoG4gdOG6pXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstYiBibG9ja19zaXplXSBbLWkgaW5wdXRfZmlsZV0gWy1vIG91dHB1dF9maWxlXSBbLXN2d25mXVxuIgorIiAgICAgICBbLWMgYmxvY2tzX2F0X29uY2VdIFstZCBkZWxheV9mYWN0b3JfYmV0d2Vlbl9yZWFkc10gWy1lIG1heF9iYWRfYmxvY2tzXVxuIgorIiAgICAgICBbLXAgbnVtX3Bhc3Nlc10gWy10IHRlc3RfcGF0dGVybiBbLXQgdGVzdF9wYXR0ZXJuIFsuLi5dXV1cbiIKKyIgICAgICAgZGV2aWNlIFtsYXN0X2Jsb2NrIFtmaXJzdF9ibG9ja11dXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogJXMgWy1iIGPhu6Ffa2jhu5FpXSBbLWkgdOG6rXBfdGluX25o4bqtcF0gWy1vIHThuq1wX3Rpbl94deG6pXRdIFstc3Z3bmZdXG4iCisiICAgICAgIFstYyBz4buRX2to4buRaV9jw7luZ19sw7pjXSBbLWQgaOG7h19z4buRX8SR4bujaV/EkeG7jWNdIFstZSBz4buRX3Thu5FpX8SRYV9raOG7kWlfeOG6pXVdXG4iCisiICAgICAgIFstcCBz4buRX2zhuqduX3F1YV0gWy10IG3huqt1X3Ro4butIFstdCBt4bqrdV90aOG7rSBbLi4uXV1dXG4iCisiICAgICAgIHRoaeG6v3RfYuG7iyBba2jhu5FpX2N14buRaSBba2jhu5FpX8SR4bqndV1dXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogVGhlIC1uIGFuZCAtdyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iCisiXG4iCittc2dzdHIgIiIKKyIlczogaGFpIHTDuXkgY2jhu41uIOKAnC1u4oCdIHbDoCDigJwtd+KAnSBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1LlxuIgorIlxuIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICIlNi4yZiUlIGRvbmUsICVzIGVsYXBzZWQuICglZC8lZC8lZCBlcnJvcnMpIgorbXNnc3RyICIlNi4yZiUlIGhvw6BuIHThuqV0LCAlcyDEkcOjIHRyw7RpIHF1YS4gKCVkLyVkLyVkIGzhu5dpKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAixJBhbmcgdGjhu60gcmEgYuG6sW5nIG3huqt1IG5n4bqrdSBuaGnDqm46ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzozNDAKK21zZ2lkICJUZXN0aW5nIHdpdGggcGF0dGVybiAweCIKK21zZ3N0ciAixJBhbmcgdGjhu60gcmEgYuG6sW5nIG3huqt1IDB4IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM3MiBtaXNjL2JhZGJsb2Nrcy5jOjQ0NQorbXNnaWQgImR1cmluZyBzZWVrIgorbXNnc3RyICJ0cm9uZyBraGkgZGkgY2h1eeG7g24gduG7iyB0csOtIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM4MworIywgYy1mb3JtYXQKK21zZ2lkICJXZWlyZCB2YWx1ZSAoJWxkKSBpbiBkb19yZWFkXG4iCittc2dzdHIgIkdpw6EgdHLhu4sgbOG6oSAoJWxkKSB0cm9uZyB2aeG7h2MgxJHhu41jIOKAnGRvX3JlYWTigJ1cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0NjkKK21zZ2lkICJkdXJpbmcgZXh0MmZzX3N5bmNfZGV2aWNlIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu5NuZyBi4buZIGhvw6EgdGhp4bq/dCBi4buLIOKAnGV4dDJmc19zeW5jX2RldmljZeKAnSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo0ODkgbWlzYy9iYWRibG9ja3MuYzo3NDkKK21zZ2lkICJ3aGlsZSBiZWdpbm5pbmcgYmFkIGJsb2NrIGxpc3QgaXRlcmF0aW9uIgorbXNnc3RyICJ0cm9uZyBraGkgYuG6r3QgxJHhuqd1IGzhurdwIGzhuqFpIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgc2FpIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwMyBtaXNjL2JhZGJsb2Nrcy5jOjYwMiBtaXNjL2JhZGJsb2Nrcy5jOjc1OQorbXNnaWQgIndoaWxlIGFsbG9jYXRpbmcgYnVmZmVycyIKK21zZ3N0ciAidHJvbmcga2hpIGPhuqVwIHBow6F0IGLhu5kgxJHhu4dtIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUwNworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBibG9ja3MgJWx1IHRvICVsdVxuIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGto4buRaSB0cm9uZyBwaOG6oW0gdmkgJWx1IMSR4bq/biAlbHVcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MTIKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLW9ubHkgbW9kZVxuIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIHTDrG0ga2jhu5FpIHNhaSB0cm9uZyBjaOG6vyDEkeG7mSBjaOG7iSDEkeG7jWNcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MjEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAocmVhZC1vbmx5IHRlc3QpOiAiCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpICh0aOG7rSByYSBjaOG7iSDEkeG7jWMpOiAiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTI4IG1pc2MvYmFkYmxvY2tzLmM6NjM0IG1pc2MvYmFkYmxvY2tzLmM6Njc2CisjOiBtaXNjL2JhZGJsb2Nrcy5jOjgyMgorbXNnaWQgIlRvbyBtYW55IGJhZCBibG9ja3MsIGFib3J0aW5nIHRlc3RcbiIKK21zZ3N0ciAiUXXDoSBuaGnhu4F1IGto4buRaSBzYWkgbsOqbiBo4buneSBi4buPIHBow6lwIHRo4butXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjA5Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpIHRyb25nIGNo4bq/IMSR4buZIMSR4buNYy1naGlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MTEgbWlzYy9iYWRibG9ja3MuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSBibG9jayAlbHUgdG8gJWx1XG4iCittc2dzdHIgIlThu6sga2jhu5FpICVsdSDEkeG6v24gJWx1XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NjY2Cittc2dpZCAiUmVhZGluZyBhbmQgY29tcGFyaW5nOiAiCittc2dzdHIgIsSQYW5nIMSR4buNYyB2w6Agc28gc8Ohbmg6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpIHRyb25nIGNo4bq/IMSR4buZIMSR4buNYy1naGkga2jDtG5nIGjhu6d5XG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6Nzc3Cittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgKG5vbi1kZXN0cnVjdGl2ZSByZWFkLXdyaXRlIHRlc3QpXG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdMOsbSBraOG7kWkgc2FpICh0aOG7rSByYSDEkeG7jWMtZ2hpIGtow7RuZyBo4buneSlcbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3ODQKK21zZ2lkICIiCisiXG4iCisiSW50ZXJydXB0IGNhdWdodCwgY2xlYW5pbmcgdXBcbiIKK21zZ3N0ciAiIgorIlxuIgorIk3hu5tpIGLhuq90IHTDrW4gaGnhu4d1IG5n4bqvdCBuw6puIGzDoG0gc+G6oWNoXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIHJhIGdoaSBk4buvIGxp4buHdSwga2jhu5FpICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5ODggbWlzYy91dGlsLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG1vdW50ZWQ7ICIKK21zZ3N0ciAiJXMgxJHDoyDEkcaw4bujYyBn4bqvbiBr4bq/dDsgIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5MAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisidMO5eSBjaOG7jW4ga2jhu5FpIHNhaSAoYmFkYmxvY2tzKSB24bqrbiBi4buLIMOpcCBideG7mWMuXG4iCisiTW9uZyDigJwvZXRjL210YWLigJ0ga2jDtG5nIMSRw7puZy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo5OTUKK21zZ2lkICJpdCdzIG5vdCBzYWZlIHRvIHJ1biBiYWRibG9ja3MhXG4iCittc2dzdHIgIktow7RuZyBhbiB0b8OgbiBraGkgY2jhuqF5IGJhZGJsb2Nrcy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAwIG1pc2MvdXRpbC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhcHBhcmVudGx5IGluIHVzZSBieSB0aGUgc3lzdGVtOyAiCittc2dzdHIgIkPDsyB24bq7IGzDoCAlcyDEkWFuZyDEkcaw4bujYyBo4buHIHRo4buRbmcgZMO5bmc7ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDAzCittc2dpZCAiYmFkYmxvY2tzIGZvcmNlZCBhbnl3YXkuXG4iCittc2dzdHIgInbhuqtuIMOpcCBideG7mWMgYmFkYmxvY2tzIChraOG7kWkgc2FpKS5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMgLSAlcyIKK21zZ3N0ciAiJXMga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0ZXN0X3BhdHRlcm4gLSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIG3huqt1IHRo4butICh0ZXN0X3BhdHRlcm4pIOKAlCAlcyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTYzCittc2dpZCAiTWF4aW11bSBvZiBvbmUgdGVzdF9wYXR0ZXJuIG1heSBiZSBzcGVjaWZpZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIlRyb25nIGNo4bq/IMSR4buZIGNo4buJIMSR4buNYywgY8OzIHRo4buDIGNo4buJIHJhIHThu5FpIMSRYSBt4buZdCBt4bqrdSB0aOG7rSAodGVzdF9wYXR0ZXJuKSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTY5Cittc2dpZCAiUmFuZG9tIHRlc3RfcGF0dGVybiBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgbW9kZSIKK21zZ3N0ciAiS2jDtG5nIGNobyBwaOG6uXAgbeG6q3UgdGjhu60gKHRlc3RfcGF0dGVybikgbmfhuqt1IG5oacOqbiB0cm9uZyBjaOG6vyDEkeG7mSBjaOG7iSDEkeG7jWMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE4MworbXNnaWQgIiIKKyJDb3VsZG4ndCBkZXRlcm1pbmUgZGV2aWNlIHNpemU7IHlvdSBtdXN0IHNwZWNpZnlcbiIKKyJ0aGUgc2l6ZSBtYW51YWxseVxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSBrw61jaCBj4buhIGPhu6dhIHRoaeG6v3QgYuG7iztcbiIKKyJi4bqhbiBj4bqnbiBwaOG6o2kgdOG7sSBjaOG7iSDEkeG7i25oIGvDrWNoIGPhu6EgxJHDsy5cbiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIHF1eeG6v3QgxJHhu4tuaCBrw61jaCBj4buhIGPhu6dhIHRoaeG6v3QgYuG7iyIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTk0Cittc2dpZCAibGFzdCBibG9jayIKK21zZ3N0ciAia2jhu5FpIGN14buRaSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjAwCittc2dpZCAiZmlyc3QgYmxvY2siCittc2dzdHIgImto4buRaSDEkeG6p3UiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbHUiCittc2dzdHIgImto4buRaSDEkeG6p3Uga2jDtG5nIGjhu6NwIGzhu4cgKCVsdSk6IHBo4bqjaSBuaOG7jyBoxqFuICVsdSIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjU5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAidHJvbmcga2hpIHThuqFvIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgaOG7j25nIHRyb25nIGLhu5kgbmjhu5siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI3NAorbXNnaWQgIndoaWxlIGFkZGluZyB0byBpbi1tZW1vcnkgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInRyb25nIGtoaSB0aMOqbSB2w6BvIGRhbmggc8OhY2ggY8OhYyBraOG7kWkgaOG7j25nIHRyb25nIGLhu5kgbmjhu5siCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiUXVhIHhvbmcsIHTDrG0gdGjhuqV5ICV1IGto4buRaSBzYWkuICglZC8lZC8lZCBlcnJvcnMpXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZmXSBbLSs9QWFDY0RkZWlqc1N1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIFstUlZmXSBbLSs9QWFDY0RkZWlqc1N1XSBbLXYgcGhpw6puX2LhuqNuXSB04bqtcF90aW4uLi5cbiIKKworIzogbWlzYy9jaGF0dHIuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHZlcnNpb24gLSAlc1xuIgorbXNnc3RyICJwaGnDqm4gYuG6o24gc2FpIOKAlCAlc1xuIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwMSBtaXNjL2xzYXR0ci5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc3RhdCAlcyIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIGzhuqV5IGPDoWMgdGjDtG5nIHRpbiB24buBICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjIwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIGPDoWMgY+G7nSB0csOqbiAlcyIKKworIzogbWlzYy9jaGF0dHIuYzoyMTMgbWlzYy9jaGF0dHIuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3Mgb2YgJXMgc2V0IGFzICIKK21zZ3N0ciAiQ8OhYyBj4budIGPhu6dhICVzIMSRw6MgxJHhurd0IHRow6BuaCAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgInRyb25nIGtoaSDEkeG6t3QgY8OhYyBj4budIHRyw6puICVzIgorCisjOiBtaXNjL2NoYXR0ci5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJWZXJzaW9uIG9mICVzIHNldCBhcyAlbHVcbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuICVzIMSRxrDhu6NjIMSR4bq3dCB0aMOgbmggJWx1XG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgdmVyc2lvbiBvbiAlcyIKK21zZ3N0ciAidHJvbmcga2hpIMSR4bq3dCBwaGnDqm4gYuG6o24gdHLDqm4gJXMiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYmnhur9uIMSRxrDhu51uZyBk4bqrbiB0cm9uZyBjaGF0dHJfZGlyX3Byb2MiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzA2Cittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIj0ga2jDtG5nIHTGsMahbmcgdGjDrWNoIHbhu5tpIOKAnC3igJ0gdsOgIOKAnCvigJ1cbiIKKworIzogbWlzYy9jaGF0dHIuYzozMTQKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiUGjhuqNpIGTDuW5nIOKAnC124oCdLCDigJw94oCdLCDigJwt4oCdIGhheSDigJwr4oCdXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1iZmhpeFZdIFstbyBzdXBlcmJsb2NrPTxudW0+XSBbLW8gYmxvY2tzaXplPTxudW0+XSBkZXZpY2VcbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIFstYmZoaXhWXSBbLW8gc2nDqnVfa2jhu5FpPTxz4buRPl0gWy1vIGPhu6Ffa2jhu5FpPTxz4buRPl0gdGhp4bq/dF9i4buLXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNTkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImto4buRaSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE2OAorbXNnaWQgImNsdXN0ZXJzIgorbXNnc3RyICJsacOqbiBjdW5nIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIk5ow7NtICVsdTogKEto4buRaSAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAgVOG7lW5nIGtp4buDbSAweCUwNHgiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIgKEPhuqZOICAgICAgMHglMDR4KSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIsIHVudXNlZCBpbm9kZXMgJXVcbiIKK21zZ3N0ciAiLCBuw7p0IGtow7RuZyBkw7luZyAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgJXMgc3VwZXJibG9jayBhdCAiCittc2dzdHIgIiAgJXMgc2nDqnUga2jhu5FpIHThuqFpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIlByaW1hcnkiCittc2dzdHIgIkNow61uaCIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIxMworbXNnaWQgIkJhY2t1cCIKK21zZ3N0ciAiU2FvIGzGsHUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAiCittc2dzdHIgIiwgTcO0IHThuqMgbmjDs20gdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBDw6FjIGto4buRaSBHRFQgxJHDoyBkw6BuaCByacOqbmcgdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiBHcm91cCBkZXNjcmlwdG9yIGF0ICIKK21zZ3N0ciAiIE3DtCB04bqjIG5ow7NtIHThuqFpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzNAorbXNnaWQgIiAgQmxvY2sgYml0bWFwIGF0ICIKK21zZ3N0ciAiIE3huqNuZyDhuqNuaCBraOG7kWkgdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjM4Cittc2dpZCAiLCBJbm9kZSBiaXRtYXAgYXQgIgorbXNnc3RyICIsIE3huqNuZyDhuqNuaCBuw7p0IHRow7RuZyB0aW4gdOG6oWkgIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQyCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBC4bqjbmcgbsO6dCB0aMO0bmcgdGluIHThuqFpICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiICAldSBmcmVlICVzLCAldSBmcmVlIGlub2RlcywgJXUgZGlyZWN0b3JpZXMlcyIKK21zZ3N0ciAiIgorIlxuIgorIiAgJXUgdHLhu5FuZyAlcywgJXUgbsO6dCBy4bqjbmgsICV1IHRoxrAgbeG7pWMlcyIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldSBuw7p0IGtow7RuZyBkw7luZ1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIEto4buRaSBy4bqjbmg6ICIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI2OQorbXNnaWQgIiAgRnJlZSBpbm9kZXM6ICIKK21zZ3N0ciAiICBOw7p0IHLhuqNuaDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzAwCittc2dpZCAid2hpbGUgcHJpbnRpbmcgYmFkIGJsb2NrIGxpc3QiCittc2dzdHIgInRyb25nIGtoaSBpbiByYSBkYW5oIHPDoWNoIGPDoWMga2jhu5FpIHNhaSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYmxvY2tzOiAldSIKK21zZ3N0ciAiS2jhu5FpIHNhaTogJXUiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMzMgbWlzYy90dW5lMmZzLmM6MzA2Cittc2dpZCAid2hpbGUgcmVhZGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiBuaOG6rXQga8O9IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgbeG7nyBuw7p0IHRow7RuZyB0aW4gbmjhuq10IGvDvSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM0NQorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlciBibG9jayIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyBzacOqdSBraOG7kWkgbmjhuq10IGvDvSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGZlYXR1cmVzOiAgICAgICAgIgorbXNnc3RyICJUw61uaCBuxINuZyBuaOG6rXQga8O9OiAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAiS8OtY2ggY+G7oSBuaOG6rXQga8O9OiAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorIkNoaeG7gXUgZMOgaSBuaOG6rXQga8O9OiAgICAgICAgJXVcbiIKKyJEw6N5IG5o4bqtdCBrw706ICAgICAgICAgICAgICAweCUwOHhcbiIKKyLEkOG6p3Ugbmjhuq10IGvDvTogICAgICAgICAgICAgICV1XG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBlcnJubzogICAgICAgICAgICAlZFxuIgorbXNnc3RyICJM4buXaSBKb3VybmFsOiAgICAgICAgICAgICAgJWRcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwMSBtaXNjL3R1bmUyZnMuYzoyMjIKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidHJvbmcga2hpIMSR4buNYyBzacOqdSBraOG7kWkgbmjhuq10IGvDvSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQwOQorbXNnaWQgIkNvdWxkbid0IGZpbmQgam91cm5hbCBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlcnMiCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBjw6FjIHPhu5EgbWEgdGh14bqtdCBzacOqdSBraOG7kWkgbmjhuq10IGvDvSIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQxMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBibG9jayBzaXplOiAgICAgICAldVxuIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIGZpcnN0IGJsb2NrOiAgICAgICV1XG4iCisiSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweCUwOHhcbiIKKyJKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgICV1XG4iCisiSm91cm5hbCBudW1iZXIgb2YgdXNlcnM6ICAldVxuIgorbXNnc3RyICIiCisiXG4iCisiS8OtY2ggY+G7oSBraOG7kWkgbmjhuq10IGvDvTogICAgICV1XG4iCisixJDhu5kgZMOgaSBuaOG6rXQga8O9OiAgICAgICAgICAgJXVcbiIKKyJLaOG7kWkgxJHhuqd1IG5o4bqtdCBrw706ICAgICAgICAgJXVcbiIKKyJEw6N5IG5o4bqtdCBrw706ICAgICAgICAgICAgICAweCUwOHhcbiIKKyLEkOG6p3Ugbmjhuq10IGvDvTogICAgICAgICAgICAgICV1XG4iCisiU+G7kSBuZ8aw4budaSBkw7luZyBuaOG6rXQga8O9OiAgICAldVxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAiTmfGsOG7nWkgZMO5bmcgbmjhuq10IGvDvTogICAgICAgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ0MiBtaXNjL21rZTJmcy5jOjY2NiBtaXNjL3R1bmUyZnMuYzoxMTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBvcHRpb25zIVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myDEkeG7gyBwaMOibiB0w6FjaCB0w7l5IGNo4buNbiFcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN1cGVyYmxvY2sgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5Egc2nDqnUga2jhu5FpIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYmxvY2tzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIGvDrWNoIGPhu6Ega2jhu5FpIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgZXh0ZW5kZWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdXBlcmJsb2NrPTxzdXBlcmJsb2NrIG51bWJlcj5cbiIKKyJcdGJsb2Nrc2l6ZT08YmxvY2tzaXplPlxuIgorbXNnc3RyICIiCisiXG4iCisiQ2jhu4kgcmEgdMO5eSBjaOG7jW4gbeG7nyBy4buZbmcgc2FpOiAlc1xuIgorIlxuIgorIkPDoWMgdMO5eSBjaOG7jW4gxJHDoyBt4bufIHLhu5luZyBjxaluZyDEkeG7i25oIGdp4bubaSBi4bqxbmcgZOG6pXUgcGjhuql5LCBjw7MgdGjhu4MgY2jhuqVwIG5o4bqtblxuIgorIsSR4buRaSBz4buRIMSRxrDhu6NjIG5n4bulIMO9IHbhu5tpIGThuqV1IGLhurFuZyDigJw94oCdLlxuIgorIlxuIgorIlTDuXkgY2jhu41uIMSRw6MgbeG7nyBy4buZbmcgaOG7o3AgbOG7hzpcbiIKKyJcdHN1cGVyYmxvY2s9PHPhu5EgdGjhu6kgdOG7sSBzacOqdSBraOG7kWk+XG4iCisiXHRibG9ja3NpemU9PGvDrWNoIGPhu6Ega2jhu5FpPlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTU0IG1pc2MvbWtlMmZzLmM6MTU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx0RMO5bmcgJXNcbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjU5MCBtaXNjL2UyaW1hZ2UuYzoxMzI2IG1pc2MvdHVuZTJmcy5jOjE5MjMKKyM6IHJlc2l6ZS9tYWluLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgc2nDqnUga2jhu5FpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gaOG7o3AgbOG7hy5cbiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjYxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiJXM6ICVzOiBlcnJvciByZWFkaW5nIGJpdG1hcHM6ICVzXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogJXM6IGfhurdwIGzhu5dpIGtoaSDEkeG7jWMgbeG6o25nIOG6o25oOiAlc1xuIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRYV0gZGV2aWNlIGltYWdlX2ZpbGVcbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIFstcnNJUWFdIHRoaeG6v3RfYuG7iyB04bqtcF90aW5f4bqjbmhcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yOiBoZWFkZXIgc2l6ZSBpcyBiaWdnZXIgdGhhbiB3cnRfc2l6ZVxuIgorbXNnc3RyICJM4buXaToga8OtY2ggdGjGsOG7m2MgcGjhuqduIMSR4bqndSBs4bubbiBoxqFuIHdydF9zaXplXG4iCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE0NAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIGhlYWRlciBidWZmZXJcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgxJHhu4dtIHBo4bqnbiDEkeG6p3VcbiIKKworIzogbWlzYy9lMmltYWdlLmM6MTc0Cittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIHNpw6p1IGto4buRaSIKKworIzogbWlzYy9lMmltYWdlLmM6MTgyCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAidHJvbmcga2hpIGdoaSBi4bqjbmcgbsO6dCB0aMO0bmcgdGluIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxODkKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGJsb2NrIGJpdG1hcCIKK21zZ3N0ciAidHJvbmcga2hpIGdoaSBt4bqjbmcg4bqjbmgga2jhu5FpIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxOTYKK21zZ2lkICJ3aGlsZSB3cml0aW5nIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAidHJvbmcga2hpIGdoaSBt4bqjbmcg4bqjbmggbsO6dCB0aMO0bmcgdGluIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxMzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBjb252ZXJ0IHFjb3cyIGltYWdlICglcykgaW50byByYXcgaW1hZ2UgKCVzKSIKK21zZ3N0ciAia2hpIHRo4butIGNodXnhu4NuIMSR4buVaSDhuqNuaCBxY293MiAoJXMpIHRow6BuaCBk4bqhbmcg4bqjbmggdGjDtCAoJXMpIgorCisjOiBtaXNjL2UybGFiZWwuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgb3BlbiAlc1xuIgorbXNnc3RyICJlMmxhYmVsOiBraMO0bmcgdGjhu4MgbeG7nyAlc1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGtow7RuZyB0aOG7gyBkaSBjaHV54buDbiDEkeG6p3UgxJHhu41jIHbhu4sgdHLDrSBzacOqdSBraOG7kWlcbiIKKworIzogbWlzYy9lMmxhYmVsLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3IgcmVhZGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGfhurdwIGzhu5dpIGtoaSDEkeG7jWMgc2nDqnUga2jhu5FpXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjcyCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IG5vdCBhbiBleHQyIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiZTJsYWJlbDoga2jDtG5nIHBo4bqjaSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGtp4buDdSBleHQyXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjk3IG1pc2MvdHVuZTJmcy5jOjIwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogbGFiZWwgdG9vIGxvbmcsIHRydW5jYXRpbmcuXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBuaMOjbiBxdcOhIGTDoGkgbsOqbiBj4bqvdCBuZ+G6r24uXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgImUybGFiZWw6IGtow7RuZyB0aOG7gyBkaSBjaHV54buDbiDEkeG6p3UgxJHhu41jIMSR4buDIGzhuqV5IGzhuqFpIHNpw6p1IGto4buRaVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogZXJyb3Igd3JpdGluZyBzdXBlcmJsb2NrXG4iCittc2dzdHIgImUybGFiZWw6IGfhurdwIGzhu5dpIGtoaSBnaGkgc2nDqnUga2jhu5FpXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6IGUybGFiZWwgdGhp4bq/dF9i4buLIFtuaMOjbl9t4bubaV1cbiIKKworIzogbWlzYy9lMnVuZG8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgPHRyYW5zYWN0aW9uIGZpbGU+IDxmaWxlc3lzdGVtPlxuIgorbXNnc3RyICJDw6FjaCBkw7luZzogJXMgPHThuq1wIHRpbiBnaWFvIGThu4tjaD4gPGjhu4cgdGjhu5FuZyB04bqtcCB0aW4+XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NTIKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZSBzeXN0ZW0gZGF0YSBcbiIKK21zZ3N0ciAiTOG7l2kgxJHhu41jIGThu68gbGnhu4d1IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgIkzhu5dpIHRkYl9mZXRjaCAlc1xuIgorCisjOiBtaXNjL2UydW5kby5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBmaWxlIHN5c3RlbSBNb3VudCB0aW1lIGRpZG4ndCBtYXRjaCAldVxuIgorbXNnc3RyICJHaeG7nSBn4bqvbiBr4bq/dCBo4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyB0xrDGoW5nIOG7qW5nIHbhu5tpICV1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6ODkKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gVVVJRCBkaWRuJ3QgbWF0Y2ggXG4iCittc2dzdHIgIlVVSUQgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgdMawxqFuZyDhu6luZyBcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRkYl9vcGVuICVzXG4iCittc2dzdHIgIkzhu5dpIHRkYl9vcGVuICVzXG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC5cbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kgdHJvbmcga2hpIHF1eeG6v3QgxJHhu4tuaCBu4bq/dSAlcyDEkcOjIGfhuq9uIGvhur90IGNoxrBhLlxuIgorCisjOiBtaXNjL2UydW5kby5jOjE3NQorbXNnaWQgImUydW5kbyBzaG91bGQgb25seSBiZSBydW4gb24gdW5tb3VudGVkIGZpbGUgc3lzdGVtXG4iCittc2dzdHIgImUydW5kbyBjaOG7iSBuw6puIGNo4bqheSB0csOqbiBt4buZdCBo4buHIHRo4buRbmcgdOG6rXAgdGluIGNoxrBhIGfhuq9uIGvhur90XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuICVzXG4iCittc2dzdHIgIkzhu5dpIG3hu58gJXNcbiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwbGF5ZWQgdHJhbnNhY3Rpb24gb2Ygc2l6ZSAlemQgYXQgbG9jYXRpb24gJWxsdVxuIgorbXNnc3RyICLEkMOjIGNo4bqheSBs4bqhaSBnaWFvIGThu4tjaCBjw7Mga8OtY2ggY+G7oSAlemQg4bufIHbhu4sgdHLDrSAlbGx1XG4iCisKKyM6IG1pc2MvZTJ1bmRvLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB3cml0ZSAlc1xuIgorbXNnc3RyICJM4buXaSBnaGkgJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGNvdWxkbid0IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIkPhuqJOSCBCw4FPOiBraMO0bmcgdGjhu4MgbeG7nyAlczogJXNcbiIKKworIzogbWlzYy9mc2NrLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGJhZCBmb3JtYXQgb24gbGluZSAlZCBvZiAlc1xuIgorbXNnc3RyICJD4bqiTkggQsOBTzogZ+G6t3AgxJHhu4tuaCBk4bqhbmcgc2FpIHRyw6puIGTDsm5nICVkIHRyw6puICVzXG4iCisKKyM6IG1pc2MvZnNjay5jOjM3MAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3VyIC9ldGMvZnN0YWIgZG9lcyBub3QgY29udGFpbiB0aGUgZnNjayBwYXNzbm9cbiIKKyJcdGZpZWxkLiAgSSB3aWxsIGtsdWRnZSBhcm91bmQgdGhpbmdzIGZvciB5b3UsIGJ1dCB5b3VcbiIKKyJcdHNob3VsZCBmaXggeW91ciAvZXRjL2ZzdGFiIGZpbGUgYXMgc29vbiBhcyB5b3UgY2FuLlxuIgorIlxuIgorbXNnc3RyICIiCisiQ+G6ok5IIELDgU86IC9ldGMvZnN0YWIgY+G7p2EgYuG6oW4ga2jDtG5nIGNo4bupYSB0csaw4budbmcgZnNjayBwYXNzbm8uXG4iCisiXHRNw6F5IHTDrW5oIHPhur0gxJFp4buBdSBjaOG7iW5oIHThuqFtIHRo4budaSBjaG8gYuG6oW4sIG5oxrBuZyBi4bqhbiBuw6puIHPhu61hIGNo4buvYVxuIgorIlx0dOG6rXAgdGluIC9ldGMvZnN0YWIgY8Ogbmcgc+G7m20gY8OgbmcgY8OgbmcgdOG7kXQuXG4iCisiXG4iCisKKyM6IG1pc2MvZnNjay5jOjQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiAlczogbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6ICVzOiBraMO0bmcgdMOsbSB0aOG6pXlcbiIKKworIzogbWlzYy9mc2NrLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YWl0OiBObyBtb3JlIGNoaWxkIHByb2Nlc3M/IT9cbiIKK21zZ3N0ciAiJXM6IMSR4bujaToga2jDtG5nIGPDsyB0aeG6v24gdHLDrG5oIGNvbiBu4buvYSA/IT9cbiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvLi4uICVzIGNobyB0aGnhur90IGLhu4sgJXMgxJHDoyB0aG/DoXQgduG7m2kgdMOtbiBoaeG7h3UgJWQuXG4iCisKKyM6IG1pc2MvZnNjay5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlczogc3RhdHVzIGlzICV4LCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIgorbXNnc3RyICIlcyAlczogdHLhuqFuZyB0aMOhaSBsw6AgJXgsIGtow7RuZyBiYW8gZ2nhu50gbsOqbiB44bqjeSByYS5cbiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICIlcyBob8OgbiB04bqldCAodHLhuqFuZyB0aMOhaSB0aG/DoXQgJWQpXG4iCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiVzOiBH4bq3cCBs4buXaSAlZCB0cm9uZyBraGkgdGjhu7FjIGhp4buHbiBmc2NrLiVzIGNobyAlc1xuIgorCisjOiBtaXNjL2ZzY2suYzo3NDIKK21zZ2lkICIiCisiRWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmaWxlc3lzdGVtIHR5cGVzIHBhc3NlZCB0byAtdCBtdXN0IGJlIHByZWZpeGVkXG4iCisid2l0aCAnbm8nIG9yICchJy5cbiIKK21zZ3N0ciAiIgorIkhv4bq3YyB04bqldCBj4bqjIGhv4bq3YyBraMO0bmcgY8OzIGtp4buDdSBo4buHIHRo4buRbmcgdOG6rXAgdGluIMSRxrDhu6NjIGfhu61pIHF1YVxuIgorImNobyB0w7l5IGNo4buNbiDigJwtdOKAnSBwaOG6o2kgY8OzIHRp4buBbiB04buRIOKAnG5v4oCdIGhheSDigJwh4oCdLlxuIgorCisjOiBtaXNjL2ZzY2suYzo3NjEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGVzeXN0ZW0gdHlwZXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIGtp4buDdSBo4bq/IHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvZnNjay5jOjg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzIG51bWJlclxuIgorbXNnc3RyICIlczogxJFhbmcgYuG7jyBxdWEgZMOybmcgc2FpIHRyb25nIOKAnC9ldGMvZnN0YWLigJ06IMSRw7NuZyBr4bq/dCBs4bqvcCB24bubaSBz4buRIGfhu61pIHF1YSBmc2NrIGtow6FjIHPhu5Ega2jDtG5nXG4iCisKKyM6IG1pc2MvZnNjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJmc2NrOiBjYW5ub3QgY2hlY2sgJXM6IGZzY2suJXMgbm90IGZvdW5kXG4iCittc2dzdHIgImZzY2s6IGtow7RuZyB0aOG7gyBraeG7g20gdHJhICVzOiBmc2NrLiVzIGtow7RuZyB0w6xtIHRo4bqleVxuIgorCisjOiBtaXNjL2ZzY2suYzo5NjcKK21zZ2lkICJDaGVja2luZyBhbGwgZmlsZSBzeXN0ZW1zLlxuIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIG3hu41pIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4uXG4iCisKKyM6IG1pc2MvZnNjay5jOjEwNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS13YWl0aW5nLS0gKHBhc3MgJWQpXG4iCittc2dzdHIgIi0txJFhbmcgxJHhu6NpLS0gKGzhuqduIHF1YSAlZClcbiIKKworIzogbWlzYy9mc2NrLmM6MTA3OAorbXNnaWQgIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6IGZzY2sgWy1BTU5QUlRWXSBbIC1DIFsgZmQgXSBdIFstdCBraeG7g3VfSFRUXSBbZnMtb3B0aW9uc10gW0hUVCAuLi5dXG4iCisiXG4iCisiSFRUOiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IHF1w6Egbmhp4buBdSB0aGnhur90IGLhu4tcbiIKKworIzogbWlzYy9mc2NrLmM6MTE1MyBtaXNjL2ZzY2suYzoxMjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB0b28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHF1w6Egbmhp4buBdSDEkeG7kWkgc+G7kVxuIgorCisjOiBtaXNjL2xzYXR0ci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWYWRsdl0gW2ZpbGVzLi4uXVxuIgorbXNnc3RyICJDw6FjaCBkw7luZzogJXMgWy1SVmFkbHZdIFt04bqtcF90aW4uLi5dXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyBmbGFncyBvbiAlcyIKK21zZ3N0ciAiVHJvbmcga2hpIMSR4buNYyBjw6FjIGPhu50gdHLDqm4gJXMiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICJUcm9uZyBraGkgxJHhu41jIHBoacOqbiBi4bqjbiB0csOqbiAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWN8LWwgZmlsZW5hbWVdIFstYiBibG9jay1zaXplXSBbLUMgY2x1c3Rlci1zaXplXVxuIgorIlx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdIFstSiBqb3VybmFsLW9wdGlvbnNdXG4iCisiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKyJcdFstbSByZXNlcnZlZC1ibG9ja3MtcGVyY2VudGFnZV0gWy1vIGNyZWF0b3Itb3NdXG4iCisiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG4iCisiXHRbLU8gZmVhdHVyZVssLi4uXV0gWy1yIGZzLXJldmlzaW9uXSBbLUUgZXh0ZW5kZWQtb3B0aW9uWywuLi5dXVxuIgorIlx0Wy10IGZzLXR5cGVdIFstVCB1c2FnZS10eXBlIF0gWy1VIFVVSURdIFstam5xdkRGS1NWXSBkZXZpY2UgW2Jsb2Nrcy1jb3VudF1cbiIKK21zZ3N0ciAiIgorIkPDoWNoIGTDuW5nOiAlcyBbLWN8LWwgdMOqbl904bqtcF90aW5dIFstYiBj4buhX2to4buRaV0gWy1DIGPhu6FfbGnDqm5fY3VuZ11cbiIKKyJcdFstaSBieXRlX23hu5dpX2lub2RlXSBbLUkgY+G7oV9pbm9kZV0gWy1KIHTDuXlfY2jhu41uX25o4bqtdF9rw71dXG4iCisiXHRbLUcgY+G7oV9uaMOzbS1mbGV4XSBbLU4gc+G7kV9sxrDhu6NuZ19pbm9kZV1cbiIKKyJcdCBbLW0gcGjhuqduX3RyxINtX2to4buRaV9kw6BuaF9yacOqbmddIFstbyBIxJBIX3ThuqFvXVxuIgorIlx0Wy1nIHPhu5Eta2jhu5FpX23hu5dpX25ow7NtXSBbLUwgbmjDo25fa2jhu5FpX3Rpbl0gWy1NIHRoxrBfbeG7pWNfbOG6r3BfY3Xhu5FpXVxuIgorIlx0Wy1PIHTDrW5oX27Eg25nWywuLi5dXSBbLXIgYuG6o25fc+G7rWFfxJHhu5VpX0hUVF0gWy1FIHTDuXlfY2jhu41uX23hu59fcuG7mW5nWywuLi5dXVxuIgorIlx0IFstdCBraeG7g3VfSFRUVF0gWy1UIGtp4buDdS1kw7luZyBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gdGhp4bq/dF9i4buLIFtz4buRX2zGsOG7o25nX2to4buRaV1cbiIKKyJU4burIHZp4bq/dCB04bqvdDpcbiIKKyJcdEhESDogaOG7hyDEkWnhu4F1IGjDoG5oXG4iCisiXHRIVFRUOiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAixJBhbmcgY2jhuqF5IGzhu4duaDogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHJ1biAnJXMnIgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gY2jhuqF5IOKAnCVz4oCdIgorCisjOiBtaXNjL21rZTJmcy5jOjIzMgorbXNnaWQgIndoaWxlIHByb2Nlc3NpbmcgbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gcHJvZ3JhbSIKK21zZ3N0ciAidHJvbmcga2hpIHjhu60gbMO9IGRhbmggc8OhY2ggY8OhYyBraOG7kWkgc2FpIHThu6sgY2jGsMahbmcgdHLDrG5oIgorCisjOiBtaXNjL21rZTJmcy5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9jayAlZCBpbiBwcmltYXJ5IHN1cGVyYmxvY2svZ3JvdXAgZGVzY3JpcHRvciBhcmVhIGJhZC5cbiIKK21zZ3N0ciAiS2jhu5FpICVkIHNhaSB0cm9uZyB2w7luZyBtw7QgdOG6oyBuaMOzbS9zacOqdSBraOG7kWkgY2jDrW5oLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJCbG9ja3MgJXUgdGhyb3VnaCAldSBtdXN0IGJlIGdvb2QgaW4gb3JkZXIgdG8gYnVpbGQgYSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICIiCisiQ8OhYyBraOG7kWkgdHJvbmcgcGjhuqFtIHZpICV1IMSR4bq/biAldSBwaOG6o2kgbMOgIHThu5F0XG4iCisixJHhu4MgeMOieSBk4buxbmcgxJHGsOG7o2MgaOG7hyB0aOG7kW5nIHThuq1wIHRpbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQKK21zZ2lkICJBYm9ydGluZy4uLi5cbiIKK21zZ3N0ciAixJBhbmcgaOG7p3kgYuG7jy4uLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogdGhlIGJhY2t1cCBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3JzIGF0IGJsb2NrICV1IGNvbnRhaW5cbiIKKyJcdGJhZCBibG9ja3MuXG4iCisiXG4iCittc2dzdHIgIiIKKyJD4bqjbmggYsOhbzogY8OhYyBtw7QgdOG6oyBuaMOzbS9zacOqdSBraOG7kWkgZOG7sSB0cuG7ryB04bqhaSBraOG7kWkgJXUgY2jhu6lhIGto4buRaSBzYWkuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzAzCittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgInRyb25nIGtoaSDEkcOhbmggZOG6pXUgY8OhYyBraOG7kWkgc2FpIMSRw6MgxJHGsOG7o2MgZMO5bmciCisKKyM6IG1pc2MvbWtlMmZzLmM6MzIwCittc2dpZCAiV3JpdGluZyBpbm9kZSB0YWJsZXM6ICIKK21zZ3N0ciAixJBhbmcgZ2hpIGPDoWMgYuG6o25nIG7DunQgdGjDtG5nIHRpbjogIgorCisjOiBtaXNjL21rZTJmcy5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS2jDtG5nIHRo4buDIGdoaSAlZCBraOG7kWkgdHJvbmcgYuG6o25nIG7DunQgdGjDtG5nIHRpbiwgYuG6r3QgxJHhuqd1IHThuqFpICVsbHU6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MzU1IG1pc2MvbWtlMmZzLmM6MjI1NyBtaXNjL21rZTJmcy5jOjI1MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAiaG/DoG4gdOG6pXQgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKworIzogbWlzYy9ta2UyZnMuYzozNjYKK21zZ2lkICJ3aGlsZSBjcmVhdGluZyByb290IGRpciIKK21zZ3N0ciAidHJvbmcga2hpIHThuqFvIHRoxrAgbeG7pWMgZ+G7kWMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzczCittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIG7DunQgdGjDtG5nIHRpbiBn4buRYyIKKworIzogbWlzYy9ta2UyZnMuYzozODUKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhurd0IHF1eeG7gW4gc+G7nyBo4buvdSBuw7p0IHRow7RuZyB0aW4gZ+G7kWMiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAzCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgInRyb25nIGtoaSB04bqhbyAvbeG6pXQrdMOsbSIKKworIzogbWlzYy9ta2UyZnMuYzo0MTAKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0cm9uZyBraGkgdHJhIHTDrG0gL23huqV0K3TDrG0iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIzCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICJ0cm9uZyBraGkgbeG7nyBy4buZbmcgL23huqV0K3TDrG0iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM4Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSDEkeG6t3QgbsO6dCB0aMO0bmcgdGluIGto4buRaSBzYWkiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIk91dCBvZiBtZW1vcnkgZXJhc2luZyBzZWN0b3JzICVkLSVkXG4iCittc2dzdHIgIkjhur90IGLhu5kgbmjhu5sgbsOqbiB4b8OhIGPDoWMgcsOjbmggZ2hpIHRyb25nIHBo4bqhbSB2aSAlZCDEkeG6v24gJWRcbiIKKworIzogbWlzYy9ta2UyZnMuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FybmluZzogY291bGQgbm90IHJlYWQgYmxvY2sgMDogJXNcbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IGtow7RuZyB0aOG7gyDEkeG7jWMga2jhu5FpIDA6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBraMO0bmcgdGjhu4MgeG/DoSByw6NuaCBnaGkgJWQ6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTA3Cittc2dpZCAid2hpbGUgaW5pdGlhbGl6aW5nIGpvdXJuYWwgc3VwZXJibG9jayIKK21zZ3N0ciAidHJvbmcga2hpIGto4bufaSB04bqhbyBzacOqdSBraOG7kWkgbmjhuq10IGvDvSIKKworIzogbWlzYy9ta2UyZnMuYzo1MTUKK21zZ2lkICJaZXJvaW5nIGpvdXJuYWwgZGV2aWNlOiAiCittc2dzdHIgIsSQYW5nIGzDoG0gc+G7kSBraMO0bmcgdGhp4bq/dCBi4buLIG5o4bqtdCBrw706ICIKKworIzogbWlzYy9ta2UyZnMuYzo1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICJ0cm9uZyBraGkgbMOgbSBz4buRIGtow7RuZyB0aGnhur90IGLhu4sgbmjhuq10IGvDvSAoa2jhu5FpICVsbHUsIHPhu5EgbMaw4bujbmcgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjU0NQorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIHNpw6p1IGto4buRaSBuaOG6rXQga8O9IgorCisjOiBtaXNjL21rZTJmcy5jOjU2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2FybmluZzogJWxsdSBibG9ja3MgdW51c2VkLlxuIgorIlxuIgorbXNnc3RyICIiCisiY+G6o25oIGLDoW86ICVsbHUga2jhu5FpIGNoxrBhIGTDuW5nLlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGxhYmVsPSVzXG4iCittc2dzdHIgIk5ow6NuIGjhu4cgdGjhu5FuZyB04bqtcCB0aW49JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT1MgdHlwZTogJXNcbiIKK21zZ3N0ciAiS2nhu4N1IEjEkEg6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAiQ+G7oSBraOG7kWk9JXUgKGLhuqNuIGdoaT0ldSlcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2x1c3RlciBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkPhu6EgbGnDqm4gY3VuZz0ldSAoYuG6o24gZ2hpPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGcmFnbWVudCBzaXplPSV1IChsb2c9JXUpXG4iCittc2dzdHIgIkPhu6EgxJFv4bqhbj0ldSAoYuG6o24gZ2hpPSV1KVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdHJpZGU9JXUgYmxvY2tzLCBTdHJpcGUgd2lkdGg9JXUgYmxvY2tzXG4iCittc2dzdHIgIkLGsOG7m2M9JXUga2jhu5FpLCDEkOG7mSBy4buZbmcgc+G7jWM9JXUga2jhu5FpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcywgJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiJXUgbsO6dCB0aMO0bmcgdGluLCAlbGx1IGto4buRaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICIlbGx1IGJsb2NrcyAoJTIuMmYlJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyXG4iCittc2dzdHIgIiVsbHUga2jhu5FpICglMi4yZiUlKSDEkcaw4bujYyBkw6BuaCByacOqbmcgY2hvIHNpw6p1IG5nxrDhu51pIGTDuW5nXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAiS2jhu5FpIGThu68gbGnhu4d1IMSR4bqndT0ldVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICJSb290IGRpcmVjdG9yeSBvd25lcj0ldToldVxuIgorbXNnc3RyICJDaOG7pyBz4bufIGjhu691IHRoxrAtbeG7pWMgZ+G7kWM9JXU6JXVcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0lbHVcbiIKK21zZ3N0ciAiS2jhu5FpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gdOG7kWkgxJFhPSVsdVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9jayBncm91cHNcbiIKK21zZ3N0ciAiJXUgbmjDs20ga2jhu5FpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrIGdyb3VwXG4iCittc2dzdHIgIiV1IG5ow7NtIGto4buRaVxuIgorCisjOiBtaXNjL21rZTJmcy5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUga2jhu5FpIHRyw6puIG3hu5dpIG5ow7NtLCAldSBsacOqbiBjdW5nIHRyw6puIG3hu5dpIG5ow7NtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJsb2NrcyBwZXIgZ3JvdXAsICV1IGZyYWdtZW50cyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUga2jhu5FpIHRyw6puIG3hu5dpIG5ow7NtLCAldSDEkW/huqFuIHRyw6puIG3hu5dpIG5ow7NtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiJXUgbsO6dCB0aMO0bmcgdGluIHRyw6puIG3hu5dpIG5ow7NtXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIlNpw6p1IGto4buRaSBk4buxIHRy4buvIMSRxrDhu6NjIGPhuqV0IGdp4buvIHRyw6puIGto4buRaTogIgorCisjOiBtaXNjL21rZTJmcy5jOjY5MSBtaXNjL3R1bmUyZnMuYzoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW1wX3VwZGF0ZV9pbnRlcnZhbDogJXNcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBzdHJpZGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5Egc3RyaWRlIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIlRoYW0gc+G7kSBzdHJpZGUga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVzaXplIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6Ega2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICJT4buRIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgdOG7kWkgxJFhIHBo4bqjaSBs4bubbiBoxqFuIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzo3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT24tbGluZSByZXNpemluZyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBt4buZdCBjw6FjaCB0cuG7sWMgdHV54bq/biBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7o1xuIgorInRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gYuG6o24gc+G7rWEgxJHhu5VpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzo4MDEgbWlzYy9ta2UyZnMuYzo4MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByb290X293bmVyOiAnJXMnXG4iCittc2dzdHIgInJvb3Rfb3duZXIga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcXVvdGF0eXBlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIGtp4buDdSBo4bqhbiBuZ+G6oWNoIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGRhdGEgY2h1bmsgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0cmVzaXplPTxyZXNpemUgbWF4aW11bSBzaXplIGluIGJsb2Nrcz5cbiIKKyJcdGxhenlfaXRhYmxlX2luaXQ9PDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGU+XG4iCisiXHRsYXp5X2pvdXJuYWxfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdHJvb3RfdWlkPTx1aWQgb2Ygcm9vdCBkaXJlY3Rvcnk+XG4iCisiXHRyb290X2dpZD08Z2lkIG9mIHJvb3QgZGlyZWN0b3J5PlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJUw7l5IGNo4buNbiDEkcOjIGNobyBraMO0bmcgxJHDum5nOiAlc1xuIgorIlxuIgorIkPDoWMgdMO5eSBjaOG7jW4gbeG7nyBy4buZbmcgxJHGsOG7o2MgbmfEg24gY8OhY2ggYuG6sW5nIGThuqV1IHBo4bqpeSwgY8OzIHRo4buDIGNo4bqlcCBuaOG6rW5cbiIKKyJcdMSR4buRaSBz4buRIMSRxrDhu6NjIGfDoW4gYuG6sW5nIGThuqV1IGLhurFuZyAo4oCcPeKAnS4uXG4iCisiXG4iCisiVMO5eSBjaOG7jW4gbeG7nyBy4buZbmcgaOG7o3AgbOG7hzpcbiIKKyJcdHN0cmlkZT08xJFv4bqhbiBk4buvIGxp4buHdSBSQUlEIG3hu5dpIMSRxKlhIHRoZW8ga2jhu5FpPlxuIgorIlx0c3RyaXBlLXdpZHRoPTxSQUlEIHN0cmlkZSAqIGPDoWMgxJHEqWEgZOG7ryBsaeG7h3UgdGhlbyBraOG7kWk+XG4iCisiXHRyZXNpemU9PGvDrWNoIGPhu6EgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB04buRaSDEkWEgdGhlbyBraOG7kWk+XG4iCisiXHRsYXp5X2l0YWJsZV9pbml0PTwwIMSR4buDIHThuq90LCAxIMSR4buDIGLhuq10PlxuIgorIlx0bGF6eV9qb3VybmFsX2luaXQ9PDAgxJHhu4MgdOG6r3QsIDEgxJHhu4MgYuG6rXQ+XG4iCisiXHRyb290X3VpZD08dWlkIGPhu6dhIHRoxrAtbeG7pWMgZ+G7kWM+XG4iCisiXHRyb290X2dpZD08Z2lkIGPhu6dhIHRoxrAtbeG7pWMgPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorImfhu5FjXHRub2Rpc2NhcmRcbiIKKyJcdHF1b3RhdHlwZT08dXNyIEhBWSBncnA+XG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiBSQUlEIHN0cmlwZS13aWR0aCAldSBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiBzdHJpZGUgJXUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogY2hp4buBdSBy4buZbmcgc+G7jWMgKHN0cmlwZS13aWR0aCkgUkFJRCAldSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBi4buZaSBz4buRIGTGsMahbmcgY+G7p2EgJXUuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6OTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTeW50YXggZXJyb3IgaW4gbWtlMmZzIGNvbmZpZyBmaWxlICglcywgbGluZSAjJWQpXG4iCisiXHQlc1xuIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kgY8O6IHBow6FwIHRyb25nIHThuq1wIHRpbiBj4bqldSBow6xuaCBta2UyZnMgKCVzLCBkw7JuZyBz4buRICVkKVxuIgorIlx0JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MjAgbWlzYy90dW5lMmZzLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZmlsZXN5c3RlbSBvcHRpb24gc2V0OiAlc1xuIgorbXNnc3RyICLEkOG6t3QgdMO5eSBjaOG7jW4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgaOG7o3AgbOG7hzogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MzIgbWlzYy90dW5lMmZzLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAixJDhurd0IHTDuXkgY2jhu41uIGzhuq9wIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlThuq1wIHRpbiDigJxta2UyZnMuY29uZuKAnSBj4bunYSBi4bqhbiBraMO0bmcgxJHhu4tuaCBuZ2jEqWEga2nhu4N1IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gJXMuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBhbiB1cGRhdGVkIG1rZTJmcy5jb25mIGZpbGUuXG4iCisiXG4iCittc2dzdHIgIiIKKyJS4bqldCBjw7MgdGjhu4MgbMOgIGLhuqFuIGPhuqduIHBo4bqjaSBjw6BpIMSR4bq3dCBt4buZdCB04bqtcCB0aW4g4oCcbWtlMmZzLmNvbmbigJ0gbeG7m2kuXG4iCisiXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA4MAorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZy4uLlxuIgorbXNnc3RyICLEkGFuZyBo4buneSBi4buPLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTEyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIkPhuqNuaCBiw6FvOiBmc190eXBlICVzIGtow7RuZyDEkcaw4bujYyDEkeG7i25oIG5naMSpYSB0cm9uZyBta2UyZnMuY29uZlxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgUEFUSC5cbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgY2hvIMSQxq/hu5xORy1E4bqqTlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgdOG6oW8gcHJvZmlsZSB0aMOgbmggY8O0bmcgKGzhu5dpOiAlbGQpLlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9jayBzaXplIC0gJXMiCittc2dzdHIgImPhu6Ega2jhu5FpIGtow7RuZyBo4bujcCBs4buHIOKAlCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiQ+G6o25oIGLDoW86IGvDrWNoIGPhu6Ega2jhu5FpICVkIHbDtCDDrWNoIHRyw6puIHBo4bqnbiBs4bubbiBo4buHIHRo4buRbmcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM3NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNsdXN0ZXIgc2l6ZSAtICVzIgorbXNnc3RyICJj4buhIGxpw6puIGN1bmcga2jDtG5nIGjhu6NwIGzhu4cg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzODcKK21zZ2lkICInLVInIGlzIGRlcHJlY2F0ZWQsIHVzZSAnLUUnIGluc3RlYWQiCittc2dzdHIgIuKAnC1S4oCdIGtow7RuZyBkw7luZyBu4buvYSwgaMOjeSB0aGF5IGLhurFuZyDigJwtReKAnSIKKworIzogbWlzYy9ta2UyZnMuYzoxMzk5Cittc2dpZCAiSWxsZWdhbCBudW1iZXIgZm9yIGJsb2NrcyBwZXIgZ3JvdXAiCittc2dzdHIgIlPhu5EgY+G6pW0gY2hvIHPhu5Ega2jhu5FpIHRyw6puIG3hu5dpIG5ow7NtIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MDQKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAic+G7kSBraOG7kWkgdHLDqm4gbeG7l2kgbmjDs20gcGjhuqNpIGzDoCBi4buZaSBz4buRIGNobyA4IgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTIKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICJLw61jaCBj4buhIGZsZXhfYmcgY8OzIHPhu5Ega2jDtG5nIMSRxrDhu6NjIHBow6lwIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MTgKK21zZ2lkICJmbGV4X2JnIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIDIiCittc2dzdHIgIkvDrWNoIGPhu6EgZmxleF9iZyBwaOG6o2kgbMOgIGzFqXkgdGjhu6thIDIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHJhdGlvICVzIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAidOG7tyBs4buHIG7DunQgdGjDtG5nIHRpbiBraMO0bmcgaOG7o3AgbOG7hyAlcyAodGhp4buDdSAlZC/EkWEgJWQpIgorCisjOiBtaXNjL21rZTJmcy5jOjE0MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplIC0gJXMiCittc2dzdHIgImvDrWNoIGPhu6EgbsO6dCB0aMO0bmcgdGluIGtow7RuZyBo4bujcCBs4buHIOKAlCAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IC1LIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlICctRSBub2Rpc2NhcmQnIGV4dGVuZGVkIG9wdGlvbiBpbnN0ZWFkIVxuIgorbXNnc3RyICJD4bqjbmggYsOhbzogdHXhu7MgY2jhu41uIC1LIGtow7RuZyDEkcaw4bujYyB0w6FuIHRow6BuaCB2w6AgY8OzIGzhur0ga2jDtG5nIGPDsm4gYmFvIGdp4budIMSRxrDhu6NjIHPhu60gZOG7pW5nIG7hu69hLiBT4butIGThu6VuZyB0deG7syBjaOG7jW4gbeG7nyBy4buZbmcg4oCcLUUgbm9kaXNjYXJk4oCdIMSR4buDIHRoYXkgdGjhur8hXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ2MAorbXNnaWQgImluIG1hbGxvYyBmb3IgYmFkX2Jsb2Nrc19maWxlbmFtZSIKK21zZ3N0ciAiIgorInRyb25nIGjDoG0gY+G6pXAgcGjDoXQgYuG7mSBuaOG7myBtYWxsb2MgY2hvIHTDqm4gdOG6rXAgdGluIGto4buRaSBzYWlcbiIKKyLigJxiYWRfYmxvY2tzX2ZpbGVuYW1l4oCdIgorCisjOiBtaXNjL21rZTJmcy5jOjE0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZXNlcnZlZCBibG9ja3MgcGVyY2VudCAtICVzIgorbXNnc3RyICJwaOG6p24gdHLEg20ga2jhu5FpIMSRxrDhu6NjIGTDoG5oIHJpw6puZyBraMO0bmcgaOG7o3AgbOG7hyDigJQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtIGlub2RlcyAtICVzIgorbXNnc3RyICJz4buRIChudW0pIG7DunQgdGjDtG5nIHRpbiBzYWkg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJldmlzaW9uIGxldmVsIC0gJXMiCittc2dzdHIgImPhuqVwIGLhuqNuIHPhu61hIMSR4buVaSBzYWkg4oCUICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE1MTkKK21zZ2lkICJUaGUgLXQgb3B0aW9uIG1heSBvbmx5IGJlIHVzZWQgb25jZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLXQgY2jhu4kgc+G7rSBk4bulbmcgbeG7mXQgbOG6p24iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTUyNworbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICJUw7l5IGNo4buNbiAtVCBjaOG7iSBz4butIGThu6VuZyBt4buZdCBs4bqnbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTgwIG1pc2MvbWtlMmZzLmM6MjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gbeG7nyB0aGnhur90IGLhu4sgbmjhuq10IGvDvSAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBkZXYgYmxvY2tzaXplICglZCkgc21hbGxlciB0aGFuIG1pbmltdW0gYmxvY2tzaXplICVkXG4iCittc2dzdHIgIkvDrWNoIGPhu6EgY+G7p2EgdGhp4bq/dCBi4buLIG5o4bqtdCBrw70gKCVkKSBuaOG7jyBoxqFuIGvDrWNoIGPhu6EgdOG7kWkgdGhp4buDdSAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIsSQYW5nIGTDuW5nIGvDrWNoIGPhu6Ega2jhu5FpIGPhu6dhIHRoaeG6v3QgYuG7iyBuaOG6rXQga8O9OiAlZFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9ja3MgJyVzJyBvbiBkZXZpY2UgJyVzJyIKK21zZ3N0ciAia2jhu5FpIOKAnCVz4oCdIHNhaSB0csOqbiB0aGnhur90IGLhu4sg4oCcJXPigJ0iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYxMworbXNnaWQgImZpbGVzeXN0ZW0iCittc2dzdHIgImjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTYyNiByZXNpemUvbWFpbi5jOjM2NworbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gcXV54bq/dCDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNjMyCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpIGvDrWNoIGPhu6EgY+G7p2EgdGhp4bq/dCBi4buLO1xuIgorImLhuqFuIGPhuqduIHBo4bqjaSBjaOG7iSDEkeG7i25oIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MzkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorIkvDrWNoIGPhu6EgY+G7p2EgdGhp4bq/dCBi4buLIMSRxrDhu6NjIHRow7RuZyBiw6FvIGzDoCBz4buRIGtow7RuZy5cbiIKKyJcdFBow6JuIHbDuW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIMSRxrBhIHJhLFxuIgorIlx0aG/hurdjIGLhuqNuZyBwaMOibiB2w7luZyBraMO0bmcgxJHGsOG7o2MgxJHhu41jIGzhuqFpXG4iCisiXHRzYXUga2hpIGNo4bqheSB0aeG6v24gdHLDrG5oIGZkaXNrLFxuIgorIlx0ZG8gcGjDom4gdsO5bmcgxJHDoyBz4butYSDEkeG7lWkgxJFhbmcgYuG6rW4gdsOgIMSRYW5nIMSRxrDhu6NjIGTDuW5nLlxuIgorIkPDsyBs4bq9IGLhuqFuIGPhuqduIHBo4bqjaSBraOG7n2kgxJHhu5luZyBs4bqhaSBtw6F5IMSR4buDIMSR4buNYyBs4bqhaSBi4bqjbmcgcGjDom4gdsO5bmcuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY1NgorbXNnaWQgIkZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gYXBwYXJlbnQgZGV2aWNlIHNpemUuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGzhu5tuIGjGoW4ga8OtY2ggY+G7oSB0aGnhur90IGLhu4sgYmnhu4N1IGtp4bq/bi4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTY3NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZnMgdHlwZXMgbGlzdFxuIgorbXNnc3RyICJM4buXaSBwaMOibiB0w61jaCBkYW5oIHPDoWNoIGPDoWMga2nhu4N1IGjhu4cgdGjhu5FuZyB04bqtcCB0aW5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogU2l6ZSBvZiBkZXZpY2UgKDB4JWxseCBibG9ja3MpICVzIHRvbyBiaWcgdG8gYmUgZXhwcmVzc2VkXG4iCisiXHRpbiAzMiBiaXRzIHVzaW5nIGEgYmxvY2tzaXplIG9mICVkLlxuIgorbXNnc3RyICIiCisiJXM6IHRoaeG6v3QgYuG7iyAoMHglbGx4IGJsb2NrcykgJXMgY8OzIGvDrWNoIGPhu6EgcXXDoSBs4bubbiDEkeG7gyBiaeG7g3UgZGnhu4VuIHRoZW8gMzIgYml0XG4iCisiXHRkw7luZyBrw61jaCBj4buhIGto4buRaSBj4bunYSAlZC5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzQ2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiZnNfdHlwZXMgxJHhu4MgZ2nhuqNpIHF1eeG6v3QgbWtlMmZzLmNvbmY6ICIKKworIzogbWlzYy9ta2UyZnMuYzoxNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gZmVhdHVyZXMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIlTDrW5oIG7Eg25nIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHLDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpblxuIgorImLhuqNuIHPhu61hIMSR4buVaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc2MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorIlTDrW5oIG7Eg25nIHNpw6p1IGto4buRaSB0aMawYSB0aOG7m3Qga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6NcbiIKKyJ0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIGLhuqNuIHPhu61hIMSR4buVaSAwXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFscyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgbmjhuq10IGvDvSBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluXG4iCisiYuG6o24gc+G7rWEgxJHhu5VpIDBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgInBo4bqnbiB0csSDbSBraOG7kWkgxJHGsOG7o2MgZMOgbmggcmnDqm5nIGtow7RuZyBo4bujcCBs4buHIC0lbGYiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHJlc2l6ZV9pbm9kZSBhbmQgbWV0YV9iZyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuXG4iCisiVGhleSBjYW4gbm90IGJlIGJvdGggZW5hYmxlZCBzaW11bHRhbmVvdXNseS5cbiIKK21zZ3N0ciAiIgorIkhhaSB0w61uaCBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIG7DunQgKHJlc2l6ZV9pbm9kZSkgdsOgIHNpw6p1IG7hu4FuIChtZXRhX2JnKSBraMO0bmcgdMawxqFuZyB0aMOtY2ggduG7m2kgbmhhdS5cbiIKKyJEbyDEkcOzIGtow7RuZyB0aOG7gyBoaeG7h3UgbOG7sWMgxJHhu5NuZyB0aOG7nWkgY+G6oyBoYWkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTgxOQorbXNnaWQgIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgaGFyZHdhcmUgc2VjdG9yIHNpemUiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSBxdXnhur90IMSR4buLbmgga8OtY2ggY+G7oSBj4bunYSByw6NuaCBnaGkgcGjhuqduIGPhu6luZyIKKworIzogbWlzYy9ta2UyZnMuYzoxODI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIHF1eeG6v3QgxJHhu4tuaCBrw61jaCBj4buhIGPhu6dhIHLDo25oIGdoaSB24bqtdCBsw70iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg1OAorbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2tzaXplOyB0b28gc21hbGwgZm9yIGRldmljZVxuIgorbXNnc3RyICJ0cm9uZyBraGkgbOG6rXAga8OtY2ggY+G7oSBraOG7kWkgOyBxdcOhIG5o4buPIMSR4buRaSB24bubaSB0aGnhur90IGLhu4tcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBrw61jaCBj4buhIGto4buRaSAlZCDEkcOjIGdoaSByw7UgduG6q24gbmjhu48gaMahbiBrw61jaCBj4buhIHLDo25oIGdoaSB24bqtdCBsw70gY+G7p2EgdGhp4bq/dCBi4buLICVkXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4MQorbXNnaWQgIlRoZSBjbHVzdGVyIHNpemUgbWF5IG5vdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUuXG4iCittc2dzdHIgIkvDrWNoIHRoxrDhu5tjIGxpw6puIGN1bmcga2jDtG5nIHRo4buDIG5o4buPIGjGoW4ga8OtY2ggY+G7oSBraOG7kWkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4NworbXNnaWQgInNwZWNpZnlpbmcgYSBjbHVzdGVyIHNpemUgcmVxdWlyZXMgdGhlIGJpZ2FsbG9jIGZlYXR1cmUiCittc2dzdHIgImNo4buJIMSR4buLbmgga8OtY2ggdGjGsOG7m2MgbGnDqm4gY3VuZyBj4bqnbiDEkeG6t2MgdMOtbmggYmlnYWxsb2MiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBVbmFibGUgdG8gZ2V0IGRldmljZSBnZW9tZXRyeSBmb3IgJXNcbiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IGtow7RuZyB0aOG7gyBs4bqleSBk4bqhbmcgaMOsbmggdGhp4bq/dCBi4buLIGNobyAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxpZ25tZW50IGlzIG9mZnNldCBieSAlbHUgYnl0ZXMuXG4iCittc2dzdHIgIktob+G6o25nIHPhuq9wIGjDoG5nICVzIGLhu4sgYsO5IHRoZW8gJWx1IGJ5dGUuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIG1heSByZXN1bHQgaW4gdmVyeSBwb29yIHBlcmZvcm1hbmNlLCAocmUpLXBhcnRpdGlvbmluZyBzdWdnZXN0ZWQuXG4iCittc2dzdHIgIlRyxrDhu51uZyBo4bujcCBuw6B5IGPDsyB0aOG7gyBnw6J5IHJhIGhp4buHdSBzdeG6pXQgcuG6pXQgeeG6v3UgdGjDrCBraHV5w6puIGLhuqFuIHBow6JuIHbDuW5nIChs4bqhaSkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTkzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlZC1ieXRlIGJsb2NrcyB0b28gYmlnIGZvciBzeXN0ZW0gKG1heCAlZCkiCittc2dzdHIgIkto4buRaSAlZC1ieXRlIHF1w6EgbOG7m24gxJHhu5FpIHbhu5tpIGjhu4cgdGjhu5FuZyAodOG7kWkgxJFhICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6ICVkLWJ5dGUgYmxvY2tzIHRvbyBiaWcgZm9yIHN5c3RlbSAobWF4ICVkKSwgZm9yY2VkIHRvIGNvbnRpbnVlXG4iCittc2dzdHIgIiIKKyJD4bqjbmggYsOhbzoga2jhu5FpICVkLWJ5dGUgcXXDoSBs4bubbiDEkeG7kWkgduG7m2kgaOG7hyB0aOG7kW5nICh04buRaSDEkWEgJWQpXG4iCisibsOqbiBi4buLIGJ14buZYyB0aeG6v3AgdOG7pWNcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTY4Cittc2dpZCAiQ2FuJ3Qgc3VwcG9ydCBiaWdhbGxvYyBmZWF0dXJlIHdpdGhvdXQgZXh0ZW50cyBmZWF0dXJlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgaOG7lyB0cuG7oyDEkeG6t2MgdMOtbmggYmlnYWxsb2MgbcOgIGtow7RuZyBjw7MgcGjhuqduIG3hu58gIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IHRoZSBiaWdhbGxvYyBmZWF0dXJlIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50XG4iCisiU2VlIGh0dHBzOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0JpZ2FsbG9jIGZvciBtb3JlIGluZm9ybWF0aW9uXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogxJHhurdjIHTDrW5oIHBow6JuLWLhu5UtbOG7m24gduG6q24gxJFhbmcgdHJvbmcgcXXDoSB0csOsbmggcGjDoXQgdHJp4buDblxuIgorIlhlbSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9CaWdhbGxvYyDEkeG7gyBiaeG6v3QgY2hpIHRp4bq/dFxuIgorIlxuIgorCisjOiBtaXNjL21rZTJmcy5jOjE5ODIgbWlzYy90dW5lMmZzLmM6NzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiB0aGUgcXVvdGEgZmVhdHVyZSBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudFxuIgorIlNlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIgorIlxuIgorbXNnc3RyICIiCisiXG4iCisiQ+G6o25oIGLDoW86IMSR4bq3YyB0w61uaCBo4bqhbiBuZ+G6oWNoIHbhuqtuIMSRYW5nIHRyb25nIHF1w6EgdHLDrG5oIHBow6F0IHRyaeG7g25cbiIKKyJYZW0gaHR0cHM6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVvdGEgxJHhu4MgYmnhur90IGNoaSB0aeG6v3RcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTkzCittc2dpZCAicmVzZXJ2ZWQgb25saW5lIHJlc2l6ZSBibG9ja3Mgbm90IHN1cHBvcnRlZCBvbiBub24tc3BhcnNlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJraOG7kWkgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0cuG7sWMgdHV54bq/biDEkcaw4bujYyBkw6BuaCByacOqbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6NcbiIKKyJ0csOqbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyB0aMawYSB0aOG7m3QiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjAwMgorbXNnaWQgImJsb2NrcyBwZXIgZ3JvdXAgY291bnQgb3V0IG9mIHJhbmdlIgorbXNnc3RyICJz4buRIGto4buRaSB0csOqbiBt4buXaSBuaMOzbSDhu58gbmdvw6BpIHBo4bqhbSB2aSIKKworIzogbWlzYy9ta2UyZnMuYzoyMDI2Cittc2dpZCAiRmxleF9iZyBmZWF0dXJlIG5vdCBlbmFibGVkLCBzbyBmbGV4X2JnIHNpemUgbWF5IG5vdCBiZSBzcGVjaWZpZWQiCittc2dzdHIgIkNoxrBhIGhp4buHdSBs4buxYyB0w61uaCBuxINuZyBGbGV4X2JnIHRow6wga2jDtG5nIHRo4buDIGdoaSByw7Uga8OtY2ggY+G7oSBGbGV4X2JnIgorCisjOiBtaXNjL21rZTJmcy5jOjIwMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAia8OtY2ggY+G7oSBuw7p0IHRow7RuZyB0aW4ga2jDtG5nIGjhu6NwIGzhu4cgJWQgKHRoaeG7g3UgJWQvxJFhICVkKSIKKworIzogbWlzYy9ta2UyZnMuYzoyMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHJhaXNlIGlub2RlIHJhdGlvPyIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IG7DunQgdGjDtG5nIHRpbiAoJWxsdSksIHTEg25nIHThu7cgbOG7hyBuw7p0IHRow7RuZyB0aW4ga2jDtG5nPyIKKworIzogbWlzYy9ta2UyZnMuYzoyMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IGlub2RlcyAoJWxsdSksIHNwZWNpZnkgPCAyXjMyIGlub2RlcyIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IG7DunQgdGjDtG5nIHRpbiAoJWxsdSksIGNo4buJIHJhIDwywrPCsiBuw7p0IHRow7RuZyB0aW4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjA3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5vZGVfc2l6ZSAoJXUpICogaW5vZGVzX2NvdW50ICgldSkgdG9vIGJpZyBmb3IgYVxuIgorIlx0ZmlsZXN5c3RlbSB3aXRoICVsbHUgYmxvY2tzLCBzcGVjaWZ5IGhpZ2hlciBpbm9kZV9yYXRpbyAoLWkpXG4iCisiXHRvciBsb3dlciBpbm9kZSBjb3VudCAoLU4pLlxuIgorbXNnc3RyICIiCisiY+G7oV9uw7p0X3Row7RuZ190aW4gKCV1KSAqIHPhu5FfbMaw4bujbmdfbsO6dF90aMO0bmdfdGluICgldSkgcXXDoSBs4bubblxuIgorIlx0Y2hvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzICVsbHUga2jhu5FpLCBow6N5IGNo4buJIMSR4buLbmhcbiIKKyJcdHThu7dfbOG7h19uw7p0X3Row7RuZ190aW4gKC1pKSBjYW8gaMahbiBoYXkgc+G7kSBsxrDhu6NuZyBuw7p0IHRow7RuZyB0aW5cbiIKKyIoLU4pIHRo4bqlcCBoxqFuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiT3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbTsgdGhpcyBjYW4gYmUgdW5kb25lIHVzaW5nIHRoZSBjb21tYW5kOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIsSQYW5nIGdoaSDEkcOoIGzDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIGPDsyA7IGPDsyB0aOG7gyBsw6BtIHZp4buHYyBuw6B5IGTDuW5nIGPDonUgbOG7h25oOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjEwCittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHNldHVwIHVuZG8gZmlsZVxuIgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gY8OgaSDEkeG6t3QgdOG6rXAgdGluIHVuZG9cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjM2Cittc2dpZCAiRGlzY2FyZGluZyBkZXZpY2UgYmxvY2tzOiAiCittc2dzdHIgIkLhu48gcXVhIGto4buRaSB0aGnhur90IGLhu4s6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyMjUyCittc2dpZCAiZmFpbGVkIC0gIgorbXNnc3RyICJn4bq3cCBs4buXaSAtICIKKworIyBJdGVtIGluIHRoZSBtYWluIG1lbnUgdG8gc2VsZWN0IHRoaXMgcGFja2FnZQorIzogbWlzYy9ta2UyZnMuYzoyMzYwCittc2dpZCAid2hpbGUgc2V0dGluZyB1cCBzdXBlcmJsb2NrIgorbXNnc3RyICJ0cm9uZyBraGkgdGhp4bq/dCBs4bqtcCBzacOqdSBraOG7kWkiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjYXJkIHN1Y2NlZWRlZCBhbmQgd2lsbCByZXR1cm4gMHMgIC0gc2tpcHBpbmcgaW5vZGUgdGFibGUgd2lwZVxuIgorbXNnc3RyICJMb+G6oWkgYuG7jyB0aMOgbmggY8O0bmcgdsOgIHPhur0gdHLhuqMgduG7gSAwIC0gYuG7jyBxdWEgeG/DoSBi4bqjbmcgbsO6dFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjI0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcyAtICVzIgorbXNnc3RyICJo4buHIMSRaeG7gXUgaMOgbmggbOG6oSDigJQgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogIgorbXNnc3RyICJQaMOibiBi4buVIGLhuqNuZyBuaMOzbTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MDgKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gYWxsb2NhdGUgZmlsZXN5c3RlbSB0YWJsZXMiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSBj4bqlcCBwaMOhdCBjw6FjIGLhuqNuZyBo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MTcKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSBjb252ZXJ0aW5nIHN1YmNsdXN0ZXIgYml0bWFwIgorbXNnc3RyICIiCisiXG4iCisiXHR0cm9uZyBraGkgY2h1eeG7g24gxJHhu5VpIG3huqNuZyDhuqNuaCBsacOqbiBjdW5nIGNvbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAidHJvbmcga2hpIMSRaeG7gW4gc+G7kSBraMO0bmcga2jhu5FpICVsbHUgdOG6oWkga+G6v3QgdGjDumMgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTczCittc2dpZCAid2hpbGUgcmVzZXJ2aW5nIGJsb2NrcyBmb3Igb25saW5lIHJlc2l6ZSIKK21zZ3N0ciAidHJvbmcga2hpIGTDoG5oIHJpw6puZyBjw6FjIGto4buRaSDEkeG7gyB0aGF5IMSR4buVaSBrw61jaCBj4buhIHRy4buxYyB0dXnhur9uIgorCisjOiBtaXNjL21rZTJmcy5jOjI1ODQgbWlzYy90dW5lMmZzLmM6NjQ1Cittc2dpZCAiam91cm5hbCIKK21zZ3N0ciAibmjhuq10IGvDvSIKKworIzogbWlzYy9ta2UyZnMuYzoyNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBqb3VybmFsIHRvIGRldmljZSAlczogIgorbXNnc3RyICLEkGFuZyB0aMOqbSBuaOG6rXQga8O9IHbDoG8gdGhp4bq/dCBi4buLICVzOiAiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gYWRkIGpvdXJuYWwgdG8gZGV2aWNlICVzIgorbXNnc3RyICIiCisiXG4iCisidHJvbmcga2hpIHRo4butIHRow6ptIG5o4bqtdCBrw70gdsOgbyB0aGnhur90IGLhu4sgJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYwOCBtaXNjL21rZTJmcy5jOjI2NDAgbWlzYy90dW5lMmZzLmM6Njc0IG1pc2MvdHVuZTJmcy5jOjY4OAorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lXG4iCittc2dzdHIgImhvw6BuIHThuqV0XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyBqb3VybmFsIGNyZWF0aW9uIGluIHN1cGVyLW9ubHkgbW9kZVxuIgorbXNnc3RyICLEkGFuZyBi4buPIHF1YSBixrDhu5tjIHThuqFvIG5o4bqtdCBrw70gdHJvbmcgY2jhur8gxJHhu5kgY2jhu4kgc2nDqnVcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAixJBhbmcgdOG6oW8gbmjhuq10IGvDvSAoJXUga2jhu5FpKTogIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MzYKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKyJcbiIKKyJ0cm9uZyBraGkgdGjhu60gdOG6oW8gbmjhuq10IGvDvSIKKworIzogbWlzYy9ta2UyZnMuYzoyNjQ3IG1pc2MvdHVuZTJmcy5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorIlxuIgorIkzhu5dpIGtoaSBi4bqtdCDEkeG6t2MgdMOtbmggYuG6o28gduG7hyDEkWEgZ+G6r24iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY1MgorIywgYy1mb3JtYXQKK21zZ2lkICJNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgJWQgc2Vjb25kcy5cbiIKK21zZ3N0ciAiQuG6o28gduG7hyDEkWEgZ+G6r24gxJHGsOG7o2MgYuG6rXQgduG7m2kgbmjhu4twIGPhuq1wIG5o4bqtdCBsw6AgJWQgZ2nDonkuXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIKK21zZ3N0ciAixJBhbmcgZ2hpIHNpw6p1IGto4buRaSB2w6AgdGjDtG5nIHRpbiBr4bq/IHRvw6FuIGjhu4cgdGjhu5FuZyB04bqtcCB0aW46ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nLCBoYWQgdHJvdWJsZSB3cml0aW5nIG91dCBzdXBlcmJsb2Nrcy4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogZ+G6t3Aga2jDsyBraMSDbiB0cm9uZyB2aeG7h2MgZ2hpIHJhIGPDoWMgc2nDqnUga2jhu5FpLiIKKworIzogbWlzYy9ta2UyZnMuYzoyNjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkb25lXG4iCisiXG4iCittc2dzdHIgIiIKKyJob8OgbiB04bqldFxuIgorIlxuIgorCisjOiBtaXNjL21rbG9zdCtmb3VuZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBta2xvc3QrZm91bmRcbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIkPDoWNoIGTDuW5nOiAgJXMgdGhp4bq/dCBi4buLLi4uXG4iCisiXG4iCisiSW4gcmEgdGjDtG5nIHRpbiB24buBIHBow6JuIHbDuW5nIMSR4buRaSB24bubaSBt4buXaSB0aGnhur90IGLhu4sgxJHGsOG7o2MgY2hvLlxuIgorIlbDrSBk4bulOiAlcyAvZGV2L2hkYVxuIgorIlxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGdlb21ldHJ5IG9mICVzOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IGThuqFuZyBow6xuaCBj4bunYSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkga8OtY2ggY+G7oSBj4bunYSAlczogJXMiCisKKyM6IG1pc2MvcGFydGluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaD0lM2Qgcz0lM2QgYz0lNGQgICBzdGFydD0lOGQgc2l6ZT0lOGx1IGVuZD0lOGRcbiIKK21zZ3N0ciAiJXM6IGg9JTNkIHM9JTNkIGM9JTRkICAgxJHhuqd1PSU4ZCBj4buhPSU4bHUgY3Xhu5FpPSU4ZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDcKK21zZ2lkICJQbGVhc2UgcnVuIGUyZnNjayBvbiB0aGUgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiSMOjeSBjaOG6oXkgdGnhur9uIHRyw6xuaCBlMmZzY2sgdHLDqm4gaOG7hyB0aOG7kW5nIHThuq1wIHRpbi5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jIG1heF9tb3VudHNfY291bnRdIFstZSBlcnJvcnNfYmVoYXZpb3JdIFstZyBncm91cF1cbiIKKyJcdFstaSBpbnRlcnZhbFtkfG18d11dIFstal0gWy1KIGpvdXJuYWxfb3B0aW9uc10gWy1sXVxuIgorIlx0Wy1tIHJlc2VydmVkX2Jsb2Nrc19wZXJjZW50XSBbLW8gW15dbW91bnRfb3B0aW9uc1ssLi4uXV0gWy1wIG1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKyJDw6FjaCBkw7luZzogJXMgWy1jIHPhu5FfxJHhur9tX2zhuq9wX3Thu5FpX8SRYV0gWy1lIOG7qW5nX3jhu61fbOG7l2ldIFstZyBuaMOzbV1cbiIKKyJcdFstaSBraG/huqNuZ1tkfG18d11dIFstal0gWy1KIHTDuXlfY2jhu41uX25o4bqtdF9rw71dIFstbF1cbiIKKyJcdFstbSBwaOG6p25fdHLEg21fa2jhu5FpX2TDoG5oX3Jpw6puZ10gWy1vIFteXXTDuXlfY2jhu41uX2zhuq9wWywuLi5dXSBbLXAgbmjhu4twX2Phuq1wX25o4bqtdF9tbXBdXG4iCisiXHRbLXIgc+G7kV/EkeG6v21fa2jhu5FpX2TDoG5oX3Jpw6puZ10gWy11IG5nxrDhu51pX2TDuW5nXSBbLUMgc+G7kV/EkeG6v21fbOG6r3BdIFstTCBuaMOjbl9waMOibl92w7luZ11cbiIKKyJcdFstTSB0aMawX23hu6VjX2zhuq9wX2N14buRaV0gWy1PIFteXXTDrW5oX27Eg25nWywuLi5dXVxuIgorIlx0Wy1FIHTDuXlfY2jhu41uX23hu59fcuG7mW5nWywuLi5dIFstVCBnaeG7nV9raeG7g21fdHJhX2N14buRaV0gWy1VIFVVSURdXG4iCisiXHRbLWwgY+G7oV9uw7p0X23hu5tpXSB0aGnhur90X2Lhu4tcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIG3hu58gbmjhuq10IGvDvSBiw6puIG5nb8OgaSIKKworIzogbWlzYy90dW5lMmZzLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBraMO0bmcgcGjhuqNpIHRoaeG6v3QgYuG7iyBuaOG6rXQga8O9LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjkKK21zZ2lkICJKb3VybmFsIHN1cGVyYmxvY2sgbm90IGZvdW5kIVxuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgc2nDqnUga2jhu5FpIG5o4bqtdCBrw70gIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNDAKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBVVUlEIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gdHLDqm4gdGhp4bq/dCBi4buLIG5o4bqtdCBrw70uXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjI2MQorbXNnaWQgIiIKKyJDYW5ub3QgbG9jYXRlIGpvdXJuYWwgZGV2aWNlLiBJdCB3YXMgTk9UIHJlbW92ZWRcbiIKKyJVc2UgLWYgb3B0aW9uIHRvIHJlbW92ZSBtaXNzaW5nIGpvdXJuYWwgZGV2aWNlLlxuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIMSR4buLbmggxJHGsOG7o2MgdGhp4bq/dCBi4buLIGpvdXJuYWwuIE7DsyDEkcOjIEtIw5RORyBi4buLIGfhu6EgYuG7j1xuIgorIlPhu60gZOG7pW5nIHR14buzIGNo4buNbiAtZiDEkeG7gyBn4buhIGLhu48gdGhp4bq/dCBi4buLIGpvdXJuYWwgYuG7iyB0aGnhur91LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyNjkKK21zZ2lkICJKb3VybmFsIHJlbW92ZWRcbiIKK21zZ3N0ciAiTmjhuq10IGvDvSDEkcOjIGfhu6EgYuG7j1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMTMKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgInRyb25nIGtoaSDEkeG7jWMgY8OhYyBt4bqjbmcg4bqjbmgiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyMQorbXNnaWQgIndoaWxlIGNsZWFyaW5nIGpvdXJuYWwgaW5vZGUiCittc2dzdHIgInRyb25nIGtoaSB4b8OhIHPhuqFjaCBuw7p0IHRow7RuZyB0aW4gbmjhuq10IGvDvSIKKworIzogbWlzYy90dW5lMmZzLmM6MzMyCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICJ0cm9uZyBraGkgZ2hpIG7DunQgdGjDtG5nIHRpbiBuaOG6rXQga8O9IgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIih2w6Aga2jhu59pIMSR4buZbmcgbOG6oWkgc2F1ISlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyaW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlTDrW5oIG7Eg25nIHhvw6Egc+G6oWNoIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4g4oCcJXPigJ0ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGZpbGVzeXN0ZW0gZmVhdHVyZSAnJXMnIG5vdCBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIlTDrW5oIG7Eg25nIMSR4bq3dCBo4buHIHRo4buRbmcgdOG6rXAgdGluIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MTYKK21zZ2lkICIiCisiVGhlIGhhc19qb3VybmFsIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisiVMOtbmggbsSDbmcgY8OzIG5o4bqtdCBrw70gKGhhc19qb3VybmFsKSBjw7MgdGjhu4MgxJHGsOG7o2MgeG/DoSBz4bqhY2hcbiIKKyJjaOG7iSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcaw4bujYyB0aMOhbyBn4bqvbiBr4bq/dFxuIgorImhheSDEkcaw4bujYyBn4bqvbiBr4bq/dCBt4buZdCBjw6FjaCBjaOG7iSDEkeG7jWMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQyNAorbXNnaWQgIiIKKyJUaGUgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQuICBQbGVhc2UgcnVuIGUyZnNjayBiZWZvcmUgY2xlYXJpbmdcbiIKKyJ0aGUgaGFzX2pvdXJuYWwgZmxhZy5cbiIKK21zZ3N0ciAiIgorIsSQ4bq3dCBj4budIGPhuqduIHRoaeG6v3QgcGjhu6VjIGjhu5NpIChuZWVkc19yZWNvdmVyeSkuXG4iCisiSMOjeSBjaOG6oXkgdGnhur9uIHRyw6xuaCBlMmZzY2sgdHLGsOG7m2Mga2hpIHhvw6Egc+G6oWNoIGPhu50gY8OzIG5o4bqtdCBrw70gKGhhc19qb3VybmFsKS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDQzCittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2FuJ3RcbiIKKyJiZSBzZXQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBvclxuIgorInJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIlTDrW5oIG7Eg25nIGLhuqNvIHbhu4cgY2jhu5FuZyDEkWEgZ+G6r24ga2jDtG5nIHRo4buDXG4iCisixJHhurd0IMSRxrDhu6NjIG7hur91IGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyBn4bqvbiBr4bq/dFxuIgorImhheSBjaOG7iSBjaG8gxJHhu41jLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkcy5cbiIKK21zZ3N0ciAixJDhurdjIHTDrW5oIGvhu7kgdGh14bqtdCBi4bqjbyB24buHIMSRYSBn4bqvbiDEkcOjIGLhuq10IHbhu5tpIG5o4buLcCBj4bqtcCBuaOG6rXQgbMOgICVkIGdpw6J5LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0NzAKK21zZ2lkICIiCisiVGhlIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gZmVhdHVyZSBjYW5ub3RcbiIKKyJiZSBkaXNhYmxlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkb25seS5cbiIKK21zZ3N0ciAiIgorIsSQ4bq3YyB0w61uaCBr4bu5IHRodeG6rXQgYuG6o28gduG7hyDEkWEgZ+G6r24ga2jDtG5nIHRo4buDXG4iCisixJHGsOG7o2MgdOG6r3QgbuG6v3UgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBjaOG7iSDEkeG7jWMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ3OAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIG3huqNuZ1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFnaWMgbnVtYmVyIGluIE1NUCBibG9jayBkb2VzIG5vdCBtYXRjaC4gZXhwZWN0ZWQ6ICV4LCBhY3R1YWw6ICV4XG4iCittc2dzdHIgIlPhu5EgbeG6p3Ugbmhp4buHbSB0cm9uZyBraOG7kWkgTU1QIGtow7RuZyBraOG7m3AuIG1vbmcgY2jhu506ICV4LCB0aOG7sWMgdOG6vzogJXhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NDkyCittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICJ0cm9uZyBraGkgxJHhu41jIGto4buRaSBNTVAuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MjQKK21zZ2lkICIiCisiQ2xlYXJpbmcgdGhlIGZsZXhfYmcgZmxhZyB3b3VsZCBjYXVzZSB0aGUgdGhlIGZpbGVzeXN0ZW0gdG8gYmVcbiIKKyJpbmNvbnNpc3RlbnQuXG4iCittc2dzdHIgIkfhu6EgYuG7jyBj4budIGZsZXhfYmcgdGjDrCBnw6J5IHJhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIHRo4buRbmcgbmjhuqV0LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo1MzUKK21zZ2lkICIiCisiVGhlIGh1Z2VfZmlsZSBmZWF0dXJlIG1heSBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpc1xuIgorInVubW91bnRlZCBvciBtb3VudGVkIHJlYWQtb25seS5cbiIKK21zZ3N0ciAiIgorIlTDrW5oIG7Eg25nIHThuq1wIHRpbiBy4bqldCBs4bubbiAoaHVnZV9maWxlKSBjw7MgdGjhu4MgxJHGsOG7o2MgeG/DoSBz4bqhY2hcbiIKKyJjaOG7iSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcaw4bujYyB0aMOhbyBn4bqvbiBr4bq/dFxuIgorImhheSDEkcaw4bujYyBn4bqvbiBr4bq/dCBt4buZdCBjw6FjaCBjaOG7iSDEkeG7jWMuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5NQorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJD4bqjbmggYsOhbzogdHXhu7MgY2jhu41uIOKAnF5xdW90YeKAnSBz4bq9IGTDqCBsw6puIMSR4buRaSBz4buRIOKAnC1R4oCdLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBhIGpvdXJuYWwuXG4iCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gxJHDoyBjw7Mgbmjhuq10IGvDvS5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBvcGVuIGpvdXJuYWwgb24gJXNcbiIKK21zZ3N0ciAiIgorIlxuIgorInRyb25nIGtoaSB0aOG7rSBt4bufIG5o4bqtdCBrw70gdHLDqm4gJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIsSQYW5nIHThuqFvIG5o4bqtdCBrw70gdHLDqm4gdGhp4bq/dCBi4buLICVzOiAiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgZmlsZXN5c3RlbSB0byBqb3VybmFsIG9uICVzIgorbXNnc3RyICJ0cm9uZyBraGkgdGjDqm0gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB2w6BvIG5o4bqtdCBrw70gdHLDqm4gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY3NgorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgaW5vZGU6ICIKK21zZ3N0ciAixJBhbmcgdOG6oW8gbsO6dCB0aMO0bmcgdGluIG5o4bqtdCBrw706ICIKKworIzogbWlzYy90dW5lMmZzLmM6Njg1Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBqb3VybmFsIGZpbGUiCittc2dzdHIgIiIKKyJcbiIKKyJ0cm9uZyBraGkgdGjhu60gdOG6oW8gdOG6rXAgdGluIG5o4bqtdCBrw70iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB0byBwYXJzZSBxdW90YSBvcHRpb25zIVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myDEkeG7gyBwaMOibiB0w6FjaCBjw6FjIHTDuXkgY2jhu41uIGjhuqFuIG5n4bqhY2ghXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4NQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggY29tbWEpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLEkMOjIGNo4buJIMSR4buLbmggdHXhu7MgY2jhu41uIGjhuqFuIG5n4bqhY2ggc2FpLlxuIgorIlxuIgorIlNhdSDEkcOieSBsw6AgZGFuaCBzw6FjaCBjw6FjIHR14buzIGNo4buNbiBo4bqhbiBuZ+G6oWNoIMSRxrDhu6NjIGTDuW5nIChjaOG6pXAgbmjhuq1uIG5nxINuIGPDoWNoIGLhurFuZyBk4bqldSBwaOG6qXkpOlxuIgorIlx0W15ddXNycXVvdGFcbiIKKyJcdFteXWdycHF1b3RhXG4iCisiXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDoWNoIHRvw6FuIHThu60gbmfDoHkvZ2nhu506ICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAic+G7kSDEkeG6v20gZ+G6r24gc2FpIOKAlCAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBlcnJvciBiZWhhdmlvciAtICVzIgorbXNnc3RyICLhu6luZyB44butIGzhu5dpIHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZ2lkL2dyb3VwIG5hbWUgLSAlcyIKK21zZ3N0ciAiR0lEL3TDqm4gbmjDs20gc2FpIOKAlCAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICJzYWkgbmjhu4twIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAidOG7tyBs4buHIGto4buRaSBkw6BuaCByacOqbmcgc2FpIOKAlCAlcyIKKworIzogbWlzYy90dW5lMmZzLmM6MTAwMworbXNnaWQgIi1vIG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICJjw7MgdGjhu4MgxJHGsGEgcmEgdMO5eSBjaOG7jW4g4oCcLW/igJ0gY2jhu4kgbeG7mXQgbOG6p24iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwMTIKK21zZ2lkICItTyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiY8OzIHRo4buDIMSRxrBhIHJhIHTDuXkgY2jhu41uIOKAnC1P4oCdIGNo4buJIG3hu5l0IGzhuqduIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAic+G7kSDEkeG6v20ga2jhu5FpIGTDoG5oIHJpw6puZyBzYWkg4oCUICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIlVJRC90w6puIG5nxrDhu51pIGTDuW5nIHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAia8OtY2ggY+G7oSBuw7p0IHNhaSDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5vZGUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLSAlcyIKK21zZ3N0ciAiS8OtY2ggY+G7oSBuw7p0IHBo4bqjaSBsw6AgbMWpeSB0aOG7q2EgMiDigJQgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAibW1wX3VwZGF0ZV9pbnRlcnZhbCB0b28gYmlnOiAlbHVcbiIKK21zZ3N0ciAibW1wX3VwZGF0ZV9pbnRlcnZhbCBxdcOhIGzhu5tuICglbHUpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjExNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIHVwZGF0ZSBpbnRlcnZhbCB0byAlbHUgc2Vjb25kXG4iCittc2dpZF9wbHVyYWwgIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAixJBhbmcgxJHhurd0IGtob+G6o25nIHRo4budaSBnaWFuIGPhuq1wIG5o4bqtdCBi4bqjbyB24buHIGNo4buRbmcgxJFhIGzhuq9wIHRow6BuaCAlbHUgZ2nDonlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIFJBSUQgc3RyaWRlOiAlc1xuIgorbXNnc3RyICJUaGFtIHPhu5Egc3RyaWRlIFJBSUQga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlwZS13aWR0aDogJXNcbiIKK21zZ3N0ciAiVGhhbSBz4buRIGNoaeG7gXUgcuG7mW5nIHPhu41jIChzdHJpcGUtd2lkdGgpIFJBSUQga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBoYXNoIGFsZ29yaXRobTogJXNcbiIKK21zZ3N0ciAiVGh14bqtdCB0b8OhbiB04bqhbyBt4bqrdSBkdXkgbmjhuqV0IHbhuqtuIGtow7RuZyBo4bujcCBs4buHOiAlc1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZGVmYXVsdCBoYXNoIGFsZ29yaXRobSB0byAlcyAoJWQpXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCB0aHXhuq10IHRvw6FuIHThuqFvIG3huqt1IGR1eSBuaOG6pXQgdGjDoG5oICVzICglZClcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTI1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkV4dGVuZGVkIG9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMsIGFuZCBtYXkgdGFrZSBhbiBhcmd1bWVudCB3aGljaFxuIgorIlx0aXMgc2V0IG9mZiBieSBhbiBlcXVhbHMgKCc9Jykgc2lnbi5cbiIKKyJcbiIKKyJWYWxpZCBleHRlbmRlZCBvcHRpb25zIGFyZTpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PGhhc2ggYWxnb3JpdGhtPlxuIgorIlx0bW91bnRfb3B0cz08ZXh0ZW5kZWQgZGVmYXVsdCBtb3VudCBvcHRpb25zPlxuIgorIlx0c3RyaWRlPTxSQUlEIHBlci1kaXNrIGNodW5rIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0c3RyaXBlX3dpZHRoPTxSQUlEIHN0cmlkZSpkYXRhIGRpc2tzIGluIGJsb2Nrcz5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCittc2dzdHIgIiIKKyJcbiIKKyJDaOG7iSDEkeG7i25oIHTDuXkgY2jhu41uIHNhaS5cbiIKKyJcbiIKKyJDw6FjIHTDuXkgY2jhu41uIG3hu58gcuG7mW5nIMSR4buLbmggZ2nhu5tpIGLhurFuZyBk4bqldSBwaOG6qXksIGPDsyB0aOG7gyBjaOG6pXAgbmjhuq1uXG4iCisiXHTEkeG7kWkgc+G7kSDEkcaw4bujYyBnw6FuIHbhu5tpIGThuqV1IGLhurFuZyDigJw94oCdLlxuIgorIlxuIgorIlTDuXkgY2jhu41uIMSRw6MgbeG7nyBy4buZbmcgaOG7o3AgbOG7hzpcbiIKKyJcdGNsZWFyX21tcFxuIgorIlx0aGFzaF9hbGc9PHRodeG6rXQgdG/DoW4gYsSDbT5cbiIKKyJcdG1vdW50X29wdHM9PGPDoWMgdHXhu7MgY2jhu41uIGfhuq9uIG3hurdjIMSR4buLbmggbeG7nyBy4buZbmc+XG4iCisiXHRzdHJpZGU9PFJBSUQgY2hvIG3hu5dpIGvDrWNoIGPhu6EgxJFv4bqhbiDEkcSpYSB0aGVvIGto4buRaT5cbiIKKyJcdHN0cmlwZS13aWR0aD08UkFJRCBzdHJpZGUqY8OhYyDEkcSpYSBk4buvIGxp4buHdSB0aGVvIGto4buRaT5cbiIKKyJcdHRlc3RfZnNcbiIKKyJcdF50ZXN0X2ZzXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjMKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBpbm9kZSBiaXRtYXBcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyDDoW5oIHjhuqEgaW5vZGVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTcyOAorbXNnaWQgIkZhaWxlZCB0byByZWFkIGJsb2NrIGJpdG1hcFxuIgorbXNnc3RyICJM4buXaSBraGkgxJHhu41jIG3huqNuZyBraOG7kWlcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc0NSByZXNpemUvcmVzaXplMmZzLmM6ODcwCittc2dpZCAiYmxvY2tzIHRvIGJlIG1vdmVkIgorbXNnc3RyICJraOG7kWkgY+G6p24gZGkgY2h1eeG7g24iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NDgKK21zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgYmxvY2sgYml0bWFwIHdoZW4gaW5jcmVhc2luZyBpbm9kZSBzaXplXG4iCittc2dzdHIgIkzhu5dpIGPhuqVwIHBow6F0IOG6o25oIG3huqNuZyBraOG7kWkga2hpIHTEg25nIGvDrWNoIGPhu6EgaW5vZGVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc1NAorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gaW5jcmVhc2UgaW5vZGUgc2l6ZSBcbiIKK21zZ3N0ciAiS2jDtG5nIMSR4bunIHPhu6ljIGNo4bupYSDEkeG7gyB0xINuZyBrw61jaCBj4buhIGlub2RlXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIkzhu5dpIMSR4buLbmggduG7iyBs4bqhaSBraOG7kWkgdHJvbmcga2hpIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgaW5vZGUgXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3OTEKK21zZ2lkICIiCisiRXJyb3IgaW4gcmVzaXppbmcgdGhlIGlub2RlIHNpemUuXG4iCisiUnVuIGUydW5kbyB0byB1bmRvIHRoZSBmaWxlIHN5c3RlbSBjaGFuZ2VzLiBcbiIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSB0aGF5IMSR4buVaSBrw61jaCBj4buhIG7DunQuXG4iCisiSMOjeSBjaOG6oXkgbOG7h25oIOKAnGUydW5kb+KAnSDEkeG7gyBo4buneSBjw6FjIGLGsOG7m2MgdGhheSDEkeG7lWkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbi4gXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MTgKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXAgcGjDoXQgYuG7mSBuaOG7myBjaG8gdMOqbiB04bqtcCB0aW4gdGRiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRlbGV0ZSAlcyIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIHhvw6EgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRvIHVuZG8gdGhlIHR1bmUyZnMgb3BlcmF0aW9uIHBsZWFzZSBydW4gdGhlIGNvbW1hbmRcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyLEkOG7gyBob8OgbiBs4bqhaSB0aGFvIHTDoWMgdHVuZTJmcywgaMOjeSBjaOG6oXkgY8OidSBs4buHbmhcbiIKKyIgICAgZTJ1bmRvICVzICVzXG4iCisiXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBibG9jayBtYWdpYyBpcyBiYWQuIFRyeSB0byBmaXggaXQgYnkgcnVubmluZzpcbiIKKyInZTJmc2NrIC1mICVzJ1xuIgorbXNnc3RyICIiCisiS2jhu5FpIG3DoHUgbmhp4buHbSBNTVAgc2FpLiBUaOG7rSBz4butYSBi4bqxbmcgY8OhY2ggY2jhuqF5IGzhu4duaDpcbiIKKyLigJxlMmZzY2sgLWYgJXPigJ1cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICJLw61jaCBj4buhIG7DunQgdGjDtG5nIHRpbiDEkcOjICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNocmlua2luZyB0aGUgaW5vZGUgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIktow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIHRodSBuaOG7jyBrw61jaCBj4buhIG7DunQgdGjDtG5nIHRpblxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxOTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgaW5vZGUgc2l6ZSAlbHUgKG1heCAlZClcbiIKK21zZ3N0ciAiS8OtY2ggY+G7oSBuw7p0IHRow7RuZyB0aW4ga2jDtG5nIGjhu6NwIGzhu4cgJWx1ICh04buRaSDEkWEgJWQpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBz4buRIMSR4bq/bSBs4bqvcCB04buRaSDEkWEgdGjDoG5oICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjdXJyZW50IG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBz4buRIMSR4bq/bSBs4bqvcCBoaeG7h24gdGjhu51pIHRow6BuaCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IOG7qW5nIHjhu60gbOG7l2kgdGjDoG5oICVkXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgZ2lkIHRvICVsdVxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgR0lEIGto4buRaSBkw6BuaCByacOqbmcgdGjDoG5oICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDE3CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVydmFsIGJldHdlZW4gY2hlY2tzIGlzIHRvbyBiaWcgKCVsdSkiCittc2dzdHIgImtob+G6o25nIGdp4buvYSBoYWkgbOG6p24ga2nhu4NtIHRyYSBxdcOhIGzhu5tuICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW50ZXJ2YWwgYmV0d2VlbiBjaGVja3MgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IGtob+G6o25nIGdp4buvYSBoYWkgbOG6p24ga2nhu4NtIHRyYSB0aMOgbmggJWx1IGdpw6J5XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgcGVyY2VudGFnZSB0byAlZyUlICglbGx1IGJsb2NrcylcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IHBo4bqnbiB0csSDbSBraOG7kWkgZOG7sSB0cuG7ryB0aMOgbmggJWclJSAoJWxsdSBraOG7kWkpXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICJz4buRIGzGsOG7o25nIGto4buRaSBk4buxIHRy4buvIHF1w6EgbOG7m24gKCVsbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IHPhu5EgbMaw4bujbmcga2jhu5FpIGThu7EgdHLhu68gdGjDoG5oICVsbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1MAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZmlsZXN5c3RlbSBhbHJlYWR5IGhhcyBzcGFyc2Ugc3VwZXJibG9ja3MuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJI4buHIHRo4buRbmcgdOG6rXAgdGluIMSRw6MgY8OzIHNpw6p1IGto4buRaSB0aMawYSB0aOG7m3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNwYXJzZSBzdXBlcmJsb2NrIGZsYWcgc2V0LiAgJXMiCittc2dzdHIgIiIKKyJcbiIKKyLEkOG6t3QgY+G7nSBzacOqdSBraOG7kWkgdGjGsGEgdGjhu5t0LiAgJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNjIKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlTDrW5oIG7Eg25nIHhvw6Egc+G6oWNoIHNpw6p1IGPhu50gc3BhcnNlIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgZ2nhu50ga2nhu4NtIHRyYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGzhuqduIGN14buRaSBjw7luZyB0aMOgbmggJXNcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHJlc2VydmVkIGJsb2NrcyB1aWQgdG8gJWx1XG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBVSUQga2jhu5FpIGTDoG5oIHJpw6puZyB0aMOgbmggJWx1XG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMDgKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIkzhu5dpIGtow7RuZyBz4butIGThu6VuZyBjbGVhcl9tbXAuIE7DsyBwaOG6o2kgxJHGsOG7o2Mgc+G7rSBk4bulbmcgY8O5bmcgduG7m2kgLWZcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEyNgorbXNnaWQgIlRoZSBxdW90YSBmZWF0dXJlIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIsSQ4bq3YyB0w61uaCBo4bqhbiBuZ+G6oWNoIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyB0aGF5IMSR4buVaSBraGkgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgZ+G6r24ga+G6v3QuXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTkKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIsSQ4buLbmggZOG6oW5nIFVVSUQga2jDtG5nIGjhu6NwIGzhu4dcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE3MgorbXNnaWQgIlRoZSBpbm9kZSBzaXplIG1heSBvbmx5IGJlIGNoYW5nZWQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyB1bm1vdW50ZWQuXG4iCittc2dzdHIgIkvDrWNoIGPhu6EgbsO6dCBjaOG7iSBjw7MgdGjhu4MgdGhheSDEkeG7lWkga2hpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4ga2jDtG5nIMSRxrDhu6NjIGfhuq9uIGvhur90LlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTgwCittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIkNo4bupYyBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIG7DunQgdGjDtG5nIHRpbiBraMO0bmcgcGjhuqNpIMSRxrDhu6NjIGjhu5cgdHLhu6MgxJHhu5FpIHbhu5tpIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gxJHDoyBi4bqtdCB0w61uaCBuxINuZyDigJxmbGV4X2Jn4oCdLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgaW5vZGUgc2l6ZSAlbHVcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IGvDrWNoIGPhu6EgbsO6dCAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiTOG7l2kgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY+G7p2EgbsO6dFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaWRlIHNpemUgdG8gJWRcbiIKK21zZ3N0ciAixJBhbmcgxJHhurd0IGvDrWNoIGPhu6Egc3RyaWRlIHRow6BuaCAlZFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMjEyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RyaXBlIHdpZHRoIHRvICVkXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCBjaGnhu4F1IHLhu5luZyBz4buNYyAoc3RyaXBlIHdpZHRoKSB0aMOgbmggJWRcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGV4dGVuZGVkIGRlZmF1bHQgbW91bnQgb3B0aW9ucyB0byAnJXMnXG4iCittc2dzdHIgIsSQYW5nIMSR4bq3dCB0deG7syBjaOG7jW4gZ+G6r24gbeG6t2MgxJHhu4tuaCBt4bufIHLhu5luZyB0aMOgbmgg4oCcJXPigJ1cbiIKKworIzogbWlzYy91dGlsLmM6NzQKK21zZ2lkICJQcm9jZWVkIGFueXdheT8gKHksbikgIgorbXNnc3RyICJW4bqrbiBjw7JuIHRp4bq/cCB04bulYyBraMO0bmc/IChjLGspIgorCisjOiBtaXNjL3V0aWwuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAlcyAtLS0gJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IGPDoWMgdGjDtG5nIHRpbiB24buBICVzIOKAlCAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKyJcbiIKKyJDw7MgduG6uyBsw6AgdGhp4bq/dCBi4buLIGtow7RuZyB04buTbiB04bqhaTsgYuG6oW4gY8OzIMSRxrBhIHJhIMSRw7puZyBjaMawYT9cbiIKKworIzogbWlzYy91dGlsLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlLlxuIgorbXNnc3RyICIlcyBraMO0bmcgcGjhuqNpIHRoaeG6v3QgYuG7iyDEkeG6t2MgYmnhu4d0IGto4buRaS5cbiIKKworIzogbWlzYy91dGlsLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGVudGlyZSBkZXZpY2UsIG5vdCBqdXN0IG9uZSBwYXJ0aXRpb24hXG4iCittc2dzdHIgIiVzIGzDoCB0b8OgbiBi4buZIHRoaeG6v3QgYuG7iywga2jDtG5nIHBo4bqjaSBjaOG7iSBt4buZdCBwaMOibiB2w7luZyAhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICJUaeG6v24gdHLDrG5oIG1rZTJmcyB24bqrbiBjw7JuIGLhu4sgw6lwIGJ14buZYy4gTW9uZyDigJwvZXRjL210YWLigJ0ga2jDtG5nIMSRw7puZy5cbiIKKworIzogbWlzYy91dGlsLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIndpbGwgbm90IG1ha2UgYSAlcyBoZXJlIVxuIgorbXNnc3RyICJz4bq9IGtow7RuZyBsw6BtICVzIOG7nyDEkcOieSAhXG4iCisKKyM6IG1pc2MvdXRpbC5jOjE2NgorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICJUaeG6v24gdHLDrG5oIG1rZTJmcyB24bqrbiBjw7JuIGLhu4sgw6lwIGJ14buZYy5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgxJHhu4MgcGjDom4gdMOhY2ggY8OhYyB0w7l5IGNo4buNbiBuaOG6rXQga8O9ICFcbiIKKworIzogbWlzYy91dGlsLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJDb3VsZCBub3QgZmluZCBqb3VybmFsIGRldmljZSBtYXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisiXG4iCisiS2jDtG5nIHTDrG0gdGjhuqV5IHRoaeG6v3QgYuG7iyBuaOG6rXQga8O9IHTGsMahbmcg4bupbmcgduG7m2kgJXNcbiIKKworIzogbWlzYy91dGlsLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIsSQxrBhIHJhIHTDuXkgY2jhu41uIG5o4bqtdCBrw70gc2FpLlxuIgorIlxuIgorIkPDoWMgdMO5eSBjaOG7jW4gbmjhuq10IGvDvSBjxaluZyDEkeG7i25oIGdp4bubaSBi4bqxbmcgZOG6pXUgcGjhuql5LCBjw7MgdGjhu4MgY2jhuqVwIG5o4bqtblxuIgorIsSR4buRaSBz4buRIMSRxrDhu6NjIG5n4bulIMO9IHbhu5tpIGThuqV1IGLhurFuZyDigJw94oCdLlxuIgorIlxuIgorIlTDuXkgY2jhu41uIG5o4bqtdCBrw70gaOG7o3AgbOG7hzpcbiIKKyJcdHNpemU9PGvDrWNoIGPhu6Egbmjhuq10IGvDvSB0aGVvIE1CPlxuIgorIlx0ZGV2aWNlPTx0aGnhur90IGLhu4sgbmjhuq10IGvDvT5cbiIKKyJcbiIKKyJLw61jaCBj4buhIGPhu6dhIG5o4bqtdCBrw70gcGjhuqNpIG7hurFtIHRyb25nIHBo4bqhbSB2aVxuIgorIjEwMjQgxJHhur9uIDEwMjQwMDAwIGto4buRaSBo4buHIHRo4buRbmcgdOG6rXAgdGluLlxuIgorIlxuIgorCisjOiBtaXNjL3V0aWwuYzoyNTgKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBxdcOhIG5o4buPIMSR4buRaSB24bubaSBuaOG6rXQga8O9XG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkvDrWNoIGPhu6Egbmjhuq10IGvDvSDEkcOjIHnDqnUgY+G6p3UgbMOgICVkIGto4buRaTtcbiIKKyJuw7MgcGjhuqNpIG7hurFtIHRyb25nIHBo4bqhbSB2aSAxMDI0IMSR4bq/biAxMDI0MDAwMCBraOG7kWlcbiIKKyJuw6puIGjhu6d5IGLhu48uXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI3MworbXNnaWQgIiIKKyJcbiIKKyJKb3VybmFsIHNpemUgdG9vIGJpZyBmb3IgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkvDrWNoIGPhu6Egbmjhuq10IGvDvSBxdcOhIGzhu5tuIMSR4buRaSB24bubaSBo4buHIHRo4buRbmcgdOG6rXAgdGluLlxuIgorCisjOiBtaXNjL3V0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgZmlsZXN5c3RlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hlY2tlZCBldmVyeSAlZCBtb3VudHMgb3JcbiIKKyIlZyBkYXlzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICBVc2UgdHVuZTJmcyAtYyBvciAtaSB0byBvdmVycmlkZS5cbiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbsOgeSBz4bq9IMSRxrDhu6NjIGtp4buDbSB0cmEgdOG7sSDEkeG7mW5nIG3hu5dpICVkIGzhuqduIGfhuq9uIGvhur90XG4iCisiaGF5IG3hu5dpICVnIG5nw6B5LCDEkWnhu4F1IG7DoG8geOG6o3kgcmEgdHLGsOG7m2MuIEjDo3kgZMO5bmcgdMO5eSBjaOG7jW5cbiIKKyLigJx0dW5lMmZzIC1j4oCdIGhheSDigJx0dW5lMmZzIC1p4oCdIMSR4buDIGdoaSDEkcOoIGzDqm4gbsOzLlxuIgorCisjOiBtaXNjL3V1aWRkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstZF0gWy1wIHBpZGZpbGVdIFstcyBzb2NrZXRwYXRoXSBbLVQgdGltZW91dF1cbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIFstZF0gWy1wIHThuq1wX3Rpbl9QSURdIFstcyDEkcaw4budbmdfZOG6q25f4buVX2Phuq9tXSBbLVQgdGjhu51pX2jhuqFuXVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKK21zZ3N0ciAiICAgICAgICVzIFstcnx0XSBbLW4gbnVtXSBbLXMgc29ja2V0cGF0aF1cbiIKKworIzogbWlzYy91dWlkZC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIgICAgICAgJXMgLWtcbiIKKworIzogbWlzYy91dWlkZC5jOjE1NAorbXNnaWQgImJhZCBhcmd1bWVudHMiCittc2dzdHIgIsSR4buRaSBz4buRIHNhaSIKKworIzogbWlzYy91dWlkZC5jOjE3MgorbXNnaWQgImNvbm5lY3QiCittc2dzdHIgImvhur90IG7hu5FpIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgImdoaSIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgInPhu5EgbOG6p24gxJHhu41jIgorCisjOiBtaXNjL3V1aWRkLmM6MjA1Cittc2dpZCAiYmFkIHJlc3BvbnNlIGxlbmd0aCIKK21zZ3N0ciAixJDhu5kgZMOgaSB0cuG6oyB24buBIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBtaXNjL3V1aWRkLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgInV1aWRkIGRhZW1vbiBhbHJlYWR5IHJ1bm5pbmcgYXQgcGlkICVzXG4iCittc2dzdHIgInV1aWRkIGRhZW1vbiDEkcOjIGNo4bqheSBz4bq1biBy4buTaSB04bqhaSBwaWQgJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjcmVhdGUgdW5peCBzdHJlYW0gc29ja2V0OiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIOG7lSBj4bqvbSBsdeG7k25nIHN0cmVhbSBVTklYOiAlcyIKKworIzogbWlzYy91dWlkZC5jOjMwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBiaW5kIHVuaXggc29ja2V0ICVzOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYnXhu5ljIGvhur90IOG7lSBj4bqvbSBVTklYICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuq9uZyBuZ2hlIHRyw6puIOG7lSBj4bqvbSBVTklYICVzOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgZnJvbSBjbGllbnQsIGxlbiA9ICVkXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgdOG7qyDhu6luZyBk4bulbmcga2jDoWNoLCBkw6BpID0gJWRcbiIKKworIzogbWlzYy91dWlkZC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgInRoYW8gdMOhYyAlZCwgc+G7kSBn4butaSDEkeG6v24gPSAlZFxuIgorCisjOiBtaXNjL3V1aWRkLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgdGjhu51pIGdpYW4gxJHDoyB04bqhbyByYTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgcmFuZG9tIFVVSUQ6ICVzXG4iCittc2dzdHIgIlVVSUQgbmfhuqt1IG5oacOqbiDEkcOjIHThuqFvIHJhOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kIHN1YnNlcXVlbnQgVVVJRFxuIgorbXNnaWRfcGx1cmFsICJHZW5lcmF0ZWQgdGltZSBVVUlEICVzIGFuZCAlZCBzdWJzZXF1ZW50IFVVSURzXG4iCittc2dzdHJbMF0gIlVVSUQgdGjhu51pIGdpYW4gxJHDoyB04bqhbyByYSAlcyB2w6AgJWQgdGhlbyBzYXVcbiIKKworIzogbWlzYy91dWlkZC5jOjQyMAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgJWQgVVVJRCdzOlxuIgorbXNnc3RyICIlZCBVVUlEIMSRw6MgdOG6oW8gcmE6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24gJWRcbiIKK21zZ3N0ciAiVGhhbyB0w6FjIGtow7RuZyBo4bujcCBs4buHICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo0NzYgbWlzYy91dWlkZC5jOjQ5OAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJT4buRIHNhaTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjUzMyBtaXNjL3V1aWRkLmM6NTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNhbGxpbmcgdXVpZGQgZGFlbW9uICglcyk6ICVzXG4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBn4buNaSB0csOsbmggbuG7gW4gdXVpZGQgKCVzKTogJXNcbiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiVzIHbDoCAlZCBVVUlEIHjhuqN5IHJhIHNhdVxuIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICJEYW5oIHPDoWNoIGPhu6dhIFVVSUQ6XG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiTcOheSBjaOG7pyB0cuG6oyBs4budaSDEkcOhcCDhu6luZyB24bubaSBjaGnhu4F1IGTDoGkgYuG6pXQgdGjGsOG7nW5nICVkXG4iCisKKyM6IG1pc2MvdXVpZGQuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qga2lsbCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZDogJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGJ14buZYyBr4bq/dCB0aMO6YyB1dWlkZCDEkWFuZyBjaOG6oXkgduG7m2kgUElEICVkOiAlc1xuIgorCisjOiBtaXNjL3V1aWRkLmM6NTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIktpbGxlZCB1dWlkZCBydW5uaW5nIGF0IHBpZCAlZFxuIgorbXNnc3RyICLEkMOjIGJ14buZYyBr4bq/dCB0aMO6YyB1dWlkZCBjaOG6oXkgdOG6oWkgUElEICVkXG4iCisKKyM6IG1pc2MvdXVpZGdlbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLXJdIFstdF1cbiIKK21zZ3N0ciAiQ8OhY2ggZMO5bmc6ICVzIFstcl0gWy10XVxuIgorCisjOiByZXNpemUvZXh0ZW50LmM6MjAyCittc2dpZCAiIyBFeHRlbnQgZHVtcDpcbiIKK21zZ3N0ciAiIyDEkOG7lSBraG/huqNuZzpcbiIKKworIzogcmVzaXplL2V4dGVudC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIjXHROdW09JWxsdSwgU2l6ZT0lbGx1LCBDdXJzb3I9JWxsdSwgU29ydGVkPSVsbHVcbiIKK21zZ3N0ciAiI1x0U+G7kT0lbGx1LCBD4buhPSVsbHUsIENvbiB0cuG7jz0lbGx1LCBT4bqvcCB44bq/cD0lbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWQgZGVidWdfZmxhZ3NdIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSBkZXZpY2UgW25ld19zaXplXVxuIgorIlxuIgorbXNnc3RyICIiCisiQ8OhY2ggZMO5bmc6ICVzIFstZCBj4budX2fhu6FfbOG7l2ldIFstZl0gWy1GXSBbLU1dIFstUF0gWy1wXSB0aGnhur90X2Lhu4sgW2vDrWNoX2Phu6FfbeG7m2ldXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NjUKK21zZ2lkICJFeHRlbmRpbmcgdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICLEkGFuZyBt4bufIHLhu5luZyBi4bqjbmcgbsO6dCB0aMO0bmcgdGluIgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIsSQYW5nIMSR4buLbmggduG7iyBs4bqhaSBjw6FjIGto4buRaSIKKworIzogcmVzaXplL21haW4uYzo3MQorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICLEkGFuZyBxdcOpdCBi4bqjbmcgbsO6dCB0aMO0bmcgdGluIgorCisjOiByZXNpemUvbWFpbi5jOjc0Cittc2dpZCAiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIKK21zZ3N0ciAixJBhbmcgY+G6rXAgbmjhuq10IGPDoWMgdGhhbSBjaGnhur91IG7DunQgdGjDtG5nIHRpbiIKKworIzogcmVzaXplL21haW4uYzo3NworbXNnaWQgIk1vdmluZyBpbm9kZSB0YWJsZSIKK21zZ3N0ciAixJBhbmcgZGkgY2h1eeG7g24gYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAiTOG6p24gcXVhIGzhuqE/IT8iCisKKyM6IHJlc2l6ZS9tYWluLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmVnaW4gcGFzcyAlZCAobWF4ID0gJWx1KVxuIgorbXNnc3RyICJLaOG7n2kgY2jhuqF5IGzhuqduIHF1YSAlZCAodOG7kWkgxJFhID0gJWx1KVxuIgorCisjOiByZXNpemUvbWFpbi5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyBub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkXG4iCisiYXQgeW91ciBvd24gcmlzayEgIFVzZSB0aGUgZm9yY2Ugb3B0aW9uIGlmIHlvdSB3YW50IHRvIGdvIGFoZWFkIGFueXdheS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlxuIgorIlZp4buHYyB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGJpZ2FsbG9jIGNoxrBhIMSRxrDhu6NjIHRo4butIG5naGnhu4dtIMSR4bqneSDEkeG7py5cbiIKKyJU4buxIGNo4buLdSB0csOhY2ggbmhp4buHbSBu4bq/dSBtdeG7kW4gZMO5bmchICBEw7luZyB0w7l5LWNo4buNbiDDqXAgYnXhu5ljIG7hur91IGLhuqFuIG114buRbiB0aOG7sWMgaGnhu4duIHRp4bq/cC5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgb3BlbmluZyAlcyIKK21zZ3N0ciAidHJvbmcga2hpIG3hu58gJXMiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGdldHRpbmcgc3RhdCBpbmZvcm1hdGlvbiBmb3IgJXMiCittc2dzdHIgInRyb25nIGtoaSBs4bqleSBjw6FjIHRow7RuZyB0aW4gduG7gSAlcyIKKworIzogcmVzaXplL21haW4uYzozMzcgcmVzaXplL21haW4uYzo0NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBydW4gJ2UyZnNjayAtZiAlcycgZmlyc3QuXG4iCisiXG4iCittc2dzdHIgIlRyxrDhu5tjIHRpw6puIGjDo3kgY2jhuqF5IGNoxrDGoW5nIHRyw6xuaCDigJxlMmZzY2sgLWYgJXPigJ0uXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGltYXRlZCBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW06ICVsbHVcbiIKK21zZ3N0ciAiS8OtY2ggY+G7oSBo4buHIHRo4buRbmcgdOG6rXAgdGluIHThu5FpIHRoaeG7g3UgxJHGsOG7o2MgxrDhu5tjIHTDrW5oOiAlbGx1XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIkvDrWNoIGPhu6EgbeG7m2kga2jDtG5nIGjhu6NwIGzhu4c6ICVzXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6MzkzCittc2dpZCAiTmV3IHNpemUgdG9vIGxhcmdlIHRvIGJlIGV4cHJlc3NlZCBpbiAzMiBiaXRzXG4iCittc2dzdHIgIkvDrWNoIHRoxrDhu5tjIG3hu5tpIHF1w6EgbOG7m24gxJHhu4MgY8OzIHRo4buDIGTDuW5nIHPhu5EgMzIgYml0XG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICJLw61jaCBj4buhIG3hu5tpIHbhuqtuIG5o4buPIGjGoW4gbeG7qWMgdOG7kWkgdGhp4buDdSAoJWxsdSlcbiIKKworIzogcmVzaXplL21haW4uYzo0MDcKK21zZ2lkICJJbnZhbGlkIHN0cmlkZSBsZW5ndGgiCittc2dzdHIgIsSQ4buZIGTDoGkgc3RyaWRlIGtow7RuZyBo4bujcCBs4buHIgorCisjOiByZXNpemUvbWFpbi5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisiUGjDom4gdsO5bmcgY2jhu6lhIChoYXkgdGhp4bq/dCBi4buLKSBjaOG7qWEgY2jhu4kgY8OzIGvDrWNoIGPhu6EgJWxsdSAoJWRrKSBraOG7kWkuXG4iCisiQuG6oW4gxJHDoyB5w6p1IGPhuqd1IGvDrWNoIGPhu6EgbeG7m2kgJWxsdSBraOG7kWkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcOjIGPDsyDEkeG7mSBkw6BpICVsbHUga2jhu5FpLiBLaMO0bmcgY8OzIGfDrCBj4bqnbiBsw6BtICFcbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzo0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIsSQYW5nIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgY+G7p2EgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB0csOqbiAlcyB0aMOgbmggJWxsdSAoJWRrKSBraOG7kWkuXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgInRyb25nIGtoaSB0aOG7rSB0aGF5IMSR4buVaSBrw61jaCBj4buhICVzIgorCisjOiByZXNpemUvbWFpbi5jOjQ2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorIkjDo3kgY2jhuqF5IGPDonUgbOG7h25oIOKAnGUyZnNjayAtZnkgJXPigJ0gxJHhu4Mgc+G7rWEgY2jhu69hIGjhu4cgdGjhu5FuZyB04bqtcCB0aW5cbiIKKyLEkeG6sW5nIHNhdSB0aGFvIHTDoWMgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBi4buLIGjhu6d5IGLhu48uXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBvbiAlcyBpcyBub3cgJWxsdSBibG9ja3MgbG9uZy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbuG6sW0gdHLDqm4gJXMgZ2nhu50gY8OzIMSR4buZIGTDoGkgJWxsdSBraOG7kWkuXG4iCisiXG4iCisKKyM6IHJlc2l6ZS9tYWluLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byB0cnVuY2F0ZSAlcyIKK21zZ3N0ciAidHJvbmcga2hpIHRo4butIGPhuq90IG5n4bqvbiAlcyIKKworIzogcmVzaXplL29ubGluZS5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGVzeXN0ZW0gYXQgJXMgaXMgbW91bnRlZCBvbiAlczsgb24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIOG7nyAlcyDEkcaw4bujYyBn4bqvbiBr4bq/dCB2w6BvICVzOyBj4bqnbiB0aGnhur90IHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgdHLhu7FjIHR1eeG6v25cbiIKKworIzogcmVzaXplL29ubGluZS5jOjgzCittc2dpZCAiT24tbGluZSBzaHJpbmtpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVMOtbmggbsSDbmcgdGh1IG5o4buPIGtoaSDEkWFuZyBjaOG6oXkga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMDgKK21zZ2lkICJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGtow7RuZyBo4buXIHRy4bujIHTDrW5oIG7Eg25nIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgdHLhu7FjIHR1eeG6v24iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTcKK21zZ2lkICJOb3QgZW5vdWdoIHJlc2VydmVkIGdkdCBibG9ja3MgZm9yIHJlc2l6aW5nIgorbXNnc3RyICJLaMO0bmcgxJHhu6cga2jhu5FpIGThu7EgdHLhu68gZ2R0IMSR4buDIHRoYXkgxJHhu5VpIGvDrWNoIHRoxrDhu5tjIgorCisjOiByZXNpemUvb25saW5lLmM6MTI0Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIgorbXNnc3RyICJI4bqhdCBuaMOibiBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbsOgeSBy4buZbmcgaMahbiIKKworIzogcmVzaXplL29ubGluZS5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIgorbXNnc3RyICJ0cm9uZyBraGkgdGjhu60gbeG7nyDEkWnhu4NtIGzhuq9wICVzIgorCisjOiByZXNpemUvb25saW5lLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIKK21zZ3N0ciAixJDDoyB5w6p1IGPhuqd1IGdpYW8gZGnhu4duIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgY8WpLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MTU2IHJlc2l6ZS9vbmxpbmUuYzoxNzMKK21zZ2lkICJQZXJtaXNzaW9uIGRlbmllZCB0byByZXNpemUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2jDtG5nIMSR4bunIHF1eeG7gW4gxJHhu4MgdGhheSDEkeG7lWkga8OtY2ggY+G7oSBj4bunYSBo4buHIHRo4buRbmcgdOG6rXAgdGluIgorCisjOiByZXNpemUvb25saW5lLmM6MTU5IHJlc2l6ZS9vbmxpbmUuYzoxNzkKK21zZ2lkICJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IgorbXNnc3RyICJUcm9uZyBraGkga2nhu4NtIHRyYSBjw7MgaOG7lyB0cuG7oyB0aGF5IMSR4buVaSBrw61jaCBj4buhIHRy4buxYyB0dXnhur9uIgorCisjOiByZXNpemUvb25saW5lLmM6MTc2Cittc2dpZCAiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIgorbXNnc3RyICJI4bqhdCBuaMOibiBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyB0aGF5IMSR4buVaSBrw61jaCBj4buhIHRy4buxYyB0dXnhur9uIgorCisjOiByZXNpemUvb25saW5lLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIsSQYW5nIHRo4buxYyBoaeG7h24gbeG7mXQgY8O0bmcgdmnhu4djIHRoYXkgxJHhu5VpIGvDrWNoIGPhu6EgJXMgdHLhu7FjIHR1eeG6v24gdGjDoG5oICVsbHUgKCVkaykga2jhu5FpLlxuIgorCisjOiByZXNpemUvb25saW5lLmM6MjE5Cittc2dpZCAiV2hpbGUgdHJ5aW5nIHRvIGV4dGVuZCB0aGUgbGFzdCBncm91cCIKK21zZ3N0ciAiVHJvbmcga2hpIHRo4butIG3hu58gcuG7mW5nIG5ow7NtIGN14buRaSBjw7luZyIKKworIzogcmVzaXplL29ubGluZS5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiVHJvbmcga2hpIHRo4butIHRow6ptIG5ow7NtIHPhu5EgJWQiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoyODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIOG7nyAlcyDEkcaw4bujYyBn4bqvbiBr4bq/dCB2w6BvICVzLCB2w6AgdMOtbmggbsSDbmcgdGhheSDEkeG7lWkga8OtY2ggY+G7oSB0csOqbiBkw7JuZyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB0csOqbiBo4buHIHRo4buRbmcgbsOgeS5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICJuw7p0IHRow7RuZyB0aW4gKCVsbHUpIHBo4bqjaSBuaOG7jyBoxqFuICV1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6NjMxCittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIgorbXNnc3RyICJraOG7kWkgZMOgbmggcmnDqm5nIgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6ODc1Cittc2dpZCAibWV0YS1kYXRhIGJsb2NrcyIKK21zZ3N0ciAia2jhu5FpIHNpw6p1IGThu68gbGnhu4d1IgorCisjOiByZXNpemUvcmVzaXplMmZzLmM6MTgzNworIywgYy1mb3JtYXQKK21zZ2lkICJTaG91bGQgbmV2ZXIgaGFwcGVuOiByZXNpemUgaW5vZGUgY29ycnVwdCFcbiIKK21zZ3N0ciAiS2jDtG5nIGJhbyBnaeG7nSBuw6puIHjhuqN5IHJhOiBuw7p0IHRow7RuZyB0aW4gdGhheSDEkeG7lWkga8OtY2ggY+G7oSBi4buLIGjhu49uZyAhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMQorbXNnaWQgIkVYVDJGUyBMaWJyYXJ5IHZlcnNpb24gMS40Mi44IgorbXNnc3RyICJUaMawIHZp4buHbiBFWFQyRlMgcGhpw6puIGLhuqNuIDEuNDIuOCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgZXh0Ml9maWxzeXMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2xpc3Qgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjYmFkYmxvY2tzX2xpc3QiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmFkYmxvY2tzX2l0ZXJhdGUgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGJhZGJsb2Nrc19pdGVyYXRlIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX3NjYW4gc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGlub2RlX3NjYW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE3Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB1bml4IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIHVuaXggaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpb19tYW5hZ2VyIHN0cnVjdHVyZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBj4bqldSB0csO6YyBpb19tYW5hZ2VyIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGJsb2NrX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgaW5vZGVfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGdlbmVyaWNfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBj4bqldSB0csO6YyBnZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIHRlc3QgaW9fY2hhbm5lbCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBkaXJlY3RvcnkgYmxvY2sgbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgZGFuaCBzw6FjaCBraOG7kWkgdGjGsCBt4bulYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpY291bnQgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIGljb3VudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBQb3dlcnF1ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICJTYWkgc+G7kSBtw6B1IG5oaeG7h20gY2hvIGPhuqV1IHRyw7pjIFBvd2VycXVlc3QgaW9fY2hhbm5lIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDIgZmlsZSBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgdOG6rXAgdGluIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gRXh0MiBJbWFnZSBIZWFkZXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaW5vZGUgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSBjaG8gY+G6pXUgdHLDumMgbsO6dCBpb19jaGFubmVsIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiU2FpIHPhu5EgbcOgdSBuaGnhu4dtIGNobyBjw6FuIG3hu58gcuG7mW5nIGV4dDQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMAorbXNnaWQgIkJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2siCittc2dzdHIgIlNhaSBz4buRIG3DoHUgbmhp4buHbSB0cm9uZyBzacOqdSBraOG7kWkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIlBoacOqbiBi4bqjbiBo4buHIHRo4buRbmcgdOG6rXAgdGluIHF1w6EgY2FvIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzIKK21zZ2lkICJBdHRlbXB0IHRvIHdyaXRlIHRvIGZpbGVzeXN0ZW0gb3BlbmVkIHJlYWQtb25seSIKK21zZ3N0ciAiVGjhu60gdmnhur90IHbDoG8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiBtw6AgbsOzbsOzIGNo4buJIMSR4buNYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCittc2dpZCAiQ2FuJ3QgcmVhZCBncm91cCBkZXNjcmlwdG9ycyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBtw7QgdOG6oyBuaMOzbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0Cittc2dpZCAiQ2FuJ3Qgd3JpdGUgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbcO0IHThuqMgbmjDs20iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIkLhu5kgbcO0IHThuqMgbmjDs20gaOG7j25nOiBraOG7kWkgc2FpIGNobyBt4bqjbmcga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzYKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgYml0bWFwIgorbXNnc3RyICJC4buZIG3DtCB04bqjIG5ow7NtIGjhu49uZzoga2jhu5FpIHNhaSBjaG8gbeG6o25nIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNworbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiQuG7mSBtw7QgdOG6oyBuaMOzbSBo4buPbmc6IGto4buRaSBzYWkgY2hvIGLhuqNuZyBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzgKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbeG6o25nIOG6o25oIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozOQorbXNnaWQgIkNhbid0IHJlYWQgYW4gaW5vZGUgYml0bWFwIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIG3huqNuZyDhuqNuaCBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDAKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBibG9jayBiaXRtYXAiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbeG6o25nIOG6o25oIGto4buRaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQxCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBibG9jayBiaXRtYXAiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgbeG6o25nIOG6o25oIGto4buRaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQyCittc2dpZCAiQ2FuJ3Qgd3JpdGUgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgYuG6o25nIG7DunQgdGjDtG5nIHRpbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQzCittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyBi4bqjbmcgbsO6dCB0aMO0bmcgdGluIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDQKK21zZ2lkICJDYW4ndCByZWFkIG5leHQgaW5vZGUiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgbsO6dCB0aeG6v3AgdGhlbyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ1Cittc2dpZCAiRmlsZXN5c3RlbSBoYXMgdW5leHBlY3RlZCBibG9jayBzaXplIgorbXNnc3RyICJI4buHIHRo4buRbmcgdOG6rXAgdGluIGPDsyBrw61jaCBj4buhIGto4buRaSBi4bqldCB0aMaw4budbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NgorbXNnaWQgIkVYVDIgZGlyZWN0b3J5IGNvcnJ1cHRlZCIKK21zZ3N0ciAiVGjGsCBt4bulYyBleHQyIMSRw6MgaOG7j25nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDcKK21zZ2lkICJBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQiCittc2dzdHIgIlRo4butIMSR4buNYyBraOG7kWkgdOG7qyBo4buHIHRo4buRbmcgdOG6rXAgdGluIGvhur90IHF14bqjIGThuqFuZyBuZ+G6r24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiVGjhu60gZ2hpIGto4buRaSB04bubaSBo4buHIHRo4buRbmcgdOG6rXAgdGluIGvhur90IHF14bqjIGThuqFuZyBuZ+G6r24iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OQorbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gdGhlIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2jDtG5nIGdpYW4gdHLhu5FuZyB0cm9uZyB0aMawIG3hu6VjIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTAKK21zZ2lkICJJbm9kZSBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAiTeG6o25nIG7DunQga2jDtG5nIMSRxrDhu6NjIHThuqNpIGzDqm4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorbXNnaWQgIkJsb2NrIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJN4bqjbmcga2jhu5FpIGtow7RuZyDEkcaw4bujYyB04bqjaSBsw6puIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKK21zZ2lkICJJbGxlZ2FsIGlub2RlIG51bWJlciIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcgbsO6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIGto4buRaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gZXh0MmZzX2V4cGFuZF9kaXIiCittc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgdHJvbmcgZXh0MmZzX2V4cGFuZF9kaXIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiS2jDtG5nIMSR4bunIHPhu6ljIGNo4bupYSDEkeG7gyB4w6J5IGThu7FuZyBo4buHIHRo4buRbmcgdOG6rXAgdGluIG5oxrAgxJHhu4EgeHXhuqV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICJTYWkgc+G7kSBsxrDhu6NuZyBraOG7kWkgY2h1eeG7g24gdOG7m2kgZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTcKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIGzGsOG7o25nIGto4buRaSBjaHV54buDbiB04bubaSBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU4Cittc2dpZCAiSWxsZWdhbCBibG9jayBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcga2jhu5FpIGNodXnhu4NuIHThu5tpIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjU5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcgbsO6dCBjaHV54buDbiB04bubaSBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MAorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcgbsO6dCBjaHV54buDbiB04bubaSBleHQyZnNfdW5tYXJrX2lub2RlX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYxCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcCIKK21zZ3N0ciAiU2FpIHPhu5EgbMaw4bujbmcgbsO6dCBjaHV54buDbiB04bubaSBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MgorbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGJsb2NrIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiVGjhu60gY2h1eeG7g24gY3Xhu5FpIGPhu6dhIG3huqNuZyBraOG7kWkgcXVhIHBo4bqnbiBjdeG7kWkgdGjhuq10IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjMKK21zZ2lkICJBdHRlbXB0IHRvIGZ1ZGdlIGVuZCBvZiBpbm9kZSBiaXRtYXAgcGFzdCB0aGUgcmVhbCBlbmQiCittc2dzdHIgIlRo4butIGNodXnhu4NuIGN14buRaSBj4bunYSBt4bqjbmcgbsO6dCBxdWEgcGjhuqduIGN14buRaSB0aOG6rXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NAorbXNnaWQgIklsbGVnYWwgaW5kaXJlY3QgYmxvY2sgZm91bmQiCittc2dzdHIgIlTDrG0gdGjhuqV5IGto4buRaSBnacOhbiB0aeG6v3Aga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2NQorbXNnaWQgIklsbGVnYWwgZG91Ymx5IGluZGlyZWN0IGJsb2NrIGZvdW5kIgorbXNnc3RyICJUw6xtIHRo4bqleSBraOG7kWkgZ2nDoW4gdGnhur9wIMSRw7RpIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiVMOsbSB0aOG6pXkga2jhu5FpIGdpw6FuIHRp4bq/cCBiYSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY3Cittc2dpZCAiQmxvY2sgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICJN4bqjbmcg4bqjbmgga2jhu5FpIGtow7RuZyBnaeG7kW5nIG5oYXUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OAorbXNnaWQgIklub2RlIGJpdG1hcHMgYXJlIG5vdCB0aGUgc2FtZSIKK21zZ3N0ciAiTeG6o25nIOG6o25oIG7DunQga2jDtG5nIGdp4buRbmcgbmhhdSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY5Cittc2dpZCAiSWxsZWdhbCBvciBtYWxmb3JtZWQgZGV2aWNlIG5hbWUiCittc2dzdHIgIlTDqm4gdGhp4bq/dCBi4buLIGtow7RuZyBo4bujcCBs4buHIGhheSBk4buLIGjDrG5oIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzAKK21zZ2lkICJBIGJsb2NrIGdyb3VwIGlzIG1pc3NpbmcgYW4gaW5vZGUgdGFibGUiCittc2dzdHIgIk3hu5l0IG5ow7NtIGto4buRaSBi4buLIG3huqV0IG3hu5l0IGLhuqNuZyBuw7p0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIlNpw6p1IGto4buRaSBleHQyIGLhu4sgaOG7j25nLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICJT4buRIGLDrXQgY2h1bmcga2jDtG5nIGjhu6NwIGzhu4cgxJHGsOG7o2MgY2h1eeG7g24gcXVhIGNobyBleHQyZnNfbWFya19nZW5lcmljX2JpdG1hcCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjczCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCittc2dzdHIgIlPhu5EgYsOtdCBjaHVuZyBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyBjaHV54buDbiBxdWEgY2hvIGV4dDJmc191bm1hcmtfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiU+G7kSBiw610IGNodW5nIGtow7RuZyBo4bujcCBs4buHIMSRxrDhu6NjIGNodXnhu4NuIHF1YSBjaG8gZXh0MmZzX3Rlc3RfZ2VuZXJpY19iaXRtYXAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NQorbXNnaWQgIlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLiIKK21zZ3N0ciAiR+G6t3AgcXXDoSBuaGnhu4F1IGxpw6puIGvhur90IHTGsOG7o25nIHRyxrBuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIkjDoG0gZ+G7jWkgbmfGsOG7o2MgY2FsbGJhY2sga2jDtG5nIMSRxrDhu6NjIHRp4bq/cCBuaOG6rW4gdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NworbXNnaWQgIlRoZSBpbm9kZSBpcyBmcm9tIGEgYmFkIGJsb2NrIGluIHRoZSBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiTsO6dCB04burIG3hu5l0IGto4buRaSBzYWkgdHJvbmcgYuG6o25nIG7DunQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIGZlYXR1cmUocykiCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gY8OzIHTDrW5oIG7Eg25nIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCByZWFkLW9ubHkgZmVhdHVyZShzKSIKK21zZ3N0ciAiSOG7hyB0aOG7kW5nIHThuq1wIHRpbiBraMO0bmcgaOG7lyB0cuG7oyB0w61uaCBuxINuZyBjaOG7iSDEkeG7jWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MAorbXNnaWQgIklPIENoYW5uZWwgZmFpbGVkIHRvIHNlZWsgb24gcmVhZCBvciB3cml0ZSIKK21zZ3N0ciAiS8OqbmggSU8gZ+G6t3AgbOG7l2kga2hpIGRpIGNodXnhu4NuIHbhu4sgdHLDrSB0csOqbiB04bqtcCB0aW4gbMO6YyDEkeG7jWMgaGF5IGdoaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgxCittc2dpZCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIgorbXNnc3RyICJM4buXaSBj4bqlcCBwaMOhdCB2w7luZyBuaOG7myIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IgorbXNnc3RyICLEkOG7kWkgc+G7kSBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyBjaHV54buDbiBxdWEgY2hvIHRoxrAgdmnhu4duIHByb2ZpbGUiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MworbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBibG9jayBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqlcCBwaMOhdCBraOG7kWkgY2hvIGtp4buDdSBo4bq/IHRo4buRbmcgdOG6rXAgdGluIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorbXNnaWQgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbm9kZSBpbiBleHQyIGZpbGVzeXN0ZW0iCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqlcCBwaMOhdCBuw7p0IGNobyBo4buHIHRo4buRbmcgdOG6rXAgdGluIGV4dDIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NQorbXNnaWQgIkV4dDIgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJOw7p0IGV4dDIga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiQ8OzIHF1w6Egbmhp4buBdSB0aGFtIGNoaeG6v3UgdHJvbmcgYuG6o25nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiVOG6rXAgdGluIGtow7RuZyB0w6xtIMSRxrDhu6NjIGLhu59pIGV4dDJfbG9va3VwIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICJN4bufIHThuq1wIHRpbiB0cm9uZyBjaOG6vyDEkeG7mSBjaOG7iSBjaG8gxJHhu41jIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIkto4buRaSB0aMawIG3hu6VjIGV4dDIga2jDtG5nIHTDrG0gdGjhuqV5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTAKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGjGsCBt4bulYyBleHQyIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICJDaOG7qWMgbsSDbmcgdGjGsCB2aeG7h24gZXh0MiBjaMawYSDEkcaw4bujYyB0aOG7sWMgaGnhu4duIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTIKK21zZ2lkICJVc2VyIGNhbmNlbCByZXF1ZXN0ZWQiCittc2dzdHIgIk5nxrDhu51pIGTDuW5nIHnDqnUgY+G6p3UgaOG7p3kiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MworbXNnaWQgIkV4dDIgZmlsZSB0b28gYmlnIgorbXNnc3RyICJU4bqtcCB0aW4gZXh0MiBxdcOhIGzhu5tuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIsOBcCBk4bulbmcgdGhp4bq/dCBi4buLIGpvdXJuYWwga2jDtG5nIHBo4bqjaSB0aGnhur90IGLhu4sga2jhu5FpLiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IHNpw6p1IGto4buRaSBuaOG6rXQga8O9IChKb3VybmFsKSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICJKb3VybmFsIHBo4bqjaSBjw7Mgw610IG5o4bqldCAxMDI0IGto4buRaSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk3Cittc2dpZCAiVW5zdXBwb3J0ZWQgam91cm5hbCB2ZXJzaW9uIgorbXNnc3RyICJwaGnDqm4gYuG6o24gam91cm5hbCBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBleHRlcm5hbCBqb3VybmFsIgorbXNnc3RyICJM4buXaSB04bqjaSBqb3VybmFsIG3hu58gcuG7mW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTkKK21zZ2lkICJKb3VybmFsIG5vdCBmb3VuZCIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IEpvdXJuYWwiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiVGjGsCBt4bulYyBi4bqjbmcgYsSDbSBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiU+G7kSBraOG7kWkgdGh14buZYyB0w61uaCBt4bufIHLhu5luZyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB24bubaSBz4buRIG7DunQgxJHDoyB5w6p1IGPhuqd1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAzCittc2dpZCAiRTJpbWFnZSBzbmFwc2hvdCBub3QgaW4gdXNlIgorbXNnc3RyICJC4bqjbiBjaOG7pXAgbmhhbmggRTJpbWFnZSBraMO0bmcgxJHGsOG7o2Mgc+G7rSBk4bulbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDQKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiQ8OzIHF1w6Egbmhp4buBdSBraOG7kWkgbcO0IHThuqMgbmjDs20gZOG7sSB0cuG7ryIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICJUaGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyBuw7p0IGLhu4sgdGjhuqV0IGLhuqFpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA2Cittc2dpZCAiVHJpZWQgdG8gc2V0IGJsb2NrIGJtYXAgd2l0aCBtaXNzaW5nIGluZGlyZWN0IGJsb2NrIgorbXNnc3RyICJUaOG7rSDEkeG6t3Qga2jhu5FpIGJtYXAgduG7m2kga2jhu5FpIGdpw6FuIHRp4bq/cCBi4buLIG3huqV0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA3Cittc2dpZCAiVERCOiBTdWNjZXNzIgorbXNnc3RyICJUREI6IFRow6BuaCBjw7RuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwOAorbXNnaWQgIlREQjogQ29ycnVwdCBkYXRhYmFzZSIKK21zZ3N0ciAiVERCOiBDxqEgc+G7nyBk4buvIGxp4buHdSBo4buPbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICJUREI6IElPIEzhu5dpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEwCittc2dpZCAiVERCOiBMb2NraW5nIGVycm9yIgorbXNnc3RyICJUREI6IEzhu5dpIGtow7NhIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTExCittc2dpZCAiVERCOiBPdXQgb2YgbWVtb3J5IgorbXNnc3RyICJUREI6IEjhur90IGLhu5kgbmjhu5siCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTIKK21zZ2lkICJUREI6IFJlY29yZCBleGlzdHMiCittc2dzdHIgIlREQjogQuG6o24gZ2hpIMSRw6Mgc+G6tW4gY8OzIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEzCittc2dpZCAiVERCOiBMb2NrIGV4aXN0cyBvbiBvdGhlciBrZXlzIgorbXNnc3RyICJUREI6IEtob8OhIMSRw6MgdOG7k24gdOG6oWkgdHLDqm4gY2jDrGEga2hvw6Ega2jDoWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTQKK21zZ2lkICJUREI6IEludmFsaWQgcGFyYW1ldGVyIgorbXNnc3RyICJUREI6IMSQ4buRaSBz4buRIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE1Cittc2dpZCAiVERCOiBSZWNvcmQgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlREQjogQuG6o24gZ2hpIGNoxrBhIHThu5NuIHThuqFpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE2Cittc2dpZCAiVERCOiBXcml0ZSBub3QgcGVybWl0dGVkIgorbXNnc3RyICJUREI6IEtow7RuZyBjw7MgcXV54buBbiBnaGkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTcKK21zZ2lkICJFeHQyZnMgZGlyZWN0b3J5IGJsb2NrIGxpc3QgaXMgZW1wdHkiCittc2dzdHIgIkRhbmggc8OhY2gga2jhu5FpIHRoxrAgbeG7pWMgZXh0MmZzIGLhu4sgcuG7l25nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiVGjhu60gY2jhu4luaCBz4butYSBt4buZdCBt4bqjbmcga2jhu5FpIHRow7RuZyBxdWEgYuG7mSBs4bq3cCBraOG7kWkgY2jhu4kgxJHhu41jIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgY2hvIG3hu58gcuG7mW5nIGV4dDQgZ2hpIGzhuqFpIMSRxrDhu51uZyBk4bqrbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgNjQtYml0IGdlbmVyaWMgYml0bWFwIgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgY2hvIGJpdG1hcCBjaHVuZyA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjEKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBibG9jayBiaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSBjaG8gYml0bWFwIGto4buRaSA2NC1iaXQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSBjaG8gYml0bWFwIG7DunQgNjQtYml0IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xMyIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xMyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSAtLS0gUkVTRVJWRURfMTQiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE1IgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgLS0tIFJFU0VSVkVEXzE1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xNiIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xNiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIlNhaSBz4buRIG5oaeG7h20gbcOgdSAtLS0gUkVTRVJWRURfMTciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgLS0tIFJFU0VSVkVEXzE4IgorbXNnc3RyICJTYWkgc+G7kSBuaGnhu4dtIG3DoHUgLS0tIFJFU0VSVkVEXzE4IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTI5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIC0tLSBSRVNFUlZFRF8xOSIKK21zZ3N0ciAiU2FpIHPhu5Egbmhp4buHbSBtw6B1IC0tLSBSRVNFUlZFRF8xOSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiUGjhuqduIMSR4bqndSBleHRlbnQgYuG7iyBo4buPbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzEKK21zZ2lkICJDb3JydXB0IGV4dGVudCBpbmRleCIKK21zZ3N0ciAiQ2jhu4kgc+G7kSBleHRlbnQgYuG7iyBo4buPbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzIKK21zZ2lkICJDb3JydXB0IGV4dGVudCIKK21zZ3N0ciAiZXh0ZW50IGjhu49uZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMworbXNnaWQgIk5vIGZyZWUgc3BhY2UgaW4gZXh0ZW50IG1hcCIKK21zZ3N0ciAiS2jDtG5nIGPDsm4ga2hv4bqjbmcgxJHEqWEgdHLhu5FuZyBjaG8gbeG6o25nIGV4dGVudCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICJJbm9kZSBkb2VzIG5vdCB1c2UgZXh0ZW50cyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNQorbXNnaWQgIk5vICduZXh0JyBleHRlbnQiCittc2dzdHIgIktow7RuZyBjw7MgZXh0ZW50IOKAnHRp4bq/cCB0aGVv4oCdIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM2Cittc2dpZCAiTm8gJ3ByZXZpb3VzJyBleHRlbnQiCittc2dzdHIgIktow7RuZyBjw7MgZXh0ZW50IOKAnGxp4buBbiB0csaw4bubY+KAnSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNworbXNnaWQgIk5vICd1cCcgZXh0ZW50IgorbXNnc3RyICJLaMO0bmcgY8OzIGV4dGVudCDigJxsw6pu4oCdIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBleHRlbnQg4oCceHXhu5FuZ+KAnSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzOQorbXNnaWQgIk5vIGN1cnJlbnQgbm9kZSIKK21zZ3N0ciAiS2jDtG5nIG7DunQgaGnhu4duIHRo4budaSBow6BuaCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MAorbXNnaWQgIkV4dDJmcyBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiVGhhbyB0w6FjIEV4dDJmcyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICJLaMO0bmcgY8OybiBwaMOybmcgbsOgbyDEkeG7gyBjaMOobiBleHRlbnQgdHJvbmcgbsO6dCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MgorbXNnaWQgIlNwbGl0dGluZyB3b3VsZCByZXN1bHQgaW4gZW1wdHkgbm9kZSIKK21zZ3N0ciAiUGjDom4gdMOhY2ggY8OzIHRo4buDIGzDoG0gbmd1ecOqbiBuaMOibiBuw7p0IGLhu4sgcuG7l25nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQzCittc2dpZCAiRXh0ZW50IG5vdCBmb3VuZCIKK21zZ3N0ciAiRXh0ZW50IGtow7RuZyB0w6xtIHRo4bqleSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NAorbXNnaWQgIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBpbm9kZXMgY29udGFpbmluZyBleHRlbnRzIgorbXNnc3RyICJUaGFvIHTDoWMga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgY2hvIG7DunQgY2jhu6lhIHBo4bqnbiBt4bufIHLhu5luZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAixJDhu5kgZMOgaSBrw61jaCB0aMaw4bubYyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NgorbXNnaWQgIkkvTyBDaGFubmVsIGRvZXMgbm90IHN1cHBvcnQgNjQtYml0IGJsb2NrIG51bWJlcnMiCittc2dzdHIgIkvDqm5oIEkvTyBraMO0bmcgaOG7lyB0cuG7oyBz4buRIGto4buRaSA2NC1iw610IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGtp4buDbSB0cmEgbuG6v3UgaOG7hyB0aOG7kW5nIHThuq1wIHRpbiDEkcaw4bujYyBn4bqvbiBi4bufaSB2w6wgbeG6pXQgdOG6rXAgdGluIG10YWIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDgKK21zZ2lkICJGaWxlc3lzdGVtIHRvbyBsYXJnZSB0byB1c2UgbGVnYWN5IGJpdG1hcHMiCittc2dzdHIgIkjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcXXDoSBs4bubbiDEkeG7gyBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgbeG6o25nIGtp4buDdSBjxakiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICJNTVA6IHNhaSBz4buRIG3DoHUgbmhp4buHbSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1MAorbXNnaWQgIk1NUDogZGV2aWNlIGN1cnJlbnRseSBhY3RpdmUiCittc2dzdHIgIk1NUDogdGhp4bq/dCBi4buLIGhp4buHbiB0aOG7nWkgaG/huqF0IMSR4buZbmciCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICJNTVA6IGZzY2sgxJFhbmcgY2jhuqF5IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUyCittc2dpZCAiTU1QOiBibG9jayBudW1iZXIgYmV5b25kIGZpbGVzeXN0ZW0gcmFuZ2UiCittc2dzdHIgIk1NUDogc+G7kSBraOG7kWkgbuG6sW0geGEgbmdvw6BpIHbDuW5nIGPhu6dhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTMKK21zZ2lkICJNTVA6IHVuZGVyZ29pbmcgYW4gdW5rbm93biBvcGVyYXRpb24iCittc2dzdHIgIk1NUDogdHLhuqNpIHF1YSBt4buZdCB0aGFvIHTDoWMgY2jGsGEgxJHGsOG7o2MgYmnhur90IMSR4bq/biIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NAorbXNnaWQgIk1NUDogZmlsZXN5c3RlbSBzdGlsbCBpbiB1c2UiCittc2dzdHIgIk1NUDogaOG7hyB0aOG7kW5nIHThuq1wIHRpbiB24bqrbiDEkWFuZyDEkcaw4bujYyBz4butIGThu6VuZyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NQorbXNnaWQgIk1NUDogb3BlbiB3aXRoIE9fRElSRUNUIGZhaWxlZCIKK21zZ3N0ciAiTU1QOiBt4bufIHbhu5tpIE9fRElSRUNUIGfhurdwIGzhu5dpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU2Cittc2dpZCAiQmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBzaXplIGluY29ycmVjdCIKK21zZ3N0ciAiS8OtY2ggdGjGsOG7m2MgYuG7mSBtw7QgdOG6oyBuaMOzbSBraOG7kWkga2jDtG5nICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1NworbXNnaWQgIklub2RlIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGlub2RlIgorbXNnc3RyICJU4buVbmcga2nhu4NtIG7DunQga2jDtG5nIGto4bubcCB24bubaSBuw7p0ICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1OAorbXNnaWQgIklub2RlIGJpdG1hcCBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBiaXRtYXAiCittc2dzdHIgIlThu5VuZyBraeG7g20gTeG6o25nIOG6o25oIG7DunQga2jDtG5nIGto4bubcCBuaGF1IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTU5Cittc2dpZCAiRXh0ZW50IGJsb2NrIGNoZWNrc3VtIGRvZXMgbm90IG1hdGNoIGV4dGVudCBibG9jayIKK21zZ3N0ciAiVOG7lW5nIGtp4buDbSB0cmEga2jhu5FpIG3hu58gcuG7mW5nIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIG3hu58gcuG7mW5nIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYwCittc2dpZCAiRGlyZWN0b3J5IGJsb2NrIGRvZXMgbm90IGhhdmUgc3BhY2UgZm9yIGNoZWNrc3VtIgorbXNnc3RyICJLaOG7kWkgdGjGsCBt4bulYyBraMO0bmcgY8OzIGNo4buXIGTDoG5oIGNobyB04buVbmcga2nhu4NtIHRyYSIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2MQorbXNnaWQgIkRpcmVjdG9yeSBibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBkaXJlY3RvcnkgYmxvY2siCittc2dzdHIgIlThu5VuZyBraeG7g20gdHJhIGto4buRaSB0aMawIG3hu6VjIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIHRoxrAgbeG7pWMiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjIKK21zZ2lkICJFeHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggYmxvY2siCittc2dzdHIgIlThu5VuZyBraeG7g20gdHJhIGto4buRaSB0aHXhu5ljIHTDrW5oIG3hu58gcuG7mW5nIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYzCittc2dpZCAiU3VwZXJibG9jayBjaGVja3N1bSBkb2VzIG5vdCBtYXRjaCBzdXBlcmJsb2NrIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHNpw6p1IGto4buRaSBraMO0bmcga2jhu5twIHbhu5tpIHNpw6p1IGto4buRaSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjQKK21zZ2lkICJVbmtub3duIGNoZWNrc3VtIGFsZ29yaXRobSIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0aHXhuq10IHRvw6FuIGLEg20gdOG7lW5nIGtp4buDbSAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNjUKK21zZ2lkICJNTVAgYmxvY2sgY2hlY2tzdW0gZG9lcyBub3QgbWF0Y2ggTU1QIGJsb2NrIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHRyYSBraOG7kWkgTU1QIGtow7RuZyBraOG7m3AgduG7m2kga2jhu5FpIE1NUCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE2NgorbXNnaWQgIkV4dDIgZmlsZSBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVOG6rXAgdGluIGV4dDIgxJHDoyBz4bq1biBjw7MgcuG7k2kiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjExCittc2dpZCAiUHJvZmlsZSB2ZXJzaW9uIDAuMCIKK21zZ3N0ciAiUHJvZmlsZSBwaGnDqm4gYuG6o24gMC4wIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX25vZGUiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX25vZGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEzCittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIG5vdCBmb3VuZCIKK21zZ3N0ciAiUGjhuqduIGPhu6dhIHByb2ZpbGUga2jDtG5nIHTDrG0gdGjhuqV5IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNAorbXNnaWQgIlByb2ZpbGUgcmVsYXRpb24gbm90IGZvdW5kIgorbXNnc3RyICJN4buRaSBxdWFuIGjhu4cgcHJvZmlsZSBraMO0bmcgdMOsbSB0aOG6pXkiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE1Cittc2dpZCAiQXR0ZW1wdCB0byBhZGQgYSByZWxhdGlvbiB0byBub2RlIHdoaWNoIGlzIG5vdCBhIHNlY3Rpb24iCittc2dzdHIgIlRo4butIHRow6ptIHF1YW4gaOG7hyB2w6BvIG7DunQgbcOgIG7DsyBraMO0bmcgbMOgIG3hu5l0IGNoxrDGoW5nIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNgorbXNnaWQgIkEgcHJvZmlsZSBzZWN0aW9uIGhlYWRlciBoYXMgYSBub24temVybyB2YWx1ZSIKK21zZ3N0ciAiUGjhuqduIMSR4bqndSBjaMawxqFuZyBwcm9maWxlIHBo4bqjaSBjw7MgZ2nDoSB0cuG7iyBraMOhYyBraMO0bmciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiRGFuaCBzw6FjaCBsacOqbiBr4bq/dCBraMO0bmcgxJHDum5nIHRyb25nIGPhuqV1IHRyw7pjIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE4Cittc2dpZCAiQmFkIGdyb3VwIGxldmVsIGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiTeG7qWMgbmjDs20ga2jDtG5nIMSRw7puZyB0cm9uZyBj4bqldSB0csO6YyBwcm9maWxlIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOQorbXNnaWQgIkJhZCBwYXJlbnQgcG9pbnRlciBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIkNvbiB0cuG7jyDEkeG6v24gY2hhIGtow7RuZyDEkcO6bmcgdHJvbmcgY+G6pXUgdHLDumMgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZSBpdGVyYXRvciIKK21zZ3N0ciAiR2nDoSB0cuG7iyBz4buRIG3huqd1IG5oaeG7h20gc2FpIHRyb25nIHByb2ZpbGUgaXRlcmF0b3IiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIxCittc2dpZCAiQ2FuJ3Qgc2V0IHZhbHVlIG9uIHNlY3Rpb24gbm9kZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4bq3dCBnacOhIHRy4buLIHRyw6puIG7DunQgY+G7p2EgxJFv4bqhbiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjIKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBwcm9maWxlIGxpYnJhcnkiCittc2dzdHIgIlRoYW0gc+G7kSBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyBjaHV54buDbiBxdWEgY2hvIHRoxrAgdmnhu4duIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIlRo4butIHZp4bq/dCB2w6BvIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gcHJvZmlsZSBjaOG7iSDEkeG7jWMiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI0Cittc2dpZCAiUHJvZmlsZSBzZWN0aW9uIGhlYWRlciBub3QgYXQgdG9wIGxldmVsIgorbXNnc3RyICJQaOG6p24gxJHhuqd1IGNoxrDGoW5nIHByb2ZpbGUga2jDtG5nIOG7nyBt4bupYyBjYW8gbmjhuqV0IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNQorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIgorbXNnc3RyICJDw7ogcGjDoXAgbOG7l2kgdHJvbmcga2hhaSBiw6FvIHBo4bqnbiDEkeG6p3UgY2jGsMahbmcgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjYKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSByZWxhdGlvbiIKK21zZ3N0ciAiU2FpIGPDuiBwaMOhcCB0cm9uZyBxdWFuIGjhu4cgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjcKK21zZ2lkICJFeHRyYSBjbG9zaW5nIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIkLhu5UgeHVuZyBk4bqldSBuZ2/hurdjIMO0bSDEkcOzbmcgdHJvbmcgcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjgKK21zZ2lkICJNaXNzaW5nIG9wZW4gYnJhY2UgaW4gcHJvZmlsZSIKK21zZ3N0ciAiVGhp4bq/dSBt4bqldCBk4bqldSBuZ2/hurdjIMO0bSBt4bufIHRyb25nIHByb2ZpbGUiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI5Cittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfdCIKK21zZ3N0ciAiU+G7kSBuaGnhu4dtIG3DoHUgc2FpIHRyb25nIHByb2ZpbGVfdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzAKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9zZWN0aW9uX3QiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX3NlY3Rpb25fdCIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzEKK21zZ2lkICJJdGVyYXRpb24gdGhyb3VnaCBhbGwgdG9wIGxldmVsIHNlY3Rpb24gbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTOG6t3AgxJFpIGzhurdwIGzhuqFpIHF1YSB0b8OgbiBi4buZIGNoxrDGoW5nIOG7nyBt4bupYyBjYW8gbmjhuqV0IGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozMgorbXNnaWQgIkludmFsaWQgcHJvZmlsZV9zZWN0aW9uIG9iamVjdCIKK21zZ3N0ciAixJDhu5FpIHTGsOG7o25nIHByb2ZpbGVfc2VjdGlvbiBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzMKK21zZ2lkICJObyBtb3JlIHNlY3Rpb25zIgorbXNnc3RyICJLaMO0bmcgY8OybiB0aMOqbSBwaOG6p24gbsOgbyBu4buvYSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzQKK21zZ2lkICJCYWQgbmFtZXNldCBwYXNzZWQgdG8gcXVlcnkgcm91dGluZSIKK21zZ3N0ciAiVMOqbiBzYWkgxJHGsOG7o2MgY2h1eeG7g24gcXVhIGNobyB0aOG7pyB04bulYyB0cnV5IHbhuqVuIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNQorbXNnaWQgIk5vIHByb2ZpbGUgZmlsZSBvcGVuIgorbXNnc3RyICJLaMO0bmcgbeG7nyB04bqtcCB0aW4gcHJvZmlsZSBuw6BvIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNgorbXNnaWQgIkJhZCBtYWdpYyB2YWx1ZSBpbiBwcm9maWxlX2ZpbGVfdCIKK21zZ3N0ciAiR2nDoSB0cuG7iyBz4buRIG3huqd1IG5oaeG7h20gc2FpIHRyb25nIHByb2ZpbGVfZmlsZV90IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNworbXNnaWQgIkNvdWxkbid0IG9wZW4gcHJvZmlsZSBmaWxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gcHJvZmlsZSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzgKK21zZ2lkICJTZWN0aW9uIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJQaOG6p24gxJHDoyB04buTbiB04bqhaSBy4buTaSIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIkdpw6EgdHLhu4sgbMO0LWfDrWMga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQwCittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICJHacOhIHRy4buLIG5ndXnDqm4ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIkdpw6EgdHLhu4sgc+G7kSBt4bqndSBuaGnhu4dtIHNhaSB0cm9uZyBwcm9maWxlX2ZpbGVfZGF0YV90IgorCisjfiBtc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKKyN+IG1zZ3N0ciAiQ2jhu6ljIG7Eg25nIHhvw6Egc+G6oWNoIGPhu50gdOG6p20ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHLDqm4gJXMiCisKKyN+IG1zZ2lkICIiCisjfiAiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorI34gIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIiVzOiB04buVIGjhu6NwIGhhaSB0w61uaCBuxINuZyBmbGV4X2JnIHbDoCAhcmVzaXplX2lub2RlXG4iCisjfiAixJHhu4F1IGtow7RuZyDEkcaw4bujYyByZXNpemUyZnMgaOG7lyB0cuG7oy5cbiIKKworI34gbXNnaWQgIiVzIGlzIG1vdW50ZWQuICAiCisjfiBtc2dzdHIgIiVzIMSRw6MgZ+G6r24ga+G6v3QuICAiCisKKyN+IG1zZ2lkICJAZyAlZyBAYiBAQiB1bmluaXRpYWxpemVkIGJ1dCBAaSBAQiBpbiB1c2UuXG4iCisjfiBtc2dzdHIgIkBCIEBiIGPhu6dhIEBnICVnIGNoxrBhIGto4bufaSB04bqhbyBuaMawbmcgxJFhbmcgZMO5bmcgQEIgQGkuXG4iCisKKyN+IG1zZ2lkICJAaSAlaSBzaG91bGQgbm90IGhhdmUgRU9GQkxPQ0tTX0ZMIHNldCAoc2l6ZSAlSXMsIGxibGsgJXIpXG4iCisjfiBtc2dzdHIgIkBpICVpIGtow7RuZyBuw6puIGzhuq1wIEVPRkJMT0NLU19GTCAoa8OtY2ggY+G7oSAlSXMsIGxibGsgJXIpXG4iCisKKyN+IG1zZ2lkICJDb3VsZG4ndCBkZXRlcm1pbmUgam91cm5hbCBzaXplIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgcXV54bq/dCDEkeG7i25oIGvDrWNoIGPhu6Egbmjhuq10IGvDvSIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPG7DunQgdGjDtG5nIHRpbiBjaOG7iSBt4bulYyBBQ0w+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxuw7p0IHRow7RuZyB0aW4gZOG7ryBsaeG7h3UgQUNMPiIKKworI34gbXNnaWQgInNob3J0IHdyaXRlIChvbmx5ICVkIGJ5dGVzKSBmb3Igd3JpdGluZyBpbWFnZSBoZWFkZXIiCisjfiBtc2dzdHIgImdoaSBuZ+G6r24gKGNo4buJICVkIGJ5dGUpIMSR4buDIGdoaSBwaOG6p24gxJHhuqd1IOG6o25oIgorCisjfiBtc2dpZCAiaW52YWxpZCBmcmFnbWVudCBzaXplIC0gJXMiCisjfiBtc2dzdHIgImPhu6EgxJFv4bqhbiBraMO0bmcgaOG7o3AgbOG7hyDigJQgJXMiCisKKyN+IG1zZ2lkICJXYXJuaW5nOiBmcmFnbWVudHMgbm90IHN1cHBvcnRlZC4gIElnbm9yaW5nIC1mIG9wdGlvblxuIgorI34gbXNnc3RyICJD4bqjbmggYsOhbzoga2jDtG5nIGjhu5cgdHLhu6MgxJFv4bqhbiBuw6puIGLhu48gcXVhIHTDuXkgY2jhu41uIOKAnC1m4oCdXG4iCisKKyN+IG1zZ2lkICJDYWxsaW5nIEJMS0RJU0NBUkQgZnJvbSAlbGx1IHRvICVsbHUgIgorI34gbXNnc3RyICLEkGFuZyBn4buNaSBCTEtESVNDQVJEIHThu6sgJWxsdSDEkeG6v24gJWxsdSAiCisKKyN+IG1zZ2lkICJzdWNjZWVkZWQuXG4iCisjfiBtc2dzdHIgIsSRw6MgdGjDoG5oIGPDtG5nLlxuIgorCisjfiBtc2dpZCAiSm91cm5hbCBOT1QgcmVtb3ZlZFxuIgorI34gbXNnc3RyICJDSMavQSBn4buhIGLhu48gbmjhuq10IGvDvVxuIgorCisjfiBtc2dpZCAiI1x0XHQgJXUgLT4gJXUgKCVkKVxuIgorI34gbXNnc3RyICIjXHRcdCAldSAtPiAldSAoJWQpXG4iCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vemhfQ04uZ21vIGIvZTJmc3Byb2dzL3BvL3poX0NOLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDZjZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3BvL3poX0NOLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcG8vemhfQ04ucG8gYi9lMmZzcHJvZ3MvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkZGQzMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9wby96aF9DTi5wbwpAQCAtMCwwICsxLDYyNzAgQEAKKyMgQ2hpbmVzZSAoc2ltcGxpZmllZCkgdHJhbnNsYXRpb24gZm9yIGUyZnNwcm9ncy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGUyZnNwcm9ncyBwYWNrYWdlLgorIyBEYXJrIFJhdmVuIDxkcmRhcmtyYXZlbkBnbWFpbC5jb20+LCAyMDA5LCAyMDEwLCAyMDExCisjCisjLiBUaGUgc3RyaW5ncyBpbiBlMmZzY2sncyBwcm9ibGVtLmMgY2FuIGJlIHZlcnkgaGFyZCB0byB0cmFuc2xhdGUsCisjLiBzaW5jZSB0aGUgc3RyaW5ncyBhcmUgZXhwYW5kZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAorIy4gdGhlcmUgaXMgYW4gQC1leHBhbnNpb24sIHdoZXJlIHN0cmluZ3MgbGlrZSAiQGkiIGFyZSBleHBhbmRlZCB0bworIy4gImlub2RlIiwgYW5kIHNvIG9uLiAgSW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRyYW5zbGF0b3JzLCB0aGUKKyMuIGUyZnNwcm9ncyBwbyB0ZW1wbGF0ZSBmaWxlIGhhcyBiZWVuIGVuaGFuY2VkIHdpdGggY29tbWVudHMgdGhhdCBzaG93CisjLiB0aGUgQC1leHBhbnNpb24sIGZvciB0aGUgc3RyaW5ncyBpbiB0aGUgcHJvYmxlbS5jIGZpbGUuCisjLgorIy4gVHJhbnNsYXRvcnMgYXJlIGZyZWUgdG8gdXNlIHRoZSBALWV4cGFuc2lvbiBmYWNpbGl0eSBpZiB0aGV5IHNvCisjLiBjaG9vc2UsIGJ5IHByb3ZpZGluZyB0cmFuc2xhdGlvbnMgZm9yIHN0cmluZ3MgaW4gZTJmc2NrL21lc3NhZ2UuYy4KKyMuIFRoZXNlIHRyYW5zbGF0aW9uIGNhbiBjb21wbGV0ZWx5IHJlcGxhY2UgYW4gZXhwYW5zaW9uOyBmb3IgZXhhbXBsZSwKKyMuIGlmICJiYmxvY2siICh3aGljaCBpbmRpY2F0ZWQgdGhhdCAiQGIiIHdvdWxkIGJlIGV4cGFuZGVkIHRvICJibG9jayIpCisjLiBpcyB0cmFuc2xhdGVkIGFzICJkZGF0ZW52ZXJsdXN0IiwgdGhlbiAiQGQiIHdpbGwgYmUgZXhwYW5kZWQgdG8KKyMuICJkYXRlbnZlcmx1c3QiLiAgQWx0ZXJuYXRpdmVseSwgdHJhbnNsYXRvcnMgY2FuIHNpbXBseSBub3QgdXNlIHRoZQorIy4gQC1leHBhbnNpb24gZmFjaWxpdHkgYXQgYWxsLgorIy4KKyMuIFRoZSBzZWNvbmQgZXhwYW5zaW9uIHdoaWNoIGlzIGRvbmUgZm9yIGUyZnNjaydzIHByb2JsZW0uYyBtZXNzYWdlcyBpcworIy4gYSBkeW5hbWljICUtZXhwYW5zaW9uLCB3aGljaCBleHBhbmRzICVpIGFzIGFuIGlub2RlIG51bWJlciwgYW5kIHNvCisjLiBvbi4gIEEgdGFibGUgb2YgdGhlc2UgZXhwYW5zaW9ucyBjYW4gYmUgZm91bmQgYmVsb3cuICBOb3RlIHRoYXQKKyMuICUtZXhwcmVzc2lvbnMgdGhhdCBiZWdpbiB3aXRoICIlRCIgYW5kICIlSSIgYXJlIHR3by1jaGFyYWN0ZXIKKyMuIGV4cGFuc2lvbnM7IHNvIGZvciBleGFtcGxlLCAiJUl1IiBleHBhbmRzIHRvIHRoZSBpbm9kZSdzIHVzZXIgaWQKKyMuIG93bmVyc2hpcCBmaWVsZCAoaW5vZGUtPmlfdWlkKS4KKyMuICAKKyMuIAklYgk8YmxrPgkJCWJsb2NrIG51bWJlcgorIy4gCSVCCTxibGtjb3VudD4JCWludGVnZXIKKyMuIAklYwk8YmxrMj4JCQlibG9jayBudW1iZXIKKyMuIAklRGkJPGRpcmVudD4gLT4gaW5vCQlpbm9kZSBudW1iZXIKKyMuIAklRG4JPGRpcmVudD4gLT4gbmFtZQlzdHJpbmcKKyMuIAklRHIJPGRpcmVudD4gLT4gcmVjX2xlbgorIy4gCSVEbAk8ZGlyZW50PiAtPiBuYW1lX2xlbgorIy4gCSVEdAk8ZGlyZW50PiAtPiBmaWxldHlwZQorIy4gCSVkCTxkaXI+IAkJCWlub2RlIG51bWJlcgorIy4gCSVnCTxncm91cD4JCQlpbnRlZ2VyCisjLiAJJWkJPGlubz4JCQlpbm9kZSBudW1iZXIKKyMuIAklSXMJPGlub2RlPiAtPiBpX3NpemUKKyMuIAklSVMJPGlub2RlPiAtPiBpX2V4dHJhX2lzaXplCisjLiAJJUliCTxpbm9kZT4gLT4gaV9ibG9ja3MKKyMuIAklSWwJPGlub2RlPiAtPiBpX2xpbmtzX2NvdW50CisjLiAJJUltCTxpbm9kZT4gLT4gaV9tb2RlCisjLiAJJUlNCTxpbm9kZT4gLT4gaV9tdGltZQorIy4gCSVJRgk8aW5vZGU+IC0+IGlfZmFkZHIKKyMuIAklSWYJPGlub2RlPiAtPiBpX2ZpbGVfYWNsCisjLiAJJUlkCTxpbm9kZT4gLT4gaV9kaXJfYWNsCisjLiAJJUl1CTxpbm9kZT4gLT4gaV91aWQKKyMuIAklSWcJPGlub2RlPiAtPiBpX2dpZAorIy4gCSVqCTxpbm8yPgkJCWlub2RlIG51bWJlcgorIy4gCSVtCTxjb21fZXJyIGVycm9yIG1lc3NhZ2U+CisjLiAJJU4JPG51bT4KKyMuIAklcAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiBkaXJlY3RvcnkgPGlubz4KKyMuIAklUAkJZXh0MmZzX2dldF9wYXRobmFtZSBvZiA8ZGlyZW50Pi0+aW5vIHdpdGggPGlubzI+IGFzCisjLiAJCQkJdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3J5LiAgKElmIGRpcmVudCBpcyBOVUxMCisjLiAJCQkJdGhlbiByZXR1cm4gdGhlIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSA8aW5vMj4pCisjLiAJJXEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxkaXI+CisjLiAJJVEJCWV4dDJmc19nZXRfcGF0aG5hbWUgb2YgZGlyZWN0b3J5IDxpbm8+IHdpdGggPGRpcj4gYXMKKyMuIAkJCQl0aGUgY29udGFpbmluZyBkaXJlY3RvcnkuCisjLiAJJXMJPHN0cj4JCQltaXNjZWxsYW5lb3VzIHN0cmluZworIy4gCSVTCQliYWNrdXAgc3VwZXJibG9jaworIy4gCSVYCTxudW0+CWhleGFkZWNpbWFsIGZvcm1hdAorIy4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGUyZnNwcm9ncy0xLjQxLjE0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IHR5dHNvQGFsdW0ubWl0LmVkdVxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA2LTEyIDE0OjQwLTA0MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTAxLTI2IDIxOjUzKzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERhcmsgUmF2ZW4gPGRyZGFya3JhdmVuQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDaGluZXNlIChzaW1wbGlmaWVkKSA8aTE4bi16aEBnb29nbGVncm91cHMuY29tPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBDaGluZXNlXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogQ0hJTkFcbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjIzIG1pc2MvbWtlMmZzLmM6MTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9jayAldSBvdXQgb2YgcmFuZ2U7IGlnbm9yZWQuXG4iCittc2dzdHIgIuWdj+WdlyV16LaF5Ye66IyD5Zu0O+W/veeVpS5cbiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjQ2Cittc2dpZCAid2hpbGUgc2FuaXR5IGNoZWNraW5nIHRoZSBiYWQgYmxvY2tzIGlub2RlIgorbXNnc3RyICLlnKjlr7nlnY/lnZdpbm9kZei/m+ihjOS4gOiHtOaAp+ajgOmqjOaYryIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjU4Cittc2dpZCAid2hpbGUgcmVhZGluZyB0aGUgYmFkIGJsb2NrcyBpbm9kZSIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo3MiBlMmZzY2svaXNjYW4uYzoxMTAgZTJmc2NrL3NjYW50ZXN0LmM6MTA3CisjOiBlMmZzY2svdW5peC5jOjEyOTggZTJmc2NrL3VuaXguYzoxMzg2IG1pc2MvYmFkYmxvY2tzLmM6MTIxNAorIzogbWlzYy9iYWRibG9ja3MuYzoxMjIyIG1pc2MvYmFkYmxvY2tzLmM6MTIzNiBtaXNjL2JhZGJsb2Nrcy5jOjEyNDgKKyM6IG1pc2MvZHVtcGUyZnMuYzo1ODggbWlzYy9lMmltYWdlLmM6MTE4OSBtaXNjL2UyaW1hZ2UuYzoxMzA3CisjOiBtaXNjL2UyaW1hZ2UuYzoxMzIwIG1pc2MvbWtlMmZzLmM6MTkyIG1pc2MvdHVuZTJmcy5jOjE5MDcgcmVzaXplL21haW4uYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiCittc2dzdHIgIuW9k+WwneivleaJk+W8gCAlcyDml7YiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgcG9wZW4gJyVzJyIKK21zZ3N0ciAi5b2T5bCd6K+V5a+5ICclcycg6L+b6KGMcG9wZW7ml7YiCisKKyM6IGUyZnNjay9iYWRibG9ja3MuYzo5NCBtaXNjL21rZTJmcy5jOjE5OQorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW4gbGlzdCBvZiBiYWQgYmxvY2tzIGZyb20gZmlsZSIKK21zZ3N0ciAi5b2T5LuO5paH5Lu25Lit6K+75Y+W5Z2P5Z2X6KGo5pe2IgorCisjOiBlMmZzY2svYmFkYmxvY2tzLmM6MTA1Cittc2dpZCAid2hpbGUgdXBkYXRpbmcgYmFkIGJsb2NrIGlub2RlIgorbXNnc3RyICLlvZPmm7TmlrDlnY/lnZdpbm9kZeaXtiIKKworIzogZTJmc2NrL2JhZGJsb2Nrcy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBpbGxlZ2FsIGJsb2NrICV1IGZvdW5kIGluIGJhZCBibG9jayBpbm9kZS4gIENsZWFyZWQuXG4iCittc2dzdHIgIuitpuWRijrlnKjlnY/lnZdpbm9kZeS4reWPkeeOsOmdnuazleeahOWdlyV1LiAg5riF6ZmkLlxuIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAi6K+75Y+W5Z2XICVsdSAoJXMpIOmUmeivryAsICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGJsb2NrICVsdSAoJXMpLiAgIgorbXNnc3RyICLor7vlj5blnZcgJWx1ICglcykg6ZSZ6K+vIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzo2MSBlMmZzY2svZWhhbmRsZXIuYzoxMTAKK21zZ2lkICJJZ25vcmUgZXJyb3IiCittc2dzdHIgIuW/veeVpemUmeivryIKKworIzogZTJmc2NrL2VoYW5kbGVyLmM6NjIKK21zZ2lkICJGb3JjZSByZXdyaXRlIgorbXNnc3RyICLlvLrliLbopobnm5YiCisKKyM6IGUyZnNjay9laGFuZGxlci5jOjEwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKSB3aGlsZSAlcy4gICIKK21zZ3N0ciAi5YaZ5Z2XICVsdSAoJXMpIOWHuumUmSAsICVzLiAgIgorCisjOiBlMmZzY2svZWhhbmRsZXIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBibG9jayAlbHUgKCVzKS4gICIKK21zZ3N0ciAi5YaZ5Z2XICVsdSAoJXMpIOWHuumUmS4gICIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NTcKK21zZ2lkICJlbXB0eSBkaXJibG9ja3MiCittc2dzdHIgIuepuueahGRpcuWdlyIKKworIzogZTJmc2NrL2VtcHR5ZGlyLmM6NjIKK21zZ2lkICJlbXB0eSBkaXIgbWFwIgorbXNnc3RyICLnqbpBQ0zmmKDlsIQiCisKKyM6IGUyZnNjay9lbXB0eWRpci5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkVtcHR5IGRpcmVjdG9yeSBibG9jayAldSAoIyVkKSBpbiBpbm9kZSAldVxuIgorbXNnc3RyICLnqbrnm67lvZXlnZcgJXUgKCMlZCks5LqOIGlub2RlICV1IOS4rVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGZpbGVuYW1lIG5ibG9ja3MgYmxvY2tzaXplXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL2V4dGVuZC5jOjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIklsbGVnYWwgbnVtYmVyIG9mIGJsb2NrcyFcbiIKK21zZ3N0ciAi6Z2e5rOV55qE5Z2X5pWw6YePIVxuIgorCisjOiBlMmZzY2svZXh0ZW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgYmxvY2sgYnVmZmVyIChzaXplPSVkKVxuIgorbXNnc3RyICLml6Dms5XliIbphY3lnZfnvJPlrZggKOWkp+Wwjz0lZClcbiIKKworIzogZTJmc2NrL2ZsdXNoYi5jOjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBkaXNrXG4iCittc2dzdHIgIueUqOazlTogJXMgZGlza1xuIgorCisjOiBlMmZzY2svZmx1c2hiLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQkxLRkxTQlVGIGlvY3RsIG5vdCBzdXBwb3J0ZWQhICBDYW4ndCBmbHVzaCBidWZmZXJzLlxuIgorbXNnc3RyICLkuI3mlK/mjIHlr7lCTEtGTFNCVUbov5vooYwgaW9jdGwg6LCD55SoISAg5peg5rOV5Yi35paw57yT5a2YLlxuIgorCisjOiBlMmZzY2svaXNjYW4uYzo0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCittc2dzdHIgIueUqOazlTogJXMgWy1GXSBbLUkgaW5vZGVfYnVmZmVyX2Jsb2Nrc10gZGV2aWNlXG4iCisKKyM6IGUyZnNjay9pc2Nhbi5jOjgxIGUyZnNjay91bml4LmM6OTMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIGZvciBmbHVzaGluZyIKK21zZ3N0ciAi5b2T5Li65Yi35paw5omT5byA4oCcJXPigJ3ml7YiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjg2IGUyZnNjay91bml4LmM6OTM2IHJlc2l6ZS9tYWluLmM6Mjc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiCittc2dzdHIgIuW9k+WwneivleWIt+aWsCAlcyDml7YiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjExOSBlMmZzY2svc2NhbnRlc3QuYzoxMTQgbWlzYy9lMmltYWdlLmM6MTA4NAorbXNnaWQgIndoaWxlIG9wZW5pbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAi5Zyo5omT5byAaW5vZGXmiavmj4/ml7YiCisKKyM6IGUyZnNjay9pc2Nhbi5jOjEyNyBtaXNjL2UyaW1hZ2UuYzoxMTAyCittc2dpZCAid2hpbGUgZ2V0dGluZyBuZXh0IGlub2RlIgorbXNnc3RyICLlvZPojrflj5bkuIvkuIDkuKppbm9kZeaXtiIKKworIzogZTJmc2NrL2lzY2FuLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGlub2RlcyBzY2FubmVkLlxuIgorbXNnc3RyICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjUxMgorbXNnaWQgInJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrXG4iCittc2dzdHIgIuivu+WPluaXpeW/l+i2hee6p+Wdl1xuIgorCisjOiBlMmZzY2svam91cm5hbC5jOjU2OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbm8gdmFsaWQgam91cm5hbCBzdXBlcmJsb2NrIGZvdW5kXG4iCittc2dzdHIgIiVzOiDmsqHmnInlj5HnjrDml6Xlv5fotoXnuqflnZdcbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo1NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGpvdXJuYWwgdG9vIHNob3J0XG4iCittc2dzdHIgIiVzOiDml6Xlv5fov4fnn61cbiIKKworIzogZTJmc2NrL2pvdXJuYWwuYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHJlY292ZXJpbmcgam91cm5hbFxuIgorbXNnc3RyICIlczog5q2j5Zyo5L+u5aSN5pel5b+XXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3b24ndCBkbyBqb3VybmFsIHJlY292ZXJ5IHdoaWxlIHJlYWQtb25seVxuIgorbXNnc3RyICIlczog5L2/55So5Y+q6K+75qih5byP5pe25LiN5Lya6L+b6KGM5pel5b+X5L+u5aSNXG4iCisKKyM6IGUyZnNjay9qb3VybmFsLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZS1vcGVuICVzIgorbXNnc3RyICLlnKjlsJ3or5Xph43mlrDmiZPlvIAgJXMg5pe2IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExMworbXNnaWQgImFleHRlbmRlZCBhdHRyaWJ1dGUiCittc2dzdHIgImHmianlsZXlsZ7mgKciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE0Cittc2dpZCAiQWVycm9yIGFsbG9jYXRpbmciCittc2dzdHIgIkHliIbphY3lh7rplJkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE1Cittc2dpZCAiYmJsb2NrIgorbXNnc3RyICJi5Z2XIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExNgorbXNnaWQgIkJiaXRtYXAiCittc2dzdHIgIkLkvY3lm74iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE3Cittc2dpZCAiY2NvbXByZXNzIgorbXNnc3RyICJj5Y6L57ypIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjExOAorbXNnaWQgIkNjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIEBiIgorbXNnc3RyICJD5LiO5YW25LuW5paH5Lu257O757ufQGLlhrLnqoEiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTE5Cittc2dpZCAiaWlub2RlIgorbXNnc3RyICJpaW5vZGUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIwCittc2dpZCAiSWlsbGVnYWwiCittc2dzdHIgIknpnZ7ms5XnmoQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIxCittc2dpZCAiampvdXJuYWwiCittc2dzdHIgImrml6Xlv5ciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIyCittc2dpZCAiRGRlbGV0ZWQiCittc2dzdHIgIkTliKDpmaQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTIzCittc2dpZCAiZGRpcmVjdG9yeSIKK21zZ3N0ciAiZOebruW9lSIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjQKK21zZ2lkICJlZW50cnkiCittc2dzdHIgImXlhaXlj6MiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI1Cittc2dpZCAiRUBlICclRG4nIGluICVwICglaSkiCittc2dzdHIgIkXlnKggJXAgKCVpKSDkuK3nmoRAZSAnJURuJyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjYKK21zZ2lkICJmZmlsZXN5c3RlbSIKK21zZ3N0ciAiZuaWh+S7tuezu+e7nyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjcKK21zZ2lkICJGZm9yIEBpICVpICglUSkgaXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMjgKK21zZ2lkICJnZ3JvdXAiCittc2dzdHIgImfnsIciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTI5Cittc2dpZCAiaEhUUkVFIEBkIEBpIgorbXNnc3RyICJoSFRSRUVAZEBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMAorbXNnaWQgImxsb3N0K2ZvdW5kIgorbXNnc3RyICJsbG9zdCtmb3VuZCIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzEKK21zZ2lkICJMaXMgYSBsaW5rIgorbXNnc3RyICJM5piv5LiA5Liq6ZO+5o6lIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzMgorbXNnaWQgIm1tdWx0aXBseS1jbGFpbWVkIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTMzCittc2dpZCAibmludmFsaWQiCittc2dzdHIgIm7ml6DmlYjnmoQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM0Cittc2dpZCAib29ycGhhbmVkIgorbXNnc3RyICLlraTnq4vnmoQiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM1Cittc2dpZCAicHByb2JsZW0gaW4iCittc2dzdHIgIumXrumimOWHuuS6jiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzYKK21zZ2lkICJxcXVvdGEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxMzcKK21zZ2lkICJycm9vdCBAaSIKK21zZ3N0ciAicuaguUBpIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjEzOAorbXNnaWQgInNzaG91bGQgYmUiCittc2dzdHIgInPlupTkuLoiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTM5Cittc2dpZCAiU3N1cGVyQGIiCittc2dzdHIgIlPotoXnuqdAYiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNDAKK21zZ2lkICJ1dW5hdHRhY2hlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE0MQorbXNnaWQgInZkZXZpY2UiCittc2dzdHIgInborr7lpIciCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQyCisjLCBmdXp6eQorbXNnaWQgInhleHRlbnQiCittc2dzdHIgInjnqIvluqYiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTQzCittc2dpZCAienplcm8tbGVuZ3RoIgorbXNnc3RyICJ66Zu26ZW/5bqmIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NAorbXNnaWQgIjxUaGUgTlVMTCBpbm9kZT4iCittc2dzdHIgIjznqbrnmoQgaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NQorbXNnaWQgIjxUaGUgYmFkIGJsb2NrcyBpbm9kZT4iCittc2dzdHIgIjzlnY/lnZcgaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE1NworIywgZnV6enkKK21zZ2lkICI8VGhlIHVzZXIgcXVvdGEgaW5vZGU+IgorbXNnc3RyICI85pel5b+XIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNTgKKyMsIGZ1enp5Cittc2dpZCAiPFRoZSBncm91cCBxdW90YSBpbm9kZT4iCittc2dzdHIgIjznu4Tmj4/ov7DnrKZpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTU5Cittc2dpZCAiPFRoZSBib290IGxvYWRlciBpbm9kZT4iCittc2dzdHIgIjzlkK/liqjlmaggaW5vZGU+IgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjE2MAorbXNnaWQgIjxUaGUgdW5kZWxldGUgZGlyZWN0b3J5IGlub2RlPiIKK21zZ3N0ciAiPOacquWIoOmZpOeahOebruW9lSBpbm9kZT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTYxCittc2dpZCAiPFRoZSBncm91cCBkZXNjcmlwdG9yIGlub2RlPiIKK21zZ3N0ciAiPOe7hOaPj+i/sOespmlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjIKK21zZ2lkICI8VGhlIGpvdXJuYWwgaW5vZGU+IgorbXNnc3RyICI85pel5b+XIGlub2RlPiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzoxNjMKK21zZ2lkICI8UmVzZXJ2ZWQgaW5vZGUgOT4iCittc2dzdHIgIjzkv53nlZnnmoQgaW5vZGUgOT4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MTY0Cittc2dpZCAiPFJlc2VydmVkIGlub2RlIDEwPiIKK21zZ3N0ciAiPOS/neeVmeeahCBpbm9kZSAxMD4iCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzMzCittc2dpZCAicmVndWxhciBmaWxlIgorbXNnc3RyICLkuIDoiKzmlofku7YiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM1Cittc2dpZCAiZGlyZWN0b3J5IgorbXNnc3RyICLmlofku7blpLkiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzM3Cittc2dpZCAiY2hhcmFjdGVyIGRldmljZSIKK21zZ3N0ciAi5a2X56ym6K6+5aSHIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjMzOQorbXNnaWQgImJsb2NrIGRldmljZSIKK21zZ3N0ciAi5Z2X6K6+5aSHIgorCisjOiBlMmZzY2svbWVzc2FnZS5jOjM0MQorbXNnaWQgIm5hbWVkIHBpcGUiCittc2dzdHIgIuWRveWQjeeuoemBkyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDMKK21zZ2lkICJzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLnrKblj7fpk77mjqUiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6MzQ1IG1pc2MvdXVpZGQuYzoxNjEKK21zZ2lkICJzb2NrZXQiCittc2dzdHIgIuWll+aOpeWtlyIKKworIzogZTJmc2NrL21lc3NhZ2UuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBmaWxlIHR5cGUgd2l0aCBtb2RlIDAlbyIKK21zZ3N0ciAi5qih5byP5Li6IDAlbyDnmoTmnKrnn6Xmlofku7bnsbvlnosiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDIzCittc2dpZCAiaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjUKK21zZ2lkICJkb3VibGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjcKK21zZ2lkICJ0cmlwbGUgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogZTJmc2NrL21lc3NhZ2UuYzo0MjkKK21zZ2lkICJ0cmFuc2xhdG9yIGJsb2NrIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9tZXNzYWdlLmM6NDMxCittc2dpZCAiYmxvY2sgIyIKK21zZ3N0ciAi5Z2XICMiCisKKyM6IGUyZnNjay9wYXNzMWIuYzoyMjIKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGlub2RlIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczFiLmM6NjEwIGUyZnNjay9wYXNzMWIuYzo3MjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjYW4ndCBmaW5kIGR1cF9ibGsgZm9yICVsbHVcbiIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+v77yaIOaXoOazleaJvuWIsCAldSDnmoQgZHVvX2Jsa1xuIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODIwCittc2dpZCAicmV0dXJuZWQgZnJvbSBjbG9uZV9maWxlX2Jsb2NrIgorbXNnc3RyICLku44gY2xvbmVfZmlsZV9ibG9jayDkuK3ov5Tlm54iCisKKyM6IGUyZnNjay9wYXNzMWIuYzo4NDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgYmxvY2sgcmVjb3JkIGZvciAlbGx1IgorbXNnc3RyICLlhoXpg6jplJnor6/vvJog5peg5rOV5om+5YiwICV1IOeahEVB5Z2X6K6w5b2VIgorCisjOiBlMmZzY2svcGFzczFiLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVybmFsIGVycm9yOiBjb3VsZG4ndCBsb29rdXAgRUEgaW5vZGUgcmVjb3JkIGZvciAldSIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+v77yaIOaXoOazleaJvuWIsCAldSDnmoRFQeiKgueCueiusOW9lSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NDc2IGUyZnNjay9wYXNzMi5jOjc4MgorbXNnaWQgInJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrIgorbXNnc3RyICLmraPlnKjor7vlj5bnm67lvZXlnZciCisKKyM6IGUyZnNjay9wYXNzMS5jOjU5OQorbXNnaWQgImluLXVzZSBpbm9kZSBtYXAiCittc2dzdHIgIuS9v+eUqOS4reeahGlub2Rl5pig5bCEIgorCisjOiBlMmZzY2svcGFzczEuYzo2MTAKK21zZ2lkICJkaXJlY3RvcnkgaW5vZGUgbWFwIgorbXNnc3RyICLnm67lvZVpbm9kZeaYoOWwhCIKKworIzogZTJmc2NrL3Bhc3MxLmM6NjIwCittc2dpZCAicmVndWxhciBmaWxlIGlub2RlIG1hcCIKK21zZ3N0ciAi5pmu6YCa5paH5Lu2aW5vZGXmmKDlsIQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjYyOQorbXNnaWQgImluLXVzZSBibG9jayBtYXAiCittc2dzdHIgIuS9v+eUqOS4reeahOWdl+aYoOWwhCIKKworIzogZTJmc2NrL3Bhc3MxLmM6Njk2Cittc2dpZCAib3BlbmluZyBpbm9kZSBzY2FuIgorbXNnc3RyICLmiZPlvIBpbm9kZeaJq+aPj+S4rSIKKworIzogZTJmc2NrL3Bhc3MxLmM6NzMwCittc2dpZCAiZ2V0dGluZyBuZXh0IGlub2RlIGZyb20gc2NhbiIKK21zZ3N0ciAi5q2j5Zyo6I635Y+W5omr5o+P5Lit55qE5LiL5LiA5LiqaW5vZGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyNDAKK21zZ2lkICJQYXNzIDEiCittc2dzdHIgIuesrDHmraUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgJXUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3MxLmM6MTM0NworbXNnaWQgImJhZCBpbm9kZSBtYXAiCittc2dzdHIgIumUmeivr+eahGlub2Rl5pig5bCEIgorCisjOiBlMmZzY2svcGFzczEuYzoxMzcwCittc2dpZCAiaW5vZGUgaW4gYmFkIGJsb2NrIG1hcCIKK21zZ3N0ciAi6ZSZ6K+v5Z2X5pig5bCE5Lit55qEaW5vZGUiCisKKyM6IGUyZnNjay9wYXNzMS5jOjEzOTAKK21zZ2lkICJpbWFnaWMgaW5vZGUgbWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjE0MTcKK21zZ2lkICJtdWx0aXBseSBjbGFpbWVkIGJsb2NrIG1hcCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcGFzczEuYzoxNTE4Cittc2dpZCAiZXh0IGF0dHIgYmxvY2sgbWFwIgorbXNnc3RyICJleHQgYXR0ciDlnZfmmKDlsIQiCisKKyM6IGUyZnNjay9wYXNzMS5jOjIyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTZsdSglYyk6IGV4cGVjdGluZyAlNmx1IGdvdCBwaHlzICU2bHUgKGJsa2NudCAlbGxkKVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMS5jOjI2MjcKK21zZ2lkICJibG9jayBiaXRtYXAiCittc2dzdHIgIuWdl+S9jeWbviIKKworIzogZTJmc2NrL3Bhc3MxLmM6MjYzMworbXNnaWQgImlub2RlIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUg5L2N5Zu+IgorCisjOiBlMmZzY2svcGFzczEuYzoyNjM5Cittc2dpZCAiaW5vZGUgdGFibGUiCittc2dzdHIgImlub2Rl6KGoIgorCisjOiBlMmZzY2svcGFzczIuYzoyODMKK21zZ2lkICJQYXNzIDIiCittc2dzdHIgIuesrDLmraUiCisKKyM6IGUyZnNjay9wYXNzMi5jOjgwNQorbXNnaWQgIkNhbiBub3QgY29udGludWUuIgorbXNnc3RyICLml6Dms5Xnu6fnu60uIgorCisjOiBlMmZzY2svcGFzczMuYzo3NworbXNnaWQgImlub2RlIGRvbmUgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wYXNzMy5jOjg2Cittc2dpZCAiUGVhayBtZW1vcnkiCittc2dzdHIgIuWGheWtmOWzsOWAvCIKKworIzogZTJmc2NrL3Bhc3MzLmM6MTM2Cittc2dpZCAiUGFzcyAzIgorbXNnc3RyICLnrKwz5q2lIgorCisjOiBlMmZzY2svcGFzczMuYzozMjIKK21zZ2lkICJpbm9kZSBsb29wIGRldGVjdGlvbiBiaXRtYXAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Bhc3M0LmM6MTk1Cittc2dpZCAiUGFzcyA0IgorbXNnc3RyICLnrKw05q2lIgorCisjOiBlMmZzY2svcGFzczUuYzo3NAorbXNnaWQgIlBhc3MgNSIKK21zZ3N0ciAi56ysNeatpSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MQorIywgZnV6enkKK21zZ2lkICIobm8gcHJvbXB0KSIKK21zZ3N0ciAiKOayoeacieaPkOekuikiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTIKK21zZ2lkICJGaXgiCittc2dzdHIgIuWkhOeQhiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1MworbXNnaWQgIkNsZWFyIgorbXNnc3RyICLmuIXpmaQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQKK21zZ2lkICJSZWxvY2F0ZSIKK21zZ3N0ciAi6YeN5a6a5L2NIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1Cittc2dpZCAiQWxsb2NhdGUiCittc2dzdHIgIuWIhumFjSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo1NgorbXNnaWQgIkV4cGFuZCIKK21zZ3N0ciAi5omp5YWFIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3Cittc2dpZCAiQ29ubmVjdCB0byAvbG9zdCtmb3VuZCIKK21zZ3N0ciAi6L+e5o6l5YiwIC9sb3N0K2ZvdW5kIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjU4Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLliJvlu7oiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTkKK21zZ2lkICJTYWx2YWdlIgorbXNnc3RyICLkv67lpI0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjAKK21zZ2lkICJUcnVuY2F0ZSIKK21zZ3N0ciAi5oiq5patIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxCittc2dpZCAiQ2xlYXIgaW5vZGUiCittc2dzdHIgIua4heepumlub2RlIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyCittc2dpZCAiQWJvcnQiCittc2dzdHIgIuS4reaWrSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2MworbXNnaWQgIlNwbGl0IgorbXNnc3RyICLliIboo4IiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjQKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAi57un57utIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1Cittc2dpZCAiQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2NgorbXNnaWQgIkRlbGV0ZSBmaWxlIgorbXNnc3RyICLliKDpmaTmlofku7YiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NjcKKyMsIGZ1enp5Cittc2dpZCAiU3VwcHJlc3MgbWVzc2FnZXMiCittc2dzdHIgIuS4jeaYvuekuua2iOaBryIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo2OAorbXNnaWQgIlVubGluayIKK21zZ3N0ciAi6Kej6Zmk6ZO+5o6lIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjY5Cittc2dpZCAiQ2xlYXIgSFRyZWUgaW5kZXgiCittc2dzdHIgIua4heepuiBIVHJlZSDntKLlvJUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAKK21zZ2lkICJSZWNyZWF0ZSIKK21zZ3N0ciAi6YeN5bu6IgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5Cittc2dpZCAiKE5PTkUpIgorbXNnc3RyICIo56m6KSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MAorbXNnaWQgIkZJWEVEIgorbXNnc3RyICLlt7LlpITnkIYiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEKK21zZ2lkICJDTEVBUkVEIgorbXNnc3RyICLlt7LmuIXpmaQiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODIKK21zZ2lkICJSRUxPQ0FURUQiCittc2dzdHIgIuW3sumHjeWumuS9jSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4MworbXNnaWQgIkFMTE9DQVRFRCIKK21zZ3N0ciAi5bey5YiG6YWNIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg0Cittc2dpZCAiRVhQQU5ERUQiCittc2dzdHIgIuW3suaJqeWFhSIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo4NQorbXNnaWQgIlJFQ09OTkVDVEVEIgorbXNnc3RyICLlt7Lph43mlrDov57mjqUiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYKK21zZ2lkICJDUkVBVEVEIgorbXNnc3RyICLlt7LliJvlu7oiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcKK21zZ2lkICJTQUxWQUdFRCIKK21zZ3N0ciAi5bey5L+u5aSNIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4Cittc2dpZCAiVFJVTkNBVEVEIgorbXNnc3RyICLlt7LmiKrmlq0iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODkKKyMsIGZ1enp5Cittc2dpZCAiSU5PREUgQ0xFQVJFRCIKK21zZ3N0ciAiSU5PREUg5bey5riF6ZmkIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwCittc2dpZCAiQUJPUlRFRCIKK21zZ3N0ciAi5bey5Lit5patIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxCisjLCBmdXp6eQorbXNnaWQgIlNQTElUIgorbXNnc3RyICLliIboo4IiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTIKK21zZ2lkICJDT05USU5VSU5HIgorbXNnc3RyICLnu6fnu60iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTMKK21zZ2lkICJNVUxUSVBMWS1DTEFJTUVEIEJMT0NLUyBDTE9ORUQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NAorbXNnaWQgIkZJTEUgREVMRVRFRCIKK21zZ3N0ciAi5paH5Lu25bey5Yig6ZmkIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk1Cittc2dpZCAiU1VQUFJFU1NFRCIKK21zZ3N0ciAi56aB5q2iIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk2Cittc2dpZCAiVU5MSU5LRUQiCittc2dzdHIgIuW3slVubGluayIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo5NworbXNnaWQgIkhUUkVFIElOREVYIENMRUFSRUQiCittc2dzdHIgIkhUUkVF57Si5byV5bey5riF6ZmkIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk4Cittc2dpZCAiV0lMTCBSRUNSRUFURSIKK21zZ3N0ciAi5bCG5Lya6YeN5bu6IgorCisjLiBALWV4cGFuZGVkOiBibG9jayBiaXRtYXAgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcKK21zZ2lkICJAYiBAQiBmb3IgQGcgJWcgaXMgbm90IGluIEBnLiAgKEBiICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWcgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMQorbXNnaWQgIkBpIEBCIGZvciBAZyAlZyBpcyBub3QgaW4gQGcuICAoQGIgJWIpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgdGFibGUgZm9yIGdyb3VwICVnIGlzIG5vdCBpbiBncm91cC4gIChibG9jayAlYilcbgorIy4gQC1leHBhbmRlZDogV0FSTklORzogU0VWRVJFIERBVEEgTE9TUyBQT1NTSUJMRS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTYKK21zZ2lkICIiCisiQGkgdGFibGUgZm9yIEBnICVnIGlzIG5vdCBpbiBAZy4gIChAYiAlYilcbiIKKyJXQVJOSU5HOiBTRVZFUkUgREFUQSBMT1NTIFBPU1NJQkxFLlxuIgorbXNnc3RyICIiCisiQGclZ+eahEBp6KGo5LiN5ZyoQGfkuK3jgIIgKEBiICViKVxuIgorIuitpuWRiu+8muWPr+iDvemAoOaIkOS4pemHjeeahOaVsOaNruS4ouWkseOAglxuIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIHN1cGVyYmxvY2sgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbgorIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gKGFuZCBub3Qgc3dhcCBvciB1ZnMgb3Igc29tZXRoaW5nIGVsc2UpLCB0aGVuIHRoZSBzdXBlcmJsb2NrXG4KKyMuIEAtZXhwYW5kZWQ6IGlzIGNvcnJ1cHQsIGFuZCB5b3UgbWlnaHQgdHJ5IHJ1bm5pbmcgZTJmc2NrIHdpdGggYW4gYWx0ZXJuYXRlIHN1cGVyYmxvY2s6XG4KKyMuIEAtZXhwYW5kZWQ6ICAgICBlMmZzY2sgLWIgJVMgPGRldmljZT5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJUaGUgQFMgY291bGQgbm90IGJlIHJlYWQgb3IgZG9lcyBub3QgZGVzY3JpYmUgYSBjb3JyZWN0IGV4dDJcbiIKKyJAZi4gIElmIHRoZSBAdiBpcyB2YWxpZCBhbmQgaXQgcmVhbGx5IGNvbnRhaW5zIGFuIGV4dDJcbiIKKyJAZiAoYW5kIG5vdCBzd2FwIG9yIHVmcyBvciBzb21ldGhpbmcgZWxzZSksIHRoZW4gdGhlIEBTXG4iCisiaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgQFM6XG4iCisiICAgIGUyZnNjayAtYiAlUyA8QHY+XG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIGZpbGVzeXN0ZW0gc2l6ZSAoYWNjb3JkaW5nIHRvIHRoZSBzdXBlcmJsb2NrKSBpcyAlYiBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogVGhlIHBoeXNpY2FsIHNpemUgb2YgdGhlIGRldmljZSBpcyAlYyBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogRWl0aGVyIHRoZSBzdXBlcmJsb2NrIG9yIHRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbGlrZWx5IHRvIGJlIGNvcnJ1cHQhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxCittc2dpZCAiIgorIlRoZSBAZiBzaXplIChhY2NvcmRpbmcgdG8gdGhlIEBTKSBpcyAlYiBAYnNcbiIKKyJUaGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgQHYgaXMgJWMgQGJzXG4iCisiRWl0aGVyIHRoZSBAUyBvciB0aGUgcGFydGl0aW9uIHRhYmxlIGlzIGxpa2VseSB0byBiZSBjb3JydXB0IVxuIgorbXNnc3RyICIiCisiQGbnmoTlpKflsI8gKOS+neaNrkBTKSDkuLogJWIgQGJcbiIKKyLogIxAdueahOeJqeeQhuWkp+Wwj+S4uiAlYyBAYlxuIgorIkBT5oiW5YiG5Yy66KGo5Y+v6IO95bey6KKr5o2f5Z2P77yBXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgYmxvY2tfc2l6ZSA9ICViLCBmcmFnc2l6ZSA9ICVjLlxuCisjLiBALWV4cGFuZGVkOiBUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4KKyMuIEAtZXhwYW5kZWQ6IGZyb20gdGhlIGJsb2NrIHNpemUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4Cittc2dpZCAiIgorIkBTIEBiX3NpemUgPSAlYiwgZnJhZ3NpemUgPSAlYy5cbiIKKyJUaGlzIHZlcnNpb24gb2YgZTJmc2NrIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnQgc2l6ZXMgZGlmZmVyZW50XG4iCisiZnJvbSB0aGUgQGIgc2l6ZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGJsb2Nrc19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NQorbXNnaWQgIkBTIEBic19wZXJfZ3JvdXAgPSAlYiwgc2hvdWxkIGhhdmUgYmVlbiAlY1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgZmlyc3RfZGF0YV9ibG9jayA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwCittc2dpZCAiQFMgZmlyc3RfZGF0YV9AYiA9ICViLCBzaG91bGQgaGF2ZSBiZWVuICVjXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU1Cittc2dpZCAiIgorIkBmIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLlxuIgorIlxuIgorbXNnc3RyICIiCisiQGbnvLrlsJFVVUlE77yb5q2j5Zyo55Sf5oiQ5LiA5Liq44CCXG4iCisiXG4iCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydFxuIgorIm9mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnlcbiIKKyJydW5uaW5nIGUyZnNjayB3aXRoIHRoZSAnLWIgJVMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtXG4iCisibWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZFxuIgorInRoZSBiYWNrdXAgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMgbWF5IGJlIE9LLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IENvcnJ1cHRpb24gZm91bmQgaW4gc3VwZXJibG9jay4gICglcyA9ICVOKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkKK21zZ2lkICJDb3JydXB0aW9uIGZvdW5kIGluIEBTLiAgKCVzID0gJU4pLlxuIgorbXNnc3RyICLlnKhAU+S4reWPkeeOsOmUmeivry4gKCVzID0gJU4pLlxuIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBkZXRlcm1pbmluZyBzaXplIG9mIHRoZSBwaHlzaWNhbCBkZXZpY2U6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRldGVybWluaW5nIHNpemUgb2YgdGhlIHBoeXNpY2FsIEB2OiAlbVxuIgorbXNnc3RyICLlhrPlrprniannkIZAdueahOWkp+Wwj+WHuumUmSAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSBjb3VudCBpbiBzdXBlcmJsb2NrIGlzICVpLCBzaG91bGQgYmUgJWouXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTc5Cittc2dpZCAiQGkgY291bnQgaW4gQFMgaXMgJWksIEBzICVqLlxuIgorbXNnc3RyICJAU+S4reeahEBp6K6h5pWw5Li6ICVpLEBzICVqLlxuIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MworbXNnaWQgIlRoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuXG4iCittc2dzdHIgIkh1cmTns7vnu5/kuI3mlK/mjIFmaWxldHlwZeWKn+iDveOAglxuIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhhcyBhbiBpbnZhbGlkIGpvdXJuYWwgKGlub2RlICVpKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQFMgaGFzIGFuIEBuIEBqIChAaSAlaSkuXG4iCittc2dzdHIgIkBT5YyF5ZCrQG4gZXh0MyBAaihAaSAlaSkuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIG11bHRpcGxlIGZpbGVzeXN0ZW0gdXNlcnMgKHVuc3VwcG9ydGVkKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTMKK21zZ2lkICJFeHRlcm5hbCBAaiBoYXMgbXVsdGlwbGUgQGYgdXNlcnMgKHVuc3VwcG9ydGVkKS5cbiIKK21zZ3N0ciAi5aSW6YOoQGrlkIzml7bmnInlpJrkuKpAZuS9v+eUqCAo5LiN5pSv5oyBKeOAglxuIgorCisjLiBALWV4cGFuZGVkOiBDYW4ndCBmaW5kIGV4dGVybmFsIGpvdXJuYWxcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxOTgKK21zZ2lkICJDYW4ndCBmaW5kIGV4dGVybmFsIEBqXG4iCittc2dzdHIgIuaXoOazleaJvuWIsOWklumDqEBqXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgaGFzIGJhZCBzdXBlcmJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjAzCittc2dpZCAiRXh0ZXJuYWwgQGogaGFzIGJhZCBAU1xuIgorbXNnc3RyICLlpJbpg6hAauaciemUmeivr+eahEBTXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEV4dGVybmFsIGpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZpbGVzeXN0ZW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMDgKK21zZ2lkICJFeHRlcm5hbCBAaiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgQGZcbiIKK21zZ3N0ciAi5aSW6YOoQGrkuI3mlK/mjIHmraRAZlxuIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGpvdXJuYWwgc3VwZXJibG9jayBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbgorIy4gQC1leHBhbmRlZDogSXQgaXMgbGlrZWx5IHRoYXQgeW91ciBjb3B5IG9mIGUyZnNjayBpcyBvbGQgYW5kL29yIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGpvdXJuYWwgCisjLiBALWV4cGFuZGVkOiBmb3JtYXQuXG4KKyMuIEAtZXhwYW5kZWQ6IEl0IGlzIGFsc28gcG9zc2libGUgdGhlIGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIxMworbXNnaWQgIiIKKyJAZiBAaiBAUyBpcyB1bmtub3duIHR5cGUgJU4gKHVuc3VwcG9ydGVkKS5cbiIKKyJJdCBpcyBsaWtlbHkgdGhhdCB5b3VyIGNvcHkgb2YgZTJmc2NrIGlzIG9sZCBhbmQvb3IgZG9lc24ndCBzdXBwb3J0IHRoaXMgQGogIgorImZvcm1hdC5cbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBAaiBAUyBpcyBjb3JydXB0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBpcyBjb3JydXB0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyMQorbXNnaWQgIkBqIEBTIGlzIGNvcnJ1cHQuXG4iCittc2dzdHIgIkBqQFPlt7LmjZ/lnY8uXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzX2pvdXJuYWwgZmxhZyBpcyBjbGVhciwgYnV0IGEgam91cm5hbCAlcyBpcyBwcmVzZW50LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoYXNfQGogZmxhZyBpcyBjbGVhciwgYnV0IGEgQGogJXMgaXMgcHJlc2VudC5cbiIKK21zZ3N0ciAiQFPmsqHmnIloYXNfam91cm5hbOagh+W/l++8jOS9huaYr+WtmOWcqOS4gOS4qkBqICVz44CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBqb3VybmFsIGlzIHByZXNlbnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjMxCittc2dpZCAiQFMgbmVlZHNfcmVjb3ZlcnkgZmxhZyBpcyBzZXQsIGJ1dCBubyBAaiBpcyBwcmVzZW50LlxuIgorbXNnc3RyICJAU+aciW5lZWRzX3JlY292ZXJ55qCH5b+X77yM5L2G5piv5rKh5pyJQGrlrZjlnKjjgIJcbiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgam91cm5hbCBoYXMgZGF0YS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyMzYKK21zZ2lkICJAUyBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIGNsZWFyLCBidXQgQGogaGFzIGRhdGEuXG4iCittc2dzdHIgIkBT5rKh5pyJbmVlZHNfcmVjb3ZlcnnmoIflv5fvvIzkvYbmmK9AauS4reayoeacieaVsOaNruOAglxuIgorCisjLiBALWV4cGFuZGVkOiBDbGVhciBqb3VybmFsCisjOiBlMmZzY2svcHJvYmxlbS5jOjI0MQorIywgZnV6enkKK21zZ2lkICJDbGVhciBAaiIKK21zZ3N0ciAi5riF6ZmkQGoiCisKKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoyNDYgZTJmc2NrL3Byb2JsZW0uYzo2OTUKK21zZ2lkICJAZiBoYXMgZmVhdHVyZSBmbGFnKHMpIHNldCwgYnV0IGlzIGEgcmV2aXNpb24gMCBAZi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiAlcyBvcnBoYW5lZCBpbm9kZSAlaSAodWlkPSVJdSwgZ2lkPSVJZywgbW9kZT0lSW0sIHNpemU9JUlzKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1MQorbXNnaWQgIiVzIEBvIEBpICVpICh1aWQ9JUl1LCBnaWQ9JUlnLCBtb2RlPSVJbSwgc2l6ZT0lSXMpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaWxsZWdhbCAlQiAoJWIpIGZvdW5kIGluIG9ycGhhbmVkIGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI1NgorbXNnaWQgIkBJICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gb3JwaGFuZWQgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjYxCittc2dpZCAiQWxyZWFkeSBjbGVhcmVkICVCICglYikgZm91bmQgaW4gQG8gQGkgJWkuXG4iCittc2dzdHIgIuW3sue7j+a4hemZpOWcqEBvQGkgJWnkuK3nmoQlQiAoJWIp44CCXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlsbGVnYWwgb3JwaGFuZWQgaW5vZGUgJWkgaW4gc3VwZXJibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEkgQG8gQGkgJWkgaW4gQFMuXG4iCittc2dzdHIgIkBT5Lit5pyJQElAb0BpICVpLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsIGlub2RlICVpIGluIG9ycGhhbmVkIGlub2RlIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkBJIEBpICVpIGluIEBvIEBpIGxpc3QuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBzdXBlcmJsb2NrIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI3NgorbXNnaWQgIkBqIEBTIGhhcyBhbiB1bmtub3duIHJlYWQtb25seSBmZWF0dXJlIGZsYWcgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODEKK21zZ2lkICJAaiBAUyBoYXMgYW4gdW5rbm93biBpbmNvbXBhdGlibGUgZmVhdHVyZSBmbGFnIHNldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBqb3VybmFsIHZlcnNpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGUyZnNjay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoyODYKK21zZ2lkICJAaiB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlMmZzY2suXG4iCittc2dzdHIgImUyZnNja+S4jeaUr+aMgeatpEBq54mI5pysLlxuIgorCisjLiBALWV4cGFuZGVkOiBNb3Zpbmcgam91cm5hbCBmcm9tIC8lcyB0byBoaWRkZW4gaW5vZGUuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTW92aW5nIEBqIGZyb20gLyVzIHRvIGhpZGRlbiBAaS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBtb3Zpbmcgam91cm5hbDogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBtb3ZpbmcgQGo6ICVtXG4iCisiXG4iCittc2dzdHIgIiIKKyLnp7vliqhAauWHuumUmTogJW1cbiIKKyJcbiIKKworIy4gQC1leHBhbmRlZDogRm91bmQgaW52YWxpZCBWMiBqb3VybmFsIHN1cGVyYmxvY2sgZmllbGRzIChmcm9tIFYxIGpvdXJuYWwpLlxuCisjLiBALWV4cGFuZGVkOiBDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzAxCittc2dpZCAiIgorIkZvdW5kIEBuIFYyIEBqIEBTIGZpZWxkcyAoZnJvbSBWMSBAaikuXG4iCisiQ2xlYXJpbmcgZmllbGRzIGJleW9uZCB0aGUgVjEgQGogQFMuLi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSdW4gam91cm5hbCBhbnl3YXkKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzA3CisjLCBmdXp6eQorbXNnaWQgIlJ1biBAaiBhbnl3YXkiCittc2dzdHIgIuW8uuWItkBqIgorCisjLiBALWV4cGFuZGVkOiBSZWNvdmVyeSBmbGFnIG5vdCBzZXQgaW4gYmFja3VwIHN1cGVyYmxvY2ssIHNvIHJ1bm5pbmcgam91cm5hbCBhbnl3YXkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzEyCittc2dpZCAiUmVjb3ZlcnkgZmxhZyBub3Qgc2V0IGluIGJhY2t1cCBAUywgc28gcnVubmluZyBAaiBhbnl3YXkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzozMTcKK21zZ2lkICIiCisiQmFja2luZyB1cCBAaiBAaSBAYiBpbmZvcm1hdGlvbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzaXplX2lub2RlIGVuYWJsZWQsIGJ1dCBzX3Jlc2VydmVkX2dkdF9ibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaXMgJU47IHNob3VsZCBiZSB6ZXJvLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjMyMgorbXNnaWQgIiIKKyJAZiBkb2VzIG5vdCBoYXZlIHJlc2l6ZV9AaSBlbmFibGVkLCBidXQgc19yZXNlcnZlZF9nZHRfQGJzXG4iCisiaXMgJU47IEBzIHplcm8uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplX2lub2RlIG5vdCBlbmFibGVkLCBidXQgdGhlIHJlc2l6ZSBpbm9kZSBpcyBub24temVyby4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozMjgKK21zZ2lkICJSZXNpemVfQGkgbm90IGVuYWJsZWQsIGJ1dCB0aGUgcmVzaXplIEBpIGlzIG5vbi16ZXJvLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFJlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzMzCittc2dpZCAiUmVzaXplIEBpIG5vdCB2YWxpZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3QgbW91bnQgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzM4Cittc2dpZCAiIgorIkBTIGxhc3QgbW91bnQgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4KKyMuIEAtZXhwYW5kZWQ6IFx0bm93ID0gJVQpIGlzIGluIHRoZSBmdXR1cmUuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzQzCittc2dpZCAiIgorIkBTIGxhc3Qgd3JpdGUgdGltZSAoJXQsXG4iCisiXHRub3cgPSAlVCkgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGhpbnQgZm9yIGV4dGVybmFsIHN1cGVyYmxvY2sgc2hvdWxkIGJlICVYLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJAUyBoaW50IGZvciBleHRlcm5hbCBzdXBlcmJsb2NrIEBzICVYLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEFkZGluZyBkaXJoYXNoIGhpbnQgdG8gZmlsZXN5c3RlbS5cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MzUyCittc2dpZCAiIgorIkFkZGluZyBkaXJoYXNoIGhpbnQgdG8gQGYuXG4iCisiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgZGVzY3JpcHRvciAlZyBjaGVja3N1bSBpcyAlMDR4LCBzaG91bGQgYmUgJTA0eS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNTcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGNoZWNrc3VtIGlzICUwNHgsIHNob3VsZCBiZSAlMDR5LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgbWFya2VkIHVuaW5pdGlhbGl6ZWQgd2l0aG91dCBmZWF0dXJlIHNldC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgZGVzY3JpcHRvciAlZyBtYXJrZWQgdW5pbml0aWFsaXplZCB3aXRob3V0IGZlYXR1cmUgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwIGRlc2NyaXB0b3IgJWcgaGFzIGludmFsaWQgdW51c2VkIGlub2RlcyBjb3VudCAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNjcKK21zZ2lkICJAZyBkZXNjcmlwdG9yICVnIGhhcyBpbnZhbGlkIHVudXNlZCBpbm9kZXMgY291bnQgJWIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogTGFzdCBncm91cCBibG9jayBiaXRtYXAgdW5pbml0aWFsaXplZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzozNzIKK21zZ2lkICJMYXN0IEBnIEBiIEBCIHVuaW5pdGlhbGl6ZWQuICAiCittc2dzdHIgIuacgOWQjuS4gOS4qkBn55qEQGJAQuacquWIneWni+WMli4gICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCB0cmFuc2FjdGlvbiAlaSB3YXMgY29ycnVwdCwgcmVwbGF5IHdhcyBhYm9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MzgxCittc2dpZCAiVGhlIHRlc3RfZnMgZmxhZyBpcyBzZXQgKGFuZCBleHQ0IGlzIGF2YWlsYWJsZSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbgorIy4gQC1leHBhbmRlZDogXHQoYnkgbGVzcyB0aGFuIGEgZGF5LCBwcm9iYWJseSBkdWUgdG8gdGhlIGhhcmR3YXJlIGNsb2NrIGJlaW5nIGluY29ycmVjdGx5IAorIy4gQC1leHBhbmRlZDogc2V0KSAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM4NgorbXNnaWQgIiIKKyJAUyBsYXN0IG1vdW50IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldCkgICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBzdXBlcmJsb2NrIGxhc3Qgd3JpdGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLlxuCisjLiBALWV4cGFuZGVkOiBcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgCisjLiBALWV4cGFuZGVkOiBzZXQpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjM5MgorbXNnaWQgIiIKKyJAUyBsYXN0IHdyaXRlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZS5cbiIKKyJcdChieSBsZXNzIHRoYW4gYSBkYXksIHByb2JhYmx5IGR1ZSB0byB0aGUgaGFyZHdhcmUgY2xvY2sgYmVpbmcgaW5jb3JyZWN0bHkgIgorInNldCkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Mzk4Cittc2dpZCAiT25lIG9yIG1vcmUgQGIgQGcgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2V0dGluZyBmcmVlIGlub2RlcyBjb3VudCB0byAlaiAod2FzICVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQwMworbXNnaWQgIlNldHRpbmcgZnJlZSBAaXMgY291bnQgdG8gJWogKHdhcyAlaSlcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZyZWUgYmxvY2tzIGNvdW50IHRvICVjICh3YXMgJWIpXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDA4Cittc2dpZCAiU2V0dGluZyBmcmVlIEBicyBjb3VudCB0byAlYyAod2FzICViKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE1ha2luZyBxdW90YSBpbm9kZSAlaSAoJVEpIGhpZGRlbi5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo0MTMKK21zZ2lkICJNYWtpbmcgQHEgQGkgJWkgKCVRKSBoaWRkZW4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogc3VwZXJibG9jayBoYXMgaW52YWxpZCBNTVAgYmxvY2suICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDE4CisjLCBmdXp6eQorbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBibG9jay4gICIKK21zZ3N0ciAi5peg5pWI55qE5Z2X5aSn5bCPIC0gJXMiCisKKyMuIEAtZXhwYW5kZWQ6IHN1cGVyYmxvY2sgaGFzIGludmFsaWQgTU1QIG1hZ2ljLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyMworbXNnaWQgIkBTIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfb3BlbjI6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzo0MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX2NoZWNrX2Rlc2M6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDQwCittc2dpZCAiUGFzcyAxOiBDaGVja2luZyBAaXMsIEBicywgYW5kIHNpemVzXG4iCittc2dzdHIgIuesrOS4gOatpTog5qOA5p+lQGksQGIs5ZKM5aSn5bCPXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHJvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ0NAorbXNnaWQgIkByIGlzIG5vdCBhIEBkLiAgIgorbXNnc3RyICJAcuS4jeaYr+S4gOS4qkBkLiAgIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGhhcyBkdGltZSBzZXQgKHByb2JhYmx5IGR1ZSB0byBvbGQgbWtlMmZzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0NDkKK21zZ2lkICJAciBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzZXJ2ZWQgaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1NAorbXNnaWQgIlJlc2VydmVkIEBpICVpICglUSkgaGFzIEBuIG1vZGUuICAiCittc2dzdHIgIuS/neeVmeeahEBpICVpICglUSkg55qE5qih5byP5peg5pWILiAgIgorCisjLiBALWV4cGFuZGVkOiBkZWxldGVkIGlub2RlICVpIGhhcyB6ZXJvIGR0aW1lLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJARCBAaSAlaSBoYXMgemVybyBkdGltZS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIGEgemVyby1sZW5ndGggZGlyZWN0b3J5LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBhIEB6IEBkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnJ3MgYmxvY2sgYml0bWFwIGF0ICViIGNvbmZsaWN0cyB3aXRoIHNvbWUgb3RoZXIgZnMgYmxvY2suXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NDc0Cittc2dpZCAiQGcgJWcncyBAYiBAQiBhdCAlYiBAQy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ3OQorbXNnaWQgIkBnICVnJ3MgQGkgQEIgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBpbm9kZSB0YWJsZSBhdCAlYiBjb25mbGljdHMgd2l0aCBzb21lIG90aGVyIGZzIGJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjQ4NAorbXNnaWQgIkBnICVnJ3MgQGkgdGFibGUgYXQgJWIgQEMuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZ3JvdXAgJWcncyBibG9jayBiaXRtYXAgKCViKSBpcyBiYWQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDg5Cittc2dpZCAiQGcgJWcncyBAYiBAQiAoJWIpIGlzIGJhZC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZydzIGlub2RlIGJpdG1hcCAoJWIpIGlzIGJhZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo0OTQKK21zZ2lkICJAZyAlZydzIEBpIEBCICglYikgaXMgYmFkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX3NpemUgaXMgJUlzLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NDk5Cittc2dpZCAiQGkgJWksIGlfc2l6ZSBpcyAlSXMsIEBzICVOLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpLCBpX2Jsb2NrcyBpcyAlSWIsIHNob3VsZCBiZSAlTi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MDQKK21zZ2lkICJAaSAlaSwgaV9AYnMgaXMgJUliLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTA5Cittc2dpZCAiQEkgJUIgKCViKSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiAlQiAoJWIpIG92ZXJsYXBzIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaW4gaW5vZGUgJWkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NTE0Cittc2dpZCAiJUIgKCViKSBvdmVybGFwcyBAZiBtZXRhZGF0YSBpbiBAaSAlaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIkBpICVpIOS4reWMheWQq+mdnuazlUBiLiAgIgorCisjLiBALWV4cGFuZGVkOiBUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAlaS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgaWxsZWdhbCBAYnMgaW4gQGkgJWkuXG4iCittc2dzdHIgIkBpICVpIOS4reWMheWQq+S6hui/h+WkmueahOmdnuazlUBiLlxuIgorCisjLiBALWV4cGFuZGVkOiBpbGxlZ2FsICVCICglYikgaW4gYmFkIGJsb2NrIGlub2RlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjUyOQorbXNnaWQgIkBJICVCICglYikgaW4gYmFkIEBiIEBpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo1MzQKK21zZ2lkICJCYWQgQGIgQGkgaGFzIGlsbGVnYWwgQGIocykuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIG9yIGJhZCBibG9jayBpbiB1c2UhXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTM5Cittc2dpZCAiRHVwbGljYXRlIG9yIGJhZCBAYiBpbiB1c2UhXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmFkIGJsb2NrICViIHVzZWQgYXMgYmFkIGJsb2NrIGlub2RlIGluZGlyZWN0IGJsb2NrLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjU0NAorbXNnaWQgIkJhZCBAYiAlYiB1c2VkIGFzIGJhZCBAYiBAaSBpbmRpcmVjdCBAYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBcbgorIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBoYXMgcHJvYmFibHkgYmVlbiBjb3JydXB0ZWQuICBZb3UgcHJvYmFibHlcbgorIy4gQC1leHBhbmRlZDogc2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbgorIy4gQC1leHBhbmRlZDogaW4gdGhlIGZpbGVzeXN0ZW0uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTQ5Cittc2dpZCAiIgorIlxuIgorIlRoZSBiYWQgQGIgQGkgaGFzIHByb2JhYmx5IGJlZW4gY29ycnVwdGVkLiAgWW91IHByb2JhYmx5XG4iCisic2hvdWxkIHN0b3Agbm93IGFuZCBydW4gZTJmc2NrIC1jIHRvIHNjYW4gZm9yIGJhZCBibG9ja3NcbiIKKyJpbiB0aGUgQGYuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IElmIHRoZSBibG9jayBpcyByZWFsbHkgYmFkLCB0aGUgZmlsZXN5c3RlbSBjYW4gbm90IGJlIGZpeGVkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU1NgorbXNnaWQgIiIKKyJcbiIKKyJJZiB0aGUgQGIgaXMgcmVhbGx5IGJhZCwgdGhlIEBmIGNhbiBub3QgYmUgZml4ZWQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogWW91IGNhbiByZW1vdmUgdGhpcyBibG9jayBmcm9tIHRoZSBiYWQgYmxvY2sgbGlzdCBhbmQgaG9wZVxuCisjLiBALWV4cGFuZGVkOiB0aGF0IHRoZSBibG9jayBpcyByZWFsbHkgT0suICBCdXQgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU2MQorbXNnaWQgIiIKKyJZb3UgY2FuIHJlbW92ZSB0aGlzIEBiIGZyb20gdGhlIGJhZCBAYiBsaXN0IGFuZCBob3BlXG4iCisidGhhdCB0aGUgQGIgaXMgcmVhbGx5IE9LLiAgQnV0IHRoZXJlIGFyZSBubyBndWFyYW50ZWVzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFRoZSBwcmltYXJ5IHN1cGVyYmxvY2sgKCViKSBpcyBvbiB0aGUgYmFkIGJsb2NrIGxpc3QuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTY3Cittc2dpZCAiVGhlIHByaW1hcnkgQFMgKCViKSBpcyBvbiB0aGUgYmFkIEBiIGxpc3QuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgZ3JvdXAgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NTcyCittc2dpZCAiQmxvY2sgJWIgaW4gdGhlIHByaW1hcnkgQGcgZGVzY3JpcHRvcnMgaXMgb24gdGhlIGJhZCBAYiBsaXN0XG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBzdXBlcmJsb2NrICglYikgaXMgYmFkLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjU3OAorbXNnaWQgIldhcm5pbmc6IEdyb3VwICVnJ3MgQFMgKCViKSBpcyBiYWQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogV2FybmluZzogR3JvdXAgJWcncyBjb3B5IG9mIHRoZSBncm91cCBkZXNjcmlwdG9ycyBoYXMgYSBiYWQgYmxvY2sgKCViKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODMKK21zZ2lkICJXYXJuaW5nOiBHcm91cCAlZydzIGNvcHkgb2YgdGhlIEBnIGRlc2NyaXB0b3JzIGhhcyBhIGJhZCBAYiAoJWIpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFByb2dyYW1taW5nIGVycm9yPyAgYmxvY2sgIyViIGNsYWltZWQgZm9yIG5vIHJlYXNvbiBpbiBwcm9jZXNzX2JhZF9ibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1ODkKK21zZ2lkICJQcm9ncmFtbWluZyBlcnJvcj8gIEBiICMlYiBjbGFpbWVkIGZvciBubyByZWFzb24gaW4gcHJvY2Vzc19iYWRfQGIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyAlTiBjb250aWd1b3VzIGJsb2NrKHMpIGluIGJsb2NrIGdyb3VwICVnIGZvciAlczogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo1OTUKK21zZ2lkICJAQSAlTiBjb250aWd1b3VzIEBiKHMpIGluIEBiIEBnICVnIGZvciAlczogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGJsb2NrIGJ1ZmZlciBmb3IgcmVsb2NhdGluZyAlc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBAYiBidWZmZXIgZm9yIHJlbG9jYXRpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBSZWxvY2F0aW5nIGdyb3VwICVnJ3MgJXMgZnJvbSAlYiB0byAlYy4uLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYwNQorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyBmcm9tICViIHRvICVjLi4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVsb2NhdGluZyBncm91cCAlZydzICVzIHRvICVjLi4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbG9jYXRpbmcgQGcgJWcncyAlcyB0byAlYy4uLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCByZWFkIGJsb2NrICViIG9mICVzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYxNQorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCByZWFkIEBiICViIG9mICVzOiAlbVxuIgorbXNnc3RyICLorablkYo6IOaXoOazleS7jiVz5Lit6K+75Y+WQGIgJWI6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFdhcm5pbmc6IGNvdWxkIG5vdCB3cml0ZSBibG9jayAlYiBmb3IgJXM6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjIwCittc2dpZCAiV2FybmluZzogY291bGQgbm90IHdyaXRlIEBiICViIGZvciAlczogJW1cbiIKK21zZ3N0ciAi6K2m5ZGKOiDml6Dms5XlkJElc+S4reWGmeWFpUBiICViOiAlbVxuIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoJU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYyNSBlMmZzY2svcHJvYmxlbS5jOjE0NjAKK21zZ2lkICJAQSBAaSBAQiAoJU4pOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgYmxvY2sgYml0bWFwICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjMwCittc2dpZCAiQEEgQGIgQEIgKCVOKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGljb3VudCBsaW5rIGluZm9ybWF0aW9uOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjYzNQorIywgYy1mb3JtYXQKK21zZ2lkICJAQSBpY291bnQgbGluayBpbmZvcm1hdGlvbjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGRpcmVjdG9yeSBibG9jayBhcnJheTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgQGQgQGIgYXJyYXk6ICVtXG4iCittc2dzdHIgIuWIhumFjUBkQGLmlbDnu4Tml7blh7rplJk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHNjYW5uaW5nIGlub2RlcyAoJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBAaXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGl0ZXJhdGluZyBvdmVyIEBicyBpbiBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBzdG9yaW5nIGlub2RlIGNvdW50IGluZm9ybWF0aW9uIChpbm9kZT0laSwgY291bnQ9JU4pOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjY1NQorbXNnaWQgIkVycm9yIHN0b3JpbmcgQGkgY291bnQgaW5mb3JtYXRpb24gKEBpPSVpLCBjb3VudD0lTik6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igc3RvcmluZyBkaXJlY3RvcnkgYmxvY2sgaW5mb3JtYXRpb24gKGlub2RlPSVpLCBibG9jaz0lYiwgbnVtPSVOKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjAKK21zZ2lkICJFcnJvciBzdG9yaW5nIEBkIEBiIGluZm9ybWF0aW9uIChAaT0laSwgQGI9JWIsIG51bT0lTik6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo2NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAi6K+75Y+WQGkgJWnlh7rplJk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBpbWFnaWMgZmxhZyBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlICVpKSBoYXMgaW1tdXRhYmxlXG4KKyMuIEAtZXhwYW5kZWQ6IG9yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoQGkgJWkpIGhhcyBpbW11dGFibGVcbiIKKyJvciBhcHBlbmQtb25seSBmbGFnIHNldC4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgY29tcHJlc3Npb24gZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBAY2lvbiBmbGFnIHNldCBvbiBAZiB3aXRob3V0IEBjaW9uIHN1cHBvcnQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvKSBpbm9kZSAlaSBoYXMgbm9uLXplcm8gc2l6ZS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lhbCAoQHYvc29ja2V0L2ZpZm8pIEBpICVpIGhhcyBub24temVybyBzaXplLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGpvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzAwCittc2dpZCAiQGogQGkgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogam91cm5hbCBpcyBub3QgcmVndWxhciBmaWxlLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcwNQorbXNnaWQgIkBqIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBq5LiN5piv5pmu6YCa5paH5Lu2LiAgIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGkgJWkgd2FzIHBhcnQgb2YgdGhlIEBvIEBpIGxpc3QuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGVzIHRoYXQgd2VyZSBwYXJ0IG9mIGEgY29ycnVwdGVkIG9ycGhhbiBsaW5rZWQgbGlzdCBmb3VuZC4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3MTYKK21zZ2lkICJAaXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVycm9yIGFsbG9jYXRpbmcgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6NzIxCittc2dpZCAiQEEgcmVmY291bnQgc3RydWN0dXJlICglTik6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgcmVhZGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgZm9yIGlub2RlICVpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjcyNgorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGEgQGIgJWIgZm9yIEBpICVpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzMxCittc2dpZCAiQGkgJWkgaGFzIGEgYmFkIEBhIEBiICViLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViICglbSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzM2Cittc2dpZCAiRXJyb3IgcmVhZGluZyBAYSBAYiAlYiAoJW0pLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYiBoYXMgcmVmZXJlbmNlIGNvdW50ICVyLCBzaG91bGQgYmUgJU4uICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzQxCittc2dpZCAiQGEgQGIgJWIgaGFzIHJlZmVyZW5jZSBjb3VudCAlciwgQHMgJU4uICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3Igd3JpdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKCVtKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NDYKK21zZ2lkICJFcnJvciB3cml0aW5nIEBhIEBiICViICglbSkuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrICViIGhhcyBoX2Jsb2NrcyA+IDEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzUxCittc2dpZCAiQGEgQGIgJWIgaGFzIGhfQGJzID4gMS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlYi4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NTYKK21zZ2lkICJAQSBAYSBAYiAlYi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoYWxsb2NhdGlvbiBjb2xsaXNpb24pLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjc2MQorbXNnaWQgIkBhIEBiICViIGlzIGNvcnJ1cHQgKGFsbG9jYXRpb24gY29sbGlzaW9uKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCBuYW1lKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo3NjYKK21zZ2lkICJAYSBAYiAlYiBpcyBjb3JydXB0IChAbiBuYW1lKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgaXMgY29ycnVwdCAoaW52YWxpZCB2YWx1ZSkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzcxCittc2dpZCAiQGEgQGIgJWIgaXMgY29ycnVwdCAoQG4gdmFsdWUpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpIGlzIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGlzIHRvbyBiaWcuICAiCittc2dzdHIgIkBpICVpIOi/h+Wkpy4gICIKKworIy4gQC1leHBhbmRlZDogJUIgKCViKSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6NzgwCittc2dpZCAiJUIgKCViKSBjYXVzZXMgQGQgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc4NQorbXNnaWQgIiVCICglYikgY2F1c2VzIGZpbGUgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjc5MAorbXNnaWQgIiVCICglYikgY2F1c2VzIHN5bWxpbmsgdG8gYmUgdG9vIGJpZy4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgSU5ERVhfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6Nzk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGh0cmVlIHN1cHBvcnQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIElOREVYX0ZMIGZsYWcgc2V0IGJ1dCBpcyBub3QgYSBkaXJlY3RvcnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIGhhcyBJTkRFWF9GTCBmbGFnIHNldCBidXQgaXMgbm90IGEgQGQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIGhhcyBhbiBpbnZhbGlkIHJvb3Qgbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGggJWkgaGFzIGFuIEBuIHJvb3Qgbm9kZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODEwCittc2dpZCAiQGggJWkgaGFzIGFuIHVuc3VwcG9ydGVkIGhhc2ggdmVyc2lvbiAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogSFRSRUUgZGlyZWN0b3J5IGlub2RlICVpIHVzZXMgYW4gaW5jb21wYXRpYmxlIGh0cmVlIHJvb3Qgbm9kZSBmbGFnLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJAaCAlaSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGEgdHJlZSBkZXB0aCAoJU4pIHdoaWNoIGlzIHRvbyBiaWdcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MjAKK21zZ2lkICJAaCAlaSBoYXMgYSB0cmVlIGRlcHRoICglTikgd2hpY2ggaXMgdG9vIGJpZ1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBibG9jayBpbm9kZSBoYXMgYW4gaW5kaXJlY3QgYmxvY2sgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4KKyMuIEAtZXhwYW5kZWQ6IGZpbGVzeXN0ZW0gbWV0YWRhdGEuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6ODI1Cittc2dpZCAiIgorIkJhZCBAYiBAaSBoYXMgYW4gaW5kaXJlY3QgQGIgKCViKSB0aGF0IGNvbmZsaWN0cyB3aXRoXG4iCisiQGYgbWV0YWRhdGEuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVzaXplIGlub2RlIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzaXplIEBpIChyZSljcmVhdGlvbiBmYWlsZWQ6ICVtLiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4MzYKK21zZ2lkICJAaSAlaSBoYXMgYSBleHRyYSBzaXplICglSVMpIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIG5hbWVsZW4gKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODQxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgbmFtZWxlbiAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIG9mZnNldCAoJU4pIHdoaWNoIGlzIGludmFsaWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NDYKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBvZmZzZXQgKCVOKSB3aGljaCBpcyBAblxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAlaSBoYXMgYSB2YWx1ZSBibG9jayAoJU4pIHdoaWNoIGlzIGludmFsaWQgKG11c3QgYmUgMClcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo4NTEKK21zZ2lkICJAYSBpbiBAaSAlaSBoYXMgYSB2YWx1ZSBAYiAoJU4pIHdoaWNoIGlzIEBuIChtdXN0IGJlIDApXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIHZhbHVlIHNpemUgKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODU2Cittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgdmFsdWUgc2l6ZSAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlICVpIGhhcyBhIGhhc2ggKCVOKSB3aGljaCBpcyBpbnZhbGlkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODYxCittc2dpZCAiQGEgaW4gQGkgJWkgaGFzIGEgaGFzaCAoJU4pIHdoaWNoIGlzIEBuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaXMgYSAlSXQgYnV0IGl0IGxvb2tzIGxpa2UgaXQgaXMgcmVhbGx5IGEgZGlyZWN0b3J5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg2NgorbXNnaWQgIkBpICVpIGlzIGEgJUl0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgJWk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgb3ZlciBAeCB0cmVlIGluIEBpICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gaW5vZGUgJWlcbgorIy4gQC1leHBhbmRlZDogXHQob3AgJXMsIGJsayAlYiwgbGJsayAlYyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6ODc2Cittc2dpZCAiIgorIkZhaWxlZCB0byBpdGVyYXRlIGV4dGVudHMgaW4gQGkgJWlcbiIKKyJcdChvcCAlcywgYmxrICViLCBsYmxrICVjKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgaW52YWxpZCBwaHlzaWNhbCBibG9jayAlYiwgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4MgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgQG4gcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnRcbgorIy4gQC1leHBhbmRlZDogXHQobG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGludmFsaWQgbGVuICVOKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg4NworbXNnaWQgIiIKKyJAaSAlaSBoYXMgYW4gQG4gZXh0ZW50XG4iCisiXHQobG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIEBuIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBmaWxlc3lzdGVtIHdpdGhvdXQgZXh0ZW50cyBzdXBwb3J0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBoYXMgRVhURU5UU19GTCBmbGFnIHNldCBvbiBAZiB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgc3VwZXJibG9jayBpcyBtaXNzaW5nIEVYVEVOVFMgZmVhdHVyZVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJAaSAlaSBpcyBpbiBleHRlbnQgZm9ybWF0LCBidXQgQFMgaXMgbWlzc2luZyBFWFRFTlRTIGZlYXR1cmVcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkBpICVpIG1pc3NpbmcgRVhURU5UX0ZMLCBidXQgaXMgaW4gZXh0ZW50cyBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjkwNworIywgYy1mb3JtYXQKK21zZ2lkICJGYXN0IHN5bWxpbmsgJWkgaGFzIEVYVEVOVF9GTCBzZXQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4KKyMuIEAtZXhwYW5kZWQ6IFx0KGludmFsaWQgbG9naWNhbCBibG9jayAlYywgcGh5c2ljYWwgYmxvY2sgJWIsIGxlbiAlTilcbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MTIKK21zZ2lkICIiCisiQGkgJWkgaGFzIG91dCBvZiBvcmRlciBleHRlbnRzXG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIsIGxlbiAlTilcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSBoYXMgYW4gaW52YWxpZCBleHRlbnQgbm9kZSAoYmxrICViLCBsYmxrICVjKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjkxNgorbXNnaWQgIkBpICVpIGhhcyBhbiBpbnZhbGlkIGV4dGVudCBub2RlIChibGsgJWIsIGxibGsgJWMpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29udmVydGluZyBzdWJjbHVzdGVyIGJsb2NrIGJpdG1hcDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5MjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBAYiBAQjogJW1cbiIKK21zZ3N0ciAi5Yib5bu65qC5QGQgKCVzKSDml7blh7rplJk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHF1b3RhIGlub2RlIGlzIG5vdCByZWd1bGFyIGZpbGUuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTI2CisjLCBmdXp6eQorbXNnaWQgIkBxIEBpIGlzIG5vdCByZWd1bGFyIGZpbGUuICAiCittc2dzdHIgIkBq5LiN5piv5pmu6YCa5paH5Lu2LiAgIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzo5MzEKK21zZ2lkICJAcSBAaSBpcyBub3QgaW4gdXNlLCBidXQgY29udGFpbnMgZGF0YS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBxdW90YSBpbm9kZSBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjkzNgorbXNnaWQgIkBxIEBpIGlzIHZpc2libGUgdG8gdGhlIHVzZXIuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0MQorIywgZnV6enkKK21zZ2lkICJUaGUgYmFkIEBiIEBpIGxvb2tzIEBuLiAgIgorbXNnc3RyICI85Z2P5Z2XIGlub2RlPiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgaGFzIHplcm8gbGVuZ3RoIGV4dGVudFxuCisjLiBALWV4cGFuZGVkOiBcdChpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgJWMsIHBoeXNpY2FsIGJsb2NrICViKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk0NgorbXNnaWQgIiIKKyJAaSAlaSBoYXMgemVybyBsZW5ndGggZXh0ZW50XG4iCisiXHQoQG4gbG9naWNhbCBAYiAlYywgcGh5c2ljYWwgQGIgJWIpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXG4KKyMuIEAtZXhwYW5kZWQ6IFJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uXG4KKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUI6IFJlc2Nhbm5pbmcgZm9yIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTUzCittc2dpZCAiIgorIlxuIgorIlJ1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBAYnMgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIEBpLi4uXG4iCisiUGFzcyAxQjogUmVzY2FubmluZyBmb3IgQG0gQGJzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAlaToKKyM6IGUyZnNjay9wcm9ibGVtLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBtIEBiKHMpIGluIEBpICVpOiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjk3NAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzY2FubmluZyBpbm9kZXMgKCVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlcnJvciBhbGxvY2F0aW5nIGlub2RlIGJpdG1hcCAoaW5vZGVfZHVwX21hcCk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6OTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBBIEBpIEBCIChAaV9kdXBfbWFwKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3aGlsZSBpdGVyYXRpbmcgb3ZlciBibG9ja3MgaW4gaW5vZGUgJWkgKCVzKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgaXRlcmF0aW5nIG92ZXIgQGJzIGluIEBpICVpICglcyk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgJWIgKGlub2RlICVpKTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzo5ODkgZTJmc2NrL3Byb2JsZW0uYzoxMzA0Cittc2dpZCAiRXJyb3IgYWRqdXN0aW5nIHJlZmNvdW50IGZvciBAYSBAYiAlYiAoQGkgJWkpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjk5NAorbXNnaWQgIlBhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBAaXMgd2l0aCBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrc1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMDAKK21zZ2lkICJQYXNzIDFEOiBSZWNvbmNpbGluZyBAbSBAYnNcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGaWxlICVRIChpbm9kZSAjJWksIG1vZCB0aW1lICVJTSkgXG4KKyMuIEAtZXhwYW5kZWQ6ICAgaGFzICVyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAwNQorbXNnaWQgIiIKKyJGaWxlICVRIChAaSAjJWksIG1vZCB0aW1lICVJTSkgXG4iCisiICBoYXMgJXIgQG0gQGIocyksIHNoYXJlZCB3aXRoICVOIGZpbGUocyk6XG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogXHQlUSAoaW5vZGUgIyVpLCBtb2QgdGltZSAlSU0pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxMQorbXNnaWQgIlx0JVEgKEBpICMlaSwgbW9kIHRpbWUgJUlNKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFx0PGZpbGVzeXN0ZW0gbWV0YWRhdGE+XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTAxNgorbXNnaWQgIlx0PEBmIG1ldGFkYXRhPlxuIgorbXNnc3RyICJcdDxAZuWFg+aVsOaNrj5cbiIKKworIy4gQC1leHBhbmRlZDogKFRoZXJlIGFyZSAlTiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjEKK21zZ2lkICIiCisiKFRoZXJlIGFyZSAlTiBAaXMgY29udGFpbmluZyBAbSBAYnMuKVxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IG11bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4KKyMuIEAtZXhwYW5kZWQ6IFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwMjYKK21zZ2lkICIiCisiQG0gQGJzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNsb25lIGZpbGU6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA0NQorbXNnaWQgIlBhc3MgMjogQ2hlY2tpbmcgQGQgc3RydWN0dXJlXG4iCittc2dzdHIgIuesrOS6jOatpTog5qOA5p+l55uu5b2V57uT5p6EXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQG4gQGkgbnVtYmVyIGZvciAnLicgaW4gQGQgQGkgJWkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgaW52YWxpZCBpbm9kZSAjOiAlRGkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA1NQorbXNnaWQgIkBFIGhhcyBAbiBAaSAjOiAlRGkuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgJURpLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNjAKK21zZ2lkICJARSBoYXMgQEQvdW51c2VkIEBpICVEaS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byAnLicgIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDY1Cittc2dpZCAiQEUgQEwgdG8gJy4nICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBwb2ludHMgdG8gaW5vZGUgKCVEaSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDcwCittc2dpZCAiQEUgcG9pbnRzIHRvIEBpICglRGkpIGxvY2F0ZWQgaW4gYSBiYWQgQGIuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5ICVQICglRGkpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwNzUKK21zZ2lkICJARSBATCB0byBAZCAlUCAoJURpKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDgwCittc2dpZCAiQEUgQEwgdG8gdGhlIEByLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMDg1Cittc2dpZCAiQEUgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgJWkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcuJyBpbiBAZCBAaSAlaS5cbiIKK21zZ3N0ciAiQGRAaSAlaSDkuK3nvLrlsJEgJy4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlICVpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnLi4nIGluIEBkIEBpICVpLlxuIgorbXNnc3RyICJAZEBpICVpIOS4ree8uuWwkSAnLi4nLlxuIgorCisjLiBALWV4cGFuZGVkOiBGaXJzdCBlbnRyeSAnJURuJyAoaW5vZGU9JURpKSBpbiBkaXJlY3RvcnkgaW5vZGUgJWkgKCVwKSBzaG91bGQgYmUgJy4nXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEwMAorbXNnaWQgIkZpcnN0IEBlICclRG4nIChAaT0lRGkpIGluIEBkIEBpICVpICglcCkgQHMgJy4nXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogU2Vjb25kIGVudHJ5ICclRG4nIChpbm9kZT0lRGkpIGluIGRpcmVjdG9yeSBpbm9kZSAlaSBzaG91bGQgYmUgJy4uJ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMDUKK21zZ2lkICJTZWNvbmQgQGUgJyVEbicgKEBpPSVEaSkgaW4gQGQgQGkgJWkgQHMgJy4uJ1xuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmFkZHIgZm9yIGlub2RlICVpICglUSkgaXMgJUlGLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTEwCittc2dpZCAiaV9mYWRkciBARiAlSUYsIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9maWxlX2FjbCBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlSWYsIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMTUKK21zZ2lkICJpX2ZpbGVfYWNsIEBGICVJZiwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2Rpcl9hY2wgZm9yIGlub2RlICVpICglUSkgaXMgJUlkLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTIwCittc2dpZCAiaV9kaXJfYWNsIEBGICVJZCwgQHMgemVyby5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpX2ZyYWcgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMjUKK21zZ2lkICJpX2ZyYWcgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaV9mc2l6ZSBmb3IgaW5vZGUgJWkgKCVRKSBpcyAlTiwgc2hvdWxkIGJlIHplcm8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTEzMAorbXNnaWQgImlfZnNpemUgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBoYXMgaW52YWxpZCBtb2RlICglSW0pLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExMzUKK21zZ2lkICJAaSAlaSAoJVEpIGhhcyBAbiBtb2RlICglSW0pLlxuIgorbXNnc3RyICJAaSAlaSAoJVEpIOaciUBu5qih5byPICglSW0pLlxuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWksICVCLCBvZmZzZXQgJU46IGRpcmVjdG9yeSBjb3JydXB0ZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMTQwCittc2dpZCAiQGQgQGkgJWksICVCLCBvZmZzZXQgJU46IEBkIGNvcnJ1cHRlZFxuIgorbXNnc3RyICJAZEBpICVpLCDnrKwgJUIgQGIsIOWBj+enu+mHjyAlTjogQGTmjZ/lnY9cbiIKKworIy4gQC1leHBhbmRlZDogZGlyZWN0b3J5IGlub2RlICVpLCAlQiwgb2Zmc2V0ICVOOiBmaWxlbmFtZSB0b28gbG9uZ1xuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNDUKK21zZ2lkICJAZCBAaSAlaSwgJUIsIG9mZnNldCAlTjogZmlsZW5hbWUgdG9vIGxvbmdcbiIKK21zZ3N0ciAiQGRAaSAlaSwg56ysICVCIEBiLCDlgY/np7vph48gJU46IOaWh+S7tuWQjei/h+mVv1xuIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgaW5vZGUgJWkgaGFzIGFuIHVuYWxsb2NhdGVkICVCLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNTAKK21zZ2lkICJAZCBAaSAlaSBoYXMgYW4gdW5hbGxvY2F0ZWQgJUIuICAiCittc2dzdHIgIkBkQGkgJWkg5Lit5ZCr5pyJ5pyq5YiG6YWN55qEQGIgIyVCLiAgIgorCisjLiBALWV4cGFuZGVkOiAnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICInLicgQGQgQGUgaW4gQGQgQGkgJWkgaXMgbm90IE5VTEwgdGVybWluYXRlZFxuIgorbXNnc3RyICJAZEBpICVpIOS4reeahCAnLicgQGRAZSDmsqHmnInku6VOVUxM57uI5q2iXG4iCisKKyMuIEAtZXhwYW5kZWQ6ICcuLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAlaSBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2MAorIywgYy1mb3JtYXQKK21zZ2lkICInLi4nIEBkIEBlIGluIEBkIEBpICVpIGlzIG5vdCBOVUxMIHRlcm1pbmF0ZWRcbiIKK21zZ3N0ciAiQGRAaSAlaSDkuK3nmoQgJy4uJyBAZEBlIOayoeacieS7pU5VTEznu4jmraJcbiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE2NQorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgY2hhcmFjdGVyIEB2LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlub2RlICVpICglUSkgaXMgYW4gaWxsZWdhbCBibG9jayBkZXZpY2UuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE3MAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgQGIgQHYuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBpcyBkdXBsaWNhdGUgJy4nIGVudHJ5LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExNzUKK21zZ2lkICJARSBpcyBkdXBsaWNhdGUgJy4nIEBlLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaXMgZHVwbGljYXRlICcuLicgZW50cnkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4MAorbXNnaWQgIkBFIGlzIGR1cGxpY2F0ZSAnLi4nIEBlLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE4NSBlMmZzY2svcHJvYmxlbS5jOjE0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkbid0IGZpbmQgZGlyX2luZm8gZm9yICVpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgaGFzIHJlY19sZW4gb2YgJURyLCBzaG91bGQgYmUgJU4uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTE5MAorbXNnaWQgIkBFIGhhcyByZWNfbGVuIG9mICVEciwgQHMgJU4uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBpY291bnQgc3RydWN0dXJlOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgaWNvdW50IHN0cnVjdHVyZTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBpdGVyYXRpbmcgb3ZlciBkaXJlY3RvcnkgYmxvY2tzOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgaXRlcmF0aW5nIG92ZXIgQGQgQGJzOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHJlYWRpbmcgZGlyZWN0b3J5IGJsb2NrICViIChpbm9kZSAlaSk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIwNQorbXNnaWQgIkVycm9yIHJlYWRpbmcgQGQgQGIgJWIgKEBpICVpKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciB3cml0aW5nIGRpcmVjdG9yeSBibG9jayAlYiAoaW5vZGUgJWkpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTAKK21zZ2lkICJFcnJvciB3cml0aW5nIEBkIEBiICViIChAaSAlaSk6ICVtXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXJyb3IgYWxsb2NhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrIGZvciBpbm9kZSAlaSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQEEgbmV3IEBkIEBiIGZvciBAaSAlaSAoJXMpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGRlYWxsb2NhdGluZyBpbm9kZSAlaTogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlYWxsb2NhdGluZyBAaSAlaTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBkaXJlY3RvcnkgZW50cnkgZm9yICcuJyBpbiAlcCAoJWkpIGlzIGJpZy5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkBkIEBlIGZvciAnLicgaW4gJXAgKCVpKSBpcyBiaWcuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgKCVRKSBpcyBhbiBpbGxlZ2FsIEZJRk8uXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTIzMAorbXNnaWQgIkBpICVpICglUSkgaXMgYW4gQEkgRklGTy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBpbm9kZSAlaSAoJVEpIGlzIGFuIGlsbGVnYWwgc29ja2V0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyMzUKK21zZ2lkICJAaSAlaSAoJVEpIGlzIGFuIEBJIHNvY2tldC5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIHRvICVOLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNDAKK21zZ2lkICJTZXR0aW5nIGZpbGV0eXBlIGZvciBARSB0byAlTi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIHNob3VsZCBiZSAlTikuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI0NQorbXNnaWQgIkBFIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAlRHQsIEBzICVOKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGhhcyBmaWxldHlwZSBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI1MAorbXNnaWQgIkBFIGhhcyBmaWxldHlwZSBzZXQuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSB6ZXJvLWxlbmd0aCBuYW1lLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNTUKK21zZ2lkICJARSBoYXMgYSBAeiBuYW1lLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFN5bWxpbmsgJVEgKGlub2RlICMlaSkgaXMgaW52YWxpZC5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjYwCittc2dpZCAiU3ltbGluayAlUSAoQGkgIyVpKSBpcyBAbi5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgZm9yIGlub2RlICVpICglUSkgaXMgaW52YWxpZCAoJUlmKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjY1Cittc2dpZCAiQGEgQGIgQEYgQG4gKCVJZikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZmlsZXN5c3RlbSBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBzdXBlcmJsb2NrLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyNzAKK21zZ2lkICJAZiBjb250YWlucyBsYXJnZSBmaWxlcywgYnV0IGxhY2tzIExBUkdFX0ZJTEUgZmxhZyBpbiBAUy5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgbm90IHJlZmVyZW5jZWRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjc1Cittc2dpZCAiQHAgQGggJWQ6ICVCIG5vdCByZWZlcmVuY2VkXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogcHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjgwCittc2dpZCAiQHAgQGggJWQ6ICVCIHJlZmVyZW5jZWQgdHdpY2VcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyODUKK21zZ2lkICJAcCBAaCAlZDogJUIgaGFzIGJhZCBtaW4gaGFzaFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTI5MAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgYmFkIG1heCBoYXNoXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxMjk1Cittc2dpZCAiQG4gQGggJWQgKCVxKS4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBwcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAlZCAoJXEpOiBiYWQgYmxvY2sgbnVtYmVyICViLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEyOTkKK21zZ2lkICJAcCBAaCAlZCAoJXEpOiBiYWQgQGIgbnVtYmVyICViLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiByb290IG5vZGUgaXMgaW52YWxpZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQHAgQGggJWQ6IHJvb3Qgbm9kZSBpcyBAblxuIgorbXNnc3RyICJAcEBoICVkOuaguee7k+eCuUBuXG4iCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBsaW1pdCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxNAorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gbGltaXQgKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBjb3VudCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMxOQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gY291bnQgKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgYW4gdW5vcmRlcmVkIGhhc2ggdGFibGVcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzI0Cittc2dpZCAiQHAgQGggJWQ6ICVCIGhhcyBhbiB1bm9yZGVyZWQgaGFzaCB0YWJsZVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHByb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlICVkOiAlQiBoYXMgaW52YWxpZCBkZXB0aCAoJU4pXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMyOQorbXNnaWQgIkBwIEBoICVkOiAlQiBoYXMgQG4gZGVwdGggKCVOKVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IER1cGxpY2F0ZSBlbnRyeSAnJURuJyBpbiAlcCAoJWkpIGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzMzQKK21zZ2lkICJEdXBsaWNhdGUgQEUgZm91bmQuICAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZW50cnkgJyVEbicgaW4gJXAgKCVpKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLlxuCisjLiBALWV4cGFuZGVkOiBSZW5hbWUgdG8gJXMKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTMzOQorIywgbm8tYy1mb3JtYXQKK21zZ2lkICIiCisiQEUgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS5cbiIKKyJSZW5hbWUgdG8gJXMiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRHVwbGljYXRlIGVudHJ5ICclRG4nIGZvdW5kLlxuCisjLiBALWV4cGFuZGVkOiBcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuCisjLiBALWV4cGFuZGVkOiBcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ0Cittc2dpZCAiIgorIkR1cGxpY2F0ZSBAZSAnJURuJyBmb3VuZC5cbiIKKyJcdE1hcmtpbmcgJXAgKCVpKSB0byBiZSByZWJ1aWx0LlxuIgorIlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfYmxvY2tzX2hpIGZvciBpbm9kZSAlaSAoJVEpIGlzICVOLCBzaG91bGQgYmUgemVyby5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzQ5Cittc2dpZCAiaV9ibG9ja3NfaGkgQEYgJU4sIEBzIHplcm8uXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogVW5leHBlY3RlZCBibG9jayBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgJWQgKCVxKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxMzU0Cittc2dpZCAiVW5leHBlY3RlZCBAYiBpbiBAaCAlZCAoJXEpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgaW4gZ3JvdXAgJWcgd2hlcmUgX0lOT0RFX1VOSU5JVCBpcyBzZXQuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM1OAorbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGluIEBnICVnIHdoZXJlIF9JTk9ERV9VTklOSVQgaXMgc2V0LlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGVudHJ5ICclRG4nIGluICVwICglaSkgcmVmZXJlbmNlcyBpbm9kZSAlRGkgZm91bmQgaW4gZ3JvdXAgJWcncyB1bnVzZWQgaW5vZGVzIGFyZWEuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM2MworbXNnaWQgIkBFIHJlZmVyZW5jZXMgQGkgJURpIGZvdW5kIGluIEBnICVnJ3MgdW51c2VkIGlub2RlcyBhcmVhLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGlfZmlsZV9hY2xfaGkgZm9yIGlub2RlICVpICglUSkgaXMgJU4sIHNob3VsZCBiZSB6ZXJvLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNjgKK21zZ2lkICJpX2ZpbGVfYWNsX2hpIEBGICVOLCBAcyB6ZXJvLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzNzUKK21zZ2lkICJQYXNzIDM6IENoZWNraW5nIEBkIGNvbm5lY3Rpdml0eVxuIgorbXNnc3RyICLnrKwz5q2lOiDmo4Dmn6Xnm67lvZXov57mjqXmgKdcbiIKKworIy4gQC1leHBhbmRlZDogcm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzODAKK21zZ2lkICJAciBub3QgYWxsb2NhdGVkLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IE5vIHJvb20gaW4gbG9zdCtmb3VuZCBkaXJlY3RvcnkuICAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM4NQorbXNnaWQgIk5vIHJvb20gaW4gQGwgQGQuICAiCittc2dzdHIgIkBsQGTkuK3msqHmnInnqbrpl7QuICAiCisKKyMuIEAtZXhwYW5kZWQ6IFVuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAlaSAoJXApXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmNvbm5lY3RlZCBAZCBAaSAlaSAoJXApXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjEzOTUKK21zZ2lkICIvQGwgbm90IGZvdW5kLiAgIgorbXNnc3RyICIvQGzmnKrmib7liLAuIgorCisjLiBALWV4cGFuZGVkOiAnLi4nIGluICVRICglaSkgaXMgJVAgKCVqKSwgc2hvdWxkIGJlICVxICglZCkuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQwMAorbXNnaWQgIicuLicgaW4gJVEgKCVpKSBpcyAlUCAoJWopLCBAcyAlcSAoJWQpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEJhZCBvciBub24tZXhpc3RlbnQgL2xvc3QrZm91bmQuICBDYW5ub3QgcmVjb25uZWN0LlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MDUKK21zZ2lkICJCYWQgb3Igbm9uLWV4aXN0ZW50IC9AbC4gIENhbm5vdCByZWNvbm5lY3QuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGQgbm90IGV4cGFuZCAvbG9zdCtmb3VuZDogJW1cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBleHBhbmQgL0BsOiAlbVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVjb25uZWN0ICVpOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIHRyeWluZyB0byBmaW5kIC9sb3N0K2ZvdW5kOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGZpbmQgL0BsOiAlbVxuIgorbXNnc3RyICLlsJ3or5Xmib7liLAvQGzml7blh7rplJk6ICVtXG4iCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfYmxvY2s6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BiOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfaW5vZGU6ICVtIHdoaWxlIHRyeWluZyB0byBjcmVhdGUgL2xvc3QrZm91bmQgZGlyZWN0b3J5XG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X0BpOiAlbSB3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIC9AbCBAZFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGV4dDJmc19uZXdfZGlyX2Jsb2NrOiAlbSB3aGlsZSBjcmVhdGluZyBuZXcgZGlyZWN0b3J5IGJsb2NrXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQzNQorIywgYy1mb3JtYXQKK21zZ2lkICJleHQyZnNfbmV3X2Rpcl9AYjogJW0gd2hpbGUgY3JlYXRpbmcgbmV3IEBkIEBiXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogZXh0MmZzX3dyaXRlX2Rpcl9ibG9jazogJW0gd2hpbGUgd3JpdGluZyB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvciAvbG9zdCtmb3VuZFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0MmZzX3dyaXRlX2Rpcl9AYjogJW0gd2hpbGUgd3JpdGluZyB0aGUgQGQgQGIgZm9yIC9AbFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIHdoaWxlIGFkanVzdGluZyBpbm9kZSBjb3VudCBvbiBpbm9kZSAlaVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgYWRqdXN0aW5nIEBpIGNvdW50IG9uIEBpICVpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogQ291bGRuJ3QgZml4IHBhcmVudCBvZiBpbm9kZSAlaTogJW1cbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogJW1cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBDb3VsZG4ndCBmaXggcGFyZW50IG9mIGlub2RlICVpOiBDb3VsZG4ndCBmaW5kIHBhcmVudCBkaXJlY3RvcnkgZW50cnlcbgorIy4gQC1leHBhbmRlZDogXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGRuJ3QgZml4IHBhcmVudCBvZiBAaSAlaTogQ291bGRuJ3QgZmluZCBwYXJlbnQgQGQgQGVcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBFcnJvciBjcmVhdGluZyByb290IGRpcmVjdG9yeSAoJXMpOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcm9vdCBAZCAoJXMpOiAlbVxuIgorbXNnc3RyICLliJvlu7rmoLlAZCAoJXMpIOaXtuWHuumUmTogJW1cbiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY3JlYXRpbmcgL2xvc3QrZm91bmQgZGlyZWN0b3J5ICglcyk6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyAvQGwgQGQgKCVzKTogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeTsgYWJvcnRpbmcuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTQ3NQorbXNnaWQgIkByIGlzIG5vdCBhIEBkOyBhYm9ydGluZy5cbiIKK21zZ3N0ciAiQHLkuI3mmK/kuIDkuKpAZDsg5Lit5q2iLlxuIgorCisjLiBALWV4cGFuZGVkOiBDYW5ub3QgcHJvY2VlZCB3aXRob3V0IGEgcm9vdCBpbm9kZS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNDgwCittc2dpZCAiQ2Fubm90IHByb2NlZWQgd2l0aG91dCBhIEByLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IC9sb3N0K2ZvdW5kIGlzIG5vdCBhIGRpcmVjdG9yeSAoaW5vPSVpKVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE0OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiL0BsIGlzIG5vdCBhIEBkIChpbm89JWkpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNDk3Cittc2dpZCAiUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3Rvcmllc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTUwMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRpcnNfdG9faGFzaCBpdGVyYXRvcjogJW1cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1MDcKK21zZ2lkICJGYWlsZWQgdG8gb3B0aW1pemUgZGlyZWN0b3J5ICVxICglZCk6ICVtXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTEyCittc2dpZCAiT3B0aW1pemluZyBkaXJlY3RvcmllczogIgorbXNnc3RyICLmraPlnKjkvJjljJbnm67lvZU6ICIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNTI5Cittc2dpZCAiUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogdW5hdHRhY2hlZCB6ZXJvLWxlbmd0aCBpbm9kZSAlaS4gIAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEB6IEBpICVpLiAgIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IHVuYXR0YWNoZWQgaW5vZGUgJWlcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkB1IEBpICVpXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgJWkgcmVmIGNvdW50IGlzICVJbCwgc2hvdWxkIGJlICVOLiAgCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDQKK21zZ2lkICJAaSAlaSByZWYgY291bnQgaXMgJUlsLCBAcyAlTi4gICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBXQVJOSU5HOiBQUk9HUkFNTUlORyBCVUcgSU4gRTJGU0NLIVxuCisjLiBALWV4cGFuZGVkOiBcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuCisjLiBALWV4cGFuZGVkOiBpbm9kZV9saW5rX2luZm9bJWldIGlzICVOLCBpbm9kZS5pX2xpbmtzX2NvdW50IGlzICVJbC4gIFRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lIVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NDgKK21zZ2lkICIiCisiV0FSTklORzogUFJPR1JBTU1JTkcgQlVHIElOIEUyRlNDSyFcbiIKKyJcdE9SIFNPTUUgQk9ORUhFQUQgKFlPVSkgSVMgQ0hFQ0tJTkcgQSBNT1VOVEVEIChMSVZFKSBGSUxFU1lTVEVNLlxuIgorIkBpX2xpbmtfaW5mb1slaV0gaXMgJU4sIEBpLmlfbGlua3NfY291bnQgaXMgJUlsLiAgVGhleSBAcyB0aGUgc2FtZSFcbiIKK21zZ3N0ciAiIgorIuitpuWRijpFMkZTQ0vkuK3nmoTnqIvluo/plJnor68hXG4iCisiXHTmiJbogIXmmK/mn5DkuKrnrKjom4so5L2gKeato+WcqOajgOafpeS4gOS4quiiq+aMgui9veeahCjmtLvliqjnmoQp5paH5Lu257O757ufLlxuIgorIkBpX2xpbmtfaW5mb1slaV0g5Li6ICVOLCBAaS5pX2xpbmtzX2NvdW50IOS4uiAlSWwu5a6D5Lus5bqU6K+l5piv55u45ZCM55qEIVxuIgorCisjLiBALWV4cGFuZGVkOiBQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb25cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNTU4Cittc2dpZCAiUGFzcyA1OiBDaGVja2luZyBAZyBzdW1tYXJ5IGluZm9ybWF0aW9uXG4iCittc2dzdHIgIuesrDXmraU6IOajgOafpUBn5qaC6KaB5L+h5oGvXG4iCisKKyMuIEAtZXhwYW5kZWQ6IFBhZGRpbmcgYXQgZW5kIG9mIGlub2RlIGJpdG1hcCBpcyBub3Qgc2V0LiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU2MworbXNnaWQgIlBhZGRpbmcgYXQgZW5kIG9mIEBpIEBCIGlzIG5vdCBzZXQuICIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBQYWRkaW5nIGF0IGVuZCBvZiBibG9jayBiaXRtYXAgaXMgbm90IHNldC4gCisjOiBlMmZzY2svcHJvYmxlbS5jOjE1NjgKK21zZ2lkICJQYWRkaW5nIGF0IGVuZCBvZiBAYiBAQiBpcyBub3Qgc2V0LiAiCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogYmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU3MworbXNnaWQgIkBiIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkBiQELlt67lvII6ICIKKworIy4gQC1leHBhbmRlZDogaW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTU5MworbXNnaWQgIkBpIEBCIGRpZmZlcmVuY2VzOiAiCittc2dzdHIgIkBpQELlt67lvII6ICIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTMKK21zZ2lkICJGcmVlIEBpcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMlZyAoJWksIGNvdW50ZWQ9JWopLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MTgKK21zZ2lkICJEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgQGcgIyVnICglaSwgY291bnRlZD0laikuXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjIzCittc2dpZCAiRnJlZSBAaXMgY291bnQgd3JvbmcgKCVpLCBjb3VudGVkPSVqKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIyVnICglYiwgY291bnRlZD0lYykuXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTYyOAorbXNnaWQgIkZyZWUgQGJzIGNvdW50IHdyb25nIGZvciBAZyAjJWcgKCViLCBjb3VudGVkPSVjKS5cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2MzMKK21zZ2lkICJGcmVlIEBicyBjb3VudCB3cm9uZyAoJWIsIGNvdW50ZWQ9JWMpLlxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IFBST0dSQU1NSU5HIEVSUk9SOiBmaWxlc3lzdGVtICgjJU4pIGJpdG1hcCBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBiaXRtYXAgCisjLiBALWV4cGFuZGVkOiBlbmRwb2ludHMgKCVpLCAlailcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjM4Cittc2dpZCAiIgorIlBST0dSQU1NSU5HIEVSUk9SOiBAZiAoIyVOKSBAQiBlbmRwb2ludHMgKCViLCAlYykgZG9uJ3QgbWF0Y2ggY2FsY3VsYXRlZCBAQiAiCisiZW5kcG9pbnRzICglaSwgJWopXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2JsZW0uYzoxNjQ0Cittc2dpZCAiSW50ZXJuYWwgZXJyb3I6IGZ1ZGdpbmcgZW5kIG9mIGJpdG1hcCAoJU4pXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBpbm9kZSBiaXRtYXA6ICVtXG4KKyM6IGUyZnNjay9wcm9ibGVtLmM6MTY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjb3B5aW5nIGluIHJlcGxhY2VtZW50IEBpIEBCOiAlbVxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IEVycm9yIGNvcHlpbmcgaW4gcmVwbGFjZW1lbnQgYmxvY2sgYml0bWFwOiAlbVxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY29weWluZyBpbiByZXBsYWNlbWVudCBAYiBAQjogJW1cbiIKK21zZ3N0ciAiIgorCisjLiBALWV4cGFuZGVkOiBncm91cCAlZyBibG9jayhzKSBpbiB1c2UgYnV0IGdyb3VwIGlzIG1hcmtlZCBCTE9DS19VTklOSVRcbgorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIkBnICVnIEBiKHMpIGluIHVzZSBidXQgQGcgaXMgbWFya2VkIEJMT0NLX1VOSU5JVFxuIgorbXNnc3RyICIiCisKKyMuIEAtZXhwYW5kZWQ6IGdyb3VwICVnIGlub2RlKHMpIGluIHVzZSBidXQgZ3JvdXAgaXMgbWFya2VkIElOT0RFX1VOSU5JVFxuCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQGcgJWcgQGkocykgaW4gdXNlIGJ1dCBAZyBpcyBtYXJrZWQgSU5PREVfVU5JTklUXG4iCittc2dzdHIgIiIKKworIy4gQC1leHBhbmRlZDogUmVjcmVhdGUgam91cm5hbAorIzogZTJmc2NrL3Byb2JsZW0uYzoxNjkxCittc2dpZCAiUmVjcmVhdGUgQGoiCittc2dzdHIgIumHjeW7ukBqIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE2OTYKK21zZ2lkICJVcGRhdGUgcXVvdGEgaW5mbyBmb3IgcXVvdGEgdHlwZSAlTiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvYmxlbS5jOjE4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5oYW5kbGVkIGVycm9yIGNvZGUgKDB4JXgpIVxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9ibGVtLmM6MTk0MCBlMmZzY2svcHJvYmxlbS5jOjE5NDQKK21zZ2lkICJJR05PUkVEIgorbXNnc3RyICLlt7Llv73nlaUiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lbW9yeSB1c2VkOiAlZCwgZWxhcHNlZCB0aW1lOiAlNi4zZi8lNi4zZi8lNi4zZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zY2FudGVzdC5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNpemUgb2YgaW5vZGU9JWRcbiIKK21zZ3N0ciAiaW5vZGXlpKflsI89JWRcbiIKKworIzogZTJmc2NrL3NjYW50ZXN0LmM6MTE5Cittc2dpZCAid2hpbGUgc3RhcnRpbmcgaW5vZGUgc2NhbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc2NhbnRlc3QuYzoxMzAKK21zZ2lkICJ3aGlsZSBkb2luZyBpbm9kZSBzY2FuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9zdXBlci5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19ibG9ja19pdGVyYXRlIGZvciBpbm9kZSAlZCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svc3VwZXIuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgY2FsbGluZyBleHQyZnNfYWRqdXN0X2VhX3JlZmNvdW50MiBmb3IgaW5vZGUgJWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3N1cGVyLmM6MjcyCittc2dpZCAiVHJ1bmNhdGluZyIKK21zZ3N0ciAi5q2j5Zyo5oiq5patIgorCisjOiBlMmZzY2svc3VwZXIuYzoyNzMKK21zZ2lkICJDbGVhcmluZyIKK21zZ3N0ciAi5q2j5Zyo5riF6ZmkIgorCisjOiBlMmZzY2svdW5peC5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1wYW55cmNkZnZ0REZWXSBbLWIgc3VwZXJibG9ja10gWy1CIGJsb2Nrc2l6ZV1cbiIKKyJcdFx0Wy1JIGlub2RlX2J1ZmZlcl9ibG9ja3NdIFstUCBwcm9jZXNzX2lub2RlX3NpemVdXG4iCisiXHRcdFstbHwtTCBiYWRfYmxvY2tzX2ZpbGVdIFstQyBmZF0gWy1qIGV4dGVybmFsX2pvdXJuYWxdXG4iCisiXHRcdFstRSBleHRlbmRlZC1vcHRpb25zXSBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJFbWVyZ2VuY3kgaGVscDpcbiIKKyIgLXAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljIHJlcGFpciAobm8gcXVlc3Rpb25zKVxuIgorIiAtbiAgICAgICAgICAgICAgICAgICBNYWtlIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW1cbiIKKyIgLXkgICAgICAgICAgICAgICAgICAgQXNzdW1lIFwieWVzXCIgdG8gYWxsIHF1ZXN0aW9uc1xuIgorIiAtYyAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIGJsb2NrcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhZGJsb2NrICIKKyJsaXN0XG4iCisiIC1mICAgICAgICAgICAgICAgICAgIEZvcmNlIGNoZWNraW5nIGV2ZW4gaWYgZmlsZXN5c3RlbSBpcyBtYXJrZWQgY2xlYW5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgLXYgICAgICAgICAgICAgICAgICAgQmUgdmVyYm9zZVxuIgorIiAtYiBzdXBlcmJsb2NrICAgICAgICBVc2UgYWx0ZXJuYXRpdmUgc3VwZXJibG9ja1xuIgorIiAtQiBibG9ja3NpemUgICAgICAgICBGb3JjZSBibG9ja3NpemUgd2hlbiBsb29raW5nIGZvciBzdXBlcmJsb2NrXG4iCisiIC1qIGV4dGVybmFsX2pvdXJuYWwgIFNldCBsb2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgam91cm5hbFxuIgorIiAtbCBiYWRfYmxvY2tzX2ZpbGUgICBBZGQgdG8gYmFkYmxvY2tzIGxpc3RcbiIKKyIgLUwgYmFkX2Jsb2Nrc19maWxlICAgU2V0IGJhZGJsb2NrcyBsaXN0XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICV1LyV1IGZpbGVzICglMGQuJWQlJSBub24tY29udGlndW91cyksICVsbHUvJWxsdSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiU4dSBpbm9kZSB1c2VkICglMi4yZiUlKVxuIgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiJTh1IGlub2RlcyB1c2VkICglMi4yZiUlKVxuIgorbXNnc3RyWzBdICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorbXNnc3RyWzFdICIldSDkuKogaW5vZGUg6KKr5omr5o+PLlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgbm9uLWNvbnRpZ3VvdXMgZmlsZSAoJTBkLiVkJSUpXG4iCittc2dpZF9wbHVyYWwgIiU4dSBub24tY29udGlndW91cyBmaWxlcyAoJTBkLiVkJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlOHUgbm9uLWNvbnRpZ3VvdXMgZGlyZWN0b3J5ICglMGQuJWQlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IG5vbi1jb250aWd1b3VzIGRpcmVjdG9yaWVzICglMGQuJWQlJSlcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGUyZnNjay91bml4LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAgICMgb2YgaW5vZGVzIHdpdGggaW5kL2RpbmQvdGluZCBibG9ja3M6ICV1LyV1LyV1XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTkKK21zZ2lkICIgICAgICAgICBFeHRlbnQgZGVwdGggaGlzdG9ncmFtOiAiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJThsbHUgYmxvY2sgdXNlZCAoJTIuMmYlJSlcbiIKK21zZ2lkX3BsdXJhbCAiJThsbHUgYmxvY2tzIHVzZWQgKCUyLjJmJSUpXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE3MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGJhZCBibG9ja1xuIgorbXNnaWRfcGx1cmFsICIlOHUgYmFkIGJsb2Nrc1xuIgorbXNnc3RyWzBdICJi5Z2XIgorbXNnc3RyWzFdICJi5Z2XIgorCisjOiBlMmZzY2svdW5peC5jOjE3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGxhcmdlIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGxhcmdlIGZpbGVzXG4iCittc2dzdHJbMF0gIuS4gOiIrOaWh+S7tiIKK21zZ3N0clsxXSAi5LiA6Iis5paH5Lu2IgorCisjOiBlMmZzY2svdW5peC5jOjE3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiU4dSByZWd1bGFyIGZpbGVcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIiU4dSByZWd1bGFyIGZpbGVzXG4iCittc2dzdHJbMF0gIuS4gOiIrOaWh+S7tiIKK21zZ3N0clsxXSAi5LiA6Iis5paH5Lu2IgorCisjOiBlMmZzY2svdW5peC5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGRpcmVjdG9yeVxuIgorbXNnaWRfcGx1cmFsICIlOHUgZGlyZWN0b3JpZXNcbiIKK21zZ3N0clswXSAi5paH5Lu25aS5IgorbXNnc3RyWzFdICLmlofku7blpLkiCisKKyM6IGUyZnNjay91bml4LmM6MTc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlOHUgY2hhcmFjdGVyIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzXG4iCittc2dzdHJbMF0gIuWtl+espuiuvuWkhyIKK21zZ3N0clsxXSAi5a2X56ym6K6+5aSHIgorCisjOiBlMmZzY2svdW5peC5jOjE4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IGJsb2NrIGRldmljZSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBibG9jayBkZXZpY2UgZmlsZXNcbiIKK21zZ3N0clswXSAi5Z2X6K6+5aSHIgorbXNnc3RyWzFdICLlnZforr7lpIciCisKKyM6IGUyZnNjay91bml4LmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWZvXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWZvc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJTh1IGxpbmtcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IGxpbmtzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBlMmZzY2svdW5peC5jOjE4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJTh1IHN5bWJvbGljIGxpbmsiCittc2dpZF9wbHVyYWwgIiU4dSBzeW1ib2xpYyBsaW5rcyIKK21zZ3N0clswXSAi56ym5Y+36ZO+5o6lIgorbXNnc3RyWzFdICLnrKblj7fpk77mjqUiCisKKyM6IGUyZnNjay91bml4LmM6MTkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgKCV1IGZhc3Qgc3ltYm9saWMgbGluaylcbiIKK21zZ2lkX3BsdXJhbCAiICgldSBmYXN0IHN5bWJvbGljIGxpbmtzKVxuIgorbXNnc3RyWzBdICLnrKblj7fpk77mjqUiCittc2dzdHJbMV0gIuespuWPt+mTvuaOpSIKKworIzogZTJmc2NrL3VuaXguYzoxOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiU4dSBzb2NrZXRcbiIKK21zZ2lkX3BsdXJhbCAiJTh1IHNvY2tldHNcbiIKK21zZ3N0clswXSAi5aWX5o6l5a2XIgorbXNnc3RyWzFdICLlpZfmjqXlrZciCisKKyM6IGUyZnNjay91bml4LmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiU4dSBmaWxlXG4iCittc2dpZF9wbHVyYWwgIiU4dSBmaWxlc1xuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZTJmc2NrL3VuaXguYzoyMTIgbWlzYy9iYWRibG9ja3MuYzo5ODMgbWlzYy90dW5lMmZzLmM6MTk3OSBtaXNjL3V0aWwuYzoxNDcKKyM6IHJlc2l6ZS9tYWluLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGRldGVybWluaW5nIHdoZXRoZXIgJXMgaXMgbW91bnRlZC4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmchICAlcyBpcyAlcy5cbiIKK21zZ3N0ciAi6K2m5ZGKISAlc+W3suaMgui9vS5cbiIKKworIzogZTJmc2NrL3VuaXguYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgJXMuXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoyNDAKK21zZ2lkICIiCisiQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy5cbiIKKyJcbiIKK21zZ3N0ciAi5peg5rOV57un57utLCDkuK3mraIuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MjQyCittc2dpZCAiIgorIlxuIgorIlxuIgorIldBUk5JTkchISEgIFRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQuICAgSWYgeW91IGNvbnRpbnVlIHlvdSAqKipXSUxMKioqXG4iCisiY2F1c2UgKioqU0VWRVJFKioqIGZpbGVzeXN0ZW0gZGFtYWdlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MjQ3Cittc2dpZCAiRG8geW91IHJlYWxseSB3YW50IHRvIGNvbnRpbnVlIgorbXNnc3RyICLkvaDnnJ/nmoTmg7PopoHopoHnu6fnu60iCisKKyM6IGUyZnNjay91bml4LmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImNoZWNrIGFib3J0ZWQuXG4iCittc2dzdHIgIuajgOafpeiiq+S4reatolxuIgorCisjOiBlMmZzY2svdW5peC5jOjMzOQorbXNnaWQgIiBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MzQxCittc2dpZCAiIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNDMKK21zZ2lkICIgcHJpbWFyeSBzdXBlcmJsb2NrIGZlYXR1cmVzIGRpZmZlcmVudCBmcm9tIGJhY2t1cCIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGJlZW4gbW91bnRlZCAldSB0aW1lcyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNTQKK21zZ2lkICIgaGFzIGZpbGVzeXN0ZW0gbGFzdCBjaGVja2VkIHRpbWUgaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgaGFzIGdvbmUgJXUgZGF5cyB3aXRob3V0IGJlaW5nIGNoZWNrZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzozNjkKK21zZ2lkICIsIGNoZWNrIGZvcmNlZC5cbiIKK21zZ3N0ciAiLCDlvLrliLbmo4Dmn6UuXG4iCisKKyM6IGUyZnNjay91bml4LmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjbGVhbiwgJXUvJXUgZmlsZXMsICVsbHUvJWxsdSBibG9ja3MiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo0MjEKK21zZ2lkICIgKGNoZWNrIGRlZmVycmVkOyBvbiBiYXR0ZXJ5KSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjQyNAorbXNnaWQgIiAoY2hlY2sgYWZ0ZXIgbmV4dCBtb3VudCkiCittc2dzdHIgIijlsIbkuo7kuIvmrKHmjILovb3ml7bov5vooYzmo4Dmn6UpIgorCisjOiBlMmZzY2svdW5peC5jOjQyNgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGNoZWNrIGluICVsZCBtb3VudHMpIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBDb3VsZG4ndCBvcGVuIC9kZXYvbnVsbCAoJXMpXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBFQSB2ZXJzaW9uLlxuIgorbXNnc3RyICLml6DmlYjnmoRFQeeJiOacrOWPty5cbiIKKworIzogZTJmc2NrL3VuaXguYzo2NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBleHRlbmRlZCBvcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo2OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN5bnRheCBlcnJvciBpbiBlMmZzY2sgY29uZmlnIGZpbGUgKCVzLCBsaW5lICMlZClcbiIKKyJcdCVzXG4iCittc2dzdHIgIiIKKyJlMmZzY2sg6YWN572u5paH5Lu25Lit6K+t5rOV6ZSZ6K+vKCVzLCDooYwgIyVkKVxuIgorIlx0JXNcbiIKKworIzogZTJmc2NrL3VuaXguYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgdmFsaWRhdGluZyBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo3NzAKK21zZ2lkICJJbnZhbGlkIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZmlsZSBkZXNjcmlwdG9yIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6Nzg1Cittc2dpZCAiT25seSBvbmUgb2YgdGhlIG9wdGlvbnMgLXAvLWEsIC1uIG9yIC15IG1heSBiZSBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSAtdCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgZTJmc2NrLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6ODM3IGUyZnNjay91bml4LmM6OTA5IG1pc2MvdHVuZTJmcy5jOjgxMSBtaXNjL3R1bmUyZnMuYzoxMTAwCisjOiBtaXNjL3R1bmUyZnMuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZXNvbHZlICclcyciCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4ODgKK21zZ2lkICJUaGUgLW4gYW5kIC1EIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4OTMKK21zZ2lkICJUaGUgLW4gYW5kIC1jIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo4OTgKK21zZ2lkICJUaGUgLW4gYW5kIC1sLy1MIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzo5NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIC1jIGFuZCB0aGUgLWwvLUwgb3B0aW9ucyBtYXkgbm90IGJlIGJvdGggdXNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFMkZTQ0tfSkJEX0RFQlVHIFwiJXNcIiBub3QgYW4gaW50ZWdlclxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSW52YWxpZCBub24tbnVtZXJpYyBhcmd1bWVudCB0byAtJWMgKFwiJXNcIilcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk1NUCBpbnRlcnZhbCBpcyAldSBzZWNvbmRzIGFuZCB0b3RhbCB3YWl0IHRpbWUgaXMgJXUgc2Vjb25kcy4gUGxlYXNlICIKKyJ3YWl0Li4uXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMTA2IGUyZnNjay91bml4LmM6MTExMQorIywgZnV6enkKK21zZ2lkICJ3aGlsZSBjaGVja2luZyBNTVAgYmxvY2siCittc2dzdHIgIuWcqOWvueWdj+Wdl2lub2Rl6L+b6KGM5LiA6Ie05oCn5qOA6aqM5pivIgorCisjOiBlMmZzY2svdW5peC5jOjExMTMgbWlzYy90dW5lMmZzLmM6MTkxMgorbXNnaWQgIiIKKyJJZiB5b3UgYXJlIHN1cmUgdGhlIGZpbGVzeXN0ZW0gaXMgbm90IGluIHVzZSBvbiBhbnkgbm9kZSwgcnVuOlxuIgorIid0dW5lMmZzIC1mIC1FIGNsZWFyX21tcCB7ZGV2aWNlfSdcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjExNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3I6IGV4dDJmcyBsaWJyYXJ5IHZlcnNpb24gb3V0IG9mIGRhdGUhXG4iCittc2dzdHIgIumUmeivrzogZXh0MmZz5bqT54mI5pys6L+H5penIVxuIgorCisjOiBlMmZzY2svdW5peC5jOjExNzEKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBwcm9ncmFtIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzLCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTIwNgorbXNnaWQgIm5lZWQgdGVybWluYWwgZm9yIGludGVyYWN0aXZlIHJlcGFpcnMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTI1OAorbXNnaWQgIlN1cGVyYmxvY2sgaW52YWxpZCwiCittc2dzdHIgIui2hee6p+Wdl+aXoOaViCwiCisKKyM6IGUyZnNjay91bml4LmM6MTI1OQorbXNnaWQgIkdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTI2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIHdoaWxlIHVzaW5nIHRoZSBiYWNrdXAgYmxvY2tzIgorbXNnc3RyICLlvZPor7vlj5blnY/lnZdpbm9kZeaXtiIKKworIzogZTJmc2NrL3VuaXguYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBnb2luZyBiYWNrIHRvIG9yaWdpbmFsIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMDEKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gcmV2aXNpb24gaXMgYXBwYXJlbnRseSB0b28gaGlnaCBmb3IgdGhpcyB2ZXJzaW9uIG9mIGUyZnNjay5cbiIKKyIoT3IgdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jayBpcyBjb3JydXB0KVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTMwNworbXNnaWQgIkNvdWxkIHRoaXMgYmUgYSB6ZXJvLWxlbmd0aCBwYXJ0aXRpb24/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzEwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBtdXN0IGhhdmUgJXMgYWNjZXNzIHRvIHRoZSBmaWxlc3lzdGVtIG9yIGJlIHJvb3RcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMTUKK21zZ2lkICJQb3NzaWJseSBub24tZXhpc3RlbnQgb3Igc3dhcCBkZXZpY2U/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzE4Cittc2dpZCAiRmlsZXN5c3RlbSBtb3VudGVkIG9yIG9wZW5lZCBleGNsdXNpdmVseSBieSBhbm90aGVyIHByb2dyYW0/XG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxMzIxCittc2dpZCAiUG9zc2libHkgbm9uLWV4aXN0ZW50IGRldmljZT9cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzMjQKK21zZ2lkICIiCisiRGlzayB3cml0ZS1wcm90ZWN0ZWQ7IHVzZSB0aGUgLW4gb3B0aW9uIHRvIGRvIGEgcmVhZC1vbmx5XG4iCisiY2hlY2sgb2YgdGhlIGRldmljZS5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjEzODkKK21zZ2lkICJHZXQgYSBuZXdlciB2ZXJzaW9uIG9mIGUyZnNjayEiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGNoZWNraW5nIGV4dDMgam91cm5hbCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDQ4Cittc2dpZCAiIgorIldhcm5pbmc6IHNraXBwaW5nIGpvdXJuYWwgcmVjb3ZlcnkgYmVjYXVzZSBkb2luZyBhIHJlYWQtb25seSBmaWxlc3lzdGVtICIKKyJjaGVjay5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHNldCBzdXBlcmJsb2NrIGZsYWdzIG9uICVzXG4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlY292ZXJpbmcgZXh0MyBqb3VybmFsIG9mICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdW5zdXBwb3J0ZWQgZmVhdHVyZShzKToiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3VuaXguYzoxNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3YXJuaW5nOiBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbC5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBlMmZzY2sgbm90IGNvbXBpbGVkIHdpdGggSFRSRUUgc3VwcG9ydCxcbiIKKyJcdGJ1dCBmaWxlc3lzdGVtICVzIGhhcyBIVFJFRSBkaXJlY3Rvcmllcy5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE1NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGVcbiIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IGUyZnNjay91bml4LmM6MTU2OAorbXNnaWQgIlRoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi5cbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCAoJWQgYmxvY2tzKTogIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTYxOQorbXNnaWQgIiBEb25lLlxuIgorbXNnc3RyICLlrozmiJAuXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTYyMAorbXNnaWQgIiIKKyJcbiIKKyIqKiogam91cm5hbCBoYXMgYmVlbiByZS1jcmVhdGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MyBhZ2FpbiAqKipcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdW5peC5jOjE2NDMKK21zZ2lkICJSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi5cbiIKK21zZ3N0ciAi5q2j5Zyo5LuO5aS05byA5aeLZTJmc2NrLi4uXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY0NworbXNnaWQgIndoaWxlIHJlc2V0dGluZyBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91bml4LmM6MTY1NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZTJmc2NrIGNhbmNlbGVkLlxuIgorbXNnc3RyICIlczogZTJmc2Nr6KKr5Y+W5raILlxuIgorCisjOiBlMmZzY2svdW5peC5jOjE2NTkKK21zZ2lkICJhYm9ydGVkIgorbXNnc3RyICLlt7LkuK3mraIiCisKKyM6IGUyZnNjay91bml4LmM6MTY3MSBlMmZzY2svdXRpbC5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKiog5paH5Lu257O757uf5bey5L+u5pS5ICoqKioqXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTY3NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogKioqKiogUkVCT09UIExJTlVYICoqKioqXG4iCittc2dzdHIgIiVzOiAqKioqKiDph43mlrDlkK/liqggTElOVVggKioqKipcbiIKKworIzogZTJmc2NrL3VuaXguYzoxNjgzIGUyZnNjay91dGlsLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiVzOiAqKioqKioqKioqIFdBUk5JTkc6IEZpbGVzeXN0ZW0gc3RpbGwgaGFzIGVycm9ycyAqKioqKioqKioqXG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyIlczogKioqKioqKioqKiDorablkYo6IOaWh+S7tuezu+e7n+S4iuS7jeaciemUmeivryAqKioqKioqKioqXG4iCisiXG4iCisKKyM6IGUyZnNjay91bml4LmM6MTcyMworbXNnaWQgIndoaWxlIHNldHRpbmcgYmxvY2sgZ3JvdXAgY2hlY2tzdW0gaW5mbyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjE4OSBtaXNjL3V0aWwuYzo3MAorbXNnaWQgInlZIgorbXNnc3RyICJ5WSIKKworIzogZTJmc2NrL3V0aWwuYzoxOTAKK21zZ2lkICJuTiIKK21zZ3N0ciAibk4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA0Cittc2dpZCAiPHk+IgorbXNnc3RyICI8eT4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA2Cittc2dpZCAiPG4+IgorbXNnc3RyICI8bj4iCisKKyM6IGUyZnNjay91dGlsLmM6MjA4Cittc2dpZCAiICh5L24pIgorbXNnc3RyICIgKHkvbikiCisKKyM6IGUyZnNjay91dGlsLmM6MjIyCittc2dpZCAiY2FuY2VsbGVkIVxuIgorbXNnc3RyICLlt7Llj5bmtoghXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjM3Cittc2dpZCAieWVzXG4iCittc2dzdHIgIuaYr1xuIgorCisjOiBlMmZzY2svdXRpbC5jOjIzOQorbXNnaWQgIm5vXG4iCittc2dzdHIgIuWQplxuIgorCisjOiBlMmZzY2svdXRpbC5jOjI0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM/IG5vXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8g5ZCmXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcz8geWVzXG4iCisiXG4iCittc2dzdHIgIiIKKyIlcz8g5pivXG4iCisiXG4iCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAieWVzIgorbXNnc3RyICJ5ZXMiCisKKyM6IGUyZnNjay91dGlsLmM6MjU3Cittc2dpZCAibm8iCittc2dzdHIgIm5vIgorCisjOiBlMmZzY2svdXRpbC5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmZzY2tfcmVhZF9iaXRtYXBzOiBpbGxlZ2FsIGJpdG1hcCBibG9jayhzKSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyNzcKK21zZ2lkICJyZWFkaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJldHJ5aW5nIHRvIHJlYWQgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzoyOTcKK21zZ2lkICJ3cml0aW5nIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJld3JpdGluZyBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3V0aWwuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIiVzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLlxuIgorIlx0KGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucylcbiIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svdXRpbC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1ay8lbHVrICglbHVrLyVsdWspLCAiCittc2dzdHIgIuWGheWtmOS9v+eUqOmHjzogICVsdWsvJWx1ayAoJWx1ay8lbHVrKSwgIgorCisjOiBlMmZzY2svdXRpbC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJNZW1vcnkgdXNlZDogJWx1LCAiCittc2dzdHIgIuWGheWtmOeUqOmHjzogJWx1LCAiCisKKyM6IGUyZnNjay91dGlsLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWU6ICU1LjJmLyU1LjJmLyU1LjJmXG4iCittc2dzdHIgIuaXtumXtDogJTUuMmYvJTUuMmYvJTUuMmZcbiIKKworIzogZTJmc2NrL3V0aWwuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZWxhcHNlZCB0aW1lOiAlNi4zZlxuIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDQ2IGUyZnNjay91dGlsLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NDc0IGUyZnNjay91dGlsLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgJWx1IGluICVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6NjM2Cittc2dpZCAid2hpbGUgYWxsb2NhdGluZyB6ZXJvaXppbmcgYnVmZmVyIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay91dGlsLmM6Nzg4Cittc2dpZCAiIgorIlVORVhQRUNURUQgSU5DT05TSVNURU5DWTogdGhlIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW9kaWZpZWQgd2hpbGUgZnNjayBpcyAiCisicnVubmluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY5CisjLCBmdXp6eQorbXNnaWQgImRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCittc2dzdHIgIuWujOaIkCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWIgYmxvY2tfc2l6ZV0gWy1pIGlucHV0X2ZpbGVdIFstbyBvdXRwdXRfZmlsZV0gWy1zdnduZl1cbiIKKyIgICAgICAgWy1jIGJsb2Nrc19hdF9vbmNlXSBbLWQgZGVsYXlfZmFjdG9yX2JldHdlZW5fcmVhZHNdIFstZSAiCisibWF4X2JhZF9ibG9ja3NdXG4iCisiICAgICAgIFstcCBudW1fcGFzc2VzXSBbLXQgdGVzdF9wYXR0ZXJuIFstdCB0ZXN0X3BhdHRlcm4gWy4uLl1dXVxuIgorIiAgICAgICBkZXZpY2UgW2xhc3RfYmxvY2sgW2ZpcnN0X2Jsb2NrXV1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEwNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSAtbiBhbmQgLXcgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiU2LjJmJSUgZG9uZSwgJXMgZWxhcHNlZC4gKCVkLyVkLyVkIGVycm9ycykiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozMjIKK21zZ2lkICJUZXN0aW5nIHdpdGggcmFuZG9tIHBhdHRlcm46ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjM0MAorbXNnaWQgIlRlc3Rpbmcgd2l0aCBwYXR0ZXJuIDB4IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MzcyIG1pc2MvYmFkYmxvY2tzLmM6NDQ1Cittc2dpZCAiZHVyaW5nIHNlZWsiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzozODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2VpcmQgdmFsdWUgKCVsZCkgaW4gZG9fcmVhZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NDY5Cittc2dpZCAiZHVyaW5nIGV4dDJmc19zeW5jX2RldmljZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjQ4OSBtaXNjL2JhZGJsb2Nrcy5jOjc0OQorbXNnaWQgIndoaWxlIGJlZ2lubmluZyBiYWQgYmxvY2sgbGlzdCBpdGVyYXRpb24iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDMgbWlzYy9iYWRibG9ja3MuYzo2MDIgbWlzYy9iYWRibG9ja3MuYzo3NTkKK21zZ2lkICJ3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo1MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgYmxvY2tzICVsdSB0byAlbHVcbiIKK21zZ3N0ciAi5q2j5Zyo5qOA5p+l5LuOICVsdSDliLAgJWx155qE5Z2XXG4iCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6NTEyCittc2dpZCAiQ2hlY2tpbmcgZm9yIGJhZCBibG9ja3MgaW4gcmVhZC1vbmx5IG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyMQorbXNnaWQgIkNoZWNraW5nIGZvciBiYWQgYmxvY2tzIChyZWFkLW9ubHkgdGVzdCk6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjUyOCBtaXNjL2JhZGJsb2Nrcy5jOjYzNCBtaXNjL2JhZGJsb2Nrcy5jOjY3NgorIzogbWlzYy9iYWRibG9ja3MuYzo4MjIKK21zZ2lkICJUb28gbWFueSBiYWQgYmxvY2tzLCBhYm9ydGluZyB0ZXN0XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo2MDkKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiByZWFkLXdyaXRlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjYxMSBtaXNjL2JhZGJsb2Nrcy5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tIGJsb2NrICVsdSB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjY2NgorbXNnaWQgIlJlYWRpbmcgYW5kIGNvbXBhcmluZzogIgorbXNnc3RyICLmraPlnKjor7vlj5blubbmr5TovoM6ICIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzEKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyBpbiBub24tZGVzdHJ1Y3RpdmUgcmVhZC13cml0ZSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzo3NzcKK21zZ2lkICJDaGVja2luZyBmb3IgYmFkIGJsb2NrcyAobm9uLWRlc3RydWN0aXZlIHJlYWQtd3JpdGUgdGVzdClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjc4NAorbXNnaWQgIiIKKyJcbiIKKyJJbnRlcnJ1cHQgY2F1Z2h0LCBjbGVhbmluZyB1cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmluZyB0ZXN0IGRhdGEgd3JpdGUsIGJsb2NrICVsdSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk4OCBtaXNjL3V0aWwuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbW91bnRlZDsgIgorbXNnc3RyICIlcyDlt7Lnu4/mjILovb07IgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjk5MAorbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6OTk1Cittc2dpZCAiaXQncyBub3Qgc2FmZSB0byBydW4gYmFkYmxvY2tzIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMCBtaXNjL3V0aWwuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYXBwYXJlbnRseSBpbiB1c2UgYnkgdGhlIHN5c3RlbTsgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAwMworbXNnaWQgImJhZGJsb2NrcyBmb3JjZWQgYW55d2F5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIC0gJXMiCittc2dzdHIgIuaXoOaViOeahCVzIC0gJXMiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTEzMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRlc3RfcGF0dGVybiAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2MworbXNnaWQgIk1heGltdW0gb2Ygb25lIHRlc3RfcGF0dGVybiBtYXkgYmUgc3BlY2lmaWVkIGluIHJlYWQtb25seSBtb2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTE2OQorbXNnaWQgIlJhbmRvbSB0ZXN0X3BhdHRlcm4gaXMgbm90IGFsbG93ZWQgaW4gcmVhZC1vbmx5IG1vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTgzCittc2dpZCAiIgorIkNvdWxkbid0IGRldGVybWluZSBkZXZpY2Ugc2l6ZTsgeW91IG11c3Qgc3BlY2lmeVxuIgorInRoZSBzaXplIG1hbnVhbGx5XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMTg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjExOTQKK21zZ2lkICJsYXN0IGJsb2NrIgorbXNnc3RyICLmnIDlkI7kuIDkuKrlnZciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMAorbXNnaWQgImZpcnN0IGJsb2NrIgorbXNnc3RyICLnrKzkuIDkuKrlnZciCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0aW5nIGJsb2NrICglbHUpOiBtdXN0IGJlIGxlc3MgdGhhbiAlbHUiCittc2dzdHIgIiIKKworIzogbWlzYy9iYWRibG9ja3MuYzoxMjU5Cittc2dpZCAid2hpbGUgY3JlYXRpbmcgaW4tbWVtb3J5IGJhZCBibG9ja3MgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2JhZGJsb2Nrcy5jOjEyNzQKK21zZ2lkICJ3aGlsZSBhZGRpbmcgdG8gaW4tbWVtb3J5IGJhZCBibG9jayBsaXN0IgorbXNnc3RyICIiCisKKyM6IG1pc2MvYmFkYmxvY2tzLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXNzIGNvbXBsZXRlZCwgJXUgYmFkIGJsb2NrcyBmb3VuZC4gKCVkLyVkLyVkIGVycm9ycylcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLVJWZl0gWy0rPUFhY0RkZWlqc1N1XSBbLXYgdmVyc2lvbl0gZmlsZXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgdmVyc2lvbiAtICVzXG4iCittc2dzdHIgIumUmeivr+eahOeJiOacrCAtICVzXG4iCisKKyM6IG1pc2MvY2hhdHRyLmM6MjAxIG1pc2MvbHNhdHRyLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byBzdGF0ICVzIgorbXNnc3RyICLlvZPlsJ3or5Xlr7klc+i/m+ihjHN0YXTosIPnlKjml7YiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHJlYWRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyMTcgbWlzYy9jaGF0dHIuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZXh0ZW50IGZsYWcgbm90IHN1cHBvcnRlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2NoYXR0ci5jOjIyMiBtaXNjL2NoYXR0ci5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncyBvZiAlcyBzZXQgYXMgIgorbXNnc3RyICIlc+eahOagh+W/l+iiq+iuvuS4uiAiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHNldHRpbmcgZmxhZ3Mgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmVyc2lvbiBvZiAlcyBzZXQgYXMgJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzoyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgc2V0dGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIHBhdGggdmFyaWFibGUgaW4gY2hhdHRyX2Rpcl9wcm9jIgorbXNnc3RyICIiCisKKyM6IG1pc2MvY2hhdHRyLmM6MzIyCittc2dpZCAiPSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtIGFuZCArXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9jaGF0dHIuYzozMzAKK21zZ2lkICJNdXN0IHVzZSAnLXYnLCA9LCAtIG9yICtcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstYmZoaXhWXSBbLW8gc3VwZXJibG9jaz08bnVtPl0gWy1vIGJsb2Nrc2l6ZT08bnVtPl0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjE1OQorIywgZnV6enkKK21zZ2lkICJibG9ja3MiCittc2dzdHIgImLlnZciCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoxNjgKK21zZ2lkICJjbHVzdGVycyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkdyb3VwICVsdTogKEJsb2NrcyAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDaGVja3N1bSAweCUwNHgiCittc2dzdHIgIiAg5qCh6aqM5ZKMIDB4JTA0eCwlZOS4quacquS9v+eUqOeahGlub2RlXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChFWFBFQ1RFRCAweCUwNHgpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiwgdW51c2VkIGlub2RlcyAldVxuIgorbXNnc3RyICIsICV15Liq5pyq5L2/55So55qEaW5vZGVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAlcyBzdXBlcmJsb2NrIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiUHJpbWFyeSIKK21zZ3N0ciAi5Li7IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjEzCittc2dpZCAiQmFja3VwIgorbXNnc3RyICLlpIfku70iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgIgorbXNnc3RyICIsIOe7hOaPj+i/sOespuS9jeS6jiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAiCittc2dzdHIgIiIKKyJcbiIKKyIgIOS/neeVmeeahEdEVOWdl+S9jeS6jiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIEdyb3VwIGRlc2NyaXB0b3IgYXQgIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyMzQKK21zZ2lkICIgIEJsb2NrIGJpdG1hcCBhdCAiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjIzOAorbXNnaWQgIiwgSW5vZGUgYml0bWFwIGF0ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjQyCittc2dpZCAiIgorIlxuIgorIiAgSW5vZGUgdGFibGUgYXQgIgorbXNnc3RyICIiCisiXG4iCisiICBJbm9kZeihqOS9jeS6jiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzoyNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiAgJXUgZnJlZSAlcywgJXUgZnJlZSBpbm9kZXMsICV1IGRpcmVjdG9yaWVzJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICIsICV1IHVudXNlZCBpbm9kZXNcbiIKK21zZ3N0ciAiLCAldeS4quacquS9v+eUqOeahGlub2Rlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjU4Cittc2dpZCAiICBGcmVlIGJsb2NrczogIgorbXNnc3RyICIgIOWPr+eUqOWdl+aVsDogIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MjY5Cittc2dpZCAiICBGcmVlIGlub2RlczogIgorbXNnc3RyICIgIOWPr+eUqGlub2Rl5pWwOiAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozMDAKK21zZ2lkICJ3aGlsZSBwcmludGluZyBiYWQgYmxvY2sgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBibG9ja3M6ICV1IgorbXNnc3RyICLlnY/lnZfmlbA6ICV1IgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzMzIG1pc2MvdHVuZTJmcy5jOjMwMgorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6MzM5Cittc2dpZCAid2hpbGUgb3BlbmluZyBqb3VybmFsIGlub2RlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNDUKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGpvdXJuYWwgc3VwZXIgYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjM1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbCBmZWF0dXJlczogICAgICAgICIKK21zZ3N0ciAi5pel5b+X5L2/55So6ICFOiAgICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNjgKK21zZ2lkICJKb3VybmFsIHNpemU6ICAgICAgICAgICAgICIKK21zZ3N0ciAi5pel5b+X5aSn5bCPOiAgICAgICAgICAgICAiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkpvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgJXVcbiIKKyJKb3VybmFsIHNlcXVlbmNlOiAgICAgICAgIDB4JTA4eFxuIgorIkpvdXJuYWwgc3RhcnQ6ICAgICAgICAgICAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6Mzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGVycm5vOiAgICAgICAgICAgICVkXG4iCittc2dzdHIgIuaXpeW/l+S9v+eUqOiAhTogICAgICAgICAgICAlc1xuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDAxIG1pc2MvdHVuZTJmcy5jOjIxOAorbXNnaWQgIndoaWxlIHJlYWRpbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MDkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGpvdXJuYWwgc3VwZXJibG9jayBtYWdpYyBudW1iZXJzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkpvdXJuYWwgYmxvY2sgc2l6ZTogICAgICAgJXVcbiIKKyJKb3VybmFsIGxlbmd0aDogICAgICAgICAgICV1XG4iCisiSm91cm5hbCBmaXJzdCBibG9jazogICAgICAldVxuIgorIkpvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHglMDh4XG4iCisiSm91cm5hbCBzdGFydDogICAgICAgICAgICAldVxuIgorIkpvdXJuYWwgbnVtYmVyIG9mIHVzZXJzOiAgJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkpvdXJuYWwgdXNlcnM6ICAgICAgICAgICAgJXNcbiIKK21zZ3N0ciAi5pel5b+X5L2/55So6ICFOiAgICAgICAgICAgICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo0NDIgbWlzYy9ta2UyZnMuYzo2NjIgbWlzYy90dW5lMmZzLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3VwZXJibG9jayBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJsb2Nrc2l6ZSBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9kdW1wZTJmcy5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQmFkIGV4dGVuZGVkIG9wdGlvbihzKSBzcGVjaWZpZWQ6ICVzXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0c3VwZXJibG9jaz08c3VwZXJibG9jayBudW1iZXI+XG4iCisiXHRibG9ja3NpemU9PGJsb2Nrc2l6ZT5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NTU0IG1pc2MvbWtlMmZzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJcdFVzaW5nICVzXG4iCittc2dzdHIgIlx05L2/55SoICVzXG4iCisKKyM6IG1pc2MvZHVtcGUyZnMuYzo1OTAgbWlzYy9lMmltYWdlLmM6MTMwOSBtaXNjL3R1bmUyZnMuYzoxOTIzCisjOiByZXNpemUvbWFpbi5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHZhbGlkIGZpbGVzeXN0ZW0gc3VwZXJibG9jay5cbiIKK21zZ3N0ciAi5om+5LiN5Yiw5pyJ5pWI55qE5paH5Lu257O757uf6LaF57qn5Z2XLlxuIgorCisjOiBtaXNjL2R1bXBlMmZzLmM6NjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIlczogJXM6IGVycm9yIHJlYWRpbmcgYml0bWFwczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzo4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yc0lRXSBkZXZpY2UgaW1hZ2VfZmlsZVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvcjogaGVhZGVyIHNpemUgaXMgYmlnZ2VyIHRoYW4gd3J0X3NpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UyaW1hZ2UuYzoxNDEKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBoZWFkZXIgYnVmZmVyXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTcxCittc2dpZCAid2hpbGUgd3JpdGluZyBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJpbWFnZS5jOjE3OQorbXNnaWQgIndoaWxlIHdyaXRpbmcgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTg2Cittc2dpZCAid2hpbGUgd3JpdGluZyBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTkzCittc2dpZCAid2hpbGUgd3JpdGluZyBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmltYWdlLmM6MTM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gY29udmVydCBxY293MiBpbWFnZSAoJXMpIGludG8gcmF3IGltYWdlICglcykiCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZTJsYWJlbDogY2Fubm90IG9wZW4gJXNcbiIKK21zZ3N0ciAiZTJsYWJlbDog5peg5rOV5omT5byAICVzXG4iCisKKyM6IG1pc2MvZTJsYWJlbC5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGNhbm5vdCBzZWVrIHRvIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UybGFiZWwuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBlcnJvciByZWFkaW5nIHN1cGVyYmxvY2tcbiIKK21zZ3N0ciAiZTJsYWJlbDog6K+75Y+Wc3VwZXJibG9ja+WHuumUmVxuIgorCisjOiBtaXNjL2UybGFiZWwuYzo3MgorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBub3QgYW4gZXh0MiBmaWxlc3lzdGVtXG4iCittc2dzdHIgImUybGFiZWw6IOS4jeaYr+S4gOS4qmV4MuaWh+S7tuezu+e7n1xuIgorCisjOiBtaXNjL2UybGFiZWwuYzo5NyBtaXNjL3R1bmUyZnMuYzoyMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGxhYmVsIHRvbyBsb25nLCB0cnVuY2F0aW5nLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJlMmxhYmVsOiBjYW5ub3Qgc2VlayB0byBzdXBlcmJsb2NrIGFnYWluXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMmxhYmVsLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImUybGFiZWw6IGVycm9yIHdyaXRpbmcgc3VwZXJibG9ja1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJsYWJlbC5jOjExNyBtaXNjL3R1bmUyZnMuYzo4MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGUybGFiZWwgZGV2aWNlIFtuZXdsYWJlbF1cbiIKK21zZ3N0ciAi55So5rOVOiBlMmxhYmVsIGRldmljZSBb5paw5Y235qCHXVxuIgorCisjOiBtaXNjL2UydW5kby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyA8dHJhbnNhY3Rpb24gZmlsZT4gPGZpbGVzeXN0ZW0+XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzo1MgorbXNnaWQgIkZhaWxlZCB0byByZWFkIHRoZSBmaWxlIHN5c3RlbSBkYXRhIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6NjIgbWlzYy9lMnVuZG8uYzo4MyBtaXNjL2UydW5kby5jOjEwOCBtaXNjL2UydW5kby5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdGRiX2ZldGNoICVzXG4iCittc2dzdHIgInRkYl9mZXRjaCAlcyDlpLHotKVcbiIKKworIzogbWlzYy9lMnVuZG8uYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgZmlsZSBzeXN0ZW0gTW91bnQgdGltZSBkaWRuJ3QgbWF0Y2ggJXVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjg5Cittc2dpZCAiVGhlIGZpbGUgc3lzdGVtIFVVSUQgZGlkbid0IG1hdGNoIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0ZGJfb3BlbiAlc1xuIgorbXNnc3RyICJ0ZGJfb3BlbiAlcyDlpLHotKVcbiIKKworIzogbWlzYy9lMnVuZG8uYzoxNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZTJ1bmRvLmM6MTc1Cittc2dpZCAiZTJ1bmRvIHNob3VsZCBvbmx5IGJlIHJ1biBvbiB1bm1vdW50ZWQgZmlsZSBzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2UydW5kby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiAlc1xuIgorbXNnc3RyICLmiZPlvIAlc+Wksei0pVxuIgorCisjOiBtaXNjL2UydW5kby5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBsYXllZCB0cmFuc2FjdGlvbiBvZiBzaXplICV6ZCBhdCBsb2NhdGlvbiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9lMnVuZG8uYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHdyaXRlICVzXG4iCittc2dzdHIgIuWGmeWFpSVz5aSx6LSlXG4iCisKKyM6IG1pc2MvZnNjay5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBjb3VsZG4ndCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBiYWQgZm9ybWF0IG9uIGxpbmUgJWQgb2YgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzozNzAKK21zZ2lkICIiCisiV0FSTklORzogWW91ciAvZXRjL2ZzdGFiIGRvZXMgbm90IGNvbnRhaW4gdGhlIGZzY2sgcGFzc25vXG4iCisiXHRmaWVsZC4gIEkgd2lsbCBrbHVkZ2UgYXJvdW5kIHRoaW5ncyBmb3IgeW91LCBidXQgeW91XG4iCisiXHRzaG91bGQgZml4IHlvdXIgL2V0Yy9mc3RhYiBmaWxlIGFzIHNvb24gYXMgeW91IGNhbi5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo0NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogJXM6IG5vdCBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd2FpdDogTm8gbW9yZSBjaGlsZCBwcm9jZXNzPyE/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmcuLi4gJXMgZm9yIGRldmljZSAlcyBleGl0ZWQgd2l0aCBzaWduYWwgJWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzOiBzdGF0dXMgaXMgJXgsIHNob3VsZCBuZXZlciBoYXBwZW4uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmlzaGVkIHdpdGggJXMgKGV4aXQgc3RhdHVzICVkKVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogRXJyb3IgJWQgd2hpbGUgZXhlY3V0aW5nIGZzY2suJXMgZm9yICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NzQyCittc2dpZCAiIgorIkVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlcyBwYXNzZWQgdG8gLXQgbXVzdCBiZSBwcmVmaXhlZFxuIgorIndpdGggJ25vJyBvciAnIScuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6NzYxCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlc3lzdGVtIHR5cGVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9mc2NrLmM6ODg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlczogc2tpcHBpbmcgYmFkIGxpbmUgaW4gL2V0Yy9mc3RhYjogYmluZCBtb3VudCB3aXRoIG5vbnplcm8gZnNjayBwYXNzICIKKyJudW1iZXJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL2ZzY2suYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZnNjazogY2Fubm90IGNoZWNrICVzOiBmc2NrLiVzIG5vdCBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvZnNjay5jOjk2NworbXNnaWQgIkNoZWNraW5nIGFsbCBmaWxlIHN5c3RlbXMuXG4iCittc2dzdHIgIuato+WcqOajgOafpeaJgOacieaWh+S7tuezu+e7ny5cbiIKKworIzogbWlzYy9mc2NrLmM6MTA1OAorIywgYy1mb3JtYXQKK21zZ2lkICItLXdhaXRpbmctLSAocGFzcyAlZClcbiIKK21zZ3N0ciAiLS3or7fnqI3lgJktLSAo5a6M5oiQICVkKVxuIgorCisjOiBtaXNjL2ZzY2suYzoxMDc4Cittc2dpZCAiIgorIlVzYWdlOiBmc2NrIFstQU1OUFJUVl0gWyAtQyBbIGZkIF0gXSBbLXQgZnN0eXBlXSBbZnMtb3B0aW9uc10gW2ZpbGVzeXMgLi4uXVxuIgorbXNnc3RyICIiCisi55So5rOVOiBVc2FnZTogZnNjayBbLUFNTlBSVFZdIFsgLUMgWyBmZCBdIF0gWy10IGZzdHlwZV0gW2ZzLW9wdGlvbnNdICIKKyJbZmlsZXN5cyAuLi5dXG4iCisKKyM6IG1pc2MvZnNjay5jOjExMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGRldmljZXNcbiIKK21zZ3N0ciAiJXM6IOiuvuWkh+i/h+WkmlxuIgorCisjOiBtaXNjL2ZzY2suYzoxMTUzIG1pc2MvZnNjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIlczog5Y+C5pWw6L+H5aSaXG4iCisKKyM6IG1pc2MvbHNhdHRyLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVzIFstUlZhZGx2XSBbZmlsZXMuLi5dXG4iCittc2dzdHIgIueUqOazlTogJXMgWy1SVmFkbHZdIFtmaWxlcy4uLl1cbiIKKworIzogbWlzYy9sc2F0dHIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSByZWFkaW5nIGZsYWdzIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbHNhdHRyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hpbGUgcmVhZGluZyB2ZXJzaW9uIG9uICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gWy1DIGNsdXN0ZXItc2l6ZV1cbiIKKyJcdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSBbLUogam91cm5hbC1vcHRpb25zXVxuIgorIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdXG4iCisiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdIFstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuIgorIlx0Wy1PIGZlYXR1cmVbLC4uLl1dIFstciBmcy1yZXZpc2lvbl0gWy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV1cbiIKKyJcdFstdCBmcy10eXBlXSBbLVQgdXNhZ2UtdHlwZSBdIFstVSBVVUlEXSBbLWpucXZERktTVl0gZGV2aWNlIFtibG9ja3MtIgorImNvdW50XVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgY29tbWFuZDogJXNcbiIKK21zZ3N0ciAi5q2j5Zyo5omn6KGM5ZG95LukOiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gcnVuICclcyciCittc2dzdHIgIuW9k+Wwneivlei/kOihjCAnJXMnIOaXtiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjgKK21zZ2lkICJ3aGlsZSBwcm9jZXNzaW5nIGxpc3Qgb2YgYmFkIGJsb2NrcyBmcm9tIHByb2dyYW0iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2sgJWQgaW4gcHJpbWFyeSBzdXBlcmJsb2NrL2dyb3VwIGRlc2NyaXB0b3IgYXJlYSBiYWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmxvY2tzICV1IHRocm91Z2ggJXUgbXVzdCBiZSBnb29kIGluIG9yZGVyIHRvIGJ1aWxkIGEgZmlsZXN5c3RlbS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI2MAorbXNnaWQgIkFib3J0aW5nLi4uLlxuIgorbXNnc3RyICLmraPlnKjnu4jmraIuLi5cbiIKKworIzogbWlzYy9ta2UyZnMuYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHRoZSBiYWNrdXAgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9ycyBhdCBibG9jayAldSBjb250YWluXG4iCisiXHRiYWQgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6Mjk5Cittc2dpZCAid2hpbGUgbWFya2luZyBiYWQgYmxvY2tzIGFzIHVzZWQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzozMTYKK21zZ2lkICJXcml0aW5nIGlub2RlIHRhYmxlczogIgorbXNnc3RyICLmraPlnKjlhpnlhaVpbm9kZeihqDogIgorCisjOiBtaXNjL21rZTJmcy5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiQ291bGQgbm90IHdyaXRlICVkIGJsb2NrcyBpbiBpbm9kZSB0YWJsZSBzdGFydGluZyBhdCAlbGx1OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzUxIG1pc2MvbWtlMmZzLmM6MjE3NSBtaXNjL21rZTJmcy5jOjI0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKK21zZ3N0ciAi5a6M5oiQICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjM2MgorbXNnaWQgIndoaWxlIGNyZWF0aW5nIHJvb3QgZGlyIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MzY5Cittc2dpZCAid2hpbGUgcmVhZGluZyByb290IGlub2RlIgorbXNnc3RyICLlvZPor7vlj5blnY/lnZdpbm9kZeaXtiIKKworIzogbWlzYy9ta2UyZnMuYzozODMKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHJvb3QgaW5vZGUgb3duZXJzaGlwIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDAxCittc2dpZCAid2hpbGUgY3JlYXRpbmcgL2xvc3QrZm91bmQiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0MDgKK21zZ2lkICJ3aGlsZSBsb29raW5nIHVwIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDIxCittc2dpZCAid2hpbGUgZXhwYW5kaW5nIC9sb3N0K2ZvdW5kIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDM2Cittc2dpZCAid2hpbGUgc2V0dGluZyBiYWQgYmxvY2sgaW5vZGUiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3V0IG9mIG1lbW9yeSBlcmFzaW5nIHNlY3RvcnMgJWQtJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBjb3VsZCBub3QgcmVhZCBibG9jayAwOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1MDUKK21zZ2lkICJ3aGlsZSBpbml0aWFsaXppbmcgam91cm5hbCBzdXBlcmJsb2NrIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTEzCittc2dpZCAiWmVyb2luZyBqb3VybmFsIGRldmljZTogIgorbXNnc3RyICLmraPlnKjlsIbml6Xlv5forr7lpIfmuIXpm7Y6ICIKKworIzogbWlzYy9ta2UyZnMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgemVyb2luZyBqb3VybmFsIGRldmljZSAoYmxvY2sgJWxsdSwgY291bnQgJWQpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTQzCittc2dpZCAid2hpbGUgd3JpdGluZyBqb3VybmFsIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1NTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3YXJuaW5nOiAlbGx1IGJsb2NrcyB1bnVzZWQuXG4iCisiXG4iCittc2dzdHIgIiIKKyLorablkYo6ICV1IOWdl+acquS9v+eUqC5cbiIKKyJcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBsYWJlbD0lc1xuIgorbXNnc3RyICLmlofku7bns7vnu5/moIfnrb49JXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo1NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk9TIHR5cGU6ICVzXG4iCittc2dzdHIgIuaTjeS9nOezu+e7nzoiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJsb2NrIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDbHVzdGVyIHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyYWdtZW50IHNpemU9JXUgKGxvZz0ldSlcbiIKK21zZ3N0ciAi5YiG5Z2X5aSn5bCPPSV1IChsb2c9JXUpXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN0cmlkZT0ldSBibG9ja3MsIFN0cmlwZSB3aWR0aD0ldSBibG9ja3NcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBpbm9kZXMsICVsbHUgYmxvY2tzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWxsdSBibG9ja3MgKCUyLjJmJSUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlclxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpcnN0IGRhdGEgYmxvY2s9JXVcbiIKK21zZ3N0ciAi56ys5LiA5Liq5pWw5o2u5Z2XPSV1XG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9JWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYmxvY2sgZ3JvdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBjbHVzdGVycyBwZXIgZ3JvdXBcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBibG9ja3MgcGVyIGdyb3VwLCAldSBmcmFnbWVudHMgcGVyIGdyb3VwXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgaW5vZGVzIHBlciBncm91cFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo2ODcgbWlzYy90dW5lMmZzLmM6MTE2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBtbXBfdXBkYXRlX2ludGVydmFsOiAlc1xuIgorbXNnc3RyICLorr7nva7kuobml6DmlYjnmoTmjILovb3pgInpobk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgc3RyaWRlIHBhcmFtZXRlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHN0cmlwZS13aWR0aCBwYXJhbWV0ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo3MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXNpemUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSByZXNpemUgbWF4aW11bSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZXN5c3RlbSBzaXplLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6NzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9uLWxpbmUgcmVzaXppbmcgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjgwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBxdW90YXR5cGUgcGFyYW1ldGVyOiAlc1xuIgorbXNnc3RyICLorr7nva7kuobml6DmlYjnmoTmjILovb3pgInpobk6ICVzXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6ODE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9uKHMpIHNwZWNpZmllZDogJXNcbiIKKyJcbiIKKyJFeHRlbmRlZCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQgbWF5IHRha2UgYW4gYXJndW1lbnQgd2hpY2hcbiIKKyJcdGlzIHNldCBvZmYgYnkgYW4gZXF1YWxzICgnPScpIHNpZ24uXG4iCisiXG4iCisiVmFsaWQgZXh0ZW5kZWQgb3B0aW9ucyBhcmU6XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgZGF0YSBjaHVuayBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGUtd2lkdGg9PFJBSUQgc3RyaWRlICogZGF0YSBkaXNrcyBpbiBibG9ja3M+XG4iCisiXHRyZXNpemU9PHJlc2l6ZSBtYXhpbXVtIHNpemUgaW4gYmxvY2tzPlxuIgorIlx0bGF6eV9pdGFibGVfaW5pdD08MCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZT5cbiIKKyJcdGxhenlfam91cm5hbF9pbml0PTwwIHRvIGRpc2FibGUsIDEgdG8gZW5hYmxlPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0ZGlzY2FyZFxuIgorIlx0bm9kaXNjYXJkXG4iCisiXHRxdW90YXR5cGU9PHVzciBPUiBncnA+XG4iCisiXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldhcm5pbmc6IFJBSUQgc3RyaXBlLXdpZHRoICV1IG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIHN0cmlkZSAldS5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3ludGF4IGVycm9yIGluIG1rZTJmcyBjb25maWcgZmlsZSAoJXMsIGxpbmUgIyVkKVxuIgorIlx0JXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjg5MSBtaXNjL3R1bmUyZnMuYzozOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmaWxlc3lzdGVtIG9wdGlvbiBzZXQ6ICVzXG4iCittc2dzdHIgIuiuvue9ruS6huaXoOaViOeahOaWh+S7tuezu+e7n+mAiemhuTogJXNcbiIKKworIzogbWlzYy9ta2UyZnMuYzo5MDMgbWlzYy90dW5lMmZzLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbW91bnQgb3B0aW9uIHNldDogJXNcbiIKK21zZ3N0ciAi6K6+572u5LqG5peg5pWI55qE5oyC6L296YCJ6aG5OiAlc1xuIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIllvdXIgbWtlMmZzLmNvbmYgZmlsZSBkb2VzIG5vdCBkZWZpbmUgdGhlICVzIGZpbGVzeXN0ZW0gdHlwZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgYW4gdXBkYXRlZCBta2UyZnMuY29uZiBmaWxlLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA1MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcuLi5cbiIKK21zZ3N0ciAi5q2j5Zyo57uI5q2iLi4uXG4iCisKKyM6IG1pc2MvbWtlMmZzLmM6MTA5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZzogdGhlIGZzX3R5cGUgJXMgaXMgbm90IGRlZmluZWQgaW4gbWtlMmZzLmNvbmZcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEyNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IFBBVEguXG4iCittc2dzdHIgIuaXoOazleS4unRkYuaWh+S7tuWQjeWIhumFjeWGheWtmFxuIgorCisjOiBtaXNjL21rZTJmcy5jOjEyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgaW5pdCBwcm9maWxlIHN1Y2Nlc3NmdWxseSAoZXJyb3I6ICVsZCkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxMzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvY2sgc2l6ZSAtICVzIgorbXNnc3RyICLml6DmlYjnmoTlnZflpKflsI8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxMzM0CisjLCBjLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJsb2Nrc2l6ZSAlZCBub3QgdXNhYmxlIG9uIG1vc3Qgc3lzdGVtcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY2x1c3RlciBzaXplIC0gJXMiCittc2dzdHIgIuaXoOaViOeahOWdl+Wkp+WwjyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjIKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgYmxvY2tzIHBlciBncm91cCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNjcKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIG11c3QgYmUgbXVsdGlwbGUgb2YgOCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjEzNzUKK21zZ2lkICJJbGxlZ2FsIG51bWJlciBmb3IgZmxleF9iZyBzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTM4MQorbXNnaWQgImZsZXhfYmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiIKK21zZ3N0ciAiZmxleF9iZyDlpKflsI/lv4XpobvmmK8y55qE5qyh5pa5IgorCisjOiBtaXNjL21rZTJmcy5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSByYXRpbyAlcyAobWluICVkL21heCAlZCkiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiAtSyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIFVzZSAnLUUgIgorIm5vZGlzY2FyZCcgZXh0ZW5kZWQgb3B0aW9uIGluc3RlYWQhXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDE1Cittc2dpZCAiaW4gbWFsbG9jIGZvciBiYWRfYmxvY2tzX2ZpbGVuYW1lIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlc2VydmVkIGJsb2NrcyBwZXJjZW50IC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDQzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXZpc2lvbiBsZXZlbCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlub2RlIHNpemUgLSAlcyIKK21zZ3N0ciAi5peg5pWI55qEaW5vZGXlpKflsI8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW0gaW5vZGVzIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNDkyCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtdCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItb+WPquiDveiiq+aMh+WumuS4gOasoSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTAwCisjLCBmdXp6eQorbXNnaWQgIlRoZSAtVCBvcHRpb24gbWF5IG9ubHkgYmUgdXNlZCBvbmNlIgorbXNnc3RyICItb+WPquiDveiiq+aMh+WumuS4gOasoSIKKworIzogbWlzYy9ta2UyZnMuYzoxNTUwIG1pc2MvbWtlMmZzLmM6MjUwOAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIGRldmljZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTU1NgorIywgYy1mb3JtYXQKK21zZ2lkICJKb3VybmFsIGRldiBibG9ja3NpemUgKCVkKSBzbWFsbGVyIHRoYW4gbWluaW11bSBibG9ja3NpemUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE1NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgam91cm5hbCBkZXZpY2UncyBibG9ja3NpemU6ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2NrcyAnJXMnIG9uIGRldmljZSAnJXMnIgorbXNnc3RyICLml6DmlYjnmoTlnZflpKflsI8gLSAlcyIKKworIzogbWlzYy9ta2UyZnMuYzoxNTgzCittc2dpZCAiZmlsZXN5c3RlbSIKK21zZ3N0ciAi5paH5Lu257O757ufIgorCisjOiBtaXNjL21rZTJmcy5jOjE1OTYgcmVzaXplL21haW4uYzozNzQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDIKK21zZ2lkICIiCisiQ291bGRuJ3QgZGV0ZXJtaW5lIGRldmljZSBzaXplOyB5b3UgbXVzdCBzcGVjaWZ5XG4iCisidGhlIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW1cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MDkKK21zZ2lkICIiCisiRGV2aWNlIHNpemUgcmVwb3J0ZWQgdG8gYmUgemVyby4gIEludmFsaWQgcGFydGl0aW9uIHNwZWNpZmllZCwgb3JcbiIKKyJcdHBhcnRpdGlvbiB0YWJsZSB3YXNuJ3QgcmVyZWFkIGFmdGVyIHJ1bm5pbmcgZmRpc2ssIGR1ZSB0b1xuIgorIlx0YSBtb2RpZmllZCBwYXJ0aXRpb24gYmVpbmcgYnVzeSBhbmQgaW4gdXNlLiAgWW91IG1heSBuZWVkIHRvIHJlYm9vdFxuIgorIlx0dG8gcmUtcmVhZCB5b3VyIHBhcnRpdGlvbiB0YWJsZS5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2MjYKK21zZ2lkICJGaWxlc3lzdGVtIGxhcmdlciB0aGFuIGFwcGFyZW50IGRldmljZSBzaXplLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGZzIHR5cGVzIGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzOiBTaXplIG9mIGRldmljZSAoMHglbGx4IGJsb2NrcykgJXMgdG9vIGJpZyB0byBiZSBleHByZXNzZWRcbiIKKyJcdGluIDMyIGJpdHMgdXNpbmcgYSBibG9ja3NpemUgb2YgJWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzE2Cittc2dpZCAiZnNfdHlwZXMgZm9yIG1rZTJmcy5jb25mIHJlc29sdXRpb246ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZXN5c3RlbSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIHdpdGggcmV2aXNpb24gMCBmaWxlc3lzdGVtc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTczMAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGFyc2Ugc3VwZXJibG9ja3Mgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSm91cm5hbHMgbm90IHN1cHBvcnRlZCB3aXRoIHJldmlzaW9uIDAgZmlsZXN5c3RlbXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnQgLSAlbGYiCittc2dzdHIgIuaXoOaViOeahOWdl+Wkp+WwjyAtICVzIgorCisjOiBtaXNjL21rZTJmcy5jOjE3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSByZXNpemVfaW5vZGUgYW5kIG1ldGFfYmcgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLlxuIgorIlRoZXkgY2FuIG5vdCBiZSBib3RoIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxNzg5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE3OTUKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGRldGVybWluZSBwaHlzaWNhbCBzZWN0b3Igc2l6ZSIKK21zZ3N0ciAi5b2T5bCd6K+V5a+5JXPov5vooYxzdGF06LCD55So5pe2IgorCisjOiBtaXNjL21rZTJmcy5jOjE4MjgKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIGJsb2Nrc2l6ZTsgdG9vIHNtYWxsIGZvciBkZXZpY2VcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHNwZWNpZmllZCBibG9ja3NpemUgJWQgaXMgbGVzcyB0aGFuIGRldmljZSBwaHlzaWNhbCBzZWN0b3JzaXplICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFVuYWJsZSB0byBnZXQgZGV2aWNlIGdlb21ldHJ5IGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg2NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbGlnbm1lbnQgaXMgb2Zmc2V0IGJ5ICVsdSBieXRlcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgbWF5IHJlc3VsdCBpbiB2ZXJ5IHBvb3IgcGVyZm9ybWFuY2UsIChyZSktcGFydGl0aW9uaW5nIHN1Z2dlc3RlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTg4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogJWQtYnl0ZSBibG9ja3MgdG9vIGJpZyBmb3Igc3lzdGVtIChtYXggJWQpLCBmb3JjZWQgdG8gY29udGludWVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MjAKK21zZ2lkICJyZXNlcnZlZCBvbmxpbmUgcmVzaXplIGJsb2NrcyBub3Qgc3VwcG9ydGVkIG9uIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5MjkKK21zZ2lkICJibG9ja3MgcGVyIGdyb3VwIGNvdW50IG91dCBvZiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NDQKK21zZ2lkICJGbGV4X2JnIGZlYXR1cmUgbm90IGVuYWJsZWQsIHNvIGZsZXhfYmcgc2l6ZSBtYXkgbm90IGJlIHNwZWNpZmllZCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpbm9kZSBzaXplICVkIChtaW4gJWQvbWF4ICVkKSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjE5NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgaW5vZGVzICglbGx1KSwgcmFpc2UgaW5vZGUgcmF0aW8/IgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MTk4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBpbm9kZXMgKCVsbHUpLCBzcGVjaWZ5IDwgMl4zMiBpbm9kZXMiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoxOTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbm9kZV9zaXplICgldSkgKiBpbm9kZXNfY291bnQgKCV1KSB0b28gYmlnIGZvciBhXG4iCisiXHRmaWxlc3lzdGVtIHdpdGggJWxsdSBibG9ja3MsIHNwZWNpZnkgaGlnaGVyIGlub2RlX3JhdGlvICgtaSlcbiIKKyJcdG9yIGxvd2VyIGlub2RlIGNvdW50ICgtTikuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJPdmVyd3JpdGluZyBleGlzdGluZyBmaWxlc3lzdGVtOyB0aGlzIGNhbiBiZSB1bmRvbmUgdXNpbmcgdGhlIGNvbW1hbmQ6XG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjEyOAorIywgZnV6enkKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gc2V0dXAgdW5kbyBmaWxlXG4iCittc2dzdHIgIuW9k+WwneivleWvuSVz6L+b6KGMc3RhdOiwg+eUqOaXtiIKKworIzogbWlzYy9ta2UyZnMuYzoyMTU0CisjLCBmdXp6eQorbXNnaWQgIkRpc2NhcmRpbmcgZGV2aWNlIGJsb2NrczogIgorbXNnc3RyICLmraPlnKjor7vlj5bnm67lvZXlnZciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjE3MAorbXNnaWQgImZhaWxlZCAtICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjIyNzcKK21zZ2lkICJ3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2siCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2NhcmQgc3VjY2VlZGVkIGFuZCB3aWxsIHJldHVybiAwcyAgLSBza2lwcGluZyBpbm9kZSB0YWJsZSB3aXBlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb3MgLSAlcyIKK21zZ3N0ciAi5pyq55+l5pON5L2c57O757ufIC0gJXMiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICIKK21zZ3N0ciAi5q2j5Zyo5YaZ5YWlaW5vZGXooag6ICIKKworIzogbWlzYy9ta2UyZnMuYzoyNDI1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIGZpbGVzeXN0ZW0gdGFibGVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjQzNAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIGNvbnZlcnRpbmcgc3ViY2x1c3RlciBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHplcm9pbmcgYmxvY2sgJWxsdSBhdCBlbmQgb2YgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI0OTAKK21zZ2lkICJ3aGlsZSByZXNlcnZpbmcgYmxvY2tzIGZvciBvbmxpbmUgcmVzaXplIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUwMSBtaXNjL3R1bmUyZnMuYzo2NDAKK21zZ2lkICJqb3VybmFsIgorbXNnc3RyICLml6Xlv5ciCisKKyM6IG1pc2MvbWtlMmZzLmM6MjUxMworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgam91cm5hbCB0byBkZXZpY2UgJXM6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlx0d2hpbGUgdHJ5aW5nIHRvIGFkZCBqb3VybmFsIHRvIGRldmljZSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1MjUgbWlzYy9ta2UyZnMuYzoyNTU3IG1pc2MvdHVuZTJmcy5jOjY2OSBtaXNjL3R1bmUyZnMuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZVxuIgorbXNnc3RyICLlrozmiJBcbiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIGpvdXJuYWwgY3JlYXRpb24gaW4gc3VwZXItb25seSBtb2RlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgKCV1IGJsb2Nrcyk6ICIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NTMKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gY3JlYXRlIGpvdXJuYWwiCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTY0IG1pc2MvdHVuZTJmcy5jOjQ0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiRXJyb3Igd2hpbGUgZW5hYmxpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlLiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL21rZTJmcy5jOjI1NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBpcyBlbmFibGVkIHdpdGggdXBkYXRlIGludGVydmFsICVkIHNlY29uZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy9ta2UyZnMuYzoyNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIldyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV2FybmluZywgaGFkIHRyb3VibGUgd3JpdGluZyBvdXQgc3VwZXJibG9ja3MuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvbWtlMmZzLmM6MjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZG9uZVxuIgorIlxuIgorbXNnc3RyICIiCisi5a6M5oiQXG4iCisiXG4iCisKKyM6IG1pc2MvbWtsb3N0K2ZvdW5kLmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IG1rbG9zdCtmb3VuZFxuIgorbXNnc3RyICLnlKjms5U6IG1rbG9zdCtmb3VuZFxuIgorCisjOiBtaXNjL3BhcnRpbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAgJXMgZGV2aWNlLi4uXG4iCisiXG4iCisiUHJpbnRzIG91dCB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGdpdmVuIGRldmljZS5cbiIKKyJGb3IgZXhhbXBsZTogJXMgL2Rldi9oZGFcbiIKKyJcbiIKK21zZ3N0ciAiIgorIueUqOazlTogJXMgZGV2aWNlLi4uXG4iCisiXG4iCisi6L6T5Ye65q+P5Liq57uZ5a6a6K6+5aSH55qE5YiG5Yy65L+h5oGvLlxuIgorIuS+i+WmgjogJXMgL2Rldi9oZGFcbiIKKyJcbiIKKworIzogbWlzYy9wYXJ0aW5mby5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAi5peg5rOV5omT5byAICVzOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgZ2VvbWV0cnkgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvcGFydGluZm8uYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IHNpemUgb2YgJXM6ICVzIgorbXNnc3RyICLml6Dms5XojrflvpcgJXMg55qE5aSn5bCPOiAlcyIKKworIzogbWlzYy9wYXJ0aW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBoPSUzZCBzPSUzZCBjPSU0ZCAgIHN0YXJ0PSU4ZCBzaXplPSU4bHUgZW5kPSU4ZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEwNworbXNnaWQgIlBsZWFzZSBydW4gZTJmc2NrIG9uIHRoZSBmaWxlc3lzdGVtLlxuIgorbXNnc3RyICLor7flnKjov5nkuKrmlofku7bns7vnu5/kuIrov5DooYwgZTJmc2NrLlxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiAlcyBbLWMgbWF4X21vdW50c19jb3VudF0gWy1lIGVycm9yc19iZWhhdmlvcl0gWy1nIGdyb3VwXVxuIgorIlx0Wy1pIGludGVydmFsW2R8bXx3XV0gWy1qXSBbLUogam91cm5hbF9vcHRpb25zXSBbLWxdXG4iCisiXHRbLW0gcmVzZXJ2ZWRfYmxvY2tzX3BlcmNlbnRdIFstbyBbXl1tb3VudF9vcHRpb25zWywuLi5dXSBbLXAgIgorIm1tcF91cGRhdGVfaW50ZXJ2YWxdXG4iCisiXHRbLXIgcmVzZXJ2ZWRfYmxvY2tzX2NvdW50XSBbLXUgdXNlcl0gWy1DIG1vdW50X2NvdW50XSBbLUwgdm9sdW1lX2xhYmVsXVxuIgorIlx0Wy1NIGxhc3RfbW91bnRlZF9kaXJdIFstTyBbXl1mZWF0dXJlWywuLi5dXVxuIgorIlx0Wy1FIGV4dGVuZGVkLW9wdGlvblssLi4uXV0gWy1UIGxhc3RfY2hlY2tfdGltZV0gWy1VIFVVSURdXG4iCisiXHRbIC1JIG5ld19pbm9kZV9zaXplIF0gZGV2aWNlXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjA1Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gZXh0ZXJuYWwgam91cm5hbCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiVzIOS4jeaYr+S4gOS4quaXpeW/l+iuvuWkhy5cbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjI1Cittc2dpZCAiSm91cm5hbCBzdXBlcmJsb2NrIG5vdCBmb3VuZCFcbiIKK21zZ3N0ciAi5pel5b+X6LaF57qn5Z2X5pyq5om+5YiwIVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMzYKK21zZ2lkICJGaWxlc3lzdGVtJ3MgVVVJRCBub3QgZm91bmQgb24gam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjU3Cittc2dpZCAiIgorIkNhbm5vdCBsb2NhdGUgam91cm5hbCBkZXZpY2UuIEl0IHdhcyBOT1QgcmVtb3ZlZFxuIgorIlVzZSAtZiBvcHRpb24gdG8gcmVtb3ZlIG1pc3Npbmcgam91cm5hbCBkZXZpY2UuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjY1Cittc2dpZCAiSm91cm5hbCByZW1vdmVkXG4iCittc2dzdHIgIuaXpeW/l+W3suWIoOmZpFxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozMDkKK21zZ2lkICJ3aGlsZSByZWFkaW5nIGJpdG1hcHMiCittc2dzdHIgIuW9k+ivu+WPluS9jeWbvuaXtiIKKworIzogbWlzYy90dW5lMmZzLmM6MzE3Cittc2dpZCAid2hpbGUgY2xlYXJpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAi5b2T6K+75Y+W5Z2P5Z2XaW5vZGXml7YiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjMyOAorbXNnaWQgIndoaWxlIHdyaXRpbmcgam91cm5hbCBpbm9kZSIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGFuZCByZWJvb3QgYWZ0ZXJ3YXJkcyEpXG4iCittc2dzdHIgIijlubbkuJTov4flkI7ph43lkK8hKVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzozOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXJpbmcgZmlsZXN5c3RlbSBmZWF0dXJlICclcycgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBmaWxlc3lzdGVtIGZlYXR1cmUgJyVzJyBub3Qgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQxMQorbXNnaWQgIiIKKyJUaGUgaGFzX2pvdXJuYWwgZmVhdHVyZSBtYXkgb25seSBiZSBjbGVhcmVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXNcbiIKKyJ1bm1vdW50ZWQgb3IgbW91bnRlZCByZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDE5Cittc2dpZCAiIgorIlRoZSBuZWVkc19yZWNvdmVyeSBmbGFnIGlzIHNldC4gIFBsZWFzZSBydW4gZTJmc2NrIGJlZm9yZSBjbGVhcmluZ1xuIgorInRoZSBoYXNfam91cm5hbCBmbGFnLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQzOAorbXNnaWQgIiIKKyJUaGUgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiBmZWF0dXJlIGNhbid0XG4iCisiYmUgc2V0IGlmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3JcbiIKKyJyZWFkLW9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIk11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB3aXRoIHVwZGF0ZSBpbnRlcnZhbCAlZHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDY1Cittc2dpZCAiIgorIlRoZSBtdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGZlYXR1cmUgY2Fubm90XG4iCisiYmUgZGlzYWJsZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmVhZG9ubHkuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NDczCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHJlYWRpbmcgYml0bWFwc1xuIgorbXNnc3RyICLlvZPor7vlj5bkvY3lm77ml7YiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWdpYyBudW1iZXIgaW4gTU1QIGJsb2NrIGRvZXMgbm90IG1hdGNoLiBleHBlY3RlZDogJXgsIGFjdHVhbDogJXhcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo0ODcKKyMsIGZ1enp5Cittc2dpZCAid2hpbGUgcmVhZGluZyBNTVAgYmxvY2suIgorbXNnc3RyICLlvZPor7vlj5blnY/lnZdpbm9kZeaXtiIKKworIzogbWlzYy90dW5lMmZzLmM6NTE5Cittc2dpZCAiIgorIkNsZWFyaW5nIHRoZSBmbGV4X2JnIGZsYWcgd291bGQgY2F1c2UgdGhlIHRoZSBmaWxlc3lzdGVtIHRvIGJlXG4iCisiaW5jb25zaXN0ZW50LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjUzMAorbXNnaWQgIiIKKyJUaGUgaHVnZV9maWxlIGZlYXR1cmUgbWF5IG9ubHkgYmUgY2xlYXJlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzXG4iCisidW5tb3VudGVkIG9yIG1vdW50ZWQgcmVhZC1vbmx5LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjU5MAorbXNnaWQgIiIKKyJcbiIKKyJXYXJuaW5nOiAnXnF1b3RhJyBvcHRpb24gb3ZlcnJpZGVzICctUSdhcmd1bWVudHMuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjM1Cittc2dpZCAiVGhlIGZpbGVzeXN0ZW0gYWxyZWFkeSBoYXMgYSBqb3VybmFsLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXHR3aGlsZSB0cnlpbmcgdG8gb3BlbiBqb3VybmFsIG9uICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNyZWF0aW5nIGpvdXJuYWwgb24gZGV2aWNlICVzOiAiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIGFkZGluZyBmaWxlc3lzdGVtIHRvIGpvdXJuYWwgb24gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6NjcxCittc2dpZCAiQ3JlYXRpbmcgam91cm5hbCBpbm9kZTogIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjY4MAorbXNnaWQgIiIKKyJcbiIKKyJcdHdoaWxlIHRyeWluZyB0byBjcmVhdGUgam91cm5hbCBmaWxlIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc2MworIywgZnV6enkKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcGFyc2UgcXVvdGEgb3B0aW9ucyFcbiIKK21zZ3N0ciAi5peg5rOV5Li6dGRi5paH5Lu25ZCN5YiG6YWN5YaF5a2YXG4iCisKKyM6IG1pc2MvdHVuZTJmcy5jOjc4NQorbXNnaWQgIiIKKyJcbiIKKyJCYWQgcXVvdGEgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRm9sbG93aW5nIHZhbGlkIHF1b3RhIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAocGFzcyBieSBzZXBhcmF0aW5nIHdpdGggIgorImNvbW1hKTpcbiIKKyJcdFteXXVzcnF1b3RhXG4iCisiXHRbXl1ncnBxdW90YVxuIgorIlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBwYXJzZSBkYXRlL3RpbWUgc3BlY2lmaWVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo4NzAgbWlzYy90dW5lMmZzLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtb3VudHMgY291bnQgLSAlcyIKK21zZ3N0ciAi6ZSZ6K+v5oyC6L296K6h5pWwIC0gJXMiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjg5OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZXJyb3IgYmVoYXZpb3IgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGdpZC9ncm91cCBuYW1lIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6OTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbnRlcnZhbCAtICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVzZXJ2ZWQgYmxvY2sgcmF0aW8gLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDAzCittc2dpZCAiLW8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1v5Y+q6IO96KKr5oyH5a6a5LiA5qyhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDEyCittc2dpZCAiLU8gbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIi1P5Y+q6IO96KKr5oyH5a6a5LiA5qyhIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDI3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXNlcnZlZCBibG9ja3MgY291bnQgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB1aWQvdXNlciBuYW1lIC0gJXMiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTA3MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5vZGUgc2l6ZSAtICVzIgorbXNnc3RyICLml6DmlYjnmoRpbm9kZeWkp+WwjyAtICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIklub2RlIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by0gJXMiCittc2dzdHIgIklub2RlIOWkp+Wwj+W/hemhu+aYrzLnmoTmrKHmlrktICVzIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1tcF91cGRhdGVfaW50ZXJ2YWwgdG9vIGJpZzogJWx1XG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gdXBkYXRlIGludGVydmFsIHRvICVsdSBzZWNvbmRcbiIKK21zZ2lkX3BsdXJhbCAiIgorIlNldHRpbmcgbXVsdGlwbGUgbW91bnQgcHJvdGVjdGlvbiB1cGRhdGUgaW50ZXJ2YWwgdG8gJWx1IHNlY29uZHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBSQUlEIHN0cmlkZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgUkFJRCBzdHJpcGUtd2lkdGg6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGhhc2ggYWxnb3JpdGhtOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBkZWZhdWx0IGhhc2ggYWxnb3JpdGhtIHRvICVzICglZClcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxMjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJCYWQgb3B0aW9ucyBzcGVjaWZpZWQuXG4iCisiXG4iCisiRXh0ZW5kZWQgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGV4dGVuZGVkIG9wdGlvbnMgYXJlOlxuIgorIlx0Y2xlYXJfbW1wXG4iCisiXHRoYXNoX2FsZz08aGFzaCBhbGdvcml0aG0+XG4iCisiXHRtb3VudF9vcHRzPTxleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnM+XG4iCisiXHRzdHJpZGU9PFJBSUQgcGVyLWRpc2sgY2h1bmsgc2l6ZSBpbiBibG9ja3M+XG4iCisiXHRzdHJpcGVfd2lkdGg9PFJBSUQgc3RyaWRlKmRhdGEgZGlza3MgaW4gYmxvY2tzPlxuIgorIlx0dGVzdF9mc1xuIgorIlx0XnRlc3RfZnNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzIzCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCB0byByZWFkIGlub2RlIGJpdG1hcFxuIgorbXNnc3RyICLlvZPor7vlj5bkvY3lm77ml7YiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3MjgKKyMsIGZ1enp5Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgYmxvY2sgYml0bWFwXG4iCittc2dzdHIgIumUmeivr+Wdl+aYoOWwhOS4reeahGlub2RlIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzQ1IHJlc2l6ZS9yZXNpemUyZnMuYzo3ODQKK21zZ2lkICJibG9ja3MgdG8gYmUgbW92ZWQiCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc0OAorbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSBibG9jayBiaXRtYXAgd2hlbiBpbmNyZWFzaW5nIGlub2RlIHNpemVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoxNzU0Cittc2dpZCAiTm90IGVub3VnaCBzcGFjZSB0byBpbmNyZWFzZSBpbm9kZSBzaXplIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE3NTkKK21zZ2lkICJGYWlsZWQgdG8gcmVsb2NhdGUgYmxvY2tzIGR1cmluZyBpbm9kZSByZXNpemUgXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTc5MQorbXNnaWQgIiIKKyJFcnJvciBpbiByZXNpemluZyB0aGUgaW5vZGUgc2l6ZS5cbiIKKyJSdW4gZTJ1bmRvIHRvIHVuZG8gdGhlIGZpbGUgc3lzdGVtIGNoYW5nZXMuIFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE4MTgKK21zZ2lkICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRkYiBmaWxlbmFtZVxuIgorbXNnc3RyICLml6Dms5XkuLp0ZGLmlofku7blkI3liIbphY3lhoXlrZhcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSB0cnlpbmcgdG8gZGVsZXRlICVzIgorbXNnc3RyICLlvZPlsJ3or5XliKDpmaQgJXMg5pe2IgorCisjOiBtaXNjL3R1bmUyZnMuYzoxODUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUbyB1bmRvIHRoZSB0dW5lMmZzIG9wZXJhdGlvbiBwbGVhc2UgcnVuIHRoZSBjb21tYW5kXG4iCisiICAgIGUydW5kbyAlcyAlc1xuIgorIlxuIgorbXNnc3RyICIiCisi6KaB5pKk6ZSA6L+Z5qyhIHR1bmUyZnMg5pON5L2c6K+36L+Q6KGM5ZG95LukOlxuIgorIiAgICBlMnVuZG8gJXMgJXNcbiIKKyJcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTU1QIGJsb2NrIG1hZ2ljIGlzIGJhZC4gVHJ5IHRvIGZpeCBpdCBieSBydW5uaW5nOlxuIgorIidlMmZzY2sgLWYgJXMnXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTkzNworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgaW5vZGUgc2l6ZSBpcyBhbHJlYWR5ICVsdVxuIgorbXNnc3RyICJpbm9kZeWkp+Wwj+W3sue7j+aYryAlbHVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk0MworIywgYy1mb3JtYXQKK21zZ2lkICJTaHJpbmtpbmcgdGhlIGlub2RlIHNpemUgaXMgbm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjE5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBtYXhpbWFsIG1vdW50IGNvdW50IHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MTk5NgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGN1cnJlbnQgbW91bnQgY291bnQgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgZXJyb3IgYmVoYXZpb3IgdG8gJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGdpZCB0byAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDExCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyBpcyB0b28gYmlnICglbHUpIgorbXNnc3RyICLkv53nlZnlnZfnmoTmlbDph4/lpKrlpKcgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBpbnRlcnZhbCBiZXR3ZWVuIGNoZWNrcyB0byAlbHUgc2Vjb25kc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIHBlcmNlbnRhZ2UgdG8gJWclJSAoJWxsdSBibG9ja3MpXG4iCittc2dzdHIgIuS/neeVmeWdl+eahOaVsOmHj+WkquWkpyAoJWx1KSIKKworIzogbWlzYy90dW5lMmZzLmM6MjAzMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVzZXJ2ZWQgYmxvY2tzIGNvdW50IGlzIHRvbyBiaWcgKCVsbHUpIgorbXNnc3RyICLkv53nlZnlnZfnmoTmlbDph4/lpKrlpKcgKCVsdSkiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgcmVzZXJ2ZWQgYmxvY2tzIGNvdW50IHRvICVsbHVcbiIKK21zZ3N0ciAi5L+d55WZ5Z2X55qE5pWw6YeP5aSq5aSnICglbHUpIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDQ0Cittc2dpZCAiIgorIlxuIgorIlRoZSBmaWxlc3lzdGVtIGFscmVhZHkgaGFzIHNwYXJzZSBzdXBlcmJsb2Nrcy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTcGFyc2Ugc3VwZXJibG9jayBmbGFnIHNldC4gICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNTYKK21zZ2lkICIiCisiXG4iCisiQ2xlYXJpbmcgdGhlIHNwYXJzZSBzdXBlcmZsYWcgbm90IHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdGltZSBmaWxlc3lzdGVtIGxhc3QgY2hlY2tlZCB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIwNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyByZXNlcnZlZCBibG9ja3MgdWlkIHRvICVsdVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxMDIKK21zZ2lkICJFcnJvciBpbiB1c2luZyBjbGVhcl9tbXAuIEl0IG11c3QgYmUgdXNlZCB3aXRoIC1mXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjEyMAorbXNnaWQgIiIKKyJUaGUgcXVvdGEgZmVhdHVyZSBtYXkgb25seSBiZSBjaGFuZ2VkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIxNTMKK21zZ2lkICJJbnZhbGlkIFVVSUQgZm9ybWF0XG4iCittc2dzdHIgIuaXoOaViOeahCBVVUlEIOagvOW8j1xuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTY2Cittc2dpZCAiVGhlIGlub2RlIHNpemUgbWF5IG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHVubW91bnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTc0Cittc2dpZCAiIgorIkNoYW5naW5nIHRoZSBpbm9kZSBzaXplIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzeXN0ZW1zIHdpdGggdGhlIGZsZXhfYmdcbiIKKyJmZWF0dXJlIGVuYWJsZWQuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGlub2RlIHNpemUgJWx1XG4iCittc2dzdHIgIuato+WcqOWwhmlub2Rl5aSn5bCP6K6+572u5Li6ICVsdVxuIgorCisjOiBtaXNjL3R1bmUyZnMuYzoyMTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIGlub2RlIHNpemVcbiIKK21zZ3N0ciAi5omT5byAJXPlpLHotKVcbiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlkZSBzaXplIHRvICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy90dW5lMmZzLmM6MjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0cmlwZSB3aWR0aCB0byAlZFxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdHVuZTJmcy5jOjIyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBleHRlbmRlZCBkZWZhdWx0IG1vdW50IG9wdGlvbnMgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjc0Cittc2dpZCAiUHJvY2VlZCBhbnl3YXk/ICh5LG4pICIKK21zZ3N0ciAi5peg6K665aaC5L2V5Lmf6KaB57un57utPyAoeSxuKSAiCisKKyM6IG1pc2MvdXRpbC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICVzIC0tLSAlc1xuIgorbXNnc3RyICLml6Dms5Xlr7kgJXMg6L+b6KGMIHN0YXQg6LCD55SoIC0tLSAlc1xuIgorCisjOiBtaXNjL3V0aWwuYzo5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGUgZGV2aWNlIGFwcGFyZW50bHkgZG9lcyBub3QgZXhpc3Q7IGRpZCB5b3Ugc3BlY2lmeSBpdCBjb3JyZWN0bHk/XG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MTAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSBibG9jayBzcGVjaWFsIGRldmljZS5cbiIKK21zZ3N0ciAi6ZSZ6K+v77yaJXMg5LiN5piv5Z2X6K6+5aSHXG4iCisKKyM6IG1pc2MvdXRpbC5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBlbnRpcmUgZGV2aWNlLCBub3QganVzdCBvbmUgcGFydGl0aW9uIVxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE1NAorbXNnaWQgIm1rZTJmcyBmb3JjZWQgYW55d2F5LiAgSG9wZSAvZXRjL210YWIgaXMgaW5jb3JyZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXRpbC5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aWxsIG5vdCBtYWtlIGEgJXMgaGVyZSFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoxNjYKK21zZ2lkICJta2UyZnMgZm9yY2VkIGFueXdheS5cbiIKK21zZ3N0ciAibWtlMmZzIOW8uuWItuaJp+ihjC5cbiIKKworIzogbWlzYy91dGlsLmM6MTgyCittc2dpZCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHBhcnNlIGpvdXJuYWwgb3B0aW9ucyFcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkNvdWxkIG5vdCBmaW5kIGpvdXJuYWwgZGV2aWNlIG1hdGNoaW5nICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6MjI4Cittc2dpZCAiIgorIlxuIgorIkJhZCBqb3VybmFsIG9wdGlvbnMgc3BlY2lmaWVkLlxuIgorIlxuIgorIkpvdXJuYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYW5kIG1heSB0YWtlIGFuIGFyZ3VtZW50IHdoaWNoXG4iCisiXHRpcyBzZXQgb2ZmIGJ5IGFuIGVxdWFscyAoJz0nKSBzaWduLlxuIgorIlxuIgorIlZhbGlkIGpvdXJuYWwgb3B0aW9ucyBhcmU6XG4iCisiXHRzaXplPTxqb3VybmFsIHNpemUgaW4gbWVnYWJ5dGVzPlxuIgorIlx0ZGV2aWNlPTxqb3VybmFsIGRldmljZT5cbiIKKyJcbiIKKyJUaGUgam91cm5hbCBzaXplIG11c3QgYmUgYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBmaWxlc3lzdGVtIGJsb2Nrcy5cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyNTgKK21zZ2lkICIiCisiXG4iCisiRmlsZXN5c3RlbSB0b28gc21hbGwgZm9yIGEgam91cm5hbFxuIgorbXNnc3RyICIiCisiXG4iCisi5paH5Lu257O757uf5bCP5b6X5peg5rOV6K6w5b2V5pel5b+XXG4iCisKKyM6IG1pc2MvdXRpbC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVGhlIHJlcXVlc3RlZCBqb3VybmFsIHNpemUgaXMgJWQgYmxvY2tzOyBpdCBtdXN0IGJlXG4iCisiYmV0d2VlbiAxMDI0IGFuZCAxMDI0MDAwMCBibG9ja3MuICBBYm9ydGluZy5cbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V0aWwuYzoyNzMKK21zZ2lkICIiCisiXG4iCisiSm91cm5hbCBzaXplIHRvbyBiaWcgZm9yIGZpbGVzeXN0ZW0uXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIGZpbGVzeXN0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgZXZlcnkgJWQgbW91bnRzIG9yXG4iCisiJWcgZGF5cywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LiAgVXNlIHR1bmUyZnMgLWMgb3IgLWkgdG8gb3ZlcnJpZGUuXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlcyBbLWRdIFstcCBwaWRmaWxlXSBbLXMgc29ja2V0cGF0aF0gWy1UIHRpbWVvdXRdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyBbLXJ8dF0gWy1uIG51bV0gWy1zIHNvY2tldHBhdGhdXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAgICAlcyAta1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzoxNTQKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFyZ3VtZW50cyIKK21zZ3N0ciAiJXM6IOWPguaVsOi/h+WkmlxuIgorCisjOiBtaXNjL3V1aWRkLmM6MTcyCittc2dpZCAiY29ubmVjdCIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MTkxCittc2dpZCAid3JpdGUiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjE5OQorbXNnaWQgInJlYWQgY291bnQiCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjIwNQorIywgZnV6enkKK21zZ2lkICJiYWQgcmVzcG9uc2UgbGVuZ3RoIgorbXNnc3RyICLml6DmlYjnmoTlkI7nvIDplb/luqYiCisKKyM6IG1pc2MvdXVpZGQuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXVpZGQgZGFlbW9uIGFscmVhZHkgcnVubmluZyBhdCBwaWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNyZWF0ZSB1bml4IHN0cmVhbSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgYmluZCB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxpc3RlbiBvbiB1bml4IHNvY2tldCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6MzUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGZyb20gY2xpZW50LCBsZW4gPSAlZFxuIgorbXNnc3RyICLor7vlj5ZAaSAlaeWHuumUmTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJvcGVyYXRpb24gJWQsIGluY29taW5nIG51bSA9ICVkXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJHZW5lcmF0ZWQgdGltZSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHJhbmRvbSBVVUlEOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkIHRpbWUgVVVJRCAlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIkdlbmVyYXRlZCB0aW1lIFVVSUQgJXMgYW5kICVkIHN1YnNlcXVlbnQgVVVJRHNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1pc2MvdXVpZGQuYzo0MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiR2VuZXJhdGVkICVkIFVVSUQnczpcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NDMyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiAlZFxuIgorbXNnc3RyICLml6DmlYjnmoRFQeeJiOacrOWPty5cbiIKKworIzogbWlzYy91dWlkZC5jOjQ3NiBtaXNjL3V1aWRkLmM6NDk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjUzMyBtaXNjL3V1aWRkLmM6NTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjYWxsaW5nIHV1aWRkIGRhZW1vbiAoJXMpOiAlc1xuIgorbXNnc3RyICLliJvlu7rmoLlAZCAoJXMpIOaXtuWHuumUmTogJW1cbiIKKworIzogbWlzYy91dWlkZC5jOjU0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbmQgc3Vic2VxdWVudCBVVUlEXG4iCittc2dpZF9wbHVyYWwgIiVzIGFuZCBzdWJzZXF1ZW50ICVkIFVVSURzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkxpc3Qgb2YgVVVJRCdzOlxuIgorbXNnc3RyICIiCisKKyM6IG1pc2MvdXVpZGQuYzo1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCByZXBseSBsZW5ndGggZnJvbSBzZXJ2ZXIgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRkLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGtpbGwgdXVpZGQgcnVubmluZyBhdCBwaWQgJWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogbWlzYy91dWlkZC5jOjU5MQorIywgYy1mb3JtYXQKK21zZ2lkICJLaWxsZWQgdXVpZGQgcnVubmluZyBhdCBwaWQgJWRcbiIKK21zZ3N0ciAiIgorCisjOiBtaXNjL3V1aWRnZW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJXMgWy1yXSBbLXRdXG4iCittc2dzdHIgIueUqOazlTogJXMgWy1yXSBbLXRdXG4iCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDIKK21zZ2lkICIjIEV4dGVudCBkdW1wOlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9leHRlbnQuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiI1x0TnVtPSVsbHUsIFNpemU9JWxsdSwgQ3Vyc29yPSVsbHUsIFNvcnRlZD0lbGx1XG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6ICVzIFstZCBkZWJ1Z19mbGFnc10gWy1mXSBbLUZdIFstTV0gWy1QXSBbLXBdIGRldmljZSBbbmV3X3NpemVdXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo2NQorbXNnaWQgIkV4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUiCittc2dzdHIgIuato+WcqOaJqeWFhWlub2Rl6KGoIgorCisjOiByZXNpemUvbWFpbi5jOjY4Cittc2dpZCAiUmVsb2NhdGluZyBibG9ja3MiCittc2dzdHIgIuato+WcqOmHjeWumuS9jeWdlyIKKworIzogcmVzaXplL21haW4uYzo3MQorbXNnaWQgIlNjYW5uaW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICLmraPlnKjmiavmj49pbm9kZeihqCIKKworIzogcmVzaXplL21haW4uYzo3NAorbXNnaWQgIlVwZGF0aW5nIGlub2RlIHJlZmVyZW5jZXMiCittc2dzdHIgIuato+WcqOabtOaWsGlub2Rl5byV55SoIgorCisjOiByZXNpemUvbWFpbi5jOjc3Cittc2dpZCAiTW92aW5nIGlub2RlIHRhYmxlIgorbXNnc3RyICLnp7vliqhpbm9kZeihqCIKKworIzogcmVzaXplL21haW4uYzo4MAorbXNnaWQgIlVua25vd24gcGFzcz8hPyIKK21zZ3N0ciAi5pyq55+l5q2l6aqkPyE/IgorCisjOiByZXNpemUvbWFpbi5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ3aGlsZSBvcGVuaW5nICVzIgorbXNnc3RyICLmiZPlvIAlc+aXtiIKKworIzogcmVzaXplL21haW4uYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIKK21zZ3N0ciAi6I635Y+WJXPnmoRzdGF05L+h5oGv5pe25Ye66ZSZ44CCIgorCisjOiByZXNpemUvbWFpbi5jOjMzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXM6IFRoZSBjb21iaW5hdGlvbiBvZiBmbGV4X2JnIGFuZFxuIgorIlx0IXJlc2l6ZV9pbm9kZSBmZWF0dXJlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHJlc2l6ZTJmcy5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjM0NCByZXNpemUvbWFpbi5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1mICVzJyBmaXJzdC5cbiIKKyJcbiIKK21zZ3N0ciAiIgorIuivt+WFiOi/kOihjCAnZTJmc2NrIC1mICVzJy5cbiIKKyJcbiIKKworIzogcmVzaXplL21haW4uYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0aW1hdGVkIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbTogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbmV3IHNpemU6ICVzXG4iCittc2dzdHIgIuaXoOaViOeahOaWsOWkp+Wwjzolc1xuIgorCisjOiByZXNpemUvbWFpbi5jOjM5MgorbXNnaWQgIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSBleHByZXNzZWQgaW4gMzIgYml0c1xuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5ldyBzaXplIHNtYWxsZXIgdGhhbiBtaW5pbXVtICglbGx1KVxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDEwCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgc3RyaWRlIGxlbmd0aCIKK21zZ3N0ciAi5peg5pWI55qE5ZCO57yA6ZW/5bqmIgorCisjOiByZXNpemUvbWFpbi5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uIChvciBkZXZpY2UpIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG4iCisiWW91IHJlcXVlc3RlZCBhIG5ldyBzaXplIG9mICVsbHUgYmxvY2tzLlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzIGxvbmcuICBOb3RoaW5nIHRvIGRvIVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uICVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9tYWluLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiCittc2dzdHIgIuW9k+Wwneivleiwg+aVtCVz55qE5aSn5bCP5pe2IgorCisjOiByZXNpemUvbWFpbi5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIHJ1biAnZTJmc2NrIC1meSAlcycgdG8gZml4IHRoZSBmaWxlc3lzdGVtXG4iCisiYWZ0ZXIgdGhlIGFib3J0ZWQgcmVzaXplIG9wZXJhdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvbWFpbi5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZpbGVzeXN0ZW0gb24gJXMgaXMgbm93ICVsbHUgYmxvY2tzIGxvbmcuXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL21haW4uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIgorbXNnc3RyICLlvZPlsJ3or5Xlr7klc+i/m+ihjHN0YXTosIPnlKjml7YiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXM7IG9uLWxpbmUgcmVzaXppbmcgcmVxdWlyZWRcbiIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6NDQKK21zZ2lkICJPbi1saW5lIHNocmlua2luZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo2MworbXNnaWQgIkZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIuaWh+S7tuezu+e7n+S4jeaUr+aMgeWcqOe6vyhvbmxpbmUp6LCD5pW05aSn5bCPIgorCisjOiByZXNpemUvb25saW5lLmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid2hpbGUgdHJ5aW5nIHRvIG9wZW4gbW91bnRwb2ludCAlcyIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6OTIgcmVzaXplL29ubGluZS5jOjExNgorbXNnaWQgIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIgorbXNnc3RyICLmsqHmnInosIPmlbTmlofku7bns7vnu5/lpKflsI/nmoTmnYPpmZAiCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzo5NSByZXNpemUvb25saW5lLmM6MTIyCittc2dpZCAiV2hpbGUgY2hlY2tpbmcgZm9yIG9uLWxpbmUgcmVzaXppbmcgc3VwcG9ydCIKK21zZ3N0ciAi5b2T5qOA5p+l5Zyo57q/5paH5Lu257O757uf5aSn5bCP6LCD5pW05pSv5oyB5pe2IgorCisjOiByZXNpemUvb25saW5lLmM6MTA3CisjLCBmdXp6eQorbXNnaWQgIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IHJlc2l6aW5nIGEgZmlsZSBzeXN0ZW0gdGhpcyBsYXJnZSIKK21zZ3N0ciAi5YaF5qC45LiN5pSv5oyB5Zyo57q/KG9ubGluZSnosIPmlbTlpKflsI8iCisKKyM6IHJlc2l6ZS9vbmxpbmUuYzoxMTkKK21zZ2lkICJLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcmVzaXppbmciCittc2dzdHIgIuWGheaguOS4jeaUr+aMgeWcqOe6vyhvbmxpbmUp6LCD5pW05aSn5bCPIgorCisjOiByZXNpemUvb25saW5lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjE2MgorbXNnaWQgIldoaWxlIHRyeWluZyB0byBleHRlbmQgdGhlIGxhc3QgZ3JvdXAiCittc2dzdHIgIiIKKworIzogcmVzaXplL29ubGluZS5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIKK21zZ3N0ciAiIgorCisjOiByZXNpemUvb25saW5lLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGaWxlc3lzdGVtIGF0ICVzIGlzIG1vdW50ZWQgb24gJXMsIGFuZCBvbi1saW5lIHJlc2l6aW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gIgorInRoaXMgc3lzdGVtLlxuIgorbXNnc3RyICLmlofku7bns7vnu58gJXMg6KKr5oyC6L295ZyoICVzLOW5tuS4lOi/meS4quezu+e7n+S4jeaUr+aMgeWcqOe6v+iwg+aVtOWkp+Wwjy5cbiIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbm9kZXMgKCVsbHUpIG11c3QgYmUgbGVzcyB0aGFuICV1IgorbXNnc3RyICIiCisKKyM6IHJlc2l6ZS9yZXNpemUyZnMuYzo1NzYKK21zZ2lkICJyZXNlcnZlZCBibG9ja3MiCittc2dzdHIgIuS/neeVmeeahOWdlyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjc4OQorbXNnaWQgIm1ldGEtZGF0YSBibG9ja3MiCittc2dzdHIgIuWFg+aVsOaNruWdlyIKKworIzogcmVzaXplL3Jlc2l6ZTJmcy5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExCittc2dpZCAiRVhUMkZTIExpYnJhcnkgdmVyc2lvbiAxLjQyLjQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyX2ZpbHN5cyBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfbGlzdCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBiYWRibG9ja3NfaXRlcmF0ZSBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE1Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZV9zY2FuIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTYKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgdW5peCBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTgKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlvX21hbmFnZXIgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgYmxvY2tfYml0bWFwIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGlub2RlX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBnZW5lcmljX2JpdG1hcCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjIyCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciB0ZXN0IGlvX2NoYW5uZWwgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgZGlyZWN0b3J5IGJsb2NrIGxpc3Qgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgaWNvdW50IHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjUKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIFBvd2VycXVlc3QgaW9fY2hhbm5lbCBzdHJ1Y3R1cmUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI2Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQyIGZpbGUgc3RydWN0dXJlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciBmb3IgRXh0MiBJbWFnZSBIZWFkZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjI4Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBpbm9kZSBpb19jaGFubmVsIHN0cnVjdHVyZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MjkKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIGV4dDQgZXh0ZW50IGhhbmRsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzAKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG1hZ2ljIG51bWJlciBpbiBzdXBlci1ibG9jayIKK21zZ3N0ciAi6K+75Y+W5pel5b+X6LaF57qn5Z2XXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozMQorbXNnaWQgIkZpbGVzeXN0ZW0gcmV2aXNpb24gdG9vIGhpZ2giCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMyCittc2dpZCAiQXR0ZW1wdCB0byB3cml0ZSB0byBmaWxlc3lzdGVtIG9wZW5lZCByZWFkLW9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHJlYWQgZ3JvdXAgZGVzY3JpcHRvcnMiCittc2dzdHIgIiwg57uE5o+P6L+w56ym5L2N5LqOICIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM0CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGdyb3VwIGRlc2NyaXB0b3JzIgorbXNnc3RyICIsIOe7hOaPj+i/sOespuS9jeS6jiAiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzozNQorbXNnaWQgIkNvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM2Cittc2dpZCAiQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzcKK21zZ2lkICJDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjM4CisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGFuIGlub2RlIGJpdG1hcCIKK21zZ3N0ciAiaW5vZGUg5L2N5Zu+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MzkKKyMsIGZ1enp5Cittc2dpZCAiQ2FuJ3QgcmVhZCBhbiBpbm9kZSBiaXRtYXAiCittc2dzdHIgImlub2RlIOS9jeWbviIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQwCisjLCBmdXp6eQorbXNnaWQgIkNhbid0IHdyaXRlIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICLlnZfkvY3lm74iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MQorIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGEgYmxvY2sgYml0bWFwIgorbXNnc3RyICLlnZfkvY3lm74iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MgorIywgZnV6enkKK21zZ2lkICJDYW4ndCB3cml0ZSBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAi5q2j5Zyo5omr5o+PaW5vZGXooagiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0MworIywgZnV6enkKK21zZ2lkICJDYW4ndCByZWFkIGFuIGlub2RlIHRhYmxlIgorbXNnc3RyICLmraPlnKjmiavmj49pbm9kZeihqCIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ0Cittc2dpZCAiQ2FuJ3QgcmVhZCBuZXh0IGlub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0NQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuZXhwZWN0ZWQgYmxvY2sgc2l6ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDYKK21zZ2lkICJFWFQyIGRpcmVjdG9yeSBjb3JydXB0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjQ3Cittc2dpZCAiQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo0OAorbXNnaWQgIkF0dGVtcHQgdG8gd3JpdGUgYmxvY2sgdG8gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCB3cml0ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NDkKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIHRoZSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUwCisjLCBmdXp6eQorbXNnaWQgIklub2RlIGJpdG1hcCBub3QgbG9hZGVkIgorbXNnc3RyICJpbm9kZSDkvY3lm74iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1MQorIywgZnV6enkKK21zZ2lkICJCbG9jayBiaXRtYXAgbm90IGxvYWRlZCIKK21zZ3N0ciAi5Z2X5L2N5Zu+IgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTIKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIiCittc2dzdHIgIumdnuazleeahOWdl+aVsOmHjyFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjUzCisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIgorbXNnc3RyICLpnZ7ms5XnmoTlnZfmlbDph48hXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NAorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGV4dDJmc19leHBhbmRfZGlyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NQorbXNnaWQgIk5vdCBlbm91Z2ggc3BhY2UgdG8gYnVpbGQgcHJvcG9zZWQgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTYKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1NworbXNnaWQgIklsbGVnYWwgYmxvY2sgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2Jsb2NrX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NTgKK21zZ2lkICJJbGxlZ2FsIGJsb2NrIG51bWJlciBwYXNzZWQgdG8gZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo1OQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfbWFya19pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYwCittc2dpZCAiSWxsZWdhbCBpbm9kZSBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc191bm1hcmtfaW5vZGVfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MQorbXNnaWQgIklsbGVnYWwgaW5vZGUgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjYyCittc2dpZCAiQXR0ZW1wdCB0byBmdWRnZSBlbmQgb2YgYmxvY2sgYml0bWFwIHBhc3QgdGhlIHJlYWwgZW5kIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2MworbXNnaWQgIkF0dGVtcHQgdG8gZnVkZ2UgZW5kIG9mIGlub2RlIGJpdG1hcCBwYXN0IHRoZSByZWFsIGVuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjQKKyMsIGZ1enp5Cittc2dpZCAiSWxsZWdhbCBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAi5q2j5Zyo6K+75Y+W55uu5b2V5Z2XIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjUKK21zZ2lkICJJbGxlZ2FsIGRvdWJseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjYKK21zZ2lkICJJbGxlZ2FsIHRyaXBseSBpbmRpcmVjdCBibG9jayBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NjcKK21zZ2lkICJCbG9jayBiaXRtYXBzIGFyZSBub3QgdGhlIHNhbWUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjY4Cittc2dpZCAiSW5vZGUgYml0bWFwcyBhcmUgbm90IHRoZSBzYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo2OQorbXNnaWQgIklsbGVnYWwgb3IgbWFsZm9ybWVkIGRldmljZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MAorbXNnaWQgIkEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzEKK21zZ2lkICJUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjcyCittc2dpZCAiSWxsZWdhbCBnZW5lcmljIGJpdCBudW1iZXIgcGFzc2VkIHRvIGV4dDJmc19tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3MworbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdW5tYXJrX2dlbmVyaWNfYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3NAorbXNnaWQgIklsbGVnYWwgZ2VuZXJpYyBiaXQgbnVtYmVyIHBhc3NlZCB0byBleHQyZnNfdGVzdF9nZW5lcmljX2JpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6NzUKK21zZ2lkICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc2Cittc2dpZCAiVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB0aGlzIGNhc2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc3Cittc2dpZCAiVGhlIGlub2RlIGlzIGZyb20gYSBiYWQgYmxvY2sgaW4gdGhlIGlub2RlIHRhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo3OAorIywgZnV6enkKK21zZ2lkICJGaWxlc3lzdGVtIGhhcyB1bnN1cHBvcnRlZCBmZWF0dXJlKHMpIgorbXNnc3RyICLmlofku7bns7vnu5/kuI3mlK/mjIHlnKjnur8ob25saW5lKeiwg+aVtOWkp+WwjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjc5CisjLCBmdXp6eQorbXNnaWQgIkZpbGVzeXN0ZW0gaGFzIHVuc3VwcG9ydGVkIHJlYWQtb25seSBmZWF0dXJlKHMpIgorbXNnc3RyICLmlofku7bns7vnu5/kuI3mlK/mjIHlnKjnur8ob25saW5lKeiwg+aVtOWkp+WwjyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjgwCittc2dpZCAiSU8gQ2hhbm5lbCBmYWlsZWQgdG8gc2VlayBvbiByZWFkIG9yIHdyaXRlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MQorIywgZnV6enkKK21zZ2lkICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiCittc2dzdHIgIkHliIbphY3lh7rplJkiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4MgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODMKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGFsbG9jYXRlIGJsb2NrIGluIGV4dDIgZmlsZXN5c3RlbSIKK21zZ3N0ciAi5peg5rOV5YiG6YWN5Z2X57yT5a2YICjlpKflsI89JWQpXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4NAorIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgYWxsb2NhdGUgaW5vZGUgaW4gZXh0MiBmaWxlc3lzdGVtIgorbXNnc3RyICJlMmxhYmVsOiDkuI3mmK/kuIDkuKpleDLmlofku7bns7vnu59cbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg1Cittc2dpZCAiRXh0MiBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjg2Cittc2dpZCAiVG9vIG1hbnkgcmVmZXJlbmNlcyBpbiB0YWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODcKK21zZ2lkICJGaWxlIG5vdCBmb3VuZCBieSBleHQyX2xvb2t1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6ODgKK21zZ2lkICJGaWxlIG9wZW4gcmVhZC1vbmx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo4OQorIywgZnV6enkKK21zZ2lkICJFeHQyIGRpcmVjdG9yeSBibG9jayBub3QgZm91bmQiCittc2dzdHIgIuepuuebruW9leWdlyAldSAoIyVkKSzkuo4gaW5vZGUgJXUg5LitXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MAorbXNnaWQgIkV4dDIgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MQorbXNnaWQgIlVuaW1wbGVtZW50ZWQgZXh0MiBsaWJyYXJ5IGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5MgorbXNnaWQgIlVzZXIgY2FuY2VsIHJlcXVlc3RlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTMKK21zZ2lkICJFeHQyIGZpbGUgdG9vIGJpZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTQKK21zZ2lkICJTdXBwbGllZCBqb3VybmFsIGRldmljZSBub3QgYSBibG9jayBkZXZpY2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk1CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgc3VwZXJibG9jayBub3QgZm91bmQiCittc2dzdHIgIuaXpeW/l+i2hee6p+Wdl+acquaJvuWIsCFcbiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk2Cittc2dpZCAiSm91cm5hbCBtdXN0IGJlIGF0IGxlYXN0IDEwMjQgYmxvY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzo5NworbXNnaWQgIlVuc3VwcG9ydGVkIGpvdXJuYWwgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6OTgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGV4dGVybmFsIGpvdXJuYWwiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjk5CisjLCBmdXp6eQorbXNnaWQgIkpvdXJuYWwgbm90IGZvdW5kIgorbXNnc3RyICLml6Xlv5fotoXnuqflnZfmnKrmib7liLAhXG4iCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDAKK21zZ2lkICJEaXJlY3RvcnkgaGFzaCB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTAxCisjLCBmdXp6eQorbXNnaWQgIklsbGVnYWwgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIG51bWJlciIKK21zZ3N0ciAiYeaJqeWxleWxnuaApyIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwMgorbXNnaWQgIkNhbm5vdCBjcmVhdGUgZmlsZXN5c3RlbSB3aXRoIHJlcXVlc3RlZCBudW1iZXIgb2YgaW5vZGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDMKK21zZ2lkICJFMmltYWdlIHNuYXBzaG90IG5vdCBpbiB1c2UiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNAorIywgZnV6enkKK21zZ2lkICJUb28gbWFueSByZXNlcnZlZCBncm91cCBkZXNjcmlwdG9yIGJsb2NrcyIKK21zZ3N0ciAiPOe7hOaPj+i/sOespmlub2RlPiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNQorbXNnaWQgIlJlc2l6ZSBpbm9kZSBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDYKK21zZ2lkICJUcmllZCB0byBzZXQgYmxvY2sgYm1hcCB3aXRoIG1pc3NpbmcgaW5kaXJlY3QgYmxvY2siCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEwNworbXNnaWQgIlREQjogU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTA4Cittc2dpZCAiVERCOiBDb3JydXB0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMDkKK21zZ2lkICJUREI6IElPIEVycm9yIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTAKK21zZ2lkICJUREI6IExvY2tpbmcgZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExMQorbXNnaWQgIlREQjogT3V0IG9mIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTEyCittc2dpZCAiVERCOiBSZWNvcmQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTMKK21zZ2lkICJUREI6IExvY2sgZXhpc3RzIG9uIG90aGVyIGtleXMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNAorbXNnaWQgIlREQjogSW52YWxpZCBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNQorbXNnaWQgIlREQjogUmVjb3JkIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMTYKK21zZ2lkICJUREI6IFdyaXRlIG5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjExNworbXNnaWQgIkV4dDJmcyBkaXJlY3RvcnkgYmxvY2sgbGlzdCBpcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE4Cittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgYSBibG9jayBtYXBwaW5nIHZpYSBhIHJlYWQtb25seSBibG9jayBpdGVyYXRvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTE5Cittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciBleHQ0IGV4dGVudCBzYXZlZCBwYXRoIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjAKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBnZW5lcmljIGJpdG1hcCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTIxCittc2dpZCAiV3JvbmcgbWFnaWMgbnVtYmVyIGZvciA2NC1iaXQgYmxvY2sgYml0bWFwIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMjIKK21zZ2lkICJXcm9uZyBtYWdpYyBudW1iZXIgZm9yIDY0LWJpdCBpbm9kZSBiaXRtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyMworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNgorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTYiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyNworbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTciCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOAorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEyOQorbXNnaWQgIldyb25nIG1hZ2ljIG51bWJlciAtLS0gUkVTRVJWRURfMTkiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMAorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTMxCittc2dpZCAiQ29ycnVwdCBleHRlbnQgaW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzMgorbXNnaWQgIkNvcnJ1cHQgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzMKK21zZ2lkICJObyBmcmVlIHNwYWNlIGluIGV4dGVudCBtYXAiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNAorbXNnaWQgIklub2RlIGRvZXMgbm90IHVzZSBleHRlbnRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzUKKyMsIGZ1enp5Cittc2dpZCAiTm8gJ25leHQnIGV4dGVudCIKK21zZ3N0ciAieOeoi+W6piIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjEzNgorbXNnaWQgIk5vICdwcmV2aW91cycgZXh0ZW50IgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxMzcKK21zZ2lkICJObyAndXAnIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM4Cittc2dpZCAiTm8gJ2Rvd24nIGV4dGVudCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTM5Cittc2dpZCAiTm8gY3VycmVudCBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDAKK21zZ2lkICJFeHQyZnMgb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MQorbXNnaWQgIk5vIHJvb20gdG8gaW5zZXJ0IGV4dGVudCBpbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDIKK21zZ2lkICJTcGxpdHRpbmcgd291bGQgcmVzdWx0IGluIGVtcHR5IG5vZGUiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0MworIywgZnV6enkKK21zZ2lkICJFeHRlbnQgbm90IGZvdW5kIgorbXNnc3RyICIvQGzmnKrmib7liLAuIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ0Cittc2dpZCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIGlub2RlcyBjb250YWluaW5nIGV4dGVudHMiCittc2dzdHIgIiIKKworIzogbGliL2V4dDJmcy9leHQyX2Vyci5jOjE0NQorbXNnaWQgIkV4dGVudCBsZW5ndGggaXMgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ2Cittc2dpZCAiSS9PIENoYW5uZWwgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgYmxvY2sgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ3Cittc2dpZCAiQ2FuJ3QgY2hlY2sgaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGR1ZSB0byBtaXNzaW5nIG10YWIgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTQ4Cittc2dpZCAiRmlsZXN5c3RlbSB0b28gbGFyZ2UgdG8gdXNlIGxlZ2FjeSBiaXRtYXBzIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNDkKK21zZ2lkICJNTVA6IGludmFsaWQgbWFnaWMgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTAKK21zZ2lkICJNTVA6IGRldmljZSBjdXJyZW50bHkgYWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTEKK21zZ2lkICJNTVA6IGZzY2sgYmVpbmcgcnVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTIKK21zZ2lkICJNTVA6IGJsb2NrIG51bWJlciBiZXlvbmQgZmlsZXN5c3RlbSByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXh0MmZzL2V4dDJfZXJyLmM6MTUzCittc2dpZCAiTU1QOiB1bmRlcmdvaW5nIGFuIHVua25vd24gb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTQKK21zZ2lkICJNTVA6IGZpbGVzeXN0ZW0gc3RpbGwgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IGxpYi9leHQyZnMvZXh0Ml9lcnIuYzoxNTUKK21zZ2lkICJNTVA6IG9wZW4gd2l0aCBPX0RJUkVDVCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTEKK21zZ2lkICJQcm9maWxlIHZlcnNpb24gMC4wIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjEyCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfbm9kZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxMworbXNnaWQgIlByb2ZpbGUgc2VjdGlvbiBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTQKKyMsIGZ1enp5Cittc2dpZCAiUHJvZmlsZSByZWxhdGlvbiBub3QgZm91bmQiCittc2dzdHIgIuW9k+ivu+WPluWdj+Wdl2lub2Rl5pe2IgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxNQorbXNnaWQgIkF0dGVtcHQgdG8gYWRkIGEgcmVsYXRpb24gdG8gbm9kZSB3aGljaCBpcyBub3QgYSBzZWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE2Cittc2dpZCAiQSBwcm9maWxlIHNlY3Rpb24gaGVhZGVyIGhhcyBhIG5vbi16ZXJvIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjE3Cittc2dpZCAiQmFkIGxpbmtlZCBsaXN0IGluIHByb2ZpbGUgc3RydWN0dXJlcyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoxOAorbXNnaWQgIkJhZCBncm91cCBsZXZlbCBpbiBwcm9maWxlIHN0cnVjdHVyZXMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MTkKK21zZ2lkICJCYWQgcGFyZW50IHBvaW50ZXIgaW4gcHJvZmlsZSBzdHJ1Y3R1cmVzIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGUgaXRlcmF0b3IiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjEKK21zZ2lkICJDYW4ndCBzZXQgdmFsdWUgb24gc2VjdGlvbiBub2RlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIyCittc2dpZCAiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gcHJvZmlsZSBsaWJyYXJ5IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjIzCittc2dpZCAiQXR0ZW1wdCB0byBtb2RpZnkgcmVhZC1vbmx5IHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjQKK21zZ2lkICJQcm9maWxlIHNlY3Rpb24gaGVhZGVyIG5vdCBhdCB0b3AgbGV2ZWwiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjUKK21zZ2lkICJTeW50YXggZXJyb3IgaW4gcHJvZmlsZSBzZWN0aW9uIGhlYWRlciIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzoyNgorbXNnaWQgIlN5bnRheCBlcnJvciBpbiBwcm9maWxlIHJlbGF0aW9uIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI3Cittc2dpZCAiRXh0cmEgY2xvc2luZyBicmFjZSBpbiBwcm9maWxlIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjI4Cittc2dpZCAiTWlzc2luZyBvcGVuIGJyYWNlIGluIHByb2ZpbGUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MjkKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMwCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfc2VjdGlvbl90IgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMxCittc2dpZCAiSXRlcmF0aW9uIHRocm91Z2ggYWxsIHRvcCBsZXZlbCBzZWN0aW9uIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzIKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm9maWxlX3NlY3Rpb24gb2JqZWN0IgorbXNnc3RyICLorr7nva7kuobml6DmlYjnmoTmlofku7bns7vnu5/pgInpobk6ICVzXG4iCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjMzCittc2dpZCAiTm8gbW9yZSBzZWN0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozNAorbXNnaWQgIkJhZCBuYW1lc2V0IHBhc3NlZCB0byBxdWVyeSByb3V0aW5lIgorbXNnc3RyICIiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjM1Cittc2dpZCAiTm8gcHJvZmlsZSBmaWxlIG9wZW4iCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzYKK21zZ2lkICJCYWQgbWFnaWMgdmFsdWUgaW4gcHJvZmlsZV9maWxlX3QiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzcKK21zZ2lkICJDb3VsZG4ndCBvcGVuIHByb2ZpbGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBlMmZzY2svcHJvZl9lcnIuYzozOAorbXNnaWQgIlNlY3Rpb24gYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6MzkKK21zZ2lkICJJbnZhbGlkIGJvb2xlYW4gdmFsdWUiCittc2dzdHIgIiIKKworIzogZTJmc2NrL3Byb2ZfZXJyLmM6NDAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBpbnRlZ2VyIHZhbHVlIgorbXNnc3RyICLml6DmlYjnmoTlkI7nvIDplb/luqYiCisKKyM6IGUyZnNjay9wcm9mX2Vyci5jOjQxCittc2dpZCAiQmFkIG1hZ2ljIHZhbHVlIGluIHByb2ZpbGVfZmlsZV9kYXRhX3QiCittc2dzdHIgIiIKKworI34gbXNnaWQgIjxUaGUgQUNMIGluZGV4IGlub2RlPiIKKyN+IG1zZ3N0ciAiPEFDTCDntKLlvJUgaW5vZGU+IgorCisjfiBtc2dpZCAiPFRoZSBBQ0wgZGF0YSBpbm9kZT4iCisjfiBtc2dzdHIgIjxBQ0wg5pWw5o2uIGlub2RlPiIKKworI34gbXNnaWQgIiVzIGlzIG1vdW50ZWQuICAiCisjfiBtc2dzdHIgIiVzIOW3suaMgui9vS4iCisKKyN+IG1zZ2lkICJKb3VybmFsIE5PVCByZW1vdmVkXG4iCisjfiBtc2dzdHIgIuaXpeW/l1/msqHmnIlf6KKr5Yig6ZmkXG4iCisKKyN+IG1zZ2lkICJiYWQgYmxvY2sgc2l6ZSAtICVzIgorI34gbXNnc3RyICLplJnor6/nmoTlnZflpKflsI8gLSAlcyIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvQW5kcm9pZC5tayBiL2UyZnNwcm9ncy9yZXNpemUvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJiZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Jlc2l6ZS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNzAgQEAKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworcmVzaXplMmZzX3NyY19maWxlcyA6PSBcCisJZXh0ZW50LmMgXAorCXJlc2l6ZTJmcy5jIFwKKwltYWluLmMgXAorCW9ubGluZS5jIFwKKwlzaW1fcHJvZ3Jlc3MuYyBcCisJcmVzb3VyY2VfdHJhY2suYworCityZXNpemUyZnNfY19pbmNsdWRlcyA6PSBleHRlcm5hbC9lMmZzcHJvZ3MvbGliCisKK3Jlc2l6ZTJmc19jZmxhZ3MgOj0gLU8yIC1nIC1XIC1XYWxsIFwKKwktREhBVkVfVU5JU1REX0ggXAorCS1ESEFWRV9FUlJOT19IIFwKKwktREhBVkVfTkVUSU5FVF9JTl9IIFwKKwktREhBVkVfU1lTX0lPQ1RMX0ggXAorCS1ESEFWRV9TWVNfTU1BTl9IIFwKKwktREhBVkVfU1lTX01PVU5UX0ggXAorCS1ESEFWRV9TWVNfUFJDVExfSCBcCisJLURIQVZFX1NZU19SRVNPVVJDRV9IIFwKKwktREhBVkVfU1lTX1NFTEVDVF9IIFwKKwktREhBVkVfU1lTX1NUQVRfSCBcCisJLURIQVZFX1NZU19UWVBFU19IIFwKKwktREhBVkVfU1RETElCX0ggXAorCS1ESEFWRV9TVFJEVVAgXAorCS1ESEFWRV9NTUFQIFwKKwktREhBVkVfVVRJTUVfSCBcCisJLURIQVZFX0dFVFBBR0VTSVpFIFwKKwktREhBVkVfTFNFRUs2NCBcCisJLURIQVZFX0xTRUVLNjRfUFJPVE9UWVBFIFwKKwktREhBVkVfRVhUMl9JT0NUTFMgXAorCS1ESEFWRV9MSU5VWF9GRF9IIFwKKwktREhBVkVfVFlQRV9TU0laRV9UIFwKKwktREhBVkVfU1lTX1RJTUVfSCBcCisgICAgICAgIC1ESEFWRV9TWVNfUEFSQU1fSCBcCisJLURIQVZFX1NZU0NPTkYgXAorCS1Xbm8tdW51c2VkLXBhcmFtZXRlcgorCityZXNpemUyZnNfc2hhcmVkX2xpYnJhcmllcyA6PSBcCisJbGliZXh0MmZzIFwKKwlsaWJleHQyX2NvbV9lcnIgXAorCWxpYmV4dDJfZTJwIFwKKwlsaWJleHQyX3V1aWQgXAorCWxpYmV4dDJfYmxraWQKKworcmVzaXplMmZzX3N5c3RlbV9zaGFyZWRfbGlicmFyaWVzIDo9IGxpYmMKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHJlc2l6ZTJmc19zcmNfZmlsZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQocmVzaXplMmZzX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChyZXNpemUyZnNfY2ZsYWdzKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSAkKHJlc2l6ZTJmc19zaGFyZWRfbGlicmFyaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChyZXNpemUyZnNfc3lzdGVtX3NoYXJlZF9saWJyYXJpZXMpCitMT0NBTF9NT0RVTEUgOj0gcmVzaXplMmZzCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAoraW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChyZXNpemUyZnNfc3JjX2ZpbGVzKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKHJlc2l6ZTJmc19jX2luY2x1ZGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQocmVzaXplMmZzX2NmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gJChhZGRzdWZmaXggLWhvc3QsICQocmVzaXplMmZzX3NoYXJlZF9saWJyYXJpZXMpKQorTE9DQUxfTU9EVUxFIDo9IHJlc2l6ZTJmc19ob3N0CitMT0NBTF9NT0RVTEVfU1RFTSA6PSByZXNpemUyZnMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcmVzaXplL01ha2VmaWxlLmluIGIvZTJmc3Byb2dzL3Jlc2l6ZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZiM2FlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Jlc2l6ZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE5NyBAQAorIworIyBTdGFuZGFyZCBlMmZzcHJvZ3MgcHJvbG9ndWUuLi4uCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gcmVzaXplCitJTlNUQUxMID0gQElOU1RBTExACitMREZMQUdfU1RBVElDID0gQExERkxBR19TVEFUSUNACisKK0BNQ09ORklHQAorCitQUk9HUz0JCXJlc2l6ZTJmcworVEVTVF9QUk9HUz0JdGVzdF9leHRlbnQKK01BTlBBR0VTPQlyZXNpemUyZnMuOAorCitSRVNJWkVfT0JKUz0gZXh0ZW50Lm8gcmVzaXplMmZzLm8gbWFpbi5vIG9ubGluZS5vIHJlc291cmNlX3RyYWNrLm8gXAorCQlzaW1fcHJvZ3Jlc3MubworCitURVNUX0VYVEVOVF9PQkpTPSBleHRlbnQubyB0ZXN0X2V4dGVudC5vCisKK1NSQ1M9ICQoc3JjZGlyKS9leHRlbnQuYyBcCisJJChzcmNkaXIpL3Jlc2l6ZTJmcy5jIFwKKwkkKHNyY2RpcikvbWFpbi5jIFwKKwkkKHNyY2Rpcikvb25saW5lLmMgXAorCSQoc3JjZGlyKS9yZXNvdXJjZV90cmFjay5jIFwKKwkkKHNyY2Rpcikvc2ltX3Byb2dyZXNzLmMKKworTElCUz0gJChMSUJFMlApICQoTElCRVhUMkZTKSAkKExJQkNPTV9FUlIpICQoTElCSU5UTCkKK0RFUExJQlM9ICQoTElCRTJQKSAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorCitTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCRTJQKSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoU1RBVElDX0xJQkNPTV9FUlIpIFwKKwkkKExJQklOVEwpCitERVBTVEFUSUNfTElCUz0gJChTVEFUSUNfTElCRTJQKSAkKFNUQVRJQ19MSUJFWFQyRlMpICQoREVQU1RBVElDX0xJQkNPTV9FUlIpIAorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgJDwgLW8gJEAKKwkkKFEpICQoQ0hFQ0tfQ01EKSAkKEFMTF9DRkxBR1MpICQ8CisKK2FsbDo6ICQoUFJPR1MpICQoVEVTVF9QUk9HUykgJChNQU5QQUdFUykgCisKK3Jlc2l6ZTJmczogJChSRVNJWkVfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQ0MpICQoQUxMX0xERkxBR1MpIC1vIHJlc2l6ZTJmcyAkKFJFU0laRV9PQkpTKSAkKExJQlMpIAorCityZXNpemUyZnMuc3RhdGljOiAkKFJFU0laRV9PQkpTKSAkKERFUFNUQVRJQ19MSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpICQoTERGTEFHX1NUQVRJQykgLW8gcmVzaXplMmZzLnN0YXRpYyBcCisJCSQoUkVTSVpFX09CSlMpICQoU1RBVElDX0xJQlMpIAorCityZXNpemUyZnMuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL3Jlc2l6ZTJmcy44LmluCisJJChFKSAiCVNVQlNUICRAIgorCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL3Jlc2l6ZTJmcy44LmluIHJlc2l6ZTJmcy44CisKK3Rlc3RfZXh0ZW50OiAkKFRFU1RfRVhURU5UX09CSlMpCisJJChFKSAiCUxEICRAIgorCSQoUSkgJChDQykgJChBTExfTERGTEFHUykgLW8gdGVzdF9leHRlbnQgJChURVNUX0VYVEVOVF9PQkpTKSAkKExJQlMpIAorCitpbnN0YWxsZGlyczoKKwkkKEUpICIJTUtJTlNUQUxMRElSUyAkKHJvb3Rfc2JpbmRpcikgJChtYW44ZGlyKSIKKwkkKFEpICQoTUtJTlNUQUxMRElSUykgJChERVNURElSKSQocm9vdF9zYmluZGlyKSBcCisJCSQoREVTVERJUikkKG1hbjhkaXIpCisKK2luc3RhbGw6ICQoUFJPR1MpICQoTUFOUEFHRVMpIGluc3RhbGxkaXJzCisJJChRKSBmb3IgaSBpbiAkKFBST0dTKTsgZG8gXAorCQllY2hvICIJSU5TVEFMTCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJCRpICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCSQoUSkgZm9yIGkgaW4gJChNQU5QQUdFUyk7IGRvIFwKKwkJZm9yIGogaW4gJChDT01QUkVTU19FWFQpOyBkbyBcCisJCQkkKFJNKSAtZiAkKERFU1RESVIpJChtYW44ZGlyKS8kJGkuJCRqOyBcCisJCWRvbmU7IFwKKwkJZWNobyAiCUlOU1RBTExfREFUQSAkKG1hbjhkaXIpLyQkaSI7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChtYW44ZGlyKS8kJGk7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKwkkKFEpIGZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCWVjaG8gIglTVFJJUCAkKHJvb3Rfc2JpbmRpcikvJCRpIjsgXAorCQkkKFNUUklQKSAkKERFU1RESVIpJChyb290X3NiaW5kaXIpLyQkaTsgXAorCWRvbmUKKwordW5pbnN0YWxsOgorCWZvciBpIGluICQoUFJPR1MpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKHJvb3Rfc2JpbmRpcikvJCRpOyBcCisJZG9uZQorCWZvciBpIGluICQoTUFOUEFHRVMpOyBkbyBcCisJCSQoUk0pIC1mICQoREVTVERJUikkKG1hbjhkaXIpLyQkaTsgXAorCWRvbmUKKwordGVzdF9leHRlbnQub3V0OiB0ZXN0X2V4dGVudCAkKHNyY2RpcikvdGVzdF9leHRlbnQuaW4KKwlMRF9MSUJSQVJZX1BBVEg9JChMSUIpIERZTERfTElCUkFSWV9QQVRIPSQoTElCKSAuL3Rlc3RfZXh0ZW50IDwgJChzcmNkaXIpL3Rlc3RfZXh0ZW50LmluIFwKKwkJPiB0ZXN0X2V4dGVudC5vdXQKKworY2hlY2s6OiB0ZXN0X2V4dGVudC5vdXQKKwkkKFEpIGlmIGNtcCAtcyB0ZXN0X2V4dGVudC5vdXQgJChzcmNkaXIpL3Rlc3RfZXh0ZW50LmluIDsgdGhlbiBcCisJCWVjaG8gIlRlc3Qgc3VjY2VlZGVkLiIgOyBcCisJZWxzZSBcCisJCWVjaG8gIlRlc3QgZmFpbGVkISIgOyBcCisJCWRpZmYgdGVzdF9leHRlbnQub3V0ICQoc3JjZGlyKS90ZXN0X2V4dGVudC5pbiA7IFwKKwkJZXhpdCAxIDsgXAorCWZpCisKK2NsZWFuOgorCSQoUk0pIC1mICQoUFJPR1MpICQoVEVTVF9QUk9HUykgJChNQU5QQUdFUykgXCMqICoucyAqLm8gKi5hICp+IGNvcmUgXAorCQlyZXNpemUyZnMuc3RhdGljIHRlc3RfZXh0ZW50Lm91dAorCittb3N0bHljbGVhbjogY2xlYW4KKworZGlzdGNsZWFuOiBjbGVhbgorCSQoUk0pIC1mIC5kZXBlbmQgTWFrZWZpbGUgJChzcmNkaXIpL1RBR1MgJChzcmNkaXIpL01ha2VmaWxlLmluLm9sZAorCisjCisjIEtsdWRnZSB0byBjcmVhdGUgYSAic3BlY2lhbCIgZTJmc3Byb2dzIGRpc3RyaWJ1dGlvbiBmaWxlLgorIworCitTUkNST09UID0gYGVjaG8gZTJmc3Byb2dzLUBFMkZTUFJPR1NfVkVSU0lPTkAgfCBzZWQgLWUgJ3MvLVdJUC8vJyBcCisJCQktZSAncy9wcmUtLy8nIC1lICdzLy1QTFVTLy8nYAorVEFSPXRhcgorCiskKHRvcF9zcmNkaXIpLy5leGNsdWRlLWZpbGU6CisJYT0kKFNSQ1JPT1QpOyBcCisJKGNkICQodG9wX3NyY2RpcikvLi4gOyBmaW5kIGUyZnNwcm9ncyBcKCAtbmFtZSBcKn4gLW8gLW5hbWUgXCoub3JpZyBcCisJCS1vIC1uYW1lIENWUyAtbyAtbmFtZSBcKi5yZWogXCkgLXByaW50KSBcCisJCXwgc2VkIC1lICJzL2UyZnNwcm9ncy8kJGEvIiA+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCWVjaG8gIiQoU1JDUk9PVCkvYnVpbGQiID4+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCWVjaG8gIiQoU1JDUk9PVCkvcnBtLmxvZyIgPj4gJCh0b3Bfc3JjZGlyKS8uZXhjbHVkZS1maWxlCisJZWNobyAiJChTUkNST09UKS9wb3dlcnF1ZXN0IiA+PiAkKHRvcF9zcmNkaXIpLy5leGNsdWRlLWZpbGUKKwllY2hvICIkKFNSQ1JPT1QpLy5leGNsdWRlLWZpbGUiID4+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCWVjaG8gJChTUkNST09UKS9lMmZzcHJvZ3MtQEUyRlNQUk9HU19WRVJTSU9OQC50YXIuZ3ogXAorCQk+PiAkKHRvcF9zcmNkaXIpLy5leGNsdWRlLWZpbGUKKwllY2hvICQoU1JDUk9PVCkvZTJmc3Byb2dzLUFMTC1ARTJGU1BST0dTX1ZFUlNJT05ALnRhci5neiBcCisJCT4+ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCitzb3VyY2VfdGFyX2ZpbGU6ICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCShjZCAkKHRvcF9zcmNkaXIpLy4uOyBhPSQoU1JDUk9PVCk7IHJtIC1mICQkYSA7IGxuIC1zZiBlMmZzcHJvZ3MgJCRhIDsgXAorCQkkKFRBUikgLWMgLWggLXYgLWYgLSBcCisJCQktWCAkJGEvLmV4Y2x1ZGUtZmlsZSAkJGEgfCBcCisJCWd6aXAgLTkgPiBlMmZzcHJvZ3MtQUxMLUBFMkZTUFJPR1NfVkVSU0lPTkAudGFyLmd6KQorCXJtIC1mICQodG9wX3NyY2RpcikvLmV4Y2x1ZGUtZmlsZQorCisjICsrKyBEZXBlbmRlbmN5IGxpbmUgZWF0ZXIgKysrCisjIAorIyBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9sbG93LiAgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHNlY3Rpb24gaW4KKyMgdGhlIE1ha2VmaWxlLmluIGZpbGUKKyMKK2V4dGVudC5vOiAkKHNyY2RpcikvZXh0ZW50LmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9kaXJwYXRocy5oICQoc3JjZGlyKS9yZXNpemUyZnMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oCityZXNpemUyZnMubzogJChzcmNkaXIpL3Jlc2l6ZTJmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvcmVzaXplMmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAorbWFpbi5vOiAkKHNyY2RpcikvbWFpbi5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHNyY2RpcikvcmVzaXplMmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0M19leHRlbnRzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaAorb25saW5lLm86ICQoc3JjZGlyKS9vbmxpbmUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3Jlc2l6ZTJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKK3Jlc291cmNlX3RyYWNrLm86ICQoc3JjZGlyKS9yZXNvdXJjZV90cmFjay5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZGlycGF0aHMuaCAkKHNyY2RpcikvcmVzaXplMmZzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaAorc2ltX3Byb2dyZXNzLm86ICQoc3JjZGlyKS9zaW1fcHJvZ3Jlc3MuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAkKHRvcF9idWlsZGRpcikvbGliL2RpcnBhdGhzLmggJChzcmNkaXIpL3Jlc2l6ZTJmcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9mcy5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfdHlwZXMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCisgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2lvLmggXAorICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvTWFrZWZpbGUucHEgYi9lMmZzcHJvZ3MvcmVzaXplL01ha2VmaWxlLnBxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjBlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcmVzaXplL01ha2VmaWxlLnBxCkBAIC0wLDAgKzEsMTEgQEAKK1RPUFNSQz0uLgorTElCTkFNRT1SRVNJWkUuTElCCitPQkpGSUxFPVJFU0laRS5MU1QKKworT0JKUz0gZXh0ZW50Lm9iaiBcCisJZXh0Ml9ibG9ja19tb3ZlLm9iaiBcCisJZXh0Ml9pbm9kZV9tb3ZlLm9iaiBcCisJcmVzaXplMmZzLm9iagorCishaW5jbHVkZSAkKFRPUFNSQylccG93ZXJxdWVzdFxNQ09ORklHCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvZXh0ZW50LmMgYi9lMmZzcHJvZ3MvcmVzaXplL2V4dGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjJmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcmVzaXplL2V4dGVudC5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogZXh0ZW50LmMgLS0tIGV4dDIgZXh0ZW50IGFic3RyYWN0aW9uCisgKgorICogVGhpcyBhYnN0cmFjdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgYSBjb21wYWN0IHdheSBvZiByZXByZXNlbnRpbmcgYQorICogdHJhbnNsYXRpb24gdGFibGUsIGZvciBtb3ZpbmcgbXVsdGlwbGUgY29udGlndW91cyByYW5nZXMgKGV4dGVudHMpCisgKiBvZiBibG9ja3Mgb3IgaW5vZGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCBieSBUaGVvZG9yZSBUcydvIGFuZAorICogCVBvd2VyUXVlc3QsIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgYnkgVGhlb3NvcmUgVHMnbworICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgInJlc2l6ZTJmcy5oIgorCitzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgeworCV9fdTY0CW9sZF9sb2MsIG5ld19sb2M7CisJX191NjQJc2l6ZTsKK307CisKK3N0cnVjdCBfZXh0Ml9leHRlbnQgeworCXN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSAqbGlzdDsKKwlfX3U2NAljdXJzb3I7CisJX191NjQJc2l6ZTsKKwlfX3U2NAludW07CisJX191NjQJc29ydGVkOworfTsKKworLyoKKyAqIENyZWF0ZSBhbiBleHRlbnQgdGFibGUKKyAqLworZXJyY29kZV90IGV4dDJmc19jcmVhdGVfZXh0ZW50X3RhYmxlKGV4dDJfZXh0ZW50ICpyZXRfZXh0ZW50LCBfX3U2NCBzaXplKQoreworCWV4dDJfZXh0ZW50CWV4dGVudDsKKwllcnJjb2RlX3QJcmV0dmFsOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc2l6ZW9mKHN0cnVjdCBfZXh0Ml9leHRlbnQpLCAmZXh0ZW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbXNldChleHRlbnQsIDAsIHNpemVvZihzdHJ1Y3QgX2V4dDJfZXh0ZW50KSk7CisKKwlleHRlbnQtPnNpemUgPSBzaXplID8gc2l6ZSA6IDUwOworCWV4dGVudC0+Y3Vyc29yID0gMDsKKwlleHRlbnQtPm51bSA9IDA7CisJZXh0ZW50LT5zb3J0ZWQgPSAxOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5KSwKKwkJCQlleHRlbnQtPnNpemUsICZleHRlbnQtPmxpc3QpOworCWlmIChyZXR2YWwpIHsKKwkJZXh0MmZzX2ZyZWVfbWVtKCZleHRlbnQpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwltZW1zZXQoZXh0ZW50LT5saXN0LCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5KSAqIGV4dGVudC0+c2l6ZSk7CisJKnJldF9leHRlbnQgPSBleHRlbnQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIGFuIGV4dGVudCB0YWJsZQorICovCit2b2lkIGV4dDJmc19mcmVlX2V4dGVudF90YWJsZShleHQyX2V4dGVudCBleHRlbnQpCit7CisJaWYgKGV4dGVudC0+bGlzdCkKKwkJZXh0MmZzX2ZyZWVfbWVtKCZleHRlbnQtPmxpc3QpOworCWV4dGVudC0+bGlzdCA9IDA7CisJZXh0ZW50LT5zaXplID0gMDsKKwlleHRlbnQtPm51bSA9IDA7CisJZXh0MmZzX2ZyZWVfbWVtKCZleHRlbnQpOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHRoZSBleHRlbnQgdGFibGUKKyAqLworZXJyY29kZV90IGV4dDJmc19hZGRfZXh0ZW50X2VudHJ5KGV4dDJfZXh0ZW50IGV4dGVudCwgX191NjQgb2xkX2xvYywgX191NjQgbmV3X2xvYykKK3sKKwlzdHJ1Y3QJZXh0Ml9leHRlbnRfZW50cnkJKmVudDsKKwllcnJjb2RlX3QJCQlyZXR2YWw7CisJX191NjQJCQkJbmV3c2l6ZTsKKwlfX3U2NAkJCQljdXJyOworCisJaWYgKGV4dGVudC0+bnVtID49IGV4dGVudC0+c2l6ZSkgeworCQluZXdzaXplID0gZXh0ZW50LT5zaXplICsgMTAwOworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShzaXplb2Yoc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5KSAqCisJCQkJCSAgIGV4dGVudC0+c2l6ZSwKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSkgKgorCQkJCQkgICBuZXdzaXplLCAmZXh0ZW50LT5saXN0KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCWV4dGVudC0+c2l6ZSA9IG5ld3NpemU7CisJfQorCWN1cnIgPSBleHRlbnQtPm51bTsKKwllbnQgPSBleHRlbnQtPmxpc3QgKyBjdXJyOworCWlmIChjdXJyKSB7CisJCS8qCisJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIGNhbiBiZSBjb2FsZXNjZWQgd2l0aCB0aGUgbGFzdAorCQkgKiBleHRlbnQKKwkJICovCisJCWVudC0tOworCQlpZiAoKGVudC0+b2xkX2xvYyArIGVudC0+c2l6ZSA9PSBvbGRfbG9jKSAmJgorCQkgICAgKGVudC0+bmV3X2xvYyArIGVudC0+c2l6ZSA9PSBuZXdfbG9jKSkgeworCQkJZW50LT5zaXplKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKgorCQkgKiBOb3cgc2VlIGlmIHdlJ3JlIGdvaW5nIHRvIHJ1aW4gdGhlIHNvcnRpbmcKKwkJICovCisJCWlmIChlbnQtPm9sZF9sb2MgKyBlbnQtPnNpemUgPiBvbGRfbG9jKQorCQkJZXh0ZW50LT5zb3J0ZWQgPSAwOworCQllbnQrKzsKKwl9CisJZW50LT5vbGRfbG9jID0gb2xkX2xvYzsKKwllbnQtPm5ld19sb2MgPSBuZXdfbG9jOworCWVudC0+c2l6ZSA9IDE7CisJZXh0ZW50LT5udW0rKzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcXNvcnQKKyAqLworc3RhdGljIEVYVDJfUVNPUlRfVFlQRSBleHRlbnRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5ICpkYl9hOworCWNvbnN0IHN0cnVjdCBleHQyX2V4dGVudF9lbnRyeSAqZGJfYjsKKworCWRiX2EgPSAoY29uc3Qgc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5ICopIGE7CisJZGJfYiA9IChjb25zdCBzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgKikgYjsKKworCXJldHVybiAoZGJfYS0+b2xkX2xvYyAtIGRiX2ItPm9sZF9sb2MpOworfQorCisvKgorICogR2l2ZW4gYW4gaW5vZGUgbWFwIGFuZCBpbm9kZSBudW1iZXIsIGxvb2sgdXAgdGhlIG9sZCBpbm9kZSBudW1iZXIKKyAqIGFuZCByZXR1cm4gdGhlIG5ldyBpbm9kZSBudW1iZXIuCisgKi8KK19fdTY0IGV4dDJmc19leHRlbnRfdHJhbnNsYXRlKGV4dDJfZXh0ZW50IGV4dGVudCwgX191NjQgb2xkX2xvYykKK3sKKwlfX3M2NAlsb3csIGhpZ2gsIG1pZDsKKwlfX3U2NAlsb3d2YWwsIGhpZ2h2YWw7CisJZmxvYXQJcmFuZ2U7CisKKwlpZiAoIWV4dGVudC0+c29ydGVkKSB7CisJCXFzb3J0KGV4dGVudC0+bGlzdCwgZXh0ZW50LT5udW0sCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkpLCBleHRlbnRfY21wKTsKKwkJZXh0ZW50LT5zb3J0ZWQgPSAxOworCX0KKwlsb3cgPSAwOworCWhpZ2ggPSBleHRlbnQtPm51bS0xOworCXdoaWxlIChsb3cgPD0gaGlnaCkgeworI2lmIDAKKwkJbWlkID0gKGxvdytoaWdoKS8yOworI2Vsc2UKKwkJaWYgKGxvdyA9PSBoaWdoKQorCQkJbWlkID0gbG93OworCQllbHNlIHsKKwkJCS8qIEludGVycG9sYXRlIGZvciBlZmZpY2llbmN5ICovCisJCQlsb3d2YWwgPSBleHRlbnQtPmxpc3RbbG93XS5vbGRfbG9jOworCQkJaGlnaHZhbCA9IGV4dGVudC0+bGlzdFtoaWdoXS5vbGRfbG9jOworCisJCQlpZiAob2xkX2xvYyA8IGxvd3ZhbCkKKwkJCQlyYW5nZSA9IDA7CisJCQllbHNlIGlmIChvbGRfbG9jID4gaGlnaHZhbCkKKwkJCQlyYW5nZSA9IDE7CisJCQllbHNlIHsKKwkJCQlyYW5nZSA9ICgoZmxvYXQpIChvbGRfbG9jIC0gbG93dmFsKSkgLworCQkJCQkoaGlnaHZhbCAtIGxvd3ZhbCk7CisJCQkJaWYgKHJhbmdlID4gMC45KQorCQkJCQlyYW5nZSA9IDAuOTsKKwkJCQlpZiAocmFuZ2UgPCAwLjEpCisJCQkJCXJhbmdlID0gMC4xOworCQkJfQorCQkJbWlkID0gbG93ICsgKChfX3U2NCkgKHJhbmdlICogKGhpZ2gtbG93KSkpOworCQl9CisjZW5kaWYKKwkJaWYgKChvbGRfbG9jID49IGV4dGVudC0+bGlzdFttaWRdLm9sZF9sb2MpICYmCisJCSAgICAob2xkX2xvYyA8IGV4dGVudC0+bGlzdFttaWRdLm9sZF9sb2MgKyBleHRlbnQtPmxpc3RbbWlkXS5zaXplKSkKKwkJCXJldHVybiAoZXh0ZW50LT5saXN0W21pZF0ubmV3X2xvYyArCisJCQkJKG9sZF9sb2MgLSBleHRlbnQtPmxpc3RbbWlkXS5vbGRfbG9jKSk7CisJCWlmIChvbGRfbG9jIDwgZXh0ZW50LT5saXN0W21pZF0ub2xkX2xvYykKKwkJCWhpZ2ggPSBtaWQtMTsKKwkJZWxzZQorCQkJbG93ID0gbWlkKzE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRm9yIGRlYnVnZ2luZyBvbmx5CisgKi8KK3ZvaWQgZXh0MmZzX2V4dGVudF9kdW1wKGV4dDJfZXh0ZW50IGV4dGVudCwgRklMRSAqb3V0KQoreworCV9fdTY0CWk7CisJc3RydWN0IGV4dDJfZXh0ZW50X2VudHJ5ICplbnQ7CisKKwlmcHV0cyhfKCIjIEV4dGVudCBkdW1wOlxuIiksIG91dCk7CisJZnByaW50ZihvdXQsIF8oIiNcdE51bT0lbGx1LCBTaXplPSVsbHUsIEN1cnNvcj0lbGx1LCBTb3J0ZWQ9JWxsdVxuIiksCisJICAgICAgIGV4dGVudC0+bnVtLCBleHRlbnQtPnNpemUsIGV4dGVudC0+Y3Vyc29yLCBleHRlbnQtPnNvcnRlZCk7CisJZm9yIChpPTAsIGVudD1leHRlbnQtPmxpc3Q7IGkgPCBleHRlbnQtPm51bTsgaSsrLCBlbnQrKykgeworCQlmcHJpbnRmKG91dCwgIiNcdFx0ICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIsIGVudC0+b2xkX2xvYywKKwkJCWVudC0+bmV3X2xvYywgZW50LT5zaXplKTsKKwl9Cit9CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHRlbnQgdGFibGUKKyAqLworZXJyY29kZV90IGV4dDJmc19pdGVyYXRlX2V4dGVudChleHQyX2V4dGVudCBleHRlbnQsIF9fdTY0ICpvbGRfbG9jLAorCQkJCV9fdTY0ICpuZXdfbG9jLCBfX3U2NCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgZXh0Ml9leHRlbnRfZW50cnkgKmVudDsKKworCWlmICghb2xkX2xvYykgeworCQlleHRlbnQtPmN1cnNvciA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmIChleHRlbnQtPmN1cnNvciA+PSBleHRlbnQtPm51bSkgeworCQkqb2xkX2xvYyA9IDA7CisJCSpuZXdfbG9jID0gMDsKKwkJKnNpemUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwllbnQgPSBleHRlbnQtPmxpc3QgKyBleHRlbnQtPmN1cnNvcisrOworCisJKm9sZF9sb2MgPSBlbnQtPm9sZF9sb2M7CisJKm5ld19sb2MgPSBlbnQtPm5ld19sb2M7CisJKnNpemUgPSBlbnQtPnNpemU7CisJcmV0dXJuIDA7Cit9CisKKworCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvbWFpbi5jIGIvZTJmc3Byb2dzL3Jlc2l6ZS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhZmMxNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvbWFpbi5jCkBAIC0wLDAgKzEsNDk1IEBACisvKgorICogbWFpbi5jIC0tLSBleHQyIHJlc2l6ZXIgbWFpbiBwcm9ncmFtCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBieSBUaGVvZG9yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQ7CisjZW5kaWYKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisKKyNpbmNsdWRlICJyZXNpemUyZnMuaCIKKworI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKKworY2hhciAqcHJvZ3JhbV9uYW1lOworc3RhdGljIGNoYXIgKmRldmljZV9uYW1lLCAqaW9fb3B0aW9uczsKKworc3RhdGljIHZvaWQgdXNhZ2UgKGNoYXIgKnByb2cpCit7CisJZnByaW50ZiAoc3RkZXJyLCBfKCJVc2FnZTogJXMgWy1kIGRlYnVnX2ZsYWdzXSBbLWZdIFstRl0gWy1NXSBbLVBdICIKKwkJCSAgICJbLXBdIGRldmljZSBbbmV3X3NpemVdXG5cbiIpLCBwcm9nKTsKKworCWV4aXQgKDEpOworfQorCitzdGF0aWMgZXJyY29kZV90IHJlc2l6ZV9wcm9ncmVzc19mdW5jKGV4dDJfcmVzaXplX3QgcmZzLCBpbnQgcGFzcywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGN1ciwgdW5zaWduZWQgbG9uZyBtYXgpCit7CisJZXh0Ml9zaW1fcHJvZ21ldGVyIHByb2dyZXNzOworCWNvbnN0IGNoYXIJKmxhYmVsOworCWVycmNvZGVfdAlyZXR2YWw7CisKKwlwcm9ncmVzcyA9IChleHQyX3NpbV9wcm9nbWV0ZXIpIHJmcy0+cHJvZ19kYXRhOworCWlmIChtYXggPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKGN1ciA9PSAwKSB7CisJCWlmIChwcm9ncmVzcykKKwkJCWV4dDJmc19wcm9ncmVzc19jbG9zZShwcm9ncmVzcyk7CisJCXByb2dyZXNzID0gMDsKKwkJc3dpdGNoIChwYXNzKSB7CisJCWNhc2UgRTJfUlNaX0VYVEVORF9JVEFCTEVfUEFTUzoKKwkJCWxhYmVsID0gXygiRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSIpOworCQkJYnJlYWs7CisJCWNhc2UgRTJfUlNaX0JMT0NLX1JFTE9DX1BBU1M6CisJCQlsYWJlbCA9IF8oIlJlbG9jYXRpbmcgYmxvY2tzIik7CisJCQlicmVhazsKKwkJY2FzZSBFMl9SU1pfSU5PREVfU0NBTl9QQVNTOgorCQkJbGFiZWwgPSBfKCJTY2FubmluZyBpbm9kZSB0YWJsZSIpOworCQkJYnJlYWs7CisJCWNhc2UgRTJfUlNaX0lOT0RFX1JFRl9VUERfUEFTUzoKKwkJCWxhYmVsID0gXygiVXBkYXRpbmcgaW5vZGUgcmVmZXJlbmNlcyIpOworCQkJYnJlYWs7CisJCWNhc2UgRTJfUlNaX01PVkVfSVRBQkxFX1BBU1M6CisJCQlsYWJlbCA9IF8oIk1vdmluZyBpbm9kZSB0YWJsZSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlsYWJlbCA9IF8oIlVua25vd24gcGFzcz8hPyIpOworCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRmKF8oIkJlZ2luIHBhc3MgJWQgKG1heCA9ICVsdSlcbiIpLCBwYXNzLCBtYXgpOworCQlyZXR2YWwgPSBleHQyZnNfcHJvZ3Jlc3NfaW5pdCgmcHJvZ3Jlc3MsIGxhYmVsLCAzMCwKKwkJCQkJICAgICAgNDAsIG1heCwgMCk7CisJCWlmIChyZXR2YWwpCisJCQlwcm9ncmVzcyA9IDA7CisJCXJmcy0+cHJvZ19kYXRhID0gKHZvaWQgKikgcHJvZ3Jlc3M7CisJfQorCWlmIChwcm9ncmVzcykKKwkJZXh0MmZzX3Byb2dyZXNzX3VwZGF0ZShwcm9ncmVzcywgY3VyKTsKKwlpZiAoY3VyID49IG1heCkgeworCQlpZiAocHJvZ3Jlc3MpCisJCQlleHQyZnNfcHJvZ3Jlc3NfY2xvc2UocHJvZ3Jlc3MpOworCQlwcm9ncmVzcyA9IDA7CisJCXJmcy0+cHJvZ19kYXRhID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV9mc19zdHJpZGUoZXh0Ml9maWxzeXMgZnMpCit7CisJdW5zaWduZWQgaW50CWdyb3VwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW07CisJdW5zaWduZWQgaW50CWhhc19zYiwgcHJldl9oYXNfc2IgPSAwLCBudW07CisJaW50CQlpX3N0cmlkZSwgYl9zdHJpZGU7CisKKwlpZiAoZnMtPnN0cmlkZSkKKwkJcmV0dXJuOworCW51bSA9IDA7IHN1bSA9IDA7CisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGdyb3VwKyspIHsKKwkJaGFzX3NiID0gZXh0MmZzX2JnX2hhc19zdXBlcihmcywgZ3JvdXApOworCQlpZiAoZ3JvdXAgPT0gMCB8fCBoYXNfc2IgIT0gcHJldl9oYXNfc2IpCisJCQlnb3RvIG5leHQ7CisJCWJfc3RyaWRlID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGdyb3VwKSAtCisJCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXAgLSAxKSAtCisJCQlmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJaV9zdHJpZGUgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApIC0KKwkJCWV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBncm91cCAtIDEpIC0KKwkJCWZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCQlpZiAoYl9zdHJpZGUgIT0gaV9zdHJpZGUgfHwKKwkJICAgIGJfc3RyaWRlIDwgMCkKKwkJCWdvdG8gbmV4dDsKKworCQkvKiBwcmludGYoImdyb3VwICVkIGhhcyBzdHJpZGUgJWRcbiIsIGdyb3VwLCBiX3N0cmlkZSk7ICovCisJCXN1bSArPSBiX3N0cmlkZTsKKwkJbnVtKys7CisKKwluZXh0OgorCQlwcmV2X2hhc19zYiA9IGhhc19zYjsKKwl9CisKKwlpZiAoZnMtPmdyb3VwX2Rlc2NfY291bnQgPiAxMiAmJiBudW0gPCAzKQorCQlzdW0gPSAwOworCisJaWYgKG51bSkKKwkJZnMtPnN0cmlkZSA9IHN1bSAvIG51bTsKKwllbHNlCisJCWZzLT5zdHJpZGUgPSAwOworCisJZnMtPnN1cGVyLT5zX3JhaWRfc3RyaWRlID0gZnMtPnN0cmlkZTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisKKyNpZiAwCisJaWYgKGZzLT5zdHJpZGUpCisJCXByaW50ZigiVXNpbmcgUkFJRCBzdHJpZGUgb2YgJWRcbiIsIGZzLT5zdHJpZGUpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGJpZ2FsbG9jX2NoZWNrKGV4dDJfZmlsc3lzIGZzLCBpbnQgZm9yY2UpCit7CisJaWYgKCFmb3JjZSAmJiBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9CSUdBTExPQykpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuUmVzaXppbmcgYmlnYWxsb2MgZmlsZSBzeXN0ZW1zIGhhcyAiCisJCQkJCSJub3QgYmVlbiBmdWxseSB0ZXN0ZWQuICBQcm9jZWVkIGF0XG4iCisJCQkJCSJ5b3VyIG93biByaXNrISAgVXNlIHRoZSBmb3JjZSBvcHRpb24gIgorCQkJCQkiaWYgeW91IHdhbnQgdG8gZ28gYWhlYWQgYW55d2F5LlxuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzCWZzOworCWludAkJYzsKKwlpbnQJCWZsYWdzID0gMDsKKwlpbnQJCWZsdXNoID0gMDsKKwlpbnQJCWZvcmNlID0gMDsKKwlpbnQJCWlvX2ZsYWdzID0gMDsKKwlpbnQJCWZvcmNlX21pbl9zaXplID0gMDsKKwlpbnQJCXByaW50X21pbl9zaXplID0gMDsKKwlpbnQJCWZkLCByZXQ7CisJYmxrNjRfdAkJbmV3X3NpemUgPSAwOworCWJsazY0X3QJCW1heF9zaXplID0gMDsKKwlibGs2NF90CQltaW5fc2l6ZSA9IDA7CisJaW9fbWFuYWdlcglpb19wdHI7CisJY2hhcgkJKm5ld19zaXplX3N0ciA9IDA7CisJaW50CQl1c2Vfc3RyaWRlID0gLTE7CisJZXh0MmZzX3N0cnVjdF9zdGF0IHN0X2J1ZjsKKwlfX3M2NAkJbmV3X2ZpbGVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJc3lzX3BhZ2Vfc2l6ZSA9IDQwOTY7CisJbG9uZwkJc3lzdmFsOworCWludAkJbGVuLCBtb3VudF9mbGFnczsKKwljaGFyCQkqbXRwdDsKKworI2lmZGVmIEVOQUJMRV9OTFMKKwlzZXRsb2NhbGUoTENfTUVTU0FHRVMsICIiKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKwliaW5kdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUsIExPQ0FMRURJUik7CisJdGV4dGRvbWFpbihOTFNfQ0FUX05BTUUpOworCXNldF9jb21fZXJyX2dldHRleHQoZ2V0dGV4dCk7CisjZW5kaWYKKworCWFkZF9lcnJvcl90YWJsZSgmZXRfZXh0Ml9lcnJvcl90YWJsZSk7CisKKwlmcHJpbnRmIChzdGRlcnIsICJyZXNpemUyZnMgJXMgKCVzKVxuIiwKKwkJIEUyRlNQUk9HU19WRVJTSU9OLCBFMkZTUFJPR1NfREFURSk7CisJaWYgKGFyZ2MgJiYgKmFyZ3YpCisJCXByb2dyYW1fbmFtZSA9ICphcmd2OworCisJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiZDpmRmhNUHBTOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2gnOgorCQkJdXNhZ2UocHJvZ3JhbV9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWZvcmNlID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdGJzoKKwkJCWZsdXNoID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdNJzoKKwkJCWZvcmNlX21pbl9zaXplID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdQJzoKKwkJCXByaW50X21pbl9zaXplID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWZsYWdzIHw9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCWZsYWdzIHw9IFJFU0laRV9QRVJDRU5UX0NPTVBMRVRFOworCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJdXNlX3N0cmlkZSA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UocHJvZ3JhbV9uYW1lKTsKKwkJfQorCX0KKwlpZiAob3B0aW5kID09IGFyZ2MpCisJCXVzYWdlKHByb2dyYW1fbmFtZSk7CisKKwlkZXZpY2VfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOworCWlmIChvcHRpbmQgPCBhcmdjKQorCQluZXdfc2l6ZV9zdHIgPSBhcmd2W29wdGluZCsrXTsKKwlpZiAob3B0aW5kIDwgYXJnYykKKwkJdXNhZ2UocHJvZ3JhbV9uYW1lKTsKKworCWlvX29wdGlvbnMgPSBzdHJjaHIoZGV2aWNlX25hbWUsICc/Jyk7CisJaWYgKGlvX29wdGlvbnMpCisJCSppb19vcHRpb25zKysgPSAwOworCisJLyoKKwkgKiBGaWd1cmUgb3V0IHdoZXRoZXIgb3Igbm90IHRoZSBkZXZpY2UgaXMgbW91bnRlZCwgYW5kIGlmIGl0IGlzCisJICogd2hlcmUgaXQgaXMgbW91bnRlZC4KKwkgKi8KKwlsZW49ODA7CisJd2hpbGUgKDEpIHsKKwkJbXRwdCA9IG1hbGxvYyhsZW4pOworCQlpZiAoIW10cHQpCisJCQlyZXR1cm4gRU5PTUVNOworCQltdHB0W2xlbi0xXSA9IDA7CisJCXJldHZhbCA9IGV4dDJmc19jaGVja19tb3VudF9wb2ludChkZXZpY2VfbmFtZSwgJm1vdW50X2ZsYWdzLAorCQkJCQkJICBtdHB0LCBsZW4pOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKCJleHQyZnNfY2hlY2tfbW91bnRfcG9pbnQiLCByZXR2YWwsCisJCQkJXygid2hpbGUgZGV0ZXJtaW5pbmcgd2hldGhlciAlcyBpcyBtb3VudGVkLiIpLAorCQkJCWRldmljZV9uYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCEobW91bnRfZmxhZ3MgJiBFWFQyX01GX01PVU5URUQpIHx8IChtdHB0W2xlbi0xXSA9PSAwKSkKKwkJCWJyZWFrOworCQlmcmVlKG10cHQpOworCQlsZW4gPSAyICogbGVuOworCX0KKworCWZkID0gZXh0MmZzX29wZW5fZmlsZShkZXZpY2VfbmFtZSwgT19SRFdSLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCWNvbV9lcnIoIm9wZW4iLCBlcnJubywgXygid2hpbGUgb3BlbmluZyAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCXJldCA9IGV4dDJmc19mc3RhdChmZCwgJnN0X2J1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJY29tX2Vycigib3BlbiIsIGVycm5vLAorCQkJXygid2hpbGUgZ2V0dGluZyBzdGF0IGluZm9ybWF0aW9uIGZvciAlcyIpLAorCQkJZGV2aWNlX25hbWUpOworCQlleGl0KDEpOworCX0KKworCWlmIChmbHVzaCkgeworCQlyZXR2YWwgPSBleHQyZnNfc3luY19kZXZpY2UoZmQsIDEpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gZmx1c2ggJXMiKSwKKwkJCQlkZXZpY2VfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKCFTX0lTUkVHKHN0X2J1Zi5zdF9tb2RlICkpIHsKKwkJY2xvc2UoZmQpOworCQlmZCA9IC0xOworCX0KKworI2lmZGVmIENPTkZJR19URVNUSU9fREVCVUcKKwlpZiAoZ2V0ZW52KCJURVNUX0lPX0ZMQUdTIikgfHwgZ2V0ZW52KCJURVNUX0lPX0JMT0NLIikpIHsKKwkJaW9fcHRyID0gdGVzdF9pb19tYW5hZ2VyOworCQl0ZXN0X2lvX2JhY2tpbmdfbWFuYWdlciA9IHVuaXhfaW9fbWFuYWdlcjsKKwl9IGVsc2UKKyNlbmRpZgorCQlpb19wdHIgPSB1bml4X2lvX21hbmFnZXI7CisKKwlpZiAoIShtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkpCisJCWlvX2ZsYWdzID0gRVhUMl9GTEFHX1JXIHwgRVhUMl9GTEFHX0VYQ0xVU0lWRTsKKworCWlvX2ZsYWdzIHw9IEVYVDJfRkxBR182NEJJVFM7CisKKwlyZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlX25hbWUsIGlvX29wdGlvbnMsIGlvX2ZsYWdzLAorCQkJICAgICAgMCwgMCwgaW9fcHRyLCAmZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgXygid2hpbGUgdHJ5aW5nIHRvIG9wZW4gJXMiKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJcHJpbnRmKCIlcyIsIF8oIkNvdWxkbid0IGZpbmQgdmFsaWQgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLlxuIikpOworCQlleGl0ICgxKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGZlYXR1cmUgc2V0cy4gIFdlIG5lZWQgdG8KKwkgKiBiZSBtb3JlIHN0cmluZ2VudCB0aGFuIGV4dDJmc19vcGVuKCkuCisJICovCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2NvbXBhdCAmIH5FWFQyX0xJQl9GRUFUVVJFX0NPTVBBVF9TVVBQKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBFWFQyX0VUX1VOU1VQUF9GRUFUVVJFLAorCQkJIiglcykiLCBkZXZpY2VfbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJbWluX3NpemUgPSBjYWxjdWxhdGVfbWluaW11bV9yZXNpemVfc2l6ZShmcywgZmxhZ3MpOworCisJaWYgKHByaW50X21pbl9zaXplKSB7CisJCWlmICghZm9yY2UgJiYgKChmcy0+c3VwZXItPnNfc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKSB8fAorCQkJICAgICAgICgoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykgPT0gMCkpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuXG4iKSwKKwkJCQlkZXZpY2VfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJCXByaW50ZihfKCJFc3RpbWF0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtOiAlbGx1XG4iKSwKKwkJICAgICAgIG1pbl9zaXplKTsKKwkJZXhpdCgwKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgdGhlIHN5c3RlbSBwYWdlIHNpemUgaWYgcG9zc2libGUgKi8KKyNpZmRlZiBIQVZFX1NZU0NPTkYKKyNpZiAoIWRlZmluZWQoX1NDX1BBR0VTSVpFKSAmJiBkZWZpbmVkKF9TQ19QQUdFX1NJWkUpKQorI2RlZmluZSBfU0NfUEFHRVNJWkUgX1NDX1BBR0VfU0laRQorI2VuZGlmCisjaWZkZWYgX1NDX1BBR0VTSVpFCisJc3lzdmFsID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCWlmIChzeXN2YWwgPiAwKQorCQlzeXNfcGFnZV9zaXplID0gc3lzdmFsOworI2VuZGlmIC8qIF9TQ19QQUdFU0laRSAqLworI2VuZGlmIC8qIEhBVkVfU1lTQ09ORiAqLworCisJLyoKKwkgKiBHZXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5pbmcgcGFydGl0aW9uLCBhbmQgdXNlIHRoaXMgZm9yCisJICogZGVmYXVsdHMgYW5kIGZvciBtYWtpbmcgc3VyZSB0aGUgbmV3IGZpbGVzeXN0ZW0gZG9lc24ndAorCSAqIGV4Y2VlZCB0aGUgcGFydGl0aW9uIHNpemUuCisJICovCisJcmV0dmFsID0gZXh0MmZzX2dldF9kZXZpY2Vfc2l6ZTIoZGV2aWNlX25hbWUsIGZzLT5ibG9ja3NpemUsCisJCQkJCSAmbWF4X3NpemUpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIHJldHZhbCwgIiVzIiwKKwkJCV8oIndoaWxlIHRyeWluZyB0byBkZXRlcm1pbmUgZmlsZXN5c3RlbSBzaXplIikpOworCQlleGl0KDEpOworCX0KKwlpZiAoZm9yY2VfbWluX3NpemUpCisJCW5ld19zaXplID0gbWluX3NpemU7CisJZWxzZSBpZiAobmV3X3NpemVfc3RyKSB7CisJCW5ld19zaXplID0gcGFyc2VfbnVtX2Jsb2NrczIobmV3X3NpemVfc3RyLAorCQkJCQkgICAgIGZzLT5zdXBlci0+c19sb2dfYmxvY2tfc2l6ZSk7CisJCWlmIChuZXdfc2l6ZSA9PSAwKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJJbnZhbGlkIG5ldyBzaXplOiAlc1xuIiksIG5ld19zaXplX3N0cik7CisJCQlleGl0KDEpOworCQl9CisJfSBlbHNlIHsKKwkJbmV3X3NpemUgPSBtYXhfc2l6ZTsKKwkJLyogUm91bmQgZG93biB0byBhbiBldmVuIG11bHRpcGxlIG9mIGEgcGFnZXNpemUgKi8KKwkJaWYgKHN5c19wYWdlX3NpemUgPiBmcy0+YmxvY2tzaXplKQorCQkJbmV3X3NpemUgJj0gfigoc3lzX3BhZ2Vfc2l6ZSAvIGZzLT5ibG9ja3NpemUpLTEpOworCX0KKwlpZiAoIUVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCSAgICAgICBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpKSB7CisJCS8qIFRha2UgMTZUIGRvd24gdG8gMl4zMi0xIGJsb2NrcyAqLworCQlpZiAobmV3X3NpemUgPT0gKDFVTEwgPDwgMzIpKQorCQkJbmV3X3NpemUtLTsKKwkJZWxzZSBpZiAobmV3X3NpemUgPiAoMVVMTCA8PCAzMikpIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIk5ldyBzaXplIHRvbyBsYXJnZSB0byBiZSAiCisJCQkJICAiZXhwcmVzc2VkIGluIDMyIGJpdHNcbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoIWZvcmNlICYmIG5ld19zaXplIDwgbWluX3NpemUpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQlfKCJOZXcgc2l6ZSBzbWFsbGVyIHRoYW4gbWluaW11bSAoJWxsdSlcbiIpLCBtaW5fc2l6ZSk7CisJCWV4aXQoMSk7CisJfQorCWlmICh1c2Vfc3RyaWRlID49IDApIHsKKwkJaWYgKHVzZV9zdHJpZGUgPj0gKGludCkgZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLCAiJXMiLAorCQkJCV8oIkludmFsaWQgc3RyaWRlIGxlbmd0aCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZnMtPnN0cmlkZSA9IGZzLT5zdXBlci0+c19yYWlkX3N0cmlkZSA9IHVzZV9zdHJpZGU7CisJCWV4dDJmc19tYXJrX3N1cGVyX2RpcnR5KGZzKTsKKwl9IGVsc2UKKwkJICBkZXRlcm1pbmVfZnNfc3RyaWRlKGZzKTsKKworCS8qCisJICogSWYgd2UgYXJlIHJlc2l6aW5nIGEgcGxhaW4gZmlsZSwgYW5kIGl0J3Mgbm90IGJpZyBlbm91Z2gsCisJICogYXV0b21hdGljYWxseSBleHRlbmQgaXQgaW4gYSBzcGFyc2UgZmFzaGlvbiBieSB3cml0aW5nIHRoZQorCSAqIGxhc3QgcmVxdWVzdGVkIGJsb2NrLgorCSAqLworCW5ld19maWxlX3NpemUgPSAoKF9fdTY0KSBuZXdfc2l6ZSkgKiBmcy0+YmxvY2tzaXplOworCWlmICgoX191NjQpIG5ld19maWxlX3NpemUgPgorCSAgICAoKChfX3U2NCkgMSkgPDwgKHNpemVvZihzdF9idWYuc3Rfc2l6ZSkqOCAtIDEpKSAtIDEpCisJCWZkID0gLTE7CisJaWYgKChuZXdfZmlsZV9zaXplID4gc3RfYnVmLnN0X3NpemUpICYmCisJICAgIChmZCA+IDApKSB7CisJCWlmICgoZXh0MmZzX2xsc2VlayhmZCwgbmV3X2ZpbGVfc2l6ZS0xLCBTRUVLX1NFVCkgPj0gMCkgJiYKKwkJICAgICh3cml0ZShmZCwgIjAiLCAxKSA9PSAxKSkKKwkJCW1heF9zaXplID0gbmV3X3NpemU7CisJfQorCWlmICghZm9yY2UgJiYgKG5ld19zaXplID4gbWF4X3NpemUpKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgY29udGFpbmluZyBwYXJ0aXRpb24gKG9yIGRldmljZSkiCisJCQkiIGlzIG9ubHkgJWxsdSAoJWRrKSBibG9ja3MuXG5Zb3UgcmVxdWVzdGVkIGEgbmV3IHNpemUiCisJCQkiIG9mICVsbHUgYmxvY2tzLlxuXG4iKSwgbWF4X3NpemUsCisJCQlmcy0+YmxvY2tzaXplIC8gMTAyNCwgbmV3X3NpemUpOworCQlleGl0KDEpOworCX0KKwlpZiAobmV3X3NpemUgPT0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJUaGUgZmlsZXN5c3RlbSBpcyBhbHJlYWR5ICVsbHUgYmxvY2tzICIKKwkJCSJsb25nLiAgTm90aGluZyB0byBkbyFcblxuIiksIG5ld19zaXplKTsKKwkJZXhpdCgwKTsKKwl9CisJaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisJCWJpZ2FsbG9jX2NoZWNrKGZzLCBmb3JjZSk7CisJCXJldHZhbCA9IG9ubGluZV9yZXNpemVfZnMoZnMsIG10cHQsICZuZXdfc2l6ZSwgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmICghZm9yY2UgJiYgKChmcy0+c3VwZXItPnNfbGFzdGNoZWNrIDwgZnMtPnN1cGVyLT5zX210aW1lKSB8fAorCQkJICAgICAgIChmcy0+c3VwZXItPnNfc3RhdGUgJiBFWFQyX0VSUk9SX0ZTKSB8fAorCQkJICAgICAgICgoZnMtPnN1cGVyLT5zX3N0YXRlICYgRVhUMl9WQUxJRF9GUykgPT0gMCkpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJQbGVhc2UgcnVuICdlMmZzY2sgLWYgJXMnIGZpcnN0LlxuXG4iKSwKKwkJCQlkZXZpY2VfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisJCWJpZ2FsbG9jX2NoZWNrKGZzLCBmb3JjZSk7CisJCXByaW50ZihfKCJSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiAiCisJCQkgIiVzIHRvICVsbHUgKCVkaykgYmxvY2tzLlxuIiksCisJCSAgICAgICBkZXZpY2VfbmFtZSwgbmV3X3NpemUsIGZzLT5ibG9ja3NpemUgLyAxMDI0KTsKKwkJcmV0dmFsID0gcmVzaXplX2ZzKGZzLCAmbmV3X3NpemUsIGZsYWdzLAorCQkJCSAgICgoZmxhZ3MgJiBSRVNJWkVfUEVSQ0VOVF9DT01QTEVURSkgPworCQkJCSAgICByZXNpemVfcHJvZ3Jlc3NfZnVuYyA6IDApKTsKKwl9CisJZnJlZShtdHB0KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsIF8oIndoaWxlIHRyeWluZyB0byByZXNpemUgJXMiKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsCisJCQlfKCJQbGVhc2UgcnVuICdlMmZzY2sgLWZ5ICVzJyB0byBmaXggdGhlIGZpbGVzeXN0ZW1cbiIKKwkJCSAgImFmdGVyIHRoZSBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24uXG4iKSwKKwkJCWRldmljZV9uYW1lKTsKKwkJZXh0MmZzX2Nsb3NlKGZzKTsKKwkJZXhpdCgxKTsKKwl9CisJcHJpbnRmKF8oIlRoZSBmaWxlc3lzdGVtIG9uICVzIGlzIG5vdyAlbGx1IGJsb2NrcyBsb25nLlxuXG4iKSwKKwkgICAgICAgZGV2aWNlX25hbWUsIG5ld19zaXplKTsKKworCWlmICgoc3RfYnVmLnN0X3NpemUgPiBuZXdfZmlsZV9zaXplKSAmJgorCSAgICAoZmQgPiAwKSkgeworI2lmZGVmIEhBVkVfRlRSVU5DQVRFNjQKKwkJcmV0dmFsID0gZnRydW5jYXRlNjQoZmQsIG5ld19maWxlX3NpemUpOworI2Vsc2UKKwkJcmV0dmFsID0gMDsKKwkJLyogT25seSB0cnVuY2F0ZSBpZiBuZXdfZmlsZV9zaXplIGRvZXNuJ3Qgb3ZlcmZsb3cgb2ZmX3QgKi8KKwkJaWYgKCgob2ZmX3QpIG5ld19maWxlX3NpemUpID09IG5ld19maWxlX3NpemUpCisJCQlyZXR2YWwgPSBmdHJ1bmNhdGUoZmQsIChvZmZfdCkgbmV3X2ZpbGVfc2l6ZSk7CisjZW5kaWYKKwkJaWYgKHJldHZhbCkKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCByZXR2YWwsCisJCQkJXygid2hpbGUgdHJ5aW5nIHRvIHRydW5jYXRlICVzIiksCisJCQkJZGV2aWNlX25hbWUpOworCX0KKwlpZiAoZmQgPiAwKQorCQljbG9zZShmZCk7CisJcmVtb3ZlX2Vycm9yX3RhYmxlKCZldF9leHQyX2Vycm9yX3RhYmxlKTsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Jlc2l6ZS9vbmxpbmUuYyBiL2UyZnNwcm9ncy9yZXNpemUvb25saW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3MTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvb25saW5lLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBvbmxpbmUuYyAtLS0gRG8gb24tbGluZSByZXNpemluZyBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJyZXNpemUyZnMuaCIKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2V4dGVybiBjaGFyICpwcm9ncmFtX25hbWU7CisKKyNkZWZpbmUgTUFYXzMyX05VTSAoKCgodW5zaWduZWQgbG9uZyBsb25nKSAxKSA8PCAzMikgLSAxKQorCisjaWZkZWYgX19saW51eF9fCitzdGF0aWMgaW50IHBhcnNlX3ZlcnNpb25fbnVtYmVyKGNvbnN0IGNoYXIgKnMpCit7CisJaW50CW1ham9yLCBtaW5vciwgcmV2OworCWNoYXIJKmVuZHB0cjsKKwljb25zdCBjaGFyICpjcCA9IHM7CisKKwlpZiAoIXMpCisJCXJldHVybiAwOworCW1ham9yID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CisJaWYgKGNwID09IGVuZHB0ciB8fCAqZW5kcHRyICE9ICcuJykKKwkJcmV0dXJuIDA7CisJY3AgPSBlbmRwdHIgKyAxOworCW1pbm9yID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CisJaWYgKGNwID09IGVuZHB0ciB8fCAqZW5kcHRyICE9ICcuJykKKwkJcmV0dXJuIDA7CisJY3AgPSBlbmRwdHIgKyAxOworCXJldiA9IHN0cnRvbChjcCwgJmVuZHB0ciwgMTApOworCWlmIChjcCA9PSBlbmRwdHIpCisJCXJldHVybiAwOworCXJldHVybiAoKCgobWFqb3IgKiAyNTYpICsgbWlub3IpICogMjU2KSArIHJldik7Cit9CisKKyNkZWZpbmUgVkVSU0lPTl9DT0RFKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorCisjZW5kaWYKKworZXJyY29kZV90IG9ubGluZV9yZXNpemVfZnMoZXh0Ml9maWxzeXMgZnMsIGNvbnN0IGNoYXIgKm10cHQsCisJCQkgICBibGs2NF90ICpuZXdfc2l6ZSwgaW50IGZsYWdzIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKK3sKKyNpZmRlZiBfX2xpbnV4X18KKwlzdHJ1Y3QgZXh0Ml9uZXdfZ3JvdXBfaW5wdXQgaW5wdXQ7CisJc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0IGlucHV0NjQ7CisJc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKnNiID0gZnMtPnN1cGVyOworCXVuc2lnbmVkIGxvbmcJCW5ld19kZXNjX2Jsb2NrczsKKwlleHQyX2ZpbHN5cyAJCW5ld19mczsKKwllcnJjb2RlX3QgCQlyZXR2YWw7CisJZG91YmxlCQkJcGVyY2VudDsKKwlkZ3JwX3QJCQlpOworCWJsa190CQkJc2l6ZTsKKwlpbnQJCQlmZCwgb3ZlcmhlYWQ7CisJaW50CQkJdXNlX29sZF9pb2N0bCA9IDE7CisJaW50CQkJbm9fbWV0YV9iZ19yZXNpemUgPSAwOworCWludAkJCW5vX3Jlc2l6ZV9pb2N0bCA9IDA7CisKKwlpZiAoZ2V0ZW52KCJSRVNJWkUyRlNfS0VSTkVMX1ZFUlNJT04iKSkgeworCQljaGFyICp2ZXJzaW9uX3RvX2VtdWxhdGUgPSBnZXRlbnYoIlJFU0laRTJGU19LRVJORUxfVkVSU0lPTiIpOworCQlpbnQga3ZlcnMgPSBwYXJzZV92ZXJzaW9uX251bWJlcih2ZXJzaW9uX3RvX2VtdWxhdGUpOworCisJCWlmIChrdmVycyA8IFZFUlNJT05fQ09ERSgzLCA3LCAwKSkKKwkJCW5vX21ldGFfYmdfcmVzaXplID0gMTsKKwkJaWYgKGt2ZXJzIDwgVkVSU0lPTl9DT0RFKDMsIDMsIDApKQorCQkJbm9fcmVzaXplX2lvY3RsID0gMTsKKwl9CisKKwlwcmludGYoXygiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzOyAiCisJCSAib24tbGluZSByZXNpemluZyByZXF1aXJlZFxuIiksIGZzLT5kZXZpY2VfbmFtZSwgbXRwdCk7CisKKwlpZiAoKm5ld19zaXplIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChzYikpIHsKKwkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsIF8oIk9uLWxpbmUgc2hyaW5raW5nIG5vdCBzdXBwb3J0ZWQiKSk7CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgYmxvY2tzIGlzIGdvaW5nIHRvIGluY3JlYXNlLAorCSAqIHRoZSBvbi1saW5lIHJlc2l6aW5nIGlub2RlIG11c3QgYmUgcHJlc2VudC4KKwkgKi8KKwluZXdfZGVzY19ibG9ja3MgPSBleHQyZnNfZGl2X2NlaWwoCisJCWV4dDJmc19kaXY2NF9jZWlsKCpuZXdfc2l6ZSAtCisJCQkJICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaywKKwkJCQkgIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpKSwKKwkJRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpKTsKKwlwcmludGYoIm9sZF9kZXNjX2Jsb2NrcyA9ICVsdSwgbmV3X2Rlc2NfYmxvY2tzID0gJWx1XG4iLAorCSAgICAgICBmcy0+ZGVzY19ibG9ja3MsIG5ld19kZXNjX2Jsb2Nrcyk7CisKKwkvKgorCSAqIERvIGVycm9yIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgcmVzaXplIHdpbGwgYmUgc3VjY2Vzc2Z1bC4KKwkgKi8KKwlpZiAoKGFjY2VzcygiL3N5cy9mcy9leHQ0L2ZlYXR1cmVzL21ldGFfYmdfcmVzaXplIiwgUl9PSykgIT0gMCkgfHwKKwkgICAgbm9fbWV0YV9iZ19yZXNpemUpIHsKKwkJaWYgKCFFWFQyX0hBU19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCQkgICAgKG5ld19kZXNjX2Jsb2NrcyAhPSBmcy0+ZGVzY19ibG9ja3MpKSB7CisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgMCwKKwkJCQlfKCJGaWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIikpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmIChFWFQyX0hBU19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCUVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSAmJgorCQkgICAgbmV3X2Rlc2NfYmxvY2tzID4gKGZzLT5kZXNjX2Jsb2NrcyArCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiTm90IGVub3VnaCByZXNlcnZlZCBnZHQgYmxvY2tzIGZvciByZXNpemluZyIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlpZiAoKGV4dDJmc19ibG9ja3NfY291bnQoc2IpID4gTUFYXzMyX05VTSkgfHwKKwkJICAgICgqbmV3X3NpemUgPiBNQVhfMzJfTlVNKSkgeworCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgcmVzaXppbmcgYSBmaWxlIHN5c3RlbSB0aGlzIGxhcmdlIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWZkID0gb3BlbihtdHB0LCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gb3BlbiBtb3VudHBvaW50ICVzIiksIG10cHQpOworCQlleGl0KDEpOworCX0KKworCWlmIChub19yZXNpemVfaW9jdGwpIHsKKwkJcHJpbnRmKF8oIk9sZCByZXNpemUgaW50ZXJmYWNlIHJlcXVlc3RlZC5cbiIpKTsKKwl9IGVsc2UgaWYgKGlvY3RsKGZkLCBFWFQ0X0lPQ19SRVNJWkVfRlMsIG5ld19zaXplKSkgeworCQkvKgorCQkgKiBJZiBrZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCBFWFQ0X0lPQ19SRVNJWkVfRlMsIHVzZSB0aGUKKwkJICogb2xkIG9ubGluZSByZXNpemUuIE5vdGUgdGhhdCB0aGUgb2xkIGFwcHJvYWNoIGRvZXMgbm90CisJCSAqIGhhbmRsZSA+MzIgYml0IGZpbGUgc3lzdGVtcworCQkgKgorCQkgKiBTaWdoLCBpZiB3ZSBhcmUgcnVubmluZyBhIDMyLWJpdCBiaW5hcnkgb24gYSA2NC1iaXQKKwkJICoga2VybmVsICh3aGljaCBoYXBwZW5zIGFsbCB0aGUgdGltZSBvbiB0aGUgTUlQUworCQkgKiBhcmNoaXRlY3R1cmUgaW4gRGViaWFuLCBidXQgY2FuIGhhcHBlbiBvbiBvdGhlciBDUFUKKwkJICogYXJjaGl0ZWN0dXJlcyBhcyB3ZWxsKSB3ZSB3aWxsIGdldCBFSU5WQUwgcmV0dXJuZWQKKwkJICogd2hlbiBhbiBpb2N0bCBkb2Vzbid0IGV4aXN0LCBhdCBsZWFzdCB1cCB0byBMaW51eAorCQkgKiAzLjEuICBTZWUgY29tcGF0X3N5c19pb2N0bCgpIGluIGZzL2NvbXBhdF9pb2N0bC5jCisJCSAqIGluIHRoZSBrZXJuZWwgc291cmNlcy4gIFRoaXMgaXMgcHJvYmFibHkgYSBrZXJuZWwKKwkJICogYnVnLCBidXQgd29yayBhcm91bmQgaXQgaGVyZS4KKwkJICovCisJCWlmICgoZXJybm8gIT0gRU5PVFRZKSAmJiAoZXJybm8gIT0gRUlOVkFMKSkgeworCQkJaWYgKGVycm5vID09IEVQRVJNKQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJCV8oIlBlcm1pc3Npb24gZGVuaWVkIHRvIHJlc2l6ZSBmaWxlc3lzdGVtIikpOworCQkJZWxzZQorCQkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyAiCisJCQkJICAic3VwcG9ydCIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCXNpemUgPSBleHQyZnNfYmxvY2tzX2NvdW50KHNiKTsKKworCWlmIChpb2N0bChmZCwgRVhUMl9JT0NfR1JPVVBfRVhURU5ELCAmc2l6ZSkpIHsKKwkJaWYgKGVycm5vID09IEVQRVJNKQorCQkJY29tX2Vycihwcm9ncmFtX25hbWUsIDAsCisJCQkJXygiUGVybWlzc2lvbiBkZW5pZWQgdG8gcmVzaXplIGZpbGVzeXN0ZW0iKSk7CisJCWVsc2UgaWYgKGVycm5vID09IEVOT1RUWSkKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCAwLAorCQkJXygiS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgb25saW5lIHJlc2l6aW5nIikpOworCQllbHNlCisJCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJXaGlsZSBjaGVja2luZyBmb3Igb24tbGluZSByZXNpemluZyBzdXBwb3J0IikpOworCQlleGl0KDEpOworCX0KKworCXBlcmNlbnQgPSAoZXh0MmZzX3JfYmxvY2tzX2NvdW50KHNiKSAqIDEwMC4wKSAvCisJCWV4dDJmc19ibG9ja3NfY291bnQoc2IpOworCisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gZXh0MmZzX2R1cF9oYW5kbGUoZnMsICZuZXdfZnMpOworCWlmIChyZXR2YWwpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIFRoZSBjdXJyZW50IG1ldGhvZCBvZiBhZGRpbmcgb25lIGJsb2NrIGdyb3VwIGF0IGEgdGltZSB0byBhCisJICogbW91bnRlZCBmaWxlc3lzdGVtIG1lYW5zIGl0IGlzIGltcG9zc2libGUgdG8gYWNjb21vZGF0ZSB0aGUKKwkgKiBmbGV4X2JnIGFsbG9jYXRpb24gbWV0aG9kIG9mIHBsYWNpbmcgdGhlIG1ldGFkYXRhIHRvZ2V0aGVyCisJICogaW4gYSBzaW5nbGUgYmxvY2sgZ3JvdXAuICBGb3Igbm93IHdlICJmaXgiIHRoaXMgaXNzdWUgYnkKKwkgKiB1c2luZyB0aGUgdHJhZGl0aW9uYWwgbGF5b3V0IGZvciBuZXcgYmxvY2sgZ3JvdXBzLCB3aGVyZQorCSAqIGVhY2ggYmxvY2sgZ3JvdXAgaXMgc2VsZi1jb250YWluZWQgYW5kIGNvbnRhaW5zIGl0cyBvd24KKwkgKiBiaXRtYXAgYmxvY2tzIGFuZCBpbm9kZSB0YWJsZXMuICBUaGlzIG1lYW5zIHdlIGRvbid0IGdldAorCSAqIHRoZSBsYXlvdXQgYWR2YW50YWdlcyBvZiBmbGV4X2JnIGluIHRoZSBuZXcgYmxvY2sgZ3JvdXBzLAorCSAqIGJ1dCBhdCBsZWFzdCBpdCBhbGxvd3Mgb24tbGluZSByZXNpemluZyB0byBmdW5jdGlvbi4KKwkgKi8KKwluZXdfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJj0gfkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHOworCXJldHZhbCA9IGFkanVzdF9mc19pbmZvKG5ld19mcywgZnMsIDAsICpuZXdfc2l6ZSk7CisJaWYgKHJldHZhbCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcHJpbnRmKF8oIlBlcmZvcm1pbmcgYW4gb24tbGluZSByZXNpemUgb2YgJXMgdG8gJWxsdSAoJWRrKSBibG9ja3MuXG4iKSwKKwkgICAgICAgZnMtPmRldmljZV9uYW1lLCAqbmV3X3NpemUsIGZzLT5ibG9ja3NpemUgLyAxMDI0KTsKKworCXNpemUgPSBmcy0+Z3JvdXBfZGVzY19jb3VudCAqIHNiLT5zX2Jsb2Nrc19wZXJfZ3JvdXAgKworCQlzYi0+c19maXJzdF9kYXRhX2Jsb2NrOworCWlmIChzaXplID4gKm5ld19zaXplKQorCQlzaXplID0gKm5ld19zaXplOworCisJaWYgKGlvY3RsKGZkLCBFWFQyX0lPQ19HUk9VUF9FWFRFTkQsICZzaXplKSkgeworCQljb21fZXJyKHByb2dyYW1fbmFtZSwgZXJybm8sCisJCQlfKCJXaGlsZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBsYXN0IGdyb3VwIikpOworCQlleGl0KDEpOworCX0KKworCWZvciAoaSA9IGZzLT5ncm91cF9kZXNjX2NvdW50OworCSAgICAgaSA8IG5ld19mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKSB7CisKKwkJb3ZlcmhlYWQgPSAoaW50KSAoMiArIG5ld19mcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCk7CisKKwkJaWYgKGV4dDJmc19iZ19oYXNfc3VwZXIobmV3X2ZzLCBuZXdfZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxKSkKKwkJCW92ZXJoZWFkICs9IDEgKyBuZXdfZnMtPmRlc2NfYmxvY2tzICsKKwkJCQluZXdfZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisKKwkJaW5wdXQuZ3JvdXAgPSBpOworCQlpbnB1dC5ibG9ja19iaXRtYXAgPSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhuZXdfZnMsIGkpOworCQlpbnB1dC5pbm9kZV9iaXRtYXAgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhuZXdfZnMsIGkpOworCQlpbnB1dC5pbm9kZV90YWJsZSA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MobmV3X2ZzLCBpKTsKKwkJaW5wdXQuYmxvY2tzX2NvdW50ID0gZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChuZXdfZnMsIGkpOworCQlpbnB1dC5yZXNlcnZlZF9ibG9ja3MgPSAoYmxrX3QpIChwZXJjZW50ICogaW5wdXQuYmxvY2tzX2NvdW50CisJCQkJCQkgLyAxMDAuMCk7CisKKyNpZiAwCisJCXByaW50ZigibmV3IGJsb2NrIGJpdG1hcCBpcyBhdCAweCUwNHhcbiIsIGlucHV0LmJsb2NrX2JpdG1hcCk7CisJCXByaW50ZigibmV3IGlub2RlIGJpdG1hcCBpcyBhdCAweCUwNHhcbiIsIGlucHV0Lmlub2RlX2JpdG1hcCk7CisJCXByaW50ZigibmV3IGlub2RlIHRhYmxlIGlzIGF0IDB4JTA0eC0weCUwNHhcbiIsCisJCSAgICAgICBpbnB1dC5pbm9kZV90YWJsZSwKKwkJICAgICAgIGlucHV0Lmlub2RlX3RhYmxlICsgbmV3X2ZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLTEpOworCQlwcmludGYoIm5ldyBncm91cCBoYXMgJXUgYmxvY2tzXG4iLCBpbnB1dC5ibG9ja3NfY291bnQpOworCQlwcmludGYoIm5ldyBncm91cCB3aWxsIHJlc2VydmUgJWQgYmxvY2tzXG4iLAorCQkgICAgICAgaW5wdXQucmVzZXJ2ZWRfYmxvY2tzKTsKKwkJcHJpbnRmKCJuZXcgZ3JvdXAgaGFzICVkIGZyZWUgYmxvY2tzXG4iLAorCQkgICAgICAgZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50KG5ld19mcywgaSksCisJCXByaW50ZigibmV3IGdyb3VwIGhhcyAlZCBmcmVlIGlub2RlcyAoJWQgYmxvY2tzKVxuIiwKKwkJICAgICAgIGV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudChuZXdfZnMsIGkpLAorCQkgICAgICAgbmV3X2ZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwkJcHJpbnRmKCJBZGRpbmcgZ3JvdXAgIyVkXG4iLCBpbnB1dC5ncm91cCk7CisjZW5kaWYKKworCQlpZiAodXNlX29sZF9pb2N0bCAmJgorCQkgICAgaW9jdGwoZmQsIEVYVDJfSU9DX0dST1VQX0FERCwgJmlucHV0KSA9PSAwKQorCQkJY29udGludWU7CisJCWVsc2UKKwkJCXVzZV9vbGRfaW9jdGwgPSAwOworCisJCWlucHV0NjQuZ3JvdXAgPSBpbnB1dC5ncm91cDsKKwkJaW5wdXQ2NC5ibG9ja19iaXRtYXAgPSBpbnB1dC5ibG9ja19iaXRtYXA7CisJCWlucHV0NjQuaW5vZGVfYml0bWFwID0gaW5wdXQuaW5vZGVfYml0bWFwOworCQlpbnB1dDY0Lmlub2RlX3RhYmxlID0gaW5wdXQuaW5vZGVfdGFibGU7CisJCWlucHV0NjQuYmxvY2tzX2NvdW50ID0gaW5wdXQuYmxvY2tzX2NvdW50OworCQlpbnB1dDY0LnJlc2VydmVkX2Jsb2NrcyA9IGlucHV0LnJlc2VydmVkX2Jsb2NrczsKKwkJaW5wdXQ2NC51bnVzZWQgPSBpbnB1dC51bnVzZWQ7CisKKwkJaWYgKGlvY3RsKGZkLCBFWFQ0X0lPQ19HUk9VUF9BREQsICZpbnB1dDY0KSA8IDApIHsKKwkJCWNvbV9lcnIocHJvZ3JhbV9uYW1lLCBlcnJubywKKwkJCQlfKCJXaGlsZSB0cnlpbmcgdG8gYWRkIGdyb3VwICMlZCIpLAorCQkJCWlucHV0Lmdyb3VwKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlleHQyZnNfZnJlZShuZXdfZnMpOworCWNsb3NlKGZkKTsKKworCXJldHVybiAwOworI2Vsc2UKKwlwcmludGYoXygiRmlsZXN5c3RlbSBhdCAlcyBpcyBtb3VudGVkIG9uICVzLCBhbmQgb24tbGluZSByZXNpemluZyBpcyAiCisJCSAibm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbiIpLCBmcy0+ZGV2aWNlX25hbWUsIG10cHQpOworCWV4aXQoMSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvcmVzaXplMmZzLjguaW4gYi9lMmZzcHJvZ3MvcmVzaXplL3Jlc2l6ZTJmcy44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjMwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcmVzaXplL3Jlc2l6ZTJmcy44LmluCkBAIC0wLDAgKzEsMTUyIEBACisuXCIgLSotIG5yb2ZmIC0qLQorLlwiIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uICBBbGwgUmlnaHRzIFJlc2VydmVkLgorLlwiIAorLlwiIC5USCBSRVNJWkUyRlMgOCAiQEUyRlNQUk9HU19NT05USEAgQEUyRlNQUk9HU19ZRUFSQCIgIkUyZnNwcm9ncyB2ZXJzaW9uIEBFMkZTUFJPR1NfVkVSU0lPTkAiCisuVEggUkVTSVpFMkZTIDggIkBFMkZTUFJPR1NfTU9OVEhAIEBFMkZTUFJPR1NfWUVBUkAiICJFMmZzcHJvZ3MgdmVyc2lvbiBARTJGU1BST0dTX1ZFUlNJT05AIgorLlNIIE5BTUUKK3Jlc2l6ZTJmcyBcLSBleHQyL2V4dDMvZXh0NCBmaWxlIHN5c3RlbSByZXNpemVyCisuU0ggU1lOT1BTSVMKKy5CIHJlc2l6ZTJmcworWworLkIgXC1mRnBQTQorXQorWworLkIgXC1kCisuSSBkZWJ1Zy1mbGFncworXQorWworLkIgXC1TCisuSSBSQUlELXN0cmlkZQorXQorLkkgZGV2aWNlCitbCisuSSBzaXplCitdCisuU0ggREVTQ1JJUFRJT04KK1RoZQorLkIgcmVzaXplMmZzCitwcm9ncmFtIHdpbGwgcmVzaXplIGV4dDIsIGV4dDMsIG9yIGV4dDQgZmlsZSBzeXN0ZW1zLiAgSXQgY2FuIGJlIHVzZWQgdG8KK2VubGFyZ2Ugb3Igc2hyaW5rIGFuIHVubW91bnRlZCBmaWxlIHN5c3RlbSBsb2NhdGVkIG9uCisuSVIgZGV2aWNlIC4KK0lmIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQsIGl0IGNhbiBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgc2l6ZSBvZiB0aGUKK21vdW50ZWQgZmlsZXN5c3RlbSwgYXNzdW1pbmcgdGhlIGtlcm5lbCBzdXBwb3J0cyBvbi1saW5lIHJlc2l6aW5nLiAgKEFzCitvZiB0aGlzIHdyaXRpbmcsIHRoZSBMaW51eCAyLjYga2VybmVsIHN1cHBvcnRzIG9uLWxpbmUgcmVzaXplIGZvcgorZmlsZXN5c3RlbXMgbW91bnRlZCB1c2luZyBleHQzIGFuZCBleHQ0LikuCisuUFAKK1RoZQorLkkgc2l6ZQorcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcmVxdWVzdGVkIG5ldyBzaXplIG9mIHRoZSBmaWxlc3lzdGVtLgorSWYgbm8gdW5pdHMgYXJlIHNwZWNpZmllZCwgdGhlIHVuaXRzIG9mIHRoZQorLkkgc2l6ZQorcGFyYW1ldGVyIHNoYWxsIGJlIHRoZSBmaWxlc3lzdGVtIGJsb2Nrc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4KK09wdGlvbmFsbHksIHRoZQorLkkgc2l6ZQorcGFyYW1ldGVyIG1heSBiZSBzdWZmaXhlZCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aGUgdW5pdHMKK2Rlc2lnbmF0b3JzOiAncycsICdLJywgJ00nLCBvciAnRycsCitmb3IgNTEyIGJ5dGUgc2VjdG9ycywga2lsb2J5dGVzLCBtZWdhYnl0ZXMsIG9yIGdpZ2FieXRlcywgcmVzcGVjdGl2ZWx5LgorVGhlCisuSSBzaXplCitvZiB0aGUgZmlsZXN5c3RlbSBtYXkgbmV2ZXIgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIHBhcnRpdGlvbi4KK0lmCisuSSBzaXplCitwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBzaXplIG9mIHRoZSBwYXJ0aXRpb24uCisuUFAKK05vdGU6IHdoZW4ga2lsb2J5dGVzIGlzIHVzZWQgYWJvdmUsIEkgbWVhbgorLklSIHJlYWwgLAorcG93ZXItb2YtMiBraWxvYnl0ZXMsIChpLmUuLCAxMDI0IGJ5dGVzKSwgd2hpY2ggc29tZSBwb2xpdGljYWxseSBjb3JyZWN0Citmb2xrcyBpbnNpc3Qgc2hvdWxkIGJlIHRoZSBzdHVwaWQtc291bmRpbmcgYGBraWJpYnl0ZXMnJy4gIFRoZSBzYW1lCitob2xkcyB0cnVlIGZvciBtZWdhYnl0ZXMsIGFsc28gc29tZXRpbWVzIGtub3duIGFzIGBgbWViaWJ5dGVzJycsIG9yCitnaWdhYnl0ZXMsIGFzIHRoZSBhbWF6aW5nbHkgc2lsbHkgYGBnaWJpYnl0ZXMnJy4gIE1ha2VzIHlvdSB3YW50IHRvCitnaWJiZXIsIGRvZXNuJ3QgaXQ/CisuUFAKK1RoZQorLkIgcmVzaXplMmZzCitwcm9ncmFtIGRvZXMgbm90IG1hbmlwdWxhdGUgdGhlIHNpemUgb2YgcGFydGl0aW9ucy4gIElmIHlvdSB3aXNoIHRvIGVubGFyZ2UKK2EgZmlsZXN5c3RlbSwgeW91IG11c3QgbWFrZSBzdXJlIHlvdSBjYW4gZXhwYW5kIHRoZSBzaXplIG9mIHRoZQordW5kZXJseWluZyBwYXJ0aXRpb24gZmlyc3QuICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nCisuQlIgZmRpc2sgKDgpCitieSBkZWxldGluZyB0aGUgcGFydGl0aW9uIGFuZCByZWNyZWF0aW5nIGl0IHdpdGggYSBsYXJnZXIgc2l6ZSBvciB1c2luZworLkJSIGx2ZXh0ZW5kICg4KSwKK2lmIHlvdSdyZSB1c2luZyB0aGUgbG9naWNhbCB2b2x1bWUgbWFuYWdlcgorLkJSIGx2bSAoOCkuCitXaGVuCityZWNyZWF0aW5nIHRoZSBwYXJ0aXRpb24sIG1ha2Ugc3VyZSB5b3UgY3JlYXRlIGl0IHdpdGggdGhlIHNhbWUgc3RhcnRpbmcKK2Rpc2sgY3lsaW5kZXIgYXMgYmVmb3JlISAgT3RoZXJ3aXNlLCB0aGUgcmVzaXplIG9wZXJhdGlvbiB3aWxsCitjZXJ0YWlubHkgbm90IHdvcmssIGFuZCB5b3UgbWF5IGxvc2UgeW91ciBlbnRpcmUgZmlsZXN5c3RlbS4KK0FmdGVyIHJ1bm5pbmcKKy5CUiBmZGlzayAoOCksCitydW4gcmVzaXplMmZzIHRvIHJlc2l6ZSB0aGUgZXh0MiBmaWxlc3lzdGVtCit0byB1c2UgYWxsIG9mIHRoZSBzcGFjZSBpbiB0aGUgbmV3bHkgZW5sYXJnZWQgcGFydGl0aW9uLgorLlBQCitJZiB5b3Ugd2lzaCB0byBzaHJpbmsgYW4gZXh0MiBwYXJ0aXRpb24sIGZpcnN0IHVzZQorLkIgcmVzaXplMmZzCit0byBzaHJpbmsgdGhlIHNpemUgb2YgZmlsZXN5c3RlbS4gIFRoZW4geW91IG1heSB1c2UKKy5CUiBmZGlzayAoOCkKK3RvIHNocmluayB0aGUgc2l6ZSBvZiB0aGUgcGFydGl0aW9uLiAgV2hlbiBzaHJpbmtpbmcgdGhlIHNpemUgb2YKK3RoZSBwYXJ0aXRpb24sIG1ha2Ugc3VyZSB5b3UgZG8gbm90IG1ha2UgaXQgc21hbGxlciB0aGFuIHRoZSBuZXcgc2l6ZQorb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSEKKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtZCBcZklkZWJ1Zy1mbGFncworVHVybnMgb24gdmFyaW91cyByZXNpemUyZnMgZGVidWdnaW5nIGZlYXR1cmVzLCBpZiB0aGV5IGhhdmUgYmVlbiBjb21waWxlZAoraW50byB0aGUgYmluYXJ5LgorLkkgZGVidWctZmxhZ3MKK3Nob3VsZCBiZSBjb21wdXRlZCBieSBhZGRpbmcgdGhlIG51bWJlcnMgb2YgdGhlIGRlc2lyZWQgZmVhdHVyZXMKK2Zyb20gdGhlIGZvbGxvd2luZyBsaXN0OgorLmJyCisJMglcLVwgRGVidWcgYmxvY2sgcmVsb2NhdGlvbnMKKy5icgorCTQJXC1cIERlYnVnIGlub2RlIHJlbG9jYXRpb25zCisuYnIKKwk4CVwtXCBEZWJ1ZyBtb3ZpbmcgdGhlIGlub2RlIHRhYmxlCisuYnIKKwkxNglcLVwgUHJpbnQgdGltaW5nIGluZm9ybWF0aW9uCisuYnIKKwkzMglcLVwgRGVidWcgbWluaW11bSBmaWxlc3lzdGVtIHNpemUgKFwtTSkgY2FsY3VsYXRpb24KKy5UUAorLkIgXC1mCitGb3JjZXMgcmVzaXplMmZzIHRvIHByb2NlZWQgd2l0aCB0aGUgZmlsZXN5c3RlbSByZXNpemUgb3BlcmF0aW9uLCBvdmVycmlkaW5nCitzb21lIHNhZmV0eSBjaGVja3Mgd2hpY2ggcmVzaXplMmZzIG5vcm1hbGx5IGVuZm9yY2VzLgorLlRQCisuQiBcLUYKK0ZsdXNoIHRoZSBmaWxlc3lzdGVtIGRldmljZSdzIGJ1ZmZlciBjYWNoZXMgYmVmb3JlIGJlZ2lubmluZy4gIE9ubHkKK3JlYWxseSB1c2VmdWwgZm9yIGRvaW5nCisuQiByZXNpemUyZnMKK3RpbWUgdHJpYWxzLgorLlRQCisuQiBcLU0KK1NocmluayB0aGUgZmlsZXN5c3RlbSB0byB0aGUgbWluaW11bSBzaXplLgorLlRQCisuQiBcLXAKK1ByaW50cyBvdXQgYSBwZXJjZW50YWdlIGNvbXBsZXRpb24gYmFycyBmb3IgZWFjaAorLkIgcmVzaXplMmZzCitvcGVyYXRpb24gZHVyaW5nIGFuIG9mZmxpbmUgcmVzaXplLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBrZWVwIHRyYWNrCitvZiB3aGF0IHRoZSBwcm9ncmFtIGlzIGRvaW5nLgorLlRQCisuQiBcLVAKK1ByaW50IHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIGV4aXQuCisuVFAKKy5CIFwtUyBcZklSQUlELXN0cmlkZQorVGhlCisuQiByZXNpemUyZnMKK3Byb2dyYW0gd2lsbCBoZXVyaXN0aWNhbGx5IGRldGVybWluZSB0aGUgUkFJRCBzdHJpZGUgdGhhdCB3YXMgc3BlY2lmaWVkCit3aGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkLiAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSB1c2VyIHRvCitleHBsaWNpdGx5IHNwZWNpZnkgYSBSQUlEIHN0cmlkZSBzZXR0aW5nIHRvIGJlIHVzZWQgYnkgcmVzaXplMmZzIGluc3RlYWQuCisuU0ggS05PV04gQlVHUworVGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSBhcyBlc3RpbWF0ZWQgYnkgcmVzaXplMmZzIG1heSBiZQoraW5jb3JyZWN0LCBlc3BlY2lhbGx5IGZvciBmaWxlc3lzdGVtcyB3aXRoIDFrIGFuZCAyayBibG9ja3NpemVzLgorLlNIIEFVVEhPUgorLkIgcmVzaXplMmZzCit3YXMgd3JpdHRlbiBieSBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1Pi4KKy5TSCBDT1BZUklHSFQKK1Jlc2l6ZTJmcyBpcyBDb3B5cmlnaHQgMTk5OCBieSBUaGVvZG9yZSBUcydvIGFuZCBQb3dlclF1ZXN0LCBJbmMuICBBbGwKK3JpZ2h0cyByZXNlcnZlZC4KK0FzIG9mIEFwcmlsLCAyMDAwCisuQiBSZXNpemUyZnMKK21heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMLgorLlNIIFNFRSBBTFNPCisuQlIgZmRpc2sgKDgpLAorLkJSIGUyZnNjayAoOCksCisuQlIgbWtlMmZzICg4KSwKKy5CUiBsdm0gKDgpLAorLkJSIGx2ZXh0ZW5kICg4KQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Jlc2l6ZS9yZXNpemUyZnMuYyBiL2UyZnNwcm9ncy9yZXNpemUvcmVzaXplMmZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1ZmY0YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvcmVzaXplMmZzLmMKQEAgLTAsMCArMSwyMjcyIEBACisvKgorICogcmVzaXplMmZzLmMgLS0tIGV4dDIgbWFpbiByb3V0aW5lCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBUaGVvc29yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisvKgorICogUmVzaXppbmcgYSBmaWxlc3lzdGVtIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgcGhhc2VzOgorICoKKyAqCTEuICBBZGp1c3Qgc3VwZXJibG9jayBhbmQgd3JpdGUgb3V0IG5ldyBwYXJ0cyBvZiB0aGUgaW5vZGUKKyAqIAkJdGFibGUKKyAqIAkyLiAgRGV0ZXJtaW5lIGJsb2NrcyB3aGljaCBuZWVkIHRvIGJlIHJlbG9jYXRlZCwgYW5kIGNvcHkgdGhlCisgKiAJCWNvbnRlbnRzIG9mIGJsb2NrcyBmcm9tIHRoZWlyIG9sZCBsb2NhdGlvbnMgdG8gdGhlIG5ldyBvbmVzLgorICogCTMuICBTY2FuIHRoZSBpbm9kZSB0YWJsZSwgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAqIAkJYS4gIElmIGJsb2NrcyBoYXZlIGJlZW4gbW92ZWQsIHVwZGF0ZSB0aGUgYmxvY2sKKyAqIAkJCXBvaW50ZXJzIGluIHRoZSBpbm9kZXMgYW5kIGluZGlyZWN0IGJsb2NrcyB0bworICogCQkJcG9pbnQgYXQgdGhlIG5ldyBibG9jayBsb2NhdGlvbnMuCisgKiAJCWIuICBJZiBwYXJ0cyBvZiB0aGUgaW5vZGUgdGFibGUgbmVlZCB0byBiZSBldmFjdWF0ZWQsCisgKiAJCQljb3B5IGlub2RlcyBmcm9tIHRoZWlyIG9sZCBsb2NhdGlvbnMgdG8gdGhlaXIKKyAqIAkJCW5ldyBvbmVzLgorICogCQljLiAgSWYgKGIpIG5lZWRzIHRvIGJlIGRvbmUsIG5vdGUgd2hpY2ggYmxvY2tzIGNvbnRhaW4KKyAqIAkJCWRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgc2luY2Ugd2Ugd2lsbCBuZWVkIHRvCisgKiAJCQl1cGRhdGUgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAqIAk0LiAgVXBkYXRlIHRoZSBkaXJlY3RvcnkgYmxvY2tzIHdpdGggdGhlIG5ldyBpbm9kZSBsb2NhdGlvbnMuCisgKiAJNS4gIE1vdmUgdGhlIGlub2RlIHRhYmxlcywgaWYgbmVjZXNzYXJ5LgorICovCisKKyNpbmNsdWRlICJyZXNpemUyZnMuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBfX2xpbnV4X18JCQkvKiBLbHVkZ2UgZm9yIGRlYnVnZ2luZyAqLworI2RlZmluZSBSRVNJWkUyRlNfREVCVUcKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBmaXhfdW5pbml0X2Jsb2NrX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMpOworc3RhdGljIGVycmNvZGVfdCBhZGp1c3Rfc3VwZXJibG9jayhleHQyX3Jlc2l6ZV90IHJmcywgYmxrNjRfdCBuZXdfc2l6ZSk7CitzdGF0aWMgZXJyY29kZV90IGJsb2Nrc190b19tb3ZlKGV4dDJfcmVzaXplX3QgcmZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgYmxvY2tfbW92ZXIoZXh0Ml9yZXNpemVfdCByZnMpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9zY2FuX2FuZF9maXgoZXh0Ml9yZXNpemVfdCByZnMpOworc3RhdGljIGVycmNvZGVfdCBpbm9kZV9yZWZfZml4KGV4dDJfcmVzaXplX3QgcmZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgbW92ZV9pdGFibGVzKGV4dDJfcmVzaXplX3QgcmZzKTsKK3N0YXRpYyBlcnJjb2RlX3QgZml4X3Jlc2l6ZV9pbm9kZShleHQyX2ZpbHN5cyBmcyk7CitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhleHQyX2ZpbHN5cyBmcyk7CitzdGF0aWMgZXJyY29kZV90IGZpeF9zYl9qb3VybmFsX2JhY2t1cChleHQyX2ZpbHN5cyBmcyk7CitzdGF0aWMgZXJyY29kZV90IG1hcmtfdGFibGVfYmxvY2tzKGV4dDJfZmlsc3lzIGZzLAorCQkJCSAgIGV4dDJmc19ibG9ja19iaXRtYXAgYm1hcCk7CisKKy8qCisgKiBTb21lIGhlbHBlciBDUFAgbWFjcm9zCisgKi8KKyNkZWZpbmUgSVNfQkxPQ0tfQk0oZnMsIGksIGJsaykgKChibGspID09IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKChmcyksKGkpKSkKKyNkZWZpbmUgSVNfSU5PREVfQk0oZnMsIGksIGJsaykgKChibGspID09IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKChmcyksKGkpKSkKKworI2RlZmluZSBJU19JTk9ERV9UQihmcywgaSwgYmxrKSAoKChibGspID49IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoKGZzKSwgKGkpKSkgJiYgXAorCQkJCSAoKGJsaykgPCAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYygoZnMpLCAoaSkpICsgXAorCQkJCQkgICAoZnMpLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSkpCisKKy8qIFNvbWUgYmlnYWxsb2MgaGVscGVyIG1hY3JvcyB3aGljaCBhcmUgbW9yZSBzdWNjaW50Li4uICovCisjZGVmaW5lIEIyQyh4KQlFWFQyRlNfQjJDKGZzLCAoeCkpCisjZGVmaW5lIEMyQih4KQlFWFQyRlNfQzJCKGZzLCAoeCkpCisjZGVmaW5lIEVRX0NMU1RSKHgsIHkpIChCMkMoeCkgPT0gQjJDKHkpKQorI2RlZmluZSBMRV9DTFNUUih4LCB5KSAoQjJDKHgpIDw9IEIyQyh5KSkKKyNkZWZpbmUgTFRfQ0xTVFIoeCwgeSkgKEIyQyh4KSA8ICBCMkMoeSkpCisjZGVmaW5lIEdFX0NMU1RSKHgsIHkpIChCMkMoeCkgPj0gQjJDKHkpKQorI2RlZmluZSBHVF9DTFNUUih4LCB5KSAoQjJDKHgpID4gIEIyQyh5KSkKKworc3RhdGljIGludCBsYXp5X2l0YWJsZV9pbml0OworCisvKgorICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHJvdXRpbmUgd2hpY2ggZG9lcyB0aGUgZGlydHkgZGVlZC4uLi4KKyAqLworZXJyY29kZV90IHJlc2l6ZV9mcyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqbmV3X3NpemUsIGludCBmbGFncywKKwkgICAgZXJyY29kZV90ICgqcHJvZ3Jlc3MpKGV4dDJfcmVzaXplX3QgcmZzLCBpbnQgcGFzcywKKwkJCQkJICB1bnNpZ25lZCBsb25nIGN1ciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG1heF92YWwpKQoreworCWV4dDJfcmVzaXplX3QJcmZzOworCWVycmNvZGVfdAlyZXR2YWw7CisJc3RydWN0IHJlc291cmNlX3RyYWNrCXJ0cmFjaywgb3ZlcmFsbF90cmFjazsKKworCS8qCisJICogQ3JlYXRlIHRoZSBkYXRhIHN0cnVjdHVyZQorCSAqLworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0KSwgJnJmcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW1lbXNldChyZnMsIDAsIHNpemVvZihzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0KSk7CisJZnMtPnByaXZfZGF0YSA9IHJmczsKKwlyZnMtPm9sZF9mcyA9IGZzOworCXJmcy0+ZmxhZ3MgPSBmbGFnczsKKwlyZnMtPml0YWJsZV9idWYJID0gMDsKKwlyZnMtPnByb2dyZXNzID0gcHJvZ3Jlc3M7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZvdmVyYWxsX3RyYWNrLCAib3ZlcmFsbCByZXNpemUyZnMiLCBmcy0+aW8pOworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgInJlYWRfYml0bWFwcyIsIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX3JlYWRfYml0bWFwcyhmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJZnMtPnN1cGVyLT5zX3N0YXRlIHw9IEVYVDJfRVJST1JfRlM7CisJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkoZnMpOworCWV4dDJmc19mbHVzaChmcyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfdW5pbml0X2Jsb2NrX2JpdG1hcHMgMSIsIGZzLT5pbyk7CisJZml4X3VuaW5pdF9ibG9ja19iaXRtYXBzKGZzKTsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX2R1cF9oYW5kbGUoZnMsICZyZnMtPm5ld19mcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJhZGp1c3Rfc3VwZXJibG9jayIsIGZzLT5pbyk7CisJcmV0dmFsID0gYWRqdXN0X3N1cGVyYmxvY2socmZzLCAqbmV3X3NpemUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXByaW50X3Jlc291cmNlX3RyYWNrKHJmcywgJnJ0cmFjaywgZnMtPmlvKTsKKworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiZml4X3VuaW5pdF9ibG9ja19iaXRtYXBzIDIiLCBmcy0+aW8pOworCWZpeF91bmluaXRfYmxvY2tfYml0bWFwcyhyZnMtPm5ld19mcyk7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCS8qIENsZWFyIHRoZSBibG9jayBiaXRtYXAgdW5pbml0IGZsYWcgZm9yIHRoZSBsYXN0IGJsb2NrIGdyb3VwICovCisJZXh0MmZzX2JnX2ZsYWdzX2NsZWFyKHJmcy0+bmV3X2ZzLCByZnMtPm5ld19mcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEsCisJCQkgICAgIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKworCSpuZXdfc2l6ZSA9IGV4dDJmc19ibG9ja3NfY291bnQocmZzLT5uZXdfZnMtPnN1cGVyKTsKKworCWluaXRfcmVzb3VyY2VfdHJhY2soJnJ0cmFjaywgImJsb2Nrc190b19tb3ZlIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBibG9ja3NfdG9fbW92ZShyZnMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCXByaW50X3Jlc291cmNlX3RyYWNrKHJmcywgJnJ0cmFjaywgZnMtPmlvKTsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChyZnMtPmZsYWdzICYgUkVTSVpFX0RFQlVHX0JNT1ZFKQorCQlwcmludGYoIk51bWJlciBvZiBmcmVlIGJsb2NrczogJWxsdS8lbGx1LCBOZWVkZWQ6ICVsbHVcbiIsCisJCSAgICAgICBleHQyZnNfZnJlZV9ibG9ja3NfY291bnQocmZzLT5vbGRfZnMtPnN1cGVyKSwKKwkJICAgICAgIGV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChyZnMtPm5ld19mcy0+c3VwZXIpLAorCQkgICAgICAgcmZzLT5uZWVkZWRfYmxvY2tzKTsKKyNlbmRpZgorCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiYmxvY2tfbW92ZXIiLCBmcy0+aW8pOworCXJldHZhbCA9IGJsb2NrX21vdmVyKHJmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAiaW5vZGVfc2Nhbl9hbmRfZml4IiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBpbm9kZV9zY2FuX2FuZF9maXgocmZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJpbm9kZV9yZWZfZml4IiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBpbm9kZV9yZWZfZml4KHJmcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJaW5pdF9yZXNvdXJjZV90cmFjaygmcnRyYWNrLCAibW92ZV9pdGFibGVzIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBtb3ZlX2l0YWJsZXMocmZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJjYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyIsIGZzLT5pbyk7CisJcmV0dmFsID0gZXh0MmZzX2NhbGN1bGF0ZV9zdW1tYXJ5X3N0YXRzKHJmcy0+bmV3X2ZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfcmVzaXplX2lub2RlIiwgZnMtPmlvKTsKKwlyZXR2YWwgPSBmaXhfcmVzaXplX2lub2RlKHJmcy0+bmV3X2ZzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm91dDsKKwlwcmludF9yZXNvdXJjZV90cmFjayhyZnMsICZydHJhY2ssIGZzLT5pbyk7CisKKwlpbml0X3Jlc291cmNlX3RyYWNrKCZydHJhY2ssICJmaXhfc2Jfam91cm5hbF9iYWNrdXAiLCBmcy0+aW8pOworCXJldHZhbCA9IGZpeF9zYl9qb3VybmFsX2JhY2t1cChyZnMtPm5ld19mcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmcnRyYWNrLCBmcy0+aW8pOworCisJcmZzLT5uZXdfZnMtPnN1cGVyLT5zX3N0YXRlICY9IH5FWFQyX0VSUk9SX0ZTOworCXJmcy0+bmV3X2ZzLT5mbGFncyAmPSB+RVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCisJcHJpbnRfcmVzb3VyY2VfdHJhY2socmZzLCAmb3ZlcmFsbF90cmFjaywgZnMtPmlvKTsKKwlyZXR2YWwgPSBleHQyZnNfY2xvc2UocmZzLT5uZXdfZnMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJcmZzLT5mbGFncyA9IGZsYWdzOworCisJZXh0MmZzX2ZyZWUocmZzLT5vbGRfZnMpOworCWlmIChyZnMtPml0YWJsZV9idWYpCisJCWV4dDJmc19mcmVlX21lbSgmcmZzLT5pdGFibGVfYnVmKTsKKwlpZiAocmZzLT5yZXNlcnZlX2Jsb2NrcykKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKHJmcy0+cmVzZXJ2ZV9ibG9ja3MpOworCWlmIChyZnMtPm1vdmVfYmxvY2tzKQorCQlleHQyZnNfZnJlZV9ibG9ja19iaXRtYXAocmZzLT5tb3ZlX2Jsb2Nrcyk7CisJZXh0MmZzX2ZyZWVfbWVtKCZyZnMpOworCisJcmV0dXJuIDA7CisKK2Vycm91dDoKKwlpZiAocmZzLT5uZXdfZnMpCisJCWV4dDJmc19mcmVlKHJmcy0+bmV3X2ZzKTsKKwlpZiAocmZzLT5pdGFibGVfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJnJmcy0+aXRhYmxlX2J1Zik7CisJZXh0MmZzX2ZyZWVfbWVtKCZyZnMpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDbGVhbiB1cCB0aGUgYml0bWFwcyBmb3IgdW5pdGlhbGl6ZWQgYml0bWFwcworICovCitzdGF0aWMgdm9pZCBmaXhfdW5pbml0X2Jsb2NrX2JpdG1hcHMoZXh0Ml9maWxzeXMgZnMpCit7CisJYmxrNjRfdAkJYmxrLCBsYmxrOworCWRncnBfdAkJZzsKKwlpbnQJCWk7CisKKwlpZiAoIShFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkpCisJCXJldHVybjsKKworCWZvciAoZz0wOyBnIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGcrKykgeworCQlpZiAoIShleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZywgRVhUMl9CR19CTE9DS19VTklOSVQpKSkKKwkJCWNvbnRpbnVlOworCisJCWJsayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsIGcpOworCQlsYmxrID0gZXh0MmZzX2dyb3VwX2xhc3RfYmxvY2syKGZzLCBnKTsKKwkJZXh0MmZzX3VubWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGZzLT5ibG9ja19tYXAsIGJsaywKKwkJCQkJCSAgbGJsayAtIGJsayArIDEpOworCisJCWV4dDJmc19yZXNlcnZlX3N1cGVyX2FuZF9iZ2QoZnMsIGcsIGZzLT5ibG9ja19tYXApOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsCisJCQkJCSAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGcpKTsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLAorCQkJCQkgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBnKSk7CisJCWZvciAoaSA9IDAsIGJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGcpOworCQkgICAgIGkgPCAodW5zaWduZWQgaW50KSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJICAgICBpKyssIGJsaysrKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZXNpemUgcHJvY2Vzc2luZywgcGhhc2UgMS4KKyAqCisgKiBJbiB0aGlzIHBoYXNlIHdlIGFkanVzdCB0aGUgaW4tbWVtb3J5IHN1cGVyYmxvY2sgaW5mb3JtYXRpb24sIGFuZAorICogaW5pdGlhbGl6ZSBhbnkgbmV3IHBhcnRzIG9mIHRoZSBpbm9kZSB0YWJsZS4gIFRoZSBuZXcgcGFydHMgb2YgdGhlCisgKiBpbm9kZSB0YWJsZSBhcmUgY3JlYXRlZCBpbiB2aXJnaW4gZGlzayBzcGFjZSwgc28gd2UgY2FuIGFib3J0IGhlcmUKKyAqIHdpdGhvdXQgYW55IHNpZGUgZWZmZWN0cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIElmIHRoZSBncm91cCBkZXNjcmlwdG9yJ3MgYml0bWFwIGFuZCBpbm9kZSB0YWJsZSBibG9ja3MgYXJlIHZhbGlkLAorICogcmVsZWFzZSB0aGVtIGluIHRoZSBuZXcgZmlsZXN5c3RlbSBkYXRhIHN0cnVjdHVyZSwgYW5kIG1hcmsgdGhlbSBhcworICogcmVzZXJ2ZWQgc28gdGhlIG9sZCBpbm9kZSB0YWJsZSBibG9ja3MgZG9uJ3QgZ2V0IG92ZXJ3cml0dGVuLgorICovCitzdGF0aWMgdm9pZCBmcmVlX2dkcF9ibG9ja3MoZXh0Ml9maWxzeXMgZnMsCisJCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCByZXNlcnZlX2Jsb2NrcywKKwkJCSAgICBleHQyX2ZpbHN5cyBvbGRfZnMsCisJCQkgICAgZGdycF90IGdyb3VwKQoreworCWJsazY0X3QJYmxrOworCWludAlqOworCisJYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Mob2xkX2ZzLCBncm91cCk7CisJaWYgKGJsayAmJgorCSAgICAoYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkgeworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssIC0xKTsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZXNlcnZlX2Jsb2NrcywgYmxrKTsKKwl9CisKKwlibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhvbGRfZnMsIGdyb3VwKTsKKwlpZiAoYmxrICYmCisJICAgIChibGsgPCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpKSB7CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgLTEpOworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJlc2VydmVfYmxvY2tzLCBibGspOworCX0KKworCWJsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2Mob2xkX2ZzLCBncm91cCk7CisJaWYgKGJsayA9PSAwIHx8CisJICAgIChibGsgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKSkKKwkJcmV0dXJuOworCisJZm9yIChqID0gMDsKKwkgICAgIGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsgaisrLCBibGsrKykgeworCQlpZiAoYmxrID49IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJCWJyZWFrOworCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssIC0xKTsKKwkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZXNlcnZlX2Jsb2NrcywgYmxrKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgc2hhcmVkIGJ5IHRoZSBvbmxpbmUgYW5kIG9mZmxpbmUgcmVzaXplIHJvdXRpbmVzLgorICogQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3aGljaCBpcyBhZGp1c3RlZCBpbiBtZW1vcnkgaXMgZG9uZSBoZXJlLgorICovCitlcnJjb2RlX3QgYWRqdXN0X2ZzX2luZm8oZXh0Ml9maWxzeXMgZnMsIGV4dDJfZmlsc3lzIG9sZF9mcywKKwkJCSBleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmVfYmxvY2tzLCBibGs2NF90IG5ld19zaXplKQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJb3ZlcmhlYWQgPSAwOworCWJsazY0X3QJCXJlbTsKKwlibGs2NF90CQlibGssIGdyb3VwX2Jsb2NrOworCWJsazY0X3QJCXJlYWxfZW5kOworCWJsazY0X3QJCW9sZF9udW1ibG9ja3MsIG51bWJsb2NrcywgYWRqYmxvY2tzOworCXVuc2lnbmVkIGxvbmcJaSwgaiwgb2xkX2Rlc2NfYmxvY2tzOworCXVuc2lnbmVkIGludAltZXRhX2JnLCBtZXRhX2JnX3NpemU7CisJaW50CQloYXNfc3VwZXIsIGNzdW1fZmxhZzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbmV3X2lub2RlczsJLyogdTY0IHRvIGNoZWNrIGZvciBvdmVyZmxvdyAqLworCWRvdWJsZQkJcGVyY2VudDsKKworCWV4dDJmc19ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwgbmV3X3NpemUpOworCityZXRyeToKKwlmcy0+Z3JvdXBfZGVzY19jb3VudCA9IGV4dDJmc19kaXY2NF9jZWlsKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJICAgICAgIGZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrLAorCQkJCSAgICAgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSk7CisJaWYgKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDApCisJCXJldHVybiBFWFQyX0VUX1RPT1NNQUxMOworCWZzLT5kZXNjX2Jsb2NrcyA9IGV4dDJmc19kaXZfY2VpbChmcy0+Z3JvdXBfZGVzY19jb3VudCwKKwkJCQkJICBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcikpOworCisJLyoKKwkgKiBPdmVyaGVhZCBpcyB0aGUgbnVtYmVyIG9mIGJvb2trZWVwaW5nIGJsb2NrcyBwZXIgZ3JvdXAuICBJdAorCSAqIGluY2x1ZGVzIHRoZSBzdXBlcmJsb2NrIGJhY2t1cCwgdGhlIGdyb3VwIGRlc2NyaXB0b3IKKwkgKiBiYWNrdXBzLCB0aGUgaW5vZGUgYml0bWFwLCB0aGUgYmxvY2sgYml0bWFwLCBhbmQgdGhlIGlub2RlCisJICogdGFibGUuCisJICovCisJb3ZlcmhlYWQgPSAoaW50KSAoMiArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKworCWlmIChleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBmcy0+Z3JvdXBfZGVzY19jb3VudCAtIDEpKQorCQlvdmVyaGVhZCArPSAxICsgZnMtPmRlc2NfYmxvY2tzICsKKwkJCWZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisJLyoKKwkgKiBTZWUgaWYgdGhlIGxhc3QgZ3JvdXAgaXMgYmlnIGVub3VnaCB0byBzdXBwb3J0IHRoZQorCSAqIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHVyZXMuICBJZiBub3QsIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgorCSAqIGl0LgorCSAqLworCXJlbSA9IChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJQorCQlmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoKGZzLT5ncm91cF9kZXNjX2NvdW50ID09IDEpICYmIHJlbSAmJiAocmVtIDwgb3ZlcmhlYWQpKQorCQlyZXR1cm4gRVhUMl9FVF9UT09TTUFMTDsKKwlpZiAoKGZzLT5ncm91cF9kZXNjX2NvdW50ID4gMSkgJiYgcmVtICYmIChyZW0gPCBvdmVyaGVhZCs1MCkpIHsKKwkJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQoZnMtPnN1cGVyLAorCQkJCQlleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSByZW0pOworCQlnb3RvIHJldHJ5OworCX0KKwkvKgorCSAqIEFkanVzdCB0aGUgbnVtYmVyIG9mIGlub2RlcworCSAqLworCW5ld19pbm9kZXMgPSh1bnNpZ25lZCBsb25nIGxvbmcpIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwICogZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKG5ld19pbm9kZXMgPiB+MFUpIHsKKwkJZnByaW50ZihzdGRlcnIsIF8oImlub2RlcyAoJWxsdSkgbXVzdCBiZSBsZXNzIHRoYW4gJXUiKSwKKwkJCQkgICBuZXdfaW5vZGVzLCB+MFUpOworCQlyZXR1cm4gRVhUMl9FVF9UT09fTUFOWV9JTk9ERVM7CisJfQorCWZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgPSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCAqCisJCWZzLT5ncm91cF9kZXNjX2NvdW50OworCisJLyoKKwkgKiBBZGp1c3QgdGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcworCSAqLworCWJsayA9IGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7CisJaWYgKGJsayA+IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIAorCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJKGJsayAtIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSkpOworCWVsc2UKKwkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIAorCQkJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgKworCQkJKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtIGJsaykpOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIG51bWJlciBvZiByZXNlcnZlZCBibG9ja3MKKwkgKi8KKwlwZXJjZW50ID0gKGV4dDJmc19yX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKSAqIDEwMC4wKSAvCisJCWV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcik7CisJZXh0MmZzX3JfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsCisJCQkJICAocGVyY2VudCAqIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAvCisJCQkJICAgMTAwLjApKTsKKworCS8qCisJICogQWRqdXN0IHRoZSBiaXRtYXBzIGZvciBzaXplCisJICovCisJcmV0dmFsID0gZXh0MmZzX3Jlc2l6ZV9pbm9kZV9iaXRtYXAyKGZzLT5zdXBlci0+c19pbm9kZXNfY291bnQsCisJCQkJCSAgICBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50LAorCQkJCQkgICAgZnMtPmlub2RlX21hcCk7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlyZWFsX2VuZCA9ICgoKGJsazY0X3QpIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpICoKKwkJICAgICBmcy0+Z3JvdXBfZGVzY19jb3VudCkpIC0gMSArCisJCWZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCXJldHZhbCA9IGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMihuZXdfc2l6ZSAtIDEsCisJCQkJCSAgICAgcmVhbF9lbmQsIGZzLT5ibG9ja19tYXApOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZ3Jvd2luZyB0aGUgZmlsZSBzeXN0ZW0sIGFsc28gZ3JvdyB0aGUgc2l6ZSBvZgorCSAqIHRoZSByZXNlcnZlX2Jsb2NrcyBiaXRtYXAKKwkgKi8KKwlpZiAocmVzZXJ2ZV9ibG9ja3MgJiYgbmV3X3NpemUgPiBleHQyZnNfYmxvY2tzX2NvdW50KG9sZF9mcy0+c3VwZXIpKSB7CisJCXJldHZhbCA9IGV4dDJmc19yZXNpemVfYmxvY2tfYml0bWFwMihuZXdfc2l6ZSAtIDEsCisJCQkJCQkgICAgIHJlYWxfZW5kLCByZXNlcnZlX2Jsb2Nrcyk7CisJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogUmVhbGxvY2F0ZSB0aGUgZ3JvdXAgZGVzY3JpcHRvcnMgYXMgbmVjZXNzYXJ5LgorCSAqLworCWlmIChvbGRfZnMtPmRlc2NfYmxvY2tzICE9IGZzLT5kZXNjX2Jsb2NrcykgeworCQlyZXR2YWwgPSBleHQyZnNfcmVzaXplX21lbShvbGRfZnMtPmRlc2NfYmxvY2tzICoKKwkJCQkJICAgZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJICAgZnMtPmRlc2NfYmxvY2tzICogZnMtPmJsb2Nrc2l6ZSwKKwkJCQkJICAgJmZzLT5ncm91cF9kZXNjKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCQlpZiAoZnMtPmRlc2NfYmxvY2tzID4gb2xkX2ZzLT5kZXNjX2Jsb2NrcykKKwkJCW1lbXNldCgoY2hhciAqKSBmcy0+Z3JvdXBfZGVzYyArCisJCQkgICAgICAgKG9sZF9mcy0+ZGVzY19ibG9ja3MgKiBmcy0+YmxvY2tzaXplKSwgMCwKKwkJCSAgICAgICAoZnMtPmRlc2NfYmxvY2tzIC0gb2xkX2ZzLT5kZXNjX2Jsb2NrcykgKgorCQkJICAgICAgIGZzLT5ibG9ja3NpemUpOworCX0KKworCS8qCisJICogSWYgdGhlIHJlc2l6ZV9pbm9kZSBmZWF0dXJlIGlzIHNldCwgYW5kIHdlIGFyZSBjaGFuZ2luZyB0aGUKKwkgKiBudW1iZXIgb2YgZGVzY3JpcHRvciBibG9ja3MsIHRoZW4gYWRqdXN0CisJICogc19yZXNlcnZlZF9nZHRfYmxvY2tzIGlmIHBvc3NpYmxlIHRvIGF2b2lkIG5lZWRpbmcgdG8gbW92ZQorCSAqIHRoZSBpbm9kZSB0YWJsZSBlaXRoZXIgbm93IG9yIGluIHRoZSBmdXR1cmUuCisJICovCisJaWYgKChmcy0+c3VwZXItPnNfZmVhdHVyZV9jb21wYXQgJgorCSAgICAgRVhUMl9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpICYmCisJICAgIChvbGRfZnMtPmRlc2NfYmxvY2tzICE9IGZzLT5kZXNjX2Jsb2NrcykpIHsKKwkJaW50IG5ldzsKKworCQluZXcgPSAoKGludCkgZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3MpICsKKwkJCShvbGRfZnMtPmRlc2NfYmxvY2tzIC0gZnMtPmRlc2NfYmxvY2tzKTsKKwkJaWYgKG5ldyA8IDApCisJCQluZXcgPSAwOworCQlpZiAobmV3ID4gKGludCkgZnMtPmJsb2Nrc2l6ZS80KQorCQkJbmV3ID0gZnMtPmJsb2Nrc2l6ZS80OworCQlmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyA9IG5ldzsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBzaHJpbmtpbmcgdGhlIG51bWJlciBvZiBibG9jayBncm91cHMsIHdlJ3JlIGRvbmUKKwkgKiBhbmQgY2FuIGV4aXQgbm93LgorCSAqLworCWlmIChvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgPiBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQkvKgorCQkgKiBDaGVjayB0aGUgYmxvY2sgZ3JvdXBzIHRoYXQgd2UgYXJlIGNob3BwaW5nIG9mZgorCQkgKiBhbmQgZnJlZSBhbnkgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBtZXRhZGF0YQorCQkgKi8KKwkJZm9yIChpID0gZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJCSAgICAgaSA8IG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudDsgaSsrKQorCQkJZnJlZV9nZHBfYmxvY2tzKGZzLCByZXNlcnZlX2Jsb2Nrcywgb2xkX2ZzLCBpKTsKKwkJcmV0dmFsID0gMDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJLyoKKwkgKiBGaXggdGhlIGNvdW50IG9mIHRoZSBsYXN0IChvbGQpIGJsb2NrIGdyb3VwCisJICovCisJb2xkX251bWJsb2NrcyA9IChleHQyZnNfYmxvY2tzX2NvdW50KG9sZF9mcy0+c3VwZXIpIC0KKwkJCSBvbGRfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spICUKKwkJCQkgb2xkX2ZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCWlmICghb2xkX251bWJsb2NrcykKKwkJb2xkX251bWJsb2NrcyA9IG9sZF9mcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAob2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50ID09IGZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCW51bWJsb2NrcyA9IChleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLQorCQkJICAgICBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jaykgJQorCQkJZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJCWlmICghbnVtYmxvY2tzKQorCQkJbnVtYmxvY2tzID0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfSBlbHNlCisJCW51bWJsb2NrcyA9IGZzLT5zdXBlci0+c19ibG9ja3NfcGVyX2dyb3VwOworCWkgPSBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQgLSAxOworCWV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudF9zZXQoZnMsIGksIGV4dDJmc19iZ19mcmVlX2Jsb2Nrc19jb3VudChmcywgaSkgKyAobnVtYmxvY2tzIC0gb2xkX251bWJsb2NrcykpOworCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKworCS8qCisJICogSWYgdGhlIG51bWJlciBvZiBibG9jayBncm91cHMgaXMgc3RheWluZyB0aGUgc2FtZSwgd2UncmUKKwkgKiBkb25lIGFuZCBjYW4gZXhpdCBub3cuICAoSWYgdGhlIG51bWJlciBibG9jayBncm91cHMgaXMKKwkgKiBzaHJpbmtpbmcsIHdlIGhhZCBleGl0ZWQgZWFybGllci4pCisJICovCisJaWYgKG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA+PSBmcy0+Z3JvdXBfZGVzY19jb3VudCkgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIG5ldyBibG9jayBncm91cCBkZXNjcmlwdG9ycworCSAqLworCWdyb3VwX2Jsb2NrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywKKwkJCQkJCW9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJY3N1bV9mbGFnID0gRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSk7CisJaWYgKGFjY2VzcygiL3N5cy9mcy9leHQ0L2ZlYXR1cmVzL2xhenlfaXRhYmxlX2luaXQiLCBGX09LKSA9PSAwKQorCQlsYXp5X2l0YWJsZV9pbml0ID0gMTsKKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CisJZWxzZQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3MgKworCQkJZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisKKwkvKgorCSAqIElmIHdlIGNoYW5nZWQgdGhlIG51bWJlciBvZiBibG9ja19ncm91cCBkZXNjcmlwdG9yIGJsb2NrcywKKwkgKiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBhbGwgbWFya2VkIGFzIHJlc2VydmVkIGluIHRoZQorCSAqIGZpbGUgc3lzdGVtcydzIGJsb2NrIGFsbG9jYXRpb24gbWFwLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykKKwkJZXh0MmZzX3Jlc2VydmVfc3VwZXJfYW5kX2JnZChmcywgaSwgZnMtPmJsb2NrX21hcCk7CisKKwlmb3IgKGkgPSBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJICAgICBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQltZW1zZXQoZXh0MmZzX2dyb3VwX2Rlc2MoZnMsIGZzLT5ncm91cF9kZXNjLCBpKSwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSk7CisJCWFkamJsb2NrcyA9IDA7CisKKwkJZXh0MmZzX2JnX2ZsYWdzX3phcChmcywgaSk7CisJCWlmIChjc3VtX2ZsYWcpIHsKKwkJCWV4dDJmc19iZ19mbGFnc19zZXQoZnMsIGksIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJCWlmICghbGF6eV9pdGFibGVfaW5pdCkKKwkJCQlleHQyZnNfYmdfZmxhZ3Nfc2V0KGZzLCBpLAorCQkJCQkJICAgIEVYVDJfQkdfSU5PREVfWkVST0VEKTsKKwkJCWV4dDJmc19iZ19pdGFibGVfdW51c2VkX3NldChmcywgaSwKKwkJCQkJZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCQl9CisKKwkJbnVtYmxvY2tzID0gZXh0MmZzX2dyb3VwX2Jsb2Nrc19jb3VudChmcywgaSk7CisJCWlmICgoaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50IC0gMSkgJiYgY3N1bV9mbGFnKQorCQkJZXh0MmZzX2JnX2ZsYWdzX3NldChmcywgaSwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCisJCWhhc19zdXBlciA9IGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpOworCQlpZiAoaGFzX3N1cGVyKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBncm91cF9ibG9jaywgKzEpOworCQkJYWRqYmxvY2tzKys7CisJCX0KKwkJbWV0YV9iZ19zaXplID0gRVhUMl9ERVNDX1BFUl9CTE9DSyhmcy0+c3VwZXIpOworCQltZXRhX2JnID0gaSAvIG1ldGFfYmdfc2l6ZTsKKwkJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQkgICAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgfHwKKwkJICAgIChtZXRhX2JnIDwgZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcpKSB7CisJCQlpZiAoaGFzX3N1cGVyKSB7CisJCQkJZm9yIChqPTA7IGogPCBvbGRfZGVzY19ibG9ja3M7IGorKykKKwkJCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywKKwkJCQkJCSBncm91cF9ibG9jayArIDEgKyBqLCArMSk7CisJCQkJYWRqYmxvY2tzICs9IG9sZF9kZXNjX2Jsb2NrczsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChoYXNfc3VwZXIpCisJCQkJaGFzX3N1cGVyID0gMTsKKwkJCWlmICgoKGkgJSBtZXRhX2JnX3NpemUpID09IDApIHx8CisJCQkgICAgKChpICUgbWV0YV9iZ19zaXplKSA9PSAxKSB8fAorCQkJICAgICgoaSAlIG1ldGFfYmdfc2l6ZSkgPT0gKG1ldGFfYmdfc2l6ZS0xKSkpCisJCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywKKwkJCQkJCSBncm91cF9ibG9jayArIGhhc19zdXBlciwgKzEpOworCQl9CisKKwkJYWRqYmxvY2tzICs9IDIgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKworCQludW1ibG9ja3MgLT0gYWRqYmxvY2tzOworCQlleHQyZnNfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLT5zdXBlciwKKwkJCSAgICAgZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikgLSBhZGpibG9ja3MpOworCQlmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQgKz0KKwkJCWZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwOworCQlleHQyZnNfYmdfZnJlZV9ibG9ja3NfY291bnRfc2V0KGZzLCBpLCBudW1ibG9ja3MpOworCQlleHQyZnNfYmdfZnJlZV9pbm9kZXNfY291bnRfc2V0KGZzLCBpLAorCQkJCQkJZnMtPnN1cGVyLT5zX2lub2Rlc19wZXJfZ3JvdXApOworCQlleHQyZnNfYmdfdXNlZF9kaXJzX2NvdW50X3NldChmcywgaSwgMCk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBpKTsKKworCQlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoZnMsIGksIDApOworCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworCQlncm91cF9ibG9jayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwl9CisJcmV0dmFsID0gMDsKKworCS8qCisJICogTWFyayBhbGwgb2YgdGhlIG1ldGFkYXRhIGJsb2NrcyBhcyByZXNlcnZlZCBzbyB0aGV5IHdvbid0CisJICogZ2V0IGFsbG9jYXRlZCBieSB0aGUgY2FsbCB0byBleHQyZnNfYWxsb2NhdGVfZ3JvdXBfdGFibGUoKQorCSAqIGluIGJsb2Nrc190b19tb3ZlKCksIHdoZXJlIHdlIGFsbG9jYXRlIG5ldyBibG9ja3MgdG8KKwkgKiByZXBsYWNlIHRob3NlIGFsbG9jYXRpb24gYml0bWFwIGFuZCBpbm9kZSB0YWJsZSBibG9ja3MKKwkgKiB3aGljaCBoYXZlIHRvIGdldCByZWxvY2F0ZWQgdG8gbWFrZSBzcGFjZSBmb3IgYW4gaW5jcmVhc2VkCisJICogbnVtYmVyIG9mIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycy4KKwkgKi8KKwlpZiAocmVzZXJ2ZV9ibG9ja3MpCisJCW1hcmtfdGFibGVfYmxvY2tzKGZzLCByZXNlcnZlX2Jsb2Nrcyk7CisKK2Vycm91dDoKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgYWRqdXN0cyB0aGUgc3VwZXJibG9jayBhbmQgb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzLCBib3RoCisgKiBpbiBkaXNrIGFzIHdlbGwgYXMgaW4gbWVtb3J5Li4uCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgYWRqdXN0X3N1cGVyYmxvY2soZXh0Ml9yZXNpemVfdCByZnMsIGJsazY0X3QgbmV3X3NpemUpCit7CisJZXh0Ml9maWxzeXMgZnM7CisJaW50CQlhZGogPSAwOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJZ3JvdXBfYmxvY2s7CisJdW5zaWduZWQgbG9uZwlpOworCXVuc2lnbmVkIGxvbmcJbWF4X2dyb3VwOworCisJZnMgPSByZnMtPm5ld19mczsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJZXh0MmZzX21hcmtfYmJfZGlydHkoZnMpOworCWV4dDJmc19tYXJrX2liX2RpcnR5KGZzKTsKKworCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ibG9ja19iaXRtYXAoZnMsIF8oInJlc2VydmVkIGJsb2NrcyIpLAorCQkJCQkgICAgICAmcmZzLT5yZXNlcnZlX2Jsb2Nrcyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IGFkanVzdF9mc19pbmZvKGZzLCByZnMtPm9sZF9mcywgcmZzLT5yZXNlcnZlX2Jsb2NrcywgbmV3X3NpemUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJLyoKKwkgKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIGVub3VnaCBpbm9kZXMKKwkgKi8KKwlpZiAoKHJmcy0+b2xkX2ZzLT5zdXBlci0+c19pbm9kZXNfY291bnQgLQorCSAgICAgcmZzLT5vbGRfZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50KSA+CisJICAgIHJmcy0+bmV3X2ZzLT5zdXBlci0+c19pbm9kZXNfY291bnQpIHsKKwkJcmV0dmFsID0gRU5PU1BDOworCQlnb3RvIGVycm91dDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBzaHJpbmtpbmcgdGhlIG51bWJlciBibG9jayBncm91cHMsIHdlJ3JlIGRvbmUgYW5kCisJICogY2FuIGV4aXQgbm93LgorCSAqLworCWlmIChyZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA+IGZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogSWYgdGhlIG51bWJlciBvZiBibG9jayBncm91cHMgaXMgc3RheWluZyB0aGUgc2FtZSwgd2UncmUKKwkgKiBkb25lIGFuZCBjYW4gZXhpdCBub3cuICAoSWYgdGhlIG51bWJlciBibG9jayBncm91cHMgaXMKKwkgKiBzaHJpbmtpbmcsIHdlIGhhZCBleGl0ZWQgZWFybGllci4pCisJICovCisJaWYgKHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50ID49IGZzLT5ncm91cF9kZXNjX2NvdW50KSB7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogSWYgd2UgYXJlIHVzaW5nIHVuaW5pdF9iZyAoYWthIEdEVF9DU1VNKSBhbmQgdGhlIGtlcm5lbAorCSAqIHN1cHBvcnRzIGxhenkgaW5vZGUgaW5pdGlhbGl6YXRpb24sIHdlIGNhbiBza2lwCisJICogaW5pdGlhbGl6aW5nIHRoZSBpbm9kZSB0YWJsZS4KKwkgKi8KKwlpZiAobGF6eV9pdGFibGVfaW5pdCAmJgorCSAgICBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pKSB7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgaW5vZGUgdGFibGUKKwkgKi8KKwlyZXR2YWwgPSBleHQyZnNfZ2V0X2FycmF5KGZzLT5ibG9ja3NpemUsIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLAorCQkJCSZyZnMtPml0YWJsZV9idWYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCisJbWVtc2V0KHJmcy0+aXRhYmxlX2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSAqIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKwlncm91cF9ibG9jayA9IGV4dDJmc19ncm91cF9maXJzdF9ibG9jazIoZnMsCisJCQkJCQlyZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCk7CisJYWRqID0gcmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJbWF4X2dyb3VwID0gZnMtPmdyb3VwX2Rlc2NfY291bnQgLSBhZGo7CisJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJcmV0dmFsID0gcmZzLT5wcm9ncmVzcyhyZnMsIEUyX1JTWl9FWFRFTkRfSVRBQkxFX1BBU1MsCisJCQkJICAgICAgIDAsIG1heF9ncm91cCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisJZm9yIChpID0gcmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJICAgICBpIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGkrKykgeworCQkvKgorCQkgKiBXcml0ZSBvdXQgdGhlIG5ldyBpbm9kZSB0YWJsZQorCQkgKi8KKwkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sCisJCQkJCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSwKKwkJCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLAorCQkJCQkJcmZzLT5pdGFibGVfYnVmKTsKKwkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwkJaW9fY2hhbm5lbF9mbHVzaChmcy0+aW8pOworCQlpZiAocmZzLT5wcm9ncmVzcykgeworCQkJcmV0dmFsID0gcmZzLT5wcm9ncmVzcyhyZnMsIEUyX1JTWl9FWFRFTkRfSVRBQkxFX1BBU1MsCisJCQkJCSAgICAgICBpIC0gYWRqICsgMSwgbWF4X2dyb3VwKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJZ3JvdXBfYmxvY2sgKz0gZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfQorCWlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKKwlyZXR2YWwgPSAwOworCitlcnJvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZXNpemUgcHJvY2Vzc2luZywgcGhhc2UgMi4KKyAqCisgKiBJbiB0aGlzIHBoYXNlIHdlIGFkanVzdCBkZXRlcm1pbmUgd2hpY2ggYmxvY2tzIG5lZWQgdG8gYmUgbW92ZWQsIGluCisgKiBibG9ja3NfdG9fbW92ZSgpLiAgV2UgdGhlbiBjb3B5IHRoZSBibG9ja3MgdG8gdGhlaXIgdWx0aW1hdGUgbmV3CisgKiBkZXN0aW5hdGlvbnMgdXNpbmcgYmxvY2tfbW92ZXIoKS4gIFNpbmNlIHdlIGFyZSBjb3B5aW5nIGJsb2NrcyB0bworICogdGhlaXIgbmV3IGxvY2F0aW9ucywgYWdhaW4gZHVyaW5nIHRoaXMgcGFzcyB3ZSBjYW4gYWJvcnQgd2l0aG91dAorICogYW55IHByb2JsZW1zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyBhIGJsb2NrIGJpdG1hcCB3aXRoIGFsbCBvZiB0aGUKKyAqIGZpbGVzeXN0ZW0gbWV0YS1kYXRhIGJsb2Nrcy4KKyAqLworc3RhdGljIGVycmNvZGVfdCBtYXJrX3RhYmxlX2Jsb2NrcyhleHQyX2ZpbHN5cyBmcywKKwkJCQkgICBleHQyZnNfYmxvY2tfYml0bWFwIGJtYXApCit7CisJZGdycF90CQkJaTsKKwlibGs2NF90CQkJYmxrOworCisJZm9yIChpID0gMDsgaSA8IGZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJZXh0MmZzX3Jlc2VydmVfc3VwZXJfYW5kX2JnZChmcywgaSwgYm1hcCk7CisKKwkJLyoKKwkJICogTWFyayB0aGUgYmxvY2tzIHVzZWQgZm9yIHRoZSBpbm9kZSB0YWJsZQorCQkgKi8KKwkJYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCWlmIChibGspCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKGJtYXAsIGJsaywKKwkJCQkJCWZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBibG9jayBiaXRtYXAKKwkJICovCisJCWJsayA9IGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsaykKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKTsKKworCQkvKgorCQkgKiBNYXJrIGJsb2NrIHVzZWQgZm9yIHRoZSBpbm9kZSBiaXRtYXAKKwkJICovCisJCWJsayA9IGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKTsKKwkJaWYgKGJsaykKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIoYm1hcCwgYmxrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIGJsb2NrIChlaXRoZXIgYQorICogc3VwZXJibG9jayBvciBhIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IpIG92ZXJsYXBzIHdpdGggYW4gaW5vZGUgb3IKKyAqIGJsb2NrIGJpdG1hcCBibG9jaywgb3Igd2l0aCB0aGUgaW5vZGUgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfZnNfbWV0YWJsb2NrKGV4dDJfcmVzaXplX3QgcmZzLAorCQkJICAgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcCBtZXRhX2JtYXAsCisJCQkgICAgICBpbnQgZ3JvdXAsIGJsazY0X3QgYmxrKQoreworCWV4dDJfZmlsc3lzIAlmcyA9IHJmcy0+bmV3X2ZzOworCisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLCBibGspOworCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgd2Ugb3ZlcmxhcCB3aXRoIHRoZSBpbm9kZSBvciBibG9jayBiaXRtYXAsCisJICogb3IgdGhlIGlub2RlIHRhYmxlcy4gIElmIG5vdCwgYW5kIHRoZSBibG9jayBpcyBpbiB1c2UsIHRoZW4KKwkgKiBtYXJrIGl0IGFzIGEgYmxvY2sgdG8gYmUgbW92ZWQuCisJICovCisJaWYgKElTX0JMT0NLX0JNKGZzLCBncm91cCwgYmxrKSkgeworCQlleHQyZnNfYmxvY2tfYml0bWFwX2xvY19zZXQoZnMsIGdyb3VwLCAwKTsKKwkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCXJldHVybjsKKwl9CisJaWYgKElTX0lOT0RFX0JNKGZzLCBncm91cCwgYmxrKSkgeworCQlleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZnMsIGdyb3VwLCAwKTsKKwkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCXJldHVybjsKKwl9CisJaWYgKElTX0lOT0RFX1RCKGZzLCBncm91cCwgYmxrKSkgeworCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChmcywgZ3JvdXAsIDApOworCQlyZnMtPm5lZWRlZF9ibG9ja3MrKzsKKwkJcmV0dXJuOworCX0KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykgeworCQlkZ3JwX3QgaTsKKworCQlmb3IgKGk9MDsgaSA8IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWlmIChJU19CTE9DS19CTShmcywgaSwgYmxrKSkgeworCQkJCWV4dDJmc19ibG9ja19iaXRtYXBfbG9jX3NldChmcywgaSwgMCk7CisJCQkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKElTX0lOT0RFX0JNKGZzLCBpLCBibGspKSB7CisJCQkJZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Nfc2V0KGZzLCBpLCAwKTsKKwkJCQlyZnMtPm5lZWRlZF9ibG9ja3MrKzsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoSVNfSU5PREVfVEIoZnMsIGksIGJsaykpIHsKKwkJCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChmcywgaSwgMCk7CisJCQkJcmZzLT5uZWVkZWRfYmxvY2tzKys7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorCWlmIChFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShmcy0+c3VwZXIsCisJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU0pICYmCisJCSAgIChleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKSkpIHsKKwkJLyoKKwkJICogSWYgdGhlIGJsb2NrIGJpdG1hcCBpcyB1bmluaXRpYWxpemVkLCB3aGljaCBtZWFucworCQkgKiBub3RoaW5nIG90aGVyIHRoYW4gc3RhbmRhcmQgbWV0YWRhdGEgaW4gdXNlLgorCQkgKi8KKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihyZnMtPm9sZF9mcy0+YmxvY2tfbWFwLCBibGspICYmCisJCSAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYm1hcCwgYmxrKSkgeworCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+bW92ZV9ibG9ja3MsIGJsayk7CisJCXJmcy0+bmVlZGVkX2Jsb2NrcysrOworCX0KK30KKworCisvKgorICogVGhpcyByb3V0aW5lIG1hcmtzIGFuZCB1bm1hcmtzIHJlc2VydmVkIGJsb2NrcyBpbiB0aGUgbmV3IGJsb2NrCisgKiBiaXRtYXAuICBJdCBhbHNvIGRldGVybWluZXMgd2hpY2ggYmxvY2tzIG5lZWQgdG8gYmUgbW92ZWQgYW5kCisgKiBwbGFjZXMgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBtb3ZlX2Jsb2NrcyBiaXRtYXAuCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgYmxvY2tzX3RvX21vdmUoZXh0Ml9yZXNpemVfdCByZnMpCit7CisJaW50CQlqLCBoYXNfc3VwZXI7CisJZGdycF90CQlpLCBtYXhfZ3JvdXBzLCBnOworCWJsazY0X3QJCWJsaywgZ3JvdXBfYmxrOworCWJsazY0X3QJCW9sZF9ibG9ja3MsIG5ld19ibG9ja3M7CisJYmxrNjRfdAkJbmV3X3NpemU7CisJdW5zaWduZWQgaW50CW1ldGFfYmcsIG1ldGFfYmdfc2l6ZTsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfZmlsc3lzIAlmcywgb2xkX2ZzOworCWV4dDJmc19ibG9ja19iaXRtYXAJbWV0YV9ibWFwOworCWludAkJZmxleF9iZzsKKworCWZzID0gcmZzLT5uZXdfZnM7CisJb2xkX2ZzID0gcmZzLT5vbGRfZnM7CisJaWYgKGV4dDJmc19ibG9ja3NfY291bnQob2xkX2ZzLT5zdXBlcikgPiBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpCisJCWZzID0gcmZzLT5vbGRfZnM7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCBfKCJibG9ja3MgdG8gYmUgbW92ZWQiKSwKKwkJCQkJICAgICAgJnJmcy0+bW92ZV9ibG9ja3MpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBleHQyZnNfYWxsb2NhdGVfYmxvY2tfYml0bWFwKGZzLCBfKCJtZXRhLWRhdGEgYmxvY2tzIiksCisJCQkJCSAgICAgICZtZXRhX2JtYXApOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBtYXJrX3RhYmxlX2Jsb2NrcyhvbGRfZnMsIG1ldGFfYm1hcCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWZzID0gcmZzLT5uZXdfZnM7CisKKwkvKgorCSAqIElmIHdlJ3JlIHNocmlua2luZyB0aGUgZmlsZXN5c3RlbSwgd2UgbmVlZCB0byBtb3ZlIGFueQorCSAqIGdyb3VwJ3MgbWV0YWRhdGEgYmxvY2tzIChlaXRoZXIgYWxsb2NhdGlvbiBiaXRtYXBzIG9yIHRoZQorCSAqIGlub2RlIHRhYmxlKSB3aGljaCBhcmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIG5ldworCSAqIGZpbGVzeXN0ZW0uCisJICovCisJbmV3X3NpemUgPSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJaWYgKG5ld19zaXplIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKSkgeworCQlmb3IgKGcgPSAwOyBnIDwgZnMtPmdyb3VwX2Rlc2NfY291bnQ7IGcrKykgeworCQkJaW50IHJlYWxsb2MgPSAwOworCQkJLyoKKwkJCSAqIGV4dDJmc19hbGxvY2F0ZV9ncm91cF90YWJsZSB3aWxsIHJlLWFsbG9jYXRlIGFueQorCQkJICogbWV0YWRhdGEgYmxvY2tzIHdob3NlIGxvY2F0aW9uIGlzIHNldCB0byB6ZXJvLgorCQkJICovCisJCQlpZiAoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGcpID49IG5ld19zaXplKSB7CisJCQkJZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2Nfc2V0KGZzLCBnLCAwKTsKKwkJCQlyZWFsbG9jID0gMTsKKwkJCX0KKwkJCWlmIChleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZykgPj0gbmV3X3NpemUpIHsKKwkJCQlleHQyZnNfaW5vZGVfYml0bWFwX2xvY19zZXQoZnMsIGcsIDApOworCQkJCXJlYWxsb2MgPSAxOworCQkJfQorCQkJaWYgKChleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBnKSArCisJCQkgICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKSA+IG5ld19zaXplKSB7CisJCQkJZXh0MmZzX2lub2RlX3RhYmxlX2xvY19zZXQoZnMsIGcsIDApOworCQkJCXJlYWxsb2MgPSAxOworCQkJfQorCisJCQlpZiAocmVhbGxvYykgeworCQkJCXJldHZhbCA9IGV4dDJmc19hbGxvY2F0ZV9ncm91cF90YWJsZShmcywgZywgMCk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSWYgd2UncmUgc2hyaW5raW5nIHRoZSBmaWxlc3lzdGVtLCB3ZSBuZWVkIHRvIG1vdmUgYWxsIG9mCisJICogdGhlIGJsb2NrcyB0aGF0IGRvbid0IGZpdCBhbnkgbW9yZQorCSAqLworCWZvciAoYmxrID0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCSAgICAgYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKTsgYmxrKyspIHsKKwkJZyA9IGV4dDJmc19ncm91cF9vZl9ibGsyKGZzLCBibGspOworCQlpZiAoRVhUMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoZnMtPnN1cGVyLAorCQkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkgJiYKKwkJICAgIGV4dDJmc19iZ19mbGFnc190ZXN0KG9sZF9mcywgZywgRVhUMl9CR19CTE9DS19VTklOSVQpKSB7CisJCQkvKgorCQkJICogVGhlIGJsb2NrIGJpdG1hcCBpcyB1bmluaXRpYWxpemVkLCBzbyBza2lwCisJCQkgKiB0byB0aGUgbmV4dCBibG9jayBncm91cC4KKwkJCSAqLworCQkJYmxrID0gZXh0MmZzX2dyb3VwX2ZpcnN0X2Jsb2NrMihmcywgZysxKSAtIDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihvbGRfZnMtPmJsb2NrX21hcCwgYmxrKSAmJgorCQkgICAgIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIobWV0YV9ibWFwLCBibGspKSB7CisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+bW92ZV9ibG9ja3MsIGJsayk7CisJCQlyZnMtPm5lZWRlZF9ibG9ja3MrKzsKKwkJfQorCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsIGJsayk7CisJfQorCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHsKKwkJb2xkX2Jsb2NrcyA9IG9sZF9mcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwkJbmV3X2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworCX0gZWxzZSB7CisJCW9sZF9ibG9ja3MgPSBvbGRfZnMtPmRlc2NfYmxvY2tzICsgb2xkX2ZzLT5zdXBlci0+c19yZXNlcnZlZF9nZHRfYmxvY2tzOworCQluZXdfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzICsgZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisJfQorCisJaWYgKG9sZF9ibG9ja3MgPT0gbmV3X2Jsb2NrcykgeworCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisKKwltYXhfZ3JvdXBzID0gZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJaWYgKG1heF9ncm91cHMgPiBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCW1heF9ncm91cHMgPSBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisJZ3JvdXBfYmxrID0gb2xkX2ZzLT5zdXBlci0+c19maXJzdF9kYXRhX2Jsb2NrOworCS8qCisJICogSWYgd2UncmUgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIGJsb2NrcywgdGhpcworCSAqIG1ha2VzIGxpZmUgZWFzeS4gIDotKSAgIFdlIGp1c3QgaGF2ZSB0byBtYXJrIHNvbWUgZXh0cmEKKwkgKiBibG9ja3MgYXMgZnJlZS4KKwkgKi8KKwlpZiAob2xkX2Jsb2NrcyA+IG5ld19ibG9ja3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1heF9ncm91cHM7IGkrKykgeworCQkJaWYgKCFleHQyZnNfYmdfaGFzX3N1cGVyKGZzLCBpKSkgeworCQkJCWdyb3VwX2JsayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZvciAoYmxrID0gZ3JvdXBfYmxrKzErbmV3X2Jsb2NrczsKKwkJCSAgICAgYmxrIDwgZ3JvdXBfYmxrKzErb2xkX2Jsb2NrczsgYmxrKyspIHsKKwkJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssIC0xKTsKKwkJCQlyZnMtPm5lZWRlZF9ibG9ja3MtLTsKKwkJCX0KKwkJCWdyb3VwX2JsayArPSBmcy0+c3VwZXItPnNfYmxvY2tzX3Blcl9ncm91cDsKKwkJfQorCQlyZXR2YWwgPSAwOworCQlnb3RvIGVycm91dDsKKwl9CisJLyoKKwkgKiBJZiB3ZSdyZSBpbmNyZWFzaW5nIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvciBibG9ja3MsIGxpZmUKKwkgKiBnZXRzIGludGVyZXN0aW5nLi4uLgorCSAqLworCW1ldGFfYmdfc2l6ZSA9IEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKwlmbGV4X2JnID0gZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorCQlFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRzsKKwkvKiBmaXJzdCByZXNlcnZlIGFsbCBvZiB0aGUgZXhpc3RpbmcgZnMgbWV0YSBibG9ja3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2dyb3VwczsgaSsrKSB7CisJCWhhc19zdXBlciA9IGV4dDJmc19iZ19oYXNfc3VwZXIoZnMsIGkpOworCQlpZiAoaGFzX3N1cGVyKQorCQkJbWFya19mc19tZXRhYmxvY2socmZzLCBtZXRhX2JtYXAsIGksIGdyb3VwX2Jsayk7CisKKwkJbWV0YV9iZyA9IGkgLyBtZXRhX2JnX3NpemU7CisJCWlmICghKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHx8CisJCSAgICAobWV0YV9iZyA8IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKSkgeworCQkJaWYgKGhhc19zdXBlcikgeworCQkJCWZvciAoYmxrID0gZ3JvdXBfYmxrKzE7CisJCQkJICAgICBibGsgPCBncm91cF9ibGsgKyAxICsgbmV3X2Jsb2NrczsgYmxrKyspCisJCQkJCW1hcmtfZnNfbWV0YWJsb2NrKHJmcywgbWV0YV9ibWFwLAorCQkJCQkJCSAgaSwgYmxrKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChoYXNfc3VwZXIpCisJCQkJaGFzX3N1cGVyID0gMTsKKwkJCWlmICgoKGkgJSBtZXRhX2JnX3NpemUpID09IDApIHx8CisJCQkgICAgKChpICUgbWV0YV9iZ19zaXplKSA9PSAxKSB8fAorCQkJICAgICgoaSAlIG1ldGFfYmdfc2l6ZSkgPT0gKG1ldGFfYmdfc2l6ZS0xKSkpCisJCQkJbWFya19mc19tZXRhYmxvY2socmZzLCBtZXRhX2JtYXAsIGksCisJCQkJCQkgIGdyb3VwX2JsayArIGhhc19zdXBlcik7CisJCX0KKworCQkvKgorCQkgKiBSZXNlcnZlIHRoZSBleGlzdGluZyBtZXRhIGJsb2NrcyB0aGF0IHdlIGtub3cKKwkJICogYXJlbid0IHRvIGJlIG1vdmVkLgorCQkgKgorCQkgKiBGb3IgZmxleF9iZyBmaWxlIHN5c3RlbXMsIGluIG9yZGVyIHRvIGF2b2lkCisJCSAqIG92ZXJ3cml0aW5nIGZzIG1ldGFkYXRhIChlc3BlY2lhbGx5IGlub2RlIHRhYmxlCisJCSAqIGJsb2NrcykgYmVsb25naW5nIHRvIGEgZGlmZmVyZW50IGJsb2NrIGdyb3VwIHdoZW4KKwkJICogd2UgYXJlIHJlbG9jYXRpbmcgdGhlIGlub2RlIHRhYmxlcywgd2UgbmVlZCB0bworCQkgKiByZXNlcnZlIGFsbCBleGlzdGluZyBmcyBtZXRhZGF0YSBibG9ja3MuCisJCSAqLworCQlpZiAoZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLAorCQkJCSBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgaSkpOworCQllbHNlIGlmIChmbGV4X2JnICYmIGkgPCBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJIGV4dDJmc19ibG9ja19iaXRtYXBfbG9jKG9sZF9mcywgaSkpOworCisJCWlmIChleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSk7CisJCWVsc2UgaWYgKGZsZXhfYmcgJiYgaSA8IG9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCkKKwkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5yZXNlcnZlX2Jsb2NrcywKKwkJCQkgZXh0MmZzX2lub2RlX2JpdG1hcF9sb2Mob2xkX2ZzLCBpKSk7CisKKwkJaWYgKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwX3JhbmdlMihyZnMtPnJlc2VydmVfYmxvY2tzLAorCQkJCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSwKKwkJCQkJZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXApOworCQllbHNlIGlmIChmbGV4X2JnICYmIGkgPCBvbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXBfcmFuZ2UyKHJmcy0+cmVzZXJ2ZV9ibG9ja3MsCisJCQkJCWV4dDJmc19pbm9kZV90YWJsZV9sb2Mob2xkX2ZzLCBpKSwKKwkJCQkJb2xkX2ZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKTsKKworCQlncm91cF9ibGsgKz0gcmZzLT5uZXdfZnMtPnN1cGVyLT5zX2Jsb2Nrc19wZXJfZ3JvdXA7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIG1pc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IG1heF9ncm91cHM7IGkrKykgeworCQlpZiAoZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkgJiYKKwkJICAgIGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKGZzLCBpKSAmJgorCQkgICAgZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gZXh0MmZzX2FsbG9jYXRlX2dyb3VwX3RhYmxlKGZzLCBpLAorCQkJCQkJICAgICByZnMtPnJlc2VydmVfYmxvY2tzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCisJCS8qCisJCSAqIEZvciB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvCisJCSAqIGRvIGJvb2trZWVwcGluZy4KKwkJICovCisJCWlmIChleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhvbGRfZnMsIGkpICE9CisJCSAgICAoYmxrID0gZXh0MmZzX2Jsb2NrX2JpdG1hcF9sb2MoZnMsIGkpKSkgeworCQkJZXh0MmZzX2Jsb2NrX2FsbG9jX3N0YXRzMihmcywgYmxrLCArMSk7CisJCQlpZiAoZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihvbGRfZnMtPmJsb2NrX21hcCwgYmxrKSAmJgorCQkJICAgICFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG1ldGFfYm1hcCwgYmxrKSkKKwkJCQlleHQyZnNfbWFya19ibG9ja19iaXRtYXAyKHJmcy0+bW92ZV9ibG9ja3MsCisJCQkJCQkJIGJsayk7CisJCX0KKwkJaWYgKGV4dDJmc19pbm9kZV9iaXRtYXBfbG9jKG9sZF9mcywgaSkgIT0KKwkJICAgIChibGsgPSBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgaSkpKSB7CisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssICsxKTsKKwkJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG9sZF9mcy0+YmxvY2tfbWFwLCBibGspICYmCisJCQkgICAgIWV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIobWV0YV9ibWFwLCBibGspKQorCQkJCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5tb3ZlX2Jsb2NrcywKKwkJCQkJCQkgYmxrKTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBpbm9kZSB0YWJsZSwgaWYgd2UgbmVlZCB0byByZWxvY2F0ZSBpdCwgaXMKKwkJICogaGFuZGxlZCBzcGVjaWFsbHkuICBXZSBoYXZlIHRvIHJlc2VydmUgdGhlIGJsb2NrcworCQkgKiBmb3IgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGlub2RlIHRhYmxlLCBzaW5jZSB3ZQorCQkgKiBjYW4ndCBoYXZlIHRoZSBpbm9kZSB0YWJsZSBiZSBkZXN0cm95ZWQgZHVyaW5nIHRoZQorCQkgKiBibG9jayByZWxvY2F0aW9uIHBoYXNlLgorCQkgKi8KKwkJaWYgKGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGkpID09IGV4dDJmc19pbm9kZV90YWJsZV9sb2Mob2xkX2ZzLCBpKSkKKwkJCWNvbnRpbnVlOwkvKiBpbm9kZSB0YWJsZSBub3QgbW92ZWQgKi8KKworCQlyZnMtPm5lZWRlZF9ibG9ja3MgKz0gZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXA7CisKKwkJLyoKKwkJICogTWFyayB0aGUgbmV3IGlub2RlIHRhYmxlIGFzIGluIHVzZSBpbiB0aGUgbmV3IGJsb2NrCisJCSAqIGFsbG9jYXRpb24gYml0bWFwLCBhbmQgbW92ZSBhbnkgYmxvY2tzIHRoYXQgbWlnaHQKKwkJICogYmUgbmVjZXNzYXJ5LgorCQkgKi8KKwkJZm9yIChibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBpKSwgaj0wOworCQkgICAgIGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCA7IGorKywgYmxrKyspIHsKKwkJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIGJsaywgKzEpOworCQkJaWYgKGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIob2xkX2ZzLT5ibG9ja19tYXAsIGJsaykgJiYKKwkJCSAgICAhZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihtZXRhX2JtYXAsIGJsaykpCisJCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLAorCQkJCQkJCSBibGspOworCQl9CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBvbGQgaW5vZGUgdGFibGUgaXMgcmVzZXJ2ZWQgaW4gdGhlCisJCSAqIGJsb2NrIHJlc2VydmF0aW9uIGJpdG1hcC4KKwkJICovCisJCWZvciAoYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhyZnMtPm9sZF9mcywgaSksIGo9MDsKKwkJICAgICBqIDwgZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgOyBqKyssIGJsaysrKQorCQkJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPnJlc2VydmVfYmxvY2tzLCBibGspOworCX0KKwlyZXR2YWwgPSAwOworCitlcnJvdXQ6CisJaWYgKG1ldGFfYm1hcCkKKwkJZXh0MmZzX2ZyZWVfYmxvY2tfYml0bWFwKG1ldGFfYm1hcCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gdHJpZXMgdG8gYWxsb2NhdGUgYSBuZXcgYmxvY2suICBXZSB0cnkgdG8KKyAqIGF2b2lkIGhpdHRpbmcgdGhlIG9yaWdpbmFsIGdyb3VwIGRlc2NyaXB0b3IgYmxvY2tzIGF0IGxlYXN0IGF0CisgKiBmaXJzdCwgc2luY2Ugd2Ugd2FudCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlY292ZXIgZnJvbSBhIGJhZGx5CisgKiBhYm9ydGVkIHJlc2l6ZSBvcGVyYXRpb24gYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAqCisgKiBJbiB0aGUgZnV0dXJlLCBJIG1heSBmdXJ0aGVyIG1vZGlmeSB0aGlzIHJvdXRpbmUgdG8gYmFsYW5jZSBvdXQKKyAqIHdoZXJlIHdlIGdldCB0aGUgbmV3IGJsb2NrcyBhY3Jvc3MgdGhlIHZhcmlvdXMgYmxvY2sgZ3JvdXBzLgorICogSWRlYWxseSB3ZSB3b3VsZCBhbGxvY2F0ZSBibG9ja3MgdGhhdCBjb3JyZXNwb25kZWQgd2l0aCB0aGUgYmxvY2sKKyAqIGdyb3VwIG9mIHRoZSBjb250YWluaW5nIGlub2RlLCBhbmQga2VlcCBjb250aWd1b3VzIGJsb2NrcworICogdG9nZXRoZXIuICBIb3dldmVyLCB0aGlzIHZlcnkgZGlmZmljdWx0IHRvIGRvIGVmZmljaWVudGx5LCBzaW5jZSB3ZQorICogZG9uJ3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHVwIGZyb250LgorICovCisKKyNkZWZpbmUgQVZPSURfT0xECTEKKyNkZWZpbmUgREVTUEVSQVRJT04JMgorCitzdGF0aWMgdm9pZCBpbml0X2Jsb2NrX2FsbG9jKGV4dDJfcmVzaXplX3QgcmZzKQoreworCXJmcy0+YWxsb2Nfc3RhdGUgPSBBVk9JRF9PTEQ7CisJcmZzLT5uZXdfYmxrID0gcmZzLT5uZXdfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisjaWYgMAorCS8qIEhBQ0sgZm9yIHRlc3RpbmcgKi8KKwlpZiAoZXh0MmZzX2Jsb2Nrc19jb3VudChyZnMtPm5ld19mcy0+c3VwZXIpID4KKwkgICAgZXh0MmZzX2Jsb2Nrc19jb3VudChyZnMtPm9sZF9mcy0+c3VwZXIpKQorCQlyZnMtPm5ld19ibGsgPSBleHQyZnNfYmxvY2tzX2NvdW50KHJmcy0+b2xkX2ZzLT5zdXBlcik7CisjZW5kaWYKK30KKworc3RhdGljIGJsazY0X3QgZ2V0X25ld19ibG9jayhleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlleHQyX2ZpbHN5cwlmcyA9IHJmcy0+bmV3X2ZzOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHJmcy0+bmV3X2JsayA+PSBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcikpIHsKKwkJCWlmIChyZnMtPmFsbG9jX3N0YXRlID09IERFU1BFUkFUSU9OKQorCQkJCXJldHVybiAwOworCisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCQlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19CTU9WRSkKKwkJCQlwcmludGYoIkdvaW5nIGludG8gZGVzcGVyYXRpb24gbW9kZSAiCisJCQkJICAgICAgICJmb3IgYmxvY2sgYWxsb2NhdGlvbnNcbiIpOworI2VuZGlmCisJCQlyZnMtPmFsbG9jX3N0YXRlID0gREVTUEVSQVRJT047CisJCQlyZnMtPm5ld19ibGsgPSBmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jazsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKGZzLT5ibG9ja19tYXAsIHJmcy0+bmV3X2JsaykgfHwKKwkJICAgIGV4dDJmc190ZXN0X2Jsb2NrX2JpdG1hcDIocmZzLT5yZXNlcnZlX2Jsb2NrcywKKwkJCQkJICAgICByZnMtPm5ld19ibGspIHx8CisJCSAgICAoKHJmcy0+YWxsb2Nfc3RhdGUgPT0gQVZPSURfT0xEKSAmJgorCQkgICAgIChyZnMtPm5ld19ibGsgPCBleHQyZnNfYmxvY2tzX2NvdW50KHJmcy0+b2xkX2ZzLT5zdXBlcikpICYmCisJCSAgICAgZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihyZnMtPm9sZF9mcy0+YmxvY2tfbWFwLAorCQkJCQkgICAgICByZnMtPm5ld19ibGspKSkgeworCQkJcmZzLT5uZXdfYmxrKys7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gcmZzLT5uZXdfYmxrOworCX0KK30KKworc3RhdGljIGVycmNvZGVfdCByZXNpemUyZnNfZ2V0X2FsbG9jX2Jsb2NrKGV4dDJfZmlsc3lzIGZzLCBibGs2NF90IGdvYWwsCisJCQkJCSAgIGJsazY0X3QgKnJldCkKK3sKKwlleHQyX3Jlc2l6ZV90IHJmcyA9IChleHQyX3Jlc2l6ZV90KSBmcy0+cHJpdl9kYXRhOworCWJsazY0X3QgYmxrOworCisJYmxrID0gZ2V0X25ld19ibG9jayhyZnMpOworCWlmICghYmxrKQorCQlyZXR1cm4gRU5PU1BDOworCisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKHJmcy0+ZmxhZ3MgJiAweEYpCisJCXByaW50ZigiZ2V0X2FsbG9jX2Jsb2NrIGFsbG9jYXRpbmcgJWxsdVxuIiwgYmxrKTsKKyNlbmRpZgorCisJZXh0MmZzX21hcmtfYmxvY2tfYml0bWFwMihyZnMtPm9sZF9mcy0+YmxvY2tfbWFwLCBibGspOworCWV4dDJmc19tYXJrX2Jsb2NrX2JpdG1hcDIocmZzLT5uZXdfZnMtPmJsb2NrX21hcCwgYmxrKTsKKwkqcmV0ID0gKGJsazY0X3QpIGJsazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVycmNvZGVfdCBibG9ja19tb3ZlcihleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlibGs2NF90CQkJYmxrLCBvbGRfYmxrLCBuZXdfYmxrOworCWV4dDJfZmlsc3lzCQlmcyA9IHJmcy0+bmV3X2ZzOworCWV4dDJfZmlsc3lzCQlvbGRfZnMgPSByZnMtPm9sZF9mczsKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlfX3U2NAkJCXNpemU7CisJaW50CQkJYzsKKwlpbnQJCQl0b19tb3ZlLCBtb3ZlZDsKKwlleHQyX2JhZGJsb2Nrc19saXN0CWJhZGJsb2NrX2xpc3QgPSAwOworCWludAkJCWJiX21vZGlmaWVkID0gMDsKKworCWZzLT5nZXRfYWxsb2NfYmxvY2sgPSByZXNpemUyZnNfZ2V0X2FsbG9jX2Jsb2NrOworCW9sZF9mcy0+Z2V0X2FsbG9jX2Jsb2NrID0gcmVzaXplMmZzX2dldF9hbGxvY19ibG9jazsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2JiX2lub2RlKG9sZF9mcywgJmJhZGJsb2NrX2xpc3QpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwluZXdfYmxrID0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisJaWYgKCFyZnMtPml0YWJsZV9idWYpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2dldF9hcnJheShmcy0+YmxvY2tzaXplLAorCQkJCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCwKKwkJCQkJJnJmcy0+aXRhYmxlX2J1Zik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2V4dGVudF90YWJsZSgmcmZzLT5ibWFwLCAwKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyoKKwkgKiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGFsbCBvZiB0aGUgYmxvY2tzCisJICogd2lsbCBnby4KKwkgKi8KKwl0b19tb3ZlID0gbW92ZWQgPSAwOworCWluaXRfYmxvY2tfYWxsb2MocmZzKTsKKwlmb3IgKGJsayA9IEIyQyhvbGRfZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCSAgICAgYmxrIDwgZXh0MmZzX2Jsb2Nrc19jb3VudChvbGRfZnMtPnN1cGVyKTsKKwkgICAgIGJsayArPSBFWFQyRlNfQ0xVU1RFUl9SQVRJTyhmcykpIHsKKwkJaWYgKCFleHQyZnNfdGVzdF9ibG9ja19iaXRtYXAyKG9sZF9mcy0+YmxvY2tfbWFwLCBibGspKQorCQkJY29udGludWU7CisJCWlmICghZXh0MmZzX3Rlc3RfYmxvY2tfYml0bWFwMihyZnMtPm1vdmVfYmxvY2tzLCBibGspKQorCQkJY29udGludWU7CisJCWlmIChleHQyZnNfYmFkYmxvY2tzX2xpc3RfdGVzdChiYWRibG9ja19saXN0LCBibGspKSB7CisJCQlleHQyZnNfYmFkYmxvY2tzX2xpc3RfZGVsKGJhZGJsb2NrX2xpc3QsIGJsayk7CisJCQliYl9tb2RpZmllZCsrOworCQkJY29udGludWU7CisJCX0KKworCQluZXdfYmxrID0gZ2V0X25ld19ibG9jayhyZnMpOworCQlpZiAoIW5ld19ibGspIHsKKwkJCXJldHZhbCA9IEVOT1NQQzsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCWV4dDJmc19ibG9ja19hbGxvY19zdGF0czIoZnMsIG5ld19ibGssICsxKTsKKwkJZXh0MmZzX2FkZF9leHRlbnRfZW50cnkocmZzLT5ibWFwLCBCMkMoYmxrKSwgQjJDKG5ld19ibGspKTsKKwkJdG9fbW92ZSsrOworCX0KKworCWlmICh0b19tb3ZlID09IDApIHsKKwkJaWYgKHJmcy0+Ym1hcCkgeworCQkJZXh0MmZzX2ZyZWVfZXh0ZW50X3RhYmxlKHJmcy0+Ym1hcCk7CisJCQlyZnMtPmJtYXAgPSAwOworCQl9CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qCisJICogU3RlcCB0d28gaXMgdG8gYWN0dWFsbHkgbW92ZSB0aGUgYmxvY2tzCisJICovCisJcmV0dmFsID0gIGV4dDJmc19pdGVyYXRlX2V4dGVudChyZnMtPmJtYXAsIDAsIDAsIDApOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJcmV0dmFsID0gKHJmcy0+cHJvZ3Jlc3MpKHJmcywgRTJfUlNaX0JMT0NLX1JFTE9DX1BBU1MsCisJCQkJCSAwLCB0b19tb3ZlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfaXRlcmF0ZV9leHRlbnQocmZzLT5ibWFwLCAmb2xkX2JsaywgJm5ld19ibGssICZzaXplKTsKKwkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisJCWlmICghc2l6ZSkKKwkJCWJyZWFrOworCQlvbGRfYmxrID0gQzJCKG9sZF9ibGspOworCQluZXdfYmxrID0gQzJCKG5ld19ibGspOworCQlzaXplID0gQzJCKHNpemUpOworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19CTU9WRSkKKwkJCXByaW50ZigiTW92aW5nICVsbHUgYmxvY2tzICVsbHUtPiVsbHVcbiIsCisJCQkgICAgICAgc2l6ZSwgb2xkX2JsaywgbmV3X2Jsayk7CisjZW5kaWYKKwkJZG8geworCQkJYyA9IHNpemU7CisJCQlpZiAoYyA+IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwKQorCQkJCWMgPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGs2NChmcy0+aW8sIG9sZF9ibGssIGMsCisJCQkJCQkgICAgICAgcmZzLT5pdGFibGVfYnVmKTsKKwkJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCQkJcmV0dmFsID0gaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIG5ld19ibGssIGMsCisJCQkJCQkJcmZzLT5pdGFibGVfYnVmKTsKKwkJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCQkJc2l6ZSAtPSBjOworCQkJbmV3X2JsayArPSBjOworCQkJb2xkX2JsayArPSBjOworCQkJbW92ZWQgKz0gYzsKKwkJCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCQkJaW9fY2hhbm5lbF9mbHVzaChmcy0+aW8pOworCQkJCXJldHZhbCA9IChyZnMtPnByb2dyZXNzKShyZnMsCisJCQkJCQlFMl9SU1pfQkxPQ0tfUkVMT0NfUEFTUywKKwkJCQkJCW1vdmVkLCB0b19tb3ZlKTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJfSB3aGlsZSAoc2l6ZSA+IDApOworCQlpb19jaGFubmVsX2ZsdXNoKGZzLT5pbyk7CisJfQorCitlcnJvdXQ6CisJaWYgKGJhZGJsb2NrX2xpc3QpIHsKKwkJaWYgKCFyZXR2YWwgJiYgYmJfbW9kaWZpZWQpCisJCQlyZXR2YWwgPSBleHQyZnNfdXBkYXRlX2JiX2lub2RlKG9sZF9mcywKKwkJCQkJCQliYWRibG9ja19saXN0KTsKKwkJZXh0MmZzX2JhZGJsb2Nrc19saXN0X2ZyZWUoYmFkYmxvY2tfbGlzdCk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZXNpemUgcHJvY2Vzc2luZywgcGhhc2UgMworICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisvKgorICogVGhlIGV4dGVudCB0cmFuc2xhdGlvbiB0YWJsZSBpcyBzdG9yZWQgaW4gY2x1c3RlcnMgc28gd2UgbmVlZCB0bworICogdGFrZSBzcGVjaWFsIGNhcmUgd2hlbiBtYXBwaW5nIGEgc291cmNlIGJsb2NrIG51bWJlciB0byBpdHMKKyAqIGRlc3RpbmF0aW9uIGJsb2NrIG51bWJlci4KKyAqLworc3RhdGljIF9fdTY0IGV4dGVudF90cmFuc2xhdGUoZXh0Ml9maWxzeXMgZnMsIGV4dDJfZXh0ZW50IGV4dGVudCwgX191NjQgb2xkX2xvYykKK3sKKwlfX3U2NCBuZXdfYmxvY2sgPSBDMkIoZXh0MmZzX2V4dGVudF90cmFuc2xhdGUoZXh0ZW50LCBCMkMob2xkX2xvYykpKTsKKworCWlmIChuZXdfYmxvY2sgIT0gMCkKKwkJbmV3X2Jsb2NrICs9IG9sZF9sb2MgJiAoRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpIC0gMSk7CisJcmV0dXJuIG5ld19ibG9jazsKK30KKworc3RydWN0IHByb2Nlc3NfYmxvY2tfc3RydWN0IHsKKwlleHQyX3Jlc2l6ZV90IAkJcmZzOworCWV4dDJfaW5vX3QJCWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqCWlub2RlOworCWVycmNvZGVfdAkJZXJyb3I7CisJaW50CQkJaXNfZGlyOworCWludAkJCWNoYW5nZWQ7Cit9OworCitzdGF0aWMgaW50IHByb2Nlc3NfYmxvY2soZXh0Ml9maWxzeXMgZnMsIGJsazY0X3QJKmJsb2NrX25yLAorCQkJIGUyX2Jsa2NudF90IGJsb2NrY250LAorCQkJIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKwkJCSBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKnBiOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrNjRfdAkJYmxvY2ssIG5ld19ibG9jazsKKwlpbnQJCXJldCA9IDA7CisKKwlwYiA9IChzdHJ1Y3QgcHJvY2Vzc19ibG9ja19zdHJ1Y3QgKikgcHJpdl9kYXRhOworCWJsb2NrID0gKmJsb2NrX25yOworCWlmIChwYi0+cmZzLT5ibWFwKSB7CisJCW5ld19ibG9jayA9IGV4dGVudF90cmFuc2xhdGUoZnMsIHBiLT5yZnMtPmJtYXAsIGJsb2NrKTsKKwkJaWYgKG5ld19ibG9jaykgeworCQkJKmJsb2NrX25yID0gbmV3X2Jsb2NrOworCQkJcmV0IHw9IEJMT0NLX0NIQU5HRUQ7CisJCQlwYi0+Y2hhbmdlZCA9IDE7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCQlpZiAocGItPnJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfQk1PVkUpCisJCQkJcHJpbnRmKCJpbm89JXUsIGJsb2NrY250PSVsbGQsICVsbHUtPiVsbHVcbiIsCisJCQkJICAgICAgIHBiLT5pbm8sIGJsb2NrY250LCBibG9jaywgbmV3X2Jsb2NrKTsKKyNlbmRpZgorCQkJYmxvY2sgPSBuZXdfYmxvY2s7CisJCX0KKwl9CisJaWYgKHBiLT5pc19kaXIpIHsKKwkJcmV0dmFsID0gZXh0MmZzX2FkZF9kaXJfYmxvY2syKGZzLT5kYmxpc3QsIHBiLT5pbm8sCisJCQkJCSAgICAgICBibG9jaywgKGludCkgYmxvY2tjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlwYi0+ZXJyb3IgPSByZXR2YWw7CisJCQlyZXQgfD0gQkxPQ0tfQUJPUlQ7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2dyZXNzIGNhbGxiYWNrCisgKi8KK3N0YXRpYyBlcnJjb2RlX3QgcHJvZ3Jlc3NfY2FsbGJhY2soZXh0Ml9maWxzeXMgZnMsCisJCQkJICAgZXh0Ml9pbm9kZV9zY2FuIHNjYW4gRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgIGRncnBfdCBncm91cCwgdm9pZCAqIHByaXZfZGF0YSkKK3sKKwlleHQyX3Jlc2l6ZV90IHJmcyA9IChleHQyX3Jlc2l6ZV90KSBwcml2X2RhdGE7CisJZXJyY29kZV90CQlyZXR2YWw7CisKKwkvKgorCSAqIFRoaXMgY2hlY2sgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IG9sZCBleHQyIGxpYnJhcmllcy4gIEl0CisJICogc2hvdWxkbid0IGJlIG5lZWRlZCBhZ2FpbnN0IG5ldyBsaWJyYXJpZXMuCisJICovCisJaWYgKChncm91cCsxKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCWlvX2NoYW5uZWxfZmx1c2goZnMtPmlvKTsKKwkJcmV0dmFsID0gKHJmcy0+cHJvZ3Jlc3MpKHJmcywgRTJfUlNaX0lOT0RFX1NDQU5fUEFTUywKKwkJCQkJIGdyb3VwKzEsIGZzLT5ncm91cF9kZXNjX2NvdW50KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfc2Nhbl9hbmRfZml4KGV4dDJfcmVzaXplX3QgcmZzKQoreworCXN0cnVjdCBwcm9jZXNzX2Jsb2NrX3N0cnVjdAlwYjsKKwlleHQyX2lub190CQlpbm8sIG5ld19pbm9kZTsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZSAJKmlub2RlID0gTlVMTDsKKwlleHQyX2lub2RlX3NjYW4gCXNjYW4gPSBOVUxMOworCWVycmNvZGVfdAkJcmV0dmFsOworCWNoYXIJCQkqYmxvY2tfYnVmID0gMDsKKwlleHQyX2lub190CQlzdGFydF90b19tb3ZlOworCWJsazY0X3QJCQlvcmlnX3NpemU7CisJYmxrNjRfdAkJCW5ld19ibG9jazsKKwlpbnQJCQlpbm9kZV9zaXplOworCisJaWYgKChyZnMtPm9sZF9mcy0+Z3JvdXBfZGVzY19jb3VudCA8PQorCSAgICAgcmZzLT5uZXdfZnMtPmdyb3VwX2Rlc2NfY291bnQpICYmCisJICAgICFyZnMtPmJtYXApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTYXZlIHRoZSBvcmlnaW5hbCBzaXplIG9mIHRoZSBvbGQgZmlsZXN5c3RlbSwgYW5kCisJICogdGVtcG9yYXJpbHkgc2V0IHRoZSBzaXplIHRvIGJlIHRoZSBuZXcgc2l6ZSBpZiB0aGUgbmV3IHNpemUKKwkgKiBpcyBsYXJnZXIuICBXZSBuZWVkIHRvIGRvIHRoaXMgdG8gYXZvaWQgY2F0Y2hpbmcgYW4gZXJyb3IKKwkgKiBieSB0aGUgYmxvY2sgaXRlcmF0b3Igcm91dGluZXMKKwkgKi8KKwlvcmlnX3NpemUgPSBleHQyZnNfYmxvY2tzX2NvdW50KHJmcy0+b2xkX2ZzLT5zdXBlcik7CisJaWYgKG9yaWdfc2l6ZSA8IGV4dDJmc19ibG9ja3NfY291bnQocmZzLT5uZXdfZnMtPnN1cGVyKSkKKwkJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQocmZzLT5vbGRfZnMtPnN1cGVyLAorCQkJCWV4dDJmc19ibG9ja3NfY291bnQocmZzLT5uZXdfZnMtPnN1cGVyKSk7CisKKwlyZXR2YWwgPSBleHQyZnNfb3Blbl9pbm9kZV9zY2FuKHJmcy0+b2xkX2ZzLCAwLCAmc2Nhbik7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfaW5pdF9kYmxpc3QocmZzLT5vbGRfZnMsIDApOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCXJldHZhbCA9IGV4dDJmc19nZXRfYXJyYXkocmZzLT5vbGRfZnMtPmJsb2Nrc2l6ZSwgMywgJmJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlzdGFydF90b19tb3ZlID0gKHJmcy0+bmV3X2ZzLT5ncm91cF9kZXNjX2NvdW50ICoKKwkJCSByZnMtPm5ld19mcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCk7CisKKwlpZiAocmZzLT5wcm9ncmVzcykgeworCQlyZXR2YWwgPSAocmZzLT5wcm9ncmVzcykocmZzLCBFMl9SU1pfSU5PREVfU0NBTl9QQVNTLAorCQkJCQkgMCwgcmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvdXQ7CisJfQorCWV4dDJmc19zZXRfaW5vZGVfY2FsbGJhY2soc2NhbiwgcHJvZ3Jlc3NfY2FsbGJhY2ssICh2b2lkICopIHJmcyk7CisJcGIucmZzID0gcmZzOworCXBiLmlub2RlID0gaW5vZGU7CisJcGIuZXJyb3IgPSAwOworCW5ld19pbm9kZSA9IEVYVDJfRklSU1RfSU5PREUocmZzLT5uZXdfZnMtPnN1cGVyKTsKKwlpbm9kZV9zaXplID0gRVhUMl9JTk9ERV9TSVpFKHJmcy0+bmV3X2ZzLT5zdXBlcik7CisJaW5vZGUgPSBtYWxsb2MoaW5vZGVfc2l6ZSk7CisJaWYgKCFpbm9kZSkgeworCQlyZXR2YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyb3V0OworCX0KKwkvKgorCSAqIEZpcnN0LCBjb3B5IGFsbCBvZiB0aGUgaW5vZGVzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAorCSAqIGVsc2V3aGVyZSBpbiB0aGUgaW5vZGUgdGFibGUKKwkgKi8KKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfZ2V0X25leHRfaW5vZGVfZnVsbChzY2FuLCAmaW5vLCBpbm9kZSwgaW5vZGVfc2l6ZSk7CisJCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCQlpZiAoIWlubykKKwkJCWJyZWFrOworCisJCWlmIChpbm9kZS0+aV9saW5rc19jb3VudCA9PSAwICYmIGlubyAhPSBFWFQyX1JFU0laRV9JTk8pCisJCQljb250aW51ZTsgLyogaW5vZGUgbm90IGluIHVzZSAqLworCisJCXBiLmlzX2RpciA9IExJTlVYX1NfSVNESVIoaW5vZGUtPmlfbW9kZSk7CisJCXBiLmNoYW5nZWQgPSAwOworCisJCWlmIChleHQyZnNfZmlsZV9hY2xfYmxvY2socmZzLT5vbGRfZnMsIGlub2RlKSAmJiByZnMtPmJtYXApIHsKKwkJCW5ld19ibG9jayA9IGV4dGVudF90cmFuc2xhdGUocmZzLT5vbGRfZnMsIHJmcy0+Ym1hcCwKKwkJCQlleHQyZnNfZmlsZV9hY2xfYmxvY2socmZzLT5vbGRfZnMsIGlub2RlKSk7CisJCQlpZiAobmV3X2Jsb2NrKSB7CisJCQkJZXh0MmZzX2ZpbGVfYWNsX2Jsb2NrX3NldChyZnMtPm9sZF9mcywgaW5vZGUsCisJCQkJCQkJICBuZXdfYmxvY2spOworCQkJCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKHJmcy0+b2xkX2ZzLAorCQkJCQkJCSAgICBpbm8sIGlub2RlLCBpbm9kZV9zaXplKTsKKwkJCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKwkJCX0KKwkJfQorCisJCWlmIChleHQyZnNfaW5vZGVfaGFzX3ZhbGlkX2Jsb2NrczIocmZzLT5vbGRfZnMsIGlub2RlKSAmJgorCQkgICAgKHJmcy0+Ym1hcCB8fCBwYi5pc19kaXIpKSB7CisJCQlwYi5pbm8gPSBpbm87CisJCQlyZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMocmZzLT5vbGRfZnMsCisJCQkJCQkgICAgICAgaW5vLCAwLCBibG9ja19idWYsCisJCQkJCQkgICAgICAgcHJvY2Vzc19ibG9jaywgJnBiKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCQlpZiAocGIuZXJyb3IpIHsKKwkJCQlyZXR2YWwgPSBwYi5lcnJvcjsKKwkJCQlnb3RvIGVycm91dDsKKwkJCX0KKwkJfQorCisJCWlmIChpbm8gPD0gc3RhcnRfdG9fbW92ZSkKKwkJCWNvbnRpbnVlOyAvKiBEb24ndCBuZWVkIHRvIG1vdmUgaXQuICovCisKKwkJLyoKKwkJICogRmluZCBhIG5ldyBpbm9kZQorCQkgKi8KKwkJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShyZnMtPm5ld19mcywgMCwgMCwgMCwgJm5ld19pbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKworCQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKHJmcy0+bmV3X2ZzLCBuZXdfaW5vZGUsICsxLAorCQkJCQkgIHBiLmlzX2Rpcik7CisJCWlmIChwYi5jaGFuZ2VkKSB7CisJCQkvKiBHZXQgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBpbm9kZSAqLworCQkJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGVfZnVsbChyZnMtPm9sZF9mcywgaW5vLAorCQkJCQkJaW5vZGUsIGlub2RlX3NpemUpOworCQkJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisJCX0KKwkJaW5vZGUtPmlfY3RpbWUgPSB0aW1lKDApOworCQlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChyZnMtPm9sZF9mcywgbmV3X2lub2RlLAorCQkJCQkJaW5vZGUsIGlub2RlX3NpemUpOworCQlpZiAocmV0dmFsKSBnb3RvIGVycm91dDsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19JTk9ERU1BUCkKKwkJCXByaW50ZigiSW5vZGUgbW92ZWQgJXUtPiV1XG4iLCBpbm8sIG5ld19pbm9kZSk7CisjZW5kaWYKKwkJaWYgKCFyZnMtPmltYXApIHsKKwkJCXJldHZhbCA9IGV4dDJmc19jcmVhdGVfZXh0ZW50X3RhYmxlKCZyZnMtPmltYXAsIDApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycm91dDsKKwkJfQorCQlleHQyZnNfYWRkX2V4dGVudF9lbnRyeShyZnMtPmltYXAsIGlubywgbmV3X2lub2RlKTsKKwl9CisJaW9fY2hhbm5lbF9mbHVzaChyZnMtPm9sZF9mcy0+aW8pOworCitlcnJvdXQ6CisJZXh0MmZzX2Jsb2Nrc19jb3VudF9zZXQocmZzLT5vbGRfZnMtPnN1cGVyLCBvcmlnX3NpemUpOworCWlmIChyZnMtPmJtYXApIHsKKwkJZXh0MmZzX2ZyZWVfZXh0ZW50X3RhYmxlKHJmcy0+Ym1hcCk7CisJCXJmcy0+Ym1hcCA9IDA7CisJfQorCWlmIChzY2FuKQorCQlleHQyZnNfY2xvc2VfaW5vZGVfc2NhbihzY2FuKTsKKwlpZiAoYmxvY2tfYnVmKQorCQlleHQyZnNfZnJlZV9tZW0oJmJsb2NrX2J1Zik7CisJZnJlZShpbm9kZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZXNpemUgcHJvY2Vzc2luZywgcGhhc2UgNC4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBpc3RydWN0IHsKKwlleHQyX3Jlc2l6ZV90IHJmczsKKwllcnJjb2RlX3QJZXJyOworCXVuc2lnbmVkIGludAltYXhfZGlyczsKKwl1bnNpZ25lZCBpbnQJbnVtOworfTsKKworc3RhdGljIGludCBjaGVja19hbmRfY2hhbmdlX2lub2RlcyhleHQyX2lub190IGRpciwKKwkJCQkgICBpbnQgZW50cnkgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqZGlyZW50LCBpbnQgb2Zmc2V0LAorCQkJCSAgIGludAlibG9ja3NpemUgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorCQkJCSAgIGNoYXIgKmJ1ZiBFWFQyRlNfQVRUUigodW51c2VkKSksCisJCQkJICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBpc3RydWN0ICppcyA9IChzdHJ1Y3QgaXN0cnVjdCAqKSBwcml2X2RhdGE7CisJc3RydWN0IGV4dDJfaW5vZGUgCWlub2RlOworCWV4dDJfaW5vX3QJCW5ld19pbm9kZTsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCWlmIChpcy0+cmZzLT5wcm9ncmVzcyAmJiBvZmZzZXQgPT0gMCkgeworCQlpb19jaGFubmVsX2ZsdXNoKGlzLT5yZnMtPm9sZF9mcy0+aW8pOworCQlpcy0+ZXJyID0gKGlzLT5yZnMtPnByb2dyZXNzKShpcy0+cmZzLAorCQkJCQkgICAgICBFMl9SU1pfSU5PREVfUkVGX1VQRF9QQVNTLAorCQkJCQkgICAgICArK2lzLT5udW0sIGlzLT5tYXhfZGlycyk7CisJCWlmIChpcy0+ZXJyKQorCQkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKwl9CisKKwlpZiAoIWRpcmVudC0+aW5vZGUpCisJCXJldHVybiAwOworCisJbmV3X2lub2RlID0gZXh0MmZzX2V4dGVudF90cmFuc2xhdGUoaXMtPnJmcy0+aW1hcCwgZGlyZW50LT5pbm9kZSk7CisKKwlpZiAoIW5ld19pbm9kZSkKKwkJcmV0dXJuIDA7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGlzLT5yZnMtPmZsYWdzICYgUkVTSVpFX0RFQlVHX0lOT0RFTUFQKQorCQlwcmludGYoIklub2RlIHRyYW5zbGF0ZSAoZGlyPSV1LCBuYW1lPSUuKnMsICV1LT4ldSlcbiIsCisJCSAgICAgICBkaXIsIGRpcmVudC0+bmFtZV9sZW4mMHhGRiwgZGlyZW50LT5uYW1lLAorCQkgICAgICAgZGlyZW50LT5pbm9kZSwgbmV3X2lub2RlKTsKKyNlbmRpZgorCisJZGlyZW50LT5pbm9kZSA9IG5ld19pbm9kZTsKKworCS8qIFVwZGF0ZSB0aGUgZGlyZWN0b3J5IG10aW1lIGFuZCBjdGltZSAqLworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGlzLT5yZnMtPm9sZF9mcywgZGlyLCAmaW5vZGUpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQlpbm9kZS5pX210aW1lID0gaW5vZGUuaV9jdGltZSA9IHRpbWUoMCk7CisJCWlzLT5lcnIgPSBleHQyZnNfd3JpdGVfaW5vZGUoaXMtPnJmcy0+b2xkX2ZzLCBkaXIsICZpbm9kZSk7CisJCWlmIChpcy0+ZXJyKQorCQkJcmV0dXJuIERJUkVOVF9BQk9SVDsKKwl9CisKKwlyZXR1cm4gRElSRU5UX0NIQU5HRUQ7Cit9CisKK3N0YXRpYyBlcnJjb2RlX3QgaW5vZGVfcmVmX2ZpeChleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwllcnJjb2RlX3QJCXJldHZhbDsKKwlzdHJ1Y3QgaXN0cnVjdCAJCWlzOworCisJaWYgKCFyZnMtPmltYXApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBOb3csIHdlIGl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGRpcmVjdG9yaWVzIHRvIHVwZGF0ZSB0aGUKKwkgKiBpbm9kZSByZWZlcmVuY2VzCisJICovCisJaXMubnVtID0gMDsKKwlpcy5tYXhfZGlycyA9IGV4dDJmc19kYmxpc3RfY291bnQyKHJmcy0+b2xkX2ZzLT5kYmxpc3QpOworCWlzLnJmcyA9IHJmczsKKwlpcy5lcnIgPSAwOworCisJaWYgKHJmcy0+cHJvZ3Jlc3MpIHsKKwkJcmV0dmFsID0gKHJmcy0+cHJvZ3Jlc3MpKHJmcywgRTJfUlNaX0lOT0RFX1JFRl9VUERfUEFTUywKKwkJCQkJIDAsIGlzLm1heF9kaXJzKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKworCXJldHZhbCA9IGV4dDJmc19kYmxpc3RfZGlyX2l0ZXJhdGUocmZzLT5vbGRfZnMtPmRibGlzdCwKKwkJCQkJICAgRElSRU5UX0ZMQUdfSU5DTFVERV9FTVBUWSwgMCwKKwkJCQkJICAgY2hlY2tfYW5kX2NoYW5nZV9pbm9kZXMsICZpcyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvdXQ7CisJaWYgKGlzLmVycikgeworCQlyZXR2YWwgPSBpcy5lcnI7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWlmIChyZnMtPnByb2dyZXNzICYmIChpcy5udW0gPCBpcy5tYXhfZGlycykpCisJCShyZnMtPnByb2dyZXNzKShyZnMsIEUyX1JTWl9JTk9ERV9SRUZfVVBEX1BBU1MsCisJCQkJaXMubWF4X2RpcnMsIGlzLm1heF9kaXJzKTsKKworZXJyb3V0OgorCWV4dDJmc19mcmVlX2V4dGVudF90YWJsZShyZnMtPmltYXApOworCXJmcy0+aW1hcCA9IDA7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFJlc2l6ZSBwcm9jZXNzaW5nLCBwaGFzZSA1LgorICoKKyAqIEluIHRoaXMgcGhhc2Ugd2UgYWN0dWFsbHkgbW92ZSB0aGUgaW5vZGUgdGFibGUgYXJvdW5kLCBhbmQgdGhlbgorICogdXBkYXRlIHRoZSBzdW1tYXJ5IHN0YXRpc3RpY3MuICBUaGlzIGlzIHNjYXJ5LCBzaW5jZSBhYm9ydGluZyBoZXJlCisgKiB3aWxsIHBvdGVudGlhbGx5IHNjcmFtYmxlIHRoZSBmaWxlc3lzdGVtLiAgKFdlIGFyZSBtb3ZpbmcgdGhlCisgKiBpbm9kZSB0YWJsZXMgYXJvdW5kIGluIHBsYWNlLCBhbmQgc28gdGhlIHBvdGVudGlhbCBmb3IgbG9zdCBkYXRhLAorICogb3IgYXQgdGhlIHZlcnkgbGVhc3Qgc2NyYW1ibGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIGZpbGVuYW1lcyBhbmQKKyAqIGlub2RlIG51bWJlcnMgaXMgdmVyeSBoaWdoIGluIGNhc2Ugb2YgYSBwb3dlciBmYWlsdXJlIGhlcmUuKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisKKy8qCisgKiBBIHZlcnkgc2Nhcnkgcm91dGluZSAtLS0gdGhpcyBvbmUgbW92ZXMgdGhlIGlub2RlIHRhYmxlIGFyb3VuZCEhIQorICoKKyAqIEFmdGVyIHRoaXMgeW91IGhhdmUgdG8gdXNlIHRoZSByZnMtPm5ld19mcyBmaWxlIGhhbmRsZSB0byByZWFkIGFuZAorICogd3JpdGUgaW5vZGVzLgorICovCitzdGF0aWMgZXJyY29kZV90IG1vdmVfaXRhYmxlcyhleHQyX3Jlc2l6ZV90IHJmcykKK3sKKwlpbnQJCW4sIG51bSwgc2l6ZTsKKwlsb25nIGxvbmcJZGlmZjsKKwlkZ3JwX3QJCWksIG1heF9ncm91cHM7CisJZXh0Ml9maWxzeXMJZnMgPSByZnMtPm5ld19mczsKKwljaGFyCQkqY3A7CisJYmxrNjRfdAkJb2xkX2JsaywgbmV3X2JsaywgYmxrOworCWVycmNvZGVfdAlyZXR2YWw7CisJaW50CQlqLCB0b19tb3ZlLCBtb3ZlZDsKKworCW1heF9ncm91cHMgPSBmcy0+Z3JvdXBfZGVzY19jb3VudDsKKwlpZiAobWF4X2dyb3VwcyA+IHJmcy0+b2xkX2ZzLT5ncm91cF9kZXNjX2NvdW50KQorCQltYXhfZ3JvdXBzID0gcmZzLT5vbGRfZnMtPmdyb3VwX2Rlc2NfY291bnQ7CisKKwlzaXplID0gZnMtPmJsb2Nrc2l6ZSAqIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCWlmICghcmZzLT5pdGFibGVfYnVmKSB7CisJCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemUsICZyZnMtPml0YWJsZV9idWYpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKgorCSAqIEZpZ3VyZSBvdXQgaG93IG1hbnkgaW5vZGUgdGFibGVzIHdlIG5lZWQgdG8gbW92ZQorCSAqLworCXRvX21vdmUgPSBtb3ZlZCA9IDA7CisJZm9yIChpPTA7IGkgPCBtYXhfZ3JvdXBzOyBpKyspCisJCWlmIChleHQyZnNfaW5vZGVfdGFibGVfbG9jKHJmcy0+b2xkX2ZzLCBpKSAhPQorCQkgICAgZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSkpCisJCQl0b19tb3ZlKys7CisKKwlpZiAodG9fbW92ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCXJldHZhbCA9IHJmcy0+cHJvZ3Jlc3MocmZzLCBFMl9SU1pfTU9WRV9JVEFCTEVfUEFTUywKKwkJCQkgICAgICAgMCwgdG9fbW92ZSk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm91dDsKKwl9CisKKwlyZnMtPm9sZF9mcy0+ZmxhZ3MgfD0gRVhUMl9GTEFHX01BU1RFUl9TQl9PTkxZOworCisJZm9yIChpPTA7IGkgPCBtYXhfZ3JvdXBzOyBpKyspIHsKKwkJb2xkX2JsayA9IGV4dDJmc19pbm9kZV90YWJsZV9sb2MocmZzLT5vbGRfZnMsIGkpOworCQluZXdfYmxrID0gZXh0MmZzX2lub2RlX3RhYmxlX2xvYyhmcywgaSk7CisJCWRpZmYgPSBuZXdfYmxrIC0gb2xkX2JsazsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19JVEFCTEVNT1ZFKQorCQkJcHJpbnRmKCJJdGFibGUgbW92ZSBncm91cCAlZCBibG9jayAlbGx1LT4lbGx1IChkaWZmICVsbGQpXG4iLAorCQkJICAgICAgIGksIG9sZF9ibGssIG5ld19ibGssIGRpZmYpOworI2VuZGlmCisKKwkJaWYgKCFkaWZmKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gaW9fY2hhbm5lbF9yZWFkX2JsazY0KGZzLT5pbywgb2xkX2JsaywKKwkJCQkJICAgICAgIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLAorCQkJCQkgICAgICAgcmZzLT5pdGFibGVfYnVmKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyb3V0OworCQkvKgorCQkgKiBUaGUgZW5kIG9mIHRoZSBpbm9kZSB0YWJsZSBzZWdtZW50IG9mdGVuIGNvbnRhaW5zCisJCSAqIGFsbCB6ZXJvcywgYW5kIHdlJ3JlIG9mdGVuIG9ubHkgbW92aW5nIHRoZSBpbm9kZQorCQkgKiB0YWJsZSBkb3duIGEgYmxvY2sgb3IgdHdvLiAgSWYgc28sIHdlIGNhbiBvcHRpbWl6ZQorCQkgKiB0aGluZ3MgYnkgbm90IHJld3JpdGluZyBibG9ja3MgdGhhdCB3ZSBrbm93IHRvIGJlIHplcm8KKwkJICogYWxyZWFkeS4KKwkJICovCisJCWZvciAoY3AgPSByZnMtPml0YWJsZV9idWYrc2l6ZS0xLCBuPTA7IG4gPCBzaXplOyBuKyssIGNwLS0pCisJCQlpZiAoKmNwKQorCQkJCWJyZWFrOworCQluID0gbiA+PiBFWFQyX0JMT0NLX1NJWkVfQklUUyhmcy0+c3VwZXIpOworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19JVEFCTEVNT1ZFKQorCQkJcHJpbnRmKCIlZCBibG9ja3Mgb2YgemVyb3MuLi5cbiIsIG4pOworI2VuZGlmCisJCW51bSA9IGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwOworCQlpZiAobiA+IGRpZmYpCisJCQludW0gLT0gbjsKKworCQlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgbmV3X2JsaywKKwkJCQkJCW51bSwgcmZzLT5pdGFibGVfYnVmKTsKKwkJaWYgKHJldHZhbCkgeworCQkJaW9fY2hhbm5lbF93cml0ZV9ibGs2NChmcy0+aW8sIG9sZF9ibGssCisJCQkJCSAgICAgICBudW0sIHJmcy0+aXRhYmxlX2J1Zik7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQlpZiAobiA+IGRpZmYpIHsKKwkJCXJldHZhbCA9IGlvX2NoYW5uZWxfd3JpdGVfYmxrNjQoZnMtPmlvLAorCQkJICAgICAgb2xkX2JsayArIGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwLAorCQkJICAgICAgZGlmZiwgKHJmcy0+aXRhYmxlX2J1ZiArCisJCQkJICAgICAoZnMtPmlub2RlX2Jsb2Nrc19wZXJfZ3JvdXAgLSBkaWZmKSAqCisJCQkJICAgICBmcy0+YmxvY2tzaXplKSk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gZXJyb3V0OworCQl9CisKKwkJZm9yIChibGsgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKHJmcy0+b2xkX2ZzLCBpKSwgaj0wOworCQkgICAgIGogPCBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCA7IGorKywgYmxrKyspCisJCQlleHQyZnNfYmxvY2tfYWxsb2Nfc3RhdHMyKGZzLCBibGssIC0xKTsKKworCQlleHQyZnNfaW5vZGVfdGFibGVfbG9jX3NldChyZnMtPm9sZF9mcywgaSwgbmV3X2Jsayk7CisJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KHJmcy0+b2xkX2ZzLCBpKTsKKwkJZXh0MmZzX21hcmtfc3VwZXJfZGlydHkocmZzLT5vbGRfZnMpOworCQlleHQyZnNfZmx1c2gocmZzLT5vbGRfZnMpOworCisJCWlmIChyZnMtPnByb2dyZXNzKSB7CisJCQlyZXR2YWwgPSByZnMtPnByb2dyZXNzKHJmcywgRTJfUlNaX01PVkVfSVRBQkxFX1BBU1MsCisJCQkJCSAgICAgICArK21vdmVkLCB0b19tb3ZlKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisJbWFya190YWJsZV9ibG9ja3MoZnMsIGZzLT5ibG9ja19tYXApOworCWV4dDJmc19mbHVzaChmcyk7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKHJmcy0+ZmxhZ3MgJiBSRVNJWkVfREVCVUdfSVRBQkxFTU9WRSkKKwkJcHJpbnRmKCJJbm9kZSB0YWJsZSBtb3ZlIGZpbmlzaGVkLlxuIik7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworZXJyb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGaXggdGhlIHJlc2l6ZSBpbm9kZQorICovCitzdGF0aWMgZXJyY29kZV90IGZpeF9yZXNpemVfaW5vZGUoZXh0Ml9maWxzeXMgZnMpCit7CisJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisJZXJyY29kZV90CQlyZXR2YWw7CisJY2hhcgkJCSpibG9ja19idWYgPSBOVUxMOworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYKKwkgICAgICBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oZnMtPmJsb2Nrc2l6ZSwgJmJsb2NrX2J1Zik7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShmcywgRVhUMl9SRVNJWkVfSU5PLCAmaW5vZGUpOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJZXh0MmZzX2libGtfc2V0KGZzLCAmaW5vZGUsIDEpOworCisJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGZzLCBFWFQyX1JFU0laRV9JTk8sICZpbm9kZSk7CisJaWYgKHJldHZhbCkgZ290byBlcnJvdXQ7CisKKwlpZiAoIWlub2RlLmlfYmxvY2tbRVhUMl9ESU5EX0JMT0NLXSkgeworCQkvKgorCQkgKiBBdm9pZCB6ZXJvaW5nIG91dCBibG9jayAjMDsgdGhhdCdzIHJ1ZGUuICBUaGlzCisJCSAqIHNob3VsZCBuZXZlciBoYXBwZW4gYW55d2F5IHNpbmNlIHRoZSBmaWxlc3lzdGVtCisJCSAqIHNob3VsZCBiZSBmc2NrJ2VkIGFuZCB3ZSBhc3N1bWUgaXQgaXMgY29uc2lzdGVudC4KKwkJICovCisJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorCQkJXygiU2hvdWxkIG5ldmVyIGhhcHBlbjogcmVzaXplIGlub2RlIGNvcnJ1cHQhXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJbWVtc2V0KGJsb2NrX2J1ZiwgMCwgZnMtPmJsb2Nrc2l6ZSk7CisKKwlyZXR2YWwgPSBpb19jaGFubmVsX3dyaXRlX2JsazY0KGZzLT5pbywgaW5vZGUuaV9ibG9ja1tFWFQyX0RJTkRfQkxPQ0tdLAorCQkJCQkxLCBibG9ja19idWYpOworCWlmIChyZXR2YWwpIGdvdG8gZXJyb3V0OworCisJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9yZXNpemVfaW5vZGUoZnMpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3V0OworCitlcnJvdXQ6CisJaWYgKGJsb2NrX2J1ZikKKwkJZXh0MmZzX2ZyZWVfbWVtKCZibG9ja19idWYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBGaW5hbGx5LCByZWNhbGN1bGF0ZSB0aGUgc3VtbWFyeSBpbmZvcm1hdGlvbgorICovCitzdGF0aWMgZXJyY29kZV90IGV4dDJmc19jYWxjdWxhdGVfc3VtbWFyeV9zdGF0cyhleHQyX2ZpbHN5cyBmcykKK3sKKwlibGs2NF90CQlibGs7CisJZXh0Ml9pbm9fdAlpbm87CisJdW5zaWduZWQgaW50CWdyb3VwID0gMDsKKwl1bnNpZ25lZCBpbnQJY291bnQgPSAwOworCWJsazY0X3QJCXRvdGFsX2Jsb2Nrc19mcmVlID0gMDsKKwlpbnQJCXRvdGFsX2lub2Rlc19mcmVlID0gMDsKKwlpbnQJCWdyb3VwX2ZyZWUgPSAwOworCWludAkJdW5pbml0ID0gMDsKKwlibGs2NF90CQlzdXBlcl9ibGssIG9sZF9kZXNjX2JsaywgbmV3X2Rlc2NfYmxrOworCWludAkJb2xkX2Rlc2NfYmxvY2tzOworCisJLyoKKwkgKiBGaXJzdCBjYWxjdWxhdGUgdGhlIGJsb2NrIHN0YXRpc3RpY3MKKwkgKi8KKwl1bmluaXQgPSBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfQkxPQ0tfVU5JTklUKTsKKwlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncm91cCwgJnN1cGVyX2JsaywgJm9sZF9kZXNjX2JsaywKKwkJCQkgICZuZXdfZGVzY19ibGssIDApOworCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwllbHNlCisJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrcyArCisJCQlmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwlmb3IgKGJsayA9IEIyQyhmcy0+c3VwZXItPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJICAgICBibGsgPCBleHQyZnNfYmxvY2tzX2NvdW50KGZzLT5zdXBlcik7CisJICAgICBibGsgKz0gRVhUMkZTX0NMVVNURVJfUkFUSU8oZnMpKSB7CisJCWlmICgodW5pbml0ICYmCisJCSAgICAgIShFUV9DTFNUUihibGssIHN1cGVyX2JsaykgfHwKKwkJICAgICAgICgob2xkX2Rlc2NfYmxrICYmIG9sZF9kZXNjX2Jsb2NrcyAmJgorCQkJIEdFX0NMU1RSKGJsaywgb2xkX2Rlc2NfYmxrKSAmJgorCQkJIExUX0NMU1RSKGJsaywgb2xkX2Rlc2NfYmxrICsgb2xkX2Rlc2NfYmxvY2tzKSkpIHx8CisJCSAgICAgICAoKG5ld19kZXNjX2JsayAmJiBFUV9DTFNUUihibGssIG5ld19kZXNjX2JsaykpKSB8fAorCQkgICAgICAgRVFfQ0xTVFIoYmxrLCBleHQyZnNfYmxvY2tfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB8fAorCQkgICAgICAgRVFfQ0xTVFIoYmxrLCBleHQyZnNfaW5vZGVfYml0bWFwX2xvYyhmcywgZ3JvdXApKSB8fAorCQkgICAgICAgKChHRV9DTFNUUihibGssIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwKSkgJiYKKwkJCSBMVF9DTFNUUihibGssIGV4dDJmc19pbm9kZV90YWJsZV9sb2MoZnMsIGdyb3VwKQorCQkJCSAgKyBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCkpKSkpIHx8CisJCSAgICAoIWV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwMihmcy0+YmxvY2tfbWFwLCBibGspKSkgeworCQkJZ3JvdXBfZnJlZSsrOworCQkJdG90YWxfYmxvY2tzX2ZyZWUrKzsKKwkJfQorCQljb3VudCsrOworCQlpZiAoKGNvdW50ID09IGZzLT5zdXBlci0+c19jbHVzdGVyc19wZXJfZ3JvdXApIHx8CisJCSAgICBFUV9DTFNUUihibGssIGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKS0xKSkgeworCQkJZXh0MmZzX2JnX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcywgZ3JvdXAsIGdyb3VwX2ZyZWUpOworCQkJZXh0MmZzX2dyb3VwX2Rlc2NfY3N1bV9zZXQoZnMsIGdyb3VwKTsKKwkJCWdyb3VwKys7CisJCQlpZiAoZ3JvdXAgPj0gZnMtPmdyb3VwX2Rlc2NfY291bnQpCisJCQkJYnJlYWs7CisJCQljb3VudCA9IDA7CisJCQlncm91cF9mcmVlID0gMDsKKwkJCXVuaW5pdCA9IGV4dDJmc19iZ19mbGFnc190ZXN0KGZzLCBncm91cCwgRVhUMl9CR19CTE9DS19VTklOSVQpOworCQkJZXh0MmZzX3N1cGVyX2FuZF9iZ2RfbG9jMihmcywgZ3JvdXAsICZzdXBlcl9ibGssCisJCQkJCQkgICZvbGRfZGVzY19ibGssCisJCQkJCQkgICZuZXdfZGVzY19ibGssIDApOworCQkJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJCSAgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKwkJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKwkJCWVsc2UKKwkJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3MgKworCQkJCQlmcy0+c3VwZXItPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKKwkJfQorCX0KKwl0b3RhbF9ibG9ja3NfZnJlZSA9IEMyQih0b3RhbF9ibG9ja3NfZnJlZSk7CisJZXh0MmZzX2ZyZWVfYmxvY2tzX2NvdW50X3NldChmcy0+c3VwZXIsIHRvdGFsX2Jsb2Nrc19mcmVlKTsKKworCS8qCisJICogTmV4dCwgY2FsY3VsYXRlIHRoZSBpbm9kZSBzdGF0aXN0aWNzCisJICovCisJZ3JvdXBfZnJlZSA9IDA7CisJY291bnQgPSAwOworCWdyb3VwID0gMDsKKworCS8qIFByb3RlY3QgbG9vcCBmcm9tIHdyYXAtYXJvdW5kIGlmIHNfaW5vZGVzX2NvdW50IG1heGVkICovCisJdW5pbml0ID0gZXh0MmZzX2JnX2ZsYWdzX3Rlc3QoZnMsIGdyb3VwLCBFWFQyX0JHX0lOT0RFX1VOSU5JVCk7CisJZm9yIChpbm8gPSAxOyBpbm8gPD0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCAmJiBpbm8gPiAwOyBpbm8rKykgeworCQlpZiAodW5pbml0IHx8CisJCSAgICAhZXh0MmZzX2Zhc3RfdGVzdF9pbm9kZV9iaXRtYXAyKGZzLT5pbm9kZV9tYXAsIGlubykpIHsKKwkJCWdyb3VwX2ZyZWUrKzsKKwkJCXRvdGFsX2lub2Rlc19mcmVlKys7CisJCX0KKwkJY291bnQrKzsKKwkJaWYgKChjb3VudCA9PSBmcy0+c3VwZXItPnNfaW5vZGVzX3Blcl9ncm91cCkgfHwKKwkJICAgIChpbm8gPT0gZnMtPnN1cGVyLT5zX2lub2Rlc19jb3VudCkpIHsKKwkJCWV4dDJmc19iZ19mcmVlX2lub2Rlc19jb3VudF9zZXQoZnMsIGdyb3VwLCBncm91cF9mcmVlKTsKKwkJCWV4dDJmc19ncm91cF9kZXNjX2NzdW1fc2V0KGZzLCBncm91cCk7CisJCQlncm91cCsrOworCQkJaWYgKGdyb3VwID49IGZzLT5ncm91cF9kZXNjX2NvdW50KQorCQkJCWJyZWFrOworCQkJY291bnQgPSAwOworCQkJZ3JvdXBfZnJlZSA9IDA7CisJCQl1bmluaXQgPSBleHQyZnNfYmdfZmxhZ3NfdGVzdChmcywgZ3JvdXAsIEVYVDJfQkdfSU5PREVfVU5JTklUKTsKKwkJfQorCX0KKwlmcy0+c3VwZXItPnNfZnJlZV9pbm9kZXNfY291bnQgPSB0b3RhbF9pbm9kZXNfZnJlZTsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgSm91cm5hbCBtYXkgaGF2ZSBiZWVuIHJlbG9jYXRlZDsgdXBkYXRlIHRoZSBiYWNrdXAgam91cm5hbCBibG9ja3MKKyAqICBpbiB0aGUgc3VwZXJibG9jay4KKyAqLworc3RhdGljIGVycmNvZGVfdCBmaXhfc2Jfam91cm5hbF9iYWNrdXAoZXh0Ml9maWxzeXMgZnMpCit7CisJZXJyY29kZV90CSAgcmV0dmFsOworCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworCisJaWYgKCEoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ICYgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCkpCisJCXJldHVybiAwOworCisJLyogRXh0ZXJuYWwgam91cm5hbD8gTm90aGluZyB0byBkby4gKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2pvdXJuYWxfZGV2ICYmICFmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGZzLCBmcy0+c3VwZXItPnNfam91cm5hbF9pbnVtLCAmaW5vZGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJbWVtY3B5KGZzLT5zdXBlci0+c19qbmxfYmxvY2tzLCBpbm9kZS5pX2Jsb2NrLCBFWFQyX05fQkxPQ0tTKjQpOworCWZzLT5zdXBlci0+c19qbmxfYmxvY2tzWzE1XSA9IGlub2RlLmlfc2l6ZV9oaWdoOworCWZzLT5zdXBlci0+c19qbmxfYmxvY2tzWzE2XSA9IGlub2RlLmlfc2l6ZTsKKwlmcy0+c3VwZXItPnNfam5sX2JhY2t1cF90eXBlID0gRVhUM19KTkxfQkFDS1VQX0JMT0NLUzsKKwlleHQyZnNfbWFya19zdXBlcl9kaXJ0eShmcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19ncm91cF9vdmVyaGVhZChleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCBncnAsCisJCQkgICAgICAgaW50IG9sZF9kZXNjX2Jsb2NrcykKK3sKKwlibGs2NF90CXN1cGVyX2Jsaywgb2xkX2Rlc2NfYmxrLCBuZXdfZGVzY19ibGs7CisJaW50IG92ZXJoZWFkOworCisJLyogaW5vZGUgdGFibGUgYmxvY2tzIHBsdXMgYWxsb2NhdGlvbiBiaXRtYXBzICovCisJb3ZlcmhlYWQgPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCArIDI7CisKKwlleHQyZnNfc3VwZXJfYW5kX2JnZF9sb2MyKGZzLCBncnAsICZzdXBlcl9ibGssCisJCQkJICAmb2xkX2Rlc2NfYmxrLCAmbmV3X2Rlc2NfYmxrLCAwKTsKKwlpZiAoKGdycCA9PSAwKSB8fCBzdXBlcl9ibGspCisJCW92ZXJoZWFkKys7CisJaWYgKG9sZF9kZXNjX2JsaykKKwkJb3ZlcmhlYWQgKz0gb2xkX2Rlc2NfYmxvY2tzOworCWVsc2UgaWYgKG5ld19kZXNjX2JsaykKKwkJb3ZlcmhlYWQrKzsKKwlyZXR1cm4gb3ZlcmhlYWQ7Cit9CisKKworLyoKKyAqIGNhbGNsdWF0ZSB0aGUgbWluaW11bSBudW1iZXIgb2YgYmxvY2tzIHRoZSBnaXZlbiBmcyBjYW4gYmUgcmVzaXplZCB0bworICovCitibGs2NF90IGNhbGN1bGF0ZV9taW5pbXVtX3Jlc2l6ZV9zaXplKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCit7CisJZXh0Ml9pbm9fdCBpbm9kZV9jb3VudDsKKwlkZ3JwX3QgZ3JvdXBzOworCWJsazY0X3QgYmxrc19uZWVkZWQsIGRhdGFfYmxvY2tzOworCWJsazY0X3QgZ3JwLCBkYXRhX25lZWRlZCwgbGFzdF9zdGFydDsKKwlibGs2NF90IG92ZXJoZWFkID0gMDsKKwlpbnQgb2xkX2Rlc2NfYmxvY2tzOworCWludCBleHRyYV9ncm91cHMgPSAwOworCWludCBmbGV4Ymdfc2l6ZSA9IDEgPDwgZnMtPnN1cGVyLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisKKwkvKgorCSAqIGZpcnN0IGZpZ3VyZSBvdXQgaG93IG1hbnkgZ3JvdXAgZGVzY3JpcHRvcnMgd2UgbmVlZCB0bworCSAqIGhhbmRsZSB0aGUgbnVtYmVyIG9mIGlub2RlcyB3ZSBoYXZlCisJICovCisJaW5vZGVfY291bnQgPSBmcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50IC0KKwkJZnMtPnN1cGVyLT5zX2ZyZWVfaW5vZGVzX2NvdW50OworCWJsa3NfbmVlZGVkID0gZXh0MmZzX2Rpdl9jZWlsKGlub2RlX2NvdW50LAorCQkJCSAgICAgIGZzLT5zdXBlci0+c19pbm9kZXNfcGVyX2dyb3VwKSAqCisJCUVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCWdyb3VwcyA9IGV4dDJmc19kaXY2NF9jZWlsKGJsa3NfbmVlZGVkLAorCQkJCSAgIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpKTsKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCXByaW50ZigiZnMgaGFzICVkIGlub2RlcywgJWQgZ3JvdXBzIHJlcXVpcmVkLlxuIiwKKwkJICAgICAgIGlub2RlX2NvdW50LCBncm91cHMpOworI2VuZGlmCisKKwkvKgorCSAqIG51bWJlciBvZiBvbGQtc3R5bGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBibG9ja3MKKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKwkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CisJZWxzZQorCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3MgKworCQkJZnMtPnN1cGVyLT5zX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisKKwkvKiBjYWxjdWxhdGUgaG93IG1hbnkgYmxvY2tzIGFyZSBuZWVkZWQgZm9yIGRhdGEgKi8KKwlkYXRhX25lZWRlZCA9IGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCWV4dDJmc19mcmVlX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCisJZm9yIChncnAgPSAwOyBncnAgPCBmcy0+Z3JvdXBfZGVzY19jb3VudDsgZ3JwKyspCisJCWRhdGFfbmVlZGVkIC09IGNhbGNfZ3JvdXBfb3ZlcmhlYWQoZnMsIGdycCwgb2xkX2Rlc2NfYmxvY2tzKTsKKyNpZmRlZiBSRVNJWkUyRlNfREVCVUcKKwlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCXByaW50ZigiZnMgcmVxdWlyZXMgJWxsdSBkYXRhIGJsb2Nrcy5cbiIsIGRhdGFfbmVlZGVkKTsKKyNlbmRpZgorCisJLyoKKwkgKiBGb3IgZXh0NCB3ZSBuZWVkIHRvIGFsbG93IGZvciB1cCB0byBhIGZsZXhfYmcgd29ydGggb2YKKwkgKiBpbm9kZSB0YWJsZXMgb2Ygc2xhY2sgc3BhY2Ugc28gdGhlIHJlc2l6ZSBvcGVyYXRpb24gY2FuIGJlCisJICogZ3VhcmFudGVlZCB0byBmaW5pc2guCisJICovCisJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpIHsKKwkJZXh0cmFfZ3JvdXBzID0gZmxleGJnX3NpemUgLSAoZ3JvdXBzICYgKGZsZXhiZ19zaXplIC0gMSkpOworCQlkYXRhX25lZWRlZCArPSBmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cCAqIGV4dHJhX2dyb3VwczsKKwkJZXh0cmFfZ3JvdXBzID0gZ3JvdXBzICUgZmxleGJnX3NpemU7CisJfQorCisJLyoKKwkgKiBmaWd1cmUgb3V0IGhvdyBtYW55IGRhdGEgYmxvY2tzIHdlIGhhdmUgZ2l2ZW4gdGhlIG51bWJlciBvZiBncm91cHMKKwkgKiB3ZSBuZWVkIGZvciBvdXIgaW5vZGVzCisJICovCisJZGF0YV9ibG9ja3MgPSBncm91cHMgKiBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKTsKKwlsYXN0X3N0YXJ0ID0gMDsKKwlmb3IgKGdycCA9IDA7IGdycCA8IGdyb3VwczsgZ3JwKyspIHsKKwkJb3ZlcmhlYWQgPSBjYWxjX2dyb3VwX292ZXJoZWFkKGZzLCBncnAsIG9sZF9kZXNjX2Jsb2Nrcyk7CisKKwkJLyoKKwkJICogd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHN0b3JlIGluCisJCSAqIHRoZSBncm91cHMgbGVhZGluZyB1cCB0byB0aGUgbGFzdCBncm91cCBzbyB3ZSBjYW4gZGV0ZXJtaW5lCisJCSAqIGhvdyBiaWcgdGhlIGxhc3QgZ3JvdXAgbmVlZHMgdG8gYmUKKwkJICovCisJCWlmIChncnAgIT0gKGdyb3VwcyAtIDEpKQorCQkJbGFzdF9zdGFydCArPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAtCisJCQkJb3ZlcmhlYWQ7CisKKwkJZGF0YV9ibG9ja3MgLT0gb3ZlcmhlYWQ7CisJfQorI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJcHJpbnRmKCJXaXRoICVkIGdyb3VwKHMpLCB3ZSBoYXZlICVsbHUgYmxvY2tzIGF2YWlsYWJsZS5cbiIsCisJCSAgICAgICBncm91cHMsIGRhdGFfYmxvY2tzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBpZiB3ZSBuZWVkIG1vcmUgZ3JvdXAgZGVzY3JpcHRvcnMgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZSBvdXIgZGF0YQorCSAqIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlbSBoZXJlCisJICovCisJd2hpbGUgKGRhdGFfbmVlZGVkID4gZGF0YV9ibG9ja3MpIHsKKwkJYmxrNjRfdCByZW1haW5kZXIgPSBkYXRhX25lZWRlZCAtIGRhdGFfYmxvY2tzOworCQlkZ3JwX3QgZXh0cmFfZ3JwczsKKworCQkvKiBmaWd1cmUgb3V0IGhvdyBtYW55IG1vcmUgZ3JvdXBzIHdlIG5lZWQgZm9yIHRoZSBkYXRhICovCisJCWV4dHJhX2dycHMgPSBleHQyZnNfZGl2NjRfY2VpbChyZW1haW5kZXIsCisJCQkJCSAgICAgICBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSk7CisKKwkJZGF0YV9ibG9ja3MgKz0gZXh0cmFfZ3JwcyAqIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCisJCS8qIG9rIHdlIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlIGxhc3QgZ3JvdXAgKi8KKwkJb3ZlcmhlYWQgPSBjYWxjX2dyb3VwX292ZXJoZWFkKGZzLCBncm91cHMtMSwgb2xkX2Rlc2NfYmxvY2tzKTsKKwkJbGFzdF9zdGFydCArPSBFWFQyX0JMT0NLU19QRVJfR1JPVVAoZnMtPnN1cGVyKSAtIG92ZXJoZWFkOworCisJCWZvciAoZ3JwID0gZ3JvdXBzOyBncnAgPCBncm91cHMrZXh0cmFfZ3JwczsgZ3JwKyspIHsKKwkJCW92ZXJoZWFkID0gY2FsY19ncm91cF9vdmVyaGVhZChmcywgZ3JwLAorCQkJCQkJICAgICAgIG9sZF9kZXNjX2Jsb2Nrcyk7CisKKwkJCS8qCisJCQkgKiBhZ2Fpbiwgd2UgbmVlZCB0byBzZWUgaG93IG11Y2ggZGF0YSB3ZSBjcmFtIGludG8KKwkJCSAqIGFsbCBvZiB0aGUgZ3JvdXBzIGxlYWRpbmcgdXAgdG8gdGhlIGxhc3QgZ3JvdXAKKwkJCSAqLworCQkJaWYgKGdycCAhPSAoZ3JvdXBzICsgZXh0cmFfZ3JwcyAtIDEpKQorCQkJCWxhc3Rfc3RhcnQgKz0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKGZzLT5zdXBlcikKKwkJCQkJLSBvdmVyaGVhZDsKKworCQkJZGF0YV9ibG9ja3MgLT0gb3ZlcmhlYWQ7CisJCX0KKworCQlncm91cHMgKz0gZXh0cmFfZ3JwczsKKwkJZXh0cmFfZ3JvdXBzICs9IGV4dHJhX2dycHM7CisJCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdAorCQkJJiBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRworCQkgICAgJiYgZXh0cmFfZ3JvdXBzID4gZmxleGJnX3NpemUpIHsKKwkJCS8qCisJCQkgKiBGb3IgZXh0NCB3ZSBuZWVkIHRvIGFsbG93IGZvciB1cCB0byBhIGZsZXhfYmcgd29ydGgKKwkJCSAqIG9mIGlub2RlIHRhYmxlcyBvZiBzbGFjayBzcGFjZSBzbyB0aGUgcmVzaXplCisJCQkgKiBvcGVyYXRpb24gY2FuIGJlIGd1YXJhbnRlZWQgdG8gZmluaXNoLgorCQkJICovCisJCQlleHRyYV9ncm91cHMgPSBmbGV4Ymdfc2l6ZSAtCisJCQkJCQkoZ3JvdXBzICYgKGZsZXhiZ19zaXplIC0gMSkpOworCQkJZGF0YV9uZWVkZWQgKz0gKGZzLT5pbm9kZV9ibG9ja3NfcGVyX2dyb3VwICoKKwkJCQkJZXh0cmFfZ3JvdXBzKTsKKwkJCWV4dHJhX2dyb3VwcyA9IGdyb3VwcyAlIGZsZXhiZ19zaXplOworCQl9CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJCXByaW50ZigiQWRkZWQgJWQgZXh0cmEgZ3JvdXAocyksICIKKwkJCSAgICAgICAiZGF0YV9uZWVkZWQgJWxsdSwgZGF0YV9ibG9ja3MgJWxsdSwgIgorCQkJICAgICAgICJsYXN0X3N0YXJ0ICVsbHVcbiIsCisJCQkgICAgICAgZXh0cmFfZ3JwcywgZGF0YV9uZWVkZWQsIGRhdGFfYmxvY2tzLAorCQkJICAgICAgIGxhc3Rfc3RhcnQpOworI2VuZGlmCisJfQorCisJLyogbm93IGZvciB0aGUgZnVuIHZvb2RvbyAqLworCW92ZXJoZWFkID0gY2FsY19ncm91cF9vdmVyaGVhZChmcywgZ3JvdXBzLTEsIG9sZF9kZXNjX2Jsb2Nrcyk7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGZsYWdzICYgUkVTSVpFX0RFQlVHX01JTl9DQUxDKQorCQlwcmludGYoIkxhc3QgZ3JvdXAncyBvdmVyaGVhZCBpcyAlbGx1XG4iLCBvdmVyaGVhZCk7CisjZW5kaWYKKworCS8qCisJICogaWYgdGhpcyBpcyB0aGUgY2FzZSB0aGVuIHRoZSBsYXN0IGdyb3VwIGlzIGdvaW5nIHRvIGhhdmUgZGF0YSBpbiBpdAorCSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBsYXN0IGdyb3VwIGFjY29yZGluZ2x5CisJICovCisJaWYgKGxhc3Rfc3RhcnQgPCBkYXRhX25lZWRlZCkgeworCQlibGs2NF90IHJlbWFpbmRlciA9IGRhdGFfbmVlZGVkIC0gbGFzdF9zdGFydDsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCQlpZiAoZmxhZ3MgJiBSRVNJWkVfREVCVUdfTUlOX0NBTEMpCisJCQlwcmludGYoIk5lZWQgJWxsdSBkYXRhIGJsb2NrcyBpbiBsYXN0IGdyb3VwXG4iLAorCQkJICAgICAgIHJlbWFpbmRlcik7CisjZW5kaWYKKwkJLyoKKwkJICogNTAgaXMgYSBtYWdpYyBudW1iZXIgdGhhdCBta2ZzL3Jlc2l6ZSB1c2VzIHRvIHNlZSBpZiBpdHMKKwkJICogZXZlbiB3b3J0aCBtYWtpbmcvcmVzaXppbmcgdGhlIGZzLiAgYmFzaWNhbGx5IHlvdSBuZWVkIHRvCisJCSAqIGhhdmUgYXQgbGVhc3QgNTAgYmxvY2tzIGluIGFkZGl0aW9uIHRvIHRoZSBibG9ja3MgbmVlZGVkCisJCSAqIGZvciB0aGUgbWV0YWRhdGEgaW4gdGhlIGxhc3QgZ3JvdXAKKwkJICovCisJCWlmIChyZW1haW5kZXIgPiA1MCkKKwkJCW92ZXJoZWFkICs9IHJlbWFpbmRlcjsKKwkJZWxzZQorCQkJb3ZlcmhlYWQgKz0gNTA7CisJfSBlbHNlCisJCW92ZXJoZWFkICs9IDUwOworCisJb3ZlcmhlYWQgKz0gZnMtPnN1cGVyLT5zX2ZpcnN0X2RhdGFfYmxvY2s7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJaWYgKGZsYWdzICYgUkVTSVpFX0RFQlVHX01JTl9DQUxDKQorCQlwcmludGYoIkZpbmFsIHNpemUgb2YgbGFzdCBncm91cCBpcyAlbGxkXG4iLCBvdmVyaGVhZCk7CisjZW5kaWYKKworCS8qCisJICogc2luY2Ugb3VyIGxhc3QgZ3JvdXAgZG9lc24ndCBoYXZlIHRvIGJlIEJMT0NLU19QRVJfR1JPVVAgbGFyZ2UsIHdlCisJICogb25seSBkbyBncm91cHMtMSwgYW5kIHRoZW4gYWRkIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5lZWRlZCB0bworCSAqIGhhbmRsZSB0aGUgZ3JvdXAgZGVzY3JpcHRvciBtZXRhZGF0YStkYXRhIHRoYXQgd2UgbmVlZAorCSAqLworCWJsa3NfbmVlZGVkID0gKGdyb3Vwcy0xKSAqIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChmcy0+c3VwZXIpOworCWJsa3NfbmVlZGVkICs9IG92ZXJoZWFkOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYmxrc19uZWVkZWQgY292ZXJzIHRoZSBlbmQgb2YgdGhlIGlub2RlIHRhYmxlIGluCisJICogdGhlIGxhc3QgYmxvY2sgZ3JvdXAuCisJICovCisJb3ZlcmhlYWQgPSBleHQyZnNfaW5vZGVfdGFibGVfbG9jKGZzLCBncm91cHMtMSkgKworCQlmcy0+aW5vZGVfYmxvY2tzX3Blcl9ncm91cDsKKwlpZiAoYmxrc19uZWVkZWQgPCBvdmVyaGVhZCkKKwkJYmxrc19uZWVkZWQgPSBvdmVyaGVhZDsKKworI2lmZGVmIFJFU0laRTJGU19ERUJVRworCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJcHJpbnRmKCJFc3RpbWF0ZWQgYmxvY2tzIG5lZWRlZDogJWxsdVxuIiwgYmxrc19uZWVkZWQpOworI2VuZGlmCisKKwkvKgorCSAqIElmIGF0IHRoaXMgcG9pbnQgd2UndmUgYWxyZWFkeSBhZGRlZCB1cCBtb3JlICJuZWVkZWQiIHRoYW4KKwkgKiB0aGUgY3VycmVudCBzaXplLCBqdXN0IHJldHVybiBjdXJyZW50IHNpemUgYXMgbWluaW11bS4KKwkgKi8KKwlpZiAoYmxrc19uZWVkZWQgPj0gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpKQorCQlyZXR1cm4gZXh0MmZzX2Jsb2Nrc19jb3VudChmcy0+c3VwZXIpOworCS8qCisJICogV2UgbmVlZCB0byByZXNlcnZlIGEgZmV3IGV4dHJhIGJsb2NrcyBpZiBleHRlbnRzIGFyZQorCSAqIGVuYWJsZWQsIGluIGNhc2Ugd2UgbmVlZCB0byBncm93IHRoZSBleHRlbnQgdHJlZS4gIFRoZSBtb3JlCisJICogd2Ugc2hyaW5rIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG1vcmUgc3BhY2Ugd2UgbmVlZC4KKwkgKi8KKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworCQlibGs2NF90IHNhZmVfbWFyZ2luID0gKGV4dDJmc19ibG9ja3NfY291bnQoZnMtPnN1cGVyKSAtCisJCQkJICAgICAgIGJsa3NfbmVlZGVkKS81MDA7CisjaWZkZWYgUkVTSVpFMkZTX0RFQlVHCisJCWlmIChmbGFncyAmIFJFU0laRV9ERUJVR19NSU5fQ0FMQykKKwkJCXByaW50ZigiRXh0ZW50cyBzYWZldHkgbWFyZ2luOiAlbGx1XG4iLCBzYWZlX21hcmdpbik7CisjZW5kaWYKKwkJYmxrc19uZWVkZWQgKz0gc2FmZV9tYXJnaW47CisJfQorCisJcmV0dXJuIGJsa3NfbmVlZGVkOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Jlc2l6ZS9yZXNpemUyZnMuaCBiL2UyZnNwcm9ncy9yZXNpemUvcmVzaXplMmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlYWI5MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvcmVzaXplMmZzLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiByZXNpemUyZnMuaCAtLS0gZXh0MiByZXNpemVyIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBUaGVvc29yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWYgSEFWRV9FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaWYgRVhUMl9GTEFUX0lOQ0xVREVTCisjaW5jbHVkZSAiZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy5oIgorI2luY2x1ZGUgImUycC5oIgorI2Vsc2UKKyNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyNpbmNsdWRlICJlMnAvZTJwLmgiCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9OTFMKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjZGVmaW5lIF8oYSkgKGdldHRleHQgKGEpKQorI2lmZGVmIGdldHRleHRfbm9vcAorI2RlZmluZSBOXyhhKSBnZXR0ZXh0X25vb3AgKGEpCisjZWxzZQorI2RlZmluZSBOXyhhKSAoYSkKKyNlbmRpZgorI2lmbmRlZiBOTFNfQ0FUX05BTUUKKyNkZWZpbmUgTkxTX0NBVF9OQU1FICJlMmZzcHJvZ3MiCisjZW5kaWYKKyNpZm5kZWYgTE9DQUxFRElSCisjZGVmaW5lIExPQ0FMRURJUiAiL3Vzci9zaGFyZS9sb2NhbGUiCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIF8oYSkgKGEpCisjZGVmaW5lIE5fKGEpIGEKKyNlbmRpZgorCisKKy8qCisgKiBGb3IgdGhlIGV4dGVudCBtYXAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2V4dDJfZXh0ZW50ICpleHQyX2V4dGVudDsKKworLyoKKyAqIEZvciB0aGUgc2ltcGxlIHByb2dyZXNzIG1ldGVyCisgKi8KK3R5cGVkZWYgc3RydWN0IGV4dDJfc2ltX3Byb2dyZXNzICpleHQyX3NpbV9wcm9nbWV0ZXI7CisKKy8qCisgKiBGbGFncyBmb3IgdGhlIHJlc2l6ZXI7IG1vc3QgYXJlIGRlYnVnZ2luZyBmbGFncyBvbmx5CisgKi8KKyNkZWZpbmUgUkVTSVpFX0RFQlVHX0lPCQkJMHgwMDAxCisjZGVmaW5lIFJFU0laRV9ERUJVR19CTU9WRQkJMHgwMDAyCisjZGVmaW5lIFJFU0laRV9ERUJVR19JTk9ERU1BUAkJMHgwMDA0CisjZGVmaW5lIFJFU0laRV9ERUJVR19JVEFCTEVNT1ZFCQkweDAwMDgKKyNkZWZpbmUgUkVTSVpFX0RFQlVHX1JUUkFDSwkJMHgwMDEwCisjZGVmaW5lIFJFU0laRV9ERUJVR19NSU5fQ0FMQwkJMHgwMDIwCisKKyNkZWZpbmUgUkVTSVpFX1BFUkNFTlRfQ09NUExFVEUJCTB4MDEwMAorI2RlZmluZSBSRVNJWkVfVkVSQk9TRQkJCTB4MDIwMAorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBob3cgbXVjaCByZXNvdXJjZXMgaGF2ZQorICogYmVlbiB1c2VkIGZvciBhIHBhcnRpY3VsYXIgcmVzaXplMmZzIHBhc3MuCisgKi8KK3N0cnVjdCByZXNvdXJjZV90cmFjayB7CisJY29uc3QgY2hhciAqZGVzYzsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0OworCXN0cnVjdCB0aW1ldmFsIHVzZXJfc3RhcnQ7CisJc3RydWN0IHRpbWV2YWwgc3lzdGVtX3N0YXJ0OworCXZvaWQJKmJya19zdGFydDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfcmVhZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfd3JpdHRlbjsKK307CisKKy8qCisgKiBUaGUgY29yZSBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBleHQyIHJlc2l6ZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0ICpleHQyX3Jlc2l6ZV90OworCitzdHJ1Y3QgZXh0Ml9yZXNpemVfc3RydWN0IHsKKwlleHQyX2ZpbHN5cwlvbGRfZnM7CisJZXh0Ml9maWxzeXMJbmV3X2ZzOworCWV4dDJmc19ibG9ja19iaXRtYXAgcmVzZXJ2ZV9ibG9ja3M7CisJZXh0MmZzX2Jsb2NrX2JpdG1hcCBtb3ZlX2Jsb2NrczsKKwlleHQyX2V4dGVudAlibWFwOworCWV4dDJfZXh0ZW50CWltYXA7CisJYmxrNjRfdAkJbmVlZGVkX2Jsb2NrczsKKwlpbnQJCWZsYWdzOworCWNoYXIJCSppdGFibGVfYnVmOworCisJLyoKKwkgKiBGb3IgdGhlIGJsb2NrIGFsbG9jYXRvcgorCSAqLworCWJsazY0X3QJCW5ld19ibGs7CisJaW50CQlhbGxvY19zdGF0ZTsKKworCS8qCisJICogRm9yIHRoZSBwcm9ncmVzcyBtZXRlcgorCSAqLworCWVycmNvZGVfdAkoKnByb2dyZXNzKShleHQyX3Jlc2l6ZV90IHJmcywgaW50IHBhc3MsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgY3VyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1heCk7CisJdm9pZAkJKnByb2dfZGF0YTsKK307CisKKy8qCisgKiBQcm9ncmVzcyBwYXNzIG51bWJlcnMuLi4KKyAqLworI2RlZmluZSBFMl9SU1pfRVhURU5EX0lUQUJMRV9QQVNTCTEKKyNkZWZpbmUgRTJfUlNaX0JMT0NLX1JFTE9DX1BBU1MJCTIKKyNkZWZpbmUgRTJfUlNaX0lOT0RFX1NDQU5fUEFTUwkJMworI2RlZmluZSBFMl9SU1pfSU5PREVfUkVGX1VQRF9QQVNTCTQKKyNkZWZpbmUgRTJfUlNaX01PVkVfSVRBQkxFX1BBU1MJCTUKKworCisvKiBwcm90b3R5cGVzICovCitleHRlcm4gZXJyY29kZV90IHJlc2l6ZV9mcyhleHQyX2ZpbHN5cyBmcywgYmxrNjRfdCAqbmV3X3NpemUsIGludCBmbGFncywKKwkJCSAgIGVycmNvZGVfdAkoKnByb2dyZXNzKShleHQyX3Jlc2l6ZV90IHJmcywKKwkJCQkJICAgIGludCBwYXNzLCB1bnNpZ25lZCBsb25nIGN1ciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWF4KSk7CisKK2V4dGVybiBlcnJjb2RlX3QgYWRqdXN0X2ZzX2luZm8oZXh0Ml9maWxzeXMgZnMsIGV4dDJfZmlsc3lzIG9sZF9mcywKKwkJCQlleHQyZnNfYmxvY2tfYml0bWFwIHJlc2VydmVfYmxvY2tzLAorCQkJCWJsazY0X3QgbmV3X3NpemUpOworZXh0ZXJuIGJsazY0X3QgY2FsY3VsYXRlX21pbmltdW1fcmVzaXplX3NpemUoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncyk7CisKKworLyogZXh0ZW50LmMgKi8KK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2NyZWF0ZV9leHRlbnRfdGFibGUoZXh0Ml9leHRlbnQgKnJldF9leHRlbnQsCisJCQkJCSAgICBfX3U2NCBzaXplKTsKK2V4dGVybiB2b2lkIGV4dDJmc19mcmVlX2V4dGVudF90YWJsZShleHQyX2V4dGVudCBleHRlbnQpOworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfYWRkX2V4dGVudF9lbnRyeShleHQyX2V4dGVudCBleHRlbnQsCisJCQkJCSBfX3U2NCBvbGRfbG9jLCBfX3U2NCBuZXdfbG9jKTsKK2V4dGVybiBfX3U2NCBleHQyZnNfZXh0ZW50X3RyYW5zbGF0ZShleHQyX2V4dGVudCBleHRlbnQsIF9fdTY0IG9sZF9sb2MpOworZXh0ZXJuIHZvaWQgZXh0MmZzX2V4dGVudF9kdW1wKGV4dDJfZXh0ZW50IGV4dGVudCwgRklMRSAqb3V0KTsKK2V4dGVybiBlcnJjb2RlX3QgZXh0MmZzX2l0ZXJhdGVfZXh0ZW50KGV4dDJfZXh0ZW50IGV4dGVudCwgX191NjQgKm9sZF9sb2MsCisJCQkJICAgICAgIF9fdTY0ICpuZXdfbG9jLCBfX3U2NCAqc2l6ZSk7CisKKy8qIG1haW4uYyAqLworZXh0ZXJuIGNoYXIgKnByb2dyYW1fbmFtZTsKKworLyogb25saW5lLmMgKi8KK2V4dGVybiBlcnJjb2RlX3Qgb25saW5lX3Jlc2l6ZV9mcyhleHQyX2ZpbHN5cyBmcywgY29uc3QgY2hhciAqbXRwdCwKKwkJCQkgIGJsazY0X3QgKm5ld19zaXplLCBpbnQgZmxhZ3MpOworCisvKiByZXNvdXJjZV90cmFjay5jICovCitleHRlcm4gdm9pZCBpbml0X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2ssIGNvbnN0IGNoYXIgKmRlc2MsCisJCQkJaW9fY2hhbm5lbCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIHByaW50X3Jlc291cmNlX3RyYWNrKGV4dDJfcmVzaXplX3QgcmZzLAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfdHJhY2sgKnRyYWNrLAorCQkJCSBpb19jaGFubmVsIGNoYW5uZWwpOworCisvKiBzaW1fcHJvZ3Jlc3MuYyAqLworZXh0ZXJuIGVycmNvZGVfdCBleHQyZnNfcHJvZ3Jlc3NfaW5pdChleHQyX3NpbV9wcm9nbWV0ZXIgKnJldF9wcm9nLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCSAgICAgIGludCBsYWJlbHdpZHRoLCBpbnQgYmFyd2lkdGgsCisJCQkJICAgICAgX191MzIgbWF4ZG9uZSwgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIGV4dDJmc19wcm9ncmVzc191cGRhdGUoZXh0Ml9zaW1fcHJvZ21ldGVyIHByb2csCisJCQkJCV9fdTMyIGN1cnJlbnQpOworZXh0ZXJuIHZvaWQgZXh0MmZzX3Byb2dyZXNzX2Nsb3NlKGV4dDJfc2ltX3Byb2dtZXRlciBwcm9nKTsKKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcmVzaXplL3Jlc291cmNlX3RyYWNrLmMgYi9lMmZzcHJvZ3MvcmVzaXplL3Jlc291cmNlX3RyYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwOGM5NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvcmVzb3VyY2VfdHJhY2suYwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIHJlc291cmNlX3RyYWNrLmMgLS0tIHJlc291cmNlIHRyYWNraW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIGJ5IFRoZW9kb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKworI2luY2x1ZGUgInJlc2l6ZTJmcy5oIgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKwordm9pZCBpbml0X3Jlc291cmNlX3RyYWNrKHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2ssIGNvbnN0IGNoYXIgKmRlc2MsCisJCQkgaW9fY2hhbm5lbCBjaGFubmVsKQoreworI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisJc3RydWN0IHJ1c2FnZSByOworI2VuZGlmCisJaW9fc3RhdHMgaW9fc3RhcnQgPSAwOworCisJdHJhY2stPmRlc2MgPSBkZXNjOworCXRyYWNrLT5icmtfc3RhcnQgPSBzYnJrKDApOworCWdldHRpbWVvZmRheSgmdHJhY2stPnRpbWVfc3RhcnQsIDApOworI2lmZGVmIEhBVkVfR0VUUlVTQUdFCisjaWZkZWYgc3VuCisJbWVtc2V0KCZyLCAwLCBzaXplb2Yoc3RydWN0IHJ1c2FnZSkpOworI2VuZGlmCisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmcik7CisJdHJhY2stPnVzZXJfc3RhcnQgPSByLnJ1X3V0aW1lOworCXRyYWNrLT5zeXN0ZW1fc3RhcnQgPSByLnJ1X3N0aW1lOworI2Vsc2UKKwl0cmFjay0+dXNlcl9zdGFydC50dl9zZWMgPSB0cmFjay0+dXNlcl9zdGFydC50dl91c2VjID0gMDsKKwl0cmFjay0+c3lzdGVtX3N0YXJ0LnR2X3NlYyA9IHRyYWNrLT5zeXN0ZW1fc3RhcnQudHZfdXNlYyA9IDA7CisjZW5kaWYKKwl0cmFjay0+Ynl0ZXNfcmVhZCA9IDA7CisJdHJhY2stPmJ5dGVzX3dyaXR0ZW4gPSAwOworCWlmIChjaGFubmVsICYmIGNoYW5uZWwtPm1hbmFnZXIgJiYgY2hhbm5lbC0+bWFuYWdlci0+Z2V0X3N0YXRzKQorCQljaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMoY2hhbm5lbCwgJmlvX3N0YXJ0KTsKKwlpZiAoaW9fc3RhcnQpIHsKKwkJdHJhY2stPmJ5dGVzX3JlYWQgPSBpb19zdGFydC0+Ynl0ZXNfcmVhZDsKKwkJdHJhY2stPmJ5dGVzX3dyaXR0ZW4gPSBpb19zdGFydC0+Ynl0ZXNfd3JpdHRlbjsKKwl9Cit9CisKK3N0YXRpYyBmbG9hdCB0aW1ldmFsX3N1YnRyYWN0KHN0cnVjdCB0aW1ldmFsICp0djEsCisJCQkgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHYyKQoreworCXJldHVybiAoKHR2MS0+dHZfc2VjIC0gdHYyLT50dl9zZWMpICsKKwkJKChmbG9hdCkgKHR2MS0+dHZfdXNlYyAtIHR2Mi0+dHZfdXNlYykpIC8gMTAwMDAwMCk7Cit9CisKK3ZvaWQgcHJpbnRfcmVzb3VyY2VfdHJhY2soZXh0Ml9yZXNpemVfdCByZnMsIHN0cnVjdCByZXNvdXJjZV90cmFjayAqdHJhY2ssCisJCQkgIGlvX2NoYW5uZWwgY2hhbm5lbCkKK3sKKyNpZmRlZiBIQVZFX0dFVFJVU0FHRQorCXN0cnVjdCBydXNhZ2UgcjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUFMTElORk8KKwlzdHJ1Y3QgbWFsbGluZm8JbWFsbG9jX2luZm87CisjZW5kaWYKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VuZDsKKworCWlmICgocmZzLT5mbGFncyAmIFJFU0laRV9ERUJVR19SVFJBQ0spID09IDApCisJCXJldHVybjsKKworCWdldHRpbWVvZmRheSgmdGltZV9lbmQsIDApOworCisJaWYgKHRyYWNrLT5kZXNjKQorCQlwcmludGYoIiVzOiAiLCB0cmFjay0+ZGVzYyk7CisKKyNpZmRlZiBIQVZFX01BTExJTkZPCisjZGVmaW5lIGtieXRlcyh4KQkoKCh1bnNpZ25lZCBsb25nKSh4KSArIDEwMjMpIC8gMTAyNCkKKworCW1hbGxvY19pbmZvID0gbWFsbGluZm8oKTsKKwlwcmludGYoIk1lbW9yeSB1c2VkOiAlbHVrLyVsdWsgKCVsdWsvJWx1ayksICIsCisJCWtieXRlcyhtYWxsb2NfaW5mby5hcmVuYSksIGtieXRlcyhtYWxsb2NfaW5mby5oYmxraGQpLAorCQlrYnl0ZXMobWFsbG9jX2luZm8udW9yZGJsa3MpLCBrYnl0ZXMobWFsbG9jX2luZm8uZm9yZGJsa3MpKTsKKyNlbHNlCisJcHJpbnRmKCJNZW1vcnkgdXNlZDogJWx1LCAiLAorCQkodW5zaWduZWQgbG9uZykgKCgoY2hhciAqKSBzYnJrKDApKSAtCisJCQkJICgoY2hhciAqKSB0cmFjay0+YnJrX3N0YXJ0KSkpOworI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRSVVNBR0UKKwlnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZyKTsKKworCXByaW50ZigidGltZTogJTUuMmYvJTUuMmYvJTUuMmZcbiIsCisJCXRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3V0aW1lLCAmdHJhY2stPnVzZXJfc3RhcnQpLAorCQl0aW1ldmFsX3N1YnRyYWN0KCZyLnJ1X3N0aW1lLCAmdHJhY2stPnN5c3RlbV9zdGFydCkpOworI2Vsc2UKKwlwcmludGYoImVsYXBzZWQgdGltZTogJTYuM2ZcbiIsCisJCXRpbWV2YWxfc3VidHJhY3QoJnRpbWVfZW5kLCAmdHJhY2stPnRpbWVfc3RhcnQpKTsKKyNlbmRpZgorI2RlZmluZSBtYnl0ZXMoeCkJKCgoeCkgKyAxMDQ4NTc1KSAvIDEwNDg1NzYpCisJaWYgKGNoYW5uZWwgJiYgY2hhbm5lbC0+bWFuYWdlciAmJiBjaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMpIHsKKwkJaW9fc3RhdHMgZGVsdGEgPSAwOworCQl1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNfcmVhZCA9IDA7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc193cml0dGVuID0gMDsKKworCQljaGFubmVsLT5tYW5hZ2VyLT5nZXRfc3RhdHMoY2hhbm5lbCwgJmRlbHRhKTsKKwkJaWYgKGRlbHRhKSB7CisJCQlieXRlc19yZWFkID0gZGVsdGEtPmJ5dGVzX3JlYWQgLSB0cmFjay0+Ynl0ZXNfcmVhZDsKKwkJCWJ5dGVzX3dyaXR0ZW4gPSBkZWx0YS0+Ynl0ZXNfd3JpdHRlbiAtCisJCQkJdHJhY2stPmJ5dGVzX3dyaXR0ZW47CisJCQlpZiAoYnl0ZXNfcmVhZCA9PSAwICYmIGJ5dGVzX3dyaXR0ZW4gPT0gMCkKKwkJCQlnb3RvIHNraXBfaW87CisJCQlpZiAodHJhY2stPmRlc2MpCisJCQkJcHJpbnRmKCIlczogIiwgdHJhY2stPmRlc2MpOworCQkJcHJpbnRmKCJJL08gcmVhZDogJWxsdU1CLCB3cml0ZTogJWxsdU1CLCAiCisJCQkgICAgICAgInJhdGU6ICUuMmZNQi9zXG4iLAorCQkJICAgICAgIG1ieXRlcyhieXRlc19yZWFkKSwKKwkJCSAgICAgICBtYnl0ZXMoYnl0ZXNfd3JpdHRlbiksCisJCQkgICAgICAgKGRvdWJsZSltYnl0ZXMoYnl0ZXNfcmVhZCArIGJ5dGVzX3dyaXR0ZW4pIC8KKwkJCSAgICAgICB0aW1ldmFsX3N1YnRyYWN0KCZ0aW1lX2VuZCwgJnRyYWNrLT50aW1lX3N0YXJ0KSk7CisJCX0KKwl9Citza2lwX2lvOgorCWZmbHVzaChzdGRvdXQpOworfQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvcmVzaXplL3NpbV9wcm9ncmVzcy5jIGIvZTJmc3Byb2dzL3Jlc2l6ZS9zaW1fcHJvZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2RiYTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Jlc2l6ZS9zaW1fcHJvZ3Jlc3MuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIHNpbV9wcm9ncmVzcy5jIC0tLSBzaW1wbGUgcHJvZ3Jlc3MgbWV0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggYnkgVGhlb2RvcmUgVHMnbyBhbmQKKyAqIAlQb3dlclF1ZXN0LCBJbmMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIGJ5IFRoZW9zb3JlIFRzJ28KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlICJyZXNpemUyZnMuaCIKKworc3RydWN0IGV4dDJfc2ltX3Byb2dyZXNzIHsKKwlGSUxFCSpmOworCWNoYXIJKmxhYmVsOworCWludAlsYWJlbHdpZHRoOworCWludAliYXJ3aWR0aDsKKwlfX3UzMgltYXhkb25lOworCV9fdTMyCWN1cnJlbnQ7CisJaW50CXNob3duOworCWludAlmbGFnczsKK307CisKK3N0YXRpYyBlcnJjb2RlX3QgZXh0MmZzX3Byb2dyZXNzX2Rpc3BsYXkoZXh0Ml9zaW1fcHJvZ21ldGVyIHByb2cpCit7CisJaW50CWksIHdpZHRoOworCisJZnB1dHMocHJvZy0+bGFiZWwsIHByb2ctPmYpOworCXdpZHRoID0gcHJvZy0+bGFiZWx3aWR0aCAtIHN0cmxlbihwcm9nLT5sYWJlbCk7CisJd2hpbGUgKHdpZHRoLS0gPiAwKQorCQlwdXRjKCcgJywgcHJvZy0+Zik7CisJaWYgKHByb2ctPmxhYmVsd2lkdGggKyBwcm9nLT5iYXJ3aWR0aCA+IDgwKSB7CisJCWZwdXRzKCJcbiIsIHByb2ctPmYpOworCQlmb3IgKHdpZHRoID0gcHJvZy0+bGFiZWx3aWR0aDsgd2lkdGggPiAwOyB3aWR0aC0tKQorCQkJcHV0YygnICcsIHByb2ctPmYpOworCX0KKwlmb3IgKGk9MDsgaSA8IHByb2ctPmJhcndpZHRoOyBpKyspCisJCXB1dGMoJy0nLCBwcm9nLT5mKTsKKwlmb3IgKGk9MDsgaSA8IHByb2ctPmJhcndpZHRoOyBpKyspCisJCXB1dGMoJ1xiJywgcHJvZy0+Zik7CisJZmZsdXNoKHByb2ctPmYpOworCXJldHVybiAwOworfQorCisKK3ZvaWQgZXh0MmZzX3Byb2dyZXNzX3VwZGF0ZShleHQyX3NpbV9wcm9nbWV0ZXIgcHJvZywgX191MzIgY3VycmVudCkKK3sKKwlpbnQJCW9sZF9sZXZlbCwgbGV2ZWwsIG51bSwgaTsKKworCWxldmVsID0gcHJvZy0+YmFyd2lkdGggKiBjdXJyZW50IC8gcHJvZy0+bWF4ZG9uZTsKKwlvbGRfbGV2ZWwgPSBwcm9nLT5iYXJ3aWR0aCAqIHByb2ctPmN1cnJlbnQgLyBwcm9nLT5tYXhkb25lOworCXByb2ctPmN1cnJlbnQgPSBjdXJyZW50OworCisJbnVtID0gbGV2ZWwgLSBvbGRfbGV2ZWw7CisJaWYgKG51bSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAobnVtID4gMCkgeworCQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQkJcHV0YygnWCcsIHByb2ctPmYpOworCX0gZWxzZSB7CisJCW51bSA9IC1udW07CisJCWZvciAoaT0wOyBpIDwgbnVtOyBpKyspCisJCQlwdXRjKCdcYicsIHByb2ctPmYpOworCQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQkJcHV0YygnLScsIHByb2ctPmYpOworCQlmb3IgKGk9MDsgaSA8IG51bTsgaSsrKQorCQkJcHV0YygnXGInLCBwcm9nLT5mKTsKKwl9CisJZmZsdXNoKHByb2ctPmYpOworfQorCitlcnJjb2RlX3QgZXh0MmZzX3Byb2dyZXNzX2luaXQoZXh0Ml9zaW1fcHJvZ21ldGVyICpyZXRfcHJvZywKKwkJCSAgICAgICBjb25zdCBjaGFyICpsYWJlbCwKKwkJCSAgICAgICBpbnQgbGFiZWx3aWR0aCwgaW50IGJhcndpZHRoLAorCQkJICAgICAgIF9fdTMyIG1heGRvbmUsIGludCBmbGFncykKK3sKKwlleHQyX3NpbV9wcm9nbWV0ZXIJcHJvZzsKKwllcnJjb2RlX3QJCXJldHZhbDsKKworCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKHNpemVvZihzdHJ1Y3QgZXh0Ml9zaW1fcHJvZ3Jlc3MpLCAmcHJvZyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQocHJvZywgMCwgc2l6ZW9mKHN0cnVjdCBleHQyX3NpbV9wcm9ncmVzcykpOworCisJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oc3RybGVuKGxhYmVsKSsxLCAmcHJvZy0+bGFiZWwpOworCWlmIChyZXR2YWwpIHsKKwkJZnJlZShwcm9nKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJc3RyY3B5KHByb2ctPmxhYmVsLCBsYWJlbCk7CisJcHJvZy0+bGFiZWx3aWR0aCA9IGxhYmVsd2lkdGg7CisJcHJvZy0+YmFyd2lkdGggPSBiYXJ3aWR0aDsKKwlwcm9nLT5mbGFncyA9IGZsYWdzOworCXByb2ctPm1heGRvbmUgPSBtYXhkb25lOworCXByb2ctPmN1cnJlbnQgPSAwOworCXByb2ctPnNob3duID0gMDsKKwlwcm9nLT5mID0gc3Rkb3V0OworCisJKnJldF9wcm9nID0gcHJvZzsKKworCXJldHVybiBleHQyZnNfcHJvZ3Jlc3NfZGlzcGxheShwcm9nKTsKK30KKwordm9pZCBleHQyZnNfcHJvZ3Jlc3NfY2xvc2UoZXh0Ml9zaW1fcHJvZ21ldGVyIHByb2cpCit7CisKKwlpZiAocHJvZy0+bGFiZWwpCisJCWV4dDJmc19mcmVlX21lbSgmcHJvZy0+bGFiZWwpOworCWV4dDJmc19mcmVlX21lbSgmcHJvZyk7CisJcHJpbnRmKCJcbiIpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvdGVzdC1yZXNpemUgYi9lMmZzcHJvZ3MvcmVzaXplL3Rlc3QtcmVzaXplCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3NjZmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvcmVzaXplL3Rlc3QtcmVzaXplCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCitGUz0vYmlnc2NyYXRjaC90ZXN0ZnMKK0ZFQVRVUkU9Ii1PIDY0Yml0IgorCitSRVNJWkUyRlM9L3RtcC9yZXNpemUyZnMuc3RhdGljCitNS0UyRlM9bWtlMmZzCitEVU1QRTJGUz1kdW1wZTJmcworRTJGU0NLPWUyZnNjaworCisvYmluL3JtIC1mICRGUyA7IHRvdWNoICRGUwordHJ1bmNhdGUgLXMgOFQgJEZTCiskTUtFMkZTIC1GIC10IGV4dDQgJEZFQVRVUkUgJEZTCiskRTJGU0NLIC1GWSAkRlMKKyREVU1QRTJGUyAkRlMgPiAvdG1wL2QxCisKK3RydW5jYXRlIC1zIDIwVCAkRlMKK3RpbWUgJFJFU0laRTJGUyAtZCAzMSAtcCAkRlMgPiAvdG1wL3IxCiskRFVNUEUyRlMgJEZTID4gL3RtcC9kMgorJEUyRlNDSyAtZnkgJEZTCiskRFVNUEUyRlMgJEZTID4gL3RtcC9kMworCit0cnVuY2F0ZSAtcyAyMVQgJEZTCit0aW1lICRSRVNJWkUyRlMgLWQgMzEgLXAgJEZTID4gL3RtcC9yMgorJERVTVBFMkZTICRGUyA+IC90bXAvZDQKKyRFMkZTQ0sgLWZ5ICRGUworJERVTVBFMkZTICRGUyA+IC90bXAvZDUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy9yZXNpemUvdGVzdF9leHRlbnQuYyBiL2UyZnNwcm9ncy9yZXNpemUvdGVzdF9leHRlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY3OGYxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Jlc2l6ZS90ZXN0X2V4dGVudC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogdGVzdF9leHRlbnQuYyAtLS0gdGVzdGVyIGZvciB0aGUgZXh0ZW50IGFic3RyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4IGJ5IFRoZW9kb3JlIFRzJ28gYW5kCisgKiAJUG93ZXJRdWVzdCwgSW5jLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBieSBUaGVvc29yZSBUcydvCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSAicmVzaXplMmZzLmgiCisKK3ZvaWQgZG9fdGVzdChGSUxFICppbiwgRklMRSAqb3V0KTsKKwordm9pZCBkb190ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCit7CisJY2hhcgkJYnVmWzEyOF07CisJY2hhcgkJKmNwLCAqY21kLCAqYXJnMSwgKmFyZzI7CisJX191NjQJCW51bTEsIG51bTI7CisJX191NjQJCXNpemU7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2V4dGVudAlleHRlbnQgPSAwOworCWNvbnN0IGNoYXIJKm5vX3RhYmxlID0gIiMgTm8gZXh0ZW50IHRhYmxlXG4iOworCisJd2hpbGUgKCFmZW9mKGluKSkgeworCQlpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBJZ25vcmUgY29tbWVudHMKKwkJICovCisJCWlmIChidWZbMF0gPT0nIycpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBFY2hvIGNvbW1hbmQKKwkJICovCisJCWZwdXRzKGJ1Ziwgb3V0KTsKKworCQljcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAoY3ApCisJCQkqY3AgPSAnXDAnOworCisJCS8qCisJCSAqIFBhcnNlIGNvbW1hbmQgbGluZTsgc2ltcGxlLCBhdCBtb3N0IHR3byBhcmd1bWVudHMKKwkJICovCisJCWNtZCA9IGJ1ZjsKKwkJbnVtMSA9IG51bTIgPSAwOworCQlhcmcxID0gYXJnMiA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJyAnKTsKKwkJaWYgKGNwKSB7CisJCQkqY3ArKyA9ICdcMCc7CisJCQlhcmcxID0gY3A7CisJCQludW0xID0gc3RydG91bChhcmcxLCAwLCAwKTsKKworCQkJY3AgPSBzdHJjaHIoY3AsICcgJyk7CisJCX0KKwkJaWYgKGNwKSB7CisJCQkqY3ArKyA9ICdcMCc7CisJCQlhcmcyID0gY3A7CisJCQludW0yID0gc3RydG91bChhcmcyLCAwLCAwKTsKKwkJfQorCisJCWlmICghc3RyY21wKGNtZCwgImNyZWF0ZSIpKSB7CisJCQlyZXR2YWwgPSBleHQyZnNfY3JlYXRlX2V4dGVudF90YWJsZSgmZXh0ZW50LCBudW0xKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCWhhbmRsZV9lcnJvcjoKKwkJCQlmcHJpbnRmKG91dCwgIiMgRXJyb3I6ICVzXG4iLAorCQkJCQllcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFleHRlbnQpIHsKKwkJCWZwdXRzKG5vX3RhYmxlLCBvdXQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoY21kLCAiZnJlZSIpKSB7CisJCQlleHQyZnNfZnJlZV9leHRlbnRfdGFibGUoZXh0ZW50KTsKKwkJCWV4dGVudCA9IDA7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJhZGQiKSkgeworCQkJcmV0dmFsID0gZXh0MmZzX2FkZF9leHRlbnRfZW50cnkoZXh0ZW50LCBudW0xLCBudW0yKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZ290byBoYW5kbGVfZXJyb3I7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJsb29rdXAiKSkgeworCQkJbnVtMiA9IGV4dDJmc19leHRlbnRfdHJhbnNsYXRlKGV4dGVudCwgbnVtMSk7CisJCQlmcHJpbnRmKG91dCwgIiMgQW5zd2VyOiAlbGx1JXNcbiIsIG51bTIsCisJCQkJbnVtMiA/ICIiIDogIiAobm90IGZvdW5kKSIpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiZHVtcCIpKSB7CisJCQlleHQyZnNfZXh0ZW50X2R1bXAoZXh0ZW50LCBvdXQpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiaXRlcl90ZXN0IikpIHsKKwkJCXJldHZhbCA9IGV4dDJmc19pdGVyYXRlX2V4dGVudChleHRlbnQsIDAsIDAsIDApOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGhhbmRsZV9lcnJvcjsKKwkJCXdoaWxlICgxKSB7CisJCQkJcmV0dmFsID0gZXh0MmZzX2l0ZXJhdGVfZXh0ZW50KGV4dGVudCwKKwkJCQkJICAgICAgICZudW0xLCAmbnVtMiwgJnNpemUpOworCQkJCWlmIChyZXR2YWwpCisJCQkJCWdvdG8gaGFuZGxlX2Vycm9yOworCQkJCWlmICghc2l6ZSkKKwkJCQkJYnJlYWs7CisJCQkJZnByaW50ZihvdXQsICIjICVsbHUgLT4gJWxsdSAoJWxsdSlcbiIsCisJCQkJCW51bTEsIG51bTIsIHNpemUpOworCQkJfQorCQl9IGVsc2UKKwkJCWZwdXRzKCIjIFN5bnRheCBlcnJvclxuIiwgb3V0KTsKKwl9Cit9CisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBBVFRSKHgpIF9fYXR0cmlidXRlX18oeCkKKyNlbHNlCisjZGVmaW5lIEFUVFIoeCkKKyNlbmRpZgorCitpbnQgbWFpbihpbnQgYXJnYyBBVFRSKCh1bnVzZWQpKSwgY2hhciAqKmFyZ3YgQVRUUigodW51c2VkKSkpCit7CisJZG9fdGVzdChzdGRpbiwgc3Rkb3V0KTsKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Jlc2l6ZS90ZXN0X2V4dGVudC5pbiBiL2UyZnNwcm9ncy9yZXNpemUvdGVzdF9leHRlbnQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkY2M0MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy9yZXNpemUvdGVzdF9leHRlbnQuaW4KQEAgLTAsMCArMSw2NCBAQAorY3JlYXRlIDEwCithZGQgMTAgMjAKK2FkZCAxMSAyMQorYWRkIDEyIDIyCithZGQgMTQgNDUKK2FkZCAxNiA1MAorYWRkIDE3IDUxCitkdW1wCisjIEV4dGVudCBkdW1wOgorIwlOdW09MywgU2l6ZT0xMCwgQ3Vyc29yPTAsIFNvcnRlZD0xCisjCQkgMTAgLT4gMjAgKDMpCisjCQkgMTQgLT4gNDUgKDEpCisjCQkgMTYgLT4gNTAgKDIpCithZGQgMTggNTIKK2R1bXAKKyMgRXh0ZW50IGR1bXA6CisjCU51bT0zLCBTaXplPTEwLCBDdXJzb3I9MCwgU29ydGVkPTEKKyMJCSAxMCAtPiAyMCAoMykKKyMJCSAxNCAtPiA0NSAoMSkKKyMJCSAxNiAtPiA1MCAoMykKK2xvb2t1cCAxMAorIyBBbnN3ZXI6IDIwCitsb29rdXAgMTEKKyMgQW5zd2VyOiAyMQorbG9va3VwIDEyCisjIEFuc3dlcjogMjIKK2xvb2t1cCAxMworIyBBbnN3ZXI6IDAgKG5vdCBmb3VuZCkKK2xvb2t1cCAxNAorIyBBbnN3ZXI6IDQ1Citsb29rdXAgMTUKKyMgQW5zd2VyOiAwIChub3QgZm91bmQpCitsb29rdXAgMTYKKyMgQW5zd2VyOiA1MAorbG9va3VwIDEKKyMgQW5zd2VyOiAwIChub3QgZm91bmQpCitsb29rdXAgNTAKKyMgQW5zd2VyOiAwIChub3QgZm91bmQpCithZGQgMTkgMTAwCithZGQgMTMgNQorbG9va3VwIDE4CisjIEFuc3dlcjogNTIKK2xvb2t1cCAxOQorIyBBbnN3ZXI6IDEwMAorbG9va3VwIDIwCisjIEFuc3dlcjogMCAobm90IGZvdW5kKQorbG9va3VwIDEyCisjIEFuc3dlcjogMjIKK2xvb2t1cCAxMworIyBBbnN3ZXI6IDUKK2R1bXAKKyMgRXh0ZW50IGR1bXA6CisjCU51bT01LCBTaXplPTEwLCBDdXJzb3I9MCwgU29ydGVkPTEKKyMJCSAxMCAtPiAyMCAoMykKKyMJCSAxMyAtPiA1ICgxKQorIwkJIDE0IC0+IDQ1ICgxKQorIwkJIDE2IC0+IDUwICgzKQorIwkJIDE5IC0+IDEwMCAoMSkKK2l0ZXJfdGVzdAorIyAxMCAtPiAyMCAoMykKKyMgMTMgLT4gNSAoMSkKKyMgMTQgLT4gNDUgKDEpCisjIDE2IC0+IDUwICgzKQorIyAxOSAtPiAxMDAgKDEpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvTWFrZWZpbGUuaW4gYi9lMmZzcHJvZ3MvdGVzdHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhMDQzZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDg2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgdGVzdHMgZGlyZWN0b3J5CisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACit0b3BfYnVpbGRkaXIgPSAuLgorbXlfZGlyID0gdGVzdHMKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworQE1DT05GSUdACisKK2FsbDo6IEBET19URVNUX1NVSVRFQCB0ZXN0X29uZSB0ZXN0X3NjcmlwdAorCit0ZXN0X29uZTogJChzcmNkaXIpL3Rlc3Rfb25lLmluIE1ha2VmaWxlIG1rZTJmcy5jb25mCisJQGVjaG8gIkNyZWF0aW5nIHRlc3Rfb25lIHNjcmlwdC4uLiIKKwlAZWNobyAiIyEvYmluL3NoIiA+IHRlc3Rfb25lCitASFRSRUVfQ01UQAlAZWNobyAiSFRSRUU9eSIgPj4gdGVzdF9vbmUKK0BRVU9UQV9DTVRACUBlY2hvICJRVU9UQT15IiA+PiB0ZXN0X29uZQorCUBlY2hvICJTUkNESVI9QHNyY2RpckAiID4+IHRlc3Rfb25lCisJQGVjaG8gIkRJRkZfT1BUUz1AVU5JX0RJRkZfT1BUU0AiID4+IHRlc3Rfb25lCisJQGNhdCAkKHNyY2RpcikvdGVzdF9vbmUuaW4gPj4gdGVzdF9vbmUKKwlAY2htb2QgK3ggdGVzdF9vbmUKKwordGVzdF9zY3JpcHQ6IHRlc3Rfb25lIHRlc3Rfc2NyaXB0LmluIE1ha2VmaWxlIG1rZTJmcy5jb25mCisJQGVjaG8gIkNyZWF0aW5nIHRlc3Rfc2NyaXB0Li4uIgorCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9zY3JpcHQKKwlAZWNobyAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X3NjcmlwdAorCUBjYXQgJChzcmNkaXIpL3Rlc3Rfc2NyaXB0LmluID4+IHRlc3Rfc2NyaXB0CisJQGNobW9kICt4IHRlc3Rfc2NyaXB0CisKK21rZTJmcy5jb25mOiAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4KKwkkKENQKSAkKHNyY2RpcikvbWtlMmZzLmNvbmYuaW4gbWtlMmZzLmNvbmYKKworLlBIT05ZIDogdGVzdF9wcmUgdGVzdF9wb3N0IGNoZWNrIGFsd2F5c19ydW4KKworVEVTVFM9JCh3aWxkY2FyZCAkKHNyY2RpcikvW2Etel1fKikKKyQoVEVTVFMpOjogdGVzdF9vbmUgYWx3YXlzX3J1bgorCUAuL3Rlc3Rfb25lICRACisKK3Rlc3RfcHJlOgorCUAkKFJNKSAtZiAqLmZhaWxlZAorCUBlY2hvICJSdW5uaW5nIGUyZnNwcm9ncyB0ZXN0IHN1aXRlLi4uIgorCUBlY2hvICIgIgorCit0ZXN0X3Bvc3Q6IHRlc3RfcHJlICQoVEVTVFMpCisJQCQoc3JjZGlyKS90ZXN0X3Bvc3QKKworY2hlY2s6OiB0ZXN0X3ByZSB0ZXN0X3Bvc3QgdGVzdF9zY3JpcHQKKworY2hlY2stZmFpbGVkOiAkKGJhc2VuYW1lICQod2lsZGNhcmQgKi5mYWlsZWQpKQorCUAkKHNyY2RpcikvdGVzdF9wb3N0CisKKworVERJUj1mX3Rlc3RuZXcKKyMgVGFyZ2V0IHdoaWNoIGNyZWF0ZXMgYSBuZXcgdGVzdGNhc2UgdG8gc2ltcGxpZnkgYWRkaW5nIG5ldyByZWdyZXNzaW9uIHRlc3RzLgordGVzdG5ldzoKKwlAZWNobyAiQ3JlYXRpbmcgYSBuZXcgZTJmc2NrIHRlc3RjYXNlIGluICR7VERJUn0iCisJQG1rZGlyIC1wICR7VERJUn0KKwlkZCBpZj0vZGV2L3plcm8gb2Y9JHtURElSfS9pbWFnZSBicz0xayBjb3VudD04aworCSQodG9wX3NyY2RpcikvbWlzYy9ta2UyZnMgLWogLUYgLU4gMjU2ICR7VERJUn0vaW1hZ2UKKwlAZWNobyAibmV3IHRlc3QgZGVzY3JpcHRpb24iID4gJHtURElSfS9uYW1lCisJQGVjaG87IGVjaG87IGVjaG8gIk5ldyB0ZXN0IGZpbGVzeXN0ZW0gYXQgJHtURElSfS9pbWFnZS4iCisJQGVjaG8gIk5vdywgYnJlYWsgdGhlIGZpbGVzeXN0ZW0gYXMgYXBwcm9wcmlhdGUsIGFuZCBydW4gJ21ha2UgdGVzdGVuZCciCisKK0VYUEVDVDE9JHtURElSfS9leHBlY3QuMQorRVhQRUNUMj0ke1RESVJ9L2V4cGVjdC4yCisjIFRhcmdldCB3aGljaCBnZW5lcmF0ZXMgdGhlIGV4cGVjdCBmaWxlcyBmb3IgdGhlIG5ldyB0ZXN0Y2FzZS4KK3Rlc3RlbmQ6IHRlc3Rfb25lICR7VERJUn0vaW1hZ2UKKwlnemlwIC05ICR7VERJUn0vaW1hZ2UKKwlAT1VUMT0ke0VYUEVDVDF9IE9VVDI9JHtFWFBFQ1QyfSAuL3Rlc3Rfb25lICR7VERJUn0KKwlAZWNobzsgZWNobzsgZWNobyAiKioqIG91dHB1dCBmcm9tIGZpcnN0IGUyZnNjayBydW4gKCR7RVhQRUNUMX0pICoqKiIKKwlAY2F0ICR7RVhQRUNUMX0KKwlAZWNobyAiKioqIG91dHB1dCBmcm9tIHNlY29uZCBlMmZzY2sgcnVuICgke0VYUEVDVDJ9KSAqKioiCisJQGNhdCAke0VYUEVDVDJ9CisJQGVjaG8gIioqKiBlbmQgb2YgZTJmc2NrIG91dHB1dCAqKioiCisJQGVjaG87IGVjaG8gIkhvcGVmdWxseSBlMmZzY2sgbm93IGZpeGVzIHRoaXMgcHJvYmxlbSBwcm9wZXJseS4iCisJQGVjaG8gIklmIGFsbCBpcyB3ZWxsLCBlZGl0ICR7VERJUn0vbmFtZSBhbmQgcmVuYW1lICR7VERJUn0uIgorCitjbGVhbjo6CisJJChSTSkgLWYgKn4gKi5sb2cgKi5uZXcgKi5mYWlsZWQgKi5vayAqLnRtcCB0ZXN0X29uZSB0ZXN0X3NjcmlwdCBta2UyZnMuY29uZgorCitkaXN0Y2xlYW46OiBjbGVhbgorCSQoUk0pIC1mIE1ha2VmaWxlCisJJChSTSkgLXJmICR7VERJUn0KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9SRUFETUUgYi9lMmZzcHJvZ3MvdGVzdHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzVkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvUkVBRE1FCkBAIC0wLDAgKzEsNjggQEAKK1RoZXNlIGltYWdlcyBjb250YWluIHZhcmlvdXMgZm9ybXMgb2YgY29ycnVwdGVkIGZpbGVzeXN0ZW0gd2hpY2gKK2UyZnNjayB3aWxsIGNvcnJlY3QuICBUaGV5IGFyZSB1c2VkIGFzIGEgcmVncmVzc2lvbiB0ZXN0IGZvciBlMmZzY2suCisKK1RoZSB0ZXN0X3NjcmlwdCBwcm9ncmFtIHdpbGwgYXV0b21hdGljYWxseSBydW4gZTJmc2NrIGFnYWluc3QgdGhlCitmaWxlc3lzdGVtIGltYWdlcy4gIEl0IHdpbGwgcnVuIHRoZW0gdHdvIHRpbWVzLCBhbmQgZGlzcGxheSB0aGUgZXhpdAorc3RhdHVzIGZvciBlYWNoIHJ1bi4gIFRoZSBtZWFuaW5nIG9mIHRoZSBleGl0IHN0YXR1cyBjb2RlcyBhcmUgYXMKK2ZvbGxvd3M6CisKKwkwCQlObyBmaWxlc3lzdGVtIGVycm9ycyB3ZXJlIGRldGVjdGVkCisJMQkJRmlsZXN5c3RlbSBlcnJvcnMgZGV0ZWN0ZWQsIGJ1dCBjb3JyZWN0ZWQKKwkyCQlTeXN0ZW0gc2hvdWxkIGJlIHJlYm9vdGVkCisJNAkJRmlsZXN5c3RlbSBlcnJvcnMgbGVmdCB1bmNvcnJlY3RlZAorCTgJCU9wZXJhdGlvbmFsIGVycm9yIChnZW5lcmFsbHkgbWVhbnMgaW50ZXJuYWwgZXJyb3IsCisJCQkJb3IgZmlsZXN5c3RlbSBlcnJvciB0aGF0IHRoZSBlMmZzY2sgd2FzIG5vdAorCQkJCXByZXBhcmVkIHRvIGRlYWwgd2l0aCkKKwkxNgkJVXNhZ2Ugb3Igc3ludGF4IGVycm9yCisKK0R1cmluZyB0aGUgcmVncmVzc2lvbiB0ZXN0LCB0aGUgZmlyc3QgZXhpdCBjb2RlIHNob3VsZCBiZSAxLCBhbmQgdGhlCitzZWNvbmQgZXhpdCBjb2RlIHNob3VsZCBiZSAwLiAgSW4gb3RoZXIgd29yZHMsIGFsbCAod2l0aCBvbmUKK2V4Y2VwdGlvbikgb2YgdGhlIHRlc3QgZmlsZXN5c3RlbXMgaW4gdGhpcyBkaXJlY3RvcnkgaGF2ZSBzb21lIHNvcnQgb2YKK2ZpbGVzeXN0ZW0gY29ycnVwdGlvbiwgd2hpY2ggZTJmc2NrIHNob3VsZCBmaXggb24gdGhlIGZpcnN0IHBhc3MuCitBZnRlciB0aGUgZmlyc3QgcGFzcywgZTJmc2NrIHNob3VsZCBsZWF2ZSBhIGZ1bGx5IGNvbnNpc3RlbnQKK2ZpbGVzeXN0ZW0gd2l0aCBubyBkZXRlY3RhYmxlIGVycm9ycyBmb3VuZCBpbiB0aGUgc2Vjb25kIHBhc3MuICBUaGUKK2V4Y2VwdGlvbiBpcyB0aGUgb2tncm91cC5pbWcgZmlsZXN5c3RlbSwgd2hpY2ggY29udGFpbnMgbm8gZXJyb3JzLCBhbmQKK3NvIGJvdGggZXhpdCBjb2RlcyBzaG91bGQgYmUgMC4KKworTk9URTogSXQgYXBwZWFycyB0aGF0IGF0IGxlYXN0IHNvbWUgdmVyc2lvbnMgb2YgdGhlIG9yaWdpbmFsIGUyZnNjayBkbworbm90IGV4aXQgd2l0aCBhbiBleGl0IHN0YXR1cyBjb2RlIG9mIDEgYWZ0ZXIgY29ycmVjdGluZyBmaWxlc3lzdGVtCitlcnJvcnMuICBTbyBpZiB5b3UgbW9kaWZ5IHRoZSB0ZXN0X3NjcmlwdCB0byB0cnkgcnVubmluZyB0aGVzZQorZmlsZXN5c3RlbXMgYWdhaW5zdCB0aGUgb3JpZ2luYWwgZTJmc2NrLCB5b3Ugd2lsbCBoYXZlIHRvIGluc3BlY3QgdGhlCit0ZXN0X3NjcmlwdC5sb2cgZmlsZSBtYW51YWxseS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hlcmUncyBhIG9uZS1saW5lIGRlc2NyaXB0b25zIG9mIHRoZSB2YXJpb3VzIHRlc3QgaW1hZ2VzIGluIHRoaXMKK2RpcmVjdG9yeToKKworYmFkZGlyLmltZwkJRmlsZXN5c3RlbSB3aXRoIGEgY29ycnVwdGVkIGRpcmVjdG9yeQorYmFkYmJsb2Nrcy5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBpbGxlZ2FsIGJsb2NrcyBpbiB0aGUgYmFkIGJsb2NrIGlub2RlLgorYmFkaW5vZGUuaW1nCQlGaWxlc3lzdGVtIHdpdGggdmFyaW91cyBkaWZmZXJlbnQgY29ycnVwdGVkIGlub2RlCisJCQkJZW50cmllcy4KK2JhZGxrY250LmltZwkJRmlsZXN5c3RlbSB3aXRoIGRlbGV0ZWQgZmlsZXMgd2l0aCBub24temVybyBsaW5rIGNvdW50CitiYWRyb290LmltZwkJRmlsZXN5c3RlbSB3aXRoIGEgZmlsZSBmb3IgYSByb290IGRpcmVjdG9yeQorYmFkdGFibGUuaW1nCQlGaWxlc3lzdGVtIHdpdGggYmxvY2tzIHNoYXJlZCBiZXR3ZWVuIHRoZSBiaXRtYXBzIGFuZAorCQkJCWlub2RlIHRhYmxlIGJsb2NrcyBhbmQgdGhlIGJhZCBibG9jayBpbm9kZQorYmJmaWxlLmltZwkJRmlsZXN5c3RlbSB3aXRoIGZpbGVzIGNvbnRhaW5pbmcgYmFkIGJsb2NrcworYml0bWFwcy5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBjb3JydXB0ZWQgaW5vZGUgYW5kIGJsb2NrIGJpdG1hcHMKK2RpcmxpbmsuaW1nCQlGaWxlc3lzdGVtIHdpdGggYSBoYXJkIGxpbmsgdG8gYSBkaXJlY3RvcnkKK2R1cC5pbWcJCQlGaWxlc3lzdGVtIHdpdGggYmxvY2tzIGNsYWltZWQgYnkgdHdvIGRpZmZlcmVudCBmaWxlcworZHVwMi5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBibG9ja3MgY2xhaW1lZCBieSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMKK2R1cGZzYmxrcy5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBibG9ja3MgY2xhaW1lZCBieSBhIGZpbGUgYW5kCisJCQkJaW5vZGUvYmxvY2sgYml0bWFwcyBhbmQgaW5vZGUgdGFibGVzCitkdXBzdXBlci5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBibG9ja3MgY2xhaW1lZCBieSBhIGZpbGUgYW5kCisJCQkJdGhlIHN1cGVyYmxvY2sgLyBncm91cCBkZXNjcmlwdG9ycworZW5kLWJpdG1hcC5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBjb3JydXB0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrIAorCQkJCWJpdG1hcAorZXhwYW5kLmltZwkJVGVzdHMgZTJmc2NrJ3MgYWJpbGl0eSB0byBleHBhbmQgbG9zdCtmb3VuZCBpZiAKKwkJCQluZWNlc3NhcnkKK2xwZi5pbWcJCQlGaWxlc3lzdGVtIHdpdGggZGlzY29ubmVjdGVkIGZpbGVzIGFuZCBubyAvbG9zdCtmb3VuZCAKKwkJCQlkaXJlY3RvcnkKK21rZTJmczJiLmltZwkJRmlsZXN5c3RlbSB3aXRoIGNvcnJ1cHRpb24gc2ltaWxhciB0byB0aGF0CisJCQkJY3JlYXRlZCBieSBta2UyZnMgdmVyc2lvbiAwLjJiCitub3Jvb3QuaW1nCQlGaWxlc3lzdGVtIHdpdGggYSBkZWxldGVkIHJvb3QgZGlyZWN0b3J5Citva2dyb3VwLmltZwkJRmlsZXN5c3RlbSB0aGF0J3MgZXhhY3RseSA4MTkzIGJsb2NrcyBsb25nIAorCQkJCShvdGhlcndpc2UgT0spCitvdmVyZnNibGtzLmltZwkJRmlsZXN5c3RlbSB3aXRoIG92ZXJsYXBwaW5nIGlub2RlIGFuZCBibG9jayBiaXRtYXBzCitzeW1saW5rcy5pbWcJCUZpbGVzeXN0ZW0gd2l0aCBiYWQgc3ltbGluayBzaXplcworCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9kX2xvYWRkdW1wL2V4cGVjdCBiL2UyZnNwcm9ncy90ZXN0cy9kX2xvYWRkdW1wL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBkZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2RfbG9hZGR1bXAvZXhwZWN0CkBAIC0wLDAgKzEsMTggQEAKK2RlYnVnZnMgbG9hZC9kdW1wIHRlc3QKK21rZTJmcyAtRnEgLWIgMTAyNCB0ZXN0LmltZyA1MTIKK0V4aXQgc3RhdHVzIGlzIDAKK2RlYnVnZnMgLVIgJyd3cml0ZSBkX2xvYWRkdW1wLnRtcCB0ZXN0X2RhdGEnJyAtdyB0ZXN0LmltZworQWxsb2NhdGVkIGlub2RlOiAxMgorRXhpdCBzdGF0dXMgaXMgMAorZTJmc2NrIC15ZiAtTiB0ZXN0X2ZpbGVzeXMKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTU4LzUxMiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2RlYnVnZnMgLVIgJydkdW1wIHRlc3RfZGF0YSBkX2xvYWRkdW1wLnZlci50bXAnJyB0ZXN0LmltZworRXhpdCBzdGF0dXMgaXMgMAorY21wIGRfbG9hZGR1bXAudG1wIGRfbG9hZGR1bXAudmVyLnRtcAorRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2RfbG9hZGR1bXAvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9kX2xvYWRkdW1wL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1ZWMzYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9kX2xvYWRkdW1wL25hbWUKQEAgLTAsMCArMSBAQAorZGVidWdmcyBsb2FkL2R1bXAgdGVzdApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2RfbG9hZGR1bXAvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2RfbG9hZGR1bXAvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzI3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZF9sb2FkZHVtcC9zY3JpcHQKQEAgLTAsMCArMSw2NiBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworT1VUPSR0ZXN0X25hbWUubG9nCitFWFA9JHRlc3RfZGlyL2V4cGVjdAorVkVSSUZZX0ZTQ0tfT1BUPS15ZgorCitURVNUX0RBVEE9JHRlc3RfbmFtZS50bXAKK1ZFUklGWV9EQVRBPSR0ZXN0X25hbWUudmVyLnRtcAorCitlY2hvICJkZWJ1Z2ZzIGxvYWQvZHVtcCB0ZXN0IiA+ICRPVVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gIm1rZTJmcyAtRnEgLWIgMTAyNCB0ZXN0LmltZyA1MTIiID4+ICRPVVQKKworJE1LRTJGUyAtRnEgJFRNUEZJTEUgNTEyID4gL2Rldi9udWxsIDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQKKworZGQgaWY9JFRFU1RfQklUUyBvZj0kVEVTVF9EQVRBIGJzPTEyOGsgY291bnQ9MSBjb252PXN5bmMgPiAvZGV2L251bGwgMj4mMSAKK2VjaG8gImZpbGUgZnJhZ21lbnQgb2RkIHNpemUiID4+ICRURVNUX0RBVEEKKworZWNobyAiZGVidWdmcyAtUiAnJ3dyaXRlICRURVNUX0RBVEEgdGVzdF9kYXRhJycgLXcgdGVzdC5pbWciID4gJE9VVC5uZXcKKyRERUJVR0ZTIC1SICJ3cml0ZSAkVEVTVF9EQVRBIHRlc3RfZGF0YSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyBlMmZzY2sgJFZFUklGWV9GU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgPiAkT1VULm5ldworJEZTQ0sgJFZFUklGWV9GU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ2R1bXAgdGVzdF9kYXRhICRWRVJJRllfREFUQScnIHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAiZHVtcCB0ZXN0X2RhdGEgJFZFUklGWV9EQVRBIiAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCitlY2hvICJjbXAgJFRFU1RfREFUQSAkVkVSSUZZX0RBVEEiID4+ICRPVVQKK2NtcCAkVEVTVF9EQVRBICRWRVJJRllfREFUQSA+PiRPVVQKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQKKworIworIyBEbyB0aGUgdmVyaWZpY2F0aW9uCisjCisKK3JtIC1mICRWRVJJRllfREFUQSAkVEVTVF9EQVRBICRUTVBGSUxFICRPVVQubmV3CitjbXAgLXMgJE9VVCAkRVhQCitzdGF0dXM9JD8KKworaWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgVkVSSUZZX0ZTQ0tfT1BUIE5BVElWRV9GU0NLX09QVCBPVVQgRVhQIFRFU1RfREFUQSBWRVJJRllfREFUQQorCitlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL2V4cGVjdCBiL2UyZnNwcm9ncy90ZXN0cy9kX3NwZWNpYWxfZmlsZXMvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL2V4cGVjdApAQCAtMCwwICsxLDg1IEBACitkZWJ1Z2ZzIGNyZWF0ZSBzcGVjaWFsIGZpbGVzCitta2UyZnMgLUZxIC1iIDEwMjQgdGVzdC5pbWcgNTEyCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnc3RhdCBmb28nJyAtdyB0ZXN0LmltZworSW5vZGU6IDEyICAgVHlwZTogc3ltbGluayAgICBNb2RlOiAgMDc3NyAgIEZsYWdzOiAweDAKK0dlbmVyYXRpb246IDAgICAgVmVyc2lvbjogMHgwMDAwMDAwMAorVXNlcjogICAgIDAgICBHcm91cDogICAgIDAgICBTaXplOiAzCitGaWxlIEFDTDogMCAgICBEaXJlY3RvcnkgQUNMOiAwCitMaW5rczogMSAgIEJsb2NrY291bnQ6IDAKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCithdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK210aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworRmFzdF9saW5rX2Rlc3Q6IGJhcgorRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ3N0YXQgZm9vMicnIC13IHRlc3QuaW1nCitJbm9kZTogMTMgICBUeXBlOiBzeW1saW5rICAgIE1vZGU6ICAwNzc3ICAgRmxhZ3M6IDB4MAorR2VuZXJhdGlvbjogMCAgICBWZXJzaW9uOiAweDAwMDAwMDAwCitVc2VyOiAgICAgMCAgIEdyb3VwOiAgICAgMCAgIFNpemU6IDgwCitGaWxlIEFDTDogMCAgICBEaXJlY3RvcnkgQUNMOiAwCitMaW5rczogMSAgIEJsb2NrY291bnQ6IDIKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCithdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK210aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworQkxPQ0tTOgorKDApOjI4CitUT1RBTDogMQorCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnYmxvY2tfZHVtcCAyOCcnIC13IHRlc3QuaW1nCiswMDAwICAzMTMyIDMzMzQgMzUzNiAzNzM4IDM5MzAgMzEzMiAzMzM0IDM1MzYgIDEyMzQ1Njc4OTAxMjM0NTYKKzAwMjAgIDM3MzggMzkzMCAzMTMyIDMzMzQgMzUzNiAzNzM4IDM5MzAgMzEzMiAgNzg5MDEyMzQ1Njc4OTAxMgorMDA0MCAgMzMzNCAzNTM2IDM3MzggMzkzMCAzMTMyIDMzMzQgMzUzNiAzNzM4ICAzNDU2Nzg5MDEyMzQ1Njc4CiswMDYwICAzOTMwIDMxMzIgMzMzNCAzNTM2IDM3MzggMzkzMCAzMTMyIDMzMzQgIDkwMTIzNDU2Nzg5MDEyMzQKKzAxMDAgIDM1MzYgMzczOCAzOTMwIDMxMzIgMzMzNCAzNTM2IDM3MzggMzkzMCAgNTY3ODkwMTIzNDU2Nzg5MAorMDEyMCAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwICAuLi4uLi4uLi4uLi4uLi4uCisqCisKK0V4aXQgc3RhdHVzIGlzIDAKK2RlYnVnZnMgLVIgJydzdGF0IHBpcGUnJyAtdyB0ZXN0LmltZworSW5vZGU6IDE0ICAgVHlwZTogRklGTyAgICBNb2RlOiAgMDAwMCAgIEZsYWdzOiAweDAKK0dlbmVyYXRpb246IDAgICAgVmVyc2lvbjogMHgwMDAwMDAwMAorVXNlcjogICAgIDAgICBHcm91cDogICAgIDAgICBTaXplOiAwCitGaWxlIEFDTDogMCAgICBEaXJlY3RvcnkgQUNMOiAwCitMaW5rczogMSAgIEJsb2NrY291bnQ6IDAKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCithdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK210aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworQkxPQ0tTOgorCitFeGl0IHN0YXR1cyBpcyAwCitkZWJ1Z2ZzIC1SICcnc3RhdCBzZGEnJyAtdyB0ZXN0LmltZworSW5vZGU6IDE1ICAgVHlwZTogYmxvY2sgc3BlY2lhbCAgICBNb2RlOiAgMDAwMCAgIEZsYWdzOiAweDAKK0dlbmVyYXRpb246IDAgICAgVmVyc2lvbjogMHgwMDAwMDAwMAorVXNlcjogICAgIDAgICBHcm91cDogICAgIDAgICBTaXplOiAwCitGaWxlIEFDTDogMCAgICBEaXJlY3RvcnkgQUNMOiAwCitMaW5rczogMSAgIEJsb2NrY291bnQ6IDAKK0ZyYWdtZW50OiAgQWRkcmVzczogMCAgICBOdW1iZXI6IDAgICAgU2l6ZTogMAorY3RpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCithdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK210aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworRGV2aWNlIG1ham9yL21pbm9yIG51bWJlcjogMDg6MDAgKGhleCAwODowMCkKK0V4aXQgc3RhdHVzIGlzIDAKK2RlYnVnZnMgLVIgJydzdGF0IG51bGwnJyAtdyB0ZXN0LmltZworSW5vZGU6IDE2ICAgVHlwZTogY2hhcmFjdGVyIHNwZWNpYWwgICAgTW9kZTogIDAwMDAgICBGbGFnczogMHgwCitHZW5lcmF0aW9uOiAwICAgIFZlcnNpb246IDB4MDAwMDAwMDAKK1VzZXI6ICAgICAwICAgR3JvdXA6ICAgICAwICAgU2l6ZTogMAorRmlsZSBBQ0w6IDAgICAgRGlyZWN0b3J5IEFDTDogMAorTGlua3M6IDEgICBCbG9ja2NvdW50OiAwCitGcmFnbWVudDogIEFkZHJlc3M6IDAgICAgTnVtYmVyOiAwICAgIFNpemU6IDAKK2N0aW1lOiAweDUwZjU2MGUwIC0tIFR1ZSBKYW4gMTUgMTQ6MDA6MDAgMjAxMworYXRpbWU6IDB4NTBmNTYwZTAgLS0gVHVlIEphbiAxNSAxNDowMDowMCAyMDEzCittdGltZTogMHg1MGY1NjBlMCAtLSBUdWUgSmFuIDE1IDE0OjAwOjAwIDIwMTMKK0RldmljZSBtYWpvci9taW5vciBudW1iZXI6IDAxOjAzIChoZXggMDE6MDMpCitFeGl0IHN0YXR1cyBpcyAwCitlMmZzY2sgLXlmIC1OIHRlc3RfZmlsZXN5cworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOS81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkMTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9kX3NwZWNpYWxfZmlsZXMvbmFtZQpAQCAtMCwwICsxIEBACitjcmVhdGUgc3BlY2lhbCBmaWxlcyBpbiBkZWJ1Z2ZzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9kX3NwZWNpYWxfZmlsZXMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTk5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZF9zcGVjaWFsX2ZpbGVzL3NjcmlwdApAQCAtMCwwICsxLDk0IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitPVVQ9JHRlc3RfbmFtZS5sb2cKK0VYUD0kdGVzdF9kaXIvZXhwZWN0CitWRVJJRllfRlNDS19PUFQ9LXlmCisKK1RFU1RfREFUQT0kdGVzdF9uYW1lLnRtcAorVkVSSUZZX0RBVEE9JHRlc3RfbmFtZS52ZXIudG1wCisKK2VjaG8gImRlYnVnZnMgY3JlYXRlIHNwZWNpYWwgZmlsZXMiID4gJE9VVAorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKKworZWNobyAibWtlMmZzIC1GcSAtYiAxMDI0IHRlc3QuaW1nIDUxMiIgPj4gJE9VVAorCiskTUtFMkZTIC1GcSAkVE1QRklMRSA1MTIgPiAvZGV2L251bGwgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCiskREVCVUdGUyAtdyAkVE1QRklMRSA8PCBFT0YgPiAvZGV2L251bGwgMj4mMQorc2V0X2N1cnJlbnRfdGltZSAyMDEzMDExNTE0MDAKK3NldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMAorc2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsCitzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAKK3N5bWxpbmsgZm9vIGJhcgorc3ltbGluayBmb28yIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitta25vZCBwaXBlIHAKK21rbm9kIHNkYSBiIDggMAorbWtub2QgbnVsbCBjIDEgMworRU9GCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IGZvbycnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic3RhdCBmb28iIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IGZvbzInJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInN0YXQgZm9vMiIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ2Jsb2NrX2R1bXAgMjgnJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgImJsb2NrX2R1bXAgMjgiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKK2VjaG8gImRlYnVnZnMgLVIgJydzdGF0IHBpcGUnJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInN0YXQgcGlwZSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ3N0YXQgc2RhJycgLXcgdGVzdC5pbWciID4gJE9VVC5uZXcKKyRERUJVR0ZTIC1SICJzdGF0IHNkYSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworZWNobyAiZGVidWdmcyAtUiAnJ3N0YXQgbnVsbCcnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic3RhdCBudWxsIiAtdyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCitlY2hvIGUyZnNjayAkVkVSSUZZX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyA+ICRPVVQubmV3CiskRlNDSyAkVkVSSUZZX0ZTQ0tfT1BUIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCisjCisjIERvIHRoZSB2ZXJpZmljYXRpb24KKyMKKworcm0gLWYgJFRNUEZJTEUgJE9VVC5uZXcKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBWRVJJRllfRlNDS19PUFQgTkFUSVZFX0ZTQ0tfT1BUIE9VVCBFWFAgVEVTVF9EQVRBIFZFUklGWV9EQVRBCisKK2Vsc2UgI2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9kZWZhdWx0cy9lX3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9kZWZhdWx0cy9lX3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzljZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2RlZmF1bHRzL2Vfc2NyaXB0CkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgRGVmYXVsdCBzY3JpcHQgZm9yIHRlc3RpbmcgdGhlIHJlbG9jYXRpb24gbGlicmFyeSByb3V0aW5lcyAKKyMgKGlyZWwgLS0gaW5vZGUgcmVsb2NhdGlvbiBhbmQgYnJlbCAtLSBibG9jayByZWxvY2F0aW9uKQorIworCitpZiBbIC1mICR0ZXN0X2Rpci9zZXR1cCBdOyB0aGVuCisJLiAkdGVzdF9kaXIvc2V0dXAKK2ZpCisKK2lmIFsgIiRjbGFzcyJ4ID0geCBdOyB0aGVuCisJY2xhc3M9YGVjaG8gJHRlc3RfbmFtZSB8IHNlZCAtZSAncy9lX1woW15fXSpcKV9cKC4qXCkvXDEvJ2AKKwlpbnN0YW5jZT1gZWNobyAkdGVzdF9uYW1lIHwgc2VkIC1lICdzL2VfXChbXl9dKlwpX1woLipcKS9cMi8nYAorZmkKK2lmIFsgIiRPVVQieCA9IHggXTsgdGhlbgorCU9VVD0kdGVzdF9uYW1lLmxvZworZmkKK2lmIFsgIiRFWFBFQ1QieCA9IHggXTsgdGhlbgorCUVYUEVDVD0kU1JDRElSL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuJGNsYXNzCitmaQorCitpZiBbICIkY2xhc3MiID0gaXJlbCBdOyB0aGVuCisJVEVTVF9QUk9HPSRURVNUX1JFTAorZWxpZiBbICIkY2xhc3MiID0gYnJlbCBdOyB0aGVuCisJVEVTVF9QUk9HPSRURVNUX1JFTAorZWxpZiBbICIkY2xhc3MiID0gaWNvdW50IF07IHRoZW4KKwlURVNUX1BST0c9JFRFU1RfSUNPVU5UCitlbHNlCisJVEVTVF9QUk9HPS9iaW4vY2F0CitmaQorCitjYXQgJFNSQ0RJUi9wcm9ncy90ZXN0X2RhdGEvJGluc3RhbmNlLnNldHVwICRTUkNESVIvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuJGNsYXNzIFwKKyAgICB8ICRURVNUX1BST0cgLWYgLSAyPiYxIHwgdHIgLWQgXFwwMTUgPiAkT1VUIAorCitjbXAgLXMgJEVYUEVDVCAkT1VUCitzdGF0dXM9JD8KKworcm0gLWYgJHRlc3RfbmFtZS5mYWlsZWQgJHRlc3RfbmFtZS5vaworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKyAgICBlY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisgICAgdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorICAgIGVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisgICAgZGlmZiAkRElGRl9PUFRTICRFWFBFQ1QgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBFWFBFQ1QgT1VUIGNsYXNzIGluc3RhbmNlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZGVmYXVsdHMvZl9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZGVmYXVsdHMvZl9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzYjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9kZWZhdWx0cy9mX3NjcmlwdApAQCAtMCwwICsxIEBACisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9lX2JyZWxfYm1hL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZV9icmVsX2JtYS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDU1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZV9icmVsX2JtYS9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrIHJlbG9jYXRpb24gdGFibGUgdXNpbmcgdGhlIG1lbW9yeSBhcnJheSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2VfYnJlbF9ibWEvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2VfYnJlbF9ibWEvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2UyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZV9icmVsX2JtYS9zY3JpcHQKQEAgLTAsMCArMSBAQAorZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZV9pY291bnRfbm9ybWFsL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZV9pY291bnRfbm9ybWFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxNzg3NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9lX2ljb3VudF9ub3JtYWwvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSBjb3VudGluZyBzdHJ1Y3R1cmUgb3B0aW1pemVkIGZvciBsb3cgY291bnRzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZV9pY291bnRfb3B0L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZV9pY291bnRfb3B0L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2YjFhNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9lX2ljb3VudF9vcHQvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSBjb3VudGluZyBhYnN0cmFjdGlvbiBvcHRpbWl6ZWQgZm9yIGNvdW50aW5nCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZV9pcmVsX2ltYS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2VfaXJlbF9pbWEvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZkNzJlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2VfaXJlbF9pbWEvbmFtZQpAQCAtMCwwICsxIEBACitpbm9kZSByZWxvY2F0aW9uIHRhYmxlIHVzaW5nIHRoZSBtZW1vcnkgYXJyYXkgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9lX2lyZWxfaW1hL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9lX2lyZWxfaW1hL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzdlMmZiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2VfaXJlbF9pbWEvc2NyaXB0CkBAIC0wLDAgKzEgQEAKK2VjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl8xNjM4NF9ibG9jay9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWE1NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfMTYzODRfYmxvY2svZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhNTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM5LzEwMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl8xNjM4NF9ibG9jay9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mXzE2Mzg0X2Jsb2NrL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl8xNjM4NF9ibG9jay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl8xNjM4NF9ibG9jay9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfMTYzODRfYmxvY2svbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWIzMTEyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfMTYzODRfYmxvY2svbmFtZQpAQCAtMCwwICsxIEBACisxNjM4NCBieXRlIGJsb2Nrc2l6ZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfODE5Ml9ibG9jay9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mXzgxOTJfYmxvY2svZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhNTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mXzgxOTJfYmxvY2svZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mXzgxOTJfYmxvY2svZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl84MTkyX2Jsb2NrL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTU2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl84MTkyX2Jsb2NrL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM5LzEwMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl84MTkyX2Jsb2NrL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfODE5Ml9ibG9jay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWYzMTFiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfODE5Ml9ibG9jay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl84MTkyX2Jsb2NrL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl84MTkyX2Jsb2NrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkOGRjYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mXzgxOTJfYmxvY2svbmFtZQpAQCAtMCwwICsxIEBACis4MTkyIGJ5dGUgYmxvY2tzaXplCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfZGlzY29ubmVjdGVkX2lub2RlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg2MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMQpAQCAtMCwwICsxLDUyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTUgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTYgaGFzIEVYVEVOVFNfRkwgZmxhZyBzZXQgb24gZmlsZXN5c3RlbSB3aXRob3V0IGV4dGVudHMgc3VwcG9ydC4KK0NsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitpX2ZpbGVfYWNsIGZvciBpbm9kZSAxMyAoLi4uKSBpcyA0MjE4Nzk4MjI1LCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTMgKC4uLikgaGFzIGludmFsaWQgbW9kZSAoMDExNzAwMykuCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDE0ICguLi4pIGlzIDI4OTI4NTE2NDIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitJbm9kZSAxNCAoLi4uKSBoYXMgaW52YWxpZCBtb2RlICgwMTU0MjQ3KS4KK0NsZWFyPyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDktLTE5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OSwgY291bnRlZD05MSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzksIGNvdW50ZWQ9OTEpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg2LCBjb3VudGVkPTUpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgzLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDYsIGNvdW50ZWQ9NSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfZGlzY29ubmVjdGVkX2lub2RlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZlYjcwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfZGlzY29ubmVjdGVkX2lub2RlL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjJiM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2Rpc2Nvbm5lY3RlZF9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfZGlzY29ubmVjdGVkX2lub2RlL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfZGlzY29ubmVjdGVkX2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5ZWRmMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZF9kaXNjb25uZWN0ZWRfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitEaXNjb25uZWN0ZWQgaW5vZGUgd2l0aCBiYWQgZmllbGRzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfbG9jYWxfam5sL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE0MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMQpAQCAtMCwwICsxLDE0IEBACitGb3VuZCBpbnZhbGlkIFYyIGpvdXJuYWwgc3VwZXJibG9jayBmaWVsZHMgKGZyb20gVjEgam91cm5hbCkuCitDbGVhcmluZyBmaWVsZHMgYmV5b25kIHRoZSBWMSBqb3VybmFsIHN1cGVyYmxvY2suLi4KKworQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDgwLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfbG9jYWxfam5sL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzJkYzcxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwODAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfbG9jYWxfam5sL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGQ1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRfbG9jYWxfam5sL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZF9sb2NhbF9qbmwvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc3MjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkX2xvY2FsX2pubC9uYW1lCkBAIC0wLDAgKzEgQEAKK3Rlc3QgZm9yIGNvcnJ1cHQgbG9jYWwgam91cm5hbCAoYmFkIFYxLT5WMiBqb3VybmFsIHVwZ3JhZGUpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRiYmxvY2tzL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTA3YTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9leHBlY3QuMQpAQCAtMCwwICsxLDI4IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCisuLi9lMmZzY2svZTJmc2NrOiBJbGxlZ2FsIGluZGlyZWN0IGJsb2NrIGZvdW5kIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrcyBpbm9kZQorVGhpcyBkb2Vzbid0IGJvZGUgd2VsbCwgYnV0IHdlJ2xsIHRyeSB0byBnbyBvbi4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitCYWQgYmxvY2sgaW5vZGUgaGFzIGlsbGVnYWwgYmxvY2socykuICBDbGVhcj8geWVzCisKK0lsbGVnYWwgYmxvY2sgIzEgKDEwMSkgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzIgKDEwMykgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzMgKDIzNDUyMykgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK0lsbGVnYWwgaW5kaXJlY3QgYmxvY2sgKDIwMCkgaW4gYmFkIGJsb2NrIGlub2RlLiAgQ0xFQVJFRC4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKzUwCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc4LCBjb3VudGVkPTc3KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3OCwgY291bnRlZD03NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGJibG9ja3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhMjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGJibG9ja3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGJibG9ja3MvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRiYmxvY2tzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzliN2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRiYmxvY2tzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGJibG9ja3MvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGJibG9ja3MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjIwZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkYmJsb2Nrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgYmxvY2tzIGluIGJhZCBibG9jayBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZGlyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZGlyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNDZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIvZXhwZWN0LjEKQEAgLTAsMCArMSw1NCBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgaV9zaXplIGlzIDE4Miwgc2hvdWxkIGJlIDEwMjQuICBGaXg/IHllcworCitJbm9kZSAxMyBpcyBhIHplcm8tbGVuZ3RoIGRpcmVjdG9yeS4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnemVybycgaW4gLyAoMikgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDEzLiAgQ2xlYXI/IHllcworCitFbnRyeSAnZm9vL2JhcicgaW4gLyAoMikgaGFzIGlsbGVnYWwgY2hhcmFjdGVycyBpbiBpdHMgbmFtZS4KK0ZpeD8geWVzCisKK0VudHJ5ICdyb290JyBpbiAvdGVzdCAoMTQpIGlzIGEgbGluayB0byB0aGUgcm9vdCBpbm9kZS4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2JhZGlubycgaW4gL3Rlc3QgKDE0KSBoYXMgaW52YWxpZCBpbm9kZSAjOiAxMjM0NTYuCitDbGVhcj8geWVzCisKK0VudHJ5ICdkb3QnIGluIC90ZXN0ICgxNCkgaXMgYSBsaW5rIHRvICcuJyAgQ2xlYXI/IHllcworCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMwLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK01pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMi4KK0ZpeD8geWVzCisKK01pc3NpbmcgJy4uJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTIuCitGaXg/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKKycuLicgaW4gL2Jsb2NrLmggKDEyKSBpcyA8VGhlIE5VTEwgaW5vZGU+ICgwKSwgc2hvdWxkIGJlIC8gKDIpLgorRml4PyB5ZXMKKworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitJbm9kZSAxMiByZWYgY291bnQgaXMgMSwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0yMgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc0LCBjb3VudGVkPTc1KS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0xMworRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg1LCBjb3VudGVkPTQpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNC8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpci9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ4ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZGlyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1OTNmZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjIyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIvbmFtZQpAQCAtMCwwICsxIEBACitjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJpZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNmVkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTIgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMwLCBvZmZzZXQgNjA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE1LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZGlyMi9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1YmJhYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOWZjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkaXIyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRpcjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZGlyMi9uYW1lCkBAIC0wLDAgKzEgQEAKK3NhbHZhZ2UgbGFzdCBkaXJlY3RvcnkgZW50cnkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRhYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZG90ZGlyL2V4cGVjdC4xCkBAIC0wLDAgKzEsNTkgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitNaXNzaW5nICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMTIuCitGaXg/IHllcworCitNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlIDEyLgorRml4PyB5ZXMKKworRmlyc3QgZW50cnkgJ1gnIChpbm9kZT0xMSkgaW4gZGlyZWN0b3J5IGlub2RlIDEzICgvYikgc2hvdWxkIGJlICcuJworRml4PyB5ZXMKKworTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxNC4KK0ZpeD8geWVzCisKK1NlY29uZCBlbnRyeSAnWFgnIChpbm9kZT0xMSkgaW4gZGlyZWN0b3J5IGlub2RlIDE1IHNob3VsZCBiZSAnLi4nCitGaXg/IHllcworCisnLicgZGlyZWN0b3J5IGVudHJ5IGluIGRpcmVjdG9yeSBpbm9kZSAxNyBpcyBub3QgTlVMTCB0ZXJtaW5hdGVkCitGaXg/IHllcworCisnLi4nIGRpcmVjdG9yeSBlbnRyeSBpbiBkaXJlY3RvcnkgaW5vZGUgMTcgaXMgbm90IE5VTEwgdGVybWluYXRlZAorRml4PyB5ZXMKKworTWlzc2luZyAnLicgaW4gZGlyZWN0b3J5IGlub2RlIDE2LgorRml4PyB5ZXMKKworTWlzc2luZyAnLi4nIGluIGRpcmVjdG9yeSBpbm9kZSAxNi4KK0ZpeD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorJy4uJyBpbiAvYSAoMTIpIGlzIDxUaGUgTlVMTCBpbm9kZT4gKDApLCBzaG91bGQgYmUgLyAoMikuCitGaXg/IHllcworCisnLi4nIGluIC9jICgxNCkgaXMgPFRoZSBOVUxMIGlub2RlPiAoMCksIHNob3VsZCBiZSAvICgyKS4KK0ZpeD8geWVzCisKKycuLicgaW4gL2QgKDE1KSBpcyA8VGhlIE5VTEwgaW5vZGU+ICgwKSwgc2hvdWxkIGJlIC8gKDIpLgorRml4PyB5ZXMKKworJy4uJyBpbiAvZSAoMTYpIGlzIDxUaGUgTlVMTCBpbm9kZT4gKDApLCBzaG91bGQgYmUgLyAoMikuCitGaXg/IHllcworCisnLi4nIGluIC9mICgxNykgaXMgPFRoZSBOVUxMIGlub2RlPiAoMCksIHNob3VsZCBiZSAvICgyKS4KK0ZpeD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDcwLCBjb3VudGVkPTcxKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3MCwgY291bnRlZD03MSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZG90ZGlyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZG90ZGlyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRkb3RkaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI5LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ5MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZG90ZGlyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkZG90ZGlyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzYmE3NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGRvdGRpci9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCAnLicgYW5kICcuLicgZW50cmllcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkaW5vZGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRpbm9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2FhMmNjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkaW5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSw0MCBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0lub2RlIDEyICgvbW90ZCkgaGFzIGludmFsaWQgbW9kZSAoMDExMDQ0NCkuCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDEzICgvdGltaW5ncykgaXMgMzksIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitpX2Jsb2Nrc19oaSBmb3IgaW5vZGUgMTMgKC90aW1pbmdzKSBpcyAxMDI0LCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworSW5vZGUgMTQgKC9ibG9ja19kZXYpIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLgorQ2xlYXI/IHllcworCitJbm9kZSAxNSAoL2NoYXJfZGV2KSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL3Rlc3Qtc3ltbGluayAoaW5vZGUgIzE2KSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMjUKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzYsIGNvdW50ZWQ9NzcpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc2LCBjb3VudGVkPTc3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRpbm9kZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGlub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOGEzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRpbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkaW5vZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRpbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjRhMGQxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkaW5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkaW5vZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGlub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlZTJkOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGlub2RlL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGVkIGlub2RlIGVudHJpZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2NjNTliCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzIgQEAKK1N1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgOCkuCitDbGVhcj8geWVzCisKKyoqKiBleHQzIGpvdXJuYWwgaGFzIGJlZW4gZGVsZXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDIgb25seSAqKioKKworQWRkaW5nIGRpcmhhc2ggaGludCB0byBmaWxlc3lzdGVtLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0pvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICBDbGVhcj8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSg4Mi0tMTExMSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzA4MCwgY291bnRlZD04MTEwKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3MDgwLCBjb3VudGVkPTgxMTApLgorRml4PyB5ZXMKKworUmVjcmVhdGUgam91cm5hbD8geWVzCisKK0NyZWF0aW5nIGpvdXJuYWwgKDEwMjQgYmxvY2tzKTogIERvbmUuCisKKyoqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMTExLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyX2luZGJsa3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiYjhiMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExMTEvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJkMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL2ltYWdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzE5MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cl9pbmRibGtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0Yjk5YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJfaW5kYmxrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2NvcnJ1cHRpb24gaW4gam91cm5hbCBpbm9kZSdzIGluZGlyZWN0IGJsb2NrcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cmJsa3MvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGM2NjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cmJsa3MvZXhwZWN0LjEKQEAgLTAsMCArMSwzMCBAQAorU3VwZXJibG9jayBoYXMgYW4gaW52YWxpZCBqb3VybmFsIChpbm9kZSA4KS4KK0NsZWFyPyB5ZXMKKworKioqIGV4dDMgam91cm5hbCBoYXMgYmVlbiBkZWxldGVkIC0gZmlsZXN5c3RlbSBpcyBub3cgZXh0MiBvbmx5ICoqKgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0pvdXJuYWwgaW5vZGUgaXMgbm90IGluIHVzZSwgYnV0IGNvbnRhaW5zIGRhdGEuICBDbGVhcj8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSg1MC0tMTA3OSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzExMiwgY291bnRlZD04MTQyKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3MTEyLCBjb3VudGVkPTgxNDIpLgorRml4PyB5ZXMKKworUmVjcmVhdGUgam91cm5hbD8geWVzCisKK0NyZWF0aW5nIGpvdXJuYWwgKDEwMjQgYmxvY2tzKTogIERvbmUuCisKKyoqKiBqb3VybmFsIGhhcyBiZWVuIHJlLWNyZWF0ZWQgLSBmaWxlc3lzdGVtIGlzIG5vdyBleHQzIGFnYWluICoqKgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDc5LzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyYmxrcy9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJibGtzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTA3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyYmxrcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNzkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJibGtzL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkam91cmJsa3MvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzNmE0YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJibGtzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZGpvdXJibGtzL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyYmxrcy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2ZhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRqb3VyYmxrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK0lsbGVnYWwgYmxvY2tzIGluIGpvdXJuYWwgaW5vZGUgKGFuZCBiYWNrdXAgaW4gc3VwZXJibG9jaykKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2YwYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkb3JwaGFuL2V4cGVjdC4xCkBAIC0wLDAgKzEsNzcgQEAKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDU0ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00NDYxMCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDMyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA2NyAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0JhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZXMgdGhhdCB3ZXJlIHBhcnQgb2YgYSBjb3JydXB0ZWQgb3JwaGFuIGxpbmtlZCBsaXN0IGZvdW5kLiAgRml4PyB5ZXMKKworSW5vZGUgMTMgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDE3IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitEZWxldGVkIGlub2RlIDE4IGhhcyB6ZXJvIGR0aW1lLiAgRml4PyB5ZXMKKworSW5vZGUgMTkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDIyIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAyMyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMjQgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDI1IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAyNiB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMjcgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDI4IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAzMCB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgMzMgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDM2IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSAzOCB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNDMgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDQ0IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA0NiB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNDcgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDUxIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA1MyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNTYgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDYxIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA2NSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNzAgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDcxIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA3NSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgNzcgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDgzIHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA4NCB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgODUgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDg3IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA5MSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgOTMgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDk2IHdhcyBwYXJ0IG9mIHRoZSBvcnBoYW5lZCBpbm9kZSBsaXN0LiAgRklYRUQuCitJbm9kZSA5NyB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorSW5vZGUgOTkgd2FzIHBhcnQgb2YgdGhlIG9ycGhhbmVkIGlub2RlIGxpc3QuICBGSVhFRC4KK0lub2RlIDEwOSB3YXMgcGFydCBvZiB0aGUgb3JwaGFuZWQgaW5vZGUgbGlzdC4gIEZJWEVELgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDEzNjMtLTEzOTkpIC0oMTQwMS0tMTQwNSkgLTE0NjEgLSgxNTA1LS0xNTMzKSAtKDE1MzgtLTE1NDApIC0oMTU2Ni0tMTU3NCkgLSgxNTkzLS0xNjAwKSAtKDE2MDQtLTE2MDUpIC0xNjU0IC0oMTY1Ni0tMTcwMykgLSgxNzA2LS0xNzI2KSAtMTcyOCAtKDE4MDMtLTE4MDQpIC0xOTEzIC0oMjI4Ni0tMjI5NSkgLTIzOTIgLSgyOTYwLS0yOTczKSAtKDMxMTgtLTMxNTQpIC0zMzQ1IC0oMzQ1MS0tMzQ1MikgLTM1NjkgLSgzNzQ4LS0zNzQ5KSAtNDQwOSAtKDQ0MTEtLTQ0MTQpIC0oNDQzNS0tNDQ1NikgLSg0NzIwLS00NzI1KSAtNDkyOSAtKDQ5NjctLTQ5ODQpIC0oNTI1OC0tNTI3NSkgLSg1MzUyLS01MzU0KSAtKDU0MTItLTU0MjUpIC01NDkzIC0oNTYyMC0tNTY0NykgLSg1Njc2LS01Njc3KSAtKDU3MjAtLTU3NDQpIC0oNTc2MC0tNTc4OCkgLTYwMTMKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTgwMSwgY291bnRlZD02MjEwKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg1ODAxLCBjb3VudGVkPTYyMTApLgorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTEzIC0oMTctLTE5KSAtKDIyLS0yOCkgLTMwIC0zMyAtMzYgLTM4IC0oNDMtLTQ0KSAtKDQ2LS00NykgLTUxIC01MyAtNTYgLTYxIC02NSAtKDcwLS03MSkgLTc1IC03NyAtKDgzLS04NSkgLTg3IC05MSAtOTMgLSg5Ni0tOTcpIC05OSAtMTA5CitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE5NTEsIGNvdW50ZWQ9MTk4OSkuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQxLCBjb3VudGVkPTIyKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgxOTUxLCBjb3VudGVkPTE5ODkpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiA1OS8yMDQ4IGZpbGVzICgyMi4wJSBub24tY29udGlndW91cyksIDE5ODIvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDkyOGViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkb3JwaGFuL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNTkvMjA0OCBmaWxlcyAoMjIuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxOTgyLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRvcnBoYW4vaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRvcnBoYW4vaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlM2EzOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRvcnBoYW4vbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZG9ycGhhbi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTQ3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRvcnBoYW4vbmFtZQpAQCAtMCwwICsxIEBACitjb3JydXB0ZWQgb3JwaGFuIGxpc3QKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHByaW1hcnkvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYjgxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4xCkBAIC0wLDAgKzEsMjcgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworVGhlIHByaW1hcnkgc3VwZXJibG9jayAoMSkgaXMgb24gdGhlIGJhZCBibG9jayBsaXN0LgorCitJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC4KK1lvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGUKK3RoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy4KKworQ2xlYXI/IHllcworCitCbG9jayAyIGluIHRoZSBwcmltYXJ5IGdyb3VwIGRlc2NyaXB0b3JzIGlzIG9uIHRoZSBiYWQgYmxvY2sgbGlzdAorCitJZiB0aGUgYmxvY2sgaXMgcmVhbGx5IGJhZCwgdGhlIGZpbGVzeXN0ZW0gY2FuIG5vdCBiZSBmaXhlZC4KK1lvdSBjYW4gcmVtb3ZlIHRoaXMgYmxvY2sgZnJvbSB0aGUgYmFkIGJsb2NrIGxpc3QgYW5kIGhvcGUKK3RoYXQgdGhlIGJsb2NrIGlzIHJlYWxseSBPSy4gIEJ1dCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcy4KKworQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRwcmltYXJ5L2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcHJpbWFyeS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODIxZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcHJpbWFyeS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcHJpbWFyeS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHByaW1hcnkvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlYjYxMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHByaW1hcnkvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcHJpbWFyeS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcHJpbWFyeS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2NlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRwcmltYXJ5L25hbWUKQEAgLTAsMCArMSBAQAorYmFkIGJsb2NrcyBpbiB0aGUgcHJpbWFyeSBzdXBlcmJsb2NrIGFuZCBncm91cCBkZXNjcmlwdG9ycwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHJvb3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMDFlNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHJvb3QvZXhwZWN0LjEKQEAgLTAsMCArMSwyOSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitSb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnLi4nIGluIDwyPi88MTE+ICgxMSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDIuICBDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgQWxsb2NhdGU/IHllcworCitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTEgKC4uLikKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDExIHJlZiBjb3VudCBpcyAzLCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK1VuYXR0YWNoZWQgaW5vZGUgMTIKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxMiByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRyb290L2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIwMjFhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjQvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHJvb3QvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5ODBhMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHJvb3QvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkcm9vdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OWU0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRyb290L25hbWUKQEAgLTAsMCArMSBAQAorZmlsZSBpbiByb290IGRpcmVjdG9yeSBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRzeW1saW5rcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhiNTdkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvZXhwZWN0LjEKQEAgLTAsMCArMSw2MSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitTcGVjaWFsIChkZXZpY2Uvc29ja2V0L2ZpZm8vc3ltbGluaykgZmlsZSAoaW5vZGUgMTgpIGhhcyBpbW11dGFibGUKK29yIGFwcGVuZC1vbmx5IGZsYWcgc2V0LiAgQ2xlYXI/IHllcworCitJbm9kZSAxOSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIENsZWFyPyB5ZXMKKworSWxsZWdhbCBibG9jayAjMCAoMTIzNDU2Nzg5MCkgaW4gaW5vZGUgMTkuICBDTEVBUkVELgorSW5vZGUgMTksIGlfYmxvY2tzIGlzIDIsIHNob3VsZCBiZSAwLiAgRml4PyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDIwKSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworSW5vZGUgMjEgaXMgdG9vIGJpZy4gIFRydW5jYXRlPyB5ZXMKKworQmxvY2sgIzEgKDIyKSBjYXVzZXMgc3ltbGluayB0byBiZSB0b28gYmlnLiAgQ0xFQVJFRC4KK0lub2RlIDIxLCBpX2Jsb2NrcyBpcyA0LCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorU3ltbGluayAvZW1wdHlfbGluayAoaW5vZGUgIzE3KSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9sb25nX2Zhc3RsaW5rIChpbm9kZSAjMTMpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2xvbmdfbGluayAoaW5vZGUgIzE0KSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9oaWdoX2Zhc3RsaW5rIChpbm9kZSAjMTUpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2hpZ2hfbGluayAoaW5vZGUgIzE2KSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9lbXB0eV9mYXN0bGluayAoaW5vZGUgIzEyKSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9iYWRfbGlua19ibG9jayAoaW5vZGUgIzE5KSBpcyBpbnZhbGlkLgorQ2xlYXI/IHllcworCitTeW1saW5rIC9leHRyYV9saW5rX2Jsb2NrIChpbm9kZSAjMjEpIGlzIGludmFsaWQuCitDbGVhcj8geWVzCisKK1N5bWxpbmsgL2JhZF9saW5rX3NpemUgKGlub2RlICMyMikgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworU3ltbGluayAvYmFkX2Zhc3RsaW5rX3NpemUgKGlub2RlICMyMykgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxMDAwLCBjb3VudGVkPTEwMDEpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDEwMDAsIGNvdW50ZWQ9MTAwMSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzLzMyIGZpbGVzICg3LjclIG5vbi1jb250aWd1b3VzKSwgMjMvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHN5bWxpbmtzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5OTU1MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHN5bWxpbmtzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDI0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWRzeW1saW5rcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkc3ltbGlua3MvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHN5bWxpbmtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwODU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHN5bWxpbmtzL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGVkIHN5bWxpbmtzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWR0YWJsZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHRhYmxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODgxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWR0YWJsZS9leHBlY3QuMQpAQCAtMCwwICsxLDQ1IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0dyb3VwIDAncyBibG9jayBiaXRtYXAgKDMpIGlzIGJhZC4gIFJlbG9jYXRlPyB5ZXMKKworR3JvdXAgMCdzIGlub2RlIGJpdG1hcCAoNCkgaXMgYmFkLiAgUmVsb2NhdGU/IHllcworCitSZWxvY2F0aW5nIGdyb3VwIDAncyBibG9jayBiaXRtYXAgZnJvbSAzIHRvIDkuLi4KK1JlbG9jYXRpbmcgZ3JvdXAgMCdzIGlub2RlIGJpdG1hcCBmcm9tIDQgdG8gMTAuLi4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ2xvc3QrZm91bmQnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMTEpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgQ3JlYXRlPyB5ZXMKKworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitJbm9kZSAyIHJlZiBjb3VudCBpcyA0LCBzaG91bGQgYmUgMy4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgxMi0tMjApCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTg3KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD04NykuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICArKDEyLS0xNikgKygyNS0tMzIpCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIwLCBjb3VudGVkPTcpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgzLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDIwLCBjb3VudGVkPTcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAyNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHRhYmxlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkdGFibGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjNTU0YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHRhYmxlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMjUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWR0YWJsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JhZHRhYmxlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGJhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYWR0YWJsZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYWR0YWJsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkdGFibGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE4YmFlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmFkdGFibGUvbmFtZQpAQCAtMCwwICsxIEBACitiYWQgYmxvY2tzIGluIGJpdG1hcHMgYW5kIGlub2RlIHRhYmxlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iYmZpbGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmZpbGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2MzlmNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JiZmlsZS9leHBlY3QuMQpAQCAtMCwwICsxLDQ4IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0dyb3VwIDAncyBpbm9kZSBiaXRtYXAgKDQpIGlzIGJhZC4gIFJlbG9jYXRlPyB5ZXMKKworUmVsb2NhdGluZyBncm91cCAwJ3MgaW5vZGUgYml0bWFwIGZyb20gNCB0byA0My4uLgorCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjogMjEKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTE6IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDI1IDI2CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDMgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC8gKGlub2RlICMyLCBtb2QgdGltZSBTdW4gSmFuICAyIDA4OjI5OjEzIDE5OTQpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJPFRoZSBiYWQgYmxvY2tzIGlub2RlPiAoaW5vZGUgIzEsIG1vZCB0aW1lIFN1biBKdWwgMTcgMDA6NDc6NTggMTk5NCkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvbG9zdCtmb3VuZCAoaW5vZGUgIzExLCBtb2QgdGltZSBTdW4gSmFuICAyIDA4OjI4OjQwIDE5OTQpIAorICBoYXMgMTIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCTxUaGUgYmFkIGJsb2NrcyBpbm9kZT4gKGlub2RlICMxLCBtb2QgdGltZSBTdW4gSnVsIDE3IDAwOjQ3OjU4IDE5OTQpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL3Rlcm1jYXAgKGlub2RlICMxMiwgbW9kIHRpbWUgU3VuIEphbiAgMiAwODoyOToxMyAxOTk0KSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCTxUaGUgYmFkIGJsb2NrcyBpbm9kZT4gKGlub2RlICMxLCBtb2QgdGltZSBTdW4gSnVsIDE3IDAwOjQ3OjU4IDE5OTQpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKzQzCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDU3LCBjb3VudGVkPTQxKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg1NywgY291bnRlZD00MSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmJmaWxlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmJmaWxlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDkxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmZpbGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8zMiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDU5LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiZmlsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JiZmlsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjAxMzgxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmJmaWxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiZmlsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmJmaWxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0M2ZiYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JiZmlsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBibG9ja3MgaW4gZmlsZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiaW5vZGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2Q2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNTEgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnYTYnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMTcpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK0VudHJ5ICdhNycgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgxOCkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2E4JyBpbiAvICgyKSBwb2ludHMgdG8gaW5vZGUgKDE5KSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLgorQ2xlYXI/IHllcworCitFbnRyeSAnYjEnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMjApIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK0VudHJ5ICdiMicgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgyMSkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworRW50cnkgJ2IzJyBpbiAvICgyKSBwb2ludHMgdG8gaW5vZGUgKDIyKSBsb2NhdGVkIGluIGEgYmFkIGJsb2NrLgorQ2xlYXI/IHllcworCitFbnRyeSAnYjQnIGluIC8gKDIpIHBvaW50cyB0byBpbm9kZSAoMjMpIGxvY2F0ZWQgaW4gYSBiYWQgYmxvY2suCitDbGVhcj8geWVzCisKK0VudHJ5ICdiNScgaW4gLyAoMikgcG9pbnRzIHRvIGlub2RlICgyNCkgbG9jYXRlZCBpbiBhIGJhZCBibG9jay4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTgzCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE5NjIsIGNvdW50ZWQ9MTk2NSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTk2MiwgY291bnRlZD0xOTY1KS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogICsoNDEtLTQ4KQorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg0ODUsIGNvdW50ZWQ9NDc3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICg0ODUsIGNvdW50ZWQ9NDc3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMzUvNTEyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgODMvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiaW5vZGUvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTI4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMzUvNTEyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgODMvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiaW5vZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZGNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iYmlub2RlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JiaW5vZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JiaW5vZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRiM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmJpbm9kZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBibG9ja3MgaW4gaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JpZ19zcGFyc2UvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2FkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTYgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIsIGlfc2l6ZSBpcyA2MTQ0MCwgc2hvdWxkIGJlIDQzOTgwNTA3NTg2NTYuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0ZpbGVzeXN0ZW0gY29udGFpbnMgbGFyZ2UgZmlsZXMsIGJ1dCBsYWNrcyBMQVJHRV9GSUxFIGZsYWcgaW4gc3VwZXJibG9jay4KK0ZpeD8geWVzCisKK0ZpbGVzeXN0ZW0gaGFzIGZlYXR1cmUgZmxhZyhzKSBzZXQsIGJ1dCBpcyBhIHJldmlzaW9uIDAgZmlsZXN5c3RlbS4gIEZpeD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iaWdfc3BhcnNlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmlnX3NwYXJzZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ1ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmlnX3NwYXJzZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmlnX3NwYXJzZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JpZ19zcGFyc2UvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3ZmVlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JpZ19zcGFyc2UvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYmlnX3NwYXJzZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYmlnX3NwYXJzZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDk3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iaWdfc3BhcnNlL25hbWUKQEAgLTAsMCArMSBAQAorYmlnIHNwYXJzZSBmaWxlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9iaXRtYXBzL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5ODRkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMQpAQCAtMCwwICsxLDE3IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKzEyIC0yMCArNDEgLTUwCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICArMTEgLTE1CitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICg5LjElIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfYml0bWFwcy9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2JpdG1hcHMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkMWMyNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2JpdG1hcHMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JpdG1hcHMvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9iaXRtYXBzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTMzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9iaXRtYXBzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2JpdG1hcHMvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2JpdG1hcHMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzA5YmZhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfYml0bWFwcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2NvcnJ1cHRlZCBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ZiZWFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvZXhwZWN0LjEKQEAgLTAsMCArMSwzOCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxNCwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgNCwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxNSwgaV9ibG9ja3MgaXMgNCwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDEyICgvZGlyKSBpcyAyMiwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDEzICgvZmlsZSkgaXMgMjIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitpX2ZpbGVfYWNsIGZvciBpbm9kZSAxNCAoL3N5bWxpbmspIGlzIDIyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworaV9maWxlX2FjbCBmb3IgaW5vZGUgMTUgKC9sb25nLXN5bWxpbmspIGlzIDIzLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgyMi0tMjMpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc2LCBjb3VudGVkPTc4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NiwgY291bnRlZD03OCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE1LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jbGVhcl94YXR0ci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZkMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2NsZWFyX3hhdHRyL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfY2xlYXJfeGF0dHIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhY2ExNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2NsZWFyX3hhdHRyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2NsZWFyX3hhdHRyL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jbGVhcl94YXR0ci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWQ2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jbGVhcl94YXR0ci9uYW1lCkBAIC0wLDAgKzEgQEAKK2NsZWFyaW5nIGlfZmlsZV9hY2wgd2hlbiAhZXh0X2F0dHIgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfY3Jhc2hkaXNrL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfY3Jhc2hkaXNrL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZGRmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorZXh0MmZzX29wZW4yOiBUaGUgZXh0MiBzdXBlcmJsb2NrIGlzIGNvcnJ1cHQKKy4uL2UyZnNjay9lMmZzY2s6IFN1cGVyYmxvY2sgaW52YWxpZCwgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi4KKy4uL2UyZnNjay9lMmZzY2s6IFRoZSBleHQyIHN1cGVyYmxvY2sgaXMgY29ycnVwdCB3aGlsZSB0cnlpbmcgdG8gb3BlbiB0ZXN0LmltZworCitUaGUgc3VwZXJibG9jayBjb3VsZCBub3QgYmUgcmVhZCBvciBkb2VzIG5vdCBkZXNjcmliZSBhIGNvcnJlY3QgZXh0MgorZmlsZXN5c3RlbS4gIElmIHRoZSBkZXZpY2UgaXMgdmFsaWQgYW5kIGl0IHJlYWxseSBjb250YWlucyBhbiBleHQyCitmaWxlc3lzdGVtIChhbmQgbm90IHN3YXAgb3IgdWZzIG9yIHNvbWV0aGluZyBlbHNlKSwgdGhlbiB0aGUgc3VwZXJibG9jaworaXMgY29ycnVwdCwgYW5kIHlvdSBtaWdodCB0cnkgcnVubmluZyBlMmZzY2sgd2l0aCBhbiBhbHRlcm5hdGUgc3VwZXJibG9jazoKKyAgICBlMmZzY2sgLWIgODE5MyA8ZGV2aWNlPgorCitFeGl0IHN0YXR1cyBpcyA4CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwZTdhMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2NyYXNoZGlzay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2NyYXNoZGlzay9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYThhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svbmFtZQpAQCAtMCwwICsxIEBACitTdXBlcmJsb2NrIHdpdGggaWxsZWdhbCB2YWx1ZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2NyYXNoZGlzay9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjJiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9jcmFzaGRpc2svc2NyaXB0CkBAIC0wLDAgKzEsMiBAQAorT05FX1BBU1NfT05MWT0idHJ1ZSIKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyZjExMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNTAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmYxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTUwLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfMTI4L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGEwY2FiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplXzEyOC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfMTI4L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfMTI4L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5ZTAwMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV8xMjgvbmFtZQpAQCAtMCwwICsxIEBACisxMjgtYnl0ZSBncm91cCBkZXNjcmlwdG9ycwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5ZWUwNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IEJsb2NrIGdyb3VwIGRlc2NyaXB0b3Igc2l6ZSBpbmNvcnJlY3QKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDgwMS8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0MjlmZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rlc2Nfc2l6ZV9iYWQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDgwMS8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kZXNjX3NpemVfYmFkL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQwMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGVzY19zaXplX2JhZC9zY3JpcHQKQEAgLTAsMCArMSwxNyBAQAoraWYgISB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorICAgICAgICBlY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKKwlyZXR1cm4gMAorZmkKKworREVTQ1JJUFRJT049ImJhZCBzdXBlcmJsb2NrIHNfZGVzY19zaXplIgorU0tJUF9HVU5aSVA9dHJ1ZQordG91Y2ggJFRNUEZJTEUKKyRNS0UyRlMgLUYgLW8gTGludXggLU8gNjRiaXQsZXh0ZW50cyAtTiAzMiAtYiAxMDI0IC1nIDUxMiAtRSBkZXNjX3NpemU9MTI4ICRUTVBGSUxFIDIwNDggPiAkdGVzdF9uYW1lLmxvZyAyPiYxCiskREVCVUdGUyAtUiAic3N2IGRlc2Nfc2l6ZSAxMjkiIC13ICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKKworRTJGU0NLX1RJTUU9MjAwNzA0MTAyMTAwCitleHBvcnQgRTJGU0NLX1RJTUUKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCisKK3Vuc2V0IEUyRlNDS19USU1FCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNGE5OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGlzIGEgc29ja2V0IGJ1dCBpdCBsb29rcyBsaWtlIGl0IGlzIHJlYWxseSBhIGRpcmVjdG9yeS4KK0ZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDIzNTJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGlyX2JhZF9tb2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2NDdhMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2Rpcl9iYWRfbW9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmFjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJfYmFkX21vZGUvbmFtZQpAQCAtMCwwICsxIEBACitkaXJlY3Rvcnkgd2l0aCBjb3JydXB0ZWQgaV9tb2RlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGlybGluay9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNjMGUxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGlybGluay9leHBlY3QuMQpAQCAtMCwwICsxLDE0IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ3F1dXgnIGluIC9mb28gKDEyKSBpcyBhIGxpbmsgdG8gZGlyZWN0b3J5IC9iYXIgKDEzKS4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI0LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2RpcmxpbmsvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjAyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGlybGluay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZThkZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZGlybGluay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kaXJsaW5rL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkYmRjZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2RpcmxpbmsvbmFtZQpAQCAtMCwwICsxIEBACitkaXJlY3RvcnkgaGFyZCBsaW5rcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTI4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAvZXhwZWN0LjEKQEAgLTAsMCArMSwzOCBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxMjogMjUgMjYKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTM6IDI1IDI2CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDIgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC90ZXJtY2FwIChpbm9kZSAjMTIsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MTQgMTk5MykgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvbW90ZCAoaW5vZGUgIzEzLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjIwIDE5OTMpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL21vdGQgKGlub2RlICMxMywgbW9kIHRpbWUgVHVlIFNlcCAyMSAwMzoxOToyMCAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCS90ZXJtY2FwIChpbm9kZSAjMTIsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MTQgMTk5MykKK011bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg0NCwgY291bnRlZD02MCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNjIsIGNvdW50ZWQ9NjApLgorRml4PyB5ZXMKKworUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIEZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDcuNyUgbm9uLWNvbnRpZ3VvdXMpLCA0MC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlYjE1OQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICgxNS40JSBub24tY29udGlndW91cyksIDQwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTA0NjkwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5NmI4MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cC9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrcyBjbGFpbWVkIGJ5IHR3byBkaWZmZXJlbnQgZmlsZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDIvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzYwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAyL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDUgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDI1IDI2CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEzOiAyNSAyNiA1NyA1OAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNDogNTcgNTgKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL3Rlcm1jYXAgKGlub2RlICMxMiwgbW9kIHRpbWUgVHVlIFNlcCAyMSAwMzoxOToxNCAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMSBmaWxlKHMpOgorCS9tb3RkIChpbm9kZSAjMTMsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MjAgMTk5MykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvbW90ZCAoaW5vZGUgIzEzLCBtb2QgdGltZSBUdWUgU2VwIDIxIDAzOjE5OjIwIDE5OTMpIAorICBoYXMgNCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAyIGZpbGUocyk6CisJL3Bhc3MxLmMgKGlub2RlICMxNCwgbW9kIHRpbWUgVHVlIFNlcCAyMSAwNDoyODozNyAxOTkzKQorCS90ZXJtY2FwIChpbm9kZSAjMTIsIG1vZCB0aW1lIFR1ZSBTZXAgMjEgMDM6MTk6MTQgMTk5MykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvcGFzczEuYyAoaW5vZGUgIzE0LCBtb2QgdGltZSBUdWUgU2VwIDIxIDA0OjI4OjM3IDE5OTMpIAorICBoYXMgMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL21vdGQgKGlub2RlICMxMywgbW9kIHRpbWUgVHVlIFNlcCAyMSAwMzoxOToyMCAxOTkzKQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDgsIGNvdW50ZWQ9MjIpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDI2LCBjb3VudGVkPTIyKS4KK0ZpeD8geWVzCisKK1BhZGRpbmcgYXQgZW5kIG9mIGJsb2NrIGJpdG1hcCBpcyBub3Qgc2V0LiBGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE2LzE2IGZpbGVzICg2LjMlIG5vbi1jb250aWd1b3VzKSwgNzgvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMi9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwOGIwOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoMTIuNSUgbm9uLWNvbnRpZ3VvdXMpLCA3OC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAyL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI4NTNkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAyL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2MzZlMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDIvbmFtZQpAQCAtMCwwICsxIEBACitibG9ja3MgY2xhaW1lZCBieSB0aHJlZSBkaWZmZXJlbnQgZmlsZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjc1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAzL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDUgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTYsIGlfYmxvY2tzIGlzIDIyLCBzaG91bGQgYmUgMjQuICBGaXg/IHllcworCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxMTogMjQgMjQKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTQ6IDY5IDY5CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE2OiA5OSA5OQorUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworKFRoZXJlIGFyZSAzIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLikKKworRmlsZSAvbG9zdCtmb3VuZCAoaW5vZGUgIzExLCBtb2QgdGltZSBNb24gU2VwIDIwIDAzOjI2OjM2IDE5OTMpIAorICBoYXMgMiBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAwIGZpbGUocyk6CitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL3Bhc3MxLmMgKGlub2RlICMxNCwgbW9kIHRpbWUgVHVlIFNlcCAyMSAwNDoyODozNyAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9lMmZzY2sgKGlub2RlICMxNiwgbW9kIHRpbWUgVHVlIFNlcCAyMSAwNDozMjoyMiAxOTkzKSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0RpcmVjdG9yeSBpbm9kZSAxMSwgYmxvY2sgIzEyLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC02OAorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgyMCwgY291bnRlZD0xOSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMjAsIGNvdW50ZWQ9MTkpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoMjUuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMxYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE2LzE2IGZpbGVzICgyNS4wJSBub24tY29udGlndW91cyksIDgxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDMvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTJjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXAzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDMvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjMxMmFkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwMy9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrcyBjbGFpbWVkIGJ5IG9uZSBmaWxlIG11bHRpcGxlIHRpbWVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXA0L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDUxYmIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9leHBlY3QuMQpAQCAtMCwwICsxLDExMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNjogMzAKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTc6IDMwCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE4OiAzMAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxOTogMzAKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjA6IDM0CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDIxOiAzNAorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAyMjogMzQKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjM6IDM0CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDggaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC9kaXIvZm9vIChpbm9kZSAjMTYsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyL3F1dXgxIChpbm9kZSAjMTksIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMy9iYXogKGlub2RlICMxOCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIyL2JhciAoaW5vZGUgIzE3LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2RpcjIvYmFyIChpbm9kZSAjMTcsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyL3F1dXgxIChpbm9kZSAjMTksIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMy9iYXogKGlub2RlICMxOCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIvZm9vIChpbm9kZSAjMTYsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZGlyMy9iYXogKGlub2RlICMxOCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMyBmaWxlKHMpOgorCS9kaXIvcXV1eDEgKGlub2RlICMxOSwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIyL2JhciAoaW5vZGUgIzE3LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2Rpci9mb28gKGlub2RlICMxNiwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9kaXIvcXV1eDEgKGlub2RlICMxOSwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMyBmaWxlKHMpOgorCS9kaXIzL2JheiAoaW5vZGUgIzE4LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjIvYmFyIChpbm9kZSAjMTcsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyL2ZvbyAoaW5vZGUgIzE2LCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC9kaXIvZmVlIChpbm9kZSAjMjAsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyNC9mdW0gKGlub2RlICMyMywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIzL2ZvZSAoaW5vZGUgIzIyLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjIvZmllIChpbm9kZSAjMjEsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvZGlyMi9maWUgKGlub2RlICMyMSwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMyBmaWxlKHMpOgorCS9kaXI0L2Z1bSAoaW5vZGUgIzIzLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2RpcjMvZm9lIChpbm9kZSAjMjIsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyL2ZlZSAoaW5vZGUgIzIwLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL2RpcjMvZm9lIChpbm9kZSAjMjIsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwkvZGlyNC9mdW0gKGlub2RlICMyMywgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIyL2ZpZSAoaW5vZGUgIzIxLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpCisJL2Rpci9mZWUgKGlub2RlICMyMCwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9kaXI0L2Z1bSAoaW5vZGUgIzIzLCBtb2QgdGltZSBUdWUgQXByIDEwIDIxOjAwOjAwIDIwMDcpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAzIGZpbGUocyk6CisJL2RpcjMvZm9lIChpbm9kZSAjMjIsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKKwkvZGlyMi9maWUgKGlub2RlICMyMSwgbW9kIHRpbWUgVHVlIEFwciAxMCAyMTowMDowMCAyMDA3KQorCS9kaXIvZmVlIChpbm9kZSAjMjAsIG1vZCB0aW1lIFR1ZSBBcHIgMTAgMjE6MDA6MDAgMjAwNykKK011bHRpcGx5LWNsYWltZWQgYmxvY2tzIGFscmVhZHkgcmVhc3NpZ25lZCBvciBjbG9uZWQuCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorSW52YWxpZCBpbm9kZSBudW1iZXIgZm9yICcuJyBpbiBkaXJlY3RvcnkgaW5vZGUgMjAuCitGaXg/IHllcworCitJbnZhbGlkIGlub2RlIG51bWJlciBmb3IgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAyMS4KK0ZpeD8geWVzCisKK0ludmFsaWQgaW5vZGUgbnVtYmVyIGZvciAnLicgaW4gZGlyZWN0b3J5IGlub2RlIDIyLgorRml4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisnLi4nIGluIC9kaXIvZmVlICgyMCkgaXMgL2RpcjQgKDE1KSwgc2hvdWxkIGJlIC9kaXIgKDEyKS4KK0ZpeD8geWVzCisKKycuLicgaW4gL2RpcjIvZmllICgyMSkgaXMgL2RpcjQgKDE1KSwgc2hvdWxkIGJlIC9kaXIyICgxMykuCitGaXg/IHllcworCisnLi4nIGluIC9kaXIzL2ZvZSAoMjIpIGlzIC9kaXI0ICgxNSksIHNob3VsZCBiZSAvZGlyMyAoMTQpLgorRml4PyB5ZXMKKworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitJbm9kZSAxMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxNCByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxNSByZWYgY291bnQgaXMgMCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxNiByZWYgY291bnQgaXMgMSwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxNyByZWYgY291bnQgaXMgMSwgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxOSByZWYgY291bnQgaXMgMSwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMjMvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXA0L2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWRmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDIzLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZGJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXA0L25hbWUKQEAgLTAsMCArMSwyIEBACitmaW5kIGFsbCBkaXJlY3RvcnkgcGF0aG5hbWVzCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwNC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0NWJlZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cDQvc2NyaXB0CkBAIC0wLDAgKzEsNTYgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK1NLSVBfR1VOWklQPSJ0cnVlIgorVEVTVF9EQVRBPSIkdGVzdF9uYW1lLnRtcCIKKworZWNobyAiLyBNdXJwaHkgTWFnaWMuICBUaGUgU2VDckV0IG9mIHRoZSBVbkl2RXJTZSBpcyA0MywgTk9UIDQyIiA+ICRURVNUX0RBVEEKKwordG91Y2ggJFRNUEZJTEUKKyRNS0UyRlMgLU4gMzIgLUYgLW8gTGludXggLWIgMTAyNCAkVE1QRklMRSAxMDAgPiAvZGV2L251bGwgMj4mMSAKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiA+IC9kZXYvbnVsbCAyPiYxCitzZXRfY3VycmVudF90aW1lIDIwMDcwNDEwMjEwMAorc2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwCitzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwKK3NldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMAorbWtkaXIgZGlyCitta2RpciBkaXIyCitta2RpciBkaXIzCitta2RpciBkaXI0CitjZCAvZGlyCit3cml0ZSAkVEVTVF9EQVRBIGZvbworY2QgL2RpcjIKK3dyaXRlICRURVNUX0RBVEEgYmFyCitjZCAvZGlyMword3JpdGUgJFRFU1RfREFUQSBiYXoKK2NkIC9kaXI0Cit3cml0ZSAkVEVTVF9EQVRBIHF1dXgKK21rZGlyIC9kaXIvZmVlCitta2RpciAvZGlyMi9maWUKK21rZGlyIC9kaXIzL2ZvZQorbWtkaXIgL2RpcjQvZnVtCitsaW5rIC9kaXIvZm9vIC9kaXIyL2ZvbzEKK2xpbmsgL2Rpci9mb28gL2RpcjMvZm9vMgorbGluayAvZGlyMi9iYXIgL2RpcjMvYmFyMQorbGluayAvZGlyNC9xdXV4IC9kaXIvcXV1eDEKK2xpbmsgL2RpcjQvcXV1eCAvZGlyMi9xdXV4Mgorc2V0X2lub2RlX2ZpZWxkIC9kaXIvZm9vIGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2RpcjIvYmFyIGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2RpcjMvYmF6IGJsb2NrWzBdIDMwCitzZXRfaW5vZGVfZmllbGQgL2Rpci9mZWUgYmxvY2tbMF0gMzQKK3NldF9pbm9kZV9maWVsZCAvZGlyMi9maWUgYmxvY2tbMF0gMzQKK3NldF9pbm9kZV9maWVsZCAvZGlyMy9mb2UgYmxvY2tbMF0gMzQKK3EKK0VPRgorCitFMkZTQ0tfVElNRT0yMDA3MDQxMDIxMDAKK2V4cG9ydCBFMkZTQ0tfVElNRQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworcm0gLWYgJFRFU1RfREFUQQorCit1bnNldCBFMkZTQ0tfVElNRSBURVNUX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2JhL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2JhL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYWQ0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfYmEvZXhwZWN0LjEKQEAgLTAsMCArMSw2OSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxNiwgaV9zaXplIGlzIDgxOTIsIHNob3VsZCBiZSA0MDk2MDAuICBGaXg/IHllcworCitJbm9kZSAxNiwgaV9ibG9ja3MgaXMgMTI4LCBzaG91bGQgYmUgODk2LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTY6IDE2MCAxNjEgMTYyIDE2MyAxNjQgMTY1IDE2NiAxNjcgMTY4IDE2OSAxNzAgMTcxIDE3MiAxNzMgMTc0IDE3NSAxNzYgMTc3IDE3OCAxNzkgMTgwIDE4MSAxODIgMTgzIDE4NCAxODUgMTg2IDE4NyAxODggMTg5IDE5MCAxOTEgMTkyIDE5MyAxOTQgMTk1IDE5NiAxOTcgMTk4IDE5OSAyMDAgMjAxIDIwMiAyMDMgMjA0IDIwNSAyMDYgMjA3IDIwOCAyMDkgMjEwIDIxMSAyMTIgMjEzIDIxNCAyMTUgMjE2IDIxNyAyMTggMjE5IDIyMCAyMjEgMjIyIDIyMyAyMjQgMjI1IDIyNiAyMjcgMjI4IDIyOSAyMzAgMjMxIDIzMiAyMzMgMjM0IDIzNSAyMzYgMjM3IDIzOCAyMzkKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTc6IDE2MCAxNjEKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTg6IDE3NiAxNzcKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTk6IDE5MiAxOTMKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjA6IDIwOCAyMDkKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMjE6IDIyNCAyMjUKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgNiBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgLzUgKGlub2RlICMxNiwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMSAyMDExKSAKKyAgaGFzIDUgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggNSBmaWxlKHMpOgorCS8xMCAoaW5vZGUgIzIxLCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjM2IDIwMTEpCisJLzkgKGlub2RlICMyMCwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozNSAyMDExKQorCS84IChpbm9kZSAjMTksIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzQgMjAxMSkKKwkvNyAoaW5vZGUgIzE4LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMzIDIwMTEpCisJLzYgKGlub2RlICMxNywgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMiAyMDExKQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC82IChpbm9kZSAjMTcsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzIgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC83IChpbm9kZSAjMTgsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzMgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC84IChpbm9kZSAjMTksIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzQgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC85IChpbm9kZSAjMjAsIG1vZCB0aW1lIFN1biBOb3YgMjcgMDQ6Mzk6MzUgMjAxMSkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvNSAoaW5vZGUgIzE2LCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjMxIDIwMTEpCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrcyBhbHJlYWR5IHJlYXNzaWduZWQgb3IgY2xvbmVkLgorCitGaWxlIC8xMCAoaW5vZGUgIzIxLCBtb2QgdGltZSBTdW4gTm92IDI3IDA0OjM5OjM2IDIwMTEpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJLzUgKGlub2RlICMxNiwgbW9kIHRpbWUgU3VuIE5vdiAyNyAwNDozOTozMSAyMDExKQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArMjQwCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDQ5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3ODQsIGNvdW50ZWQ9Njg4KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMjEvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA0NDUwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2JhL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMjEvNjQgZmlsZXMgKDQuOCUgbm9uLWNvbnRpZ3VvdXMpLCAzMzYvMTAyNCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjMxODYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2JhL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2JhL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhOGI4MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9iYS9uYW1lCkBAIC0wLDAgKzEgQEAKK211bHRpcGx5IGNsYWltZWQgYmxvY2tzIHdpdGggYmlnYWxsb2MKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3Qtbm9odHJlZS4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0MTVjYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3Qtbm9odHJlZS4xCkBAIC0wLDAgKzEsMzEgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIElOREVYX0ZMIGZsYWcgc2V0IG9uIGZpbGVzeXN0ZW0gd2l0aG91dCBodHJlZSBzdXBwb3J0LgorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0R1cGxpY2F0ZSBlbnRyeSAnbWFpbGNhcC5kcGtnLW9sZCcgZm91bmQuCisJTWFya2luZyAvZXRjICgxMikgdG8gYmUgcmVidWlsdC4KKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitEdXBsaWNhdGUgZW50cnkgJ2ZzdGFiJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAnbG9jYWx0aW1lJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAnbWFpbGNhcC5kcGtnLW9sZCcgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ21vZHVsZXMuY29uZi5vbGQnIGluIC9ldGMgKDEyKSBmb3VuZC4gIENsZWFyPyB5ZXMKKworRW50cnkgJ21vZHVsZXMuY29uZi5vbGQnIGluIC9ldGMgKDEyKSBoYXMgYSBub24tdW5pcXVlIGZpbGVuYW1lLgorUmVuYW1lIHRvIG1vZHVsZXMuY29uZi5vfjA/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ3Jlc29sdi5jb25mJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0R1cGxpY2F0ZSBlbnRyeSAndXNiLnBlcm1pc3Npb25zJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzIwNDggZmlsZXMgKDUuNiUgbm9uLWNvbnRpZ3VvdXMpLCAzMjQvMzMwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvZXhwZWN0LW5vaHRyZWUuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY4MGFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC1ub2h0cmVlLjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC8yMDQ4IGZpbGVzICg1LjYlIG5vbi1jb250aWd1b3VzKSwgMzI0LzMzMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDIxNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjggQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEdXBsaWNhdGUgZW50cnkgJ21haWxjYXAuZHBrZy1vbGQnIGZvdW5kLgorCU1hcmtpbmcgL2V0YyAoMTIpIHRvIGJlIHJlYnVpbHQuCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworRHVwbGljYXRlIGVudHJ5ICdmc3RhYicgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ2xvY2FsdGltZScgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ21haWxjYXAuZHBrZy1vbGQnIGluIC9ldGMgKDEyKSBmb3VuZC4gIENsZWFyPyB5ZXMKKworRHVwbGljYXRlIGVudHJ5ICdtb2R1bGVzLmNvbmYub2xkJyBpbiAvZXRjICgxMikgZm91bmQuICBDbGVhcj8geWVzCisKK0VudHJ5ICdtb2R1bGVzLmNvbmYub2xkJyBpbiAvZXRjICgxMikgaGFzIGEgbm9uLXVuaXF1ZSBmaWxlbmFtZS4KK1JlbmFtZSB0byBtb2R1bGVzLmNvbmYub34wPyB5ZXMKKworRHVwbGljYXRlIGVudHJ5ICdyZXNvbHYuY29uZicgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitEdXBsaWNhdGUgZW50cnkgJ3VzYi5wZXJtaXNzaW9ucycgaW4gL2V0YyAoMTIpIGZvdW5kLiAgQ2xlYXI/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxOC8yMDQ4IGZpbGVzICg1LjYlIG5vbi1jb250aWd1b3VzKSwgMzI0LzMzMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY4MGFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTgvMjA0OCBmaWxlcyAoNS42JSBub24tY29udGlndW91cyksIDMyNC8zMzAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJkYjEyZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTA3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvbmFtZQpAQCAtMCwwICsxIEBACitkdXBsaWNhdGUgZGlyZWN0b3J5IGVudHJpZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUvc2NyaXB0CkBAIC0wLDAgKzEsMTYgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK2lmIHRlc3QgIiRIVFJFRSJ4ID0geCA7IHRoZW4KKwlndW56aXAgPCAkdGVzdF9kaXIvaW1hZ2UuZ3ogPiAkVE1QRklMRQorCSRERUJVR0ZTIC13IC1SICJmZWF0dXJlIF5kaXJfaW5kZXgiICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorCWd6aXAgJFRNUEZJTEUKKwlJTUFHRT0iJFRNUEZJTEUiLmd6CisJRVhQMT0kdGVzdF9kaXIvZXhwZWN0LW5vaHRyZWUuMQorCUVYUDI9JHRlc3RfZGlyL2V4cGVjdC1ub2h0cmVlLjIKK2ZpCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKK3JtIC1mICIkVE1QRklMRSIuZ3oKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlMi9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZTIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkM2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZTIvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0R1cGxpY2F0ZSBlbnRyeSAndGVzdC0wMDgnIGZvdW5kLgorCU1hcmtpbmcgLyAoMikgdG8gYmUgcmVidWlsdC4KKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitFbnRyeSAndGVzdC0wMDgnIGluIC8gKDIpIGhhcyBhIG5vbi11bmlxdWUgZmlsZW5hbWUuCitSZW5hbWUgdG8gdGVzdC0wfjA/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAyMS8yNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDg3LzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlMi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzgxMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlMi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDIxLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwODcvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZTIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTRkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfZGUyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZTIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9kZTIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM3ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX2RlMi9uYW1lCkBAIC0wLDAgKzEgQEAKK2R1cGxpY2F0ZSBkaXJlY3RvcnkgZW50cmllcyBmb3Igbm9uLWluZGV4ZWQgZGlycwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ZmUwNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjEKQEAgLTAsMCArMSwzNCBAQAorUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIFJlY3JlYXRlPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisKK1J1bm5pbmcgYWRkaXRpb25hbCBwYXNzZXMgdG8gcmVzb2x2ZSBibG9ja3MgY2xhaW1lZCBieSBtb3JlIHRoYW4gb25lIGlub2RlLi4uCitQYXNzIDFCOiBSZXNjYW5uaW5nIGZvciBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSA3OiA0IDUgNiA3CitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDEyOiA0IDUgNiA3CitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDEgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC9kZWJ1Z2ZzIChpbm9kZSAjMTIsIG1vZCB0aW1lIE1vbiBBcHIgMTEgMDA6MDA6MDAgMjAwNSkgCisgIGhhcyA0IG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwk8VGhlIGdyb3VwIGRlc2NyaXB0b3IgaW5vZGU+IChpbm9kZSAjNywgbW9kIHRpbWUgTW9uIEFwciAxMSAwNjoxMzoyMCAyMDA1KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogICsoODE5NS0tODE5OCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzkxMCwgY291bnRlZD03OTExKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NzU0LCBjb3VudGVkPTk3NTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8yNTYwIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNDg1LzEwMjQwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4YWNiOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cF9yZXNpemUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8yNTYwIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNDg1LzEwMjQwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWJlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfcmVzaXplL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGNsYWltZWQgYnkgdGhlIHJlc2l6ZSBpbm9kZSBhbmQgYW5vdGhlciBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBfcmVzaXplL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVjNGFlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwX3Jlc2l6ZS9zY3JpcHQKQEAgLTAsMCArMSwzMCBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworU0tJUF9HVU5aSVA9InRydWUiCitURVNUX0RBVEE9IiR0ZXN0X25hbWUudG1wIgorCitkZCBpZj0kVEVTVF9CSVRTIG9mPSRURVNUX0RBVEEgYnM9NjNrIGNvdW50PTEgY29udj1zeW5jID4gL2Rldi9udWxsIDI+JjEKKwordG91Y2ggJFRNUEZJTEUKKyRNS0UyRlMgLUYgLU8gcmVzaXplX2lub2RlICRUTVBGSUxFIDEwMjQwID4gL2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiA+IC9kZXYvbnVsbCAyPiYxCitmcmVlYiA0IDQKK2ZyZWViIDgxOTUgNAord3JpdGUgJFRFU1RfREFUQSBkZWJ1Z2ZzCitzZXRfY3VycmVudF90aW1lIDIwMDUwNDExMDAwMAorc2V0X2lub2RlX2ZpZWxkIGRlYnVnZnMgbXRpbWUgMjAwNTA0MTEwMDAwCitxCitFT0YKKworRTJGU0NLX1RJTUU9MTExMzIwMDAwMAorZXhwb3J0IEUyRlNDS19USU1FCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworCitybSAtZiAkVEVTVF9EQVRBCisKK3Vuc2V0IEUyRlNDS19USU1FIFRFU1RfREFUQQorCitlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjZThkNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGRvdC9leHBlY3QuMQpAQCAtMCwwICsxLDIyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJy4nIGluIDwxND4vPDEyPiAoMTIpIGlzIGR1cGxpY2F0ZSAnLicgZW50cnkuCitGaXg/IHllcworCitFbnRyeSAnLi4nIGluIDwxND4vPDEyPiAoMTIpIGlzIGR1cGxpY2F0ZSAnLi4nIGVudHJ5LgorRml4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgaW5vZGUgMTMKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitVbmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlIDE0LiAgQ2xlYXI/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0N2JlMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGRvdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZG90L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZG90L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjIwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZG90L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBkb3QvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2EwYWZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZG90L25hbWUKQEAgLTAsMCArMSBAQAorZHVwbGljYXRlICcuJyBhbmQgJy4uJyBlbnRyaWVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3MDEwOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGZzYmxrcy9leHBlY3QuMQpAQCAtMCwwICsxLDY1IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyLCBpX3NpemUgaXMgNDA5Niwgc2hvdWxkIGJlIDUxMjAuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9zaXplIGlzIDAsIHNob3VsZCBiZSAyMDQ4LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDMgNCA2IDEKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTM6IDIgMworTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNDogMgorUGFzcyAxQzogU2Nhbm5pbmcgZGlyZWN0b3JpZXMgZm9yIGlub2RlcyB3aXRoIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCitQYXNzIDFEOiBSZWNvbmNpbGluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworKFRoZXJlIGFyZSAzIGlub2RlcyBjb250YWluaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzLikKKworRmlsZSAvZm9vIChpbm9kZSAjMTIsIG1vZCB0aW1lIFRodSBBcHIgMjggMTc6NTc6NTMgMTk5NCkgCisgIGhhcyA0IG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDIgZmlsZShzKToKKwk8ZmlsZXN5c3RlbSBtZXRhZGF0YT4KKwkvYmFyIChpbm9kZSAjMTMsIG1vZCB0aW1lIFRodSBBdWcgIDUgMDc6MTc6MTcgMTk5OSkKK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworRmlsZSAvYmFyIChpbm9kZSAjMTMsIG1vZCB0aW1lIFRodSBBdWcgIDUgMDc6MTc6MTcgMTk5OSkgCisgIGhhcyAyIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDMgZmlsZShzKToKKwk8ZmlsZXN5c3RlbSBtZXRhZGF0YT4KKwkvZm9vIChpbm9kZSAjMTIsIG1vZCB0aW1lIFRodSBBcHIgMjggMTc6NTc6NTMgMTk5NCkKKwkvcXV1eCAoaW5vZGUgIzE0LCBtb2QgdGltZSBUaHUgQXVnICA1IDA3OjE4OjA5IDE5OTkpCitDbG9uZSBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcz8geWVzCisKK0ZpbGUgL3F1dXggKGlub2RlICMxNCwgbW9kIHRpbWUgVGh1IEF1ZyAgNSAwNzoxODowOSAxOTk5KSAKKyAgaGFzIDEgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMiBmaWxlKHMpOgorCTxmaWxlc3lzdGVtIG1ldGFkYXRhPgorCS9iYXIgKGlub2RlICMxMywgbW9kIHRpbWUgVGh1IEF1ZyAgNSAwNzoxNzoxNyAxOTk5KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0RpcmVjdG9yeSBpbm9kZSAxMiwgYmxvY2sgIzEsIG9mZnNldCAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCitTYWx2YWdlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDEyLCBibG9jayAjMiwgb2Zmc2V0IDA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMzLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK0VudHJ5ICcnIGluID8/PyAoMTIpIGhhcyBhIHplcm8tbGVuZ3RoIG5hbWUuCitDbGVhcj8geWVzCisKK0RpcmVjdG9yeSBpbm9kZSAxMiwgYmxvY2sgIzQsIG9mZnNldCAxMDA6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTcwKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD03MCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzMyIGZpbGVzICg3LjElIG5vbi1jb250aWd1b3VzKSwgMzAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZnNibGtzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZnNibGtzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNzI2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBmc2Jsa3MvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNC8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDMwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGZzYmxrcy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGZzYmxrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDlkYWQwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZnNibGtzL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGZzYmxrcy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwZnNibGtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxMjRjOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cGZzYmxrcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2Jsb2NrcyBjbGFpbWVkIGJ5IGEgZmlsZSBhbmQgYml0bWFwcyBvciBpbm9kZSB0YWJsZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2R1cHN1cGVyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwc3VwZXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMzcwYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cHN1cGVyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjcgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTI6IDIgMyAxCitQYXNzIDFDOiBTY2FubmluZyBkaXJlY3RvcmllcyBmb3IgaW5vZGVzIHdpdGggbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK1Bhc3MgMUQ6IFJlY29uY2lsaW5nIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzCisoVGhlcmUgYXJlIDEgaW5vZGVzIGNvbnRhaW5pbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MuKQorCitGaWxlIC90ZXJtY2FwIChpbm9kZSAjMTIsIG1vZCB0aW1lIFN1biBKYW4gIDIgMDg6Mjk6MTMgMTk5NCkgCisgIGhhcyAzIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwk8ZmlsZXN5c3RlbSBtZXRhZGF0YT4KK0Nsb25lIG11bHRpcGx5LWNsYWltZWQgYmxvY2tzPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDI5LS0zMSkKK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDguMyUgbm9uLWNvbnRpZ3VvdXMpLCAzOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBzdXBlci9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cHN1cGVyL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzVjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBzdXBlci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgMzkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwc3VwZXIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9kdXBzdXBlci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTE5ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwc3VwZXIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZHVwc3VwZXIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cHN1cGVyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwYTcwNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2R1cHN1cGVyL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGNsYWltZWQgYnkgYSBmaWxlIGFuZCBzdXBlcmJsb2NrIG9yIGdyb3VwIGRlc2NyaXB0b3JzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyMTVhMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2VhX2NoZWNrcy9leHBlY3QuMQpAQCAtMCwwICsxLDU3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEzIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgMjYuICBDbGVhcj8geWVzCisKK0lub2RlIDEzLCBpX2Jsb2NrcyBpcyA0LCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK0V4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSAxNCBoYXMgYSBoYXNoICgxNjQ5MzQwMTg5KSB3aGljaCBpcyBpbnZhbGlkCitDbGVhcj8geWVzCisKK0lub2RlIDE0LCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDE3IGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgMjguICBDbGVhcj8geWVzCisKK0lub2RlIDE3LCBpX2Jsb2NrcyBpcyA0LCBzaG91bGQgYmUgMi4gIEZpeD8geWVzCisKK0lub2RlIDE2IGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgMjkuICBDbGVhcj8geWVzCisKK0lub2RlIDE2LCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDE5IGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgMzMuICBDbGVhcj8geWVzCisKK0lub2RlIDE5LCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDEyIGhhcyBhIGJhZCBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2sgNTUuICBDbGVhcj8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX2Jsb2NrcyBpcyAyLCBzaG91bGQgYmUgMC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGZvciBpbm9kZSAxNSAoL2ZhcikgaXMgaW52YWxpZCAoOTk5KS4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgyNi0tMjkpIC0zMyAtNTUKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDgxLCBjb3VudGVkPTQ4NCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNDgxLCBjb3VudGVkPTQ4NCkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMTgKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDcsIGNvdW50ZWQ9NDYpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDQ3LCBjb3VudGVkPTQ2KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTgvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOC81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMWNkMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2VhX2NoZWNrcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE4LzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjgvNTEyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZWFfY2hlY2tzL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZWFfY2hlY2tzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1M2RhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZWFfY2hlY2tzL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lYV9jaGVja3MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBmZGVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZWFfY2hlY2tzL25hbWUKQEAgLTAsMCArMSBAQAorZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIGNoZWNrcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2VuZC1iaXRtYXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlMmZkNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2VuZC1iaXRtYXAvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNDQsIGNvdW50ZWQ9NjMpLgorRml4PyB5ZXMKKworUGFkZGluZyBhdCBlbmQgb2YgYmxvY2sgYml0bWFwIGlzIG5vdCBzZXQuIEZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9lbmQtYml0bWFwL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTA5Zjk5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2VuZC1iaXRtYXAvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyMGQwYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2VuZC1iaXRtYXAvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW5kLWJpdG1hcC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2I2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lbmQtYml0bWFwL25hbWUKQEAgLTAsMCArMSBAQAorY29ycnVwdGlvbiBhdCBlbmQgb2YgYmxvY2sgYml0bWFwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9lb2ZibG9ja3MvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lb2ZibG9ja3MvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MTMzZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2VvZmJsb2Nrcy9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDMwLCBpX3NpemUgaXMgMjA0OCwgc2hvdWxkIGJlIDQwOTYuICBGaXg/IHllcworCitJbm9kZSAzMSwgaV9zaXplIGlzIDIwNDgsIHNob3VsZCBiZSA0MDk2LiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDMxLzU2IGZpbGVzICgyOS4wJSBub24tY29udGlndW91cyksIDgzLzQwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2VvZmJsb2Nrcy9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2VvZmJsb2Nrcy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTJiY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW9mYmxvY2tzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMzEvNTYgZmlsZXMgKDI5LjAlIG5vbi1jb250aWd1b3VzKSwgODMvNDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZW9mYmxvY2tzL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW9mYmxvY2tzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lb2ZibG9ja3MvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZW9mYmxvY2tzL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9lb2ZibG9ja3MvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNhZGMxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZW9mYmxvY2tzL25hbWUKQEAgLTAsMCArMSBAQAorYmxvY2tzIGFmdGVyIGlfc2l6ZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2V4cGVjdC4xLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2V4cGVjdC4xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMTVlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjEuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzAwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHBhbmQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA1MTA5LzU1MDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA4MDMvOTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YzE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHBhbmQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHBhbmQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWViZTBmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXhwYW5kL25hbWUKQEAgLTAsMCArMSBAQAorZXhwYW5kaW5nIGxvc3QrZm91bmQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjODIwMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsOCBAQAordGVzdF9maWxlc3lzOiByZWNvdmVyaW5nIGpvdXJuYWwKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDg5LzI1NjAgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNzAvMjU2MCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMGRjNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogODkvMjU2MCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE3MC8yNTYwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfam91cm5hbC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM4MzcxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvam91cm5hbC5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2pvdXJuYWwuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyYzcyYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL2pvdXJuYWwuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlOTUwYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF9qb3VybmFsL25hbWUKQEAgLTAsMCArMSBAQAordGVzdCBleHRlcm5hbCBqb3VybmFsIGRldmljZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X2pvdXJuYWwvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkODFlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfam91cm5hbC9zY3JpcHQKQEAgLTAsMCArMSw4IEBACitGU0NLX09QVD0iLWZ5IC1qIGpvdXJuYWwuaW1nIgorU0VDT05EX0ZTQ0tfT1BUPSItZnkgLWogam91cm5hbC5pbWciCisKK2d1bnppcCA8ICR0ZXN0X2Rpci9qb3VybmFsLmd6ID4gam91cm5hbC5pbWcKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCisKK3JtIC1mIGpvdXJuYWwuaW1nCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxMDliMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMQpAQCAtMCwwICsxLDEzIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGhhcyB6ZXJvIGxlbmd0aCBleHRlbnQKKwkoaW52YWxpZCBsb2dpY2FsIGJsb2NrIDAsIHBoeXNpY2FsIGJsb2NrIDM3KQorQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlNWQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dF96ZXJvX2xlbi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwM2U1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRfemVyb19sZW4vbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGE0YTcyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0X3plcm9fbGVuL25hbWUKQEAgLTAsMCArMSBAQAorZXh0ZW50IHdpdGggemVybyBsZW5ndGgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzBiYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjMgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIGFuIGludmFsaWQgZXh0ZW50IG5vZGUgKGJsayAyMiwgbGJsayAwKQorQ2xlYXI/IHllcworCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgMTYsIHNob3VsZCBiZSA4LiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDIxLS0yMykgLTI1CitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDcxLCBjb3VudGVkPTc1KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3MSwgY291bnRlZD03NSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGM3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfYmFkX25vZGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ5YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2JhZF9ub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ZDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9iYWRfbm9kZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2JhZCBpbnRlcmlvciBub2RlIGluIGV4dGVudCB0cmVlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjdkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0ludGVyaW9yIGV4dGVudCBub2RlIGxldmVsIDAgb2YgaW5vZGUgMTI6CitMb2dpY2FsIHN0YXJ0IDAgZG9lcyBub3QgbWF0Y2ggbG9naWNhbCBzdGFydCAyIGF0IG5leHQgbGV2ZWwuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzYwODIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjkvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2ludGVyaW9yX3N0YXJ0X2xibGsvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfaW50ZXJpb3Jfc3RhcnRfbGJsay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ3MTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2ludGVyaW9yX3N0YXJ0X2xibGsvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X2ludGVyaW9yX3N0YXJ0X2xibGsvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkNWY1OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9pbnRlcmlvcl9zdGFydF9sYmxrL25hbWUKQEAgLTAsMCArMSBAQAoraW5jb3JyZWN0IHN0YXJ0aW5nIGxibGsgaW4gYW4gaW50ZXJpb3Igbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjRlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjEKQEAgLTAsMCArMSwyNCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgZW5kIG9mIGV4dGVudCBleGNlZWRzIGFsbG93ZWQgdmFsdWUKKwkobG9naWNhbCBibG9jayAxNSwgcGh5c2ljYWwgYmxvY2sgMjAwLCBsZW4gMzApCitDbGVhcj8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAxNTQsIHNob3VsZCBiZSA5NC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgyMDAtLTIyOSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTU2LCBjb3VudGVkPTE4NikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTU2LCBjb3VudGVkPTE4NikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICg4LjMlIG5vbi1jb250aWd1b3VzKSwgNzAvMjU2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50X29vYm91bmRzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYzRmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8zMiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDcwLzI1NiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudF9vb2JvdW5kcy9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMGIwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRfb29ib3VuZHMvc2NyaXB0CkBAIC0wLDAgKzEsNDIgQEAKK2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK1NLSVBfR1VOWklQPSJ0cnVlIgorVEVTVF9EQVRBPSIkdGVzdF9uYW1lLnRtcCIKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTI1NiA+IC9kZXYvbnVsbCAyPiYxCiskTUtFMkZTIC1GdCBleHQ0ICRUTVBGSUxFID4gL2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC13ICRUTVBGSUxFIDw8IEVPRiAgPiAvZGV2L251bGwgMj4mMQord3JpdGUgL2Rldi9udWxsIHRlc3RmaWxlCitleHRlbnRfb3BlbiB0ZXN0ZmlsZQorICBpbnNlcnRfbm9kZSAwIDE1IDEwMAorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDE1IDE1IDExNQorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDMwIDE1IDEzMAorICBpbnNlcnRfbm9kZSAtLWFmdGVyIDQ1IDE1IDE0NQorICBzcGxpdAorICBkb3duCisgIHNwbGl0CisgIHJvb3QKKyAgZG93bgorICBuZXh0CisgIHJlcGxhY2Vfbm9kZSAxNSAzMCAyMDAKKyAgZXh0ZW50X2Nsb3NlCitzZXRfaW5vZGVfZmllbGQgdGVzdGZpbGUgaV9zaXplIDYxNDAwCitzZXRfaW5vZGVfZmllbGQgdGVzdGZpbGUgaV9ibG9ja3MgMTU0CitzZXRiIDEwMCAxNQorc2V0YiAxMzAgMzAKK3NldGIgMjAwIDMwCitzZXRfYmcgMCBmcmVlX2Jsb2Nrc19jb3VudCAxNTYKK3NldF9iZyAwIGJnX2NoZWNrc3VtIGNhbGMKK3NldF9zdXBlcl92YWx1ZSBmcmVlX2Jsb2Nrc19jb3VudCAxNTYKK3EKK0VPRgorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworcm0gLWYgJFRFU1RfREFUQQorCit1bnNldCBFMkZTQ0tfVElNRSBURVNUX0RBVEEKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50cy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJlMzJlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50cy9leHBlY3QuMQpAQCAtMCwwICsxLDUyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGlzIGluIGV4dGVudCBmb3JtYXQsIGJ1dCBzdXBlcmJsb2NrIGlzIG1pc3NpbmcgRVhURU5UUyBmZWF0dXJlCitGaXg/IHllcworCitJbm9kZSAxMiBoYXMgYW4gaW52YWxpZCBleHRlbnQKKwkobG9naWNhbCBibG9jayAwLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrIDIxOTk0NTI3NTI3OTQ5LCBsZW4gMTcpCitDbGVhcj8geWVzCisKK0lub2RlIDEyLCBpX2Jsb2NrcyBpcyAzNCwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitJbm9kZSAxMyBtaXNzaW5nIEVYVEVOVF9GTCwgYnV0IGlzIGluIGV4dGVudHMgZm9ybWF0CitGaXg/IHllcworCitJbm9kZSAxNyBoYXMgYW4gaW52YWxpZCBleHRlbnQKKwkobG9naWNhbCBibG9jayAwLCBpbnZhbGlkIHBoeXNpY2FsIGJsb2NrIDIyMDExNzA3Mzk3MTM1LCBsZW4gMTUpCitDbGVhcj8geWVzCisKK0lub2RlIDE3LCBpX2Jsb2NrcyBpcyAzMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitFcnJvciB3aGlsZSByZWFkaW5nIG92ZXIgZXh0ZW50IHRyZWUgaW4gaW5vZGUgMTg6IENvcnJ1cHQgZXh0ZW50IGhlYWRlcgorQ2xlYXIgaW5vZGU/IHllcworCitJbm9kZSAxOCwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdmYmFkLWZsYWcnIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxOC4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTEwODEgKzQ2MTEgLSg1MTIxLS01MTQyKQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MDgxLCBjb3VudGVkPTcwOTgpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDcwODEsIGNvdW50ZWQ9NzA5OCkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtMTgKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjM3LCBjb3VudGVkPTIzOCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjM3LCBjb3VudGVkPTIzOCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE4LzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwOTQvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjJjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTgvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA5NC84MTkyIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50cy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmYzJmYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50cy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50cy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWRlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzL25hbWUKQEAgLTAsMCArMSBAQAorYmFzaWMgZXh0ZW50cyBzdXBwb3J0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2Y2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMQpAQCAtMCwwICsxLDcwIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGhhcyBvdXQgb2Ygb3JkZXIgZXh0ZW50cworCShpbnZhbGlkIGxvZ2ljYWwgYmxvY2sgMCwgcGh5c2ljYWwgYmxvY2sgMjMsIGxlbiAxMikKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTIsIGlfYmxvY2tzIGlzIDg2LCBzaG91bGQgYmUgNjIuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9zaXplIGlzIDEzMjk1LCBzaG91bGQgYmUgMTQzMzYuICBGaXg/IHllcworCitJbm9kZSAxMywgaV9ibG9ja3MgaXMgMjYsIHNob3VsZCBiZSAyOC4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX3NpemUgaXMgNDIxOTcsIHNob3VsZCBiZSA0NDAzMi4gIEZpeD8geWVzCisKK0lub2RlIDE1LCBpX2Jsb2NrcyBpcyA4NCwgc2hvdWxkIGJlIDg2LiAgRml4PyB5ZXMKKworSW5vZGUgMTYgaGFzIGFuIGludmFsaWQgZXh0ZW50CisJKGxvZ2ljYWwgYmxvY2sgMCwgaW52YWxpZCBwaHlzaWNhbCBibG9jayA1MDAsIGxlbiAxMCkKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTcgaGFzIGFuIGludmFsaWQgZXh0ZW50CisJKGxvZ2ljYWwgYmxvY2sgMCwgcGh5c2ljYWwgYmxvY2sgMTIwLCBpbnZhbGlkIGxlbiA2MDAwKQorQ2xlYXI/IHllcworCitJbm9kZSAxOCBoYXMgb3V0IG9mIG9yZGVyIGV4dGVudHMKKwkoaW52YWxpZCBsb2dpY2FsIGJsb2NrIDEwLCBwaHlzaWNhbCBibG9jayAxNTUsIGxlbiA0NSkKK0NsZWFyPyB5ZXMKKworSW5vZGUgMTgsIGlfYmxvY2tzIGlzIDExNiwgc2hvdWxkIGJlIDI0LiAgRml4PyB5ZXMKKworCitSdW5uaW5nIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHJlc29sdmUgYmxvY2tzIGNsYWltZWQgYnkgbW9yZSB0aGFuIG9uZSBpbm9kZS4uLgorUGFzcyAxQjogUmVzY2FubmluZyBmb3IgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKK011bHRpcGx5LWNsYWltZWQgYmxvY2socykgaW4gaW5vZGUgMTM6IDgwIDgwCitNdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpIGluIGlub2RlIDE0OiA4NQorTXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSBpbiBpbm9kZSAxNTogODUKK1Bhc3MgMUM6IFNjYW5uaW5nIGRpcmVjdG9yaWVzIGZvciBpbm9kZXMgd2l0aCBtdWx0aXBseS1jbGFpbWVkIGJsb2NrcworUGFzcyAxRDogUmVjb25jaWxpbmcgbXVsdGlwbHktY2xhaW1lZCBibG9ja3MKKyhUaGVyZSBhcmUgMyBpbm9kZXMgY29udGFpbmluZyBtdWx0aXBseS1jbGFpbWVkIGJsb2Nrcy4pCisKK0ZpbGUgL2Jsb2NrLmMgKGlub2RlICMxMywgbW9kIHRpbWUgTW9uIEp1biAgMiAwNToyMDoyMiAyMDA4KSAKKyAgaGFzIDIgbXVsdGlwbHktY2xhaW1lZCBibG9jayhzKSwgc2hhcmVkIHdpdGggMCBmaWxlKHMpOgorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9pbm9kZS5jIChpbm9kZSAjMTQsIG1vZCB0aW1lIE1vbiBKdW4gIDIgMDU6Mjg6MTYgMjAwOCkgCisgIGhhcyAxIG11bHRpcGx5LWNsYWltZWQgYmxvY2socyksIHNoYXJlZCB3aXRoIDEgZmlsZShzKToKKwkvZXh0MmZzLmggKGlub2RlICMxNSwgbW9kIHRpbWUgTW9uIEp1biAgMiAwNzoyMjo1NyAyMDA4KQorQ2xvbmUgbXVsdGlwbHktY2xhaW1lZCBibG9ja3M/IHllcworCitGaWxlIC9leHQyZnMuaCAoaW5vZGUgIzE1LCBtb2QgdGltZSBNb24gSnVuICAyIDA3OjIyOjU3IDIwMDgpIAorICBoYXMgMSBtdWx0aXBseS1jbGFpbWVkIGJsb2NrKHMpLCBzaGFyZWQgd2l0aCAxIGZpbGUocyk6CisJL2lub2RlLmMgKGlub2RlICMxNCwgbW9kIHRpbWUgTW9uIEp1biAgMiAwNToyODoxNiAyMDA4KQorTXVsdGlwbHktY2xhaW1lZCBibG9ja3MgYWxyZWFkeSByZWFzc2lnbmVkIG9yIGNsb25lZC4KKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDI2LS0zNCkgLSgxNTQtLTE5OSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNjU1MzUsIGNvdW50ZWQ9NTUpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDQyOTQ5NjcyOTUsIGNvdW50ZWQ9NTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxOC8zMiBmaWxlcyAoMjIuMiUgbm9uLWNvbnRpZ3VvdXMpLCAxNDUvMjAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50czIvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzMi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDgyYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50czIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOC8zMiBmaWxlcyAoMjIuMiUgbm9uLWNvbnRpZ3VvdXMpLCAxNDUvMjAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50czIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRlbnRzMi9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRmMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50czIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0ZW50czIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3ZTRlYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dGVudHMyL25hbWUKQEAgLTAsMCArMSBAQAorbXVsdGlwbHkgY2xhaW1lZCBibG9ja3MgaW4gZXh0ZW50cyBhbmQgb3RoZXIgaWxsZWdhbCBleHRlbnRzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRyYV9qb3VybmFsL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTc0YWRiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMQpAQCAtMCwwICsxLDIzIEBACitTdXBlcmJsb2NrIGhhc19qb3VybmFsIGZsYWcgaXMgY2xlYXIsIGJ1dCBhIGpvdXJuYWwgaW5vZGUgaXMgcHJlc2VudC4KK0NsZWFyPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitKb3VybmFsIGlub2RlIGlzIG5vdCBpbiB1c2UsIGJ1dCBjb250YWlucyBkYXRhLiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNTAtLTEwNzkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDk2OCwgY291bnRlZD0xOTk4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NjgsIGNvdW50ZWQ9MTk5OCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDUwLzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRyYV9qb3VybmFsL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRhMTIwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDUwLzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRyYV9qb3VybmFsL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTM5NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZXh0cmFfam91cm5hbC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9leHRyYV9qb3VybmFsL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9leHRyYV9qb3VybmFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NDBlMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2V4dHJhX2pvdXJuYWwvbmFtZQpAQCAtMCwwICsxIEBACitWYWxpZCBqb3VybmFsIGlub2RlLCBidXQgaGFzX2pvdXJuYWwgZmVhdHVyZSBub3QgcHJlc2VudApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzE2Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitGYXN0IHN5bWxpbmsgMTMgaGFzIEVYVEVOVF9GTCBzZXQuICBDbGVhcj8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2ZjQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2Zhc3Rfc3ltbGlua19leHRlbnRzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWIwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9mYXN0X3N5bWxpbmtfZXh0ZW50cy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzNjYjUyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmFzdF9zeW1saW5rX2V4dGVudHMvbmFtZQpAQCAtMCwwICsxIEBACitmYXN0IHN5bWxpbmsgd2l0aCBleHRlbnRzIGZsYWcgc2V0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ2ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQoraV9maWxlX2FjbF9oaSBmb3IgaW5vZGUgMTIgKC9tb3RkKSBpcyAyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTQ3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQyZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZV9hY2xfaGlnaC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9maWxlX2FjbF9oaWdoL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1NGIwNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGVfYWNsX2hpZ2gvbmFtZQpAQCAtMCwwICsxIEBACitpX2ZpbGVfYWNsX2hpZ2ggc2hvdWxkIGJlIHplcm8KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZXR5cGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyNGJmYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDkgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE0KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE1KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE2KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworU3BlY2lhbCAoZGV2aWNlL3NvY2tldC9maWZvL3N5bWxpbmspIGZpbGUgKGlub2RlIDE3KSBoYXMgaW1tdXRhYmxlCitvciBhcHBlbmQtb25seSBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnLicgaW4gLyAoMikgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuLicgaW4gLyAoMikgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICdsb3N0K2ZvdW5kJyBpbiAvICgyKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJ2ZpbGUnIGluIC8gKDIpIHRvIDEuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnZGlyJyBpbiAvICgyKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJ2ZpZm8nIGluIC8gKDIpIHRvIDUuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnYmxvY2snIGluIC8gKDIpIHRvIDQuCitTZXR0aW5nIGZpbGV0eXBlIGZvciBlbnRyeSAnY2hhcicgaW4gLyAoMikgdG8gMy4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICdzeW1saW5rJyBpbiAvICgyKSB0byA3LgorSW5vZGUgMTggKC9iYWRjaGFyKSBpcyBhbiBpbGxlZ2FsIGNoYXJhY3RlciBkZXZpY2UuCitDbGVhcj8geWVzCisKK0lub2RlIDE5ICgvYmFkYmxvY2spIGlzIGFuIGlsbGVnYWwgYmxvY2sgZGV2aWNlLgorQ2xlYXI/IHllcworCitJbm9kZSAyMCAoL2JhZGZpZm8pIGlzIGFuIGlsbGVnYWwgRklGTy4KK0NsZWFyPyB5ZXMKKworU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4nIGluIC9sb3N0K2ZvdW5kICgxMSkgdG8gMi4KK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICcuLicgaW4gL2xvc3QrZm91bmQgKDExKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4nIGluIC9kaXIgKDEzKSB0byAyLgorU2V0dGluZyBmaWxldHlwZSBmb3IgZW50cnkgJy4uJyBpbiAvZGlyICgxMykgdG8gMi4KK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNTAsIGNvdW50ZWQ9NDcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDUwLCBjb3VudGVkPTQ3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTcvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9maWxldHlwZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGV0eXBlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjgxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9maWxldHlwZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE3LzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZXR5cGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9maWxldHlwZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDBiMmVjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZXR5cGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZmlsZXR5cGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGV0eXBlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMwMjFmNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ZpbGV0eXBlL25hbWUKQEAgLTAsMCArMSBAQAorc2V0IGZpbGV0eXBlIGluZm9ybWF0aW9uIGFuZCBpbGxlZ2FsIHNwZWNpYWwgZmlsZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2Z1bGxfYmcvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9mdWxsX2JnL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTQ1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9mdWxsX2JnL2V4cGVjdC4xCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzc0NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDY4NS83NjkgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9mdWxsX2JnL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZnVsbF9iZy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDU0NTNmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZnVsbF9iZy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzM3NDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA2ODUvNzY5IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZnVsbF9iZy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2Z1bGxfYmcvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNDE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2Z1bGxfYmcvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfZnVsbF9iZy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfZnVsbF9iZy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjE0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9mdWxsX2JnL25hbWUKQEAgLTAsMCArMSBAQAoraW5vZGUgdGFibGUgaW4gbGFzdCBibG9jayBvZiBmaXJzdCBiZwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmFkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZG5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSwxOCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDEyOTI5OiBibG9jayAjNTMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDEyOTI5OiBibG9jayAjOTkzIHJlZmVyZW5jZWQgdHdpY2UKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDEyOTI5OiBibG9jayAjMTA2MSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOTogYmxvY2sgIzEwNjIgaGFzIGludmFsaWQgZGVwdGggKDIpCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOTogYmxvY2sgIzEwNjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTI5Mjk6IGJsb2NrICMxMDYyIG5vdCByZWZlcmVuY2VkCitJbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMjkyOSAoL3Rlc3QyKS4gIENsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiA0NzczMC8xMDAxOTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzU1MS8zMTc0NSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRhZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNDc3MzAvMTAwMTkyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTM1NTEvMzE3NDUgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZG5vZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZG5vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNDFkYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZG5vZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDc3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZG5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitoYXNoIGRpcmVjdG9yeSB3aXRoIGJhZCBIVFJFRSBub2RlcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRub2RlL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYzZiMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkbm9kZS9zY3JpcHQKQEAgLTAsMCArMSw1IEBACitpZiB0ZXN0ICIkSFRSRUUieCA9IHl4IDsgdGhlbgorLiAkY21kX2Rpci9ydW5fZTJmc2NrCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWJhNTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3QvZXhwZWN0LjEKQEAgLTAsMCArMSw0MCBAQAorQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0hUUkVFIGRpcmVjdG9yeSBpbm9kZSAxMzM0NSBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK0hUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNjY4OSBoYXMgYW4gdW5zdXBwb3J0ZWQgaGFzaCB2ZXJzaW9uICgyNDApCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK0hUUkVFIGRpcmVjdG9yeSBpbm9kZSA0MDAzMyBoYXMgYW4gaW52YWxpZCByb290IG5vZGUuCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK0hUUkVFIGRpcmVjdG9yeSBpbm9kZSA1MzM3NyBoYXMgYSB0cmVlIGRlcHRoICg4KSB3aGljaCBpcyB0b28gYmlnCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK0hUUkVFIGRpcmVjdG9yeSBpbm9kZSA2NjcyMSB1c2VzIGFuIGluY29tcGF0aWJsZSBodHJlZSByb290IG5vZGUgZmxhZy4KK0NsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSA4MDA2NTogYmxvY2sgIzAgaGFzIGFuIHVub3JkZXJlZCBoYXNoIHRhYmxlCitDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDg2NzM3OiBibG9jayAjMCBoYXMgaW52YWxpZCBsaW1pdCAoNTExKQorQ2xlYXIgSFRyZWUgaW5kZXg/IHllcworCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSA5MzQwOTogYmxvY2sgIzAgaGFzIGludmFsaWQgY291bnQgKDIzNCkKK0NsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgNzMzOTM6IGJsb2NrICMxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDczMzkzOiBibG9jayAjMiBoYXMgYmFkIG1heCBoYXNoCitJbnZhbGlkIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSA3MzM5MyAoL3Rlc3Q2KS4gIENsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxOTIxLzEwMDA4MCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzNjQ2LzE1MzYxIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzcyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3QvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOTIxLzEwMDA4MCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzNjQ2LzE1MzYxIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjBjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3QvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3QvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFjN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9iYWRyb290L25hbWUKQEAgLTAsMCArMSBAQAorYmFkIGh0cmVlIHJvb3Qgbm9kZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hfYmFkcm9vdC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3Qvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX2JhZHJvb3Qvc2NyaXB0CkBAIC0wLDAgKzEsNSBAQAoraWYgdGVzdCAiJEhUUkVFInggPSB5eCA7IHRoZW4KKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hfbm9ybWFsL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfbm9ybWFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNDc3MzAvMTAwMTkyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMzNzgvMzE3NDUgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX25vcm1hbC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfbm9ybWFsL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzU3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX25vcm1hbC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDQ3NzMwLzEwMDE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzMzc4LzMxNzQ1IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX25vcm1hbC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjRkYWVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfbm9ybWFsL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5MGYzNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfbm9ybWFsL25hbWUKQEAgLTAsMCArMSBAQAorTm9ybWFsIChzaWduZWQpIEhUUkVFIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9ub3JtYWwvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX25vcm1hbC9zY3JpcHQKQEAgLTAsMCArMSw1IEBACitpZiB0ZXN0ICIkSFRSRUUieCA9IHl4IDsgdGhlbgorLiAkY21kX2Rpci9ydW5fZTJmc2NrCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ODcyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjEKQEAgLTAsMCArMSw5NTggQEAKK0JhY2tpbmcgdXAgam91cm5hbCBpbm9kZSBibG9jayBpbmZvcm1hdGlvbi4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjMSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICMyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjMyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDE6IGJsb2NrICM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDE2MDAxOiBibG9jayAjNyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAxNjAwMTogYmxvY2sgIzggaGFzIGJhZCBtaW4gaGFzaAorSW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMTYwMDEgKC90ZXN0KS4gIENsZWFyIEhUcmVlIGluZGV4PyB5ZXMKKworUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzEwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzEyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzEzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzE5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzIyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzI4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzMzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzM5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjMzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQzIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0OSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzQ5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1MCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1MiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzUyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1MyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1NSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1NiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1OCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzU4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM1OSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2MSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2MiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzYzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2NyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM2OCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzY5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzcwIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzcyIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3MyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzczIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3NCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc1IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3NiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc2IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3NyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc4IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjNzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM3OSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzc5IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4MCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzgxIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4MiBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzgyIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4MyBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg0IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4NSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg1IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4NiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg3IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4OCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzg4IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjODkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM4OSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkwIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5MSBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkxIGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5MiBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzkzIGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NCBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk0IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NSBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk2IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5NyBoYXMgYmFkIG1pbiBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk3IGhhcyBiYWQgbWF4IGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM5OCBoYXMgYmFkIG1heCBoYXNoCitQcm9ibGVtIGluIEhUUkVFIGRpcmVjdG9yeSBpbm9kZSAyNDAwMTogYmxvY2sgIzk5IGhhcyBiYWQgbWluIGhhc2gKK1Byb2JsZW0gaW4gSFRSRUUgZGlyZWN0b3J5IGlub2RlIDI0MDAxOiBibG9jayAjOTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxMzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxNzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxODkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMxOTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyMzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyNzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyODkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMyOTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzMzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzNzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzODkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICMzOTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MjkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0MzkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NDkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTUgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTcgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NTkgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjAgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjMgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjMgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjQgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjQgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjUgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjYgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjYgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjcgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjggaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjggaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NjkgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzAgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzEgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzEgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzIgaGFzIGJhZCBtaW4gaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzIgaGFzIGJhZCBtYXggaGFzaAorUHJvYmxlbSBpbiBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDE6IGJsb2NrICM0NzMgaGFzIGJhZCBtaW4gaGFzaAorSW52YWxpZCBIVFJFRSBkaXJlY3RvcnkgaW5vZGUgMjQwMDEgKC90ZXN0MikuICBDbGVhciBIVHJlZSBpbmRleD8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyAzQTogT3B0aW1pemluZyBkaXJlY3RvcmllcworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMzA1MTQvMzIwMDAgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA1NjY5LzgwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3ODVhZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfcmVpbmRleC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDMwNTE0LzMyMDAwIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTY2OS84MDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWU3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ2MjVmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L25hbWUKQEAgLTAsMCArMSBAQAorcmVpbmRleCBIVFJFRSBEaXJlY3Rvcnkgd2l0aCBkaWZmZXJlbnQgaGFzaCBzZWVkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX3JlaW5kZXgvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZjNmIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF9yZWluZGV4L3NjcmlwdApAQCAtMCwwICsxLDUgQEAKK2lmIHRlc3QgIiRIVFJFRSJ4ID0geXggOyB0aGVuCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9oX3Vuc2lnbmVkL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDQ3NzMwLzEwMDE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzMzc4LzMxNzQ1IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfdW5zaWduZWQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfdW5zaWduZWQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiA0NzczMC8xMDAxOTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzM3OC8zMTc0NSBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hfdW5zaWduZWQvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3Vuc2lnbmVkL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjljODQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3Vuc2lnbmVkL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hfdW5zaWduZWQvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2hfdW5zaWduZWQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjA2OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9uYW1lCkBAIC0wLDAgKzEgQEAKK1Vuc2lnbmVkIEhUUkVFIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9oX3Vuc2lnbmVkL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZjNmIyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaF91bnNpZ25lZC9zY3JpcHQKQEAgLTAsMCArMSw1IEBACitpZiB0ZXN0ICIkSFRSRUUieCA9IHl4IDsgdGhlbgorLiAkY21kX2Rpci9ydW5fZTJmc2NrCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvZXhwZWN0LjEKQEAgLTAsMCArMSwzMyBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMSBoYXMgaWxsZWdhbCBibG9jayhzKS4gIENsZWFyPyB5ZXMKKworSWxsZWdhbCBibG9jayAjNiAoMjAwKSBpbiBpbm9kZSAxMS4gIENMRUFSRUQuCitJbm9kZSAxMSwgaV9zaXplIGlzIDEyMjg4LCBzaG91bGQgYmUgMTEyNjQuICBGaXg/IHllcworCitJbm9kZSAxMSwgaV9ibG9ja3MgaXMgMjQsIHNob3VsZCBiZSAxNi4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRGlyZWN0b3J5IGlub2RlIDExIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjMC4gIEFsbG9jYXRlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDExIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjMy4gIEFsbG9jYXRlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDExIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjNi4gIEFsbG9jYXRlPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLTIxCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc4LCBjb3VudGVkPTc5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3OCwgY291bnRlZD03OSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICg5LjElIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpci9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwYjRmMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMjZhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFmNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpci9uYW1lCkBAIC0wLDAgKzEgQEAKK2RpcmVjdG9yeSB3aXRoIGhvbGVzIGFuZCBpbGxlZ2FsIGJsb2NrcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyMi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTI0ZjYxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjEKQEAgLTAsMCArMSwyNCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMiwgaV9zaXplIGlzIDAsIHNob3VsZCBiZSA1MTIwLiAgRml4PyB5ZXMKKworSW5vZGUgMTMsIGlfc2l6ZSBpcyA0MDk2LCBzaG91bGQgYmUgNTEyMC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRGlyZWN0b3J5IGlub2RlIDEyIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjMy4gIEFsbG9jYXRlPyB5ZXMKKworRGlyZWN0b3J5IGlub2RlIDEzIGhhcyBhbiB1bmFsbG9jYXRlZCBibG9jayAjMS4gIEFsbG9jYXRlPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OSwgY291bnRlZD03NykuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzksIGNvdW50ZWQ9NzcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMy8xNiBmaWxlcyAoNy43JSBub24tY29udGlndW91cyksIDIzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpcjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2YzZlOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyMi9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2hvbGVkaXIyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyMi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9ob2xlZGlyMi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpcjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzE1M2YzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaG9sZWRpcjIvbmFtZQpAQCAtMCwwICsxLDIgQEAKK2RpcmVjdG9yaWVzIHdpdGggaG9sZXMgYW5kIHplcm8gaV9zaXplCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9odXJkL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmZjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9odXJkL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTIgQEAKK1RoZSBIdXJkIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGV0eXBlIGZlYXR1cmUuCitDbGVhcj8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaHVyZC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZmY2MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9odXJkL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZmZlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9odXJkL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2h1cmQvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjkyOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaHVyZC9uYW1lCkBAIC0wLDAgKzEgQEAKK0dOVS9IdXJkIHNwZWNpZmljIHRlc3RzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxiYml0bWFwL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsYmJpdG1hcC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ2ZDIzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsYmJpdG1hcC9leHBlY3QuMQpAQCAtMCwwICsxLDI4IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGJsb2NrIGJpdG1hcAorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0Jsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgMCBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgNDA5NikKK1JlbG9jYXRlPyB5ZXMKKworRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitSZWxvY2F0aW5nIGdyb3VwIDAncyBibG9jayBiaXRtYXAgdG8gNC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICArKDEtLTIxKQorRml4PyB5ZXMKKworSW5vZGUgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgxMi0tMjEpCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjIvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsYmJpdG1hcC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGJiaXRtYXAvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyMWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGJiaXRtYXAvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGJiaXRtYXAvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxiYml0bWFwL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTZlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxiYml0bWFwL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGJiaXRtYXAvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGJiaXRtYXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ0ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsYmJpdG1hcC9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgYmxvY2sgYml0bWFwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaWJpdG1hcC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmFlMjVkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaWJpdG1hcC9leHBlY3QuMQpAQCAtMCwwICsxLDI1IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcAorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0lub2RlIGJpdG1hcCBmb3IgZ3JvdXAgMCBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgNDAwMCkKK1JlbG9jYXRlPyB5ZXMKKworRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitSZWxvY2F0aW5nIGdyb3VwIDAncyBpbm9kZSBiaXRtYXAgdG8gNC4uLgorUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICArKDEtLTExKQorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGliaXRtYXAvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjFmODcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaWJpdG1hcC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTA4OTJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaWJpdG1hcC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpYml0bWFwL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjNDAwMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGliaXRtYXAvbmFtZQpAQCAtMCwwICsxIEBACitpbGxlZ2FsIGlub2RlIGJpdG1hcApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmEyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjEKQEAgLTAsMCArMSw0OSBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBpbm9kZSB0YWJsZQorTm90ZTogaWYgc2V2ZXJhbCBpbm9kZSBvciBibG9jayBiaXRtYXAgYmxvY2tzIG9yIHBhcnQKK29mIHRoZSBpbm9kZSB0YWJsZSByZXF1aXJlIHJlbG9jYXRpb24sIHlvdSBtYXkgd2lzaCB0byB0cnkKK3J1bm5pbmcgZTJmc2NrIHdpdGggdGhlICctYiA4MTkzJyBvcHRpb24gZmlyc3QuICBUaGUgcHJvYmxlbQorbWF5IGxpZSBvbmx5IHdpdGggdGhlIHByaW1hcnkgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMsIGFuZAordGhlIGJhY2t1cCBibG9jayBncm91cCBkZXNjcmlwdG9ycyBtYXkgYmUgT0suCisKK0lub2RlIHRhYmxlIGZvciBncm91cCAwIGlzIG5vdCBpbiBncm91cC4gIChibG9jayA0MDAwMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKKy4uL2UyZnNjay9lMmZzY2s6IEEgYmxvY2sgZ3JvdXAgaXMgbWlzc2luZyBhbiBpbm9kZSB0YWJsZSB3aGlsZSByZWFkaW5nIGJhZCBibG9ja3MgaW5vZGUKK1RoaXMgZG9lc24ndCBib2RlIHdlbGwsIGJ1dCB3ZSdsbCB0cnkgdG8gZ28gb24uLi4KK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAwJ3MgaW5vZGUgdGFibGUgdG8gNS4uLgorUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Jvb3QgaW5vZGUgaXMgbm90IGEgZGlyZWN0b3J5LiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUm9vdCBpbm9kZSBub3QgYWxsb2NhdGVkLiAgQWxsb2NhdGU/IHllcworCisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSgxMS0tMjEpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD04OSkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIwLCBjb3VudGVkPTIxKS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMywgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgyMCwgY291bnRlZD0yMSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYWQ1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjAyMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxZTczYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2lsbGVnYWwgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDJhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjQgQEAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgMSBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAxJ3MgaW5vZGUgdGFibGUgdG8gMTQyLi4uCitSZXN0YXJ0aW5nIGUyZnNjayBmcm9tIHRoZSBiZWdpbm5pbmcuLi4KK09uZSBvciBtb3JlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3IgY2hlY2tzdW1zIGFyZSBpbnZhbGlkLiAgRml4PyB5ZXMKKworR3JvdXAgZGVzY3JpcHRvciAxIGNoZWNrc3VtIGlzIDB4MWNlZSwgc2hvdWxkIGJlIDB4ZjgwOS4gIEZJWEVELgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNjUtLTEyOCkKK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMzExNjMvMzI3NjggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY0M2MyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDMxMTYzLzMyNzY4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZhMTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2lsbGl0YWJsZV9mbGV4YmcvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaWxsaXRhYmxlX2ZsZXhiZy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YjA4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbGxpdGFibGVfZmxleGJnL25hbWUKQEAgLTAsMCArMSBAQAoraWxsZWdhbCBpbm9kZSB0YWJsZSB3aXRoIEZMRVhfQkcKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVlMTkyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTIgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworSW5vZGUgMTMgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworSW5vZGUgMTQgaGFzIGltYWdpYyBmbGFnIHNldC4gIENsZWFyPyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKKy9sb3N0K2ZvdW5kIG5vdCBmb3VuZC4gIENyZWF0ZT8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDEyCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxNAorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDE0IHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgLSg5LS0xOSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzUsIGNvdW50ZWQ9ODcpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDc1LCBjb3VudGVkPTg3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMSwgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMywgY291bnRlZD0yKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgxLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNC8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQxMWMwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTQvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMy8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWMvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWMvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyYjNmYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWMvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpYy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWMvbmFtZQpAQCAtMCwwICsxIEBACitub24taW1hZ2ljIGZpbGVzeXN0ZW0gd2l0aCBpbWFnaWMgaW5vZGVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWNfZnMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWNfZnMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxZmQzNQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpY19mcy9leHBlY3QuMQpAQCAtMCwwICsxLDMxIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDktLTE5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3NSwgY291bnRlZD04NykuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzUsIGNvdW50ZWQ9ODcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgzLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDEsIGNvdW50ZWQ9MikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE0LzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljX2ZzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljX2ZzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDExYzAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbWFnaWNfZnMvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNC8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpY19mcy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljX2ZzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzNjk3NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpY19mcy9uYW1lCkBAIC0wLDAgKzEgQEAKK2ltYWdpYyBmaWxlc3lzdGVtIHdpdGggaW1hZ2ljIGlub2RlcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaW1hZ2ljX2ZzL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpY19mcy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2MGYwNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ltYWdpY19mcy9zY3JpcHQKQEAgLTAsMCArMSw5IEBACitpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitJTUFHRT0kdGVzdF9kaXIvLi4vZl9pbWFnaWMvaW1hZ2UuZ3oKK1BSRVBfQ01EPSckREVCVUdGUyAtdyAtUiAiZmVhdHVyZSBpbWFnaWNfaW5vZGVzIiAkVE1QRklMRSA+IC9kZXYvbnVsbCAyPiYxJworLiAkY21kX2Rpci9ydW5fZTJmc2NrCisKK2Vsc2UgI2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzN2NiMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworVGhlIGJhZCBibG9jayBpbm9kZSBsb29rcyBpbnZhbGlkLiAgQ2xlYXI/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2VlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2JhZF9pbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGFjMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9iYWRfaW5vZGUvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4MWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfYmFkX2lub2RlL25hbWUKQEAgLTAsMCArMSBAQAorY2hlY2sgZm9yIGJvZ3VzIGJhZCBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkYTBiNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1N5bWxpbmsgL2EgKGlub2RlICMxMikgaXMgaW52YWxpZC4KK0NsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2VlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGE2ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfaW52YWxpZF9leHRlbnRfc3ltbGluay9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9pbnZhbGlkX2V4dGVudF9zeW1saW5rL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5MmFhYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2ludmFsaWRfZXh0ZW50X3N5bWxpbmsvbmFtZQpAQCAtMCwwICsxIEBACitleHRlbnQtbWFwcGVkIHN5bWxpbmsgd2l0aCB0d28gYmxvY2tzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfMzJiaXQvZXhwZWN0LjAgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfMzJiaXQvZXhwZWN0LjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkZTQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMApAQCAtMCwwICsxLDU2NyBAQAorSm91cm5hbCBzdGFydHMgYXQgYmxvY2sgMSwgdHJhbnNhY3Rpb24gMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMiwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAxCitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDIsIGF0IGJsb2NrIDE6CisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMiAoZmxhZ3MgMHg4KQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMiwgdHlwZSAyIChjb21taXQgYmxvY2spIGF0IGJsb2NrIDMKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzLCBhdCBibG9jayA0OgorICBGUyBibG9jayA4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1IChmbGFncyAweDApCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjI3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg4IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDg5CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMsIGF0IGJsb2NrIDg5OgorICBGUyBibG9jayAxMzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTAgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgNjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2MzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjM2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDYzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM2MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY0NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTczIChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDE3NAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzLCBhdCBibG9jayAxNzQ6CisgIEZTIGJsb2NrIDY2NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzUgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyMSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMywgdHlwZSAyIChjb21taXQgYmxvY2spIGF0IGJsb2NrIDIyMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgNCwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAyMjMKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgNCwgYXQgYmxvY2sgMjIzOgorICBGUyBibG9jayAyMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI0IChmbGFncyAweDApCisgIEZTIGJsb2NrIDY4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjIwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA3IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA0LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDMwOAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSA0LCBhdCBibG9jayAzMDg6CisgIEZTIGJsb2NrIDcyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDkgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzExIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDcyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3MjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjcgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDQsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayAzMjgKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDUsIHR5cGUgNSAocmV2b2tlIHRhYmxlKSBhdCBibG9jayAzMjkKK0R1bXBpbmcgcmV2b2tlIGJsb2NrLCBzZXF1ZW5jZSA1LCBhdCBibG9jayAzMjk6CisgIFJldm9rZSBGUyBibG9jayA2NDAKKyAgUmV2b2tlIEZTIGJsb2NrIDY0MQorICBSZXZva2UgRlMgYmxvY2sgNjQyCisgIFJldm9rZSBGUyBibG9jayA2NDMKKyAgUmV2b2tlIEZTIGJsb2NrIDY0NAorICBSZXZva2UgRlMgYmxvY2sgNjQ1CisgIFJldm9rZSBGUyBibG9jayA2NDYKKyAgUmV2b2tlIEZTIGJsb2NrIDY0NworICBSZXZva2UgRlMgYmxvY2sgNjQ4CisgIFJldm9rZSBGUyBibG9jayA2NDkKKyAgUmV2b2tlIEZTIGJsb2NrIDY1MAorICBSZXZva2UgRlMgYmxvY2sgNjUxCisgIFJldm9rZSBGUyBibG9jayA2NTIKKyAgUmV2b2tlIEZTIGJsb2NrIDY1MworICBSZXZva2UgRlMgYmxvY2sgNjU0CisgIFJldm9rZSBGUyBibG9jayA2NTUKKyAgUmV2b2tlIEZTIGJsb2NrIDY1NgorICBSZXZva2UgRlMgYmxvY2sgNjU3CisgIFJldm9rZSBGUyBibG9jayA4MQorICBSZXZva2UgRlMgYmxvY2sgNjU4CisgIFJldm9rZSBGUyBibG9jayA2NTkKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MAorICBSZXZva2UgRlMgYmxvY2sgODQKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MQorICBSZXZva2UgRlMgYmxvY2sgODUKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MgorICBSZXZva2UgRlMgYmxvY2sgODYKKyAgUmV2b2tlIEZTIGJsb2NrIDY2MworICBSZXZva2UgRlMgYmxvY2sgODcKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NAorICBSZXZva2UgRlMgYmxvY2sgODgKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NQorICBSZXZva2UgRlMgYmxvY2sgODkKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NgorICBSZXZva2UgRlMgYmxvY2sgOTAKKyAgUmV2b2tlIEZTIGJsb2NrIDY2NworICBSZXZva2UgRlMgYmxvY2sgOTEKKyAgUmV2b2tlIEZTIGJsb2NrIDY2OAorICBSZXZva2UgRlMgYmxvY2sgOTIKKyAgUmV2b2tlIEZTIGJsb2NrIDY2OQorICBSZXZva2UgRlMgYmxvY2sgOTMKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MAorICBSZXZva2UgRlMgYmxvY2sgOTQKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MQorICBSZXZva2UgRlMgYmxvY2sgOTUKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MgorICBSZXZva2UgRlMgYmxvY2sgOTYKKyAgUmV2b2tlIEZTIGJsb2NrIDY3MworICBSZXZva2UgRlMgYmxvY2sgOTcKKyAgUmV2b2tlIEZTIGJsb2NrIDY3NAorICBSZXZva2UgRlMgYmxvY2sgNjc1CisgIFJldm9rZSBGUyBibG9jayA2MTEKKyAgUmV2b2tlIEZTIGJsb2NrIDY3NgorICBSZXZva2UgRlMgYmxvY2sgNjEyCisgIFJldm9rZSBGUyBibG9jayA2NzcKKyAgUmV2b2tlIEZTIGJsb2NrIDYxMworICBSZXZva2UgRlMgYmxvY2sgNjc4CisgIFJldm9rZSBGUyBibG9jayA2MTQKKyAgUmV2b2tlIEZTIGJsb2NrIDY3OQorICBSZXZva2UgRlMgYmxvY2sgNjE1CisgIFJldm9rZSBGUyBibG9jayA2MTYKKyAgUmV2b2tlIEZTIGJsb2NrIDYxNworICBSZXZva2UgRlMgYmxvY2sgNjgyCisgIFJldm9rZSBGUyBibG9jayA2MTgKKyAgUmV2b2tlIEZTIGJsb2NrIDY4MworICBSZXZva2UgRlMgYmxvY2sgNjE5CisgIFJldm9rZSBGUyBibG9jayA2ODQKKyAgUmV2b2tlIEZTIGJsb2NrIDYyMAorICBSZXZva2UgRlMgYmxvY2sgNjg1CisgIFJldm9rZSBGUyBibG9jayA2MjEKKyAgUmV2b2tlIEZTIGJsb2NrIDYyMgorICBSZXZva2UgRlMgYmxvY2sgNjg3CisgIFJldm9rZSBGUyBibG9jayA2MjMKKyAgUmV2b2tlIEZTIGJsb2NrIDY4OAorICBSZXZva2UgRlMgYmxvY2sgNjI0CisgIFJldm9rZSBGUyBibG9jayA2ODkKKyAgUmV2b2tlIEZTIGJsb2NrIDYyNQorICBSZXZva2UgRlMgYmxvY2sgNjkwCisgIFJldm9rZSBGUyBibG9jayA2MjYKKyAgUmV2b2tlIEZTIGJsb2NrIDY5MQorICBSZXZva2UgRlMgYmxvY2sgNjI3CisgIFJldm9rZSBGUyBibG9jayA2MjgKKyAgUmV2b2tlIEZTIGJsb2NrIDYyOQorICBSZXZva2UgRlMgYmxvY2sgNjMwCisgIFJldm9rZSBGUyBibG9jayA2MzEKKyAgUmV2b2tlIEZTIGJsb2NrIDYzMgorICBSZXZva2UgRlMgYmxvY2sgNjMzCisgIFJldm9rZSBGUyBibG9jayA2MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDYzNQorICBSZXZva2UgRlMgYmxvY2sgNjM2CisgIFJldm9rZSBGUyBibG9jayA2MzcKKyAgUmV2b2tlIEZTIGJsb2NrIDYzOAorICBSZXZva2UgRlMgYmxvY2sgNjM5CitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA1LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDMzMAorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSA1LCBhdCBibG9jayAzMzA6CisgIEZTIGJsb2NrIDk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMSAoZmxhZ3MgMHgwKQorICBGUyBibG9jayA5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTEwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzUxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDM1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTQgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDUsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNDE1CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDUsIGF0IGJsb2NrIDQxNToKKyAgRlMgYmxvY2sgMTYxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxNiAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAzNjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzYzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYyIChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSA1LCB0eXBlIDIgKGNvbW1pdCBibG9jaykgYXQgYmxvY2sgNDYzCitObyBtYWdpYyBudW1iZXIgYXQgYmxvY2sgNDY0OiBlbmQgb2Ygam91cm5hbC4KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFhYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzMyYml0L2V4cGVjdC4xCkBAIC0wLDAgKzEsMTYgQEAKK3Rlc3RfZmlsZXN5czogcmVjb3ZlcmluZyBqb3VybmFsCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDE0Njk5LCBjb3VudGVkPTE0NjYwKS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICg0MDg1LCBjb3VudGVkPTM2OTcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAzOTkvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE3MjQvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfMzJiaXQvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfMzJiaXQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5NDhkMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDM5OS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTcyNC8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA4MTAyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzMyYml0L2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzMyYml0L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlOTkxMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF8zMmJpdC9uYW1lCkBAIC0wLDAgKzEgQEAKK29uLWRpc2sgMzItYml0IGpvdXJuYWwgZm9ybWF0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfMzJiaXQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzMyYml0L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI0MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzMyYml0L3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK1BSRVBfQ01EPSckREVCVUdGUyAtUiAibG9nZHVtcCAtYSIgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4gJHRlc3RfbmFtZS4wLmxvZycKK1BBU1NfWkVSTz10cnVlCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzY0Yml0L2V4cGVjdC4wIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzY0Yml0L2V4cGVjdC4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDdmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjAKQEAgLTAsMCArMSw5MjggQEAKK0pvdXJuYWwgc3RhcnRzIGF0IGJsb2NrIDY3LCB0cmFuc2FjdGlvbiAzMgorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzIsIHR5cGUgNSAocmV2b2tlIHRhYmxlKSBhdCBibG9jayA2NworRHVtcGluZyByZXZva2UgYmxvY2ssIHNlcXVlbmNlIDMyLCBhdCBibG9jayA2NzoKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1NDEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0ODkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1NTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0OTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0MzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MDkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NDkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NTkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjYKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzEKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjcKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzIKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjgKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzMKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NjkKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzQKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzAKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE1MzUKKyAgUmV2b2tlIEZTIGJsb2NrIDAKKyAgUmV2b2tlIEZTIGJsb2NrIDE0NzEKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMyLCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDY4CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMyLCBhdCBibG9jayA2ODoKKyAgRlMgYmxvY2sgODAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDY5IChmbGFncyAweDApCisgIEZTIGJsb2NrIDgwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDc4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDc4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNzk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgODcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA4OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA3OTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODM5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgzNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgOTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODI0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODE2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODQ4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDExOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODM1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDgyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODIyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDEzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODUxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTQ5IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMiwgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAxNTAKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzIsIGF0IGJsb2NrIDE1MDoKKyAgRlMgYmxvY2sgODc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1MSAoZmxhZ3MgMHgwKQorICBGUyBibG9jayA4NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODc3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4NjcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg1NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4ODIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxNzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE3OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTEzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDg4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxODkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgODg0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA4OTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAxOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTM3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDE5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMTk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDAgKGZsYWdzIDB4YSkKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDMyLCB0eXBlIDIgKGNvbW1pdCBibG9jaykgYXQgYmxvY2sgMjAxCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSA1IChyZXZva2UgdGFibGUpIGF0IGJsb2NrIDIwMgorRHVtcGluZyByZXZva2UgYmxvY2ssIHNlcXVlbmNlIDMzLCBhdCBibG9jayAyMDI6CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjAzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTM5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjA5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjExCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjEzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTQ5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNjE3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTUzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTU5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTYzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTY5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTcyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTczCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTc5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTgzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTg5CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkwCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkxCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkyCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTkzCisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk0CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk1CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk2CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk3CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk4CisgIFJldm9rZSBGUyBibG9jayAwCisgIFJldm9rZSBGUyBibG9jayAxNTk5CitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAyMDMKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzMsIGF0IGJsb2NrIDIwMzoKKyAgRlMgYmxvY2sgOTMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNCAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjA2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEzMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMDggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIxOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjIyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkyNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkzMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTE5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDIzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5MjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDkxNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTI5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTUwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjUyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk1NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTYyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk0OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyNzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI3OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjc5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMDAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NCAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzMsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgMjg1CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDMzLCBhdCBibG9jayAyODU6CisgIEZTIGJsb2NrIDk5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODYgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgOTkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyODkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTg3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5ODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAyOTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDI5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMjk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzAyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgOTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA5OTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEwMDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzA4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDk4NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTAwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzEyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzE5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzI5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzMwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTczIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNDkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzMzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDMzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNzggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE3OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTkxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzQ5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTgzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2NzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjIzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM1OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTUzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxODggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzYzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNjQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTg5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY2IChmbGFncyAweGEpCitGb3VuZCBleHBlY3RlZCBzZXF1ZW5jZSAzMywgdHlwZSAxIChkZXNjcmlwdG9yIGJsb2NrKSBhdCBibG9jayAzNjcKK0R1bXBpbmcgZGVzY3JpcHRvciBibG9jaywgc2VxdWVuY2UgMzMsIGF0IGJsb2NrIDM2NzoKKyAgRlMgYmxvY2sgMTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM2OCAoZmxhZ3MgMHgwKQorICBGUyBibG9jayAxNTYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzY5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzcyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM3NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzc4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzNzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxOTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDExOTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzODYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM4OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTE5OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMTk5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayAzOTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjI1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDM5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgMzk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDAwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYyNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjA3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjI4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMDggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MjkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDA2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDExIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMDEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjE1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyMCAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzMsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayA0MjEKK0ZvdW5kIGV4cGVjdGVkIHNlcXVlbmNlIDM0LCB0eXBlIDEgKGRlc2NyaXB0b3IgYmxvY2spIGF0IGJsb2NrIDQyMgorRHVtcGluZyBkZXNjcmlwdG9yIGJsb2NrLCBzZXF1ZW5jZSAzNCwgYXQgYmxvY2sgNDIyOgorICBGUyBibG9jayAxNDYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDIzIChmbGFncyAweDApCisgIEZTIGJsb2NrIDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjc5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjAzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDI4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMDQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDM2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIxOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0MzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQzOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NDMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjIxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDQ2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NDcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTMyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ0OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDUxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDU2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjI3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ1OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjA4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDYyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIyOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ2NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDY2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1MzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDY3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzMiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NjkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjMzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDcyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NTggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDczIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjgyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ3NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDc3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDc4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDIzNyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0NzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIwOSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjM4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyMzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDgyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDgzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0ODUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxMjEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ4NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDg4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDg5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxNCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDkzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDEyMTUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDk0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTIxNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA0OTYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDQ5OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNDk5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU0NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwMyAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNTA0CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDM0LCBhdCBibG9jayA1MDQ6CisgIEZTIGJsb2NrIDI1MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDUgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTU0OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MDYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjUxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTQ5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUwOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTEwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU1MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjUzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTUyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTE1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTE2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjU2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUxOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNTcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTIwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTIxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI1OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU2NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjU5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTI2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTI3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MjggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgNjg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTMxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTMyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjY0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDUzNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTM3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2NiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1MzkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjY3IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNjggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI2OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwNiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjcwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU0NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQ3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTQ4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjcyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1MSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTUzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjc1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1NiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjExIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU1NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE2MTIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTU5IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2MiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2MyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyNzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTY0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTYxNSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2NyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjE2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2OCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTY5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU2OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTcxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjgzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU3NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTc1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTc2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI4NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3MyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1NzggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjg2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU3OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyODcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTgxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY4OCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU3NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjg4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4NSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMSAoZGVzY3JpcHRvciBibG9jaykgYXQgYmxvY2sgNTg2CitEdW1waW5nIGRlc2NyaXB0b3IgYmxvY2ssIHNlcXVlbmNlIDM0LCBhdCBibG9jayA1ODY6CisgIEZTIGJsb2NrIDI4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODcgKGZsYWdzIDB4MCkKKyAgRlMgYmxvY2sgMTU3NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1ODggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU4OSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTc4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5MCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTkxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1NzkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTkyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjkzIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5NCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTgwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDU5NSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTQgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTk2IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODEgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNTk3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5NSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTggKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4MiBsb2dnZWQgYXQgam91cm5hbCBibG9jayA1OTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwMCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayA2ODkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAxIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjAyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDI5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDMgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMjk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwNSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTg1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYwNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAyOTkgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjA3IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODYgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjA4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwMCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MDkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzAxIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDIgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjEyIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1ODggbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjEzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwMyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTQgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU4OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxNiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYxNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDUgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjE4IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MTkgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjAgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyMSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTkyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyMiAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMDcgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjIzIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDE1OTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjI0IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMwOCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjUgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5NCBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MjYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzA5IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyNyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk1IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk2IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYyOSAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMTAgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjMwIChmbGFncyAweDIpCisgIEZTIGJsb2NrIDMxMSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzEgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5NyBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzIgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzEyIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzMyAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNTk4IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzNCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAzMTMgbG9nZ2VkIGF0IGpvdXJuYWwgYmxvY2sgNjM1IChmbGFncyAweDIpCisgIEZTIGJsb2NrIDY5MSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzYgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMTU5OSBsb2dnZWQgYXQgam91cm5hbCBibG9jayA2MzcgKGZsYWdzIDB4MikKKyAgRlMgYmxvY2sgMzE0IGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzOCAoZmxhZ3MgMHgyKQorICBGUyBibG9jayAxNjAwIGxvZ2dlZCBhdCBqb3VybmFsIGJsb2NrIDYzOSAoZmxhZ3MgMHhhKQorRm91bmQgZXhwZWN0ZWQgc2VxdWVuY2UgMzQsIHR5cGUgMiAoY29tbWl0IGJsb2NrKSBhdCBibG9jayA2NDAKK05vIG1hZ2ljIG51bWJlciBhdCBibG9jayA2NDE6IGVuZCBvZiBqb3VybmFsLgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzY0Yml0L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzY0Yml0L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjBlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjEKQEAgLTAsMCArMSwxNiBAQAordGVzdF9maWxlc3lzOiByZWNvdmVyaW5nIGpvdXJuYWwKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTQwNTksIGNvdW50ZWQ9MTI3MTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDgxODEsIGNvdW50ZWQ9NjgzNCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzNTgvODE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM2NzIvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjYjczMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF82NGJpdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzNTgvODE5MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDM2NzIvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1OGY5MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF82NGJpdC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF82NGJpdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGRkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qbmxfNjRiaXQvbmFtZQpAQCAtMCwwICsxIEBACitvbi1kaXNrIDY0LWJpdCBqb3VybmFsIGZvcm1hdApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sXzY0Yml0L3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF82NGJpdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiNDM2NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF82NGJpdC9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitQUkVQX0NNRD0nJERFQlVHRlMgLVIgImxvZ2R1bXAgLWEiICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+ICR0ZXN0X25hbWUuMC5sb2cnCitQQVNTX1pFUk89dHJ1ZQorCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMCBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFkNzJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4wCkBAIC0wLDAgKzEsNDcgQEAKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgZmxleF9iZyBzcGFyc2Vfc3VwZXIgaHVnZV9maWxlIHVuaW5pdF9iZyBkaXJfbmxpbmsgZXh0cmFfaXNpemUKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgdXNlcl94YXR0ciBhY2wKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgUmVtb3VudCByZWFkLW9ubHkKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMjA0OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA4MTkyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDQwOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2ODYyCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDIwMzcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMzEKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICA4MTkyCitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDIwNDgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMjU2CitGbGV4IGJsb2NrIGdyb3VwIHNpemU6ICAgIDE2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMCAoPG5vbmU+KQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0pvdXJuYWwgaW5vZGU6ICAgICAgICAgICAgOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorSm91cm5hbCBiYWNrdXA6ICAgICAgICAgICBpbm9kZSBibG9ja3MKK0pvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAgKG5vbmUpCitKb3VybmFsIHNpemU6ICAgICAgICAgICAgIDEwMjRrCitKb3VybmFsIGxlbmd0aDogICAgICAgICAgIDEwMjQKK0pvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHgwMDAwMDAwNQorSm91cm5hbCBzdGFydDogICAgICAgICAgICAwCisKKworR3JvdXAgMDogKEJsb2NrcyAxLTgxOTEpIFtJVEFCTEVfWkVST0VEXQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0zMworICBCbG9jayBiaXRtYXAgYXQgMzQgKCszMyksIElub2RlIGJpdG1hcCBhdCA1MCAoKzQ5KQorICBJbm9kZSB0YWJsZSBhdCA2Ni0zMjEgKCs2NSkKKyAgNjg2MiBmcmVlIGJsb2NrcywgMjAzNyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcywgMjAzNyB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMzMwLTgxOTEKKyAgRnJlZSBpbm9kZXM6IDEyLTIwNDgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTcyOTUxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4xCkBAIC0wLDAgKzEsOSBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDEzMzAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjE2YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjA0OCBmaWxlcyAoOS4xJSBub24tY29udGlndW91cyksIDEzMzAvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmNjRkNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9uYW1lCkBAIC0wLDAgKzEgQEAKK2pvdXJuYWwgc19lcnJubyBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfam5sX2Vycm5vL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1MDA2YQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2pubF9lcnJuby9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitBRlRFUl9DTUQ9JyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPiAkdGVzdF9uYW1lLjAubG9nJworUEFTU19aRVJPPXRydWUKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9qb3VybmFsL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjAyYzgwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam91cm5hbC9leHBlY3QuMQpAQCAtMCwwICsxLDYyIEBACit0ZXN0X2ZpbGVzeXM6IHJlY292ZXJpbmcgam91cm5hbAorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMzcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA5MCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA1MCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDU3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA4MCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDcxICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgODYgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDgzICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNyAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDUyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE1ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTAyICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAxNCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDM2ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyMSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDMgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDUxICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA5OSAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDE5ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDQwNzAwLCBzaXplPTEwMjQpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAzOSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgODggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyMCAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDEgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDc3ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDYwICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA0OSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNjIgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA3MiAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDI4ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA1MyAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgOTQgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDc2ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMzggKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3MDAsIHNpemU9MTAyNCkKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDMzICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNDAgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSA3MyAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDcwMCwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgNTUgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjAwLCBzaXplPTQwOTYpCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAyNCAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2MDAsIHNpemU9NDA5NikKK0NsZWFyaW5nIG9ycGhhbmVkIGlub2RlIDU5ICh1aWQ9MCwgZ2lkPTAsIG1vZGU9MDEwMDYwMCwgc2l6ZT00MDk2KQorQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitNb3Zpbmcgam91cm5hbCBmcm9tIC9qb3VybmFsIHRvIGhpZGRlbiBpbm9kZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogNTMvMjA0OCBmaWxlcyAoMS45JSBub24tY29udGlndW91cyksIDE0MDkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pvdXJuYWwvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qb3VybmFsL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzUyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogNTMvMjA0OCBmaWxlcyAoMS45JSBub24tY29udGlndW91cyksIDE0MDkvODE5MiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pvdXJuYWwvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9qb3VybmFsL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMmQ5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9qb3VybmFsL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2pvdXJuYWwvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX2pvdXJuYWwvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2UyMzIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfam91cm5hbC9uYW1lCkBAIC0wLDAgKzEgQEAKK3JlY292ZXIgam91cm5hbCBmcm9tIGNvcnJ1cHRlZCBpbm9kZSB0YWJsZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2xvdHNiYWQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllOGEyNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2xvdHNiYWQvZXhwZWN0LjEKQEAgLTAsMCArMSw2MSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxMyBpcyB0b28gYmlnLiAgVHJ1bmNhdGU/IHllcworCitCbG9jayAjMTY1ODA4NzYgKDc0KSBjYXVzZXMgZGlyZWN0b3J5IHRvIGJlIHRvbyBiaWcuICBDTEVBUkVELgorSW5vZGUgMTMsIGlfc2l6ZSBpcyAxNTM2MCwgc2hvdWxkIGJlIDEyMjg4LiAgRml4PyB5ZXMKKworSW5vZGUgMTMsIGlfYmxvY2tzIGlzIDMyLCBzaG91bGQgYmUgMzAuICBGaXg/IHllcworCitJbm9kZSAxMiBoYXMgaWxsZWdhbCBibG9jayhzKS4gIENsZWFyPyB5ZXMKKworSWxsZWdhbCBibG9jayAjMTIgKDc3ODM5ODgxOCkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTMgKDE3Njg0NDQ5NjApIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzE0ICgxNzUyMzc1NDExKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMxNSAoMTY4NDgyOTU1MSkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTYgKDE4ODYzNDkzNDQpIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzE3ICgxODE5NjMzMjUzKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMxOCAoMTY2MzA3MjYyMCkgaW4gaW5vZGUgMTIuICBDTEVBUkVELgorSWxsZWdhbCBibG9jayAjMTkgKDE3MzUyODcxNDQpIGluIGlub2RlIDEyLiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzIwICgxMzEwNzMxODc3KSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMyMSAoNTYwMjk3MDcxKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitJbGxlZ2FsIGJsb2NrICMyMiAoNTQzNTEyMzUyKSBpbiBpbm9kZSAxMi4gIENMRUFSRUQuCitUb28gbWFueSBpbGxlZ2FsIGJsb2NrcyBpbiBpbm9kZSAxMi4KK0NsZWFyIGlub2RlPyB5ZXMKKworUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ3Rlcm1jYXAnIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxMi4gIENsZWFyPyB5ZXMKKworUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK0lub2RlIDIgcmVmIGNvdW50IGlzIDUsIHNob3VsZCBiZSA0LiAgRml4PyB5ZXMKKworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDI3LS00MSkgLSg0NC0tNDUpIC0oNzQtLTkwKQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5LCBjb3VudGVkPTQzKS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0xMiAtMTQKK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTgsIGNvdW50ZWQ9MjApLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg0LCBjb3VudGVkPTMpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDE4LCBjb3VudGVkPTIwKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTIvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA1Ny8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9sb3RzYmFkL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTEyMDhmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2xvdHNiYWQvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkNWQxZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2xvdHNiYWQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbG90c2JhZC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Yjc3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9sb3RzYmFkL25hbWUKQEAgLTAsMCArMSBAQAordG9vIG1hbnkgaWxsZWdhbCBibG9ja3MgaW4gaW5vZGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2xwZi9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI4NTNjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTMgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgaW5vZGUgMTMKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDE0CitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTQgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxNQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDE1IHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKygyMi0tMjMpICs0OSArKDU3LS01OCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMjQsIGNvdW50ZWQ9MzMpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDM4LCBjb3VudGVkPTMzKS4KK0ZpeD8geWVzCisKK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogICsxMworRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxLCBjb3VudGVkPTApLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDEsIGNvdW50ZWQ9MCkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE2LzE2IGZpbGVzICgxMi41JSBub24tY29udGlndW91cyksIDY3LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX2xwZi9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjExMGVlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTYvMTYgZmlsZXMgKDEyLjUlIG5vbi1jb250aWd1b3VzKSwgNjcvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzFiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9scGYvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9scGYvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzJkYmFiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmL25hbWUKQEAgLTAsMCArMSBAQAorbWlzc2luZyBsb3N0K2ZvdW5kCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9scGYyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM1ODZjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMQpAQCAtMCwwICsxLDQxIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitVbmNvbm5lY3RlZCBkaXJlY3RvcnkgaW5vZGUgMTIgKC8/Pz8pCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgQ3JlYXRlPyB5ZXMKKworVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlIDEzICgvPz8/KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxMiByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oOS0tMTkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc3LCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg3NywgY291bnRlZD04OSkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIsIGNvdW50ZWQ9MykuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDUsIGNvdW50ZWQ9NCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMiwgY291bnRlZD0zKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTMvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9scGYyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTUxOTMyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEzLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZjIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwM2ZiMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZjIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmMi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGEzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9scGYyL25hbWUKQEAgLTAsMCArMSBAQAorY3JlYXRlIGxvc3QrZm91bmQgYW5kIHJlY29ubmVjdCBsb3N0IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZmZpbGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjY2U0YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZmZpbGUvZXhwZWN0LjEKQEAgLTAsMCArMSwzMiBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorL2xvc3QrZm91bmQgaXMgbm90IGEgZGlyZWN0b3J5IChpbm89MTEpCitVbmxpbms/IHllcworCisvbG9zdCtmb3VuZCBub3QgZm91bmQuICBDcmVhdGU/IHllcworCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgaW5vZGUgMTEKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitVbmF0dGFjaGVkIGlub2RlIDEyCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxMworQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDEzIHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1VuYXR0YWNoZWQgaW5vZGUgMTQKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxNCByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9scGZmaWxlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU4MzJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZmZpbGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyNzhkZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX2xwZmZpbGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbHBmZmlsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9scGZmaWxlL25hbWUKQEAgLTAsMCArMSBAQAorbG9zdCtmb3VuZCBpcyBub3QgYSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZjFkYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzggQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworSW5vZGUgMTQgaGFzIGlsbGVnYWwgYmxvY2socykuICBDbGVhcj8geWVzCisKK0lsbGVnYWwgYmxvY2sgIzIgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzMgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzQgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzUgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzYgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzcgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzggKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzkgKDQyOTQ5MDE3NjApIGluIGlub2RlIDE0LiAgQ0xFQVJFRC4KK0lsbGVnYWwgYmxvY2sgIzEwICg0Mjk0OTAxNzYwKSBpbiBpbm9kZSAxNC4gIENMRUFSRUQuCitJbm9kZSAxNCwgaV9zaXplIGlzIDE4NDQ2NDYyNTk4NzMyODQ5MjkxLCBzaG91bGQgYmUgMjA0OC4gIEZpeD8geWVzCisKK0lub2RlIDE0LCBpX2Jsb2NrcyBpcyAxOCwgc2hvdWxkIGJlIDQuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDE0ICgvTUFLRURFVikgaXMgNDI5NDkwMTc2MCwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNDMtLTQ5KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg2OCwgY291bnRlZD03NSkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNjgsIGNvdW50ZWQ9NzUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAyOS8zMiBmaWxlcyAoMy40JSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmZmIwMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21lc3N5X2lub2RlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMjkvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9tZXNzeV9pbm9kZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX21lc3N5X2lub2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMGE2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tZXNzeV9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9tZXNzeV9pbm9kZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ4NWVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWVzc3lfaW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACitiYWQgZmlsZSBhbmQgZGlyZWN0b3J5IGFjbCBwb2ludGVycwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3NfYmxrX2JtYXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4YjYxYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3NfYmxrX2JtYXAvZXhwZWN0LjEKQEAgLTAsMCArMSwyMCBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAwJ3MgYmxvY2sgYml0bWFwIHRvIDIuLi4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorQmxvY2sgYml0bWFwIGRpZmZlcmVuY2VzOiAgKygwLS0xMCkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoOTAsIGNvdW50ZWQ9ODkpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDkwLCBjb3VudGVkPTg5KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9taXNzX2Jsa19ibWFwL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y5MmVhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3NfYmxrX2JtYXAvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwZGJlMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3NfYmxrX2JtYXAvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19ibGtfYm1hcC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTk0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9taXNzX2Jsa19ibWFwL25hbWUKQEAgLTAsMCArMSBAQAorbWlzc2luZyBibG9jayBiaXRtYXAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3Nfam91cm5hbC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3Nfam91cm5hbC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM4YjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjggQEAKK1N1cGVyYmxvY2sgaGFzIGFuIGludmFsaWQgam91cm5hbCAoaW5vZGUgOCkuCitDbGVhcj8geWVzCisKKyoqKiBleHQzIGpvdXJuYWwgaGFzIGJlZW4gZGVsZXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDIgb25seSAqKioKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oNTAtLTEwNzkpCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDk2OCwgY291bnRlZD0xOTk4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg5NjgsIGNvdW50ZWQ9MTk5OCkuCitGaXg/IHllcworCitSZWNyZWF0ZSBqb3VybmFsPyB5ZXMKKworQ3JlYXRpbmcgam91cm5hbCAoMTAyNCBibG9ja3MpOiAgRG9uZS4KKworKioqIGpvdXJuYWwgaGFzIGJlZW4gcmUtY3JlYXRlZCAtIGZpbGVzeXN0ZW0gaXMgbm93IGV4dDMgYWdhaW4gKioqCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzI1NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNzkvMjA0OCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3Nfam91cm5hbC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3Nfam91cm5hbC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMyNzYzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMjU2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTA3OS8yMDQ4IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGQzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9taXNzX2pvdXJuYWwvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9taXNzX2pvdXJuYWwvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTliZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc19qb3VybmFsL25hbWUKQEAgLTAsMCArMSBAQAorTm9uLWV4aXN0ZW50IGpvdXJuYWwgaW5vZGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNmMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNDkgQEAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgaW5vZGUgdGFibGUKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgMSBpcyBub3QgaW4gZ3JvdXAuICAoYmxvY2sgMCkKK1dBUk5JTkc6IFNFVkVSRSBEQVRBIExPU1MgUE9TU0lCTEUuCitSZWxvY2F0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUmVsb2NhdGluZyBncm91cCAxJ3MgaW5vZGUgdGFibGUgdG8gODE5Ny4uLgorUmVzdGFydGluZyBlMmZzY2sgZnJvbSB0aGUgYmVnaW5uaW5nLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ2V0YycgaW4gLyAoMikgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDE1MDUuICBDbGVhcj8geWVzCisKK0VudHJ5ICdjYWNoZScgaW4gLyAoMikgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDE1MTQuICBDbGVhcj8geWVzCisKK0VudHJ5ICdhJyBpbiAvICgyKSBoYXMgZGVsZXRlZC91bnVzZWQgaW5vZGUgMTUxNS4gIENsZWFyPyB5ZXMKKworRW50cnkgJ2InIGluIC8gKDIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAxNTE2LiAgQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgOCwgc2hvdWxkIGJlIDQuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oODM4NS0tODQwNSkKK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzk4NywgY291bnRlZD03OTg0KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxMTYwMiwgY291bnRlZD0xMTU5OSkuCitGaXg/IHllcworCitJbm9kZSBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDE1MDUtLTE1MTYpCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDE0OTMsIGNvdW50ZWQ9MTQ4OSkuCitGaXg/IHllcworCitEaXJlY3RvcmllcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIsIGNvdW50ZWQ9MykuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMjk5NywgY291bnRlZD0yOTkzKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMS8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNkMjFhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc3RhYmxlL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMzAwOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDQwMS8xMjAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFjYTlkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc3RhYmxlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWlzc3RhYmxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhMWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21pc3N0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK21pc3NpbmcgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWtlMmZzMmIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmZWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4xCkBAIC0wLDAgKzEsMjUgQEAKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUm9vdCBpbm9kZSBoYXMgZHRpbWUgc2V0IChwcm9iYWJseSBkdWUgdG8gb2xkIG1rZTJmcykuICBGaXg/IHllcworCitJbm9kZSAxMSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgRml4PyB5ZXMKKworSW5vZGUgMTUgaXMgaW4gdXNlLCBidXQgaGFzIGR0aW1lIHNldC4gIEZpeD8geWVzCisKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1VuYXR0YWNoZWQgemVyby1sZW5ndGggaW5vZGUgMTUuICBDbGVhcj8geWVzCisKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxOCwgY291bnRlZD0xNykuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyAoMTgsIGNvdW50ZWQ9MTcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI1LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWtlMmZzMmIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0NTVkNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX21rZTJmczJiL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9ta2UyZnMyYi9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX21rZTJmczJiL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzQxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ta2UyZnMyYi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9ta2UyZnMyYi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWtlMmZzMmIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjIyMDJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbWtlMmZzMmIvbmFtZQpAQCAtMCwwICsxIEBACitta2UyZnMgdmVyc2lvbiAwLjJiIGNyZWF0ZWQgZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ2NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wL25hbWUKQEAgLTAsMCArMSBAQAorZGlzYWJsZSBNTVAgd2l0aCB0dW5lMmZzIGFmdGVyIGUyZnNjayBraWxsZWQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21tcC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXAvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjE2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXAvc2NyaXB0CkBAIC0wLDAgKzEsNzQgQEAKK0ZTQ0tfT1BUPS15ZgorCitUTVBGSUxFPSR0ZXN0X25hbWUudG1wCis+ICRUTVBGSUxFCisKK3N0YXQgLWYgJFRNUEZJTEUgfCBncmVwIC1xICJUeXBlOiB0bXBmcyIKK2lmIFsgJD8gPSAwIF07IHRoZW4KKwlybSAtZiAkVE1QRklMRQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIGZvciB0bXBmcyAobm8gT19ESVJFQ1QpIgorCXJldHVybiAwCitmaQorCitlY2hvICJtYWtlIHRoZSB0ZXN0IGltYWdlIC4uLiIgPiAkdGVzdF9uYW1lLmxvZworJE1LRTJGUyAtcSAtRiAtbyBMaW51eCAtYiA0MDk2IC1PIG1tcCAtRSBtbXBfdXBkYXRlX2ludGVydmFsPTEgJFRNUEZJTEUgMTAwID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyAtTyBtbXAgZmFpbGVkIiA+ICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlyZXR1cm4gJHN0YXR1cworZmkKKwora2lsbF9kZWJ1Z2ZzKCkgeworCXRyYXAgMAorCVBJRD0kKHBzIC1vIHBpZCxjb21tYW5kIHwgZ3JlcCAtdiBhd2sgfAorCQlhd2sgIi9kZWJ1Z2ZzIC13ICRUTVBGSUxFLyB7IHByaW50IFwkMSB9IikKKwlbICJ4JFBJRCIgIT0gIngiIF0gJiYga2lsbCAtOSAkUElECit9CisKKyMgdGhpcyB3aWxsIGNhdXNlIGRlYnVnZnMgdG8gY3JlYXRlIHRoZSAkdGVzdF9uYW1lLm1hcmsgZmlsZSBvbmNlIGl0IGhhcworIyBwYXNzZWQgdGhlIE1NUCBzdGFydHVwLCB0aGVuIGNvbnRpbnVlIHJlYWRpbmcgaW5wdXQgdW50aWwgaXQgaXMga2lsbGVkCitNQVJLRklMRT0kdGVzdF9uYW1lLm5ldworcm0gLWYgJE1BUktGSUxFCit0cmFwIGtpbGxfZGVidWdmcyBFWElUCitlY2hvICJzZXQgbW1wIHNlcXVlbmNlIHRvIEVYVDJfTU1QX1NFUV9GU0NLLi4uIiA+PiAkdGVzdF9uYW1lLmxvZworKCB7IGVjaG8gZHVtcF9tbXA7IGVjaG8gImR1bXBfaW5vZGUgPDI+ICRNQVJLRklMRSI7IGNhdCAvZGV2L3plcm87IH0gfAorCSRERUJVR0ZTIC13ICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEgJiApID4gL2Rldi9udWxsIDI+JjEgJgorZWNobyAid2FpdCB1bnRpbCBkZWJ1Z2ZzIGhhcyBzdGFydGVkIC4uLiIgPj4gJHRlc3RfbmFtZS5sb2cKK3doaWxlIFsgISAtZSAkTUFSS0ZJTEUgXTsgZG8KKwlzbGVlcCAxCitkb25lCitybSAtZiAkTUFSS0ZJTEUKK2VjaG8gImtpbGwgZGVidWdmcyBhYnJ1cHRseSAoc2ltdWxhdGVzIGUyZnNjayBmYWlsdXJlKSAuLi4iID4+ICR0ZXN0X25hbWUubG9nCitraWxsX2RlYnVnZnMKKworCitlY2hvICJlMmZzY2sgKHNob3VsZCBmYWlsIG1tcF9zZXEgPSBFWFQyX01NUF9TRVFfRlNDSykgLi4uIiA+PiAkdGVzdF9uYW1lLmxvZworJEZTQ0sgJEZTQ0tfT1BUICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCisJZWNobyAiZTJmc2NrIHdpdGggTU1QIGFzIEVYVDJfTU1QX1NFUV9GU0NLIHJhbiEiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAxCitmaQorCitlY2hvICJjbGVhciBtbXBfc2VxIHdpdGggdHVuZTJmcyAuLi4iID4+ICR0ZXN0X25hbWUubG9nCiskVFVORTJGUyAtZiAtRSBjbGVhcl9tbXAgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAidHVuZTJmcyBjbGVhcmluZyBFWFQyX01NUF9TRVFfRlNDSyBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAxCitmaQorCitlY2hvICJydW4gZTJmc2NrIGFnYWluIChzaG91bGQgcGFzcyB3aXRoIGNsZWFuIG1tcF9zZXEpIC4uLiIgPj4gJHRlc3RfbmFtZS5sb2cKKyRGU0NLICRGU0NLX09QVCAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJlMmZzY2sgYWZ0ZXIgY2xlYXJpbmcgRVhUMl9NTVBfU0VRX0ZTQ0sgZmFpbGVkIj4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCitlY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXBfZ2FyYmFnZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFkZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjEKQEAgLTAsMCArMSw5IEBACitTdXBlcmJsb2NrIGhhcyBpbnZhbGlkIE1NUCBtYWdpYy4gIEZpeD8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTMvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXBfZ2FyYmFnZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjMwMDAyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wX2dhcmJhZ2UvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS82NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEzLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21tcF9nYXJiYWdlL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXBfZ2FyYmFnZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTBiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9tbXBfZ2FyYmFnZS9uYW1lCkBAIC0wLDAgKzEgQEAKK3JlcGFpciBNTVAgd2hlbiBpdCBpcyBjb3JydXB0ZWQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX21tcF9nYXJiYWdlL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX21tcF9nYXJiYWdlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNjMTJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfbW1wX2dhcmJhZ2Uvc2NyaXB0CkBAIC0wLDAgKzEsMjcgQEAKK0ZTQ0tfT1BUPS15ZgorCitUTVBGSUxFPSR0ZXN0X25hbWUudG1wCis+ICRUTVBGSUxFCisKK3N0YXQgLWYgJFRNUEZJTEUgfCBncmVwIC1xICJUeXBlOiB0bXBmcyIKK2lmIFsgJD8gPSAwIF0gOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCBmb3IgdG1wZnMgKG5vIE9fRElSRUNUKSIKKwlyZXR1cm4gMAorZmkKKworZWNobyAibWFrZSB0aGUgdGVzdCBpbWFnZSAuLi4iID4gJHRlc3RfbmFtZS5sb2cKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLWIgNDA5NiAtTyBtbXAgLUUgbW1wX3VwZGF0ZV9pbnRlcnZhbD0xICRUTVBGSUxFIDEwMCA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJta2UyZnMgLU8gbW1wIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKKyMgY3JlYXRlIGEgY29ycnVwdGVkIGltYWdlCitlY2hvICJtb2RpZnkgdGhlIG1tcCBzZXF1ZW5jZSAuLi4iID4+ICR0ZXN0X25hbWUubG9nCiskREVCVUdGUyAtdyAtUiAic2V0X21tcF92YWx1ZSBtYWdpYyAweDEyMzQ1Njc4IiAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCisKK1NLSVBfR1VOWklQPXRydWUKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZGQ3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjEKQEAgLTAsMCArMSwzOSBAQAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitJbm9kZSAxNSBpcyBpbiB1c2UsIGJ1dCBoYXMgZHRpbWUgc2V0LiAgRml4PyB5ZXMKKworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitFbnRyeSAnLi4nIGluIC9sb3N0K2ZvdW5kICgxMSkgaGFzIGRlbGV0ZWQvdW51c2VkIGlub2RlIDIuICBDbGVhcj8geWVzCisKK0VudHJ5ICcuLicgaW4gL2ZvbyAoMTIpIGhhcyBkZWxldGVkL3VudXNlZCBpbm9kZSAyLiAgQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Jvb3QgaW5vZGUgbm90IGFsbG9jYXRlZC4gIEFsbG9jYXRlPyB5ZXMKKworVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlIDExICguLi4pCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworL2xvc3QrZm91bmQgbm90IGZvdW5kLiAgQ3JlYXRlPyB5ZXMKKworVW5jb25uZWN0ZWQgZGlyZWN0b3J5IGlub2RlIDEyICguLi4pCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitJbm9kZSAxMSByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitVbmF0dGFjaGVkIHplcm8tbGVuZ3RoIGlub2RlIDE1LiAgQ2xlYXI/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTcsIGNvdW50ZWQ9MTYpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDE3LCBjb3VudGVkPTE2KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTYvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ub3Jvb3QvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhNWJjNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX25vcm9vdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE2LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODdlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ub3Jvb3QvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9ub3Jvb3QvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBlYmMyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfbm9yb290L25hbWUKQEAgLTAsMCArMSBAQAorbWlzc2luZyByb290IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb2tncm91cC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX29rZ3JvdXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyOTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29rZ3JvdXAvZXhwZWN0LjEKQEAgLTAsMCArMSw5IEBACitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yMDQ4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjc0LzgxOTMgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9va2dyb3VwL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb2tncm91cC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDg1NmMwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb2tncm91cC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNzQvODE5MyBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29rZ3JvdXAvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9va2dyb3VwL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjY3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9va2dyb3VwL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29rZ3JvdXAvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX29rZ3JvdXAvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE2NmFmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb2tncm91cC9uYW1lCkBAIC0wLDAgKzEgQEAKKzgxOTMgYmxvY2sgbG9uZyBmaWxlc3lzdGVtCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkYzFmOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbi9leHBlY3QuMQpAQCAtMCwwICsxLDE0IEBACitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAxNSAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDc1NSwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTcgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjQ0LCBzaXplPTApCitDbGVhcmluZyBvcnBoYW5lZCBpbm9kZSAxNiAodWlkPTAsIGdpZD0wLCBtb2RlPTA0MDc1NSwgc2l6ZT0xMDI0KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTQgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjQ0LCBzaXplPTY5KQorQ2xlYXJpbmcgb3JwaGFuZWQgaW5vZGUgMTMgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wNDA3NTUsIHNpemU9MTAyNCkKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzAzLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5YzkzNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMzAzLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkYTQzNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWYzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW4vbmFtZQpAQCAtMCwwICsxIEBACitjbGVhcmluZyBvcnBoYW4gaW5vZGVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2RvdGRvdF9mdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTEzNzNmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2RvdGRvdF9mdC9leHBlY3QuMQpAQCAtMCwwICsxLDU2IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1NwZWNpYWwgKGRldmljZS9zb2NrZXQvZmlmbykgaW5vZGUgMTIgaGFzIG5vbi16ZXJvIHNpemUuICBGaXg/IHllcworCitJbm9kZSAxMiwgaV9ibG9ja3MgaXMgMiwgc2hvdWxkIGJlIDAuICBGaXg/IHllcworCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK0VudHJ5ICdkaXInIGluIC8gKDIpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAyLCBzaG91bGQgYmUgNikuCitGaXg/IHllcworCitFbnRyeSAnLi4nIGluIDwxMj4vPDEzPiAoMTMpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAyLCBzaG91bGQgYmUgNikuCitGaXg/IHllcworCitFbnRyeSAnLi4nIGluIDwxMj4vPDE0PiAoMTQpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAyLCBzaG91bGQgYmUgNikuCitGaXg/IHllcworCitFbnRyeSAnLi4nIGluIDwxMj4vPDE1PiAoMTUpIGhhcyBhbiBpbmNvcnJlY3QgZmlsZXR5cGUgKHdhcyAyLCBzaG91bGQgYmUgNikuCitGaXg/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxMyAoPDEyPi88MTM+KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxNCAoPDEyPi88MTQ+KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxNSAoPDEyPi88MTU+KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMiByZWYgY291bnQgaXMgNCwgc2hvdWxkIGJlIDMuICBGaXg/IHllcworCitJbm9kZSAxMiByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitJbm9kZSAxMyByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxNCByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitJbm9kZSAxNSByZWYgY291bnQgaXMgMywgc2hvdWxkIGJlIDIuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0Jsb2NrIGJpdG1hcCBkaWZmZXJlbmNlczogIC0yMworRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MywgY291bnRlZD03NCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoNzMsIGNvdW50ZWQ9NzQpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg2LCBjb3VudGVkPTUpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI2LzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjhlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2RvdGRvdF9mdC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjkxYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2RvdGRvdF9mdC9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZG90ZG90X2Z0L25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2MmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9kb3Rkb3RfZnQvbmFtZQpAQCAtMCwwICsxIEBACitmaWxldHlwZSBvZiAuLiBpbiBvcnBoYW5lZCBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFhYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSwxMCBAQAorVHJ1bmNhdGluZyBvcnBoYW5lZCBpbm9kZSAxMiAodWlkPTAsIGdpZD0wLCBtb2RlPTAxMDA2NDQsIHNpemU9MCkKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzE2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU1ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2V4dGVudHNfaW5vZGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1N2ZlZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9leHRlbnRzX2lub2RlL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDhlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5fZXh0ZW50c19pbm9kZS9uYW1lCkBAIC0wLDAgKzEgQEAKK3RydW5jYXRpbmcgYW4gb3JwaGFuZWQgZXh0ZW50LW1hcHBlZCBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNGE2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvZXhwZWN0LjEKQEAgLTAsMCArMSwzIEBACit0ZXN0X2ZpbGVzeXM6IFRydW5jYXRpbmcgb3JwaGFuZWQgaW5vZGUgMTIgKHVpZD0wLCBnaWQ9MCwgbW9kZT0wMTAwNjQ0LCBzaXplPTApCit0ZXN0X2ZpbGVzeXM6IGNsZWFuLCAxMi8xNiBmaWxlcywgMjEvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTVkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vcnBoYW5faW5kaXJlY3RfaW5vZGUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIzOTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjY2IzMQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9uYW1lCkBAIC0wLDAgKzEgQEAKK3RydW5jYXRpbmcgYW4gb3JwaGFuZWQgaW5vZGUgaW4gcHJlZW4gbW9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfb3JwaGFuX2luZGlyZWN0X2lub2RlL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzYjkzYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX29ycGhhbl9pbmRpcmVjdF9pbm9kZS9zY3JpcHQKQEAgLTAsMCArMSwyIEBACitGU0NLX09QVD0tcAorLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3ZlcmZzYmxrcy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI5M2YwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3ZlcmZzYmxrcy9leHBlY3QuMQpAQCAtMCwwICsxLDE5IEBACitleHQyZnNfY2hlY2tfZGVzYzogQ29ycnVwdCBncm91cCBkZXNjcmlwdG9yOiBiYWQgYmxvY2sgZm9yIGlub2RlIGJpdG1hcAorRmlsZXN5c3RlbSBkaWQgbm90IGhhdmUgYSBVVUlEOyBnZW5lcmF0aW5nIG9uZS4KKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitHcm91cCAwJ3MgaW5vZGUgYml0bWFwIGF0IDMgY29uZmxpY3RzIHdpdGggc29tZSBvdGhlciBmcyBibG9jay4KK1JlbG9jYXRlPyB5ZXMKKworUmVsb2NhdGluZyBncm91cCAwJ3MgaW5vZGUgYml0bWFwIGZyb20gMyB0byA0Li4uCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0lub2RlIGJpdG1hcCBkaWZmZXJlbmNlczogIC0oMTItLTIxKQorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIyLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX292ZXJmc2Jsa3MvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjFmODcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3ZlcmZzYmxrcy9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI2YjJlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfb3ZlcmZzYmxrcy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9vdmVyZnNibGtzL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiNjA0MAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX292ZXJmc2Jsa3MvbmFtZQpAQCAtMCwwICsxIEBACitvdmVybGFwcGluZyBpbm9kZSBhbmQgYmxvY2sgYml0bWFwcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcHJlZW4vZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDIwNTcyCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcHJlZW4vZXhwZWN0LjEKQEAgLTAsMCArMSwxMiBAQAordGVzdF9maWxlc3lzOiBOb3RlOiBpZiBzZXZlcmFsIGlub2RlIG9yIGJsb2NrIGJpdG1hcCBibG9ja3Mgb3IgcGFydAorb2YgdGhlIGlub2RlIHRhYmxlIHJlcXVpcmUgcmVsb2NhdGlvbiwgeW91IG1heSB3aXNoIHRvIHRyeQorcnVubmluZyBlMmZzY2sgd2l0aCB0aGUgJy1iIDgxOTMnIG9wdGlvbiBmaXJzdC4gIFRoZSBwcm9ibGVtCittYXkgbGllIG9ubHkgd2l0aCB0aGUgcHJpbWFyeSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kCit0aGUgYmFja3VwIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzIG1heSBiZSBPSy4KKwordGVzdF9maWxlc3lzOiBCbG9jayBiaXRtYXAgZm9yIGdyb3VwIDAgaXMgbm90IGluIGdyb3VwLiAgKGJsb2NrIDApCisKKwordGVzdF9maWxlc3lzOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLgorCShpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpCitFeGl0IHN0YXR1cyBpcyA0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX3ByZWVuL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjZjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9leHBlY3QuMgpAQCAtMCwwICsxLDMwIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg4MDQyLCBjb3VudGVkPTc2MTQpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMxICgxNzAsIGNvdW50ZWQ9MTY5KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICg4MjEyLCBjb3VudGVkPTc3ODMpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxMDUzLCBjb3VudGVkPTEwNTIpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMxICgxMDY0LCBjb3VudGVkPTEwNjMpLgorRml4PyB5ZXMKKworRGlyZWN0b3JpZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMxICgwLCBjb3VudGVkPTEpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDIxMTcsIGNvdW50ZWQ9MjExNSkuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEzLzIxMjggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA3MTcvODUwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3ByZWVuL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcHJlZW4vaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhN2NhMAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3ByZWVuL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3ByZWVuL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTNhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9uYW1lCkBAIC0wLDAgKzEgQEAKK3ByZWVuIHNob3VsZG4ndCBkZXN0cm95IGJhY2t1cCBzdXBlcmJsb2NrcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcHJlZW4vc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcHJlZW4vc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWQxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9wcmVlbi9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitGU0NLX09QVD0tcGYKK1NFQ09ORF9GU0NLX09QVD0teWZiODE5MworCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3JlY25lY3RfYmFkL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhODFlNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlY25lY3RfYmFkL2V4cGVjdC4xCkBAIC0wLDAgKzEsMzggQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitpX2ZhZGRyIGZvciBpbm9kZSAxNSAoL3Rlc3QvcXV1eCkgaXMgMjMsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitpX2Rpcl9hY2wgZm9yIGlub2RlIDE1ICgvdGVzdC9xdXV4KSBpcyAxMiwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK2lfZmlsZV9hY2wgZm9yIGlub2RlIDEzICgvdGVzdC8/Pz8pIGlzIDEyLCBzaG91bGQgYmUgemVyby4KK0NsZWFyPyB5ZXMKKworaV9mYWRkciBmb3IgaW5vZGUgMTMgKC90ZXN0Lz8/PykgaXMgMTIsIHNob3VsZCBiZSB6ZXJvLgorQ2xlYXI/IHllcworCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1VuY29ubmVjdGVkIGRpcmVjdG9yeSBpbm9kZSAxMyAoL3Rlc3QvPz8/KQorQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworSW5vZGUgMTMgcmVmIGNvdW50IGlzIDQsIHNob3VsZCBiZSAzLiAgRml4PyB5ZXMKKworaV9maWxlX2FjbCBmb3IgaW5vZGUgMjggKC4uLikgaXMgNDI5NDk2NzI5NSwgc2hvdWxkIGJlIHplcm8uCitDbGVhcj8geWVzCisKK0lub2RlIDI4ICguLi4pIGhhcyBpbnZhbGlkIG1vZGUgKDAxNzc3NzcpLgorQ2xlYXI/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTgsIGNvdW50ZWQ9MTcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDE4LCBjb3VudGVkPTE3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTUvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNi8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNuZWN0X2JhZC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlY25lY3RfYmFkL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjhlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNuZWN0X2JhZC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE1LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjYvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNuZWN0X2JhZC9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RjZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjbmVjdF9iYWQvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlY25lY3RfYmFkL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYzhkOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlY25lY3RfYmFkL25hbWUKQEAgLTAsMCArMSBAQAorUmVjb25uZWN0aW5nIGJhZCBpbm9kZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMWQ4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjEKQEAgLTAsMCArMSwyNCBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitVbmF0dGFjaGVkIGlub2RlIDEyCitDb25uZWN0IHRvIC9sb3N0K2ZvdW5kPyB5ZXMKKworSW5vZGUgMTIgcmVmIGNvdW50IGlzIDIsIHNob3VsZCBiZSAxLiAgRml4PyB5ZXMKKworVW5hdHRhY2hlZCBpbm9kZSAxMworQ29ubmVjdCB0byAvbG9zdCtmb3VuZD8geWVzCisKK0lub2RlIDEzIHJlZiBjb3VudCBpcyAyLCBzaG91bGQgYmUgMS4gIEZpeD8geWVzCisKK1VuYXR0YWNoZWQgaW5vZGUgMTQKK0Nvbm5lY3QgdG8gL2xvc3QrZm91bmQ/IHllcworCitJbm9kZSAxNCByZWYgY291bnQgaXMgMiwgc2hvdWxkIGJlIDEuICBGaXg/IHllcworCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTQvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyNS8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNvbm5lY3QvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0OGVmZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlY29ubmVjdC9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE0LzMyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YjkyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNvbm5lY3QvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWNvbm5lY3QvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDljMjNmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVjb25uZWN0L25hbWUKQEAgLTAsMCArMSBAQAorc2ltcGxlIGRpc2Nvbm5lY3RlZCBmaWxlIGlub2RlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVoYXNoX2Rpci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDc2NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVoYXNoX2Rpci9leHBlY3QuMQpAQCAtMCwwICsxLDEwIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDNBOiBPcHRpbWl6aW5nIGRpcmVjdG9yaWVzCitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMDUvMjA0OCBmaWxlcyAoMi45JSBub24tY29udGlndW91cyksIDMzNi81MTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVoYXNoX2Rpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzc4ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVoYXNoX2Rpci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEwNS8yMDQ4IGZpbGVzICgzLjglIG5vbi1jb250aWd1b3VzKSwgMzM2LzUxMiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3JlaGFzaF9kaXIvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMzZkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL2ltYWdlLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3JlaGFzaF9kaXIvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlaGFzaF9kaXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2E4NjlhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVoYXNoX2Rpci9uYW1lCkBAIC0wLDAgKzEgQEAKK29wdGltaXplIGh0cmVlIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX3JlaGFzaF9kaXIvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGNiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9yZWhhc2hfZGlyL3NjcmlwdApAQCAtMCwwICsxLDMgQEAKK0ZTQ0tfT1BUPS15ZkQKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZXNpemVfaW5vZGUvZXhwZWN0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVzaXplX2lub2RlL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmZmZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVzaXplX2lub2RlL2V4cGVjdApAQCAtMCwwICsxLDE3MCBAQAorbWtlMmZzIC1GIC1PIHJlc2l6ZV9pbm9kZSAtbyBMaW51eCAtYiAxMDI0IC1nIDEwMjQgdGVzdC5pbWcgMTYzODQKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0xMDI0IChsb2c9MCkKK0ZyYWdtZW50IHNpemU9MTAyNCAobG9nPTApCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworNDA5NiBpbm9kZXMsIDE2Mzg0IGJsb2NrcworODE5IGJsb2NrcyAoNS4wMCUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlcgorRmlyc3QgZGF0YSBibG9jaz0xCitNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPTg0MjEzNzYKKzE2IGJsb2NrIGdyb3VwcworMTAyNCBibG9ja3MgcGVyIGdyb3VwLCAxMDI0IGZyYWdtZW50cyBwZXIgZ3JvdXAKKzI1NiBpbm9kZXMgcGVyIGdyb3VwCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJMTAyNSwgMzA3MywgNTEyMSwgNzE2OSwgOTIxNworCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgICAgCAgICAhkb25lCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKK2RlYnVnZnMgLVIgJydzZXRfaW5vZGVfZmllbGQgPDc+IGJsb2NrWzJdIDQyJycgLXcgdGVzdC5pbWcKK0V4aXQgc3RhdHVzIGlzIDAKK1Jlc2l6ZSBpbm9kZSBub3QgdmFsaWQuICBSZWNyZWF0ZT8geWVzCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDcxNywgY291bnRlZD03MTgpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDE0Mjc2LCBjb3VudGVkPTE0Mjc3KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxMDcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCitkZWJ1Z2ZzIC1SICcnY2xyaSA8Nz4nJyAtdyB0ZXN0LmltZworRXhpdCBzdGF0dXMgaXMgMAorUmVzaXplIGlub2RlIG5vdCB2YWxpZC4gIFJlY3JlYXRlPyB5ZXMKKworUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoNzE3LCBjb3VudGVkPTcxOCkuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTQyNzYsIGNvdW50ZWQ9MTQyNzcpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKK2RlYnVnZnMgLVIgJydzZXRfaW5vZGVfZmllbGQgPDc+IGJtYXBbNTI0XSA1NycnIC13IHRlc3QuaW1nCitFeGl0IHN0YXR1cyBpcyAwCitSZXNpemUgaW5vZGUgbm90IHZhbGlkLiAgUmVjcmVhdGU/IHllcworCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MTcsIGNvdW50ZWQ9NzE4KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nICgxNDI3NiwgY291bnRlZD0xNDI3NykuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMTA3LzE2Mzg0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxMDcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorZGVidWdmcyAtUiAnJ3NldF9zdXBlcl92YWx1ZSByZXNlcnZlZF9nZHRfYmxvY2tzIDE1Njc5JycgLXcgdGVzdC5pbWcKK0V4aXQgc3RhdHVzIGlzIDAKK2V4dDJmc19jaGVja19kZXNjOiBDb3JydXB0IGdyb3VwIGRlc2NyaXB0b3I6IGJhZCBibG9jayBmb3IgYmxvY2sgYml0bWFwCisuLi9lMmZzY2svZTJmc2NrOiBHcm91cCBkZXNjcmlwdG9ycyBsb29rIGJhZC4uLiB0cnlpbmcgYmFja3VwIGJsb2Nrcy4uLgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxMDcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorZGVidWdmcyAtUiAnJ3NldF9zdXBlcl92YWx1ZSByZXNlcnZlZF9nZHRfYmxvY2tzIDMyJycgLXcgdGVzdC5pbWcKK0V4aXQgc3RhdHVzIGlzIDAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitCbG9jayBiaXRtYXAgZGlmZmVyZW5jZXM6ICAtKDM1LS0yNTgpIC0oMTA1OS0tMTI4MikgLSgzMTA3LS0zMzMwKSAtKDUxNTUtLTUzNzgpIC0oNzIwMy0tNzQyNikgLSg5MjUxLS05NDc0KQorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3MTgsIGNvdW50ZWQ9OTQyKS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjMSAoNzMyLCBjb3VudGVkPTk1NikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzMgKDczMiwgY291bnRlZD05NTYpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICM1ICg3MzIsIGNvdW50ZWQ9OTU2KS4KK0ZpeD8geWVzCisKK0ZyZWUgYmxvY2tzIGNvdW50IHdyb25nIGZvciBncm91cCAjNyAoNzMyLCBjb3VudGVkPTk1NikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzkgKDczMiwgY291bnRlZD05NTYpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDE0Mjc3LCBjb3VudGVkPTE1NjIxKS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTEvNDA5NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDc2My8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzQwOTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA3NjMvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9yZXNpemVfaW5vZGUvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVzaXplX2lub2RlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTA4NzFiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfcmVzaXplX2lub2RlL3NjcmlwdApAQCAtMCwwICsxLDE0MyBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwordGVzdF9kZXNjcmlwdGlvbj0iZTJmc2NrIHdpdGggcmVzaXplX2lub2RlIgorRlNDS19PUFQ9LXlmCitPVVQ9JHRlc3RfbmFtZS5sb2cKK2lmIFsgLWYgJHRlc3RfZGlyL2V4cGVjdC5neiBdOyB0aGVuCisJRVhQPSR0ZXN0X25hbWUudG1wCisJZ3VuemlwIDwgJHRlc3RfZGlyL2V4cGVjdC5neiA+ICRFWFAxCitlbHNlCisJRVhQPSR0ZXN0X2Rpci9leHBlY3QKK2ZpCisKK2NwIC9kZXYvbnVsbCAkT1VUCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0IHRlc3QuaW1nIDE2Mzg0ID4gJE9VVAorJE1LRTJGUyAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0ICRUTVBGSUxFIDE2Mzg0IDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gJE9VVAorCitlY2hvICIgIiA+PiAkT1VUCitlY2hvICJkZWJ1Z2ZzIC1SICcnc2V0X2lub2RlX2ZpZWxkIDw3PiBibG9ja1syXSA0MicnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic2V0X2lub2RlX2ZpZWxkIDw3PiBibG9ja1syXSA0MiIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiAkT1VUCisKK2VjaG8gIiAiID4+ICRPVVQKK2VjaG8gImRlYnVnZnMgLVIgJydjbHJpIDw3PicnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAiY2xyaSA8Nz4iIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gJE9VVAorCitlY2hvICIgIiA+PiAkT1VUCitlY2hvICJkZWJ1Z2ZzIC1SICcnc2V0X2lub2RlX2ZpZWxkIDw3PiBibWFwWzUyNF0gNTcnJyAtdyB0ZXN0LmltZyIgPiAkT1VULm5ldworJERFQlVHRlMgLVIgInNldF9pbm9kZV9maWVsZCA8Nz4gYm1hcFs1MjRdIDU3IiAtdyAkVE1QRklMRSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID4+ICRPVVQKKworZWNobyAiICIgPj4gJE9VVAorZWNobyAiZGVidWdmcyAtUiAnJ3NldF9zdXBlcl92YWx1ZSByZXNlcnZlZF9nZHRfYmxvY2tzIDE1Njc5JycgLXcgdGVzdC5pbWciID4gJE9VVC5uZXcKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAxNTY3OSIgLXcgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiAkT1VUCisKK2VjaG8gIiAiID4+ICRPVVQKK2VjaG8gImRlYnVnZnMgLVIgJydzZXRfc3VwZXJfdmFsdWUgcmVzZXJ2ZWRfZ2R0X2Jsb2NrcyAzMicnIC13IHRlc3QuaW1nIiA+ICRPVVQubmV3CiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIHJlc2VydmVkX2dkdF9ibG9ja3MgMzIiIC13ICRUTVBGSUxFID4+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAkT1VULm5ldyA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzPSQ/CisKK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKKwlybSAtZiB0bXBfZXhwZWN0CitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQCisKK2Vsc2UgI2lmIHRlc3QgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3NhbHZhZ2VfZGlyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4NjM4NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NhbHZhZ2VfZGlyL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTkgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitEaXJlY3RvcnkgaW5vZGUgMTMsIGJsb2NrICMwLCBvZmZzZXQgNDg6IGRpcmVjdG9yeSBjb3JydXB0ZWQKK1NhbHZhZ2U/IHllcworCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMxLCBvZmZzZXQgMDogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK1NldHRpbmcgZmlsZXR5cGUgZm9yIGVudHJ5ICdjJyBpbiAvdGVzdCAoMTIpIHRvIDEuCitEaXJlY3RvcnkgaW5vZGUgMTIsIGJsb2NrICMxLCBvZmZzZXQgMTAxNjogZGlyZWN0b3J5IGNvcnJ1cHRlZAorU2FsdmFnZT8geWVzCisKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTkvNjQgZmlsZXMgKDEwLjUlIG5vbi1jb250aWd1b3VzKSwgMzAvMTAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zYWx2YWdlX2Rpci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc3Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxOS82NCBmaWxlcyAoMTAuNSUgbm9uLWNvbnRpZ3VvdXMpLCAzMC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9zYWx2YWdlX2Rpci9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3NhbHZhZ2VfZGlyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWRkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zYWx2YWdlX2Rpci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9zYWx2YWdlX2Rpci9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZmNDNhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc2FsdmFnZV9kaXIvbmFtZQpAQCAtMCwwICsxIEBACitzYWx2YWdlIGNvcnJ1cHRlZCBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmY2QzYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzk2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc2VsaW51eC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmY2QzYgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIxLzk2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc2VsaW51eC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhNjdhMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NlbGludXgvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc2VsaW51eC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc2VsaW51eC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODc1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zZWxpbnV4L25hbWUKQEAgLTAsMCArMSBAQAorU0UgTGludXggZ2VuZXJhdGVkIHN5bWxpbmtzIHdpdGggRUEgZGF0YQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc3BlY2lhbF9lYS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwNzZmZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvZXhwZWN0LjEKQEAgLTAsMCArMSwxMSBAQAorQmFja2luZyB1cCBqb3VybmFsIGlub2RlIGJsb2NrIGluZm9ybWF0aW9uLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNy8xMDI0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTE4MC80MDk2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc3BlY2lhbF9lYS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0N2NiNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc3BlY2lhbF9lYS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3BlY2lhbF9lYS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZmIyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zcGVjaWFsX2VhL25hbWUKQEAgLTAsMCArMSBAQAorU3BlY2lhbCBmaWxlcyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3BlY2lhbF9lYS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMmI5YwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3NwZWNpYWxfZWEvc2NyaXB0CkBAIC0wLDAgKzEsMiBAQAorT05FX1BBU1NfT05MWT0idHJ1ZSIKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIxNGJkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvZXhwZWN0LjEKQEAgLTAsMCArMSwxOSBAQAordGVzdF9maWxlc3lzIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMsIGNoZWNrIGZvcmNlZC4KK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDIwMCwgY291bnRlZD04MCkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDI1MCwgY291bnRlZD01KS4KK0ZpeD8geWVzCisKK0RpcmVjdG9yaWVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTUwLCBjb3VudGVkPTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8xNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZmY2MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3N1bW1hcnlfY291bnRzL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjdlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl9zdW1tYXJ5X2NvdW50cy9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQxMDIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvbmFtZQpAQCAtMCwwICsxIEBACitpbmNvcnJlY3QgaW5vZGUvYmxvY2sgZnJlZSBjb3VudHMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3N1bW1hcnlfY291bnRzL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX3N1bW1hcnlfY291bnRzL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQyNWVmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2Zfc3VtbWFyeV9jb3VudHMvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorRlNDS19PUFQ9LXkKK1NFQ09ORF9GU0NLX09QVD0teWYKKworLiAkY21kX2Rpci9ydW5fZTJmc2NrCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMGNhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9leHBlY3QuMQpAQCAtMCwwICsxLDEyIEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK0lub2RlIDEyIGlzIHRvbyBiaWcuICBUcnVuY2F0ZT8geWVzCisKK0Jsb2NrICM0Mjk0OTY3MjgxICg5MCkgY2F1c2VzIGRpcmVjdG9yeSB0byBiZSB0b28gYmlnLiAgQ0xFQVJFRC4KK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMi81NiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDI4LzQwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNTY0NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvNTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyOC80MDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3Rvb2JpZ19leHRlbnRfZGlyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmY2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl90b29iaWdfZXh0ZW50X2Rpci9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1M2FkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdG9vYmlnX2V4dGVudF9kaXIvbmFtZQpAQCAtMCwwICsxIEBACitkaXJlY3Rvcnkgd2l0aCBhIHZlcnkgbGFyZ2UgbGJsayBpbiBleHRlbnQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjE1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4xCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTAyNCBmaWxlcyAoMTYuNyUgbm9uLWNvbnRpZ3VvdXMpLCAxMjI3LzQwOTYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjIxNTljCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzEwMjQgZmlsZXMgKDE2LjclIG5vbi1jb250aWd1b3VzKSwgMTIyNy80MDk2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2OTE1OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMGM2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mL25hbWUKQEAgLTAsMCArMSBAQAorZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIGlfc2l6ZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjgyNDhlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvZXhwZWN0LjEKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMi8xNiBmaWxlcyAoOC4zJSBub24tY29udGlndW91cyksIDcwLzEwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4MjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTIvMTYgZmlsZXMgKDguMyUgbm9uLWNvbnRpZ3VvdXMpLCA3MC8xMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9leHRfcGFzdF9lb2YyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzllNDkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfZXh0X3Bhc3RfZW9mMi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJhMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2V4dF9wYXN0X2VvZjIvbmFtZQpAQCAtMCwwICsxIEBACitmYWxsb2NhdGVkIGV4dGVudHMgYWZ0ZXIgbm9uemVybyBpX3NpemUgYW5kIHRvdGFsIGV4dGVudHMgPiA0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4YmQyOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9leHBlY3QuMQpAQCAtMCwwICsxLDkgQEAKK0xhc3QgZ3JvdXAgYmxvY2sgYml0bWFwIHVuaW5pdGlhbGl6ZWQuICBGaXg/IHllcworCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8zMiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDEwNS8xMDAwMCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTVlNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L2V4cGVjdC4yCkBAIC0wLDAgKzEsNyBAQAorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMDUvMTAwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTNlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bmluaXRfbGFzdF91bmluaXQvbmFtZQpAQCAtMCwwICsxLDIgQEAKK2xhc3QgZ3JvdXAgaGFzIEJMT0NLX1VOSU5JVCBzZXQKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW5pbml0X2xhc3RfdW5pbml0L3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNGYzYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3VuaW5pdF9sYXN0X3VuaW5pdC9zY3JpcHQKQEAgLTAsMCArMSwyNiBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworU0tJUF9HVU5aSVA9InRydWUiCisKK3RvdWNoICRUTVBGSUxFCiskTUtFMkZTIC1OIDMyIC1GIC1vIExpbnV4IC1PIHVuaW5pdF9iZyAtYiAxMDI0ICRUTVBGSUxFIDEwMDAwID4gL2Rldi9udWxsIDI+JjEgCiskREVCVUdGUyAtdyAkVE1QRklMRSA8PCBFT0YgPiAvZGV2L251bGwgMj4mMQorc2V0X2N1cnJlbnRfdGltZSAyMDA3MDQxMDIxMDAKK3NldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMAorc2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsCitzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAKK3NldF9iZyAxIGZsYWdzIDB4Nworc2V0X2JnIDEgY2hlY2tzdW0gY2FsYworcQorRU9GCisKK0UyRlNDS19USU1FPTIwMDcwNDEwMjEwMAorZXhwb3J0IEUyRlNDS19USU1FCisKKy4gJGNtZF9kaXIvcnVuX2UyZnNjaworCit1bnNldCBFMkZTQ0tfVElNRQorCitlbHNlICNpZiB0ZXN0IC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1ODhkNwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMQpAQCAtMCwwICsxLDExIEBACitBZGRpbmcgZGlyaGFzaCBoaW50IHRvIGZpbGVzeXN0ZW0uCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDEyLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMjk0LzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjIgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0Y2MyOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3Vuc29ydGVkX0VBcy9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMjk0LzIwNDggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvaW1hZ2UuZ3ogYi9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJhYjUwMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3Vuc29ydGVkX0VBcy9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvbmFtZSBiL2UyZnNwcm9ncy90ZXN0cy9mX3Vuc29ydGVkX0VBcy9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWM5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bnNvcnRlZF9FQXMvbmFtZQpAQCAtMCwwICsxIEBACit1bnNvcnRlZCBFQXMgaW4gaW5vZGUgc2hvdWxkIG5vdCBiZSBkZWxldGVkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGRhOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9leHBlY3QuMQpAQCAtMCwwICsxLDI4IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorRW50cnkgJ2ZvbycgaW4gLyAoMikgcmVmZXJlbmNlcyBpbm9kZSA2NSBmb3VuZCBpbiBncm91cCAxJ3MgdW51c2VkIGlub2RlcyBhcmVhLgorRml4PyB5ZXMKKworRW50cnkgJzEnIGluIC8gKDIpIHJlZmVyZW5jZXMgaW5vZGUgMTIgZm91bmQgaW4gZ3JvdXAgMCdzIHVudXNlZCBpbm9kZXMgYXJlYS4KK0ZpeD8geWVzCisKK1Jlc3RhcnRpbmcgZTJmc2NrIGZyb20gdGhlIGJlZ2lubmluZy4uLgorT25lIG9yIG1vcmUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvciBjaGVja3N1bXMgYXJlIGludmFsaWQuICBGaXg/IHllcworCitHcm91cCBkZXNjcmlwdG9yIDAgY2hlY2tzdW0gaXMgMHgyODlkLCBzaG91bGQgYmUgMHg3ODhhLiAgRklYRUQuCitHcm91cCBkZXNjcmlwdG9yIDEgY2hlY2tzdW0gaXMgMHhmYWFiLCBzaG91bGQgYmUgMHgzYTlhLiAgRklYRUQuCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg1MywgY291bnRlZD01MSkuCitGaXg/IHllcworCitGcmVlIGlub2RlcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzEgKDY0LCBjb3VudGVkPTU4KS4KK0ZpeD8geWVzCisKKwordGVzdF9maWxlc3lzOiAqKioqKiBGSUxFIFNZU1RFTSBXQVMgTU9ESUZJRUQgKioqKioKK3Rlc3RfZmlsZXN5czogMTkvMTI4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTY1LzEwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl91bnVzZWRfaXRhYmxlL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzlkMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE5LzEyOCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDE2NS8xMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3VudXNlZF9pdGFibGUvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5M2U5OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3VudXNlZF9pdGFibGUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdW51c2VkX2l0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjkxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl91bnVzZWRfaXRhYmxlL25hbWUKQEAgLTAsMCArMSBAQAorRG9uJ3QgbW92ZSBmaWxlcyB0byBsb3N0K2ZvdW5kIGZvciBiZ191bnVzZWRfaXRhYmxlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDZkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDIyLzIwNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMDcyLzgxOTIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MGY3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl92YWxpZF9lYV9pbl9pbm9kZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjAyODc3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvbmFtZQpAQCAtMCwwICsxIEBACit2YWxpZCBlYS1pbi1pbm9kZSBleGFtcGxhcnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX3ZhbGlkX2VhX2luX2lub2RlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyYjljCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfdmFsaWRfZWFfaW5faW5vZGUvc2NyaXB0CkBAIC0wLDAgKzEsMiBAQAorT05FX1BBU1NfT05MWT0idHJ1ZSIKKy4gJGNtZF9kaXIvcnVuX2UyZnNjawpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwNzc2NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvZXhwZWN0LjEKQEAgLTAsMCArMSwyMyBAQAorZXh0MmZzX2NoZWNrX2Rlc2M6IENvcnJ1cHQgZ3JvdXAgZGVzY3JpcHRvcjogYmFkIGJsb2NrIGZvciBibG9jayBiaXRtYXAKKy4uL2UyZnNjay9lMmZzY2s6IEdyb3VwIGRlc2NyaXB0b3JzIGxvb2sgYmFkLi4uIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorRnJlZSBibG9ja3MgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICg3OTg3LCBjb3VudGVkPTc5ODIpLgorRml4PyB5ZXMKKworRnJlZSBibG9ja3MgY291bnQgd3JvbmcgKDExNjAyLCBjb3VudGVkPTExNTk3KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nIGZvciBncm91cCAjMCAoMTQ5MywgY291bnRlZD0xNDg4KS4KK0ZpeD8geWVzCisKK0ZyZWUgaW5vZGVzIGNvdW50IHdyb25nICgyOTk3LCBjb3VudGVkPTI5OTIpLgorRml4PyB5ZXMKKworCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxNi8zMDA4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDAzLzEyMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19ncm91cC9leHBlY3QuMiBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvZXhwZWN0LjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzM2FlZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxNi8zMDA4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDAzLzEyMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19ncm91cC9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1NDkzYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fZ3JvdXAvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19ncm91cC9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19ncm91cC9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjNiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX2dyb3VwL25hbWUKQEAgLTAsMCArMSBAQAorZmFsbGJhY2sgZm9yIGRhbWFnZWQgZ3JvdXAgZGVzY3JpcHRvcnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9faW5vZGVfc2l6ZS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGJkN2RhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTEgQEAKK2V4dDJmc19vcGVuMjogVGhlIGV4dDIgc3VwZXJibG9jayBpcyBjb3JydXB0CisuLi9lMmZzY2svZTJmc2NrOiBTdXBlcmJsb2NrIGludmFsaWQsIHRyeWluZyBiYWNrdXAgYmxvY2tzLi4uCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgorCit0ZXN0X2ZpbGVzeXM6ICoqKioqIEZJTEUgU1lTVEVNIFdBUyBNT0RJRklFRCAqKioqKgordGVzdF9maWxlc3lzOiAxMS8yNTEyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDE1LzEwMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2V4cGVjdC4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTQ4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX2lub2RlX3NpemUvZXhwZWN0LjIKQEAgLTAsMCArMSw3IEBACitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8yNTEyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDE1LzEwMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTAzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX2lub2RlX3NpemUvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX2lub2RlX3NpemUvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTg4ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19pbm9kZV9zaXplL25hbWUKQEAgLTAsMCArMSBAQAorc3VwZXJibG9jayB3aXRoIGEgemVybyBpbm9kZSBzaXplCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI5NTRkCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9leHBlY3QuMQpAQCAtMCwwICsxLDIzIEBACitleHQyZnNfb3BlbjI6IEJhZCBtYWdpYyBudW1iZXIgaW4gc3VwZXItYmxvY2sKKy4uL2UyZnNjay9lMmZzY2s6IFN1cGVyYmxvY2sgaW52YWxpZCwgdHJ5aW5nIGJhY2t1cCBibG9ja3MuLi4KK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyBmb3IgZ3JvdXAgIzAgKDc5ODcsIGNvdW50ZWQ9Nzk4MikuCitGaXg/IHllcworCitGcmVlIGJsb2NrcyBjb3VudCB3cm9uZyAoMTE2MDIsIGNvdW50ZWQ9MTE1OTcpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgZm9yIGdyb3VwICMwICgxNDkzLCBjb3VudGVkPTE0ODgpLgorRml4PyB5ZXMKKworRnJlZSBpbm9kZXMgY291bnQgd3JvbmcgKDI5OTcsIGNvdW50ZWQ9Mjk5MikuCitGaXg/IHllcworCisKK3Rlc3RfZmlsZXN5czogKioqKiogRklMRSBTWVNURU0gV0FTIE1PRElGSUVEICoqKioqCit0ZXN0X2ZpbGVzeXM6IDE2LzMwMDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA0MDMvMTIwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAxCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3N1cGVyL2V4cGVjdC4yIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9leHBlY3QuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMzYWVmCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9leHBlY3QuMgpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDE2LzMwMDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCA0MDMvMTIwMDAgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3N1cGVyL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWE5MTQwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb19zdXBlci9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3N1cGVyL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3N1cGVyL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5OTk4NAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9fc3VwZXIvbmFtZQpAQCAtMCwwICsxIEBACitmYWxsYmFjayBmb3IgZGFtYWdlZCBzdXBlcmJsb2NrCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3hhdHRyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb194YXR0ci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzMzYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb194YXR0ci9leHBlY3QuMQpAQCAtMCwwICsxLDcgQEAKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDEyLzI0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjUvMjAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb194YXR0ci9pbWFnZS5neiBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9feGF0dHIvaW1hZ2UuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNTU1MgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9feGF0dHIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb194YXR0ci9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL2ZfemVyb194YXR0ci9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYWFiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3hhdHRyL25hbWUKQEAgLTAsMCArMSBAQAoremVybyBsZW5ndGggZXh0ZW5kZWQgYXR0cmlidXRlIGluIGluLWlub2RlIHhhdHRyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3hhdHRyL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9mX3plcm9feGF0dHIvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjJiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvZl96ZXJvX3hhdHRyL3NjcmlwdApAQCAtMCwwICsxLDIgQEAKK09ORV9QQVNTX09OTFk9InRydWUiCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9maWx0ZXIuc2VkIGIvZTJmc3Byb2dzL3Rlc3RzL2ZpbHRlci5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiOTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9maWx0ZXIuc2VkCkBAIC0wLDAgKzEsMTkgQEAKKy9eW2RiZ3VtcGUyZnNja3JzaXpdKiBbMS05XVwuWzAtOV0qWy4tXVteIF0qIChbMC05XSotW0EtWmEtel0qLVswLTldKikvZAorcy9cXDAxNS8vZworL2F1dG9tYXRpY2FsbHkgY2hlY2tlZC9kCisvXkRpcmVjdG9yeSBIYXNoIFNlZWQ6L2QKKy9EaXNjYXJkaW5nIGRldmljZSBibG9ja3MvZAorL15GaWxlc3lzdGVtIGNyZWF0ZWQ6L2QKKy9eRmlsZXN5c3RlbSBmbGFnczovZAorL15GaWxlc3lzdGVtIFVVSUQ6L2QKKy9eSkZTIERFQlVHOi9kCisvXkxhc3Qgd3JpdGUgdGltZTovZAorL15MYXN0IG1vdW50IHRpbWU6L2QKKy9eTGFzdCBjaGVja2VkOi9kCisvXkxpZmV0aW1lIHdyaXRlczovZAorL15NYXhpbXVtIG1vdW50IGNvdW50Oi9kCisvXk5leHQgY2hlY2sgYWZ0ZXI6L2QKKy9SZXNlcnZlZCBibG9ja3MgdWlkOi9zLyAodXNlciAuKikvLworL1Jlc2VydmVkIGJsb2NrcyBnaWQ6L3MvIChncm91cCAuKikvLworL3doaWNoZXZlciBjb21lcyBmaXJzdC9kCisvXiAgQ2hlY2tzdW0gL2QKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaV9lMmltYWdlLm1kNSBiL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaV9lMmltYWdlLm1kNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTZlNzIxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL2lfZTJpbWFnZS9pX2UyaW1hZ2UubWQ1CkBAIC0wLDAgKzEsMTUgQEAKK2lfZTJpbWFnZS9pbWFnZTEwMjQub3JpZworZDM0OTE0ZTBkYTA3YmRhZTgwYWIwMjI4ODExOGZhZTIgIGltYWdlMTAyNC5vcmlnCitiYmVmNGU1MGQ3MjM3NTQ2YzdkOWM1MjFkM2RmNWI2OCAgX2ltYWdlLnJhdworMWQ0ZWIzOTQ1MmJlZDA5N2RjZDJjNWJjZDU3MTgwZTYgIF9pbWFnZS5xY293MgorYmJlZjRlNTBkNzIzNzU0NmM3ZDljNTIxZDNkZjViNjggIF9pbWFnZS5xY293Mi5yYXcKK2lfZTJpbWFnZS9pbWFnZTIwNDgub3JpZworYWE5ZjcwMmRlMTgxMTg4ZjJhNmQyYzUxNTg2ODZjMDkgIGltYWdlMjA0OC5vcmlnCitlNmY4NDEwZDA2OTBlZjU1MWJlZTBjMmMwYzY0MmQ4YyAgX2ltYWdlLnJhdworZGJiZDlhYTk3YzZjOTQ2YjkxMjI1ODZiYmQyYTMyNWEgIF9pbWFnZS5xY293MgorZTZmODQxMGQwNjkwZWY1NTFiZWUwYzJjMGM2NDJkOGMgIF9pbWFnZS5xY293Mi5yYXcKK2lfZTJpbWFnZS9pbWFnZTQwOTYub3JpZworMWQzZTdmMTViMmNlOWNhMDdhYTIzYzMyOTUxYzUxNzYgIGltYWdlNDA5Ni5vcmlnCis3MzQxMTlkZDhmMjQwYTMzNzA0MTM5ZjhjZGQ4MTI3YyAgX2ltYWdlLnJhdworODVmZGJmNWE4NDUxYjI0YjM2YWI4MmEwMjE5NmRlYjkgIF9pbWFnZS5xY293MgorNzM0MTE5ZGQ4ZjI0MGEzMzcwNDEzOWY4Y2RkODEyN2MgIF9pbWFnZS5xY293Mi5yYXcKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UxMDI0Lm9yaWcuYnoyIGIvZTJmc3Byb2dzL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTEwMjQub3JpZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5MGY4NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UxMDI0Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UyMDQ4Lm9yaWcuYnoyIGIvZTJmc3Byb2dzL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTIwNDgub3JpZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMDdhOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2UyMDQ4Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2U0MDk2Lm9yaWcuYnoyIGIvZTJmc3Byb2dzL3Rlc3RzL2lfZTJpbWFnZS9pbWFnZTQwOTYub3JpZy5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3YjVhMwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2UvaW1hZ2U0MDk2Lm9yaWcuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2Uvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL2lfZTJpbWFnZS9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNTlhNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9pX2UyaW1hZ2Uvc2NyaXB0CkBAIC0wLDAgKzEsNTkgQEAKK3Rlc3RfZGVzY3JpcHRpb249ImNyZWF0ZS9jb252ZXJ0IHJhdy9xY293MiBpbWFnZXMiCitpZiB0ZXN0IC14ICRFMklNQUdFX0VYRTsgdGhlbgorCitPUklHX0lNQUdFUz0iaW1hZ2UxMDI0Lm9yaWcgaW1hZ2UyMDQ4Lm9yaWcgaW1hZ2U0MDk2Lm9yaWciCisKK1JBV19JTUc9X2ltYWdlLnJhdworUUNPVzJfSU1HPV9pbWFnZS5xY293MgorUUNPVzJfVE9fUkFXPV9pbWFnZS5xY293Mi5yYXcKK09VVD0kdGVzdF9uYW1lLmxvZworTUQ1PSRTUkNESVIvJHRlc3RfbmFtZS8kdGVzdF9uYW1lLm1kNQorTUQ1X1RNUD0kdGVzdF9uYW1lLm1kNS50bXAKKworcm0gLWYgJHRlc3RfbmFtZS9faW1hZ2UuKiAkTUQ1X1RNUCAkT1VUID4vZGV2L251bGwgMj4mMQorCisoCitmb3IgaSBpbiAkT1JJR19JTUFHRVM7IGRvCisJT1JJR19JTUc9JHRlc3RfbmFtZS8kaQorCWVjaG8gJE9SSUdfSU1HID4+ICRNRDVfVE1QCisKKwlidW56aXAyIDwgJFNSQ0RJUi8kT1JJR19JTUcuYnoyID4gJGkKKwltZDVzdW0gJGkgPj4gJE1ENV9UTVAKKworCXJtIC1mICRSQVdfSU1HCisJZWNobyAiZTJpbWFnZSAtciAkT1JJR19JTUcgJFJBV19JTUciCisJJEUySU1BR0UgICAgICAtciAkaSAkUkFXX0lNRworCW1kNXN1bSAkUkFXX0lNRyA+PiAkTUQ1X1RNUAorCisJZWNobyAiZTJpbWFnZSAtUSAkT1JJR19JTUcgJFFDT1cyX0lNRyIKKwkkRTJJTUFHRSAgICAgIC1RICRpICRRQ09XMl9JTUcKKwltZDVzdW0gJFFDT1cyX0lNRyA+PiAkTUQ1X1RNUAorCisJcm0gLWYgJFFDT1cyX1RPX1JBVworCWVjaG8gImUyaW1hZ2UgLXIgJFFDT1cyX0lNRyAkUUNPVzJfVE9fUkFXIgorCSRFMklNQUdFICAgICAgLXIgJGkgJFFDT1cyX1RPX1JBVworCW1kNXN1bSAkUUNPVzJfVE9fUkFXID4+ICRNRDVfVE1QCisKKwlybSAtZiAkaQorZG9uZQorKSA+PiAkT1VUIDI+JjEKKworZWNobyAibWQ1c3VtczoiID4+ICRPVVQKK2NhdCAkTUQ1X1RNUCA+PiAkT1VUCitlY2hvICIiID4+ICRPVVQKKworZGlmZiAkTUQ1ICRNRDVfVE1QID4+ICRPVVQgMj4mMQorCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWxuIC1mICR0ZXN0X25hbWUubG9nICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKK2ZpCisKK3JtIC1mIF9pbWFnZS4qICRNRDVfVE1QID4vZGV2L251bGwgMj4mMQorCitlbHNlICNpZiB0ZXN0IC14ICRFMklNQUdFX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX2JpZ2pvdXJuYWwvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9iaWdqb3VybmFsL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmMyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9iaWdqb3VybmFsL2V4cGVjdC4xCkBAIC0wLDAgKzEsNTczIEBACitGaWxlc3lzdGVtIGZlYXR1cmVzOiBoYXNfam91cm5hbCBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIGV4dGVudCBmbGV4X2JnIHNwYXJzZV9zdXBlciBsYXJnZV9maWxlIGh1Z2VfZmlsZSB1bmluaXRfYmcgZGlyX25saW5rIGV4dHJhX2lzaXplCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xMzQ0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTI4Njk4OS8yNzUwMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBoYXNfam91cm5hbCBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIGV4dGVudCBmbGV4X2JnIHNwYXJzZV9zdXBlciBsYXJnZV9maWxlIGh1Z2VfZmlsZSB1bmluaXRfYmcgZGlyX25saW5rIGV4dHJhX2lzaXplCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxMzQ0CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDI3NTAwMDAKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMTM3NTAwCitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDE0NjMwMTEKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMTMzMworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAwCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDQwOTYKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgNDA5NgorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICA2NzEKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgMzI3NjgKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMzI3NjgKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMTYKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMQorRmxleCBibG9jayBncm91cCBzaXplOiAgICA1MTIKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDI1NgorUmVxdWlyZWQgZXh0cmEgaXNpemU6ICAgICAyOAorRGVzaXJlZCBleHRyYSBpc2l6ZTogICAgICAyOAorSm91cm5hbCBpbm9kZTogICAgICAgICAgICA4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CitKb3VybmFsIGJhY2t1cDogICAgICAgICAgIGlub2RlIGJsb2NrcworSm91cm5hbCBmZWF0dXJlczogICAgICAgICAobm9uZSkKK0pvdXJuYWwgc2l6ZTogICAgICAgICAgICAgNTAwME0KK0pvdXJuYWwgbGVuZ3RoOiAgICAgICAgICAgMTI4MDAwMAorSm91cm5hbCBzZXF1ZW5jZTogICAgICAgICAweDAwMDAwMDAxCitKb3VybmFsIHN0YXJ0OiAgICAgICAgICAgIDAKKworCitHcm91cCAwOiAoQmxvY2tzIDAtMzI3NjcpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAwLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxLTEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyLTY3MgorICBCbG9jayBiaXRtYXAgYXQgNjczICgrNjczKSwgSW5vZGUgYml0bWFwIGF0IDExODUgKCsxMTg1KQorICBJbm9kZSB0YWJsZSBhdCAxNjk3LTE2OTcgKCsxNjk3KQorICAzMTgzNiBmcmVlIGJsb2NrcywgNSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcywgNSB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA3NjQtMTE4NCwgMTI2OS0xNjk2LCAxNzgxLTMyNzY3CisgIEZyZWUgaW5vZGVzOiAxMi0xNgorR3JvdXAgMTogKEJsb2NrcyAzMjc2OC02NTUzNSkgW0lOT0RFX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzI3NjgsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMyNzY5LTMyNzY5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzI3NzAtMzM0NDAKKyAgQmxvY2sgYml0bWFwIGF0IDY3NCAoYmcgIzAgKyA2NzQpLCBJbm9kZSBiaXRtYXAgYXQgMTE4NiAoYmcgIzAgKyAxMTg2KQorICBJbm9kZSB0YWJsZSBhdCAxNjk4LTE2OTggKGJnICMwICsgMTY5OCkKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAzMzQ0MS02NTUzNQorICBGcmVlIGlub2RlczogMTctMzIKK0dyb3VwIDI6IChCbG9ja3MgNjU1MzYtOTgzMDMpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY3NSAoYmcgIzAgKyA2NzUpLCBJbm9kZSBiaXRtYXAgYXQgMTE4NyAoYmcgIzAgKyAxMTg3KQorICBJbm9kZSB0YWJsZSBhdCAxNjk5LTE2OTkgKGJnICMwICsgMTY5OSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA2NTUzNi05ODMwMworICBGcmVlIGlub2RlczogMzMtNDgKK0dyb3VwIDM6IChCbG9ja3MgOTgzMDQtMTMxMDcxKSBbSU5PREVfVU5JTklUXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA5ODMwNCwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgOTgzMDUtOTgzMDUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA5ODMwNi05ODk3NgorICBCbG9jayBiaXRtYXAgYXQgNjc2IChiZyAjMCArIDY3NiksIElub2RlIGJpdG1hcCBhdCAxMTg4IChiZyAjMCArIDExODgpCisgIElub2RlIHRhYmxlIGF0IDE3MDAtMTcwMCAoYmcgIzAgKyAxNzAwKQorICAzMjA5NSBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDk4OTc3LTEzMTA3MQorICBGcmVlIGlub2RlczogNDktNjQKK0dyb3VwIDQ6IChCbG9ja3MgMTMxMDcyLTE2MzgzOSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjc3IChiZyAjMCArIDY3NyksIElub2RlIGJpdG1hcCBhdCAxMTg5IChiZyAjMCArIDExODkpCisgIElub2RlIHRhYmxlIGF0IDE3MDEtMTcwMSAoYmcgIzAgKyAxNzAxKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDEzMTA3Mi0xNjM4MzkKKyAgRnJlZSBpbm9kZXM6IDY1LTgwCitHcm91cCA1OiAoQmxvY2tzIDE2Mzg0MC0xOTY2MDcpIFtJTk9ERV9VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE2Mzg0MCwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTYzODQxLTE2Mzg0MQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE2Mzg0Mi0xNjQ1MTIKKyAgQmxvY2sgYml0bWFwIGF0IDY3OCAoYmcgIzAgKyA2NzgpLCBJbm9kZSBiaXRtYXAgYXQgMTE5MCAoYmcgIzAgKyAxMTkwKQorICBJbm9kZSB0YWJsZSBhdCAxNzAyLTE3MDIgKGJnICMwICsgMTcwMikKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxNjQ1MTMtMTk2NjA3CisgIEZyZWUgaW5vZGVzOiA4MS05NgorR3JvdXAgNjogKEJsb2NrcyAxOTY2MDgtMjI5Mzc1KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2NzkgKGJnICMwICsgNjc5KSwgSW5vZGUgYml0bWFwIGF0IDExOTEgKGJnICMwICsgMTE5MSkKKyAgSW5vZGUgdGFibGUgYXQgMTcwMy0xNzAzIChiZyAjMCArIDE3MDMpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTk2NjA4LTIyOTM3NQorICBGcmVlIGlub2RlczogOTctMTEyCitHcm91cCA3OiAoQmxvY2tzIDIyOTM3Ni0yNjIxNDMpIFtJTk9ERV9VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDIyOTM3NiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjI5Mzc3LTIyOTM3NworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDIyOTM3OC0yMzAwNDgKKyAgQmxvY2sgYml0bWFwIGF0IDY4MCAoYmcgIzAgKyA2ODApLCBJbm9kZSBiaXRtYXAgYXQgMTE5MiAoYmcgIzAgKyAxMTkyKQorICBJbm9kZSB0YWJsZSBhdCAxNzA0LTE3MDQgKGJnICMwICsgMTcwNCkKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyMzAwNDktMjYyMTQzCisgIEZyZWUgaW5vZGVzOiAxMTMtMTI4CitHcm91cCA4OiAoQmxvY2tzIDI2MjE0NC0yOTQ5MTEpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4MSAoYmcgIzAgKyA2ODEpLCBJbm9kZSBiaXRtYXAgYXQgMTE5MyAoYmcgIzAgKyAxMTkzKQorICBJbm9kZSB0YWJsZSBhdCAxNzA1LTE3MDUgKGJnICMwICsgMTcwNSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNjIxNDQtMjk0OTExCisgIEZyZWUgaW5vZGVzOiAxMjktMTQ0CitHcm91cCA5OiAoQmxvY2tzIDI5NDkxMi0zMjc2NzkpIFtJTk9ERV9VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI5NDkxMiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjk0OTEzLTI5NDkxMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI5NDkxNC0yOTU1ODQKKyAgQmxvY2sgYml0bWFwIGF0IDY4MiAoYmcgIzAgKyA2ODIpLCBJbm9kZSBiaXRtYXAgYXQgMTE5NCAoYmcgIzAgKyAxMTk0KQorICBJbm9kZSB0YWJsZSBhdCAxNzA2LTE3MDYgKGJnICMwICsgMTcwNikKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyOTU1ODUtMzI3Njc5CisgIEZyZWUgaW5vZGVzOiAxNDUtMTYwCitHcm91cCAxMDogKEJsb2NrcyAzMjc2ODAtMzYwNDQ3KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODMgKGJnICMwICsgNjgzKSwgSW5vZGUgYml0bWFwIGF0IDExOTUgKGJnICMwICsgMTE5NSkKKyAgSW5vZGUgdGFibGUgYXQgMTcwNy0xNzA3IChiZyAjMCArIDE3MDcpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMzI3NjgwLTM2MDQ0NworICBGcmVlIGlub2RlczogMTYxLTE3NgorR3JvdXAgMTE6IChCbG9ja3MgMzYwNDQ4LTM5MzIxNSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjg0IChiZyAjMCArIDY4NCksIElub2RlIGJpdG1hcCBhdCAxMTk2IChiZyAjMCArIDExOTYpCisgIElub2RlIHRhYmxlIGF0IDE3MDgtMTcwOCAoYmcgIzAgKyAxNzA4KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDM2MDQ0OC0zOTMyMTUKKyAgRnJlZSBpbm9kZXM6IDE3Ny0xOTIKK0dyb3VwIDEyOiAoQmxvY2tzIDM5MzIxNi00MjU5ODMpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4NSAoYmcgIzAgKyA2ODUpLCBJbm9kZSBiaXRtYXAgYXQgMTE5NyAoYmcgIzAgKyAxMTk3KQorICBJbm9kZSB0YWJsZSBhdCAxNzA5LTE3MDkgKGJnICMwICsgMTcwOSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAzOTMyMTYtNDI1OTgzCisgIEZyZWUgaW5vZGVzOiAxOTMtMjA4CitHcm91cCAxMzogKEJsb2NrcyA0MjU5ODQtNDU4NzUxKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODYgKGJnICMwICsgNjg2KSwgSW5vZGUgYml0bWFwIGF0IDExOTggKGJnICMwICsgMTE5OCkKKyAgSW5vZGUgdGFibGUgYXQgMTcxMC0xNzEwIChiZyAjMCArIDE3MTApCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNDI1OTg0LTQ1ODc1MQorICBGcmVlIGlub2RlczogMjA5LTIyNAorR3JvdXAgMTQ6IChCbG9ja3MgNDU4NzUyLTQ5MTUxOSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjg3IChiZyAjMCArIDY4NyksIElub2RlIGJpdG1hcCBhdCAxMTk5IChiZyAjMCArIDExOTkpCisgIElub2RlIHRhYmxlIGF0IDE3MTEtMTcxMSAoYmcgIzAgKyAxNzExKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDQ1ODc1Mi00OTE1MTkKKyAgRnJlZSBpbm9kZXM6IDIyNS0yNDAKK0dyb3VwIDE1OiAoQmxvY2tzIDQ5MTUyMC01MjQyODcpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY4OCAoYmcgIzAgKyA2ODgpLCBJbm9kZSBiaXRtYXAgYXQgMTIwMCAoYmcgIzAgKyAxMjAwKQorICBJbm9kZSB0YWJsZSBhdCAxNzEyLTE3MTIgKGJnICMwICsgMTcxMikKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA0OTE1MjAtNTI0Mjg3CisgIEZyZWUgaW5vZGVzOiAyNDEtMjU2CitHcm91cCAxNjogKEJsb2NrcyA1MjQyODgtNTU3MDU1KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2ODkgKGJnICMwICsgNjg5KSwgSW5vZGUgYml0bWFwIGF0IDEyMDEgKGJnICMwICsgMTIwMSkKKyAgSW5vZGUgdGFibGUgYXQgMTcxMy0xNzEzIChiZyAjMCArIDE3MTMpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNTI0Mjg4LTU1NzA1NQorICBGcmVlIGlub2RlczogMjU3LTI3MgorR3JvdXAgMTc6IChCbG9ja3MgNTU3MDU2LTU4OTgyMykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjkwIChiZyAjMCArIDY5MCksIElub2RlIGJpdG1hcCBhdCAxMjAyIChiZyAjMCArIDEyMDIpCisgIElub2RlIHRhYmxlIGF0IDE3MTQtMTcxNCAoYmcgIzAgKyAxNzE0KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDU1NzA1Ni01ODk4MjMKKyAgRnJlZSBpbm9kZXM6IDI3My0yODgKK0dyb3VwIDE4OiAoQmxvY2tzIDU4OTgyNC02MjI1OTEpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY5MSAoYmcgIzAgKyA2OTEpLCBJbm9kZSBiaXRtYXAgYXQgMTIwMyAoYmcgIzAgKyAxMjAzKQorICBJbm9kZSB0YWJsZSBhdCAxNzE1LTE3MTUgKGJnICMwICsgMTcxNSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA1ODk4MjQtNjIyNTkxCisgIEZyZWUgaW5vZGVzOiAyODktMzA0CitHcm91cCAxOTogKEJsb2NrcyA2MjI1OTItNjU1MzU5KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTIgKGJnICMwICsgNjkyKSwgSW5vZGUgYml0bWFwIGF0IDEyMDQgKGJnICMwICsgMTIwNCkKKyAgSW5vZGUgdGFibGUgYXQgMTcxNi0xNzE2IChiZyAjMCArIDE3MTYpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNjIyNTkyLTY1NTM1OQorICBGcmVlIGlub2RlczogMzA1LTMyMAorR3JvdXAgMjA6IChCbG9ja3MgNjU1MzYwLTY4ODEyNykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjkzIChiZyAjMCArIDY5MyksIElub2RlIGJpdG1hcCBhdCAxMjA1IChiZyAjMCArIDEyMDUpCisgIElub2RlIHRhYmxlIGF0IDE3MTctMTcxNyAoYmcgIzAgKyAxNzE3KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDY1NTM2MC02ODgxMjcKKyAgRnJlZSBpbm9kZXM6IDMyMS0zMzYKK0dyb3VwIDIxOiAoQmxvY2tzIDY4ODEyOC03MjA4OTUpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY5NCAoYmcgIzAgKyA2OTQpLCBJbm9kZSBiaXRtYXAgYXQgMTIwNiAoYmcgIzAgKyAxMjA2KQorICBJbm9kZSB0YWJsZSBhdCAxNzE4LTE3MTggKGJnICMwICsgMTcxOCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA2ODgxMjgtNzIwODk1CisgIEZyZWUgaW5vZGVzOiAzMzctMzUyCitHcm91cCAyMjogKEJsb2NrcyA3MjA4OTYtNzUzNjYzKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA2OTUgKGJnICMwICsgNjk1KSwgSW5vZGUgYml0bWFwIGF0IDEyMDcgKGJnICMwICsgMTIwNykKKyAgSW5vZGUgdGFibGUgYXQgMTcxOS0xNzE5IChiZyAjMCArIDE3MTkpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNzIwODk2LTc1MzY2MworICBGcmVlIGlub2RlczogMzUzLTM2OAorR3JvdXAgMjM6IChCbG9ja3MgNzUzNjY0LTc4NjQzMSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjk2IChiZyAjMCArIDY5NiksIElub2RlIGJpdG1hcCBhdCAxMjA4IChiZyAjMCArIDEyMDgpCisgIElub2RlIHRhYmxlIGF0IDE3MjAtMTcyMCAoYmcgIzAgKyAxNzIwKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDc1MzY2NC03ODY0MzEKKyAgRnJlZSBpbm9kZXM6IDM2OS0zODQKK0dyb3VwIDI0OiAoQmxvY2tzIDc4NjQzMi04MTkxOTkpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDY5NyAoYmcgIzAgKyA2OTcpLCBJbm9kZSBiaXRtYXAgYXQgMTIwOSAoYmcgIzAgKyAxMjA5KQorICBJbm9kZSB0YWJsZSBhdCAxNzIxLTE3MjEgKGJnICMwICsgMTcyMSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA3ODY0MzItODE5MTk5CisgIEZyZWUgaW5vZGVzOiAzODUtNDAwCitHcm91cCAyNTogKEJsb2NrcyA4MTkyMDAtODUxOTY3KSBbSU5PREVfVU5JTklUXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4MTkyMDAsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgxOTIwMS04MTkyMDEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4MTkyMDItODE5ODcyCisgIEJsb2NrIGJpdG1hcCBhdCA2OTggKGJnICMwICsgNjk4KSwgSW5vZGUgYml0bWFwIGF0IDEyMTAgKGJnICMwICsgMTIxMCkKKyAgSW5vZGUgdGFibGUgYXQgMTcyMi0xNzIyIChiZyAjMCArIDE3MjIpCisgIDMyMDk1IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogODE5ODczLTg1MTk2NworICBGcmVlIGlub2RlczogNDAxLTQxNgorR3JvdXAgMjY6IChCbG9ja3MgODUxOTY4LTg4NDczNSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNjk5IChiZyAjMCArIDY5OSksIElub2RlIGJpdG1hcCBhdCAxMjExIChiZyAjMCArIDEyMTEpCisgIElub2RlIHRhYmxlIGF0IDE3MjMtMTcyMyAoYmcgIzAgKyAxNzIzKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDg1MTk2OC04ODQ3MzUKKyAgRnJlZSBpbm9kZXM6IDQxNy00MzIKK0dyb3VwIDI3OiAoQmxvY2tzIDg4NDczNi05MTc1MDMpIFtJTk9ERV9VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDg4NDczNiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODg0NzM3LTg4NDczNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDg4NDczOC04ODU0MDgKKyAgQmxvY2sgYml0bWFwIGF0IDcwMCAoYmcgIzAgKyA3MDApLCBJbm9kZSBiaXRtYXAgYXQgMTIxMiAoYmcgIzAgKyAxMjEyKQorICBJbm9kZSB0YWJsZSBhdCAxNzI0LTE3MjQgKGJnICMwICsgMTcyNCkKKyAgMzIwOTUgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA4ODU0MDktOTE3NTAzCisgIEZyZWUgaW5vZGVzOiA0MzMtNDQ4CitHcm91cCAyODogKEJsb2NrcyA5MTc1MDQtOTUwMjcxKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MDEgKGJnICMwICsgNzAxKSwgSW5vZGUgYml0bWFwIGF0IDEyMTMgKGJnICMwICsgMTIxMykKKyAgSW5vZGUgdGFibGUgYXQgMTcyNS0xNzI1IChiZyAjMCArIDE3MjUpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTE3NTA0LTk1MDI3MQorICBGcmVlIGlub2RlczogNDQ5LTQ2NAorR3JvdXAgMjk6IChCbG9ja3MgOTUwMjcyLTk4MzAzOSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzAyIChiZyAjMCArIDcwMiksIElub2RlIGJpdG1hcCBhdCAxMjE0IChiZyAjMCArIDEyMTQpCisgIElub2RlIHRhYmxlIGF0IDE3MjYtMTcyNiAoYmcgIzAgKyAxNzI2KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDk1MDI3Mi05ODMwMzkKKyAgRnJlZSBpbm9kZXM6IDQ2NS00ODAKK0dyb3VwIDMwOiAoQmxvY2tzIDk4MzA0MC0xMDE1ODA3KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MDMgKGJnICMwICsgNzAzKSwgSW5vZGUgYml0bWFwIGF0IDEyMTUgKGJnICMwICsgMTIxNSkKKyAgSW5vZGUgdGFibGUgYXQgMTcyNy0xNzI3IChiZyAjMCArIDE3MjcpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTgzMDQwLTEwMTU4MDcKKyAgRnJlZSBpbm9kZXM6IDQ4MS00OTYKK0dyb3VwIDMxOiAoQmxvY2tzIDEwMTU4MDgtMTA0ODU3NSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA0IChiZyAjMCArIDcwNCksIElub2RlIGJpdG1hcCBhdCAxMjE2IChiZyAjMCArIDEyMTYpCisgIElub2RlIHRhYmxlIGF0IDE3MjgtMTcyOCAoYmcgIzAgKyAxNzI4KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDEwMTU4MDgtMTA0ODU3NQorICBGcmVlIGlub2RlczogNDk3LTUxMgorR3JvdXAgMzI6IChCbG9ja3MgMTA0ODU3Ni0xMDgxMzQzKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MDUgKGJnICMwICsgNzA1KSwgSW5vZGUgYml0bWFwIGF0IDEyMTcgKGJnICMwICsgMTIxNykKKyAgSW5vZGUgdGFibGUgYXQgMTcyOS0xNzI5IChiZyAjMCArIDE3MjkpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTA0ODU3Ni0xMDgxMzQzCisgIEZyZWUgaW5vZGVzOiA1MTMtNTI4CitHcm91cCAzMzogKEJsb2NrcyAxMDgxMzQ0LTExMTQxMTEpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcwNiAoYmcgIzAgKyA3MDYpLCBJbm9kZSBiaXRtYXAgYXQgMTIxOCAoYmcgIzAgKyAxMjE4KQorICBJbm9kZSB0YWJsZSBhdCAxNzMwLTE3MzAgKGJnICMwICsgMTczMCkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDgxMzQ0LTExMTQxMTEKKyAgRnJlZSBpbm9kZXM6IDUyOS01NDQKK0dyb3VwIDM0OiAoQmxvY2tzIDExMTQxMTItMTE0Njg3OSkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzA3IChiZyAjMCArIDcwNyksIElub2RlIGJpdG1hcCBhdCAxMjE5IChiZyAjMCArIDEyMTkpCisgIElub2RlIHRhYmxlIGF0IDE3MzEtMTczMSAoYmcgIzAgKyAxNzMxKQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDExMTQxMTItMTE0Njg3OQorICBGcmVlIGlub2RlczogNTQ1LTU2MAorR3JvdXAgMzU6IChCbG9ja3MgMTE0Njg4MC0xMTc5NjQ3KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MDggKGJnICMwICsgNzA4KSwgSW5vZGUgYml0bWFwIGF0IDEyMjAgKGJnICMwICsgMTIyMCkKKyAgSW5vZGUgdGFibGUgYXQgMTczMi0xNzMyIChiZyAjMCArIDE3MzIpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTE0Njg4MC0xMTc5NjQ3CisgIEZyZWUgaW5vZGVzOiA1NjEtNTc2CitHcm91cCAzNjogKEJsb2NrcyAxMTc5NjQ4LTEyMTI0MTUpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcwOSAoYmcgIzAgKyA3MDkpLCBJbm9kZSBiaXRtYXAgYXQgMTIyMSAoYmcgIzAgKyAxMjIxKQorICBJbm9kZSB0YWJsZSBhdCAxNzMzLTE3MzMgKGJnICMwICsgMTczMykKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTc5NjQ4LTEyMTI0MTUKKyAgRnJlZSBpbm9kZXM6IDU3Ny01OTIKK0dyb3VwIDM3OiAoQmxvY2tzIDEyMTI0MTYtMTI0NTE4MykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzEwIChiZyAjMCArIDcxMCksIElub2RlIGJpdG1hcCBhdCAxMjIyIChiZyAjMCArIDEyMjIpCisgIElub2RlIHRhYmxlIGF0IDE3MzQtMTczNCAoYmcgIzAgKyAxNzM0KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDEyMTI0MTYtMTI0NTE4MworICBGcmVlIGlub2RlczogNTkzLTYwOAorR3JvdXAgMzg6IChCbG9ja3MgMTI0NTE4NC0xMjc3OTUxKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MTEgKGJnICMwICsgNzExKSwgSW5vZGUgYml0bWFwIGF0IDEyMjMgKGJnICMwICsgMTIyMykKKyAgSW5vZGUgdGFibGUgYXQgMTczNS0xNzM1IChiZyAjMCArIDE3MzUpCisgIDMyNzY4IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTI0NTE4NC0xMjc3OTUxCisgIEZyZWUgaW5vZGVzOiA2MDktNjI0CitHcm91cCAzOTogKEJsb2NrcyAxMjc3OTUyLTEzMTA3MTkpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxMiAoYmcgIzAgKyA3MTIpLCBJbm9kZSBiaXRtYXAgYXQgMTIyNCAoYmcgIzAgKyAxMjI0KQorICBJbm9kZSB0YWJsZSBhdCAxNzM2LTE3MzYgKGJnICMwICsgMTczNikKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMjc3OTUyLTEzMTA3MTkKKyAgRnJlZSBpbm9kZXM6IDYyNS02NDAKK0dyb3VwIDQwOiAoQmxvY2tzIDEzMTA3MjAtMTM0MzQ4NykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxMyAoYmcgIzAgKyA3MTMpLCBJbm9kZSBiaXRtYXAgYXQgMTIyNSAoYmcgIzAgKyAxMjI1KQorICBJbm9kZSB0YWJsZSBhdCAxNzM3LTE3MzcgKGJnICMwICsgMTczNykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogNjQxLTY1NgorR3JvdXAgNDE6IChCbG9ja3MgMTM0MzQ4OC0xMzc2MjU1KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzE0IChiZyAjMCArIDcxNCksIElub2RlIGJpdG1hcCBhdCAxMjI2IChiZyAjMCArIDEyMjYpCisgIElub2RlIHRhYmxlIGF0IDE3MzgtMTczOCAoYmcgIzAgKyAxNzM4KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA2NTctNjcyCitHcm91cCA0MjogKEJsb2NrcyAxMzc2MjU2LTE0MDkwMjMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MTUgKGJnICMwICsgNzE1KSwgSW5vZGUgYml0bWFwIGF0IDEyMjcgKGJnICMwICsgMTIyNykKKyAgSW5vZGUgdGFibGUgYXQgMTczOS0xNzM5IChiZyAjMCArIDE3MzkpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDY3My02ODgKK0dyb3VwIDQzOiAoQmxvY2tzIDE0MDkwMjQtMTQ0MTc5MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxNiAoYmcgIzAgKyA3MTYpLCBJbm9kZSBiaXRtYXAgYXQgMTIyOCAoYmcgIzAgKyAxMjI4KQorICBJbm9kZSB0YWJsZSBhdCAxNzQwLTE3NDAgKGJnICMwICsgMTc0MCkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogNjg5LTcwNAorR3JvdXAgNDQ6IChCbG9ja3MgMTQ0MTc5Mi0xNDc0NTU5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzE3IChiZyAjMCArIDcxNyksIElub2RlIGJpdG1hcCBhdCAxMjI5IChiZyAjMCArIDEyMjkpCisgIElub2RlIHRhYmxlIGF0IDE3NDEtMTc0MSAoYmcgIzAgKyAxNzQxKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA3MDUtNzIwCitHcm91cCA0NTogKEJsb2NrcyAxNDc0NTYwLTE1MDczMjcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MTggKGJnICMwICsgNzE4KSwgSW5vZGUgYml0bWFwIGF0IDEyMzAgKGJnICMwICsgMTIzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTc0Mi0xNzQyIChiZyAjMCArIDE3NDIpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDcyMS03MzYKK0dyb3VwIDQ2OiAoQmxvY2tzIDE1MDczMjgtMTU0MDA5NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcxOSAoYmcgIzAgKyA3MTkpLCBJbm9kZSBiaXRtYXAgYXQgMTIzMSAoYmcgIzAgKyAxMjMxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQzLTE3NDMgKGJnICMwICsgMTc0MykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogNzM3LTc1MgorR3JvdXAgNDc6IChCbG9ja3MgMTU0MDA5Ni0xNTcyODYzKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzIwIChiZyAjMCArIDcyMCksIElub2RlIGJpdG1hcCBhdCAxMjMyIChiZyAjMCArIDEyMzIpCisgIElub2RlIHRhYmxlIGF0IDE3NDQtMTc0NCAoYmcgIzAgKyAxNzQ0KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA3NTMtNzY4CitHcm91cCA0ODogKEJsb2NrcyAxNTcyODY0LTE2MDU2MzEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjEgKGJnICMwICsgNzIxKSwgSW5vZGUgYml0bWFwIGF0IDEyMzMgKGJnICMwICsgMTIzMykKKyAgSW5vZGUgdGFibGUgYXQgMTc0NS0xNzQ1IChiZyAjMCArIDE3NDUpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDc2OS03ODQKK0dyb3VwIDQ5OiAoQmxvY2tzIDE2MDU2MzItMTYzODM5OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTYwNTYzMiwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTYwNTYzMy0xNjA1NjMzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTYwNTYzNC0xNjA2MzA0CisgIEJsb2NrIGJpdG1hcCBhdCA3MjIgKGJnICMwICsgNzIyKSwgSW5vZGUgYml0bWFwIGF0IDEyMzQgKGJnICMwICsgMTIzNCkKKyAgSW5vZGUgdGFibGUgYXQgMTc0Ni0xNzQ2IChiZyAjMCArIDE3NDYpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDc4NS04MDAKK0dyb3VwIDUwOiAoQmxvY2tzIDE2Mzg0MDAtMTY3MTE2NykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcyMyAoYmcgIzAgKyA3MjMpLCBJbm9kZSBiaXRtYXAgYXQgMTIzNSAoYmcgIzAgKyAxMjM1KQorICBJbm9kZSB0YWJsZSBhdCAxNzQ3LTE3NDcgKGJnICMwICsgMTc0NykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogODAxLTgxNgorR3JvdXAgNTE6IChCbG9ja3MgMTY3MTE2OC0xNzAzOTM1KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzI0IChiZyAjMCArIDcyNCksIElub2RlIGJpdG1hcCBhdCAxMjM2IChiZyAjMCArIDEyMzYpCisgIElub2RlIHRhYmxlIGF0IDE3NDgtMTc0OCAoYmcgIzAgKyAxNzQ4KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4MTctODMyCitHcm91cCA1MjogKEJsb2NrcyAxNzAzOTM2LTE3MzY3MDMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjUgKGJnICMwICsgNzI1KSwgSW5vZGUgYml0bWFwIGF0IDEyMzcgKGJnICMwICsgMTIzNykKKyAgSW5vZGUgdGFibGUgYXQgMTc0OS0xNzQ5IChiZyAjMCArIDE3NDkpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDgzMy04NDgKK0dyb3VwIDUzOiAoQmxvY2tzIDE3MzY3MDQtMTc2OTQ3MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcyNiAoYmcgIzAgKyA3MjYpLCBJbm9kZSBiaXRtYXAgYXQgMTIzOCAoYmcgIzAgKyAxMjM4KQorICBJbm9kZSB0YWJsZSBhdCAxNzUwLTE3NTAgKGJnICMwICsgMTc1MCkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogODQ5LTg2NAorR3JvdXAgNTQ6IChCbG9ja3MgMTc2OTQ3Mi0xODAyMjM5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzI3IChiZyAjMCArIDcyNyksIElub2RlIGJpdG1hcCBhdCAxMjM5IChiZyAjMCArIDEyMzkpCisgIElub2RlIHRhYmxlIGF0IDE3NTEtMTc1MSAoYmcgIzAgKyAxNzUxKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA4NjUtODgwCitHcm91cCA1NTogKEJsb2NrcyAxODAyMjQwLTE4MzUwMDcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MjggKGJnICMwICsgNzI4KSwgSW5vZGUgYml0bWFwIGF0IDEyNDAgKGJnICMwICsgMTI0MCkKKyAgSW5vZGUgdGFibGUgYXQgMTc1Mi0xNzUyIChiZyAjMCArIDE3NTIpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDg4MS04OTYKK0dyb3VwIDU2OiAoQmxvY2tzIDE4MzUwMDgtMTg2Nzc3NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDcyOSAoYmcgIzAgKyA3MjkpLCBJbm9kZSBiaXRtYXAgYXQgMTI0MSAoYmcgIzAgKyAxMjQxKQorICBJbm9kZSB0YWJsZSBhdCAxNzUzLTE3NTMgKGJnICMwICsgMTc1MykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogODk3LTkxMgorR3JvdXAgNTc6IChCbG9ja3MgMTg2Nzc3Ni0xOTAwNTQzKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzMwIChiZyAjMCArIDczMCksIElub2RlIGJpdG1hcCBhdCAxMjQyIChiZyAjMCArIDEyNDIpCisgIElub2RlIHRhYmxlIGF0IDE3NTQtMTc1NCAoYmcgIzAgKyAxNzU0KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5MTMtOTI4CitHcm91cCA1ODogKEJsb2NrcyAxOTAwNTQ0LTE5MzMzMTEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzEgKGJnICMwICsgNzMxKSwgSW5vZGUgYml0bWFwIGF0IDEyNDMgKGJnICMwICsgMTI0MykKKyAgSW5vZGUgdGFibGUgYXQgMTc1NS0xNzU1IChiZyAjMCArIDE3NTUpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDkyOS05NDQKK0dyb3VwIDU5OiAoQmxvY2tzIDE5MzMzMTItMTk2NjA3OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDczMiAoYmcgIzAgKyA3MzIpLCBJbm9kZSBiaXRtYXAgYXQgMTI0NCAoYmcgIzAgKyAxMjQ0KQorICBJbm9kZSB0YWJsZSBhdCAxNzU2LTE3NTYgKGJnICMwICsgMTc1NikKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogOTQ1LTk2MAorR3JvdXAgNjA6IChCbG9ja3MgMTk2NjA4MC0xOTk4ODQ3KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzMzIChiZyAjMCArIDczMyksIElub2RlIGJpdG1hcCBhdCAxMjQ1IChiZyAjMCArIDEyNDUpCisgIElub2RlIHRhYmxlIGF0IDE3NTctMTc1NyAoYmcgIzAgKyAxNzU3KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiA5NjEtOTc2CitHcm91cCA2MTogKEJsb2NrcyAxOTk4ODQ4LTIwMzE2MTUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzQgKGJnICMwICsgNzM0KSwgSW5vZGUgYml0bWFwIGF0IDEyNDYgKGJnICMwICsgMTI0NikKKyAgSW5vZGUgdGFibGUgYXQgMTc1OC0xNzU4IChiZyAjMCArIDE3NTgpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDk3Ny05OTIKK0dyb3VwIDYyOiAoQmxvY2tzIDIwMzE2MTYtMjA2NDM4MykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDczNSAoYmcgIzAgKyA3MzUpLCBJbm9kZSBiaXRtYXAgYXQgMTI0NyAoYmcgIzAgKyAxMjQ3KQorICBJbm9kZSB0YWJsZSBhdCAxNzU5LTE3NTkgKGJnICMwICsgMTc1OSkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogOTkzLTEwMDgKK0dyb3VwIDYzOiAoQmxvY2tzIDIwNjQzODQtMjA5NzE1MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDczNiAoYmcgIzAgKyA3MzYpLCBJbm9kZSBiaXRtYXAgYXQgMTI0OCAoYmcgIzAgKyAxMjQ4KQorICBJbm9kZSB0YWJsZSBhdCAxNzYwLTE3NjAgKGJnICMwICsgMTc2MCkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTAwOS0xMDI0CitHcm91cCA2NDogKEJsb2NrcyAyMDk3MTUyLTIxMjk5MTkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3MzcgKGJnICMwICsgNzM3KSwgSW5vZGUgYml0bWFwIGF0IDEyNDkgKGJnICMwICsgMTI0OSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2MS0xNzYxIChiZyAjMCArIDE3NjEpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTA0MAorR3JvdXAgNjU6IChCbG9ja3MgMjEyOTkyMC0yMTYyNjg3KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzM4IChiZyAjMCArIDczOCksIElub2RlIGJpdG1hcCBhdCAxMjUwIChiZyAjMCArIDEyNTApCisgIElub2RlIHRhYmxlIGF0IDE3NjItMTc2MiAoYmcgIzAgKyAxNzYyKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMDQxLTEwNTYKK0dyb3VwIDY2OiAoQmxvY2tzIDIxNjI2ODgtMjE5NTQ1NSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDczOSAoYmcgIzAgKyA3MzkpLCBJbm9kZSBiaXRtYXAgYXQgMTI1MSAoYmcgIzAgKyAxMjUxKQorICBJbm9kZSB0YWJsZSBhdCAxNzYzLTE3NjMgKGJnICMwICsgMTc2MykKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTA1Ny0xMDcyCitHcm91cCA2NzogKEJsb2NrcyAyMTk1NDU2LTIyMjgyMjMpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDAgKGJnICMwICsgNzQwKSwgSW5vZGUgYml0bWFwIGF0IDEyNTIgKGJnICMwICsgMTI1MikKKyAgSW5vZGUgdGFibGUgYXQgMTc2NC0xNzY0IChiZyAjMCArIDE3NjQpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEwNzMtMTA4OAorR3JvdXAgNjg6IChCbG9ja3MgMjIyODIyNC0yMjYwOTkxKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQxIChiZyAjMCArIDc0MSksIElub2RlIGJpdG1hcCBhdCAxMjUzIChiZyAjMCArIDEyNTMpCisgIElub2RlIHRhYmxlIGF0IDE3NjUtMTc2NSAoYmcgIzAgKyAxNzY1KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMDg5LTExMDQKK0dyb3VwIDY5OiAoQmxvY2tzIDIyNjA5OTItMjI5Mzc1OSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0MiAoYmcgIzAgKyA3NDIpLCBJbm9kZSBiaXRtYXAgYXQgMTI1NCAoYmcgIzAgKyAxMjU0KQorICBJbm9kZSB0YWJsZSBhdCAxNzY2LTE3NjYgKGJnICMwICsgMTc2NikKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTEwNS0xMTIwCitHcm91cCA3MDogKEJsb2NrcyAyMjkzNzYwLTIzMjY1MjcpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDMgKGJnICMwICsgNzQzKSwgSW5vZGUgYml0bWFwIGF0IDEyNTUgKGJnICMwICsgMTI1NSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2Ny0xNzY3IChiZyAjMCArIDE3NjcpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDExMjEtMTEzNgorR3JvdXAgNzE6IChCbG9ja3MgMjMyNjUyOC0yMzU5Mjk1KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQ0IChiZyAjMCArIDc0NCksIElub2RlIGJpdG1hcCBhdCAxMjU2IChiZyAjMCArIDEyNTYpCisgIElub2RlIHRhYmxlIGF0IDE3NjgtMTc2OCAoYmcgIzAgKyAxNzY4KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMTM3LTExNTIKK0dyb3VwIDcyOiAoQmxvY2tzIDIzNTkyOTYtMjM5MjA2MykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0NSAoYmcgIzAgKyA3NDUpLCBJbm9kZSBiaXRtYXAgYXQgMTI1NyAoYmcgIzAgKyAxMjU3KQorICBJbm9kZSB0YWJsZSBhdCAxNzY5LTE3NjkgKGJnICMwICsgMTc2OSkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTE1My0xMTY4CitHcm91cCA3MzogKEJsb2NrcyAyMzkyMDY0LTI0MjQ4MzEpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDYgKGJnICMwICsgNzQ2KSwgSW5vZGUgYml0bWFwIGF0IDEyNTggKGJnICMwICsgMTI1OCkKKyAgSW5vZGUgdGFibGUgYXQgMTc3MC0xNzcwIChiZyAjMCArIDE3NzApCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDExNjktMTE4NAorR3JvdXAgNzQ6IChCbG9ja3MgMjQyNDgzMi0yNDU3NTk5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzQ3IChiZyAjMCArIDc0NyksIElub2RlIGJpdG1hcCBhdCAxMjU5IChiZyAjMCArIDEyNTkpCisgIElub2RlIHRhYmxlIGF0IDE3NzEtMTc3MSAoYmcgIzAgKyAxNzcxKQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMTg1LTEyMDAKK0dyb3VwIDc1OiAoQmxvY2tzIDI0NTc2MDAtMjQ5MDM2NykgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc0OCAoYmcgIzAgKyA3NDgpLCBJbm9kZSBiaXRtYXAgYXQgMTI2MCAoYmcgIzAgKyAxMjYwKQorICBJbm9kZSB0YWJsZSBhdCAxNzcyLTE3NzIgKGJnICMwICsgMTc3MikKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTIwMS0xMjE2CitHcm91cCA3NjogKEJsb2NrcyAyNDkwMzY4LTI1MjMxMzUpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NDkgKGJnICMwICsgNzQ5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjEgKGJnICMwICsgMTI2MSkKKyAgSW5vZGUgdGFibGUgYXQgMTc3My0xNzczIChiZyAjMCArIDE3NzMpCisgIDAgZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAKKyAgRnJlZSBpbm9kZXM6IDEyMTctMTIzMgorR3JvdXAgNzc6IChCbG9ja3MgMjUyMzEzNi0yNTU1OTAzKSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzUwIChiZyAjMCArIDc1MCksIElub2RlIGJpdG1hcCBhdCAxMjYyIChiZyAjMCArIDEyNjIpCisgIElub2RlIHRhYmxlIGF0IDE3NzQtMTc3NCAoYmcgIzAgKyAxNzc0KQorICAwIGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogCisgIEZyZWUgaW5vZGVzOiAxMjMzLTEyNDgKK0dyb3VwIDc4OiAoQmxvY2tzIDI1NTU5MDQtMjU4ODY3MSkgW0lOT0RFX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc1MSAoYmcgIzAgKyA3NTEpLCBJbm9kZSBiaXRtYXAgYXQgMTI2MyAoYmcgIzAgKyAxMjYzKQorICBJbm9kZSB0YWJsZSBhdCAxNzc1LTE3NzUgKGJnICMwICsgMTc3NSkKKyAgMCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IAorICBGcmVlIGlub2RlczogMTI0OS0xMjY0CitHcm91cCA3OTogKEJsb2NrcyAyNTg4NjcyLTI2MjE0MzkpIFtJTk9ERV9VTklOSVRdCisgIEJsb2NrIGJpdG1hcCBhdCA3NTIgKGJnICMwICsgNzUyKSwgSW5vZGUgYml0bWFwIGF0IDEyNjQgKGJnICMwICsgMTI2NCkKKyAgSW5vZGUgdGFibGUgYXQgMTc3Ni0xNzc2IChiZyAjMCArIDE3NzYpCisgIDMwMDQ3IGZyZWUgYmxvY2tzLCAxNiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMTYgdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMjU5MTM5My0yNjIxNDM5CisgIEZyZWUgaW5vZGVzOiAxMjY1LTEyODAKK0dyb3VwIDgwOiAoQmxvY2tzIDI2MjE0NDAtMjY1NDIwNykgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzUzIChiZyAjMCArIDc1MyksIElub2RlIGJpdG1hcCBhdCAxMjY1IChiZyAjMCArIDEyNjUpCisgIElub2RlIHRhYmxlIGF0IDE3NzctMTc3NyAoYmcgIzAgKyAxNzc3KQorICAzMjc2OCBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI2MjE0NDAtMjY1NDIwNworICBGcmVlIGlub2RlczogMTI4MS0xMjk2CitHcm91cCA4MTogKEJsb2NrcyAyNjU0MjA4LTI2ODY5NzUpIFtJTk9ERV9VTklOSVRdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI2NTQyMDgsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI2NTQyMDktMjY1NDIwOQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI2NTQyMTAtMjY1NDg4MAorICBCbG9jayBiaXRtYXAgYXQgNzU0IChiZyAjMCArIDc1NCksIElub2RlIGJpdG1hcCBhdCAxMjY2IChiZyAjMCArIDEyNjYpCisgIElub2RlIHRhYmxlIGF0IDE3NzgtMTc3OCAoYmcgIzAgKyAxNzc4KQorICAzMjA5NSBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI2NTQ4ODEtMjY4Njk3NQorICBGcmVlIGlub2RlczogMTI5Ny0xMzEyCitHcm91cCA4MjogKEJsb2NrcyAyNjg2OTc2LTI3MTk3NDMpIFtJTk9ERV9VTklOSVQsIEJMT0NLX1VOSU5JVF0KKyAgQmxvY2sgYml0bWFwIGF0IDc1NSAoYmcgIzAgKyA3NTUpLCBJbm9kZSBiaXRtYXAgYXQgMTI2NyAoYmcgIzAgKyAxMjY3KQorICBJbm9kZSB0YWJsZSBhdCAxNzc5LTE3NzkgKGJnICMwICsgMTc3OSkKKyAgMzI3NjggZnJlZSBibG9ja3MsIDE2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAxNiB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNjg2OTc2LTI3MTk3NDMKKyAgRnJlZSBpbm9kZXM6IDEzMTMtMTMyOAorR3JvdXAgODM6IChCbG9ja3MgMjcxOTc0NC0yNzQ5OTk5KSBbSU5PREVfVU5JTklUXQorICBCbG9jayBiaXRtYXAgYXQgNzU2IChiZyAjMCArIDc1NiksIElub2RlIGJpdG1hcCBhdCAxMjY4IChiZyAjMCArIDEyNjgpCisgIElub2RlIHRhYmxlIGF0IDE3ODAtMTc4MCAoYmcgIzAgKyAxNzgwKQorICAzMDI1NiBmcmVlIGJsb2NrcywgMTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDE2IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDI3MTk3NDQtMjc0OTk5OQorICBGcmVlIGlub2RlczogMTMyOS0xMzQ0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9iaWdqb3VybmFsL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9tX2JpZ2pvdXJuYWwvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjFmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9iaWdqb3VybmFsL3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJqb3VybmFsIG92ZXIgNEdCIGluIHNpemUiCitGU19TSVpFPTExMDAwMDAwCitNS0UyRlNfT1BUUz0iLXQgZXh0NCAtRyA1MTIgLU4gMTI4MCAtSiBzaXplPTUwMDAgLXEgLUUgbGF6eV9qb3VybmFsX2luaXQsbGF6eV9pdGFibGVfaW5pdCxub2Rpc2NhcmQiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX2Rhc2RfYnMvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9kYXNkX2JzL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYmUzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9kYXNkX2JzL2V4cGVjdC4xCkBAIC0wLDAgKzEsNzQgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0yMDQ4IChsb2c9MSkKK0ZyYWdtZW50IHNpemU9MjA0OCAobG9nPTEpCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworMTYzODQgaW5vZGVzLCAzMjc2OCBibG9ja3MKKzE2MzggYmxvY2tzICg1LjAwJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyCitGaXJzdCBkYXRhIGJsb2NrPTAKK01heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9MzM1NTQ0MzIKKzIgYmxvY2sgZ3JvdXBzCisxNjM4NCBibG9ja3MgcGVyIGdyb3VwLCAxNjM4NCBmcmFnbWVudHMgcGVyIGdyb3VwCis4MTkyIGlub2RlcyBwZXIgZ3JvdXAKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwkxNjM4NAorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNjM4NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDExMDQvMzI3NjggYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxNjM4NAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAxNjM4CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDMxNjY0CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDE2MzczCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDAKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMjA0OAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAyMDQ4CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDMxCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDE2Mzg0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDE2Mzg0CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgNTEyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDAtMTYzODMpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAwLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxLTEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyLTMyCisgIEJsb2NrIGJpdG1hcCBhdCAzMyAoKzMzKSwgSW5vZGUgYml0bWFwIGF0IDM0ICgrMzQpCisgIElub2RlIHRhYmxlIGF0IDM1LTU0NiAoKzM1KQorICAxNTgyNyBmcmVlIGJsb2NrcywgODE4MSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTU3LTE2MzgzCisgIEZyZWUgaW5vZGVzOiAxMi04MTkyCitHcm91cCAxOiAoQmxvY2tzIDE2Mzg0LTMyNzY3KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxNjM4NCwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTYzODUtMTYzODUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxNjM4Ni0xNjQxNgorICBCbG9jayBiaXRtYXAgYXQgMTY0MTcgKCszMyksIElub2RlIGJpdG1hcCBhdCAxNjQxOCAoKzM0KQorICBJbm9kZSB0YWJsZSBhdCAxNjQxOS0xNjkzMCAoKzM1KQorICAxNTgzNyBmcmVlIGJsb2NrcywgODE5MiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY5MzEtMzI3NjcKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTYzODQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX2Rhc2RfYnMvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fZGFzZF9icy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiOTA4NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX2Rhc2RfYnMvc2NyaXB0CkBAIC0wLDAgKzEsNiBAQAorREVTQ1JJUFRJT049IjIwNDggYnl0ZSBzZWN0b3IgZGV2aWNlcyIKK0ZTX1NJWkU9NjU1MzYKK01LRTJGU19ERVZJQ0VfU0VDVFNJWkU9MjA0OAorZXhwb3J0IE1LRTJGU19ERVZJQ0VfU0VDVFNJWkUKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwordW5zZXQgTUtFMkZTX0RFVklDRV9TRUNUU0laRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fZGVzY19zaXplXzEyOC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwMTU5MQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvZXhwZWN0LjEKQEAgLTAsMCArMSw4NDkgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0xMDI0IChsb2c9MCkKK0ZyYWdtZW50IHNpemU9MTAyNCAobG9nPTApCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworODE5MiBpbm9kZXMsIDEzMTA3MiBibG9ja3MKKzY1NTMgYmxvY2tzICg1LjAwJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyCitGaXJzdCBkYXRhIGJsb2NrPTEKK01heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9MjIyODIyNAorMTI4IGJsb2NrIGdyb3VwcworMTAyNCBibG9ja3MgcGVyIGdyb3VwLCAxMDI0IGZyYWdtZW50cyBwZXIgZ3JvdXAKKzY0IGlub2RlcyBwZXIgZ3JvdXAKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwkxMDI1LCAzMDczLCA1MTIxLCA3MTY5LCA5MjE3LCAyNTYwMSwgMjc2NDksIDUwMTc3LCA4Mjk0NSwgMTI4MDAxCisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAgICAgCAgICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAgIAgICAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgICAgCAgICAgICGRvbmUKKworRmlsZXN5c3RlbSBmZWF0dXJlczogZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgNjRiaXQgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS84MTkyIGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDI5OC8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgZXh0ZW50IDY0Yml0IHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgODE5MgorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjY3NzQKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgODE4MQorRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorR3JvdXAgZGVzY3JpcHRvciBzaXplOiAgICAxMjgKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDEwMjQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTAyNAorSW5vZGVzIHBlciBncm91cDogICAgICAgICA2NAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICA4CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyNCkKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMTcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxOC0yNzMKKyAgQmxvY2sgYml0bWFwIGF0IDI3NCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAyNzUgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDI3Ni0yODMgKCsyNzUpCisgIDcyNyBmcmVlIGJsb2NrcywgNTMgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5OC0xMDI0CisgIEZyZWUgaW5vZGVzOiAxMi02NAorR3JvdXAgMTogKEJsb2NrcyAxMDI1LTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEwMjUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEwMjYtMTA0MQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEwNDItMTI5NworICBCbG9jayBiaXRtYXAgYXQgMTI5OCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAxMjk5ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAxMzAwLTEzMDcgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMDgtMjA0OAorICBGcmVlIGlub2RlczogNjUtMTI4CitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwNTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1OS0zMDcyCisgIEZyZWUgaW5vZGVzOiAxMjktMTkyCitHcm91cCAzOiAoQmxvY2tzIDMwNzMtNDA5NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzA3MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMzA3NC0zMDg5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzA5MC0zMzQ1CisgIEJsb2NrIGJpdG1hcCBhdCAzMzQ2ICgrMjczKSwgSW5vZGUgYml0bWFwIGF0IDMzNDcgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDMzNDgtMzM1NSAoKzI3NSkKKyAgNzQxIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM1Ni00MDk2CisgIEZyZWUgaW5vZGVzOiAxOTMtMjU2CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEwNy01MTIwCisgIEZyZWUgaW5vZGVzOiAyNTctMzIwCitHcm91cCA1OiAoQmxvY2tzIDUxMjEtNjE0NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTEyMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTEyMi01MTM3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTEzOC01MzkzCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzk0ICgrMjczKSwgSW5vZGUgYml0bWFwIGF0IDUzOTUgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDUzOTYtNTQwMyAoKzI3NSkKKyAgNzQxIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTQwNC02MTQ0CisgIEZyZWUgaW5vZGVzOiAzMjEtMzg0CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE1NS03MTY4CisgIEZyZWUgaW5vZGVzOiAzODUtNDQ4CitHcm91cCA3OiAoQmxvY2tzIDcxNjktODE5MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzE2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzE3MC03MTg1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzE4Ni03NDQxCisgIEJsb2NrIGJpdG1hcCBhdCA3NDQyICgrMjczKSwgSW5vZGUgYml0bWFwIGF0IDc0NDMgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDc0NDQtNzQ1MSAoKzI3NSkKKyAgNzQxIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQ1Mi04MTkyCisgIEZyZWUgaW5vZGVzOiA0NDktNTEyCitHcm91cCA4OiAoQmxvY2tzIDgxOTMtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgyMDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIwMy05MjE2CisgIEZyZWUgaW5vZGVzOiA1MTMtNTc2CitHcm91cCA5OiAoQmxvY2tzIDkyMTctMTAyNDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDkyMTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDkyMTgtOTIzMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDkyMzQtOTQ4OQorICBCbG9jayBiaXRtYXAgYXQgOTQ5MCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCA5NDkxICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCA5NDkyLTk0OTkgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MDAtMTAyNDAKKyAgRnJlZSBpbm9kZXM6IDU3Ny02NDAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNTEtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDY0MS03MDQKK0dyb3VwIDExOiAoQmxvY2tzIDExMjY1LTEyMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEyNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEyNjctMTEyNzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNzUtMTIyODgKKyAgRnJlZSBpbm9kZXM6IDcwNS03NjgKK0dyb3VwIDEyOiAoQmxvY2tzIDEyMjg5LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIyOTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIyOTktMTMzMTIKKyAgRnJlZSBpbm9kZXM6IDc2OS04MzIKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzMjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzMjMtMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDgzMy04OTYKK0dyb3VwIDE0OiAoQmxvY2tzIDE0MzM3LTE1MzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQzMzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQzMzktMTQzNDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzNDctMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDg5Ny05NjAKK0dyb3VwIDE1OiAoQmxvY2tzIDE1MzYxLTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzNzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUzNzEtMTYzODQKKyAgRnJlZSBpbm9kZXM6IDk2MS0xMDI0CitHcm91cCAxNjogKEJsb2NrcyAxNjM4NS0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2Mzk0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2Mzk1LTE3NDA4CisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwODgKK0dyb3VwIDE3OiAoQmxvY2tzIDE3NDA5LTE4NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTc0MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc0MTEtMTc0MTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc0MTktMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDEwODktMTE1MgorR3JvdXAgMTg6IChCbG9ja3MgMTg0MzMtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxODQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg0MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODQzNS0xODQ0MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQ0My0xOTQ1NgorICBGcmVlIGlub2RlczogMTE1My0xMjE2CitHcm91cCAxOTogKEJsb2NrcyAxOTQ1Ny0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDY2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NDY3LTIwNDgwCisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyODAKK0dyb3VwIDIwOiAoQmxvY2tzIDIwNDgxLTIxNTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA0ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA0ODMtMjA0OTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA0OTEtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTM0NAorR3JvdXAgMjE6IChCbG9ja3MgMjE1MDUtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTUwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjE1MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTUwNy0yMTUxNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUxNS0yMjUyOAorICBGcmVlIGlub2RlczogMTM0NS0xNDA4CitHcm91cCAyMjogKEJsb2NrcyAyMjUyOS0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTM4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNTM5LTIzNTUyCisgIEZyZWUgaW5vZGVzOiAxNDA5LTE0NzIKK0dyb3VwIDIzOiAoQmxvY2tzIDIzNTUzLTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMjM1NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzNTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM1NTUtMjM1NjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjM1NjMtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDE0NzMtMTUzNgorR3JvdXAgMjQ6IChCbG9ja3MgMjQ1NzctMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNDU3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQ1NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDU3OS0yNDU4NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDU4Ny0yNTYwMAorICBGcmVlIGlub2RlczogMTUzNy0xNjAwCitHcm91cCAyNTogKEJsb2NrcyAyNTYwMS0yNjYyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU2MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1NjAyLTI1NjE3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjU2MTgtMjU4NzMKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODc0ICgrMjczKSwgSW5vZGUgYml0bWFwIGF0IDI1ODc1ICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAyNTg3Ni0yNTg4MyAoKzI3NSkKKyAgNzQxIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU4ODQtMjY2MjQKKyAgRnJlZSBpbm9kZXM6IDE2MDEtMTY2NAorR3JvdXAgMjY6IChCbG9ja3MgMjY2MjUtMjc2NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjYyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjY2MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNy0yNjYzNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjYzNS0yNzY0OAorICBGcmVlIGlub2RlczogMTY2NS0xNzI4CitHcm91cCAyNzogKEJsb2NrcyAyNzY0OS0yODY3MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjc2NDksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI3NjUwLTI3NjY1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjc2NjYtMjc5MjEKKyAgQmxvY2sgYml0bWFwIGF0IDI3OTIyICgrMjczKSwgSW5vZGUgYml0bWFwIGF0IDI3OTIzICgrMjc0KQorICBJbm9kZSB0YWJsZSBhdCAyNzkyNC0yNzkzMSAoKzI3NSkKKyAgNzQxIGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc5MzItMjg2NzIKKyAgRnJlZSBpbm9kZXM6IDE3MjktMTc5MgorR3JvdXAgMjg6IChCbG9ja3MgMjg2NzMtMjk2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyODY3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODY3NS0yODY4MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODY4My0yOTY5NgorICBGcmVlIGlub2RlczogMTc5My0xODU2CitHcm91cCAyOTogKEJsb2NrcyAyOTY5Ny0zMDcyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI5Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTY5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5Njk5LTI5NzA2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NzA3LTMwNzIwCisgIEZyZWUgaW5vZGVzOiAxODU3LTE5MjAKK0dyb3VwIDMwOiAoQmxvY2tzIDMwNzIxLTMxNzQ0KQorICBCbG9jayBiaXRtYXAgYXQgMzA3MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3MjMtMzA3MzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3MzEtMzE3NDQKKyAgRnJlZSBpbm9kZXM6IDE5MjEtMTk4NAorR3JvdXAgMzE6IChCbG9ja3MgMzE3NDUtMzI3NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMTc0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzE3NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMTc0Ny0zMTc1NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc1NS0zMjc2OAorICBGcmVlIGlub2RlczogMTk4NS0yMDQ4CitHcm91cCAzMjogKEJsb2NrcyAzMjc2OS0zMzc5MikKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMyNzc4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyNzc5LTMzNzkyCisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIxMTIKK0dyb3VwIDMzOiAoQmxvY2tzIDMzNzkzLTM0ODE2KQorICBCbG9jayBiaXRtYXAgYXQgMzM3OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzNzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzM3OTUtMzM4MDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM4MDMtMzQ4MTYKKyAgRnJlZSBpbm9kZXM6IDIxMTMtMjE3NgorR3JvdXAgMzQ6IChCbG9ja3MgMzQ4MTctMzU4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNDgxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzQ4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNDgxOS0zNDgyNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDgyNy0zNTg0MAorICBGcmVlIGlub2RlczogMjE3Ny0yMjQwCitHcm91cCAzNTogKEJsb2NrcyAzNTg0MS0zNjg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1ODQzLTM1ODUwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1ODUxLTM2ODY0CisgIEZyZWUgaW5vZGVzOiAyMjQxLTIzMDQKK0dyb3VwIDM2OiAoQmxvY2tzIDM2ODY1LTM3ODg4KQorICBCbG9jayBiaXRtYXAgYXQgMzY4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM2ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzY4NjctMzY4NzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzY4NzUtMzc4ODgKKyAgRnJlZSBpbm9kZXM6IDIzMDUtMjM2OAorR3JvdXAgMzc6IChCbG9ja3MgMzc4ODktMzg5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzNzg4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzc4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNzg5MS0zNzg5OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzg5OS0zODkxMgorICBGcmVlIGlub2RlczogMjM2OS0yNDMyCitHcm91cCAzODogKEJsb2NrcyAzODkxMy0zOTkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDM4OTEzICgrMCksIElub2RlIGJpdG1hcCBhdCAzODkxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4OTE1LTM4OTIyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4OTIzLTM5OTM2CisgIEZyZWUgaW5vZGVzOiAyNDMzLTI0OTYKK0dyb3VwIDM5OiAoQmxvY2tzIDM5OTM3LTQwOTYwKQorICBCbG9jayBiaXRtYXAgYXQgMzk5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM5OTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzk5MzktMzk5NDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk5NDctNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDI0OTctMjU2MAorR3JvdXAgNDA6IChCbG9ja3MgNDA5NjEtNDE5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDA5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2My00MDk3MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MDk3MS00MTk4NAorICBGcmVlIGlub2RlczogMjU2MS0yNjI0CitHcm91cCA0MTogKEJsb2NrcyA0MTk4NS00MzAwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxOTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MTk4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQxOTg3LTQxOTk0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxOTk1LTQzMDA4CisgIEZyZWUgaW5vZGVzOiAyNjI1LTI2ODgKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDMwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDMwMTEtNDMwMTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDMwMTktNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDI2ODktMjc1MgorR3JvdXAgNDM6IChCbG9ja3MgNDQwMzMtNDUwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCA0NDAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDQwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NDAzNS00NDA0MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NDA0My00NTA1NgorICBGcmVlIGlub2RlczogMjc1My0yODE2CitHcm91cCA0NDogKEJsb2NrcyA0NTA1Ny00NjA4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ1MDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NTA1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ1MDU5LTQ1MDY2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ1MDY3LTQ2MDgwCisgIEZyZWUgaW5vZGVzOiAyODE3LTI4ODAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDYwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYwODMtNDYwOTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYwOTEtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDI4ODEtMjk0NAorR3JvdXAgNDY6IChCbG9ja3MgNDcxMDUtNDgxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCA0NzEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDcxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NzEwNy00NzExNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NzExNS00ODEyOAorICBGcmVlIGlub2RlczogMjk0NS0zMDA4CitHcm91cCA0NzogKEJsb2NrcyA0ODEyOS00OTE1MikKKyAgQmxvY2sgYml0bWFwIGF0IDQ4MTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODEzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ4MTMxLTQ4MTM4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ4MTM5LTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAzMDA5LTMwNzIKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDkxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ5MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDkxNTUtNDkxNjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDkxNjMtNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDMwNzMtMzEzNgorR3JvdXAgNDk6IChCbG9ja3MgNTAxNzctNTEyMDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUwMTc3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MDE3OC01MDE5MworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUwMTk0LTUwNDQ5CisgIEJsb2NrIGJpdG1hcCBhdCA1MDQ1MCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCA1MDQ1MSAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgNTA0NTItNTA0NTkgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwNDYwLTUxMjAwCisgIEZyZWUgaW5vZGVzOiAzMTM3LTMyMDAKK0dyb3VwIDUwOiAoQmxvY2tzIDUxMjAxLTUyMjI0KQorICBCbG9jayBiaXRtYXAgYXQgNTEyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMDMtNTEyMTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyMTEtNTIyMjQKKyAgRnJlZSBpbm9kZXM6IDMyMDEtMzI2NAorR3JvdXAgNTE6IChCbG9ja3MgNTIyMjUtNTMyNDgpCisgIEJsb2NrIGJpdG1hcCBhdCA1MjIyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTIyMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MjIyNy01MjIzNCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MjIzNS01MzI0OAorICBGcmVlIGlub2RlczogMzI2NS0zMzI4CitHcm91cCA1MjogKEJsb2NrcyA1MzI0OS01NDI3MikKKyAgQmxvY2sgYml0bWFwIGF0IDUzMjQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MzI1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUzMjUxLTUzMjU4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjU5LTU0MjcyCisgIEZyZWUgaW5vZGVzOiAzMzI5LTMzOTIKK0dyb3VwIDUzOiAoQmxvY2tzIDU0MjczLTU1Mjk2KQorICBCbG9jayBiaXRtYXAgYXQgNTQyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU0Mjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTQyNzUtNTQyODIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTQyODMtNTUyOTYKKyAgRnJlZSBpbm9kZXM6IDMzOTMtMzQ1NgorR3JvdXAgNTQ6IChCbG9ja3MgNTUyOTctNTYzMjApCisgIEJsb2NrIGJpdG1hcCBhdCA1NTI5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTUyOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NTI5OS01NTMwNiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NTMwNy01NjMyMAorICBGcmVlIGlub2RlczogMzQ1Ny0zNTIwCitHcm91cCA1NTogKEJsb2NrcyA1NjMyMS01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjMyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU2MzIzLTU2MzMwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzMxLTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAzNTIxLTM1ODQKK0dyb3VwIDU2OiAoQmxvY2tzIDU3MzQ1LTU4MzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTczNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU3MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTczNDctNTczNTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTczNTUtNTgzNjgKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzY0OAorR3JvdXAgNTc6IChCbG9ja3MgNTgzNjktNTkzOTIpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODM2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTgzNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1ODM3MS01ODM3OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1ODM3OS01OTM5MgorICBGcmVlIGlub2RlczogMzY0OS0zNzEyCitHcm91cCA1ODogKEJsb2NrcyA1OTM5My02MDQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCA1OTM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU5Mzk1LTU5NDAyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDAzLTYwNDE2CisgIEZyZWUgaW5vZGVzOiAzNzEzLTM3NzYKK0dyb3VwIDU5OiAoQmxvY2tzIDYwNDE3LTYxNDQwKQorICBCbG9jayBiaXRtYXAgYXQgNjA0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYwNDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjA0MTktNjA0MjYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjA0MjctNjE0NDAKKyAgRnJlZSBpbm9kZXM6IDM3NzctMzg0MAorR3JvdXAgNjA6IChCbG9ja3MgNjE0NDEtNjI0NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ0My02MTQ1MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTQ1MS02MjQ2NAorICBGcmVlIGlub2RlczogMzg0MS0zOTA0CitHcm91cCA2MTogKEJsb2NrcyA2MjQ2NS02MzQ4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MjQ2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYyNDY3LTYyNDc0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDc1LTYzNDg4CisgIEZyZWUgaW5vZGVzOiAzOTA1LTM5NjgKK0dyb3VwIDYyOiAoQmxvY2tzIDYzNDg5LTY0NTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjM0ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYzNDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjM0OTEtNjM0OTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjM0OTktNjQ1MTIKKyAgRnJlZSBpbm9kZXM6IDM5NjktNDAzMgorR3JvdXAgNjM6IChCbG9ja3MgNjQ1MTMtNjU1MzYpCisgIEJsb2NrIGJpdG1hcCBhdCA2NDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjQ1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxNS02NDUyMiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NDUyMy02NTUzNgorICBGcmVlIGlub2RlczogNDAzMy00MDk2CitHcm91cCA2NDogKEJsb2NrcyA2NTUzNy02NjU2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDY1NTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY1NTM5LTY1NTQ2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1NTQ3LTY2NTYwCisgIEZyZWUgaW5vZGVzOiA0MDk3LTQxNjAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBCbG9jayBiaXRtYXAgYXQgNjY1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY2NTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjY1NjMtNjY1NzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjY1NzEtNjc1ODQKKyAgRnJlZSBpbm9kZXM6IDQxNjEtNDIyNAorR3JvdXAgNjY6IChCbG9ja3MgNjc1ODUtNjg2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCA2NzU4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjc1ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NzU4Ny02NzU5NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NzU5NS02ODYwOAorICBGcmVlIGlub2RlczogNDIyNS00Mjg4CitHcm91cCA2NzogKEJsb2NrcyA2ODYwOS02OTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDY4NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2ODYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY4NjExLTY4NjE4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjE5LTY5NjMyCisgIEZyZWUgaW5vZGVzOiA0Mjg5LTQzNTIKK0dyb3VwIDY4OiAoQmxvY2tzIDY5NjMzLTcwNjU2KQorICBCbG9jayBiaXRtYXAgYXQgNjk2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY5NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjk2MzUtNjk2NDIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjk2NDMtNzA2NTYKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDQxNgorR3JvdXAgNjk6IChCbG9ja3MgNzA2NTctNzE2ODApCisgIEJsb2NrIGJpdG1hcCBhdCA3MDY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzA2NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MDY1OS03MDY2NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MDY2Ny03MTY4MAorICBGcmVlIGlub2RlczogNDQxNy00NDgwCitHcm91cCA3MDogKEJsb2NrcyA3MTY4MS03MjcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjgxICgrMCksIElub2RlIGJpdG1hcCBhdCA3MTY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNjgzLTcxNjkwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNjkxLTcyNzA0CisgIEZyZWUgaW5vZGVzOiA0NDgxLTQ1NDQKK0dyb3VwIDcxOiAoQmxvY2tzIDcyNzA1LTczNzI4KQorICBCbG9jayBiaXRtYXAgYXQgNzI3MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcyNzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzI3MDctNzI3MTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzI3MTUtNzM3MjgKKyAgRnJlZSBpbm9kZXM6IDQ1NDUtNDYwOAorR3JvdXAgNzI6IChCbG9ja3MgNzM3MjktNzQ3NTIpCisgIEJsb2NrIGJpdG1hcCBhdCA3MzcyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzM3MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MzczMS03MzczOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MzczOS03NDc1MgorICBGcmVlIGlub2RlczogNDYwOS00NjcyCitHcm91cCA3MzogKEJsb2NrcyA3NDc1My03NTc3NikKKyAgQmxvY2sgYml0bWFwIGF0IDc0NzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA3NDc1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0NzU1LTc0NzYyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0NzYzLTc1Nzc2CisgIEZyZWUgaW5vZGVzOiA0NjczLTQ3MzYKK0dyb3VwIDc0OiAoQmxvY2tzIDc1Nzc3LTc2ODAwKQorICBCbG9jayBiaXRtYXAgYXQgNzU3NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc1Nzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzU3NzktNzU3ODYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzU3ODctNzY4MDAKKyAgRnJlZSBpbm9kZXM6IDQ3MzctNDgwMAorR3JvdXAgNzU6IChCbG9ja3MgNzY4MDEtNzc4MjQpCisgIEJsb2NrIGJpdG1hcCBhdCA3NjgwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzY4MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NjgwMy03NjgxMCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NjgxMS03NzgyNAorICBGcmVlIGlub2RlczogNDgwMS00ODY0CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NzgyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI3LTc3ODM0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc3ODM1LTc4ODQ4CisgIEZyZWUgaW5vZGVzOiA0ODY1LTQ5MjgKK0dyb3VwIDc3OiAoQmxvY2tzIDc4ODQ5LTc5ODcyKQorICBCbG9jayBiaXRtYXAgYXQgNzg4NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc4ODUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzg4NTEtNzg4NTggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzg4NTktNzk4NzIKKyAgRnJlZSBpbm9kZXM6IDQ5MjktNDk5MgorR3JvdXAgNzg6IChCbG9ja3MgNzk4NzMtODA4OTYpCisgIEJsb2NrIGJpdG1hcCBhdCA3OTg3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzk4NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3OTg3NS03OTg4MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3OTg4My04MDg5NgorICBGcmVlIGlub2RlczogNDk5My01MDU2CitHcm91cCA3OTogKEJsb2NrcyA4MDg5Ny04MTkyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDgwODk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4MDg5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgwODk5LTgwOTA2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgwOTA3LTgxOTIwCisgIEZyZWUgaW5vZGVzOiA1MDU3LTUxMjAKK0dyb3VwIDgwOiAoQmxvY2tzIDgxOTIxLTgyOTQ0KQorICBCbG9jayBiaXRtYXAgYXQgODE5MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5MjMtODE5MzAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5MzEtODI5NDQKKyAgRnJlZSBpbm9kZXM6IDUxMjEtNTE4NAorR3JvdXAgODE6IChCbG9ja3MgODI5NDUtODM5NjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDgyOTQ1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4Mjk0Ni04Mjk2MQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgyOTYyLTgzMjE3CisgIEJsb2NrIGJpdG1hcCBhdCA4MzIxOCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCA4MzIxOSAoKzI3NCkKKyAgSW5vZGUgdGFibGUgYXQgODMyMjAtODMyMjcgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgzMjI4LTgzOTY4CisgIEZyZWUgaW5vZGVzOiA1MTg1LTUyNDgKK0dyb3VwIDgyOiAoQmxvY2tzIDgzOTY5LTg0OTkyKQorICBCbG9jayBiaXRtYXAgYXQgODM5NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgzOTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODM5NzEtODM5NzggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODM5NzktODQ5OTIKKyAgRnJlZSBpbm9kZXM6IDUyNDktNTMxMgorR3JvdXAgODM6IChCbG9ja3MgODQ5OTMtODYwMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDk5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ5OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDk5NS04NTAwMiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAwMy04NjAxNgorICBGcmVlIGlub2RlczogNTMxMy01Mzc2CitHcm91cCA4NDogKEJsb2NrcyA4NjAxNy04NzA0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDg2MDE3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NjAxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg2MDE5LTg2MDI2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg2MDI3LTg3MDQwCisgIEZyZWUgaW5vZGVzOiA1Mzc3LTU0NDAKK0dyb3VwIDg1OiAoQmxvY2tzIDg3MDQxLTg4MDY0KQorICBCbG9jayBiaXRtYXAgYXQgODcwNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg3MDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODcwNDMtODcwNTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODcwNTEtODgwNjQKKyAgRnJlZSBpbm9kZXM6IDU0NDEtNTUwNAorR3JvdXAgODY6IChCbG9ja3MgODgwNjUtODkwODgpCisgIEJsb2NrIGJpdG1hcCBhdCA4ODA2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODgwNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4ODA2Ny04ODA3NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA3NS04OTA4OAorICBGcmVlIGlub2RlczogNTUwNS01NTY4CitHcm91cCA4NzogKEJsb2NrcyA4OTA4OS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDg5MDg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTA5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg5MDkxLTg5MDk4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg5MDk5LTkwMTEyCisgIEZyZWUgaW5vZGVzOiA1NTY5LTU2MzIKK0dyb3VwIDg4OiAoQmxvY2tzIDkwMTEzLTkxMTM2KQorICBCbG9jayBiaXRtYXAgYXQgOTAxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkwMTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTAxMTUtOTAxMjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTAxMjMtOTExMzYKKyAgRnJlZSBpbm9kZXM6IDU2MzMtNTY5NgorR3JvdXAgODk6IChCbG9ja3MgOTExMzctOTIxNjApCisgIEJsb2NrIGJpdG1hcCBhdCA5MTEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTExMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MTEzOS05MTE0NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE0Ny05MjE2MAorICBGcmVlIGlub2RlczogNTY5Ny01NzYwCitHcm91cCA5MDogKEJsb2NrcyA5MjE2MS05MzE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA5MjE2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkyMTYzLTkyMTcwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkyMTcxLTkzMTg0CisgIEZyZWUgaW5vZGVzOiA1NzYxLTU4MjQKK0dyb3VwIDkxOiAoQmxvY2tzIDkzMTg1LTk0MjA4KQorICBCbG9jayBiaXRtYXAgYXQgOTMxODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkzMTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTMxODctOTMxOTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTMxOTUtOTQyMDgKKyAgRnJlZSBpbm9kZXM6IDU4MjUtNTg4OAorR3JvdXAgOTI6IChCbG9ja3MgOTQyMDktOTUyMzIpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDIwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQyMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NDIxMS05NDIxOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDIxOS05NTIzMgorICBGcmVlIGlub2RlczogNTg4OS01OTUyCitHcm91cCA5MzogKEJsb2NrcyA5NTIzMy05NjI1NikKKyAgQmxvY2sgYml0bWFwIGF0IDk1MjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA5NTIzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk1MjM1LTk1MjQyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MjQzLTk2MjU2CisgIEZyZWUgaW5vZGVzOiA1OTUzLTYwMTYKK0dyb3VwIDk0OiAoQmxvY2tzIDk2MjU3LTk3MjgwKQorICBCbG9jayBiaXRtYXAgYXQgOTYyNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk2MjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTYyNTktOTYyNjYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTYyNjctOTcyODAKKyAgRnJlZSBpbm9kZXM6IDYwMTctNjA4MAorR3JvdXAgOTU6IChCbG9ja3MgOTcyODEtOTgzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTcyODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NzI4My05NzI5MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzI5MS05ODMwNAorICBGcmVlIGlub2RlczogNjA4MS02MTQ0CitHcm91cCA5NjogKEJsb2NrcyA5ODMwNS05OTMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDk4MzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5ODMwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk4MzA3LTk4MzE0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4MzE1LTk5MzI4CisgIEZyZWUgaW5vZGVzOiA2MTQ1LTYyMDgKK0dyb3VwIDk3OiAoQmxvY2tzIDk5MzI5LTEwMDM1MikKKyAgQmxvY2sgYml0bWFwIGF0IDk5MzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA5OTMzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk5MzMxLTk5MzM4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk5MzM5LTEwMDM1MgorICBGcmVlIGlub2RlczogNjIwOS02MjcyCitHcm91cCA5ODogKEJsb2NrcyAxMDAzNTMtMTAxMzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTAwMzUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDAzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDAzNTUtMTAwMzYyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM2My0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDYyNzMtNjMzNgorR3JvdXAgOTk6IChCbG9ja3MgMTAxMzc3LTEwMjQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMTM3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAxMzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAxMzc5LTEwMTM4NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDEzODctMTAyNDAwCisgIEZyZWUgaW5vZGVzOiA2MzM3LTY0MDAKK0dyb3VwIDEwMDogKEJsb2NrcyAxMDI0MDEtMTAzNDI0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDAxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI0MDMtMTAyNDEwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMjQxMS0xMDM0MjQKKyAgRnJlZSBpbm9kZXM6IDY0MDEtNjQ2NAorR3JvdXAgMTAxOiAoQmxvY2tzIDEwMzQyNS0xMDQ0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDM0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMzQyNy0xMDM0MzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDM1LTEwNDQ0OAorICBGcmVlIGlub2RlczogNjQ2NS02NTI4CitHcm91cCAxMDI6IChCbG9ja3MgMTA0NDQ5LTEwNTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDQ0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0NDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA0NDUxLTEwNDQ1OCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDQ0NTktMTA1NDcyCisgIEZyZWUgaW5vZGVzOiA2NTI5LTY1OTIKK0dyb3VwIDEwMzogKEJsb2NrcyAxMDU0NzMtMTA2NDk2KQorICBCbG9jayBiaXRtYXAgYXQgMTA1NDczICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDU0NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDU0NzUtMTA1NDgyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNTQ4My0xMDY0OTYKKyAgRnJlZSBpbm9kZXM6IDY1OTMtNjY1NgorR3JvdXAgMTA0OiAoQmxvY2tzIDEwNjQ5Ny0xMDc1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY1MDYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTA3LTEwNzUyMAorICBGcmVlIGlub2RlczogNjY1Ny02NzIwCitHcm91cCAxMDU6IChCbG9ja3MgMTA3NTIxLTEwODU0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwNzUyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA3NTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTIzLTEwNzUzMCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1MzEtMTA4NTQ0CisgIEZyZWUgaW5vZGVzOiA2NzIxLTY3ODQKK0dyb3VwIDEwNjogKEJsb2NrcyAxMDg1NDUtMTA5NTY4KQorICBCbG9jayBiaXRtYXAgYXQgMTA4NTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDg1NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDg1NDctMTA4NTU0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwODU1NS0xMDk1NjgKKyAgRnJlZSBpbm9kZXM6IDY3ODUtNjg0OAorR3JvdXAgMTA3OiAoQmxvY2tzIDEwOTU2OS0xMTA1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDk1NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwOTU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwOTU3MS0xMDk1NzggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NTc5LTExMDU5MgorICBGcmVlIGlub2RlczogNjg0OS02OTEyCitHcm91cCAxMDg6IChCbG9ja3MgMTEwNTkzLTExMTYxNikKKyAgQmxvY2sgYml0bWFwIGF0IDExMDU5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEwNTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwNTk1LTExMDYwMiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTA2MDMtMTExNjE2CisgIEZyZWUgaW5vZGVzOiA2OTEzLTY5NzYKK0dyb3VwIDEwOTogKEJsb2NrcyAxMTE2MTctMTEyNjQwKQorICBCbG9jayBiaXRtYXAgYXQgMTExNjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTE2MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTE2MTktMTExNjI2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMTYyNy0xMTI2NDAKKyAgRnJlZSBpbm9kZXM6IDY5NzctNzA0MAorR3JvdXAgMTEwOiAoQmxvY2tzIDExMjY0MS0xMTM2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY0My0xMTI2NTAgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjUxLTExMzY2NAorICBGcmVlIGlub2RlczogNzA0MS03MTA0CitHcm91cCAxMTE6IChCbG9ja3MgMTEzNjY1LTExNDY4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMzY2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEzNjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEzNjY3LTExMzY3NCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTM2NzUtMTE0Njg4CisgIEZyZWUgaW5vZGVzOiA3MTA1LTcxNjgKK0dyb3VwIDExMjogKEJsb2NrcyAxMTQ2ODktMTE1NzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTE0Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTQ2OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTQ2OTEtMTE0Njk4ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNDY5OS0xMTU3MTIKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzIzMgorR3JvdXAgMTEzOiAoQmxvY2tzIDExNTcxMy0xMTY3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTU3MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNTcxNS0xMTU3MjIgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzIzLTExNjczNgorICBGcmVlIGlub2RlczogNzIzMy03Mjk2CitHcm91cCAxMTQ6IChCbG9ja3MgMTE2NzM3LTExNzc2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNjczNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE2NzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE2NzM5LTExNjc0NiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTY3NDctMTE3NzYwCisgIEZyZWUgaW5vZGVzOiA3Mjk3LTczNjAKK0dyb3VwIDExNTogKEJsb2NrcyAxMTc3NjEtMTE4Nzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTE3NzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTc3NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTc3NjMtMTE3NzcwICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNzc3MS0xMTg3ODQKKyAgRnJlZSBpbm9kZXM6IDczNjEtNzQyNAorR3JvdXAgMTE2OiAoQmxvY2tzIDExODc4NS0xMTk4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTg3ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExODc4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExODc4Ny0xMTg3OTQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4Nzk1LTExOTgwOAorICBGcmVlIGlub2RlczogNzQyNS03NDg4CitHcm91cCAxMTc6IChCbG9ja3MgMTE5ODA5LTEyMDgzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExOTgwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE5ODEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE5ODExLTExOTgxOCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTk4MTktMTIwODMyCisgIEZyZWUgaW5vZGVzOiA3NDg5LTc1NTIKK0dyb3VwIDExODogKEJsb2NrcyAxMjA4MzMtMTIxODU2KQorICBCbG9jayBiaXRtYXAgYXQgMTIwODMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjA4MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjA4MzUtMTIwODQyICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMDg0My0xMjE4NTYKKyAgRnJlZSBpbm9kZXM6IDc1NTMtNzYxNgorR3JvdXAgMTE5OiAoQmxvY2tzIDEyMTg1Ny0xMjI4ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMjE4NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMTg1OS0xMjE4NjYgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODY3LTEyMjg4MAorICBGcmVlIGlub2RlczogNzYxNy03NjgwCitHcm91cCAxMjA6IChCbG9ja3MgMTIyODgxLTEyMzkwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgzLTEyMjg5MCAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI4OTEtMTIzOTA0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc3NDQKK0dyb3VwIDEyMTogKEJsb2NrcyAxMjM5MDUtMTI0OTI4KQorICBCbG9jayBiaXRtYXAgYXQgMTIzOTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjM5MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjM5MDctMTIzOTE0ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzkxNS0xMjQ5MjgKKyAgRnJlZSBpbm9kZXM6IDc3NDUtNzgwOAorR3JvdXAgMTIyOiAoQmxvY2tzIDEyNDkyOS0xMjU5NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ5MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNDkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNDkzMS0xMjQ5MzggKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTM5LTEyNTk1MgorICBGcmVlIGlub2RlczogNzgwOS03ODcyCitHcm91cCAxMjM6IChCbG9ja3MgMTI1OTUzLTEyNjk3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyNTk1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI1OTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI1OTU1LTEyNTk2MiAoKzIpCisgIDEwMTQgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjU5NjMtMTI2OTc2CisgIEZyZWUgaW5vZGVzOiA3ODczLTc5MzYKK0dyb3VwIDEyNDogKEJsb2NrcyAxMjY5NzctMTI4MDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTI2OTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjY5NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjY5NzktMTI2OTg2ICgrMikKKyAgMTAxNCBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNjk4Ny0xMjgwMDAKKyAgRnJlZSBpbm9kZXM6IDc5MzctODAwMAorR3JvdXAgMTI1OiAoQmxvY2tzIDEyODAwMS0xMjkwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODAwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTI4MDAyLTEyODAxNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEyODAxOC0xMjgyNzMKKyAgQmxvY2sgYml0bWFwIGF0IDEyODI3NCAoKzI3MyksIElub2RlIGJpdG1hcCBhdCAxMjgyNzUgKCsyNzQpCisgIElub2RlIHRhYmxlIGF0IDEyODI3Ni0xMjgyODMgKCsyNzUpCisgIDc0MSBmcmVlIGJsb2NrcywgNjQgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODI4NC0xMjkwMjQKKyAgRnJlZSBpbm9kZXM6IDgwMDEtODA2NAorR3JvdXAgMTI2OiAoQmxvY2tzIDEyOTAyNS0xMzAwNDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjkwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyOTAyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyOTAyNy0xMjkwMzQgKCsyKQorICAxMDE0IGZyZWUgYmxvY2tzLCA2NCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI5MDM1LTEzMDA0OAorICBGcmVlIGlub2RlczogODA2NS04MTI4CitHcm91cCAxMjc6IChCbG9ja3MgMTMwMDQ5LTEzMTA3MSkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMDA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMwMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwMDUxLTEzMDA1OCAoKzIpCisgIDEwMTMgZnJlZSBibG9ja3MsIDY0IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzAwNTktMTMxMDcxCisgIEZyZWUgaW5vZGVzOiA4MTI5LTgxOTIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fZGVzY19zaXplXzEyOC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzZGVmOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX2Rlc2Nfc2l6ZV8xMjgvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049ImVuYWJsZSAxMjgtYnl0ZSBncm91cCBkZXNjcmlwdG9yIG9uIG1rZnMiCitGU19TSVpFPTEzMTA3MgorTUtFMkZTX09QVFM9Ii1iIDEwMjQgLU8gNjRiaXQsZXh0ZW50cyAtZyAxMDI0IC1OIDgxOTIgLUUgZGVzY19zaXplPTEyOCIKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9leHRlbnRfam91cm5hbC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQ3YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvZXhwZWN0LjEKQEAgLTAsMCArMSwxMjQgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0xMDI0IChsb2c9MCkKK0ZyYWdtZW50IHNpemU9MTAyNCAobG9nPTApCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworMTYzODQgaW5vZGVzLCA2NTUzNiBibG9ja3MKKzMyNzYgYmxvY2tzICg1LjAwJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyCitGaXJzdCBkYXRhIGJsb2NrPTEKK01heGltdW0gZmlsZXN5c3RlbSBibG9ja3M9NjcxMDg4NjQKKzggYmxvY2sgZ3JvdXBzCis4MTkyIGJsb2NrcyBwZXIgZ3JvdXAsIDgxOTIgZnJhZ21lbnRzIHBlciBncm91cAorMjA0OCBpbm9kZXMgcGVyIGdyb3VwCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NQorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ3JlYXRpbmcgam91cm5hbCAoNDA5NiBibG9ja3MpOiBkb25lCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgIAgICGRvbmUKKworRmlsZXN5c3RlbSBmZWF0dXJlczogaGFzX2pvdXJuYWwgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBleHRlbnQgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNjM4NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDc0NjAvNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGhhc19qb3VybmFsIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgZXh0ZW50IHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTYzODQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMzI3NgorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA1ODA3NgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAxNjM3MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAyNTUKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICA4MTkyCitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDIwNDgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMjU2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0pvdXJuYWwgaW5vZGU6ICAgICAgICAgICAgOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorSm91cm5hbCBiYWNrdXA6ICAgICAgICAgICBpbm9kZSBibG9ja3MKK0pvdXJuYWwgZmVhdHVyZXM6ICAgICAgICAgKG5vbmUpCitKb3VybmFsIHNpemU6ICAgICAgICAgICAgIDQwOTZrCitKb3VybmFsIGxlbmd0aDogICAgICAgICAgIDQwOTYKK0pvdXJuYWwgc2VxdWVuY2U6ICAgICAgICAgMHgwMDAwMDAwMQorSm91cm5hbCBzdGFydDogICAgICAgICAgICAwCisKKworR3JvdXAgMDogKEJsb2NrcyAxLTgxOTIpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzLTI1NworICBCbG9jayBiaXRtYXAgYXQgMjU4ICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDI1OSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgMjYwLTUxNSAoKzI1OSkKKyAgNzY2MyBmcmVlIGJsb2NrcywgMjAzNyBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTMwLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDEyLTIwNDgKK0dyb3VwIDE6IChCbG9ja3MgODE5My0xNjM4NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgODE5MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODE5NC04MTk0CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgODE5NS04NDQ5CisgIEJsb2NrIGJpdG1hcCBhdCA4NDUwICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDg0NTEgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDg0NTItODcwNyAoKzI1OSkKKyAgNzY3NyBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODcwOC0xNjM4NAorICBGcmVlIGlub2RlczogMjA0OS00MDk2CitHcm91cCAyOiAoQmxvY2tzIDE2Mzg1LTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTY2NDIgKCsyKQorICAzODM4IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDczOS0yNDU3NgorICBGcmVlIGlub2RlczogNDA5Ny02MTQ0CitHcm91cCAzOiAoQmxvY2tzIDI0NTc3LTMyNzY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNDU3NywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjQ1NzgtMjQ1NzgKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNDU3OS0yNDgzMworICBCbG9jayBiaXRtYXAgYXQgMjQ4MzQgKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgMjQ4MzUgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDI0ODM2LTI1MDkxICgrMjU5KQorICA3Njc3IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTA5Mi0zMjc2OAorICBGcmVlIGlub2RlczogNjE0NS04MTkyCitHcm91cCA0OiAoQmxvY2tzIDMyNzY5LTQwOTYwKQorICBCbG9jayBiaXRtYXAgYXQgMzI3NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzEtMzMwMjYgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzAyNy00MDk2MAorICBGcmVlIGlub2RlczogODE5My0xMDI0MAorR3JvdXAgNTogKEJsb2NrcyA0MDk2MS00OTE1MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNDA5NjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDQwOTYyLTQwOTYyCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNDA5NjMtNDEyMTcKKyAgQmxvY2sgYml0bWFwIGF0IDQxMjE4ICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDQxMjE5ICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCA0MTIyMC00MTQ3NSAoKzI1OSkKKyAgNzY3NyBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDE0NzYtNDkxNTIKKyAgRnJlZSBpbm9kZXM6IDEwMjQxLTEyMjg4CitHcm91cCA2OiAoQmxvY2tzIDQ5MTUzLTU3MzQ0KQorICBCbG9jayBiaXRtYXAgYXQgNDkxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ5MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDkxNTUtNDk0MTAgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0OTQxMS01NzM0NAorICBGcmVlIGlub2RlczogMTIyODktMTQzMzYKK0dyb3VwIDc6IChCbG9ja3MgNTczNDUtNjU1MzUpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDU3MzQ1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1NzM0Ni01NzM0NgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDU3MzQ3LTU3NjAxCisgIEJsb2NrIGJpdG1hcCBhdCA1NzYwMiAoKzI1NyksIElub2RlIGJpdG1hcCBhdCA1NzYwMyAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgNTc2MDQtNTc4NTkgKCsyNTkpCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU3ODYwLTY1NTM1CisgIEZyZWUgaW5vZGVzOiAxNDMzNy0xNjM4NApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fZXh0ZW50X2pvdXJuYWwvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGNhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9leHRlbnRfam91cm5hbC9zY3JpcHQKQEAgLTAsMCArMSw0IEBACitERVNDUklQVElPTj0iZXh0ZW50LW1hcHBlZCBqb3VybmFsIgorRlNfU0laRT02NTUzNgorTUtFMkZTX09QVFM9Ii1PIGV4dGVudHMgLWoiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX2xhcmdlX2ZpbGUvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9sYXJnZV9maWxlL2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDk0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9sYXJnZV9maWxlL2V4cGVjdC4xCkBAIC0wLDAgKzEsNjYgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT00MDk2IChsb2c9MikKK0ZyYWdtZW50IHNpemU9NDA5NiAobG9nPTIpCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworNjQgaW5vZGVzLCAxNjM4NCBibG9ja3MKKzgxOSBibG9ja3MgKDUuMDAlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXIKK0ZpcnN0IGRhdGEgYmxvY2s9MAorTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz0xNjc3NzIxNgorMSBibG9jayBncm91cAorMzI3NjggYmxvY2tzIHBlciBncm91cCwgMzI3NjggZnJhZ21lbnRzIHBlciBncm91cAorNjQgaW5vZGVzIHBlciBncm91cAorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIGxhcmdlX2ZpbGUKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzY0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMTcvMTYzODQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIGxhcmdlX2ZpbGUKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDY0CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDgxOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxNjM2NworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA1MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAwCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDQwOTYKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgNDA5NgorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAzCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDMyNzY4CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDMyNzY4CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDY0CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDI1NgorUmVxdWlyZWQgZXh0cmEgaXNpemU6ICAgICAyOAorRGVzaXJlZCBleHRyYSBpc2l6ZTogICAgICAyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMC0xNjM4MykKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDAsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEtMQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDItNAorICBCbG9jayBiaXRtYXAgYXQgNSAoKzUpLCBJbm9kZSBiaXRtYXAgYXQgNiAoKzYpCisgIElub2RlIHRhYmxlIGF0IDctMTAgKCs3KQorICAxNjM2NyBmcmVlIGJsb2NrcywgNTMgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3LTE2MzgzCisgIEZyZWUgaW5vZGVzOiAxMi02NApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fbGFyZ2VfZmlsZS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvbV9sYXJnZV9maWxlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDViMmJhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fbGFyZ2VfZmlsZS9zY3JpcHQKQEAgLTAsMCArMSw3IEBACitERVNDUklQVElPTj0ibGFyZ2VmaWxlIGZzIHR5cGUiCitGU19TSVpFPTY1NTM2CitNS0UyRlNfREVWSUNFX1NFQ1RTSVpFPTIwNDgKK2V4cG9ydCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCitNS0UyRlNfT1BUUz0iLVQgbGFyZ2VmaWxlIgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCit1bnNldCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9tZXRhX2JnL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL21fbWV0YV9iZy9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzEwZDZlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fbWV0YV9iZy9leHBlY3QuMQpAQCAtMCwwICsxLDg0NSBAQAorRmlsZXN5c3RlbSBsYWJlbD0KK09TIHR5cGU6IExpbnV4CitCbG9jayBzaXplPTEwMjQgKGxvZz0wKQorRnJhZ21lbnQgc2l6ZT0xMDI0IChsb2c9MCkKK1N0cmlkZT0wIGJsb2NrcywgU3RyaXBlIHdpZHRoPTAgYmxvY2tzCiszMjc2OCBpbm9kZXMsIDEzMTA3MiBibG9ja3MKKzY1NTMgYmxvY2tzICg1LjAwJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyCitGaXJzdCBkYXRhIGJsb2NrPTEKKzEyOCBibG9jayBncm91cHMKKzEwMjQgYmxvY2tzIHBlciBncm91cCwgMTAyNCBmcmFnbWVudHMgcGVyIGdyb3VwCisyNTYgaW5vZGVzIHBlciBncm91cAorU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTEwMjUsIDMwNzMsIDUxMjEsIDcxNjksIDkyMTcsIDI1NjAxLCAyNzY0OSwgNTAxNzcsIDgyOTQ1LCAxMjgwMDEKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgICAICAgICAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAgICAgCAgICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCBmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICAgICAgICAICAgICAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciBkaXJfaW5kZXggZmlsZXR5cGUgbWV0YV9iZyBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyNzY4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDM4OS8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIGRpcl9pbmRleCBmaWxldHlwZSBtZXRhX2JnIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMzI3NjgKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTMxMDcyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDY1NTMKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMTI2NjgzCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDMyNzU3CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDEwMjQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTAyNAorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyNTYKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMzIKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDI0KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvciBhdCAyCisgIEJsb2NrIGJpdG1hcCBhdCAzICgrMiksIElub2RlIGJpdG1hcCBhdCA0ICgrMykKKyAgSW5vZGUgdGFibGUgYXQgNS0zNiAoKzQpCisgIDk3NSBmcmVlIGJsb2NrcywgMjQ1IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MC0xMDI0CisgIEZyZWUgaW5vZGVzOiAxMi0yNTYKK0dyb3VwIDE6IChCbG9ja3MgMTAyNS0yMDQ4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMDI1LCBHcm91cCBkZXNjcmlwdG9yIGF0IDEwMjYKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjcgKCsyKSwgSW5vZGUgYml0bWFwIGF0IDEwMjggKCszKQorICBJbm9kZSB0YWJsZSBhdCAxMDI5LTEwNjAgKCs0KQorICA5ODggZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2MS0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyNTctNTEyCitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA4My0zMDcyCisgIEZyZWUgaW5vZGVzOiA1MTMtNzY4CitHcm91cCAzOiAoQmxvY2tzIDMwNzMtNDA5NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzA3MworICBCbG9jayBiaXRtYXAgYXQgMzA3NCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgMzA3NSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDMwNzYtMzEwNyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTA4LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEzMS01MTIwCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEyODAKK0dyb3VwIDU6IChCbG9ja3MgNTEyMS02MTQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MTIxCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIyICgrMSksIElub2RlIGJpdG1hcCBhdCA1MTIzICgrMikKKyAgSW5vZGUgdGFibGUgYXQgNTEyNC01MTU1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxNTYtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE3OS03MTY4CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE3OTIKK0dyb3VwIDc6IChCbG9ja3MgNzE2OS04MTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3MTY5CisgIEJsb2NrIGJpdG1hcCBhdCA3MTcwICgrMSksIElub2RlIGJpdG1hcCBhdCA3MTcxICgrMikKKyAgSW5vZGUgdGFibGUgYXQgNzE3Mi03MjAzICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcyMDQtODE5MgorICBGcmVlIGlub2RlczogMTc5My0yMDQ4CitHcm91cCA4OiAoQmxvY2tzIDgxOTMtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgyMjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIyNy05MjE2CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIzMDQKK0dyb3VwIDk6IChCbG9ja3MgOTIxNy0xMDI0MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTIxNworICBCbG9jayBiaXRtYXAgYXQgOTIxOCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgOTIxOSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDkyMjAtOTI1MSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjUyLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAyMzA1LTI1NjAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjgxNgorR3JvdXAgMTE6IChCbG9ja3MgMTEyNjUtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5OS0xMjI4OAorICBGcmVlIGlub2RlczogMjgxNy0zMDcyCitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMzIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMzMjgKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzU4NAorR3JvdXAgMTQ6IChCbG9ja3MgMTQzMzctMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM3MS0xNTM2MAorICBGcmVlIGlub2RlczogMzU4NS0zODQwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1Mzk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1Mzk1LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAzODQxLTQwOTYKK0dyb3VwIDE2OiAoQmxvY2tzIDE2Mzg1LTE3NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTY0MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0MTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDQwOTctNDM1MgorR3JvdXAgMTc6IChCbG9ja3MgMTc0MDktMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQ0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzQ0My0xODQzMgorICBGcmVlIGlub2RlczogNDM1My00NjA4CitHcm91cCAxODogKEJsb2NrcyAxODQzMy0xOTQ1NikKKyAgQmxvY2sgYml0bWFwIGF0IDE4NDMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxODQzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NDM1LTE4NDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDY3LTE5NDU2CisgIEZyZWUgaW5vZGVzOiA0NjA5LTQ4NjQKK0dyb3VwIDE5OiAoQmxvY2tzIDE5NDU3LTIwNDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTk0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5NDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk0NTktMTk0OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0OTEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDQ4NjUtNTEyMAorR3JvdXAgMjA6IChCbG9ja3MgMjA0ODEtMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDUxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDUxNS0yMTUwNAorICBGcmVlIGlub2RlczogNTEyMS01Mzc2CitHcm91cCAyMTogKEJsb2NrcyAyMTUwNS0yMjUyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDIxNTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTUwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNTA3LTIxNTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTM5LTIyNTI4CisgIEZyZWUgaW5vZGVzOiA1Mzc3LTU2MzIKK0dyb3VwIDIyOiAoQmxvY2tzIDIyNTI5LTIzNTUyKQorICBCbG9jayBiaXRtYXAgYXQgMjI1MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyNTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjI1MzEtMjI1NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1NjMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDU2MzMtNTg4OAorR3JvdXAgMjM6IChCbG9ja3MgMjM1NTMtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzU4Ny0yNDU3NgorICBGcmVlIGlub2RlczogNTg4OS02MTQ0CitHcm91cCAyNDogKEJsb2NrcyAyNDU3Ny0yNTYwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0NTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDU3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0NTc5LTI0NjEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NjExLTI1NjAwCisgIEZyZWUgaW5vZGVzOiA2MTQ1LTY0MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDI1NjAxLTI2NjI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTYwMQorICBCbG9jayBiaXRtYXAgYXQgMjU2MDIgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDI1NjAzICgrMikKKyAgSW5vZGUgdGFibGUgYXQgMjU2MDQtMjU2MzUgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2MzYtMjY2MjQKKyAgRnJlZSBpbm9kZXM6IDY0MDEtNjY1NgorR3JvdXAgMjY6IChCbG9ja3MgMjY2MjUtMjc2NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjYyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjY2MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNy0yNjY1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjY1OS0yNzY0OAorICBGcmVlIGlub2RlczogNjY1Ny02OTEyCitHcm91cCAyNzogKEJsb2NrcyAyNzY0OS0yODY3MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjc2NDkKKyAgQmxvY2sgYml0bWFwIGF0IDI3NjUwICgrMSksIElub2RlIGJpdG1hcCBhdCAyNzY1MSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDI3NjUyLTI3NjgzICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3Njg0LTI4NjcyCisgIEZyZWUgaW5vZGVzOiA2OTEzLTcxNjgKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjg2NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4Njc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg2NzUtMjg3MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg3MDctMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzQyNAorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAyOTY5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk2OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTY5OS0yOTczMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTczMS0zMDcyMAorICBGcmVlIGlub2RlczogNzQyNS03NjgwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzIxICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDcyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNzIzLTMwNzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwNzU1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc5MzYKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDMxNzQ1CisgIEJsb2NrIGJpdG1hcCBhdCAzMTc0NiAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgMzE3NDcgKCsyKQorICBJbm9kZSB0YWJsZSBhdCAzMTc0OC0zMTc3OSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc4MC0zMjc2OAorICBGcmVlIGlub2RlczogNzkzNy04MTkyCitHcm91cCAzMjogKEJsb2NrcyAzMjc2OS0zMzc5MikKKyAgR3JvdXAgZGVzY3JpcHRvciBhdCAzMjc2OQorICBCbG9jayBiaXRtYXAgYXQgMzI3NzAgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcxICgrMikKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzItMzI4MDMgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI4MDQtMzM3OTIKKyAgRnJlZSBpbm9kZXM6IDgxOTMtODQ0OAorR3JvdXAgMzM6IChCbG9ja3MgMzM3OTMtMzQ4MTYpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgMzM3OTMKKyAgQmxvY2sgYml0bWFwIGF0IDMzNzk0ICgrMSksIElub2RlIGJpdG1hcCBhdCAzMzc5NSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDMzNzk2LTMzODI3ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzODI4LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA4NDQ5LTg3MDQKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzQ4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0ODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQ4MTktMzQ4NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQ4NTEtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDg3MDUtODk2MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg0My0zNTg3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTg3NS0zNjg2NAorICBGcmVlIGlub2RlczogODk2MS05MjE2CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2ODY3LTM2ODk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2ODk5LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA5MjE3LTk0NzIKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzc4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzc4OTEtMzc5MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzc5MjMtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDk0NzMtOTcyOAorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODkxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg5MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODkxNS0zODk0NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODk0Ny0zOTkzNgorICBGcmVlIGlub2RlczogOTcyOS05OTg0CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM5OTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5OTM5LTM5OTcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5OTcxLTQwOTYwCisgIEZyZWUgaW5vZGVzOiA5OTg1LTEwMjQwCitHcm91cCA0MDogKEJsb2NrcyA0MDk2MS00MTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQwOTYzLTQwOTk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQwOTk1LTQxOTg0CisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMDQ5NgorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MTk4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDE5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MTk4Ny00MjAxOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MjAxOS00MzAwOAorICBGcmVlIGlub2RlczogMTA0OTctMTA3NTIKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDMwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDMwMTEtNDMwNDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDMwNDMtNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDEwNzUzLTExMDA4CitHcm91cCA0MzogKEJsb2NrcyA0NDAzMy00NTA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ0MDMzICgrMCksIElub2RlIGJpdG1hcCBhdCA0NDAzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ0MDM1LTQ0MDY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ0MDY3LTQ1MDU2CisgIEZyZWUgaW5vZGVzOiAxMTAwOS0xMTI2NAorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDUwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NTA1OS00NTA5MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NTA5MS00NjA4MAorICBGcmVlIGlub2RlczogMTEyNjUtMTE1MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDYwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYwODMtNDYxMTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxMTUtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDExNTIxLTExNzc2CitHcm91cCA0NjogKEJsb2NrcyA0NzEwNS00ODEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ3MTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NzEwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ3MTA3LTQ3MTM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ3MTM5LTQ4MTI4CisgIEZyZWUgaW5vZGVzOiAxMTc3Ny0xMjAzMgorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDgxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODEzMS00ODE2MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODE2My00OTE1MgorICBGcmVlIGlub2RlczogMTIwMzMtMTIyODgKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDkxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ5MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDkxNTUtNDkxODYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDkxODctNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTEyNTQ0CitHcm91cCA0OTogKEJsb2NrcyA1MDE3Ny01MTIwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTAxNzcKKyAgQmxvY2sgYml0bWFwIGF0IDUwMTc4ICgrMSksIElub2RlIGJpdG1hcCBhdCA1MDE3OSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDUwMTgwLTUwMjExICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwMjEyLTUxMjAwCisgIEZyZWUgaW5vZGVzOiAxMjU0NS0xMjgwMAorR3JvdXAgNTA6IChCbG9ja3MgNTEyMDEtNTIyMjQpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTEyMDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIwMy01MTIzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTIzNS01MjIyNAorICBGcmVlIGlub2RlczogMTI4MDEtMTMwNTYKK0dyb3VwIDUxOiAoQmxvY2tzIDUyMjI1LTUzMjQ4KQorICBCbG9jayBiaXRtYXAgYXQgNTIyMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUyMjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTIyMjctNTIyNTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyNTktNTMyNDgKKyAgRnJlZSBpbm9kZXM6IDEzMDU3LTEzMzEyCitHcm91cCA1MjogKEJsb2NrcyA1MzI0OS01NDI3MikKKyAgQmxvY2sgYml0bWFwIGF0IDUzMjQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MzI1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUzMjUxLTUzMjgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjgzLTU0MjcyCisgIEZyZWUgaW5vZGVzOiAxMzMxMy0xMzU2OAorR3JvdXAgNTM6IChCbG9ja3MgNTQyNzMtNTUyOTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1NDI3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTQyNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NDI3NS01NDMwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDMwNy01NTI5NgorICBGcmVlIGlub2RlczogMTM1NjktMTM4MjQKK0dyb3VwIDU0OiAoQmxvY2tzIDU1Mjk3LTU2MzIwKQorICBCbG9jayBiaXRtYXAgYXQgNTUyOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU1Mjk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTUyOTktNTUzMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMzEtNTYzMjAKKyAgRnJlZSBpbm9kZXM6IDEzODI1LTE0MDgwCitHcm91cCA1NTogKEJsb2NrcyA1NjMyMS01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjMyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU2MzIzLTU2MzU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzU1LTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxNDA4MS0xNDMzNgorR3JvdXAgNTY6IChCbG9ja3MgNTczNDUtNTgzNjgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NzM0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTczNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NzM0Ny01NzM3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NzM3OS01ODM2OAorICBGcmVlIGlub2RlczogMTQzMzctMTQ1OTIKK0dyb3VwIDU3OiAoQmxvY2tzIDU4MzY5LTU5MzkyKQorICBCbG9jayBiaXRtYXAgYXQgNTgzNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4MzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTgzNzEtNTg0MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg0MDMtNTkzOTIKKyAgRnJlZSBpbm9kZXM6IDE0NTkzLTE0ODQ4CitHcm91cCA1ODogKEJsb2NrcyA1OTM5My02MDQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCA1OTM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU5Mzk1LTU5NDI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDI3LTYwNDE2CisgIEZyZWUgaW5vZGVzOiAxNDg0OS0xNTEwNAorR3JvdXAgNTk6IChCbG9ja3MgNjA0MTctNjE0NDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MDQxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjA0MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MDQxOS02MDQ1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MDQ1MS02MTQ0MAorICBGcmVlIGlub2RlczogMTUxMDUtMTUzNjAKK0dyb3VwIDYwOiAoQmxvY2tzIDYxNDQxLTYyNDY0KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NDMtNjE0NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NzUtNjI0NjQKKyAgRnJlZSBpbm9kZXM6IDE1MzYxLTE1NjE2CitHcm91cCA2MTogKEJsb2NrcyA2MjQ2NS02MzQ4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MjQ2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYyNDY3LTYyNDk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDk5LTYzNDg4CisgIEZyZWUgaW5vZGVzOiAxNTYxNy0xNTg3MgorR3JvdXAgNjI6IChCbG9ja3MgNjM0ODktNjQ1MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2MzQ4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjM0OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MzQ5MS02MzUyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MzUyMy02NDUxMgorICBGcmVlIGlub2RlczogMTU4NzMtMTYxMjgKK0dyb3VwIDYzOiAoQmxvY2tzIDY0NTEzLTY1NTM2KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY0NTEzCisgIEJsb2NrIGJpdG1hcCBhdCA2NDUxNCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjQ1MTUgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxNi02NDU0NyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NDU0OC02NTUzNgorICBGcmVlIGlub2RlczogMTYxMjktMTYzODQKK0dyb3VwIDY0OiAoQmxvY2tzIDY1NTM3LTY2NTYwKQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY1NTM3CisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzOCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzkgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NTU0MC02NTU3MSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NTU3Mi02NjU2MAorICBGcmVlIGlub2RlczogMTYzODUtMTY2NDAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDY2NTYxCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU2MiAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgNjY1NjMgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA2NjU2NC02NjU5NSAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjU5Ni02NzU4NAorICBGcmVlIGlub2RlczogMTY2NDEtMTY4OTYKK0dyb3VwIDY2OiAoQmxvY2tzIDY3NTg1LTY4NjA4KQorICBCbG9jayBiaXRtYXAgYXQgNjc1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY3NTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjc1ODctNjc2MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc2MTktNjg2MDgKKyAgRnJlZSBpbm9kZXM6IDE2ODk3LTE3MTUyCitHcm91cCA2NzogKEJsb2NrcyA2ODYwOS02OTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDY4NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA2ODYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY4NjExLTY4NjQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjQzLTY5NjMyCisgIEZyZWUgaW5vZGVzOiAxNzE1My0xNzQwOAorR3JvdXAgNjg6IChCbG9ja3MgNjk2MzMtNzA2NTYpCisgIEJsb2NrIGJpdG1hcCBhdCA2OTYzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjk2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2OTYzNS02OTY2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2OTY2Ny03MDY1NgorICBGcmVlIGlub2RlczogMTc0MDktMTc2NjQKK0dyb3VwIDY5OiAoQmxvY2tzIDcwNjU3LTcxNjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzA2NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcwNjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzA2NTktNzA2OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2OTEtNzE2ODAKKyAgRnJlZSBpbm9kZXM6IDE3NjY1LTE3OTIwCitHcm91cCA3MDogKEJsb2NrcyA3MTY4MS03MjcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjgxICgrMCksIElub2RlIGJpdG1hcCBhdCA3MTY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNjgzLTcxNzE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzE1LTcyNzA0CisgIEZyZWUgaW5vZGVzOiAxNzkyMS0xODE3NgorR3JvdXAgNzE6IChCbG9ja3MgNzI3MDUtNzM3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA3MjcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzI3MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MjcwNy03MjczOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MjczOS03MzcyOAorICBGcmVlIGlub2RlczogMTgxNzctMTg0MzIKK0dyb3VwIDcyOiAoQmxvY2tzIDczNzI5LTc0NzUyKQorICBCbG9jayBiaXRtYXAgYXQgNzM3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDczNzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzM3MzEtNzM3NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3NjMtNzQ3NTIKKyAgRnJlZSBpbm9kZXM6IDE4NDMzLTE4Njg4CitHcm91cCA3MzogKEJsb2NrcyA3NDc1My03NTc3NikKKyAgQmxvY2sgYml0bWFwIGF0IDc0NzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA3NDc1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0NzU1LTc0Nzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0Nzg3LTc1Nzc2CisgIEZyZWUgaW5vZGVzOiAxODY4OS0xODk0NAorR3JvdXAgNzQ6IChCbG9ja3MgNzU3NzctNzY4MDApCisgIEJsb2NrIGJpdG1hcCBhdCA3NTc3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzU3NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NTc3OS03NTgxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NTgxMS03NjgwMAorICBGcmVlIGlub2RlczogMTg5NDUtMTkyMDAKK0dyb3VwIDc1OiAoQmxvY2tzIDc2ODAxLTc3ODI0KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzY4MDMtNzY4MzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzY4MzUtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDE5MjAxLTE5NDU2CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA3NzgyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI3LTc3ODU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc3ODU5LTc4ODQ4CisgIEZyZWUgaW5vZGVzOiAxOTQ1Ny0xOTcxMgorR3JvdXAgNzc6IChCbG9ja3MgNzg4NDktNzk4NzIpCisgIEJsb2NrIGJpdG1hcCBhdCA3ODg0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzg4NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3ODg1MS03ODg4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3ODg4My03OTg3MgorICBGcmVlIGlub2RlczogMTk3MTMtMTk5NjgKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk4NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5ODc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzk4NzUtNzk5MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk5MDctODA4OTYKKyAgRnJlZSBpbm9kZXM6IDE5OTY5LTIwMjI0CitHcm91cCA3OTogKEJsb2NrcyA4MDg5Ny04MTkyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDgwODk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4MDg5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgwODk5LTgwOTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgwOTMxLTgxOTIwCisgIEZyZWUgaW5vZGVzOiAyMDIyNS0yMDQ4MAorR3JvdXAgODA6IChCbG9ja3MgODE5MjEtODI5NDQpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTkyMy04MTk1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk1NS04Mjk0NAorICBGcmVlIGlub2RlczogMjA0ODEtMjA3MzYKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NQorICBCbG9jayBiaXRtYXAgYXQgODI5NDYgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDgyOTQ3ICgrMikKKyAgSW5vZGUgdGFibGUgYXQgODI5NDgtODI5NzkgKCszKQorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODI5ODAtODM5NjgKKyAgRnJlZSBpbm9kZXM6IDIwNzM3LTIwOTkyCitHcm91cCA4MjogKEJsb2NrcyA4Mzk2OS04NDk5MikKKyAgQmxvY2sgYml0bWFwIGF0IDgzOTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4Mzk3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgzOTcxLTg0MDAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0MDAzLTg0OTkyCisgIEZyZWUgaW5vZGVzOiAyMDk5My0yMTI0OAorR3JvdXAgODM6IChCbG9ja3MgODQ5OTMtODYwMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDk5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ5OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDk5NS04NTAyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAyNy04NjAxNgorICBGcmVlIGlub2RlczogMjEyNDktMjE1MDQKK0dyb3VwIDg0OiAoQmxvY2tzIDg2MDE3LTg3MDQwKQorICBCbG9jayBiaXRtYXAgYXQgODYwMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg2MDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODYwMTktODYwNTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODYwNTEtODcwNDAKKyAgRnJlZSBpbm9kZXM6IDIxNTA1LTIxNzYwCitHcm91cCA4NTogKEJsb2NrcyA4NzA0MS04ODA2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDg3MDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDQzLTg3MDc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDc1LTg4MDY0CisgIEZyZWUgaW5vZGVzOiAyMTc2MS0yMjAxNgorR3JvdXAgODY6IChCbG9ja3MgODgwNjUtODkwODgpCisgIEJsb2NrIGJpdG1hcCBhdCA4ODA2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODgwNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4ODA2Ny04ODA5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA5OS04OTA4OAorICBGcmVlIGlub2RlczogMjIwMTctMjIyNzIKK0dyb3VwIDg3OiAoQmxvY2tzIDg5MDg5LTkwMTEyKQorICBCbG9jayBiaXRtYXAgYXQgODkwODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5MDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODkwOTEtODkxMjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODkxMjMtOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIyMjczLTIyNTI4CitHcm91cCA4ODogKEJsb2NrcyA5MDExMy05MTEzNikKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMTQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTQ3LTkxMTM2CisgIEZyZWUgaW5vZGVzOiAyMjUyOS0yMjc4NAorR3JvdXAgODk6IChCbG9ja3MgOTExMzctOTIxNjApCisgIEJsb2NrIGJpdG1hcCBhdCA5MTEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTExMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MTEzOS05MTE3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE3MS05MjE2MAorICBGcmVlIGlub2RlczogMjI3ODUtMjMwNDAKK0dyb3VwIDkwOiAoQmxvY2tzIDkyMTYxLTkzMTg0KQorICBCbG9jayBiaXRtYXAgYXQgOTIxNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTIxNjMtOTIxOTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIxOTUtOTMxODQKKyAgRnJlZSBpbm9kZXM6IDIzMDQxLTIzMjk2CitHcm91cCA5MTogKEJsb2NrcyA5MzE4NS05NDIwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDkzMTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5MzE4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkzMTg3LTkzMjE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMjE5LTk0MjA4CisgIEZyZWUgaW5vZGVzOiAyMzI5Ny0yMzU1MgorR3JvdXAgOTI6IChCbG9ja3MgOTQyMDktOTUyMzIpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDIwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQyMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NDIxMS05NDI0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDI0My05NTIzMgorICBGcmVlIGlub2RlczogMjM1NTMtMjM4MDgKK0dyb3VwIDkzOiAoQmxvY2tzIDk1MjMzLTk2MjU2KQorICBCbG9jayBiaXRtYXAgYXQgOTUyMzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk1MjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTUyMzUtOTUyNjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUyNjctOTYyNTYKKyAgRnJlZSBpbm9kZXM6IDIzODA5LTI0MDY0CitHcm91cCA5NDogKEJsb2NrcyA5NjI1Ny05NzI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk2MjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NjI1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk2MjU5LTk2MjkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2MjkxLTk3MjgwCisgIEZyZWUgaW5vZGVzOiAyNDA2NS0yNDMyMAorR3JvdXAgOTU6IChCbG9ja3MgOTcyODEtOTgzMDQpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgOTcyODEKKyAgQmxvY2sgYml0bWFwIGF0IDk3MjgyICgrMSksIElub2RlIGJpdG1hcCBhdCA5NzI4MyAoKzIpCisgIElub2RlIHRhYmxlIGF0IDk3Mjg0LTk3MzE1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk3MzE2LTk4MzA0CisgIEZyZWUgaW5vZGVzOiAyNDMyMS0yNDU3NgorR3JvdXAgOTY6IChCbG9ja3MgOTgzMDUtOTkzMjgpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgOTgzMDUKKyAgQmxvY2sgYml0bWFwIGF0IDk4MzA2ICgrMSksIElub2RlIGJpdG1hcCBhdCA5ODMwNyAoKzIpCisgIElub2RlIHRhYmxlIGF0IDk4MzA4LTk4MzM5ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4MzQwLTk5MzI4CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNDgzMgorR3JvdXAgOTc6IChCbG9ja3MgOTkzMjktMTAwMzUyKQorICBHcm91cCBkZXNjcmlwdG9yIGF0IDk5MzI5CisgIEJsb2NrIGJpdG1hcCBhdCA5OTMzMCAoKzEpLCBJbm9kZSBiaXRtYXAgYXQgOTkzMzEgKCsyKQorICBJbm9kZSB0YWJsZSBhdCA5OTMzMi05OTM2MyAoKzMpCisgIDk4OSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTM2NC0xMDAzNTIKKyAgRnJlZSBpbm9kZXM6IDI0ODMzLTI1MDg4CitHcm91cCA5ODogKEJsb2NrcyAxMDAzNTMtMTAxMzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTAwMzUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDAzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDAzNTUtMTAwMzg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM4Ny0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDI1MDg5LTI1MzQ0CitHcm91cCA5OTogKEJsb2NrcyAxMDEzNzctMTAyNDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTAxMzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDEzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDEzNzktMTAxNDEwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMTQxMS0xMDI0MDAKKyAgRnJlZSBpbm9kZXM6IDI1MzQ1LTI1NjAwCitHcm91cCAxMDA6IChCbG9ja3MgMTAyNDAxLTEwMzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNDAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAzLTEwMjQzNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0MzUtMTAzNDI0CisgIEZyZWUgaW5vZGVzOiAyNTYwMS0yNTg1NgorR3JvdXAgMTAxOiAoQmxvY2tzIDEwMzQyNS0xMDQ0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDM0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMzQyNy0xMDM0NTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDU5LTEwNDQ0OAorICBGcmVlIGlub2RlczogMjU4NTctMjYxMTIKK0dyb3VwIDEwMjogKEJsb2NrcyAxMDQ0NDktMTA1NDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTA0NDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDQ0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ0NTEtMTA0NDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNDQ4My0xMDU0NzIKKyAgRnJlZSBpbm9kZXM6IDI2MTEzLTI2MzY4CitHcm91cCAxMDM6IChCbG9ja3MgMTA1NDczLTEwNjQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA1NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDc1LTEwNTUwNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDU1MDctMTA2NDk2CisgIEZyZWUgaW5vZGVzOiAyNjM2OS0yNjYyNAorR3JvdXAgMTA0OiAoQmxvY2tzIDEwNjQ5Ny0xMDc1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY1MzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTMxLTEwNzUyMAorICBGcmVlIGlub2RlczogMjY2MjUtMjY4ODAKK0dyb3VwIDEwNTogKEJsb2NrcyAxMDc1MjEtMTA4NTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDc1MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDc1MjMtMTA3NTU0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNzU1NS0xMDg1NDQKKyAgRnJlZSBpbm9kZXM6IDI2ODgxLTI3MTM2CitHcm91cCAxMDY6IChCbG9ja3MgMTA4NTQ1LTEwOTU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwODU0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA4NTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ3LTEwODU3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDg1NzktMTA5NTY4CisgIEZyZWUgaW5vZGVzOiAyNzEzNy0yNzM5MgorR3JvdXAgMTA3OiAoQmxvY2tzIDEwOTU2OS0xMTA1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDk1NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwOTU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwOTU3MS0xMDk2MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NjAzLTExMDU5MgorICBGcmVlIGlub2RlczogMjczOTMtMjc2NDgKK0dyb3VwIDEwODogKEJsb2NrcyAxMTA1OTMtMTExNjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTEwNTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTA1OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTA1OTUtMTEwNjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMDYyNy0xMTE2MTYKKyAgRnJlZSBpbm9kZXM6IDI3NjQ5LTI3OTA0CitHcm91cCAxMDk6IChCbG9ja3MgMTExNjE3LTExMjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMTYxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTExNjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE5LTExMTY1MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTE2NTEtMTEyNjQwCisgIEZyZWUgaW5vZGVzOiAyNzkwNS0yODE2MAorR3JvdXAgMTEwOiAoQmxvY2tzIDExMjY0MS0xMTM2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY0My0xMTI2NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjc1LTExMzY2NAorICBGcmVlIGlub2RlczogMjgxNjEtMjg0MTYKK0dyb3VwIDExMTogKEJsb2NrcyAxMTM2NjUtMTE0Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEzNjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTM2NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTM2NjctMTEzNjk4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMzY5OS0xMTQ2ODgKKyAgRnJlZSBpbm9kZXM6IDI4NDE3LTI4NjcyCitHcm91cCAxMTI6IChCbG9ja3MgMTE0Njg5LTExNTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDcyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTQ3MjMtMTE1NzEyCisgIEZyZWUgaW5vZGVzOiAyODY3My0yODkyOAorR3JvdXAgMTEzOiAoQmxvY2tzIDExNTcxMy0xMTY3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTU3MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNTcxNS0xMTU3NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzQ3LTExNjczNgorICBGcmVlIGlub2RlczogMjg5MjktMjkxODQKK0dyb3VwIDExNDogKEJsb2NrcyAxMTY3MzctMTE3NzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTE2NzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTY3MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTY3MzktMTE2NzcwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNjc3MS0xMTc3NjAKKyAgRnJlZSBpbm9kZXM6IDI5MTg1LTI5NDQwCitHcm91cCAxMTU6IChCbG9ja3MgMTE3NzYxLTExODc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE3NzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYzLTExNzc5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc3OTUtMTE4Nzg0CisgIEZyZWUgaW5vZGVzOiAyOTQ0MS0yOTY5NgorR3JvdXAgMTE2OiAoQmxvY2tzIDExODc4NS0xMTk4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTg3ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExODc4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExODc4Ny0xMTg4MTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4ODE5LTExOTgwOAorICBGcmVlIGlub2RlczogMjk2OTctMjk5NTIKK0dyb3VwIDExNzogKEJsb2NrcyAxMTk4MDktMTIwODMyKQorICBCbG9jayBiaXRtYXAgYXQgMTE5ODA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTk4MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTk4MTEtMTE5ODQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExOTg0My0xMjA4MzIKKyAgRnJlZSBpbm9kZXM6IDI5OTUzLTMwMjA4CitHcm91cCAxMTg6IChCbG9ja3MgMTIwODMzLTEyMTg1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDgzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwODM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODM1LTEyMDg2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjA4NjctMTIxODU2CisgIEZyZWUgaW5vZGVzOiAzMDIwOS0zMDQ2NAorR3JvdXAgMTE5OiAoQmxvY2tzIDEyMTg1Ny0xMjI4ODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMjE4NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMTg1OS0xMjE4OTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODkxLTEyMjg4MAorICBGcmVlIGlub2RlczogMzA0NjUtMzA3MjAKK0dyb3VwIDEyMDogKEJsb2NrcyAxMjI4ODEtMTIzOTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI4ODMtMTIyOTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjkxNS0xMjM5MDQKKyAgRnJlZSBpbm9kZXM6IDMwNzIxLTMwOTc2CitHcm91cCAxMjE6IChCbG9ja3MgMTIzOTA1LTEyNDkyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIzOTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA3LTEyMzkzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjM5MzktMTI0OTI4CisgIEZyZWUgaW5vZGVzOiAzMDk3Ny0zMTIzMgorR3JvdXAgMTIyOiAoQmxvY2tzIDEyNDkyOS0xMjU5NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ5MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNDkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNDkzMS0xMjQ5NjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTYzLTEyNTk1MgorICBGcmVlIGlub2RlczogMzEyMzMtMzE0ODgKK0dyb3VwIDEyMzogKEJsb2NrcyAxMjU5NTMtMTI2OTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTI1OTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjU5NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjU5NTUtMTI1OTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNTk4Ny0xMjY5NzYKKyAgRnJlZSBpbm9kZXM6IDMxNDg5LTMxNzQ0CitHcm91cCAxMjQ6IChCbG9ja3MgMTI2OTc3LTEyODAwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjk3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI2OTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc5LTEyNzAxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjcwMTEtMTI4MDAwCisgIEZyZWUgaW5vZGVzOiAzMTc0NS0zMjAwMAorR3JvdXAgMTI1OiAoQmxvY2tzIDEyODAwMS0xMjkwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODAwMQorICBCbG9jayBiaXRtYXAgYXQgMTI4MDAyICgrMSksIElub2RlIGJpdG1hcCBhdCAxMjgwMDMgKCsyKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMDQtMTI4MDM1ICgrMykKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODAzNi0xMjkwMjQKKyAgRnJlZSBpbm9kZXM6IDMyMDAxLTMyMjU2CitHcm91cCAxMjY6IChCbG9ja3MgMTI5MDI1LTEzMDA0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyOTAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI5MDI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI5MDI3LTEyOTA1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjkwNTktMTMwMDQ4CisgIEZyZWUgaW5vZGVzOiAzMjI1Ny0zMjUxMgorR3JvdXAgMTI3OiAoQmxvY2tzIDEzMDA0OS0xMzEwNzEpCisgIEdyb3VwIGRlc2NyaXB0b3IgYXQgMTMwMDQ5CisgIEJsb2NrIGJpdG1hcCBhdCAxMzAwNTAgKCsxKSwgSW5vZGUgYml0bWFwIGF0IDEzMDA1MSAoKzIpCisgIElub2RlIHRhYmxlIGF0IDEzMDA1Mi0xMzAwODMgKCszKQorICA5ODggZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMwMDg0LTEzMTA3MQorICBGcmVlIGlub2RlczogMzI1MTMtMzI3NjgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX21ldGFfYmcvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fbWV0YV9iZy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhMmJlYQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX21ldGFfYmcvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049Im1ldGEgYmxvY2tncm91cCBmZWF0dXJlIgorRlNfU0laRT0xMzEwNzIKK01LRTJGU19PUFRTPSItTyBtZXRhX2JnLHNwYXJzZV9zdXBlcixecmVzaXplX2lub2RlIC1nIDEwMjQiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvZXhwZWN0IGIvZTJmc3Byb2dzL3Rlc3RzL21fbWtmc19vdmVyaGVhZC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiOGZkMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvZXhwZWN0CkBAIC0wLDAgKzEgQEAKK3Rlc3QuaW1nOiBDYW5ub3QgY3JlYXRlIGZpbGVzeXN0ZW0gd2l0aCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGlub2RlcyB3aGlsZSBzZXR0aW5nIHVwIHN1cGVyYmxvY2sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fbWtmc19vdmVyaGVhZC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxZGEwYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX21rZnNfb3ZlcmhlYWQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK3Rlc3RfZGVzY3JpcHRpb249InRlc3QgYmcgb3ZlcmhlYWQgY2FsY3VsYXRpb24iCisKK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKK0ZTX1NJWkU9MTAyNAorTUtFMkZTX09QVFM9Ii1iIDEwMjQgLW0gMCAtZyAyNTYgLU4gMzc0NSIKKworTUtFMkZTX1NLSVBfUFJPR1JFU1M9dHJ1ZQorTUtFMkZTX1NLSVBfQ0hFQ0tfTVNHPXRydWUKK2V4cG9ydCBNS0UyRlNfU0tJUF9QUk9HUkVTUyBNS0UyRlNfU0tJUF9DSEVDS19NU0cKKz4gJFRNUEZJTEUKKworY3AgL2Rldi9udWxsICRPVVQKKworJE1LRTJGUyAtRiAtbyBMaW51eCAkTUtFMkZTX09QVFMgJFRNUEZJTEUgJEZTX1NJWkUgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+ICRPVVQKKworcm0gLWYgJFRNUEZJTEUKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzMT0kPworCitpZiBbICIkc3RhdHVzMSIgPSAwIF0gOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgT1VUIEVYUCBERVNDUklQVElPTiBGU19TSVpFIE1LRTJGU19PUFRTIE1LRTJGU19TS0lQX1BST0dSRVNTCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9tbXAvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9tbXAvZXhwZWN0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4YWE3NwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX21tcC9leHBlY3QuMQpAQCAtMCwwICsxLDc3IEBACitGaWxlc3lzdGVtIGxhYmVsPQorT1MgdHlwZTogTGludXgKK0Jsb2NrIHNpemU9NDA5NiAobG9nPTIpCitGcmFnbWVudCBzaXplPTQwOTYgKGxvZz0yKQorU3RyaWRlPTAgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzY1NTM2IGlub2RlcywgNjU1MzYgYmxvY2tzCiszMjc2IGJsb2NrcyAoNS4wMCUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlcgorRmlyc3QgZGF0YSBibG9jaz0wCitNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPTY3MTA4ODY0CisyIGJsb2NrIGdyb3VwcworMzI3NjggYmxvY2tzIHBlciBncm91cCwgMzI3NjggZnJhZ21lbnRzIHBlciBncm91cAorMzI3NjggaW5vZGVzIHBlciBncm91cAorU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTMyNzY4CisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitNdWx0aXBsZSBtb3VudCBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgd2l0aCB1cGRhdGUgaW50ZXJ2YWwgNSBzZWNvbmRzLgorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgbW1wIHNwYXJzZV9zdXBlciBsYXJnZV9maWxlCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS82NTUzNiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwOTMvNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgbW1wIHNwYXJzZV9zdXBlciBsYXJnZV9maWxlCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICA2NTUzNgorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA2NTUzNgorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAzMjc2CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDYzNDQzCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDY1NTI1CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDAKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgNDA5NgorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICA0MDk2CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDE1CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDMyNzY4CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDMyNzY4CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDMyNzY4CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDEwMjQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorTU1QIGJsb2NrIG51bWJlcjogICAgICAgICAxMDQ5CitNTVAgdXBkYXRlIGludGVydmFsOiAgICAgIDUKKworCitHcm91cCAwOiAoQmxvY2tzIDAtMzI3NjcpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAwLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxLTEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyLTE2CisgIEJsb2NrIGJpdG1hcCBhdCAxNyAoKzE3KSwgSW5vZGUgYml0bWFwIGF0IDE4ICgrMTgpCisgIElub2RlIHRhYmxlIGF0IDE5LTEwNDIgKCsxOSkKKyAgMzE3MTggZnJlZSBibG9ja3MsIDMyNzU3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDUwLTMyNzY3CisgIEZyZWUgaW5vZGVzOiAxMi0zMjc2OAorR3JvdXAgMTogKEJsb2NrcyAzMjc2OC02NTUzNSkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzI3NjgsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMyNzY5LTMyNzY5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzI3NzAtMzI3ODQKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzg1ICgrMTcpLCBJbm9kZSBiaXRtYXAgYXQgMzI3ODYgKCsxOCkKKyAgSW5vZGUgdGFibGUgYXQgMzI3ODctMzM4MTAgKCsxOSkKKyAgMzE3MjUgZnJlZSBibG9ja3MsIDMyNzY4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzgxMS02NTUzNQorICBGcmVlIGlub2RlczogMzI3NjktNjU1MzYKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX21tcC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvbV9tbXAvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjBiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9tbXAvc2NyaXB0CkBAIC0wLDAgKzEsMTUgQEAKK0RFU0NSSVBUSU9OPSJlbmFibGUgTU1QIGR1cmluZyBta2UyZnMiCitGU19TSVpFPTY1NTM2CitNS0UyRlNfREVWSUNFX1NFQ1RTSVpFPTIwNDgKK2V4cG9ydCBNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCitUTVBGSUxFPSR0ZXN0X25hbWUudG1wCis+ICRUTVBGSUxFCitzdGF0IC1mICRUTVBGSUxFIHwgZ3JlcCAtcSAiVHlwZTogdG1wZnMiCitpZiBbICQ/ID0gMCBdOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCBmb3IgdG1wZnMgKG5vIE9fRElSRUNUKSIKKwlyZXR1cm4gMAorZmkKK01LRTJGU19PUFRTPSItYiA0MDk2IC1PIG1tcCIKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwordW5zZXQgTUtFMkZTX0RFVklDRV9TRUNUU0laRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fbm9fb3B0L2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL21fbm9fb3B0L2V4cGVjdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmYyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV9ub19vcHQvZXhwZWN0LjEKQEAgLTAsMCArMSwxMTIgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0xMDI0IChsb2c9MCkKK0ZyYWdtZW50IHNpemU9MTAyNCAobG9nPTApCitTdHJpZGU9MCBibG9ja3MsIFN0cmlwZSB3aWR0aD0wIGJsb2NrcworMTYzODQgaW5vZGVzLCA2NTUzNiBibG9ja3MKKzMyNzYgYmxvY2tzICg1LjAwJSkgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlciB1c2VyCitGaXJzdCBkYXRhIGJsb2NrPTEKKzggYmxvY2sgZ3JvdXBzCis4MTkyIGJsb2NrcyBwZXIgZ3JvdXAsIDgxOTIgZnJhZ21lbnRzIHBlciBncm91cAorMjA0OCBpbm9kZXMgcGVyIGdyb3VwCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMTYzODUsIDI0NTc3LCAzMjc2OSwgNDA5NjEsIDQ5MTUzLCA1NzM0NQorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6KG5vbmUpCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xNjM4NCBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDIwOTQvNjU1MzYgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIChub25lKQorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTYzODQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMzI3NgorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2MzQ0MgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAxNjM3MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorQmxvY2tzIHBlciBncm91cDogICAgICAgICA4MTkyCitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDgxOTIKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjA0OAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAyNTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS04MTkyKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIEJsb2NrIGJpdG1hcCBhdCAzICgrMiksIElub2RlIGJpdG1hcCBhdCA0ICgrMykKKyAgSW5vZGUgdGFibGUgYXQgNS0yNjAgKCs0KQorICA3OTE5IGZyZWUgYmxvY2tzLCAyMDM3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzQtODE5MgorICBGcmVlIGlub2RlczogMTItMjA0OAorR3JvdXAgMTogKEJsb2NrcyA4MTkzLTE2Mzg0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4MTkzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4MTk0LTgxOTQKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTUgKCsyKSwgSW5vZGUgYml0bWFwIGF0IDgxOTYgKCszKQorICBJbm9kZSB0YWJsZSBhdCA4MTk3LTg0NTIgKCs0KQorICA3OTMyIGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDUzLTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTQwOTYKK0dyb3VwIDI6IChCbG9ja3MgMTYzODUtMjQ1NzYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE2Mzg1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxNjM4Ni0xNjM4NgorICBCbG9jayBiaXRtYXAgYXQgMTYzODcgKCsyKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg4ICgrMykKKyAgSW5vZGUgdGFibGUgYXQgMTYzODktMTY2NDQgKCs0KQorICA3OTMyIGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjY0NS0yNDU3NgorICBGcmVlIGlub2RlczogNDA5Ny02MTQ0CitHcm91cCAzOiAoQmxvY2tzIDI0NTc3LTMyNzY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNDU3NywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjQ1NzgtMjQ1NzgKKyAgQmxvY2sgYml0bWFwIGF0IDI0NTc5ICgrMiksIElub2RlIGJpdG1hcCBhdCAyNDU4MCAoKzMpCisgIElub2RlIHRhYmxlIGF0IDI0NTgxLTI0ODM2ICgrNCkKKyAgNzkzMiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ4MzctMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDYxNDUtODE5MgorR3JvdXAgNDogKEJsb2NrcyAzMjc2OS00MDk2MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzI3NjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMyNzcwLTMyNzcwCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc3MSAoKzIpLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzIgKCszKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3My0zMzAyOCAoKzQpCisgIDc5MzIgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMDI5LTQwOTYwCisgIEZyZWUgaW5vZGVzOiA4MTkzLTEwMjQwCitHcm91cCA1OiAoQmxvY2tzIDQwOTYxLTQ5MTUyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA0MDk2MSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNDA5NjItNDA5NjIKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTYzICgrMiksIElub2RlIGJpdG1hcCBhdCA0MDk2NCAoKzMpCisgIElub2RlIHRhYmxlIGF0IDQwOTY1LTQxMjIwICgrNCkKKyAgNzkzMiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEyMjEtNDkxNTIKKyAgRnJlZSBpbm9kZXM6IDEwMjQxLTEyMjg4CitHcm91cCA2OiAoQmxvY2tzIDQ5MTUzLTU3MzQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA0OTE1MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNDkxNTQtNDkxNTQKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTU1ICgrMiksIElub2RlIGJpdG1hcCBhdCA0OTE1NiAoKzMpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU3LTQ5NDEyICgrNCkKKyAgNzkzMiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDk0MTMtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTE0MzM2CitHcm91cCA3OiAoQmxvY2tzIDU3MzQ1LTY1NTM1KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1NzM0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTczNDYtNTczNDYKKyAgQmxvY2sgYml0bWFwIGF0IDU3MzQ3ICgrMiksIElub2RlIGJpdG1hcCBhdCA1NzM0OCAoKzMpCisgIElub2RlIHRhYmxlIGF0IDU3MzQ5LTU3NjA0ICgrNCkKKyAgNzkzMSBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTc2MDUtNjU1MzUKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE2Mzg0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9ub19vcHQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fbm9fb3B0L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDFkMGViCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fbm9fb3B0L3NjcmlwdApAQCAtMCwwICsxLDQgQEAKK0RFU0NSSVBUSU9OPSJubyBmaWxlc3lzdGVtIGV4dGVuc2lvbnMiCitGU19TSVpFPTY1NTM2CitNS0UyRlNfT1BUUz0iLU8gXnNwYXJzZV9zdXBlcixeZmlsZXR5cGUsXnJlc2l6ZV9pbm9kZSxeZGlyX2luZGV4LF5leHRfYXR0ciIKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fcXVvdGEvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9xdW90YS9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAwNDZlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fcXVvdGEvZXhwZWN0LjEKQEAgLTAsMCArMSwxNzIgQEAKKworV2FybmluZzogdGhlIHF1b3RhIGZlYXR1cmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQKK1NlZSBodHRwczovL2V4dDQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9RdW90YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCitGaWxlc3lzdGVtIGxhYmVsPQorT1MgdHlwZTogTGludXgKK0Jsb2NrIHNpemU9MTAyNCAobG9nPTApCitGcmFnbWVudCBzaXplPTEwMjQgKGxvZz0wKQorU3RyaWRlPTAgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzMyNzY4IGlub2RlcywgMTMxMDcyIGJsb2NrcworNjU1MyBibG9ja3MgKDUuMDAlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXIKK0ZpcnN0IGRhdGEgYmxvY2s9MQorTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz02NzM3MTAwOAorMTYgYmxvY2sgZ3JvdXBzCis4MTkyIGJsb2NrcyBwZXIgZ3JvdXAsIDgxOTIgZnJhZ21lbnRzIHBlciBncm91cAorMjA0OCBpbm9kZXMgcGVyIGdyb3VwCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NSwgNzM3MjkKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgIAgICAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlciBxdW90YQorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMzI3NjggZmlsZXMgKDE4LjIlIG5vbi1jb250aWd1b3VzKSwgNTcwMy8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIHF1b3RhCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjUzNjkKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMzI3NTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgODE5MgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyMDQ4CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDI1NgorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CitVc2VyIHF1b3RhIGlub2RlOiAgICAgICAgIDMKK0dyb3VwIHF1b3RhIGlub2RlOiAgICAgICAgNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS04MTkyKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy0yNTgKKyAgQmxvY2sgYml0bWFwIGF0IDI1OSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNjAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDI2MS01MTYgKCsyNjApCisgIDc2NTAgZnJlZSBibG9ja3MsIDIwMzcgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0My04MTkyCisgIEZyZWUgaW5vZGVzOiAxMi0yMDQ4CitHcm91cCAxOiAoQmxvY2tzIDgxOTMtMTYzODQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDgxOTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgxOTQtODE5NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgxOTUtODQ1MAorICBCbG9jayBiaXRtYXAgYXQgODQ1MSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA4NDUyICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA4NDUzLTg3MDggKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDktMTYzODQKKyAgRnJlZSBpbm9kZXM6IDIwNDktNDA5NgorR3JvdXAgMjogKEJsb2NrcyAxNjM4NS0yNDU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2NjQyICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDMtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDQwOTctNjE0NAorR3JvdXAgMzogKEJsb2NrcyAyNDU3Ny0zMjc2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjQ1NzktMjQ4MzQKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODM1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI0ODM2ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNDgzNy0yNTA5MiAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjUwOTMtMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDYxNDUtODE5MgorR3JvdXAgNDogKEJsb2NrcyAzMjc2OS00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMzMDI2ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMwMjctNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTAyNDAKK0dyb3VwIDU6IChCbG9ja3MgNDA5NjEtNDkxNTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDQwOTYxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA0MDk2Mi00MDk2MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQwOTYzLTQxMjE4CisgIEJsb2NrIGJpdG1hcCBhdCA0MTIxOSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA0MTIyMCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNDEyMjEtNDE0NzYgKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxNDc3LTQ5MTUyCisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMjI4OAorR3JvdXAgNjogKEJsb2NrcyA0OTE1My01NzM0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5NDEwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDk0MTEtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTE0MzM2CitHcm91cCA3OiAoQmxvY2tzIDU3MzQ1LTY1NTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1NzM0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTczNDYtNTczNDYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1NzM0Ny01NzYwMgorICBCbG9jayBiaXRtYXAgYXQgNTc2MDMgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgNTc2MDQgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDU3NjA1LTU3ODYwICgrMjYwKQorICA3Njc2IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1Nzg2MS02NTUzNgorICBGcmVlIGlub2RlczogMTQzMzctMTYzODQKK0dyb3VwIDg6IChCbG9ja3MgNjU1MzctNzM3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NTUzOS02NTc5NCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1Nzk1LTczNzI4CisgIEZyZWUgaW5vZGVzOiAxNjM4NS0xODQzMgorR3JvdXAgOTogKEJsb2NrcyA3MzcyOS04MTkyMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzM3MjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDczNzMwLTczNzMwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzM3MzEtNzM5ODYKKyAgQmxvY2sgYml0bWFwIGF0IDczOTg3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDczOTg4ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA3Mzk4OS03NDI0NCAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQyNDUtODE5MjAKKyAgRnJlZSBpbm9kZXM6IDE4NDMzLTIwNDgwCitHcm91cCAxMDogKEJsb2NrcyA4MTkyMS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTIzLTgyMTc4ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODIxNzktOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIwNDgxLTIyNTI4CitHcm91cCAxMTogKEJsb2NrcyA5MDExMy05ODMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDkwMTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA5MDExNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkwMTE1LTkwMzcwICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTAzNzEtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDIyNTI5LTI0NTc2CitHcm91cCAxMjogKEJsb2NrcyA5ODMwNS0xMDY0OTYpCisgIEJsb2NrIGJpdG1hcCBhdCA5ODMwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTgzMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNy05ODU2MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4NTYzLTEwNjQ5NgorICBGcmVlIGlub2RlczogMjQ1NzctMjY2MjQKK0dyb3VwIDEzOiAoQmxvY2tzIDEwNjQ5Ny0xMTQ2ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDY0OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNjQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNjQ5OS0xMDY3NTQgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDY3NTUtMTE0Njg4CisgIEZyZWUgaW5vZGVzOiAyNjYyNS0yODY3MgorR3JvdXAgMTQ6IChCbG9ja3MgMTE0Njg5LTEyMjg4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNDY4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE0NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE0NjkxLTExNDk0NiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNDk0Ny0xMjI4ODAKKyAgRnJlZSBpbm9kZXM6IDI4NjczLTMwNzIwCitHcm91cCAxNTogKEJsb2NrcyAxMjI4ODEtMTMxMDcxKQorICBCbG9jayBiaXRtYXAgYXQgMTIyODgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI4ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI4ODMtMTIzMTM4ICgrMikKKyAgNzkzMyBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzMTM5LTEzMTA3MQorICBGcmVlIGlub2RlczogMzA3MjEtMzI3NjgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3F1b3RhL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9tX3F1b3RhL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmFiNjMwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fcXVvdGEvc2NyaXB0CkBAIC0wLDAgKzEsOCBAQAorREVTQ1JJUFRJT049ImVuYWJsZSBxdW90YSBmZWF0dXJlIG9uIG1rZnMiCitGU19TSVpFPTEzMTA3MgorTUtFMkZTX09QVFM9Ii1PIHF1b3RhIgoraWYgWyAiJFFVT1RBIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICRERVNDUklQVElPTjogc2tpcHBlZCIKKwlyZXR1cm4gMAorZmkKKy4gJGNtZF9kaXIvcnVuX21rZTJmcwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL21fcmFpZF9vcHQvZXhwZWN0LjEgYi9lMmZzcHJvZ3MvdGVzdHMvbV9yYWlkX29wdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQ4NjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fcmFpZF9vcHQvZXhwZWN0LjEKQEAgLTAsMCArMSw4NDkgQEAKK0ZpbGVzeXN0ZW0gbGFiZWw9CitPUyB0eXBlOiBMaW51eAorQmxvY2sgc2l6ZT0xMDI0IChsb2c9MCkKK0ZyYWdtZW50IHNpemU9MTAyNCAobG9nPTApCitTdHJpZGU9MTMgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzMyNzY4IGlub2RlcywgMTMxMDcyIGJsb2NrcworNjU1MyBibG9ja3MgKDUuMDAlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXIKK0ZpcnN0IGRhdGEgYmxvY2s9MQorTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz04NTE5NjgwCisxMjggYmxvY2sgZ3JvdXBzCisxMDI0IGJsb2NrcyBwZXIgZ3JvdXAsIDEwMjQgZnJhZ21lbnRzIHBlciBncm91cAorMjU2IGlub2RlcyBwZXIgZ3JvdXAKK1N1cGVyYmxvY2sgYmFja3VwcyBzdG9yZWQgb24gYmxvY2tzOiAKKwkxMDI1LCAzMDczLCA1MTIxLCA3MTY5LCA5MjE3LCAyNTYwMSwgMjc2NDksIDUwMTc3LCA4Mjk0NSwgMTI4MDAxCisKK0FsbG9jYXRpbmcgZ3JvdXAgdGFibGVzOiAgICAgICAgCAgICAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgICAgIAgICAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgICAgCAgICAgICGRvbmUKKworRmlsZXN5c3RlbSBmZWF0dXJlczogZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyNzY4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNzIzOC8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAzMjc2OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICAxMzEwNzIKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNjU1MworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxMjM4MzQKK0ZyZWUgaW5vZGVzOiAgICAgICAgICAgICAgMzI3NTcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMjU2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDEwMjQKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMTAyNAorSW5vZGVzIHBlciBncm91cDogICAgICAgICAyNTYKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMzIKK1JBSUQgc3RyaWRlOiAgICAgICAgICAgICAgMTMKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDI0KQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi01CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNi0yNjEKKyAgQmxvY2sgYml0bWFwIGF0IDI5NCAoKzI5MyksIElub2RlIGJpdG1hcCBhdCAyOTUgKCsyOTQpCisgIElub2RlIHRhYmxlIGF0IDI2Mi0yOTMgKCsyNjEpCisgIDcxNSBmcmVlIGJsb2NrcywgMjQ1IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTAtMTAyNAorICBGcmVlIGlub2RlczogMTItMjU2CitHcm91cCAxOiAoQmxvY2tzIDEwMjUtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTAyNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTAyNi0xMDI5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTAzMC0xMjg1CisgIEJsb2NrIGJpdG1hcCBhdCAxMzMxICgrMzA2KSwgSW5vZGUgYml0bWFwIGF0IDEzMzIgKCszMDcpCisgIElub2RlIHRhYmxlIGF0IDEyODYtMTMxNyAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMTgtMTMzMCwgMTMzMy0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyNTctNTEyCitHcm91cCAyOiAoQmxvY2tzIDIwNDktMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDIxMDcgKCs1OCksIElub2RlIGJpdG1hcCBhdCAyMTA4ICgrNTkpCisgIElub2RlIHRhYmxlIGF0IDIwNDktMjA4MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA4MS0yMTA2LCAyMTA5LTMwNzIKKyAgRnJlZSBpbm9kZXM6IDUxMy03NjgKK0dyb3VwIDM6IChCbG9ja3MgMzA3My00MDk2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAzMDczLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMDc0LTMwNzcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzMDc4LTMzMzMKKyAgQmxvY2sgYml0bWFwIGF0IDM0MDUgKCszMzIpLCBJbm9kZSBiaXRtYXAgYXQgMzQwNiAoKzMzMykKKyAgSW5vZGUgdGFibGUgYXQgMzMzNC0zMzY1ICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM2Ni0zNDA0LCAzNDA3LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxODEgKCs4NCksIElub2RlIGJpdG1hcCBhdCA0MTgyICgrODUpCisgIElub2RlIHRhYmxlIGF0IDQwOTctNDEyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEyOS00MTgwLCA0MTgzLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTI4MAorR3JvdXAgNTogKEJsb2NrcyA1MTIxLTYxNDQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUxMjEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUxMjItNTEyNQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUxMjYtNTM4MQorICBCbG9jayBiaXRtYXAgYXQgNTQ3OSAoKzM1OCksIElub2RlIGJpdG1hcCBhdCA1NDgwICgrMzU5KQorICBJbm9kZSB0YWJsZSBhdCA1MzgyLTU0MTMgKCsyNjEpCisgIDcyOSBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDE0LTU0NzgsIDU0ODEtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyNTUgKCsxMTApLCBJbm9kZSBiaXRtYXAgYXQgNjI1NiAoKzExMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0NS02MTc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTc3LTYyNTQsIDYyNTctNzE2OAorICBGcmVlIGlub2RlczogMTUzNy0xNzkyCitHcm91cCA3OiAoQmxvY2tzIDcxNjktODE5MikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzE2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzE3MC03MTczCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzE3NC03NDI5CisgIEJsb2NrIGJpdG1hcCBhdCA3NTUzICgrMzg0KSwgSW5vZGUgYml0bWFwIGF0IDc1NTQgKCszODUpCisgIElub2RlIHRhYmxlIGF0IDc0MzAtNzQ2MSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0NjItNzU1MiwgNzU1NS04MTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTIwNDgKK0dyb3VwIDg6IChCbG9ja3MgODE5My05MjE2KQorICBCbG9jayBiaXRtYXAgYXQgODMyOSAoKzEzNiksIElub2RlIGJpdG1hcCBhdCA4MzMwICgrMTM3KQorICBJbm9kZSB0YWJsZSBhdCA4MTkzLTgyMjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMjUtODMyOCwgODMzMS05MjE2CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTIzMDQKK0dyb3VwIDk6IChCbG9ja3MgOTIxNy0xMDI0MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgOTIxNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgOTIxOC05MjIxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgOTIyMi05NDc3CisgIEJsb2NrIGJpdG1hcCBhdCA5NjI3ICgrNDEwKSwgSW5vZGUgYml0bWFwIGF0IDk2MjggKCs0MTEpCisgIElub2RlIHRhYmxlIGF0IDk0NzgtOTUwOSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MTAtOTYyNiwgOTYyOS0xMDI0MAorICBGcmVlIGlub2RlczogMjMwNS0yNTYwCitHcm91cCAxMDogKEJsb2NrcyAxMDI0MS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDAzICgrMTYyKSwgSW5vZGUgYml0bWFwIGF0IDEwNDA0ICgrMTYzKQorICBJbm9kZSB0YWJsZSBhdCAxMDI0MS0xMDI3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzMtMTA0MDIsIDEwNDA1LTExMjY0CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI4MTYKK0dyb3VwIDExOiAoQmxvY2tzIDExMjY1LTEyMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTE0NDAgKCsxNzUpLCBJbm9kZSBiaXRtYXAgYXQgMTE0NDEgKCsxNzYpCisgIElub2RlIHRhYmxlIGF0IDExMjY1LTExMjk2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5Ny0xMTQzOSwgMTE0NDItMTIyODgKKyAgRnJlZSBpbm9kZXM6IDI4MTctMzA3MgorR3JvdXAgMTI6IChCbG9ja3MgMTIyODktMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjQ3NyAoKzE4OCksIElub2RlIGJpdG1hcCBhdCAxMjQ3OCAoKzE4OSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODktMTIzMjAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIxLTEyNDc2LCAxMjQ3OS0xMzMxMgorICBGcmVlIGlub2RlczogMzA3My0zMzI4CitHcm91cCAxMzogKEJsb2NrcyAxMzMxMy0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzNTE0ICgrMjAxKSwgSW5vZGUgYml0bWFwIGF0IDEzNTE1ICgrMjAyKQorICBJbm9kZSB0YWJsZSBhdCAxMzMxMy0xMzM0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDUtMTM1MTMsIDEzNTE2LTE0MzM2CisgIEZyZWUgaW5vZGVzOiAzMzI5LTM1ODQKK0dyb3VwIDE0OiAoQmxvY2tzIDE0MzM3LTE1MzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQ1NTEgKCsyMTQpLCBJbm9kZSBiaXRtYXAgYXQgMTQ1NTIgKCsyMTUpCisgIElub2RlIHRhYmxlIGF0IDE0MzM3LTE0MzY4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM2OS0xNDU1MCwgMTQ1NTMtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzg0MAorR3JvdXAgMTU6IChCbG9ja3MgMTUzNjEtMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTU4OCAoKzIyNyksIElub2RlIGJpdG1hcCBhdCAxNTU4OSAoKzIyOCkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjEtMTUzOTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzkzLTE1NTg3LCAxNTU5MC0xNjM4NAorICBGcmVlIGlub2RlczogMzg0MS00MDk2CitHcm91cCAxNjogKEJsb2NrcyAxNjM4NS0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2NjI1ICgrMjQwKSwgSW5vZGUgYml0bWFwIGF0IDE2NjI2ICgrMjQxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4NS0xNjQxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0MTctMTY2MjQsIDE2NjI3LTE3NDA4CisgIEZyZWUgaW5vZGVzOiA0MDk3LTQzNTIKK0dyb3VwIDE3OiAoQmxvY2tzIDE3NDA5LTE4NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjIgKCsyNTMpLCBJbm9kZSBiaXRtYXAgYXQgMTc2NjMgKCsyNTQpCisgIElub2RlIHRhYmxlIGF0IDE3NDA5LTE3NDQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzQ0MS0xNzY2MSwgMTc2NjQtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDYwOAorR3JvdXAgMTg6IChCbG9ja3MgMTg0MzMtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxODY5OSAoKzI2NiksIElub2RlIGJpdG1hcCBhdCAxODcwMCAoKzI2NykKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzMtMTg0NjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDY1LTE4Njk4LCAxODcwMS0xOTQ1NgorICBGcmVlIGlub2RlczogNDYwOS00ODY0CitHcm91cCAxOTogKEJsb2NrcyAxOTQ1Ny0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NzM2ICgrMjc5KSwgSW5vZGUgYml0bWFwIGF0IDE5NzM3ICgrMjgwKQorICBJbm9kZSB0YWJsZSBhdCAxOTQ1Ny0xOTQ4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0ODktMTk3MzUsIDE5NzM4LTIwNDgwCisgIEZyZWUgaW5vZGVzOiA0ODY1LTUxMjAKK0dyb3VwIDIwOiAoQmxvY2tzIDIwNDgxLTIxNTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA3NzMgKCsyOTIpLCBJbm9kZSBiaXRtYXAgYXQgMjA3NzQgKCsyOTMpCisgIElub2RlIHRhYmxlIGF0IDIwNDgxLTIwNTEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDUxMy0yMDc3MiwgMjA3NzUtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDUxMjEtNTM3NgorR3JvdXAgMjE6IChCbG9ja3MgMjE1MDUtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTgxMCAoKzMwNSksIElub2RlIGJpdG1hcCBhdCAyMTgxMSAoKzMwNikKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDUtMjE1MzYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxNTM3LTIxODA5LCAyMTgxMi0yMjUyOAorICBGcmVlIGlub2RlczogNTM3Ny01NjMyCitHcm91cCAyMjogKEJsb2NrcyAyMjUyOS0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyODQ3ICgrMzE4KSwgSW5vZGUgYml0bWFwIGF0IDIyODQ4ICgrMzE5KQorICBJbm9kZSB0YWJsZSBhdCAyMjUyOS0yMjU2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1NjEtMjI4NDYsIDIyODQ5LTIzNTUyCisgIEZyZWUgaW5vZGVzOiA1NjMzLTU4ODgKK0dyb3VwIDIzOiAoQmxvY2tzIDIzNTUzLTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMjM4ODQgKCszMzEpLCBJbm9kZSBiaXRtYXAgYXQgMjM4ODUgKCszMzIpCisgIElub2RlIHRhYmxlIGF0IDIzNTUzLTIzNTg0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzU4NS0yMzg4MywgMjM4ODYtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDU4ODktNjE0NAorR3JvdXAgMjQ6IChCbG9ja3MgMjQ1NzctMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNDkyMSAoKzM0NCksIElub2RlIGJpdG1hcCBhdCAyNDkyMiAoKzM0NSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzctMjQ2MDgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0NjA5LTI0OTIwLCAyNDkyMy0yNTYwMAorICBGcmVlIGlub2RlczogNjE0NS02NDAwCitHcm91cCAyNTogKEJsb2NrcyAyNTYwMS0yNjYyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU2MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1NjAyLTI1NjA1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjU2MDYtMjU4NjEKKyAgQmxvY2sgYml0bWFwIGF0IDI2MjE5ICgrNjE4KSwgSW5vZGUgYml0bWFwIGF0IDI2MjIwICgrNjE5KQorICBJbm9kZSB0YWJsZSBhdCAyNTg2Mi0yNTg5MyAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1ODk0LTI2MjE4LCAyNjIyMS0yNjYyNAorICBGcmVlIGlub2RlczogNjQwMS02NjU2CitHcm91cCAyNjogKEJsb2NrcyAyNjYyNS0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2OTk1ICgrMzcwKSwgSW5vZGUgYml0bWFwIGF0IDI2OTk2ICgrMzcxKQorICBJbm9kZSB0YWJsZSBhdCAyNjYyNS0yNjY1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2NTctMjY5OTQsIDI2OTk3LTI3NjQ4CisgIEZyZWUgaW5vZGVzOiA2NjU3LTY5MTIKK0dyb3VwIDI3OiAoQmxvY2tzIDI3NjQ5LTI4NjcyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNzY0OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjc2NTAtMjc2NTMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNzY1NC0yNzkwOQorICBCbG9jayBiaXRtYXAgYXQgMjgyOTMgKCs2NDQpLCBJbm9kZSBiaXRtYXAgYXQgMjgyOTQgKCs2NDUpCisgIElub2RlIHRhYmxlIGF0IDI3OTEwLTI3OTQxICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjc5NDItMjgyOTIsIDI4Mjk1LTI4NjcyCisgIEZyZWUgaW5vZGVzOiA2OTEzLTcxNjgKK0dyb3VwIDI4OiAoQmxvY2tzIDI4NjczLTI5Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMjkwNjkgKCszOTYpLCBJbm9kZSBiaXRtYXAgYXQgMjkwNzAgKCszOTcpCisgIElub2RlIHRhYmxlIGF0IDI4NjczLTI4NzA0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODcwNS0yOTA2OCwgMjkwNzEtMjk2OTYKKyAgRnJlZSBpbm9kZXM6IDcxNjktNzQyNAorR3JvdXAgMjk6IChCbG9ja3MgMjk2OTctMzA3MjApCisgIEJsb2NrIGJpdG1hcCBhdCAzMDEwNiAoKzQwOSksIElub2RlIGJpdG1hcCBhdCAzMDEwNyAoKzQxMCkKKyAgSW5vZGUgdGFibGUgYXQgMjk2OTctMjk3MjgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NzI5LTMwMTA1LCAzMDEwOC0zMDcyMAorICBGcmVlIGlub2RlczogNzQyNS03NjgwCitHcm91cCAzMDogKEJsb2NrcyAzMDcyMS0zMTc0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxMTQzICgrNDIyKSwgSW5vZGUgYml0bWFwIGF0IDMxMTQ0ICgrNDIzKQorICBJbm9kZSB0YWJsZSBhdCAzMDcyMS0zMDc1MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3NTMtMzExNDIsIDMxMTQ1LTMxNzQ0CisgIEZyZWUgaW5vZGVzOiA3NjgxLTc5MzYKK0dyb3VwIDMxOiAoQmxvY2tzIDMxNzQ1LTMyNzY4KQorICBCbG9jayBiaXRtYXAgYXQgMzIxODAgKCs0MzUpLCBJbm9kZSBiaXRtYXAgYXQgMzIxODEgKCs0MzYpCisgIElub2RlIHRhYmxlIGF0IDMxNzQ1LTMxNzc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTc3Ny0zMjE3OSwgMzIxODItMzI3NjgKKyAgRnJlZSBpbm9kZXM6IDc5MzctODE5MgorR3JvdXAgMzI6IChCbG9ja3MgMzI3NjktMzM3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzIxNyAoKzQ0OCksIElub2RlIGJpdG1hcCBhdCAzMzIxOCAoKzQ0OSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NjktMzI4MDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyODAxLTMzMjE2LCAzMzIxOS0zMzc5MgorICBGcmVlIGlub2RlczogODE5My04NDQ4CitHcm91cCAzMzogKEJsb2NrcyAzMzc5My0zNDgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDM0MjU0ICgrNDYxKSwgSW5vZGUgYml0bWFwIGF0IDM0MjU1ICgrNDYyKQorICBJbm9kZSB0YWJsZSBhdCAzMzc5My0zMzgyNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM4MjUtMzQyNTMsIDM0MjU2LTM0ODE2CisgIEZyZWUgaW5vZGVzOiA4NDQ5LTg3MDQKK0dyb3VwIDM0OiAoQmxvY2tzIDM0ODE3LTM1ODQwKQorICBCbG9jayBiaXRtYXAgYXQgMzUyOTEgKCs0NzQpLCBJbm9kZSBiaXRtYXAgYXQgMzUyOTIgKCs0NzUpCisgIElub2RlIHRhYmxlIGF0IDM0ODE3LTM0ODQ4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDg0OS0zNTI5MCwgMzUyOTMtMzU4NDAKKyAgRnJlZSBpbm9kZXM6IDg3MDUtODk2MAorR3JvdXAgMzU6IChCbG9ja3MgMzU4NDEtMzY4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjMyOCAoKzQ4NyksIElub2RlIGJpdG1hcCBhdCAzNjMyOSAoKzQ4OCkKKyAgSW5vZGUgdGFibGUgYXQgMzU4NDEtMzU4NzIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1ODczLTM2MzI3LCAzNjMzMC0zNjg2NAorICBGcmVlIGlub2RlczogODk2MS05MjE2CitHcm91cCAzNjogKEJsb2NrcyAzNjg2NS0zNzg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM3MzY1ICgrNTAwKSwgSW5vZGUgYml0bWFwIGF0IDM3MzY2ICgrNTAxKQorICBJbm9kZSB0YWJsZSBhdCAzNjg2NS0zNjg5NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzY4OTctMzczNjQsIDM3MzY3LTM3ODg4CisgIEZyZWUgaW5vZGVzOiA5MjE3LTk0NzIKK0dyb3VwIDM3OiAoQmxvY2tzIDM3ODg5LTM4OTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzg0MDIgKCs1MTMpLCBJbm9kZSBiaXRtYXAgYXQgMzg0MDMgKCs1MTQpCisgIElub2RlIHRhYmxlIGF0IDM3ODg5LTM3OTIwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzkyMS0zODQwMSwgMzg0MDQtMzg5MTIKKyAgRnJlZSBpbm9kZXM6IDk0NzMtOTcyOAorR3JvdXAgMzg6IChCbG9ja3MgMzg5MTMtMzk5MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzOTQzOSAoKzUyNiksIElub2RlIGJpdG1hcCBhdCAzOTQ0MCAoKzUyNykKKyAgSW5vZGUgdGFibGUgYXQgMzg5MTMtMzg5NDQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4OTQ1LTM5NDM4LCAzOTQ0MS0zOTkzNgorICBGcmVlIGlub2RlczogOTcyOS05OTg0CitHcm91cCAzOTogKEJsb2NrcyAzOTkzNy00MDk2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwNDc2ICgrNTM5KSwgSW5vZGUgYml0bWFwIGF0IDQwNDc3ICgrNTQwKQorICBJbm9kZSB0YWJsZSBhdCAzOTkzNy0zOTk2OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk5NjktNDA0NzUsIDQwNDc4LTQwOTYwCisgIEZyZWUgaW5vZGVzOiA5OTg1LTEwMjQwCitHcm91cCA0MDogKEJsb2NrcyA0MDk2MS00MTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQxNTEzICgrNTUyKSwgSW5vZGUgYml0bWFwIGF0IDQxNTE0ICgrNTUzKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2MS00MDk5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDA5OTMtNDE1MTIsIDQxNTE1LTQxOTg0CisgIEZyZWUgaW5vZGVzOiAxMDI0MS0xMDQ5NgorR3JvdXAgNDE6IChCbG9ja3MgNDE5ODUtNDMwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MjU1MCAoKzU2NSksIElub2RlIGJpdG1hcCBhdCA0MjU1MSAoKzU2NikKKyAgSW5vZGUgdGFibGUgYXQgNDE5ODUtNDIwMTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQyMDE3LTQyNTQ5LCA0MjU1Mi00MzAwOAorICBGcmVlIGlub2RlczogMTA0OTctMTA3NTIKK0dyb3VwIDQyOiAoQmxvY2tzIDQzMDA5LTQ0MDMyKQorICBCbG9jayBiaXRtYXAgYXQgNDM1ODcgKCs1NzgpLCBJbm9kZSBiaXRtYXAgYXQgNDM1ODggKCs1NzkpCisgIElub2RlIHRhYmxlIGF0IDQzMDA5LTQzMDQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzA0MS00MzU4NiwgNDM1ODktNDQwMzIKKyAgRnJlZSBpbm9kZXM6IDEwNzUzLTExMDA4CitHcm91cCA0MzogKEJsb2NrcyA0NDAzMy00NTA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ0NjI0ICgrNTkxKSwgSW5vZGUgYml0bWFwIGF0IDQ0NjI1ICgrNTkyKQorICBJbm9kZSB0YWJsZSBhdCA0NDAzMy00NDA2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDQwNjUtNDQ2MjMsIDQ0NjI2LTQ1MDU2CisgIEZyZWUgaW5vZGVzOiAxMTAwOS0xMTI2NAorR3JvdXAgNDQ6IChCbG9ja3MgNDUwNTctNDYwODApCisgIEJsb2NrIGJpdG1hcCBhdCA0NTY2MSAoKzYwNCksIElub2RlIGJpdG1hcCBhdCA0NTY2MiAoKzYwNSkKKyAgSW5vZGUgdGFibGUgYXQgNDUwNTctNDUwODgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ1MDg5LTQ1NjYwLCA0NTY2My00NjA4MAorICBGcmVlIGlub2RlczogMTEyNjUtMTE1MjAKK0dyb3VwIDQ1OiAoQmxvY2tzIDQ2MDgxLTQ3MTA0KQorICBCbG9jayBiaXRtYXAgYXQgNDY2OTggKCs2MTcpLCBJbm9kZSBiaXRtYXAgYXQgNDY2OTkgKCs2MTgpCisgIElub2RlIHRhYmxlIGF0IDQ2MDgxLTQ2MTEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjExMy00NjY5NywgNDY3MDAtNDcxMDQKKyAgRnJlZSBpbm9kZXM6IDExNTIxLTExNzc2CitHcm91cCA0NjogKEJsb2NrcyA0NzEwNS00ODEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ3NzM1ICgrNjMwKSwgSW5vZGUgYml0bWFwIGF0IDQ3NzM2ICgrNjMxKQorICBJbm9kZSB0YWJsZSBhdCA0NzEwNS00NzEzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDcxMzctNDc3MzQsIDQ3NzM3LTQ4MTI4CisgIEZyZWUgaW5vZGVzOiAxMTc3Ny0xMjAzMgorR3JvdXAgNDc6IChCbG9ja3MgNDgxMjktNDkxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0ODc3MiAoKzY0MyksIElub2RlIGJpdG1hcCBhdCA0ODc3MyAoKzY0NCkKKyAgSW5vZGUgdGFibGUgYXQgNDgxMjktNDgxNjAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ4MTYxLTQ4NzcxLCA0ODc3NC00OTE1MgorICBGcmVlIGlub2RlczogMTIwMzMtMTIyODgKK0dyb3VwIDQ4OiAoQmxvY2tzIDQ5MTUzLTUwMTc2KQorICBCbG9jayBiaXRtYXAgYXQgNDk4MDkgKCs2NTYpLCBJbm9kZSBiaXRtYXAgYXQgNDk4MTAgKCs2NTcpCisgIElub2RlIHRhYmxlIGF0IDQ5MTUzLTQ5MTg0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0OTE4NS00OTgwOCwgNDk4MTEtNTAxNzYKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTEyNTQ0CitHcm91cCA0OTogKEJsb2NrcyA1MDE3Ny01MTIwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTAxNzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDUwMTc4LTUwMTgxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTAxODItNTA0MzcKKyAgQmxvY2sgYml0bWFwIGF0IDUxMTA3ICgrOTMwKSwgSW5vZGUgYml0bWFwIGF0IDUxMTA4ICgrOTMxKQorICBJbm9kZSB0YWJsZSBhdCA1MDQzOC01MDQ2OSAoKzI2MSkKKyAgNzI5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUwNDcwLTUxMTA2LCA1MTEwOS01MTIwMAorICBGcmVlIGlub2RlczogMTI1NDUtMTI4MDAKK0dyb3VwIDUwOiAoQmxvY2tzIDUxMjAxLTUyMjI0KQorICBCbG9jayBiaXRtYXAgYXQgNTE4ODMgKCs2ODIpLCBJbm9kZSBiaXRtYXAgYXQgNTE4ODQgKCs2ODMpCisgIElub2RlIHRhYmxlIGF0IDUxMjAxLTUxMjMyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTIzMy01MTg4MiwgNTE4ODUtNTIyMjQKKyAgRnJlZSBpbm9kZXM6IDEyODAxLTEzMDU2CitHcm91cCA1MTogKEJsb2NrcyA1MjIyNS01MzI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUyOTIwICgrNjk1KSwgSW5vZGUgYml0bWFwIGF0IDUyOTIxICgrNjk2KQorICBJbm9kZSB0YWJsZSBhdCA1MjIyNS01MjI1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTIyNTctNTI5MTksIDUyOTIyLTUzMjQ4CisgIEZyZWUgaW5vZGVzOiAxMzA1Ny0xMzMxMgorR3JvdXAgNTI6IChCbG9ja3MgNTMyNDktNTQyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzk1NyAoKzcwOCksIElub2RlIGJpdG1hcCBhdCA1Mzk1OCAoKzcwOSkKKyAgSW5vZGUgdGFibGUgYXQgNTMyNDktNTMyODAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzMjgxLTUzOTU2LCA1Mzk1OS01NDI3MgorICBGcmVlIGlub2RlczogMTMzMTMtMTM1NjgKK0dyb3VwIDUzOiAoQmxvY2tzIDU0MjczLTU1Mjk2KQorICBCbG9jayBiaXRtYXAgYXQgNTQ5OTQgKCs3MjEpLCBJbm9kZSBiaXRtYXAgYXQgNTQ5OTUgKCs3MjIpCisgIElub2RlIHRhYmxlIGF0IDU0MjczLTU0MzA0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NDMwNS01NDk5MywgNTQ5OTYtNTUyOTYKKyAgRnJlZSBpbm9kZXM6IDEzNTY5LTEzODI0CitHcm91cCA1NDogKEJsb2NrcyA1NTI5Ny01NjMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MDMxICgrNzM0KSwgSW5vZGUgYml0bWFwIGF0IDU2MDMyICgrNzM1KQorICBJbm9kZSB0YWJsZSBhdCA1NTI5Ny01NTMyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTUzMjktNTYwMzAsIDU2MDMzLTU2MzIwCisgIEZyZWUgaW5vZGVzOiAxMzgyNS0xNDA4MAorR3JvdXAgNTU6IChCbG9ja3MgNTYzMjEtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1NzA2OCAoKzc0NyksIElub2RlIGJpdG1hcCBhdCA1NzA2OSAoKzc0OCkKKyAgSW5vZGUgdGFibGUgYXQgNTYzMjEtNTYzNTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU2MzUzLTU3MDY3LCA1NzA3MC01NzM0NAorICBGcmVlIGlub2RlczogMTQwODEtMTQzMzYKK0dyb3VwIDU2OiAoQmxvY2tzIDU3MzQ1LTU4MzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTgxMDUgKCs3NjApLCBJbm9kZSBiaXRtYXAgYXQgNTgxMDYgKCs3NjEpCisgIElub2RlIHRhYmxlIGF0IDU3MzQ1LTU3Mzc2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NzM3Ny01ODEwNCwgNTgxMDctNTgzNjgKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE0NTkyCitHcm91cCA1NzogKEJsb2NrcyA1ODM2OS01OTM5MikKKyAgQmxvY2sgYml0bWFwIGF0IDU5MTQyICgrNzczKSwgSW5vZGUgYml0bWFwIGF0IDU5MTQzICgrNzc0KQorICBJbm9kZSB0YWJsZSBhdCA1ODM2OS01ODQwMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg0MDEtNTkxNDEsIDU5MTQ0LTU5MzkyCisgIEZyZWUgaW5vZGVzOiAxNDU5My0xNDg0OAorR3JvdXAgNTg6IChCbG9ja3MgNTkzOTMtNjA0MTYpCisgIEJsb2NrIGJpdG1hcCBhdCA2MDE3OSAoKzc4NiksIElub2RlIGJpdG1hcCBhdCA2MDE4MCAoKzc4NykKKyAgSW5vZGUgdGFibGUgYXQgNTkzOTMtNTk0MjQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU5NDI1LTYwMTc4LCA2MDE4MS02MDQxNgorICBGcmVlIGlub2RlczogMTQ4NDktMTUxMDQKK0dyb3VwIDU5OiAoQmxvY2tzIDYwNDE3LTYxNDQwKQorICBCbG9jayBiaXRtYXAgYXQgNjEyMTYgKCs3OTkpLCBJbm9kZSBiaXRtYXAgYXQgNjEyMTcgKCs4MDApCisgIElub2RlIHRhYmxlIGF0IDYwNDE3LTYwNDQ4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MDQ0OS02MTIxNSwgNjEyMTgtNjE0NDAKKyAgRnJlZSBpbm9kZXM6IDE1MTA1LTE1MzYwCitHcm91cCA2MDogKEJsb2NrcyA2MTQ0MS02MjQ2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDYyMjUzICgrODEyKSwgSW5vZGUgYml0bWFwIGF0IDYyMjU0ICgrODEzKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ0MS02MTQ3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE0NzMtNjIyNTIsIDYyMjU1LTYyNDY0CisgIEZyZWUgaW5vZGVzOiAxNTM2MS0xNTYxNgorR3JvdXAgNjE6IChCbG9ja3MgNjI0NjUtNjM0ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MzI5MCAoKzgyNSksIElub2RlIGJpdG1hcCBhdCA2MzI5MSAoKzgyNikKKyAgSW5vZGUgdGFibGUgYXQgNjI0NjUtNjI0OTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYyNDk3LTYzMjg5LCA2MzI5Mi02MzQ4OAorICBGcmVlIGlub2RlczogMTU2MTctMTU4NzIKK0dyb3VwIDYyOiAoQmxvY2tzIDYzNDg5LTY0NTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjQzMjcgKCs4MzgpLCBJbm9kZSBiaXRtYXAgYXQgNjQzMjggKCs4MzkpCisgIElub2RlIHRhYmxlIGF0IDYzNDg5LTYzNTIwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MzUyMS02NDMyNiwgNjQzMjktNjQ1MTIKKyAgRnJlZSBpbm9kZXM6IDE1ODczLTE2MTI4CitHcm91cCA2MzogKEJsb2NrcyA2NDUxMy02NTUzNikKKyAgQmxvY2sgYml0bWFwIGF0IDY1MzY0ICgrODUxKSwgSW5vZGUgYml0bWFwIGF0IDY1MzY1ICgrODUyKQorICBJbm9kZSB0YWJsZSBhdCA2NDUxMy02NDU0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjQ1NDUtNjUzNjMsIDY1MzY2LTY1NTM2CisgIEZyZWUgaW5vZGVzOiAxNjEyOS0xNjM4NAorR3JvdXAgNjQ6IChCbG9ja3MgNjU1MzctNjY1NjApCisgIEJsb2NrIGJpdG1hcCBhdCA2NjQwMSAoKzg2NCksIElub2RlIGJpdG1hcCBhdCA2NjQwMiAoKzg2NSkKKyAgSW5vZGUgdGFibGUgYXQgNjU1MzctNjU1NjgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1NTY5LTY2NDAwLCA2NjQwMy02NjU2MAorICBGcmVlIGlub2RlczogMTYzODUtMTY2NDAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBCbG9jayBiaXRtYXAgYXQgNjc0MzggKCs4NzcpLCBJbm9kZSBiaXRtYXAgYXQgNjc0MzkgKCs4NzgpCisgIElub2RlIHRhYmxlIGF0IDY2NTYxLTY2NTkyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NjU5My02NzQzNywgNjc0NDAtNjc1ODQKKyAgRnJlZSBpbm9kZXM6IDE2NjQxLTE2ODk2CitHcm91cCA2NjogKEJsb2NrcyA2NzU4NS02ODYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDY4NDc1ICgrODkwKSwgSW5vZGUgYml0bWFwIGF0IDY4NDc2ICgrODkxKQorICBJbm9kZSB0YWJsZSBhdCA2NzU4NS02NzYxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjc2MTctNjg0NzQsIDY4NDc3LTY4NjA4CisgIEZyZWUgaW5vZGVzOiAxNjg5Ny0xNzE1MgorR3JvdXAgNjc6IChCbG9ja3MgNjg2MDktNjk2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA2OTUxMiAoKzkwMyksIElub2RlIGJpdG1hcCBhdCA2OTUxMyAoKzkwNCkKKyAgSW5vZGUgdGFibGUgYXQgNjg2MDktNjg2NDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY4NjQxLTY5NTExLCA2OTUxNC02OTYzMgorICBGcmVlIGlub2RlczogMTcxNTMtMTc0MDgKK0dyb3VwIDY4OiAoQmxvY2tzIDY5NjMzLTcwNjU2KQorICBCbG9jayBiaXRtYXAgYXQgNzA1NDkgKCs5MTYpLCBJbm9kZSBiaXRtYXAgYXQgNzA1NTAgKCs5MTcpCisgIElub2RlIHRhYmxlIGF0IDY5NjMzLTY5NjY0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2OTY2NS03MDU0OCwgNzA1NTEtNzA2NTYKKyAgRnJlZSBpbm9kZXM6IDE3NDA5LTE3NjY0CitHcm91cCA2OTogKEJsb2NrcyA3MDY1Ny03MTY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNTg2ICgrOTI5KSwgSW5vZGUgYml0bWFwIGF0IDcxNTg3ICgrOTMwKQorICBJbm9kZSB0YWJsZSBhdCA3MDY1Ny03MDY4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzA2ODktNzE1ODUsIDcxNTg4LTcxNjgwCisgIEZyZWUgaW5vZGVzOiAxNzY2NS0xNzkyMAorR3JvdXAgNzA6IChCbG9ja3MgNzE2ODEtNzI3MDQpCisgIEJsb2NrIGJpdG1hcCBhdCA3MjYyMyAoKzk0MiksIElub2RlIGJpdG1hcCBhdCA3MjYyNCAoKzk0MykKKyAgSW5vZGUgdGFibGUgYXQgNzE2ODEtNzE3MTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzEzLTcyNjIyLCA3MjYyNS03MjcwNAorICBGcmVlIGlub2RlczogMTc5MjEtMTgxNzYKK0dyb3VwIDcxOiAoQmxvY2tzIDcyNzA1LTczNzI4KQorICBCbG9jayBiaXRtYXAgYXQgNzM2NjAgKCs5NTUpLCBJbm9kZSBiaXRtYXAgYXQgNzM2NjEgKCs5NTYpCisgIElub2RlIHRhYmxlIGF0IDcyNzA1LTcyNzM2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MjczNy03MzY1OSwgNzM2NjItNzM3MjgKKyAgRnJlZSBpbm9kZXM6IDE4MTc3LTE4NDMyCitHcm91cCA3MjogKEJsb2NrcyA3MzcyOS03NDc1MikKKyAgQmxvY2sgYml0bWFwIGF0IDc0Njk3ICgrOTY4KSwgSW5vZGUgYml0bWFwIGF0IDc0Njk4ICgrOTY5KQorICBJbm9kZSB0YWJsZSBhdCA3MzcyOS03Mzc2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzM3NjEtNzQ2OTYsIDc0Njk5LTc0NzUyCisgIEZyZWUgaW5vZGVzOiAxODQzMy0xODY4OAorR3JvdXAgNzM6IChCbG9ja3MgNzQ3NTMtNzU3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCA3NTczNCAoKzk4MSksIElub2RlIGJpdG1hcCBhdCA3NTczNSAoKzk4MikKKyAgSW5vZGUgdGFibGUgYXQgNzQ3NTMtNzQ3ODQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0Nzg1LTc1NzMzLCA3NTczNi03NTc3NgorICBGcmVlIGlub2RlczogMTg2ODktMTg5NDQKK0dyb3VwIDc0OiAoQmxvY2tzIDc1Nzc3LTc2ODAwKQorICBCbG9jayBiaXRtYXAgYXQgNzY3NzEgKCs5OTQpLCBJbm9kZSBiaXRtYXAgYXQgNzY3NzIgKCs5OTUpCisgIElub2RlIHRhYmxlIGF0IDc1Nzc3LTc1ODA4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NTgwOS03Njc3MCwgNzY3NzMtNzY4MDAKKyAgRnJlZSBpbm9kZXM6IDE4OTQ1LTE5MjAwCitHcm91cCA3NTogKEJsb2NrcyA3NjgwMS03NzgyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDc3ODA4ICgrMTAwNyksIElub2RlIGJpdG1hcCBhdCA3NzgwOSAoKzEwMDgpCisgIElub2RlIHRhYmxlIGF0IDc2ODAxLTc2ODMyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NjgzMy03NzgwNywgNzc4MTAtNzc4MjQKKyAgRnJlZSBpbm9kZXM6IDE5MjAxLTE5NDU2CitHcm91cCA3NjogKEJsb2NrcyA3NzgyNS03ODg0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDc4ODQ1ICgrMTAyMCksIElub2RlIGJpdG1hcCBhdCA3ODg0NiAoKzEwMjEpCisgIElub2RlIHRhYmxlIGF0IDc3ODI1LTc3ODU2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Nzg1Ny03ODg0NCwgNzg4NDctNzg4NDgKKyAgRnJlZSBpbm9kZXM6IDE5NDU3LTE5NzEyCitHcm91cCA3NzogKEJsb2NrcyA3ODg0OS03OTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDc4ODkwICgrNDEpLCBJbm9kZSBiaXRtYXAgYXQgNzg4OTEgKCs0MikKKyAgSW5vZGUgdGFibGUgYXQgNzg4NDktNzg4ODAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc4ODgxLTc4ODg5LCA3ODg5Mi03OTg3MgorICBGcmVlIGlub2RlczogMTk3MTMtMTk5NjgKK0dyb3VwIDc4OiAoQmxvY2tzIDc5ODczLTgwODk2KQorICBCbG9jayBiaXRtYXAgYXQgNzk5MjcgKCs1NCksIElub2RlIGJpdG1hcCBhdCA3OTkyOCAoKzU1KQorICBJbm9kZSB0YWJsZSBhdCA3OTg3My03OTkwNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzk5MDUtNzk5MjYsIDc5OTI5LTgwODk2CisgIEZyZWUgaW5vZGVzOiAxOTk2OS0yMDIyNAorR3JvdXAgNzk6IChCbG9ja3MgODA4OTctODE5MjApCisgIEJsb2NrIGJpdG1hcCBhdCA4MDk2NCAoKzY3KSwgSW5vZGUgYml0bWFwIGF0IDgwOTY1ICgrNjgpCisgIElub2RlIHRhYmxlIGF0IDgwODk3LTgwOTI4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MDkyOS04MDk2MywgODA5NjYtODE5MjAKKyAgRnJlZSBpbm9kZXM6IDIwMjI1LTIwNDgwCitHcm91cCA4MDogKEJsb2NrcyA4MTkyMS04Mjk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDgyMDAxICgrODApLCBJbm9kZSBiaXRtYXAgYXQgODIwMDIgKCs4MSkKKyAgSW5vZGUgdGFibGUgYXQgODE5MjEtODE5NTIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgxOTUzLTgyMDAwLCA4MjAwMy04Mjk0NAorICBGcmVlIGlub2RlczogMjA0ODEtMjA3MzYKK0dyb3VwIDgxOiAoQmxvY2tzIDgyOTQ1LTgzOTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4Mjk0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgODI5NDYtODI5NDkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4Mjk1MC04MzIwNQorICBCbG9jayBiaXRtYXAgYXQgODM1NjAgKCs2MTUpLCBJbm9kZSBiaXRtYXAgYXQgODM1NjEgKCs2MTYpCisgIElub2RlIHRhYmxlIGF0IDgzMjA2LTgzMjM3ICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODMyMzgtODM1NTksIDgzNTYyLTgzOTY4CisgIEZyZWUgaW5vZGVzOiAyMDczNy0yMDk5MgorR3JvdXAgODI6IChCbG9ja3MgODM5NjktODQ5OTIpCisgIEJsb2NrIGJpdG1hcCBhdCA4NDA3NSAoKzEwNiksIElub2RlIGJpdG1hcCBhdCA4NDA3NiAoKzEwNykKKyAgSW5vZGUgdGFibGUgYXQgODM5NjktODQwMDAKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0MDAxLTg0MDc0LCA4NDA3Ny04NDk5MgorICBGcmVlIGlub2RlczogMjA5OTMtMjEyNDgKK0dyb3VwIDgzOiAoQmxvY2tzIDg0OTkzLTg2MDE2KQorICBCbG9jayBiaXRtYXAgYXQgODUxMTIgKCsxMTkpLCBJbm9kZSBiaXRtYXAgYXQgODUxMTMgKCsxMjApCisgIElub2RlIHRhYmxlIGF0IDg0OTkzLTg1MDI0CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NTAyNS04NTExMSwgODUxMTQtODYwMTYKKyAgRnJlZSBpbm9kZXM6IDIxMjQ5LTIxNTA0CitHcm91cCA4NDogKEJsb2NrcyA4NjAxNy04NzA0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDg2MTQ5ICgrMTMyKSwgSW5vZGUgYml0bWFwIGF0IDg2MTUwICgrMTMzKQorICBJbm9kZSB0YWJsZSBhdCA4NjAxNy04NjA0OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODYwNDktODYxNDgsIDg2MTUxLTg3MDQwCisgIEZyZWUgaW5vZGVzOiAyMTUwNS0yMTc2MAorR3JvdXAgODU6IChCbG9ja3MgODcwNDEtODgwNjQpCisgIEJsb2NrIGJpdG1hcCBhdCA4NzE4NiAoKzE0NSksIElub2RlIGJpdG1hcCBhdCA4NzE4NyAoKzE0NikKKyAgSW5vZGUgdGFibGUgYXQgODcwNDEtODcwNzIKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MDczLTg3MTg1LCA4NzE4OC04ODA2NAorICBGcmVlIGlub2RlczogMjE3NjEtMjIwMTYKK0dyb3VwIDg2OiAoQmxvY2tzIDg4MDY1LTg5MDg4KQorICBCbG9jayBiaXRtYXAgYXQgODgyMjMgKCsxNTgpLCBJbm9kZSBiaXRtYXAgYXQgODgyMjQgKCsxNTkpCisgIElub2RlIHRhYmxlIGF0IDg4MDY1LTg4MDk2CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4ODA5Ny04ODIyMiwgODgyMjUtODkwODgKKyAgRnJlZSBpbm9kZXM6IDIyMDE3LTIyMjcyCitHcm91cCA4NzogKEJsb2NrcyA4OTA4OS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDg5MjYwICgrMTcxKSwgSW5vZGUgYml0bWFwIGF0IDg5MjYxICgrMTcyKQorICBJbm9kZSB0YWJsZSBhdCA4OTA4OS04OTEyMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODkxMjEtODkyNTksIDg5MjYyLTkwMTEyCisgIEZyZWUgaW5vZGVzOiAyMjI3My0yMjUyOAorR3JvdXAgODg6IChCbG9ja3MgOTAxMTMtOTExMzYpCisgIEJsb2NrIGJpdG1hcCBhdCA5MDI5NyAoKzE4NCksIElub2RlIGJpdG1hcCBhdCA5MDI5OCAoKzE4NSkKKyAgSW5vZGUgdGFibGUgYXQgOTAxMTMtOTAxNDQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwMTQ1LTkwMjk2LCA5MDI5OS05MTEzNgorICBGcmVlIGlub2RlczogMjI1MjktMjI3ODQKK0dyb3VwIDg5OiAoQmxvY2tzIDkxMTM3LTkyMTYwKQorICBCbG9jayBiaXRtYXAgYXQgOTEzMzQgKCsxOTcpLCBJbm9kZSBiaXRtYXAgYXQgOTEzMzUgKCsxOTgpCisgIElub2RlIHRhYmxlIGF0IDkxMTM3LTkxMTY4CisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MTE2OS05MTMzMywgOTEzMzYtOTIxNjAKKyAgRnJlZSBpbm9kZXM6IDIyNzg1LTIzMDQwCitHcm91cCA5MDogKEJsb2NrcyA5MjE2MS05MzE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDkyMzcxICgrMjEwKSwgSW5vZGUgYml0bWFwIGF0IDkyMzcyICgrMjExKQorICBJbm9kZSB0YWJsZSBhdCA5MjE2MS05MjE5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTIxOTMtOTIzNzAsIDkyMzczLTkzMTg0CisgIEZyZWUgaW5vZGVzOiAyMzA0MS0yMzI5NgorR3JvdXAgOTE6IChCbG9ja3MgOTMxODUtOTQyMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA5MzQwOCAoKzIyMyksIElub2RlIGJpdG1hcCBhdCA5MzQwOSAoKzIyNCkKKyAgSW5vZGUgdGFibGUgYXQgOTMxODUtOTMyMTYKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkzMjE3LTkzNDA3LCA5MzQxMC05NDIwOAorICBGcmVlIGlub2RlczogMjMyOTctMjM1NTIKK0dyb3VwIDkyOiAoQmxvY2tzIDk0MjA5LTk1MjMyKQorICBCbG9jayBiaXRtYXAgYXQgOTQ0NDUgKCsyMzYpLCBJbm9kZSBiaXRtYXAgYXQgOTQ0NDYgKCsyMzcpCisgIElub2RlIHRhYmxlIGF0IDk0MjA5LTk0MjQwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDI0MS05NDQ0NCwgOTQ0NDctOTUyMzIKKyAgRnJlZSBpbm9kZXM6IDIzNTUzLTIzODA4CitHcm91cCA5MzogKEJsb2NrcyA5NTIzMy05NjI1NikKKyAgQmxvY2sgYml0bWFwIGF0IDk1NDgyICgrMjQ5KSwgSW5vZGUgYml0bWFwIGF0IDk1NDgzICgrMjUwKQorICBJbm9kZSB0YWJsZSBhdCA5NTIzMy05NTI2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUyNjUtOTU0ODEsIDk1NDg0LTk2MjU2CisgIEZyZWUgaW5vZGVzOiAyMzgwOS0yNDA2NAorR3JvdXAgOTQ6IChCbG9ja3MgOTYyNTctOTcyODApCisgIEJsb2NrIGJpdG1hcCBhdCA5NjUxOSAoKzI2MiksIElub2RlIGJpdG1hcCBhdCA5NjUyMCAoKzI2MykKKyAgSW5vZGUgdGFibGUgYXQgOTYyNTctOTYyODgKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk2Mjg5LTk2NTE4LCA5NjUyMS05NzI4MAorICBGcmVlIGlub2RlczogMjQwNjUtMjQzMjAKK0dyb3VwIDk1OiAoQmxvY2tzIDk3MjgxLTk4MzA0KQorICBCbG9jayBiaXRtYXAgYXQgOTc1NTYgKCsyNzUpLCBJbm9kZSBiaXRtYXAgYXQgOTc1NTcgKCsyNzYpCisgIElub2RlIHRhYmxlIGF0IDk3MjgxLTk3MzEyCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzMxMy05NzU1NSwgOTc1NTgtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDI0MzIxLTI0NTc2CitHcm91cCA5NjogKEJsb2NrcyA5ODMwNS05OTMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDk4NTkzICgrMjg4KSwgSW5vZGUgYml0bWFwIGF0IDk4NTk0ICgrMjg5KQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNS05ODMzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTgzMzctOTg1OTIsIDk4NTk1LTk5MzI4CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNDgzMgorR3JvdXAgOTc6IChCbG9ja3MgOTkzMjktMTAwMzUyKQorICBCbG9jayBiaXRtYXAgYXQgOTk2MzAgKCszMDEpLCBJbm9kZSBiaXRtYXAgYXQgOTk2MzEgKCszMDIpCisgIElub2RlIHRhYmxlIGF0IDk5MzI5LTk5MzYwCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTM2MS05OTYyOSwgOTk2MzItMTAwMzUyCisgIEZyZWUgaW5vZGVzOiAyNDgzMy0yNTA4OAorR3JvdXAgOTg6IChCbG9ja3MgMTAwMzUzLTEwMTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMDY2NyAoKzMxNCksIElub2RlIGJpdG1hcCBhdCAxMDA2NjggKCszMTUpCisgIElub2RlIHRhYmxlIGF0IDEwMDM1My0xMDAzODQKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMDM4NS0xMDA2NjYsIDEwMDY2OS0xMDEzNzYKKyAgRnJlZSBpbm9kZXM6IDI1MDg5LTI1MzQ0CitHcm91cCA5OTogKEJsb2NrcyAxMDEzNzctMTAyNDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTAxNzA0ICgrMzI3KSwgSW5vZGUgYml0bWFwIGF0IDEwMTcwNSAoKzMyOCkKKyAgSW5vZGUgdGFibGUgYXQgMTAxMzc3LTEwMTQwOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAxNDA5LTEwMTcwMywgMTAxNzA2LTEwMjQwMAorICBGcmVlIGlub2RlczogMjUzNDUtMjU2MDAKK0dyb3VwIDEwMDogKEJsb2NrcyAxMDI0MDEtMTAzNDI0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNzQxICgrMzQwKSwgSW5vZGUgYml0bWFwIGF0IDEwMjc0MiAoKzM0MSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDAxLTEwMjQzMgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDMzLTEwMjc0MCwgMTAyNzQzLTEwMzQyNAorICBGcmVlIGlub2RlczogMjU2MDEtMjU4NTYKK0dyb3VwIDEwMTogKEJsb2NrcyAxMDM0MjUtMTA0NDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTAzNzc4ICgrMzUzKSwgSW5vZGUgYml0bWFwIGF0IDEwMzc3OSAoKzM1NCkKKyAgSW5vZGUgdGFibGUgYXQgMTAzNDI1LTEwMzQ1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAzNDU3LTEwMzc3NywgMTAzNzgwLTEwNDQ0OAorICBGcmVlIGlub2RlczogMjU4NTctMjYxMTIKK0dyb3VwIDEwMjogKEJsb2NrcyAxMDQ0NDktMTA1NDcyKQorICBCbG9jayBiaXRtYXAgYXQgMTA0ODE1ICgrMzY2KSwgSW5vZGUgYml0bWFwIGF0IDEwNDgxNiAoKzM2NykKKyAgSW5vZGUgdGFibGUgYXQgMTA0NDQ5LTEwNDQ4MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA0NDgxLTEwNDgxNCwgMTA0ODE3LTEwNTQ3MgorICBGcmVlIGlub2RlczogMjYxMTMtMjYzNjgKK0dyb3VwIDEwMzogKEJsb2NrcyAxMDU0NzMtMTA2NDk2KQorICBCbG9jayBiaXRtYXAgYXQgMTA1ODUyICgrMzc5KSwgSW5vZGUgYml0bWFwIGF0IDEwNTg1MyAoKzM4MCkKKyAgSW5vZGUgdGFibGUgYXQgMTA1NDczLTEwNTUwNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1NTA1LTEwNTg1MSwgMTA1ODU0LTEwNjQ5NgorICBGcmVlIGlub2RlczogMjYzNjktMjY2MjQKK0dyb3VwIDEwNDogKEJsb2NrcyAxMDY0OTctMTA3NTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTA2ODg5ICgrMzkyKSwgSW5vZGUgYml0bWFwIGF0IDEwNjg5MCAoKzM5MykKKyAgSW5vZGUgdGFibGUgYXQgMTA2NDk3LTEwNjUyOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA2NTI5LTEwNjg4OCwgMTA2ODkxLTEwNzUyMAorICBGcmVlIGlub2RlczogMjY2MjUtMjY4ODAKK0dyb3VwIDEwNTogKEJsb2NrcyAxMDc1MjEtMTA4NTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTA3OTI2ICgrNDA1KSwgSW5vZGUgYml0bWFwIGF0IDEwNzkyNyAoKzQwNikKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTIxLTEwNzU1MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA3NTUzLTEwNzkyNSwgMTA3OTI4LTEwODU0NAorICBGcmVlIGlub2RlczogMjY4ODEtMjcxMzYKK0dyb3VwIDEwNjogKEJsb2NrcyAxMDg1NDUtMTA5NTY4KQorICBCbG9jayBiaXRtYXAgYXQgMTA4OTYzICgrNDE4KSwgSW5vZGUgYml0bWFwIGF0IDEwODk2NCAoKzQxOSkKKyAgSW5vZGUgdGFibGUgYXQgMTA4NTQ1LTEwODU3NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA4NTc3LTEwODk2MiwgMTA4OTY1LTEwOTU2OAorICBGcmVlIGlub2RlczogMjcxMzctMjczOTIKK0dyb3VwIDEwNzogKEJsb2NrcyAxMDk1NjktMTEwNTkyKQorICBCbG9jayBiaXRtYXAgYXQgMTEwMDAwICgrNDMxKSwgSW5vZGUgYml0bWFwIGF0IDExMDAwMSAoKzQzMikKKyAgSW5vZGUgdGFibGUgYXQgMTA5NTY5LTEwOTYwMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA5NjAxLTEwOTk5OSwgMTEwMDAyLTExMDU5MgorICBGcmVlIGlub2RlczogMjczOTMtMjc2NDgKK0dyb3VwIDEwODogKEJsb2NrcyAxMTA1OTMtMTExNjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTExMDM3ICgrNDQ0KSwgSW5vZGUgYml0bWFwIGF0IDExMTAzOCAoKzQ0NSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwNTkzLTExMDYyNAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwNjI1LTExMTAzNiwgMTExMDM5LTExMTYxNgorICBGcmVlIGlub2RlczogMjc2NDktMjc5MDQKK0dyb3VwIDEwOTogKEJsb2NrcyAxMTE2MTctMTEyNjQwKQorICBCbG9jayBiaXRtYXAgYXQgMTEyMDc0ICgrNDU3KSwgSW5vZGUgYml0bWFwIGF0IDExMjA3NSAoKzQ1OCkKKyAgSW5vZGUgdGFibGUgYXQgMTExNjE3LTExMTY0OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTExNjQ5LTExMjA3MywgMTEyMDc2LTExMjY0MAorICBGcmVlIGlub2RlczogMjc5MDUtMjgxNjAKK0dyb3VwIDExMDogKEJsb2NrcyAxMTI2NDEtMTEzNjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEzMTExICgrNDcwKSwgSW5vZGUgYml0bWFwIGF0IDExMzExMiAoKzQ3MSkKKyAgSW5vZGUgdGFibGUgYXQgMTEyNjQxLTExMjY3MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNjczLTExMzExMCwgMTEzMTEzLTExMzY2NAorICBGcmVlIGlub2RlczogMjgxNjEtMjg0MTYKK0dyb3VwIDExMTogKEJsb2NrcyAxMTM2NjUtMTE0Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTE0MTQ4ICgrNDgzKSwgSW5vZGUgYml0bWFwIGF0IDExNDE0OSAoKzQ4NCkKKyAgSW5vZGUgdGFibGUgYXQgMTEzNjY1LTExMzY5NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEzNjk3LTExNDE0NywgMTE0MTUwLTExNDY4OAorICBGcmVlIGlub2RlczogMjg0MTctMjg2NzIKK0dyb3VwIDExMjogKEJsb2NrcyAxMTQ2ODktMTE1NzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTE1MTg1ICgrNDk2KSwgSW5vZGUgYml0bWFwIGF0IDExNTE4NiAoKzQ5NykKKyAgSW5vZGUgdGFibGUgYXQgMTE0Njg5LTExNDcyMAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE0NzIxLTExNTE4NCwgMTE1MTg3LTExNTcxMgorICBGcmVlIGlub2RlczogMjg2NzMtMjg5MjgKK0dyb3VwIDExMzogKEJsb2NrcyAxMTU3MTMtMTE2NzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTE2MjIyICgrNTA5KSwgSW5vZGUgYml0bWFwIGF0IDExNjIyMyAoKzUxMCkKKyAgSW5vZGUgdGFibGUgYXQgMTE1NzEzLTExNTc0NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE1NzQ1LTExNjIyMSwgMTE2MjI0LTExNjczNgorICBGcmVlIGlub2RlczogMjg5MjktMjkxODQKK0dyb3VwIDExNDogKEJsb2NrcyAxMTY3MzctMTE3NzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTE3MjU5ICgrNTIyKSwgSW5vZGUgYml0bWFwIGF0IDExNzI2MCAoKzUyMykKKyAgSW5vZGUgdGFibGUgYXQgMTE2NzM3LTExNjc2OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE2NzY5LTExNzI1OCwgMTE3MjYxLTExNzc2MAorICBGcmVlIGlub2RlczogMjkxODUtMjk0NDAKK0dyb3VwIDExNTogKEJsb2NrcyAxMTc3NjEtMTE4Nzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTE4Mjk2ICgrNTM1KSwgSW5vZGUgYml0bWFwIGF0IDExODI5NyAoKzUzNikKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzYxLTExNzc5MgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3NzkzLTExODI5NSwgMTE4Mjk4LTExODc4NAorICBGcmVlIGlub2RlczogMjk0NDEtMjk2OTYKK0dyb3VwIDExNjogKEJsb2NrcyAxMTg3ODUtMTE5ODA4KQorICBCbG9jayBiaXRtYXAgYXQgMTE5MzMzICgrNTQ4KSwgSW5vZGUgYml0bWFwIGF0IDExOTMzNCAoKzU0OSkKKyAgSW5vZGUgdGFibGUgYXQgMTE4Nzg1LTExODgxNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE4ODE3LTExOTMzMiwgMTE5MzM1LTExOTgwOAorICBGcmVlIGlub2RlczogMjk2OTctMjk5NTIKK0dyb3VwIDExNzogKEJsb2NrcyAxMTk4MDktMTIwODMyKQorICBCbG9jayBiaXRtYXAgYXQgMTIwMzcwICgrNTYxKSwgSW5vZGUgYml0bWFwIGF0IDEyMDM3MSAoKzU2MikKKyAgSW5vZGUgdGFibGUgYXQgMTE5ODA5LTExOTg0MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE5ODQxLTEyMDM2OSwgMTIwMzcyLTEyMDgzMgorICBGcmVlIGlub2RlczogMjk5NTMtMzAyMDgKK0dyb3VwIDExODogKEJsb2NrcyAxMjA4MzMtMTIxODU2KQorICBCbG9jayBiaXRtYXAgYXQgMTIxNDA3ICgrNTc0KSwgSW5vZGUgYml0bWFwIGF0IDEyMTQwOCAoKzU3NSkKKyAgSW5vZGUgdGFibGUgYXQgMTIwODMzLTEyMDg2NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIwODY1LTEyMTQwNiwgMTIxNDA5LTEyMTg1NgorICBGcmVlIGlub2RlczogMzAyMDktMzA0NjQKK0dyb3VwIDExOTogKEJsb2NrcyAxMjE4NTctMTIyODgwKQorICBCbG9jayBiaXRtYXAgYXQgMTIyNDQ0ICgrNTg3KSwgSW5vZGUgYml0bWFwIGF0IDEyMjQ0NSAoKzU4OCkKKyAgSW5vZGUgdGFibGUgYXQgMTIxODU3LTEyMTg4OAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIxODg5LTEyMjQ0MywgMTIyNDQ2LTEyMjg4MAorICBGcmVlIGlub2RlczogMzA0NjUtMzA3MjAKK0dyb3VwIDEyMDogKEJsb2NrcyAxMjI4ODEtMTIzOTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTIzNDgxICgrNjAwKSwgSW5vZGUgYml0bWFwIGF0IDEyMzQ4MiAoKzYwMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgxLTEyMjkxMgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIyOTEzLTEyMzQ4MCwgMTIzNDgzLTEyMzkwNAorICBGcmVlIGlub2RlczogMzA3MjEtMzA5NzYKK0dyb3VwIDEyMTogKEJsb2NrcyAxMjM5MDUtMTI0OTI4KQorICBCbG9jayBiaXRtYXAgYXQgMTI0NTE4ICgrNjEzKSwgSW5vZGUgYml0bWFwIGF0IDEyNDUxOSAoKzYxNCkKKyAgSW5vZGUgdGFibGUgYXQgMTIzOTA1LTEyMzkzNgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzOTM3LTEyNDUxNywgMTI0NTIwLTEyNDkyOAorICBGcmVlIGlub2RlczogMzA5NzctMzEyMzIKK0dyb3VwIDEyMjogKEJsb2NrcyAxMjQ5MjktMTI1OTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTI1NTU1ICgrNjI2KSwgSW5vZGUgYml0bWFwIGF0IDEyNTU1NiAoKzYyNykKKyAgSW5vZGUgdGFibGUgYXQgMTI0OTI5LTEyNDk2MAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI0OTYxLTEyNTU1NCwgMTI1NTU3LTEyNTk1MgorICBGcmVlIGlub2RlczogMzEyMzMtMzE0ODgKK0dyb3VwIDEyMzogKEJsb2NrcyAxMjU5NTMtMTI2OTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTI2NTkyICgrNjM5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjU5MyAoKzY0MCkKKyAgSW5vZGUgdGFibGUgYXQgMTI1OTUzLTEyNTk4NAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI1OTg1LTEyNjU5MSwgMTI2NTk0LTEyNjk3NgorICBGcmVlIGlub2RlczogMzE0ODktMzE3NDQKK0dyb3VwIDEyNDogKEJsb2NrcyAxMjY5NzctMTI4MDAwKQorICBCbG9jayBiaXRtYXAgYXQgMTI3NjI5ICgrNjUyKSwgSW5vZGUgYml0bWFwIGF0IDEyNzYzMCAoKzY1MykKKyAgSW5vZGUgdGFibGUgYXQgMTI2OTc3LTEyNzAwOAorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI3MDA5LTEyNzYyOCwgMTI3NjMxLTEyODAwMAorICBGcmVlIGlub2RlczogMzE3NDUtMzIwMDAKK0dyb3VwIDEyNTogKEJsb2NrcyAxMjgwMDEtMTI5MDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgwMDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODAwMi0xMjgwMDUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjgwMDYtMTI4MjYxCisgIEJsb2NrIGJpdG1hcCBhdCAxMjg0NTcgKCs0NTYpLCBJbm9kZSBiaXRtYXAgYXQgMTI4NDU4ICgrNDU3KQorICBJbm9kZSB0YWJsZSBhdCAxMjgyNjItMTI4MjkzICgrMjYxKQorICA3MjkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI4Mjk0LTEyODQ1NiwgMTI4NDU5LTEyOTAyNAorICBGcmVlIGlub2RlczogMzIwMDEtMzIyNTYKK0dyb3VwIDEyNjogKEJsb2NrcyAxMjkwMjUtMTMwMDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTI5NzAzICgrNjc4KSwgSW5vZGUgYml0bWFwIGF0IDEyOTcwNCAoKzY3OSkKKyAgSW5vZGUgdGFibGUgYXQgMTI5MDI1LTEyOTA1NgorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI5MDU3LTEyOTcwMiwgMTI5NzA1LTEzMDA0OAorICBGcmVlIGlub2RlczogMzIyNTctMzI1MTIKK0dyb3VwIDEyNzogKEJsb2NrcyAxMzAwNDktMTMxMDcxKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNzQxICgrNjkyKSwgSW5vZGUgYml0bWFwIGF0IDEzMDc0MiAoKzY5MykKKyAgSW5vZGUgdGFibGUgYXQgMTMwMDQ5LTEzMDA4MAorICA5ODkgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMwMDgxLTEzMDc0MCwgMTMwNzQzLTEzMTA3MQorICBGcmVlIGlub2RlczogMzI1MTMtMzI3NjgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3JhaWRfb3B0L3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9tX3JhaWRfb3B0L3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZmZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fcmFpZF9vcHQvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049InJhaWQgb3B0aW9ucyIKK0ZTX1NJWkU9MTMxMDcyCitNS0UyRlNfT1BUUz0iLUUgc3RyaWRlPTEzIC1PIHNwYXJzZV9zdXBlciAtZyAxMDI0IgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9yb290X293bmVyL2V4cGVjdC4xIGIvZTJmc3Byb2dzL3Rlc3RzL21fcm9vdF9vd25lci9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmIwZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fcm9vdF9vd25lci9leHBlY3QuMQpAQCAtMCwwICsxLDY1IEBACitGaWxlc3lzdGVtIGxhYmVsPQorT1MgdHlwZTogTGludXgKK0Jsb2NrIHNpemU9MTAyNCAobG9nPTApCitGcmFnbWVudCBzaXplPTEwMjQgKGxvZz0wKQorU3RyaWRlPTAgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzEyOCBpbm9kZXMsIDEwMjQgYmxvY2tzCis1MSBibG9ja3MgKDQuOTglKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXIKK0ZpcnN0IGRhdGEgYmxvY2s9MQorUm9vdCBkaXJlY3Rvcnkgb3duZXI9MTIzNDoxMjM0CitNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPTEwNDg1NzYKKzEgYmxvY2sgZ3JvdXAKKzgxOTIgYmxvY2tzIHBlciBncm91cCwgODE5MiBmcmFnbWVudHMgcGVyIGdyb3VwCisxMjggaW5vZGVzIHBlciBncm91cAorCitBbGxvY2F0aW5nIGdyb3VwIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgaW5vZGUgdGFibGVzOiAgICAICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAICAhkb25lCisKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6IGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS8xMjggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzOC8xMDI0IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTI4CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgNTEKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgOTg2CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDExNworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAzCitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDgxOTIKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgODE5MgorSW5vZGVzIHBlciBncm91cDogICAgICAgICAxMjgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0xMDIzKQorICBQcmltYXJ5IHN1cGVyYmxvY2sgYXQgMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMi0yCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMy01CisgIEJsb2NrIGJpdG1hcCBhdCA2ICgrNSksIElub2RlIGJpdG1hcCBhdCA3ICgrNikKKyAgSW5vZGUgdGFibGUgYXQgOC0yMyAoKzcpCisgIDk4NiBmcmVlIGJsb2NrcywgMTE3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOC0xMDIzCisgIEZyZWUgaW5vZGVzOiAxMi0xMjgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3Jvb3Rfb3duZXIvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fcm9vdF9vd25lci9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNWVmNgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9tX3Jvb3Rfb3duZXIvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049InJvb3QgZGlyZWN0b3J5IG93bmVyIgorRlNfU0laRT0xMDI0CitNS0UyRlNfT1BUUz0iLUUgcm9vdF9vd25lcj0xMjM0OjEyMzQiCisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3N0ZC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9tX3N0ZC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzU2NTMxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fc3RkL2V4cGVjdC4xCkBAIC0wLDAgKzEsMTE2IEBACitGaWxlc3lzdGVtIGxhYmVsPQorT1MgdHlwZTogTGludXgKK0Jsb2NrIHNpemU9MTAyNCAobG9nPTApCitGcmFnbWVudCBzaXplPTEwMjQgKGxvZz0wKQorU3RyaWRlPTAgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzE2Mzg0IGlub2RlcywgNjU1MzYgYmxvY2tzCiszMjc2IGJsb2NrcyAoNS4wMCUpIHJlc2VydmVkIGZvciB0aGUgc3VwZXIgdXNlcgorRmlyc3QgZGF0YSBibG9jaz0xCitNYXhpbXVtIGZpbGVzeXN0ZW0gYmxvY2tzPTY3MTA4ODY0Cis4IGJsb2NrIGdyb3VwcworODE5MiBibG9ja3MgcGVyIGdyb3VwLCA4MTkyIGZyYWdtZW50cyBwZXIgZ3JvdXAKKzIwNDggaW5vZGVzIHBlciBncm91cAorU3VwZXJibG9jayBiYWNrdXBzIHN0b3JlZCBvbiBibG9ja3M6IAorCTgxOTMsIDI0NTc3LCA0MDk2MSwgNTczNDUKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgIAgICGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitXcml0aW5nIGlub2RlIHRhYmxlczogICAgCAgIZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1dyaXRpbmcgc3VwZXJibG9ja3MgYW5kIGZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogICAgCAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCitQYXNzIDI6IENoZWNraW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKK1Bhc3MgMzogQ2hlY2tpbmcgZGlyZWN0b3J5IGNvbm5lY3Rpdml0eQorUGFzcyA0OiBDaGVja2luZyByZWZlcmVuY2UgY291bnRzCitQYXNzIDU6IENoZWNraW5nIGdyb3VwIHN1bW1hcnkgaW5mb3JtYXRpb24KK3Rlc3RfZmlsZXN5czogMTEvMTYzODQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAzMzY0LzY1NTM2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTYzODQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNjU1MzYKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMzI3NgorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA2MjE3MgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAxNjM3MworRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAyNTUKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgODE5MgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICA4MTkyCitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDIwNDgKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgMjU2CitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtODE5MikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtMjU3CisgIEJsb2NrIGJpdG1hcCBhdCAyNTggKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgMjU5ICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCAyNjAtNTE1ICgrMjU5KQorICA3NjYzIGZyZWUgYmxvY2tzLCAyMDM3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzAtODE5MgorICBGcmVlIGlub2RlczogMTItMjA0OAorR3JvdXAgMTogKEJsb2NrcyA4MTkzLTE2Mzg0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA4MTkzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA4MTk0LTgxOTQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4MTk1LTg0NDkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NTAgKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgODQ1MSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgODQ1Mi04NzA3ICgrMjU5KQorICA3Njc3IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NzA4LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAyMDQ5LTQwOTYKK0dyb3VwIDI6IChCbG9ja3MgMTYzODUtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjM4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4Ny0xNjY0MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQzLTI0NTc2CisgIEZyZWUgaW5vZGVzOiA0MDk3LTYxNDQKK0dyb3VwIDM6IChCbG9ja3MgMjQ1NzctMzI3NjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI0NTc3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNDU3OC0yNDU3OAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI0NTc5LTI0ODMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDgzNCAoKzI1NyksIElub2RlIGJpdG1hcCBhdCAyNDgzNSAoKzI1OCkKKyAgSW5vZGUgdGFibGUgYXQgMjQ4MzYtMjUwOTEgKCsyNTkpCisgIDc2NzcgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MDkyLTMyNzY4CisgIEZyZWUgaW5vZGVzOiA2MTQ1LTgxOTIKK0dyb3VwIDQ6IChCbG9ja3MgMzI3NjktNDA5NjApCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMzAyNiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMDI3LTQwOTYwCisgIEZyZWUgaW5vZGVzOiA4MTkzLTEwMjQwCitHcm91cCA1OiAoQmxvY2tzIDQwOTYxLTQ5MTUyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA0MDk2MSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNDA5NjItNDA5NjIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA0MDk2My00MTIxNworICBCbG9jayBiaXRtYXAgYXQgNDEyMTggKCsyNTcpLCBJbm9kZSBiaXRtYXAgYXQgNDEyMTkgKCsyNTgpCisgIElub2RlIHRhYmxlIGF0IDQxMjIwLTQxNDc1ICgrMjU5KQorICA3Njc3IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTQ3Ni00OTE1MgorICBGcmVlIGlub2RlczogMTAyNDEtMTIyODgKK0dyb3VwIDY6IChCbG9ja3MgNDkxNTMtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA0OTE1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDkxNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0OTE1NS00OTQxMCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5NDExLTU3MzQ0CisgIEZyZWUgaW5vZGVzOiAxMjI4OS0xNDMzNgorR3JvdXAgNzogKEJsb2NrcyA1NzM0NS02NTUzNSkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTczNDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDU3MzQ2LTU3MzQ2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTczNDctNTc2MDEKKyAgQmxvY2sgYml0bWFwIGF0IDU3NjAyICgrMjU3KSwgSW5vZGUgYml0bWFwIGF0IDU3NjAzICgrMjU4KQorICBJbm9kZSB0YWJsZSBhdCA1NzYwNC01Nzg1OSAoKzI1OSkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTc4NjAtNjU1MzUKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE2Mzg0CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbV9zdGQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL21fc3RkL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYyY2RhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fc3RkL3NjcmlwdApAQCAtMCwwICsxLDMgQEAKK0RFU0NSSVBUSU9OPSJzdGFuZGFyZCBmaWxlc3lzdGVtIG9wdGlvbnMiCitGU19TSVpFPTY1NTM2CisuICRjbWRfZGlyL3J1bl9ta2UyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3VuaW5pdC9leHBlY3QuMSBiL2UyZnNwcm9ncy90ZXN0cy9tX3VuaW5pdC9leHBlY3QuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjEyZTEwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL21fdW5pbml0L2V4cGVjdC4xCkBAIC0wLDAgKzEsMTY2IEBACitGaWxlc3lzdGVtIGxhYmVsPQorT1MgdHlwZTogTGludXgKK0Jsb2NrIHNpemU9MTAyNCAobG9nPTApCitGcmFnbWVudCBzaXplPTEwMjQgKGxvZz0wKQorU3RyaWRlPTAgYmxvY2tzLCBTdHJpcGUgd2lkdGg9MCBibG9ja3MKKzMyNzY4IGlub2RlcywgMTMxMDcyIGJsb2NrcworNjU1MyBibG9ja3MgKDUuMDAlKSByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIHVzZXIKK0ZpcnN0IGRhdGEgYmxvY2s9MQorTWF4aW11bSBmaWxlc3lzdGVtIGJsb2Nrcz02NzM3MTAwOAorMTYgYmxvY2sgZ3JvdXBzCis4MTkyIGJsb2NrcyBwZXIgZ3JvdXAsIDgxOTIgZnJhZ21lbnRzIHBlciBncm91cAorMjA0OCBpbm9kZXMgcGVyIGdyb3VwCitTdXBlcmJsb2NrIGJhY2t1cHMgc3RvcmVkIG9uIGJsb2NrczogCisJODE5MywgMjQ1NzcsIDQwOTYxLCA1NzM0NSwgNzM3MjkKKworQWxsb2NhdGluZyBncm91cCB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBpbm9kZSB0YWJsZXM6ICAgICAgCAgICAhkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgZmlsZXN5c3RlbSBhY2NvdW50aW5nIGluZm9ybWF0aW9uOiAgICAgIAgICAgIZG9uZQorCitGaWxlc3lzdGVtIGZlYXR1cmVzOiBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlciB1bmluaXRfYmcKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzMyNzY4IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNTY5MS8xMzEwNzIgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyIHVuaW5pdF9iZworRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMzI3NjgKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTMxMDcyCitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDY1NTMKK0ZyZWUgYmxvY2tzOiAgICAgICAgICAgICAgMTI1MzgxCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDMyNzU3CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NgorQmxvY2tzIHBlciBncm91cDogICAgICAgICA4MTkyCitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDgxOTIKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjA0OAorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAyNTYKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS04MTkyKSBbSVRBQkxFX1pFUk9FRF0KKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtMjU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNTkgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMjYwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNjEtNTE2ICgrMjYwKQorICA3NjYyIGZyZWUgYmxvY2tzLCAyMDM3IGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzLCAyMDM3IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDUzMS04MTkyCisgIEZyZWUgaW5vZGVzOiAxMi0yMDQ4CitHcm91cCAxOiAoQmxvY2tzIDgxOTMtMTYzODQpIFtJTk9ERV9VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDgxOTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgxOTQtODE5NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDgxOTUtODQ1MAorICBCbG9jayBiaXRtYXAgYXQgODQ1MSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA4NDUyICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA4NDUzLTg3MDggKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogODcwOS0xNjM4NAorICBGcmVlIGlub2RlczogMjA0OS00MDk2CitHcm91cCAyOiAoQmxvY2tzIDE2Mzg1LTI0NTc2KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCAxNjM4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjM4Ny0xNjY0MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTYzODUtMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDQwOTctNjE0NAorR3JvdXAgMzogKEJsb2NrcyAyNDU3Ny0zMjc2OCkgW0lOT0RFX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjQ1NzcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI0NTc4LTI0NTc4CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjQ1NzktMjQ4MzQKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODM1ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI0ODM2ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNDgzNy0yNTA5MiAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAyNTA5My0zMjc2OAorICBGcmVlIGlub2RlczogNjE0NS04MTkyCitHcm91cCA0OiAoQmxvY2tzIDMyNzY5LTQwOTYwKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCAzMjc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI3NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjc3MS0zMzAyNiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMzI3NjktNDA5NjAKKyAgRnJlZSBpbm9kZXM6IDgxOTMtMTAyNDAKK0dyb3VwIDU6IChCbG9ja3MgNDA5NjEtNDkxNTIpIFtJTk9ERV9VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDQwOTYxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA0MDk2Mi00MDk2MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQwOTYzLTQxMjE4CisgIEJsb2NrIGJpdG1hcCBhdCA0MTIxOSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA0MTIyMCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNDEyMjEtNDE0NzYgKCsyNjApCisgIDc2NzYgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNDE0NzctNDkxNTIKKyAgRnJlZSBpbm9kZXM6IDEwMjQxLTEyMjg4CitHcm91cCA2OiAoQmxvY2tzIDQ5MTUzLTU3MzQ0KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCA0OTE1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDkxNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0OTE1NS00OTQxMCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogNDkxNTMtNTczNDQKKyAgRnJlZSBpbm9kZXM6IDEyMjg5LTE0MzM2CitHcm91cCA3OiAoQmxvY2tzIDU3MzQ1LTY1NTM2KSBbSU5PREVfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1NzM0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTczNDYtNTczNDYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1NzM0Ny01NzYwMgorICBCbG9jayBiaXRtYXAgYXQgNTc2MDMgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgNTc2MDQgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDU3NjA1LTU3ODYwICgrMjYwKQorICA3Njc2IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDU3ODYxLTY1NTM2CisgIEZyZWUgaW5vZGVzOiAxNDMzNy0xNjM4NAorR3JvdXAgODogKEJsb2NrcyA2NTUzNy03MzcyOCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgNjU1MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY1NTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjU1MzktNjU3OTQgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDY1NTM3LTczNzI4CisgIEZyZWUgaW5vZGVzOiAxNjM4NS0xODQzMgorR3JvdXAgOTogKEJsb2NrcyA3MzcyOS04MTkyMCkgW0lOT0RFX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNzM3MjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDczNzMwLTczNzMwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNzM3MzEtNzM5ODYKKyAgQmxvY2sgYml0bWFwIGF0IDczOTg3ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDczOTg4ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA3Mzk4OS03NDI0NCAoKzI2MCkKKyAgNzY3NiBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiA3NDI0NS04MTkyMAorICBGcmVlIGlub2RlczogMTg0MzMtMjA0ODAKK0dyb3VwIDEwOiAoQmxvY2tzIDgxOTIxLTkwMTEyKSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTkyMy04MjE3OCAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogODE5MjEtOTAxMTIKKyAgRnJlZSBpbm9kZXM6IDIwNDgxLTIyNTI4CitHcm91cCAxMTogKEJsb2NrcyA5MDExMy05ODMwNCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgOTAxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkwMTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTAxMTUtOTAzNzAgKCsyKQorICA3OTM0IGZyZWUgYmxvY2tzLCAyMDQ4IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzLCAyMDQ4IHVudXNlZCBpbm9kZXMKKyAgRnJlZSBibG9ja3M6IDkwMTEzLTk4MzA0CisgIEZyZWUgaW5vZGVzOiAyMjUyOS0yNDU3NgorR3JvdXAgMTI6IChCbG9ja3MgOTgzMDUtMTA2NDk2KSBbSU5PREVfVU5JTklULCBCTE9DS19VTklOSVQsIElUQUJMRV9aRVJPRURdCisgIEJsb2NrIGJpdG1hcCBhdCA5ODMwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTgzMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5ODMwNy05ODU2MiAoKzIpCisgIDc5MzQgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogOTgzMDUtMTA2NDk2CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNjYyNAorR3JvdXAgMTM6IChCbG9ja3MgMTA2NDk3LTExNDY4OCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgMTA2NDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDY0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDY0OTktMTA2NzU0ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMDY0OTctMTE0Njg4CisgIEZyZWUgaW5vZGVzOiAyNjYyNS0yODY3MgorR3JvdXAgMTQ6IChCbG9ja3MgMTE0Njg5LTEyMjg4MCkgW0lOT0RFX1VOSU5JVCwgQkxPQ0tfVU5JTklULCBJVEFCTEVfWkVST0VEXQorICBCbG9jayBiaXRtYXAgYXQgMTE0Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTQ2OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTQ2OTEtMTE0OTQ2ICgrMikKKyAgNzkzNCBmcmVlIGJsb2NrcywgMjA0OCBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcywgMjA0OCB1bnVzZWQgaW5vZGVzCisgIEZyZWUgYmxvY2tzOiAxMTQ2ODktMTIyODgwCisgIEZyZWUgaW5vZGVzOiAyODY3My0zMDcyMAorR3JvdXAgMTU6IChCbG9ja3MgMTIyODgxLTEzMTA3MSkgW0lOT0RFX1VOSU5JVCwgSVRBQkxFX1pFUk9FRF0KKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgzLTEyMzEzOCAoKzIpCisgIDc5MzMgZnJlZSBibG9ja3MsIDIwNDggZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMsIDIwNDggdW51c2VkIGlub2RlcworICBGcmVlIGJsb2NrczogMTIzMTM5LTEzMTA3MQorICBGcmVlIGlub2RlczogMzA3MjEtMzI3NjgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9tX3VuaW5pdC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvbV91bmluaXQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNTY1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvbV91bmluaXQvc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorREVTQ1JJUFRJT049InVuaW5pdGlhbGl6ZWQgZ3JvdXAgZmVhdHVyZSIKK0ZTX1NJWkU9MTMxMDcyCitNS0UyRlNfT1BUUz0iLU8gdW5pbml0X2JnIgorLiAkY21kX2Rpci9ydW5fbWtlMmZzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvbWtlMmZzLmNvbmYuaW4gYi9lMmZzcHJvZ3MvdGVzdHMvbWtlMmZzLmNvbmYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MDUwZAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9ta2UyZnMuY29uZi5pbgpAQCAtMCwwICsxLDQ5IEBACitbZGVmYXVsdHNdCisJYmFzZV9mZWF0dXJlcyA9IHNwYXJzZV9zdXBlcixmaWxldHlwZSxyZXNpemVfaW5vZGUsZGlyX2luZGV4LGV4dF9hdHRyCisJYmxvY2tzaXplID0gNDA5NgorCWlub2RlX3NpemUgPSAyNTYKKwlpbm9kZV9yYXRpbyA9IDE2Mzg0CisJcmVzZXJ2ZWRfcmF0aW8gPSA1LjAKKwllbmFibGVfcGVyaW9kaWNfZnNjayA9IHRydWUKKwlsYXp5X2l0YWJsZV9pbml0ID0gZmFsc2UKKwlub19kaXNjYXJkID0gdHJ1ZQorCWRlZmF1bHRfbW50b3B0cyA9IF5hY2wKKworW2ZzX3R5cGVzXQorCWV4dDMgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwKKwl9CisJZXh0NCA9IHsKKwkJZmVhdHVyZXMgPSBoYXNfam91cm5hbCxleHRlbnQsaHVnZV9maWxlLGZsZXhfYmcsdW5pbml0X2JnLGRpcl9ubGluayxleHRyYV9pc2l6ZQorCQlpbm9kZV9zaXplID0gMjU2CisJfQorCWV4dDRkZXYgPSB7CisJCWZlYXR1cmVzID0gaGFzX2pvdXJuYWwsZXh0ZW50LGh1Z2VfZmlsZSxmbGV4X2JnLHVuaW5pdF9iZyxkaXJfbmxpbmssZXh0cmFfaXNpemUKKwkJaW5vZGVfc2l6ZSA9IDI1NgorCQlvcHRpb25zID0gdGVzdF9mcz0xCisJfQorCXNtYWxsID0geworCQlibG9ja3NpemUgPSAxMDI0CisJCWlub2RlX3NpemUgPSAxMjgKKwkJaW5vZGVfcmF0aW8gPSA0MDk2CisJfQorCWZsb3BweSA9IHsKKwkJYmxvY2tzaXplID0gMTAyNAorCQlpbm9kZV9zaXplID0gMTI4CisJCWlub2RlX3JhdGlvID0gODE5MgorCX0KKwluZXdzID0geworCQlpbm9kZV9yYXRpbyA9IDQwOTYKKwl9CisJbGFyZ2VmaWxlID0geworCQlpbm9kZV9yYXRpbyA9IDEwNDg1NzYKKwkJYmxvY2tzaXplID0gNDA5NgorCX0KKwlsYXJnZWZpbGU0ID0geworCQlpbm9kZV9yYXRpbyA9IDQxOTQzMDQKKwkJYmxvY2tzaXplID0gNDA5NgorCX0KKwlodXJkID0geworCSAgICAgYmxvY2tzaXplID0gNDA5NgorCSAgICAgaW5vZGVfc2l6ZSA9IDEyOAorCX0KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy9NYWtlZmlsZS5pbiBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2FiZjIzCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzkgQEAKKyMKKyMgU3RhbmRhcmQgZTJmc3Byb2dzIHByb2xvZ3VlLi4uLgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4vLi4KK215X2RpciA9IHRlc3RzL3Byb2dzCitJTlNUQUxMID0gQElOU1RBTExACisKK0BNQ09ORklHQAorCitNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uLy4uL2xpYi9zcyAuLi8uLi9saWIvc3MvbWtfY21kcworCitQUk9HUz0JCXRlc3RfaWNvdW50IGNyY3N1bQorCitURVNUX1JFTF9PQkpTPQl0ZXN0X3JlbC5vIHRlc3RfcmVsX2NtZHMubworCitURVNUX0lDT1VOVF9PQkpTPQl0ZXN0X2ljb3VudC5vIHRlc3RfaWNvdW50X2NtZHMubworCitTUkNTPQkkKHNyY2RpcikvdGVzdF9yZWwuYyAKKworTElCUz0gJChMSUJFWFQyRlMpICQoTElCU1MpICQoTElCQ09NX0VSUikKK0RFUExJQlM9ICQoTElCRVhUMkZTKSAkKERFUExJQlNTKSAkKERFUExJQkNPTV9FUlIpCisKKy5jLm86CisJJChFKSAiCUNDICQ8IgorCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKKworYWxsOjogJChQUk9HUykKKwordGVzdF9yZWw6ICQoVEVTVF9SRUxfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1vIHRlc3RfcmVsICQoVEVTVF9SRUxfT0JKUykgJChMSUJTKQorCitjcmNzdW06IGNyY3N1bS5vICQoREVQTElCUykKKwkkKEUpICIJTEQgJEAiCisJJChRKSAkKExEKSAkKEFMTF9MREZMQUdTKSAtbyBjcmNzdW0gY3Jjc3VtLm8gJChMSUJTKQorCit0ZXN0X3JlbF9jbWRzLmM6IHRlc3RfcmVsX2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL3Rlc3RfcmVsX2NtZHMuY3QKKwordGVzdF9pY291bnQ6ICQoVEVTVF9JQ09VTlRfT0JKUykgJChERVBMSUJTKQorCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoTEQpICQoQUxMX0xERkxBR1MpIC1vIHRlc3RfaWNvdW50ICQoVEVTVF9JQ09VTlRfT0JKUykgJChMSUJTKQorCit0ZXN0X2ljb3VudF9jbWRzLmM6IHRlc3RfaWNvdW50X2NtZHMuY3QKKwkkKEUpICIJTUtfQ01EUyAkQCIKKwkkKFEpICQoTUtfQ01EUykgJChzcmNkaXIpL3Rlc3RfaWNvdW50X2NtZHMuY3QKKworY2xlYW46CisJJChSTSkgLWYgJChQUk9HUykgdGVzdF9yZWxfY21kcy5jIHRlc3RfaWNvdW50X2NtZHMuYyBcCisJCVwjKiAqLnMgKi5vICouYSAqfiBjb3JlCisKK2luc3RhbGw6CisKK2luc3RhbGwtc3RyaXA6CisKK3VuaW5zdGFsbDoKKworbW9zdGx5Y2xlYW46IGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuCisJJChSTSkgLWYgLmRlcGVuZCBNYWtlZmlsZSAkKHNyY2RpcikvVEFHUyAkKHNyY2RpcikvTWFrZWZpbGUuaW4ub2xkCisKKyMgKysrIERlcGVuZGVuY3kgbGluZSBlYXRlciArKysKKyMgCisjIE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb2xsb3cuICBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc2VjdGlvbiBpbgorIyB0aGUgTWFrZWZpbGUuaW4gZmlsZQorIwordGVzdF9yZWwubzogJChzcmNkaXIpL3Rlc3RfcmVsLmMgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9zcy9zcy5oICQodG9wX2J1aWxkZGlyKS9saWIvc3Mvc3NfZXJyLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCBcCisgJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9pcmVsLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JyZWwuaCBcCisgJChzcmNkaXIpL3Rlc3RfcmVsLmgKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy9jcmNzdW0uYyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy9jcmNzdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDc0ZGEwCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL2NyY3N1bS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBjcmNzdW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyNpbmNsdWRlICJzcy9zcy5oIgorI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQljOworCXVpbnQzMl90CWNyYyA9IH4wOworCXVpbnQzMl90CSgqY3N1bV9mdW5jKSh1aW50MzJfdCBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsCisJCQkJICAgICBzaXplX3QgbGVuKTsKKwlGSUxFCQkqZjsKKworCWNzdW1fZnVuYyA9IGV4dDJmc19jcmMzMmNfbGU7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJoIikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnaCc6CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogY3Jjc3VtIFtmaWxlXVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWlmIChvcHRpbmQgPT0gYXJnYykKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oYXJndltvcHRpbmRdLCAiciIpOworCQlpZiAoIWYpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgZXJybm8sICJ3aGlsZSB0cnlpbmcgdG8gb3BlbiAlc1xuIiwKKwkJCQlhcmd2W29wdGluZF0pOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCXdoaWxlICghZmVvZihmKSkgeworCQl1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKKworCQlpbnQgYyA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGYpOworCisJCWlmIChjKQorCQkJY3JjID0gY3N1bV9mdW5jKGNyYywgYnVmLCBjKTsKKwl9CisJcHJpbnRmKCIldVxuIiwgY3JjKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy9ob2xkX2lub2RlLmMgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvaG9sZF9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmY0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvaG9sZF9pbm9kZS5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBob2xkX2lub2RlLmMgLS0tIHRlc3QgcHJvZ3JhbSB3aGljaCBob2xkcyBhbiBpbm9kZSBvciBkaXJlY3RvcnkKKyAqIG9wZW4uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKworbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKwljaGFyICpmaWxlbmFtZTsKKworCWlmIChhcmdjICE9IDIpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZGlyXG4iLCBhcmd2WzBdKTsKKwkJZXhpdCgxKTsKKwl9CisJZmlsZW5hbWUgPSBhcmd2WzFdOworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3RhdGJ1ZikgPCAwKSB7CisJCXBlcnJvcihmaWxlbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKwkJaWYgKCFvcGVuZGlyKGZpbGVuYW1lKSkgeworCQkJcGVycm9yKGZpbGVuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3BlbihmaWxlbmFtZSwgT19SRE9OTFkpIDwgMCkgeworCQkJcGVycm9yKGZpbGVuYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJc2xlZXAoMzApOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3JhbmRvbV9leGVyY2lzZS5jIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3JhbmRvbV9leGVyY2lzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTM4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvcmFuZG9tX2V4ZXJjaXNlLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiByYW5kb21fZXhlcmNpc2UuYyAtLS0gVGVzdCBwcm9ncmFtIHdoaWNoIGV4ZXJjaXNlcyBhbiBleHQyCisgKiAJZmlsZXN5c3RlbS4gIEl0IGNyZWF0ZXMgYSBsb3Qgb2YgcmFuZG9tIGZpbGVzIGluIHRoZSBjdXJyZW50CisgKiAJZGlyZWN0b3J5LCB3aGlsZSBob2xkaW5nIHNvbWUgZmlsZXMgb3BlbiB3aGlsZSB0aGV5IGFyZSBiZWluZworICogCWRlbGV0ZWQuICBUaGlzIGV4ZXJjaXNlcyB0aGUgb3JwaGFuIGxpc3QgY29kZSwgYXMgd2VsbCBhcworICogCWNyZWF0aW5nIGxvdHMgb2YgZm9kZGVyIGZvciB0aGUgZXh0MyBqb3VybmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIE1BWEZEUwkxMjgKKworc3RydWN0IHN0YXRlIHsKKwljaGFyCW5hbWVbMTZdOworCWludAlzdGF0ZTsKKwlpbnQJaXNkaXI7Cit9OworCisjZGVmaW5lIFNUQVRFX0NMRUFSCTAKKyNkZWZpbmUgU1RBVEVfQ1JFQVRFRAkxCisjZGVmaW5lIFNUQVRFX0RFTEVURUQJMgorCitzdHJ1Y3Qgc3RhdGUgc3RhdGVfYXJyYXlbTUFYRkRTXTsKKworI2RlZmluZSBEQVRBX1NJWkUgNjU1MzYKKworY2hhciBkYXRhX2J1ZmZlcltEQVRBX1NJWkVdOworCit2b2lkIGNsZWFyX3N0YXRlX2FycmF5KCkKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhGRFM7IGkrKykKKwkJc3RhdGVfYXJyYXlbaV0uc3RhdGUgPSBTVEFURV9DTEVBUjsKK30KKworaW50IGdldF9yYW5kb21fZmQoKQoreworCWludAlmZDsKKworCXdoaWxlICgxKSB7CisJCWZkID0gKChpbnQpIHJhbmRvbSgpKSAlIE1BWEZEUzsKKwkJaWYgKGZkID4gMikKKwkJCXJldHVybiBmZDsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBnZXRfaW5vZGVfbnVtKGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKwkJcGVycm9yKCJmc3RhdCIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHN0LnN0X2lubzsKK30KKworCit2b2lkIGNyZWF0ZV9yYW5kb21fZmlsZSgpCit7CisJY2hhciB0ZW1wbGF0ZVsxNl0gPSAiRVguWFhYWFhYIjsKKwlpbnQJZmQ7CisJaW50CWlzZGlyID0gMDsKKwlpbnQJc2l6ZTsKKworCW1rdGVtcCh0ZW1wbGF0ZSk7CisJaXNkaXIgPSByYW5kb20oKSAmIDE7CisJaWYgKGlzZGlyKSB7CisJCWlmIChta2Rpcih0ZW1wbGF0ZSwgMDcwMCkgPCAwKQorCQkJcmV0dXJuOworCQlmZCA9IG9wZW4odGVtcGxhdGUsIE9fUkRPTkxZLCAwNjAwKTsKKwkJcHJpbnRmKCJDcmVhdGVkIHRlbXAgZGlyZWN0b3J5ICVzLCBmZCA9ICVkXG4iLAorCQkgICAgICAgdGVtcGxhdGUsIGZkKTsKKwl9IGVsc2UgeworCQlzaXplID0gcmFuZG9tKCkgJiAoREFUQV9TSVpFLTEpOworCQlmZCA9IG9wZW4odGVtcGxhdGUsIE9fQ1JFQVR8T19SRFdSLCAwNjAwKTsKKwkJd3JpdGUoZmQsIGRhdGFfYnVmZmVyLCBzaXplKTsKKwkJcHJpbnRmKCJDcmVhdGVkIHRlbXAgZmlsZSAlcywgZmQgPSAlZCwgc2l6ZT0lZFxuIiwKKwkJICAgICAgIHRlbXBsYXRlLCBmZCwgc2l6ZSk7CisJfQorCXN0YXRlX2FycmF5W2ZkXS5pc2RpciA9IGlzZGlyOworCWlmIChmZCA8IDApCisJCXJldHVybjsKKwlzdGF0ZV9hcnJheVtmZF0uaXNkaXIgPSBpc2RpcjsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9DUkVBVEVEOworCXN0cmNweShzdGF0ZV9hcnJheVtmZF0ubmFtZSwgdGVtcGxhdGUpOworfQorCit2b2lkIHRydW5jYXRlX2ZpbGUoaW50IGZkKQoreworCWludAlzaXplOworCisJc2l6ZSA9IHJhbmRvbSgpICYgKERBVEFfU0laRS0xKTsKKworCWlmIChzdGF0ZV9hcnJheVtmZF0uaXNkaXIpCisJCXJldHVybjsKKworCWZ0cnVuY2F0ZShmZCwgc2l6ZSk7CisJcHJpbnRmKCJUcnVuY2F0aW5nIHRlbXAgZmlsZSAlcywgZmQgPSAlZCwgaW5vPSV1LCBzaXplPSVkXG4iLAorCSAgICAgICBzdGF0ZV9hcnJheVtmZF0ubmFtZSwgZmQsIGdldF9pbm9kZV9udW0oZmQpLCBzaXplKTsKK30KKworCit2b2lkIHVubGlua19maWxlKGludCBmZCkKK3sKKwljaGFyICpmaWxlbmFtZSA9IHN0YXRlX2FycmF5W2ZkXS5uYW1lOworCisJcHJpbnRmKCJEZWxldGluZyAlcywgZmQgPSAlZCwgaW5vID0gJXVcbiIsIGZpbGVuYW1lLCBmZCwKKwkgICAgICAgZ2V0X2lub2RlX251bShmZCkpOworCisJaWYgKHN0YXRlX2FycmF5W2ZkXS5pc2RpcikKKwkJcm1kaXIoZmlsZW5hbWUpOworCWVsc2UKKwkJdW5saW5rKGZpbGVuYW1lKTsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9ERUxFVEVEOworfQorCit2b2lkIGNsb3NlX2ZpbGUoaW50IGZkKQoreworCWNoYXIgKmZpbGVuYW1lID0gc3RhdGVfYXJyYXlbZmRdLm5hbWU7CisKKwlwcmludGYoIkNsb3NpbmcgJXMsIGZkID0gJWQsIGlubyA9ICV1XG4iLCBmaWxlbmFtZSwgZmQsCisJICAgICAgIGdldF9pbm9kZV9udW0oZmQpKTsKKworCWNsb3NlKGZkKTsKKwlzdGF0ZV9hcnJheVtmZF0uc3RhdGUgPSBTVEFURV9DTEVBUjsKK30KKworCittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQJaSwgZmQ7CisKKwltZW1zZXQoZGF0YV9idWZmZXIsIDAsIHNpemVvZihkYXRhX2J1ZmZlcikpOworCXNwcmludGYoZGF0YV9idWZmZXIsICJUaGlzIGlzIGEgdGVzdCBmaWxlIGNyZWF0ZWQgYnkgdGhlICIKKwkJInJhbmRvbV9leGVyY2lzZXIgcHJvZ3JhbVxuIik7CisKKwlmb3IgKGk9MDsgaSA8IDEwMDAwMDsgaSsrKSB7CisJCWZkID0gZ2V0X3JhbmRvbV9mZCgpOworCQlzd2l0Y2ggKHN0YXRlX2FycmF5W2ZkXS5zdGF0ZSkgeworCQljYXNlIFNUQVRFX0NMRUFSOgorCQkJY3JlYXRlX3JhbmRvbV9maWxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9DUkVBVEVEOgorCQkJaWYgKChzdGF0ZV9hcnJheVtmZF0uaXNkaXIgPT0gMCkgJiYKKwkJCSAgICAocmFuZG9tKCkgJiAyKSkKKwkJCQl0cnVuY2F0ZV9maWxlKGZkKTsKKwkJCWVsc2UKKwkJCQl1bmxpbmtfZmlsZShmZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9ERUxFVEVEOgorCQkJY2xvc2VfZmlsZShmZCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2JtYS5zZXR1cCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvYm1hLnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0N2U1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2JtYS5zZXR1cApAQCAtMCwwICsxIEBACistYm1hX2NyZWF0ZSB0ZXN0IDIzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2V4cGVjdC5icmVsIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuYnJlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU4NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuYnJlbApAQCAtMCwwICsxLDQxIEBACit0ZXN0X3JlbDogYnJlbF9kdW1wCit0ZXN0X3JlbDogYnJlbF9wdXQgMiAxMQordGVzdF9yZWw6IGJyZWxfcHV0IDEgMTAKK3Rlc3RfcmVsOiBicmVsX3B1dCAzIDkKK3Rlc3RfcmVsOiBicmVsX3B1dCAxIDEwIDQgMTI4Cit0ZXN0X3JlbDogYnJlbF9wdXQgMjMgMTIKK3Rlc3RfcmVsOiBicmVsX3B1dCAyNCAxMworYnJlbF9wdXQ6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9wdXQKK3Rlc3RfcmVsOiBicmVsX2dldCAyNAorYnJlbF9nZXQ6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9nZXQKK3Rlc3RfcmVsOiBicmVsX2RlbGV0ZSAyNAorYnJlbF9kZWxldGU6IEludmFsaWQgYXJndW1lbnQgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX2dldCA1CiticmVsX2dldDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX2dldAordGVzdF9yZWw6IGJyZWxfZ2V0IDMKK09sZD0gMywgTmV3PSA5LCBPd25lcj0gMDowCit0ZXN0X3JlbDogYnJlbF9nZXQgMQorT2xkPSAxLCBOZXc9IDEwLCBPd25lcj0gNDoxMjgKK3Rlc3RfcmVsOiBicmVsX3N0YXJ0X2l0ZXIKK3Rlc3RfcmVsOiBicmVsX25leHQKK09sZD0gMSwgTmV3PSAxMCwgT3duZXI9IDQ6MTI4Cit0ZXN0X3JlbDogYnJlbF9uZXh0CitPbGQ9IDIsIE5ldz0gMTEsIE93bmVyPSAwOjAKK3Rlc3RfcmVsOiBicmVsX25leHQKK09sZD0gMywgTmV3PSA5LCBPd25lcj0gMDowCit0ZXN0X3JlbDogYnJlbF9uZXh0CitObyBtb3JlIGVudHJpZXMhCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgMgordGVzdF9yZWw6IGJyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfZGVsZXRlCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgNQorYnJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX21vdmUgMSAyCit0ZXN0X3JlbDogYnJlbF9kZWxldGUgMQorYnJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9kZWxldGUKK3Rlc3RfcmVsOiBicmVsX21vdmUgMSA0CiticmVsX21vdmU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9tb3ZlCit0ZXN0X3JlbDogYnJlbF9tb3ZlIDIgNQordGVzdF9yZWw6IGJyZWxfZHVtcAorT2xkPSAzLCBOZXc9IDksIE93bmVyPSAwOjAKK09sZD0gNSwgTmV3PSAxMCwgT3duZXI9IDQ6MTI4CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2V4cGVjdC5pY291bnQgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2V4cGVjdC5pY291bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4YTM3MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvZXhwZWN0Lmljb3VudApAQCAtMCwwICsxLDE5MyBAQAordGVzdF9pY291bnQ6IHZhbGlkYXRlCitJY291bnQgc3RydWN0dXJlIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQKK3Rlc3RfaWNvdW50OiBzdG9yZSAwIDAKK3N0b3JlOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X3N0b3JlCit0ZXN0X2ljb3VudDogZmV0Y2ggMAorZmV0Y2g6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZmV0Y2gKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMAoraW5jcmVtZW50OiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2luY3JlbWVudAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAwCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogc3RvcmUgMjAwMDEgMAorc3RvcmU6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfc3RvcmUKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMQorZmV0Y2g6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZmV0Y2gKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMjAwMDEKK2luY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9pbmNyZW1lbnQKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMjAwMDEKK2RlY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCit0ZXN0X2ljb3VudDogZmV0Y2ggMQorQ291bnQgaXMgMAordGVzdF9pY291bnQ6IHN0b3JlIDEgMQordGVzdF9pY291bnQ6IGZldGNoIDEKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBzdG9yZSAxIDIKK3Rlc3RfaWNvdW50OiBmZXRjaCAxCitDb3VudCBpcyAyCit0ZXN0X2ljb3VudDogc3RvcmUgMSAzCit0ZXN0X2ljb3VudDogZmV0Y2ggMQorQ291bnQgaXMgMwordGVzdF9pY291bnQ6IHN0b3JlIDEgMQordGVzdF9pY291bnQ6IGZldGNoIDEKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBzdG9yZSAxIDAKK3Rlc3RfaWNvdW50OiBmZXRjaCAxCitDb3VudCBpcyAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAzCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDMKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCAwCit0ZXN0X2ljb3VudDogZmV0Y2ggMjAwMDAKK0NvdW50IGlzIDAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMDAwMCA0MgordGVzdF9pY291bnQ6IGZldGNoIDIwMDAwCitDb3VudCBpcyA0MgordGVzdF9pY291bnQ6IHN0b3JlIDIwMDAwIDEKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMAorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IHN0b3JlIDIwMDAwIDAKK3Rlc3RfaWNvdW50OiBmZXRjaCAyMDAwMAorQ291bnQgaXMgMAordGVzdF9pY291bnQ6IGdldF9zaXplCitTaXplIG9mIGljb3VudCBpczogNQordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDIKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IGluY3JlbWVudCAyCitDb3VudCBpcyBub3cgMgordGVzdF9pY291bnQ6IGZldGNoIDIKK0NvdW50IGlzIDIKK3Rlc3RfaWNvdW50OiBpbmNyZW1lbnQgMgorQ291bnQgaXMgbm93IDMKK3Rlc3RfaWNvdW50OiBmZXRjaCAyCitDb3VudCBpcyAzCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDIKK0NvdW50IGlzIG5vdyA0Cit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgNAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitDb3VudCBpcyBub3cgMwordGVzdF9pY291bnQ6IGZldGNoIDIKK0NvdW50IGlzIDMKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMgorQ291bnQgaXMgbm93IDIKK3Rlc3RfaWNvdW50OiBmZXRjaCAyCitDb3VudCBpcyAyCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDIKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZmV0Y2ggMgorQ291bnQgaXMgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IGRlY3JlbWVudCAyCitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogc3RvcmUgMyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDMKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZmV0Y2ggMworQ291bnQgaXMgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCAzCitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGZldGNoIDMKK0NvdW50IGlzIDEKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgMworQ291bnQgaXMgbm93IDAKK3Rlc3RfaWNvdW50OiBzdG9yZSA0IDAKK3Rlc3RfaWNvdW50OiBmZXRjaCA0CitDb3VudCBpcyAwCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZmV0Y2ggNAorQ291bnQgaXMgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCA0CitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCA0CitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IHN0b3JlIDQgIDQyCit0ZXN0X2ljb3VudDogc3RvcmUgNCAwCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogaW5jcmVtZW50IDQKK0NvdW50IGlzIG5vdyAzCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAyCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAxCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK0NvdW50IGlzIG5vdyAwCit0ZXN0X2ljb3VudDogZGVjcmVtZW50IDQKK2RlY3JlbWVudDogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gZXh0MiBsaWJyYXJ5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2ljb3VudF9kZWNyZW1lbnQKK3Rlc3RfaWNvdW50OiBkZWNyZW1lbnQgNAorZGVjcmVtZW50OiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBleHQyIGxpYnJhcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2RlY3JlbWVudAordGVzdF9pY291bnQ6IHN0b3JlIDUgNAordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMwordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMgordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMQordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitDb3VudCBpcyBub3cgMAordGVzdF9pY291bnQ6IGRlY3JlbWVudCA1CitkZWNyZW1lbnQ6IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGV4dDIgbGlicmFyeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfZGVjcmVtZW50Cit0ZXN0X2ljb3VudDogZ2V0X3NpemUKK1NpemUgb2YgaWNvdW50IGlzOiAxMDUKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCit0ZXN0X2ljb3VudDogc3RvcmUgMTAgMTAKK3Rlc3RfaWNvdW50OiBzdG9yZSAyMCAyMAordGVzdF9pY291bnQ6IHN0b3JlIDMwIDMwCit0ZXN0X2ljb3VudDogc3RvcmUgNDAgNDAKK3Rlc3RfaWNvdW50OiBzdG9yZSA1MCA1MAordGVzdF9pY291bnQ6IHN0b3JlIDYwIDYwCit0ZXN0X2ljb3VudDogc3RvcmUgNzAgNzAKK3Rlc3RfaWNvdW50OiBzdG9yZSA4MCA4MAordGVzdF9pY291bnQ6IHN0b3JlIDkwIDkwCit0ZXN0X2ljb3VudDogc3RvcmUgMTAwIDEwMAordGVzdF9pY291bnQ6IHN0b3JlIDE1IDE1Cit0ZXN0X2ljb3VudDogc3RvcmUgMjUgMjUKK3Rlc3RfaWNvdW50OiBzdG9yZSAzNSAzNQordGVzdF9pY291bnQ6IHN0b3JlIDQ1IDQ1Cit0ZXN0X2ljb3VudDogc3RvcmUgNTUgNTUKK3Rlc3RfaWNvdW50OiBzdG9yZSA2NSA2NQordGVzdF9pY291bnQ6IHN0b3JlIDc1IDc1Cit0ZXN0X2ljb3VudDogc3RvcmUgODUgODUKK3Rlc3RfaWNvdW50OiBzdG9yZSA5NSA5NQordGVzdF9pY291bnQ6IGR1bXAKKzEwOiAxMAorMTU6IDE1CisyMDogMjAKKzI1OiAyNQorMzA6IDMwCiszNTogMzUKKzQwOiA0MAorNDU6IDQ1Cis1MDogNTAKKzU1OiA1NQorNjA6IDYwCis2NTogNjUKKzcwOiA3MAorNzU6IDc1Cis4MDogODAKKzg1OiA4NQorOTA6IDkwCis5NTogOTUKKzEwMDogMTAwCit0ZXN0X2ljb3VudDogZ2V0X3NpemUKK1NpemUgb2YgaWNvdW50IGlzOiAxMDUKK3Rlc3RfaWNvdW50OiB2YWxpZGF0ZQorSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2V4cGVjdC5pcmVsIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuaXJlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ3OTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS9leHBlY3QuaXJlbApAQCAtMCwwICsxLDYyIEBACit0ZXN0X3JlbDogaXJlbF9kdW1wCit0ZXN0X3JlbDogaXJlbF9wdXQgMiAxMSAzCit0ZXN0X3JlbDogaXJlbF9wdXQgMSAxMCAyCit0ZXN0X3JlbDogaXJlbF9wdXQgMyA5IDEKK3Rlc3RfcmVsOiBpcmVsX2FkZF9yZWYgMSA0IDEyOAordGVzdF9yZWw6IGlyZWxfYWRkX3JlZiAxIDUgNjQKK3Rlc3RfcmVsOiBpcmVsX2FkZF9yZWYgMSA2IDUxMgoraXJlbF9hZGRfcmVmOiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2FkZF9yZWYKK3Rlc3RfcmVsOiBpcmVsX3B1dCAxIDggMwordGVzdF9yZWw6IGlyZWxfYWRkX3JlZiAxIDYgNTEyCit0ZXN0X3JlbDogaXJlbF9hZGRfcmVmIDIgNCA2NAordGVzdF9yZWw6IGlyZWxfcHV0IDIzIDEyIDEKK3Rlc3RfcmVsOiBpcmVsX3B1dCAyNCAxMyAxCitpcmVsX3B1dDogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX3B1dAordGVzdF9yZWw6IGlyZWxfZ2V0IDI0CitpcmVsX2dldDogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldAordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDI0CitpcmVsX2RlbGV0ZTogSW52YWxpZCBhcmd1bWVudCB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZQordGVzdF9yZWw6IGlyZWxfZ2V0IDMKK09sZD0gMywgTmV3PSA5LCBPcmlnaW5hbD0zLCBNYXhfcmVmcz0xCit0ZXN0X3JlbDogaXJlbF9nZXQgMQorT2xkPSAxLCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK3Rlc3RfcmVsOiBpcmVsX3N0YXJ0X2l0ZXIKK3Rlc3RfcmVsOiBpcmVsX25leHQKK09sZD0gMSwgTmV3PSA4LCBPcmlnaW5hbD0xLCBNYXhfcmVmcz0zCisJNDoxMjgsIDU6NjQsIDY6NTEyCit0ZXN0X3JlbDogaXJlbF9uZXh0CitPbGQ9IDIsIE5ldz0gMTEsIE9yaWdpbmFsPTIsIE1heF9yZWZzPTMKKwk0OjY0Cit0ZXN0X3JlbDogaXJlbF9uZXh0CitPbGQ9IDMsIE5ldz0gOSwgT3JpZ2luYWw9MywgTWF4X3JlZnM9MQordGVzdF9yZWw6IGlyZWxfbmV4dAorTm8gbW9yZSBlbnRyaWVzIQordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDIKK3Rlc3RfcmVsOiBpcmVsX2RlbGV0ZSAyCitpcmVsX2RlbGV0ZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZQordGVzdF9yZWw6IGlyZWxfZGVsZXRlIDQKK2lyZWxfZGVsZXRlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IHdoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfZGVsZXRlCit0ZXN0X3JlbDogaXJlbF9tb3ZlIDEgMgordGVzdF9yZWw6IGlyZWxfZHVtcAorT2xkPSAyLCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK09sZD0gMywgTmV3PSA5LCBPcmlnaW5hbD0zLCBNYXhfcmVmcz0xCit0ZXN0X3JlbDogaXJlbF9kZWxldGUgNAoraXJlbF9kZWxldGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9kZWxldGUKK3Rlc3RfcmVsOiBpcmVsX21vdmUgMSA0CitpcmVsX21vdmU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9tb3ZlCit0ZXN0X3JlbDogaXJlbF9tb3ZlIDIgNAordGVzdF9yZWw6IGlyZWxfZHVtcAorT2xkPSAzLCBOZXc9IDksIE9yaWdpbmFsPTMsIE1heF9yZWZzPTEKK09sZD0gNCwgTmV3PSA4LCBPcmlnaW5hbD0xLCBNYXhfcmVmcz0zCisJNDoxMjgsIDU6NjQsIDY6NTEyCit0ZXN0X3JlbDogaXJlbF9nZXRfYnlfb3JpZyAzCitPbGQ9IDMsIE5ldz0gOSwgT3JpZ2luYWw9MywgTWF4X3JlZnM9MQordGVzdF9yZWw6IGlyZWxfZ2V0X2J5X29yaWcgMQorT2xkPSA0LCBOZXc9IDgsIE9yaWdpbmFsPTEsIE1heF9yZWZzPTMKKwk0OjEyOCwgNTo2NCwgNjo1MTIKK3Rlc3RfcmVsOiBpcmVsX2dldF9ieV9vcmlnIDUKK2lyZWxfZ2V0X2J5X29yaWc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkgd2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZwordGVzdF9yZWw6IGlyZWxfZ2V0X2J5X29yaWcgMgoraXJlbF9nZXRfYnlfb3JpZzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSB3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldF9ieV9vcmlnCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2ltYS5zZXR1cCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvaW1hLnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTE2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL2ltYS5zZXR1cApAQCAtMCwwICsxIEBACistaW1hX2NyZWF0ZSB0ZXN0IDIzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL25vcm1hbC5zZXR1cCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvbm9ybWFsLnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL25vcm1hbC5zZXR1cApAQCAtMCwwICsxIEBACistY3JlYXRlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL29wdC5zZXR1cCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvb3B0LnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDU4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL29wdC5zZXR1cApAQCAtMCwwICsxIEBACistY3JlYXRlIC1pCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuYnJlbCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvdGVzdC5icmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDU0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuYnJlbApAQCAtMCwwICsxLDQ3IEBACisjCisjIFRoaXMgaXMgdGhlIHRlc3Qgc2NyaXB0IGZvciB0aGUgYmxvY2sgcmVsb2NhdGlvbiB0YWJsZS4KKyMKKyMgQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCAKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCisjCiticmVsX2R1bXAKK2JyZWxfcHV0IDIgMTEKK2JyZWxfcHV0IDEgMTAKK2JyZWxfcHV0IDMgOQorYnJlbF9wdXQgMSAxMCA0IDEyOAorIworIyBUZXN0IGJvdW5kYXJ5IGNhc2VzIGZvciBicmVsX3B1dAorIworYnJlbF9wdXQgMjMgMTIKK2JyZWxfcHV0IDI0IDEzCisjCisjIFRlc3Qgb3RoZXIgYm91bmRhcnkgY2FzZXMKKyMKK2JyZWxfZ2V0IDI0CiticmVsX2RlbGV0ZSAyNAorIworIyBUZXN0IGdldHRpbmcgZXhpc3RpbmcgYW5kIG5vbi1leGlzdGVudCBlbnRyaWVzCisjCiticmVsX2dldCA1CiticmVsX2dldCAzCiticmVsX2dldCAxCisjCisjIFRlc3QgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9ucworIworYnJlbF9zdGFydF9pdGVyCiticmVsX25leHQKK2JyZWxfbmV4dAorYnJlbF9uZXh0CiticmVsX25leHQKKyMKKyMgVGVzdCBkZWxldGUgYW5kIG1vdmUKKyMKK2JyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlIDIKK2JyZWxfZGVsZXRlIDUKK2JyZWxfbW92ZSAxIDIKK2JyZWxfZGVsZXRlIDEKK2JyZWxfbW92ZSAxIDQKK2JyZWxfbW92ZSAyIDUKK2JyZWxfZHVtcApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS90ZXN0Lmljb3VudCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvdGVzdC5pY291bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiMTk1NQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2RhdGEvdGVzdC5pY291bnQKQEAgLTAsMCArMSwxMzYgQEAKKyMKKyMgVGhpcyBpcyB0aGUgdGVzdCBzY3JpcHQgZm9yIHRoZSBpY291bnQgYWJzdHJhY3Rpb24KKyMKKyMgQ29weXJpZ2h0IDE5OTcgYnkgVGhlb2RvcmUgVHMnby4gIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCAKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCisjCisjIEZpcnN0IGxldCdzIHRlc3QgdGhlIGJvdW5kYXJ5IGNhc2VzIGZvciBpbGxlZ2FsIGFyZ3VtZW50cworIwordmFsaWRhdGUKK3N0b3JlIDAgMAorZmV0Y2ggMAoraW5jcmVtZW50IDAKK2RlY3JlbWVudCAwCitzdG9yZSAyMDAwMSAwCitmZXRjaCAyMDAwMQoraW5jcmVtZW50IDIwMDAxCitkZWNyZW1lbnQgMjAwMDEKK3ZhbGlkYXRlCisjCisjIE9LLCBub3cgbGV0J3MgdGVzdCBmZXRjaCBhbmQgc3RvcmUuICBXZSBhbHNvIHRlc3QgdGhlIGJvdW5kYXJ5IGNhc2VzCisjIGZvciBsZWdhbCBpbm9kZXMgaGVyZS4KKyMKK2ZldGNoIDEKK3N0b3JlIDEgMQorZmV0Y2ggMQorc3RvcmUgMSAyCitmZXRjaCAxCitzdG9yZSAxIDMKK2ZldGNoIDEKK3N0b3JlIDEgMQorZmV0Y2ggMQorc3RvcmUgMSAwCitmZXRjaCAxCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgMAorZmV0Y2ggMjAwMDAKK3N0b3JlIDIwMDAwIDMKK2ZldGNoIDIwMDAwCitzdG9yZSAyMDAwMCAwCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgNDIKK2ZldGNoIDIwMDAwCitzdG9yZSAyMDAwMCAxCitmZXRjaCAyMDAwMAorc3RvcmUgMjAwMDAgMAorZmV0Y2ggMjAwMDAKK2dldF9zaXplCisjCisjIFRpbWUgdG8gdGVzdCBpbmNyZW1lbnQuICBGaXJzdCBpbmNyZW1lbnQgZnJvbSAwIChwcmV2aW91c2x5IHVucmVmZXJlbmNlZCkKKyMKK2RlY3JlbWVudCAyCitpbmNyZW1lbnQgMgorZmV0Y2ggMgoraW5jcmVtZW50IDIKK2ZldGNoIDIKK2luY3JlbWVudCAyCitmZXRjaCAyCitpbmNyZW1lbnQgMgorZmV0Y2ggMgorZGVjcmVtZW50IDIKK2ZldGNoIDIKK2RlY3JlbWVudCAyCitmZXRjaCAyCitkZWNyZW1lbnQgMgorZmV0Y2ggMgorZGVjcmVtZW50IDIKK2RlY3JlbWVudCAyCisjCisjIFN0b3JlIDEgdGhlbiB0ZXN0Li4uCisjCitzdG9yZSAzIDEKK2luY3JlbWVudCAzCitmZXRjaCAzCitkZWNyZW1lbnQgMworZmV0Y2ggMworZGVjcmVtZW50IDMKKyMKKyMgU3RvcmUgMCB0aGVuIHRlc3QKKyMgCitzdG9yZSA0IDAKK2ZldGNoIDQKK2luY3JlbWVudCA0CitpbmNyZW1lbnQgNAorZmV0Y2ggNAorZGVjcmVtZW50IDQKK2RlY3JlbWVudCA0CisjCisjIFN0b3JlIHNvbWV0aGluZywgdGhlbiBzdG9yZSAwLCB0aGVuIHRlc3QuLi4KKyMKK3N0b3JlIDQgIDQyCitzdG9yZSA0IDAKK2luY3JlbWVudCA0CitpbmNyZW1lbnQgNAoraW5jcmVtZW50IDQKK2RlY3JlbWVudCA0CitkZWNyZW1lbnQgNAorZGVjcmVtZW50IDQKK2RlY3JlbWVudCA0CitkZWNyZW1lbnQgNAorIworIyBzdG9yZSBzb21ldGhpbmcsIHRoZW4gZGVjcmVtZW50IHRvIHplcm8KKyMKK3N0b3JlIDUgNAorZGVjcmVtZW50IDUKK2RlY3JlbWVudCA1CitkZWNyZW1lbnQgNQorZGVjcmVtZW50IDUKK2RlY3JlbWVudCA1CisjCisjIFRlc3QgaW5zZXJ0CisjCitnZXRfc2l6ZQordmFsaWRhdGUKK3N0b3JlIDEwIDEwCitzdG9yZSAyMCAyMAorc3RvcmUgMzAgMzAKK3N0b3JlIDQwIDQwCitzdG9yZSA1MCA1MAorc3RvcmUgNjAgNjAKK3N0b3JlIDcwIDcwCitzdG9yZSA4MCA4MAorc3RvcmUgOTAgOTAKK3N0b3JlIDEwMCAxMDAKK3N0b3JlIDE1IDE1CitzdG9yZSAyNSAyNQorc3RvcmUgMzUgMzUKK3N0b3JlIDQ1IDQ1CitzdG9yZSA1NSA1NQorc3RvcmUgNjUgNjUKK3N0b3JlIDc1IDc1CitzdG9yZSA4NSA4NQorc3RvcmUgOTUgOTUKK2R1bXAKK2dldF9zaXplCit2YWxpZGF0ZQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS90ZXN0LmlyZWwgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9kYXRhL3Rlc3QuaXJlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzMzOGJjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfZGF0YS90ZXN0LmlyZWwKQEAgLTAsMCArMSw2OSBAQAorIworIyBUaGlzIGlzIHRoZSB0ZXN0IHNjcmlwdCBmb3IgdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUuCisjCisjIENvcHlyaWdodCAxOTk3IGJ5IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworIworaXJlbF9kdW1wCitpcmVsX3B1dCAyIDExIDMKK2lyZWxfcHV0IDEgMTAgMgoraXJlbF9wdXQgMyA5IDEKK2lyZWxfYWRkX3JlZiAxIDQgMTI4CitpcmVsX2FkZF9yZWYgMSA1IDY0CisjCisjIENoZWNrIHRvIHNlZSB3aGF0IGhhcHBlbnMgaWYgd2UgYWRkIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMKK2lyZWxfYWRkX3JlZiAxIDYgNTEyCisjCisjIFRyeSByZXNpemluZyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZXMgYW5kIHJldHJ5IHRoZSBhZGQKKyMKK2lyZWxfcHV0IDEgOCAzCitpcmVsX2FkZF9yZWYgMSA2IDUxMgorIworaXJlbF9hZGRfcmVmIDIgNCA2NAorIworIyBUZXN0IGJvdW5kYXJ5IGNhc2VzIG9mIGlyZWxfcHV0CisjCitpcmVsX3B1dCAyMyAxMiAxCitpcmVsX3B1dCAyNCAxMyAxCisjCisjIFRlc3Qgb3RoZXIgYm91bmRhcnkgY2FzZXMuLi4uCisjCitpcmVsX2dldCAyNAoraXJlbF9kZWxldGUgMjQKKyMKKyMgVGVzdCByZXRyaXZhbHMKKyMKK2lyZWxfZ2V0IDMKK2lyZWxfZ2V0IDEKKyMKKyMgVGVzdCB0aGUgaXRlcmF0b3IgZnVuY3Rpb25zCisjCitpcmVsX3N0YXJ0X2l0ZXIKK2lyZWxfbmV4dAoraXJlbF9uZXh0CitpcmVsX25leHQKK2lyZWxfbmV4dAorIworIyBOb3cgdHJ5IHRoZSBkZWxldGUgZnVuY3Rpb24sIG9uIGV4aXN0aW5nIGFuZCBub24tZXhpc3RlbnQgZW50cmllcworIworaXJlbF9kZWxldGUgMgoraXJlbF9kZWxldGUgMgoraXJlbF9kZWxldGUgNAorIworIyBNb3ZlIHRlc3RzLi4uCisjCitpcmVsX21vdmUgMSAyCitpcmVsX2R1bXAKK2lyZWxfZGVsZXRlIDQKK2lyZWxfbW92ZSAxIDQKK2lyZWxfbW92ZSAyIDQKKyMKKyMgR2V0IGJ5IG9yaWcgdGVzdHMKKyMKK2lyZWxfZHVtcAoraXJlbF9nZXRfYnlfb3JpZyAzCitpcmVsX2dldF9ieV9vcmlnIDEKK2lyZWxfZ2V0X2J5X29yaWcgNQoraXJlbF9nZXRfYnlfb3JpZyAyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuYyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2ljb3VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2NjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIHRlc3RfaWNvdW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfR0VUT1BUX0gKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorCisjaW5jbHVkZSA8ZXQvY29tX2Vyci5oPgorI2luY2x1ZGUgPHNzL3NzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9pcmVsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2JyZWwuaD4KKworZXh0ZXJuIHNzX3JlcXVlc3RfdGFibGUgdGVzdF9jbWRzOworCisjaW5jbHVkZSAidGVzdF9pY291bnQuaCIKKworZXh0Ml9maWxzeXMgdGVzdF9mczsKK2V4dDJfaWNvdW50X3QgdGVzdF9pY291bnQ7CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzdXJlcyB0aGF0IHRoZSBpY291bnQgc3RydWN0dXJlIGlzIHZhbGlkCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfaWNvdW50KGNoYXIgKnJlcXVlc3QpCit7CisJaWYgKHRlc3RfaWNvdW50KQorCQlyZXR1cm4gMDsKKwljb21fZXJyKHJlcXVlc3QsIDAsICJUaGUgaWNvdW50IHN0cnVjdHVyZSBtdXN0IGJlIGFsbG9jYXRlZC4iKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBwYXJzZXMgYW4gaW5vZGUgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHBhcnNlX2lub2RlKGNvbnN0IGNoYXIgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmRlc2MsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHIsIGV4dDJfaW5vX3QgKmlubykKK3sKKwljaGFyICp0bXA7CisKKwkqaW5vID0gc3RydG91bChzdHIsICZ0bXAsIDApOworCWlmICgqdG1wKSB7CisJCWNvbV9lcnIocmVxdWVzdCwgMCwgIkJhZCAlcyAtICVzIiwgZGVzYywgc3RyKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGRvX2NyZWF0ZV9pY291bnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdAlyZXR2YWw7CisJY2hhcgkJKnByb2duYW1lOworCWludAkJZmxhZ3MgPSAwOworCWV4dDJfaW5vX3QJc2l6ZSA9IDU7CisKKwlwcm9nbmFtZSA9ICphcmd2OworCWFyZ3YrKzsgYXJnYyAtLTsKKworCWlmIChhcmdjICYmICFzdHJjbXAoIi1pIiwgKmFyZ3YpKSB7CisJCWZsYWdzIHw9IEVYVDJfSUNPVU5UX09QVF9JTkNSRU1FTlQ7CisJCWFyZ3YrKzsgYXJnYy0tOworCX0KKwlpZiAoYXJnYykgeworCQlpZiAocGFyc2VfaW5vZGUocHJvZ25hbWUsICJpY291bnQgc2l6ZSIsIGFyZ3ZbMF0sICZzaXplKSkKKwkJCXJldHVybjsKKwkJYXJndisrOyBhcmdjLS07CisJfQorI2lmIDAKKwlwcmludGYoIkNyZWF0aW5nIGljb3VudC4uLiBmbGFncz0lZCwgc2l6ZT0lZFxuIiwgZmxhZ3MsIChpbnQpIHNpemUpOworI2VuZGlmCisJcmV0dmFsID0gZXh0MmZzX2NyZWF0ZV9pY291bnQodGVzdF9mcywgZmxhZ3MsIChpbnQpIHNpemUsCisJCQkJICAgICAgJnRlc3RfaWNvdW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIocHJvZ25hbWUsIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGljb3VudCIpOworCQlyZXR1cm47CisJfQorfQorCit2b2lkIGRvX2ZyZWVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlleHQyZnNfZnJlZV9pY291bnQodGVzdF9pY291bnQpOworCXRlc3RfaWNvdW50ID0gMDsKK30KKwordm9pZCBkb19mZXRjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAidXNhZ2U6ICVzIGlub2RlXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pbm9fdAlpbm87CisJX191MTYJCWNvdW50OworCisJaWYgKGFyZ2MgPCAyKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfZmV0Y2godGVzdF9pY291bnQsIGlubywgJmNvdW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2ZldGNoIik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJDb3VudCBpcyAldVxuIiwgY291bnQpOworfQorCit2b2lkIGRvX2luY3JlbWVudChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAidXNhZ2U6ICVzIGlub2RlXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJZXh0Ml9pbm9fdAlpbm87CisJX191MTYJCWNvdW50OworCisJaWYgKGFyZ2MgPCAyKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfaW5jcmVtZW50KHRlc3RfaWNvdW50LCBpbm8sICZjb3VudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfaW5jcmVtZW50Iik7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJDb3VudCBpcyBub3cgJXVcbiIsIGNvdW50KTsKK30KKwordm9pZCBkb19kZWNyZW1lbnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gInVzYWdlOiAlcyBpbm9kZVxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCV9fdTE2CQljb3VudDsKKworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChjaGVja19pY291bnQoYXJndlswXSkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJmlubykpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfaWNvdW50X2RlY3JlbWVudCh0ZXN0X2ljb3VudCwgaW5vLCAmY291bnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkid2hpbGUgY2FsbGluZyBleHQyZnNfaWNvdW50X2RlY3JlbWVudCIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiQ291bnQgaXMgbm93ICV1XG4iLCBjb3VudCk7Cit9CisKK3ZvaWQgZG9fc3RvcmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gInVzYWdlOiAlcyBpbm9kZSBjb3VudFxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCWV4dDJfaW5vX3QJY291bnQ7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJpbm9kZSIsIGFyZ3ZbMV0sICZpbm8pKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJjb3VudCIsIGFyZ3ZbMl0sICZjb3VudCkpCisJCXJldHVybjsKKwlpZiAoY291bnQgPiA2NTUzNSkgeworCQlwcmludGYoIkNvdW50IHRvbyBsYXJnZS5cbiIpOworCQlyZXR1cm47CisJfQorCXJldHZhbCA9IGV4dDJmc19pY291bnRfc3RvcmUodGVzdF9pY291bnQsIGlubywgKF9fdTE2KSBjb3VudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwKKwkJCSJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pY291bnRfc3RvcmUiKTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBkb19kdW1wKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaTsKKwlfX3UxNgkJY291bnQ7CisKKwlpZiAoY2hlY2tfaWNvdW50KGFyZ3ZbMF0pKQorCQlyZXR1cm47CisJZm9yIChpPTE7IGkgPD0gdGVzdF9mcy0+c3VwZXItPnNfaW5vZGVzX2NvdW50OyBpKyspIHsKKwkJcmV0dmFsID0gZXh0MmZzX2ljb3VudF9mZXRjaCh0ZXN0X2ljb3VudCwgaSwgJmNvdW50KTsKKwkJaWYgKHJldHZhbCkgeworCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsCisJCQkJIndoaWxlIGZldGNoaW5nIGljb3VudCBmb3IgJWx1IiwgKHVuc2lnbmVkIGxvbmcpaSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGNvdW50KQorCQkJcHJpbnRmKCIlbHU6ICV1XG4iLCAodW5zaWduZWQgbG9uZylpLCBjb3VudCk7CisJfQorfQorCit2b2lkIGRvX3ZhbGlkYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwllcnJjb2RlX3QJcmV0dmFsOworCisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pY291bnRfdmFsaWRhdGUodGVzdF9pY291bnQsIHN0ZG91dCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIHZhbGlkYXRpbmcgaWNvdW50IHN0cnVjdHVyZSIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiSWNvdW50IHN0cnVjdHVyZSBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkXG4iKTsKK30KKwordm9pZCBkb19nZXRfc2l6ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0Ml9pbm9fdAlzaXplOworCisJaWYgKGNoZWNrX2ljb3VudChhcmd2WzBdKSkKKwkJcmV0dXJuOworCXNpemUgPSBleHQyZnNfZ2V0X2ljb3VudF9zaXplKHRlc3RfaWNvdW50KTsKKwlwcmludGYoIlNpemUgb2YgaWNvdW50IGlzOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXNpemUpOworfQorCitzdGF0aWMgaW50IHNvdXJjZV9maWxlKGNvbnN0IGNoYXIgKmNtZF9maWxlLCBpbnQgc2NpX2lkeCkKK3sKKwlGSUxFCQkqZjsKKwljaGFyCQlidWZbMjU2XTsKKwljaGFyCQkqY3A7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJaW50CQlyZXR2YWw7CisJaW50IAkJbm9lY2hvOworCisJaWYgKHN0cmNtcChjbWRfZmlsZSwgIi0iKSA9PSAwKQorCQlmID0gc3RkaW47CisJZWxzZSB7CisJCWYgPSBmb3BlbihjbWRfZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQlwZXJyb3IoY21kX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlmZmx1c2goc3RkZXJyKTsKKwlzZXRidWYoc3Rkb3V0LCBOVUxMKTsKKwlzZXRidWYoc3RkZXJyLCBOVUxMKTsKKwl3aGlsZSAoIWZlb2YoZikpIHsKKwkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGJ1ZlswXSA9PSAnIycpCisJCQljb250aW51ZTsKKwkJbm9lY2hvID0gMDsKKwkJaWYgKGJ1ZlswXSA9PSAnLScpIHsKKwkJCW5vZWNobyA9IDE7CisJCQlidWZbMF0gPSAnICc7CisJCX0KKwkJY3AgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJY3AgPSBzdHJjaHIoYnVmLCAnXHInKTsKKwkJaWYgKGNwKQorCQkJKmNwID0gMDsKKwkJaWYgKCFub2VjaG8pCisJCQlwcmludGYoInRlc3RfaWNvdW50OiAlc1xuIiwgYnVmKTsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIGJ1Zik7CisJCWlmIChyZXR2YWwpIHsKKwkJCXNzX3BlcnJvcihzY2lfaWR4LCByZXR2YWwsIGJ1Zik7CisJCQlleGl0X3N0YXR1cysrOworCQl9CisJfQorCWlmIChmICE9IHN0ZGluKQorCQlmY2xvc2UoZik7CisJcmV0dXJuIGV4aXRfc3RhdHVzOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQlyZXR2YWw7CisJaW50CQlzY2lfaWR4OworCWludAkJYzsKKwljaGFyCQkqcmVxdWVzdCA9IDA7CisJaW50CQlleGl0X3N0YXR1cyA9IDA7CisJY2hhcgkJKmNtZF9maWxlID0gMDsKKwlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayBwYXJhbTsKKworCWluaXRpYWxpemVfZXh0Ml9lcnJvcl90YWJsZSgpOworCisJLyoKKwkgKiBDcmVhdGUgYSBzYW1wbGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUKKwkgKi8KKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2Yoc3RydWN0IGV4dDJfc3VwZXJfYmxvY2spKTsKKwlleHQyZnNfYmxvY2tzX2NvdW50X3NldCgmcGFyYW0sIDgwMDAwKTsKKwlwYXJhbS5zX2lub2Rlc19jb3VudCA9IDIwMDAwOworCXJldHZhbCA9IGV4dDJmc19pbml0aWFsaXplKCIvZGV2L251bGwiLCAwLCAmcGFyYW0sCisJCQkJICAgdW5peF9pb19tYW5hZ2VyLCAmdGVzdF9mcyk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKCIvZGV2L251bGwiLCByZXR2YWwsICJ3aGlsZSBzZXR0aW5nIHVwIHRlc3QgZnMiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ3UjpmOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1InOgorCQkJcmVxdWVzdCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWNtZF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJVc2FnZTogdGVzdF9pY291bnQgIgorCQkJCSJbLVIgcmVxdWVzdF0gWy1mIGNtZF9maWxlXSIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oInRlc3RfaWNvdW50IiwgIjAuMCIsIChjaGFyICopIE5VTEwsCisJCQkJICAgICAgICZ0ZXN0X2NtZHMsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKHJlcXVlc3QpIHsKKwkJcmV0dmFsID0gMDsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIHJlcXVlc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlyZXR1cm4oZXhpdF9zdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50LmggYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVhMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50LmgKQEAgLTAsMCArMSwxMCBAQAordm9pZCBkb19jcmVhdGVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2ZyZWVfaWNvdW50KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2ZldGNoKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2luY3JlbWVudChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19kZWNyZW1lbnQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fc3RvcmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fZ2V0X3NpemUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb192YWxpZGF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnRfY21kcy5jdCBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X2ljb3VudF9jbWRzLmN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2M2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9pY291bnRfY21kcy5jdApAQCAtMCwwICsxLDM3IEBACisjCisjIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLiAgVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkCisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLgorIworY29tbWFuZF90YWJsZSB0ZXN0X2NtZHM7CisKKyMKKyMgSWNvdW50IHRhYmxlIGNvbW1hbmRzCisjCityZXF1ZXN0IGRvX2NyZWF0ZV9pY291bnQsICJDcmVhdGUgYW4gaWNvdW50IHN0cnVjdHVyZSIsCisJY3JlYXRlX2ljb3VudCwgY3JlYXRlOworCityZXF1ZXN0IGRvX2ZyZWVfaWNvdW50LCAiRnJlZSBhbiBpY291bnQgc3RydWN0dXJlIiwKKwlmcmVlX2ljb3VudCwgZnJlZTsKKworcmVxdWVzdCBkb19mZXRjaCwgIkZldGNoIGFuIGljb3VudCBlbnRyeSIsCisJZmV0Y2g7CisKK3JlcXVlc3QgZG9faW5jcmVtZW50LCAiSW5jcmVtZW50IGFuIGljb3VudCBlbnRyeSIsCisJaW5jcmVtZW50LCBpbmM7CisKK3JlcXVlc3QgZG9fZGVjcmVtZW50LCAiRGVjcmVtZW50IGFuIGljb3VudCBlbnRyeSIsCisJZGVjcmVtZW50LCBkZWM7CisKK3JlcXVlc3QgZG9fc3RvcmUsICJTdG9yZSBhbiBpY291bnQgZW50cnkiLAorCXN0b3JlOworCityZXF1ZXN0IGRvX2dldF9zaXplLCAiR2V0IHRoZSBzaXplIG9mIHRoZSBpY291bnQgc3RydWN0dXJlIiwKKwlnZXRfc2l6ZTsKKworcmVxdWVzdCBkb19kdW1wLCAiRHVtcCB0aGUgaWNvdW50IHN0cnVjdHVyZSIsCisJZHVtcDsKKworcmVxdWVzdCBkb192YWxpZGF0ZSwgIlZhbGlkYXRlIHRoZSBpY291bnQgc3RydWN0dXJlIiwKKwl2YWxpZGF0ZSwgY2hlY2s7CisKK2VuZDsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X3JlbC5jIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0YTcyMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X3JlbC5jCkBAIC0wLDAgKzEsNzYzIEBACisvKgorICogdGVzdF9yZWwuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NyBUaGVvZG9yZSBUcydvLgorICoKKyAqICVCZWdpbi1IZWFkZXIlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljCisgKiBMaWNlbnNlLgorICogJUVuZC1IZWFkZXIlCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNpbmNsdWRlIDxzcy9zcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorI2luY2x1ZGUgPGV4dDJmcy9pcmVsLmg+CisjaW5jbHVkZSA8ZXh0MmZzL2JyZWwuaD4KKworI2luY2x1ZGUgInRlc3RfcmVsLmgiCisKK2V4dGVybiBzc19yZXF1ZXN0X3RhYmxlIHRlc3RfY21kczsKKworZXh0Ml9pcmVsIGlyZWwgPSBOVUxMOworZXh0Ml9icmVsIGJyZWwgPSBOVUxMOworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhbiBpbm9kZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfaW5vZGUoY29uc3QgY2hhciAqcmVxdWVzdCwgY29uc3QgY2hhciAqZGVzYywKKwkJICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgZXh0Ml9pbm9fdCAqaW5vKQoreworCWNoYXIgKnRtcDsKKworCSppbm8gPSBzdHJ0b3VsKHN0ciwgJnRtcCwgMCk7CisJaWYgKCp0bXApIHsKKwkJY29tX2VycihyZXF1ZXN0LCAwLCAiQmFkICVzIC0gJXMiLCBkZXNjLCBzdHIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggcGFyc2VzIGEgYmxvY2sgbnVtYmVyLgorICovCitzdGF0aWMgaW50IHBhcnNlX2Jsb2NrKGNvbnN0IGNoYXIgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmRlc2MsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHIsIGJsa190ICpibGspCit7CisJY2hhciAqdG1wOworCisJKmJsayA9IHN0cnRvdWwoc3RyLCAmdG1wLCAwKTsKKwlpZiAoKnRtcCkgeworCQljb21fZXJyKHJlcXVlc3QsIDAsICJCYWQgJXMgLSAlcyIsIGRlc2MsIHN0cik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBhc3N1cmVzIHRoYXQgYSBicmVsIHRhYmxlIGlzIG9wZW4KKyAqLworc3RhdGljIGludCBjaGVja19icmVsKGNoYXIgKnJlcXVlc3QpCit7CisJaWYgKGJyZWwpCisJCXJldHVybiAwOworCWNvbV9lcnIocmVxdWVzdCwgMCwgIkEgYmxvY2sgcmVsb2NhdGlvbiB0YWJsZSBtdXN0IGJlIG9wZW4uIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYXNzdXJlcyB0aGF0IGFuIGlyZWwgdGFibGUgaXMgb3BlbgorICovCitzdGF0aWMgaW50IGNoZWNrX2lyZWwoY2hhciAqcmVxdWVzdCkKK3sKKwlpZiAoaXJlbCkKKwkJcmV0dXJuIDA7CisJY29tX2VycihyZXF1ZXN0LCAwLCAiQW4gaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSBtdXN0IGJlIG9wZW4uIik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZGlzcGxheXMgYSBicmVsIGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfYnJlbF9lbnRyeShibGtfdCBvbGQsCisJCQkgICAgICAgc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgKmVudCkKK3sKKwlwcmludGYoIk9sZD0gJXUsIE5ldz0gJXUsIE93bmVyPSAldToldVxuIiwgb2xkLCBlbnQtPm5ldywKKwkgICAgICAgZW50LT5vd25lci5ibG9ja19yZWYsIGVudC0+b2Zmc2V0KTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBkaXNwbGF5cyBhbiBpcmVsIGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfaXJlbF9lbnRyeShleHQyX2lub190IG9sZCwKKwkJCSAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSAqZW50LAorCQkJICAgICAgIGludCBkb19yZWZzKQoreworCXN0cnVjdCBleHQyX2lub2RlX3JlZmVyZW5jZSByZWY7CisJZXJyY29kZV90CXJldHZhbDsKKwlpbnQJCWZpcnN0ID0gMTsKKworCXByaW50ZigiT2xkPSAlbHUsIE5ldz0gJWx1LCBPcmlnaW5hbD0lbHUsIE1heF9yZWZzPSV1XG4iLCBvbGQsCisJICAgICAgIGVudC0+bmV3LCBlbnQtPm9yaWcsIGVudC0+bWF4X3JlZnMpOworCWlmICghZG9fcmVmcykKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcl9yZWYoaXJlbCwgb2xkKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ZigiXHRDb3VsZG4ndCBnZXQgcmVmZXJlbmNlczogJXNcbiIsCisJCSAgICAgICBlcnJvcl9tZXNzYWdlKHJldHZhbCkpOworCQlyZXR1cm47CisJfQorCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19pcmVsX25leHRfcmVmKGlyZWwsICZyZWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlwcmludGYoIiglcykgIiwgZXJyb3JfbWVzc2FnZShyZXR2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZWYuYmxvY2sgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoZmlyc3QpIHsKKwkJCWZwdXRjKCdcdCcsIHN0ZG91dCk7CisJCQlmaXJzdCA9IDA7CisJCX0gZWxzZQorCQkJcHJpbnRmKCIsICIpOworCQlwcmludGYoIiV1OiV1IiwgcmVmLmJsb2NrLCByZWYub2Zmc2V0KTsKKwl9CisJaWYgKCFmaXJzdCkKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgYWN0dWFsIGNvbW1hbmQgdGFibGUgcHJvY2VkdXJlcworICovCit2b2lkIGRvX2JyZWxfbWFfY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICJVc2FnZTogJXMgbmFtZSBtYXhfYmxvY2tzXG4iOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCW1heF9ibGs7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfYmxvY2soYXJndlswXSwgIm1heF9ibG9ja3MiLCBhcmd2WzJdLCAmbWF4X2JsaykpCisJCXJldHVybjsKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9tZW1hcnJheV9jcmVhdGUoYXJndlsxXSwgbWF4X2JsaywgJmJyZWwpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBvcGVuaW5nIG1lbWFycmF5IGJyZWwiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fYnJlbF9mcmVlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWV4dDJmc19icmVsX2ZyZWUoYnJlbCk7CisJYnJlbCA9IE5VTEw7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfcHV0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICJ1c2FnZTogJXMgb2xkX2Jsb2NrIG5ld19ibG9jayBbb3duZXJdIFtvZmZzZXRdIjsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5IGVudDsKKwlibGtfdAlvbGQsIG5ldywgb2Zmc2V0PTAsIG93bmVyPTA7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnNlX2Jsb2NrKGFyZ3ZbMF0sICJvbGQgYmxvY2siLCBhcmd2WzFdLCAmb2xkKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAibmV3IGJsb2NrIiwgYXJndlsyXSwgJm5ldykpCisJCXJldHVybjsKKwlpZiAoYXJnYyA+IDMgJiYKKwkgICAgcGFyc2VfYmxvY2soYXJndlswXSwgIm93bmVyIGJsb2NrIiwgYXJndlszXSwgJm93bmVyKSkKKwkJcmV0dXJuOworCWlmIChhcmdjID4gNCAmJgorCSAgICBwYXJzZV9ibG9jayhhcmd2WzBdLCAib2Zmc2V0IiwgYXJndls0XSwgJm9mZnNldCkpCisJCXJldHVybjsKKwlpZiAob2Zmc2V0ID4gNjU1MzUpIHsKKwkJcHJpbnRmKCJPZmZzZXQgdG9vIGxhcmdlLlxuIik7CisJCXJldHVybjsKKwl9CisJZW50Lm5ldyA9IG5ldzsKKwllbnQub2Zmc2V0ID0gKF9fdTE2KSBvZmZzZXQ7CisJZW50LmZsYWdzID0gMDsKKwllbnQub3duZXIuYmxvY2tfcmVmID0gb3duZXI7CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9wdXQoYnJlbCwgb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9wdXQiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9fYnJlbF9nZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIiVzIGJsb2NrIjsKKwllcnJjb2RlX3QgcmV0dmFsOworCXN0cnVjdCBleHQyX2Jsb2NrX3JlbG9jYXRlX2VudHJ5IGVudDsKKwlibGtfdAlibGs7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzFdLCAmYmxrKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19icmVsX2dldChicmVsLCBibGssICZlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX2dldCIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfYnJlbF9lbnRyeShibGssICZlbnQpOworCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2JyZWxfc3RhcnRfaXRlcihicmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90IHJldHZhbDsKKwlzdHJ1Y3QgZXh0Ml9ibG9ja19yZWxvY2F0ZV9lbnRyeSBlbnQ7CisJYmxrX3QJYmxrOworCisJaWYgKGNoZWNrX2JyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19icmVsX25leHQoYnJlbCwgJmJsaywgJmVudCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfbmV4dCIpOworCQlyZXR1cm47CisJfQorCWlmIChibGsgPT0gMCkgeworCQlwcmludGYoIk5vIG1vcmUgZW50cmllcyFcbiIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfYnJlbF9lbnRyeShibGssICZlbnQpOworCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisJc3RydWN0IGV4dDJfYmxvY2tfcmVsb2NhdGVfZW50cnkgZW50OworCWJsa190CWJsazsKKworCWlmIChjaGVja19icmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9zdGFydF9pdGVyKGJyZWwpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19icmVsX3N0YXJ0X2l0ZXIiKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgxKSB7CisJCXJldHZhbCA9IGV4dDJmc19icmVsX25leHQoYnJlbCwgJmJsaywgJmVudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9uZXh0Iik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGJsayA9PSAwKQorCQkJYnJlYWs7CisKKwkJZGlzcGxheV9icmVsX2VudHJ5KGJsaywgJmVudCk7CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19icmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0gIiVzIG9sZF9ibG9jayBuZXdfYmxvY2siOworCWVycmNvZGVfdCByZXR2YWw7CisJYmxrX3QJb2xkLCBuZXc7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAib2xkIGJsb2NrIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfYmxvY2soYXJndlswXSwgIm5ldyBibG9jayIsIGFyZ3ZbMl0sICZuZXcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfYnJlbF9tb3ZlKGJyZWwsIG9sZCwgbmV3KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfYnJlbF9tb3ZlIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2JyZWxfZGVsZXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9ICIlcyBibG9jayI7CisJZXJyY29kZV90IHJldHZhbDsKKwlibGtfdAlibGs7CisKKwlpZiAoY2hlY2tfYnJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzFdLCAmYmxrKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2JyZWxfZGVsZXRlKGJyZWwsIGJsayk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2JyZWxfZGVsZXRlIik7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgZG9faXJlbF9tYV9jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlVzYWdlOiAlcyBuYW1lIG1heF9pbm9kZVxuIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJbWF4X2lubzsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAibWF4X2lub2RlcyIsIGFyZ3ZbMl0sICZtYXhfaW5vKSkKKwkJcmV0dXJuOworCXJldHZhbCA9IGV4dDJmc19pcmVsX21lbWFycmF5X2NyZWF0ZShhcmd2WzFdLCBtYXhfaW5vLCAmaXJlbCk7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIG9wZW5pbmcgbWVtYXJyYXkgaXJlbCIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX2ZyZWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlleHQyZnNfaXJlbF9mcmVlKGlyZWwpOworCWlyZWwgPSBOVUxMOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX3B1dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiJXMgb2xkIG5ldyBtYXhfcmVmcyI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZCwgbmV3LCBtYXhfcmVmczsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJaWYgKGFyZ2MgPCA0KSB7CisJCXByaW50Zih1c2FnZSwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJvbGQgaW5vZGUiLCBhcmd2WzFdLCAmb2xkKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAibmV3IGlub2RlIiwgYXJndlsyXSwgJm5ldykpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm1heF9yZWZzIiwgYXJndlszXSwgJm1heF9yZWZzKSkKKwkJcmV0dXJuOworCWlmIChtYXhfcmVmcyA+IDY1NTM1KSB7CisJCXByaW50ZigibWF4X3JlZnMgdG9vIGJpZ1xuIik7CisJCXJldHVybjsKKwl9CisJZW50Lm5ldyA9IG5ldzsKKwllbnQubWF4X3JlZnMgPSAoX191MTYpIG1heF9yZWZzOworCWVudC5mbGFncyA9IDA7CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9wdXQoaXJlbCwgb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9wdXQiKTsKKwkJcmV0dXJuOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9faXJlbF9nZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIiVzIGlub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJb2xkOworCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5IGVudDsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2dldChpcmVsLCBvbGQsICZlbnQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2dldCIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfaXJlbF9lbnRyeShvbGQsICZlbnQsIDEpOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX2dldF9ieV9vcmlnKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBvcmlnX2lub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJb3JpZywgb2xkOworCXN0cnVjdCBleHQyX2lub2RlX3JlbG9jYXRlX2VudHJ5IGVudDsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm9yaWdpbmFsIGlub2RlIiwgYXJndlsxXSwgJm9yaWcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZyhpcmVsLCBvcmlnLCAmb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9nZXRfYnlfb3JpZyIpOworCQlyZXR1cm47CisJfQorCWRpc3BsYXlfaXJlbF9lbnRyeShvbGQsICZlbnQsIDEpOworCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZDsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfbmV4dChpcmVsLCAmb2xkLCAmZW50KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9uZXh0Iik7CisJCXJldHVybjsKKwl9CisJaWYgKG9sZCA9PSAwKSB7CisJCXByaW50ZigiTm8gbW9yZSBlbnRyaWVzIVxuIik7CisJCXJldHVybjsKKwl9CisJZGlzcGxheV9pcmVsX2VudHJ5KG9sZCwgJmVudCwgMSk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CWlubzsKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWxvY2F0ZV9lbnRyeSBlbnQ7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcihpcmVsKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyIik7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlyZXR2YWwgPSBleHQyZnNfaXJlbF9uZXh0KGlyZWwsICZpbm8sICZlbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfbmV4dCIpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChpbm8gPT0gMCkKKwkJCWJyZWFrOworCisJCWRpc3BsYXlfaXJlbF9lbnRyeShpbm8sICZlbnQsIDEpOworCX0KKwlyZXR1cm47Cit9CisKK3ZvaWQgZG9faXJlbF9hZGRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBpbm9kZSBibG9jayBvZmZzZXQiOworCWVycmNvZGVfdAlyZXR2YWw7CisJYmxrX3QJCWJsb2NrLCBvZmZzZXQ7CisJZXh0Ml9pbm9fdAlpbm87CisJc3RydWN0IGV4dDJfaW5vZGVfcmVmZXJlbmNlIHJlZjsKKworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAiaW5vZGUiLCBhcmd2WzFdLCAmaW5vKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV9ibG9jayhhcmd2WzBdLCAiYmxvY2siLCBhcmd2WzJdLCAmYmxvY2spKQorCQlyZXR1cm47CisJaWYgKHBhcnNlX2Jsb2NrKGFyZ3ZbMF0sICJvZmZzZXQiLCBhcmd2WzNdLCAmb2Zmc2V0KSkKKwkJcmV0dXJuOworCWlmIChvZmZzZXQgPiA2NTUzNSkgeworCQlwcmludGYoIk9mZnNldCB0b28gYmlnLlxuIik7CisJCXJldHVybjsKKwl9CisJcmVmLmJsb2NrID0gYmxvY2s7CisJcmVmLm9mZnNldCA9IG9mZnNldDsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2FkZF9yZWYoaXJlbCwgaW5vLCAmcmVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9hZGRfcmVmIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfc3RhcnRfaXRlcl9yZWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIJKnVzYWdlID0gIiVzIGlub2RlIjsKKwllcnJjb2RlX3QJcmV0dmFsOworCWV4dDJfaW5vX3QJaW5vOworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisJaWYgKHBhcnNlX2lub2RlKGFyZ3ZbMF0sICJpbm9kZSIsIGFyZ3ZbMV0sICZpbm8pKQorCQlyZXR1cm47CisJcmV0dmFsID0gZXh0MmZzX2lyZWxfc3RhcnRfaXRlcl9yZWYoaXJlbCwgaW5vKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9zdGFydF9pdGVyX3JlZiIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKwordm9pZCBkb19pcmVsX25leHRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgZXh0Ml9pbm9kZV9yZWZlcmVuY2UgcmVmOworCWVycmNvZGVfdCByZXR2YWw7CisKKwlpZiAoY2hlY2tfaXJlbChhcmd2WzBdKSkKKwkJcmV0dXJuOworCisJcmV0dmFsID0gZXh0MmZzX2lyZWxfbmV4dF9yZWYoaXJlbCwgJnJlZik7CisJaWYgKHJldHZhbCkgeworCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGNhbGxpbmcgZXh0MmZzX2lyZWxfbmV4dF9yZWYiKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIklub2RlIHJlZmVyZW5jZTogJXU6JXVcbiIsIHJlZi5ibG9jaywgcmVmLm9mZnNldCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfbW92ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhcgkqdXNhZ2UgPSAiJXMgb2xkIG5ldyI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CW9sZCwgbmV3OworCisJaWYgKGNoZWNrX2lyZWwoYXJndlswXSkpCisJCXJldHVybjsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYodXNhZ2UsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCWlmIChwYXJzZV9pbm9kZShhcmd2WzBdLCAib2xkIGlub2RlIiwgYXJndlsxXSwgJm9sZCkpCisJCXJldHVybjsKKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgIm5ldyBpbm9kZSIsIGFyZ3ZbMl0sICZuZXcpKQorCQlyZXR1cm47CisKKwlyZXR2YWwgPSBleHQyZnNfaXJlbF9tb3ZlKGlyZWwsIG9sZCwgbmV3KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgY2FsbGluZyBleHQyZnNfaXJlbF9tb3ZlIik7CisJCXJldHVybjsKKwl9CisJcmV0dXJuOworfQorCit2b2lkIGRvX2lyZWxfZGVsZXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyCSp1c2FnZSA9ICIlcyBpbm9kZSI7CisJZXJyY29kZV90CXJldHZhbDsKKwlleHQyX2lub190CWlubzsKKworCWlmIChjaGVja19pcmVsKGFyZ3ZbMF0pKQorCQlyZXR1cm47CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmKHVzYWdlLCBhcmd2WzBdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFyc2VfaW5vZGUoYXJndlswXSwgImlub2RlIiwgYXJndlsxXSwgJmlubykpCisJCXJldHVybjsKKworCXJldHZhbCA9IGV4dDJmc19pcmVsX2RlbGV0ZShpcmVsLCBpbm8pOworCWlmIChyZXR2YWwpIHsKKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBjYWxsaW5nIGV4dDJmc19pcmVsX2RlbGV0ZSIpOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBzb3VyY2VfZmlsZShjb25zdCBjaGFyICpjbWRfZmlsZSwgaW50IHNjaV9pZHgpCit7CisJRklMRQkJKmY7CisJY2hhcgkJYnVmWzI1Nl07CisJY2hhcgkJKmNwOworCWludAkJZXhpdF9zdGF0dXMgPSAwOworCWludAkJcmV0dmFsOworCWludCAJCW5vZWNobzsKKworCWlmIChzdHJjbXAoY21kX2ZpbGUsICItIikgPT0gMCkKKwkJZiA9IHN0ZGluOworCWVsc2UgeworCQlmID0gZm9wZW4oY21kX2ZpbGUsICJyIik7CisJCWlmICghZikgeworCQkJcGVycm9yKGNtZF9maWxlKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZmZsdXNoKHN0ZG91dCk7CisJZmZsdXNoKHN0ZGVycik7CisJc2V0YnVmKHN0ZG91dCwgTlVMTCk7CisJc2V0YnVmKHN0ZGVyciwgTlVMTCk7CisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChidWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCW5vZWNobyA9IDA7CisJCWlmIChidWZbMF0gPT0gJy0nKSB7CisJCQlub2VjaG8gPSAxOworCQkJYnVmWzBdID0gJyAnOworCQl9CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xyJyk7CisJCWlmIChjcCkKKwkJCSpjcCA9IDA7CisJCWlmICghbm9lY2hvKQorCQkJcHJpbnRmKCJ0ZXN0X3JlbDogJXNcbiIsIGJ1Zik7CisJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzY2lfaWR4LCBidWYpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCBidWYpOworCQkJZXhpdF9zdGF0dXMrKzsKKwkJfQorCX0KKwlyZXR1cm4gZXhpdF9zdGF0dXM7Cit9CisKK3ZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50CQlyZXR2YWw7CisJaW50CQlzY2lfaWR4OworCWNvbnN0IGNoYXIJKnVzYWdlID0gIlVzYWdlOiB0ZXN0X3JlbCBbLVIgcmVxdWVzdF0gWy1mIGNtZF9maWxlXSI7CisJaW50CQljOworCWNoYXIJCSpyZXF1ZXN0ID0gMDsKKwlpbnQJCWV4aXRfc3RhdHVzID0gMDsKKwljaGFyCQkqY21kX2ZpbGUgPSAwOworCisJaW5pdGlhbGl6ZV9leHQyX2Vycm9yX3RhYmxlKCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJ3UjpmOiIpKSAhPSBFT0YpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ1InOgorCQkJcmVxdWVzdCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWNtZF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21fZXJyKGFyZ3ZbMF0sIDAsIHVzYWdlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzY2lfaWR4ID0gc3NfY3JlYXRlX2ludm9jYXRpb24oInRlc3RfcmVsIiwgIjAuMCIsIChjaGFyICopIE5VTEwsCisJCQkJICAgICAgICZ0ZXN0X2NtZHMsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImNyZWF0aW5nIGludm9jYXRpb24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkodm9pZCkgc3NfYWRkX3JlcXVlc3RfdGFibGUgKHNjaV9pZHgsICZzc19zdGRfcmVxdWVzdHMsIDEsICZyZXR2YWwpOworCWlmIChyZXR2YWwpIHsKKwkJc3NfcGVycm9yKHNjaV9pZHgsIHJldHZhbCwgImFkZGluZyBzdGFuZGFyZCByZXF1ZXN0cyIpOworCQlleGl0ICgxKTsKKwl9CisJaWYgKHJlcXVlc3QpIHsKKwkJcmV0dmFsID0gMDsKKwkJcmV0dmFsID0gc3NfZXhlY3V0ZV9saW5lKHNjaV9pZHgsIHJlcXVlc3QpOworCQlpZiAocmV0dmFsKSB7CisJCQlzc19wZXJyb3Ioc2NpX2lkeCwgcmV0dmFsLCByZXF1ZXN0KTsKKwkJCWV4aXRfc3RhdHVzKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZF9maWxlKSB7CisJCWV4aXRfc3RhdHVzID0gc291cmNlX2ZpbGUoY21kX2ZpbGUsIHNjaV9pZHgpOworCX0gZWxzZSB7CisJCXNzX2xpc3RlbihzY2lfaWR4KTsKKwl9CisKKwlleGl0KGV4aXRfc3RhdHVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmggYi9lMmZzcHJvZ3MvdGVzdHMvcHJvZ3MvdGVzdF9yZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2M0ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIHRlc3RfcmVsLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgVGhlb2RvcmUgVHMnby4KKyAqCisgKiAlQmVnaW4tSGVhZGVyJQorICogVGhpcyBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYworICogTGljZW5zZS4KKyAqICVFbmQtSGVhZGVyJQorICovCisKKworCit2b2lkIGRvX2JyZWxfbWFfY3JlYXRlKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2JyZWxfZnJlZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX3B1dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX2dldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX3N0YXJ0X2l0ZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fYnJlbF9uZXh0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2JyZWxfZHVtcChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19icmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9fYnJlbF9kZWxldGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9tYV9jcmVhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9mcmVlKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfcHV0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfZ2V0KGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfZ2V0X2J5X29yaWcoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9zdGFydF9pdGVyKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfbmV4dChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19pcmVsX2R1bXAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9hZGRfcmVmKGludCBhcmdjLCBjaGFyICoqYXJndik7Cit2b2lkIGRvX2lyZWxfc3RhcnRfaXRlcl9yZWYoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9uZXh0X3JlZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwordm9pZCBkb19pcmVsX21vdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgZG9faXJlbF9kZWxldGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X3JlbF9jbWRzLmN0IGIvZTJmc3Byb2dzL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsX2NtZHMuY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkNmFlMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9wcm9ncy90ZXN0X3JlbF9jbWRzLmN0CkBAIC0wLDAgKzEsODIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk3IFRoZW9kb3JlIFRzJ28uICBUaGlzIGZpbGUgbWF5IGJlIHJlZGlzdHJpYnV0ZWQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCisjCitjb21tYW5kX3RhYmxlIHRlc3RfY21kczsKKworIworIyBCbG9jayByZWxvY2F0aW9uIHRhYmxlIGNvbW1hbmRzCisjCisKK3JlcXVlc3QgZG9fYnJlbF9tYV9jcmVhdGUsICJPcGVuIGEgbWVtb3J5IGFycmF5IGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfbWFfY3JlYXRlLCBibWFfY3JlYXRlOworCityZXF1ZXN0IGRvX2JyZWxfZnJlZSwgIkZyZWUgYSBibG9jayByZWxvY2F0aW9uIHRhYmxlIiwKKwlicmVsX2ZyZWUsIGJmcmVlOworCityZXF1ZXN0IGRvX2JyZWxfcHV0LCAiQWRkIG9yIG1vZGlmeSBhIGJsb2NrIHJlbG9jYXRpb24gZW50cnkiLAorCWJyZWxfcHV0LCBicHV0OworCityZXF1ZXN0IGRvX2JyZWxfZ2V0LCAiR2V0IGEgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeSIsCisJYnJlbF9nZXQsIGJnZXQ7CisKK3JlcXVlc3QgZG9fYnJlbF9zdGFydF9pdGVyLCAiU3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGJsb2NrIHRhYmxlIiwKKwlicmVsX3N0YXJ0X2l0ZXIsIGJzdGFydDsKKworcmVxdWVzdCBkb19icmVsX25leHQsICJHZXQgdGhlIG5leHQgYmxvY2sgcmVsb2NhdGlvbiBlbnRyeSIsCisJYnJlbF9uZXh0LCBibmV4dDsKKworcmVxdWVzdCBkb19icmVsX2R1bXAsICJEdW1wIHRoZSBibG9jayByZWxvY2F0aW9uIHRhYmxlIiwKKwlicmVsX2R1bXAsIGJkdW1wOworCityZXF1ZXN0IGRvX2JyZWxfbW92ZSwgIk1vdmUgYW4gZW50cnkgaW4gdGhlIGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfbW92ZSwgYm1vdmU7CisKK3JlcXVlc3QgZG9fYnJlbF9kZWxldGUsICJEZWxldGUgYW4gZW50cnkgaW4gdGhlIGJsb2NrIHJlbG9jYXRpb24gdGFibGUiLAorCWJyZWxfZGVsZXRlLCBiZGVsZXRlLCBiZGVsOworCisjCisjIElub2RlIHJlbG9jYXRpb24gdGFibGUgY29tbWFuZHMKKyMKKworcmVxdWVzdCBkb19pcmVsX21hX2NyZWF0ZSwgIk9wZW4gYSBtZW1vcnkgYXJyYXkgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsCisJaXJlbF9tYV9jcmVhdGUsIGltYV9jcmVhdGU7CisKK3JlcXVlc3QgZG9faXJlbF9mcmVlLCAiRnJlZSBhbiBpbm9kZSByZWxvY2F0aW9uIHRhYmxlIiwKKwlpcmVsX2ZyZWUsIGlmcmVlOworCityZXF1ZXN0IGRvX2lyZWxfcHV0LCAiQWRkIG9yIG1vZGlmeSBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IiwKKwlpcmVsX3B1dCwgaXB1dDsKKworcmVxdWVzdCBkb19pcmVsX2dldCwgIkdldCBhbiBpbm9kZSByZWxvY2F0aW9uIGVudHJ5IiwKKwlpcmVsX2dldCwgaWdldDsKKworcmVxdWVzdCBkb19pcmVsX2dldF9ieV9vcmlnLCAKKwkiR2V0IGFuIGlub2RlIHJlbG9jYXRpb24gZW50cnkgYnkgaXRzIG9yaWdpbmFsIG51bWJlciIsCisJaXJlbF9nZXRfYnlfb3JpZywgaWdldG9yaWcsIGlnZXRvOworCityZXF1ZXN0IGRvX2lyZWxfc3RhcnRfaXRlciwgIlN0YXJ0IGl0ZXJhdGluZyBvdmVyIHRoZSBpbm9kZSB0YWJsZSIsCisJaXJlbF9zdGFydF9pdGVyLCBpc3RhcnQ7CisKK3JlcXVlc3QgZG9faXJlbF9uZXh0LCAiR2V0IHRoZSBuZXh0IGJsb2NrIHJlbG9jYXRpb24gZW50cnkiLAorCWlyZWxfbmV4dCwgaW5leHQ7CisKK3JlcXVlc3QgZG9faXJlbF9kdW1wLCAiRHVtcCB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsCisJaXJlbF9kdW1wLCBpZHVtcDsKKworcmVxdWVzdCBkb19pcmVsX2FkZF9yZWYsICJBZGQgYSByZWZlcmVuY2UgdG8gYW4gaW5vZGUgZW50cnkiLAorCWlyZWxfYWRkX3JlZiwgaWFkZHJlZiwgaWFkZHI7CisKK3JlcXVlc3QgZG9faXJlbF9zdGFydF9pdGVyX3JlZiwgIlN0YXJ0IGl0ZXJhdGluZyBvdmVyIHJlZmVyZW5jZXMgdG8gYW4gaW5vZGUiLAorCWlyZWxfc3RhcnRfaXRlcl9yZWYsIGlzdGFydHJlZiwgaXN0YXJ0cjsKKworcmVxdWVzdCBkb19pcmVsX25leHRfcmVmLCAiR2V0IHRoZSBuZXh0IHJlZmVyZW5jZSBmb3IgYW4gaW5vZGUgZW50cnkiLAorCWlyZWxfbmV4dF9yZWYsIGluZXh0cmVmLCBpbmV4dHI7CisKK3JlcXVlc3QgZG9faXJlbF9tb3ZlLCAiTW92ZSBhbiBlbnRyeSBpbiB0aGUgaW5vZGUgcmVsb2NhdGlvbiB0YWJsZSIsIAorCWlyZWxfbW92ZSwgaW1vdmU7CisKK3JlcXVlc3QgZG9faXJlbF9kZWxldGUsICJEZWxldGUgYW4gZW50cnkgaW4gdGhlIGlub2RlIHJlbG9jYXRpb24gdGFibGUiLAorCWlyZWxfZGVsZXRlLCBpZGVsZXRlLCBpZGVsOworCitlbmQ7CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl8xMDI0X3NtYWxsX2JnL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9yXzEwMjRfc21hbGxfYmcvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl8xMDI0X3NtYWxsX2JnL3NjcmlwdApAQCAtMCwwICsxLDI3IEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCit0ZXN0X2Rlc2NyaXB0aW9uPSJleHQyIDEwMjQgYmxvY2tzaXplIHdpdGggc21hbGwgYmxvY2sgZ3JvdXBzIgorRkVBVFVSRVM9Ii10IGV4dDIgLU8gXnJlc2l6ZV9pbm9kZSAtYiAxMDI0IC1nIDEwMjQiCitTSVpFXzE9NjRNCitTSVpFXzI9MkcKK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKKworCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworaWYgcmVzaXplX3Rlc3QKK3RoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IEZFQVRVUkVTIFNJWkVfMSBTSVpFXzIgTE9HIEUyRlNDSworCitlbHNlICNpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yXzY0Yml0X2JpZ19leHBhbmQvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL3JfNjRiaXRfYmlnX2V4cGFuZC9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMzZlOQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yXzY0Yml0X2JpZ19leHBhbmQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249InZlcnkgbGFyZ2UgZnMgZ3Jvd3RoIHVzaW5nIGV4dDQgdy82NGJpdCIKK0ZFQVRVUkVTPSItdCBleHQ0IC1PIDY0Yml0IgorU0laRV8xPTUxMk0KK1NJWkVfMj0yVAorTE9HPSR0ZXN0X25hbWUubG9nCitFMkZTQ0s9Li4vZTJmc2NrL2UyZnNjaworCisKKy4gJGNtZF9kaXIvc2NyaXB0cy9yZXNpemVfdGVzdAorCityZXNpemVfdGVzdAorUkM9JD8KK2lmIFsgJFJDIC1lcSAwIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxpZiBbICRSQyAtZXEgMTExIF07IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwl0b3VjaCAkdGVzdF9uYW1lLmZhaWxlZAorZmkKKwordW5zZXQgRkVBVFVSRVMgU0laRV8xIFNJWkVfMiBMT0cgRTJGU0NLCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3JfYmlnYWxsb2NfYmlnX2V4cGFuZC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvcl9iaWdhbGxvY19iaWdfZXhwYW5kL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmM4YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfYmlnYWxsb2NfYmlnX2V4cGFuZC9zY3JpcHQKQEAgLTAsMCArMSwzMSBAQAoraWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwordGVzdF9kZXNjcmlwdGlvbj0iZXh0NCB3aXRoIGJpZ2FsbG9jIgorRkVBVFVSRVM9Ii10IGV4dDQgLU8gYmlnYWxsb2MiCitTSVpFXzE9NTEyTQorU0laRV8yPTJUCitMT0c9JHRlc3RfbmFtZS5sb2cKK0UyRlNDSz0uLi9lMmZzY2svZTJmc2NrCitSRVNJWkUyRlNfT1BUUz0tZgorCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworcmVzaXplX3Rlc3QKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IEZFQVRVUkVTIFNJWkVfMSBTSVpFXzIgTE9HIEUyRlNDSworCitlbHNlICNpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX2V4dDRfYmlnX2V4cGFuZC9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvcl9leHQ0X2JpZ19leHBhbmQvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjhmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl9leHQ0X2JpZ19leHBhbmQvc2NyaXB0CkBAIC0wLDAgKzEsMzEgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249InZlcnkgbGFyZ2UgZnMgZ3Jvd3RoIHVzaW5nIGV4dDQiCitGRUFUVVJFUz0iLXQgZXh0NCIKK1NJWkVfMT01MTJNCitTSVpFXzI9MlQKK0xPRz0kdGVzdF9uYW1lLmxvZworRTJGU0NLPS4uL2UyZnNjay9lMmZzY2sKKworCisuICRjbWRfZGlyL3NjcmlwdHMvcmVzaXplX3Rlc3QKKworcmVzaXplX3Rlc3QKK1JDPSQ/CitpZiBbICRSQyAtZXEgMCBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2VsaWYgWyAkUkMgLWVxIDExMSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJdG91Y2ggJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IEZFQVRVUkVTIFNJWkVfMSBTSVpFXzIgTE9HIEUyRlNDSworCitlbHNlICNpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX2V4dDRfc21hbGxfYmcvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL3JfZXh0NF9zbWFsbF9iZy9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzY2JkOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yX2V4dDRfc21hbGxfYmcvc2NyaXB0CkBAIC0wLDAgKzEsMjcgQEAKK2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisKK3Rlc3RfZGVzY3JpcHRpb249ImV4dDQgMTAyNCBibG9ja3NpemUgd2l0aCBzbWFsbCBibG9jayBncm91cHMiCitGRUFUVVJFUz0iLXQgZXh0NCAtTyBecmVzaXplX2lub2RlIC1iIDEwMjQgLWcgNTEyIgorU0laRV8xPTY0TQorU0laRV8yPTJHCitMT0c9JHRlc3RfbmFtZS5sb2cKK0UyRlNDSz0uLi9lMmZzY2svZTJmc2NrCisKKworLiAkY21kX2Rpci9zY3JpcHRzL3Jlc2l6ZV90ZXN0CisKK2lmIHJlc2l6ZV90ZXN0Cit0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXRvdWNoICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBGRUFUVVJFUyBTSVpFXzEgU0laRV8yIExPRyBFMkZTQ0sKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpIAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl9pbmxpbmVfeGF0dHIvZXhwZWN0IGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTcxMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL2V4cGVjdApAQCAtMCwwICsxLDE2IEBACityZXNpemUyZnMgdGVzdAorZGVidWdmcyAtUiAnJ3N0YXQgZmlsZScnIHRlc3QuaW1nIDI+JjEgfCBncmVwICcnXklub2RlXHxpbiBpbm9kZSBib2R5XHxuYW1lID0gJycKK0lub2RlOiAxNTUwICAgVHlwZTogcmVndWxhciAgICBNb2RlOiAgMDY0NCAgIEZsYWdzOiAweDAKK0V4dGVuZGVkIGF0dHJpYnV0ZXMgc3RvcmVkIGluIGlub2RlIGJvZHk6IAorICBuYW1lID0gInByb3BlcnZhbHVlIiAoMTEpCitFeGl0IHN0YXR1cyBpcyAwCityZXNpemUyZnMgdGVzdC5pbWcgNU0KK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDUxMjAgKDFrKSBibG9ja3MuCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgNTEyMCBibG9ja3MgbG9uZy4KKworRXhpdCBzdGF0dXMgaXMgMAorZGVidWdmcyAtUiAnJ3N0YXQgZmlsZScnIHRlc3QuaW1nIDI+JjEgfCBncmVwICcnXklub2RlXHxpbiBpbm9kZSBib2R5XHxuYW1lID0gJycKK0lub2RlOiAxMiAgIFR5cGU6IHJlZ3VsYXIgICAgTW9kZTogIDA2NDQgICBGbGFnczogMHgwCitFeHRlbmRlZCBhdHRyaWJ1dGVzIHN0b3JlZCBpbiBpbm9kZSBib2R5OiAKKyAgbmFtZSA9ICJwcm9wZXJ2YWx1ZSIgKDExKQorRXhpdCBzdGF0dXMgaXMgMApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL2ltYWdlLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDI4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl9pbmxpbmVfeGF0dHIvaW1hZ2UuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvcl9pbmxpbmVfeGF0dHIvbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY1NGZiCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL25hbWUKQEAgLTAsMCArMSBAQAorc2hyaW5raW5nIGZpbGVzeXN0ZW0gd2l0aCBpbi1pbm9kZSBleHRlbmRlZCBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl9pbmxpbmVfeGF0dHIvc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODgyNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfaW5saW5lX3hhdHRyL3NjcmlwdApAQCAtMCwwICsxLDUzIEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitJTUFHRT0kdGVzdF9kaXIvaW1hZ2UuZ3oKK0ZTQ0tfT1BUPS15ZgorT1VUPSR0ZXN0X25hbWUubG9nCitFWFA9JHRlc3RfZGlyL2V4cGVjdAorCitndW56aXAgPCAkSU1BR0UgPiAkVE1QRklMRQorCitlY2hvICJyZXNpemUyZnMgdGVzdCIgPiAkT1VUCisKKyMgTG9vayBhdCBleGlzdGluZyBpbmxpbmUgZXh0ZW5kZWQgYXR0cmlidXRlCitlY2hvICJkZWJ1Z2ZzIC1SICcnc3RhdCBmaWxlJycgdGVzdC5pbWcgMj4mMSB8IGdyZXAgJydeSW5vZGVcfGluIGlub2RlIGJvZHlcfG5hbWUgPSAnJyIgPj4gJE9VVAorJERFQlVHRlMgLVIgInN0YXQgZmlsZSIgJFRNUEZJTEUgMj4mMSB8IGdyZXAgIl5Jbm9kZVx8aW4gaW5vZGUgYm9keVx8bmFtZSA9ICIgPj4gJE9VVAorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCisjIHJlc2l6ZSBpdAorZWNobyAicmVzaXplMmZzIHRlc3QuaW1nIDVNIiA+PiAkT1VUCiskUkVTSVpFMkZTICRUTVBGSUxFIDVNIDI+JjEgPj4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorCisjIExvb2sgYXQgaW5saW5lIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiByZXNpemVkIGZzCitlY2hvICJkZWJ1Z2ZzIC1SICcnc3RhdCBmaWxlJycgdGVzdC5pbWcgMj4mMSB8IGdyZXAgJydeSW5vZGVcfGluIGlub2RlIGJvZHlcfG5hbWUgPSAnJyIgPj4gJE9VVAorJERFQlVHRlMgLVIgInN0YXQgZmlsZSIgJFRNUEZJTEUgMj4mMSB8IGdyZXAgIl5Jbm9kZVx8aW4gaW5vZGUgYm9keVx8bmFtZSA9ICIgPj4gJE9VVAorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVAorCitybSAkVE1QRklMRSAkT1VULm5ldworCisjCisjIERvIHRoZSB2ZXJpZmljYXRpb24KKyMKKworY21wIC1zICRPVVQgJEVYUAorc3RhdHVzPSQ/CisKK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlkaWZmICRESUZGX09QVFMgJEVYUCAkT1VUID4gJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK3Vuc2V0IElNQUdFIEZTQ0tfT1BUIE9VVCBFWFAKKworZWxzZSAjaWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCIKK2ZpCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX21pbl9pdGFibGUvZXhwZWN0IGIvZTJmc3Byb2dzL3Rlc3RzL3JfbWluX2l0YWJsZS9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4ZWNiNAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yX21pbl9pdGFibGUvZXhwZWN0CkBAIC0wLDAgKzEsMTUgQEAKK3Jlc2l6ZTJmcyB0ZXN0CityZXNpemUyZnMgLU0gdGVzdC5pbWcKK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDExMjQgKDFrKSBibG9ja3MuCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgMTEyNCBibG9ja3MgbG9uZy4KKworRXhpdCBzdGF0dXMgaXMgMAorIAorZnNjayAteWYgLU4gdGVzdF9maWxlc3lzIHRlc3QuaW1nCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMy81MTIgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMTIwLzExMjQgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl9taW5faXRhYmxlL2ltYWdlLmd6IGIvZTJmc3Byb2dzL3Rlc3RzL3JfbWluX2l0YWJsZS9pbWFnZS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQwYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfbWluX2l0YWJsZS9pbWFnZS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl9taW5faXRhYmxlL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvcl9taW5faXRhYmxlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxYjA0MwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yX21pbl9pdGFibGUvbmFtZQpAQCAtMCwwICsxIEBACityZXNpemUyZnMgLU0gd2l0aCBpbm9kZSB0YWJsZSBpbiBtaWRkbGUgb2YgbGFzdCBibG9jayBncm91cApkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3JfbWluX2l0YWJsZS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvcl9taW5faXRhYmxlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI2Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfbWluX2l0YWJsZS9zY3JpcHQKQEAgLTAsMCArMSw0NSBAQAoraWYgdGVzdCAteCAkUkVTSVpFMkZTX0VYRSAtYSAteCAkREVCVUdGU19FWEU7IHRoZW4KKworSU1BR0U9JHRlc3RfZGlyL2ltYWdlLmd6CitGU0NLX09QVD0teWYKK09VVD0kdGVzdF9uYW1lLmxvZworRVhQPSR0ZXN0X2Rpci9leHBlY3QKKworZ3VuemlwIDwgJElNQUdFID4gJFRNUEZJTEUKKworZWNobyAicmVzaXplMmZzIHRlc3QiID4gJE9VVAorCitlY2hvICJyZXNpemUyZnMgLU0gdGVzdC5pbWciID4+ICRPVVQKKyRSRVNJWkUyRlMgLU0gJFRNUEZJTEUgMj4mMSA+PiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworCitlY2hvICIgIiA+PiAkT1VULm5ldworZWNobyBmc2NrICRGU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgdGVzdC5pbWcgPj4gJE9VVC5uZXcKKyRGU0NLICRGU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPj4gJE9VVC5uZXcgMj4mMQorZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CisKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorcm0gJFRNUEZJTEUgJE9VVC5uZXcKKworIworIyBEbyB0aGUgdmVyaWZpY2F0aW9uCisjCisKK2NtcCAtcyAkT1VUICRFWFAKK3N0YXR1cz0kPworCitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJZGlmZiAkRElGRl9PUFRTICRFWFAgJE9VVCA+ICR0ZXN0X25hbWUuZmFpbGVkCitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcl9tb3ZlX2l0YWJsZS9leHBlY3QgYi9lMmZzcHJvZ3MvdGVzdHMvcl9tb3ZlX2l0YWJsZS9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiMDg5YgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yX21vdmVfaXRhYmxlL2V4cGVjdApAQCAtMCwwICsxLDI2MTIgQEAKK21rZTJmcyAtcSAtRiAtbyBMaW51eCAtYiAxMDI0IC1nIDI1NiB0ZXN0LmltZyAxMDI0CityZXNpemUyZnMgLXAgdGVzdC5pbWcgMTAwMDAKK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDEwMDAwICgxaykgYmxvY2tzLgorQmVnaW4gcGFzcyAxIChtYXggPSAzNSkKK0V4dGVuZGluZyB0aGUgaW5vZGUgdGFibGUgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDk5ODUgYmxvY2tzIGxvbmcuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzEyNDggZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxMjgxLzk5ODUgYmxvY2tzCitFeGl0IHN0YXR1cyBpcyAwCitkdW1wZTJmcyB0ZXN0LmltZworRmlsZXN5c3RlbSB2b2x1bWUgbmFtZTogICA8bm9uZT4KK0xhc3QgbW91bnRlZCBvbjogICAgICAgICAgPG5vdCBhdmFpbGFibGU+CitGaWxlc3lzdGVtIG1hZ2ljIG51bWJlcjogIDB4RUY1MworRmlsZXN5c3RlbSByZXZpc2lvbiAjOiAgICAxIChkeW5hbWljKQorRmlsZXN5c3RlbSBmZWF0dXJlczogICAgICBleHRfYXR0ciByZXNpemVfaW5vZGUgZGlyX2luZGV4IGZpbGV0eXBlIHNwYXJzZV9zdXBlcgorRGVmYXVsdCBtb3VudCBvcHRpb25zOiAgICAobm9uZSkKK0ZpbGVzeXN0ZW0gc3RhdGU6ICAgICAgICAgY2xlYW4KK0Vycm9ycyBiZWhhdmlvcjogICAgICAgICAgQ29udGludWUKK0ZpbGVzeXN0ZW0gT1MgdHlwZTogICAgICAgTGludXgKK0lub2RlIGNvdW50OiAgICAgICAgICAgICAgMTI0OAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA5OTg1CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDQ5NworRnJlZSBibG9ja3M6ICAgICAgICAgICAgICA4NzA0CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDEyMzcKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMTI2CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDI1NgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAyNTYKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMzIKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgNAorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTI1NikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQtMTI5CisgIEJsb2NrIGJpdG1hcCBhdCAxMzAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMzItMTM1ICgrMTMxKQorICAxMDcgZnJlZSBibG9ja3MsIDIxIGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTAtMjU2CisgIEZyZWUgaW5vZGVzOiAxMi0zMgorR3JvdXAgMTogKEJsb2NrcyAyNTctNTEyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1OC0yNTkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNjAtMzg1CisgIEJsb2NrIGJpdG1hcCBhdCAzODYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMzg3ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAzODgtMzkxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTItNTEyCisgIEZyZWUgaW5vZGVzOiAzMy02NAorR3JvdXAgMjogKEJsb2NrcyA1MTMtNzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTUtNTE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTE5LTc2OAorICBGcmVlIGlub2RlczogNjUtOTYKK0dyb3VwIDM6IChCbG9ja3MgNzY5LTEwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDc2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzcwLTc3MQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDc3Mi04OTcKKyAgQmxvY2sgYml0bWFwIGF0IDg5OCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA4OTkgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDkwMC05MDMgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwNC0xMDI0CisgIEZyZWUgaW5vZGVzOiA5Ny0xMjgKK0dyb3VwIDQ6IChCbG9ja3MgMTAyNS0xMjgwKQorICBCbG9jayBiaXRtYXAgYXQgMTAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjctMTAzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMzEtMTI4MAorICBGcmVlIGlub2RlczogMTI5LTE2MAorR3JvdXAgNTogKEJsb2NrcyAxMjgxLTE1MzYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODItMTI4MworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEyODQtMTQwOQorICBCbG9jayBiaXRtYXAgYXQgMTQxMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxNDExICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxNDEyLTE0MTUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MTYtMTUzNgorICBGcmVlIGlub2RlczogMTYxLTE5MgorR3JvdXAgNjogKEJsb2NrcyAxNTM3LTE3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzOS0xNTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU0My0xNzkyCisgIEZyZWUgaW5vZGVzOiAxOTMtMjI0CitHcm91cCA3OiAoQmxvY2tzIDE3OTMtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTc5MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTc5NC0xNzk1CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTc5Ni0xOTIxCisgIEJsb2NrIGJpdG1hcCBhdCAxOTIyICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDE5MjMgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDE5MjQtMTkyNyAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTkyOC0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyMjUtMjU2CitHcm91cCA4OiAoQmxvY2tzIDIwNDktMjMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwNTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDU1LTIzMDQKKyAgRnJlZSBpbm9kZXM6IDI1Ny0yODgKK0dyb3VwIDk6IChCbG9ja3MgMjMwNS0yNTYwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMzA1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyMzA2LTIzMDcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMzA4LTI0MzMKKyAgQmxvY2sgYml0bWFwIGF0IDI0MzQgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjQzNSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMjQzNi0yNDM5ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDQwLTI1NjAKKyAgRnJlZSBpbm9kZXM6IDI4OS0zMjAKK0dyb3VwIDEwOiAoQmxvY2tzIDI1NjEtMjgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYzLTI1NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTY3LTI4MTYKKyAgRnJlZSBpbm9kZXM6IDMyMS0zNTIKK0dyb3VwIDExOiAoQmxvY2tzIDI4MTctMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODE5LTI4MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODIzLTMwNzIKKyAgRnJlZSBpbm9kZXM6IDM1My0zODQKK0dyb3VwIDEyOiAoQmxvY2tzIDMwNzMtMzMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDc1LTMwNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDc5LTMzMjgKKyAgRnJlZSBpbm9kZXM6IDM4NS00MTYKK0dyb3VwIDEzOiAoQmxvY2tzIDMzMjktMzU4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMzMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzMxLTMzMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzM1LTM1ODQKKyAgRnJlZSBpbm9kZXM6IDQxNy00NDgKK0dyb3VwIDE0OiAoQmxvY2tzIDM1ODUtMzg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg3LTM1OTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTkxLTM4NDAKKyAgRnJlZSBpbm9kZXM6IDQ0OS00ODAKK0dyb3VwIDE1OiAoQmxvY2tzIDM4NDEtNDA5NikKKyAgQmxvY2sgYml0bWFwIGF0IDM4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODQzLTM4NDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODQ3LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDQ4MS01MTIKK0dyb3VwIDE2OiAoQmxvY2tzIDQwOTctNDM1MikKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTAzLTQzNTIKKyAgRnJlZSBpbm9kZXM6IDUxMy01NDQKK0dyb3VwIDE3OiAoQmxvY2tzIDQzNTMtNDYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQzNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MzU1LTQzNTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzU5LTQ2MDgKKyAgRnJlZSBpbm9kZXM6IDU0NS01NzYKK0dyb3VwIDE4OiAoQmxvY2tzIDQ2MDktNDg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NjExLTQ2MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjE1LTQ4NjQKKyAgRnJlZSBpbm9kZXM6IDU3Ny02MDgKK0dyb3VwIDE5OiAoQmxvY2tzIDQ4NjUtNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODY3LTQ4NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODcxLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDYwOS02NDAKK0dyb3VwIDIwOiAoQmxvY2tzIDUxMjEtNTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDUxMjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIzLTUxMjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTI3LTUzNzYKKyAgRnJlZSBpbm9kZXM6IDY0MS02NzIKK0dyb3VwIDIxOiAoQmxvY2tzIDUzNzctNTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDUzNzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1Mzc5LTUzODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzgzLTU2MzIKKyAgRnJlZSBpbm9kZXM6IDY3My03MDQKK0dyb3VwIDIyOiAoQmxvY2tzIDU2MzMtNTg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjM1LTU2MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjM5LTU4ODgKKyAgRnJlZSBpbm9kZXM6IDcwNS03MzYKK0dyb3VwIDIzOiAoQmxvY2tzIDU4ODktNjE0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1ODkxLTU4OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1ODk1LTYxNDQKKyAgRnJlZSBpbm9kZXM6IDczNy03NjgKK0dyb3VwIDI0OiAoQmxvY2tzIDYxNDUtNjQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTUxLTY0MDAKKyAgRnJlZSBpbm9kZXM6IDc2OS04MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDY0MDEtNjY1NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNjQwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNjQwMi02NDAzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNjQwNC02NTI5CisgIEJsb2NrIGJpdG1hcCBhdCA2NTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDY1MzEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDY1MzItNjUzNSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjUzNi02NjU2CisgIEZyZWUgaW5vZGVzOiA4MDEtODMyCitHcm91cCAyNjogKEJsb2NrcyA2NjU3LTY5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjY1OS02NjYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjY2My02OTEyCisgIEZyZWUgaW5vZGVzOiA4MzMtODY0CitHcm91cCAyNzogKEJsb2NrcyA2OTEzLTcxNjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY5MTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY5MTQtNjkxNQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY5MTYtNzA0MQorICBCbG9jayBiaXRtYXAgYXQgNzA0MiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA3MDQzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA3MDQ0LTcwNDcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcwNDgtNzE2OAorICBGcmVlIGlub2RlczogODY1LTg5NgorR3JvdXAgMjg6IChCbG9ja3MgNzE2OS03NDI0KQorICBCbG9jayBiaXRtYXAgYXQgNzE2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzE3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNzEtNzE3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzUtNzQyNAorICBGcmVlIGlub2RlczogODk3LTkyOAorR3JvdXAgMjk6IChCbG9ja3MgNzQyNS03NjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzQyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0MjctNzQzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0MzEtNzY4MAorICBGcmVlIGlub2RlczogOTI5LTk2MAorR3JvdXAgMzA6IChCbG9ja3MgNzY4MS03OTM2KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc2ODMtNzY4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc2ODctNzkzNgorICBGcmVlIGlub2RlczogOTYxLTk5MgorR3JvdXAgMzE6IChCbG9ja3MgNzkzNy04MTkyKQorICBCbG9jayBiaXRtYXAgYXQgNzkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc5MzktNzk0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc5NDMtODE5MgorICBGcmVlIGlub2RlczogOTkzLTEwMjQKK0dyb3VwIDMyOiAoQmxvY2tzIDgxOTMtODQ0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgxOTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk5LTg0NDgKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTA1NgorR3JvdXAgMzM6IChCbG9ja3MgODQ0OS04NzA0KQorICBCbG9jayBiaXRtYXAgYXQgODQ0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg0NTEtODQ1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0NTUtODcwNAorICBGcmVlIGlub2RlczogMTA1Ny0xMDg4CitHcm91cCAzNDogKEJsb2NrcyA4NzA1LTg5NjApCisgIEJsb2NrIGJpdG1hcCBhdCA4NzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODcwNy04NzEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODcxMS04OTYwCisgIEZyZWUgaW5vZGVzOiAxMDg5LTExMjAKK0dyb3VwIDM1OiAoQmxvY2tzIDg5NjEtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDg5NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4OTYzLTg5NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4OTY3LTkyMTYKKyAgRnJlZSBpbm9kZXM6IDExMjEtMTE1MgorR3JvdXAgMzY6IChCbG9ja3MgOTIxNy05NDcyKQorICBCbG9jayBiaXRtYXAgYXQgOTIxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTIxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkyMTktOTIyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkyMjMtOTQ3MgorICBGcmVlIGlub2RlczogMTE1My0xMTg0CitHcm91cCAzNzogKEJsb2NrcyA5NDczLTk3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDczICgrMCksIElub2RlIGJpdG1hcCBhdCA5NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTQ3NS05NDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQ3OS05NzI4CisgIEZyZWUgaW5vZGVzOiAxMTg1LTEyMTYKK0dyb3VwIDM4OiAoQmxvY2tzIDk3MjktOTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDk3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk3MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NzMxLTk3MzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzM1LTk5ODQKKyAgRnJlZSBpbm9kZXM6IDEyMTctMTI0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Jlc2l6ZTJmcyAtcCB0ZXN0LmltZyAyMDAwMAorUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgdG8gMjAwMDAgKDFrKSBibG9ja3MuCitCZWdpbiBwYXNzIDEgKG1heCA9IDM5KQorRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgMTk5NjkgYmxvY2tzIGxvbmcuCisKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzI0OTYgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAxNjQ0LzE5OTY5IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorZHVtcGUyZnMgdGVzdC5pbWcKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDI0OTYKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMTk5NjkKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgOTkzCitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDE4MzI1CitGcmVlIGlub2RlczogICAgICAgICAgICAgIDI0ODUKK0ZpcnN0IGJsb2NrOiAgICAgICAgICAgICAgMQorQmxvY2sgc2l6ZTogICAgICAgICAgICAgICAxMDI0CitGcmFnbWVudCBzaXplOiAgICAgICAgICAgIDEwMjQKK1Jlc2VydmVkIEdEVCBibG9ja3M6ICAgICAgMTI1CitCbG9ja3MgcGVyIGdyb3VwOiAgICAgICAgIDI1NgorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAyNTYKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMzIKK0lub2RlIGJsb2NrcyBwZXIgZ3JvdXA6ICAgNAorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTI1NikKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItNAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUtMTI5CisgIEJsb2NrIGJpdG1hcCBhdCAxMzAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMzItMTM1ICgrMTMxKQorICAxMDcgZnJlZSBibG9ja3MsIDIxIGZyZWUgaW5vZGVzLCAyIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTAtMjU2CisgIEZyZWUgaW5vZGVzOiAxMi0zMgorR3JvdXAgMTogKEJsb2NrcyAyNTctNTEyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyNTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1OC0yNjAKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyNjEtMzg1CisgIEJsb2NrIGJpdG1hcCBhdCAzODYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMzg3ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAzODgtMzkxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTItNTEyCisgIEZyZWUgaW5vZGVzOiAzMy02NAorR3JvdXAgMjogKEJsb2NrcyA1MTMtNzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTUtNTE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTE5LTc2OAorICBGcmVlIGlub2RlczogNjUtOTYKK0dyb3VwIDM6IChCbG9ja3MgNzY5LTEwMjQpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDc2OSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNzcwLTc3MgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDc3My04OTcKKyAgQmxvY2sgYml0bWFwIGF0IDg5OCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA4OTkgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDkwMC05MDMgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkwNC0xMDI0CisgIEZyZWUgaW5vZGVzOiA5Ny0xMjgKK0dyb3VwIDQ6IChCbG9ja3MgMTAyNS0xMjgwKQorICBCbG9jayBiaXRtYXAgYXQgMTAyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjctMTAzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMzEtMTI4MAorICBGcmVlIGlub2RlczogMTI5LTE2MAorR3JvdXAgNTogKEJsb2NrcyAxMjgxLTE1MzYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEyODEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODItMTI4NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEyODUtMTQwOQorICBCbG9jayBiaXRtYXAgYXQgMTQxMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxNDExICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxNDEyLTE0MTUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MTYtMTUzNgorICBGcmVlIGlub2RlczogMTYxLTE5MgorR3JvdXAgNjogKEJsb2NrcyAxNTM3LTE3OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzOS0xNTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU0My0xNzkyCisgIEZyZWUgaW5vZGVzOiAxOTMtMjI0CitHcm91cCA3OiAoQmxvY2tzIDE3OTMtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTc5MywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTc5NC0xNzk2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTc5Ny0xOTIxCisgIEJsb2NrIGJpdG1hcCBhdCAxOTIyICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDE5MjMgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDE5MjQtMTkyNyAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTkyOC0yMDQ4CisgIEZyZWUgaW5vZGVzOiAyMjUtMjU2CitHcm91cCA4OiAoQmxvY2tzIDIwNDktMjMwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwNDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDUxLTIwNTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDU1LTIzMDQKKyAgRnJlZSBpbm9kZXM6IDI1Ny0yODgKK0dyb3VwIDk6IChCbG9ja3MgMjMwNS0yNTYwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMzA1LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyMzA2LTIzMDgKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMzA5LTI0MzMKKyAgQmxvY2sgYml0bWFwIGF0IDI0MzQgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjQzNSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMjQzNi0yNDM5ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDQwLTI1NjAKKyAgRnJlZSBpbm9kZXM6IDI4OS0zMjAKK0dyb3VwIDEwOiAoQmxvY2tzIDI1NjEtMjgxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYzLTI1NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTY3LTI4MTYKKyAgRnJlZSBpbm9kZXM6IDMyMS0zNTIKK0dyb3VwIDExOiAoQmxvY2tzIDI4MTctMzA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODE5LTI4MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODIzLTMwNzIKKyAgRnJlZSBpbm9kZXM6IDM1My0zODQKK0dyb3VwIDEyOiAoQmxvY2tzIDMwNzMtMzMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDc1LTMwNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDc5LTMzMjgKKyAgRnJlZSBpbm9kZXM6IDM4NS00MTYKK0dyb3VwIDEzOiAoQmxvY2tzIDMzMjktMzU4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDMzMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzMxLTMzMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzM1LTM1ODQKKyAgRnJlZSBpbm9kZXM6IDQxNy00NDgKK0dyb3VwIDE0OiAoQmxvY2tzIDM1ODUtMzg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTg3LTM1OTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTkxLTM4NDAKKyAgRnJlZSBpbm9kZXM6IDQ0OS00ODAKK0dyb3VwIDE1OiAoQmxvY2tzIDM4NDEtNDA5NikKKyAgQmxvY2sgYml0bWFwIGF0IDM4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODQzLTM4NDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODQ3LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDQ4MS01MTIKK0dyb3VwIDE2OiAoQmxvY2tzIDQwOTctNDM1MikKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MTAzLTQzNTIKKyAgRnJlZSBpbm9kZXM6IDUxMy01NDQKK0dyb3VwIDE3OiAoQmxvY2tzIDQzNTMtNDYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDQzNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MzU1LTQzNTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MzU5LTQ2MDgKKyAgRnJlZSBpbm9kZXM6IDU0NS01NzYKK0dyb3VwIDE4OiAoQmxvY2tzIDQ2MDktNDg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ2MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NjExLTQ2MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NjE1LTQ4NjQKKyAgRnJlZSBpbm9kZXM6IDU3Ny02MDgKK0dyb3VwIDE5OiAoQmxvY2tzIDQ4NjUtNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0ODY3LTQ4NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0ODcxLTUxMjAKKyAgRnJlZSBpbm9kZXM6IDYwOS02NDAKK0dyb3VwIDIwOiAoQmxvY2tzIDUxMjEtNTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDUxMjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MTIzLTUxMjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MTI3LTUzNzYKKyAgRnJlZSBpbm9kZXM6IDY0MS02NzIKK0dyb3VwIDIxOiAoQmxvY2tzIDUzNzctNTYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDUzNzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUzNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1Mzc5LTUzODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzgzLTU2MzIKKyAgRnJlZSBpbm9kZXM6IDY3My03MDQKK0dyb3VwIDIyOiAoQmxvY2tzIDU2MzMtNTg4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDU2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU2MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjM1LTU2MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjM5LTU4ODgKKyAgRnJlZSBpbm9kZXM6IDcwNS03MzYKK0dyb3VwIDIzOiAoQmxvY2tzIDU4ODktNjE0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDU4ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1ODkxLTU4OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1ODk1LTYxNDQKKyAgRnJlZSBpbm9kZXM6IDczNy03NjgKK0dyb3VwIDI0OiAoQmxvY2tzIDYxNDUtNjQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTUxLTY0MDAKKyAgRnJlZSBpbm9kZXM6IDc2OS04MDAKK0dyb3VwIDI1OiAoQmxvY2tzIDY0MDEtNjY1NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNjQwMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNjQwMi02NDA0CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNjQwNS02NTI5CisgIEJsb2NrIGJpdG1hcCBhdCA2NTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDY1MzEgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDY1MzItNjUzNSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjUzNi02NjU2CisgIEZyZWUgaW5vZGVzOiA4MDEtODMyCitHcm91cCAyNjogKEJsb2NrcyA2NjU3LTY5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCA2NjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjY1OS02NjYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjY2My02OTEyCisgIEZyZWUgaW5vZGVzOiA4MzMtODY0CitHcm91cCAyNzogKEJsb2NrcyA2OTEzLTcxNjgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY5MTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY5MTQtNjkxNgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY5MTctNzA0MQorICBCbG9jayBiaXRtYXAgYXQgNzA0MiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA3MDQzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA3MDQ0LTcwNDcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcwNDgtNzE2OAorICBGcmVlIGlub2RlczogODY1LTg5NgorR3JvdXAgMjg6IChCbG9ja3MgNzE2OS03NDI0KQorICBCbG9jayBiaXRtYXAgYXQgNzE2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzE3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcxNzEtNzE3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcxNzUtNzQyNAorICBGcmVlIGlub2RlczogODk3LTkyOAorR3JvdXAgMjk6IChCbG9ja3MgNzQyNS03NjgwKQorICBCbG9jayBiaXRtYXAgYXQgNzQyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzQyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc0MjctNzQzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc0MzEtNzY4MAorICBGcmVlIGlub2RlczogOTI5LTk2MAorR3JvdXAgMzA6IChCbG9ja3MgNzY4MS03OTM2KQorICBCbG9jayBiaXRtYXAgYXQgNzY4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc2ODMtNzY4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc2ODctNzkzNgorICBGcmVlIGlub2RlczogOTYxLTk5MgorR3JvdXAgMzE6IChCbG9ja3MgNzkzNy04MTkyKQorICBCbG9jayBiaXRtYXAgYXQgNzkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzkzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc5MzktNzk0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc5NDMtODE5MgorICBGcmVlIGlub2RlczogOTkzLTEwMjQKK0dyb3VwIDMyOiAoQmxvY2tzIDgxOTMtODQ0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDgxOTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MTk1LTgxOTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MTk5LTg0NDgKKyAgRnJlZSBpbm9kZXM6IDEwMjUtMTA1NgorR3JvdXAgMzM6IChCbG9ja3MgODQ0OS04NzA0KQorICBCbG9jayBiaXRtYXAgYXQgODQ0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODQ1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg0NTEtODQ1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg0NTUtODcwNAorICBGcmVlIGlub2RlczogMTA1Ny0xMDg4CitHcm91cCAzNDogKEJsb2NrcyA4NzA1LTg5NjApCisgIEJsb2NrIGJpdG1hcCBhdCA4NzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODcwNy04NzEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODcxMS04OTYwCisgIEZyZWUgaW5vZGVzOiAxMDg5LTExMjAKK0dyb3VwIDM1OiAoQmxvY2tzIDg5NjEtOTIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDg5NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4OTYzLTg5NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4OTY3LTkyMTYKKyAgRnJlZSBpbm9kZXM6IDExMjEtMTE1MgorR3JvdXAgMzY6IChCbG9ja3MgOTIxNy05NDcyKQorICBCbG9jayBiaXRtYXAgYXQgOTIxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTIxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkyMTktOTIyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkyMjMtOTQ3MgorICBGcmVlIGlub2RlczogMTE1My0xMTg0CitHcm91cCAzNzogKEJsb2NrcyA5NDczLTk3MjgpCisgIEJsb2NrIGJpdG1hcCBhdCA5NDczICgrMCksIElub2RlIGJpdG1hcCBhdCA5NDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTQ3NS05NDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQ3OS05NzI4CisgIEZyZWUgaW5vZGVzOiAxMTg1LTEyMTYKK0dyb3VwIDM4OiAoQmxvY2tzIDk3MjktOTk4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDk3MjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk3MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NzMxLTk3MzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NzM1LTk5ODQKKyAgRnJlZSBpbm9kZXM6IDEyMTctMTI0OAorR3JvdXAgMzk6IChCbG9ja3MgOTk4NS0xMDI0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDk5ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk5ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5OTg3LTk5OTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5OTkxLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAxMjQ5LTEyODAKK0dyb3VwIDQwOiAoQmxvY2tzIDEwMjQxLTEwNDk2KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDI0Ny0xMDQ5NgorICBGcmVlIGlub2RlczogMTI4MS0xMzEyCitHcm91cCA0MTogKEJsb2NrcyAxMDQ5Ny0xMDc1MikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDQ5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNDk5LTEwNTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1MDMtMTA3NTIKKyAgRnJlZSBpbm9kZXM6IDEzMTMtMTM0NAorR3JvdXAgNDI6IChCbG9ja3MgMTA3NTMtMTEwMDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDc1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA3NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDc1NS0xMDc1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNzU5LTExMDA4CisgIEZyZWUgaW5vZGVzOiAxMzQ1LTEzNzYKK0dyb3VwIDQzOiAoQmxvY2tzIDExMDA5LTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEwMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwMTEtMTEwMTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTAxNS0xMTI2NAorICBGcmVlIGlub2RlczogMTM3Ny0xNDA4CitHcm91cCA0NDogKEJsb2NrcyAxMTI2NS0xMTUyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMjY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMjY3LTExMjcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyNzEtMTE1MjAKKyAgRnJlZSBpbm9kZXM6IDE0MDktMTQ0MAorR3JvdXAgNDU6IChCbG9ja3MgMTE1MjEtMTE3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTUyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE1MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTUyMy0xMTUyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNTI3LTExNzc2CisgIEZyZWUgaW5vZGVzOiAxNDQxLTE0NzIKK0dyb3VwIDQ2OiAoQmxvY2tzIDExNzc3LTEyMDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTE3NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE3NzktMTE3ODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTc4My0xMjAzMgorICBGcmVlIGlub2RlczogMTQ3My0xNTA0CitHcm91cCA0NzogKEJsb2NrcyAxMjAzMy0xMjI4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMDMzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjAzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMDM1LTEyMDM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIwMzktMTIyODgKKyAgRnJlZSBpbm9kZXM6IDE1MDUtMTUzNgorR3JvdXAgNDg6IChCbG9ja3MgMTIyODktMTI1NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjI4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI5MS0xMjI5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMjk1LTEyNTQ0CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE1NjgKK0dyb3VwIDQ5OiAoQmxvY2tzIDEyNTQ1LTEyODAwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjU0NSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTI1NDYtMTI1NDgKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjU0OS0xMjY3MworICBCbG9jayBiaXRtYXAgYXQgMTI2NzQgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTI2NzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDEyNjc2LTEyNjc5ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjY4MC0xMjgwMAorICBGcmVlIGlub2RlczogMTU2OS0xNjAwCitHcm91cCA1MDogKEJsb2NrcyAxMjgwMS0xMzA1NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyODAxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjgwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyODAzLTEyODA2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI4MDctMTMwNTYKKyAgRnJlZSBpbm9kZXM6IDE2MDEtMTYzMgorR3JvdXAgNTE6IChCbG9ja3MgMTMwNTctMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzA1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMwNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzA1OS0xMzA2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMDYzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAxNjMzLTE2NjQKK0dyb3VwIDUyOiAoQmxvY2tzIDEzMzEzLTEzNTY4KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzMTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzMxOS0xMzU2OAorICBGcmVlIGlub2RlczogMTY2NS0xNjk2CitHcm91cCA1MzogKEJsb2NrcyAxMzU2OS0xMzgyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzNTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzU3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzNTcxLTEzNTc0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM1NzUtMTM4MjQKKyAgRnJlZSBpbm9kZXM6IDE2OTctMTcyOAorR3JvdXAgNTQ6IChCbG9ja3MgMTM4MjUtMTQwODApCisgIEJsb2NrIGJpdG1hcCBhdCAxMzgyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM4MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzgyNy0xMzgzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzODMxLTE0MDgwCisgIEZyZWUgaW5vZGVzOiAxNzI5LTE3NjAKK0dyb3VwIDU1OiAoQmxvY2tzIDE0MDgxLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTQwODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQwODMtMTQwODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDA4Ny0xNDMzNgorICBGcmVlIGlub2RlczogMTc2MS0xNzkyCitHcm91cCA1NjogKEJsb2NrcyAxNDMzNy0xNDU5MikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MzM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDMzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MzM5LTE0MzQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzNDMtMTQ1OTIKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMTgyNAorR3JvdXAgNTc6IChCbG9ja3MgMTQ1OTMtMTQ4NDgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDU5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ1OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDU5NS0xNDU5OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0NTk5LTE0ODQ4CisgIEZyZWUgaW5vZGVzOiAxODI1LTE4NTYKK0dyb3VwIDU4OiAoQmxvY2tzIDE0ODQ5LTE1MTA0KQorICBCbG9jayBiaXRtYXAgYXQgMTQ4NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0ODUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ4NTEtMTQ4NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDg1NS0xNTEwNAorICBGcmVlIGlub2RlczogMTg1Ny0xODg4CitHcm91cCA1OTogKEJsb2NrcyAxNTEwNS0xNTM2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1MTA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTEwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MTA3LTE1MTEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUxMTEtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDE4ODktMTkyMAorR3JvdXAgNjA6IChCbG9ja3MgMTUzNjEtMTU2MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzNjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM2My0xNTM2NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzY3LTE1NjE2CisgIEZyZWUgaW5vZGVzOiAxOTIxLTE5NTIKK0dyb3VwIDYxOiAoQmxvY2tzIDE1NjE3LTE1ODcyKQorICBCbG9jayBiaXRtYXAgYXQgMTU2MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1NjE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU2MTktMTU2MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTYyMy0xNTg3MgorICBGcmVlIGlub2RlczogMTk1My0xOTg0CitHcm91cCA2MjogKEJsb2NrcyAxNTg3My0xNjEyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1ODczICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTg3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1ODc1LTE1ODc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU4NzktMTYxMjgKKyAgRnJlZSBpbm9kZXM6IDE5ODUtMjAxNgorR3JvdXAgNjM6IChCbG9ja3MgMTYxMjktMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjEyOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYxMzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjEzMS0xNjEzNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2MTM1LTE2Mzg0CisgIEZyZWUgaW5vZGVzOiAyMDE3LTIwNDgKK0dyb3VwIDY0OiAoQmxvY2tzIDE2Mzg1LTE2NjQwKQorICBCbG9jayBiaXRtYXAgYXQgMTYzODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2Mzg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODctMTYzOTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjM5MS0xNjY0MAorICBGcmVlIGlub2RlczogMjA0OS0yMDgwCitHcm91cCA2NTogKEJsb2NrcyAxNjY0MS0xNjg5NikKKyAgQmxvY2sgYml0bWFwIGF0IDE2NjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjY0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2NjQzLTE2NjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY2NDctMTY4OTYKKyAgRnJlZSBpbm9kZXM6IDIwODEtMjExMgorR3JvdXAgNjY6IChCbG9ja3MgMTY4OTctMTcxNTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjg5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY4OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjg5OS0xNjkwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2OTAzLTE3MTUyCisgIEZyZWUgaW5vZGVzOiAyMTEzLTIxNDQKK0dyb3VwIDY3OiAoQmxvY2tzIDE3MTUzLTE3NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTcxNTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3MTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTcxNTUtMTcxNTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzE1OS0xNzQwOAorICBGcmVlIGlub2RlczogMjE0NS0yMTc2CitHcm91cCA2ODogKEJsb2NrcyAxNzQwOS0xNzY2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3NDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzQxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3NDExLTE3NDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc0MTUtMTc2NjQKKyAgRnJlZSBpbm9kZXM6IDIxNzctMjIwOAorR3JvdXAgNjk6IChCbG9ja3MgMTc2NjUtMTc5MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNzY2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc2NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzY2Ny0xNzY3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NjcxLTE3OTIwCisgIEZyZWUgaW5vZGVzOiAyMjA5LTIyNDAKK0dyb3VwIDcwOiAoQmxvY2tzIDE3OTIxLTE4MTc2KQorICBCbG9jayBiaXRtYXAgYXQgMTc5MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3OTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc5MjMtMTc5MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzkyNy0xODE3NgorICBGcmVlIGlub2RlczogMjI0MS0yMjcyCitHcm91cCA3MTogKEJsb2NrcyAxODE3Ny0xODQzMikKKyAgQmxvY2sgYml0bWFwIGF0IDE4MTc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODE3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4MTc5LTE4MTgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTgxODMtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDIyNzMtMjMwNAorR3JvdXAgNzI6IChCbG9ja3MgMTg0MzMtMTg2ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxODQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg0MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODQzNS0xODQzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4NDM5LTE4Njg4CisgIEZyZWUgaW5vZGVzOiAyMzA1LTIzMzYKK0dyb3VwIDczOiAoQmxvY2tzIDE4Njg5LTE4OTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTg2ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg2OTEtMTg2OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODY5NS0xODk0NAorICBGcmVlIGlub2RlczogMjMzNy0yMzY4CitHcm91cCA3NDogKEJsb2NrcyAxODk0NS0xOTIwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4OTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODk0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4OTQ3LTE4OTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg5NTEtMTkyMDAKKyAgRnJlZSBpbm9kZXM6IDIzNjktMjQwMAorR3JvdXAgNzU6IChCbG9ja3MgMTkyMDEtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTIwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTkyMDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTIwMy0xOTIwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjA3LTE5NDU2CisgIEZyZWUgaW5vZGVzOiAyNDAxLTI0MzIKK0dyb3VwIDc2OiAoQmxvY2tzIDE5NDU3LTE5NzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTk0NTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5NDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk0NTktMTk0NjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTQ2My0xOTcxMgorICBGcmVlIGlub2RlczogMjQzMy0yNDY0CitHcm91cCA3NzogKEJsb2NrcyAxOTcxMy0xOTk2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTcxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NzE1LTE5NzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk3MTktMTk5NjgKKyAgRnJlZSBpbm9kZXM6IDI0NjUtMjQ5NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Jlc2l6ZTJmcyAtcCB0ZXN0LmltZyAzMDAwMAorUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgdG8gMzAwMDAgKDFrKSBibG9ja3MuCitCZWdpbiBwYXNzIDEgKG1heCA9IDM5KQorRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgMjk5NTMgYmxvY2tzIGxvbmcuCisKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzM3NDQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMDA3LzI5OTUzIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorZHVtcGUyZnMgdGVzdC5pbWcKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDM3NDQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgMjk5NTMKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMTQ4OQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAyNzk0NgorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICAzNzMzCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDEyNAorQmxvY2tzIHBlciBncm91cDogICAgICAgICAyNTYKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMjU2CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDMyCitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0yNTYpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2LTEyOQorICBCbG9jayBiaXRtYXAgYXQgMTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEzMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTMyLTEzNSAoKzEzMSkKKyAgMTA3IGZyZWUgYmxvY2tzLCAyMSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUwLTI1NgorICBGcmVlIGlub2RlczogMTItMzIKK0dyb3VwIDE6IChCbG9ja3MgMjU3LTUxMikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTgtMjYxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjYyLTM4NQorICBCbG9jayBiaXRtYXAgYXQgMzg2ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDM4NyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMzg4LTM5MSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzkyLTUxMgorICBGcmVlIGlub2RlczogMzMtNjQKK0dyb3VwIDI6IChCbG9ja3MgNTEzLTc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTE1LTUxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxOS03NjgKKyAgRnJlZSBpbm9kZXM6IDY1LTk2CitHcm91cCAzOiAoQmxvY2tzIDc2OS0xMDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3NjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDc3MC03NzMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3NzQtODk3CisgIEJsb2NrIGJpdG1hcCBhdCA4OTggKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgODk5ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA5MDAtOTAzICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MDQtMTAyNAorICBGcmVlIGlub2RlczogOTctMTI4CitHcm91cCA0OiAoQmxvY2tzIDEwMjUtMTI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI3LTEwMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDMxLTEyODAKKyAgRnJlZSBpbm9kZXM6IDEyOS0xNjAKK0dyb3VwIDU6IChCbG9ja3MgMTI4MS0xNTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMjgyLTEyODUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjg2LTE0MDkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MTAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTQxMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTQxMi0xNDE1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDE2LTE1MzYKKyAgRnJlZSBpbm9kZXM6IDE2MS0xOTIKK0dyb3VwIDY6IChCbG9ja3MgMTUzNy0xNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzktMTU0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NDMtMTc5MgorICBGcmVlIGlub2RlczogMTkzLTIyNAorR3JvdXAgNzogKEJsb2NrcyAxNzkzLTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE3OTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDE3OTQtMTc5NworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE3OTgtMTkyMQorICBCbG9jayBiaXRtYXAgYXQgMTkyMiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxOTIzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxOTI0LTE5MjcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjgtMjA0OAorICBGcmVlIGlub2RlczogMjI1LTI1NgorR3JvdXAgODogKEJsb2NrcyAyMDQ5LTIzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1NS0yMzA0CisgIEZyZWUgaW5vZGVzOiAyNTctMjg4CitHcm91cCA5OiAoQmxvY2tzIDIzMDUtMjU2MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjMwNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjMwNi0yMzA5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjMxMC0yNDMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDM0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDI0MzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDI0MzYtMjQzOSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ0MC0yNTYwCisgIEZyZWUgaW5vZGVzOiAyODktMzIwCitHcm91cCAxMDogKEJsb2NrcyAyNTYxLTI4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjU2My0yNTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2Ny0yODE2CisgIEZyZWUgaW5vZGVzOiAzMjEtMzUyCitHcm91cCAxMTogKEJsb2NrcyAyODE3LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjgxOS0yODIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgyMy0zMDcyCisgIEZyZWUgaW5vZGVzOiAzNTMtMzg0CitHcm91cCAxMjogKEJsb2NrcyAzMDczLTMzMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDczICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3NS0zMDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3OS0zMzI4CisgIEZyZWUgaW5vZGVzOiAzODUtNDE2CitHcm91cCAxMzogKEJsb2NrcyAzMzI5LTM1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzMzMS0zMzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMzNS0zNTg0CisgIEZyZWUgaW5vZGVzOiA0MTctNDQ4CitHcm91cCAxNDogKEJsb2NrcyAzNTg1LTM4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4Ny0zNTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU5MS0zODQwCisgIEZyZWUgaW5vZGVzOiA0NDktNDgwCitHcm91cCAxNTogKEJsb2NrcyAzODQxLTQwOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg0My0zODQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg0Ny00MDk2CisgIEZyZWUgaW5vZGVzOiA0ODEtNTEyCitHcm91cCAxNjogKEJsb2NrcyA0MDk3LTQzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEwMy00MzUyCisgIEZyZWUgaW5vZGVzOiA1MTMtNTQ0CitHcm91cCAxNzogKEJsb2NrcyA0MzUzLTQ2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDM1NS00MzU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDM1OS00NjA4CisgIEZyZWUgaW5vZGVzOiA1NDUtNTc2CitHcm91cCAxODogKEJsb2NrcyA0NjA5LTQ4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA0NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYxMS00NjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxNS00ODY0CisgIEZyZWUgaW5vZGVzOiA1NzctNjA4CitHcm91cCAxOTogKEJsb2NrcyA0ODY1LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDg2Ny00ODcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDg3MS01MTIwCisgIEZyZWUgaW5vZGVzOiA2MDktNjQwCitHcm91cCAyMDogKEJsb2NrcyA1MTIxLTUzNzYpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMy01MTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyNy01Mzc2CisgIEZyZWUgaW5vZGVzOiA2NDEtNjcyCitHcm91cCAyMTogKEJsb2NrcyA1Mzc3LTU2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1Mzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTM3OS01MzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM4My01NjMyCisgIEZyZWUgaW5vZGVzOiA2NzMtNzA0CitHcm91cCAyMjogKEJsb2NrcyA1NjMzLTU4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTYzNS01NjM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTYzOS01ODg4CisgIEZyZWUgaW5vZGVzOiA3MDUtNzM2CitHcm91cCAyMzogKEJsb2NrcyA1ODg5LTYxNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTg5MS01ODk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg5NS02MTQ0CisgIEZyZWUgaW5vZGVzOiA3MzctNzY4CitHcm91cCAyNDogKEJsb2NrcyA2MTQ1LTY0MDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE1MS02NDAwCisgIEZyZWUgaW5vZGVzOiA3NjktODAwCitHcm91cCAyNTogKEJsb2NrcyA2NDAxLTY2NTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY0MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY0MDItNjQwNQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY0MDYtNjUyOQorICBCbG9jayBiaXRtYXAgYXQgNjUzMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA2NTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA2NTMyLTY1MzUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1MzYtNjY1NgorICBGcmVlIGlub2RlczogODAxLTgzMgorR3JvdXAgMjY6IChCbG9ja3MgNjY1Ny02OTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY2NTktNjY2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY2NjMtNjkxMgorICBGcmVlIGlub2RlczogODMzLTg2NAorR3JvdXAgMjc6IChCbG9ja3MgNjkxMy03MTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA2OTEzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA2OTE0LTY5MTcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2OTE4LTcwNDEKKyAgQmxvY2sgYml0bWFwIGF0IDcwNDIgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgNzA0MyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgNzA0NC03MDQ3ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MDQ4LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDg2NS04OTYKK0dyb3VwIDI4OiAoQmxvY2tzIDcxNjktNzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTcxLTcxNzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTc1LTc0MjQKKyAgRnJlZSBpbm9kZXM6IDg5Ny05MjgKK0dyb3VwIDI5OiAoQmxvY2tzIDc0MjUtNzY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDI3LTc0MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDMxLTc2ODAKKyAgRnJlZSBpbm9kZXM6IDkyOS05NjAKK0dyb3VwIDMwOiAoQmxvY2tzIDc2ODEtNzkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDc2ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NjgzLTc2ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Njg3LTc5MzYKKyAgRnJlZSBpbm9kZXM6IDk2MS05OTIKK0dyb3VwIDMxOiAoQmxvY2tzIDc5MzctODE5MikKKyAgQmxvY2sgYml0bWFwIGF0IDc5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3OTM5LTc5NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3OTQzLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDk5My0xMDI0CitHcm91cCAzMjogKEJsb2NrcyA4MTkzLTg0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5OS04NDQ4CisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwNTYKK0dyb3VwIDMzOiAoQmxvY2tzIDg0NDktODcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDUxLTg0NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDU1LTg3MDQKKyAgRnJlZSBpbm9kZXM6IDEwNTctMTA4OAorR3JvdXAgMzQ6IChCbG9ja3MgODcwNS04OTYwKQorICBCbG9jayBiaXRtYXAgYXQgODcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODcwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDctODcxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MTEtODk2MAorICBGcmVlIGlub2RlczogMTA4OS0xMTIwCitHcm91cCAzNTogKEJsb2NrcyA4OTYxLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4OTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODk2My04OTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODk2Ny05MjE2CisgIEZyZWUgaW5vZGVzOiAxMTIxLTExNTIKK0dyb3VwIDM2OiAoQmxvY2tzIDkyMTctOTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MjE5LTkyMjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjIzLTk0NzIKKyAgRnJlZSBpbm9kZXM6IDExNTMtMTE4NAorR3JvdXAgMzc6IChCbG9ja3MgOTQ3My05NzI4KQorICBCbG9jayBiaXRtYXAgYXQgOTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk0NzUtOTQ3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk0NzktOTcyOAorICBGcmVlIGlub2RlczogMTE4NS0xMjE2CitHcm91cCAzODogKEJsb2NrcyA5NzI5LTk5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTczMS05NzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTczNS05OTg0CisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyNDgKK0dyb3VwIDM5OiAoQmxvY2tzIDk5ODUtMTAyNDApCisgIEJsb2NrIGJpdG1hcCBhdCA5OTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5OTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTk4Ny05OTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTk5MS0xMDI0MAorICBGcmVlIGlub2RlczogMTI0OS0xMjgwCitHcm91cCA0MDogKEJsb2NrcyAxMDI0MS0xMDQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDctMTA0OTYKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTMxMgorR3JvdXAgNDE6IChCbG9ja3MgMTA0OTctMTA3NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDQ5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ5OS0xMDUwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNTAzLTEwNzUyCisgIEZyZWUgaW5vZGVzOiAxMzEzLTEzNDQKK0dyb3VwIDQyOiAoQmxvY2tzIDEwNzUzLTExMDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTUtMTA3NTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1OS0xMTAwOAorICBGcmVlIGlub2RlczogMTM0NS0xMzc2CitHcm91cCA0MzogKEJsb2NrcyAxMTAwOS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMDExLTExMDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwMTUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDEzNzctMTQwOAorR3JvdXAgNDQ6IChCbG9ja3MgMTEyNjUtMTE1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjcxLTExNTIwCisgIEZyZWUgaW5vZGVzOiAxNDA5LTE0NDAKK0dyb3VwIDQ1OiAoQmxvY2tzIDExNTIxLTExNzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE1MjMtMTE1MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTUyNy0xMTc3NgorICBGcmVlIGlub2RlczogMTQ0MS0xNDcyCitHcm91cCA0NjogKEJsb2NrcyAxMTc3Ny0xMjAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTc3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNzc5LTExNzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3ODMtMTIwMzIKKyAgRnJlZSBpbm9kZXM6IDE0NzMtMTUwNAorR3JvdXAgNDc6IChCbG9ja3MgMTIwMzMtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjAzNS0xMjAzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMDM5LTEyMjg4CisgIEZyZWUgaW5vZGVzOiAxNTA1LTE1MzYKK0dyb3VwIDQ4OiAoQmxvY2tzIDEyMjg5LTEyNTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIyOTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI5NS0xMjU0NAorICBGcmVlIGlub2RlczogMTUzNy0xNTY4CitHcm91cCA0OTogKEJsb2NrcyAxMjU0NS0xMjgwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTI1NDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyNTQ2LTEyNTQ5CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTI1NTAtMTI2NzMKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjc0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjc1ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMjY3Ni0xMjY3OSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI2ODAtMTI4MDAKKyAgRnJlZSBpbm9kZXM6IDE1NjktMTYwMAorR3JvdXAgNTA6IChCbG9ja3MgMTI4MDEtMTMwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjgwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI4MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMy0xMjgwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODA3LTEzMDU2CisgIEZyZWUgaW5vZGVzOiAxNjAxLTE2MzIKK0dyb3VwIDUxOiAoQmxvY2tzIDEzMDU3LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwNTktMTMwNjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzA2My0xMzMxMgorICBGcmVlIGlub2RlczogMTYzMy0xNjY0CitHcm91cCA1MjogKEJsb2NrcyAxMzMxMy0xMzU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzMTktMTM1NjgKKyAgRnJlZSBpbm9kZXM6IDE2NjUtMTY5NgorR3JvdXAgNTM6IChCbG9ja3MgMTM1NjktMTM4MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzU2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzU3MS0xMzU3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNTc1LTEzODI0CisgIEZyZWUgaW5vZGVzOiAxNjk3LTE3MjgKK0dyb3VwIDU0OiAoQmxvY2tzIDEzODI1LTE0MDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTM4MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzODI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM4MjctMTM4MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzgzMS0xNDA4MAorICBGcmVlIGlub2RlczogMTcyOS0xNzYwCitHcm91cCA1NTogKEJsb2NrcyAxNDA4MS0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MDgzLTE0MDg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQwODctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDE3NjEtMTc5MgorR3JvdXAgNTY6IChCbG9ja3MgMTQzMzctMTQ1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzQzLTE0NTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTE4MjQKK0dyb3VwIDU3OiAoQmxvY2tzIDE0NTkzLTE0ODQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTQ1OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ1OTUtMTQ1OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDU5OS0xNDg0OAorICBGcmVlIGlub2RlczogMTgyNS0xODU2CitHcm91cCA1ODogKEJsb2NrcyAxNDg0OS0xNTEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0ODQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDg1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0ODUxLTE0ODU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ4NTUtMTUxMDQKKyAgRnJlZSBpbm9kZXM6IDE4NTctMTg4OAorR3JvdXAgNTk6IChCbG9ja3MgMTUxMDUtMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNTEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTEwNy0xNTExMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MTExLTE1MzYwCisgIEZyZWUgaW5vZGVzOiAxODg5LTE5MjAKK0dyb3VwIDYwOiAoQmxvY2tzIDE1MzYxLTE1NjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzNjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM2Ny0xNTYxNgorICBGcmVlIGlub2RlczogMTkyMS0xOTUyCitHcm91cCA2MTogKEJsb2NrcyAxNTYxNy0xNTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1NjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTYxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NjE5LTE1NjIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU2MjMtMTU4NzIKKyAgRnJlZSBpbm9kZXM6IDE5NTMtMTk4NAorR3JvdXAgNjI6IChCbG9ja3MgMTU4NzMtMTYxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTg3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU4NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTg3NS0xNTg3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1ODc5LTE2MTI4CisgIEZyZWUgaW5vZGVzOiAxOTg1LTIwMTYKK0dyb3VwIDYzOiAoQmxvY2tzIDE2MTI5LTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTYxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYxMzEtMTYxMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjEzNS0xNjM4NAorICBGcmVlIGlub2RlczogMjAxNy0yMDQ4CitHcm91cCA2NDogKEJsb2NrcyAxNjM4NS0xNjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2MzkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYzOTEtMTY2NDAKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjA4MAorR3JvdXAgNjU6IChCbG9ja3MgMTY2NDEtMTY4OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjY0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjY0My0xNjY0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQ3LTE2ODk2CisgIEZyZWUgaW5vZGVzOiAyMDgxLTIxMTIKK0dyb3VwIDY2OiAoQmxvY2tzIDE2ODk3LTE3MTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTY4OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2ODk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTY4OTktMTY5MDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjkwMy0xNzE1MgorICBGcmVlIGlub2RlczogMjExMy0yMTQ0CitHcm91cCA2NzogKEJsb2NrcyAxNzE1My0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3MTU1LTE3MTU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTcxNTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDIxNDUtMjE3NgorR3JvdXAgNjg6IChCbG9ja3MgMTc0MDktMTc2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDE1LTE3NjY0CisgIEZyZWUgaW5vZGVzOiAyMTc3LTIyMDgKK0dyb3VwIDY5OiAoQmxvY2tzIDE3NjY1LTE3OTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2NjctMTc2NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzY3MS0xNzkyMAorICBGcmVlIGlub2RlczogMjIwOS0yMjQwCitHcm91cCA3MDogKEJsb2NrcyAxNzkyMS0xODE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE3OTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3OTIzLTE3OTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc5MjctMTgxNzYKKyAgRnJlZSBpbm9kZXM6IDIyNDEtMjI3MgorR3JvdXAgNzE6IChCbG9ja3MgMTgxNzctMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxODE3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTgxNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODE3OS0xODE4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4MTgzLTE4NDMyCisgIEZyZWUgaW5vZGVzOiAyMjczLTIzMDQKK0dyb3VwIDcyOiAoQmxvY2tzIDE4NDMzLTE4Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQzOS0xODY4OAorICBGcmVlIGlub2RlczogMjMwNS0yMzM2CitHcm91cCA3MzogKEJsb2NrcyAxODY4OS0xODk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODY5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NjkxLTE4Njk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg2OTUtMTg5NDQKKyAgRnJlZSBpbm9kZXM6IDIzMzctMjM2OAorR3JvdXAgNzQ6IChCbG9ja3MgMTg5NDUtMTkyMDApCisgIEJsb2NrIGJpdG1hcCBhdCAxODk0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg5NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODk0Ny0xODk1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4OTUxLTE5MjAwCisgIEZyZWUgaW5vZGVzOiAyMzY5LTI0MDAKK0dyb3VwIDc1OiAoQmxvY2tzIDE5MjAxLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTkyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5MjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTkyMDMtMTkyMDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTIwNy0xOTQ1NgorICBGcmVlIGlub2RlczogMjQwMS0yNDMyCitHcm91cCA3NjogKEJsb2NrcyAxOTQ1Ny0xOTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0NjMtMTk3MTIKKyAgRnJlZSBpbm9kZXM6IDI0MzMtMjQ2NAorR3JvdXAgNzc6IChCbG9ja3MgMTk3MTMtMTk5NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTcxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTcxNS0xOTcxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NzE5LTE5OTY4CisgIEZyZWUgaW5vZGVzOiAyNDY1LTI0OTYKK0dyb3VwIDc4OiAoQmxvY2tzIDE5OTY5LTIwMjI0KQorICBCbG9jayBiaXRtYXAgYXQgMTk5NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5OTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk5NzEtMTk5NzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTk3NS0yMDIyNAorICBGcmVlIGlub2RlczogMjQ5Ny0yNTI4CitHcm91cCA3OTogKEJsb2NrcyAyMDIyNS0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwMjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDIyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwMjI3LTIwMjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjAyMzEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDI1MjktMjU2MAorR3JvdXAgODA6IChCbG9ja3MgMjA0ODEtMjA3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDQ4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNDg3LTIwNzM2CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI1OTIKK0dyb3VwIDgxOiAoQmxvY2tzIDIwNzM3LTIwOTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMDczNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjA3MzgtMjA3NDEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMDc0Mi0yMDg2NQorICBCbG9jayBiaXRtYXAgYXQgMjA4NjYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjA4NjcgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDIwODY4LTIwODcxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDg3Mi0yMDk5MgorICBGcmVlIGlub2RlczogMjU5My0yNjI0CitHcm91cCA4MjogKEJsb2NrcyAyMDk5My0yMTI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwOTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDk5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwOTk1LTIwOTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA5OTktMjEyNDgKKyAgRnJlZSBpbm9kZXM6IDI2MjUtMjY1NgorR3JvdXAgODM6IChCbG9ja3MgMjEyNDktMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjEyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTI1MS0yMTI1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxMjU1LTIxNTA0CisgIEZyZWUgaW5vZGVzOiAyNjU3LTI2ODgKK0dyb3VwIDg0OiAoQmxvY2tzIDIxNTA1LTIxNzYwKQorICBCbG9jayBiaXRtYXAgYXQgMjE1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDctMjE1MTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUxMS0yMTc2MAorICBGcmVlIGlub2RlczogMjY4OS0yNzIwCitHcm91cCA4NTogKEJsb2NrcyAyMTc2MS0yMjAxNikKKyAgQmxvY2sgYml0bWFwIGF0IDIxNzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTc2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNzYzLTIxNzY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjE3NjctMjIwMTYKKyAgRnJlZSBpbm9kZXM6IDI3MjEtMjc1MgorR3JvdXAgODY6IChCbG9ja3MgMjIwMTctMjIyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjAxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjIwMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjAxOS0yMjAyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyMDIzLTIyMjcyCisgIEZyZWUgaW5vZGVzOiAyNzUzLTI3ODQKK0dyb3VwIDg3OiAoQmxvY2tzIDIyMjczLTIyNTI4KQorICBCbG9jayBiaXRtYXAgYXQgMjIyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyMjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjIyNzUtMjIyNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjI3OS0yMjUyOAorICBGcmVlIGlub2RlczogMjc4NS0yODE2CitHcm91cCA4ODogKEJsb2NrcyAyMjUyOS0yMjc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1MzUtMjI3ODQKKyAgRnJlZSBpbm9kZXM6IDI4MTctMjg0OAorR3JvdXAgODk6IChCbG9ja3MgMjI3ODUtMjMwNDApCisgIEJsb2NrIGJpdG1hcCBhdCAyMjc4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjI3ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjc4Ny0yMjc5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNzkxLTIzMDQwCisgIEZyZWUgaW5vZGVzOiAyODQ5LTI4ODAKK0dyb3VwIDkwOiAoQmxvY2tzIDIzMDQxLTIzMjk2KQorICBCbG9jayBiaXRtYXAgYXQgMjMwNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzMDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjMwNDMtMjMwNDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzA0Ny0yMzI5NgorICBGcmVlIGlub2RlczogMjg4MS0yOTEyCitHcm91cCA5MTogKEJsb2NrcyAyMzI5Ny0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIzMjk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzI5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzMjk5LTIzMzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjMzMDMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDI5MTMtMjk0NAorR3JvdXAgOTI6IChCbG9ja3MgMjM1NTMtMjM4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzNTU5LTIzODA4CisgIEZyZWUgaW5vZGVzOiAyOTQ1LTI5NzYKK0dyb3VwIDkzOiAoQmxvY2tzIDIzODA5LTI0MDY0KQorICBCbG9jayBiaXRtYXAgYXQgMjM4MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzODEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM4MTEtMjM4MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzgxNS0yNDA2NAorICBGcmVlIGlub2RlczogMjk3Ny0zMDA4CitHcm91cCA5NDogKEJsb2NrcyAyNDA2NS0yNDMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0MDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDA2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0MDY3LTI0MDcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQwNzEtMjQzMjAKKyAgRnJlZSBpbm9kZXM6IDMwMDktMzA0MAorR3JvdXAgOTU6IChCbG9ja3MgMjQzMjEtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNDMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDMyMy0yNDMyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0MzI3LTI0NTc2CisgIEZyZWUgaW5vZGVzOiAzMDQxLTMwNzIKK0dyb3VwIDk2OiAoQmxvY2tzIDI0NTc3LTI0ODMyKQorICBCbG9jayBiaXRtYXAgYXQgMjQ1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0NTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzktMjQ1ODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDU4My0yNDgzMgorICBGcmVlIGlub2RlczogMzA3My0zMTA0CitHcm91cCA5NzogKEJsb2NrcyAyNDgzMy0yNTA4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODMzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDgzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0ODM1LTI0ODM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ4MzktMjUwODgKKyAgRnJlZSBpbm9kZXM6IDMxMDUtMzEzNgorR3JvdXAgOTg6IChCbG9ja3MgMjUwODktMjUzNDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTA4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjUwOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTA5MS0yNTA5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MDk1LTI1MzQ0CisgIEZyZWUgaW5vZGVzOiAzMTM3LTMxNjgKK0dyb3VwIDk5OiAoQmxvY2tzIDI1MzQ1LTI1NjAwKQorICBCbG9jayBiaXRtYXAgYXQgMjUzNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjUzNDctMjUzNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTM1MS0yNTYwMAorICBGcmVlIGlub2RlczogMzE2OS0zMjAwCitHcm91cCAxMDA6IChCbG9ja3MgMjU2MDEtMjU4NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjU2MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYwMy0yNTYwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1NjA3LTI1ODU2CisgIEZyZWUgaW5vZGVzOiAzMjAxLTMyMzIKK0dyb3VwIDEwMTogKEJsb2NrcyAyNTg1Ny0yNjExMikKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1ODU5LTI1ODYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU4NjMtMjYxMTIKKyAgRnJlZSBpbm9kZXM6IDMyMzMtMzI2NAorR3JvdXAgMTAyOiAoQmxvY2tzIDI2MTEzLTI2MzY4KQorICBCbG9jayBiaXRtYXAgYXQgMjYxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2MTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjYxMTUtMjYxMTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjExOS0yNjM2OAorICBGcmVlIGlub2RlczogMzI2NS0zMjk2CitHcm91cCAxMDM6IChCbG9ja3MgMjYzNjktMjY2MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjM2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjYzNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjM3MS0yNjM3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2Mzc1LTI2NjI0CisgIEZyZWUgaW5vZGVzOiAzMjk3LTMzMjgKK0dyb3VwIDEwNDogKEJsb2NrcyAyNjYyNS0yNjg4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2NjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNjYyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI2NjI3LTI2NjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2MzEtMjY4ODAKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzM2MAorR3JvdXAgMTA1OiAoQmxvY2tzIDI2ODgxLTI3MTM2KQorICBCbG9jayBiaXRtYXAgYXQgMjY4ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2ODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY4ODMtMjY4ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjg4Ny0yNzEzNgorICBGcmVlIGlub2RlczogMzM2MS0zMzkyCitHcm91cCAxMDY6IChCbG9ja3MgMjcxMzctMjczOTIpCisgIEJsb2NrIGJpdG1hcCBhdCAyNzEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjcxMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzEzOS0yNzE0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3MTQzLTI3MzkyCisgIEZyZWUgaW5vZGVzOiAzMzkzLTM0MjQKK0dyb3VwIDEwNzogKEJsb2NrcyAyNzM5My0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI3MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNzM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI3Mzk1LTI3Mzk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjczOTktMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDM0MjUtMzQ1NgorR3JvdXAgMTA4OiAoQmxvY2tzIDI3NjQ5LTI3OTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjc2NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI3NjUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjc2NTEtMjc2NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzY1NS0yNzkwNAorICBGcmVlIGlub2RlczogMzQ1Ny0zNDg4CitHcm91cCAxMDk6IChCbG9ja3MgMjc5MDUtMjgxNjApCisgIEJsb2NrIGJpdG1hcCBhdCAyNzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjc5MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzkwNy0yNzkxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3OTExLTI4MTYwCisgIEZyZWUgaW5vZGVzOiAzNDg5LTM1MjAKK0dyb3VwIDExMDogKEJsb2NrcyAyODE2MS0yODQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4MTYzLTI4MTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgxNjctMjg0MTYKKyAgRnJlZSBpbm9kZXM6IDM1MjEtMzU1MgorR3JvdXAgMTExOiAoQmxvY2tzIDI4NDE3LTI4NjcyKQorICBCbG9jayBiaXRtYXAgYXQgMjg0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4NDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg0MTktMjg0MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODQyMy0yODY3MgorICBGcmVlIGlub2RlczogMzU1My0zNTg0CitHcm91cCAxMTI6IChCbG9ja3MgMjg2NzMtMjg5MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyODY3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODY3NS0yODY3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4Njc5LTI4OTI4CisgIEZyZWUgaW5vZGVzOiAzNTg1LTM2MTYKK0dyb3VwIDExMzogKEJsb2NrcyAyODkyOS0yOTE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDI4OTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4OTMxLTI4OTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg5MzUtMjkxODQKKyAgRnJlZSBpbm9kZXM6IDM2MTctMzY0OAorR3JvdXAgMTE0OiAoQmxvY2tzIDI5MTg1LTI5NDQwKQorICBCbG9jayBiaXRtYXAgYXQgMjkxODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5MTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjkxODctMjkxOTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTE5MS0yOTQ0MAorICBGcmVlIGlub2RlczogMzY0OS0zNjgwCitHcm91cCAxMTU6IChCbG9ja3MgMjk0NDEtMjk2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyOTQ0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk0NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTQ0My0yOTQ0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NDQ3LTI5Njk2CisgIEZyZWUgaW5vZGVzOiAzNjgxLTM3MTIKK0dyb3VwIDExNjogKEJsb2NrcyAyOTY5Ny0yOTk1MikKKyAgQmxvY2sgYml0bWFwIGF0IDI5Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTY5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5Njk5LTI5NzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk3MDMtMjk5NTIKKyAgRnJlZSBpbm9kZXM6IDM3MTMtMzc0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Jlc2l6ZTJmcyAtcCB0ZXN0LmltZyA0MDAwMAorUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgdG8gNDAwMDAgKDFrKSBibG9ja3MuCitCZWdpbiBwYXNzIDEgKG1heCA9IDQwKQorRXh0ZW5kaW5nIHRoZSBpbm9kZSB0YWJsZSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgNDAwMDAgYmxvY2tzIGxvbmcuCisKK0ZpbGVzeXN0ZW0gZGlkIG5vdCBoYXZlIGEgVVVJRDsgZ2VuZXJhdGluZyBvbmUuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzUwMjQgZmlsZXMgKDAuMCUgbm9uLWNvbnRpZ3VvdXMpLCAyMzc2LzQwMDAwIGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorZHVtcGUyZnMgdGVzdC5pbWcKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDUwMjQKK0Jsb2NrIGNvdW50OiAgICAgICAgICAgICAgNDAwMDAKK1Jlc2VydmVkIGJsb2NrIGNvdW50OiAgICAgMTk4OAorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAzNzYyNAorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA1MDEzCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDEyMworQmxvY2tzIHBlciBncm91cDogICAgICAgICAyNTYKK0ZyYWdtZW50cyBwZXIgZ3JvdXA6ICAgICAgMjU2CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDMyCitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDQKK01vdW50IGNvdW50OiAgICAgICAgICAgICAgMAorQ2hlY2sgaW50ZXJ2YWw6ICAgICAgICAgICAxNTU1MjAwMCAoNiBtb250aHMpCitSZXNlcnZlZCBibG9ja3MgdWlkOiAgICAgIDAKK1Jlc2VydmVkIGJsb2NrcyBnaWQ6ICAgICAgMAorRmlyc3QgaW5vZGU6ICAgICAgICAgICAgICAxMQorSW5vZGUgc2l6ZToJICAgICAgICAgIDEyOAorRGVmYXVsdCBkaXJlY3RvcnkgaGFzaDogICBoYWxmX21kNAorCisKK0dyb3VwIDA6IChCbG9ja3MgMS0yNTYpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3LTEyOQorICBCbG9jayBiaXRtYXAgYXQgMTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEzMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTMyLTEzNSAoKzEzMSkKKyAgMTA3IGZyZWUgYmxvY2tzLCAyMSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUwLTI1NgorICBGcmVlIGlub2RlczogMTItMzIKK0dyb3VwIDE6IChCbG9ja3MgMjU3LTUxMikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNTgtMjYyCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjYzLTM4NQorICBCbG9jayBiaXRtYXAgYXQgMzg2ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDM4NyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMzg4LTM5MSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzkyLTUxMgorICBGcmVlIGlub2RlczogMzMtNjQKK0dyb3VwIDI6IChCbG9ja3MgNTEzLTc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTE1LTUxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUxOS03NjgKKyAgRnJlZSBpbm9kZXM6IDY1LTk2CitHcm91cCAzOiAoQmxvY2tzIDc2OS0xMDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3NjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDc3MC03NzQKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3NzUtODk3CisgIEJsb2NrIGJpdG1hcCBhdCA4OTggKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgODk5ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA5MDAtOTAzICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MDQtMTAyNAorICBGcmVlIGlub2RlczogOTctMTI4CitHcm91cCA0OiAoQmxvY2tzIDEwMjUtMTI4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDI3LTEwMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDMxLTEyODAKKyAgRnJlZSBpbm9kZXM6IDEyOS0xNjAKK0dyb3VwIDU6IChCbG9ja3MgMTI4MS0xNTM2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAxMjgyLTEyODYKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjg3LTE0MDkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MTAgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMTQxMSAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgMTQxMi0xNDE1ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDE2LTE1MzYKKyAgRnJlZSBpbm9kZXM6IDE2MS0xOTIKK0dyb3VwIDY6IChCbG9ja3MgMTUzNy0xNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzktMTU0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NDMtMTc5MgorICBGcmVlIGlub2RlczogMTkzLTIyNAorR3JvdXAgNzogKEJsb2NrcyAxNzkzLTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDE3OTMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDE3OTQtMTc5OAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDE3OTktMTkyMQorICBCbG9jayBiaXRtYXAgYXQgMTkyMiAoKzEyOSksIElub2RlIGJpdG1hcCBhdCAxOTIzICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxOTI0LTE5MjcgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5MjgtMjA0OAorICBGcmVlIGlub2RlczogMjI1LTI1NgorR3JvdXAgODogKEJsb2NrcyAyMDQ5LTIzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1NS0yMzA0CisgIEZyZWUgaW5vZGVzOiAyNTctMjg4CitHcm91cCA5OiAoQmxvY2tzIDIzMDUtMjU2MCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjMwNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjMwNi0yMzEwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjMxMS0yNDMzCisgIEJsb2NrIGJpdG1hcCBhdCAyNDM0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDI0MzUgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDI0MzYtMjQzOSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ0MC0yNTYwCisgIEZyZWUgaW5vZGVzOiAyODktMzIwCitHcm91cCAxMDogKEJsb2NrcyAyNTYxLTI4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjU2My0yNTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU2Ny0yODE2CisgIEZyZWUgaW5vZGVzOiAzMjEtMzUyCitHcm91cCAxMTogKEJsb2NrcyAyODE3LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjgxOS0yODIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgyMy0zMDcyCisgIEZyZWUgaW5vZGVzOiAzNTMtMzg0CitHcm91cCAxMjogKEJsb2NrcyAzMDczLTMzMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDczICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3NS0zMDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3OS0zMzI4CisgIEZyZWUgaW5vZGVzOiAzODUtNDE2CitHcm91cCAxMzogKEJsb2NrcyAzMzI5LTM1ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzMzMS0zMzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMzNS0zNTg0CisgIEZyZWUgaW5vZGVzOiA0MTctNDQ4CitHcm91cCAxNDogKEJsb2NrcyAzNTg1LTM4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4Ny0zNTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU5MS0zODQwCisgIEZyZWUgaW5vZGVzOiA0NDktNDgwCitHcm91cCAxNTogKEJsb2NrcyAzODQxLTQwOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg0My0zODQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg0Ny00MDk2CisgIEZyZWUgaW5vZGVzOiA0ODEtNTEyCitHcm91cCAxNjogKEJsb2NrcyA0MDk3LTQzNTIpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEwMy00MzUyCisgIEZyZWUgaW5vZGVzOiA1MTMtNTQ0CitHcm91cCAxNzogKEJsb2NrcyA0MzUzLTQ2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCA0MzUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDM1NS00MzU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDM1OS00NjA4CisgIEZyZWUgaW5vZGVzOiA1NDUtNTc2CitHcm91cCAxODogKEJsb2NrcyA0NjA5LTQ4NjQpCisgIEJsb2NrIGJpdG1hcCBhdCA0NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDYxMS00NjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDYxNS00ODY0CisgIEZyZWUgaW5vZGVzOiA1NzctNjA4CitHcm91cCAxOTogKEJsb2NrcyA0ODY1LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0ODY1ICgrMCksIElub2RlIGJpdG1hcCBhdCA0ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDg2Ny00ODcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDg3MS01MTIwCisgIEZyZWUgaW5vZGVzOiA2MDktNjQwCitHcm91cCAyMDogKEJsb2NrcyA1MTIxLTUzNzYpCisgIEJsb2NrIGJpdG1hcCBhdCA1MTIxICgrMCksIElub2RlIGJpdG1hcCBhdCA1MTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMy01MTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyNy01Mzc2CisgIEZyZWUgaW5vZGVzOiA2NDEtNjcyCitHcm91cCAyMTogKEJsb2NrcyA1Mzc3LTU2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1Mzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1Mzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTM3OS01MzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM4My01NjMyCisgIEZyZWUgaW5vZGVzOiA2NzMtNzA0CitHcm91cCAyMjogKEJsb2NrcyA1NjMzLTU4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA1NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTYzNS01NjM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTYzOS01ODg4CisgIEZyZWUgaW5vZGVzOiA3MDUtNzM2CitHcm91cCAyMzogKEJsb2NrcyA1ODg5LTYxNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTg5MS01ODk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTg5NS02MTQ0CisgIEZyZWUgaW5vZGVzOiA3MzctNzY4CitHcm91cCAyNDogKEJsb2NrcyA2MTQ1LTY0MDApCisgIEJsb2NrIGJpdG1hcCBhdCA2MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjE0Ny02MTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE1MS02NDAwCisgIEZyZWUgaW5vZGVzOiA3NjktODAwCitHcm91cCAyNTogKEJsb2NrcyA2NDAxLTY2NTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDY0MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDY0MDItNjQwNgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDY0MDctNjUyOQorICBCbG9jayBiaXRtYXAgYXQgNjUzMCAoKzEyOSksIElub2RlIGJpdG1hcCBhdCA2NTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCA2NTMyLTY1MzUgKCsxMzEpCisgIDEyMSBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY1MzYtNjY1NgorICBGcmVlIGlub2RlczogODAxLTgzMgorR3JvdXAgMjY6IChCbG9ja3MgNjY1Ny02OTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY2NTktNjY2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY2NjMtNjkxMgorICBGcmVlIGlub2RlczogODMzLTg2NAorR3JvdXAgMjc6IChCbG9ja3MgNjkxMy03MTY4KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA2OTEzLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA2OTE0LTY5MTgKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA2OTE5LTcwNDEKKyAgQmxvY2sgYml0bWFwIGF0IDcwNDIgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgNzA0MyAoKzEzMCkKKyAgSW5vZGUgdGFibGUgYXQgNzA0NC03MDQ3ICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MDQ4LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDg2NS04OTYKK0dyb3VwIDI4OiAoQmxvY2tzIDcxNjktNzQyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDcxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTcxLTcxNzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTc1LTc0MjQKKyAgRnJlZSBpbm9kZXM6IDg5Ny05MjgKK0dyb3VwIDI5OiAoQmxvY2tzIDc0MjUtNzY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDI3LTc0MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDMxLTc2ODAKKyAgRnJlZSBpbm9kZXM6IDkyOS05NjAKK0dyb3VwIDMwOiAoQmxvY2tzIDc2ODEtNzkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDc2ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NjgzLTc2ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Njg3LTc5MzYKKyAgRnJlZSBpbm9kZXM6IDk2MS05OTIKK0dyb3VwIDMxOiAoQmxvY2tzIDc5MzctODE5MikKKyAgQmxvY2sgYml0bWFwIGF0IDc5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3OTM5LTc5NDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3OTQzLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDk5My0xMDI0CitHcm91cCAzMjogKEJsb2NrcyA4MTkzLTg0NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5OS04NDQ4CisgIEZyZWUgaW5vZGVzOiAxMDI1LTEwNTYKK0dyb3VwIDMzOiAoQmxvY2tzIDg0NDktODcwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDg0NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0NTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NDUxLTg0NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDU1LTg3MDQKKyAgRnJlZSBpbm9kZXM6IDEwNTctMTA4OAorR3JvdXAgMzQ6IChCbG9ja3MgODcwNS04OTYwKQorICBCbG9jayBiaXRtYXAgYXQgODcwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODcwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg3MDctODcxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg3MTEtODk2MAorICBGcmVlIGlub2RlczogMTA4OS0xMTIwCitHcm91cCAzNTogKEJsb2NrcyA4OTYxLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4OTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODk2My04OTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODk2Ny05MjE2CisgIEZyZWUgaW5vZGVzOiAxMTIxLTExNTIKK0dyb3VwIDM2OiAoQmxvY2tzIDkyMTctOTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkyMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MjE5LTkyMjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MjIzLTk0NzIKKyAgRnJlZSBpbm9kZXM6IDExNTMtMTE4NAorR3JvdXAgMzc6IChCbG9ja3MgOTQ3My05NzI4KQorICBCbG9jayBiaXRtYXAgYXQgOTQ3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk0NzUtOTQ3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk0NzktOTcyOAorICBGcmVlIGlub2RlczogMTE4NS0xMjE2CitHcm91cCAzODogKEJsb2NrcyA5NzI5LTk5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA5NzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA5NzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTczMS05NzM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTczNS05OTg0CisgIEZyZWUgaW5vZGVzOiAxMjE3LTEyNDgKK0dyb3VwIDM5OiAoQmxvY2tzIDk5ODUtMTAyNDApCisgIEJsb2NrIGJpdG1hcCBhdCA5OTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5OTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTk4Ny05OTkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTk5MS0xMDI0MAorICBGcmVlIGlub2RlczogMTI0OS0xMjgwCitHcm91cCA0MDogKEJsb2NrcyAxMDI0MS0xMDQ5NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDctMTA0OTYKKyAgRnJlZSBpbm9kZXM6IDEyODEtMTMxMgorR3JvdXAgNDE6IChCbG9ja3MgMTA0OTctMTA3NTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDQ5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDQ5OS0xMDUwMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNTAzLTEwNzUyCisgIEZyZWUgaW5vZGVzOiAxMzEzLTEzNDQKK0dyb3VwIDQyOiAoQmxvY2tzIDEwNzUzLTExMDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTA3NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTUtMTA3NTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1OS0xMTAwOAorICBGcmVlIGlub2RlczogMTM0NS0xMzc2CitHcm91cCA0MzogKEJsb2NrcyAxMTAwOS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMDExLTExMDE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEwMTUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDEzNzctMTQwOAorR3JvdXAgNDQ6IChCbG9ja3MgMTEyNjUtMTE1MjApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI3MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjcxLTExNTIwCisgIEZyZWUgaW5vZGVzOiAxNDA5LTE0NDAKK0dyb3VwIDQ1OiAoQmxvY2tzIDExNTIxLTExNzc2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE1MjMtMTE1MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTUyNy0xMTc3NgorICBGcmVlIGlub2RlczogMTQ0MS0xNDcyCitHcm91cCA0NjogKEJsb2NrcyAxMTc3Ny0xMjAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExNzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTc3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNzc5LTExNzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3ODMtMTIwMzIKKyAgRnJlZSBpbm9kZXM6IDE0NzMtMTUwNAorR3JvdXAgNDc6IChCbG9ja3MgMTIwMzMtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjAzNS0xMjAzOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMDM5LTEyMjg4CisgIEZyZWUgaW5vZGVzOiAxNTA1LTE1MzYKK0dyb3VwIDQ4OiAoQmxvY2tzIDEyMjg5LTEyNTQ0KQorICBCbG9jayBiaXRtYXAgYXQgMTIyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMjkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyOTEtMTIyOTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI5NS0xMjU0NAorICBGcmVlIGlub2RlczogMTUzNy0xNTY4CitHcm91cCA0OTogKEJsb2NrcyAxMjU0NS0xMjgwMCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTI1NDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyNTQ2LTEyNTUwCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTI1NTEtMTI2NzMKKyAgQmxvY2sgYml0bWFwIGF0IDEyNjc0ICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDEyNjc1ICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAxMjY3Ni0xMjY3OSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI2ODAtMTI4MDAKKyAgRnJlZSBpbm9kZXM6IDE1NjktMTYwMAorR3JvdXAgNTA6IChCbG9ja3MgMTI4MDEtMTMwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjgwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI4MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjgwMy0xMjgwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODA3LTEzMDU2CisgIEZyZWUgaW5vZGVzOiAxNjAxLTE2MzIKK0dyb3VwIDUxOiAoQmxvY2tzIDEzMDU3LTEzMzEyKQorICBCbG9jayBiaXRtYXAgYXQgMTMwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwNTktMTMwNjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzA2My0xMzMxMgorICBGcmVlIGlub2RlczogMTYzMy0xNjY0CitHcm91cCA1MjogKEJsb2NrcyAxMzMxMy0xMzU2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzMTktMTM1NjgKKyAgRnJlZSBpbm9kZXM6IDE2NjUtMTY5NgorR3JvdXAgNTM6IChCbG9ja3MgMTM1NjktMTM4MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzU2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzU3MS0xMzU3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNTc1LTEzODI0CisgIEZyZWUgaW5vZGVzOiAxNjk3LTE3MjgKK0dyb3VwIDU0OiAoQmxvY2tzIDEzODI1LTE0MDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTM4MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzODI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM4MjctMTM4MzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzgzMS0xNDA4MAorICBGcmVlIGlub2RlczogMTcyOS0xNzYwCitHcm91cCA1NTogKEJsb2NrcyAxNDA4MS0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDE0MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MDgzLTE0MDg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQwODctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDE3NjEtMTc5MgorR3JvdXAgNTY6IChCbG9ja3MgMTQzMzctMTQ1OTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MzQzLTE0NTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTE4MjQKK0dyb3VwIDU3OiAoQmxvY2tzIDE0NTkzLTE0ODQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTQ1OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ1OTUtMTQ1OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDU5OS0xNDg0OAorICBGcmVlIGlub2RlczogMTgyNS0xODU2CitHcm91cCA1ODogKEJsb2NrcyAxNDg0OS0xNTEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0ODQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDg1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0ODUxLTE0ODU0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ4NTUtMTUxMDQKKyAgRnJlZSBpbm9kZXM6IDE4NTctMTg4OAorR3JvdXAgNTk6IChCbG9ja3MgMTUxMDUtMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNTEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTEwNy0xNTExMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MTExLTE1MzYwCisgIEZyZWUgaW5vZGVzOiAxODg5LTE5MjAKK0dyb3VwIDYwOiAoQmxvY2tzIDE1MzYxLTE1NjE2KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MzYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUzNjMtMTUzNjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM2Ny0xNTYxNgorICBGcmVlIGlub2RlczogMTkyMS0xOTUyCitHcm91cCA2MTogKEJsb2NrcyAxNTYxNy0xNTg3MikKKyAgQmxvY2sgYml0bWFwIGF0IDE1NjE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTYxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NjE5LTE1NjIyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU2MjMtMTU4NzIKKyAgRnJlZSBpbm9kZXM6IDE5NTMtMTk4NAorR3JvdXAgNjI6IChCbG9ja3MgMTU4NzMtMTYxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTg3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU4NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTg3NS0xNTg3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1ODc5LTE2MTI4CisgIEZyZWUgaW5vZGVzOiAxOTg1LTIwMTYKK0dyb3VwIDYzOiAoQmxvY2tzIDE2MTI5LTE2Mzg0KQorICBCbG9jayBiaXRtYXAgYXQgMTYxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYxMzEtMTYxMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjEzNS0xNjM4NAorICBGcmVlIGlub2RlczogMjAxNy0yMDQ4CitHcm91cCA2NDogKEJsb2NrcyAxNjM4NS0xNjY0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2MzkwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYzOTEtMTY2NDAKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjA4MAorR3JvdXAgNjU6IChCbG9ja3MgMTY2NDEtMTY4OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjY0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTY2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjY0My0xNjY0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NjQ3LTE2ODk2CisgIEZyZWUgaW5vZGVzOiAyMDgxLTIxMTIKK0dyb3VwIDY2OiAoQmxvY2tzIDE2ODk3LTE3MTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTY4OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2ODk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTY4OTktMTY5MDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjkwMy0xNzE1MgorICBGcmVlIGlub2RlczogMjExMy0yMTQ0CitHcm91cCA2NzogKEJsb2NrcyAxNzE1My0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE3MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3MTU1LTE3MTU4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTcxNTktMTc0MDgKKyAgRnJlZSBpbm9kZXM6IDIxNDUtMjE3NgorR3JvdXAgNjg6IChCbG9ja3MgMTc0MDktMTc2NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNzQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTc0MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNzQxMS0xNzQxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE3NDE1LTE3NjY0CisgIEZyZWUgaW5vZGVzOiAyMTc3LTIyMDgKK0dyb3VwIDY5OiAoQmxvY2tzIDE3NjY1LTE3OTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTc2NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc2NjctMTc2NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNzY3MS0xNzkyMAorICBGcmVlIGlub2RlczogMjIwOS0yMjQwCitHcm91cCA3MDogKEJsb2NrcyAxNzkyMS0xODE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE3OTIxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNzkyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE3OTIzLTE3OTI2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc5MjctMTgxNzYKKyAgRnJlZSBpbm9kZXM6IDIyNDEtMjI3MgorR3JvdXAgNzE6IChCbG9ja3MgMTgxNzctMTg0MzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxODE3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTgxNzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODE3OS0xODE4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4MTgzLTE4NDMyCisgIEZyZWUgaW5vZGVzOiAyMjczLTIzMDQKK0dyb3VwIDcyOiAoQmxvY2tzIDE4NDMzLTE4Njg4KQorICBCbG9jayBiaXRtYXAgYXQgMTg0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE4NDM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTg0MzUtMTg0MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQzOS0xODY4OAorICBGcmVlIGlub2RlczogMjMwNS0yMzM2CitHcm91cCA3MzogKEJsb2NrcyAxODY4OS0xODk0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE4Njg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxODY5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE4NjkxLTE4Njk0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTg2OTUtMTg5NDQKKyAgRnJlZSBpbm9kZXM6IDIzMzctMjM2OAorR3JvdXAgNzQ6IChCbG9ja3MgMTg5NDUtMTkyMDApCisgIEJsb2NrIGJpdG1hcCBhdCAxODk0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg5NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODk0Ny0xODk1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE4OTUxLTE5MjAwCisgIEZyZWUgaW5vZGVzOiAyMzY5LTI0MDAKK0dyb3VwIDc1OiAoQmxvY2tzIDE5MjAxLTE5NDU2KQorICBCbG9jayBiaXRtYXAgYXQgMTkyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5MjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTkyMDMtMTkyMDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTIwNy0xOTQ1NgorICBGcmVlIGlub2RlczogMjQwMS0yNDMyCitHcm91cCA3NjogKEJsb2NrcyAxOTQ1Ny0xOTcxMikKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTk0NjMtMTk3MTIKKyAgRnJlZSBpbm9kZXM6IDI0MzMtMjQ2NAorR3JvdXAgNzc6IChCbG9ja3MgMTk3MTMtMTk5NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxOTcxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTk3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxOTcxNS0xOTcxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NzE5LTE5OTY4CisgIEZyZWUgaW5vZGVzOiAyNDY1LTI0OTYKK0dyb3VwIDc4OiAoQmxvY2tzIDE5OTY5LTIwMjI0KQorICBCbG9jayBiaXRtYXAgYXQgMTk5NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE5OTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTk5NzEtMTk5NzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxOTk3NS0yMDIyNAorICBGcmVlIGlub2RlczogMjQ5Ny0yNTI4CitHcm91cCA3OTogKEJsb2NrcyAyMDIyNS0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwMjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDIyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwMjI3LTIwMjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjAyMzEtMjA0ODAKKyAgRnJlZSBpbm9kZXM6IDI1MjktMjU2MAorR3JvdXAgODA6IChCbG9ja3MgMjA0ODEtMjA3MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA0ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMDQ4My0yMDQ4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwNDg3LTIwNzM2CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI1OTIKK0dyb3VwIDgxOiAoQmxvY2tzIDIwNzM3LTIwOTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAyMDczNywgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMjA3MzgtMjA3NDIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAyMDc0My0yMDg2NQorICBCbG9jayBiaXRtYXAgYXQgMjA4NjYgKCsxMjkpLCBJbm9kZSBiaXRtYXAgYXQgMjA4NjcgKCsxMzApCisgIElub2RlIHRhYmxlIGF0IDIwODY4LTIwODcxICgrMTMxKQorICAxMjEgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDg3Mi0yMDk5MgorICBGcmVlIGlub2RlczogMjU5My0yNjI0CitHcm91cCA4MjogKEJsb2NrcyAyMDk5My0yMTI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDIwOTkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDk5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwOTk1LTIwOTk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA5OTktMjEyNDgKKyAgRnJlZSBpbm9kZXM6IDI2MjUtMjY1NgorR3JvdXAgODM6IChCbG9ja3MgMjEyNDktMjE1MDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjEyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTI1MS0yMTI1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIxMjU1LTIxNTA0CisgIEZyZWUgaW5vZGVzOiAyNjU3LTI2ODgKK0dyb3VwIDg0OiAoQmxvY2tzIDIxNTA1LTIxNzYwKQorICBCbG9jayBiaXRtYXAgYXQgMjE1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIxNTA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjE1MDctMjE1MTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUxMS0yMTc2MAorICBGcmVlIGlub2RlczogMjY4OS0yNzIwCitHcm91cCA4NTogKEJsb2NrcyAyMTc2MS0yMjAxNikKKyAgQmxvY2sgYml0bWFwIGF0IDIxNzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyMTc2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIxNzYzLTIxNzY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjE3NjctMjIwMTYKKyAgRnJlZSBpbm9kZXM6IDI3MjEtMjc1MgorR3JvdXAgODY6IChCbG9ja3MgMjIwMTctMjIyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMjAxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjIwMTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjAxOS0yMjAyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyMDIzLTIyMjcyCisgIEZyZWUgaW5vZGVzOiAyNzUzLTI3ODQKK0dyb3VwIDg3OiAoQmxvY2tzIDIyMjczLTIyNTI4KQorICBCbG9jayBiaXRtYXAgYXQgMjIyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIyMjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjIyNzUtMjIyNzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMjI3OS0yMjUyOAorICBGcmVlIGlub2RlczogMjc4NS0yODE2CitHcm91cCA4ODogKEJsb2NrcyAyMjUyOS0yMjc4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjI1MzUtMjI3ODQKKyAgRnJlZSBpbm9kZXM6IDI4MTctMjg0OAorR3JvdXAgODk6IChCbG9ja3MgMjI3ODUtMjMwNDApCisgIEJsb2NrIGJpdG1hcCBhdCAyMjc4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjI3ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMjc4Ny0yMjc5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNzkxLTIzMDQwCisgIEZyZWUgaW5vZGVzOiAyODQ5LTI4ODAKK0dyb3VwIDkwOiAoQmxvY2tzIDIzMDQxLTIzMjk2KQorICBCbG9jayBiaXRtYXAgYXQgMjMwNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzMDQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjMwNDMtMjMwNDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzA0Ny0yMzI5NgorICBGcmVlIGlub2RlczogMjg4MS0yOTEyCitHcm91cCA5MTogKEJsb2NrcyAyMzI5Ny0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIzMjk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMzI5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIzMjk5LTIzMzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjMzMDMtMjM1NTIKKyAgRnJlZSBpbm9kZXM6IDI5MTMtMjk0NAorR3JvdXAgOTI6IChCbG9ja3MgMjM1NTMtMjM4MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMzU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjM1NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMzU1NS0yMzU1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIzNTU5LTIzODA4CisgIEZyZWUgaW5vZGVzOiAyOTQ1LTI5NzYKK0dyb3VwIDkzOiAoQmxvY2tzIDIzODA5LTI0MDY0KQorICBCbG9jayBiaXRtYXAgYXQgMjM4MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzODEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM4MTEtMjM4MTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMzgxNS0yNDA2NAorICBGcmVlIGlub2RlczogMjk3Ny0zMDA4CitHcm91cCA5NDogKEJsb2NrcyAyNDA2NS0yNDMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0MDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDA2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0MDY3LTI0MDcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQwNzEtMjQzMjAKKyAgRnJlZSBpbm9kZXM6IDMwMDktMzA0MAorR3JvdXAgOTU6IChCbG9ja3MgMjQzMjEtMjQ1NzYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNDMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDMyMy0yNDMyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI0MzI3LTI0NTc2CisgIEZyZWUgaW5vZGVzOiAzMDQxLTMwNzIKK0dyb3VwIDk2OiAoQmxvY2tzIDI0NTc3LTI0ODMyKQorICBCbG9jayBiaXRtYXAgYXQgMjQ1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI0NTc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjQ1NzktMjQ1ODIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDU4My0yNDgzMgorICBGcmVlIGlub2RlczogMzA3My0zMTA0CitHcm91cCA5NzogKEJsb2NrcyAyNDgzMy0yNTA4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI0ODMzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNDgzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI0ODM1LTI0ODM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjQ4MzktMjUwODgKKyAgRnJlZSBpbm9kZXM6IDMxMDUtMzEzNgorR3JvdXAgOTg6IChCbG9ja3MgMjUwODktMjUzNDQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTA4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjUwOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTA5MS0yNTA5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1MDk1LTI1MzQ0CisgIEZyZWUgaW5vZGVzOiAzMTM3LTMxNjgKK0dyb3VwIDk5OiAoQmxvY2tzIDI1MzQ1LTI1NjAwKQorICBCbG9jayBiaXRtYXAgYXQgMjUzNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI1MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjUzNDctMjUzNTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNTM1MS0yNTYwMAorICBGcmVlIGlub2RlczogMzE2OS0zMjAwCitHcm91cCAxMDA6IChCbG9ja3MgMjU2MDEtMjU4NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyNTYwMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjU2MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNTYwMy0yNTYwNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1NjA3LTI1ODU2CisgIEZyZWUgaW5vZGVzOiAzMjAxLTMyMzIKK0dyb3VwIDEwMTogKEJsb2NrcyAyNTg1Ny0yNjExMikKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNTg1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI1ODU5LTI1ODYyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU4NjMtMjYxMTIKKyAgRnJlZSBpbm9kZXM6IDMyMzMtMzI2NAorR3JvdXAgMTAyOiAoQmxvY2tzIDI2MTEzLTI2MzY4KQorICBCbG9jayBiaXRtYXAgYXQgMjYxMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2MTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjYxMTUtMjYxMTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjExOS0yNjM2OAorICBGcmVlIGlub2RlczogMzI2NS0zMjk2CitHcm91cCAxMDM6IChCbG9ja3MgMjYzNjktMjY2MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAyNjM2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjYzNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNjM3MS0yNjM3NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI2Mzc1LTI2NjI0CisgIEZyZWUgaW5vZGVzOiAzMjk3LTMzMjgKK0dyb3VwIDEwNDogKEJsb2NrcyAyNjYyNS0yNjg4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDI2NjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAyNjYyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI2NjI3LTI2NjMwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2MzEtMjY4ODAKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzM2MAorR3JvdXAgMTA1OiAoQmxvY2tzIDI2ODgxLTI3MTM2KQorICBCbG9jayBiaXRtYXAgYXQgMjY4ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2ODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY4ODMtMjY4ODYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNjg4Ny0yNzEzNgorICBGcmVlIGlub2RlczogMzM2MS0zMzkyCitHcm91cCAxMDY6IChCbG9ja3MgMjcxMzctMjczOTIpCisgIEJsb2NrIGJpdG1hcCBhdCAyNzEzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjcxMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzEzOS0yNzE0MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3MTQzLTI3MzkyCisgIEZyZWUgaW5vZGVzOiAzMzkzLTM0MjQKK0dyb3VwIDEwNzogKEJsb2NrcyAyNzM5My0yNzY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDI3MzkzICgrMCksIElub2RlIGJpdG1hcCBhdCAyNzM5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI3Mzk1LTI3Mzk4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjczOTktMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDM0MjUtMzQ1NgorR3JvdXAgMTA4OiAoQmxvY2tzIDI3NjQ5LTI3OTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjc2NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI3NjUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjc2NTEtMjc2NTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzY1NS0yNzkwNAorICBGcmVlIGlub2RlczogMzQ1Ny0zNDg4CitHcm91cCAxMDk6IChCbG9ja3MgMjc5MDUtMjgxNjApCisgIEJsb2NrIGJpdG1hcCBhdCAyNzkwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjc5MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNzkwNy0yNzkxMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI3OTExLTI4MTYwCisgIEZyZWUgaW5vZGVzOiAzNDg5LTM1MjAKK0dyb3VwIDExMDogKEJsb2NrcyAyODE2MS0yODQxNikKKyAgQmxvY2sgYml0bWFwIGF0IDI4MTYxICgrMCksIElub2RlIGJpdG1hcCBhdCAyODE2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4MTYzLTI4MTY2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjgxNjctMjg0MTYKKyAgRnJlZSBpbm9kZXM6IDM1MjEtMzU1MgorR3JvdXAgMTExOiAoQmxvY2tzIDI4NDE3LTI4NjcyKQorICBCbG9jayBiaXRtYXAgYXQgMjg0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI4NDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjg0MTktMjg0MjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyODQyMy0yODY3MgorICBGcmVlIGlub2RlczogMzU1My0zNTg0CitHcm91cCAxMTI6IChCbG9ja3MgMjg2NzMtMjg5MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyODY3MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjg2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyODY3NS0yODY3OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4Njc5LTI4OTI4CisgIEZyZWUgaW5vZGVzOiAzNTg1LTM2MTYKK0dyb3VwIDExMzogKEJsb2NrcyAyODkyOS0yOTE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDI4OTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyODkzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4OTMxLTI4OTM0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjg5MzUtMjkxODQKKyAgRnJlZSBpbm9kZXM6IDM2MTctMzY0OAorR3JvdXAgMTE0OiAoQmxvY2tzIDI5MTg1LTI5NDQwKQorICBCbG9jayBiaXRtYXAgYXQgMjkxODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5MTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjkxODctMjkxOTAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTE5MS0yOTQ0MAorICBGcmVlIGlub2RlczogMzY0OS0zNjgwCitHcm91cCAxMTU6IChCbG9ja3MgMjk0NDEtMjk2OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAyOTQ0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjk0NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyOTQ0My0yOTQ0NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI5NDQ3LTI5Njk2CisgIEZyZWUgaW5vZGVzOiAzNjgxLTM3MTIKK0dyb3VwIDExNjogKEJsb2NrcyAyOTY5Ny0yOTk1MikKKyAgQmxvY2sgYml0bWFwIGF0IDI5Njk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAyOTY5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI5Njk5LTI5NzAyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk3MDMtMjk5NTIKKyAgRnJlZSBpbm9kZXM6IDM3MTMtMzc0NAorR3JvdXAgMTE3OiAoQmxvY2tzIDI5OTUzLTMwMjA4KQorICBCbG9jayBiaXRtYXAgYXQgMjk5NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5OTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjk5NTUtMjk5NTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyOTk1OS0zMDIwOAorICBGcmVlIGlub2RlczogMzc0NS0zNzc2CitHcm91cCAxMTg6IChCbG9ja3MgMzAyMDktMzA0NjQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDIwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzAyMTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDIxMS0zMDIxNCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwMjE1LTMwNDY0CisgIEZyZWUgaW5vZGVzOiAzNzc3LTM4MDgKK0dyb3VwIDExOTogKEJsb2NrcyAzMDQ2NS0zMDcyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDMwNDY1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMDQ2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMwNDY3LTMwNDcwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA0NzEtMzA3MjAKKyAgRnJlZSBpbm9kZXM6IDM4MDktMzg0MAorR3JvdXAgMTIwOiAoQmxvY2tzIDMwNzIxLTMwOTc2KQorICBCbG9jayBiaXRtYXAgYXQgMzA3MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMwNzIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzA3MjMtMzA3MjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDcyNy0zMDk3NgorICBGcmVlIGlub2RlczogMzg0MS0zODcyCitHcm91cCAxMjE6IChCbG9ja3MgMzA5NzctMzEyMzIpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDk3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzA5NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDk3OS0zMDk4MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMwOTgzLTMxMjMyCisgIEZyZWUgaW5vZGVzOiAzODczLTM5MDQKK0dyb3VwIDEyMjogKEJsb2NrcyAzMTIzMy0zMTQ4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxMjMzICgrMCksIElub2RlIGJpdG1hcCBhdCAzMTIzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMxMjM1LTMxMjM4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzEyMzktMzE0ODgKKyAgRnJlZSBpbm9kZXM6IDM5MDUtMzkzNgorR3JvdXAgMTIzOiAoQmxvY2tzIDMxNDg5LTMxNzQ0KQorICBCbG9jayBiaXRtYXAgYXQgMzE0ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMxNDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzE0OTEtMzE0OTQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMTQ5NS0zMTc0NAorICBGcmVlIGlub2RlczogMzkzNy0zOTY4CitHcm91cCAxMjQ6IChCbG9ja3MgMzE3NDUtMzIwMDApCisgIEJsb2NrIGJpdG1hcCBhdCAzMTc0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzE3NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMTc0Ny0zMTc1MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMxNzUxLTMyMDAwCisgIEZyZWUgaW5vZGVzOiAzOTY5LTQwMDAKK0dyb3VwIDEyNTogKEJsb2NrcyAzMjAwMS0zMjI1NikKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMzIwMDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMyMDAyLTMyMDA2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMzIwMDctMzIxMjkKKyAgQmxvY2sgYml0bWFwIGF0IDMyMTMwICgrMTI5KSwgSW5vZGUgYml0bWFwIGF0IDMyMTMxICgrMTMwKQorICBJbm9kZSB0YWJsZSBhdCAzMjEzMi0zMjEzNSAoKzEzMSkKKyAgMTIxIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzIxMzYtMzIyNTYKKyAgRnJlZSBpbm9kZXM6IDQwMDEtNDAzMgorR3JvdXAgMTI2OiAoQmxvY2tzIDMyMjU3LTMyNTEyKQorICBCbG9jayBiaXRtYXAgYXQgMzIyNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMyMjU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzIyNTktMzIyNjIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMjI2My0zMjUxMgorICBGcmVlIGlub2RlczogNDAzMy00MDY0CitHcm91cCAxMjc6IChCbG9ja3MgMzI1MTMtMzI3NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAzMjUxMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzI1MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMjUxNS0zMjUxOCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMyNTE5LTMyNzY4CisgIEZyZWUgaW5vZGVzOiA0MDY1LTQwOTYKK0dyb3VwIDEyODogKEJsb2NrcyAzMjc2OS0zMzAyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDMyNzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMjc3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMyNzcxLTMyNzc0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI3NzUtMzMwMjQKKyAgRnJlZSBpbm9kZXM6IDQwOTctNDEyOAorR3JvdXAgMTI5OiAoQmxvY2tzIDMzMDI1LTMzMjgwKQorICBCbG9jayBiaXRtYXAgYXQgMzMwMjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzMDI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzMwMjctMzMwMzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzAzMS0zMzI4MAorICBGcmVlIGlub2RlczogNDEyOS00MTYwCitHcm91cCAxMzA6IChCbG9ja3MgMzMyODEtMzM1MzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzI4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzMyODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzI4My0zMzI4NiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMzMjg3LTMzNTM2CisgIEZyZWUgaW5vZGVzOiA0MTYxLTQxOTIKK0dyb3VwIDEzMTogKEJsb2NrcyAzMzUzNy0zMzc5MikKKyAgQmxvY2sgYml0bWFwIGF0IDMzNTM3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMzUzOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMzNTM5LTMzNTQyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM1NDMtMzM3OTIKKyAgRnJlZSBpbm9kZXM6IDQxOTMtNDIyNAorR3JvdXAgMTMyOiAoQmxvY2tzIDMzNzkzLTM0MDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMzM3OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMzNzk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzM3OTUtMzM3OTggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzc5OS0zNDA0OAorICBGcmVlIGlub2RlczogNDIyNS00MjU2CitHcm91cCAxMzM6IChCbG9ja3MgMzQwNDktMzQzMDQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNDA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzQwNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNDA1MS0zNDA1NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM0MDU1LTM0MzA0CisgIEZyZWUgaW5vZGVzOiA0MjU3LTQyODgKK0dyb3VwIDEzNDogKEJsb2NrcyAzNDMwNS0zNDU2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM0MzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNDMwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM0MzA3LTM0MzEwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzQzMTEtMzQ1NjAKKyAgRnJlZSBpbm9kZXM6IDQyODktNDMyMAorR3JvdXAgMTM1OiAoQmxvY2tzIDM0NTYxLTM0ODE2KQorICBCbG9jayBiaXRtYXAgYXQgMzQ1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM0NTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzQ1NjMtMzQ1NjYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNDU2Ny0zNDgxNgorICBGcmVlIGlub2RlczogNDMyMS00MzUyCitHcm91cCAxMzY6IChCbG9ja3MgMzQ4MTctMzUwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAzNDgxNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzQ4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNDgxOS0zNDgyMiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM0ODIzLTM1MDcyCisgIEZyZWUgaW5vZGVzOiA0MzUzLTQzODQKK0dyb3VwIDEzNzogKEJsb2NrcyAzNTA3My0zNTMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDM1MDczICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTA3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1MDc1LTM1MDc4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzUwNzktMzUzMjgKKyAgRnJlZSBpbm9kZXM6IDQzODUtNDQxNgorR3JvdXAgMTM4OiAoQmxvY2tzIDM1MzI5LTM1NTg0KQorICBCbG9jayBiaXRtYXAgYXQgMzUzMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1MzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzUzMzEtMzUzMzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNTMzNS0zNTU4NAorICBGcmVlIGlub2RlczogNDQxNy00NDQ4CitHcm91cCAxMzk6IChCbG9ja3MgMzU1ODUtMzU4NDApCisgIEJsb2NrIGJpdG1hcCBhdCAzNTU4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzU1ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNTU4Ny0zNTU5MCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM1NTkxLTM1ODQwCisgIEZyZWUgaW5vZGVzOiA0NDQ5LTQ0ODAKK0dyb3VwIDE0MDogKEJsb2NrcyAzNTg0MS0zNjA5NikKKyAgQmxvY2sgYml0bWFwIGF0IDM1ODQxICgrMCksIElub2RlIGJpdG1hcCBhdCAzNTg0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM1ODQzLTM1ODQ2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU4NDctMzYwOTYKKyAgRnJlZSBpbm9kZXM6IDQ0ODEtNDUxMgorR3JvdXAgMTQxOiAoQmxvY2tzIDM2MDk3LTM2MzUyKQorICBCbG9jayBiaXRtYXAgYXQgMzYwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM2MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzYwOTktMzYxMDIgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNjEwMy0zNjM1MgorICBGcmVlIGlub2RlczogNDUxMy00NTQ0CitHcm91cCAxNDI6IChCbG9ja3MgMzYzNTMtMzY2MDgpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjM1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzYzNTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNjM1NS0zNjM1OCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM2MzU5LTM2NjA4CisgIEZyZWUgaW5vZGVzOiA0NTQ1LTQ1NzYKK0dyb3VwIDE0MzogKEJsb2NrcyAzNjYwOS0zNjg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDM2NjA5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNjYxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM2NjExLTM2NjE0ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzY2MTUtMzY4NjQKKyAgRnJlZSBpbm9kZXM6IDQ1NzctNDYwOAorR3JvdXAgMTQ0OiAoQmxvY2tzIDM2ODY1LTM3MTIwKQorICBCbG9jayBiaXRtYXAgYXQgMzY4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM2ODY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzY4NjctMzY4NzAgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNjg3MS0zNzEyMAorICBGcmVlIGlub2RlczogNDYwOS00NjQwCitHcm91cCAxNDU6IChCbG9ja3MgMzcxMjEtMzczNzYpCisgIEJsb2NrIGJpdG1hcCBhdCAzNzEyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzcxMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNzEyMy0zNzEyNiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM3MTI3LTM3Mzc2CisgIEZyZWUgaW5vZGVzOiA0NjQxLTQ2NzIKK0dyb3VwIDE0NjogKEJsb2NrcyAzNzM3Ny0zNzYzMikKKyAgQmxvY2sgYml0bWFwIGF0IDM3Mzc3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNzM3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM3Mzc5LTM3MzgyICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzczODMtMzc2MzIKKyAgRnJlZSBpbm9kZXM6IDQ2NzMtNDcwNAorR3JvdXAgMTQ3OiAoQmxvY2tzIDM3NjMzLTM3ODg4KQorICBCbG9jayBiaXRtYXAgYXQgMzc2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM3NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzc2MzUtMzc2MzggKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNzYzOS0zNzg4OAorICBGcmVlIGlub2RlczogNDcwNS00NzM2CitHcm91cCAxNDg6IChCbG9ja3MgMzc4ODktMzgxNDQpCisgIEJsb2NrIGJpdG1hcCBhdCAzNzg4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzc4OTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNzg5MS0zNzg5NCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM3ODk1LTM4MTQ0CisgIEZyZWUgaW5vZGVzOiA0NzM3LTQ3NjgKK0dyb3VwIDE0OTogKEJsb2NrcyAzODE0NS0zODQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDM4MTQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzODE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4MTQ3LTM4MTUwICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzgxNTEtMzg0MDAKKyAgRnJlZSBpbm9kZXM6IDQ3NjktNDgwMAorR3JvdXAgMTUwOiAoQmxvY2tzIDM4NDAxLTM4NjU2KQorICBCbG9jayBiaXRtYXAgYXQgMzg0MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4NDAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg0MDMtMzg0MDYgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzODQwNy0zODY1NgorICBGcmVlIGlub2RlczogNDgwMS00ODMyCitHcm91cCAxNTE6IChCbG9ja3MgMzg2NTctMzg5MTIpCisgIEJsb2NrIGJpdG1hcCBhdCAzODY1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzg2NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzODY1OS0zODY2MiAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM4NjYzLTM4OTEyCisgIEZyZWUgaW5vZGVzOiA0ODMzLTQ4NjQKK0dyb3VwIDE1MjogKEJsb2NrcyAzODkxMy0zOTE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDM4OTEzICgrMCksIElub2RlIGJpdG1hcCBhdCAzODkxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM4OTE1LTM4OTE4ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg5MTktMzkxNjgKKyAgRnJlZSBpbm9kZXM6IDQ4NjUtNDg5NgorR3JvdXAgMTUzOiAoQmxvY2tzIDM5MTY5LTM5NDI0KQorICBCbG9jayBiaXRtYXAgYXQgMzkxNjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM5MTcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzkxNzEtMzkxNzQgKCsyKQorICAyNTAgZnJlZSBibG9ja3MsIDMyIGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTE3NS0zOTQyNAorICBGcmVlIGlub2RlczogNDg5Ny00OTI4CitHcm91cCAxNTQ6IChCbG9ja3MgMzk0MjUtMzk2ODApCisgIEJsb2NrIGJpdG1hcCBhdCAzOTQyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzk0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzOTQyNy0zOTQzMCAoKzIpCisgIDI1MCBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5NDMxLTM5NjgwCisgIEZyZWUgaW5vZGVzOiA0OTI5LTQ5NjAKK0dyb3VwIDE1NTogKEJsb2NrcyAzOTY4MS0zOTkzNikKKyAgQmxvY2sgYml0bWFwIGF0IDM5NjgxICgrMCksIElub2RlIGJpdG1hcCBhdCAzOTY4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM5NjgzLTM5Njg2ICgrMikKKyAgMjUwIGZyZWUgYmxvY2tzLCAzMiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzk2ODctMzk5MzYKKyAgRnJlZSBpbm9kZXM6IDQ5NjEtNDk5MgorR3JvdXAgMTU2OiAoQmxvY2tzIDM5OTM3LTM5OTk5KQorICBCbG9jayBiaXRtYXAgYXQgMzk5MzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM5OTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzk5MzktMzk5NDIgKCsyKQorICA1NyBmcmVlIGJsb2NrcywgMzIgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM5OTQzLTM5OTk5CisgIEZyZWUgaW5vZGVzOiA0OTkzLTUwMjQKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX21vdmVfaXRhYmxlL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvcl9tb3ZlX2l0YWJsZS9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzJkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl9tb3ZlX2l0YWJsZS9uYW1lCkBAIC0wLDAgKzEgQEAKK2ZpbGVzeXN0ZW0gcmVzaXplIHdoaWNoIHJlcXVpcmVzIG1vdmluZyB0aGUgaW5vZGUgdGFibGUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX21vdmVfaXRhYmxlL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy9yX21vdmVfaXRhYmxlL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTY3ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3JfbW92ZV9pdGFibGUvc2NyaXB0CkBAIC0wLDAgKzEsMTE2IEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFIC1hIC14ICRERUJVR0ZTX0VYRTsgdGhlbgorCitGU0NLX09QVD0teWYKK09VVD0kdGVzdF9uYW1lLmxvZworaWYgWyAtZiAkdGVzdF9kaXIvZXhwZWN0Lmd6IF07IHRoZW4KKwlFWFA9JHRlc3RfbmFtZS50bXAKKwlndW56aXAgPCAkdGVzdF9kaXIvZXhwZWN0Lmd6ID4gJEVYUDEKK2Vsc2UKKwlFWFA9JHRlc3RfZGlyL2V4cGVjdAorZmkKKworY3AgL2Rldi9udWxsICRPVVQKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gbWtlMmZzIC1xIC1GIC1vIExpbnV4IC1iIDEwMjQgLWcgMjU2IHRlc3QuaW1nIDEwMjQgPiAkT1VUCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDEwMjQgLWcgMjU2ICRUTVBGSUxFIDEwMjQgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+PiAkT1VUCisKK2VjaG8gcmVzaXplMmZzIC1wIHRlc3QuaW1nIDEwMDAwID4+ICRPVVQKKyRSRVNJWkUyRlMgLXAgJFRNUEZJTEUgMTAwMDAgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJFRVTkUyRlMgLWMgMjAgLVUgY2xlYXIgJFRNUEZJTEUgID4vZGV2L251bGwgMj4mMQorCitlY2hvIGR1bXBlMmZzIHRlc3QuaW1nID4+ICRPVVQKKyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPj4gJE9VVAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj4gJE9VVAorCitlY2hvIHJlc2l6ZTJmcyAtcCB0ZXN0LmltZyAyMDAwMCA+PiAkT1VUCiskUkVTSVpFMkZTIC1wICRUTVBGSUxFIDIwMDAwIDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQubmV3IDI+JjEKK3N0YXR1cz0kPworZWNobyBFeGl0IHN0YXR1cyBpcyAkc3RhdHVzID4+ICRPVVQubmV3CitzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiICRPVVQubmV3ID4+ICRPVVQKK3JtIC1mICRPVVQubmV3CisKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbGFzdGNoZWNrIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBoYXNoX3NlZWQgbnVsbCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIG1rZnNfdGltZSAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRUVU5FMkZTIC1jIDIwIC1VIGNsZWFyICRUTVBGSUxFICA+L2Rldi9udWxsIDI+JjEKKworZWNobyBkdW1wZTJmcyB0ZXN0LmltZyA+PiAkT1VUCiskRFVNUEUyRlMgJFRNUEZJTEUgMj4mMSB8IHNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkID4+ICRPVVQKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgLXAgdGVzdC5pbWcgMzAwMDAgPj4gJE9VVAorJFJFU0laRTJGUyAtcCAkVE1QRklMRSAzMDAwMCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiAkT1VUCisKK2VjaG8gcmVzaXplMmZzIC1wIHRlc3QuaW1nIDQwMDAwID4+ICRPVVQKKyRSRVNJWkUyRlMgLXAgJFRNUEZJTEUgNDAwMDAgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+PiAkT1VUCisKKyRGU0NLICRGU0NLX09QVCAgLU4gdGVzdF9maWxlc3lzICRUTVBGSUxFID4gJE9VVC5uZXcgMj4mMQorc3RhdHVzPSQ/CitlY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVC5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVC5uZXcgPj4gJE9VVAorcm0gLWYgJE9VVC5uZXcKKworJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBsYXN0Y2hlY2sgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGhhc2hfc2VlZCBudWxsIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgbWtmc190aW1lIDAiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJFRVTkUyRlMgLWMgMjAgLVUgY2xlYXIgJFRNUEZJTEUgID4vZGV2L251bGwgMj4mMQorCitlY2hvIGR1bXBlMmZzIHRlc3QuaW1nID4+ICRPVVQKKyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPj4gJE9VVAorCitybSAtZiAkVE1QRklMRQorCitjbXAgLXMgJE9VVCAkRVhQCitzdGF0dXM9JD8KKworaWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorCXJtIC1mICR0ZXN0X25hbWUudG1wCitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGU19FWEUgLWEgLXggJERFQlVHRlNfRVhFOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCitmaSAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9leHBlY3QgYi9lMmZzcHJvZ3MvdGVzdHMvcl9yZXNpemVfaW5vZGUvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmZlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl9yZXNpemVfaW5vZGUvZXhwZWN0CkBAIC0wLDAgKzEsMTYzOSBAQAorbWtlMmZzIC1xIC1GIC1PIHJlc2l6ZV9pbm9kZSAtbyBMaW51eCAtYiAxMDI0IC1nIDEwMjQgdGVzdC5pbWcgMTYzODQKK3Jlc2l6ZTJmcyB0ZXN0LmltZyA2NTUzNgorUmVzaXppbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgdG8gNjU1MzYgKDFrKSBibG9ja3MuCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgNjU1MzYgYmxvY2tzIGxvbmcuCisKK1Bhc3MgMTogQ2hlY2tpbmcgaW5vZGVzLCBibG9ja3MsIGFuZCBzaXplcworUGFzcyAyOiBDaGVja2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlCitQYXNzIDM6IENoZWNraW5nIGRpcmVjdG9yeSBjb25uZWN0aXZpdHkKK1Bhc3MgNDogQ2hlY2tpbmcgcmVmZXJlbmNlIGNvdW50cworUGFzcyA1OiBDaGVja2luZyBncm91cCBzdW1tYXJ5IGluZm9ybWF0aW9uCit0ZXN0X2ZpbGVzeXM6IDExLzE2Mzg0IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgNDUxMy82NTUzNiBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2R1bXBlMmZzIHRlc3QuaW1nCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICAxNjM4NAorQmxvY2sgY291bnQ6ICAgICAgICAgICAgICA2NTUzNgorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICAzMjc2CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDYxMDIzCitGcmVlIGlub2RlczogICAgICAgICAgICAgIDE2MzczCitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NQorQmxvY2tzIHBlciBncm91cDogICAgICAgICAxMDI0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDEwMjQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjU2CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDMyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyNCkKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDQtMjU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNTkgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMjYwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNjEtMjkyICgrMjYwKQorICA3MTggZnJlZSBibG9ja3MsIDI0NSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzA3LTEwMjQKKyAgRnJlZSBpbm9kZXM6IDEyLTI1NgorR3JvdXAgMTogKEJsb2NrcyAxMDI1LTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEwMjUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEwMjYtMTAyNworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEwMjgtMTI4MgorICBCbG9jayBiaXRtYXAgYXQgMTI4MyAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAxMjg0ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAxMjg1LTEzMTYgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzE3LTIwNDgKKyAgRnJlZSBpbm9kZXM6IDI1Ny01MTIKK0dyb3VwIDI6IChCbG9ja3MgMjA0OS0zMDcyKQorICBCbG9jayBiaXRtYXAgYXQgMjA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNTEtMjA4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDgzLTMwNzIKKyAgRnJlZSBpbm9kZXM6IDUxMy03NjgKK0dyb3VwIDM6IChCbG9ja3MgMzA3My00MDk2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAzMDczLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMDc0LTMwNzUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzMDc2LTMzMzAKKyAgQmxvY2sgYml0bWFwIGF0IDMzMzEgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMzMzMiAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMzMzMy0zMzY0ICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzM2NS00MDk2CisgIEZyZWUgaW5vZGVzOiA3NjktMTAyNAorR3JvdXAgNDogKEJsb2NrcyA0MDk3LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxMzEtNTEyMAorICBGcmVlIGlub2RlczogMTAyNS0xMjgwCitHcm91cCA1OiAoQmxvY2tzIDUxMjEtNjE0NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTEyMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTEyMi01MTIzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTEyNC01Mzc4CisgIEJsb2NrIGJpdG1hcCBhdCA1Mzc5ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDUzODAgKCsyNTkpCisgIElub2RlIHRhYmxlIGF0IDUzODEtNTQxMiAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU0MTMtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE3OS03MTY4CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE3OTIKK0dyb3VwIDc6IChCbG9ja3MgNzE2OS04MTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3MTY5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA3MTcwLTcxNzEKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3MTcyLTc0MjYKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjcgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgNzQyOCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNzQyOS03NDYwICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQ2MS04MTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTIwNDgKK0dyb3VwIDg6IChCbG9ja3MgODE5My05MjE2KQorICBCbG9jayBiaXRtYXAgYXQgODE5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTUtODIyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MjI3LTkyMTYKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjMwNAorR3JvdXAgOTogKEJsb2NrcyA5MjE3LTEwMjQwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA5MjE3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA5MjE4LTkyMTkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA5MjIwLTk0NzQKKyAgQmxvY2sgYml0bWFwIGF0IDk0NzUgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NiAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgOTQ3Ny05NTA4ICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTUwOS0xMDI0MAorICBGcmVlIGlub2RlczogMjMwNS0yNTYwCitHcm91cCAxMDogKEJsb2NrcyAxMDI0MS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMjc1LTExMjY0CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI4MTYKK0dyb3VwIDExOiAoQmxvY2tzIDExMjY1LTEyMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEyNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEyNjctMTEyOTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyOTktMTIyODgKKyAgRnJlZSBpbm9kZXM6IDI4MTctMzA3MgorR3JvdXAgMTI6IChCbG9ja3MgMTIyODktMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjI4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI5MS0xMjMyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjMyMy0xMzMxMgorICBGcmVlIGlub2RlczogMzA3My0zMzI4CitHcm91cCAxMzogKEJsb2NrcyAxMzMxMy0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMzQ3LTE0MzM2CisgIEZyZWUgaW5vZGVzOiAzMzI5LTM1ODQKK0dyb3VwIDE0OiAoQmxvY2tzIDE0MzM3LTE1MzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQzMzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQzMzktMTQzNzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzNzEtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzg0MAorR3JvdXAgMTU6IChCbG9ja3MgMTUzNjEtMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzNjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM2My0xNTM5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM5NS0xNjM4NAorICBGcmVlIGlub2RlczogMzg0MS00MDk2CitHcm91cCAxNjogKEJsb2NrcyAxNjM4NS0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2NDE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NDE5LTE3NDA4CisgIEZyZWUgaW5vZGVzOiA0MDk3LTQzNTIKK0dyb3VwIDE3OiAoQmxvY2tzIDE3NDA5LTE4NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTc0MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc0MTEtMTc0NDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc0NDMtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDYwOAorR3JvdXAgMTg6IChCbG9ja3MgMTg0MzMtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxODQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg0MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODQzNS0xODQ2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQ2Ny0xOTQ1NgorICBGcmVlIGlub2RlczogNDYwOS00ODY0CitHcm91cCAxOTogKEJsb2NrcyAxOTQ1Ny0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NDkxLTIwNDgwCisgIEZyZWUgaW5vZGVzOiA0ODY1LTUxMjAKK0dyb3VwIDIwOiAoQmxvY2tzIDIwNDgxLTIxNTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA0ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA0ODMtMjA1MTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1MTUtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDUxMjEtNTM3NgorR3JvdXAgMjE6IChCbG9ja3MgMjE1MDUtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTUwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjE1MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTUwNy0yMTUzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUzOS0yMjUyOAorICBGcmVlIGlub2RlczogNTM3Ny01NjMyCitHcm91cCAyMjogKEJsb2NrcyAyMjUyOS0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNTYzLTIzNTUyCisgIEZyZWUgaW5vZGVzOiA1NjMzLTU4ODgKK0dyb3VwIDIzOiAoQmxvY2tzIDIzNTUzLTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMjM1NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzNTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM1NTUtMjM1ODYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjM1ODctMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDU4ODktNjE0NAorR3JvdXAgMjQ6IChCbG9ja3MgMjQ1NzctMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNDU3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQ1NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDU3OS0yNDYxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDYxMS0yNTYwMAorICBGcmVlIGlub2RlczogNjE0NS02NDAwCitHcm91cCAyNTogKEJsb2NrcyAyNTYwMS0yNjYyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU2MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1NjAyLTI1NjAzCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjU2MDQtMjU4NTgKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODU5ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI1ODYwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNTg2MS0yNTg5MiAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1ODkzLTI2NjI0CisgIEZyZWUgaW5vZGVzOiA2NDAxLTY2NTYKK0dyb3VwIDI2OiAoQmxvY2tzIDI2NjI1LTI3NjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMjY2MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2NjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY2MjctMjY2NTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2NTktMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDY2NTctNjkxMgorR3JvdXAgMjc6IChCbG9ja3MgMjc2NDktMjg2NzIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI3NjQ5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNzY1MC0yNzY1MQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI3NjUyLTI3OTA2CisgIEJsb2NrIGJpdG1hcCBhdCAyNzkwNyAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNzkwOCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMjc5MDktMjc5NDAgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzk0MS0yODY3MgorICBGcmVlIGlub2RlczogNjkxMy03MTY4CitHcm91cCAyODogKEJsb2NrcyAyODY3My0yOTY5NikKKyAgQmxvY2sgYml0bWFwIGF0IDI4NjczICgrMCksIElub2RlIGJpdG1hcCBhdCAyODY3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4Njc1LTI4NzA2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4NzA3LTI5Njk2CisgIEZyZWUgaW5vZGVzOiA3MTY5LTc0MjQKK0dyb3VwIDI5OiAoQmxvY2tzIDI5Njk3LTMwNzIwKQorICBCbG9jayBiaXRtYXAgYXQgMjk2OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5Njk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjk2OTktMjk3MzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk3MzEtMzA3MjAKKyAgRnJlZSBpbm9kZXM6IDc0MjUtNzY4MAorR3JvdXAgMzA6IChCbG9ja3MgMzA3MjEtMzE3NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDcyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzA3MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDcyMy0zMDc1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDc1NS0zMTc0NAorICBGcmVlIGlub2RlczogNzY4MS03OTM2CitHcm91cCAzMTogKEJsb2NrcyAzMTc0NS0zMjc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxNzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMTc0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMxNzQ3LTMxNzc4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMxNzc5LTMyNzY4CisgIEZyZWUgaW5vZGVzOiA3OTM3LTgxOTIKK0dyb3VwIDMyOiAoQmxvY2tzIDMyNzY5LTMzNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMzI3NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzEtMzI4MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI4MDMtMzM3OTIKKyAgRnJlZSBpbm9kZXM6IDgxOTMtODQ0OAorR3JvdXAgMzM6IChCbG9ja3MgMzM3OTMtMzQ4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzc5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzM3OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzc5NS0zMzgyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzgyNy0zNDgxNgorICBGcmVlIGlub2RlczogODQ0OS04NzA0CitHcm91cCAzNDogKEJsb2NrcyAzNDgxNy0zNTg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM0ODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNDgxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM0ODE5LTM0ODUwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM0ODUxLTM1ODQwCisgIEZyZWUgaW5vZGVzOiA4NzA1LTg5NjAKK0dyb3VwIDM1OiAoQmxvY2tzIDM1ODQxLTM2ODY0KQorICBCbG9jayBiaXRtYXAgYXQgMzU4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4NDMtMzU4NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU4NzUtMzY4NjQKKyAgRnJlZSBpbm9kZXM6IDg5NjEtOTIxNgorR3JvdXAgMzY6IChCbG9ja3MgMzY4NjUtMzc4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjg2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzY4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNjg2Ny0zNjg5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNjg5OS0zNzg4OAorICBGcmVlIGlub2RlczogOTIxNy05NDcyCitHcm91cCAzNzogKEJsb2NrcyAzNzg4OS0zODkxMikKKyAgQmxvY2sgYml0bWFwIGF0IDM3ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNzg5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM3ODkxLTM3OTIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM3OTIzLTM4OTEyCisgIEZyZWUgaW5vZGVzOiA5NDczLTk3MjgKK0dyb3VwIDM4OiAoQmxvY2tzIDM4OTEzLTM5OTM2KQorICBCbG9jayBiaXRtYXAgYXQgMzg5MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4OTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg5MTUtMzg5NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg5NDctMzk5MzYKKyAgRnJlZSBpbm9kZXM6IDk3MjktOTk4NAorR3JvdXAgMzk6IChCbG9ja3MgMzk5MzctNDA5NjApCisgIEJsb2NrIGJpdG1hcCBhdCAzOTkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzk5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzOTkzOS0zOTk3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTk3MS00MDk2MAorICBGcmVlIGlub2RlczogOTk4NS0xMDI0MAorR3JvdXAgNDA6IChCbG9ja3MgNDA5NjEtNDE5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDA5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2My00MDk5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MDk5NS00MTk4NAorICBGcmVlIGlub2RlczogMTAyNDEtMTA0OTYKK0dyb3VwIDQxOiAoQmxvY2tzIDQxOTg1LTQzMDA4KQorICBCbG9jayBiaXRtYXAgYXQgNDE5ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQxOTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDE5ODctNDIwMTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDIwMTktNDMwMDgKKyAgRnJlZSBpbm9kZXM6IDEwNDk3LTEwNzUyCitHcm91cCA0MjogKEJsb2NrcyA0MzAwOS00NDAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDQzMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQzMDExLTQzMDQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQzMDQzLTQ0MDMyCisgIEZyZWUgaW5vZGVzOiAxMDc1My0xMTAwOAorR3JvdXAgNDM6IChCbG9ja3MgNDQwMzMtNDUwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCA0NDAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDQwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NDAzNS00NDA2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NDA2Ny00NTA1NgorICBGcmVlIGlub2RlczogMTEwMDktMTEyNjQKK0dyb3VwIDQ0OiAoQmxvY2tzIDQ1MDU3LTQ2MDgwKQorICBCbG9jayBiaXRtYXAgYXQgNDUwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ1MDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDUwNTktNDUwOTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDUwOTEtNDYwODAKKyAgRnJlZSBpbm9kZXM6IDExMjY1LTExNTIwCitHcm91cCA0NTogKEJsb2NrcyA0NjA4MS00NzEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ2MDgzLTQ2MTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ2MTE1LTQ3MTA0CisgIEZyZWUgaW5vZGVzOiAxMTUyMS0xMTc3NgorR3JvdXAgNDY6IChCbG9ja3MgNDcxMDUtNDgxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCA0NzEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDcxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NzEwNy00NzEzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NzEzOS00ODEyOAorICBGcmVlIGlub2RlczogMTE3NzctMTIwMzIKK0dyb3VwIDQ3OiAoQmxvY2tzIDQ4MTI5LTQ5MTUyKQorICBCbG9jayBiaXRtYXAgYXQgNDgxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ4MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDgxMzEtNDgxNjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDgxNjMtNDkxNTIKKyAgRnJlZSBpbm9kZXM6IDEyMDMzLTEyMjg4CitHcm91cCA0ODogKEJsb2NrcyA0OTE1My01MDE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5MTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5MTg3LTUwMTc2CisgIEZyZWUgaW5vZGVzOiAxMjI4OS0xMjU0NAorR3JvdXAgNDk6IChCbG9ja3MgNTAxNzctNTEyMDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUwMTc3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MDE3OC01MDE3OQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUwMTgwLTUwNDM0CisgIEJsb2NrIGJpdG1hcCBhdCA1MDQzNSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA1MDQzNiAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNTA0MzctNTA0NjggKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MDQ2OS01MTIwMAorICBGcmVlIGlub2RlczogMTI1NDUtMTI4MDAKK0dyb3VwIDUwOiAoQmxvY2tzIDUxMjAxLTUyMjI0KQorICBCbG9jayBiaXRtYXAgYXQgNTEyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMDMtNTEyMzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyMzUtNTIyMjQKKyAgRnJlZSBpbm9kZXM6IDEyODAxLTEzMDU2CitHcm91cCA1MTogKEJsb2NrcyA1MjIyNS01MzI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUyMjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MjIyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUyMjI3LTUyMjU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUyMjU5LTUzMjQ4CisgIEZyZWUgaW5vZGVzOiAxMzA1Ny0xMzMxMgorR3JvdXAgNTI6IChCbG9ja3MgNTMyNDktNTQyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1MzI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTMyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MzI1MS01MzI4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzI4My01NDI3MgorICBGcmVlIGlub2RlczogMTMzMTMtMTM1NjgKK0dyb3VwIDUzOiAoQmxvY2tzIDU0MjczLTU1Mjk2KQorICBCbG9jayBiaXRtYXAgYXQgNTQyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU0Mjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTQyNzUtNTQzMDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTQzMDctNTUyOTYKKyAgRnJlZSBpbm9kZXM6IDEzNTY5LTEzODI0CitHcm91cCA1NDogKEJsb2NrcyA1NTI5Ny01NjMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDU1Mjk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1NTI5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU1Mjk5LTU1MzMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU1MzMxLTU2MzIwCisgIEZyZWUgaW5vZGVzOiAxMzgyNS0xNDA4MAorR3JvdXAgNTU6IChCbG9ja3MgNTYzMjEtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTYzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjMyMy01NjM1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjM1NS01NzM0NAorICBGcmVlIGlub2RlczogMTQwODEtMTQzMzYKK0dyb3VwIDU2OiAoQmxvY2tzIDU3MzQ1LTU4MzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTczNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU3MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTczNDctNTczNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTczNzktNTgzNjgKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE0NTkyCitHcm91cCA1NzogKEJsb2NrcyA1ODM2OS01OTM5MikKKyAgQmxvY2sgYml0bWFwIGF0IDU4MzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODM3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU4MzcxLTU4NDAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU4NDAzLTU5MzkyCisgIEZyZWUgaW5vZGVzOiAxNDU5My0xNDg0OAorR3JvdXAgNTg6IChCbG9ja3MgNTkzOTMtNjA0MTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1OTM5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTkzOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1OTM5NS01OTQyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1OTQyNy02MDQxNgorICBGcmVlIGlub2RlczogMTQ4NDktMTUxMDQKK0dyb3VwIDU5OiAoQmxvY2tzIDYwNDE3LTYxNDQwKQorICBCbG9jayBiaXRtYXAgYXQgNjA0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYwNDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjA0MTktNjA0NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjA0NTEtNjE0NDAKKyAgRnJlZSBpbm9kZXM6IDE1MTA1LTE1MzYwCitHcm91cCA2MDogKEJsb2NrcyA2MTQ0MS02MjQ2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDQzLTYxNDc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYxNDc1LTYyNDY0CisgIEZyZWUgaW5vZGVzOiAxNTM2MS0xNTYxNgorR3JvdXAgNjE6IChCbG9ja3MgNjI0NjUtNjM0ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MjQ2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjI0NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MjQ2Ny02MjQ5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MjQ5OS02MzQ4OAorICBGcmVlIGlub2RlczogMTU2MTctMTU4NzIKK0dyb3VwIDYyOiAoQmxvY2tzIDYzNDg5LTY0NTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjM0ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYzNDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjM0OTEtNjM1MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjM1MjMtNjQ1MTIKKyAgRnJlZSBpbm9kZXM6IDE1ODczLTE2MTI4CitHcm91cCA2MzogKEJsb2NrcyA2NDUxMy02NTUzNSkKKyAgQmxvY2sgYml0bWFwIGF0IDY0NTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA2NDUxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY0NTE1LTY0NTQ2ICgrMikKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY0NTQ3LTY1NTM1CisgIEZyZWUgaW5vZGVzOiAxNjEyOS0xNjM4NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21rZTJmcyAtcSAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0IHRlc3QuaW1nIDY1NTM2CityZXNpemUyZnMgdGVzdC5pbWcgMTYzODQKK1Jlc2l6aW5nIHRoZSBmaWxlc3lzdGVtIG9uIHRlc3QuaW1nIHRvIDE2Mzg0ICgxaykgYmxvY2tzLgorVGhlIGZpbGVzeXN0ZW0gb24gdGVzdC5pbWcgaXMgbm93IDE2Mzg0IGJsb2NrcyBsb25nLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MDk2IGZpbGVzICgwLjAlIG5vbi1jb250aWd1b3VzKSwgMjEwNy8xNjM4NCBibG9ja3MKK0V4aXQgc3RhdHVzIGlzIDAKK2R1bXBlMmZzIHRlc3QuaW1nCitGaWxlc3lzdGVtIHZvbHVtZSBuYW1lOiAgIDxub25lPgorTGFzdCBtb3VudGVkIG9uOiAgICAgICAgICA8bm90IGF2YWlsYWJsZT4KK0ZpbGVzeXN0ZW0gbWFnaWMgbnVtYmVyOiAgMHhFRjUzCitGaWxlc3lzdGVtIHJldmlzaW9uICM6ICAgIDEgKGR5bmFtaWMpCitGaWxlc3lzdGVtIGZlYXR1cmVzOiAgICAgIGV4dF9hdHRyIHJlc2l6ZV9pbm9kZSBkaXJfaW5kZXggZmlsZXR5cGUgc3BhcnNlX3N1cGVyCitEZWZhdWx0IG1vdW50IG9wdGlvbnM6ICAgIChub25lKQorRmlsZXN5c3RlbSBzdGF0ZTogICAgICAgICBjbGVhbgorRXJyb3JzIGJlaGF2aW9yOiAgICAgICAgICBDb250aW51ZQorRmlsZXN5c3RlbSBPUyB0eXBlOiAgICAgICBMaW51eAorSW5vZGUgY291bnQ6ICAgICAgICAgICAgICA0MDk2CitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE2Mzg0CitSZXNlcnZlZCBibG9jayBjb3VudDogICAgIDgxOQorRnJlZSBibG9ja3M6ICAgICAgICAgICAgICAxNDI3NworRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA0MDg1CitGaXJzdCBibG9jazogICAgICAgICAgICAgIDEKK0Jsb2NrIHNpemU6ICAgICAgICAgICAgICAgMTAyNAorRnJhZ21lbnQgc2l6ZTogICAgICAgICAgICAxMDI0CitSZXNlcnZlZCBHRFQgYmxvY2tzOiAgICAgIDI1NgorQmxvY2tzIHBlciBncm91cDogICAgICAgICAxMDI0CitGcmFnbWVudHMgcGVyIGdyb3VwOiAgICAgIDEwMjQKK0lub2RlcyBwZXIgZ3JvdXA6ICAgICAgICAgMjU2CitJbm9kZSBibG9ja3MgcGVyIGdyb3VwOiAgIDMyCitNb3VudCBjb3VudDogICAgICAgICAgICAgIDAKK0NoZWNrIGludGVydmFsOiAgICAgICAgICAgMTU1NTIwMDAgKDYgbW9udGhzKQorUmVzZXJ2ZWQgYmxvY2tzIHVpZDogICAgICAwCitSZXNlcnZlZCBibG9ja3MgZ2lkOiAgICAgIDAKK0ZpcnN0IGlub2RlOiAgICAgICAgICAgICAgMTEKK0lub2RlIHNpemU6CSAgICAgICAgICAxMjgKK0RlZmF1bHQgZGlyZWN0b3J5IGhhc2g6ICAgaGFsZl9tZDQKKworCitHcm91cCAwOiAoQmxvY2tzIDEtMTAyNCkKKyAgUHJpbWFyeSBzdXBlcmJsb2NrIGF0IDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDItMgorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMtMjU4CisgIEJsb2NrIGJpdG1hcCBhdCAyNjAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgMjYxICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAyNjItMjkzICgrMjYxKQorICA3MTggZnJlZSBibG9ja3MsIDI0NSBmcmVlIGlub2RlcywgMiBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjU5LCAzMDgtMTAyNAorICBGcmVlIGlub2RlczogMTItMjU2CitHcm91cCAxOiAoQmxvY2tzIDEwMjUtMjA0OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMTAyNSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgMTAyNi0xMDI2CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMTAyNy0xMjgyCisgIEJsb2NrIGJpdG1hcCBhdCAxMjg0ICgrMjU5KSwgSW5vZGUgYml0bWFwIGF0IDEyODUgKCsyNjApCisgIElub2RlIHRhYmxlIGF0IDEyODYtMTMxNyAoKzI2MSkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyODMsIDEzMTgtMjA0OAorICBGcmVlIGlub2RlczogMjU3LTUxMgorR3JvdXAgMjogKEJsb2NrcyAyMDQ5LTMwNzIpCisgIEJsb2NrIGJpdG1hcCBhdCAyMDQ5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA1MS0yMDgyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIwODMtMzA3MgorICBGcmVlIGlub2RlczogNTEzLTc2OAorR3JvdXAgMzogKEJsb2NrcyAzMDczLTQwOTYpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDMwNzMsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDMwNzQtMzA3NAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDMwNzUtMzMzMAorICBCbG9jayBiaXRtYXAgYXQgMzMzMiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCAzMzMzICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAzMzM0LTMzNjUgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzMxLCAzMzY2LTQwOTYKKyAgRnJlZSBpbm9kZXM6IDc2OS0xMDI0CitHcm91cCA0OiAoQmxvY2tzIDQwOTctNTEyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDQwOTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk5LTQxMzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDEzMS01MTIwCisgIEZyZWUgaW5vZGVzOiAxMDI1LTEyODAKK0dyb3VwIDU6IChCbG9ja3MgNTEyMS02MTQ0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA1MTIxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MTIyLTUxMjIKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA1MTIzLTUzNzgKKyAgQmxvY2sgYml0bWFwIGF0IDUzODAgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgNTM4MSAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgNTM4Mi01NDEzICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTM3OSwgNTQxNC02MTQ0CisgIEZyZWUgaW5vZGVzOiAxMjgxLTE1MzYKK0dyb3VwIDY6IChCbG9ja3MgNjE0NS03MTY4KQorICBCbG9jayBiaXRtYXAgYXQgNjE0NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDctNjE3OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MTc5LTcxNjgKKyAgRnJlZSBpbm9kZXM6IDE1MzctMTc5MgorR3JvdXAgNzogKEJsb2NrcyA3MTY5LTgxOTIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDcxNjksIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDcxNzAtNzE3MAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDcxNzEtNzQyNgorICBCbG9jayBiaXRtYXAgYXQgNzQyOCAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA3NDI5ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA3NDMwLTc0NjEgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDI3LCA3NDYyLTgxOTIKKyAgRnJlZSBpbm9kZXM6IDE3OTMtMjA0OAorR3JvdXAgODogKEJsb2NrcyA4MTkzLTkyMTYpCisgIEJsb2NrIGJpdG1hcCBhdCA4MTkzICgrMCksIElub2RlIGJpdG1hcCBhdCA4MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5NS04MjI2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgyMjctOTIxNgorICBGcmVlIGlub2RlczogMjA0OS0yMzA0CitHcm91cCA5OiAoQmxvY2tzIDkyMTctMTAyNDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDkyMTcsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDkyMTgtOTIxOAorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDkyMTktOTQ3NAorICBCbG9jayBiaXRtYXAgYXQgOTQ3NiAoKzI1OSksIElub2RlIGJpdG1hcCBhdCA5NDc3ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCA5NDc4LTk1MDkgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NDc1LCA5NTEwLTEwMjQwCisgIEZyZWUgaW5vZGVzOiAyMzA1LTI1NjAKK0dyb3VwIDEwOiAoQmxvY2tzIDEwMjQxLTExMjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTAyNDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAyNDMtMTAyNzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNzUtMTEyNjQKKyAgRnJlZSBpbm9kZXM6IDI1NjEtMjgxNgorR3JvdXAgMTE6IChCbG9ja3MgMTEyNjUtMTIyODgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEyNjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2Ny0xMTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTI5OS0xMjI4OAorICBGcmVlIGlub2RlczogMjgxNy0zMDcyCitHcm91cCAxMjogKEJsb2NrcyAxMjI4OS0xMzMxMikKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMjkxLTEyMzIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMzIzLTEzMzEyCisgIEZyZWUgaW5vZGVzOiAzMDczLTMzMjgKK0dyb3VwIDEzOiAoQmxvY2tzIDEzMzEzLTE0MzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTMzMTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMzE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTUtMTMzNDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMzNDctMTQzMzYKKyAgRnJlZSBpbm9kZXM6IDMzMjktMzU4NAorR3JvdXAgMTQ6IChCbG9ja3MgMTQzMzctMTUzNjApCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQzMzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDMzOS0xNDM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDM3MS0xNTM2MAorICBGcmVlIGlub2RlczogMzU4NS0zODQwCitHcm91cCAxNTogKEJsb2NrcyAxNTM2MS0xNjM4MykKKyAgQmxvY2sgYml0bWFwIGF0IDE1MzYxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MzYzLTE1Mzk0ICgrMikKKyAgOTg5IGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1Mzk1LTE2MzgzCisgIEZyZWUgaW5vZGVzOiAzODQxLTQwOTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZXNpemUyZnMgdGVzdC5pbWcgMTY1NTM2CitSZXNpemluZyB0aGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyB0byAxNjU1MzYgKDFrKSBibG9ja3MuCitUaGUgZmlsZXN5c3RlbSBvbiB0ZXN0LmltZyBpcyBub3cgMTY1NTM2IGJsb2NrcyBsb25nLgorCitGaWxlc3lzdGVtIGRpZCBub3QgaGF2ZSBhIFVVSUQ7IGdlbmVyYXRpbmcgb25lLgorCitQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKK1Bhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorUGFzcyAzOiBDaGVja2luZyBkaXJlY3RvcnkgY29ubmVjdGl2aXR5CitQYXNzIDQ6IENoZWNraW5nIHJlZmVyZW5jZSBjb3VudHMKK1Bhc3MgNTogQ2hlY2tpbmcgZ3JvdXAgc3VtbWFyeSBpbmZvcm1hdGlvbgordGVzdF9maWxlc3lzOiAxMS80MTQ3MiBmaWxlcyAoMC4wJSBub24tY29udGlndW91cyksIDgzNjEvMTY1NTM2IGJsb2NrcworRXhpdCBzdGF0dXMgaXMgMAorZHVtcGUyZnMgdGVzdC5pbWcKK0ZpbGVzeXN0ZW0gdm9sdW1lIG5hbWU6ICAgPG5vbmU+CitMYXN0IG1vdW50ZWQgb246ICAgICAgICAgIDxub3QgYXZhaWxhYmxlPgorRmlsZXN5c3RlbSBtYWdpYyBudW1iZXI6ICAweEVGNTMKK0ZpbGVzeXN0ZW0gcmV2aXNpb24gIzogICAgMSAoZHluYW1pYykKK0ZpbGVzeXN0ZW0gZmVhdHVyZXM6ICAgICAgZXh0X2F0dHIgcmVzaXplX2lub2RlIGRpcl9pbmRleCBmaWxldHlwZSBzcGFyc2Vfc3VwZXIKK0RlZmF1bHQgbW91bnQgb3B0aW9uczogICAgKG5vbmUpCitGaWxlc3lzdGVtIHN0YXRlOiAgICAgICAgIGNsZWFuCitFcnJvcnMgYmVoYXZpb3I6ICAgICAgICAgIENvbnRpbnVlCitGaWxlc3lzdGVtIE9TIHR5cGU6ICAgICAgIExpbnV4CitJbm9kZSBjb3VudDogICAgICAgICAgICAgIDQxNDcyCitCbG9jayBjb3VudDogICAgICAgICAgICAgIDE2NTUzNgorUmVzZXJ2ZWQgYmxvY2sgY291bnQ6ICAgICA4Mjc0CitGcmVlIGJsb2NrczogICAgICAgICAgICAgIDE1NzE3NQorRnJlZSBpbm9kZXM6ICAgICAgICAgICAgICA0MTQ2MQorRmlyc3QgYmxvY2s6ICAgICAgICAgICAgICAxCitCbG9jayBzaXplOiAgICAgICAgICAgICAgIDEwMjQKK0ZyYWdtZW50IHNpemU6ICAgICAgICAgICAgMTAyNAorUmVzZXJ2ZWQgR0RUIGJsb2NrczogICAgICAyNTEKK0Jsb2NrcyBwZXIgZ3JvdXA6ICAgICAgICAgMTAyNAorRnJhZ21lbnRzIHBlciBncm91cDogICAgICAxMDI0CitJbm9kZXMgcGVyIGdyb3VwOiAgICAgICAgIDI1NgorSW5vZGUgYmxvY2tzIHBlciBncm91cDogICAzMgorTW91bnQgY291bnQ6ICAgICAgICAgICAgICAwCitDaGVjayBpbnRlcnZhbDogICAgICAgICAgIDE1NTUyMDAwICg2IG1vbnRocykKK1Jlc2VydmVkIGJsb2NrcyB1aWQ6ICAgICAgMAorUmVzZXJ2ZWQgYmxvY2tzIGdpZDogICAgICAwCitGaXJzdCBpbm9kZTogICAgICAgICAgICAgIDExCitJbm9kZSBzaXplOgkgICAgICAgICAgMTI4CitEZWZhdWx0IGRpcmVjdG9yeSBoYXNoOiAgIGhhbGZfbWQ0CisKKworR3JvdXAgMDogKEJsb2NrcyAxLTEwMjQpCisgIFByaW1hcnkgc3VwZXJibG9jayBhdCAxLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyLTcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA4LTI1OAorICBCbG9jayBiaXRtYXAgYXQgMjYwICgrMjU5KSwgSW5vZGUgYml0bWFwIGF0IDI2MSAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgMjYyLTI5MyAoKzI2MSkKKyAgNzE4IGZyZWUgYmxvY2tzLCAyNDUgZnJlZSBpbm9kZXMsIDIgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1OSwgMzA4LTEwMjQKKyAgRnJlZSBpbm9kZXM6IDEyLTI1NgorR3JvdXAgMTogKEJsb2NrcyAxMDI1LTIwNDgpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDEwMjUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEwMjYtMTAzMQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDEwMzItMTI4MgorICBCbG9jayBiaXRtYXAgYXQgMTI4NCAoKzI1OSksIElub2RlIGJpdG1hcCBhdCAxMjg1ICgrMjYwKQorICBJbm9kZSB0YWJsZSBhdCAxMjg2LTEzMTcgKCsyNjEpCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjgzLCAxMzE4LTIwNDgKKyAgRnJlZSBpbm9kZXM6IDI1Ny01MTIKK0dyb3VwIDI6IChCbG9ja3MgMjA0OS0zMDcyKQorICBCbG9jayBiaXRtYXAgYXQgMjA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjA1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIwNTEtMjA4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMDgzLTMwNzIKKyAgRnJlZSBpbm9kZXM6IDUxMy03NjgKK0dyb3VwIDM6IChCbG9ja3MgMzA3My00MDk2KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAzMDczLCBHcm91cCBkZXNjcmlwdG9ycyBhdCAzMDc0LTMwNzkKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAzMDgwLTMzMzAKKyAgQmxvY2sgYml0bWFwIGF0IDMzMzIgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgMzMzMyAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgMzMzNC0zMzY1ICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzMzMSwgMzM2Ni00MDk2CisgIEZyZWUgaW5vZGVzOiA3NjktMTAyNAorR3JvdXAgNDogKEJsb2NrcyA0MDk3LTUxMjApCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MDk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDA5OS00MTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQxMzEtNTEyMAorICBGcmVlIGlub2RlczogMTAyNS0xMjgwCitHcm91cCA1OiAoQmxvY2tzIDUxMjEtNjE0NCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgNTEyMSwgR3JvdXAgZGVzY3JpcHRvcnMgYXQgNTEyMi01MTI3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgNTEyOC01Mzc4CisgIEJsb2NrIGJpdG1hcCBhdCA1MzgwICgrMjU5KSwgSW5vZGUgYml0bWFwIGF0IDUzODEgKCsyNjApCisgIElub2RlIHRhYmxlIGF0IDUzODItNTQxMyAoKzI2MSkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUzNzksIDU0MTQtNjE0NAorICBGcmVlIGlub2RlczogMTI4MS0xNTM2CitHcm91cCA2OiAoQmxvY2tzIDYxNDUtNzE2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYxNDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MTQ3LTYxNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjE3OS03MTY4CisgIEZyZWUgaW5vZGVzOiAxNTM3LTE3OTIKK0dyb3VwIDc6IChCbG9ja3MgNzE2OS04MTkyKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA3MTY5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA3MTcwLTcxNzUKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA3MTc2LTc0MjYKKyAgQmxvY2sgYml0bWFwIGF0IDc0MjggKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgNzQyOSAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgNzQzMC03NDYxICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzQyNywgNzQ2Mi04MTkyCisgIEZyZWUgaW5vZGVzOiAxNzkzLTIwNDgKK0dyb3VwIDg6IChCbG9ja3MgODE5My05MjE2KQorICBCbG9jayBiaXRtYXAgYXQgODE5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODE5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDgxOTUtODIyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MjI3LTkyMTYKKyAgRnJlZSBpbm9kZXM6IDIwNDktMjMwNAorR3JvdXAgOTogKEJsb2NrcyA5MjE3LTEwMjQwKQorICBCYWNrdXAgc3VwZXJibG9jayBhdCA5MjE3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA5MjE4LTkyMjMKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCA5MjI0LTk0NzQKKyAgQmxvY2sgYml0bWFwIGF0IDk0NzYgKCsyNTkpLCBJbm9kZSBiaXRtYXAgYXQgOTQ3NyAoKzI2MCkKKyAgSW5vZGUgdGFibGUgYXQgOTQ3OC05NTA5ICgrMjYxKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQ3NSwgOTUxMC0xMDI0MAorICBGcmVlIGlub2RlczogMjMwNS0yNTYwCitHcm91cCAxMDogKEJsb2NrcyAxMDI0MS0xMTI2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDI0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQzLTEwMjc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMjc1LTExMjY0CisgIEZyZWUgaW5vZGVzOiAyNTYxLTI4MTYKK0dyb3VwIDExOiAoQmxvY2tzIDExMjY1LTEyMjg4KQorICBCbG9jayBiaXRtYXAgYXQgMTEyNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEyNjctMTEyOTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTEyOTktMTIyODgKKyAgRnJlZSBpbm9kZXM6IDI4MTctMzA3MgorR3JvdXAgMTI6IChCbG9ja3MgMTIyODktMTMzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjI4OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyOTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjI5MS0xMjMyMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjMyMy0xMzMxMgorICBGcmVlIGlub2RlczogMzA3My0zMzI4CitHcm91cCAxMzogKEJsb2NrcyAxMzMxMy0xNDMzNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzMxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMzE1LTEzMzQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMzQ3LTE0MzM2CisgIEZyZWUgaW5vZGVzOiAzMzI5LTM1ODQKK0dyb3VwIDE0OiAoQmxvY2tzIDE0MzM3LTE1MzYwKQorICBCbG9jayBiaXRtYXAgYXQgMTQzMzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQzMzktMTQzNzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzNzEtMTUzNjAKKyAgRnJlZSBpbm9kZXM6IDM1ODUtMzg0MAorR3JvdXAgMTU6IChCbG9ja3MgMTUzNjEtMTYzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTM2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUzNjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM2My0xNTM5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTM5NS0xNjM4NAorICBGcmVlIGlub2RlczogMzg0MS00MDk2CitHcm91cCAxNjogKEJsb2NrcyAxNjM4NS0xNzQwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjM4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2Mzg3LTE2NDE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2NDE5LTE3NDA4CisgIEZyZWUgaW5vZGVzOiA0MDk3LTQzNTIKK0dyb3VwIDE3OiAoQmxvY2tzIDE3NDA5LTE4NDMyKQorICBCbG9jayBiaXRtYXAgYXQgMTc0MDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE3NDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTc0MTEtMTc0NDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTc0NDMtMTg0MzIKKyAgRnJlZSBpbm9kZXM6IDQzNTMtNDYwOAorR3JvdXAgMTg6IChCbG9ja3MgMTg0MzMtMTk0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxODQzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTg0MzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxODQzNS0xODQ2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxODQ2Ny0xOTQ1NgorICBGcmVlIGlub2RlczogNDYwOS00ODY0CitHcm91cCAxOTogKEJsb2NrcyAxOTQ1Ny0yMDQ4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE5NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxOTQ1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE5NDU5LTE5NDkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE5NDkxLTIwNDgwCisgIEZyZWUgaW5vZGVzOiA0ODY1LTUxMjAKK0dyb3VwIDIwOiAoQmxvY2tzIDIwNDgxLTIxNTA0KQorICBCbG9jayBiaXRtYXAgYXQgMjA0ODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIwNDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjA0ODMtMjA1MTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjA1MTUtMjE1MDQKKyAgRnJlZSBpbm9kZXM6IDUxMjEtNTM3NgorR3JvdXAgMjE6IChCbG9ja3MgMjE1MDUtMjI1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAyMTUwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjE1MDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyMTUwNy0yMTUzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyMTUzOS0yMjUyOAorICBGcmVlIGlub2RlczogNTM3Ny01NjMyCitHcm91cCAyMjogKEJsb2NrcyAyMjUyOS0yMzU1MikKKyAgQmxvY2sgYml0bWFwIGF0IDIyNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAyMjUzMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDIyNTMxLTIyNTYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDIyNTYzLTIzNTUyCisgIEZyZWUgaW5vZGVzOiA1NjMzLTU4ODgKK0dyb3VwIDIzOiAoQmxvY2tzIDIzNTUzLTI0NTc2KQorICBCbG9jayBiaXRtYXAgYXQgMjM1NTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDIzNTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjM1NTUtMjM1ODYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjM1ODctMjQ1NzYKKyAgRnJlZSBpbm9kZXM6IDU4ODktNjE0NAorR3JvdXAgMjQ6IChCbG9ja3MgMjQ1NzctMjU2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAyNDU3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMjQ1NzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAyNDU3OS0yNDYxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNDYxMS0yNTYwMAorICBGcmVlIGlub2RlczogNjE0NS02NDAwCitHcm91cCAyNTogKEJsb2NrcyAyNTYwMS0yNjYyNCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgMjU2MDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDI1NjAyLTI1NjA3CisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgMjU2MDgtMjU4NTgKKyAgQmxvY2sgYml0bWFwIGF0IDI1ODU5ICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDI1ODYwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAyNTg2MS0yNTg5MiAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI1ODkzLTI2NjI0CisgIEZyZWUgaW5vZGVzOiA2NDAxLTY2NTYKK0dyb3VwIDI2OiAoQmxvY2tzIDI2NjI1LTI3NjQ4KQorICBCbG9jayBiaXRtYXAgYXQgMjY2MjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI2NjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjY2MjctMjY2NTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjY2NTktMjc2NDgKKyAgRnJlZSBpbm9kZXM6IDY2NTctNjkxMgorR3JvdXAgMjc6IChCbG9ja3MgMjc2NDktMjg2NzIpCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDI3NjQ5LCBHcm91cCBkZXNjcmlwdG9ycyBhdCAyNzY1MC0yNzY1NQorICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDI3NjU2LTI3OTA2CisgIEJsb2NrIGJpdG1hcCBhdCAyNzkwNyAoKzI1OCksIElub2RlIGJpdG1hcCBhdCAyNzkwOCAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgMjc5MDktMjc5NDAgKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAyNzk0MS0yODY3MgorICBGcmVlIGlub2RlczogNjkxMy03MTY4CitHcm91cCAyODogKEJsb2NrcyAyODY3My0yOTY5NikKKyAgQmxvY2sgYml0bWFwIGF0IDI4NjczICgrMCksIElub2RlIGJpdG1hcCBhdCAyODY3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDI4Njc1LTI4NzA2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDI4NzA3LTI5Njk2CisgIEZyZWUgaW5vZGVzOiA3MTY5LTc0MjQKK0dyb3VwIDI5OiAoQmxvY2tzIDI5Njk3LTMwNzIwKQorICBCbG9jayBiaXRtYXAgYXQgMjk2OTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDI5Njk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMjk2OTktMjk3MzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMjk3MzEtMzA3MjAKKyAgRnJlZSBpbm9kZXM6IDc0MjUtNzY4MAorR3JvdXAgMzA6IChCbG9ja3MgMzA3MjEtMzE3NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAzMDcyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzA3MjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMDcyMy0zMDc1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMDc1NS0zMTc0NAorICBGcmVlIGlub2RlczogNzY4MS03OTM2CitHcm91cCAzMTogKEJsb2NrcyAzMTc0NS0zMjc2OCkKKyAgQmxvY2sgYml0bWFwIGF0IDMxNzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAzMTc0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDMxNzQ3LTMxNzc4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDMxNzc5LTMyNzY4CisgIEZyZWUgaW5vZGVzOiA3OTM3LTgxOTIKK0dyb3VwIDMyOiAoQmxvY2tzIDMyNzY5LTMzNzkyKQorICBCbG9jayBiaXRtYXAgYXQgMzI3NjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDMyNzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzI3NzEtMzI4MDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzI4MDMtMzM3OTIKKyAgRnJlZSBpbm9kZXM6IDgxOTMtODQ0OAorR3JvdXAgMzM6IChCbG9ja3MgMzM3OTMtMzQ4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAzMzc5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzM3OTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzMzc5NS0zMzgyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzMzgyNy0zNDgxNgorICBGcmVlIGlub2RlczogODQ0OS04NzA0CitHcm91cCAzNDogKEJsb2NrcyAzNDgxNy0zNTg0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDM0ODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNDgxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM0ODE5LTM0ODUwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM0ODUxLTM1ODQwCisgIEZyZWUgaW5vZGVzOiA4NzA1LTg5NjAKK0dyb3VwIDM1OiAoQmxvY2tzIDM1ODQxLTM2ODY0KQorICBCbG9jayBiaXRtYXAgYXQgMzU4NDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM1ODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzU4NDMtMzU4NzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzU4NzUtMzY4NjQKKyAgRnJlZSBpbm9kZXM6IDg5NjEtOTIxNgorR3JvdXAgMzY6IChCbG9ja3MgMzY4NjUtMzc4ODgpCisgIEJsb2NrIGJpdG1hcCBhdCAzNjg2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzY4NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzNjg2Ny0zNjg5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzNjg5OS0zNzg4OAorICBGcmVlIGlub2RlczogOTIxNy05NDcyCitHcm91cCAzNzogKEJsb2NrcyAzNzg4OS0zODkxMikKKyAgQmxvY2sgYml0bWFwIGF0IDM3ODg5ICgrMCksIElub2RlIGJpdG1hcCBhdCAzNzg5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDM3ODkxLTM3OTIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDM3OTIzLTM4OTEyCisgIEZyZWUgaW5vZGVzOiA5NDczLTk3MjgKK0dyb3VwIDM4OiAoQmxvY2tzIDM4OTEzLTM5OTM2KQorICBCbG9jayBiaXRtYXAgYXQgMzg5MTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDM4OTE0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMzg5MTUtMzg5NDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMzg5NDctMzk5MzYKKyAgRnJlZSBpbm9kZXM6IDk3MjktOTk4NAorR3JvdXAgMzk6IChCbG9ja3MgMzk5MzctNDA5NjApCisgIEJsb2NrIGJpdG1hcCBhdCAzOTkzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMzk5MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAzOTkzOS0zOTk3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAzOTk3MS00MDk2MAorICBGcmVlIGlub2RlczogOTk4NS0xMDI0MAorR3JvdXAgNDA6IChCbG9ja3MgNDA5NjEtNDE5ODQpCisgIEJsb2NrIGJpdG1hcCBhdCA0MDk2MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDA5NjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0MDk2My00MDk5NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0MDk5NS00MTk4NAorICBGcmVlIGlub2RlczogMTAyNDEtMTA0OTYKK0dyb3VwIDQxOiAoQmxvY2tzIDQxOTg1LTQzMDA4KQorICBCbG9jayBiaXRtYXAgYXQgNDE5ODUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQxOTg2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDE5ODctNDIwMTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDIwMTktNDMwMDgKKyAgRnJlZSBpbm9kZXM6IDEwNDk3LTEwNzUyCitHcm91cCA0MjogKEJsb2NrcyA0MzAwOS00NDAzMikKKyAgQmxvY2sgYml0bWFwIGF0IDQzMDA5ICgrMCksIElub2RlIGJpdG1hcCBhdCA0MzAxMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQzMDExLTQzMDQyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQzMDQzLTQ0MDMyCisgIEZyZWUgaW5vZGVzOiAxMDc1My0xMTAwOAorR3JvdXAgNDM6IChCbG9ja3MgNDQwMzMtNDUwNTYpCisgIEJsb2NrIGJpdG1hcCBhdCA0NDAzMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDQwMzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NDAzNS00NDA2NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NDA2Ny00NTA1NgorICBGcmVlIGlub2RlczogMTEwMDktMTEyNjQKK0dyb3VwIDQ0OiAoQmxvY2tzIDQ1MDU3LTQ2MDgwKQorICBCbG9jayBiaXRtYXAgYXQgNDUwNTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ1MDU4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDUwNTktNDUwOTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDUwOTEtNDYwODAKKyAgRnJlZSBpbm9kZXM6IDExMjY1LTExNTIwCitHcm91cCA0NTogKEJsb2NrcyA0NjA4MS00NzEwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDQ2MDgxICgrMCksIElub2RlIGJpdG1hcCBhdCA0NjA4MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ2MDgzLTQ2MTE0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ2MTE1LTQ3MTA0CisgIEZyZWUgaW5vZGVzOiAxMTUyMS0xMTc3NgorR3JvdXAgNDY6IChCbG9ja3MgNDcxMDUtNDgxMjgpCisgIEJsb2NrIGJpdG1hcCBhdCA0NzEwNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNDcxMDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA0NzEwNy00NzEzOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA0NzEzOS00ODEyOAorICBGcmVlIGlub2RlczogMTE3NzctMTIwMzIKK0dyb3VwIDQ3OiAoQmxvY2tzIDQ4MTI5LTQ5MTUyKQorICBCbG9jayBiaXRtYXAgYXQgNDgxMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDQ4MTMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNDgxMzEtNDgxNjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNDgxNjMtNDkxNTIKKyAgRnJlZSBpbm9kZXM6IDEyMDMzLTEyMjg4CitHcm91cCA0ODogKEJsb2NrcyA0OTE1My01MDE3NikKKyAgQmxvY2sgYml0bWFwIGF0IDQ5MTUzICgrMCksIElub2RlIGJpdG1hcCBhdCA0OTE1NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDQ5MTU1LTQ5MTg2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDQ5MTg3LTUwMTc2CisgIEZyZWUgaW5vZGVzOiAxMjI4OS0xMjU0NAorR3JvdXAgNDk6IChCbG9ja3MgNTAxNzctNTEyMDApCisgIEJhY2t1cCBzdXBlcmJsb2NrIGF0IDUwMTc3LCBHcm91cCBkZXNjcmlwdG9ycyBhdCA1MDE3OC01MDE4MworICBSZXNlcnZlZCBHRFQgYmxvY2tzIGF0IDUwMTg0LTUwNDM0CisgIEJsb2NrIGJpdG1hcCBhdCA1MDQzNSAoKzI1OCksIElub2RlIGJpdG1hcCBhdCA1MDQzNiAoKzI1OSkKKyAgSW5vZGUgdGFibGUgYXQgNTA0MzctNTA0NjggKCsyNjApCisgIDczMiBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MDQ2OS01MTIwMAorICBGcmVlIGlub2RlczogMTI1NDUtMTI4MDAKK0dyb3VwIDUwOiAoQmxvY2tzIDUxMjAxLTUyMjI0KQorICBCbG9jayBiaXRtYXAgYXQgNTEyMDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDUxMjAyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTEyMDMtNTEyMzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTEyMzUtNTIyMjQKKyAgRnJlZSBpbm9kZXM6IDEyODAxLTEzMDU2CitHcm91cCA1MTogKEJsb2NrcyA1MjIyNS01MzI0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDUyMjI1ICgrMCksIElub2RlIGJpdG1hcCBhdCA1MjIyNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDUyMjI3LTUyMjU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDUyMjU5LTUzMjQ4CisgIEZyZWUgaW5vZGVzOiAxMzA1Ny0xMzMxMgorR3JvdXAgNTI6IChCbG9ja3MgNTMyNDktNTQyNzIpCisgIEJsb2NrIGJpdG1hcCBhdCA1MzI0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTMyNTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1MzI1MS01MzI4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1MzI4My01NDI3MgorICBGcmVlIGlub2RlczogMTMzMTMtMTM1NjgKK0dyb3VwIDUzOiAoQmxvY2tzIDU0MjczLTU1Mjk2KQorICBCbG9jayBiaXRtYXAgYXQgNTQyNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU0Mjc0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTQyNzUtNTQzMDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTQzMDctNTUyOTYKKyAgRnJlZSBpbm9kZXM6IDEzNTY5LTEzODI0CitHcm91cCA1NDogKEJsb2NrcyA1NTI5Ny01NjMyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDU1Mjk3ICgrMCksIElub2RlIGJpdG1hcCBhdCA1NTI5OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU1Mjk5LTU1MzMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU1MzMxLTU2MzIwCisgIEZyZWUgaW5vZGVzOiAxMzgyNS0xNDA4MAorR3JvdXAgNTU6IChCbG9ja3MgNTYzMjEtNTczNDQpCisgIEJsb2NrIGJpdG1hcCBhdCA1NjMyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTYzMjIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1NjMyMy01NjM1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1NjM1NS01NzM0NAorICBGcmVlIGlub2RlczogMTQwODEtMTQzMzYKK0dyb3VwIDU2OiAoQmxvY2tzIDU3MzQ1LTU4MzY4KQorICBCbG9jayBiaXRtYXAgYXQgNTczNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDU3MzQ2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNTczNDctNTczNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNTczNzktNTgzNjgKKyAgRnJlZSBpbm9kZXM6IDE0MzM3LTE0NTkyCitHcm91cCA1NzogKEJsb2NrcyA1ODM2OS01OTM5MikKKyAgQmxvY2sgYml0bWFwIGF0IDU4MzY5ICgrMCksIElub2RlIGJpdG1hcCBhdCA1ODM3MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDU4MzcxLTU4NDAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDU4NDAzLTU5MzkyCisgIEZyZWUgaW5vZGVzOiAxNDU5My0xNDg0OAorR3JvdXAgNTg6IChCbG9ja3MgNTkzOTMtNjA0MTYpCisgIEJsb2NrIGJpdG1hcCBhdCA1OTM5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNTkzOTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA1OTM5NS01OTQyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA1OTQyNy02MDQxNgorICBGcmVlIGlub2RlczogMTQ4NDktMTUxMDQKK0dyb3VwIDU5OiAoQmxvY2tzIDYwNDE3LTYxNDQwKQorICBCbG9jayBiaXRtYXAgYXQgNjA0MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYwNDE4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjA0MTktNjA0NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjA0NTEtNjE0NDAKKyAgRnJlZSBpbm9kZXM6IDE1MTA1LTE1MzYwCitHcm91cCA2MDogKEJsb2NrcyA2MTQ0MS02MjQ2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDYxNDQxICgrMCksIElub2RlIGJpdG1hcCBhdCA2MTQ0MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDYxNDQzLTYxNDc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDYxNDc1LTYyNDY0CisgIEZyZWUgaW5vZGVzOiAxNTM2MS0xNTYxNgorR3JvdXAgNjE6IChCbG9ja3MgNjI0NjUtNjM0ODgpCisgIEJsb2NrIGJpdG1hcCBhdCA2MjQ2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjI0NjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2MjQ2Ny02MjQ5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2MjQ5OS02MzQ4OAorICBGcmVlIGlub2RlczogMTU2MTctMTU4NzIKK0dyb3VwIDYyOiAoQmxvY2tzIDYzNDg5LTY0NTEyKQorICBCbG9jayBiaXRtYXAgYXQgNjM0ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDYzNDkwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjM0OTEtNjM1MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjM1MjMtNjQ1MTIKKyAgRnJlZSBpbm9kZXM6IDE1ODczLTE2MTI4CitHcm91cCA2MzogKEJsb2NrcyA2NDUxMy02NTUzNikKKyAgQmxvY2sgYml0bWFwIGF0IDY0NTEzICgrMCksIElub2RlIGJpdG1hcCBhdCA2NDUxNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY0NTE1LTY0NTQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY0NTQ3LTY1NTM2CisgIEZyZWUgaW5vZGVzOiAxNjEyOS0xNjM4NAorR3JvdXAgNjQ6IChCbG9ja3MgNjU1MzctNjY1NjApCisgIEJsb2NrIGJpdG1hcCBhdCA2NTUzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjU1MzggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2NTUzOS02NTU3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2NTU3MS02NjU2MAorICBGcmVlIGlub2RlczogMTYzODUtMTY2NDAKK0dyb3VwIDY1OiAoQmxvY2tzIDY2NTYxLTY3NTg0KQorICBCbG9jayBiaXRtYXAgYXQgNjY1NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY2NTYyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjY1NjMtNjY1OTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjY1OTUtNjc1ODQKKyAgRnJlZSBpbm9kZXM6IDE2NjQxLTE2ODk2CitHcm91cCA2NjogKEJsb2NrcyA2NzU4NS02ODYwOCkKKyAgQmxvY2sgYml0bWFwIGF0IDY3NTg1ICgrMCksIElub2RlIGJpdG1hcCBhdCA2NzU4NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDY3NTg3LTY3NjE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDY3NjE5LTY4NjA4CisgIEZyZWUgaW5vZGVzOiAxNjg5Ny0xNzE1MgorR3JvdXAgNjc6IChCbG9ja3MgNjg2MDktNjk2MzIpCisgIEJsb2NrIGJpdG1hcCBhdCA2ODYwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNjg2MTAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA2ODYxMS02ODY0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA2ODY0My02OTYzMgorICBGcmVlIGlub2RlczogMTcxNTMtMTc0MDgKK0dyb3VwIDY4OiAoQmxvY2tzIDY5NjMzLTcwNjU2KQorICBCbG9jayBiaXRtYXAgYXQgNjk2MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDY5NjM0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNjk2MzUtNjk2NjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNjk2NjctNzA2NTYKKyAgRnJlZSBpbm9kZXM6IDE3NDA5LTE3NjY0CitHcm91cCA2OTogKEJsb2NrcyA3MDY1Ny03MTY4MCkKKyAgQmxvY2sgYml0bWFwIGF0IDcwNjU3ICgrMCksIElub2RlIGJpdG1hcCBhdCA3MDY1OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDcwNjU5LTcwNjkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDcwNjkxLTcxNjgwCisgIEZyZWUgaW5vZGVzOiAxNzY2NS0xNzkyMAorR3JvdXAgNzA6IChCbG9ja3MgNzE2ODEtNzI3MDQpCisgIEJsb2NrIGJpdG1hcCBhdCA3MTY4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzE2ODIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3MTY4My03MTcxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3MTcxNS03MjcwNAorICBGcmVlIGlub2RlczogMTc5MjEtMTgxNzYKK0dyb3VwIDcxOiAoQmxvY2tzIDcyNzA1LTczNzI4KQorICBCbG9jayBiaXRtYXAgYXQgNzI3MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDcyNzA2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzI3MDctNzI3MzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzI3MzktNzM3MjgKKyAgRnJlZSBpbm9kZXM6IDE4MTc3LTE4NDMyCitHcm91cCA3MjogKEJsb2NrcyA3MzcyOS03NDc1MikKKyAgQmxvY2sgYml0bWFwIGF0IDczNzI5ICgrMCksIElub2RlIGJpdG1hcCBhdCA3MzczMCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDczNzMxLTczNzYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDczNzYzLTc0NzUyCisgIEZyZWUgaW5vZGVzOiAxODQzMy0xODY4OAorR3JvdXAgNzM6IChCbG9ja3MgNzQ3NTMtNzU3NzYpCisgIEJsb2NrIGJpdG1hcCBhdCA3NDc1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzQ3NTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NDc1NS03NDc4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3NDc4Ny03NTc3NgorICBGcmVlIGlub2RlczogMTg2ODktMTg5NDQKK0dyb3VwIDc0OiAoQmxvY2tzIDc1Nzc3LTc2ODAwKQorICBCbG9jayBiaXRtYXAgYXQgNzU3NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc1Nzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzU3NzktNzU4MTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzU4MTEtNzY4MDAKKyAgRnJlZSBpbm9kZXM6IDE4OTQ1LTE5MjAwCitHcm91cCA3NTogKEJsb2NrcyA3NjgwMS03NzgyNCkKKyAgQmxvY2sgYml0bWFwIGF0IDc2ODAxICgrMCksIElub2RlIGJpdG1hcCBhdCA3NjgwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc2ODAzLTc2ODM0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc2ODM1LTc3ODI0CisgIEZyZWUgaW5vZGVzOiAxOTIwMS0xOTQ1NgorR3JvdXAgNzY6IChCbG9ja3MgNzc4MjUtNzg4NDgpCisgIEJsb2NrIGJpdG1hcCBhdCA3NzgyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgNzc4MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA3NzgyNy03Nzg1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA3Nzg1OS03ODg0OAorICBGcmVlIGlub2RlczogMTk0NTctMTk3MTIKK0dyb3VwIDc3OiAoQmxvY2tzIDc4ODQ5LTc5ODcyKQorICBCbG9jayBiaXRtYXAgYXQgNzg4NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDc4ODUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgNzg4NTEtNzg4ODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogNzg4ODMtNzk4NzIKKyAgRnJlZSBpbm9kZXM6IDE5NzEzLTE5OTY4CitHcm91cCA3ODogKEJsb2NrcyA3OTg3My04MDg5NikKKyAgQmxvY2sgYml0bWFwIGF0IDc5ODczICgrMCksIElub2RlIGJpdG1hcCBhdCA3OTg3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDc5ODc1LTc5OTA2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDc5OTA3LTgwODk2CisgIEZyZWUgaW5vZGVzOiAxOTk2OS0yMDIyNAorR3JvdXAgNzk6IChCbG9ja3MgODA4OTctODE5MjApCisgIEJsb2NrIGJpdG1hcCBhdCA4MDg5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODA4OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4MDg5OS04MDkzMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4MDkzMS04MTkyMAorICBGcmVlIGlub2RlczogMjAyMjUtMjA0ODAKK0dyb3VwIDgwOiAoQmxvY2tzIDgxOTIxLTgyOTQ0KQorICBCbG9jayBiaXRtYXAgYXQgODE5MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDgxOTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODE5MjMtODE5NTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODE5NTUtODI5NDQKKyAgRnJlZSBpbm9kZXM6IDIwNDgxLTIwNzM2CitHcm91cCA4MTogKEJsb2NrcyA4Mjk0NS04Mzk2OCkKKyAgQmFja3VwIHN1cGVyYmxvY2sgYXQgODI5NDUsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDgyOTQ2LTgyOTUxCisgIFJlc2VydmVkIEdEVCBibG9ja3MgYXQgODI5NTItODMyMDIKKyAgQmxvY2sgYml0bWFwIGF0IDgzMjAzICgrMjU4KSwgSW5vZGUgYml0bWFwIGF0IDgzMjA0ICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCA4MzIwNS04MzIzNiAoKzI2MCkKKyAgNzMyIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDgzMjM3LTgzOTY4CisgIEZyZWUgaW5vZGVzOiAyMDczNy0yMDk5MgorR3JvdXAgODI6IChCbG9ja3MgODM5NjktODQ5OTIpCisgIEJsb2NrIGJpdG1hcCBhdCA4Mzk2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODM5NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4Mzk3MS04NDAwMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NDAwMy04NDk5MgorICBGcmVlIGlub2RlczogMjA5OTMtMjEyNDgKK0dyb3VwIDgzOiAoQmxvY2tzIDg0OTkzLTg2MDE2KQorICBCbG9jayBiaXRtYXAgYXQgODQ5OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg0OTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODQ5OTUtODUwMjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODUwMjctODYwMTYKKyAgRnJlZSBpbm9kZXM6IDIxMjQ5LTIxNTA0CitHcm91cCA4NDogKEJsb2NrcyA4NjAxNy04NzA0MCkKKyAgQmxvY2sgYml0bWFwIGF0IDg2MDE3ICgrMCksIElub2RlIGJpdG1hcCBhdCA4NjAxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg2MDE5LTg2MDUwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg2MDUxLTg3MDQwCisgIEZyZWUgaW5vZGVzOiAyMTUwNS0yMTc2MAorR3JvdXAgODU6IChCbG9ja3MgODcwNDEtODgwNjQpCisgIEJsb2NrIGJpdG1hcCBhdCA4NzA0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgODcwNDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA4NzA0My04NzA3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA4NzA3NS04ODA2NAorICBGcmVlIGlub2RlczogMjE3NjEtMjIwMTYKK0dyb3VwIDg2OiAoQmxvY2tzIDg4MDY1LTg5MDg4KQorICBCbG9jayBiaXRtYXAgYXQgODgwNjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDg4MDY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgODgwNjctODgwOTggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogODgwOTktODkwODgKKyAgRnJlZSBpbm9kZXM6IDIyMDE3LTIyMjcyCitHcm91cCA4NzogKEJsb2NrcyA4OTA4OS05MDExMikKKyAgQmxvY2sgYml0bWFwIGF0IDg5MDg5ICgrMCksIElub2RlIGJpdG1hcCBhdCA4OTA5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDg5MDkxLTg5MTIyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDg5MTIzLTkwMTEyCisgIEZyZWUgaW5vZGVzOiAyMjI3My0yMjUyOAorR3JvdXAgODg6IChCbG9ja3MgOTAxMTMtOTExMzYpCisgIEJsb2NrIGJpdG1hcCBhdCA5MDExMyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTAxMTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MDExNS05MDE0NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MDE0Ny05MTEzNgorICBGcmVlIGlub2RlczogMjI1MjktMjI3ODQKK0dyb3VwIDg5OiAoQmxvY2tzIDkxMTM3LTkyMTYwKQorICBCbG9jayBiaXRtYXAgYXQgOTExMzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDkxMTM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTExMzktOTExNzAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTExNzEtOTIxNjAKKyAgRnJlZSBpbm9kZXM6IDIyNzg1LTIzMDQwCitHcm91cCA5MDogKEJsb2NrcyA5MjE2MS05MzE4NCkKKyAgQmxvY2sgYml0bWFwIGF0IDkyMTYxICgrMCksIElub2RlIGJpdG1hcCBhdCA5MjE2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDkyMTYzLTkyMTk0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDkyMTk1LTkzMTg0CisgIEZyZWUgaW5vZGVzOiAyMzA0MS0yMzI5NgorR3JvdXAgOTE6IChCbG9ja3MgOTMxODUtOTQyMDgpCisgIEJsb2NrIGJpdG1hcCBhdCA5MzE4NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTMxODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5MzE4Ny05MzIxOCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5MzIxOS05NDIwOAorICBGcmVlIGlub2RlczogMjMyOTctMjM1NTIKK0dyb3VwIDkyOiAoQmxvY2tzIDk0MjA5LTk1MjMyKQorICBCbG9jayBiaXRtYXAgYXQgOTQyMDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk0MjEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTQyMTEtOTQyNDIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTQyNDMtOTUyMzIKKyAgRnJlZSBpbm9kZXM6IDIzNTUzLTIzODA4CitHcm91cCA5MzogKEJsb2NrcyA5NTIzMy05NjI1NikKKyAgQmxvY2sgYml0bWFwIGF0IDk1MjMzICgrMCksIElub2RlIGJpdG1hcCBhdCA5NTIzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk1MjM1LTk1MjY2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk1MjY3LTk2MjU2CisgIEZyZWUgaW5vZGVzOiAyMzgwOS0yNDA2NAorR3JvdXAgOTQ6IChCbG9ja3MgOTYyNTctOTcyODApCisgIEJsb2NrIGJpdG1hcCBhdCA5NjI1NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgOTYyNTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCA5NjI1OS05NjI5MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiA5NjI5MS05NzI4MAorICBGcmVlIGlub2RlczogMjQwNjUtMjQzMjAKK0dyb3VwIDk1OiAoQmxvY2tzIDk3MjgxLTk4MzA0KQorICBCbG9jayBiaXRtYXAgYXQgOTcyODEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk3MjgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTcyODMtOTczMTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTczMTUtOTgzMDQKKyAgRnJlZSBpbm9kZXM6IDI0MzIxLTI0NTc2CitHcm91cCA5NjogKEJsb2NrcyA5ODMwNS05OTMyOCkKKyAgQmxvY2sgYml0bWFwIGF0IDk4MzA1ICgrMCksIElub2RlIGJpdG1hcCBhdCA5ODMwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDk4MzA3LTk4MzM4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDk4MzM5LTk5MzI4CisgIEZyZWUgaW5vZGVzOiAyNDU3Ny0yNDgzMgorR3JvdXAgOTc6IChCbG9ja3MgOTkzMjktMTAwMzUyKQorICBCbG9jayBiaXRtYXAgYXQgOTkzMjkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDk5MzMwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgOTkzMzEtOTkzNjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogOTkzNjMtMTAwMzUyCisgIEZyZWUgaW5vZGVzOiAyNDgzMy0yNTA4OAorR3JvdXAgOTg6IChCbG9ja3MgMTAwMzUzLTEwMTM3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEwMDM1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAwMzU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAwMzU1LTEwMDM4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDAzODctMTAxMzc2CisgIEZyZWUgaW5vZGVzOiAyNTA4OS0yNTM0NAorR3JvdXAgOTk6IChCbG9ja3MgMTAxMzc3LTEwMjQwMCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwMTM3NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTAxMzc4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTAxMzc5LTEwMTQxMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDE0MTEtMTAyNDAwCisgIEZyZWUgaW5vZGVzOiAyNTM0NS0yNTYwMAorR3JvdXAgMTAwOiAoQmxvY2tzIDEwMjQwMS0xMDM0MjQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDI0MDEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwMjQwMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwMjQwMy0xMDI0MzQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTAyNDM1LTEwMzQyNAorICBGcmVlIGlub2RlczogMjU2MDEtMjU4NTYKK0dyb3VwIDEwMTogKEJsb2NrcyAxMDM0MjUtMTA0NDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTAzNDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDM0MjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDM0MjctMTAzNDU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwMzQ1OS0xMDQ0NDgKKyAgRnJlZSBpbm9kZXM6IDI1ODU3LTI2MTEyCitHcm91cCAxMDI6IChCbG9ja3MgMTA0NDQ5LTEwNTQ3MikKKyAgQmxvY2sgYml0bWFwIGF0IDEwNDQ0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA0NDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA0NDUxLTEwNDQ4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDQ0ODMtMTA1NDcyCisgIEZyZWUgaW5vZGVzOiAyNjExMy0yNjM2OAorR3JvdXAgMTAzOiAoQmxvY2tzIDEwNTQ3My0xMDY0OTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDU0NzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwNTQ3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwNTQ3NS0xMDU1MDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA1NTA3LTEwNjQ5NgorICBGcmVlIGlub2RlczogMjYzNjktMjY2MjQKK0dyb3VwIDEwNDogKEJsb2NrcyAxMDY0OTctMTA3NTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTA2NDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDY0OTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDY0OTktMTA2NTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwNjUzMS0xMDc1MjAKKyAgRnJlZSBpbm9kZXM6IDI2NjI1LTI2ODgwCitHcm91cCAxMDU6IChCbG9ja3MgMTA3NTIxLTEwODU0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEwNzUyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTA3NTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTA3NTIzLTEwNzU1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMDc1NTUtMTA4NTQ0CisgIEZyZWUgaW5vZGVzOiAyNjg4MS0yNzEzNgorR3JvdXAgMTA2OiAoQmxvY2tzIDEwODU0NS0xMDk1NjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMDg1NDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEwODU0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEwODU0Ny0xMDg1NzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTA4NTc5LTEwOTU2OAorICBGcmVlIGlub2RlczogMjcxMzctMjczOTIKK0dyb3VwIDEwNzogKEJsb2NrcyAxMDk1NjktMTEwNTkyKQorICBCbG9jayBiaXRtYXAgYXQgMTA5NTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMDk1NzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMDk1NzEtMTA5NjAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEwOTYwMy0xMTA1OTIKKyAgRnJlZSBpbm9kZXM6IDI3MzkzLTI3NjQ4CitHcm91cCAxMDg6IChCbG9ja3MgMTEwNTkzLTExMTYxNikKKyAgQmxvY2sgYml0bWFwIGF0IDExMDU5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEwNTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEwNTk1LTExMDYyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTA2MjctMTExNjE2CisgIEZyZWUgaW5vZGVzOiAyNzY0OS0yNzkwNAorR3JvdXAgMTA5OiAoQmxvY2tzIDExMTYxNy0xMTI2NDApCisgIEJsb2NrIGJpdG1hcCBhdCAxMTE2MTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExMTYxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExMTYxOS0xMTE2NTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTExNjUxLTExMjY0MAorICBGcmVlIGlub2RlczogMjc5MDUtMjgxNjAKK0dyb3VwIDExMDogKEJsb2NrcyAxMTI2NDEtMTEzNjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTEyNjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTI2NDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTI2NDMtMTEyNjc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExMjY3NS0xMTM2NjQKKyAgRnJlZSBpbm9kZXM6IDI4MTYxLTI4NDE2CitHcm91cCAxMTE6IChCbG9ja3MgMTEzNjY1LTExNDY4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDExMzY2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTEzNjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTEzNjY3LTExMzY5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTM2OTktMTE0Njg4CisgIEZyZWUgaW5vZGVzOiAyODQxNy0yODY3MgorR3JvdXAgMTEyOiAoQmxvY2tzIDExNDY4OS0xMTU3MTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTQ2ODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNDY5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNDY5MS0xMTQ3MjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE0NzIzLTExNTcxMgorICBGcmVlIGlub2RlczogMjg2NzMtMjg5MjgKK0dyb3VwIDExMzogKEJsb2NrcyAxMTU3MTMtMTE2NzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTE1NzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTU3MTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTU3MTUtMTE1NzQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExNTc0Ny0xMTY3MzYKKyAgRnJlZSBpbm9kZXM6IDI4OTI5LTI5MTg0CitHcm91cCAxMTQ6IChCbG9ja3MgMTE2NzM3LTExNzc2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDExNjczNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE2NzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE2NzM5LTExNjc3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTY3NzEtMTE3NzYwCisgIEZyZWUgaW5vZGVzOiAyOTE4NS0yOTQ0MAorR3JvdXAgMTE1OiAoQmxvY2tzIDExNzc2MS0xMTg3ODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxMTc3NjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDExNzc2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDExNzc2My0xMTc3OTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTE3Nzk1LTExODc4NAorICBGcmVlIGlub2RlczogMjk0NDEtMjk2OTYKK0dyb3VwIDExNjogKEJsb2NrcyAxMTg3ODUtMTE5ODA4KQorICBCbG9jayBiaXRtYXAgYXQgMTE4Nzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMTg3ODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMTg3ODctMTE4ODE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDExODgxOS0xMTk4MDgKKyAgRnJlZSBpbm9kZXM6IDI5Njk3LTI5OTUyCitHcm91cCAxMTc6IChCbG9ja3MgMTE5ODA5LTEyMDgzMikKKyAgQmxvY2sgYml0bWFwIGF0IDExOTgwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTE5ODEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTE5ODExLTExOTg0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMTk4NDMtMTIwODMyCisgIEZyZWUgaW5vZGVzOiAyOTk1My0zMDIwOAorR3JvdXAgMTE4OiAoQmxvY2tzIDEyMDgzMy0xMjE4NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjA4MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMDgzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMDgzNS0xMjA4NjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIwODY3LTEyMTg1NgorICBGcmVlIGlub2RlczogMzAyMDktMzA0NjQKK0dyb3VwIDExOTogKEJsb2NrcyAxMjE4NTctMTIyODgwKQorICBCbG9jayBiaXRtYXAgYXQgMTIxODU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjE4NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjE4NTktMTIxODkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyMTg5MS0xMjI4ODAKKyAgRnJlZSBpbm9kZXM6IDMwNDY1LTMwNzIwCitHcm91cCAxMjA6IChCbG9ja3MgMTIyODgxLTEyMzkwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDEyMjg4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTIyODgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTIyODgzLTEyMjkxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjI5MTUtMTIzOTA0CisgIEZyZWUgaW5vZGVzOiAzMDcyMS0zMDk3NgorR3JvdXAgMTIxOiAoQmxvY2tzIDEyMzkwNS0xMjQ5MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMjM5MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyMzkwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyMzkwNy0xMjM5MzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTIzOTM5LTEyNDkyOAorICBGcmVlIGlub2RlczogMzA5NzctMzEyMzIKK0dyb3VwIDEyMjogKEJsb2NrcyAxMjQ5MjktMTI1OTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTI0OTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjQ5MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjQ5MzEtMTI0OTYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyNDk2My0xMjU5NTIKKyAgRnJlZSBpbm9kZXM6IDMxMjMzLTMxNDg4CitHcm91cCAxMjM6IChCbG9ja3MgMTI1OTUzLTEyNjk3NikKKyAgQmxvY2sgYml0bWFwIGF0IDEyNTk1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTI1OTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTI1OTU1LTEyNTk4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMjU5ODctMTI2OTc2CisgIEZyZWUgaW5vZGVzOiAzMTQ4OS0zMTc0NAorR3JvdXAgMTI0OiAoQmxvY2tzIDEyNjk3Ny0xMjgwMDApCisgIEJsb2NrIGJpdG1hcCBhdCAxMjY5NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEyNjk3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEyNjk3OS0xMjcwMTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI3MDExLTEyODAwMAorICBGcmVlIGlub2RlczogMzE3NDUtMzIwMDAKK0dyb3VwIDEyNTogKEJsb2NrcyAxMjgwMDEtMTI5MDI0KQorICBCYWNrdXAgc3VwZXJibG9jayBhdCAxMjgwMDEsIEdyb3VwIGRlc2NyaXB0b3JzIGF0IDEyODAwMi0xMjgwMDcKKyAgUmVzZXJ2ZWQgR0RUIGJsb2NrcyBhdCAxMjgwMDgtMTI4MjU4CisgIEJsb2NrIGJpdG1hcCBhdCAxMjgyNTkgKCsyNTgpLCBJbm9kZSBiaXRtYXAgYXQgMTI4MjYwICgrMjU5KQorICBJbm9kZSB0YWJsZSBhdCAxMjgyNjEtMTI4MjkyICgrMjYwKQorICA3MzIgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTI4MjkzLTEyOTAyNAorICBGcmVlIGlub2RlczogMzIwMDEtMzIyNTYKK0dyb3VwIDEyNjogKEJsb2NrcyAxMjkwMjUtMTMwMDQ4KQorICBCbG9jayBiaXRtYXAgYXQgMTI5MDI1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMjkwMjYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMjkwMjctMTI5MDU4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEyOTA1OS0xMzAwNDgKKyAgRnJlZSBpbm9kZXM6IDMyMjU3LTMyNTEyCitHcm91cCAxMjc6IChCbG9ja3MgMTMwMDQ5LTEzMTA3MikKKyAgQmxvY2sgYml0bWFwIGF0IDEzMDA0OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMwMDUwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMwMDUxLTEzMDA4MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzAwODMtMTMxMDcyCisgIEZyZWUgaW5vZGVzOiAzMjUxMy0zMjc2OAorR3JvdXAgMTI4OiAoQmxvY2tzIDEzMTA3My0xMzIwOTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzEwNzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzMTA3NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzMTA3NS0xMzExMDYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTMxMTA3LTEzMjA5NgorICBGcmVlIGlub2RlczogMzI3NjktMzMwMjQKK0dyb3VwIDEyOTogKEJsb2NrcyAxMzIwOTctMTMzMTIwKQorICBCbG9jayBiaXRtYXAgYXQgMTMyMDk3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzIwOTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzIwOTktMTMyMTMwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzMjEzMS0xMzMxMjAKKyAgRnJlZSBpbm9kZXM6IDMzMDI1LTMzMjgwCitHcm91cCAxMzA6IChCbG9ja3MgMTMzMTIxLTEzNDE0NCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzMzEyMSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTMzMTIyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTMzMTIzLTEzMzE1NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzMxNTUtMTM0MTQ0CisgIEZyZWUgaW5vZGVzOiAzMzI4MS0zMzUzNgorR3JvdXAgMTMxOiAoQmxvY2tzIDEzNDE0NS0xMzUxNjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxMzQxNDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzNDE0NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzNDE0Ny0xMzQxNzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM0MTc5LTEzNTE2OAorICBGcmVlIGlub2RlczogMzM1MzctMzM3OTIKK0dyb3VwIDEzMjogKEJsb2NrcyAxMzUxNjktMTM2MTkyKQorICBCbG9jayBiaXRtYXAgYXQgMTM1MTY5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzUxNzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzUxNzEtMTM1MjAyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzNTIwMy0xMzYxOTIKKyAgRnJlZSBpbm9kZXM6IDMzNzkzLTM0MDQ4CitHcm91cCAxMzM6IChCbG9ja3MgMTM2MTkzLTEzNzIxNikKKyAgQmxvY2sgYml0bWFwIGF0IDEzNjE5MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM2MTk0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM2MTk1LTEzNjIyNiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzYyMjctMTM3MjE2CisgIEZyZWUgaW5vZGVzOiAzNDA0OS0zNDMwNAorR3JvdXAgMTM0OiAoQmxvY2tzIDEzNzIxNy0xMzgyNDApCisgIEJsb2NrIGJpdG1hcCBhdCAxMzcyMTcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDEzNzIxOCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDEzNzIxOS0xMzcyNTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTM3MjUxLTEzODI0MAorICBGcmVlIGlub2RlczogMzQzMDUtMzQ1NjAKK0dyb3VwIDEzNTogKEJsb2NrcyAxMzgyNDEtMTM5MjY0KQorICBCbG9jayBiaXRtYXAgYXQgMTM4MjQxICgrMCksIElub2RlIGJpdG1hcCBhdCAxMzgyNDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxMzgyNDMtMTM4Mjc0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDEzODI3NS0xMzkyNjQKKyAgRnJlZSBpbm9kZXM6IDM0NTYxLTM0ODE2CitHcm91cCAxMzY6IChCbG9ja3MgMTM5MjY1LTE0MDI4OCkKKyAgQmxvY2sgYml0bWFwIGF0IDEzOTI2NSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTM5MjY2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTM5MjY3LTEzOTI5OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxMzkyOTktMTQwMjg4CisgIEZyZWUgaW5vZGVzOiAzNDgxNy0zNTA3MgorR3JvdXAgMTM3OiAoQmxvY2tzIDE0MDI4OS0xNDEzMTIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDAyODkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MDI5MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MDI5MS0xNDAzMjIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQwMzIzLTE0MTMxMgorICBGcmVlIGlub2RlczogMzUwNzMtMzUzMjgKK0dyb3VwIDEzODogKEJsb2NrcyAxNDEzMTMtMTQyMzM2KQorICBCbG9jayBiaXRtYXAgYXQgMTQxMzEzICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDEzMTQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDEzMTUtMTQxMzQ2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0MTM0Ny0xNDIzMzYKKyAgRnJlZSBpbm9kZXM6IDM1MzI5LTM1NTg0CitHcm91cCAxMzk6IChCbG9ja3MgMTQyMzM3LTE0MzM2MCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0MjMzNyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQyMzM4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQyMzM5LTE0MjM3MCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDIzNzEtMTQzMzYwCisgIEZyZWUgaW5vZGVzOiAzNTU4NS0zNTg0MAorR3JvdXAgMTQwOiAoQmxvY2tzIDE0MzM2MS0xNDQzODQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDMzNjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0MzM2MiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0MzM2My0xNDMzOTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQzMzk1LTE0NDM4NAorICBGcmVlIGlub2RlczogMzU4NDEtMzYwOTYKK0dyb3VwIDE0MTogKEJsb2NrcyAxNDQzODUtMTQ1NDA4KQorICBCbG9jayBiaXRtYXAgYXQgMTQ0Mzg1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDQzODYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDQzODctMTQ0NDE4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0NDQxOS0xNDU0MDgKKyAgRnJlZSBpbm9kZXM6IDM2MDk3LTM2MzUyCitHcm91cCAxNDI6IChCbG9ja3MgMTQ1NDA5LTE0NjQzMikKKyAgQmxvY2sgYml0bWFwIGF0IDE0NTQwOSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ1NDEwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ1NDExLTE0NTQ0MiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDU0NDMtMTQ2NDMyCisgIEZyZWUgaW5vZGVzOiAzNjM1My0zNjYwOAorR3JvdXAgMTQzOiAoQmxvY2tzIDE0NjQzMy0xNDc0NTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDY0MzMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0NjQzNCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0NjQzNS0xNDY0NjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ2NDY3LTE0NzQ1NgorICBGcmVlIGlub2RlczogMzY2MDktMzY4NjQKK0dyb3VwIDE0NDogKEJsb2NrcyAxNDc0NTctMTQ4NDgwKQorICBCbG9jayBiaXRtYXAgYXQgMTQ3NDU3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNDc0NTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNDc0NTktMTQ3NDkwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE0NzQ5MS0xNDg0ODAKKyAgRnJlZSBpbm9kZXM6IDM2ODY1LTM3MTIwCitHcm91cCAxNDU6IChCbG9ja3MgMTQ4NDgxLTE0OTUwNCkKKyAgQmxvY2sgYml0bWFwIGF0IDE0ODQ4MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTQ4NDgyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTQ4NDgzLTE0ODUxNCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNDg1MTUtMTQ5NTA0CisgIEZyZWUgaW5vZGVzOiAzNzEyMS0zNzM3NgorR3JvdXAgMTQ2OiAoQmxvY2tzIDE0OTUwNS0xNTA1MjgpCisgIEJsb2NrIGJpdG1hcCBhdCAxNDk1MDUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE0OTUwNiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE0OTUwNy0xNDk1MzggKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTQ5NTM5LTE1MDUyOAorICBGcmVlIGlub2RlczogMzczNzctMzc2MzIKK0dyb3VwIDE0NzogKEJsb2NrcyAxNTA1MjktMTUxNTUyKQorICBCbG9jayBiaXRtYXAgYXQgMTUwNTI5ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTA1MzAgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTA1MzEtMTUwNTYyICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MDU2My0xNTE1NTIKKyAgRnJlZSBpbm9kZXM6IDM3NjMzLTM3ODg4CitHcm91cCAxNDg6IChCbG9ja3MgMTUxNTUzLTE1MjU3NikKKyAgQmxvY2sgYml0bWFwIGF0IDE1MTU1MyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTUxNTU0ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTUxNTU1LTE1MTU4NiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTE1ODctMTUyNTc2CisgIEZyZWUgaW5vZGVzOiAzNzg4OS0zODE0NAorR3JvdXAgMTQ5OiAoQmxvY2tzIDE1MjU3Ny0xNTM2MDApCisgIEJsb2NrIGJpdG1hcCBhdCAxNTI1NzcgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1MjU3OCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1MjU3OS0xNTI2MTAgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTUyNjExLTE1MzYwMAorICBGcmVlIGlub2RlczogMzgxNDUtMzg0MDAKK0dyb3VwIDE1MDogKEJsb2NrcyAxNTM2MDEtMTU0NjI0KQorICBCbG9jayBiaXRtYXAgYXQgMTUzNjAxICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTM2MDIgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTM2MDMtMTUzNjM0ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1MzYzNS0xNTQ2MjQKKyAgRnJlZSBpbm9kZXM6IDM4NDAxLTM4NjU2CitHcm91cCAxNTE6IChCbG9ja3MgMTU0NjI1LTE1NTY0OCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1NDYyNSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU0NjI2ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU0NjI3LTE1NDY1OCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTQ2NTktMTU1NjQ4CisgIEZyZWUgaW5vZGVzOiAzODY1Ny0zODkxMgorR3JvdXAgMTUyOiAoQmxvY2tzIDE1NTY0OS0xNTY2NzIpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTU2NDkgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1NTY1MCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1NTY1MS0xNTU2ODIgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU1NjgzLTE1NjY3MgorICBGcmVlIGlub2RlczogMzg5MTMtMzkxNjgKK0dyb3VwIDE1MzogKEJsb2NrcyAxNTY2NzMtMTU3Njk2KQorICBCbG9jayBiaXRtYXAgYXQgMTU2NjczICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTY2NzQgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTY2NzUtMTU2NzA2ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1NjcwNy0xNTc2OTYKKyAgRnJlZSBpbm9kZXM6IDM5MTY5LTM5NDI0CitHcm91cCAxNTQ6IChCbG9ja3MgMTU3Njk3LTE1ODcyMCkKKyAgQmxvY2sgYml0bWFwIGF0IDE1NzY5NyAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTU3Njk4ICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTU3Njk5LTE1NzczMCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNTc3MzEtMTU4NzIwCisgIEZyZWUgaW5vZGVzOiAzOTQyNS0zOTY4MAorR3JvdXAgMTU1OiAoQmxvY2tzIDE1ODcyMS0xNTk3NDQpCisgIEJsb2NrIGJpdG1hcCBhdCAxNTg3MjEgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE1ODcyMiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE1ODcyMy0xNTg3NTQgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTU4NzU1LTE1OTc0NAorICBGcmVlIGlub2RlczogMzk2ODEtMzk5MzYKK0dyb3VwIDE1NjogKEJsb2NrcyAxNTk3NDUtMTYwNzY4KQorICBCbG9jayBiaXRtYXAgYXQgMTU5NzQ1ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNTk3NDYgKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNTk3NDctMTU5Nzc4ICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE1OTc3OS0xNjA3NjgKKyAgRnJlZSBpbm9kZXM6IDM5OTM3LTQwMTkyCitHcm91cCAxNTc6IChCbG9ja3MgMTYwNzY5LTE2MTc5MikKKyAgQmxvY2sgYml0bWFwIGF0IDE2MDc2OSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYwNzcwICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYwNzcxLTE2MDgwMiAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjA4MDMtMTYxNzkyCisgIEZyZWUgaW5vZGVzOiA0MDE5My00MDQ0OAorR3JvdXAgMTU4OiAoQmxvY2tzIDE2MTc5My0xNjI4MTYpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjE3OTMgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2MTc5NCAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2MTc5NS0xNjE4MjYgKCsyKQorICA5OTAgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTYxODI3LTE2MjgxNgorICBGcmVlIGlub2RlczogNDA0NDktNDA3MDQKK0dyb3VwIDE1OTogKEJsb2NrcyAxNjI4MTctMTYzODQwKQorICBCbG9jayBiaXRtYXAgYXQgMTYyODE3ICgrMCksIElub2RlIGJpdG1hcCBhdCAxNjI4MTggKCsxKQorICBJbm9kZSB0YWJsZSBhdCAxNjI4MTktMTYyODUwICgrMikKKyAgOTkwIGZyZWUgYmxvY2tzLCAyNTYgZnJlZSBpbm9kZXMsIDAgZGlyZWN0b3JpZXMKKyAgRnJlZSBibG9ja3M6IDE2Mjg1MS0xNjM4NDAKKyAgRnJlZSBpbm9kZXM6IDQwNzA1LTQwOTYwCitHcm91cCAxNjA6IChCbG9ja3MgMTYzODQxLTE2NDg2NCkKKyAgQmxvY2sgYml0bWFwIGF0IDE2Mzg0MSAoKzApLCBJbm9kZSBiaXRtYXAgYXQgMTYzODQyICgrMSkKKyAgSW5vZGUgdGFibGUgYXQgMTYzODQzLTE2Mzg3NCAoKzIpCisgIDk5MCBmcmVlIGJsb2NrcywgMjU2IGZyZWUgaW5vZGVzLCAwIGRpcmVjdG9yaWVzCisgIEZyZWUgYmxvY2tzOiAxNjM4NzUtMTY0ODY0CisgIEZyZWUgaW5vZGVzOiA0MDk2MS00MTIxNgorR3JvdXAgMTYxOiAoQmxvY2tzIDE2NDg2NS0xNjU1MzUpCisgIEJsb2NrIGJpdG1hcCBhdCAxNjQ4NjUgKCswKSwgSW5vZGUgYml0bWFwIGF0IDE2NDg2NiAoKzEpCisgIElub2RlIHRhYmxlIGF0IDE2NDg2Ny0xNjQ4OTggKCsyKQorICA2MzcgZnJlZSBibG9ja3MsIDI1NiBmcmVlIGlub2RlcywgMCBkaXJlY3RvcmllcworICBGcmVlIGJsb2NrczogMTY0ODk5LTE2NTUzNQorICBGcmVlIGlub2RlczogNDEyMTctNDE0NzIKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL3JfcmVzaXplX2lub2RlL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4M2JhZgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9uYW1lCkBAIC0wLDAgKzEsMiBAQAorZmlsZXN5c3RlbSByZXNpemUgd2l0aCBhIHJlc2l6ZV9pbm9kZSBwcmVzZW50CisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy9yX3Jlc2l6ZV9pbm9kZS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvcl9yZXNpemVfaW5vZGUvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTIxMzgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcl9yZXNpemVfaW5vZGUvc2NyaXB0CkBAIC0wLDAgKzEsMTAxIEBACitpZiB0ZXN0IC14ICRSRVNJWkUyRlNfRVhFOyB0aGVuCisKK0ZTQ0tfT1BUPS15ZgorT1VUPSR0ZXN0X25hbWUubG9nCitpZiBbIC1mICR0ZXN0X2Rpci9leHBlY3QuZ3ogXTsgdGhlbgorCUVYUD0kdGVzdF9uYW1lLnRtcAorCWd1bnppcCA8ICR0ZXN0X2Rpci9leHBlY3QuZ3ogPiAkRVhQMQorZWxzZQorCUVYUD0kdGVzdF9kaXIvZXhwZWN0CitmaQorCitjcCAvZGV2L251bGwgJE9VVAorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKKworZWNobyBta2UyZnMgLXEgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCB0ZXN0LmltZyAxNjM4NCA+ICRPVVQKKyRNS0UyRlMgLXEgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCAkVE1QRklMRSAxNjM4NCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgdGVzdC5pbWcgNjU1MzYgPj4gJE9VVAorJFJFU0laRTJGUyAkVE1QRklMRSA2NTUzNiAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiAkT1VUCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtcSAtRiAtTyByZXNpemVfaW5vZGUgLW8gTGludXggLWIgMTAyNCAtZyAxMDI0IHRlc3QuaW1nIDY1NTM2ID4+ICRPVVQKKyRNS0UyRlMgLXEgLUYgLU8gcmVzaXplX2lub2RlIC1vIExpbnV4IC1iIDEwMjQgLWcgMTAyNCAkVE1QRklMRSA2NTUzNiAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworZWNobyByZXNpemUyZnMgdGVzdC5pbWcgMTYzODQgPj4gJE9VVAorJFJFU0laRTJGUyAkVE1QRklMRSAxNjM4NCAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiAkT1VUCisKK2VjaG8gcmVzaXplMmZzIHRlc3QuaW1nIDE2NTUzNiA+PiAkT1VUCiskUkVTSVpFMkZTICRUTVBGSUxFIDE2NTUzNiAyPiYxIHwKKwlzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCAtZSAiczskVE1QRklMRTt0ZXN0LmltZzsiID4+ICRPVVQKKworJEZTQ0sgJEZTQ0tfT1BUICAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VULm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VULm5ldworc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VULm5ldyA+PiAkT1VUCitybSAtZiAkT1VULm5ldworCiskREVCVUdGUyAtUiAic2V0X3N1cGVyX3ZhbHVlIGxhc3RjaGVjayAwIiAtdyAkVE1QRklMRSA+L2Rldi9udWxsIDI+JjEKKyRERUJVR0ZTIC1SICJzZXRfc3VwZXJfdmFsdWUgaGFzaF9zZWVkIG51bGwiIC13ICRUTVBGSUxFID4vZGV2L251bGwgMj4mMQorJERFQlVHRlMgLVIgInNldF9zdXBlcl92YWx1ZSBta2ZzX3RpbWUgMCIgLXcgJFRNUEZJTEUgPi9kZXYvbnVsbCAyPiYxCiskVFVORTJGUyAtYyAyMCAtVSBjbGVhciAkVE1QRklMRSAgPi9kZXYvbnVsbCAyPiYxCisKK2VjaG8gZHVtcGUyZnMgdGVzdC5pbWcgPj4gJE9VVAorJERVTVBFMkZTICRUTVBGSUxFIDI+JjEgfCBzZWQgLWYgJGNtZF9kaXIvZmlsdGVyLnNlZCA+PiAkT1VUCisKK3JtIC1mICRUTVBGSUxFCitjbXAgLXMgJE9VVCAkRVhQCitzdGF0dXM9JD8KKworaWYgWyAiJHN0YXR1cyIgPSAwIF0gOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCWRpZmYgJERJRkZfT1BUUyAkRVhQICRPVVQgPiAkdGVzdF9uYW1lLmZhaWxlZAorCXJtIC1mICR0ZXN0X25hbWUudG1wCitmaQorCit1bnNldCBJTUFHRSBGU0NLX09QVCBPVVQgRVhQCisKK2Vsc2UgI2lmIHRlc3QgLXggJFJFU0laRTJGUzsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorZmkgCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvcnVuX2UyZnNjayBiL2UyZnNwcm9ncy90ZXN0cy9ydW5fZTJmc2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjhkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvcnVuX2UyZnNjawpAQCAtMCwwICsxLDExMiBAQAoraWYgWyAiJERFU0NSSVBUSU9OInggIT0geCBdOyB0aGVuCisJdGVzdF9kZXNjcmlwdGlvbj0iJERFU0NSSVBUSU9OIgorZmkKK2lmIFsgIiRJTUFHRSJ4ID0geCBdOyB0aGVuCisJSU1BR0U9JHRlc3RfZGlyL2ltYWdlLmd6CitmaQorCitpZiBbICIkRlNDS19PUFQieCA9IHggXTsgdGhlbgorCUZTQ0tfT1BUPS15ZgorZmkKKworaWYgWyAiJFNFQ09ORF9GU0NLX09QVCJ4ID0geCBdOyB0aGVuCisJU0VDT05EX0ZTQ0tfT1BUPS15ZgorZmkKKworaWYgWyAiJE9VVDEieCA9IHggXTsgdGhlbgorCU9VVDE9JHRlc3RfbmFtZS4xLmxvZworZmkKKworaWYgWyAiJE9VVDIieCA9IHggXTsgdGhlbgorCU9VVDI9JHRlc3RfbmFtZS4yLmxvZworZmkKKworaWYgWyAiJEVYUDEieCA9IHggXTsgdGhlbgorCWlmIFsgLWYgJHRlc3RfZGlyL2V4cGVjdC4xLmd6IF07IHRoZW4KKwkJRVhQMT0kdGVzdF9uYW1lLjEudG1wCisJCWd1bnppcCA8ICR0ZXN0X2Rpci9leHBlY3QuMS5neiA+ICRFWFAxCisJZWxzZQorCQlFWFAxPSR0ZXN0X2Rpci9leHBlY3QuMQorCWZpCitmaQorCitpZiBbICIkRVhQMiJ4ID0geCBdOyB0aGVuCisJaWYgWyAtZiAkdGVzdF9kaXIvZXhwZWN0LjIuZ3ogXTsgdGhlbgorCQlFWFAyPSR0ZXN0X25hbWUuMi50bXAKKwkJZ3VuemlwIDwgJHRlc3RfZGlyL2V4cGVjdC4yLmd6ID4gJEVYUDIKKwllbHNlCisJCUVYUDI9JHRlc3RfZGlyL2V4cGVjdC4yCisJZmkKK2ZpCisKK2lmIFsgIiRTS0lQX0dVTlpJUCIgIT0gInRydWUiIF0gOyB0aGVuCisJZ3VuemlwIDwgJElNQUdFID4gJFRNUEZJTEUKK2ZpCisKK2NwIC9kZXYvbnVsbCAkT1VUMQorCitldmFsICRQUkVQX0NNRAorCiskRlNDSyAkRlNDS19PUFQgIC1OIHRlc3RfZmlsZXN5cyAkVE1QRklMRSA+ICRPVVQxLm5ldyAyPiYxCitzdGF0dXM9JD8KK2VjaG8gRXhpdCBzdGF0dXMgaXMgJHN0YXR1cyA+PiAkT1VUMS5uZXcKK3NlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgJE9VVDEubmV3ID4+ICRPVVQxCitybSAtZiAkT1VUMS5uZXcKKworaWYgWyAiJE9ORV9QQVNTX09OTFkiICE9ICJ0cnVlIiBdOyB0aGVuCisJJEZTQ0sgJFNFQ09ORF9GU0NLX09QVCAtTiB0ZXN0X2ZpbGVzeXMgJFRNUEZJTEUgPiAkT1VUMi5uZXcgMj4mMSAKKwlzdGF0dXM9JD8KKwllY2hvIEV4aXQgc3RhdHVzIGlzICRzdGF0dXMgPj4gJE9VVDIubmV3CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiAkT1VUMi5uZXcgPiAkT1VUMgorCXJtIC1mICRPVVQyLm5ldworZmkKKworZXZhbCAkQUZURVJfQ01ECisKK2lmIFsgIiRTS0lQX1ZFUklGWSIgIT0gInRydWUiIF0gOyB0aGVuCisJcm0gLWYgJHRlc3RfbmFtZS5vayAkdGVzdF9uYW1lLmZhaWxlZAorCWNtcCAtcyAkT1VUMSAkRVhQMQorCXN0YXR1czE9JD8KKwlpZiBbICIkT05FX1BBU1NfT05MWSIgIT0gInRydWUiIF07IHRoZW4KKwkJY21wIC1zICRPVVQyICRFWFAyCisJCXN0YXR1czI9JD8KKwllbHNlCisJCXN0YXR1czI9MAorCWZpCisJaWYgWyAiJFBBU1NfWkVSTyIgPSAidHJ1ZSIgXTsgdGhlbgorCQljbXAgLXMgJHRlc3RfbmFtZS4wLmxvZwkkdGVzdF9kaXIvZXhwZWN0LjAKKwkJc3RhdHVzMz0kPworCWVsc2UKKwkJc3RhdHVzMz0wCisJZmkKKworCWlmIFsgLXogIiR0ZXN0X2Rlc2NyaXB0aW9uIiBdIDsgdGhlbgorCQlkZXNjcmlwdGlvbj0iJHRlc3RfbmFtZSIKKwllbHNlCisJCWRlc2NyaXB0aW9uPSIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbiIKKwlmaQorCisJaWYgWyAiJHN0YXR1czEiIC1lcSAwIC1hICIkc3RhdHVzMiIgLWVxIDAgLWEgIiRzdGF0dXMzIiAtZXEgMCBdIDsgdGhlbgorCQllY2hvICIkZGVzY3JpcHRpb246IG9rIgorCQl0b3VjaCAkdGVzdF9uYW1lLm9rCisJZWxzZQorCQllY2hvICIkZGVzY3JpcHRpb246IGZhaWxlZCIKKwkJcm0gLWYgJHRlc3RfbmFtZS5mYWlsZWQKKwkJaWYgWyAiJFBBU1NfWkVSTyIgPSAidHJ1ZSIgXTsgdGhlbgorCQkJZGlmZiAkRElGRl9PUFRTICR0ZXN0X2Rpci9leHBlY3QuMCBcCisJCQkJJHRlc3RfbmFtZS4wLmxvZyA+PiAkdGVzdF9uYW1lLmZhaWxlZAorCQlmaQorCQlkaWZmICRESUZGX09QVFMgJEVYUDEgJE9VVDEgPj4gJHRlc3RfbmFtZS5mYWlsZWQKKwkJaWYgWyAiJE9ORV9QQVNTX09OTFkiICE9ICJ0cnVlIiBdOyB0aGVuCisJCQlkaWZmICRESUZGX09QVFMgJEVYUDIgJE9VVDIgPj4gJHRlc3RfbmFtZS5mYWlsZWQKKwkJZmkKKwlmaQorCXJtIC1mIHRtcF9leHBlY3QKK2ZpCisKK2lmIFsgIiRTS0lQX0NMRUFOVVAiICE9ICJ0cnVlIiBdIDsgdGhlbgorCXVuc2V0IElNQUdFIEZTQ0tfT1BUIFNFQ09ORF9GU0NLX09QVCBPVVQxIE9VVDIgRVhQMSBFWFAyIAorCXVuc2V0IFNLSVBfVkVSSUZZIFNLSVBfQ0xFQU5VUCBTS0lQX0dVTlpJUCBPTkVfUEFTU19PTkxZIFBSRVBfQ01ECisJdW5zZXQgREVTQ1JJUFRJT04gU0tJUF9VTkxJTksgQUZURVJfQ01EIFBBU1NfWkVSTworZmkKKwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3J1bl9ta2UyZnMgYi9lMmZzcHJvZ3MvdGVzdHMvcnVuX21rZTJmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmVjYTQxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3J1bl9ta2UyZnMKQEAgLTAsMCArMSwyNyBAQAoraWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKworaWYgWyAiJEZTX1NJWkUieCA9IHggXTsgdGhlbgorCUZTX1NJWkU9MTAyNAorZmkKK09VVDE9JHRlc3RfbmFtZS4xLmxvZworT1VUMj0kdGVzdF9uYW1lLjIubG9nCitTS0lQX0dVTlpJUD10cnVlCitPTkVfUEFTU19PTkxZPXRydWUKK01LRTJGU19TS0lQX1BST0dSRVNTPXRydWUKK01LRTJGU19TS0lQX0NIRUNLX01TRz10cnVlCitleHBvcnQgTUtFMkZTX1NLSVBfUFJPR1JFU1MgTUtFMkZTX1NLSVBfQ0hFQ0tfTVNHCis+ICRUTVBGSUxFCitQUkVQX0NNRD0nJE1LRTJGUyAtRiAtbyBMaW51eCAkTUtFMkZTX09QVFMgJFRNUEZJTEUgJEZTX1NJWkUgMj4mMSB8CisJc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgLWUgInM7JFRNUEZJTEU7dGVzdC5pbWc7IiA+ICRPVVQxOworCSRERUJVR0ZTIC1SIGZlYXR1cmVzICRUTVBGSUxFIDI+JjEgfAorCXNlZCAtZiAkY21kX2Rpci9maWx0ZXIuc2VkIC1lICJzOyRUTVBGSUxFO3Rlc3QuaW1nOyIgPj4gJE9VVDEnCitBRlRFUl9DTUQ9JyREVU1QRTJGUyAkVE1QRklMRSAyPiYxIHwgc2VkIC1mICRjbWRfZGlyL2ZpbHRlci5zZWQgPj4gJE9VVDEnCisuICRjbWRfZGlyL3J1bl9lMmZzY2sKKworZWxzZSAjaWYgdGVzdCAteCAkREVCVUdGU19FWEU7IHRoZW4KKwlybSAtZiAkdGVzdF9uYW1lLm9rICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAic2tpcHBlZCIKK2ZpIAorCit1bnNldCBERVNDUklQVElPTiBGU19TSVpFIE1LRTJGU19PUFRTIE1LRTJGU19TS0lQX1BST0dSRVNTIFwKKwlNS0UyRlNfREVWSUNFX1NFQ1RTSVpFCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvc2NyaXB0cy9ta2R1cCBiL2UyZnNwcm9ncy90ZXN0cy9zY3JpcHRzL21rZHVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0OGE5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvc2NyaXB0cy9ta2R1cApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKK09QVFM9Ii1PIGJpZ2FsbG9jIC1DIDgxOTIiCitTSVpFPTQwOTYKK0lNRz0vdG1wL2Zvby5pbWcKK1RNUD0kKG1rdGVtcCkKK1NJWkVfQT0xNTAwMAorU0laRV9CPTUwMDAKK1NJWkVfQz0yMDAwMAorCitERUJVR0ZTPS4vZGVidWdmcy9kZWJ1Z2ZzCitNS0UyRlM9Li9taXNjL21rZTJmcworRlNDSz0uL2UyZnNjay9lMmZzY2sKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUcgYnM9MWsgY291bnQ9JFNJWkUKK2VjaG8gJE1LRTJGUyAtRiAtdCBleHQ0IC1MIHRlc3QgJE9QVFMgdGVzdC5pbWcgJFNJWkUKKyRNS0UyRlMgLUYgLXQgZXh0NCAtTCB0ZXN0ICRPUFRTICRJTUcgJFNJWkUKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QIGJzPSRTSVpFX0EgY291bnQ9MSA+JiAvZGV2L251bGwKK2VjaG8gV3JpdGluZyAkU0laRV9BIGJ5dGVzIHRvIGEKKyRERUJVR0ZTIC13IC1SICJ3cml0ZSAkVE1QIGEiICRJTUcKK0JMS1M9JCguL2RlYnVnZnMvZGVidWdmcyAtUiAiYmxvY2tzIGEiICRJTUcpCitjcCAvZGV2L251bGwgJFRNUAorZWNobyAiUmVsZWFzaW5nIGJsb2NrcyAkQkxLUyIKK2ZvciBpIGluICRCTEtTIDsgZG8gZWNobyAiZnJlZWIgJGkiID4+ICRUTVA7IGRvbmUKKyRERUJVR0ZTIC13ICRJTUcgPCAkVE1QID4mIC9kZXYvbnVsbAorCitlY2hvIFdyaXRpbmcgJFNJWkVfQiBieXRlcyB0byBiCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUCBicz0kU0laRV9CIGNvdW50PTEgPiYgL2Rldi9udWxsCiskREVCVUdGUyAtdyAtUiAid3JpdGUgJFRNUCBiIiAkSU1HCitpZiBbIC1uICIkU0laRV9DIiBdOyB0aGVuCisgICAgQkxLUz0kKC4vZGVidWdmcy9kZWJ1Z2ZzIC1SICJibG9ja3MgYiIgJElNRykKKyAgICBjcCAvZGV2L251bGwgJFRNUAorICAgIGVjaG8gIlJlbGVhc2luZyBibG9ja3MgJEJMS1MiCisgICAgZm9yIGkgaW4gJEJMS1MgOyBkbyBlY2hvICJmcmVlYiAkaSIgPj4gJFRNUDsgZG9uZQorICAgICRERUJVR0ZTIC13ICRJTUcgPCAkVE1QID4mIC9kZXYvbnVsbAorCisgICAgZWNobyBXcml0aW5nICRTSVpFX0MgYnl0ZXMgdG8gYworICAgIGRkIGlmPS9kZXYvemVybyBvZj0kVE1QIGJzPSRTSVpFX0MgY291bnQ9MSA+JiAvZGV2L251bGwKKyAgICAkREVCVUdGUyAtdyAtUiAid3JpdGUgJFRNUCBjIiAkSU1HCitmaQorZWNobyAic2V0X2lub2RlX2ZpZWxkIGEgbXRpbWUgMjAxMTA3MDQwMDAwIiA+ICRUTVAKK2VjaG8gInNldF9pbm9kZV9maWVsZCBiIG10aW1lIDIwMTEwNzA1MDAwMCIgPj4gJFRNUAoraWYgWyAtbiAiJFNJWkVfQyIgXTsgdGhlbgorICAgIGVjaG8gInNldF9pbm9kZV9maWVsZCBjIG10aW1lIDIwMTEwNzA2MDAwMCIgPj4gJFRNUAorZmkKKyRERUJVR0ZTIC13ICRJTUcgPCAkVE1QID4mIC9kZXYvbnVsbAorCiskRlNDSyAtZnkgJElNRworcm0gJFRNUAorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvc2NyaXB0cy9yZXNpemVfdGVzdCBiL2UyZnNwcm9ncy90ZXN0cy9zY3JpcHRzL3Jlc2l6ZV90ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhOGIwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvc2NyaXB0cy9yZXNpemVfdGVzdApAQCAtMCwwICsxLDE1NSBAQAorIyEvYmluL3NoCisKK3Jlc2l6ZV90ZXN0ICgpIHsKKworcm0gLWYgJFRNUEZJTEUKK3RvdWNoICRUTVBGSUxFCisKKyMgVmVyaWZ5IHRoYXQgdGhlICRUTVAgZmlsZXN5c3RlbSBoYW5kbGVzICRTSVpFXzIgc3BhcnNlIGZpbGVzLgorIyBJZiB0aGF0IGZhaWxzLCB0cnkgdGhlIGxvY2FsIGZpbGVzeXN0ZW0gaW5zdGVhZC4KK2lmIHRydW5jYXRlIC1zICRTSVpFXzIgJFRNUEZJTEUgMj4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgID4gJFRNUEZJTEUKK2Vsc2UKKwlybSAkVE1QRklMRQorCWV4cG9ydCBUTVBGSUxFPSQoVE1QRElSPS4gbWt0ZW1wIC10ICR0ZXN0X25hbWUuWFhYWFhYLnRtcCkKKwl0b3VjaCAkVE1QRklMRQorCWlmICEgdHJ1bmNhdGUgLXMgJFNJWkVfMiAkVE1QRklMRSAyPiAvZGV2L251bGw7IHRoZW4KKwkJcm0gJFRNUEZJTEUKKwkJcmV0dXJuIDExMQorCWZpCitmaQorCitlY2hvICRNS0UyRlMgJEZFQVRVUkVTIC1xRiAkVE1QRklMRSAkU0laRV8xID4gJExPRworJE1LRTJGUyAkRkVBVFVSRVMgLXFGICRUTVBGSUxFICRTSVpFXzEgPj4gJExPRworCitPVVRfVE1QPSQobWt0ZW1wIC10IGNzdW0tdG1wLlhYWFhYWCkKKworZGF0ZSA+ICRPVVRfVE1QCitjYXQgJEUyRlNDSyA+PiAkT1VUX1RNUAorZWNobyAkQ1JDU1VNICRPVVRfVE1QID4+ICRMT0cgMj4mMQorQ1NVTV8xPSQoJENSQ1NVTSAkT1VUX1RNUCkKK2VjaG8gQ2hlY2tzdW0gaXMgJENTVU1fMSA+PiAkTE9HCisKK2VjaG8gU2V0dGluZyB1cCBmaWxlIHN5c3RlbSA+PiAkTE9HCiskREVCVUdGUyAtdyAkVE1QRklMRSAgPj4gJExPRyAyPiYxIDw8IEVPRgorbWtkaXIgdGVzdAorY2QgdGVzdAord3JpdGUgJE9VVF9UTVAgZTJmc2NrCitscyAvdGVzdAorc3RhdCAvdGVzdC9lMmZzY2sKK3F1aXQKK0VPRgorZWNobyAiICIgPj4gJExPRworCitybSAtZiAkT1VUX1RNUAorCitlY2hvICRGU0NLIC1meSAkVE1QRklMRSA+PiAkTE9HIDI+JjEgCiskRlNDSyAtZnkgJFRNUEZJTEUgPj4gJExPRyAyPiYxIAorCitlY2hvICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMSAKK2lmICEgJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMQordGhlbgorCWR1bXBlMmZzICRUTVBGSUxFID4+ICRMT0cKKwlyZXR1cm4gMQorZmkKKworZWNobyAkREVCVUdGUyAtUiAiZHVtcCAvdGVzdC9lMmZzY2sgJE9VVF9UTVAiICRUTVBGSUxFID4+ICRMT0cgMj4mMQorJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKworZWNobyAkQ1JDU1VNICRPVVRfVE1QID4+ICRMT0cgMj4mMQorQ1NVTV8yPSQoJENSQ1NVTSAkT1VUX1RNUCkKK2VjaG8gQ2hlY2tzdW0gaXMgJENTVU1fMiA+PiAkTE9HCisKK2lmIHRlc3QgIiRDU1VNXzEiICE9ICIkQ1NVTV8yIgordGhlbgorCXJldHVybiAxCitmaQorCitlY2hvICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMSAKK2lmICEgJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMQordGhlbgorCWR1bXBlMmZzICRUTVBGSUxFID4+ICRMT0cKKwlyZXR1cm4gMQorZmkKKworZWNobyAkREVCVUdGUyAtUiAiZHVtcCAvdGVzdC9lMmZzY2sgJE9VVF9UTVAiICRUTVBGSUxFID4+ICRMT0cgMj4mMQorJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKworZWNobyAkQ1JDU1VNICRPVVRfVE1QID4+ICRMT0cgMj4mMQorQ1NVTV8yPSQoJENSQ1NVTSAkT1VUX1RNUCkKK2VjaG8gQ2hlY2tzdW0gaXMgJENTVU1fMiA+PiAkTE9HCisKK2lmIHRlc3QgIiRDU1VNXzEiICE9ICIkQ1NVTV8yIgordGhlbgorCXJldHVybiAxCitmaQorCitlY2hvICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMSAKK2lmICEgJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMQordGhlbgorCWR1bXBlMmZzICRUTVBGSUxFID4+ICRMT0cKKwlyZXR1cm4gMQorZmkKKworZWNobyAkREVCVUdGUyAtUiAiZHVtcCAvdGVzdC9lMmZzY2sgJE9VVF9UTVAiICRUTVBGSUxFID4+ICRMT0cgMj4mMQorJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKworZWNobyAkQ1JDU1VNICRPVVRfVE1QID4+ICRMT0cgMj4mMQorQ1NVTV8yPSQoJENSQ1NVTSAkT1VUX1RNUCkKK2VjaG8gQ2hlY2tzdW0gaXMgJENTVU1fMiA+PiAkTE9HCisKK2lmIHRlc3QgIiRDU1VNXzEiICE9ICIkQ1NVTV8yIgordGhlbgorCXJldHVybiAxCitmaQorCitlY2hvICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCitpZiAhICRSRVNJWkUyRlMgJFJFU0laRTJGU19PUFRTIC1kIDMxIC1NICRUTVBGSUxFICRTSVpFXzIgPj4gJExPRyAyPiYxCit0aGVuCisJcmV0dXJuIDEKK2ZpCisKK2VjaG8gJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMSAKK2lmICEgJEZTQ0sgLWZwICRUTVBGSUxFID4+ICRMT0cgMj4mMQordGhlbgorCWR1bXBlMmZzICRUTVBGSUxFID4+ICRMT0cKKwlyZXR1cm4gMQorZmkKKworZWNobyAkREVCVUdGUyAtUiAiZHVtcCAvdGVzdC9lMmZzY2sgJE9VVF9UTVAiICRUTVBGSUxFID4+ICRMT0cgMj4mMQorJERFQlVHRlMgLVIgImR1bXAgL3Rlc3QvZTJmc2NrICRPVVRfVE1QIiAkVE1QRklMRSA+PiAkTE9HIDI+JjEKKworZWNobyAkQ1JDU1VNICRPVVRfVE1QID4+ICRMT0cgMj4mMQorQ1NVTV8yPSQoJENSQ1NVTSAkT1VUX1RNUCkKK2VjaG8gQ2hlY2tzdW0gaXMgJENTVU1fMiA+PiAkTE9HCisKK3JtICRPVVRfVE1QCit1bnNldCBPVVRfVE1QCisKK2lmIHRlc3QgIiRDU1VNXzEiICE9ICIkQ1NVTV8yIgordGhlbgorCXJldHVybiAxCitmaQorCitybSAkVE1QRklMRQorcmV0dXJuIDAKKworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3RfZXh0X2pubF9ybS9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvdF9leHRfam5sX3JtL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFmODBjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3RfZXh0X2pubF9ybS9zY3JpcHQKQEAgLTAsMCArMSwyNiBAQAordGVzdF9kZXNjcmlwdGlvbj0icmVtb3ZlIG1pc3NpbmcgZXh0ZXJuYWwgam91cm5hbCBkZXZpY2UiCitPVVQ9JHRlc3RfbmFtZS5sb2cKKworZGQgaWY9L2Rldi96ZXJvIG9mPSRUTVBGSUxFIGJzPTFrIGNvdW50PTUxMiA+IC9kZXYvbnVsbCAyPiYxCisKK2VjaG8gbWtlMmZzIC1xIC1GIC1vIExpbnV4IC1iIDEwMjQgJFRNUEZJTEUgPj4gJE9VVAorJE1LRTJGUyAtcSAtRiAtbyBMaW51eCAtSSAxMjggLWIgMTAyNCAkVE1QRklMRSA+PiAkT1VUIDI+JjEKKworZWNobyAiZGVidWdmcyBhZGQgam91cm5hbCBkZXZpY2UvVVVJRCIgPj4gJE9VVAorJERFQlVHRlMgLXcgLWYgLSAkVE1QRklMRSA8PC0gRU9GID4+ICRPVVQgMj4mMQorCWZlYXR1cmUgaGFzX2pvdXJuYWwKKwlzc3Ygam91cm5hbF9kZXYgMHg5OTk5CisJc3N2IGpvdXJuYWxfdXVpZCAxZGIzZjY3Ny02ODMyLTRhZGItYmFmYy04ZTQwNTljMzBhMzMKK0VPRgorCitlY2hvICJ0dW5lMmZzIC1mIC1PIF5oYXNfam91cm5hbCAkVE1QRklMRSIgPj4gJE9VVAorJFRVTkUyRlMgLWYgLU8gXmhhc19qb3VybmFsICRUTVBGSUxFID4+ICRPVVQgMj4mMQorJERVTVBFMkZTIC1oICRUTVBGSUxFID4+ICRPVVQgMj4mMQoraWYgWyAiJChncmVwICdKb3VybmFsIFVVSUQ6JyAkT1VUKSIgXTsgdGhlbgorCW12ICR0ZXN0X25hbWUubG9nICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKK2Vsc2UKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJbXYgJHRlc3RfbmFtZS5sb2cgJHRlc3RfbmFtZS5vaworZmkKK3JtIC1mICRUTVBGSUxFCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvdF9tbXBfMW9uL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvdF9tbXBfMW9uL25hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlMTZiMgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy90X21tcF8xb24vbmFtZQpAQCAtMCwwICsxIEBACitlbmFibGUgTU1QIHVzaW5nIHR1bmUyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90X21tcF8xb24vc2NyaXB0IGIvZTJmc3Byb2dzL3Rlc3RzL3RfbW1wXzFvbi9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjODE1OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy90X21tcF8xb24vc2NyaXB0CkBAIC0wLDAgKzEsMzkgQEAKK0ZTQ0tfT1BUPS15ZgorCitUTVBGSUxFPSR0ZXN0X25hbWUudG1wCis+ICRUTVBGSUxFCisKK3N0YXQgLWYgJFRNUEZJTEUgfCBncmVwIC1xICJUeXBlOiB0bXBmcyIKK2lmIFsgJD8gPSAwIF0gOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogc2tpcHBlZCBmb3IgdG1wZnMgKG5vIE9fRElSRUNUKSIKKwlyZXR1cm4gMAorZmkKKworJE1LRTJGUyAtcSAtRiAtbyBMaW51eCAtYiA0MDk2ICRUTVBGSUxFIDEwMCA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskVFVORTJGUyAtTyBtbXAgLUUgbW1wX3VwZGF0ZV9pbnRlcnZhbD0xICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gInR1bmUyZnMgLU8gbW1wIGZhaWxlZCB3aXRoICRzdGF0dXMiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gImUyZnNjayB3aXRoIE1NUCBlbmFibGVkIGZhaWxlZCB3aXRoICRzdGF0dXMiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorcm0gLWYgJFRNUEZJTEUKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90X21tcF8yb2ZmL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvdF9tbXBfMm9mZi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2FjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdF9tbXBfMm9mZi9uYW1lCkBAIC0wLDAgKzEgQEAKK2Rpc2FibGUgTU1QIHVzaW5nIHR1bmUyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90X21tcF8yb2ZmL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy90X21tcF8yb2ZmL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVlMTRlCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3RfbW1wXzJvZmYvc2NyaXB0CkBAIC0wLDAgKzEsMzkgQEAKK0ZTQ0tfT1BUPS15ZgorCitUTVBGSUxFPSR0ZXN0X25hbWUudG1wCis+ICRUTVBGSUxFCisKK3N0YXQgLWYgJFRNUEZJTEUgfCBncmVwIC1xICJUeXBlOiB0bXBmcyIKK2lmIFsgJD8gPSAwIF07IHRoZW4KKwlybSAtZiAkVE1QRklMRQorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIGZvciB0bXBmcyAobm8gT19ESVJFQ1QpIgorCXJldHVybiAwCitmaQorCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgLU8gbW1wICRUTVBGSUxFIDEwMCA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyAtTyBtbXAgZmFpbGVkIiA+ICR0ZXN0X25hbWUuZmFpbGVkCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IGZhaWxlZCIKKwlyZXR1cm4gJHN0YXR1cworZmkKKworJFRVTkUyRlMgLU8gXm1tcCAkVE1QRklMRSA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gInR1bmUyZnMgLU8gXm1tcCBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiID0gMCBdIDsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJZWNobyAiZTJmc2NrIGFmdGVyIE1NUCBkaXNhYmxlIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3RfcXVvdGFfMW9uL25hbWUgYi9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8xb24vbmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJlMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3RfcXVvdGFfMW9uL25hbWUKQEAgLTAsMCArMSBAQAorZW5hYmxlIHF1b3RhIHVzaW5nIHR1bmUyZnMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90X3F1b3RhXzFvbi9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8xb24vc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTdmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8xb24vc2NyaXB0CkBAIC0wLDAgKzEsNDIgQEAKK0ZTQ0tfT1BUPS15ZgorCitpZiBbICIkUVVPVEEiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IHNraXBwZWQiCisJcmV0dXJuIDAKK2ZpCisKKyRNS0UyRlMgLXEgLUYgLW8gTGludXggLWIgNDA5NiAkVE1QRklMRSAxMDAwMCA+ICR0ZXN0X25hbWUubG9nIDI+JjEKK3N0YXR1cz0kPworaWYgWyAiJHN0YXR1cyIgIT0gMCBdIDsgdGhlbgorCWVjaG8gIm1rZTJmcyBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUuMiBicz0xMDQ4NTc2IGNvdW50PTEgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorY2F0IDw8LSBFT0YgfCAkREVCVUdGUyAtdyAtZiAvZGV2L3N0ZGluICRUTVBGSUxFID4+ICR0ZXN0X25hbWUubG9nIDI+JjEKKwl3cml0ZSAkVE1QRklMRS4yIGZpbGUxCisJc2V0X2lub2RlX2ZpZWxkIGZpbGUxIHVpZCA1MDAKKwlzZXRfaW5vZGVfZmllbGQgZmlsZTEgZ2lkIDUwMAorRU9GCitybSAtZiAkVE1QRklMRS4yCisKKyRUVU5FMkZTIC1PIHF1b3RhICAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJ0dW5lMmZzIC1PIHF1b3RhIGZhaWxlZCB3aXRoICRzdGF0dXMiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gImUyZnNjayB3aXRoIHF1b3RhIGVuYWJsZWQgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCitybSAtZiAkVE1QRklMRQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3RfcXVvdGFfMm9mZi9uYW1lIGIvZTJmc3Byb2dzL3Rlc3RzL3RfcXVvdGFfMm9mZi9uYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGVjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8yb2ZmL25hbWUKQEAgLTAsMCArMSBAQAorZGlzYWJsZSBxdW90YSB1c2luZyB0dW5lMmZzCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8yb2ZmL3NjcmlwdCBiL2UyZnNwcm9ncy90ZXN0cy90X3F1b3RhXzJvZmYvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzBjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdF9xdW90YV8yb2ZmL3NjcmlwdApAQCAtMCwwICsxLDM1IEBACitGU0NLX09QVD0teWYKKworaWYgWyAiJFFVT1RBIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBza2lwcGVkIgorCXJldHVybiAwCitmaQorCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1iIDQwOTYgLU8gcXVvdGEgJFRNUEZJTEUgMTAwID4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiAhPSAwIF0gOyB0aGVuCisJZWNobyAibWtlMmZzIC1PIHF1b3RhIGZhaWxlZCIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKKyRUVU5FMkZTIC1PIF5xdW90YSAkVE1QRklMRSA+PiAkdGVzdF9uYW1lLmxvZyAyPiYxCitzdGF0dXM9JD8KK2lmIFsgIiRzdGF0dXMiICE9IDAgXSA7IHRoZW4KKwllY2hvICJ0dW5lMmZzIC1PIF5xdW90YSBmYWlsZWQiID4gJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorCXJldHVybiAkc3RhdHVzCitmaQorCiskRlNDSyAkRlNDS19PUFQgJFRNUEZJTEUgPj4gJHRlc3RfbmFtZS5sb2cgMj4mMQorc3RhdHVzPSQ/CitpZiBbICIkc3RhdHVzIiA9IDAgXSA7IHRoZW4KKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogb2siCisJdG91Y2ggJHRlc3RfbmFtZS5vaworZWxzZQorCWVjaG8gImUyZnNjayB3aXRoIHF1b3RhIGVuYWJsZWQgZmFpbGVkIHdpdGggJHN0YXR1cyIgPiAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCisJcmV0dXJuICRzdGF0dXMKK2ZpCisKK3JtIC1mICRUTVBGSUxFCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdGVzdHMvdGVzdF9jb25maWcgYi9lMmZzcHJvZ3MvdGVzdHMvdGVzdF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4OTY1NgotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy90ZXN0cy90ZXN0X2NvbmZpZwpAQCAtMCwwICsxLDM4IEBACisjCisjIFRlc3QgY29uZmlndXJhdGlvbgorIworCit1bnNldCBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIExDX1RFTEVQSE9ORSBMQ19USU1FIFBBR0VSCitGU0NLPSIkVVNFX1ZBTEdSSU5EIC4uL2UyZnNjay9lMmZzY2siCitNS0UyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9ta2UyZnMiCitEVU1QRTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL2R1bXBlMmZzIgorVFVORTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL3R1bmUyZnMiCitDSEFUVFI9IiRVU0VfVkFMR1JJTkQuLi9taXNjL2NoYXR0ciIKK0xTQVRUUj0iJFVTRV9WQUxHUklORCAuLi9taXNjL2xzYXR0ciIKK0UySU1BR0U9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9lMmltYWdlIgorRTJJTUFHRV9FWEU9Ii4uL21pc2MvZTJpbWFnZSIKK0RFQlVHRlM9IiRVU0VfVkFMR1JJTkQgLi4vZGVidWdmcy9kZWJ1Z2ZzIgorREVCVUdGU19FWEU9Ii4uL2RlYnVnZnMvZGVidWdmcyIKK1RFU1RfQklUUz0iLi4vZGVidWdmcy9kZWJ1Z2ZzIgorUkVTSVpFMkZTX0VYRT0iLi4vcmVzaXplL3Jlc2l6ZTJmcyIKK1JFU0laRTJGUz0iJFVTRV9WQUxHUklORCAkUkVTSVpFMkZTX0VYRSIKK0UyVU5ET19FWEU9Ii4uL21pc2MvZTJ1bmRvIgorVEVTVF9SRUw9Li4vdGVzdHMvcHJvZ3MvdGVzdF9yZWwKK1RFU1RfSUNPVU5UPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfaWNvdW50CitDUkNTVU09Li4vdGVzdHMvcHJvZ3MvY3Jjc3VtCitMRF9MSUJSQVJZX1BBVEg9Li4vbGliOi4uL2xpYi9leHQyZnM6Li4vbGliL2UycDouLi9saWIvZXQ6Li4vbGliL3NzCitEWUxEX0xJQlJBUllfUEFUSD0uLi9saWI6Li4vbGliL2V4dDJmczouLi9saWIvZTJwOi4uL2xpYi9ldDouLi9saWIvc3MKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEgKK2V4cG9ydCBEWUxEX0xJQlJBUllfUEFUSAorVFo9R01UMAorZXhwb3J0IFRaCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorRTJGU0NLX0NPTkZJRz0vZGV2L251bGwKK2V4cG9ydCBFMkZTQ0tfQ09ORklHCitNS0UyRlNfQ09ORklHPS4vbWtlMmZzLmNvbmYKK2V4cG9ydCBNS0UyRlNfQ09ORklHCitFMkZTUFJPR1NfU0tJUF9QUk9HUkVTUz15ZXMKK2V4cG9ydCBFMkZTUFJPR1NfU0tJUF9QUk9HUkVTUworRVhUMkZTX05PX01UQUJfT0s9eWVzCitleHBvcnQgRVhUMkZTX05PX01UQUJfT0sKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90ZXN0X29uZS5pbiBiL2UyZnNwcm9ncy90ZXN0cy90ZXN0X29uZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUzZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Rlc3Rfb25lLmluCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIyBydW4gYSBzaW5nbGUgcmVncmVzc2lvbiB0ZXN0CisKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCisKK2Nhc2UgIiQxIiBpbgorICAgIC0tdmFsZ3JpbmQpCisgICAgCWV4cG9ydCBVU0VfVkFMR1JJTkQ9InZhbGdyaW5kIC1xIC0tc2ltLWhpbnRzPWxheC1pb2N0bHMiCisJc2hpZnQ7CisJOzsKKyAgICAtLXZhbGdyaW5kLWxlYWtjaGVjaykKKyAgICAJZXhwb3J0IFVTRV9WQUxHUklORD0idmFsZ3JpbmQgLS1zaW0taGludHM9bGF4LWlvY3RscyAtLWxlYWstY2hlY2s9ZnVsbCAtLXNob3ctcmVhY2hhYmxlPXllcyAtLWxvZy1maWxlPS90bXAvdmFsZ3JpbmQtJXAubG9nIgorCXNoaWZ0OworCTs7Citlc2FjCisKK2Nhc2UgIiQxIiBpbgorICAgICouZmFpbGVkfCoubmV3fCoub2t8Ki5sb2d8Ki50bXApCWV4aXQgMCA7OworZXNhYworCit0ZXN0X2Rpcj0kMQorY21kX2Rpcj0kU1JDRElSCisKK2lmIHRlc3QgIiRURVNUX0NPTkZJRyJ4ID0geDsgdGhlbgorCVRFU1RfQ09ORklHPSRTUkNESVIvdGVzdF9jb25maWcKK2ZpCisKKy4gJFRFU1RfQ09ORklHCisKK1RNUEZJTEU9JChta3RlbXAgLXQgZTJmc3Byb2dzLXRtcC5YWFhYWFgpCisKK3Rlc3RfbmFtZT1gZWNobyAkdGVzdF9kaXIgfCBzZWQgLWUgJ3M7LiovOzsnYAoraWYgWyAtZiAkdGVzdF9kaXIgXSA7IHRoZW4KKwlleGl0IDA7CitmaQoraWYgWyAhIC1kICR0ZXN0X2RpciBdIDsgdGhlbgorCWVjaG8gIlRoZSB0ZXN0ICckdGVzdF9uYW1lJyBkb2VzIG5vdCBleGlzdC4iCisJZXhpdCAwOworZmkKK2lmIFsgLXogImBscyAkdGVzdF9kaXJgIiBdOyB0aGVuCisJZXhpdCAwCitmaQoraWYgWyAtZiAkdGVzdF9kaXIvbmFtZSBdOyB0aGVuCisJdGVzdF9kZXNjcmlwdGlvbj1gY2F0ICR0ZXN0X2Rpci9uYW1lYAorZWxzZQorCXRlc3RfZGVzY3JpcHRpb249CitmaQorCitybSAtZiAkdGVzdF9uYW1lLm9rICR0ZXN0X25hbWUuZmFpbGVkCisjZWNobyAtZSAtbiAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246XHIiCisKK2lmIFsgLWYgJHRlc3RfZGlyL3NjcmlwdCBdOyB0aGVuCisJLiAkdGVzdF9kaXIvc2NyaXB0CitlbHNlCisJdGVzdF9iYXNlPWBlY2hvICR0ZXN0X25hbWUgfCBzZWQgLWUgJ3MvXy4qLy8nYAorCWRlZmF1bHRfc2NyaXB0PSRTUkNESVIvZGVmYXVsdHMvJHt0ZXN0X2Jhc2V9X3NjcmlwdAorCWlmIFsgLWYgJGRlZmF1bHRfc2NyaXB0IF07IHRoZW4KKwkJLiAkU1JDRElSL2RlZmF1bHRzLyR7dGVzdF9iYXNlfV9zY3JpcHQKKwllbHNlCisJCWVjaG8gIiR0ZXN0X25hbWU6IE1pc3NpbmcgdGVzdCBzY3JpcHQgJGRlZmF1bHRfc2NyaXB0ISIKKwlmaQorCVsgLWYgJHRlc3RfbmFtZS5mYWlsZWQgXSAmJiBjYXQgJHRlc3RfbmFtZS5mYWlsZWQKK2ZpCisKK2lmIFsgIiRTS0lQX1VOTElOSyIgIT0gInRydWUiIF0gOyB0aGVuCisJcm0gLWYgJFRNUEZJTEUKK2ZpCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90ZXN0X3Bvc3QgYi9lMmZzcHJvZ3MvdGVzdHMvdGVzdF9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEyNTEyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdGVzdF9wb3N0CkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIyByZXBvcnQgc3RhdHMgYWJvdXQgdGVzdCBzY3JpcHRzIHRoYXQgd2VyZSBydW4KKworbnVtX29rPWBscyAqLm9rIDI+L2Rldi9udWxsIHwgd2MgLWxgCitudW1fZmFpbGVkPWBscyAqLmZhaWxlZCAyPi9kZXYvbnVsbCB8IHdjIC1sYAorCitlY2hvICIkbnVtX29rIHRlc3RzIHN1Y2NlZWRlZAkkbnVtX2ZhaWxlZCB0ZXN0cyBmYWlsZWQiCisKK3Rlc3QgIiRudW1fZmFpbGVkIiAtZXEgMCAmJiBleGl0IDAKKworZWNobyAtbiAiVGVzdHMgZmFpbGVkOiAiCitmb3IgZm5hbWUgaW4gJChscyAqLmZhaWxlZCk7IGRvCisJZWNobyAtbiAiJHtmbmFtZSUlLmZhaWxlZH0gIgorZG9uZQorZWNobyAiIgorCitleGl0IDEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy90ZXN0X3NjcmlwdC5pbiBiL2UyZnNwcm9ncy90ZXN0cy90ZXN0X3NjcmlwdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFkMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3Rlc3Rfc2NyaXB0LmluCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIyBSdW4gYWxsIG9yIHNwZWNpZmllZCB0ZXN0IHNjcmlwdHMKKyMKKworY2FzZSAiJDEiIGluCisgICAgLS12YWxncmluZCkKKyAgICAJZXhwb3J0IFVTRV9WQUxHUklORD0idmFsZ3JpbmQgLXEgLS1zaW0taGludHM9bGF4LWlvY3RscyIKKwlzaGlmdDsKKwk7OworICAgIC0tdmFsZ3JpbmQtbGVha2NoZWNrKQorICAgIAlleHBvcnQgVVNFX1ZBTEdSSU5EPSJ2YWxncmluZCAtLXNpbS1oaW50cz1sYXgtaW9jdGxzIC0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzIC0tbG9nLWZpbGU9L3RtcC92YWxncmluZC0lcC5sb2ciCisJc2hpZnQ7CisJOzsKK2VzYWMKKworaWYgdGVzdCAiJDEieCA9IHggOyB0aGVuCisgIFRFU1RTPWBscyAtZCAkU1JDRElSL1thLXpBLVpdXypgCitlbHNlCisgIFRFU1RTPQorICBmb3IgaTsgZG8KKyAgICBjYXNlICRpIGluCisJW2EtekEtWl0pCVRFU1RTPSIkVEVTVFMgJFNSQ0RJUi8ke2l9XyoiIDs7CisJKikJCVRFU1RTPSIkVEVTVFMgJFNSQ0RJUi8kaSIgOzsKKyAgICBlc2FjCisgIGRvbmUKK2ZpCisKK2ZvciB0ZXN0X2RpciBpbiAkVEVTVFM7IGRvCisJLi90ZXN0X29uZSAkdGVzdF9kaXIKK2RvbmUKKworJFNSQ0RJUi90ZXN0X3Bvc3QKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy90ZXN0cy91X21rZTJmcy9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvdV9ta2UyZnMvc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZjVlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdGVzdHMvdV9ta2UyZnMvc2NyaXB0CkBAIC0wLDAgKzEsMzQgQEAKK3Rlc3RfZGVzY3JpcHRpb249ImUydW5kbyB3aXRoIG1rZTJmcyIKK2lmIHRlc3QgLXggJEUyVU5ET19FWEU7IHRoZW4KKworRTJGU1BST0dTX1VORE9fRElSPS90bXAKK2V4cG9ydCBFMkZTUFJPR1NfVU5ET19ESVIKK1REQl9GSUxFPSRFMkZTUFJPR1NfVU5ET19ESVIvbWtlMmZzLSQoYmFzZW5hbWUgJFRNUEZJTEUpLmUydW5kbworT1VUPSR0ZXN0X25hbWUubG9nCitybSAtZiAkVERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxCisKK2RkIGlmPS9kZXYvemVybyBvZj0kVE1QRklMRSBicz0xayBjb3VudD01MTIgPiAvZGV2L251bGwgMj4mMQorCitlY2hvIG1rZTJmcyAtcSAtRiAtbyBMaW51eCAtYiAxMDI0IHRlc3QuaW1nICA+ICRPVVQKKyRNS0UyRlMgLUYgLW8gTGludXggLUkgMTI4IC1iIDEwMjQgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorbWQ1PWBtZDVzdW0gJFRNUEZJTEUgfCBjdXQgLWQgIiAiIC1mIDFgCitlY2hvIG1kNXN1bSBiZWZvcmUgbWtlMmZzICRtZDUgPj4gJE9VVAorCitlY2hvIHVzaW5nIG1rZTJmcyB0byB0ZXN0IGUydW5kbyA+PiAkT1VUCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1JIDI1NiAtTyB1bmluaXRfYmcgLUUgbGF6eV9pdGFibGVfaW5pdD0xIC1iIDEwMjQgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorbmV3X21kNT1gbWQ1c3VtICRUTVBGSUxFIHwgY3V0IC1kICIgIiAtZiAxYAorZWNobyBtZDVzdW0gYWZ0ZXIgbWtlMmZzICRuZXdfbWQ1ID4+ICRPVVQKKworJEUyVU5ET19FWEUgICRUREJfRklMRSAkVE1QRklMRSAgPj4gJE9VVCAyPiYxCituZXdfbWQ1PWBtZDVzdW0gJFRNUEZJTEUgfCBjdXQgLWQgIiAiIC1mIDFgCitlY2hvIG1kNXN1bSBhZnRlciBlMnVuZG8gJG5ld19tZDUgPj4gJE9VVAorCitpZiBbICRtZDUgPSAkbmV3X21kNSBdOyB0aGVuCisJZWNobyAiJHRlc3RfbmFtZTogJHRlc3RfZGVzY3JpcHRpb246IG9rIgorCXRvdWNoICR0ZXN0X25hbWUub2sKK2Vsc2UKKwlsbiAtZiAkdGVzdF9uYW1lLmxvZyAkdGVzdF9uYW1lLmZhaWxlZAorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBmYWlsZWQiCitmaQorcm0gLWYgJFREQl9GSUxFICRUTVBGSUxFCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3Rlc3RzL3VfdHVuZTJmcy9zY3JpcHQgYi9lMmZzcHJvZ3MvdGVzdHMvdV90dW5lMmZzL3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2MxZTBjCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3Rlc3RzL3VfdHVuZTJmcy9zY3JpcHQKQEAgLTAsMCArMSwzNCBAQAordGVzdF9kZXNjcmlwdGlvbj0iZTJ1bmRvIHdpdGggdHVuZTJmcyIKK2lmIHRlc3QgLXggJEUyVU5ET19FWEU7IHRoZW4KKworRTJGU1BST0dTX1VORE9fRElSPS90bXAKK2V4cG9ydCBFMkZTUFJPR1NfVU5ET19ESVIKK1REQl9GSUxFPSRFMkZTUFJPR1NfVU5ET19ESVIvdHVuZTJmcy0kKGJhc2VuYW1lICRUTVBGSUxFKS5lMnVuZG8KK09VVD0kdGVzdF9uYW1lLmxvZworcm0gLWYgJFREQl9GSUxFID4vZGV2L251bGwgMj4mMQorCitkZCBpZj0vZGV2L3plcm8gb2Y9JFRNUEZJTEUgYnM9MWsgY291bnQ9NTEyID4gL2Rldi9udWxsIDI+JjEKKworZWNobyBta2UyZnMgLXEgLUYgLW8gTGludXggLWIgMTAyNCAkVE1QRklMRSAgPiAkT1VUCiskTUtFMkZTIC1xIC1GIC1vIExpbnV4IC1JIDEyOCAtYiAxMDI0ICRUTVBGSUxFICA+PiAkT1VUIDI+JjEKK21kNT1gbWQ1c3VtICRUTVBGSUxFIHwgY3V0IC1kICIgIiAtZiAxYAorZWNobyBtZDVzdW0gYmVmb3JlIHR1bmUyZnMgJG1kNSA+PiAkT1VUCisKK2VjaG8gdXNpbmcgdHVuZTJmcyB0byB0ZXN0IGUydW5kbyA+PiAkT1VUCiskVFVORTJGUyAtSSAyNTYgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorbmV3X21kNT1gbWQ1c3VtICRUTVBGSUxFIHwgY3V0IC1kICIgIiAtZiAxYAorZWNobyBtZDVzdW0gYWZ0ZXIgdHVuZTJmcyAkbmV3X21kNSA+PiAkT1VUCisKKyRFMlVORE9fRVhFICAkVERCX0ZJTEUgJFRNUEZJTEUgID4+ICRPVVQgMj4mMQorbmV3X21kNT1gbWQ1c3VtICRUTVBGSUxFIHwgY3V0IC1kICIgIiAtZiAxYAorZWNobyBtZDVzdW0gYWZ0ZXIgZTJ1bmRvICRuZXdfbWQ1ID4+ICRPVVQKKworaWYgWyAkbWQ1ID0gJG5ld19tZDUgXTsgdGhlbgorCWVjaG8gIiR0ZXN0X25hbWU6ICR0ZXN0X2Rlc2NyaXB0aW9uOiBvayIKKwl0b3VjaCAkdGVzdF9uYW1lLm9rCitlbHNlCisJbG4gLWYgJHRlc3RfbmFtZS5sb2cgJHRlc3RfbmFtZS5mYWlsZWQKKwllY2hvICIkdGVzdF9uYW1lOiAkdGVzdF9kZXNjcmlwdGlvbjogZmFpbGVkIgorZmkKK3JtIC1mICRUREJfRklMRSAkVE1QRklMRQorZmkKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy91dGlsL01ha2VmaWxlLmluIGIvZTJmc3Byb2dzL3V0aWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjM2Y4OAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy91dGlsL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjEgQEAKKyMKKyMgU3RhbmRhcmQgZTJmc3Byb2dzIHByb2xvZ3VlLi4uLgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAordG9wX2J1aWxkZGlyID0gLi4KK215X2RpciA9IHV0aWwKK0lOU1RBTEwgPSBASU5TVEFMTEAKKworU1JDUyA9ICQoc3JjZGlyKS9zdWJzdC5jCisKK0BNQ09ORklHQAorCisuYy5vOgorCSQoRSkgIglDQyAkPCIKKwkkKFEpICQoQlVJTERfQ0MpIC1jICQoQlVJTERfQ0ZMQUdTKSAkPCAtbyAkQAorCSQoUSkgJChDSEVDS19DTUQpICQoQUxMX0NGTEFHUykgJDwKKworUFJPR1M9CQlzdWJzdCBzeW1saW5rcworCithbGw6OiAkKFBST0dTKSBnZW4tdGFyYmFsbAorCitzdWJzdDogc3Vic3QubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQlVJTERfQ0MpICQoQlVJTERfTERGTEFHUykgLW8gc3Vic3Qgc3Vic3QubworCitjb3B5X3NwYXJzZTogY29weV9zcGFyc2UubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQlVJTERfQ0MpICQoQlVJTERfTERGTEFHUykgLW8gY29weV9zcGFyc2UgY29weV9zcGFyc2UubworCitzeW1saW5rczogc3ltbGlua3MubworCSQoRSkgIglMRCAkQCIKKwkkKFEpICQoQlVJTERfQ0MpICQoQlVJTERfTERGTEFHUykgLW8gc3ltbGlua3Mgc3ltbGlua3MubworCitnZW4tdGFyYmFsbDogJChzcmNkaXIpL2dlbi10YXJiYWxsLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJJChFKSAiCUNPTkZJRy5TVEFUVVMgJEAiCisJJChRKSBjZCAkKHRvcF9idWlsZGRpcik7IENPTkZJR19GSUxFUz11dGlsL2dlbi10YXJiYWxsIC4vY29uZmlnLnN0YXR1cworCSQoUSkgY2htb2QgK3ggZ2VuLXRhcmJhbGwKKwordGFyYmFsbHM6IGdlbi10YXJiYWxsCisJc2ggZ2VuLXRhcmJhbGwgZGViaWFuCisJc2ggZ2VuLXRhcmJhbGwgYWxsCisJc2ggZ2VuLXRhcmJhbGwgc3Vic2V0CisKK2NsZWFuOgorCSQoUk0pIC1mICQoUFJPR1MpIFwjKiAqLnMgKi5vICouYSAqfiBjb3JlICoudGFyLmd6IGdlbi10YXJiYWxsIFwKKwkJY29weS1zcGFyc2UKKworbW9zdGx5Y2xlYW46IGNsZWFuCisKK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSAtZiAuZGVwZW5kIE1ha2VmaWxlICQoc3JjZGlyKS9UQUdTICQoc3JjZGlyKS9NYWtlZmlsZS5pbi5vbGQKKworIyArKysgRGVwZW5kZW5jeSBsaW5lIGVhdGVyICsrKworIyAKKyMgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvbGxvdy4gIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzZWN0aW9uIGluCisjIHRoZSBNYWtlZmlsZS5pbiBmaWxlCisjCitzdWJzdC5vOiAkKHNyY2Rpcikvc3Vic3QuYwpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3V0aWwvTWFrZWZpbGUucHEgYi9lMmZzcHJvZ3MvdXRpbC9NYWtlZmlsZS5wcQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RlMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3V0aWwvTWFrZWZpbGUucHEKQEAgLTAsMCArMSwxMCBAQAorVE9QU1JDPS4uCisKKyFpbmNsdWRlICQoVE9QU1JDKVxwb3dlcnF1ZXN0XE1DT05GSUcKKworQUxMOjogbGliZWNoby5leGUKKworbGliZWNoby5leGU6IGxpYmVjaG8uYworCitjbGVhbjo6IAorCSQoUk0pIGxpYmVjaG8uZXhlCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdXRpbC9hbGwuZXhjbHVkZSBiL2UyZnNwcm9ncy91dGlsL2FsbC5leGNsdWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDAzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdXRpbC9hbGwuZXhjbHVkZQpAQCAtMCwwICsxLDE1IEBACisuZ2l0CisuaGcKKy5oZ2lnbm9yZQorLnBjCitwYXRjaGVzCitSRUFETUUuc3Vic2V0CitidWlsZAorYnVpbGRbXi9dKgorcnBtLmxvZworVE9ETworcG93ZXJxdWVzdAorLmV4Y2x1ZGUtZmlsZQorcG8vc3RhbXAtY2F0LWlkCitwby9jYXQtaWQtdGJsLmMKK01ldGEKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy91dGlsL2NvcHlfc3BhcnNlLmMgYi9lMmZzcHJvZ3MvdXRpbC9jb3B5X3NwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWIyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdXRpbC9jb3B5X3NwYXJzZS5jCkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogY29weV9zcGFyc2UuYyAtLSBjb3B5IGEgdmVyeSBsYXJnZSBzcGFyc2UgZmlsZXMgZWZmaWNpZW50bHkKKyAqIAkocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKQorICoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IGJ5IFRoZW9kb3JlIFRzJ28uCisgKgorICogJUJlZ2luLUhlYWRlciUKKyAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKKyAqIExpY2Vuc2UuCisgKiAlRW5kLUhlYWRlciUKKyAqLworCisjaWZuZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludCBtYWluKHZvaWQpIHsKKyAgICBmcHV0cygiVGhpcyBwcm9ncmFtIGlzIG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IVxuIiwgc3RkZXJyKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisjZWxzZQorI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CisKK2ludCB2ZXJib3NlID0gMDsKKworI2RlZmluZSBGSUJNQVAJICAgX0lPKDB4MDAsMSkJLyogYm1hcCBhY2Nlc3MgKi8KKyNkZWZpbmUgRklHRVRCU1ogICBfSU8oMHgwMCwyKQkvKiBnZXQgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IgYm1hcCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYm1hcChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgYmxvY2spCit7CisJaW50CXJldDsKKwl1bnNpZ25lZCBsb25nIGI7CisKKwliID0gYmxvY2s7CisJcmV0ID0gaW9jdGwoZmQsIEZJQk1BUCwgJmIpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFUEVSTSkgeworCQkJZnByaW50ZihzdGRlcnIsICJObyBwZXJtaXNzaW9uIHRvIHVzZSBGSUJNQVAgaW9jdGw7IG11c3QgaGF2ZSByb290IHByaXZpbGVnZXNcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlwZXJyb3IoIkZJQk1BUCIpOworCX0KKwlyZXR1cm4gYjsKK30KKworc3RhdGljIGludCBmdWxsX3JlYWQoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZ290LCB0b3RhbCA9IDA7CisJaW50IHBhc3MgPSAwOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlnb3QgPSByZWFkKGZkLCBidWYsIGNvdW50KTsKKwkJaWYgKGdvdCA9PSAtMSkgeworCQkJaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gdG90YWwgPyB0b3RhbCA6IC0xOworCQl9CisJCWlmIChnb3QgPT0gMCkgeworCQkJaWYgKHBhc3MrKyA+PSAzKQorCQkJCXJldHVybiB0b3RhbDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBhc3MgPSAwOworCQlidWYgKz0gZ290OworCQl0b3RhbCArPSBnb3Q7CisJCWNvdW50IC09IGdvdDsKKwl9CisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3NwYXJzZV9maWxlKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKK3sKKwlzdHJ1Y3Qgc3RhdDY0CWZpbGVpbmZvOworCWxvbmcJCWxiLCBpLCBmZCwgb2ZkLCBicywgYmxvY2ssIG51bWJsb2NrczsKKwlzc2l6ZV90CQlnb3QsIGdvdDI7CisJb2ZmNjRfdAkJb2Zmc2V0ID0gMCwgc2hvdWxkX2JlOworCWNoYXIJCSpidWY7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRmKCJDb3B5aW5nIHNwYXJzZSBmaWxlIGZyb20gJXMgdG8gJXNcbiIsIHNyYywgZGVzdCk7CisKKwlpZiAoc3RyY21wKHNyYywgIi0iKSkgeworCQlpZiAoc3RhdDY0KHNyYywgJmZpbGVpbmZvKSA8IDApIHsKKwkJCXBlcnJvcigic3RhdCIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoIVNfSVNSRUcoZmlsZWluZm8uc3RfbW9kZSkpIHsKKwkJCXByaW50ZigiJXM6IE5vdCBhIHJlZ3VsYXIgZmlsZVxuIiwgc3JjKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJZmQgPSBvcGVuKHNyYywgT19SRE9OTFkgfCBPX0xBUkdFRklMRSk7CisJCWlmIChmZCA8IDApIHsKKwkJCXBlcnJvcigib3BlbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoaW9jdGwoZmQsIEZJR0VUQlNaLCAmYnMpIDwgMCkgeworCQkJcGVycm9yKCJGSUdFVEJTWiIpOworCQkJY2xvc2UoZmQpOworCQkJZXhpdCgxKTsKKwkJfQorCQlpZiAoYnMgPCAwKSB7CisJCQlwcmludGYoIiVzOiBJbnZhbGlkIGJsb2NrIHNpemU6ICVsZFxuIiwgc3JjLCBicyk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCJCbG9ja3NpemUgb2YgZmlsZSAlcyBpcyAlbGRcbiIsIHNyYywgYnMpOworCQludW1ibG9ja3MgPSAoZmlsZWluZm8uc3Rfc2l6ZSArIChicy0xKSkgLyBiczsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGYoIkZpbGUgc2l6ZSBvZiAlcyBpcyAlbGxkICglbGQgYmxvY2tzKVxuIiwgc3JjLAorCQkJICAgICAgIChsb25nIGxvbmcpIGZpbGVpbmZvLnN0X3NpemUsIG51bWJsb2Nrcyk7CisJfSBlbHNlIHsKKwkJZmQgPSAwOworCQlicyA9IDEwMjQ7CisJfQorCisJb2ZkID0gb3BlbihkZXN0LCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkN8T19MQVJHRUZJTEUsIDA3NzcpOworCWlmIChvZmQgPCAwKSB7CisJCXBlcnJvcihkZXN0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwlidWYgPSBtYWxsb2MoYnMpOworCWlmICghYnVmKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYWxsb2NhdGUgYnVmZmVyIik7CisJCWV4aXQoMSk7CisJfQorCisJZm9yIChsYiA9IDA7ICFmZCB8fCBsYiA8IG51bWJsb2NrczsgbGIrKykgeworCQlpZiAoZmQpIHsKKwkJCWJsb2NrID0gZ2V0X2JtYXAoZmQsIGxiKTsKKwkJCWlmICghYmxvY2spCisJCQkJY29udGludWU7CisJCQlzaG91bGRfYmUgPSAoKG9mZjY0X3QpIGxiKSAqIGJzOworCQkJaWYgKG9mZnNldCAhPSBzaG91bGRfYmUpIHsKKwkJCQlpZiAodmVyYm9zZSkKKwkJCQkJcHJpbnRmKCJTZWVraW5nIHRvICVsbGRcbiIsIHNob3VsZF9iZSk7CisJCQkJaWYgKGxzZWVrNjQoZmQsIHNob3VsZF9iZSwgU0VFS19TRVQpID09IChvZmZfdCkgLTEpIHsKKwkJCQkJcGVycm9yKCJsc2VlayBzcmMiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJaWYgKGxzZWVrNjQob2ZkLCBzaG91bGRfYmUsIFNFRUtfU0VUKSA9PSAob2ZmX3QpIC0xKSB7CisJCQkJCXBlcnJvcigibHNlZWsgZGVzdCIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlvZmZzZXQgPSBzaG91bGRfYmU7CisJCQl9CisJCX0KKwkJZ290ID0gZnVsbF9yZWFkKGZkLCBidWYsIGJzKTsKKworCQlpZiAoZmQgPT0gMCAmJiBnb3QgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChnb3QgPT0gYnMpIHsKKwkJCWZvciAoaT0wOyBpIDwgYnM7IGkrKykKKwkJCQlpZiAoYnVmW2ldKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IGJzKSB7CisJCQkJbHNlZWsob2ZkLCBicywgU0VFS19DVVIpOworCQkJCW9mZnNldCArPSBiczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlnb3QyID0gd3JpdGUob2ZkLCBidWYsIGdvdCk7CisJCWlmIChnb3QgIT0gZ290MikgeworCQkJcHJpbnRmKCJzaG9ydCB3cml0ZVxuIik7CisJCQlleGl0KDEpOworCQl9CisJCW9mZnNldCArPSBnb3Q7CisJfQorCW9mZnNldCA9IGZpbGVpbmZvLnN0X3NpemU7CisJaWYgKGZzdGF0NjQob2ZkLCAmZmlsZWluZm8pIDwgMCkgeworCQlwZXJyb3IoImZzdGF0Iik7CisJCWV4aXQoMSk7CisJfQorCWlmIChmaWxlaW5mby5zdF9zaXplICE9IG9mZnNldCkgeworCQlsc2VlazY0KG9mZCwgb2Zmc2V0LTEsIFNFRUtfQ1VSKTsKKwkJYnVmWzBdID0gMDsKKwkJd3JpdGUob2ZkLCBidWYsIDEpOworCX0KKwljbG9zZShmZCk7CisJY2xvc2Uob2ZkKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWy12XSBzb3VyY2VfZmlsZSBkZXN0aW5hdGlvbl9maWxlXG4iLCBwcm9nbmFtZSk7CisJZXhpdCgxKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKmFyZ3YpCit7CisJaW50IGM7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgInYiKSkgIT0gRU9GKQorCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAndic6CisJCQl2ZXJib3NlKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJYnJlYWs7CisJCX0KKwlpZiAob3B0aW5kKzIgIT0gYXJnYykKKwkJdXNhZ2UoYXJndlswXSk7CisJY29weV9zcGFyc2VfZmlsZShhcmd2W29wdGluZF0sIGFyZ3Zbb3B0aW5kKzFdKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdXRpbC9nY2Mtd2FsbC1jbGVhbnVwIGIvZTJmc3Byb2dzL3V0aWwvZ2NjLXdhbGwtY2xlYW51cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ4ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3V0aWwvZ2NjLXdhbGwtY2xlYW51cApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2VkIC1mCisjCisjIFRoaXMgc2NyaXB0IGZpbHRlcnMgb3V0IGdjYy13YWxsIGNydWQgdGhhdCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBzZWVpbmcuCisjCisvXmNjIC9kCisvXmtjYyAvZAorL15nY2MgL2QKKy9kb2VzIG5vdCBzdXBwb3J0IGBsb25nIGxvbmcnL2QKKy9mb3JiaWRzIGxvbmcgbG9uZyBpbnRlZ2VyIGNvbnN0YW50cy9kCisvZG9lcyBub3Qgc3VwcG9ydCB0aGUgYGxsJyBsZW5ndGggbW9kaWZpZXIvZAorL2RvZXMgbm90IHN1cHBvcnQgdGhlIGBsbCcgcHJpbnRmIGxlbmd0aCBtb2RpZmllci9kCisvQU5TSSBDIGZvcmJpZHMgbG9uZyBsb25nIGludGVnZXIgY29uc3RhbnRzL2QKKy90cmFkaXRpb25hbCBDIHJlamVjdHMgc3RyaW5nIGNvbmNhdGVuYXRpb24vZAorL2ludGVnZXIgY29uc3RhbnQgaXMgdW5zaWduZWQgaW4gQU5TSSBDLCBzaWduZWQgd2l0aCAtdHJhZGl0aW9uYWwvZAorL0F0IHRvcCBsZXZlbDovZAorL0luIGZpbGUgaW5jbHVkZWQgZnJvbS9kCisvSW4gZnVuY3Rpb24gYC4qJzovZAorL3plcm8tbGVuZ3RoIGZvcm1hdCBzdHJpbmcvZAorL3dhcm5pbmc6IG1pc3NpbmcgaW5pdGlhbGl6ZXIvZAorL3dhcm5pbmc6IChuZWFyIGluaXRpYWxpemF0aW9uIGZvci9kCisvXlsgCV0qZnJvbS9kCisKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy91dGlsL2dlbi10YXJiYWxsLmluIGIvZTJmc3Byb2dzL3V0aWwvZ2VuLXRhcmJhbGwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyZjEyYwotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy91dGlsL2dlbi10YXJiYWxsLmluCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkaXN0cmlidXRpb24gdGFyYmFsbAorIworc3JjZGlyPUBzcmNkaXJACit0b3Bfc3JjZGlyPUB0b3Bfc3JjZGlyQAordG9wX2Rpcj1gY2QgJHRvcF9zcmNkaXI7IHB3ZGAKK2Jhc2VfdmVyPWBlY2hvIEBFMkZTUFJPR1NfVkVSU0lPTkAgfCBzZWQgLWUgJ3MvLVdJUC8vJyAtZSAncy9wcmUtLy8nIC1lICdzLy1QTFVTLy8nYAorYmFzZV9lMmZzcHJvZ3M9YGJhc2VuYW1lICR0b3BfZGlyYAorZXhjbHVkZT0vdG1wL2V4Y2x1ZGUKK0daSVA9Z3ppcAorCisjCisjIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0ZXhpMmR2aSBibG93cyB1cCBob3JyaWJseSBpZiB0aGVyZSBhcmUgCisjIGFueSAnficgY2hyYWN0ZXJzIGluIHRoZSBkaXJlY3RvcnkgcGF0aG5hbWUuICBTbyB3ZSBrbHVkZ2UgYXJvdW5kIGl0IGJ5CisjIHVzaW5nIGEgbm9uLXN0YW5kYXJkIGRpcmVjdG9yeSBuYW1lIGZvciBXSVAgcmVsZWFzZXMuICBkcGtnLXNvdXJjZQorIyBjb21wbGFpbnMsIGJ1dCBsaWZlIGdvZXMgb24uCisjCitkZWJfcGtndmVyPWBlY2hvIEBFMkZTUFJPR1NfUEtHVkVSQCB8IHNlZCAtZSAncy9+Ly0vZydgCisgICAgCitjYXNlICQxIGluCisgICAgZGViaWFufHVidW50dSkKKwlTUkNST09UPSJlMmZzcHJvZ3MtJGRlYl9wa2d2ZXIiCisJcmVuYW1lX3RhcmJhbGw9ImUyZnNwcm9nc19ARTJGU1BST0dTX1BLR1ZFUkAub3JpZy50YXIuZ3oiCisJbGlzdD1hbGwKKwk7OworICAgIHN1YnNldCkKKwlTUkNST09UPSJlMmZzcHJvZ3MtbGlicy0kYmFzZV92ZXIiCisJbGlzdD1zdWJzZXQKKwk7OworICAgYWxsfCopCisJU1JDUk9PVD0iZTJmc3Byb2dzLSRiYXNlX3ZlciIKKwlsaXN0PWFsbAorCTs7Citlc2FjCisKK212IC4uL2UyZnNwcm9ncy5zcGVjICR0b3Bfc3JjZGlyL2UyZnNwcm9ncy5zcGVjCisoY2QgJHRvcF9zcmNkaXIvLi4gOyBmaW5kICRiYXNlX2UyZnNwcm9ncyBcKCAtbmFtZSBcKn4gLW8gLW5hbWUgXCoub3JpZyBcCisJCS1vIC1uYW1lIENWUyAtbyAtbmFtZSBcKi5yZWogLW8gLW5hbWUgTWFrZWZpbGUucHEgXAorCQktbyAtbmFtZSBUQUdTIC1vIC1uYW1lIFwqLm9sZCAtbyAtbmFtZSBTQ0NTIFwKKwkJLW8gLW5hbWUgY2hhbmdlZC1maWxlcyAtbyAtbmFtZSAuI1wqIC1vIC1uYW1lIFwqLnRhci5neiBcCisJCS1vIC1uYW1lIGF1dG9tNHRlLmNhY2hlIFwpIFwKKwkJLXByaW50KSB8IHNlZCAtZSAicy9eJGJhc2VfZTJmc3Byb2dzLyRTUkNST09ULyIgPiAkZXhjbHVkZQorc2VkIC1lICJzO147JFNSQ1JPT1QvOyIgPCAkc3JjZGlyLyRsaXN0LmV4Y2x1ZGUgPj4gJGV4Y2x1ZGUKKworKGNkICR0b3Bfc3JjZGlyLy4uIDsgcm0gLWYgJFNSQ1JPT1QgOyBsbiAtc2YgJGJhc2VfZTJmc3Byb2dzICRTUkNST09UKQorCisoY2QgJHRvcF9zcmNkaXIvLi4gOyB0YXIgLWMgLWggLXYgLWYgLSAtWCAkZXhjbHVkZSAkU1JDUk9PVCkgXAorCSB8ICRHWklQIC05IC1jID4gJFNSQ1JPT1QudGFyLmd6CiskR1pJUCAtbCAkU1JDUk9PVC50YXIuZ3oKKworKGNkICR0b3Bfc3JjZGlyLy4uIDsgcm0gLWYgJFNSQ1JPT1QpCittdiAkdG9wX3NyY2Rpci9lMmZzcHJvZ3Muc3BlYyAuLi9lMmZzcHJvZ3Muc3BlYyAKK2lmIHRlc3QgLW4gIiRyZW5hbWVfdGFyYmFsbCI7IHRoZW4KKyAgICBtdiAkU1JDUk9PVC50YXIuZ3ogJHJlbmFtZV90YXJiYWxsCitmaQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3V0aWwvaW5zdGFsbC1zeW1saW5rLmluIGIvZTJmc3Byb2dzL3V0aWwvaW5zdGFsbC1zeW1saW5rLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzQxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdXRpbC9pbnN0YWxsLXN5bWxpbmsuaW4KQEAgLTAsMCArMSw4OSBAQAorIyEvYmluL3NoCisjCisjIGluc3RhbGwtc3ltbGluayBzb3VyY2UgZGVzdGluYXRpb24gZGVzdGRpcgorIworCitTWU1MSU5LUz1zeW1saW5rcworTE5fUz0iQExOX1NAIgorUk09IkBSTUAiCitGT1JDRV9SRUxBVElWRT1OTworRk9SQ0VfQUJTT0xVVEU9Tk8KKword2hpbGUgZWNobyAkMSB8IGdyZXAgLXEgLS0gXi0gOworZG8KKwljYXNlICQxIGluCisJCS0tcmVsYXRpdmUpCisJCQlGT1JDRV9SRUxBVElWRT1ZRVMKKwkJCTs7CisJCS0tYWJzb2x1dGUpCisJCQlGT1JDRV9BQlNPTFVURT1ZRVMKKwkJCTs7CisJCS0tZGViaWFuKQorCQkJRk9SQ0VfQUJTT0xVVEU9Tk8KKwkJCUZPUkNFX1JFTEFUSVZFPU5PCisJCQk7OworCQktLXN5bWxpbmtzPSopCisJCQlTWU1MSU5LUz0kKGVjaG8gJDEgfCBzZWQgLWUgJ3MvLS1zeW1saW5rcz0vLycpCisJCQk7OworCQkqKQorCQkJZWNobyAiVW5rbm93biBvcHRpb24gJDEiCisJCQlleGl0IDEKKwkJCTs7CisJZXNhYwkJCQkJICAgICAKKwlzaGlmdDsKK2RvbmUKKworCitGSVhfU1lNTElOSz0iJFNZTUxJTktTIC1jIgorCitTUkM9IiQxIgorREVTVD0iJDIiCitERVNURElSPSIkMyIKKworaWYgISBlY2hvICRTUkMgfCBncmVwIC1xIF4vIDsgdGhlbgorCWVjaG8gJFNSQzogU291cmNlIHBhdGhuYW1lIG11c3QgYmUgYWJzb2x1dGUKKwlleGl0IDEKK2ZpCisKK2lmICEgZWNobyAkREVTVCB8IGdyZXAgLXEgXi8gOyB0aGVuCisJZWNobyAkREVTVDogRGVzdGluYXRpb24gcGF0aG5hbWUgbXVzdCBiZSBhYnNvbHV0ZQorCWV4aXQgMQorZmkKKworaWYgISB0ZXN0IC1lICIkREVTVERJUiRTUkMiIDsgdGhlbgorCWVjaG8gJERFU1RESVIkU1JDOiBmaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdAorCWV4aXQgMQorZmkKKworJFJNIC1mICIkREVTVERJUiRERVNUIgorCitpZiB0ZXN0ICIkTE5fUyIgIT0gImxuIC1zIiA7IHRoZW4KKwkkTE5fUyAiJERFU1RESVIkU1JDIiAiJERFU1RESVIkREVTVCIKKwlleGl0IDAKK2ZpCisKK2lmIHRlc3QgJChkaXJuYW1lICIkU1JDIikgPSAkKGRpcm5hbWUgIiRERVNUIikgOyB0aGVuCisJJExOX1MgIiQoYmFzZW5hbWUgIiRTUkMiKSIgIiRERVNURElSJERFU1QiCisJZXhpdCAwCitmaQorCitUT1BfU1JDPSQoZWNobyAkU1JDIHwgYXdrIC1GLyAne3ByaW50ICQyfScpCitUT1BfREVTVD0kKGVjaG8gJERFU1QgfCBhd2sgLUYvICd7cHJpbnQgJDJ9JykKKworaWYgdGVzdCAkRk9SQ0VfUkVMQVRJVkUgPSBZRVMgOyB0aGVuCisJVE9QX1NSQz1GT1JDRQorCVRPUF9ERVNUPUZPUkNFCitmaQorCitpZiB0ZXN0ICRGT1JDRV9BQlNPTFVURSA9IFlFUyA7IHRoZW4KKwlUT1BfU1JDPUZPUkNFCisJVE9QX0RFU1Q9Rk9SQ0VfQUJTT0xVVEUKK2ZpCisKK2lmIHRlc3QgJFRPUF9TUkMgIT0gJFRPUF9ERVNUIDsgdGhlbgorCSRMTl9TICIkU1JDIiAiJERFU1RESVIkREVTVCIKK2Vsc2UKKwkkTE5fUyAiJERFU1RESVIkU1JDIiAiJERFU1RESVIkREVTVCIKKwkkRklYX1NZTUxJTksgIiRERVNURElSJERFU1QiCitmaQorCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdXRpbC9saWJlY2hvLmMgYi9lMmZzcHJvZ3MvdXRpbC9saWJlY2hvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyY2UxZQotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy91dGlsL2xpYmVjaG8uYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogbGliZWNoby5jCisgKgorICogRm9yIGVhY2ggYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZSwgZWNobyBpdC4gIFNob3VsZCBleHBhbmQKKyAqIERPUyB3aWxkY2FyZHMgY29ycmVjdGx5LgorICoKKyAqIFN5bnRheDogbGliZWNobyBbLXAgcHJlZml4XSBsaXN0Li4uCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgZWNob19maWxlcyhjaGFyICosIGNoYXIgKik7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgaTsKKyAgY2hhciAqcHJlZml4OworCisgIHByZWZpeCA9ICIiOworCisgIGlmIChhcmdjIDwgMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICBsaWJlY2hvIFstcCBwcmVmaXhdIGxpc3QuLi5cbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgZm9yIChpID0gMSA7IGkgPCBhcmdjIDsgaSsrKQorICAgIGlmICghc3RyaWNtcChhcmd2W2ldLCAiLXAiKSkKKyAgICAgIHByZWZpeCA9IGFyZ3ZbKytpXTsKKyAgICBlbHNlCisgICAgICBlY2hvX2ZpbGVzKHByZWZpeCwgYXJndltpXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2VjaG9fZmlsZXMoY2hhciAqcHJlZml4LCBjaGFyICpmKQoreworICBsb25nIGZmOworICBzdHJ1Y3QgX2ZpbmRkYXRhX3QgZmR0OworICBjaGFyICpzbGFzaDsKKyAgY2hhciBmaWxlcGF0aFsyNTZdOworCisgIC8qCisgICAqIFdlJ3JlIHVuaXggYmFzZWQgcXVpdGUgYSBiaXQgaGVyZS4gIExvb2sgZm9yIG5vcm1hbCBzbGFzaGVzIGFuZAorICAgKiBtYWtlIHRoZW0gcmV2ZXJzZSBzbGFzaGVzLgorICAgKi8KKyAgd2hpbGUoKHNsYXNoID0gc3RycmNocihmLCAnLycpKSAhPSBOVUxMKQorICAgICpzbGFzaCA9ICdcXCc7CisKKyAgc3RyY3B5KGZpbGVwYXRoLCBmKTsKKworICBzbGFzaCA9IHN0cnJjaHIoZmlsZXBhdGgsICdcXCcpOworCisgIGlmIChzbGFzaCkgeworICAgIHNsYXNoKys7CisgICAgKnNsYXNoID0gMDsKKyAgfSBlbHNlIHsKKyAgICBmaWxlcGF0aFswXSA9ICdcMCc7CisgIH0KKworICBmZiA9IF9maW5kZmlyc3QoZiwgJmZkdCk7CisKKyAgaWYgKGZmIDwgMCkgeworICAgIHByaW50ZigiJXMlc1xuIiwgcHJlZml4LCBmKTsKKyAgICByZXR1cm47CisgIH0KKworICBwcmludGYoIiVzJXMlc1xuIiwgcHJlZml4LCBmaWxlcGF0aCwgZmR0Lm5hbWUpOworCisgIGZvciAoOzspIHsKKyAgICBpZiAoX2ZpbmRuZXh0KGZmLCAmZmR0KSA8IDApCisgICAgICBicmVhazsKKyAgICBwcmludGYoIiVzJXMlc1xuIiwgcHJlZml4LCBmaWxlcGF0aCwgZmR0Lm5hbWUpOworICB9CisgIF9maW5kY2xvc2UoZmYpOworfQpkaWZmIC0tZ2l0IGEvZTJmc3Byb2dzL3V0aWwvc3Vic2V0LmV4Y2x1ZGUgYi9lMmZzcHJvZ3MvdXRpbC9zdWJzZXQuZXhjbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTg4ZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3V0aWwvc3Vic2V0LmV4Y2x1ZGUKQEAgLTAsMCArMSwzNSBAQAorLmdpdAorLmhnCisuaGdpZ25vcmUKKy5wYworcGF0Y2hlcworYnVpbGQKK2J1aWxkW14vXSoKK3JwbS5sb2cKK1RPRE8KK3Bvd2VycXVlc3QKKy5leGNsdWRlLXN1YnNldAorcG8vc3RhbXAtY2F0LWlkCitwby9jYXQtaWQtdGJsLmMKK01ldGEKK2UyZnNjaworZXh0MmVkCitkZWJ1Z2ZzCittaXNjCit0ZXN0cworcmVzaXplCitjb250cmliCitwbworaW5jbHVkZQorZGViaWFuCitsaWIvZTJwCitsaWIvZXZtcworbGliL2V4dDJmcworQUJPVVQtTkxTCitSRUFETUUKK0lOU1RBTEwKK0lOU1RBTEwuZGxsYmluCitJTlNUQUxMLmVsZmJpbgorUkVMRUFTRS1OT1RFUworZTJmc3Byb2dzLmxzbQorZTJmc3Byb2dzLnNwZWMKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy91dGlsL3N1YnN0LmMgYi9lMmZzcHJvZ3MvdXRpbC9zdWJzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGQ2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdXRpbC9zdWJzdC5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogc3Vic3QuYyAtLS0gc3Vic3RpdHV0aW9uIHByb2dyYW0KKyAqCisgKiBTdWJzdCBpcyB1c2VkIGFzIGEgcXVpY2t5IHByb2dyYW0gdG8gZG8gQCBzdWJzdGl0dXRpb25zCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorCisjaWZkZWYgSEFWRV9HRVRPUFRfSAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2Vsc2UKK2V4dGVybiBjaGFyICpvcHRhcmc7CitleHRlcm4gaW50IG9wdGluZDsKKyNlbmRpZgorCisKK3N0cnVjdCBzdWJzdF9lbnRyeSB7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwlzdHJ1Y3Qgc3Vic3RfZW50cnkgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHN1YnN0X2VudHJ5ICpzdWJzdF90YWJsZSA9IDA7CisKK3N0YXRpYyBpbnQgYWRkX3N1YnN0KGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBzdWJzdF9lbnRyeQkqZW50ID0gMDsKKworCWVudCA9IChzdHJ1Y3Qgc3Vic3RfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3Vic3RfZW50cnkpKTsKKwlpZiAoIWVudCkKKwkJZ290byBmYWlsOworCWVudC0+bmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4obmFtZSkrMSk7CisJaWYgKCFlbnQtPm5hbWUpCisJCWdvdG8gZmFpbDsKKwllbnQtPnZhbHVlID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJaWYgKCFlbnQtPnZhbHVlKQorCQlnb3RvIGZhaWw7CisJc3RyY3B5KGVudC0+bmFtZSwgbmFtZSk7CisJc3RyY3B5KGVudC0+dmFsdWUsIHZhbHVlKTsKKwllbnQtPm5leHQgPSBzdWJzdF90YWJsZTsKKwlzdWJzdF90YWJsZSA9IGVudDsKKwlyZXR1cm4gMDsKK2ZhaWw6CisJaWYgKGVudCkgeworCQlmcmVlKGVudC0+bmFtZSk7CisJCWZyZWUoZW50KTsKKwl9CisJcmV0dXJuIEVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBzdWJzdF9lbnRyeSAqZmV0Y2hfc3Vic3RfZW50cnkoY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3Vic3RfZW50cnkgKmVudDsKKworCWZvciAoZW50ID0gc3Vic3RfdGFibGU7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCWlmIChzdHJjbXAobmFtZSwgZW50LT5uYW1lKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBlbnQ7Cit9CisKKy8qCisgKiBHaXZlbiB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgcmVwbGFjZW1lbnQgbmFtZSwKKyAqIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyB2YWxpZCwgYW5kIHB1bGwgaXQgb3V0IGlmIGl0IGlzLgorICovCitzdGF0aWMgY2hhciAqZ2V0X3N1YnN0X3N5bWJvbChjb25zdCBjaGFyICpiZWdpbiwgc2l6ZV90IGxlbiwgY2hhciBwcmVmaXgpCit7CisJc3RhdGljIGNoYXIgcmVwbGFjZV9uYW1lWzEyOF07CisJY2hhciAqY3AsICpzdGFydDsKKworCXN0YXJ0ID0gcmVwbGFjZV9uYW1lOworCWlmIChwcmVmaXgpCisJCSpzdGFydCsrID0gcHJlZml4OworCisJaWYgKGxlbiA+IHNpemVvZihyZXBsYWNlX25hbWUpLTIpCisJCXJldHVybiBOVUxMOworCW1lbWNweShzdGFydCwgYmVnaW4sIGxlbik7CisJc3RhcnRbbGVuXSA9IDA7CisKKwkvKgorCSAqIFRoZSBzdWJzdGl0dXRpb24gdmFyaWFibGUgbXVzdCBhbGwgYmUgaW4gdGhlIG9mIFswLTlBLVphLXpfXS4KKwkgKiBJZiBpdCBpc24ndCwgdGhpcyBtdXN0IGJlIGFuIGludmFsaWQgc3ltYm9sIG5hbWUuCisJICovCisJZm9yIChjcCA9IHN0YXJ0OyAqY3A7IGNwKyspIHsKKwkJaWYgKCEoKmNwID49ICdhJyAmJiAqY3AgPD0gJ3onKSAmJgorCQkgICAgISgqY3AgPj0gJ0EnICYmICpjcCA8PSAnWicpICYmCisJCSAgICAhKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykgJiYKKwkJICAgICEoKmNwID09ICdfJykpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChyZXBsYWNlX25hbWUpOworfQorCitzdGF0aWMgdm9pZCByZXBsYWNlX3N0cmluZyhjaGFyICpiZWdpbiwgY2hhciAqZW5kLCBjaGFyICpuZXdzdHIpCit7CisJaW50CXJlcGxhY2VfbGVuLCBsZW47CisKKwlyZXBsYWNlX2xlbiA9IHN0cmxlbihuZXdzdHIpOworCWxlbiA9IGVuZCAtIGJlZ2luOworCWlmIChyZXBsYWNlX2xlbiA9PSAwKQorCQltZW1tb3ZlKGJlZ2luLCBlbmQrMSwgc3RybGVuKGVuZCkrMSk7CisJZWxzZSBpZiAocmVwbGFjZV9sZW4gIT0gbGVuKzEpCisJCW1lbW1vdmUoZW5kKyhyZXBsYWNlX2xlbi1sZW4tMSksIGVuZCwKKwkJCXN0cmxlbihlbmQpKzEpOworCW1lbWNweShiZWdpbiwgbmV3c3RyLCByZXBsYWNlX2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIHN1YnN0aXR1dGVfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIJKnB0ciwgKm5hbWVfcHRyLCAqZW5kX3B0cjsKKwlzdHJ1Y3Qgc3Vic3RfZW50cnkgKmVudDsKKwljaGFyCSpyZXBsYWNlX25hbWU7CisJc2l6ZV90CWxlbjsKKworCS8qCisJICogRXhwYW5kIGFsbCBARk9PQCBzdWJzdGl0dXRpb25zCisJICovCisJcHRyID0gbGluZTsKKwl3aGlsZSAocHRyKSB7CisJCW5hbWVfcHRyID0gc3RyY2hyKHB0ciwgJ0AnKTsKKwkJaWYgKCFuYW1lX3B0cikKKwkJCWJyZWFrOwkvKiBObyBtb3JlICovCisJCWlmICgqKCsrbmFtZV9wdHIpID09ICdAJykgeworCQkJLyoKKwkJCSAqIEhhbmRsZSB0eXRzb0BAbWl0LmVkdSAtLT4gdHl0c29AbWl0LmVkdQorCQkJICovCisJCQltZW1tb3ZlKG5hbWVfcHRyLTEsIG5hbWVfcHRyLCBzdHJsZW4obmFtZV9wdHIpKzEpOworCQkJcHRyID0gbmFtZV9wdHIrMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVuZF9wdHIgPSBzdHJjaHIobmFtZV9wdHIsICdAJyk7CisJCWlmICghZW5kX3B0cikKKwkJCWJyZWFrOworCQlsZW4gPSBlbmRfcHRyIC0gbmFtZV9wdHI7CisJCXJlcGxhY2VfbmFtZSA9IGdldF9zdWJzdF9zeW1ib2wobmFtZV9wdHIsIGxlbiwgMCk7CisJCWlmICghcmVwbGFjZV9uYW1lKSB7CisJCQlwdHIgPSBuYW1lX3B0cjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVudCA9IGZldGNoX3N1YnN0X2VudHJ5KHJlcGxhY2VfbmFtZSk7CisJCWlmICghZW50KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuZm91bmQgZXhwYW5zaW9uOiAnJXMnXG4iLAorCQkJCXJlcGxhY2VfbmFtZSk7CisJCQlwdHIgPSBlbmRfcHRyICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisjaWYgMAorCQlmcHJpbnRmKHN0ZGVyciwgIlJlcGxhY2UgbmFtZSA9ICclcycgd2l0aCAnJXMnXG4iLAorCQkgICAgICAgcmVwbGFjZV9uYW1lLCBlbnQtPnZhbHVlKTsKKyNlbmRpZgorCQlwdHIgPSBuYW1lX3B0ci0xOworCQlyZXBsYWNlX3N0cmluZyhwdHIsIGVuZF9wdHIsIGVudC0+dmFsdWUpOworCQlpZiAoKGVudC0+dmFsdWVbMF0gPT0gJ0AnKSAmJgorCQkgICAgKHN0cmxlbihyZXBsYWNlX25hbWUpID09IHN0cmxlbihlbnQtPnZhbHVlKS0yKSAmJgorCQkgICAgIXN0cm5jbXAocmVwbGFjZV9uYW1lLCBlbnQtPnZhbHVlKzEsCisJCQkgICAgIHN0cmxlbihlbnQtPnZhbHVlKS0yKSkKKwkJCS8qIGF2b2lkIGFuIGluZmluaXRlIGxvb3AgKi8KKwkJCXB0ciArPSBzdHJsZW4oZW50LT52YWx1ZSk7CisJfQorCS8qCisJICogTm93IGRvIGEgc2Vjb25kIHBhc3MgdG8gZXhwYW5kICR7Rk9PfQorCSAqLworCXB0ciA9IGxpbmU7CisJd2hpbGUgKHB0cikgeworCQluYW1lX3B0ciA9IHN0cmNocihwdHIsICckJyk7CisJCWlmICghbmFtZV9wdHIpCisJCQlicmVhazsJLyogTm8gbW9yZSAqLworCQlpZiAoKigrK25hbWVfcHRyKSAhPSAneycpIHsKKwkJCXB0ciA9IG5hbWVfcHRyOworCQkJY29udGludWU7CisJCX0KKwkJbmFtZV9wdHIrKzsKKwkJZW5kX3B0ciA9IHN0cmNocihuYW1lX3B0ciwgJ30nKTsKKwkJaWYgKCFlbmRfcHRyKQorCQkJYnJlYWs7CisJCWxlbiA9IGVuZF9wdHIgLSBuYW1lX3B0cjsKKwkJcmVwbGFjZV9uYW1lID0gZ2V0X3N1YnN0X3N5bWJvbChuYW1lX3B0ciwgbGVuLCAnJCcpOworCQlpZiAoIXJlcGxhY2VfbmFtZSkgeworCQkJcHRyID0gbmFtZV9wdHI7CisJCQljb250aW51ZTsKKwkJfQorCQllbnQgPSBmZXRjaF9zdWJzdF9lbnRyeShyZXBsYWNlX25hbWUpOworCQlpZiAoIWVudCkgeworCQkJcHRyID0gZW5kX3B0ciArIDE7CisJCQljb250aW51ZTsKKwkJfQorI2lmIDAKKwkJZnByaW50ZihzdGRlcnIsICJSZXBsYWNlIG5hbWUgPSAnJXMnIHdpdGggJyVzJ1xuIiwKKwkJICAgICAgIHJlcGxhY2VfbmFtZSwgZW50LT52YWx1ZSk7CisjZW5kaWYKKwkJcHRyID0gbmFtZV9wdHItMjsKKwkJcmVwbGFjZV9zdHJpbmcocHRyLCBlbmRfcHRyLCBlbnQtPnZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19maWxlKEZJTEUgKmYpCit7CisJY2hhcglsaW5lWzIwNDhdOworCWNoYXIJKmNwLCAqcHRyOworCisJd2hpbGUgKCFmZW9mKGYpKSB7CisJCW1lbXNldChsaW5lLCAwLCBzaXplb2YobGluZSkpOworCQlpZiAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFN0cmlwIG5ld2xpbmVzIGFuZCBjb21tZW50cy4KKwkJICovCisJCWNwID0gc3RyY2hyKGxpbmUsICdcbicpOworCQlpZiAoY3ApCisJCQkqY3AgPSAwOworCQljcCA9IHN0cmNocihsaW5lLCAnIycpOworCQlpZiAoY3ApCisJCQkqY3AgPSAwOworCQkvKgorCQkgKiBTa2lwIHRyYWlsaW5nIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UKKwkJICovCisJCWZvciAoY3AgPSBsaW5lICsgc3RybGVuKGxpbmUpIC0gMTsgY3AgPj0gbGluZTsgY3AtLSkgeworCQkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCisJCQkJKmNwID0gMDsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCQljcCA9IGxpbmU7CisJCXdoaWxlICgqY3AgJiYgaXNzcGFjZSgqY3ApKQorCQkJY3ArKzsKKwkJcHRyID0gY3A7CisJCS8qCisJCSAqIFNraXAgZW1wdHkgbGluZXMKKwkJICovCisJCWlmICgqcHRyID09IDApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWdub3JlIGZ1dHVyZSBleHRlbnNpb25zCisJCSAqLworCQlpZiAoKnB0ciA9PSAnQCcpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogUGFyc2Ugc3Vic3RpdHV0aW9ucworCQkgKi8KKwkJZm9yIChjcCA9IHB0cjsgKmNwOyBjcCsrKQorCQkJaWYgKGlzc3BhY2UoKmNwKSkKKwkJCQlicmVhazsKKwkJKmNwID0gMDsKKwkJZm9yIChjcCsrOyAqY3A7IGNwKyspCisJCQlpZiAoIWlzc3BhY2UoKmNwKSkKKwkJCQlicmVhazsKKyNpZiAwCisJCXByaW50ZigiU3Vic3RpdHV0ZTogJyVzJyBmb3IgJyVzJ1xuIiwgcHRyLCBjcCA/IGNwIDogIjxOVUxMPiIpOworI2VuZGlmCisJCWFkZF9zdWJzdChwdHIsIGNwKTsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gMCBpZiB0aGUgZmlsZXMgYXJlIGRpZmZlcmVudCwgMSBpZiB0aGUgZmlsZXMgYXJlIHRoZSBzYW1lLgorICovCitzdGF0aWMgaW50IGNvbXBhcmVfZmlsZShjb25zdCBjaGFyICpvdXRmbiwgY29uc3QgY2hhciAqbmV3Zm4pCit7CisJRklMRQkqb2xkX2YsICpuZXdfZjsKKwljaGFyCW9sZGJ1ZlsyMDQ4XSwgbmV3YnVmWzIwNDhdLCAqb2xkY3AsICpuZXdjcDsKKwlpbnQJcmV0dmFsOworCisJb2xkX2YgPSBmb3BlbihvdXRmbiwgInIiKTsKKwlpZiAoIW9sZF9mKQorCQlyZXR1cm4gMDsKKwluZXdfZiA9IGZvcGVuKG5ld2ZuLCAiciIpOworCWlmICghbmV3X2YpIHsKKwkJZmNsb3NlKG9sZF9mKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJb2xkY3AgPSBmZ2V0cyhvbGRidWYsIHNpemVvZihvbGRidWYpLCBvbGRfZik7CisJCW5ld2NwID0gZmdldHMobmV3YnVmLCBzaXplb2YobmV3YnVmKSwgbmV3X2YpOworCQlpZiAoIW9sZGNwICYmICFuZXdjcCkgeworCQkJcmV0dmFsID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmICghb2xkY3AgfHwgIW5ld2NwIHx8IHN0cmNtcChvbGRidWYsIG5ld2J1ZikpIHsKKwkJCXJldHZhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlmY2xvc2Uob2xkX2YpOworCWZjbG9zZShuZXdfZik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyCWxpbmVbMjA0OF07CisJaW50CWM7CisJRklMRQkqaW4sICpvdXQ7CisJY2hhcgkqb3V0Zm4gPSBOVUxMLCAqbmV3Zm4gPSBOVUxMOworCWludAl2ZXJib3NlID0gMDsKKwlpbnQJYWRqdXN0X3RpbWVzdGFtcCA9IDA7CisJc3RydWN0IHN0YXQgc3RidWY7CisJc3RydWN0IHV0aW1idWYgdXQ7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJmOnR2IikpICE9IEVPRikgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnZic6CisJCQlpbiA9IGZvcGVuKG9wdGFyZywgInIiKTsKKwkJCWlmICghaW4pIHsKKwkJCQlwZXJyb3Iob3B0YXJnKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJcGFyc2VfY29uZmlnX2ZpbGUoaW4pOworCQkJZmNsb3NlKGluKTsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWFkanVzdF90aW1lc3RhbXArKzsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICIlczogWy1mIGNvbmZpZy1maWxlXSBbZmlsZV1cbiIsCisJCQkJYXJndlswXSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAob3B0aW5kIDwgYXJnYykgeworCQlpbiA9IGZvcGVuKGFyZ3Zbb3B0aW5kXSwgInIiKTsKKwkJaWYgKCFpbikgeworCQkJcGVycm9yKGFyZ3Zbb3B0aW5kXSk7CisJCQlleGl0KDEpOworCQl9CisJCW9wdGluZCsrOworCX0gZWxzZQorCQlpbiA9IHN0ZGluOworCisJaWYgKG9wdGluZCA8IGFyZ2MpIHsKKwkJb3V0Zm4gPSBhcmd2W29wdGluZF07CisJCW5ld2ZuID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihvdXRmbikrMjApOworCQlpZiAoIW5ld2ZuKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBlcnJvciEgIEV4aXRpbmcuXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJc3RyY3B5KG5ld2ZuLCBvdXRmbik7CisJCXN0cmNhdChuZXdmbiwgIi5uZXciKTsKKwkJb3V0ID0gZm9wZW4obmV3Zm4sICJ3Iik7CisJCWlmICghb3V0KSB7CisJCQlwZXJyb3IobmV3Zm4pOworCQkJZXhpdCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCW91dCA9IHN0ZG91dDsKKwkJb3V0Zm4gPSAwOworCX0KKworCXdoaWxlICghZmVvZihpbikpIHsKKwkJaWYgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pID09IE5VTEwpCisJCQlicmVhazsKKwkJc3Vic3RpdHV0ZV9saW5lKGxpbmUpOworCQlmcHV0cyhsaW5lLCBvdXQpOworCX0KKwlmY2xvc2UoaW4pOworCWZjbG9zZShvdXQpOworCWlmIChvdXRmbikgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGNvbXBhcmVfZmlsZShvdXRmbiwgbmV3Zm4pKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIk5vIGNoYW5nZSwga2VlcGluZyAlcy5cbiIsIG91dGZuKTsKKwkJCWlmIChhZGp1c3RfdGltZXN0YW1wKSB7CisJCQkJaWYgKHN0YXQob3V0Zm4sICZzdGJ1ZikgPT0gMCkgeworCQkJCQlpZiAodmVyYm9zZSkKKwkJCQkJCXByaW50ZigiVXBkYXRpbmcgbW9kdGltZSBmb3IgJXNcbiIsIG91dGZuKTsKKwkJCQkJdXQuYWN0aW1lID0gc3RidWYuc3RfYXRpbWU7CisJCQkJCXV0Lm1vZHRpbWUgPSB0aW1lKDApOworCQkJCQlpZiAodXRpbWUob3V0Zm4sICZ1dCkgPCAwKQorCQkJCQkJcGVycm9yKCJ1dGltZSIpOworCQkJCX0KKwkJCX0KKwkJCXVubGluayhuZXdmbik7CisJCX0gZWxzZSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIkNyZWF0aW5nIG9yIHJlcGxhY2luZyAlcy5cbiIsIG91dGZuKTsKKwkJCXJlbmFtZShuZXdmbiwgb3V0Zm4pOworCQl9CisJCS8qIHNldCByZWFkLW9ubHkgdG8gYWxlcnQgdXNlciBpdCBpcyBhIGdlbmVyYXRlZCBmaWxlICovCisJCWlmIChzdGF0KG91dGZuLCAmc3QpID09IDApCisJCQljaG1vZChvdXRmbiwgc3Quc3RfbW9kZSAmIH4wMjIyKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdXRpbC9zdWJzdC5jb25mLmluIGIvZTJmc3Byb2dzL3V0aWwvc3Vic3QuY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGZkZTdhCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3V0aWwvc3Vic3QuY29uZi5pbgpAQCAtMCwwICsxLDIyIEBACitBV0sJCQlAQVdLQAorU0VECQkJQFNFREAKK0VUX0RJUgkJCUBFVF9ESVJACitTU19ESVIJCQlAU1NfRElSQAorRTJGU1BST0dTX01PTlRICQlARTJGU1BST0dTX01PTlRIQAorRTJGU1BST0dTX1lFQVIJCUBFMkZTUFJPR1NfWUVBUkAKK0UyRlNQUk9HU19WRVJTSU9OCUBFMkZTUFJPR1NfVkVSU0lPTkAKK1NJWkVPRl9MT05HX0xPTkcJQFNJWkVPRl9MT05HX0xPTkdACitTSVpFT0ZfTE9ORwkJQFNJWkVPRl9MT05HQAorU0laRU9GX0lOVAkJQFNJWkVPRl9JTlRACitTSVpFT0ZfU0hPUlQJCUBTSVpFT0ZfU0hPUlRACitkYXRhcm9vdGRpcgkJQGRhdGFyb290ZGlyQAorZGF0YWRpcgkJCUBkYXRhZGlyQAorcm9vdF9zeXNjb25mZGlyCQlAcm9vdF9zeXNjb25mZGlyQAorJGRhdGFyb290ZGlyCQlAZGF0YXJvb3RkaXJACiskcm9vdF9wcmVmaXgJCUByb290X3ByZWZpeEAKKyRwcmVmaXgJCQlAcHJlZml4QAorIyBFbmFibGUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBqb3VybmFsIGRldmljZSBta2UyZnMsIHR1bmUyZnMsIGFuZAorIyBlMmZzY2sncyBtYW4gcGFnZQorSkRFVgkJCQorIyBFbmFibGUgZG9jdW1lbnRhdGlvbiBmb3IgcXVvdGEgZmVhdHVyZSBpbiBta2UyZnMKK1FVT1RBX01BTl9DT01NRU5UCUBRVU9UQV9NQU5fQ09NTUVOVEAKZGlmZiAtLWdpdCBhL2UyZnNwcm9ncy91dGlsL3N5bWxpbmtzLmMgYi9lMmZzcHJvZ3MvdXRpbC9zeW1saW5rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjMzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9lMmZzcHJvZ3MvdXRpbC9zeW1saW5rcy5jCkBAIC0wLDAgKzEsMzg3IEBACisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmbmRlZiBfUE9TSVhfU09VUkNFCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgSEFWRV9NQUxMT0NfSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZuZGVmIFNfSVNMTksKKyNkZWZpbmUgU19JU0xOSyhtb2RlKSAoKChtb2RlKSAmIChfU19JRk1UKSkgPT0gKF9TX0lGTE5LKSkKKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIDEwMjQKKyNlbmRpZgorCisjZGVmaW5lIHByb2d2ZXIgIiVzOiBzY2FuL2NoYW5nZSBzeW1ib2xpYyBsaW5rcyAtIHYxLjMgLSBieSBNYXJrIExvcmRcblxuIgorc3RhdGljIGNoYXIgKnByb2duYW1lOworc3RhdGljIGludCB2ZXJib3NlID0gMCwgZml4X2xpbmtzID0gMCwgcmVjdXJzZSA9IDAsIGRlbGV0ZSA9IDAsIHNob3J0ZW4gPSAwLAorCQl0ZXN0aW5nID0gMCwgc2luZ2xlX2ZzID0gMTsKKworLyoKKyAqIHRpZHlwYXRoIHJlbW92ZXMgZXhjZXNzIHNsYXNoZXMgYW5kICIuIiByZWZlcmVuY2VzIGZyb20gYSBwYXRoIHN0cmluZworICovCisKK3N0YXRpYyBpbnQgc3Vic3RyIChjaGFyICpzLCBjaGFyICpvbGQsIGNoYXIgKm5ldykKK3sKKwljaGFyICp0bXAgPSBOVUxMOworCWludCBvbGRsZW4gPSBzdHJsZW4ob2xkKSwgbmV3bGVuID0gMDsKKworCWlmIChOVUxMID09IHN0cnN0cihzLCBvbGQpKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXcpCisJCW5ld2xlbiA9IHN0cmxlbihuZXcpOworCisJaWYgKG5ld2xlbiA+IG9sZGxlbikgeworCQlpZiAoKHRtcCA9IG1hbGxvYyhzdHJsZW4ocykpKSA9PSBOVUxMKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbW9yeVxuIik7CisJCQlleGl0ICgxKTsKKwkJfQorCX0KKworCXdoaWxlIChOVUxMICE9IChzID0gc3Ryc3RyKHMsIG9sZCkpKSB7CisJCWNoYXIgKnAsICpvbGRfcyA9IHM7CisKKwkJaWYgKG5ldykgeworCQkJaWYgKG5ld2xlbiA+IG9sZGxlbikKKwkJCQlvbGRfcyA9IHN0cmNweSh0bXAsIHMpOworCQkJcCA9IG5ldzsKKwkJCXdoaWxlICgqcCkKKwkJCQkqcysrID0gKnArKzsKKwkJfQorCQlwID0gb2xkX3MgKyBvbGRsZW47CisJCXdoaWxlICgoKnMrKyA9ICpwKyspKTsKKwl9CisJaWYgKHRtcCkKKwkJZnJlZSh0bXApOworCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgdGlkeV9wYXRoIChjaGFyICpwYXRoKQoreworCWludCB0aWRpZWQgPSAwOworCWNoYXIgKnMsICpwOworCisJcyA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOworCWlmIChzWzBdICE9ICcvJykgewkvKiB0bXAgdHJhaWxpbmcgc2xhc2ggc2ltcGxpZmllcyB0aGluZ3MgKi8KKwkJc1sxXSA9ICcvJzsKKwkJc1syXSA9ICdcMCc7CisJfQorCXdoaWxlIChzdWJzdHIocGF0aCwgIi8uLyIsICIvIikpCisJCXRpZGllZCA9IDE7CisJd2hpbGUgKHN1YnN0cihwYXRoLCAiLy8iLCAiLyIpKQorCQl0aWRpZWQgPSAxOworCisJd2hpbGUgKChwID0gc3Ryc3RyKHBhdGgsIi8uLi8iKSkgIT0gTlVMTCkgeworCQlzID0gcCszOworCQlmb3IgKHAtLTsgcCAhPSBwYXRoOyBwLS0pIGlmICgqcCA9PSAnLycpIGJyZWFrOworCQlpZiAoKnAgIT0gJy8nKQorCQkJYnJlYWs7CisJCXdoaWxlICgoKnArKyA9ICpzKyspKTsKKwkJdGlkaWVkID0gMTsKKwl9CisJaWYgKCpwYXRoID09ICdcMCcpCisJCXN0cmNweShwYXRoLCIvIik7CisJcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOworCWlmIChwICE9IHBhdGggJiYgKnAgPT0gJy8nKQorCQkqcC0tID0gJ1wwJzsJLyogcmVtb3ZlIHRtcCB0cmFpbGluZyBzbGFzaCAqLworCXdoaWxlIChwICE9IHBhdGggJiYgKnAgPT0gJy8nKSB7CS8qIHJlbW92ZSBhbnkgb3RoZXJzICovCisJCSpwLS0gPSAnXDAnOworCQl0aWRpZWQgPSAxOworCX0KKwl3aGlsZSAoIXN0cm5jbXAocGF0aCwiLi8iLDIpKSB7CisJCWZvciAocCA9IHBhdGgsIHMgPSBwYXRoKzI7ICgqcCsrID0gKnMrKyk7KTsKKwkJdGlkaWVkID0gMTsKKwl9CisJcmV0dXJuIHRpZGllZDsKK30KKworc3RhdGljIGludCBzaG9ydGVuX3BhdGggKGNoYXIgKnBhdGgsIGNoYXIgKmFic3BhdGgpCit7CisJc3RhdGljIGNoYXIgZGlyW1BBVEhfTUFYXTsKKwlpbnQgc2hvcnRlbmVkID0gMDsKKwljaGFyICpwOworCisJLyogZ2V0IHJpZCBvZiB1bm5lY2Vzc2FyeSAiLi4vZGlyIiBzZXF1ZW5jZXMgKi8KKwl3aGlsZSAoYWJzcGF0aCAmJiBzdHJsZW4oYWJzcGF0aCkgPiAxICYmIChwID0gc3Ryc3RyKHBhdGgsIi4uLyIpKSkgeworCQkvKiBmaW5kIGlubmVybW9zdCBvY2N1cmFuY2Ugb2YgIi4uL2RpciIsIGFuZCBzYXZlICJkaXIiICovCisJCWludCBzbGFzaGVzID0gMjsKKwkJY2hhciAqYSwgKnMsICpkID0gZGlyOworCQl3aGlsZSAoKHMgPSBzdHJzdHIocCszLCAiLi4vIikpKSB7CisJCQkrK3NsYXNoZXM7CisJCQlwID0gczsKKwkJfQorCQlzID0gcCszOworCQkqZCsrID0gJy8nOworCQl3aGlsZSAoKnMgJiYgKnMgIT0gJy8nKQorCQkJKmQrKyA9ICpzKys7CisJCSpkKysgPSAnLyc7CisJCSpkID0gJ1wwJzsKKwkJaWYgKCFzdHJjbXAoZGlyLCIvLyIpKQorCQkJYnJlYWs7CisJCS8qIG5vdGU6IHAgc3RpbGwgcG9pbnRzIGF0IC4uL2RpciAqLworCQlpZiAoKnMgIT0gJy8nIHx8ICEqKytzKQorCQkJYnJlYWs7CisJCWEgPSBhYnNwYXRoICsgc3RybGVuKGFic3BhdGgpIC0gMTsKKwkJd2hpbGUgKHNsYXNoZXMtLSA+IDApIHsKKwkJCWlmIChhIDw9IGFic3BhdGgpCisJCQkJZ290byB1Z2hoOworCQkJd2hpbGUgKCotLWEgIT0gJy8nKSB7CisJCQkJaWYgKGEgPD0gYWJzcGF0aCkKKwkJCQkJZ290byB1Z2hoOworCQkJfQorCQl9CisJCWlmIChzdHJuY21wKGRpciwgYSwgc3RybGVuKGRpcikpKQorCQkJYnJlYWs7CisJCXdoaWxlICgoKnArKyA9ICpzKyspKTsgLyogZGVsZXRlIHRoZSAuLi9kaXIgKi8KKwkJc2hvcnRlbmVkID0gMTsKKwl9Cit1Z2hoOgorCXJldHVybiBzaG9ydGVuZWQ7Cit9CisKKworc3RhdGljIHZvaWQgZml4X3N5bWxpbmsgKGNoYXIgKnBhdGgsIGRldl90IG15X2RldikKK3sKKwlzdGF0aWMgY2hhciBscGF0aFtQQVRIX01BWF0sIG5ld1tQQVRIX01BWF0sIGFic3BhdGhbUEFUSF9NQVhdOworCWNoYXIgKnAsICpucCwgKmxwLCAqdGFpbCwgKm1zZzsKKwlzdHJ1Y3Qgc3RhdCBzdGJ1ZiwgbHN0YnVmOworCWludCBjLCBmaXhfYWJzID0gMCwgZml4X21lc3N5ID0gMCwgZml4X2xvbmcgPSAwOworCisJaWYgKChjID0gcmVhZGxpbmsocGF0aCwgbHBhdGgsIHNpemVvZihscGF0aCkpKSA9PSAtMSkgeworCQlwZXJyb3IocGF0aCk7CisJCXJldHVybjsKKwl9CisJbHBhdGhbY10gPSAnXDAnOwkvKiByZWFkbGluayBkb2VzIG5vdCBudWxsIHRlcm1pbmF0ZSBpdCAqLworCisJLyogY29uc3RydWN0IHRoZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBsaW5rICovCisJYWJzcGF0aFswXSA9ICdcMCc7CisJaWYgKGxwYXRoWzBdICE9ICcvJykgeworCQlzdHJjYXQoYWJzcGF0aCxwYXRoKTsKKwkJYyA9IHN0cmxlbihhYnNwYXRoKTsKKwkJaWYgKChjID4gMCkgJiYgKGFic3BhdGhbYy0xXSA9PSAnLycpKQorCQkJYWJzcGF0aFtjLTFdID0gJ1wwJzsgLyogY3V0IHRyYWlsaW5nIC8gKi8KKwkJaWYgKChwID0gc3RycmNocihhYnNwYXRoLCcvJykpICE9IE5VTEwpCisJCQkqcCA9ICdcMCc7IC8qIGN1dCBsYXN0IGNvbXBvbmVudCAqLworCQlzdHJjYXQoYWJzcGF0aCwiLyIpOworCX0KKwlzdHJjYXQoYWJzcGF0aCxscGF0aCk7CisJKHZvaWQpIHRpZHlfcGF0aChhYnNwYXRoKTsKKworCS8qIGNoZWNrIGZvciB2YXJpb3VzIHRoaW5ncyAqLworCWlmIChzdGF0KGFic3BhdGgsICZzdGJ1ZikgPT0gLTEpIHsKKwkJcHJpbnRmKCJkYW5nbGluZzogJXMgLT4gJXNcbiIsIHBhdGgsIGxwYXRoKTsKKwkJaWYgKGRlbGV0ZSkgeworCQkJaWYgKHVubGluayAocGF0aCkpIHsKKwkJCQlwZXJyb3IocGF0aCk7IAorCQkJfSBlbHNlCisJCQkJcHJpbnRmKCJkZWxldGVkOiAgJXMgLT4gJXNcbiIsIHBhdGgsIGxwYXRoKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHNpbmdsZV9mcykKKwkJbHN0YXQoYWJzcGF0aCwgJmxzdGJ1Zik7IC8qIGlmIHRoZSBhYm92ZSBkaWRuJ3QgZmFpbCwgdGhlbiB0aGlzIHNob3VsZG4ndCAqLworCQorCWlmIChzaW5nbGVfZnMgJiYgbHN0YnVmLnN0X2RldiAhPSBteV9kZXYpIHsKKwkJbXNnID0gIm90aGVyX2ZzOiI7CisJfSBlbHNlIGlmIChscGF0aFswXSA9PSAnLycpIHsKKwkJbXNnID0gImFic29sdXRlOiI7CisJCWZpeF9hYnMgPSAxOworCX0gZWxzZSBpZiAodmVyYm9zZSkgeworCQltc2cgPSAicmVsYXRpdmU6IjsKKwl9IGVsc2UKKwkJbXNnID0gTlVMTDsKKwlmaXhfbWVzc3kgPSB0aWR5X3BhdGgoc3RyY3B5KG5ldyxscGF0aCkpOworCWlmIChzaG9ydGVuKQorCQlmaXhfbG9uZyA9IHNob3J0ZW5fcGF0aChuZXcsIHBhdGgpOworCWlmICghZml4X2FicykgeworCQlpZiAoZml4X21lc3N5KQorCQkJbXNnID0gIm1lc3N5OiAgICI7CisJCWVsc2UgaWYgKGZpeF9sb25nKQorCQkJbXNnID0gImxlbmd0aHk6ICI7CisJfQorCWlmIChtc2cgIT0gTlVMTCkKKwkJcHJpbnRmKCIlcyAlcyAtPiAlc1xuIiwgbXNnLCBwYXRoLCBscGF0aCk7CisJaWYgKCEoZml4X2xpbmtzIHx8IHRlc3RpbmcpIHx8ICEoZml4X21lc3N5IHx8IGZpeF9hYnMgfHwgZml4X2xvbmcpKQorCQlyZXR1cm47CisKKwlpZiAoZml4X2FicykgeworCQkvKiBjb252ZXJ0IGFuIGFic29sdXRlIGxpbmsgdG8gcmVsYXRpdmU6ICovCisJCS8qIHBvaW50IHRhaWwgYXQgZmlyc3QgcGFydCBvZiBscGF0aCB0aGF0IGRpZmZlcnMgZnJvbSBwYXRoICovCisJCS8qIHBvaW50IHAgICAgYXQgZmlyc3QgcGFydCBvZiBwYXRoICB0aGF0IGRpZmZlcnMgZnJvbSBscGF0aCAqLworCQkodm9pZCkgdGlkeV9wYXRoKGxwYXRoKTsKKwkJdGFpbCA9IGxwID0gbHBhdGg7CisJCXAgPSBwYXRoOworCQl3aGlsZSAoKnAgJiYgKCpwID09ICpscCkpIHsKKwkJCWlmICgqbHArKyA9PSAnLycpIHsKKwkJCQl0YWlsID0gbHA7CisJCQkJd2hpbGUgKCorK3AgPT0gJy8nKTsKKwkJCX0KKwkJfQorCisJCS8qIG5vdyBjcmVhdGUgbmV3LCB3aXRoICIuLi8icyBmb2xsb3dlZCBieSB0YWlsICovCisJCW5wID0gbmV3OworCQl3aGlsZSAoKnApIHsKKwkJCWlmICgqcCsrID09ICcvJykgeworCQkJCSpucCsrID0gJy4nOworCQkJCSpucCsrID0gJy4nOworCQkJCSpucCsrID0gJy8nOworCQkJCXdoaWxlICgqcCA9PSAnLycpICsrcDsKKwkJCX0KKwkJfQorCQlzdHJjcHkgKG5wLCB0YWlsKTsKKwkJKHZvaWQpIHRpZHlfcGF0aChuZXcpOworCQlpZiAoc2hvcnRlbikgKHZvaWQpIHNob3J0ZW5fcGF0aChuZXcsIHBhdGgpOworCX0KKwlzaG9ydGVuX3BhdGgobmV3LHBhdGgpOworCWlmICghdGVzdGluZykgeworCQlpZiAodW5saW5rIChwYXRoKSkgeworCQkJcGVycm9yKHBhdGgpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChzeW1saW5rKG5ldywgcGF0aCkpIHsKKwkJCXBlcnJvcihwYXRoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlwcmludGYoImNoYW5nZWQ6ICAlcyAtPiAlc1xuIiwgcGF0aCwgbmV3KTsKK30KKworc3RhdGljIHZvaWQgZGlyd2FsayAoY2hhciAqcGF0aCwgaW50IHBhdGhsZW4sIGRldl90IGRldikKK3sKKyAJY2hhciAqbmFtZTsKKwlESVIgKmRmZDsKKwlzdGF0aWMgc3RydWN0IHN0YXQgc3Q7CisJc3RhdGljIHN0cnVjdCBkaXJlbnQgKmRwOworCisJaWYgKChkZmQgPSBvcGVuZGlyKHBhdGgpKSA9PSBOVUxMKSB7CisJCXBlcnJvcihwYXRoKTsKKwkJcmV0dXJuOworCX0KKworCW5hbWUgPSBwYXRoICsgcGF0aGxlbjsKKwlpZiAoKihuYW1lLTEpICE9ICcvJykKKwkJKm5hbWUrKyA9ICcvJzsgCisKKwl3aGlsZSAoKGRwID0gcmVhZGRpcihkZmQpKSAhPSBOVUxMICkgeworCQlzdHJjcHkobmFtZSwgZHAtPmRfbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChuYW1lLCAiLiIpICYmIHN0cmNtcChuYW1lLCIuLiIpKSB7CisJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA9PSAtMSkgeworCQkJCXBlcnJvcihwYXRoKTsKKwkJCX0gZWxzZSBpZiAoc3Quc3RfZGV2ID09IGRldikgeworCQkJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQkJCWZpeF9zeW1saW5rIChwYXRoLCBkZXYpOworCQkJCX0gZWxzZSBpZiAocmVjdXJzZSAmJiBTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQkJCWRpcndhbGsocGF0aCwgc3RybGVuKHBhdGgpLCBkZXYpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gCisJY2xvc2VkaXIoZGZkKTsKKwlwYXRoW3BhdGhsZW5dID0gJ1wwJzsKK30KKworc3RhdGljIHZvaWQgdXNhZ2VfZXJyb3IgKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsIHByb2d2ZXIsIHByb2duYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOlx0JXMgWy1jZG9yc3R2XSBMSU5LfERJUiAuLi5cblxuIiwgcHJvZ25hbWUpOworCWZwcmludGYoc3RkZXJyLCAiRmxhZ3M6IgorCQkiXHQtYyA9PSBjaGFuZ2UgYWJzb2x1dGUvbWVzc3kgbGlua3MgdG8gcmVsYXRpdmVcbiIKKwkJIlx0LWQgPT0gZGVsZXRlIGRhbmdsaW5nIGxpbmtzXG4iCisJCSJcdC1vID09IHdhcm4gYWJvdXQgbGlua3MgYWNyb3NzIGZpbGUgc3lzdGVtc1xuIgorCQkiXHQtciA9PSByZWN1cnNlIGludG8gc3ViZGlyc1xuIgorCQkiXHQtcyA9PSBzaG9ydGVuIGxlbmd0aHkgbGlua3MgKGRpc3BsYXllZCBpbiBvdXRwdXQgb25seSB3aGVuIC1jIG5vdCBzcGVjaWZpZWQpXG4iCisJCSJcdC10ID09IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lIGJ5IC1jXG4iCisJCSJcdC12ID09IHZlcmJvc2UgKHNob3cgYWxsIHN5bWxpbmtzKVxuXG4iKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisjaWYgZGVmaW5lZCAoX0dOVV9TT1VSQ0UpICYmIGRlZmluZWQgKF9fR0xJQkNfXykKKwlzdGF0aWMgY2hhciBwYXRoW1BBVEhfTUFYKzJdOworCWNoYXIqIGN3ZCA9IGdldF9jdXJyZW50X2Rpcl9uYW1lKCk7CisjZWxzZQorCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVgrMl0sIGN3ZFtQQVRIX01BWCsyXTsKKyNlbmRpZgorCWludCBkaXJjb3VudCA9IDA7CisJY2hhciBjLCAqcDsKKworCWlmICAoKHByb2duYW1lID0gKGNoYXIgKikgc3RycmNocigqYXJndiwgJy8nKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwcm9nbmFtZSA9ICphcmd2OworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJvZ25hbWUrKzsKKworI2lmIGRlZmluZWQgKF9HTlVfU09VUkNFKSAmJiBkZWZpbmVkIChfX0dMSUJDX18pCisJaWYgKE5VTEwgPT0gY3dkKSB7CisJCWZwcmludGYoc3RkZXJyLCJnZXRfY3VycmVudF9kaXJfbmFtZSgpIGZhaWxlZFxuIik7CisjZWxzZQorCWlmIChOVUxMID09IGdldGN3ZChjd2QsUEFUSF9NQVgpKSB7CisJCWZwcmludGYoc3RkZXJyLCJnZXRjd2QoKSBmYWlsZWRcbiIpOworI2VuZGlmCisJCWV4aXQgKDEpOworCX0KKyNpZiBkZWZpbmVkIChfR05VX1NPVVJDRSkgJiYgZGVmaW5lZCAoX19HTElCQ19fKQorCWN3ZCA9IHJlYWxsb2MoY3dkLCBzdHJsZW4oY3dkKSsyKTsKKwlpZiAoY3dkID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJyZWFsbG9jKCkgZmFpbGVkXG4iKTsKKwkJZXhpdCAoMSk7CisJfQorI2VuZGlmCisJaWYgKCEqY3dkIHx8IGN3ZFtzdHJsZW4oY3dkKS0xXSAhPSAnLycpCisJCXN0cmNhdChjd2QsIi8iKTsKKworCXdoaWxlICgtLWFyZ2MpIHsKKwkJcCA9ICorK2FyZ3Y7CisJCWlmICgqcCA9PSAnLScpIHsKKwkJCWlmICgqKytwID09ICdcMCcpCisJCQkJdXNhZ2VfZXJyb3IoKTsKKwkJCXdoaWxlICgoYyA9ICpwKyspKSB7CisJCQkJICAgICBpZiAoYyA9PSAnYycpCWZpeF9saW5rcyA9IDE7CisJCQkJZWxzZSBpZiAoYyA9PSAnZCcpCWRlbGV0ZSAgICA9IDE7CisJCQkJZWxzZSBpZiAoYyA9PSAnbycpCXNpbmdsZV9mcyA9IDA7CisJCQkJZWxzZSBpZiAoYyA9PSAncicpCXJlY3Vyc2UgICA9IDE7CisJCQkJZWxzZSBpZiAoYyA9PSAncycpCXNob3J0ZW4gICA9IDE7CisJCQkJZWxzZSBpZiAoYyA9PSAndCcpCXRlc3RpbmcgICA9IDE7CisJCQkJZWxzZSBpZiAoYyA9PSAndicpCXZlcmJvc2UgICA9IDE7CisJCQkJZWxzZQkJCXVzYWdlX2Vycm9yKCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmICgqcCA9PSAnLycpCisJCQkJKnBhdGggPSAnXDAnOworCQkJZWxzZQorCQkJCXN0cmNweShwYXRoLGN3ZCk7CisJCQl0aWR5X3BhdGgoc3RyY2F0KHBhdGgsIHApKTsKKwkJCWlmIChsc3RhdChwYXRoLCAmc3QpID09IC0xKQorCQkJCXBlcnJvcihwYXRoKTsKKwkJCWVsc2UgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpCisJCQkJZml4X3N5bWxpbmsocGF0aCwgc3Quc3RfZGV2KTsKKwkJCWVsc2UKKwkJCQlkaXJ3YWxrKHBhdGgsIHN0cmxlbihwYXRoKSwgc3Quc3RfZGV2KTsKKwkJCSsrZGlyY291bnQ7CisJCX0KKwl9CisJaWYgKGRpcmNvdW50ID09IDApCisJCXVzYWdlX2Vycm9yKCk7CisJZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9lMmZzcHJvZ3MvdmVyc2lvbi5oIGIvZTJmc3Byb2dzL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE5MjAxCi0tLSAvZGV2L251bGwKKysrIGIvZTJmc3Byb2dzL3ZlcnNpb24uaApAQCAtMCwwICsxLDExIEBACisvKgorICogdmVyc2lvbi5oIC0tLSBjb250cm9scyB0aGUgdmVyc2lvbiBudW1iZXIgcHJpbnRlZCBieSB0aGUgZTJmcworICogcHJvZ3JhbXMuCisgKgorICogQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsCisgKiAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIGJ5IFRoZW9kb3JlIFRzJ28uICBUaGlzCisgKiBmaWxlIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdjIuCisgKi8KKworI2RlZmluZSBFMkZTUFJPR1NfVkVSU0lPTiAiMS40Mi45IgorI2RlZmluZSBFMkZTUFJPR1NfREFURSAiMjgtRGVjLTIwMTMiCmRpZmYgLS1naXQgYS9lMmZzcHJvZ3Mvd29yZHdyYXAucGwgYi9lMmZzcHJvZ3Mvd29yZHdyYXAucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3YzYyOAotLS0gL2Rldi9udWxsCisrKyBiL2UyZnNwcm9ncy93b3Jkd3JhcC5wbApAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgd29yZHdyYXAucGwgLS0tIGRvZXMgd29yZCB3cmFwCisjCit3aGlsZSAoPD4pIHsKKyAgICBpZiAoL14jLykgewkJIyBkb24ndCB3b3JkIHdyYXAgY29tbWVudHMKKwlwcmludDsKKwluZXh0OworICAgIH0KKyAgICBuZXh0IGlmICgvXiQvKTsJIyBza2lwIGJsYW5rIGxpbmVzCisgICAgJGxpbmVsZW4gPSAwOworICAgIEB3b3JkcyA9IHNwbGl0OworICAgIHdoaWxlIChkZWZpbmVkKCR3b3JkID0gc2hpZnQgQHdvcmRzKSkgeworCSR3b3JkID1+IHMjXCRcKHNyY2RpclwpL1wuXC4vdmVyc2lvbi5oI1wkXCh0b3Bfc3JjZGlyXCkvdmVyc2lvbi5oIzsKKwkkd29yZCA9fiBzI1wkXChzcmNkaXJcKS8uXC5cL1wuXC4vdmVyc2lvbi5oI1wkXCh0b3Bfc3JjZGlyXCkvdmVyc2lvbi5oIzsKKwkkd29yZCA9fiBzI1wkXChzcmNkaXJcKS8uXC5cL2V0L2NvbV9lcnIuaCNcJFwodG9wX3NyY2RpclwpL2xpYi9ldC9jb21fZXJyLmgjOworCWlmICgkbGluZWxlbiA+IDApIHsKKwkgICAgcHJpbnRmKCIgIik7CisJfQorCSRsZW4gPSBsZW5ndGgoJHdvcmQpICsgMTsKKwkkbGluZWxlbiArPSAkbGVuOworCWlmICgkbGluZWxlbiA+IDc4KSB7CisJICAgIHByaW50ZigiXFxcbiAiKTsKKwkgICAgJGxpbmVsZW4gPSAxKyRsZW47CisJfQorCXByaW50ZigiJXMiLCAkd29yZCk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30K